On Wed, 20 Jun 2018 17:05:43 +1200
Chris Packham <chris.pack...@alliedtelesis.co.nz> wrote:

> Some Micron NAND chips (MT29F1G08ABAFAWP-ITE:F) report 00 00 for the
> revision number field of the ONFI parameter page. Rather than rejecting
> these outright assume ONFI version 1.0 if the revision number is 00 00.
> 
> Reviewed-by: Boris Brezillon <boris.brezil...@bootlin.com>
> Signed-off-by: Chris Packham <chris.pack...@alliedtelesis.co.nz>
> ---
> This is now qualified on vendor == MICRON. I haven't qualified this
> based on specific chips the ABAFA (id=d1) and ABBFA (id=a1) variants are
> documented to have this behaviour.
> 
> Changes in v2:
> - use fixup_onfi_param_page
> Changes in v3:
> - add code comment next to workaround
> 
>  drivers/mtd/nand/raw/nand_micron.c | 13 +++++++++++++
>  1 file changed, 13 insertions(+)
> 
> diff --git a/drivers/mtd/nand/raw/nand_micron.c 
> b/drivers/mtd/nand/raw/nand_micron.c
> index 5ec4c90a637d..5cec79372181 100644
> --- a/drivers/mtd/nand/raw/nand_micron.c
> +++ b/drivers/mtd/nand/raw/nand_micron.c
> @@ -289,6 +289,19 @@ static int micron_nand_init(struct nand_chip *chip)
>       return 0;
>  }
>  
> +static void micron_fixup_onfi_param_page(struct nand_chip *chip,
> +                                      struct nand_onfi_params *p)
> +{
> +     /*
> +      * MT29F1G08ABAFAWP-ITE:F and possibly others report 00 00 for the
> +      * revision number field of the ONFI parameter page. Assume ONFI
> +      * version 1.0 if the revision number is 00 00.
> +      */
> +     if (le16_to_cpu(p->revision) == 0)
> +             p->revision = cpu_to_le16(1 << 1);

Would be better to have macros defining all version numbers in rawnand.h

#define ONFI_VERSION_1_0                BIT(1)
#define ONFI_VERSION_2_0                BIT(2)
#define ONFI_VERSION_2_1                BIT(3)
#define ONFI_VERSION_2_2                BIT(4)
#define ONFI_VERSION_2_3                BIT(5)
#define ONFI_VERSION_3_0                BIT(6)
#define ONFI_VERSION_3_1                BIT(7)
#define ONFI_VERSION_3_2                BIT(8)
#define ONFI_VERSION_4_0                BIT(9)

> +}
> +
>  const struct nand_manufacturer_ops micron_nand_manuf_ops = {
>       .init = micron_nand_init,
> +     .fixup_onfi_param_page = micron_fixup_onfi_param_page,
>  };

Reply via email to