blob: c54b9968fb507e4097512fe7b507b2c4c8460191 [file] [log] [blame]
*** Keywords ***
Prepare Machine
${TEST_DIR}= Evaluate r"${CURDIR}".replace(" ", "\\ ")
Execute Command include @${TEST_DIR}/TestPeripheral.cs
Execute Command mach create
Execute Command machine LoadPlatformDescriptionFromString "cpu: CPU.ARMv7A @ sysbus { cpuType: \\"cortex-a9\\" }"
Execute Command machine LoadPlatformDescriptionFromString "mem: Memory.MappedMemory @ sysbus 0x0 { size: 0x1000 }"
Execute Command machine LoadPlatformDescriptionFromString "mock: Mocks.TestPeripheral @ sysbus 0x2000"
Prepare Multicore Machine
${TEST_DIR}= Evaluate r"${CURDIR}".replace(" ", "\\ ")
Execute Command include @${TEST_DIR}/TestPeripheral.cs
Execute Command mach create
Execute Command machine LoadPlatformDescriptionFromString "cpu0: CPU.ARMv7A @ sysbus { cpuType: \\"cortex-a9\\" }"
Execute Command machine LoadPlatformDescriptionFromString "cpu1: CPU.ARMv7A @ sysbus { cpuType: \\"cortex-a9\\" }"
Execute Command machine LoadPlatformDescriptionFromString "mem: Memory.MappedMemory @ sysbus 0x0 { size: 0x1000 }"
Execute Command machine LoadPlatformDescriptionFromString "mock: Mocks.TestPeripheral @ sysbus 0x2000"
Scheduled Action Should Be Delayed By ${delay} Microseconds
${x}= Wait For Log Entry Written value 0x0 to Reg0
${c}= Get Regexp Matches ${x} \\.([0-9]+) 1
${y}= Evaluate str(int(${c[0]}) + ${delay}).rjust(6, '0')
Wait For Log Entry Executing scheduled action for Reg0; current timestamp is 00:00:00.${y}
Fill Memory
# prepare a block of code
# containing precisely 12 instructions
# consisting mostly of `nops` with
# a single `strb` inbetween
# 1: nop
Execute Command sysbus WriteDoubleWord 0x10 0xe320f000
# 2: nop
Execute Command sysbus WriteDoubleWord 0x14 0xe320f000
# 3: nop
Execute Command sysbus WriteDoubleWord 0x18 0xe320f000
# 4: nop
Execute Command sysbus WriteDoubleWord 0x1c 0xe320f000
# 5: nop
Execute Command sysbus WriteDoubleWord 0x20 0xe320f000
# 6: nop
Execute Command sysbus WriteDoubleWord 0x24 0xe320f000
# 7: nop
Execute Command sysbus WriteDoubleWord 0x28 0xe320f000
# 8: strb r0, [r1]
Execute Command sysbus WriteDoubleWord 0x2c 0xe5c10000
# 9: nop
Execute Command sysbus WriteDoubleWord 0x30 0xe320f000
# 10: nop
Execute Command sysbus WriteDoubleWord 0x34 0xe320f000
# 11: nop
Execute Command sysbus WriteDoubleWord 0x38 0xe320f000
# 12: nop
Execute Command sysbus WriteDoubleWord 0x3c 0xe320f000
# 13: j -4
Execute Command sysbus WriteDoubleWord 0x40 0xeafffffd
*** Test Cases ***
Should Delay Action
Prepare Machine
Execute Command sysbus.mock SetDelay 3
Create Log Tester 1
Execute Command sysbus.cpu PC 0x10
Execute Command sysbus.cpu SetRegisterUnsafe 1 0x2000
Fill Memory
Scheduled Action Should Be Delayed By 3 Microseconds
Should Delay Action With Multiple Cores
Prepare Multicore Machine
Execute Command machine SetSerialExecution true
Execute Command sysbus.mock SetDelay 3
Create Log Tester 1
Execute Command sysbus.cpu0 PC 0x10
Execute Command sysbus.cpu0 SetRegisterUnsafe 1 0x2000
# just make the other CPU spin in a loop
Execute Command sysbus.cpu1 PC 0x3c
Fill Memory
Scheduled Action Should Be Delayed By 3 Microseconds
Should Delay Action With Multiple Cores In Different Ordering
Prepare Multicore Machine
Execute Command machine SetSerialExecution true
Execute Command sysbus.mock SetDelay 3
Create Log Tester 1
Execute Command sysbus.cpu1 PC 0x10
Execute Command sysbus.cpu1 SetRegisterUnsafe 1 0x2000
# just make the other CPU spin in a loop
Execute Command sysbus.cpu0 PC 0x3c
Fill Memory
Scheduled Action Should Be Delayed By 3 Microseconds