Hi, On Thu, May 07, 2015 at 09:06:06AM -0700, Tony Lindgren wrote: > * Tim Nordell <tim.nordell@xxxxxxxxxxx> [150506 16:19]: > > Hi all - > > > > I'm running kernel v3.19 (although I've tried v4.1-rc2's version of the MUSB > > code) on a DM3730 processor. I'm running into an issue where if I enable > > MUSB Inventra DMA, plug in a USB Ethernet Dongle, and run iperf between the > > dongle and a PC, the MUSB driver stops working. I get the following in my > > kernel log, twice back-to-back: > > > > musb_host_rx 1762: Rx interrupt with no errors or packet! > > > > Any ideas? > > > > The test above works in PIO mode, but I'd like to reduce the system CPU > > usage of the driver by using DMA. I'm using a ASIX AX88772B Ethernet > > dongle, although, this shouldn't impact the error above. I also tried > > re-reading the RXCSR register immediately after the error printout above, > > and the immediate subsequent time it contains the bit the driver is looking > > for. I tried nesting the check so that if the bit the driver is looking for > > is set with an immediate subsequent read that it would continue past it, but > > it still keels over (albeit lasting maybe a second longer). > > > > Something about this feels race conditiony too. Depending on the kernel > > configuration options in the kernel debug menu (which slows down other parts > > of the kernel), or if I enable verbose debug message output from the MUSB > > driver, it lasts much, much longer before keeling over as a system. You can > > restore normal behavior by unplugging/replugging in the device. > > This sounds like some issue dealing with certain size transfers where > there's data remaining after a DMA transfer. You might be able to make > it easily reproducable with a variable size ping from your PC even with > debugging enabled. Something like the script below. > > Regards, > > Tony > > 8< -------------- > #!/bin/bash > > device=$1 > size=$2 > > while [ 1 ]; do > #echo "Pinging with size $size" > if ! ping -w0 -c1 $device -s$size > /dev/null 2>&1; then > break; > fi > size=$(expr $SIZE + 1) > > if [ $size -gt 8192 ]; then > size=1 > fi > done > > echo "Test ran up to $size" I'd be very much interested in getting such logs :-) -- balbi
Attachment:
signature.asc
Description: Digital signature