Re: SoC-specific device tree aliases?
Rob Herring <[email protected]> Thu, 4 Dec 2025 07:44:33 -0600
| Newsgroups | org.kernel.vger.devicetree-spec,org.kernel.vger.linux-devicetree |
|---|---|
| Message-ID | <CAL_JsqLFjF7F1eCxL8CzyitGogB0Ee7iHLGf79RHbwTpo6za7g@mail.gmail.com> |
On Thu, Dec 4, 2025 at 1:59 AM Sascha Hauer <[email protected]> wrote: > > On Wed, Dec 03, 2025 at 11:51:28AM -0600, Rob Herring wrote: > > On Wed, Dec 3, 2025 at 5:37 AM Ahmad Fatoum <[email protected]> wrote: > > > > > > Hi, > > > > > > On 12/3/25 12:08 PM, Krzysztof Kozlowski wrote: > > > > On 03/12/2025 11:36, Matthias Schiffer wrote: > > > >> On Wed, 2025-12-03 at 11:25 +0100, Krzysztof Kozlowski wrote: > > > >>> On 03/12/2025 11:16, Ahmad Fatoum wrote: > > > >>>> Hello Krzysztof, > > > >>>> > > > >>>> On 11/17/25 5:29 PM, Krzysztof Kozlowski wrote: > > > >>>>> On 17/11/2025 17:06, Rob Herring wrote: > > > >>>>>>> So you want it to be an ABI for barebox, sure, just make it a binding. > > > >>>>>> > > > >>>>>> What do you have in mind? Other than standard names for the aliases, > > > >>>>>> what can we check here? That a specific alias points to a specific > > > >>>>>> path? That would be a bit too much IMO. That would be equivalent to > > > >>>>>> specifying possible values in 'reg' for all devices. > > > >>>>> > > > >>>>> Binding with pattern or list of needed alias names, referenced by given > > > >>>>> soc-platform top-level schema. > > > >>>>> > > > >>>>> One of the points is to make it explicit and obvious (e.g. to Arnd or to > > > >>>>> me if I forget, because I follow the same logic of aliases per board) > > > >>>>> that these aliases are used outside of kernel. > > > >>>>> > > > >>>>> Just because ufs/mmc/spi can be used that way, does not mean we should > > > >>>>> accept any possible alias into soc.dtsi. > > > >>>> > > > >>>> I can't see how this could work. A number of boards renumber MMC devices > > > >>>> in a different manner than the SoC reference manual: > > > >>>> > > > >>>> - Changing the alias numbering is an ABI break, because Linux derives > > > >>>> its /dev/mmcblkX numbering from it > > > >>> > > > >>> First, why the alias would change? Isn't the board following the SoC > > > >>> numbering in 99.9% cases? > > > >> > > > >> At least for our TQ-Systems boards, we have a convention based on usage (mmc0: > > > >> eMMC, mmc1: SD card; serial0 is often the console) rather than following the SoC > > > >> numbering; that is, we're using the aliases as a form of hardware abstraction > > > >> rather than hardware description. > > > > > > > > Huh, does it even match numbering on the schematics / board / user-guides? > > > > > > > > I would prefer not to create bindings purely because some existing DTS > > > > code is not matching our expectations. However there could be a case > > > > where board numbering is different than soc number and we want to keep > > > > aliases configured for board. > > > > > > > > Basically what you propose here is the discouraged instance ID disguised > > > > under one more 'alias' which is not really alias. It's just an instance > > > > ID. There is no other use of soc-aliases beside instance ID. > > > > > > > > I see the problem you want to solve, I agree it is worth solving and I > > > > agree that DT is the place for this mapping between register value and > > > > device node. However solution of discouraged instance ID is just... > > > > well, discouraged, so not optimal. I don't have particular advice expect > > > > a dedicated property for each device in such case. > > > > > > How do we move forward here? I don't think we can change the nature of > > > /aliases being board-specific now without breaking users. > > > > > > Does this make the addition of /soc-aliases (or /soc/aliases?) more > > > palatable? > > > > No. > > > > Thinking about this some more, I'm not sure that something aliases > > based is even the right approach. Let's back up to the original > > problem instead of talking about a problem concerning a possible > > solution. > > > > You have a platform specific register with values (or from 1 or > > multiple fields) that you need to map to devices in DT. That's it. > > That could be solved like this: > > > > bootsource-map = > > <0x2 &mmc0>, > > <0x3 &mmc1>, > > <0x10 &spi0>, > > ...; > > > > Simple. The first value is platform specific. Maybe it is several > > fields (e.g. device type, instance) merged together. Doesn't matter. > > That's an interesting approach and I like it. > > I am not sure though how the platform specific value could be composed. It's platform specific, so however it wants and not my problem. > The easiest way would be if it maps to some register values. This works > well when there's a bitfield with only a few bits which specifies the > bootsource, but not so when there are many bits. On TI AM62x for example > we have 4 bits specifying the primary bootsource, 3 bits specifying the > backup bootsource and 1 bit specifying if we are booting from the > primary or from the backup bootsource. This means we have an array with > potentially 256 entries with many holes and many different values > pointing to the same bootsource. We could reduce the number of array > entries by specifying a mask for each value. I am worried also that the > initial contributor might for example forget about the backup bootsource > and only upstreams primary bootsource, so we would have to modify > existing values for the primary bootsource when adding the backup > bootsource. It's a map, not an array so there should be no holes. The entry index is not significant. In this example, the platform just defines the cell as: <primary_or_sec:16><sec_source:15:8><primary_source:7:0> You could fit it all in 8-bits, but I spaced it out in case the next SoC needs another bit. A mask value would be okay until you have 2 different registers and then you need a variable number of cells. And then I could imagine someone will want to define the register address for each cell in the name of a 'generic binding'. That's not what I want to see. > How about only adding the phandles to bootsource-map, like > > bootsource-map = <&mmc0>, <&mmc2>, <&spi0>, ...; > > New entries must then only be added at the end, existing entries must > never be changed. That would work too. Then you just have the index to register value lookup in code. Doesn't matter to me too much. The only downside I see is having to enforce that people don't try to insert entries in the middle. Rob