]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
smbios: add extended Extended BIOS ROM Size
authorHeinrich Schuchardt <heinrich.schuchardt@canonical.com>
Tue, 23 Jul 2024 14:44:23 +0000 (16:44 +0200)
committerHeinrich Schuchardt <heinrich.schuchardt@canonical.com>
Wed, 31 Jul 2024 06:29:16 +0000 (08:29 +0200)
U-Boot claims to create SMBIOS 3.7 tables. The type 0 table has
a field Extended BIOS ROM Size since version 3.1.

BIOS ROM sizes of 16 MiB or above must be written to this field.

Add and fill the missing field.

Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
include/smbios.h
lib/smbios.c

index a4fda9df7bd0e96f938c2e249ce025c96a4628cd..00119d7a60c5c55bc7de030299e5551704322c4d 100644 (file)
@@ -105,6 +105,7 @@ struct __packed smbios_type0 {
        u8 bios_minor_release;
        u8 ec_major_release;
        u8 ec_minor_release;
+       u16 extended_bios_rom_size;
        char eos[SMBIOS_STRUCT_EOS_BYTES];
 };
 
index 4126466e34a84438bf65032e1378f43baf4aab2b..7c24ea129eb5fce3540d72ada56a21547a9c7dc7 100644 (file)
@@ -22,6 +22,7 @@
 #include <cpu.h>
 #include <dm/uclass-internal.h>
 #endif
+#include <linux/sizes.h>
 
 /* Safeguard for checking that U_BOOT_VERSION_NUM macros are compatible with U_BOOT_DMI */
 #if U_BOOT_VERSION_NUM < 2000 || U_BOOT_VERSION_NUM > 2099 || \
@@ -348,7 +349,13 @@ static int smbios_write_type0(ulong *current, int handle,
 #endif
        t->bios_release_date = smbios_add_prop(ctx, NULL, U_BOOT_DMI_DATE);
 #ifdef CONFIG_ROM_SIZE
-       t->bios_rom_size = (CONFIG_ROM_SIZE / 65536) - 1;
+       if (CONFIG_ROM_SIZE < SZ_16M) {
+               t->bios_rom_size = (CONFIG_ROM_SIZE / 65536) - 1;
+       } else {
+               /* CONFIG_ROM_SIZE < 8 GiB */
+               t->bios_rom_size = 0xff;
+               t->extended_bios_rom_size = CONFIG_ROM_SIZE >> 20;
+       }
 #endif
        t->bios_characteristics = BIOS_CHARACTERISTICS_PCI_SUPPORTED |
                                  BIOS_CHARACTERISTICS_SELECTABLE_BOOT |