diff mbox

integratorcp: convert control to sysbus

Message ID 1319028990-5076-2-git-send-email-benoit.canet@gmail.com
State New
Headers show

Commit Message

Benoit Canet Oct. 19, 2011, 12:56 p.m. UTC
Signed-off-by: Benoit Canet <benoit.canet@gmail.com>
---
 hw/integratorcp.c |   20 +++++++++++++-------
 1 files changed, 13 insertions(+), 7 deletions(-)

Comments

Peter Maydell Oct. 19, 2011, 1:12 p.m. UTC | #1
2011/10/19 BenoƮt Canet <benoit.canet@gmail.com>:
> Signed-off-by: Benoit Canet <benoit.canet@gmail.com>

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>

Avi -- since this applies on top of the memory region
conversions in your queue, do you want to take this
patch too? Otherwise I'll just have to hold onto it
until you land those...

thanks
-- PMM
diff mbox

Patch

diff --git a/hw/integratorcp.c b/hw/integratorcp.c
index 7f79560..7ad68b7 100644
--- a/hw/integratorcp.c
+++ b/hw/integratorcp.c
@@ -393,6 +393,11 @@  static int icp_pic_init(SysBusDevice *dev)
 
 /* CP control registers.  */
 
+typedef struct icp_control_state {
+    SysBusDevice busdev;
+    MemoryRegion iomem;
+} icp_control_state;
+
 static uint64_t icp_control_read(void *opaque, target_phys_addr_t offset,
                                  unsigned size)
 {
@@ -431,15 +436,14 @@  static const MemoryRegionOps icp_control_ops = {
     .endianness = DEVICE_NATIVE_ENDIAN,
 };
 
-static void icp_control_init(target_phys_addr_t base)
+static int icp_control_init(SysBusDevice *dev)
 {
-    MemoryRegion *io;
+    icp_control_state *s = FROM_SYSBUS(icp_control_state, dev);
 
-    io = (MemoryRegion *)g_malloc0(sizeof(MemoryRegion));
-    memory_region_init_io(io, &icp_control_ops, NULL,
+    memory_region_init_io(&s->iomem, &icp_control_ops, s,
                           "control", 0x00800000);
-    memory_region_add_subregion(get_system_memory(), base, io);
-    /* ??? Save/restore.  */
+    sysbus_init_mmio_region(dev, &s->iomem);
+    return 0;
 }
 
 
@@ -498,7 +502,7 @@  static void integratorcp_init(ram_addr_t ram_size,
     sysbus_create_simple("pl031", 0x15000000, pic[8]);
     sysbus_create_simple("pl011", 0x16000000, pic[1]);
     sysbus_create_simple("pl011", 0x17000000, pic[2]);
-    icp_control_init(0xcb000000);
+    sysbus_create_simple("integrator_control", 0xcb000000, NULL);
     sysbus_create_simple("pl050_keyboard", 0x18000000, pic[3]);
     sysbus_create_simple("pl050_mouse", 0x19000000, pic[4]);
     sysbus_create_varargs("pl181", 0x1c000000, pic[23], pic[24], NULL);
@@ -541,6 +545,8 @@  static SysBusDeviceInfo core_info = {
 static void integratorcp_register_devices(void)
 {
     sysbus_register_dev("integrator_pic", sizeof(icp_pic_state), icp_pic_init);
+    sysbus_register_dev("integrator_control", sizeof(icp_control_state),
+                        icp_control_init);
     sysbus_register_withprop(&core_info);
 }