Rockchip RK3588 kernel dts解析之系统休眠配置rockchip_suspend
Rockchip RK3588 kernel dts解析之系统休眠配置rockchip_suspend
文章目录
- Rockchip RK3588 kernel dts解析之系统休眠配置rockchip_suspend
- DTS 节点
- 休眠的配置说明
- 唤醒配置
- 打印信息
- logic电源休眠不关的配置方法
- 休眠后GPIO不断电的配置
- 配置GPIO0外的其他GPIO作为唤醒源
带有 trust 的 SoC 平台,系统待机(system suspend)的工作都在 trust 中完成。因为各个平台的 trust 对于系统待机实现各不相同,所以 不同平台之间的待机配置选项/方法没有任何关联性和参考性,本文档仅适用于 RK3588 平台
系统待机流程一般会有如下操作:关闭 power domain、模块 IP、时钟、PLL、ddr 进入自刷新、系统总线切到低速时钟(24M 或 32K)、vdd_arm /vdd_log断电、配置唤醒源等。为了满足不同产品对待机模式的需求,目前都是通过 DTS 节点把相关配置在开机阶段传递给 trust。
DTS 节点
arch/arm64/boot/dts/rockchip/rk3588s.dtsi
rockchip_suspend: rockchip-suspend {compatible = "rockchip,pm-rk3588";status = "disabled";// 休眠log开关配置,0:关闭打印, 1:打开打印rockchip,sleep-debug-en = <0>;// 休眠配置rockchip,sleep-mode-config = <(0| RKPM_SLP_ARMOFF_LOGOFF| RKPM_SLP_PMU_PMUALIVE_32K| RKPM_SLP_PMU_DIS_OSC| RKPM_SLP_32K_EXT)>;// 唤醒源配置rockchip,wakeup-config = <(0| RKPM_GPIO_WKUP_EN)>;
};
rockchip_suspend节点EVB参考板子是在arch/arm64/boot/dts/rockchip/rk3588-evb.dtsi
中打开
&rockchip_suspend {status = "okay";// 休眠log开关配置,0:关闭打印, 1:打开打印rockchip,sleep-debug-en = <1>;
};
休眠的配置说明
配置项:
rockchip,wakeup-config = <...>;
目前已支持的配置选项都定义在:
./include/dt-bindings/suspend/rockchip-rk3588.h
// 断电vdd_arm,需要硬件电路设计上能支持
#define RKPM_SLP_ARMOFF BIT(1)
// 断电vdd_arm,且DDR控制器断电,需要硬件电路设计上能支持
#define RKPM_SLP_ARMOFF_DDRPD BIT(2)
// 断电vdd_arm和vdd_log,需要硬件电路设计上能支持
#define RKPM_SLP_ARMOFF_LOGOFF BIT(3)
// 断电vdd_arm和vdd_log,且PMU1电源域断电,需要硬件电路设计上能支持
#define RKPM_SLP_ARMOFF_PMUOFF BIT(4)// 休眠时使用32K时钟源作为系统时钟
#define RKPM_SLP_PMU_PMUALIVE_32K BIT(9)
// 关闭24M晶振,最低功耗模式时可使能,需要配合RKPM_SLP_PMU_PMUALIVE_32K使用
#define RKPM_SLP_PMU_DIS_OSC BIT(10)
// 休眠时的32K时钟源是否选用外部的32K钟源,不配该选项则默认选用内部32K时钟源,需要配合RKPM_SLP_PMU_PMUALIVE_32K使用
#define RKPM_SLP_32K_EXT BIT(24)
注意事项:
- 需要根据具体产品对唤醒源的需求进行相关配置,比如usb唤醒,那休眠时就不能将usb的电源和时钟关闭,所以不能配置RKPM_SLP_ARMOFF_LOGOFF、RKPM_SLP_PMU_DIS_OSC、RKPM_SLP_PMU_PMUALIVE_32K等选项。
唤醒配置
配置项:
rockchip,wakeup-config = <...>;
配置源:
// 支持所有的中断唤醒(经过GIC管理的休眠可唤醒中断),一般由cpu0运行休眠流程,需要时只配RKPM_CPU0_WKUP_EN即可
#define RKPM_CPU0_WKUP_EN BIT(0)
#define RKPM_CPU1_WKUP_EN BIT(1)
#define RKPM_CPU2_WKUP_EN BIT(2)
#define RKPM_CPU3_WKUP_EN BIT(3)
#define RKPM_CPU4_WKUP_EN BIT(4)
#define RKPM_CPU5_WKUP_EN BIT(5)
#define RKPM_CPU6_WKUP_EN BIT(6)
#define RKPM_CPU7_WKUP_EN BIT(7)
// GPIO0唤醒
#define RKPM_GPIO_WKUP_EN BIT(8)
// SDMMC唤醒
#define RKPM_SDMMC_WKUP_EN BIT(9)
// SDIO唤醒
#define RKPM_SDIO_WKUP_EN BIT(10)
// USB DEV 唤醒
#define RKPM_USB_WKUP_EN BIT(11)
// UART0唤醒
#define RKPM_UART0_WKUP_EN BIT(12)
// VAD唤醒
#define RKPM_VAD_WKUP_EN BIT(13)
// RK TIMER 唤醒
#define RKPM_TIMER_WKUP_EN BIT(14)
// 支持所有的中断唤醒(不经过GIC管理),不推荐使用
#define RKPM_SYSINT_WKUP_EN BIT(15)
// PMU内部timer唤醒(默认1s),用于测试和debug
#define RKPM_TIME_OUT_WKUP_EN BIT(16)
唤醒源注意事项:
RKPM_GPIO_WKUP_EN(首选):
GPIO0~4 中仅支持 GPIO0 这组 pin 脚作为唤醒源,该模式下 GPIO0 上的 pin 脚中断信号被直接送往 PMU 状态机,不经过 GIC。在硬件设计上,建议用户把需要的唤醒源尽量都放到 GPIO0 这组 pin 脚上。
RKPM_CPU0_WKUP_EN(次选):
支持所有在 kernel 阶段用 enable_irq_wake()注册到 GIC 的可唤醒中断,适用的唤醒中断源数量比 RKPM_GPIO_WKUP_EN更多。但这种方式相当于把唤醒源的管理权分散交给了 kernel 各个模块,待机时系统有可能被不期望的中断唤醒。
RKPM_TIMEOUT_WAKEUP_EN:
PMU 内部的 timer 唤醒,默认 1s 超时产生中断,一般仅用于开发阶段测试休眠唤醒使用。
打印信息
如下简要介绍系统待机和唤醒时的 trust 打印信息含义。为注释方便,如下对一些打印内容进行分行,不同的待机功耗模式同样也会带来不同的打印,所有打印信息内容以实际显示为主。
配置项:
rockchip,sleep-debug-en = <...>;
- 0:休眠时不会打印log, 1:休眠时会打印log。
RK3588 系统待机打印:
//休眠所用trust bl31版本及commit信息
INFO: BL31: v2.3():v2.3-264-g378cb8595:derrick.huang//休眠模式配置及休眠次数打印
INFO: enter: cfg=0x5000604, sleeptimes:1//休眠模式打印
INFO: armoff_ddrpd
INFO: pmu_pmualive_32k
INFO: pmu_dis_osc
INFO: 32k ext
INFO: pmu debug//休眠gpio中断配置状态打印
INFO: GPIO0_INTEN: 0xffff 0xffff 0xff7f 0xefff 0x0 0xc81e142d
INFO: GPIO1_INTEN: 0xffff 0xffff 0xffff 0xffff 0x0 0xe82863
INFO: GPIO2_INTEN: 0xffff 0xffff 0xffff 0xffff 0x0 0xffefcef7
INFO: GPIO3_INTEN: 0xffff 0xffff 0xeffe 0xffff 0x0 0xf0044483
INFO: GPIO4_INTEN: 0xffff 0xffff 0xffff 0xffff 0x0 0xe0dc2003//休眠关键寄存器信息打印
INFO: PMU1_PWR_CON(0x1) PMU1_CRU_PWR_CON(0x23) PMU1_WAKEUP_INT_CON(0x100)
PMU2_BUS_IDLE_ST(0x27fffff 0x0) PMU2_BUS_IDLE_ACK(0x27fffff 0x0) PMU2_PWR_GATE_ST(0x67ffffff 0x0)
PMU2_BUS_IDLE_CON(0x0 0xfd80 0xf007) PMU2_BIU_AUTO_CON(0xffff 0xffff 0x7)
PMU2_PWR_GATE_CON(0x0 0x9000 0x3)
PMU2_VOL_GATE_CON(0x7 0x0 0x3)
PMU2_QCHANNEL_PWR_CON(0x0) PMU2_QCHANNEL_STATUS(0xfe0007f)
PMU1_DDR_PWR_CON(0x747 0x747 0x747 0x747)
PMU1_DDR_PWR_SFTCON(0x900 0x900 0x900 0x900)
PMU1_PLLPD_CON(0xffff 0x3)
PMU2_DSU_PWR_CON(0x3)
PMU2_CORE_PWR_CON0(0x1 0x1)
PMU2_CORE_AUTO_PWR_CON0(0x0 0x0)
PMU2_CLUSTER_IDLE_CON(0x75)
INFO: PMU0_PWR_CON(0x0) PMU0_WAKEUP_INT_CON(0x0)
PMU0_DDR_RET_CON(0x0 0x0)
PMU1_GRF_SOC_CON2(0x7777) PMU0_GRF_OS_REGS9(0xd8394dc7)
RK3588 系统唤醒打印:
// 唤醒流程步骤打印
012376543edcba2// 唤醒源
INFO: gpio0_a7
INFO: wake up status: 0x100
INFO: the wake up information:
INFO: GPIO0 interrupt wakeup
INFO: GPIO0: 0x80
logic电源休眠不关的配置方法
- 确认logic是有哪个电源域控制,可以通过硬件原理图查看,RK3588的单pmic的默认设计对应的软件配置如下:
vdd_log_s0: DCDC_REG3 {regulator-always-on;regulator-boot-on;regulator-min-microvolt = <675000>;regulator-max-microvolt = <750000>;regulator-ramp-delay = <12500>;regulator-name = "vdd_log_s0";regulator-state-mem {regulator-off-in-suspend; //这里表示休眠的时候这路电源要关闭,如果休眠要打开可以改为regulator-on-in-suspendregulator-suspend-microvolt = <750000>;};};
改为
vdd_log_s0: DCDC_REG3 {regulator-always-on;regulator-boot-on;regulator-min-microvolt = <675000>;regulator-max-microvolt = <750000>;regulator-ramp-delay = <12500>;regulator-name = "vdd_log_s0";regulator-state-mem {regulator-on-in-suspend; //这里表示休眠的时候这路电源要关闭,如果休眠要打开可以改为regulator-on-in-suspendregulator-suspend-microvolt = <750000>; //休眠后的电压};};
- 修改rockchip_suspend节点中的rockchip,wakeup-config的配置
&rockchip_suspend {status = "okay";// 休眠log开关配置,0:关闭打印, 1:打开打印rockchip,sleep-debug-en = <1>;rockchip,sleep-mode-config = <(0| RKPM_SLP_ARMOFF_DDRPD //改为这个配置表示logic不断电| RKPM_SLP_PMU_PMUALIVE_32K| RKPM_SLP_PMU_DIS_OSC| RKPM_SLP_32K_EXT)>;
};
休眠后GPIO不断电的配置
RK3588的默认配置是休眠后除了GPIO0这组GPIO外其他的GPIO都是会断电的,如果需要其他GPIO不断电,需要按如下进行配置
- 上面配置logic不断电
- 给gpio供电的那路电源休眠的时候不要断电
配置GPIO0外的其他GPIO作为唤醒源
- 按上面方法配置logic不断电
- 按上面方法配置这路gpio休眠的时候不要断电
- rockchip_suspend中配置RKPM_CPU0_WKUP_EN
&rockchip_suspend {status = "okay";// 休眠log开关配置,0:关闭打印, 1:打开打印rockchip,sleep-debug-en = <1>;rockchip,sleep-mode-config = <(0| RKPM_SLP_ARMOFF_DDRPD //改为这个配置表示logic不断电| RKPM_SLP_PMU_PMUALIVE_32K| RKPM_SLP_PMU_DIS_OSC| RKPM_SLP_32K_EXT)>;// 唤醒源配置rockchip,wakeup-config = <(0| RKPM_GPIO_WKUP_EN| RKPM_CPU0_WKUP_EN)>;
};
Rockchip RK3588 kernel dts解析之系统休眠配置rockchip_suspend相关推荐
- Rockchip RK3588 kernel dts解析之音频模块
Rockchip RK3588 kernel dts解析之音频模块 RK3588 EVB板子使用的是外接声卡ES8388 DTS配置参考:rk3588-evb1-lp4.dtsi 系统声音配置: es ...
- Rockchip RK3588 kernel dts解析之MMC
Rockchip RK3588 kernel dts解析之MMC RK3588的MMC分为3中模式: SDMMC SDIO SDHCI 下面针对每种模式的DTS配置进行说明 SDMMC SDMMC用于 ...
- Rockchip RK3588 kernel dts解析之PCIe
Rockchip RK3588 kernel dts解析之PCIe 文章目录 Rockchip RK3588 kernel dts解析之PCIe RK3588控制器 RK3588 PHY 使用限制 D ...
- Rockchip RK3588 kernel dts解析之电源模块
Rockchip RK3588 kernel dts解析之电源模块 文章目录 Rockchip RK3588 kernel dts解析之电源模块 RK3588搭配的电源方案有2种 注意单PIMC核双P ...
- Rockchip RK3588 kernel dts解析之Camera
Rockchip RK3588 kernel dts解析之Camera 文章目录 Rockchip RK3588 kernel dts解析之Camera RK3588的Camera相关资源介绍 MIP ...
- Rockchip RK3588 kernel dts解析之USB模块
Rockchip RK3588 kernel dts解析之USB模块 文章目录 Rockchip RK3588 kernel dts解析之USB模块 RK3588 USB DTS 配置 USB 芯片级 ...
- Rockchip RK3588 kernel dts解析之GPIO Pinctrl
Rockchip RK3588 kernel dts解析之GPIO Pinctrl 文章目录 Rockchip RK3588 kernel dts解析之GPIO Pinctrl GPIO的命令规则 I ...
- Rockchip RK3588 kernel dts解析之WIFI/BT
Rockchip RK3588 kernel dts解析之WIFI/BT RK3588 EVB的WIFI/BT使用的是外挂双模模块,其中根据WIFI的数据通信接口不同可以分为PCIE和SDIO两种,下 ...
- Rockchip RK3588 Android+Linux双系统方案的实现
Rockchip RK3588 Android+Linux双系统方案的实现 文章目录 Rockchip RK3588 Android+Linux双系统方案的实现 概述 硬件环境 软件环境 要求 代码修 ...
- Rockchip RK3588如何创建新一个新板级DTS
Rockchip RK3588如何创建新一个新板级DTS 文章目录 Rockchip RK3588如何创建新一个新板级DTS 基于SDK已有的DTS选择一个适合的基础参考DTS RK3588 SDK发 ...
最新文章
- android 获取 第三方应用,​android PackageManager的使用如何获取第三方应用程序(包)的信息,求大神指点...
- thinkphp mysql权限管理_TP thinkphp 权限管理 权限认证 功能
- java param add_Java中的Map paramMap
- [Abp 源码分析]异常处理
- 如何打造组织级敏捷,你想知道的都在这里!
- 一个列中多行求和_excel表格制作,Excel表格的基本操作,包含制作一个表格10方面的知识(1)...
- 字符设备驱动基础篇1——简单的驱动源码分析
- 设计网页字体css,CSS教程
:网页字体及字体大小的设计
- ACE ADMIN 大全
- 7-6 分支结构——大小写字母判断 (15 分)
- 微信小程序配置实现中英文国际化语言切换
- PCL显示点云-ICP(PCL1.9.1)
- 生活中的统计概率思维
- java多线程------锁
- Flask开发微电影网站(六)
- Qt文档阅读笔记-DTLS client解析
- 初一计算机课怎么上,如何上好初中信息技术课
- 一文解读解读柏拉图给DAO成员空投1.5亿美金的意义
- 多思计组实验实验五、程序计数器实验
- 字符流问答小程序解题过程及拓展