device: 0.980 instruction: 0.974 other: 0.967 assembly: 0.964 boot: 0.962 socket: 0.956 KVM: 0.954 semantic: 0.951 vnc: 0.947 graphic: 0.944 mistranslation: 0.898 network: 0.813 memory address over 0x2000_7ffc is not accessible in mps2-an505 I currently run qemu with the following options `qemu-system-aarch64 -machine mps2-an505 -cpu cortex-m33 -m 16` For some reason, memory address over 0x2000_7ffc is not accessible. It can be tested in gdb as follow. (gdb) x/x 0x20007ffc 0x20007ffc: 0x00000000 (gdb) x/x 0x20007ffd 0x20007ffd: Cannot access memory at address 0x20007ffd (gdb) x/x 0x20008000 0x20008000: Cannot access memory at address 0x20008000 This is expected behaviour. The memory at 0x2000_0000 in this board is the "FPGA block RAM", and there is only 32K of it, so it finishes at 0x2000_7fff, and attempts to access beyond that will fail because there is no device or memory at the address immediately after it in the memory map. PS: you don't need to pass "-cpu cortex-m33" as it is the default for the mps2-an505 board, and you don't need to pass a -m argument either, as 16MB is the fixed value for this board. (If you were just interested in having a large area of contiguous RAM, the "PSRAM" is the largest lump on this board: it's 16MB starting at 0x8000_0000.) On 9/29/20 8:57 AM, Changho Choi wrote: > Public bug reported: > > I currently run qemu with the following options > `qemu-system-aarch64 -machine mps2-an505 -cpu cortex-m33 -m 16` > > For some reason, memory address over 0x2000_7ffc is not accessible. > It can be tested in gdb as follow. > > (gdb) x/x 0x20007ffc > 0x20007ffc: 0x00000000 > (gdb) x/x 0x20007ffd > 0x20007ffd: Cannot access memory at address 0x20007ffd Works for me: (gdb) x/xg 0x20007ff8 0x20007ff8: 0x0000000000000000 (gdb) x/xw 0x20007ffc 0x20007ffc: 0x00000000 (gdb) x/xh 0x20007ffe 0x20007ffe: 0x0000 (gdb) x/xb 0x20007fff 0x20007fff: 0x00 I suppose GDB uses 32-bit access size by default, so requesting 32-bit at 0x20007ffd would access out of bound memory. > (gdb) x/x 0x20008000 > 0x20008000: Cannot access memory at address 0x20008000 For TYPE_IOTKIT there is only 1 SRAM bank (see armsse_variants[]) initialized to SRAM_ADDR_WIDTH bits, which is 15 by default: DEFINE_PROP_UINT32("SRAM_ADDR_WIDTH", ARMSSE, sram_addr_width, 15), So this MPC downstream region is a 32KB SRAM. The size looks correct. > > ** Affects: qemu > Importance: Undecided > Status: New > Thank you for all your kind answers and suggestions. I also have confirmed that the memory address over 0x2000_8000 is not accessible in the real board. Regards, Changho Choi 2020년 9월 29일 (화) 오후 6:25, Peter Maydell