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

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

[复制链接]
发表于 2010-7-1 11:31:10 | 显示全部楼层 |阅读模式
一旦正確的頻率供給給system後, BIOS便依據既定的POST table(類似行程表)來做事. 首先,與chipset最為相關的便是 [chipset config stage]. 意即,在此階段BIOS必須對 chipset registers填入正確的值,俾使其正常運作. 一般而言,要config下列的 devices:$ ^4 V+ V$ c8 R% n% U
- NB(還記得前面有提過北橋內部約可分 4 blocks; "有些" blocks 需要 在此 program...)! w% c; M1 ^8 h7 @1 E9 a
- SB(即 PCI-ISA bridge)
7 k- C" V. l3 I0 u' m7 X! k* L" b& e- ACPI registers( s" E! Y9 _: f5 c" L
- USB registers
) S) q8 k+ k- i8 i- SATA registers
7 L7 L9 w0 y/ v' R- u- PATA registers8 t- L# z9 S* S2 j0 S) L
...
: x0 ?7 i* @1 N5 s0 U
+ w1 u# c2 e% d* 在此所謂的 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之處 !!!5 Q  ?) _' }/ g; w3 @* P$ ^7 I* s
8 Q" ~$ C9 G5 ~( A
* ACPI registers通常透過 IO 來存取0 b- f7 A5 n+ j0 E5 \
Ex. // assume ACPI Base is 800h,要 access ACPI Reg55h
2 u$ d, Y7 z5 t& C! k1 Lmov dx, 855h
0 S; S1 F$ ?$ iin al, dx ; <- al = ACPI Reg55h's value3 |" ]( ]# }. q
. I3 D( x% ?# H! g+ R8 |
* 上述所列的 devices多為 PCI device,也都有唯一的PFA(PCI Function Address,即 bus#,device#,func#),也因此,只要對 device 下 PCI configuration read/write便可以 config device registers.
( |6 M( ]6 r- {. j
9 c; }6 M: s+ F( s2 k% uEx. 假設: set SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)
( }5 S3 X0 r# \9 o( K# x" a4 k4 m=> 簡單的 assembly can be:7 t2 }# i3 g( b$ `
( h- i. T* _; r% P
mov eax, 80002750h# {) {1 I' W% O9 m
mov dx, 0cf8h3 t. s' Z% V( A/ u# W/ z
out dx, eax
5 P% E5 O0 a* z: H; }0 @% c0 j8 }; ~/ X9 m: I
mov dx, 0cfeh
$ V: J; I6 \9 F# n2 V9 j2 vin al, dx
4 f/ V5 V% h* s/ W" W: ~" N$ D( Wor al, 00001000b1 l* }5 M! `4 E9 A2 `
out dx, al ' l% D4 N& `0 @, p" G- ~; {+ t3 K

% o$ U' |7 D& t9 L7 H事實上每家BIOS都 maintain many "tables" 來說明: 哪一個 device 中的哪些 registers要填?值.相關的 access routine都已經寫好. Programmer只需更改表裡面的值即可 ^_^% R# g& d! w$ d4 g! @0 H% T
8 a7 x3 |- E) ~( R; S4 N) z
*當有人要求改 register setting時,我們必須知道三件事:
7 P! w: w- `# D3 a- E4 H7 O1. why (為什麼要改?)! }7 L3 W4 Z- x) e6 G. e" v
2. what(改成何值?)
; x/ `+ F2 D  c# I0 N5 t3. when(什麼點改?)
8 O6 [7 ]9 j; [! B8 }. O; o/ i+ f
*對於 BIOS kernel與 OEM coding的人言,這部分會是較少碰觸的,因為,這些code會由 chipset porting的人負責撰寫及維護.
2 [; n. e$ ?/ R- n( s0 A4 Q張貼者: HARRISON HSIEH 位於 8:41 下午   
7 X+ U" F% I8 i: Q" a9 {標籤: BIOS相關 / b( l% @( Z, N) Q# ]
6 意見: & J* @# P  y* B6 f4 Q
* v% e6 g% X. o) D; A" I; d0 ^5 ~6 D
tonyya 提到... ! z8 M% `0 m' e0 o1 `7 e) U0 i" ^
無意間發現你的部落格
! L/ E  a* Z* d* v3 K8 @
; |1 E5 ?. J; l' z4 B' W很多文章都覺得受益良多" g0 h6 K* c& a7 E+ c, u7 Z8 E

- p/ H% ?# b4 ]$ B. f, w) X& l我也剛接觸這門領域不久
) r  ~8 P5 x1 n8 C- ]/ m4 M  }+ D
8 t' H6 ]3 ~2 j7 z1 p5 e, k8 \很多東西都似懂非懂6 t$ M: R2 @8 e" X( E
: t2 d3 Q% Y- x( \8 s3 |
不知對於一個新人而言4 f5 k2 y  m1 J# v1 K0 j
/ {# P1 s5 i  e1 D3 v- N* K
有沒有什麼好的訓練方式
# l6 h6 ^6 C8 ]
& R, j- Y& M  f! ~/ @. \" e; |可以及早進入狀況
( x% p/ }3 z9 @% }( Z; ~9 ^) h十月 03, 2007 5:53 上午  
' q: p% W7 B# e, ?% L# @0 N ) _6 k/ _. _# I, r! e
Harrison 提到... 9 t3 ~% R- j6 L5 s2 S5 o
現在的BIOS有分成Legacy BIOS(組合語言)與UEFI BIOS(C語言),但是這兩種BIOS對於一個剛接觸的新手來說就只是Win98跟WinXp使用方式的差別而已,介面不同,但是要做的事情幾乎一樣。
8 B# i7 y! v; C7 O6 T) S4 X  I5 [
* K% S" }" A0 k8 ^" }  N) ]# c所以我的建議是多去了解這些工具的用法(組合語言指令/C語言用法)還有多看看Intel IA32 Architecture guide vol1~3(目前最新版是IA64),因為了解系統架構才是最基本的。" P+ }$ z4 a4 i' N

& W6 \& b* r" H; k$ l6 d+ ^3 d如果要快速上手的話,你就先必須知道"設定方式",例如: 如何填CMOS/PCI Register(CF8/CF9),還有如何調整PIRQ/GPIO/ASL Code...等,如何透過SMbus/LPC存取? 何謂KBC/EC? 又要如何把OpROM 載入到記憶體,然後把控制權交給OpROM,執行後又把控制權還給BIOS/CPU Microcode如何更新?...etc. 這些都是基本OEM BIOS會做的事情,至於BIOS核心就必須很了解IA32架構你才有辦法去做。
9 W$ `; p* G1 e( Z# t- X十月 04, 2007 5:39 下午  
% @. B7 W% t1 @; p, d) K# I% U& I , X0 J$ d' h4 @* ]  s1 F
tonyya 提到... & Q1 p; r; _6 `6 E9 j
首先感謝你的回覆
' T  S  K& E- Y" p( f
8 S( D5 ?" |7 h  x. c) N- Y8 B1.目前接觸的是Legacy BIOS(組合語言)
; N. L) d7 Y* ]# v' O% a* R  `5 a& @& U7 O
2.IA32的系統架構有在看,目前也在積極補強一些相關的spec知識,不過還是要有實際做過才有感覺,對我而言如果只是光看的話無法深刻的體會) ?5 r9 [- h: b

& N$ w5 t: X7 C, c% [3.關於你說的設定方式,有的有碰過,像是PCI,ASL code,SMBUS/LPC, CPU Microcode更新,我會去補強你所提到而我沒碰到的部份2 o6 [5 J. i6 u' X2 L+ \
- R8 |) I: ^3 E6 L1 i9 F
4.進入這行的感想是對於一些硬體的知識比以前來的了解,辛苦的是要一直摸索找方向,雖然東西很多要K,問題就在於太多東西反而有時不知從何著手 @@!; ~* v1 ^3 H4 W: M5 N
; j+ o7 c" ?  B' Y
5.再次感謝你所提供的意見2 M& v% Z% ~2 K
十月 05, 2007 8:09 上午  ( B  M: L8 x5 ]  T

# T* I' e7 _  V" N& g, _( Qchiehlin@mail2000.com.tw 提到... & q+ k' y* v+ N9 h
PCI Register 是 cf8 cfc Index ,Data! I" Z' s. G3 B5 o" P
十月 25, 2007 11:17 上午  . N  Q, y4 j# h) H$ Y/ B% B6 \' N0 n

2 x4 W0 p/ D9 a# x" g9 G0 ~1 lPT 提到... 4 D+ }9 _2 G3 L, G0 K
關於SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)( j1 d$ B; V) N: p; y
mov eax, 80002750h
! j0 j6 q( N9 @2 d6 y. t6 |依照我的理解方式是
% M3 k+ B0 ]0 _3 _1 S10000000^00000000^00100^011^01010000
# d5 Q' c" m7 U$ H. m  p; o3 |2 ?所以應該是80002350h
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

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

GMT+8, 2025-3-4 20:59 , Processed in 0.025551 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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