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) |