summaryrefslogtreecommitdiff
path: root/drivers/clk
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2016-11-28 23:57:54 -0800
committerGerrit - the friendly Code Review server <code-review@localhost>2016-11-28 23:57:53 -0800
commit52ce5dee286b172356869b5cec3c7c083498eb5b (patch)
treee488f2feda13a14c4255109d0690982b90d9c5bd /drivers/clk
parent608623f6b3bf3ca65e02bf4dd165f33f7ecf9141 (diff)
parenta2c13a4cc29640ab823a1e949b533385aeb7746b (diff)
Merge "clk: WARN_ON about to disable a critical clock"
Diffstat (limited to 'drivers/clk')
-rw-r--r--drivers/clk/clk.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
index 25ab30063072..b42b68482279 100644
--- a/drivers/clk/clk.c
+++ b/drivers/clk/clk.c
@@ -825,6 +825,9 @@ static void clk_core_unprepare(struct clk_core *core)
if (WARN_ON(core->prepare_count == 0))
return;
+ if (WARN_ON(core->prepare_count == 1 && core->flags & CLK_IS_CRITICAL))
+ return;
+
if (--core->prepare_count > 0)
return;
@@ -940,6 +943,9 @@ static void clk_core_disable(struct clk_core *core)
if (WARN_ON(core->enable_count == 0))
return;
+ if (WARN_ON(core->enable_count == 1 && core->flags & CLK_IS_CRITICAL))
+ return;
+
if (--core->enable_count > 0)
return;
@@ -3121,6 +3127,11 @@ static int __clk_init(struct device *dev, struct clk *clk_user)
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();