持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第29天,点击查看活动详情
简介
笔记本上的EC操控着电脑的开关机、休眠等等,其中关机有着不同的操作与意义,本文主要就是区分不同类型的关机操作流程。
一、关机的状态
首先我们先看下什么是关机,关机的状态主要有以下几种表现:
- 也被称为S5软关闭状态,不运行用户模式或系统模式代码;
- G2 - 不是一个睡眠状态;
- 没有系统上下文(内存或I/O)被OSPM或硬件所保存 ;
- 允许因按下电源按钮而过渡到SO状态 -- 耗电除了给设备(如电源按钮)提供涓流电流外,其他都是关闭的;
- 要求有较大的延迟,以便返回工作状态 ;
- 启动时,BIOS 执行正常的开机复位,加载引导扇区,并执行。
二、EC 关机流程
EC主动关机过程
graph TD
检测到需要EC做主动shutdown的触发条件 --> 拉Low_RSMRST信号 --> Reset_PCHFCH --> 并记录shutdown_ID --> EC按照EE要求的Sequence将所有S0和S3的Power关掉 --> ECFW按照项目实际要求决定要不要将S5的Power关掉
EC被动关机过程
graph TD
SLP_S5被拉Low --> EC按照EE要求的Sequence将所有S0和S3的Power关掉 --> ECFW按照项目实际要求决定要不要将S5的Power关掉
三、 不同关机方法
Power键 4s关机
此方法是按住电源键不动超过4秒(不超过8s)关机。这通常是一种强制关机操作。按一下电源键关机的操作需要OS配合,试想 在系统死机的情况下(蓝屏或者Hang发生),我们总不能拔电源插头或者抠出来电池吧,这是一种保险措施。这个操作叫做Power button override —— 在PWRBTN#上,硬件都有专有的Timer来计时,超过4秒还没有抬起,就触发了强 制关机,硬件会直接关闭CPU电源,进入G2/S5状态。
Power键 8s关机
此方法是按住电源键不动超过8秒关机。这通常也是一种强制关机操作,特别是在系统发生HW hang的时候需要这种操作,因 为此时CPU已经没有响应,这种操作是通过EC来完成的。
首先EC要enable 8S reset的watchdog,当按下PWRBTN#的时候,EC侦测到就开始计时,如果超过8S还未松开,EC就会触发自身的watchdog,然后使EC本身做复位动作,此时就会使整个系统都跟着断电关机,这个8S的时间也是可以通过EC来修改的,比如10S、12S等,当前我们的做法都是默认8S。
// This is for reset ec after press power btn
void EnableHW8sReset(void)
{
XBYTE RSTStatus1;
#define WDT2_8S_RST 0x01 [modify-20190107-ASLBZXQ0013]
GCR10 = WDT2_8S_RST; // Set reset counter
SET_MASK(GCR8, BIT4); // Enable timeout reset EC reset
RSTStatus1 = SPCTRL4;
if(IS_MASK_SET(RSTStatus1, BIT1))
SET_MASK(Oem_Globe_Flag1, _EC_8S_RST);
}
四、完结
本章结束,撒花。