[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <15783bcf-af13-efb2-1945-e2f49b3278bc@linaro.org>
Date: Fri, 29 Apr 2022 18:26:11 +0300
From: Dmitry Baryshkov <dmitry.baryshkov@...aro.org>
To: Robert Foss <robert.foss@...aro.org>, bjorn.andersson@...aro.org,
agross@...nel.org, mturquette@...libre.com, sboyd@...nel.org,
robh+dt@...nel.org, krzk+dt@...nel.org, jonathan@...ek.ca,
tdas@...eaurora.org, anischal@...eaurora.org,
linux-arm-msm@...r.kernel.org, linux-clk@...r.kernel.org,
devicetree@...r.kernel.org, linux-kernel@...r.kernel.org
Cc: Vinod Koul <vkoul@...nel.org>
Subject: Re: [PATCH v1 2/9] clk: Introduce CLK_ASSUME_ENABLED_WHEN_UNUSED
On 29/04/2022 18:12, Robert Foss wrote:
> From: Bjorn Andersson <bjorn.andersson@...aro.org>
>
> Some clock implementations doesn't provide means of implementing
> is_enabled(), but still requires to be explicitly disabled when found
> unused as part of clk_disable_unused().
>
> One such set of clocks are Qualcomm's display RCGs. These can be enabled
> and disabled automatically by the hardware, so it's not possible to
> reliably query their configuration. Further more, these clocks need to
> be disabled when unused, to allow them to be "parked" onto a safe
> parent. Failure to disable the RCG results in the hardware locking up as
> clk_disable_unused() traverses up the tree and turns off its source
> clocks.
>
> Add a new flag, CLK_ASSUME_ENABLED_BOOT, which clock drivers can use to
> signal that these clocks should be disabled even if they don't implement
> the is_enabled() ops.
>
> Signed-off-by: Bjorn Andersson <bjorn.andersson@...aro.org>
> Reviewed-by: Vinod Koul <vkoul@...nel.org>
I think this patch received mixed review previously. I strip it away for
now.
> ---
> drivers/clk/clk.c | 2 +-
> include/linux/clk-provider.h | 2 ++
> 2 files changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
> index ed119182aa1b..9789ec137219 100644
> --- a/drivers/clk/clk.c
> +++ b/drivers/clk/clk.c
> @@ -1284,7 +1284,7 @@ static void __init clk_disable_unused_subtree(struct clk_core *core)
> * sequence. call .disable_unused if available, otherwise fall
> * back to .disable
> */
> - if (clk_core_is_enabled(core)) {
> + if (clk_core_is_enabled(core) || core->flags & CLK_ASSUME_ENABLED_WHEN_UNUSED) {
> trace_clk_disable(core);
> if (core->ops->disable_unused)
> core->ops->disable_unused(core->hw);
> diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h
> index c10dc4c659e2..9038022ffebd 100644
> --- a/include/linux/clk-provider.h
> +++ b/include/linux/clk-provider.h
> @@ -32,6 +32,8 @@
> #define CLK_OPS_PARENT_ENABLE BIT(12)
> /* duty cycle call may be forwarded to the parent clock */
> #define CLK_DUTY_CYCLE_PARENT BIT(13)
> +/* assume clock is enabled if found unused in late init */
> +#define CLK_ASSUME_ENABLED_WHEN_UNUSED BIT(14)
>
> struct clk;
> struct clk_hw;
--
With best wishes
Dmitry
Powered by blists - more mailing lists