處理函數(shù)根據(jù)funid來決定服務,可以看到PSCI_CPU_ON_AARCH64為0xc4000003,這正是設備樹中填寫的cpu_on屬性的id,會委托psci_cpu_on來執(zhí)行核上電任務。下面分析是重點:?。?!
- >psci_cpu_on() //lib/psci/psci_main.c
- >psci_validate_entry_point() //驗證入口地址有效性并 保存入口點到一個結(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 //實現(xiàn)核上電(平臺實現(xiàn))
/* Store the re-entry information for the non-secure world. */
- >cm_init_context_by_index() //重點:會通過cpu的編號找到 cpu上下文(cpu_context_t),存在cpu寄存器的值,異常返回的時候?qū)憣懙綄募拇嫫髦?,然后eret,舊返回到了el1?。?!
- >cm_setup_context() //設置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); //注:異常返回時執(zhí)行此地址 于是完成了cpu的啟動!??!
write_ctx_reg(state, CTX_SPSR_EL3, ep- >spsr);
psci_cpu_on主要完成開核的工作 ,然后會設置一些異常返回后寄存器的值(eg:從el1 -> el3 -> el1),重點關注 ep->pc寫到cpu_context結(jié)構(gòu)的CTX_ELR_EL3偏移處(從處理器啟動后會從這個地址取指執(zhí)行)。
實際上, 所有的從處理器啟動后都會從bl31_warm_entrypoint開始執(zhí)行 ,在plat_setup_psci_ops中會設置(每個平臺都有自己的啟動地址寄存器,通過寫這個寄存器來獲得上電后執(zhí)行的指令地址)。
大致說一下:主處理器通過smc進入el3請求開核服務,atf中會響應這種請求, 通過平臺的開核操作來啟動從處理器并且設置從處理的一些寄存器eg:scr_el3、spsr_el3、elr_el3,然后主處理器,恢復現(xiàn)場,eret再次回到el1 ,
而處理器開核之后會從bl31_warm_entrypoint開始執(zhí)行,最后通過el3_exit返回到el1的elr_el3設置的地址。
分析到這atf的分析到此為止,atf中主要是響應內(nèi)核的snc的請求,然后做開核處理,也就是實際的開核動作,但是從處理器最后還是要回到內(nèi)核中執(zhí)行
-
cpu
+關注
關注
68文章
11015瀏覽量
215400 -
SMP
+關注
關注
0文章
77瀏覽量
20124 -
函數(shù)
+關注
關注
3文章
4365瀏覽量
63940 -
設備樹
+關注
關注
0文章
39瀏覽量
3289
發(fā)布評論請先 登錄
ARM電源管理中的PSCI是什么意思呢
2160處理器支持VHE嗎?
用于MPLAB X IDE代碼性能分析插件的工作原理和代碼性能分析參考

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

用于MPLABX IDE的代碼性能分析插件
psci接口規(guī)范介紹
內(nèi)核中的psci驅(qū)動是什么

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

評論