Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 14 Dec 2013 00:55:34 +0000 (UTC)
From:      Ian Lepore <ian@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r259372 - stable/10/sys/dev/nand
Message-ID:  <201312140055.rBE0tYe8009841@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: ian
Date: Sat Dec 14 00:55:34 2013
New Revision: 259372
URL: http://svnweb.freebsd.org/changeset/base/259372

Log:
  MFC r258740:
  
    Look up a nand chip by id in the static table before trying to obtain
    ONFI parameters.  This allows a static table entry to provide valid data
    for chips known to provide invalid ONFI data.

Modified:
  stable/10/sys/dev/nand/nandbus.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/dev/nand/nandbus.c
==============================================================================
--- stable/10/sys/dev/nand/nandbus.c	Sat Dec 14 00:54:05 2013	(r259371)
+++ stable/10/sys/dev/nand/nandbus.c	Sat Dec 14 00:55:34 2013	(r259372)
@@ -195,8 +195,27 @@ nandbus_attach(device_t dev)
 		if (chip_id.man_id == 0xff)
 			continue;
 
-		/* Check if chip is ONFI compliant */
-		if (nand_probe_onfi(dev, &onfi) != 0) {
+		/*
+		 * First try to get info from the table.  If that fails, see if
+		 * the chip can provide ONFI info.  We check the table first to
+		 * allow table entries to override info from chips that are
+		 * known to provide bad ONFI data.
+		 */
+		onfi = 0;
+		chip_params = nand_get_params(&chip_id);
+		if (chip_params == NULL) {
+			nand_probe_onfi(dev, &onfi);
+		}
+
+		/*
+		 * At this point it appears there is a chip at this chipselect,
+		 * so if we can't work with it, whine about it.
+		 */
+		if (chip_params == NULL && onfi == 0) {
+			if (bootverbose || (nand_debug_flag & NDBG_BUS))
+				printf("Chip params not found, chipsel: %d "
+				    "(manuf: 0x%0x, chipid: 0x%0x, onfi: %d)\n",
+				    cs, chip_id.man_id, chip_id.dev_id, onfi);
 			continue;
 		}
 
@@ -218,15 +237,6 @@ nandbus_attach(device_t dev)
 			continue;
 		}
 
-		chip_params = nand_get_params(&chip_id);
-		if (chip_params == NULL) {
-			nand_debug(NDBG_BUS,"Chip description not found! "
-			    "(manuf: 0x%0x, chipid: 0x%0x)\n",
-			    chip_id.man_id, chip_id.dev_id);
-			free(ivar, M_NAND);
-			continue;
-		}
-
 		ivar->cs = cs;
 		ivar->cols = 1;
 		ivar->rows = 2;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201312140055.rBE0tYe8009841>