[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

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