lkml.org 
[lkml]   [2020]   [Apr]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.6 34/79] usb: gadget: udc: atmel: Fix vbus disconnect handling
    Date
    From: Cristian Birsan <cristian.birsan@microchip.com>

    [ Upstream commit 12b94da411f9c6d950beb067d913024fd5617a61 ]

    A DMA transfer can be in progress while vbus is lost due to a cable
    disconnect. For endpoints that use DMA, this condition can lead to
    peripheral hang. The patch ensures that endpoints are disabled before
    the clocks are stopped to prevent this issue.

    Fixes: a64ef71ddc13 ("usb: gadget: atmel_usba_udc: condition clocks to vbus state")
    Signed-off-by: Cristian Birsan <cristian.birsan@microchip.com>
    Signed-off-by: Felipe Balbi <balbi@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/usb/gadget/udc/atmel_usba_udc.c | 4 ++--
    1 file changed, 2 insertions(+), 2 deletions(-)

    diff --git a/drivers/usb/gadget/udc/atmel_usba_udc.c b/drivers/usb/gadget/udc/atmel_usba_udc.c
    index 6e0432141c409..22200341c8ec3 100644
    --- a/drivers/usb/gadget/udc/atmel_usba_udc.c
    +++ b/drivers/usb/gadget/udc/atmel_usba_udc.c
    @@ -1951,10 +1951,10 @@ static irqreturn_t usba_vbus_irq_thread(int irq, void *devid)
    usba_start(udc);
    } else {
    udc->suspended = false;
    - usba_stop(udc);
    -
    if (udc->driver->disconnect)
    udc->driver->disconnect(&udc->gadget);
    +
    + usba_stop(udc);
    }
    udc->vbus_prev = vbus;
    }
    --
    2.20.1
    \
     
     \ /
      Last update: 2020-04-30 15:52    [W:4.026 / U:0.112 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site