qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [RFC/RFT v1 2/2] cris: axis_dev88: QOMify NAND controller


From: Peter Crosthwaite
Subject: [Qemu-devel] [RFC/RFT v1 2/2] cris: axis_dev88: QOMify NAND controller
Date: Tue, 11 Feb 2014 17:13:58 -0800

First step QOMficiation of the Axis NAND controller. Setup the memory
regions properly as per sysbus.

Signed-off-by: Peter Crosthwaite <address@hidden>
---

 hw/cris/axis_dev88.c | 38 ++++++++++++++++++++++++++++++++++----
 1 file changed, 34 insertions(+), 4 deletions(-)

diff --git a/hw/cris/axis_dev88.c b/hw/cris/axis_dev88.c
index 645e45c..46d7c2a 100644
--- a/hw/cris/axis_dev88.c
+++ b/hw/cris/axis_dev88.c
@@ -39,6 +39,10 @@
 
 struct nand_state_t
 {
+    /*< private >*/
+    SysBusDevice parent_obj;
+    /*< public > */
+
     DeviceState *nand;
     MemoryRegion iomem;
     unsigned int rdy:1;
@@ -47,6 +51,11 @@ struct nand_state_t
     unsigned int ce:1;
 };
 
+#define TYPE_AXIS_DEV88_NAND "axis-dev88-nand"
+
+#define AXIS_DEV88_NAND(obj) \
+    OBJECT_CHECK(struct nand_state_t, (obj), TYPE_AXIS_DEV88_NAND)
+
 static struct nand_state_t nand_state;
 static uint64_t nand_read(void *opaque, hwaddr addr, unsigned size)
 {
@@ -82,6 +91,21 @@ static const MemoryRegionOps nand_ops = {
     .endianness = DEVICE_NATIVE_ENDIAN,
 };
 
+static void axis_dev88_nand_init(Object *obj)
+{
+    struct nand_state_t *ns = AXIS_DEV88_NAND(obj);
+
+    memory_region_init_io(&ns->iomem, NULL, &nand_ops, ns, "nand", 0x05000000);
+    sysbus_init_mmio(SYS_BUS_DEVICE(obj), &ns->iomem);
+}
+
+static const TypeInfo axis_dev88_nand_info = {
+    .name           = TYPE_AXIS_DEV88_NAND,
+    .parent         = TYPE_SYS_BUS_DEVICE,
+    .instance_size  = sizeof(struct nand_state_t),
+    .instance_init  = axis_dev88_nand_init,
+};
+
 struct tempsensor_t
 {
     unsigned int shiftreg;
@@ -238,6 +262,13 @@ static const MemoryRegionOps gpio_ops = {
     },
 };
 
+static void axis_dev88_register(void)
+{
+    type_register_static(&axis_dev88_nand_info);
+}
+
+type_init(axis_dev88_register)
+
 #define INTMEM_SIZE (128 * 1024)
 
 static struct cris_load_info li;
@@ -281,13 +312,12 @@ void axisdev88_init(QEMUMachineInitArgs *args)
     memory_region_add_subregion(address_space_mem, 0x38000000, phys_intmem);
 
       /* Attach a NAND flash to CS1.  */
+    object_initialize(&nand_state, sizeof(nand_state), TYPE_AXIS_DEV88_NAND);
+    sysbus_mmio_map(SYS_BUS_DEVICE(&nand_state), 0, 0x10000000);
     nand = drive_get(IF_MTD, 0, 0);
     nand_state.nand = nand_init(nand ? nand->bdrv : NULL,
                                 NAND_MFR_STMICRO, 0x39);
-    memory_region_init_io(&nand_state.iomem, NULL, &nand_ops, &nand_state,
-                          "nand", 0x05000000);
-    memory_region_add_subregion(address_space_mem, 0x10000000,
-                                &nand_state.iomem);
+    object_property_set_bool(OBJECT(&nand_state), true, "realized", NULL);
 
     gpio_state.nand = &nand_state;
     memory_region_init_io(&gpio_state.iomem, NULL, &gpio_ops, &gpio_state,
-- 
1.8.5.4




reply via email to

[Prev in Thread] Current Thread [Next in Thread]