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;
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to