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

Intel ICH9 Memory SPD读取

[复制链接]
发表于 2009-7-21 09:57:34 | 显示全部楼层 |阅读模式
根据bios代码写了个SPD读取,就是不出结果,每次调试输出host status register都是FF,代码基本和bios一样,机器也是ICH9的机器,代码如下: , u& K; K! {8 q& y
) q  ~, }5 m1 }* y* D
  .model small) X8 k0 b' Z! i& u" U3 N
  .3864 e$ ~# Y! E4 n# x8 M! s2 G0 a
  CFG_ADDR EQU 0CF8h
# M; o9 T. V( h6 c  CFG_DATA EQU 0CFCh2 U# B; l, Y) g+ c
  SMBUS_BUS EQU 09 K+ x3 k& L* Q* \9 m3 [
  SMBUS_DEVICE EQU 31
1 I) r- |8 r. F% s! B  y: ]7 [  SMBUS_FUNC EQU 3) [: w, k2 ?& y( o/ ?
  
: D. T- O& O) y& Q7 k2 j  .stack 100h1 O7 c' l/ D0 F) W0 h" o- |
  .data4 s9 G' z! }" q' \/ J
base dw ?  ;smbus I/O space. u: i: U2 b* m! j  Z
num  db 0  ;byte select- A/ L! h* x7 S0 J" ~
SmbStatus db ?
6 {+ {& a( h& B
) t1 t9 N. u# R  .code
- {4 B1 ?- I  H" G+ P5 A6 y
: X+ C7 g8 z+ p& Q: O: ~* kLF_CR MACRO
: R7 K6 p  [& r7 h. q0 B6 X  pusha
8 `  X9 V: M6 T; }* i  mov     dl,0dh      
5 r$ D" J5 @% D; K2 T+ a# j1 v- t4 k mov     ah,26 Y6 W4 n- g" c, i8 y, e! y
  int     21h
" d3 F' p  b3 `4 C  mov     dl,0ah   ;next line   
  x( j' J' G% B$ I- F$ T0 X  mov     ah,2
5 w; C* M( e# N8 G7 M, I2 D! {. N+ C  int     21h6 Z' U( q) n3 I1 S* d: k
  popa  
( u) M  |- ]5 t8 t; d9 P" A; [- l     ENDM
( d9 B% V  D" S! a  F6 n% q$ Q" ~1 g0 C' F# G% u+ A& F( y2 q( e) @
% D# u8 w9 D' A9 S, l& ?
main proc far$ q9 L' m, i+ G
mov ax,@data
% Z' p: h7 Z8 D mov ds,ax
+ x5 o4 G6 P8 `
2 t0 e9 t  W$ b+ m mov eax,8000FB20h ;Bus 0,Device 32,Function 3,20h
6 C5 }* A: _' {0 U3 x5 ~$ X, \1 x3 { mov dx,CFG_ADDR
7 e+ G( i# ]5 a4 }) a+ W out dx,eax; Y9 m6 k: p1 p0 I. e; z& }& x
mov dx,CFG_DATA; A3 D; Q1 o$ M' q: @; `9 X
in eax,dx3 d% I8 B9 f+ v, m2 w% S
  , m8 p0 V. Q2 c* R* c% ^/ `
shr ax,5     ;bit 15-5,the base address1 M, b) G( X6 d- P
and ax,0000011111111111b
8 ?6 Y+ y8 N4 P9 P mov base,ax
# a( n$ d, u7 Z7 W% Q3 l  0 |" q2 D: S1 K6 u
call ReadSpd, n5 }/ G- r7 B" _/ v5 p
exit:
( C/ y# s' C/ T% B" B9 h mov ax,4c00h1 ~' i1 n2 B8 n7 D& F/ K. \. L$ X, _5 B
int 21h" B5 C; G. y! _1 d# \
main endp
" q: _: E/ e) p; I" F2 b6 Q- h1 C" Z7 E4 K+ n# X
8 V( c8 m/ r( A8 q7 @4 _
! {9 R; K% V* t3 t
ReadSpd proc( O7 V- S/ q7 H4 Q7 q* f: M
pusha# G  a; J; z7 s
Again:1 s) \+ l; v5 Y/ x3 Q
mov ah,num
$ m. F; q" R, v  r  and ah,00001111b
5 N* @  k/ R2 E, A  A .if(ah==15d) ;CR_LF' N1 b/ N3 V- b0 B8 [
  LF_CR# \" h5 u0 u5 V" B$ G& r: F+ x
.endif
7 X' P% u- W2 X2 [/ p9 ~, \
  D- j$ m, M! J .repeat
7 u6 q# Y2 I2 r  V5 L$ |( N  mov dx,base   ;reset host,claim host in use' }8 F8 w" t3 j2 I- k) d
  add dx,0
' d' |6 ~4 x- B. Y1 ~6 w" a% r  mov al,40h  a: o8 ?: T3 R, C: {" G" |! ~
  out dx,al2 w0 D9 Z& c6 B5 J. o- m
  # F; `: B! r5 z7 b6 x* p
  mov dx,base   
+ y, [4 Q9 J& W7 ]  in al,dx
; L9 j6 V% D: C7 q. R2 @/ R  mov SmbStatus,al
2 h5 n5 U0 l+ Y5 V0 B5 N6 q7 ?+ `  5 i0 u+ U6 v! j: o8 q" |. g2 X
  mov dx,base   ;clear all status bits
- D. I8 L$ j/ u' z  mov al,1Eh   ;host status register
4 \+ l$ h6 e: c, _  out dx,al+ q! A( C2 E; a$ K2 m6 }+ i' F
  & w) T7 v5 ?: k. Q
  mov dx,base   ;set offset to read 2 G$ h& l8 H2 `3 J0 l1 p
  add dx,3    ;host command register
, C3 @. P( b1 V4 T7 t$ n( O  mov al,num
1 {3 Q$ A5 t+ @1 i& r  out dx,al
( c. V& _/ l+ A( g3 s/ ?0 L/ o  
) G$ e$ @0 |8 @( \  P  mov dx,base   ;Transimit Slave Address register
4 D* B9 c: m* s+ C6 o* j+ a4 Y  add dx,49 N4 N, U" y3 ?3 }  s! \8 q, A
  mov al,0a1h
, u# U$ X7 M  L  out dx,al
4 l3 X  T8 S8 j$ P# w7 x9 \  $ \& J) }/ z7 E* a7 M# o( Z: j
  mov dx,base   ;set "Read Word" protocol and start bit
' r% V, Z  s- S! g: H# _  add dx,2    ;Host Control register# k6 j# d8 C  D7 `/ }
  mov al,48h  0 o. E8 V: w& g; f7 h/ d
  out dx,al
+ l, h/ ]  K$ x5 W
' R9 a  A2 K. f& l- N" x* F4 E7 ^, y9 s0 o8 l  J0 U  `
  
5 `9 D8 r2 T  ^# i2 l  mov dx,base- B# E# v5 j- ]+ I* L: W
  in al,dx3 _: _5 P4 G# U3 _5 M4 z2 F
  mov SmbStatus,al( ]. U9 I& r% G3 O# _8 V0 u
  and al,1Eh3 q& b8 o/ ]# ?" v8 @
  .while (al==0) ;check repeatly until any of0 y3 v% v/ ?3 s8 l
    mov dx,base      ;FAIL,BERR,DERR,INTR7 S( Z( O6 w8 H' ~; ?) f0 s
    in al,dx5 D8 {/ S2 d$ j. J
    mov SmbStatus,al* F0 J. I$ J  G8 o. d! v) q- D
    and al,1Eh $ s. P6 ?/ G+ P
  .ENDW- [0 j) v- d' m  K! g
  
. W% }$ L) c- H, _. h) q+ u2 S: _  mov al,SmbStatus   
  k) S/ v* {6 A7 @( B' M( G3 U  and al,1Ch
( ]3 I, E2 W2 n  .if (al!=0)    ;check for errors  
" J8 b$ r9 a' Z+ \; j8 r   mov al,SmbStatus
" x2 A6 g& w6 k4 v   and al,08h   
+ \' c" x4 U3 ~+ P3 a: d/ s  q  d. ^   .continue .if (al!=0)  
& a2 q' }' ?4 S; ?: }4 }   jmp @F  
9 O+ m8 c8 A- I3 P/ V .else
4 N% A/ D, T1 I  k) @7 @, J  mov dx,base- b7 {4 W/ l/ s+ h  ]
  add dx,5h
5 S# V! F2 t0 y6 v# o/ U5 y  in al,dx  ' ]. L5 W8 f& U7 M* d2 q! C
  call binhex : i, F+ D- h7 G/ d. U, ~2 g# e$ E* i
  .break
( F  T2 o; H' J+ C1 x .endif
0 W1 c0 h( U1 k' X$ ~# i& y! h  
- Y2 u0 g& g" ?  .until (0) / |  K0 G7 R0 W
  2 G! ^8 {0 l  D; J

% M( |4 [& ^# a, [/ V. j& g9 E 2 f2 H4 Z% f, B, `: j4 q8 w
mov dl,20h ;output a space( F* n6 M4 }( v" [
mov ah,2' r1 r- p. `" X& L" E
pusha& U- A( C) n. p& k4 X# ?
int 21h
1 A9 H' Q" J* `( s popa' h" r' X4 w& L$ y; t  r& _3 S0 l
inc num" Q! l/ Z6 I# B% q8 T

$ l0 u  ~' O- Y9 m: i* w/ P cmp num,80h ;get first spd 128 bytes 3 I" m, c) p& q" I
jnz Again: e, Y" Z' ?! {; S9 |
# r4 y* V" l9 i8 M9 ~- Q
@@:
$ D) d# P7 Q1 t popa- I3 F% _0 _' w/ h, W1 Q) v
ret
# _6 B  P4 s% i# T) t5 s; F/ Q& I, vReadSpd endp
2 C- U& T0 O% X* B: `' c7 O
1 {) ]% G3 L+ ]" v  Q! n8 k* d) Q( _

' U9 d9 v( I6 N1 S7 ~1 f$ obinhex proc % b! T2 F% W6 F+ }
pusha , q; ?9 k/ p0 }: p; v5 o- t( ]+ k. @: K

4 J6 i  H! n& ]# T- h9 M; i: C mov ch,2 ;2 hexadecimal digits to be printed
+ ~0 K$ t( d& z! Kloop3:, W- |4 Q  d+ _/ b1 X0 Z
mov cl,4 ;bits to be shifted
, W- J" n+ Z% H% `+ R& a3 f' [% U rol al,cl
( W5 P7 z& A/ V' P mov bl,al! H" B! e+ Y. s  t  e& r
and bl,0fh ;mask the 4-bit Msb
5 e! R  w8 Y* G! J add bl,30h
5 g8 ~' }+ v; E& V2 ]8 x cmp bl,3ah% g$ [$ }: x( ]1 `0 H8 A! i$ S% |1 C
jl next1  ;number or alpha?
* d2 i) k- s+ {# F$ `; D add bl,7
8 n- c. L# T9 Q5 u! x/ \next1:
: p1 H  G1 d& m& @# Q# Q7 U mov ah,2  ;print one hexadecimal digit
. m+ E% i; F$ _ mov dl,bl
" _1 Y0 n3 f) e+ b( ?* Y pusha. N/ k$ C: V5 [9 [. s
int 21h3 g( V- p. [# G5 y( J# q
popa( V+ r; Y, w/ V
dec ch
& e" H& t& Z3 p! W0 Y7 k! J# F1 v) x jnz loop3) U8 Q! G! I8 u4 O8 m" }
popa
0 W# B, B9 a$ ~3 X5 M* X! N" m ret
: w3 R# ^# `3 t9 Nbinhex endp
% @9 n( _8 [' U' u# ^   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-10-12 08:42 , Processed in 0.048728 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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