Hi, I've been able to discuss with HPe around the type 236 which is very useful to decode how servers are connected to the Storage Box. They acknowledge we share this patch with the upstream project. We are pushing to get more OEM types being contributed as they are very useful.
This patch was written against 3.3 and was tested in production on Gen10+ servers. Therefore, I have an issue with this patch as I can't put it inside the HPe quirks. The OEM type is read before the vendor. Do you know how I can workaround this ? Cheers, Erwan,
From 5b9c24c1bb78cb8ed0f355c174b9a0a8afb248a4 Mon Sep 17 00:00:00 2001 From: Erwan Velu <e.v...@criteo.com> Date: Thu, 15 Oct 2020 22:37:18 +0200 Subject: [PATCH] oem: Adding HPE ProLiant HDD Backplane (type 236) HPE servers encodes some information about the HDD backplane into type 236. Therefore the handle is set before the vendor is detected. This put the decoding under the unknown vendor which isn't really clean. A typical output looks like: # dmidecode 3.3 Getting SMBIOS data from sysfs. SMBIOS 3.3.0 present. Handle 0x0019, DMI type 236, 21 bytes OEM 0, type 236 HDD Backplane FRU Information FRU I2C Address: 0xAE Box Number: 2 NVRAM ID: 0x109 Sas Expander WWID: 0x0 Total SAS Bays: 4 Signed-off-by: Erwan Velu <e.v...@criteo.com> --- dmioem.c | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/dmioem.c b/dmioem.c index 60b667416563..f2ccd284ce04 100644 --- a/dmioem.c +++ b/dmioem.c @@ -147,6 +147,43 @@ static void dmi_print_hp_net_iface_rec(u8 id, u8 bus, u8 dev, const u8 *mac) } } +static int dmi_decode_unknown(const struct dmi_header *h) +{ + u8 *backplane, *data = h->data; + const char *company = "Unknown"; + switch (h->type) + { + case 236: + /* + * Vendor Specific: HPE ProLiant HDD Backplane + * + * + * Offset | Name | Width | Description + * --------------------------------------- + * 0x00 | I2C Address| BYTE | Backplane FRU I2C Address + * 0x01 | Box Number | WORD | Backplane Box Number + * 0x03 | NVRAM ID | WORD | Backplane NVRAM Id + * 0x05 | WWID | 64B | SAS Expander WWWID + * 0x0D | Total Bays | WORD | Total SAS Bays + */ + pr_handle_name("%s HDD Backplane FRU Information", company); + /* If the record isn't 0x15, that's suspicious + * */ + if (h->length != 0x15) break; + backplane = data + 0x4; + pr_attr("FRU I2C Address", "0x%X", backplane[0x0]); + pr_attr("Box Number", "%d", WORD(backplane + 0x1)); + pr_attr("NVRAM ID", "0x%X", WORD(backplane + 0x3)); + pr_attr("Sas Expander WWID", "0x%X", QWORD(backplane + 0x5)); + pr_attr("Total SAS Bays", "%d", WORD(backplane + 0x0D)); + break; + + default: + return 0; + } + return 1; +} + static int dmi_decode_hp(const struct dmi_header *h) { u8 *data = h->data; @@ -422,6 +459,8 @@ int dmi_decode_oem(const struct dmi_header *h) case VENDOR_IBM: case VENDOR_LENOVO: return dmi_decode_ibm_lenovo(h); + case VENDOR_UNKNOWN: + return dmi_decode_unknown(h); default: return 0; } -- 2.26.2
_______________________________________________ https://lists.nongnu.org/mailman/listinfo/dmidecode-devel