ath9k-htc on OHCI -> bogus usb xfer

fixed-term.Oleksij.Rempel fixed-term.Oleksij.Rempel at de.bosch.com
Wed Jul 6 01:24:21 PDT 2016



On 06.07.2016 09:44, Alexey Brodkin wrote:
> Hi Oleksij,
> 
> On Tue, 2016-07-05 at 21:01 +0200, Oleksij Rempel wrote:
>> Am 05.07.2016 um 19:31 schrieb Alexey Brodkin:
>>>
>>> Hi Oleksij,
>>>
>>> On Tue, 2016-07-05 at 19:23 +0200, Oleksij Rempel wrote:
>>>>
>>>> Hi,
>>>>
>>>> Am 05.07.2016 um 14:20 schrieb Alexey Brodkin:
>>>>>
>>>>>
>>>>> Hello,
>>>>>
>>>>> Looks like this is another manifestation of already seen problem with ath9k-htc
>>>>> and OHCI controller.
>>>>>
>>>>> I'm trying to get USB Wi-Fi dongle based on Atheros AR9271 to work with our
>>>>> development board (this is Synopsys AXS103) and seeing a picture very similar to
>>>>> what was discussed here http://thread.gmane.org/gmane.linux.usb.general/110847
>>>>>
>>>>> Below is what I see on insertion of the dongle.
>>>>> Note I have the most recent ath9k-htc firmware (see "ath9k_htc/htc_9271-1.4.0.fw"
>>>>> in the log below) and Linux kernel is 4.6.3 (latest stable as of today) but the same
>>>>> happens even on 4.4.
>>>>>
>>>>> Interesting enough if I simply remove or disable the warning like that
>>>>> ------------------------>8---------------------------
>>>>> diff --git a/drivers/usb/core/urb.c b/drivers/usb/core/urb.c
>>>>> index 3d27477..a317e1e 100644
>>>>> --- a/drivers/usb/core/urb.c
>>>>> +++ b/drivers/usb/core/urb.c
>>>>> @@ -443,11 +443,6 @@ int usb_submit_urb(struct urb *urb, gfp_t mem_flags)
>>>>>          * cause problems in HCDs if they get it wrong.
>>>>>          */
>>>>>  
>>>>> -       /* Check that the pipe's type matches the endpoint's type */
>>>>> -       if (usb_pipetype(urb->pipe) != pipetypes[xfertype])
>>>>> -               dev_WARN(&dev->dev, "BOGUS urb xfer, pipe %x != type %x\n",
>>>>> -                       usb_pipetype(urb->pipe), pipetypes[xfertype]);
>>>>> -
>>>>>         /* Check against a simple/standard policy */
>>>>>         allowed = (URB_NO_TRANSFER_DMA_MAP | URB_NO_INTERRUPT | URB_DIR_MASK |
>>>>>                         URB_FREE_BUFFER);
>>>>> ------------------------>8---------------------------
>>>>> everything seem to work quite nice.
>>>>>
>>>>> Any thoughts are much appreciated.
>>>>>
>>>>> That's the log itself:
>>>>> ------------------------>8---------------------------
>>>>> usb 1-1: new full-speed USB device number 2 using ohci-platform
>>>>> usb 1-1: ath9k_htc: Firmware ath9k_htc/htc_9271-1.4.0.fw requested
>>>>> usb 1-1: ath9k_htc: Transferred FW: ath9k_htc/htc_9271-1.4.0.fw, size: 51008
>>>>> ------------[ cut here ]------------
>>>>> WARNING: CPU: 0 PID: 4 at drivers/usb/core/urb.c:450 usb_submit_urb+0x162/0x404
>>>>> usb 1-1: BOGUS urb xfer, pipe 1 != type 3
>>>>> Modules linked in:
>>>>> CPU: 0 PID: 4 Comm: kworker/0:0 Not tainted 4.6.3 #10
>>>>> Workqueue: events request_firmware_work_func
>>>>>
>>>>> Stack Trace:
>>>>>   arc_unwind_core.constprop.1+0x94/0x10c
>>>>> ---[ end trace 2249b79eac9991d1 ]---
>>>>> ------------[ cut here ]------------
>>>>> WARNING: CPU: 0 PID: 4 at drivers/usb/core/urb.c:450 usb_submit_urb+0x162/0x404
>>>>> usb 1-1: BOGUS urb xfer, pipe 1 != type 3
>>>>> Modules linked in:
>>>>> CPU: 0 PID: 4 Comm: kworker/0:0 Tainted: G        W       4.6.3 #10
>>>>> Workqueue: events request_firmware_work_func
>>>>>
>>>>> Stack Trace:
>>>>>   arc_unwind_core.constprop.1+0x94/0x10c
>>>>> ---[ end trace 2249b79eac9991d2 ]---
>>>>> ------------[ cut here ]------------
>>>>> WARNING: CPU: 0 PID: 4 at drivers/usb/core/urb.c:450 usb_submit_urb+0x162/0x404
>>>>> usb 1-1: BOGUS urb xfer, pipe 1 != type 3
>>>>> Modules linked in:
>>>>> CPU: 0 PID: 4 Comm: kworker/0:0 Tainted: G        W       4.6.3 #10
>>>>> Workqueue: events request_firmware_work_func
>>>>>
>>>>> Stack Trace:
>>>>>   arc_unwind_core.constprop.1+0x94/0x10c
>>>>> ---[ end trace 2249b79eac9991d3 ]---
>>>>>
>>>> please send content of hif_usb_send_regout() from your source code.
>>>> It is located in drivers/net/wireless/ath/ath9k/hif_usb.c
>>> I use vanilla 4.6.3 tree so that's what I have is the same as
>>> http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/drivers/net/wireless/ath/ath9k/hif_usb.c?h=
>>> linu
>>> x-4.6.y#n99
>>
>> Interesting.
>> Can you please send lsusb -v for this adapter?
> 
> See below:
> -------------------------->8---------------------------
> # lsusb -v
> 
> Bus 002 Device 002: ID 0cf3:9271  
> Device Descriptor:
>   bLength                18
>   bDescriptorType         1
>   bcdUSB               2.00
>   bDeviceClass          255 
>   bDeviceSubClass       255 
>   bDeviceProtocol       255 
>   bMaxPacketSize0        64
>   idVendor           0x0cf3 
>   idProduct          0x9271 
>   bcdDevice            1.08
>   iManufacturer          16 ATHEROS
>   iProduct               32 USB2.0 WLAN
>   iSerial                48 12345
>   bNumConfigurations      1
>   Configuration Descriptor:
>     bLength                 9
>     bDescriptorType         2
>     wTotalLength           60
>     bNumInterfaces          1
>     bConfigurationValue     1
>     iConfiguration          0 
>     bmAttributes         0x80
>       (Bus Powered)
>     MaxPower              500mA
>     Interface Descriptor:
>       bLength                 9
>       bDescriptorType         4
>       bInterfaceNumber        0
>       bAlternateSetting       0
>       bNumEndpoints           6
>       bInterfaceClass       255 
>       bInterfaceSubClass      0 
>       bInterfaceProtocol      0 
>       iInterface              0 
>       Endpoint Descriptor:
>         bLength                 7
>         bDescriptorType         5
>         bEndpointAddress     0x01  EP 1 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     0x82  EP 2 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     0x83  EP 3 IN
>         bmAttributes            3
>           Transfer Type            Interrupt
>           Synch Type               None
>           Usage Type               Data
>         wMaxPacketSize     0x0040  1x 64 bytes
>         bInterval               1
>       Endpoint Descriptor:
>         bLength                 7
>         bDescriptorType         5
>         bEndpointAddress     0x04  EP 4 OUT
>         bmAttributes            2
>           Transfer Type            Bulk
>           Synch Type               None
>           Usage Type               Data
>         wMaxPacketSize     0x0040  1x 64 bytes
>         bInterval               0

Hm... this Endpoint should be Interrupt, not Bulk. If you search for
lsusb of this kind of adapter all of them list EP3 and EP4 as Interrupt.

what did went wrong here? Is it not working in USB High Speed mode?



More information about the linux-snps-arc mailing list