Hi Rob, Rob Herring <robh@xxxxxxxxxx> wrote on Mon, 18 Nov 2019 16:13:41 -0600: > On Wed, Nov 13, 2019 at 06:15:04PM +0100, Miquel Raynal wrote: > > From: Bernhard Frauendienst <kernel@xxxxxxxxxxxxxxxxx> > > > > The main use case to concatenate MTD devices is probably SPI-NOR > > flashes where the number of address bits is limited to 24, which can > > access a range of 16MiB. Board manufacturers might want to double the > > SPI storage size by adding a second flash asserted thanks to a second > > chip selects which enhances the addressing capabilities to 25 bits, > > 32MiB. Having two devices for twice the size is great but without more > > glue, we cannot define partition boundaries spread across the two > > devices. This is the gap mtd-concat intends to address. > > > > There are two options to describe concatenated devices: > > 1/ One flash chip is described in the DT with two CS; > > 2/ Two flash chips are described in the DT with one CS each, a virtual > > device is also created to describe the concatenation. > > > > Solution 1/ presents at least 3 issues: > > * The hardware description is abused; > > * The concatenation only works for SPI devices (while it could be > > helpful for any MTD); > > * It would require a lot of rework in the SPI core as most of the > > logic assumes there is and there always will be only one CS per > > chip. > > This seems ok if all the devices are identical. This is not an option for Mark and I agree with him as we are faking the reality: the two devices we want to virtually concatenate may be two physically different devices. Binding them as one is lying. > > Solution 2/ also has caveats: > > * The virtual device has no hardware reality; > > * Possible optimizations at the hardware level will be hard to enable > > efficiently (ie. a common direct mapping abstracted by a SPI > > memories oriented controller). > > Something like this may be necessary if data is interleaved rather than > concatinated. This is something that is gonna happen too, it is called "dual parallel". > Solution 3 > Describe each device and partition separately and add link(s) from one > partition to the next > > flash0 { > partitions { > compatible = "fixed-partitions"; > concat-partition = <&flash1_partitions>; > ... > }; > }; > > flash1 { > flash1_partition: partitions { > compatible = "fixed-partitions"; > ... > }; > }; I honestly don't see how this is different as solution 2/? In one case we describe the partition concatenation in one subnode as a "link", in the other we create a separate node to describe the link. Are you strongly opposed as solution 2/? From a pure conceptual point of view, is it really different than 3/? Thanks, Miquèl