summaryrefslogtreecommitdiff
path: root/plat
diff options
context:
space:
mode:
authorAmit Nagal <amit.nagal@amd.com>2023-09-04 21:53:59 -1200
committeramit nagal <amit.nagal@amd.com>2023-09-13 18:36:00 +0200
commit7ca7fb1bf0873824531a6eee2da1214b61496b02 (patch)
treea918a3485b7a9d7a7e2db3cedebd52d3e73e507d /plat
parent512e0be0d44b0af3c6bc98ef561b0513396bc277 (diff)
fix(xilinx): dynamic mmap region for dtb
mmap dtb region before usage and unmap it after usage. overall size(text,data,bss) of dtb gets reduced by 16 bytes in normal flow and 80 bytes in ddr flow. Signed-off-by: Amit Nagal <amit.nagal@amd.com> Change-Id: I411deff57ab141fc2978a2e916aec2d988cb8f9c
Diffstat (limited to 'plat')
-rw-r--r--plat/xilinx/common/plat_fdt.c22
-rw-r--r--plat/xilinx/versal/bl31_versal_setup.c3
-rw-r--r--plat/xilinx/versal/platform.mk5
3 files changed, 29 insertions, 1 deletions
diff --git a/plat/xilinx/common/plat_fdt.c b/plat/xilinx/common/plat_fdt.c
index 012aaa676..9903ac737 100644
--- a/plat/xilinx/common/plat_fdt.c
+++ b/plat/xilinx/common/plat_fdt.c
@@ -8,6 +8,7 @@
#include <common/fdt_fixup.h>
#include <common/fdt_wrappers.h>
#include <libfdt.h>
+#include <lib/xlat_tables/xlat_tables_v2.h>
#include <plat_fdt.h>
#include <platform_def.h>
@@ -24,6 +25,17 @@ void prepare_dtb(void)
if (IS_TFA_IN_OCM(BL31_BASE))
return;
+#if defined(PLAT_XLAT_TABLES_DYNAMIC)
+ ret = mmap_add_dynamic_region((unsigned long long)dtb,
+ (uintptr_t)dtb,
+ XILINX_OF_BOARD_DTB_MAX_SIZE,
+ MT_MEMORY | MT_RW | MT_NS);
+ if (ret != 0) {
+ WARN("Failed to add dynamic region for dtb: error %d\n", ret);
+ return;
+ }
+#endif
+
/* Return if no device tree is detected */
if (fdt_check_header(dtb) != 0) {
NOTICE("Can't read DT at %p\n", dtb);
@@ -49,5 +61,15 @@ void prepare_dtb(void)
}
clean_dcache_range((uintptr_t)dtb, fdt_blob_size(dtb));
+
+#if defined(PLAT_XLAT_TABLES_DYNAMIC)
+ ret = mmap_remove_dynamic_region((uintptr_t)dtb,
+ XILINX_OF_BOARD_DTB_MAX_SIZE);
+ if (ret != 0) {
+ WARN("Failed to remove dynamic region for dtb: error %d\n", ret);
+ return;
+ }
+#endif
+
INFO("Changed device tree to advertise PSCI and reserved memories.\n");
}
diff --git a/plat/xilinx/versal/bl31_versal_setup.c b/plat/xilinx/versal/bl31_versal_setup.c
index 6cb529b3a..c50f06f65 100644
--- a/plat/xilinx/versal/bl31_versal_setup.c
+++ b/plat/xilinx/versal/bl31_versal_setup.c
@@ -224,7 +224,8 @@ void bl31_plat_arch_setup(void)
plat_arm_interconnect_enter_coherency();
const mmap_region_t bl_regions[] = {
-#if (defined(XILINX_OF_BOARD_DTB_ADDR) && !IS_TFA_IN_OCM(BL31_BASE))
+#if (defined(XILINX_OF_BOARD_DTB_ADDR) && !IS_TFA_IN_OCM(BL31_BASE) && \
+ (!defined(PLAT_XLAT_TABLES_DYNAMIC)))
MAP_REGION_FLAT(XILINX_OF_BOARD_DTB_ADDR, XILINX_OF_BOARD_DTB_MAX_SIZE,
MT_MEMORY | MT_RW | MT_NS),
#endif
diff --git a/plat/xilinx/versal/platform.mk b/plat/xilinx/versal/platform.mk
index c936220e2..a0527134f 100644
--- a/plat/xilinx/versal/platform.mk
+++ b/plat/xilinx/versal/platform.mk
@@ -49,6 +49,11 @@ ifdef XILINX_OF_BOARD_DTB_ADDR
$(eval $(call add_define,XILINX_OF_BOARD_DTB_ADDR))
endif
+PLAT_XLAT_TABLES_DYNAMIC := 0
+ifeq (${PLAT_XLAT_TABLES_DYNAMIC},1)
+$(eval $(call add_define,PLAT_XLAT_TABLES_DYNAMIC))
+endif
+
PLAT_INCLUDES := -Iinclude/plat/arm/common/ \
-Iplat/xilinx/common/include/ \
-Iplat/xilinx/common/ipi_mailbox_service/ \