[PATCH] smbios: Fix BIOS Characteristics Extension Byte 2
Ilias Apalodimas
ilias.apalodimas at linaro.org
Thu Jun 10 12:18:17 CEST 2021
Hi Heinrich
On Thu, 10 Jun 2021 at 13:16, Heinrich Schuchardt <xypron.glpk at gmx.de> wrote:
>
> On 6/9/21 5:14 PM, Ilias Apalodimas wrote:
> > We currently define the EFI support of an SMBIOS table as the third bit of
> > "BIOS Characteristics Extension Byte 1". The latest DMTF spec defines it
> > on "BIOS Characteristics Extension Byte 2".
> >
> > Signed-off-by: Ilias Apalodimas <ilias.apalodimas at linaro.org>
> > ---
> > include/smbios.h | 2 +-
> > lib/smbios.c | 5 +++--
> > 2 files changed, 4 insertions(+), 3 deletions(-)
> >
> > diff --git a/include/smbios.h b/include/smbios.h
> > index ffeefb47372d..fc49fc10b9d7 100644
> > --- a/include/smbios.h
> > +++ b/include/smbios.h
> > @@ -60,7 +60,7 @@ struct __packed smbios_entry {
> > #define BIOS_CHARACTERISTICS_SELECTABLE_BOOT (1 << 16)
> >
> > #define BIOS_CHARACTERISTICS_EXT1_ACPI (1 << 0)
> > -#define BIOS_CHARACTERISTICS_EXT1_UEFI (1 << 3)
> > +#define BIOS_CHARACTERISTICS_EXT2_UEFI (1 << 3)
> > #define BIOS_CHARACTERISTICS_EXT2_TARGET (1 << 2)
> >
> > struct __packed smbios_type0 {
> > diff --git a/lib/smbios.c b/lib/smbios.c
> > index 9eb226ec9fbd..abdd157a7084 100644
> > --- a/lib/smbios.c
> > +++ b/lib/smbios.c
> > @@ -214,6 +214,7 @@ static int smbios_write_type0(ulong *current, int handle,
> > gd->smbios_version = ctx->last_str;
> > log_debug("smbios_version = %p: '%s'\n", gd->smbios_version,
> > gd->smbios_version);
> > + t->bios_characteristics_ext2 = 0;
> > #ifdef LOG_DEBUG
> > print_buffer((ulong)gd->smbios_version, gd->smbios_version,
> > 1, strlen(gd->smbios_version) + 1, 0);
> > @@ -229,9 +230,9 @@ static int smbios_write_type0(ulong *current, int handle,
> > t->bios_characteristics_ext1 = BIOS_CHARACTERISTICS_EXT1_ACPI;
>
> This looks fishy. Where is t->bios_characteristics_ext1 initialized if
> CONFIG_GENERATE_ACPI_TABLE=n? efi_smbios_register() does not zero out
> the memory.
>
> We should initialize the field irrespective of the configuration and
> then use a bitwise or here.
>
> > #endif
> > #ifdef CONFIG_EFI_LOADER
> > - t->bios_characteristics_ext1 |= BIOS_CHARACTERISTICS_EXT1_UEFI;
> > + t->bios_characteristics_ext2 |= BIOS_CHARACTERISTICS_EXT2_UEFI;
> > #endif
> > - t->bios_characteristics_ext2 = BIOS_CHARACTERISTICS_EXT2_TARGET;
> > + t->bios_characteristics_ext2 |= BIOS_CHARACTERISTICS_EXT2_TARGET;
>
> Where is t->bios_characteristics_ext2 initialized?
> We don't want random bytes.
A few lines above, in this patchset
>
> @Simon:
> The usage of ulong instead of pointers in this module does not make
> sense to me. If the sandbox needs to call it, it should map its virtual
> addresses. We should not spill those conversion into non-sandbox code.
>
> Best regards
>
> Heinrich
>
> >
> > /* bios_major_release has only one byte, so drop century */
> > t->bios_major_release = U_BOOT_VERSION_NUM % 100;
> >
>
More information about the U-Boot
mailing list