[PATCH 0/3] lib: smbios: Extend driver with using sysinfo driver

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.
Thanks, Michal
Michal Simek (3): xilinx: Enable SMBIOS command lib: smbios: Let detect the system via sysinfo lib: smbios: Detect system properties via SYSINFO IDs
configs/xilinx_versal_net_virt_defconfig | 1 + configs/xilinx_versal_virt_defconfig | 1 + configs/xilinx_zynqmp_kria_defconfig | 1 + configs/xilinx_zynqmp_virt_defconfig | 1 + include/sysinfo.h | 9 +++++ lib/smbios.c | 42 +++++++++++++++++++----- 6 files changed, 46 insertions(+), 9 deletions(-)

It is good to be aware what information is shared via smbios interface that's why enable it by default.
Signed-off-by: Michal Simek michal.simek@amd.com ---
configs/xilinx_versal_net_virt_defconfig | 1 + configs/xilinx_versal_virt_defconfig | 1 + configs/xilinx_zynqmp_kria_defconfig | 1 + configs/xilinx_zynqmp_virt_defconfig | 1 + 4 files changed, 4 insertions(+)
diff --git a/configs/xilinx_versal_net_virt_defconfig b/configs/xilinx_versal_net_virt_defconfig index d9e2e050ceb6..3c7e37d7c81d 100644 --- a/configs/xilinx_versal_net_virt_defconfig +++ b/configs/xilinx_versal_net_virt_defconfig @@ -26,6 +26,7 @@ CONFIG_BOARD_EARLY_INIT_F=y CONFIG_BOARD_EARLY_INIT_R=y CONFIG_CLOCKS=y CONFIG_SYS_PROMPT="Versal NET> " +CONFIG_CMD_SMBIOS=y CONFIG_CMD_BOOTMENU=y CONFIG_CMD_GREPENV=y CONFIG_CMD_NVEDIT_EFI=y diff --git a/configs/xilinx_versal_virt_defconfig b/configs/xilinx_versal_virt_defconfig index 95a671db363e..b7c3a4f96416 100644 --- a/configs/xilinx_versal_virt_defconfig +++ b/configs/xilinx_versal_virt_defconfig @@ -28,6 +28,7 @@ CONFIG_SYS_PBSIZE=2073 CONFIG_BOARD_EARLY_INIT_R=y CONFIG_CLOCKS=y CONFIG_SYS_PROMPT="Versal> " +CONFIG_CMD_SMBIOS=y CONFIG_CMD_BOOTMENU=y CONFIG_CMD_GREPENV=y CONFIG_CMD_NVEDIT_EFI=y diff --git a/configs/xilinx_zynqmp_kria_defconfig b/configs/xilinx_zynqmp_kria_defconfig index 7af8b27be931..41798ace6bc9 100644 --- a/configs/xilinx_zynqmp_kria_defconfig +++ b/configs/xilinx_zynqmp_kria_defconfig @@ -54,6 +54,7 @@ CONFIG_SPL_SPI_LOAD=y CONFIG_SYS_SPI_U_BOOT_OFFS=0x80000 CONFIG_SPL_ATF=y CONFIG_SPL_ATF_NO_PLATFORM_PARAM=y +CONFIG_CMD_SMBIOS=y CONFIG_CMD_BOOTMENU=y CONFIG_CMD_GREPENV=y CONFIG_CMD_NVEDIT_EFI=y diff --git a/configs/xilinx_zynqmp_virt_defconfig b/configs/xilinx_zynqmp_virt_defconfig index 296adf066b10..772209dd6b1e 100644 --- a/configs/xilinx_zynqmp_virt_defconfig +++ b/configs/xilinx_zynqmp_virt_defconfig @@ -52,6 +52,7 @@ CONFIG_SPL_SPI_LOAD=y CONFIG_SYS_SPI_U_BOOT_OFFS=0x100000 CONFIG_SPL_ATF=y CONFIG_SPL_ATF_NO_PLATFORM_PARAM=y +CONFIG_CMD_SMBIOS=y CONFIG_CMD_BOOTMENU=y CONFIG_CMD_THOR_DOWNLOAD=y CONFIG_THOR_RESET_OFF=y

On 4/26/24 15:38, Michal Simek wrote:
It is good to be aware what information is shared via smbios interface that's why enable it by default.
Signed-off-by: Michal Simek michal.simek@amd.com
configs/xilinx_versal_net_virt_defconfig | 1 + configs/xilinx_versal_virt_defconfig | 1 + configs/xilinx_zynqmp_kria_defconfig | 1 + configs/xilinx_zynqmp_virt_defconfig | 1 + 4 files changed, 4 insertions(+)
diff --git a/configs/xilinx_versal_net_virt_defconfig b/configs/xilinx_versal_net_virt_defconfig index d9e2e050ceb6..3c7e37d7c81d 100644 --- a/configs/xilinx_versal_net_virt_defconfig +++ b/configs/xilinx_versal_net_virt_defconfig @@ -26,6 +26,7 @@ CONFIG_BOARD_EARLY_INIT_F=y CONFIG_BOARD_EARLY_INIT_R=y CONFIG_CLOCKS=y CONFIG_SYS_PROMPT="Versal NET> " +CONFIG_CMD_SMBIOS=y CONFIG_CMD_BOOTMENU=y CONFIG_CMD_GREPENV=y CONFIG_CMD_NVEDIT_EFI=y diff --git a/configs/xilinx_versal_virt_defconfig b/configs/xilinx_versal_virt_defconfig index 95a671db363e..b7c3a4f96416 100644 --- a/configs/xilinx_versal_virt_defconfig +++ b/configs/xilinx_versal_virt_defconfig @@ -28,6 +28,7 @@ CONFIG_SYS_PBSIZE=2073 CONFIG_BOARD_EARLY_INIT_R=y CONFIG_CLOCKS=y CONFIG_SYS_PROMPT="Versal> " +CONFIG_CMD_SMBIOS=y CONFIG_CMD_BOOTMENU=y CONFIG_CMD_GREPENV=y CONFIG_CMD_NVEDIT_EFI=y diff --git a/configs/xilinx_zynqmp_kria_defconfig b/configs/xilinx_zynqmp_kria_defconfig index 7af8b27be931..41798ace6bc9 100644 --- a/configs/xilinx_zynqmp_kria_defconfig +++ b/configs/xilinx_zynqmp_kria_defconfig @@ -54,6 +54,7 @@ CONFIG_SPL_SPI_LOAD=y CONFIG_SYS_SPI_U_BOOT_OFFS=0x80000 CONFIG_SPL_ATF=y CONFIG_SPL_ATF_NO_PLATFORM_PARAM=y +CONFIG_CMD_SMBIOS=y CONFIG_CMD_BOOTMENU=y CONFIG_CMD_GREPENV=y CONFIG_CMD_NVEDIT_EFI=y diff --git a/configs/xilinx_zynqmp_virt_defconfig b/configs/xilinx_zynqmp_virt_defconfig index 296adf066b10..772209dd6b1e 100644 --- a/configs/xilinx_zynqmp_virt_defconfig +++ b/configs/xilinx_zynqmp_virt_defconfig @@ -52,6 +52,7 @@ CONFIG_SPL_SPI_LOAD=y CONFIG_SYS_SPI_U_BOOT_OFFS=0x100000 CONFIG_SPL_ATF=y CONFIG_SPL_ATF_NO_PLATFORM_PARAM=y +CONFIG_CMD_SMBIOS=y CONFIG_CMD_BOOTMENU=y CONFIG_CMD_THOR_DOWNLOAD=y CONFIG_THOR_RESET_OFF=y
This patch is independent of the series that's why I applied only this patch.
Thanks, Michal

Currently code looks like that it sysinfo drivers are supported but actually none checking that system is detected. That's why call sysinfo_detect() to make sure that priv->detected in sysinfo uclass is setup hence information from driver can be passed to smbios.
Signed-off-by: Michal Simek michal.simek@amd.com ---
lib/smbios.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/lib/smbios.c b/lib/smbios.c index b190b010f30f..3c1b3cf47e72 100644 --- a/lib/smbios.c +++ b/lib/smbios.c @@ -573,8 +573,14 @@ ulong write_smbios_table(ulong addr) ctx.node = ofnode_null(); if (IS_ENABLED(CONFIG_OF_CONTROL)) { uclass_first_device(UCLASS_SYSINFO, &ctx.dev); - if (ctx.dev) + if (ctx.dev) { + int ret; + parent_node = dev_read_subnode(ctx.dev, "smbios"); + ret = sysinfo_detect(ctx.dev); + if (ret) + return ret; + } } else { ctx.dev = NULL; }

On Fri, 26 Apr 2024 at 07:38, Michal Simek michal.simek@amd.com wrote:
Currently code looks like that it sysinfo drivers are supported but actually none checking that system is detected. That's why call sysinfo_detect() to make sure that priv->detected in sysinfo uclass is setup hence information from driver can be passed to smbios.
Signed-off-by: Michal Simek michal.simek@amd.com
lib/smbios.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
Reviewed-by: Simon Glass sjg@chromium.org

Code is pretty much supports only DT properties and completely ignore information coming from sysinfo driver. Code is calling smbios_add_prop() which calls with smbios_add_prop_si(SYSINFO_ID_NONE). But SYSINFO_ID_NONE can't differentiate different entries from sysinfo driver. That's why introduce separate SYSINFO macros which can be used in sysinfo driver and passed to smbios structure.
Signed-off-by: Michal Simek michal.simek@amd.com ---
include/sysinfo.h | 9 +++++++++ lib/smbios.c | 34 ++++++++++++++++++++++++++-------- 2 files changed, 35 insertions(+), 8 deletions(-)
diff --git a/include/sysinfo.h b/include/sysinfo.h index 524c7d6b223f..8a77ef448565 100644 --- a/include/sysinfo.h +++ b/include/sysinfo.h @@ -43,8 +43,17 @@ enum sysinfo_id { SYSINFO_ID_NONE,
/* For SMBIOS tables */ + SYSINFO_ID_SMBIOS_SYSTEM_MANUFACTURER, + SYSINFO_ID_SMBIOS_SYSTEM_PRODUCT, 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_SERIAL, + SYSINFO_ID_SMBIOS_BASEBOARD_ASSET_TAG,
/* For show_board_info() */ SYSINFO_ID_BOARD_MODEL, diff --git a/lib/smbios.c b/lib/smbios.c index 3c1b3cf47e72..cd4a4aef6309 100644 --- a/lib/smbios.c +++ b/lib/smbios.c @@ -383,8 +383,12 @@ static int smbios_write_type1(ulong *current, int handle, memset(t, 0, sizeof(struct smbios_type1)); fill_smbios_header(t, SMBIOS_SYSTEM_INFORMATION, len, handle); smbios_set_eos(ctx, t->eos); - t->manufacturer = smbios_add_prop(ctx, "manufacturer", NULL); - t->product_name = smbios_add_prop(ctx, "product", NULL); + t->manufacturer = smbios_add_prop_si(ctx, "manufacturer", + 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", SYSINFO_ID_SMBIOS_SYSTEM_VERSION, NULL); @@ -392,11 +396,15 @@ static int smbios_write_type1(ulong *current, int handle, t->serial_number = smbios_add_prop(ctx, NULL, serial_str); strncpy((char *)t->uuid, serial_str, sizeof(t->uuid)); } 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->sku_number = smbios_add_prop(ctx, "sku", NULL); - t->family = smbios_add_prop(ctx, "family", NULL); + t->sku_number = smbios_add_prop_si(ctx, "sku", + 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); *current += len; @@ -415,12 +423,22 @@ static int smbios_write_type2(ulong *current, int handle, memset(t, 0, sizeof(struct smbios_type2)); fill_smbios_header(t, SMBIOS_BOARD_INFORMATION, len, handle); smbios_set_eos(ctx, t->eos); - t->manufacturer = smbios_add_prop(ctx, "manufacturer", NULL); - t->product_name = smbios_add_prop(ctx, "product", NULL); + t->manufacturer = smbios_add_prop_si(ctx, "manufacturer", + 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", SYSINFO_ID_SMBIOS_BASEBOARD_VERSION, 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->board_type = SMBIOS_BOARD_MOTHERBOARD; t->chassis_handle = handle + 1;

On Fri, 26 Apr 2024 at 07:38, Michal Simek michal.simek@amd.com wrote:
Code is pretty much supports only DT properties and completely ignore information coming from sysinfo driver. Code is calling smbios_add_prop() which calls with smbios_add_prop_si(SYSINFO_ID_NONE). But SYSINFO_ID_NONE can't differentiate different entries from sysinfo driver. That's why introduce separate SYSINFO macros which can be used in sysinfo driver and passed to smbios structure.
Signed-off-by: Michal Simek michal.simek@amd.com
include/sysinfo.h | 9 +++++++++ lib/smbios.c | 34 ++++++++++++++++++++++++++-------- 2 files changed, 35 insertions(+), 8 deletions(-)
Reviewed-by: Simon Glass sjg@chromium.org

Hi Ilias,
On 4/26/24 15:38, Michal Simek wrote:
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.
Thanks, Michal
Michal Simek (3): xilinx: Enable SMBIOS command lib: smbios: Let detect the system via sysinfo lib: smbios: Detect system properties via SYSINFO IDs
configs/xilinx_versal_net_virt_defconfig | 1 + configs/xilinx_versal_virt_defconfig | 1 + configs/xilinx_zynqmp_kria_defconfig | 1 + configs/xilinx_zynqmp_virt_defconfig | 1 + include/sysinfo.h | 9 +++++ lib/smbios.c | 42 +++++++++++++++++++----- 6 files changed, 46 insertions(+), 9 deletions(-)
Any comment on this series?
Thanks, Michal

Hi Michal
On Fri, 24 May 2024 at 12:45, Michal Simek michal.simek@amd.com wrote:
Hi Ilias,
On 4/26/24 15:38, Michal Simek wrote:
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.
Thanks, Michal
Michal Simek (3): xilinx: Enable SMBIOS command lib: smbios: Let detect the system via sysinfo lib: smbios: Detect system properties via SYSINFO IDs
configs/xilinx_versal_net_virt_defconfig | 1 + configs/xilinx_versal_virt_defconfig | 1 + configs/xilinx_zynqmp_kria_defconfig | 1 + configs/xilinx_zynqmp_virt_defconfig | 1 + include/sysinfo.h | 9 +++++ lib/smbios.c | 42 +++++++++++++++++++----- 6 files changed, 46 insertions(+), 9 deletions(-)
Any comment on this series?
It's mostly Simon that created that sysinfo stuff, so I was expecting him to have a look. I can put in on my bucket list, but that's going to take some time
Thanks /Ilias
Thanks, Michal

On 5/24/24 12:07, Ilias Apalodimas wrote:
Hi Michal
On Fri, 24 May 2024 at 12:45, Michal Simek michal.simek@amd.com wrote:
Hi Ilias,
On 4/26/24 15:38, Michal Simek wrote:
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.
Thanks, Michal
Michal Simek (3): xilinx: Enable SMBIOS command lib: smbios: Let detect the system via sysinfo lib: smbios: Detect system properties via SYSINFO IDs
configs/xilinx_versal_net_virt_defconfig | 1 + configs/xilinx_versal_virt_defconfig | 1 + configs/xilinx_zynqmp_kria_defconfig | 1 + configs/xilinx_zynqmp_virt_defconfig | 1 + include/sysinfo.h | 9 +++++ lib/smbios.c | 42 +++++++++++++++++++----- 6 files changed, 46 insertions(+), 9 deletions(-)
Any comment on this series?
It's mostly Simon that created that sysinfo stuff, so I was expecting him to have a look. I can put in on my bucket list, but that's going to take some time
Simon: Any comment?
Thanks, Michal

Hi Michal,
On Fri, 7 Jun 2024 at 01:53, Michal Simek michal.simek@amd.com wrote:
On 5/24/24 12:07, Ilias Apalodimas wrote:
Hi Michal
On Fri, 24 May 2024 at 12:45, Michal Simek michal.simek@amd.com wrote:
Hi Ilias,
On 4/26/24 15:38, Michal Simek wrote:
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.
Thanks, Michal
Michal Simek (3): xilinx: Enable SMBIOS command lib: smbios: Let detect the system via sysinfo lib: smbios: Detect system properties via SYSINFO IDs
configs/xilinx_versal_net_virt_defconfig | 1 + configs/xilinx_versal_virt_defconfig | 1 + configs/xilinx_zynqmp_kria_defconfig | 1 + configs/xilinx_zynqmp_virt_defconfig | 1 + include/sysinfo.h | 9 +++++ lib/smbios.c | 42 +++++++++++++++++++----- 6 files changed, 46 insertions(+), 9 deletions(-)
Any comment on this series?
It's mostly Simon that created that sysinfo stuff, so I was expecting him to have a look. I can put in on my bucket list, but that's going to take some time
Simon: Any comment?
It looks OK to me.
Regards, Simon

Hi,
On 4/26/24 15:38, Michal Simek wrote:
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.
Thanks, Michal
Michal Simek (3): xilinx: Enable SMBIOS command lib: smbios: Let detect the system via sysinfo lib: smbios: Detect system properties via SYSINFO IDs
configs/xilinx_versal_net_virt_defconfig | 1 + configs/xilinx_versal_virt_defconfig | 1 + configs/xilinx_zynqmp_kria_defconfig | 1 + configs/xilinx_zynqmp_virt_defconfig | 1 + include/sysinfo.h | 9 +++++ lib/smbios.c | 42 +++++++++++++++++++----- 6 files changed, 46 insertions(+), 9 deletions(-)
Heinrich/Tom: Can you please take this series to your tree? Feel free to take also 1/3 which is my branch but can go with it too.
Thanks, Michal

On Fri, 26 Apr 2024 15:38:10 +0200, Michal Simek wrote:
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.
[...]
Applied to u-boot/next, thanks!
participants (5)
-
Ilias Apalodimas
-
Michal Simek
-
Michal Simek
-
Simon Glass
-
Tom Rini