Cstyle的UEFI导读之Embedded Controller简介(上篇)

     Embedded Controller就是我们常说的EC,它主要是由一颗特殊的MCU来构成,通常提供LPC的接口挂在LPC总线之下,由MCU所集成的一些外设来为PC提供一些Power,thermal,以及一些其他的控制。基本的EC架构一般有两种,使用share模式的时候需要Global Lock来保证资源的互斥,下面是非share模式下的框圖,SCI(默認INT9)跟SMI分別使用不同的通道和不同的IO端口(PMC通道62h/66h,68h/6ch)。

Cstyle的UEFI导读之Embedded Controller简介(上篇)_第1张图片
 
EC有三个寄存器可供使用,EC_SC(2个不同地址的寄存器) and EC_DATA。
Embedded Controller Status, EC_SC (R)状态寄存器:它提供了基本的EC于host通讯过程当中的状态指示,和消息传递。

SCI_EVT:是由EC来设置,用SCI中断用来通知host有消息需要传递给host,OSPM needs this bit to differentiate command-complete SCIs from notification SCIs,使用query command来识别具体的event是什么event。

SMI_EVT:当EC需要向host发送SMI信息的时候会置位,让后像host发送SMI信号。
BURST:当EC接收到host发送过来的,burst enable command之后会置位,这样就可以使EC停下当前的任务,来和host端进行大量的数据读写传输,避免多次触发SCI。

Embedded Controller Command, EC_SC (W)命令寄存器:它提供了基本的命令控制端口,host写这个命令寄存器会触发一下两个状态寄存器里面的bit OBF、CMD

Embedded Controller Data, EC_DATA (R/W)数据寄存器:用来传递实际的数据,会影响到状态寄存器的 IBF,OB.
Cstyle的UEFI导读之Embedded Controller简介(上篇)_第2张图片

EC含有256字节的byte-addressable I/O space.使用一下的一些命令来对这些资源进行访问,EC命令列表:

Cstyle的UEFI导读之Embedded Controller简介(上篇)_第3张图片
Read Embedded Controller, RD_EC (0x80):当EC触发SCI的时候host使用该命令来读EC一个字节的数据。
Write Embedded Controller, WR_EC (0x81):当EC触发SCI的时候host使用该命令来写EC一个字节的数据
Burst Enable Embedded Controller, BE_EC (0x82):host通知ec进入Burst模式,包括握手协议,以及超时退出,异常处理等。
Burst Disable Embedded Controller, BD_EC (0x83):host通知ec退出Burst模式。
Query Embedded Controller, QR_EC (0x84):当EC有event要通知host的时候,会置SCI_EVT位,然后发sci,host收到sci之后会使用QR_EC询问EC是什么evetn发生了,ec会向host回送一个0~255的一个字节的数据,以此来通知host有什么异常发生。



Cstyle的UEFI导读之Embedded Controller简介(上篇)_第4张图片

Cstyle的UEFI导读之Embedded Controller简介(上篇)_第5张图片

 上面图中有一个中断保持时间,一般来理解就是EC发出中断到OS识别到中断所需要保持的最短时间,不同的芯片组和平台或许有少许差别,不过一般时间在纳秒级别,而且在S0,S3,S4的状态下还有可能不一样,2个PCI时钟周期一般是够了!具体可参考南桥文档,只要设置相关的GPIO为SCI模式,并在asl code里面进行声明就可以了,不知道怎么做吗?下面是用rw读出来的NB里面的acpi table.从里面我们可以看到EC0设备,其SCI pin对应的GPE的bit是0x17,去查相关的pch eds就能知道是用的那个pin了。也可以在ru或者rw里面去检测SCI pin的状态,看什么状况下EC会给OS发SCI。
    上面提到的各种OS和EC通讯的协议看起来很复杂,其实在OS当中都有apci driver去帮我们完成,我们只需要在asl里面申明了EC的device,然后声明了相关的resource和ECRAM地址,然后使用Asl预定义提供的store或者是return 这些方法的话,在ACPI兼容的EC FW的系统上,acpi driver会自动完成ospm于ec之间的通讯,包括SCI的发送和接收响应。
    当然这里只提到了SCI的部分,EC除了给host端发SCI之外,还可以发SMI,当然如果是发SMI的话,相应的响应就是由BIOS来接管,完成一些特殊的事情,这个部分下次再说,从DSDT tabe里面搜索pnp0c09就能找到EC在acpi name space里面的相关定义和资源以及提供的服务了。

Cstyle的UEFI导读之Embedded Controller简介(上篇)_第6张图片


先到这里。
转载请注明出处
[email protected]  //   http://blog.csdn.net/CStyle_0x007

你可能感兴趣的:(Cstyle的UEFI导读)