linux/drivers/pci/controller/dwc
Siddharth Vadapalli 8a8137376b PCI: keystone: Fix race condition when initializing PHYs
[ Upstream commit c12ca110c6 ]

The PCI driver invokes the PHY APIs using the ks_pcie_enable_phy()
function. The PHY in this case is the Serdes. It is possible that the
PCI instance is configured for two lane operation across two different
Serdes instances, using one lane of each Serdes.

In such a configuration, if the reference clock for one Serdes is
provided by the other Serdes, it results in a race condition. After the
Serdes providing the reference clock is initialized by the PCI driver by
invoking its PHY APIs, it is not guaranteed that this Serdes remains
powered on long enough for the PHY APIs based initialization of the
dependent Serdes. In such cases, the PLL of the dependent Serdes fails
to lock due to the absence of the reference clock from the former Serdes
which has been powered off by the PM Core.

Fix this by obtaining reference to the PHYs before invoking the PHY
initialization APIs and releasing reference after the initialization is
complete.

Link: https://lore.kernel.org/linux-pci/20230927041845.1222080-1-s-vadapalli@ti.com
Fixes: 49229238ab ("PCI: keystone: Cleanup PHY handling")
Signed-off-by: Siddharth Vadapalli <s-vadapalli@ti.com>
Signed-off-by: Krzysztof Wilczyński <kwilczynski@kernel.org>
Acked-by: Ravi Gunasekaran <r-gunasekaran@ti.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
History 2024-01-25 15:45:25 -08:00
..
Kconfig PCI: rcar-gen4: Add endpoint mode support 2023-10-23 12:40:10 +00:00
Makefile PCI: rcar-gen4: Add R-Car Gen4 PCIe controller support for host mode 2023-10-23 12:40:10 +00:00
pci-dra7xx.c PCI: Explicitly include correct DT includes 2023-07-18 14:33:17 -05:00
pci-exynos.c PCI: exynos: Don't discard .remove() callback 2023-10-10 12:13:05 -05:00
pci-imx6.c Merge branch 'pci/misc' 2023-08-29 11:03:57 -05:00
pci-keystone.c PCI: keystone: Fix race condition when initializing PHYs 2024-01-25 15:45:25 -08:00
pci-layerscape-ep.c PCI: layerscape-ep: Set 64-bit DMA mask 2023-10-10 17:40:05 +02:00
pci-layerscape.c PCI: Use PCI_HEADER_TYPE_* instead of literals 2023-10-03 11:55:59 -05:00
pci-meson.c Merge branch 'pci/misc' 2023-08-29 11:03:57 -05:00
pcie-al.c PCI: dwc: Rename struct pcie_port to dw_pcie_rp 2022-07-05 19:00:52 -05:00
pcie-armada8k.c PCI: Remove unnecessary <linux/of_irq.h> includes 2022-11-10 14:53:51 -06:00
pcie-artpec6.c PCI: Explicitly include correct DT includes 2023-07-18 14:33:17 -05:00
pcie-bt1.c PCI: dwc: Convert to platform remove callback returning void 2023-06-24 14:11:56 +00:00
pcie-designware-ep.c PCI: dwc: endpoint: Fix dw_pcie_ep_raise_msix_irq() alignment support 2024-01-25 15:45:16 -08:00
pcie-designware-host.c PCI: dwc: Add host_post_init() callback 2023-10-14 20:02:17 +00:00
pcie-designware-plat.c PCI: Explicitly include correct DT includes 2023-07-18 14:33:17 -05:00
pcie-designware.c PCI: dwc: Expose dw_pcie_write_dbi2() to module 2023-10-23 12:39:17 +00:00
pcie-designware.h Merge branch 'pci/controller/rcar' 2023-10-28 13:31:01 -05:00
pcie-dw-rockchip.c PCI: Explicitly include correct DT includes 2023-07-18 14:33:17 -05:00
pcie-fu740.c PCI: fu740: Set the number of MSI vectors 2023-08-23 09:33:23 +02:00
pcie-hisi.c PCI: hisi: Avoid invalid address space conversions 2022-01-03 15:05:28 -06:00
pcie-histb.c PCI: dwc: Convert to platform remove callback returning void 2023-06-24 14:11:56 +00:00
pcie-intel-gw.c PCI: Explicitly include correct DT includes 2023-07-18 14:33:17 -05:00
pcie-keembay.c PCI: keembay: Remove cast between incompatible function type 2023-07-13 18:20:31 +00:00
pcie-kirin.c PCI: kirin: Don't discard .remove() callback 2023-10-10 12:13:09 -05:00
pcie-qcom-ep.c Merge branch 'pci/controller/speed' 2023-10-28 13:31:02 -05:00
pcie-qcom.c PCI: qcom: Clean up ASPM comment 2023-12-11 12:08:53 -06:00
pcie-rcar-gen4.c PCI: rcar-gen4: Add endpoint mode support 2023-10-23 12:40:10 +00:00
pcie-spear13xx.c Merge branch 'pci/misc' 2022-08-04 11:46:53 -05:00
pcie-tegra194-acpi.c PCI: dwc: Simplify in/outbound iATU setup methods 2022-08-01 15:15:09 -05:00
pcie-tegra194.c Merge branch 'pci/field-get' 2023-10-28 13:31:05 -05:00
pcie-uniphier-ep.c PCI: Explicitly include correct DT includes 2023-07-18 14:33:17 -05:00
pcie-uniphier.c PCI: dwc: Rename struct pcie_port to dw_pcie_rp 2022-07-05 19:00:52 -05:00
pcie-visconti.c PCI: dwc: Rename struct pcie_port to dw_pcie_rp 2022-07-05 19:00:52 -05:00