]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
efi: Use the correct GUID for the SMBIOS table
authorSimon Glass <sjg@chromium.org>
Sun, 31 Dec 2023 15:25:49 +0000 (08:25 -0700)
committerSimon Glass <sjg@chromium.org>
Sun, 7 Jan 2024 20:45:07 +0000 (13:45 -0700)
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@chromium.org>
Reviewed-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
include/efi_api.h
lib/efi_loader/efi_smbios.c

index 0e92cb8a7f69f7b77f2ae3492949f2bb86e008e2..ab40b1b5ddf64621f2fbd190e427d016fd0a0a63 100644 (file)
@@ -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)
index 49adc87e45a319096eb0e61312418a943154c947..5cbce6dc4eb2ef3275b0c3c2f97af3cfef0636d5 100644 (file)
@@ -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)