diff options
Diffstat (limited to 'board/incaip/memsetup.S')
| -rw-r--r-- | board/incaip/memsetup.S | 131 | 
1 files changed, 94 insertions, 37 deletions
| diff --git a/board/incaip/memsetup.S b/board/incaip/memsetup.S index b43848464..10c4e840e 100644 --- a/board/incaip/memsetup.S +++ b/board/incaip/memsetup.S @@ -174,63 +174,120 @@ cgu_init:  	.end	cgu_init -	.globl	memsetup -	.ent	memsetup -memsetup: +/* + * void sdram_init(long) + * + * a0 has the clock value + */ +	.globl	sdram_init +	.ent	sdram_init +sdram_init: -	/* EBU and CGU Initialization. -	 */ -	li	a0, CPU_CLOCK_RATE -	move	t0, ra +	li	t1, MC_MODUL_BASE -	/* We rely on the fact that neither ebu_init() nor cgu_init() -	 * modify t0 and a0. -	 */ -	bal	ebu_init +	/* Disable memory controller before changing any of its registers */ +	sw	zero, MC_CTRLENA(t1) + +	li	t2, 100000000 +	beq	a0, t2, 1f  	nop -	bal	cgu_init +	li	t2, 133000000 +	beq	a0, t2, 2f +	nop +	li	t2, 150000000 +	beq	a0, t2, 3f +	nop +	b	5f  	nop -	move	ra, t0 -	/* SDRAM Initialization. -	 */ -	li	t0, MC_MODUL_BASE +	/* 100 MHz clock */ +1: +	/* Set clock ratio (clkrat=1:1, rddel=3) */ +	li	t2, 0x00000003 +	sw	t2, MC_IOGP(t1) -	/* Clear Error log registers */ -	sw	zero, MC_ERRCAUSE(t0) -	sw	zero, MC_ERRADDR(t0) +	/* Set sdram refresh rate (4K/64ms @ 100MHz) */ +	li	t2, 0x0000061A +	b	4f +	sw	t2, MC_TREFRESH(t1) + +	/* 133 MHz clock */ +2: +	/* Set clock ratio (clkrat=1:1, rddel=3) */ +	li	t2, 0x00000003 +	sw	t2, MC_IOGP(t1) + +	/* Set sdram refresh rate (4K/64ms @ 133MHz) */ +	li	t2, 0x00000822 +	b	4f +	sw	t2, MC_TREFRESH(t1) + +	/* 150 MHz clock */ +3: +	/* Set clock ratio (clkrat=3:2, rddel=4) */ +	li	t2, 0x00000014 +	sw	t2, MC_IOGP(t1) + +	/* Set sdram refresh rate (4K/64ms @ 150MHz) */ +	li	t2, 0x00000927 +	sw	t2, MC_TREFRESH(t1) -	/* Set clock ratio to 1:1 */ -	li	t1, 0x03		/* clkrat=1:1, rddel=3 */ -	sw	t1, MC_IOGP(t0) +4: +	/* Clear Error log registers */ +	sw	zero, MC_ERRCAUSE(t1) +	sw	zero, MC_ERRADDR(t1)  	/* Clear Power-down registers */ -	sw	zero, MC_SELFRFSH(t0) +	sw	zero, MC_SELFRFSH(t1)  	/* Set CAS Latency */ -	li	t1, 0x00000020		/* CL = 2 */ -	sw	t1, MC_MRSCODE(t0) +	li	t2, 0x00000020		/* CL = 2 */ +	sw	t2, MC_MRSCODE(t1)  	/* Set word width to 16 bit */ -	li	t1, 0x2 -	sw	t1, MC_CFGDW(t0) +	li	t2, 0x2 +	sw	t2, MC_CFGDW(t1)  	/* Set CS0 to SDRAM parameters */ -	li	t1, 0x000014C9 -	sw	t1, MC_CFGPB0(t0) +	li	t2, 0x000014C9 +	sw	t2, MC_CFGPB0(t1)  	/* Set SDRAM latency parameters */ -	li	t1, 0x00026325		/* BC PC100 */ -	sw	t1, MC_LATENCY(t0) - -	/* Set SDRAM refresh rate */ -	li	t1, 0x00000C30		/* 4K/64ms @ 100MHz */ -	sw	t1, MC_TREFRESH(t0) +	li	t2, 0x00026325		/* BC PC100 */ +	sw	t2, MC_LATENCY(t1) +5:  	/* Finally enable the controller */ -	li	t1, 1 -	sw	t1, MC_CTRLENA(t0) +	li	t2, 0x00000001 +	sw	t2, MC_CTRLENA(t1)  	j	ra  	nop + +	.end	sdram_init + + +	.globl	memsetup +	.ent	memsetup +memsetup: + +	/* EBU, CGU and SDRAM Initialization. +	 */ +	li	a0, CPU_CLOCK_RATE +	move	t0, ra + +	/* We rely on the fact that neither ebu_init() nor cgu_init() nor sdram_init() +	 * modify t0 and a0. +	 */ +	bal	cgu_init +	nop +	bal	ebu_init +	nop +	bal	sdram_init +	nop +	move	ra, t0 + +	j	ra +	nop +  	.end	memsetup |