linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Naga Sureshkumar Relli <nagasure@xilinx.com>
To: Naga Sureshkumar Relli <nagasure@xilinx.com>,
	"boris.brezillon@bootlin.com" <boris.brezillon@bootlin.com>,
	"miquel.raynal@bootlin.com" <miquel.raynal@bootlin.com>,
	"richard@nod.at" <richard@nod.at>,
	"dwmw2@infradead.org" <dwmw2@infradead.org>,
	"computersforpeace@gmail.com" <computersforpeace@gmail.com>,
	"marek.vasut@gmail.com" <marek.vasut@gmail.com>
Cc: "linux-mtd@lists.infradead.org" <linux-mtd@lists.infradead.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"nagasuresh12@gmail.com" <nagasuresh12@gmail.com>,
	"robh@kernel.org" <robh@kernel.org>,
	Michal Simek <michals@xilinx.com>
Subject: RE: [LINUX PATCH v12 3/3] mtd: rawnand: arasan: Add support for Arasan NAND Flash Controller
Date: Thu, 15 Nov 2018 09:34:16 +0000	[thread overview]
Message-ID: <MWHPR02MB26234433484426F333E9B60EAFDC0@MWHPR02MB2623.namprd02.prod.outlook.com> (raw)
In-Reply-To: <1541739641-17789-4-git-send-email-naga.sureshkumar.relli@xilinx.com>

Hi Boris & Miquel,

I am updating the driver by addressing your comments, and I have one concern,  especially in anfc_read_page_hwecc(), 
there I am checking for erased pages bit flips.
Since Arasan NAND controller doesn't have multibit error detection beyond 24-bit( it can correct up to 24 bit),
i.e. there is no indication from controller to detect uncorrectable error beyond 24bit.
So I took some error count as default value(MULTI_BIT_ERR_CNT  16, I put this based on the error count that 
I got while reading erased page on Micron device).
And during a page read, will just read the error count register and compare this value with the default error count(16) and if it is more 
Than default then I am checking for erased page bit flips.
I am doubting that this will not work in all cases.
In my case it is just working because the error count that it got on an erased page is 16.
Could you please suggest a way to do detect erased_page bit flips when reading a page with HW-ECC?.

> +
> +/*
> + * Arasan NAND controller can't detect errors beyond 24-bit in BCH
> + * For an erased page we observed that multibit error count as 16
> + * with 24-bit ECC. so if the count is equal to or greater than 16
> + * then we can say that its an uncorrectable ECC error.
> + */
> +#define MULTI_BIT_ERR_CNT 16
> +
> 
> +}
> +
> +static int anfc_read_page_hwecc(struct nand_chip *chip, u8 *buf,
> +				int oob_required, int page)
> +{
> +	struct anfc_nand_controller *nfc = to_anfc(chip->controller);
> +	struct anfc_nand_chip *achip = to_anfc_nand(chip);
> +	struct mtd_info *mtd = nand_to_mtd(chip);
> +	u8 *ecc_code = chip->ecc.code_buf;
> +	u8 *p;
> +	int eccsize = chip->ecc.size;
> +	int eccbytes = chip->ecc.bytes;
> +	int stat = 0, i;
> +	u32 ret;
> +	unsigned int max_bitflips = 0;
> +	u32 eccsteps = chip->ecc.steps;
> +	u32 one_bit_err = 0, multi_bit_err = 0;
> +
> +	anfc_set_eccsparecmd(nfc, achip, NAND_CMD_RNDOUT,
> NAND_CMD_RNDOUTSTART);
> +	anfc_config_ecc(nfc, true);
> +
> +	ret = nand_read_page_op(chip, page, 0, buf, mtd->writesize);
> +	if (ret)
> +		return ret;
> +
> +	anfc_config_ecc(nfc, false);
> +	if (achip->strength) {
> +		/*
> +		 * In BCH mode Arasan NAND controller can correct ECC upto
> +		 * 24-bit Beyond that, it can't even detect errors.
> +		 */
> +		multi_bit_err = readl(nfc->base + ECC_ERR_CNT_OFST);
> +		multi_bit_err = ((multi_bit_err & PAGE_ERR_CNT_MASK) >> 8);
> +	} else {
> +		/*
> +		 * In Hamming mode Arasan NAND controller can correct ECC upto
> +		 * 1-bit and can detect upto 2-bit errors.
> +		 */
> +		one_bit_err = readl(nfc->base + ECC_ERR_CNT_1BIT_OFST);
> +		multi_bit_err = readl(nfc->base + ECC_ERR_CNT_2BIT_OFST);
> +		/* Clear ecc error count register 1Bit, 2Bit */
> +		writel(0x0, nfc->base + ECC_ERR_CNT_1BIT_OFST);
> +		writel(0x0, nfc->base + ECC_ERR_CNT_2BIT_OFST);
> +	}
> +
> +	if (oob_required)
> +		chip->ecc.read_oob(chip, page);
> +
> +	if (multi_bit_err >= MULTI_BIT_ERR_CNT) {
> +		if (!oob_required)
> +			chip->ecc.read_oob(chip, page);
> +
> +		mtd_ooblayout_get_eccbytes(mtd, ecc_code, chip->oob_poi, 0,
> +					   chip->ecc.total);
> +		p = buf;
> +		for (i = 0; eccsteps; eccsteps--, i += eccbytes,
> +		     p += eccsize) {
> +			stat = nand_check_erased_ecc_chunk(p,
> +							   chip->ecc.size,
> +							   &ecc_code[i],
> +							   eccbytes,
> +							   NULL, 0,
> +							   chip->ecc.strength);
> +			if (stat < 0) {
> +				mtd->ecc_stats.failed++;
> +			} else {
> +				mtd->ecc_stats.corrected += stat;
> +				max_bitflips = max_t(unsigned int, max_bitflips,
> +						     stat);
> +			}
> +		}
> +	}
> +
> +	return max_bitflips;
> +}
> +
> +

Thanks,
Naga Sureshkumar Relli.

  parent reply	other threads:[~2018-11-15  9:34 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-11-09  5:00 [LINUX PATCH v12 0/3] Add support for Arasan NAND Flash controller Naga Sureshkumar Relli
2018-11-09  5:00 ` [LINUX PATCH v12 1/3] dt-bindings: mtd: arasan: Add device tree binding documentation Naga Sureshkumar Relli
2018-11-09  6:28   ` Boris Brezillon
2018-11-09 12:33     ` Naga Sureshkumar Relli
2018-11-09 12:54       ` Miquel Raynal
2018-11-09 13:19         ` Naga Sureshkumar Relli
2018-11-16 11:50   ` Martin Lund
2018-11-16 12:10     ` Martin Lund
2018-11-16 12:33     ` Michal Simek
2018-11-16 13:50       ` Naga Sureshkumar Relli
2018-11-16 14:22         ` Martin Lund
2018-11-09  5:00 ` [LINUX PATCH v12 2/3] mtd: rawnand: Add an option to get sdr timing mode number Naga Sureshkumar Relli
2018-11-09  5:00 ` [LINUX PATCH v12 3/3] mtd: rawnand: arasan: Add support for Arasan NAND Flash Controller Naga Sureshkumar Relli
2018-11-09  8:07   ` Boris Brezillon
2018-11-09 13:18     ` Naga Sureshkumar Relli
2018-11-09 23:03   ` kbuild test robot
2018-11-12 10:55   ` Martin Lund
2018-11-12 10:58     ` Boris Brezillon
2018-11-12 12:43       ` Naga Sureshkumar Relli
2018-11-15  9:34   ` Naga Sureshkumar Relli [this message]
2018-11-18 18:52     ` Miquel Raynal
2018-11-18 19:43     ` Boris Brezillon
2018-11-19  6:20       ` Naga Sureshkumar Relli
2018-11-19  8:02         ` Boris Brezillon
2018-11-20  7:02           ` Naga Sureshkumar Relli
2018-11-20 11:02             ` Boris Brezillon
2018-11-20 12:36               ` Miquel Raynal
2018-11-23 13:53                 ` Naga Sureshkumar Relli
2018-12-12  5:27                   ` Naga Sureshkumar Relli
2018-12-12  8:11                     ` Miquel Raynal
2018-12-12  9:04                       ` Naga Sureshkumar Relli
2018-12-12  9:09                         ` Miquel Raynal
2018-12-12 13:07                           ` Naga Sureshkumar Relli
2018-12-12 13:18                             ` Miquel Raynal
2018-12-17 13:21                               ` Naga Sureshkumar Relli
2018-12-17 16:41                                 ` Miquel Raynal
2018-12-18  5:33                                   ` Naga Sureshkumar Relli
2018-12-19 14:26                                     ` Miquel Raynal
2018-12-21  7:36                                       ` Naga Sureshkumar Relli
2019-01-28  6:04                                         ` Naga Sureshkumar Relli
2019-01-28  9:27                                           ` Miquel Raynal
2019-01-28  9:35                                             ` Naga Sureshkumar Relli
2019-06-19  4:44                                             ` Naga Sureshkumar Relli
2019-06-27 16:27                                               ` Miquel Raynal
2019-06-28  4:20                                                 ` Naga Sureshkumar Relli
2018-11-15 16:45   ` Dan Carpenter
2018-11-20 16:24   ` Boris Brezillon
2018-12-04  9:18     ` Naga Sureshkumar Relli

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=MWHPR02MB26234433484426F333E9B60EAFDC0@MWHPR02MB2623.namprd02.prod.outlook.com \
    --to=nagasure@xilinx.com \
    --cc=boris.brezillon@bootlin.com \
    --cc=computersforpeace@gmail.com \
    --cc=dwmw2@infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mtd@lists.infradead.org \
    --cc=marek.vasut@gmail.com \
    --cc=michals@xilinx.com \
    --cc=miquel.raynal@bootlin.com \
    --cc=nagasuresh12@gmail.com \
    --cc=richard@nod.at \
    --cc=robh@kernel.org \
    /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).