[U-Boot] USB EHCI problem on NeufBox V6

Adrien Ricciardi adrien.ricciardi at hotmail.fr
Wed Jun 11 12:02:13 CEST 2014


Hello,

I am currently working on a Broadcom BCM63168 SoC board (NeufBox V6). This is a MIPS32 big endian CPU.
My goal is to replace the CFERAM stage by U-Boot 2014.01 (I keep the CFEROM for now as it contains a lot of magic).

I managed to make U-Boot start on the platform. It can mount an UBIFS file system stored on the NAND chip and load Linux.
Now, I would like to add the USB Host support to U-Boot in order to boot from an USB stick.
Thus, I tried to make EHCI drivers based on the working Linux ones. The SoC integrates a (supposed) standard EHCI controller.

However, I can't start the USB subsystem (using the command "usb start") because the USB enumeration process crashes when it sends a GetDescriptor() request to every device but the builtin root hub. When the U-Boot USB calls ehci_submit_async(), the EHCI controller times out (no matter what the timeout delay is). When the ehci_submit_async() function is called another time, a bad cache address (0x00000000) is provided to the function :
     /*
     * Invalidate the memory area occupied by buffer
     * Don't try to fix the buffer alignment, if it isn't properly
     * aligned it's upper layer's fault so let invalidate_dcache_range()
     * vow about it. But we have to fix the length as it's actual
     * transfer length and can be unaligned. This is potentially
     * dangerous operation, it's responsibility of the calling
     * code to make sure enough space is reserved.
     */
    invalidate_dcache_range((uint32_t)buffer,
        ALIGN((uint32_t)buffer + length, ARCH_DMA_MINALIGN));
and everything crashes.

By disconnecting every USB hub and device connected to the SoC USB Host peripheral, only the builtin root hub is recognized by the command "usb start" and U-Boot does not crash. I tried to connect an USB sniffer on the bus (an Ellisys 200) to capture the USB frames. The EHCI timeout occurs when the USB subsystem tries to send a GetDescriptor() request (using ehci_submit_async()). Only bad Start Of Frames are captured by the USB sniffer, and when U-Boot crashes the bad SOF continue to be emitted (I think the EHCI controller is hanged too).

I tried to update the drivers/usb U-Boot directory with the one from U-Boot 2014.04 and with the one from the git repository, but the problem could not be solved.

Have you got any idea on what can prevent the EHCI controller to communicate with the external USB bus through the SoC root hub ?

Best regards,
Adrien RICCIARDI

 		 	   		  


More information about the U-Boot mailing list