• Mika Westerberg's avatar
    thunderbolt: Create device links from ACPI description · b2be2b05
    Mika Westerberg authored
    The new way to describe relationship between tunneled ports and USB4 NHI
    (Native Host Interface) is with ACPI _DSD looking like below for a PCIe
    downstream port:
    
        Scope (\_SB.PCI0)
        {
            Device (NHI0) { } // Thunderbolt NHI
    
            Device (DSB0) // Hotplug downstream port
            {
                Name (_DSD, Package () {
                    ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
                    Package () {
                        Package () {"usb4-host-interface", \_SB.PCI0.NHI0},
                        ...
                    }
                })
            }
        }
    
    This is "documented" in these [1] USB-IF slides and being used on
    systems that ship with Windows.
    
    The _DSD can be added to tunneled USB3 and PCIe ports, and is needed to
    make sure the USB4 NHI is resumed before any of the tunneled ports so
    the protocol tunnels get established properly before the actual port
    itself is resumed. Othwerwise the USB/PCI core find the link may not be
    established and starts tearing down the device stack.
    
    This parses the ACPI description each time NHI is probed and tries to
    find devices that has the property and it references the NHI in
    question. For each matching device a device link from that device to the
    NHI is created.
    
    Since USB3 ports themselves do not get runtime suspended with the parent
    device (hub) we do not add the link from the USB3 port to USB4 NHI but
    instead we add the link from the xHCI device. This makes the device link
    usable for runtime PM as well.
    
    [1] https://www.usb.org/sites/default/files/D1T2-2%20-%20USB4%20on%20Windows.pdfSigned-off-by: default avatarMika Westerberg <mika.westerberg@linux.intel.com>
    Acked-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    b2be2b05
acpi.c 2.94 KB