Hi Li, On 4/20/19 6:14 PM, Li Qiang wrote: > The edu spec said when address >= 0x80, the MMIO area can
"says" > be accessed by 8 bytes. > > Signed-off-by: Li Qiang <liq...@163.com> > --- > hw/misc/edu.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/hw/misc/edu.c b/hw/misc/edu.c > index 65fc32b928..4018dddcb8 100644 > --- a/hw/misc/edu.c > +++ b/hw/misc/edu.c > @@ -189,6 +189,10 @@ static uint64_t edu_mmio_read(void *opaque, hwaddr addr, > unsigned size) Completing the diff ...: if (size != 4) { > return val; > } > > + if (addr >= 0x80 && size != 4 && size != 8) { ... to show this code is unreachable for size == 8. > + return val; > + } > + > switch (addr) { > case 0x00: > val = 0x010000edu; > I think the change you wanted is: -- >8 -- @@ -185,7 +185,11 @@ static uint64_t edu_mmio_read(void *opaque, hwaddr addr, unsigned size) EduState *edu = opaque; uint64_t val = ~0ULL; - if (size != 4) { + if (addr < 0x80 && size != 4) { + return val; + } + + if (addr >= 0x80 && size != 4 && size != 8) { return val; } --- Another cleaner way to solve this is use 2 MemoryRegionOps, one for the first 0x80 addresses and another for the rest. Regards, Phil.