5.2 电源状态层级
电源状态可以组织为电源状态表的层次结构。每个电源状态表描述在其层次结构级别上可用的电源状态。
从系统级电源控制的角度来看,这种电源状态的层次结构很方便,因为它允许以最小的冗余表示所有合法的电源状态和电源模式组合。
尽管在电源状态表层次结构中可以有任意数量的层次,但本文描述了三个层次结构。这些级别是有效的电源管理所必需的,并在以下章节中进行了描述:
图5.1显示了一个双cluster系统的电源状态层次结构示例。设备电源状态表没有在插图中描述,但是,根据操作系统管理的级别,一些设备也可能具有声明的电源状态层次结构。
5.2.1 Core电源状态
服务器基础系统体系结构[1]为AP核心定义了以下电源状态语义。
RUN
Core已通电并运行代码。
IDLE_STANDBY
核处于WFI状态。保留完整的上下文,不需要保存或恢复软件状态。在任何中断或外部调试请求之后自动恢复执行。调试寄存器是外部可访问的。
IDLE_RETENTION
核处于WFI状态。保留完整的上下文,不需要保存或恢复软件状态。在任何中断或外部调试请求之后自动恢复执行。调试寄存器不能从外部访问。
SLEEP
核断电,但硬件将自动唤醒核心,例如在从GIC接收唤醒中断时。不保留上下文,因此必须显式保存状态。唤醒的核从复位向量开始,然后硬件特定的软件将恢复状态。
OFF
核断电,不需要被中断唤醒。唤醒核心的唯一方法是通过电源控制器显式地请求它上电,例如从运行在另一个核心上的系统软件或外部源(如上电复位)上电。当系统软件明确决定从活动服务中移除核心时,可以使用此状态,从而为硬件提供更积极的节能机会。没有保留核心上下文。
注意:SLEEP和OFF电源状态可能使用相同的电源模式,但在语义上是不同的,因为处于SLEEP状态的核在接收中断时唤醒的能力。
并不是所有的核状态都可以随时使用。它们的可用性取决于所支持和实现的电源模式。
与GIC架构的关系
Arm GICv2和GICv3架构定义了唤醒请求机制,用于将断电内核的中断请求路由到电源控制器。
GIC唤醒请求机制的架构支持软件管理的SLEEP和OFF状态,这些状态不保留上下文并通过重置重新启动。在这种情况下,中断转发到核被禁用,唤醒请求机制被路由到电源控制器。
相比之下,维护核心上下文的IDLE_STANDBY和IDLE_RETENTION状态在中断时自动恢复。在这种情况下,中断转发到核心在状态期间保持启用状态,并且不使用唤醒请求机制。在这些状态中,虽然可能存在进入该状态的软件选择,但不需要其他软件管理。
实现对IDLE_STANDBY和IDLE_RETENTION状态的核心支持需要唤醒源的逻辑在核心功率域之外,并在这些状态期间保持活动。唤醒源逻辑包括私有计时器以及中断、事件、窥探访问和调试请求的检测。
表5.1使用Cortex-A55支持的特性提供了AP核心电源状态到可用核心电源模式的映射示例:
【注意】:Cortex-A55不实现对IDLE_RETENTION状态语义的支持,因为核心将响应WFI或WFE中调试寄存器的外部访问。
•RUN电源状态表示核心正在运行的任何模式。没有上下文或唤醒的考虑。HW可以自主地、对软件透明地从retention模式进入和退出Advanced-SIMD/FP管道。硬件实现旨在确保对执行时间没有感知到的延迟影响。
•IDLE_STANDBY和IDLE_RETENTION状态表示核心处于WFI或不丢失上下文的WFE。执行可以从任何唤醒事件直接恢复。保留模式是自主的,硬件实现旨在确保软件不会因为这种自主电源模式选择而感知到延迟影响。
•SLEEP和OFF状态表示核心失去上下文的模式。这些状态由它们的唤醒特性来区分。这些状态的唤醒延迟明显更高。
5.2.2 Cluster的电源状态
RUN
Cluster已上电,并且可以支持任何核心移动到任何电源状态。
SLEEP_RETENTION
Cluster处于关机状态,但在接收到具有唤醒能力的中断时能够唤醒。集群中至少有一个内核处于SLEEP状态,其他内核处于SLEEP或OFF状态。
保留集群共享缓存的内容。
在集群中的核心可以移动到更高的功率状态之前,集群必须首先移动到RUN状态。
SLEEP
Cluster处于关机状态,但在接收到具有唤醒能力的中断时能够唤醒。集群中至少有一个内核处于SLEEP状态,其他内核处于SLEEP或OFF状态。
不保留集群共享缓存的内容。
在集群中的核心可以移动到更高的功率状态之前,集群必须首先移动到RUN状态。
OFF
Cluster关机,并且在接收中断时不会唤醒。集群中所有核心处于“OFF”状态。
不保留集群共享缓存的内容。
在集群中的核心移动到更高功率状态之前,必须首先将集群移动到适当的更高功率状态。
【注意】:SLEEP和OFF电源状态可能使用相同的硬件电源模式,但在系统级别上在语义上是不同的,因为当集群中的一个核心接收到具有唤醒能力的中断时,处于SLEEP状态的集群能够唤醒。
Cluster电源状态到电源模式映射示例
表5.2使用了DynamIQ共享单元(Shared Unit, DSU)处理器集群支持的特性,提供了一个集群电源状态到可用电源模式的映射示例。
该示例突出了将模式分组为功率状态和分层方法的价值,其中许多核心模式和状态可以分解为几个集群级功率状态。
5.2.3 设备电源状态
OSPM将有一个机制来表示设备依赖关系,防止SoC进入睡眠状态,直到这些依赖关系被解决。这种依赖关系管理将设备置于与处理器集群在电源管理层次结构中的同一级别。
本文档定义了以下简单的设备电源状态。
RUN
设备已上电,可以进行相应的操作。但是,可能需要特定于驱动程序的操作来启用时钟和其他功能。
OFF
设备下电。唤醒设备的唯一方法是显式地请求设备开机。通常,驱动软件将通过对OSPM的抽象来表达这种依赖关系。OSPM可以请求SCP来执行任何所需的操作。
5.2.4 SOC电源状态
本文档中使用的SoC电源状态仅用于说明目的。SoC的电源状态可能有额外的层次结构,并且将考虑本节未涉及的组件的电源状态。
本文档定义了以下SoC电源状态。
RUN
SoC系统是可用的,可以支持任何处理器集群移动到任何电源状态。设备也可以移动到任何电源状态。
系统中至少有一个AP核心处于RUN或SLEEP状态。
GIC已打开,系统内存可用。
SLEEP
SoC系统不可用,可以下电,但包括系统计数器和唤醒定时器在内的always-on域唤醒功能仍处于打开状态。SoC可以使用唤醒定时器自唤醒。它还可以响应任何系统特定的always-on域唤醒事件。
至少一个处理器集群必须处于SLEEP状态,其余集群必须处于SLEEP或OFF状态。当GIC断电时,唯一能够唤醒处理器的中断是always-on域唤醒事件。
在处理器集群或操作系统管理的设备可以移动到更高的电源状态之前,系统必须首先移动到RUN。
根据其功能,自我管理的设备可以处于任何电源状态。但是,如果需要系统逻辑资源,则必须使用always-on域唤醒事件来请求这些服务。必须有联锁到位,以保证安全行为,直到系统已经移动到RUN。
系统内存不可用。任何所需的上下文要么迁移到片外内存,要么保留在片内。必须保留任何外部DRAM保存系统上下文,通常是在进入SLEEP状态之前将设备置于自刷新模式。
SLEEP状态的深度可以根据省电和增加的进入和退出延迟而变化。OSPM根据自己的延迟需求和任何目标驻留预测来选择SLEEP状态深度。
不同深度的睡眠状态建议使用一个递增的数字后缀来命名,对应于增加的唤醒延迟,例如SLEEP0, SLEEP1等等。
DEEPSLEEP
SoC下电,包括系统计数器和唤醒定时器。系统无法自唤醒。它只能在响应外部事件时唤醒,例如开机复位。
外部DRAM存储器通过实现特定的方法保持在retention状态。
OFF
SoC下电,包括系统计数器和唤醒定时器。系统无法自唤醒。它只能在响应外部事件时唤醒,例如开机重置。
不保留外部DRAM内存。可以使用状态休眠到非易失性存储器,但这超出了本文档的范围。
电源状态映射
表5.3给出了一个如何将这些电源状态映射到系统中的电源域的示例。
原文地址:https://blog.csdn.net/yuxiaochen99/article/details/134599799
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_2986.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!