当前位置: 首页 > article >正文

GICv3电源管理

在符合GICv3体系结构的实现中,CPU接口和PE必须位于相同的电源域,但这不必与关联的Redistributor所在的电源域相同。
这意味着可能会出现PE及其CPU interface断电,而Redistributor、Distributor和its上电的情况。在这种情况下,GIC架构支持使用针对PE的中断,向PE和CPU接口发送上电事件的信号。
ARM强烈建议不要将GIC配置为这样一种方式,即如果PE上的软件无法处理中断,则中断会导致特定PE的唤醒。
GICv3提供电源管理来控制这种情况,因为该体系结构允许由一个组织设计的redistributor与由另一个组织设计的pe和CPU接口一起使用。
当Redistributor上电时,在CPU接口和PE下电之前,软件必须将CPU interface和Redistributor之间的接口置于静息状态(quiescent state),否则系统将变得不可预测。通过设置gicr_wake.ProcessorSleep为1完成启动到静态状态的转换。当接口处于静态状态时,GICR_WAKER.ChildrenAsleep也被设置为1。

  • GICR_WAKER.ChildrenAsleep,bit[2]:

    read-only 表明GICR连接的PE是否处于quiescent状态

    • 0 表明连接PE的一个接口可能处于active状态
    • 1 表明连接PE的所有接口都处于quiescent状态

    该字段的复位值应该为1

  • GICR_WAKER.ProcessorSleep, bit[1]:

    表明GICR是否能assert WakeRequest信号:

    • 0 该PE没有处于也没有进入低功耗状态

    • 1 PE处于低功耗状态或正在进入低功耗状态

      所有到达GICR的中断:

      • assert WakeRequest信号
      • 在GICR中处于 pending状态,并且未通信到CPU interface。

      当ProcessorSleep == 1时,GICR必须确保任何挂起在CPU interface上的中断都被释放。

      对于使用GIC流协议接口的实现:

      • Quiesce命令可以将重分发器和CPU接口之间的接口置于静止状态。
      • Release命令可以释放任何CPU接口上挂起的中断。

    在让PE下电之前,软件必须将ProcessorSleep位置为1,并且等待ChildrenAsleep=1。在PE上电之后,或者下电失败之后,软件必须将ProcessorSleep位置为0,并且等待ChildrenAsleep1=0。


GICR_WAKER.ProcessorSleep == 1有以下效果:

  • GICR不会将PE的任何中断转发到CPU接口。如果有针对PE的pending状态的中断,则断言一个硬件信号WakeRequest转发给PE,以指示PE将恢复其电源。在GICv4实现中,除了任何其他中断之外,这还适用于虚拟LPI。
  • GICD不选择此PE作为1或N中断的候选选择,除非GICD_CTLR.E1NWF == 1, PE已被具体设计实现的机制选中:
    • 对于引起wake-up的1 / N中断,如果收到WakeRequest的PE不处理唤醒的中断,则GIC不需要选择新的目标PE。

当GICR和CPU interface之间的接口处于quiescent状态时,可以保存CPU接口的以下架构状态,作为保存CPU interface和PE的电源域内状态的一部分:

  • 与所连接PE的物理中断相关的CPU interface状态。
  • 与虚拟中断相关的CPU interface状态,该状态是在关联PE上调度的vPE的一部分。

当CPU interface上物理中断分组enable位为1时,设置GICR_WAKER.ProcessorSleep为1,会造成不可预测的后果。

当ProcessorSleep=1或ChildrenAsleep=1时,对GICC_*,GICV_*,GICH_*,ICC_*,ICV_*,ICH_*寄存器的写操作,都会造成不可预测的后果。

http://www.lryc.cn/news/2399444.html

相关文章:

  • 《TCP/IP 详解 卷1:协议》第3章:链路层
  • centos 9/ubuntu 一次性的定时关机
  • Elasticsearch从安装到实战、kibana安装以及自定义IK分词器/集成整合SpringBoot详细的教程(二)
  • Java自动类型转换的妙用
  • 数据库管理-第333期 Oracle 23ai:RAC打补丁完全不用停机(20250604)
  • 【DAY39】图像数据与显存
  • AI代码库问答引擎Folda-Scan
  • Kafka深度技术解析:架构、原理与最佳实践
  • 基于cnn的通用图像分类项目
  • Kotlin-协程
  • pycharm 左右箭头 最近编辑
  • Linux环境管道通信介绍
  • DIC技术助力金属管材全场应变测量:高效解决方案
  • python基础day04
  • 嵌入式学习--江协stm32day1
  • 湖北理元理律师事务所:债务化解中的心理重建与法律护航
  • constexpr 是 C++11 引入的关键字
  • 【更新中】(文档+代码)基于推荐算法和Springboot+Vue的购物商城
  • 六种高阶微分方程的特解(原创:daode3056)
  • 【C++11(上)】—— 我与C++的不解之缘(三十)
  • 【多线程初阶】wait() notify()
  • 安全-JAVA开发-第二天
  • Python基础:文件简单操作
  • 深度学习项目之RT-DETR训练自己数据集
  • 以太网帧结构和封装【二】-- IP头部信息
  • mysql 悲观锁和乐观锁(—悲观锁)
  • Promtail采集服务器本地日志存储到Loki
  • python第31天打卡
  • 4.1 HarmonyOS NEXT原生AI能力集成:盘古大模型端侧部署与多模态交互实战
  • 学习STC51单片机27(芯片为STC89C52RCRC)