Message ID | 1453127331-20616-2-git-send-email-lee.jones@linaro.org |
---|---|
State | New |
Headers | show |
On Mon, 18 Jan 2016, Geert Uytterhoeven wrote: > On Mon, Jan 18, 2016 at 3:28 PM, Lee Jones <lee.jones@linaro.org> wrote: > > --- a/include/linux/clk-provider.h > > +++ b/include/linux/clk-provider.h > > @@ -31,6 +31,7 @@ > > #define CLK_SET_RATE_NO_REPARENT BIT(7) /* don't re-parent on rate change */ > > #define CLK_GET_ACCURACY_NOCACHE BIT(8) /* do not use the cached clk accuracy */ > > #define CLK_RECALC_NEW_RATES BIT(9) /* recalc rates after notifications */ > > +#define CLK_IS_CRITICAL BIT(10) /* do not gate, ever */ > > 10 is already taken, even upstream. Please rebase ;-) Thanks for the heads-up. Will pull Heiko's patch in and rebase. -- Lee Jones Linaro STMicroelectronics Landing Team Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog
diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c index f13c3f4..835cb85 100644 --- a/drivers/clk/clk.c +++ b/drivers/clk/clk.c @@ -2576,8 +2576,13 @@ struct clk *clk_register(struct device *dev, struct clk_hw *hw) } ret = __clk_init(dev, hw->clk); - if (!ret) + if (!ret) { + if (core->flags & CLK_IS_CRITICAL) { + clk_core_prepare(core); + clk_core_enable(core); + } return hw->clk; + } __clk_free_clk(hw->clk); hw->clk = NULL; diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h index c56988a..ffa0b2e 100644 --- a/include/linux/clk-provider.h +++ b/include/linux/clk-provider.h @@ -31,6 +31,7 @@ #define CLK_SET_RATE_NO_REPARENT BIT(7) /* don't re-parent on rate change */ #define CLK_GET_ACCURACY_NOCACHE BIT(8) /* do not use the cached clk accuracy */ #define CLK_RECALC_NEW_RATES BIT(9) /* recalc rates after notifications */ +#define CLK_IS_CRITICAL BIT(10) /* do not gate, ever */ struct clk; struct clk_hw;
Critical clocks are those which must not be gated, else undefined or catastrophic failure would occur. Here we have chosen to ensure the prepare/enable counts are correctly incremented, so as not to confuse users with enabled clocks with no visible users. Signed-off-by: Lee Jones <lee.jones@linaro.org> --- drivers/clk/clk.c | 7 ++++++- include/linux/clk-provider.h | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) -- 1.9.1