aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephen Rothwell <sfr@canb.auug.org.au>2021-09-30 14:06:05 +1000
committerStephen Rothwell <sfr@canb.auug.org.au>2021-09-30 14:06:05 +1000
commitbd92cc21cc1a2f5ab7b9dbdca8077f47a4b78493 (patch)
tree184b9387da9a6c8f24594a312927581da4364f39
parent382c181027614d75ce451eed625c012b07d96b8e (diff)
parent78665f57c3faa09f123c4818101526e43ae9b6a4 (diff)
downloaddevel-bd92cc21cc1a2f5ab7b9dbdca8077f47a4b78493.tar.gz
Merge branch 'for-usb-next' of git://git.kernel.org/pub/scm/linux/kernel/git/peter.chen/usb.git
-rw-r--r--drivers/usb/chipidea/udc.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/usb/chipidea/udc.c b/drivers/usb/chipidea/udc.c
index 8834ca6137219e..f9ca5010f65be7 100644
--- a/drivers/usb/chipidea/udc.c
+++ b/drivers/usb/chipidea/udc.c
@@ -49,6 +49,8 @@ ctrl_endpt_in_desc = {
.wMaxPacketSize = cpu_to_le16(CTRL_PAYLOAD_MAX),
};
+static int reprime_dtd(struct ci_hdrc *ci, struct ci_hw_ep *hwep,
+ struct td_node *node);
/**
* hw_ep_bit: calculates the bit number
* @num: endpoint number
@@ -599,6 +601,12 @@ static int _hardware_enqueue(struct ci_hw_ep *hwep, struct ci_hw_req *hwreq)
prevlastnode->ptr->next = cpu_to_le32(next);
wmb();
+
+ if (ci->rev == CI_REVISION_22) {
+ if (!hw_read(ci, OP_ENDPTSTAT, BIT(n)))
+ reprime_dtd(ci, hwep, prevlastnode);
+ }
+
if (hw_read(ci, OP_ENDPTPRIME, BIT(n)))
goto done;
do {