mbox series

[v4,0/2] PCI: Add missing link delays

Message ID 20191112091617.70282-1-mika.westerberg@linux.intel.com (mailing list archive)
Headers show
Series PCI: Add missing link delays | expand

Message

Mika Westerberg Nov. 12, 2019, 9:16 a.m. UTC
Hi,

This is fourth version of the reworked PCIe link delay patch posted earlier
here:

  v3: https://www.spinics.net/lists/linux-pci/msg88760.html
  v2: https://lore.kernel.org/linux-pci/20191004123947.11087-1-mika.westerberg@linux.intel.com/
  v1: https://patchwork.kernel.org/patch/11106611/

Changes from v3:

  * Add tag from Rafael.
  * Hold pci_bus_sem when accessing bus->devices list.

Changes from v2:

  * Rebased on top of pci.git/pci/pm.
  * Update references to PCIe 5.0 spec.
  * Take d3cold_delay if child devices into account. This allows ACPI _DSM
    to lower the delay.
  * Check for pci_dev->skip_bus_pm in pci_pm_resume_noirq().
  * Drop comment that mentions pciehp where
    pci_bridge_wait_for_secondary_bus() is called.
  * Use pcie_downstream_port() in pci_bridge_wait_for_secondary_bus().

Based on the discussion around v2 there is a potential issue when restoring
PCI_EXP_LNKCTL2 (regardless these patches) that we may need to retrain the
link. This series does not include fix for that since it is not yet clear
how we solve it. I can do that as a separate patch once we agree on the
solution.

I'm submitting these two now in hopes that we can get them included for
v5.5 because there are systems out there that need them in order to
function properly.

Changes from v1:

  * Introduce pcie_wait_for_link_delay() in a separate patch
  * Tidy up changelog, remove some debug output
  * Rename pcie_wait_downstream_accessible() to
    pci_bridge_wait_for_secondary_bus() and make it generic to all PCI
    bridges.
  * Handle Tpvrh + Trhfa for conventional PCI even though we don't do PM
    for them right now.
  * Use pci_dbg() instead of dev_dbg().
  * Dropped check for pm_suspend_no_platform() and only check for D3cold.
  * Drop pcie_get_downstream_delay(), same delay applies equally to all
    devices (it is not entirely clear from the spec).

Mika Westerberg (2):
  PCI: Introduce pcie_wait_for_link_delay()
  PCI: Add missing link delays required by the PCIe spec

 drivers/pci/pci-driver.c |  11 ++-
 drivers/pci/pci.c        | 148 ++++++++++++++++++++++++++++++++++++---
 drivers/pci/pci.h        |   1 +
 3 files changed, 150 insertions(+), 10 deletions(-)

Comments

Bjorn Helgaas Nov. 14, 2019, 11:25 p.m. UTC | #1
On Tue, Nov 12, 2019 at 12:16:15PM +0300, Mika Westerberg wrote:
> Hi,
> 
> This is fourth version of the reworked PCIe link delay patch posted earlier
> here:
> 
>   v3: https://www.spinics.net/lists/linux-pci/msg88760.html
>   v2: https://lore.kernel.org/linux-pci/20191004123947.11087-1-mika.westerberg@linux.intel.com/
>   v1: https://patchwork.kernel.org/patch/11106611/
> 
> Changes from v3:
> 
>   * Add tag from Rafael.
>   * Hold pci_bus_sem when accessing bus->devices list.
> 
> Changes from v2:
> 
>   * Rebased on top of pci.git/pci/pm.
>   * Update references to PCIe 5.0 spec.
>   * Take d3cold_delay if child devices into account. This allows ACPI _DSM
>     to lower the delay.
>   * Check for pci_dev->skip_bus_pm in pci_pm_resume_noirq().
>   * Drop comment that mentions pciehp where
>     pci_bridge_wait_for_secondary_bus() is called.
>   * Use pcie_downstream_port() in pci_bridge_wait_for_secondary_bus().
> 
> Based on the discussion around v2 there is a potential issue when restoring
> PCI_EXP_LNKCTL2 (regardless these patches) that we may need to retrain the
> link. This series does not include fix for that since it is not yet clear
> how we solve it. I can do that as a separate patch once we agree on the
> solution.
> 
> I'm submitting these two now in hopes that we can get them included for
> v5.5 because there are systems out there that need them in order to
> function properly.
> 
> Changes from v1:
> 
>   * Introduce pcie_wait_for_link_delay() in a separate patch
>   * Tidy up changelog, remove some debug output
>   * Rename pcie_wait_downstream_accessible() to
>     pci_bridge_wait_for_secondary_bus() and make it generic to all PCI
>     bridges.
>   * Handle Tpvrh + Trhfa for conventional PCI even though we don't do PM
>     for them right now.
>   * Use pci_dbg() instead of dev_dbg().
>   * Dropped check for pm_suspend_no_platform() and only check for D3cold.
>   * Drop pcie_get_downstream_delay(), same delay applies equally to all
>     devices (it is not entirely clear from the spec).
> 
> Mika Westerberg (2):
>   PCI: Introduce pcie_wait_for_link_delay()
>   PCI: Add missing link delays required by the PCIe spec
> 
>  drivers/pci/pci-driver.c |  11 ++-
>  drivers/pci/pci.c        | 148 ++++++++++++++++++++++++++++++++++++---
>  drivers/pci/pci.h        |   1 +
>  3 files changed, 150 insertions(+), 10 deletions(-)

Applied to pci/pm for v5.5, thanks, Mika!