Hello all,

I've come across some strangeness when using a USB ath9k on a USB 1
interface.  I'm getting the "BOGUS urb xfer, pipe 1 != type 3" errors that
have been posted and discussed already, but the cause of the errors in my
case is different than those already reported.

I did some digging to trace down what was going on, and looks like it's
caused by a new scenario when connected to a USB 1 interface.  The ROM code
on the device uses a different interface descriptor when connected at
FullSpeed instead of HighSpeed.  The HS descriptor has both EP3 and EP4 set
as interrupt endpoints and this is what is reflected in Linux.

When the device is connected at FS however a separate descriptor is used
which changes some of the max packet sizes as well as defining EP4 as bulk
instead of interrupt type.  Recent kernels have removed some code in the
driver that was forcing EP3 and 4 to be bulk type and now this results in
the kernel spamming the BOGUS message while the device is connected.

I'm not sure of the best route to go about fixing this.  Previously the
firmware was patching the descriptor after the FW was loaded, but this
doesn't seem to affect the descriptor used by Linux (since I think the
descriptor is requested and parsed before the FW is uploaded to the
device).  It doesn't appear to re-read the descriptor from the USB device
either.  This might happen after the device is suspended but the system
it's connected to doesn't suspend so maybe this is why I haven't seen it
happen.  Because of this, I think patching the descriptor in the FW loaded
from the system isn't going to help much.

So I guess there are two other options, either have the system fix up the
descriptor to appear to be interrupt type, or have the driver use bulk type
on EP4 when connected at FullSpeed.

Anyone have any thoughts or suggestions?

--Dave
_______________________________________________
ath9k-devel mailing list
ath9k-devel@lists.ath9k.org
https://lists.ath9k.org/mailman/listinfo/ath9k-devel

Reply via email to