Re: [Uboot-stm32] [PATCH] stm32mp: Reserve OPTEE area in EFI memory map
On 4/19/24 09:44, Patrice CHOTARD wrote: > > > On 4/17/24 09:45, Heinrich Schuchardt wrote: >> On 17.04.24 09:25, Patrick DELAUNAY wrote: >>> Hi, >>> >>> On 3/8/24 11:12, Patrice Chotard wrote: Since commit 7b78d6438a2b3 ("efi_loader: Reserve unaccessible memory") memory region above ram_top is tagged in EFI memory map as EFI_BOOT_SERVICES_DATA. In case of STM32MP1 platform, above ram_top, there is one reserved-memory region tagged "no-map" dedicated to OP-TEE (addr=de00 size=200). Before booting kernel, EFI memory map is first built, the OPTEE region is tagged as EFI_BOOT_SERVICES_DATA and when reserving LMB, the tag LMB_NONE is used. Then after, the LMB are completed by boot_fdt_add_mem_rsv_regions() which try to add again the same OPTEE region (addr=de00 size=200) but now with LMB_NOMAP tag which produces the following error message : "ERROR: reserving fdt memory region failed (addr=de00 size=200 flags=4)" To avoid this, OPTEE area shouldn't be used by EFI, so we need to mark it as reserved. Signed-off-by: Patrice Chotard --- arch/arm/mach-stm32mp/dram_init.c | 12 1 file changed, 12 insertions(+) diff --git a/arch/arm/mach-stm32mp/dram_init.c b/arch/arm/mach-stm32mp/dram_init.c index fb1208fc5d5..f67f54f2ae0 100644 --- a/arch/arm/mach-stm32mp/dram_init.c +++ b/arch/arm/mach-stm32mp/dram_init.c @@ -7,6 +7,7 @@ #include #include +#include #include #include #include @@ -75,3 +76,14 @@ phys_addr_t board_get_usable_ram_top(phys_size_t total_size) return reg + size; } + +void efi_add_known_memory(void) +{ + if (IS_ENABLED(CONFIG_EFI_LOADER)) + /* + * Memory over ram_top is reserved to OPTEE. + * Declare to EFI only memory area below ram_top + */ + efi_add_memory_map(gd->ram_base, gd->ram_top - gd->ram_base, + EFI_CONVENTIONAL_MEMORY); >> >> With this change the EFI memory map passed to the operating system will >> not contain any memory above gd->ram_top. Is this really your intent? >> Don't you have any memory above 0xe000? > > Hi Heinrich > > On stm32mp157x-dk and stm32mp135x-dk boards, there is no memory above > 0xe000. > But, on stm32mp157x-ed1 or stm32mp157x-ev1, you are right, we got memory > above 0xe000. > > I will rework this patch to take into account memory that could be present > above OPTEE area. After double checking, this patch is correct but i need to update the commit message. In fact for stm32mp157x-dk and stm32mp135x-dk boards, there is 512MB of memory (0xc000 0x2000), OPTEE is located at the end of memory : 0xde00 0x0200 But for stm32mp157c-ev1, there is 1GB of memory (0xC000 0x4000), and identically, OPTEE is located at the end of memory : 0xfe00 0x200 So in both cases, above OPTEE reserved-memory area, there is no more free memory. Thanks Patrice > > Thanks for pointing this > Patrice > >> >> Best regards >> >> Heinrich >> +} >>> >>> >>> >>> Reviewed-by: Patrick Delaunay >>> >>> Thanks >>> Patrick >>> >> > ___ > Uboot-stm32 mailing list > uboot-st...@st-md-mailman.stormreply.com > https://st-md-mailman.stormreply.com/mailman/listinfo/uboot-stm32
Re: [PATCH] stm32mp: Reserve OPTEE area in EFI memory map
On 4/17/24 09:45, Heinrich Schuchardt wrote: > On 17.04.24 09:25, Patrick DELAUNAY wrote: >> Hi, >> >> On 3/8/24 11:12, Patrice Chotard wrote: >>> Since commit 7b78d6438a2b3 ("efi_loader: Reserve unaccessible memory") >>> memory region above ram_top is tagged in EFI memory map as >>> EFI_BOOT_SERVICES_DATA. >>> In case of STM32MP1 platform, above ram_top, there is one reserved-memory >>> region tagged "no-map" dedicated to OP-TEE (addr=de00 size=200). >>> >>> Before booting kernel, EFI memory map is first built, the OPTEE region is >>> tagged as EFI_BOOT_SERVICES_DATA and when reserving LMB, the tag LMB_NONE >>> is used. >>> >>> Then after, the LMB are completed by boot_fdt_add_mem_rsv_regions() >>> which try to add again the same OPTEE region (addr=de00 size=200) >>> but now with LMB_NOMAP tag which produces the following error message : >>> >>> "ERROR: reserving fdt memory region failed (addr=de00 size=200 >>> flags=4)" >>> >>> To avoid this, OPTEE area shouldn't be used by EFI, so we need to mark >>> it as reserved. >>> >>> Signed-off-by: Patrice Chotard >>> --- >>> >>> arch/arm/mach-stm32mp/dram_init.c | 12 >>> 1 file changed, 12 insertions(+) >>> >>> diff --git a/arch/arm/mach-stm32mp/dram_init.c >>> b/arch/arm/mach-stm32mp/dram_init.c >>> index fb1208fc5d5..f67f54f2ae0 100644 >>> --- a/arch/arm/mach-stm32mp/dram_init.c >>> +++ b/arch/arm/mach-stm32mp/dram_init.c >>> @@ -7,6 +7,7 @@ >>> #include >>> #include >>> +#include >>> #include >>> #include >>> #include >>> @@ -75,3 +76,14 @@ phys_addr_t board_get_usable_ram_top(phys_size_t >>> total_size) >>> return reg + size; >>> } >>> + >>> +void efi_add_known_memory(void) >>> +{ >>> + if (IS_ENABLED(CONFIG_EFI_LOADER)) >>> + /* >>> + * Memory over ram_top is reserved to OPTEE. >>> + * Declare to EFI only memory area below ram_top >>> + */ >>> + efi_add_memory_map(gd->ram_base, gd->ram_top - gd->ram_base, >>> + EFI_CONVENTIONAL_MEMORY); > > With this change the EFI memory map passed to the operating system will > not contain any memory above gd->ram_top. Is this really your intent? > Don't you have any memory above 0xe000? Hi Heinrich On stm32mp157x-dk and stm32mp135x-dk boards, there is no memory above 0xe000. But, on stm32mp157x-ed1 or stm32mp157x-ev1, you are right, we got memory above 0xe000. I will rework this patch to take into account memory that could be present above OPTEE area. Thanks for pointing this Patrice > > Best regards > > Heinrich > >>> +} >> >> >> >> Reviewed-by: Patrick Delaunay >> >> Thanks >> Patrick >> >
Re: [PATCH] stm32mp: Reserve OPTEE area in EFI memory map
On 17.04.24 09:25, Patrick DELAUNAY wrote: Hi, On 3/8/24 11:12, Patrice Chotard wrote: Since commit 7b78d6438a2b3 ("efi_loader: Reserve unaccessible memory") memory region above ram_top is tagged in EFI memory map as EFI_BOOT_SERVICES_DATA. In case of STM32MP1 platform, above ram_top, there is one reserved-memory region tagged "no-map" dedicated to OP-TEE (addr=de00 size=200). Before booting kernel, EFI memory map is first built, the OPTEE region is tagged as EFI_BOOT_SERVICES_DATA and when reserving LMB, the tag LMB_NONE is used. Then after, the LMB are completed by boot_fdt_add_mem_rsv_regions() which try to add again the same OPTEE region (addr=de00 size=200) but now with LMB_NOMAP tag which produces the following error message : "ERROR: reserving fdt memory region failed (addr=de00 size=200 flags=4)" To avoid this, OPTEE area shouldn't be used by EFI, so we need to mark it as reserved. Signed-off-by: Patrice Chotard --- arch/arm/mach-stm32mp/dram_init.c | 12 1 file changed, 12 insertions(+) diff --git a/arch/arm/mach-stm32mp/dram_init.c b/arch/arm/mach-stm32mp/dram_init.c index fb1208fc5d5..f67f54f2ae0 100644 --- a/arch/arm/mach-stm32mp/dram_init.c +++ b/arch/arm/mach-stm32mp/dram_init.c @@ -7,6 +7,7 @@ #include #include +#include #include #include #include @@ -75,3 +76,14 @@ phys_addr_t board_get_usable_ram_top(phys_size_t total_size) return reg + size; } + +void efi_add_known_memory(void) +{ + if (IS_ENABLED(CONFIG_EFI_LOADER)) + /* + * Memory over ram_top is reserved to OPTEE. + * Declare to EFI only memory area below ram_top + */ + efi_add_memory_map(gd->ram_base, gd->ram_top - gd->ram_base, + EFI_CONVENTIONAL_MEMORY); With this change the EFI memory map passed to the operating system will not contain any memory above gd->ram_top. Is this really your intent? Don't you have any memory above 0xe000? Best regards Heinrich +} Reviewed-by: Patrick Delaunay Thanks Patrick
Re: [PATCH] stm32mp: Reserve OPTEE area in EFI memory map
Hi, On 3/8/24 11:12, Patrice Chotard wrote: Since commit 7b78d6438a2b3 ("efi_loader: Reserve unaccessible memory") memory region above ram_top is tagged in EFI memory map as EFI_BOOT_SERVICES_DATA. In case of STM32MP1 platform, above ram_top, there is one reserved-memory region tagged "no-map" dedicated to OP-TEE (addr=de00 size=200). Before booting kernel, EFI memory map is first built, the OPTEE region is tagged as EFI_BOOT_SERVICES_DATA and when reserving LMB, the tag LMB_NONE is used. Then after, the LMB are completed by boot_fdt_add_mem_rsv_regions() which try to add again the same OPTEE region (addr=de00 size=200) but now with LMB_NOMAP tag which produces the following error message : "ERROR: reserving fdt memory region failed (addr=de00 size=200 flags=4)" To avoid this, OPTEE area shouldn't be used by EFI, so we need to mark it as reserved. Signed-off-by: Patrice Chotard --- arch/arm/mach-stm32mp/dram_init.c | 12 1 file changed, 12 insertions(+) diff --git a/arch/arm/mach-stm32mp/dram_init.c b/arch/arm/mach-stm32mp/dram_init.c index fb1208fc5d5..f67f54f2ae0 100644 --- a/arch/arm/mach-stm32mp/dram_init.c +++ b/arch/arm/mach-stm32mp/dram_init.c @@ -7,6 +7,7 @@ #include #include +#include #include #include #include @@ -75,3 +76,14 @@ phys_addr_t board_get_usable_ram_top(phys_size_t total_size) return reg + size; } + +void efi_add_known_memory(void) +{ + if (IS_ENABLED(CONFIG_EFI_LOADER)) + /* +* Memory over ram_top is reserved to OPTEE. +* Declare to EFI only memory area below ram_top +*/ + efi_add_memory_map(gd->ram_base, gd->ram_top - gd->ram_base, + EFI_CONVENTIONAL_MEMORY); +} Reviewed-by: Patrick Delaunay Thanks Patrick
[PATCH] stm32mp: Reserve OPTEE area in EFI memory map
Since commit 7b78d6438a2b3 ("efi_loader: Reserve unaccessible memory") memory region above ram_top is tagged in EFI memory map as EFI_BOOT_SERVICES_DATA. In case of STM32MP1 platform, above ram_top, there is one reserved-memory region tagged "no-map" dedicated to OP-TEE (addr=de00 size=200). Before booting kernel, EFI memory map is first built, the OPTEE region is tagged as EFI_BOOT_SERVICES_DATA and when reserving LMB, the tag LMB_NONE is used. Then after, the LMB are completed by boot_fdt_add_mem_rsv_regions() which try to add again the same OPTEE region (addr=de00 size=200) but now with LMB_NOMAP tag which produces the following error message : "ERROR: reserving fdt memory region failed (addr=de00 size=200 flags=4)" To avoid this, OPTEE area shouldn't be used by EFI, so we need to mark it as reserved. Signed-off-by: Patrice Chotard --- arch/arm/mach-stm32mp/dram_init.c | 12 1 file changed, 12 insertions(+) diff --git a/arch/arm/mach-stm32mp/dram_init.c b/arch/arm/mach-stm32mp/dram_init.c index fb1208fc5d5..f67f54f2ae0 100644 --- a/arch/arm/mach-stm32mp/dram_init.c +++ b/arch/arm/mach-stm32mp/dram_init.c @@ -7,6 +7,7 @@ #include #include +#include #include #include #include @@ -75,3 +76,14 @@ phys_addr_t board_get_usable_ram_top(phys_size_t total_size) return reg + size; } + +void efi_add_known_memory(void) +{ + if (IS_ENABLED(CONFIG_EFI_LOADER)) + /* +* Memory over ram_top is reserved to OPTEE. +* Declare to EFI only memory area below ram_top +*/ + efi_add_memory_map(gd->ram_base, gd->ram_top - gd->ram_base, + EFI_CONVENTIONAL_MEMORY); +} -- 2.25.1