blob: c0a1f6b5e8d06dd3af456ee856420404ee0ba3b9 [file] [log] [blame]
*** Variables ***
&{mtvec_write_opcodes} 0x10=0x30585073 0x11=0x3058d073 0x12=0x30595073 0x13=0x3059d073 0x14=0x305a5073
&{stvec_write_opcodes} 0x10=0x10585073 0x11=0x1058d073 0x12=0x10595073 0x13=0x1059d073 0x14=0x105a5073
*** Keywords ***
Create Machine
[Arguments] ${interrupt_mode}
Execute Command using sysbus
Execute Command mach create
Execute Command machine LoadPlatformDescriptionFromString "cpu: CPU.RiscV32 @ sysbus { cpuType: \\"rv32imac\\"; timeProvider: empty; privilegeArchitecture: PrivilegeArchitecture.Priv1_10; interruptMode: InterruptMode.${interruptMode} }"
Execute Command machine LoadPlatformDescriptionFromString "mem: Memory.MappedMemory @ sysbus 0x0 { size: 0x10000000 }"
Execute Command cpu TbCacheEnabled false
MTVEC Should Be Equal
[Arguments] ${value}
${reg}= Execute Command cpu MTVEC
Should Be Equal ${reg.strip()} ${value}
STVEC Should Be Equal
[Arguments] ${value}
${reg}= Execute Command cpu STVEC
Should Be Equal ${reg.strip()} ${value}
Set MTVEC By Software
[Arguments] ${value}
Execute Command cpu PC 0x0
${opcode}= Get From Dictionary ${mtvec_write_opcodes} ${value}
Execute Command sysbus WriteDoubleWord 0x0 ${opcode}
Execute Command cpu Step
# this is a hack giving time for the logger to handle all messages
# (including the one generated by setting the MTVEC value)
Sleep 1s
Set STVEC By Software
[Arguments] ${value}
Execute Command cpu PC 0x0
${opcode}= Get From Dictionary ${stvec_write_opcodes} ${value}
Execute Command sysbus WriteDoubleWord 0x0 ${opcode}
Execute Command cpu Step
# this is a hack giving time for the logger to handle all messages
# (including the one generated by setting the STVEC value)
Sleep 1s
*** Test Cases ***
Should Not Correct MTVEC From Monitor in Auto Mode
Create Log Tester 0
Create Machine Auto
MTVEC Should Be Equal 0x1010
Execute Command cpu MTVEC 0x50
MTVEC Should Be Equal 0x50
Should Not Be In Log modifying MTVEC
Execute Command cpu MTVEC 0x51
MTVEC Should Be Equal 0x51
Should Not Be In Log modifying MTVEC
Execute Command cpu MTVEC 0x52
MTVEC Should Be Equal 0x52
Should Not Be In Log modifying MTVEC
Execute Command cpu MTVEC 0x53
MTVEC Should Be Equal 0x53
Should Not Be In Log modifying MTVEC
Execute Command cpu MTVEC 0x54
MTVEC Should Be Equal 0x54
Should Not Be In Log modifying MTVEC
Should Not Correct STVEC From Monitor in Auto Mode
Create Log Tester 0
Create Machine Auto
STVEC Should Be Equal 0x0
Execute Command cpu STVEC 0x50
STVEC Should Be Equal 0x50
Should Not Be In Log modifying STVEC
Execute Command cpu STVEC 0x51
STVEC Should Be Equal 0x51
Should Not Be In Log modifying STVEC
Execute Command cpu STVEC 0x52
STVEC Should Be Equal 0x52
Should Not Be In Log modifying STVEC
Execute Command cpu STVEC 0x53
STVEC Should Be Equal 0x53
Should Not Be In Log modifying STVEC
Execute Command cpu STVEC 0x54
STVEC Should Be Equal 0x54
Should Not Be In Log modifying STVEC
Should Not Correct MTVEC Written By Software in Auto Mode
Create Log Tester 0
Create Machine Auto
MTVEC Should Be Equal 0x1010
Set MTVEC By Software 0x10
MTVEC Should Be Equal 0x10
Should Not Be In Log MTVEC value written to CSR corrected
Set MTVEC By Software 0x11
MTVEC Should Be Equal 0x11
Should Not Be In Log MTVEC value written to CSR corrected
Set MTVEC By Software 0x12
Wait For Log Entry MTVEC value written to CSR corrected
MTVEC Should Be Equal 0x10
Set MTVEC By Software 0x13
Wait For Log Entry MTVEC value written to CSR corrected
MTVEC Should Be Equal 0x11
Set MTVEC By Software 0x14
MTVEC Should Be Equal 0x14
Should Not Be In Log MTVEC value written to CSR corrected
Should Not Correct STVEC Written By Software in Auto Mode
Create Log Tester 0
Create Machine Auto
STVEC Should Be Equal 0x0
Set STVEC By Software 0x10
STVEC Should Be Equal 0x10
Should Not Be In Log STVEC value written to CSR corrected
Set STVEC By Software 0x11
STVEC Should Be Equal 0x11
Should Not Be In Log STVEC value written to CSR corrected
Set STVEC By Software 0x12
Wait For Log Entry STVEC value written to CSR corrected
STVEC Should Be Equal 0x10
Set STVEC By Software 0x13
Wait For Log Entry STVEC value written to CSR corrected
STVEC Should Be Equal 0x11
Set STVEC By Software 0x14
STVEC Should Be Equal 0x14
Should Not Be In Log STVEC value written to CSR corrected
Should Correct MTVEC From Monitor in Direct Mode
Create Log Tester 0
Create Machine Direct
MTVEC Should Be Equal 0x1010
Execute Command cpu MTVEC 0x50
MTVEC Should Be Equal 0x50
Should Not Be In Log modifying MTVEC
Execute Command cpu MTVEC 0x51
Wait For Log Entry modifying MTVEC
MTVEC Should Be Equal 0x50
Execute Command cpu MTVEC 0x52
Wait For Log Entry modifying MTVEC
MTVEC Should Be Equal 0x50
Execute Command cpu MTVEC 0x53
Wait For Log Entry modifying MTVEC
MTVEC Should Be Equal 0x50
Execute Command cpu MTVEC 0x54
MTVEC Should Be Equal 0x54
Should Not Be In Log modifying MTVEC
Should Correct STVEC From Monitor in Direct Mode
Create Log Tester 0
Create Machine Direct
STVEC Should Be Equal 0x0
Execute Command cpu STVEC 0x50
STVEC Should Be Equal 0x50
Should Not Be In Log modifying STVEC
Execute Command cpu STVEC 0x51
Wait For Log Entry modifying STVEC
STVEC Should Be Equal 0x50
Execute Command cpu STVEC 0x52
Wait For Log Entry modifying STVEC
STVEC Should Be Equal 0x50
Execute Command cpu STVEC 0x53
Wait For Log Entry modifying STVEC
STVEC Should Be Equal 0x50
Execute Command cpu STVEC 0x54
STVEC Should Be Equal 0x54
Should Not Be In Log modifying STVEC
Should Correct MTVEC Written By Software in Direct Mode
Create Log Tester 0
Create Machine Direct
MTVEC Should Be Equal 0x1010
Set MTVEC By Software 0x10
MTVEC Should Be Equal 0x10
Should Not Be In Log MTVEC value written to CSR corrected
Set MTVEC By Software 0x11
Wait For Log Entry MTVEC value written to CSR corrected
MTVEC Should Be Equal 0x10
Set MTVEC By Software 0x12
Wait For Log Entry MTVEC value written to CSR corrected
MTVEC Should Be Equal 0x10
Set MTVEC By Software 0x13
Wait For Log Entry MTVEC value written to CSR corrected
MTVEC Should Be Equal 0x10
Set MTVEC By Software 0x14
MTVEC Should Be Equal 0x14
Should Not Be In Log MTVEC value written to CSR corrected
Should Correct STVEC Written By Software in Direct Mode
Create Log Tester 0
Create Machine Direct
STVEC Should Be Equal 0x0
Set STVEC By Software 0x10
STVEC Should Be Equal 0x10
Should Not Be In Log STVEC value written to CSR corrected
Set STVEC By Software 0x11
Wait For Log Entry STVEC value written to CSR corrected
STVEC Should Be Equal 0x10
Set STVEC By Software 0x12
Wait For Log Entry STVEC value written to CSR corrected
STVEC Should Be Equal 0x10
Set STVEC By Software 0x13
Wait For Log Entry STVEC value written to CSR corrected
STVEC Should Be Equal 0x10
Set STVEC By Software 0x14
STVEC Should Be Equal 0x14
Should Not Be In Log STVEC value written to CSR corrected
Should Correct MTVEC From Monitor in Vectored Mode
Create Log Tester 0
Create Machine Vectored
Wait For Log Entry Vectored interrupt mode set - updating MTVEC
MTVEC Should Be Equal 0x1011
Execute Command cpu MTVEC 0x50
Wait For Log Entry modifying MTVEC
MTVEC Should Be Equal 0x51
Execute Command cpu MTVEC 0x51
MTVEC Should Be Equal 0x51
Should Not Be In Log modifying MTVEC
Execute Command cpu MTVEC 0x52
Wait For Log Entry modifying MTVEC
MTVEC Should Be Equal 0x51
Execute Command cpu MTVEC 0x53
Wait For Log Entry modifying MTVEC
MTVEC Should Be Equal 0x51
Execute Command cpu MTVEC 0x54
Wait For Log Entry modifying MTVEC
MTVEC Should Be Equal 0x55
Should Correct STVEC From Monitor in Vectored Mode
Create Log Tester 0
Create Machine Vectored
Wait For Log Entry Vectored interrupt mode set - updating STVEC
STVEC Should Be Equal 0x1
Execute Command cpu STVEC 0x50
Wait For Log Entry modifying STVEC
STVEC Should Be Equal 0x51
Execute Command cpu STVEC 0x51
STVEC Should Be Equal 0x51
Should Not Be In Log modifying STVEC
Execute Command cpu STVEC 0x52
Wait For Log Entry modifying STVEC
STVEC Should Be Equal 0x51
Execute Command cpu STVEC 0x53
Wait For Log Entry modifying STVEC
STVEC Should Be Equal 0x51
Execute Command cpu STVEC 0x54
Wait For Log Entry modifying STVEC
STVEC Should Be Equal 0x55
Should Correct MTVEC Written By Software in Vectored Mode
Create Log Tester 0
Create Machine Vectored
MTVEC Should Be Equal 0x1011
Set MTVEC By Software 0x10
Wait For Log Entry MTVEC value written to CSR corrected
MTVEC Should Be Equal 0x11
Set MTVEC By Software 0x11
MTVEC Should Be Equal 0x11
Should Not Be In Log MTVEC value written to CSR corrected
Set MTVEC By Software 0x12
Wait For Log Entry MTVEC value written to CSR corrected
MTVEC Should Be Equal 0x11
Set MTVEC By Software 0x13
Wait For Log Entry MTVEC value written to CSR corrected
MTVEC Should Be Equal 0x11
Set MTVEC By Software 0x14
Wait For Log Entry MTVEC value written to CSR corrected
MTVEC Should Be Equal 0x15
Should Correct STVEC Written By Software in Vectored Mode
Create Log Tester 0
Create Machine Vectored
STVEC Should Be Equal 0x1
Set STVEC By Software 0x10
Wait For Log Entry STVEC value written to CSR corrected
STVEC Should Be Equal 0x11
Set STVEC By Software 0x11
STVEC Should Be Equal 0x11
Should Not Be In Log STVEC value written to CSR corrected
Set STVEC By Software 0x12
Wait For Log Entry STVEC value written to CSR corrected
STVEC Should Be Equal 0x11
Set STVEC By Software 0x13
Wait For Log Entry STVEC value written to CSR corrected
STVEC Should Be Equal 0x11
Set STVEC By Software 0x14
Wait For Log Entry STVEC value written to CSR corrected
STVEC Should Be Equal 0x15