https://developer.arm.com/doc...
Arm提供很多CPU和GIC IP,在选择CPU和GIC IP组合时,需要考虑它们的兼容性。我们推荐使用新的CPU采用对应的GIC,以便得到最多的功能支持。
CPU | GIC-400 | GIC-500 | GIC-600 | GIC-700 |
---|---|---|---|---|
Cortex-A5 Cortex-A7 Cortex-A8 Cortex-A9 Cortex-A15 Cortex-A17 | GICv2 only | 不支持 | 不支持 | 不支持 |
Cortex-A53 Cortex-A57 Cortex-A72 Cortex-A73 Cortex-A32 Cortex-A35 Cortex-A34 | GICv2 only | GICv3 and GICv2 | GICv3 only | GICv3 only |
Cortex-A65 | 不支持 | 不支持 | GICv3 only | GICv3 only |
Cortex-A75 Cortex-A55 Neoverse N1 Cortex-A76 Cortex-A78 | GICv2 only (不推荐) | 不支持 | GICv3 only | GICv3 only |
Neoverse V1 Neoverse N2 | GICv2 only (不推荐) | 不支持 | GICv3 only | GICv4.1 |
Cortex-A510 Cortex-A710 Cortex-A715 | GICv2 (不推荐) | 不支持 | GICv3 only | GICv4.1 |
注:Arm CPU构架定义了MPIDR寄存器用来标识CPU ID。 GICv3 Redistributor寄存器GICR_TYPER可以标示是那个Redistributor。在CPU和GIC组合系统中,与一个CPU对应的Redistributor的GICR_TYPE.Affinity_Value应该和CPU的MPIDR的Affinity值匹配。
Cortex-A53 Cortex-A57 Cortex-A72 Cortex-A73 Cortex-A32 Cortex-A35 Cortex-A34 使用MPIDR affinity 1来标识哪个cluster ID, 使用affinity 0来标识cluster里面的哪个CPU。
对于Armv8.2的CPU,它们使用MPIDR affinity 2来标识哪个cluster ID, 使用affinity 1来标识cluster里面的哪个CPU,使用affinity 0来标识CPU里面的哪个hardware thread(目前只有A65和E1支持硬件多线程,其他CPU MPIDR affinity 0固定为0). 但是GIC-500的GICR_TYPE.Affinity_Value只能设置Affinity Level 1 和Affinity Level 0,其Affinity Level 2和Affinity Level 3值固定为0. 因而GIC-500不能和这些Armv8.2 CPU一起使用。
只支持ICC_SRE.SRE设置为1的CPU不能支持GICv3的GICv2模式。