* [RESEND PATCHv2 0/3] Power-domain clk handling
@ 2014-07-08 4:54 Arun Kumar K
2014-07-08 4:54 ` [RESEND PATCHv2 1/3] ARM: EXYNOS: Add support for clock handling in power domain Arun Kumar K
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: Arun Kumar K @ 2014-07-08 4:54 UTC (permalink / raw)
To: linux-samsung-soc, devicetree
Cc: kgene.kim, t.figa, mark.rutland, pawel.moll, swarren, prathyush.k,
abrestic, shaik.ameer, arunkk.samsung
This patch series for clock handling in power domain is
re-send for merging after rebasing onto latest linux-samsung.git,
for-next branch.
Original series and discussion can be found here:
https://www.mail-archive.com/linux-samsung-soc@vger.kernel.org/msg31550.html
Arun Kumar K (2):
clk: exynos5420: Add IDs for clocks used in PD mfc
ARM: dts: Add clock property for mfc_pd in 5420
Prathyush K (1):
ARM: EXYNOS: Add support for clock handling in power domain
.../bindings/arm/exynos/power_domain.txt | 20 +++++++
arch/arm/boot/dts/exynos5420.dtsi | 3 +
arch/arm/mach-exynos/pm_domains.c | 61 +++++++++++++++++++-
drivers/clk/samsung/clk-exynos5420.c | 6 +-
include/dt-bindings/clock/exynos5420.h | 2 +
5 files changed, 89 insertions(+), 3 deletions(-)
--
1.7.9.5
^ permalink raw reply [flat|nested] 5+ messages in thread
* [RESEND PATCHv2 1/3] ARM: EXYNOS: Add support for clock handling in power domain
2014-07-08 4:54 [RESEND PATCHv2 0/3] Power-domain clk handling Arun Kumar K
@ 2014-07-08 4:54 ` Arun Kumar K
2014-07-08 4:54 ` [RESEND PATCHv2 2/3] clk: exynos5420: Add IDs for clocks used in PD mfc Arun Kumar K
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: Arun Kumar K @ 2014-07-08 4:54 UTC (permalink / raw)
To: linux-samsung-soc, devicetree
Cc: kgene.kim, t.figa, mark.rutland, pawel.moll, swarren, prathyush.k,
abrestic, shaik.ameer, arunkk.samsung
From: Prathyush K <prathyush.k@samsung.com>
While powering on/off a local powerdomain in exynos5 chipsets, the input
clocks to each device gets modified. This behaviour is based on the
SYSCLK_SYS_PWR_REG registers.
E.g. SYSCLK_MFC_SYS_PWR_REG = 0x0, the parent of input clock to MFC
(aclk333) gets modified to oscclk
= 0x1, no change in clocks.
The recommended value of SYSCLK_SYS_PWR_REG before power gating any
domain is 0x0. So we must also restore the clocks while powering on a
domain everytime.
This patch adds the framework for getting the required mux and parent clocks
through a power domain device node. With this patch, while powering off
a domain, parent is set to oscclk and while powering back on, its re-set
to the correct parent which is as per the recommended pd on/off
sequence.
Signed-off-by: Prathyush K <prathyush.k@samsung.com>
Signed-off-by: Andrew Bresticker <abrestic@chromium.org>
Signed-off-by: Arun Kumar K <arun.kk@samsung.com>
Signed-off-by: Shaik Ameer Basha <shaik.ameer@samsung.com>
Reviewed-by: Tomasz Figa <t.figa@samsung.com>
---
.../bindings/arm/exynos/power_domain.txt | 20 +++++++
arch/arm/mach-exynos/pm_domains.c | 61 +++++++++++++++++++-
2 files changed, 80 insertions(+), 1 deletion(-)
diff --git a/Documentation/devicetree/bindings/arm/exynos/power_domain.txt b/Documentation/devicetree/bindings/arm/exynos/power_domain.txt
index 5216b41..8b4f7b7f 100644
--- a/Documentation/devicetree/bindings/arm/exynos/power_domain.txt
+++ b/Documentation/devicetree/bindings/arm/exynos/power_domain.txt
@@ -9,6 +9,18 @@ Required Properties:
- reg: physical base address of the controller and length of memory mapped
region.
+Optional Properties:
+- clocks: List of clock handles. The parent clocks of the input clocks to the
+ devices in this power domain are set to oscclk before power gating
+ and restored back after powering on a domain. This is required for
+ all domains which are powered on and off and not required for unused
+ domains.
+- clock-names: The following clocks can be specified:
+ - oscclk: Oscillator clock.
+ - pclkN, clkN: Pairs of parent of input clock and input clock to the
+ devices in this power domain. Maximum of 4 pairs (N = 0 to 3)
+ are supported currently.
+
Node of a device using power domains must have a samsung,power-domain property
defined with a phandle to respective power domain.
@@ -19,6 +31,14 @@ Example:
reg = <0x10023C00 0x10>;
};
+ mfc_pd: power-domain@10044060 {
+ compatible = "samsung,exynos4210-pd";
+ reg = <0x10044060 0x20>;
+ clocks = <&clock CLK_FIN_PLL>, <&clock CLK_MOUT_SW_ACLK333>,
+ <&clock CLK_MOUT_USER_ACLK333>;
+ clock-names = "oscclk", "pclk0", "clk0";
+ };
+
Example of the node using power domain:
node {
diff --git a/arch/arm/mach-exynos/pm_domains.c b/arch/arm/mach-exynos/pm_domains.c
index bcd8dcf..41f064b 100644
--- a/arch/arm/mach-exynos/pm_domains.c
+++ b/arch/arm/mach-exynos/pm_domains.c
@@ -17,6 +17,7 @@
#include <linux/err.h>
#include <linux/slab.h>
#include <linux/pm_domain.h>
+#include <linux/clk.h>
#include <linux/delay.h>
#include <linux/of_address.h>
#include <linux/of_platform.h>
@@ -24,6 +25,8 @@
#define INT_LOCAL_PWR_EN 0x7
+#define MAX_CLK_PER_DOMAIN 4
+
/*
* Exynos specific wrapper around the generic power domain
*/
@@ -32,6 +35,9 @@ struct exynos_pm_domain {
char const *name;
bool is_off;
struct generic_pm_domain pd;
+ struct clk *oscclk;
+ struct clk *clk[MAX_CLK_PER_DOMAIN];
+ struct clk *pclk[MAX_CLK_PER_DOMAIN];
};
static int exynos_pd_power(struct generic_pm_domain *domain, bool power_on)
@@ -44,6 +50,19 @@ static int exynos_pd_power(struct generic_pm_domain *domain, bool power_on)
pd = container_of(domain, struct exynos_pm_domain, pd);
base = pd->base;
+ /* Set oscclk before powering off a domain*/
+ if (!power_on) {
+ int i;
+
+ for (i = 0; i < MAX_CLK_PER_DOMAIN; i++) {
+ if (IS_ERR(pd->clk[i]))
+ break;
+ if (clk_set_parent(pd->clk[i], pd->oscclk))
+ pr_err("%s: error setting oscclk as parent to clock %d\n",
+ pd->name, i);
+ }
+ }
+
pwr = power_on ? INT_LOCAL_PWR_EN : 0;
__raw_writel(pwr, base);
@@ -60,6 +79,20 @@ static int exynos_pd_power(struct generic_pm_domain *domain, bool power_on)
cpu_relax();
usleep_range(80, 100);
}
+
+ /* Restore clocks after powering on a domain*/
+ if (power_on) {
+ int i;
+
+ for (i = 0; i < MAX_CLK_PER_DOMAIN; i++) {
+ if (IS_ERR(pd->clk[i]))
+ break;
+ if (clk_set_parent(pd->clk[i], pd->pclk[i]))
+ pr_err("%s: error setting parent to clock%d\n",
+ pd->name, i);
+ }
+ }
+
return 0;
}
@@ -152,9 +185,11 @@ static __init int exynos4_pm_init_power_domain(void)
for_each_compatible_node(np, NULL, "samsung,exynos4210-pd") {
struct exynos_pm_domain *pd;
- int on;
+ int on, i;
+ struct device *dev;
pdev = of_find_device_by_node(np);
+ dev = &pdev->dev;
pd = kzalloc(sizeof(*pd), GFP_KERNEL);
if (!pd) {
@@ -170,6 +205,30 @@ static __init int exynos4_pm_init_power_domain(void)
pd->pd.power_on = exynos_pd_power_on;
pd->pd.of_node = np;
+ pd->oscclk = clk_get(dev, "oscclk");
+ if (IS_ERR(pd->oscclk))
+ goto no_clk;
+
+ for (i = 0; i < MAX_CLK_PER_DOMAIN; i++) {
+ char clk_name[8];
+
+ snprintf(clk_name, sizeof(clk_name), "clk%d", i);
+ pd->clk[i] = clk_get(dev, clk_name);
+ if (IS_ERR(pd->clk[i]))
+ break;
+ snprintf(clk_name, sizeof(clk_name), "pclk%d", i);
+ pd->pclk[i] = clk_get(dev, clk_name);
+ if (IS_ERR(pd->pclk[i])) {
+ clk_put(pd->clk[i]);
+ pd->clk[i] = ERR_PTR(-EINVAL);
+ break;
+ }
+ }
+
+ if (IS_ERR(pd->clk[0]))
+ clk_put(pd->oscclk);
+
+no_clk:
platform_set_drvdata(pdev, pd);
on = __raw_readl(pd->base + 0x4) & INT_LOCAL_PWR_EN;
--
1.7.9.5
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [RESEND PATCHv2 2/3] clk: exynos5420: Add IDs for clocks used in PD mfc
2014-07-08 4:54 [RESEND PATCHv2 0/3] Power-domain clk handling Arun Kumar K
2014-07-08 4:54 ` [RESEND PATCHv2 1/3] ARM: EXYNOS: Add support for clock handling in power domain Arun Kumar K
@ 2014-07-08 4:54 ` Arun Kumar K
2014-07-08 4:54 ` [RESEND PATCHv2 3/3] ARM: dts: Add clock property for mfc_pd in 5420 Arun Kumar K
2014-07-10 13:26 ` [RESEND PATCHv2 0/3] Power-domain clk handling Kukjin Kim
3 siblings, 0 replies; 5+ messages in thread
From: Arun Kumar K @ 2014-07-08 4:54 UTC (permalink / raw)
To: linux-samsung-soc, devicetree
Cc: kgene.kim, t.figa, mark.rutland, pawel.moll, swarren, prathyush.k,
abrestic, shaik.ameer, arunkk.samsung
Adds IDs for MUX clocks to be used by power domain for MFC
for doing re-parenting while pd on/off.
Signed-off-by: Arun Kumar K <arun.kk@samsung.com>
Signed-off-by: Shaik Ameer Basha <shaik.ameer@samsung.com>
Acked-by: Tomasz Figa <t.figa@samsung.com>
---
drivers/clk/samsung/clk-exynos5420.c | 6 ++++--
include/dt-bindings/clock/exynos5420.h | 2 ++
2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/drivers/clk/samsung/clk-exynos5420.c b/drivers/clk/samsung/clk-exynos5420.c
index 9d7d7ee..f74f882f 100644
--- a/drivers/clk/samsung/clk-exynos5420.c
+++ b/drivers/clk/samsung/clk-exynos5420.c
@@ -631,7 +631,8 @@ static struct samsung_mux_clock exynos5x_mux_clks[] __initdata = {
SRC_TOP4, 16, 1),
MUX(0, "mout_user_aclk266", mout_user_aclk266_p, SRC_TOP4, 20, 1),
MUX(0, "mout_user_aclk166", mout_user_aclk166_p, SRC_TOP4, 24, 1),
- MUX(0, "mout_user_aclk333", mout_user_aclk333_p, SRC_TOP4, 28, 1),
+ MUX(CLK_MOUT_USER_ACLK333, "mout_user_aclk333", mout_user_aclk333_p,
+ SRC_TOP4, 28, 1),
MUX(0, "mout_user_aclk400_disp1", mout_user_aclk400_disp1_p,
SRC_TOP5, 0, 1),
@@ -684,7 +685,8 @@ static struct samsung_mux_clock exynos5x_mux_clks[] __initdata = {
SRC_TOP11, 12, 1),
MUX(0, "mout_sw_aclk266", mout_sw_aclk266_p, SRC_TOP11, 20, 1),
MUX(0, "mout_sw_aclk166", mout_sw_aclk166_p, SRC_TOP11, 24, 1),
- MUX(0, "mout_sw_aclk333", mout_sw_aclk333_p, SRC_TOP11, 28, 1),
+ MUX(CLK_MOUT_SW_ACLK333, "mout_sw_aclk333", mout_sw_aclk333_p,
+ SRC_TOP11, 28, 1),
MUX(0, "mout_sw_aclk400_disp1", mout_sw_aclk400_disp1_p,
SRC_TOP12, 4, 1),
diff --git a/include/dt-bindings/clock/exynos5420.h b/include/dt-bindings/clock/exynos5420.h
index 97dcb89..3fc08ff 100644
--- a/include/dt-bindings/clock/exynos5420.h
+++ b/include/dt-bindings/clock/exynos5420.h
@@ -203,6 +203,8 @@
#define CLK_MOUT_G3D 641
#define CLK_MOUT_VPLL 642
#define CLK_MOUT_MAUDIO0 643
+#define CLK_MOUT_USER_ACLK333 644
+#define CLK_MOUT_SW_ACLK333 645
/* divider clocks */
#define CLK_DOUT_PIXEL 768
--
1.7.9.5
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [RESEND PATCHv2 3/3] ARM: dts: Add clock property for mfc_pd in 5420
2014-07-08 4:54 [RESEND PATCHv2 0/3] Power-domain clk handling Arun Kumar K
2014-07-08 4:54 ` [RESEND PATCHv2 1/3] ARM: EXYNOS: Add support for clock handling in power domain Arun Kumar K
2014-07-08 4:54 ` [RESEND PATCHv2 2/3] clk: exynos5420: Add IDs for clocks used in PD mfc Arun Kumar K
@ 2014-07-08 4:54 ` Arun Kumar K
2014-07-10 13:26 ` [RESEND PATCHv2 0/3] Power-domain clk handling Kukjin Kim
3 siblings, 0 replies; 5+ messages in thread
From: Arun Kumar K @ 2014-07-08 4:54 UTC (permalink / raw)
To: linux-samsung-soc, devicetree
Cc: kgene.kim, t.figa, mark.rutland, pawel.moll, swarren, prathyush.k,
abrestic, shaik.ameer, arunkk.samsung
Adding the optional clock property for the mfc_pd for
handling the re-parenting while pd on/off.
Signed-off-by: Arun Kumar K <arun.kk@samsung.com>
Signed-off-by: Shaik Ameer Basha <shaik.ameer@samsung.com>
Reviewed-by: Tomasz Figa <t.figa@samsung.com>
---
arch/arm/boot/dts/exynos5420.dtsi | 3 +++
1 file changed, 3 insertions(+)
diff --git a/arch/arm/boot/dts/exynos5420.dtsi b/arch/arm/boot/dts/exynos5420.dtsi
index 79e9119..1595722 100644
--- a/arch/arm/boot/dts/exynos5420.dtsi
+++ b/arch/arm/boot/dts/exynos5420.dtsi
@@ -260,6 +260,9 @@
mfc_pd: power-domain@10044060 {
compatible = "samsung,exynos4210-pd";
reg = <0x10044060 0x20>;
+ clocks = <&clock CLK_FIN_PLL>, <&clock CLK_MOUT_SW_ACLK333>,
+ <&clock CLK_MOUT_USER_ACLK333>;
+ clock-names = "oscclk", "pclk0", "clk0";
};
disp_pd: power-domain@100440C0 {
--
1.7.9.5
^ permalink raw reply related [flat|nested] 5+ messages in thread
* RE: [RESEND PATCHv2 0/3] Power-domain clk handling
2014-07-08 4:54 [RESEND PATCHv2 0/3] Power-domain clk handling Arun Kumar K
` (2 preceding siblings ...)
2014-07-08 4:54 ` [RESEND PATCHv2 3/3] ARM: dts: Add clock property for mfc_pd in 5420 Arun Kumar K
@ 2014-07-10 13:26 ` Kukjin Kim
3 siblings, 0 replies; 5+ messages in thread
From: Kukjin Kim @ 2014-07-10 13:26 UTC (permalink / raw)
To: 'Arun Kumar K', linux-samsung-soc, devicetree
Cc: t.figa, mark.rutland, pawel.moll, swarren, prathyush.k, abrestic,
shaik.ameer, arunkk.samsung
Arun Kumar K wrote:
>
> This patch series for clock handling in power domain is
> re-send for merging after rebasing onto latest linux-samsung.git,
> for-next branch.
> Original series and discussion can be found here:
> https://www.mail-archive.com/linux-samsung-soc@vger.kernel.org/msg31550.html
>
> Arun Kumar K (2):
> clk: exynos5420: Add IDs for clocks used in PD mfc
> ARM: dts: Add clock property for mfc_pd in 5420
>
> Prathyush K (1):
> ARM: EXYNOS: Add support for clock handling in power domain
>
> .../bindings/arm/exynos/power_domain.txt | 20 +++++++
> arch/arm/boot/dts/exynos5420.dtsi | 3 +
> arch/arm/mach-exynos/pm_domains.c | 61 +++++++++++++++++++-
> drivers/clk/samsung/clk-exynos5420.c | 6 +-
> include/dt-bindings/clock/exynos5420.h | 2 +
> 5 files changed, 89 insertions(+), 3 deletions(-)
>
> --
> 1.7.9.5
Yeah, this is required now because regarding clock registers are also powered
down during pd-off on some exynos SoCs as you mentioned. Just note that you
know the registers are moved into pd related register on latest exynos SoC's
anyway.
OK, I will apply into fixes for 3.16.
Thanks,
Kukjin
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2014-07-10 13:26 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-07-08 4:54 [RESEND PATCHv2 0/3] Power-domain clk handling Arun Kumar K
2014-07-08 4:54 ` [RESEND PATCHv2 1/3] ARM: EXYNOS: Add support for clock handling in power domain Arun Kumar K
2014-07-08 4:54 ` [RESEND PATCHv2 2/3] clk: exynos5420: Add IDs for clocks used in PD mfc Arun Kumar K
2014-07-08 4:54 ` [RESEND PATCHv2 3/3] ARM: dts: Add clock property for mfc_pd in 5420 Arun Kumar K
2014-07-10 13:26 ` [RESEND PATCHv2 0/3] Power-domain clk handling Kukjin Kim
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).