linux/drivers/pci/controller/dwc
Rob Herring 275e88b06a PCI: tegra: Fix host link initialization
Commit b9ac0f9dc8 ("PCI: dwc: Move dw_pcie_setup_rc() to DWC common
code") broke enumeration of downstream devices on Tegra:

In non-working case (next-20201211):

  0001:00:00.0 PCI bridge: NVIDIA Corporation Device 1ad2 (rev a1)
  0001:01:00.0 SATA controller: Marvell Technology Group Ltd. Device 9171 (rev 13)
  0005:00:00.0 PCI bridge: NVIDIA Corporation Device 1ad0 (rev a1)

In working case (v5.10-rc7):

  0001:00:00.0 PCI bridge: Molex Incorporated Device 1ad2 (rev a1)
  0001:01:00.0 SATA controller: Marvell Technology Group Ltd. Device 9171 (rev 13)
  0005:00:00.0 PCI bridge: Molex Incorporated Device 1ad0 (rev a1)
  0005:01:00.0 PCI bridge: PLX Technology, Inc. Device 3380 (rev ab)
  0005:02:02.0 PCI bridge: PLX Technology, Inc. Device 3380 (rev ab)
  0005:03:00.0 USB controller: PLX Technology, Inc. Device 3380 (rev ab)

The problem seems to be dw_pcie_setup_rc() is now called twice before and
after the link up handling. The fix is to move Tegra's link up handling to
.start_link() function like other DWC drivers. Tegra is a bit more
complicated than others as it re-inits the whole DWC controller to retry
the link. With this, the initialization ordering is restored to match the
prior sequence.

Fixes: b9ac0f9dc8 ("PCI: dwc: Move dw_pcie_setup_rc() to DWC common code")
Link: https://lore.kernel.org/r/20201218143905.1614098-1-robh@kernel.org
Reported-by: Mian Yousaf Kaukab <ykaukab@suse.de>
Tested-by: Mian Yousaf Kaukab <ykaukab@suse.de>
Signed-off-by: Rob Herring <robh@kernel.org>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Cc: Thierry Reding <thierry.reding@gmail.com>
Cc: Jonathan Hunter <jonathanh@nvidia.com>
Cc: Vidya Sagar <vidyas@nvidia.com>
2020-12-25 21:58:36 -06:00
..
Kconfig Merge branch 'remotes/lorenzo/pci/keystone' 2020-12-15 15:11:12 -06:00
Makefile PCI: uniphier: Add Socionext UniPhier Pro5 PCIe endpoint controller driver 2020-06-04 10:03:18 +01:00
pci-dra7xx.c PCI: dwc: Move dw_pcie_setup_rc() to DWC common code 2020-11-19 10:51:41 +00:00
pci-exynos.c PCI: dwc: exynos: Rework the driver to support Exynos5433 variant 2020-12-01 10:22:30 +00:00
pci-imx6.c PCI: dwc: Remove unnecessary wrappers around dw_pcie_host_init() 2020-11-19 10:51:41 +00:00
pci-keystone.c Revert "PCI: dwc/keystone: Drop duplicated 'num-viewport'" 2020-11-19 10:51:41 +00:00
pci-layerscape-ep.c PCI: dwc: Move "dbi", "dbi2", and "addr_space" resource setup into common code 2020-11-19 10:51:40 +00:00
pci-layerscape.c PCI: dwc: Remove unnecessary wrappers around dw_pcie_host_init() 2020-11-19 10:51:41 +00:00
pci-meson.c PCI: dwc: Remove unnecessary wrappers around dw_pcie_host_init() 2020-11-19 10:51:41 +00:00
pcie-al.c Merge branch 'remotes/lorenzo/pci/dwc' 2020-12-15 15:11:11 -06:00
pcie-armada8k.c PCI: dwc: Move dw_pcie_setup_rc() to DWC common code 2020-11-19 10:51:41 +00:00
pcie-artpec6.c PCI: dwc: Remove unnecessary wrappers around dw_pcie_host_init() 2020-11-19 10:51:41 +00:00
pcie-designware-ep.c PCI: dwc: Detect number of iATU windows 2020-11-19 10:51:41 +00:00
pcie-designware-host.c PCI: dwc: Set 32-bit DMA mask for MSI target address allocation 2020-12-10 11:47:26 +00:00
pcie-designware-plat.c PCI: dwc: Move dw_pcie_setup_rc() to DWC common code 2020-11-19 10:51:41 +00:00
pcie-designware.c PCI: dwc: Detect number of iATU windows 2020-11-19 10:51:41 +00:00
pcie-designware.h PCI: dwc: Detect number of iATU windows 2020-11-19 10:51:41 +00:00
pcie-hisi.c PCI: Unify ECAM constants in native PCI Express drivers 2020-12-10 14:55:49 -06:00
pcie-histb.c PCI: dwc: Move dw_pcie_setup_rc() to DWC common code 2020-11-19 10:51:41 +00:00
pcie-intel-gw.c PCI: dwc: Detect number of iATU windows 2020-11-19 10:51:41 +00:00
pcie-kirin.c PCI: dwc: Remove unnecessary wrappers around dw_pcie_host_init() 2020-11-19 10:51:41 +00:00
pcie-qcom.c PCI: qcom: Add support for configuring BDF to SID mapping for SM8250 2020-12-09 15:07:11 +00:00
pcie-spear13xx.c PCI: dwc: Move dw_pcie_setup_rc() to DWC common code 2020-11-19 10:51:41 +00:00
pcie-tegra194.c PCI: tegra: Fix host link initialization 2020-12-25 21:58:36 -06:00
pcie-uniphier-ep.c PCI: dwc: Move "dbi", "dbi2", and "addr_space" resource setup into common code 2020-11-19 10:51:40 +00:00
pcie-uniphier.c PCI: dwc: Remove unnecessary wrappers around dw_pcie_host_init() 2020-11-19 10:51:41 +00:00