.../bindings/mtd/partitions/partition.yaml | 20 + drivers/mtd/Kconfig | 10 + drivers/mtd/Makefile | 1 + drivers/mtd/mtd_virt_concat.c | 380 ++++++++++++++++++ drivers/mtd/mtdconcat.c | 12 - drivers/mtd/mtdcore.c | 17 + drivers/mtd/mtdpart.c | 6 + include/linux/mtd/concat.h | 59 +++ 8 files changed, 493 insertions(+), 12 deletions(-) create mode 100644 drivers/mtd/mtd_virt_concat.c
This patch series adds stacked support by enhancing the existing mtd-concat driver to be more generic. As background, a few years ago, Bernhard Frauendienst initiated an effort [2] to achieve the same, which was later adapted by Miquel [1] to introduce stacked mode support. In this approach, partitions to be concatenated were specified using a DT property "part-concat" within the partitions definition, allowing two MTD devices to function as a single larger one in order to be able to define partitions across chip boundaries. However, the bindings were not accepted. As a result, the mtd-concat approach was dropped, and alternative DT bindings were introduced [3][4][5], describing the two flash devices as one. Corresponding SPI core changes to support these bindings were later added [6]. While integrating stacked mode support into SPI-NOR, Tudor provided additional feedback, leading to discussions about updating the existing DT bindings. To address this, I sent an RFC [7] to initiate discussions on adapting the DT bindings as suggested by Miquel in [1]. Following that, I am now submitting this patch series that updates the virtual concat DT bindings and the driver referenced in [1], along with some minor mtdcore changes. Since I have taken ownership of this effort, I have included Bernhard and Miquel under the "Suggested-by" tag. [1] https://lore.kernel.org/linux-mtd/20191127105522.31445-1-miquel.raynal@bootlin.com/ [2] https://lwn.net/ml/linux-kernel/20180907173515.19990-1-kernel@nospam.obeliks.de/ [3] https://github.com/torvalds/linux/commit/f89504300e94524d5d5846ff8b728592ac72cec4 [4] https://github.com/torvalds/linux/commit/eba5368503b4291db7819512600fa014ea17c5a8 [5] https://github.com/torvalds/linux/commit/e2edd1b64f1c79e8abda365149ed62a2a9a494b4 [6]https://github.com/torvalds/linux/commit/4d8ff6b0991d5e86b17b235fc46ec62e9195cb9b [7] https://lore.kernel.org/all/20241026075347.580858-1-amit.kumar-mahapatra@amd.com/ --- BRANCH: spi-nor/next Changes in v14: - Updated 1/3 to address review comments. - Updated 3/3 to add mtd_virt_concat_destroy() API that would remove a concat incase one of the mtd device, which is part of the concat, is removed. Changes in v13: - Updated 1/3 to modify the Device Tree binding to support multiple concatenated devices. - Added Rob's "Suggested-by" tag in 1/3. - Updated 3/3 to define CONFIG_MTD_VIRT_CONCAT as a boolean and depended on CONFIG_MTD_PARTITIONED_MASTER. - Updated 3/3 to remove late_initcall and invoke the API directly from mtdcore instead. - Updated 3/3 to add support for concatenating more than two MTD partitions. - Updated 3/3 to add support for multiple sets of concatenated devices. Changes in v12: - Add stacked mode support throught mtd-concat driver. Changes in v11: - Rebased patch series on top of latest for-next branch. - Added a new patch(1/10) to replace spi->chip_select with spi_get_chipselect() call in tps6594-spi.c. - Added a new patch(2/10) to replace spi->chip_select with spi_get_chipseletc() call in cs35l56_hda_spi.c. - In spi.c initialized unused CS[] to 0xff and spi->cs_index_mask to 0x01 in all flows. - Updated spi_dev_check() to compare the CS of old spi device with the new spi device CS. - Updated cover letter description to add information regarding GPIO CS testing and added Stefen's Tested-by tag in 3/10 patch. Changes in v10: - Rebased patch series on top of latest for-next branch and fixed merge conflicts. Changes in v9: - Updated 1/8 patch description to add an high-level overview of parallel(multi-cs) & stacked design. - Initialized all unused CS to 0xFF. - Moved CS check from spi_add_device() to __spi_add_device(). - Updated __spi_add_device() to check to make sure that multiple logical CS don't map to the same physical CS and same physical CS doesn't map to different logical CS. - Updated 1/8, 5/8 & 7/8 to support arbitrary number of flash devices connected in parallel or stacked mode. - Updated documentation for chip_select. - Added a new spi-nor structure member nor->num_flash to keep track of the number of flashes connected. - Added a new patch in the series 4/8 to move write_enable call just before spi_mem ops call in SPI-NOR. - Added comments in SPI core & SPI-NOR. - Rebased the patch series on top of the latest for-next branch. Changes in v8: - Updated __spi_add_device() and spi_set_cs() to fix spi driver failure with GPIO CS. - Rebased the patch series on top of latest for-next branch and fixed merge conflicts. - Updated cover letter description to add information regarding GPIO CS testing and request Stefan to provide his Tested-by tag for 1/7 patch. - Updated 1/7 patch description. Changes in v7: - Updated spi_dev_check() to avoid failures for spi driver GPIO CS and moved the error message from __spi_add_device() to spi_dev_check(). - Resolved code indentation issue in spi_set_cs(). - In spi_set_cs() call spi_delay_exec( ) once if the controller supports multi cs with both the CS backed by GPIO. - Updated __spi_validate()to add checks for both the GPIO CS. - Replaced cs_index_mask bit mask with SPI_CS_CNT_MAX. - Updated struct spi_controller to represent multi CS capability of the spi controller through a flag bit SPI_CONTROLLER_MULTI_CS instead of a boolen structure member "multi_cs_cap". - Updated 1/7 patch description . Changes in v6: - Rebased on top of latest v6.3-rc1 and fixed merge conflicts in spi-mpc512x-psc.c, sfdp.c, spansion.c files and removed spi-omap-100k.c. - Updated spi_dev_check( ) to reject new devices if any one of the chipselect is used by another device. Changes in v5: - Rebased the patches on top of v6.3-rc1 and fixed the merge conflicts. - Fixed compilation warnings in spi-sh-msiof.c with shmobile_defconfig Changes in v4: - Fixed build error in spi-pl022.c file - reported by Mark. - Fixed build error in spi-sn-f-ospi.c file. - Added Reviewed-by: Serge Semin <fancer.lancer@gmail.com> tag. - Added two more patches to replace spi->chip_select with API calls in mpc832x_rdb.c & cs35l41_hda_spi.c files. Changes in v3: - Rebased the patches on top of https://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi.git for-next - Added a patch to convert spi_nor_otp_region_len(nor) & spi_nor_otp_n_regions(nor) macros into inline functions - Added Reviewed-by & Acked-by tags Changes in v2: - Rebased the patches on top of v6.2-rc1 - Created separate patch to add get & set APIs for spi->chip_select & spi->cs_gpiod, and replaced all spi->chip_select and spi->cs_gpiod references with the API calls. - Created separate patch to add get & set APIs for nor->params. --- Amit Kumar Mahapatra (3): dt-bindings: mtd: Describe MTD partitions concatenation mtd: Move struct mtd_concat definition to header file mtd: Add driver for concatenating devices .../bindings/mtd/partitions/partition.yaml | 20 + drivers/mtd/Kconfig | 10 + drivers/mtd/Makefile | 1 + drivers/mtd/mtd_virt_concat.c | 380 ++++++++++++++++++ drivers/mtd/mtdconcat.c | 12 - drivers/mtd/mtdcore.c | 17 + drivers/mtd/mtdpart.c | 6 + include/linux/mtd/concat.h | 59 +++ 8 files changed, 493 insertions(+), 12 deletions(-) create mode 100644 drivers/mtd/mtd_virt_concat.c -- 2.34.1
On Mon, 23 Jun 2025 16:24:42 +0530, Amit Kumar Mahapatra wrote: > This patch series adds stacked support by enhancing the existing mtd-concat > driver to be more generic. > > As background, a few years ago, Bernhard Frauendienst initiated an effort > [2] to achieve the same, which was later adapted by Miquel [1] to introduce > stacked mode support. In this approach, partitions to be concatenated were > specified using a DT property "part-concat" within the partitions > definition, allowing two MTD devices to function as a single larger one in > order to be able to define partitions across chip boundaries. However, the > bindings were not accepted. As a result, the mtd-concat approach was > dropped, and alternative DT bindings were introduced [3][4][5], describing > the two flash devices as one. Corresponding SPI core changes to support > these bindings were later added [6]. > > [...] Applied to mtd/next, thanks! [1/3] dt-bindings: mtd: Describe MTD partitions concatenation commit: a7c81ac328a6dddf51588ecc7a94f56da34c7875 [2/3] mtd: Move struct mtd_concat definition to header file commit: 08be224e3965dc716460ee62ddf1f30421049bed [3/3] mtd: Add driver for concatenating devices commit: fa47dc8295194a03c9182945805b617b01447ae9 Patche(s) should be available on mtd/linux.git and will be part of the next PR (provided that no robot complains by then). Kind regards, Miquèl
© 2016 - 2025 Red Hat, Inc.