summaryrefslogtreecommitdiff
path: root/arch/powerpc/lib
diff options
context:
space:
mode:
Diffstat (limited to 'arch/powerpc/lib')
-rw-r--r--arch/powerpc/lib/bootm.c22
1 files changed, 16 insertions, 6 deletions
diff --git a/arch/powerpc/lib/bootm.c b/arch/powerpc/lib/bootm.c
index 8233f1f..efcfe84 100644
--- a/arch/powerpc/lib/bootm.c
+++ b/arch/powerpc/lib/bootm.c
@@ -174,6 +174,18 @@ void arch_lmb_reserve(struct lmb *lmb)
return ;
}
+static void boot_prep_linux(bootm_headers_t *images)
+{
+#ifdef CONFIG_MP
+ /*
+ * if we are MP make sure to flush the device tree so any changes are
+ * made visibile to all other cores. In AMP boot scenarios the cores
+ * might not be HW cache coherent with each other.
+ */
+ flush_cache((unsigned long)images->ft_addr, images->ft_len);
+#endif
+}
+
static int boot_cmdline_linux(bootm_headers_t *images)
{
ulong of_size = images->ft_len;
@@ -329,19 +341,17 @@ int do_bootm_linux(int flag, int argc, char * const argv[], bootm_headers_t *ima
return 0;
}
- /*
- * We do nothing & report success to retain compatiablity with older
- * versions of u-boot in which this use to flush the dcache on MP
- * systems
- */
- if (flag & BOOTM_STATE_OS_PREP)
+ if (flag & BOOTM_STATE_OS_PREP) {
+ boot_prep_linux(images);
return 0;
+ }
if (flag & BOOTM_STATE_OS_GO) {
boot_jump_linux(images);
return 0;
}
+ boot_prep_linux(images);
ret = boot_body_linux(images);
if (ret)
return ret;