diff --git a/eeprom/decode-dimms b/eeprom/decode-dimms
index b53be36..ec71236 100755
--- a/eeprom/decode-dimms
+++ b/eeprom/decode-dimms
@@ -1625,7 +1625,8 @@ sub get_dimm_list
if (opendir(local *DIR, $dir)) {
while (defined($file = readdir(DIR))) {
- next if $file =~ m/^\./;
+ next if $use_sysfs && $file !~ /^\d+-\d+$/;
+ next if !$use_sysfs && $file !~ /^eeprom-/;
push @files, $file;
}
close(DIR);
@@ -1639,110 +1640,105 @@ sub get_dimm_list
@dimm_list = get_dimm_list() unless $use_hexdump;
for my $i (0 .. $#dimm_list) {
- $_ = $dimm_list[$i];
- if (($use_sysfs && /^\d+-\d+$/)
- || (!$use_sysfs && /^eeprom-/)
- || $use_hexdump) {
- my @bytes = readspd(0, 128, $dimm_list[$i]);
- my $is_rambus = $bytes[0] < 4; # Simple heuristic
- my ($label, $chk_valid, $chk_spd, $chk_calc);
- if ($is_rambus || $bytes[2] < 9) {
- ($label, $chk_valid, $chk_spd, $chk_calc) =
- checksum(\@bytes);
- } else {
- ($label, $chk_valid, $chk_spd, $chk_calc) =
- check_crc(\@bytes);
- }
-
- next unless $chk_valid || $opt_igncheck;
- $dimm_count++;
-
- print "" if $opt_html;
- printl2("\n\nDecoding EEPROM",
- $use_hexdump ? $dimm_list[$i] : ($use_sysfs ?
- "/sys/bus/i2c/drivers/eeprom/$dimm_list[$i]" :
- "/proc/sys/dev/sensors/$dimm_list[$i]"));
- print "" if $opt_html;
- print "
\n" if $opt_html;
- if (!$use_hexdump) {
- if (($use_sysfs && /^[^-]+-([^-]+)$/)
- || (!$use_sysfs && /^[^-]+-[^-]+-[^-]+-([^-]+)$/)) {
- my $dimm_num = $1 - 49;
- printl("Guessing DIMM is in", "bank $dimm_num");
- }
+ my @bytes = readspd(0, 128, $dimm_list[$i]);
+ my $is_rambus = $bytes[0] < 4; # Simple heuristic
+ my ($label, $chk_valid, $chk_spd, $chk_calc);
+ if ($is_rambus || $bytes[2] < 9) {
+ ($label, $chk_valid, $chk_spd, $chk_calc) =
+ checksum(\@bytes);
+ } else {
+ ($label, $chk_valid, $chk_spd, $chk_calc) =
+ check_crc(\@bytes);
+ }
+
+ next unless $chk_valid || $opt_igncheck;
+ $dimm_count++;
+
+ print "" if $opt_html;
+ printl2("\n\nDecoding EEPROM",
+ $use_hexdump ? $dimm_list[$i] : ($use_sysfs ?
+ "/sys/bus/i2c/drivers/eeprom/$dimm_list[$i]" :
+ "/proc/sys/dev/sensors/$dimm_list[$i]"));
+ print "" if $opt_html;
+ print "\n" if $opt_html;
+ if (!$use_hexdump) {
+ if (($use_sysfs && $dimm_list[$i] =~ /^[^-]+-([^-]+)$/)
+ || (!$use_sysfs && $dimm_list[$i] =~ /^[^-]+-[^-]+-[^-]+-([^-]+)$/)) {
+ my $dimm_num = $1 - 49;
+ printl("Guessing DIMM is in", "bank $dimm_num");
}
+ }
# Decode first 3 bytes (0-2)
- prints("SPD EEPROM Information");
-
- printl($label, ($chk_valid ?
- sprintf("OK (%s)", $chk_calc) :
- sprintf("Bad\n(found %s, calculated %s)",
- $chk_spd, $chk_calc)));
-
- my $temp;
- if ($is_rambus) {
- if ($bytes[0] == 1) { $temp = "0.7"; }
- elsif ($bytes[0] == 2) { $temp = "1.0"; }
- elsif ($bytes[0] == 0) { $temp = "Invalid"; }
- else { $temp = "Reserved"; }
- printl("SPD Revision", $temp);
- } else {
- my ($spd_size, $spd_used) = spd_sizes(\@bytes);
- printl("# of bytes written to SDRAM EEPROM", $spd_used);
- printl("Total number of bytes in EEPROM", $spd_size);
-
- # If there's more data than what we've read, let's
- # read it now. DDR3 will need this data.
- if ($spd_used > @bytes) {
- push (@bytes,
- readspd(@bytes, $spd_used - @bytes,
- $dimm_list[$i]));
- }
+ prints("SPD EEPROM Information");
+
+ printl($label, ($chk_valid ?
+ sprintf("OK (%s)", $chk_calc) :
+ sprintf("Bad\n(found %s, calculated %s)",
+ $chk_spd, $chk_calc)));
+
+ my $temp;
+ if ($is_rambus) {
+ if ($bytes[0] == 1) { $temp = "0.7"; }
+ elsif ($bytes[0] == 2) { $temp = "1.0"; }
+ elsif ($bytes[0] == 0) { $temp = "Invalid"; }
+ else { $temp = "Reserved"; }
+ printl("SPD Revision", $temp);
+ } else {
+ my ($spd_size, $spd_used) = spd_sizes(\@bytes);
+ printl("# of bytes written to SDRAM EEPROM", $spd_used);
+ printl("Total number of bytes in EEPROM", $spd_size);
+
+ # If there's more data than what we've read, let's
+ # read it now. DDR3 will need this data.
+ if ($spd_used > @bytes) {
+ push (@bytes,
+ readspd(@bytes, $spd_used - @bytes,
+ $dimm_list[$i]));
}
+ }
- my $type = sprintf("Unknown (0x%02x)", $bytes[2]);
- if ($is_rambus) {
- if ($bytes[2] == 1) { $type = "Direct Rambus"; }
- elsif ($bytes[2] == 17) { $type = "Rambus"; }
- } else {
- my @type_list = (
- "Reserved", "FPM DRAM", # 0, 1
- "EDO", "Pipelined Nibble", # 2, 3
- "SDR SDRAM", "Multiplexed ROM", # 4, 5
- "DDR SGRAM", "DDR SDRAM", # 6, 7
- "DDR2 SDRAM", "FB-DIMM", # 8, 9
- "FB-DIMM Probe", "DDR3 SDRAM", # 10, 11
- );
- if ($bytes[2] < @type_list) {
- $type = $type_list[$bytes[2]];
- }
+ my $type = sprintf("Unknown (0x%02x)", $bytes[2]);
+ if ($is_rambus) {
+ if ($bytes[2] == 1) { $type = "Direct Rambus"; }
+ elsif ($bytes[2] == 17) { $type = "Rambus"; }
+ } else {
+ my @type_list = (
+ "Reserved", "FPM DRAM", # 0, 1
+ "EDO", "Pipelined Nibble", # 2, 3
+ "SDR SDRAM", "Multiplexed ROM", # 4, 5
+ "DDR SGRAM", "DDR SDRAM", # 6, 7
+ "DDR2 SDRAM", "FB-DIMM", # 8, 9
+ "FB-DIMM Probe", "DDR3 SDRAM", # 10, 11
+ );
+ if ($bytes[2] < @type_list) {
+ $type = $type_list[$bytes[2]];
}
- printl("Fundamental Memory type", $type);
+ }
+ printl("Fundamental Memory type", $type);
# Decode next 61 bytes (3-63, depend on memory type)
- $decode_callback{$type}->(\@bytes)
- if exists $decode_callback{$type};
+ $decode_callback{$type}->(\@bytes)
+ if exists $decode_callback{$type};
- if ($type eq "DDR3 SDRAM") {
- # Decode DDR3-specific manufacturing data in bytes
- # 117-149
- decode_ddr3_mfg_data(\@bytes)
- } else {
- # Decode next 35 bytes (64-98, common to most
- # memory types)
- decode_manufacturing_information(\@bytes);
- }
+ if ($type eq "DDR3 SDRAM") {
+ # Decode DDR3-specific manufacturing data in bytes
+ # 117-149
+ decode_ddr3_mfg_data(\@bytes)
+ } else {
+ # Decode next 35 bytes (64-98, common to most
+ # memory types)
+ decode_manufacturing_information(\@bytes);
+ }
# Next 27 bytes (99-125) are manufacturer specific, can't decode
# Last 2 bytes (126-127) are reserved, Intel used them as an extension
- if ($type eq "SDR SDRAM") {
- decode_intel_spec_freq(\@bytes);
- }
-
- print "
\n" if $opt_html;
+ if ($type eq "SDR SDRAM") {
+ decode_intel_spec_freq(\@bytes);
}
+
+ print "
\n" if $opt_html;
}
printl2("\n\nNumber of SDRAM DIMMs detected and decoded", $dimm_count);