驱动开发硬核特训 · Day 22(下篇): # 深入理解 Power-domain 框架:概念、功能与完整代码剖析

数字IC笔记-power domain 多电压技术是现在低功耗技术的主要方向。现在的很多低功耗技术就是在满足芯片性能的前提下,尽可能的降低芯片的工作电压VDD。 低功耗是芯片的一个很重要的设计指标,为了达到更低的功耗通常会将一颗芯片的所有逻辑电路分割成多个不同的电源域,每一个电源域独立开关。因此,当某个电源域不需要工作的时候,可以被关掉,从而降低功耗。另外不同的电源域可以使用不同的供电电压,从而更低的电压会带来更低的功耗。 对于一款芯片来说,其是由许多模块、子系统集成之后才会发挥它的功能,不同模块之间的工作速度和性能要求不同,此时就需要将这些模块 阅读详情

一、Power-domain 框架基础概念

✏️ 什么是 Power-domain?

在 Linux 内核中,Power-domain(电源域) 是指一组硬件模块的逻辑集合,这些模块可以被统一控制电源状态(上电、断电)。

Linux 内核通过 Generic Power Domain Framework(GENPD) 来统一管理所有 Power-domain 的创建、绑定与控制。

📚 标准定义总结:

Power-domain 是对硬件供电关系的逻辑抽象,GENPD框架负责统一管理不同电源域的开关操作。

✅ 注意:

  • Power-domain 是一种逻辑划分
  • GENPD 是实现这一功能的具体框架

在这里插入图片描述

二、为什么需要 Power-domain?

随着 SoC 集成度越来越高,比如 CPU、GPU、VPU、ISP、Camera Controller 都集成在一起,需要按功能模块独立开关电源以节能。

所以:

  • 如果模块没在使用,应当及时断电
  • 不同模块有不同的电源依赖关系
  • 需要统一调度开关,保证系统稳定

这就是 Power-domain 和 GENPD 框架存在的意义。


三、Power-domain 的核心功能

核心功能详细描述
统一开关电源域通过标准接口 pm_genpd_power_on() / pm_genpd_power_off()
自动状态管理动态检测设备使用情况,空闲时关闭电源
支持子设备层次绑定一个电源域下可以管理多个子设备
与 Runtime PM 框架协同设备运行时自动 suspend/resume 控制电源域
与系统挂起唤醒流程集成支持 suspend/resume 流程统一管理域状态

✅ 小结:Power-domain 是系统电源管理的中层调度器,连接上层电源策略和底层电源硬件。


四、Power-domain 框架核心结构

🔎 关键数据结构:struct generic_pm_domain

struct generic_pm_domain {
    const char *name;
    struct dev_pm_domain domain;
    struct list_head gpd_list_node;

    int (*power_on)(struct generic_pm_domain *genpd);
    int (*power_off)(struct generic_pm_domain *genpd);

    struct list_head master_links;
    struct list_head slave_links;

    unsigned int device_count;
    unsigned int state;
    ...
};

主要字段解释:

字段含义
name电源域名字
domain内嵌的标准 dev_pm_domain 结构
power_on/power_off域上电/断电的回调函数
device_count挂在域上的设备数
master_links/slave_links电源域之间的依赖关系

✅ generic_pm_domain 是 GENPD 框架管理 Power-domain 的核心对象。


五、Power-domain 框架工作流程

🔥 整体调用链流程

设备树 power-domains 属性绑定
    ↓
平台总线解析设备并注册
    ↓
GENPD框架注册电源域
    ↓
设备通过 pm_genpd_attach() 绑定电源域
    ↓
设备 runtime suspend/resume 调用 pm_runtime_put()/get()
    ↓
GENPD框架根据设备状态开关电源域
    ↓
执行 power_on()/power_off() 函数,操作底层硬件

✅ 小结:设备和电源域绑定后,电源域的开关完全由GENPD框架统一调度。


六、设备树绑定配置

✏️ 示例:绑定GPU到一个电源域

gpu: gpu@0 {
    compatible = "fsl,imx8mq-gpu";
    power-domains = <&gpu_pd>;
};

gpu_pd: power-domain@1 {
    compatible = "fsl,imx8mq-gpu-pd";
    #power-domain-cells = <0>;
};

解释:

  • gpu节点的 power-domains = <&gpu_pd>,表示 GPU设备属于 gpu_pd 这个电源域管理。
  • gpu_pd节点定义了域的属性,通常需要配合一个平台特定的 driver 来注册 domain。

✅ 设备树是设备和电源域绑定关系的入口。


七、真实代码剖析

1. 注册电源域

调用 of_genpd_add_provider_onecell() 注册:

struct generic_pm_domain **domains;
domains = devm_kzalloc(...);
of_genpd_add_provider_onecell(np, &data);
  • onecell_data包含域指针数组
  • 通过 index 查找域

✅ 这一步将设备树中定义的电源域注册到 GENPD 框架。


2. 设备绑定电源域

设备驱动通常在 probe() 时绑定:

genpd = genpd_get_from_provider(dev);
pm_genpd_attach(dev, genpd, NULL);
  • 查找对应电源域
  • 调用 pm_genpd_attach() 绑定设备到域

✅ 绑定后,设备的 runtime PM操作(如 suspend/resume)会自动通知电源域。


3. 电源域开关逻辑

开域:

int pm_genpd_power_on(struct generic_pm_domain *genpd)
{
    if (genpd->state == GENPD_STATE_ON)
        return 0;
    ret = genpd->power_on(genpd);
    genpd->state = GENPD_STATE_ON;
}

关域:

int pm_genpd_power_off(struct generic_pm_domain *genpd)
{
    if (genpd->state == GENPD_STATE_OFF)
        return 0;
    ret = genpd->power_off(genpd);
    genpd->state = GENPD_STATE_OFF;
}

✅ 实际的供电动作由 power_on() 和 power_off() 函数完成,比如:

  • 通过调用 regulator enable/disable
  • 通过 i2c 命令控制 PMIC

八、典型实例分析:PCA9450 管理 GPU 电源域

📖 实例流程

  1. 设备树:GPU节点绑定了gpu_pd电源域
  2. 平台驱动:注册gpu_pd,并设置power_on/power_off接口
  3. 驱动probe时:GPU设备调用pm_genpd_attach
  4. 运行时管理:
    • GPU使用时,调用pm_runtime_get() → 域自动上电
    • GPU空闲时,调用pm_runtime_put() → 域自动断电
  5. 实际供电动作:通过PCA9450的某一路Buck输出电源开关控制

✅ 从高层逻辑到底层硬件,一气呵成!


九、小结与工程启示

主题结论
Power-domain是框架吗?✅ 是 GENPD 功能框架
可以归为子系统吗?✅ 可以,属于电源管理子系统的一部分
管什么?管理功能域的电源开关状态
怎么使用?设备树描述 + 设备绑定 + runtime控制

✅ 学透 Power-domain 框架,你就掌握了 Linux 系统级电源控制的关键!


🔥 最后总结一张图(记忆版)

[设备树 power-domains] → [GENPD 框架注册电源域] → [设备绑定域] → [runtime 调度开关] → [PMIC控制硬件电源]

📺 视频教程请关注 B 站:“嵌入式Jerry”


18、电源管理入门之Power Domain管理 Kernel的(位于drivers/base/power/domain.c中),提供了管理和使用系统power domain的统一方法:对底层power domain硬件的操作对power domain hw的开启操作,包括开钟、上电、解复位、解除电源隔离等操作的功能封装;对power domain hw的关闭操作,包括关钟、断电、复位、做电源隔离等操作的功能封装;内部逻辑实现通过dts描述power domain框架的设备节点,并描述每个power domain节点。 阅读详情

相关推荐

linux之调度管理(8)-SMP cpu 的 psci启动

psci是arm提供的一套电源管理接口,当前一共包含0.1、0.2和1.0三个版本。它可被用于以下场景:(1)cpu的idle管理(2)cpu hotplug以及secondary cpu启动(3)系统shutdown和reset但该接口不包含dvfs和设备电源管理(如像GPU之类的外设电源管理)功能。由于psci与虚拟化以及trust os有一定的关联,为了专注于电源管理相关的实现,故本系列的介绍都不涉及与它们相关的内容。

z20230508的博客 1481

PowerDomain

PowerDomain 电子术语

weixin_42256557的博客 912

[UPF]理解UPF功率域和域边界

摘要:本文深入探讨了统一功率格式(UPF)在先进工艺技术中的核心作用,重点分析功率域及其边界的定义与管理。UPF通过电源电压控制有效降低动态和静态功耗,其基本构造包括功率域、电源网络、功率状态等要素。文章结合示例设计,详细阐释了功率域的定义语法、域边界接口概念(如上/下边界、HighConn/LowConn端口)以及复合域的应用场景。通过UPF命令(如create_power_domain)建立的功率域范围,直接影响电源策略实施和验证方法。理解功率域边界对实现可靠的电源感知验证至关重要,这为低功耗设计提供了

元直的博客 1万+

什么是电源域(power domain)

为了满足低功耗的挑战,SOC通常被分为多个电源域,不同的电源域可以独立的上下电。 下面以CX3芯片CYUSB306X为例进行说明: 1.power页对电源域的描述描述 2.io描述页对电源域的描述: ...

h1580824951的专栏 9522

Linux的电源管理架构

介绍Linux PM相关几种策略。这份文档对驱动程序如何与系统的电源管理部分交互做了一个大概的描述,尤其是关联到驱动程序核心中的模型和接口的共享,建议从事驱动程序相关领域的人通过本文档可以了解相关的背景知识。

Linux系统下SAPGUI安装包选择与避坑指南

本文详细介绍了在Linux系统下选择和安装SAPGUI安装包的策略与避坑指南。重点解析了不同版本安装包的关键区别,特别是Linux版必须包含linux-lib.jar和linux64-lib.jar文件,避免误用Mac或Windows版导致的兼容性问题。文章还提供了针对Ubuntu、RHEL等不同Linux发行版的安装实战指南,以及常见报错的解决方案,帮助用户顺利完成SAPGUI的安装与配置。

weixin_28366353的博客 673

Linux电源管理之 Power Domain

作者简介:JuoJuo6,码龄7年,从事芯片行业嵌入式软件开发工作,主要负责kernel网络子系统模块最近工作上接触到了kernel power domain framework,kernel文档对这块的解释不多,网上的参考资料也很少,废话不多说,梳理一下,也让自己加深一下印象。什么是power domain?电源域(power domain)可以理解为多个模块共用一个电源,比如usb、gpio在...

Peter的专栏 3247

【MM小贴士】关于SAP系统中关税的处理方式

的运费,这部分来讲,我们关税的计价基础,就应该是货物价值+包邮到中国港口的运费,完后进行报关操作,缴纳关税,后半段从中国港口拉回到企业里面的运输费,就会做到费用里面去,而不是计入到存货成本。1、我们自己的企业和国外厂家A购买一项物资,厂家A的报价会分成几个组成部分货物本身的价值或者货物本身的价值+到国外港口的运费或者货物本身的价值+到中国港口的运费或者货物本身的价值+包邮到你们自己企业的整体运费。所以我的关税就是不确定的。重点是运费是哪一段的运费,如何结算,结算的货币,何时能够确定运费。.........

竹大的博客 9025

PowerDomain简介

本文转自:http://www.eetop.cn/blog/html/28/1561828-5940203.html Synopsys 推荐的 UPF 流程简介   上次介绍了在当前先进制程下低功耗设计实现都需要UPF技术的支持,否则在功耗验证的时候将会很难验证并且对后续的综合和后端实现也带来了很大的困难和挑战。 既然当前低功耗设计实现都离不来UPF标准,那么什么是UPF呢?UPF的全称是...

TroubleMaker 7292

基于Simulink的防空导弹六自由度弹道建模与仿真实战

本文详细介绍了基于Simulink的防空导弹六自由度弹道建模与仿真方法。通过分析导弹动力学原理、Simulink环境配置、气动力建模、推进与控制系统设计等关键环节,提供了一套完整的实战指南。文章特别强调了六自由度模型在防空导弹仿真中的重要性,并分享了常见问题排查与优化建议,为相关领域工程师提供实用参考。

apple5的专栏 868

[RK3588从入门到精通] 专栏目录及介绍

[RK3588从入门到精通] 专栏目录及介绍

nb124667390的博客 6498

Linux功耗管理(17)_Linux PM domain framework(1)_概述和使用流程

1. 前言 在复杂的片上系统(SOC)中,设计者一般会将系统的供电分为多个独立的block,这称作电源域(Power Domain),这样做有很多好处,例如: 1)将不同功能模块的供电分开,减小相互之间的干扰(如模拟和数字分开)。 2)不同功能所需的电压大小不同:小电压能量损耗低,但对信号质量的要求较高;大电压能量损耗高,对信号质量的要求较低。因此可以根据实际情况,使用不同的电压

芋圆_钰源 2140

保姆级教程:用Python和PyTorch复现PTB-XL心电信号分类论文(附完整代码)

本文提供了一份详细的PTB-XL心电信号分类教程,涵盖从数据预处理到模型优化的完整流程。通过PyTorch实现三种深度学习架构(Conv1D、SincNet和熵特征融合网络),并针对医疗AI特有的类别不平衡问题提供解决方案。教程包含可运行的代码示例,帮助开发者快速复现论文结果并应用于实际心电信号分析场景。

weixin_30555125的博客 405

【低功耗 Power 学习专栏 -- Power domian 和 power rail】

Power rail 是指芯片中的一条或多条电源轨,负责传输特定电压的电流到相应的电路模块。

CodingCos的博客 2651

N32G430学习笔记11- systick使用函数-延时函数

N32学习笔记11- systick使用函数-延时回调函数-延时函数

Car12 1416

【A_Star三维路径规划】基于matlab A_Star算法结合B样条平滑三维地形路径规划(含雷达威胁)【含Matlab源码 3527期】

A_Star算法结合B样条平滑三维地形路径规划(含雷达威胁) 完整代码,包运行;可提供运行操作视频!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 741

驱动开发硬核特训 · Day 22(上篇): 电源管理体系完整梳理:I2C、Regulator、PMIC与Power-Domain框架

I2C(Inter-Integrated Circuit)是一种简单而高效的串行总线协议,用于连接微控制器与外设(如PMIC、传感器等)。Regulator子系统统一管理系统中所有可以动态控制的电源输出,提供标准接口给上层(如power-domain、驱动程序)。PMIC(Power Management IC)集成多个电源模块(Buck/LDO等),PMIC驱动负责初始化芯片并注册各个电源通道到regulator子系统。

Interview_TC的博客 1681

科研级YOLO26下采样革新:ContextGuided模块赋能,让特征降维兼具上下文感知的实战指南

在文件夹下新建,将上述类的代码写入其中。这一步是为了让YOLO26的代码架构能识别我们的自定义下采样模块。

LXY_LOVE36的博客 100

i.MX8MP LCDIFv3 驱动中的 Power Domain 管理全解

LCDIFv3 驱动中,实际不用直接管 power domain,所有操作都通过 platform framework + runtime PM + GENPD 来完成!完全完全完全是 完全自动系统,驱动只需做好自己属于设备框架的部分!

Interview_TC的博客 927

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Linux内核 -- 电源域(Power Domain)解析与实践分享

本文深入解析了RK3588 SoC中的Power Domain(电源域)概念及实践配置方法。电源域是可独立控制供电的芯片功能模块区域,通过SoC内部控制器和外部PMIC协同工作。文章详细介绍了RK3588电源域的控制结构、DTS配置方式(包括控制器节点定义、电源域ID索引和模块绑定),并对比了电源域与原理图中电源树的区别。提供了regulator节点配置示例和CPU大核电源实战案例,最后分享了通过sysfs调试电源状态的方法。掌握电源域机制是进行系统级功耗优化的关键技术基础。

sz66cm 学习随笔 1158

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

一文搞懂linux power domain framework

什么是power domain framework?在搞清楚这个问题之前,有必要先弄清楚什么是power domain,以及它解决了什么问题。从字面上理解,power domain指的是电源域。SOC是由多功能模块组成的一个整体,对于工作在相同电压且功能内聚的功能模块,可以划为一个逻辑组,这样的一个逻辑组就是一个电源域。简单来说,电源域就是逻辑划分,在该逻辑划分中包含了物理实体和电源线的连接关系。电源域之间存在着包含关系,这样就是一个父子关系的电源域。电源域也存在着兄弟关系,这样就是同一级的电源域。

weixin_41028159的博客 687

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Linux power-domain

本文介绍了Linux内核中的Power-domain框架,用于统一管理SoC中硬件模块的电源状态。主要内容包括:1. Power-domain概念,即一组硬件模块的逻辑集合,可统一控制电源状态;2. 框架工作流程,通过设备树描述电源域节点,实现设备与电源域的绑定;3. 使用示例,展示如何注册电源域Provider和Consumer驱动,并通过runtime PM控制电源开关。该框架简化了SoC多模块的电源管理,支持按功能模块独立开关电源,满足系统稳定性和节能需求。

weixin_48117550的博客 1106

Low Power之UPF

原因很简单,可关电的PD的逻辑输出,在power down以后呈现X态,如果不加处理连到always on的逻辑,可能导致功能异常。ISO的功能类似AND和OR(取决于掉电后希望保持1还是0),其中ISO_EN由always on domain的信号驱动,在掉电前会先打开ISO_EN,保证掉电PD的输出都处于确定值,然后再关电;形象化一点的理解,PD就是共用一个电源(包括VDD和VSS)的一堆电路,而且这堆电路的边界往往是根据RTL Hierarchy的boundary来定义的。首先要明白几个概念。

分享记录一下工作中遇到的相关知识 1325

【低功耗】电压域和电源域

cluster内的PPU也处于该电源域,因为PPU需要能够在保持活动的同时关闭包括PDCLUSTER在内的其他域的电源。因此,PDTOP电源域必须在任何其他电源域通电之前通电,并且必须仅在其他电源域断电之后断电。每个L3高速缓存片被放置在其自己的独立电源域(PDSLICE)中,以允许高速缓存片的逻辑和RAM在不需要时断电。指使用同一个电压源的模块合集,如果几个模块使用相同的电压源,就认为这几个模块属于同一个电压域。一个单独的电压域中,同时支持DynamIQ cluster中的每个核都采用独立的电压域。

cy413026的博客 1430

Linux regulator子系统分析之一 总体概述

Linux regulator子系统主要用于管理电压、电流电源设备的电压、电流输入使能、动态调整电压、电流等,属于电源管理的一部分。 从本章开始我们分析regulator子系统。主要分为如下几部分: 一、regulator子系统总体概述 二、regulator相关数据结构分析 三、regulator相关注册、注销函数分析 四、regulator设备驱动实现 本章主要对regulator子系统进行简要说明。本章的内容主要包括: 一、regulator子系统相关的...

lickylin的专栏 2726

Linux PM domain framework(1)_概述和使用流程

在复杂的片上系统(SOC)中,设计者一般会将系统的供电分为多个独立的block,这称作电源域(Power Domain),这样做有很多好处,例如:1)将不同功能模块的供电分开,减小相互之间的干扰(如模拟和数字分开)。2)不同功能所需的电压大小不同:小电压能量损耗低,但对信号质量的要求较高;大电压能量损耗高,对信号质量的要求较低。因此可以根据实际情况,使用不同的电压供电,例如CPU core只需1.2v左右即可,而大部分的I/O则需要3.3v左右。

weixin_41028159的博客 715
上一篇: 驱动开发硬核特训 · Day 22(上篇): 电源管理体系完整梳理:I2C、Regulator、PMIC与Power-Domain框架
下一篇: i.MX8MP LCDIFv3 驱动中的 Power Domain 管理全解
嵌入式孙老师
博客等级 码龄7年 5687粉丝 900原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值