Message ID | 20220127104905.899341-5-o.rempel@pengutronix.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | usbnet: add "label" support | expand |
On Thu, Jan 27, 2022 at 11:49:05AM +0100, Oleksij Rempel wrote: > Similar to the option to set a netdev name in device tree for switch > ports by using the property "label" in the DSA framework, this patch > adds this functionality to the usbnet infrastructure. > > This will help to name the interfaces properly throughout supported > devices. This provides stable interface names which are useful > especially in embedded use cases. Stable interface names are for userspace to set, not the kernel. Why would USB care about this? If you need something like this, get it from the USB device itself, not DT, which should have nothing to do with USB as USB is a dynamic, self-describing, bus. Unlike DT. So I do not think this is a good idea. greg k-h
On Thu, Jan 27, 2022 at 11:57:26AM +0100, Greg KH wrote: > On Thu, Jan 27, 2022 at 11:49:05AM +0100, Oleksij Rempel wrote: > > Similar to the option to set a netdev name in device tree for switch > > ports by using the property "label" in the DSA framework, this patch > > adds this functionality to the usbnet infrastructure. > > > > This will help to name the interfaces properly throughout supported > > devices. This provides stable interface names which are useful > > especially in embedded use cases. > > Stable interface names are for userspace to set, not the kernel. > > Why would USB care about this? If you need something like this, get it > from the USB device itself, not DT, which should have nothing to do with > USB as USB is a dynamic, self-describing, bus. Unlike DT. > > So I do not think this is a good idea. This is needed for embedded devices with integrated USB Ethernet controller. Currently I have following use cases to solve: - Board with one or multiple USB Ethernet controllers with external PHY. The PHY need devicetree to describe IRQ, clock sources, label on board, etc. - Board with USB Ethernet controller with DSA switch. The USB ethernet controller is attached to the CPU port of DSA switch. In this case, DSA switch is the sub-node of the USB device. The CPU port should have stable name for all device related to this product. Using user space tools to name interfaces would double the maintenance of similar information: DT - describing the HW + udev scripts describing same HW again. Regards, Oleksij
On Thu, Jan 27, 2022 at 12:23:05PM +0100, Oleksij Rempel wrote: > On Thu, Jan 27, 2022 at 11:57:26AM +0100, Greg KH wrote: > > On Thu, Jan 27, 2022 at 11:49:05AM +0100, Oleksij Rempel wrote: > > > Similar to the option to set a netdev name in device tree for switch > > > ports by using the property "label" in the DSA framework, this patch > > > adds this functionality to the usbnet infrastructure. > > > > > > This will help to name the interfaces properly throughout supported > > > devices. This provides stable interface names which are useful > > > especially in embedded use cases. > > > > Stable interface names are for userspace to set, not the kernel. > > > > Why would USB care about this? If you need something like this, get it > > from the USB device itself, not DT, which should have nothing to do with > > USB as USB is a dynamic, self-describing, bus. Unlike DT. > > > > So I do not think this is a good idea. > > This is needed for embedded devices with integrated USB Ethernet > controller. Currently I have following use cases to solve: > - Board with one or multiple USB Ethernet controllers with external PHY. > The PHY need devicetree to describe IRQ, clock sources, label on board, etc. The phy is for the USB controller, not the Ethernet controller, right? If for the ethernet controller, ugh, that's a crazy design and I would argue a broken one. But whatever, DT should not be used to describe a USB device itself. > - Board with USB Ethernet controller with DSA switch. The USB ethernet > controller is attached to the CPU port of DSA switch. In this case, > DSA switch is the sub-node of the USB device. What do you mean exactly by "sub node"? USB does not have such a term. > The CPU port should have > stable name for all device related to this product. name for who to use? Userspace? Or within the kernel? Naming is done by userspace, as USB is NOT determinisitic in numbering / naming the devices attached to it, by design. If you need to have a stable name, do so in userspace please, we have loads of tools that already do this there today. Let's not reinvent the wheel. > Using user space tools to name interfaces would double the maintenance > of similar information: DT - describing the HW + udev scripts describing > same HW again. Not for the network name of the device, that belongs in userspace. Do not be listing USB device ids in a DT file, that way lies madness. thanks, greg k-h
On Thu, Jan 27, 2022 at 12:30:20PM +0100, Greg KH wrote: > On Thu, Jan 27, 2022 at 12:23:05PM +0100, Oleksij Rempel wrote: > > On Thu, Jan 27, 2022 at 11:57:26AM +0100, Greg KH wrote: > > > On Thu, Jan 27, 2022 at 11:49:05AM +0100, Oleksij Rempel wrote: > > > > Similar to the option to set a netdev name in device tree for switch > > > > ports by using the property "label" in the DSA framework, this patch > > > > adds this functionality to the usbnet infrastructure. > > > > > > > > This will help to name the interfaces properly throughout supported > > > > devices. This provides stable interface names which are useful > > > > especially in embedded use cases. > > > > > > Stable interface names are for userspace to set, not the kernel. > > > > > > Why would USB care about this? If you need something like this, get it > > > from the USB device itself, not DT, which should have nothing to do with > > > USB as USB is a dynamic, self-describing, bus. Unlike DT. > > > > > > So I do not think this is a good idea. > > > > This is needed for embedded devices with integrated USB Ethernet > > controller. Currently I have following use cases to solve: > > - Board with one or multiple USB Ethernet controllers with external PHY. > > The PHY need devicetree to describe IRQ, clock sources, label on board, etc. > > The phy is for the USB controller, not the Ethernet controller, right? > If for the ethernet controller, ugh, that's a crazy design and I would > argue a broken one. But whatever, DT should not be used to describe a > USB device itself. > > > - Board with USB Ethernet controller with DSA switch. The USB ethernet > > controller is attached to the CPU port of DSA switch. In this case, > > DSA switch is the sub-node of the USB device. > > What do you mean exactly by "sub node"? USB does not have such a term. Here are some examples: - | usb@11270000 { reg = <0x11270000 0x1000>; #address-cells = <1>; #size-cells = <0>; ethernet@1 { compatible = "usb424,ec00"; reg = <1>; label = "LAN0"; // there is no internal eeprom, so MAC address is taken from // NVMEM of the SoC. local-mac-address = [00 00 00 00 00 00]; mdio { ethernet-phy@4 { reg = <4>; // Interrupt is attached to the SoC or the GPIO // controller of the same USB devices. interrupts-extended = <&gpio1 28 IRQ_TYPE_LEVEL_LOW>; // same about reset. It is attached to the SoC // or GPIO controller of the USB device. reset-gpios = <&gpio3 31 GPIO_ACTIVE_LOW>; reset-assert-us = <10000>; reset-deassert-us = <1000>; // some external clock provider clocks = <&clk> qca,smarteee-tw-us-1g = <24>; qca,clk-out-frequency = <125000000>; }; }; }; }; - | usb@11270000 { reg = <0x11270000 0x1000>; #address-cells = <1>; #size-cells = <0>; usb1@1 { compatible = "usb424,9514"; reg = <1>; #address-cells = <1>; #size-cells = <0>; eth0: ethernet@1 { compatible = "usb424,ec00"; reg = <1>; label = "cpu0"; fixed-link { speed = <1000>; full-duplex; }; // managment interface of the switch is attached to the // MDIO bus of this USB device. mdio { switch@0 { compatible = "microchip,ksz9477"; reg = <0>; // reset is controlled by the SoC or by the GPIO // controller of this USB device. reset-gpios = <&gpio5 0 GPIO_ACTIVE_LOW>; ethernet-ports { #address-cells = <1>; #size-cells = <0>; port@0 { reg = <0>; label = "lan1"; }; port@1 { reg = <1>; label = "lan2"; }; port@2 { reg = <2>; label = "lan3"; }; port@3 { reg = <3>; label = "lan4"; }; port@4 { reg = <4>; label = "lan5"; }; port@5 { reg = <5>; label = "cpu"; ethernet = <ð0>; fixed-link { speed = <1000>; full-duplex; }; }; }; }; }; }; }; }; > > The CPU port should have > > stable name for all device related to this product. > > name for who to use? Userspace? Or within the kernel? > > Naming is done by userspace, as USB is NOT determinisitic in numbering / > naming the devices attached to it, by design. If you need to have a > stable name, do so in userspace please, we have loads of tools that > already do this there today. Let's not reinvent the wheel. > > > Using user space tools to name interfaces would double the maintenance > > of similar information: DT - describing the HW + udev scripts describing > > same HW again. > > Not for the network name of the device, that belongs in userspace. > > Do not be listing USB device ids in a DT file, that way lies madness. > > thanks, > > greg k-h >
On Thu, Jan 27, 2022 at 01:00:39PM +0100, Oleksij Rempel wrote: > On Thu, Jan 27, 2022 at 12:30:20PM +0100, Greg KH wrote: > > On Thu, Jan 27, 2022 at 12:23:05PM +0100, Oleksij Rempel wrote: > > > On Thu, Jan 27, 2022 at 11:57:26AM +0100, Greg KH wrote: > > > > On Thu, Jan 27, 2022 at 11:49:05AM +0100, Oleksij Rempel wrote: > > > > > Similar to the option to set a netdev name in device tree for switch > > > > > ports by using the property "label" in the DSA framework, this patch > > > > > adds this functionality to the usbnet infrastructure. > > > > > > > > > > This will help to name the interfaces properly throughout supported > > > > > devices. This provides stable interface names which are useful > > > > > especially in embedded use cases. > > > > > > > > Stable interface names are for userspace to set, not the kernel. > > > > > > > > Why would USB care about this? If you need something like this, get it > > > > from the USB device itself, not DT, which should have nothing to do with > > > > USB as USB is a dynamic, self-describing, bus. Unlike DT. > > > > > > > > So I do not think this is a good idea. > > > > > > This is needed for embedded devices with integrated USB Ethernet > > > controller. Currently I have following use cases to solve: > > > - Board with one or multiple USB Ethernet controllers with external PHY. > > > The PHY need devicetree to describe IRQ, clock sources, label on board, etc. > > > > The phy is for the USB controller, not the Ethernet controller, right? > > If for the ethernet controller, ugh, that's a crazy design and I would > > argue a broken one. But whatever, DT should not be used to describe a > > USB device itself. > > > > > - Board with USB Ethernet controller with DSA switch. The USB ethernet > > > controller is attached to the CPU port of DSA switch. In this case, > > > DSA switch is the sub-node of the USB device. > > > > What do you mean exactly by "sub node"? USB does not have such a term. > > Here are some examples: > > - | > usb@11270000 { > reg = <0x11270000 0x1000>; How can a USB device have a register? And what does 11270000 mean? > #address-cells = <1>; > #size-cells = <0>; > > ethernet@1 { > compatible = "usb424,ec00"; > reg = <1>; > label = "LAN0"; Where did that come from? That should be added in userspace, not from the kernel. > // there is no internal eeprom, so MAC address is taken from > // NVMEM of the SoC. > local-mac-address = [00 00 00 00 00 00]; > > mdio { > ethernet-phy@4 { > reg = <4>; > // Interrupt is attached to the SoC or the GPIO > // controller of the same USB devices. > interrupts-extended = <&gpio1 28 IRQ_TYPE_LEVEL_LOW>; > // same about reset. It is attached to the SoC > // or GPIO controller of the USB device. > reset-gpios = <&gpio3 31 GPIO_ACTIVE_LOW>; > reset-assert-us = <10000>; > reset-deassert-us = <1000>; > // some external clock provider > clocks = <&clk> > qca,smarteee-tw-us-1g = <24>; > qca,clk-out-frequency = <125000000>; So this device does not follow the spec for this driver in that you have to get the values for the phy from DT and not the device itself? Why not fix the firmware in the device to report this? Anyway, this feels really wrong, USB should not be involved in DT by virtue of how the bus was designed. And again, pick your names in userspace, embedded is not "special" here. You can do persistant network device names in a very trivial shell script if needed, we used to do it that way 18 years ago :) thanks, greg k-h
Hi Greg, Am Donnerstag, dem 27.01.2022 um 14:21 +0100 schrieb Greg KH: > On Thu, Jan 27, 2022 at 01:00:39PM +0100, Oleksij Rempel wrote: > > On Thu, Jan 27, 2022 at 12:30:20PM +0100, Greg KH wrote: > > > On Thu, Jan 27, 2022 at 12:23:05PM +0100, Oleksij Rempel wrote: > > > > On Thu, Jan 27, 2022 at 11:57:26AM +0100, Greg KH wrote: > > > > > On Thu, Jan 27, 2022 at 11:49:05AM +0100, Oleksij Rempel wrote: > > > > > > Similar to the option to set a netdev name in device tree for switch > > > > > > ports by using the property "label" in the DSA framework, this patch > > > > > > adds this functionality to the usbnet infrastructure. > > > > > > > > > > > > This will help to name the interfaces properly throughout supported > > > > > > devices. This provides stable interface names which are useful > > > > > > especially in embedded use cases. > > > > > > > > > > Stable interface names are for userspace to set, not the kernel. > > > > > > > > > > Why would USB care about this? If you need something like this, get it > > > > > from the USB device itself, not DT, which should have nothing to do with > > > > > USB as USB is a dynamic, self-describing, bus. Unlike DT. > > > > > > > > > > So I do not think this is a good idea. > > > > > > > > This is needed for embedded devices with integrated USB Ethernet > > > > controller. Currently I have following use cases to solve: > > > > - Board with one or multiple USB Ethernet controllers with external PHY. > > > > The PHY need devicetree to describe IRQ, clock sources, label on board, etc. > > > > > > The phy is for the USB controller, not the Ethernet controller, right? > > > If for the ethernet controller, ugh, that's a crazy design and I would > > > argue a broken one. But whatever, DT should not be used to describe a > > > USB device itself. > > > > > > > - Board with USB Ethernet controller with DSA switch. The USB ethernet > > > > controller is attached to the CPU port of DSA switch. In this case, > > > > DSA switch is the sub-node of the USB device. > > > > > > What do you mean exactly by "sub node"? USB does not have such a term. > > > > Here are some examples: > > > > - | > > usb@11270000 { > > reg = <0x11270000 0x1000>; > > How can a USB device have a register? > > And what does 11270000 mean? > > > > #address-cells = <1>; > > #size-cells = <0>; > > > > ethernet@1 { > > compatible = "usb424,ec00"; > > reg = <1>; > > label = "LAN0"; > > Where did that come from? That should be added in userspace, not from > the kernel. > > > // there is no internal eeprom, so MAC address is taken from > > // NVMEM of the SoC. > > local-mac-address = [00 00 00 00 00 00]; > > > > mdio { > > ethernet-phy@4 { > > reg = <4>; > > // Interrupt is attached to the SoC or the GPIO > > // controller of the same USB devices. > > interrupts-extended = <&gpio1 28 IRQ_TYPE_LEVEL_LOW>; > > // same about reset. It is attached to the SoC > > // or GPIO controller of the USB device. > > reset-gpios = <&gpio3 31 GPIO_ACTIVE_LOW>; > > reset-assert-us = <10000>; > > reset-deassert-us = <1000>; > > // some external clock provider > > clocks = <&clk> > > qca,smarteee-tw-us-1g = <24>; > > qca,clk-out-frequency = <125000000>; > > So this device does not follow the spec for this driver in that you have > to get the values for the phy from DT and not the device itself? Why > not fix the firmware in the device to report this? > > Anyway, this feels really wrong, USB should not be involved in DT by > virtue of how the bus was designed. While one can argue about the kind of information provided here, it is well defined how DT can augment the information about a device on a runtime discoverable bus like USB. There is even a DT binding that lists you as the maintainer of this standard: Documentation/devicetree/bindings/usb/usb-device.yaml USB is not special here, PCI has the same way for DT to augment runtime discovered device information and that is even covered by the ancient IEEE 1275 Open Firmware standard. Regards, Lucas
> - Board with USB Ethernet controller with DSA switch. The USB ethernet > controller is attached to the CPU port of DSA switch. In this case, > DSA switch is the sub-node of the USB device. The CPU port should have > stable name for all device related to this product. All that DSA requires is a phandle pointing to the MAC. It does not care what the interface name is. It should not be an issue if udev changes the name to something your product marketing guys say it should be. Andrew
Hello, On Fri, Jan 28, 2022 at 5:57 AM Lucas Stach <l.stach@pengutronix.de> wrote: > Am Donnerstag, dem 27.01.2022 um 14:21 +0100 schrieb Greg KH: >> On Thu, Jan 27, 2022 at 01:00:39PM +0100, Oleksij Rempel wrote: >>> On Thu, Jan 27, 2022 at 12:30:20PM +0100, Greg KH wrote: >>>> On Thu, Jan 27, 2022 at 12:23:05PM +0100, Oleksij Rempel wrote: >>>>> On Thu, Jan 27, 2022 at 11:57:26AM +0100, Greg KH wrote: >>>>>> On Thu, Jan 27, 2022 at 11:49:05AM +0100, Oleksij Rempel wrote: >>>>>>> Similar to the option to set a netdev name in device tree for switch >>>>>>> ports by using the property "label" in the DSA framework, this patch >>>>>>> adds this functionality to the usbnet infrastructure. >>>>>>> >>>>>>> This will help to name the interfaces properly throughout supported >>>>>>> devices. This provides stable interface names which are useful >>>>>>> especially in embedded use cases. >>>>>> >>>>>> Stable interface names are for userspace to set, not the kernel. >>>>>> >>>>>> Why would USB care about this? If you need something like this, get it >>>>>> from the USB device itself, not DT, which should have nothing to do with >>>>>> USB as USB is a dynamic, self-describing, bus. Unlike DT. >>>>>> >>>>>> So I do not think this is a good idea. >>>>> >>>>> This is needed for embedded devices with integrated USB Ethernet >>>>> controller. Currently I have following use cases to solve: >>>>> - Board with one or multiple USB Ethernet controllers with external PHY. >>>>> The PHY need devicetree to describe IRQ, clock sources, label on board, etc. >>>> >>>> The phy is for the USB controller, not the Ethernet controller, right? >>>> If for the ethernet controller, ugh, that's a crazy design and I would >>>> argue a broken one. But whatever, DT should not be used to describe a >>>> USB device itself. >>>> >>>>> - Board with USB Ethernet controller with DSA switch. The USB ethernet >>>>> controller is attached to the CPU port of DSA switch. In this case, >>>>> DSA switch is the sub-node of the USB device. >>>> >>>> What do you mean exactly by "sub node"? USB does not have such a term. >>> >>> Here are some examples: >>> >>> - | >>> usb@11270000 { >>> reg = <0x11270000 0x1000>; >> >> How can a USB device have a register? >> >> And what does 11270000 mean? >> >> >>> #address-cells = <1>; >>> #size-cells = <0>; >>> >>> ethernet@1 { >>> compatible = "usb424,ec00"; >>> reg = <1>; >>> label = "LAN0"; >> >> Where did that come from? That should be added in userspace, not from >> the kernel. >> >>> // there is no internal eeprom, so MAC address is taken from >>> // NVMEM of the SoC. >>> local-mac-address = [00 00 00 00 00 00]; >>> >>> mdio { >>> ethernet-phy@4 { >>> reg = <4>; >>> // Interrupt is attached to the SoC or the GPIO >>> // controller of the same USB devices. >>> interrupts-extended = <&gpio1 28 IRQ_TYPE_LEVEL_LOW>; >>> // same about reset. It is attached to the SoC >>> // or GPIO controller of the USB device. >>> reset-gpios = <&gpio3 31 GPIO_ACTIVE_LOW>; >>> reset-assert-us = <10000>; >>> reset-deassert-us = <1000>; >>> // some external clock provider >>> clocks = <&clk> >>> qca,smarteee-tw-us-1g = <24>; >>> qca,clk-out-frequency = <125000000>; >> >> So this device does not follow the spec for this driver in that you have >> to get the values for the phy from DT and not the device itself? Why >> not fix the firmware in the device to report this? >> >> Anyway, this feels really wrong, USB should not be involved in DT by >> virtue of how the bus was designed. > > While one can argue about the kind of information provided here, it is > well defined how DT can augment the information about a device on a > runtime discoverable bus like USB. There is even a DT binding that > lists you as the maintainer of this standard: > Documentation/devicetree/bindings/usb/usb-device.yaml > > USB is not special here, PCI has the same way for DT to augment runtime > discovered device information and that is even covered by the ancient > IEEE 1275 Open Firmware standard. Not to defend this particular patch, but to talk about USB in general. USB is not stable at all in terms of the run-time device number, but USB is perfectly stable in terms of connection ports. If you traverse from a host controller through a sequence of connection ports then you reach the same device. As for PCI or any other bus. The document referenced by Lucas shows this. Moreover, USB specification even allows you to mark a device connected to a particular hub port as non-detachable. What means that such a device will be just a block on a PCB. And in this case, FDT becomes a good (only?) option to store a subordinated device configuration. E.g. as in Oleksij's example with a DSA switch that is connected to an Ethernet MAC controller with the USB interface.
Hello Greg, if I may be allowed, I would like to make a couple of points about specifying network interface names in DT. As in previous mail, not to defend this particular patch, but to talk about names assignment in general. I may be totally wrong, so consider my words as a request for discussion. I have been thinking about an efficient way for network device names assignment for routers with a fixed configuration and have always come to a conclusion that DT is a good place for names storage. Recent DSA capability to assign names from labels and this patch by Oleksij show that I am not alone. On Fri, Jan 28, 2022 at 3:34 AM Greg KH <gregkh@linuxfoundation.org> wrote: > And again, pick your names in userspace, embedded is not "special" here. Embedded is not a special case, but fixed configuration is. > You can do persistant network device names in a very trivial shell > script if needed, we used to do it that way 18 years ago :) Network device name is not a solely userspace entity. It is part of the interface between the kernel and userspace software. Sure, persistent names can be established with a userspace script. But this implies the device renaming, which is a complex and race prone task. Once I even found a comment in the kernel code that only network devices could be renamed and this is a headache. As for userspace, it is possible to workaround the device renaming issues. But this requires a lot of code in many programs and sometimes even special conventions on a programs interaction. E.g. consider a case where a service would like to bind to a network interface, which is in the middle of renaming by udev. On the other hand, we have the kernel that could provide predictable names from the beginning for all software on a host. So this is a desired option. As for DT, this is an excellent database with perfectly established relations to hardware configuration. And if we try to implement a userspace storage with the network device names, then we will just duplicate the DT in the userspace, as already was mentioned by Oleksij. To me, implementation of a names database in userspace looks more like reinventing the DT (wheel) than adding device names to the DT. To summarize, we (developers of embedded software) have two related needs: 1) the need for persistent names provided by the kernel, 2) using the DT as a source of persistent names for (1). Greg, what do you think about device names storing in DeviceTree in the above context? Does it still make no sense?
On Thu, Feb 03, 2022 at 05:20:34AM +0300, Sergey Ryazanov wrote: > Hello Greg, > > if I may be allowed, I would like to make a couple of points about > specifying network interface names in DT. As in previous mail, not to > defend this particular patch, but to talk about names assignment in > general. > > I may be totally wrong, so consider my words as a request for > discussion. I have been thinking about an efficient way for network > device names assignment for routers with a fixed configuration and > have always come to a conclusion that DT is a good place for names > storage. Recent DSA capability to assign names from labels and this > patch by Oleksij show that I am not alone. DSA doing this is not recent. The first patch implementing DSA in 2008 had the ability to set the interface names. This was long before the idea that userspace should set interface names became the 'correct' way to do this. The current thinking for routers which don't make use of the DSA framework, it to use interface names like swXpY, where X is the switch number and Y is the port number. udev can make use of for example /sys/class/net/*/phys_port_name to get the pY bit to give the interface its full name. Andrew
On Thu, Feb 03, 2022 at 02:04:28PM +0100, Andrew Lunn wrote: > On Thu, Feb 03, 2022 at 05:20:34AM +0300, Sergey Ryazanov wrote: > > Hello Greg, > > > > if I may be allowed, I would like to make a couple of points about > > specifying network interface names in DT. As in previous mail, not to > > defend this particular patch, but to talk about names assignment in > > general. > > > > I may be totally wrong, so consider my words as a request for > > discussion. I have been thinking about an efficient way for network > > device names assignment for routers with a fixed configuration and > > have always come to a conclusion that DT is a good place for names > > storage. Recent DSA capability to assign names from labels and this > > patch by Oleksij show that I am not alone. > > DSA doing this is not recent. The first patch implementing DSA in 2008 > had the ability to set the interface names. This was long before the > idea that userspace should set interface names became the 'correct' > way to do this. udev came out in 2003, and we had the goal of having userspace do all of the device naming way back then, so DSA was late to the game :) thanks, greg k-h
On Thu, Jan 27, 2022 at 11:49:05AM +0100, Oleksij Rempel wrote: > Similar to the option to set a netdev name in device tree for switch > ports by using the property "label" in the DSA framework, this patch > adds this functionality to the usbnet infrastructure. > > This will help to name the interfaces properly throughout supported > devices. This provides stable interface names which are useful > especially in embedded use cases. I'll pile on... The purpose of 'label' is to describe a human readable label on a port of a box. It should otherwise be opaque to s/w. Yes, there are abuses of that in the kernel, but don't add more. Rob
diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c index 9a6450f796dc..3fdca0cfda88 100644 --- a/drivers/net/usb/usbnet.c +++ b/drivers/net/usb/usbnet.c @@ -33,6 +33,7 @@ #include <linux/slab.h> #include <linux/kernel.h> #include <linux/pm_runtime.h> +#include <linux/of.h> /*-------------------------------------------------------------------------*/ @@ -1762,6 +1763,20 @@ usbnet_probe (struct usb_interface *udev, const struct usb_device_id *prod) if ((dev->driver_info->flags & FLAG_WWAN) != 0) strscpy(net->name, "wwan%d", sizeof(net->name)); + if (IS_ENABLED(CONFIG_OF)) { + const char *label = NULL; + + /* try reading label from device tree node */ + if (xdev->dev.of_node) + label = of_get_property(xdev->dev.of_node, + "label", NULL); + if (label) { + strscpy(net->name, label, sizeof(net->name)); + dev_info(&udev->dev, "netdev name from dt: %s\n", + net->name); + } + } + /* devices that cannot do ARP */ if ((dev->driver_info->flags & FLAG_NOARP) != 0) net->flags |= IFF_NOARP;
Similar to the option to set a netdev name in device tree for switch ports by using the property "label" in the DSA framework, this patch adds this functionality to the usbnet infrastructure. This will help to name the interfaces properly throughout supported devices. This provides stable interface names which are useful especially in embedded use cases. Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de> --- drivers/net/usb/usbnet.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+)