Thread (50 messages) 50 messages, 6 authors, 2025-10-10

Re: Device tree representation of (hotplug) connectors: discussion at ELCE

From: Luca Ceresoli <luca.ceresoli@bootlin.com>
Date: 2025-09-19 15:20:54
Also in: lkml

On Fri, 19 Sep 2025 10:47:17 +0530
Ayush Singh [off-list ref] wrote:
On 9/19/25 10:22, David Gibson wrote:
quoted
On Thu, Sep 18, 2025 at 09:44:09AM +0200, Herve Codina wrote:  
quoted
Hi David,

On Thu, 18 Sep 2025 13:16:32 +1000
David Gibson [off-list ref] wrote:

...
 
quoted
quoted
quoted
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.
Thinking out loud: what about preventing loading any overlay that does
more than just adding nodes? IOW forbidding to create properties in
nodes already in the live tree, and modifying existing properties.

I think being very restrictive in terms of overlays the implementation
can accept is a good idea in general. A requirement can be relaxed in
the future, but forbidding what used to be allowed would be a nightmare.

Best regards,
Luca

-- 
Luca Ceresoli, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help