patch "usb: renesas_usbhs: missed the "running" flag in usb_dmac with rx" added to usb-linus
Subsystems (2)
This is a note to let you know that I've just added the patch titled
usb: renesas_usbhs: missed the "running" flag in usb_dmac with rx
to my usb git tree which can be found at
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git
in the usb-linus branch.
The patch will show up in the next release of the linux-next tree (usually sometime within the next 24 hours during the week.)
The patch will hopefully also be merged in Linus's tree for the next -rc kernel release.
If you have any questions about this process, please let me know.
Quoted 1 line
From
17aa31f13cad25daa19d3f923323f552e87bc874Mon Sep 17 00:00:00 2001
From: Yoshihiro Shimoda <[email protected]>
Date: Mon, 5 Feb 2018 17:12:35 +0900
Subject: usb: renesas_usbhs: missed the "running" flag in usb_dmac with rx
path
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.
--- drivers/usb/renesas_usbhs/fifo.c | 5 +++++ 1 file changed, 5 insertions(+)
drivers/usb/renesas_usbhs/fifo.c +5 -0
@@ -982,6 +982,10 @@ static int usbhsf_dma_prepare_pop_with_usb_dmac(struct usbhs_pkt *pkt,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 );
@@ -1172,6 +1176,7 @@ static int usbhsf_dma_pop_done_with_usb_dmac(struct usbhs_pkt *pkt,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);
Signature · 1 line
2.16.1