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
next prev parent 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).