[ATF]ARMv8 psci bootup target cpu api

本文軟件分析使用arm-trust-firmwire v1.3版本。基於公開的fvp platform分析流程
cpu on的api是提供給cpu bootup使用的,主要其他core將目標cpu bootup的api(hotplug 插核的動作),從atf執行完成後還是會返回到kernel。而目標cpu開始進行warm boot(hotplug on)的動作,具體參考章節ARMv8 cpu warm boot (hotplug on),smc cpu on的時候需要將target entrypoint傳給target cpu,從kernel來看應該是secondary_entry,而對應idle cpu的entry point是cpu_resume。

cpu boot:

static int cpu_psci_cpu_boot(unsigned int cpu)
{
    int err = psci_ops.cpu_on(cpu_logical_map(cpu), __pa(secondary_entry));
    if (err)
        pr_err("failed to boot CPU%d (%d)\n", cpu, err);

    return err;
}

cpu suspend

static int psci_suspend_finisher(unsigned long index)
{
    u32 *state = __this_cpu_read(psci_power_state);

    return psci_ops.cpu_suspend(state[index - 1],
                    virt_to_phys(cpu_resume));
}

cpu bootup api:

boot up target cpu

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