[PATCH v4 6/7] efi: Use the correct GUID for the SMBIOS table

Ilias Apalodimas ilias.apalodimas at linaro.org
Wed Dec 27 12:15:50 CET 2023


On Wed, 27 Dec 2023 at 09:40, Simon Glass <sjg at 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 <sjg at chromium.org>
> Reviewed-by: Heinrich Schuchardt <xypron.glpk at 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.apalodimas at linaro.org>


More information about the U-Boot mailing list