On i.MX25 platform init sets up things like the polarity of the overcurrent pin. If the reset default value is still wrong at ehci_reset time, this results in an overcurrent event being pending in the hardware even if the pin is actually in it's inactive level. To prevent this call platform init before ehci_reset(). Without this change barebox fails to correctly handle the imagined overcurrent event resulting in the inability to access the contents of an USB thumb drive. So there must be another problem somewhere, but I didn't debug that. The change introduced in this patch works around this problem but is correct on its own anyhow. Note there is a chance that other platforms rely on the previous order, I'm not aware of actual problems though. The problem was debugged with Michael Grzeschik, thanks to him for his valuable aid. Signed-off-by: Michael Grzeschik <m.grzeschik@xxxxxxxxxxxxxx> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@xxxxxxxxxxxxxx> --- drivers/usb/host/ehci-hcd.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c index 9bbdda365c01..18ff6b589773 100644 --- a/drivers/usb/host/ehci-hcd.c +++ b/drivers/usb/host/ehci-hcd.c @@ -801,16 +801,16 @@ static int ehci_init(struct usb_host *host) ehci_halt(ehci); - /* EHCI spec section 4.1 */ - if (ehci_reset(ehci) != 0) - return -1; - if (ehci->init) { ret = ehci->init(ehci->drvdata); if (ret) return ret; } + /* EHCI spec section 4.1 */ + if (ehci_reset(ehci) != 0) + return -1; + memset(ehci->qh_list, 0, sizeof(struct QH) * NUM_TD); ehci->qh_list->qh_link = cpu_to_hc32((uint32_t)ehci->qh_list | QH_LINK_TYPE_QH); -- 2.19.0 _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox