Files
simulation_core/tests/unit-tests/hst-delayed-cpu-registration.robot

67 lines
3.1 KiB
Plaintext

*** Variables ***
${SHARED_ADDRESS} 0x81000000
${PC} 0x80000000
${VARIABLE_VALUE} 0x5
${NEW_VARIABLE_VALUE} 0xbeeeeeef
# Registers used
${a0} 10
${a1} 11
${a2} 12
${a3} 13
*** Keywords ***
Add CPU ${core}
[Arguments] ${value}
Execute Command machine LoadPlatformDescriptionFromString "cpu_${core}: CPU.RiscV64 @ sysbus { timeProvider: empty; cpuType: \\"rv64gc\\"}"
Execute Command cpu_${core} ExecutionMode SingleStep
Execute Command cpu_${core} PC ${PC}
Execute Command cpu_${core} SetRegister ${a0} ${SHARED_ADDRESS}
Execute Command cpu_${core} SetRegister ${a2} ${value}
*** Test Cases ***
Should Register HST For Both CPUs When Second CPU Is Added
# Create a very simple machine
Execute Command mach create
Execute Command machine LoadPlatformDescriptionFromString "ddr: Memory.MappedMemory @ sysbus 0x80000000 { size: 0x80000000 }"
Create Log Tester 0
Execute Command logLevel 0
# Just in case check if store table is not allocated nor initialized at machine creation
Should Not Be In Log Allocating store table with size
Should Not Be In Log initialize_store_table: initializing with ptr
# Add first CPU
Add CPU 0 ${NEW_VARIABLE_VALUE}
# Check if store table is not allocated nor initialized for one CPU
Should Not Be In Log Allocating store table with size
Should Not Be In Log initialize_store_table: initializing with ptr
# Add second CPU
Add CPU 1 ${VARIABLE_VALUE}
# Now store table should be allocated
Wait For Log Entry Store table allocated
# Both cores should get pointers to the store table
Wait For Log Entry cpu_0: initialize_store_table: initializing with ptr
Wait For Log Entry cpu_1: initialize_store_table: initializing with ptr
# Assemble LR/SC code
${code}= catenate SEPARATOR=${\n}
... lr.d a1, (a0);
... sc.d a3, a2, (a0);
Execute Command cpu_0 AssembleBlock ${PC} """${code}"""
# Now check if store table is properly registered for cpu_0
Execute Command sysbus WriteQuadWord ${SHARED_ADDRESS} ${VARIABLE_VALUE}
Execute Command cpu_0 Step # LR
Execute Command cpu_1 Step 2 # write
Execute Command cpu_0 Step # SC
# Check for SC failure.
${value}= Execute Command sysbus ReadQuadWord ${SHARED_ADDRESS}
Should Not Be Equal As Integers ${value} ${NEW_VARIABLE_VALUE} Expected value at ${SHARED_ADDRESS} to not be ${NEW_VARIABLE_VALUE} after interleaving LR/SC
Register Should Be Equal ${a3} 1 cpuName=cpu_0