summaryrefslogtreecommitdiff
path: root/arch/arm/cpu/armv7
diff options
context:
space:
mode:
authorIan Campbell <ijc@hellion.org.uk>2014-12-21 09:45:11 +0000
committerTom Rini <trini@ti.com>2015-01-05 15:02:03 -0500
commit97a8196451d786e640fb96895a0e7dbefe6c9ff8 (patch)
tree64b054c9f7cfe37fbc15c746eb9ec5730d1095fc /arch/arm/cpu/armv7
parentc313c031cf943aea3e70c40b2c673f03e77859e0 (diff)
downloadu-boot-imx-97a8196451d786e640fb96895a0e7dbefe6c9ff8.zip
u-boot-imx-97a8196451d786e640fb96895a0e7dbefe6c9ff8.tar.gz
u-boot-imx-97a8196451d786e640fb96895a0e7dbefe6c9ff8.tar.bz2
ARM: bootm: do not add PSCI to fdt when booting in secure mode.
Commit 8bc347e2ec17 "ARM: bootm: Allow booting in secure mode on hyp capable systems" added the capability to select nonsec vs sec mode boot via an environment var. There is a subtle gotcha with this functionality, which is that the PSCI nodes are still created in the fdt (via armv7_update_dt->fdt_psci) even when booting in secure mode. Which means that if the kernel is PSCI aware then it will fail to boot because it will try and do PSCI from secure world, which won't work. This likely didn't get noticed before because the original purpose was to support booting the legacy linux-sunxi kernels which don't understand PSCI. To fix expose boot_nonsec (renaming with armv7_ prefix) outside of bootm.c and use from the virt-dt code. As well as avoiding the creation of the PSCI nodes we should also avoid reserving the secure RAM, so do so. Signed-off-by: Ian Campbell <ijc@hellion.org.uk> Cc: Hans de Goede <hdegoede@redhat.com> Cc: Albert ARIBAUD <albert.u.boot@aribaud.net> Cc: Tom Rini <trini@ti.com> Acked-by: Hans de Goede <hdegoede@redhat.com>
Diffstat (limited to 'arch/arm/cpu/armv7')
-rw-r--r--arch/arm/cpu/armv7/virt-dt.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/arch/arm/cpu/armv7/virt-dt.c b/arch/arm/cpu/armv7/virt-dt.c
index 0b0d6a7..ad19e4c 100644
--- a/arch/arm/cpu/armv7/virt-dt.c
+++ b/arch/arm/cpu/armv7/virt-dt.c
@@ -90,6 +90,8 @@ static int fdt_psci(void *fdt)
int armv7_update_dt(void *fdt)
{
+ if (!armv7_boot_nonsec())
+ return 0;
#ifndef CONFIG_ARMV7_SECURE_BASE
/* secure code lives in RAM, keep it alive */
fdt_add_mem_rsv(fdt, (unsigned long)__secure_start,