12

棋子 · 2022年02月22日

ARM系列 -- SCMI

这篇是ARM电源管理系列文章中的一篇。

今天来看SCMI(System Control and Management Interface)。SCMI是用于系统管理的一组独立于操作系统的软件接口,包括以下几个方面:

  • 电源域管理
  • 性能管理
  • 时钟管理
  • 传感器管理
  • 复位管理
  • 电压域管理

这里提一句,电源域管理和电压域管理是两个不同的概念,所谓电源域管理指的是根据预先设计的低功耗状态来控制芯片/模块的电源开关等,而电压域管理指的是配置/控制芯片和模块的供电电压,比如实现动态调压。

在大规模SoC设计中,一般会把上面提到的系统管理用一个微控制器去处理,这样可以减轻应用处理器(ApplicationProcessor)的负载。在工作中,有时会把微控制器叫小core,应用处理器叫大core。这个微控制器对应的就是SCP(SystemControl Processor)概念,忘记的同学可以翻一下前面讲PCSA的文章,《ARM系列 -- PCSA(一)》和《ARM系列 -- PCSA(二)》。

在这套架构下,SCP接收AP的请求,并做出响应。也就是说AP与SCP之间需要相互通信。这就需要二者之间有一个通信的协议接口。参考下图,PSCI和MHU都已经讲过了,《ARM系列 -- PSCI》,《ARM系列 -- CSS Message Interface Protocols》今天要说的是SCMI。

image.png
SCMI主要规定了两个方面:

  • 协议(protocols):规定了组件之间支持的消息
  • 传输(transports):规范了消息如何在组件之间传递

SCMI的协议主要是为了协助操作系统做电源和性能管理,也就是协助完成OSPM(Operating System Power Management)。一般会把OS称为agent,而SCP及其管理的模块称为platform。下图是SCMI在系统里的示意图。
image.png
图中下方platform controller一般就是指SCP。AP发出SCMI命令,通过安全或者非安全通道发给SCP;SCP协调来自所有这些请求,并将硬件驱动到适当的电源或性能状态。图中上方部分,我们能看到,SCMI可以支持传感器,电源,电压,时钟,复位,性能的管理。

Agent与SCP之间通过传输通道(transport channel)来通信。一个agent至少要有一个专有的通道,通道不能和其它agent共享。通道是单向的,在A2P(agent to platform)通道上,agent是发起方;在P2A(platform to agent)通道上,platform是发起方。Agent与platform之间的通信可以采取中断机制,比如在P2A通道,当agent处理完platform的命令后可以发送一个中断给platform,以表示这个通道处于空闲状态,可以继续接收新的命令了。

下图,描述了agent与platform如何通过通道进行通信。A2P通道的消息,也称作命令,用于agent向platform发起请求。命令又分为同步命令和异步命令。P2A通道上的消息也可以分为两类:通知(notification)和延迟响应(delayed reponse)。同步命令会阻塞通道,在当前命令没有完成前,agent不能再发新的同步命令;异步命令则不会阻塞通道,SCP收到异步命令后会自行安排相应的后续管理操作,这样SCP可以接到异步命令后马上返回给agent一个响应,等命令完成后再返回一个额外的响应。
image.png
通道可以是标准的SCMI通道,或者是FastCHannel。FastChannel是一种轻型单向通道,专用于控制特定平台资源的单一SCMI消息类型。与标准通道不同,FastChannel不能用于承载多种消息类型,也不能显式控制多个平台资源。由于缺少多种消息类型及其标头要求,FastChannel可以为agent与platform通信提供潜在的低延迟机制。但是,与标准通道相比,FastChannel不能保证platform完成请求操作所需的时间较短。在当前的SCMI版本(3.0)中,FastChannel仅支持性能管理协议。通俗来说,就是FastChannel支持的消息类型少,且消息格式简单,所以传输延时会相对小一些,故名“快速”,但是也仅仅是传输快一些,并不能保证SCP完成请求的时间短。每个agent有自己专用的(可以是多个)通道,agent之间不能共享通道。SCP通过检查每个通道唯一的通道标识符来区分不同通道。

每个消息会带有一个8-bit的消息头信息(也叫协议ID,protocol_id),来标识不同类型的操作请求。重点关注0x10-0x17的这些协议,其它的都是保留协议,取决于系统中是否需要和具体的设计实现。
image.png
对于标准通道上的消息,消息头总共有32bit,从低位开始分别是:8bit的message_id;2bit的message_type;8bit的protocol_id;10bit的token;4bit的保留位。命令(同步和异步)的message_type是0;延迟响应的message_type是1;通知的message_type是2.
image.png
ARM定义了多种协议,用来辅助agent与platform之间的通信,比如电源管理,时钟管理等等。但是在实际设计中,可能并没有实现所有的协议。只有基本协议是必须支持的。所以agent首先要做的一件事,就是给platform发命令,去查询platform支持多少协议。这个过程叫做discovery(顺带提一句,ARM好像特别喜欢用discover这个词)。对于每组协议,都规定了哪些命令必须支持,哪些命令是可选项。

消息的返回码是负32bit的整数,具体含义如下:
image.png
前面铺垫完了,接下来简单列一些具体的协议消息都有哪些。

  1. 基本协议:

一个系统中可能包含多个agent,并不是所有的agent都可以通过基本协议命令来配置系统。ARM建议只有受信任的agent有此权限。如果agent没有权限,还发出了基本协议的命令,系统应当返回DENEID或者NOT_SUPPORTED类型的响应。
image.png
通知:
image.png

  1. 电源域管理协议:

此协议用于电源域的状态。
image.png
通知:
image.png
3. 系统电源管理协议:

此协议用于系统关闭,挂起,复位。
image.png
通知:
image.png
4. 性能域管理协议:

本组协议主要用于AP性能管理。性能域由一组始终必须以相同性能级别运行的设备构成。
image.png
通知:
image.png
5. 时钟管理协议:

与性能域管理协议不同,这部分是管理除CPU和GPU之外的其它外设。
image.png
延迟响应:
image.png
6. 传感器管理协议:

本协议主要用于管理平台传感器。
image.png
延迟响应:
image.png
通知:
image.png
7. 复位管理协议:

此协议用于复位平台里可以复位的模块。
image.png
延迟响应:
image.png
通知:
image.png
8. 电压域管理协议:
image.png
以上是SCMI的协议部分。关于传输,可以用共享存储方式来保存AP与SCP之间的消息。通信的流程可以采用中断,doorbell的方式,也可以采用轮询的方式去主动查询消息通道的状态。采用中断方式的通信流程如下图:
image.png

  1. 发起方必须确保通道是空闲的;
  2. 发起方将消息及其有效负载写入共享存储区域;
  3. 发起方通过更新通道状态将通道标记为忙碌;
  4. 发起方写doorbell寄存器,通知接收方共享存储区域中有一条消息等待处理;
  5. 接收方处理共享存储区域的命令;
  6. 接收方用与消息处理相关的任何返回数据更新共享存储区域;
  7. 接收方通过更新通道状态将通道标记为空闲;
  8. 接收方者向发起者发出中断,表示处理完成;
  9. 发起方处理共享存储区域的内容。

基于轮询机制的通信流程如下。与中断方式不同的是,接收方不会完成消息处理后不会给发起方发送中断,而是要靠发起方去轮询通道状态。
image.png
其实,这篇的一些内容与上一篇讲MHU的重合了。我猜,ARM可能是为了保持每篇文档的完整性,这里又唠叨了一遍。

原文链接:老秦谈芯
作者:老秦谈芯

推荐阅读

更多IC设计技术干货请关注IC设计技术专栏。
推荐阅读
关注数
19642
内容数
1303
主要交流IC以及SoC设计流程相关的技术和知识
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息