[PATCH i2c-tools v4 5/8] decode-dimms: Add basic decoding of type specific information for DDR5
Stephen Horvath <[email protected]> Thu, 23 Jul 2026 13:40:14 +0000
| Newsgroups | org.kernel.vger.linux-i2c |
|---|---|
| Message-ID | <[email protected]> |
Decode more manufacturer information, but only the info that is specific to certain types of DDR5 memory modules, and not common to all DDR5 modules. This is completely untested since my modules are SPD revision 1.0 for module information and don't expose this. I also only have UDIMMs. Signed-off-by: Stephen Horvath <[email protected]> --- eeprom/decode-dimms | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/eeprom/decode-dimms b/eeprom/decode-dimms index d4553f5..7f51642 100755 --- a/eeprom/decode-dimms +++ b/eeprom/decode-dimms @@ -2438,6 +2438,77 @@ sub decode_ddr5_sdram($) (($bytes->[231] >> 4) & 15) + 1)); printl("Module Reference Card", ddr3_reference_card($bytes->[232], $bytes->[232])); + +# type-specific settings + if ($spd_info_rev == 0x11 && + ($type == 0x02 || # UDIMM + $type == 0x03 || # SODIMM + $type == 0x05 || # CUDIMM + $type == 0x06)) { # CSODIMM + prints("Unbuffered Memory Module"); + + printl("Clock driver manufacturer", + manufacturer_ddr3($bytes->[240], $bytes->[241])); + } + + if ($spd_info_rev == 0x11 && + ($type == 0x01 || # RDIMM + $type == 0x04)) { # LRDIMM + prints("Registered Memory Module"); + + printl("Clock driver manufacturer", + manufacturer_ddr3($bytes->[240], $bytes->[241])); + printl("Data buffer manufacturer", + manufacturer_ddr3($bytes->[244], $bytes->[245])); + } + + if ($spd_info_rev == 0x11 && + ($type == 0x07)) { # MRDIMM + prints("Multiplexed Rank Memory Module"); + + printl("Clock driver manufacturer", + manufacturer_ddr3($bytes->[240], $bytes->[241])); + printl("Data buffer manufacturer", + manufacturer_ddr3($bytes->[244], $bytes->[245])); + } + + if ($spd_info_rev == 0x10 && + ($type == 0x0A)) { # DDIMM + prints("Differential Memory Module"); + + printl("Memory buffer manufacturer", + manufacturer_ddr3($bytes->[240], $bytes->[241])); + } + + if ($spd_info_rev == 0x01 && + ($raw_type & 0xf0 == 0x90)) { # NVDIMM-N + prints("Non-Volatile Memory Module"); + + printl("Clock driver manufacturer", + manufacturer_ddr3($bytes->[240], $bytes->[241])); + printl("Data buffer manufacturer", + manufacturer_ddr3($bytes->[244], $bytes->[245])); + } + + if ($spd_info_rev == 0x10 && + ($raw_type & 0xf0 == 0xA0)) { # NVDIMM-P + prints("Non-Volatile Memory Module"); + + printl("Clock driver manufacturer", + manufacturer_ddr3($bytes->[240], $bytes->[241])); + printl("Data buffer manufacturer", + manufacturer_ddr3($bytes->[244], $bytes->[245])); + } + + if ($spd_info_rev == 0x10 && + ($type == 0x08)) { # CAMM2 + prints("Compression Attached Memory Module"); + + printl("Clock driver 0 manufacturer", + manufacturer_ddr3($bytes->[240], $bytes->[241])); + printl("Clock driver 1 manufacturer", + manufacturer_ddr3($bytes->[244], $bytes->[245])); + } } # Parameter: EEPROM bytes 0-127 (using 4-5) -- 2.53.0