[coreboot] r3774 - trunk/util/flashrom

svn at coreboot.org svn at coreboot.org
Thu Nov 27 23:48:48 CET 2008


Author: hailfinger
Date: 2008-11-27 23:48:48 +0100 (Thu, 27 Nov 2008)
New Revision: 3774

Modified:
   trunk/util/flashrom/spi.c
Log:
The existing check in probe_spi_res() was right for SPI controllers
which support all commands, but may not exist.
For controllers which support only a subset of commands, it will fail in
unexpected ways. Even if a command is supported by the controller, it
may be unavailable if the controller is locked down.

The new logic checks if RDID could be issued and its return values made
sense (not 0xff 0xff 0xff). In that case, RES probing is not performed.
Otherwise, we try RES.
There is one drawback: If RDID returned unexpected values, we don't
issue a RES probe. However, in that case we should try to match RDID
anyway.

Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006 at gmx.net>
Acked-by: FENG yu ning <fengyuning1984 at gmail.com>


Modified: trunk/util/flashrom/spi.c
===================================================================
--- trunk/util/flashrom/spi.c	2008-11-27 00:47:07 UTC (rev 3773)
+++ trunk/util/flashrom/spi.c	2008-11-27 22:48:48 UTC (rev 3774)
@@ -160,15 +160,13 @@
 	unsigned char readarr[3];
 	uint32_t model_id;
 
-	if (spi_rdid(readarr, 3))
-		/* We couldn't issue RDID, it's pointless to try RES. */
+	/* Check if RDID was successful and did not return 0xff 0xff 0xff.
+	 * In that case, RES is pointless.
+	 */
+	if (!spi_rdid(readarr, 3) && ((readarr[0] != 0xff) ||
+	    (readarr[1] != 0xff) || (readarr[2] != 0xff)))
 		return 0;
 
-	/* Check if RDID returns 0xff 0xff 0xff, then we use RES. */
-	if ((readarr[0] != 0xff) || (readarr[1] != 0xff) ||
-	    (readarr[2] != 0xff))
-		return 0;
-
 	if (spi_res(readarr))
 		return 0;
 





More information about the coreboot mailing list