12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- From ac9a9b1fcf3b0255aebc8e7f4b809f15556d9640 Mon Sep 17 00:00:00 2001
- From: Lee Jones <lee.jones@linaro.org>
- Date: Thu, 11 Feb 2016 13:19:09 -0800
- Subject: [PATCH 348/381] clk: Allow clocks to be marked as CRITICAL
- 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>
- Signed-off-by: Michael Turquette <mturquette@baylibre.com>
- Link: lkml.kernel.org/r/1455225554-13267-2-git-send-email-mturquette@baylibre.com
- (cherry picked from commit 32b9b10961860860268961d9aad0c56a73018c37)
- ---
- drivers/clk/clk.c | 5 +++++
- include/linux/clk-provider.h | 1 +
- 2 files changed, 6 insertions(+)
- --- a/drivers/clk/clk.c
- +++ b/drivers/clk/clk.c
- @@ -2466,6 +2466,11 @@ static int __clk_init(struct device *dev
- if (core->ops->init)
- core->ops->init(core->hw);
-
- + if (core->flags & CLK_IS_CRITICAL) {
- + clk_core_prepare(core);
- + clk_core_enable(core);
- + }
- +
- kref_init(&core->ref);
- out:
- clk_prepare_unlock();
- --- 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(11) /* do not gate, ever */
-
- struct clk;
- struct clk_hw;
|