128 lines
4.5 KiB
Plaintext
128 lines
4.5 KiB
Plaintext
*** Variables ***
|
|
# RISC-V registers
|
|
${a0} 0xa
|
|
${a1} 0xb
|
|
${a2} 0xc
|
|
${a3} 0xd
|
|
|
|
*** Keywords ***
|
|
Create Machine
|
|
Execute Command mach create
|
|
Execute Command machine LoadPlatformDescription @platforms/cpus/litex_ibex.repl
|
|
Execute Command using sysbus
|
|
|
|
Execute Command cpu PC 0x0
|
|
Execute Command sysbus WriteDoubleWord 0x0 0x800593 # 0x0000: li a1, 0x8
|
|
Execute Command sysbus WriteDoubleWord 0x4 0x13 # 0x0004: nop
|
|
Execute Command sysbus WriteDoubleWord 0x8 0x500e7 # 0x0008: jalr a0
|
|
Execute Command sysbus WriteDoubleWord 0xC 0x58067 # 0x000C: jr a1
|
|
|
|
# Different page
|
|
Execute Command sysbus WriteDoubleWord 0x1000 0x13 # 0x1000: nop
|
|
Execute Command sysbus WriteDoubleWord 0x1004 0x8067 # 0x1004: ret
|
|
# Same page
|
|
Execute Command sysbus WriteDoubleWord 0x10 0x13 # 0x10: nop
|
|
Execute Command sysbus WriteDoubleWord 0x14 0x8067 # 0x14: ret
|
|
|
|
Overwrite With Nops
|
|
[Arguments] ${addr} ${count}
|
|
FOR ${offset} IN RANGE ${count}
|
|
Execute Command sysbus WriteDoubleWord ${addr} 0x13
|
|
${addr}= Evaluate ${addr} + 4
|
|
END
|
|
|
|
Overwrite With Nops As Guest
|
|
# Must be called right before the jump `jalr a0`
|
|
[Arguments] ${addr} ${count}
|
|
${ptr}= Set Variable 0x2000
|
|
${tmp_ptr}= Set Variable ${ptr}
|
|
${prev_a0_value}= Execute Command sysbus.cpu GetRegister ${a0}
|
|
Execute Command sysbus.cpu SetRegister ${a0} ${ptr}
|
|
Execute Command sysbus.cpu SetRegister ${a2} 0x13
|
|
Execute Command sysbus.cpu SetRegister ${a3} ${addr}
|
|
|
|
# Write instructions overwriting requested range
|
|
FOR ${repetition} IN RANGE ${count}
|
|
Execute Command sysbus WriteDoubleWord ${tmp_ptr} 0x6a123 # 0x20xx: sw x0, 2(a3)
|
|
${tmp_ptr}= Evaluate ${tmp_ptr} + 4
|
|
Execute Command sysbus WriteDoubleWord ${tmp_ptr} 0xc6a023 # 0x20xx: sw a2, 0(a3)
|
|
${tmp_ptr}= Evaluate ${tmp_ptr} + 4
|
|
Execute Command sysbus WriteDoubleWord ${tmp_ptr} 0x468693 # 0x20xx: addi a3, a3, 4
|
|
${tmp_ptr}= Evaluate ${tmp_ptr} + 4
|
|
END
|
|
Execute Command sysbus WriteDoubleWord ${tmp_ptr} 0x8067 # ret
|
|
|
|
# Execute them
|
|
${insn_to_exec}= Evaluate ${count} * 3 + 3
|
|
Execute Command sysbus.cpu Step ${insn_to_exec}
|
|
|
|
# Assert the write was succesfull
|
|
${insn_at_addr}= Execute Command sysbus ReadDoubleWord ${addr}
|
|
Should Be Equal As Integers ${insn_at_addr} 0x13
|
|
|
|
# Restore significant registers
|
|
Execute Command sysbus.cpu SetRegister ${a0} ${prev_a0_value}
|
|
|
|
Assert PC Equals
|
|
[Arguments] ${expected}
|
|
${pc}= Execute Command cpu PC
|
|
Should Be Equal As Integers ${pc} ${expected}
|
|
|
|
*** Test Cases ***
|
|
Shoud Invalidate Other Page When Overwritten Using Sysbus
|
|
Create Machine
|
|
Execute Command sysbus.cpu SetRegister ${a0} 0x1000
|
|
|
|
Execute Command cpu Step 3
|
|
Assert PC Equals 0x1000
|
|
Execute Command cpu Step 3
|
|
Assert PC Equals 0x08
|
|
|
|
Overwrite With Nops 0x1004 2
|
|
|
|
Execute Command cpu Step 3
|
|
Assert PC Equals 0x1008
|
|
|
|
Shoud Invalidate The Same Page When Overwritten Using Sysbus
|
|
Create Machine
|
|
Execute Command sysbus.cpu SetRegister ${a0} 0x10
|
|
|
|
Execute Command cpu Step 3
|
|
Assert PC Equals 0x10
|
|
Execute Command cpu Step 3
|
|
Assert PC Equals 0x08
|
|
|
|
Overwrite With Nops 0x14 3
|
|
|
|
Execute Command cpu Step 3
|
|
Assert PC Equals 0x18
|
|
|
|
Should Invalidate Other Page When Overwritten By Guest
|
|
Create Machine
|
|
Execute Command sysbus.cpu SetRegister ${a0} 0x1000
|
|
|
|
Execute Command cpu Step 3
|
|
Assert PC Equals 0x1000
|
|
Execute Command cpu Step 3
|
|
Assert PC Equals 0x8
|
|
|
|
Overwrite With Nops As Guest 0x1004 2
|
|
|
|
Execute Command cpu Step 3
|
|
Assert PC Equals 0x1008
|
|
|
|
Should Invalidate The Same Page When Overwritten By Guest
|
|
Create Machine
|
|
Execute Command sysbus.cpu SetRegister ${a0} 0x10
|
|
|
|
Execute Command cpu Step 3
|
|
Assert PC Equals 0x10
|
|
Execute Command cpu Step 3
|
|
Assert PC Equals 0x8
|
|
|
|
Overwrite With Nops As Guest 0x14 2
|
|
|
|
Execute Command cpu Step 3
|
|
Assert PC Equals 0x18
|
|
|