Re: [PATCH v3 00/52] mtd: rework ECC layout definition
From: Stefan Agner
Date: Thu Feb 25 2016 - 20:30:15 EST
Hi Boris,
On 2016-02-25 16:57, Boris Brezillon wrote:
> Hello,
>
> This patchset aims at getting rid of the nand_ecclayout limitations.
> struct nand_ecclayout is defining fixed eccpos and oobfree arrays which
> can only be increased by modifying the MTD_MAX_ECCPOS_ENTRIES_LARGE and
> MTD_MAX_OOBFREE_ENTRIES_LARGE macros.
> This approach forces us to modify the macro values each time we add a
> new NAND chip with a bigger OOB area, and increasing these arrays also
> penalize all platforms, even those who only support small NAND devices
> (with small OOB area).
>
> The idea to overcome this limitation, is to define the ECC/OOB layout
> by the mean of two functions: ->ecc() and ->free(), which will
> basically return the same information has those stored in the
> nand_ecclayout struct.
>
> Another advantage of this solution is that ECC layouts are usually
> following a repetitive pattern (i.e. leave X bytes free and put Y bytes
> of ECC per ECC chunk), which allows one to implement the ->ecc()
> and ->free() functions with a simple logic that can be applied
> to any size of OOB.
>
> Patches 1 to 4 are just cleanups or trivial fixes that can be taken
> independently.
>
> Also note that the last two commits are removing the nand_ecclayout
> definition, thus preventing any new driver to use this structure.
> Of course, this step can be delayed if some of the previous patches
> are not accepted.
Is the patch set somewhere available to pull from?
Do I see things right that patch 21/52 contains the crucial function
nand_ooblayout_ecc_lp which calculate the ECC position? (for those who
do not provide mtd_ooblayout_ops anyway...)
--
Stefan
>
> Best Regards,
>
> Boris
>
> Changes since v2:
> - fixed a few bugs in the core and driver implementations
>
> Changes since v1:
> - unified the way of defining ECC and free bytes
> - fixed a few bugs in some ->ecc()/->free() implementations
> - added new helpers to ease ECC and free bytes manipulation
> - separated driver changes in different commits to ease review
> - dropped already applied patches
>
> *** BLURB HERE ***
>
> Boris Brezillon (52):
> mtd: kill the ecclayout->oobavail field
> mtd: create an mtd_oobavail() helper and make use of it
> mtd: mtdswap: remove useless if (!mtd->ecclayout) test
> mtd: nand: simplify nand_bch_init() usage
> mtd: add mtd_ooblayout_xxx() helper functions
> mtd: use mtd_ooblayout_xxx() helpers where appropriate
> mtd: nand: core: use mtd_ooblayout_xxx() helpers where appropriate
> mtd: nand: atmel: use mtd_ooblayout_xxx() helpers where appropriate
> mtd: nand: fsl_ifc: use mtd_ooblayout_xxx() helpers where appropriate
> mtd: nand: gpmi: use mtd_ooblayout_xxx() helpers where appropriate
> mtd: nand: lpc32xx: use mtd_ooblayout_xxx() helpers where appropriate
> mtd: nand: omap2: use mtd_ooblayout_xxx() helpers where appropriate
> mtd: onenand: use mtd_ooblayout_xxx() helpers where appropriate
> mtd: add mtd_set_ecclayout() helper function
> mtd: use mtd_set_ecclayout() where appropriate
> mtd: nand: use mtd_set_ecclayout() where appropriate
> mtd: onenand: use mtd_set_ecclayout() where appropriate
> mtd: docg3: use mtd_set_ecclayout() where appropriate
> mtd: create an mtd_ooblayout_ops struct to ease ECC layout definition
> mtd: docg3: switch to mtd_ooblayout_ops
> mtd: nand: implement the default mtd_ooblayout_ops
> mtd: nand: bch: switch to mtd_ooblayout_ops
> mtd: nand: sharpsl: switch to mtd_ooblayout_ops
> mtd: nand: jz4740: switch to mtd_ooblayout_ops
> mtd: nand: atmel: switch to mtd_ooblayout_ops
> mtd: nand: bf5xx: switch to mtd_ooblayout_ops
> mtd: nand: brcm: switch to mtd_ooblayout_ops
> mtd: nand: cafe: switch to mtd_ooblayout_ops
> mtd: nand: davinci: switch to mtd_ooblayout_ops
> mtd: nand: denali: switch to mtd_ooblayout_ops
> mtd: nand: diskonchip: switch to mtd_ooblayout_ops
> mtd: nand: docg4: switch to mtd_ooblayout_ops
> mtd: nand: fsl_elbc: switch to mtd_ooblayout_ops
> mtd: nand: fsl_ifc: switch to mtd_ooblayout_ops
> mtd: nand: fsmc: switch to mtd_ooblayout_ops
> mtd: nand: fsmc: get rid of the fsmc_nand_eccplace struct
> mtd: nand: gpmi: switch to mtd_ooblayout_ops
> mtd: nand: hisi504: switch to mtd_ooblayout_ops
> mtd: nand: jz4780: switch to mtd_ooblayout_ops
> mtd: nand: lpc32xx: switch to mtd_ooblayout_ops
> mtd: nand: mxc: switch to mtd_ooblayout_ops
> mtd: nand: omap2: switch to mtd_ooblayout_ops
> mtd: nand: pxa3xx: switch to mtd_ooblayout_ops
> mtd: nand: s3c2410: switch to mtd_ooblayout_ops
> mtd: nand: sh_flctl: switch to mtd_ooblayout_ops
> mtd: nand: sm_common: switch to mtd_ooblayout_ops
> mtd: nand: sunxi: switch to mtd_ooblayout_ops
> mtd: nand: vf610: switch to mtd_ooblayout_ops
> mtd: onenand: switch to mtd_ooblayout_ops
> staging: mt29f_spinand: switch to mtd_ooblayout_ops
> mtd: nand: kill the ecc->layout field
> mtd: kill the nand_ecclayout struct
>
> arch/arm/mach-pxa/spitz.c | 55 +++-
> arch/mips/include/asm/mach-jz4740/jz4740_nand.h | 2 +-
> arch/mips/jz4740/board-qi_lb60.c | 87 +++---
> drivers/mtd/devices/docg3.c | 51 +++-
> drivers/mtd/mtdchar.c | 123 ++++++--
> drivers/mtd/mtdconcat.c | 2 +-
> drivers/mtd/mtdcore.c | 358 ++++++++++++++++++++++++
> drivers/mtd/mtdpart.c | 28 +-
> drivers/mtd/mtdswap.c | 24 +-
> drivers/mtd/nand/atmel_nand.c | 130 ++++-----
> drivers/mtd/nand/bf5xx_nand.c | 51 ++--
> drivers/mtd/nand/brcmnand/brcmnand.c | 262 ++++++++++-------
> drivers/mtd/nand/cafe_nand.c | 45 ++-
> drivers/mtd/nand/davinci_nand.c | 118 +++-----
> drivers/mtd/nand/denali.c | 51 +++-
> drivers/mtd/nand/diskonchip.c | 60 +++-
> drivers/mtd/nand/docg4.c | 34 ++-
> drivers/mtd/nand/fsl_elbc_nand.c | 83 +++---
> drivers/mtd/nand/fsl_ifc_nand.c | 245 +++++-----------
> drivers/mtd/nand/fsmc_nand.c | 322 ++++++---------------
> drivers/mtd/nand/gpmi-nand/gpmi-nand.c | 61 ++--
> drivers/mtd/nand/hisi504_nand.c | 27 +-
> drivers/mtd/nand/jz4740_nand.c | 2 +-
> drivers/mtd/nand/jz4780_nand.c | 19 +-
> drivers/mtd/nand/lpc32xx_mlc.c | 50 ++--
> drivers/mtd/nand/lpc32xx_slc.c | 58 +++-
> drivers/mtd/nand/mxc_nand.c | 212 +++++++-------
> drivers/mtd/nand/nand_base.c | 344 ++++++++++++-----------
> drivers/mtd/nand/nand_bch.c | 46 ++-
> drivers/mtd/nand/omap2.c | 241 +++++++++-------
> drivers/mtd/nand/pxa3xx_nand.c | 104 ++++---
> drivers/mtd/nand/s3c2410.c | 32 ++-
> drivers/mtd/nand/sh_flctl.c | 87 ++++--
> drivers/mtd/nand/sharpsl.c | 2 +-
> drivers/mtd/nand/sm_common.c | 93 ++++--
> drivers/mtd/nand/sunxi_nand.c | 114 ++++----
> drivers/mtd/nand/vf610_nfc.c | 34 +--
> drivers/mtd/onenand/onenand_base.c | 262 ++++++++---------
> drivers/mtd/tests/oobtest.c | 49 ++--
> drivers/staging/mt29f_spinand/mt29f_spinand.c | 49 ++--
> fs/jffs2/wbuf.c | 6 +-
> include/linux/mtd/fsmc.h | 18 --
> include/linux/mtd/mtd.h | 69 ++++-
> include/linux/mtd/nand.h | 5 +-
> include/linux/mtd/nand_bch.h | 8 +-
> include/linux/mtd/onenand.h | 2 -
> include/linux/mtd/sharpsl.h | 2 +-
> include/uapi/mtd/mtd-abi.h | 2 +-
> 48 files changed, 2375 insertions(+), 1754 deletions(-)