Files
simulation_core/tests/peripherals/CLIC/CLIC-mcause-mstatus-alias.robot

66 lines
3.1 KiB
Plaintext
Raw Normal View History

*** Variables ***
${starting_pc} 0x80000000
# Set CLIC mode in MTVEC
# and write to MSTATUS to check if bits are mirrored in MCAUSE
# needs to put desired value to A0 beforehand
${PROG_MSTATUS} SEPARATOR=\n
... csrrsi x0, mtvec, 0x3
... csrrw x0, MSTATUS, a0
... j .
# Set CLIC mode in MTVEC
# and write to MCAUSE to check if bits are mirrored in MSTATUS
# needs to put desired value to A1 beforehand
${PROG_MCAUSE} SEPARATOR=\n
... csrrsi x0, mtvec, 0x3
... csrrw x0, MCAUSE, a1
... j .
# Same as above, but CLINT mode, so bits should not be mirrored
${PROG_MCAUSE_CLINT} SEPARATOR=\n
... csrrsi x0, mtvec, 0x1
... csrrw x0, MCAUSE, a1
... j .
*** Keywords ***
Create Machine
Execute Command mach create
Execute Command using sysbus
Execute Command machine LoadPlatformDescription @tests/peripherals/CLIC/CLIC-test-platform.repl
Execute Command cpu PC ${starting_pc}
*** Test Cases ***
MSTATUS should mirror MCAUSE MPP and MPIE in CLIC mode
Create Machine
Execute Command sysbus.cpu AssembleBlock ${starting_pc} "${PROG_MSTATUS}"
Execute Command sysbus.cpu SetRegister "A0" 0x1880
Execute Command sysbus.cpu Step 3
${mcause}= Execute Command sysbus.cpu MCAUSE
Should Be Equal As Integers ${mcause} 0x38000000
MCAUSE should mirror MSTATUS MPP and MPIE in CLIC mode
Create Machine
Execute Command sysbus.cpu AssembleBlock ${starting_pc} "${PROG_MCAUSE}"
Execute Command sysbus.cpu SetRegister "A1" 0x8000000
Execute Command sysbus.cpu Step 3
${mstatus}= Execute Command sysbus.cpu MSTATUS
Should Be Equal As Integers ${mstatus} 0x80
MCAUSE should not mirror MSTATUS MPP and MPIE in CLIC mode on invalid mode write
Create Machine
Execute Command sysbus.cpu AssembleBlock ${starting_pc} "${PROG_MCAUSE}"
# Unsupported value (0b10) written to MPP in MCAUSE - should keep the old value instead, as MSTATUS won't allow it
Execute Command sysbus.cpu SetRegister "A1" 0x28000000
Execute Command sysbus.cpu Step 3
${mstatus}= Execute Command sysbus.cpu MSTATUS
Should Be Equal As Integers ${mstatus} 0x1880
MCAUSE should not mirror MSTATUS MPP and MPIE in CLINT mode
Create Machine
Execute Command sysbus.cpu AssembleBlock ${starting_pc} "${PROG_MCAUSE_CLINT}"
Execute Command sysbus.cpu SetRegister "A1" 0x0
Execute Command sysbus.cpu Step 3
${mstatus}= Execute Command sysbus.cpu MSTATUS
Should Be Equal As Integers ${mstatus} 0x1800