mbox series

[v2,0/2] phy: freescale: imx8m-pcie: fix and cleanup phy

Message ID 20250305144355.20364-1-eichest@gmail.com
Headers show
Series phy: freescale: imx8m-pcie: fix and cleanup phy | expand

Message

Stefan Eichenberger March 5, 2025, 2:43 p.m. UTC
The imx8m-pcie PHY PLL fails to lock under certain conditions when
returning from suspend. This is resolved by asserting the PHY reset when
powering off the PHY during suspend. This ensures that the PHY is
properly reset when powering on again in resume.

Changes in v2:
- Remove unnecessary check if perst is not null (Philipp)

Stefan Eichenberger (2):
  phy: freescale: imx8m-pcie: cleanup reset logic
  phy: freescale: imx8m-pcie: assert phy reset and perst in power off

 drivers/phy/freescale/phy-fsl-imx8m-pcie.c | 23 +++++++++++++---------
 1 file changed, 14 insertions(+), 9 deletions(-)

Comments

Frank Li March 5, 2025, 3:42 p.m. UTC | #1
On Wed, Mar 05, 2025 at 03:43:16PM +0100, Stefan Eichenberger wrote:
> From: Stefan Eichenberger <stefan.eichenberger@toradex.com>
>
> Ensure the PHY reset and perst is asserted during power-off to
> guarantee it is in a reset state upon repeated power-on calls. This
> resolves an issue where the PHY may not properly initialize during
> subsequent power-on cycles. Power-on will deassert the reset at the
> appropriate time after tuning the PHY parameters.
>
> During suspend/resume cycles, we observed that the PHY PLL failed to
> lock during resume when the CPU temperature increased from 65C to 75C.
> The observed errors were:
>   phy phy-32f00000.pcie-phy.3: phy poweron failed --> -110
>   imx6q-pcie 33800000.pcie: waiting for PHY ready timeout!
>   imx6q-pcie 33800000.pcie: PM: dpm_run_callback(): genpd_resume_noirq+0x0/0x80 returns -110
>   imx6q-pcie 33800000.pcie: PM: failed to resume noirq: error -110
>
> This resulted in a complete CPU freeze, which is resolved by ensuring
> the PHY is in reset during power-on, thus preventing PHY PLL failures.
>
> Cc: stable@vger.kernel.org
> Fixes: 1aa97b002258 ("phy: freescale: pcie: Initialize the imx8 pcie standalone phy driver")
> Signed-off-by: Stefan Eichenberger <stefan.eichenberger@toradex.com>

Reviewed-by: Frank Li <Frank.Li@nxp.com>

> ---
>  drivers/phy/freescale/phy-fsl-imx8m-pcie.c | 11 +++++++++++
>  1 file changed, 11 insertions(+)
>
> diff --git a/drivers/phy/freescale/phy-fsl-imx8m-pcie.c b/drivers/phy/freescale/phy-fsl-imx8m-pcie.c
> index 5b505e34ca364..7355d9921b646 100644
> --- a/drivers/phy/freescale/phy-fsl-imx8m-pcie.c
> +++ b/drivers/phy/freescale/phy-fsl-imx8m-pcie.c
> @@ -156,6 +156,16 @@ static int imx8_pcie_phy_power_on(struct phy *phy)
>  	return ret;
>  }
>
> +static int imx8_pcie_phy_power_off(struct phy *phy)
> +{
> +	struct imx8_pcie_phy *imx8_phy = phy_get_drvdata(phy);
> +
> +	reset_control_assert(imx8_phy->reset);
> +	reset_control_assert(imx8_phy->perst);
> +
> +	return 0;
> +}
> +
>  static int imx8_pcie_phy_init(struct phy *phy)
>  {
>  	struct imx8_pcie_phy *imx8_phy = phy_get_drvdata(phy);
> @@ -176,6 +186,7 @@ static const struct phy_ops imx8_pcie_phy_ops = {
>  	.init		= imx8_pcie_phy_init,
>  	.exit		= imx8_pcie_phy_exit,
>  	.power_on	= imx8_pcie_phy_power_on,
> +	.power_off	= imx8_pcie_phy_power_off,
>  	.owner		= THIS_MODULE,
>  };
>
> --
> 2.45.2
>
Hongxing Zhu March 6, 2025, 12:24 a.m. UTC | #2
Hi Stefan:
Thanks for the clean up and bug fix. Please update the commit with Frank's comments.
For this series, Acked-by: Richard Zhu <hongxing.zhu@nxp.com>

Best Regards
Richard Zhu

> -----Original Message-----
> From: Stefan Eichenberger <eichest@gmail.com>
> Sent: 2025年3月5日 22:43
> To: vkoul@kernel.org; kishon@kernel.org; shawnguo@kernel.org;
> s.hauer@pengutronix.de; kernel@pengutronix.de; festevam@gmail.com;
> p.zabel@pengutronix.de; tharvey@gateworks.com; Hongxing Zhu
> <hongxing.zhu@nxp.com>; Francesco Dolcini <francesco.dolcini@toradex.com>
> Cc: linux-phy@lists.infradead.org; imx@lists.linux.dev;
> linux-arm-kernel@lists.infradead.org; linux-kernel@vger.kernel.org
> Subject: [PATCH v2 0/2] phy: freescale: imx8m-pcie: fix and cleanup phy
> 
> The imx8m-pcie PHY PLL fails to lock under certain conditions when returning
> from suspend. This is resolved by asserting the PHY reset when powering off the
> PHY during suspend. This ensures that the PHY is properly reset when powering
> on again in resume.
> 
> Changes in v2:
> - Remove unnecessary check if perst is not null (Philipp)
> 
> Stefan Eichenberger (2):
>   phy: freescale: imx8m-pcie: cleanup reset logic
>   phy: freescale: imx8m-pcie: assert phy reset and perst in power off
> 
>  drivers/phy/freescale/phy-fsl-imx8m-pcie.c | 23 +++++++++++++---------
>  1 file changed, 14 insertions(+), 9 deletions(-)
> 
> --
> 2.45.2