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

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

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

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

bl31中的psci架構(gòu)介紹

麥辣雞腿堡 ? 來(lái)源:TrustZone ? 作者:Hcoco ? 2023-12-05 17:33 ? 次閱讀

bl31中的psci架構(gòu)

bl31為內(nèi)核提供了一系列運(yùn)行時(shí)服務(wù),psci作為其標(biāo)準(zhǔn)運(yùn)行時(shí)服務(wù)的一部分,通過(guò)宏DECLARE_RT_SVC注冊(cè)到系統(tǒng)中。其相應(yīng)的定義如下:

DECLARE_RT_SVC(
		std_svc,

		OEN_STD_START,
		OEN_STD_END,
		SMC_TYPE_FAST,
		std_svc_setup,
		std_svc_smc_handler
)

其中std_svc_setup會(huì)在bl31啟動(dòng)流程中被調(diào)用,以用于初始化該服務(wù)相關(guān)的配置。而std_svc_smc_handler為其smc異常處理函數(shù),當(dāng)內(nèi)核通過(guò)psci接口調(diào)用相關(guān)服務(wù)時(shí),最終將由該函數(shù)執(zhí)行實(shí)際的處理流程。
圖片

上圖為psci初始化相關(guān)的流程,它主要包含內(nèi)容:(1)前面我們已經(jīng)介紹過(guò)power domain相關(guān)的背景,即psci需要協(xié)調(diào)不同層級(jí)的power domain狀態(tài),因此其必須要了解系統(tǒng)的power domain配置情況。以上流程中紅色虛線框的部分主要就是用于初始化系統(tǒng)的power domain拓?fù)浼捌錉顟B(tài)

(2)由于psci在執(zhí)行電源相關(guān)接口時(shí),最終需要操作實(shí)際的硬件。而它們是與架構(gòu)相關(guān)的,因此其操作函數(shù)最終需要注冊(cè)到平臺(tái)相關(guān)的回調(diào)中。plat_setup_psci_ops即用于注冊(cè)特定平臺(tái)的psci_ops回調(diào),其格式如下:

typedef struct plat_psci_ops {
	void (*cpu_standby)(plat_local_state_t cpu_state);
	int (*pwr_domain_on)(u_register_t mpidr);
	void (*pwr_domain_off)(const psci_power_state_t *target_state);
	void (*pwr_domain_suspend_pwrdown_early)(
				const psci_power_state_t *target_state);
	void (*pwr_domain_suspend)(const psci_power_state_t *target_state);
	void (*pwr_domain_on_finish)(const psci_power_state_t *target_state);
	void (*pwr_domain_on_finish_late)(
				const psci_power_state_t *target_state);
	void (*pwr_domain_suspend_finish)(
				const psci_power_state_t *target_state);
	void __dead2 (*pwr_domain_pwr_down_wfi)(
				const psci_power_state_t *target_state);
	void __dead2 (*system_off)(void);
	void __dead2 (*system_reset)(void);
	int (*validate_power_state)(unsigned int power_state,
				    psci_power_state_t *req_state);
	int (*validate_ns_entrypoint)(uintptr_t ns_entrypoint);
	void (*get_sys_suspend_power_state)(
				    psci_power_state_t *req_state);
	int (*get_pwr_lvl_state_idx)(plat_local_state_t pwr_domain_state,
				    int pwrlvl);
	int (*translate_power_state_by_mpidr)(u_register_t mpidr,
				    unsigned int power_state,
				    psci_power_state_t *output_state);
	int (*get_node_hw_state)(u_register_t mpidr, unsigned int power_level);
	int (*mem_protect_chk)(uintptr_t base, u_register_t length);
	int (*read_mem_protect)(int *val);
	int (*write_mem_protect)(int val);
	int (*system_reset2)(int is_vendor,
				int reset_type, u_register_t cookie);
}

最后我們?cè)倏匆幌聀sci操作相應(yīng)的異常處理流程:

圖片
即其會(huì)根據(jù)function id的值,分別執(zhí)行相應(yīng)的電源管理服務(wù),如啟動(dòng)cpu時(shí)會(huì)調(diào)用psci_cpu_on函數(shù),重啟系統(tǒng)時(shí)會(huì)調(diào)用psci_system_rest函數(shù)等。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(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)投訴
  • 內(nèi)核
    +關(guān)注

    關(guān)注

    3

    文章

    1363

    瀏覽量

    40228
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10826

    瀏覽量

    211160
  • SMP
    SMP
    +關(guān)注

    關(guān)注

    0

    文章

    72

    瀏覽量

    19632
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    可編程CPU重置地址,單CPU冷啟動(dòng)配置

    如果將BL31用作TF-A入口點(diǎn)而不是BL1,則上圖仍然相關(guān),因?yàn)樵谶@種情況下,所有這些操作都將發(fā)生在BL31。有關(guān)詳細(xì)信息,請(qǐng)參閱第6節(jié)“使用B
    發(fā)表于 12-02 11:00 ?1027次閱讀
    可編程CPU重置地址,單CPU冷啟動(dòng)配置

    基于armv8架構(gòu)對(duì)u-boot進(jìn)行啟動(dòng)流程分析(一)

    Linux kernel;啟動(dòng)BL1,BL2,BL31,BL32則是一個(gè)完整的ATF信任鏈建立流程(ARM Trusted Firmware),像常見的
    發(fā)表于 05-23 15:59

    如何讓BL31的調(diào)試信息輸出到S32R45的uart?

    我用“DEBUG=1”構(gòu)建 ATF 映像,uart 可以顯示 BL2 的調(diào)試信息,但沒有顯示 BL31 的調(diào)試信息。 為什么?BL2到BL31,是不是又設(shè)置了控制臺(tái)?如何讓
    發(fā)表于 04-11 08:20

    BL31未在Kirkstone上加載的原因?

    imx8mm_evk.h 和 imx8mm_evk.c 的設(shè)置時(shí),SPL 打印 do uart3,但它應(yīng)該顯示:注意:BL31:v2.6(發(fā)布
    發(fā)表于 04-19 11:00

    ATFbl2的啟動(dòng)

    bl2_entrypoint函數(shù)最終會(huì)觸發(fā)安全監(jiān)控模式調(diào)用(smc) ,通知bl1將CPU的控制權(quán)限轉(zhuǎn)交給bl31,然后執(zhí)行bl31。 該函數(shù)會(huì)執(zhí)行 ? 平臺(tái)相關(guān)的初始化、 ? 獲取
    的頭像 發(fā)表于 11-07 15:59 ?758次閱讀
    ATF<b class='flag-5'>中</b><b class='flag-5'>bl</b>2的啟動(dòng)

    ATF如何用函數(shù)完成bl2的啟動(dòng)

    bl31加載到內(nèi)存后會(huì)觸發(fā)安全監(jiān)控模式調(diào)用(smc)將CPU權(quán)限轉(zhuǎn)交給bl31。 該函數(shù)的主要內(nèi)容和相關(guān)注釋如下: ** void bl2_main ( void
    的頭像 發(fā)表于 11-07 16:04 ?657次閱讀

    ATFbl2到bl31的跳轉(zhuǎn)介紹

    bl2到bl31的跳轉(zhuǎn) 在bl2_main函數(shù)中最終會(huì)調(diào)用smc(BL1_SMC_RUN_IMAGE,(unsigned long)next_bl
    的頭像 發(fā)表于 11-07 16:09 ?881次閱讀

    ATFbl31的啟動(dòng)

    bl2觸發(fā)安全監(jiān)控模式調(diào)用后會(huì)跳轉(zhuǎn)到bl31執(zhí)行,bl31最主要的作用是 建立EL3運(yùn)行態(tài)的軟件配置 , 在該階段會(huì)完成各種類型的安全
    的頭像 發(fā)表于 11-07 16:13 ?1099次閱讀
    ATF<b class='flag-5'>中</b><b class='flag-5'>bl31</b>的啟動(dòng)

    ATFbl31函數(shù)介紹與使用

    runtime_svc_init函數(shù) 該函數(shù)主要用來(lái)建立安全監(jiān)控模式調(diào)用處理函數(shù)的索引表,并執(zhí)行EL3提供的服務(wù)項(xiàng)的初始化操作,獲取TEE OS的入口地址并賦值給bl32_init變量,以備啟動(dòng)
    的頭像 發(fā)表于 11-07 16:23 ?602次閱讀

    Bl31斷處理流程概述

    aarch64架構(gòu),在每個(gè)異常等級(jí)下都包含了四張異常等級(jí)表。 bl31的異常向量表定義在runtime_exceptions.S,其與下圖的定義一致
    的頭像 發(fā)表于 11-07 17:43 ?595次閱讀
    <b class='flag-5'>Bl31</b><b class='flag-5'>中</b>斷處理流程概述

    psci接口規(guī)范介紹

    由于psci是由linux內(nèi)核調(diào)用bl31的安全服務(wù),實(shí)現(xiàn)cpu電源管理功能的。因此其軟件架構(gòu)包含三個(gè)部分: (1)內(nèi)核與bl31之間的調(diào)
    的頭像 發(fā)表于 12-05 16:53 ?862次閱讀

    內(nèi)核psci驅(qū)動(dòng)是什么

    "; ( 2 ) } (1)用于指定psci版本 (2)根據(jù)該pscibl31處理還是hypervisor處理,可以指定其對(duì)應(yīng)的陷入方式。若由bl31處理為smc,若由hypervi
    的頭像 發(fā)表于 12-05 16:58 ?662次閱讀
    內(nèi)核<b class='flag-5'>中</b>的<b class='flag-5'>psci</b>驅(qū)動(dòng)是什么

    內(nèi)核psci架構(gòu)cpu_ops接口

    cpu_ops接口 驅(qū)動(dòng)初始化完成后,cpu的cpu_ops就可以調(diào)用這些回調(diào)實(shí)現(xiàn)psci功能的調(diào)用。如下所示,當(dāng)devicetreecpu的enable-method設(shè)置為psci時(shí),該cpu
    的頭像 發(fā)表于 12-05 17:25 ?634次閱讀

    PSCI處理函數(shù)代碼分析

    處理函數(shù)根據(jù)funid來(lái)決定服務(wù),可以看到PSCI_CPU_ON_AARCH64為0xc4000003,這正是設(shè)備樹填寫的cpu_on屬性的id,會(huì)委托psci_cpu_on來(lái)執(zhí)行核上電任務(wù)。下面
    的頭像 發(fā)表于 12-05 18:08 ?875次閱讀

    armv8 u-boot的啟動(dòng)介紹

    先看arm官網(wǎng)提供的一張圖: 上圖詳細(xì)概括了arm官方推薦的armv8的啟動(dòng)層次結(jié)構(gòu): 官方將啟動(dòng)分為了BL1,BL2,BL31,BL32,BL
    的頭像 發(fā)表于 12-07 11:09 ?1928次閱讀
    armv8 u-boot的啟動(dòng)<b class='flag-5'>介紹</b>