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

Intel ICH9 Memory SPD读取

[复制链接]
发表于 2009-7-21 09:57:34 | 显示全部楼层 |阅读模式
根据bios代码写了个SPD读取,就是不出结果,每次调试输出host status register都是FF,代码基本和bios一样,机器也是ICH9的机器,代码如下:
+ u; b' g0 f- v8 G: F
' J: J: C5 N) h0 Y  .model small: M$ V9 L# E* _2 M$ v" d: ~
  .386
+ I; h8 N  Q0 C$ @% z  CFG_ADDR EQU 0CF8h
3 I; O9 }+ J0 p, O( [$ y  CFG_DATA EQU 0CFCh; a7 A  E+ O: t" C5 N8 Z
  SMBUS_BUS EQU 0+ P: `4 n9 }! d. b( u- @
  SMBUS_DEVICE EQU 31+ N% a9 t9 ~% k& P( r. @
  SMBUS_FUNC EQU 3
$ ?, I, V) D  M/ ~, B7 _8 `, X: W  
' I) _# ~$ S) G; q$ b  .stack 100h- Z9 ]0 n& d: F" A4 }7 ~
  .data
) q7 ^1 @7 g. P$ U' j- I& q2 A+ cbase dw ?  ;smbus I/O space+ g/ f6 L3 |7 W4 m3 R9 {5 u7 N
num  db 0  ;byte select
2 W! N5 S. r2 Z* D4 l9 ZSmbStatus db ?* F% t: p. r7 d3 R. }4 |7 a6 J
  H' ?' ~3 A4 N3 `2 z
  .code
4 ^' l" X+ z1 z( M9 E- Q# v5 R ! k: L5 Z+ o& U0 M
LF_CR MACRO$ Z& L$ b8 m4 t/ U) V
  pusha
# t; p5 q" `- _* f0 i* z  mov     dl,0dh      ! g) }3 [" c" V% Y
mov     ah,2+ W6 g0 K. u' M
  int     21h- ^6 T' a2 ^# H( b+ Z% j
  mov     dl,0ah   ;next line   8 V, G6 k4 a6 {
  mov     ah,2
6 M# x, Q7 R% Q$ e  int     21h  j; m* v+ K- I; e8 c0 E+ F
  popa  ( ?) }# N2 A! a
     ENDM! j' _1 k: l/ j) t) {) e

  B$ I- P) [! r( T4 N
$ P. L9 K4 e2 ^) i  Qmain proc far
/ H2 R/ g8 {2 I( Q$ k" D+ ?# y mov ax,@data
+ c& E# S7 g" V8 h: G$ S& s2 ^. e mov ds,ax( ?/ i3 P7 t5 J6 u

: B0 b* a2 q2 w/ [ mov eax,8000FB20h ;Bus 0,Device 32,Function 3,20h
4 u; j: n9 G& D3 S% h mov dx,CFG_ADDR9 V$ H1 V$ u3 @% U: q* ?
out dx,eax
3 _, g( A/ o+ H9 R7 h' @( m mov dx,CFG_DATA' G' c; G: M. i$ ~/ v9 `
in eax,dx- `, y+ d0 @; ^# Z
  + N( W+ _9 ^# Z* k, U
shr ax,5     ;bit 15-5,the base address
$ U3 j/ J* S# i+ f4 Q and ax,0000011111111111b
8 a7 B1 l* v1 T: m. r mov base,ax
. T: @8 a: y' l8 T( l# K  ( e+ f8 d( P" i/ C; V& Y
call ReadSpd
& @, y" H) U' |* e& I# N9 eexit:
/ S) d: d- Z! l" \ mov ax,4c00h* l; y% o$ @4 A0 K. K, I
int 21h/ A- Z# k/ y- p+ B/ T
main endp) p0 b7 [- S6 m. B* q' Y4 ^5 |

: X) a2 o( N; e) i  {7 [
4 C4 N, Y* X/ Z6 g8 \5 @
8 M, ~, Z" {4 `2 P9 }' dReadSpd proc
- V. i6 j) O  K0 {5 G pusha
# x: r: o7 S! j1 S/ eAgain:
; P! f* r1 ?6 r+ {3 O3 ] mov ah,num
" i+ \5 u% c0 |2 I  and ah,00001111b
$ U( B' }6 y/ a1 W .if(ah==15d) ;CR_LF
+ o# ?3 O3 p5 H. f2 Q; Q  i  LF_CR4 [# Z! T/ i$ g6 ^: v' R7 d
.endif
9 |6 K5 k" D  u7 w) ` - x& M0 `; ?5 |* c+ G
.repeat
% \$ J3 x) b1 U& k  mov dx,base   ;reset host,claim host in use! d/ h1 @0 n8 B3 u/ m
  add dx,0
" y" a5 I. a. G  mov al,40h& b! P" E. v& \& D7 Y5 @: Y
  out dx,al
8 I4 u* T1 O0 Y  
+ T2 q3 y& U* Q  |  k  mov dx,base   
, x: h8 C0 r$ D' a0 L  in al,dx" o+ `+ y- q5 [# _% P5 T
  mov SmbStatus,al
  |5 R/ i1 P! w  w. \  
6 k! v5 [  F7 c! }( ]& A  mov dx,base   ;clear all status bits
' O. e( d0 ?8 A5 F8 X) ], m  mov al,1Eh   ;host status register
6 V- K2 }' X& [  out dx,al* U  T8 X% l( R  O) I/ k7 K
  
$ v, @! O# f6 g( G& a2 A1 r2 Z/ }3 G  mov dx,base   ;set offset to read
1 m' l5 ]9 I* T) h; F9 [  add dx,3    ;host command register
3 T7 a( x3 a+ M- W* E* u  mov al,num/ O6 J! M4 E& q2 y2 ^1 }' c
  out dx,al- G4 @" x# u% }
  & x- P: F9 ~7 b* ?! i: W% ~
  mov dx,base   ;Transimit Slave Address register
  l% K& Y7 `5 ]7 X  add dx,4. y6 N" @+ N' Y4 Z! T  R
  mov al,0a1h7 g) R  ^  e$ Q# G$ ~# X9 l
  out dx,al
- V3 R. }; p# T  
' Y: ^/ K) h% ]* B  mov dx,base   ;set "Read Word" protocol and start bit; e. B& V; q% C  B4 ?0 p* a! s
  add dx,2    ;Host Control register
4 W' X. S, u. ^* {+ z8 i* y! [1 Z  mov al,48h  1 _& O4 r# |5 {
  out dx,al
- _! q5 Z; d' X8 m 5 L; D' b( K( P. ?% `# B; Z. q

% ?* v/ z) ~% @4 Z$ {  # ?# L2 z: A4 a2 I
  mov dx,base
8 \3 N2 X3 @* l7 I. O  in al,dx' Q0 Y, E4 R! ~/ }' z
  mov SmbStatus,al- z5 K+ T/ H7 z5 l9 Z. ?/ [
  and al,1Eh( K6 n$ @2 `5 D. ?/ p: S
  .while (al==0) ;check repeatly until any of
- x* |. q6 Y! Y; h. m    mov dx,base      ;FAIL,BERR,DERR,INTR/ Z" ?; x4 x- b: B4 l5 o3 g
    in al,dx
! [4 v( y$ S: T4 E* ^7 e: }, g    mov SmbStatus,al
2 F0 E3 M& q+ C0 h  O4 f    and al,1Eh
! M) K9 [  |  N% q- {0 k  .ENDW
6 R% P+ f9 x$ B5 g' ?6 N/ y  
8 e: z( }& J$ |5 z) m7 r2 D  mov al,SmbStatus   9 M, y* M  C/ C% t" A& o
  and al,1Ch
" ^4 z6 l; T  h# d4 Q  .if (al!=0)    ;check for errors  
/ V! T' S9 p! H6 z) U: d   mov al,SmbStatus
  U4 Q0 a  Z. v8 Y" Y" [3 h1 w5 W   and al,08h   
) [+ p7 V( R9 U9 W   .continue .if (al!=0)  
% w6 g5 O0 l) X  f7 @- L6 @: y   jmp @F  
. s9 Y# c6 E7 A  A .else; y5 ^2 e! Z& B: H
  mov dx,base, f* @  s& x7 D: Z% }
  add dx,5h- B( m* _/ M) V9 r7 g' a
  in al,dx  
) Y# d/ z6 o! ^& g/ T: \  call binhex
, r' @" w$ c  r3 ^$ \$ r  .break. C: Y4 [2 }$ K3 v8 {' b. @
.endif
; j6 n2 ?( L" h' `; b) W  
. t* F" X+ T" j7 k; d# \  .until (0) 5 O# s2 t2 k6 ]4 I* C$ R) k
  
5 D0 u4 }( w3 U; y6 r - y, z  [% {% ^& }' G3 ]
! v: @4 D+ B2 Y
mov dl,20h ;output a space
3 T. y" ?0 u) E3 m mov ah,2- Y" F* a: j1 s- m! m
pusha
' }5 }6 g# M2 F: P9 |' m+ o5 | int 21h
+ J9 ~1 Z2 m2 a. r popa
' m6 t6 E6 q! P3 X inc num) L; D: C. _& c5 x; T8 M6 K, ~
7 q; I: \! A* t1 X9 r' _
cmp num,80h ;get first spd 128 bytes 9 Q' a$ @) c# D9 s5 i
jnz Again4 L% }5 _! P" }0 f: A5 F
% _1 ]+ j( J3 p& c+ b' h+ X/ b
@@:  P$ l- N* R* Y' D. W4 ]
popa, G7 |$ r) d9 l2 _. }* m8 S' l
ret
% H  C/ U% c. kReadSpd endp6 p5 y8 J. u" E- x8 Y3 b* r3 r/ c+ t* n

3 a! d. u2 J$ \0 p3 `
) ~2 V' u5 o2 {3 F, e5 `3 g- U' [/ @" Y" G5 n; w( B' X
binhex proc
. t+ p1 y7 F+ h pusha 0 r+ i+ {- p2 A- L/ p1 T

5 r2 A. |$ R4 p( x, s) \% h" G- L8 c! H mov ch,2 ;2 hexadecimal digits to be printed
$ _# N+ g4 w8 h  N) h) Eloop3:# i$ ~: g8 f! w5 @/ Y8 u  d
mov cl,4 ;bits to be shifted) P* U* f# J) d1 |  m3 |! A
rol al,cl4 R9 _, n' u& H( E
mov bl,al
! `& y+ V: e- b8 J/ X  z and bl,0fh ;mask the 4-bit Msb
; \4 M: J& Y) K# b9 p0 C add bl,30h
$ v( J1 z- j7 Q$ q* j cmp bl,3ah
5 F8 s+ B2 |# H3 i jl next1  ;number or alpha?" I5 F6 o+ V. y* \# W5 m# ?* ?
add bl,7
; ]4 w% a' P0 }; B, p5 f( Cnext1: 2 @+ \1 e/ \6 G& H
mov ah,2  ;print one hexadecimal digit
  t1 {: Y. i: h' a& A" ?. `. t mov dl,bl
4 b, M6 X# \& B! l pusha
# B7 I% {, O0 X' A% X int 21h
6 a  e% _6 o$ I popa) |0 C+ ^3 w' b2 y+ ~) j4 S
dec ch
! s4 V( c" P( O( q jnz loop3/ t; ^% W/ Y: n: \  w
popa0 Z, C) |: P- K, r# E2 i: K! h5 S
ret0 e9 F( |8 V! K* U
binhex endp
/ r! }, Z8 p7 Q% i. m# G   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-12-21 18:49 , Processed in 0.143714 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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