On 5/31/20 6:24 PM, Yoshinori Sato wrote: > rx62n - RX62N MCU. > rx-virt - RX QEMU virtual target. > This has the same specifications as the gdb simulator. > > Signed-off-by: Yoshinori Sato <ys...@users.sourceforge.jp> > --- > include/hw/rx/rx.h | 7 ++ > include/hw/rx/rx62n.h | 91 ++++++++++++++++ > hw/rx/rx-virt.c | 143 +++++++++++++++++++++++++ > hw/rx/rx62n.c | 240 ++++++++++++++++++++++++++++++++++++++++++ > hw/rx/Kconfig | 13 +++ > hw/rx/Makefile.objs | 2 + > 6 files changed, 496 insertions(+) > create mode 100644 include/hw/rx/rx.h > create mode 100644 include/hw/rx/rx62n.h > create mode 100644 hw/rx/rx-virt.c > create mode 100644 hw/rx/rx62n.c > create mode 100644 hw/rx/Kconfig > create mode 100644 hw/rx/Makefile.objs > [...] > +static void register_tmr(RX62NState *s, int unit) > +{ > + SysBusDevice *tmr; > + int i, irqbase; > + > + object_initialize_child(OBJECT(s), "tmr[*]", &s->tmr[unit], > + sizeof(RTMRState), TYPE_RENESAS_8TMR, > + &error_abort, NULL); > + > + tmr = SYS_BUS_DEVICE(&s->tmr[unit]); > + qdev_prop_set_uint64(DEVICE(tmr), "input-freq", RX62N_PCLK); > + > + qdev_init_nofail(DEVICE(tmr)); > + sysbus_mmio_map(tmr, 0, RX62N_TMRBASE + unit * 0x10); > + irqbase = RX62N_TMR_IRQBASE + TMR_NR_IRQ * unit; > + for (i = 0; i < TMR_NR_IRQ; i++) { > + sysbus_connect_irq(tmr, i, s->irq[irqbase + i]); > + } > +} > + > +static void register_cmt(RX62NState *s, int unit) > +{ > + SysBusDevice *cmt; > + int i, irqbase; > + > + object_initialize_child(OBJECT(s), "cmt[*]", &s->cmt[unit], > + sizeof(RTIMERState), TYPE_RENESAS_TIMER, > + &error_abort, NULL); > + > + cmt = SYS_BUS_DEVICE(&s->cmt[unit]); > + qdev_prop_set_uint64(DEVICE(cmt), "input-freq", RX62N_PCLK); > + qdev_prop_set_int32(DEVICE(cmt), "feature", RTIMER_FEAT_CMT);
OK, single logical change, no problem. > + qdev_init_nofail(DEVICE(cmt)); > + sysbus_mmio_map(cmt, 0, RX62N_CMTBASE + unit * 0x10); > + irqbase = RX62N_CMT_IRQBASE + TIMER_CH_CMT * unit; > + for (i = 0; i < TIMER_CH_CMT; i++) { > + sysbus_connect_irq(cmt, i, s->irq[irqbase + i]); > + } > +} > + > +static void register_sci(RX62NState *s, int unit) > +{ > + SysBusDevice *sci; > + int i, irqbase; > + > + object_initialize_child(OBJECT(s), "sci[*]", &s->sci[unit], > + sizeof(RSCIState), TYPE_RENESAS_SCI, > + &error_abort, NULL); > + sci = SYS_BUS_DEVICE(&s->sci[unit]); > + > + qdev_prop_set_chr(DEVICE(sci), "chardev", serial_hd(unit)); > + qdev_prop_set_uint64(DEVICE(sci), "input-freq", RX62N_PCLK); > + qdev_prop_set_int32(DEVICE(sci), "feature", SCI_FEAT_SCIA); > + qdev_prop_set_int32(DEVICE(sci), "register-size", 8); > + qdev_init_nofail(DEVICE(sci)); > + sysbus_mmio_map(sci, 0, RX62N_SCIBASE + unit * 0x08); > + irqbase = RX62N_SCI_IRQBASE + SCI_NR_IRQ * unit; > + for (i = 0; i < SCI_NR_IRQ; i++) { > + sysbus_connect_irq(sci, i, s->irq[irqbase + i]); > + } > +}[...]