On 1/21/19 7:50 PM, Peter Maydell wrote: > Currently the ARMv7M NVIC object's realize method assumes that the > CPU the NVIC is attached to is CPU 0, because it thinks there can > only ever be one CPU in the system. To allow a dual-Cortex-M33 > setup we need to remove this assumption; instead the armv7m > wrapper object tells the NVIC its CPU, in the same way that it > already tells the CPU what the NVIC is. > > Signed-off-by: Peter Maydell <peter.mayd...@linaro.org> > --- > hw/arm/armv7m.c | 6 ++++-- > hw/intc/armv7m_nvic.c | 3 +-- > 2 files changed, 5 insertions(+), 4 deletions(-) > > diff --git a/hw/arm/armv7m.c b/hw/arm/armv7m.c > index f4446528307..f9aa83d20ef 100644 > --- a/hw/arm/armv7m.c > +++ b/hw/arm/armv7m.c > @@ -178,10 +178,12 @@ static void armv7m_realize(DeviceState *dev, Error > **errp) > } > } > > - /* Tell the CPU where the NVIC is; it will fail realize if it doesn't > - * have one. > + /* > + * Tell the CPU where the NVIC is; it will fail realize if it doesn't > + * have one. Similarly, tell the NVIC where its CPU is. > */ > s->cpu->env.nvic = &s->nvic; > + s->nvic.cpu = s->cpu; > > object_property_set_bool(OBJECT(s->cpu), true, "realized", &err); > if (err != NULL) { > diff --git a/hw/intc/armv7m_nvic.c b/hw/intc/armv7m_nvic.c > index 0beefb05d44..790a3d95849 100644 > --- a/hw/intc/armv7m_nvic.c > +++ b/hw/intc/armv7m_nvic.c > @@ -2274,8 +2274,7 @@ static void armv7m_nvic_realize(DeviceState *dev, Error > **errp) > Error *err = NULL; > int regionlen; > > - s->cpu = ARM_CPU(qemu_get_cpu(0)); > - > + /* The armv7m container object will have set our CPU pointer */ > if (!s->cpu || !arm_feature(&s->cpu->env, ARM_FEATURE_M)) { > error_setg(errp, "The NVIC can only be used with a Cortex-M CPU"); > return; >
Reviewed-by: Philippe Mathieu-Daudé <phi...@redhat.com>