Sergei Shtylyov wrote: > Gadget stalling a zero-length SETUP request results in this error message: > > SetupEnd came in a wrong ep0stage idle > > In order to avoid it, always set the CSR0.DataEnd bit after detecting a zero- > length request. Add the missing '\n' to the error message itself as well... > > Signed-off-by: Sergei Shtylyov <sshtylyov@xxxxxxxxxxxxx> > Cc: stable@xxxxxxxxxx Tested-by: Anand Gadiyar <gadiyar@xxxxxx> on a 3430 SDP. An easy way to reproduce this is to run `test.sh control` with the script and testusb.c program from [1] - Anand [1] www.linux-usb.org/usbtest > > --- > The patch is against the recent Linus' tree. 2.6.31.y needs it as well... > > drivers/usb/musb/musb_gadget_ep0.c | 14 ++++++++++---- > 1 files changed, 10 insertions(+), 4 deletions(-) > > Index: linux-2.6/drivers/usb/musb/musb_gadget_ep0.c > =================================================================== > --- linux-2.6.orig/drivers/usb/musb/musb_gadget_ep0.c > +++ linux-2.6/drivers/usb/musb/musb_gadget_ep0.c > @@ -646,7 +646,7 @@ irqreturn_t musb_g_ep0_irq(struct musb * > musb->ep0_state = MUSB_EP0_STAGE_STATUSIN; > break; > default: > - ERR("SetupEnd came in a wrong ep0stage %s", > + ERR("SetupEnd came in a wrong ep0stage %s\n", > decode_ep0stage(musb->ep0_state)); > } > csr = musb_readw(regs, MUSB_CSR0); > @@ -769,12 +769,18 @@ setup: > handled = service_zero_data_request( > musb, &setup); > > + /* > + * We're expecting no data in any case, so > + * always set the DATAEND bit -- doing this > + * here helps avoid SetupEnd interrupt coming > + * in the idle stage when we're stalling... > + */ > + musb->ackpend |= MUSB_CSR0_P_DATAEND; > + > /* status stage might be immediate */ > - if (handled > 0) { > - musb->ackpend |= MUSB_CSR0_P_DATAEND; > + if (handled > 0) > musb->ep0_state = > MUSB_EP0_STAGE_STATUSIN; > - } > break; > > /* sequence #1 (IN to host), includes GET_STATUS -- 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