arm_mptimer.c (f3b8f18ebf344ab359e8f79f6ed777e740dae77c) arm_mptimer.c (b01422622b7c7293196fdaf1dbb4f495af44ecf9)
1/*
2 * Private peripheral timer/watchdog blocks for ARM 11MPCore and A9MP
3 *
4 * Copyright (c) 2006-2007 CodeSourcery.
5 * Copyright (c) 2011 Linaro Limited
6 * Written by Paul Brook, Peter Maydell
7 *
8 * This program is free software; you can redistribute it and/or

--- 214 unchanged lines hidden (view full) ---

223 ARMMPTimerState *s = ARM_MPTIMER(dev);
224 int i;
225
226 for (i = 0; i < ARRAY_SIZE(s->timerblock); i++) {
227 timerblock_reset(&s->timerblock[i]);
228 }
229}
230
1/*
2 * Private peripheral timer/watchdog blocks for ARM 11MPCore and A9MP
3 *
4 * Copyright (c) 2006-2007 CodeSourcery.
5 * Copyright (c) 2011 Linaro Limited
6 * Written by Paul Brook, Peter Maydell
7 *
8 * This program is free software; you can redistribute it and/or

--- 214 unchanged lines hidden (view full) ---

223 ARMMPTimerState *s = ARM_MPTIMER(dev);
224 int i;
225
226 for (i = 0; i < ARRAY_SIZE(s->timerblock); i++) {
227 timerblock_reset(&s->timerblock[i]);
228 }
229}
230
231static void arm_mptimer_init(Object *obj)
231static void arm_mptimer_init_with_bh(Object *obj)
232{
233 ARMMPTimerState *s = ARM_MPTIMER(obj);
234
235 memory_region_init_io(&s->iomem, obj, &arm_thistimer_ops, s,
236 "arm_mptimer_timer", 0x20);
237 sysbus_init_mmio(SYS_BUS_DEVICE(obj), &s->iomem);
238}
239

--- 16 unchanged lines hidden (view full) ---

256 * The outgoing interrupt lines are
257 * * timer for core 0
258 * * timer for core 1
259 * and so on.
260 */
261 for (i = 0; i < s->num_cpu; i++) {
262 TimerBlock *tb = &s->timerblock[i];
263 QEMUBH *bh = qemu_bh_new(timerblock_tick, tb);
232{
233 ARMMPTimerState *s = ARM_MPTIMER(obj);
234
235 memory_region_init_io(&s->iomem, obj, &arm_thistimer_ops, s,
236 "arm_mptimer_timer", 0x20);
237 sysbus_init_mmio(SYS_BUS_DEVICE(obj), &s->iomem);
238}
239

--- 16 unchanged lines hidden (view full) ---

256 * The outgoing interrupt lines are
257 * * timer for core 0
258 * * timer for core 1
259 * and so on.
260 */
261 for (i = 0; i < s->num_cpu; i++) {
262 TimerBlock *tb = &s->timerblock[i];
263 QEMUBH *bh = qemu_bh_new(timerblock_tick, tb);
264 tb->timer = ptimer_init(bh, PTIMER_POLICY);
264 tb->timer = ptimer_init_with_bh(bh, PTIMER_POLICY);
265 sysbus_init_irq(sbd, &tb->irq);
266 memory_region_init_io(&tb->iomem, OBJECT(s), &timerblock_ops, tb,
267 "arm_mptimer_timerblock", 0x20);
268 sysbus_init_mmio(sbd, &tb->iomem);
269 }
270}
271
272static const VMStateDescription vmstate_timerblock = {

--- 33 unchanged lines hidden (view full) ---

306 dc->reset = arm_mptimer_reset;
307 dc->props = arm_mptimer_properties;
308}
309
310static const TypeInfo arm_mptimer_info = {
311 .name = TYPE_ARM_MPTIMER,
312 .parent = TYPE_SYS_BUS_DEVICE,
313 .instance_size = sizeof(ARMMPTimerState),
265 sysbus_init_irq(sbd, &tb->irq);
266 memory_region_init_io(&tb->iomem, OBJECT(s), &timerblock_ops, tb,
267 "arm_mptimer_timerblock", 0x20);
268 sysbus_init_mmio(sbd, &tb->iomem);
269 }
270}
271
272static const VMStateDescription vmstate_timerblock = {

--- 33 unchanged lines hidden (view full) ---

306 dc->reset = arm_mptimer_reset;
307 dc->props = arm_mptimer_properties;
308}
309
310static const TypeInfo arm_mptimer_info = {
311 .name = TYPE_ARM_MPTIMER,
312 .parent = TYPE_SYS_BUS_DEVICE,
313 .instance_size = sizeof(ARMMPTimerState),
314 .instance_init = arm_mptimer_init,
314 .instance_init = arm_mptimer_init_with_bh,
315 .class_init = arm_mptimer_class_init,
316};
317
318static void arm_mptimer_register_types(void)
319{
320 type_register_static(&arm_mptimer_info);
321}
322
323type_init(arm_mptimer_register_types)
315 .class_init = arm_mptimer_class_init,
316};
317
318static void arm_mptimer_register_types(void)
319{
320 type_register_static(&arm_mptimer_info);
321}
322
323type_init(arm_mptimer_register_types)