Message ID | 20231020150627.56893-3-philmd@linaro.org |
---|---|
State | New |
Headers | show |
Series | hw/m68k: Strengthen QOM/SysBus API uses | expand |
Am Fri, 20 Oct 2023 17:06:22 +0200 schrieb Philippe Mathieu-Daudé <philmd@linaro.org>: > Avoid the interrupt controller directly access the first cpu > via the qemu_get_cpu() call. Pass it from the board code. > > Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> > --- > hw/m68k/an5206.c | 2 ++ > hw/m68k/mcf5206.c | 9 ++++++++- > 2 files changed, 10 insertions(+), 1 deletion(-) > > diff --git a/hw/m68k/an5206.c b/hw/m68k/an5206.c > index 11ae4c9795..f51c93088f 100644 > --- a/hw/m68k/an5206.c > +++ b/hw/m68k/an5206.c > @@ -26,6 +26,8 @@ static void mcf5206_init(MemoryRegion *sysmem, uint32_t base) > SysBusDevice *s; > > dev = qdev_new(TYPE_MCF5206_MBAR); > + object_property_set_link(OBJECT(dev), "m68k-cpu", > + OBJECT(first_cpu), &error_abort); > s = SYS_BUS_DEVICE(dev); > sysbus_realize_and_unref(s, &error_fatal); It might be nicer to pass "cpu" as parameter from an5206_init(). Anyway: Tested-by: Thomas Huth <huth@tuxfamily.org> Reviewed-by: Thomas Huth <huth@tuxfamily.org>
diff --git a/hw/m68k/an5206.c b/hw/m68k/an5206.c index 11ae4c9795..f51c93088f 100644 --- a/hw/m68k/an5206.c +++ b/hw/m68k/an5206.c @@ -26,6 +26,8 @@ static void mcf5206_init(MemoryRegion *sysmem, uint32_t base) SysBusDevice *s; dev = qdev_new(TYPE_MCF5206_MBAR); + object_property_set_link(OBJECT(dev), "m68k-cpu", + OBJECT(first_cpu), &error_abort); s = SYS_BUS_DEVICE(dev); sysbus_realize_and_unref(s, &error_fatal); diff --git a/hw/m68k/mcf5206.c b/hw/m68k/mcf5206.c index 2ab1b4f059..f920ca2ceb 100644 --- a/hw/m68k/mcf5206.c +++ b/hw/m68k/mcf5206.c @@ -10,6 +10,7 @@ #include "qemu/error-report.h" #include "qemu/log.h" #include "cpu.h" +#include "hw/qdev-properties.h" #include "hw/boards.h" #include "hw/irq.h" #include "hw/m68k/mcf.h" @@ -601,13 +602,19 @@ static void mcf5206_mbar_realize(DeviceState *dev, Error **errp) s->timer[1] = m5206_timer_init(s->pic[10]); s->uart[0] = mcf_uart_init(s->pic[12], serial_hd(0)); s->uart[1] = mcf_uart_init(s->pic[13], serial_hd(1)); - s->cpu = M68K_CPU(qemu_get_cpu(0)); } +static Property mcf5206_mbar_properties[] = { + DEFINE_PROP_LINK("m68k-cpu", m5206_mbar_state, cpu, + TYPE_M68K_CPU, M68kCPU *), + DEFINE_PROP_END_OF_LIST(), +}; + static void mcf5206_mbar_class_init(ObjectClass *oc, void *data) { DeviceClass *dc = DEVICE_CLASS(oc); + device_class_set_props(dc, mcf5206_mbar_properties); set_bit(DEVICE_CATEGORY_MISC, dc->categories); dc->desc = "MCF5206 system integration module"; dc->realize = mcf5206_mbar_realize;
Avoid the interrupt controller directly access the first cpu via the qemu_get_cpu() call. Pass it from the board code. Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> --- hw/m68k/an5206.c | 2 ++ hw/m68k/mcf5206.c | 9 ++++++++- 2 files changed, 10 insertions(+), 1 deletion(-)