[RK3399][Android7.1] 系统重启调用过程(PSCI)

https://blog.csdn.net/kris_fei/article/details/81207133

Platform: RK3399 
OS: Android 7.1 
Kernel: v4.4.83

系统重启调用和rk3288基本类似,只是rk3399平台对应的arm_pm_restart不同了。

rk3288的可参考 
[RK3288][Android6.0] 系统重启调用过程小结

调用流程:

KEYWORD(powerctl, COMMAND, 1, do_powerctl) -> //keywords.h 根据传进来的字符串转换命令。 
 android_reboot -> //android_reboot.c 
  __reboot -> //reboot.h 系统调用,陷入内核。 
   SYSCALL_DEFINE4 -> //kernel/sys.c 
    kernel_restart -> 
     machine_restart -> //arch/arm64/kernel/process.c 
      arm_pm_restart 

arm_pm_restart使用PSCI模块处理。

PSCI: Power State Coordination Interface。 
ARMv7之后,由于架构复杂,传统的像rk3288平台上的reset机制已经无法满足reset/shutdown这类行为操作了。 
可以认为PSCI是一套系统通用电源管理API,另外还有一种方法叫”spin_table”.

PSCI在rk3399.dtsi中定义:

psci {
    compatible = "arm,psci-1.0";
    method = "smc";
};

对应driver在psci.c中:

psci_dt_init -> 
  of_find_matching_node_and_match
  init_fn -> 
    psci_0_2_init ->
        psci_probe ->
          psci_0_2_set_functions ->
            arm_pm_restart = psci_sys_reset

psci_sys_reset():

static void psci_sys_reset(enum reboot_mode reboot_mode, const char *cmd)
{
    invoke_psci_fn(PSCI_0_2_FN_SYSTEM_RESET, 0, 0, 0);
}

PSCI_0_2_FN_SYSTEM_RESET的定义:

#define PSCI_0_2_FN_SYSTEM_RESET        PSCI_0_2_FN(9)
#define PSCI_0_2_FN(n)              (PSCI_0_2_FN_BASE + (n))
#define PSCI_0_2_FN_BASE            0x84000000

代码的控制也是和PSCI文档是一致的。 


参考: 
Power_State_Coordination_Interface_PDD_v1_1_DEN0022D.pdf 
Linux CPU core的电源管理(3)_cpu ops
--------------------- 
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值