summaryrefslogtreecommitdiffstats
path: root/hw/arm/virt.c
diff options
context:
space:
mode:
authorPeter Maydell <peter.maydell@linaro.org>2015-09-08 18:02:36 +0100
committerPeter Maydell <peter.maydell@linaro.org>2015-09-08 18:02:36 +0100
commitfc04a730b7e60f4a62d6260d4eb9c537d1d3643f (patch)
tree71a0c298ca37f76a7467118aacbc8a38df0edd99 /hw/arm/virt.c
parent8611280505119e296757a60711a881341603fa5a (diff)
parent6fdf3282d16e7fb6e798824fb5f4f60c6a73067d (diff)
downloadhqemu-fc04a730b7e60f4a62d6260d4eb9c537d1d3643f.zip
hqemu-fc04a730b7e60f4a62d6260d4eb9c537d1d3643f.tar.gz
Merge remote-tracking branch 'remotes/pmaydell/tags/pull-target-arm-20150908' into staging
target-arm queue: * Implement priority handling properly via GICC_APR * Enable TZ extensions on the GIC if we're using them * Minor preparatory patches for EL3 support * cadence_gem: Correct Marvell PHY SPCFC reset value * Support AHCI in ZynqMP # gpg: Signature made Tue 08 Sep 2015 17:48:33 BST using RSA key ID 14360CDE # gpg: Good signature from "Peter Maydell <peter.maydell@linaro.org>" # gpg: aka "Peter Maydell <pmaydell@gmail.com>" # gpg: aka "Peter Maydell <pmaydell@chiark.greenend.org.uk>" * remotes/pmaydell/tags/pull-target-arm-20150908: xlnx-zynqmp: Connect the sysbus AHCI to ZynqMP xlnx-zynqmp.c: Convert some of the error_propagate() calls to error_abort ahci.c: Don't assume AHCIState's parent is AHCIPCIState ahci: Separate the AHCI state structure into the header cadence_gem: Correct Marvell PHY SPCFC reset value target-arm: Add AArch64 access to PAR_EL1 target-arm: Correct opc1 for AT_S12Exx target-arm: Log the target EL when taking exceptions target-arm: Fix default_exception_el() function for the case when EL3 is not supported hw/arm/virt: Enable TZ extensions on the GIC if we are using them hw/arm/virt: Default to not providing TrustZone support hw/cpu/{a15mpcore, a9mpcore}: enable TrustZone in GIC if it is enabled in CPUs hw/intc/arm_gic_common: Configure IRQs as NS if doing direct NS kernel boot hw/arm: new interface for devices which need to behave differently for kernel boot qom: Add recursive version of object_child_for_each hw/intc/arm_gic: Actually set the active bits for active interrupts hw/intc/arm_gic: Drop running_irq and last_active arrays hw/intc/arm_gic: Fix handling of GICC_APR<n>, GICC_NSAPR<n> registers hw/intc/arm_gic: Running priority is group priority, not full priority armv7m_nvic: Implement ICSR without using internal GIC state Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'hw/arm/virt.c')
-rw-r--r--hw/arm/virt.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/hw/arm/virt.c b/hw/arm/virt.c
index 91e45e0..e9324f5 100644
--- a/hw/arm/virt.c
+++ b/hw/arm/virt.c
@@ -396,7 +396,7 @@ static void create_v2m(VirtBoardInfo *vbi, qemu_irq *pic)
fdt_add_v2m_gic_node(vbi);
}
-static void create_gic(VirtBoardInfo *vbi, qemu_irq *pic)
+static void create_gic(VirtBoardInfo *vbi, qemu_irq *pic, bool secure)
{
/* We create a standalone GIC v2 */
DeviceState *gicdev;
@@ -413,6 +413,9 @@ static void create_gic(VirtBoardInfo *vbi, qemu_irq *pic)
* interrupts; there are always 32 of the former (mandated by GIC spec).
*/
qdev_prop_set_uint32(gicdev, "num-irq", NUM_IRQS + 32);
+ if (!kvm_irqchip_in_kernel()) {
+ qdev_prop_set_bit(gicdev, "has-security-extensions", secure);
+ }
qdev_init_nofail(gicdev);
gicbusdev = SYS_BUS_DEVICE(gicdev);
sysbus_mmio_map(gicbusdev, 0, vbi->memmap[VIRT_GIC_DIST].base);
@@ -967,7 +970,7 @@ static void machvirt_init(MachineState *machine)
create_flash(vbi);
- create_gic(vbi, pic);
+ create_gic(vbi, pic, vms->secure);
create_uart(vbi, pic);
@@ -1044,8 +1047,11 @@ static void virt_instance_init(Object *obj)
{
VirtMachineState *vms = VIRT_MACHINE(obj);
- /* EL3 is enabled by default on virt */
- vms->secure = true;
+ /* EL3 is disabled by default on virt: this makes us consistent
+ * between KVM and TCG for this board, and it also allows us to
+ * boot UEFI blobs which assume no TrustZone support.
+ */
+ vms->secure = false;
object_property_add_bool(obj, "secure", virt_get_secure,
virt_set_secure, NULL);
object_property_set_description(obj, "secure",
OpenPOWER on IntegriCloud