linux-mtd.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: Miquel Raynal <miquel.raynal@bootlin.com>
To: masonccyang@mxic.com.tw
Cc: vigneshr@ti.com, bbrezillon@kernel.org, juliensu@mxic.com.tw,
	richard@nod.at, linux-kernel@vger.kernel.org,
	frieder.schrempf@kontron.de, marek.vasut@gmail.com,
	linux-mtd@lists.infradead.org, computersforpeace@gmail.com,
	dwmw2@infradead.org, zhengxunli@mxic.com.tw
Subject: Re: [PATCH v2] mtd: rawnand: Add Macronix NAND read retry support
Date: Tue, 21 May 2019 10:47:13 +0200	[thread overview]
Message-ID: <20190521104713.4b3a7769@xps13> (raw)
In-Reply-To: <OFDCB9EA90.C6F8EA4C-ON48258401.000981AF-48258401.000ED713@mxic.com.tw>

Hi masonccyang@mxic.com.tw,

masonccyang@mxic.com.tw wrote on Tue, 21 May 2019 10:42:06 +0800:

> Hi Miquel,
>  
> > > Add support for Macronix NAND read retry.
> > > 
> > > Macronix NANDs support specific read operation for data recovery,
> > > which can be enabled/disabled with a SET/GET_FEATURE.
> > > Driver checks byte 167 of Vendor Blocks in ONFI parameter page table
> > > to see if this high-reliability function is supported.
> > > 
> > > Signed-off-by: Mason Yang <masonccyang@mxic.com.tw>
> > > ---
> > >  drivers/mtd/nand/raw/nand_macronix.c | 57   
> ++++++++++++++++++++++++++++++++++++
> > >  1 file changed, 57 insertions(+)
> > > 
> > > diff --git a/drivers/mtd/nand/raw/nand_macronix.c   
> b/drivers/mtd/nand/raw/
> > nand_macronix.c  
> > > index e287e71..1a4dc92 100644
> > > --- a/drivers/mtd/nand/raw/nand_macronix.c
> > > +++ b/drivers/mtd/nand/raw/nand_macronix.c
> > > @@ -17,6 +17,62 @@
> > > 
> > >  #include "internals.h"
> > > 
> > > +#define MACRONIX_READ_RETRY_BIT BIT(0)
> > > +#define MACRONIX_READ_RETRY_MODE 6  
> > 
> > Can you name this define MACRONIX_NUM_READ_RETRY_MODES?  
> 
> okay, will fix.
> 
> >   
> > > +
> > > +struct nand_onfi_vendor_macronix {
> > > +   u8 reserved[1];  
> > 
> > Do you need this "[1]" ?  
> 
> okay, just u8 reserved;
> 
> >   
> > > +   u8 reliability_func;
> > > +} __packed;
> > > +
> > > +/*
> > > + * Macronix NANDs support using SET/GET_FEATURES to enter/exit read   
> retry mode
> > > + */
> > > +static int macronix_nand_setup_read_retry(struct nand_chip *chip, int   
> mode)
> > > +{
> > > +   u8 feature[ONFI_SUBFEATURE_PARAM_LEN];
> > > +   int ret, feature_addr = ONFI_FEATURE_ADDR_READ_RETRY;
> > > +
> > > +   if (chip->parameters.supports_set_get_features &&
> > > +       test_bit(feature_addr, chip->parameters.set_feature_list) &&
> > > +       test_bit(feature_addr, chip->parameters.get_feature_list)) {
> > > +      feature[0] = mode;
> > > +      ret =  nand_set_features(chip, feature_addr, feature);
> > > +      if (ret)
> > > +         pr_err("Failed to set read retry moded:%d\n", mode);  
> > 
> > Do you have to call nand_get_features() on error?  
> 
> okay
> 
> >   
> > > +
> > > +      ret =  nand_get_features(chip, feature_addr, feature);
> > > +      if (ret || feature[0] != mode)
> > > +         pr_err("Failed to verify read retry moded:%d(%d)\n",
> > > +                mode, feature[0]);  
> > 
> > if ret == 0 but feature[0] != mode, shouldn't you return an error?  
> 
> okay, will fix.
> 
> >   
> > > +   }
> > > +
> > > +   return ret;  
> > 
> > This will produce a Warning at compile time (ret may be used
> > uninitialized). Have you tested it?  
> 
> Tool chain I used is "gcc-arm-linux-gnueabi" and no Warning at compile 
> time.

What's the output of:
gcc-arm-linux-gnueabi -v
?

> 
> Patch it to:
> ----------------------------------------------------------------------------->  
>  static int macronix_nand_setup_read_retry(struct nand_chip *chip, int 
> mode)
>  {
>          u8 feature[ONFI_SUBFEATURE_PARAM_LEN];
>          int ret, feature_addr = ONFI_FEATURE_ADDR_READ_RETRY;
> 
>          if (chip->parameters.supports_set_get_features &&
>              test_bit(feature_addr, chip->parameters.set_feature_list) &&
>              test_bit(feature_addr, chip->parameters.get_feature_list)) {
> 
>                  feature[0] = mode;
>                  ret =  nand_set_features(chip, feature_addr, feature);

                         ^ extra space, please be careful with the
                         typos, and run checkpatch.pl --strict before
                         sending patches.

>                  if (ret) {
>                          pr_err("Failed to set read retry moded:%d\n", 
> mode);
>                          goto err_out;
>                  }
> 
>                  ret =  nand_get_features(chip, feature_addr, feature);
>                  if (ret) {
>                          pr_err("Failed to get read retry moded:%d\n", 
> mode);
>                          goto err_out;
>                  } else if (feature[0] != mode) {
>                          pr_err("Failed to verify read retry 
> moded:%d(%d)\n",
>                                  mode, feature[0]);
>                          return -EIO;

That's not what I meant. You can keep the former condition but if !ret
then ret = -EIO for instance.

>                  }
>          }
> 
>  err_out:
>          return ret;

Again, do not jump to a single return call, directly do the return from
the point where you want to quit the function.

The problem should be that ret may be used uninitialized, the compiler
should tell you that.

Thanks,
Miquèl

______________________________________________________
Linux MTD discussion mailing list
http://lists.infradead.org/mailman/listinfo/linux-mtd/

  reply	other threads:[~2019-05-21  8:47 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-05-17  6:53 [PATCH v2] mtd: rawnand: Add Macronix NAND read retry support Mason Yang
2019-05-20 12:34 ` Miquel Raynal
2019-05-21  2:42   ` masonccyang
2019-05-21  8:47     ` Miquel Raynal [this message]
2019-05-24  7:40       ` masonccyang

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190521104713.4b3a7769@xps13 \
    --to=miquel.raynal@bootlin.com \
    --cc=bbrezillon@kernel.org \
    --cc=computersforpeace@gmail.com \
    --cc=dwmw2@infradead.org \
    --cc=frieder.schrempf@kontron.de \
    --cc=juliensu@mxic.com.tw \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mtd@lists.infradead.org \
    --cc=marek.vasut@gmail.com \
    --cc=masonccyang@mxic.com.tw \
    --cc=richard@nod.at \
    --cc=vigneshr@ti.com \
    --cc=zhengxunli@mxic.com.tw \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).