usb: cdns3: Fix on-chip memory overflow issue
authorPawel Laszczak <pawell@cadence.com>
Thu, 22 Oct 2020 00:55:05 +0000 (08:55 +0800)
committerPeter Chen <peter.chen@nxp.com>
Fri, 30 Oct 2020 03:40:54 +0000 (11:40 +0800)
commit52d3967704aea6cb316d419a33a5e1d56d33a3c1
tree4291a383e93da91027e0908cf89543039672ab9e
parent5fca3f062879f8e5214c56f3e3e2be6727900f5d
usb: cdns3: Fix on-chip memory overflow issue

Patch fixes issue caused setting On-chip memory overflow bit in usb_sts
register. The issue occurred because EP_CFG register was set twice
before USB_STS.CFGSTS was set. Every write operation on EP_CFG.BUFFERING
causes that controller increases internal counter holding the number
of reserved on-chip buffers. First time this register was updated in
function cdns3_ep_config before delegating SET_CONFIGURATION request
to class driver and again it was updated when class wanted to enable
endpoint.  This patch fixes this issue by configuring endpoints
enabled by class driver in cdns3_gadget_ep_enable and others just
before status stage.

Cc: stable@vger.kernel.org#v5.8+
Fixes: 7733f6c32e36 ("usb: cdns3: Add Cadence USB3 DRD Driver")
Reported-and-tested-by: Peter Chen <peter.chen@nxp.com>
Signed-off-by: Pawel Laszczak <pawell@cadence.com>
Signed-off-by: Peter Chen <peter.chen@nxp.com>
drivers/usb/cdns3/ep0.c
drivers/usb/cdns3/gadget.c
drivers/usb/cdns3/gadget.h