电子说
1. 关于PCSA和SCP
SCP直接控制SoC的电源和时钟,而AP通过硬件和软件接口协同管理。
芯片设计,要完成整个芯片的电源管理,需要软硬件结合。一般上层软件部分交给操作系统(Linux和Android等);下层软件由SCP固件(Firmware)实现,其由MHU,PPU这些模块构成,当然Core也需要有相关的硬件支持。这也就是所谓的分层管理机制。
在PCSA里面,主要规范的是逻辑实现,物理实现部分并没有在文档中过多的体现。换句话说,PCSA是给芯片架构师和前端设计师看的。至于物理实现,遵循S家和C家的流程。
在SCP中完成SoC的功耗管理(当然,SCP不仅仅完成这个工作)。为此,ARM又定义了一大堆的接口,组件和协议来配合,统称为“功耗控制框架(power control framework,以下简称PCF)”。
上层的应用处理器(application processor,简称AP)可以通过软件来给SCP发起服务(service)请求,左边Agent我们可以理解为其它子系统或者IP。作为中间层的SCP是由一个M系列的处理器构成的子系统,负责运行固件软件(firmware),向上可与AP通过设定好的接口/协议通信,接收服务请求,向下控制硬件单元,监控传感器,控制时钟和复位,管理电源等等。有了SCP,就能把一些任务从OSPM中抽离出来,更好的把软件和硬件隔离,增加了灵活性和安全性。
上图中的电源管理软件协议栈主要分为两部分,AP的功耗管理和设备的功耗管理。其中AP的功耗管理又分为idle管理和DVFS两部分。首先看idle管理,当AP处于idle状态时,OSPM可以根据需要关断时钟,下电且retention,或完全断电等多种操作。
此时要保证断电的内核仍然可由操作系统进行调度,并且可以被中断唤醒。还有另外一种技术hot-plug。在这种情况下,AP核心将从操作系统可用于调度的池中移除。通过这种技术,内核被关闭,所有中断和软件线程被迁移到其它内核。这种技术既可以按需求比例使用,也可以在计算能力因功耗或散热受到限制的情况下使用。
根据ARM的定义,功耗控制框架(PCF)是标准基础设施组件、接口和相关方法的集合,可用于构建SoC功耗管理所需的基础设施。标准的基础设施组件包括电源、时钟和接口组件。上图中的LPI(low power interface)主要是指ARM的Q-channel和P-channel,PPU(power policy unit)是一个硬件组件,支持SCP通过软件接口编程。
对于不同的设备,可能需要的电源控制场景不尽相同,比如有的模块可能只做时钟关断(clock gating),有的模块需要实现电源关断(power gating),在关闭设备电源的情况下,又可以区分多种细分需求,比如是不是要做逻辑或者存储的状态保留(retention);逻辑和存储是不是可以分别关断等等。各种条件做一下排列组合,可能会有很多种需求。
举个例子,拿CMN中的系统缓存(HN-F)来说,逻辑部分,snoop filter(SF)部分,SLC RAM部分的电源可以分别控制;SLC RAM部分支持ON/OFF/RET三种电源状态,而且SLC RAM在物理上分为两个bank,可以选择开一个bank,也可以选择两个bank全开;SF部分也支持MEM_RET。
从上图可以看出,SCP是一个完整的小系统,该有的组件一个都不少。首先,SCP里面要有一个处理器,并且要具备足够的处理能力。比如要能够管理AP在idle状态下的功耗;要能支持中断,以及中断优先级排序;要支持调试功能;要能够可信操作,等等。既然有了处理器,那就要有ROM,用于安全启动,还要有RAM,运行固件时需要。
如果要支持DVS,就要有图中的Voltage Regulator Control单元。为了配合DFS,还要有时钟控制单元,用于管理PLL以及输出时钟信号。Messaging interface适用于OSPM和SCP之间通信的接口,常用的有mailbox和doorbell两种方式。关于AP与SCP通信,有一套完整的协议来支持
PPU是为了控制SoC电源域用的,具体的数量和位置可以根据实际需要来定,比如可以做成分级式的或者分布式的。首先,PPU要提供一个配置接口给SCP,用于功耗策略控制和配置,目前用的是APB。其次,PPU与设备之间的控制接口,包括低功耗接口(low power interface,简称LPI),若干组Q-channel和一组P-channel,还有时钟/复位控制。最后,还有一个与功耗状态机之间的接口,P-channel。
PPU支持的power mode如下,其中ON/OFF/Warm Reset是必须支持的,其它备选。各种mode之间的切换,PPU配置,寄存器说明等细节请参考PPU的文档。
电源控制部分和时钟部分类似,就是多了一个上面提到的PPU。多提一句,PPU可以与被控制部分放在一起,也就是分布式设计。
Cluster的上电过程如下上图,图中的delay取决于具体设计需要:
SCP发出唤醒;
SCP拉低ACINACTM或SINACT;
SCP对PPU操作:
1) PPU打开cluster的电源开关
2) PPU拉高ISOLATEn,无效isolation cell
3) PPU拉高CLKEN,使能clock gating
4) PPU拉低RESETn,使cluster进入复位
5) PPU发出Q-channel静止退出的请求
6) PPU拉高RESETn
7) PPU等待Q-channel握手返回
8) PPU发中断给SCP9) SCP拉低AINACTS
关于SCP的系统启动:
2. 关于PSCI和SCMI
PSCI(Power State Coordination Interface),翻译一下就是“电源状态协作接口”。从名字就能直观看出来,PSCI是一套电源管理的标准接口,可用于操作系统在ARM设备上以不同权限级别监控管理电源。
PSCI提供一套API来协调电源管理,如下:
PSCI_VERSION:可以调用此API得到当前PSCI的版本信息;
CPU_SUSPEND:OSPM调用此API使处理器核进入低功耗模式;
CPU_OFF:此API用于hotplug,从系统中动态移除某个处理器核。被CPU_OFF移除的处理器核只能通过CPU_ON再次加载。与CPU_SUSPEND不同的是,这个接口函数不需要返回值;
CPU_ON:此API用于动态加载处理器核;
AFFINITY_INFO:此API允许调度方查询亲和实体(affinity instance)的状态;
MIGRATE:用于将受信任的操作系统(trusted OS)迁移到另一个处理器核,从而原处理器核可以调用CPU_OFF关闭电源;
MIGRATE_INFO_TYPE:允许调用方识别受信任操作系统中存在的多核支持级别,通过返回值可以判定受信任操作系统是否必须运行在单一处理器上,是否支持迁移;
MIGRATE_INFO_UP_CPU:指示受信任的操作系统当前的位置;
SYSTEM_OFF:系统关闭;
SYSTEM_RESET:系统冷复位;
SYSTEM_RESET2:此API是对SYSTEM_RESET的扩展;
MEM_PROTECT:此API确保内存在交给操作系统加载程序之前被重写,从而提供防止冷重启攻击的保护;
MEM_PROTECT_CHECK_RANGE:此API用于检查某段内存范围是否受MEM_PROTECT保护;
PSCI_FEATURES:此API允许调用方检测已实现的PSCI函数及其属性;
CPU_FREEZE:此API将处理器核设置于低功耗状态(依赖具体设计实现)。与CPU_SUSPEND和CPU_DEFAULT_SUSPEND不同,中断不能唤醒该处理器;与CPU_OFF也不同,不需要迁移;
CPU_DEFAULT_SUSPEND:此API将处理器核设置于低功耗状态(依赖具体设计实现),与CPU_FREEZE的调用参数不同;
NODE_HW_STATE:此API允许直接从电源控制器或电源控制逻辑确定节点的电源状态。与AFFINITY_INFO不同,此API返回电源状态的物理视图;
SYSTEM_SUSPEND:此API相当于CPU_SUSPEND到最深的低功耗状态,但实际系统中有可能实现比CPU_SUSPEND更深的低功耗状态,比如支持RAM挂起;
PSCI_SET_ SUSPEND_MODE:此API允许设置CPU_SUSPEND用于协调电源状态的模式;
PSCI_STAT_RESIDENCY:此API返回自冷启动后平台处于某个电源状态的时间;
PSCI_STAT_COUNT:此API返回自冷启动后平台使用某个电源状态的次数;
SCP和AP之间有一个通信接口。这个通信接口在硬件上可以通过共享存储和MHU(Message Handling Unit)实现;在软件上,通过定义一组通信协议来实现。关于MHU需要查硬件寄存器手册。
SCMI(System Control and Management Interface)。SCMI是用于系统管理的一组独立于操作系统的软件接口,包括以下几个方面:
电源域管理
性能管理
时钟管理
传感器管理
复位管理
电压域管理
关于传输,可以用共享存储方式来保存AP与SCP之间的消息。通信的流程可以采用中断,doorbell的方式,也可以采用轮询的方式去主动查询消息通道的状态。采用中断方式的通信流程如下图:
image.png
3. 关于芯片SoC设计中的一些要点
SCP子系统一般是在Always-on区域,也就是休眠的时候不下电,除非整机关机才下电。
SCP有独立的M核硬件,所以需要设计中断,RAM内存映射区域的使用
SCP会通过I2C连接PMIC硬件对系统中其他硬件模块上电,一般按照电源域为单位,按一定顺序上电
SCP通过Mailbox跟AP或者其他异构核子系统通信,软件上使用SCMI+SMT协议,硬件上使用MHU或者PL320,主要就是为了触发中断+共享内存
设计SCP的硬件接口,例如I2C四根线,占四个接口
低功耗主要就是休眠和省电模式的设计,需要分析出来耗电多的子系统进行关闭,一般通过PMIC电源开关,clock的开关,硬件模块自己支持的低功耗模式设置等
对于A核的休眠需要注意DDR中的数据,可以有DDR PHY硬件控制进入retention mode,一些开机DDR训练参数输出保存到Always-on的RAM中去。
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !