在此将以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便循着 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)

#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 的进入点" 文章 !!!

关于BIOS entry point,有两个东西提供给大家参考:

1. 假设BIOS image is 512KByte. 利用ultraedit 并切换至Hex format来 open this BIOS image. 找到 offset 7FFF0 处,将原先的 machine code 改成 <mov al, 66h;out 80h, al>的 machine code;存盘,然后将该 image刻录到原先的ROM上. 开机后就可以发现:Port80 is "66". (当然之后无法开机...因为已经破坏了BIOS content...你改的正是 1st CPU会抓取并执行指令的地方 !!!)

2. [Q] 承上,一样是 512KB ROM, 此时,若将一个 down-size 256KB BIOS image刻录到ROM上,再开机...会发生什么事呢 ? 原因是...^_^...

补充一下好了. 为什么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以后的数据.

阅读全文
类别:我所知道的bios系列整理(转载小华的部落格) 查看评论
posted on 2010-09-23 22:31  sinbad_li  阅读(518)  评论(0编辑  收藏  举报