linux-clk.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH V3] clk: scmi: add is_prepared hook
@ 2024-08-06 14:56 Peng Fan (OSS)
  2024-08-22  6:05 ` Peng Fan
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Peng Fan (OSS) @ 2024-08-06 14:56 UTC (permalink / raw)
  To: sudeep.holla, cristian.marussi, mturquette, sboyd, linux-clk
  Cc: linux-arm-kernel, linux-kernel, arm-scmi, d-gole, Peng Fan

From: Peng Fan <peng.fan@nxp.com>

Some clocks maybe default enabled by hardware. For clocks that don't
have users, that will be left in hardware default state, because prepare
count and enable count is zero,if there is no is_prepared hook to get
the hardware state. So add is_prepared hook to detect the hardware
state. Then when disabling the unused clocks, they can be simply
turned OFF to save power during kernel boot.

Reviewed-by: Dhruva Gole <d-gole@ti.com>
Signed-off-by: Peng Fan <peng.fan@nxp.com>
---

V3:
 Update the commit log. See discussion:
 https://lore.kernel.org/all/20240802061234.njlviydzmjbsyteb@lcpd911/
V2:
 Provider helper __scmi_clk_is_enabled for atomic and non-atomic usage
 Move is_prepared hook out of SCMI_CLK_STATE_CTRL_SUPPORTED
 https://lore.kernel.org/all/20240802061234.njlviydzmjbsyteb@lcpd911/

 drivers/clk/clk-scmi.c | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/drivers/clk/clk-scmi.c b/drivers/clk/clk-scmi.c
index d86a02563f6c..15510c2ff21c 100644
--- a/drivers/clk/clk-scmi.c
+++ b/drivers/clk/clk-scmi.c
@@ -156,13 +156,13 @@ static void scmi_clk_atomic_disable(struct clk_hw *hw)
 	scmi_proto_clk_ops->disable(clk->ph, clk->id, ATOMIC);
 }
 
-static int scmi_clk_atomic_is_enabled(struct clk_hw *hw)
+static int __scmi_clk_is_enabled(struct clk_hw *hw, bool atomic)
 {
 	int ret;
 	bool enabled = false;
 	struct scmi_clk *clk = to_scmi_clk(hw);
 
-	ret = scmi_proto_clk_ops->state_get(clk->ph, clk->id, &enabled, ATOMIC);
+	ret = scmi_proto_clk_ops->state_get(clk->ph, clk->id, &enabled, atomic);
 	if (ret)
 		dev_warn(clk->dev,
 			 "Failed to get state for clock ID %d\n", clk->id);
@@ -170,6 +170,16 @@ static int scmi_clk_atomic_is_enabled(struct clk_hw *hw)
 	return !!enabled;
 }
 
+static int scmi_clk_atomic_is_enabled(struct clk_hw *hw)
+{
+	return __scmi_clk_is_enabled(hw, ATOMIC);
+}
+
+static int scmi_clk_is_enabled(struct clk_hw *hw)
+{
+	return __scmi_clk_is_enabled(hw, NOT_ATOMIC);
+}
+
 static int scmi_clk_get_duty_cycle(struct clk_hw *hw, struct clk_duty *duty)
 {
 	int ret;
@@ -285,6 +295,8 @@ scmi_clk_ops_alloc(struct device *dev, unsigned long feats_key)
 
 	if (feats_key & BIT(SCMI_CLK_ATOMIC_SUPPORTED))
 		ops->is_enabled = scmi_clk_atomic_is_enabled;
+	else
+		ops->is_prepared = scmi_clk_is_enabled;
 
 	/* Rate ops */
 	ops->recalc_rate = scmi_clk_recalc_rate;
-- 
2.37.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* RE: [PATCH V3] clk: scmi: add is_prepared hook
  2024-08-06 14:56 [PATCH V3] clk: scmi: add is_prepared hook Peng Fan (OSS)
@ 2024-08-22  6:05 ` Peng Fan
  2024-08-22 10:53 ` Sudeep Holla
  2024-08-27 19:11 ` Stephen Boyd
  2 siblings, 0 replies; 4+ messages in thread
From: Peng Fan @ 2024-08-22  6:05 UTC (permalink / raw)
  To: Peng Fan (OSS), sudeep.holla@arm.com, cristian.marussi@arm.com,
	mturquette@baylibre.com, sboyd@kernel.org,
	linux-clk@vger.kernel.org
  Cc: linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org, arm-scmi@vger.kernel.org,
	d-gole@ti.com

Hi Stephen, Sudeep

> Subject: [PATCH V3] clk: scmi: add is_prepared hook

Not sure this patch belongs to clk tree or scmi tree. But please give a look
when you have time.

Thanks,
Peng.

> 
> From: Peng Fan <peng.fan@nxp.com>
> 
> Some clocks maybe default enabled by hardware. For clocks that don't
> have users, that will be left in hardware default state, because prepare
> count and enable count is zero,if there is no is_prepared hook to get
> the hardware state. So add is_prepared hook to detect the hardware
> state. Then when disabling the unused clocks, they can be simply
> turned OFF to save power during kernel boot.
> 
> Reviewed-by: Dhruva Gole <d-gole@ti.com>
> Signed-off-by: Peng Fan <peng.fan@nxp.com>
> ---
> 
> V3:
>  Update the commit log. See discussion:
> 
> https://lore.kernel.org/all/20240802061234.njlviydzmjbsyteb@lcpd91
> 1/
> V2:
>  Provider helper __scmi_clk_is_enabled for atomic and non-atomic
> usage  Move is_prepared hook out of
> SCMI_CLK_STATE_CTRL_SUPPORTED
> https://lore.kernel.org/all/20240802061234.njlviydzmjbsyteb@lcpd91
> 1/
> 
>  drivers/clk/clk-scmi.c | 16 ++++++++++++++--
>  1 file changed, 14 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/clk/clk-scmi.c b/drivers/clk/clk-scmi.c index
> d86a02563f6c..15510c2ff21c 100644
> --- a/drivers/clk/clk-scmi.c
> +++ b/drivers/clk/clk-scmi.c
> @@ -156,13 +156,13 @@ static void scmi_clk_atomic_disable(struct
> clk_hw *hw)
>  	scmi_proto_clk_ops->disable(clk->ph, clk->id, ATOMIC);  }
> 
> -static int scmi_clk_atomic_is_enabled(struct clk_hw *hw)
> +static int __scmi_clk_is_enabled(struct clk_hw *hw, bool atomic)
>  {
>  	int ret;
>  	bool enabled = false;
>  	struct scmi_clk *clk = to_scmi_clk(hw);
> 
> -	ret = scmi_proto_clk_ops->state_get(clk->ph, clk->id, &enabled,
> ATOMIC);
> +	ret = scmi_proto_clk_ops->state_get(clk->ph, clk->id, &enabled,
> +atomic);
>  	if (ret)
>  		dev_warn(clk->dev,
>  			 "Failed to get state for clock ID %d\n", clk-
> >id); @@ -170,6 +170,16 @@ static int
> scmi_clk_atomic_is_enabled(struct clk_hw *hw)
>  	return !!enabled;
>  }
> 
> +static int scmi_clk_atomic_is_enabled(struct clk_hw *hw) {
> +	return __scmi_clk_is_enabled(hw, ATOMIC); }
> +
> +static int scmi_clk_is_enabled(struct clk_hw *hw) {
> +	return __scmi_clk_is_enabled(hw, NOT_ATOMIC); }
> +
>  static int scmi_clk_get_duty_cycle(struct clk_hw *hw, struct clk_duty
> *duty)  {
>  	int ret;
> @@ -285,6 +295,8 @@ scmi_clk_ops_alloc(struct device *dev,
> unsigned long feats_key)
> 
>  	if (feats_key & BIT(SCMI_CLK_ATOMIC_SUPPORTED))
>  		ops->is_enabled = scmi_clk_atomic_is_enabled;
> +	else
> +		ops->is_prepared = scmi_clk_is_enabled;
> 
>  	/* Rate ops */
>  	ops->recalc_rate = scmi_clk_recalc_rate;
> --
> 2.37.1


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH V3] clk: scmi: add is_prepared hook
  2024-08-06 14:56 [PATCH V3] clk: scmi: add is_prepared hook Peng Fan (OSS)
  2024-08-22  6:05 ` Peng Fan
@ 2024-08-22 10:53 ` Sudeep Holla
  2024-08-27 19:11 ` Stephen Boyd
  2 siblings, 0 replies; 4+ messages in thread
From: Sudeep Holla @ 2024-08-22 10:53 UTC (permalink / raw)
  To: Peng Fan (OSS)
  Cc: cristian.marussi, mturquette, sboyd, Sudeep Holla, linux-clk,
	linux-arm-kernel, linux-kernel, arm-scmi, d-gole, Peng Fan

On Tue, Aug 06, 2024 at 10:56:01PM +0800, Peng Fan (OSS) wrote:
> From: Peng Fan <peng.fan@nxp.com>
> 
> Some clocks maybe default enabled by hardware. For clocks that don't
> have users, that will be left in hardware default state, because prepare
> count and enable count is zero,if there is no is_prepared hook to get
> the hardware state. So add is_prepared hook to detect the hardware
> state. Then when disabling the unused clocks, they can be simply
> turned OFF to save power during kernel boot.
>

LGTM,

Reviewed-by: Sudeep Holla <sudeep.holla@arm.com>

IIUC, there is no dependency on any SCMI changes, so this can go alone
via clk tree.

-- 
Regards,
Sudeep

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH V3] clk: scmi: add is_prepared hook
  2024-08-06 14:56 [PATCH V3] clk: scmi: add is_prepared hook Peng Fan (OSS)
  2024-08-22  6:05 ` Peng Fan
  2024-08-22 10:53 ` Sudeep Holla
@ 2024-08-27 19:11 ` Stephen Boyd
  2 siblings, 0 replies; 4+ messages in thread
From: Stephen Boyd @ 2024-08-27 19:11 UTC (permalink / raw)
  To: Peng Fan, cristian.marussi, linux-clk, mturquette, sudeep.holla
  Cc: linux-arm-kernel, linux-kernel, arm-scmi, d-gole, Peng Fan

Quoting Peng Fan (OSS) (2024-08-06 07:56:01)
> From: Peng Fan <peng.fan@nxp.com>
> 
> Some clocks maybe default enabled by hardware. For clocks that don't
> have users, that will be left in hardware default state, because prepare
> count and enable count is zero,if there is no is_prepared hook to get
> the hardware state. So add is_prepared hook to detect the hardware
> state. Then when disabling the unused clocks, they can be simply
> turned OFF to save power during kernel boot.
> 
> Reviewed-by: Dhruva Gole <d-gole@ti.com>
> Signed-off-by: Peng Fan <peng.fan@nxp.com>
> ---

Applied to clk-next

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2024-08-27 19:11 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-08-06 14:56 [PATCH V3] clk: scmi: add is_prepared hook Peng Fan (OSS)
2024-08-22  6:05 ` Peng Fan
2024-08-22 10:53 ` Sudeep Holla
2024-08-27 19:11 ` Stephen Boyd

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).