news 2026/5/19 15:58:54

电源管理入门-10 OPP介绍

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
电源管理入门-10 OPP介绍

之前的文章设置clock的时候多次提到了(Operating Performance Point)OPP,例如DEVFreq、CPUFreq等,在现代SoC上存在有Power Domain,也可以以Power Domain为单位进行OPP的电压频率定义。

1. 什么是OPP,怎么用?

在SoC内,某些domain可以运行在较低的频率和电压下,而其他domain可以运行在较高的频率和电压下,某个domain所支持的<频率,电压>对的集合被称为Operating Performance Point,缩写OPP。

在DTS中配置后自动有OPP框架驱动加载使用,例如CPU的OPP,从设备树文件arch/arm/boot/dts/imx6ull.dtsi中找到

cpu0: cpu@0{compatible="arm,cortex-a7";device_type="cpu";reg=<0>;clock-latency=<61036>;/* two CLK32 periods */ operating-points=</* kHz uV */9000001275000792000122500052800011750003960001025000198000950000>;fsl,soc-operating-points=</* KHz uV */90000011750007920001175000528000117500039600011750001980001175000>;

2. 系统初始化加载OPP信息

DT_MACHINE_START --》imx6ul_init_late --》imx6ul_opp_init --》_of_add_opp_table_v1(dev);--》_opp_add_v1 --》_opp_add

_of_add_opp_table_v1中会根据DTS中信息找到对应的信息:

_opp_add_v1中会把DTS中信息提取出来,存入struct dev_pm_opp *new_opp;

这里struct dev_pm_opp如下:

struct dev_pm_opp{struct list_headnode;bool available;unsigned long rate;unsigned long u_volt;struct device_opp *dev_opp;struct rcu_headhead;};

node:用于链表管理此设备下的opp。available:用于判断此opp使能可以使用。rate:频率,单位Hzu_volt:电压。dev_opp:struct device_opp类型指针,指向此opp所属的设备。

3. 触发使用

例如输入命令:

echo700000>/sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed

__cpufreq_driver_target->__target_index->cpufreq_driver->target_index

static int set_target(struct cpufreq_policy *policy, unsigned int index){struct private_data *priv=policy->driver_data;returndev_pm_opp_set_rate(priv->cpu_dev, policy->freq_table[index].frequency *1000);}

dev_pm_opp_set_rate()函数在drivers/base/power/opp/core.c中定义

opp_table=_find_opp_table(dev);clk=opp_table->clk;freq=clk_round_rate(clk, target_freq);if((long)freq<=0)freq=target_freq;old_freq=clk_get_rate(clk);ret=_generic_set_opp_clk_only(dev, clk, old_freq, freq);

clk_set_rate进行频率设置。

4. API介绍

  • dev_pm_opp_add :( WARNING: Do not use this function in interrupt context.)

  • 向指定的设备添加一个频率/电压(opp table)组合,频率和电压的单位分别是Hz和uV。

  • dev_pm_opp_remove:

  • remove an opp from opp table.

  • dev_pm_opp_get:

  • increment the reference count of opp.

  • dev_pm_opp_enable:

  • 用于使能指定的OPP,调用dev_pm_opp_add添加进去的OPP,默认是enable的。

  • dev_pm_opp_disable:

  • 虽然设备支持某些OPP,但driver有可能觉得比较危险,不想使用,则可以调用dev_pm_opp_disable接口,禁止该OPP。

  • dev_pm_opp_get_voltage:

  • 获得电压。

  • dev_pm_opp_get_freq:

  • 获得频率。

  • dev_pm_opp_set_regulators:

  • 进行voltage scaling

  • dev_pm_opp_put_regulators:

  • free the resources acquired by the OPP core

  • dev_pm_opp_set_rate:

  • This routine configures the device for the OPP with the lowest frequency greater than or equal to the target frequency.

  • dev_pm_opp_get_opp_count:

  • 获取opp table opps numbers

  • dev_pm_opp_of_add_table :

  • 解析并初始化一个设备的opp table。

  • OPP的查询接口包括:

  • dev_pm_opp_find_freq_floor,查询小于或者等于指定freq的OPP,在返回OPP的同时,从freq指针中返回实际的freq值;

  • dev_pm_opp_find_freq_ceil,查询大于或者等于指定freq的OPP,在返回OPP的同时,从freq指针中返回实际的freq值;

  • dev_pm_opp_find_freq_exact,精确查找指定freq的OPP,同时通过available变量,可以控制是否查找处于disable状态的OPP。上面两个查找接口,是不查找处于disable状态的OPP的。

后记:

Linux驱动的套路其实就是DTS里面有个compatible,然后内核启动的时候走各种平台设备初始化就会去寻找加载,然后变成链表结构体。在使用的时候:用户通过设备节点或者中断产生或者内核进程触发就可以运行。

“啥都懂一点,啥都不精通,

干啥都能干,干啥啥不是,

专业入门劝退,堪称程序员杂家”。

欢迎各位自己有博客公众号的留言:申请转载,多谢!

后续会继续更新,纯干货分析,欢迎分享给朋友,欢迎点赞、收藏、在看、划线和评论交流以!

公众号:“那路谈OS与SoC嵌入式软件”,欢迎关注!

个人文章汇总:https://thatway1989.github.io

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/19 15:58:46

AI Agent时代来临:从工具到员工,你的工作将如何被重塑?

2026年3月&#xff0c;OpenAI发布了Operator&#xff0c;Google推出了Project Mariner&#xff0c;Anthropic的Claude Agent也正式上线。如果你关注AI领域会发现&#xff0c;一个词正在变成现实——AI Agent。 这不是概念炒作&#xff0c;而是真实发生的范式转移。 从工具到员工…

作者头像 李华
网站建设 2026/5/19 15:58:46

ppInk屏幕标注工具:解锁专业级实时标注的7大核心功能

ppInk屏幕标注工具&#xff1a;解锁专业级实时标注的7大核心功能 【免费下载链接】ppInk Fork from Gink 项目地址: https://gitcode.com/gh_mirrors/pp/ppInk 你是否曾经在线上会议中手忙脚乱地试图解释复杂概念&#xff1f;或者在教学演示时苦于找不到合适的工具来突出…

作者头像 李华
网站建设 2026/4/2 4:41:47

网站搭建一条龙服务的收费标准是如何制定的_网站搭建一条龙服务是否提供SEO优化等增值服务

网站搭建一条龙服务的收费标准是如何制定的_网站搭建一条龙服务是否提供SEO优化等增值服务 网站搭建一条龙服务近年来在企业和个人中变得越来越受欢迎。这种服务包括从建站到上线的全流程支持&#xff0c;让客户无需专业技能也能轻松拥有一个专业的网站。网站搭建一条龙服务的…

作者头像 李华
网站建设 2026/4/5 13:50:23

优雅地处理表单提交的加载动画

在Web开发中,表单提交是一个常见的用户交互操作。为了提升用户体验,我们常常会在表单提交时显示一个加载动画,这样用户可以直观地感受到系统正在处理请求。然而,当表单验证失败时,如果加载动画依然显示,这不仅会让用户困惑,还会降低用户体验。本文将通过一个具体的实例,…

作者头像 李华
网站建设 2026/4/2 4:39:48

OpenClaw自动化测试:Phi-3-mini-128k-instruct持续集成实践

OpenClaw自动化测试&#xff1a;Phi-3-mini-128k-instruct持续集成实践 1. 为什么选择OpenClaw做自动化测试 去年接手一个个人开源项目时&#xff0c;我陷入了测试覆盖率不足的困境。每次提交代码前手动跑测试用例要花半小时&#xff0c;而漏测的边界条件总在深夜突然暴露。直…

作者头像 李华
网站建设 2026/4/2 4:39:38

Claude Code每日更新速览(v2.1.89)-2026/04/01

本文前言&#xff1a; Claude Code 的进化速度&#xff0c;已经到了一种让人来不及消化的程度。根据 github.com/anthropics/claude-code/blob/main/CHANGELOG.md 获取最新的变更&#xff0c;跟紧 Claude Code新功能、新趋势。最新版本&#xff1a;v2.1.89 提交时间&#xff1a…

作者头像 李华