.cpu_boot = cpu_psci_cpu_boot, #ifdef CONFIG_HOTPLUG_CPU .cpu_can_disable = cpu_psci_cpu_can_disable, .cpu_disable = cpu_psci_cpu_disable, .cpu_die = cpu_psci_cpu_die, .cpu_kill = cpu_psci_cpu_kill, #endif } 如启动cpu的接口为cpu_psci_cpu_boot,它会通过以下流程最终调用psci驱动...
->psci_cpu_on() //lib/psci/psci_main.c ->psci_validate_entry_point() //验证入口地址有效性并 保存入口点到一个结构ep中 ->psci_cpu_on_start(target_cpu, &ep) //ep入口地址 ->psci_plat_pm_ops->pwr_domain_on(target_cpu) ->qemu_pwr_domain_on //实现核上电(平台实现) /* Store the...
登录后复制->psci_cpu_on()//lib/psci/psci_main.c->psci_validate_entry_point()//验证入口地址有效性并 保存入口点到一个结构ep中->psci_cpu_on_start(target_cpu, &ep)//ep入口地址->psci_plat_pm_ops->pwr_domain_on(target_cpu)->qemu_pwr_domain_on//实现核上电(平台实现)/* Store the re...
当面临异常时,PSCI会根据function id执行相应的电源管理服务。启动流程中,从standby状态唤醒,经过一系列硬件操作,如唤醒hotplug线程,再到调用psci回调函数进入Bl31,最后通过pwr_domain_on完成CPU上电和内核的初始化。标准服务例程std_svc_smc_handler处理这些调用,确保启动过程的有序进行。小结:std_svc...
->psci_cpu_on()//lib/psci/psci_main.c->psci_validate_entry_point()//验证入口地址有效性并 保存入口点到一个结构ep中->psci_cpu_on_start(target_cpu, &ep)//ep入口地址->psci_plat_pm_ops->pwr_domain_on(target_cpu)->qemu_pwr_domain_on//实现核上电(平台实现)/* Store the re-entry in...
如secondary cpu启动或cpu hotplug时可调用cpu_on接口,为一个cpu执行上电操作。该接口的格式如下: (1)function_id:0xc400 0003 (2)输入参数:使用mpidr值表示的target cpu id cpu启动入口的物理地址 context id,该值用于表示本次调用上下文相关的信息
cpu_off = <0x84000002>; cpu_on = <0xC4000003>; }; psci节点的详细说明可以参考内核文档:Documentation/devicetree/bindings/arm/psci.txt 可以看到现在enable-method 属性已经是psci,说明使用的多核启动方式是psci, 下面还有psci节点,用于psci驱动使用,method用于说明调用psci功能使用什么指令,可选有两个smc和hv...
PSCI服务初始化,后续提供CPU功耗管理操作。 BL32镜像运行初始化,处于Secure EL1模式。 初始化非安全EL2或EL1,跳转到BL33执行。 负责安全非安全世界切换。 进行安全服务请求的分发。 2 BL1 BL1镜像的异常向量表初始化了两个:一个是入口bl1_entrypoint,EL1镜像正常执行流程;另一个是SMC调用接口,EL2执行结束会通...
{209.cpu_standby=qemu_cpu_standby,210.pwr_domain_on=qemu_pwr_domain_on,211.pwr_domain_off=qemu_pwr_domain_off,212.pwr_domain_suspend=qemu_pwr_domain_suspend,213.pwr_domain_on_finish=qemu_pwr_domain_on_finish,214.pwr_domain_suspend_finish=qemu_pwr_domain_suspend_finish,215.system_off=...
non_cpu_pd_node_t psci_non_cpu_pd_nodes[PSCI_NUM_NON_CPU_PWR_DOMAINS] #if USE_COHERENT_MEM __section("tzfw_coherent_mem") #endif ; /* Lock for PSCI state coordination */ DEFINE_PSCI_LOCK(psci_locks[PSCI_NUM_NON_CPU_PWR_DOMAINS]); cpu_pd_node_t psci_cpu_pd_nodes[...