linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Boris Brezillon <boris.brezillon@free-electrons.com>
To: David Woodhouse <dwmw2@infradead.org>,
	Brian Norris <computersforpeace@gmail.com>,
	linux-mtd@lists.infradead.org
Cc: Daniel Mack <daniel@zonque.org>,
	Haojian Zhuang <haojian.zhuang@gmail.com>,
	Robert Jarzmik <robert.jarzmik@free.fr>,
	Kukjin Kim <kgene@kernel.org>,
	Krzysztof Kozlowski <k.kozlowski@samsung.com>,
	linux-samsung-soc@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	Ralf Baechle <ralf@linux-mips.org>,
	linux-mips@linux-mips.org,
	Nicolas Ferre <nicolas.ferre@atmel.com>,
	Jean-Christophe Plagniol-Villard <plagnioj@jcrosoft.com>,
	Alexandre Belloni <alexandre.belloni@free-electrons.com>,
	Wenyou Yang <wenyou.yang@atmel.com>,
	Josh Wu <rainyfeeling@outlook.com>,
	Ezequiel Garcia <ezequiel.garcia@free-electrons.com>,
	Maxime Ripard <maxime.ripard@free-electrons.com>,
	Chen-Yu Tsai <wens@csie.org>,
	linux-sunxi@googlegroups.com, Stefan Agner <stefan@agner.ch>,
	Kyungmin Park <kyungmin.park@samsung.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	devel@driverdev.osuosl.org, linux-kernel@vger.kernel.org,
	punnaiah choudary kalluri <punnaia@xilinx.com>,
	Priit Laes <plaes@plaes.org>, Kamal Dasu <kdasu.kdev@gmail.com>,
	bcm-kernel-feedback-list@broadcom.com, linux-api@vger.kernel.org,
	Boris Brezillon <boris.brezillon@free-electrons.com>
Subject: [PATCH v3 00/52] mtd: rework ECC layout definition
Date: Fri, 26 Feb 2016 01:57:08 +0100	[thread overview]
Message-ID: <1456448280-27788-1-git-send-email-boris.brezillon@free-electrons.com> (raw)

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.

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

-- 
2.1.4

             reply	other threads:[~2016-02-26  0:58 UTC|newest]

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

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=1456448280-27788-1-git-send-email-boris.brezillon@free-electrons.com \
    --to=boris.brezillon@free-electrons.com \
    --cc=alexandre.belloni@free-electrons.com \
    --cc=bcm-kernel-feedback-list@broadcom.com \
    --cc=computersforpeace@gmail.com \
    --cc=daniel@zonque.org \
    --cc=devel@driverdev.osuosl.org \
    --cc=dwmw2@infradead.org \
    --cc=ezequiel.garcia@free-electrons.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=haojian.zhuang@gmail.com \
    --cc=k.kozlowski@samsung.com \
    --cc=kdasu.kdev@gmail.com \
    --cc=kgene@kernel.org \
    --cc=kyungmin.park@samsung.com \
    --cc=linux-api@vger.kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mips@linux-mips.org \
    --cc=linux-mtd@lists.infradead.org \
    --cc=linux-samsung-soc@vger.kernel.org \
    --cc=linux-sunxi@googlegroups.com \
    --cc=maxime.ripard@free-electrons.com \
    --cc=nicolas.ferre@atmel.com \
    --cc=plaes@plaes.org \
    --cc=plagnioj@jcrosoft.com \
    --cc=punnaia@xilinx.com \
    --cc=rainyfeeling@outlook.com \
    --cc=ralf@linux-mips.org \
    --cc=robert.jarzmik@free.fr \
    --cc=stefan@agner.ch \
    --cc=wens@csie.org \
    --cc=wenyou.yang@atmel.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).