On Wed, 27 Feb 2019 17:24:03 +0530 Harini Katakam <hari...@xilinx.com> wrote:
> Hi, > > We've had some users requesting control over net device name order > when multiple ethernet devices are present on a system. I've tried a > few solutions to this and looked it up on forums. But I apologize if > I have missed something. > > I know that the current system allocates eth<n> as per probe order > but that is obviously not stably controlled by user (tried DT > re-ordering and defer probe). One solution is to use DT alias names > to write to (net_device)->name as follows: > Devicetree: > aliases { > ethernet0 = &mac1; > ethernet1 = &mac0; > }; > Driver probe: > + /* Read ethernet DT alias id and assign to right device name*/ > + id = of_alias_get_id(np, "ethernet"); > + if (id < 0) { > + dev_warn(&pdev->dev, "failed to get alias id (%u)\n", id); > + return id; > + } > + snprintf(dev->name, sizeof(dev->name), "eth%d", id); > + > > These three drivers seem to have something similar for mdio/phy bus IDs: > drivers/net/ethernet/broadcom/genet/bcmmii.c:409: id = > of_alias_get_id(dn, "eth"); > drivers/net/ethernet/samsung/sxgbe/sxgbe_platform.c:43: plat->bus_id = > of_alias_get_id(np, "ethernet"); > drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c:404: > plat->bus_id = of_alias_get_id(np, "ethernet"); > > Drawback: This approach will break if alias is not provided for one > of the interfaces on board. Not to mention, there could be systems > with multiple ethernet makes (for ex. Cadence macb and Xilinx axienet) > If one of the drivers does not have an alias read mechanism, it is > possible to have clashing ID assignments. Is there any way this > solution can be changed to be stable/acceptable? > > One other alternative I've tried is netdev kernel bootargs but this > device name was not being picked by the kernel: > https://www.kernel.org/doc/html/v4.19/admin-guide/kernel-parameters.html > netdev= <mac1’s interrupt id>, <mac1’s base address>, eth0 > netdev=<mac0’s interrupt id>, <mac0’s base address>, eth1 > > Could you please suggest any alternatives? > Thanks! > > Regards, > Harini Device naming is a hard problem, and there is no perfect solution. Device tree should be providing hints to userspace policy for naming, not trying to do it in the kernel. See: https://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/