Message ID | 20210823024306.2046708-2-grandpaul@gmail.com |
---|---|
State | New |
Headers | show |
Series | imx8m: Restrict usable memory based on rom_pointer[0] | expand |
On 23.08.21 04:43, Ying-Chun Liu wrote: > From: "Ying-Chun Liu (PaulLiu)" <paulliu@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) <paulliu@debian.org> > Cc: Fabio Estevam <festevam@denx.de> > Cc: Frieder Schrempf <frieder.schrempf@kontron.de> > Cc: uboot-imx <uboot-imx@nxp.com> Reviewed-by: Frieder Schrempf <frieder.schrempf@kontron.de> > --- > 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) >
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)