From: Greg Kroah-Hartman Date: Tue, 8 Jul 2025 09:10:29 +0000 (+0200) Subject: 6.6-stable patches X-Git-Tag: v5.15.187~39 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=8c9330492a664b37518331d5c0230ea963632437;p=thirdparty%2Fkernel%2Fstable-queue.git 6.6-stable patches added patches: input-iqs7222-explicitly-define-number-of-external-channels.patch input-xpad-support-acer-ngr-200-controller.patch usb-cdnsp-do-not-disable-slot-for-disabled-slot.patch usb-chipidea-udc-disconnect-reconnect-from-host-when-do-suspend-resume.patch usb-dwc3-abort-suspend-on-soft-disconnect-failure.patch usb-xhci-quirk-for-data-loss-in-isoc-transfers.patch xhci-dbc-flush-queued-requests-before-stopping-dbc.patch xhci-dbctty-disable-echo-flag-by-default.patch xhci-disable-stream-for-xhc-controller-with-xhci_broken_streams.patch --- diff --git a/queue-6.6/input-iqs7222-explicitly-define-number-of-external-channels.patch b/queue-6.6/input-iqs7222-explicitly-define-number-of-external-channels.patch new file mode 100644 index 0000000000..6cec583146 --- /dev/null +++ b/queue-6.6/input-iqs7222-explicitly-define-number-of-external-channels.patch @@ -0,0 +1,71 @@ +From 63f4970a1219b5256e8ea952096c86dab666d312 Mon Sep 17 00:00:00 2001 +From: Jeff LaBundy +Date: Sun, 29 Jun 2025 18:33:30 -0700 +Subject: Input: iqs7222 - explicitly define number of external channels + +From: Jeff LaBundy + +commit 63f4970a1219b5256e8ea952096c86dab666d312 upstream. + +The number of external channels is assumed to be a multiple of 10, +but this is not the case for IQS7222D. As a result, some CRx pins +are wrongly prevented from being assigned to some channels. + +Address this problem by explicitly defining the number of external +channels for cases in which the number of external channels is not +equal to the total number of available channels. + +Fixes: dd24e202ac72 ("Input: iqs7222 - add support for Azoteq IQS7222D") +Signed-off-by: Jeff LaBundy +Link: https://lore.kernel.org/r/aGHVf6HkyFZrzTPy@nixie71 +Cc: stable@vger.kernel.org +Signed-off-by: Dmitry Torokhov +Signed-off-by: Greg Kroah-Hartman +--- + drivers/input/misc/iqs7222.c | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +--- a/drivers/input/misc/iqs7222.c ++++ b/drivers/input/misc/iqs7222.c +@@ -301,6 +301,7 @@ struct iqs7222_dev_desc { + int allow_offset; + int event_offset; + int comms_offset; ++ int ext_chan; + bool legacy_gesture; + struct iqs7222_reg_grp_desc reg_grps[IQS7222_NUM_REG_GRPS]; + }; +@@ -315,6 +316,7 @@ static const struct iqs7222_dev_desc iqs + .allow_offset = 9, + .event_offset = 10, + .comms_offset = 12, ++ .ext_chan = 10, + .reg_grps = { + [IQS7222_REG_GRP_STAT] = { + .base = IQS7222_SYS_STATUS, +@@ -373,6 +375,7 @@ static const struct iqs7222_dev_desc iqs + .allow_offset = 9, + .event_offset = 10, + .comms_offset = 12, ++ .ext_chan = 10, + .legacy_gesture = true, + .reg_grps = { + [IQS7222_REG_GRP_STAT] = { +@@ -2244,7 +2247,7 @@ static int iqs7222_parse_chan(struct iqs + const struct iqs7222_dev_desc *dev_desc = iqs7222->dev_desc; + struct i2c_client *client = iqs7222->client; + int num_chan = dev_desc->reg_grps[IQS7222_REG_GRP_CHAN].num_row; +- int ext_chan = rounddown(num_chan, 10); ++ int ext_chan = dev_desc->ext_chan ? : num_chan; + int error, i; + u16 *chan_setup = iqs7222->chan_setup[chan_index]; + u16 *sys_setup = iqs7222->sys_setup; +@@ -2448,7 +2451,7 @@ static int iqs7222_parse_sldr(struct iqs + const struct iqs7222_dev_desc *dev_desc = iqs7222->dev_desc; + struct i2c_client *client = iqs7222->client; + int num_chan = dev_desc->reg_grps[IQS7222_REG_GRP_CHAN].num_row; +- int ext_chan = rounddown(num_chan, 10); ++ int ext_chan = dev_desc->ext_chan ? : num_chan; + int count, error, reg_offset, i; + u16 *event_mask = &iqs7222->sys_setup[dev_desc->event_offset]; + u16 *sldr_setup = iqs7222->sldr_setup[sldr_index]; diff --git a/queue-6.6/input-xpad-support-acer-ngr-200-controller.patch b/queue-6.6/input-xpad-support-acer-ngr-200-controller.patch new file mode 100644 index 0000000000..1593abcc26 --- /dev/null +++ b/queue-6.6/input-xpad-support-acer-ngr-200-controller.patch @@ -0,0 +1,38 @@ +From 22c69d786ef8fb789c61ca75492a272774221324 Mon Sep 17 00:00:00 2001 +From: Nilton Perim Neto +Date: Fri, 27 Jun 2025 16:29:40 -0700 +Subject: Input: xpad - support Acer NGR 200 Controller + +From: Nilton Perim Neto + +commit 22c69d786ef8fb789c61ca75492a272774221324 upstream. + +Add the NGR 200 Xbox 360 to the list of recognized controllers. + +Signed-off-by: Nilton Perim Neto +Link: https://lore.kernel.org/r/20250608060517.14967-1-niltonperimneto@gmail.com +Cc: stable@vger.kernel.org +Signed-off-by: Dmitry Torokhov +Signed-off-by: Greg Kroah-Hartman +--- + drivers/input/joystick/xpad.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/drivers/input/joystick/xpad.c ++++ b/drivers/input/joystick/xpad.c +@@ -174,6 +174,7 @@ static const struct xpad_device { + { 0x05fd, 0x107a, "InterAct 'PowerPad Pro' X-Box pad (Germany)", 0, XTYPE_XBOX }, + { 0x05fe, 0x3030, "Chic Controller", 0, XTYPE_XBOX }, + { 0x05fe, 0x3031, "Chic Controller", 0, XTYPE_XBOX }, ++ { 0x0502, 0x1305, "Acer NGR200", 0, XTYPE_XBOX }, + { 0x062a, 0x0020, "Logic3 Xbox GamePad", 0, XTYPE_XBOX }, + { 0x062a, 0x0033, "Competition Pro Steering Wheel", 0, XTYPE_XBOX }, + { 0x06a3, 0x0200, "Saitek Racing Wheel", 0, XTYPE_XBOX }, +@@ -514,6 +515,7 @@ static const struct usb_device_id xpad_t + XPAD_XBOX360_VENDOR(0x045e), /* Microsoft Xbox 360 controllers */ + XPAD_XBOXONE_VENDOR(0x045e), /* Microsoft Xbox One controllers */ + XPAD_XBOX360_VENDOR(0x046d), /* Logitech Xbox 360-style controllers */ ++ XPAD_XBOX360_VENDOR(0x0502), /* Acer Inc. Xbox 360 style controllers */ + XPAD_XBOX360_VENDOR(0x056e), /* Elecom JC-U3613M */ + XPAD_XBOX360_VENDOR(0x06a3), /* Saitek P3600 */ + XPAD_XBOX360_VENDOR(0x0738), /* Mad Catz Xbox 360 controllers */ diff --git a/queue-6.6/series b/queue-6.6/series index d1a7cf862b..2a9f98fd22 100644 --- a/queue-6.6/series +++ b/queue-6.6/series @@ -106,3 +106,12 @@ module-provide-export_symbol_gpl_for_modules-helper.patch fs-export-anon_inode_make_secure_inode-and-fix-secre.patch nfsv4-flexfiles-fix-handling-of-nfs-level-errors-in-.patch s390-pci-fix-stale-function-handles-in-error-handlin.patch +usb-xhci-quirk-for-data-loss-in-isoc-transfers.patch +xhci-dbctty-disable-echo-flag-by-default.patch +xhci-dbc-flush-queued-requests-before-stopping-dbc.patch +xhci-disable-stream-for-xhc-controller-with-xhci_broken_streams.patch +input-xpad-support-acer-ngr-200-controller.patch +input-iqs7222-explicitly-define-number-of-external-channels.patch +usb-cdnsp-do-not-disable-slot-for-disabled-slot.patch +usb-dwc3-abort-suspend-on-soft-disconnect-failure.patch +usb-chipidea-udc-disconnect-reconnect-from-host-when-do-suspend-resume.patch diff --git a/queue-6.6/usb-cdnsp-do-not-disable-slot-for-disabled-slot.patch b/queue-6.6/usb-cdnsp-do-not-disable-slot-for-disabled-slot.patch new file mode 100644 index 0000000000..b666f3d978 --- /dev/null +++ b/queue-6.6/usb-cdnsp-do-not-disable-slot-for-disabled-slot.patch @@ -0,0 +1,36 @@ +From 7e2c421ef88e9da9c39e01496b7f5b0b354b42bc Mon Sep 17 00:00:00 2001 +From: Peter Chen +Date: Thu, 19 Jun 2025 09:34:13 +0800 +Subject: usb: cdnsp: do not disable slot for disabled slot + +From: Peter Chen + +commit 7e2c421ef88e9da9c39e01496b7f5b0b354b42bc upstream. + +It doesn't need to do it, and the related command event returns +'Slot Not Enabled Error' status. + +Fixes: 3d82904559f4 ("usb: cdnsp: cdns3 Add main part of Cadence USBSSP DRD Driver") +Cc: stable +Suggested-by: Hongliang Yang +Reviewed-by: Fugang Duan +Signed-off-by: Peter Chen +Link: https://lore.kernel.org/r/20250619013413.35817-1-peter.chen@cixtech.com +Signed-off-by: Greg Kroah-Hartman +--- + drivers/usb/cdns3/cdnsp-ring.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +--- a/drivers/usb/cdns3/cdnsp-ring.c ++++ b/drivers/usb/cdns3/cdnsp-ring.c +@@ -772,7 +772,9 @@ static int cdnsp_update_port_id(struct c + } + + if (port_id != old_port) { +- cdnsp_disable_slot(pdev); ++ if (pdev->slot_id) ++ cdnsp_disable_slot(pdev); ++ + pdev->active_port = port; + cdnsp_enable_slot(pdev); + } diff --git a/queue-6.6/usb-chipidea-udc-disconnect-reconnect-from-host-when-do-suspend-resume.patch b/queue-6.6/usb-chipidea-udc-disconnect-reconnect-from-host-when-do-suspend-resume.patch new file mode 100644 index 0000000000..2b316e3b2e --- /dev/null +++ b/queue-6.6/usb-chipidea-udc-disconnect-reconnect-from-host-when-do-suspend-resume.patch @@ -0,0 +1,70 @@ +From 31a6afbe86e8e9deba9ab53876ec49eafc7fd901 Mon Sep 17 00:00:00 2001 +From: Xu Yang +Date: Sat, 14 Jun 2025 20:49:14 +0800 +Subject: usb: chipidea: udc: disconnect/reconnect from host when do suspend/resume + +From: Xu Yang + +commit 31a6afbe86e8e9deba9ab53876ec49eafc7fd901 upstream. + +Shawn and John reported a hang issue during system suspend as below: + + - USB gadget is enabled as Ethernet + - There is data transfer over USB Ethernet (scp a big file between host + and device) + - Device is going in/out suspend (echo mem > /sys/power/state) + +The root cause is the USB device controller is suspended but the USB bus +is still active which caused the USB host continues to transfer data with +device and the device continues to queue USB requests (in this case, a +delayed TCP ACK packet trigger the issue) after controller is suspended, +however the USB controller clock is already gated off. Then if udc driver +access registers after that point, the system will hang. + +The correct way to avoid such issue is to disconnect device from host when +the USB bus is not at suspend state. Then the host will receive disconnect +event and stop data transfer in time. To continue make USB gadget device +work after system resume, this will reconnect device automatically. + +To make usb wakeup work if USB bus is already at suspend state, this will +keep connection for it only when USB device controller has enabled wakeup +capability. + +Reported-by: Shawn Guo +Reported-by: John Ernberg +Closes: https://lore.kernel.org/linux-usb/aEZxmlHmjeWcXiF3@dragon/ +Tested-by: John Ernberg # iMX8QXP +Fixes: 235ffc17d014 ("usb: chipidea: udc: add suspend/resume support for device controller") +Cc: stable +Reviewed-by: Jun Li +Signed-off-by: Xu Yang +Acked-by: Peter Chen +Link: https://lore.kernel.org/r/20250614124914.207540-1-xu.yang_2@nxp.com +Signed-off-by: Greg Kroah-Hartman +--- + drivers/usb/chipidea/udc.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +--- a/drivers/usb/chipidea/udc.c ++++ b/drivers/usb/chipidea/udc.c +@@ -2213,6 +2213,10 @@ static void udc_suspend(struct ci_hdrc * + */ + if (hw_read(ci, OP_ENDPTLISTADDR, ~0) == 0) + hw_write(ci, OP_ENDPTLISTADDR, ~0, ~0); ++ ++ if (ci->gadget.connected && ++ (!ci->suspended || !device_may_wakeup(ci->dev))) ++ usb_gadget_disconnect(&ci->gadget); + } + + static void udc_resume(struct ci_hdrc *ci, bool power_lost) +@@ -2223,6 +2227,9 @@ static void udc_resume(struct ci_hdrc *c + OTGSC_BSVIS | OTGSC_BSVIE); + if (ci->vbus_active) + usb_gadget_vbus_disconnect(&ci->gadget); ++ } else if (ci->vbus_active && ci->driver && ++ !ci->gadget.connected) { ++ usb_gadget_connect(&ci->gadget); + } + + /* Restore value 0 if it was set for power lost check */ diff --git a/queue-6.6/usb-dwc3-abort-suspend-on-soft-disconnect-failure.patch b/queue-6.6/usb-dwc3-abort-suspend-on-soft-disconnect-failure.patch new file mode 100644 index 0000000000..bcda1e6557 --- /dev/null +++ b/queue-6.6/usb-dwc3-abort-suspend-on-soft-disconnect-failure.patch @@ -0,0 +1,100 @@ +From 630a1dec3b0eba2a695b9063f1c205d585cbfec9 Mon Sep 17 00:00:00 2001 +From: Kuen-Han Tsai +Date: Wed, 28 May 2025 18:03:11 +0800 +Subject: usb: dwc3: Abort suspend on soft disconnect failure + +From: Kuen-Han Tsai + +commit 630a1dec3b0eba2a695b9063f1c205d585cbfec9 upstream. + +When dwc3_gadget_soft_disconnect() fails, dwc3_suspend_common() keeps +going with the suspend, resulting in a period where the power domain is +off, but the gadget driver remains connected. Within this time frame, +invoking vbus_event_work() will cause an error as it attempts to access +DWC3 registers for endpoint disabling after the power domain has been +completely shut down. + +Abort the suspend sequence when dwc3_gadget_suspend() cannot halt the +controller and proceeds with a soft connect. + +Fixes: 9f8a67b65a49 ("usb: dwc3: gadget: fix gadget suspend/resume") +Cc: stable +Acked-by: Thinh Nguyen +Signed-off-by: Kuen-Han Tsai +Link: https://lore.kernel.org/r/20250528100315.2162699-1-khtsai@google.com +Signed-off-by: Greg Kroah-Hartman +--- + drivers/usb/dwc3/core.c | 9 +++++++-- + drivers/usb/dwc3/gadget.c | 22 +++++++++------------- + 2 files changed, 16 insertions(+), 15 deletions(-) + +--- a/drivers/usb/dwc3/core.c ++++ b/drivers/usb/dwc3/core.c +@@ -1008,6 +1008,7 @@ static void dwc3_set_incr_burst_type(str + int ntype; + int ret; + int i; ++ int ret; + + cfg = dwc3_readl(dwc->regs, DWC3_GSBUSCFG0); + +@@ -2146,7 +2147,9 @@ static int dwc3_suspend_common(struct dw + case DWC3_GCTL_PRTCAP_DEVICE: + if (pm_runtime_suspended(dwc->dev)) + break; +- dwc3_gadget_suspend(dwc); ++ ret = dwc3_gadget_suspend(dwc); ++ if (ret) ++ return ret; + synchronize_irq(dwc->irq_gadget); + dwc3_core_exit(dwc); + break; +@@ -2177,7 +2180,9 @@ static int dwc3_suspend_common(struct dw + break; + + if (dwc->current_otg_role == DWC3_OTG_ROLE_DEVICE) { +- dwc3_gadget_suspend(dwc); ++ ret = dwc3_gadget_suspend(dwc); ++ if (ret) ++ return ret; + synchronize_irq(dwc->irq_gadget); + } + +--- a/drivers/usb/dwc3/gadget.c ++++ b/drivers/usb/dwc3/gadget.c +@@ -4802,26 +4802,22 @@ int dwc3_gadget_suspend(struct dwc3 *dwc + int ret; + + ret = dwc3_gadget_soft_disconnect(dwc); +- if (ret) +- goto err; +- +- spin_lock_irqsave(&dwc->lock, flags); +- if (dwc->gadget_driver) +- dwc3_disconnect_gadget(dwc); +- spin_unlock_irqrestore(&dwc->lock, flags); +- +- return 0; +- +-err: + /* + * Attempt to reset the controller's state. Likely no + * communication can be established until the host + * performs a port reset. + */ +- if (dwc->softconnect) ++ if (ret && dwc->softconnect) { + dwc3_gadget_soft_connect(dwc); ++ return -EAGAIN; ++ } + +- return ret; ++ spin_lock_irqsave(&dwc->lock, flags); ++ if (dwc->gadget_driver) ++ dwc3_disconnect_gadget(dwc); ++ spin_unlock_irqrestore(&dwc->lock, flags); ++ ++ return 0; + } + + int dwc3_gadget_resume(struct dwc3 *dwc) diff --git a/queue-6.6/usb-xhci-quirk-for-data-loss-in-isoc-transfers.patch b/queue-6.6/usb-xhci-quirk-for-data-loss-in-isoc-transfers.patch new file mode 100644 index 0000000000..e503d4d8b6 --- /dev/null +++ b/queue-6.6/usb-xhci-quirk-for-data-loss-in-isoc-transfers.patch @@ -0,0 +1,110 @@ +From cbc889ab0122366f6cdbe3c28d477c683ebcebc2 Mon Sep 17 00:00:00 2001 +From: Raju Rangoju +Date: Fri, 27 Jun 2025 17:41:19 +0300 +Subject: usb: xhci: quirk for data loss in ISOC transfers + +From: Raju Rangoju + +commit cbc889ab0122366f6cdbe3c28d477c683ebcebc2 upstream. + +During the High-Speed Isochronous Audio transfers, xHCI +controller on certain AMD platforms experiences momentary data +loss. This results in Missed Service Errors (MSE) being +generated by the xHCI. + +The root cause of the MSE is attributed to the ISOC OUT endpoint +being omitted from scheduling. This can happen when an IN +endpoint with a 64ms service interval either is pre-scheduled +prior to the ISOC OUT endpoint or the interval of the ISOC OUT +endpoint is shorter than that of the IN endpoint. Consequently, +the OUT service is neglected when an IN endpoint with a service +interval exceeding 32ms is scheduled concurrently (every 64ms in +this scenario). + +This issue is particularly seen on certain older AMD platforms. +To mitigate this problem, it is recommended to adjust the service +interval of the IN endpoint to not exceed 32ms (interval 8). This +adjustment ensures that the OUT endpoint will not be bypassed, +even if a smaller interval value is utilized. + +Cc: stable +Signed-off-by: Raju Rangoju +Signed-off-by: Mathias Nyman +Link: https://lore.kernel.org/r/20250627144127.3889714-2-mathias.nyman@linux.intel.com +Signed-off-by: Greg Kroah-Hartman +--- + drivers/usb/host/xhci-mem.c | 4 ++++ + drivers/usb/host/xhci-pci.c | 25 +++++++++++++++++++++++++ + drivers/usb/host/xhci.h | 1 + + 3 files changed, 30 insertions(+) + +--- a/drivers/usb/host/xhci-mem.c ++++ b/drivers/usb/host/xhci-mem.c +@@ -1436,6 +1436,10 @@ int xhci_endpoint_init(struct xhci_hcd * + /* Periodic endpoint bInterval limit quirk */ + if (usb_endpoint_xfer_int(&ep->desc) || + usb_endpoint_xfer_isoc(&ep->desc)) { ++ if ((xhci->quirks & XHCI_LIMIT_ENDPOINT_INTERVAL_9) && ++ interval >= 9) { ++ interval = 8; ++ } + if ((xhci->quirks & XHCI_LIMIT_ENDPOINT_INTERVAL_7) && + udev->speed >= USB_SPEED_HIGH && + interval >= 7) { +--- a/drivers/usb/host/xhci-pci.c ++++ b/drivers/usb/host/xhci-pci.c +@@ -65,12 +65,22 @@ + #define PCI_DEVICE_ID_INTEL_ALDER_LAKE_PCH_XHCI 0x51ed + #define PCI_DEVICE_ID_INTEL_ALDER_LAKE_N_PCH_XHCI 0x54ed + ++#define PCI_DEVICE_ID_AMD_ARIEL_TYPEC_XHCI 0x13ed ++#define PCI_DEVICE_ID_AMD_ARIEL_TYPEA_XHCI 0x13ee ++#define PCI_DEVICE_ID_AMD_STARSHIP_XHCI 0x148c ++#define PCI_DEVICE_ID_AMD_FIREFLIGHT_15D4_XHCI 0x15d4 ++#define PCI_DEVICE_ID_AMD_FIREFLIGHT_15D5_XHCI 0x15d5 ++#define PCI_DEVICE_ID_AMD_RAVEN_15E0_XHCI 0x15e0 ++#define PCI_DEVICE_ID_AMD_RAVEN_15E1_XHCI 0x15e1 ++#define PCI_DEVICE_ID_AMD_RAVEN2_XHCI 0x15e5 + #define PCI_DEVICE_ID_AMD_RENOIR_XHCI 0x1639 + #define PCI_DEVICE_ID_AMD_PROMONTORYA_4 0x43b9 + #define PCI_DEVICE_ID_AMD_PROMONTORYA_3 0x43ba + #define PCI_DEVICE_ID_AMD_PROMONTORYA_2 0x43bb + #define PCI_DEVICE_ID_AMD_PROMONTORYA_1 0x43bc + ++#define PCI_DEVICE_ID_ATI_NAVI10_7316_XHCI 0x7316 ++ + #define PCI_DEVICE_ID_ASMEDIA_1042_XHCI 0x1042 + #define PCI_DEVICE_ID_ASMEDIA_1042A_XHCI 0x1142 + #define PCI_DEVICE_ID_ASMEDIA_1142_XHCI 0x1242 +@@ -348,6 +358,21 @@ static void xhci_pci_quirks(struct devic + if (pdev->vendor == PCI_VENDOR_ID_NEC) + xhci->quirks |= XHCI_NEC_HOST; + ++ if (pdev->vendor == PCI_VENDOR_ID_AMD && ++ (pdev->device == PCI_DEVICE_ID_AMD_ARIEL_TYPEC_XHCI || ++ pdev->device == PCI_DEVICE_ID_AMD_ARIEL_TYPEA_XHCI || ++ pdev->device == PCI_DEVICE_ID_AMD_STARSHIP_XHCI || ++ pdev->device == PCI_DEVICE_ID_AMD_FIREFLIGHT_15D4_XHCI || ++ pdev->device == PCI_DEVICE_ID_AMD_FIREFLIGHT_15D5_XHCI || ++ pdev->device == PCI_DEVICE_ID_AMD_RAVEN_15E0_XHCI || ++ pdev->device == PCI_DEVICE_ID_AMD_RAVEN_15E1_XHCI || ++ pdev->device == PCI_DEVICE_ID_AMD_RAVEN2_XHCI)) ++ xhci->quirks |= XHCI_LIMIT_ENDPOINT_INTERVAL_9; ++ ++ if (pdev->vendor == PCI_VENDOR_ID_ATI && ++ pdev->device == PCI_DEVICE_ID_ATI_NAVI10_7316_XHCI) ++ xhci->quirks |= XHCI_LIMIT_ENDPOINT_INTERVAL_9; ++ + if (pdev->vendor == PCI_VENDOR_ID_AMD && xhci->hci_version == 0x96) + xhci->quirks |= XHCI_AMD_0x96_HOST; + +--- a/drivers/usb/host/xhci.h ++++ b/drivers/usb/host/xhci.h +@@ -1659,6 +1659,7 @@ struct xhci_hcd { + #define XHCI_WRITE_64_HI_LO BIT_ULL(47) + #define XHCI_CDNS_SCTX_QUIRK BIT_ULL(48) + #define XHCI_ETRON_HOST BIT_ULL(49) ++#define XHCI_LIMIT_ENDPOINT_INTERVAL_9 BIT_ULL(50) + + unsigned int num_active_eps; + unsigned int limit_active_eps; diff --git a/queue-6.6/xhci-dbc-flush-queued-requests-before-stopping-dbc.patch b/queue-6.6/xhci-dbc-flush-queued-requests-before-stopping-dbc.patch new file mode 100644 index 0000000000..5c0a6a7bfc --- /dev/null +++ b/queue-6.6/xhci-dbc-flush-queued-requests-before-stopping-dbc.patch @@ -0,0 +1,37 @@ +From efe3e3ae5a66cb38ef29c909e951b4039044bae9 Mon Sep 17 00:00:00 2001 +From: Mathias Nyman +Date: Fri, 27 Jun 2025 17:41:22 +0300 +Subject: xhci: dbc: Flush queued requests before stopping dbc + +From: Mathias Nyman + +commit efe3e3ae5a66cb38ef29c909e951b4039044bae9 upstream. + +Flush dbc requests when dbc is stopped and transfer rings are freed. +Failure to flush them lead to leaking memory and dbc completing odd +requests after resuming from suspend, leading to error messages such as: + +[ 95.344392] xhci_hcd 0000:00:0d.0: no matched request + +Cc: stable +Fixes: dfba2174dc42 ("usb: xhci: Add DbC support in xHCI driver") +Signed-off-by: Mathias Nyman +Link: https://lore.kernel.org/r/20250627144127.3889714-5-mathias.nyman@linux.intel.com +Signed-off-by: Greg Kroah-Hartman +--- + drivers/usb/host/xhci-dbgcap.c | 4 ++++ + 1 file changed, 4 insertions(+) + +--- a/drivers/usb/host/xhci-dbgcap.c ++++ b/drivers/usb/host/xhci-dbgcap.c +@@ -639,6 +639,10 @@ static void xhci_dbc_stop(struct xhci_db + case DS_DISABLED: + return; + case DS_CONFIGURED: ++ spin_lock(&dbc->lock); ++ xhci_dbc_flush_requests(dbc); ++ spin_unlock(&dbc->lock); ++ + if (dbc->driver->disconnect) + dbc->driver->disconnect(dbc); + break; diff --git a/queue-6.6/xhci-dbctty-disable-echo-flag-by-default.patch b/queue-6.6/xhci-dbctty-disable-echo-flag-by-default.patch new file mode 100644 index 0000000000..23af62e321 --- /dev/null +++ b/queue-6.6/xhci-dbctty-disable-echo-flag-by-default.patch @@ -0,0 +1,39 @@ +From 2b857d69a5e116150639a0c6c39c86cc329939ee Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=C5=81ukasz=20Bartosik?= +Date: Fri, 27 Jun 2025 17:41:21 +0300 +Subject: xhci: dbctty: disable ECHO flag by default +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Łukasz Bartosik + +commit 2b857d69a5e116150639a0c6c39c86cc329939ee upstream. + +When /dev/ttyDBC0 device is created then by default ECHO flag +is set for the terminal device. However if data arrives from +a peer before application using /dev/ttyDBC0 applies its set +of terminal flags then the arriving data will be echoed which +might not be desired behavior. + +Fixes: 4521f1613940 ("xhci: dbctty: split dbc tty driver registration and unregistration functions.") +Cc: stable +Signed-off-by: Łukasz Bartosik +Signed-off-by: Mathias Nyman +Link: https://lore.kernel.org/stable/20250610111802.18742-1-ukaszb%40chromium.org +Link: https://lore.kernel.org/r/20250627144127.3889714-4-mathias.nyman@linux.intel.com +Signed-off-by: Greg Kroah-Hartman +--- + drivers/usb/host/xhci-dbgtty.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/usb/host/xhci-dbgtty.c ++++ b/drivers/usb/host/xhci-dbgtty.c +@@ -585,6 +585,7 @@ int dbc_tty_init(void) + dbc_tty_driver->type = TTY_DRIVER_TYPE_SERIAL; + dbc_tty_driver->subtype = SERIAL_TYPE_NORMAL; + dbc_tty_driver->init_termios = tty_std_termios; ++ dbc_tty_driver->init_termios.c_lflag &= ~ECHO; + dbc_tty_driver->init_termios.c_cflag = + B9600 | CS8 | CREAD | HUPCL | CLOCAL; + dbc_tty_driver->init_termios.c_ispeed = 9600; diff --git a/queue-6.6/xhci-disable-stream-for-xhc-controller-with-xhci_broken_streams.patch b/queue-6.6/xhci-disable-stream-for-xhc-controller-with-xhci_broken_streams.patch new file mode 100644 index 0000000000..04879d64ab --- /dev/null +++ b/queue-6.6/xhci-disable-stream-for-xhc-controller-with-xhci_broken_streams.patch @@ -0,0 +1,33 @@ +From cd65ee81240e8bc3c3119b46db7f60c80864b90b Mon Sep 17 00:00:00 2001 +From: Hongyu Xie +Date: Fri, 27 Jun 2025 17:41:20 +0300 +Subject: xhci: Disable stream for xHC controller with XHCI_BROKEN_STREAMS + +From: Hongyu Xie + +commit cd65ee81240e8bc3c3119b46db7f60c80864b90b upstream. + +Disable stream for platform xHC controller with broken stream. + +Fixes: 14aec589327a6 ("storage: accept some UAS devices if streams are unavailable") +Cc: stable +Signed-off-by: Hongyu Xie +Signed-off-by: Mathias Nyman +Link: https://lore.kernel.org/r/20250627144127.3889714-3-mathias.nyman@linux.intel.com +Signed-off-by: Greg Kroah-Hartman +--- + drivers/usb/host/xhci-plat.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/drivers/usb/host/xhci-plat.c ++++ b/drivers/usb/host/xhci-plat.c +@@ -313,7 +313,8 @@ int xhci_plat_probe(struct platform_devi + } + + usb3_hcd = xhci_get_usb3_hcd(xhci); +- if (usb3_hcd && HCC_MAX_PSA(xhci->hcc_params) >= 4) ++ if (usb3_hcd && HCC_MAX_PSA(xhci->hcc_params) >= 4 && ++ !(xhci->quirks & XHCI_BROKEN_STREAMS)) + usb3_hcd->can_do_streams = 1; + + if (xhci->shared_hcd) {