Skip to content

Commit

Permalink
Merge tag 'qdev-array-prop' of https://repo.or.cz/qemu/kevin into sta…
Browse files Browse the repository at this point in the history
…ging

qdev: Make array properties user accessible again

# -----BEGIN PGP SIGNATURE-----
#
# iQJFBAABCAAvFiEE3D3rFZqa+V09dFb+fwmycsiPL9YFAmVKhlkRHGt3b2xmQHJl
# ZGhhdC5jb20ACgkQfwmycsiPL9bOJhAAqoJufGlHscmUpELjEjUt00wjA1fEwePz
# QvQEPlpqjhEmM5I4bgAzU4ajnOceZHGgtfsg91rQJOH8BGPgakZSmHnlkRQg0Ela
# KrsvSrReLKviYD/024Wt5LUSKuKlv4MpeHWZyMo7rwbNM67LzkDtQ3QlQX9PlIM7
# x32RDEwa+OGhhQH7CjRaWrko2pi8XnhtGyFJLgEdIo80tUwO4wHZeREIBK0GpPss
# n4qg+UQ4zb/nn4as+3XRtnsLGbbitock252/L3VwoR7tWNpMckXuYdw8OFmmVkEx
# H0ZvXeWvg/tiLh1/cz+y8+qjlKpLdMWzM+FgCivJxujGUiSRWnOwL5oXhZA5OAE1
# k9AcAXHQRyG/j9d/t6HmEXPYFoPU4HAnwuyg6VVl8ER5Q5U/05JiedWgALe0Cd5o
# n2bmuMz3XhTQQh6tgmwRTZegzkfm/QeRuNed2kjQvbiUOKgy/I3B3M0bAaR6wfDL
# agp+y9/ptLsZ6wAXNiotnD0YvksRFpyS4rEyMrCyvUNNJ4BwCIIiNUzK70CEW529
# WVjCYI5V8IjBt8E5iMv9Il0qZaguNf1lAuaZYJvEjJxa242J41DmHQzhIaQSl6F1
# DnTG392md2mgoBnaMNnIV6AovALuE18pk0tTyu9aZ8jWbX0M0YnSnN7CytIj71xq
# yNSlUwePs3Q=
# =ddRC
# -----END PGP SIGNATURE-----
# gpg: Signature made Wed 08 Nov 2023 02:47:53 HKT
# gpg:                using RSA key DC3DEB159A9AF95D3D7456FE7F09B272C88F2FD6
# gpg:                issuer "kwolf@redhat.com"
# gpg: Good signature from "Kevin Wolf <kwolf@redhat.com>" [full]
# Primary key fingerprint: DC3D EB15 9A9A F95D 3D74  56FE 7F09 B272 C88F 2FD6

* tag 'qdev-array-prop' of https://repo.or.cz/qemu/kevin:
  qdev: Rework array properties based on list visitor
  qdev: Make netdev properties work as list elements
  qom: Add object_property_set_default_list()
  hw/rx/rx62n: Use qdev_prop_set_array()
  hw/arm/xlnx-versal: Use qdev_prop_set_array()
  hw/arm/virt: Use qdev_prop_set_array()
  hw/arm/vexpress: Use qdev_prop_set_array()
  hw/arm/sbsa-ref: Use qdev_prop_set_array()
  hw/arm/mps2: Use qdev_prop_set_array()
  hw/arm/mps2-tz: Use qdev_prop_set_array()
  hw/i386/pc: Use qdev_prop_set_array()

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
  • Loading branch information
stefanhaRH committed Nov 8, 2023
2 parents ed1d873 + d6df005 commit 9b9bb19
Show file tree
Hide file tree
Showing 13 changed files with 266 additions and 148 deletions.
10 changes: 7 additions & 3 deletions hw/arm/mps2-tz.c
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
#include "qemu/units.h"
#include "qemu/cutils.h"
#include "qapi/error.h"
#include "qapi/qmp/qlist.h"
#include "qemu/error-report.h"
#include "hw/arm/boot.h"
#include "hw/arm/armv7m.h"
Expand Down Expand Up @@ -461,6 +462,7 @@ static MemoryRegion *make_scc(MPS2TZMachineState *mms, void *opaque,
MPS2SCC *scc = opaque;
DeviceState *sccdev;
MPS2TZMachineClass *mmc = MPS2TZ_MACHINE_GET_CLASS(mms);
QList *oscclk;
uint32_t i;

object_initialize_child(OBJECT(mms), "scc", scc, TYPE_MPS2_SCC);
Expand All @@ -469,11 +471,13 @@ static MemoryRegion *make_scc(MPS2TZMachineState *mms, void *opaque,
qdev_prop_set_uint32(sccdev, "scc-cfg4", 0x2);
qdev_prop_set_uint32(sccdev, "scc-aid", 0x00200008);
qdev_prop_set_uint32(sccdev, "scc-id", mmc->scc_id);
qdev_prop_set_uint32(sccdev, "len-oscclk", mmc->len_oscclk);

oscclk = qlist_new();
for (i = 0; i < mmc->len_oscclk; i++) {
g_autofree char *propname = g_strdup_printf("oscclk[%u]", i);
qdev_prop_set_uint32(sccdev, propname, mmc->oscclk[i]);
qlist_append_int(oscclk, mmc->oscclk[i]);
}
qdev_prop_set_array(sccdev, "oscclk", oscclk);

sysbus_realize(SYS_BUS_DEVICE(scc), &error_fatal);
return sysbus_mmio_get_region(SYS_BUS_DEVICE(sccdev), 0);
}
Expand Down
12 changes: 8 additions & 4 deletions hw/arm/mps2.c
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
#include "net/net.h"
#include "hw/watchdog/cmsdk-apb-watchdog.h"
#include "hw/qdev-clock.h"
#include "qapi/qmp/qlist.h"
#include "qom/object.h"

typedef enum MPS2FPGAType {
Expand Down Expand Up @@ -138,6 +139,7 @@ static void mps2_common_init(MachineState *machine)
MemoryRegion *system_memory = get_system_memory();
MachineClass *mc = MACHINE_GET_CLASS(machine);
DeviceState *armv7m, *sccdev;
QList *oscclk;
int i;

if (strcmp(machine->cpu_type, mc->default_cpu_type) != 0) {
Expand Down Expand Up @@ -402,10 +404,12 @@ static void mps2_common_init(MachineState *machine)
qdev_prop_set_uint32(sccdev, "scc-aid", 0x00200008);
qdev_prop_set_uint32(sccdev, "scc-id", mmc->scc_id);
/* All these FPGA images have the same OSCCLK configuration */
qdev_prop_set_uint32(sccdev, "len-oscclk", 3);
qdev_prop_set_uint32(sccdev, "oscclk[0]", 50000000);
qdev_prop_set_uint32(sccdev, "oscclk[1]", 24576000);
qdev_prop_set_uint32(sccdev, "oscclk[2]", 25000000);
oscclk = qlist_new();
qlist_append_int(oscclk, 50000000);
qlist_append_int(oscclk, 24576000);
qlist_append_int(oscclk, 25000000);
qdev_prop_set_array(sccdev, "oscclk", oscclk);

sysbus_realize(SYS_BUS_DEVICE(&mms->scc), &error_fatal);
sysbus_mmio_map(SYS_BUS_DEVICE(sccdev), 0, 0x4002f000);
object_initialize_child(OBJECT(mms), "fpgaio",
Expand Down
7 changes: 5 additions & 2 deletions hw/arm/sbsa-ref.c
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
#include "hw/char/pl011.h"
#include "hw/watchdog/sbsa_gwdt.h"
#include "net/net.h"
#include "qapi/qmp/qlist.h"
#include "qom/object.h"

#define RAMLIMIT_GB 8192
Expand Down Expand Up @@ -437,6 +438,7 @@ static void create_gic(SBSAMachineState *sms, MemoryRegion *mem)
SysBusDevice *gicbusdev;
const char *gictype;
uint32_t redist0_capacity, redist0_count;
QList *redist_region_count;
int i;

gictype = gicv3_class_name();
Expand All @@ -455,8 +457,9 @@ static void create_gic(SBSAMachineState *sms, MemoryRegion *mem)
sbsa_ref_memmap[SBSA_GIC_REDIST].size / GICV3_REDIST_SIZE;
redist0_count = MIN(smp_cpus, redist0_capacity);

qdev_prop_set_uint32(sms->gic, "len-redist-region-count", 1);
qdev_prop_set_uint32(sms->gic, "redist-region-count[0]", redist0_count);
redist_region_count = qlist_new();
qlist_append_int(redist_region_count, redist0_count);
qdev_prop_set_array(sms->gic, "redist-region-count", redist_region_count);

object_property_set_link(OBJECT(sms->gic), "sysmem",
OBJECT(mem), &error_fatal);
Expand Down
21 changes: 11 additions & 10 deletions hw/arm/vexpress.c
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
#include "hw/cpu/a15mpcore.h"
#include "hw/i2c/arm_sbcon_i2c.h"
#include "hw/sd/sd.h"
#include "qapi/qmp/qlist.h"
#include "qom/object.h"
#include "audio/audio.h"

Expand Down Expand Up @@ -544,6 +545,7 @@ static void vexpress_common_init(MachineState *machine)
ram_addr_t vram_size, sram_size;
MemoryRegion *sysmem = get_system_memory();
const hwaddr *map = daughterboard->motherboard_map;
QList *db_voltage, *db_clock;
int i;

daughterboard->init(vms, machine->ram_size, machine->cpu_type, pic);
Expand Down Expand Up @@ -584,20 +586,19 @@ static void vexpress_common_init(MachineState *machine)
sysctl = qdev_new("realview_sysctl");
qdev_prop_set_uint32(sysctl, "sys_id", sys_id);
qdev_prop_set_uint32(sysctl, "proc_id", daughterboard->proc_id);
qdev_prop_set_uint32(sysctl, "len-db-voltage",
daughterboard->num_voltage_sensors);

db_voltage = qlist_new();
for (i = 0; i < daughterboard->num_voltage_sensors; i++) {
char *propname = g_strdup_printf("db-voltage[%d]", i);
qdev_prop_set_uint32(sysctl, propname, daughterboard->voltages[i]);
g_free(propname);
qlist_append_int(db_voltage, daughterboard->voltages[i]);
}
qdev_prop_set_uint32(sysctl, "len-db-clock",
daughterboard->num_clocks);
qdev_prop_set_array(sysctl, "db-voltage", db_voltage);

db_clock = qlist_new();
for (i = 0; i < daughterboard->num_clocks; i++) {
char *propname = g_strdup_printf("db-clock[%d]", i);
qdev_prop_set_uint32(sysctl, propname, daughterboard->clocks[i]);
g_free(propname);
qlist_append_int(db_clock, daughterboard->clocks[i]);
}
qdev_prop_set_array(sysctl, "db-clock", db_clock);

sysbus_realize_and_unref(SYS_BUS_DEVICE(sysctl), &error_fatal);
sysbus_mmio_map(SYS_BUS_DEVICE(sysctl), 0, map[VE_SYSREGS]);

Expand Down
31 changes: 17 additions & 14 deletions hw/arm/virt.c
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@
#include "hw/firmware/smbios.h"
#include "qapi/visitor.h"
#include "qapi/qapi-visit-common.h"
#include "qapi/qmp/qlist.h"
#include "standard-headers/linux/input.h"
#include "hw/arm/smmuv3.h"
#include "hw/acpi/acpi.h"
Expand Down Expand Up @@ -752,14 +753,23 @@ static void create_gic(VirtMachineState *vms, MemoryRegion *mem)
}

if (vms->gic_version != VIRT_GIC_VERSION_2) {
QList *redist_region_count;
uint32_t redist0_capacity = virt_redist_capacity(vms, VIRT_GIC_REDIST);
uint32_t redist0_count = MIN(smp_cpus, redist0_capacity);

nb_redist_regions = virt_gicv3_redist_region_count(vms);

qdev_prop_set_uint32(vms->gic, "len-redist-region-count",
nb_redist_regions);
qdev_prop_set_uint32(vms->gic, "redist-region-count[0]", redist0_count);
redist_region_count = qlist_new();
qlist_append_int(redist_region_count, redist0_count);
if (nb_redist_regions == 2) {
uint32_t redist1_capacity =
virt_redist_capacity(vms, VIRT_HIGH_GIC_REDIST2);

qlist_append_int(redist_region_count,
MIN(smp_cpus - redist0_count, redist1_capacity));
}
qdev_prop_set_array(vms->gic, "redist-region-count",
redist_region_count);

if (!kvm_irqchip_in_kernel()) {
if (vms->tcg_its) {
Expand All @@ -768,14 +778,6 @@ static void create_gic(VirtMachineState *vms, MemoryRegion *mem)
qdev_prop_set_bit(vms->gic, "has-lpi", true);
}
}

if (nb_redist_regions == 2) {
uint32_t redist1_capacity =
virt_redist_capacity(vms, VIRT_HIGH_GIC_REDIST2);

qdev_prop_set_uint32(vms->gic, "redist-region-count[1]",
MIN(smp_cpus - redist0_count, redist1_capacity));
}
} else {
if (!kvm_irqchip_in_kernel()) {
qdev_prop_set_bit(vms->gic, "has-virtualization-extensions",
Expand Down Expand Up @@ -2748,6 +2750,7 @@ static void virt_machine_device_pre_plug_cb(HotplugHandler *hotplug_dev,
virtio_md_pci_pre_plug(VIRTIO_MD_PCI(dev), MACHINE(hotplug_dev), errp);
} else if (object_dynamic_cast(OBJECT(dev), TYPE_VIRTIO_IOMMU_PCI)) {
hwaddr db_start = 0, db_end = 0;
QList *reserved_regions;
char *resv_prop_str;

if (vms->iommu != VIRT_IOMMU_NONE) {
Expand All @@ -2774,9 +2777,9 @@ static void virt_machine_device_pre_plug_cb(HotplugHandler *hotplug_dev,
db_start, db_end,
VIRTIO_IOMMU_RESV_MEM_T_MSI);

object_property_set_uint(OBJECT(dev), "len-reserved-regions", 1, errp);
object_property_set_str(OBJECT(dev), "reserved-regions[0]",
resv_prop_str, errp);
reserved_regions = qlist_new();
qlist_append_str(reserved_regions, resv_prop_str);
qdev_prop_set_array(dev, "reserved-regions", reserved_regions);
g_free(resv_prop_str);
}
}
Expand Down
9 changes: 7 additions & 2 deletions hw/arm/xlnx-versal.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
#include "qemu/osdep.h"
#include "qemu/units.h"
#include "qapi/error.h"
#include "qapi/qmp/qlist.h"
#include "qemu/module.h"
#include "hw/sysbus.h"
#include "net/net.h"
Expand Down Expand Up @@ -69,6 +70,7 @@ static void versal_create_apu_gic(Versal *s, qemu_irq *pic)
};
SysBusDevice *gicbusdev;
DeviceState *gicdev;
QList *redist_region_count;
int nr_apu_cpus = ARRAY_SIZE(s->fpd.apu.cpu);
int i;

Expand All @@ -79,8 +81,11 @@ static void versal_create_apu_gic(Versal *s, qemu_irq *pic)
qdev_prop_set_uint32(gicdev, "revision", 3);
qdev_prop_set_uint32(gicdev, "num-cpu", nr_apu_cpus);
qdev_prop_set_uint32(gicdev, "num-irq", XLNX_VERSAL_NR_IRQS + 32);
qdev_prop_set_uint32(gicdev, "len-redist-region-count", 1);
qdev_prop_set_uint32(gicdev, "redist-region-count[0]", nr_apu_cpus);

redist_region_count = qlist_new();
qlist_append_int(redist_region_count, nr_apu_cpus);
qdev_prop_set_array(gicdev, "redist-region-count", redist_region_count);

qdev_prop_set_bit(gicdev, "has-security-extensions", true);

sysbus_realize(SYS_BUS_DEVICE(&s->fpd.apu.gic), &error_fatal);
Expand Down
2 changes: 1 addition & 1 deletion hw/core/qdev-properties-system.c
Original file line number Diff line number Diff line change
Expand Up @@ -450,7 +450,7 @@ static void set_netdev(Object *obj, Visitor *v, const char *name,
peers_ptr->queues = queues;

out:
error_set_from_qdev_prop_error(errp, err, obj, name, str);
error_set_from_qdev_prop_error(errp, err, obj, prop->name, str);
g_free(str);
}

Expand Down

0 comments on commit 9b9bb19

Please sign in to comment.