From: Huang Shijie <b32955@freescale.com>
To: Brian Norris <computersforpeace@gmail.com>
Cc: linux-mtd@lists.infradead.org, Pekon Gupta <pekon@ti.com>
Subject: Re: [PATCH v3 3/5] mtd: nand: add generic READ RETRY support
Date: Tue, 7 Jan 2014 14:17:34 +0800 [thread overview]
Message-ID: <20140107061733.GD8109@shlinux2.ap.freescale.net> (raw)
In-Reply-To: <1388795828-24808-3-git-send-email-computersforpeace@gmail.com>
On Fri, Jan 03, 2014 at 04:37:06PM -0800, Brian Norris wrote:
> +/**
> * nand_do_read_ops - [INTERN] Read data with ECC
> * @mtd: MTD device structure
> * @from: offset to read from
> @@ -1431,6 +1453,7 @@ static int nand_do_read_ops(struct mtd_info *mtd, loff_t from,
> uint8_t *bufpoi, *oob, *buf;
> unsigned int max_bitflips = 0;
>
> + int retry_mode = 0;
> bool ecc_fail = false;
>
> chipnr = (int)(from >> chip->chip_shift);
> @@ -1494,8 +1517,6 @@ static int nand_do_read_ops(struct mtd_info *mtd, loff_t from,
> memcpy(buf, chip->buffers->databuf + col, bytes);
> }
>
> - buf += bytes;
> -
> if (unlikely(oob)) {
> int toread = min(oobreadlen, max_oobsize);
>
> @@ -1514,8 +1535,27 @@ static int nand_do_read_ops(struct mtd_info *mtd, loff_t from,
> nand_wait_ready(mtd);
> }
>
> - if (mtd->ecc_stats.failed - ecc_failures)
> - ecc_fail = true;
> + if (mtd->ecc_stats.failed - ecc_failures) {
> + if (retry_mode + 1 <= chip->read_retries) {
> + retry_mode++;
> + pr_debug("ECC error; performing READ RETRY %d\n",
> + retry_mode);
you can move this pr_debug into the nand_set_read_retry().
> +
> + ret = nand_set_read_retry(mtd,
> + retry_mode);
> + if (ret < 0)
> + break;
> +
> + /* Reset failures */
> + mtd->ecc_stats.failed = ecc_failures;
> + continue;
> + } else {
> + /* No more retry modes; real failure */
> + ecc_fail = true;
> + }
> + }
> +
> + buf += bytes;
> } else {
> memcpy(buf, chip->buffers->databuf + col, bytes);
> buf += bytes;
> @@ -1525,6 +1565,14 @@ static int nand_do_read_ops(struct mtd_info *mtd, loff_t from,
>
> readlen -= bytes;
>
> + /* Reset to retry mode 0 */
> + if (retry_mode) {
> + ret = nand_set_read_retry(mtd, 0);
> + if (ret < 0)
> + break;
> + retry_mode = 0;
> + }
> +
> if (!readlen)
> break;
>
> diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h
> index 029fe5948dc4..ef70505dade1 100644
> --- a/include/linux/mtd/nand.h
> +++ b/include/linux/mtd/nand.h
> @@ -472,6 +472,8 @@ struct nand_buffers {
> * commands to the chip.
> * @waitfunc: [REPLACEABLE] hardwarespecific function for wait on
> * ready.
> + * @set_read_retry: [FLASHSPECIFIC] flash (vendor) specific function for
> + * setting the read-retry mode. Mostly needed for MLC NAND.
why not use the name "read_retry"?
i think it is more clear.
thanks
Huang Shijie
next prev parent reply other threads:[~2014-01-07 6:51 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-01-04 0:37 [PATCH v3 1/5] mtd: nand: localize ECC failures per page Brian Norris
2014-01-04 0:37 ` [PATCH v3 2/5] mtd: nand: add ONFI vendor block for Micron Brian Norris
2014-01-07 5:52 ` Huang Shijie
2014-01-04 0:37 ` [PATCH v3 3/5] mtd: nand: add generic READ RETRY support Brian Norris
2014-01-07 6:17 ` Huang Shijie [this message]
2014-01-13 8:04 ` Brian Norris
2014-01-13 7:36 ` Huang Shijie
2014-01-07 8:21 ` Huang Shijie
2014-01-04 0:37 ` [PATCH v3 4/5] mtd: nand: support Micron READ RETRY Brian Norris
2014-01-04 12:49 ` Huang Shijie
2014-01-07 6:54 ` Huang Shijie
2014-01-04 0:37 ` [PATCH v3 5/5] mtd: nand: use __packed shorthand Brian Norris
2014-01-07 5:52 ` Huang Shijie
2014-01-07 7:02 ` [PATCH v3 1/5] mtd: nand: localize ECC failures per page Huang Shijie
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=20140107061733.GD8109@shlinux2.ap.freescale.net \
--to=b32955@freescale.com \
--cc=computersforpeace@gmail.com \
--cc=linux-mtd@lists.infradead.org \
--cc=pekon@ti.com \
/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 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.