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. This patch does not cover the case of a ROM >= 8 GiB which cannot be configured in U-Boot. Signed-off-by: Heinrich Schuchardt <heinrich.schucha...@canonical.com> --- include/smbios.h | 1 + lib/smbios.c | 9 ++++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/include/smbios.h b/include/smbios.h index a4fda9df7bd..00119d7a60c 100644 --- a/include/smbios.h +++ b/include/smbios.h @@ -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]; }; diff --git a/lib/smbios.c b/lib/smbios.c index 4126466e34a..e2a2f873a94 100644 --- a/lib/smbios.c +++ b/lib/smbios.c @@ -348,7 +348,14 @@ 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 < 0x1000000) { + /* CONFIG_ROM_SIZE < 16 MiB */ + 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 | -- 2.45.2