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

Ulf Hansson ulf.hansson at linaro.org
Fri Sep 26 01:47:05 PDT 2014


On 25 September 2014 18:28, Geert Uytterhoeven <geert+renesas at 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 at glider.be>

Reviewed-by: Ulf Hansson <ulf.hansson at 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
>



More information about the linux-arm-kernel mailing list