From: kever.yang@rock-chips.com (Kever Yang)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 1/4] clk: rockchip: protect critical clocks from getting disabled
Date: Tue, 12 Aug 2014 08:59:41 +0800 [thread overview]
Message-ID: <53E966FD.4000904@rock-chips.com> (raw)
In-Reply-To: <1406661128-7614-2-git-send-email-heiko@sntech.de>
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>
WARNING: multiple messages have this Message-ID (diff)
From: Kever Yang <kever.yang-TNX95d0MmH7DzftRWevZcw@public.gmane.org>
To: Heiko Stuebner <heiko-4mtYJXux2i+zQB+pC5nmwQ@public.gmane.org>,
mturquette-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org,
arm-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
dianders-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org,
cf-TNX95d0MmH7DzftRWevZcw@public.gmane.org
Subject: Re: [PATCH 1/4] clk: rockchip: protect critical clocks from getting disabled
Date: Tue, 12 Aug 2014 08:59:41 +0800 [thread overview]
Message-ID: <53E966FD.4000904@rock-chips.com> (raw)
In-Reply-To: <1406661128-7614-2-git-send-email-heiko-4mtYJXux2i+zQB+pC5nmwQ@public.gmane.org>
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
next prev parent reply other threads:[~2014-08-12 0:59 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-29 19:12 [PATCH 0/4] ARM: rockchip: add dma support Heiko Stuebner
2014-07-29 19:12 ` Heiko Stuebner
2014-07-29 19:12 ` [PATCH 1/4] clk: rockchip: protect critical clocks from getting disabled Heiko Stuebner
2014-07-29 19:12 ` Heiko Stuebner
2014-07-31 22:45 ` Mike Turquette
2014-07-31 22:45 ` Mike Turquette
2014-07-31 23:29 ` Heiko Stübner
2014-07-31 23:29 ` Heiko Stübner
2014-08-01 0:30 ` Mike Turquette
2014-08-01 0:30 ` Mike Turquette
2014-08-01 8:15 ` Heiko Stübner
2014-08-01 8:15 ` Heiko Stübner
2014-08-08 21:58 ` Doug Anderson
2014-08-08 21:58 ` Doug Anderson
2014-08-08 22:20 ` Heiko Stübner
2014-08-08 22:20 ` Heiko Stübner
2014-08-11 10:03 ` Kever Yang
2014-08-11 10:03 ` Kever Yang
2014-08-11 10:22 ` Heiko Stübner
2014-08-11 10:22 ` Heiko Stübner
2014-08-12 0:59 ` Kever Yang [this message]
2014-08-12 0:59 ` Kever Yang
2014-07-29 19:12 ` [PATCH 2/4] ARM: rockchip: enable the AMBA bus Heiko Stuebner
2014-07-29 19:12 ` Heiko Stuebner
2014-08-11 3:35 ` Kever Yang
2014-08-11 3:35 ` Kever Yang
2014-08-11 7:50 ` Heiko Stübner
2014-08-11 7:50 ` Heiko Stübner
2014-08-11 16:19 ` Doug Anderson
2014-08-11 16:19 ` Doug Anderson
2014-08-12 1:00 ` Kever Yang
2014-08-12 1:00 ` Kever Yang
2014-07-29 19:12 ` [PATCH 3/4] ARM: dts: rockchip: add rk3288 dma controllers Heiko Stuebner
2014-07-29 19:12 ` Heiko Stuebner
2014-08-11 17:01 ` Doug Anderson
2014-08-11 17:01 ` Doug Anderson
2014-08-11 18:01 ` Heiko Stübner
2014-08-11 18:01 ` Heiko Stübner
2014-08-11 18:37 ` Andreas Färber
2014-08-11 18:37 ` Andreas Färber
2014-08-11 19:15 ` Heiko Stübner
2014-08-11 19:15 ` Heiko Stübner
2014-08-12 1:01 ` Kever Yang
2014-08-12 1:01 ` Kever Yang
2014-07-29 19:12 ` [PATCH 4/4] ARM: dts: rockchip: add rk3188 " Heiko Stuebner
2014-07-29 19:12 ` Heiko Stuebner
2014-07-29 19:55 ` Sergei Shtylyov
2014-07-29 19:55 ` Sergei Shtylyov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=53E966FD.4000904@rock-chips.com \
--to=kever.yang@rock-chips.com \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.