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? 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 > >