在现代AI和移动设备中,电源管理是决定性能和续航的关键。本文将深入剖析Android电源管理子系统的核心——异构多核SoC的电源硬件架构,帮助开发者理解从硬件到软件的全链路设计。

1. 为什么需要集中式电源控制?

现代SoC集成了CPU、GPU、NPU等多种处理器和大量硬件模块,电源管理复杂度极高。如果缺乏统一管控,各模块的时钟、电压和电源域协调将陷入混乱。为此,ARM推出了功耗控制系统架构(PCSA),为芯片设计提供标准化参考。PCSA定义了使用标准基础设施组件(如低功耗接口)进行功率控制集成的方法,让软硬件设计有章可循。实际厂商会基于PCSA进行定制,但核心思想保持一致。

核心目标:将电源管理任务从应用处理器中抽象,集中到独立的控制处理器(SCP)上,实现高效、安全的功耗控制。

image-20260204074714934

2. 电源域与电压域:精细化管理的基础

为了实现精细化电源控制,ARM将SoC内部划分为两种关键概念:电源域(Power Domain)电压域(Voltage Domain)。不同的电压域(如大核VBIG、小核VLITTLE、GPU的VGPU)拥有独立的供电线路,允许在运行时动态关闭不使用的域,或进入待机模式仅保留必要域。

  • 电压域划分:支持独立调压,例如CPU大核与小核可运行在不同电压下。
  • 电源域门控:虚线框内的模块可独立开关电源,实线框内(如SCP)则必须常在线。
在这里插入图片描述

实际案例中,RK3399芯片就实现了明确的电源域(PD)和电压域(VD)划分。

在这里插入图片描述

3. 电源管理软件协议栈:从用户到硬件的全链路

电源管理软件协议栈层层递进,构成了一个完整的控制闭环。用户空间的service通过sysfs接口,触发内核层的EAS(Energy Aware Scheduling)IPA(Intelligent Power Allocation)。EAS感知负载和功耗,动态选择CPU idle等级、频率以及大小核调度;IPA则负责热管理。

关键链路:用户进程 → sysfs → 内核(EAS/IPA)→ PSCI → ATF → SCMI → SCP → PMIC

在这里插入图片描述

其中,PSCI(Power State Coordination Interface)是操作系统与ATF之间的标准接口,而SCMI(System Control and Management Interface)则连接ATF与SCP。最终,SCP控制sensor、clock、power domain及板级PMIC,完成低功耗操作。

在这里插入图片描述

4. ATF安全固件:电源管理的安全基石

ARM可信固件(ATF)是ARMv8架构中的安全启动项目,它并非简单的bootloader,而是负责加载和验证Bootloader、Linux内核及TEE OS的安全运行环境。ATF的冷启动分为5个阶段:BL1(BootRom)→ BL2(可信启动固件)→ BL31(EL3运行时固件)→ BL32(TEE OS)→ BL33(非可信固件如U-Boot)。

在这里插入图片描述

在电源管理方面,ATF通过SMC指令与Linux内核通信,常驻内存的BL31部分作为后台可信服务,处理重启、关机、待机等关键操作。如果硬件包含SCP,ATF会将最终操作移交SCP;否则直接设置寄存器。厂商如RK3399已将芯片级休眠唤醒操作集成在ATF中,但通常闭源。

在这里插入图片描述

5. SCP:系统控制处理器的核心作用

SCP(System Control Processor)是PCSA定义的关键硬件模块,通常是一个内置的MCU(如Cortex-M4),配合外围逻辑构成功耗控制单元。它从AP中抽象出电源和系统管理任务,提供以下服务:

  • 系统初始化:负责上电复位顺序,从主系统到AP核心的电源域通电。
  • OSPM定向操作:在操作系统PM指导下执行电压变化、电源控制与时钟管理。
  • 系统事件响应:处理中断唤醒、定时器事件、看门狗超时等。
  • 系统感知:协调OSPM与其他代理(如modem)对共享资源的请求。
在这里插入图片描述

SCP固件(官方实现见GitHub)运行在独立内存中,具有高权限。其核心流程包括:上电时加载固件到内部RAM并执行,运行时循环等待AP指令,复位时执行恢复序列。厂商通常会裁剪官方固件,简化功能以适应具体SoC。

6. SCP与AP的通信:PSCI与SCMI协议详解

SCP与AP(应用处理器)之间的通信通过多层协议实现。整体流程如下:

在这里插入图片描述

PSCI协议定义了电源管理标准接口,操作系统可通过SMC或HVC指令调用。其功能包括CPU开启/关闭、系统挂起等,命令集在规范表6-2中定义。

在这里插入图片描述
1.psci_1_0_init
/android/vendor/amlogic/common/kernel/common_5.4/drivers/firmware/psci/psci.c
int __init psci_1_0_init(struct device_node *np)
--psci_0_2_init()
----psci_probe()
------psci_0_2_set_functions();  //设置各种回调函数
------psci_init_smccc();
------psci_init_cpu_suspend();
------psci_init_system_suspend(); //注册suspend接口给PM core
------psci_init_system_reset2();
2.注册suspend接口给PM core使用
__init psci_init_system_suspend(void)
/android/vendor/amlogic/common/kernel/common_5.4/kernel/power/suspend.c
--suspend_set_ops(&psci_suspend_ops);
/android/vendor/amlogic/common/kernel/common_5.4/include/linux/suspend.h
struct platform_suspend_ops {
    int (*valid)(suspend_state_t state);
    int (*begin)(suspend_state_t state);
    int (*prepare)(suspend_state_t state);
    int (*enter)(suspend_state_t state);
}
3.PSCI power off
/android/vendor/amlogic/common/kernel/common_5.4/drivers/firmware/psci/psci.c
#define PSCI_0_2_FN_BASE   0x84000000
#define PSCI_0_2_FN(n) (PSCI_0_2_FN_BASE + (n))
#define PSCI_0_2_FN_SYSTEM_OFF PSCI_0_2_FN(8)
static void psci_sys_poweroff(void)
{
  invoke_psci_fn(PSCI_0_2_FN_SYSTEM_OFF, 0, 0, 0);
}
3.psci_operations
/android/vendor/amlogic/common/kernel/common_5.4/include/linux/psci.h
struct psci_operations {
    u32 (*get_version)(void);
    int (*cpu_suspend)();
    int (*cpu_off)();
    int (*cpu_on)();
    int (*migrate)();
    int (*affinity_info)();
}

SCMI协议则用于ATF与SCP之间的通信。它定义了协议标识符(如Power Domain Management 0x11)、消息格式和传输层。传输层通常采用Mailbox机制,支持同步和异步通信。

在这里插入图片描述
/android/vendor/amlogic/common/kernel/common_5.4/drivers/firmware/arm_scmi
在这里插入图片描述在这里插入图片描述在这里插入图片描述

Mailbox框架是核间通信的软硬件统称,通过共享内存和中断实现数据交换。AP向SCP发送消息的典型流程:

  1. AP写入共享内存buffer,Mailbox触发中断并传递地址信息。
  2. SCP读取buffer数据,完成后触发回中断。
在这里插入图片描述
1、Mailbox常见的硬件模块PL320或者MHU - 通常直接叫mailbox
2、软件协议使用SCMI协议(方便不同系统通信而协定的标准格式)+共享内存报文头 - 通常也叫mailbox消息
在这里插入图片描述

在SCMI消息处理中,Agent(如Linux内核)通过Mailbox通道发送协议消息,SCP解析并执行后返回响应。例如,Power Domain控制消息的协议ID为0x11,通过预定义的共享内存布局传递。

在这里插入图片描述在这里插入图片描述

[AFFILIATE_SLOT_1]

7. PMIC与Regulator框架:最后的执行层

PMIC(电源管理集成电路)是电源管理的最终执行者,负责提供稳定的电压和电流。在Linux内核中,Regulator框架抽象了PMIC的控制接口,允许上层通过统一的API调节电压。SCP通过LPI(低功耗接口)控制PMIC,实现动态电压频率调整(DVFS)和电源门控。

⚠️ 注意:PMIC驱动通常由芯片厂商提供,遵循Regulator框架的规范。开发者需要关注设备树中的regulator配置,以确保电源域的正确初始化。

总结

现代Android设备的电源管理是一个从硬件到软件的复杂系统工程。通过PCSA规范、电源域/电压域划分、ATF安全固件、SCP协处理器以及PSCI/SCMI协议栈,实现了高效、安全的功耗控制。理解这一架构,对于优化AI和机器学习设备的续航与性能至关重要。

[AFFILIATE_SLOT_2]