Skip to main content

ACPI(高级配置和电源接口)

低功耗定制

CPU 空闲功能开关

当前 CPU 空闲(cpuidle)功能默认处于关闭状态。如需启用,请删除 board/mthreads/common/AcpiTables/AiModule/Dsdt.asl 文件中的以下代码行:

E300 084 图示

温控策略定制


修改过温自动关机阈值

默认过温关机阈值为 100 摄氏度(对应开尔文温度值 3732K,计算公式:100°C × 10 + 2732)。 请修改 board/mthreads/common/AcpiTables/Common/ThermalZone.asl 文件中 TZ00 至 TZ05 区域的 _CRT 数值:

E300 085 图示

修改过温降频阈值

默认在 80 摄氏度时开始对 CPU/GPU/NPU 进行降频保护。 请修改 board/mthreads/common/AcpiTables/Common/ThermalZone.asl 文件中 TZ00 区域的 _PSV 数值:

E300 086 图示

开关过温降频功能

过温降频功能默认开启。如需关闭,请将 board/mthreads/common/AcpiTables/Common/GlobalRefs.asl 文件中的 DTMP 值修改为 0:

E300 087 图示

修改过温降频对象

默认会对 CPU/GPU/NPU 进行降频保护。如需排除特定组件,请从 board/mthreads/common/AcpiTables/Common/ThermalZone.asl 文件 TZ00 区域的 _PSL 列表中删除相应对象:

E300 088 图示


功率管理行为定制

修改功率保护阈值

性能模式默认在 45W 时触发功率保护,平衡模式默认在 28W 时触发。由于功率保护与温度保护采用相似的控制机制,均通过 Linux 内核的 thermal 框架实现,因此需要将功率值转换为开尔文温度单位。

请修改 board/mthreads/common/AcpiTables/AiModule/ThermalZone.asl 文件中 _PSV 方法的返回值:上一分支返回性能模式阈值,下一分支返回平衡模式阈值。

E300 089 图示

修改功率保护降频对象

默认会对 CPU/GPU/NPU 进行降频保护。如需排除特定组件,请从 board/mthreads/common/AcpiTables/Common/ThermalZone.asl 文件 TZ07 区域的 _PSL 列表中删除相应对象:

E300 090 图示

组件标识说明

  • CP00:Cluster0 中的四个 CPU 核心
  • CP04:Cluster1 中的四个 CPU 核心
  • CP08:Cluster2 中的四个 CPU 核心
  • MGPU:GPU 组件
  • MNPU:NPU 组件

开关功率保护功能

功率保护功能默认开启。如需关闭,请将 board/mthreads/common/AcpiTables/Common/GlobalRefs.asl 文件中的 DCAP 值修改为 0:

E300 091 图示


DVFS 定制

修改 CPU 频率范围

board/mthreads/common/AcpiTables/AiModule/Clusters.asl 文件中定义了 12 个 CPU 核心的频率范围(最大 2650MHz,最小 1454MHz)。可根据需求调整最高频率上限或最低频率下限:

E300 092 图示

修改 GPU 频率范围

board/mthreads/common/AcpiTables/AiModule/Gpu.asl 文件中定义了 GPU 的频率范围(最大 1500MHz,最小 730MHz)。可根据需求调整最高频率上限或最低频率下限:

E300 093 图示


外设扩展

I2C 设备添加


步骤 1:确认 I2C 总线配置

首先确认设备连接到哪个 I2C 总线上。假设设备连接到 I2C5 总线,则需要注释或删除 board/mthreads/common/AcpiTables/AiModule/I2c.asl 文件中对应的 Scope 段落中的以下代码:

Method (_STA) { Return (0) }

E300 094 图示

步骤 2:创建 I2C 设备描述文件

创建新的 ASL 文件来定义 I2C 设备描述,参考以下示例:

E300 095 图示

E300 096 图示

设备描述字段说明

  • Device(xxxx):设备名称,可自定义,字符串长度不超过 4 个字符。若主板上连接多个相同设备,需使用不同名称。
  • _HID:设备硬件 ID,必须与内核驱动程序识别的 ID 相匹配,字符串长度为 8 个字符。
  • _DDN:设备可读名称,按需描述。
  • _UID:设备唯一标识符。若主板上连接多个相同设备,需设置不同值。
  • _STA:设备状态。返回 0xF 表示设备存在且可加载驱动;返回 0 表示设备不存在,驱动不会工作。
  • _CRS:当前资源设置,描述 I2C 设备的具体信息和中断配置。
I2CSerialBusV2 (0x001C, ControllerInitiated, 0x00061A80,
AddressingMode7Bit, "\\_SB.I2C5",
0x00, ResourceConsumer, ,
)

I2C 总线参数说明

  • 0x1C:I2C 设备的从机地址(slave address)
  • 0x61A80:十六进制值,十进制为 400000,表示最大传输速率为 400000 Hz
  • "\\_SB.I2C5":表示设备连接到 I2C5 主机控制器

GPIO 中断配置

GpioInt (Edge, ActiveHigh, Exclusive, PullUp, 0x0000, "\\_SB.I2C7.NXIO", 0x00, ResourceConsumer, , )
{
0
}

GPIO 中断参数说明

  • Edge:边沿触发中断
  • ActiveHigh:上升沿触发
  • Exclusive:独占中断
  • PullUp:GPIO 信号内部上拉
  • "\\_SB.I2C7.NXIO":GPIO 信号来源于 NXIO 控制器
  • { 0 }:表示使用 NXIO 控制器的第一个 GPIO 引脚

主板 GPIO 控制器说明

  • "\\_SB.SPIO":提供 SoC 上的 GPIO 0~20
  • "\\_SB.APIO":提供 SoC 上的 GPIO 21 及后续引脚 (注意:在 APIO 对应的 GpioInt 中指定 GPIO 编号时需减去 21,例如 GPIO21 对应编号 0)
  • "\\_SB.I2C7.NXIO":提供 GPIO 扩展芯片上的 GPIO 引脚

设备属性配置(_DSD)_DSD 中 UUID daffd814-6eba-4d8c-8a91-bc9bbf4aa301 后面的 Package 可以提供类似设备树(DTS)中的属性信息。

例如:

Package (0x02)
{
"#sound-dai-cells",
0
},

在设备的内核驱动程序中,可通过以下代码读取该属性值:

device_property_read_u32(&pdev->dev, "#sound-dai-cells", &dai_cells);

读取结果为 0。

步骤 3:集成到 AML 编译

将新建的设备描述文件集成到 AML 编译流程中。参考下图示例:I2C5 的 _STA 返回 0xF 表示 I2C 主机存在且主机驱动会正常工作,同时 I2C 从设备的描述必须包含在 I2C5 的 Scope 范围内:

E300 097 图示