Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'pci/reset'

- Wait longer for devices to become ready after resume (as we do for reset)
to accommodate Intel Titan Ridge xHCI devices (Mika Westerberg)

- Drop pci_bridge_wait_for_secondary_bus() timeout parameter since all
callers pass the same value (Mika Westerberg)

- Extend D3hot delay for NVIDIA HDA controllers to avoid unrecoverable
devices after a bus reset (Alex Williamson)

* pci/reset:
PCI/PM: Extend D3hot delay for NVIDIA HDA controllers
PCI/PM: Drop pci_bridge_wait_for_secondary_bus() timeout parameter
PCI/PM: Increase wait time after resume

+29 -17
+2 -1
drivers/pci/pci-driver.c
··· 572 572 573 573 static void pci_pm_bridge_power_up_actions(struct pci_dev *pci_dev) 574 574 { 575 - pci_bridge_wait_for_secondary_bus(pci_dev, "resume", PCI_RESET_WAIT); 575 + pci_bridge_wait_for_secondary_bus(pci_dev, "resume"); 576 + 576 577 /* 577 578 * When powering on a bridge from D3cold, the whole hierarchy may be 578 579 * powered on into D0uninitialized state, resume them to give them a
+12 -6
drivers/pci/pci.c
··· 64 64 65 65 #define PME_TIMEOUT 1000 /* How long between PME checks */ 66 66 67 + /* 68 + * Devices may extend the 1 sec period through Request Retry Status 69 + * completions (PCIe r6.0 sec 2.3.1). The spec does not provide an upper 70 + * limit, but 60 sec ought to be enough for any device to become 71 + * responsive. 72 + */ 73 + #define PCIE_RESET_READY_POLL_MS 60000 /* msec */ 74 + 67 75 static void pci_dev_d3_sleep(struct pci_dev *dev) 68 76 { 69 77 unsigned int delay_ms = max(dev->d3hot_delay, pci_pm_d3hot_delay); ··· 4947 4939 * pci_bridge_wait_for_secondary_bus - Wait for secondary bus to be accessible 4948 4940 * @dev: PCI bridge 4949 4941 * @reset_type: reset type in human-readable form 4950 - * @timeout: maximum time to wait for devices on secondary bus (milliseconds) 4951 4942 * 4952 4943 * Handle necessary delays before access to the devices on the secondary 4953 4944 * side of the bridge are permitted after D3cold to D0 transition ··· 4959 4952 * Return 0 on success or -ENOTTY if the first device on the secondary bus 4960 4953 * failed to become accessible. 4961 4954 */ 4962 - int pci_bridge_wait_for_secondary_bus(struct pci_dev *dev, char *reset_type, 4963 - int timeout) 4955 + int pci_bridge_wait_for_secondary_bus(struct pci_dev *dev, char *reset_type) 4964 4956 { 4965 4957 struct pci_dev *child; 4966 4958 int delay; ··· 5037 5031 } 5038 5032 } 5039 5033 5040 - return pci_dev_wait(child, reset_type, timeout - delay); 5034 + return pci_dev_wait(child, reset_type, 5035 + PCIE_RESET_READY_POLL_MS - delay); 5041 5036 } 5042 5037 5043 5038 void pci_reset_secondary_bus(struct pci_dev *dev) ··· 5075 5068 { 5076 5069 pcibios_reset_secondary_bus(dev); 5077 5070 5078 - return pci_bridge_wait_for_secondary_bus(dev, "bus reset", 5079 - PCIE_RESET_READY_POLL_MS); 5071 + return pci_bridge_wait_for_secondary_bus(dev, "bus reset"); 5080 5072 } 5081 5073 EXPORT_SYMBOL_GPL(pci_bridge_secondary_bus_reset); 5082 5074
+1 -8
drivers/pci/pci.h
··· 70 70 * Reset (PCIe r6.0 sec 5.8). 71 71 */ 72 72 #define PCI_RESET_WAIT 1000 /* msec */ 73 - /* 74 - * Devices may extend the 1 sec period through Request Retry Status completions 75 - * (PCIe r6.0 sec 2.3.1). The spec does not provide an upper limit, but 60 sec 76 - * ought to be enough for any device to become responsive. 77 - */ 78 - #define PCIE_RESET_READY_POLL_MS 60000 /* msec */ 79 73 80 74 void pci_update_current_state(struct pci_dev *dev, pci_power_t state); 81 75 void pci_refresh_power_state(struct pci_dev *dev); ··· 94 100 bool pci_bridge_d3_possible(struct pci_dev *dev); 95 101 void pci_bridge_d3_update(struct pci_dev *dev); 96 102 void pci_bridge_reconfigure_ltr(struct pci_dev *dev); 97 - int pci_bridge_wait_for_secondary_bus(struct pci_dev *dev, char *reset_type, 98 - int timeout); 103 + int pci_bridge_wait_for_secondary_bus(struct pci_dev *dev, char *reset_type); 99 104 100 105 static inline void pci_wakeup_event(struct pci_dev *dev) 101 106 {
+1 -2
drivers/pci/pcie/dpc.c
··· 170 170 pci_write_config_word(pdev, cap + PCI_EXP_DPC_STATUS, 171 171 PCI_EXP_DPC_STATUS_TRIGGER); 172 172 173 - if (pci_bridge_wait_for_secondary_bus(pdev, "DPC", 174 - PCIE_RESET_READY_POLL_MS)) { 173 + if (pci_bridge_wait_for_secondary_bus(pdev, "DPC")) { 175 174 clear_bit(PCI_DPC_RECOVERED, &pdev->priv_flags); 176 175 ret = PCI_ERS_RESULT_DISCONNECT; 177 176 } else {
+13
drivers/pci/quirks.c
··· 1940 1940 DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x6741, quirk_radeon_pm); 1941 1941 1942 1942 /* 1943 + * NVIDIA Ampere-based HDA controllers can wedge the whole device if a bus 1944 + * reset is performed too soon after transition to D0, extend d3hot_delay 1945 + * to previous effective default for all NVIDIA HDA controllers. 1946 + */ 1947 + static void quirk_nvidia_hda_pm(struct pci_dev *dev) 1948 + { 1949 + quirk_d3hot_delay(dev, 20); 1950 + } 1951 + DECLARE_PCI_FIXUP_CLASS_FINAL(PCI_VENDOR_ID_NVIDIA, PCI_ANY_ID, 1952 + PCI_CLASS_MULTIMEDIA_HD_AUDIO, 8, 1953 + quirk_nvidia_hda_pm); 1954 + 1955 + /* 1943 1956 * Ryzen5/7 XHCI controllers fail upon resume from runtime suspend or s2idle. 1944 1957 * https://bugzilla.kernel.org/show_bug.cgi?id=205587 1945 1958 *