13
#include "primecell.h"
14
13
#include "qemu-timer.h"
17
15
//#define DEBUG_PL031
20
#define DPRINTF(fmt, args...) \
21
do { printf("pl031: " fmt , ##args); } while (0)
18
#define DPRINTF(fmt, ...) \
19
do { printf("pl031: " fmt , ## __VA_ARGS__); } while (0)
23
#define DPRINTF(fmt, args...) do {} while(0)
21
#define DPRINTF(fmt, ...) do {} while(0)
26
24
#define RTC_DR 0x00 /* Data read register */
189
void pl031_init(uint32_t base, qemu_irq irq)
186
static void pl031_init(SysBusDevice *dev)
189
pl031_state *s = FROM_SYSBUS(pl031_state, dev);
195
s = qemu_mallocz(sizeof(pl031_state));
197
iomemtype = cpu_register_io_memory(0, pl031_readfn, pl031_writefn, s);
199
cpu_abort(cpu_single_env, "pl031_init: Can't register I/O memory\n");
201
cpu_register_physical_memory(base, 0x00001000, iomemtype);
192
iomemtype = cpu_register_io_memory(pl031_readfn, pl031_writefn, s);
193
if (iomemtype == -1) {
194
hw_error("pl031_init: Can't register I/O memory\n");
197
sysbus_init_mmio(dev, 0x1000, iomemtype);
199
sysbus_init_irq(dev, &s->irq);
204
200
/* ??? We assume vm_clock is zero at this point. */
205
201
qemu_get_timedate(&tm, 0);
206
202
s->tick_offset = mktimegm(&tm);
208
204
s->timer = qemu_new_timer(vm_clock, pl031_interrupt, s);
207
static void pl031_register_devices(void)
209
sysbus_register_dev("pl031", sizeof(pl031_state), pl031_init);
212
device_init(pl031_register_devices)