Browse Source

DDR3: Print physical characteristics and registered DIMM information

for all module types which support it.


git-svn-id: http://lm-sensors.org/svn/i2c-tools/trunk@6141 7894878c-1315-0410-8ee3-d5d059ff63e0
tags/v4.0
Jean Delvare 12 years ago
parent
commit
62a32795b5
  1. 1
      CHANGES
  2. 45
      eeprom/decode-dimms

1
CHANGES

@ -32,6 +32,7 @@ SVN HEAD
Fix speed and PC3 number of high-speed DDR3 modules Fix speed and PC3 number of high-speed DDR3 modules
Decode DDR3 reference card revision Decode DDR3 reference card revision
Print width of all known DDR3 module types Print width of all known DDR3 module types
Print physical characteristics for all DDR3 module types
i2cdetect: Do a best effort detection if functionality is missing i2cdetect: Do a best effort detection if functionality is missing
Clarify the SMBus commands used for probing by default Clarify the SMBus commands used for probing by default
i2c-dev.h: Minimize differences with kernel flavor i2c-dev.h: Minimize differences with kernel flavor

45
eeprom/decode-dimms

@ -1366,6 +1366,11 @@ sub ddr3_reference_card($$)
return "$ref_card revision $revision"; return "$ref_card revision $revision";
} }
use constant DDR3_UNBUFFERED => 1;
use constant DDR3_REGISTERED => 2;
use constant DDR3_CLOCKED => 3;
use constant DDR3_LOAD_REDUCED => 4;
# Parameter: EEPROM bytes 0-127 (using 3-76) # Parameter: EEPROM bytes 0-127 (using 3-76)
sub decode_ddr3_sdram($) sub decode_ddr3_sdram($)
{ {
@ -1377,19 +1382,19 @@ sub decode_ddr3_sdram($)
my @module_types = ( my @module_types = (
{ type => "Undefined", width => "Unknown" }, { type => "Undefined", width => "Unknown" },
{ type => "RDIMM", width => "133.35 mm" },
{ type => "UDIMM", width => "133.35 mm" },
{ type => "SO-DIMM", width => "67.6 mm" },
{ type => "Micro-DIMM", width => "TBD" },
{ type => "Mini-RDIMM", width => "82.0 mm" },
{ type => "Mini-UDIMM", width => "82.0 mm" },
{ type => "Mini-CDIMM", width => "67.6 mm" },
{ type => "72b-SO-UDIMM", width => "67.6 mm" },
{ type => "72b-SO-RDIMM", width => "67.6 mm" },
{ type => "72b-SO-CDIMM", width => "67.6 mm" },
{ type => "LRDIMM", width => "133.35 mm" },
{ type => "16b-SO-DIMM", width => "67.6 mm" },
{ type => "32b-SO-DIMM", width => "67.6 mm" },
{ type => "RDIMM", width => "133.35 mm", family => DDR3_REGISTERED },
{ type => "UDIMM", width => "133.35 mm", family => DDR3_UNBUFFERED },
{ type => "SO-DIMM", width => "67.6 mm", family => DDR3_UNBUFFERED },
{ type => "Micro-DIMM", width => "TBD", family => DDR3_UNBUFFERED },
{ type => "Mini-RDIMM", width => "82.0 mm", family => DDR3_REGISTERED },
{ type => "Mini-UDIMM", width => "82.0 mm", family => DDR3_UNBUFFERED },
{ type => "Mini-CDIMM", width => "67.6 mm", family => DDR3_CLOCKED },
{ type => "72b-SO-UDIMM", width => "67.6 mm", family => DDR3_UNBUFFERED },
{ type => "72b-SO-RDIMM", width => "67.6 mm", family => DDR3_REGISTERED },
{ type => "72b-SO-CDIMM", width => "67.6 mm", family => DDR3_CLOCKED },
{ type => "LRDIMM", width => "133.35 mm", family => DDR3_LOAD_REDUCED },
{ type => "16b-SO-DIMM", width => "67.6 mm", family => DDR3_UNBUFFERED },
{ type => "32b-SO-DIMM", width => "67.6 mm", family => DDR3_UNBUFFERED },
); );
printl("Module Type", ($bytes->[3] <= $#module_types) ? printl("Module Type", ($bytes->[3] <= $#module_types) ?
@ -1543,19 +1548,25 @@ sub decode_ddr3_sdram($)
printl("SDRAM Device Type", printl("SDRAM Device Type",
($bytes->[33] & 128) ? sprintf($bytes->[33] & 127) : ($bytes->[33] & 128) ? sprintf($bytes->[33] & 127) :
"Standard Monolithic"); "Standard Monolithic");
if ($bytes->[3] >= 1 && $bytes->[3] <= 6) {
# Following bytes are type-specific, so don't continue if type
# isn't known.
return if $bytes->[3] == 0 || $bytes->[3] > $#module_types;
if ($module_types[$bytes->[3]]->{family} == DDR3_UNBUFFERED ||
$module_types[$bytes->[3]]->{family} == DDR3_REGISTERED ||
$module_types[$bytes->[3]]->{family} == DDR3_CLOCKED ||
$module_types[$bytes->[3]]->{family} == DDR3_LOAD_REDUCED) {
prints("Physical Characteristics"); prints("Physical Characteristics");
printl("Module Height", (($bytes->[60] & 31) + 15) . " mm"); printl("Module Height", (($bytes->[60] & 31) + 15) . " mm");
printl("Module Thickness", sprintf("%d mm front, %d mm back", printl("Module Thickness", sprintf("%d mm front, %d mm back",
($bytes->[61] & 15) + 1, ($bytes->[61] & 15) + 1,
(($bytes->[61] >> 4) & 15) +1)); (($bytes->[61] >> 4) & 15) +1));
printl("Module Width", $bytes->[3] <= $#module_types ?
$module_types[$bytes->[3]]->{width} : "TBD");
printl("Module Width", $module_types[$bytes->[3]]->{width});
printl("Module Reference Card", ddr3_reference_card($bytes->[62], $bytes->[60])); printl("Module Reference Card", ddr3_reference_card($bytes->[62], $bytes->[60]));
} }
if ($bytes->[3] == 1 || $bytes->[3] == 5) {
if ($module_types[$bytes->[3]]->{family} == DDR3_REGISTERED) {
prints("Registered DIMM"); prints("Registered DIMM");
my @rows = ("Undefined", 1, 2, 4); my @rows = ("Undefined", 1, 2, 4);

Loading…
Cancel
Save