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

Intel ICH9 Memory SPD读取

[复制链接]
发表于 2009-7-21 09:57:34 | 显示全部楼层 |阅读模式
根据bios代码写了个SPD读取,就是不出结果,每次调试输出host status register都是FF,代码基本和bios一样,机器也是ICH9的机器,代码如下:
3 r: @8 b$ n, ?$ o
. Q, I  }, u; b; l5 ~  `8 m  .model small# ^! s% c0 [3 d9 k
  .386
/ v4 n0 s5 i& }) ], b, N) A  CFG_ADDR EQU 0CF8h6 r9 Z) a; Q7 ~1 s
  CFG_DATA EQU 0CFCh
5 W- s2 k6 Y  l' p8 d, r5 T( W  SMBUS_BUS EQU 00 V" m3 D" o( V. L8 i) y$ X0 `: P9 M
  SMBUS_DEVICE EQU 31( c$ r- |! l4 v! \- e& Y" m
  SMBUS_FUNC EQU 3
: ^6 y5 B3 A7 f5 w- m4 m  
: W6 {( W9 O& f. {  .stack 100h
& K" W$ [/ x( ~6 R8 @& v  .data
' s1 S$ n% }; mbase dw ?  ;smbus I/O space0 T+ R0 K0 F* w' R% t4 b0 _9 s  |
num  db 0  ;byte select: t! i- G# d. f5 j% L
SmbStatus db ?
4 f( O% Q, ]8 Z$ `
- J, `4 t* n: D& K, t. o  .code5 L: e$ l' I4 ^# d+ o4 P2 t7 u

& E( V. q3 z5 ~LF_CR MACRO: P$ e) ?, A/ {' X0 H5 j- |
  pusha
9 D6 {' t! `6 m/ g$ \  mov     dl,0dh      
: D5 m) O& k. X5 ~2 { mov     ah,2
8 l  X8 {8 w$ M4 y  int     21h
! I: [' R* u4 p0 n; ~  mov     dl,0ah   ;next line   . T% X" k0 s7 h% [# O& r7 }
  mov     ah,29 y; E% _  h( `) M: R0 `' ?
  int     21h# Z7 u" J" A% c0 _
  popa  
& U/ c2 L/ _! ?* @9 H9 e     ENDM
9 K- Q% q3 O% i- N2 d# @7 [6 k7 I( f7 B$ W. J  Y' R
# ~& m9 d% Z6 k
main proc far
5 x: {4 a8 A, B5 K" l mov ax,@data( [: Y8 ^* l4 U3 @
mov ds,ax
2 z( S7 `* u# N5 L, O# ~- J4 S & H! Q# d) i7 F4 o. S6 U
mov eax,8000FB20h ;Bus 0,Device 32,Function 3,20h% H6 F) a8 I8 c) D7 W6 O
mov dx,CFG_ADDR# m' l: d4 s( ?( {" n
out dx,eax9 U# J0 L* m' N0 n* ]
mov dx,CFG_DATA
# V7 V* e, ^" n" `' h in eax,dx
6 t4 p( r) F* k  7 B7 x" U- p6 S; f
shr ax,5     ;bit 15-5,the base address7 d: d  Y; U# H, y1 W
and ax,0000011111111111b
! \2 s" J4 a0 _' L9 ^ mov base,ax7 q; L) y$ @# k( e
  
. u6 q# L# |" _- y: p6 f call ReadSpd
8 _8 p# U! e; ?: aexit:
5 M! S: O( Z& y; C$ E$ m2 @ mov ax,4c00h3 O- I' X4 F. ^6 i4 K0 y6 Z
int 21h* T% B; b3 u3 a0 e9 ^" l
main endp7 o1 i+ W$ r) v/ ?2 W* j# A, y
* B  u, Y4 \$ W) \: q$ b5 X/ |# s
, `& G9 I. n" {$ t8 J+ h/ a

& l# `- Z  W/ S6 lReadSpd proc
7 Q! i* g. m5 O6 y, s pusha
: X$ Z2 ~, k; ^1 r# G% x4 d0 w8 [Again:
( L& A% k$ {  @! ^' ?$ f% q! e+ J mov ah,num6 E+ r' M: k; B+ N" t
  and ah,00001111b
+ u- n8 Z$ ?% t* U! {: k  R .if(ah==15d) ;CR_LF! a4 w7 B; \6 k! a! L
  LF_CR7 q! A2 `; @. K/ r5 X) r& g) S
.endif9 t& w3 T9 H' @" o
+ w; q! [9 ?- U" D* j! S
.repeat- Y# Y* d1 _- D6 [. k+ F6 L
  mov dx,base   ;reset host,claim host in use% j: }2 X0 _3 S9 `3 B
  add dx,01 k8 z- K* ~- s/ }3 H
  mov al,40h
- L5 B" n" K- ]: B8 O8 I% l8 t/ v, R  out dx,al. n5 G6 v" c5 ?1 Q: C
  
3 x- [" [  _) e  mov dx,base   7 \5 U2 V8 n& \* i7 e. }# w5 Y
  in al,dx
& |$ Y. R* @, Y: K  mov SmbStatus,al0 I) G0 W+ A8 E
  3 E2 q, D2 n0 B6 z
  mov dx,base   ;clear all status bits" L, r' m2 z6 A8 l  |5 s
  mov al,1Eh   ;host status register1 a* Q) ~6 ~' `# c& [2 W! y
  out dx,al3 m6 y7 {* k7 Q; k& A" \6 y! Q
  % z0 A3 Z# Q9 z4 D- Y$ l
  mov dx,base   ;set offset to read ( F# q. c8 l6 t0 `
  add dx,3    ;host command register
' {  M7 f( w) g9 k. S3 }  mov al,num1 y0 T( Y! y5 i% O  O9 ^! l
  out dx,al
0 H; N6 |/ R: E( F/ S! d$ z  3 i& n! K. D9 I: D& w% f' n
  mov dx,base   ;Transimit Slave Address register( {5 `. i% z- ]. ~- K
  add dx,4
$ M# I4 k8 a/ K4 O/ X  e  mov al,0a1h
. q7 ?9 s5 [: U, T: V# V  out dx,al
, t' F7 F" P0 t6 u2 g  " o9 s9 G4 i- h
  mov dx,base   ;set "Read Word" protocol and start bit
9 p$ i9 h8 Q* m- Z+ Y( p  add dx,2    ;Host Control register
6 B0 T0 C7 h: f7 l0 D) p* X. u  mov al,48h  
. e9 _! x# l' }3 `  out dx,al
* L  K* e2 n" ^$ x 8 V- O6 N6 M; Q- ]
$ T5 y2 z/ `9 u5 C) `! ~3 p
  
1 K- y' o. A+ V1 S2 D% G: M6 J! g  mov dx,base
# G& U" X1 h, z, M- P- b  in al,dx
. @' b, G* ~9 K0 r  mov SmbStatus,al
, ], f3 u& i: g9 [, m  and al,1Eh
3 Q3 M1 A- n1 r3 N( m$ l  .while (al==0) ;check repeatly until any of
9 `5 N. d' c$ [" g" {    mov dx,base      ;FAIL,BERR,DERR,INTR
8 E1 a8 t3 u7 q/ l# Z: \% w1 Y0 _    in al,dx3 C0 e- j/ Y0 m& c3 c& i5 \. v
    mov SmbStatus,al1 X  B+ b" {3 e* \. F
    and al,1Eh 9 @+ o8 M6 h' }+ G  o9 Y8 Z! ~
  .ENDW
+ {, R) p: V+ V* M" A' Y! k# ~  5 {3 y+ \8 p9 R: ~
  mov al,SmbStatus   
" i1 t6 s% N' z. q( l/ m+ `4 ]: R  and al,1Ch0 [7 S( o$ M2 \  ^) _
  .if (al!=0)    ;check for errors  . @3 P: v3 K4 B1 c9 y
   mov al,SmbStatus
2 P- x3 `& c1 S( |) |   and al,08h   
& {" h8 t5 w& B5 W2 n' n   .continue .if (al!=0)  
: H$ X, e7 W9 C9 n9 j  z   jmp @F  
/ F& W0 p3 b# x8 _0 z0 Y .else7 l3 i6 h7 K4 G/ C5 h# p
  mov dx,base
4 u- o1 |( r7 q# q. r7 v7 p  add dx,5h
5 S. ^0 |- z. Z0 i  in al,dx  
9 N+ d1 j3 b- l5 n* T* T  call binhex * {0 o7 f9 i# }0 T
  .break
% p6 k1 q' I4 i' t+ { .endif
* N  K+ o' B1 ~  
+ U2 h# B6 Y, J; ]; c  .until (0) 3 ~1 S5 F7 Y8 Y" q! H. ~
  
% T' a: x/ Q- j# `3 c0 [2 c! d5 e
+ X3 F& K5 _, v) l, K ; t& J/ f% ~& x3 M1 b0 M
mov dl,20h ;output a space
. b5 K) R' n5 R) B' l; N+ S2 G0 l mov ah,2
" I1 Z2 b; S. s- |1 x% O) c9 ~2 i pusha
4 b6 D: p) Z! ^& R& o) z! _ int 21h, Q) M- t4 I, a( E0 d
popa
# m  f. |+ U' M inc num" _' R. j- ~* O" p3 u; V
$ E! ?6 F, y! g' @# E
cmp num,80h ;get first spd 128 bytes
9 x+ T7 r9 F1 ^ jnz Again6 r- L6 r6 G' A6 `2 z! f8 _

: q" U6 \0 C. n( k: V@@:
2 o' u4 S: N6 q& I) \ popa
8 l  Z+ e; B" p- b* ~ ret
1 h8 D0 c1 O5 C, Q9 [3 P/ SReadSpd endp7 P0 l; s% o( ^5 Z# \9 O7 D$ L
2 x1 z6 h- B8 ~% O
8 w: L) Q0 S- X" ~

7 F* {9 P- J& B+ G4 `& C/ obinhex proc
0 z* B) B# h2 D3 A1 f: P pusha
3 h8 ]5 o" Z1 m% j0 W5 y
) q; [% g/ [1 l, ^& S5 L: N3 z mov ch,2 ;2 hexadecimal digits to be printed
3 F3 _! M+ J9 o9 r& Cloop3:% u% @  V% y5 n, f# v
mov cl,4 ;bits to be shifted
, K* ~1 {" C) \4 T, d  T: k4 [& s# j rol al,cl& N! e& ?- {$ w  n1 Q( \
mov bl,al6 e" I; [# t& z( C# O7 L2 i4 r
and bl,0fh ;mask the 4-bit Msb* \2 z8 {1 K' G# I
add bl,30h
4 r% M' c' w/ r cmp bl,3ah
4 }  @: _) p1 o% L4 H/ s; j  n* { jl next1  ;number or alpha?( m1 ]3 x4 L0 R9 l6 P/ n
add bl,7
- b- W  N# E3 Y' k& inext1:
' ~# {% Y2 t; B9 @3 \  K6 b& s mov ah,2  ;print one hexadecimal digit' |" R% M6 w4 N; [5 d8 B
mov dl,bl. o) [& u/ X( M# ]! D
pusha
0 o1 F' ~" {8 b0 P7 {) g( i9 f int 21h
" K; Z4 D) N4 Q7 S3 \ popa" I5 d) ?! Y" A2 f
dec ch
: G  K( v1 n$ M% h( j9 ]4 X jnz loop33 A$ R4 R# X' @  k# K+ Y
popa+ E& T4 c- P6 w; a
ret
8 O1 I& J, P  ]2 p  {" Z# nbinhex endp# f. H4 a1 e8 R3 z0 Z
   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-6-8 10:58 , Processed in 0.142740 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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