arm: armv8: mmu: export mmu_setup
The mmu_setup function configures the page tables based on the board supplied mem_map struct array. It is called implicitly as part of dcache_enable but this limits us to only be able to use APIs such as mmu_change_region_attr only after caches are enabled. This might lead to speculative accesses before we can unmap a region that is marked as cacheable in the static memory map. Therefore this patch exports the mmu_setup function in mmu.h allowing users to have more control over when the mmu is configured. For K3 specifically this allows for the following configuration sequence as part of enable_caches: static mem_map fixups (TODO) -> mmu_setup -> carveouts using mmu_change_region_attr (TODO) -> icache/dcache enable 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>
This commit is contained in:
@@ -197,6 +197,11 @@ struct mm_region {
|
||||
extern struct mm_region *mem_map;
|
||||
void setup_pgtables(void);
|
||||
u64 get_tcr(u64 *pips, u64 *pva_bits);
|
||||
|
||||
/**
|
||||
* mmu_setup() - Sets up the mmu page tables as per mem_map
|
||||
*/
|
||||
void mmu_setup(void);
|
||||
#endif
|
||||
|
||||
#endif /* _ASM_ARMV8_MMU_H_ */
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
#include <soc.h>
|
||||
#include <dm/uclass-internal.h>
|
||||
#include <dm/device-internal.h>
|
||||
#include <asm/armv8/mmu.h>
|
||||
|
||||
#define PROC_BOOT_CTRL_FLAG_R5_CORE_HALT 0x00000001
|
||||
#define PROC_BOOT_STATUS_FLAG_R5_WFI 0x00000002
|
||||
@@ -261,6 +262,8 @@ void board_prep_linux(struct bootm_headers *images)
|
||||
|
||||
void enable_caches(void)
|
||||
{
|
||||
mmu_setup();
|
||||
|
||||
icache_enable();
|
||||
dcache_enable();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user