hw/arm/virt: Introduce finalize_gic_version()
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 <eric.auger@redhat.com> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Andrew Jones <drjones@redhat.com> Message-id: 20200311131618.7187-4-eric.auger@redhat.com Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
d04460e587
commit
36bf4ec8c8
@ -1535,6 +1535,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)
|
static void machvirt_init(MachineState *machine)
|
||||||
{
|
{
|
||||||
VirtMachineState *vms = VIRT_MACHINE(machine);
|
VirtMachineState *vms = VIRT_MACHINE(machine);
|
||||||
@ -1561,25 +1592,7 @@ static void machvirt_init(MachineState *machine)
|
|||||||
/* We can probe only here because during property set
|
/* We can probe only here because during property set
|
||||||
* KVM is not available yet
|
* KVM is not available yet
|
||||||
*/
|
*/
|
||||||
if (vms->gic_version == VIRT_GIC_VERSION_HOST ||
|
finalize_gic_version(vms);
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!cpu_type_valid(machine->cpu_type)) {
|
if (!cpu_type_valid(machine->cpu_type)) {
|
||||||
error_report("mach-virt: CPU type %s not supported", machine->cpu_type);
|
error_report("mach-virt: CPU type %s not supported", machine->cpu_type);
|
||||||
@ -2140,8 +2153,7 @@ static void virt_instance_init(Object *obj)
|
|||||||
"Set on/off to enable/disable using "
|
"Set on/off to enable/disable using "
|
||||||
"physical address space above 32 bits",
|
"physical address space above 32 bits",
|
||||||
NULL);
|
NULL);
|
||||||
/* Default GIC type is v2 */
|
vms->gic_version = VIRT_GIC_VERSION_NOSEL;
|
||||||
vms->gic_version = VIRT_GIC_VERSION_2;
|
|
||||||
object_property_add_str(obj, "gic-version", virt_get_gic_version,
|
object_property_add_str(obj, "gic-version", virt_get_gic_version,
|
||||||
virt_set_gic_version, NULL);
|
virt_set_gic_version, NULL);
|
||||||
object_property_set_description(obj, "gic-version",
|
object_property_set_description(obj, "gic-version",
|
||||||
|
@ -100,6 +100,7 @@ typedef enum VirtGICType {
|
|||||||
VIRT_GIC_VERSION_HOST,
|
VIRT_GIC_VERSION_HOST,
|
||||||
VIRT_GIC_VERSION_2,
|
VIRT_GIC_VERSION_2,
|
||||||
VIRT_GIC_VERSION_3,
|
VIRT_GIC_VERSION_3,
|
||||||
|
VIRT_GIC_VERSION_NOSEL,
|
||||||
} VirtGICType;
|
} VirtGICType;
|
||||||
|
|
||||||
typedef struct MemMapEntry {
|
typedef struct MemMapEntry {
|
||||||
|
Loading…
Reference in New Issue
Block a user