On Mon, Nov 25, 2019 at 8:15 AM Miquel Raynal <miquel.raynal@xxxxxxxxxxx> wrote: > > 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". Then it would be good to think about how that should look. Maybe there's overlap or maybe not. > > 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/? It's a single new property rather than a whole binding for a virtual device. It's a minimal change to the DT. It would work with existing bootloaders (and other OSs and older kernels) without change except for the one concatenated partition. > 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/? I'd prefer to not have virtual devices without good reason. > From a pure conceptual point of view, > is it really different than 3/? > > > Thanks, > Miquèl