You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
407 lines
4.7 KiB
407 lines
4.7 KiB
li k0,0
|
|
li k1,0
|
|
li msize,0
|
|
PRINTSTR("DIMM read\r\n")
|
|
|
|
li a1, 0x0
|
|
li a0,0xa0
|
|
bal i2cread
|
|
nop
|
|
beq v0,0xff,1f
|
|
nop
|
|
beq v0,0x80,1f
|
|
nop
|
|
move a0,v0
|
|
// bal hexserial
|
|
nop
|
|
PRINTSTR ("\r\nNo DIMM in slot 0 \r\n");
|
|
b 2f
|
|
nop
|
|
1:
|
|
li a0,0xa0
|
|
bal ii2c_cfg
|
|
nop
|
|
2:
|
|
li a1, 0x0
|
|
li a0,0xa2
|
|
bal i2cread
|
|
nop
|
|
li a1,0x0
|
|
beq v0,0xff,1f
|
|
nop
|
|
beq v0,0x80,1f
|
|
nop
|
|
move a0,v0
|
|
// bal hexserial
|
|
nop
|
|
PRINTSTR ("\r\nNo DIMM in slot 1 \r\n");
|
|
b 2f
|
|
nop
|
|
1:
|
|
li a0,0xa2
|
|
bal ii2c_cfg
|
|
nop
|
|
|
|
b 2f
|
|
nop
|
|
|
|
2:
|
|
b 211f
|
|
nop
|
|
/*ic2 cfg
|
|
* a0=0xa0 for slot 0,a0=0xa2 for slot 1
|
|
* t5 used for save i2c addr a0,t6 save ra.
|
|
* use t1
|
|
*/
|
|
LEAF(ii2c_cfg)
|
|
move t6,ra
|
|
move t5,a0
|
|
|
|
#ifdef I2C_DEBUG
|
|
li t1,0
|
|
1:
|
|
move a1,t1
|
|
move a0,t5
|
|
bal i2cread
|
|
nop
|
|
|
|
#print
|
|
move a0, v0
|
|
bal hexserial
|
|
nop
|
|
PRINTSTR("\r\n")
|
|
addiu t1,t1,1
|
|
li v0, 0x20
|
|
bleu t1, v0, 1b
|
|
nop
|
|
#endif
|
|
|
|
# set some parameters for DDR333
|
|
# rank number and DDR type field will be filled later
|
|
# to check: fix TCAS?
|
|
|
|
|
|
PRINTSTR("read memory type\r\n")
|
|
|
|
/* read DIMM number of rows */
|
|
move a0,t5 /* #zgj-11-17 */
|
|
li a1,3
|
|
bal i2cread
|
|
nop
|
|
move s6,v0
|
|
move a0, v0
|
|
subu v0, 12
|
|
bgtu v0, 2,.nodimm1
|
|
nop
|
|
move t1, v0
|
|
PRINTSTR("read number of rows :");
|
|
move a0,s6
|
|
bal hexserial
|
|
nop
|
|
|
|
2: /* read DIMM number of cols */
|
|
|
|
move a0,t5 /* #zgj-11-17 */
|
|
li a1,4
|
|
bal i2cread
|
|
nop
|
|
//////////////////////
|
|
move a0,v0
|
|
dsll a0,a0,32
|
|
daddu s6,a0
|
|
/////////////////////
|
|
subu v0, 8
|
|
bgtu v0, 4,.nodimm1
|
|
nop
|
|
|
|
bne t1, 0, 10f
|
|
nop
|
|
bne v0, 2, 20f
|
|
nop
|
|
li v0, 0
|
|
b .ddrtype1
|
|
nop
|
|
|
|
20: bne v0, 1, 21f
|
|
nop
|
|
li v0, 1
|
|
b .ddrtype1
|
|
nop
|
|
21: bne v0, 0, 22f
|
|
nop
|
|
|
|
li v0, 2
|
|
b .ddrtype1
|
|
nop
|
|
22: bne v0, 3, 33f
|
|
nop
|
|
li v0, 3
|
|
b .ddrtype1
|
|
nop
|
|
10: bne t1, 1, 11f
|
|
nop
|
|
bne v0, 3, 20f
|
|
nop
|
|
li v0, 4
|
|
b .ddrtype1
|
|
nop
|
|
20: bne v0, 2, 21f
|
|
nop
|
|
li v0, 5
|
|
b .ddrtype1
|
|
nop
|
|
21: bne v0, 1, 22f
|
|
nop
|
|
li v0, 6
|
|
b .ddrtype1
|
|
nop
|
|
22: bne v0, 4, 33f
|
|
nop
|
|
li v0, 7
|
|
b .ddrtype1
|
|
nop
|
|
11: bne t1, 2, 33f
|
|
nop
|
|
bne v0, 4, 20f
|
|
nop
|
|
li v0, 8
|
|
b .ddrtype1
|
|
nop
|
|
20: bne v0, 3, 21f
|
|
nop
|
|
li v0, 9
|
|
b .ddrtype1
|
|
nop
|
|
21: bne v0, 2, 33f
|
|
nop
|
|
li v0, 10
|
|
b .ddrtype1
|
|
nop
|
|
33: PRINTSTR("DDR type not supported!\r\n");
|
|
34: b 34b
|
|
nop
|
|
|
|
.ddrtype1:
|
|
|
|
move a0,t5
|
|
li a1,17
|
|
bal i2cread
|
|
nop
|
|
beq v0,4,2f
|
|
nop
|
|
bne v0,8,.nodimm1
|
|
li k0,1
|
|
nop
|
|
2:
|
|
|
|
PRINTSTR("\r\nnumber of ranks ,package and height\r\n") ;
|
|
PRINTSTR("k1 to save cs_map filed valule\r\n") ;
|
|
move a0,t5
|
|
li a1,5
|
|
bal i2cread
|
|
nop
|
|
//***********
|
|
andi v0,v0,0x7
|
|
//***********
|
|
beq v0,0,2f
|
|
nop
|
|
bne v0,1,.nodimm1
|
|
nop
|
|
|
|
//************
|
|
bne t5,0xa0,123f
|
|
nop
|
|
ori k1,k1,0x3
|
|
b 124f
|
|
nop
|
|
|
|
123: ori k1,k1,0xc
|
|
|
|
124: b 124f
|
|
nop
|
|
|
|
|
|
|
|
2: bne t5,0xa0,123f
|
|
nop
|
|
ori k1,k1,0x1
|
|
b 124f
|
|
nop
|
|
|
|
123: ori k1,k1,0x4
|
|
124: nop
|
|
|
|
//************
|
|
|
|
|
|
|
|
/* read DIMM width */
|
|
move a0,t5
|
|
li a1,6
|
|
|
|
bal i2cread
|
|
nop
|
|
bleu v0,36,2f
|
|
nop
|
|
bgtu v0,72,.nodimm1
|
|
nop
|
|
PRINTSTR("read width\r\n") ;
|
|
2:
|
|
PRINTSTR("module rank density\r\n") ;
|
|
move a0,t5
|
|
li a1,31
|
|
bal i2cread
|
|
nop
|
|
beqz v0,.nodimm1
|
|
nop
|
|
////////////////////
|
|
beq v0,0x80,1f
|
|
nop
|
|
beq v0,0x40,2f
|
|
nop
|
|
beq v0,0x20,3f
|
|
nop
|
|
beq v0,0x10,4f
|
|
nop
|
|
beq v0,0x08,5f
|
|
nop
|
|
beq v0,0x04,6f
|
|
nop
|
|
beq v0,0x02,7f
|
|
nop
|
|
li tmpsize,1<<10
|
|
b 100f
|
|
nop
|
|
|
|
7: li tmpsize,2<<10
|
|
b 100f
|
|
nop
|
|
6: li tmpsize,4<<10
|
|
b 100f
|
|
nop
|
|
5: li tmpsize,8<<10
|
|
b 100f
|
|
nop
|
|
4: li tmpsize,16<<10
|
|
b 100f
|
|
nop
|
|
3: li tmpsize,128
|
|
b 100f
|
|
nop
|
|
2: li tmpsize,256
|
|
b 100f
|
|
nop
|
|
1: li tmpsize,512
|
|
|
|
////////////////
|
|
100: addu msize,tmpsize
|
|
|
|
|
|
PRINTSTR("sizing slot memory size\r\n") ;
|
|
move a0,t5
|
|
li a1,5
|
|
bal i2cread
|
|
nop
|
|
andi v0,0x7
|
|
2: beq v0,0,1f
|
|
nop
|
|
addu msize,tmpsize
|
|
subu v0,v0,1
|
|
|
|
b 2b
|
|
nop
|
|
|
|
.nodimm1:
|
|
PRINTSTR ("\r\nNo DIMM in this slot ");
|
|
1:
|
|
jr t6
|
|
nop
|
|
END(ii2c_cfg)
|
|
|
|
211:
|
|
beqz msize,212f
|
|
nop
|
|
move a0,k1
|
|
|
|
li v0,0xaffffe70
|
|
lw v1,0(v0)
|
|
nop
|
|
sll a0,a0,16
|
|
li t0,0xfff0ffff
|
|
and v1,v1,t0
|
|
or v1,v1,a0
|
|
sw v1,0(v0)
|
|
nop
|
|
|
|
|
|
PRINTSTR ("cs map : ");
|
|
move a0,k1
|
|
bal hexserial
|
|
nop
|
|
|
|
|
|
PRINTSTR("\r\nconfig bank if bank 8: ")
|
|
li v0,0xaffffe10
|
|
ld v1,0(v0)
|
|
nop
|
|
move a0,v1
|
|
dsrl a0,a0,32
|
|
or a0,a0,k0
|
|
dsll a0,a0,32
|
|
or v1,a0,v1
|
|
sd v1,0(v0)
|
|
nop
|
|
move a0,v1
|
|
dsrl a0,a0,32
|
|
bal hexserial
|
|
nop
|
|
|
|
PRINTSTR("\r\ncols rows: ")
|
|
|
|
//row addr numbers
|
|
li v0,0xffffffff
|
|
and a0,s6,v0
|
|
li v0,15
|
|
subu a0,v0,a0
|
|
|
|
//col addr numbers
|
|
dsrl s6,s6,20
|
|
dsrl s6,s6,12
|
|
li v0,14
|
|
|
|
move a1,s6
|
|
subu a1,v0,a1
|
|
|
|
sll a1,a1,24
|
|
sll a0,a0,8
|
|
|
|
li v0,0xaffffe50
|
|
lw v1,0(v0)
|
|
nop
|
|
li t0,0xf8fff8ff
|
|
and v1,v1,t0
|
|
or v1,v1,a0
|
|
or v1,v1,a1
|
|
sw v1,0(v0)
|
|
nop
|
|
move a0,v1
|
|
bal hexserial
|
|
nop
|
|
|
|
PRINTSTR("\r\n")
|
|
b 213f
|
|
nop
|
|
212:
|
|
.nodimm:
|
|
li msize,0x100
|
|
PRINTSTR ("\r\nNo DIMM in all slots,use default configure\r\n")
|
|
213:
|
|
|
|
PRINTSTR ("\r\nDIMM size :")
|
|
move a0,msize
|
|
bal hexserial
|
|
nop
|
|
|
|
PRINTSTR ("\r\n")
|
|
|
|
sll msize,20
|
|
|