lkml.org 
[lkml]   [2018]   [Feb]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 45/54] usb: renesas_usbhs: missed the "running" flag in usb_dmac with rx path
    Date
    4.14-stable review patch.  If anyone has any objections, please let me know.

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

    From: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>

    commit 17aa31f13cad25daa19d3f923323f552e87bc874 upstream.

    This fixes an issue that a gadget driver (usb_f_fs) is possible to
    stop rx transactions after the usb-dmac is used because the following
    functions missed to set/check the "running" flag.
    - usbhsf_dma_prepare_pop_with_usb_dmac()
    - usbhsf_dma_pop_done_with_usb_dmac()

    So, if next transaction uses pio, the usbhsf_prepare_pop() can not
    start the transaction because the "running" flag is 0.

    Fixes: 8355b2b3082d ("usb: renesas_usbhs: fix the behavior of some usbhs_pkt_handle")
    Cc: <stable@vger.kernel.org> # v3.19+
    Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
    Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/usb/renesas_usbhs/fifo.c | 5 +++++
    1 file changed, 5 insertions(+)

    --- a/drivers/usb/renesas_usbhs/fifo.c
    +++ b/drivers/usb/renesas_usbhs/fifo.c
    @@ -998,6 +998,10 @@ static int usbhsf_dma_prepare_pop_with_u
    if ((uintptr_t)pkt->buf & (USBHS_USB_DMAC_XFER_SIZE - 1))
    goto usbhsf_pio_prepare_pop;

    + /* return at this time if the pipe is running */
    + if (usbhs_pipe_is_running(pipe))
    + return 0;
    +
    usbhs_pipe_config_change_bfre(pipe, 1);

    ret = usbhsf_fifo_select(pipe, fifo, 0);
    @@ -1188,6 +1192,7 @@ static int usbhsf_dma_pop_done_with_usb_
    usbhsf_fifo_clear(pipe, fifo);
    pkt->actual = usbhs_dma_calc_received_size(pkt, chan, rcv_len);

    + usbhs_pipe_running(pipe, 0);
    usbhsf_dma_stop(pipe, fifo);
    usbhsf_dma_unmap(pkt);
    usbhsf_fifo_unselect(pipe, pipe->fifo);

    \
     
     \ /
      Last update: 2018-02-26 21:49    [W:6.558 / U:0.044 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site