Hello Christian, On 2/4/20 2:06 PM, Christian Eggers wrote: > Dear Ahmad, > > Am Montag, 3. Februar 2020, 18:47:29 CET schrieb Ahmad Fatoum: >> Fortunately, I was mistaken. The upstream bindings says that only objects >> matching "^.*@[0-9a-f]+$" should be considered for nvmem cells. a partitions >> node doesn't match this. So I'd instead suggest this: >> >> nvmem: core: don't consider subnodes not matching binding >> >> The nvmem cell binding applies to objects which match "^.*@[0-9a-f]+$", >> but so far the driver has matched all objects and failed if they didn't >> have the expected properties. >> >> The driver's behavior in this regard precludes future extension of >> EEPROMs by child nodes other than nvmem and clashes with the barebox >> bootloader binding that extends the fixed-partitions MTD binding to >> EEPROMs. >> >> Solve this issue by checking whether the node name contains a @. >> This still matches against node names like partitions@0,0, but this is >> much less likely to cause future collisions. >> >> Signed-off-by: Ahmad Fatoum <[email protected]> >> > > I have a different approach, taken from the Linux MTD sources. Here the DT > partitions are added as NVMEM cells. Is there any conceptual difference > between "MTD partitions" and "NVMEM cells"?
Theoretically, you could have both NVMEM cells and MTD partitions in the same node. There has been a patch introducing this binding[1], but it seems it was abandoned. But even without this, they are different subsystems with different device tree bindings, in-kernel API for accessing and userspace interface and I don't think mixing them is a good idea. > Are you able to bring one/both patches into Linux? I can try posting my patch. I'll wait a bit to see if someone has feedback. I will add you to CC when I send it out. Cheers Ahmad [1]: https://lore.kernel.org/patchwork/patch/765436/ > > Regards > Christian > > From 927f3aa9c4a64802f25ef2f292caa1dc951ce667 Mon Sep 17 00:00:00 2001 > From: Christian Eggers <[email protected]> > Date: Tue, 4 Feb 2020 13:52:36 +0100 > Subject: [PATCH] nvmem: core: Move OF cells to a dedicated dt node > > In 5cfdedb7b9 ("mtd: ofpart: move ofpart partitions to a dedicated dt > node"), mtd introduced the separate "partitions" node as container for > the partitions of a MTD device. > > This commit applies a similar behavior to NVMEM partitions/cells. > > Signed-off-by: Christian Eggers <[email protected]> > --- > drivers/nvmem/core.c | 13 +++++++++++-- > 1 file changed, 11 insertions(+), 2 deletions(-) > > diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c > index 057d1ff87d5d..3e93b82b96bd 100644 > --- a/drivers/nvmem/core.c > +++ b/drivers/nvmem/core.c > @@ -287,7 +287,7 @@ nvmem_find_cell_by_name(struct nvmem_device *nvmem, const > char *cell_id) > > static int nvmem_add_cells_from_of(struct nvmem_device *nvmem) > { > - struct device_node *parent, *child; > + struct device_node *parent, *child, *ofpart_node; > struct device *dev = &nvmem->dev; > struct nvmem_cell *cell; > const __be32 *addr; > @@ -295,7 +295,16 @@ static int nvmem_add_cells_from_of(struct nvmem_device > *nvmem) > > parent = dev->of_node; > > - for_each_child_of_node(parent, child) { > + ofpart_node = of_get_child_by_name(parent, "partitions"); > + if (!ofpart_node) { > + /* Try to parse direct subnodes */ > + ofpart_node = parent; > + } else if (!of_device_is_compatible(ofpart_node, "fixed-partitions")) { > + /* The 'partitions' subnode might be used by another parser */ > + return 0; > + } > + > + for_each_child_of_node(ofpart_node, child) { > addr = of_get_property(child, "reg", &len); > if (!addr || (len < 2 * sizeof(u32))) { > dev_err(dev, "nvmem: invalid reg on %pOF\n", child); > -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | _______________________________________________ barebox mailing list [email protected] http://lists.infradead.org/mailman/listinfo/barebox
