From: Aaron Sierra <asierra@xes-inc.com>
To: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>
Cc: David Woodhouse <dwmw2@infradead.org>,
devicetree@vger.kernel.org,
Brian Norris <computersforpeace@gmail.com>,
linux-mtd@lists.infradead.org,
Jordan Friendshuh <jfriendshuh@xes-inc.com>
Subject: Re: [PATCH v2] mtd: fsl_upm: Support NAND ECC DTS properties
Date: Tue, 25 Nov 2014 16:19:08 -0600 (CST) [thread overview]
Message-ID: <412246484.206926.1416953948359.JavaMail.zimbra@xes-inc.com> (raw)
In-Reply-To: <5474E1DB.1090207@vanguardiasur.com.ar>
> From: "Ezequiel Garcia" <ezequiel@vanguardiasur.com.ar>
> Sent: Tuesday, November 25, 2014 2:08:59 PM
>
> On 11/08/2014 04:11 PM, Aaron Sierra wrote:
> [..]
> > +
> > + /* We know mode is either NAND_ECC_SOFT or NAND_ECC_SOFT_BCH */
> > + if (strength < 0 && mode == NAND_ECC_SOFT_BCH) {
> > + dev_err(fun->dev,
> > + "ECC BCH mode requires nand-ecc-strength property");
> > + ret = -EINVAL;
> > + goto err;
> > + } else if (strength == 0) {
> > + dev_err(fun->dev, "ECC strength of 0 bits is unsupported");
> > + ret = -EINVAL;
> > + goto err;
> > + } else if (strength == 1 && mode == NAND_ECC_SOFT_BCH) {
> > + dev_err(fun->dev, "ECC BCH mode requires > 1-bit strength");
> > + ret = -EINVAL;
> > + goto err;
> > + } else if (strength > 1 && mode == NAND_ECC_SOFT) {
> > + dev_warn(fun->dev,
> > + "Forcing ECC BCH due to %d-bit strength\n", strength);
> > + mode = NAND_ECC_SOFT_BCH;
> > + }
> > + fun->chip.ecc.mode = mode;
> > + fun->chip.ecc.strength = strength;
> > +
>
> Aside from my comment about the lack of ECC specification in the
> binding, I think the above is wrong.
>
> You don't have hardware ECC, but software ECC (either hamming or BCH).
> So, you don't need to specify any nand_ecc_ctrl.strength (i.e.
> ecc.strength above).
>
> It'll be set by the NAND core and override any value you set
> See nand_scan_tail.
Ezequiel,
This patch was originally the second of two patches. The first was applied
to l2-mtd.git on 11/5/2014:
mtd: nand: Base BCH ECC bytes on required strength
It affects the code in nand_scan_tail that you're referring to so that it
looks like this:
/*
* Board driver should supply ecc.size and ecc.bytes values to
* select how many bits are correctable; see nand_bch_init()
* for details. Otherwise, default to 4 bits for large page
* devices.
*/
if (!ecc->size && (mtd->oobsize >= 64)) {
ecc->size = 512;
ecc->bytes = DIV_ROUND_UP(13 * ecc->strength, 8);
}
ecc->priv = nand_bch_init(mtd, ecc->size, ecc->bytes,
&ecc->layout);
if (!ecc->priv) {
pr_warn("BCH ECC initialization failed!\n");
BUG();
}
ecc->strength = ecc->bytes * 8 / fls(8 * ecc->size);
In this case ecc->strength is unnecessarily recalculated at the end and
ecc->strength isn't checked for zero in the initial calculation. Perhaps
this block in nand_scan_tail should be patched again to preserve the
original behaviour if ecc->strength or ecc->size are zero.
The only other in-kernel user of SOFT_BCH is sunxi_nand.c and it calculates
ecc->bytes from ecc->size and ecc->strength itself, so it has defined all
three values by this point.
> So, I'd say you just need to specify the nand-ecc-mode in the devicetree
> binding.
>
> The nand-ecc-strength and nand-ecc-step-size are meant for controllers
> with hardware ECC support.
Software BCH allows controllers without hardware support for multiple
bit correction to be used with NAND devices that require multiple bit
correction, so like a hardware controller it needs to know how many
bits to correct.
> --
> Ezequiel Garcia, VanguardiaSur
> www.vanguardiasur.com.ar
>
next prev parent reply other threads:[~2014-11-25 22:19 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <71973089.5152.1415472776826.JavaMail.zimbra@xes-inc.com>
2014-11-08 19:11 ` [PATCH v2] mtd: fsl_upm: Support NAND ECC DTS properties Aaron Sierra
2014-11-23 0:55 ` Ezequiel Garcia
2014-11-24 15:22 ` Aaron Sierra
2014-11-25 20:08 ` Ezequiel Garcia
2014-11-25 22:19 ` Aaron Sierra [this message]
2014-11-25 22:42 ` Ezequiel Garcia
2014-11-25 23:23 ` Aaron Sierra
2014-12-17 0:35 ` Brian Norris
2014-12-17 2:11 ` Aaron Sierra
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=412246484.206926.1416953948359.JavaMail.zimbra@xes-inc.com \
--to=asierra@xes-inc.com \
--cc=computersforpeace@gmail.com \
--cc=devicetree@vger.kernel.org \
--cc=dwmw2@infradead.org \
--cc=ezequiel@vanguardiasur.com.ar \
--cc=jfriendshuh@xes-inc.com \
--cc=linux-mtd@lists.infradead.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