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

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.lqws.cn/news/117811.html

相关文章:

  • 解决 Java 项目中 “zip END header not found“ 错误
  • Doris查询Hive数据:实现高效跨数据源分析的实践指南
  • ASP.NET Core 中间件深度解析:构建灵活高效的请求处理管道
  • zookeeper 学习
  • 高效使用AI大模型:测试工程师提示词编写框架
  • 软珊瑚成分 CI-A:靶向口腔癌细胞的 “氧化利剑” 与 ERK 密码
  • Kafka 单机部署启动教程(适用于 Spark + Hadoop 环境)
  • Kafka 消息队列
  • 学习笔记085——Spring Data JPA笔记
  • 阿里云ACP云计算备考笔记 (3)——云服务器ECS
  • 5分钟了解JVM运行时数据区域
  • 电脑网络重置,找不到原先自家的WIFI,手机还能正常连接并上网
  • Elasticsearch从安装到实战、kibana安装以及自定义IK分词器/集成整合SpringBoot详细的教程(二)
  • 自动化生产线,IT部署一站式解决方案-Infortrend KS私有云安全,一机多用
  • 国芯思辰ADE芯片成功替代ADS1296R,除颤仪核心部件实现自主可控
  • 【使用JAVA调用deepseek】实现自能回复
  • 嵌入式链表操作原理详解
  • 使用 systemctl 实现程序自启动与自动重启
  • Attention Is All You Need:抛弃循环神经网络的时代来了!
  • [AI Claude] 软件测试1
  • 【深度学习优化算法】02:凸性
  • 使用 SseEmitter 实现 Spring Boot 后端的流式传输和前端的数据接收
  • 《最近公共祖先》题集
  • DeepSeek本地部署及WebUI可视化教程
  • AI智能体,为美业后端供应链注入“智慧因子”(4/6)
  • 华为云Flexus+DeepSeek征文|Flexus云服务器单机部署+CCE容器高可用部署快速搭建生产级的生成式AI应用
  • vue项目中beforeDestroy或destroyed使用this.$notify.closeAll()失效
  • 华为云Flexus+DeepSeek征文|华为云Flexus服务器dify平台通过自然语言转sql并执行实现电商数据分析
  • 洛谷 单源最短路径 Dijkstra算法+优先队列
  • Flask框架详解:轻量高效的Python Web开发利器