[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