PSCI 杂说
PSCI(Power State Coordination Interface)为Linux和ATF之间的电源管理交互协议,不只是用来电源管理,还有开关机以及进入安全域做一些事情也是这种协议进行。利用的是SMC之类的系统调用完成。(如果感兴趣人多,可以考虑也写一个类似的概述)
本来想上传这个pdf,但是说已经存在了,那就算了。大家自己搜吧
SCMI
SCMI(System Control and Management Interface)协议为ACPU和M0做交流使用的方式,纯电源管理和上下电类型,两者通讯机制都是不一样的。
文档下载链接 https://download.csdn.net/download/weixin_36406973/12601118
抽象内容
SCMI抽象出协议和传输两层,协议层描述能够支持的命令,传输层定义了命令通过什么方式传输,发送命令方称为agent。有个限制,每个agent的传输通道必须一个或者多个,然后如果有安全需求,那安全AP必须使用安全的通道进行传输数据。
协议层
协议层有以下几个限制
- 通道(channel)必须是分开独立的,各个agent不能使用同一个。避免platform无法识别message对应方
- agent 必须是独立的操作系统
- 通道支持双向通讯,另外也能够支持中断、polling两种方式,让agent选择
从agent到platform的消息分为两种,同步和异步,为A2P通道 - 同步(synchronous),agent返回的时候对应的platform操作就已经完成了。platform返回操作结果命令也是通过agent到platform的通道,同一个通道完成这些操作
- 异步(asynchronoous),当platform完成后,会发送 delayed response给到agent告知对方工作完成,这是P2A通道。agent发送完消息后,立马得到platform的返回,然后释放通道继续做下一次传输
[message header
]
[protocol_id
]
[message type
] - Commands 的message type都是0。对于不支持的协议和message类型,platform都要回复 NOT_SUPPORTED
- Delayed responses 类型都是2
- Notifications 为3
[message id
]
message id这个就不强求了,但是有个基本要求,如果有新增的协议,那里面0/1/2这三个message都必须按照协议走
传输层
传输层文档也就定义了一种方式 ,mailbox方式(核间通讯的一种ip)。这种通讯的前提是系统能够在agents和platform之间存在共享内存(ddr和片上flash都行,最好是片上flash)。mailebox能够完美支持前面提到的通道的需求,中断、内存和完成中断等都能够,而且是软件可操控。比如下面流程指出的中断和polling方式:
图我就不细说了,大家自己看图说话就行,如果有不理解的,我们可以评论区见。
这里我比较关心的是mailbox通讯怎么定义在flash里面的layout,刚好有个图我直接拿上来了
PSCI/SCMI两者之间关系
从图中可以看出,PSCI为AP内部的协议,然后需要实际控制外部设备或者电源域之类内容的时候,需要通过PSCI转为SCMI才行,或者AP直接发出SCMI协议去控制。