diff options
author | Ian Campbell <ijc@hellion.org.uk> | 2014-12-21 09:45:11 +0000 |
---|---|---|
committer | Tom Rini <trini@ti.com> | 2015-01-05 15:02:03 -0500 |
commit | 97a8196451d786e640fb96895a0e7dbefe6c9ff8 (patch) | |
tree | 64b054c9f7cfe37fbc15c746eb9ec5730d1095fc /arch/arm/lib | |
parent | c313c031cf943aea3e70c40b2c673f03e77859e0 (diff) | |
download | u-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/lib')
-rw-r--r-- | arch/arm/lib/bootm.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/arch/arm/lib/bootm.c b/arch/arm/lib/bootm.c index a7f7c67..0c1298a 100644 --- a/arch/arm/lib/bootm.c +++ b/arch/arm/lib/bootm.c @@ -238,7 +238,7 @@ static void boot_prep_linux(bootm_headers_t *images) } #if defined(CONFIG_ARMV7_NONSEC) || defined(CONFIG_ARMV7_VIRT) -static bool boot_nonsec(void) +bool armv7_boot_nonsec(void) { char *s = getenv("bootm_boot_mode"); #ifdef CONFIG_ARMV7_BOOT_SEC_DEFAULT @@ -305,7 +305,7 @@ static void boot_jump_linux(bootm_headers_t *images, int flag) if (!fake) { #if defined(CONFIG_ARMV7_NONSEC) || defined(CONFIG_ARMV7_VIRT) - if (boot_nonsec()) { + if (armv7_boot_nonsec()) { armv7_init_nonsec(); secure_ram_addr(_do_nonsec_entry)(kernel_entry, 0, machid, r2); |