内核中的psci架构
内核psci软件架构包含psci驱动和每个cpu的cpu_ops回调函数实现两部分。
其中psci驱动实现了驱动初始化和psci相关接口实现功能,而cpu_ops回调函数最终也会调用psci驱动的接口。
psci驱动
首先我们看一下devicetree中的配置:
psci {
compatible = "arm,psci-0.2"; (1)
method = "smc"; (2)
}
(1)用于指定psci版本
(2)根据该psci由bl31处理还是hypervisor处理,可以指定其对应的陷入方式。若由bl31处理为smc,若由hypervisor处理则为hvc
驱动流程主要是与bl31通信,以确认其是否支持给定的psci版本,以及相关psci操作函数的实现,其流程如下:其主要工作即为psci设置相关的回调函数,该函数定义如下:
static void __init psci_0_2_set_functions(void)
{
…
psci_ops = (struct psci_operations){
.get_version = psci_0_2_get_version,
.cpu_suspend = psci_0_2_cpu_suspend,
.cpu_off = psci_0_2_cpu_off,
.cpu_on = psci_0_2_cpu_on,
.migrate = psci_0_2_migrate,
.affinity_info = psci_affinity_info,
.migrate_info_type = psci_migrate_info_type,
}; (1)
register_restart_handler(&psci_sys_reset_nb); (2)
pm_power_off = psci_sys_poweroff; (3)
}
(1)为psci_ops设置相应的回调函数
(2)为psci模块设置系统重启时的通知函数
(3)将系统的power_off函数指向相应的psci接口
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
内核
+关注
关注
3文章
1309浏览量
39850 -
cpu
+关注
关注
68文章
10446浏览量
206575 -
驱动
+关注
关注
11文章
1718浏览量
84352 -
SMP
+关注
关注
0文章
68浏览量
19450
发布评论请先 登录
相关推荐
ARM电源管理中的PSCI是什么意思呢
今天来看一个电源功耗相关的东西,PSCI(Power State Coordination Interface),翻译一下就是“电源状态协作接口”。从名字就能直观看出来,PSCI是一套电源管理
发表于 04-02 09:45
关于Linux内核中的设备驱动和设备管理
关于设备驱动和设备管理,四种内核成分设备类型:在所有unix系统中为了统一普通设备的操作所采用的分类模块:Linux内核中用于按需加载和卸载目标代码的机制
发表于 11-04 14:59
为什么无法使用内核5.15.32驱动LVDS面板?
使用 iMX8QM,我能够使用附件中的设备树配置驱动我的 LVDS 面板,而无需内核 5.4.70 中的 LVDS 到 HDMI 桥。我想使用具有相同设备树文件的
发表于 03-21 08:40
Android的Linux内核与驱动程序开发教程
Android内核是基于Linux 2.6内核的,它是一个增强内核版本,除了修改部分Bug外,它提供了用于支持Android平台的设备驱动,这里介绍了Android
发表于 09-05 14:24
•335次下载
psci电源管理接口可以用于什么场景
psci是arm提供的一套电源管理接口,当前一共包含0.1、0.2和1.0三个版本。它可被用于以下场景:(1)cpu的idle管理 (2)cpu hotplug以及secondary cpu启动
psci接口规范介绍
由于psci是由linux内核调用bl31中的安全服务,实现cpu电源管理功能的。因此其软件架构包含三个部分: (1)内核与bl31之间的调用接口规范 (2)内核中的架构 (3)bl3
内核中的psci架构cpu_ops接口
cpu_ops接口 驱动初始化完成后,cpu的cpu_ops就可以调用这些回调实现psci功能的调用。如下所示,当devicetree中cpu的enable-method设置为psci时,该cpu
bl31中的psci架构介绍
bl31中的psci架构 bl31为内核提供了一系列运行时服务,psci作为其标准运行时服务的一部分,通过宏DECLARE_RT_SVC注册到系统中。其相应的定义如下: DECLARE _RT_
SMP多核启动PSCI代码示例
1、std_svc_setup (主要关注设置psci操作集)--有服务 std_svc_setup //services/std_svc/std_svc_setup.c - >psci
PSCI处理函数代码分析
处理函数根据funid来决定服务,可以看到PSCI_CPU_ON_AARCH64为0xc4000003,这正是设备树中填写的cpu_on属性的id,会委托psci_cpu_on来执行核上电任务。下面
评论