[coreboot-gerrit] New patch to review for coreboot: 6ee027a libpayload: usb: xhci: Fix STALL endpoint handling

Isaac Christensen (isaac.christensen@se-eng.com) gerrit at coreboot.org
Fri Oct 3 00:37:14 CEST 2014


Isaac Christensen (isaac.christensen at se-eng.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/7011

-gerrit

commit 6ee027a4acd145172411f14dbd3b2a88d1238f4a
Author: Shawn Nematbakhsh <shawnn at chromium.org>
Date:   Wed Apr 2 09:14:32 2014 -0700

    libpayload: usb: xhci: Fix STALL endpoint handling
    
    - Remove the call to clear_stall in xhci_reset_endpoint because we will
      call clear_stall from the mass-storage driver.
    - Remove the xhci_reset_endpoint call from xhci_bulk on STALL since we
      will reset on the next transfer anyway.
    - Remove the clear_halt parameter from xhci_bulk since it's now unused.
    
    Signed-off-by: Shawn Nematbakhsh <shawnn at chromium.org>
    Change-Id: I852b87621861109e596ec24b78a8f036d796ff14
    Reviewed-on: https://chromium-review.googlesource.com/192866
    Reviewed-by: Aaron Durbin <adurbin at chromium.org>
    Reviewed-by: Julius Werner <jwerner at chromium.org>
    (cherry picked from commit e67e4f0545cbdc074328c83c7edccf9e712cd7be)
    Signed-off-by: Isaac Christensen <isaac.christensen at se-eng.com>
---
 payloads/libpayload/drivers/usb/xhci.c | 13 +++----------
 1 file changed, 3 insertions(+), 10 deletions(-)

diff --git a/payloads/libpayload/drivers/usb/xhci.c b/payloads/libpayload/drivers/usb/xhci.c
index 5b30d0c..2331485 100644
--- a/payloads/libpayload/drivers/usb/xhci.c
+++ b/payloads/libpayload/drivers/usb/xhci.c
@@ -461,8 +461,7 @@ xhci_stop (hci_t *controller)
 }
 
 static int
-xhci_reset_endpoint(usbdev_t *const dev, endpoint_t *const ep,
-		    const int clear_halt)
+xhci_reset_endpoint(usbdev_t *const dev, endpoint_t *const ep)
 {
 	xhci_t *const xhci = XHCI_INST(dev->controller);
 	const int slot_id = dev->address;
@@ -487,10 +486,6 @@ xhci_reset_endpoint(usbdev_t *const dev, endpoint_t *const ep,
 			dev->controller->devices[hub]->speed == HIGH_SPEED)
 		/* TODO */;
 
-	/* Try clearing the device' halt condition on non-control endpoints */
-	if (clear_halt && ep)
-		clear_stall(ep);
-
 	/* Reset transfer ring if the endpoint is in the right state */
 	const unsigned ep_state = EC_GET(STATE, epctx);
 	if (ep_state == 3 || ep_state == 4) {
@@ -602,7 +597,7 @@ xhci_control(usbdev_t *const dev, const direction_t dir,
 	/* Reset endpoint if it's not running */
 	const unsigned ep_state = EC_GET(STATE, epctx);
 	if (ep_state > 1) {
-		if (xhci_reset_endpoint(dev, NULL, 0))
+		if (xhci_reset_endpoint(dev, NULL))
 			return -1;
 	}
 
@@ -713,7 +708,7 @@ xhci_bulk(endpoint_t *const ep, const int size, u8 *const src,
 	/* Reset endpoint if it's not running */
 	const unsigned ep_state = EC_GET(STATE, epctx);
 	if (ep_state > 1) {
-		if (xhci_reset_endpoint(ep->dev, ep, 0))
+		if (xhci_reset_endpoint(ep->dev, ep))
 			return -1;
 	}
 
@@ -730,8 +725,6 @@ xhci_bulk(endpoint_t *const ep, const int size, u8 *const src,
 			xhci_debug("Stopping ID %d EP %d\n",
 				   ep->dev->address, ep_id);
 			xhci_cmd_stop_endpoint(xhci, ep->dev->address, ep_id);
-		} else if (ret == -CC_STALL_ERROR) {
-			xhci_reset_endpoint(ep->dev, ep, 1);
 		}
 		xhci_debug("Bulk transfer failed: %d\n"
 			   "  ep state: %d -> %d\n"



More information about the coreboot-gerrit mailing list