Hi Jiaxun, On 1/14/21 2:31 AM, Jiaxun Yang wrote: > Loongson IPI controller is a MMIO based simple level triggered > interrupt controller. It will trigger IRQ to it's upstream > processor when set register is written. > > It also has 4 64bit mailboxes to pass boot information to > secondary processor. > > Signed-off-by: Jiaxun Yang <jiaxun.y...@flygoat.com> > --- > include/hw/intc/loongson_ipi.h | 20 ++++ > hw/intc/loongson_ipi.c | 174 +++++++++++++++++++++++++++++++++ > hw/intc/Kconfig | 3 + > hw/intc/meson.build | 1 + > hw/intc/trace-events | 4 + > 5 files changed, 202 insertions(+) > create mode 100644 include/hw/intc/loongson_ipi.h > create mode 100644 hw/intc/loongson_ipi.c ...
Thanks for addressing v1 comments. > +static void loongson_ipi_init(Object *obj) > +{ > + struct loongson_ipi *p = LOONGSON_IPI(obj); > + > + sysbus_init_irq(SYS_BUS_DEVICE(obj), &p->parent_irq); > + > + memory_region_init_io(&p->mmio, obj, &pic_mmio_ops, p, > + "loongson.ipi", R_END * 4); > + sysbus_init_mmio(SYS_BUS_DEVICE(obj), &p->mmio); > + qemu_register_reset(ipi_reset, p); A SysBusDevice should use DeviceReset. qemu_register_reset() should be restricted to non-SysBusDevice devices. If there are no other comments on this series, I can fix this when applying. Reviewed-by: Philippe Mathieu-Daudé <f4...@amsat.org> > +} > + > +static const TypeInfo loongson_ipi_info = { > + .name = TYPE_LOONGSON_IPI, > + .parent = TYPE_SYS_BUS_DEVICE, > + .instance_size = sizeof(struct loongson_ipi), > + .instance_init = loongson_ipi_init, > +};