0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

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

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

電源管理入門(mén)-什么是OPP?怎么用?

yzcdx ? 來(lái)源: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所支持的<頻率,電壓>對(duì)的集合被稱(chēng)為Operating Performance Point,縮寫(xiě)OPP。

在DTS中配置后自動(dòng)有OPP框架驅(qū)動(dòng)加載使用,例如CPU的OPP,從設(shè)備樹(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中會(huì)根據(jù)DTS中信息找到對(duì)應(yīng)的信息:

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

_opp_add_v1中會(huì)把DTS中信息提取出來(lái),存入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類(lèi)型指針,指向此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有可能覺(jué)得比較危險(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í)通過(guò)available變量,可以控制是否查找處于disable狀態(tài)的OPP。上面兩個(gè)查找接口,是不查找處于disable狀態(tài)的OPP的。

后記:

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







審核編輯:劉清

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

    關(guān)注

    115

    文章

    6188

    瀏覽量

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

    關(guān)注

    1

    文章

    50

    瀏覽量

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

    關(guān)注

    14

    文章

    2002

    瀏覽量

    61272

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

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

    電源管理入門(mén)-Regulator驅(qū)動(dòng)是什么?Regulator的作用是什么?

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

    電源管理入門(mén):Thermal熱管理

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

    電源管理入門(mén):驅(qū)動(dòng)Runtime PM管理

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

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

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

    電源管理入門(mén):Power Domain管理

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

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

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

    電源管理入門(mén):Hypervisor中的電源管理

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

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

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

    AM335x中的OPP是什么意思?

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

    防火墻原理入門(mén)

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

    數(shù)字信號(hào)處理入門(mén)指南

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

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

    微機(jī)原理入門(mén)課程ppt,比較簡(jiǎn)單,適合新手。。
    發(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ù)電壓尖峰

    電源管理入門(mén)-7 DevFreq

    復(fù)雜SoC由多個(gè)子模塊協(xié)同工作組成,在運(yùn)行中并非SoC中的所有模塊都需要始終保持最高性能。為方便起見(jiàn),將SoC中的子模塊分組為域,從而允許某些域以較低的電壓和頻率運(yùn)行
    的頭像 發(fā)表于 10-16 17:06 ?1665次閱讀
    <b class='flag-5'>電源</b><b class='flag-5'>管理入門(mén)</b>-7 DevFreq