2017-08-26 23:31:41

by M D

[permalink] [raw]
Subject: atheros ath9k_htc - EP4 Issue / BOGUS urb xfer, pipe 1 != type 3

Hi,
I am using the TPLink TL721N on an ARM MX21 platform, Linux Kernel 3.0

I am facing the following issue when the adapter is connected directly
to the USB Hub.

1) ifconfig -a does not show the wlan node
2) the adapter is detected on the USB bus
3) The ath9k_htc modules are loaded

lsmod | grep ath

ath9k_htc 62752 0
mac80211 246895 1 ath9k_htc
ath9k_common 1844 1 ath9k_htc
ath9k_hw 420273 2 ath9k_htc,ath9k_common
ath 14838 3 ath9k_htc,ath9k_common,ath9k_hw
cfg80211 185010 3 ath9k_htc,mac80211,ath
compat 10249 5
ath9k_htc,mac80211,ath9k_common,ath9k_hw,cfg80211

3) A particular process goes into the D state when this issue occurs

root 2281 0.0 0.0 0 0 ? D 01:59 0:00
[firmware/htc_92]

4) dmesg shows the following

[ 78.304878] Loading modules backported from Linux version v3.12.8-0-g97f15f1
[ 78.304949] Backport generated by backports.git v3.12.8-1-0-geb41fad
[ 78.769683] cfg80211: Calling CRDA to update world regulatory domain
[ 79.806939] usb 1-2: ath9k_htc: Firmware htc_9271.fw requested
[ 79.811791] usbcore: registered new interface driver ath9k_htc
[ 80.336612] usb 1-2: ath9k_htc: Transferred FW: htc_9271.fw, size: 51008
[ 80.621685] ath9k_htc 1-2:1.0: ath9k_htc: HTC initialized with 33 credits

The htc_9271.fw being used is version 1.4 taken from here
https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/commit/htc_9271.fw?id=216de39deef589d1a233abb2037d765aebbf4151


The ath9k_htc drivers are being used from the backports project and
contains this patch
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/drivers/net/wireless/ath/ath9k/hif_usb.c?id=2b721118b7821107757eb1d37af4b60e877b27e7

However inspite of this Endpoint 4 is configured as Bulk

Bus 001 Device 002: ID 0cf3:9271 Atheros Communications, Inc. AR9271 802.11n
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 255 Vendor Specific Class
bDeviceSubClass 255 Vendor Specific Subclass
bDeviceProtocol 255 Vendor Specific Protocol
bMaxPacketSize0 64
idVendor 0x0cf3 Atheros Communications, Inc.
idProduct 0x9271 AR9271 802.11n
bcdDevice ff.ff
iManufacturer 16
iProduct 32
iSerial 48
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 Vendor Specific Class
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
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x05 EP 5 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 0x06 EP 6 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0


If I enable CONFIG_USB_DEBUG, then I always get the following error message
BOGUS urb xfer, pipe 1 != type 3

If I do not enable CONFIG_USB_DEBUG, the adapter works sometimes and
sometimes it does not. To get the adapter in a working state, I must
un plug it from the USB and then plug it back again.

AFTER A REBOOT
Once the above issue occurs, a software reboot renders the adapter not
to be enumerated/detected on the USB. That is a lsusb does not display
the model/serial of the adapter.

dmesg log:
usb 1-2: device descriptor read/64, error -110
usb 1-2: device descriptor read/64, error -110
usb 1-2: new full speed USB device number 5 using imx21-hcd
usb 1-2: device descriptor read/64, error -110
usb 1-2: device descriptor read/64, error -110
hub 1-0:1.0: unable to enumerate USB device on port 2


I referred to the instructions as mentioned here and ensured that
https://github.com/qca/open-ath9k-htc-firmware/wiki/usb-related-issues#bogus-urb-xfer-pipe-1--type-3

1) the driver has the patch
2) the firmware being used is 1.4

However the device is being configured in Full Speed mode.
usb 1-2: new full speed USB device number 2 using imx21-hcd

Could someone offer some suggestions if there are some workarounds in
the software? Is there anything more that I can try out or any areas I
can investigate to try and fix this issue? I am presently reading
through the device driver to see if I can fix it there, but am not
making much progress.

Regards,
Max


2017-08-27 05:38:52

by Oleksij Rempel

[permalink] [raw]
Subject: Re: atheros ath9k_htc - EP4 Issue / BOGUS urb xfer, pipe 1 != type 3

Am 27.08.2017 um 01:31 schrieb M D:
> Hi,
> I am using the TPLink TL721N on an ARM MX21 platform, Linux Kernel 3.0

are there any reason to use such old kernel?

> I am facing the following issue when the adapter is connected directly
> to the USB Hub.
>
> 1) ifconfig -a does not show the wlan node
> 2) the adapter is detected on the USB bus
> 3) The ath9k_htc modules are loaded
>

...

> AFTER A REBOOT
> Once the above issue occurs, a software reboot renders the adapter not
> to be enumerated/detected on the USB. That is a lsusb does not display
> the model/serial of the adapter.

If repluging help you. You can try to implement USB link reinit after FW
was uploaded. Theoretically it is a proper way to init FW.

I can imagine following scenario:
- USB adabter is starting internal bootloader and inialize some USB Caps
- FW is uploaded with different USB Cups which a re expected by host driver.
- USB Host Controller has idea about changes because USB link should be
reinited to populate them.

To implement this FW should be patched to reset usb line after start and
driver should recognize some how a reseted FW (different USB id or what
ever)
However as I tried to implement it, the result was not the same on
different hosts. In some cases host turned the power off on device reset
and FW was lost, so driver tried to upload it again. May be I did some
thing wrong.


> dmesg log:
> usb 1-2: device descriptor read/64, error -110
> usb 1-2: device descriptor read/64, error -110
> usb 1-2: new full speed USB device number 5 using imx21-hcd
> usb 1-2: device descriptor read/64, error -110
> usb 1-2: device descriptor read/64, error -110
> hub 1-0:1.0: unable to enumerate USB device on port 2
>
>
> I referred to the instructions as mentioned here and ensured that
> https://github.com/qca/open-ath9k-htc-firmware/wiki/usb-related-issues#bogus-urb-xfer-pipe-1--type-3
>
> 1) the driver has the patch
> 2) the firmware being used is 1.4
>
> However the device is being configured in Full Speed mode.
> usb 1-2: new full speed USB device number 2 using imx21-hcd

May be you will need just backport imx21-hcd patches too ;)

> Could someone offer some suggestions if there are some workarounds in
> the software? Is there anything more that I can try out or any areas I
> can investigate to try and fix this issue? I am presently reading
> through the device driver to see if I can fix it there, but am not
> making much progress.

--
Regards,
Oleksij


Attachments:
signature.asc (213.00 B)
OpenPGP digital signature