hw/arm/mps2: Inline CMSDK_APB_TIMER creation
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: Philippe Mathieu-Daudé <f4bug@amsat.org> Reviewed-by: Luc Michel <luc@lmichel.fr> Tested-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Message-id: 20210128114145.20536-13-peter.maydell@linaro.org Message-id: 20210121190622.22000-13-peter.maydell@linaro.org
This commit is contained in:
parent
8fd34dc0c4
commit
efc34aaa82
@ -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);
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user