[PATCH v2] clk: Dont return error when assigned-clocks is empty or missing

Michal Simek michal.simek at amd.com
Thu Sep 7 13:22:35 CEST 2023



On 8/30/23 10:31, Michal Simek wrote:
> From: Ashok Reddy Soma <ashok.reddy.soma at amd.com>
> 
> There is a chance that assigned-clock-rates is given and assigned-clocks
> could be empty. Dont return error in that case, because the probe of the
> corresponding driver will not be called at all if this fails.
> Better to continue to look for it and return 0.
> 
> Signed-off-by: Ashok Reddy Soma <ashok.reddy.soma at amd.com>
> Signed-off-by: Michal Simek <michal.simek at amd.com>
> Reviewed-by: Tom Rini <trini at konsulko.com>
> ---
> 
> Changes in v2:
> - Add also test to cover it
> - Add Tom's reviewed-by line
> 
>   arch/sandbox/dts/test.dts | 16 ++++++++++++++++
>   drivers/clk/clk-uclass.c  |  8 +++++++-
>   test/dm/clk.c             |  9 +++++++++
>   3 files changed, 32 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/sandbox/dts/test.dts b/arch/sandbox/dts/test.dts
> index ff9f9222e6f9..90f876ac9c78 100644
> --- a/arch/sandbox/dts/test.dts
> +++ b/arch/sandbox/dts/test.dts
> @@ -589,6 +589,22 @@
>   		clock-names = "fixed", "i2c", "spi", "uart2", "uart1";
>   	};
>   
> +	clk-test2 {
> +		compatible = "sandbox,clk-test";
> +		assigned-clock-rates = <321>;
> +	};
> +
> +	clk-test3 {
> +		compatible = "sandbox,clk-test";
> +		assigned-clocks = <&clk_sandbox 1>;
> +	};
> +
> +	clk-test4 {
> +		compatible = "sandbox,clk-test";
> +		assigned-clock-rates = <654>, <321>;
> +		assigned-clocks = <&clk_sandbox 1>;
> +	};
> +
>   	ccf: clk-ccf {
>   		compatible = "sandbox,clk-ccf";
>   	};
> diff --git a/drivers/clk/clk-uclass.c b/drivers/clk/clk-uclass.c
> index dc3e9d6a2615..f186fcbcdb86 100644
> --- a/drivers/clk/clk-uclass.c
> +++ b/drivers/clk/clk-uclass.c
> @@ -329,7 +329,13 @@ static int clk_set_default_rates(struct udevice *dev,
>   			dev_dbg(dev,
>   				"could not get assigned clock %d (err = %d)\n",
>   				index, ret);
> -			continue;
> +			/* Skip if it is empty */
> +			if (ret == -ENOENT) {
> +				ret = 0;
> +				continue;
> +			}
> +
> +			return ret;
>   		}
>   
>   		/* This is clk provider device trying to program itself
> diff --git a/test/dm/clk.c b/test/dm/clk.c
> index f48de05436bf..01417fbd8257 100644
> --- a/test/dm/clk.c
> +++ b/test/dm/clk.c
> @@ -36,6 +36,15 @@ static int dm_test_clk_base(struct unit_test_state *uts)
>   	ut_asserteq(clk_is_match(&clk_method1, &clk_method2), true);
>   	ut_asserteq(clk_method1.id, clk_method2.id);
>   
> +	ut_assertok(uclass_get_device_by_name(UCLASS_MISC, "clk-test2", &dev));
> +	ut_assertok(clk_set_defaults(dev, CLK_DEFAULTS_PRE));
> +
> +	ut_assertok(uclass_get_device_by_name(UCLASS_MISC, "clk-test3", &dev));
> +	ut_assertok(clk_set_defaults(dev, CLK_DEFAULTS_PRE));
> +
> +	ut_assertok(uclass_get_device_by_name(UCLASS_MISC, "clk-test4", &dev));
> +	ut_assertok(clk_set_defaults(dev, CLK_DEFAULTS_PRE));
> +
>   	return 0;
>   }
>   

Applied.
M


More information about the U-Boot mailing list