ACPI 中文文档ACPI 中文文档
首页
第 1 章
第 2 章
第 3 章
第 4 章
第 5 章
第 6 章
第 7 章
第 8 章
第 9 章
第 10 章
第 11 章
第 12 章
第 13 章
第 14 章
第 15 章
第 16 章
第 17 章
第 18 章
第 19 章
第 20 章
第 21 章
附录 A
首页
第 1 章
第 2 章
第 3 章
第 4 章
第 5 章
第 6 章
第 7 章
第 8 章
第 9 章
第 10 章
第 11 章
第 12 章
第 13 章
第 14 章
第 15 章
第 16 章
第 17 章
第 18 章
第 19 章
第 20 章
第 21 章
附录 A
  • 第 8 章

    • 总览
    • 8.1. 处理器电源状态
    • 8.2. 刷新缓存
    • 8.3. 电源、性能和节流状态依赖关系
    • 8.4. 声明处理器
      • 8.4.1. _PDC(处理器驱动程序能力)
      • 8.4.2. 处理器电源状态控制
      • 8.4.3. 处理器层次结构
      • 8.4.4. 更低功耗空闲状态
        • 8.4.4.1. 分层空闲状态
        • 8.4.4.2. 空闲状态协调
        • 8.4.4.3. _LPI(低功耗空闲状态)
        • 8.4.4.4. _RDI(空闲的资源依赖)
        • 8.4.4.5. 兼容性
      • 8.4.5. 处理器节流控制
      • 8.4.6. 处理器性能控制
      • 8.4.7. 协作式处理器性能控制
        • 8.4.7.1. _CPC(连续性能控制)
          • 8.4.7.1.1. 性能能力/阈值
          • 8.4.7.1.2. 性能控制
          • 8.4.7.1.3. 性能反馈
          • 8.4.7.1.4. CPPC 启用寄存器
          • 8.4.7.1.5. 自主选择启用寄存器
          • 8.4.7.1.6. 自主活动窗口寄存器
          • 8.4.7.1.7. 能量性能偏好寄存器
          • 8.4.7.1.8. OSPM 控制策略
          • 8.4.7.1.9. 使用 PCC 寄存器
          • 8.4.7.1.10. 与其他由 ACPI 定义的对象和通知的关系
          • 8.4.7.1.11. _CPC 实现示例
      • 8.4.8. _PPE(平台错误轮询)
    • 8.5. 处理器聚合器设备

8.4.4.4. _RDI(空闲的资源依赖)

某些平台可能具有由设备和处理器共享的电源资源。从抽象上讲,这些资源分两个阶段管理。首先,OS 执行正常的电源资源引用计数,以检测何时所有设备依赖都已满足,并且该资源可以从设备视角进行电源管理。然后,当处理器也进入空闲时,OS 请求进入特定的 LPI 状态,而平台在转换过程中将这些资源作为该转换的一部分进行实际电源管理。电源资源与 LPI 状态之间的依赖关系在 _RDI 中描述。

_RDI 对象只能出现在描述系统处理器层级的根处理器容器中。在具有多个根节点的系统中不支持 _RDI。_RDI 仅在涵盖系统中所有处理器的单一顶层容器中有效。

OSPM 将忽略出现在根节点以外任何节点上的 _RDI 对象。此简化避免了复杂的竞争情况:层级某一部分中的处理器选择具有资源依赖的空闲状态,而另一处理器正在更改设备状态/电源资源。

参数:

无

返回值:

一个变长 Package,包含资源依赖关系,格式如下:

返回值信息

Package {
   Revision,   // Integer (WORD)
   RDI[1],     // Package
   ...
   RDI[N]      // Package
}

表 8.16 _RDI Package 返回值

ElementObject TypeDescription
RevisionInteger (WORD)_RDI 对象的修订号。当前修订版本为 0。
RDI[1]Package包含系统级电源状态 1 的电源资源依赖关系的变长 Package。
RDI[N]Package包含系统级电源状态 N 的电源资源依赖关系的变长 Package。

每个 RDI[x] 子 Package 包含数量可变的指向电源资源的引用:

Package {
   Resource[0], // Object Reference to a Power Resource Object
   ...
   Resource[M] // Object Reference to a Power Resource Object
}

该 Package 包含的 RDI Package 数量,与根处理器容器节点的 _LPI 对象中的系统级电源状态数量相同。该 _LPI 对象中 LPI 电源状态的索引,与 _RDI 对象中 RDI Package 的索引相匹配。因此,系统级的第 n 个 LPI 状态,其资源依赖关系列在第 n 个 RDI 中。每个 RDI Package 返回一个电源资源对象列表(被动或标准电源资源),这些对象必须处于 OFF 状态,平台才能进入该 LPI 状态。如果某个系统级 LPI 没有任何资源依赖,则对应的 RDI 应为空 Package。

传统电源资源和被动电源资源都可以作为依赖项列在 _RDI 中。对于传统电源资源,OSPM 应在请求依赖的 LPI 状态之前确保该资源为 OFF。对于被动电源资源,没有 _ON/_OFF/_STA 方法,因此唯一要求是在请求依赖的 LPI 状态之前检查引用计数是否为 0。

OSPM 对于设备/电源资源转换与依赖电源资源的 LPI 状态之间排序的要求,取决于协调方案。

在平台协调系统中,平台必须保证正确性,并将所请求的电源状态降级为满足资源和处理器依赖关系的状态。OSPM 可以按其认为合适的方式使用 _RDI 中的依赖信息,并且即使资源仍然为 ON,也可以选择某个依赖的 LPI 状态。

在 OS 发起的系统中,OSPM 在请求依赖的 LPI 状态之前,必须保证所有电源资源都已关闭(对于被动电源资源,则引用计数为 0)。

_RDI 示例

以下 ASL 描述了一个系统,该系统使用 _RDI 来描述三个电源资源与系统级电源状态之间的依赖关系:

PowerResource(PWRA,0,0) {         // power rail local to DEVA
   Method(_ON) {...}              // active power resource (_OFF turns rail off)
   Method(_OFF) {...}
   Method(_STA) {...}
}

PowerResource(PWRB,0,0) {         // power rail shared between DEVB and the processor
   Method(_ON) {...}              // active power resource (_OFF drives platform vote)
   Method(_OFF) {...}
   Method(_STA) {...}
}

PowerResource(PWRC,0,0) {}        // clock rail shared between DEVC and the processor
                                  // passive power resource
Device (DEVA) {
   Name(_PR0,Package(){PWRA})
}

Device (DEVB) {
   Name(_PR0,Package(){PWRB})
}

Device (DEVC) {
   Name(_PR0,Package(){PWRC})
}

Device (SYM) {
   Name(_RDI,
      Package() {
         0,                          // Revision
         Package(){}                 // Local State 1 has no power resource
                                     // dependencies
         Package(){PWRA}             // Local State 2 cannot be entered if DEVA
                                     // is in D0 due to PWRA
         Package(){PWRA, PWRB, PWRC} // Local State 3 cannot be entered if
                                     // DEVA is in D0 (due to PWRA), DEVB is in
                                     // D0 (due to PWRB) or DEVC is in D0
                                     // (due to PWRC)
      })
   ...

OSPM 将通过等待引用计数达到 0(表示 DEVA 已离开 D0)并运行 _OFF 方法,来关闭传统电源资源(PWRA)ON 或 OFF。类似地,PWRB 会根据 DEVB 的状态被 ON 或 OFF。请注意,由于 CPU 在运行时要求共享电源轨保持 ON,因此 PWRB 的 _ON 和 _OFF 驱动的是一个投票,而不是该电源轨的物理 HW 控制。在这种情况下,_STA 反映的是投票状态,而不是 PWRB 的物理状态。

OSPM 保证了 PWRA/PWRB 的 _ON 和 _OFF 转换与 DEVA/DEVB 的 D 状态转换之间的顺序。也就是说,只有在 DEVA 已离开 D0 之后,PWRA 才能被 OFF,并且在将 DEVA 转换为 D0 之前,必须先将其 ON。但是,关于电源资源转换与依赖于电源资源的 LPI 状态之间的排序,OS 的要求会根据协调方案而不同。

在平台协调系统中,OSPM 在选择本地状态 2 或 3 之前,可能会也可能不会跟踪 PWRA 的电源状态。平台必须独立保证在进入本地状态 2 或 3 之前 PWRA 已处于 OFF 状态,并且如果 OSPM 在 PWRA 仍然开启时选择了本地状态 2 或 3,则必须降级到更浅的状态。请注意,由于 OSPM 需要正确地对电源资源转换与设备电源转换进行排序,平台无需检查 DEVA 的状态;它可以依赖 PWRA 的状态来推断 DEVA 处于合适的 D 状态。

同样地,OSPM 在选择本地状态 3 之前,可能会也可能不会跟踪 PWRB 和 PWRC 的状态,且平台必须独立保证在进入任一状态之前 PWRB 已关闭。由于 PWRC 是一个被动电源资源,平台不知道电源资源上的引用计数何时达到 0,因此必须自行跟踪 DEVC 的状态。除非平台具有其他机制来跟踪 DEVC 的状态,否则应将 PWRC 定义为传统电源资源,以便平台可以使用其 _ON 和 _OFF 方法来保证操作正确性。

在 OS 发起的系统中,要求 OSPM 保证在选择本地状态 2 或 3 之前 PWRA 已经处于 OFF 状态。OSPM 可以通过等待到其认为某个处理器是系统中最后一个退出者之后,再检查 PWRA 的状态,并且仅在这种情况下选择本地状态 2 或 3 来满足这一保证。如果该处理器确实是最后一个退出者,那么进入本地状态 2 或 3 的请求就是合法的,平台可以接受它。如果此期间另一处理器唤醒并将 PWRA 打开,那么这就变成了处理器之间的竞态,相关问题在 OS 发起请求语义章节(OS 发起请求语义)中进行处理。同样地,OSPM 必须保证在选择本地状态 3 之前 PWRB 关闭且 PWRC 的引用计数为 0。

在 OS 发起的系统中,由于 OSPM 保证在选择系统电源状态之前电源资源处于正确状态,因此平台应使用被动电源资源,除非将某个电源资源 OFF 还能带来额外的运行时省电。在仅支持 OS 发起转换的平台上,PWRB 应定义为被动电源资源,因为它与处理器共享,并且只能在进入系统电源状态时关闭。

Prev
8.4.4.3. _LPI(低功耗空闲状态)
Next
8.4.4.5. 兼容性