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

Intel ICH9 Memory SPD读取

[复制链接]
发表于 2009-7-21 09:57:34 | 显示全部楼层 |阅读模式
根据bios代码写了个SPD读取,就是不出结果,每次调试输出host status register都是FF,代码基本和bios一样,机器也是ICH9的机器,代码如下: + J* y6 X$ d; ^# q% Y$ f# Q

, k- n8 @! h; }9 X6 j  .model small5 m! H" i# ?) @! Y
  .386' V  ?  I5 B" x: G  [
  CFG_ADDR EQU 0CF8h
* K& i" I5 a' e  CFG_DATA EQU 0CFCh! Q) l6 K0 d/ g9 Z
  SMBUS_BUS EQU 0
3 Z' R3 V+ i, \% i3 G3 x3 b2 u  SMBUS_DEVICE EQU 31% l4 O0 P. w9 V3 c/ s
  SMBUS_FUNC EQU 3
, l5 c: g9 _# _* U' J& l  
  a0 y% c, E" S! I3 z: j; x! d  .stack 100h+ d1 u1 J) _# x: h9 A% F
  .data
6 _  K. L" Y. v0 R' D) j; Xbase dw ?  ;smbus I/O space9 E! k% i6 G# e! H# D" `% a  j8 h& R
num  db 0  ;byte select( Z. C1 _( x0 A$ t6 H' {  r1 R
SmbStatus db ?
* _# u& P3 n5 ?1 V2 ~8 s
' w% y9 S* _& y" f+ Q  .code" h1 V* y# y  e0 u. u

2 {4 b( C" i6 X/ ELF_CR MACRO
4 G0 B/ q1 I* j4 I( @, g. \/ O6 [  pusha
# ]& q6 ~0 g2 r4 J! j' U. ~  mov     dl,0dh      
, c6 c# D8 P% B+ J1 R1 k  n- t7 ^ mov     ah,2# Q- P0 Q, C. Q) l' }" v
  int     21h  F( Y& v7 {* v
  mov     dl,0ah   ;next line   9 _% R- }4 p  c" I, u% A2 j
  mov     ah,2
( o; z: w- ?8 d8 o$ v3 t) Y  int     21h
6 G  m3 S( U: u( X2 i  popa  6 [# f& C! M/ ]% \
     ENDM+ e# \9 G5 _9 A3 ^6 i& y

; }4 v( |1 X2 Z
5 v" n" T' O/ |: z3 ~* f, Bmain proc far0 @( Q* h& X6 i/ t) A5 g
mov ax,@data
$ r7 T3 Q, }5 N: C" N5 M mov ds,ax
3 K, y; M+ {0 V" {; B# Y0 H& I
5 I0 r* C# q* \9 C mov eax,8000FB20h ;Bus 0,Device 32,Function 3,20h' \1 I8 w; b, w4 M
mov dx,CFG_ADDR
) n# J+ w! |' a1 \ out dx,eax7 j, F4 n8 c3 ]# m( ]. }
mov dx,CFG_DATA  [; R9 u$ b% X( k* G
in eax,dx( F" i; J9 G9 y+ Y9 r8 R
  ! l& ?+ ^; L$ y5 z6 c8 y3 x
shr ax,5     ;bit 15-5,the base address
" v1 r$ Z; `# j$ g6 o3 Z+ W and ax,0000011111111111b
; w6 B( ]9 f5 n' Q mov base,ax# y5 A& d5 X. X3 ^( G' M
  
5 m* O: ~. _! s$ E9 L8 \ call ReadSpd1 ?8 p4 O5 t, M, O
exit:
1 i/ |2 c6 J3 u. @) Q) F  e mov ax,4c00h' l: y) w  S0 G: w' u' F5 s
int 21h
1 ~7 Z: N$ m8 G+ s0 @/ L* zmain endp
1 @7 L- @( x2 G6 v9 B6 D! U' b3 q/ p! C
& Y" P( \( P( s6 S
- \7 l2 T2 Q3 \6 ~+ @& Q  J! N7 s
ReadSpd proc% t! d2 y5 s2 b6 O
pusha, L; g8 ~# s1 M2 h7 T! `* _: U
Again:% ~/ P0 R5 e/ K: p9 b+ Y+ E
mov ah,num
$ E7 i+ E( n0 Q. e5 A9 L  and ah,00001111b
# Q' w  `2 z) l3 A! Z$ b .if(ah==15d) ;CR_LF
: E  T; ]) t: O8 v' M  LF_CR- K3 Z! W/ r* j0 x" E3 d" R. b( Y
.endif
9 P7 B" K2 I3 \9 A" `' c   n& l. M0 m( x- t$ u% O1 g
.repeat/ L1 H% O3 A4 B% b
  mov dx,base   ;reset host,claim host in use
( ]7 x8 C3 n) i, Z  add dx,0' ]5 K/ d0 X+ ]! q4 `
  mov al,40h
" b/ ?& \. ]$ R+ B7 j* T& O  V  out dx,al! O3 }4 A9 k3 t7 V- u0 j/ [
  
: ^$ b' F# ~' w. v) g  w" ?  mov dx,base   
8 x5 b% e, G0 j  in al,dx) ?+ _* L% }4 x
  mov SmbStatus,al" ~" d9 x* {' n# c
  
  B, @5 ]$ c, f4 k  mov dx,base   ;clear all status bits0 C1 d" P5 G! q0 ~& G7 b1 c
  mov al,1Eh   ;host status register
' C) b7 v. E0 Z# A1 v  out dx,al
# M1 Y2 c' e* R  m  ; g# j  ^2 o: H" S8 V, N3 L
  mov dx,base   ;set offset to read % U. G4 Z, M5 ~* `/ {  b# n& E0 ^) e
  add dx,3    ;host command register; c3 W) L/ L, W0 B
  mov al,num
, ]- ^8 b7 i4 `" ^# M7 A/ |  out dx,al, M: B5 f1 A4 T% V
  
9 {5 n/ j7 `  f. G$ D2 {  mov dx,base   ;Transimit Slave Address register. \9 X+ E8 d7 N2 J" d7 `
  add dx,4% B$ A& h% P8 S0 f  o; i
  mov al,0a1h) V. Q4 P% r" A2 S: d' [
  out dx,al
& l, W; U8 ^' n) J  
: R6 u+ p! l% O, H8 d  mov dx,base   ;set "Read Word" protocol and start bit
, `# D+ A# W8 {. P5 _5 @" E  I  add dx,2    ;Host Control register, ~+ i5 Q! J, M' a1 @- x) H- ^
  mov al,48h  
+ K6 O. g! O) A3 j  out dx,al
' d  {; q# v8 l1 C* Q' S" ~ : I, [8 r3 P* L  P/ l# X

5 f. [: }4 S- p- W" b  . f/ _6 n* q3 K8 X$ J
  mov dx,base
7 k' a" A: t8 Q* L# K7 @$ K7 _& Y  in al,dx/ Q8 e+ }3 U+ L8 p. T& {- h8 Y* x; Z# d
  mov SmbStatus,al
. X8 f, G  {: [/ r! S7 e  and al,1Eh' Z8 ^, B4 [! _. \6 E
  .while (al==0) ;check repeatly until any of, Z( K: {1 X5 [9 {$ e% C
    mov dx,base      ;FAIL,BERR,DERR,INTR. k, E& L/ M5 I8 _
    in al,dx& I5 e- F, o" r$ B4 ]2 l7 ?
    mov SmbStatus,al1 e2 D. M$ j# ?; V6 e4 K
    and al,1Eh
+ w8 L# T5 D% K: ~+ ~5 t% B+ ?- s  ?  .ENDW& u  H: c) v; Z( d7 R
  1 U" v5 n6 f8 L6 H# X
  mov al,SmbStatus   / V* L1 n7 s% N* p
  and al,1Ch
) r! t6 t' l2 I8 |  b4 |: c; m% l/ F  .if (al!=0)    ;check for errors  + {4 u& w" e8 ?4 u5 ]+ ~3 y- u7 j
   mov al,SmbStatus
) `5 s0 [% \6 o   and al,08h   # @: d( o( f0 k
   .continue .if (al!=0)  
$ L8 J' V! A$ ^1 A# N   jmp @F  
5 m+ I* x* U* W0 n" r5 N .else1 @! V- G7 g+ s: D" j* P2 L8 \3 h
  mov dx,base
7 s% m  M. {5 U  add dx,5h+ E9 ~6 @( f! a) B- V5 H
  in al,dx  
) ]% S: S+ Y* N3 V7 V  call binhex
$ V, [3 J% f( F( |: v; I  .break
0 n5 K; G$ e2 ]6 O/ n2 O' X .endif9 o4 a; C8 @3 G! U% x* X% e
  
( A/ T5 c# T6 p# `; a  .until (0)
. Z( o" B/ J. o) U  ( s' `2 Y2 G- X: w# X
' ]5 l$ H9 z2 y9 M

, _5 P: ~9 b8 Y% t: h) }: J# d mov dl,20h ;output a space: L7 Z, d4 A0 Y. Q* h
mov ah,2
: a+ B$ h5 D  P5 k5 B5 _7 J pusha
7 X* {- k; J7 B# i, y int 21h
7 U; C9 Z3 ^3 u: g# p popa( D! a; n5 a. W3 u
inc num
7 }6 Q. o! c5 @  ~/ \- [, j( K7 S* g9 [8 @( Y
cmp num,80h ;get first spd 128 bytes 1 w; ]2 V: n- R; |, ^
jnz Again
& x1 a1 Q5 ]) {6 n) n
/ G/ n/ U. ~8 h@@:- p" m+ F# m1 a0 d
popa6 h( h0 l. w& Q# b3 V
ret
1 C# f' a( K% D' Z( }! oReadSpd endp4 q4 S0 G3 t0 b

: \3 x1 U: T8 ?& l1 \  a
1 O- r( O1 ^6 c; `3 _/ k6 }* Q9 T* t* R# E8 l4 D& n# H
binhex proc
- P! e* X- z" ] pusha 3 K* K' Y7 i0 b2 e

1 S" B% u3 y; ^. B/ J3 C' W7 F. {; W mov ch,2 ;2 hexadecimal digits to be printed5 u8 Z' {8 I4 p# R
loop3:9 f' d! g* ]* x3 F8 G
mov cl,4 ;bits to be shifted
2 y1 x; p$ Y3 V& A) E rol al,cl7 R0 h; x% c5 I/ h/ b& q1 w
mov bl,al4 `  {* [9 m; N' y/ t
and bl,0fh ;mask the 4-bit Msb
; c2 [3 [  ~* @7 J( X: T. N' K add bl,30h2 A% F2 D# R$ U
cmp bl,3ah, u+ R$ U1 j$ R6 T2 c0 c
jl next1  ;number or alpha?
' [" e& K0 ]( \$ o' R3 \) }% \ add bl,7
  O: r) p2 R; `: `next1:
. D6 b  a) Y( o, D; s' N- p mov ah,2  ;print one hexadecimal digit
) p2 V. ?/ T; Z3 B) r mov dl,bl% j- r8 P( F  g7 j5 e7 L) L
pusha: |8 g# C5 X* Y. Z0 w5 ^* j  p
int 21h, w. g- Y0 P  j* Q, w
popa: H9 t9 d% F( D0 h4 A" J8 Y
dec ch3 ]7 [" y, [5 F/ R* h+ u" [
jnz loop3
  Y' _- S2 u% L  ^, G6 Z9 E popa! o4 |/ p4 f5 i3 A# x
ret. m" W( n( P$ ^" v8 m
binhex endp; y  K" p5 Q1 ^( I' r$ \
   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-1-19 00:18 , Processed in 0.306340 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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