Re: [PATCH v5 00/52] mtd: rework ECC layout definition

From: Boris Brezillon
Date: Wed Mar 30 2016 - 12:21:07 EST


Despite what's said in the subject, this series only contains 50
patches, not 52.

On Wed, 30 Mar 2016 18:14:15 +0200
Boris Brezillon <boris.brezillon@xxxxxxxxxxxxxxxxxx> wrote:

> Hello,
>
> Hopefully the last version of this patchset (but don't be sad, I'm not
> done bothering you with NAND related patches :-)).
>
> If possible, I'd like to have as much Tested/Reviewed/Acked-by tags as
> possible, particularly on the changes done in arch/arm and arch/mips
> (since the last set of commits depends on those changes, I'd like to
> take them in my nand/next branch, even if this imply creating an
> immutable branch for the ARM and MIPS maintainers).
>
> If nobody complains about this version, I'll merge it in 4.7.
>
> Here comes the usual description:
>
> 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.
>
> All those changes are available here [1].
>
> Best Regards,
>
> Boris
>
> [1]https://github.com/bbrezillon/linux-0day/tree/nand/ecclayout
>
> Changes since v4:
> - dropped already applied patches
> - patch the recently merged qcom driver
>
> Changes since v3:
> - fixed two bugs in mtd_ooblayout core implementation
> - use ecc->total instead of (ecc->steps * ecc->bytes) in NAND drivers
>
> 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
>
> Boris Brezillon (50):
> 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: nand: qcom: 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: nand: qcom: 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 | 46 ++-
> drivers/mtd/mtdchar.c | 123 ++++++--
> drivers/mtd/mtdconcat.c | 2 +-
> drivers/mtd/mtdcore.c | 360 ++++++++++++++++++++++++
> drivers/mtd/mtdpart.c | 23 +-
> drivers/mtd/nand/atmel_nand.c | 130 ++++-----
> drivers/mtd/nand/bf5xx_nand.c | 51 ++--
> drivers/mtd/nand/brcmnand/brcmnand.c | 258 ++++++++++-------
> drivers/mtd/nand/cafe_nand.c | 44 ++-
> drivers/mtd/nand/davinci_nand.c | 118 +++-----
> drivers/mtd/nand/denali.c | 50 +++-
> drivers/mtd/nand/diskonchip.c | 60 +++-
> drivers/mtd/nand/docg4.c | 33 ++-
> drivers/mtd/nand/fsl_elbc_nand.c | 83 +++---
> drivers/mtd/nand/fsl_ifc_nand.c | 244 +++++-----------
> drivers/mtd/nand/fsmc_nand.c | 322 ++++++---------------
> drivers/mtd/nand/gpmi-nand/gpmi-nand.c | 61 ++--
> drivers/mtd/nand/hisi504_nand.c | 26 +-
> 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 | 340 +++++++++++-----------
> drivers/mtd/nand/nand_bch.c | 27 +-
> drivers/mtd/nand/omap2.c | 217 ++++++++------
> drivers/mtd/nand/pxa3xx_nand.c | 104 ++++---
> drivers/mtd/nand/qcom_nandc.c | 87 +++---
> 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 | 235 ++++++++--------
> drivers/staging/mt29f_spinand/mt29f_spinand.c | 48 ++--
> include/linux/mtd/fsmc.h | 18 --
> include/linux/mtd/mtd.h | 63 ++++-
> include/linux/mtd/nand.h | 5 +-
> include/linux/mtd/onenand.h | 2 -
> include/linux/mtd/sharpsl.h | 2 +-
> include/uapi/mtd/mtd-abi.h | 2 +-
> 45 files changed, 2340 insertions(+), 1691 deletions(-)
>



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