[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20170424091259.3f091129@bbrezillon>
Date: Mon, 24 Apr 2017 09:12:59 +0200
From: Boris Brezillon <boris.brezillon@...e-electrons.com>
To: Pavel Machek <pavel@....cz>
Cc: richard@....at, mark.marshall@...cronenergy.com,
linux-kernel@...r.kernel.org, marek.vasut@...il.com,
linux-mtd@...ts.infradead.org, Dipen.Dudhat@...escale.com,
cyrille.pitchen@...el.com, computersforpeace@...il.com,
dwmw2@...radead.org, prabhakar@...escale.com, b44839@...escale.com
Subject: Re: tango_nand: is logic right in error cases? (was Re:
fsl_ifc_nand: are blank pages protected by ECC?)
On Sun, 23 Apr 2017 11:58:45 +0200
Pavel Machek <pavel@....cz> wrote:
> Hi!
>
> > > Maybe I figured it out. Unfortunately, it is only compile tested. Does
> > > it look approximately right?
> >
> > Yep that's definitely better. Just one thing missing (see below),
> > otherwise it looks good.
>
> I'm copying from tango_nand, therefore I had to check tango_nand, too.
>
> static int check_erased_page(struct nand_chip *chip, u8 *buf)
> {
> ...
> res = nand_check_erased_ecc_chunk(buf, pkt_size, ecc, ecc_size,
> meta, meta_len,
> chip->ecc.strength);
> if (res < 0)
> mtd->ecc_stats.failed++;
> else
> mtd->ecc_stats.corrected += res;
>
> bitflips = max(res, bitflips);
> ...
> return bitflips;
> }
>
> static int tango_read_page(struct mtd_info *mtd, struct nand_chip *chip,
> u8 *buf, int oob_required, int page)
> {
> ...
> res = decode_error_report(nfc);
> if (res < 0) {
> chip->ecc.read_oob_raw(mtd, chip, page);
> res = check_erased_page(chip, buf);
> }
>
> return res;
> }
>
>
> So nand_check_erased_ecc_chunk() returns < 0 (failed ECC), but then we
> perform max() with bitflips (lets say 1, correctable ECC) and return
> 1? tango_read_page then returns 1 (correctable ECC) forgetting about
> failed ECC...?
Yep, that's expected, see what's done in the core to detect
uncorrectable errors and return EBADMSG when appropriate [1].
[1]http://lxr.free-electrons.com/source/drivers/mtd/nand/nand_base.c#L2033
Powered by blists - more mailing lists