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

Intel ICH9 Memory SPD读取

[复制链接]
发表于 2009-7-21 09:57:34 | 显示全部楼层 |阅读模式
根据bios代码写了个SPD读取,就是不出结果,每次调试输出host status register都是FF,代码基本和bios一样,机器也是ICH9的机器,代码如下: ! q( U. m& S" |9 V! n
: b2 n$ S0 i3 y* ?1 [# t$ p
  .model small
0 r3 G+ x# \4 t3 \  .3868 v: x2 C& @3 u# e" N
  CFG_ADDR EQU 0CF8h, b& {, P1 O. I* A7 X
  CFG_DATA EQU 0CFCh
( d% ~) R  t- Z8 q/ v  SMBUS_BUS EQU 0
/ R) a( |0 ?0 ~& C' Q  SMBUS_DEVICE EQU 31
7 T5 }" f7 F# v2 B; ?  SMBUS_FUNC EQU 3; x7 `/ ~  A6 h9 G! c% N
  
: u6 I' \1 j# m% g. E1 z* E, {7 R  .stack 100h5 T, p7 ?' D' g9 H  S: L9 p4 X' V
  .data
3 i7 [/ f! L- t; J0 y# Q" [, J5 f! P# Mbase dw ?  ;smbus I/O space/ O7 w2 x. e/ x) K/ z
num  db 0  ;byte select* ?. l/ ~0 x, Y4 W. ~" L
SmbStatus db ?. g: p( ]' @& e1 z

1 R" E$ v. C8 y3 R" ~1 K1 s  .code
: r7 U: [" V) a/ b
" _4 z( ^1 v6 g# {0 d4 jLF_CR MACRO
4 L5 U  P1 C1 S8 @' E3 u0 j  pusha0 L' l- E3 O6 P# C
  mov     dl,0dh      
/ d+ f; G, _8 A' B9 U mov     ah,2
; ]+ L) \+ ~8 r3 b4 S( \  int     21h: }% z6 M" D* P, ^3 h
  mov     dl,0ah   ;next line   
% Q& e+ Q- }: h( p  mov     ah,2
/ w  y) w; {% C& J3 j  int     21h
7 X! |8 |4 H1 B) G0 g- r  popa  9 Z+ g8 t: d2 `' G: J1 {& M) y; y7 p
     ENDM# ]. S+ q! e, Q1 a
" r" l( {7 c7 s& _+ u0 L+ a
6 u$ r) A! o# `& B9 S3 R0 j
main proc far
- u% k5 g9 W# {5 U mov ax,@data
, w' o1 z  l! x( U' ^3 c& w( S mov ds,ax9 X' J6 H0 z) Q$ O2 G
) \2 |6 H. x3 B# b
mov eax,8000FB20h ;Bus 0,Device 32,Function 3,20h
# X" c. k% V0 P* t! ~ mov dx,CFG_ADDR
, g9 G6 q2 {& s+ J out dx,eax
% d# |' Q$ ^7 @# A/ Z mov dx,CFG_DATA0 N3 X( L; Z; _% X0 P* g" s- c
in eax,dx  N  t- a) U+ p! u# x
  
- H% J, {* B1 C. s: I2 t) f( H0 k2 w2 B shr ax,5     ;bit 15-5,the base address
* \4 _& l- f6 b- R: q and ax,0000011111111111b& ]& @9 X+ b. S) \3 |; }
mov base,ax
7 t* j, |- s. m# f  ) \6 I  |! f* j
call ReadSpd
- H! y8 g" {5 J$ C: X' `exit:2 ^! o- L% l0 _; `3 L
mov ax,4c00h
  y* \* P/ r' X$ L6 J1 r int 21h8 F: e* ?2 c6 e" Y/ T  X9 J
main endp) g& B; Q% O3 p* J( @5 |; Z! }7 T
/ H, x% n, ?$ r% \8 C
0 f& R# X: u6 E; q

3 h, W: a6 i1 T4 u2 F8 z" YReadSpd proc! m: Q5 h/ d" a! `, f, G2 c7 o
pusha# e3 q/ P/ m2 M% U
Again:6 X5 j9 e8 Y+ T. U7 ?5 e% g2 ?% V& ^6 c
mov ah,num
6 B* i+ S5 k2 Y  and ah,00001111b
' v7 a. k; O* _% N/ B4 ~8 P( `) f .if(ah==15d) ;CR_LF
' z' x1 E3 O: c2 M  LF_CR/ t6 X" K" N3 Q, {# g0 q6 v
.endif
, N2 s3 S' _+ H 8 M. J3 r3 e+ u4 O7 t* G
.repeat; R# q" o6 q$ N7 R9 E, Z9 I2 I
  mov dx,base   ;reset host,claim host in use
4 W4 s- M# m) b& ^# p+ x) h  add dx,0
2 I4 L2 n# y1 w1 d" Y  mov al,40h
/ V& G, X( u9 ?& b  out dx,al& r& V2 `) ?$ k) F
  
" Y8 T% e/ ?( M- a" l  mov dx,base   
; H2 H6 `0 D1 h' d) K8 c  in al,dx
* i; K, o$ e( t  p9 a+ G0 ~6 \* B4 ]  mov SmbStatus,al  k8 k: l/ X/ P6 I) A
  
# x" q" C: M# e: `- O  mov dx,base   ;clear all status bits9 ^: q$ {/ N) n8 C1 J6 {
  mov al,1Eh   ;host status register4 m& A7 \7 e- N* ?% _% S& W
  out dx,al
& o  _1 k! @7 _' M! Z( B9 K% N  
- q" O8 P0 A' ?& Q* ~5 \+ P# P3 a  mov dx,base   ;set offset to read
5 V6 l, c9 ~( Z; O/ Q' m3 ^+ _1 P  add dx,3    ;host command register# n. t6 J& R# V) v" `5 c0 y
  mov al,num
1 f' P% U& ?+ h, F4 K5 A! u  out dx,al; T& L4 H8 H9 z4 i4 w( C7 I
  $ R: X: {- `; m9 ]1 z7 U6 d0 ]
  mov dx,base   ;Transimit Slave Address register& N4 U4 a5 q' j% y9 U" [
  add dx,46 U- h7 m5 d# @) ]& ^3 f$ Y) X
  mov al,0a1h" C# ^1 w% u% C( v1 _7 ]
  out dx,al
8 b& r: i- [  O4 M$ Y0 }' n6 ]) {  
% p6 q0 B: k& N8 Z  mov dx,base   ;set "Read Word" protocol and start bit  i1 i5 z; K! J
  add dx,2    ;Host Control register4 H! Y: b. C; e
  mov al,48h  
; E5 L) T' r- j8 {  out dx,al
! E  y# X5 \! e% u" ~2 w5 Q
4 O+ X" K' o3 r' y% O2 H- @' r
$ s% a  v! W1 D+ a- R! d4 n( v  % ^! H6 G% p: a* Y
  mov dx,base
0 Y5 c* f' E; I( q  ?0 E" g- X/ Z  in al,dx
; L" b4 L5 B0 G5 V2 ~' w  mov SmbStatus,al9 {* F0 ~) s* b" G' ~
  and al,1Eh
& A/ }3 A+ v4 C7 F' \  .while (al==0) ;check repeatly until any of2 }; S1 L/ a/ A. N! c. U& r
    mov dx,base      ;FAIL,BERR,DERR,INTR. ~2 A2 `. b, N8 h0 @2 H% y
    in al,dx4 Y1 Z( E: g2 q
    mov SmbStatus,al
. ^; @# e: s( s  z+ {+ ~; Y. G    and al,1Eh 7 F; B; f: q& W( p) y
  .ENDW: ?% U% d" E( R: ~7 D) a! ~
  ) z+ C! T' e# L' Y! V" r
  mov al,SmbStatus   
+ p8 H/ k7 f- X! S4 r  and al,1Ch
/ R8 T4 ]! ?1 M4 ^0 z( w+ f  .if (al!=0)    ;check for errors  
/ P) ?/ r) L9 i9 G6 m/ z  `0 s+ a, S   mov al,SmbStatus
9 M+ G) [9 W% R/ }2 r1 h( g! Q   and al,08h   - H. I$ W5 u4 J* V0 t0 F  i
   .continue .if (al!=0)  9 G  ]$ P, F9 P7 ?! c& I
   jmp @F  - C% S+ X) y. V
.else
$ [: |5 Z/ j- K  mov dx,base0 x) j3 y: X) s$ y5 J. U) [
  add dx,5h/ c6 O* S( X. x0 b0 D
  in al,dx  
9 T1 [1 N! {5 U3 K: R, ~/ W  call binhex
  N: v: J9 u6 E  .break5 A! r# C) t/ ]) m  {
.endif9 O8 x) h( o5 T6 y; U
  
6 Q  E2 i% I( D+ Q: L. s  .until (0) 4 n% S; P. h8 O5 \. A1 H
  + Q8 h% M% H6 N  z8 p
* A5 Q; X. @: t* t9 j7 ~; t
% |5 d3 k6 z- Q
mov dl,20h ;output a space
  j5 [% f) R% D, m) x: x! Y mov ah,21 C6 e+ c' b" ^
pusha; t+ h6 ]' N1 J6 a) x! {2 H
int 21h0 }2 i' V1 U4 [1 C2 Z( E
popa2 b" r4 Q2 u7 J; }  P$ I  O1 A: B
inc num- K/ |% i& Z& j+ i! i: p  \

) q8 {& C# m$ S cmp num,80h ;get first spd 128 bytes
3 m1 T7 ^6 H5 l& a jnz Again, e: ?" z0 y5 t2 w$ r3 h/ O: {

% J) R0 c$ l: D/ b. P$ T@@:
/ v9 d. q- o) |  P: a3 j popa
  S  l3 [- {$ {: @ ret
' \% r* r: E" a! H4 @5 CReadSpd endp
3 p2 Q  y3 r; l, z
6 t$ I4 W3 ?: T; P" Q% h  ]/ q+ E! k: X

& p6 t, p" `! [6 [binhex proc 3 [/ b6 E6 Q+ V: e6 q( h3 U: ]
pusha * I' p: L1 B9 y, e# b8 f- H- `
3 ]) B6 `& e4 q: {; a+ j( d
mov ch,2 ;2 hexadecimal digits to be printed: c& h' Q+ s5 e- A, Z" Z: G( {
loop3:3 c; R! T: n: D% k& k3 m, w" ?
mov cl,4 ;bits to be shifted
5 w5 B) d3 i! Y$ c( U rol al,cl0 w8 K" {: T6 m8 |
mov bl,al
- ?  R3 W3 q. v& D and bl,0fh ;mask the 4-bit Msb7 `! j1 w7 A& H. o
add bl,30h# x* k8 q3 m) o  N4 l# r- x
cmp bl,3ah
- {+ _7 R! T9 x jl next1  ;number or alpha?4 g4 Q) j7 x* t0 L8 p
add bl,7   b% P7 y" w* @! A( q, Z6 L) u$ F
next1:
1 ^) G, }6 b5 m) ]6 r/ N mov ah,2  ;print one hexadecimal digit
0 @' F* [, N* q) Z mov dl,bl1 \. I1 T- H) n  F% q8 ]
pusha
4 d! k9 E) h* z  \  [  |8 Y+ R int 21h. `: i5 b; D& S3 t6 I) F
popa1 s' P. a' w3 Y& k1 D8 a( O
dec ch/ n& B  h; J) F* I4 G& c0 t) }  I
jnz loop3
# b' \+ W) T' V: ~ popa
: Z& `* A/ t% o, P9 ` ret
6 O8 `/ g" g. }- a- W0 F6 R$ gbinhex endp
1 f; h% U4 ^$ ~+ n   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, 2024-9-21 06:15 , Processed in 0.022533 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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