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>