lkml.org 
[lkml]   [2010]   [Jan]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[16/39] USB: musb: gadget_ep0: avoid SetupEnd interrupt
    2.6.31-stable review patch.  If anyone has any objections, please let us know.

    ------------------

    From: Sergei Shtylyov <sshtylyov@ru.mvista.com>

    commit 17be5c5f5ef99c94374e07f71effa78e93a20eda upstream.

    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@ru.mvista.com>
    Acked-by: Anand Gadiyar <gadiyar@ti.com>
    Signed-off-by: Felipe Balbi <felipe.balbi@nokia.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    ---
    drivers/usb/musb/musb_gadget_ep0.c | 14 ++++++++++----
    1 file changed, 10 insertions(+), 4 deletions(-)

    --- a/drivers/usb/musb/musb_gadget_ep0.c
    +++ b/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



    \
     
     \ /
      Last update: 2010-01-05 21:17    [W:0.028 / U:0.084 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site