blob: 2af7f5453c3d7ba98a2862a10d3fb812d9a276a1 [file] [log] [blame]
*** Variables ***
${riscv_start_pc} 0x2000
${armv8_start_pc} 0x40000000
*** Keywords ***
Create RiscV Machine
[Arguments] ${bitness}
Execute Command using sysbus
Execute Command mach create "risc-v"
Execute Command machine LoadPlatformDescriptionFromString "clint: IRQControllers.CoreLevelInterruptor @ sysbus 0x44000000 { frequency: 66000000 }"
Execute Command machine LoadPlatformDescriptionFromString "cpu: CPU.RiscV${bitness} @ sysbus { timeProvider: clint; cpuType: \\"rv${bitness}g\\"; interruptMode: 1 }"
Execute Command machine LoadPlatformDescriptionFromString "mem: Memory.MappedMemory @ sysbus 0x1000 { size: 0x40000 }"
Execute Command cpu PC ${riscv_start_pc}
Write One Plus One Program RiscV32
Execute Command sysbus WriteDoubleWord ${riscv_start_pc} 0x00150513 # addi a0, a0, #1
Execute Command sysbus WriteDoubleWord ${ ${riscv_start_pc} + 4 } 0x00150513
Write Store Load Program RiscV32
# Does not work yet, missing op_qemu_st32
# Program: li a0, 0xdead; auipc a1 0x40; sw a0, 0(a1); lw a2, 0(a1)
Execute Command sysbus WriteDoubleWord ${riscv_start_pc} 0x0000e537
Execute Command sysbus WriteDoubleWord ${ ${riscv_start_pc} + 4 } 0xead50513
Execute Command sysbus WriteDoubleWord ${ ${riscv_start_pc} + 8 } 0x00040597
Execute Command sysbus WriteDoubleWord ${ ${riscv_start_pc} + 12 } 0x00a5a023
Execute Command sysbus WriteDoubleWord ${ ${riscv_start_pc} + 16 } 0x0005a603
Create ARMv8A Machine
Execute Command using sysbus
Execute Command mach create "armv8"
Execute Command machine LoadPlatformDescription @platforms/cpus/cortex-a53-gicv2.repl
Execute Command cpu PC ${armv8_start_pc}
Write One Plus One Program ARMv8
Execute Command sysbus WriteDoubleWord ${armv8_start_pc} 0x91000400 # add x0, x0, #0x1
Execute Command sysbus WriteDoubleWord ${ ${armv8_start_pc} + 4 } 0x91000400
*** Test Cases ***
Should Calculate One Plus One RiscV32
Create RiscV Machine bitness=32
Write One Plus One Program RiscV32
Execute Command cpu Step
Register Should Be Equal 10 0x1
Execute Command cpu Step
Register Should Be Equal 10 0x2
Should Calculate One Plus One ARMv8
Create ARMv8A Machine
Write One Plus One Program ARMv8
Execute Command cpu Step
Register Should Be Equal 0 0x1
Execute Command cpu Step
Register Should Be Equal 0 0x2