linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v4 00/52] mtd: rework ECC layout definition
@ 2016-03-07  9:46 Boris Brezillon
  2016-03-07  9:46 ` [PATCH v4 01/52] mtd: kill the ecclayout->oobavail field Boris Brezillon
                   ` (52 more replies)
  0 siblings, 53 replies; 55+ messages in thread
From: Boris Brezillon @ 2016-03-07  9:46 UTC (permalink / raw)
  To: linux-arm-kernel

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.

All those changes are available here [1].

Best Regards,

Boris

[1]https://github.com/bbrezillon/linux-0day/tree/nand/ecclayout

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
- added new helpers to ease ECC and free bytes manipulation
- separated driver changes in different commits to ease review
- dropped already applied patches

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                           | 360 +++++++++++++++++++++++
 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                    |  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                        |  34 ++-
 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                 |  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                    | 362 ++++++++++++------------
 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, 2383 insertions(+), 1763 deletions(-)

-- 
2.1.4

^ permalink raw reply	[flat|nested] 55+ messages in thread

end of thread, other threads:[~2016-03-10 19:06 UTC | newest]

Thread overview: 55+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-03-07  9:46 [PATCH v4 00/52] mtd: rework ECC layout definition Boris Brezillon
2016-03-07  9:46 ` [PATCH v4 01/52] mtd: kill the ecclayout->oobavail field Boris Brezillon
2016-03-07  9:46 ` [PATCH v4 02/52] mtd: create an mtd_oobavail() helper and make use of it Boris Brezillon
2016-03-07  9:46 ` [PATCH v4 03/52] mtd: mtdswap: remove useless if (!mtd->ecclayout) test Boris Brezillon
2016-03-07  9:46 ` [PATCH v4 04/52] mtd: nand: simplify nand_bch_init() usage Boris Brezillon
2016-03-07  9:46 ` [PATCH v4 05/52] mtd: add mtd_ooblayout_xxx() helper functions Boris Brezillon
2016-03-07  9:46 ` [PATCH v4 06/52] mtd: use mtd_ooblayout_xxx() helpers where appropriate Boris Brezillon
2016-03-07  9:46 ` [PATCH v4 07/52] mtd: nand: core: " Boris Brezillon
2016-03-07  9:46 ` [PATCH v4 08/52] mtd: nand: atmel: " Boris Brezillon
2016-03-07  9:46 ` [PATCH v4 09/52] mtd: nand: fsl_ifc: " Boris Brezillon
2016-03-07  9:47 ` [PATCH v4 10/52] mtd: nand: gpmi: " Boris Brezillon
2016-03-07  9:47 ` [PATCH v4 11/52] mtd: nand: lpc32xx: " Boris Brezillon
2016-03-07  9:47 ` [PATCH v4 12/52] mtd: nand: omap2: " Boris Brezillon
2016-03-07  9:47 ` [PATCH v4 13/52] mtd: onenand: " Boris Brezillon
2016-03-07  9:47 ` [PATCH v4 14/52] mtd: add mtd_set_ecclayout() helper function Boris Brezillon
2016-03-07  9:47 ` [PATCH v4 15/52] mtd: use mtd_set_ecclayout() where appropriate Boris Brezillon
2016-03-07  9:47 ` [PATCH v4 16/52] mtd: nand: " Boris Brezillon
2016-03-07  9:47 ` [PATCH v4 17/52] mtd: onenand: " Boris Brezillon
2016-03-07  9:47 ` [PATCH v4 18/52] mtd: docg3: " Boris Brezillon
2016-03-07  9:47 ` [PATCH v4 19/52] mtd: create an mtd_ooblayout_ops struct to ease ECC layout definition Boris Brezillon
2016-03-07  9:47 ` [PATCH v4 20/52] mtd: docg3: switch to mtd_ooblayout_ops Boris Brezillon
2016-03-07  9:47 ` [PATCH v4 21/52] mtd: nand: implement the default mtd_ooblayout_ops Boris Brezillon
2016-03-07  9:47 ` [PATCH v4 22/52] mtd: nand: bch: switch to mtd_ooblayout_ops Boris Brezillon
2016-03-07  9:47 ` [PATCH v4 23/52] mtd: nand: sharpsl: " Boris Brezillon
2016-03-07  9:47 ` [PATCH v4 24/52] mtd: nand: jz4740: " Boris Brezillon
2016-03-07  9:47 ` [PATCH v4 25/52] mtd: nand: atmel: " Boris Brezillon
2016-03-07  9:47 ` [PATCH v4 26/52] mtd: nand: bf5xx: " Boris Brezillon
2016-03-07  9:47 ` [PATCH v4 27/52] mtd: nand: brcm: " Boris Brezillon
2016-03-07  9:47 ` [PATCH v4 28/52] mtd: nand: cafe: " Boris Brezillon
2016-03-07  9:47 ` [PATCH v4 29/52] mtd: nand: davinci: " Boris Brezillon
2016-03-07  9:47 ` [PATCH v4 30/52] mtd: nand: denali: " Boris Brezillon
2016-03-07  9:47 ` [PATCH v4 31/52] mtd: nand: diskonchip: " Boris Brezillon
2016-03-07  9:47 ` [PATCH v4 32/52] mtd: nand: docg4: " Boris Brezillon
2016-03-07  9:47 ` [PATCH v4 33/52] mtd: nand: fsl_elbc: " Boris Brezillon
2016-03-07  9:47 ` [PATCH v4 34/52] mtd: nand: fsl_ifc: " Boris Brezillon
2016-03-07  9:47 ` [PATCH v4 35/52] mtd: nand: fsmc: " Boris Brezillon
2016-03-07  9:47 ` [PATCH v4 36/52] mtd: nand: fsmc: get rid of the fsmc_nand_eccplace struct Boris Brezillon
2016-03-07  9:47 ` [PATCH v4 37/52] mtd: nand: gpmi: switch to mtd_ooblayout_ops Boris Brezillon
2016-03-07  9:47 ` [PATCH v4 38/52] mtd: nand: hisi504: " Boris Brezillon
2016-03-07  9:47 ` [PATCH v4 39/52] mtd: nand: jz4780: " Boris Brezillon
2016-03-07  9:47 ` [PATCH v4 40/52] mtd: nand: lpc32xx: " Boris Brezillon
2016-03-07  9:47 ` [PATCH v4 41/52] mtd: nand: mxc: " Boris Brezillon
2016-03-07  9:47 ` [PATCH v4 42/52] mtd: nand: omap2: " Boris Brezillon
2016-03-07  9:47 ` [PATCH v4 43/52] mtd: nand: pxa3xx: " Boris Brezillon
2016-03-07  9:47 ` [PATCH v4 44/52] mtd: nand: s3c2410: " Boris Brezillon
2016-03-07  9:47 ` [PATCH v4 45/52] mtd: nand: sh_flctl: " Boris Brezillon
2016-03-07  9:47 ` [PATCH v4 46/52] mtd: nand: sm_common: " Boris Brezillon
2016-03-07  9:47 ` [PATCH v4 47/52] mtd: nand: sunxi: " Boris Brezillon
2016-03-07  9:47 ` [PATCH v4 48/52] mtd: nand: vf610: " Boris Brezillon
2016-03-07 18:04   ` Stefan Agner
2016-03-07  9:47 ` [PATCH v4 49/52] mtd: onenand: " Boris Brezillon
2016-03-07  9:47 ` [PATCH v4 50/52] staging: mt29f_spinand: " Boris Brezillon
2016-03-07  9:47 ` [PATCH v4 51/52] mtd: nand: kill the ecc->layout field Boris Brezillon
2016-03-07  9:47 ` [PATCH v4 52/52] mtd: kill the nand_ecclayout struct Boris Brezillon
2016-03-10 19:06 ` [PATCH v4 00/52] mtd: rework ECC layout definition Brian Norris

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).