* Wake on LAN for USB ethernet? @ 2013-01-18 0:12 Sarah Sharp 2013-01-18 2:39 ` Ming Lei 0 siblings, 1 reply; 4+ messages in thread From: Sarah Sharp @ 2013-01-18 0:12 UTC (permalink / raw) To: linux-usb, netdev, Petko Manolov; +Cc: Alan Stern, Greg KH, Oliver Neukum [-- Attachment #1: Type: text/plain, Size: 1728 bytes --] Is it reasonable to expect that Wake on LAN works if the target box is connected via a USB-to-ethernet adapter? One of my validation testers has a USB ethernet device that successfully wakes up Windows from hibernate (S4), but it doesn't work under Linux. Wake on LAN works fine with the hardwired ethernet port. USB remote wakeup from S3/S4 works fine with a USB keyboard. So I need to figure out if it's an issue with the kernel, their test suite, or the USB host controller. I've experimented with USB ethernet devices with the pegasus driver with no success. Here's what I've tried: 1. Connect the USB to ethernet adapter to the rootport under the xHCI (USB 3.0) host controller. (lsusb for the two devices I've tried is attached) 2. Enable remote wakeup for all devices (including the PCI host) by echoing 'enabled' to power/wakeup. (script for that attached) 3. Use ethtool to turn on WOL: sudo ethtool -s ethX wol g 4. Find the MAC address by running ifconfig and looking at the HWaddr field. 5. Verify with wireshark that I can see the Magic WOL packet when I run this command on another machine: sudo etherwake -i ethX macaddr 6. Suspend or hibernate the target machine, and then send the Magic WOL packet from a second machine. Am I missing any steps in testing this? Does WOL just not work for USB ethernet devices under Linux? Perhaps just the pegasus driver doesn't support WOL? Note that I can't currently test USB remote wakeup for any devices under the EHCI host controller on my Lenovo x230. For some reason, whenever I enable remote wakeup for the rate matching hub under the EHCI host, the system will immediately resume when I attempt to suspend it. Don't know why yet. Sarah Sharp [-- Attachment #2: enable-usb-remote-wakeup.sh --] [-- Type: application/x-sh, Size: 285 bytes --] [-- Attachment #3: belkin-pegasus-lsusb.txt --] [-- Type: text/plain, Size: 2418 bytes --] Bus 003 Device 013: ID 050d:0121 Belkin Components F5D5050 100Mbps Ethernet Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 1.10 bDeviceClass 0 (Defined at Interface level) bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize0 8 idVendor 0x050d Belkin Components idProduct 0x0121 F5D5050 100Mbps Ethernet bcdDevice 1.01 iManufacturer 1 ADMtek iProduct 2 USB To LAN Converter iSerial 3 0001 bNumConfigurations 1 Configuration Descriptor: bLength 9 bDescriptorType 2 wTotalLength 39 bNumInterfaces 1 bConfigurationValue 1 iConfiguration 0 bmAttributes 0xa0 (Bus Powered) Remote Wakeup MaxPower 160mA Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 0 bNumEndpoints 3 bInterfaceClass 0 (Defined at Interface level) bInterfaceSubClass 0 bInterfaceProtocol 0 iInterface 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x81 EP 1 IN bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0040 1x 64 bytes bInterval 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x02 EP 2 OUT bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0040 1x 64 bytes bInterval 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x83 EP 3 IN bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0008 1x 8 bytes bInterval 1 Device Status: 0x0000 (Bus Powered) [-- Attachment #4: smc-pegasus-lsusb.txt --] [-- Type: text/plain, Size: 2391 bytes --] Bus 003 Device 012: ID 07a6:8513 ADMtek, Inc. AN8513 Ethernet Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 1.10 bDeviceClass 255 Vendor Specific Class bDeviceSubClass 0 bDeviceProtocol 255 bMaxPacketSize0 8 idVendor 0x07a6 ADMtek, Inc. idProduct 0x8513 AN8513 Ethernet bcdDevice 2.01 iManufacturer 1 USB iProduct 2 SMC2208USB/ETH iSerial 3 33D0 bNumConfigurations 1 Configuration Descriptor: bLength 9 bDescriptorType 2 wTotalLength 39 bNumInterfaces 1 bConfigurationValue 1 iConfiguration 0 bmAttributes 0xa0 (Bus Powered) Remote Wakeup MaxPower 160mA Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 0 bNumEndpoints 3 bInterfaceClass 255 Vendor Specific Class bInterfaceSubClass 1 bInterfaceProtocol 255 iInterface 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x81 EP 1 IN bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0040 1x 64 bytes bInterval 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x02 EP 2 OUT bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0040 1x 64 bytes bInterval 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x83 EP 3 IN bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0008 1x 8 bytes bInterval 1 Device Status: 0x0002 (Bus Powered) Remote Wakeup Enabled ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: Wake on LAN for USB ethernet? 2013-01-18 0:12 Wake on LAN for USB ethernet? Sarah Sharp @ 2013-01-18 2:39 ` Ming Lei 2013-01-18 8:53 ` Petko Manolov 0 siblings, 1 reply; 4+ messages in thread From: Ming Lei @ 2013-01-18 2:39 UTC (permalink / raw) To: Sarah Sharp Cc: linux-usb, netdev, Petko Manolov, Alan Stern, Greg KH, Oliver Neukum On Fri, Jan 18, 2013 at 8:12 AM, Sarah Sharp <sarah.a.sharp@linux.intel.com> wrote: > Is it reasonable to expect that Wake on LAN works if the target box is > connected via a USB-to-ethernet adapter? It is surely reasonable, and seems SMSC75xx or SMSC95xx can bring system out of suspend. > > One of my validation testers has a USB ethernet device that successfully > wakes up Windows from hibernate (S4), but it doesn't work under Linux. > Wake on LAN works fine with the hardwired ethernet port. USB remote > wakeup from S3/S4 works fine with a USB keyboard. > > So I need to figure out if it's an issue with the kernel, their test > suite, or the USB host controller. > > > I've experimented with USB ethernet devices with the pegasus driver with > no success. Here's what I've tried: > > 1. Connect the USB to ethernet adapter to the rootport under the xHCI > (USB 3.0) host controller. (lsusb for the two devices I've tried is > attached) > > 2. Enable remote wakeup for all devices (including the PCI host) by > echoing 'enabled' to power/wakeup. (script for that attached) > > 3. Use ethtool to turn on WOL: > sudo ethtool -s ethX wol g Could you check here if the attribute 'power/wakeup' of the USB device has been enabled? If so, and step 6 still can't wakeup system, the problem may be in the set_wol stetting on hardware of the driver since your USB wakeup works. Also, the wakeup enabling is missed in the pegasus_set_wol(), and the below patch is needed: diff --git a/drivers/net/usb/pegasus.c b/drivers/net/usb/pegasus.c index a0b5807..d5304f1 100644 --- a/drivers/net/usb/pegasus.c +++ b/drivers/net/usb/pegasus.c @@ -1096,6 +1096,7 @@ pegasus_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol) { pegasus_t *pegasus = netdev_priv(dev); u8 reg78 = 0x04; + int ret; if (wol->wolopts & ~WOL_SUPPORTED) return -EINVAL; @@ -1110,7 +1111,11 @@ pegasus_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol) else pegasus->eth_regs[0] &= ~0x10; pegasus->wolopts = wol->wolopts; - return set_register(pegasus, WakeupControl, reg78); + + ret = set_register(pegasus, WakeupControl, reg78); + if (!ret) + ret = device_set_wakeup_enable(&pegasus->usb->dev, 1); + return ret; } static inline void pegasus_reset_wol(struct net_device *dev) > > 4. Find the MAC address by running ifconfig and looking at the HWaddr > field. > > 5. Verify with wireshark that I can see the Magic WOL packet when I run > this command on another machine: > sudo etherwake -i ethX macaddr > > 6. Suspend or hibernate the target machine, and then send the Magic WOL > packet from a second machine. > > > Am I missing any steps in testing this? Does WOL just not work for USB > ethernet devices under Linux? Perhaps just the pegasus driver doesn't > support WOL? Probably the set_wol of pegasus is broken if wakeup has been enabled on the USB device. Thanks, -- Ming Lei ^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: Wake on LAN for USB ethernet? 2013-01-18 2:39 ` Ming Lei @ 2013-01-18 8:53 ` Petko Manolov [not found] ` <alpine.DEB.2.02.1301181047290.3637-dzx9CreErbMJK7zW1S5TsVaTQe2KTcn/@public.gmane.org> 0 siblings, 1 reply; 4+ messages in thread From: Petko Manolov @ 2013-01-18 8:53 UTC (permalink / raw) To: Ming Lei Cc: Sarah Sharp, linux-usb, netdev, Petko Manolov, Alan Stern, Greg KH, Oliver Neukum The code in the driver is based on the specs from ADMTek (later, Infineon). Since i never suspend my machines this feature has not been tested by me. However, if the proposed patch is the right thing to do i'd be happy to see it applied. cheers, Petko On Fri, 18 Jan 2013, Ming Lei wrote: > On Fri, Jan 18, 2013 at 8:12 AM, Sarah Sharp > <sarah.a.sharp@linux.intel.com> wrote: >> Is it reasonable to expect that Wake on LAN works if the target box is >> connected via a USB-to-ethernet adapter? > > It is surely reasonable, and seems SMSC75xx or SMSC95xx can > bring system out of suspend. > >> >> One of my validation testers has a USB ethernet device that successfully >> wakes up Windows from hibernate (S4), but it doesn't work under Linux. >> Wake on LAN works fine with the hardwired ethernet port. USB remote >> wakeup from S3/S4 works fine with a USB keyboard. >> >> So I need to figure out if it's an issue with the kernel, their test >> suite, or the USB host controller. >> >> >> I've experimented with USB ethernet devices with the pegasus driver with >> no success. Here's what I've tried: >> >> 1. Connect the USB to ethernet adapter to the rootport under the xHCI >> (USB 3.0) host controller. (lsusb for the two devices I've tried is >> attached) >> >> 2. Enable remote wakeup for all devices (including the PCI host) by >> echoing 'enabled' to power/wakeup. (script for that attached) >> >> 3. Use ethtool to turn on WOL: >> sudo ethtool -s ethX wol g > > Could you check here if the attribute 'power/wakeup' of the USB device > has been enabled? If so, and step 6 still can't wakeup system, the > problem may be in the set_wol stetting on hardware of the driver since > your USB wakeup works. > > Also, the wakeup enabling is missed in the pegasus_set_wol(), and > the below patch is needed: > > diff --git a/drivers/net/usb/pegasus.c b/drivers/net/usb/pegasus.c > index a0b5807..d5304f1 100644 > --- a/drivers/net/usb/pegasus.c > +++ b/drivers/net/usb/pegasus.c > @@ -1096,6 +1096,7 @@ pegasus_set_wol(struct net_device *dev, struct > ethtool_wolinfo *wol) > { > pegasus_t *pegasus = netdev_priv(dev); > u8 reg78 = 0x04; > + int ret; > > if (wol->wolopts & ~WOL_SUPPORTED) > return -EINVAL; > @@ -1110,7 +1111,11 @@ pegasus_set_wol(struct net_device *dev, struct > ethtool_wolinfo *wol) > else > pegasus->eth_regs[0] &= ~0x10; > pegasus->wolopts = wol->wolopts; > - return set_register(pegasus, WakeupControl, reg78); > + > + ret = set_register(pegasus, WakeupControl, reg78); > + if (!ret) > + ret = device_set_wakeup_enable(&pegasus->usb->dev, 1); > + return ret; > } > > static inline void pegasus_reset_wol(struct net_device *dev) > > >> >> 4. Find the MAC address by running ifconfig and looking at the HWaddr >> field. >> >> 5. Verify with wireshark that I can see the Magic WOL packet when I run >> this command on another machine: >> sudo etherwake -i ethX macaddr >> >> 6. Suspend or hibernate the target machine, and then send the Magic WOL >> packet from a second machine. >> >> >> Am I missing any steps in testing this? Does WOL just not work for USB >> ethernet devices under Linux? Perhaps just the pegasus driver doesn't >> support WOL? > > Probably the set_wol of pegasus is broken if wakeup has been enabled > on the USB device. > > Thanks, > -- > Ming Lei > ^ permalink raw reply [flat|nested] 4+ messages in thread
[parent not found: <alpine.DEB.2.02.1301181047290.3637-dzx9CreErbMJK7zW1S5TsVaTQe2KTcn/@public.gmane.org>]
* Re: Wake on LAN for USB ethernet? [not found] ` <alpine.DEB.2.02.1301181047290.3637-dzx9CreErbMJK7zW1S5TsVaTQe2KTcn/@public.gmane.org> @ 2013-01-18 12:57 ` Ming Lei 0 siblings, 0 replies; 4+ messages in thread From: Ming Lei @ 2013-01-18 12:57 UTC (permalink / raw) To: Petko Manolov Cc: Sarah Sharp, linux-usb-u79uwXL29TY76Z2rM5mHXA, netdev-u79uwXL29TY76Z2rM5mHXA, Petko Manolov, Alan Stern, Greg KH, Oliver Neukum On Fri, Jan 18, 2013 at 4:53 PM, Petko Manolov <petkan-nPnTwAqkgEqakBO8gow8eQ@public.gmane.org> wrote: > The code in the driver is based on the specs from ADMTek (later, Infineon). > Since i never suspend my machines this feature has not been tested by me. > > However, if the proposed patch is the right thing to do i'd be happy to see > it applied. I think it is the right thing, at least many network drivers do that, such as smsc usbnet drivers and many of PCI ethernet drivers. So I will prepare one formal version for merge. Thanks, -- Ming Lei -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2013-01-18 12:57 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2013-01-18 0:12 Wake on LAN for USB ethernet? Sarah Sharp 2013-01-18 2:39 ` Ming Lei 2013-01-18 8:53 ` Petko Manolov [not found] ` <alpine.DEB.2.02.1301181047290.3637-dzx9CreErbMJK7zW1S5TsVaTQe2KTcn/@public.gmane.org> 2013-01-18 12:57 ` Ming Lei
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).