1*** Settings ***
2Test Setup         Create Machine
3*** Variables ***
4${PLAT}                             SEPARATOR=\n  """
5...                                 cpu: CPU.ARMv8R @ sysbus
6...                                 ${SPACE*4}cpuType: "cortex-r52"
7...                                 ${SPACE*4}genericInterruptController: gic
8...                                 ${SPACE*4}init:
9...                                 ${SPACE*4}${SPACE*4}RegisterTCMRegion sysbus.atcm0 0
10...                                 ${SPACE*4}${SPACE*4}RegisterTCMRegion sysbus.btcm0 1
11...                                 ${SPACE*4}${SPACE*4}RegisterTCMRegion sysbus.ctcm0 2
12...
13...                                 timer: Timers.ARM_GenericTimer @ cpu
14...                                 ${SPACE*4}frequency: 1000000000
15...                                 ${SPACE*4}EL1PhysicalTimerIRQ -> gic#0@30
16...                                 ${SPACE*4}EL1VirtualTimerIRQ -> gic#0@27
17...                                 ${SPACE*4}NonSecureEL2PhysicalTimerIRQ -> gic#0@26
18...
19...                                 gic: IRQControllers.ARM_GenericInterruptController @ {
20...                                 ${SPACE*4}${SPACE*4}sysbus new Bus.BusMultiRegistration { address: 0x6E00000; size: 0x10000; region: \"distributor\" };
21...                                 ${SPACE*4}${SPACE*4}sysbus new IRQControllers.ArmGicRedistributorRegistration { attachedCPU: cpu; address: 0x6E10000 }
22...                                 ${SPACE*4}}
23...                                 ${SPACE*4}\[0-1] -> cpu@[0-1]
24...                                 ${SPACE*4}supportsTwoSecurityStates: false
25...
26...                                 atcm0: Memory.MappedMemory @ {sysbus new Bus.BusPointRegistration { address: 0x0; cpu: cpu }}
27...                                 ${SPACE*4}size: 0x10000
28...
29...                                 btcm0: Memory.MappedMemory @ {sysbus new Bus.BusPointRegistration { address: 0x20000; cpu: cpu }}
30...                                 ${SPACE*4}size: 0x20000
31...
32...                                 ctcm0: Memory.MappedMemory @ {sysbus new Bus.BusPointRegistration { address: 0x40000; cpu: cpu }}
33...                                 ${SPACE*4}size: 0x40000
34...                                 """
35
36*** Keywords ***
37Get System Register As Int
38    [Arguments]                     ${reg_name}
39    ${as_str}=                      Execute Command  cpu GetSystemRegisterValue ${reg_name}
40    ${as_int}=                      Convert To Integer  ${as_str}
41    RETURN                          ${as_int}
42
43Get Register Field
44    [Arguments]                     ${int_value}  ${start_offset}  ${mask}
45    ${field_val}=                   Evaluate  ((${int_value} >> ${start_offset}) & ${mask})
46    RETURN                          ${field_val}
47
48Field Should Have Correct Value
49    [Arguments]                     ${register_name}  ${field_offset}  ${field_mask}  ${expected_value}  ${error_message}
50    ${reg_value}=                   Get System Register As Int  ${register_name}
51    ${field_value}=                 Get Register Field  ${reg_value}  ${field_offset}  ${field_mask}
52    Should Be Equal As Integers     ${field_value}  ${expected_value}  ${error_message}
53
54Create Machine
55    Execute Command                 mach create
56    Execute Command                 machine LoadPlatformDescriptionFromString ${PLAT}
57    Execute Command                 using sysbus
58
59*** Test Cases ***
60# TCM tests
61ID_MMFR0 Register Should Have Correct Value
62   [Template]   Field Should Have Correct Value
63   "ID_MMFR0"  16  0b1111   0b0001  ID_MMFR0 TCM bit should be enabled
64
65TCMType Register Should Have Correct Value
66   [Template]   Field Should Have Correct Value
67   "TCMTR"  0   0b111   0b111  ABC enabled region bits incorrect
68   "TCMTR"  29  0b1111  0b100  TCM bits incorrect
69
70IMP_.TCMREGIONR Should Have Correct Value
71   [Template]   Field Should Have Correct Value
72   "IMP_ATCMREGIONR"  2  0b11111     0b00111  TCM A region size mismatch
73   "IMP_ATCMREGIONR"  0  0xFFFFF000  0x0      TCM A region base address mismatch
74   "IMP_BTCMREGIONR"  2  0b11111     0b01000  TCM B region size mismatch
75   "IMP_BTCMREGIONR"  0  0xFFFFF000  0x20000  TCM B region base address mismatch
76   "IMP_CTCMREGIONR"  2  0b11111     0b01001  TCM C region size mismatch
77   "IMP_CTCMREGIONR"  0  0xFFFFF000  0x40000  TCM C region base address mismatch
78