精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

電源管理入門:Power Domain管理

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

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

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

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

Domain這個詞一般在權限管理中經常遇到,用于隔離Domain內共進退

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

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

1. 框架介紹

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

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

對底層power domain硬件的操作

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

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

內部邏輯實現

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

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

為runtime pm、系統休眠喚醒等框架,注冊相應的回調函數,并實現具體的回調函數對應的power domain的開關函數;

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

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

系統休眠喚醒在suspend_noirq/resume_noirq時會進行power domain的關閉與開啟的操作;

使用power domain的上游驅動:power domain內部ip的驅動。比如,dsp子系統power domain下面,有多個dsp核,每個dsp核對應一個power domain。這樣,每個dsp核設備驅動都要關聯到對應的dsp核power domain上,通過dsp核設備的dts里power-domains的屬性引用(power domain framework的節點引用及具體power domain的編號),將dsp核設備與相應的power domain關聯起來;

使用power domain的框架:runtime pm/系統休眠喚醒;

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

pm_genpd_summary:打印所有的power domain、狀態及下面所掛的設備狀態

power_domain名字目錄/current_state:power domain當前的狀態

power_domain名字目錄/sub_domains:power domain當前的子power domain有哪些

power_domain名字目錄/idle_states:power domain對應的所有idle狀態及其off狀態的時間

power_domain名字目錄/active_states:power domain處于on狀態的時間

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

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

相關數據結構:

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

image.png

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

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

image.png

2. 如何使用power domain

在dts中定義一個power domain節點,同時在驅動中注冊該power domain即可

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

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

3. provider

intpm_genpd_init(structgeneric_pm_domain*genpd,  
structdev_power_governor*gov,boolis_off)//初始化一個generic_pm_domain實例  
  
//下面兩個接口都可以用來向內核注冊一個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這個函數從注釋可以看出它初始化了一個power domain實例,從入口參數結合具體的實現代碼,可以很容易得到 structgeneric_pm_domain結構體就對應著一個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);//驅動只要實現該函數即可  
int(*power_on)(structgeneric_pm_domain*domain);//驅動只要實現該函數即可

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

當驅動得到一個power domain實例后,便可以調用of_genpd_add_provider_simple函數向內核注冊一個power domain了,來進入該函數看看,做了哪些事情,看不太懂,但是從入口參數看,傳進去了驅動實現的struct generic_pm_domain和power domain的node節點。后續這兩個參數應該會有作用。

4. Consumer

Cousumer可能是一個驅動程序或者sysfs,在驅動probe函數中調用dev_pm_domain_attach

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

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

調用genpd_add_device函數,將設備添加到該power domain中,主要完成一些struct generic_pm_domain成員的賦值操作。

最后最重要的就是調用dev_pm_domain_set該函數,設置了struct device中的struct dev_pm_domain成員,該成員被賦值為struct generic_pm_domain中的struct dev_pm_domain成員。

后記

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

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

    關注

    115

    文章

    6154

    瀏覽量

    144227
  • soc
    soc
    +關注

    關注

    38

    文章

    4118

    瀏覽量

    217928
  • Power
    +關注

    關注

    1

    文章

    498

    瀏覽量

    67694
  • PMIC
    +關注

    關注

    15

    文章

    312

    瀏覽量

    109425

原文標題:參考:

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

收藏 人收藏

    評論

    相關推薦

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

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

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

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

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

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

    電源管理入門:Thermal熱管理

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

    電源管理入門:驅動Runtime PM管理

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

    電源管理入門Power supply子系統

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

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

    SCP直接控制SoC的電源和時鐘,而AP通過硬件和軟件接口協同管理
    的頭像 發表于 12-06 09:16 ?3045次閱讀
    <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間怎么應用。
    的頭像 發表于 12-06 09:27 ?1359次閱讀
    <b class='flag-5'>電源</b><b class='flag-5'>管理入門</b>:Hypervisor中的<b class='flag-5'>電源</b><b class='flag-5'>管理</b>

    PCB電源管理的優化設計

    電源管理功能。  利用可編程電源管理器件  萊迪思半導體(Lattice Semiconductor)的Power Manager II器
    發表于 08-28 11:58

    UPF流程與電源Power Domain詳解

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

    電源管理芯片簡述

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

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

    PMU電池管理配置與io-domain電源域1 電源域設置1.1 驅動文件與 DTS 節點:1.2 使用 IO-Domain 驅動好處:2
    發表于 01-03 07:24

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

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

    電源管理產品

    電源管理產品(Power Management)
    發表于 12-01 17:13 ?533次閱讀

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

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