[PATCH] phy: freescale: imx8m-pcie: Handle IMX8_PCIE_REFCLK_PAD_UNUSED

Hongxing Zhu hongxing.zhu at nxp.com
Sun Mar 13 18:51:08 PDT 2022


> -----Original Message-----
> From: Marek Vasut <marex at denx.de>
> Sent: 2022年3月12日 9:38
> To: linux-phy at lists.infradead.org
> Cc: Marek Vasut <marex at denx.de>; Fabio Estevam <festevam at denx.de>;
> Kishon Vijay Abraham I <kishon at ti.com>; Marcel Ziswiler
> <marcel.ziswiler at toradex.com>; dl-linux-imx <linux-imx at nxp.com>; Peng Fan
> <peng.fan at nxp.com>; Hongxing Zhu <hongxing.zhu at nxp.com>; Shawn Guo
> <shawnguo at kernel.org>; Vinod Koul <vkoul at kernel.org>;
> linux-arm-kernel at lists.infradead.org
> Subject: [PATCH] phy: freescale: imx8m-pcie: Handle
> IMX8_PCIE_REFCLK_PAD_UNUSED
> 
> The 'fsl,refclk-pad-mode' DT property used to select clock source for PCIe PHY
> can have either of three values, IMX8_PCIE_REFCLK_PAD_INPUT,
> IMX8_PCIE_REFCLK_PAD_OUTPUT, IMX8_PCIE_REFCLK_PAD_UNUSED. The first
> two options are handled correctly by the driver, the last one is not, this patch
> implements support for the last option.
> 
> The IMX8_PCIE_REFCLK_PAD_INPUT means PCIE_RESREF is PHY clock input,
> the IMX8_PCIE_REFCLK_PAD_OUTPUT means PHY clock are sourced from SoC
> internal PLL and output to PCIE_RESREF external IO pin. The last
> IMX8_PCIE_REFCLK_PAD_UNUSED is a combination of previous two, PHY clock
> are sourced from SoC internal PLL and not output anywhere.
> 
> Signed-off-by: Marek Vasut <marex at denx.de>
Hi Marek:
Thanks for your patch.
I assume that you had tested this IMX8_PCIE_REFCLK_PAD_UNUSED option.
The CLK_N/P pads are not connected on the tested board, right?
BTW, it's better to add the Fixes tag into the commit log.

Best Regards
Richard Zhu

> Cc: Fabio Estevam <festevam at denx.de>
> Cc: Kishon Vijay Abraham I <kishon at ti.com>
> Cc: Marcel Ziswiler <marcel.ziswiler at toradex.com>
> Cc: NXP Linux Team <linux-imx at nxp.com>
> Cc: Peng Fan <peng.fan at nxp.com>
> Cc: Richard Zhu <hongxing.zhu at nxp.com>
> Cc: Shawn Guo <shawnguo at kernel.org>
> Cc: Vinod Koul <vkoul at kernel.org>
> Cc: linux-arm-kernel at lists.infradead.org
> To: linux-phy at lists.infradead.org
> ---
>  drivers/phy/freescale/phy-fsl-imx8m-pcie.c | 10 ++++++++--
>  1 file changed, 8 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/phy/freescale/phy-fsl-imx8m-pcie.c
> b/drivers/phy/freescale/phy-fsl-imx8m-pcie.c
> index e56954063108c..7d8e6991279f4 100644
> --- a/drivers/phy/freescale/phy-fsl-imx8m-pcie.c
> +++ b/drivers/phy/freescale/phy-fsl-imx8m-pcie.c
> @@ -156,15 +156,21 @@ static int imx8_pcie_phy_init(struct phy *phy)
>  		break;
>  	}
> 
> -	if (pad_mode == IMX8_PCIE_REFCLK_PAD_INPUT) {
> +	if (pad_mode == IMX8_PCIE_REFCLK_PAD_INPUT ||
> +	    pad_mode == IMX8_PCIE_REFCLK_PAD_UNUSED) {
>  		/* Configure the pad as input */
>  		val = readl(imx8_phy->base + IMX8MM_PCIE_PHY_CMN_REG061);
>  		writel(val & ~ANA_PLL_CLK_OUT_TO_EXT_IO_EN,
>  		       imx8_phy->base + IMX8MM_PCIE_PHY_CMN_REG061);
> -	} else if (pad_mode == IMX8_PCIE_REFCLK_PAD_OUTPUT) {
> +	} else {
>  		/* Configure the PHY to output the refclock via pad */
>  		writel(ANA_PLL_CLK_OUT_TO_EXT_IO_EN,
>  		       imx8_phy->base + IMX8MM_PCIE_PHY_CMN_REG061);
> +	}
> +
> +	if (pad_mode == IMX8_PCIE_REFCLK_PAD_OUTPUT ||
> +	    pad_mode == IMX8_PCIE_REFCLK_PAD_UNUSED) {
> +		/* Source clock from SoC internal PLL */
>  		writel(ANA_PLL_CLK_OUT_TO_EXT_IO_SEL,
>  		       imx8_phy->base + IMX8MM_PCIE_PHY_CMN_REG062);
>  		writel(AUX_PLL_REFCLK_SEL_SYS_PLL,
> --
> 2.34.1



More information about the linux-phy mailing list