[PATCH v2 0/8] SMBIOS improvements
Raymond Mao
raymond.mao at linaro.org
Tue Oct 22 22:05:21 CEST 2024
Motivations for changes:
Current SMBIOS library and command-line tool is not fully matching with
the requirements:
1. Missing support for other mandatory types (#7, #9, #16, #17, #19).
2. Only a few platforms support SMBIOS node from the device tree.
3. Values of some fields are hardcoded in the library other than fetching
from the device hardware.
4. Embedded data with dynamic length is not supported (E.g. Contained
Object Handles in Type #2 and Contained Elements in Type #3)
Changes:
1. Refactor the SMBIOS library and command-line tool to better align with
the SMBIOS spec.
2. Create an arch-specific driver for all aarch64-based platforms to fetch
SMBIOS private data from the device hardware (processor and cache).
3. Create a sysinfo driver to poppulate platform SMBIOS private data.
4. Add generic SMBIOS DTS file for arm64 platforms for those common strings
and values which cannot be retrieved from the system registers.
Vendors can create their own SMBIOS node using this as an example.
For those boards without SMBIOS nodes, this DTS file can be included to
have a generic SMBIOS information of the system.
5. Add support for Type #7 (Cache Information) and link its handles to
Type #4.
Once this patch is acceptted, subsequent patch sets will add other missing
types (#9, #16, #17, #19).
Tests:
To test this with QEMU arm64, please follow the guide on dt_qemu.rst to
get a merged DT to run with.
```
qemu-system-arm -machine virt -machine dumpdtb=qemu.dtb
cat <(dtc -I dtb qemu.dtb) <(dtc -I dtb ./dts/dt.dtb | grep -v /dts-v1/) \
| dtc - -o merged.dtb
qemu-system-arm -machine virt -nographic -bios u-boot.bin -dtb merged.dtb
```
Known issues:
It hits the image size limitation on R-CAR board(rcar3_salvator-x).
```
u-boot.img exceeds file size limit:
limit: 0x100000 bytes
actual: 0x10049d bytes
excess: 0x49d bytes
```
This board needs a clean-up to reserve spaces for the changes as SMBIOS
is a fundamental feature.
Below is the breakdown of the size-growth of the related functions:
function old new delta
static.smbios_write_type4 252 1052 +800
static.smbios_write_type7 - 764 +764
static.smbios_write_type3 188 488 +300
smbios_get_val_si - 128 +128
static.smbios_write_type2 316 376 +60
sysinfo_get_data - 56 +56
static.smbios_write_type1 380 396 +16
smbios_write_funcs 112 128 +16
ofnode_read_u32 - 12 +12
sysinfo_rcar_ops 40 48 +8
install_smbios_table 468 472 +4
Raymond Mao (8):
smbios: Refactor the smbios headfile
sysinfo: Add sysinfo API for accessing data area
sysinfo: Add sysinfo driver and data structure for smbios
smbios: Refactor smbios library
armv8: Add arch-specific sysinfo platform driver
armv8: Add generic smbios information into the device tree
cmd: update smbios cmd
configs: Enable sysinfo for QEMU Arm64
arch/arm/cpu/armv8/Makefile | 2 +
arch/arm/cpu/armv8/sysinfo.c | 292 +++++++++++++++++++
arch/arm/dts/qemu-arm64.dts | 4 +
arch/arm/dts/smbios_generic.dtsi | 82 ++++++
cmd/smbios.c | 346 ++++++++++++++++++++---
configs/qemu_arm64_defconfig | 2 +
drivers/misc/Kconfig | 2 +-
drivers/sysinfo/smbios.c | 228 +++++++++++++++
drivers/sysinfo/sysinfo-uclass.c | 20 ++
include/smbios.h | 158 ++++++-----
include/smbios_def.h | 191 +++++++++++++
include/smbios_plat.h | 79 ++++++
include/sysinfo.h | 125 ++++++++-
lib/smbios.c | 462 ++++++++++++++++++++++++++-----
test/py/tests/test_smbios.py | 2 +-
15 files changed, 1822 insertions(+), 173 deletions(-)
create mode 100644 arch/arm/cpu/armv8/sysinfo.c
create mode 100644 arch/arm/dts/smbios_generic.dtsi
create mode 100644 include/smbios_def.h
create mode 100644 include/smbios_plat.h
--
2.25.1
More information about the U-Boot
mailing list