Message ID | a9a9d853e0ac396cd9b3577cce26279a75765711.1693384296.git.michal.simek@amd.com |
---|---|
State | Accepted |
Commit | 99b46477e3495f819f6826d11470d46f12a4f9f7 |
Delegated to: | Sean Anderson |
Headers | show |
Series | [v2] clk: Dont return error when assigned-clocks is empty or missing | expand |
On 8/30/23 10:31, Michal Simek wrote: > From: Ashok Reddy Soma <ashok.reddy.soma@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@amd.com> > Signed-off-by: Michal Simek <michal.simek@amd.com> > Reviewed-by: Tom Rini <trini@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
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; }