Hi Luc, On Wed, Jul 16, 2025 at 11:54:20AM +0200, Luc Michel wrote: > Add the per_cluster_gic switch to the VersalCpuClusterMap structure. > When set, this indicates that a GIC instance should by created > per-cluster instead of globaly for the whole RPU or APU. This is in
s/globaly/globally/ Otherwise: Reviewed-by: Francisco Iglesias <francisco.igles...@amd.com> > preparation for versal2. > > Signed-off-by: Luc Michel <luc.mic...@amd.com> > --- > hw/arm/xlnx-versal.c | 15 +++++++++++++-- > 1 file changed, 13 insertions(+), 2 deletions(-) > > diff --git a/hw/arm/xlnx-versal.c b/hw/arm/xlnx-versal.c > index aef53876f26..9d900fe3127 100644 > --- a/hw/arm/xlnx-versal.c > +++ b/hw/arm/xlnx-versal.c > @@ -86,10 +86,15 @@ enum StartPoweredOffMode { > SPO_ALL, > }; > > typedef struct VersalCpuClusterMap { > VersalGicMap gic; > + /* > + * true: one GIC per cluster. > + * false: one GIC for all CPUs > + */ > + bool per_cluster_gic; > > const char *name; > const char *cpu_model; > size_t num_core; > size_t num_cluster; > @@ -828,16 +833,22 @@ static void versal_create_cpu_cluster(Versal *s, const > VersalCpuClusterMap *map) > DeviceState *cpu = versal_create_cpu(s, map, cluster, mr, i, j); > > cpus[i * map->num_core + j] = cpu; > } > > + if (map->per_cluster_gic) { > + versal_create_and_connect_gic(s, map, mr, &cpus[i * > map->num_core], > + map->num_core); > + } > } > > qdev_realize_and_unref(cluster, NULL, &error_fatal); > > - versal_create_and_connect_gic(s, map, mr, cpus, > - map->num_cluster * map->num_core); > + if (!map->per_cluster_gic) { > + versal_create_and_connect_gic(s, map, mr, cpus, > + map->num_cluster * map->num_core); > + } > > has_gtimer = arm_feature(&ARM_CPU(cpus[0])->env, > ARM_FEATURE_GENERIC_TIMER); > if (map->dtb_expose && has_gtimer) { > qemu_fdt_add_subnode(s->cfg.fdt, "/timer"); > qemu_fdt_setprop_cells(s->cfg.fdt, "/timer", "interrupts", > -- > 2.50.0 >