On 24 August 2011 11:11, Avi Kivity <a...@redhat.com> wrote: > @@ -108,9 +111,15 @@ static uint32_t integratorcm_read(void *opaque, > target_phys_addr_t offset) > static void integratorcm_do_remap(integratorcm_state *s, int flash) > { > if (flash) { > - cpu_register_physical_memory(0, 0x100000, IO_MEM_RAM); > + if (s->flash_mapped) { > + sysbus_del_memory(&s->busdev, &s->flash); > + s->flash_mapped = false; > + } > } else { > - cpu_register_physical_memory(0, 0x100000, s->flash_offset | > IO_MEM_RAM); > + if (!s->flash_mapped) { > + sysbus_add_memory_overlap(&s->busdev, 0, &s->flash, 1); > + s->flash_mapped = true; > + } > }
This is introducing a new field in the device state which is actually just tracking s->cm_init bit 2. At least it would be, except that in integratorcm_set_ctrl this line: s->cm_init = (s->cm_init & ~ 5) | (value ^ 5); appears to be using ^ when it meant & ... This isn't a nak -- I'm happy for this to get committed and I'll fix things up later, since the device doesn't have a VMStateDescription that would be broken by the extra state field. (Or if I get round to it before the series gets committed I'll send you a fix to squash into this patch.) -- PMM