memtest can call remap_range to map regions being tested as uncached, but remap_range did not take care to evict any stale cache lines. Do this now. This fixes an issue of SELFTEST_MMU failing on an i.MX8MN, when running memtest on an uncached region that was previously memtested while being cached. Fixes: 3100ea146688 ("ARM: rework MMU support") Fixes: 7cc98fbb6128 ("arm: cpu: add basic arm64 mmu support") Signed-off-by: Ahmad Fatoum <a.fatoum@xxxxxxxxxxxxxx> --- arch/arm/cpu/mmu_32.c | 4 ++++ arch/arm/cpu/mmu_64.c | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/arch/arm/cpu/mmu_32.c b/arch/arm/cpu/mmu_32.c index a324ebf71a55..c4e5a3bb0ab2 100644 --- a/arch/arm/cpu/mmu_32.c +++ b/arch/arm/cpu/mmu_32.c @@ -327,6 +327,10 @@ static void early_remap_range(u32 addr, size_t size, unsigned map_type) int arch_remap_range(void *virt_addr, phys_addr_t phys_addr, size_t size, unsigned map_type) { __arch_remap_range(virt_addr, phys_addr, size, map_type); + + if (map_type == MAP_UNCACHED) + dma_inv_range(virt_addr, size); + return 0; } diff --git a/arch/arm/cpu/mmu_64.c b/arch/arm/cpu/mmu_64.c index 940e0e914c43..63e70963224a 100644 --- a/arch/arm/cpu/mmu_64.c +++ b/arch/arm/cpu/mmu_64.c @@ -191,6 +191,10 @@ int arch_remap_range(void *virt_addr, phys_addr_t phys_addr, size_t size, unsign return -EINVAL; create_sections((uint64_t)virt_addr, phys_addr, (uint64_t)size, attrs); + + if (flags == MAP_UNCACHED) + dma_inv_range(virt_addr, size); + return 0; } -- 2.39.2