Commit a7ae982f authored by Zhiwu Song's avatar Zhiwu Song Committed by Barry Song

ARM: sirf: move platsmp to support Atlas7 SoC

This patch breaks Marco SMP support, but Marco project has been dropped.
So it corrects cpu1 jump/flag address for Atlas7 and removes scu related
logic as scu doesn't expose in cortex-a7.
Signed-off-by: default avatarZhiwu Song <Zhiwu.Song@csr.com>
Signed-off-by: default avatarBarry Song <Baohua.Song@csr.com>
Acked-by: default avatarArnd Bergmann <arnd@arndb.de>
parent 3c7d21b4
...@@ -23,7 +23,6 @@ static void __init sirfsoc_init_late(void) ...@@ -23,7 +23,6 @@ static void __init sirfsoc_init_late(void)
static __init void sirfsoc_map_io(void) static __init void sirfsoc_map_io(void)
{ {
sirfsoc_map_lluart(); sirfsoc_map_lluart();
sirfsoc_map_scu();
} }
#ifdef CONFIG_ARCH_ATLAS6 #ifdef CONFIG_ARCH_ATLAS6
......
...@@ -20,30 +20,10 @@ ...@@ -20,30 +20,10 @@
#include "common.h" #include "common.h"
static void __iomem *scu_base; static void __iomem *clk_base;
static void __iomem *rsc_base;
static DEFINE_SPINLOCK(boot_lock); static DEFINE_SPINLOCK(boot_lock);
static struct map_desc scu_io_desc __initdata = {
.length = SZ_4K,
.type = MT_DEVICE,
};
void __init sirfsoc_map_scu(void)
{
unsigned long base;
/* Get SCU base */
asm("mrc p15, 4, %0, c15, c0, 0" : "=r" (base));
scu_io_desc.virtual = SIRFSOC_VA(base);
scu_io_desc.pfn = __phys_to_pfn(base);
iotable_init(&scu_io_desc, 1);
scu_base = (void __iomem *)SIRFSOC_VA(base);
}
static void sirfsoc_secondary_init(unsigned int cpu) static void sirfsoc_secondary_init(unsigned int cpu)
{ {
/* /*
...@@ -60,8 +40,8 @@ static void sirfsoc_secondary_init(unsigned int cpu) ...@@ -60,8 +40,8 @@ static void sirfsoc_secondary_init(unsigned int cpu)
spin_unlock(&boot_lock); spin_unlock(&boot_lock);
} }
static struct of_device_id rsc_ids[] = { static struct of_device_id clk_ids[] = {
{ .compatible = "sirf,marco-rsc" }, { .compatible = "sirf,atlas7-clkc" },
{}, {},
}; };
...@@ -70,27 +50,27 @@ static int sirfsoc_boot_secondary(unsigned int cpu, struct task_struct *idle) ...@@ -70,27 +50,27 @@ static int sirfsoc_boot_secondary(unsigned int cpu, struct task_struct *idle)
unsigned long timeout; unsigned long timeout;
struct device_node *np; struct device_node *np;
np = of_find_matching_node(NULL, rsc_ids); np = of_find_matching_node(NULL, clk_ids);
if (!np) if (!np)
return -ENODEV; return -ENODEV;
rsc_base = of_iomap(np, 0); clk_base = of_iomap(np, 0);
if (!rsc_base) if (!clk_base)
return -ENOMEM; return -ENOMEM;
/* /*
* write the address of secondary startup into the sram register * write the address of secondary startup into the clkc register
* at offset 0x2C, then write the magic number 0x3CAF5D62 to the * at offset 0x2bC, then write the magic number 0x3CAF5D62 to the
* RSC register at offset 0x28, which is what boot rom code is * clkc register at offset 0x2b8, which is what boot rom code is
* waiting for. This would wake up the secondary core from WFE * waiting for. This would wake up the secondary core from WFE
*/ */
#define SIRFSOC_CPU1_JUMPADDR_OFFSET 0x2C #define SIRFSOC_CPU1_JUMPADDR_OFFSET 0x2bc
__raw_writel(virt_to_phys(sirfsoc_secondary_startup), __raw_writel(virt_to_phys(sirfsoc_secondary_startup),
rsc_base + SIRFSOC_CPU1_JUMPADDR_OFFSET); clk_base + SIRFSOC_CPU1_JUMPADDR_OFFSET);
#define SIRFSOC_CPU1_WAKEMAGIC_OFFSET 0x28 #define SIRFSOC_CPU1_WAKEMAGIC_OFFSET 0x2b8
__raw_writel(0x3CAF5D62, __raw_writel(0x3CAF5D62,
rsc_base + SIRFSOC_CPU1_WAKEMAGIC_OFFSET); clk_base + SIRFSOC_CPU1_WAKEMAGIC_OFFSET);
/* make sure write buffer is drained */ /* make sure write buffer is drained */
mb(); mb();
...@@ -132,13 +112,7 @@ static int sirfsoc_boot_secondary(unsigned int cpu, struct task_struct *idle) ...@@ -132,13 +112,7 @@ static int sirfsoc_boot_secondary(unsigned int cpu, struct task_struct *idle)
return pen_release != -1 ? -ENOSYS : 0; return pen_release != -1 ? -ENOSYS : 0;
} }
static void __init sirfsoc_smp_prepare_cpus(unsigned int max_cpus)
{
scu_enable(scu_base);
}
struct smp_operations sirfsoc_smp_ops __initdata = { struct smp_operations sirfsoc_smp_ops __initdata = {
.smp_prepare_cpus = sirfsoc_smp_prepare_cpus,
.smp_secondary_init = sirfsoc_secondary_init, .smp_secondary_init = sirfsoc_secondary_init,
.smp_boot_secondary = sirfsoc_boot_secondary, .smp_boot_secondary = sirfsoc_boot_secondary,
#ifdef CONFIG_HOTPLUG_CPU #ifdef CONFIG_HOTPLUG_CPU
......
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