dmidecode/0034-dmioem-Decode-HPE-OEM-Type-202.patch
Lichen Liu 03b0d1462a
update to upstream fa268715
Resolves: RHEL-99252

Signed-off-by: Lichen Liu <lichliu@redhat.com>
2025-10-14 13:48:30 +08:00

120 lines
4.9 KiB
Diff

From f395f601f16f8b3fddf1b533c07a608c46c1db74 Mon Sep 17 00:00:00 2001
From: Jerry Hoemann <jerry.hoemann@hpe.com>
Date: Thu, 12 Jun 2025 11:15:59 +0200
Subject: [PATCH 34/45] dmioem: Decode HPE OEM Type 202
Record type 202: DIMM Location Record
Signed-off-by: Jerry Hoemann <jerry.hoemann@hpe.com>
Signed-off-by: Jean Delvare <jdelvare@suse.de>
---
dmioem.c | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 92 insertions(+)
diff --git a/dmioem.c b/dmioem.c
index d4d83e2..0a01919 100644
--- a/dmioem.c
+++ b/dmioem.c
@@ -1147,6 +1147,98 @@ static int dmi_decode_hp(const struct dmi_header *h)
}
break;
+ case 202:
+ /*
+ * Vendor Specific: HPE DIMM Location Record
+ *
+ * This record allows software to correlate a Type 17 Memory Device Record
+ * with a specific DIMM (DIMM, Board, and/or Processor number if appropriate).
+ *
+ * There will be one Record Type 202 for each DIMM socket possible in the system.
+ * A system will include a record for each DIMM socket even if that DIMM socket
+ * is on a memory board which is not currently installed.
+ *
+ * Offset | Name | Width | Description
+ * -------------------------------------
+ * 0x00 | Type | BYTE | 0xCA, DIMM Location Record
+ * 0x01 | Length | BYTE | Length of structure
+ * 0x02 | Handle | WORD | Unique handle
+ * 0x04 | Assoc Record | WORD | Handle of Associated Type 17 Memory Record
+ * 0x06 | Board Number | BYTE | 1-based Memory Board number. 0FFh: DIMM on system board
+ * 0x07 | DIMM Number | BYTE | 1-based DIMM number
+ * 0x08 | Proc Number | BYTE | 1-based procssor number. 0FFh don't display
+ * 0x09 | Log DIMM Num | BYTE | 1-based Logical DIMM number mapping to ACPI numbering
+ * 0x0A | UEFI Dev Path| STRING| String number for UEFI Device Path
+ * 0x0B | UEFI Dev Name| STRING| String number for UEFI Device Structured Name
+ * 0x0C | Device Name | STRING| String number for Device Name
+ * 0x0D | Mem Cntrl Num| BYTE | 1-based Memory controller number
+ * 0x0E | Mem Chan Num | BYTE | 1-based memory channel number (matches silk screen)
+ * 0x0F | IE DIMM Num | BYTE | 0-based DIMM number repored by IE. FF -> not supported
+ * | Reserved G12 or later
+ * 0x10 | IE PLDM ID | BYTE | IE PLDM Sensor ID. FF -> not supported
+ * | Reserved G12 or later
+ * 0x11 | Vendor ID | WORD | Module manufacturers ID code as read by SPD
+ * 0x13 | Device ID | WORD | (NVDIMM only) Module product ID code from SPD
+ * 0x15 | Sub Cntrl Ven| WORD | (NVDIMM only) Controller manufacturer ID from SPD
+ * 0x17 | Sub Cntrl Dev| WORD | (NVDIMM only) Controller product ID from SPD
+ * 0x19 | Interleave | BYTE | 1-based unique interleave set within Procssor Number
+ * 0x1A | Part Number | STRING| String number for HPE part number from OEM SPD
+ * 0x1B | DIMM Index | BYTE | 0-based DIMM Index Per Channel
+ */
+
+ if (gen < G9) return 0;
+ pr_handle_name("%s DIMM Location Record", company);
+
+ if (h->length < 0x09) break;
+ if (!(opt.flags & FLAG_QUIET))
+ pr_attr("Associated Memory Record", "0x%04X", WORD(data + 0x04));
+ if (data[0x06] == 0xFF)
+ pr_attr("Board Number", "%s", "System Board");
+ else
+ pr_attr("Board Number", "%d", data[0x06]);
+ pr_attr("DIMM Number", "%d", data[0x07]);
+ if (data[0x08] != 0xFF)
+ pr_attr("Processor Number", "%d", data[0x08]);
+
+ if (h->length < 0x0A) break;
+ pr_attr("Logical DIMM Number", "%d", data[0x09]);
+
+ if (h->length < 0x0D) break;
+ if (data[0x0A])
+ pr_attr("UEFI Device Path", "%s", dmi_string(h, data[0x0A]));
+ if (data[0x0B])
+ pr_attr("UEFI Device Name", "%s", dmi_string(h, data[0x0B]));
+ if (data[0x0C])
+ pr_attr("Device Name", "%s", dmi_string(h, data[0x0C]));
+
+ if (h->length < 0x19) break;
+ if (data[0x0D])
+ pr_attr("Memory Controller Number", "%d", data[0x0D]);
+ if (data[0x0E])
+ pr_attr("Memory Channel Number", "%d", data[0x0E]);
+ if (gen < G12 && data[0x0F] != 0xFF)
+ pr_attr("IE DIMM Number", "%d", data[0x0F]);
+ if (gen < G12 && data[0x10] != 0xFF)
+ pr_attr("IE PLDM ID", "%d", data[0x10]);
+ if (data[0x11] || data[0x12])
+ pr_attr("Vendor ID", "0x%04X", WORD(data + 0x11));
+ if (data[0x13] || data[0x14])
+ pr_attr("Device ID", "0x%04X", WORD(data + 0x13));
+ if (data[0x15] || data[0x16])
+ dmi_memory_manufacturer_id("Controller Manufacturer ID", WORD(data + 0x15));
+ if (data[0x17] || data[0x18])
+ dmi_memory_product_id("Controller Product ID", WORD(data + 0x17));
+
+ if (h->length < 0x1A) break;
+ if (data[0x19])
+ pr_attr("Best Interleave", "%d", data[0x19]);
+ if (h->length < 0x1B) break;
+ pr_attr("Part Number", "%s", dmi_string(h, data[0x1A]));
+
+ if (h->length < 0x1C) break;
+ pr_attr("DIMM Index", "%d", data[0x1B]);
+ break;
+
case 203:
/*
* Vendor Specific: HP Device Correlation Record
--
2.47.0