RE: [PATCH v2 1/1] phy: freescale: imx8m-pcie: Do CMN_RST just before PHY PLL lock check

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

 



> -----Original Message-----
> From: Frank Li <frank.li@xxxxxxx>
> Sent: 2024年10月21日 23:53
> To: vkoul@xxxxxxxxxx
> Cc: Frank Li <frank.li@xxxxxxx>; festevam@xxxxxxxxx; Hongxing Zhu
> <hongxing.zhu@xxxxxxx>; imx@xxxxxxxxxxxxxxx; kernel@xxxxxxxxxxxxxx;
> kishon@xxxxxxxxxx; linux-arm-kernel@xxxxxxxxxxxxxxxxxxx;
> linux-kernel@xxxxxxxxxxxxxxx; linux-phy@xxxxxxxxxxxxxxxxxxx; Marcel Ziswiler
> <marcel.ziswiler@xxxxxxxxxxx>; s.hauer@xxxxxxxxxxxxxx;
> shawnguo@xxxxxxxxxx; stable@xxxxxxxxxxxxxxx
> Subject: [PATCH v2 1/1] phy: freescale: imx8m-pcie: Do CMN_RST just before
> PHY PLL lock check
> 
> From: Richard Zhu <hongxing.zhu@xxxxxxx>
> 
> 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.
> ---
Hi Frank:
Thanks a lot for your kindly help.
Since my server is down, I can't send out this v2 in the past days.

Hi Vinod:
Sorry for the late reply, and bring you inconvenience.

Best Regards
Richard Zhu

>  drivers/phy/freescale/phy-fsl-imx8m-pcie.c | 10 +++++-----
>  1 file changed, 5 insertions(+), 5 deletions(-)
> 
> 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);
> --
> 2.34.1





[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux