From b44e26baa7e85aa178de2ea276f44891cb8baa8d Mon Sep 17 00:00:00 2001 From: Kinsey Moore Date: Fri, 10 Feb 2023 15:28:33 -0600 Subject: bsps/aarch64: Flush cache before disabling MMU To ensure data consistency, the cache much be flushed before disabling the MMU. When the MMU is disabled, all accesses are treated as non-cachced and thus will bypass the cache. --- bsps/aarch64/include/bsp/aarch64-mmu.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'bsps/aarch64/include/bsp/aarch64-mmu.h') diff --git a/bsps/aarch64/include/bsp/aarch64-mmu.h b/bsps/aarch64/include/bsp/aarch64-mmu.h index ebc224b9e1..2101ef4ae0 100644 --- a/bsps/aarch64/include/bsp/aarch64-mmu.h +++ b/bsps/aarch64/include/bsp/aarch64-mmu.h @@ -420,7 +420,13 @@ aarch64_mmu_disable( void ) { uint64_t sctlr; - /* Enable MMU and cache */ + /* + * Flush data cache before disabling the MMU. While the MMU is disabled, all + * accesses are treated as uncached device memory. + */ + rtems_cache_flush_entire_data(); + + /* Disable MMU */ sctlr = _AArch64_Read_sctlr_el1(); sctlr &= ~(AARCH64_SCTLR_EL1_M); _AArch64_Write_sctlr_el1( sctlr ); -- cgit v1.2.3