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

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

[复制链接]
发表于 2010-7-1 11:31:10 | 显示全部楼层 |阅读模式
一旦正確的頻率供給給system後, BIOS便依據既定的POST table(類似行程表)來做事. 首先,與chipset最為相關的便是 [chipset config stage]. 意即,在此階段BIOS必須對 chipset registers填入正確的值,俾使其正常運作. 一般而言,要config下列的 devices:
; c# f$ _# d- ?9 ~* o- NB(還記得前面有提過北橋內部約可分 4 blocks; "有些" blocks 需要 在此 program...)
. f4 [6 r7 [0 G0 [" b- SB(即 PCI-ISA bridge)
) p0 P3 _+ ^. h! o, @4 {9 {/ U2 j- ACPI registers
3 }2 j1 `/ y) @1 i3 L- USB registers5 f% t- m1 F& N" f* n2 }
- SATA registers6 ]1 H3 F) P9 Y; E: J0 f( D
- PATA registers- o8 ~* C* M# W: Y* B3 I" m6 @7 `: H
...+ r# m2 ?" C2 H1 x3 i

; X, E: @7 p! K% i* 在此所謂的 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 j# k( c+ N6 @9 K* W* w9 T2 X4 _7 Z5 ?8 S: {1 v
* ACPI registers通常透過 IO 來存取2 h2 Y  _  H5 \  e. }* [& b9 v
Ex. // assume ACPI Base is 800h,要 access ACPI Reg55h
0 v# [; M5 @  a" V( P! O" n/ rmov dx, 855h$ }1 s  I7 i* y& a  w; W
in al, dx ; <- al = ACPI Reg55h's value
$ D# z! x7 q  T$ J& ~' r, T. f* g0 t" b
* 上述所列的 devices多為 PCI device,也都有唯一的PFA(PCI Function Address,即 bus#,device#,func#),也因此,只要對 device 下 PCI configuration read/write便可以 config device registers.
9 i- Y, t0 F$ e2 C9 r# @$ p  B; f, I7 c( ?+ p' p1 C' L+ o( y3 g
Ex. 假設: set SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)( N4 }8 u2 S( I3 x8 K
=> 簡單的 assembly can be:
+ @7 o$ }. F$ k& z$ W9 B$ Q3 e! B1 P% l2 A2 @8 P" f. W- r: L/ `/ T
mov eax, 80002750h
* f1 D: r- g$ J/ g4 wmov dx, 0cf8h
+ m0 ^& P9 a$ B5 ~out dx, eax. Z5 s, _& m" X  |$ J5 D) d

7 e2 {: H6 q9 umov dx, 0cfeh
* o% ~. W" e: I3 G7 sin al, dx
( x4 g5 @  D. v) m4 D# j  xor al, 00001000b1 E2 H5 ?: |/ u, O. s. x- X+ d2 p
out dx, al & ^; c6 Q& N* {6 Q6 G

, b0 N# D* X: I  p  \4 Y9 u, F事實上每家BIOS都 maintain many "tables" 來說明: 哪一個 device 中的哪些 registers要填?值.相關的 access routine都已經寫好. Programmer只需更改表裡面的值即可 ^_^. }, y$ [& ?2 ~7 I+ r2 G- H+ I* m
4 y3 L, p, V: g' P2 W( o: A; r
*當有人要求改 register setting時,我們必須知道三件事:
. X  N1 O# b( I+ l2 u/ ]2 U! H1. why (為什麼要改?)+ s9 m7 O& S% Y6 i! d* P( ^
2. what(改成何值?)
/ p. b4 o8 U: B6 a) D; s+ ^  Q: w( e3. when(什麼點改?)
0 ?7 U1 X  S9 O+ f) y% N
) y, ]  D; ]$ k1 Q2 U1 H$ Z*對於 BIOS kernel與 OEM coding的人言,這部分會是較少碰觸的,因為,這些code會由 chipset porting的人負責撰寫及維護. 6 n) Y' ^: N# l: }' H
張貼者: HARRISON HSIEH 位於 8:41 下午   
0 ~" M3 t: p+ C( `7 s$ A, F8 N標籤: BIOS相關 * N0 Q3 `3 e2 u, R% ~
6 意見: ! L6 \1 k  Y0 p: I8 c1 f  R
4 K( X3 s& I$ K& o' `1 _
tonyya 提到...
. O; J# s: A+ @9 e0 k' P無意間發現你的部落格
6 J/ U  }/ \2 \
! l8 b0 x3 k- b, U很多文章都覺得受益良多
/ S9 F5 i& D1 Z+ Z0 @
3 i8 b3 \) H  B8 w: p我也剛接觸這門領域不久8 Z0 O1 K! c  I- _: M# a# Q

5 k) S+ p" \' F* @( k2 C很多東西都似懂非懂
7 G. {1 [- }! h! z
8 O- C# I! C% Q+ Z; }0 n5 I& h! u7 z不知對於一個新人而言" }& Z- L9 b5 Y

3 V" z# J2 t6 X5 d6 s6 g有沒有什麼好的訓練方式
( n5 n2 j' x# m5 u- O2 z, S; m3 J; B' E8 q6 x* E( r. [
可以及早進入狀況
; v% _/ ~" D! d1 z十月 03, 2007 5:53 上午  
) B: G/ Z/ s+ w: h/ G
' N/ D; Z+ t; _Harrison 提到...
) |% U2 C; Y: m4 H$ D現在的BIOS有分成Legacy BIOS(組合語言)與UEFI BIOS(C語言),但是這兩種BIOS對於一個剛接觸的新手來說就只是Win98跟WinXp使用方式的差別而已,介面不同,但是要做的事情幾乎一樣。
6 O" T  K* A! I1 g' M: f/ Z
4 o( d1 X* ?2 u' G& O所以我的建議是多去了解這些工具的用法(組合語言指令/C語言用法)還有多看看Intel IA32 Architecture guide vol1~3(目前最新版是IA64),因為了解系統架構才是最基本的。% \0 Y9 \7 @5 H
0 V/ \( h6 T0 G; w, L+ B  w
如果要快速上手的話,你就先必須知道"設定方式",例如: 如何填CMOS/PCI Register(CF8/CF9),還有如何調整PIRQ/GPIO/ASL Code...等,如何透過SMbus/LPC存取? 何謂KBC/EC? 又要如何把OpROM 載入到記憶體,然後把控制權交給OpROM,執行後又把控制權還給BIOS/CPU Microcode如何更新?...etc. 這些都是基本OEM BIOS會做的事情,至於BIOS核心就必須很了解IA32架構你才有辦法去做。) g3 t" C: S8 F. P! f* R
十月 04, 2007 5:39 下午  
+ A; R) t7 Y: [- _ 7 ^1 b: j3 H7 ?
tonyya 提到...
9 I# {. p# c* v& u9 @3 y  x首先感謝你的回覆
  D( w  e7 |9 d( ^; [
% K. N) I( v9 }1.目前接觸的是Legacy BIOS(組合語言)1 V' B. L  B2 b+ ^: Y
7 f4 k) {$ E$ R
2.IA32的系統架構有在看,目前也在積極補強一些相關的spec知識,不過還是要有實際做過才有感覺,對我而言如果只是光看的話無法深刻的體會
( G- F2 z6 k( S8 q0 v
1 P$ D4 ~. {1 B/ z8 X3.關於你說的設定方式,有的有碰過,像是PCI,ASL code,SMBUS/LPC, CPU Microcode更新,我會去補強你所提到而我沒碰到的部份! j, D4 H+ |! i4 U: x
* R& K& e- P8 A
4.進入這行的感想是對於一些硬體的知識比以前來的了解,辛苦的是要一直摸索找方向,雖然東西很多要K,問題就在於太多東西反而有時不知從何著手 @@!
7 t; o5 A0 T& m! C1 w* {
, f+ l' T: G6 X0 F0 ]5.再次感謝你所提供的意見
, _, c8 O/ l9 r十月 05, 2007 8:09 上午  
/ U2 U" T, t: {6 E* S% z
, ^" ]* Q* Z4 w6 m4 U+ i8 T. Achiehlin@mail2000.com.tw 提到... 3 N; U: C# o) ]( ~" n" n
PCI Register 是 cf8 cfc Index ,Data
) S0 w6 b) I# a8 X2 V十月 25, 2007 11:17 上午  & q. W( e9 y  D2 K6 O+ @4 y

0 K4 V$ ^0 `0 D' @3 \PT 提到... 3 O7 `- ]" g" i! r- m8 D4 F/ A
關於SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)& h7 D% Z! w. U$ T+ @8 u! `2 [5 m
mov eax, 80002750h
. N# \2 C) G+ v  s9 u依照我的理解方式是1 ]1 f9 l+ E+ Z$ ~; K
10000000^00000000^00100^011^010100004 x9 W6 d6 o- d! d" ?
所以應該是80002350h
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

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

GMT+8, 2026-6-11 20:40 , Processed in 2.005165 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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