2011/10/17 Benoît Canet <benoit.ca...@gmail.com>: > -static void icp_control_init(uint32_t base) > +static void icp_control_init(target_phys_addr_t base) > { > - int iomemtype; > + MemoryRegion *io; > > - iomemtype = cpu_register_io_memory(icp_control_readfn, > - icp_control_writefn, NULL, > - DEVICE_NATIVE_ENDIAN); > - cpu_register_physical_memory(base, 0x00800000, iomemtype); > + io = (MemoryRegion *)g_malloc0(sizeof(MemoryRegion)); > + memory_region_init_io(io, &icp_control_ops, NULL, > + "control", 0x00800000); > + memory_region_add_subregion(get_system_memory(), base, io); > /* ??? Save/restore. */ > }
I didn't spot this the first time round, but this is wrong. We shouldn't be g_malloc0()ing the MemoryRegion -- it should be an element in some suitable device struct. I think the right thing to do here is probably first to do the (fairly trivial) conversion of the icp_control code to be a sysbus device, then do the memory region conversion on top of that. -- PMM