stdlf
分类:
2011-07-04 22:23:58
在此将以DeskTop platform来说明(Notebook platform 的
power-on sequence 牵涉到
EC,可参考讨论区中 "power on
sequence" 文章);还有,所叙为rough flow,详细的时序图依据design会有些许不同.
[Power-On sequence]
- AUX power ok
- Main power ok
- PCI reset
- SB state-machine runs...
- NB state-machine runs...
- CPU power-Good ok
- CPU reset
- 1st code-read by CPU ( <- BIOS entry point,即 CPU 会抓取 FFFFFFF0h 处的 BIOS code 来执行)
* 当然CPU一次抓取的BIOS data不仅仅是几个Byte ! 而是一堆的data(Ex. 64 bytes);之后会从中
extract 出 FFFFFFF0h处的 data,然后来执行.
补充: 为什么CPU 发的第一个位置不会只有FFFFFFF0h? 而是多抓很多个? 范例中为什么是64 bytes?
原因在于 cache的支持. cache不是细分为单一byte 的, 而是以block(many bytes)为单位. 这个block的大小的名词就是 cache line size. 也就是要填入cache一次要写入的bytes量. 例如 cache line size 为 16 bytes. 那么一次就要读16 bytes到cache去.
CPU 一但发生cache miss(第一次开机一定是cache miss)的状况时.就会通过host bus 对外取得资料. 这时就会产生burst read cycle来达成fill cache line的需求. 所以由CPU 的 cache line size的大小就可以知道CPU一次会抓多少的 bytes. P4以后CPU 的cache line size 为 64 bytes, 所以CPU 就会产生一个 burst length 为8 的 memory read cycle. 所以CPU 发出的位置就需往下减.然后在读取的数据中可以包含到 FFFFFFF0h以后的数据.
自此,CPU便循着 CPU->NB->SB->ROM 的 path,循序地至BIOS ROM中抓code,执行
fetch->decode->calculate->store...自此开始便是BIOS POST stage starts...
[有可能遇到的问题是] debug code =
"00" or "FF" (意即BIOS常用的 Port80 card所显示出的 "code" ) !!!
* 此时,强烈建议:请在BIOS entry point 处 丢Port 80(value可自行定义),因为,即使BIOS有跑到,但因为距离 1st 丢 Port80 的 code仍有一小段程序代码;若系统 hang在此其间,Port80仍是没有 code,因此,在BIOS一开始进来便先 out Port80 将有助于判定:
system hang before BIOS entry point or NOT !!! )
# Assume system hang 'before' BIOS entry point, 可能的原因有:
- incorrect power sequence: 此
sequence 有 spec,规范讯号间的相对关系与 assert/deassert的时间,violate
spec有可能导致 system hang;此时需要 H/W or board designer来量测
- incorrect power-on frequency:有发生过因为
Power-On CPU frequency错误而不开机者.请用 scope量测
- incorrect chipset behavior: 意即上述的
power-on sequence中有关于
NB/SB的 state-machine部分,有可能这部分的行为不正常,因此需要 H/W designer来
clarify
* 曾听说,某家chipset需要BIOS image 中 include 几个 bytes 来 config NB/SB的
registers;这些 settings也会影响 power-on时 chipset的 behavior;因此,这几个 byte 若是错的,也有可能 system hang
补充:很多chipset都(or 曾经)有这个功能, SiS, NV, VIA, Intel. 以前有个词叫ROMSIP就是指这玩意儿... 即使在现今的intel platform也有预留这东东.
#Assume system hang 'after' BIOS entry point
=> 这就是BIOS engineer的时间了,就 debug吧...(尽管,有些 issue 是 board or H/W造成的...)
* 此时的 debug方式,若有 辅助工具的(Ex. P debug card) 就用,没有的就用Port80 card啰 !
[Summary]: 没进入到 BIOS entry point前....不要找我....真的没办法 >_<
* 关于 BIOS entry point,请参考 讨论区中 "追踪BIOS code 的进入点" 文章 !!!
[Power Button开始的动作]
一般Power Btn 都是EC 控制(或称PCU),如果你说要知道Power Btn之后的动作就是问EC 工程师就对啦。
我印象中好像是Power btn按下后-->EC 侦测到动作(应该是KBC 发Event给EC BIOS或是EC BIOS自己每隔一段时间去检查有没有Event..没K过EC Spec,纯猜测...)-->EC 检查目前系统状态(不同时间点按下Power Btn , EC可能会做一些动作,因此要判断),检查的时候主要会去检查南桥ICH接到EC的讯号线,判断Sx state-->如果是正常开机,则开始供电--->系统上电后,CPU会从起始地址开始读取BIOS第一条指令(至于CPU何时收到重置讯号可能要看一下其它Spec...)。
另外印象中EC BIOS有分成两种形式,因为EC Controller可能里面的记体器容量会不足,或是说节省成本故意做成那样,所以 EC BIOS 会是包在SBIOS或是放在EC Controller里面两种格式。
如果真的要K流程,应该是去看EC Spec跟ICH Spec吧...
当EC 收到power event (指power
button的动作后...), 会根据目前系统的状态来决定是否要开某些电源...For example, 当系统处于s3(suspend)的状态时, 当user按下power button后,
EC 会发一个讯号给南桥, 然后EC 会wait for SUSB and SUSC 的讯号assert. 然后开 main power的电(我指的是非suspend的power)...但是详细的动作应该各家都不太一样才对.
而且这些spec都是各公司的knowhow
张贴者: Harrison Hsieh 于 7:36 下午
标签: BIOS相关
4
意见:
Davidoff 提到...
最近本人在解决计算机主机问题,救是主机关机后内建网络卡会无法OFF掉,个人认为是BIOS中的问题,所以上网搜寻BIOS相关知识,看到大大您的部落格,所以顺道询问您有没有相关专业见解,感谢
Harrison 提到...
可能是有支持WAKE UP FROM LAN吧,你有关闭过吗?
Tdruk
提到...
ROMSIP这个东西很有意思,不知道哪里可以找到相关数据呢?
以前有遇到过一个问题,BIOS ROM有数据跟没数据时CPU的动作不一样,没数据的时候CPU不会发出读BIOS ROM的动作,不知道这个behavior是不是所谓的ROMSIP呢?
匿名提到...
想讨论一下Power on sequence
Desktop: PWRBTN# 由南桥control,当SUS power提供时,按一下放电让其asserted, then SB issue SUSB# signal to ATX power to let ATX power on, 然后PWRGOOD signal ready, 之后由SB
issue PCIRST#-->NB issue CPURST#, then CPU go to the first instruction fetch
0xFFFF_FFF0h,
如此想请教Notebook的Power Good是谁发的??
另外我认为S5 state, KBC发KBC command是怎么发的? 我认为只会是普通的level trigger来发signal,
谢谢!