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.

Signed-off-by: Simon Glass <s...@chromium.org>
---

 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 8f5ef5f680f3..1abac2ed7563 100644
--- a/include/efi_api.h
+++ b/include/efi_api.h
@@ -430,6 +430,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 48446f654d9b..9ef736853d10 100644
--- a/lib/efi_loader/efi_smbios.c
+++ b/lib/efi_loader/efi_smbios.c
@@ -15,6 +15,8 @@
 #include <smbios.h>
 #include <linux/sizes.h>
 
+const efi_guid_t smbios3_guid = SMBIOS3_TABLE_GUID;
+
 enum {
        TABLE_SIZE      = SZ_4K,
 };
@@ -26,8 +28,10 @@ enum {
  */
 efi_status_t efi_smbios_register(void)
 {
+       const efi_guid_t *guid;
        ulong addr;
        efi_status_t ret;
+       void *buf;
 
        addr = gd->arch.smbios_start;
        if (!addr) {
@@ -43,8 +47,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, 10);
+       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.42.0.609.gbb76f46606-goog

Reply via email to