[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

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