1. IPCM 模块简介(Introduction)
1.1 IPCM 是什么?
PL320 IPCM 是一个高度可配置的核间通信硬件模块,主要能力包括:
向其他 CPU 核发送中断
随中断携带少量数据(Mailbox Data)
支持一对一 / 一对多的消息通信
支持自动应答(Auto Acknowledge)
支持邮箱链式发送(Auto Link)
IPCM 通过AMBAAHB接口被各个 CPU 核访问,常与:
Core Identification Module(PL321)
中断控制器(如 VIC / GIC)
一起使用,构成完整的多核通信体系。
注意channel有两个含义,一个mbox内部的channel和硬件定义的channel id和cpu绑定的概念
2. 功能架构总览(Functional Overview)
2.1 模块整体结构
IPCM 主要由三部分组成:
AHB接口
所有寄存器通过 AHB 访问
支持多个 CPU 核同时访问
Mailbox 与控制逻辑
1~32 个 Mailbox
每个 Mailbox 具有独立的源、目的、中断、数据寄存器
中断生成逻辑
将 Mailbox 状态映射为最多 32 路中断输出(IPCMINT31:0)
2.2 IPCM 在多核系统中的位置
典型系统中:
每个 CPU 核:
有本地 AHB
有自己的中断控制器
IPCM:
挂在共享 AHB 上
中断线连接到各个核的中断控制器
这样任何一个核都可以通过 IPCM 给其他核发消息。
3. IPCM 的基本通信模型
3.1 Channel ID 的概念
IPCM 用ChannelID来抽象“中断接收者”:
Channel ID 是one-hot 编码
每一位对应一个 IPCMINTxxx 中断输出
一个核可以有一个或多个ChannelID
例如:
| Channel ID | 中断输出 |
| 0x1 | IPCMINT000 |
| 0x2 | IPCMINT111 |
| 0x4 | IPCMINT222 |
| … | … |
3.2 一个 Mailbox 包含什么
每个 Mailbox 内部包括:
Source Register
表示当前 Mailbox 被哪个核“占用”
Channel id不是mbox的通道,而是通往某个cpu的cpu编号,0表示空闲,mailbox表示一个mbox channel
这里表示src需要接收ack的中断
Destination Register
指定消息要发送给哪些 Channel ID
Mask Register
控制是否对某个 Channel ID 产生中断
Mode Register
Auto Acknowledge / Auto Link
Send Register
触发发送 / 应答中断
Data Registers(0~7 个)
存放消息数据
Mailbox 的设计目标很明确:中断 + 少量payload
4. IPCM 的工作流程(Functional Operation)
4.1 基本消息发送流程
一个最典型的流程如下:
源核占用 Mailbox
写 Source Register(one-hot Channel ID)
设置目标核
在 Destination Register 中 OR 多个 Channel ID
配置中断 Mask
写入数据寄存器
写 Send Register bit0
触发目的核中断
目的核处理中断
应答(Acknowledge)
手动或自动返回给源核
4.2 Auto Acknowledge(自动应答)
当Auto Acknowledge使能时:
多个目标核都必须清除自己的中断
当 Destination Register 变为 0:
硬件自动向源核发送应答中断
应答数据与原始数据相同
4.3 Auto Link(邮箱链式发送)
Auto Link 允许:
将多个 Mailbox 串成一个“发送队列”
前一个 Mailbox 被应答后:
不打断源核
自动触发下一个 Mailbox 发送
mbox0搞完就到了mbox1,其实是两个mbox的ch但是这里搞得好像是两个mbox
5. 可配置能力(Configuration)
IPCM 在综合时可配置三个参数:
| 参数 | 范围 |
| Mailbox 数量 | 1 ~ 32 |
| 每个 Mailbox 的 Data 寄存器数 | 0 ~ 7 |
| 中断输出数 | 1 ~ 32 |
这些配置通过硬件引脚:
MBOXNUMINTNUMDATANUM
并反映在Configuration Status Register中,方便驱动自动识别能力。
6. 典型通信示例分析
6.1 Core0 → Core1 单次消息
关键步骤:
Core0 占用 Mailbox0
设置 Core1 为 Destination
写数据
Send bit0 → Core1 中断
Core1 读取数据
Core1 Send bit1 → Core0 应答
Core0 释放 Mailbox
6.2 背靠背消息(Back-to-Back)
同一个 Mailbox
多次 Send / Ack
Mailbox 不释放
减少仲裁与配置开销
7. 设计特点与适用场景总结
7.1 IPCM 的优势
硬件级同步,低延迟
结构简单,软件易实现
天然支持 SMP / AMP
非常适合:
核间控制消息
电源管理
固件与 OS 通信
Secure / Non-secure world 通信
7.2 IPCM 的局限
数据量小(最多 7 × 32bit)
更偏“信号 + 控制”,不是高速数据通道
更适合作为:
kick / notify / command
而不是 bulk data 传输。