Commit a0a6624d authored by Geert Uytterhoeven's avatar Geert Uytterhoeven

ARM: shmobile: sh73a0: Use ioremap() to map SMP registers

Replace using the legacy IOMEM() macro to map various registers related
to secondary CPU bringup by ioremap().
Signed-off-by: default avatarGeert Uytterhoeven <geert+renesas@glider.be>
Link: https://lore.kernel.org/r/20201117103022.2136527-7-geert+renesas@glider.be
parent cc85e21d
...@@ -16,31 +16,42 @@ ...@@ -16,31 +16,42 @@
#include "common.h" #include "common.h"
#include "sh73a0.h" #include "sh73a0.h"
#define WUPCR IOMEM(0xe6151010) #define CPG_BASE2 0xe6151000
#define SRESCR IOMEM(0xe6151018) #define WUPCR 0x10 /* System-CPU Wake Up Control Register */
#define PSTR IOMEM(0xe6151040) #define SRESCR 0x18 /* System-CPU Software Reset Control Register */
#define SBAR IOMEM(0xe6180020) #define PSTR 0x40 /* System-CPU Power Status Register */
#define APARMBAREA IOMEM(0xe6f10020)
#define SYSC_BASE 0xe6180000
#define SBAR 0x20 /* SYS Boot Address Register */
#define AP_BASE 0xe6f10000
#define APARMBAREA 0x20 /* Address Translation Area Register */
#define SH73A0_SCU_BASE 0xf0000000 #define SH73A0_SCU_BASE 0xf0000000
static int sh73a0_boot_secondary(unsigned int cpu, struct task_struct *idle) static int sh73a0_boot_secondary(unsigned int cpu, struct task_struct *idle)
{ {
unsigned int lcpu = cpu_logical_map(cpu); unsigned int lcpu = cpu_logical_map(cpu);
void __iomem *cpg2 = ioremap(CPG_BASE2, PAGE_SIZE);
if (((__raw_readl(PSTR) >> (4 * lcpu)) & 3) == 3) if (((__raw_readl(cpg2 + PSTR) >> (4 * lcpu)) & 3) == 3)
__raw_writel(1 << lcpu, WUPCR); /* wake up */ __raw_writel(1 << lcpu, cpg2 + WUPCR); /* wake up */
else else
__raw_writel(1 << lcpu, SRESCR); /* reset */ __raw_writel(1 << lcpu, cpg2 + SRESCR); /* reset */
iounmap(cpg2);
return 0; return 0;
} }
static void __init sh73a0_smp_prepare_cpus(unsigned int max_cpus) static void __init sh73a0_smp_prepare_cpus(unsigned int max_cpus)
{ {
void __iomem *ap = ioremap(AP_BASE, PAGE_SIZE);
void __iomem *sysc = ioremap(SYSC_BASE, PAGE_SIZE);
/* Map the reset vector (in headsmp.S) */ /* Map the reset vector (in headsmp.S) */
__raw_writel(0, APARMBAREA); /* 4k */ __raw_writel(0, ap + APARMBAREA); /* 4k */
__raw_writel(__pa(shmobile_boot_vector), SBAR); __raw_writel(__pa(shmobile_boot_vector), sysc + SBAR);
iounmap(sysc);
iounmap(ap);
/* setup sh73a0 specific SCU bits */ /* setup sh73a0 specific SCU bits */
shmobile_smp_scu_prepare_cpus(SH73A0_SCU_BASE, max_cpus); shmobile_smp_scu_prepare_cpus(SH73A0_SCU_BASE, max_cpus);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment