[6/6] mtd: nand: macronix: Unflag the support of changing timings for MX30LF2G18AC

Message ID 20180203095544.9855-7-miquel.raynal@bootlin.com
State Changes Requested
Delegated to: Boris Brezillon
Headers show
Series
  • Improve timings handling in the NAND framework
Related show

Commit Message

Miquel Raynal Feb. 3, 2018, 9:55 a.m.
From: Miquel Raynal <miquel.raynal@free-electrons.com>

The MX30LF2G18AC chip declares in its parameter page supporting
SET/GET_FEATURES but when it comes to timings, experience shows that it
is not the case.

Unflag this feature for this particular chip in the nand_parameters
structure to avoid unnecessary errors and downturns.

Signed-off-by: Miquel Raynal <miquel.raynal@free-electrons.com>
---
 drivers/mtd/nand/nand_macronix.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

Comments

Boris Brezillon Feb. 14, 2018, 9:14 a.m. | #1
On Sat,  3 Feb 2018 10:55:44 +0100
Miquel Raynal <miquel.raynal@bootlin.com> wrote:

> From: Miquel Raynal <miquel.raynal@free-electrons.com>
> 
> The MX30LF2G18AC chip declares in its parameter page supporting
> SET/GET_FEATURES but when it comes to timings, experience shows that it
> is not the case.
> 
> Unflag this feature for this particular chip in the nand_parameters
> structure to avoid unnecessary errors and downturns.
> 
> Signed-off-by: Miquel Raynal <miquel.raynal@free-electrons.com>
> ---
>  drivers/mtd/nand/nand_macronix.c | 12 ++++++++++++
>  1 file changed, 12 insertions(+)
> 
> diff --git a/drivers/mtd/nand/nand_macronix.c b/drivers/mtd/nand/nand_macronix.c
> index d290ff2a6d2f..c58567834595 100644
> --- a/drivers/mtd/nand/nand_macronix.c
> +++ b/drivers/mtd/nand/nand_macronix.c
> @@ -19,9 +19,21 @@
>  
>  static int macronix_nand_init(struct nand_chip *chip)
>  {
> +	const char model[20] = "MX30LF2G18AC";
> +
>  	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.support_setting_features &&
> +	    !strncmp(model, chip->parameters.model, ARRAY_SIZE(model)))

Why not

	    !strcmp("MX30LF2G18AC", chip->parameters.model)

?

> +		bitmap_clear(chip->parameters.feature_list,
> +			     ONFI_FEATURE_ADDR_TIMING_MODE, 1);
> +
>  	return 0;
>  }
>

Patch

diff --git a/drivers/mtd/nand/nand_macronix.c b/drivers/mtd/nand/nand_macronix.c
index d290ff2a6d2f..c58567834595 100644
--- a/drivers/mtd/nand/nand_macronix.c
+++ b/drivers/mtd/nand/nand_macronix.c
@@ -19,9 +19,21 @@ 
 
 static int macronix_nand_init(struct nand_chip *chip)
 {
+	const char model[20] = "MX30LF2G18AC";
+
 	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.support_setting_features &&
+	    !strncmp(model, chip->parameters.model, ARRAY_SIZE(model)))
+		bitmap_clear(chip->parameters.feature_list,
+			     ONFI_FEATURE_ADDR_TIMING_MODE, 1);
+
 	return 0;
 }