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

Reply via email to