[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 3/6] hw/arm/virt: Introduce finalize_gic_version()
From: |
Eric Auger |
Subject: |
[PATCH v2 3/6] hw/arm/virt: Introduce finalize_gic_version() |
Date: |
Sun, 1 Mar 2020 11:40:37 +0100 |
Let's move the code which freezes which gic-version to
be applied in a dedicated function. We also now set by
default the VIRT_GIC_VERSION_NO_SET. This eventually
turns into the legacy v2 choice in the finalize() function.
Signed-off-by: Eric Auger <address@hidden>
---
hw/arm/virt.c | 54 ++++++++++++++++++++++++++-----------------
include/hw/arm/virt.h | 1 +
2 files changed, 34 insertions(+), 21 deletions(-)
diff --git a/hw/arm/virt.c b/hw/arm/virt.c
index b449a445de..338d56999f 100644
--- a/hw/arm/virt.c
+++ b/hw/arm/virt.c
@@ -1534,6 +1534,37 @@ static void virt_set_memmap(VirtMachineState *vms)
}
}
+/*
+ * finalize_gic_version - Determines the final gic_version
+ * according to the gic-version property
+ *
+ * Default GIC type is v2
+ */
+static void finalize_gic_version(VirtMachineState *vms)
+{
+ if (vms->gic_version == VIRT_GIC_VERSION_HOST ||
+ vms->gic_version == VIRT_GIC_VERSION_MAX) {
+ if (!kvm_enabled()) {
+ if (vms->gic_version == VIRT_GIC_VERSION_HOST) {
+ error_report("gic-version=host requires KVM");
+ exit(1);
+ } else {
+ /* "max": currently means 3 for TCG */
+ vms->gic_version = VIRT_GIC_VERSION_3;
+ }
+ } else {
+ vms->gic_version = kvm_arm_vgic_probe();
+ if (!vms->gic_version) {
+ error_report(
+ "Unable to determine GIC version supported by host");
+ exit(1);
+ }
+ }
+ } else if (vms->gic_version == VIRT_GIC_VERSION_NOSEL) {
+ vms->gic_version = VIRT_GIC_VERSION_2;
+ }
+}
+
static void machvirt_init(MachineState *machine)
{
VirtMachineState *vms = VIRT_MACHINE(machine);
@@ -1560,25 +1591,7 @@ static void machvirt_init(MachineState *machine)
/* We can probe only here because during property set
* KVM is not available yet
*/
- if (vms->gic_version == VIRT_GIC_VERSION_HOST ||
- vms->gic_version == VIRT_GIC_VERSION_MAX) {
- if (!kvm_enabled()) {
- if (vms->gic_version == VIRT_GIC_VERSION_HOST) {
- error_report("gic-version=host requires KVM");
- exit(1);
- } else {
- /* "max": currently means 3 for TCG */
- vms->gic_version = VIRT_GIC_VERSION_3;
- }
- } else {
- vms->gic_version = kvm_arm_vgic_probe();
- if (!vms->gic_version) {
- error_report(
- "Unable to determine GIC version supported by host");
- exit(1);
- }
- }
- }
+ finalize_gic_version(vms);
if (!cpu_type_valid(machine->cpu_type)) {
error_report("mach-virt: CPU type %s not supported",
machine->cpu_type);
@@ -2138,8 +2151,7 @@ static void virt_instance_init(Object *obj)
"Set on/off to enable/disable using "
"physical address space above 32 bits",
NULL);
- /* Default GIC type is v2 */
- vms->gic_version = VIRT_GIC_VERSION_2;
+ vms->gic_version = VIRT_GIC_VERSION_NOSEL;
object_property_add_str(obj, "gic-version", virt_get_gic_version,
virt_set_gic_version, NULL);
object_property_set_description(obj, "gic-version",
diff --git a/include/hw/arm/virt.h b/include/hw/arm/virt.h
index 6325b98269..5785416480 100644
--- a/include/hw/arm/virt.h
+++ b/include/hw/arm/virt.h
@@ -95,6 +95,7 @@ typedef enum VirtIOMMUType {
VIRT_IOMMU_VIRTIO,
} VirtIOMMUType;
+#define VIRT_GIC_VERSION_NOSEL (-2)
#define VIRT_GIC_VERSION_MAX (-1)
#define VIRT_GIC_VERSION_HOST 0
#define VIRT_GIC_VERSION_2 2
--
2.20.1
- [PATCH v2 0/6] hw/arm/virt: kvm: allow gicv3 by default if v2 cannot work, Eric Auger, 2020/03/01
- [PATCH v2 1/6] hw/arm/virt: Document 'max' value in gic-version property description, Eric Auger, 2020/03/01
- [PATCH v2 2/6] hw/arm/virt: Use VIRT_GIC_VERSION defines, Eric Auger, 2020/03/01
- [PATCH v2 3/6] hw/arm/virt: Introduce finalize_gic_version(),
Eric Auger <=
- [PATCH v2 4/6] target/arm/kvm: Let kvm_arm_vgic_probe() return a bitmap, Eric Auger, 2020/03/01
- [PATCH v2 5/6] hw/arm/virt: kvm: Check the chosen gic version is supported by the host, Eric Auger, 2020/03/01
- [PATCH v2 6/6] hw/arm/virt: kvm: allow gicv3 by default if v2 cannot work, Eric Auger, 2020/03/01
- Re: [PATCH v2 0/6] hw/arm/virt: kvm: allow gicv3 by default if v2 cannot work, Andrew Jones, 2020/03/02