Commit 82634c2d748f6d418ee51bcc61c3dc7a99c9911b
1 parent
3950f18b
ARM RealView sytem controller qdev conversion
Signed-off-by: Paul Brook <paul@codesourcery.com>
Showing
1 changed file
with
25 additions
and
6 deletions
hw/arm_sysctl.c
| @@ -7,13 +7,14 @@ | @@ -7,13 +7,14 @@ | ||
| 7 | * This code is licenced under the GPL. | 7 | * This code is licenced under the GPL. |
| 8 | */ | 8 | */ |
| 9 | 9 | ||
| 10 | -#include "hw.h" | 10 | +#include "sysbus.h" |
| 11 | #include "primecell.h" | 11 | #include "primecell.h" |
| 12 | #include "sysemu.h" | 12 | #include "sysemu.h" |
| 13 | 13 | ||
| 14 | #define LOCK_VALUE 0xa05f | 14 | #define LOCK_VALUE 0xa05f |
| 15 | 15 | ||
| 16 | typedef struct { | 16 | typedef struct { |
| 17 | + SysBusDevice busdev; | ||
| 17 | uint32_t sys_id; | 18 | uint32_t sys_id; |
| 18 | uint32_t leds; | 19 | uint32_t leds; |
| 19 | uint16_t lockval; | 20 | uint16_t lockval; |
| @@ -188,18 +189,36 @@ static CPUWriteMemoryFunc *arm_sysctl_writefn[] = { | @@ -188,18 +189,36 @@ static CPUWriteMemoryFunc *arm_sysctl_writefn[] = { | ||
| 188 | arm_sysctl_write | 189 | arm_sysctl_write |
| 189 | }; | 190 | }; |
| 190 | 191 | ||
| 191 | -void arm_sysctl_init(uint32_t base, uint32_t sys_id) | 192 | +static void arm_sysctl_init1(SysBusDevice *dev) |
| 192 | { | 193 | { |
| 193 | - arm_sysctl_state *s; | 194 | + arm_sysctl_state *s = FROM_SYSBUS(arm_sysctl_state, dev); |
| 194 | int iomemtype; | 195 | int iomemtype; |
| 195 | 196 | ||
| 196 | - s = (arm_sysctl_state *)qemu_mallocz(sizeof(arm_sysctl_state)); | ||
| 197 | - s->sys_id = sys_id; | 197 | + s->sys_id = qdev_get_prop_int(&dev->qdev, "sys_id", 0); |
| 198 | /* The MPcore bootloader uses these flags to start secondary CPUs. | 198 | /* The MPcore bootloader uses these flags to start secondary CPUs. |
| 199 | We don't use a bootloader, so do this here. */ | 199 | We don't use a bootloader, so do this here. */ |
| 200 | s->flags = 3; | 200 | s->flags = 3; |
| 201 | iomemtype = cpu_register_io_memory(0, arm_sysctl_readfn, | 201 | iomemtype = cpu_register_io_memory(0, arm_sysctl_readfn, |
| 202 | arm_sysctl_writefn, s); | 202 | arm_sysctl_writefn, s); |
| 203 | - cpu_register_physical_memory(base, 0x00001000, iomemtype); | 203 | + sysbus_init_mmio(dev, 0x1000, iomemtype); |
| 204 | /* ??? Save/restore. */ | 204 | /* ??? Save/restore. */ |
| 205 | } | 205 | } |
| 206 | + | ||
| 207 | +/* Legacy helper function. */ | ||
| 208 | +void arm_sysctl_init(uint32_t base, uint32_t sys_id) | ||
| 209 | +{ | ||
| 210 | + DeviceState *dev; | ||
| 211 | + | ||
| 212 | + dev = qdev_create(NULL, "realview_sysctl"); | ||
| 213 | + qdev_set_prop_int(dev, "sys_id", sys_id); | ||
| 214 | + qdev_init(dev); | ||
| 215 | + sysbus_mmio_map(sysbus_from_qdev(dev), 0, base); | ||
| 216 | +} | ||
| 217 | + | ||
| 218 | +static void arm_sysctl_register_devices(void) | ||
| 219 | +{ | ||
| 220 | + sysbus_register_dev("realview_sysctl", sizeof(arm_sysctl_state), | ||
| 221 | + arm_sysctl_init1); | ||
| 222 | +} | ||
| 223 | + | ||
| 224 | +device_init(arm_sysctl_register_devices) |