From: Dave Tubbs <dave.tubbs@xxxxxxxxxxxxxx> 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.tubbs@xxxxxxxxxxxxxx> --- 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 majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html