xref: /rk3399_rockchip-uboot/board/dbau1x00/lowlevel_init.S (revision b57843e68804c2d53d2cff2b8b2238e37b388faa)
1400558b5Swdenk/* Memory sub-system initialization code */
2400558b5Swdenk
3400558b5Swdenk#include <config.h>
4*76ada5f8SDaniel Schwierzeck#include <mach/au1x00.h>
5400558b5Swdenk#include <asm/regdef.h>
6400558b5Swdenk#include <asm/mipsregs.h>
7400558b5Swdenk
8400558b5Swdenk#define AU1500_SYS_ADDR		0xB1900000
9400558b5Swdenk#define sys_endian		0x0038
10400558b5Swdenk#define CP0_Config0		$16
116d0f6bcfSJean-Christophe PLAGNIOL-VILLARD#define CPU_SCALE		((CONFIG_SYS_MHZ) / 12) /* CPU clock is a multiple of 12 MHz */
126d0f6bcfSJean-Christophe PLAGNIOL-VILLARD#define MEM_1MS			((CONFIG_SYS_MHZ) * 1000)
13400558b5Swdenk
14400558b5Swdenk	.text
15400558b5Swdenk	.set noreorder
16400558b5Swdenk	.set mips32
17400558b5Swdenk
18400558b5Swdenk	.globl	lowlevel_init
19400558b5Swdenklowlevel_init:
20400558b5Swdenk	/*
21400558b5Swdenk	 * Step 1) Establish CPU endian mode.
22400558b5Swdenk	 * Db1500-specific:
23400558b5Swdenk	 * Switch S1.1 Off(bit7 reads 1) is Little Endian
24400558b5Swdenk	 * Switch S1.1 On (bit7 reads 0) is Big Endian
25400558b5Swdenk	 */
26400558b5Swdenk#ifdef CONFIG_DBAU1550
27400558b5Swdenk	li	t0, MEM_STCFG2
28400558b5Swdenk	li	t1, 0x00000040
29400558b5Swdenk	sw	t1, 0(t0)
30400558b5Swdenk
31400558b5Swdenk	li	t0, MEM_STTIME2
32400558b5Swdenk	li	t1, 0x22080a20
33400558b5Swdenk	sw	t1, 0(t0)
34400558b5Swdenk
35400558b5Swdenk	li	t0, MEM_STADDR2
36400558b5Swdenk	li	t1, 0x10c03f00
37400558b5Swdenk	sw	t1, 0(t0)
38400558b5Swdenk#else
39400558b5Swdenk	li	t0, MEM_STCFG1
40400558b5Swdenk	li	t1, 0x00000080
41400558b5Swdenk	sw	t1, 0(t0)
42400558b5Swdenk
43400558b5Swdenk	li	t0, MEM_STTIME1
44400558b5Swdenk	li	t1, 0x22080a20
45400558b5Swdenk	sw	t1, 0(t0)
46400558b5Swdenk
47400558b5Swdenk	li	t0, MEM_STADDR1
48400558b5Swdenk	li	t1, 0x10c03f00
49400558b5Swdenk	sw	t1, 0(t0)
50400558b5Swdenk#endif
51400558b5Swdenk
52400558b5Swdenk	li	t0, DB1XX0_BCSR_ADDR
53400558b5Swdenk	lw	t1,8(t0)
54400558b5Swdenk	andi	t1,t1,0x80
55400558b5Swdenk	beq	zero,t1,big_endian
56400558b5Swdenk	nop
57400558b5Swdenklittle_endian:
58400558b5Swdenk
59400558b5Swdenk	/* Change Au1 core to little endian */
60400558b5Swdenk	li	t0, AU1500_SYS_ADDR
61400558b5Swdenk	li	t1, 1
62400558b5Swdenk	sw	t1, sys_endian(t0)
63400558b5Swdenk	mfc0	t2, CP0_CONFIG
64400558b5Swdenk	mtc0	t2, CP0_CONFIG
65400558b5Swdenk	nop
66400558b5Swdenk	nop
67400558b5Swdenk
68400558b5Swdenk	/* Big Endian is default so nothing to do but fall through */
69400558b5Swdenk
70400558b5Swdenkbig_endian:
71400558b5Swdenk
72400558b5Swdenk	/*
73400558b5Swdenk	 * Step 2) Establish Status Register
74400558b5Swdenk	 * (set BEV, clear ERL, clear EXL, clear IE)
75400558b5Swdenk	 */
76400558b5Swdenk	li	t1, 0x00400000
77400558b5Swdenk	mtc0	t1, CP0_STATUS
78400558b5Swdenk
79400558b5Swdenk	/*
80400558b5Swdenk	 * Step 3) Establish CP0 Config0
81400558b5Swdenk	 * (set OD, set K0=3)
82400558b5Swdenk	 */
83400558b5Swdenk	li	t1, 0x00080003
84400558b5Swdenk	mtc0	t1, CP0_CONFIG
85400558b5Swdenk
86400558b5Swdenk	/*
87400558b5Swdenk	 * Step 4) Disable Watchpoint facilities
88400558b5Swdenk	 */
89400558b5Swdenk	li t1, 0x00000000
90400558b5Swdenk	mtc0	t1, CP0_WATCHLO
91400558b5Swdenk	mtc0	t1, CP0_IWATCHLO
92400558b5Swdenk	/*
93400558b5Swdenk	 * Step 5) Disable the performance counters
94400558b5Swdenk	 */
95400558b5Swdenk	mtc0	zero, CP0_PERFORMANCE
96400558b5Swdenk	nop
97400558b5Swdenk
98400558b5Swdenk	/*
99400558b5Swdenk	 * Step 6) Establish EJTAG Debug register
100400558b5Swdenk	 */
101400558b5Swdenk	mtc0	zero, CP0_DEBUG
102400558b5Swdenk	nop
103400558b5Swdenk
104400558b5Swdenk	/*
105400558b5Swdenk	 * Step 7) Establish Cause
106400558b5Swdenk	 * (set IV bit)
107400558b5Swdenk	 */
108400558b5Swdenk	li	t1, 0x00800000
109400558b5Swdenk	mtc0	t1, CP0_CAUSE
110400558b5Swdenk
111400558b5Swdenk	/* Establish Wired (and Random) */
112400558b5Swdenk	mtc0	zero, CP0_WIRED
113400558b5Swdenk	nop
114400558b5Swdenk
115400558b5Swdenk#ifdef CONFIG_DBAU1550
116400558b5Swdenk	/* No workaround if running from ram */
117400558b5Swdenk	lui	t0, 0xffc0
118400558b5Swdenk	lui	t3, 0xbfc0
119400558b5Swdenk	and	t1, ra, t0
120400558b5Swdenk	bne	t1, t3, noCacheJump
121400558b5Swdenk	nop
122400558b5Swdenk
123400558b5Swdenk	/*** From AMD YAMON ***/
124400558b5Swdenk	/*
125400558b5Swdenk	 * Step 8) Initialize the caches
126400558b5Swdenk	 */
127400558b5Swdenk	li		t0, (16*1024)
128400558b5Swdenk	li		t1, 32
129400558b5Swdenk	li		t2, 0x80000000
130400558b5Swdenk	addu	t3, t0, t2
131400558b5Swdenkcacheloop:
132400558b5Swdenk	cache	0, 0(t2)
133400558b5Swdenk	cache	1, 0(t2)
134400558b5Swdenk	addu	t2, t1
135400558b5Swdenk	bne		t2, t3, cacheloop
136400558b5Swdenk	nop
137400558b5Swdenk
138400558b5Swdenk	/* Save return address */
139400558b5Swdenk	move		t3, ra
140400558b5Swdenk
141400558b5Swdenk	/* Run from cacheable space now */
142400558b5Swdenk	bal		cachehere
143400558b5Swdenk	nop
144400558b5Swdenkcachehere:
145400558b5Swdenk	li		t1, ~0x20000000 /* convert to KSEG0 */
146400558b5Swdenk	and		t0, ra, t1
147400558b5Swdenk	addi	t0, 5*4			/* 5 insns beyond cachehere */
148400558b5Swdenk	jr		t0
149400558b5Swdenk	nop
150400558b5Swdenk
151400558b5Swdenk	/* Restore return address */
152400558b5Swdenk	move		ra, t3
153400558b5Swdenk
154400558b5Swdenk	/*
155400558b5Swdenk	 * Step 9) Initialize the TLB
156400558b5Swdenk	 */
157400558b5Swdenk	li		t0, 0			# index value
158400558b5Swdenk	li		t1, 0x00000000		# entryhi value
159400558b5Swdenk	li		t2, 32			# 32 entries
160400558b5Swdenk
161400558b5Swdenktlbloop:
162400558b5Swdenk	/* Probe TLB for matching EntryHi */
163400558b5Swdenk	mtc0	t1, CP0_ENTRYHI
164400558b5Swdenk	tlbp
165400558b5Swdenk	nop
166400558b5Swdenk
167400558b5Swdenk	/* Examine Index[P], 1=no matching entry */
168400558b5Swdenk	mfc0	t3, CP0_INDEX
169400558b5Swdenk	li	t4, 0x80000000
170400558b5Swdenk	and	t3, t4, t3
171400558b5Swdenk	addiu	t1, t1, 1		# increment t1 (asid)
172400558b5Swdenk	beq	zero, t3, tlbloop
173400558b5Swdenk	nop
174400558b5Swdenk
175400558b5Swdenk	/* Initialize the TLB entry */
176400558b5Swdenk	mtc0	t0, CP0_INDEX
177400558b5Swdenk	mtc0	zero, CP0_ENTRYLO0
178400558b5Swdenk	mtc0	zero, CP0_ENTRYLO1
179400558b5Swdenk	mtc0	zero, CP0_PAGEMASK
180400558b5Swdenk	tlbwi
181400558b5Swdenk
182400558b5Swdenk	/* Do it again */
183400558b5Swdenk	addiu	t0, t0, 1
184400558b5Swdenk	bne	t0, t2, tlbloop
185400558b5Swdenk	nop
186400558b5Swdenk
187ad88297eSHeiko Schocher#endif /* CONFIG_DBAU1550 */
188ad88297eSHeiko Schocher
189400558b5Swdenk	/* First setup pll:s to make serial work ok */
190400558b5Swdenk	/* We have a 12 MHz crystal */
191400558b5Swdenk	li	t0, SYS_CPUPLL
192400558b5Swdenk	li	t1, CPU_SCALE  /* CPU clock */
193400558b5Swdenk	sw	t1, 0(t0)
194400558b5Swdenk	sync
195400558b5Swdenk	nop
196400558b5Swdenk	nop
197400558b5Swdenk
198400558b5Swdenk	/* wait 1mS for clocks to settle */
199400558b5Swdenk	li	t1, MEM_1MS
200400558b5Swdenk1:	add	t1, -1
201400558b5Swdenk	bne	t1, zero, 1b
202400558b5Swdenk	nop
203400558b5Swdenk	/* Setup AUX PLL */
204400558b5Swdenk	li	t0, SYS_AUXPLL
205400558b5Swdenk	li	t1, 0x20 /* 96 MHz */
206400558b5Swdenk	sw	t1, 0(t0) /* aux pll */
207400558b5Swdenk	sync
208400558b5Swdenk
209ad88297eSHeiko Schocher#ifdef CONFIG_DBAU1550
210400558b5Swdenk	/*  Static memory controller */
211400558b5Swdenk	/* RCE0 - can not change while fetching, do so from icache */
212400558b5Swdenk	move		t2, ra /* Store return address */
213400558b5Swdenk	bal		getAddr
214400558b5Swdenk	nop
215400558b5Swdenk
216400558b5SwdenkgetAddr:
217400558b5Swdenk	move		t1, ra
218400558b5Swdenk	move		ra, t2 /* Move return addess back */
219400558b5Swdenk
220400558b5Swdenk	cache	0x14,0(t1)
221400558b5Swdenk	cache	0x14,32(t1)
222400558b5Swdenk	/*** /From YAMON ***/
223400558b5Swdenk
224400558b5SwdenknoCacheJump:
225400558b5Swdenk#endif /* CONFIG_DBAU1550 */
226400558b5Swdenk
227400558b5Swdenk#ifdef CONFIG_DBAU1550
228400558b5Swdenk	li	t0, MEM_STTIME0
229400558b5Swdenk	li	t1, 0x040181D7
230400558b5Swdenk	sw	t1, 0(t0)
231400558b5Swdenk
232400558b5Swdenk	/* RCE0 AMD MirrorBit Flash (?) */
233400558b5Swdenk	li	t0, MEM_STCFG0
234400558b5Swdenk	li	t1, 0x00000003
235400558b5Swdenk	sw	t1, 0(t0)
236400558b5Swdenk
237400558b5Swdenk	li	t0, MEM_STADDR0
238400558b5Swdenk	li	t1, 0x11803E00
239400558b5Swdenk	sw	t1, 0(t0)
240400558b5Swdenk#else /* CONFIG_DBAU1550 */
241400558b5Swdenk	li	t0, MEM_STTIME0
242ad88297eSHeiko Schocher	li	t1, 0x040181D7
243400558b5Swdenk	sw	t1, 0(t0)
244400558b5Swdenk
245400558b5Swdenk	/* RCE0 AMD 29LV640M MirrorBit Flash */
246400558b5Swdenk	li	t0, MEM_STCFG0
247400558b5Swdenk	li	t1, 0x00000013
248400558b5Swdenk	sw	t1, 0(t0)
249400558b5Swdenk
250400558b5Swdenk	li	t0, MEM_STADDR0
251400558b5Swdenk	li	t1, 0x11E03F80
252400558b5Swdenk	sw	t1, 0(t0)
253400558b5Swdenk#endif /* CONFIG_DBAU1550 */
254400558b5Swdenk
255400558b5Swdenk	/* RCE1 CPLD Board Logic */
256400558b5Swdenk	li	t0, MEM_STCFG1
257400558b5Swdenk	li	t1, 0x00000080
258400558b5Swdenk	sw	t1, 0(t0)
259400558b5Swdenk
260400558b5Swdenk	li	t0, MEM_STTIME1
261400558b5Swdenk	li	t1, 0x22080a20
262400558b5Swdenk	sw	t1, 0(t0)
263400558b5Swdenk
264400558b5Swdenk	li	t0, MEM_STADDR1
265400558b5Swdenk	li	t1, 0x10c03f00
266400558b5Swdenk	sw	t1, 0(t0)
267400558b5Swdenk
268400558b5Swdenk#ifdef CONFIG_DBAU1550
269400558b5Swdenk	/* RCE2 CPLD Board Logic */
270400558b5Swdenk	li	t0, MEM_STCFG2
271400558b5Swdenk	li	t1, 0x00000040
272400558b5Swdenk	sw	t1, 0(t0)
273400558b5Swdenk
274400558b5Swdenk	li	t0, MEM_STTIME2
275400558b5Swdenk	li	t1, 0x22080a20
276400558b5Swdenk	sw	t1, 0(t0)
277400558b5Swdenk
278400558b5Swdenk	li	t0, MEM_STADDR2
279400558b5Swdenk	li	t1, 0x10c03f00
280400558b5Swdenk	sw	t1, 0(t0)
281400558b5Swdenk#else
282400558b5Swdenk	li	t0, MEM_STCFG2
283400558b5Swdenk	li	t1, 0x00000000
284400558b5Swdenk	sw	t1, 0(t0)
285400558b5Swdenk
286400558b5Swdenk	li	t0, MEM_STTIME2
287400558b5Swdenk	li	t1, 0x00000000
288400558b5Swdenk	sw	t1, 0(t0)
289400558b5Swdenk
290400558b5Swdenk	li	t0, MEM_STADDR2
291400558b5Swdenk	li	t1, 0x00000000
292400558b5Swdenk	sw	t1, 0(t0)
293400558b5Swdenk#endif
294400558b5Swdenk
295400558b5Swdenk	/* RCE3 PCMCIA 250ns */
296400558b5Swdenk	li	t0, MEM_STCFG3
297400558b5Swdenk	li	t1, 0x00000002
298400558b5Swdenk	sw	t1, 0(t0)
299400558b5Swdenk
300400558b5Swdenk	li	t0, MEM_STTIME3
301400558b5Swdenk	li	t1, 0x280E3E07
302400558b5Swdenk	sw	t1, 0(t0)
303400558b5Swdenk
304400558b5Swdenk	li	t0, MEM_STADDR3
305400558b5Swdenk	li	t1, 0x10000000
306400558b5Swdenk	sw	t1, 0(t0)
307400558b5Swdenk
308400558b5Swdenk	sync
309400558b5Swdenk
310400558b5Swdenk	/* Set peripherals to a known state */
311400558b5Swdenk	li	t0, IC0_CFG0CLR
312400558b5Swdenk	li	t1, 0xFFFFFFFF
313400558b5Swdenk	sw	t1, 0(t0)
314400558b5Swdenk
315400558b5Swdenk	li	t0, IC0_CFG0CLR
316400558b5Swdenk	sw	t1, 0(t0)
317400558b5Swdenk
318400558b5Swdenk	li	t0, IC0_CFG1CLR
319400558b5Swdenk	sw	t1, 0(t0)
320400558b5Swdenk
321400558b5Swdenk	li	t0, IC0_CFG2CLR
322400558b5Swdenk	sw	t1, 0(t0)
323400558b5Swdenk
324400558b5Swdenk	li	t0, IC0_SRCSET
325400558b5Swdenk	sw	t1, 0(t0)
326400558b5Swdenk
327400558b5Swdenk	li	t0, IC0_ASSIGNSET
328400558b5Swdenk	sw	t1, 0(t0)
329400558b5Swdenk
330400558b5Swdenk	li	t0, IC0_WAKECLR
331400558b5Swdenk	sw	t1, 0(t0)
332400558b5Swdenk
333400558b5Swdenk	li	t0, IC0_RISINGCLR
334400558b5Swdenk	sw	t1, 0(t0)
335400558b5Swdenk
336400558b5Swdenk	li	t0, IC0_FALLINGCLR
337400558b5Swdenk	sw	t1, 0(t0)
338400558b5Swdenk
339400558b5Swdenk	li	t0, IC0_TESTBIT
340400558b5Swdenk	li	t1, 0x00000000
341400558b5Swdenk	sw	t1, 0(t0)
342400558b5Swdenk	sync
343400558b5Swdenk
344400558b5Swdenk	li	t0, IC1_CFG0CLR
345400558b5Swdenk	li	t1, 0xFFFFFFFF
346400558b5Swdenk	sw	t1, 0(t0)
347400558b5Swdenk
348400558b5Swdenk	li	t0, IC1_CFG0CLR
349400558b5Swdenk	sw	t1, 0(t0)
350400558b5Swdenk
351400558b5Swdenk	li	t0, IC1_CFG1CLR
352400558b5Swdenk	sw	t1, 0(t0)
353400558b5Swdenk
354400558b5Swdenk	li	t0, IC1_CFG2CLR
355400558b5Swdenk	sw	t1, 0(t0)
356400558b5Swdenk
357400558b5Swdenk	li	t0, IC1_SRCSET
358400558b5Swdenk	sw	t1, 0(t0)
359400558b5Swdenk
360400558b5Swdenk	li	t0, IC1_ASSIGNSET
361400558b5Swdenk	sw	t1, 0(t0)
362400558b5Swdenk
363400558b5Swdenk	li	t0, IC1_WAKECLR
364400558b5Swdenk	sw	t1, 0(t0)
365400558b5Swdenk
366400558b5Swdenk	li	t0, IC1_RISINGCLR
367400558b5Swdenk	sw	t1, 0(t0)
368400558b5Swdenk
369400558b5Swdenk	li	t0, IC1_FALLINGCLR
370400558b5Swdenk	sw	t1, 0(t0)
371400558b5Swdenk
372400558b5Swdenk	li	t0, IC1_TESTBIT
373400558b5Swdenk	li	t1, 0x00000000
374400558b5Swdenk	sw	t1, 0(t0)
375400558b5Swdenk	sync
376400558b5Swdenk
377400558b5Swdenk	li	t0, SYS_FREQCTRL0
378400558b5Swdenk	li	t1, 0x00000000
379400558b5Swdenk	sw	t1, 0(t0)
380400558b5Swdenk
381400558b5Swdenk	li	t0, SYS_FREQCTRL1
382400558b5Swdenk	li	t1, 0x00000000
383400558b5Swdenk	sw	t1, 0(t0)
384400558b5Swdenk
385400558b5Swdenk	li	t0, SYS_CLKSRC
386400558b5Swdenk	li	t1, 0x00000000
387400558b5Swdenk	sw	t1, 0(t0)
388400558b5Swdenk
389400558b5Swdenk	li	t0, SYS_PININPUTEN
390400558b5Swdenk	li	t1, 0x00000000
391400558b5Swdenk	sw	t1, 0(t0)
392400558b5Swdenk	sync
393400558b5Swdenk
394400558b5Swdenk	li	t0, 0xB1100100
395400558b5Swdenk	li	t1, 0x00000000
396400558b5Swdenk	sw	t1, 0(t0)
397400558b5Swdenk
398400558b5Swdenk	li	t0, 0xB1400100
399400558b5Swdenk	li	t1, 0x00000000
400400558b5Swdenk	sw	t1, 0(t0)
401400558b5Swdenk
402400558b5Swdenk
403400558b5Swdenk	li	t0, SYS_WAKEMSK
404400558b5Swdenk	li	t1, 0x00000000
405400558b5Swdenk	sw	t1, 0(t0)
406400558b5Swdenk
407400558b5Swdenk	li	t0, SYS_WAKESRC
408400558b5Swdenk	li	t1, 0x00000000
409400558b5Swdenk	sw	t1, 0(t0)
410400558b5Swdenk
411400558b5Swdenk	/* wait 1mS before setup */
412400558b5Swdenk	li	t1, MEM_1MS
413400558b5Swdenk1:	add	t1, -1
414400558b5Swdenk	bne	t1, zero, 1b
415400558b5Swdenk	nop
416400558b5Swdenk
417400558b5Swdenk#ifdef CONFIG_DBAU1550
418400558b5Swdenk/* SDCS 0,1,2 DDR SDRAM */
419400558b5Swdenk	li	t0, MEM_SDMODE0
420400558b5Swdenk	li	t1, 0x04276221
421400558b5Swdenk	sw	t1, 0(t0)
422400558b5Swdenk
423400558b5Swdenk	li	t0, MEM_SDMODE1
424400558b5Swdenk	li	t1, 0x04276221
425400558b5Swdenk	sw	t1, 0(t0)
426400558b5Swdenk
427400558b5Swdenk	li	t0, MEM_SDMODE2
428400558b5Swdenk	li	t1, 0x04276221
429400558b5Swdenk	sw	t1, 0(t0)
430400558b5Swdenk
431400558b5Swdenk	li	t0, MEM_SDADDR0
432400558b5Swdenk	li	t1, 0xe21003f0
433400558b5Swdenk	sw	t1, 0(t0)
434400558b5Swdenk
435400558b5Swdenk	li	t0, MEM_SDADDR1
436400558b5Swdenk	li	t1, 0xe21043f0
437400558b5Swdenk	sw	t1, 0(t0)
438400558b5Swdenk
439400558b5Swdenk	li	t0, MEM_SDADDR2
440400558b5Swdenk	li	t1, 0xe21083f0
441400558b5Swdenk	sw	t1, 0(t0)
442400558b5Swdenk
443400558b5Swdenk	sync
444400558b5Swdenk
445400558b5Swdenk	li	t0, MEM_SDCONFIGA
446400558b5Swdenk	li	t1, 0x9030060a /* Program refresh - disabled */
447400558b5Swdenk	sw	t1, 0(t0)
448400558b5Swdenk	sync
449400558b5Swdenk
450400558b5Swdenk	li	t0, MEM_SDCONFIGB
451400558b5Swdenk	li	t1, 0x00028000
452400558b5Swdenk	sw	t1, 0(t0)
453400558b5Swdenk	sync
454400558b5Swdenk
455400558b5Swdenk	li	t0, MEM_SDPRECMD /* Precharge all */
456400558b5Swdenk	li	t1, 0
457400558b5Swdenk	sw	t1, 0(t0)
458400558b5Swdenk	sync
459400558b5Swdenk
460400558b5Swdenk	li	t0, MEM_SDWRMD0
461400558b5Swdenk	li	t1, 0x40000000
462400558b5Swdenk	sw	t1, 0(t0)
463400558b5Swdenk	sync
464400558b5Swdenk
465400558b5Swdenk	li	t0, MEM_SDWRMD1
466400558b5Swdenk	li	t1, 0x40000000
467400558b5Swdenk	sw	t1, 0(t0)
468400558b5Swdenk	sync
469400558b5Swdenk
470400558b5Swdenk	li	t0, MEM_SDWRMD2
471400558b5Swdenk	li	t1, 0x40000000
472400558b5Swdenk	sw	t1, 0(t0)
473400558b5Swdenk	sync
474400558b5Swdenk
475400558b5Swdenk	li	t0, MEM_SDWRMD0
476400558b5Swdenk	li	t1, 0x00000063
477400558b5Swdenk	sw	t1, 0(t0)
478400558b5Swdenk	sync
479400558b5Swdenk
480400558b5Swdenk	li	t0, MEM_SDWRMD1
481400558b5Swdenk	li	t1, 0x00000063
482400558b5Swdenk	sw	t1, 0(t0)
483400558b5Swdenk	sync
484400558b5Swdenk
485400558b5Swdenk	li	t0, MEM_SDWRMD2
486400558b5Swdenk	li	t1, 0x00000063
487400558b5Swdenk	sw	t1, 0(t0)
488400558b5Swdenk	sync
489400558b5Swdenk
490400558b5Swdenk	li	t0, MEM_SDPRECMD /* Precharge all */
491400558b5Swdenk	sw	zero, 0(t0)
492400558b5Swdenk	sync
493400558b5Swdenk
494400558b5Swdenk	/* Issue 2 autoref */
495400558b5Swdenk	li	t0, MEM_SDAUTOREF
496400558b5Swdenk	sw	zero, 0(t0)
497400558b5Swdenk	sync
498400558b5Swdenk
499400558b5Swdenk	li	t0, MEM_SDAUTOREF
500400558b5Swdenk	sw	zero, 0(t0)
501400558b5Swdenk	sync
502400558b5Swdenk
503400558b5Swdenk	/* Enable refresh */
504400558b5Swdenk	li	t0, MEM_SDCONFIGA
505400558b5Swdenk	li	t1, 0x9830060a /* Program refresh - enabled */
506400558b5Swdenk	sw	t1, 0(t0)
507400558b5Swdenk	sync
508400558b5Swdenk
509400558b5Swdenk#else /* CONFIG_DBAU1550 */
510400558b5Swdenk/* SDCS 0,1 SDRAM */
511400558b5Swdenk	li	t0, MEM_SDMODE0
512400558b5Swdenk	li	t1, 0x005522AA
513400558b5Swdenk	sw	t1, 0(t0)
514400558b5Swdenk
515400558b5Swdenk	li	t0, MEM_SDMODE1
516400558b5Swdenk	li	t1, 0x005522AA
517400558b5Swdenk	sw	t1, 0(t0)
518400558b5Swdenk
519400558b5Swdenk	li	t0, MEM_SDMODE2
520400558b5Swdenk	li	t1, 0x00000000
521400558b5Swdenk	sw	t1, 0(t0)
522400558b5Swdenk
523400558b5Swdenk	li	t0, MEM_SDADDR0
524400558b5Swdenk	li	t1, 0x001003F8
525400558b5Swdenk	sw	t1, 0(t0)
526400558b5Swdenk
527400558b5Swdenk
528400558b5Swdenk	li	t0, MEM_SDADDR1
529400558b5Swdenk	li	t1, 0x001023F8
530400558b5Swdenk	sw	t1, 0(t0)
531400558b5Swdenk
532400558b5Swdenk	li	t0, MEM_SDADDR2
533400558b5Swdenk	li	t1, 0x00000000
534400558b5Swdenk	sw	t1, 0(t0)
535400558b5Swdenk
536400558b5Swdenk	sync
537400558b5Swdenk
538400558b5Swdenk	li	t0, MEM_SDREFCFG
539400558b5Swdenk	li	t1, 0x64000C24 /* Disable */
540400558b5Swdenk	sw	t1, 0(t0)
541400558b5Swdenk	sync
542400558b5Swdenk
543400558b5Swdenk	li	t0, MEM_SDPRECMD
544400558b5Swdenk	sw	zero, 0(t0)
545400558b5Swdenk	sync
546400558b5Swdenk
547400558b5Swdenk	li	t0, MEM_SDAUTOREF
548400558b5Swdenk	sw	zero, 0(t0)
549400558b5Swdenk	sync
550400558b5Swdenk	sw	zero, 0(t0)
551400558b5Swdenk	sync
552400558b5Swdenk
553400558b5Swdenk	li	t0, MEM_SDREFCFG
554400558b5Swdenk	li	t1, 0x66000C24 /* Enable */
555400558b5Swdenk	sw	t1, 0(t0)
556400558b5Swdenk	sync
557400558b5Swdenk
558400558b5Swdenk	li	t0, MEM_SDWRMD0
559400558b5Swdenk	li	t1, 0x00000033
560400558b5Swdenk	sw	t1, 0(t0)
561400558b5Swdenk	sync
562400558b5Swdenk
563400558b5Swdenk	li	t0, MEM_SDWRMD1
564400558b5Swdenk	li	t1, 0x00000033
565400558b5Swdenk	sw	t1, 0(t0)
566400558b5Swdenk	sync
567400558b5Swdenk
568400558b5Swdenk#endif /* CONFIG_DBAU1550 */
569400558b5Swdenk	/* wait 1mS after setup */
570400558b5Swdenk	li	t1, MEM_1MS
571400558b5Swdenk1:	add	t1, -1
572400558b5Swdenk	bne	t1, zero, 1b
573400558b5Swdenk	nop
574400558b5Swdenk
575400558b5Swdenk	li	t0, SYS_PINFUNC
576400558b5Swdenk	li	t1, 0x00008080
577400558b5Swdenk	sw	t1, 0(t0)
578400558b5Swdenk
579400558b5Swdenk	li	t0, SYS_TRIOUTCLR
580400558b5Swdenk	li	t1, 0x00001FFF
581400558b5Swdenk	sw	t1, 0(t0)
582400558b5Swdenk
583400558b5Swdenk	li	t0, SYS_OUTPUTCLR
584400558b5Swdenk	li	t1, 0x00008000
585400558b5Swdenk	sw	t1, 0(t0)
586400558b5Swdenk	sync
587400558b5Swdenk
58843c50925SShinya Kuribayashi	jr	ra
589400558b5Swdenk	nop
590