qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 05/10] hw/rx: RX MCU and target


From: Philippe Mathieu-Daudé
Subject: Re: [PATCH 05/10] hw/rx: RX MCU and target
Date: Fri, 5 Jun 2020 18:09:01 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.5.0

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 <ysato@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]);
> +    }
> +}[...]




reply via email to

[Prev in Thread] Current Thread [Next in Thread]