diff options
author | khali <khali@7894878c-1315-0410-8ee3-d5d059ff63e0> | 2013-04-14 17:28:18 +0000 |
---|---|---|
committer | khali <khali@7894878c-1315-0410-8ee3-d5d059ff63e0> | 2013-04-14 17:28:18 +0000 |
commit | e1587ef71c253f9f94d865cddd73ea295ca402a5 (patch) | |
tree | 2727740140cd31d86edee6dd4d368685030d632e | |
parent | 9b34f3e78994e2714728956f5030e77cb7abd67a (diff) | |
download | i2c-tools-e1587ef71c253f9f94d865cddd73ea295ca402a5.tar.gz |
DDR3: Move decoding of the reference card to a dedicated function.
git-svn-id: http://lm-sensors.org/svn/i2c-tools/trunk@6137 7894878c-1315-0410-8ee3-d5d059ff63e0
-rwxr-xr-x | eeprom/decode-dimms | 46 |
1 files changed, 26 insertions, 20 deletions
diff --git a/eeprom/decode-dimms b/eeprom/decode-dimms index 6fb4a1c..e51f639 100755 --- a/eeprom/decode-dimms +++ b/eeprom/decode-dimms @@ -1340,6 +1340,30 @@ sub ddr3_mtb_ftb($$$$) return $byte1 * $mtb + $byte2 * $ftb / 1000; } +sub ddr3_reference_card($) +{ + my ($rrc) = @_; + my $alphabet = "ABCDEFGHJKLMNPRTUVWY"; + my $ref = $rrc & 0x1f; + my $ref_card; + + return "ZZ" if $ref == 0x1f; + $ref += 0x1f if $rrc & 0x80; + + if ($ref < length($alphabet)) { + # One letter reference card + $ref_card = substr($alphabet, $ref, 1); + } else { + # Two letter reference card + my $ref1 = int($ref / (length($alphabet))); + $ref -= length($alphabet) * $ref1; + $ref_card = substr($alphabet, $ref1, 1) . + substr($alphabet, $ref, 1); + } + + return $ref_card; +} + # Parameter: EEPROM bytes 0-127 (using 3-76) sub decode_ddr3_sdram($) { @@ -1515,27 +1539,9 @@ sub decode_ddr3_sdram($) (($bytes->[61] >> 4) & 15) +1)); printl("Module Width (mm)", ($bytes->[3] <= 2) ? 133.5 : ($bytes->[3] == 3) ? 67.6 : "TBD"); - - my $alphabet = "ABCDEFGHJKLMNPRTUVWY"; - my $ref = $bytes->[62] & 31; - my $ref_card; - if ($ref == 31) { - $ref_card = "ZZ"; - } else { - if ($bytes->[62] & 128) { - $ref += 31; - } - if ($ref < length $alphabet) { - $ref_card = substr $alphabet, $ref, 1; - } else { - my $ref1 = int($ref / (length $alphabet)); - $ref -= (length $alphabet) * $ref1; - $ref_card = (substr $alphabet, $ref1, 1) . - (substr $alphabet, $ref, 1); - } - } - printl("Module Reference Card", $ref_card); + printl("Module Reference Card", ddr3_reference_card($bytes->[62])); } + if ($bytes->[3] == 1 || $bytes->[3] == 5) { prints("Registered DIMM"); |