91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

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

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

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

電源管理入門:Power Domain管理

yzcdx ? 來源:OS與AUTOSAR研究 ? 2023-11-29 10:16 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

SoC中通常有很多IP,按邏輯可以把幾個相關(guān)功能的IP劃為一個電源。一個電源域內(nèi)的IP,通常按相同的方式由同一個硬件模塊PMIC供電,電壓一樣并且電源管理例如休眠喚醒一致

為什么有設(shè)備電源管理還需要power domain劃分?

對每個設(shè)備電源管理太細化了,會造成額外的開銷。通常幾個設(shè)備可以一塊進行管理更加的方便,例如一個子系統(tǒng),要么全工作要么全關(guān)閉,不會子系統(tǒng)內(nèi)的某個設(shè)備單獨工作。這時候為了簡化管理工作就需要劃分出來一個domain。SOC上眾多電源域組成了一個電源域樹,他們之間存在著相互的約束關(guān)系,子電源域打開前,需要父電源域打開,父電源域下所有子電源域關(guān)閉,父電源域才能關(guān)閉。

Domain這個詞一般在權(quán)限管理中經(jīng)常遇到,用于隔離Domain內(nèi)共進退

雖然電源域的好處多多,卻不是越多越好,因為劃分電源域是需要成本的(需要在PMU中使用模擬電路完成,包括金錢成本和空間成本)。因此,大多數(shù)系統(tǒng)會根據(jù)功能,設(shè)置有限的幾個電源域,例如:CPU core(1、2、3…);GPU;NAND;DDRUSB;Display;Codec等等

這種設(shè)計引出一個問題:存在多個模塊共用一個電源域的情況。因而要求在對模塊power on/off的時候,考慮power共用的情況:只要一個模塊工作,就要power on;直到所有模塊停止工作,才能power off

1. 框架介紹

48123e82-8dda-11ee-939d-92fbcf53809c.png

Kernel的PM domain framework(位于drivers/base/power/domain.c中),提供了管理和使用系統(tǒng)power domain的統(tǒng)一方法:

對底層power domain硬件的操作

對power domain hw的開啟操作,包括開鐘、上電、解復(fù)位、解除電源隔離等操作的功能封裝;

對power domain hw的關(guān)閉操作,包括關(guān)鐘、斷電、復(fù)位、做電源隔離等操作的功能封裝;

內(nèi)部邏輯實現(xiàn)

通過dts描述power domain框架的設(shè)備節(jié)點,并描述每個power domain節(jié)點。提供出一個power domain framework的設(shè)備節(jié)點,及每個power domain子設(shè)備的節(jié)點,并指定power-domain-ccell = <1>,這樣可以通過power domain framework的設(shè)備及power domain的編號查找具體的power domain;

實現(xiàn)dts解析邏輯,獲取power domain的配置信息,并通過初始化函數(shù)對每個power domain進行初始化,所有的power domain統(tǒng)一的放在一個全局鏈表中,將power domain下所有的設(shè)備,放到其下的一個設(shè)備鏈表中;

為runtime pm、系統(tǒng)休眠喚醒等框架,注冊相應(yīng)的回調(diào)函數(shù),并實現(xiàn)具體的回調(diào)函數(shù)對應(yīng)的power domain的開關(guān)函數(shù);

上層使用power domain的上游驅(qū)動、框架及debug fs

linux系統(tǒng)的runtime power manager 框架通過提供runtime_pm_get_xxx/runtime_pm_put_xxx類接口給其他的drivers,對設(shè)備的開、關(guān)做引用計數(shù),當(dāng)引用計數(shù)從1->0時,會進一步調(diào)到power domain注冊的runtime_suspend回調(diào),回調(diào)函數(shù)里會先調(diào)用設(shè)備的runtime_suspend回調(diào),然后判斷power domain下的設(shè)備鏈表中所有的設(shè)備是否已經(jīng)suspend,若已經(jīng)suspend才真正關(guān)閉power domain。當(dāng)引用計數(shù)從0->1時,會先調(diào)用到power domain使用的runtime_resume回調(diào),回調(diào)函數(shù)里會先調(diào)用power domain的開啟操作,然后調(diào)用設(shè)備注冊的runtime_resume回調(diào)函數(shù);

系統(tǒng)休眠喚醒在suspend_noirq/resume_noirq時會進行power domain的關(guān)閉與開啟的操作;

使用power domain的上游驅(qū)動:power domain內(nèi)部ip的驅(qū)動。比如,dsp子系統(tǒng)power domain下面,有多個dsp核,每個dsp核對應(yīng)一個power domain。這樣,每個dsp核設(shè)備驅(qū)動都要關(guān)聯(lián)到對應(yīng)的dsp核power domain上,通過dsp核設(shè)備的dts里power-domains的屬性引用(power domain framework的節(jié)點引用及具體power domain的編號),將dsp核設(shè)備與相應(yīng)的power domain關(guān)聯(lián)起來;

使用power domain的框架:runtime pm/系統(tǒng)休眠喚醒;

power domain也提供了一些debug fs文件節(jié)點供用戶debug使用,主要就是/sys/kernel/debug/pm_genpd/目錄及power domain名字目錄下的一些文件節(jié)點:

pm_genpd_summary:打印所有的power domain、狀態(tài)及下面所掛的設(shè)備狀態(tài)

power_domain名字目錄/current_state:power domain當(dāng)前的狀態(tài)

power_domain名字目錄/sub_domains:power domain當(dāng)前的子power domain有哪些

power_domain名字目錄/idle_states:power domain對應(yīng)的所有idle狀態(tài)及其off狀態(tài)的時間

power_domain名字目錄/active_states:power domain處于on狀態(tài)的時間

power_domain名字目錄/total_idle_time:power domain所有idle狀態(tài)的off時間總和

power_domain名字目錄/devices:power domain下所掛的所有devices

相關(guān)數(shù)據(jù)結(jié)構(gòu):

481d12da-8dda-11ee-939d-92fbcf53809c.png

image.png

初始化流程(以scmi power domain的驅(qū)動框架為例):

482bbe16-8dda-11ee-939d-92fbcf53809c.png

image.png

2. 如何使用power domain

在dts中定義一個power domain節(jié)點,同時在驅(qū)動中注冊該power domain即可

//DTS中定義powerdomain節(jié)點,這里以內(nèi)核文檔提供的例程  
parent:power-controller@12340000{  
compatible="foo,power-controller";  
reg=<0x12340000?0x1000>;  
#power-domain-cells=<1>;//這里表明parent節(jié)點是一個powerdomain,也就是內(nèi)核文檔所形容的provider,parent管理它下面掛接著的其它模塊,為它們提供電源  
};  
  
child:power-controller@12341000{  
compatible="foo,power-controller";  
reg=<0x12341000?0x1000>;  
power-domains=<&parent?0>;//這里表明child節(jié)點是parent下面的一個模塊,它使用parent提供的電源  
#power-domain-cells=<1>;  
};

從上面的dts語法中可以看出,一個系統(tǒng)的電源域從dts中可以很容易就看出來,#power-domain-cells聲明該節(jié)點是一個power domain,power-domains = <&xxx x>表明該節(jié)點屬于xxx電源域,那么系統(tǒng)中某個電源域下面有多少個模塊就從dts中看有多少個節(jié)點引用了該電源域即可。

3. provider

intpm_genpd_init(structgeneric_pm_domain*genpd,  
structdev_power_governor*gov,boolis_off)//初始化一個generic_pm_domain實例  
  
//下面兩個接口都可以用來向內(nèi)核注冊一個powerdomian  
intof_genpd_add_provider_onecell(structdevice_node*np,  
structgenpd_onecell_data*data)  
intof_genpd_add_provider_simple(structdevice_node*np,  
structgeneric_pm_domain*genpd)

pm_genpd_init這個函數(shù)從注釋可以看出它初始化了一個power domain實例,從入口參數(shù)結(jié)合具體的實現(xiàn)代碼,可以很容易得到 structgeneric_pm_domain結(jié)構(gòu)體就對應(yīng)著一個power domain實例。

structgeneric_pm_domain{  
structdev_pm_domaindomain;/*PMdomainoperations*/  
constchar*name;  
atomic_tsd_count;/*Numberofsubdomainswithpower"on"*/  
enumgpd_statusstatus;/*Currentstateofthedomain*/  
unsignedintdevice_count;/*Numberofdevices*/  
unsignedintsuspended_count;/*Systemsuspenddevicecounter*/  
unsignedintprepared_count;/*Suspendcounterofprepareddevices*/  
int(*power_off)(structgeneric_pm_domain*domain);//驅(qū)動只要實現(xiàn)該函數(shù)即可  
int(*power_on)(structgeneric_pm_domain*domain);//驅(qū)動只要實現(xiàn)該函數(shù)即可

真正需要驅(qū)動去賦值的成員只有兩個,那就是int (*power_off)(struct generic_pm_domain *domain); 與int (*power_on)(struct generic_pm_domain *domain);,其它的power domain framework已經(jīng)幫我們做好了,這里我們也可以猜到一個電源域的打開與關(guān)閉最終是通過驅(qū)動注冊的這兩個函數(shù)操作的,

當(dāng)驅(qū)動得到一個power domain實例后,便可以調(diào)用of_genpd_add_provider_simple函數(shù)向內(nèi)核注冊一個power domain了,來進入該函數(shù)看看,做了哪些事情,看不太懂,但是從入口參數(shù)看,傳進去了驅(qū)動實現(xiàn)的struct generic_pm_domain和power domain的node節(jié)點。后續(xù)這兩個參數(shù)應(yīng)該會有作用。

4. Consumer

Cousumer可能是一個驅(qū)動程序或者sysfs,在驅(qū)動probe函數(shù)中調(diào)用dev_pm_domain_attach

ret=dev_pm_domain_attach(_dev,true);//將設(shè)備與電源域進行耦合

驅(qū)動在probe的時候會調(diào)用dev_pm_domain_attach函數(shù)檢查設(shè)備是否屬于power domain設(shè)備,如果是,則獲取設(shè)備的power domain信息,從哪里獲取信息?就是從前面power domain驅(qū)動調(diào)用of_genpd_add_provider_simple函數(shù)注冊進來的信息。

調(diào)用genpd_add_device函數(shù),將設(shè)備添加到該power domain中,主要完成一些struct generic_pm_domain成員的賦值操作。

最后最重要的就是調(diào)用dev_pm_domain_set該函數(shù),設(shè)置了struct device中的struct dev_pm_domain成員,該成員被賦值為struct generic_pm_domain中的struct dev_pm_domain成員。

后記

power domain在底層的處理通常需要PPU硬件的參與管理,可以控制這個電源域的時鐘、電壓、供電等屬性,從而達到對電源和功耗的管理。

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

    關(guān)注

    117

    文章

    6431

    瀏覽量

    146096
  • soc
    soc
    +關(guān)注

    關(guān)注

    38

    文章

    4386

    瀏覽量

    222662
  • Power
    +關(guān)注

    關(guān)注

    1

    文章

    502

    瀏覽量

    68623
  • PMIC
    +關(guān)注

    關(guān)注

    15

    文章

    412

    瀏覽量

    111404

原文標(biāo)題:參考:

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

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

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

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

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

    在SoC內(nèi),某些domain可以運行在較低的頻率和電壓下,而其他domain可以運行在較高的頻率和電壓下,某個domain所支持的對的集合被稱為Operating Performance Point,縮寫OPP。
    的頭像 發(fā)表于 11-16 16:49 ?2848次閱讀
    <b class='flag-5'>電源</b><b class='flag-5'>管理入門</b>-什么是OPP?怎么用?

    電源管理入門-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.4w次閱讀
    <b class='flag-5'>電源</b><b class='flag-5'>管理入門</b>-Regulator驅(qū)動是什么?Regulator的作用是什么?

    電源管理入門:Thermal熱管理

    管理指的是在電子設(shè)備或系統(tǒng)中通過各種方式控制其溫度來保證其正常工作或延長壽命的過程。其中包括散熱設(shè)計、溫度監(jiān)測、溫度控制等方面。熱管理的重要性越來越凸顯,尤其在高性能計算、人工智能等領(lǐng)域的應(yīng)用中更為重要。
    的頭像 發(fā)表于 11-29 10:09 ?6842次閱讀
    <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è)備不需要工作的時候可以進入到低功耗狀態(tài)
    的頭像 發(fā)表于 11-29 10:13 ?4413次閱讀
    <b class='flag-5'>電源</b><b class='flag-5'>管理入門</b>:驅(qū)動Runtime PM<b class='flag-5'>管理</b>

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

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

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

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

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

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

    UPF流程與電源Power Domain詳解

    UPF流程是怎樣的?怎樣使用UPF0對RTL進行動態(tài)/靜態(tài)功耗驗證?什么是電源Power Domain?如何對電源Power
    發(fā)表于 10-20 07:32

    電源管理芯片簡述

      電源管理芯片(Power Management Integrated Circuits),是在電子設(shè)備系統(tǒng)中擔(dān)負起對電能的變換、分配、檢測及其他電能管理的職責(zé)的芯片.主要負責(zé)識別C
    發(fā)表于 10-29 08:15

    PMU電池管理配置與io-domain電源域的相關(guān)資料推薦

    PMU電池管理配置與io-domain電源域1 電源域設(shè)置1.1 驅(qū)動文件與 DTS 節(jié)點:1.2 使用 IO-Domain 驅(qū)動好處:2
    發(fā)表于 01-03 07:24

    ARM GIC(七)gicv3架構(gòu)提供的power管理功能

    ,distributor,是另外一個power domain。因此就有如下一種情況,PE和cpu interface的電源給斷掉了,而gic的電源并沒有斷掉。此時gic給cpu int
    發(fā)表于 04-07 10:53

    電源管理產(chǎn)品

    電源管理產(chǎn)品(Power Management)
    發(fā)表于 12-01 17:13 ?601次閱讀

    PMU電池管理配置與io-domain電源

    PMU電池管理配置與io-domain電源域1 電源域設(shè)置1.1 驅(qū)動文件與 DTS 節(jié)點:1.2 使用 IO-Domain 驅(qū)動好處:2
    發(fā)表于 01-11 14:59 ?15次下載
    PMU電池<b class='flag-5'>管理</b>配置與io-<b class='flag-5'>domain</b><b class='flag-5'>電源</b>域

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

    在 Linux 系統(tǒng)中,進程是正在運行的程序的實例。理解進程的管理、查看和控制對于系統(tǒng)管理員和開發(fā)者來說非常重要
    的頭像 發(fā)表于 04-22 14:34 ?390次閱讀
    Linux系統(tǒng)進程<b class='flag-5'>管理入門</b>指南
    主站蜘蛛池模板: ⅹxxxx68日本老师hd | 手机看片自拍自拍自拍 | 国产三级在线看 | 无遮挡一级毛片 | 日日操夜夜操天天操 | 国产精品www视频免费看 | 青青久操视频 | 色偷偷av男人的天堂 | 日本免费不卡在线一区二区三区 | 双性人皇上被c到哭 | 日韩三级视频在线观看 | 免费网站黄 | www.色多多 | 视频一区二区中文字幕 | 激情综合五月天丁香婷婷 | 九九久久九九久久 | 在线观看免费xx高清视频 | 亚洲色图欧美视频 | 国产午夜人做人视频羞羞 | 性生大片一级毛片免费观看 | 狠狠狠狠狠操 | 免费h视频网站 | 欧美最猛性xxxx免费 | 91在线国内在线播放大神 | 在线免费视频观看 | 奇米色婷婷| 亚洲国产成人最新精品资源 | 色偷偷成人 | 亚洲光棍天堂 | 噜噜噜色噜噜噜久久 | 1024你懂的日韩| 日本一区二区精品88 | 222aaa免费| 老色皮 | 天堂网www中文在线资源 | 毛片网站免费在线观看 | 久久精品视频国产 | 亚洲第一成网站 | 亚洲欧美卡通 动漫 丝袜 | 老司机亚洲精品影院在线 | 日本不卡在线播放 |