0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

電源管理入門-什么是OPP?怎么用?

yzcdx ? 來源:OS與AUTOSAR研究 ? 2023-11-16 16:49 ? 次閱讀

之前的文章設(shè)置clock的時(shí)候多次提到了(Operating Performance Point)OPP,例如DEVFreq、CPUFreq等,在現(xiàn)代SoC上存在有Power Domain,也可以以Power Domain為單位進(jìn)行OPP的電壓頻率定義。

1. 什么是OPP,怎么用?

在SoC內(nèi),某些domain可以運(yùn)行在較低的頻率和電壓下,而其他domain可以運(yùn)行在較高的頻率和電壓下,某個(gè)domain所支持的<頻率,電壓>對的集合被稱為Operating Performance Point,縮寫OPP。

在DTS中配置后自動有OPP框架驅(qū)動加載使用,例如CPU的OPP,從設(shè)備樹文件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 */
                900000        1275000
                792000        1225000
                528000        1175000
                396000        1025000
                198000        950000
        >;
        fsl,soc-operating-points = <
                /* KHz        uV */
                900000        1175000
                792000        1175000
                528000        1175000
                396000        1175000
                198000        1175000
        >;

2. 系統(tǒng)初始化加載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中會根據(jù)DTS中信息找到對應(yīng)的信息:

950b5a58-8456-11ee-939d-92fbcf53809c.png

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

952e31c2-8456-11ee-939d-92fbcf53809c.png

這里struct dev_pm_opp如下:

struct dev_pm_opp {
struct list_head node;

bool available;
unsigned long rate;
unsigned long u_volt;

struct device_opp *dev_opp;
struct rcu_head head;
};

node:用于鏈表管理此設(shè)備下的opp。

available:用于判斷此opp使能可以使用。

rate:頻率,單位Hz

u_volt:電壓。

dev_opp:struct device_opp類型指針,指向此opp所屬的設(shè)備。

3. 觸發(fā)使用

例如輸入命令:

echo 700000 > /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;

        return dev_pm_opp_set_rate(priv->cpu_dev,
            policy->freq_table[index].frequency * 1000);
}

dev_pm_opp_set_rate()函數(shù)在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進(jìn)行頻率設(shè)置。

4. API介紹

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

向指定的設(shè)備添加一個(gè)頻率/電壓(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,調(diào)用dev_pm_opp_add添加進(jìn)去的OPP,默認(rèn)是enable的。

dev_pm_opp_disable:

雖然設(shè)備支持某些OPP,但driver有可能覺得比較危險(xiǎn),不想使用,則可以調(diào)用dev_pm_opp_disable接口,禁止該OPP。

dev_pm_opp_get_voltage:

獲得電壓。

dev_pm_opp_get_freq:

獲得頻率。

dev_pm_opp_set_regulators:

進(jìn)行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 :

解析并初始化一個(gè)設(shè)備的opp table。

OPP的查詢接口包括:

dev_pm_opp_find_freq_floor,查詢小于或者等于指定freq的OPP,在返回OPP的同時(shí),從freq指針中返回實(shí)際的freq值;

dev_pm_opp_find_freq_ceil,查詢大于或者等于指定freq的OPP,在返回OPP的同時(shí),從freq指針中返回實(shí)際的freq值;

dev_pm_opp_find_freq_exact,精確查找指定freq的OPP,同時(shí)通過available變量,可以控制是否查找處于disable狀態(tài)的OPP。上面兩個(gè)查找接口,是不查找處于disable狀態(tài)的OPP的。

后記:

Linux驅(qū)動的套路其實(shí)就是DTS里面有個(gè)compatible,然后內(nèi)核啟動的時(shí)候走各種平臺設(shè)備初始化就會去尋找加載,然后變成鏈表結(jié)構(gòu)體。在使用的時(shí)候:用戶通過設(shè)備節(jié)點(diǎn)或者中斷產(chǎn)生或者內(nèi)核進(jìn)程觸發(fā)就可以運(yùn)行。







審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 電源管理
    +關(guān)注

    關(guān)注

    117

    文章

    6408

    瀏覽量

    145857
  • DTS
    DTS
    +關(guān)注

    關(guān)注

    1

    文章

    50

    瀏覽量

    16404
  • 觸發(fā)器
    +關(guān)注

    關(guān)注

    14

    文章

    2033

    瀏覽量

    61930

原文標(biāo)題:電源管理入門-10 OPP介紹

文章出處:【微信號:OS與AUTOSAR研究,微信公眾號:OS與AUTOSAR研究】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 0人收藏

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    電源管理入門-關(guān)機(jī)重啟基礎(chǔ)知識詳解

    當(dāng)我們接觸電源管理的時(shí)候,最簡單的流程就是關(guān)機(jī)重啟,但是仔細(xì)分析其涉及的所有源代碼就會發(fā)現(xiàn),關(guān)機(jī)重啟雖然簡單
    發(fā)表于 09-19 11:41 ?3592次閱讀
    <b class='flag-5'>電源</b><b class='flag-5'>管理入門</b>-關(guān)機(jī)重啟基礎(chǔ)知識詳解

    電源管理入門-Regulator驅(qū)動是什么?Regulator的作用是什么?

    Regulator是Linux系統(tǒng)中電源管理的基礎(chǔ)設(shè)施之一,用于穩(wěn)壓電源管理,是各種驅(qū)動子系統(tǒng)中設(shè)置 電壓的標(biāo)準(zhǔn)接口。
    的頭像 發(fā)表于 11-16 16:51 ?1.3w次閱讀
    <b class='flag-5'>電源</b><b class='flag-5'>管理入門</b>-Regulator驅(qū)動是什么?Regulator的作用是什么?

    電源管理入門:Thermal熱管理

    管理指的是在電子設(shè)備或系統(tǒng)中通過各種方式控制其溫度來保證其正常工作或延長壽命的過程。其中包括散熱設(shè)計(jì)、溫度監(jiān)測、溫度控制等方面。熱管理的重要性越來越凸顯,尤其在高性能計(jì)算、人工智能等領(lǐng)域的應(yīng)用中更為重要。
    的頭像 發(fā)表于 11-29 10:09 ?6523次閱讀
    <b class='flag-5'>電源</b><b class='flag-5'>管理入門</b>:Thermal熱<b class='flag-5'>管理</b>

    電源管理入門:驅(qū)動Runtime PM管理

    Runtime PM管理也就是設(shè)備驅(qū)動里面的電源管理,即設(shè)備驅(qū)動結(jié)構(gòu)體里面的struct dev_pm_ops,只控制設(shè)備自己的電源。這樣可以在設(shè)備不需要工作的時(shí)候可以進(jìn)入到低功耗狀態(tài)
    的頭像 發(fā)表于 11-29 10:13 ?4230次閱讀
    <b class='flag-5'>電源</b><b class='flag-5'>管理入門</b>:驅(qū)動Runtime PM<b class='flag-5'>管理</b>

    電源管理入門:Power supply子系統(tǒng)

    對于便攜設(shè)備來說,電源管理更加的重要,因?yàn)殡姵仉娏坑邢?,容易電量焦慮。除了省電管理外,還需要對電池進(jìn)行監(jiān)控管理和充放電管理,這樣保護(hù)好電池和
    的頭像 發(fā)表于 11-29 10:15 ?6014次閱讀
    <b class='flag-5'>電源</b><b class='flag-5'>管理入門</b>:Power supply子系統(tǒng)

    電源管理入門:Power Domain管理

    SoC中通常有很多IP,按邏輯可以把幾個(gè)相關(guān)功能的IP劃為一個(gè)電源域。一個(gè)電源域內(nèi)的IP,通常按相同的方式由同一個(gè)硬件模塊PMIC供電,電壓一樣并且電源管理例如休眠喚醒一致。
    的頭像 發(fā)表于 11-29 10:16 ?4558次閱讀
    <b class='flag-5'>電源</b><b class='flag-5'>管理入門</b>:Power Domain<b class='flag-5'>管理</b>

    電源管理入門-芯片設(shè)計(jì)中的電源管理介紹

    SCP直接控制SoC的電源和時(shí)鐘,而AP通過硬件和軟件接口協(xié)同管理。
    的頭像 發(fā)表于 12-06 09:16 ?4212次閱讀
    <b class='flag-5'>電源</b><b class='flag-5'>管理入門</b>-芯片設(shè)計(jì)中的<b class='flag-5'>電源</b><b class='flag-5'>管理</b>介紹

    電源管理入門:Hypervisor中的電源管理

    很多時(shí)候聽說Hypervisor,但是對底層軟件技術(shù)不了解的人感覺挺神秘。本篇文章簡單介紹下Hypervisor的基本概念,另外介紹下電源管理在Hypervisor之上多OS間怎么應(yīng)用。
    的頭像 發(fā)表于 12-06 09:27 ?2006次閱讀
    <b class='flag-5'>電源</b><b class='flag-5'>管理入門</b>:Hypervisor中的<b class='flag-5'>電源</b><b class='flag-5'>管理</b>

    基于labview的opp藍(lán)牙發(fā)送

    OPP藍(lán)牙的OBEX對象推送模式(OPP),顯示“推” 到藍(lán)牙設(shè)備(如手機(jī))的文件的部分實(shí)現(xiàn)labview2009以上版本打開:
    發(fā)表于 12-13 16:38

    AM335x中的OPP是什么意思?

    經(jīng)??吹?b class='flag-5'>OPP50 OPP100.沒找到具體的英文全稱
    發(fā)表于 06-21 16:04

    防火墻原理入門

    防火墻原理入門 防火墻能增強(qiáng)機(jī)構(gòu)內(nèi)部網(wǎng)絡(luò)的安全性。防火墻系統(tǒng)決定了哪些內(nèi)部服務(wù)可以被外界訪問;外界的哪些人可以訪問內(nèi)部的服務(wù)以及哪
    發(fā)表于 08-01 10:21 ?1109次閱讀
    防火墻原<b class='flag-5'>理入門</b>

    數(shù)字信號處理入門指南

    數(shù)字信號處理入門指南什么是DSP? 數(shù)字信號處理器(DSP)采集已被數(shù)字化的現(xiàn)實(shí)世界的聲音、音頻、視頻、溫度、壓力或位置等信號,并從數(shù)學(xué)的角度對其進(jìn)
    發(fā)表于 09-15 08:55 ?1419次閱讀
    數(shù)字信號處<b class='flag-5'>理入門</b>指南

    單片機(jī)原理及應(yīng)用ppt入門課程

    微機(jī)原理入門課程ppt,比較簡單,適合新手。。
    發(fā)表于 01-12 17:52 ?0次下載

    補(bǔ)償 NCP1250 OPP 引腳上的負(fù)電壓尖峰

    補(bǔ)償 NCP1250 OPP 引腳上的負(fù)電壓尖峰
    發(fā)表于 11-15 19:51 ?0次下載
    補(bǔ)償 NCP1250 <b class='flag-5'>OPP</b> 引腳上的負(fù)電壓尖峰

    Linux系統(tǒng)進(jìn)程管理入門指南

    在 Linux 系統(tǒng)中,進(jìn)程是正在運(yùn)行的程序的實(shí)例。理解進(jìn)程的管理、查看和控制對于系統(tǒng)管理員和開發(fā)者來說非常重要
    的頭像 發(fā)表于 04-22 14:34 ?319次閱讀
    Linux系統(tǒng)進(jìn)程<b class='flag-5'>管理入門</b>指南

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動獲取豐厚的禮品