diff options
author | Dave Liu <daveliu@freescale.com> | 2008-12-02 11:48:51 +0800 |
---|---|---|
committer | Scott Wood <scottwood@freescale.com> | 2009-01-23 10:32:50 -0600 |
commit | c70564e6b1bd08f3230182392238907f3531a87e (patch) | |
tree | 08210e54577641c2567a0bcf3ad981855df43dea /nand_spl/nand_boot_fsl_elbc.c | |
parent | 50657c273278f74378e1ac39b41d612b92fdffa0 (diff) | |
download | u-boot-imx-c70564e6b1bd08f3230182392238907f3531a87e.zip u-boot-imx-c70564e6b1bd08f3230182392238907f3531a87e.tar.gz u-boot-imx-c70564e6b1bd08f3230182392238907f3531a87e.tar.bz2 |
NAND: Fix cache and memory inconsistency issue
We load the secondary stage u-boot image from NAND to
system memory by nand_load, but we did not flush d-cache
to memory, nor invalidate i-cache before we jump to RAM.
When the system has cache enabled and the TLB/page attribute
of system memory is cacheable, it will cause issues.
- 83xx family is using the d-cache lock, so all of d-cache
access is cache-inhibited. so you can't see the issue.
- 85xx family is using d-cache, i-cache enable, partial
cache lock. you will see the issue.
This patch fixes the cache issue.
Signed-off-by: Dave Liu <daveliu@freescale.com>
Signed-off-by: Scott Wood <scottwood@freescale.com>
Diffstat (limited to 'nand_spl/nand_boot_fsl_elbc.c')
-rw-r--r-- | nand_spl/nand_boot_fsl_elbc.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/nand_spl/nand_boot_fsl_elbc.c b/nand_spl/nand_boot_fsl_elbc.c index 4a961ea..0d0c44e 100644 --- a/nand_spl/nand_boot_fsl_elbc.c +++ b/nand_spl/nand_boot_fsl_elbc.c @@ -143,6 +143,11 @@ void nand_boot(void) * Jump to U-Boot image */ puts("transfering control\n"); + /* + * Clean d-cache and invalidate i-cache, to + * make sure that no stale data is executed. + */ + flush_cache(CONFIG_SYS_NAND_U_BOOT_DST, CONFIG_SYS_NAND_U_BOOT_SIZE); uboot = (void *)CONFIG_SYS_NAND_U_BOOT_START; uboot(); } |