From: Dave Tubbs <dave.tu...@portalislc.com>

Make sure each c67x00 TD has been executed or retry using the existing
retry mechanism. Reference Cypress Semiconductor BIOS User's Manual 1.2,
page 3-16

Signed-off-by: Dave Tubbs <dave.tu...@portalislc.com>
---
 drivers/usb/c67x00/c67x00-sched.c |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/drivers/usb/c67x00/c67x00-sched.c 
b/drivers/usb/c67x00/c67x00-sched.c
index aa49162..dd5bdb4 100644
--- a/drivers/usb/c67x00/c67x00-sched.c
+++ b/drivers/usb/c67x00/c67x00-sched.c
@@ -1033,6 +1033,12 @@ static inline void c67x00_check_td_list(struct 
c67x00_hcd *c67x00)
                    !td_acked(td))
                        goto cont;

+               /* at this point, there are no errors, but it's still possible 
that the
+               * td wasn't executed by the c67x00. Confirm it was executed or 
force a
+               * retry */
+               if(((td->retry_cnt) & TD_RETRYCNTMASK_ACT_FLG) && (td->status 
== 0))
+                       goto cont;
+
                /* Sequence ok and acked, don't need to fix toggle */
                ack_ok = 1;
 
-- 
1.7.1


--
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