From 437da71d0a9c7f397860efd02ddb03de9fd5b874 Mon Sep 17 00:00:00 2001 From: Angel Pons Date: Fri, 3 Sep 2021 16:51:40 +0200 Subject: SMBIOS/SCONFIG: Allow devtree-defined Type 41 entries Introduce the `smbios_dev_info` devicetree keyword to specify the instance ID and RefDes (Reference Designation) of onboard devices. Example syntax: device pci 1c.0 on # PCIe Port #1 device pci 00.0 on smbios_dev_info 6 end end device pci 1c.1 on # PCIe Port #2 device pci 00.0 on smbios_dev_info 42 "PCIe-PCI Time Machine" end end The `SMBIOS_TYPE41_PROVIDED_BY_DEVTREE` Kconfig option enables using this syntax to control the generated Type 41 entries. When this option is enabled, Type 41 entries are only autogenerated for devices with a defined instance ID. This avoids having to keep track of which instance IDs have been used for every device class. Using `smbios_dev_info` when `SMBIOS_TYPE41_PROVIDED_BY_DEVTREE` is not enabled will result in a build-time error, as the syntax is meaningless in this case. This is done with preprocessor guards around the Type 41 members in `struct device` and the code which uses the guarded members. Although the preprocessor usage isn't particularly elegant, adjusting the devicetree syntax and/or grammar depending on a Kconfig option is probably even worse. Change-Id: Iecca9ada6ee1000674cb5dd7afd5c309d8e1a64b Signed-off-by: Angel Pons Reviewed-on: https://review.coreboot.org/c/coreboot/+/57370 Tested-by: build bot (Jenkins) Reviewed-by: Tim Wawrzynczak Reviewed-by: Nico Huber --- src/include/device/device.h | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'src/include') diff --git a/src/include/device/device.h b/src/include/device/device.h index 8610e0a4c6..237d836147 100644 --- a/src/include/device/device.h +++ b/src/include/device/device.h @@ -148,6 +148,17 @@ struct device { u8 smbios_slot_data_width; u8 smbios_slot_length; const char *smbios_slot_designation; + +#if CONFIG(SMBIOS_TYPE41_PROVIDED_BY_DEVTREE) + /* + * These fields are intentionally guarded so that attempts to use + * the corresponding devicetree syntax without selecting the Kconfig + * option result in build-time errors. Smaller size is a side effect. + */ + bool smbios_instance_id_valid; + u8 smbios_instance_id; + const char *smbios_refdes; +#endif #endif #endif DEVTREE_CONST void *chip_info; -- cgit v1.2.3