mtd: rawnand: All AC chips have a broken GET_FEATURES(TIMINGS).
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: 34c5c01e0c
("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>
Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
This commit is contained in:
parent
e9893e6fa9
commit
fe3dd97dd6
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue