diff options
Diffstat (limited to 'arch/powerpc')
-rw-r--r-- | arch/powerpc/lib/bootm.c | 22 |
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; |