关于系统的工作和睡眠(About ACPI Spec3.0 chaper15)

6 views
Skip to first unread message

kur...@gmail.com

unread,
Oct 25, 2007, 9:47:51 AM10/25/07
to ACPI中文
ACPI定义一套机制,使系统在工作状态(G0)、睡眠状态(G1)或Soft-Off状态(G2)之间转换。当在工作与睡眠状态转换时,与用户操
作环境相关的上下文将被维护保存。ACPI将G1睡眠状态分为4种ACPI睡眠状态(S1,S2,S3,S4),由此可使系统在功耗、电源和唤醒时间之
间做权衡选择,也可以为ACPI平台提供多种休眠状态,允许平台转入一个预先定义好的特定睡眠状态,以便进入一个低功耗、快速唤醒的睡眠状态。
ACPI为OS电源管理定义了一个设计模组,为ACPI驱动初始化进入睡眠或Soft-Off(S1~S5)提供入口机制,该机制包含了一个3-
bit的SLP_TYP(表示要进入的睡眠类型),和一个单独的控制位元SLP_EN(开始睡眠进程)。由硬件实现不同的低功耗睡眠状态并通过
SLP_TYP将它们与定义好的ACPI睡眠状态联系起来。
ACPI还定义了另一套进出S4状态的机制,有BIOS来控制保存、恢复平台的上下文到一个非易失性存储设备(如硬盘),即S4BIOS。
在进入睡眠状态(S1~S4)之前,OS电源管理将执行包含在控制方法_PTS(Prepare To Sleep)中OEM定义的AML/ASL
代码。_PTS的用法之一是当SLP_EN置位时,告知内嵌控制器系统将进入哪种睡眠,以便执行恰当的电源管理动作。
在系统马上要进入睡眠状态前,OS电源管理将执行控制方法_GTS(Going To Sleep)。_GTS允许ACPI系统firmware在
进入睡眠之前执行任何必要的系统定义功能。
在系统唤醒时,OS电源管理将执行控制方法_BFS(Back From Sleep),它允许ACPI系统firmware在控制权交给OS之前
执行任何必要的系统定义功能。然后将执行_WAK(Wake)控制方法,_WAK中也包含了OEM定义的AML/ASL代码。_WAK的用法之一是,可
要求OS检查平台在系统睡眠期间是否有设备增加或者移除。如:PC卡控制器上可能会有PC Card的Added或Moved动作,因为在睡眠期间该设
备的电源是关闭的,它的状态转换事件没有产生。
Message has been deleted
Message has been deleted

kur...@gmail.com

unread,
Oct 25, 2007, 12:53:25 PM10/25/07
to ACPI中文
15.1 睡眠状态
关于睡眠状态之间的转换,请参考下面的链接:

http://groups.google.com/group/acpi_CN/web/acpi-sleeping-states?hl=zh-CN

(之前有用记事本画了一个流程图,可惜到了Google这边全变成乱码,害我郁闷了半天,只好用这种方式来贴图了。)

ACPI详细定义了G0,G1系统状态之间的不同:
(1)在G0状态,OS和硬件正常工作,CPU或任意硬件设备可以在任意一个定义的电源状态(C0~C3或D0~D3),然而,系统是在工作状态,正
在执行某个工作。
(2)在G1状态,系统被认为是不工作的。在进入G1状态之前,OS电源管理将令设备进入与相应睡眠状态兼容的设备电源状态;如果一个设备被设为能唤
醒系统,则OS电源管理令设备进入能支持唤醒的最低耗的Dx状态,这在该设备对象的电源资源描述中有定义。
G1状态的定义包括下列:
× 在G1状态CPUs不执行指令
× 硬件设备不工作(能触发唤醒事件的设备除外)
×对ACPI寄存器的影响如下:
!根据唤醒使能状况,唤醒事件位在相应的fixed或General-purpose寄存器中被置位
! PM1控制寄存器被设置为所需的睡眠状态
!在睡眠状态中由硬件置位WAK_STS位
所有的睡眠状态都符合以上的规范。ACPI定义了附加的属性使ACPI平台能支持4种不同的睡眠状态,可以选择不同的电源功耗,唤醒延时和实现的花
费。

Message has been deleted

kur...@gmail.com

unread,
Oct 26, 2007, 11:02:38 PM10/26/07
to ACPI中文
将CPU降频来跑不属于ACPI的G1睡眠状态,它还是G0工作状态。
CPU在睡眠状态不能执行任何指令,OS电源管理要基于这个事实。平台设计者可能尝试通过降低系统的
时钟频率来支持睡眠,允许平台在维持低功耗的同时维持交互通信事件(如网络环境),这就属于G0状态
即便OS将用户界面(屏幕)关闭,但处理器是运行在低性能的模式。这种降低性能的睡眠状态在ACPI规范中
没有定义,ACPI定义的睡眠状态不会执行代码。
ACPI定义了4种睡眠状态属性:S1,S2,S3,S4(S4和S5从硬件角度来看非常相似)。ACPI兼容的平台
能支持多个睡眠状态。ACPI定义了3-bit的二进制数来代表各种睡眠状态(在ACPI根命名空间的对象为:
\_S0,\_S1,\_S2,\_S3,\_S4,\_S5)。当系统要进入睡眠状态时,OSPM动作如下:
1.选择系统支持的最深睡眠状态并设置唤醒设备;
2.执行_PTS控制方法(将Sleep状态类型传给OEM AML代码);
3.若平台支持S4BIOS,OS决定选择S4BIOS机制进入S4状态,则OSPM通过写S4BIOS_REQ到SMI_CMD将控制权交给
BIOS;
4.若不使用S4BIOS机制,OSPM从相应的睡眠对象(\_S0,\_S1,\_S2,\_S3,\_S4,\_S5)得到
SLP_TYPx;
5.将选择的睡眠对象的值写入SLP_TYPx区域;
6.执行_GTS控制方法,传将要进入的睡眠状态所代表的值(1,2,3,4代表S1,S2,S3,S4);
7.若进入S1,S2或S3,则清处理器缓存;
8.若不是进入S4BIOS,则置位SLP_EN位开始睡眠进程(事实上与写入PM1_CNT寄存器的SLP_TYPx区
的动作是同时进行的)。若是进入S4BIOS,在写值S4BIOS_REQ到SMI_CMD端口;
9.若系统硬件机制不支持将处理器拉入低电源状态,则通过执行合适的本地指令来实现。
_PTS控制方法为BIOS提供机制来做一些事情,如在系统进入睡眠状态前写入睡眠类型值到内嵌控制器.
该控制方法在即将进入睡眠状态之前被执行,但与写入PM1_CNT寄存器的动作不同步。执行_PTS后还要
经过数秒系统从真正的进入睡眠。
在唤醒前,会执行_BFS控制方法,OSPM然后执行_WAK控制方法,该控制方法执行OEM定制的ASL/
AML代码,可以用来搜寻在睡眠期间设备的增加或拔除。

kur...@gmail.com

unread,
Oct 27, 2007, 12:05:58 AM10/27/07
to ACPI中文
15.1.1 S1睡眠状态
S1状态是低唤醒周期的睡眠状态。该状态会保存除CPU缓存外的所有系统上下文环境。在置位SLP_EN之前,OSPM将刷新系统缓存。若平台支持
WBINVD指令(在FADT表中有标志位表示WBINVD和WBINVD_FLUSH),则OSPM执行WBINVD指令。硬件负责维护所有的系统上
下文,包括CPU上下文,内存和chipset。
范例1:S1睡眠实现
以支持通过发STPCLK#来做stop grant的IA处理器为例,当SLP_TYPx设为S1并置位SLP_EN时,硬件对处理器发
STPCLK#来实现S1状态,使其进入stop grant状态。
此时,系统时钟(PCI,CPU仍在运行。任何的唤醒事件触发硬件不向处理器发STPCLK#信号,OSPM必须先清CPU缓存再转回工作状态。
范例2:S1睡眠实现
当SLP_TYPx设为S1并置位SLP_EN时,硬件支持S1睡眠状态将动作如下:
1.将处理器拉入stop grant状态
2.停止处理器的输入时钟,将处理器拉入stop clock状态
3.将系统内存拉入自刷新或suspend刷新状态,刷新动作由内存自己维护或者通过其它的在睡眠期间没有停止的参考时钟
4.停止所有的系统时钟(对系统PLL chip发stand by 信号),一般RTC还会继续运行
此时,除RTC外的所有系统时钟都被停掉,硬件在唤醒事件产生时重启动系统时钟,OSPM必须先清CPU缓存再转回工作状态。
15.1.2 S2睡眠状态
与S1状态类似,但其系统内存上下文可能会丢失,并且唤醒后控制从处理器reset vector开始。在置位SLP_EN前,OSPM要清除系统缓
存。若平台支持WBINVD指令(在FADT表中有标志位表示WBINVD和WBINVD_FLUSH),则OSPM执行WBINVD指令。硬件负责维
护chipset和内存的上下文。
实现范例:
当SLP_TYPx设为S2(值从\_S2对象来)并置位SLP_EN时,硬件实现S2的转换动作如下:
1.停止系统时钟(RTC是唯一运行的时钟)
2.将系统内存拉入自刷新或suspend刷新状态
3.关闭CPU和缓存子系统
此时,发生唤醒事件时CPU要reset,然而,核心逻辑和内存在维护他们的上下文。执行控制从CPU的boot vector开始。BIOS要做如下
动作:
1.设置CPU的初始化启动配置(如CPU的MSR和MTRR寄存器)
2.初始化缓存控制器到它的初始化启动时的大小和配置
3.Enable内存控制器支持内存访问
4.跳转到waking vector

kur...@gmail.com

unread,
Oct 27, 2007, 1:00:12 AM10/27/07
to ACPI中文
15.1.3 S3 睡眠状态

从软件的角度来看,S3状态的功能和S2状态是一样的。运作上的不同点是:一些在S2状态可能是开启的电源资源在S3状态下可能变为不可用。如:一些设
备在S3状态下比在S2状态的功耗更低。类似地,一些设备在S2状态下能唤醒在S3状态下却不能
S3睡眠状态实现范例:
当SLP_TYPx设为S3(值从\_S3对象来)并置位SLP_EN时,硬件实现S2的转换动作如下:
1.将系统内存拉入自刷新或suspend刷新状态
2.系统中的设备各自独立维护内存
3.系统会掉电.此时,仅有内存带电(可能是部分带电).RTC是唯一运行的时钟
此时,唤醒事件使系统重新上电并重启大部分的设备,执行控制从CPU的boot vector开始,BIOS要做如下动作:


1.设置CPU的初始化启动配置(如CPU的MSR和MTRR寄存器)
2.初始化缓存控制器到它的初始化启动时的大小和配置
3.Enable内存控制器支持内存访问
4.跳转到waking vector

注意:若缓存内存控制器的配置在睡眠期间有丢失,则BIOS需要将其重新配置为睡眠前的状态或初始化启动状态。BIOS可将缓存内存控制器的配置保存到
预留的内存空间,在唤醒后可以恢复它的值。OSPM将在睡眠之前调用_PTS方法。
BIOS也负责恢复内存控制器的配置。若在S3睡眠期间该配置数据被破坏,BIOS要从非易失性内存区块(如RTC CMOS RAM)中恢复其睡眠前
的状态配置或初始化启动状态配置。
当OSPM从S3睡眠状态回来重枚举总线时,将发现设备的插入或移除并配置设备。

15.1.4 S4睡眠状态

S4睡眠状态是ACPI支持的最低功耗,最长唤醒周期的睡眠状态。为了将功耗降到最低,假设硬件平台所有设备都会掉电。
因为这仍是一个睡眠状态,所以要维护平台的上下文环境。维护系统上下文的动作因进入S4睡眠状态的方式而异。

S4支持两种进入机制:OS发起和BIOS发起。OSPM发起机制类似进入S1~S3睡眠状态,OSPM驱动写SLP_TYPx区块并置位
SLP_EN;BIOS发起机制由OSPM写S4BIOS_REQ到SMI_CMD端口将控制权交给BIOS。

由OSPM发起进入S4睡眠状态时,OSPM负责保存所有的系统上下文。在进入S4状态之前,OSPM将保存所有的内存包括报告为type
AddressRangeReserved的内存异常。当唤醒时,OSPM将恢复系统上下文。OSPM在从S4睡眠返回重枚举总线时将发现设备的插入或
拔除,并配置开启设备。
由BIOS发起进入S4睡眠状态时,OSPM负责的系统上下文与S3状态描述的一样(BIOS恢复内存和芯片上下文)。S4BIOS将控制权传给
BIOS,由BIOS保存上下文到非易失性存储设备(如硬盘分区)。

kur...@gmail.com

unread,
Oct 27, 2007, 12:58:52 PM10/27/07
to ACPI中文
15.1.4.1 操作系统发起S4转换
若OSPM支持OSPM发起S4转换,将不会产生BIOS发起S4转换。支持BIOS发起S4的平台也支持OSPM发起S4。
OSPM发起S4转换由OSPM发起保存系统上下文,写入合适的值到SLP_TYPx寄存器并置位SLP_EN。从S4睡眠状态返回前,BIOS恢复
chipset到其POST状态,更新硬件签名,并正常启动到控制权传给OSPM。
当BIOS构建ACPI表时,为系统产生一个硬件签名。若在OS发起S4睡眠期间有硬件配置上的改变,则BIOS会更新FACS表中的硬件签名。硬件配
置上的改变被定义为平台上的任意硬件改变导致系统尝试恢复S4上下文的失败;这类硬件通常限制在启动设备范围。如:在S4状态期间改变显卡或硬盘控制器
会导致硬件签名改变。此外,从PC卡槽拔插PC卡不应导致硬件签名改变。

15.1.4.2 S4BIOS转换
BIOS发起S4转换始于OSPM写S4BIOS_REQ值到SMI_CMD端口(在FADT表中定义)。一旦得到控制权,BIOS会保存相应的内存和
chipset上下文,然后将平台拉入S4状态(使所有的设备断电)。
在FACS内存表中,S4BIOS_F位代表硬件支持BIOS发起S4转换。若硬件平台支持S4BIOS状态,将在启动到OS前置位FACS表中的
S4BIOS_F标志位。FACS表中的S4BIOS_F标志位置位,则表示OSPM可请求BIOS将平台转入S4BIOS睡眠状态,通过写
S4BIOS_REQ值(在FADT表)到SMI_CMD端口(FADT定义的SMI_CMD值)。
在唤醒时BIOS软件恢复内存上下文并跳转到waking vector(类似于从S3状态唤醒)。从S4BIOS状态返回,BIOS必须只配置启动设
备(使其能读取保存系统上下文的硬盘分区)。当OSPM重枚举总线时将发现设备的插入或拔除,并配置开启设备。

Reply all
Reply to author
Forward
0 new messages