[flashrom] [commit] r1216 - trunk

repository service svn at flashrom.org
Wed Oct 20 23:13:19 CEST 2010


Author: hailfinger
Date: Wed Oct 20 23:13:19 2010
New Revision: 1216
URL: http://flashrom.org/trac/flashrom/changeset/1216

Log:
Add a reset to probe_jedec before we read the Chip's IDs.

Previous probes might have had too short delays for entering ID mode,
so the chip may still be in the process of entering the ID mode. Due to
that, an additional delay before the reset makes sense.
Add FEATURE_RESET_MASK to deal cleanly with those feature bits.

Maciej Pijanka tested the patch and it fixes probing for him with some
old Atmel chips.

Signed-off-by: Sean Nelson <audiohacked at gmail.com>
Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006 at gmx.net>
Acked-by: Anders Juel Jensen <andersjjensen at gmail.com>
Tested-by: Maciej Pijanka <maciej.pijanka at gmail.com>
Acked-by: Sean Nelson <audiohacked at gmail.com>

Modified:
   trunk/flash.h
   trunk/jedec.c

Modified: trunk/flash.h
==============================================================================
--- trunk/flash.h	Wed Oct 20 00:06:20 2010	(r1215)
+++ trunk/flash.h	Wed Oct 20 23:13:19 2010	(r1216)
@@ -83,6 +83,7 @@
 #define FEATURE_LONG_RESET	(0 << 4)
 #define FEATURE_SHORT_RESET	(1 << 4)
 #define FEATURE_EITHER_RESET	FEATURE_LONG_RESET
+#define FEATURE_RESET_MASK	(FEATURE_LONG_RESET | FEATURE_SHORT_RESET)
 #define FEATURE_ADDR_FULL	(0 << 2)
 #define FEATURE_ADDR_MASK	(3 << 2)
 #define FEATURE_ADDR_2AA	(1 << 2)

Modified: trunk/jedec.c
==============================================================================
--- trunk/jedec.c	Wed Oct 20 00:06:20 2010	(r1215)
+++ trunk/jedec.c	Wed Oct 20 23:13:19 2010	(r1216)
@@ -142,6 +142,26 @@
 		return 0;
 	}
 
+	/* Earlier probes might have been too fast for the chip to enter ID
+	 * mode completely. Allow the chip to finish this before seeing a
+	 * reset command.
+	 */
+	if (probe_timing_enter)
+		programmer_delay(probe_timing_enter);
+	/* Reset chip to a clean slate */
+	if ((flash->feature_bits & FEATURE_RESET_MASK) == FEATURE_LONG_RESET)
+	{
+		chip_writeb(0xAA, bios + (0x5555 & mask));
+		if (probe_timing_exit)
+			programmer_delay(10);
+		chip_writeb(0x55, bios + (0x2AAA & mask));
+		if (probe_timing_exit)
+			programmer_delay(10);
+	}
+	chip_writeb(0xF0, bios + (0x5555 & mask));
+	if (probe_timing_exit)
+		programmer_delay(probe_timing_exit);
+
 	/* Issue JEDEC Product ID Entry command */
 	chip_writeb(0xAA, bios + (0x5555 & mask));
 	if (probe_timing_enter)
@@ -172,7 +192,7 @@
 	}
 
 	/* Issue JEDEC Product ID Exit command */
-	if ((flash->feature_bits & FEATURE_SHORT_RESET) == FEATURE_LONG_RESET)
+	if ((flash->feature_bits & FEATURE_RESET_MASK) == FEATURE_LONG_RESET)
 	{
 		chip_writeb(0xAA, bios + (0x5555 & mask));
 		if (probe_timing_exit)




More information about the flashrom mailing list