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

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

[复制链接]
发表于 2010-7-1 11:31:10 | 显示全部楼层 |阅读模式
一旦正確的頻率供給給system後, BIOS便依據既定的POST table(類似行程表)來做事. 首先,與chipset最為相關的便是 [chipset config stage]. 意即,在此階段BIOS必須對 chipset registers填入正確的值,俾使其正常運作. 一般而言,要config下列的 devices:. j4 a. `, N5 ~) u
- NB(還記得前面有提過北橋內部約可分 4 blocks; "有些" blocks 需要 在此 program...)% n' i, M$ D  n  r/ Q
- SB(即 PCI-ISA bridge)
+ f) S8 {. o3 ]. D; B# u& ?- ACPI registers
9 U1 g3 Y) ?  B+ N% f- USB registers
  M# `( d* E/ t$ C) {; X) G- SATA registers0 B" B& m$ f& X) z5 b7 v
- PATA registers
  q1 b- Z0 Y3 c) \- ?, r...' t6 \/ b5 Z9 z) B7 ^

$ i5 M9 r$ X) u% |$ a* 在此所謂的 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之處 !!!0 o4 T/ e; s& h/ t
( _7 i! D. `' B: r+ |
* ACPI registers通常透過 IO 來存取+ k+ N3 J2 [& Y0 T) |9 ]% U) N. Z6 B& {
Ex. // assume ACPI Base is 800h,要 access ACPI Reg55h$ a4 f6 n3 ]1 v$ e: W0 o& t% H
mov dx, 855h
3 s- r9 a" h9 }, d4 n& b; i+ Pin al, dx ; <- al = ACPI Reg55h's value. e* g% P8 g1 R1 G- Q$ r. W

- p' n; f. F2 O* 上述所列的 devices多為 PCI device,也都有唯一的PFA(PCI Function Address,即 bus#,device#,func#),也因此,只要對 device 下 PCI configuration read/write便可以 config device registers.' u* q6 u$ @2 u8 a9 f9 D6 \

' a5 s6 N9 I. H% T8 wEx. 假設: set SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)4 Y' b2 s& `# ~/ R) N
=> 簡單的 assembly can be:
! p) V7 c7 V+ c
6 V) d' q1 K' V; n, l( w0 Emov eax, 80002750h: W; q1 O: H. `$ _( o
mov dx, 0cf8h
+ @- x8 K5 ~. j, D" B2 Q% [  Jout dx, eax8 ~0 c- r0 `# Y6 a

( O  |$ P4 q2 s/ [6 i; Omov dx, 0cfeh8 ?* W" g* F# `' ~) r
in al, dx
6 H5 F5 U! w2 M! tor al, 00001000b
1 S) M) B- O- I4 _& vout dx, al 6 l7 I' @. [' l  K
; q  \2 }9 l9 T: \$ J0 m
事實上每家BIOS都 maintain many "tables" 來說明: 哪一個 device 中的哪些 registers要填?值.相關的 access routine都已經寫好. Programmer只需更改表裡面的值即可 ^_^  S& s7 o/ R% E: L( ]/ Z+ B) j& {7 R; b

" B, }1 S0 b2 g; b8 u2 P5 k0 i5 E*當有人要求改 register setting時,我們必須知道三件事:
' ^3 X$ o5 Y+ [3 w' {% l, \1. why (為什麼要改?)! o+ I2 e* D3 T" i, E  J& n9 P' e, ^
2. what(改成何值?)
' {1 S( \: x0 @9 V3. when(什麼點改?)( x, y" L# S$ A! d, `

) C8 y* R+ V9 @# e2 I*對於 BIOS kernel與 OEM coding的人言,這部分會是較少碰觸的,因為,這些code會由 chipset porting的人負責撰寫及維護.
) K& B1 N0 M/ V/ m張貼者: HARRISON HSIEH 位於 8:41 下午   
1 s1 X; z, o6 d; D標籤: BIOS相關
( `% v9 l9 w4 q5 k" Z7 O6 意見: 1 [' _( D6 n$ ?3 p: X1 g8 @

* |: ^/ s7 }' u; `1 ~! k6 I8 [+ d* gtonyya 提到...
5 j; s9 Z8 w; O( g: ~無意間發現你的部落格
: a( u3 s- V  w/ }/ D$ Q+ k; P: w5 h! W3 j: a
很多文章都覺得受益良多
4 Z8 B9 K0 V! h) _, ~2 Q1 j4 V$ _8 l  L/ H% o0 h! }
我也剛接觸這門領域不久" Y0 Z1 Y2 O- J% X
, V# I$ e. ~( [
很多東西都似懂非懂% E; j) _* C$ `' m
" j3 S# z2 J+ v9 \/ `$ v1 ?
不知對於一個新人而言, _$ e' @7 [2 R: }% r" L5 r$ Y
6 E: T( ~* _/ `" ]
有沒有什麼好的訓練方式
( B0 ~1 j  J# Q4 V' z- D# N: U: q+ M0 C4 C
可以及早進入狀況, n4 Z+ O' y- J7 {& }* a8 ^( F
十月 03, 2007 5:53 上午  . Y, v7 n9 n1 ~. l, X7 J+ ], W5 d
* a; u" f+ R5 B6 @# w9 n2 i4 D
Harrison 提到...
" O, u! K2 }' c& u3 _) [現在的BIOS有分成Legacy BIOS(組合語言)與UEFI BIOS(C語言),但是這兩種BIOS對於一個剛接觸的新手來說就只是Win98跟WinXp使用方式的差別而已,介面不同,但是要做的事情幾乎一樣。7 W7 p- M: {) m$ j: L* U
" t' B: R  a/ D6 H$ [( b
所以我的建議是多去了解這些工具的用法(組合語言指令/C語言用法)還有多看看Intel IA32 Architecture guide vol1~3(目前最新版是IA64),因為了解系統架構才是最基本的。
8 @4 p" C, P$ j9 t
- V9 j9 I8 i2 A$ R1 S' ~如果要快速上手的話,你就先必須知道"設定方式",例如: 如何填CMOS/PCI Register(CF8/CF9),還有如何調整PIRQ/GPIO/ASL Code...等,如何透過SMbus/LPC存取? 何謂KBC/EC? 又要如何把OpROM 載入到記憶體,然後把控制權交給OpROM,執行後又把控制權還給BIOS/CPU Microcode如何更新?...etc. 這些都是基本OEM BIOS會做的事情,至於BIOS核心就必須很了解IA32架構你才有辦法去做。
" V1 ~: c7 V5 `" R7 L8 Y2 N十月 04, 2007 5:39 下午    P& k& E; v& f/ v; }" C- _

2 F8 a/ E: a" c# Z0 N5 c( ttonyya 提到... & }) q- B5 V$ j& V4 f) A) Z
首先感謝你的回覆( j$ s0 f2 V/ k& d4 q

  p4 u! D$ ?, l4 c( l( b2 q: y( d1.目前接觸的是Legacy BIOS(組合語言)
- b7 W4 |+ G- |' N. o+ \7 v% a0 M
2.IA32的系統架構有在看,目前也在積極補強一些相關的spec知識,不過還是要有實際做過才有感覺,對我而言如果只是光看的話無法深刻的體會
& L. x  [) y6 d+ h1 }
) q7 g! g3 ~7 K# _- O) S3.關於你說的設定方式,有的有碰過,像是PCI,ASL code,SMBUS/LPC, CPU Microcode更新,我會去補強你所提到而我沒碰到的部份, y* L9 Q' E/ [- f1 J9 q0 }/ d

# X- w" w8 K; ~: a- q/ X. c4.進入這行的感想是對於一些硬體的知識比以前來的了解,辛苦的是要一直摸索找方向,雖然東西很多要K,問題就在於太多東西反而有時不知從何著手 @@!
7 M1 E# B# E+ o5 S) ?" k5 v3 f! T' s
5.再次感謝你所提供的意見- W8 c9 ^0 w! x" J$ q( ~* B
十月 05, 2007 8:09 上午  % n+ O; C" W; y  W& S

7 c  G$ l5 H8 e' Y: Vchiehlin@mail2000.com.tw 提到... ) K1 `/ ?. V  g0 V, v  l. B
PCI Register 是 cf8 cfc Index ,Data
( A( \) X$ K! n1 a% f十月 25, 2007 11:17 上午  ! f4 y" a1 X9 }( _1 a
* o/ F2 K9 z- ]8 G6 M- S
PT 提到... 4 A/ ]/ |/ c3 x' Y3 @5 n
關於SATA register offset 52h bit3 = 1;SATA controller PFA is (0,4,3)1 L( u- H+ m* q5 f) J3 d
mov eax, 80002750h/ O- s! k4 m" v  y  {0 V
依照我的理解方式是
; ^& w8 X7 P. {/ y! b: j; C& W2 U10000000^00000000^00100^011^01010000
3 r; q3 j( ~8 |+ J所以應該是80002350h
您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

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

GMT+8, 2024-5-15 09:45 , Processed in 0.028846 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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