Thread (26 messages) 26 messages, 7 authors, 2015-04-02

[PATCH 3/4] clk: Provide always-on clock support

flat view

From: Lee Jones <hidden>
Date: 2015-03-02 10:40:26
Also in: linux-devicetree, lkml

On Mon, 02 Mar 2015, Jassi Brar wrote:
On 2 March 2015 at 15:48, Lee Jones [off-list ref] wrote:
quoted
On Mon, 02 Mar 2015, Jassi Brar wrote:
quoted
On Mon, Mar 2, 2015 at 2:06 PM, Lee Jones [off-list ref] wrote:
quoted
On Sat, 28 Feb 2015, Jassi Brar wrote:
quoted
On 28 February 2015 at 02:44, Lee Jones [off-list ref] wrote:
quoted
Lots of platforms contain clocks which if turned off would prove fatal.
The only way to recover from these catastrophic failures is to restart
the board(s).  Now, when a clock is registered with the framework it is
compared against a list of provided always-on clock names which must be
kept ungated.  If it matches, we enable the existing CLK_IGNORE_UNUSED
flag, which will prevent the common clk framework from attempting to
gate it during the clk_disable_unused() procedure.
If a clock is critical on a certain board, it could be got+enabled
during early boot so there is always a user.
I tried this.  There was push-back from the DT maintainers.

  http://lists.infradead.org/pipermail/linux-arm-kernel/2015-February/324417.html
Thanks, I wasn't aware of the history.
quoted
quoted
To be able to do that from DT, maybe add a new, say, CLK_ALWAYS_ON
flag could be made to initialize the clock with one phantom user
already. Or just reuse the CLK_IGNORE_UNUSED?
How is that different to what this set is doing?
The phantom user - that's there but none can see it.

How about?

+       of_property_for_each_string(np, "clock-always-on", prop, clkname) {
+               clk = __clk_lookup(clkname);
+               if (!clk)
+                       continue;
+
+               clk->core->enable_count = 1;
+               clk->core->prepare_count = 1;
+       }
This is only fractionally different from the current implementation.

I believe the current way it slightly nicer, as we don't have to fake
the user count.
Well... the user is indeed there, isn't it? It's just not known to
Linux. So 'fake' isn't most applicable here.
Otherwise you might have to stub out some existing and future
functions for CLK_IGNORE_UNUSED. And how do we explain to userspace
which would see power drawn but no user of the clock?
I would hope that the user would know that some communication channels
(interconnects in our case) would have to stay alive.  When everything
is turned off, the platform is considered powered down.  Most people
who are going to care about this stuff know that platforms consume
power when suspended.

I should think the user would be even more confused if the reference
count was >0, but there was no information regarding who is consuming
it.

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org ? Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help