Subject: Re: Problem with full speed devices on PowerPC MPC5121 host port

From: Matthias Fuchs <[email-masked]>
Date: Tue, 17 Jan 2012 15:12:50 +0100

On 06.01.2012 19:03, Alan Stern wrote:
> On Fri, 6 Jan 2012, Matthias Fuchs wrote:
> 
>> For my eyes it does not really look like a general USB issue.
>> It looks like a problem with the Freescale EHCI implementation that is
>> influenced by high interrupt or internal bus load caused by the flood ping.
> 
> Indeed, it might be a problem with the built-in Transaction Translator.  
> That would explain why it affect full-speed devices.
> 
> However, I would expect the resetting the controller hardware (which 
> happens when you reload the ehci-fsl driver) would fix any such issues.  
> It's hard to imagine how a problem could survive a reset like that.

I did the tests again. When the error occured I reloaded the ehci-hcd driver and reconnected the device. It ends up with some kernel messages 
that come up time after time:

usb 1-1: new full-speed USB device number 2 using fsl-ehci
usb 1-1: device descriptor read/64, error -110
usb 1-1: device descriptor read/64, error -110
usb 1-1: new full-speed USB device number 3 using fsl-ehci
usb 1-1: device descriptor read/64, error -110
usb 1-1: device descriptor read/64, error -110
usb 1-1: new full-speed USB device number 4 using fsl-ehci
usb 1-1: device not accepting address 4, error -110
usb 1-1: new full-speed USB device number 5 using fsl-ehci
usb 1-1: device not accepting address 5, error -110
hub 1-0:1.0: unable to enumerate USB device on port 1

A recommondation from freescale was to check the TXFILLTUNING register settings ("Initialization of this registers can produce problem if full-speed device is used").

So I tried various values in the TXFILLTUNING register (I added this
code to ehci_reset()). Finally I disabled USB streaming mode in the USBMODE register (set bit USBMODE_SDIS - btw., it should be defined as "1 << 4" in ehci_def.h at least for the MPC5121).

All this does not fix the problem or even have an impact.

This is my stripped down version of the test:

on the MPC5121 unit I do nothing but:

$~ stty -F /dev/ttyUSB0 -echo -crtscts -cstopb
$~ stty -F /dev/ttyUSB0 115200
$~ while true; do \
        read LINE < /dev/ttyUSB0 \
        echo $LINE > /dev/ttyUSB0 \
done

The other side looks like this:

$~ while true; do \
	echo "_THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG 1234567890#" > /dev/ttyS0 \
done

and also I start a flood ping against the MPC5121 unit (.. to speed things up).

Can anybody with a MPC5121 board try to reproduce this?

Matthias