本文软件分析使用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));
}