1/*
2 * Copyright (C) 2008 Renesas Solutions Corp.
3 * Copyright (C) 2008 Nobuhiro Iwamatsu <iwamatsu.nobuhiro@renesas.com>
4 * Copyright (C) 2007 Kenati Technologies, Inc.
5 *
6 * board/sh7763rdp/lowlevel_init.S
7 *
8 * SPDX-License-Identifier:	GPL-2.0+
9 */
10
11#include <config.h>
12
13#include <asm/processor.h>
14#include <asm/macro.h>
15
16	.global	lowlevel_init
17
18	.text
19	.align	2
20
21lowlevel_init:
22
23	write32	WDTCSR_A, WDTCSR_D	/* Watchdog Control / Status Register */
24
25	write32	WDTST_A, WDTST_D	/* Watchdog Stop Time Register */
26
27	write32	WDTBST_A, WDTBST_D	/*
28					 * 0xFFCC0008
29					 * Watchdog Base Stop Time Register
30					 */
31
32	write32	CCR_A, CCR_CACHE_ICI_D	/* Address of Cache Control Register */
33					/* Instruction Cache Invalidate */
34
35	write32	MMUCR_A, MMU_CONTROL_TI_D	/* MMU Control Register */
36						/* TI == TLB Invalidate bit */
37
38	write32	MSTPCR0_A, MSTPCR0_D	/* Address of Power Control Register 0 */
39
40	write32	MSTPCR1_A, MSTPCR1_D	/* Address of Power Control Register 1 */
41
42	write32	RAMCR_A, RAMCR_D
43
44	mov.l	MMSELR_A, r1
45	mov.l	MMSELR_D, r0
46	synco
47	mov.l	r0, @r1
48
49	mov.l	@r1, r2		/* execute two reads after setting MMSELR */
50	mov.l	@r1, r2
51	synco
52
53	/* issue memory read */
54	mov.l	DDRSD_START_A, r1	/* memory address to read*/
55	mov.l	@r1, r0
56	synco
57
58	write32	MIM8_A, MIM8_D
59
60	write32	MIMC_A, MIMC_D1
61
62	write32	STRC_A, STRC_D
63
64	write32	SDR4_A, SDR4_D
65
66	write32	MIMC_A, MIMC_D2
67
68	nop
69	nop
70	nop
71
72	write32	SCR4_A, SCR4_D3
73
74	write32	SCR4_A, SCR4_D2
75
76	write32	SDMR02000_A, SDMR02000_D
77
78	write32	SDMR00B08_A, SDMR00B08_D
79
80	write32	SCR4_A, SCR4_D2
81
82	write32	SCR4_A, SCR4_D4
83
84	nop
85	nop
86	nop
87	nop
88
89	write32	SCR4_A, SCR4_D4
90
91	nop
92	nop
93	nop
94	nop
95
96	write32	SDMR00308_A, SDMR00308_D
97
98	write32	MIMC_A, MIMC_D3
99
100	mov.l	SCR4_A, r1
101	mov.l	SCR4_D1, r0
102	mov.l	DELAY60_D, r3
103
104delay_loop_60:
105	mov.l	r0, @r1
106	dt	r3
107	bf	delay_loop_60
108	nop
109
110	write32	CCR_A, CCR_CACHE_D_2	/* Address of Cache Control Register */
111
112bsc_init:
113	write32	BCR_A, BCR_D
114
115	write32	CS0BCR_A, CS0BCR_D
116
117	write32	CS1BCR_A, CS1BCR_D
118
119	write32	CS2BCR_A, CS2BCR_D
120
121	write32	CS4BCR_A, CS4BCR_D
122
123	write32	CS5BCR_A, CS5BCR_D
124
125	write32	CS6BCR_A, CS6BCR_D
126
127	write32	CS0WCR_A, CS0WCR_D
128
129	write32	CS1WCR_A, CS1WCR_D
130
131	write32	CS2WCR_A, CS2WCR_D
132
133	write32	CS4WCR_A, CS4WCR_D
134
135	write32	CS5WCR_A, CS5WCR_D
136
137	write32	CS6WCR_A, CS6WCR_D
138
139	write32	CS5PCR_A, CS5PCR_D
140
141	write32	CS6PCR_A, CS6PCR_D
142
143	mov.l	DELAY200_D, r3
144
145delay_loop_200:
146	dt	r3
147	bf	delay_loop_200
148	nop
149
150	write16	PSEL0_A, PSEL0_D
151
152	write16	PSEL1_A, PSEL1_D
153
154	write32	ICR0_A, ICR0_D
155
156	stc sr, r0	/* BL bit off(init=ON) */
157	mov.l	SR_MASK_D, r1
158	and r1, r0
159	ldc r0, sr
160
161	rts
162	nop
163
164	.align	2
165
166DELAY60_D:	.long	60
167DELAY200_D:	.long	17800
168
169CCR_A:		.long	0xFF00001C
170MMUCR_A:	.long	0xFF000010
171RAMCR_A:	.long	0xFF000074
172
173/* Low power mode control */
174MSTPCR0_A:	.long	0xFFC80030
175MSTPCR1_A:	.long	0xFFC80038
176
177/* RWBT */
178WDTST_A:	.long	0xFFCC0000
179WDTCSR_A:	.long	0xFFCC0004
180WDTBST_A:	.long	0xFFCC0008
181
182/* BSC */
183MMSELR_A:	.long	0xFE600020
184BCR_A:		.long	0xFF801000
185CS0BCR_A:	.long	0xFF802000
186CS1BCR_A:	.long	0xFF802010
187CS2BCR_A:	.long	0xFF802020
188CS4BCR_A:	.long	0xFF802040
189CS5BCR_A:	.long	0xFF802050
190CS6BCR_A:	.long	0xFF802060
191CS0WCR_A:	.long	0xFF802008
192CS1WCR_A:	.long	0xFF802018
193CS2WCR_A:	.long	0xFF802028
194CS4WCR_A:	.long	0xFF802048
195CS5WCR_A:	.long	0xFF802058
196CS6WCR_A:	.long	0xFF802068
197CS5PCR_A:	.long	0xFF802070
198CS6PCR_A:	.long	0xFF802080
199DDRSD_START_A:	.long	0xAC000000
200
201/* INTC */
202ICR0_A:		.long	0xFFD00000
203
204/* DDR I/F */
205MIM8_A:		.long	0xFE800008
206MIMC_A:		.long	0xFE80000C
207SCR4_A:		.long	0xFE800014
208STRC_A:		.long	0xFE80001C
209SDR4_A:		.long	0xFE800034
210SDMR00308_A:	.long	0xFE900308
211SDMR00B08_A:	.long	0xFE900B08
212SDMR02000_A:	.long	0xFE902000
213
214/* GPIO */
215PSEL0_A:	.long	0xFFEF0070
216PSEL1_A:	.long	0xFFEF0072
217
218CCR_CACHE_ICI_D:.long	0x00000800
219CCR_CACHE_D_2:	.long	0x00000103
220MMU_CONTROL_TI_D:.long	0x00000004
221RAMCR_D:	.long	0x00000200
222MSTPCR0_D:	.long	0x00000000
223MSTPCR1_D:	.long	0x00000000
224
225MMSELR_D:	.long	0xa5a50000
226BCR_D:		.long	0x00000000
227CS0BCR_D:	.long	0x77777770
228CS1BCR_D:	.long	0x77777670
229CS2BCR_D:	.long	0x77777670
230CS4BCR_D:	.long	0x77777670
231CS5BCR_D:	.long	0x77777670
232CS6BCR_D:	.long	0x77777670
233CS0WCR_D:	.long	0x7777770F
234CS1WCR_D:	.long	0x22000002
235CS2WCR_D:	.long	0x7777770F
236CS4WCR_D:	.long	0x7777770F
237CS5WCR_D:	.long	0x7777770F
238CS6WCR_D:	.long	0x7777770F
239CS5PCR_D:	.long	0x77000000
240CS6PCR_D:	.long	0x77000000
241ICR0_D:		.long	0x00E00000
242MIM8_D:		.long	0x00000000
243MIMC_D1:	.long	0x01d10008
244MIMC_D2:	.long	0x01d10009
245MIMC_D3:	.long	0x01d10209
246SCR4_D1:	.long	0x00000001
247SCR4_D2:	.long	0x00000002
248SCR4_D3:	.long	0x00000003
249SCR4_D4:	.long	0x00000004
250STRC_D:		.long	0x000f3980
251SDR4_D:		.long	0x00000300
252SDMR00308_D:	.long	0x00000000
253SDMR00B08_D:	.long	0x00000000
254SDMR02000_D:	.long	0x00000000
255PSEL0_D:	.word	0x00000001
256PSEL1_D:	.word	0x00000244
257SR_MASK_D:	.long	0xEFFFFF0F
258WDTST_D:	.long	0x5A000FFF
259WDTCSR_D:	.long	0xA5000000
260WDTBST_D:	.long	0x55000000
261