|
|
|
@ -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); |
|
|
|
|