* [PATCH 1/4] clk: rockchip: protect critical clocks from getting disabled
@ 2014-07-29 19:12 ` Heiko Stuebner
0 siblings, 0 replies; 48+ messages in thread
From: Heiko Stuebner @ 2014-07-29 19:12 UTC (permalink / raw)
To: mturquette-QSEj5FYQhm4dnm+yROfE0A, arm-DgEjT+Ai2ygdnm+yROfE0A,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
devicetree-u79uwXL29TY76Z2rM5mHXA,
dianders-F7+t8E8rja9g9hUCZPvPmw,
kever.yang-TNX95d0MmH7DzftRWevZcw, cf-TNX95d0MmH7DzftRWevZcw
Cc: Heiko Stuebner
The clock-tree contains clocks that should never get disabled automatically.
One example are the base ACLKs, the base supplies for all peripherals.
Therefore add a structure similar to the sunxi clock-tree to protect these
special clocks from being disabled.
Signed-off-by: Heiko Stuebner <heiko-4mtYJXux2i+zQB+pC5nmwQ@public.gmane.org>
---
drivers/clk/rockchip/clk-rk3188.c | 7 +++++++
drivers/clk/rockchip/clk-rk3288.c | 7 +++++++
drivers/clk/rockchip/clk.c | 13 +++++++++++++
drivers/clk/rockchip/clk.h | 1 +
4 files changed, 28 insertions(+)
diff --git a/drivers/clk/rockchip/clk-rk3188.c b/drivers/clk/rockchip/clk-rk3188.c
index a83a6d8..5aef277 100644
--- a/drivers/clk/rockchip/clk-rk3188.c
+++ b/drivers/clk/rockchip/clk-rk3188.c
@@ -599,6 +599,11 @@ static struct rockchip_clk_branch rk3188_clk_branches[] __initdata = {
GATE(ACLK_GPS, "aclk_gps", "aclk_peri", 0, RK2928_CLKGATE_CON(8), 13, GFLAGS),
};
+static const char *rk3188_critical_clocks[] __initconst = {
+ "aclk_cpu",
+ "aclk_peri",
+};
+
static void __init rk3188_common_clk_init(struct device_node *np)
{
void __iomem *reg_base;
@@ -628,6 +633,8 @@ static void __init rk3188_common_clk_init(struct device_node *np)
RK3188_GRF_SOC_STATUS);
rockchip_clk_register_branches(common_clk_branches,
ARRAY_SIZE(common_clk_branches));
+ rockchip_clk_protect_critical(rk3188_critical_clocks,
+ ARRAY_SIZE(rk3188_critical_clocks));
rockchip_register_softrst(np, 9, reg_base + RK2928_SOFTRST_CON(0),
ROCKCHIP_SOFTRST_HIWORD_MASK);
diff --git a/drivers/clk/rockchip/clk-rk3288.c b/drivers/clk/rockchip/clk-rk3288.c
index 0d8c6c5..6c6f954 100644
--- a/drivers/clk/rockchip/clk-rk3288.c
+++ b/drivers/clk/rockchip/clk-rk3288.c
@@ -680,6 +680,11 @@ static struct rockchip_clk_branch rk3288_clk_branches[] __initdata = {
GATE(0, "pclk_isp_in", "ext_isp", 0, RK3288_CLKGATE_CON(16), 3, GFLAGS),
};
+static const char *rk3288_critical_clocks[] __initconst = {
+ "aclk_cpu",
+ "aclk_peri",
+};
+
static void __init rk3288_clk_init(struct device_node *np)
{
void __iomem *reg_base;
@@ -710,6 +715,8 @@ static void __init rk3288_clk_init(struct device_node *np)
RK3288_GRF_SOC_STATUS);
rockchip_clk_register_branches(rk3288_clk_branches,
ARRAY_SIZE(rk3288_clk_branches));
+ rockchip_clk_protect_critical(rk3288_critical_clocks,
+ ARRAY_SIZE(rk3288_critical_clocks));
rockchip_register_softrst(np, 9, reg_base + RK3288_SOFTRST_CON(0),
ROCKCHIP_SOFTRST_HIWORD_MASK);
diff --git a/drivers/clk/rockchip/clk.c b/drivers/clk/rockchip/clk.c
index 278cf9d..9189f1b 100644
--- a/drivers/clk/rockchip/clk.c
+++ b/drivers/clk/rockchip/clk.c
@@ -242,3 +242,16 @@ void __init rockchip_clk_register_branches(
rockchip_clk_add_lookup(clk, list->id);
}
}
+
+void __init rockchip_clk_protect_critical(const char *clocks[], int nclocks)
+{
+ int i;
+
+ /* Protect the clocks that needs to stay on */
+ for (i = 0; i < nclocks; i++) {
+ struct clk *clk = __clk_lookup(clocks[i]);
+
+ if (clk)
+ clk_prepare_enable(clk);
+ }
+}
diff --git a/drivers/clk/rockchip/clk.h b/drivers/clk/rockchip/clk.h
index 887cbde..2b0bca1 100644
--- a/drivers/clk/rockchip/clk.h
+++ b/drivers/clk/rockchip/clk.h
@@ -329,6 +329,7 @@ void rockchip_clk_register_branches(struct rockchip_clk_branch *clk_list,
unsigned int nr_clk);
void rockchip_clk_register_plls(struct rockchip_pll_clock *pll_list,
unsigned int nr_pll, int grf_lock_offset);
+void rockchip_clk_protect_critical(const char *clocks[], int nclocks);
#define ROCKCHIP_SOFTRST_HIWORD_MASK BIT(0)
--
2.0.1
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 48+ messages in thread* [PATCH 1/4] clk: rockchip: protect critical clocks from getting disabled
@ 2014-07-31 22:45 ` Mike Turquette
0 siblings, 0 replies; 48+ messages in thread
From: Mike Turquette @ 2014-07-31 22:45 UTC (permalink / raw)
To: linux-arm-kernel
Quoting Heiko Stuebner (2014-07-29 12:12:05)
> The clock-tree contains clocks that should never get disabled automatically.
> One example are the base ACLKs, the base supplies for all peripherals.
>
> Therefore add a structure similar to the sunxi clock-tree to protect these
> special clocks from being disabled.
>
> Signed-off-by: Heiko Stuebner <heiko@sntech.de>
> ---
> drivers/clk/rockchip/clk-rk3188.c | 7 +++++++
> drivers/clk/rockchip/clk-rk3288.c | 7 +++++++
> drivers/clk/rockchip/clk.c | 13 +++++++++++++
> drivers/clk/rockchip/clk.h | 1 +
> 4 files changed, 28 insertions(+)
>
> diff --git a/drivers/clk/rockchip/clk-rk3188.c b/drivers/clk/rockchip/clk-rk3188.c
> index a83a6d8..5aef277 100644
> --- a/drivers/clk/rockchip/clk-rk3188.c
> +++ b/drivers/clk/rockchip/clk-rk3188.c
> @@ -599,6 +599,11 @@ static struct rockchip_clk_branch rk3188_clk_branches[] __initdata = {
> GATE(ACLK_GPS, "aclk_gps", "aclk_peri", 0, RK2928_CLKGATE_CON(8), 13, GFLAGS),
> };
>
> +static const char *rk3188_critical_clocks[] __initconst = {
> + "aclk_cpu",
> + "aclk_peri",
I'm not against the idea of critical clocks, but I want to verify that
there is no other driver out there that is a better fit for claiming
these clks via clk_get and enabling them the normal way via clk_enable?
Regards,
Mike
> +};
> +
> static void __init rk3188_common_clk_init(struct device_node *np)
> {
> void __iomem *reg_base;
> @@ -628,6 +633,8 @@ static void __init rk3188_common_clk_init(struct device_node *np)
> RK3188_GRF_SOC_STATUS);
> rockchip_clk_register_branches(common_clk_branches,
> ARRAY_SIZE(common_clk_branches));
> + rockchip_clk_protect_critical(rk3188_critical_clocks,
> + ARRAY_SIZE(rk3188_critical_clocks));
>
> rockchip_register_softrst(np, 9, reg_base + RK2928_SOFTRST_CON(0),
> ROCKCHIP_SOFTRST_HIWORD_MASK);
> diff --git a/drivers/clk/rockchip/clk-rk3288.c b/drivers/clk/rockchip/clk-rk3288.c
> index 0d8c6c5..6c6f954 100644
> --- a/drivers/clk/rockchip/clk-rk3288.c
> +++ b/drivers/clk/rockchip/clk-rk3288.c
> @@ -680,6 +680,11 @@ static struct rockchip_clk_branch rk3288_clk_branches[] __initdata = {
> GATE(0, "pclk_isp_in", "ext_isp", 0, RK3288_CLKGATE_CON(16), 3, GFLAGS),
> };
>
> +static const char *rk3288_critical_clocks[] __initconst = {
> + "aclk_cpu",
> + "aclk_peri",
> +};
> +
> static void __init rk3288_clk_init(struct device_node *np)
> {
> void __iomem *reg_base;
> @@ -710,6 +715,8 @@ static void __init rk3288_clk_init(struct device_node *np)
> RK3288_GRF_SOC_STATUS);
> rockchip_clk_register_branches(rk3288_clk_branches,
> ARRAY_SIZE(rk3288_clk_branches));
> + rockchip_clk_protect_critical(rk3288_critical_clocks,
> + ARRAY_SIZE(rk3288_critical_clocks));
>
> rockchip_register_softrst(np, 9, reg_base + RK3288_SOFTRST_CON(0),
> ROCKCHIP_SOFTRST_HIWORD_MASK);
> diff --git a/drivers/clk/rockchip/clk.c b/drivers/clk/rockchip/clk.c
> index 278cf9d..9189f1b 100644
> --- a/drivers/clk/rockchip/clk.c
> +++ b/drivers/clk/rockchip/clk.c
> @@ -242,3 +242,16 @@ void __init rockchip_clk_register_branches(
> rockchip_clk_add_lookup(clk, list->id);
> }
> }
> +
> +void __init rockchip_clk_protect_critical(const char *clocks[], int nclocks)
> +{
> + int i;
> +
> + /* Protect the clocks that needs to stay on */
> + for (i = 0; i < nclocks; i++) {
> + struct clk *clk = __clk_lookup(clocks[i]);
> +
> + if (clk)
> + clk_prepare_enable(clk);
> + }
> +}
> diff --git a/drivers/clk/rockchip/clk.h b/drivers/clk/rockchip/clk.h
> index 887cbde..2b0bca1 100644
> --- a/drivers/clk/rockchip/clk.h
> +++ b/drivers/clk/rockchip/clk.h
> @@ -329,6 +329,7 @@ void rockchip_clk_register_branches(struct rockchip_clk_branch *clk_list,
> unsigned int nr_clk);
> void rockchip_clk_register_plls(struct rockchip_pll_clock *pll_list,
> unsigned int nr_pll, int grf_lock_offset);
> +void rockchip_clk_protect_critical(const char *clocks[], int nclocks);
>
> #define ROCKCHIP_SOFTRST_HIWORD_MASK BIT(0)
>
> --
> 2.0.1
>
^ permalink raw reply [flat|nested] 48+ messages in thread* Re: [PATCH 1/4] clk: rockchip: protect critical clocks from getting disabled
@ 2014-07-31 22:45 ` Mike Turquette
0 siblings, 0 replies; 48+ messages in thread
From: Mike Turquette @ 2014-07-31 22:45 UTC (permalink / raw)
To: arm-DgEjT+Ai2ygdnm+yROfE0A,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
devicetree-u79uwXL29TY76Z2rM5mHXA,
dianders-F7+t8E8rja9g9hUCZPvPmw,
kever.yang-TNX95d0MmH7DzftRWevZcw, cf-TNX95d0MmH7DzftRWevZcw
Cc: Heiko Stuebner
Quoting Heiko Stuebner (2014-07-29 12:12:05)
> The clock-tree contains clocks that should never get disabled automatically.
> One example are the base ACLKs, the base supplies for all peripherals.
>
> Therefore add a structure similar to the sunxi clock-tree to protect these
> special clocks from being disabled.
>
> Signed-off-by: Heiko Stuebner <heiko-4mtYJXux2i+zQB+pC5nmwQ@public.gmane.org>
> ---
> drivers/clk/rockchip/clk-rk3188.c | 7 +++++++
> drivers/clk/rockchip/clk-rk3288.c | 7 +++++++
> drivers/clk/rockchip/clk.c | 13 +++++++++++++
> drivers/clk/rockchip/clk.h | 1 +
> 4 files changed, 28 insertions(+)
>
> diff --git a/drivers/clk/rockchip/clk-rk3188.c b/drivers/clk/rockchip/clk-rk3188.c
> index a83a6d8..5aef277 100644
> --- a/drivers/clk/rockchip/clk-rk3188.c
> +++ b/drivers/clk/rockchip/clk-rk3188.c
> @@ -599,6 +599,11 @@ static struct rockchip_clk_branch rk3188_clk_branches[] __initdata = {
> GATE(ACLK_GPS, "aclk_gps", "aclk_peri", 0, RK2928_CLKGATE_CON(8), 13, GFLAGS),
> };
>
> +static const char *rk3188_critical_clocks[] __initconst = {
> + "aclk_cpu",
> + "aclk_peri",
I'm not against the idea of critical clocks, but I want to verify that
there is no other driver out there that is a better fit for claiming
these clks via clk_get and enabling them the normal way via clk_enable?
Regards,
Mike
> +};
> +
> static void __init rk3188_common_clk_init(struct device_node *np)
> {
> void __iomem *reg_base;
> @@ -628,6 +633,8 @@ static void __init rk3188_common_clk_init(struct device_node *np)
> RK3188_GRF_SOC_STATUS);
> rockchip_clk_register_branches(common_clk_branches,
> ARRAY_SIZE(common_clk_branches));
> + rockchip_clk_protect_critical(rk3188_critical_clocks,
> + ARRAY_SIZE(rk3188_critical_clocks));
>
> rockchip_register_softrst(np, 9, reg_base + RK2928_SOFTRST_CON(0),
> ROCKCHIP_SOFTRST_HIWORD_MASK);
> diff --git a/drivers/clk/rockchip/clk-rk3288.c b/drivers/clk/rockchip/clk-rk3288.c
> index 0d8c6c5..6c6f954 100644
> --- a/drivers/clk/rockchip/clk-rk3288.c
> +++ b/drivers/clk/rockchip/clk-rk3288.c
> @@ -680,6 +680,11 @@ static struct rockchip_clk_branch rk3288_clk_branches[] __initdata = {
> GATE(0, "pclk_isp_in", "ext_isp", 0, RK3288_CLKGATE_CON(16), 3, GFLAGS),
> };
>
> +static const char *rk3288_critical_clocks[] __initconst = {
> + "aclk_cpu",
> + "aclk_peri",
> +};
> +
> static void __init rk3288_clk_init(struct device_node *np)
> {
> void __iomem *reg_base;
> @@ -710,6 +715,8 @@ static void __init rk3288_clk_init(struct device_node *np)
> RK3288_GRF_SOC_STATUS);
> rockchip_clk_register_branches(rk3288_clk_branches,
> ARRAY_SIZE(rk3288_clk_branches));
> + rockchip_clk_protect_critical(rk3288_critical_clocks,
> + ARRAY_SIZE(rk3288_critical_clocks));
>
> rockchip_register_softrst(np, 9, reg_base + RK3288_SOFTRST_CON(0),
> ROCKCHIP_SOFTRST_HIWORD_MASK);
> diff --git a/drivers/clk/rockchip/clk.c b/drivers/clk/rockchip/clk.c
> index 278cf9d..9189f1b 100644
> --- a/drivers/clk/rockchip/clk.c
> +++ b/drivers/clk/rockchip/clk.c
> @@ -242,3 +242,16 @@ void __init rockchip_clk_register_branches(
> rockchip_clk_add_lookup(clk, list->id);
> }
> }
> +
> +void __init rockchip_clk_protect_critical(const char *clocks[], int nclocks)
> +{
> + int i;
> +
> + /* Protect the clocks that needs to stay on */
> + for (i = 0; i < nclocks; i++) {
> + struct clk *clk = __clk_lookup(clocks[i]);
> +
> + if (clk)
> + clk_prepare_enable(clk);
> + }
> +}
> diff --git a/drivers/clk/rockchip/clk.h b/drivers/clk/rockchip/clk.h
> index 887cbde..2b0bca1 100644
> --- a/drivers/clk/rockchip/clk.h
> +++ b/drivers/clk/rockchip/clk.h
> @@ -329,6 +329,7 @@ void rockchip_clk_register_branches(struct rockchip_clk_branch *clk_list,
> unsigned int nr_clk);
> void rockchip_clk_register_plls(struct rockchip_pll_clock *pll_list,
> unsigned int nr_pll, int grf_lock_offset);
> +void rockchip_clk_protect_critical(const char *clocks[], int nclocks);
>
> #define ROCKCHIP_SOFTRST_HIWORD_MASK BIT(0)
>
> --
> 2.0.1
>
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 48+ messages in thread* [PATCH 1/4] clk: rockchip: protect critical clocks from getting disabled
2014-07-31 22:45 ` Mike Turquette
@ 2014-07-31 23:29 ` Heiko Stübner
-1 siblings, 0 replies; 48+ messages in thread
From: Heiko Stübner @ 2014-07-31 23:29 UTC (permalink / raw)
To: linux-arm-kernel
Hi Mike,
Am Donnerstag, 31. Juli 2014, 15:45:23 schrieb Mike Turquette:
> Quoting Heiko Stuebner (2014-07-29 12:12:05)
>
> > The clock-tree contains clocks that should never get disabled
> > automatically. One example are the base ACLKs, the base supplies for all
> > peripherals.
> >
> > Therefore add a structure similar to the sunxi clock-tree to protect these
> > special clocks from being disabled.
> >
> > Signed-off-by: Heiko Stuebner <heiko@sntech.de>
> > ---
> >
> > drivers/clk/rockchip/clk-rk3188.c | 7 +++++++
> > drivers/clk/rockchip/clk-rk3288.c | 7 +++++++
> > drivers/clk/rockchip/clk.c | 13 +++++++++++++
> > drivers/clk/rockchip/clk.h | 1 +
> > 4 files changed, 28 insertions(+)
> >
> > diff --git a/drivers/clk/rockchip/clk-rk3188.c
> > b/drivers/clk/rockchip/clk-rk3188.c index a83a6d8..5aef277 100644
> > --- a/drivers/clk/rockchip/clk-rk3188.c
> > +++ b/drivers/clk/rockchip/clk-rk3188.c
> > @@ -599,6 +599,11 @@ static struct rockchip_clk_branch
> > rk3188_clk_branches[] __initdata = {>
> > GATE(ACLK_GPS, "aclk_gps", "aclk_peri", 0, RK2928_CLKGATE_CON(8),
> > 13, GFLAGS),>
> > };
> >
> > +static const char *rk3188_critical_clocks[] __initconst = {
> > + "aclk_cpu",
> > + "aclk_peri",
>
> I'm not against the idea of critical clocks, but I want to verify that
> there is no other driver out there that is a better fit for claiming
> these clks via clk_get and enabling them the normal way via clk_enable?
In the clock hierarchy of Rockchip SoCs, both aclks listed here, are sources
for pclk and hclk, as well as sourcing some other peripheral gates further
below too. So from what I've seen from the clock diagrams, there is nothing
that would claim these clocks directly, and it wouldn't also make any sense to
let them get disabled as there will always be something using them (for
example the dram-controller).
Heiko
^ permalink raw reply [flat|nested] 48+ messages in thread* Re: [PATCH 1/4] clk: rockchip: protect critical clocks from getting disabled
@ 2014-07-31 23:29 ` Heiko Stübner
0 siblings, 0 replies; 48+ messages in thread
From: Heiko Stübner @ 2014-07-31 23:29 UTC (permalink / raw)
To: Mike Turquette
Cc: arm-DgEjT+Ai2ygdnm+yROfE0A,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
devicetree-u79uwXL29TY76Z2rM5mHXA,
dianders-F7+t8E8rja9g9hUCZPvPmw,
kever.yang-TNX95d0MmH7DzftRWevZcw, cf-TNX95d0MmH7DzftRWevZcw
Hi Mike,
Am Donnerstag, 31. Juli 2014, 15:45:23 schrieb Mike Turquette:
> Quoting Heiko Stuebner (2014-07-29 12:12:05)
>
> > The clock-tree contains clocks that should never get disabled
> > automatically. One example are the base ACLKs, the base supplies for all
> > peripherals.
> >
> > Therefore add a structure similar to the sunxi clock-tree to protect these
> > special clocks from being disabled.
> >
> > Signed-off-by: Heiko Stuebner <heiko-4mtYJXux2i+zQB+pC5nmwQ@public.gmane.org>
> > ---
> >
> > drivers/clk/rockchip/clk-rk3188.c | 7 +++++++
> > drivers/clk/rockchip/clk-rk3288.c | 7 +++++++
> > drivers/clk/rockchip/clk.c | 13 +++++++++++++
> > drivers/clk/rockchip/clk.h | 1 +
> > 4 files changed, 28 insertions(+)
> >
> > diff --git a/drivers/clk/rockchip/clk-rk3188.c
> > b/drivers/clk/rockchip/clk-rk3188.c index a83a6d8..5aef277 100644
> > --- a/drivers/clk/rockchip/clk-rk3188.c
> > +++ b/drivers/clk/rockchip/clk-rk3188.c
> > @@ -599,6 +599,11 @@ static struct rockchip_clk_branch
> > rk3188_clk_branches[] __initdata = {>
> > GATE(ACLK_GPS, "aclk_gps", "aclk_peri", 0, RK2928_CLKGATE_CON(8),
> > 13, GFLAGS),>
> > };
> >
> > +static const char *rk3188_critical_clocks[] __initconst = {
> > + "aclk_cpu",
> > + "aclk_peri",
>
> I'm not against the idea of critical clocks, but I want to verify that
> there is no other driver out there that is a better fit for claiming
> these clks via clk_get and enabling them the normal way via clk_enable?
In the clock hierarchy of Rockchip SoCs, both aclks listed here, are sources
for pclk and hclk, as well as sourcing some other peripheral gates further
below too. So from what I've seen from the clock diagrams, there is nothing
that would claim these clocks directly, and it wouldn't also make any sense to
let them get disabled as there will always be something using them (for
example the dram-controller).
Heiko
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 48+ messages in thread* [PATCH 1/4] clk: rockchip: protect critical clocks from getting disabled
2014-07-31 23:29 ` Heiko Stübner
@ 2014-08-01 0:30 ` Mike Turquette
-1 siblings, 0 replies; 48+ messages in thread
From: Mike Turquette @ 2014-08-01 0:30 UTC (permalink / raw)
To: linux-arm-kernel
Quoting Heiko St?bner (2014-07-31 16:29:34)
> Hi Mike,
>
> Am Donnerstag, 31. Juli 2014, 15:45:23 schrieb Mike Turquette:
> > Quoting Heiko Stuebner (2014-07-29 12:12:05)
> >
> > > The clock-tree contains clocks that should never get disabled
> > > automatically. One example are the base ACLKs, the base supplies for all
> > > peripherals.
> > >
> > > Therefore add a structure similar to the sunxi clock-tree to protect these
> > > special clocks from being disabled.
> > >
> > > Signed-off-by: Heiko Stuebner <heiko@sntech.de>
> > > ---
> > >
> > > drivers/clk/rockchip/clk-rk3188.c | 7 +++++++
> > > drivers/clk/rockchip/clk-rk3288.c | 7 +++++++
> > > drivers/clk/rockchip/clk.c | 13 +++++++++++++
> > > drivers/clk/rockchip/clk.h | 1 +
> > > 4 files changed, 28 insertions(+)
> > >
> > > diff --git a/drivers/clk/rockchip/clk-rk3188.c
> > > b/drivers/clk/rockchip/clk-rk3188.c index a83a6d8..5aef277 100644
> > > --- a/drivers/clk/rockchip/clk-rk3188.c
> > > +++ b/drivers/clk/rockchip/clk-rk3188.c
> > > @@ -599,6 +599,11 @@ static struct rockchip_clk_branch
> > > rk3188_clk_branches[] __initdata = {>
> > > GATE(ACLK_GPS, "aclk_gps", "aclk_peri", 0, RK2928_CLKGATE_CON(8),
> > > 13, GFLAGS),>
> > > };
> > >
> > > +static const char *rk3188_critical_clocks[] __initconst = {
> > > + "aclk_cpu",
> > > + "aclk_peri",
> >
> > I'm not against the idea of critical clocks, but I want to verify that
> > there is no other driver out there that is a better fit for claiming
> > these clks via clk_get and enabling them the normal way via clk_enable?
>
> In the clock hierarchy of Rockchip SoCs, both aclks listed here, are sources
> for pclk and hclk, as well as sourcing some other peripheral gates further
> below too. So from what I've seen from the clock diagrams, there is nothing
> that would claim these clocks directly, and it wouldn't also make any sense to
> let them get disabled as there will always be something using them (for
> example the dram-controller).
Sounds good. Just out of curiosity, under what circumstances would you
want to gate them? Is there a use case for it?
Regards,
Mike
>
>
> Heiko
^ permalink raw reply [flat|nested] 48+ messages in thread* Re: [PATCH 1/4] clk: rockchip: protect critical clocks from getting disabled
@ 2014-08-01 0:30 ` Mike Turquette
0 siblings, 0 replies; 48+ messages in thread
From: Mike Turquette @ 2014-08-01 0:30 UTC (permalink / raw)
To: Heiko Stübner
Cc: devicetree, dianders, kever.yang, arm, cf, linux-arm-kernel
Quoting Heiko Stübner (2014-07-31 16:29:34)
> Hi Mike,
>
> Am Donnerstag, 31. Juli 2014, 15:45:23 schrieb Mike Turquette:
> > Quoting Heiko Stuebner (2014-07-29 12:12:05)
> >
> > > The clock-tree contains clocks that should never get disabled
> > > automatically. One example are the base ACLKs, the base supplies for all
> > > peripherals.
> > >
> > > Therefore add a structure similar to the sunxi clock-tree to protect these
> > > special clocks from being disabled.
> > >
> > > Signed-off-by: Heiko Stuebner <heiko@sntech.de>
> > > ---
> > >
> > > drivers/clk/rockchip/clk-rk3188.c | 7 +++++++
> > > drivers/clk/rockchip/clk-rk3288.c | 7 +++++++
> > > drivers/clk/rockchip/clk.c | 13 +++++++++++++
> > > drivers/clk/rockchip/clk.h | 1 +
> > > 4 files changed, 28 insertions(+)
> > >
> > > diff --git a/drivers/clk/rockchip/clk-rk3188.c
> > > b/drivers/clk/rockchip/clk-rk3188.c index a83a6d8..5aef277 100644
> > > --- a/drivers/clk/rockchip/clk-rk3188.c
> > > +++ b/drivers/clk/rockchip/clk-rk3188.c
> > > @@ -599,6 +599,11 @@ static struct rockchip_clk_branch
> > > rk3188_clk_branches[] __initdata = {>
> > > GATE(ACLK_GPS, "aclk_gps", "aclk_peri", 0, RK2928_CLKGATE_CON(8),
> > > 13, GFLAGS),>
> > > };
> > >
> > > +static const char *rk3188_critical_clocks[] __initconst = {
> > > + "aclk_cpu",
> > > + "aclk_peri",
> >
> > I'm not against the idea of critical clocks, but I want to verify that
> > there is no other driver out there that is a better fit for claiming
> > these clks via clk_get and enabling them the normal way via clk_enable?
>
> In the clock hierarchy of Rockchip SoCs, both aclks listed here, are sources
> for pclk and hclk, as well as sourcing some other peripheral gates further
> below too. So from what I've seen from the clock diagrams, there is nothing
> that would claim these clocks directly, and it wouldn't also make any sense to
> let them get disabled as there will always be something using them (for
> example the dram-controller).
Sounds good. Just out of curiosity, under what circumstances would you
want to gate them? Is there a use case for it?
Regards,
Mike
>
>
> Heiko
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 48+ messages in thread* [PATCH 1/4] clk: rockchip: protect critical clocks from getting disabled
2014-08-01 0:30 ` Mike Turquette
@ 2014-08-01 8:15 ` Heiko Stübner
-1 siblings, 0 replies; 48+ messages in thread
From: Heiko Stübner @ 2014-08-01 8:15 UTC (permalink / raw)
To: linux-arm-kernel
Am Donnerstag, 31. Juli 2014, 17:30:25 schrieb Mike Turquette:
> Quoting Heiko St?bner (2014-07-31 16:29:34)
>
> > Hi Mike,
> >
> > Am Donnerstag, 31. Juli 2014, 15:45:23 schrieb Mike Turquette:
> > > Quoting Heiko Stuebner (2014-07-29 12:12:05)
> > >
> > > > The clock-tree contains clocks that should never get disabled
> > > > automatically. One example are the base ACLKs, the base supplies for
> > > > all
> > > > peripherals.
> > > >
> > > > Therefore add a structure similar to the sunxi clock-tree to protect
> > > > these
> > > > special clocks from being disabled.
> > > >
> > > > Signed-off-by: Heiko Stuebner <heiko@sntech.de>
> > > > ---
> > > >
> > > > drivers/clk/rockchip/clk-rk3188.c | 7 +++++++
> > > > drivers/clk/rockchip/clk-rk3288.c | 7 +++++++
> > > > drivers/clk/rockchip/clk.c | 13 +++++++++++++
> > > > drivers/clk/rockchip/clk.h | 1 +
> > > > 4 files changed, 28 insertions(+)
> > > >
> > > > diff --git a/drivers/clk/rockchip/clk-rk3188.c
> > > > b/drivers/clk/rockchip/clk-rk3188.c index a83a6d8..5aef277 100644
> > > > --- a/drivers/clk/rockchip/clk-rk3188.c
> > > > +++ b/drivers/clk/rockchip/clk-rk3188.c
> > > > @@ -599,6 +599,11 @@ static struct rockchip_clk_branch
> > > > rk3188_clk_branches[] __initdata = {>
> > > >
> > > > GATE(ACLK_GPS, "aclk_gps", "aclk_peri", 0,
> > > > RK2928_CLKGATE_CON(8),
> > > > 13, GFLAGS),>
> > > >
> > > > };
> > > >
> > > > +static const char *rk3188_critical_clocks[] __initconst = {
> > > > + "aclk_cpu",
> > > > + "aclk_peri",
> > >
> > > I'm not against the idea of critical clocks, but I want to verify that
> > > there is no other driver out there that is a better fit for claiming
> > > these clks via clk_get and enabling them the normal way via clk_enable?
> >
> > In the clock hierarchy of Rockchip SoCs, both aclks listed here, are
> > sources for pclk and hclk, as well as sourcing some other peripheral
> > gates further below too. So from what I've seen from the clock diagrams,
> > there is nothing that would claim these clocks directly, and it wouldn't
> > also make any sense to let them get disabled as there will always be
> > something using them (for example the dram-controller).
>
> Sounds good. Just out of curiosity, under what circumstances would you
> want to gate them? Is there a use case for it?
hmm, I don't see a use-case for gating these at runtime right now, simply
because there should be a user for them all the time. (both aclks combined
have at least 68 consumers on the rk3288 and a similar number on the previous
socs)
The only thing I could think of would be something suspend related - which we
don't have yet. But then this would probably happen in the clock controller
itself anyway in some late suspend-related action, so it could take into
account them being defined as critical clocks.
Heiko
^ permalink raw reply [flat|nested] 48+ messages in thread* Re: [PATCH 1/4] clk: rockchip: protect critical clocks from getting disabled
@ 2014-08-01 8:15 ` Heiko Stübner
0 siblings, 0 replies; 48+ messages in thread
From: Heiko Stübner @ 2014-08-01 8:15 UTC (permalink / raw)
To: Mike Turquette
Cc: arnd-r2nGTMty4D4,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
devicetree-u79uwXL29TY76Z2rM5mHXA,
dianders-F7+t8E8rja9g9hUCZPvPmw,
kever.yang-TNX95d0MmH7DzftRWevZcw, cf-TNX95d0MmH7DzftRWevZcw,
olof-nZhT3qVonbNeoWH0uzbU5w
Am Donnerstag, 31. Juli 2014, 17:30:25 schrieb Mike Turquette:
> Quoting Heiko Stübner (2014-07-31 16:29:34)
>
> > Hi Mike,
> >
> > Am Donnerstag, 31. Juli 2014, 15:45:23 schrieb Mike Turquette:
> > > Quoting Heiko Stuebner (2014-07-29 12:12:05)
> > >
> > > > The clock-tree contains clocks that should never get disabled
> > > > automatically. One example are the base ACLKs, the base supplies for
> > > > all
> > > > peripherals.
> > > >
> > > > Therefore add a structure similar to the sunxi clock-tree to protect
> > > > these
> > > > special clocks from being disabled.
> > > >
> > > > Signed-off-by: Heiko Stuebner <heiko-4mtYJXux2i+zQB+pC5nmwQ@public.gmane.org>
> > > > ---
> > > >
> > > > drivers/clk/rockchip/clk-rk3188.c | 7 +++++++
> > > > drivers/clk/rockchip/clk-rk3288.c | 7 +++++++
> > > > drivers/clk/rockchip/clk.c | 13 +++++++++++++
> > > > drivers/clk/rockchip/clk.h | 1 +
> > > > 4 files changed, 28 insertions(+)
> > > >
> > > > diff --git a/drivers/clk/rockchip/clk-rk3188.c
> > > > b/drivers/clk/rockchip/clk-rk3188.c index a83a6d8..5aef277 100644
> > > > --- a/drivers/clk/rockchip/clk-rk3188.c
> > > > +++ b/drivers/clk/rockchip/clk-rk3188.c
> > > > @@ -599,6 +599,11 @@ static struct rockchip_clk_branch
> > > > rk3188_clk_branches[] __initdata = {>
> > > >
> > > > GATE(ACLK_GPS, "aclk_gps", "aclk_peri", 0,
> > > > RK2928_CLKGATE_CON(8),
> > > > 13, GFLAGS),>
> > > >
> > > > };
> > > >
> > > > +static const char *rk3188_critical_clocks[] __initconst = {
> > > > + "aclk_cpu",
> > > > + "aclk_peri",
> > >
> > > I'm not against the idea of critical clocks, but I want to verify that
> > > there is no other driver out there that is a better fit for claiming
> > > these clks via clk_get and enabling them the normal way via clk_enable?
> >
> > In the clock hierarchy of Rockchip SoCs, both aclks listed here, are
> > sources for pclk and hclk, as well as sourcing some other peripheral
> > gates further below too. So from what I've seen from the clock diagrams,
> > there is nothing that would claim these clocks directly, and it wouldn't
> > also make any sense to let them get disabled as there will always be
> > something using them (for example the dram-controller).
>
> Sounds good. Just out of curiosity, under what circumstances would you
> want to gate them? Is there a use case for it?
hmm, I don't see a use-case for gating these at runtime right now, simply
because there should be a user for them all the time. (both aclks combined
have at least 68 consumers on the rk3288 and a similar number on the previous
socs)
The only thing I could think of would be something suspend related - which we
don't have yet. But then this would probably happen in the clock controller
itself anyway in some late suspend-related action, so it could take into
account them being defined as critical clocks.
Heiko
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 48+ messages in thread* [PATCH 1/4] clk: rockchip: protect critical clocks from getting disabled
2014-08-01 8:15 ` Heiko Stübner
@ 2014-08-08 21:58 ` Doug Anderson
-1 siblings, 0 replies; 48+ messages in thread
From: Doug Anderson @ 2014-08-08 21:58 UTC (permalink / raw)
To: linux-arm-kernel
Heiko,
On Fri, Aug 1, 2014 at 1:15 AM, Heiko St?bner <heiko@sntech.de> wrote:
> Am Donnerstag, 31. Juli 2014, 17:30:25 schrieb Mike Turquette:
>> Quoting Heiko St?bner (2014-07-31 16:29:34)
>>
>> > Hi Mike,
>> >
>> > Am Donnerstag, 31. Juli 2014, 15:45:23 schrieb Mike Turquette:
>> > > Quoting Heiko Stuebner (2014-07-29 12:12:05)
>> > >
>> > > > The clock-tree contains clocks that should never get disabled
>> > > > automatically. One example are the base ACLKs, the base supplies for
>> > > > all
>> > > > peripherals.
>> > > >
>> > > > Therefore add a structure similar to the sunxi clock-tree to protect
>> > > > these
>> > > > special clocks from being disabled.
>> > > >
>> > > > Signed-off-by: Heiko Stuebner <heiko@sntech.de>
>> > > > ---
>> > > >
>> > > > drivers/clk/rockchip/clk-rk3188.c | 7 +++++++
>> > > > drivers/clk/rockchip/clk-rk3288.c | 7 +++++++
>> > > > drivers/clk/rockchip/clk.c | 13 +++++++++++++
>> > > > drivers/clk/rockchip/clk.h | 1 +
>> > > > 4 files changed, 28 insertions(+)
>> > > >
>> > > > diff --git a/drivers/clk/rockchip/clk-rk3188.c
>> > > > b/drivers/clk/rockchip/clk-rk3188.c index a83a6d8..5aef277 100644
>> > > > --- a/drivers/clk/rockchip/clk-rk3188.c
>> > > > +++ b/drivers/clk/rockchip/clk-rk3188.c
>> > > > @@ -599,6 +599,11 @@ static struct rockchip_clk_branch
>> > > > rk3188_clk_branches[] __initdata = {>
>> > > >
>> > > > GATE(ACLK_GPS, "aclk_gps", "aclk_peri", 0,
>> > > > RK2928_CLKGATE_CON(8),
>> > > > 13, GFLAGS),>
>> > > >
>> > > > };
>> > > >
>> > > > +static const char *rk3188_critical_clocks[] __initconst = {
>> > > > + "aclk_cpu",
>> > > > + "aclk_peri",
>> > >
>> > > I'm not against the idea of critical clocks, but I want to verify that
>> > > there is no other driver out there that is a better fit for claiming
>> > > these clks via clk_get and enabling them the normal way via clk_enable?
>> >
>> > In the clock hierarchy of Rockchip SoCs, both aclks listed here, are
>> > sources for pclk and hclk, as well as sourcing some other peripheral
>> > gates further below too. So from what I've seen from the clock diagrams,
>> > there is nothing that would claim these clocks directly, and it wouldn't
>> > also make any sense to let them get disabled as there will always be
>> > something using them (for example the dram-controller).
>>
>> Sounds good. Just out of curiosity, under what circumstances would you
>> want to gate them? Is there a use case for it?
>
> hmm, I don't see a use-case for gating these at runtime right now, simply
> because there should be a user for them all the time. (both aclks combined
> have at least 68 consumers on the rk3288 and a similar number on the previous
> socs)
>
> The only thing I could think of would be something suspend related - which we
> don't have yet. But then this would probably happen in the clock controller
> itself anyway in some late suspend-related action, so it could take into
> account them being defined as critical clocks.
I know Rockchip has some funky stuff planned for memory scaling too.
Perhaps Kever can comment whether these two clocks might need to be
disabled in that case?
In any case, this patch fixes a hang at boot when using the PWM driver
that just landed, so:
Tested-by: Doug Anderson <dianders@chromium.org>
^ permalink raw reply [flat|nested] 48+ messages in thread* Re: [PATCH 1/4] clk: rockchip: protect critical clocks from getting disabled
@ 2014-08-08 21:58 ` Doug Anderson
0 siblings, 0 replies; 48+ messages in thread
From: Doug Anderson @ 2014-08-08 21:58 UTC (permalink / raw)
To: Heiko Stübner
Cc: Mike Turquette, Arnd Bergmann,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Kever Yang,
Eddie Cai, Olof Johansson
Heiko,
On Fri, Aug 1, 2014 at 1:15 AM, Heiko Stübner <heiko-4mtYJXux2i+zQB+pC5nmwQ@public.gmane.org> wrote:
> Am Donnerstag, 31. Juli 2014, 17:30:25 schrieb Mike Turquette:
>> Quoting Heiko Stübner (2014-07-31 16:29:34)
>>
>> > Hi Mike,
>> >
>> > Am Donnerstag, 31. Juli 2014, 15:45:23 schrieb Mike Turquette:
>> > > Quoting Heiko Stuebner (2014-07-29 12:12:05)
>> > >
>> > > > The clock-tree contains clocks that should never get disabled
>> > > > automatically. One example are the base ACLKs, the base supplies for
>> > > > all
>> > > > peripherals.
>> > > >
>> > > > Therefore add a structure similar to the sunxi clock-tree to protect
>> > > > these
>> > > > special clocks from being disabled.
>> > > >
>> > > > Signed-off-by: Heiko Stuebner <heiko-4mtYJXux2i+zQB+pC5nmwQ@public.gmane.org>
>> > > > ---
>> > > >
>> > > > drivers/clk/rockchip/clk-rk3188.c | 7 +++++++
>> > > > drivers/clk/rockchip/clk-rk3288.c | 7 +++++++
>> > > > drivers/clk/rockchip/clk.c | 13 +++++++++++++
>> > > > drivers/clk/rockchip/clk.h | 1 +
>> > > > 4 files changed, 28 insertions(+)
>> > > >
>> > > > diff --git a/drivers/clk/rockchip/clk-rk3188.c
>> > > > b/drivers/clk/rockchip/clk-rk3188.c index a83a6d8..5aef277 100644
>> > > > --- a/drivers/clk/rockchip/clk-rk3188.c
>> > > > +++ b/drivers/clk/rockchip/clk-rk3188.c
>> > > > @@ -599,6 +599,11 @@ static struct rockchip_clk_branch
>> > > > rk3188_clk_branches[] __initdata = {>
>> > > >
>> > > > GATE(ACLK_GPS, "aclk_gps", "aclk_peri", 0,
>> > > > RK2928_CLKGATE_CON(8),
>> > > > 13, GFLAGS),>
>> > > >
>> > > > };
>> > > >
>> > > > +static const char *rk3188_critical_clocks[] __initconst = {
>> > > > + "aclk_cpu",
>> > > > + "aclk_peri",
>> > >
>> > > I'm not against the idea of critical clocks, but I want to verify that
>> > > there is no other driver out there that is a better fit for claiming
>> > > these clks via clk_get and enabling them the normal way via clk_enable?
>> >
>> > In the clock hierarchy of Rockchip SoCs, both aclks listed here, are
>> > sources for pclk and hclk, as well as sourcing some other peripheral
>> > gates further below too. So from what I've seen from the clock diagrams,
>> > there is nothing that would claim these clocks directly, and it wouldn't
>> > also make any sense to let them get disabled as there will always be
>> > something using them (for example the dram-controller).
>>
>> Sounds good. Just out of curiosity, under what circumstances would you
>> want to gate them? Is there a use case for it?
>
> hmm, I don't see a use-case for gating these at runtime right now, simply
> because there should be a user for them all the time. (both aclks combined
> have at least 68 consumers on the rk3288 and a similar number on the previous
> socs)
>
> The only thing I could think of would be something suspend related - which we
> don't have yet. But then this would probably happen in the clock controller
> itself anyway in some late suspend-related action, so it could take into
> account them being defined as critical clocks.
I know Rockchip has some funky stuff planned for memory scaling too.
Perhaps Kever can comment whether these two clocks might need to be
disabled in that case?
In any case, this patch fixes a hang at boot when using the PWM driver
that just landed, so:
Tested-by: Doug Anderson <dianders-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 48+ messages in thread* [PATCH 1/4] clk: rockchip: protect critical clocks from getting disabled
@ 2014-08-08 22:20 ` Heiko Stübner
0 siblings, 0 replies; 48+ messages in thread
From: Heiko Stübner @ 2014-08-08 22:20 UTC (permalink / raw)
To: linux-arm-kernel
Am Freitag, 8. August 2014, 14:58:11 schrieb Doug Anderson:
> Heiko,
>
> On Fri, Aug 1, 2014 at 1:15 AM, Heiko St?bner <heiko@sntech.de> wrote:
> > Am Donnerstag, 31. Juli 2014, 17:30:25 schrieb Mike Turquette:
> >> Quoting Heiko St?bner (2014-07-31 16:29:34)
> >>
> >> > Hi Mike,
> >> >
> >> > Am Donnerstag, 31. Juli 2014, 15:45:23 schrieb Mike Turquette:
> >> > > Quoting Heiko Stuebner (2014-07-29 12:12:05)
> >> > >
> >> > > > The clock-tree contains clocks that should never get disabled
> >> > > > automatically. One example are the base ACLKs, the base supplies
> >> > > > for
> >> > > > all
> >> > > > peripherals.
> >> > > >
> >> > > > Therefore add a structure similar to the sunxi clock-tree to
> >> > > > protect
> >> > > > these
> >> > > > special clocks from being disabled.
> >> > > >
> >> > > > Signed-off-by: Heiko Stuebner <heiko@sntech.de>
> >> > > > ---
> >> > > >
> >> > > > drivers/clk/rockchip/clk-rk3188.c | 7 +++++++
> >> > > > drivers/clk/rockchip/clk-rk3288.c | 7 +++++++
> >> > > > drivers/clk/rockchip/clk.c | 13 +++++++++++++
> >> > > > drivers/clk/rockchip/clk.h | 1 +
> >> > > > 4 files changed, 28 insertions(+)
> >> > > >
> >> > > > diff --git a/drivers/clk/rockchip/clk-rk3188.c
> >> > > > b/drivers/clk/rockchip/clk-rk3188.c index a83a6d8..5aef277 100644
> >> > > > --- a/drivers/clk/rockchip/clk-rk3188.c
> >> > > > +++ b/drivers/clk/rockchip/clk-rk3188.c
> >> > > > @@ -599,6 +599,11 @@ static struct rockchip_clk_branch
> >> > > > rk3188_clk_branches[] __initdata = {>
> >> > > >
> >> > > > GATE(ACLK_GPS, "aclk_gps", "aclk_peri", 0,
> >> > > > RK2928_CLKGATE_CON(8),
> >> > > > 13, GFLAGS),>
> >> > > >
> >> > > > };
> >> > > >
> >> > > > +static const char *rk3188_critical_clocks[] __initconst = {
> >> > > > + "aclk_cpu",
> >> > > > + "aclk_peri",
> >> > >
> >> > > I'm not against the idea of critical clocks, but I want to verify
> >> > > that
> >> > > there is no other driver out there that is a better fit for claiming
> >> > > these clks via clk_get and enabling them the normal way via
> >> > > clk_enable?
> >> >
> >> > In the clock hierarchy of Rockchip SoCs, both aclks listed here, are
> >> > sources for pclk and hclk, as well as sourcing some other peripheral
> >> > gates further below too. So from what I've seen from the clock
> >> > diagrams,
> >> > there is nothing that would claim these clocks directly, and it
> >> > wouldn't
> >> > also make any sense to let them get disabled as there will always be
> >> > something using them (for example the dram-controller).
> >>
> >> Sounds good. Just out of curiosity, under what circumstances would you
> >> want to gate them? Is there a use case for it?
> >
> > hmm, I don't see a use-case for gating these at runtime right now, simply
> > because there should be a user for them all the time. (both aclks combined
> > have at least 68 consumers on the rk3288 and a similar number on the
> > previous socs)
> >
> > The only thing I could think of would be something suspend related - which
> > we don't have yet. But then this would probably happen in the clock
> > controller itself anyway in some late suspend-related action, so it could
> > take into account them being defined as critical clocks.
>
> I know Rockchip has some funky stuff planned for memory scaling too.
> Perhaps Kever can comment whether these two clocks might need to be
> disabled in that case?
hmm looking at the core clock tree, I wouldn't think so.
The only intersection between the ddr-clk, aclk_cpu and aclk_peri is the gpll
which can be a source to both. But the ddr-clk is mainly sourced from the dpll
anyway.
In any case, turning off aclk_cpu/aclk_peri in this scenario wouldn't normally
be possible anyway, as most of the time some pclk_* would be active anyway.
> In any case, this patch fixes a hang at boot when using the PWM driver
> that just landed, so:
>
> Tested-by: Doug Anderson <dianders@chromium.org>
thanks
Heiko
^ permalink raw reply [flat|nested] 48+ messages in thread* Re: [PATCH 1/4] clk: rockchip: protect critical clocks from getting disabled
@ 2014-08-08 22:20 ` Heiko Stübner
0 siblings, 0 replies; 48+ messages in thread
From: Heiko Stübner @ 2014-08-08 22:20 UTC (permalink / raw)
To: Doug Anderson
Cc: Mike Turquette, Arnd Bergmann,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Kever Yang,
Eddie Cai, Olof Johansson
Am Freitag, 8. August 2014, 14:58:11 schrieb Doug Anderson:
> Heiko,
>
> On Fri, Aug 1, 2014 at 1:15 AM, Heiko Stübner <heiko-4mtYJXux2i+zQB+pC5nmwQ@public.gmane.org> wrote:
> > Am Donnerstag, 31. Juli 2014, 17:30:25 schrieb Mike Turquette:
> >> Quoting Heiko Stübner (2014-07-31 16:29:34)
> >>
> >> > Hi Mike,
> >> >
> >> > Am Donnerstag, 31. Juli 2014, 15:45:23 schrieb Mike Turquette:
> >> > > Quoting Heiko Stuebner (2014-07-29 12:12:05)
> >> > >
> >> > > > The clock-tree contains clocks that should never get disabled
> >> > > > automatically. One example are the base ACLKs, the base supplies
> >> > > > for
> >> > > > all
> >> > > > peripherals.
> >> > > >
> >> > > > Therefore add a structure similar to the sunxi clock-tree to
> >> > > > protect
> >> > > > these
> >> > > > special clocks from being disabled.
> >> > > >
> >> > > > Signed-off-by: Heiko Stuebner <heiko-4mtYJXux2i+zQB+pC5nmwQ@public.gmane.org>
> >> > > > ---
> >> > > >
> >> > > > drivers/clk/rockchip/clk-rk3188.c | 7 +++++++
> >> > > > drivers/clk/rockchip/clk-rk3288.c | 7 +++++++
> >> > > > drivers/clk/rockchip/clk.c | 13 +++++++++++++
> >> > > > drivers/clk/rockchip/clk.h | 1 +
> >> > > > 4 files changed, 28 insertions(+)
> >> > > >
> >> > > > diff --git a/drivers/clk/rockchip/clk-rk3188.c
> >> > > > b/drivers/clk/rockchip/clk-rk3188.c index a83a6d8..5aef277 100644
> >> > > > --- a/drivers/clk/rockchip/clk-rk3188.c
> >> > > > +++ b/drivers/clk/rockchip/clk-rk3188.c
> >> > > > @@ -599,6 +599,11 @@ static struct rockchip_clk_branch
> >> > > > rk3188_clk_branches[] __initdata = {>
> >> > > >
> >> > > > GATE(ACLK_GPS, "aclk_gps", "aclk_peri", 0,
> >> > > > RK2928_CLKGATE_CON(8),
> >> > > > 13, GFLAGS),>
> >> > > >
> >> > > > };
> >> > > >
> >> > > > +static const char *rk3188_critical_clocks[] __initconst = {
> >> > > > + "aclk_cpu",
> >> > > > + "aclk_peri",
> >> > >
> >> > > I'm not against the idea of critical clocks, but I want to verify
> >> > > that
> >> > > there is no other driver out there that is a better fit for claiming
> >> > > these clks via clk_get and enabling them the normal way via
> >> > > clk_enable?
> >> >
> >> > In the clock hierarchy of Rockchip SoCs, both aclks listed here, are
> >> > sources for pclk and hclk, as well as sourcing some other peripheral
> >> > gates further below too. So from what I've seen from the clock
> >> > diagrams,
> >> > there is nothing that would claim these clocks directly, and it
> >> > wouldn't
> >> > also make any sense to let them get disabled as there will always be
> >> > something using them (for example the dram-controller).
> >>
> >> Sounds good. Just out of curiosity, under what circumstances would you
> >> want to gate them? Is there a use case for it?
> >
> > hmm, I don't see a use-case for gating these at runtime right now, simply
> > because there should be a user for them all the time. (both aclks combined
> > have at least 68 consumers on the rk3288 and a similar number on the
> > previous socs)
> >
> > The only thing I could think of would be something suspend related - which
> > we don't have yet. But then this would probably happen in the clock
> > controller itself anyway in some late suspend-related action, so it could
> > take into account them being defined as critical clocks.
>
> I know Rockchip has some funky stuff planned for memory scaling too.
> Perhaps Kever can comment whether these two clocks might need to be
> disabled in that case?
hmm looking at the core clock tree, I wouldn't think so.
The only intersection between the ddr-clk, aclk_cpu and aclk_peri is the gpll
which can be a source to both. But the ddr-clk is mainly sourced from the dpll
anyway.
In any case, turning off aclk_cpu/aclk_peri in this scenario wouldn't normally
be possible anyway, as most of the time some pclk_* would be active anyway.
> In any case, this patch fixes a hang at boot when using the PWM driver
> that just landed, so:
>
> Tested-by: Doug Anderson <dianders-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
thanks
Heiko
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 48+ messages in thread* [PATCH 1/4] clk: rockchip: protect critical clocks from getting disabled
2014-08-08 22:20 ` Heiko Stübner
@ 2014-08-11 10:03 ` Kever Yang
-1 siblings, 0 replies; 48+ messages in thread
From: Kever Yang @ 2014-08-11 10:03 UTC (permalink / raw)
To: linux-arm-kernel
On 08/09/2014 06:20 AM, Heiko St?bner wrote:
> Am Freitag, 8. August 2014, 14:58:11 schrieb Doug Anderson:
>> Heiko,
>>
>> On Fri, Aug 1, 2014 at 1:15 AM, Heiko St?bner <heiko@sntech.de> wrote:
>>> Am Donnerstag, 31. Juli 2014, 17:30:25 schrieb Mike Turquette:
>>>> Quoting Heiko St?bner (2014-07-31 16:29:34)
>>>>
>>>>> Hi Mike,
>>>>>
>>>>> Am Donnerstag, 31. Juli 2014, 15:45:23 schrieb Mike Turquette:
>>>>>> Quoting Heiko Stuebner (2014-07-29 12:12:05)
>>>>>>
>>>>>>> The clock-tree contains clocks that should never get disabled
>>>>>>> automatically. One example are the base ACLKs, the base supplies
>>>>>>> for
>>>>>>> all
>>>>>>> peripherals.
>>>>>>>
>>>>>>> Therefore add a structure similar to the sunxi clock-tree to
>>>>>>> protect
>>>>>>> these
>>>>>>> special clocks from being disabled.
>>>>>>>
>>>>>>> Signed-off-by: Heiko Stuebner <heiko@sntech.de>
>>>>>>> ---
>>>>>>>
>>>>>>> drivers/clk/rockchip/clk-rk3188.c | 7 +++++++
>>>>>>> drivers/clk/rockchip/clk-rk3288.c | 7 +++++++
>>>>>>> drivers/clk/rockchip/clk.c | 13 +++++++++++++
>>>>>>> drivers/clk/rockchip/clk.h | 1 +
>>>>>>> 4 files changed, 28 insertions(+)
>>>>>>>
>>>>>>> diff --git a/drivers/clk/rockchip/clk-rk3188.c
>>>>>>> b/drivers/clk/rockchip/clk-rk3188.c index a83a6d8..5aef277 100644
>>>>>>> --- a/drivers/clk/rockchip/clk-rk3188.c
>>>>>>> +++ b/drivers/clk/rockchip/clk-rk3188.c
>>>>>>> @@ -599,6 +599,11 @@ static struct rockchip_clk_branch
>>>>>>> rk3188_clk_branches[] __initdata = {>
>>>>>>>
>>>>>>> GATE(ACLK_GPS, "aclk_gps", "aclk_peri", 0,
>>>>>>> RK2928_CLKGATE_CON(8),
>>>>>>> 13, GFLAGS),>
>>>>>>>
>>>>>>> };
>>>>>>>
>>>>>>> +static const char *rk3188_critical_clocks[] __initconst = {
>>>>>>> + "aclk_cpu",
>>>>>>> + "aclk_peri",
>>>>>> I'm not against the idea of critical clocks, but I want to verify
>>>>>> that
>>>>>> there is no other driver out there that is a better fit for claiming
>>>>>> these clks via clk_get and enabling them the normal way via
>>>>>> clk_enable?
>>>>> In the clock hierarchy of Rockchip SoCs, both aclks listed here, are
>>>>> sources for pclk and hclk, as well as sourcing some other peripheral
>>>>> gates further below too. So from what I've seen from the clock
>>>>> diagrams,
>>>>> there is nothing that would claim these clocks directly, and it
>>>>> wouldn't
>>>>> also make any sense to let them get disabled as there will always be
>>>>> something using them (for example the dram-controller).
>>>> Sounds good. Just out of curiosity, under what circumstances would you
>>>> want to gate them? Is there a use case for it?
>>> hmm, I don't see a use-case for gating these at runtime right now, simply
>>> because there should be a user for them all the time. (both aclks combined
>>> have at least 68 consumers on the rk3288 and a similar number on the
>>> previous socs)
>>>
>>> The only thing I could think of would be something suspend related - which
>>> we don't have yet. But then this would probably happen in the clock
>>> controller itself anyway in some late suspend-related action, so it could
>>> take into account them being defined as critical clocks.
>> I know Rockchip has some funky stuff planned for memory scaling too.
>> Perhaps Kever can comment whether these two clocks might need to be
>> disabled in that case?
> hmm looking at the core clock tree, I wouldn't think so.
>
> The only intersection between the ddr-clk, aclk_cpu and aclk_peri is the gpll
> which can be a source to both. But the ddr-clk is mainly sourced from the dpll
> anyway.
>
> In any case, turning off aclk_cpu/aclk_peri in this scenario wouldn't normally
> be possible anyway, as most of the time some pclk_* would be active anyway.
Basically, aclk_cpu/aclk_peri have very little chance to be gated during
run-time,
but both of then may be gated when system enter suspend mode.
For aclk_cpu, this clock supplies most of clocks in pd_bus actually,
some clocks not listed
as a module clock will be needed, like cpu I/D bus fetch
instruction/data from dram via
bus based on aclk_cpu. For this situation, can we use a dummy clock to
hold the
aclk_cpu not to be gated at run-time?
For aclk_peri, this clock is able to be gated run-time in theory,
although it's no use
in actual system, because we have many devices on this clock and at most
of the time
some of then would be active just as you have mentioned.
The system suspend is another scenario, and we tend to gate both of the
clock if possible,
can we do that if this patch is applied?
-Kever
>
>
>> In any case, this patch fixes a hang at boot when using the PWM driver
>> that just landed, so:
>>
>> Tested-by: Doug Anderson <dianders@chromium.org>
> thanks
>
>
> Heiko
>
>
>
^ permalink raw reply [flat|nested] 48+ messages in thread* Re: [PATCH 1/4] clk: rockchip: protect critical clocks from getting disabled
@ 2014-08-11 10:03 ` Kever Yang
0 siblings, 0 replies; 48+ messages in thread
From: Kever Yang @ 2014-08-11 10:03 UTC (permalink / raw)
To: Heiko Stübner, Doug Anderson
Cc: Mike Turquette, Arnd Bergmann,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Eddie Cai,
Olof Johansson
On 08/09/2014 06:20 AM, Heiko Stübner wrote:
> Am Freitag, 8. August 2014, 14:58:11 schrieb Doug Anderson:
>> Heiko,
>>
>> On Fri, Aug 1, 2014 at 1:15 AM, Heiko Stübner <heiko-4mtYJXux2i+zQB+pC5nmwQ@public.gmane.org> wrote:
>>> Am Donnerstag, 31. Juli 2014, 17:30:25 schrieb Mike Turquette:
>>>> Quoting Heiko Stübner (2014-07-31 16:29:34)
>>>>
>>>>> Hi Mike,
>>>>>
>>>>> Am Donnerstag, 31. Juli 2014, 15:45:23 schrieb Mike Turquette:
>>>>>> Quoting Heiko Stuebner (2014-07-29 12:12:05)
>>>>>>
>>>>>>> The clock-tree contains clocks that should never get disabled
>>>>>>> automatically. One example are the base ACLKs, the base supplies
>>>>>>> for
>>>>>>> all
>>>>>>> peripherals.
>>>>>>>
>>>>>>> Therefore add a structure similar to the sunxi clock-tree to
>>>>>>> protect
>>>>>>> these
>>>>>>> special clocks from being disabled.
>>>>>>>
>>>>>>> Signed-off-by: Heiko Stuebner <heiko-4mtYJXux2i+zQB+pC5nmwQ@public.gmane.org>
>>>>>>> ---
>>>>>>>
>>>>>>> drivers/clk/rockchip/clk-rk3188.c | 7 +++++++
>>>>>>> drivers/clk/rockchip/clk-rk3288.c | 7 +++++++
>>>>>>> drivers/clk/rockchip/clk.c | 13 +++++++++++++
>>>>>>> drivers/clk/rockchip/clk.h | 1 +
>>>>>>> 4 files changed, 28 insertions(+)
>>>>>>>
>>>>>>> diff --git a/drivers/clk/rockchip/clk-rk3188.c
>>>>>>> b/drivers/clk/rockchip/clk-rk3188.c index a83a6d8..5aef277 100644
>>>>>>> --- a/drivers/clk/rockchip/clk-rk3188.c
>>>>>>> +++ b/drivers/clk/rockchip/clk-rk3188.c
>>>>>>> @@ -599,6 +599,11 @@ static struct rockchip_clk_branch
>>>>>>> rk3188_clk_branches[] __initdata = {>
>>>>>>>
>>>>>>> GATE(ACLK_GPS, "aclk_gps", "aclk_peri", 0,
>>>>>>> RK2928_CLKGATE_CON(8),
>>>>>>> 13, GFLAGS),>
>>>>>>>
>>>>>>> };
>>>>>>>
>>>>>>> +static const char *rk3188_critical_clocks[] __initconst = {
>>>>>>> + "aclk_cpu",
>>>>>>> + "aclk_peri",
>>>>>> I'm not against the idea of critical clocks, but I want to verify
>>>>>> that
>>>>>> there is no other driver out there that is a better fit for claiming
>>>>>> these clks via clk_get and enabling them the normal way via
>>>>>> clk_enable?
>>>>> In the clock hierarchy of Rockchip SoCs, both aclks listed here, are
>>>>> sources for pclk and hclk, as well as sourcing some other peripheral
>>>>> gates further below too. So from what I've seen from the clock
>>>>> diagrams,
>>>>> there is nothing that would claim these clocks directly, and it
>>>>> wouldn't
>>>>> also make any sense to let them get disabled as there will always be
>>>>> something using them (for example the dram-controller).
>>>> Sounds good. Just out of curiosity, under what circumstances would you
>>>> want to gate them? Is there a use case for it?
>>> hmm, I don't see a use-case for gating these at runtime right now, simply
>>> because there should be a user for them all the time. (both aclks combined
>>> have at least 68 consumers on the rk3288 and a similar number on the
>>> previous socs)
>>>
>>> The only thing I could think of would be something suspend related - which
>>> we don't have yet. But then this would probably happen in the clock
>>> controller itself anyway in some late suspend-related action, so it could
>>> take into account them being defined as critical clocks.
>> I know Rockchip has some funky stuff planned for memory scaling too.
>> Perhaps Kever can comment whether these two clocks might need to be
>> disabled in that case?
> hmm looking at the core clock tree, I wouldn't think so.
>
> The only intersection between the ddr-clk, aclk_cpu and aclk_peri is the gpll
> which can be a source to both. But the ddr-clk is mainly sourced from the dpll
> anyway.
>
> In any case, turning off aclk_cpu/aclk_peri in this scenario wouldn't normally
> be possible anyway, as most of the time some pclk_* would be active anyway.
Basically, aclk_cpu/aclk_peri have very little chance to be gated during
run-time,
but both of then may be gated when system enter suspend mode.
For aclk_cpu, this clock supplies most of clocks in pd_bus actually,
some clocks not listed
as a module clock will be needed, like cpu I/D bus fetch
instruction/data from dram via
bus based on aclk_cpu. For this situation, can we use a dummy clock to
hold the
aclk_cpu not to be gated at run-time?
For aclk_peri, this clock is able to be gated run-time in theory,
although it's no use
in actual system, because we have many devices on this clock and at most
of the time
some of then would be active just as you have mentioned.
The system suspend is another scenario, and we tend to gate both of the
clock if possible,
can we do that if this patch is applied?
-Kever
>
>
>> In any case, this patch fixes a hang at boot when using the PWM driver
>> that just landed, so:
>>
>> Tested-by: Doug Anderson <dianders-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
> thanks
>
>
> Heiko
>
>
>
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 48+ messages in thread* [PATCH 1/4] clk: rockchip: protect critical clocks from getting disabled
@ 2014-08-11 10:22 ` Heiko Stübner
0 siblings, 0 replies; 48+ messages in thread
From: Heiko Stübner @ 2014-08-11 10:22 UTC (permalink / raw)
To: linux-arm-kernel
Hi Kever,
Am Montag, 11. August 2014, 18:03:33 schrieb Kever Yang:
> On 08/09/2014 06:20 AM, Heiko St?bner wrote:
> > Am Freitag, 8. August 2014, 14:58:11 schrieb Doug Anderson:
> >> Heiko,
> >>
> >> On Fri, Aug 1, 2014 at 1:15 AM, Heiko St?bner <heiko@sntech.de> wrote:
> >>> Am Donnerstag, 31. Juli 2014, 17:30:25 schrieb Mike Turquette:
> >>>> Quoting Heiko St?bner (2014-07-31 16:29:34)
> >>>>
> >>>>> Hi Mike,
> >>>>>
> >>>>> Am Donnerstag, 31. Juli 2014, 15:45:23 schrieb Mike Turquette:
> >>>>>> Quoting Heiko Stuebner (2014-07-29 12:12:05)
> >>>>>>
> >>>>>>> The clock-tree contains clocks that should never get disabled
> >>>>>>> automatically. One example are the base ACLKs, the base supplies
> >>>>>>> for
> >>>>>>> all
> >>>>>>> peripherals.
> >>>>>>>
> >>>>>>> Therefore add a structure similar to the sunxi clock-tree to
> >>>>>>> protect
> >>>>>>> these
> >>>>>>> special clocks from being disabled.
> >>>>>>>
> >>>>>>> Signed-off-by: Heiko Stuebner <heiko@sntech.de>
> >>>>>>> ---
> >>>>>>>
> >>>>>>> drivers/clk/rockchip/clk-rk3188.c | 7 +++++++
> >>>>>>> drivers/clk/rockchip/clk-rk3288.c | 7 +++++++
> >>>>>>> drivers/clk/rockchip/clk.c | 13 +++++++++++++
> >>>>>>> drivers/clk/rockchip/clk.h | 1 +
> >>>>>>> 4 files changed, 28 insertions(+)
> >>>>>>>
> >>>>>>> diff --git a/drivers/clk/rockchip/clk-rk3188.c
> >>>>>>> b/drivers/clk/rockchip/clk-rk3188.c index a83a6d8..5aef277 100644
> >>>>>>> --- a/drivers/clk/rockchip/clk-rk3188.c
> >>>>>>> +++ b/drivers/clk/rockchip/clk-rk3188.c
> >>>>>>> @@ -599,6 +599,11 @@ static struct rockchip_clk_branch
> >>>>>>> rk3188_clk_branches[] __initdata = {>
> >>>>>>>
> >>>>>>> GATE(ACLK_GPS, "aclk_gps", "aclk_peri", 0,
> >>>>>>> RK2928_CLKGATE_CON(8),
> >>>>>>> 13, GFLAGS),>
> >>>>>>>
> >>>>>>> };
> >>>>>>>
> >>>>>>> +static const char *rk3188_critical_clocks[] __initconst = {
> >>>>>>> + "aclk_cpu",
> >>>>>>> + "aclk_peri",
> >>>>>>
> >>>>>> I'm not against the idea of critical clocks, but I want to verify
> >>>>>> that
> >>>>>> there is no other driver out there that is a better fit for claiming
> >>>>>> these clks via clk_get and enabling them the normal way via
> >>>>>> clk_enable?
> >>>>>
> >>>>> In the clock hierarchy of Rockchip SoCs, both aclks listed here, are
> >>>>> sources for pclk and hclk, as well as sourcing some other peripheral
> >>>>> gates further below too. So from what I've seen from the clock
> >>>>> diagrams,
> >>>>> there is nothing that would claim these clocks directly, and it
> >>>>> wouldn't
> >>>>> also make any sense to let them get disabled as there will always be
> >>>>> something using them (for example the dram-controller).
> >>>>
> >>>> Sounds good. Just out of curiosity, under what circumstances would you
> >>>> want to gate them? Is there a use case for it?
> >>>
> >>> hmm, I don't see a use-case for gating these at runtime right now,
> >>> simply
> >>> because there should be a user for them all the time. (both aclks
> >>> combined
> >>> have at least 68 consumers on the rk3288 and a similar number on the
> >>> previous socs)
> >>>
> >>> The only thing I could think of would be something suspend related -
> >>> which
> >>> we don't have yet. But then this would probably happen in the clock
> >>> controller itself anyway in some late suspend-related action, so it
> >>> could
> >>> take into account them being defined as critical clocks.
> >>
> >> I know Rockchip has some funky stuff planned for memory scaling too.
> >> Perhaps Kever can comment whether these two clocks might need to be
> >> disabled in that case?
> >
> > hmm looking at the core clock tree, I wouldn't think so.
> >
> > The only intersection between the ddr-clk, aclk_cpu and aclk_peri is the
> > gpll which can be a source to both. But the ddr-clk is mainly sourced
> > from the dpll anyway.
> >
> > In any case, turning off aclk_cpu/aclk_peri in this scenario wouldn't
> > normally be possible anyway, as most of the time some pclk_* would be
> > active anyway.
> Basically, aclk_cpu/aclk_peri have very little chance to be gated during
> run-time,
> but both of then may be gated when system enter suspend mode.
>
> For aclk_cpu, this clock supplies most of clocks in pd_bus actually,
> some clocks not listed
> as a module clock will be needed, like cpu I/D bus fetch
> instruction/data from dram via
> bus based on aclk_cpu. For this situation, can we use a dummy clock to
> hold the
> aclk_cpu not to be gated at run-time?
>
> For aclk_peri, this clock is able to be gated run-time in theory,
> although it's no use
> in actual system, because we have many devices on this clock and at most
> of the time
> some of then would be active just as you have mentioned.
>
> The system suspend is another scenario, and we tend to gate both of the
> clock if possible,
> can we do that if this patch is applied?
as we will need suspend operations in the clock driver anyway [likely
something like the Samsung clk driver does], it shouldn't be a problem to lift
the hold on the critical clocks when suspending.
Heiko
>
> -Kever
>
> >> In any case, this patch fixes a hang at boot when using the PWM driver
> >> that just landed, so:
> >>
> >> Tested-by: Doug Anderson <dianders@chromium.org>
> >
> > thanks
> >
> >
> > Heiko
^ permalink raw reply [flat|nested] 48+ messages in thread* Re: [PATCH 1/4] clk: rockchip: protect critical clocks from getting disabled
@ 2014-08-11 10:22 ` Heiko Stübner
0 siblings, 0 replies; 48+ messages in thread
From: Heiko Stübner @ 2014-08-11 10:22 UTC (permalink / raw)
To: Kever Yang
Cc: Doug Anderson, Mike Turquette, Arnd Bergmann,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Eddie Cai,
Olof Johansson
Hi Kever,
Am Montag, 11. August 2014, 18:03:33 schrieb Kever Yang:
> On 08/09/2014 06:20 AM, Heiko Stübner wrote:
> > Am Freitag, 8. August 2014, 14:58:11 schrieb Doug Anderson:
> >> Heiko,
> >>
> >> On Fri, Aug 1, 2014 at 1:15 AM, Heiko Stübner <heiko-4mtYJXux2i+zQB+pC5nmwQ@public.gmane.org> wrote:
> >>> Am Donnerstag, 31. Juli 2014, 17:30:25 schrieb Mike Turquette:
> >>>> Quoting Heiko Stübner (2014-07-31 16:29:34)
> >>>>
> >>>>> Hi Mike,
> >>>>>
> >>>>> Am Donnerstag, 31. Juli 2014, 15:45:23 schrieb Mike Turquette:
> >>>>>> Quoting Heiko Stuebner (2014-07-29 12:12:05)
> >>>>>>
> >>>>>>> The clock-tree contains clocks that should never get disabled
> >>>>>>> automatically. One example are the base ACLKs, the base supplies
> >>>>>>> for
> >>>>>>> all
> >>>>>>> peripherals.
> >>>>>>>
> >>>>>>> Therefore add a structure similar to the sunxi clock-tree to
> >>>>>>> protect
> >>>>>>> these
> >>>>>>> special clocks from being disabled.
> >>>>>>>
> >>>>>>> Signed-off-by: Heiko Stuebner <heiko-4mtYJXux2i+zQB+pC5nmwQ@public.gmane.org>
> >>>>>>> ---
> >>>>>>>
> >>>>>>> drivers/clk/rockchip/clk-rk3188.c | 7 +++++++
> >>>>>>> drivers/clk/rockchip/clk-rk3288.c | 7 +++++++
> >>>>>>> drivers/clk/rockchip/clk.c | 13 +++++++++++++
> >>>>>>> drivers/clk/rockchip/clk.h | 1 +
> >>>>>>> 4 files changed, 28 insertions(+)
> >>>>>>>
> >>>>>>> diff --git a/drivers/clk/rockchip/clk-rk3188.c
> >>>>>>> b/drivers/clk/rockchip/clk-rk3188.c index a83a6d8..5aef277 100644
> >>>>>>> --- a/drivers/clk/rockchip/clk-rk3188.c
> >>>>>>> +++ b/drivers/clk/rockchip/clk-rk3188.c
> >>>>>>> @@ -599,6 +599,11 @@ static struct rockchip_clk_branch
> >>>>>>> rk3188_clk_branches[] __initdata = {>
> >>>>>>>
> >>>>>>> GATE(ACLK_GPS, "aclk_gps", "aclk_peri", 0,
> >>>>>>> RK2928_CLKGATE_CON(8),
> >>>>>>> 13, GFLAGS),>
> >>>>>>>
> >>>>>>> };
> >>>>>>>
> >>>>>>> +static const char *rk3188_critical_clocks[] __initconst = {
> >>>>>>> + "aclk_cpu",
> >>>>>>> + "aclk_peri",
> >>>>>>
> >>>>>> I'm not against the idea of critical clocks, but I want to verify
> >>>>>> that
> >>>>>> there is no other driver out there that is a better fit for claiming
> >>>>>> these clks via clk_get and enabling them the normal way via
> >>>>>> clk_enable?
> >>>>>
> >>>>> In the clock hierarchy of Rockchip SoCs, both aclks listed here, are
> >>>>> sources for pclk and hclk, as well as sourcing some other peripheral
> >>>>> gates further below too. So from what I've seen from the clock
> >>>>> diagrams,
> >>>>> there is nothing that would claim these clocks directly, and it
> >>>>> wouldn't
> >>>>> also make any sense to let them get disabled as there will always be
> >>>>> something using them (for example the dram-controller).
> >>>>
> >>>> Sounds good. Just out of curiosity, under what circumstances would you
> >>>> want to gate them? Is there a use case for it?
> >>>
> >>> hmm, I don't see a use-case for gating these at runtime right now,
> >>> simply
> >>> because there should be a user for them all the time. (both aclks
> >>> combined
> >>> have at least 68 consumers on the rk3288 and a similar number on the
> >>> previous socs)
> >>>
> >>> The only thing I could think of would be something suspend related -
> >>> which
> >>> we don't have yet. But then this would probably happen in the clock
> >>> controller itself anyway in some late suspend-related action, so it
> >>> could
> >>> take into account them being defined as critical clocks.
> >>
> >> I know Rockchip has some funky stuff planned for memory scaling too.
> >> Perhaps Kever can comment whether these two clocks might need to be
> >> disabled in that case?
> >
> > hmm looking at the core clock tree, I wouldn't think so.
> >
> > The only intersection between the ddr-clk, aclk_cpu and aclk_peri is the
> > gpll which can be a source to both. But the ddr-clk is mainly sourced
> > from the dpll anyway.
> >
> > In any case, turning off aclk_cpu/aclk_peri in this scenario wouldn't
> > normally be possible anyway, as most of the time some pclk_* would be
> > active anyway.
> Basically, aclk_cpu/aclk_peri have very little chance to be gated during
> run-time,
> but both of then may be gated when system enter suspend mode.
>
> For aclk_cpu, this clock supplies most of clocks in pd_bus actually,
> some clocks not listed
> as a module clock will be needed, like cpu I/D bus fetch
> instruction/data from dram via
> bus based on aclk_cpu. For this situation, can we use a dummy clock to
> hold the
> aclk_cpu not to be gated at run-time?
>
> For aclk_peri, this clock is able to be gated run-time in theory,
> although it's no use
> in actual system, because we have many devices on this clock and at most
> of the time
> some of then would be active just as you have mentioned.
>
> The system suspend is another scenario, and we tend to gate both of the
> clock if possible,
> can we do that if this patch is applied?
as we will need suspend operations in the clock driver anyway [likely
something like the Samsung clk driver does], it shouldn't be a problem to lift
the hold on the critical clocks when suspending.
Heiko
>
> -Kever
>
> >> In any case, this patch fixes a hang at boot when using the PWM driver
> >> that just landed, so:
> >>
> >> Tested-by: Doug Anderson <dianders-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
> >
> > thanks
> >
> >
> > Heiko
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 48+ messages in thread
* [PATCH 1/4] clk: rockchip: protect critical clocks from getting disabled
@ 2014-08-12 0:59 ` Kever Yang
0 siblings, 0 replies; 48+ messages in thread
From: Kever Yang @ 2014-08-12 0:59 UTC (permalink / raw)
To: linux-arm-kernel
Heiko,
On 07/30/2014 03:12 AM, Heiko Stuebner wrote:
> The clock-tree contains clocks that should never get disabled automatically.
> One example are the base ACLKs, the base supplies for all peripherals.
>
> Therefore add a structure similar to the sunxi clock-tree to protect these
> special clocks from being disabled.
>
> Signed-off-by: Heiko Stuebner <heiko@sntech.de>
> ---
> drivers/clk/rockchip/clk-rk3188.c | 7 +++++++
> drivers/clk/rockchip/clk-rk3288.c | 7 +++++++
> drivers/clk/rockchip/clk.c | 13 +++++++++++++
> drivers/clk/rockchip/clk.h | 1 +
> 4 files changed, 28 insertions(+)
>
> diff --git a/drivers/clk/rockchip/clk-rk3188.c b/drivers/clk/rockchip/clk-rk3188.c
> index a83a6d8..5aef277 100644
> --- a/drivers/clk/rockchip/clk-rk3188.c
> +++ b/drivers/clk/rockchip/clk-rk3188.c
> @@ -599,6 +599,11 @@ static struct rockchip_clk_branch rk3188_clk_branches[] __initdata = {
> GATE(ACLK_GPS, "aclk_gps", "aclk_peri", 0, RK2928_CLKGATE_CON(8), 13, GFLAGS),
> };
>
> +static const char *rk3188_critical_clocks[] __initconst = {
> + "aclk_cpu",
> + "aclk_peri",
> +};
> +
> static void __init rk3188_common_clk_init(struct device_node *np)
> {
> void __iomem *reg_base;
> @@ -628,6 +633,8 @@ static void __init rk3188_common_clk_init(struct device_node *np)
> RK3188_GRF_SOC_STATUS);
> rockchip_clk_register_branches(common_clk_branches,
> ARRAY_SIZE(common_clk_branches));
> + rockchip_clk_protect_critical(rk3188_critical_clocks,
> + ARRAY_SIZE(rk3188_critical_clocks));
>
> rockchip_register_softrst(np, 9, reg_base + RK2928_SOFTRST_CON(0),
> ROCKCHIP_SOFTRST_HIWORD_MASK);
> diff --git a/drivers/clk/rockchip/clk-rk3288.c b/drivers/clk/rockchip/clk-rk3288.c
> index 0d8c6c5..6c6f954 100644
> --- a/drivers/clk/rockchip/clk-rk3288.c
> +++ b/drivers/clk/rockchip/clk-rk3288.c
> @@ -680,6 +680,11 @@ static struct rockchip_clk_branch rk3288_clk_branches[] __initdata = {
> GATE(0, "pclk_isp_in", "ext_isp", 0, RK3288_CLKGATE_CON(16), 3, GFLAGS),
> };
>
> +static const char *rk3288_critical_clocks[] __initconst = {
> + "aclk_cpu",
> + "aclk_peri",
> +};
> +
> static void __init rk3288_clk_init(struct device_node *np)
> {
> void __iomem *reg_base;
> @@ -710,6 +715,8 @@ static void __init rk3288_clk_init(struct device_node *np)
> RK3288_GRF_SOC_STATUS);
> rockchip_clk_register_branches(rk3288_clk_branches,
> ARRAY_SIZE(rk3288_clk_branches));
> + rockchip_clk_protect_critical(rk3288_critical_clocks,
> + ARRAY_SIZE(rk3288_critical_clocks));
>
> rockchip_register_softrst(np, 9, reg_base + RK3288_SOFTRST_CON(0),
> ROCKCHIP_SOFTRST_HIWORD_MASK);
> diff --git a/drivers/clk/rockchip/clk.c b/drivers/clk/rockchip/clk.c
> index 278cf9d..9189f1b 100644
> --- a/drivers/clk/rockchip/clk.c
> +++ b/drivers/clk/rockchip/clk.c
> @@ -242,3 +242,16 @@ void __init rockchip_clk_register_branches(
> rockchip_clk_add_lookup(clk, list->id);
> }
> }
> +
> +void __init rockchip_clk_protect_critical(const char *clocks[], int nclocks)
> +{
> + int i;
> +
> + /* Protect the clocks that needs to stay on */
> + for (i = 0; i < nclocks; i++) {
> + struct clk *clk = __clk_lookup(clocks[i]);
> +
> + if (clk)
> + clk_prepare_enable(clk);
> + }
> +}
> diff --git a/drivers/clk/rockchip/clk.h b/drivers/clk/rockchip/clk.h
> index 887cbde..2b0bca1 100644
> --- a/drivers/clk/rockchip/clk.h
> +++ b/drivers/clk/rockchip/clk.h
> @@ -329,6 +329,7 @@ void rockchip_clk_register_branches(struct rockchip_clk_branch *clk_list,
> unsigned int nr_clk);
> void rockchip_clk_register_plls(struct rockchip_pll_clock *pll_list,
> unsigned int nr_pll, int grf_lock_offset);
> +void rockchip_clk_protect_critical(const char *clocks[], int nclocks);
>
> #define ROCKCHIP_SOFTRST_HIWORD_MASK BIT(0)
>
Tested-by: Kever Yang <kever.yang@rock-chips.com>
^ permalink raw reply [flat|nested] 48+ messages in thread* Re: [PATCH 1/4] clk: rockchip: protect critical clocks from getting disabled
@ 2014-08-12 0:59 ` Kever Yang
0 siblings, 0 replies; 48+ messages in thread
From: Kever Yang @ 2014-08-12 0:59 UTC (permalink / raw)
To: Heiko Stuebner, mturquette-QSEj5FYQhm4dnm+yROfE0A,
arm-DgEjT+Ai2ygdnm+yROfE0A,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
devicetree-u79uwXL29TY76Z2rM5mHXA,
dianders-F7+t8E8rja9g9hUCZPvPmw, cf-TNX95d0MmH7DzftRWevZcw
Heiko,
On 07/30/2014 03:12 AM, Heiko Stuebner wrote:
> The clock-tree contains clocks that should never get disabled automatically.
> One example are the base ACLKs, the base supplies for all peripherals.
>
> Therefore add a structure similar to the sunxi clock-tree to protect these
> special clocks from being disabled.
>
> Signed-off-by: Heiko Stuebner <heiko-4mtYJXux2i+zQB+pC5nmwQ@public.gmane.org>
> ---
> drivers/clk/rockchip/clk-rk3188.c | 7 +++++++
> drivers/clk/rockchip/clk-rk3288.c | 7 +++++++
> drivers/clk/rockchip/clk.c | 13 +++++++++++++
> drivers/clk/rockchip/clk.h | 1 +
> 4 files changed, 28 insertions(+)
>
> diff --git a/drivers/clk/rockchip/clk-rk3188.c b/drivers/clk/rockchip/clk-rk3188.c
> index a83a6d8..5aef277 100644
> --- a/drivers/clk/rockchip/clk-rk3188.c
> +++ b/drivers/clk/rockchip/clk-rk3188.c
> @@ -599,6 +599,11 @@ static struct rockchip_clk_branch rk3188_clk_branches[] __initdata = {
> GATE(ACLK_GPS, "aclk_gps", "aclk_peri", 0, RK2928_CLKGATE_CON(8), 13, GFLAGS),
> };
>
> +static const char *rk3188_critical_clocks[] __initconst = {
> + "aclk_cpu",
> + "aclk_peri",
> +};
> +
> static void __init rk3188_common_clk_init(struct device_node *np)
> {
> void __iomem *reg_base;
> @@ -628,6 +633,8 @@ static void __init rk3188_common_clk_init(struct device_node *np)
> RK3188_GRF_SOC_STATUS);
> rockchip_clk_register_branches(common_clk_branches,
> ARRAY_SIZE(common_clk_branches));
> + rockchip_clk_protect_critical(rk3188_critical_clocks,
> + ARRAY_SIZE(rk3188_critical_clocks));
>
> rockchip_register_softrst(np, 9, reg_base + RK2928_SOFTRST_CON(0),
> ROCKCHIP_SOFTRST_HIWORD_MASK);
> diff --git a/drivers/clk/rockchip/clk-rk3288.c b/drivers/clk/rockchip/clk-rk3288.c
> index 0d8c6c5..6c6f954 100644
> --- a/drivers/clk/rockchip/clk-rk3288.c
> +++ b/drivers/clk/rockchip/clk-rk3288.c
> @@ -680,6 +680,11 @@ static struct rockchip_clk_branch rk3288_clk_branches[] __initdata = {
> GATE(0, "pclk_isp_in", "ext_isp", 0, RK3288_CLKGATE_CON(16), 3, GFLAGS),
> };
>
> +static const char *rk3288_critical_clocks[] __initconst = {
> + "aclk_cpu",
> + "aclk_peri",
> +};
> +
> static void __init rk3288_clk_init(struct device_node *np)
> {
> void __iomem *reg_base;
> @@ -710,6 +715,8 @@ static void __init rk3288_clk_init(struct device_node *np)
> RK3288_GRF_SOC_STATUS);
> rockchip_clk_register_branches(rk3288_clk_branches,
> ARRAY_SIZE(rk3288_clk_branches));
> + rockchip_clk_protect_critical(rk3288_critical_clocks,
> + ARRAY_SIZE(rk3288_critical_clocks));
>
> rockchip_register_softrst(np, 9, reg_base + RK3288_SOFTRST_CON(0),
> ROCKCHIP_SOFTRST_HIWORD_MASK);
> diff --git a/drivers/clk/rockchip/clk.c b/drivers/clk/rockchip/clk.c
> index 278cf9d..9189f1b 100644
> --- a/drivers/clk/rockchip/clk.c
> +++ b/drivers/clk/rockchip/clk.c
> @@ -242,3 +242,16 @@ void __init rockchip_clk_register_branches(
> rockchip_clk_add_lookup(clk, list->id);
> }
> }
> +
> +void __init rockchip_clk_protect_critical(const char *clocks[], int nclocks)
> +{
> + int i;
> +
> + /* Protect the clocks that needs to stay on */
> + for (i = 0; i < nclocks; i++) {
> + struct clk *clk = __clk_lookup(clocks[i]);
> +
> + if (clk)
> + clk_prepare_enable(clk);
> + }
> +}
> diff --git a/drivers/clk/rockchip/clk.h b/drivers/clk/rockchip/clk.h
> index 887cbde..2b0bca1 100644
> --- a/drivers/clk/rockchip/clk.h
> +++ b/drivers/clk/rockchip/clk.h
> @@ -329,6 +329,7 @@ void rockchip_clk_register_branches(struct rockchip_clk_branch *clk_list,
> unsigned int nr_clk);
> void rockchip_clk_register_plls(struct rockchip_pll_clock *pll_list,
> unsigned int nr_pll, int grf_lock_offset);
> +void rockchip_clk_protect_critical(const char *clocks[], int nclocks);
>
> #define ROCKCHIP_SOFTRST_HIWORD_MASK BIT(0)
>
Tested-by: Kever Yang <kever.yang-TNX95d0MmH7DzftRWevZcw@public.gmane.org>
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 48+ messages in thread