mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-12-01 08:59:33 +00:00
usb: xhci: Recover from halted bulk endpoints
There is currently no codepath to recover from this case. In principle we could require that the upper layer do this explicitly, but let's just do it in xHCI when the next bulk transfer is started, since that reasonably implies whatever caused the problem has been dealt with. Signed-off-by: Hector Martin <marcan@marcan.st> Reviewed-by: Marek Vasut <marex@denx.de>
This commit is contained in:
parent
6f64f0ae23
commit
9d88bd4dcf
1 changed files with 8 additions and 0 deletions
|
@ -671,6 +671,14 @@ int xhci_bulk_tx(struct usb_device *udev, unsigned long pipe,
|
||||||
|
|
||||||
ep_ctx = xhci_get_ep_ctx(ctrl, virt_dev->out_ctx, ep_index);
|
ep_ctx = xhci_get_ep_ctx(ctrl, virt_dev->out_ctx, ep_index);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If the endpoint was halted due to a prior error, resume it before
|
||||||
|
* the next transfer. It is the responsibility of the upper layer to
|
||||||
|
* have dealt with whatever caused the error.
|
||||||
|
*/
|
||||||
|
if ((le32_to_cpu(ep_ctx->ep_info) & EP_STATE_MASK) == EP_STATE_HALTED)
|
||||||
|
reset_ep(udev, ep_index);
|
||||||
|
|
||||||
ring = virt_dev->eps[ep_index].ring;
|
ring = virt_dev->eps[ep_index].ring;
|
||||||
/*
|
/*
|
||||||
* How much data is (potentially) left before the 64KB boundary?
|
* How much data is (potentially) left before the 64KB boundary?
|
||||||
|
|
Loading…
Reference in a new issue