Message ID | 20180620094630.10212-1-boris.brezillon@bootlin.com |
---|---|
State | Accepted |
Delegated to: | Boris Brezillon |
Headers | show |
Series | [v2] mtd: rawnand: All AC chips have a broken GET_FEATURES(TIMINGS). | expand |
Hi Boris, On Wed, 20 Jun 2018 11:46:30 +0200, Boris Brezillon <boris.brezillon@bootlin.com> wrote: > From: Mason Yang <masonccyang@mxic.com.tw> > > Make sure we flag all broken chips as not supporting this feature. > Also move this logic to a new function to keep things readable. > > Fixes: 34c5c01e0c8c ("mtd: rawnand: macronix: nack the support of changing timings for one chip") > Cc: <stable@vger.kernel.org> > Signed-off-by: Mason Yang <masonccyang@mxic.com.tw> > Signed-off-by: Boris Brezillon <boris.brezillon@bootlin.com> > --- > Changes in v2: > - Add Fixes and Cc-stable tags Thank you ;) Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
On Wed, 20 Jun 2018 12:11:22 +0200 Miquel Raynal <miquel.raynal@bootlin.com> wrote: > Hi Boris, > > On Wed, 20 Jun 2018 11:46:30 +0200, Boris Brezillon > <boris.brezillon@bootlin.com> wrote: > > > From: Mason Yang <masonccyang@mxic.com.tw> > > > > Make sure we flag all broken chips as not supporting this feature. > > Also move this logic to a new function to keep things readable. > > > > Fixes: 34c5c01e0c8c ("mtd: rawnand: macronix: nack the support of changing timings for one chip") > > Cc: <stable@vger.kernel.org> > > Signed-off-by: Mason Yang <masonccyang@mxic.com.tw> > > Signed-off-by: Boris Brezillon <boris.brezillon@bootlin.com> > > --- > > Changes in v2: > > - Add Fixes and Cc-stable tags > > Thank you ;) > > Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com> Applied. Thanks, Boris > > ______________________________________________________ > Linux MTD discussion mailing list > http://lists.infradead.org/mailman/listinfo/linux-mtd/
diff --git a/drivers/mtd/nand/raw/nand_macronix.c b/drivers/mtd/nand/raw/nand_macronix.c index 7ed1f87e742a..49c546c97c6f 100644 --- a/drivers/mtd/nand/raw/nand_macronix.c +++ b/drivers/mtd/nand/raw/nand_macronix.c @@ -17,23 +17,47 @@ #include <linux/mtd/rawnand.h> +/* + * Macronix AC series does not support using SET/GET_FEATURES to change + * the timings unlike what is declared in the parameter page. Unflag + * this feature to avoid unnecessary downturns. + */ +static void macronix_nand_fix_broken_get_timings(struct nand_chip *chip) +{ + unsigned int i; + static const char * const broken_get_timings[] = { + "MX30LF1G18AC", + "MX30LF1G28AC", + "MX30LF2G18AC", + "MX30LF2G28AC", + "MX30LF4G18AC", + "MX30LF4G28AC", + "MX60LF8G18AC", + }; + + if (!chip->parameters.supports_set_get_features) + return; + + for (i = 0; i < ARRAY_SIZE(broken_get_timings); i++) { + if (!strcmp(broken_get_timings[i], chip->parameters.model)) + break; + } + + if (i == ARRAY_SIZE(broken_get_timings)) + return; + + bitmap_clear(chip->parameters.get_feature_list, + ONFI_FEATURE_ADDR_TIMING_MODE, 1); + bitmap_clear(chip->parameters.set_feature_list, + ONFI_FEATURE_ADDR_TIMING_MODE, 1); +} + static int macronix_nand_init(struct nand_chip *chip) { if (nand_is_slc(chip)) chip->bbt_options |= NAND_BBT_SCAN2NDPAGE; - /* - * MX30LF2G18AC chip does not support using SET/GET_FEATURES to change - * the timings unlike what is declared in the parameter page. Unflag - * this feature to avoid unnecessary downturns. - */ - if (chip->parameters.supports_set_get_features && - !strcmp("MX30LF2G18AC", chip->parameters.model)) { - bitmap_clear(chip->parameters.get_feature_list, - ONFI_FEATURE_ADDR_TIMING_MODE, 1); - bitmap_clear(chip->parameters.set_feature_list, - ONFI_FEATURE_ADDR_TIMING_MODE, 1); - } + macronix_nand_fix_broken_get_timings(chip); return 0; }