From: Boris Brezillon <boris.brezillon@free-electrons.com>
To: Valdis.Kletnieks@vt.edu
Cc: Richard Weinberger <richard@nod.at>,
linux-mtd@lists.infradead.org,
David Woodhouse <dwmw2@infradead.org>,
Brian Norris <computersforpeace@gmail.com>,
Hans de Goede <hdegoede@redhat.com>,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH 13/15] mtd: nand: samsung: retrieve ECC requirements from extended ID
Date: Tue, 31 May 2016 00:28:24 +0200 [thread overview]
Message-ID: <20160531002824.2f612484@bbrezillon> (raw)
In-Reply-To: <137285.1464641769@turing-police.cc.vt.edu>
On Mon, 30 May 2016 16:56:09 -0400
Valdis.Kletnieks@vt.edu wrote:
> On Mon, 30 May 2016 09:44:46 +0200, Boris Brezillon said:
> > Hi Valdis,
>
> > Actually, that was my first reaction [1], but the more I think about it
> > the more I realize it's a non-issue.
> > AFAICT, there's no full-id entries for Samsung NANDs in the nand_ids
> > table, so this either means there's no real users of Samsung MLCs or
> > NAND controller drivers connecting to those chips don't care about the
> > ->ecc_{step_ds,strength_ds} fields.
>
> I'm mostly, though not totally convinced (not having looked closely at
> the existing code). There's still a possible issue with the distinction
> between:
>
> A) "driver never references the variable" and
>
> B) driver check if it's zero, and acts like it doesn't care if it is, but if
> it's non-zero, it goes ahead and uses it, with possible hilarity ensuing if the
> value is wrong.
>
> Should be pretty easy for somebody who knows the code better than I to rule
> out case B fairly quickly...
Ok, so I had a quick look, and only 4 drivers are actually using the
->ecc_{strength,step}_ds fields, and AFAICT, all of them are already
broken with the existing implementation, even if those fields are set
to 0.
- the atmel driver uses a default ECC config (2bits/512bytes) if
those fields are set to 0, and this config is clearly not suitable
for the MLC NANDs we are talking about (note that SLC NANDs seem to
all use the 4 bytes extended ID scheme, which seems to be common to
all vendors).
- the gpmi driver either returns an error if one of these fields
are set to zero and the 'fsl,use-minimum-ecc' DT property is defined,
or tries to fill the whole OOB area with ECC bytes if the property is
not defined. The 2nd solution could work, if only we were sure about
the encoding of the OOB size, but, as the ECC requirements field, it
depends on the extended ID scheme. So, in the end, it's broken too.
- the pxa and sunxi drivers are just blindly relying on those fields if
the 'nand-ecc-strength' and 'nand-ecc-step-size' properties are
undefined. The pxa default to 1bit/512bytes if ecc strength or ecc
step appear to be set to 0, while the sunxi driver completely rejects
the NAND chip.
In both cases, the current implementation is broken, either because
you will use an unsuitable ECC config or because your NAND chip won't
be registered.
So, as you can see, we're just moving from a broken state to another
broken state, except the new infrastructures allows one to extend the
detection logic and thus allow for correct detection of more chips.
>
> > I agree that the solution is not perfect, but I'd prefer seeing the
> > NAND detection code iteratively improved than rejecting everything
> > until we're 100% sure that all cases are correctly handled (which might
> > never happen since NAND vendors introduce new NAND ID scheme if they
> > need to).
> >
> > BTW, do you have Samsung datasheets describing a different NAND ID
> > format, or is it purely hypothetical?
>
> Mostly hypothetical. I've just seen too many patches that assume "all chips
> from vendor XYZ do *this*" that were not at all corrrect.
>
Yep, that's true, except I'm not promising anything here, I just say
that this patch adds code to detect a range of Samsung chips, and that
it can be extended to properly detect chips that do not use this format
if we appear to find some (which is very likely to happen).
Of course, we could decide to leave everything as is and add full-id
entries to the nand_ids table each time we want to support a new chip
that does not expose a valid ONFI of JEDEC parameter table. But that
means adding more and more info to the nand_flash_dev structure and
polluting the nand_ids table with a bunch of NAND chips that could
otherwise be handled by the same detection code.
And as detailed above, this solution is just as broken as mine but in a
different way (in both cases, NANDs that are not already supported by
the kernel will either be rejected or used ).
--
Boris Brezillon, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
next prev parent reply other threads:[~2016-05-30 22:28 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-27 12:54 [PATCH 00/15] mtd: nand: allow vendor specific detection/initialization Boris Brezillon
2016-05-27 12:54 ` [PATCH 01/15] mtd: nand: get rid of the mtd parameter in all auto-detection functions Boris Brezillon
2016-05-27 12:54 ` [PATCH 02/15] mtd: nand: store nand ID in struct nand_chip Boris Brezillon
2016-05-27 12:54 ` [PATCH 03/15] mtd: nand: get rid of busw parameter Boris Brezillon
2016-05-27 12:54 ` [PATCH 04/15] mtd: nand: rename nand_get_flash_type() into nand_detect() Boris Brezillon
2016-05-27 12:54 ` [PATCH 05/15] mtd: nand: add vendor specific initialization step Boris Brezillon
2016-05-27 12:54 ` [PATCH 06/15] mtd: nand: kill the MTD_NAND_IDS Kconfig option Boris Brezillon
2016-05-27 12:54 ` [PATCH 07/15] mtd: nand: move samsung specific initialization in nand_samsung.c Boris Brezillon
2016-05-27 12:54 ` [PATCH 08/15] mtd: nand: move hynix specific initialization in nand_hynix.c Boris Brezillon
2016-05-27 12:54 ` [PATCH 09/15] mtd: nand: move toshiba specific initialization in nand_toshiba.c Boris Brezillon
2016-05-27 12:54 ` [PATCH 10/15] mtd: nand: move micron specific initialization in nand_micron.c Boris Brezillon
2016-05-27 12:54 ` [PATCH 11/15] mtd: nand: move AMD/Spansion specific initialization in nand_amd.c Boris Brezillon
2016-05-27 12:54 ` [PATCH 12/15] mtd: nand: move Macronix specific initialization in nand_macronix.c Boris Brezillon
2016-05-27 12:54 ` [PATCH 13/15] mtd: nand: samsung: retrieve ECC requirements from extended ID Boris Brezillon
2016-05-30 0:20 ` Valdis.Kletnieks
2016-05-30 7:44 ` Boris Brezillon
2016-05-30 20:56 ` Valdis.Kletnieks
2016-05-30 22:28 ` Boris Brezillon [this message]
2016-05-30 22:32 ` Boris Brezillon
2016-05-27 12:55 ` [PATCH 14/15] mtd: nand: hynix: rework NAND ID decoding to extract more information Boris Brezillon
2016-05-27 12:55 ` [PATCH 15/15] mtd: nand: hynix: add read-retry support for 1x nm MLC NANDs 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=20160531002824.2f612484@bbrezillon \
--to=boris.brezillon@free-electrons.com \
--cc=Valdis.Kletnieks@vt.edu \
--cc=computersforpeace@gmail.com \
--cc=dwmw2@infradead.org \
--cc=hdegoede@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mtd@lists.infradead.org \
--cc=richard@nod.at \
/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).