devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Konrad Dybcio <konrad.dybcio@linaro.org>
To: Johan Hovold <johan@kernel.org>, Bjorn Andersson <andersson@kernel.org>
Cc: Andy Gross <agross@kernel.org>,
	Michael Turquette <mturquette@baylibre.com>,
	Stephen Boyd <sboyd@kernel.org>, Rob Herring <robh+dt@kernel.org>,
	Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>,
	Conor Dooley <conor+dt@kernel.org>,
	Marijn Suijten <marijn.suijten@somainline.org>,
	linux-arm-msm@vger.kernel.org, linux-clk@vger.kernel.org,
	linux-kernel@vger.kernel.org, devicetree@vger.kernel.org
Subject: Re: [PATCH 03/15] clk: qcom: gcc-sm6375: Unregister critical clocks
Date: Fri, 1 Sep 2023 19:55:30 +0200	[thread overview]
Message-ID: <519259d7-ac6d-409b-a864-071e41f66f70@linaro.org> (raw)
In-Reply-To: <cc9e6464-5e47-4044-9785-c57167f0e1c5@linaro.org>

On 9.08.2023 18:52, Konrad Dybcio wrote:
> On 19.07.2023 10:43, Johan Hovold wrote:
>> On Tue, Jul 18, 2023 at 09:23:52AM -0700, Bjorn Andersson wrote:
>>> On Tue, Jul 18, 2023 at 03:26:51PM +0200, Konrad Dybcio wrote:
>>>> On 18.07.2023 15:20, Johan Hovold wrote:
>>>>> On Mon, Jul 17, 2023 at 05:19:10PM +0200, Konrad Dybcio wrote:
>>>>>> Some clocks need to be always-on, but we don't really do anything
>>>>>> with them, other than calling enable() once and telling Linux they're
>>>>>> enabled.
>>>>>>
>>>>>> Unregister them to save a couple of bytes and, perhaps more
>>>>>> importantly, allow for runtime suspend of the clock controller device,
>>>>>> as CLK_IS_CRITICAL prevents the latter.
>>>>>
>>>>> But this doesn't sound right. How can you disable a controller which
>>>>> still has clocks enabled?
>>>>>
>>>>> Shouldn't instead these clocks be modelled properly so that they are
>>>>> only enabled when actually needed?
>>>> Hm.. We do have clk_branch2_aon_ops, but something still needs to
>>>> toggle these clocks.
>>>>
>>>
>>> Before we started replacing these clocks with static votes, I handled
>>> exactly this problem in the turingcc-qcs404 driver by registering the
>>> ahb clock with a pm_clk_add(). The clock framework will then
>>> automagically keep the clock enabled around operations, but it will also
>>> keep the runtime state active as long as the clock is prepared.
>>>
>>> As mentioned in an earlier reply today, there's no similarity to this in
>>> the reset or gdsc code, so we'd need to add that in order to rely on
>>> such mechanism.
>>
>> This reminds me of:
>>
>> 	4cc47e8add63 ("clk: qcom: gdsc: Remove direct runtime PM calls")
>>
>> which recently removed a broken attempt to implement this for gdscs.
>>
>> Just stumbled over GENPD_FLAG_PM_CLK which may provide a way forward at
>> least for genpd (but see below).
>>
>>>> I *think* we could leave a permanent vote in probe() without breaking
>>>> runtime pm! I'll give it a spin bit later..
>>>>
>>>
>>> Modelling the AHB clock in DT and putting a devm_clk_get_enabled() would
>>> properly connect the two, and thereby handle probe order between the two
>>> clock controllers.
>>
>> Yeah, this dependency really should be described eventually.
>>
>>> But it would prevent the power-domain of the parent provider to ever
>>> suspending. Using pm_clk_add() this would at least depend on client
>>> votes.
>>
>> IIUC using pm_clk_add() would also prevent the parent from suspending
>> due to that resume call in clk_prepare().
>>
>> And this mechanism is also used for GENPD_FLAG_PM_CLK...
> So.. how do we go about solving the issue that this patch tried to
> address?
I see things this way:

- clock controllers (non-gcc) that use magic writes today,
  they should stay as they are to avoid dramatic spaghetti wrt
  dt backwards compatibility

- clock controllers (non-gcc) that use CLK_IS_CRITICAL are
  transitioned to magic writes to skip the PM code fluff which
  prevents shutting down the PDs if any clock is critical and
  for uniformity with point 1 (as the device trees still don't
  contain any references to the necessary clocks)

- new clock controllers are modeled with use of pm_clk and with
  proper device tree references

FWIW Qualcomm nowadays just keep these clocks always on (answering
Johan's question - they're either off-from-Linux-POV-not-really-in-
hardware or these clocks retain the enable bit, I don't know) in
their shipping downstream kernels, the power leak is probably
minimal, but if we can avoid it, every nanowatt is to our advantage

Konrad

  reply	other threads:[~2023-09-01 17:55 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-07-17 15:19 [PATCH 00/15] Unregister critical branch clocks + some RPM Konrad Dybcio
2023-07-17 15:19 ` [PATCH 01/15] clk: qcom: branch: Add a helper for setting the enable bit Konrad Dybcio
2023-07-18 13:17   ` Johan Hovold
2023-07-17 15:19 ` [PATCH 02/15] clk: qcom: Use qcom_branch_set_clk_en() Konrad Dybcio
2023-07-18 13:18   ` Johan Hovold
2023-07-17 15:19 ` [PATCH 03/15] clk: qcom: gcc-sm6375: Unregister critical clocks Konrad Dybcio
2023-07-18 13:20   ` Johan Hovold
2023-07-18 13:26     ` Konrad Dybcio
2023-07-18 16:23       ` Bjorn Andersson
2023-07-19  8:43         ` Johan Hovold
2023-08-09 16:52           ` Konrad Dybcio
2023-09-01 17:55             ` Konrad Dybcio [this message]
2023-07-17 15:19 ` [PATCH 04/15] clk: qcom: gcc-sm6375: Add runtime PM Konrad Dybcio
2023-07-17 16:26   ` Stephan Gerhold
2023-07-18  4:02     ` Bjorn Andersson
2023-07-18 12:07       ` Stephan Gerhold
2023-07-18 12:49         ` Konrad Dybcio
2023-07-18 13:27   ` Johan Hovold
2023-07-17 15:19 ` [PATCH 05/15] clk: qcom: gpucc-sm6375: Unregister critical clocks Konrad Dybcio
2023-07-17 16:15   ` Stephan Gerhold
2023-07-17 16:17     ` Konrad Dybcio
2023-07-17 15:19 ` [PATCH 06/15] clk: qcom: gpucc-sm6115: " Konrad Dybcio
2023-07-17 15:19 ` [PATCH 07/15] clk: qcom: gpucc-sm6115: Add runtime PM Konrad Dybcio
2023-07-18 13:24   ` Johan Hovold
2023-07-18 13:28     ` Konrad Dybcio
2023-08-09 17:20       ` Konrad Dybcio
2023-07-17 15:19 ` [PATCH 08/15] clk: qcom: gcc-sm6115: Unregister critical clocks Konrad Dybcio
2023-07-17 15:19 ` [PATCH 09/15] clk: qcom: gcc-sm6115: Add runtime PM Konrad Dybcio
2023-07-17 15:19 ` [PATCH 10/15] clk: qcom: gcc-qcm2290: Unregister critical clocks Konrad Dybcio
2023-07-17 15:19 ` [PATCH 11/15] clk: qcom: gcc-qcm2290: Add runtime PM Konrad Dybcio
2023-07-17 15:19 ` [PATCH 12/15] arm64: dts: qcom: sm6375: Add VDD_CX to GCC Konrad Dybcio
2023-07-17 15:19 ` [PATCH 13/15] arm64: dts: qcom: qcm2290: " Konrad Dybcio
2023-07-17 15:19 ` [PATCH 14/15] arm64: dts: qcom: sm6115: " Konrad Dybcio
2023-07-17 15:19 ` [PATCH 15/15] arm64: dts: qcom: sm6115: Add VDD_CX to GPU_CCC Konrad Dybcio
2023-07-17 16:28   ` Stephan Gerhold
2023-07-17 16:50     ` Konrad Dybcio
2023-07-17 16:56       ` Stephan Gerhold
2023-07-17 17:11         ` Konrad Dybcio
2023-07-17 17:23           ` Stephan Gerhold
2023-07-17 19:18             ` Konrad Dybcio
2023-07-18 11:56               ` Stephan Gerhold
2023-07-18 12:47                 ` Konrad Dybcio
2023-07-18 13:08                   ` Dmitry Baryshkov
2023-07-18 13:36                     ` Konrad Dybcio
2023-07-18  4:25           ` Bjorn Andersson
2023-07-18 12:21             ` Konrad Dybcio
2023-07-18 15:06               ` Bjorn Andersson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=519259d7-ac6d-409b-a864-071e41f66f70@linaro.org \
    --to=konrad.dybcio@linaro.org \
    --cc=agross@kernel.org \
    --cc=andersson@kernel.org \
    --cc=conor+dt@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=johan@kernel.org \
    --cc=krzysztof.kozlowski+dt@linaro.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-clk@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=marijn.suijten@somainline.org \
    --cc=mturquette@baylibre.com \
    --cc=robh+dt@kernel.org \
    --cc=sboyd@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).