[U-Boot] U-Boot Rockchip dwc_hcd question for low-speed devices

Josh Sanford joshs6502 at gmail.com
Fri Dec 18 14:26:05 CET 2015


All,

I am trying to use USB within U-Boot on a Firefly RK3288 (Rockchip) board,
and I am able to enumerate high-speed devices, but not full-speed or
low-speed devices.  I know that the devices are functional, because they
work on the same physical hardware when I boot into Linux.  Note that I'm
using "U-Boot 2014.10-RK3288-02".

As an aside, the built-in "USB 2.0 Hub [MTT]" hub never generates a
USB_PORT_STAT_C_CONNECTION for me, even though USB_PORT_STAT_CONNECTION
goes high immediately after powering on, so I forcibly assert
USB_PORT_STAT_C_CONNECTION to allow the rest of the tree to enumerate.

High-speed devices can be nested as deeply as I wish and still show up
properly, but I can't get low-speed devices (i.e. a keyboard) to work in
any hub port, including any of the ports directly on the board.  All
attempts to read from my low-speed devices return all zeros.  When I dig a
little deeper, I find myself in int dwc_wait_for_complete(struct usb_device
*dev, uint32_t channel_num, uint32_t *hcStat, uint32_t *errCnt) {}.

On the second iteration through the goto loop, hcintn.b.chhltd and
hcintn.b.xacterr are both asserted, but hcintn.b.ack, hcintn.b.nak, and
hcintn.b.nyet are not, and errCnt is only 1, so the code sets *hcStat =
HCSTAT_REINIT and returns.

I do notice that dwc_hcd.c seems not to have any code to support split
transactions (or perhaps I simply haven't seen it yet).  If true, I wonder
whether this code is actually expected to support full-speed and low-speed
devices.  Do you have any thoughts on the matter?  I wish I were more of a
USB expert, but I'm regrettably quite a novice.

Regards,

Josh


More information about the U-Boot mailing list