diff options
author | Amit Nagal <amit.nagal@amd.com> | 2023-09-04 21:53:59 -1200 |
---|---|---|
committer | amit nagal <amit.nagal@amd.com> | 2023-09-13 18:36:00 +0200 |
commit | 7ca7fb1bf0873824531a6eee2da1214b61496b02 (patch) | |
tree | a918a3485b7a9d7a7e2db3cedebd52d3e73e507d | |
parent | 512e0be0d44b0af3c6bc98ef561b0513396bc277 (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
-rw-r--r-- | plat/xilinx/common/plat_fdt.c | 22 | ||||
-rw-r--r-- | plat/xilinx/versal/bl31_versal_setup.c | 3 | ||||
-rw-r--r-- | plat/xilinx/versal/platform.mk | 5 |
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/ \ |