linux/drivers/usb
Wesley Cheng d8a2bb4eb7 usb: dwc3: gadget: Add 1ms delay after end transfer command without IOC
Previously, there was a 100uS delay inserted after issuing an end transfer
command for specific controller revisions.  This was due to the fact that
there was a GUCTL2 bit field which enabled synchronous completion of the
end transfer command once the CMDACT bit was cleared in the DEPCMD
register.  Since this bit does not exist for all controller revisions and
the current implementation heavily relies on utizling the EndTransfer
command completion interrupt, add the delay back in for uses where the
interrupt on completion bit is not set, and increase the duration to 1ms
for the controller to complete the command.

An issue was seen where the USB request buffer was unmapped while the DWC3
controller was still accessing the TRB.  However, it was confirmed that the
end transfer command was successfully submitted. (no end transfer timeout)
In situations, such as dwc3_gadget_soft_disconnect() and
__dwc3_gadget_ep_disable(), the dwc3_remove_request() is utilized, which
will issue the end transfer command, and follow up with
dwc3_gadget_giveback().  At least for the USB ep disable path, it is
required for any pending and started requests to be completed and returned
to the function driver in the same context of the disable call.  Without
the GUCTL2 bit, it is not ensured that the end transfer is completed before
the buffers are unmapped.

Fixes: cf2f8b63f7 ("usb: dwc3: gadget: Remove END_TRANSFER delay")
Cc: stable <stable@kernel.org>
Signed-off-by: Wesley Cheng <quic_wcheng@quicinc.com>
Acked-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
Link: https://lore.kernel.org/r/20230306200557.29387-1-quic_wcheng@quicinc.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2023-03-09 14:54:46 +01:00
..
atm usb: move from strlcpy with unused retval to strscpy 2022-08-19 11:08:54 +02:00
c67x00
cdns3 Merge 6.2-rc5 into usb-next 2023-01-23 15:38:08 +01:00
chipidea USB: chipidea: fix memory leak with using debugfs_lookup() 2023-02-06 13:46:41 +01:00
class tty: Call ->dtr_rts() parameter active consistently 2023-01-19 16:04:35 +01:00
common Driver core changes for 6.3-rc1 2023-02-24 12:58:55 -08:00
core Driver core changes for 6.3-rc1 2023-02-24 12:58:55 -08:00
dwc2 usb: dwc2: power on/off phy for peripheral mode in dual-role mode 2022-12-08 16:50:56 +01:00
dwc3 usb: dwc3: gadget: Add 1ms delay after end transfer command without IOC 2023-03-09 14:54:46 +01:00
early usb: early: xhci-dbc: Use memcpy_and_pad() 2023-01-31 10:40:54 +01:00
fotg210 USB: fotg210: fix memory leak with using debugfs_lookup() 2023-02-06 13:46:42 +01:00
gadget USB / Thunderbolt driver changes for 6.3-rc1 2023-02-24 12:07:00 -08:00
host phy-for-6.3 2023-02-24 17:22:11 -08:00
image usb/image: fix repeated words in comments 2022-07-27 14:33:53 +02:00
isp1760
misc Merge 6.2-rc5 into usb-next 2023-01-23 15:38:08 +01:00
mon mm: replace vma->vm_flags direct modifications with modifier calls 2023-02-09 16:51:39 -08:00
mtu3 usb: mtu3: fix the failure of qmu stop 2023-01-19 14:12:08 +01:00
musb usb: musb: sunxi: Introduce config struct 2023-02-02 11:13:42 +01:00
phy Driver core changes for 6.3-rc1 2023-02-24 12:58:55 -08:00
renesas_usbhs usb: renesas: Fix refcount leak bug 2022-06-21 16:39:03 +02:00
roles driver core: make struct device_type.uevent() take a const * 2023-01-27 13:45:36 +01:00
serial TTY/Serial driver updates for 6.3-rc1 2023-02-24 12:17:14 -08:00
storage USB: ene_usb6250: Allocate enough memory for full object 2023-02-06 13:46:42 +01:00
typec usb: ucsi_acpi: Increase the command completion timeout 2023-03-09 14:39:20 +01:00
usbip Including fixes from bpf, netfilter and can. 2022-12-21 08:41:32 -08:00
Kconfig usb: fotg210: Collect pieces of dual mode controller 2022-11-09 12:38:09 +01:00
Makefile usb: fotg210: Collect pieces of dual mode controller 2022-11-09 12:38:09 +01:00
usb-skeleton.c usb: add usb_set_intfdata() documentation 2022-11-29 08:56:09 +01:00