blob: 91082c84a4db28f1bb373a9270d76b9ef154334a [file] [log] [blame]
*** Variables ***
${GICR_TYPER} 8
${GICR_ISENABLER0} 0x10100
*** Keywords ***
Prepare Machine
Execute Command using sysbus
Execute Command mach create
# The specific platform doesn't matter as long as it has GICv3 and more than one CPU
Execute Command machine LoadPlatformDescription @platforms/cpus/cortex-r52_smp.repl
Write To Redistributor
[Arguments] ${index} ${reg} ${val} ${context} ${size}=Double
${addr}= Evaluate 0xAF100000 + 0x20000 * ${index.strip()} + ${reg.strip()}
Execute Command sysbus Write${size}Word ${addr} ${val} ${context}
Read From Redistributor
[Arguments] ${index} ${reg} ${context} ${size}=Double
${addr}= Evaluate 0xAF100000 + 0x20000 * ${index.strip()} + ${reg.strip()}
${val}= Execute Command sysbus Read${size}Word ${addr} ${context}
[Return] ${val}
Compare ${cpu} Id With Redistributor ${rdist}
${expected}= Execute Command ${cpu} MultiprocessingId
${gicr_typer_val}= Read From Redistributor ${rdist} ${GICR_TYPER} ${cpu} size=Quad
${gic_affinity}= Evaluate ${gicr_typer_val.strip()} >> 32
${result}= Evaluate ${expected.strip()} == ${gic_affinity}
[Return] ${result}
*** Test Cases ***
Only Our Redistributor Should Match Our Affinity
Prepare Machine
${result}= Compare cpu Id With Redistributor 0
Should Be True ${result}
${result}= Compare cpu Id With Redistributor 1
Should Not Be True ${result}
${result}= Compare cpu1 Id With Redistributor 1
Should Be True ${result}
${result}= Compare cpu1 Id With Redistributor 0
Should Not Be True ${result}
Wriiting To Own Redistributor Shouldn't Affect Others
Prepare Machine
${expected_our_gicr_isenabler0}= Evaluate 0xffffffff
${expected_other_gicr_isenabler0}= Evaluate 0x00000000
Write To Redistributor 0 ${GICR_ISENABLER0} ${expected_our_gicr_isenabler0} cpu
Write To Redistributor 1 ${GICR_ISENABLER0} ${expected_other_gicr_isenabler0} cpu1
${actual_our_gicr_isenabler0}= Read From Redistributor 0 ${GICR_ISENABLER0} cpu
${actual_other_gicr_isenabler0}= Read From Redistributor 1 ${GICR_ISENABLER0} cpu
Should Be Equal As Integers ${expected_our_gicr_isenabler0} ${actual_our_gicr_isenabler0}
Should Be Equal As Integers ${expected_other_gicr_isenabler0} ${actual_other_gicr_isenabler0}
Writing To Other Redistributor Shouldn't Affect Own
Prepare Machine
${expected_our_gicr_isenabler0}= Evaluate 0x00000000
${expected_other_gicr_isenabler0}= Evaluate 0xffffffff
Write To Redistributor 0 ${GICR_ISENABLER0} ${expected_our_gicr_isenabler0} cpu
Write To Redistributor 1 ${GICR_ISENABLER0} ${expected_other_gicr_isenabler0} cpu
${actual_our_gicr_isenabler0}= Read From Redistributor 0 ${GICR_ISENABLER0} cpu
${actual_other_gicr_isenabler0}= Read From Redistributor 1 ${GICR_ISENABLER0} cpu1
Should Be Equal As Integers ${expected_our_gicr_isenabler0} ${actual_our_gicr_isenabler0}
Should Be Equal As Integers ${expected_other_gicr_isenabler0} ${actual_other_gicr_isenabler0}