From: Lucas Stach <l.stach@pengutronix.de>
To: barebox@lists.infradead.org
Subject: [PATCH v4 08/11] ARM: install HYP vectors at PBL and Barebox entry
Date: Thu, 1 Nov 2018 10:18:43 +0100 [thread overview]
Message-ID: <20181101091846.10882-8-l.stach@pengutronix.de> (raw)
In-Reply-To: <20181101091846.10882-1-l.stach@pengutronix.de>
If the CPU was already in HYP mode when entering the PBL, install a
simple trap handler to allow to get back from SVC to HYP before
switching to HYP mode.
As the vectors are part of the currently running binary, we need to
do the same setup when starting the real Barebox binary, as the PBL
setup vectors might get overwritten. To do this we trap into HYP mode
just before jumping to Barebox and then re-do the vector setup and
SVC switch as the first thing in Barebox proper.
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Tested-by: Roland Hieber <r.hieber@pengutronix.de>
---
arch/arm/cpu/lowlevel.S | 3 +++
arch/arm/cpu/start-pbl.c | 4 ++++
arch/arm/cpu/start.c | 5 +++++
arch/arm/cpu/uncompress.c | 4 ++++
4 files changed, 16 insertions(+)
diff --git a/arch/arm/cpu/lowlevel.S b/arch/arm/cpu/lowlevel.S
index 43665981e48b..13dfe496ad17 100644
--- a/arch/arm/cpu/lowlevel.S
+++ b/arch/arm/cpu/lowlevel.S
@@ -8,6 +8,9 @@ ENTRY(arm_cpu_lowlevel_init)
/* save lr, since it may be banked away with a processor mode change */
mov r2, lr
+ /* careful: the hyp install corrupts r0 and r1 */
+ bl __hyp_install
+
/* set the cpu to SVC32 mode, mask irq and fiq */
mrs r12, cpsr
eor r12, r12, #HYP_MODE
diff --git a/arch/arm/cpu/start-pbl.c b/arch/arm/cpu/start-pbl.c
index 16159d7f9d51..48a808645671 100644
--- a/arch/arm/cpu/start-pbl.c
+++ b/arch/arm/cpu/start-pbl.c
@@ -26,6 +26,7 @@
#include <asm/barebox-arm-head.h>
#include <asm-generic/memory_layout.h>
#include <asm/sections.h>
+#include <asm/secure.h>
#include <asm/cache.h>
#include <asm/mmu.h>
#include <asm/unaligned.h>
@@ -98,5 +99,8 @@ __noreturn void barebox_single_pbl_start(unsigned long membase,
else
barebox = (void *)barebox_base;
+ if (IS_ENABLED(CONFIG_CPU_V7) && __boot_cpu_mode == HYP_MODE)
+ armv7_switch_to_hyp();
+
barebox(membase, memsize, boarddata);
}
diff --git a/arch/arm/cpu/start.c b/arch/arm/cpu/start.c
index 64bd942ad764..a79d64eaa6e6 100644
--- a/arch/arm/cpu/start.c
+++ b/arch/arm/cpu/start.c
@@ -24,6 +24,7 @@
#include <asm/barebox-arm-head.h>
#include <asm-generic/memory_layout.h>
#include <asm/sections.h>
+#include <asm/secure.h>
#include <asm/unaligned.h>
#include <asm/cache.h>
#include <asm/mmu.h>
@@ -147,6 +148,10 @@ __noreturn void barebox_non_pbl_start(unsigned long membase,
unsigned long barebox_base = arm_mem_barebox_image(membase,
endmem,
barebox_size);
+
+ if (IS_ENABLED(CONFIG_CPU_V7))
+ armv7_hyp_install();
+
if (IS_ENABLED(CONFIG_RELOCATABLE))
relocate_to_adr(barebox_base);
diff --git a/arch/arm/cpu/uncompress.c b/arch/arm/cpu/uncompress.c
index 43b49b42120b..048bca0c9599 100644
--- a/arch/arm/cpu/uncompress.c
+++ b/arch/arm/cpu/uncompress.c
@@ -27,6 +27,7 @@
#include <asm/barebox-arm-head.h>
#include <asm-generic/memory_layout.h>
#include <asm/sections.h>
+#include <asm/secure.h>
#include <asm/cache.h>
#include <asm/mmu.h>
#include <asm/unaligned.h>
@@ -105,5 +106,8 @@ void __noreturn barebox_multi_pbl_start(unsigned long membase,
pr_debug("jumping to uncompressed image at 0x%p\n", barebox);
+ if (IS_ENABLED(CONFIG_CPU_V7) && __boot_cpu_mode == HYP_MODE)
+ armv7_switch_to_hyp();
+
barebox(membase, memsize, boarddata);
}
--
2.19.1
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox
next prev parent reply other threads:[~2018-11-01 9:19 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-11-01 9:18 [PATCH v4 01/11] ARM: pass architecture flag for SMCC also to PBL compilation unit Lucas Stach
2018-11-01 9:18 ` [PATCH v4 02/11] ARM: import opcode helpers from Linux kernel Lucas Stach
2018-11-01 9:18 ` [PATCH v4 03/11] ARM: safely switch from HYP to SVC mode if required Lucas Stach
2018-11-01 9:18 ` [PATCH v4 04/11] ARM: allow secure monitor code to be built without PSCI Lucas Stach
2018-11-02 22:27 ` Sam Ravnborg
2018-11-03 0:04 ` Andrey Smirnov
2018-11-03 7:56 ` Sam Ravnborg
2018-11-01 9:18 ` [PATCH v4 05/11] ARM: add file for HYP mode related setup Lucas Stach
2018-11-01 9:18 ` [PATCH v4 06/11] ARM: don't try to install secure monitor when entered in HYP mode Lucas Stach
2018-11-01 9:18 ` [PATCH v4 07/11] ARM: default to starting kernel in HYP mode when entered in HYP Lucas Stach
2018-11-01 9:18 ` Lucas Stach [this message]
2018-11-01 9:18 ` [PATCH v4 09/11] ARM: rpi: add revision IDs for Pi 3 Model B and Pi Zero Lucas Stach
2018-11-01 18:35 ` Lucas Stach
2018-11-02 6:26 ` Sascha Hauer
2018-11-01 9:18 ` [PATCH v4 10/11] ARM: rpi: add raspberry pi 3 support Lucas Stach
2018-11-01 9:18 ` [PATCH v4 11/11] ARM: rpi: autosize malloc area Lucas Stach
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20181101091846.10882-8-l.stach@pengutronix.de \
--to=l.stach@pengutronix.de \
--cc=barebox@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox