diff options
author | Greg Kroah-Hartman | 2015-10-12 19:49:33 +0200 |
---|---|---|
committer | Greg Kroah-Hartman | 2015-10-12 19:49:33 +0200 |
commit | b1630da0589dbf520e4cf565eda6a74c5a813962 (patch) | |
tree | 290df4d4e49d96ed4df1dfa68ead45991e85cd2e /arch/arm/mach-exynos/mcpm-exynos.c | |
parent | USB: u132-hcd: Fix seperate word in printk message (diff) | |
parent | Linux 4.3-rc5 (diff) | |
download | kernel-qcow2-linux-b1630da0589dbf520e4cf565eda6a74c5a813962.tar.gz kernel-qcow2-linux-b1630da0589dbf520e4cf565eda6a74c5a813962.tar.xz kernel-qcow2-linux-b1630da0589dbf520e4cf565eda6a74c5a813962.zip |
Merge 4.3-rc5 into usb-next
We want the USB fixes in here as well to make merges easier.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'arch/arm/mach-exynos/mcpm-exynos.c')
-rw-r--r-- | arch/arm/mach-exynos/mcpm-exynos.c | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/arch/arm/mach-exynos/mcpm-exynos.c b/arch/arm/mach-exynos/mcpm-exynos.c index 9bdf54795f05..56978199c479 100644 --- a/arch/arm/mach-exynos/mcpm-exynos.c +++ b/arch/arm/mach-exynos/mcpm-exynos.c @@ -20,6 +20,7 @@ #include <asm/cputype.h> #include <asm/cp15.h> #include <asm/mcpm.h> +#include <asm/smp_plat.h> #include "regs-pmu.h" #include "common.h" @@ -70,7 +71,31 @@ static int exynos_cpu_powerup(unsigned int cpu, unsigned int cluster) cluster >= EXYNOS5420_NR_CLUSTERS) return -EINVAL; - exynos_cpu_power_up(cpunr); + if (!exynos_cpu_power_state(cpunr)) { + exynos_cpu_power_up(cpunr); + + /* + * This assumes the cluster number of the big cores(Cortex A15) + * is 0 and the Little cores(Cortex A7) is 1. + * When the system was booted from the Little core, + * they should be reset during power up cpu. + */ + if (cluster && + cluster == MPIDR_AFFINITY_LEVEL(cpu_logical_map(0), 1)) { + /* + * Before we reset the Little cores, we should wait + * the SPARE2 register is set to 1 because the init + * codes of the iROM will set the register after + * initialization. + */ + while (!pmu_raw_readl(S5P_PMU_SPARE2)) + udelay(10); + + pmu_raw_writel(EXYNOS5420_KFC_CORE_RESET(cpu), + EXYNOS_SWRESET); + } + } + return 0; } |