This patch series is the next version of [1]. After a series of discussions on [1], we have decided to: 1/ Send separate patch series for stacked and parallel support, starting with the stacked series first. 2/ Add stacked support by enhancing the existing mtd-concat driver. To add stacked support via mtd-concat, MTD device concatenation needs to be made more generic, and I found [2] to be a suitable approach for this. As background, a few years ago, Bernhard Frauendienst initiated an effort [3] to achieve the same, which was later adapted by Miquel [2] 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 [4][5][6], describing the two flash devices as one. Corresponding SPI core changes to support these bindings were later added [7]. 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 [8] to initiate discussions on adapting the DT bindings as suggested by Miquel in [2]. Following that, I am now submitting this patch series that updates the virtual concat driver referenced in [2] 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/all/20231125092137.2948-1-amit.kumar-mahapatra@xxxxxxx/ [2] https://lore.kernel.org/linux-mtd/20191127105522.31445-1-miquel.raynal@xxxxxxxxxxx/ [3] https://lwn.net/ml/linux-kernel/20180907173515.19990-1-kernel@xxxxxxxxxxxxxxxxx/ [4] https://github.com/torvalds/linux/commit/f89504300e94524d5d5846ff8b728592ac72cec4 [5] https://github.com/torvalds/linux/commit/eba5368503b4291db7819512600fa014ea17c5a8 [6] https://github.com/torvalds/linux/commit/e2edd1b64f1c79e8abda365149ed62a2a9a494b4 [7]https://github.com/torvalds/linux/commit/4d8ff6b0991d5e86b17b235fc46ec62e9195cb9b [8] https://lore.kernel.org/all/20241026075347.580858-1-amit.kumar-mahapatra@xxxxxxx/ --- BRANCH: for-next 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@xxxxxxxxx> 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 | 17 ++ drivers/mtd/Kconfig | 8 + drivers/mtd/Makefile | 1 + drivers/mtd/mtd_virt_concat.c | 254 ++++++++++++++++++ drivers/mtd/mtdconcat.c | 12 - drivers/mtd/mtdcore.c | 7 + drivers/mtd/mtdpart.c | 6 + include/linux/mtd/concat.h | 36 +++ 8 files changed, 329 insertions(+), 12 deletions(-) create mode 100644 drivers/mtd/mtd_virt_concat.c -- 2.34.1