GIC Multi-View &Multi-Chip
GiC solution
GIC Multi-View vs Multi-chip 详细分析
1. 基本概念
在进入对比之前,必须先明确三个不同的概念,它们经常被混淆:
| 概念 | 是什么 | 适用范围 |
|---|---|---|
| GICv3 Interrupt Grouping | 将中断分为 Group 0 / Group 1S / Group 1NS,基于安全状态做访问隔离 | 所有 GICv3/v4 实现 |
| GIC Multi-View | GIC-720AE 专有扩展,在一个物理 GIC 内划分多个完全独立的逻辑视图(View),每个 View 有独立寄存器空间和 INTID 空间 | 仅 ARM CoreLink GIC-720AE |
| GIC Multi-chip | 多块物理芯片各自有独立 GIC,通过片间互联组成统一中断域 | 多 Die / 多 SoC 系统 |
Group 隔离 ≠ Multi-View。 前者是 GICv3 架构规范中的中断分组机制,后者是 GIC-720AE 特有的硬件视图划分能力,两者在设计目标、隔离强度、使用场景上均有本质区别。
2. GICv3 Interrupt Grouping(中断分组)
2.1 原理
GICv3 将所有中断分为三个 Group,由 GICD_IGROUPR 和 GICD_IGRPMODR 两个寄存器的组合编码决定:
GICD_IGROUPR.bit GICD_IGRPMODR.bit → Group
────────────────────────────────────────────────────
0 0 → Group 0 (FIQ,Secure EL3/EL1)
0 1 → Group 1 Secure (IRQ,Secure EL1)
1 0 → Group 1 NS (IRQ,Non-Secure EL1/EL2)
GIC 硬件根据当前访问者的安全状态(Secure / Non-Secure),对寄存器呈现不同的读写视图,不同 Group 的中断在逻辑上互相屏蔽。
2.2 各 Exception Level 可见的中断范围
访问者 可见的中断 Group
─────────────────────────────────────────────────────────
Secure EL3 (Monitor) → Group 0 + Group 1S + Group 1NS(全部)
Secure EL1 (TEE/RTOS) → Group 0 + Group 1 Secure
Non-Secure EL2 (Hyp) → Group 1 NS + 虚拟中断控制(ICH_*)
Non-Secure EL1 (OS) → Group 1 NS
虚拟化扩展在此基础上增加一层:Hypervisor(EL2)通过 ICH_LR<n>_EL2(List Register)向 Guest 注入虚拟中断,Guest 通过 ICV_* 系统寄存器访问虚拟 CPU Interface。
2.3 Group 隔离下的寄存器行为
Group 隔离的本质是:同一套物理寄存器,硬件根据访问者的安全状态过滤可见 bit 或返回 RAZ/WI。
GICD_IGROUPR / GICD_IGRPMODR(Group 配置)
访问者 GICD_IGROUPR 行为 GICD_IGRPMODR 行为
────────────────────────────────────────────────────────────────────
Secure EL3 读写所有 INTID 的 bit 读写所有 INTID 的 bit
Secure EL1 读写 Group 0/1S 的 bit 读写 Group 0/1S 的 bit
Non-Secure EL1/EL2 RAZ/WI(全部) RAZ/WI(全部)
Non-Secure 世界无法读取或修改任何 INTID 的 Group 归属,由硬件强制执行。
GICD_ISENABLER / GICD_ICENABLER(中断使能)
硬件只暴露属于当前视图 Group 的 bit,其余 bit RAZ/WI:
场景:INTID 33(Group 0),INTID 96(Group 1 NS)
Non-Secure EL1 读 GICD_ISENABLER[1]:
bit1(INTID 33)→ RAZ(Group 0,NS 不可见)
bit0(INTID 32)→ 返回真实值(若为 Group 1 NS)
Non-Secure EL1 写 GICD_ISENABLER[1] bit1:
→ WI(不影响 Group 0 的使能状态)
GICD_IPRIORITYR(优先级)
Non-Secure 视图下读出的值被硬件右移 1 位,最高位强制置 1:
Secure EL3 写 INTID 96 优先级 = 0x40(真实存储值)
Non-Secure EL1 读: → 返回 0xA0(0x40 >> 1 | 0x80)
Non-Secure EL1 写: 写入值被截断,最高位不可为 0
优先级空间划分:
0x00 ~ 0x7F → Secure 专用(NS 不可写入此范围)
0x80 ~ 0xFF → NS 可用范围
效果:Secure 中断优先级硬件上永远高于 NS 中断。
ICC_PMR_EL1 / ICC_IGRPEN1_EL1(CPU Interface)
这两个系统寄存器有两套独立的物理存储,Secure 和 NS 各一份,切换安全状态时硬件自动切换:
Secure EL1 写 ICC_PMR_EL1 = 0x80 → 写入 Secure PMR(不影响 NS PMR)
NS EL1 写 ICC_PMR_EL1 = 0xFF → 写入 NS PMR(不影响 Secure PMR)
ICC_IGRPEN0_EL1: 仅 Secure 可访问,NS 访问 → UNDEFINED 异常
ICC_IGRPEN1_EL1: Secure 侧控制 Group 1S;NS 侧控制 Group 1NS(独立存储)
2.4 Group 隔离的能力边界
- 最多三个隔离域(Group 0 / Group 1S / Group 1NS),固定不可扩展
- 隔离维度只有 Secure vs Non-Secure,无法在多个 NS OS 之间做隔离
- 多个 NS OS 共存时,必须叠加 Hypervisor 通过虚拟化机制隔离
- LPI(INTID ≥ 8192)硬件固定属于 Group 1 NS,Secure 侧无法使用 LPI / ITS / MSI
2.5 LPI 与 Group 的强制绑定
中断类型 INTID 范围 可用 Group
────────────────────────────────────────────────────────
SGI 0 ~ 15 Group 0 / Group 1S / Group 1NS(可配置)
PPI 16 ~ 31 Group 0 / Group 1S / Group 1NS(可配置)
SPI 32 ~ 1019 Group 0 / Group 1S / Group 1NS(可配置)
LPI 8192 ~ 仅 Group 1 NS(硬件固定,不可更改)
Secure RTOS 需要使用 PCIe / NVMe 等 MSI 类设备时,变通方案:
- NS Linux 接收 LPI → 共享内存 + SGI 通知 Secure RTOS(软件转发)
- 使用 SPI 替代 LPI(需设备支持传统线中断模式)
- EL3(ATF)作中介拦截转发(增加 SMC 调用开销)
3. GIC Multi-View(GIC-720AE 专有特性)
3.1 是什么
GIC Multi-View 是 ARM CoreLink GIC-720AE 特有的硬件扩展,专为汽车 ASIL B/D 混合关键度系统设计。它在一个物理 GIC 内部划分出多个完全独立的逻辑 GIC 实例,称为 View。
每个 View 拥有:
- 独立的 GICD 寄存器地址页(不同 MMIO 基地址,互相不可访问)
- 独立的 SPI INTID 空间(各 View 的 INTID 不冲突、不共享)
- 独立的优先级和路由配置
View 之间由硬件强制隔离,不是靠 Group bit 软件过滤。一个 View 内的 OS 物理上看不到其他 View 的寄存器,更无法操作其他 View 的中断。
3.2 与 Group 隔离的根本区别
Group 隔离:
┌──────────────────────────────────────────┐
│ 共享一个 GICD 寄存器页 │
│ INTID 33 → Group 0 (Secure RTOS 可见) │
│ INTID 96 → Group 1NS (Linux 可见) │
│ 同一 INTID 空间,靠 bit 过滤区分 │
└──────────────────────────────────────────┘
Multi-View:
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ View 0 │ │ View 1 │ │ View 2 │
│ 独立 GICD │ │ 独立 GICD │ │ 独立 GICD │
│ INTID 32~N │ │ INTID 32~M │ │ INTID 32~K │
│ ASIL-D RTOS │ │ Android │ │ AUTOSAR │
│ (可以是 NS) │ │ (NS) │ │ (NS) │
└──────────────┘ └──────────────┘ └──────────────┘
三个 View 可以全部是 NS,互相之间硬件完全隔离
3.3 核心能力对比
| 维度 | GICv3 Group 隔离 | GIC-720AE Multi-View |
|---|---|---|
| 适用产品 | 所有 GICv3/v4 | 仅 GIC-720AE |
| GICD 实例 | 共享一个(靠 bit 过滤) | 每个 View 独立 GICD 寄存器页 |
| INTID 空间 | 全局共享 | 每个 View 独立 |
| 隔离维度 | 仅 Secure vs NS | 任意 OS 之间,含多个 NS OS |
| View / Group 数量 | 固定 3 个 Group | 可配置多个 View |
| NS OS 间隔离 | ❌(需叠加 Hypervisor) | ✅(硬件直接支持) |
| LPI 归属 | 只能 Group 1 NS | 可绑定到特定 View |
| 目标场景 | 通用 TrustZone / Hypervisor | 汽车 ASIL 混合关键度 |
3.4 AMP 场景(无需 Hypervisor)
Multi-View 的关键价值:多个 NS OS 可以不依赖 Hypervisor 直接隔离。
GIC-720AE 汽车 SoC 示例:
View 0 → ASIL-D 安全 RTOS(PikeOS / INTEGRITY)
View 1 → Android Automotive(座舱娱乐)
View 2 → AUTOSAR Classic(底盘 / 动力控制)
三个 OS 全部运行在 NS 世界(或 View 0 在 Secure),
每个 OS 访问自己 View 的 GICD,物理上看不到其他 View,
无需 Hypervisor 软件介入,隔离由硬件保证。
对比 GICv3 Group 隔离在同样场景下的局限:
GICv3 Group 隔离下三 OS 共存:
→ 只有 2 个 NS Group 可用(Group 1S 和 Group 1NS)
→ AUTOSAR 和 Android 无法在同一 NS 侧互相隔离
→ 必须引入 Hypervisor 做软件虚拟化,增加延迟和复杂度
3.5 Hypervisor 场景
配合 Hypervisor 使用时,Multi-View 可以进一步降低虚拟化开销:
View 0 → Hypervisor 管理域
View 1 → Guest VM 0(Linux) ← Guest 直接访问 View 1 的独立 GICD
View 2 → Guest VM 1(RTOS) ← Guest 直接访问 View 2 的独立 GICD
优势:Guest 看到完整独立的 GIC,无需 Hypervisor 软件模拟 GICD 寄存器,
减少因 GICD 访问陷入 EL2 的次数,降低中断虚拟化延迟。
对比标准 GICv3 Hypervisor 方案:
标准 GICv3 中 Guest 对 GICD 的所有访问都需要陷入 EL2 由 Hypervisor 模拟,
Multi-View 下 Guest 直接操作自己 View 的真实 GICD,不产生 EL2 陷入。
4. GIC Multi-chip
4.1 是什么
Multi-chip 是 GICv3/v4 规范中用于跨物理芯片中断互联的扩展机制。每块芯片拥有独立的 GIC 实例(独立 GICD + 独立 GICR),通过芯片间专用信号线将多个 GIC 组成一个逻辑上统一的中断域。
┌──────────────────┐ chip-to-chip ┌──────────────────┐
│ Chip 0 │◄─────────────────────►│ Chip 1 │
│ GICD #0 │ GICMP 信号线 │ GICD #1 │
│ GICR × N │ │ GICR × N │
│ CPU 0 ~ N-1 │ │ CPU N ~ 2N-1 │
│ 本地外设 A~F │ │ 本地外设 G~L │
└──────────────────┘ └──────────────────┘
4.2 互联机制
方式一:专用 chip-to-chip 信号线(GICMP)
Chip 0 GICD ──GICMP──► Chip 1 GICD
每个 GICD 维护路由表,Aff3 标识目标芯片,跨片请求通过 GICMP 转发。
方式二:基于 ITS 的 LPI 路由
外设 → MSI 写 ITS → 查 ITT → 得到目标 GICR 地址(可跨芯片)
→ 通过片间互联总线将 LPI 发到目标芯片的 GICR
4.3 Aff3 路由配置
GICD_IROUTER[intid]:
bits[39:32] = Aff3 → 目标芯片编号
bits[23:16] = Aff2 → 目标 Socket
bits[15: 8] = Aff1 → 目标 Cluster
bits[ 7: 0] = Aff0 → 目标 Core
每个 GICD 还需配置:
GICD_CHIPSR → 本芯片的 Aff3 编号
GICD_DCHIPR → 指向其他芯片 GICD 的路由入口地址
4.4 优点
突破单芯片核数上限:Multi-chip 允许将多块芯片的 CPU 组成统一中断域,线性扩展核数,适合构建大规模 SMP 系统。
强物理隔离:每块芯片有独立 GICD,一块芯片的故障不会直接波及另一块芯片的中断控制器。
本地中断低延迟:每块芯片的本地外设中断路由到本地 CPU 时,路径与单芯片完全一致,无额外延迟。
支持超大规模 NUMA 系统:Aff3 + Aff2 + Aff1 + Aff0 四级编址,理论支持 256 × 256 × 256 × 256 个 PE。
4.5 缺点
需要额外硬件支持:芯片间必须有专用物理信号线或支持 GIC 互联协议的总线,通用性差。
跨片中断延迟高:相比片内路由增加数十到数百纳秒的传输延迟。
软件复杂度大幅提升:启动枚举数百个 GICR、GICD_IROUTER 必须填正确 Aff3、跨片 SGI 需要额外机制、电源管理复杂。
调试困难:中断路径跨越物理芯片边界,根因定位难度大。
互操作性依赖厂商实现:片间信号协议和寄存器扩展由芯片厂商自行实现,不同厂商的 Multi-chip GIC 之间不能互联。
5. 三者综合对比
5.1 定位对比
| 维度 | GICv3 Group 隔离 | GIC-720AE Multi-View | GIC Multi-chip |
|---|---|---|---|
| 解决的问题 | 同芯片 Secure/NS 隔离 | 同芯片多 OS 强隔离(含多 NS OS) | 多芯片 GIC 互联 |
| GIC 数量 | 1 | 1(内部多 View) | 每芯片 1 个 |
| 额外硬件 | 无 | 无(GIC-720AE 内建) | 芯片间物理互联信号线 |
| NS OS 间隔离 | ❌ | ✅ | 芯片内不适用 |
| 需要 Hypervisor | 多 NS OS 时需要 | 不需要 | 取决于场景 |
| 适用场景 | 通用嵌入式 / 服务器 | 汽车 ASIL 混合关键度 | 多 Die 服务器 / 多 SoC |
5.2 AMP 场景选择
所有核在同一芯片?
│
├── 是
│ ├── 只需 Secure vs NS 隔离?
│ │ → GICv3 Group 隔离即可
│ │
│ └── 需要多个 NS OS 互相隔离?
│ ├── 使用 GIC-720AE?
│ │ → GIC Multi-View(无需 Hypervisor,硬件直接隔离)
│ └── 使用普通 GICv3?
│ → 必须叠加 Hypervisor(Jailhouse / KVM / Xen)
│
└── 否(多芯片)
→ GIC Multi-chip
芯片内部仍可叠加 Group 隔离或 Multi-View
5.3 优缺点汇总
GICv3 Group 隔离
优点:所有 GICv3 实现通用;零额外硬件成本;Secure/NS 隔离有硬件背书;配置简单。
缺点:最多 3 个隔离域;无法在多个 NS OS 间隔离;LPI 只能属于 Group 1 NS;多 NS OS 场景必须引入 Hypervisor。
GIC Multi-View(GIC-720AE)
优点:多个 NS OS 之间硬件直接隔离;无需 Hypervisor 介入;每个 View 有独立 INTID 空间;View 数量灵活可配;Hypervisor 场景下减少 GICD 模拟开销。
缺点:仅限 GIC-720AE,不是通用规范;生态软件支持相对有限;主要面向汽车场景。
GIC Multi-chip
优点:突破单芯片核数上限;支持超大规模 SMP;本地中断路径无额外延迟;具备芯片级故障隔离能力。
缺点:需要额外硬件互联信号线;跨片中断延迟高;软件配置复杂;调试困难;厂商实现差异导致互操作性差。
6. 使用案例
6.1 GICv3 Group 隔离案例
案例一:TrustZone AMP(移动 SoC,Linux + OP-TEE)
EL3:ATF(Secure Monitor)
EL1 Secure:OP-TEE → Group 0 + Group 1 Secure
EL1 NS:Android / Linux → Group 1 NS
中断分配:
Group 0 → Secure 定时器 INTID 29,Secure Watchdog INTID 33
Group 1S → Crypto Engine INTID 34,Secure UART INTID 35
Group 1NS → 以太网 INTID 96,USB INTID 128,Display INTID 160
LPI → PCIe NVMe(仅 Group 1 NS,Linux 处理)
// ATF 配置 Crypto Engine 为 Group 1 Secure
GICD_IGROUPR[1] &= ~(1 << 2); // INTID=34,bit = 34%32 = 2
GICD_IGRPMODR[1] |= (1 << 2);
案例二:Hypervisor 多 VM(KVM / Xen)
EL2:KVM Hypervisor
中断注入流程(物理 SPI 96 → VM1):
① 外设触发 SPI 96
② GICD 路由到物理 CPU3(当前调度 VM1 的核)
③ CPU3 陷入 EL2,Hypervisor 处理
④ 写 ICH_LR:vINTID=100, pINTID=96, HW=1, State=Pending
⑤ eret 回 VM1(EL1)
⑥ GIC 向 VM1 发出 vIRQ
⑦ VM1 读 ICV_IAR1_EL1 = 100,执行 ISR
⑧ VM1 写 ICV_EOIR1_EL1 = 100,GIC 自动 deactivate 物理 SPI 96
案例三:工业 AMP(RTOS + Linux,Group 0 + Group 1 NS)
Cluster 0(Cortex-A55 × 4):Linux,Group 1 NS
Cluster 1(Cortex-R × 2) :实时 RTOS,Group 0
中断分配:
Group 0 → PWM INTID 33,ADC INTID 34,ENC INTID 35(实时外设)
Group 1NS → ETH INTID 96,CAN INTID 97,UART INTID 98
Linux 中断风暴不影响 RTOS 的 Group 0 FIQ 响应时间。
注意:PWM/ADC 只能用 SPI 线中断,不能用 LPI/MSI。
6.2 GIC Multi-View 案例(GIC-720AE)
案例:汽车 SoC 三 OS AMP
View 0:ASIL-D 安全 RTOS(制动 / 转向控制)
独立 GICD 基地址 0xN000_0000
SPI INTID 空间:32 ~ 127
View 1:Android Automotive(座舱娱乐)
独立 GICD 基地址 0xM000_0000
SPI INTID 空间:32 ~ 255
(与 View 0 的 INTID 32 互不干扰,各 View 独立编号)
View 2:AUTOSAR Classic(底盘控制)
独立 GICD 基地址 0xK000_0000
SPI INTID 空间:32 ~ 127
三个 OS 可以全部运行在 NS EL1,互相之间硬件完全隔离,
无需 Hypervisor,中断延迟接近裸机水平。
6.3 GIC Multi-chip 案例
案例一:多 Die 服务器
Die 0(128 核) Die 1(128 核)
GICD #0,Aff3 = 0 GICD #1,Aff3 = 1
CPU 0~127 CPU 128~255
跨 Die 中断路由:
Die 0 的 NIC(INTID 96)需路由到 Die 1 的 CPU 200
GICD_IROUTER[96] = (Aff3=1, Aff2=0, Aff1=1, Aff0=4)
→ GICD #0 查路由表 → GICMP 转发到 GICD #1 → 路由到 CPU 200 的 GICR
案例二:多 SoC 工业控制系统
Board 0(主控 SoC):Cortex-A × 8,运行 Linux
Board 1(加速器 SoC):专用计算核 × 16,运行专用固件
互联:高速串行总线(支持 GICMP 协议)
Board 1 计算完成中断 → 路由到 Board 0 的 CPU 3
Board 0 任务调度 SGI → 广播到 Board 1 所有核
7. 关键结论
- GICv3 Group 隔离 ≠ GIC Multi-View。Group 是所有 GICv3 的基础分组机制,Multi-View 是 GIC-720AE 专有的独立视图划分能力,两者是完全不同的特性。
- Group 隔离只能区分 Secure 和 Non-Secure,无法在多个 NS OS 之间直接隔离,多 NS OS 共存必须依赖 Hypervisor。
- GIC Multi-View 允许多个 NS OS 直接隔离,AMP 场景无需 Hypervisor 介入,是 GIC-720AE 面向汽车混合关键度场景的核心特性。
- AMP 系统是否需要 Multi-chip:只要所有核在同一块芯片上共享同一个 GIC,就不需要 Multi-chip;用 Group 隔离(普通 GICv3)或 Multi-View(GIC-720AE)即可。
- LPI 只能属于 Group 1 NS(GICv3 规范规定),Secure RTOS 无法直接使用 MSI 类设备;GIC-720AE Multi-View 的各 View 可以独立拥有 LPI 空间。
- Multi-chip 和 Multi-View / Group 隔离不互斥,大型系统中芯片间用 Multi-chip 互联,芯片内部用 Group 隔离或 Multi-View,各司其职。
评论
加载评论中...