mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-09 02:24:58 -06:00
hw/arm/armsse: Put each CPU in its own cluster object
Create a cluster object to hold each CPU in the SSE. They are logically distinct and may be configured differently (for instance one may not have an FPU where the other does). Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-id: 20190121185118.18550-14-peter.maydell@linaro.org
This commit is contained in:
parent
d847ca5128
commit
7cd3a2e0d5
2 changed files with 30 additions and 3 deletions
|
@ -147,9 +147,22 @@ static void armsse_init(Object *obj)
|
|||
memory_region_init(&s->container, obj, "armsse-container", UINT64_MAX);
|
||||
|
||||
for (i = 0; i < info->num_cpus; i++) {
|
||||
char *name = g_strdup_printf("armv7m%d", i);
|
||||
sysbus_init_child_obj(obj, name, &s->armv7m[i], sizeof(s->armv7m),
|
||||
TYPE_ARMV7M);
|
||||
/*
|
||||
* We put each CPU in its own cluster as they are logically
|
||||
* distinct and may be configured differently.
|
||||
*/
|
||||
char *name;
|
||||
|
||||
name = g_strdup_printf("cluster%d", i);
|
||||
object_initialize_child(obj, name, &s->cluster[i],
|
||||
sizeof(s->cluster[i]), TYPE_CPU_CLUSTER,
|
||||
&error_abort, NULL);
|
||||
qdev_prop_set_uint32(DEVICE(&s->cluster[i]), "cluster-id", i);
|
||||
g_free(name);
|
||||
|
||||
name = g_strdup_printf("armv7m%d", i);
|
||||
sysbus_init_child_obj(OBJECT(&s->cluster[i]), name,
|
||||
&s->armv7m[i], sizeof(s->armv7m), TYPE_ARMV7M);
|
||||
qdev_prop_set_string(DEVICE(&s->armv7m[i]), "cpu-type",
|
||||
ARM_CPU_TYPE_NAME("cortex-m33"));
|
||||
g_free(name);
|
||||
|
@ -406,6 +419,18 @@ static void armsse_realize(DeviceState *dev, Error **errp)
|
|||
error_propagate(errp, err);
|
||||
return;
|
||||
}
|
||||
/*
|
||||
* The cluster must be realized after the armv7m container, as
|
||||
* the container's CPU object is only created on realize, and the
|
||||
* CPU must exist and have been parented into the cluster before
|
||||
* the cluster is realized.
|
||||
*/
|
||||
object_property_set_bool(OBJECT(&s->cluster[i]),
|
||||
true, "realized", &err);
|
||||
if (err) {
|
||||
error_propagate(errp, err);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Connect EXP_IRQ/EXP_CPUn_IRQ GPIOs to the NVIC's lines 32 and up */
|
||||
s->exp_irqs[i] = g_new(qemu_irq, s->exp_numirq);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue