All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] mtd: nand: fix off-by-one read retry mode counting
@ 2014-02-13  0:46 Brian Norris
  2014-02-13  0:58 ` Brian Norris
  0 siblings, 1 reply; 2+ messages in thread
From: Brian Norris @ 2014-02-13  0:46 UTC (permalink / raw)
  To: linux-mtd; +Cc: Huang Shijie, Brian Norris

A flash may support N read retry voltage threshold modes, numbered 1
through N (where mode 0 represents the initial state). However,
nand_setup_read_retry() prematurely quits with an error when mode == 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>
---
 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..76535a61b87a 100644
--- a/drivers/mtd/nand/nand_base.c
+++ b/drivers/mtd/nand/nand_base.c
@@ -1471,7 +1471,7 @@ static int nand_setup_read_retry(struct mtd_info *mtd, int retry_mode)
 
 	pr_debug("setting READ RETRY mode %d\n", retry_mode);
 
-	if (retry_mode >= chip->read_retries)
+	if (retry_mode > chip->read_retries)
 		return -EINVAL;
 
 	if (!chip->setup_read_retry)
-- 
1.8.3.2

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] mtd: nand: fix off-by-one read retry mode counting
  2014-02-13  0:46 [PATCH] mtd: nand: fix off-by-one read retry mode counting Brian Norris
@ 2014-02-13  0:58 ` Brian Norris
  0 siblings, 0 replies; 2+ messages in thread
From: Brian Norris @ 2014-02-13  0:58 UTC (permalink / raw)
  To: linux-mtd; +Cc: Huang Shijie

On Wed, Feb 12, 2014 at 04:46:34PM -0800, Brian Norris wrote:
> A flash may support N read retry voltage threshold modes, numbered 1
> through N (where mode 0 represents the initial state). However,
> nand_setup_read_retry() prematurely quits with an error when mode == N.

Scratch that; apparently N retry modes means we can use feature address
0 through N-1. So the off-by-one error is actually in
nand_do_read_ops(). I'll send a v2 shortly.

Brian

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2014-02-13  0:59 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-02-13  0:46 [PATCH] mtd: nand: fix off-by-one read retry mode counting Brian Norris
2014-02-13  0:58 ` Brian Norris

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.