Print only the DDR2 timings which were properly defined.
---
 eeprom/decode-dimms |   62 ++++++++++++++++++++++++++++++++++-----------------
 1 file changed, 42 insertions(+), 20 deletions(-)

--- i2c-tools.orig/eeprom/decode-dimms  2012-10-22 09:50:20.000000000 +0200
+++ i2c-tools/eeprom/decode-dimms       2012-10-22 10:22:53.744716447 +0200
@@ -1194,29 +1194,51 @@ sub decode_ddr2_sdram($)
 
 # more timing information
        prints("Timing Parameters");
-       printl("Address/Command Setup Time Before Clock (tIS)",
-              tns(ddr2_sdram_atime($bytes->[32])));
-       printl("Address/Command Hold Time After Clock (tIH)",
-              tns(ddr2_sdram_atime($bytes->[33])));
-       printl("Data Input Setup Time Before Strobe (tDS)",
-              tns(ddr2_sdram_atime($bytes->[34])));
-       printl("Data Input Hold Time After Strobe (tDH)",
-              tns(ddr2_sdram_atime($bytes->[35])));
+       # According to the JEDEC standard, the four timings below can't be less
+       # than 0.1 ns, however we've seen memory modules code such values so
+       # handle them properly.
+       printl_cond($bytes->[32] && $bytes->[32] != 0xff,
+                   "Address/Command Setup Time Before Clock (tIS)",
+                   tns(ddr2_sdram_atime($bytes->[32])));
+       printl_cond($bytes->[33] && $bytes->[33] != 0xff,
+                   "Address/Command Hold Time After Clock (tIH)",
+                   tns(ddr2_sdram_atime($bytes->[33])));
+       printl_cond($bytes->[34] && $bytes->[34] != 0xff,
+                   "Data Input Setup Time Before Strobe (tDS)",
+                   tns(ddr2_sdram_atime($bytes->[34])));
+       printl_cond($bytes->[35] && $bytes->[35] != 0xff,
+                   "Data Input Hold Time After Strobe (tDH)",
+                   tns(ddr2_sdram_atime($bytes->[35])));
+
        printl("Minimum Row Precharge Delay (tRP)", tns($trp));
-       printl("Minimum Row Active to Row Active Delay (tRRD)",
-              tns($bytes->[28]/4));
+       printl_cond($bytes->[28] & 0xfc,
+                   "Minimum Row Active to Row Active Delay (tRRD)",
+                   tns($bytes->[28]/4));
        printl("Minimum RAS# to CAS# Delay (tRCD)", tns($trcd));
        printl("Minimum RAS# Pulse Width (tRAS)", tns($tras));
-       printl("Write Recovery Time (tWR)", tns($bytes->[36]/4));
-       printl("Minimum Write to Read CMD Delay (tWTR)", tns($bytes->[37]/4));
-       printl("Minimum Read to Pre-charge CMD Delay (tRTP)", 
tns($bytes->[38]/4));
-       printl("Minimum Active to Auto-refresh Delay (tRC)",
-              tns(ddr2_sdram_rtime($bytes->[41], 0, ($bytes->[40] >> 4) & 7)));
-       printl("Minimum Recovery Delay (tRFC)",
-              tns(ddr2_sdram_rtime($bytes->[42], $bytes->[40] & 1,
-                                   ($bytes->[40] >> 1) & 7)));
-       printl("Maximum DQS to DQ Skew (tDQSQ)", tns($bytes->[44]/100));
-       printl("Maximum Read Data Hold Skew (tQHS)", tns($bytes->[45]/100));
+       printl_cond($bytes->[36] & 0xfc,
+                   "Write Recovery Time (tWR)",
+                   tns($bytes->[36]/4));
+       printl_cond($bytes->[37] & 0xfc,
+                   "Minimum Write to Read CMD Delay (tWTR)",
+                   tns($bytes->[37]/4));
+       printl_cond($bytes->[38] & 0xfc,
+                   "Minimum Read to Pre-charge CMD Delay (tRTP)",
+                   tns($bytes->[38]/4));
+
+       printl_cond($bytes->[41] && $bytes->[41] != 0xff,
+                   "Minimum Active to Auto-refresh Delay (tRC)",
+                   tns(ddr2_sdram_rtime($bytes->[41], 0,
+                                        ($bytes->[40] >> 4) & 7)));
+       printl_cond($bytes->[42],
+                   "Minimum Recovery Delay (tRFC)",
+                   tns(ddr2_sdram_rtime($bytes->[42], $bytes->[40] & 1,
+                                        ($bytes->[40] >> 1) & 7)));
+
+       printl_cond($bytes->[44], "Maximum DQS to DQ Skew (tDQSQ)",
+                   tns($bytes->[44]/100));
+       printl_cond($bytes->[45], "Maximum Read Data Hold Skew (tQHS)",
+                   tns($bytes->[45]/100));
        printl_cond($bytes->[46], "PLL Relock Time", $bytes->[46] . " us");
 }
 


-- 
Jean Delvare
--
To unsubscribe from this list: send the line "unsubscribe linux-i2c" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to