PSCI处理函数代码分析

处理函数根据funid来决定服务,可以看到psci_cpu_on_aarch64为0xc4000003,这正是设备树中填写的cpu_on属性的id,会委托psci_cpu_on来执行核上电任务。下面分析是重点:!!!
- >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 information for the non-secure world. */ - >cm_init_context_by_index() //重点:会通过cpu的编号找到 cpu上下文(cpu_context_t),存在cpu寄存器的值,异常返回的时候写写到对应的寄存器中,然后eret,旧返回到了el1!!! - >cm_setup_context() //设置cpu上下文 - > write_ctx_reg(state, ctx_scr_el3, scr_el3); //lib/el3_runtime/aarch64/context_mgmt.c write_ctx_reg(state, ctx_elr_el3, ep- >pc); //注:异常返回时执行此地址 于是完成了cpu的启动!!! write_ctx_reg(state, ctx_spsr_el3, ep- >spsr);psci_cpu_on主要完成开核的工作 ,然后会设置一些异常返回后寄存器的值(eg:从el1 -> el3 -> el1),重点关注 ep->pc写到cpu_context结构的ctx_elr_el3偏移处(从处理器启动后会从这个地址取指执行)。
实际上, 所有的从处理器启动后都会从bl31_warm_entrypoint开始执行 ,在plat_setup_psci_ops中会设置(每个平台都有自己的启动地址寄存器,通过写这个寄存器来获得上电后执行的指令地址)。
大致说一下:主处理器通过smc进入el3请求开核服务,atf中会响应这种请求, 通过平台的开核操作来启动从处理器并且设置从处理的一些寄存器eg:scr_el3、spsr_el3、elr_el3,然后主处理器,恢复现场,eret再次回到el1 ,
而处理器开核之后会从bl31_warm_entrypoint开始执行,最后通过el3_exit返回到el1的elr_el3设置的地址。
分析到这atf的分析到此为止,atf中主要是响应内核的snc的请求,然后做开核处理,也就是实际的开核动作,但是从处理器最后还是要回到内核中执行

湿化学清洗过程中晶片污染控制方法
飞鹿电压力锅(TL30-700B)原理分析
基于TMS320DM6446的数字电影放映系统设计
使用YY3568开发板部署AI能力
智慧城市的未来将如何落地?
PSCI处理函数代码分析
博威合金助力万物互联:“云、管、端”材料推动5G高质量发展
欧拉的奇异之旅·共赴开源时代
华阳通用携手BlackBerry开发智能座舱域控制器
NVIDIA Triton 系列文章(10):模型并发执行
详细解析2018年存储领域最具潜力的新兴技术
北斗2020年提供厘米级定位服务
乐视网退市至老三板后6个交易日都涨停 共涨33%
消费者对5G有哪些期望
苹果准备对智能家居发起新一轮攻击 三星Bixby增加支持4种新语言
珠海MES系统能够解决企业管理难题
串扰和反射影响信号的完整性
小米发布会时间 小米发布会有何亮点
关于服务器一些疑虑的解答
电信,移动,联通进行套餐规范宣布,向用户明示“限速”条款