On Thu, Dec 19, 2013 at 04:37:22PM +1000, Peter Crosthwaite wrote: > On Thu, Dec 19, 2013 at 3:51 PM, <edgar.igles...@gmail.com> wrote: > > From: "Edgar E. Iglesias" <edgar.igles...@xilinx.com> > > > > Signed-off-by: Edgar E. Iglesias <edgar.igles...@xilinx.com> > > --- > > hw/microblaze/petalogix_ml605_mmu.c | 17 ++++++++++++++++- > > 1 file changed, 16 insertions(+), 1 deletion(-) > > > > diff --git a/hw/microblaze/petalogix_ml605_mmu.c > > b/hw/microblaze/petalogix_ml605_mmu.c > > index 4009ff5..0a13b0e 100644 > > --- a/hw/microblaze/petalogix_ml605_mmu.c > > +++ b/hw/microblaze/petalogix_ml605_mmu.c > > @@ -88,10 +88,18 @@ petalogix_ml605_init(QEMUMachineInitArgs *args) > > hwaddr ddr_base = MEMORY_BASEADDR; > > MemoryRegion *phys_lmb_bram = g_new(MemoryRegion, 1); > > MemoryRegion *phys_ram = g_new(MemoryRegion, 1); > > + MemoryRegion *sysmem_alias = g_new(MemoryRegion, 1); > > + MemoryRegion *mr_cpu_root = g_new(MemoryRegion, 1); > > + AddressSpace *as_cpu = g_malloc0(sizeof(*as_cpu)); > > qemu_irq irq[32], *cpu_irq; > > > > + /* Setup the CPU specific address-space. */ > > + memory_region_init(mr_cpu_root, NULL, "as-cpu-root", INT64_MAX); > > + address_space_init(as_cpu, mr_cpu_root, "as/cpu"); > > + > > /* init CPUs */ > > cpu = MICROBLAZE_CPU(object_new(TYPE_MICROBLAZE_CPU)); > > + qdev_prop_set_address_space(DEVICE(cpu), "address-space", as_cpu); > > object_property_set_bool(OBJECT(cpu), true, "realized", &err); > > if (err) { > > error_report("%s", error_get_pretty(err)); > > @@ -100,11 +108,18 @@ petalogix_ml605_init(QEMUMachineInitArgs *args) > > > > env = &cpu->env; > > > > + /* Populate the CPU AS with the LMB only visible to the CPU. */ > > + memory_region_init_alias(sysmem_alias, NULL, "sysmem_alias", > > + address_space_mem, 0, > > + memory_region_size(address_space_mem)); > > Can we patch sysbus MMIO APIs to accept an AS to remove the machine's > reliance on the global address_space_mem completely?
Yes good point, thats part of the future work that needs to be done. I've split the stuff into multiple rounds as the patch series will be easily become unmanageable with stuff that touches big parts of the tree. Thanks, Edgar > > Regards, > Peter > > > + memory_region_add_subregion(mr_cpu_root, 0x00000000, sysmem_alias); > > + > > /* Attach emulated BRAM through the LMB. */ > > memory_region_init_ram(phys_lmb_bram, NULL, "petalogix_ml605.lmb_bram", > > LMB_BRAM_SIZE); > > vmstate_register_ram_global(phys_lmb_bram); > > - memory_region_add_subregion(address_space_mem, 0x00000000, > > phys_lmb_bram); > > + memory_region_add_subregion_overlap(mr_cpu_root, 0x00000000, > > + phys_lmb_bram, 2); > > > > memory_region_init_ram(phys_ram, NULL, "petalogix_ml605.ram", > > ram_size); > > vmstate_register_ram_global(phys_ram); > > -- > > 1.7.10.4 > > > >