linux-mtd.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: Lee Jones <lee.jones@linaro.org>
To: Brian Norris <computersforpeace@gmail.com>
Cc: angus.clark@st.com, kernel@stlinux.com,
	linux-kernel@vger.kernel.org, linux-mtd@lists.infradead.org,
	pekon@ti.com,
	Ezequiel Garcia <ezequiel.garcia@free-electrons.com>,
	dwmw2@infradead.org, linux-arm-kernel@lists.infradead.org
Subject: Re: [RFC 00/47] mtd: nand: Add new driver supporting ST's BCH h/w
Date: Wed, 30 Apr 2014 10:57:18 +0100	[thread overview]
Message-ID: <20140430095718.GJ29462@lee--X1> (raw)
In-Reply-To: <20140410200004.GP32070@ld-irv-0074>

> > > The BBT requirements are somewhere more complex. To provide you with
> > > the complete picture, a little knowledge of driver history is
> > > required. When it was initially created the MTD core only supported
> > > OOB BBTs, but the ST BCH Controller doesn't support OOB access, so
> > > Angus wrote his on In-Band (IB) implementation. Unfortunately the IB
> > > support which _is_ now present in the kernel doesn't match the
> > > internal implementation. Normally this wouldn't be an issue in itself,
> > > but ST's boot-stack and tooling (Primary Bootloader, U-Boot, various
> > > Programmers, etc) are aware of the internal IB BTT and utilise it
> > > in varying ways. Shifting over to the Mainline version in
> > > one-foul-swoop _will_ cause lots of pain and will probably result in
> > > the disownership of driver we're trying to Mainline today. Naturally
> > > I'm keen to avoid this.
> > 
> > Just looking into this now. Can I add support for a vendor specific
> > signature extension? ST's flashers, bootloaders and tooling currently
> > use the format:
> > 
> > /* Extend IBBT header with some stm-nand-bch niceties */
> > struct nand_ibbt_bch_header {
> > 	uint8_t signature[4];           /* "Bbt0" or "1tbB" signature */
> > 	uint8_t version;                /* BBT version ("age") */
> > 	uint8_t reserved[3];            /* padding */
> > 	uint8_t baseschema[4];          /* "base" schema (x4) */
> > 	uint8_t privschema[4];          /* "private" schema (x4) */
> 
> Not sure what these schema mean.

To be honest, me either, but I know that they are used by ST's
tooling; flashers, bootloaders and debuggers.

> > 	uint8_t ecc_size[4];            /* ECC bytes (0, 32, 54) (x4) */
> > 	char    author[64];             /* Arbitrary string for S/W to use */
> > }; __attribute__((__packed__))
> 
> Nit: that would just be __packed (see compiler-gcc.h).

Okay.

> In principle, I'm OK with extending the BBT somewhat. Preferably, this
> would provide some extensibility, so that other custom formats can use
> the same base code. For instance, it looks like many of these fields
> would be fixed, and specific to your platform. So (from nand_bbt's
> perspective) these could just be consolidated int a field:
> 
> 	u8 custom[76];
> 
> Or make it variable-length, with the length provided by the driver?
> nand_bbt would just know not to check for it when scanning, and it
> would know to program it to flash when updating.
> 
> > It would be great if we can support this with a descriptor option or
> > suchlike, as it would a) save me a lot of aggravation and b) continue
> > to support ST with their current use-case.
> 
> Yeah, I realize you can't just jump over to the current format for
> production systems. And there are admittedly some rough spots in our
> current nand_bbt; it's not perfect.
> 
> Some random notes (not necessarily your problem; but things to be aware
> of): nand_bbt could use some additional robustness checks, I think. Like
> a CRC field, and maybe a versioning system for allowing
> (backwards-compatible) changes in the format. To make
> backwards-compatible changes, though, the original format needs to have
> reserved space, or at least an 'offset' field, which would point to
> where the actual BBT starts--not just a fixed offset.
> 
> There's also still a bit of cruft that really can be removed from
> nand_bbt (the handling of bad block markers, which is duplicated in
> nand_base). It's a low-priority item on my plate, but I think it might
> be a good first step before trying to expand nand_bbt much.

So I've been looking into the differences between the Mainline and
ST's implementation.  I've concluded that the transition over to
Mainline's version is best dealt with in the device driver.

I have depicted the differences between the two versions at [1].
You'll see that the BBT header and BBT data have been separated into
different pages the ST version.  This hardens the process against
power failures whilst creating the BBT by only writing the pattern
once the BBT data has been successfully applied to flash.  A small
corner-case perhaps, but these things do happen.

What I'd like to do is supply our own scan_bbt() call.  This is
supported by the framework already, so no extra modifications are
required.  Converting nand_bbt to add support for our (and other)
formats would be fairly intrusive.  The framework already allows us to
search from the last block backwards, which is great, but that same
functionality is missing for searching from the last page in the
block.  The ability to separate header from data is also vacant,
which we require for the aforementioned reasons.

In our scan_bbt() I would like to start off by only supporting solely
the ST schema, then over time search in both locations but preferring
ST's.  Subsequently the choice should be version number based, with a
view to phasing out ST's implementation completely once we've had a
change to adapt the tooling which currently use only ST's
implementation.

I'm hoping to submit the next version either today or tomorrow, which
will conform to the proposal above.  I hope that you find this
adequate.

[1] goo.gl/WnGLVQ

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog

      reply	other threads:[~2014-04-30  9:57 UTC|newest]

Thread overview: 77+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-03-25  8:19 [RFC 00/47] mtd: nand: Add new driver supporting ST's BCH h/w Lee Jones
2014-03-25  8:19 ` [RFC 01/47] mtd: nand: export useful functions from core driver Lee Jones
2014-03-25 12:57   ` Ezequiel Garcia
2014-03-25 14:58     ` Lee Jones
2014-03-25  8:19 ` [RFC 02/47] mtd: nand: add ONFI NAND Timing Mode Specifications Lee Jones
2014-03-25 17:01   ` Jason Gunthorpe
2014-03-25  8:19 ` [RFC 03/47] mtd: nand: add shared register defines for ST's NAND Controller drivers Lee Jones
2014-03-25  8:19 ` [RFC 04/47] mtd: nand: adding ST's BCH NAND Controller driver Lee Jones
2014-03-25  8:19 ` [RFC 05/47] mtd: nand: stm_nand_bch: IRQ support for " Lee Jones
2014-03-26  7:10   ` Gupta, Pekon
2014-03-25  8:19 ` [RFC 06/47] mtd: nand: stm_nand_bch: change between BCH and Hamming modes Lee Jones
2014-03-25  8:19 ` [RFC 07/47] mtd: nand: stm_nand_bch: initialise the BCH Controller Lee Jones
2014-03-26 10:25   ` Gupta, Pekon
2014-04-30 10:22     ` Lee Jones
2014-04-30 10:59       ` Gupta, Pekon
2014-04-30 12:29         ` Lee Jones
2014-03-25  8:19 ` [RFC 08/47] mtd: nand: stm_nand_bch: supply clock support Lee Jones
2014-03-26  7:15   ` Gupta, Pekon
2014-03-25  8:19 ` [RFC 09/47] mtd: nand: stm_nand_bch: introduce and initialise some important data structures Lee Jones
2014-03-25  8:19 ` [RFC 10/47] mtd: nand: stm_nand_bch: initialise the Hamming Controller Lee Jones
2014-03-25  8:19 ` [RFC 11/47] mtd: nand: stm_nand_bch: add Power Management Lee Jones
2014-03-25  8:19 ` [RFC 12/47] mtd: nand: stm_nand_bch: scan for NAND devices Lee Jones
2014-03-25  8:19 ` [RFC 13/47] mtd: nand: stm_nand_bch: provide Device Tree support Lee Jones
2014-03-26  9:18   ` Gupta, Pekon
2014-04-30 12:54     ` Lee Jones
2014-05-05  6:55       ` Gupta, Pekon
2014-05-09 10:03         ` Lee Jones
2014-05-09 10:32           ` Gupta, Pekon
2014-05-09 10:38             ` Lee Jones
2014-05-19 14:02             ` Lee Jones
2014-03-25  8:19 ` [RFC 14/47] mtd: nand: stm_nand_bch: configure BCH and FLEX by ONFI timing mode Lee Jones
2014-03-25  8:19 ` [RFC 15/47] mtd: nand: stm_nand_bch: add compatible page size check Lee Jones
2014-03-25  8:19 ` [RFC 16/47] mtd: nand: stm_nand_bch: derive some working variables for latter use Lee Jones
2014-03-25  8:19 ` [RFC 17/47] mtd: nand: stm_nand_bch: automatically set EEC mode if requested Lee Jones
2014-03-25  8:19 ` [RFC 18/47] mtd: nand: stm_nand_bch: ensure configuration is compatible with this driver Lee Jones
2014-03-25  8:19 ` [RFC 19/47] mtd: nand: stm_nand_bch: configure BCH read/write/erase programs Lee Jones
2014-03-25  8:19 ` [RFC 20/47] mtd: nand: stm_nand_bch: initialise working buffers Lee Jones
2014-03-25  8:19 ` [RFC 21/47] mtd: nand: stm_nand_bch: provide shared BCH operations Lee Jones
2014-03-25  8:19 ` [RFC 22/47] mtd: nand: stm_nand_bch: check erased page for zeros Lee Jones
2014-03-25  8:19 ` [RFC 23/47] mtd: nand: stm_nand_bch: read and write page (BCH) Lee Jones
2014-03-26 10:17   ` Gupta, Pekon
2014-04-30 11:19     ` Lee Jones
2014-03-25  8:19 ` [RFC 24/47] mtd: nand: stm_nand_bch: find IBBT signature Lee Jones
2014-03-25  8:19 ` [RFC 25/47] mtd: nand: stm_nand_bch: bad block marking helpers Lee Jones
2014-03-25  8:19 ` [RFC 26/47] mtd: nand: stm_nand_bch: populate IBBT BCH Header Lee Jones
2014-03-25  8:19 ` [RFC 27/47] mtd: nand: stm_nand_bch: write IBBT to Flash Lee Jones
2014-03-25  8:19 ` [RFC 28/47] mtd: nand: stm_nand_bch: update flash-resident BBT(s) Lee Jones
2014-03-25  8:19 ` [RFC 29/47] mtd: nand: stm_nand_bch: add Hamming-FLEX operations Lee Jones
2014-03-25  8:19 ` [RFC 30/47] mtd: nand: stm_nand_bch: read and write raw (FLEX) Lee Jones
2014-03-25  8:19 ` [RFC 31/47] mtd: nand: stm_nand_bch: scan block for BBM(s) according to specified BBT options Lee Jones
2014-03-25  8:19 ` [RFC 32/47] mtd: nand: stm_nand_bch: scan for BBMs and build memory-resident BBT Lee Jones
2014-03-25  8:19 ` [RFC 33/47] mtd: nand: stm_nand_bch: search for and load flash-resident BBT Lee Jones
2014-03-25  8:19 ` [RFC 34/47] mtd: nand: stm_nand_bch: " Lee Jones
2014-03-25  8:19 ` [RFC 35/47] mtd: nand: stm_nand_bch: dump bad blocks Lee Jones
2014-03-25 12:53   ` Ezequiel Garcia
2014-03-25  8:19 ` [RFC 36/47] mtd: nand: stm_nand_bch: parse partitions and register an MTD device Lee Jones
2014-03-25  8:19 ` [RFC 37/47] mtd: nand: stm_nand_bch: fetch the bit-flips threshold Lee Jones
2014-03-25  8:19 ` [RFC 38/47] mtd: nand: stm_nand_bch: check WP (FLEX) Lee Jones
2014-03-25  8:19 ` [RFC 39/47] mtd: nand: stm_nand_bch: read and write ops (FLEX) Lee Jones
2014-03-25  8:19 ` [RFC 40/47] mtd: nand: stm_nand_bch: MTD erase (BCH) Lee Jones
2014-03-25  8:19 ` [RFC 41/47] mtd: nand: stm_nand_bch: MTD mark and check for bad blocks (BCH) Lee Jones
2014-03-25  8:19 ` [RFC 42/47] mtd: nand: stm_nand_bch: add read and write OOB (BCH) Lee Jones
2014-03-25  8:20 ` [RFC 43/47] mtd: nand: stm_nand_bch: read and write functions (BCH) Lee Jones
2014-03-26 10:31   ` Gupta, Pekon
2014-04-30  9:19     ` Lee Jones
2014-03-25  8:20 ` [RFC 44/47] mtd: nand: stm_nand_bch: MTD read and write (BCH) Lee Jones
2014-03-25  8:20 ` [RFC 45/47] mtd: nand: stm_nand_bch: read and write buffers (FLEX) Lee Jones
2014-03-25  8:20 ` [RFC 46/47] mtd: nand: mtd_nand_bch: add remaining FLEX functions Lee Jones
2014-03-25  8:20 ` [RFC 47/47] mtd: nand: stm_nand_bch: catch unsupported calls Lee Jones
2014-03-25 12:50 ` [RFC 00/47] mtd: nand: Add new driver supporting ST's BCH h/w Ezequiel Garcia
2014-03-25 13:11   ` Lee Jones
2014-03-25 22:00     ` Ezequiel Garcia
2014-03-26  7:28       ` Brian Norris
2014-03-27 10:28         ` Lee Jones
2014-04-01 11:29           ` Lee Jones
2014-04-10 20:00             ` Brian Norris
2014-04-30  9:57               ` Lee Jones [this message]

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=20140430095718.GJ29462@lee--X1 \
    --to=lee.jones@linaro.org \
    --cc=angus.clark@st.com \
    --cc=computersforpeace@gmail.com \
    --cc=dwmw2@infradead.org \
    --cc=ezequiel.garcia@free-electrons.com \
    --cc=kernel@stlinux.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mtd@lists.infradead.org \
    --cc=pekon@ti.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 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).