0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

研发干货丨关于RK3399 开发板休眠、关机功能简析

飞凌嵌入式 ? 2021-11-25 13:57 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

RK3399 主板

文章目录

Power按键

~短按休眠和长按关机

关机命令

~poweroff命令关机


OK3399-C平台采用RK3399 主CPU芯片设计,支持底板Power按键休眠唤醒以及关机功能,Linux命令行也可以通过命令进行关机,下面对这两种方式进行简单的解析。

Power按键

Power按键的休眠唤醒功能一般是与PMIC芯片和CPU相关的,硬件上该按键会连接到PMIC的PWRON引脚和CPU对应的引脚上。

先来看power按键在PMIC侧的响应机制,POWER键按下以后,经过TdbPWRONF时间以后,INT引脚变为低电平,触发中断。内核驱动响应中断,执行休眠程序。

如果PWRON继续保持低电平超过TdPWRONLP,PMIC就会响应,RK3399板卡将进行关机。

f_0dd0d732357aa037478d3a458cd1b1b6&t=jpg&o=&s=&v=1610680194

RK3399短按休眠和长按关机

Log信息:


[ 10.250531] PM: Syncing filesystems ... done. [ 10.255148] test message. //加入的测试信息 [ 10.256842] Freezing user space processes ... (elapsed 0.003 seconds) done. [ 10.260770] Freezing remaining freezable tasks ... (elapsed 0.001 seconds) done. [ 10.263308] Suspending console(s) (use no_console_suspend to debug) INFO: sleep mode config[0xde]: INFO: AP_PWROFF INFO: SLP_ARMPD INFO: SLP_PLLPD INFO: DDR_RET INFO: SLP_CENTER_PD INFO: wakeup source config[0x804]: INFO:

GPIO

interrupt can wakeup system INFO: PWM interrupt can wakeup system INFO: PWM CONFIG[0x4]: INFO: PWM: PWM2D_REGULATOR_EN INFO: APIOS info[0x0]: INFO: not config INFO: GPIO POWER INFO: INFO: GPIO1_C1 INFO: GPIO1_B6 INFO: PMU_MODE_CONG: 0x1477bf51

涉及驱动文件

kernel/kernel/power/suspend.c/** * enter_state - Do common work needed to enter system sleep state. * @state: System sleep state to enter. * * Make sure that no one else is trying to put the system into a sleep state. * Fail if that's not the case. Otherwise, prepare for system suspend, make the * system enter the given sleep state and clean up after wakeup. */ static int enter_state(suspend_state_t state) { int error; trace_suspend_resume(TPS("suspend_enter"), state, true); if (state == PM_SUSPEND_FREEZE) { #ifdef CONFIG_PM_DEBUG if (pm_test_level != TEST_NONE && pm_test_level <= TEST_CPUS) { ? ? ? ? ? ? ? ? ? ? ? ?pr_warning("PM: Unsupported test mode for suspend to idle," ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "please choose none/freezer/devices/platform.\n"); ? ? ? ? ? ? ? ? ? ? ? ?return -EAGAIN; ? ? ? ? ? ? ? ?} #endif ? ? ? ?} else if (!valid_state(state)) { ? ? ? ? ? ? ? ?return -EINVAL; ? ? ? ?} ? ? ? ?if (!mutex_trylock(&pm_mutex)) ? ? ? ? ? ? ? ?return -EBUSY; ? ? ? ?if (state == PM_SUSPEND_FREEZE) ? ? ? ? ? ? ? ?freeze_begin(); #ifndef CONFIG_SUSPEND_SKIP_SYNC ? ? ? ?trace_suspend_resume(TPS("sync_filesystems"), 0, true); ? ? ? ?printk(KERN_INFO "PM: Syncing filesystems ... "); ? ? ? ?sys_sync(); ? ? ? ?printk("done.\n"); ? ? ? ?trace_suspend_resume(TPS("sync_filesystems"), 0, false); #endif ? ? ? ?pr_debug("PM: Preparing system for sleep (%s)\n", pm_states[state]); ? ? ? ?pm_suspend_clear_flags(); ? ? ? ?error = suspend_prepare(state); ? ? ? ?if (error) ? ? ? ? ? ? ? ?goto Unlock; ? ? ? ?if (suspend_test(TEST_FREEZER)) ? ? ? ? ? ? ? ?goto Finish; ? ? ? ?trace_suspend_resume(TPS("suspend_enter"), state, false); ? ? ? ?pr_debug("PM: Suspending system (%s)\n", pm_states[state]); ? ? ? ?pm_restrict_gfp_mask(); ? ? ? ?error = suspend_devices_and_enter(state); ? ? ? ?pm_restore_gfp_mask(); Finish: ? ? ? ?pr_debug("PM: Finishing wakeup.\n"); ? ? ? ?suspend_finish(); Unlock: ? ? ? ?mutex_unlock(&pm_mutex); ? ? ? ?return error; }

通过代码可知,Power按键触发的休眠和关机会执行sys_sync函数,进行系统数据的保存,这与突然掉电导致的异常关机是有很大区别的。

RK3399关机命令

RK3399 平台Linux下的关机命令有shutdown、halt、poweroff命令等.

Poweroff命令关机

Log信息:

[root@rk3399:/]# poweroff [root@rk3399:/]# stop finishedStopping input-event-daemon: done stop auto-reboot finished Stopping dnsmasq: OK Stopping vsftpd: stopped vsftpd (pid 1072) OK [ 20.099392] [BT_RFKILL]: bt shut off power [ 20.132245] configfs-gadget gadget: unbind function 'Function FS Gadget'/ffffffc07b025a38 Stopping sshd: OK Stopping lighttpd: OK Gracefully shutting down php-fpm . done Stopping dhcpcd... stopped /sbin/dhcpcd (pid 924) killall: rkisp_3A_server: no process killed Stopping network: OK stop finishedStopping system message bus: done Saving random seed... done. Stopping logging: OK umount: can't remount adb read-only umount: devtmpfs busy - remounted read-only [ 21.589884] EXT4-fs (mmcblk2p8): re-mounted. Opts: (null) The system is going down NOW! Sent SIGTERM to all processes Sent SIGKILL to all processes Requesting system poweroff [ 23.597578] cpu cpu4: min=816000, max=816000 [ 23.598572] cpu cpu0: min=816000, max=816000 [ 23.669985] I : [File] : drivers/gpu/arm/midgard_for_linux/platform/rk/mali_kbase_config_rk.c; [Line] : 274; [Func] : kbase_platform_rk_shutdown(); to make vdd_gpu enabled for turning off pd_gpu in pm_framework. [ 23.671701] rk-vcodec ff660000.rkvdec: shutdown [ 23.672132] rk-vcodec ff650000.vpu_service: shutdown [ 23.673046] rk808 0-001b: System power off [ 23.673419] rk808 0-001b: test message //加入的测试信息 [root@rk3399:/]# poweroff --help BusyBox v1.27.2 (2020-03-19 09:39:13 UTC) multi-call binary. Usage: poweroff [-d DELAY] [-n] [-f] Halt and shut off power -d SEC Delay interval -n Do not sync -f Force (don't go through init)

Poweroff命令做的事可以从打印信息上看出来,其实可以分为两部分,一是配置系统,停止当前的服务,进行数据保存。二是调用电源管理驱动对应的接口,完成电源配置,RK3399 主板进行关机。

涉及驱动文件

kernel/drivers/mfd/rk808.cstatic void rk808_syscore_shutdown(void) { int ret; struct rk808 *rk808 = i2c_get_clientdata(rk808_i2c_client); if (!rk808) { dev_warn(&rk808_i2c_client->dev, "have no rk808, so do nothing here\n"); return; } /* close rtc int when power off */ regmap_update_bits(rk808->regmap, RK808_INT_STS_MSK_REG1, (0x3 << 5), (0x3 << 5)); ? ? ? ?regmap_update_bits(rk808->regmap, RK808_

RTC

_INT_REG, (0x3 << 2), (0x0 << 2)); ? ? ? ?/* ? ? ? ? * For PMIC that power off supplies by write register via i2c bus, ? ? ? ? * it's better to do power off at syscore shutdown here. ? ? ? ? * ? ? ? ? * Because when run to kernel's "pm_power_off" call, i2c may has ? ? ? ? * been stopped or PMIC may not be able to get i2c transfer while ? ? ? ? * there are too many devices are competiting. ? ? ? ? */ ? ? ? ? if (system_state == SYSTEM_POWER_OFF) { ? ? ? ? ? ? ? ?/* power off supplies ! */ ? ? ? ? ? ? ? ?if (pm_shutdown) { ? ? ? ? ? ? ? ? ? ? ? ?dev_info(&rk808_i2c_client->dev, "System power off\n"); ret = pm_shutdown(rk808->regmap); if (ret) dev_err(&rk808_i2c_client->dev, "System power off error!\n"); mdelay(10); dev_info(&rk808_i2c_client->dev, "Cpu should never reach here, stop!\n"); while (1) ; } } }#define DEV_OFF_RST BIT(3) static int rk808_shutdown(struct regmap *regmap) { int ret; ret = regmap_update_bits(regmap, RK808_DEVCTRL_REG, DEV_OFF_RST, DEV_OFF_RST); return ret; }

最终调用的的rk808shutdown接口函数,对RK808DEVCTRLREG寄存器写入DEVOFF_RST,触发RK3399主板关机。

f_559214e61cd13e0cfbf1b06ee1d05aa1&t=jpg&o=&s=&v=1610680203

进入飞凌嵌入式官网>>了解关于OK3399-C开发板的更多信息。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • RK3399
    +关注

    关注

    2

    文章

    213

    浏览量

    26055
  • 瑞芯微RK3399
    +关注

    关注

    1

    文章

    21

    浏览量

    6080
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    RK3568 EVB开发板 深度休眠与快速醒的工作流程

    RK3568 EVB开发板关于深度休眠和唤醒流程的分析
    的头像 发表于 07-22 09:49 ?251次阅读
    <b class='flag-5'>RK</b>3568 EVB<b class='flag-5'>开发板</b> 深度<b class='flag-5'>休眠</b>与快速醒的工作流程

    迅为RK3562开发板 Ubuntu系统功能测试

    迅为RK3562开发板 Ubuntu系统功能测试
    的头像 发表于 07-10 13:46 ?653次阅读
    迅为<b class='flag-5'>RK</b>3562<b class='flag-5'>开发板</b> Ubuntu系统<b class='flag-5'>功能</b>测试

    迅为RK3562开发板Buildroot系统功能测试

    迅为RK3562开发板Buildroot系统功能测试
    的头像 发表于 06-13 13:46 ?1311次阅读
    迅为<b class='flag-5'>RK</b>3562<b class='flag-5'>开发板</b>Buildroot系统<b class='flag-5'>功能</b>测试

    基于RK3576开发板的PWN使用说明

    RK3576开发板使用PWN教程及Demo
    的头像 发表于 05-07 14:07 ?1458次阅读
    基于<b class='flag-5'>RK</b>3576<b class='flag-5'>开发板</b>的PWN使用说明

    HZ-EVM-RK3399-技术规格说明书

    电子发烧友网站提供《HZ-EVM-RK3399-技术规格说明书.pdf》资料免费下载
    发表于 04-17 17:04 ?0次下载

    RK3399处理器:高性能多核异构计算平台

    RK3399是一款高性能的多核异构计算平台,集成了强大的CPU、GPU以及丰富的多媒体和接口功能。其独特的双Cortex-A72+四Cortex-A53大小核CPU结构,使得RK3399在处理复杂
    的头像 发表于 02-08 18:04 ?1880次阅读

    Linux系统更换开机logo方法教程,触觉智能RK3562开发板演示

    本文介绍Linux系统更换开机logo方法教程,通用RK3566、RK3568、RK3588、RK3576等开发板,触觉智能
    的头像 发表于 01-06 10:53 ?887次阅读
    Linux系统更换开机logo方法教程,触觉智能<b class='flag-5'>RK</b>3562<b class='flag-5'>开发板</b>演示

    高清电视盒子方案分享,红外遥控适配过程全解析

    高效地控制电视设备。极大的提升了用户体验。 iTOP-RK3399平台介绍 ? ? 红外遥控方案示例 iTOP-RK3399 开发板搭载了HS0038B 红外接收模块。接下来我们在RK3399
    的头像 发表于 12-17 10:46 ?1335次阅读
    高清电视盒子方案分享,红外遥控适配过程全解析

    RK3576单板发布倒计时:RK3399RK3576对比

    好多人说RK3576是RK3399的升级版,某种程度上也可以这么说,RK3576在强大的多媒体功能的基础上,性能和接口都进行了升级 一、工艺 性能
    的头像 发表于 12-03 16:59 ?1489次阅读
    <b class='flag-5'>RK</b>3576单板发布倒计时:<b class='flag-5'>RK3399</b>与<b class='flag-5'>RK</b>3576对比

    玩转RK3588开发板基于connector-split 功能实现多屏联动

    玩转RK3588开发板基于connector-split 功能实现多屏联动
    的头像 发表于 12-02 16:05 ?1086次阅读
    玩转<b class='flag-5'>RK</b>3588<b class='flag-5'>开发板</b>基于connector-split <b class='flag-5'>功能</b>实现多屏联动

    【迅为】瑞芯微RK3588开发板RK3568开发板区别及优势

    RK3568开发板
    的头像 发表于 11-18 14:19 ?1636次阅读
    【迅为】瑞芯微<b class='flag-5'>RK</b>3588<b class='flag-5'>开发板</b><b class='flag-5'>RK</b>3568<b class='flag-5'>开发板</b>区别及优势

    新品体验 | RK3576开发板

    RK3399RK3566、RK3568、RK3588、RK3576等型号的核心与评估
    的头像 发表于 11-01 08:08 ?2091次阅读
    新品体验 | <b class='flag-5'>RK</b>3576<b class='flag-5'>开发板</b>

    瑞芯微RK3399开发板Android7.1修改网络优先级方法,触觉智能SBC3968开发板演示

    本文介绍Android7.1修改网络优先级方法,基于触觉智能SBC3968主板,搭载瑞芯微RK3399芯片,底板具备千兆网口、USB、HDMI、TYPE-C、音频等接口。可适用于工业主机、物联网设备、医疗健康设备、广告机、互动自助终端、教学实验平台、显示控制、车载安防和人脸识别等多个领域。
    的头像 发表于 10-09 11:37 ?700次阅读
    瑞芯微<b class='flag-5'>RK3399</b><b class='flag-5'>开发板</b>Android7.1修改网络优先级方法,触觉智能SBC3968<b class='flag-5'>开发板</b>演示

    RK3588!黑神话悟空,启动?-迅为电子RK3588开发板

    RK3588!黑神话悟空,启动?-迅为电子RK3588开发板
    的头像 发表于 08-30 14:13 ?1508次阅读
    <b class='flag-5'>RK</b>3588!黑神话悟空,启动?-迅为电子<b class='flag-5'>RK</b>3588<b class='flag-5'>开发板</b>

    HZ-CORE-RK3576开发板

    HZ-CORE-RK3576开发板
    的头像 发表于 08-29 13:58 ?713次阅读
    HZ-CORE-<b class='flag-5'>RK</b>3576<b class='flag-5'>开发板</b>