日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

6-PSCI Power Domain Tree Structure

發(fā)布時間:2025/3/21 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 6-PSCI Power Domain Tree Structure 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

引流關(guān)鍵詞: 中斷、同步異常、異步異常、irq、fiq、BL1,BL2,BL3,BL31,BL32,BL33,AP_BL1,AP_BL2,AP_BL3,AP_BL31,AP_BL32,AP_BL33,SCP_BL1,SCP_BL2,BL0,BL30, optee、ATF、TF-A、Trustzone、optee3.14、MMU、VMSA、cache、TLB、arm、armv8、armv9、TEE、安全、內(nèi)存管理、頁表…

快速鏈接:
.
👉👉👉 個人博客筆記導讀目錄(全部) 👈👈👈


[專欄目錄]-ATF/FF-A/specification學習

6. PSCI 電源域樹結(jié)構(gòu)

6.1。要求

(1) 平臺必須導出plat_get_aff_count()和 plat_get_aff_state()API 以使通用 PSCI 代碼能夠填充描述系統(tǒng)中電源域?qū)哟谓Y(jié)構(gòu)的樹。這種方法不靈活,因為更改拓撲需要更改代碼。

平臺在數(shù)據(jù)結(jié)構(gòu)中描述其電源域樹會簡單得多。

(2) 通用 PSCI 代碼生成 MPIDR 以填充電源域樹。它還使用 MPIDR 在樹中查找節(jié)點。平臺將使用與通用 PSCI 代碼生成的完全相同的 MPIDR 的假設(shè)是不可擴展的。MPIDR 的使用還將電源域樹中的級別數(shù)限制為四個。

因此,需要將 MPIDR 的分配與用于填充電源域拓撲樹的機制分離。

(3) 電源域樹的當前排列需要對特定級別的兄弟節(jié)點進行二進制搜索,以找到指定的電源域節(jié)點。在功率管理操作期間,樹從“開始”到“結(jié)束”功率水平遍歷。需要二分查找來查找每個級別的節(jié)點。執(zhí)行這種遍歷的自然方法是從葉節(jié)點開始,跟隨父節(jié)點指針到達結(jié)束層。

因此,需要定義以促進這種遍歷的方式實現(xiàn)樹的數(shù)據(jù)結(jié)構(gòu)。

(4) 核心電源域的屬性不同于更高級別的電源域的屬性。例如,只能使用 MPIDR 識別核心電源域。在核心電源域上執(zhí)行電源管理操作時,不需要執(zhí)行狀態(tài)協(xié)調(diào)。

因此,需要以一種便于區(qū)分葉節(jié)點和非葉節(jié)點以及任何相關(guān)優(yōu)化的方式來實現(xiàn)樹。

6.2. 設(shè)計

6.2.1. 描述電源域樹

為了滿足要求 1.,現(xiàn)有的平臺 API plat_get_aff_count()和plat_get_aff_state()已被刪除。平臺必須定義一個無符號字符數(shù)組,以便:

(1) 數(shù)組中的第一個條目指定平臺中實現(xiàn)的最高功率級別的功率域數(shù)量。這適用于電源域樹沒有單個根節(jié)點的平臺,例如,FVP 在最高級別 (1) 有兩個集群電源域。

(2) 每個后續(xù)條目對應于一個電源域,并包含作為其直接子級的電源域的數(shù)量。

(3) 數(shù)組的大小減去第一個條目將等于非葉電源域的數(shù)量。

(4) 數(shù)組中每個條目中的值用于查找要在下一級考慮的條目數(shù)。一個級別的所有條目的值的總和(子項數(shù))指定下一個級別的數(shù)組中的條目數(shù)。

以下示例電源域拓撲樹將用于進一步描述上述文本。這棵樹中的葉節(jié)點和非葉節(jié)點已分別編號。

+-+|0|+-+/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \+-+ +-+|1| |2|+-+ +-+/ \ / \/ \ / \/ \ / \/ \ / \+-+ +-+ +-+ +-+|3| |4| |5| |6|+-+ +-+ +-+ +-++---+-----+ +----+----| +----+----+ +----+-----+-----+| | | | | | | | | | | | || | | | | | | | | | | | |v v v v v v v v v v v v v +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +--+ +--+ +--+ |0| |1| |2| |3| |4| |5| |6| |7| |8| |9| |10| |11| |12| +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +--+ +--+ +--+

該樹由平臺定義為上述數(shù)組,如下所示:

#define PLAT_NUM_POWER_DOMAINS 20 #define PLATFORM_CORE_COUNT 13 #define PSCI_NUM_NON_CPU_PWR_DOMAINS \(PLAT_NUM_POWER_DOMAINS - PLATFORM_CORE_COUNT)unsigned char plat_power_domain_tree_desc[] = { 1, 2, 2, 2, 3, 3, 3, 4};

6.2.2. 刪除有關(guān)平臺中使用的 MPIDR 的假設(shè)

為了滿足要求 2.,假設(shè)平臺在每個核心電源域0之間分配一個唯一編號(核心索引)。MPIDR 可以以任何方式分配,不會用于填充樹。PLAT_CORE_COUNT - 1

plat_core_pos_by_mpidr(mpidr)將返回與 MPIDR 對應的核心的核心索引。如果傳遞的 MPIDR 未分配或?qū)诓淮嬖诘暮诵?#xff0c;它將返回錯誤 (-1)。這個平臺 API 的語義已經(jīng)改變,因為它需要驗證傳遞的 MPIDR。因此,它已成為強制性 API。

添加了另一個強制性 APIplat_my_core_pos()以返回調(diào)用核心的核??心索引。該 API 提供了一種更輕量級的機制來獲取索引,因為不需要驗證調(diào)用核心的 MPIDR。

平臺應分配核心索引(如上圖所示),這樣,如果核心節(jié)點從左到右編號,則核心域的索引將與該核心返回的索引 plat_core_pos_by_mpidr()相同plat_my_core_pos()。這種關(guān)系允許核心節(jié)點被分配到一個單獨的數(shù)組中(要求 4.)psci_setup(),其順序是核心在數(shù)組中的索引與這些 API 的返回值相同。

6.2.2.1。處理 MPIDR 分配中的漏洞?

對于分配的 MPIDR 數(shù)量等于核心電源域數(shù)量的平臺,例如 Juno 和 FVP,將 MPIDR 轉(zhuǎn)換為核心索引的邏輯應保持不變。Juno 和 FVP 都使用簡單的防碰撞哈希函數(shù)來執(zhí)行此操作。

在某些平臺上,MPIDR 的分配可能不連續(xù)或某些內(nèi)核已被禁用。這實質(zhì)上意味著 MPIDR 已被稀疏分配,即平臺使用的 MPIDR 范圍的大小不等于核心電源域的數(shù)量。

平臺可以采用以下方法之一來處理這種情況:

(1) 實現(xiàn)更復雜的邏輯以將有效的 MPIDR 轉(zhuǎn)換為核心索引,同時保持前面描述的關(guān)系。這意味著電源域樹描述符不會描述任何被禁用或不存在的核心電源域。不會在樹中為這些域分配條目。

(2) 將未分配的 MPIDR 和禁用的核心視為不存在,但仍在電源域描述符中描述它們,即描述的核心節(jié)點數(shù)等于分配的 MPIDR 范圍的大小。這種方法將導致內(nèi)存浪費,因為條目將在樹中分配,但允許使用更簡單的邏輯將 MPIDR 轉(zhuǎn)換為核心索引。

6.2.3. 遍歷和區(qū)分核心和非核心電源域

為了滿足要求 3 和 4,已經(jīng)定義了單獨的數(shù)據(jù)結(jié)構(gòu)來表示樹中的葉和非葉功率域節(jié)點。

/******************************************************************************** The following two data structures implement the power domain tree. The tree* is used to track the state of all the nodes i.e. power domain instances* described by the platform. The tree consists of nodes that describe CPU power* domains i.e. leaf nodes and all other power domains which are parents of a* CPU power domain i.e. non-leaf nodes.******************************************************************************/ typedef struct non_cpu_pwr_domain_node {/** Index of the first CPU power domain node level 0 which has this node* as its parent.*/unsigned int cpu_start_idx;/** Number of CPU power domains which are siblings of the domain indexed* by 'cpu_start_idx' i.e. all the domains in the range 'cpu_start_idx* -> cpu_start_idx + ncpus' have this node as their parent.*/unsigned int ncpus;/* Index of the parent power domain node */unsigned int parent_node;----- } non_cpu_pd_node_t;typedef struct cpu_pwr_domain_node {u_register_t mpidr;/* Index of the parent power domain node */unsigned int parent_node;----- } cpu_pd_node_t;

功率域樹被實現(xiàn)為以下數(shù)據(jù)結(jié)構(gòu)的組合。

non_cpu_pd_node_t psci_non_cpu_pd_nodes[PSCI_NUM_NON_CPU_PWR_DOMAINS]; cpu_pd_node_t psci_cpu_pd_nodes[PLATFORM_CORE_COUNT];

6.2.4. 填充電源域樹

中的populate_power_domain_tree()函數(shù)psci_setup.c實現(xiàn)了解析平臺導出的電源域描述符以填充兩個數(shù)組的算法。它本質(zhì)上是廣度優(yōu)先搜索。從根開始的每一層的節(jié)點在 psci_non_cpu_pd_nodes和psci_cpu_pd_nodes數(shù)組中依次排列如下:

psci_non_cpu_pd_nodes -> [[Level 3 nodes][Level 2 nodes][Level 1 nodes]] psci_cpu_pd_nodes -> [Level 0 nodes]

對于上面所示的示例電源域樹,psci_cpu_pd_nodes 將按如下方式填充。每個條目中的值是父節(jié)點的索引。為簡單起見,其他字段已被忽略。

+-------------+ ^ CPU0 | 3 | |+-------------+ | CPU1 | 3 | |+-------------+ | CPU2 | 3 | |+-------------+ | CPU3 | 4 | |+-------------+ | CPU4 | 4 | |+-------------+ | CPU5 | 4 | | PLATFORM_CORE_COUNT+-------------+ | CPU6 | 5 | |+-------------+ | CPU7 | 5 | |+-------------+ | CPU8 | 5 | |+-------------+ | CPU9 | 6 | |+-------------+ | CPU10 | 6 | |+-------------+ | CPU11 | 6 | |+-------------+ | CPU12 | 6 | v+-------------+

該psci_non_cpu_pd_nodes數(shù)組將按如下方式填充。每個條目中的值是父節(jié)點的索引。

+-------------+ ^ PD0 | -1 | |+-------------+ | PD1 | 0 | |+-------------+ | PD2 | 0 | |+-------------+ | PD3 | 1 | | PLAT_NUM_POWER_DOMAINS -+-------------+ | PLATFORM_CORE_COUNT PD4 | 1 | |+-------------+ | PD5 | 2 | |+-------------+ | PD6 | 2 | |+-------------+ v

每個核心都可以使用該函數(shù)在psci_cpu_pd_nodes數(shù)組 中找到它的節(jié)點。plat_my_core_pos()當一個核心打開時,普通世界提供一個 MPIDR。該plat_core_pos_by_mpidr()函數(shù)用于在使用 MPIDR 查找對應的核心節(jié)點之前驗證 MPIDR。非核心功率域節(jié)點不需要被識別。

總結(jié)

以上是生活随笔為你收集整理的6-PSCI Power Domain Tree Structure的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。