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. BUG=chrome-os-partner:26687 TEST=Manual on Rambi w/ USB_DEBUG enabled in libpayload. Boot with SanDisk Extreme USB 3.0 drive in USB 3.0 port, verify that after STALL is encountered reset succeeds and device is initialized without extra delay. BRANCH=Rambi Signed-off-by: Shawn Nematbakhsh <shawnn@chromium.org> Change-Id: I852b87621861109e596ec24b78a8f036d796ff14 Reviewed-on: https://chromium-review.googlesource.com/192866 Reviewed-by: Aaron Durbin <adurbin@chromium.org> Reviewed-by: Julius Werner <jwerner@chromium.org>
This commit is contained in:
parent
152df810ff
commit
e67e4f0545
1 changed files with 3 additions and 10 deletions
|
|
@ -439,8 +439,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;
|
||||
|
|
@ -465,10 +464,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) {
|
||||
|
|
@ -580,7 +575,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;
|
||||
}
|
||||
|
||||
|
|
@ -691,7 +686,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;
|
||||
}
|
||||
|
||||
|
|
@ -708,8 +703,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"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue