[PATCH 1/1] smbios: add extended Extended BIOS ROM Size

Heinrich Schuchardt heinrich.schuchardt at canonical.com
Tue Jul 23 16:38:30 CEST 2024


On 23.07.24 16:12, Ilias Apalodimas wrote:
> Hi Heinrich,
> 
> On Tue, 23 Jul 2024 at 13:46, Heinrich Schuchardt
> <heinrich.schuchardt at canonical.com> wrote:
>>
>> 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.schuchardt at 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) {
> 
> nit, but can we use SZ_16M instead? Then the comment below goes away

Sure.

> 
>> +               /* 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;
> 
> If the size is above 1gb we should also change bits 15:14. I guess
> being above 1GB will never happen, but can we add a comment?

There is a comment mentioning the 8 GiB limit.

As there are 13 bits for the number, we can encode sizes up to 8091 MiB 
in MiB. We should not try to encode a 1536 MiB flash as 1 GiB.

Best regards

Heinrich

> 
> Thanks
> /IIlias
>> +               t->extended_bios_rom_size = CONFIG_ROM_SIZE >> 20;
>> +       }
>>   #endif
>>          t->bios_characteristics = BIOS_CHARACTERISTICS_PCI_SUPPORTED |
>>                                    BIOS_CHARACTERISTICS_SELECTABLE_BOOT |
>> --
>> 2.45.2
>>



More information about the U-Boot mailing list