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