[PATCH v2 12/14] efi_memory: do not add RAM memory to the memory map
Sughosh Ganu
sughosh.ganu at linaro.org
Sat Oct 12 09:44:20 CEST 2024
On Fri, 11 Oct 2024 at 16:33, Ilias Apalodimas
<ilias.apalodimas at linaro.org> wrote:
>
> Hi Sughosh,
>
> On Tue, 8 Oct 2024 at 21:15, Sughosh Ganu <sughosh.ganu at linaro.org> wrote:
> >
> > The EFI_CONVENTIONAL_MEMORY type, which is the usable RAM memory is
> > now being managed by the LMB module. Remove the addition of this
> > memory type to the EFI memory map. This memory now gets added to the
> > EFI memory map as part of the LMB memory map update event handler.
> >
> > Signed-off-by: Sughosh Ganu <sughosh.ganu at linaro.org>
> > Reviewed-by: Simon Glass <sjg at chromium.org>
> > ---
> > Changes since V1: None
> >
> > include/efi_loader.h | 13 ++++---
> > lib/efi_loader/efi_memory.c | 75 +++----------------------------------
> > 2 files changed, 12 insertions(+), 76 deletions(-)
> >
> > diff --git a/include/efi_loader.h b/include/efi_loader.h
> > index 081cb65d3f7..0d5555c7597 100644
> > --- a/include/efi_loader.h
> > +++ b/include/efi_loader.h
> > @@ -798,10 +798,6 @@ efi_status_t efi_add_memory_map_pg(u64 start, u64 pages,
> > int memory_type,
> > bool overlap_only_ram);
> >
> > -/* Adds a conventional range into the EFI memory map */
> > -efi_status_t efi_add_conventional_memory_map(u64 ram_start, u64 ram_end,
> > - u64 ram_top);
> > -
> > /* Called by board init to initialize the EFI drivers */
> > efi_status_t efi_driver_init(void);
> > /* Called when a block device is added */
> > @@ -1186,9 +1182,14 @@ efi_status_t efi_console_get_u16_string
> > efi_status_t efi_disk_get_device_name(const efi_handle_t handle, char *buf, int size);
> >
> > /**
> > - * efi_add_known_memory() - add memory banks to EFI memory map
> > + * efi_add_known_memory() - add memory types to the EFI memory map
> > + *
> > + * This function is to be used to adding different memory types other
>
> /adding/add
Okay
>
> > + * than EFI_CONVENTIONAL_MEMORY to the EFI memory map. The conventional
> > + * memory is handled by the LMB module, and gets added to the memory
>
> no comma after module
Okay
>
> > + * map through the LMB module.
> > *
> > - * This weak function may be overridden for specific architectures.
> > + * This function may be overridden for specific architectures.
>
> Since you are rewriting this I think for "architecture specific
> purposes" is better
Okay
>
> > */
> > void efi_add_known_memory(void);
> >
> > diff --git a/lib/efi_loader/efi_memory.c b/lib/efi_loader/efi_memory.c
> > index 974ecc51113..0f25094dbf8 100644
> > --- a/lib/efi_loader/efi_memory.c
> > +++ b/lib/efi_loader/efi_memory.c
> > @@ -780,82 +780,17 @@ efi_status_t efi_get_memory_map_alloc(efi_uintn_t *map_size,
> > }
> >
> > /**
> > - * efi_add_conventional_memory_map() - add a RAM memory area to the map
> > + * efi_add_known_memory() - add memory types to the EFI memory map
> > *
> > - * @ram_start: start address of a RAM memory area
> > - * @ram_end: end address of a RAM memory area
> > - * @ram_top: max address to be used as conventional memory
> > - * Return: status code
> > - */
> > -efi_status_t efi_add_conventional_memory_map(u64 ram_start, u64 ram_end,
> > - u64 ram_top)
> > -{
> > - u64 pages;
> > -
> > - /* Remove partial pages */
> > - ram_end &= ~EFI_PAGE_MASK;
> > - ram_start = (ram_start + EFI_PAGE_MASK) & ~EFI_PAGE_MASK;
> > -
> > - if (ram_end <= ram_start) {
> > - /* Invalid mapping */
> > - return EFI_INVALID_PARAMETER;
> > - }
> > -
> > - pages = (ram_end - ram_start) >> EFI_PAGE_SHIFT;
> > -
> > - efi_add_memory_map_pg(ram_start, pages,
> > - EFI_CONVENTIONAL_MEMORY, false);
> > -
> > - /*
> > - * Boards may indicate to the U-Boot memory core that they
> > - * can not support memory above ram_top. Let's honor this
> > - * in the efi_loader subsystem too by declaring any memory
> > - * above ram_top as "already occupied by firmware".
> > - */
> > - if (ram_top < ram_start) {
> > - /* ram_top is before this region, reserve all */
> > - efi_add_memory_map_pg(ram_start, pages,
> > - EFI_BOOT_SERVICES_DATA, true);
> > - } else if (ram_top < ram_end) {
> > - /* ram_top is inside this region, reserve parts */
> > - pages = (ram_end - ram_top) >> EFI_PAGE_SHIFT;
> > -
> > - efi_add_memory_map_pg(ram_top, pages,
> > - EFI_BOOT_SERVICES_DATA, true);
> > - }
> > -
> > - return EFI_SUCCESS;
> > -}
> > -
> > -/**
> > - * efi_add_known_memory() - add memory banks to map
> > + * This function is to be used to adding different memory types other
> > + * than EFI_CONVENTIONAL_MEMORY to the EFI memory map. The conventional
> > + * memory is handled by the LMB module, and gets added to the memory
> > + * map through the LMB module.
> > *
> > * This function may be overridden for specific architectures.
> > */
> > __weak void efi_add_known_memory(void)
>
> We can also get rid of this in the future. Any idea if we have
> platforms using it after the last 2 you removed?
Yes, this is being used by some x86 platform, which is adding other
memory types to the EFI memory map.
-sughosh
>
>
> > {
> > - u64 ram_top = gd->ram_top & ~EFI_PAGE_MASK;
> > - int i;
> > -
> > - /*
> > - * ram_top is just outside mapped memory. So use an offset of one for
> > - * mapping the sandbox address.
> > - */
> > - ram_top = (uintptr_t)map_sysmem(ram_top - 1, 0) + 1;
> > -
> > - /* Fix for 32bit targets with ram_top at 4G */
> > - if (!ram_top)
> > - ram_top = 0x100000000ULL;
> > -
> > - /* Add RAM */
> > - for (i = 0; i < CONFIG_NR_DRAM_BANKS; i++) {
> > - u64 ram_end, ram_start;
> > -
> > - ram_start = (uintptr_t)map_sysmem(gd->bd->bi_dram[i].start, 0);
> > - ram_end = ram_start + gd->bd->bi_dram[i].size;
> > -
> > - efi_add_conventional_memory_map(ram_start, ram_end, ram_top);
> > - }
> > }
> >
> > /**
> > --
> > 2.34.1
> >
>
> With the spelling nits fixed
> Reviewed-by: Ilias Apalodimas <ilias.apalodimas at linaro.org>
More information about the U-Boot
mailing list