kernel_samsung_a53x/drivers/usb/host
Mathias Nyman 1139c4ae84 xhci: dbc: Fix STALL transfer event handling
commit 9044ad57b60b0556d42b6f8aa218a68865e810a4 upstream.

Don't flush all pending DbC data requests when an endpoint halts.

An endpoint may halt and xHC DbC triggers a STALL error event if there's
an issue with a bulk data transfer. The transfer should restart once xHC
DbC receives a ClearFeature(ENDPOINT_HALT) request from the host.

Once xHC DbC restarts it will start from the TRB pointed to by dequeue
field in the endpoint context, which might be the same TRB we got the
STALL event for. Turn the TRB to a no-op in this case to make sure xHC
DbC doesn't reuse and tries to retransmit this same TRB after we already
handled it, and gave its corresponding data request back.

Other STALL events might be completely bogus.
Lukasz Bartosik discovered that xHC DbC might issue spurious STALL events
if hosts sends a ClearFeature(ENDPOINT_HALT) request to non-halted
endpoints even without any active bulk transfers.

Assume STALL event is spurious if it reports 0 bytes transferred, and
the endpoint stopped on the STALLED TRB.
Don't give back the data request corresponding to the TRB in this case.

The halted status is per endpoint. Track it with a per endpoint flag
instead of the driver invented DbC wide DS_STALLED state.
DbC remains in DbC-Configured state even if endpoints halt. There is no
Stalled state in the DbC Port state Machine (xhci section 7.6.6)

Reported-by: Łukasz Bartosik <ukaszb@chromium.org>
Closes: https://lore.kernel.org/linux-usb/20240725074857.623299-1-ukaszb@chromium.org/
Tested-by: Łukasz Bartosik <ukaszb@chromium.org>
Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
Link: https://lore.kernel.org/r/20240905143300.1959279-2-mathias.nyman@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2024-12-17 13:24:34 +01:00
..
bcma-hcd.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ehci-atmel.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ehci-brcm.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ehci-dbg.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ehci-exynos.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ehci-fsl.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ehci-fsl.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ehci-grlib.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ehci-hcd.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ehci-hub.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ehci-mem.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ehci-mv.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ehci-mxc.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ehci-npcm7xx.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ehci-omap.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ehci-orion.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ehci-pci.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ehci-platform.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ehci-pmcmsp.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ehci-ppc-of.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ehci-ps3.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ehci-q.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ehci-sched.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ehci-sh.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ehci-spear.c usb: ehci-spear: fix call balance of sehci clk handling routines 2024-12-17 13:24:17 +01:00
ehci-st.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ehci-sysfs.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ehci-tegra.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ehci-timer.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ehci-xilinx-of.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ehci.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
fhci-dbg.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
fhci-hcd.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
fhci-hub.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
fhci-mem.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
fhci-q.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
fhci-sched.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
fhci-tds.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
fhci.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
fotg210-hcd.c usb: fotg210-hcd: delete an incorrect bounds test 2024-11-18 12:12:02 +01:00
fotg210.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
fsl-mph-dr-of.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
imx21-dbg.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
imx21-hcd.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
imx21-hcd.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
isp116x-hcd.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
isp116x.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
isp1362-hcd.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
isp1362.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Kconfig Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Makefile Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
max3421-hcd.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ohci-at91.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ohci-da8xx.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ohci-dbg.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ohci-exynos.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ohci-hcd.c usb: ohci: Prevent missed ohci interrupts 2024-11-19 11:32:48 +01:00
ohci-hub.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ohci-mem.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ohci-nxp.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ohci-omap.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ohci-pci.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ohci-platform.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ohci-ppc-of.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ohci-ps3.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ohci-pxa27x.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ohci-q.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ohci-s3c2410.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ohci-sa1111.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ohci-sm501.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ohci-spear.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ohci-st.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ohci-tmio.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ohci.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
oxu210hp-hcd.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
pci-quirks.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
pci-quirks.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
r8a66597-hcd.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
r8a66597.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
sl811-hcd.c usb: sl811-hcd: only defined function checkdone if QUIRK2 is defined 2024-11-19 09:23:15 +01:00
sl811.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
sl811_cs.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ssb-hcd.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
u132-hcd.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
uhci-debug.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
uhci-grlib.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
uhci-hcd.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
uhci-hcd.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
uhci-hub.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
uhci-pci.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
uhci-platform.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
uhci-q.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
xhci-dbg.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
xhci-dbgcap.c xhci: dbc: Fix STALL transfer event handling 2024-12-17 13:24:34 +01:00
xhci-dbgcap.h xhci: dbc: Fix STALL transfer event handling 2024-12-17 13:24:34 +01:00
xhci-dbgtty.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
xhci-debugfs.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
xhci-debugfs.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
xhci-ext-caps.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
xhci-ext-caps.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
xhci-exynos.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
xhci-exynos.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
xhci-histb.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
xhci-hub.c xhci: cleanup xhci_hub_control port references 2024-11-08 11:26:12 +01:00
xhci-mem.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
xhci-mtk-sch.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
xhci-mtk.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
xhci-mtk.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
xhci-mvebu.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
xhci-mvebu.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
xhci-pci-renesas.c Revert "usb: renesas-xhci: Remove renesas_xhci_pci_exit()" 2024-11-24 00:23:14 +01:00
xhci-pci.c Revert "usb: renesas-xhci: Remove renesas_xhci_pci_exit()" 2024-11-24 00:23:14 +01:00
xhci-pci.h Revert "usb: renesas-xhci: Remove renesas_xhci_pci_exit()" 2024-11-24 00:23:14 +01:00
xhci-plat.c usb: host: xhci-plat: Add support for XHCI_SG_TRB_CACHE_SIZE_QUIRK 2024-11-18 12:13:26 +01:00
xhci-plat.h usb: xhci-plat: Don't include xhci.h 2024-11-19 11:32:48 +01:00
xhci-rcar.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
xhci-rcar.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
xhci-ring.c xhci: Set correct transferred length for cancelled bulk transfers 2024-11-19 14:19:02 +01:00
xhci-tegra.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
xhci-trace.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
xhci-trace.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
xhci.c xhci: Fix Panther point NULL pointer deref at full-speed re-enumeration 2024-11-23 23:20:42 +01:00
xhci.h Revert "xhci: Fix incorrect stream context type macro" 2024-11-24 00:22:51 +01:00