[U-Boot] usb: Clear CMD_RUN while issuing CMD_RESET in ehci_reset()

Submitted by Stefan Roese on Nov. 26, 2010, 2:44 p.m.

Details

Message ID 1290782640-9159-1-git-send-email-sr@denx.de
State Accepted
Commit 273d72044c383cc49ae7a8a70b2fc32c18b00a41
Delegated to: Remy Bohmer
Headers show

Commit Message

Stefan Roese Nov. 26, 2010, 2:44 p.m.
This patch fixes a problem noticed on lwmon5 (PPC440EPx) using the
common EHCI driver, when "usb reset" is issued multiple times.
Upon the 2nd (and further) "usb reset" command, the command fails
with the following messages:

=> usb reset
(Re)start USB...
USB:   Register 1111 NbrPorts 1
USB EHCI 1.00
scanning bus for devices... 5 USB Device(s) found
       scanning bus for storage devices... 2 Storage Device(s) found
=> usb reset
(Re)start USB...
USB:   EHCI fail to reset
Error, couldn't init Lowlevel part

This patch fixes this problem. Now "usb reset" can be called multiple
times.

Signed-off-by: Stefan Roese <sr@denx.de>
Cc: Remy Bohmer <linux@bohmer.net>
---
 drivers/usb/host/ehci-hcd.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

Comments

Remy Bohmer Nov. 26, 2010, 8:24 p.m.
Hi,

2010/11/26 Stefan Roese <sr@denx.de>:
> This patch fixes a problem noticed on lwmon5 (PPC440EPx) using the
> common EHCI driver, when "usb reset" is issued multiple times.
> Upon the 2nd (and further) "usb reset" command, the command fails
> with the following messages:
>
> => usb reset
> (Re)start USB...
> USB:   Register 1111 NbrPorts 1
> USB EHCI 1.00
> scanning bus for devices... 5 USB Device(s) found
>       scanning bus for storage devices... 2 Storage Device(s) found
> => usb reset
> (Re)start USB...
> USB:   EHCI fail to reset
> Error, couldn't init Lowlevel part
>
> This patch fixes this problem. Now "usb reset" can be called multiple
> times.
>
> Signed-off-by: Stefan Roese <sr@denx.de>
> Cc: Remy Bohmer <linux@bohmer.net>
> ---
>  drivers/usb/host/ehci-hcd.c |    2 +-
>  1 files changed, 1 insertions(+), 1 deletions(-)

Applied to u-boot-usb. Thanks.

Kind regards,

Remy

Patch hide | download patch | download mbox

diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
index b88488e..3c40a76 100644
--- a/drivers/usb/host/ehci-hcd.c
+++ b/drivers/usb/host/ehci-hcd.c
@@ -230,7 +230,7 @@  static int ehci_reset(void)
 	int ret = 0;
 
 	cmd = ehci_readl(&hcor->or_usbcmd);
-	cmd |= CMD_RESET;
+	cmd = (cmd & ~CMD_RUN) | CMD_RESET;
 	ehci_writel(&hcor->or_usbcmd, cmd);
 	ret = handshake((uint32_t *)&hcor->or_usbcmd, CMD_RESET, 0, 250 * 1000);
 	if (ret < 0) {