From patchwork Thu Dec 16 11:16:26 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Miquel Raynal X-Patchwork-Id: 1569076 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=P2j+jojz; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:e::133; helo=bombadil.infradead.org; envelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4JF8zG5Hccz9s3q for ; Thu, 16 Dec 2021 22:29:46 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-Id:Date:Subject:Cc :To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=eN5Qwb+pztIhTGlZIt/bwPiPpR7d7hznIcf7MGbgKAw=; b=P2j+jojzwMD1kO e/Do5YKBkJrhnskl+BUEFB+8M5KT/lKhmA+WjY4WQMbx5+cMRduQwG/xnkW9QuLvCvTQJIIISdAYi R9mXo0S40690EPnehj5ZRTqCIFTfWGQQYZQLWnqQErqnjihNJ6oBv3gJNVVeJV6vpLd5JPbrAj8eI TgZibyt7ITu3c3EvNfSUBIO7pvWWLzec/9Iie+H9w0TilkA78SjqNoHAocuPzbJ+PH2LDe4Y5V5Ku 2f5XrHUaT303xHZryWwi3CIQOVxN0oxwA1h4bI1GmVJT33sNrP2Q/y+UohFa6gy1aL0gcV1FunUrn yHkBV1YhEZTl4OznoTwg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mxowa-005Bsh-Ao; Thu, 16 Dec 2021 11:29:04 +0000 Received: from relay4-d.mail.gandi.net ([217.70.183.196]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mxoku-0056jP-Uq for linux-mtd@lists.infradead.org; Thu, 16 Dec 2021 11:17:03 +0000 Received: (Authenticated sender: miquel.raynal@bootlin.com) by relay4-d.mail.gandi.net (Postfix) with ESMTPSA id ADFC5E0014; Thu, 16 Dec 2021 11:16:54 +0000 (UTC) From: Miquel Raynal To: Mark Brown , , Richard Weinberger , Vignesh Raghavendra , Tudor Ambarus , Pratyush Yadav , Michael Walle , , Rob Herring , Cc: Julien Su , Jaime Liao , Thomas Petazzoni , Miquel Raynal Subject: [PATCH v6 00/28] External ECC engines & Macronix support Date: Thu, 16 Dec 2021 12:16:26 +0100 Message-Id: <20211216111654.238086-1-miquel.raynal@bootlin.com> X-Mailer: git-send-email 2.27.0 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211216_031701_346643_D9D55006 X-CRM114-Status: GOOD ( 26.08 ) X-Spam-Score: -0.7 (/) X-Spam-Report: Spam detection software, running on the system "bombadil.infradead.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: Hello all, Here is a new iteration for this big series, this time I am reincluding the initial binding changes because they changed very slightly and at least it gives reviewers a better understanding of the ent [...] Content analysis details: (-0.7 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 0.0 RCVD_IN_MSPIKE_H3 RBL: Good reputation (+3) [217.70.183.196 listed in wl.mailspike.net] -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at https://www.dnswl.org/, low trust [217.70.183.196 listed in list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 0.0 RCVD_IN_MSPIKE_WL Mailspike good senders X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Hello all, Here is a new iteration for this big series, this time I am reincluding the initial binding changes because they changed very slightly and at least it gives reviewers a better understanding of the entire work again. Once I'll get Rob's ack on the final DT change I will apply (in a topic branch) all the patches until "mtd: nand: ecc: Provide a helper to retrieve a pipelined engine device", which brings everything that is needed to support external engines, as well as the Macronix example. I will need further acknowledgments for the second half which brings support for pipelined engines (even though I hope we are close to an agreement now). Cheers, Miquèl Changes in v6: * Re-include the first patches because a few things have changed in the bindings. These are only style changes as Rob asked to group every property above or below the description field, which I applied to all the binding commits, but without any further update. * Created a spi-mem capabilities structure. Put that one in the spi-mem ops strucure and ensured that all the controllers provided one. * Created a default "no-caps" empty instance that controller drivers can point to by default. * Dropped the spi_mem_generic_defaults_op() intermediate helper entirely (not needed anymore). Changes in v5: * Moved a helper in the core as it seems that it will be useful for other ECC engines as well (Xiangsheng Hou for Mediatek will need it). * Changed the parameters of the spi_mem_generic_supports_op() function in order to take a structure as input instead of a list of arguments, which will be much easier to complement in the future if ever needed. Changes in v4: * The first half of the series has been left aside (all the binding changes + the external mode in the Macronix driver), now let's focus on the pipelined mode. * Added the ecc_en spi_mem_op structure parameter in a dedicated commit. * Introduced a new helper for supporting generically the supported ops. * Used this new helper in the macronix driver. * By default all the other drivers would refuse a spi_mem_op with ecc_en enabled. Changes in v3: * Added Mark's R-by. * Added a commit changing the initialization order between the dirmaps and the ECC engine so that the core might now if we are using a pipelined engine or not. * Stopped creating additional dirmaps with ECC if the engine is not a pipelined engine. * Solved the kernel test robot reports. In particular, I added a dependency on MTD_NAND_ECC to Macronix SPI controller driver. * Added a patch to clean the NAND controller yaml file before moving some bits to nand-chip.yaml. This addresses the comments made by Rob about the useless allOf's. * Used platform_get_irq_byname_optional() in order to avoid useless warnings when there is no IRQ. 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 (27): 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-controller: Harmonize the property types 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: ecc: Provide a helper to retrieve a pilelined engine device mtd: nand: mxic-ecc: Support SPI pipelined mode mtd: spinand: Delay a little bit the dirmap creation spi: spi-mem: Fix a DTR related check in spi_mem_dtr_supports_op() spi: spi-mem: Introduce a capability structure spi: spi-mem: Fill the spi-mem controller capabilities of all the drivers spi: spi-mem: Kill the spi_mem_dtr_supports_op() helper spi: spi-mem: Add an ecc_en parameter to the spi_mem_op structure 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 | 70 ++ .../bindings/mtd/nand-controller.yaml | 72 +- .../devicetree/bindings/mtd/spi-nand.txt | 5 - .../devicetree/bindings/mtd/spi-nand.yaml | 27 + .../bindings/spi/mxicy,mx25f0a-spi.yaml | 65 ++ .../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 | 871 ++++++++++++++++++ drivers/mtd/nand/ecc.c | 119 +++ drivers/mtd/nand/spi/core.c | 51 +- drivers/mtd/nand/spi/macronix.c | 2 +- drivers/spi/Kconfig | 2 +- drivers/spi/atmel-quadspi.c | 3 +- drivers/spi/spi-bcm-qspi.c | 1 + drivers/spi/spi-cadence-quadspi.c | 10 +- drivers/spi/spi-dw-core.c | 1 + drivers/spi/spi-fsl-qspi.c | 1 + drivers/spi/spi-hisi-sfc-v3xx.c | 1 + drivers/spi/spi-mem.c | 33 +- drivers/spi/spi-mtk-nor.c | 3 +- drivers/spi/spi-mxic.c | 340 +++++-- drivers/spi/spi-npcm-fiu.c | 1 + drivers/spi/spi-nxp-fspi.c | 1 + drivers/spi/spi-rockchip-sfc.c | 1 + drivers/spi/spi-rpc-if.c | 1 + drivers/spi/spi-stm32-qspi.c | 1 + drivers/spi/spi-ti-qspi.c | 1 + drivers/spi/spi-zynq-qspi.c | 1 + drivers/spi/spi-zynqmp-gqspi.c | 1 + drivers/spi/spi.c | 3 + include/linux/mtd/nand-ecc-mxic.h | 49 + include/linux/mtd/nand.h | 34 + include/linux/mtd/spinand.h | 2 + include/linux/spi/spi-mem.h | 27 +- 38 files changed, 1727 insertions(+), 204 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