內(nèi)核中的psci架構(gòu)
內(nèi)核psci軟件架構(gòu)包含psci驅(qū)動(dòng)和每個(gè)cpu的cpu_ops回調(diào)函數(shù)實(shí)現(xiàn)兩部分。
其中psci驅(qū)動(dòng)實(shí)現(xiàn)了驅(qū)動(dòng)初始化和psci相關(guān)接口實(shí)現(xiàn)功能,而cpu_ops回調(diào)函數(shù)最終也會(huì)調(diào)用psci驅(qū)動(dòng)的接口。
psci驅(qū)動(dòng)
首先我們看一下devicetree中的配置:
psci {
compatible = "arm,psci-0.2"; (1)
method = "smc"; (2)
}
(1)用于指定psci版本
(2)根據(jù)該psci由bl31處理還是hypervisor處理,可以指定其對(duì)應(yīng)的陷入方式。若由bl31處理為smc,若由hypervisor處理則為hvc
驅(qū)動(dòng)流程主要是與bl31通信,以確認(rèn)其是否支持給定的psci版本,以及相關(guān)psci操作函數(shù)的實(shí)現(xiàn),其流程如下:其主要工作即為psci設(shè)置相關(guān)的回調(diào)函數(shù),該函數(shù)定義如下:
static void __init psci_0_2_set_functions(void)
{
…
psci_ops = (struct psci_operations){
.get_version = psci_0_2_get_version,
.cpu_suspend = psci_0_2_cpu_suspend,
.cpu_off = psci_0_2_cpu_off,
.cpu_on = psci_0_2_cpu_on,
.migrate = psci_0_2_migrate,
.affinity_info = psci_affinity_info,
.migrate_info_type = psci_migrate_info_type,
}; (1)
register_restart_handler(&psci_sys_reset_nb); (2)
pm_power_off = psci_sys_poweroff; (3)
}
(1)為psci_ops設(shè)置相應(yīng)的回調(diào)函數(shù)
(2)為psci模塊設(shè)置系統(tǒng)重啟時(shí)的通知函數(shù)
(3)將系統(tǒng)的power_off函數(shù)指向相應(yīng)的psci接口
-
內(nèi)核
+關(guān)注
關(guān)注
3文章
1336瀏覽量
40083 -
cpu
+關(guān)注
關(guān)注
68文章
10698瀏覽量
209330 -
驅(qū)動(dòng)
+關(guān)注
關(guān)注
12文章
1788瀏覽量
84896 -
SMP
+關(guān)注
關(guān)注
0文章
70瀏覽量
19554
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論