diff options
author | Chanwoo Choi <cw00.choi@samsung.com> | 2014-05-25 15:12:32 -0400 |
---|---|---|
committer | Kukjin Kim <kgene.kim@samsung.com> | 2014-05-30 13:43:38 -0400 |
commit | 6457158acc30ece42f62d50f4b8f19264203b15e (patch) | |
tree | 709a82c40374c85b78c24762c06c0b0bde35b4d8 /arch/arm/mach-exynos/firmware.c | |
parent | 940bc58de51454f4f6c4be754ad62bd0cb8bc396 (diff) |
ARM: EXYNOS: Support secondary CPU boot of Exynos3250
This patch fix the offset of CPU boot address and don't
need to send smc call of SMC_CMD_CPU1BOOT command for
secondary CPU boot because Exynos3250 removes WFE in
secure mode.
Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
Acked-by: Kyungmin Park <kyungmin.park@samsung.com>
Reviewed-by: Tomasz Figa <t.figa@samsung.com>
Signed-off-by: Kukjin Kim <kgene.kim@samsung.com>
Diffstat (limited to 'arch/arm/mach-exynos/firmware.c')
-rw-r--r-- | arch/arm/mach-exynos/firmware.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/arch/arm/mach-exynos/firmware.c b/arch/arm/mach-exynos/firmware.c index f6cb510aee85..1120c28394dd 100644 --- a/arch/arm/mach-exynos/firmware.c +++ b/arch/arm/mach-exynos/firmware.c | |||
@@ -30,6 +30,13 @@ static int exynos_do_idle(void) | |||
30 | static int exynos_cpu_boot(int cpu) | 30 | static int exynos_cpu_boot(int cpu) |
31 | { | 31 | { |
32 | /* | 32 | /* |
33 | * Exynos3250 doesn't need to send smc command for secondary CPU boot | ||
34 | * because Exynos3250 removes WFE in secure mode. | ||
35 | */ | ||
36 | if (soc_is_exynos3250()) | ||
37 | return 0; | ||
38 | |||
39 | /* | ||
33 | * The second parameter of SMC_CMD_CPU1BOOT command means CPU id. | 40 | * The second parameter of SMC_CMD_CPU1BOOT command means CPU id. |
34 | * But, Exynos4212 has only one secondary CPU so second parameter | 41 | * But, Exynos4212 has only one secondary CPU so second parameter |
35 | * isn't used for informing secure firmware about CPU id. | 42 | * isn't used for informing secure firmware about CPU id. |
@@ -45,7 +52,7 @@ static int exynos_set_cpu_boot_addr(int cpu, unsigned long boot_addr) | |||
45 | { | 52 | { |
46 | void __iomem *boot_reg = S5P_VA_SYSRAM_NS + 0x1c; | 53 | void __iomem *boot_reg = S5P_VA_SYSRAM_NS + 0x1c; |
47 | 54 | ||
48 | if (!soc_is_exynos4212()) | 55 | if (!soc_is_exynos4212() && !soc_is_exynos3250()) |
49 | boot_reg += 4*cpu; | 56 | boot_reg += 4*cpu; |
50 | 57 | ||
51 | __raw_writel(boot_addr, boot_reg); | 58 | __raw_writel(boot_addr, boot_reg); |