The region should be at 0xB8810000, of size 0x10000.
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: