diff options
| -rw-r--r-- | drivers/usb/host/ehci-hcd.c | 6 | ||||
| -rw-r--r-- | drivers/usb/host/ehci-ppc4xx.c | 1 | 
2 files changed, 5 insertions, 2 deletions
diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c index 982f96e8b..6eb38a413 100644 --- a/drivers/usb/host/ehci-hcd.c +++ b/drivers/usb/host/ehci-hcd.c @@ -25,6 +25,7 @@  #include <usb.h>  #include <asm/io.h>  #include <malloc.h> +#include <watchdog.h>  #include "ehci.h" @@ -229,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) { @@ -452,6 +453,7 @@ ehci_submit_async(struct usb_device *dev, unsigned long pipe, void *buffer,  		token = hc32_to_cpu(vtd->qt_token);  		if (!(token & 0x80))  			break; +		WATCHDOG_RESET();  	} while (get_timer(ts) < CONFIG_SYS_HZ);  	/* Disable async schedule. */ @@ -491,6 +493,8 @@ ehci_submit_async(struct usb_device *dev, unsigned long pipe, void *buffer,  			break;  		default:  			dev->status = USB_ST_CRC_ERR; +			if ((token & 0x40) == 0x40) +				dev->status |= USB_ST_STALLED;  			break;  		}  		dev->act_len = length - ((token >> 16) & 0x7fff); diff --git a/drivers/usb/host/ehci-ppc4xx.c b/drivers/usb/host/ehci-ppc4xx.c index 946a0a07e..117991998 100644 --- a/drivers/usb/host/ehci-ppc4xx.c +++ b/drivers/usb/host/ehci-ppc4xx.c @@ -34,7 +34,6 @@ int ehci_hcd_init(void)  	hccr = (struct ehci_hccr *)(CONFIG_SYS_PPC4XX_USB_ADDR);  	hcor = (struct ehci_hcor *)((uint32_t) hccr +  		HC_LENGTH(ehci_readl(&hccr->cr_capbase))); -	usb_dev_init();  	return 0;  }  |