[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 10/12] arm: Set frequencies for arm_timer
From: |
Peter Maydell |
Subject: |
[Qemu-devel] [PATCH 10/12] arm: Set frequencies for arm_timer |
Date: |
Wed, 4 Jan 2012 13:56:24 +0000 |
From: Mark Langsdorf <address@hidden>
Use qdev properties to allow board modelers to set the frequencies
for the sp804 timer. Each of the sp804's timers can have an
individual frequency. The timers default to 1MHz.
Signed-off-by: Mark Langsdorf <address@hidden>
Reviewed-by: Andreas Färber <address@hidden>
Signed-off-by: Peter Maydell <address@hidden>
---
hw/arm_timer.c | 24 +++++++++++++++++++-----
1 files changed, 19 insertions(+), 5 deletions(-)
diff --git a/hw/arm_timer.c b/hw/arm_timer.c
index 0a5b9d2..60e1c63 100644
--- a/hw/arm_timer.c
+++ b/hw/arm_timer.c
@@ -9,6 +9,8 @@
#include "sysbus.h"
#include "qemu-timer.h"
+#include "qemu-common.h"
+#include "qdev.h"
/* Common timer implementation. */
@@ -178,6 +180,7 @@ typedef struct {
SysBusDevice busdev;
MemoryRegion iomem;
arm_timer_state *timer[2];
+ uint32_t freq0, freq1;
int level[2];
qemu_irq irq;
} sp804_state;
@@ -269,10 +272,11 @@ static int sp804_init(SysBusDevice *dev)
qi = qemu_allocate_irqs(sp804_set_irq, s, 2);
sysbus_init_irq(dev, &s->irq);
- /* ??? The timers are actually configurable between 32kHz and 1MHz, but
- we don't implement that. */
- s->timer[0] = arm_timer_init(1000000);
- s->timer[1] = arm_timer_init(1000000);
+ /* The timers are configurable between 32kHz and 1MHz
+ * defaulting to 1MHz but overrideable as individual properties */
+ s->timer[0] = arm_timer_init(s->freq0);
+ s->timer[1] = arm_timer_init(s->freq1);
+
s->timer[0]->irq = qi[0];
s->timer[1]->irq = qi[1];
memory_region_init_io(&s->iomem, &sp804_ops, s, "sp804", 0x1000);
@@ -281,6 +285,16 @@ static int sp804_init(SysBusDevice *dev)
return 0;
}
+static SysBusDeviceInfo sp804_info = {
+ .init = sp804_init,
+ .qdev.name = "sp804",
+ .qdev.size = sizeof(sp804_state),
+ .qdev.props = (Property[]) {
+ DEFINE_PROP_UINT32("freq0", sp804_state, freq0, 1000000),
+ DEFINE_PROP_UINT32("freq1", sp804_state, freq1, 1000000),
+ DEFINE_PROP_END_OF_LIST(),
+ }
+};
/* Integrator/CP timer module. */
@@ -349,7 +363,7 @@ static int icp_pit_init(SysBusDevice *dev)
static void arm_timer_register_devices(void)
{
sysbus_register_dev("integrator_pit", sizeof(icp_pit_state), icp_pit_init);
- sysbus_register_dev("sp804", sizeof(sp804_state), sp804_init);
+ sysbus_register_withprop(&sp804_info);
}
device_init(arm_timer_register_devices)
--
1.7.1
- [Qemu-devel] [PULL 00/12] arm-devs queue, Peter Maydell, 2012/01/04
- [Qemu-devel] [PATCH 06/12] hw/omap1.c: Separate dpll_ctl from omap_mpu_state, Peter Maydell, 2012/01/04
- [Qemu-devel] [PATCH 11/12] arm: add dummy gic security registers, Peter Maydell, 2012/01/04
- [Qemu-devel] [PATCH 12/12] add L2x0/PL310 cache controller device, Peter Maydell, 2012/01/04
- [Qemu-devel] [PATCH 09/12] arm: add missing scu registers, Peter Maydell, 2012/01/04
- [Qemu-devel] [PATCH 02/12] hw/pl110.c: Add post-load hook to invalidate display, Peter Maydell, 2012/01/04
- [Qemu-devel] [PATCH 08/12] hw/omap_gpmc: Fix region map/unmap when configuring prefetch engine, Peter Maydell, 2012/01/04
- [Qemu-devel] [PATCH 10/12] arm: Set frequencies for arm_timer,
Peter Maydell <=
- [Qemu-devel] [PATCH 04/12] hw/omap1.c: Separate PWL from omap_mpu_state, Peter Maydell, 2012/01/04
- [Qemu-devel] [PATCH 01/12] hw/pl181.c: Add save/load support, Peter Maydell, 2012/01/04
- [Qemu-devel] [PATCH 03/12] hw/omap1.c: omap_mpuio_init() need not be public, Peter Maydell, 2012/01/04
- [Qemu-devel] [PATCH 05/12] hw/omap1.c: Separate PWT from omap_mpu_state, Peter Maydell, 2012/01/04
- [Qemu-devel] [PATCH 07/12] hw/omap1.c: Drop unused includes, Peter Maydell, 2012/01/04
- Re: [Qemu-devel] [PULL 00/12] arm-devs queue, Anthony Liguori, 2012/01/04