From: Herve Codina <herve.codina@bootlin.com>
To: David Gibson <david@gibson.dropbear.id.au>
Cc: Ayush Singh <ayush@beagleboard.org>,
Krzysztof Kozlowski <krzk@kernel.org>,
Rob Herring <robh@kernel.org>, Andrew Davis <afd@ti.com>,
Wolfram Sang <wsa+renesas@sang-engineering.com>,
Luca Ceresoli <luca.ceresoli@bootlin.com>,
devicetree@vger.kernel.org, Jason Kridner <jkridner@gmail.com>,
Geert Uytterhoeven <geert@linux-m68k.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
devicetree-compiler@vger.kernel.org,
linux-kernel@vger.kernel.org,
Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Subject: Re: Device tree representation of (hotplug) connectors: discussion at ELCE
Date: Tue, 23 Sep 2025 11:48:49 +0200 [thread overview]
Message-ID: <20250923114849.2385736d@bootlin.com> (raw)
In-Reply-To: <aNJVqSpdAJzGliNx@zatzit>
Hi David,
On Tue, 23 Sep 2025 18:09:13 +1000
David Gibson <david@gibson.dropbear.id.au> wrote:
> On Fri, Sep 19, 2025 at 10:47:17AM +0530, Ayush Singh wrote:
> > On 9/19/25 10:22, David Gibson wrote:
> >
> > > On Thu, Sep 18, 2025 at 09:44:09AM +0200, Herve Codina wrote:
> > > > Hi David,
> > > >
> > > > On Thu, 18 Sep 2025 13:16:32 +1000
> > > > David Gibson <david@gibson.dropbear.id.au> wrote:
> > > >
> > > > ...
> > > >
> > > > > > > Thoughts above suggest a different direction, but here's what I was
> > > > > > > thinking before:
> > > > > > >
> > > > > > > base board:
> > > > > > >
> > > > > > > connector {
> > > > > > > /export/ "i2c" &i2c0;
> > > > > > > };
> > > > > > >
> > > > > > > addon:
> > > > > > > eeprom@10 {
> > > > > > > compatible = "foo,eeprom";
> > > > > > > bus-reg = <&i2c 0x10>;
> > > > > > > }
> > > > > > >
> > > > > > > Or, if the addon had multiple i2c devices, maybe something like:
> > > > > > >
> > > > > > > board-i2c {
> > > > > > > compatible = "i2c-simple-bridge";
> > > > > > > bus-ranges = <&i2c 0 0x3ff>; /* Whole addr space */
> > > > > > > eeprom@10 {
> > > > > > > compatible = "foo,eeprom";
> > > > > > > reg = <0x10>;
> > > > > > > }
> > > > > > > widget@20 {
> > > > > > > compatible = "vendor,widget";
> > > > > > > reg = <0x20>;
> > > > > > > }
> > > > > > > }
> > > > > > >
> > > > > > > Writing that, I realise I2C introduces some complications for this.
> > > > > > > Because it has #size-cells = <0>, ranges doesn't really work (without
> > > > > > > listing every single address to be translated). Likewise, because we
> > > > > > > always need the parent bus phandle, we can't use the trick of an empty
> > > > > > > 'ranges' to mean an identity mapping.
> > > > > > >
> > > > > > > We could invent encodings to address those, but given the addon with
> > > > > > > multiple connectors case provides another incentive for a single
> > > > > > > connector to allow adding nodes in multiple (but strictly enumerated)
> > > > > > > places in the base device tree provides a better approach.
> > > > > > and the "place in base device tree" is the goal of the extension bus.
> > > > > >
> > > > > > The strict enumeration of nodes enumerated is done by two means:
> > > > > > - extension busses at connector level
> > > > > > Those extensions are described as connector sub-nodes.
> > > > > > The addon DT can only add nodes in those sub-nodes to describe devices
> > > > > > connected to the relared extension bus.
> > > > > > - export symbols
> > > > > > An addon DT can only use symbols exported to reference symbols outside
> > > > > > the addon DT itself.
> > > > > >
> > > > > > Can I assume that bus extensions we proposed (i2c-bus-extension and
> > > > > > spi-bus-extension) could be a correct solution ?
> > > > > Maybe? I prefer the idea of a universal mechanism, not one that's
> > > > > defined per-bus-type.
> > > > >
> > > > >
> > > > > Also, IIUC the way bus extension operates is a bit different - nodes
> > > > > would be "physically" added under the bus extension node, but treated
> > > > > logically as if they go under the main bus. What I'm proposing here
> > > > > is something at the actualy overlay application layer that allows
> > > > > nodes to be added to different parts of the base device tree - so you
> > > > > could add your i2c device under the main i2c bus.
> > > > I think we should avoid this kind of node dispatching here and there in
> > > > the base DT.
> > > Until I saw Geert's multi-connector case, I would have agreed. That
> > > case makes me thing differently: in order to support that case we
> > > already have to handle adding information in multiple places (under
> > > all of the connectors the addon uses). Given we have to handle that
> > > anyway, I wonder if it makes more sense to lean into that, and allow
> > > updates to multiple (strictly enumerated) places.
> >
> > Well, I don't love this idea. Here are my main qalms about the approach of
> > adding devices directly to the actual i2c/spi etc nodes.
> >
> > 1. In boards with multiple connectors, they sometimes share the same i2c.
> > Now assume that someone decided to connect the same i2c device to both the
> > connectors. If we are using something like bus extension, while the node
> > would be added, it will fail in the registration since you cannot add the
> > same address device a second time. However, if we are adding the device
> > directly to the `main_i2c`, the overlay application will just end up
> > modifying the exact same device node. There is no error, or even a 2nd
> > device node in this case. It is just lost.
> >
> > 2. How well will overlay adding and removing work when the same tree nodes
> > are modified by multiple connectors? I have not looked at the internals of
> > overlay resolution so not sure, but I don't want dynamic addition and
> > removal of devices in independent connectors to somehow become coupled.
>
> Ah, right. To be clear: we absolutely don't want multiple addons
> altering the same nodes. But I think we could do that in ways other
> than putting everything under a connector. This is exactly why I
> think we should think this through as an end-to-end problem, rather
> trying to do it as a tweak to the existing (crap) overlay system.
>
> So, if we're thinking of this as an entirely new way of updating the
> base dt - not "an overlay" - we can decide on the rules to ensure that
> addition and removal is sane. Two obvious ones I think we should
> definitely have are:
>
> a) Addons can only add completely new nodes, never modify existing
> ones. This means that whatever addons are present at runtime,
> every node has a single well defined owner (either base board or
> addon).
In this rule I suppose that "never modify existing ones" should be understood
as "never modify, add or remove properties in existing ones". Because, of course
adding a full node in a existing one is allowed (rule b).
>
> b) Addons can only add nodes in places that are explicitly allowed by
> the connectors they're connecting to.
I fully agree with those both a) and b) rules.
>
> We could consider further rules as well though. For example, we could
> say that i2c devices in an addon shouldn't be added directly under the
> base board's i2c controller, but under a subnode of that i2c
> controller assigned to that connector (which would likely have an
> empty 'ranges' property meaning addresses are mapped without
> translation). Not really sure if that rule has more benefits or
> drawbacks, but it's worth contemplating.
IMHO, no extra rules are needed in DT addon rules to constraint i2c devices
to be added in a connector node, a connector sub-node or an i2c controller
node.
This will be constrained by the connector itself (out of DT addon rules).
I mean, according to rule b), the connector will allow some destination
places. Either it will allow the i2c controller node or a connector sub-node.
This is specific to the connector definition and it should be out of
generic DT addon rules.
Best regards,
Hervé
next prev parent reply other threads:[~2025-09-23 9:49 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-02 8:57 Device tree representation of (hotplug) connectors: discussion at ELCE Luca Ceresoli
2025-09-04 5:23 ` David Gibson
2025-09-04 5:45 ` Ayush Singh
2025-09-08 4:36 ` David Gibson
2025-09-08 9:01 ` Geert Uytterhoeven
2025-09-09 2:44 ` David Gibson
2025-09-08 12:51 ` Herve Codina
2025-09-09 5:09 ` David Gibson
2025-09-09 9:41 ` Herve Codina
2025-09-09 13:04 ` Geert Uytterhoeven
2025-09-10 4:36 ` David Gibson
2025-09-11 10:11 ` Herve Codina
2025-09-12 9:40 ` Luca Ceresoli
2025-09-10 4:33 ` David Gibson
2025-09-11 8:48 ` Herve Codina
2025-09-11 8:54 ` Geert Uytterhoeven
2025-09-11 10:23 ` Herve Codina
2025-09-11 12:15 ` Ayush Singh
2025-09-11 12:45 ` Herve Codina
2025-09-11 13:08 ` Geert Uytterhoeven
2025-09-11 13:58 ` Herve Codina
2025-09-15 4:51 ` David Gibson
2025-09-16 6:46 ` Herve Codina
2025-09-16 10:14 ` Geert Uytterhoeven
2025-09-16 12:22 ` Ayush Singh
2025-09-16 13:34 ` Geert Uytterhoeven
2025-09-16 14:25 ` Herve Codina
2025-09-16 15:35 ` Ayush Singh
2025-09-18 3:16 ` David Gibson
2025-09-18 7:44 ` Herve Codina
2025-09-18 8:06 ` Herve Codina
2025-09-19 4:52 ` David Gibson
2025-09-19 5:17 ` Ayush Singh
2025-09-19 15:20 ` Luca Ceresoli
2025-09-23 8:09 ` David Gibson
2025-09-23 9:48 ` Herve Codina [this message]
2025-09-23 10:29 ` Geert Uytterhoeven
2025-09-23 13:36 ` Herve Codina
2025-09-23 16:47 ` Andrew Davis
2025-09-24 4:17 ` David Gibson
2025-09-24 4:11 ` David Gibson
2025-09-24 17:03 ` Ayush Singh
2025-09-30 4:07 ` David Gibson
2025-09-30 7:52 ` Geert Uytterhoeven
2025-10-10 7:58 ` David Gibson
2025-10-10 16:31 ` Herve Codina
2025-09-24 3:54 ` David Gibson
2025-09-24 12:31 ` Herve Codina
2025-09-29 9:23 ` David Gibson
2025-09-30 7:09 ` Herve Codina
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250923114849.2385736d@bootlin.com \
--to=herve.codina@bootlin.com \
--cc=afd@ti.com \
--cc=ayush@beagleboard.org \
--cc=conor+dt@kernel.org \
--cc=david@gibson.dropbear.id.au \
--cc=devicetree-compiler@vger.kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=geert@linux-m68k.org \
--cc=jkridner@gmail.com \
--cc=krzk+dt@kernel.org \
--cc=krzk@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=luca.ceresoli@bootlin.com \
--cc=robh@kernel.org \
--cc=thomas.petazzoni@bootlin.com \
--cc=wsa+renesas@sang-engineering.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.