Re: Problem: xhci: devices can not be enumerated due to bandwidth issues

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi

On 10.1.2022 17.03, Joe Minor wrote:
> Hi,
> 
> I use an USB-C dock to connect my laptop to two external monitors and peripherals like mouse, keyboard, headset and webcam.
> Since upgrading to kernel version 5.14.6, these devices are no longer enumerated after boot.
> They will however function when plugged in after login.
> The dock uses the DisplayLink chipset, which requires the evdi kernel module (GitHub: https://github.com/DisplayLink/evdi/).
> I do not encounter this problem when blacklisting the module (which has the consequence that my monitors no longer work).
> 
> Hardware:
>  - Dock: Lenovo ThinkPad Hybrid USB-C with USB-A Dock
>  - Laptop: Microsoft Surface Book 2
> 
> The kernel buffer contains these messages per device:
> [    7.165643] usb 1-1.2.4.2.4: Not enough bandwidth for new device state.
> [    7.165652] usb 1-1.2.4.2.4: can't set config #1, error -28
> 
> The last unaffected kernel version is 5.14.5.
> I bisected the issue to commit 2847c46c6148 ('Revert "USB: xhci: fix U1/U2 handling for hardware with XHCI_INTEL_HOST quirk set"'), which also mentions xhci bandwidth issues.

This change will enable xhci USB Link power management for some devices. 
It adds a few more items to do during enumeration for them. 

> 
> My system information is included below. Please let me know how if you need more information or if you want me to run more tests.
> 
> Thanks a lot
> Joe

If you could boot with usb core and xhci dynamic debugging enabled it could show more.
Add "usbcore.dyndbg=+p xhci_hcd.dyndbg=+p" to your kernel cmdline

Also, could be worth checking if removing XHCI_LPM_SUPPORT from your kernel helps:


diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
index 5c351970cdf1..7434406be452 100644
--- a/drivers/usb/host/xhci-pci.c
+++ b/drivers/usb/host/xhci-pci.c
@@ -202,7 +202,6 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
                xhci->quirks |= XHCI_BROKEN_D3COLD;
 
        if (pdev->vendor == PCI_VENDOR_ID_INTEL) {
-               xhci->quirks |= XHCI_LPM_SUPPORT;
                xhci->quirks |= XHCI_INTEL_HOST;
                xhci->quirks |= XHCI_AVOID_BEI;
        }

Thanks
-Mathias



[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux