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

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.xdnf.cn/news/11872.html

相关文章:

  • 防止网站被iframe嵌套的安全防护指南
  • python3GUI--车牌、车牌颜色识别可视化系统 By:PyQt5(详细介绍)
  • 【算法深练】分组循环:“分”出条理,化繁为简
  • 匀速旋转动画的终极对决:requestAnimationFrame vs CSS Animation
  • 嵌入式常见 CPU 架构
  • Java转Go日记(五十七):gin 中间件
  • AlphaFold3运行错误及解决方法(1)
  • 25_05_29docker
  • 证券交易柜台系统解析与LinkCounter解决方案开发实践
  • 安全-JAVA开发-第二天
  • Spring Framework 中 UriComponentsBuilder工具类
  • 【开源工具】基于PyQt5工作时长计算器工具开发全解析
  • 【多线程初阶】wait() notify()
  • 高效获取淘宝商品实时数据:API 接口开发与接入指南
  • 使用PyQt5的图形用户界面(GUI)开发教程
  • 基于对比学习的带钢表面缺陷分类研究,整合SimCLR自监督预训练与YOLOv8目标检测框架的技术解析及Python实现方案
  • mac版excel如何制作时长版环形图
  • 从npm库 Vue 组件到独立SDK:打包与 CDN 引入的最佳实践
  • 利用 USB 设备重定向实现无缝远程办公
  • win7 系统盘如何瘦身! 可整理出4-5G。
  • TopView(赢富)数据图片怎么看
  • python3.7的下载,以及详细的安装教程
  • go strings.TrimPrefix() 和 strings.TrimLeft()
  • LaTeX 常用语法格式总结 列表计数、图、公式、表格、参考文献环境
  • 【C#】轻松理解AutoResetEvent 和 ManualResetEvent
  • C#源码大汇总
  • Python搭建网站的基本模板,python搭建网站最快多久
  • 电脑提示Explorer.exe系统错误该怎么办?
  • dnf正在连接服务器然后选择角色卡,dnf选择角色卡死(选择角色进入游戏后卡住的解决方法)...
  • Blue Ocean Robotics收购世界领先的远距临场机器人Beam