Message ID | 20210611105411.543008-1-yoshihiro.shimoda.uh@renesas.com |
---|---|
State | New |
Headers | show |
Series | usb: renesas_usbhs: Fix superfluous interrupt happens after usb_pkt_pop() | expand |
Hi Greg, > From: gregkh@linuxfoundation.org, Sent: Friday, June 11, 2021 10:33 PM > > On Fri, Jun 11, 2021 at 10:57:56AM +0000, Yoshihiro Shimoda wrote: > > Hi again, > > > > > From: Yoshihiro Shimoda, Sent: Friday, June 11, 2021 7:54 PM > > > Subject: [PATCH] usb: renesas_usbhs: Fix superfluous interrupt happens after usb_pkt_pop() > > > > I'm sorry. I mistook to send this patch. > > So, I would like to recall this version. > > Which version/patch? You sent 2 here. > > confused, I'm very sorry for the confusion. I would like to recall this patch which is subject "[PATCH] usb: renesas_usbhs: Fix superfluous interrupt happens after usb_pkt_pop()" And, I would like to apply the patch which is the following: https://lore.kernel.org/linux-renesas-soc/20210611105411.543008-2-yoshihiro.shimoda.uh@renesas.com/ Subject: "[PATCH] usb: renesas_usbhs: Fix superfluous irqs happen after usb_pkt_pop()" Best regards, Yoshihiro Shimoda
diff --git a/drivers/usb/renesas_usbhs/fifo.c b/drivers/usb/renesas_usbhs/fifo.c index b5e7991dc7d9..a3c2b01ccf7b 100644 --- a/drivers/usb/renesas_usbhs/fifo.c +++ b/drivers/usb/renesas_usbhs/fifo.c @@ -101,6 +101,8 @@ static struct dma_chan *usbhsf_dma_chan_get(struct usbhs_fifo *fifo, #define usbhsf_dma_map(p) __usbhsf_dma_map_ctrl(p, 1) #define usbhsf_dma_unmap(p) __usbhsf_dma_map_ctrl(p, 0) static int __usbhsf_dma_map_ctrl(struct usbhs_pkt *pkt, int map); +static void usbhsf_tx_irq_ctrl(struct usbhs_pipe *pipe, int enable); +static void usbhsf_rx_irq_ctrl(struct usbhs_pipe *pipe, int enable); struct usbhs_pkt *usbhs_pkt_pop(struct usbhs_pipe *pipe, struct usbhs_pkt *pkt) { struct usbhs_priv *priv = usbhs_pipe_to_priv(pipe); @@ -123,6 +125,11 @@ struct usbhs_pkt *usbhs_pkt_pop(struct usbhs_pipe *pipe, struct usbhs_pkt *pkt) if (chan) { dmaengine_terminate_all(chan); usbhsf_dma_unmap(pkt); + } else { + if (usbhs_pipe_is_dir_in(pipe)) + usbhsf_rx_irq_ctrl(pipe, 0); + else + usbhsf_tx_irq_ctrl(pipe, 0); } usbhs_pipe_clear_without_sequence(pipe, 0, 0);
This driver has a potential issue which this driver is possible to cause superfluous interrupts after usb_pkt_pop() is called. So, after the commit 3af32605289e ("usb: renesas_usbhs: fix error return code of usbhsf_pkt_handler()") had been applied, the following error happened when we use g_audio. renesas_usbhs e6590000.usb: irq_ready run_error 1 : -22 To fix the issue, disable the tx or rx interrupt in usb_pkt_pop(). Fixes: 2743e7f90dc0 ("usb: renesas_usbhs: fix the usb_pkt_pop()") Cc: <stable@vger.kernel.org> # v4.4+ Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> --- drivers/usb/renesas_usbhs/fifo.c | 7 +++++++ 1 file changed, 7 insertions(+)