summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/arch/ppc/boot/boot.c9
-rw-r--r--src/arch/ppc/init/ppc_main.c11
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 */