mbox series

[v2,00/20] External ECC engines & Macronix support

Message ID 20211126113924.310459-1-miquel.raynal@bootlin.com (mailing list archive)
Headers show
Series External ECC engines & Macronix support | expand

Message

Miquel Raynal Nov. 26, 2021, 11:39 a.m. UTC
Hello all,

This series is now stable and brings support for external/modular ECC
engines, and let SPI controller using the ECC framework.

As a first example, Macronix ECC engine can be used as an
external engine (takes the data, proceeds to the calculations, writes
back the ECC bytes) or as a pipelined engine doing on-the-fly
calculations (which is very common in the raw NAND world).

In the device tree, the ECC engine should be described as a separated DT
node. Then:
* external case: the flash node should provide a nand-ecc-engine
  property pointing to the ECC engine node.
* pipelined case: the flash node should provide a nand-ecc-engine
  property pointing to the SPI controller, itself with another
  nand-ecc-engine property pointing at the ECC engine node.

This series comes with a bunch of improvements on the binding side as
well.

Cheers,
Miquèl

Changes in v2:
* Fixed the bindings and added Rob's acks when relevant.
* Added locking in the ECC engine driver.
* Brought more changes in the core in order to bring the ECC information
  into the spi_mem_op structure with the idea of avoiding any races
  between parallel calls on the same engine.
* Reorganized the ECC driver entirely in order to have a per-engine mxic
  structure plus a per-NAND context. This lead to a number of changes
  internally which cannot all be listed.

Changes since the RFC:
* Rebased on top of v5.15-rc1.
* Fixed the dirmap configuration.
* Added the various tags received.
* Fixed the bindings as reported by the robots.
* Fixed the return value of the helper counting bitflips.
* Included a fix from Jaime Liao in the external pattern logic.
* Added the yaml conversion of Macronix SPI controller description.
* Added the yaml conversion of the SPI-NAND description.
* Created a nand-chip.yaml file to share properties between SPI-NAND and
  raw NAND.

Mason Yang (1):
  mtd: spinand: macronix: Use random program load

Miquel Raynal (19):
  dt-bindings: mtd: nand-controller: Fix the reg property description
  dt-bindings: mtd: nand-controller: Fix a comment in the examples
  dt-bindings: mtd: nand-chip: Create a NAND chip description
  dt-bindings: mtd: spi-nand: Convert spi-nand description file to yaml
  dt-bindings: vendor-prefixes: Clarify Macronix prefix
  dt-bindings: spi: mxic: The interrupt property is not mandatory
  dt-bindings: spi: mxic: Convert to yaml
  dt-bindings: spi: mxic: Document the nand-ecc-engine property
  dt-bindings: mtd: Describe Macronix NAND ECC engine
  mtd: nand: ecc: Add infrastructure to support hardware engines
  mtd: nand: Add a new helper to retrieve the ECC context
  mtd: nand: mxic-ecc: Add Macronix external ECC engine support
  mtd: nand: mxic-ecc: Support SPI pipelined mode
  mtd: spinand: Create direct mapping descriptors for ECC operations
  spi: mxic: Fix the transmit path
  spi: mxic: Create a helper to configure the controller before an
    operation
  spi: mxic: Create a helper to ease the start of an operation
  spi: mxic: Add support for direct mapping
  spi: mxic: Add support for pipelined ECC operations

 .../bindings/mtd/mxicy,nand-ecc-engine.yaml   |  77 ++
 .../devicetree/bindings/mtd/nand-chip.yaml    |  71 ++
 .../bindings/mtd/nand-controller.yaml         |  57 +-
 .../devicetree/bindings/mtd/spi-nand.txt      |   5 -
 .../devicetree/bindings/mtd/spi-nand.yaml     |  27 +
 .../bindings/spi/mxicy,mx25f0a-spi.yaml       |  66 ++
 .../devicetree/bindings/spi/spi-mxic.txt      |  34 -
 .../devicetree/bindings/vendor-prefixes.yaml  |   3 +
 drivers/mtd/nand/Kconfig                      |   6 +
 drivers/mtd/nand/Makefile                     |   1 +
 drivers/mtd/nand/core.c                       |  10 +-
 drivers/mtd/nand/ecc-mxic.c                   | 901 ++++++++++++++++++
 drivers/mtd/nand/ecc.c                        |  88 ++
 drivers/mtd/nand/spi/core.c                   |  28 +-
 drivers/mtd/nand/spi/macronix.c               |   2 +-
 drivers/spi/spi-mxic.c                        | 326 ++++++-
 include/linux/mtd/nand-ecc-mxic.h             |  50 +
 include/linux/mtd/nand.h                      |  33 +
 include/linux/mtd/spinand.h                   |   2 +
 include/linux/spi/spi-mem.h                   |   3 +
 20 files changed, 1642 insertions(+), 148 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/mtd/mxicy,nand-ecc-engine.yaml
 create mode 100644 Documentation/devicetree/bindings/mtd/nand-chip.yaml
 delete mode 100644 Documentation/devicetree/bindings/mtd/spi-nand.txt
 create mode 100644 Documentation/devicetree/bindings/mtd/spi-nand.yaml
 create mode 100644 Documentation/devicetree/bindings/spi/mxicy,mx25f0a-spi.yaml
 delete mode 100644 Documentation/devicetree/bindings/spi/spi-mxic.txt
 create mode 100644 drivers/mtd/nand/ecc-mxic.c
 create mode 100644 include/linux/mtd/nand-ecc-mxic.h

Comments

Mark Brown Nov. 26, 2021, 1:37 p.m. UTC | #1
On Fri, Nov 26, 2021 at 12:39:04PM +0100, Miquel Raynal wrote:

> As a first example, Macronix ECC engine can be used as an
> external engine (takes the data, proceeds to the calculations, writes
> back the ECC bytes) or as a pipelined engine doing on-the-fly
> calculations (which is very common in the raw NAND world).

The SPI bits of this look fine (most of the smarts are in the MTD
code!), what's the plan for getting this merged?
Miquel Raynal Nov. 26, 2021, 2:10 p.m. UTC | #2
Hi Mark,

broonie@kernel.org wrote on Fri, 26 Nov 2021 13:37:18 +0000:

> On Fri, Nov 26, 2021 at 12:39:04PM +0100, Miquel Raynal wrote:
> 
> > As a first example, Macronix ECC engine can be used as an
> > external engine (takes the data, proceeds to the calculations, writes
> > back the ECC bytes) or as a pipelined engine doing on-the-fly
> > calculations (which is very common in the raw NAND world).  
> 
> The SPI bits of this look fine (most of the smarts are in the MTD
> code!), what's the plan for getting this merged?

Great! Thanks for the feedback.

If you acknowledge the SPI bits I believe I can carry the entire series
through the MTD tree. If you fear conflicts and need an immutable tag I
can also do that.

Thanks,
Miquèl
Mark Brown Nov. 26, 2021, 2:13 p.m. UTC | #3
On Fri, Nov 26, 2021 at 03:10:59PM +0100, Miquel Raynal wrote:

> If you acknowledge the SPI bits I believe I can carry the entire series
> through the MTD tree. If you fear conflicts and need an immutable tag I
> can also do that.

It'd be good to have the tag just in case, there's generally a lot of
work in this area.

Reviewed-by: Mark Brown <broonie@kernel.org>
Miquel Raynal Nov. 29, 2021, 9:50 a.m. UTC | #4
Hi Mark,

broonie@kernel.org wrote on Fri, 26 Nov 2021 14:13:34 +0000:

> On Fri, Nov 26, 2021 at 03:10:59PM +0100, Miquel Raynal wrote:
> 
> > If you acknowledge the SPI bits I believe I can carry the entire series
> > through the MTD tree. If you fear conflicts and need an immutable tag I
> > can also do that.  
> 
> It'd be good to have the tag just in case, there's generally a lot of
> work in this area.

Sure.

> Reviewed-by: Mark Brown <broonie@kernel.org>

I'll need to send a v3, shall I add this tag to all the spi and spi binding changes?

Thanks,
Miquèl