Message ID | 1392254531-1796-1-git-send-email-computersforpeace@gmail.com |
---|---|
State | Accepted |
Commit | 28fa65e643ed7cf753e89db20745e264c41f3682 |
Headers | show |
On Wed, Feb 12, 2014 at 05:22:11PM -0800, Brian Norris wrote: > A flash may support N read retry voltage threshold modes, numbered 1 > through N-1 (where mode 0 represents the initial state). However, > nand_do_read_ops() tries to use mode 0 through N. > > This off-by-one error shows up, for instance, when using nanddump, and > we have cycled through available modes: > > nand: setting READ RETRY mode 0 > nand: setting READ RETRY mode 1 > nand: setting READ RETRY mode 2 > nand: setting READ RETRY mode 3 > nand: setting READ RETRY mode 4 > nand: setting READ RETRY mode 5 > nand: setting READ RETRY mode 6 > nand: setting READ RETRY mode 7 > nand: setting READ RETRY mode 8 > libmtd: error!: cannot read 8192 bytes from mtd0 (eraseblock 20, offset 0) > error 22 (Invalid argument) > nanddump: error!: mtd_read > > Tested on Micron MT29F64G08CBCBBH1, with 8 retry modes. > > Signed-off-by: Brian Norris <computersforpeace@gmail.com> > --- > v1 -> v2: N modes means we should use modes 0 to N-1, not 0 to N > > drivers/mtd/nand/nand_base.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c > index 9be7842f300e..3cb1cefcd926 100644 > --- a/drivers/mtd/nand/nand_base.c > +++ b/drivers/mtd/nand/nand_base.c > @@ -1586,7 +1586,7 @@ read_retry: > } > > if (mtd->ecc_stats.failed - ecc_failures) { > - if (retry_mode + 1 <= chip->read_retries) { > + if (retry_mode + 1 < chip->read_retries) { > retry_mode++; > ret = nand_setup_read_retry(mtd, > retry_mode); > -- > 1.8.3.2 > > > Acked-by: Huang Shijie <b32955@freescale.com>
On Fri, Feb 14, 2014 at 03:58:21PM +0800, Huang Shijie wrote: > On Wed, Feb 12, 2014 at 05:22:11PM -0800, Brian Norris wrote: > > A flash may support N read retry voltage threshold modes, numbered 1 > > through N-1 (where mode 0 represents the initial state). However, > > nand_do_read_ops() tries to use mode 0 through N. > > > > This off-by-one error shows up, for instance, when using nanddump, and > > we have cycled through available modes: > > > > nand: setting READ RETRY mode 0 > > nand: setting READ RETRY mode 1 > > nand: setting READ RETRY mode 2 > > nand: setting READ RETRY mode 3 > > nand: setting READ RETRY mode 4 > > nand: setting READ RETRY mode 5 > > nand: setting READ RETRY mode 6 > > nand: setting READ RETRY mode 7 > > nand: setting READ RETRY mode 8 > > libmtd: error!: cannot read 8192 bytes from mtd0 (eraseblock 20, offset 0) > > error 22 (Invalid argument) > > nanddump: error!: mtd_read > > > > Tested on Micron MT29F64G08CBCBBH1, with 8 retry modes. > > > > Signed-off-by: Brian Norris <computersforpeace@gmail.com> > > --- > > v1 -> v2: N modes means we should use modes 0 to N-1, not 0 to N > > > > drivers/mtd/nand/nand_base.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c > > index 9be7842f300e..3cb1cefcd926 100644 > > --- a/drivers/mtd/nand/nand_base.c > > +++ b/drivers/mtd/nand/nand_base.c > > @@ -1586,7 +1586,7 @@ read_retry: > > } > > > > if (mtd->ecc_stats.failed - ecc_failures) { > > - if (retry_mode + 1 <= chip->read_retries) { > > + if (retry_mode + 1 < chip->read_retries) { > > retry_mode++; > > ret = nand_setup_read_retry(mtd, > > retry_mode); > > Acked-by: Huang Shijie <b32955@freescale.com> Pushed to linux-mtd.git. Will queue up a few other things to send to Linus in 3.14-rcX. Brian
diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c index 9be7842f300e..3cb1cefcd926 100644 --- a/drivers/mtd/nand/nand_base.c +++ b/drivers/mtd/nand/nand_base.c @@ -1586,7 +1586,7 @@ read_retry: } if (mtd->ecc_stats.failed - ecc_failures) { - if (retry_mode + 1 <= chip->read_retries) { + if (retry_mode + 1 < chip->read_retries) { retry_mode++; ret = nand_setup_read_retry(mtd, retry_mode);
A flash may support N read retry voltage threshold modes, numbered 1 through N-1 (where mode 0 represents the initial state). However, nand_do_read_ops() tries to use mode 0 through N. This off-by-one error shows up, for instance, when using nanddump, and we have cycled through available modes: nand: setting READ RETRY mode 0 nand: setting READ RETRY mode 1 nand: setting READ RETRY mode 2 nand: setting READ RETRY mode 3 nand: setting READ RETRY mode 4 nand: setting READ RETRY mode 5 nand: setting READ RETRY mode 6 nand: setting READ RETRY mode 7 nand: setting READ RETRY mode 8 libmtd: error!: cannot read 8192 bytes from mtd0 (eraseblock 20, offset 0) error 22 (Invalid argument) nanddump: error!: mtd_read Tested on Micron MT29F64G08CBCBBH1, with 8 retry modes. Signed-off-by: Brian Norris <computersforpeace@gmail.com> --- v1 -> v2: N modes means we should use modes 0 to N-1, not 0 to N drivers/mtd/nand/nand_base.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)