[PATCH 2/4] arm: mmu: traverse reserved mem map as uncached

Rouven Czerwinski r.czerwinski at pengutronix.de
Mon Nov 2 04:30:00 EST 2020


Traverse the reserved memory map and map areas which are marked with
uncached as uncached (and thus noexec).

Signed-off-by: Rouven Czerwinski <r.czerwinski at pengutronix.de>
---
 arch/arm/cpu/mmu.c | 14 ++++++++++++++
 include/of.h       |  5 +++++
 2 files changed, 19 insertions(+)

diff --git a/arch/arm/cpu/mmu.c b/arch/arm/cpu/mmu.c
index 6af228505d..5974e1e38a 100644
--- a/arch/arm/cpu/mmu.c
+++ b/arch/arm/cpu/mmu.c
@@ -17,6 +17,7 @@
 #include <memory.h>
 #include <asm/system_info.h>
 #include <asm/sections.h>
+#include <of.h>
 
 #include "mmu.h"
 
@@ -393,6 +394,8 @@ static void vectors_init(void)
 void __mmu_init(bool mmu_on)
 {
 	struct memory_bank *bank;
+	struct of_reserve_map *res_map;
+	int i;
 
 	arm_set_cache_functions();
 
@@ -453,6 +456,17 @@ void __mmu_init(bool mmu_on)
 		__mmu_cache_flush();
 	}
 
+	res_map = of_get_reserve_map();
+	if (res_map) {
+		for (i = 0; i < res_map->num_entries; i++) {
+			if (res_map->uncached & BIT(i)) {
+				create_sections(ttb, res_map->start[i],
+						res_map->end[i],
+						PMD_SECT_DEF_UNCACHED);
+			}
+		}
+	}
+
 	__mmu_cache_on();
 }
 
diff --git a/include/of.h b/include/of.h
index 5d7f54fb36..3d8c26f319 100644
--- a/include/of.h
+++ b/include/of.h
@@ -1042,6 +1042,11 @@ static inline int of_firmware_load_overlay(struct device_node *overlay, const ch
 {
 	return -ENOSYS;
 }
+
+static inline struct of_reserve_map *of_get_reserve_map(void)
+{
+	return NULL;
+}
 #endif
 
 #endif /* __OF_H */
-- 
2.28.0




More information about the barebox mailing list