處理函數(shù)根據(jù)funid來(lái)決定服務(wù),可以看到PSCI_CPU_ON_AARCH64為0xc4000003,這正是設(shè)備樹(shù)中填寫(xiě)的cpu_on屬性的id,會(huì)委托psci_cpu_on來(lái)執(zhí)行核上電任務(wù)。下面分析是重點(diǎn):!!!
- >psci_cpu_on() //lib/psci/psci_main.c
- >psci_validate_entry_point() //驗(yàn)證入口地址有效性并 保存入口點(diǎn)到一個(gè)結(jié)構(gòu)ep中
- >psci_cpu_on_start(target_cpu, &ep) //ep入口地址
- >psci_plat_pm_ops- >pwr_domain_on(target_cpu)
- >qemu_pwr_domain_on //實(shí)現(xiàn)核上電(平臺(tái)實(shí)現(xiàn))
/* Store the re-entry information for the non-secure world. */
- >cm_init_context_by_index() //重點(diǎn):會(huì)通過(guò)cpu的編號(hào)找到 cpu上下文(cpu_context_t),存在cpu寄存器的值,異常返回的時(shí)候?qū)憣?xiě)到對(duì)應(yīng)的寄存器中,然后eret,舊返回到了el1!!!
- >cm_setup_context() //設(shè)置cpu上下文
- > write_ctx_reg(state, CTX_SCR_EL3, scr_el3); //lib/el3_runtime/aarch64/context_mgmt.c
write_ctx_reg(state, CTX_ELR_EL3, ep- >pc); //注:異常返回時(shí)執(zhí)行此地址 于是完成了cpu的啟動(dòng)!!!
write_ctx_reg(state, CTX_SPSR_EL3, ep- >spsr);
psci_cpu_on主要完成開(kāi)核的工作 ,然后會(huì)設(shè)置一些異常返回后寄存器的值(eg:從el1 -> el3 -> el1),重點(diǎn)關(guān)注 ep->pc寫(xiě)到cpu_context結(jié)構(gòu)的CTX_ELR_EL3偏移處(從處理器啟動(dòng)后會(huì)從這個(gè)地址取指執(zhí)行)。
實(shí)際上, 所有的從處理器啟動(dòng)后都會(huì)從bl31_warm_entrypoint開(kāi)始執(zhí)行 ,在plat_setup_psci_ops中會(huì)設(shè)置(每個(gè)平臺(tái)都有自己的啟動(dòng)地址寄存器,通過(guò)寫(xiě)這個(gè)寄存器來(lái)獲得上電后執(zhí)行的指令地址)。
大致說(shuō)一下:主處理器通過(guò)smc進(jìn)入el3請(qǐng)求開(kāi)核服務(wù),atf中會(huì)響應(yīng)這種請(qǐng)求, 通過(guò)平臺(tái)的開(kāi)核操作來(lái)啟動(dòng)從處理器并且設(shè)置從處理的一些寄存器eg:scr_el3、spsr_el3、elr_el3,然后主處理器,恢復(fù)現(xiàn)場(chǎng),eret再次回到el1 ,
而處理器開(kāi)核之后會(huì)從bl31_warm_entrypoint開(kāi)始執(zhí)行,最后通過(guò)el3_exit返回到el1的elr_el3設(shè)置的地址。
分析到這atf的分析到此為止,atf中主要是響應(yīng)內(nèi)核的snc的請(qǐng)求,然后做開(kāi)核處理,也就是實(shí)際的開(kāi)核動(dòng)作,但是從處理器最后還是要回到內(nèi)核中執(zhí)行
-
cpu
+關(guān)注
關(guān)注
68文章
11029瀏覽量
215867 -
SMP
+關(guān)注
關(guān)注
0文章
77瀏覽量
20152 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4367瀏覽量
64107 -
設(shè)備樹(shù)
+關(guān)注
關(guān)注
0文章
39瀏覽量
3299
發(fā)布評(píng)論請(qǐng)先 登錄
ARM電源管理中的PSCI是什么意思呢
2160處理器支持VHE嗎?
華清遠(yuǎn)見(jiàn)FPGA代碼-使用函數(shù)實(shí)現(xiàn)簡(jiǎn)單的八位處理器
用于MPLAB X IDE代碼性能分析插件的工作原理和代碼性能分析參考

MATLAB圖像處理工具箱的函數(shù)介紹和圖像處理與分析的技術(shù)實(shí)現(xiàn)分析

用于MPLABX IDE的代碼性能分析插件
使用Arduino函數(shù)簡(jiǎn)化代碼

psci接口規(guī)范介紹
內(nèi)核中的psci驅(qū)動(dòng)是什么

內(nèi)核中的psci架構(gòu)cpu_ops接口
bl31中的psci架構(gòu)介紹

評(píng)論