]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
arm: armv8: invalidate dcache entries on dcache_enable
authorAnshul Dalal <anshuld@ti.com>
Fri, 17 Oct 2025 13:15:26 +0000 (18:45 +0530)
committerTom Rini <trini@konsulko.com>
Wed, 22 Oct 2025 18:05:52 +0000 (12:05 -0600)
In dcache_enable, currently the dcache entries are only invalidated when
the MMU is not enabled. This causes issues when dcache_enable is called
with the MMU already configured, in such cases the existing dcache
entries are not flushed which might result in un-expected behavior.

This patch invalidates the cache entries on every call of dcache_enable
before enabling dcache (by setting CR_C). This makes dcache_enable
behave similar to icache_enable as well.

Reviewed-by: Dhruva Gole <d-gole@ti.com>
Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
Signed-off-by: Anshul Dalal <anshuld@ti.com>
Tested-by: Wadim Egorov <w.egorov@phytec.de>
arch/arm/cpu/armv8/cache_v8.c

index a7899857658453bd2d4de4adb7793b73ec325c5f..74c78cb2fb0bcb0a089cb0f03736a7a2888cf878 100644 (file)
@@ -830,16 +830,15 @@ void flush_dcache_range(unsigned long start, unsigned long stop)
 void dcache_enable(void)
 {
        /* The data cache is not active unless the mmu is enabled */
-       if (!(get_sctlr() & CR_M)) {
-               invalidate_dcache_all();
-               __asm_invalidate_tlb_all();
+       if (!mmu_status())
                mmu_setup();
-       }
 
        /* Set up page tables only once (it is done also by mmu_setup()) */
        if (!gd->arch.tlb_fillptr)
                setup_all_pgtables();
 
+       invalidate_dcache_all();
+       __asm_invalidate_tlb_all();
        set_sctlr(get_sctlr() | CR_C);
 }