]> git.baikalelectronics.ru Git - kernel.git/commit
usb: renesas_usbhs: Clear PIPECFG for re-enabling pipe with other EPNUM
authorYoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Mon, 8 Mar 2021 01:55:38 +0000 (10:55 +0900)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 10 Mar 2021 08:36:13 +0000 (09:36 +0100)
commitdb6f1352f6a8668d86715b32aa3891a8aa3091fc
treed2f1d11b2642ac929fc4d3eb3ed707325fbcfc4e
parent5b1fe5eb5e5ca1e966f2712405079f5815ff6b2c
usb: renesas_usbhs: Clear PIPECFG for re-enabling pipe with other EPNUM

According to the datasheet, this controller has a restriction
which "set an endpoint number so that combinations of the DIR bit and
the EPNUM bits do not overlap.". However, since the udc core driver is
possible to assign a bulk pipe as an interrupt endpoint, an endpoint
number may not match the pipe number. After that, when user rebinds
another gadget driver, this driver broke the restriction because
the driver didn't clear any configuration in usb_ep_disable().

Example:
 # modprobe g_ncm
 Then, EP3 = pipe 3, EP4 = pipe 4, EP5 = pipe 6
 # rmmod g_ncm
 # modprobe g_hid
 Then, EP3 = pipe 6, EP4 = pipe 7.
 So, pipe 3 and pipe 6 are set as EP3.

So, clear PIPECFG register in usbhs_pipe_free().

Fixes: be5404d2bc35 ("usb: renesas_usbhs: gadget: fix re-enabling pipe without re-connecting")
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Link: https://lore.kernel.org/r/1615168538-26101-1-git-send-email-yoshihiro.shimoda.uh@renesas.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/renesas_usbhs/pipe.c