持续创作,加速成长!这是我参与「掘金日新计划 · 6月更文挑战」的第32天,点击查看活动详情
简介
EC 里的主程序操作框架主要是进行标志位轮询的框架来的,首先一开始,就进行各个接口的初始化,初始化完成之后,再判断 eSPI 应答进行平台的复位操作,或者是确认是否成功加载固件信息。在这两个大功能判断操作后才开始轮询判断其他各个功能模块的标志位,进行相关的功能操作。所以,本篇文章主要讲下怎么判断 eSPI 的 ACK 应答 以及怎么判断加载的固件 OK 这两方面。
一、EC ACK eSPI
提出问题:EC ACK eSPI 怎么操作呢? 当eSPI主机桥被平台复位(PLTRST#)时,外设通道被复位。在 PLTRST# 断言之前,eSPI 主机和从机完成 HOST_RST_WARN 和 HOST_RST_ACK 虚拟线握手。在发送 HOST_RST_ACK 后,eSPI 从机不得发送任何外设通道事务,也不得发送任何主机域虚拟线(即虚拟线复位通过 PLTRST# ),如 SMI# 、 SCI# 、RCIN# 或 IRQ 。在 PLTRST# 非断言之前虚线复位非断言之前,eSPI 外设通道上不会发生任何交易,并且 eSPI 主站或从站不应发送主机域的虚拟线。在 PLTRST# 非 assertion 之后,eSPI 外设通道默认为启用。
void EC_ACK_eSPI(void)
{
if (IS_MASK_SET(VWIDX7, F_IDX7_HOST_RST_WARN))
{
VWIDX6 = (F_IDX6_HOST_RST_ACK_VALID +
F_IDX6_HOST_RST_ACK +
F_IDX6_RCIN +
F_IDX6_SMI +
F_IDX6_SCI);
}
}
二、EC 加载 FW
提问:EC Set load FW OK 设置加载固件 OK 呢? 在 MAFS 结构中 EC 必须在加载 FW 后设置 SLAVE_BOOT_STATUS 和 LAVE_BOOT_LOAD_DONE 。然后 EC 芯片将向 PCH 发送 eSPI VW信息,它将表明 EC加载FW OK。ITE EC 使用镜像功能来加载 FW ,所以EC只需要设置上述位。 注意:如果不在 EC 准备好后立即向 PCH 的 eSPI-MC 发送上述的 VW 信号,将导致 EC 发生故障,会导致全局复位事件,从而导致平台挂起。
void EC_Set_Load_FW _OK(void)
{
if (IS_MASK_SET(REG_310F, F_VW_CHN_ENABLE))
{
if (IS_MASK_SET(REG_310F, F_VW_CHN_READY))
{
VWIDX5 = (F_IDX5_SLAVE_BOOT_LOAD_STATUS_VALID +
F_IDX5_SLAVE_BOOT_LOAD_DONE_VALID +
F_IDX5_SLAVE_BOOT_LOAD_STATUS +
F_IDX5_SLAVE_BOOT_LOAD_DONE);
}
}
}
三、完结
本章结束,撒花。