devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [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).