提交 fc90c06c 编写于 作者: W Wolfgang Denk

Merge branch 'master' of git://git.denx.de/u-boot-usb

...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
#include <usb.h> #include <usb.h>
#include <asm/io.h> #include <asm/io.h>
#include <malloc.h> #include <malloc.h>
#include <watchdog.h>
#include "ehci.h" #include "ehci.h"
...@@ -229,7 +230,7 @@ static int ehci_reset(void) ...@@ -229,7 +230,7 @@ static int ehci_reset(void)
int ret = 0; int ret = 0;
cmd = ehci_readl(&hcor->or_usbcmd); cmd = ehci_readl(&hcor->or_usbcmd);
cmd |= CMD_RESET; cmd = (cmd & ~CMD_RUN) | CMD_RESET;
ehci_writel(&hcor->or_usbcmd, cmd); ehci_writel(&hcor->or_usbcmd, cmd);
ret = handshake((uint32_t *)&hcor->or_usbcmd, CMD_RESET, 0, 250 * 1000); ret = handshake((uint32_t *)&hcor->or_usbcmd, CMD_RESET, 0, 250 * 1000);
if (ret < 0) { if (ret < 0) {
...@@ -452,6 +453,7 @@ ehci_submit_async(struct usb_device *dev, unsigned long pipe, void *buffer, ...@@ -452,6 +453,7 @@ ehci_submit_async(struct usb_device *dev, unsigned long pipe, void *buffer,
token = hc32_to_cpu(vtd->qt_token); token = hc32_to_cpu(vtd->qt_token);
if (!(token & 0x80)) if (!(token & 0x80))
break; break;
WATCHDOG_RESET();
} while (get_timer(ts) < CONFIG_SYS_HZ); } while (get_timer(ts) < CONFIG_SYS_HZ);
/* Disable async schedule. */ /* Disable async schedule. */
...@@ -491,6 +493,8 @@ ehci_submit_async(struct usb_device *dev, unsigned long pipe, void *buffer, ...@@ -491,6 +493,8 @@ ehci_submit_async(struct usb_device *dev, unsigned long pipe, void *buffer,
break; break;
default: default:
dev->status = USB_ST_CRC_ERR; dev->status = USB_ST_CRC_ERR;
if ((token & 0x40) == 0x40)
dev->status |= USB_ST_STALLED;
break; break;
} }
dev->act_len = length - ((token >> 16) & 0x7fff); dev->act_len = length - ((token >> 16) & 0x7fff);
......
...@@ -34,7 +34,6 @@ int ehci_hcd_init(void) ...@@ -34,7 +34,6 @@ int ehci_hcd_init(void)
hccr = (struct ehci_hccr *)(CONFIG_SYS_PPC4XX_USB_ADDR); hccr = (struct ehci_hccr *)(CONFIG_SYS_PPC4XX_USB_ADDR);
hcor = (struct ehci_hcor *)((uint32_t) hccr + hcor = (struct ehci_hcor *)((uint32_t) hccr +
HC_LENGTH(ehci_readl(&hccr->cr_capbase))); HC_LENGTH(ehci_readl(&hccr->cr_capbase)));
usb_dev_init();
return 0; return 0;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册