Patrick Rudolph has uploaded this change for review. ( https://review.coreboot.org/c/coreboot/+/78292?usp=email )
Change subject: lib/smbios: Improve Type9 ......................................................................
lib/smbios: Improve Type9
Scan for PCI capabilities and update the characteristics 2 field in SMBIOS type 9 accordingly.
Test: Lenovo X220 still boots fine, dmidecode -t 9 shows no difference though.
Change-Id: If96e0381b10c25cf73b3797a0f02a40dc933993e Signed-off-by: Patrick Rudolph patrick.rudolph@9elements.com --- M src/lib/smbios.c 1 file changed, 18 insertions(+), 1 deletion(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/92/78292/1
diff --git a/src/lib/smbios.c b/src/lib/smbios.c index deee193b..9a1547c 100644 --- a/src/lib/smbios.c +++ b/src/lib/smbios.c @@ -1127,6 +1127,9 @@ enum slot_data_bus_bandwidth bandwidth; enum misc_slot_type type; enum misc_slot_length length; + uint8_t characteristics_2 = 0; + unsigned int cap; + uint16_t sltcap, pmecap;
if (dev->path.type != DEVICE_PATH_PCI) return 0; @@ -1157,6 +1160,20 @@ else length = SlotLengthUnknown;
+ cap = pci_find_capability(dev, PCI_CAP_ID_PM); + if (cap > 0) { + pmecap = pci_read_config16(dev, cap + PCI_PM_PMC); + if (pmecap & PCI_PM_CAP_PME) + characteristics_2 |= SMBIOS_SLOT_PME; + } + + cap = pci_find_capability(dev, PCI_CAP_ID_PCIE); + if (cap > 0) { + sltcap = pci_read_config16(dev, cap + PCI_EXP_SLTCAP); + if (sltcap & PCI_EXP_SLTCAP_HPC) + characteristics_2 |= SMBIOS_SLOT_HOTPLUG; + } + return smbios_write_type9(current, handle, dev->smbios_slot_designation, type, @@ -1165,7 +1182,7 @@ length, 0, 1, - 0, + characteristics_2, dev->bus->secondary, dev->path.pci.devfn); }