[PATCH 0/1] imx8m: Restrict usable memory based on rom_pointer[0]

From: "Ying-Chun Liu (PaulLiu)" paulliu@debian.org
When TEE is loaded, we need to restrict the memory usage based on rom_pointer[0]
This patch fixes a regression on Compulab IoT gate imx8 hang when OPTEE runs.
Ying-Chun Liu (PaulLiu) (1): imx8m: Restrict usable memory based on rom_pointer[0]
arch/arm/mach-imx/imx8m/soc.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-)

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 --- 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)

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)

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
Applied to u-boot-imx, master, thanks !
Best regards, Stefano Babic
participants (3)
-
Frieder Schrempf
-
sbabic@denx.de
-
Ying-Chun Liu