diff options
| author | Arnd Bergmann <arnd@arndb.de> | 2025-07-23 07:51:03 +0200 |
|---|---|---|
| committer | Arnd Bergmann <arnd@arndb.de> | 2025-07-23 07:51:03 +0200 |
| commit | 8c1f5a11dad0a9043c17c4c0240f394e481baca6 (patch) | |
| tree | 487594e235f7c1d33634a956c3dfa3a90078b1ee | |
| parent | d2755d3cf8578bc8522cfdc2eac05cae73428904 (diff) | |
| parent | 7cdb433bb44cdc87dc5260cdf15bf03cc1cd1814 (diff) | |
Merge tag 'v6.17-rockchip-arm32-1' of https://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip into soc/arm
Fix for seldom hangs when bringing up arm32 cpu cores.
* tag 'v6.17-rockchip-arm32-1' of https://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip:
ARM: rockchip: fix kernel hang during smp initialization
Link: https://lore.kernel.org/r/12434765.CDJkKcVGEf@phil
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
| -rw-r--r-- | arch/arm/mach-rockchip/platsmp.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/arch/arm/mach-rockchip/platsmp.c b/arch/arm/mach-rockchip/platsmp.c index 36915a073c23..f432d22bfed8 100644 --- a/arch/arm/mach-rockchip/platsmp.c +++ b/arch/arm/mach-rockchip/platsmp.c @@ -279,11 +279,6 @@ static void __init rockchip_smp_prepare_cpus(unsigned int max_cpus) } if (read_cpuid_part() == ARM_CPU_PART_CORTEX_A9) { - if (rockchip_smp_prepare_sram(node)) { - of_node_put(node); - return; - } - /* enable the SCU power domain */ pmu_set_power_domain(PMU_PWRDN_SCU, true); @@ -316,11 +311,19 @@ static void __init rockchip_smp_prepare_cpus(unsigned int max_cpus) asm ("mrc p15, 1, %0, c9, c0, 2\n" : "=r" (l2ctlr)); ncores = ((l2ctlr >> 24) & 0x3) + 1; } - of_node_put(node); /* Make sure that all cores except the first are really off */ for (i = 1; i < ncores; i++) pmu_set_power_domain(0 + i, false); + + if (read_cpuid_part() == ARM_CPU_PART_CORTEX_A9) { + if (rockchip_smp_prepare_sram(node)) { + of_node_put(node); + return; + } + } + + of_node_put(node); } static void __init rk3036_smp_prepare_cpus(unsigned int max_cpus) |
