qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Adding IO memory region to mipssim


From: Hinko Kocevar
Subject: Adding IO memory region to mipssim
Date: Fri, 10 Sep 2021 15:21:37 +0200

I'm trying to add an I/O memory region to mipssim machine to emulate a MMIO region used by the u-boot loaded as BIOS image. I can confirm that the machine starts and loads the BIOS, starts execution but hangs due to unhandled IO access as described below.

The region should be at 0xB8810000, of size 0x10000.

I've added these lines of code to mispsim.c mips_mipssim_init():

    my_state *s = g_malloc0(sizeof(my_state));
    memory_region_init_io(&s->mmio, NULL, &my_ops, s,
                         "mips_mipssim.foo", 0x10000);
    memory_region_add_subregion(address_space_mem, 0xB8810000LL, &s->mmio);

All goes well, the machine starts, and I can see the newly added region in qemu monitor info mtree output like so:

    00000000b8810000-00000000b881ffff (prio 0, i/o): mips_mipssim.foo

With some tracing enabled I see this error:

 Invalid access at addr 0x18810104, size 4, region '(null)', reason: rejected

I know the u-boot is making request to 0xB8810104 and not 0x18810104. I also can see 0xB8810104 address being handed to io_writex(), but mr_offset becomes 0x18810104 here:

  mr_offset = (iotlbentry->addr & TARGET_PAGE_MASK) + addr;

What is going on?

FWIW, I can place my emulated memory region at 0x18810104, but would like to understand the behavior above.

Thanks!
//hinko


reply via email to

[Prev in Thread] Current Thread [Next in Thread]