[ATF]ARMv8 psci cpu suspend api

本文軟件分析使用arm-trust-firmwire v1.3版本。基於公開的fvp platform分析流程 。
PSCI smc的api主要有如下幾個。

        switch (smc_fid) {
        case PSCI_CPU_SUSPEND_AARCH64:
            return psci_cpu_suspend(x1, x2, x3);
        case PSCI_CPU_ON_AARCH64:
            return psci_cpu_on(x1, x2, x3);
        case PSCI_AFFINITY_INFO_AARCH64:
            return psci_affinity_info(x1, x2);
        case PSCI_MIG_AARCH64:
            return psci_migrate(x1);
        case PSCI_MIG_INFO_UP_CPU_AARCH64:
            return psci_migrate_info_up_cpu();
        case PSCI_NODE_HW_STATE_AARCH64:
            return psci_node_hw_state(x1, x2);
        case PSCI_SYSTEM_SUSPEND_AARCH64:
            return psci_system_suspend(x1, x2);
#if ENABLE_PSCI_STAT
        case PSCI_STAT_RESIDENCY_AARCH64:
            return psci_stat_residency(x1, x2);
        case PSCI_STAT_COUNT_AARCH64:
            return psci_stat_count(x1, x2);
#endif

cpu suspend api是其中非常重要的一個接口,cpu suspend主要分支有兩個:
fast wfi path with no power down
power down path

在power down path中有設計針對pending irq el1的問題,可以快速返回。
power down suspend path有預留power down no reset的path,猜測:給ARMv8.2超線程使用或者給特別的平臺使用
在軟件流程中,對ns world 帶下來的entry point保存非常關鍵。
回ns world 從軟件流程與TRM上,從寄存器elr_el3保存的地址返回。
psci cpu suspend

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章