Merge patch series "lib: smbios: Extend driver with using sysinfo driver"

Michal Simek <michal.simek@amd.com> says:

Hi,

currently only DT way is supported and it is added directly to lib/smbios.c
but I think DT and env is only one way how information can be found that's
why this series is improving handling with using sysinfo driver which can
be platform specific.
At the end of day DT should be taken from smbios.c and put to sysinfo DT
driver instead of implementing it directly in this generic file.
This commit is contained in:
Tom Rini 2024-06-20 08:36:06 -06:00
commit 643b55bff0
6 changed files with 46 additions and 9 deletions

View File

@ -27,6 +27,7 @@ CONFIG_BOARD_EARLY_INIT_F=y
CONFIG_BOARD_EARLY_INIT_R=y CONFIG_BOARD_EARLY_INIT_R=y
CONFIG_CLOCKS=y CONFIG_CLOCKS=y
CONFIG_SYS_PROMPT="Versal NET> " CONFIG_SYS_PROMPT="Versal NET> "
CONFIG_CMD_SMBIOS=y
CONFIG_CMD_BOOTMENU=y CONFIG_CMD_BOOTMENU=y
CONFIG_CMD_GREPENV=y CONFIG_CMD_GREPENV=y
CONFIG_CMD_NVEDIT_EFI=y CONFIG_CMD_NVEDIT_EFI=y

View File

@ -28,6 +28,7 @@ CONFIG_SYS_PBSIZE=2073
CONFIG_BOARD_EARLY_INIT_R=y CONFIG_BOARD_EARLY_INIT_R=y
CONFIG_CLOCKS=y CONFIG_CLOCKS=y
CONFIG_SYS_PROMPT="Versal> " CONFIG_SYS_PROMPT="Versal> "
CONFIG_CMD_SMBIOS=y
CONFIG_CMD_BOOTMENU=y CONFIG_CMD_BOOTMENU=y
CONFIG_CMD_GREPENV=y CONFIG_CMD_GREPENV=y
CONFIG_CMD_NVEDIT_EFI=y CONFIG_CMD_NVEDIT_EFI=y

View File

@ -54,6 +54,7 @@ CONFIG_SPL_SPI_LOAD=y
CONFIG_SYS_SPI_U_BOOT_OFFS=0x80000 CONFIG_SYS_SPI_U_BOOT_OFFS=0x80000
CONFIG_SPL_ATF=y CONFIG_SPL_ATF=y
CONFIG_SPL_ATF_NO_PLATFORM_PARAM=y CONFIG_SPL_ATF_NO_PLATFORM_PARAM=y
CONFIG_CMD_SMBIOS=y
CONFIG_CMD_BOOTMENU=y CONFIG_CMD_BOOTMENU=y
CONFIG_CMD_GREPENV=y CONFIG_CMD_GREPENV=y
CONFIG_CMD_NVEDIT_EFI=y CONFIG_CMD_NVEDIT_EFI=y

View File

@ -52,6 +52,7 @@ CONFIG_SPL_SPI_LOAD=y
CONFIG_SYS_SPI_U_BOOT_OFFS=0x100000 CONFIG_SYS_SPI_U_BOOT_OFFS=0x100000
CONFIG_SPL_ATF=y CONFIG_SPL_ATF=y
CONFIG_SPL_ATF_NO_PLATFORM_PARAM=y CONFIG_SPL_ATF_NO_PLATFORM_PARAM=y
CONFIG_CMD_SMBIOS=y
CONFIG_CMD_BOOTMENU=y CONFIG_CMD_BOOTMENU=y
CONFIG_CMD_THOR_DOWNLOAD=y CONFIG_CMD_THOR_DOWNLOAD=y
CONFIG_THOR_RESET_OFF=y CONFIG_THOR_RESET_OFF=y

View File

@ -43,8 +43,17 @@ enum sysinfo_id {
SYSINFO_ID_NONE, SYSINFO_ID_NONE,
/* For SMBIOS tables */ /* For SMBIOS tables */
SYSINFO_ID_SMBIOS_SYSTEM_MANUFACTURER,
SYSINFO_ID_SMBIOS_SYSTEM_PRODUCT,
SYSINFO_ID_SMBIOS_SYSTEM_VERSION, SYSINFO_ID_SMBIOS_SYSTEM_VERSION,
SYSINFO_ID_SMBIOS_SYSTEM_SERIAL,
SYSINFO_ID_SMBIOS_SYSTEM_SKU,
SYSINFO_ID_SMBIOS_SYSTEM_FAMILY,
SYSINFO_ID_SMBIOS_BASEBOARD_MANUFACTURER,
SYSINFO_ID_SMBIOS_BASEBOARD_PRODUCT,
SYSINFO_ID_SMBIOS_BASEBOARD_VERSION, SYSINFO_ID_SMBIOS_BASEBOARD_VERSION,
SYSINFO_ID_SMBIOS_BASEBOARD_SERIAL,
SYSINFO_ID_SMBIOS_BASEBOARD_ASSET_TAG,
/* For show_board_info() */ /* For show_board_info() */
SYSINFO_ID_BOARD_MODEL, SYSINFO_ID_BOARD_MODEL,

View File

@ -383,8 +383,12 @@ static int smbios_write_type1(ulong *current, int handle,
memset(t, 0, sizeof(struct smbios_type1)); memset(t, 0, sizeof(struct smbios_type1));
fill_smbios_header(t, SMBIOS_SYSTEM_INFORMATION, len, handle); fill_smbios_header(t, SMBIOS_SYSTEM_INFORMATION, len, handle);
smbios_set_eos(ctx, t->eos); smbios_set_eos(ctx, t->eos);
t->manufacturer = smbios_add_prop(ctx, "manufacturer", NULL); t->manufacturer = smbios_add_prop_si(ctx, "manufacturer",
t->product_name = smbios_add_prop(ctx, "product", NULL); SYSINFO_ID_SMBIOS_SYSTEM_MANUFACTURER,
NULL);
t->product_name = smbios_add_prop_si(ctx, "product",
SYSINFO_ID_SMBIOS_SYSTEM_PRODUCT,
NULL);
t->version = smbios_add_prop_si(ctx, "version", t->version = smbios_add_prop_si(ctx, "version",
SYSINFO_ID_SMBIOS_SYSTEM_VERSION, SYSINFO_ID_SMBIOS_SYSTEM_VERSION,
NULL); NULL);
@ -392,11 +396,15 @@ static int smbios_write_type1(ulong *current, int handle,
t->serial_number = smbios_add_prop(ctx, NULL, serial_str); t->serial_number = smbios_add_prop(ctx, NULL, serial_str);
strncpy((char *)t->uuid, serial_str, sizeof(t->uuid)); strncpy((char *)t->uuid, serial_str, sizeof(t->uuid));
} else { } else {
t->serial_number = smbios_add_prop(ctx, "serial", NULL); t->serial_number = smbios_add_prop_si(ctx, "serial",
SYSINFO_ID_SMBIOS_SYSTEM_SERIAL,
NULL);
} }
t->wakeup_type = SMBIOS_WAKEUP_TYPE_UNKNOWN; t->wakeup_type = SMBIOS_WAKEUP_TYPE_UNKNOWN;
t->sku_number = smbios_add_prop(ctx, "sku", NULL); t->sku_number = smbios_add_prop_si(ctx, "sku",
t->family = smbios_add_prop(ctx, "family", NULL); SYSINFO_ID_SMBIOS_SYSTEM_SKU, NULL);
t->family = smbios_add_prop_si(ctx, "family",
SYSINFO_ID_SMBIOS_SYSTEM_FAMILY, NULL);
len = t->length + smbios_string_table_len(ctx); len = t->length + smbios_string_table_len(ctx);
*current += len; *current += len;
@ -415,12 +423,22 @@ static int smbios_write_type2(ulong *current, int handle,
memset(t, 0, sizeof(struct smbios_type2)); memset(t, 0, sizeof(struct smbios_type2));
fill_smbios_header(t, SMBIOS_BOARD_INFORMATION, len, handle); fill_smbios_header(t, SMBIOS_BOARD_INFORMATION, len, handle);
smbios_set_eos(ctx, t->eos); smbios_set_eos(ctx, t->eos);
t->manufacturer = smbios_add_prop(ctx, "manufacturer", NULL); t->manufacturer = smbios_add_prop_si(ctx, "manufacturer",
t->product_name = smbios_add_prop(ctx, "product", NULL); SYSINFO_ID_SMBIOS_BASEBOARD_MANUFACTURER,
NULL);
t->product_name = smbios_add_prop_si(ctx, "product",
SYSINFO_ID_SMBIOS_BASEBOARD_PRODUCT,
NULL);
t->version = smbios_add_prop_si(ctx, "version", t->version = smbios_add_prop_si(ctx, "version",
SYSINFO_ID_SMBIOS_BASEBOARD_VERSION, SYSINFO_ID_SMBIOS_BASEBOARD_VERSION,
NULL); NULL);
t->asset_tag_number = smbios_add_prop(ctx, "asset-tag", NULL);
t->serial_number = smbios_add_prop_si(ctx, "serial",
SYSINFO_ID_SMBIOS_BASEBOARD_SERIAL,
NULL);
t->asset_tag_number = smbios_add_prop_si(ctx, "asset-tag",
SYSINFO_ID_SMBIOS_BASEBOARD_ASSET_TAG,
NULL);
t->feature_flags = SMBIOS_BOARD_FEATURE_HOSTING; t->feature_flags = SMBIOS_BOARD_FEATURE_HOSTING;
t->board_type = SMBIOS_BOARD_MOTHERBOARD; t->board_type = SMBIOS_BOARD_MOTHERBOARD;
t->chassis_handle = handle + 1; t->chassis_handle = handle + 1;
@ -573,8 +591,14 @@ ulong write_smbios_table(ulong addr)
ctx.node = ofnode_null(); ctx.node = ofnode_null();
if (IS_ENABLED(CONFIG_OF_CONTROL) && CONFIG_IS_ENABLED(SYSINFO)) { if (IS_ENABLED(CONFIG_OF_CONTROL) && CONFIG_IS_ENABLED(SYSINFO)) {
uclass_first_device(UCLASS_SYSINFO, &ctx.dev); uclass_first_device(UCLASS_SYSINFO, &ctx.dev);
if (ctx.dev) if (ctx.dev) {
int ret;
parent_node = dev_read_subnode(ctx.dev, "smbios"); parent_node = dev_read_subnode(ctx.dev, "smbios");
ret = sysinfo_detect(ctx.dev);
if (ret)
return ret;
}
} else { } else {
ctx.dev = NULL; ctx.dev = NULL;
} }