Changeset 5012

Show
Ignore:
Timestamp:
11/11/07 21:25:22 (1 year ago)
Author:
khali
Message:

decode-dimms: Fix DDR2 SDRAM module speed decoding.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • lm-sensors/trunk/CHANGES

    r5010 r5012  
    44SVN-HEAD 
    55  Library: Fix fschrc and fschmd support 
     6  Program decode-dimms.pl: Fix DDR2 SDRAM module speed decoding 
    67  Program sensors-detect: Add Texas Instruments TMP401 detection 
    78                          Mention the f75375s driver 
  • lm-sensors/trunk/prog/eeprom/decode-dimms.pl

    r4293 r5012  
    7070#  use more user-friendly labels 
    7171#  fix HTML formatted output on checksum error 
     72# Version 1.5  2007-11-08  Jean Delvare <khali@linux-fr.org> 
     73#  fix module speed (DDR2 SDRAM) 
    7274# 
    7375# 
    7476# EEPROM data decoding for SDRAM DIMM modules.  
    7577# 
    76 # Two assumptions: lm_sensors-2.x installed, 
    77 # and Perl is at /usr/bin/perl 
     78# The eeprom driver must be loaded. For kernels older than 2.6.0, the 
     79# eeprom driver can be found in the lm-sensors package. 
    7880# 
    7981# use the following command line switches 
     
    864866        my $bytes = shift; 
    865867        my ($l, $temp); 
     868        my $ctime; 
    866869 
    867870# SPD revision 
     
    875878 
    876879        $l = "Maximum module speed"; 
    877         $temp = ($bytes->[9] >> 4) + ($bytes->[9] & 0xf) * 0.1
    878         my $ddrclk = 4 * (1000 / $temp); 
     880        $ctime = ddr2_sdram_ctime($bytes->[9])
     881        my $ddrclk = 2 * (1000 / $ctime); 
    879882        my $tbits = ($bytes->[7] * 256) + $bytes->[6]; 
    880         if (($bytes->[11] == 2) || ($bytes->[11] == 1)) { $tbits = $tbits - 8; } 
     883        if ($bytes->[11] & 0x03) { $tbits = $tbits - 8; } 
    881884        my $pcclk = int ($ddrclk * $tbits / 8); 
    882         $pcclk += 100 if ($pcclk % 100) >= 50; # Round properly 
     885        # Round down to comply with Jedec 
    883886        $pcclk = $pcclk - ($pcclk % 100); 
    884887        $ddrclk = int ($ddrclk); 
    885         printl $l, "${ddrclk}MHz (PC${pcclk})"; 
     888        printl $l, "${ddrclk}MHz (PC2-${pcclk})"; 
    886889 
    887890#size computation 
     
    911914        my $trp; 
    912915        my $tras; 
    913         my $ctime; 
    914          
    915         $ctime = ddr2_sdram_ctime($bytes->[9]); 
    916916         
    917917        $trcd =($bytes->[29] >> 2)+(($bytes->[29] & 3)*0.25);