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

Intel ICH9 Memory SPD读取

[复制链接]
发表于 2009-7-21 09:57:34 | 显示全部楼层 |阅读模式
根据bios代码写了个SPD读取,就是不出结果,每次调试输出host status register都是FF,代码基本和bios一样,机器也是ICH9的机器,代码如下: , {7 P/ i7 P1 T3 t6 T
8 M) O) t, W. _6 j' J& D2 e' j/ _( b
  .model small# Z8 {: ~  a- Z# Q, T* }) C
  .3866 Y( s; F0 w; Y; \; d# x! o! y4 R" u
  CFG_ADDR EQU 0CF8h
9 N$ a0 g1 s8 D  CFG_DATA EQU 0CFCh, L5 a4 L6 S2 m
  SMBUS_BUS EQU 0( Y! w. C7 T; }8 p0 v
  SMBUS_DEVICE EQU 31& t$ y- j! @: i" g
  SMBUS_FUNC EQU 3; }. H& |& e7 {6 H8 L% A
  
: g0 u. Y6 b: \0 Z+ G0 M' T' ]- u  .stack 100h$ w7 f0 @1 @6 I; \- Z1 ~
  .data
: s6 Q% {1 _9 A9 `* T, @base dw ?  ;smbus I/O space4 J. Y! u) C$ k7 o
num  db 0  ;byte select# B# C" W+ f* X1 M! C5 [  C  v
SmbStatus db ?+ o- S3 T3 c/ l5 e
: Q7 l8 S6 X7 k4 h+ F
  .code1 s  N9 z! ~+ e/ J  b

0 ~6 T2 }3 A( \+ t% I$ L0 W( F9 dLF_CR MACRO6 w; C  L" G+ ?
  pusha8 N+ ~" m$ h! F" |: S- N4 X8 M
  mov     dl,0dh      
, u$ `5 i2 \5 R  i1 D$ V mov     ah,2
' o9 p( a5 g: Y* m+ C8 k  int     21h1 u9 Y  |& B) f* M
  mov     dl,0ah   ;next line   8 S3 B0 _+ e* g$ g. P
  mov     ah,2
0 M  c" [* @9 G4 A7 y4 g0 f7 o  int     21h
+ {5 L3 g* l! K  popa  
6 X1 ^* L4 i6 \, I6 H: C     ENDM
3 k3 x3 d" Y" \8 a3 ~! U7 w$ Y4 `" l8 w# C! T( F0 N

7 `) A" H9 D% d" O  ~! J8 a# imain proc far
6 D& K/ m$ _" ?. ^3 e* v0 H mov ax,@data
) O) J& g  X. O7 u; V* n4 i mov ds,ax$ a- L+ M4 U7 J

# {& a9 x, d0 K  Z/ }) B0 D mov eax,8000FB20h ;Bus 0,Device 32,Function 3,20h
& i1 T! p/ T( L8 o. d; q# i/ L mov dx,CFG_ADDR0 D; u' x9 m  [2 v* Y# U0 ?
out dx,eax2 t2 }1 K5 P$ p9 x2 |
mov dx,CFG_DATA  u) p6 p: ]% i
in eax,dx2 a; R, [! x7 E# D. g
  3 r% D4 a% Q7 z5 v
shr ax,5     ;bit 15-5,the base address
- Y' N5 {2 `) F' I* h and ax,0000011111111111b
! Z( X) @7 X/ l mov base,ax) J* n( X* n+ h3 T& u, Y
  
7 d2 p% \2 Q5 c$ n% p/ R call ReadSpd
: N0 j/ K1 R( R8 Oexit:+ k6 N2 M2 z5 ~
mov ax,4c00h4 A  @3 l4 z. ~9 o6 P4 c+ p% ~4 d/ H
int 21h. T% O8 K; S1 b
main endp. M: i( K8 O8 G1 d
  u1 t$ o2 O& w* N$ [

. ~6 M( w3 X- j) k! F. s
$ c! K: ?9 D2 c/ m0 h) XReadSpd proc3 s" G1 o3 b) g/ p+ k
pusha9 j# }. q# }9 S
Again:+ ^! y5 P' b+ y! T2 _
mov ah,num- E: q! T( q2 \$ M' p9 N  G- k
  and ah,00001111b+ C1 }0 D* k" M4 s( N7 L
.if(ah==15d) ;CR_LF
$ C* Z" c1 {5 g" ?9 O! k  LF_CR0 W) I! r4 T, e% D7 _" }
.endif
0 K( U7 Z7 H2 P; [  j1 Y $ b6 T7 @3 D5 L# g6 S, Z# p# [
.repeat
: ?# ]3 n# L) J( L5 N! n$ n% f  mov dx,base   ;reset host,claim host in use
2 l7 ]8 a9 O# F, T# i+ ?7 F- m  add dx,0
0 Z' s6 W0 Q7 W8 t- k! V6 V  mov al,40h
! d1 i3 ~; ]7 @( e. p: R  out dx,al
# s/ q7 D2 |- [+ G5 \  ; V- y3 [, B$ |. _
  mov dx,base   2 }* ~- N+ h9 `" w% k
  in al,dx
( V0 g. I* ~7 L2 O  mov SmbStatus,al5 }0 |/ {- q; B& M
  - Z4 R5 F, Z6 L2 u2 g
  mov dx,base   ;clear all status bits( k" M/ t: k$ q( M7 w) S
  mov al,1Eh   ;host status register: T2 o" l5 s: _2 W
  out dx,al$ y2 ]+ W$ Q* s) u5 S2 _. K
  
9 K8 P) }3 q6 p9 w' ]+ Q  mov dx,base   ;set offset to read
: ?1 P, y/ P. [+ ?: l  add dx,3    ;host command register: N, D9 S% N6 J
  mov al,num( \1 A+ f6 m3 A8 h! T% E
  out dx,al+ o  a+ c5 J* P0 Y* P5 @" }6 Y
  
7 `' \: m8 K# v' h( [! F3 n( a  mov dx,base   ;Transimit Slave Address register' w5 r! J) I3 Y  ]  o& ]1 U
  add dx,4
* m) Z( m/ y8 N% R6 p, J  mov al,0a1h
. u$ D  v0 m. ?& X  out dx,al7 \6 T+ [4 `% f/ }& U; C
  
; L4 n/ K8 _/ S# g) Q5 l+ M! R  mov dx,base   ;set "Read Word" protocol and start bit3 l1 ?5 D: H% y* [3 K5 V7 G3 F
  add dx,2    ;Host Control register' O5 x& d% E* x. c& x5 @
  mov al,48h  
+ C1 e  `/ j" A4 D" d  out dx,al( g6 _& G: k4 J4 ?
  L, @; s( C+ q& D2 a' K3 C  C

5 N6 S' c) E7 ~0 Y" T# _  6 n8 I# {  k- R
  mov dx,base& I) V' @8 J9 S3 D; ]
  in al,dx
- K' D% Z, _8 w  X  mov SmbStatus,al+ L" o! V/ y: H, T  z
  and al,1Eh
; d# b; `+ R6 _% j  .while (al==0) ;check repeatly until any of
8 D( l( x# h  @$ \    mov dx,base      ;FAIL,BERR,DERR,INTR
4 m0 m( X, J+ T: f    in al,dx/ N, U) v$ ^5 v- B0 X$ k5 z
    mov SmbStatus,al  m1 G7 E* U) V! N2 z2 m! p: A
    and al,1Eh
, ~: ]9 N# y. i& W5 K( q  .ENDW, t0 G% z' l4 q, g0 l6 |/ u1 Y) i  w
  
. Z7 s1 T9 W! p- r( X, g% ]  mov al,SmbStatus   
  ?( `( p. d$ N* B7 s1 L  and al,1Ch3 i, U* G( ~. }7 j2 T
  .if (al!=0)    ;check for errors  + }5 @8 j- b% H
   mov al,SmbStatus
* X" {$ ~' K6 M8 V. ^+ z) g   and al,08h   / S. W4 `6 c$ v$ d$ s
   .continue .if (al!=0)  $ Z* V* m0 \) ^
   jmp @F  
6 ?+ Z" J# O- S% r$ A% f .else3 u9 {7 @" @$ _) a7 K1 `6 [9 {
  mov dx,base6 ~8 ~3 Q: U3 ^. r" H1 [: P( `$ D
  add dx,5h
) E: r, B. ^% r& Q7 q: L) W0 q( B  in al,dx  
0 x3 E' s* X, w  call binhex
0 Q& ~% d; ?  F& ^- L1 Q% b  .break" e0 [, b0 ^5 ]# d/ q8 @/ i
.endif
/ V; w* Z* O2 ~' f( r  
- I* ?; Z& T3 v6 O) U$ Y8 f, J6 W  .until (0)
, {+ z0 w- V+ W" K2 `5 U  
) j/ a- N' |! z
( R* i/ a2 ^% E4 i9 P: K0 p- C ; L/ O" l) s" t% s; {' c( p
mov dl,20h ;output a space
- _+ u: ]" ?4 R  V mov ah,2
0 E  I  N8 J' o, P  t. r8 I1 n8 b pusha; R3 P8 O8 U1 F3 w4 F; n, N* H
int 21h) g* T; {% {$ I1 j% N4 Q
popa
& d: x& y0 w1 a2 E2 l inc num# n7 Q, T, N5 A0 s
1 r" B5 `( |4 V3 Q  f
cmp num,80h ;get first spd 128 bytes
, k( f+ ^$ U* M4 T" M2 [: s" I& i jnz Again( [' E; V  A) U( W+ A6 v. q* I% }
& E7 K6 C7 t) [7 \
@@:+ S1 U6 _- w" d, H, T) P) U7 E
popa
: M; u! l: |0 v+ T' r ret
% E. O: y; H5 G) KReadSpd endp. e( ~9 C4 [! U+ f5 X8 f" c

) C6 m5 N1 A, q8 o" m. Z: c- k+ P3 g) `5 O/ w2 ^

: ^5 o9 S9 [% T) k, h# nbinhex proc $ S& x* o3 p3 j& u# C/ J& T- ~
pusha
5 l' R; r' M8 Z2 ?! h ' }! c) r: _; U& ]0 L; _% w
mov ch,2 ;2 hexadecimal digits to be printed; t$ }+ F: ^" c: d4 I
loop3:
7 I. }% i5 F2 m/ B& P mov cl,4 ;bits to be shifted; h% W( z, I/ ^! T
rol al,cl
2 ]( V( t# _0 v0 p' x4 \ mov bl,al
$ l0 J; q' c& s9 h8 B3 n and bl,0fh ;mask the 4-bit Msb
6 J: g0 a. j) j2 z add bl,30h
0 o0 h$ d4 J) w) w4 U) P% n( e2 { cmp bl,3ah% c8 j" j) F5 Q8 C; B$ L
jl next1  ;number or alpha?- i) r+ W# h0 d2 z6 k! c1 F( F
add bl,7 / F4 x8 w$ j* P+ }  K+ n5 @; U
next1:
( L9 Q9 J2 \' \& T/ ?2 Y mov ah,2  ;print one hexadecimal digit
; ~9 l* N1 r$ A7 |9 c. j mov dl,bl6 S8 i, J2 ]6 W% O0 k, ^/ \- i
pusha
1 I! N0 I- Y3 Q# r+ o$ X, x& A int 21h" F% K4 F! h2 i/ p
popa
& b4 u( S; T" R, L9 u9 ~7 p dec ch0 `, R, ]2 p$ Z+ z+ ~9 [) B1 c
jnz loop36 `  ^( j3 N- \) P8 [
popa( q0 Z! v' H$ c) c2 x4 q
ret7 q. f& i; v$ Q: W2 }5 O
binhex endp
) P2 i' r* A8 w3 v   end main
 楼主| 发表于 2009-7-21 12:30:37 | 显示全部楼层
问题已解决
回复

使用道具 举报

发表于 2009-7-21 13:40:23 | 显示全部楼层
我做过一个可以支持SIS968/962/961 VIA8235 Intel ICHx/ICH7/8/9 ATI SB400/600 NV CK804的SPD tool.  ICH9的读法应该是和ICH7/8一致的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入计匠网

本版积分规则

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

GMT+8, 2026-7-21 22:11 , Processed in 0.074296 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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