From: "Ying-Chun Liu (PaulLiu)" <paul...@debian.org>

When TEE is loaded, we need to restrict the memory usage based
on rom_pointer[0]

Signed-off-by: Ying-Chun Liu (PaulLiu) <paul...@debian.org>
Cc: Fabio Estevam <feste...@denx.de>
Cc: Frieder Schrempf <frieder.schre...@kontron.de>
Cc: uboot-imx <uboot-...@nxp.com>
---
 arch/arm/mach-imx/imx8m/soc.c | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/arch/arm/mach-imx/imx8m/soc.c b/arch/arm/mach-imx/imx8m/soc.c
index f2ddc834d4..863508776d 100644
--- a/arch/arm/mach-imx/imx8m/soc.c
+++ b/arch/arm/mach-imx/imx8m/soc.c
@@ -298,16 +298,26 @@ phys_size_t get_effective_memsize(void)
 
 ulong board_get_usable_ram_top(ulong total_size)
 {
+       ulong top_addr = PHYS_SDRAM + gd->ram_size;
+
        /*
         * Some IPs have their accessible address space restricted by
         * the interconnect. Let's make sure U-Boot only ever uses the
         * space below the 4G address boundary (which is 3GiB big),
         * even when the effective available memory is bigger.
         */
-       if (PHYS_SDRAM + gd->ram_size > 0x80000000)
-               return 0x80000000;
+       if (top_addr > 0x80000000)
+               top_addr = 0x80000000;
+
+       /*
+        * rom_pointer[0] stores the TEE memory start address.
+        * rom_pointer[1] stores the size TEE uses.
+        * We need to reserve the memory region for TEE.
+        */
+       if (rom_pointer[0] && rom_pointer[1] && top_addr > rom_pointer[0])
+               top_addr = rom_pointer[0];
 
-       return PHYS_SDRAM + gd->ram_size;
+       return top_addr;
 }
 
 static u32 get_cpu_variant_type(u32 type)
-- 
2.32.0

Reply via email to