找回密码
 加入计匠网
搜索
热搜: BIOS ACPI CPU Windows
查看: 15858|回复: 0

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

[复制链接]
发表于 2010-7-1 11:31:10 | 显示全部楼层 |阅读模式
一旦正確的頻率供給給system後, BIOS便依據既定的POST table(類似行程表)來做事. 首先,與chipset最為相關的便是 [chipset config stage]. 意即,在此階段BIOS必須對 chipset registers填入正確的值,俾使其正常運作. 一般而言,要config下列的 devices:' {: Z7 X+ ?9 U* ~
- NB(還記得前面有提過北橋內部約可分 4 blocks; "有些" blocks 需要 在此 program...)
: r7 C& J& e3 I: e7 Z7 t  ^) m- SB(即 PCI-ISA bridge)
. {; S- Z8 X3 e* e, ~- I  s- ACPI registers! \! c. V7 i, i" \% L7 g7 W
- USB registers
3 b6 H4 K. ?- I) ~6 U4 E- SATA registers
8 J: w3 f( q, m* ^" L" F! r- PATA registers! j$ g/ h6 U4 U
...- V' z7 Q1 s3 o5 g# P+ C7 }( E

5 W0 g4 v1 A* ?, M* 在此所謂的 registers指的是: PCI config registers(除了ACPI registers以外). PCI spec所定義的 PCI config registers 00~3Fh 為 PCI header part,這個範圍的registers並不是此階段的主要工作(當然還是會touch,只是不多),而是稍後BIOS PCI kernel的事情.此階段將 focus on ffset 40h以後的 registers,因為,這些是 device specific的部分,是 chipset自己加function/feature之處 !!!
6 `4 I1 \7 U, f
. d* z" @1 g- m# D' Q1 t* ACPI registers通常透過 IO 來存取( u( I) R1 X. c8 |( z; ^. k
Ex. // assume ACPI Base is 800h,要 access ACPI Reg55h" c  Z1 q( A# i$ v9 {# i+ A& `
mov dx, 855h
2 ^  \; \7 Z) X+ Q' R8 @1 h8 win al, dx ; <- al = ACPI Reg55h's value
1 o9 m' z+ [  Z* o5 D' c& ]
9 |$ V9 D; p3 h% k5 D0 K* 上述所列的 devices多為 PCI device,也都有唯一的PFA(PCI Function Address,即 bus#,device#,func#),也因此,只要對 device 下 PCI configuration read/write便可以 config device registers.
0 j/ a& L- L/ @7 l, u  e( [0 Q- R" c) P7 S3 S1 I
Ex. 假設: set SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)' n0 n% X/ m# I
=> 簡單的 assembly can be:, g  a1 E7 ?1 \
5 W! e3 {' O3 G/ f
mov eax, 80002750h' I" k7 U6 u7 ?0 n# t9 t: U) `
mov dx, 0cf8h
1 D  b2 t& @, K% I# R; |out dx, eax  I# w0 C- }) {; x4 [+ Y

3 T8 Z. o, l; {7 h' f- Kmov dx, 0cfeh5 F! h3 X5 [& u3 b% P: i
in al, dx( O$ B0 o4 R: ?- G5 s
or al, 00001000b
8 O0 c' P0 w/ f) |7 D# Y1 Sout dx, al
+ G7 Z5 O4 t4 t% y+ B8 F# P$ g- U9 C8 l" |8 D; l
事實上每家BIOS都 maintain many "tables" 來說明: 哪一個 device 中的哪些 registers要填?值.相關的 access routine都已經寫好. Programmer只需更改表裡面的值即可 ^_^4 o5 @2 o1 K  e

* `" l+ k, e' w' d*當有人要求改 register setting時,我們必須知道三件事:- n+ p0 f9 v# j7 u1 B1 E
1. why (為什麼要改?)0 ]. M0 W0 R/ R* g" B* G) _# z+ T
2. what(改成何值?)8 h4 ?: {- h5 U7 Q, J, k7 x. F0 Q
3. when(什麼點改?)
0 j$ |5 ~) q" |( K5 Q' v4 q" K" X" F2 \( `. q4 I( J/ _! D
*對於 BIOS kernel與 OEM coding的人言,這部分會是較少碰觸的,因為,這些code會由 chipset porting的人負責撰寫及維護. 2 B% s* V% o3 H1 A) i9 X4 r
張貼者: HARRISON HSIEH 位於 8:41 下午   
+ b1 X" l; n% ?% I% J5 E9 U標籤: BIOS相關
, m( `+ p+ G3 L2 }! y2 H6 意見: - G- |& P; s$ y8 y$ v, s$ }
, ]5 n: E- _) E! @" ?6 ^0 K
tonyya 提到... 1 r, h- P2 l/ l" l4 J
無意間發現你的部落格
2 {; i) t* o* M+ _
& G* W$ e/ w, G! |9 m4 G  H2 @  Q5 A很多文章都覺得受益良多2 S* ?+ f# Y" G
  i; v; E6 K7 t* n: o) s9 ^& j
我也剛接觸這門領域不久
9 R, z- A2 ^; v. W7 o1 {, V! |  }& Q5 q9 h! S9 P% u
很多東西都似懂非懂
& X  J+ d0 i. {/ ?) m% w' X/ n+ Q7 v) W1 F
不知對於一個新人而言
. N% N0 q6 v$ q; E  |9 u& S2 U) L( B0 l/ X9 k4 M) o7 j- E
有沒有什麼好的訓練方式$ E. O! ?! z: }: T

& l3 Q0 _. \" q7 n可以及早進入狀況- v. g% Q% [) m4 ~0 e
十月 03, 2007 5:53 上午  ; V9 z( ]9 a0 ]0 ]: }& h3 m

: r; d, u1 @- T0 n9 P, q7 THarrison 提到...
8 A5 G) |% [' y8 m現在的BIOS有分成Legacy BIOS(組合語言)與UEFI BIOS(C語言),但是這兩種BIOS對於一個剛接觸的新手來說就只是Win98跟WinXp使用方式的差別而已,介面不同,但是要做的事情幾乎一樣。
2 O3 Y' k( i: o/ l- ?4 L! r
& @) _( {- |* ~/ V) d! _所以我的建議是多去了解這些工具的用法(組合語言指令/C語言用法)還有多看看Intel IA32 Architecture guide vol1~3(目前最新版是IA64),因為了解系統架構才是最基本的。
- t# P7 i$ h* \# x; A
2 X4 b8 e) M  x, }) P如果要快速上手的話,你就先必須知道"設定方式",例如: 如何填CMOS/PCI Register(CF8/CF9),還有如何調整PIRQ/GPIO/ASL Code...等,如何透過SMbus/LPC存取? 何謂KBC/EC? 又要如何把OpROM 載入到記憶體,然後把控制權交給OpROM,執行後又把控制權還給BIOS/CPU Microcode如何更新?...etc. 這些都是基本OEM BIOS會做的事情,至於BIOS核心就必須很了解IA32架構你才有辦法去做。0 L- j, O8 D) m+ N
十月 04, 2007 5:39 下午  
& b& P9 B+ P" S; [1 n/ i
  o$ z( E) @+ F: ~tonyya 提到...
' _, a0 f9 }; h7 a% d( b首先感謝你的回覆
" c) C8 ^% O$ J, x2 T! h  ]
/ D, w+ l' H* X+ T. l3 V% @- q% S1.目前接觸的是Legacy BIOS(組合語言)
: s* D+ @6 Q! m1 x& @% {1 x* H0 G6 ~8 E% I* s6 J, N- P
2.IA32的系統架構有在看,目前也在積極補強一些相關的spec知識,不過還是要有實際做過才有感覺,對我而言如果只是光看的話無法深刻的體會
6 a) r( s8 Q' v" c1 ]4 n* F; ^7 E2 C% P- Z) ~2 f4 h: j) T* ]7 e' [
3.關於你說的設定方式,有的有碰過,像是PCI,ASL code,SMBUS/LPC, CPU Microcode更新,我會去補強你所提到而我沒碰到的部份& C% L) W: _7 m- G  u, j9 T
( O5 k) |7 C/ X4 P2 O$ D$ i
4.進入這行的感想是對於一些硬體的知識比以前來的了解,辛苦的是要一直摸索找方向,雖然東西很多要K,問題就在於太多東西反而有時不知從何著手 @@!5 |, k6 g' I4 @8 u' x7 R5 F
  o5 e0 c6 n$ j' d
5.再次感謝你所提供的意見8 s; Y' R. E2 l% u1 O3 {
十月 05, 2007 8:09 上午  
( c! a. N9 |" e' C( i$ r   K& N% i3 j  c, A# a4 p6 r
chiehlin@mail2000.com.tw 提到...
8 n% C7 F, L: f$ F3 nPCI Register 是 cf8 cfc Index ,Data
/ R! u7 D8 F3 ?8 ~9 |0 ?2 b十月 25, 2007 11:17 上午  
3 i  H3 y- h# ~8 }* Q$ B
1 L6 ]8 T# _: d+ n6 ^+ sPT 提到...
& V2 O; I8 w" L( \. q關於SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)
" q# d" _2 E' Q& O+ c, ]$ Tmov eax, 80002750h, T+ ^) f) Q2 k% y' ~& S3 m6 M
依照我的理解方式是# m& R6 H  U4 U! D" e8 n
10000000^00000000^00100^011^01010000: R1 r1 n4 c# j: J
所以應該是80002350h
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

Archiver|手机版|小黑屋|计匠网

GMT+8, 2026-1-18 17:47 , Processed in 0.167275 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表