Something About SCI

最近在debug一个SCI相关的问题,在这个过程中我对SCI产生了一些新的认识还挺有意思于是想记录一下,总结+备忘。

 

SCI全称是System Control Interrupt系统控制中断用来通知OSACPI event产生了。 ACPIspec上说有2种类型的event会产生SCI,一种叫做Fixed-FeatureEvents,另外一种是General-PurposeEventsFixed-Feature Events产生的SCI是由OS inbox driver去处理的,所以我们只关注GPEGPE全称是general purpose eventECSCI虽然跟通常的GPE稍有差别,但本质上它仍然是GPE)。

 

为了客制化一些功能或者实现一些特殊的FeatureOEM通常要配置一些GPIO让它能够在特定的条件下产生SCI,这里有些注意事项:


1.为了让GPIO可以产生SCI,通常只有特定的GPIO才可以(如Intel PCH通常只有GPIO0-GPIO15才可以配置成SCI,这些PINconfigGPIO Input


2.GPIO_ROUT对应的GPIOconfig成产生SCIGPE0_EN对应的bit要设置成Enable。(还需要disable GP_SMI_ENclear GPE_STS)


3.目前GPE都是Level triggerACPI table里面通常是_Lxx的形式的method,至于xx则是和GPE_STS这个register相对应的,所以要特别注意的是通常情况下Intel PCH GPIO 都是从GPE_STSbit16开始的,所以如果是GPIO0那么这个method应该是_L10.

Something About SCI_第1张图片



4.关于GPE_EN register debug发现OS会重新初始化这个register,它初始化的原则可能是基于AML code的分析,最初OS会把GPE_EN清成0,如果它发现EC device report Name(_GPE,xx),OS就会把对应的bit设置起来,如果它发现_Lxx它就会把对应的bit设置起来。另外如果OS acpi driver发现SCI不正常,也许pulse width没有满足spec,或者间隔时间太长等意外的情况,driver可能会把相应的bit disable


Peter Hu

你可能感兴趣的:(BIOS,Internals,SCI,GPE)