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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

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

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

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

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

1. 什么是OPP,怎么用?

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

在DTS中配置后自動有OPP框架驅(qū)動加載使用,例如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 */
                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中信息找到對應的信息:

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:用于鏈表管理此設備下的opp。

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

rate:頻率,單位Hz

u_volt:電壓。

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

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進行頻率設置。

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,調(diào)用dev_pm_opp_add添加進去的OPP,默認是enable的。

dev_pm_opp_disable:

雖然設備支持某些OPP,但driver有可能覺得比較危險,不想使用,則可以調(diào)用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狀態(tài)的OPP。上面兩個查找接口,是不查找處于disable狀態(tài)的OPP的。

后記:

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







審核編輯:劉清

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

    關注

    115

    文章

    6140

    瀏覽量

    144111
  • DTS
    DTS
    +關注

    關注

    1

    文章

    50

    瀏覽量

    16070
  • 觸發(fā)器
    +關注

    關注

    14

    文章

    1995

    瀏覽量

    61013

原文標題:電源管理入門-10 OPP介紹

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

收藏 人收藏

    評論

    相關推薦

    電源管理入門-關機重啟基礎知識詳解

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

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

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

    電源管理入門:Thermal熱管理

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

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

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

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

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

    電源管理入門:Power Domain管理

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

    電源管理入門-芯片設計中的電源管理介紹

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

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

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

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

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

    AM335x中的OPP是什么意思?

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

    防火墻原理入門

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

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

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

    單片機原理及應用ppt入門課程

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

    補償 NCP1250 OPP 引腳上的負電壓尖峰

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

    電源管理入門-7 DevFreq

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