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

Intel ICH9 Memory SPD读取

[复制链接]
发表于 2009-7-21 09:57:34 | 显示全部楼层 |阅读模式
根据bios代码写了个SPD读取,就是不出结果,每次调试输出host status register都是FF,代码基本和bios一样,机器也是ICH9的机器,代码如下: 1 o% W2 K: f( d
5 _; I4 ?  u  u! X
  .model small) `, [9 k, D7 z- l  `; }
  .386
# W5 E" d/ J; t: U7 O/ b$ Q  CFG_ADDR EQU 0CF8h
7 m% y( M2 R3 t! T% g+ @7 p  CFG_DATA EQU 0CFCh% H. `0 d* |" |4 W
  SMBUS_BUS EQU 01 s: b5 {6 c& ^( q# }( n) P
  SMBUS_DEVICE EQU 310 T6 h* U7 J  m0 A; z4 b" T
  SMBUS_FUNC EQU 3
! p& k3 N$ Z: {, C. v9 d7 v  3 |" C% q0 b. i. n& H
  .stack 100h% U. Y" v# N/ u/ y: ~% j
  .data) F& i+ x; C6 L& D  j6 O4 P
base dw ?  ;smbus I/O space/ K* }" z& ?. \* J' m5 S6 `- s
num  db 0  ;byte select1 M- x0 g7 i( S
SmbStatus db ?
6 n9 `% ~" m7 m5 v
- ?) e) S( W8 ?6 m" M4 x  .code
" X2 Y/ o( `2 {' |; C8 V; [ " u; C* L6 }% k3 x8 C% @, O
LF_CR MACRO" x! g: n4 N9 w# A
  pusha
; m1 F% m5 I$ I  mov     dl,0dh      
( S5 w, u6 L. d0 S; P  v5 Y mov     ah,2) l: `! s0 O. p1 D) d
  int     21h+ B* S& r* s9 ~1 C
  mov     dl,0ah   ;next line   & j$ l; b7 G7 f5 i  D
  mov     ah,2
- @6 H- @" X) j- |9 P% F  int     21h5 ^% Q- h+ J) }( L. X
  popa  
* F0 [( n- T. R2 p6 j6 O     ENDM, k+ \: c* |+ D6 M

* \# S% i# t4 m/ m( i* U8 Q9 f
8 M& _% ]8 {* O8 g3 k$ wmain proc far
) p8 H7 [3 ?: N& R0 D  x0 H mov ax,@data2 T5 k8 c1 A" v8 `9 I) S% A
mov ds,ax
4 b, J! M! C8 P: w
5 z5 F3 F8 p+ L  A8 l7 x" B( J mov eax,8000FB20h ;Bus 0,Device 32,Function 3,20h
* L- ~( m' E- x mov dx,CFG_ADDR9 f$ N# P2 T! P6 ~; c0 p
out dx,eax
5 H" \/ R8 U, _' c1 P& K mov dx,CFG_DATA8 V7 V1 R3 W% E6 O6 h
in eax,dx
2 o5 t9 ?+ S5 f/ _  
# M# L5 g0 ~2 m) C4 V shr ax,5     ;bit 15-5,the base address
" p" m; b# w" ^3 u) }# L6 ] and ax,0000011111111111b, z: s& X8 _0 W5 {# J+ p0 w/ W# `
mov base,ax4 M7 p9 s) p4 ?! i8 ^) a
  ( c- @( E8 J2 k  I9 X
call ReadSpd$ c6 [  S; \) E8 Q6 ]
exit:  R. L  F. `1 P! G/ C& s9 u/ P  P- K9 w
mov ax,4c00h* w5 C5 K! \3 C5 S4 `
int 21h" N' b5 H( \& @
main endp9 N, I' w6 H3 }( Y6 G( W6 ]% o; H

& L4 v$ h/ J! r0 j! B) u$ U7 ]0 e

* }) C  G8 z. x% KReadSpd proc
- f& H9 ^7 O3 N  X pusha
4 \5 t) ?8 B$ F5 x! l" vAgain:' F2 X$ ?9 U. a
mov ah,num, V) }  q; ^$ W! d
  and ah,00001111b  `$ G2 g+ o1 i9 S
.if(ah==15d) ;CR_LF& q; t, ^0 [5 N5 h* Y
  LF_CR
7 J! ~2 b& s5 F' T0 j6 A .endif
! T" I6 |: M$ W/ D" \( `' K ! z  V! ~3 p/ F/ k# m
.repeat) |3 j2 u; l" b5 w. o2 t3 g/ E
  mov dx,base   ;reset host,claim host in use
( M  b) |4 O. P1 o) b6 }, y* f, `  add dx,0
% g* ?# N* b- W  E. ?/ y. X1 \  mov al,40h
/ }9 Q$ _" o1 K1 m' `- K7 \$ v  out dx,al
1 B( B! q  f9 A7 b$ m& ?6 y5 `  ; L' l7 L( Y2 p
  mov dx,base   
2 E' J: Y. ?' G7 X$ r+ S+ _( i  in al,dx
7 T  V: A' }& {% W0 d8 u  [" [( A  mov SmbStatus,al
9 E. P7 {. k5 x1 \8 n6 Z  
7 u9 a( T4 }$ L) ^0 f  mov dx,base   ;clear all status bits+ F$ |/ i+ L, b/ ]9 Q1 J6 c
  mov al,1Eh   ;host status register: y, E7 M: d' z1 Y
  out dx,al
) Y) @3 O( ]- v# t) g/ ^  ! N4 E6 s' x: J7 l
  mov dx,base   ;set offset to read
! s+ ~" u& G2 Y' ~8 W* g  add dx,3    ;host command register# g- p: _, \7 G/ f: S
  mov al,num* Z8 m' T, c3 |* O
  out dx,al
- F* B! h! ^: m% M8 R# N  : {7 x/ ~, O; S4 s+ K0 v
  mov dx,base   ;Transimit Slave Address register9 i( M7 N5 e- Z9 D1 ~
  add dx,4" O  }, g: k) {1 c4 s( n* Y
  mov al,0a1h/ {! Y7 L. \) X4 ~
  out dx,al
5 T+ E0 X4 [2 l7 S0 h/ ~  
! p! b) W8 X- L  n' O9 g+ N  mov dx,base   ;set "Read Word" protocol and start bit
( |8 ]8 e5 p! j9 J/ A& H! t( i  add dx,2    ;Host Control register1 O9 @: e5 D7 U9 U
  mov al,48h  
2 n0 ]4 b" t0 w) \3 |* a. Z  out dx,al
$ O5 @) Y. u; H$ i+ J& Q, W* H   R" }' f7 B% l- {$ V
0 y4 j% _  A& k# v) ?- `8 D
  
# ?4 x2 V* d9 ~& w  mov dx,base
- J& R( I; v2 {3 Y1 ?  in al,dx
$ s' c7 A; {4 }7 C5 l& U  mov SmbStatus,al6 e( F" h2 Y2 G1 d
  and al,1Eh+ }) C( ~- P! K/ j; |
  .while (al==0) ;check repeatly until any of
" |' }8 l: k2 g  q; Z/ Y/ r    mov dx,base      ;FAIL,BERR,DERR,INTR
( d2 K6 Q2 {$ u1 {  U0 T3 E. a    in al,dx9 Z9 o9 W" j* z# H8 i
    mov SmbStatus,al4 ^' b2 D3 M/ U& k; }3 ^
    and al,1Eh # y/ O( [; E- {% x: `! ?- ~
  .ENDW
2 I. B* S- L  R- o, d  3 Y; X. I! |4 g- v4 Y; o4 c' T- B! P) s
  mov al,SmbStatus   # K. O; J3 D) f' p
  and al,1Ch
; s4 \7 x( g3 F  .if (al!=0)    ;check for errors  - D7 B8 d* `, j6 E: g* ^7 z$ H2 V/ T
   mov al,SmbStatus: D3 K0 O# q, d% X. D. \5 _
   and al,08h   ; l9 B' s7 n% e2 @: L" f# g& I
   .continue .if (al!=0)  
! L9 \& |7 U& r% w: L   jmp @F  * `% m0 n* O. |8 {
.else
) _' t3 z+ k$ ]9 {  mov dx,base
) O" _' \- A! [: E  add dx,5h/ P" b# A+ d) n* W7 \, O7 |+ P: K
  in al,dx  
( p" |( U4 Z+ ^5 T' L  call binhex
( I) e" P) [6 F/ |6 G  .break9 o: l/ \3 u" C: T8 s" J
.endif
$ p, K, a( T2 w- N- m+ V  |  % j) K# L- Y" B+ J
  .until (0) / I* P) ?4 w& e! C
  
  w1 M% W, H! ~5 y( U: E$ ~* j
* L" }/ \( R3 h2 E0 K. U$ q
) W$ Q, g8 k# \3 P1 p mov dl,20h ;output a space
- _7 E, E+ O' U- W. D mov ah,2' t7 C) S; E! Z- ?
pusha
  Q  p  Y/ A% u  z3 d int 21h
; |+ u& |6 |  m& c) q popa1 m& M7 U& {* _3 P$ ~  I9 V
inc num
+ w' K) `2 d& A; b2 a. E) B/ U. E) e; L$ K8 d0 I% [( j+ J
cmp num,80h ;get first spd 128 bytes 6 |& Z4 F9 v7 [
jnz Again
# @9 z0 p6 h+ ` + B' h, o0 b4 ~; ^
@@:* l, A2 T9 l! |3 l( d2 @
popa
0 Y2 h; ~* [! L0 D- S( N ret
3 I3 G) k5 a, ?7 kReadSpd endp
( A6 S) c) p) d7 a0 s1 C. h* F4 [7 k3 @+ Q3 a2 O
6 b6 K/ E& ~6 @2 K5 X: U# T
3 m/ K2 Y5 T! G3 w7 C6 k6 d
binhex proc / n6 I  g+ J* B
pusha
. |" i; [( O- ?
. V6 K. G6 j/ V+ S5 w mov ch,2 ;2 hexadecimal digits to be printed
. [9 H4 e  i6 d( Lloop3:
2 n5 p$ b' H0 m9 V6 f! t; R2 b mov cl,4 ;bits to be shifted! B4 J" w( i( z7 V0 N
rol al,cl3 h" I0 M  M- }2 y7 |1 t
mov bl,al
/ F3 _: a$ V( R  B. q1 Q1 G+ q: S( \! Q and bl,0fh ;mask the 4-bit Msb
) ]) m$ c; P3 E( C6 t add bl,30h5 ?* }0 G3 [8 P4 C$ G/ W7 ]1 G, J7 G
cmp bl,3ah
/ d8 l  x2 F6 G; p  C jl next1  ;number or alpha?
( \: ~9 @& a4 u, y add bl,7 + a2 I) G7 _) d, p- m; U) a
next1:
8 T, R0 L3 Q. ~- m mov ah,2  ;print one hexadecimal digit6 c" U" \6 x% i; t/ _) {
mov dl,bl
) I; j7 l$ |: \ pusha
  v6 l9 c% _: a4 Q int 21h
  \" n% p1 ?+ G  `4 R9 y popa. O0 {% E$ v9 J; @6 Q- E
dec ch
! |/ a/ s& R9 n' E+ {/ [ jnz loop3
: J) V& t: ^6 v2 V7 G popa/ Q7 ^! ?2 k$ [! t) y/ p! P6 ~
ret/ u5 ~/ }  W! L& R$ V3 I# Y
binhex endp
, s* a; h/ \4 h   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 17:20 , Processed in 0.064062 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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