clk: qcom: gdsc: Add support for ALWAYS_ON gdscs
authorRajendra Nayak <rnayak@codeaurora.org>
Fri, 23 Mar 2018 08:26:14 +0000 (13:56 +0530)
committerStephen Boyd <sboyd@kernel.org>
Fri, 1 Jun 2018 18:14:48 +0000 (11:14 -0700)
Some GDSCs might have software control to turn them off, but we might
want to keep them enabled always, in some cases because of lack of
support in kernel to handle a graceful turning off/on of such GDSCs.
Most common instances would be the GDCSs which power up the noc/bus
fabrics, which need bus drivers to handle them and atleast support for
which is missing on all qcom SoCs.

Signed-off-by: Rajendra Nayak <rnayak@codeaurora.org>
Reviewed-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Tested-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Signed-off-by: Stephen Boyd <sboyd@kernel.org>
drivers/clk/qcom/gdsc.c
drivers/clk/qcom/gdsc.h

index a4f3580587b7e121d25bcffefc1d50074127e103..15f4bb5efd68b62c1f6dafd99109a5db7592c8ec 100644 (file)
@@ -291,6 +291,14 @@ static int gdsc_init(struct gdsc *sc)
        if ((sc->flags & VOTABLE) && on)
                gdsc_enable(&sc->pd);
 
+       /* If ALWAYS_ON GDSCs are not ON, turn them ON */
+       if (sc->flags & ALWAYS_ON) {
+               if (!on)
+                       gdsc_enable(&sc->pd);
+               on = true;
+               sc->pd.flags |= GENPD_FLAG_ALWAYS_ON;
+       }
+
        if (on || (sc->pwrsts & PWRSTS_RET))
                gdsc_force_mem_on(sc);
        else
index 39648348e5ec9afa02501e3e1f1c32d2802a78b8..7fd78cec7e5b5a7aef91c4cdf66c783208808ecf 100644 (file)
@@ -53,6 +53,7 @@ struct gdsc {
 #define VOTABLE                BIT(0)
 #define CLAMP_IO       BIT(1)
 #define HW_CTRL                BIT(2)
+#define ALWAYS_ON      BIT(3)
        struct reset_controller_dev     *rcdev;
        unsigned int                    *resets;
        unsigned int                    reset_count;