]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
mtd: Add driver for concatenating devices
authorAmit Kumar Mahapatra <amit.kumar-mahapatra@amd.com>
Wed, 4 Feb 2026 08:32:18 +0000 (09:32 +0100)
committerMiquel Raynal <miquel.raynal@bootlin.com>
Wed, 25 Feb 2026 16:34:20 +0000 (17:34 +0100)
commit43db6366fc2de02050e66389f5628d3fdc9af10a
treea39707b0ebb0aa41152ee7b3170cf6326a5e5199
parent59509da0cb51dc48e4edc57d7d3ef1d424c58fc9
mtd: Add driver for concatenating devices

Introducing CONFIG_MTD_VIRT_CONCAT to separate the legacy flow from the new
approach, where only the concatenated partition is registered as an MTD
device, while the individual partitions that form it are not registered
independently, as they are typically not required by the user.
CONFIG_MTD_VIRT_CONCAT is a boolean configuration option that depends on
CONFIG_MTD_PARTITIONED_MASTER. When enabled, it allows flash nodes to be
exposed as individual MTD devices along with the other partitions.

The solution focuses on fixed-partitions description only as it depends on
device boundaries. It supports multiple sets of concatenated devices, each
comprising two or more partitions.

    flash@0 {
            reg = <0>;
            partitions {
                    compatible = "fixed-partitions";

                    part0@0 {
                            part-concat-next = <&flash0_part1>;
                            label = "part0_0";
                            reg = <0x0 0x800000>;
                    };

                    flash0_part1: part1@800000 {
                            label = "part0_1";
                            reg = <800000 0x800000>;
                    };

                    part2@1000000 {
                            part-concat-next = <&flash1_part0>;
                            label = "part0_2";
                            reg = <0x800000 0x800000>;
                    };
            };
    };

    flash@1 {
            reg = <1>;
            partitions {
                    compatible = "fixed-partitions";

                    flash1_part0: part1@0 {
                            label = "part1_0";
                            reg = <0x0 0x800000>;
                    };

                    part1@800000 {
                            label = "part1_1";
                            reg = <0x800000 0x800000>;
                    };
            };
    };

The partitions that gets created are

flash@0
part0_0-part0_1-concat
flash@1
part1_1
part0_2-part1_0-concat

Suggested-by: Bernhard Frauendienst <kernel@nospam.obeliks.de>
Suggested-by: Miquel Raynal <miquel.raynal@bootlin.com>
Signed-off-by: Amit Kumar Mahapatra <amit.kumar-mahapatra@amd.com>
Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
drivers/mtd/Kconfig
drivers/mtd/Makefile
drivers/mtd/mtd_virt_concat.c [new file with mode: 0644]
drivers/mtd/mtdcore.c
drivers/mtd/mtdpart.c
include/linux/mtd/concat.h