Patch "PCI: keystone: Fix race condition when initializing PHYs" has been added to the 5.4-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    PCI: keystone: Fix race condition when initializing PHYs

to the 5.4-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     pci-keystone-fix-race-condition-when-initializing-ph.patch
and it can be found in the queue-5.4 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 7e76cfd1e54efc18eca65df943457e8d0332b491
Author: Siddharth Vadapalli <s-vadapalli@xxxxxx>
Date:   Wed Sep 27 09:48:45 2023 +0530

    PCI: keystone: Fix race condition when initializing PHYs
    
    [ Upstream commit c12ca110c613a81cb0f0099019c839d078cd0f38 ]
    
    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@xxxxxx
    Fixes: 49229238ab47 ("PCI: keystone: Cleanup PHY handling")
    Signed-off-by: Siddharth Vadapalli <s-vadapalli@xxxxxx>
    Signed-off-by: Krzysztof Wilczyński <kwilczynski@xxxxxxxxxx>
    Acked-by: Ravi Gunasekaran <r-gunasekaran@xxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/pci/controller/dwc/pci-keystone.c b/drivers/pci/controller/dwc/pci-keystone.c
index 920444b1cfc7..b18ddb2b9ef8 100644
--- a/drivers/pci/controller/dwc/pci-keystone.c
+++ b/drivers/pci/controller/dwc/pci-keystone.c
@@ -1305,7 +1305,16 @@ static int ks_pcie_probe(struct platform_device *pdev)
 		goto err_link;
 	}
 
+	/* Obtain references to the PHYs */
+	for (i = 0; i < num_lanes; i++)
+		phy_pm_runtime_get_sync(ks_pcie->phy[i]);
+
 	ret = ks_pcie_enable_phy(ks_pcie);
+
+	/* Release references to the PHYs */
+	for (i = 0; i < num_lanes; i++)
+		phy_pm_runtime_put_sync(ks_pcie->phy[i]);
+
 	if (ret) {
 		dev_err(dev, "failed to enable phy\n");
 		goto err_link;




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux