On Thu, Mar 21, 2024 at 10:26:54AM +0000, Josua Mayer wrote:
> Am 20.03.24 um 19:57 schrieb Andrew Lunn:
> >> With separators ('!') we have:
> >> cp0!config-space@f2000000!mdio@12a200!ethernet-switch@4!mdio
> >> cp0!config-space@f2000000!mdio@12a200!ethernet-switch@4!mdio-external
> >> Truncated to MII_BUS_ID_SIZE:
> >> cp0!config-space@f2000000!mdio@12a200!ethernet-switch@4!mdi
> >> cp0!config-space@f2000000!mdio@12a200!ethernet-switch@4!mdi
> > This has been made worse by the DT maintainers wanting
> > ethernet-switch@4, not switch@4. And i guess config-space was also
> > something shorter in the past.
> >
> > I think your idea of cropping from the beginning, not the end, is in
> > general a good solution. However, is there any danger of
> >
> > cp0!config-space@f2000000!mdio@12a200!ethernet-switch@4!mdio-external
> >
> > and
> >
> > cp1!config-space@f2000000!mdio@12a200!ethernet-switch@4!mdio-external
> Since these will appear as links in /sys/bus/mdio_bus/devices,
> this danger exists.
> If the prefix is too similar, we can run into duplicates also when
> cropping from the front.
>
> So we could crop at the front and reduce likelihood of this situation,
> but (imo) should still print a warning since it is not working as intended.
The problem with a warning is, what do you tell people who ask how to
fix the warning? Hack your device tree to short the node names?
A warning is best done when there is something which can be done to
fix the problem. If it is not fixable, it is just noise.
> > Another option would be if the name needs to be truncated, use the
> > fallback as if there was no np:
> >
> > bus->name = "mv88e6xxx SMI";
> > snprintf(bus->id, MII_BUS_ID_SIZE, "mv88e6xxx-%d", index++);
> >
> > That at least gives you unique names.
> This ensures a unique suffix within a branch of device-tree.
> It could still collide with same structure on a cp1 or cp2.
static int mv88e6xxx_mdio_register(struct mv88e6xxx_chip *chip,
struct device_node *np,
bool external)
{
static int index;
struct mv88e6xxx_mdio_bus *mdio_bus;
struct mii_bus *bus;
int err;
index is static, so it is simply a counter. So you should get the
names mv88e6xxx-0, mv88e6xxx-1, mv88e6xxx-2, mv88e6xxx-3...
Andrew
Am 21.03.24 um 16:10 schrieb Andrew Lunn:
> On Thu, Mar 21, 2024 at 10:26:54AM +0000, Josua Mayer wrote:
>> Am 20.03.24 um 19:57 schrieb Andrew Lunn:
>>>> With separators ('!') we have:
>>>> cp0!config-space@f2000000!mdio@12a200!ethernet-switch@4!mdio
>>>> cp0!config-space@f2000000!mdio@12a200!ethernet-switch@4!mdio-external
>>>> Truncated to MII_BUS_ID_SIZE:
>>>> cp0!config-space@f2000000!mdio@12a200!ethernet-switch@4!mdi
>>>> cp0!config-space@f2000000!mdio@12a200!ethernet-switch@4!mdi
>>> This has been made worse by the DT maintainers wanting
>>> ethernet-switch@4, not switch@4. And i guess config-space was also
>>> something shorter in the past.
>>>
>>> I think your idea of cropping from the beginning, not the end, is in
>>> general a good solution. However, is there any danger of
>>>
>>> cp0!config-space@f2000000!mdio@12a200!ethernet-switch@4!mdio-external
>>>
>>> and
>>>
>>> cp1!config-space@f2000000!mdio@12a200!ethernet-switch@4!mdio-external
>> Since these will appear as links in /sys/bus/mdio_bus/devices,
>> this danger exists.
>> If the prefix is too similar, we can run into duplicates also when
>> cropping from the front.
>>
>> So we could crop at the front and reduce likelihood of this situation,
>> but (imo) should still print a warning since it is not working as intended.
> The problem with a warning is, what do you tell people who ask how to
> fix the warning? Hack your device tree to short the node names?
>
> A warning is best done when there is something which can be done to
> fix the problem. If it is not fixable, it is just noise.
Well, one option is making a future case for increasing MII_BUS_ID_SIZE.
>
>>> Another option would be if the name needs to be truncated, use the
>>> fallback as if there was no np:
>>>
>>> bus->name = "mv88e6xxx SMI";
>>> snprintf(bus->id, MII_BUS_ID_SIZE, "mv88e6xxx-%d", index++);
>>>
>>> That at least gives you unique names.
>> This ensures a unique suffix within a branch of device-tree.
>> It could still collide with same structure on a cp1 or cp2.
> static int mv88e6xxx_mdio_register(struct mv88e6xxx_chip *chip,
> struct device_node *np,
> bool external)
> {
> static int index;
> struct mv88e6xxx_mdio_bus *mdio_bus;
> struct mii_bus *bus;
> int err;
>
> index is static,
Good point!
> so it is simply a counter. So you should get the
> names mv88e6xxx-0, mv88e6xxx-1, mv88e6xxx-2, mv88e6xxx-3...
This could work as a fall-back within mv88e6xxx driver.
Alternatively - how about having a generic helper somewhere (not sure where)
which can add a marker and use a global counter?
E.g. appending "!...-%d"
Across the tree I found 39 instances of
"snprintf(bus->id, "