Patchwork integratorcp: convert control to sysbus

login
register
mail settings
Submitter Benoit Canet
Date Oct. 19, 2011, 12:56 p.m.
Message ID <1319028990-5076-2-git-send-email-benoit.canet@gmail.com>
Download mbox | patch
Permalink /patch/120624/
State New
Headers show

Comments

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

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