1*** Variables *** 2${GICR_TYPER} 8 3${GICR_ISENABLER0} 0x10100 4 5*** Keywords *** 6Prepare Machine 7 Execute Command using sysbus 8 Execute Command mach create 9 # The specific platform doesn't matter as long as it has GICv3 and more than one CPU 10 Execute Command machine LoadPlatformDescription @platforms/cpus/cortex-r52_smp.repl 11 12Write To Redistributor 13 [Arguments] ${index} ${reg} ${val} ${context} ${size}=Double 14 15 ${addr}= Evaluate 0xAF100000 + 0x20000 * ${index.strip()} + ${reg.strip()} 16 Execute Command sysbus Write${size}Word ${addr} ${val} ${context} 17 18Read From Redistributor 19 [Arguments] ${index} ${reg} ${context} ${size}=Double 20 21 ${addr}= Evaluate 0xAF100000 + 0x20000 * ${index.strip()} + ${reg.strip()} 22 ${val}= Execute Command sysbus Read${size}Word ${addr} ${context} 23 [Return] ${val} 24 25Compare ${cpu} Id With Redistributor ${rdist} 26 ${expected}= Execute Command ${cpu} MultiprocessingId 27 ${gicr_typer_val}= Read From Redistributor ${rdist} ${GICR_TYPER} ${cpu} size=Quad 28 ${gic_affinity}= Evaluate ${gicr_typer_val.strip()} >> 32 29 ${result}= Evaluate ${expected.strip()} == ${gic_affinity} 30 [Return] ${result} 31 32*** Test Cases *** 33Only Our Redistributor Should Match Our Affinity 34 Prepare Machine 35 36 ${result}= Compare cpu Id With Redistributor 0 37 Should Be True ${result} 38 ${result}= Compare cpu Id With Redistributor 1 39 Should Not Be True ${result} 40 41 ${result}= Compare cpu1 Id With Redistributor 1 42 Should Be True ${result} 43 ${result}= Compare cpu1 Id With Redistributor 0 44 Should Not Be True ${result} 45 46Wriiting To Own Redistributor Shouldn't Affect Others 47 Prepare Machine 48 49 ${expected_our_gicr_isenabler0}= Evaluate 0xffffffff 50 ${expected_other_gicr_isenabler0}= Evaluate 0x00000000 51 52 Write To Redistributor 0 ${GICR_ISENABLER0} ${expected_our_gicr_isenabler0} cpu 53 Write To Redistributor 1 ${GICR_ISENABLER0} ${expected_other_gicr_isenabler0} cpu1 54 55 ${actual_our_gicr_isenabler0}= Read From Redistributor 0 ${GICR_ISENABLER0} cpu 56 ${actual_other_gicr_isenabler0}= Read From Redistributor 1 ${GICR_ISENABLER0} cpu 57 58 Should Be Equal As Integers ${expected_our_gicr_isenabler0} ${actual_our_gicr_isenabler0} 59 Should Be Equal As Integers ${expected_other_gicr_isenabler0} ${actual_other_gicr_isenabler0} 60 61Writing To Other Redistributor Shouldn't Affect Own 62 Prepare Machine 63 64 ${expected_our_gicr_isenabler0}= Evaluate 0x00000000 65 ${expected_other_gicr_isenabler0}= Evaluate 0xffffffff 66 67 Write To Redistributor 0 ${GICR_ISENABLER0} ${expected_our_gicr_isenabler0} cpu 68 Write To Redistributor 1 ${GICR_ISENABLER0} ${expected_other_gicr_isenabler0} cpu 69 70 ${actual_our_gicr_isenabler0}= Read From Redistributor 0 ${GICR_ISENABLER0} cpu 71 ${actual_other_gicr_isenabler0}= Read From Redistributor 1 ${GICR_ISENABLER0} cpu1 72 73 Should Be Equal As Integers ${expected_our_gicr_isenabler0} ${actual_our_gicr_isenabler0} 74 Should Be Equal As Integers ${expected_other_gicr_isenabler0} ${actual_other_gicr_isenabler0} 75