From: Peter Maydell <peter.maydell@linaro.org>
To: qemu-devel@nongnu.org
Subject: [Qemu-devel] [PULL 10/39] target/arm: Define init-svtor property for the reset secure VTOR value
Date: Fri, 2 Mar 2018 11:06:11 +0000 [thread overview]
Message-ID: <20180302110640.28004-11-peter.maydell@linaro.org> (raw)
In-Reply-To: <20180302110640.28004-1-peter.maydell@linaro.org>
The Cortex-M33 allows the system to specify the reset value of the
secure Vector Table Offset Register (VTOR) by asserting config
signals. In particular, guest images for the MPS2 AN505 board rely
on the MPS2's initial VTOR being correct for that board.
Implement a QEMU property so board and SoC code can set the reset
value to the correct value.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-id: 20180220180325.29818-7-peter.maydell@linaro.org
---
target/arm/cpu.h | 3 +++
target/arm/cpu.c | 18 ++++++++++++++----
2 files changed, 17 insertions(+), 4 deletions(-)
diff --git a/target/arm/cpu.h b/target/arm/cpu.h
index 4710a43110..72b5668377 100644
--- a/target/arm/cpu.h
+++ b/target/arm/cpu.h
@@ -731,6 +731,9 @@ struct ARMCPU {
*/
uint32_t psci_conduit;
+ /* For v8M, initial value of the Secure VTOR */
+ uint32_t init_svtor;
+
/* [QEMU_]KVM_ARM_TARGET_* constant for this CPU, or
* QEMU_KVM_ARM_TARGET_NONE if the kernel doesn't support this CPU type.
*/
diff --git a/target/arm/cpu.c b/target/arm/cpu.c
index 291ff0b1db..27d9e90308 100644
--- a/target/arm/cpu.c
+++ b/target/arm/cpu.c
@@ -187,6 +187,7 @@ static void arm_cpu_reset(CPUState *s)
uint32_t initial_msp; /* Loaded from 0x0 */
uint32_t initial_pc; /* Loaded from 0x4 */
uint8_t *rom;
+ uint32_t vecbase;
if (arm_feature(env, ARM_FEATURE_M_SECURITY)) {
env->v7m.secure = true;
@@ -214,8 +215,11 @@ static void arm_cpu_reset(CPUState *s)
/* Unlike A/R profile, M profile defines the reset LR value */
env->regs[14] = 0xffffffff;
- /* Load the initial SP and PC from the vector table at address 0 */
- rom = rom_ptr(0);
+ env->v7m.vecbase[M_REG_S] = cpu->init_svtor & 0xffffff80;
+
+ /* Load the initial SP and PC from offset 0 and 4 in the vector table */
+ vecbase = env->v7m.vecbase[env->v7m.secure];
+ rom = rom_ptr(vecbase);
if (rom) {
/* Address zero is covered by ROM which hasn't yet been
* copied into physical memory.
@@ -228,8 +232,8 @@ static void arm_cpu_reset(CPUState *s)
* it got copied into memory. In the latter case, rom_ptr
* will return a NULL pointer and we should use ldl_phys instead.
*/
- initial_msp = ldl_phys(s->as, 0);
- initial_pc = ldl_phys(s->as, 4);
+ initial_msp = ldl_phys(s->as, vecbase);
+ initial_pc = ldl_phys(s->as, vecbase + 4);
}
env->regs[13] = initial_msp & 0xFFFFFFFC;
@@ -624,6 +628,10 @@ static Property arm_cpu_pmsav7_dregion_property =
pmsav7_dregion,
qdev_prop_uint32, uint32_t);
+/* M profile: initial value of the Secure VTOR */
+static Property arm_cpu_initsvtor_property =
+ DEFINE_PROP_UINT32("init-svtor", ARMCPU, init_svtor, 0);
+
static void arm_cpu_post_init(Object *obj)
{
ARMCPU *cpu = ARM_CPU(obj);
@@ -694,6 +702,8 @@ static void arm_cpu_post_init(Object *obj)
qdev_prop_allow_set_link_before_realize,
OBJ_PROP_LINK_UNREF_ON_RELEASE,
&error_abort);
+ qdev_property_add_static(DEVICE(obj), &arm_cpu_initsvtor_property,
+ &error_abort);
}
qdev_property_add_static(DEVICE(obj), &arm_cpu_cfgend_property,
--
2.16.2
next prev parent reply other threads:[~2018-03-02 11:06 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-03-02 11:06 [Qemu-devel] [PULL 00/39] target-arm queue Peter Maydell
2018-03-02 11:06 ` [Qemu-devel] [PULL 01/39] xlnx-zynqmp-rtc: Initial commit Peter Maydell
2018-03-02 11:06 ` [Qemu-devel] [PULL 02/39] xlnx-zynqmp-rtc: Add basic time support Peter Maydell
2018-03-02 11:06 ` [Qemu-devel] [PULL 03/39] xlnx-zynqmp: Connect the RTC device Peter Maydell
2018-03-02 11:06 ` [Qemu-devel] [PULL 04/39] decodetree: Propagate return value from translate subroutines Peter Maydell
2018-03-02 11:06 ` [Qemu-devel] [PULL 05/39] loader: Add new load_ramdisk_as() Peter Maydell
2018-03-02 11:06 ` [Qemu-devel] [PULL 06/39] hw/arm/boot: Honour CPU's address space for image loads Peter Maydell
2018-03-02 11:06 ` [Qemu-devel] [PULL 07/39] hw/arm/armv7m: " Peter Maydell
2018-03-02 11:06 ` [Qemu-devel] [PULL 08/39] target/arm: Define an IDAU interface Peter Maydell
2018-03-02 11:06 ` [Qemu-devel] [PULL 09/39] armv7m: Forward idau property to CPU object Peter Maydell
2018-03-02 11:06 ` Peter Maydell [this message]
2018-03-02 11:06 ` [Qemu-devel] [PULL 11/39] armv7m: Forward init-svtor " Peter Maydell
2018-03-02 11:06 ` [Qemu-devel] [PULL 12/39] target/arm: Add Cortex-M33 Peter Maydell
2018-03-02 11:06 ` [Qemu-devel] [PULL 13/39] hw/misc/unimp: Move struct to header file Peter Maydell
2018-03-02 11:06 ` [Qemu-devel] [PULL 14/39] include/hw/or-irq.h: Add missing include guard Peter Maydell
2018-03-02 11:06 ` [Qemu-devel] [PULL 15/39] qdev: Add new qdev_init_gpio_in_named_with_opaque() Peter Maydell
2018-03-02 11:06 ` [Qemu-devel] [PULL 16/39] hw/core/split-irq: Device that splits IRQ lines Peter Maydell
2018-03-02 11:06 ` [Qemu-devel] [PULL 17/39] hw/misc/mps2-fpgaio: FPGA control block for MPS2 AN505 Peter Maydell
2018-03-02 11:06 ` [Qemu-devel] [PULL 18/39] hw/misc/tz-ppc: Model TrustZone peripheral protection controller Peter Maydell
2018-03-02 11:06 ` [Qemu-devel] [PULL 19/39] hw/misc/iotkit-secctl: Arm IoT Kit security controller initial skeleton Peter Maydell
2018-03-02 11:06 ` [Qemu-devel] [PULL 20/39] hw/misc/iotkit-secctl: Add handling for PPCs Peter Maydell
2018-03-02 11:06 ` [Qemu-devel] [PULL 21/39] hw/misc/iotkit-secctl: Add remaining simple registers Peter Maydell
2018-03-02 11:06 ` [Qemu-devel] [PULL 22/39] hw/arm/iotkit: Model Arm IOT Kit Peter Maydell
2018-03-02 11:06 ` [Qemu-devel] [PULL 23/39] mps2-an505: New board model: MPS2 with AN505 Cortex-M33 FPGA image Peter Maydell
2018-03-02 11:06 ` [Qemu-devel] [PULL 24/39] target/arm: Add ARM_FEATURE_V8_RDM Peter Maydell
2018-03-02 11:06 ` [Qemu-devel] [PULL 25/39] target/arm: Refactor disas_simd_indexed decode Peter Maydell
2018-03-02 11:06 ` [Qemu-devel] [PULL 26/39] target/arm: Refactor disas_simd_indexed size checks Peter Maydell
2018-03-02 11:06 ` [Qemu-devel] [PULL 27/39] target/arm: Decode aa64 armv8.1 scalar three same extra Peter Maydell
2018-03-02 11:06 ` [Qemu-devel] [PULL 28/39] target/arm: Decode aa64 armv8.1 " Peter Maydell
2018-03-02 11:06 ` [Qemu-devel] [PULL 29/39] target/arm: Decode aa64 armv8.1 scalar/vector x indexed element Peter Maydell
2018-03-02 11:06 ` [Qemu-devel] [PULL 30/39] target/arm: Decode aa32 armv8.1 three same Peter Maydell
2018-03-02 11:06 ` [Qemu-devel] [PULL 31/39] target/arm: Decode aa32 armv8.1 two reg and a scalar Peter Maydell
2018-03-02 11:06 ` [Qemu-devel] [PULL 32/39] target/arm: Enable ARM_FEATURE_V8_RDM Peter Maydell
2018-03-02 11:06 ` [Qemu-devel] [PULL 33/39] target/arm: Add ARM_FEATURE_V8_FCMA Peter Maydell
2018-03-02 11:06 ` [Qemu-devel] [PULL 34/39] target/arm: Decode aa64 armv8.3 fcadd Peter Maydell
2018-03-02 11:06 ` [Qemu-devel] [PULL 35/39] target/arm: Decode aa64 armv8.3 fcmla Peter Maydell
2018-03-02 11:06 ` [Qemu-devel] [PULL 36/39] target/arm: Decode aa32 armv8.3 3-same Peter Maydell
2018-03-02 11:06 ` [Qemu-devel] [PULL 37/39] target/arm: Decode aa32 armv8.3 2-reg-index Peter Maydell
2018-03-02 11:06 ` [Qemu-devel] [PULL 38/39] target/arm: Decode t32 simd 3reg and 2reg_scalar extension Peter Maydell
2018-03-02 11:06 ` [Qemu-devel] [PULL 39/39] target/arm: Enable ARM_FEATURE_V8_FCMA Peter Maydell
2018-03-02 11:42 ` [Qemu-devel] [PULL 00/39] target-arm queue no-reply
2018-03-02 15:45 ` Peter Maydell
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=20180302110640.28004-11-peter.maydell@linaro.org \
--to=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.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;
as well as URLs for NNTP newsgroup(s).