U-Boot 2024.07 drops on aristainetos2 board the following warning: Failed to enable per_clk
and bootlogo is not seen on LVDS display. This patch uses old behaviour for systems without clock framework if CONFIG_CLK is not enabled. Fixes: bfc778cb93a3 ("driver: pwm: pwm-imx: get and enable per/ipg clock using dm") Fixes: 4eea76574062 ("pwm: imx: Remove unused references to CONFIG_IMX6_PWM_PER_CLK") Signed-off-by: Heiko Schocher <h...@denx.de> --- Changes in v3: add a default value for CFG_IMX6_PWM_PER_CLK as Fabio suggested add Fixes line for commit 4eea76574062 azure build: https://dev.azure.com/hs0298/hs/_build/results?buildId=123&view=results Changes in v2: use CONFIG_IS_ENABLED instead of IS_ENABLED as Anatolij suggested. drivers/pwm/pwm-imx.c | 60 +++++++++++++++++++++++++------------------ 1 file changed, 35 insertions(+), 25 deletions(-) diff --git a/drivers/pwm/pwm-imx.c b/drivers/pwm/pwm-imx.c index 320ea7c423..d285730694 100644 --- a/drivers/pwm/pwm-imx.c +++ b/drivers/pwm/pwm-imx.c @@ -14,6 +14,10 @@ #include <asm/io.h> #include <clk.h> +#if !defined(CFG_IMX6_PWM_PER_CLK) +#define CFG_IMX6_PWM_PER_CLK 66000000 +#endif + int pwm_config_internal(struct pwm_regs *pwm, unsigned long period_cycles, unsigned long duty_cycles, unsigned long prescale) { @@ -159,7 +163,11 @@ int pwm_dm_imx_get_parms(struct imx_pwm_priv *priv, int period_ns, { unsigned long long c; - c = clk_get_rate(&priv->per_clk); + if (CONFIG_IS_ENABLED(CLK)) + c = clk_get_rate(&priv->per_clk); + else + c = CFG_IMX6_PWM_PER_CLK; + c = c * period_ns; do_div(c, 1000000000); *period_c = c; @@ -226,43 +234,45 @@ static int imx_pwm_set_enable(struct udevice *dev, uint channel, bool enable) static int imx_pwm_of_to_plat(struct udevice *dev) { - int ret; + int __maybe_unused ret; struct imx_pwm_priv *priv = dev_get_priv(dev); priv->regs = dev_read_addr_ptr(dev); - ret = clk_get_by_name(dev, "per", &priv->per_clk); - if (ret) { - printf("Failed to get per_clk\n"); - return ret; - } - - ret = clk_get_by_name(dev, "ipg", &priv->ipg_clk); - if (ret) { - printf("Failed to get ipg_clk\n"); - return ret; + if (CONFIG_IS_ENABLED(CLK)) { + ret = clk_get_by_name(dev, "per", &priv->per_clk); + if (ret) { + printf("Failed to get per_clk\n"); + return ret; + } + + ret = clk_get_by_name(dev, "ipg", &priv->ipg_clk); + if (ret) { + printf("Failed to get ipg_clk\n"); + return ret; + } } - return 0; } static int imx_pwm_probe(struct udevice *dev) { - int ret; + int __maybe_unused ret; struct imx_pwm_priv *priv = dev_get_priv(dev); - ret = clk_enable(&priv->per_clk); - if (ret) { - printf("Failed to enable per_clk\n"); - return ret; + if (CONFIG_IS_ENABLED(CLK)) { + ret = clk_enable(&priv->per_clk); + if (ret) { + printf("Failed to enable per_clk\n"); + return ret; + } + + ret = clk_enable(&priv->ipg_clk); + if (ret) { + printf("Failed to enable ipg_clk\n"); + return ret; + } } - - ret = clk_enable(&priv->ipg_clk); - if (ret) { - printf("Failed to enable ipg_clk\n"); - return ret; - } - return 0; } -- 2.37.3