Changeset 5548
- Timestamp:
- 12/10/08 16:34:55 (4 years ago)
- Files:
-
- 1 modified
-
i2c-tools/trunk/eeprom/decode-dimms (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
i2c-tools/trunk/eeprom/decode-dimms
r5547 r5548 1269 1269 } 1270 1270 1271 sub readspd($$) # reads bytes from SPD-EEPROM 1272 { 1273 my ($size, $dimm_i) = @_; 1271 # Read bytes from SPD-EEPROM 1272 # Note: offset must be a multiple of 16! 1273 sub readspd($$$) 1274 { 1275 my ($offset, $size, $dimm_i) = @_; 1274 1276 my @bytes; 1275 1277 if ($use_hexdump) { 1276 1278 @bytes = read_hexdump($dimm_i); 1277 return @bytes[ 0..($size-1)];1279 return @bytes[$offset..($offset + $size - 1)]; 1278 1280 } elsif ($use_sysfs) { 1279 1281 # Kernel 2.6 with sysfs … … 1281 1283 or die "Cannot open /sys/bus/i2c/drivers/eeprom/$dimm_i/eeprom"; 1282 1284 binmode HANDLE; 1283 sysseek(HANDLE, 0, SEEK_SET);1285 sysseek(HANDLE, $offset, SEEK_SET); 1284 1286 sysread(HANDLE, my $eeprom, $size); 1285 1287 close HANDLE; … … 1288 1290 # Kernel 2.4 with procfs 1289 1291 for my $i (0 .. ($size-1)/16) { 1290 my $hexoff = sprintf('%02x', $ i * 16);1292 my $hexoff = sprintf('%02x', $offset + $i * 16); 1291 1293 push @bytes, split(" ", `cat /proc/sys/dev/sensors/$dimm_i/$hexoff`); 1292 1294 } … … 1425 1427 || (!$use_sysfs && /^eeprom-/) 1426 1428 || $use_hexdump) { 1427 my @bytes = readspd( 128, $dimm_list[$i]);1429 my @bytes = readspd(0, 128, $dimm_list[$i]); 1428 1430 my $is_rambus = $bytes[0] < 4; # Simple heuristic 1429 1431 my ($l, $chk_valid, $chk_spd, $chk_calc); … … 1473 1475 printl "# of bytes written to SDRAM EEPROM", $spd_used; 1474 1476 printl "Total number of bytes in EEPROM", $spd_size; 1477 1478 # If there's more data than what we've read, let's 1479 # read it now. DDR3 will need this data. 1480 if ($spd_used > @bytes) { 1481 push (@bytes, 1482 readspd(@bytes, $spd_used - @bytes, 1483 $dimm_list[$i])); 1484 } 1475 1485 } 1476 1486
