diff options
author | Greg Watson <jarrah@users.sourceforge.net> | 2004-03-07 17:38:43 +0000 |
---|---|---|
committer | Greg Watson <jarrah@users.sourceforge.net> | 2004-03-07 17:38:43 +0000 |
commit | c762e55fc9324299f993be7c4e1dfd56d07b3103 (patch) | |
tree | 17599b9de7dab89fd208f8289541f1b22d0c4aba | |
parent | 7780fc6404defb1ffdada30b441c876e8073c6e2 (diff) |
fix caching problem
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@1382 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
-rw-r--r-- | src/arch/ppc/boot/boot.c | 9 | ||||
-rw-r--r-- | src/arch/ppc/init/ppc_main.c | 11 |
2 files changed, 12 insertions, 8 deletions
diff --git a/src/arch/ppc/boot/boot.c b/src/arch/ppc/boot/boot.c index 860576370b..1a1d982fc8 100644 --- a/src/arch/ppc/boot/boot.c +++ b/src/arch/ppc/boot/boot.c @@ -72,6 +72,13 @@ void jmp_to_elf_entry(void *entry, unsigned long buffer) void (*kernel_entry)(void); kernel_entry = entry; + /* + * Kernel will invalidate and disable dcache immediately on + * entry. This is bad if we've been using it, which we + * have. Make sure it is flushed to memory. + */ + flush_dcache(); + /* On ppc we don't currently support loading over LinuxBIOS. * So ignore the buffer. */ @@ -79,5 +86,3 @@ void jmp_to_elf_entry(void *entry, unsigned long buffer) /* Jump to kernel */ kernel_entry(); } - - diff --git a/src/arch/ppc/init/ppc_main.c b/src/arch/ppc/init/ppc_main.c index 268e21436a..f7405fad33 100644 --- a/src/arch/ppc/init/ppc_main.c +++ b/src/arch/ppc/init/ppc_main.c @@ -33,6 +33,11 @@ void ppc_main(void) sdram_init(); /* + * Flush cache now that memory is enabled. + */ + flush_dcache(); + + /* * Relocate payload (text & data) if necessary */ if (_liseg != _iseg) { @@ -42,12 +47,6 @@ void ppc_main(void) *to++ = *from++; } - /* - * Flush cache to memory because linux will try and - * invalidate it. - */ - flush_dcache(); - payload(); /* NOT REACHED */ |