[PATCH] arm64: dts: rockchip: rk356x: add ethernet aliases
Dragan Simic
dsimic at manjaro.org
Tue Jul 2 10:11:07 PDT 2024
On 2024-07-02 17:14, Philipp Puschmann wrote:
> Am 02.07.24 um 16:41 schrieb Dragan Simic:
>> On 2024-07-02 16:25, Philipp Puschmann wrote:
>>>> On 2024-07-02 14:46, Philipp Puschmann wrote:
>>>>> Providing ethernet aliases solves a subtle problem for the rk3568.
>>>>> The
>>>>> bus_id used for the sysfs directory name of the mdio. Without
>>>>> ethernet
>>>>> alias the bus_id is always 0 and so creating the sysfs directory
>>>>> for the
>>>>> second mdio fails with a duplicate filename error and by this the
>>>>> setup
>>>>> of the second ethernet port fails too.
>>>>>
>>>>> Note: The alias numbering is inverted as gmac1 comes from more
>>>>> generic
>>>>> rk356x.dtsi but gmac0 comes from specialised rk3568.
>>>>
>>>> Please see the following commits and the discussions on the
>>>> rockchip-linux
>>>> mailing list that are linked in them:
>>>>
>>>> - b0140a1b3b1d ("arm64: dts: rockchip: Add ethernet0 alias to the
>>>> dts
>>>> for RK3588(S) boards")
>>>> - 36d9b3ae708e ("arm64: dts: rockchip: Add ethernet0 alias to the
>>>> dts
>>>> for RK3566 boards")
>>>> - 5d90cb1edcf7 ("arm64: dts: rockchip: Remove ethernet0 alias from
>>>> the
>>>> SoC dtsi for RK3399")
>>>> - c900fef5deff ("arm64: dts: rockchip: Remove ethernet0 alias from
>>>> the
>>>> SoC dtsi for RK3368")
>>>>> To sum it up, ethernetX aliases are considered board-level
>>>>> features,
>>>> because not all boards/devices actually expose the Ethernet
>>>> interfaces
>>>> built into the SoCs. Thus, adding ethernetX aliases to the SoC dtsi
>>>> files, unfortunately, isn't an acceptable option.
>>>
>>> Are ethernet aliases are handled differently than i2c, serial and spi
>>> aliases?
>>> There are aliases for each of them, without doing any harm. And even
>>> if the gmac
>>> nodes are disabled with status property?
>>
>> In a word, yes; they are handled a bit differently, which I already
>> tried
>> to sum up. As Krzysztof already noted, please read the discussions
>> linked
>> in the patches listed above.
>>
>>> On my rk3568-based custom board i had no ethernet aliases and
>>> networking was
>>> enabled normally with the status properties of the gmac nodes. Either
>>> one or
>>> the other or both network devices were initialized. Would be strange
>>> if an
>>> alias would be used without regard to initializing a device driver.
>>
>> It's also about following the TRMs and the aliases (or common names)
>> defined
>> in them, as described in the above-mentioned discussions.
>
> Ok. I understand the point why the ethernet alias belongs to the board
> dts instead of the SoC dtis.
> But on the quick i found no reference in Documentation/ or in
> drivers/net or the
> mentioned
> that and why ethernet aliases aren't optional (and it appears in many
> cases they
> are). From my years of board bring-up my understanding of aliases was,
> that they
> are in general are optional and for some subsystems they are used to
> hard-code
> sysfs paths and device names in /dev to solve the problem of randomness
> in
> initialization order.
Sure, ethernetX aliases are optional. Basically, if a board exposes
none of
the Ethernet interfaces built into the SoC, there should be no ethernetX
aliases
and, of course, no GMACs enabled in the board dts file.
>>>> The sysfs issue that you've discovered should be instead solved in
>>>> some
>>>> other, more systemic way.
>>>
>>> The bus_id value comes from stmmac_platform.c and of_alias_get_id()
>>> with
>>> "ethernet" as parameter is used, what is a common way in the kernel.
>>> It
>>> delivers unique ints starting with 0. stmmac_mdio then uses the
>>> bus_id to
>>> create a mdio bus id string stmmac-${bus_id} to register a mdio_bus.
>>> From my understanding this kind of bus id is commonly used to name
>>> devices
>>> and paths in the sysfs. Viewed only this problem it would be possible
>>> to use other information like the node address or some unique
>>> information to use it as unique part of the mdio bus id. But doesn't
>>> break
>>> things too, at least some kind of convention?
>>>
>>> Another hack i tried first, was to use a static increasing int to get
>>> the bus_id. This would keep the resulting sysfs tree probably
>>> unchanged
>>> but would drop the connection between dts and bus numbering in sysfs.
>>
>> Wouldn't those issues be solved by simply defining the needed
>> ethernetX
>> aliases in the dts file for your board?
>
> Yes. But for me it wasn't obviously that and why i would need that
> aliases
> to make a mdio work that is not even mentioned in the dts file (in my
> case).
> So in a perfect would would like to have a solution that comes without
> some
> hidden magic or the need to dig through the code.
Frankly, I'm not sure that defining aliases is some hidden magic, :) but
I think that I understand your point. Thus, I'd still suggest that you
try
to improve the code in the areas you found troublesome, making it more
robust
in a systemic way.
More information about the Linux-rockchip
mailing list