1 /*
2  * Copyright (c) 2015-2021, Renesas Electronics Corporation.
3  * All rights reserved.
4  *
5  * SPDX-License-Identifier: BSD-3-Clause
6  */
7 
8 #include <stdint.h>
9 #include <lib/mmio.h>
10 #include <common/debug.h>
11 #include "rcar_def.h"
12 #include "../ddr_regs.h"
13 
14 #define RCAR_DDR_VERSION	"rev.0.02"
15 
16 /* Average periodic refresh interval[ns]. Support 3900,7800 */
17 #define REFRESH_RATE  3900
18 
19 
20 #if RCAR_LSI != RCAR_D3
21 #error "Don't have DDR initialize routine."
22 #endif
23 
init_ddr_d3_1866(void)24 static void init_ddr_d3_1866(void)
25 {
26 	uint32_t i, r2, r3, r5, r6, r7, r12;
27 
28 	mmio_write_32(DBSC_DBSYSCNT0, 0x00001234);
29 	mmio_write_32(DBSC_DBKIND, 0x00000007);
30 	mmio_write_32(DBSC_DBMEMCONF_0_0, 0x0f030a01);
31 	mmio_write_32(DBSC_DBPHYCONF0, 0x00000001);
32 	mmio_write_32(DBSC_DBTR0, 0x0000000D);
33 	mmio_write_32(DBSC_DBTR1, 0x00000009);
34 	mmio_write_32(DBSC_DBTR2, 0x00000000);
35 	mmio_write_32(DBSC_DBTR3, 0x0000000D);
36 	mmio_write_32(DBSC_DBTR4, 0x000D000D);
37 	mmio_write_32(DBSC_DBTR5, 0x0000002D);
38 	mmio_write_32(DBSC_DBTR6, 0x00000020);
39 	mmio_write_32(DBSC_DBTR7, 0x00060006);
40 	mmio_write_32(DBSC_DBTR8, 0x00000021);
41 	mmio_write_32(DBSC_DBTR9, 0x00000007);
42 	mmio_write_32(DBSC_DBTR10, 0x0000000E);
43 	mmio_write_32(DBSC_DBTR11, 0x0000000C);
44 	mmio_write_32(DBSC_DBTR12, 0x00140014);
45 	mmio_write_32(DBSC_DBTR13, 0x000000F2);
46 	mmio_write_32(DBSC_DBTR14, 0x00170006);
47 	mmio_write_32(DBSC_DBTR15, 0x00060005);
48 	mmio_write_32(DBSC_DBTR16, 0x09210507);
49 	mmio_write_32(DBSC_DBTR17, 0x040E0000);
50 	mmio_write_32(DBSC_DBTR18, 0x00000200);
51 	mmio_write_32(DBSC_DBTR19, 0x0129004B);
52 	mmio_write_32(DBSC_DBTR20, 0x020000FB);
53 	mmio_write_32(DBSC_DBTR21, 0x00040004);
54 	mmio_write_32(DBSC_DBBL, 0x00000000);
55 	mmio_write_32(DBSC_DBODT0, 0x00000001);
56 	mmio_write_32(DBSC_DBADJ0, 0x00000001);
57 	mmio_write_32(DBSC_DBSYSCONF1, 0x00000002);
58 	mmio_write_32(DBSC_DBDFICNT_0, 0x00000010);
59 	mmio_write_32(DBSC_DBBCAMDIS, 0x00000001);
60 	mmio_write_32(DBSC_DBSCHRW1, 0x00000046);
61 	mmio_write_32(DBSC_SCFCTST0, 0x0C050B03);
62 	mmio_write_32(DBSC_SCFCTST1, 0x0305030C);
63 
64 	mmio_write_32(DBSC_DBPDLK_0, 0x0000A55A);
65 	mmio_write_32(DBSC_DBCMD, 0x01000001);
66 	mmio_write_32(DBSC_DBCMD, 0x08000000);
67 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000001);
68 	mmio_write_32(DBSC_DBPDRGD_0, 0x80010000);
69 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);
70 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
71 		;
72 
73 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000008);
74 	mmio_write_32(DBSC_DBPDRGD_0, 0x000B8000);
75 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000090);
76 	mmio_write_32(DBSC_DBPDRGD_0, 0x04058A04);
77 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000091);
78 	mmio_write_32(DBSC_DBPDRGD_0, 0x0007BB6B);
79 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000095);
80 	mmio_write_32(DBSC_DBPDRGD_0, 0x0007BBAD);
81 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000099);
82 	mmio_write_32(DBSC_DBPDRGD_0, 0x0007BB6B);
83 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000090);
84 	mmio_write_32(DBSC_DBPDRGD_0, 0x04058A00);
85 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000021);
86 	mmio_write_32(DBSC_DBPDRGD_0, 0x0024641E);
87 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000001);
88 	mmio_write_32(DBSC_DBPDRGD_0, 0x00010073);
89 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);
90 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
91 		;
92 
93 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000090);
94 	mmio_write_32(DBSC_DBPDRGD_0, 0x0C058A00);
95 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000090);
96 	mmio_write_32(DBSC_DBPDRGD_0, 0x04058A00);
97 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);
98 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
99 		;
100 
101 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000003);
102 	mmio_write_32(DBSC_DBPDRGD_0, 0x0780C700);
103 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000007);
104 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(30)))
105 		;
106 
107 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000004);
108 	mmio_write_32(DBSC_DBPDRGD_0,
109 		(uint32_t) (REFRESH_RATE * 928 / 125) - 400
110 			+ 0x0A300000);
111 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000022);
112 	mmio_write_32(DBSC_DBPDRGD_0, 0x1000040B);
113 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000023);
114 	mmio_write_32(DBSC_DBPDRGD_0, 0x35A00D77);
115 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000024);
116 	mmio_write_32(DBSC_DBPDRGD_0, 0x2A8A2C28);
117 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000025);
118 	mmio_write_32(DBSC_DBPDRGD_0, 0x30005E00);
119 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000026);
120 	mmio_write_32(DBSC_DBPDRGD_0, 0x0014CB49);
121 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000027);
122 	mmio_write_32(DBSC_DBPDRGD_0, 0x00000F14);
123 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000028);
124 	mmio_write_32(DBSC_DBPDRGD_0, 0x00000046);
125 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000029);
126 	if (REFRESH_RATE > 3900) {
127 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000020);
128 	} else {
129 		mmio_write_32(DBSC_DBPDRGD_0, 0x000000A0);
130 	}
131 	mmio_write_32(DBSC_DBPDRGA_0, 0x0000002C);
132 	mmio_write_32(DBSC_DBPDRGD_0, 0x81003047);
133 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000020);
134 	mmio_write_32(DBSC_DBPDRGD_0, 0x00181884);
135 	mmio_write_32(DBSC_DBPDRGA_0, 0x0000001A);
136 	mmio_write_32(DBSC_DBPDRGD_0, 0x33C03C10);
137 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);
138 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
139 		;
140 
141 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000A7);
142 	mmio_write_32(DBSC_DBPDRGD_0, 0x0D0D0D0D);
143 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000A8);
144 	mmio_write_32(DBSC_DBPDRGD_0, 0x0D0D0D0D);
145 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000A9);
146 	mmio_write_32(DBSC_DBPDRGD_0, 0x000D0D0D);
147 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000C7);
148 	mmio_write_32(DBSC_DBPDRGD_0, 0x0D0D0D0D);
149 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000C8);
150 	mmio_write_32(DBSC_DBPDRGD_0, 0x0D0D0D0D);
151 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000C9);
152 	mmio_write_32(DBSC_DBPDRGD_0, 0x000D0D0D);
153 
154 	mmio_write_32(DBSC_DBPDRGA_0, 0x0000000E);
155 	r2 = (mmio_read_32(DBSC_DBPDRGD_0) & 0x0000FF00) >> 0x9;
156 	r3 = (r2 << 16) + (r2 << 8) + r2;
157 	r6 = (r2 << 24) + (r2 << 16) + (r2 << 8) + r2;
158 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000011);
159 	mmio_write_32(DBSC_DBPDRGD_0, r3);
160 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000012);
161 	mmio_write_32(DBSC_DBPDRGD_0, r3);
162 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000016);
163 	mmio_write_32(DBSC_DBPDRGD_0, r6);
164 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000017);
165 	mmio_write_32(DBSC_DBPDRGD_0, r6);
166 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000018);
167 	mmio_write_32(DBSC_DBPDRGD_0, r6);
168 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000019);
169 	mmio_write_32(DBSC_DBPDRGD_0, r6);
170 
171 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000001);
172 	mmio_write_32(DBSC_DBPDRGD_0, 0x00010181);
173 	mmio_write_32(DBSC_DBCMD, 0x08000001);
174 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);
175 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
176 		;
177 
178 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000001);
179 	mmio_write_32(DBSC_DBPDRGD_0, 0x00010601);
180 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);
181 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
182 		;
183 
184 	for (i = 0; i < 2; i++) {
185 		mmio_write_32(DBSC_DBPDRGA_0, 0xB1 + i * 0x20);
186 		r5 = (mmio_read_32(DBSC_DBPDRGD_0) & 0xFF00) >> 0x8;
187 		mmio_write_32(DBSC_DBPDRGA_0, 0xB4 + i * 0x20);
188 		r6 = mmio_read_32(DBSC_DBPDRGD_0) & 0xFF;
189 		mmio_write_32(DBSC_DBPDRGA_0, 0xB3 + i * 0x20);
190 		r7 = mmio_read_32(DBSC_DBPDRGD_0) & 0x7;
191 
192 		if (r6 > 0) {
193 			mmio_write_32(DBSC_DBPDRGA_0, 0xB2 + i * 0x20);
194 			r2 = mmio_read_32(DBSC_DBPDRGD_0) & 0xFFFFFFF8;
195 
196 			mmio_write_32(DBSC_DBPDRGA_0, 0xB2 + i * 0x20);
197 			mmio_write_32(DBSC_DBPDRGD_0, r2 | ((r7 + 0x1) & 0x7));
198 			mmio_write_32(DBSC_DBPDRGA_0, 0xB0 + i * 0x20);
199 			r2 = mmio_read_32(DBSC_DBPDRGD_0) & 0xFFFFFF00;
200 			mmio_write_32(DBSC_DBPDRGA_0, 0xB0 + i * 0x20);
201 			mmio_write_32(DBSC_DBPDRGD_0, r2 | r6);
202 		} else {
203 			mmio_write_32(DBSC_DBPDRGA_0, 0xB2 + i * 0x20);
204 			r2 = mmio_read_32(DBSC_DBPDRGD_0) & 0xFFFFFFF8;
205 			mmio_write_32(DBSC_DBPDRGA_0, 0xB2 + i * 0x20);
206 			mmio_write_32(DBSC_DBPDRGD_0, r2 | r7);
207 
208 			mmio_write_32(DBSC_DBPDRGA_0, 0xB0 + i * 0x20);
209 			r2 = mmio_read_32(DBSC_DBPDRGD_0) & 0xFFFFFF00;
210 			mmio_write_32(DBSC_DBPDRGA_0, 0xB0 + i * 0x20);
211 			mmio_write_32(DBSC_DBPDRGD_0, r2 |
212 						     ((r6 + (r5 << 1)) & 0xFF));
213 		}
214 	}
215 
216 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000005);
217 	mmio_write_32(DBSC_DBPDRGD_0, 0xC1AA00C0);
218 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000A0);
219 	mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
220 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000C0);
221 	mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
222 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000001);
223 	mmio_write_32(DBSC_DBPDRGD_0, 0x00010801);
224 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);
225 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
226 		;
227 
228 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000005);
229 	mmio_write_32(DBSC_DBPDRGD_0, 0xC1AA00D8);
230 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000001);
231 	mmio_write_32(DBSC_DBPDRGD_0, 0x0001F001);
232 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);
233 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
234 		;
235 
236 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000AF);
237 	r2 = mmio_read_32(DBSC_DBPDRGD_0);
238 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000AF);
239 	mmio_write_32(DBSC_DBPDRGD_0, ((r2 + 0x1) & 0xFF) | (r2 & 0xFFFFFF00));
240 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000CF);
241 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000CF);
242 	r2 = mmio_read_32(DBSC_DBPDRGD_0);
243 	mmio_write_32(DBSC_DBPDRGD_0, ((r2 + 0x1) & 0xFF) | (r2 & 0xFFFFFF00));
244 
245 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000A0);
246 	mmio_write_32(DBSC_DBPDRGD_0, 0x7C000285);
247 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000C0);
248 	mmio_write_32(DBSC_DBPDRGD_0, 0x7C000285);
249 	mmio_write_32(DBSC_DBPDRGA_0, 0x0000002C);
250 	mmio_write_32(DBSC_DBPDRGD_0, 0x81003087);
251 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000001);
252 	mmio_write_32(DBSC_DBPDRGD_0, 0x00010401);
253 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);
254 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
255 		;
256 
257 	for (i = 0; i < 2; i++) {
258 		mmio_write_32(DBSC_DBPDRGA_0, 0xB1 + i * 0x20);
259 		r5 = ((mmio_read_32(DBSC_DBPDRGD_0) & 0xFF00) >> 0x8);
260 		mmio_write_32(DBSC_DBPDRGA_0, 0xB4 + i * 0x20);
261 		r6 = mmio_read_32(DBSC_DBPDRGD_0) & 0xFF;
262 
263 		mmio_write_32(DBSC_DBPDRGA_0, 0xB3 + i * 0x20);
264 		r7 = mmio_read_32(DBSC_DBPDRGD_0) & 0x7;
265 		r12 = (r5 >> 0x2);
266 
267 		if (r12 < r6) {
268 			mmio_write_32(DBSC_DBPDRGA_0, 0xB2 + i * 0x20);
269 			r2 = mmio_read_32(DBSC_DBPDRGD_0) & 0xFFFFFFF8;
270 
271 			mmio_write_32(DBSC_DBPDRGA_0, 0xB2 + i * 0x20);
272 			mmio_write_32(DBSC_DBPDRGD_0, r2 | ((r7 + 0x1) & 0x7));
273 			mmio_write_32(DBSC_DBPDRGA_0, 0xB0 + i * 0x20);
274 			r2 = mmio_read_32(DBSC_DBPDRGD_0) & 0xFFFFFF00;
275 
276 			mmio_write_32(DBSC_DBPDRGA_0, 0xB0 + i * 0x20);
277 			mmio_write_32(DBSC_DBPDRGD_0, r2 | ((r6 - r12) & 0xFF));
278 		} else {
279 			mmio_write_32(DBSC_DBPDRGA_0, 0xB2 + i * 0x20);
280 			r2 = mmio_read_32(DBSC_DBPDRGD_0) & 0xFFFFFFF8;
281 			mmio_write_32(DBSC_DBPDRGA_0, 0xB2 + i * 0x20);
282 			mmio_write_32(DBSC_DBPDRGD_0, r2 | (r7 & 0x7));
283 			mmio_write_32(DBSC_DBPDRGA_0, 0xB0 + i * 0x20);
284 			r2 = mmio_read_32(DBSC_DBPDRGD_0) & 0xFFFFFF00;
285 			mmio_write_32(DBSC_DBPDRGA_0, 0xB0 + i * 0x20);
286 			mmio_write_32(DBSC_DBPDRGD_0, r2 |
287 						     ((r6 + r5 +
288 						      (r5 >> 1) + r12) & 0xFF));
289 		}
290 	}
291 
292 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000A0);
293 	mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
294 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000C0);
295 	mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
296 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000001);
297 	mmio_write_32(DBSC_DBPDRGD_0, 0x00015001);
298 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);
299 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
300 		;
301 
302 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000003);
303 	mmio_write_32(DBSC_DBPDRGD_0, 0x0380C700);
304 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000007);
305 	while (mmio_read_32(DBSC_DBPDRGD_0) & BIT(30))
306 		;
307 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000021);
308 	mmio_write_32(DBSC_DBPDRGD_0, 0x0024643E);
309 
310 	mmio_write_32(DBSC_DBBUS0CNF1, 0x00000010);
311 	mmio_write_32(DBSC_DBCALCNF,
312 		(uint32_t) (64000000 / REFRESH_RATE) + 0x01000000);
313 	mmio_write_32(DBSC_DBRFCNF1,
314 		(uint32_t) (REFRESH_RATE * 116 / 125) + 0x00080000);
315 	mmio_write_32(DBSC_DBRFCNF2, 0x00010000);
316 	mmio_write_32(DBSC_DBDFICUPDCNF, 0x40100001);
317 	mmio_write_32(DBSC_DBRFEN, 0x00000001);
318 	mmio_write_32(DBSC_DBACEN, 0x00000001);
319 	mmio_write_32(DBSC_DBPDLK_0, 0x00000000);
320 	mmio_write_32(DBSC_DBSYSCNT0, 0x00000000);
321 
322 #ifdef ddr_qos_init_setting // only for non qos_init
323 	mmio_write_32(DBSC_DBSYSCNT0, 0x00001234);
324 	mmio_write_32(DBSC_DBCAM0CNF1, 0x00043218);
325 	mmio_write_32(DBSC_DBCAM0CNF2, 0x000000F4);
326 	mmio_write_32(DBSC_DBSCHCNT0, 0x000f0037);
327 	mmio_write_32(DBSC_DBSCHSZ0, 0x00000001);
328 	mmio_write_32(DBSC_DBSCHRW0, 0x22421111);
329 	mmio_write_32(DBSC_SCFCTST2, 0x012F1123);
330 	mmio_write_32(DBSC_DBSCHQOS00, 0x00000F00);
331 	mmio_write_32(DBSC_DBSCHQOS01, 0x00000B00);
332 	mmio_write_32(DBSC_DBSCHQOS02, 0x00000000);
333 	mmio_write_32(DBSC_DBSCHQOS03, 0x00000000);
334 	mmio_write_32(DBSC_DBSCHQOS40, 0x00000300);
335 	mmio_write_32(DBSC_DBSCHQOS41, 0x000002F0);
336 	mmio_write_32(DBSC_DBSCHQOS42, 0x00000200);
337 	mmio_write_32(DBSC_DBSCHQOS43, 0x00000100);
338 	mmio_write_32(DBSC_DBSCHQOS90, 0x00000300);
339 	mmio_write_32(DBSC_DBSCHQOS91, 0x000002F0);
340 	mmio_write_32(DBSC_DBSCHQOS92, 0x00000200);
341 	mmio_write_32(DBSC_DBSCHQOS93, 0x00000100);
342 	mmio_write_32(DBSC_DBSCHQOS130, 0x00000100);
343 	mmio_write_32(DBSC_DBSCHQOS131, 0x000000F0);
344 	mmio_write_32(DBSC_DBSCHQOS132, 0x000000A0);
345 	mmio_write_32(DBSC_DBSCHQOS133, 0x00000040);
346 	mmio_write_32(DBSC_DBSCHQOS140, 0x000000C0);
347 	mmio_write_32(DBSC_DBSCHQOS141, 0x000000B0);
348 	mmio_write_32(DBSC_DBSCHQOS142, 0x00000080);
349 	mmio_write_32(DBSC_DBSCHQOS143, 0x00000040);
350 	mmio_write_32(DBSC_DBSCHQOS150, 0x00000040);
351 	mmio_write_32(DBSC_DBSCHQOS151, 0x00000030);
352 	mmio_write_32(DBSC_DBSCHQOS152, 0x00000020);
353 	mmio_write_32(DBSC_DBSCHQOS153, 0x00000010);
354 	mmio_write_32(0xE67F0018, 0x00000001);
355 	mmio_write_32(DBSC_DBSYSCNT0, 0x00000000);
356 #endif
357 }
358 
init_ddr_d3_1600(void)359 static void init_ddr_d3_1600(void)
360 {
361 	uint32_t i, r2, r3, r5, r6, r7, r12;
362 
363 	mmio_write_32(CPG_CPGWPR, 0x5A5AFFFF);
364 	mmio_write_32(CPG_CPGWPCR, 0xA5A50000);
365 
366 	mmio_write_32(CPG_SRCR4, 0x20000000);
367 
368 	mmio_write_32(0xE61500DC, 0xe2200000);
369 	while (!(mmio_read_32(CPG_PLLECR) & BIT(11)))
370 		;
371 
372 	mmio_write_32(CPG_SRSTCLR4, 0x20000000);
373 
374 	mmio_write_32(CPG_CPGWPCR, 0xA5A50001);
375 
376 	mmio_write_32(DBSC_DBSYSCNT0, 0x00001234);
377 	mmio_write_32(DBSC_DBKIND, 0x00000007);
378 	mmio_write_32(DBSC_DBMEMCONF_0_0, 0x0f030a01);
379 	mmio_write_32(DBSC_DBPHYCONF0, 0x00000001);
380 	mmio_write_32(DBSC_DBTR0, 0x0000000B);
381 	mmio_write_32(DBSC_DBTR1, 0x00000008);
382 	mmio_write_32(DBSC_DBTR2, 0x00000000);
383 	mmio_write_32(DBSC_DBTR3, 0x0000000B);
384 	mmio_write_32(DBSC_DBTR4, 0x000B000B);
385 	mmio_write_32(DBSC_DBTR5, 0x00000027);
386 	mmio_write_32(DBSC_DBTR6, 0x0000001C);
387 	mmio_write_32(DBSC_DBTR7, 0x00060006);
388 	mmio_write_32(DBSC_DBTR8, 0x00000020);
389 	mmio_write_32(DBSC_DBTR9, 0x00000006);
390 	mmio_write_32(DBSC_DBTR10, 0x0000000C);
391 	mmio_write_32(DBSC_DBTR11, 0x0000000A);
392 	mmio_write_32(DBSC_DBTR12, 0x00120012);
393 	mmio_write_32(DBSC_DBTR13, 0x000000CE);
394 	mmio_write_32(DBSC_DBTR14, 0x00140005);
395 	mmio_write_32(DBSC_DBTR15, 0x00050004);
396 	mmio_write_32(DBSC_DBTR16, 0x071F0305);
397 	mmio_write_32(DBSC_DBTR17, 0x040C0000);
398 	mmio_write_32(DBSC_DBTR18, 0x00000200);
399 	mmio_write_32(DBSC_DBTR19, 0x01000040);
400 	mmio_write_32(DBSC_DBTR20, 0x020000D6);
401 	mmio_write_32(DBSC_DBTR21, 0x00040004);
402 	mmio_write_32(DBSC_DBBL, 0x00000000);
403 	mmio_write_32(DBSC_DBODT0, 0x00000001);
404 	mmio_write_32(DBSC_DBADJ0, 0x00000001);
405 	mmio_write_32(DBSC_DBSYSCONF1, 0x00000002);
406 	mmio_write_32(DBSC_DBDFICNT_0, 0x00000010);
407 	mmio_write_32(DBSC_DBBCAMDIS, 0x00000001);
408 	mmio_write_32(DBSC_DBSCHRW1, 0x00000046);
409 	mmio_write_32(DBSC_SCFCTST0, 0x0D050B03);
410 	mmio_write_32(DBSC_SCFCTST1, 0x0306030C);
411 
412 	mmio_write_32(DBSC_DBPDLK_0, 0x0000A55A);
413 	mmio_write_32(DBSC_DBCMD, 0x01000001);
414 	mmio_write_32(DBSC_DBCMD, 0x08000000);
415 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000001);
416 	mmio_write_32(DBSC_DBPDRGD_0, 0x80010000);
417 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);
418 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
419 		;
420 
421 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000008);
422 	mmio_write_32(DBSC_DBPDRGD_0, 0x000B8000);
423 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000090);
424 	mmio_write_32(DBSC_DBPDRGD_0, 0x04058904);
425 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000091);
426 	mmio_write_32(DBSC_DBPDRGD_0, 0x0007BB6B);
427 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000095);
428 	mmio_write_32(DBSC_DBPDRGD_0, 0x0007BBAD);
429 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000099);
430 	mmio_write_32(DBSC_DBPDRGD_0, 0x0007BB6B);
431 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000090);
432 	mmio_write_32(DBSC_DBPDRGD_0, 0x04058900);
433 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000021);
434 	mmio_write_32(DBSC_DBPDRGD_0, 0x0024641E);
435 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000001);
436 	mmio_write_32(DBSC_DBPDRGD_0, 0x00010073);
437 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);
438 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
439 		;
440 
441 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000090);
442 	mmio_write_32(DBSC_DBPDRGD_0, 0x0C058900);
443 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000090);
444 	mmio_write_32(DBSC_DBPDRGD_0, 0x04058900);
445 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);
446 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
447 		;
448 
449 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000003);
450 	mmio_write_32(DBSC_DBPDRGD_0, 0x0780C700);
451 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000007);
452 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(30)))
453 		;
454 
455 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000004);
456 	mmio_write_32(DBSC_DBPDRGD_0,
457 		(uint32_t) (REFRESH_RATE * 792 / 125) - 400 + 0x08B00000);
458 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000022);
459 	mmio_write_32(DBSC_DBPDRGD_0, 0x1000040B);
460 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000023);
461 	mmio_write_32(DBSC_DBPDRGD_0, 0x2D9C0B66);
462 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000024);
463 	mmio_write_32(DBSC_DBPDRGD_0, 0x2A88B400);
464 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000025);
465 	mmio_write_32(DBSC_DBPDRGD_0, 0x30005200);
466 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000026);
467 	mmio_write_32(DBSC_DBPDRGD_0, 0x0014A9C9);
468 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000027);
469 	mmio_write_32(DBSC_DBPDRGD_0, 0x00000D70);
470 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000028);
471 	mmio_write_32(DBSC_DBPDRGD_0, 0x00000046);
472 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000029);
473 	if (REFRESH_RATE > 3900) {
474 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000018);
475 	} else {
476 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000098);
477 	}
478 	mmio_write_32(DBSC_DBPDRGA_0, 0x0000002C);
479 	mmio_write_32(DBSC_DBPDRGD_0, 0x81003047);
480 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000020);
481 	mmio_write_32(DBSC_DBPDRGD_0, 0x00181884);
482 	mmio_write_32(DBSC_DBPDRGA_0, 0x0000001A);
483 	mmio_write_32(DBSC_DBPDRGD_0, 0x33C03C10);
484 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);
485 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
486 		;
487 
488 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000A7);
489 	mmio_write_32(DBSC_DBPDRGD_0, 0x0D0D0D0D);
490 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000A8);
491 	mmio_write_32(DBSC_DBPDRGD_0, 0x0D0D0D0D);
492 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000A9);
493 	mmio_write_32(DBSC_DBPDRGD_0, 0x000D0D0D);
494 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000C7);
495 	mmio_write_32(DBSC_DBPDRGD_0, 0x0D0D0D0D);
496 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000C8);
497 	mmio_write_32(DBSC_DBPDRGD_0, 0x0D0D0D0D);
498 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000C9);
499 	mmio_write_32(DBSC_DBPDRGD_0, 0x000D0D0D);
500 
501 	mmio_write_32(DBSC_DBPDRGA_0, 0x0000000E);
502 	r2 = (mmio_read_32(DBSC_DBPDRGD_0) & 0x0000FF00) >> 0x9;
503 	r3 = (r2 << 16) + (r2 << 8) + r2;
504 	r6 = (r2 << 24) + (r2 << 16) + (r2 << 8) + r2;
505 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000011);
506 	mmio_write_32(DBSC_DBPDRGD_0, r3);
507 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000012);
508 	mmio_write_32(DBSC_DBPDRGD_0, r3);
509 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000016);
510 	mmio_write_32(DBSC_DBPDRGD_0, r6);
511 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000017);
512 	mmio_write_32(DBSC_DBPDRGD_0, r6);
513 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000018);
514 	mmio_write_32(DBSC_DBPDRGD_0, r6);
515 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000019);
516 	mmio_write_32(DBSC_DBPDRGD_0, r6);
517 
518 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000001);
519 	mmio_write_32(DBSC_DBPDRGD_0, 0x00010181);
520 	mmio_write_32(DBSC_DBCMD, 0x08000001);
521 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);
522 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
523 		;
524 
525 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000001);
526 	mmio_write_32(DBSC_DBPDRGD_0, 0x00010601);
527 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);
528 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
529 		;
530 
531 	for (i = 0; i < 2; i++) {
532 		mmio_write_32(DBSC_DBPDRGA_0, 0xB1 + i * 0x20);
533 		r5 = (mmio_read_32(DBSC_DBPDRGD_0) & 0xFF00) >> 0x8;
534 		mmio_write_32(DBSC_DBPDRGA_0, 0xB4 + i * 0x20);
535 		r6 = mmio_read_32(DBSC_DBPDRGD_0) & 0xFF;
536 		mmio_write_32(DBSC_DBPDRGA_0, 0xB3 + i * 0x20);
537 		r7 = mmio_read_32(DBSC_DBPDRGD_0) & 0x7;
538 		if (r6 > 0) {
539 			mmio_write_32(DBSC_DBPDRGA_0, 0xB2 + i * 0x20);
540 			r2 = mmio_read_32(DBSC_DBPDRGD_0) & 0xFFFFFFF8;
541 
542 			mmio_write_32(DBSC_DBPDRGA_0, 0xB2 + i * 0x20);
543 			mmio_write_32(DBSC_DBPDRGD_0, r2 | ((r7 + 0x1) & 0x7));
544 			mmio_write_32(DBSC_DBPDRGA_0, 0xB0 + i * 0x20);
545 			r2 = mmio_read_32(DBSC_DBPDRGD_0) & 0xFFFFFF00;
546 			mmio_write_32(DBSC_DBPDRGA_0, 0xB0 + i * 0x20);
547 			mmio_write_32(DBSC_DBPDRGD_0, r2 | r6);
548 		} else {
549 			mmio_write_32(DBSC_DBPDRGA_0, 0xB2 + i * 0x20);
550 			r2 = mmio_read_32(DBSC_DBPDRGD_0) & 0xFFFFFFF8;
551 			mmio_write_32(DBSC_DBPDRGA_0, 0xB2 + i * 0x20);
552 			mmio_write_32(DBSC_DBPDRGD_0, r2 | r7);
553 
554 			mmio_write_32(DBSC_DBPDRGA_0, 0xB0 + i * 0x20);
555 			r2 = mmio_read_32(DBSC_DBPDRGD_0) & 0xFFFFFF00;
556 			mmio_write_32(DBSC_DBPDRGA_0, 0xB0 + i * 0x20);
557 			mmio_write_32(DBSC_DBPDRGD_0, r2 |
558 						     ((r6 + (r5 << 1)) & 0xFF));
559 		}
560 	}
561 
562 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000005);
563 	mmio_write_32(DBSC_DBPDRGD_0, 0xC1AA00C0);
564 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000A0);
565 	mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
566 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000C0);
567 	mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
568 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000001);
569 	mmio_write_32(DBSC_DBPDRGD_0, 0x00010801);
570 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);
571 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
572 		;
573 
574 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000005);
575 	mmio_write_32(DBSC_DBPDRGD_0, 0xC1AA00D8);
576 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000001);
577 	mmio_write_32(DBSC_DBPDRGD_0, 0x0001F001);
578 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);
579 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
580 		;
581 
582 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000AF);
583 	r2 = mmio_read_32(DBSC_DBPDRGD_0);
584 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000AF);
585 	mmio_write_32(DBSC_DBPDRGD_0, ((r2 + 0x1) & 0xFF) | (r2 & 0xFFFFFF00));
586 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000CF);
587 	r2 = mmio_read_32(DBSC_DBPDRGD_0);
588 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000CF);
589 	mmio_write_32(DBSC_DBPDRGD_0, ((r2 + 0x1) & 0xFF) | (r2 & 0xFFFFFF00));
590 
591 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000A0);
592 	mmio_write_32(DBSC_DBPDRGD_0, 0x7C000285);
593 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000C0);
594 	mmio_write_32(DBSC_DBPDRGD_0, 0x7C000285);
595 	mmio_write_32(DBSC_DBPDRGA_0, 0x0000002C);
596 	mmio_write_32(DBSC_DBPDRGD_0, 0x81003087);
597 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000001);
598 	mmio_write_32(DBSC_DBPDRGD_0, 0x00010401);
599 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);
600 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
601 		;
602 
603 	for (i = 0; i < 2; i++) {
604 		mmio_write_32(DBSC_DBPDRGA_0, 0xB1 + i * 0x20);
605 		r5 = (mmio_read_32(DBSC_DBPDRGD_0) & 0xFF00) >> 0x8;
606 		mmio_write_32(DBSC_DBPDRGA_0, 0xB4 + i * 0x20);
607 		r6 = mmio_read_32(DBSC_DBPDRGD_0) & 0xFF;
608 
609 		mmio_write_32(DBSC_DBPDRGA_0, 0xB3 + i * 0x20);
610 		r7 = mmio_read_32(DBSC_DBPDRGD_0) & 0x7;
611 		r12 = (r5 >> 0x2);
612 
613 		if (r12 < r6) {
614 			mmio_write_32(DBSC_DBPDRGA_0, 0xB2 + i * 0x20);
615 			r2 = mmio_read_32(DBSC_DBPDRGD_0) & 0xFFFFFFF8;
616 
617 			mmio_write_32(DBSC_DBPDRGA_0, 0xB2 + i * 0x20);
618 			mmio_write_32(DBSC_DBPDRGD_0, r2 | ((r7 + 0x1) & 0x7));
619 			mmio_write_32(DBSC_DBPDRGA_0, 0xB0 + i * 0x20);
620 			r2 = mmio_read_32(DBSC_DBPDRGD_0) & 0xFFFFFF00;
621 
622 			mmio_write_32(DBSC_DBPDRGA_0, 0xB0 + i * 0x20);
623 			mmio_write_32(DBSC_DBPDRGD_0, r2 | ((r6 - r12) & 0xFF));
624 		} else {
625 			mmio_write_32(DBSC_DBPDRGA_0, 0xB2 + i * 0x20);
626 			r2 = mmio_read_32(DBSC_DBPDRGD_0) & 0xFFFFFFF8;
627 			mmio_write_32(DBSC_DBPDRGA_0, 0xB2 + i * 0x20);
628 			mmio_write_32(DBSC_DBPDRGD_0, r2 | (r7 & 0x7));
629 			mmio_write_32(DBSC_DBPDRGA_0, 0xB0 + i * 0x20);
630 			r2 = mmio_read_32(DBSC_DBPDRGD_0) & 0xFFFFFF00;
631 			mmio_write_32(DBSC_DBPDRGA_0, 0xB0 + i * 0x20);
632 			mmio_write_32(DBSC_DBPDRGD_0, r2 |
633 						     ((r6 + r5 +
634 						      (r5 >> 1) + r12) & 0xFF));
635 		}
636 	}
637 
638 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000A0);
639 	mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
640 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000C0);
641 	mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
642 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000001);
643 	mmio_write_32(DBSC_DBPDRGD_0, 0x00015001);
644 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);
645 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
646 		;
647 
648 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000003);
649 	mmio_write_32(DBSC_DBPDRGD_0, 0x0380C700);
650 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000007);
651 	while (mmio_read_32(DBSC_DBPDRGD_0) & BIT(30))
652 		;
653 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000021);
654 	mmio_write_32(DBSC_DBPDRGD_0, 0x0024643E);
655 
656 	mmio_write_32(DBSC_DBBUS0CNF1, 0x00000010);
657 	mmio_write_32(DBSC_DBCALCNF,
658 		(uint32_t) (64000000 / REFRESH_RATE) + 0x01000000);
659 	mmio_write_32(DBSC_DBRFCNF1,
660 		(uint32_t) (REFRESH_RATE * 99 / 125) + 0x00080000);
661 	mmio_write_32(DBSC_DBRFCNF2, 0x00010000);
662 	mmio_write_32(DBSC_DBDFICUPDCNF, 0x40100001);
663 	mmio_write_32(DBSC_DBRFEN, 0x00000001);
664 	mmio_write_32(DBSC_DBACEN, 0x00000001);
665 	mmio_write_32(DBSC_DBPDLK_0, 0x00000000);
666 	mmio_write_32(DBSC_DBSYSCNT0, 0x00000000);
667 
668 #ifdef ddr_qos_init_setting // only for non qos_init
669 	mmio_write_32(DBSC_DBSYSCNT0, 0x00001234);
670 	mmio_write_32(DBSC_DBCAM0CNF1, 0x00043218);
671 	mmio_write_32(DBSC_DBCAM0CNF2, 0x000000F4);
672 	mmio_write_32(DBSC_DBSCHCNT0, 0x000f0037);
673 	mmio_write_32(DBSC_DBSCHSZ0, 0x00000001);
674 	mmio_write_32(DBSC_DBSCHRW0, 0x22421111);
675 	mmio_write_32(DBSC_SCFCTST2, 0x012F1123);
676 	mmio_write_32(DBSC_DBSCHQOS00, 0x00000F00);
677 	mmio_write_32(DBSC_DBSCHQOS01, 0x00000B00);
678 	mmio_write_32(DBSC_DBSCHQOS02, 0x00000000);
679 	mmio_write_32(DBSC_DBSCHQOS03, 0x00000000);
680 	mmio_write_32(DBSC_DBSCHQOS40, 0x00000300);
681 	mmio_write_32(DBSC_DBSCHQOS41, 0x000002F0);
682 	mmio_write_32(DBSC_DBSCHQOS42, 0x00000200);
683 	mmio_write_32(DBSC_DBSCHQOS43, 0x00000100);
684 	mmio_write_32(DBSC_DBSCHQOS90, 0x00000300);
685 	mmio_write_32(DBSC_DBSCHQOS91, 0x000002F0);
686 	mmio_write_32(DBSC_DBSCHQOS92, 0x00000200);
687 	mmio_write_32(DBSC_DBSCHQOS93, 0x00000100);
688 	mmio_write_32(DBSC_DBSCHQOS130, 0x00000100);
689 	mmio_write_32(DBSC_DBSCHQOS131, 0x000000F0);
690 	mmio_write_32(DBSC_DBSCHQOS132, 0x000000A0);
691 	mmio_write_32(DBSC_DBSCHQOS133, 0x00000040);
692 	mmio_write_32(DBSC_DBSCHQOS140, 0x000000C0);
693 	mmio_write_32(DBSC_DBSCHQOS141, 0x000000B0);
694 	mmio_write_32(DBSC_DBSCHQOS142, 0x00000080);
695 	mmio_write_32(DBSC_DBSCHQOS143, 0x00000040);
696 	mmio_write_32(DBSC_DBSCHQOS150, 0x00000040);
697 	mmio_write_32(DBSC_DBSCHQOS151, 0x00000030);
698 	mmio_write_32(DBSC_DBSCHQOS152, 0x00000020);
699 	mmio_write_32(DBSC_DBSCHQOS153, 0x00000010);
700 	mmio_write_32(0xE67F0018, 0x00000001);
701 	mmio_write_32(DBSC_DBSYSCNT0, 0x00000000);
702 #endif
703 }
704 
705 #define PRR			0xFFF00044U
706 #define PRR_PRODUCT_MASK	0x00007F00U
707 #define PRR_PRODUCT_D3		0x00005800U
708 
709 #define	MODEMR_MD19		BIT(19)
710 
rcar_dram_init(void)711 int32_t rcar_dram_init(void)
712 {
713 	uint32_t reg;
714 	uint32_t ddr_mbps;
715 
716 	reg = mmio_read_32(PRR);
717 	if ((reg & PRR_PRODUCT_MASK) != PRR_PRODUCT_D3) {
718 		ERROR("LSI Product ID (PRR=0x%x) DDR initialize not supported.\n",
719 		      reg);
720 		panic();
721 	}
722 
723 	reg = mmio_read_32(RST_MODEMR);
724 	if (reg & MODEMR_MD19) {
725 		init_ddr_d3_1866();
726 		ddr_mbps = 1866;
727 	} else {
728 		init_ddr_d3_1600();
729 		ddr_mbps = 1600;
730 	}
731 
732 	NOTICE("BL2: DDR%d(%s)\n", ddr_mbps, RCAR_DDR_VERSION);
733 
734 	return 0;
735 }
736