On Mon, 02 Mar 2015, Jassi Brar wrote:So maybe introducing a new "CLK_DISABLE_NEVER" flag will be more
On Mon, Mar 2, 2015 at 2:06 PM, Lee Jones <lee.jones@xxxxxxxxxx> wrote:This is only fractionally different from the current implementation.
On Sat, 28 Feb 2015, Jassi Brar wrote:Thanks, I wasn't aware of the history.
On 28 February 2015 at 02:44, Lee Jones <lee.jones@xxxxxxxxxx> wrote:I tried this. There was push-back from the DT maintainers.
Lots of platforms contain clocks which if turned off would prove fatal.If a clock is critical on a certain board, it could be got+enabled
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.
during early boot so there is always a user.
http://lists.infradead.org/pipermail/linux-arm-kernel/2015-February/324417.html
The phantom user - that's there but none can see it.To be able to do that from DT, maybe add a new, say, CLK_ALWAYS_ONHow is that different to what this set is doing?
flag could be made to initialize the clock with one phantom user
already. Or just reuse the CLK_IGNORE_UNUSED?
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;
+ }
I believe the current way it slightly nicer, as we don't have to fake
the user count. This solution is saying "one of the drivers is still
consuming this clock", instead, in the original implementation we're
saying "we know there are no consumers of this clock, but keep it on
anyway due to [insert reason here]".