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

From: Ulf Hansson
Date: Fri Sep 26 2014 - 04:47:15 EST


On 25 September 2014 18:28, Geert Uytterhoeven <geert+renesas@xxxxxxxxx> 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@xxxxxxxxx>

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

> ---
> 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-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/