qemu-arm
[Top][All Lists]
Advanced

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

Re: [PATCH 12/25] hw/arm/mps2: Inline CMSDK_APB_TIMER creation


From: Luc Michel
Subject: Re: [PATCH 12/25] hw/arm/mps2: Inline CMSDK_APB_TIMER creation
Date: Fri, 22 Jan 2021 16:33:56 +0100

On 19:06 Thu 21 Jan     , Peter Maydell wrote:
> The old-style convenience function cmsdk_apb_timer_create() for
> creating CMSDK_APB_TIMER objects is used in only two places in
> mps2.c.  Most of the rest of the code in that file uses the new
> "initialize in place" coding style.
> 
> We want to connect up a Clock object which should be done between the
> object creation and realization; rather than adding a Clock* argument
> to the convenience function, convert the timer creation code in
> mps2.c to the same style as is used already for the watchdog,
> dualtimer and other devices, and delete the now-unused convenience
> function.
> 
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>

Reviewed-by: Luc Michel <luc@lmichel.fr>

> ---
>  include/hw/timer/cmsdk-apb-timer.h | 21 ---------------------
>  hw/arm/mps2.c                      | 18 ++++++++++++++++--
>  2 files changed, 16 insertions(+), 23 deletions(-)
> 
> diff --git a/include/hw/timer/cmsdk-apb-timer.h 
> b/include/hw/timer/cmsdk-apb-timer.h
> index fc2aa97acac..54f7ec8c502 100644
> --- a/include/hw/timer/cmsdk-apb-timer.h
> +++ b/include/hw/timer/cmsdk-apb-timer.h
> @@ -45,25 +45,4 @@ struct CMSDKAPBTimer {
>      uint32_t intstatus;
>  };
>  
> -/**
> - * cmsdk_apb_timer_create - convenience function to create 
> TYPE_CMSDK_APB_TIMER
> - * @addr: location in system memory to map registers
> - * @pclk_frq: frequency in Hz of the PCLK clock (used for calculating baud 
> rate)
> - */
> -static inline DeviceState *cmsdk_apb_timer_create(hwaddr addr,
> -                                                 qemu_irq timerint,
> -                                                 uint32_t pclk_frq)
> -{
> -    DeviceState *dev;
> -    SysBusDevice *s;
> -
> -    dev = qdev_new(TYPE_CMSDK_APB_TIMER);
> -    s = SYS_BUS_DEVICE(dev);
> -    qdev_prop_set_uint32(dev, "pclk-frq", pclk_frq);
> -    sysbus_realize_and_unref(s, &error_fatal);
> -    sysbus_mmio_map(s, 0, addr);
> -    sysbus_connect_irq(s, 0, timerint);
> -    return dev;
> -}
> -
>  #endif
> diff --git a/hw/arm/mps2.c b/hw/arm/mps2.c
> index 9a8b23c64ce..f762d1b46af 100644
> --- a/hw/arm/mps2.c
> +++ b/hw/arm/mps2.c
> @@ -83,6 +83,7 @@ struct MPS2MachineState {
>      /* CMSDK APB subsystem */
>      CMSDKAPBDualTimer dualtimer;
>      CMSDKAPBWatchdog watchdog;
> +    CMSDKAPBTimer timer[2];
>  };
>  
>  #define TYPE_MPS2_MACHINE "mps2"
> @@ -330,8 +331,21 @@ static void mps2_common_init(MachineState *machine)
>      }
>  
>      /* CMSDK APB subsystem */
> -    cmsdk_apb_timer_create(0x40000000, qdev_get_gpio_in(armv7m, 8), 
> SYSCLK_FRQ);
> -    cmsdk_apb_timer_create(0x40001000, qdev_get_gpio_in(armv7m, 9), 
> SYSCLK_FRQ);
> +    for (i = 0; i < ARRAY_SIZE(mms->timer); i++) {
> +        g_autofree char *name = g_strdup_printf("timer%d", i);
> +        hwaddr base = 0x40000000 + i * 0x1000;
> +        int irqno = 8 + i;
> +        SysBusDevice *sbd;
> +
> +        object_initialize_child(OBJECT(mms), name, &mms->timer[i],
> +                                TYPE_CMSDK_APB_TIMER);
> +        sbd = SYS_BUS_DEVICE(&mms->timer[i]);
> +        qdev_prop_set_uint32(DEVICE(&mms->timer[i]), "pclk-frq", SYSCLK_FRQ);
> +        sysbus_realize_and_unref(sbd, &error_fatal);
> +        sysbus_mmio_map(sbd, 0, base);
> +        sysbus_connect_irq(sbd, 0, qdev_get_gpio_in(armv7m, irqno));
> +    }
> +
>      object_initialize_child(OBJECT(mms), "dualtimer", &mms->dualtimer,
>                              TYPE_CMSDK_APB_DUALTIMER);
>      qdev_prop_set_uint32(DEVICE(&mms->dualtimer), "pclk-frq", SYSCLK_FRQ);
> -- 
> 2.20.1
> 

-- 



reply via email to

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