summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Sandberg <andreas.sandberg@arm.com>2017-02-14 15:09:18 -0600
committerAndreas Sandberg <andreas.sandberg@arm.com>2017-02-14 15:09:18 -0600
commit092b06b7453a9125a0519c623cbdd3fcfc48751b (patch)
tree5566b27dcadf8235e146fcf9039c20b706b865c2
parent0edf6dc9560364691ca0d359ab8321b936f0ec85 (diff)
downloadgem5-092b06b7453a9125a0519c623cbdd3fcfc48751b.tar.xz
arm, kvm: Automatically use the MuxingKvmGic
Automatically use the MuxingKvmGic in the VExpress_GEM5_V1 platform. This removes the need to patch the host kernel or the platform configuration when using KVM on ARM. Change-Id: Ib1ed9b3b849b80c449ef1b62b83748f3f54ada26 Reviewed-by: Curtis Dunham <curtis.dunham@arm.com>
-rw-r--r--src/dev/arm/RealView.py17
1 files changed, 15 insertions, 2 deletions
diff --git a/src/dev/arm/RealView.py b/src/dev/arm/RealView.py
index 8b9b4c20d..4db732d38 100644
--- a/src/dev/arm/RealView.py
+++ b/src/dev/arm/RealView.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2009-2015 ARM Limited
+# Copyright (c) 2009-2017 ARM Limited
# All rights reserved.
#
# The license below extends only to copyright in the software and shall
@@ -57,6 +57,18 @@ from EnergyCtrl import EnergyCtrl
from ClockDomain import SrcClockDomain
from SubSystem import SubSystem
+# Platforms with KVM support should generally use in-kernel GIC
+# emulation. Use a GIC model that automatically switches between
+# gem5's GIC model and KVM's GIC model if KVM is available.
+try:
+ from KvmGic import MuxingKvmGic
+ kvm_gicv2_class = MuxingKvmGic
+except ImportError:
+ # KVM support wasn't compiled into gem5. Fallback to a
+ # software-only GIC.
+ kvm_gicv2_class = Pl390
+ pass
+
class AmbaPioDevice(BasicPioDevice):
type = 'AmbaPioDevice'
abstract = True
@@ -883,7 +895,8 @@ Interrupts:
dcc = CoreTile2A15DCC()
### On-chip devices ###
- gic = Pl390(dist_addr=0x2c001000, cpu_addr=0x2c002000, it_lines=512)
+ gic = kvm_gicv2_class(dist_addr=0x2c001000, cpu_addr=0x2c002000,
+ it_lines=512)
vgic = VGic(vcpu_addr=0x2c006000, hv_addr=0x2c004000, ppint=25)
gicv2m = Gicv2m()
gicv2m.frames = [