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

Intel ICH9 Memory SPD读取

[复制链接]
发表于 2009-7-21 09:57:34 | 显示全部楼层 |阅读模式
根据bios代码写了个SPD读取,就是不出结果,每次调试输出host status register都是FF,代码基本和bios一样,机器也是ICH9的机器,代码如下: 7 n# r  }, Y4 B' v9 W2 z; L

$ P4 p0 {, m/ @; @) l9 u! z  .model small5 c# m3 L& U# e$ `
  .3868 G5 }$ @: V# h$ ~5 W) M
  CFG_ADDR EQU 0CF8h
7 i/ i2 v5 n( b: E, h# }  CFG_DATA EQU 0CFCh
6 [" l5 v9 D3 m' D: _  SMBUS_BUS EQU 0" Q4 D; C0 R' n% D+ Q( B! _! f
  SMBUS_DEVICE EQU 31
* K4 ~% z! H3 m$ S1 _$ a6 t" G  SMBUS_FUNC EQU 3& D' a1 [3 f& _' }2 p
    c) B9 n: S# b! R- Y- c( b
  .stack 100h! ~+ g/ x' W9 n
  .data
' t# Y* N: A1 i2 g- w$ g  gbase dw ?  ;smbus I/O space
8 g7 `& D! x5 A9 ]* T& x4 I( Enum  db 0  ;byte select$ j$ e+ l9 J: K
SmbStatus db ?
" ^/ v( S6 ]1 e: s, K% u1 {0 u; K! D% L  Z
  .code
+ b$ v  u+ l, T& T5 B& g* I . z% Y3 p" R$ F4 r/ d  c  B
LF_CR MACRO0 T2 {! x$ `' H7 @- L; `9 w7 A
  pusha6 i. \8 h! K5 x/ P
  mov     dl,0dh      / z/ d( N1 T5 O9 U) f0 {8 k
mov     ah,2
4 i9 I8 L2 Z+ A/ A: }  int     21h
+ D, O  k1 U' u* n/ ?5 w5 u3 Q1 P6 g8 d' P  mov     dl,0ah   ;next line   ) s  J9 `: `4 I* J+ r
  mov     ah,2% w. `. M; m1 p7 }5 u; q
  int     21h
/ R8 z: N7 E8 c" P' P  popa  : L( J6 P8 D) i% K
     ENDM
! A% o  h' i2 a# {; w  f1 ^
* }9 I; z; }. |; D8 _% M3 e7 m$ \
main proc far
* P% j  `, e% { mov ax,@data/ k0 ~. Q: j" N* @% e+ g6 U4 q
mov ds,ax
5 s, R7 |3 ]1 P' i * \; B& E5 Q+ v0 v/ z
mov eax,8000FB20h ;Bus 0,Device 32,Function 3,20h1 N5 {4 m  e8 ~7 g
mov dx,CFG_ADDR1 u' H4 [+ d, c3 {7 S8 |- s8 b2 ]
out dx,eax
9 `: N3 G1 P0 ?( o! Y1 ?* }& [  p mov dx,CFG_DATA
  V- y0 s5 J7 a5 j$ B) ]$ n in eax,dx
# h: ~/ ^, R. D9 a8 G  
7 b) R* A' R" x shr ax,5     ;bit 15-5,the base address3 f, L3 |, G5 z4 j+ u  v
and ax,0000011111111111b
* G# u; N8 J4 W/ Z" W6 k+ w; O mov base,ax
- s" p+ R* A4 e+ e+ F1 [$ f: e  7 C2 m" m9 o2 ], [; T; `
call ReadSpd$ S. g7 H* J- v: y! Z
exit:% T' ]& r/ E! q! D# l
mov ax,4c00h( i6 G, k, F9 z2 M6 }' i
int 21h
9 m: t* ?7 R% r+ O9 l/ f0 E$ b% Q# y; K5 Tmain endp
' m* E: D3 w5 H  w8 J3 g  X8 n, }7 N8 d0 f, x+ p/ l
/ c& Y6 Q/ j1 o4 M5 K+ J1 V$ D4 q6 S
3 J" ~2 f6 `3 O5 ^+ \' l/ t
ReadSpd proc7 H3 S0 o/ P/ v  s
pusha
  B' e1 O% ]7 J# e; Q3 JAgain:
( a9 E( }" u- u0 B  [$ @# N. I mov ah,num
9 N2 x9 s8 T: P' v) |& }  and ah,00001111b6 I: c) g. p) ^8 \$ \/ u, e0 A
.if(ah==15d) ;CR_LF2 B7 n, @, `  p( R
  LF_CR* T  j9 y, D2 Y8 T$ H# [/ v
.endif
$ D7 i% h" w$ E( T8 E: R
. y" `7 `( D1 S- | .repeat
" [* j  u  w+ Z( a& P1 }. V- {& ?  mov dx,base   ;reset host,claim host in use5 K  a1 w$ X% G# ?) Y
  add dx,0) i# D7 J. V+ \8 L, {
  mov al,40h
9 m1 y) T# d8 J, F  out dx,al
( v; \: U# D& _# H' ]- G4 v  * {. N) U# ^5 V+ `# B' y4 q9 Y
  mov dx,base   0 H1 E) E+ A/ _2 D% w
  in al,dx* T0 P7 X# I& @: q3 j. [3 d+ @
  mov SmbStatus,al
6 g9 C' S! o1 b0 Y) m7 I  D  ^  1 p) j; g7 t4 c) r  p  a' A! z! V
  mov dx,base   ;clear all status bits' I+ d* @/ [; o
  mov al,1Eh   ;host status register: S$ i2 q( _- {  P1 e
  out dx,al
# G- x+ k5 ?4 m! ?: v2 J) E  / t+ U* j0 l  R9 h+ Q4 K' q8 ]# D
  mov dx,base   ;set offset to read
" D% X- k8 T1 a7 k9 v  add dx,3    ;host command register
! T: e1 u& X# i% Y2 X  mov al,num6 T5 Q+ x% U: O; K) f
  out dx,al( u: H3 @4 T/ J- f* h2 y7 d
  
: O5 g: u& S, Q6 k/ D, R* ^  mov dx,base   ;Transimit Slave Address register
% N& [& |) {, O1 G  add dx,4! L" H. `4 J6 d& J( h+ {; q
  mov al,0a1h2 c3 n% X- K' d1 L
  out dx,al
6 H9 c9 ~' z% R9 D! g  
) F  ^) [* A5 |0 y* V, z! ~  p8 b  mov dx,base   ;set "Read Word" protocol and start bit2 c8 ~) J5 T9 K% L
  add dx,2    ;Host Control register- g, Z8 ?4 R: K! [, B% G
  mov al,48h  
; c" k' ]( i6 r  out dx,al  y) c' u) z& R4 B  |2 d
" f  o  q& X0 m6 p' ~4 O# q! d

. r+ H* t$ e; {: q! L; Z  
& ^. @, B$ c2 Q0 P7 s0 A% U  mov dx,base
* s; F& x% J! d9 V* B* g% k" O  in al,dx; q+ ]$ S8 F2 `' o% x
  mov SmbStatus,al
' Z, k3 r2 y" e" Y$ V  and al,1Eh
4 x* N) j6 M2 P% b& Y  .while (al==0) ;check repeatly until any of  M/ e3 H+ |3 p# N% @+ L
    mov dx,base      ;FAIL,BERR,DERR,INTR
2 N, ~7 Z$ f% x    in al,dx
& ?2 |) U4 Z2 `( w+ |7 u# X    mov SmbStatus,al9 L2 E  W. @$ r4 Y' t
    and al,1Eh $ _% w" t& v. i; y
  .ENDW7 n8 p2 ~' t5 M8 r0 e. E* v: N' r! E
  9 K. ?4 G) m! j
  mov al,SmbStatus   & |/ a7 ~! S+ h, g. R# S- v& P& x( l& {
  and al,1Ch$ t7 c5 K( s6 V' q
  .if (al!=0)    ;check for errors  
4 ?. l; e$ S- O3 }/ O& |& ], y   mov al,SmbStatus
; `5 {& L( R5 q3 U. ^; X   and al,08h   + ]# h* A& }# _- V6 c
   .continue .if (al!=0)  . H+ k4 B: U2 S( b
   jmp @F  & M& k. R" B7 u5 D/ O
.else* W( h8 h( `8 J. m7 d2 S' m
  mov dx,base! v- Z8 h3 \- N
  add dx,5h. @* C4 l4 b1 g2 N. d3 Y: N
  in al,dx  
! i, L0 p0 `6 ?! c# C: h2 N6 d  call binhex 6 ?" }6 k% L; W
  .break
$ f5 Q" O, ~5 m: E8 M .endif* n) u! f9 w) T
  + }7 _% y" E6 B, w
  .until (0)   }, x* x* @  l% K7 x; {" k
  ! ^  j" k4 S2 C1 o

& Y6 Y' m* [  P- J/ h
3 a5 w( Y% e8 B, y# @6 } mov dl,20h ;output a space# ~. ]6 m, J' m4 }! F% d5 ?1 {
mov ah,2
) z8 R' z3 [+ m! k2 ^4 V pusha- f/ ^" ?& Z6 A8 E
int 21h' t  _4 p3 b6 e1 j3 q6 t. ^
popa+ e( i7 Y$ q( ^/ `1 f2 H
inc num/ c. X8 q% E# k! S5 O9 T
! f% h( V$ x1 q' w
cmp num,80h ;get first spd 128 bytes % p, N; G4 A! a7 D4 M' _- O4 N% L/ B
jnz Again
2 B# I4 N( f5 u( P& n
0 j7 o0 ]& a  S  c@@:
7 ?5 o* s/ R: }0 _& x: ~+ J; F popa
5 R& M! ?( \+ N4 O5 Z ret3 `; y8 P0 `2 g( x. r
ReadSpd endp
5 c- T1 w' K, E! O5 }( q) _$ M) H  o# R) S! M
. u: S: S1 s+ W! B" f8 K
# ^6 v8 ~3 V( U$ D/ `
binhex proc , ~. L" d8 n4 ^4 j6 @! e
pusha
  V4 M# S- i' t0 z: |% Z  M6 Z9 f , ^3 N1 @8 q& J* j* U. p% f4 ?
mov ch,2 ;2 hexadecimal digits to be printed
' B: c" W; m6 aloop3:
4 t2 ?1 s/ [6 ?7 N* z+ | mov cl,4 ;bits to be shifted
+ K+ d5 B/ t5 H1 Y- e, `* s  p rol al,cl
3 o0 U( m- o1 ?% f mov bl,al5 y# v$ _( n, n2 ^/ J* U1 _
and bl,0fh ;mask the 4-bit Msb
2 p/ i* O9 q9 \* M5 Y( w& { add bl,30h+ U' F7 ]5 u  D4 r( |& ?. K
cmp bl,3ah
& [# M& R; _5 Q- ` jl next1  ;number or alpha?
; C. b$ z# o* C" A( n2 ^, G add bl,7 . X+ c: o; c9 n) V4 `7 P
next1: . z- C* [" {" D5 w, [4 L. H
mov ah,2  ;print one hexadecimal digit  d; y5 v3 S1 d( e4 j6 s
mov dl,bl* B( N* y. T9 \% K2 C
pusha
; ~8 n& q0 R4 t. h  ~( Y9 n int 21h
; N; Y: [3 U! c3 M8 Z0 ~7 ] popa- a- X4 @  _2 R  B2 j) d
dec ch
3 @. J6 N; P  B# ] jnz loop3
; L  Y/ {! t8 V2 T) K: F" v& J, Y popa
5 l$ E" W/ c7 L, ^6 q( w ret
, K8 C/ t/ h8 T3 A- J: D( Tbinhex endp# _1 ^+ c$ R, H! z* |9 B/ S
   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, 2025-6-14 05:23 , Processed in 0.080424 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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