MLK-23361 usb: cdns3: gadget: reset endpoint before set DEVDS
authorYe Li <ye.li@nxp.com>
Wed, 19 Feb 2020 05:27:15 +0000 (21:27 -0800)
committerYe Li <ye.li@nxp.com>
Thu, 29 Apr 2021 10:25:55 +0000 (03:25 -0700)
commit3aff0ad1bb43e46002bf3f7d270c1213ab29b680
tree1b40c2d5e1a85ad278c9750f64bbfb069123fac6
parenta4fdd6210a081fd391ae574efe94cacef6c1ddcd
MLK-23361 usb: cdns3: gadget: reset endpoint before set DEVDS

On CDNS3 usb, the IOC interrupt for IN is triggered when data
move from memory to FIFO, but not for the transfer completion.

When running fastboot command "continue" to disconnect USB device.
The last message "OKAY" sent from device setups a callback to IOC
interrupt handler and disconnect with host in this callback.
However, the real transfer hasn't finished due to host doesn't send
IN at that time, it causes the error at host side.

This patch will reset all enabled endpoints in pull up before disable
the device mode. The reset checks the EP_STS.BUFFEREMPTY bit to ensure
data has sent to host.

Signed-off-by: Ye Li <ye.li@nxp.com>
Signed-off-by: Peter Chen <peter.chen@nxp.com>
Reviewed-by: Peter Chen <peter.chen@nxp.com>
(cherry picked from commit 9be87bc89c1e75755b524703dc536c93bd3fbe5c)
(cherry picked from commit 076f49edefab2ef832b09ada855f968d44c15928)
drivers/usb/cdns3/dev-regs-macro.h
drivers/usb/cdns3/gadget.c
drivers/usb/cdns3/gadget.h