aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRajendra Nayak <rnayak@codeaurora.org>2016-08-29 14:33:34 +0530
committerSrinivas Kandagatla <srinivas.kandagatla@linaro.org>2016-09-27 17:18:40 +0100
commitd01c650b5723289bda4861efdbf6f5875f0b394e (patch)
treea6bb927c399673bf696401c6ad9d3a91f99b233a
parent508ea3f3c5a41aacbc45faebcc5215c512195998 (diff)
clk: qcom: Add support to enable a gdsc at boot
Add a ENABLE_AT_BOOT flag which can be used to mark gdscs which will be turned on at boot. Not for merge: mainly for testing. Signed-off-by: Rajendra Nayak <rnayak@codeaurora.org>
-rw-r--r--drivers/clk/qcom/gdsc.c9
-rw-r--r--drivers/clk/qcom/gdsc.h1
2 files changed, 9 insertions, 1 deletions
diff --git a/drivers/clk/qcom/gdsc.c b/drivers/clk/qcom/gdsc.c
index 2cd8767e034da..ba6d196652ce0 100644
--- a/drivers/clk/qcom/gdsc.c
+++ b/drivers/clk/qcom/gdsc.c
@@ -42,7 +42,7 @@
#define RETAIN_MEM BIT(14)
#define RETAIN_PERIPH BIT(13)
-#define TIMEOUT_US 100
+#define TIMEOUT_US 500
#define domain_to_gdsc(domain) container_of(domain, struct gdsc, pd)
@@ -104,6 +104,8 @@ static int gdsc_toggle_logic(struct gdsc *sc, bool en)
if (gdsc_is_enabled(sc, status_reg) == en)
return 0;
+ pr_err("Timedout %sabling gdsc %s\n", en ? "en" : "dis", sc->pd.name);
+
return -ETIMEDOUT;
}
@@ -242,11 +244,16 @@ static int gdsc_init(struct gdsc *sc)
if (sc->clk_hw)
sc->clk = qcom_clk_hw_get_clk(sc->clk_hw);
+ if (sc->flags & ENABLE_AT_BOOT)
+ gdsc_enable(&sc->pd);
+
reg = sc->gds_hw_ctrl ? sc->gds_hw_ctrl : sc->gdscr;
on = gdsc_is_enabled(sc, reg);
if (on < 0)
return on;
+ if (on)
+ pr_err("gdsc %s is ON\n", sc->pd.name);
/*
* Votable GDSCs can be ON due to Vote from other masters.
* If a Votable GDSC is ON, make sure we have a Vote.
diff --git a/drivers/clk/qcom/gdsc.h b/drivers/clk/qcom/gdsc.h
index a9e23fc81f8e1..ddb411757ffb9 100644
--- a/drivers/clk/qcom/gdsc.h
+++ b/drivers/clk/qcom/gdsc.h
@@ -54,6 +54,7 @@ struct gdsc {
const u8 flags;
#define VOTABLE BIT(0)
#define CLK_TOGGLE BIT(1)
+#define ENABLE_AT_BOOT BIT(2)
struct reset_controller_dev *rcdev;
unsigned int *resets;
unsigned int reset_count;