summaryrefslogtreecommitdiffstats
path: root/board/renesas/rsk7269/lowlevel_init.S
blob: a2b174bbc1df7d586d365af0918184620d0742e2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
/*
 * Copyright (C) 2012 Renesas Electronics Europe Ltd.
 * Copyright (C) 2012 Phil Edworthy
 * Copyright (C) 2008 Renesas Solutions Corp.
 * Copyright (C) 2008 Nobuhiro Iwamatsu
 *
 * Based on board/renesas/rsk7264/lowlevel_init.S
 *
 * SPDX-License-Identifier:	GPL-2.0+
 */
#include <config.h>
#include <version.h>

#include <asm/processor.h>
#include <asm/macro.h>

	.global	lowlevel_init

	.text
	.align	2

lowlevel_init:
	/* Flush and enable caches (data cache in write-through mode) */
	write32	CCR1_A ,CCR1_D

	/* Disable WDT */
	write16	WTCSR_A, WTCSR_D
	write16	WTCNT_A, WTCNT_D

	/* Disable Register Bank interrupts */
	write16 IBNR_A, IBNR_D

	/* Set clocks based on 13.225MHz xtal */
	write16	FRQCR_A, FRQCR_D	/* CPU=266MHz, I=133MHz, P=66MHz */

	/* Enable all peripherals */
	write8 STBCR3_A, STBCR3_D
	write8 STBCR4_A, STBCR4_D
	write8 STBCR5_A, STBCR5_D
	write8 STBCR6_A, STBCR6_D
	write8 STBCR7_A, STBCR7_D
	write8 STBCR8_A, STBCR8_D
	write8 STBCR9_A, STBCR9_D
	write8 STBCR10_A, STBCR10_D

	/* SCIF7 and IIC2 */
	write16 PJCR3_A, PJCR3_D	/* TXD7 */
	write16 PECR1_A, PECR1_D	/* RXD7, SDA2, SCL2 */

	/* Configure bus (CS0) */
	write16 PFCR3_A, PFCR3_D	/* A24 */
	write16 PFCR2_A, PFCR2_D	/* A23 and CS1# */
	write16 PBCR5_A, PBCR5_D	/* A22, A21, A20 */
	write16 PCCR0_A, PCCR0_D	/* DQMLL#, RD/WR# */
	write32 CS0WCR_A, CS0WCR_D
	write32 CS0BCR_A, CS0BCR_D

	/* Configure SDRAM (CS3) */
	write16 PCCR2_A, PCCR2_D	/* CS3# */
	write16 PCCR1_A, PCCR1_D	/* CKE, CAS#, RAS#, DQMLU# */
	write16 PCCR0_A, PCCR0_D	/* DQMLL#, RD/WR# */
	write32	CS3BCR_A, CS3BCR_D
	write32	CS3WCR_A, CS3WCR_D
	write32	SDCR_A, SDCR_D
	write32	RTCOR_A, RTCOR_D
	write32	RTCSR_A, RTCSR_D

	/* Configure ethernet (CS1) */
	write16 PHCR1_A, PHCR1_D	/* PINT5 on PH5 */
	write16 PHCR0_A, PHCR0_D
	write16 PFCR2_A, PFCR2_D	/* CS1# */
	write32	CS1BCR_A, CS1BCR_D	/* Big endian */
	write32	CS1WCR_A, CS1WCR_D	/* 1 cycle */
	write16 PJDR1_A, PJDR1_D	/* FIFO-SEL = 1 */
	write16 PJIOR1_A, PJIOR1_D

	/* wait 200us */
	mov.l	REPEAT_D, r3
	mov	#0, r2
repeat0:
	add	#1, r2
	cmp/hs	r3, r2
	bf	repeat0
	nop

	mov.l	SDRAM_MODE, r1
	mov	#0, r0
	mov.l	r0, @r1

	nop
	rts

	.align 4

CCR1_A:		.long CCR1
CCR1_D:		.long 0x0000090B

STBCR3_A:	.long 0xFFFE0408
STBCR4_A:	.long 0xFFFE040C
STBCR5_A:	.long 0xFFFE0410
STBCR6_A:	.long 0xFFFE0414
STBCR7_A:	.long 0xFFFE0418
STBCR8_A:	.long 0xFFFE041C
STBCR9_A:	.long 0xFFFE0440
STBCR10_A:	.long 0xFFFE0444
STBCR3_D:	.long 0x0000001A
STBCR4_D:	.long 0x00000000
STBCR5_D:	.long 0x00000000
STBCR6_D:	.long 0x00000000
STBCR7_D:	.long 0x00000012
STBCR8_D:	.long 0x00000009
STBCR9_D:	.long 0x00000000
STBCR10_D:	.long 0x00000010

WTCSR_A:	.long 0xFFFE0000
WTCNT_A:	.long 0xFFFE0002
WTCSR_D:	.word 0xA518
WTCNT_D:	.word 0x5A00

IBNR_A:		.long 0xFFFE080E
IBNR_D:		.word 0x0000
.align 2
FRQCR_A:	.long 0xFFFE0010
FRQCR_D:	.word 0x0015
.align 2

PJCR3_A:	.long 0xFFFE3908
PJCR3_D:	.word 0x5000
.align 2
PECR1_A:	.long 0xFFFE388C
PECR1_D:	.word 0x2011
.align 2

PFCR3_A:	.long 0xFFFE38A8
PFCR2_A:	.long 0xFFFE38AA
PBCR5_A:	.long 0xFFFE3824
PFCR3_D:	.word 0x0010
PFCR2_D:	.word 0x0101
PBCR5_D:	.word 0x0111
.align 2
CS0WCR_A:	.long 0xFFFC0028
CS0WCR_D:	.long 0x00000341
CS0BCR_A:	.long 0xFFFC0004
CS0BCR_D:	.long 0x00000400

PCCR2_A:	.long 0xFFFE384A
PCCR1_A:	.long 0xFFFE384C
PCCR0_A:	.long 0xFFFE384E
PCCR2_D:	.word 0x0001
PCCR1_D:	.word 0x1111
PCCR0_D:	.word 0x1111
.align 2
CS3BCR_A:	.long 0xFFFC0010
CS3BCR_D:	.long 0x00004400
CS3WCR_A:	.long 0xFFFC0034
CS3WCR_D:	.long 0x00004912
SDCR_A:		.long 0xFFFC004C
SDCR_D:		.long 0x00000811
RTCOR_A:	.long 0xFFFC0058
RTCOR_D:	.long 0xA55A0035
RTCSR_A:	.long 0xFFFC0050
RTCSR_D:	.long 0xA55A0010
.align 2
SDRAM_MODE:	.long 0xFFFC5460
REPEAT_D:	.long 0x000033F1

PHCR1_A:	.long 0xFFFE38EC
PHCR0_A:	.long 0xFFFE38EE
PHCR1_D:	.word 0x2222
PHCR0_D:	.word 0x2222
.align 2
CS1BCR_A:	.long 0xFFFC0008
CS1BCR_D:	.long 0x00000400
CS1WCR_A:	.long 0xFFFC002C
CS1WCR_D:	.long 0x00000080
PJDR1_A:	.long 0xFFFE3914
PJDR1_D:	.word 0x0000
.align 2
PJIOR1_A:	.long 0xFFFE3910
PJIOR1_D:	.word 0x8000
.align 2
OpenPOWER on IntegriCloud