Patch "phy: freescale: imx8m-pcie: Do CMN_RST just before PHY PLL lock check" has been added to the 6.11-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

    phy: freescale: imx8m-pcie: Do CMN_RST just before PHY PLL lock check

to the 6.11-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:
     phy-freescale-imx8m-pcie-do-cmn_rst-just-before-phy-.patch
and it can be found in the queue-6.11 subdirectory.

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



commit fe97ed0862384798e6288056ef6aef29d8a3383d
Author: Richard Zhu <hongxing.zhu@xxxxxxx>
Date:   Mon Oct 21 11:52:41 2024 -0400

    phy: freescale: imx8m-pcie: Do CMN_RST just before PHY PLL lock check
    
    [ Upstream commit f89263b69731e0144d275fff777ee0dd92069200 ]
    
    When enable initcall_debug together with higher debug level below.
    CONFIG_CONSOLE_LOGLEVEL_DEFAULT=9
    CONFIG_CONSOLE_LOGLEVEL_QUIET=9
    CONFIG_MESSAGE_LOGLEVEL_DEFAULT=7
    
    The initialization of i.MX8MP PCIe PHY might be timeout failed randomly.
    To fix this issue, adjust the sequence of the resets refer to the power
    up sequence listed below.
    
    i.MX8MP PCIe PHY power up sequence:
                              /---------------------------------------------
    1.8v supply     ---------/
                        /---------------------------------------------------
    0.8v supply     ---/
    
                    ---\ /--------------------------------------------------
                        X        REFCLK Valid
    Reference Clock ---/ \--------------------------------------------------
                                 -------------------------------------------
                                 |
    i_init_restn    --------------
                                        ------------------------------------
                                        |
    i_cmn_rstn      ---------------------
                                             -------------------------------
                                             |
    o_pll_lock_done --------------------------
    
    Logs:
    imx6q-pcie 33800000.pcie: host bridge /soc@0/pcie@33800000 ranges:
    imx6q-pcie 33800000.pcie:       IO 0x001ff80000..0x001ff8ffff -> 0x0000000000
    imx6q-pcie 33800000.pcie:      MEM 0x0018000000..0x001fefffff -> 0x0018000000
    probe of clk_imx8mp_audiomix.reset.0 returned 0 after 1052 usecs
    probe of 30e20000.clock-controller returned 0 after 32971 usecs
    phy phy-32f00000.pcie-phy.4: phy poweron failed --> -110
    probe of 30e10000.dma-controller returned 0 after 10235 usecs
    imx6q-pcie 33800000.pcie: waiting for PHY ready timeout!
    dwhdmi-imx 32fd8000.hdmi: Detected HDMI TX controller v2.13a with HDCP (samsung_dw_hdmi_phy2)
    imx6q-pcie 33800000.pcie: probe with driver imx6q-pcie failed with error -110
    
    Fixes: dce9edff16ee ("phy: freescale: imx8m-pcie: Add i.MX8MP PCIe PHY support")
    Cc: stable@xxxxxxxxxxxxxxx
    Signed-off-by: Richard Zhu <hongxing.zhu@xxxxxxx>
    Signed-off-by: Frank Li <Frank.Li@xxxxxxx>
    
    v2 changes:
    - Rebase to latest fixes branch of linux-phy git repo.
    - Richard's environment have problem and can't sent out patch. So I help
    post this fix patch.
    
    Link: https://lore.kernel.org/r/20241021155241.943665-1-Frank.Li@xxxxxxx
    Signed-off-by: Vinod Koul <vkoul@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/phy/freescale/phy-fsl-imx8m-pcie.c b/drivers/phy/freescale/phy-fsl-imx8m-pcie.c
index 11fcb1867118c..e98361dcdeadf 100644
--- a/drivers/phy/freescale/phy-fsl-imx8m-pcie.c
+++ b/drivers/phy/freescale/phy-fsl-imx8m-pcie.c
@@ -141,11 +141,6 @@ static int imx8_pcie_phy_power_on(struct phy *phy)
 			   IMX8MM_GPR_PCIE_REF_CLK_PLL);
 	usleep_range(100, 200);
 
-	/* Do the PHY common block reset */
-	regmap_update_bits(imx8_phy->iomuxc_gpr, IOMUXC_GPR14,
-			   IMX8MM_GPR_PCIE_CMN_RST,
-			   IMX8MM_GPR_PCIE_CMN_RST);
-
 	switch (imx8_phy->drvdata->variant) {
 	case IMX8MP:
 		reset_control_deassert(imx8_phy->perst);
@@ -156,6 +151,11 @@ static int imx8_pcie_phy_power_on(struct phy *phy)
 		break;
 	}
 
+	/* Do the PHY common block reset */
+	regmap_update_bits(imx8_phy->iomuxc_gpr, IOMUXC_GPR14,
+			   IMX8MM_GPR_PCIE_CMN_RST,
+			   IMX8MM_GPR_PCIE_CMN_RST);
+
 	/* Polling to check the phy is ready or not. */
 	ret = readl_poll_timeout(imx8_phy->base + IMX8MM_PCIE_PHY_CMN_REG075,
 				 val, val == ANA_PLL_DONE, 10, 20000);




[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