[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-arm] [PATCH v2 06/16] hw/arm/virt: use VirtMachineState.gic_versio
From: |
Andrew Jones |
Subject: |
[Qemu-arm] [PATCH v2 06/16] hw/arm/virt: use VirtMachineState.gic_version |
Date: |
Mon, 2 Jan 2017 21:01:43 +0100 |
machvirt_init may need to probe for the gic version. If so, then
make sure the result is written to VirtMachineState. With the
state up to date, use it instead of a local variable. This is a
cleanup that prepares for VirtMachineState to be passed to functions
even outside hw/arm/virt.c
Signed-off-by: Andrew Jones <address@hidden>
Reviewed-by: Igor Mammedov <address@hidden>
Acked-by: Michael S. Tsirkin <address@hidden>
---
hw/arm/virt.c | 35 +++++++++++++++++------------------
1 file changed, 17 insertions(+), 18 deletions(-)
diff --git a/hw/arm/virt.c b/hw/arm/virt.c
index d451bc4f6b9b..67c0abb30b5b 100644
--- a/hw/arm/virt.c
+++ b/hw/arm/virt.c
@@ -319,7 +319,7 @@ static void fdt_add_psci_node(const VirtMachineState *vms)
qemu_fdt_setprop_cell(fdt, "/psci", "migrate", migrate_fn);
}
-static void fdt_add_timer_nodes(const VirtMachineState *vms, int gictype)
+static void fdt_add_timer_nodes(const VirtMachineState *vms)
{
/* On real hardware these interrupts are level-triggered.
* On KVM they were edge-triggered before host kernel version 4.4,
@@ -347,7 +347,7 @@ static void fdt_add_timer_nodes(const VirtMachineState
*vms, int gictype)
irqflags = GIC_FDT_IRQ_FLAGS_EDGE_LO_HI;
}
- if (gictype == 2) {
+ if (vms->gic_version == 2) {
irqflags = deposit32(irqflags, GIC_FDT_IRQ_PPI_CPU_START,
GIC_FDT_IRQ_PPI_CPU_WIDTH,
(1 << vms->smp_cpus) - 1);
@@ -462,7 +462,7 @@ static void fdt_add_v2m_gic_node(VirtMachineState *vms)
qemu_fdt_setprop_cell(vms->fdt, "/intc/v2m", "phandle", vms->msi_phandle);
}
-static void fdt_add_gic_node(VirtMachineState *vms, int type)
+static void fdt_add_gic_node(VirtMachineState *vms)
{
vms->gic_phandle = qemu_fdt_alloc_phandle(vms->fdt);
qemu_fdt_setprop_cell(vms->fdt, "/", "interrupt-parent", vms->gic_phandle);
@@ -473,7 +473,7 @@ static void fdt_add_gic_node(VirtMachineState *vms, int
type)
qemu_fdt_setprop_cell(vms->fdt, "/intc", "#address-cells", 0x2);
qemu_fdt_setprop_cell(vms->fdt, "/intc", "#size-cells", 0x2);
qemu_fdt_setprop(vms->fdt, "/intc", "ranges", NULL, 0);
- if (type == 3) {
+ if (vms->gic_version == 3) {
qemu_fdt_setprop_string(vms->fdt, "/intc", "compatible",
"arm,gic-v3");
qemu_fdt_setprop_sized_cells(vms->fdt, "/intc", "reg",
@@ -500,7 +500,7 @@ static void fdt_add_gic_node(VirtMachineState *vms, int
type)
qemu_fdt_setprop_cell(vms->fdt, "/intc", "phandle", vms->gic_phandle);
}
-static void fdt_add_pmu_nodes(const VirtMachineState *vms, int gictype)
+static void fdt_add_pmu_nodes(const VirtMachineState *vms)
{
CPUState *cpu;
ARMCPU *armcpu;
@@ -514,7 +514,7 @@ static void fdt_add_pmu_nodes(const VirtMachineState *vms,
int gictype)
}
}
- if (gictype == 2) {
+ if (vms->gic_version == 2) {
irqflags = deposit32(irqflags, GIC_FDT_IRQ_PPI_CPU_START,
GIC_FDT_IRQ_PPI_CPU_WIDTH,
(1 << vms->smp_cpus) - 1);
@@ -570,14 +570,14 @@ static void create_v2m(VirtMachineState *vms, qemu_irq
*pic)
fdt_add_v2m_gic_node(vms);
}
-static void create_gic(VirtMachineState *vms, qemu_irq *pic, int type)
+static void create_gic(VirtMachineState *vms, qemu_irq *pic)
{
/* We create a standalone GIC */
VirtMachineClass *vmc = VIRT_MACHINE_GET_CLASS(vms);
DeviceState *gicdev;
SysBusDevice *gicbusdev;
const char *gictype;
- int i;
+ int type = vms->gic_version, i;
gictype = (type == 3) ? gicv3_class_name() : gic_class_name();
@@ -641,7 +641,7 @@ static void create_gic(VirtMachineState *vms, qemu_irq
*pic, int type)
pic[i] = qdev_get_gpio_in(gicdev, i);
}
- fdt_add_gic_node(vms, type);
+ fdt_add_gic_node(vms);
if (type == 3 && !vmc->no_its) {
create_its(vms, gicdev);
@@ -1237,7 +1237,6 @@ static void machvirt_init(MachineState *machine)
qemu_irq pic[NUM_IRQS];
MemoryRegion *sysmem = get_system_memory();
MemoryRegion *secure_sysmem = NULL;
- int gic_version = vms->gic_version;
int n, virt_max_cpus;
MemoryRegion *ram = g_new(MemoryRegion, 1);
const char *cpu_model = machine->cpu_model;
@@ -1258,14 +1257,14 @@ static void machvirt_init(MachineState *machine)
/* We can probe only here because during property set
* KVM is not available yet
*/
- if (!gic_version) {
+ if (!vms->gic_version) {
if (!kvm_enabled()) {
error_report("gic-version=host requires KVM");
exit(1);
}
- gic_version = kvm_arm_vgic_probe();
- if (!gic_version) {
+ vms->gic_version = kvm_arm_vgic_probe();
+ if (!vms->gic_version) {
error_report("Unable to determine GIC version supported by host");
exit(1);
}
@@ -1300,7 +1299,7 @@ static void machvirt_init(MachineState *machine)
/* The maximum number of CPUs depends on the GIC version, or on how
* many redistributors we can fit into the memory map.
*/
- if (gic_version == 3) {
+ if (vms->gic_version == 3) {
virt_max_cpus = vms->memmap[VIRT_GIC_REDIST].size / 0x20000;
clustersz = GICV3_TARGETLIST_BITS;
} else {
@@ -1417,7 +1416,7 @@ static void machvirt_init(MachineState *machine)
object_property_set_bool(cpuobj, true, "realized", NULL);
}
- fdt_add_timer_nodes(vms, gic_version);
+ fdt_add_timer_nodes(vms);
fdt_add_cpu_nodes(vms);
fdt_add_psci_node(vms);
@@ -1427,9 +1426,9 @@ static void machvirt_init(MachineState *machine)
create_flash(vms, sysmem, secure_sysmem ? secure_sysmem : sysmem);
- create_gic(vms, pic, gic_version);
+ create_gic(vms, pic);
- fdt_add_pmu_nodes(vms, gic_version);
+ fdt_add_pmu_nodes(vms);
create_uart(vms, pic, VIRT_UART, sysmem, serial_hds[0]);
@@ -1458,7 +1457,7 @@ static void machvirt_init(MachineState *machine)
guest_info->memmap = vms->memmap;
guest_info->irqmap = vms->irqmap;
guest_info->use_highmem = vms->highmem;
- guest_info->gic_version = gic_version;
+ guest_info->gic_version = vms->gic_version;
guest_info->no_its = vmc->no_its;
guest_info_state->machine_done.notify = virt_guest_info_machine_done;
qemu_add_machine_init_done_notifier(&guest_info_state->machine_done);
--
2.9.3
- [Qemu-arm] [PATCH v2 00/16] Remove VirtGuestInfo, Andrew Jones, 2017/01/02
- [Qemu-arm] [PATCH v2 01/16] hw/arm/virt-acpi-build: add all missing cpu_to_le's, Andrew Jones, 2017/01/02
- [Qemu-arm] [PATCH v2 02/16] hw/arm/virt-acpi-build: name GIC CPU Interface Structure appropriately, Andrew Jones, 2017/01/02
- [Qemu-arm] [PATCH v2 03/16] hw/arm/virt-acpi-build: gtdt: improve flag naming, Andrew Jones, 2017/01/02
- [Qemu-arm] [PATCH v2 04/16] hw/arm/virt-acpi-build: fadt: improve flag naming, Andrew Jones, 2017/01/02
- [Qemu-arm] [PATCH v2 05/16] hw/arm/virt: parameter passing cleanups, Andrew Jones, 2017/01/02
- [Qemu-arm] [PATCH v2 06/16] hw/arm/virt: use VirtMachineState.gic_version,
Andrew Jones <=
- [Qemu-arm] [PATCH v2 07/16] hw/arm/virt: eliminate struct VirtGuestInfoState, Andrew Jones, 2017/01/02
- [Qemu-arm] [PATCH v2 08/16] hw/arm/virt: remove include/hw/arm/virt-acpi-build.h, Andrew Jones, 2017/01/02
- [Qemu-arm] [PATCH v2 10/16] hw/arm/virt: pass VirtMachineState instead of VirtGuestInfo, Andrew Jones, 2017/01/02
- [Qemu-arm] [PATCH v2 09/16] hw/arm/virt: move VirtMachineState/Class to virt.h, Andrew Jones, 2017/01/02
- [Qemu-arm] [PATCH v2 12/16] hw/arm/virt-acpi-build: don't save VirtGuestInfo on AcpiBuildState, Andrew Jones, 2017/01/02
- [Qemu-arm] [PATCH v2 11/16] hw/arm/virt-acpi-build: remove redundant members from VirtGuestInfo, Andrew Jones, 2017/01/02
- [Qemu-arm] [PATCH v2 13/16] hw/arm/virt: remove VirtGuestInfo, Andrew Jones, 2017/01/02
- [Qemu-arm] [PATCH v2 15/16] hw/arm/virt-acpi-build: use SMC if booting in EL2, Andrew Jones, 2017/01/02
- [Qemu-arm] [PATCH v2 14/16] hw/arm/virt-acpi-build: Don't incorrectly claim architectural timer to be edge-triggered, Andrew Jones, 2017/01/02