75 lines
3.5 KiB
Plaintext
75 lines
3.5 KiB
Plaintext
*** 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}
|