On Wed, 27 Dec 2023 at 09:40, Simon Glass <s...@chromium.org> wrote: > > EFI does not use the 'anchor string' to determine the SMBIOS table > version, instead preferring to have two separate GUIDs. Use the correct > one, depending on the table version. > > Call unmap_system() to balance to the use of map_sysmem() > > Signed-off-by: Simon Glass <s...@chromium.org> > Reviewed-by: Heinrich Schuchardt <xypron.g...@gmx.de> > --- > > (no changes since v2) > > Changes in v2: > - Add a note about why unmap_system() is called > > include/efi_api.h | 4 ++++ > lib/efi_loader/efi_smbios.c | 12 ++++++++++-- > 2 files changed, 14 insertions(+), 2 deletions(-) > > diff --git a/include/efi_api.h b/include/efi_api.h > index 0e92cb8a7f6..ab40b1b5ddf 100644 > --- a/include/efi_api.h > +++ b/include/efi_api.h > @@ -433,6 +433,10 @@ struct efi_runtime_services { > EFI_GUID(0xeb9d2d31, 0x2d88, 0x11d3, \ > 0x9a, 0x16, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d) > > +#define SMBIOS3_TABLE_GUID \ > + EFI_GUID(0xf2fd1544, 0x9794, 0x4a2c, \ > + 0x99, 0x2e, 0xe5, 0xbb, 0xcf, 0x20, 0xe3, 0x94) > + > #define EFI_LOAD_FILE_PROTOCOL_GUID \ > EFI_GUID(0x56ec3091, 0x954c, 0x11d2, \ > 0x8e, 0x3f, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b) > diff --git a/lib/efi_loader/efi_smbios.c b/lib/efi_loader/efi_smbios.c > index 49adc87e45a..5cbce6dc4eb 100644 > --- a/lib/efi_loader/efi_smbios.c > +++ b/lib/efi_loader/efi_smbios.c > @@ -14,6 +14,8 @@ > #include <smbios.h> > #include <linux/sizes.h> > > +const efi_guid_t smbios3_guid = SMBIOS3_TABLE_GUID; > + > enum { > TABLE_SIZE = SZ_4K, > }; > @@ -25,8 +27,10 @@ enum { > */ > efi_status_t efi_smbios_register(void) > { > + const efi_guid_t *guid; > ulong addr; > efi_status_t ret; > + void *buf; > > addr = gd_smbios_start(); > if (!addr) { > @@ -42,8 +46,12 @@ efi_status_t efi_smbios_register(void) > log_debug("EFI using SMBIOS tables at %lx\n", addr); > > /* Install SMBIOS information as configuration table */ > - return efi_install_configuration_table(&smbios_guid, > - map_sysmem(addr, 0)); > + buf = map_sysmem(addr, 0); > + guid = !memcmp(buf, "_SM_", 4) ? &smbios_guid : &smbios3_guid; > + ret = efi_install_configuration_table(guid, buf); > + unmap_sysmem(buf); > + > + return ret; > } > > static int install_smbios_table(void) > -- > 2.34.1 >
Reviewed-by: Ilias Apalodimas <ilias.apalodi...@linaro.org>