diff mbox series

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

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

Commit Message

Michal Simek Aug. 30, 2023, 8:31 a.m. UTC
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(-)

Comments

Michal Simek Sept. 7, 2023, 11:22 a.m. UTC | #1
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 mbox series

Patch

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;
 }