diff mbox

[v3,08/13] ARM: shmobile: R-Mobile: Store SYSC base address in rmobile_pm_domain

Message ID 1411662520-22795-9-git-send-email-geert+renesas@glider.be (mailing list archive)
State Not Applicable, archived
Headers show

Commit Message

Geert Uytterhoeven Sept. 25, 2014, 4:28 p.m. UTC
Replace the hardcoded addresses for accessing the SYSC PM domain
registers by register offsets, relative to the SYSC base address stored
in struct rmobile_pm_domain.

In the future, the SYSC base address will come from DT.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
v3:
  - No changes
v2:
  - No changes

 arch/arm/mach-shmobile/pm-r8a7740.c | 14 ++++++++++++++
 arch/arm/mach-shmobile/pm-rmobile.c | 24 +++++++++++++-----------
 arch/arm/mach-shmobile/pm-rmobile.h |  1 +
 arch/arm/mach-shmobile/pm-sh7372.c  | 11 +++++++++++
 4 files changed, 39 insertions(+), 11 deletions(-)

Comments

Ulf Hansson Sept. 26, 2014, 8:47 a.m. UTC | #1
On 25 September 2014 18:28, Geert Uytterhoeven <geert+renesas@glider.be> wrote:
> Replace the hardcoded addresses for accessing the SYSC PM domain
> registers by register offsets, relative to the SYSC base address stored
> in struct rmobile_pm_domain.
>
> In the future, the SYSC base address will come from DT.
>
> Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>

Reviewed-by: Ulf Hansson <ulf.hansson@linaro.org>

> ---
> v3:
>   - No changes
> v2:
>   - No changes
>
>  arch/arm/mach-shmobile/pm-r8a7740.c | 14 ++++++++++++++
>  arch/arm/mach-shmobile/pm-rmobile.c | 24 +++++++++++++-----------
>  arch/arm/mach-shmobile/pm-rmobile.h |  1 +
>  arch/arm/mach-shmobile/pm-sh7372.c  | 11 +++++++++++
>  4 files changed, 39 insertions(+), 11 deletions(-)
>
> diff --git a/arch/arm/mach-shmobile/pm-r8a7740.c b/arch/arm/mach-shmobile/pm-r8a7740.c
> index 41e61f1b5d44f00d..f92e64fd91de5631 100644
> --- a/arch/arm/mach-shmobile/pm-r8a7740.c
> +++ b/arch/arm/mach-shmobile/pm-r8a7740.c
> @@ -9,10 +9,14 @@
>   * for more details.
>   */
>  #include <linux/console.h>
> +#include <linux/io.h>
>  #include <linux/suspend.h>
> +
>  #include "common.h"
>  #include "pm-rmobile.h"
>
> +#define SYSC_BASE      IOMEM(0xe6180000)
> +
>  #if defined(CONFIG_PM) && !defined(CONFIG_ARCH_MULTIPLATFORM)
>  static int r8a7740_pd_a3sm_suspend(void)
>  {
> @@ -35,39 +39,49 @@ static int r8a7740_pd_a3sp_suspend(void)
>  static struct rmobile_pm_domain r8a7740_pm_domains[] = {
>         {
>                 .genpd.name     = "A4LC",
> +               .base           = SYSC_BASE,
>                 .bit_shift      = 1,
>         }, {
>                 .genpd.name     = "A4MP",
> +               .base           = SYSC_BASE,
>                 .bit_shift      = 2,
>         }, {
>                 .genpd.name     = "D4",
> +               .base           = SYSC_BASE,
>                 .bit_shift      = 3,
>         }, {
>                 .genpd.name     = "A4R",
> +               .base           = SYSC_BASE,
>                 .bit_shift      = 5,
>         }, {
>                 .genpd.name     = "A3RV",
> +               .base           = SYSC_BASE,
>                 .bit_shift      = 6,
>         }, {
>                 .genpd.name     = "A4S",
> +               .base           = SYSC_BASE,
>                 .bit_shift      = 10,
>                 .no_debug       = true,
>         }, {
>                 .genpd.name     = "A3SP",
> +               .base           = SYSC_BASE,
>                 .bit_shift      = 11,
>                 .gov            = &pm_domain_always_on_gov,
>                 .no_debug       = true,
>                 .suspend        = r8a7740_pd_a3sp_suspend,
>         }, {
>                 .genpd.name     = "A3SM",
> +               .base           = SYSC_BASE,
>                 .bit_shift      = 12,
>                 .gov            = &pm_domain_always_on_gov,
>                 .suspend        = r8a7740_pd_a3sm_suspend,
>         }, {
>                 .genpd.name     = "A3SG",
> +               .base           = SYSC_BASE,
>                 .bit_shift      = 13,
>         }, {
>                 .genpd.name     = "A4SU",
> +               .base           = SYSC_BASE,
>                 .bit_shift      = 20,
>         },
>  };
> diff --git a/arch/arm/mach-shmobile/pm-rmobile.c b/arch/arm/mach-shmobile/pm-rmobile.c
> index ae846dfcd69293f7..8b876fcf7d0fc2ba 100644
> --- a/arch/arm/mach-shmobile/pm-rmobile.c
> +++ b/arch/arm/mach-shmobile/pm-rmobile.c
> @@ -20,9 +20,9 @@
>  #include "pm-rmobile.h"
>
>  /* SYSC */
> -#define SPDCR          IOMEM(0xe6180008)
> -#define SWUCR          IOMEM(0xe6180014)
> -#define PSTR           IOMEM(0xe6180080)
> +#define SPDCR  0x08    /* SYS Power Down Control Register */
> +#define SWUCR  0x14    /* SYS Wakeup Control Register */
> +#define PSTR   0x80    /* Power Status Register */
>
>  #define PSTR_RETRIES   100
>  #define PSTR_DELAY_US  10
> @@ -39,12 +39,12 @@ static int rmobile_pd_power_down(struct generic_pm_domain *genpd)
>                         return ret;
>         }
>
> -       if (__raw_readl(PSTR) & mask) {
> +       if (__raw_readl(rmobile_pd->base + PSTR) & mask) {
>                 unsigned int retry_count;
> -               __raw_writel(mask, SPDCR);
> +               __raw_writel(mask, rmobile_pd->base + SPDCR);
>
>                 for (retry_count = PSTR_RETRIES; retry_count; retry_count--) {
> -                       if (!(__raw_readl(SPDCR) & mask))
> +                       if (!(__raw_readl(rmobile_pd->base + SPDCR) & mask))
>                                 break;
>                         cpu_relax();
>                 }
> @@ -52,7 +52,8 @@ static int rmobile_pd_power_down(struct generic_pm_domain *genpd)
>
>         if (!rmobile_pd->no_debug)
>                 pr_debug("%s: Power off, 0x%08x -> PSTR = 0x%08x\n",
> -                        genpd->name, mask, __raw_readl(PSTR));
> +                        genpd->name, mask,
> +                        __raw_readl(rmobile_pd->base + PSTR));
>
>         return 0;
>  }
> @@ -64,13 +65,13 @@ static int __rmobile_pd_power_up(struct rmobile_pm_domain *rmobile_pd,
>         unsigned int retry_count;
>         int ret = 0;
>
> -       if (__raw_readl(PSTR) & mask)
> +       if (__raw_readl(rmobile_pd->base + PSTR) & mask)
>                 goto out;
>
> -       __raw_writel(mask, SWUCR);
> +       __raw_writel(mask, rmobile_pd->base + SWUCR);
>
>         for (retry_count = 2 * PSTR_RETRIES; retry_count; retry_count--) {
> -               if (!(__raw_readl(SWUCR) & mask))
> +               if (!(__raw_readl(rmobile_pd->base + SWUCR) & mask))
>                         break;
>                 if (retry_count > PSTR_RETRIES)
>                         udelay(PSTR_DELAY_US);
> @@ -82,7 +83,8 @@ static int __rmobile_pd_power_up(struct rmobile_pm_domain *rmobile_pd,
>
>         if (!rmobile_pd->no_debug)
>                 pr_debug("%s: Power on, 0x%08x -> PSTR = 0x%08x\n",
> -                        rmobile_pd->genpd.name, mask, __raw_readl(PSTR));
> +                        rmobile_pd->genpd.name, mask,
> +                        __raw_readl(rmobile_pd->base + PSTR));
>
>  out:
>         if (ret == 0 && rmobile_pd->resume && do_resume)
> diff --git a/arch/arm/mach-shmobile/pm-rmobile.h b/arch/arm/mach-shmobile/pm-rmobile.h
> index 8f66b343162b0411..0602130bb260c31d 100644
> --- a/arch/arm/mach-shmobile/pm-rmobile.h
> +++ b/arch/arm/mach-shmobile/pm-rmobile.h
> @@ -21,6 +21,7 @@ struct rmobile_pm_domain {
>         struct dev_power_governor *gov;
>         int (*suspend)(void);
>         void (*resume)(void);
> +       void __iomem *base;
>         unsigned int bit_shift;
>         bool no_debug;
>  };
> diff --git a/arch/arm/mach-shmobile/pm-sh7372.c b/arch/arm/mach-shmobile/pm-sh7372.c
> index 7e5c2676c48902f1..7181a280b3b541af 100644
> --- a/arch/arm/mach-shmobile/pm-sh7372.c
> +++ b/arch/arm/mach-shmobile/pm-sh7372.c
> @@ -45,6 +45,8 @@
>  #define PLLC01STPCR IOMEM(0xe61500c8)
>
>  /* SYSC */
> +#define SYSC_BASE IOMEM(0xe6180000)
> +
>  #define SBAR IOMEM(0xe6180020)
>  #define WUPRMSK IOMEM(0xe6180028)
>  #define WUPSMSK IOMEM(0xe618002c)
> @@ -118,24 +120,28 @@ static struct rmobile_pm_domain sh7372_pm_domains[] = {
>                 .genpd.name = "A4LC",
>                 .genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
>                 .genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
> +               .base = SYSC_BASE,
>                 .bit_shift = 1,
>         },
>         {
>                 .genpd.name = "A4MP",
>                 .genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
>                 .genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
> +               .base = SYSC_BASE,
>                 .bit_shift = 2,
>         },
>         {
>                 .genpd.name = "D4",
>                 .genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
>                 .genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
> +               .base = SYSC_BASE,
>                 .bit_shift = 3,
>         },
>         {
>                 .genpd.name = "A4R",
>                 .genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
>                 .genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
> +               .base = SYSC_BASE,
>                 .bit_shift = 5,
>                 .suspend = sh7372_a4r_pd_suspend,
>                 .resume = sh7372_intcs_resume,
> @@ -144,18 +150,21 @@ static struct rmobile_pm_domain sh7372_pm_domains[] = {
>                 .genpd.name = "A3RV",
>                 .genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
>                 .genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
> +               .base = SYSC_BASE,
>                 .bit_shift = 6,
>         },
>         {
>                 .genpd.name = "A3RI",
>                 .genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
>                 .genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
> +               .base = SYSC_BASE,
>                 .bit_shift = 8,
>         },
>         {
>                 .genpd.name = "A4S",
>                 .genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
>                 .genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
> +               .base = SYSC_BASE,
>                 .bit_shift = 10,
>                 .gov = &pm_domain_always_on_gov,
>                 .no_debug = true,
> @@ -166,6 +175,7 @@ static struct rmobile_pm_domain sh7372_pm_domains[] = {
>                 .genpd.name = "A3SP",
>                 .genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
>                 .genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
> +               .base = SYSC_BASE,
>                 .bit_shift = 11,
>                 .gov = &pm_domain_always_on_gov,
>                 .no_debug = true,
> @@ -175,6 +185,7 @@ static struct rmobile_pm_domain sh7372_pm_domains[] = {
>                 .genpd.name = "A3SG",
>                 .genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
>                 .genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
> +               .base = SYSC_BASE,
>                 .bit_shift = 13,
>         },
>  };
> --
> 1.9.1
>
--
To unsubscribe from this list: send the line "unsubscribe linux-pm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/arch/arm/mach-shmobile/pm-r8a7740.c b/arch/arm/mach-shmobile/pm-r8a7740.c
index 41e61f1b5d44f00d..f92e64fd91de5631 100644
--- a/arch/arm/mach-shmobile/pm-r8a7740.c
+++ b/arch/arm/mach-shmobile/pm-r8a7740.c
@@ -9,10 +9,14 @@ 
  * for more details.
  */
 #include <linux/console.h>
+#include <linux/io.h>
 #include <linux/suspend.h>
+
 #include "common.h"
 #include "pm-rmobile.h"
 
+#define SYSC_BASE	IOMEM(0xe6180000)
+
 #if defined(CONFIG_PM) && !defined(CONFIG_ARCH_MULTIPLATFORM)
 static int r8a7740_pd_a3sm_suspend(void)
 {
@@ -35,39 +39,49 @@  static int r8a7740_pd_a3sp_suspend(void)
 static struct rmobile_pm_domain r8a7740_pm_domains[] = {
 	{
 		.genpd.name	= "A4LC",
+		.base		= SYSC_BASE,
 		.bit_shift	= 1,
 	}, {
 		.genpd.name	= "A4MP",
+		.base		= SYSC_BASE,
 		.bit_shift	= 2,
 	}, {
 		.genpd.name	= "D4",
+		.base		= SYSC_BASE,
 		.bit_shift	= 3,
 	}, {
 		.genpd.name	= "A4R",
+		.base		= SYSC_BASE,
 		.bit_shift	= 5,
 	}, {
 		.genpd.name	= "A3RV",
+		.base		= SYSC_BASE,
 		.bit_shift	= 6,
 	}, {
 		.genpd.name	= "A4S",
+		.base		= SYSC_BASE,
 		.bit_shift	= 10,
 		.no_debug	= true,
 	}, {
 		.genpd.name	= "A3SP",
+		.base		= SYSC_BASE,
 		.bit_shift	= 11,
 		.gov		= &pm_domain_always_on_gov,
 		.no_debug	= true,
 		.suspend	= r8a7740_pd_a3sp_suspend,
 	}, {
 		.genpd.name	= "A3SM",
+		.base		= SYSC_BASE,
 		.bit_shift	= 12,
 		.gov		= &pm_domain_always_on_gov,
 		.suspend	= r8a7740_pd_a3sm_suspend,
 	}, {
 		.genpd.name	= "A3SG",
+		.base		= SYSC_BASE,
 		.bit_shift	= 13,
 	}, {
 		.genpd.name	= "A4SU",
+		.base		= SYSC_BASE,
 		.bit_shift	= 20,
 	},
 };
diff --git a/arch/arm/mach-shmobile/pm-rmobile.c b/arch/arm/mach-shmobile/pm-rmobile.c
index ae846dfcd69293f7..8b876fcf7d0fc2ba 100644
--- a/arch/arm/mach-shmobile/pm-rmobile.c
+++ b/arch/arm/mach-shmobile/pm-rmobile.c
@@ -20,9 +20,9 @@ 
 #include "pm-rmobile.h"
 
 /* SYSC */
-#define SPDCR		IOMEM(0xe6180008)
-#define SWUCR		IOMEM(0xe6180014)
-#define PSTR		IOMEM(0xe6180080)
+#define SPDCR	0x08	/* SYS Power Down Control Register */
+#define SWUCR	0x14	/* SYS Wakeup Control Register */
+#define PSTR	0x80	/* Power Status Register */
 
 #define PSTR_RETRIES	100
 #define PSTR_DELAY_US	10
@@ -39,12 +39,12 @@  static int rmobile_pd_power_down(struct generic_pm_domain *genpd)
 			return ret;
 	}
 
-	if (__raw_readl(PSTR) & mask) {
+	if (__raw_readl(rmobile_pd->base + PSTR) & mask) {
 		unsigned int retry_count;
-		__raw_writel(mask, SPDCR);
+		__raw_writel(mask, rmobile_pd->base + SPDCR);
 
 		for (retry_count = PSTR_RETRIES; retry_count; retry_count--) {
-			if (!(__raw_readl(SPDCR) & mask))
+			if (!(__raw_readl(rmobile_pd->base + SPDCR) & mask))
 				break;
 			cpu_relax();
 		}
@@ -52,7 +52,8 @@  static int rmobile_pd_power_down(struct generic_pm_domain *genpd)
 
 	if (!rmobile_pd->no_debug)
 		pr_debug("%s: Power off, 0x%08x -> PSTR = 0x%08x\n",
-			 genpd->name, mask, __raw_readl(PSTR));
+			 genpd->name, mask,
+			 __raw_readl(rmobile_pd->base + PSTR));
 
 	return 0;
 }
@@ -64,13 +65,13 @@  static int __rmobile_pd_power_up(struct rmobile_pm_domain *rmobile_pd,
 	unsigned int retry_count;
 	int ret = 0;
 
-	if (__raw_readl(PSTR) & mask)
+	if (__raw_readl(rmobile_pd->base + PSTR) & mask)
 		goto out;
 
-	__raw_writel(mask, SWUCR);
+	__raw_writel(mask, rmobile_pd->base + SWUCR);
 
 	for (retry_count = 2 * PSTR_RETRIES; retry_count; retry_count--) {
-		if (!(__raw_readl(SWUCR) & mask))
+		if (!(__raw_readl(rmobile_pd->base + SWUCR) & mask))
 			break;
 		if (retry_count > PSTR_RETRIES)
 			udelay(PSTR_DELAY_US);
@@ -82,7 +83,8 @@  static int __rmobile_pd_power_up(struct rmobile_pm_domain *rmobile_pd,
 
 	if (!rmobile_pd->no_debug)
 		pr_debug("%s: Power on, 0x%08x -> PSTR = 0x%08x\n",
-			 rmobile_pd->genpd.name, mask, __raw_readl(PSTR));
+			 rmobile_pd->genpd.name, mask,
+			 __raw_readl(rmobile_pd->base + PSTR));
 
 out:
 	if (ret == 0 && rmobile_pd->resume && do_resume)
diff --git a/arch/arm/mach-shmobile/pm-rmobile.h b/arch/arm/mach-shmobile/pm-rmobile.h
index 8f66b343162b0411..0602130bb260c31d 100644
--- a/arch/arm/mach-shmobile/pm-rmobile.h
+++ b/arch/arm/mach-shmobile/pm-rmobile.h
@@ -21,6 +21,7 @@  struct rmobile_pm_domain {
 	struct dev_power_governor *gov;
 	int (*suspend)(void);
 	void (*resume)(void);
+	void __iomem *base;
 	unsigned int bit_shift;
 	bool no_debug;
 };
diff --git a/arch/arm/mach-shmobile/pm-sh7372.c b/arch/arm/mach-shmobile/pm-sh7372.c
index 7e5c2676c48902f1..7181a280b3b541af 100644
--- a/arch/arm/mach-shmobile/pm-sh7372.c
+++ b/arch/arm/mach-shmobile/pm-sh7372.c
@@ -45,6 +45,8 @@ 
 #define PLLC01STPCR IOMEM(0xe61500c8)
 
 /* SYSC */
+#define SYSC_BASE IOMEM(0xe6180000)
+
 #define SBAR IOMEM(0xe6180020)
 #define WUPRMSK IOMEM(0xe6180028)
 #define WUPSMSK IOMEM(0xe618002c)
@@ -118,24 +120,28 @@  static struct rmobile_pm_domain sh7372_pm_domains[] = {
 		.genpd.name = "A4LC",
 		.genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
 		.genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
+		.base = SYSC_BASE,
 		.bit_shift = 1,
 	},
 	{
 		.genpd.name = "A4MP",
 		.genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
 		.genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
+		.base = SYSC_BASE,
 		.bit_shift = 2,
 	},
 	{
 		.genpd.name = "D4",
 		.genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
 		.genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
+		.base = SYSC_BASE,
 		.bit_shift = 3,
 	},
 	{
 		.genpd.name = "A4R",
 		.genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
 		.genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
+		.base = SYSC_BASE,
 		.bit_shift = 5,
 		.suspend = sh7372_a4r_pd_suspend,
 		.resume = sh7372_intcs_resume,
@@ -144,18 +150,21 @@  static struct rmobile_pm_domain sh7372_pm_domains[] = {
 		.genpd.name = "A3RV",
 		.genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
 		.genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
+		.base = SYSC_BASE,
 		.bit_shift = 6,
 	},
 	{
 		.genpd.name = "A3RI",
 		.genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
 		.genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
+		.base = SYSC_BASE,
 		.bit_shift = 8,
 	},
 	{
 		.genpd.name = "A4S",
 		.genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
 		.genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
+		.base = SYSC_BASE,
 		.bit_shift = 10,
 		.gov = &pm_domain_always_on_gov,
 		.no_debug = true,
@@ -166,6 +175,7 @@  static struct rmobile_pm_domain sh7372_pm_domains[] = {
 		.genpd.name = "A3SP",
 		.genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
 		.genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
+		.base = SYSC_BASE,
 		.bit_shift = 11,
 		.gov = &pm_domain_always_on_gov,
 		.no_debug = true,
@@ -175,6 +185,7 @@  static struct rmobile_pm_domain sh7372_pm_domains[] = {
 		.genpd.name = "A3SG",
 		.genpd.power_on_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
 		.genpd.power_off_latency_ns = PM_DOMAIN_ON_OFF_LATENCY_NS,
+		.base = SYSC_BASE,
 		.bit_shift = 13,
 	},
 };