All of lore.kernel.org
 help / color / mirror / Atom feed
From: Boris Brezillon <boris.brezillon@free-electrons.com>
To: Markus Pargmann <mpa@pengutronix.de>
Cc: Han Xu <han.xu@nxp.com>, David Woodhouse <dwmw2@infradead.org>,
	Fabio Estevam <fabio.estevam@freescale.com>,
	"linux-mtd@lists.infradead.org" <linux-mtd@lists.infradead.org>,
	"kernel@pengutronix.de" <kernel@pengutronix.de>,
	Huang Shijie <shijie.huang@intel.com>,
	Brian Norris <computersforpeace@gmail.com>,
	"linux-arm-kernel@lists.infradead.org"
	<linux-arm-kernel@lists.infradead.org>,
	Stefan Christ <s.christ@phytec.de>,
	Elie De Brauwer <eliedebrauwer@gmail.com>,
	Richard Weinberger <richard@nod.at>,
	Artem Bityutskiy <dedekind1@gmail.com>
Subject: Re: [PATCH RESEND] gpmi-nand: Handle ECC Errors in erased pages
Date: Fri, 15 Apr 2016 11:39:06 +0200	[thread overview]
Message-ID: <20160415113906.7f971cec@bbrezillon> (raw)
In-Reply-To: <33206452.D8BR53ndXi@adelgunde>

Hi Markus,

On Fri, 15 Apr 2016 11:35:07 +0200
Markus Pargmann <mpa@pengutronix.de> wrote:

> Hi Boris,
> 
> On Friday 15 April 2016 10:35:08 Boris Brezillon wrote:
> > Hi Markus,
> > 
> > On Fri, 15 Apr 2016 09:55:45 +0200
> > Markus Pargmann <mpa@pengutronix.de> wrote:
> > 
> > > On Wednesday 13 April 2016 00:51:55 Boris Brezillon wrote:
> > > > On Tue, 12 Apr 2016 22:39:08 +0000
> > > > Han Xu <han.xu@nxp.com> wrote:
> > > > 
> > > > > > Thanks for the feedback. Talking with a coworker about this we may have found a
> > > > > > better approach to this that is less complicated to implement. The hardware
> > > > > > unit allows us to set a bitflip threshold for erased pages. The ECC unit
> > > > > > creates an ECC error only if the number of bitflips exceeds this threshold, but
> > > > > > it does not correct these. So the idea is to change the patch so that we set
> > > > > > pages, that are signaled by the ECC as erased, to 0xff completely without
> > > > > > checking. So the ECC will do all the work and we completely trust in its
> > > > > > abilities to do it correctly.
> > > > > 
> > > > > Sounds good.
> > > > > 
> > > > > some new platforms with new gpmi controller could check the count of 0 bits in page,
> > > > > refer to my patch https://patchwork.ozlabs.org/patch/587124/
> > > > > 
> > > > > But for all legacy platforms, IMO, considering bitflip is rare case, set threshold to 0 and
> > > > > only check the uncorrectable branch and then correct data sounds better. Setting threshold
> > > > > and correcting all erased page may highly impact the performance.
> > > > 
> > > > Indeed, bitflips in erased pages is not so common, and penalizing the
> > > > likely case (erased pages without any bitflips) doesn't look like a good
> > > > idea in the end.
> > > 
> > > Are erased pages really read that often?
> > 
> > Yes, it's not unusual to have those "empty pages?" checks (added Artem
> > and Richard to get a confirmation). AFAIR, UBIFS check for empty pages
> > in its journal heads after an unclean unmount (which happens quite
> > often) to make sure there's no corruption.
> > 
> > > I am not sure how UBI handles
> > > this, does it read every page before writing?
> > 
> > Nope, or maybe it does when you activate some extra checks.
> > 
> > > 
> > > > 
> > > > You can still implement this check in software. You can have a look at
> > > > nand_check_erased_ecc_chunk() [1] if you need an example, but you'll
> > > > have to adapt it because your controller does not guarantees that ECC
> > > > bits for a given chunk are byte aligned :-/
> > > 
> > > Yes I used this function in the patch. The issue is that I am not quite
> > > sure yet where to find the raw ECC data (without rereading the page).
> > > The reference manual is not extremely clear about that, ecc data may be
> > > in the 'auxilliary data' but I am not sure that it really is available
> > > somewhere.
> > 
> > AFAIR (and I'm not sure since it was a long time ago), you don't have
> > direct access to ECC bytes with the GPMI engine. If that's the case,
> > you'll have to read the ECC bytes manually (moving the page pointer
> > using ->cmdfunc(NAND_CMD_RNDOUT, column, -1)), which is a pain with
> > this engine, because ECC bytes are not guaranteed to be byte aligned
> > (see gpmi ->read_page_raw() implementation).
> > Once you've retrieved ECC bytes (or bits in this case), for each ECC
> > chunk, you can use the nand_check_erased_ecc_chunk() function (just make
> > sure you're padding the last ECC byte of each chunk with ones so that
> > bitflips cannot be reported on this section).
> 
> Thanks for the information. So I understand that this approach is the
> preferred one to avoid any performance issues for normal operation.
> 
> I actually won't be able to fix this patch accordingly for some time. If
> anyone else needs this earlier, feel free to implement it.

I just did [1] (it applies on top of your patch), but maybe you
can test it (I don't have any imx platforms right now) ;).

If these changes work, feel free to squash them into your previous
patch.

Thanks,

Boris

[1]http://code.bulix.org/bq6yyh-96549

-- 
Boris Brezillon, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com

WARNING: multiple messages have this Message-ID (diff)
From: boris.brezillon@free-electrons.com (Boris Brezillon)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH RESEND] gpmi-nand: Handle ECC Errors in erased pages
Date: Fri, 15 Apr 2016 11:39:06 +0200	[thread overview]
Message-ID: <20160415113906.7f971cec@bbrezillon> (raw)
In-Reply-To: <33206452.D8BR53ndXi@adelgunde>

Hi Markus,

On Fri, 15 Apr 2016 11:35:07 +0200
Markus Pargmann <mpa@pengutronix.de> wrote:

> Hi Boris,
> 
> On Friday 15 April 2016 10:35:08 Boris Brezillon wrote:
> > Hi Markus,
> > 
> > On Fri, 15 Apr 2016 09:55:45 +0200
> > Markus Pargmann <mpa@pengutronix.de> wrote:
> > 
> > > On Wednesday 13 April 2016 00:51:55 Boris Brezillon wrote:
> > > > On Tue, 12 Apr 2016 22:39:08 +0000
> > > > Han Xu <han.xu@nxp.com> wrote:
> > > > 
> > > > > > Thanks for the feedback. Talking with a coworker about this we may have found a
> > > > > > better approach to this that is less complicated to implement. The hardware
> > > > > > unit allows us to set a bitflip threshold for erased pages. The ECC unit
> > > > > > creates an ECC error only if the number of bitflips exceeds this threshold, but
> > > > > > it does not correct these. So the idea is to change the patch so that we set
> > > > > > pages, that are signaled by the ECC as erased, to 0xff completely without
> > > > > > checking. So the ECC will do all the work and we completely trust in its
> > > > > > abilities to do it correctly.
> > > > > 
> > > > > Sounds good.
> > > > > 
> > > > > some new platforms with new gpmi controller could check the count of 0 bits in page,
> > > > > refer to my patch https://patchwork.ozlabs.org/patch/587124/
> > > > > 
> > > > > But for all legacy platforms, IMO, considering bitflip is rare case, set threshold to 0 and
> > > > > only check the uncorrectable branch and then correct data sounds better. Setting threshold
> > > > > and correcting all erased page may highly impact the performance.
> > > > 
> > > > Indeed, bitflips in erased pages is not so common, and penalizing the
> > > > likely case (erased pages without any bitflips) doesn't look like a good
> > > > idea in the end.
> > > 
> > > Are erased pages really read that often?
> > 
> > Yes, it's not unusual to have those "empty pages?" checks (added Artem
> > and Richard to get a confirmation). AFAIR, UBIFS check for empty pages
> > in its journal heads after an unclean unmount (which happens quite
> > often) to make sure there's no corruption.
> > 
> > > I am not sure how UBI handles
> > > this, does it read every page before writing?
> > 
> > Nope, or maybe it does when you activate some extra checks.
> > 
> > > 
> > > > 
> > > > You can still implement this check in software. You can have a look at
> > > > nand_check_erased_ecc_chunk() [1] if you need an example, but you'll
> > > > have to adapt it because your controller does not guarantees that ECC
> > > > bits for a given chunk are byte aligned :-/
> > > 
> > > Yes I used this function in the patch. The issue is that I am not quite
> > > sure yet where to find the raw ECC data (without rereading the page).
> > > The reference manual is not extremely clear about that, ecc data may be
> > > in the 'auxilliary data' but I am not sure that it really is available
> > > somewhere.
> > 
> > AFAIR (and I'm not sure since it was a long time ago), you don't have
> > direct access to ECC bytes with the GPMI engine. If that's the case,
> > you'll have to read the ECC bytes manually (moving the page pointer
> > using ->cmdfunc(NAND_CMD_RNDOUT, column, -1)), which is a pain with
> > this engine, because ECC bytes are not guaranteed to be byte aligned
> > (see gpmi ->read_page_raw() implementation).
> > Once you've retrieved ECC bytes (or bits in this case), for each ECC
> > chunk, you can use the nand_check_erased_ecc_chunk() function (just make
> > sure you're padding the last ECC byte of each chunk with ones so that
> > bitflips cannot be reported on this section).
> 
> Thanks for the information. So I understand that this approach is the
> preferred one to avoid any performance issues for normal operation.
> 
> I actually won't be able to fix this patch accordingly for some time. If
> anyone else needs this earlier, feel free to implement it.

I just did [1] (it applies on top of your patch), but maybe you
can test it (I don't have any imx platforms right now) ;).

If these changes work, feel free to squash them into your previous
patch.

Thanks,

Boris

[1]http://code.bulix.org/bq6yyh-96549

-- 
Boris Brezillon, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com

  reply	other threads:[~2016-04-15  9:39 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-02-21 12:52 [PATCH RESEND] gpmi-nand: Handle ECC Errors in erased pages Markus Pargmann
2016-02-21 12:52 ` Markus Pargmann
2016-02-24 13:57 ` Boris Brezillon
2016-02-24 13:57   ` Boris Brezillon
2016-04-11  6:34   ` Markus Pargmann
2016-04-11  6:34     ` Markus Pargmann
2016-04-11  7:29     ` Boris Brezillon
2016-04-11  7:29       ` Boris Brezillon
2016-04-12 22:39       ` Han Xu
2016-04-12 22:39         ` Han Xu
2016-04-12 22:51         ` Boris Brezillon
2016-04-12 22:51           ` Boris Brezillon
2016-04-15  7:55           ` Markus Pargmann
2016-04-15  7:55             ` Markus Pargmann
2016-04-15  8:35             ` Boris Brezillon
2016-04-15  8:35               ` Boris Brezillon
2016-04-15  9:35               ` Markus Pargmann
2016-04-15  9:35                 ` Markus Pargmann
2016-04-15  9:39                 ` Boris Brezillon [this message]
2016-04-15  9:39                   ` Boris Brezillon
2016-04-15 12:03                   ` Markus Pargmann
2016-04-15 12:03                     ` Markus Pargmann
2016-04-15 15:33                     ` Han Xu
2016-04-15 15:33                       ` Han Xu
2016-04-15 15:40                       ` Boris Brezillon
2016-04-15 15:40                         ` Boris Brezillon
2016-04-18 10:07                         ` Markus Pargmann
2016-04-18 10:07                           ` Markus Pargmann
2016-04-18 14:47                   ` Stefan Christ
2016-04-18 14:47                     ` Stefan Christ
2016-04-18 15:10                     ` Boris Brezillon
2016-04-18 15:10                       ` Boris Brezillon

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=20160415113906.7f971cec@bbrezillon \
    --to=boris.brezillon@free-electrons.com \
    --cc=computersforpeace@gmail.com \
    --cc=dedekind1@gmail.com \
    --cc=dwmw2@infradead.org \
    --cc=eliedebrauwer@gmail.com \
    --cc=fabio.estevam@freescale.com \
    --cc=han.xu@nxp.com \
    --cc=kernel@pengutronix.de \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-mtd@lists.infradead.org \
    --cc=mpa@pengutronix.de \
    --cc=richard@nod.at \
    --cc=s.christ@phytec.de \
    --cc=shijie.huang@intel.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.