* [PATCH v2 1/4] smbios: type2: contained object handles
@ 2024-01-17 15:33 Heinrich Schuchardt
2024-01-17 15:33 ` [PATCH v2 2/4] cmd: provide command to display SMBIOS information Heinrich Schuchardt
` (3 more replies)
0 siblings, 4 replies; 15+ messages in thread
From: Heinrich Schuchardt @ 2024-01-17 15:33 UTC (permalink / raw)
To: Tom Rini
Cc: Simon Glass, Ilias Apalodimas, Bin Meng, u-boot,
Heinrich Schuchardt
The type 2 structure must include information about the contained objects.
It is fine to set the number of contained object handles to 0.
Add the missing field.
Fixes: 721e992a8af5 ("x86: Add SMBIOS table support")
Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
---
v2:
email address updated
---
include/smbios.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/include/smbios.h b/include/smbios.h
index b507b9d9d72..98bb9e52cdf 100644
--- a/include/smbios.h
+++ b/include/smbios.h
@@ -139,6 +139,7 @@ struct __packed smbios_type2 {
u8 chassis_location;
u16 chassis_handle;
u8 board_type;
+ u8 number_contained_objects;
char eos[SMBIOS_STRUCT_EOS_BYTES];
};
--
2.43.0
^ permalink raw reply related [flat|nested] 15+ messages in thread* [PATCH v2 2/4] cmd: provide command to display SMBIOS information 2024-01-17 15:33 [PATCH v2 1/4] smbios: type2: contained object handles Heinrich Schuchardt @ 2024-01-17 15:33 ` Heinrich Schuchardt 2024-01-18 12:39 ` Ilias Apalodimas 2024-01-24 21:16 ` Tom Rini 2024-01-17 15:33 ` [PATCH v2 3/4] doc: man-page for smbios command Heinrich Schuchardt ` (2 subsequent siblings) 3 siblings, 2 replies; 15+ messages in thread From: Heinrich Schuchardt @ 2024-01-17 15:33 UTC (permalink / raw) To: Tom Rini Cc: Simon Glass, Ilias Apalodimas, Bin Meng, u-boot, Heinrich Schuchardt U-Boot can either generated an SMBIOS table or copy it from a prior boot stage, e.g. QEMU. Provide a command to display the SMBIOS information. Currently only type 1 and 2 are translated to human readable text. Other types may be added later. Currently only a hexdump and the list of strings is provided for these. Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com> Reviewed-by: Simon Glass <sjg@chromium.org> --- v2: email address updated --- cmd/Kconfig | 7 ++ cmd/Makefile | 1 + cmd/smbios.c | 191 +++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 199 insertions(+) create mode 100644 cmd/smbios.c diff --git a/cmd/Kconfig b/cmd/Kconfig index 26aeeeed03b..43c9c20c8fa 100644 --- a/cmd/Kconfig +++ b/cmd/Kconfig @@ -227,6 +227,13 @@ config CMD_SBI help Display information about the SBI implementation. +config CMD_SMBIOS + bool "smbios" + depends on SMBIOS + default y + help + Display the SMBIOS information. + endmenu menu "Boot commands" diff --git a/cmd/Makefile b/cmd/Makefile index e2a2b16ab25..87133cc27a8 100644 --- a/cmd/Makefile +++ b/cmd/Makefile @@ -168,6 +168,7 @@ obj-$(CONFIG_CMD_SETEXPR) += setexpr.o obj-$(CONFIG_CMD_SETEXPR_FMT) += printf.o obj-$(CONFIG_CMD_SPI) += spi.o obj-$(CONFIG_CMD_STRINGS) += strings.o +obj-$(CONFIG_CMD_SMBIOS) += smbios.o obj-$(CONFIG_CMD_SMC) += smccc.o obj-$(CONFIG_CMD_SYSBOOT) += sysboot.o obj-$(CONFIG_CMD_STACKPROTECTOR_TEST) += stackprot_test.o diff --git a/cmd/smbios.c b/cmd/smbios.c new file mode 100644 index 00000000000..63f908e92ce --- /dev/null +++ b/cmd/smbios.c @@ -0,0 +1,191 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * The 'smbios' command displays information from the SMBIOS table. + * + * Copyright (c) 2023, Heinrich Schuchardt <heinrich.schuchardt@canonical.com> + */ + +#include <command.h> +#include <hexdump.h> +#include <mapmem.h> +#include <smbios.h> +#include <tables_csum.h> +#include <asm/global_data.h> + +DECLARE_GLOBAL_DATA_PTR; + +/** + * smbios_get_string() - get SMBIOS string from table + * + * @table: SMBIOS table + * @index: index of the string + * Return: address of string, may point to empty string + */ +static const char *smbios_get_string(void *table, int index) +{ + const char *str = (char *)table + + ((struct smbios_header *)table)->length; + + if (!*str) + ++str; + for (--index; *str && index; --index) + str += strlen(str) + 1; + + return str; +} + +static struct smbios_header *next_table(struct smbios_header *table) +{ + const char *str; + + if (table->type == SMBIOS_END_OF_TABLE) + return NULL; + + str = smbios_get_string(table, 0); + return (struct smbios_header *)(++str); +} + +static void smbios_print_generic(struct smbios_header *table) +{ + char *str = (char *)table + table->length; + + if (CONFIG_IS_ENABLED(HEXDUMP)) { + printf("Header and Data:\n"); + print_hex_dump("\t", DUMP_PREFIX_OFFSET, 16, 1, + table, table->length, false); + } + if (*str) { + printf("Strings:\n"); + for (int index = 1; *str; ++index) { + printf("\tString %u: %s\n", index, str); + str += strlen(str) + 1; + } + } +} + +void smbios_print_str(const char *label, void *table, u8 index) +{ + printf("\t%s: %s\n", label, smbios_get_string(table, index)); +} + +static void smbios_print_type1(struct smbios_type1 *table) +{ + printf("System Information\n"); + smbios_print_str("Manufacturer", table, table->manufacturer); + smbios_print_str("Product Name", table, table->product_name); + smbios_print_str("Version", table, table->version); + smbios_print_str("Serial Number", table, table->serial_number); + if (table->length >= 0x19) { + printf("\tUUID %pUl\n", table->uuid); + smbios_print_str("Wake Up Type", table, table->serial_number); + } + if (table->length >= 0x1b) { + smbios_print_str("Serial Number", table, table->serial_number); + smbios_print_str("SKU Number", table, table->sku_number); + } +} + +static void smbios_print_type2(struct smbios_type2 *table) +{ + u16 *handle; + + printf("Base Board Information\n"); + smbios_print_str("Manufacturer", table, table->manufacturer); + smbios_print_str("Product Name", table, table->product_name); + smbios_print_str("Version", table, table->version); + smbios_print_str("Serial Number", table, table->serial_number); + smbios_print_str("Asset Tag", table, table->asset_tag_number); + printf("\tFeature Flags: 0x%2x\n", table->feature_flags); + smbios_print_str("Chassis Location", table, table->chassis_location); + printf("\tChassis Handle: 0x%2x\n", table->chassis_handle); + smbios_print_str("Board Type", table, table->board_type); + printf("\tContained Object Handles: "); + handle = (void *)table->eos; + for (int i = 0; i < table->number_contained_objects; ++i) + printf("0x%04x ", handle[i]); + printf("\n"); +} + +static void smbios_print_type127(struct smbios_type127 *table) +{ + printf("End Of Table\n"); +} + +static int do_smbios(struct cmd_tbl *cmdtp, int flag, int argc, + char *const argv[]) +{ + ulong addr; + void *entry; + u32 size; + char version[12]; + struct smbios_header *table; + static const char smbios_sig[] = "_SM_"; + static const char smbios3_sig[] = "_SM3_"; + size_t count = 0; + u32 max_struct_size; + + addr = gd_smbios_start(); + if (!addr) { + log_warning("SMBIOS not available\n"); + return CMD_RET_FAILURE; + } + entry = map_sysmem(addr, 0); + if (!memcmp(entry, smbios3_sig, sizeof(smbios3_sig) - 1)) { + struct smbios3_entry *entry3 = entry; + + table = (void *)(uintptr_t)entry3->struct_table_address; + snprintf(version, sizeof(version), "%d.%d.%d", + entry3->major_ver, entry3->minor_ver, entry3->doc_rev); + table = (void *)(uintptr_t)entry3->struct_table_address; + size = entry3->length; + max_struct_size = entry3->max_struct_size; + } else if (!memcmp(entry, smbios_sig, sizeof(smbios_sig) - 1)) { + struct smbios_entry *entry2 = entry; + + snprintf(version, sizeof(version), "%d.%d", + entry2->major_ver, entry2->minor_ver); + table = (void *)(uintptr_t)entry2->struct_table_address; + size = entry2->length; + max_struct_size = entry2->max_struct_size; + } else { + log_err("Unknown SMBIOS anchor format\n"); + return CMD_RET_FAILURE; + } + if (table_compute_checksum(entry, size)) { + log_err("Invalid anchor checksum\n"); + return CMD_RET_FAILURE; + } + printf("SMBIOS %s present.\n", version); + + for (struct smbios_header *pos = table; pos; pos = next_table(pos)) + ++count; + printf("%zd structures occupying %d bytes\n", count, max_struct_size); + printf("Table at 0x%llx\n", (unsigned long long)map_to_sysmem(table)); + + for (struct smbios_header *pos = table; pos; pos = next_table(pos)) { + printf("\nHandle 0x%04x, DMI type %d, %d bytes at 0x%llx\n", + pos->handle, pos->type, pos->length, + (unsigned long long)map_to_sysmem(pos)); + switch (pos->type) { + case 1: + smbios_print_type1((struct smbios_type1 *)pos); + break; + case 2: + smbios_print_type2((struct smbios_type2 *)pos); + break; + case 127: + smbios_print_type127((struct smbios_type127 *)pos); + break; + default: + smbios_print_generic(pos); + break; + } + } + + return CMD_RET_SUCCESS; +} + +U_BOOT_LONGHELP(smbios, "- display SMBIOS information"); + +U_BOOT_CMD(smbios, 1, 0, do_smbios, "display SMBIOS information", + smbios_help_text); -- 2.43.0 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH v2 2/4] cmd: provide command to display SMBIOS information 2024-01-17 15:33 ` [PATCH v2 2/4] cmd: provide command to display SMBIOS information Heinrich Schuchardt @ 2024-01-18 12:39 ` Ilias Apalodimas 2024-01-18 12:54 ` Heinrich Schuchardt 2024-01-24 21:16 ` Tom Rini 1 sibling, 1 reply; 15+ messages in thread From: Ilias Apalodimas @ 2024-01-18 12:39 UTC (permalink / raw) To: Heinrich Schuchardt; +Cc: Tom Rini, Simon Glass, Bin Meng, u-boot Hi Heinrich, A few nits below On Wed, Jan 17, 2024 at 04:33:45PM +0100, Heinrich Schuchardt wrote: > U-Boot can either generated an SMBIOS table or copy it from a prior boot > stage, e.g. QEMU. > > Provide a command to display the SMBIOS information. > > Currently only type 1 and 2 are translated to human readable text. > Other types may be added later. Currently only a hexdump and the list of > strings is provided for these. > > Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com> > Reviewed-by: Simon Glass <sjg@chromium.org> > --- > v2: [...] > email address updated > +static struct smbios_header *next_table(struct smbios_header *table) > +{ > + const char *str; > + > + if (table->type == SMBIOS_END_OF_TABLE) > + return NULL; > + > + str = smbios_get_string(table, 0); > + return (struct smbios_header *)(++str); That can lead to unaligned access when we dereference that pointer, do we care? > +} > + > +static void smbios_print_generic(struct smbios_header *table) > +{ > + char *str = (char *)table + table->length; > + Do we want the header below printed if there are no strings? IOW can we exit early if (!*str) ? > + if (CONFIG_IS_ENABLED(HEXDUMP)) { > + printf("Header and Data:\n"); > + print_hex_dump("\t", DUMP_PREFIX_OFFSET, 16, 1, > + table, table->length, false); > + } > + if (*str) { > + printf("Strings:\n"); > + for (int index = 1; *str; ++index) { > + printf("\tString %u: %s\n", index, str); > + str += strlen(str) + 1; > + } > + } > +} > + > +void smbios_print_str(const char *label, void *table, u8 index) > +{ > + printf("\t%s: %s\n", label, smbios_get_string(table, index)); > +} > + Other than that, LGTM Thanks /Ilias ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2 2/4] cmd: provide command to display SMBIOS information 2024-01-18 12:39 ` Ilias Apalodimas @ 2024-01-18 12:54 ` Heinrich Schuchardt 2024-01-18 12:58 ` Ilias Apalodimas 0 siblings, 1 reply; 15+ messages in thread From: Heinrich Schuchardt @ 2024-01-18 12:54 UTC (permalink / raw) To: Ilias Apalodimas; +Cc: Tom Rini, Simon Glass, Bin Meng, u-boot On 1/18/24 13:39, Ilias Apalodimas wrote: > Hi Heinrich, > > A few nits below > > On Wed, Jan 17, 2024 at 04:33:45PM +0100, Heinrich Schuchardt wrote: >> U-Boot can either generated an SMBIOS table or copy it from a prior boot >> stage, e.g. QEMU. >> >> Provide a command to display the SMBIOS information. >> >> Currently only type 1 and 2 are translated to human readable text. >> Other types may be added later. Currently only a hexdump and the list of >> strings is provided for these. >> >> Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com> >> Reviewed-by: Simon Glass <sjg@chromium.org> >> --- >> v2: > > [...] > >> email address updated >> +static struct smbios_header *next_table(struct smbios_header *table) >> +{ >> + const char *str; >> + >> + if (table->type == SMBIOS_END_OF_TABLE) >> + return NULL; >> + >> + str = smbios_get_string(table, 0); >> + return (struct smbios_header *)(++str); > > That can lead to unaligned access when we dereference that pointer, do we > care? SMBIOS tables are always byte aligned. This is why struct smbios_header is marked as packed. The GCCj documentation has this sentence: "The packed attribute specifies that a variable or structure field should have the smallest possible alignment - one byte for a variable, and one bit for a field, unless you specify a larger value with the aligned attribute." So shouldn't the compiler care about non-alignment? If there were a problematic usage, GCC would throw -Waddress-of-packed-member. Best regards Heinrich > >> +} >> + >> +static void smbios_print_generic(struct smbios_header *table) >> +{ >> + char *str = (char *)table + table->length; >> + > > Do we want the header below printed if there are no strings? > IOW can we exit early if (!*str) ? > >> + if (CONFIG_IS_ENABLED(HEXDUMP)) { >> + printf("Header and Data:\n"); >> + print_hex_dump("\t", DUMP_PREFIX_OFFSET, 16, 1, >> + table, table->length, false); >> + } >> + if (*str) { >> + printf("Strings:\n"); >> + for (int index = 1; *str; ++index) { >> + printf("\tString %u: %s\n", index, str); >> + str += strlen(str) + 1; >> + } >> + } >> +} >> + >> +void smbios_print_str(const char *label, void *table, u8 index) >> +{ >> + printf("\t%s: %s\n", label, smbios_get_string(table, index)); >> +} >> + > > > Other than that, LGTM > > Thanks > /Ilias ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2 2/4] cmd: provide command to display SMBIOS information 2024-01-18 12:54 ` Heinrich Schuchardt @ 2024-01-18 12:58 ` Ilias Apalodimas 0 siblings, 0 replies; 15+ messages in thread From: Ilias Apalodimas @ 2024-01-18 12:58 UTC (permalink / raw) To: Heinrich Schuchardt; +Cc: Tom Rini, Simon Glass, Bin Meng, u-boot On Thu, 18 Jan 2024 at 14:54, Heinrich Schuchardt <heinrich.schuchardt@canonical.com> wrote: > > On 1/18/24 13:39, Ilias Apalodimas wrote: > > Hi Heinrich, > > > > A few nits below > > > > On Wed, Jan 17, 2024 at 04:33:45PM +0100, Heinrich Schuchardt wrote: > >> U-Boot can either generated an SMBIOS table or copy it from a prior boot > >> stage, e.g. QEMU. > >> > >> Provide a command to display the SMBIOS information. > >> > >> Currently only type 1 and 2 are translated to human readable text. > >> Other types may be added later. Currently only a hexdump and the list of > >> strings is provided for these. > >> > >> Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com> > >> Reviewed-by: Simon Glass <sjg@chromium.org> > >> --- > >> v2: > > > > [...] > > > >> email address updated > >> +static struct smbios_header *next_table(struct smbios_header *table) > >> +{ > >> + const char *str; > >> + > >> + if (table->type == SMBIOS_END_OF_TABLE) > >> + return NULL; > >> + > >> + str = smbios_get_string(table, 0); > >> + return (struct smbios_header *)(++str); > > > > That can lead to unaligned access when we dereference that pointer, do we > > care? > > SMBIOS tables are always byte aligned. This is why struct smbios_header > is marked as packed. The GCCj documentation has this sentence: > > "The packed attribute specifies that a variable or structure field > should have the smallest possible alignment - one byte for a variable, > and one bit for a field, unless you specify a larger value with the > aligned attribute." > > So shouldn't the compiler care about non-alignment? If there were a > problematic usage, GCC would throw -Waddress-of-packed-member. I don't think we have the strict alignment enabled in our makefiles. But, that won't be a problem, I missed the packed attribute in the smbios header. with or without the change in smbios_print_generic() Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org> ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2 2/4] cmd: provide command to display SMBIOS information 2024-01-17 15:33 ` [PATCH v2 2/4] cmd: provide command to display SMBIOS information Heinrich Schuchardt 2024-01-18 12:39 ` Ilias Apalodimas @ 2024-01-24 21:16 ` Tom Rini 2024-01-24 23:24 ` Heinrich Schuchardt 1 sibling, 1 reply; 15+ messages in thread From: Tom Rini @ 2024-01-24 21:16 UTC (permalink / raw) To: Heinrich Schuchardt; +Cc: Simon Glass, Ilias Apalodimas, Bin Meng, u-boot [-- Attachment #1: Type: text/plain, Size: 1017 bytes --] On Wed, Jan 17, 2024 at 04:33:45PM +0100, Heinrich Schuchardt wrote: > U-Boot can either generated an SMBIOS table or copy it from a prior boot > stage, e.g. QEMU. > > Provide a command to display the SMBIOS information. > > Currently only type 1 and 2 are translated to human readable text. > Other types may be added later. Currently only a hexdump and the list of > strings is provided for these. > > Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com> > Reviewed-by: Simon Glass <sjg@chromium.org> > Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org> [snip] > @@ -227,6 +227,13 @@ config CMD_SBI > help > Display information about the SBI implementation. > > +config CMD_SMBIOS > + bool "smbios" > + depends on SMBIOS > + default y > + help > + Display the SMBIOS information. > + So this would be enabled (today) on 888 boards and is a bit more than a kilobyte. I think we can just let this be enabled as needed in defconfigs? -- Tom [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 659 bytes --] ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2 2/4] cmd: provide command to display SMBIOS information 2024-01-24 21:16 ` Tom Rini @ 2024-01-24 23:24 ` Heinrich Schuchardt 2024-01-25 0:17 ` Tom Rini 2024-01-25 10:45 ` Peter Robinson 0 siblings, 2 replies; 15+ messages in thread From: Heinrich Schuchardt @ 2024-01-24 23:24 UTC (permalink / raw) To: Tom Rini; +Cc: Simon Glass, Ilias Apalodimas, Bin Meng, u-boot On 1/24/24 22:16, Tom Rini wrote: > On Wed, Jan 17, 2024 at 04:33:45PM +0100, Heinrich Schuchardt wrote: > >> U-Boot can either generated an SMBIOS table or copy it from a prior boot >> stage, e.g. QEMU. >> >> Provide a command to display the SMBIOS information. >> >> Currently only type 1 and 2 are translated to human readable text. >> Other types may be added later. Currently only a hexdump and the list of >> strings is provided for these. >> >> Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com> >> Reviewed-by: Simon Glass <sjg@chromium.org> >> Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org> > [snip] >> @@ -227,6 +227,13 @@ config CMD_SBI >> help >> Display information about the SBI implementation. >> >> +config CMD_SMBIOS >> + bool "smbios" >> + depends on SMBIOS >> + default y >> + help >> + Display the SMBIOS information. >> + > > So this would be enabled (today) on 888 boards and is a bit more than a > kilobyte. I think we can just let this be enabled as needed in > defconfigs? > As needed would be the boards where we want to run the related Python test. Sandbox and QEMU should be good enough? Best regards Heinrich ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2 2/4] cmd: provide command to display SMBIOS information 2024-01-24 23:24 ` Heinrich Schuchardt @ 2024-01-25 0:17 ` Tom Rini 2024-01-25 10:45 ` Peter Robinson 1 sibling, 0 replies; 15+ messages in thread From: Tom Rini @ 2024-01-25 0:17 UTC (permalink / raw) To: Heinrich Schuchardt; +Cc: Simon Glass, Ilias Apalodimas, Bin Meng, u-boot [-- Attachment #1: Type: text/plain, Size: 1428 bytes --] On Thu, Jan 25, 2024 at 12:24:33AM +0100, Heinrich Schuchardt wrote: > On 1/24/24 22:16, Tom Rini wrote: > > On Wed, Jan 17, 2024 at 04:33:45PM +0100, Heinrich Schuchardt wrote: > > > > > U-Boot can either generated an SMBIOS table or copy it from a prior boot > > > stage, e.g. QEMU. > > > > > > Provide a command to display the SMBIOS information. > > > > > > Currently only type 1 and 2 are translated to human readable text. > > > Other types may be added later. Currently only a hexdump and the list of > > > strings is provided for these. > > > > > > Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com> > > > Reviewed-by: Simon Glass <sjg@chromium.org> > > > Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org> > > [snip] > > > @@ -227,6 +227,13 @@ config CMD_SBI > > > help > > > Display information about the SBI implementation. > > > +config CMD_SMBIOS > > > + bool "smbios" > > > + depends on SMBIOS > > > + default y > > > + help > > > + Display the SMBIOS information. > > > + > > > > So this would be enabled (today) on 888 boards and is a bit more than a > > kilobyte. I think we can just let this be enabled as needed in > > defconfigs? > > > > As needed would be the boards where we want to run the related Python test. > Sandbox and QEMU should be good enough? And the test needs the pytest mark for cmd_smbios, yes. -- Tom [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 659 bytes --] ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2 2/4] cmd: provide command to display SMBIOS information 2024-01-24 23:24 ` Heinrich Schuchardt 2024-01-25 0:17 ` Tom Rini @ 2024-01-25 10:45 ` Peter Robinson 1 sibling, 0 replies; 15+ messages in thread From: Peter Robinson @ 2024-01-25 10:45 UTC (permalink / raw) To: Heinrich Schuchardt Cc: Tom Rini, Simon Glass, Ilias Apalodimas, Bin Meng, u-boot On Thu, 25 Jan 2024 at 03:02, Heinrich Schuchardt <heinrich.schuchardt@canonical.com> wrote: > > On 1/24/24 22:16, Tom Rini wrote: > > On Wed, Jan 17, 2024 at 04:33:45PM +0100, Heinrich Schuchardt wrote: > > > >> U-Boot can either generated an SMBIOS table or copy it from a prior boot > >> stage, e.g. QEMU. > >> > >> Provide a command to display the SMBIOS information. > >> > >> Currently only type 1 and 2 are translated to human readable text. > >> Other types may be added later. Currently only a hexdump and the list of > >> strings is provided for these. > >> > >> Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com> > >> Reviewed-by: Simon Glass <sjg@chromium.org> > >> Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org> > > [snip] > >> @@ -227,6 +227,13 @@ config CMD_SBI > >> help > >> Display information about the SBI implementation. > >> > >> +config CMD_SMBIOS > >> + bool "smbios" > >> + depends on SMBIOS > >> + default y > >> + help > >> + Display the SMBIOS information. > >> + > > > > So this would be enabled (today) on 888 boards and is a bit more than a > > kilobyte. I think we can just let this be enabled as needed in > > defconfigs? > > > > As needed would be the boards where we want to run the related Python > test. Sandbox and QEMU should be good enough? Yes, I think for most users seeing the smbios tables is probably not particularly useful. ^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH v2 3/4] doc: man-page for smbios command 2024-01-17 15:33 [PATCH v2 1/4] smbios: type2: contained object handles Heinrich Schuchardt 2024-01-17 15:33 ` [PATCH v2 2/4] cmd: provide command to display SMBIOS information Heinrich Schuchardt @ 2024-01-17 15:33 ` Heinrich Schuchardt 2024-01-17 15:33 ` [PATCH v2 4/4] test: unit test " Heinrich Schuchardt 2024-01-17 16:10 ` [PATCH v2 0/4] cmd: provide command to display SMBIOS information Heinrich Schuchardt 3 siblings, 0 replies; 15+ messages in thread From: Heinrich Schuchardt @ 2024-01-17 15:33 UTC (permalink / raw) To: Tom Rini Cc: Simon Glass, Ilias Apalodimas, Bin Meng, u-boot, Heinrich Schuchardt Provide a man-page for the smbios command. Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com> Reviewed-by: Simon Glass <sjg@chromium.org> Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org> --- v2: no change --- doc/usage/cmd/smbios.rst | 93 ++++++++++++++++++++++++++++++++++++++++ doc/usage/index.rst | 1 + 2 files changed, 94 insertions(+) create mode 100644 doc/usage/cmd/smbios.rst diff --git a/doc/usage/cmd/smbios.rst b/doc/usage/cmd/smbios.rst new file mode 100644 index 00000000000..1ffd706d7de --- /dev/null +++ b/doc/usage/cmd/smbios.rst @@ -0,0 +1,93 @@ +.. SPDX-License-Identifier: GPL-2.0-or-later: + +smbios command +============== + +Synopsis +-------- + +:: + + smbios + +Description +----------- + +The smbios command displays information from the SMBIOS tables. + +Examples +-------- + +The example below shows an example output of the smbios command. + +:: + + => smbios + SMBIOS 2.8.0 present. + 8 structures occupying 81 bytes + Table at 0x6d35018 + + Handle 0x0100, DMI type 1, 27 bytes at 0x6d35018 + System Information + Manufacturer: QEMU + Product Name: Standard PC (i440FX + PIIX, 1996) + Version: pc-i440fx-2.5 + Serial Number: + UUID 00000000-0000-0000-0000-000000000000 + Wake Up Type: + Serial Number: + SKU Number: + + Handle 0x0300, DMI type 3, 22 bytes at 0x6d35069 + Header and Data: + 00000000: 03 16 00 03 01 01 02 00 00 03 03 03 02 00 00 00 + 00000010: 00 00 00 00 00 00 + Strings: + String 1: QEMU + String 2: pc-i440fx-2.5 + + Handle 0x0400, DMI type 4, 42 bytes at 0x6d35093 + Header and Data: + 00000000: 04 2a 00 04 01 03 01 02 63 06 00 00 fd ab 81 07 + 00000010: 03 00 00 00 d0 07 d0 07 41 01 ff ff ff ff ff ff + 00000020: 00 00 00 01 01 01 02 00 01 00 + Strings: + String 1: CPU 0 + String 2: QEMU + String 3: pc-i440fx-2.5 + + Handle 0x1000, DMI type 16, 23 bytes at 0x6d350d7 + Header and Data: + 00000000: 10 17 00 10 01 03 06 00 00 02 00 fe ff 01 00 00 + 00000010: 00 00 00 00 00 00 00 + + Handle 0x1100, DMI type 17, 40 bytes at 0x6d350f0 + Header and Data: + 00000000: 11 28 00 11 00 10 fe ff ff ff ff ff 80 00 09 00 + 00000010: 01 00 07 02 00 00 00 02 00 00 00 00 00 00 00 00 + 00000020: 00 00 00 00 00 00 00 00 + Strings: + String 1: DIMM 0 + String 2: QEMU + + Handle 0x1300, DMI type 19, 31 bytes at 0x6d35125 + Header and Data: + 00000000: 13 1f 00 13 00 00 00 00 ff ff 01 00 00 10 01 00 + 00000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + + Handle 0x2000, DMI type 32, 11 bytes at 0x6d35146 + Header and Data: + 00000000: 20 0b 00 20 00 00 00 00 00 00 00 + + Handle 0x7f00, DMI type 127, 4 bytes at 0x6d35153 + End Of Table + +Configuration +------------- + +The command is only available if CONFIG_CMD_SMBIOS=y. + +Return value +------------ + +The return value $? is 0 (true) on success, 1 (false) otherwise. diff --git a/doc/usage/index.rst b/doc/usage/index.rst index c171c029b80..0d174eefaa5 100644 --- a/doc/usage/index.rst +++ b/doc/usage/index.rst @@ -103,6 +103,7 @@ Shell commands cmd/size cmd/sleep cmd/sm + cmd/smbios cmd/sound cmd/source cmd/temperature -- 2.43.0 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 4/4] test: unit test for smbios command 2024-01-17 15:33 [PATCH v2 1/4] smbios: type2: contained object handles Heinrich Schuchardt 2024-01-17 15:33 ` [PATCH v2 2/4] cmd: provide command to display SMBIOS information Heinrich Schuchardt 2024-01-17 15:33 ` [PATCH v2 3/4] doc: man-page for smbios command Heinrich Schuchardt @ 2024-01-17 15:33 ` Heinrich Schuchardt 2024-01-18 11:51 ` Ilias Apalodimas 2024-01-17 16:10 ` [PATCH v2 0/4] cmd: provide command to display SMBIOS information Heinrich Schuchardt 3 siblings, 1 reply; 15+ messages in thread From: Heinrich Schuchardt @ 2024-01-17 15:33 UTC (permalink / raw) To: Tom Rini Cc: Simon Glass, Ilias Apalodimas, Bin Meng, u-boot, Heinrich Schuchardt Provide a unit test for the smbios command. Provide different test functions for QEMU, sandbox, and other systems. Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com> --- v2: for generic boards we only can assume that a type 127 table exists email address updated --- test/py/tests/test_smbios.py | 41 ++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 test/py/tests/test_smbios.py diff --git a/test/py/tests/test_smbios.py b/test/py/tests/test_smbios.py new file mode 100644 index 00000000000..82b0b689830 --- /dev/null +++ b/test/py/tests/test_smbios.py @@ -0,0 +1,41 @@ +# SPDX-License-Identifier: GPL-2.0-or-later + +"""Test smbios command""" + +import pytest + +@pytest.mark.buildconfigspec('cmd_smbios') +@pytest.mark.notbuildconfigspec('qfw_smbios') +@pytest.mark.notbuildconfigspec('sandbox') +def test_cmd_smbios(u_boot_console): + """Run the smbios command""" + output = u_boot_console.run_command('smbios') + assert 'DMI type 127,' in output + +@pytest.mark.buildconfigspec('cmd_smbios') +@pytest.mark.buildconfigspec('qfw_smbios') +@pytest.mark.notbuildconfigspec('sandbox') +# TODO: +# QEMU v8.2.0 lacks SMBIOS support for RISC-V +# Once support is available in our Docker image we can remove the constraint. +@pytest.mark.notbuildconfigspec('riscv') +def test_cmd_smbios_qemu(u_boot_console): + """Run the smbios command on QEMU""" + output = u_boot_console.run_command('smbios') + assert 'DMI type 1,' in output + assert 'Manufacturer: QEMU' in output + assert 'DMI type 127,' in output + +@pytest.mark.buildconfigspec('cmd_smbios') +@pytest.mark.buildconfigspec('sandbox') +def test_cmd_smbios_sandbox(u_boot_console): + """Run the smbios command on the sandbox""" + output = u_boot_console.run_command('smbios') + assert 'DMI type 0,' in output + assert 'String 1: U-Boot' in output + assert 'DMI type 1,' in output + assert 'Manufacturer: sandbox' in output + assert 'DMI type 2,' in output + assert 'DMI type 3,' in output + assert 'DMI type 4,' in output + assert 'DMI type 127,' in output -- 2.43.0 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH v2 4/4] test: unit test for smbios command 2024-01-17 15:33 ` [PATCH v2 4/4] test: unit test " Heinrich Schuchardt @ 2024-01-18 11:51 ` Ilias Apalodimas 2024-01-18 12:33 ` Heinrich Schuchardt 0 siblings, 1 reply; 15+ messages in thread From: Ilias Apalodimas @ 2024-01-18 11:51 UTC (permalink / raw) To: Heinrich Schuchardt; +Cc: Tom Rini, Simon Glass, Bin Meng, u-boot Hi Heinrich, On Wed, 17 Jan 2024 at 17:34, Heinrich Schuchardt <heinrich.schuchardt@canonical.com> wrote: > > Provide a unit test for the smbios command. > > Provide different test functions for QEMU, sandbox, and other systems. > > Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com> > --- > v2: > for generic boards we only can assume that a type 127 table exists > email address updated > --- > test/py/tests/test_smbios.py | 41 ++++++++++++++++++++++++++++++++++++ > 1 file changed, 41 insertions(+) > create mode 100644 test/py/tests/test_smbios.py > > diff --git a/test/py/tests/test_smbios.py b/test/py/tests/test_smbios.py > new file mode 100644 > index 00000000000..82b0b689830 > --- /dev/null > +++ b/test/py/tests/test_smbios.py > @@ -0,0 +1,41 @@ > +# SPDX-License-Identifier: GPL-2.0-or-later > + > +"""Test smbios command""" > + > +import pytest > + > +@pytest.mark.buildconfigspec('cmd_smbios') > +@pytest.mark.notbuildconfigspec('qfw_smbios') > +@pytest.mark.notbuildconfigspec('sandbox') > +def test_cmd_smbios(u_boot_console): > + """Run the smbios command""" > + output = u_boot_console.run_command('smbios') > + assert 'DMI type 127,' in output > + > +@pytest.mark.buildconfigspec('cmd_smbios') > +@pytest.mark.buildconfigspec('qfw_smbios') > +@pytest.mark.notbuildconfigspec('sandbox') > +# TODO: > +# QEMU v8.2.0 lacks SMBIOS support for RISC-V > +# Once support is available in our Docker image we can remove the constraint. > +@pytest.mark.notbuildconfigspec('riscv') > +def test_cmd_smbios_qemu(u_boot_console): > + """Run the smbios command on QEMU""" > + output = u_boot_console.run_command('smbios') > + assert 'DMI type 1,' in output > + assert 'Manufacturer: QEMU' in output > + assert 'DMI type 127,' in output Is there an easy way to run this test with and without the SMBIOS tables provided by QEMU? We could test the u-boot generated ones that way Thanks /Ilias > + > +@pytest.mark.buildconfigspec('cmd_smbios') > +@pytest.mark.buildconfigspec('sandbox') > +def test_cmd_smbios_sandbox(u_boot_console): > + """Run the smbios command on the sandbox""" > + output = u_boot_console.run_command('smbios') > + assert 'DMI type 0,' in output > + assert 'String 1: U-Boot' in output > + assert 'DMI type 1,' in output > + assert 'Manufacturer: sandbox' in output > + assert 'DMI type 2,' in output > + assert 'DMI type 3,' in output > + assert 'DMI type 4,' in output > + assert 'DMI type 127,' in output > -- > 2.43.0 > ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2 4/4] test: unit test for smbios command 2024-01-18 11:51 ` Ilias Apalodimas @ 2024-01-18 12:33 ` Heinrich Schuchardt 2024-01-18 12:35 ` Ilias Apalodimas 0 siblings, 1 reply; 15+ messages in thread From: Heinrich Schuchardt @ 2024-01-18 12:33 UTC (permalink / raw) To: Ilias Apalodimas; +Cc: Tom Rini, Simon Glass, Bin Meng, u-boot On 1/18/24 12:51, Ilias Apalodimas wrote: > Hi Heinrich, > > On Wed, 17 Jan 2024 at 17:34, Heinrich Schuchardt > <heinrich.schuchardt@canonical.com> wrote: >> >> Provide a unit test for the smbios command. >> >> Provide different test functions for QEMU, sandbox, and other systems. >> >> Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com> >> --- >> v2: >> for generic boards we only can assume that a type 127 table exists >> email address updated >> --- >> test/py/tests/test_smbios.py | 41 ++++++++++++++++++++++++++++++++++++ >> 1 file changed, 41 insertions(+) >> create mode 100644 test/py/tests/test_smbios.py >> >> diff --git a/test/py/tests/test_smbios.py b/test/py/tests/test_smbios.py >> new file mode 100644 >> index 00000000000..82b0b689830 >> --- /dev/null >> +++ b/test/py/tests/test_smbios.py >> @@ -0,0 +1,41 @@ >> +# SPDX-License-Identifier: GPL-2.0-or-later >> + >> +"""Test smbios command""" >> + >> +import pytest >> + >> +@pytest.mark.buildconfigspec('cmd_smbios') >> +@pytest.mark.notbuildconfigspec('qfw_smbios') >> +@pytest.mark.notbuildconfigspec('sandbox') >> +def test_cmd_smbios(u_boot_console): >> + """Run the smbios command""" >> + output = u_boot_console.run_command('smbios') >> + assert 'DMI type 127,' in output >> + >> +@pytest.mark.buildconfigspec('cmd_smbios') >> +@pytest.mark.buildconfigspec('qfw_smbios') >> +@pytest.mark.notbuildconfigspec('sandbox') >> +# TODO: >> +# QEMU v8.2.0 lacks SMBIOS support for RISC-V >> +# Once support is available in our Docker image we can remove the constraint. >> +@pytest.mark.notbuildconfigspec('riscv') >> +def test_cmd_smbios_qemu(u_boot_console): >> + """Run the smbios command on QEMU""" >> + output = u_boot_console.run_command('smbios') >> + assert 'DMI type 1,' in output >> + assert 'Manufacturer: QEMU' in output >> + assert 'DMI type 127,' in output > > Is there an easy way to run this test with and without the SMBIOS > tables provided by QEMU? We could test the u-boot generated ones that > way We already test the sandbox without QFW. I would not want to duplicated QEMU defconfigs. Best regards Heinrich > > Thanks > /Ilias >> + >> +@pytest.mark.buildconfigspec('cmd_smbios') >> +@pytest.mark.buildconfigspec('sandbox') >> +def test_cmd_smbios_sandbox(u_boot_console): >> + """Run the smbios command on the sandbox""" >> + output = u_boot_console.run_command('smbios') >> + assert 'DMI type 0,' in output >> + assert 'String 1: U-Boot' in output >> + assert 'DMI type 1,' in output >> + assert 'Manufacturer: sandbox' in output >> + assert 'DMI type 2,' in output >> + assert 'DMI type 3,' in output >> + assert 'DMI type 4,' in output >> + assert 'DMI type 127,' in output >> -- >> 2.43.0 >> ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2 4/4] test: unit test for smbios command 2024-01-18 12:33 ` Heinrich Schuchardt @ 2024-01-18 12:35 ` Ilias Apalodimas 0 siblings, 0 replies; 15+ messages in thread From: Ilias Apalodimas @ 2024-01-18 12:35 UTC (permalink / raw) To: Heinrich Schuchardt; +Cc: Tom Rini, Simon Glass, Bin Meng, u-boot On Thu, Jan 18, 2024 at 01:33:15PM +0100, Heinrich Schuchardt wrote: > On 1/18/24 12:51, Ilias Apalodimas wrote: > > Hi Heinrich, > > > > On Wed, 17 Jan 2024 at 17:34, Heinrich Schuchardt > > <heinrich.schuchardt@canonical.com> wrote: > > > > > > Provide a unit test for the smbios command. > > > > > > Provide different test functions for QEMU, sandbox, and other systems. > > > > > > Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com> > > > --- > > > v2: > > > for generic boards we only can assume that a type 127 table exists > > > email address updated > > > --- > > > test/py/tests/test_smbios.py | 41 ++++++++++++++++++++++++++++++++++++ > > > 1 file changed, 41 insertions(+) > > > create mode 100644 test/py/tests/test_smbios.py > > > > > > diff --git a/test/py/tests/test_smbios.py b/test/py/tests/test_smbios.py > > > new file mode 100644 > > > index 00000000000..82b0b689830 > > > --- /dev/null > > > +++ b/test/py/tests/test_smbios.py > > > @@ -0,0 +1,41 @@ > > > +# SPDX-License-Identifier: GPL-2.0-or-later > > > + > > > +"""Test smbios command""" > > > + > > > +import pytest > > > + > > > +@pytest.mark.buildconfigspec('cmd_smbios') > > > +@pytest.mark.notbuildconfigspec('qfw_smbios') > > > +@pytest.mark.notbuildconfigspec('sandbox') > > > +def test_cmd_smbios(u_boot_console): > > > + """Run the smbios command""" > > > + output = u_boot_console.run_command('smbios') > > > + assert 'DMI type 127,' in output > > > + > > > +@pytest.mark.buildconfigspec('cmd_smbios') > > > +@pytest.mark.buildconfigspec('qfw_smbios') > > > +@pytest.mark.notbuildconfigspec('sandbox') > > > +# TODO: > > > +# QEMU v8.2.0 lacks SMBIOS support for RISC-V > > > +# Once support is available in our Docker image we can remove the constraint. > > > +@pytest.mark.notbuildconfigspec('riscv') > > > +def test_cmd_smbios_qemu(u_boot_console): > > > + """Run the smbios command on QEMU""" > > > + output = u_boot_console.run_command('smbios') > > > + assert 'DMI type 1,' in output > > > + assert 'Manufacturer: QEMU' in output > > > + assert 'DMI type 127,' in output > > > > Is there an easy way to run this test with and without the SMBIOS > > tables provided by QEMU? We could test the u-boot generated ones that > > way > > We already test the sandbox without QFW. I would not want to duplicated QEMU > defconfigs. > Ah fair enough, I can add the generic tests in that one Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org> > Best regards > > Heinrich > > > > > Thanks > > /Ilias > > > + > > > +@pytest.mark.buildconfigspec('cmd_smbios') > > > +@pytest.mark.buildconfigspec('sandbox') > > > +def test_cmd_smbios_sandbox(u_boot_console): > > > + """Run the smbios command on the sandbox""" > > > + output = u_boot_console.run_command('smbios') > > > + assert 'DMI type 0,' in output > > > + assert 'String 1: U-Boot' in output > > > + assert 'DMI type 1,' in output > > > + assert 'Manufacturer: sandbox' in output > > > + assert 'DMI type 2,' in output > > > + assert 'DMI type 3,' in output > > > + assert 'DMI type 4,' in output > > > + assert 'DMI type 127,' in output > > > -- > > > 2.43.0 > > > > ^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH v2 0/4] cmd: provide command to display SMBIOS information 2024-01-17 15:33 [PATCH v2 1/4] smbios: type2: contained object handles Heinrich Schuchardt ` (2 preceding siblings ...) 2024-01-17 15:33 ` [PATCH v2 4/4] test: unit test " Heinrich Schuchardt @ 2024-01-17 16:10 ` Heinrich Schuchardt 3 siblings, 0 replies; 15+ messages in thread From: Heinrich Schuchardt @ 2024-01-17 16:10 UTC (permalink / raw) To: Tom Rini Cc: Simon Glass, Ilias Apalodimas, Bin Meng, u-boot, Heinrich Schuchardt U-Boot may supply an SMBIOS table or they may be copied from QEMU. Provide a command to display the SMBIOS information. Currently only type 1 and 2 are translated to human readable text. Other types may be added later. Currently only a hexdump and the list of strings is provided for these. The following prerequisites had to be fixed: * The definition of SMBIOS type 2 lacked a field. v2: merged patch remove for generic boards we only can assume that a type 127 table exists my email address updated in all patches Heinrich Schuchardt (4): smbios: type2: contained object handles cmd: provide command to display SMBIOS information doc: man-page for smbios command test: unit test for smbios command cmd/Kconfig | 7 ++ cmd/Makefile | 1 + cmd/smbios.c | 191 +++++++++++++++++++++++++++++++++++ doc/usage/cmd/smbios.rst | 93 +++++++++++++++++ doc/usage/index.rst | 1 + include/smbios.h | 1 + test/py/tests/test_smbios.py | 41 ++++++++ 7 files changed, 335 insertions(+) create mode 100644 cmd/smbios.c create mode 100644 doc/usage/cmd/smbios.rst create mode 100644 test/py/tests/test_smbios.py -- 2.43.0 ^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2024-01-25 10:45 UTC | newest] Thread overview: 15+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2024-01-17 15:33 [PATCH v2 1/4] smbios: type2: contained object handles Heinrich Schuchardt 2024-01-17 15:33 ` [PATCH v2 2/4] cmd: provide command to display SMBIOS information Heinrich Schuchardt 2024-01-18 12:39 ` Ilias Apalodimas 2024-01-18 12:54 ` Heinrich Schuchardt 2024-01-18 12:58 ` Ilias Apalodimas 2024-01-24 21:16 ` Tom Rini 2024-01-24 23:24 ` Heinrich Schuchardt 2024-01-25 0:17 ` Tom Rini 2024-01-25 10:45 ` Peter Robinson 2024-01-17 15:33 ` [PATCH v2 3/4] doc: man-page for smbios command Heinrich Schuchardt 2024-01-17 15:33 ` [PATCH v2 4/4] test: unit test " Heinrich Schuchardt 2024-01-18 11:51 ` Ilias Apalodimas 2024-01-18 12:33 ` Heinrich Schuchardt 2024-01-18 12:35 ` Ilias Apalodimas 2024-01-17 16:10 ` [PATCH v2 0/4] cmd: provide command to display SMBIOS information Heinrich Schuchardt
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.