On 31/5/24 09:46, Cédric Le Goater wrote:

Hello Jamin,
I refer to versal_create_apu_gic function, https://github.com/qemu/qemu/blob/master/hw/arm/xlnx-versal.c#L67
and updated aspeed_soc_ast2700_gic as following.
If you have any concerned about the new changes, please let me know.
Thanks-Jamin

static bool aspeed_soc_ast2700_gic(DeviceState *dev, Error **errp)

Please rename to aspeed_soc_ast2700_gic_realize()

{
     Aspeed27x0SoCState *a = ASPEED27X0_SOC(dev);
     AspeedSoCState *s = ASPEED_SOC(dev);
     AspeedSoCClass *sc = ASPEED_SOC_GET_CLASS(s);
     SysBusDevice *gicbusdev;
     DeviceState *gicdev;
     QList *redist_region_count;
     int i;

     object_initialize_child(OBJECT(a), "ast2700-gic", &a->gic,
                             gicv3_class_name());

and object_initialize_child() can be called in aspeed_soc_ast2700_init().

     gicbusdev = SYS_BUS_DEVICE(&a->gic);
     gicdev = DEVICE(&a->gic);
     qdev_prop_set_uint32(gicdev, "revision", 3);
     qdev_prop_set_uint32(gicdev, "num-cpu", sc->num_cpus);
     qdev_prop_set_uint32(gicdev, "num-irq", AST2700_MAX_IRQ);

     redist_region_count = qlist_new();
     qlist_append_int(redist_region_count, sc->num_cpus);
     qdev_prop_set_array(gicdev, "redist-region-count", redist_region_count);

     if (!sysbus_realize(gicbusdev, errp)) {
         return false;
     }
     sysbus_mmio_map(gicbusdev, 0, sc->memmap[ASPEED_GIC_DIST]);
     sysbus_mmio_map(gicbusdev, 1, sc->memmap[ASPEED_GIC_REDIST]);

     for (i = 0; i < sc->num_cpus; i++) {
         DeviceState *cpudev = DEVICE(qemu_get_cpu(i));

Could we avoid qemu_get_cpu() and use the cpu array of the SoC instead ?

If it is too invasive, I might take care of it later when respinning
https://lore.kernel.org/qemu-devel/20231212162935.42910-1-phi...@linaro.org

Reply via email to