> > The isr is going to check for a status phase on the indexed endpoint.
> > Input endpoints have no status bits and can be skipped for that test.
> >
> > Signed-off-by: Michael Grzeschik <[email protected]>
> > ---
> > This patch is based on the change mentioned by Matthieu CASTET,
> > but moves the check before using hw_test_and_clear_setup_status.
> >
> > drivers/usb/chipidea/udc.c | 1 +
> > 1 file changed, 1 insertion(+)
> >
> > diff --git a/drivers/usb/chipidea/udc.c b/drivers/usb/chipidea/udc.c
> > index 69d20fb..9364184 100644
> > --- a/drivers/usb/chipidea/udc.c
> > +++ b/drivers/usb/chipidea/udc.c
> > @@ -989,6 +989,7 @@ __acquires(ci->lock)
> > }
> >
> > if (hwep->type != USB_ENDPOINT_XFER_CONTROL ||
> > + (i >= ci->hw_ep_max / 2) ||
> > !hw_test_and_clear_setup_status(ci, i))
> > continue;
> >
> > --
>
> Hi Michael,
>
> I can't accept this patch, it more likes a workaround for current broken
> code.
> In fact, we only handle ep0out (setup packet) for below code, please try
> below
> simple fix.
>
> diff --git a/drivers/usb/chipidea/udc.c b/drivers/usb/chipidea/udc.c
> index c318e66..b86ef9a 100644
> --- a/drivers/usb/chipidea/udc.c
> +++ b/drivers/usb/chipidea/udc.c
> @@ -997,15 +997,10 @@ __acquires(ci->lock)
> }
> }
>
> - if (hwep->type != USB_ENDPOINT_XFER_CONTROL ||
> - !hw_test_and_clear_setup_status(ci, i))
> + /* Only handle setup packet below */
> + if (i != 0)
> continue;
>
> - if (i != 0) {
> - dev_warn(ci->dev, "ctrl traffic at endpoint %d\n",
> i);
> - continue;
> - }
> -
> /*
> * Flush data and handshake transactions of previous
> * setup packet.
>
Sorry, it should clear ENDPTSETUPSTAT for ep0 before handling setup packet.
I have tested mass storage and g_serial, below patch should ok.
Anyway, it is a temp solution before we re-work interrupt handler for
data packet.
diff --git a/drivers/usb/chipidea/udc.c b/drivers/usb/chipidea/udc.c
index c318e66..5905e85 100644
--- a/drivers/usb/chipidea/udc.c
+++ b/drivers/usb/chipidea/udc.c
@@ -997,15 +997,9 @@ __acquires(ci->lock)
}
}
- if (hwep->type != USB_ENDPOINT_XFER_CONTROL ||
- !hw_test_and_clear_setup_status(ci, i))
+ if (i != 0 || !hw_test_and_clear(ci, OP_ENDPTSETUPSTAT, BIT(0)))
continue;
- if (i != 0) {
- dev_warn(ci->dev, "ctrl traffic at endpoint %d\n", i);
- continue;
- }
-
/*
* Flush data and handshake transactions of previous
* setup packet.
Peter
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html