From: Sevak Arakelyan <sev...@synopsys.com>

Stop sending complete split requests in case of ISOC IN split transfers
after getting data with PID0. Otherwise we will get a NYET for each
additional IN token.

Signed-off-by: Sevak Arakelyan <sev...@synopsys.com>
Signed-off-by: John Youn <johny...@synopsys.com>
---
 drivers/usb/dwc2/hcd_intr.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/drivers/usb/dwc2/hcd_intr.c b/drivers/usb/dwc2/hcd_intr.c
index 0f26334..b8f4b6a 100644
--- a/drivers/usb/dwc2/hcd_intr.c
+++ b/drivers/usb/dwc2/hcd_intr.c
@@ -915,6 +915,8 @@ static int dwc2_xfercomp_isoc_split_in(struct dwc2_hsotg 
*hsotg,
 {
        struct dwc2_hcd_iso_packet_desc *frame_desc;
        u32 len;
+       u32 hctsiz;
+       u32 pid;
 
        if (!qtd->urb)
                return 0;
@@ -932,7 +934,10 @@ static int dwc2_xfercomp_isoc_split_in(struct dwc2_hsotg 
*hsotg,
 
        qtd->isoc_split_offset += len;
 
-       if (frame_desc->actual_length >= frame_desc->length) {
+       hctsiz = dwc2_readl(hsotg->regs + HCTSIZ(chnum));
+       pid = (hctsiz & TSIZ_SC_MC_PID_MASK) >> TSIZ_SC_MC_PID_SHIFT;
+
+       if (frame_desc->actual_length >= frame_desc->length || pid == 0) {
                frame_desc->status = 0;
                qtd->isoc_frame_index++;
                qtd->complete_split = 0;
-- 
2.10.0

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to