ARM: OMAP4+: Prevent CPU1 related hang with kexec
authorTony Lindgren <tony@atomide.com>
Wed, 22 Jun 2016 08:59:39 +0000 (01:59 -0700)
committerTony Lindgren <tony@atomide.com>
Thu, 23 Jun 2016 05:55:51 +0000 (22:55 -0700)
commit0573b957fc21c6a6cee01fdb08c1f7ce556afbac
tree26c28496da0cb970e04f01f9520758313c39ed63
parentf4b9f40ae95bad3df68d4a9b275714ef04abb1b5
ARM: OMAP4+: Prevent CPU1 related hang with kexec

Kexec booted kernels on omap4 will hang early during the boot if the
booted kernel is different version from the previous kernel.

This is because the previous kernel may have configured low-power mode
using CPU1_WAKEUP_NS_PA_ADDR. In that case it points to the previous
kernel's omap4_secondary_startup(), and CPU1 can be in low power mode
from the previous kernel. When the new kernel configures the CPU1
clockdomain, CPU1 can wake from low power state prematurely during
omap44xx_clockdomains_init() running random code.

Let's fix the issue by configuring CPU1_WAKEUP_NS_PA_ADDR before we
call omap44xx_clockdomains_init(). Note that this is very early during
the init, and we will do proper CPU1 reset during SMP init a bit later
on in omap4_smp_prepare_cpus(). And we need to do this when SMP is
not enabled as the previous kernel may have had it enabled.

Acked-by: Santosh Shilimkar <ssantosh@kernel.org>
Tested-by: Keerthy <j-keerthy@ti.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
arch/arm/mach-omap2/Makefile
arch/arm/mach-omap2/common.h
arch/arm/mach-omap2/io.c
arch/arm/mach-omap2/omap-mpuss-lowpower.c