Patch "PCI: qcom: Set up rev 2.1.0 PARF_PHY before enabling clocks" has been added to the 5.18-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: qcom: Set up rev 2.1.0 PARF_PHY before enabling clocks

to the 5.18-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-qcom-set-up-rev-2.1.0-parf_phy-before-enabling-c.patch
and it can be found in the queue-5.18 subdirectory.

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



commit 6e51fe80f2d8ce98618f32e5b4d9b0dc116f3b9c
Author: Christian Marangi <ansuelsmth@xxxxxxxxx>
Date:   Sat Jul 9 00:27:43 2022 +0200

    PCI: qcom: Set up rev 2.1.0 PARF_PHY before enabling clocks
    
    [ Upstream commit 38f897ae3d44900f627cad708a15db498ce2ca31 ]
    
    We currently enable clocks BEFORE we write to PARF_PHY_CTRL reg to enable
    clocks and resets. This causes the driver to never set to a ready state
    with the error 'Phy link never came up'.
    
    This is caused by the PHY clock getting enabled before setting the required
    bits in the PARF regs.
    
    A workaround for this was set but with this new discovery we can drop
    the workaround and use a proper solution to the problem by just enabling
    the clock only AFTER the PARF_PHY_CTRL bit is set.
    
    This correctly sets up the PCIe link and makes it usable even when a
    bootloader leaves the PCIe link in an undefined state.
    
    Fixes: 82a823833f4e ("PCI: qcom: Add Qualcomm PCIe controller driver")
    Link: https://lore.kernel.org/r/20220708222743.27019-1-ansuelsmth@xxxxxxxxx
    Signed-off-by: Christian Marangi <ansuelsmth@xxxxxxxxx>
    Signed-off-by: Bjorn Helgaas <bhelgaas@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/pci/controller/dwc/pcie-qcom.c b/drivers/pci/controller/dwc/pcie-qcom.c
index ed55421eb9ba..ab04818f6ed9 100644
--- a/drivers/pci/controller/dwc/pcie-qcom.c
+++ b/drivers/pci/controller/dwc/pcie-qcom.c
@@ -337,8 +337,6 @@ static int qcom_pcie_init_2_1_0(struct qcom_pcie *pcie)
 	reset_control_assert(res->ext_reset);
 	reset_control_assert(res->phy_reset);
 
-	writel(1, pcie->parf + PCIE20_PARF_PHY_CTRL);
-
 	ret = regulator_bulk_enable(ARRAY_SIZE(res->supplies), res->supplies);
 	if (ret < 0) {
 		dev_err(dev, "cannot enable regulators\n");
@@ -381,15 +379,15 @@ static int qcom_pcie_init_2_1_0(struct qcom_pcie *pcie)
 		goto err_deassert_axi;
 	}
 
-	ret = clk_bulk_prepare_enable(ARRAY_SIZE(res->clks), res->clks);
-	if (ret)
-		goto err_clks;
-
 	/* enable PCIe clocks and resets */
 	val = readl(pcie->parf + PCIE20_PARF_PHY_CTRL);
 	val &= ~BIT(0);
 	writel(val, pcie->parf + PCIE20_PARF_PHY_CTRL);
 
+	ret = clk_bulk_prepare_enable(ARRAY_SIZE(res->clks), res->clks);
+	if (ret)
+		goto err_clks;
+
 	if (of_device_is_compatible(node, "qcom,pcie-ipq8064") ||
 	    of_device_is_compatible(node, "qcom,pcie-ipq8064-v2")) {
 		writel(PCS_DEEMPH_TX_DEEMPH_GEN1(24) |



[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