1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * (C) Copyright 2018 Michal Simek
4  */
5 
6 #include <asm/arch/ps7_init_gpl.h>
7 
8 static unsigned long ps7_pll_init_data_3_0[] = {
9 	EMIT_MASKWRITE(0xf8000008, 0x0000ffff, 0x0000df0d),
10 	EMIT_MASKWRITE(0xf8000110, 0x003ffff0, 0x000fa220),
11 	EMIT_MASKWRITE(0xf8000100, 0x0007f000, 0x00028000),
12 	EMIT_MASKWRITE(0xf8000100, 0x00000010, 0x00000010),
13 	EMIT_MASKWRITE(0xf8000100, 0x00000001, 0x00000001),
14 	EMIT_MASKWRITE(0xf8000100, 0x00000001, 0x00000000),
15 	EMIT_MASKPOLL(0xf800010c, 0x00000001),
16 	EMIT_MASKWRITE(0xf8000100, 0x00000010, 0x00000000),
17 	EMIT_MASKWRITE(0xf8000120, 0x1f003f30, 0x1f000200),
18 	EMIT_MASKWRITE(0xf8000114, 0x003ffff0, 0x0012c220),
19 	EMIT_MASKWRITE(0xf8000104, 0x0007f000, 0x00020000),
20 	EMIT_MASKWRITE(0xf8000104, 0x00000010, 0x00000010),
21 	EMIT_MASKWRITE(0xf8000104, 0x00000001, 0x000000),
22 	EMIT_MASKWRITE(0xf8000104, 0x00000001, 0x00000000),
23 	EMIT_MASKPOLL(0xf800010c, 0x00000002),
24 	EMIT_MASKWRITE(0xf8000104, 0x00000010, 0x00000000),
25 	EMIT_MASKWRITE(0xf8000124, 0xfff00003, 0x0c200003),
26 	EMIT_MASKWRITE(0xf8000118, 0x003ffff0, 0x001452c0),
27 	EMIT_MASKWRITE(0xf8000108, 0x0007f000, 0x0001e000),
28 	EMIT_MASKWRITE(0xf8000108, 0x00000010, 0x00000010),
29 	EMIT_MASKWRITE(0xf8000108, 0x00000001, 0x00000001),
30 	EMIT_MASKWRITE(0xf8000108, 0x00000001, 0x00000000),
31 	EMIT_MASKPOLL(0xf800010c, 0x00000004),
32 	EMIT_MASKWRITE(0xf8000108, 0x00000010, 0x00000000),
33 	EMIT_MASKWRITE(0xf8000004, 0x0000ffff, 0x0000767b),
34 	EMIT_EXIT(),
35 };
36 
37 static unsigned long ps7_clock_init_data_3_0[] = {
38 	EMIT_MASKWRITE(0xf8000008, 0x0000ffff, 0x0000df0d),
39 	EMIT_MASKWRITE(0xf8000128, 0x03f03f01, 0x00302301),
40 	EMIT_MASKWRITE(0xf8000138, 0x00000011, 0x00000001),
41 	EMIT_MASKWRITE(0xf8000140, 0x03f03f71, 0x00100801),
42 	EMIT_MASKWRITE(0xf8000148, 0x00003f31, 0x00000a01),
43 	EMIT_MASKWRITE(0xf8000150, 0x00003f33, 0x00002801),
44 	EMIT_MASKWRITE(0xf8000154, 0x00003f33, 0x00001402),
45 	EMIT_MASKWRITE(0xf8000168, 0x00003f31, 0x00000501),
46 	EMIT_MASKWRITE(0xf8000170, 0x03f03f30, 0x00101400),
47 	EMIT_MASKWRITE(0xf8000180, 0x03f03f30, 0x00100a00),
48 	EMIT_MASKWRITE(0xf8000190, 0x03f03f30, 0x00101e00),
49 	EMIT_MASKWRITE(0xf80001a0, 0x03f03f30, 0x00101400),
50 	EMIT_MASKWRITE(0xf80001c4, 0x00000001, 0x00000001),
51 	EMIT_MASKWRITE(0xf800012c, 0x01ffcccd, 0x016c044d),
52 	EMIT_MASKWRITE(0xf8000004, 0x0000ffff, 0x0000767b),
53 	EMIT_EXIT(),
54 };
55 
56 static unsigned long ps7_ddr_init_data_3_0[] = {
57 	EMIT_MASKWRITE(0xf8006000, 0x0001ffff, 0x00000080),
58 	EMIT_MASKWRITE(0xf8006004, 0x0007ffff, 0x00001081),
59 	EMIT_MASKWRITE(0xf8006008, 0x03ffffff, 0x03c0780f),
60 	EMIT_MASKWRITE(0xf800600c, 0x03ffffff, 0x02001001),
61 	EMIT_MASKWRITE(0xf8006010, 0x03ffffff, 0x00014001),
62 	EMIT_MASKWRITE(0xf8006014, 0x001fffff, 0x0004281b),
63 	EMIT_MASKWRITE(0xf8006018, 0xf7ffffff, 0x44e458d1),
64 	EMIT_MASKWRITE(0xf800601c, 0xffffffff, 0xb2023584),
65 	EMIT_MASKWRITE(0xf8006020, 0x7fdffffc, 0x2b08b2d0),
66 	EMIT_MASKWRITE(0xf8006024, 0x0fffffc3, 0x00000000),
67 	EMIT_MASKWRITE(0xf8006028, 0x00003fff, 0x00002007),
68 	EMIT_MASKWRITE(0xf800602c, 0xffffffff, 0x00000000),
69 	EMIT_MASKWRITE(0xf8006030, 0xffffffff, 0x00040970),
70 	EMIT_MASKWRITE(0xf8006034, 0x13ff3fff, 0x000116d4),
71 	EMIT_MASKWRITE(0xf8006038, 0x00000003, 0x00000000),
72 	EMIT_MASKWRITE(0xf800603c, 0x000fffff, 0x00000777),
73 	EMIT_MASKWRITE(0xf8006040, 0xffffffff, 0xfff00000),
74 	EMIT_MASKWRITE(0xf8006044, 0x0fffffff, 0x0f666666),
75 	EMIT_MASKWRITE(0xf8006048, 0x0003f03f, 0x0003c008),
76 	EMIT_MASKWRITE(0xf8006050, 0xff0f8fff, 0x77010800),
77 	EMIT_MASKWRITE(0xf8006058, 0x00010000, 0x00000000),
78 	EMIT_MASKWRITE(0xf800605c, 0x0000ffff, 0x00005003),
79 	EMIT_MASKWRITE(0xf8006060, 0x000017ff, 0x0000003e),
80 	EMIT_MASKWRITE(0xf8006064, 0x00021fe0, 0x00020000),
81 	EMIT_MASKWRITE(0xf8006068, 0x03ffffff, 0x00284545),
82 	EMIT_MASKWRITE(0xf800606c, 0x0000ffff, 0x00001610),
83 	EMIT_MASKWRITE(0xf8006078, 0x03ffffff, 0x00466111),
84 	EMIT_MASKWRITE(0xf800607c, 0x000fffff, 0x00032222),
85 	EMIT_MASKWRITE(0xf80060a4, 0xffffffff, 0x10200802),
86 	EMIT_MASKWRITE(0xf80060a8, 0x0fffffff, 0x0690cb73),
87 	EMIT_MASKWRITE(0xf80060ac, 0x000001ff, 0x000001fe),
88 	EMIT_MASKWRITE(0xf80060b0, 0x1fffffff, 0x1cffffff),
89 	EMIT_MASKWRITE(0xf80060b4, 0x00000200, 0x00000200),
90 	EMIT_MASKWRITE(0xf80060b8, 0x01ffffff, 0x0020006a),
91 	EMIT_MASKWRITE(0xf80060c4, 0x00000003, 0x00000003),
92 	EMIT_MASKWRITE(0xf80060c4, 0x00000003, 0x00000000),
93 	EMIT_MASKWRITE(0xf80060c8, 0x000000ff, 0x00000000),
94 	EMIT_MASKWRITE(0xf80060dc, 0x00000001, 0x00000000),
95 	EMIT_MASKWRITE(0xf80060f0, 0x0000ffff, 0x00000000),
96 	EMIT_MASKWRITE(0xf80060f4, 0x0000000f, 0x00000008),
97 	EMIT_MASKWRITE(0xf8006114, 0x000000ff, 0x00000000),
98 	EMIT_MASKWRITE(0xf8006118, 0x7fffffcf, 0x40000001),
99 	EMIT_MASKWRITE(0xf800611c, 0x7fffffcf, 0x40000001),
100 	EMIT_MASKWRITE(0xf8006120, 0x7fffffcf, 0x40000001),
101 	EMIT_MASKWRITE(0xf8006124, 0x7fffffcf, 0x40000001),
102 	EMIT_MASKWRITE(0xf800612c, 0x000fffff, 0x0002c000),
103 	EMIT_MASKWRITE(0xf8006130, 0x000fffff, 0x0002c400),
104 	EMIT_MASKWRITE(0xf8006134, 0x000fffff, 0x0002f003),
105 	EMIT_MASKWRITE(0xf8006138, 0x000fffff, 0x0002ec03),
106 	EMIT_MASKWRITE(0xf8006140, 0x000fffff, 0x00000035),
107 	EMIT_MASKWRITE(0xf8006144, 0x000fffff, 0x00000035),
108 	EMIT_MASKWRITE(0xf8006148, 0x000fffff, 0x00000035),
109 	EMIT_MASKWRITE(0xf800614c, 0x000fffff, 0x00000035),
110 	EMIT_MASKWRITE(0xf8006154, 0x000fffff, 0x00000077),
111 	EMIT_MASKWRITE(0xf8006158, 0x000fffff, 0x00000077),
112 	EMIT_MASKWRITE(0xf800615c, 0x000fffff, 0x00000083),
113 	EMIT_MASKWRITE(0xf8006160, 0x000fffff, 0x00000083),
114 	EMIT_MASKWRITE(0xf8006168, 0x001fffff, 0x00000105),
115 	EMIT_MASKWRITE(0xf800616c, 0x001fffff, 0x00000106),
116 	EMIT_MASKWRITE(0xf8006170, 0x001fffff, 0x00000111),
117 	EMIT_MASKWRITE(0xf8006174, 0x001fffff, 0x00000110),
118 	EMIT_MASKWRITE(0xf800617c, 0x000fffff, 0x000000b7),
119 	EMIT_MASKWRITE(0xf8006180, 0x000fffff, 0x000000b7),
120 	EMIT_MASKWRITE(0xf8006184, 0x000fffff, 0x000000c3),
121 	EMIT_MASKWRITE(0xf8006188, 0x000fffff, 0x000000c3),
122 	EMIT_MASKWRITE(0xf8006190, 0x6ffffefe, 0x00040080),
123 	EMIT_MASKWRITE(0xf8006194, 0x000fffff, 0x0001fd01),
124 	EMIT_MASKWRITE(0xf8006204, 0xffffffff, 0x00000000),
125 	EMIT_MASKWRITE(0xf8006208, 0x000703ff, 0x000003ff),
126 	EMIT_MASKWRITE(0xf800620c, 0x000703ff, 0x000003ff),
127 	EMIT_MASKWRITE(0xf8006210, 0x000703ff, 0x000003ff),
128 	EMIT_MASKWRITE(0xf8006214, 0x000703ff, 0x000003ff),
129 	EMIT_MASKWRITE(0xf8006218, 0x000f03ff, 0x000003ff),
130 	EMIT_MASKWRITE(0xf800621c, 0x000f03ff, 0x000003ff),
131 	EMIT_MASKWRITE(0xf8006220, 0x000f03ff, 0x000003ff),
132 	EMIT_MASKWRITE(0xf8006224, 0x000f03ff, 0x000003ff),
133 	EMIT_MASKWRITE(0xf80062a8, 0x00000ff5, 0x00000000),
134 	EMIT_MASKWRITE(0xf80062ac, 0xffffffff, 0x00000000),
135 	EMIT_MASKWRITE(0xf80062b0, 0x003fffff, 0x00005125),
136 	EMIT_MASKWRITE(0xf80062b4, 0x0003ffff, 0x000012a8),
137 	EMIT_MASKPOLL(0xf8000b74, 0x00002000),
138 	EMIT_MASKWRITE(0xf8006000, 0x0001ffff, 0x00000081),
139 	EMIT_MASKPOLL(0xf8006054, 0x00000007),
140 	EMIT_EXIT(),
141 };
142 
143 static unsigned long ps7_mio_init_data_3_0[] = {
144 	EMIT_MASKWRITE(0xf8000008, 0x0000ffff, 0x0000df0d),
145 	EMIT_MASKWRITE(0xf8000b40, 0x00000fff, 0x00000600),
146 	EMIT_MASKWRITE(0xf8000b44, 0x00000fff, 0x00000600),
147 	EMIT_MASKWRITE(0xf8000b48, 0x00000fff, 0x00000672),
148 	EMIT_MASKWRITE(0xf8000b4c, 0x00000fff, 0x00000672),
149 	EMIT_MASKWRITE(0xf8000b50, 0x00000fff, 0x00000674),
150 	EMIT_MASKWRITE(0xf8000b54, 0x00000fff, 0x00000674),
151 	EMIT_MASKWRITE(0xf8000b58, 0x00000fff, 0x00000600),
152 	EMIT_MASKWRITE(0xf8000b5c, 0xffffffff, 0x0018c068),
153 	EMIT_MASKWRITE(0xf8000b60, 0xffffffff, 0x00f98068),
154 	EMIT_MASKWRITE(0xf8000b64, 0xffffffff, 0x00f98068),
155 	EMIT_MASKWRITE(0xf8000b68, 0xffffffff, 0x00f98068),
156 	EMIT_MASKWRITE(0xf8000b6c, 0x00007fff, 0x00000205),
157 	EMIT_MASKWRITE(0xf8000b70, 0x00000001, 0x00000001),
158 	EMIT_MASKWRITE(0xf8000b70, 0x00000021, 0x00000020),
159 	EMIT_MASKWRITE(0xf8000b70, 0x07feffff, 0x00000823),
160 	EMIT_MASKWRITE(0xf8000700, 0x00003fff, 0x00000610),
161 	EMIT_MASKWRITE(0xf8000704, 0x00003fff, 0x00000600),
162 	EMIT_MASKWRITE(0xf8000708, 0x00003fff, 0x00000610),
163 	EMIT_MASKWRITE(0xf800070c, 0x00003fff, 0x00000610),
164 	EMIT_MASKWRITE(0xf8000710, 0x00003fff, 0x00000610),
165 	EMIT_MASKWRITE(0xf8000714, 0x00003fff, 0x00000610),
166 	EMIT_MASKWRITE(0xf8000718, 0x00003fff, 0x00000610),
167 	EMIT_MASKWRITE(0xf800071c, 0x00003fff, 0x00000610),
168 	EMIT_MASKWRITE(0xf8000720, 0x00003fff, 0x00000610),
169 	EMIT_MASKWRITE(0xf8000724, 0x00003fff, 0x00000610),
170 	EMIT_MASKWRITE(0xf8000728, 0x00003fff, 0x00000610),
171 	EMIT_MASKWRITE(0xf800072c, 0x00003fff, 0x00000610),
172 	EMIT_MASKWRITE(0xf8000730, 0x00003fff, 0x00000610),
173 	EMIT_MASKWRITE(0xf8000734, 0x00003fff, 0x00000610),
174 	EMIT_MASKWRITE(0xf8000738, 0x00003fff, 0x00000611),
175 	EMIT_MASKWRITE(0xf800073c, 0x00003fff, 0x00000600),
176 	EMIT_MASKWRITE(0xf8000740, 0x00003fff, 0x00000202),
177 	EMIT_MASKWRITE(0xf8000744, 0x00003fff, 0x00000202),
178 	EMIT_MASKWRITE(0xf8000748, 0x00003fff, 0x00000202),
179 	EMIT_MASKWRITE(0xf800074c, 0x00003fff, 0x00000202),
180 	EMIT_MASKWRITE(0xf8000750, 0x00003fff, 0x00000202),
181 	EMIT_MASKWRITE(0xf8000754, 0x00003fff, 0x00000202),
182 	EMIT_MASKWRITE(0xf8000758, 0x00003fff, 0x00000203),
183 	EMIT_MASKWRITE(0xf800075c, 0x00003fff, 0x00000203),
184 	EMIT_MASKWRITE(0xf8000760, 0x00003fff, 0x00000203),
185 	EMIT_MASKWRITE(0xf8000764, 0x00003fff, 0x00000203),
186 	EMIT_MASKWRITE(0xf8000768, 0x00003fff, 0x00000203),
187 	EMIT_MASKWRITE(0xf800076c, 0x00003fff, 0x00000203),
188 	EMIT_MASKWRITE(0xf8000770, 0x00003fff, 0x00000200),
189 	EMIT_MASKWRITE(0xf8000774, 0x00003fff, 0x00000200),
190 	EMIT_MASKWRITE(0xf8000778, 0x00003fff, 0x00000200),
191 	EMIT_MASKWRITE(0xf800077c, 0x00003fff, 0x00000200),
192 	EMIT_MASKWRITE(0xf8000780, 0x00003fff, 0x00000200),
193 	EMIT_MASKWRITE(0xf8000784, 0x00003fff, 0x00000200),
194 	EMIT_MASKWRITE(0xf8000788, 0x00003fff, 0x00000200),
195 	EMIT_MASKWRITE(0xf800078c, 0x00003fff, 0x00000200),
196 	EMIT_MASKWRITE(0xf8000790, 0x00003fff, 0x00000200),
197 	EMIT_MASKWRITE(0xf8000794, 0x00003fff, 0x00000200),
198 	EMIT_MASKWRITE(0xf8000798, 0x00003fff, 0x00000200),
199 	EMIT_MASKWRITE(0xf800079c, 0x00003fff, 0x00000200),
200 	EMIT_MASKWRITE(0xf80007a0, 0x00003fff, 0x00000280),
201 	EMIT_MASKWRITE(0xf80007a4, 0x00003fff, 0x00000280),
202 	EMIT_MASKWRITE(0xf80007a8, 0x00003fff, 0x00000280),
203 	EMIT_MASKWRITE(0xf80007ac, 0x00003fff, 0x00000280),
204 	EMIT_MASKWRITE(0xf80007b0, 0x00003fff, 0x00000280),
205 	EMIT_MASKWRITE(0xf80007b4, 0x00003fff, 0x00000280),
206 	EMIT_MASKWRITE(0xf80007b8, 0x00003f01, 0x00000201),
207 	EMIT_MASKWRITE(0xf80007bc, 0x00003fff, 0x00000200),
208 	EMIT_MASKWRITE(0xf80007c0, 0x00003fff, 0x000002e0),
209 	EMIT_MASKWRITE(0xf80007c4, 0x00003fff, 0x000002e1),
210 	EMIT_MASKWRITE(0xf80007c8, 0x00003f01, 0x00000201),
211 	EMIT_MASKWRITE(0xf80007cc, 0x00003fff, 0x00000200),
212 	EMIT_MASKWRITE(0xf80007d0, 0x00003fff, 0x00000280),
213 	EMIT_MASKWRITE(0xf80007d4, 0x00003fff, 0x00000280),
214 	EMIT_MASKWRITE(0xf8000830, 0x003f003f, 0x002e0032),
215 	EMIT_MASKWRITE(0xf8000004, 0x0000ffff, 0x0000767b),
216 	EMIT_EXIT(),
217 };
218 
219 static unsigned long ps7_peripherals_init_data_3_0[] = {
220 	EMIT_MASKWRITE(0xf8000008, 0x0000ffff, 0x0000df0d),
221 	EMIT_MASKWRITE(0xf8000b48, 0x00000180, 0x00000180),
222 	EMIT_MASKWRITE(0xf8000b4c, 0x00000180, 0x00000180),
223 	EMIT_MASKWRITE(0xf8000b50, 0x00000180, 0x00000180),
224 	EMIT_MASKWRITE(0xf8000b54, 0x00000180, 0x00000180),
225 	EMIT_MASKWRITE(0xf8000004, 0x0000ffff, 0x0000767b),
226 	EMIT_MASKWRITE(0xe0001034, 0x000000ff, 0x00000006),
227 	EMIT_MASKWRITE(0xe0001018, 0x0000ffff, 0x0000003e),
228 	EMIT_MASKWRITE(0xe0001000, 0x000001ff, 0x00000017),
229 	EMIT_MASKWRITE(0xe0001004, 0x000003ff, 0x00000020),
230 	EMIT_MASKWRITE(0xe000d000, 0x00080000, 0x00080000),
231 	EMIT_MASKWRITE(0xf8007000, 0x20000000, 0x00000000),
232 	EMIT_MASKWRITE(0xe000e014, 0x00ffffff, 0x00449144),
233 	EMIT_MASKWRITE(0xe000e018, 0x00000003, 0x00000000),
234 	EMIT_MASKWRITE(0xe000e010, 0x03e00000, 0x02400000),
235 	EMIT_MASKDELAY(0xf8f00200, 0x00000001),
236 	EMIT_MASKDELAY(0xf8f00200, 0x00000001),
237 	EMIT_MASKDELAY(0xf8f00200, 0x00000001),
238 	EMIT_MASKDELAY(0xf8f00200, 0x00000001),
239 	EMIT_MASKDELAY(0xf8f00200, 0x00000001),
240 	EMIT_MASKDELAY(0xf8f00200, 0x00000001),
241 	EMIT_EXIT(),
242 };
243 
244 static unsigned long ps7_post_config_3_0[] = {
245 	EMIT_MASKWRITE(0xf8000008, 0x0000ffff, 0x0000df0d),
246 	EMIT_MASKWRITE(0xf8000900, 0x0000000f, 0x0000000f),
247 	EMIT_MASKWRITE(0xf8000240, 0xffffffff, 0x00000000),
248 	EMIT_MASKWRITE(0xf8008000, 0x00000001, 0x00000001),
249 	EMIT_MASKWRITE(0xf8008014, 0x00000001, 0x00000001),
250 	EMIT_MASKWRITE(0xf8000004, 0x0000ffff, 0x0000767b),
251 	EMIT_EXIT(),
252 };
253 
254 int ps7_init(void)
255 {
256 	int ret;
257 
258 	ret = ps7_config(ps7_mio_init_data_3_0);
259 	if (ret != PS7_INIT_SUCCESS)
260 		return ret;
261 	ret = ps7_config(ps7_pll_init_data_3_0);
262 	if (ret != PS7_INIT_SUCCESS)
263 		return ret;
264 	ret = ps7_config(ps7_clock_init_data_3_0);
265 	if (ret != PS7_INIT_SUCCESS)
266 		return ret;
267 	ret = ps7_config(ps7_ddr_init_data_3_0);
268 	if (ret != PS7_INIT_SUCCESS)
269 		return ret;
270 	ret = ps7_config(ps7_peripherals_init_data_3_0);
271 	if (ret != PS7_INIT_SUCCESS)
272 		return ret;
273 
274 	return PS7_INIT_SUCCESS;
275 }
276 
277 int ps7_post_config(void)
278 {
279 	return ps7_config(ps7_post_config_3_0);
280 }
281