kernel_samsung_a53x/drivers/usb
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
..
atm usb: atm: cxacru: fix endpoint checking in cxacru_bind() 2024-11-19 14:19:34 +01:00
c67x00
cdns3
chipidea usb: chipidea: udc: handle USB Error Interrupt if IOC not set 2024-12-17 13:24:32 +01:00
class Revert "USB: usbtmc: prevent kernel-usb-infoleak" 2024-11-24 00:23:31 +01:00
common
core usb: core: sysfs: Unmerge @usb3_hardware_lpm_attr_group in remove_power_attributes() 2024-11-23 23:20:55 +01:00
dwc2 Revert "usb: dwc2: Adjust the timing of USB Driver Interrupt Registration in the Crashkernel Scenario" 2024-11-24 00:22:58 +01:00
dwc3 usb: dwc3: gadget: Fix looping of queued SG entries 2024-12-17 13:24:20 +01:00
early
gadget Revert "usb: gadget: composite: fix OS descriptors w_value logic" 2024-12-17 13:24:18 +01:00
host xhci: dbc: Fix STALL transfer event handling 2024-12-17 13:24:34 +01:00
image
isp1760
misc USB: chaoskey: Fix possible deadlock chaoskey_list_lock 2024-12-17 13:24:16 +01:00
mon
mtu3
musb usb: musb: sunxi: Fix accessing an released usb phy 2024-11-30 02:33:26 +01:00
notify
notify_lsi
phy usb: phy: Fix API devm_usb_put_phy() can not release the phy 2024-11-23 23:22:04 +01:00
renesas_usbhs
roles
serial USB: serial: option: add Quectel RG650V 2024-11-30 02:33:26 +01:00
storage Revert "usb: uas: set host status byte on data completion error" 2024-11-24 00:23:42 +01:00
typec mfd: intel_soc_pmic_bxtwc: Use IRQ domain for USB Type-C device 2024-12-17 13:24:08 +01:00
usbip usbip: Don't submit special requests twice 2024-11-23 23:20:58 +01:00
Kconfig
Kconfig.variant1
Makefile
Makefile.variant1
usb-skeleton.c