diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2013-09-11 12:04:40 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2013-09-21 10:00:00 +0200 |
commit | e0be72d3cd3924c369e242637744d7864f79e660 (patch) | |
tree | bd254a6fc5620e6aec9895efc6be89acbbe188c0 /arch/arm/cpu | |
parent | fe4117357f8f304a08b957eded8ede9db8dafdcf (diff) | |
download | barebox-e0be72d3cd3924c369e242637744d7864f79e660.tar.gz barebox-e0be72d3cd3924c369e242637744d7864f79e660.tar.xz |
ARM: invalidate caches thoroughly
The data caches should be invalided once during startup. This should
also be done when we do not have the MMU enabled in barebox because
the Kernel does not invalidate the caches during start.
To make this sure this patch enables the arm_early_mmu_cache_invalidate
function even if MMU support is disabled. Additionally this patch adds
calls to arm_early_mmu_cache_invalidate in start.c and uncompress.c.
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'arch/arm/cpu')
-rw-r--r-- | arch/arm/cpu/Makefile | 6 | ||||
-rw-r--r-- | arch/arm/cpu/start.c | 4 | ||||
-rw-r--r-- | arch/arm/cpu/uncompress.c | 2 |
3 files changed, 8 insertions, 4 deletions
diff --git a/arch/arm/cpu/Makefile b/arch/arm/cpu/Makefile index c3635a1557..aba201bb9d 100644 --- a/arch/arm/cpu/Makefile +++ b/arch/arm/cpu/Makefile @@ -10,7 +10,7 @@ obj-$(CONFIG_CMD_ARM_CPUINFO) += cpuinfo.o obj-$(CONFIG_CMD_ARM_MMUINFO) += mmuinfo.o obj-$(CONFIG_OFDEVICE) += dtb.o obj-$(CONFIG_MMU) += mmu.o cache.o mmu-early.o -pbl-$(CONFIG_MMU) += cache.o mmu-early.o +pbl-$(CONFIG_MMU) += mmu-early.o obj-$(CONFIG_CPU_32v4T) += cache-armv4.o pbl-$(CONFIG_CPU_32v4T) += cache-armv4.o obj-$(CONFIG_CPU_32v5) += cache-armv5.o @@ -25,7 +25,7 @@ pbl-y += setupc.o pbl-$(CONFIG_PBL_SINGLE_IMAGE) += start-pbl.o pbl-$(CONFIG_PBL_MULTI_IMAGES) += start-images.o uncompress.o -obj-y += common.o -pbl-y += common.o +obj-y += common.o cache.o +pbl-y += common.o cache.o lwl-y += lowlevel.o diff --git a/arch/arm/cpu/start.c b/arch/arm/cpu/start.c index 1f397ec789..f8d343f4ec 100644 --- a/arch/arm/cpu/start.c +++ b/arch/arm/cpu/start.c @@ -70,8 +70,10 @@ static noinline __noreturn void __start(uint32_t membase, uint32_t memsize, endmem &= ~0x3fff; endmem -= SZ_16K; /* ttb */ - if (!IS_ENABLED(CONFIG_PBL_IMAGE)) + if (!IS_ENABLED(CONFIG_PBL_IMAGE)) { + arm_early_mmu_cache_invalidate(); mmu_early_enable(membase, memsize, endmem); + } } /* diff --git a/arch/arm/cpu/uncompress.c b/arch/arm/cpu/uncompress.c index b401f8efe2..b0819c7369 100644 --- a/arch/arm/cpu/uncompress.c +++ b/arch/arm/cpu/uncompress.c @@ -54,6 +54,8 @@ static void noinline uncompress(uint32_t membase, uint32_t *ptr; void *pg_start; + arm_early_mmu_cache_invalidate(); + endmem -= STACK_SIZE; /* stack */ if (IS_ENABLED(CONFIG_PBL_RELOCATABLE)) |