[PATCH][v2] mtd: rawnand: fsl_ifc: Fix nand waitfunc return value
Jagdish Gediya
jagdish.gediya at nxp.com
Tue Mar 20 03:16:04 PDT 2018
Hi Boris,
> -----Original Message-----
> From: Boris Brezillon [mailto:boris.brezillon at bootlin.com]
> Sent: Tuesday, March 20, 2018 1:51 PM
> To: Jagdish Gediya <jagdish.gediya at nxp.com>
> Cc: linux-mtd at lists.infradead.org; boris.brezillon at free-electrons.com;
> computersforpeace at gmail.com; oss at buserror.net; Leo Li
> <leoyang.li at nxp.com>; stable at vger.kernel.org
> Subject: Re: [PATCH][v2] mtd: rawnand: fsl_ifc: Fix nand waitfunc return value
>
> On Tue, 20 Mar 2018 22:13:38 +0530
> Jagdish Gediya <jagdish.gediya at nxp.com> wrote:
>
> > As per the IFC hardware manual, Most significant 2 bytes in nand_fsr
> > register are the outcome of NAND READ STATUS command.
> >
> > So status value need to be shifted and aligned as per the nand
> > framework requirement.
> >
> > Fixes: 82771882d960 ("NAND Machine support for Integrated Flash
> > Controller")
> > Cc: stable at vger.kernel.org # v3.18+
> > Signed-off-by: Jagdish Gediya <jagdish.gediya at nxp.com>
> > Reviewed-by: Prabhakar Kushwaha <prabhakar.kushwaha at nxp.com>
> > ---
> > Changes for v2: Incorporated comments from Boris Brezillon
> > - Added fixes tag
> >
> > drivers/mtd/nand/fsl_ifc_nand.c | 5 +++--
> > 1 file changed, 3 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/mtd/nand/fsl_ifc_nand.c
> > b/drivers/mtd/nand/fsl_ifc_nand.c index 9390cbd..0aa03ba 100644
> > --- a/drivers/mtd/nand/fsl_ifc_nand.c
> > +++ b/drivers/mtd/nand/fsl_ifc_nand.c
> > @@ -643,12 +643,13 @@ static int fsl_ifc_wait(struct mtd_info *mtd, struct
> nand_chip *chip)
> > fsl_ifc_run_command(mtd);
> >
> > nand_fsr = ifc_in32(&ifc->ifc_nand.nand_fsr);
> > -
> > + nand_fsr >>= 16;
> > + nand_fsr = (nand_fsr >> 8) | (nand_fsr << 8);
>
> Why are you swapping the upper and lower bytes? If the NAND status is stored
> in the upper byte of the fsr reg (bits 24 to 31), then shift the value by 24
> directly. Note that (nand_fsr << 8) is useless here since you're masking
> nand_fsr with 0xff before returning it.
>
nand_fsr register is,
31 0
---------------------------------------------
| RS0 | RS1 | reserved | reserved |
---------------------------------------------
I intended to make it,
31 0
-----------------------------
| 00 | 00 | RS1 | RS0 |
-----------------------------
RS0 gets the nand read status. I am not dropping RS1 value for possible future use.
> > /*
> > * The chip always seems to report that it is
> > * write-protected, even when it is not.
> > */
> > - return nand_fsr | NAND_STATUS_WP;
> > + return (nand_fsr & 0xff) | NAND_STATUS_WP;
It should be 0xffff instead of 0xff.
> > }
> >
> > /*
>
>
>
Thanks,
Jagdish
More information about the linux-mtd
mailing list