[我所知道的BIOS]-[PowerOn Sequence BIOS Entry] 3

news/2024/5/19 0:56:23 标签: cache, behavior, signal, system, button, byte
出自: http://biosengineer.blogspot.com/2007/09/bios-poweron-sequence-bios-entry.html

最近开始学习BIOS,看到网络上好多人介绍小华的部落格很不错。但是因为大陆没法访问,所以正常情况下无法打开。现在由于偶然机会可以打开,所以转载一下以供自己和他人学习。如有版权问题,请留言告知我会尽快删除。

在此將以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

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
謝謝!


http://www.niftyadmin.cn/n/1516398.html

相关文章

python 的日志logging模块学习

尊重原创&#xff0c;原文链接 1.简单的将日志打印到屏幕 import logging logging.debug(This is debug message) logging.info(This is info message) logging.warning(This is warning message) 屏幕上打印: WARNING:root:This is warning message 默认情况下&#xff…

svn回退

subversion是版本控制系统. 虽然现在还有git. 但做为集中研发的模式, subversion还是适用的. (虽然subversion对很多人来说已经不再陌生, 但毕竟江山代有人才出嘛, 新人还是会出来的...) 1. 在你本地的改动未提交到版本库的时候, 你想恢复之前的修改. 可以 svn revert xxx 此改…

Python日志输出——logging模块

尊重原创&#xff0c;原文链接 1. logging介绍 Python的logging模块提供了通用的日志系统&#xff0c;可以方便第三方模块或者是应用使用。这个模块提供不同的日志级别&#xff0c;并可以采用不同的方式记录日志&#xff0c;比如文件&#xff0c;HTTP GET/POST&#xff0c;SMTP…

[我所知道的BIOS]-[Jumpless] 4

转自&#xff1a; http://biosengineer.blogspot.com/2007/09/bios-jumpless.html 上一篇所提到的是:BIOS entry point. 它是第一個被 CPU 所抓取並執行指令之處.每家BIOS都有其相應的 file,要牢記.在本文中,要提及: Jumpless ! 在此要先說明Jumpless的意義.它代表:"用 s…

[我所知道的BIOS]-[Chipset Config] 5

转自&#xff1a;http://biosengineer.blogspot.com/2007/09/bios-chipset-config.html一旦正確的頻率供給給system後, BIOS便依據既定的POST table(類似行程表)來做事. 首先,與chipset最為相關的便是 [chipset config stage]. 意即,在此階段BIOS必須對 chipset registers填入正…

Python3 使用配置文件创建日志

尊重原创&#xff0c;原文链接 一、logging直接写在代码中 >>>http://blog.csdn.net/naiveloafer/article/details/7630673 二、通过配置文件来配置输出 配置文件: [plain] view plaincopy <span style"font-size:18px;">#Configuration for log out…

[我知道的BIOS]-[系統資源] 6

转自&#xff1a; http://biosengineer.blogspot.com/2007/10/bios-6.html在此,想先提一下所謂的系統資源(system resources). 在電腦的世界裡,所謂的系統資源約可分為四大類,亦即: DMA, Memory, IO, and Interrupts. (大家若是仔細檢視一下 [我的電腦]->[內容]->[硬體]-…

自己搭建IntelliJ IDEA授权服务器

尊重原创&#xff0c;原文链接 感谢 首先说明&#xff0c;服务器文件不是我写的&#xff0c;我也是从lanyu大神那里搬过来的。我这里只是详细介绍一下如何使用。 lanyu大神博客&#xff1a;http://blog.lanyus.com/archives/174.html 下载服务器文件 下载地址&#xff1a;http…