Hi, On Wed, Mar 2, 2011 at 12:11, Salvatore Lionetti <salvatorelione...@yahoo.it> wrote: > Still now, some memory region is called with base+offset. > > So: > > [0x204] <= value (write from uP register) > cause > read(opaque, offset=204, value) > > while > [0x504] <= value (write from uP register) > cause > read(opaque, offset=4, value) > > The two opaque are different as expected. > > Where i am wrong?
If you mean 0x5004 and not 0x504 (as stated in your previous email), IMO it is a current limitation of the Qemu feature called "subpage" (which is used when you are mapping a memory area smaller than the MMU page size as in your example). When using subpages in the current code, the "offset" becomes the distance to the MMU page boundary instead of the distance to the base address of the peripheral. This is somewhat impractical and confusing when you are mapping the same subpage sized MMIO device at different addresses. As the emulation I'm working on has a lot of subpage sized peripherals, I have written a patch to workaround this limitation. I will send it to the list for comment if you want to try it. -- Vincent