From: Alexander Stein <alexander.stein@ew.tq-group.com>
To: Vinod Koul <vkoul@kernel.org>,
linux-phy@lists.infradead.org,
Aristo Chen <aristo.chen@canonical.com>
Cc: Neil Armstrong <neil.armstrong@linaro.org>,
Manivannan Sadhasivam <mani@kernel.org>,
Brian Masney <bmasney@redhat.com>,
Fabio Estevam <festevam@nabladev.com>,
Lucas Stach <l.stach@pengutronix.de>,
Adam Ford <aford173@gmail.com>,
Marco Felsch <m.felsch@pengutronix.de>,
linux-kernel@vger.kernel.org,
Aristo Chen <aristo.chen@canonical.com>
Subject: Re: [PATCH 1/1] phy: freescale: fsl-samsung-hdmi: initialize default rate
Date: Wed, 11 Nov 2026 08:11:39 +0100 [thread overview]
Message-ID: <13219248.O9o76ZdvQC@steina-w> (raw)
In-Reply-To: <20260903054811.9720-1-aristo.chen@canonical.com>
Hi,
Am Donnerstag, 3. September 2026, 07:47:58 Mitteleuropäische Normalzeit schrieb Aristo Chen:
> The HDMI PHY clock reports 74.25 MHz when cur_cfg is unset, but does
> not establish that rate in hardware. The common clock framework caches
> the reported rate when registering the clock and skips a first
> clk_set_rate(74250000) request because the rate appears unchanged.
>
> Consequently, a display whose initial mode uses a 74.25 MHz pixel clock
> can leave the PHY with its bootloader register state and receive no
> TMDS signal. Requesting another rate first avoids the issue because the
> set_rate callback configures the PHY.
>
> Program the 74.25 MHz table entry with the reference clock enabled
> before registering the clock provider. recalc_rate can then report the
> configured rate, and a skipped first rate change is safe. Also enable
> the reference clock when restoring that configuration on resume.
>
> Fixes: 6ad082bee902 ("phy: freescale: add Samsung HDMI PHY")
> Signed-off-by: Aristo Chen <aristo.chen@canonical.com>
Unfortunately this breaks my platform (imx8mp-tqma8mpql-mba8mpxl.dts).
With this patch applied I get the following errors in kernel log:
> fsl-samsung-hdmi-phy 32fdff00.phy: PLL failed to lock
> fsl-samsung-hdmi-phy 32fdff00.phy: error -ETIMEDOUT: failed to configure default rate
> fsl-samsung-hdmi-phy 32fdff00.phy: probe with driver fsl-samsung-hdmi-phy failed with error -110
Reverting fixes my platform and HDMI as expected.
Best regards,
Alexander
> ---
> drivers/phy/freescale/phy-fsl-samsung-hdmi.c | 59 +++++++++++++++-----
> 1 file changed, 44 insertions(+), 15 deletions(-)
>
> diff --git a/drivers/phy/freescale/phy-fsl-samsung-hdmi.c b/drivers/phy/freescale/phy-fsl-samsung-hdmi.c
> index 0f25d81de61b..41addd4ad414 100644
> --- a/drivers/phy/freescale/phy-fsl-samsung-hdmi.c
> +++ b/drivers/phy/freescale/phy-fsl-samsung-hdmi.c
> @@ -44,6 +44,8 @@
> #define MHZ (1000UL * 1000UL)
> #endif
>
> +#define PHY_DEFAULT_RATE 74250000
> +
> #define PHY_PLL_DIV_REGS_NUM 7
>
> struct phy_config {
> @@ -489,17 +491,6 @@ static int fsl_samsung_hdmi_phy_configure(struct fsl_samsung_hdmi_phy *phy,
> return ret;
> }
>
> -static unsigned long phy_clk_recalc_rate(struct clk_hw *hw,
> - unsigned long parent_rate)
> -{
> - struct fsl_samsung_hdmi_phy *phy = to_fsl_samsung_hdmi_phy(hw);
> -
> - if (!phy->cur_cfg)
> - return 74250000;
> -
> - return phy->cur_cfg->pixclk;
> -}
> -
> /* Helper function to lookup the available fractional-divider rate */
> static const struct phy_config *fsl_samsung_hdmi_phy_lookup_rate(unsigned long rate)
> {
> @@ -520,6 +511,14 @@ static const struct phy_config *fsl_samsung_hdmi_phy_lookup_rate(unsigned long r
> &phy_pll_cfg[i] : &phy_pll_cfg[i+1]);
> }
>
> +static unsigned long phy_clk_recalc_rate(struct clk_hw *hw,
> + unsigned long parent_rate)
> +{
> + struct fsl_samsung_hdmi_phy *phy = to_fsl_samsung_hdmi_phy(hw);
> +
> + return phy->cur_cfg->pixclk;
> +}
> +
> static void fsl_samsung_hdmi_calculate_phy(struct phy_config *cal_phy, unsigned long rate,
> u8 p, u16 m, u8 s)
> {
> @@ -640,6 +639,7 @@ static int phy_clk_register(struct fsl_samsung_hdmi_phy *phy)
>
> static int fsl_samsung_hdmi_phy_probe(struct platform_device *pdev)
> {
> + const struct phy_config *default_cfg;
> struct fsl_samsung_hdmi_phy *phy;
> int ret;
>
> @@ -664,6 +664,23 @@ static int fsl_samsung_hdmi_phy_probe(struct platform_device *pdev)
> return dev_err_probe(phy->dev, PTR_ERR(phy->refclk),
> "failed to get ref clk\n");
>
> + /*
> + * Establish the rate reported by recalc_rate() before registering the
> + * clock. Otherwise CCF may skip the first set_rate() when it requests
> + * the assumed default rate, leaving the PHY unconfigured.
> + */
> + ret = clk_prepare_enable(phy->refclk);
> + if (ret)
> + return dev_err_probe(phy->dev, ret,
> + "failed to enable ref clk\n");
> +
> + default_cfg = fsl_samsung_hdmi_phy_lookup_rate(PHY_DEFAULT_RATE);
> + ret = fsl_samsung_hdmi_phy_configure(phy, default_cfg);
> + clk_disable_unprepare(phy->refclk);
> + if (ret)
> + return dev_err_probe(phy->dev, ret,
> + "failed to configure default rate\n");
> +
> pm_runtime_get_noresume(phy->dev);
> pm_runtime_set_active(phy->dev);
> pm_runtime_enable(phy->dev);
> @@ -702,7 +719,7 @@ static int __maybe_unused fsl_samsung_hdmi_phy_suspend(struct device *dev)
> static int __maybe_unused fsl_samsung_hdmi_phy_resume(struct device *dev)
> {
> struct fsl_samsung_hdmi_phy *phy = dev_get_drvdata(dev);
> - int ret = 0;
> + int ret;
>
> ret = clk_prepare_enable(phy->apbclk);
> if (ret) {
> @@ -710,11 +727,23 @@ static int __maybe_unused fsl_samsung_hdmi_phy_resume(struct device *dev)
> return ret;
> }
>
> - if (phy->cur_cfg)
> - ret = fsl_samsung_hdmi_phy_configure(phy, phy->cur_cfg);
> + if (!phy->cur_cfg)
> + return 0;
>
> - return ret;
> + ret = clk_prepare_enable(phy->refclk);
> + if (ret) {
> + dev_err(phy->dev, "failed to enable ref clk\n");
> + goto disable_apbclk;
> + }
> +
> + ret = fsl_samsung_hdmi_phy_configure(phy, phy->cur_cfg);
> + clk_disable_unprepare(phy->refclk);
> + if (!ret)
> + return 0;
>
> +disable_apbclk:
> + clk_disable_unprepare(phy->apbclk);
> + return ret;
> }
>
> static DEFINE_RUNTIME_DEV_PM_OPS(fsl_samsung_hdmi_phy_pm_ops,
>
--
TQ-Systems GmbH | Mühlstraße 2, Gut Delling | 82229 Seefeld, Germany
Amtsgericht München, HRB 105018
Geschäftsführer: Detlef Schneider, Rüdiger Stahl, Stefan Schneider
http://www.tq-group.com/
prev parent reply other threads:[~2026-11-11 7:11 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-03 5:47 Aristo Chen
2026-10-03 20:49 ` Vinod Koul
2026-11-11 7:11 ` Alexander Stein [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=13219248.O9o76ZdvQC@steina-w \
--to=alexander.stein@ew.tq-group.com \
--cc=aford173@gmail.com \
--cc=aristo.chen@canonical.com \
--cc=bmasney@redhat.com \
--cc=festevam@nabladev.com \
--cc=l.stach@pengutronix.de \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-phy@lists.infradead.org \
--cc=m.felsch@pengutronix.de \
--cc=mani@kernel.org \
--cc=neil.armstrong@linaro.org \
--cc=vkoul@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®