24.3.3.3. gem5 DRAM setup
This can be explored pretty well from gem5 config.ini.
se.py just has a single DDR3_1600_8x8
DRAM with size given as Memory size and physical address starting at 0.
fs.py also has that DDR3_1600_8x8
DRAM, but can have more memory types. Notably, aarch64 has as shown on RealView.py VExpress_GEM5_Base
:
0x00000000-0x03ffffff: ( 0 - 64 MiB) Boot memory (CS0) 0x04000000-0x07ffffff: ( 64 MiB - 128 MiB) Reserved 0x08000000-0x0bffffff: (128 MiB - 192 MiB) NOR FLASH0 (CS0 alias) 0x0c000000-0x0fffffff: (192 MiB - 256 MiB) NOR FLASH1 (Off-chip, CS4) 0x80000000-XxXXXXXXXX: ( 2 GiB - ) DRAM
We place the entry point of our baremetal executables right at the start of DRAM with our Baremetal linker script.
This can be seen indirectly with:
./getvar --arch aarch64 --emulator gem5 entry_address
which gives 0x80000000 in decimal, or more directly with some some gem5 tracing:
./run \ --arch aarch64 \ --baremetal baremetal/arch/aarch64/no_bootloader/exit.S \ --emulator gem5 \ --trace ExecAll,-ExecSymbol \ --trace-stdout \ ;
and we see that the first instruction runs at 0x80000000:
0: system.cpu: A0 T0 : 0x80000000
TODO: what are the boot memory and NOR FLASH used for?