Explorar o código

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

Wolfgang Denk %!s(int64=14) %!d(string=hai) anos
pai
achega
fc90c06cac
Modificáronse 2 ficheiros con 5 adicións e 2 borrados
  1. 5 1
      drivers/usb/host/ehci-hcd.c
  2. 0 1
      drivers/usb/host/ehci-ppc4xx.c

+ 5 - 1
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);

+ 0 - 1
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;
 }