summaryrefslogtreecommitdiff
path: root/common/board_r.c
diff options
context:
space:
mode:
Diffstat (limited to 'common/board_r.c')
-rw-r--r--common/board_r.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/common/board_r.c b/common/board_r.c
index db0c5cb8032..8d69db1875d 100644
--- a/common/board_r.c
+++ b/common/board_r.c
@@ -170,7 +170,27 @@ static int initr_reloc_global_data(void)
efi_save_gd();
efi_runtime_relocate(gd->relocaddr, NULL);
+
#endif
+ /*
+ * We are done with all relocations change the permissions of the binary
+ * NOTE: __start_rodata etc are defined in arm64 linker scripts and
+ * sections.h. If you want to add support for your platform you need to
+ * add the symbols on your linker script, otherwise they will point to
+ * random addresses.
+ *
+ */
+ if (IS_ENABLED(CONFIG_MMU_PGPROT)) {
+ pgprot_set_attrs((phys_addr_t)(uintptr_t)(__start_rodata),
+ (size_t)(uintptr_t)(__end_rodata - __start_rodata),
+ MMU_ATTR_RO);
+ pgprot_set_attrs((phys_addr_t)(uintptr_t)(__start_data),
+ (size_t)(uintptr_t)(__end_data - __start_data),
+ MMU_ATTR_RW);
+ pgprot_set_attrs((phys_addr_t)(uintptr_t)(__text_start),
+ (size_t)(uintptr_t)(__text_end - __text_start),
+ MMU_ATTR_RX);
+ }
return 0;
}