Message ID | 20200629100218.6267-1-m.szyprowski@samsung.com (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
Series | [v2,1/4] ARM: exynos: MCPM: Restore big.LITTLE cpuidle support | expand |
On Mon, Jun 29, 2020 at 12:02:18PM +0200, Marek Szyprowski wrote: > Call exynos_cpu_power_up(cpunr) unconditionally. This is needed by the > big.LITTLE cpuidle driver and has no side-effects on other code paths. > > The additional soft-reset call during little core power up has been added > to properly boot all cores on the Exynos5422-based boards with secure > firmware (like Odroid XU3/XU4 family). This however broke big.LITTLE > CPUidle driver, which worked only on boards without secure firmware (like > Peach-Pit/Pi Chromebooks). Apply the workaround only when board is > running under secure firmware. > > Fixes: 833b5794e330 ("ARM: EXYNOS: reset Little cores when cpu is up") > Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com> > --- > v2: > - adjusted patch subject to better describe the change > - added a comment about exynos_cpu_power_up(cpunr) call > --- > arch/arm/mach-exynos/mcpm-exynos.c | 10 +++++++--- > 1 file changed, 7 insertions(+), 3 deletions(-) Thanks, applied (but somehow your patch did not make it to the linux-samsung-soc list). Best regards, Krzysztof
diff --git a/arch/arm/mach-exynos/mcpm-exynos.c b/arch/arm/mach-exynos/mcpm-exynos.c index 9a681b421ae1..cd861c57d5ad 100644 --- a/arch/arm/mach-exynos/mcpm-exynos.c +++ b/arch/arm/mach-exynos/mcpm-exynos.c @@ -26,6 +26,7 @@ #define EXYNOS5420_USE_L2_COMMON_UP_STATE BIT(30) static void __iomem *ns_sram_base_addr __ro_after_init; +static bool secure_firmware __ro_after_init; /* * The common v7_exit_coherency_flush API could not be used because of the @@ -58,15 +59,16 @@ static void __iomem *ns_sram_base_addr __ro_after_init; static int exynos_cpu_powerup(unsigned int cpu, unsigned int cluster) { unsigned int cpunr = cpu + (cluster * EXYNOS5420_CPUS_PER_CLUSTER); + bool state; pr_debug("%s: cpu %u cluster %u\n", __func__, cpu, cluster); if (cpu >= EXYNOS5420_CPUS_PER_CLUSTER || cluster >= EXYNOS5420_NR_CLUSTERS) return -EINVAL; - if (!exynos_cpu_power_state(cpunr)) { - exynos_cpu_power_up(cpunr); - + state = exynos_cpu_power_state(cpunr); + exynos_cpu_power_up(cpunr); + if (!state && secure_firmware) { /* * This assumes the cluster number of the big cores(Cortex A15) * is 0 and the Little cores(Cortex A7) is 1. @@ -258,6 +260,8 @@ static int __init exynos_mcpm_init(void) return -ENOMEM; } + secure_firmware = exynos_secure_firmware_available(); + /* * To increase the stability of KFC reset we need to program * the PMU SPARE3 register
Call exynos_cpu_power_up(cpunr) unconditionally. This is needed by the big.LITTLE cpuidle driver and has no side-effects on other code paths. The additional soft-reset call during little core power up has been added to properly boot all cores on the Exynos5422-based boards with secure firmware (like Odroid XU3/XU4 family). This however broke big.LITTLE CPUidle driver, which worked only on boards without secure firmware (like Peach-Pit/Pi Chromebooks). Apply the workaround only when board is running under secure firmware. Fixes: 833b5794e330 ("ARM: EXYNOS: reset Little cores when cpu is up") Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com> --- v2: - adjusted patch subject to better describe the change - added a comment about exynos_cpu_power_up(cpunr) call --- arch/arm/mach-exynos/mcpm-exynos.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-)