1 /*
2  * Copyright (c) 2015-2019, Renesas Electronics Corporation.
3  * All rights reserved.
4  *
5  * SPDX-License-Identifier: BSD-3-Clause
6  */
7 
8 #include <lib/mmio.h>
9 #include <stdint.h>
10 
11 #include <common/debug.h>
12 
13 #include "boot_init_dram.h"
14 #include "rcar_def.h"
15 #include "../ddr_regs.h"
16 
17 #include "../dram_sub_func.h"
18 
19 #define RCAR_E3_DDR_VERSION    "rev.0.12"
20 
21 /* Average periodic refresh interval[ns]. Support 3900,7800 */
22 #ifdef ddr_qos_init_setting
23 #define REFRESH_RATE	3900U
24 #else
25 #if RCAR_REF_INT == 1
26 #define REFRESH_RATE	7800U
27 #else
28 #define REFRESH_RATE	3900U
29 #endif
30 #endif
31 
32 /*
33  *  Initialize ddr
34  */
init_ddr(void)35 uint32_t init_ddr(void)
36 {
37 	uint32_t i, r2, r5, r6, r7, r12;
38 	uint32_t ddr_md;
39 	uint32_t regval, j;
40 	uint32_t dqsgd_0c, bdlcount_0c, bdlcount_0c_div2, bdlcount_0c_div4;
41 	uint32_t bdlcount_0c_div8, bdlcount_0c_div16;
42 	uint32_t gatesl_0c, rdqsd_0c, rdqsnd_0c, rbd_0c[4];
43 	uint32_t pdqsr_ctl, lcdl_ctl, lcdl_judge1, lcdl_judge2;
44 	uint32_t pdr_ctl;
45 	uint32_t byp_ctl;
46 
47 	if ((mmio_read_32(0xFFF00044) & 0x000000FF) == 0x00000000) {
48 		pdqsr_ctl = 1;
49 		lcdl_ctl = 1;
50 		pdr_ctl = 1;
51 		byp_ctl = 1;
52 	} else {
53 		pdqsr_ctl = 0;
54 		lcdl_ctl = 0;
55 		pdr_ctl = 0;
56 		byp_ctl = 0;
57 	}
58 
59 	/* Judge the DDR bit rate (ddr_md : 0 = 1584Mbps, 1 = 1856Mbps) */
60 	ddr_md = (mmio_read_32(RST_MODEMR) >> 19) & BIT(0);
61 
62 	/* 1584Mbps setting */
63 	if (ddr_md == 0) {
64 		mmio_write_32(CPG_CPGWPR, 0x5A5AFFFF);
65 		mmio_write_32(CPG_CPGWPCR, 0xA5A50000);
66 
67 		mmio_write_32(CPG_SRCR4, 0x20000000);
68 
69 		mmio_write_32(0xE61500DC, 0xe2200000);	/* Change to 1584Mbps */
70 		while (!(mmio_read_32(CPG_PLLECR) & BIT(11)))
71 			;
72 
73 		mmio_write_32(CPG_SRSTCLR4, 0x20000000);
74 
75 		mmio_write_32(CPG_CPGWPCR, 0xA5A50001);
76 	}
77 
78 	mmio_write_32(DBSC_DBSYSCNT0, 0x00001234);
79 	mmio_write_32(DBSC_DBKIND, 0x00000007);
80 
81 #if RCAR_DRAM_DDR3L_MEMCONF == 0
82 	mmio_write_32(DBSC_DBMEMCONF_0_0, 0x0f030a02);	/* 1GB */
83 #else
84 	mmio_write_32(DBSC_DBMEMCONF_0_0, 0x10030a02);	/* 2GB(default) */
85 #endif
86 
87 #if RCAR_DRAM_DDR3L_MEMDUAL == 1
88 	r2 = mmio_read_32(0xE6790614);
89 	mmio_write_32(0xE6790614, r2 | 0x3); /* MCS1_N/MODT1 are activated. */
90 #endif
91 
92 	mmio_write_32(DBSC_DBPHYCONF0, 0x1);
93 
94 	/* Select setting value in bps */
95 	if (ddr_md == 0) {	/* 1584Mbps */
96 		mmio_write_32(DBSC_DBTR0, 0xB);
97 		mmio_write_32(DBSC_DBTR1, 0x8);
98 	} else {		/* 1856Mbps */
99 		mmio_write_32(DBSC_DBTR0, 0xD);
100 		mmio_write_32(DBSC_DBTR1, 0x9);
101 	}
102 
103 	mmio_write_32(DBSC_DBTR2, 0x00000000);
104 
105 	/* Select setting value in bps */
106 	if (ddr_md == 0) {	/* 1584Mbps */
107 		mmio_write_32(DBSC_DBTR3, 0x0000000B);
108 		mmio_write_32(DBSC_DBTR4, 0x000B000B);
109 		mmio_write_32(DBSC_DBTR5, 0x00000027);
110 		mmio_write_32(DBSC_DBTR6, 0x0000001C);
111 	} else {		/* 1856Mbps */
112 		mmio_write_32(DBSC_DBTR3, 0x0000000D);
113 		mmio_write_32(DBSC_DBTR4, 0x000D000D);
114 		mmio_write_32(DBSC_DBTR5, 0x0000002D);
115 		mmio_write_32(DBSC_DBTR6, 0x00000020);
116 	}
117 
118 	mmio_write_32(DBSC_DBTR7, 0x00060006);
119 
120 	/* Select setting value in bps */
121 	if (ddr_md == 0) {	/* 1584Mbps */
122 		mmio_write_32(DBSC_DBTR8, 0x00000020);
123 		mmio_write_32(DBSC_DBTR9, 0x00000006);
124 		mmio_write_32(DBSC_DBTR10, 0x0000000C);
125 		mmio_write_32(DBSC_DBTR11, 0x0000000A);
126 		mmio_write_32(DBSC_DBTR12, 0x00120012);
127 		mmio_write_32(DBSC_DBTR13, 0x000000CE);
128 		mmio_write_32(DBSC_DBTR14, 0x00140005);
129 		mmio_write_32(DBSC_DBTR15, 0x00050004);
130 		mmio_write_32(DBSC_DBTR16, 0x071F0305);
131 		mmio_write_32(DBSC_DBTR17, 0x040C0000);
132 	} else {		/* 1856Mbps */
133 		mmio_write_32(DBSC_DBTR8, 0x00000021);
134 		mmio_write_32(DBSC_DBTR9, 0x00000007);
135 		mmio_write_32(DBSC_DBTR10, 0x0000000E);
136 		mmio_write_32(DBSC_DBTR11, 0x0000000C);
137 		mmio_write_32(DBSC_DBTR12, 0x00140014);
138 		mmio_write_32(DBSC_DBTR13, 0x000000F2);
139 		mmio_write_32(DBSC_DBTR14, 0x00170006);
140 		mmio_write_32(DBSC_DBTR15, 0x00060005);
141 		mmio_write_32(DBSC_DBTR16, 0x09210507);
142 		mmio_write_32(DBSC_DBTR17, 0x040E0000);
143 	}
144 
145 	mmio_write_32(DBSC_DBTR18, 0x00000200);
146 
147 	/* Select setting value in bps */
148 	if (ddr_md == 0) {	/* 1584Mbps */
149 		mmio_write_32(DBSC_DBTR19, 0x01000040);
150 		mmio_write_32(DBSC_DBTR20, 0x020000D6);
151 	} else {		/* 1856Mbps */
152 		mmio_write_32(DBSC_DBTR19, 0x0129004B);
153 		mmio_write_32(DBSC_DBTR20, 0x020000FB);
154 	}
155 
156 	mmio_write_32(DBSC_DBTR21, 0x00040004);
157 	mmio_write_32(DBSC_DBBL, 0x00000000);
158 	mmio_write_32(DBSC_DBODT0, 0x00000001);
159 	mmio_write_32(DBSC_DBADJ0, 0x00000001);
160 	mmio_write_32(DBSC_DBSYSCONF1, 0x00000002);
161 	mmio_write_32(DBSC_DBDFICNT_0, 0x00000010);
162 	mmio_write_32(DBSC_DBBCAMDIS, 0x00000001);
163 	mmio_write_32(DBSC_DBSCHRW1, 0x00000046);
164 
165 	/* Select setting value in bps */
166 	if (ddr_md == 0) {	/* 1584Mbps */
167 		mmio_write_32(DBSC_SCFCTST0, 0x0D050B03);
168 		mmio_write_32(DBSC_SCFCTST1, 0x0306030C);
169 	} else {		/* 1856Mbps */
170 		mmio_write_32(DBSC_SCFCTST0, 0x0C050B03);
171 		mmio_write_32(DBSC_SCFCTST1, 0x0305030C);
172 	}
173 
174 	/*
175 	 * Initial_Step0( INITBYP )
176 	 */
177 	mmio_write_32(DBSC_DBPDLK_0, 0x0000A55A);
178 	mmio_write_32(DBSC_DBCMD, 0x01840001);
179 	mmio_write_32(DBSC_DBCMD, 0x08840000);
180 	NOTICE("BL2: [COLD_BOOT]\n");
181 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000001);
182 	mmio_write_32(DBSC_DBPDRGD_0, 0x80010000);
183 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);
184 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
185 		;
186 
187 	/*
188 	 * Initial_Step1( ZCAL,PLLINIT,DCAL,PHYRST training )
189 	 */
190 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000008);
191 	mmio_write_32(DBSC_DBPDRGD_0, 0x000B8000);
192 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000090);
193 
194 	/* Select setting value in bps */
195 	if (ddr_md == 0)	/* 1584Mbps */
196 		mmio_write_32(DBSC_DBPDRGD_0, 0x04058904);
197 	else			/* 1856Mbps */
198 		mmio_write_32(DBSC_DBPDRGD_0, 0x04058A04);
199 
200 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000091);
201 	mmio_write_32(DBSC_DBPDRGD_0, 0x0007BB6B);
202 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000095);
203 	mmio_write_32(DBSC_DBPDRGD_0, 0x0007BBAD);
204 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000099);
205 	mmio_write_32(DBSC_DBPDRGD_0, 0x0007BB6B);
206 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000090);
207 
208 	/* Select setting value in bps */
209 	if (ddr_md == 0)	/* 1584Mbps */
210 		mmio_write_32(DBSC_DBPDRGD_0, 0x04058900);
211 	else			/* 1856Mbps */
212 		mmio_write_32(DBSC_DBPDRGD_0, 0x04058A00);
213 
214 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000021);
215 	mmio_write_32(DBSC_DBPDRGD_0, 0x0024641E);
216 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000001);
217 	mmio_write_32(DBSC_DBPDRGD_0, 0x00010073);
218 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);
219 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
220 		;
221 
222 	/*
223 	 * Initial_Step2( DRAMRST/DRAMINT training )
224 	 */
225 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000090);
226 
227 	/* Select setting value in bps */
228 	if (ddr_md == 0)	/* 1584Mbps */
229 		mmio_write_32(DBSC_DBPDRGD_0, 0x0C058900);
230 	else			/* 1856Mbps */
231 		mmio_write_32(DBSC_DBPDRGD_0, 0x0C058A00);
232 
233 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000090);
234 
235 	/* Select setting value in bps */
236 	if (ddr_md == 0)	/* 1584Mbps */
237 		mmio_write_32(DBSC_DBPDRGD_0, 0x04058900);
238 	else			/* 1856Mbps */
239 		mmio_write_32(DBSC_DBPDRGD_0, 0x04058A00);
240 
241 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);
242 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
243 		;
244 
245 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000003);
246 	if (byp_ctl == 1)
247 		mmio_write_32(DBSC_DBPDRGD_0, 0x0780C720);
248 	else
249 		mmio_write_32(DBSC_DBPDRGD_0, 0x0780C700);
250 
251 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000007);
252 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(30)))
253 		;
254 
255 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000004);
256 
257 	/* Select setting value in bps */
258 	if (ddr_md == 0) {	/* 1584Mbps */
259 		mmio_write_32(DBSC_DBPDRGD_0, (REFRESH_RATE * 792 / 125) -
260 					     400 + 0x08B00000);
261 	} else {		/* 1856Mbps */
262 		mmio_write_32(DBSC_DBPDRGD_0, (REFRESH_RATE * 928 / 125) -
263 					     400 + 0x0A300000);
264 	}
265 
266 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000022);
267 	mmio_write_32(DBSC_DBPDRGD_0, 0x1000040B);
268 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000023);
269 
270 	/* Select setting value in bps */
271 	if (ddr_md == 0)	/* 1584Mbps */
272 		mmio_write_32(DBSC_DBPDRGD_0, 0x2D9C0B66);
273 	else			/* 1856Mbps */
274 		mmio_write_32(DBSC_DBPDRGD_0, 0x35A00D77);
275 
276 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000024);
277 
278 	/* Select setting value in bps */
279 	if (ddr_md == 0)	/* 1584Mbps */
280 		mmio_write_32(DBSC_DBPDRGD_0, 0x2A88B400);
281 	else			/* 1856Mbps */
282 		mmio_write_32(DBSC_DBPDRGD_0, 0x2A8A2C28);
283 
284 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000025);
285 
286 	/* Select setting value in bps */
287 	if (ddr_md == 0)	/* 1584Mbps */
288 		mmio_write_32(DBSC_DBPDRGD_0, 0x30005200);
289 	else			/* 1856Mbps */
290 		mmio_write_32(DBSC_DBPDRGD_0, 0x30005E00);
291 
292 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000026);
293 
294 	/* Select setting value in bps */
295 	if (ddr_md == 0)	/* 1584Mbps */
296 		mmio_write_32(DBSC_DBPDRGD_0, 0x0014A9C9);
297 	else			/* 1856Mbps */
298 		mmio_write_32(DBSC_DBPDRGD_0, 0x0014CB49);
299 
300 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000027);
301 
302 	/* Select setting value in bps */
303 	if (ddr_md == 0)	/* 1584Mbps */
304 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000D70);
305 	else			/* 1856Mbps */
306 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000F14);
307 
308 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000028);
309 	mmio_write_32(DBSC_DBPDRGD_0, 0x00000046);
310 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000029);
311 
312 	/* Select setting value in bps */
313 	if (ddr_md == 0) {	/* 1584Mbps */
314 		if (REFRESH_RATE > 3900)	/* [7]SRT=0 */
315 			mmio_write_32(DBSC_DBPDRGD_0, 0x18);
316 		else				/* [7]SRT=1 */
317 			mmio_write_32(DBSC_DBPDRGD_0, 0x98);
318 	} else {		/* 1856Mbps */
319 		if (REFRESH_RATE > 3900)	/* [7]SRT=0 */
320 			mmio_write_32(DBSC_DBPDRGD_0, 0x20);
321 		else				/* [7]SRT=1 */
322 			mmio_write_32(DBSC_DBPDRGD_0, 0xA0);
323 	}
324 
325 	mmio_write_32(DBSC_DBPDRGA_0, 0x0000002C);
326 	mmio_write_32(DBSC_DBPDRGD_0, 0x81003047);
327 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000020);
328 	mmio_write_32(DBSC_DBPDRGD_0, 0x00181884);
329 	mmio_write_32(DBSC_DBPDRGA_0, 0x0000001A);
330 	mmio_write_32(DBSC_DBPDRGD_0, 0x33C03C10);
331 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);
332 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
333 		;
334 
335 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000A7);
336 	mmio_write_32(DBSC_DBPDRGD_0, 0x0D0D0D0D);
337 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000A8);
338 	mmio_write_32(DBSC_DBPDRGD_0, 0x0D0D0D0D);
339 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000A9);
340 	mmio_write_32(DBSC_DBPDRGD_0, 0x000D0D0D);
341 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000C7);
342 	mmio_write_32(DBSC_DBPDRGD_0, 0x0D0D0D0D);
343 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000C8);
344 	mmio_write_32(DBSC_DBPDRGD_0, 0x0D0D0D0D);
345 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000C9);
346 	mmio_write_32(DBSC_DBPDRGD_0, 0x000D0D0D);
347 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000E7);
348 	mmio_write_32(DBSC_DBPDRGD_0, 0x0D0D0D0D);
349 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000E8);
350 	mmio_write_32(DBSC_DBPDRGD_0, 0x0D0D0D0D);
351 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000E9);
352 	mmio_write_32(DBSC_DBPDRGD_0, 0x000D0D0D);
353 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000107);
354 	mmio_write_32(DBSC_DBPDRGD_0, 0x0D0D0D0D);
355 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000108);
356 	mmio_write_32(DBSC_DBPDRGD_0, 0x0D0D0D0D);
357 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000109);
358 	mmio_write_32(DBSC_DBPDRGD_0, 0x000D0D0D);
359 
360 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000001);
361 	mmio_write_32(DBSC_DBPDRGD_0, 0x00010181);
362 	mmio_write_32(DBSC_DBCMD, 0x08840001);
363 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);
364 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
365 		;
366 
367 	/*
368 	 * Initial_Step3( WL/QSG training )
369 	 */
370 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000001);
371 	mmio_write_32(DBSC_DBPDRGD_0, 0x00010601);
372 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);
373 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
374 		;
375 
376 	for (i = 0; i < 4; i++) {
377 		mmio_write_32(DBSC_DBPDRGA_0, 0xB1 + i * 0x20);
378 		r5 = (mmio_read_32(DBSC_DBPDRGD_0) & 0xFF00) >> 0x8;
379 		mmio_write_32(DBSC_DBPDRGA_0, 0xB4 + i * 0x20);
380 		r6 = mmio_read_32(DBSC_DBPDRGD_0) & 0xFF;
381 		mmio_write_32(DBSC_DBPDRGA_0, 0xB3 + i * 0x20);
382 		r7 = mmio_read_32(DBSC_DBPDRGD_0) & 0x7;
383 
384 		if (r6 > 0) {
385 			mmio_write_32(DBSC_DBPDRGA_0, 0xB2 + i * 0x20);
386 			r2 = mmio_read_32(DBSC_DBPDRGD_0) & 0xFFFFFFF8;
387 			mmio_write_32(DBSC_DBPDRGA_0, 0xB2 + i * 0x20);
388 			mmio_write_32(DBSC_DBPDRGD_0, r2 | ((r7 + 0x1) & 0x7));
389 			mmio_write_32(DBSC_DBPDRGA_0, 0xB0 + i * 0x20);
390 			r2 = mmio_read_32(DBSC_DBPDRGD_0) & 0xFFFFFF00;
391 			mmio_write_32(DBSC_DBPDRGA_0, 0xB0 + i * 0x20);
392 			mmio_write_32(DBSC_DBPDRGD_0, r2 | r6);
393 		} else {
394 			mmio_write_32(DBSC_DBPDRGA_0, 0xB2 + i * 0x20);
395 			r2 = mmio_read_32(DBSC_DBPDRGD_0) & 0xFFFFFFF8;
396 			mmio_write_32(DBSC_DBPDRGA_0, 0xB2 + i * 0x20);
397 			mmio_write_32(DBSC_DBPDRGD_0, r2 | r7);
398 			mmio_write_32(DBSC_DBPDRGA_0, 0xB0 + i * 0x20);
399 			r2 = mmio_read_32(DBSC_DBPDRGD_0) & 0xFFFFFF00;
400 			mmio_write_32(DBSC_DBPDRGA_0, 0xB0 + i * 0x20);
401 			mmio_write_32(DBSC_DBPDRGD_0, r2 |
402 						     ((r6 + ((r5) << 1)) &
403 						     0xFF));
404 		}
405 	}
406 
407 	/*
408 	 * Initial_Step4( WLADJ training )
409 	 */
410 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000005);
411 	mmio_write_32(DBSC_DBPDRGD_0, 0xC1AA00C0);
412 
413 	if (pdqsr_ctl == 0) {
414 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000A0);
415 		mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
416 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000C0);
417 		mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
418 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000E0);
419 		mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
420 		mmio_write_32(DBSC_DBPDRGA_0, 0x00000100);
421 		mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
422 	}
423 
424 	/* PDR always off */
425 	if (pdr_ctl == 1) {
426 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000A3);
427 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000008);
428 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000C3);
429 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000008);
430 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000E3);
431 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000008);
432 		mmio_write_32(DBSC_DBPDRGA_0, 0x00000103);
433 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000008);
434 	}
435 
436 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000001);
437 	mmio_write_32(DBSC_DBPDRGD_0, 0x00010801);
438 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);
439 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
440 		;
441 
442 	/*
443 	 * Initial_Step5(Read Data Bit Deskew)
444 	 */
445 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000005);
446 	mmio_write_32(DBSC_DBPDRGD_0, 0xC1AA00D8);
447 
448 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000001);
449 	mmio_write_32(DBSC_DBPDRGD_0, 0x00011001);
450 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);
451 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
452 		;
453 
454 	if (pdqsr_ctl == 1) {
455 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000A0);
456 		mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
457 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000C0);
458 		mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
459 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000E0);
460 		mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
461 		mmio_write_32(DBSC_DBPDRGA_0, 0x00000100);
462 		mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
463 	}
464 
465 	/* PDR dynamic */
466 	if (pdr_ctl == 1) {
467 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000A3);
468 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000000);
469 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000C3);
470 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000000);
471 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000E3);
472 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000000);
473 		mmio_write_32(DBSC_DBPDRGA_0, 0x00000103);
474 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000000);
475 	}
476 
477 	/*
478 	 * Initial_Step6(Write Data Bit Deskew)
479 	 */
480 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000001);
481 	mmio_write_32(DBSC_DBPDRGD_0, 0x00012001);
482 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);
483 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
484 		;
485 
486 	/*
487 	 * Initial_Step7(Read Data Eye Training)
488 	 */
489 	if (pdqsr_ctl == 1) {
490 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000A0);
491 		mmio_write_32(DBSC_DBPDRGD_0, 0x7C000285);
492 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000C0);
493 		mmio_write_32(DBSC_DBPDRGD_0, 0x7C000285);
494 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000E0);
495 		mmio_write_32(DBSC_DBPDRGD_0, 0x7C000285);
496 		mmio_write_32(DBSC_DBPDRGA_0, 0x00000100);
497 		mmio_write_32(DBSC_DBPDRGD_0, 0x7C000285);
498 	}
499 
500 	/* PDR always off */
501 	if (pdr_ctl == 1) {
502 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000A3);
503 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000008);
504 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000C3);
505 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000008);
506 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000E3);
507 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000008);
508 		mmio_write_32(DBSC_DBPDRGA_0, 0x00000103);
509 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000008);
510 	}
511 
512 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000001);
513 	mmio_write_32(DBSC_DBPDRGD_0, 0x00014001);
514 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);
515 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
516 		;
517 
518 	if (pdqsr_ctl == 1) {
519 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000A0);
520 		mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
521 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000C0);
522 		mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
523 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000E0);
524 		mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
525 		mmio_write_32(DBSC_DBPDRGA_0, 0x00000100);
526 		mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
527 	}
528 
529 	/* PDR dynamic */
530 	if (pdr_ctl == 1) {
531 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000A3);
532 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000000);
533 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000C3);
534 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000000);
535 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000E3);
536 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000000);
537 		mmio_write_32(DBSC_DBPDRGA_0, 0x00000103);
538 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000000);
539 	}
540 
541 	/*
542 	 * Initial_Step8(Write Data Eye Training)
543 	 */
544 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000001);
545 	mmio_write_32(DBSC_DBPDRGD_0, 0x00018001);
546 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);
547 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
548 		;
549 
550 	/*
551 	 * Initial_Step3_2( DQS Gate Training )
552 	 */
553 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000A0);
554 	mmio_write_32(DBSC_DBPDRGD_0, 0x7C000285);
555 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000C0);
556 	mmio_write_32(DBSC_DBPDRGD_0, 0x7C000285);
557 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000E0);
558 	mmio_write_32(DBSC_DBPDRGD_0, 0x7C000285);
559 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000100);
560 	mmio_write_32(DBSC_DBPDRGD_0, 0x7C000285);
561 	mmio_write_32(DBSC_DBPDRGA_0, 0x0000002C);
562 	mmio_write_32(DBSC_DBPDRGD_0, 0x81003087);
563 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000001);
564 	mmio_write_32(DBSC_DBPDRGD_0, 0x00010401);
565 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);
566 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
567 		;
568 
569 	for (i = 0; i < 4; i++) {
570 		mmio_write_32(DBSC_DBPDRGA_0, 0xB1 + i * 0x20);
571 		r5 = ((mmio_read_32(DBSC_DBPDRGD_0) & 0xFF00) >> 0x8);
572 		mmio_write_32(DBSC_DBPDRGA_0, 0xB4 + i * 0x20);
573 		r6 = mmio_read_32(DBSC_DBPDRGD_0) & 0xFF;
574 		mmio_write_32(DBSC_DBPDRGA_0, 0xB3 + i * 0x20);
575 		r7 = mmio_read_32(DBSC_DBPDRGD_0) & 0x7;
576 		r12 = (r5 >> 0x2);
577 		if (r12 < r6) {
578 			mmio_write_32(DBSC_DBPDRGA_0, 0xB2 + i * 0x20);
579 			r2 = mmio_read_32(DBSC_DBPDRGD_0) & 0xFFFFFFF8;
580 			mmio_write_32(DBSC_DBPDRGA_0, 0xB2 + i * 0x20);
581 			mmio_write_32(DBSC_DBPDRGD_0, r2 | ((r7 + 0x1) & 0x7));
582 			mmio_write_32(DBSC_DBPDRGA_0, 0xB0 + i * 0x20);
583 			r2 = mmio_read_32(DBSC_DBPDRGD_0) & 0xFFFFFF00;
584 			mmio_write_32(DBSC_DBPDRGA_0, 0xB0 + i * 0x20);
585 			mmio_write_32(DBSC_DBPDRGD_0, r2 | ((r6 - r12) & 0xFF));
586 		} else {
587 			mmio_write_32(DBSC_DBPDRGA_0, 0xB2 + i * 0x20);
588 			r2 = mmio_read_32(DBSC_DBPDRGD_0) & 0xFFFFFFF8;
589 			mmio_write_32(DBSC_DBPDRGA_0, 0xB2 + i * 0x20);
590 			mmio_write_32(DBSC_DBPDRGD_0, r2 | (r7 & 0x7));
591 			mmio_write_32(DBSC_DBPDRGA_0, 0xB0 + i * 0x20);
592 			r2 = mmio_read_32(DBSC_DBPDRGD_0) & 0xFFFFFF00;
593 			mmio_write_32(DBSC_DBPDRGA_0, 0xB0 + i * 0x20);
594 			mmio_write_32(DBSC_DBPDRGD_0, r2 | ((r6 + r5 +
595 						     (r5 >> 1) + r12) & 0xFF));
596 		}
597 	}
598 
599 	/*
600 	 * Initial_Step5-2_7-2( Rd bit Rd eye )
601 	 */
602 	if (pdqsr_ctl == 0) {
603 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000A0);
604 		mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
605 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000C0);
606 		mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
607 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000E0);
608 		mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
609 		mmio_write_32(DBSC_DBPDRGA_0, 0x00000100);
610 		mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
611 	}
612 
613 	/* PDR always off */
614 	if (pdr_ctl == 1) {
615 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000A3);
616 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000008);
617 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000C3);
618 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000008);
619 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000E3);
620 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000008);
621 		mmio_write_32(DBSC_DBPDRGA_0, 0x00000103);
622 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000008);
623 	}
624 
625 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000001);
626 	mmio_write_32(DBSC_DBPDRGD_0, 0x00015001);
627 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);
628 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
629 		;
630 
631 	if (lcdl_ctl == 1) {
632 		for (i = 0; i < 4; i++) {
633 			mmio_write_32(DBSC_DBPDRGA_0, 0xB0 + i * 0x20);
634 			dqsgd_0c = mmio_read_32(DBSC_DBPDRGD_0) & 0xFF;
635 			mmio_write_32(DBSC_DBPDRGA_0, 0xB1 + i * 0x20);
636 			bdlcount_0c = (mmio_read_32(DBSC_DBPDRGD_0) & 0xFF00) >>
637 					8;
638 			bdlcount_0c_div2 = bdlcount_0c >> 1;
639 			bdlcount_0c_div4 = bdlcount_0c >> 2;
640 			bdlcount_0c_div8 = bdlcount_0c >> 3;
641 			bdlcount_0c_div16 = bdlcount_0c >> 4;
642 
643 			if (ddr_md == 0) {	/* 1584Mbps */
644 				lcdl_judge1 = bdlcount_0c_div2 +
645 					      bdlcount_0c_div4 +
646 					      bdlcount_0c_div8;
647 				lcdl_judge2 = bdlcount_0c +
648 					      bdlcount_0c_div4 +
649 					      bdlcount_0c_div16;
650 			} else {		/* 1856Mbps */
651 				lcdl_judge1 = bdlcount_0c_div2 +
652 					      bdlcount_0c_div4;
653 				lcdl_judge2 = bdlcount_0c +
654 					      bdlcount_0c_div4;
655 			}
656 
657 			if (dqsgd_0c <= lcdl_judge1)
658 				continue;
659 
660 			if (dqsgd_0c <= lcdl_judge2) {
661 				mmio_write_32(DBSC_DBPDRGA_0, 0xB0 + i * 0x20);
662 				regval = mmio_read_32(DBSC_DBPDRGD_0) &
663 						0xFFFFFF00;
664 				mmio_write_32(DBSC_DBPDRGD_0,
665 					      (dqsgd_0c - bdlcount_0c_div8) |
666 					      regval);
667 			} else {
668 				mmio_write_32(DBSC_DBPDRGA_0, 0xB0 + i * 0x20);
669 				regval = mmio_read_32(DBSC_DBPDRGD_0) &
670 						0xFFFFFF00;
671 				mmio_write_32(DBSC_DBPDRGD_0, regval);
672 				mmio_write_32(DBSC_DBPDRGA_0, 0xB2 + i * 0x20);
673 				gatesl_0c = mmio_read_32(DBSC_DBPDRGD_0) & 0x7;
674 				mmio_write_32(DBSC_DBPDRGA_0, 0xB2 + i * 0x20);
675 				regval = mmio_read_32(DBSC_DBPDRGD_0) &
676 						0xFFFFFFF8;
677 				mmio_write_32(DBSC_DBPDRGD_0, regval |
678 							     (gatesl_0c + 1));
679 				mmio_write_32(DBSC_DBPDRGA_0, 0xAF + i * 0x20);
680 				regval = (mmio_read_32(DBSC_DBPDRGD_0));
681 				rdqsd_0c = (regval & 0xFF00) >> 8;
682 				rdqsnd_0c = (regval & 0xFF0000) >> 16;
683 				mmio_write_32(DBSC_DBPDRGA_0, 0xAF + i * 0x20);
684 				mmio_write_32(DBSC_DBPDRGD_0,
685 					      (regval & 0xFF0000FF) |
686 					      ((rdqsd_0c +
687 						bdlcount_0c_div4) << 8) |
688 					      ((rdqsnd_0c +
689 						bdlcount_0c_div4) << 16));
690 				mmio_write_32(DBSC_DBPDRGA_0, 0xAA + i * 0x20);
691 				regval = (mmio_read_32(DBSC_DBPDRGD_0));
692 				rbd_0c[0] = (regval) & 0x1f;
693 				rbd_0c[1] = (regval >> 8) & 0x1f;
694 				rbd_0c[2] = (regval >> 16) & 0x1f;
695 				rbd_0c[3] = (regval >> 24) & 0x1f;
696 				mmio_write_32(DBSC_DBPDRGA_0, 0xAA + i * 0x20);
697 				regval = mmio_read_32(DBSC_DBPDRGD_0) &
698 					0xE0E0E0E0;
699 				for (j = 0; j < 4; j++) {
700 					rbd_0c[j] = rbd_0c[j] +
701 						    bdlcount_0c_div4;
702 					if (rbd_0c[j] > 0x1F)
703 						rbd_0c[j] = 0x1F;
704 					regval = regval | (rbd_0c[j] << 8 * j);
705 				}
706 				mmio_write_32(DBSC_DBPDRGD_0, regval);
707 				mmio_write_32(DBSC_DBPDRGA_0, 0xAB + i * 0x20);
708 				regval = (mmio_read_32(DBSC_DBPDRGD_0));
709 				rbd_0c[0] = (regval) & 0x1f;
710 				rbd_0c[1] = (regval >> 8) & 0x1f;
711 				rbd_0c[2] = (regval >> 16) & 0x1f;
712 				rbd_0c[3] = (regval >> 24) & 0x1f;
713 				mmio_write_32(DBSC_DBPDRGA_0, 0xAB + i * 0x20);
714 				regval = mmio_read_32(DBSC_DBPDRGD_0) &
715 					0xE0E0E0E0;
716 				for (j = 0; j < 4; j++) {
717 					rbd_0c[j] = rbd_0c[j] +
718 						    bdlcount_0c_div4;
719 					if (rbd_0c[j] > 0x1F)
720 						rbd_0c[j] = 0x1F;
721 					regval = regval | (rbd_0c[j] << 8 * j);
722 				}
723 				mmio_write_32(DBSC_DBPDRGD_0, regval);
724 			}
725 		}
726 		mmio_write_32(DBSC_DBPDRGA_0, 0x2);
727 		mmio_write_32(DBSC_DBPDRGD_0, 0x7D81E37);
728 	}
729 
730 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000003);
731 	if (byp_ctl == 1)
732 		mmio_write_32(DBSC_DBPDRGD_0, 0x0380C720);
733 	else
734 		mmio_write_32(DBSC_DBPDRGD_0, 0x0380C700);
735 
736 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000007);
737 	while (mmio_read_32(DBSC_DBPDRGD_0) & BIT(30))
738 		;
739 
740 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000021);
741 	mmio_write_32(DBSC_DBPDRGD_0, 0x0024643E);
742 
743 	mmio_write_32(DBSC_DBBUS0CNF1, 0x00000010);
744 	mmio_write_32(DBSC_DBCALCNF, (64000000 / REFRESH_RATE) + 0x01000000);
745 	/* Select setting value in bps */
746 	if (ddr_md == 0) {	/* 1584Mbps */
747 		mmio_write_32(DBSC_DBRFCNF1,
748 			      (REFRESH_RATE * 99 / 125) + 0x00080000);
749 	} else {		/* 1856Mbps */
750 		mmio_write_32(DBSC_DBRFCNF1,
751 			      (REFRESH_RATE * 116 / 125) + 0x00080000);
752 	}
753 
754 	mmio_write_32(DBSC_DBRFCNF2, 0x00010000);
755 	mmio_write_32(DBSC_DBDFICUPDCNF, 0x40100001);
756 	mmio_write_32(DBSC_DBRFEN, 0x00000001);
757 	mmio_write_32(DBSC_DBACEN, 0x00000001);
758 
759 	if (pdqsr_ctl == 1) {
760 		mmio_write_32(0xE67F0018, 0x00000001);
761 		regval = mmio_read_32(0x40000000);
762 		mmio_write_32(DBSC_DBPDRGA_0, 0x00000000);
763 		mmio_write_32(DBSC_DBPDRGD_0, regval);
764 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000A0);
765 		mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
766 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000C0);
767 		mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
768 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000E0);
769 		mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
770 		mmio_write_32(DBSC_DBPDRGA_0, 0x00000100);
771 		mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
772 	}
773 
774 	/* PDR dynamic */
775 	if (pdr_ctl == 1) {
776 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000A3);
777 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000000);
778 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000C3);
779 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000000);
780 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000E3);
781 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000000);
782 		mmio_write_32(DBSC_DBPDRGA_0, 0x00000103);
783 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000000);
784 	}
785 
786 	/*
787 	 * Initial_Step9( Initial End )
788 	 */
789 	mmio_write_32(DBSC_DBPDLK_0, 0x00000000);
790 	mmio_write_32(DBSC_DBSYSCNT0, 0x00000000);
791 
792 #ifdef ddr_qos_init_setting /* only for non qos_init */
793 	mmio_write_32(DBSC_DBSYSCNT0, 0x00001234);
794 	mmio_write_32(DBSC_DBCAM0CNF1, 0x00043218);
795 	mmio_write_32(DBSC_DBCAM0CNF2, 0x000000F4);
796 	mmio_write_32(DBSC_DBSCHCNT0, 0x000f0037);
797 	mmio_write_32(DBSC_DBSCHSZ0, 0x00000001);
798 	mmio_write_32(DBSC_DBSCHRW0, 0x22421111);
799 	mmio_write_32(DBSC_SCFCTST2, 0x012F1123);
800 	mmio_write_32(DBSC_DBSCHQOS00, 0x00000F00);
801 	mmio_write_32(DBSC_DBSCHQOS01, 0x00000B00);
802 	mmio_write_32(DBSC_DBSCHQOS02, 0x00000000);
803 	mmio_write_32(DBSC_DBSCHQOS03, 0x00000000);
804 	mmio_write_32(DBSC_DBSCHQOS40, 0x00000300);
805 	mmio_write_32(DBSC_DBSCHQOS41, 0x000002F0);
806 	mmio_write_32(DBSC_DBSCHQOS42, 0x00000200);
807 	mmio_write_32(DBSC_DBSCHQOS43, 0x00000100);
808 	mmio_write_32(DBSC_DBSCHQOS90, 0x00000100);
809 	mmio_write_32(DBSC_DBSCHQOS91, 0x000000F0);
810 	mmio_write_32(DBSC_DBSCHQOS92, 0x000000A0);
811 	mmio_write_32(DBSC_DBSCHQOS93, 0x00000040);
812 	mmio_write_32(DBSC_DBSCHQOS130, 0x00000100);
813 	mmio_write_32(DBSC_DBSCHQOS131, 0x000000F0);
814 	mmio_write_32(DBSC_DBSCHQOS132, 0x000000A0);
815 	mmio_write_32(DBSC_DBSCHQOS133, 0x00000040);
816 	mmio_write_32(DBSC_DBSCHQOS140, 0x000000C0);
817 	mmio_write_32(DBSC_DBSCHQOS141, 0x000000B0);
818 	mmio_write_32(DBSC_DBSCHQOS142, 0x00000080);
819 	mmio_write_32(DBSC_DBSCHQOS143, 0x00000040);
820 	mmio_write_32(DBSC_DBSCHQOS150, 0x00000040);
821 	mmio_write_32(DBSC_DBSCHQOS151, 0x00000030);
822 	mmio_write_32(DBSC_DBSCHQOS152, 0x00000020);
823 	mmio_write_32(DBSC_DBSCHQOS153, 0x00000010);
824 
825 	if (pdqsr_ctl == 0)
826 		mmio_write_32(0xE67F0018, 0x00000001);
827 
828 	mmio_write_32(DBSC_DBSYSCNT0, 0x00000000);
829 #endif
830 
831 	return 1;
832 }
833 
recovery_from_backup_mode(uint32_t ddr_backup)834 static uint32_t recovery_from_backup_mode(uint32_t ddr_backup)
835 {
836 	/*
837 	 * recovery_Step0(DBSC Setting 1) / same "init_ddr"
838 	 */
839 	uint32_t r2, r5, r6, r7, r12, i;
840 	uint32_t ddr_md;
841 	uint32_t err;
842 	uint32_t regval, j;
843 	uint32_t dqsgd_0c, bdlcount_0c, bdlcount_0c_div2, bdlcount_0c_div4;
844 	uint32_t bdlcount_0c_div8, bdlcount_0c_div16;
845 	uint32_t gatesl_0c, rdqsd_0c, rdqsnd_0c, rbd_0c[4];
846 	uint32_t pdqsr_ctl, lcdl_ctl, lcdl_judge1, lcdl_judge2;
847 	uint32_t pdr_ctl;
848 	uint32_t byp_ctl;
849 
850 	if ((mmio_read_32(0xFFF00044) & 0x000000FF) == 0x00000000) {
851 		pdqsr_ctl = 1;
852 		lcdl_ctl = 1;
853 		pdr_ctl = 1;
854 		byp_ctl = 1;
855 	} else {
856 		pdqsr_ctl = 0;
857 		lcdl_ctl = 0;
858 		pdr_ctl = 0;
859 		byp_ctl = 0;
860 	}
861 
862 	/* Judge the DDR bit rate (ddr_md : 0 = 1584Mbps, 1 = 1856Mbps) */
863 	ddr_md = (mmio_read_32(RST_MODEMR) >> 19) & BIT(0);
864 
865 	/* 1584Mbps setting */
866 	if (ddr_md == 0) {
867 		mmio_write_32(CPG_CPGWPR, 0x5A5AFFFF);
868 		mmio_write_32(CPG_CPGWPCR, 0xA5A50000);
869 
870 		mmio_write_32(CPG_SRCR4, 0x20000000);
871 
872 		mmio_write_32(0xE61500DC, 0xe2200000);	/* Change to 1584Mbps */
873 		while (!(mmio_read_32(CPG_PLLECR) & BIT(11)))
874 			;
875 
876 		mmio_write_32(CPG_SRSTCLR4, 0x20000000);
877 
878 		mmio_write_32(CPG_CPGWPCR, 0xA5A50001);
879 	}
880 
881 	mmio_write_32(DBSC_DBSYSCNT0, 0x00001234);
882 	mmio_write_32(DBSC_DBKIND, 0x00000007);
883 
884 #if RCAR_DRAM_DDR3L_MEMCONF == 0
885 	mmio_write_32(DBSC_DBMEMCONF_0_0, 0x0f030a02);
886 #else
887 	mmio_write_32(DBSC_DBMEMCONF_0_0, 0x10030a02);
888 #endif
889 
890 #if RCAR_DRAM_DDR3L_MEMDUAL == 1
891 	r2 = mmio_read_32(0xE6790614);
892 	mmio_write_32(0xE6790614, r2 | 0x3); /* MCS1_N/MODT1 are activated. */
893 #endif
894 
895 	mmio_write_32(DBSC_DBPHYCONF0, 0x00000001);
896 
897 	/* Select setting value in bps */
898 	if (ddr_md == 0) {	/* 1584Mbps */
899 		mmio_write_32(DBSC_DBTR0, 0x0000000B);
900 		mmio_write_32(DBSC_DBTR1, 0x00000008);
901 	} else {		/* 1856Mbps */
902 		mmio_write_32(DBSC_DBTR0, 0x0000000D);
903 		mmio_write_32(DBSC_DBTR1, 0x00000009);
904 	}
905 
906 	mmio_write_32(DBSC_DBTR2, 0x00000000);
907 
908 	/* Select setting value in bps */
909 	if (ddr_md == 0) {	/* 1584Mbps */
910 		mmio_write_32(DBSC_DBTR3, 0x0000000B);
911 		mmio_write_32(DBSC_DBTR4, 0x000B000B);
912 		mmio_write_32(DBSC_DBTR5, 0x00000027);
913 		mmio_write_32(DBSC_DBTR6, 0x0000001C);
914 	} else {		/* 1856Mbps */
915 		mmio_write_32(DBSC_DBTR3, 0x0000000D);
916 		mmio_write_32(DBSC_DBTR4, 0x000D000D);
917 		mmio_write_32(DBSC_DBTR5, 0x0000002D);
918 		mmio_write_32(DBSC_DBTR6, 0x00000020);
919 	}
920 
921 	mmio_write_32(DBSC_DBTR7, 0x00060006);
922 
923 	/* Select setting value in bps */
924 	if (ddr_md == 0) {	/* 1584Mbps */
925 		mmio_write_32(DBSC_DBTR8, 0x00000020);
926 		mmio_write_32(DBSC_DBTR9, 0x00000006);
927 		mmio_write_32(DBSC_DBTR10, 0x0000000C);
928 		mmio_write_32(DBSC_DBTR11, 0x0000000A);
929 		mmio_write_32(DBSC_DBTR12, 0x00120012);
930 		mmio_write_32(DBSC_DBTR13, 0x000000CE);
931 		mmio_write_32(DBSC_DBTR14, 0x00140005);
932 		mmio_write_32(DBSC_DBTR15, 0x00050004);
933 		mmio_write_32(DBSC_DBTR16, 0x071F0305);
934 		mmio_write_32(DBSC_DBTR17, 0x040C0000);
935 	} else {		/* 1856Mbps */
936 		mmio_write_32(DBSC_DBTR8, 0x00000021);
937 		mmio_write_32(DBSC_DBTR9, 0x00000007);
938 		mmio_write_32(DBSC_DBTR10, 0x0000000E);
939 		mmio_write_32(DBSC_DBTR11, 0x0000000C);
940 		mmio_write_32(DBSC_DBTR12, 0x00140014);
941 		mmio_write_32(DBSC_DBTR13, 0x000000F2);
942 		mmio_write_32(DBSC_DBTR14, 0x00170006);
943 		mmio_write_32(DBSC_DBTR15, 0x00060005);
944 		mmio_write_32(DBSC_DBTR16, 0x09210507);
945 		mmio_write_32(DBSC_DBTR17, 0x040E0000);
946 	}
947 
948 	mmio_write_32(DBSC_DBTR18, 0x00000200);
949 
950 	/* Select setting value in bps */
951 	if (ddr_md == 0) {	/* 1584Mbps */
952 		mmio_write_32(DBSC_DBTR19, 0x01000040);
953 		mmio_write_32(DBSC_DBTR20, 0x020000D6);
954 	} else {		/* 1856Mbps */
955 		mmio_write_32(DBSC_DBTR19, 0x0129004B);
956 		mmio_write_32(DBSC_DBTR20, 0x020000FB);
957 	}
958 
959 	mmio_write_32(DBSC_DBTR21, 0x00040004);
960 	mmio_write_32(DBSC_DBBL, 0x00000000);
961 	mmio_write_32(DBSC_DBODT0, 0x00000001);
962 	mmio_write_32(DBSC_DBADJ0, 0x00000001);
963 	mmio_write_32(DBSC_DBSYSCONF1, 0x00000002);
964 	mmio_write_32(DBSC_DBDFICNT_0, 0x00000010);
965 	mmio_write_32(DBSC_DBBCAMDIS, 0x00000001);
966 	mmio_write_32(DBSC_DBSCHRW1, 0x00000046);
967 
968 	/* Select setting value in bps */
969 	if (ddr_md == 0) {	/* 1584Mbps */
970 		mmio_write_32(DBSC_SCFCTST0, 0x0D050B03);
971 		mmio_write_32(DBSC_SCFCTST1, 0x0306030C);
972 	} else {		/* 1856Mbps */
973 		mmio_write_32(DBSC_SCFCTST0, 0x0C050B03);
974 		mmio_write_32(DBSC_SCFCTST1, 0x0305030C);
975 	}
976 
977 	/*
978 	 * recovery_Step1(PHY setting 1)
979 	 */
980 	mmio_write_32(DBSC_DBPDLK_0, 0x0000A55A);
981 	mmio_write_32(DBSC_DBCMD, 0x01840001);
982 	mmio_write_32(DBSC_DBCMD, 0x0A840000);
983 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000008);	/* DDR_PLLCR */
984 	mmio_write_32(DBSC_DBPDRGD_0, 0x000B8000);
985 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000003);	/* DDR_PGCR1 */
986 	if (byp_ctl == 1)
987 		mmio_write_32(DBSC_DBPDRGD_0, 0x0780C720);
988 	else
989 		mmio_write_32(DBSC_DBPDRGD_0, 0x0780C700);
990 
991 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000020);	/* DDR_DXCCR */
992 	mmio_write_32(DBSC_DBPDRGD_0, 0x00181884);
993 	mmio_write_32(DBSC_DBPDRGA_0, 0x0000001A);	/* DDR_ACIOCR0 */
994 	mmio_write_32(DBSC_DBPDRGD_0, 0x33C03C10);
995 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000007);
996 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(30)))
997 		;
998 
999 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000004);
1000 
1001 	/* Select setting value in bps */
1002 	if (ddr_md == 0) {	/* 1584Mbps */
1003 		mmio_write_32(DBSC_DBPDRGD_0, (REFRESH_RATE * 792 / 125) -
1004 					     400 + 0x08B00000);
1005 	} else {		/* 1856Mbps */
1006 		mmio_write_32(DBSC_DBPDRGD_0, (REFRESH_RATE * 928 / 125) -
1007 					     400 + 0x0A300000);
1008 	}
1009 
1010 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000022);
1011 	mmio_write_32(DBSC_DBPDRGD_0, 0x1000040B);
1012 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000023);
1013 
1014 	/* Select setting value in bps */
1015 	if (ddr_md == 0)	/* 1584Mbps */
1016 		mmio_write_32(DBSC_DBPDRGD_0, 0x2D9C0B66);
1017 	else			/* 1856Mbps */
1018 		mmio_write_32(DBSC_DBPDRGD_0, 0x35A00D77);
1019 
1020 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000024);
1021 
1022 	/* Select setting value in bps */
1023 	if (ddr_md == 0)	/* 1584Mbps */
1024 		mmio_write_32(DBSC_DBPDRGD_0, 0x2A88B400);
1025 	else			/* 1856Mbps */
1026 		mmio_write_32(DBSC_DBPDRGD_0, 0x2A8A2C28);
1027 
1028 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000025);
1029 
1030 	/* Select setting value in bps */
1031 	if (ddr_md == 0)	/* 1584Mbps */
1032 		mmio_write_32(DBSC_DBPDRGD_0, 0x30005200);
1033 	else			/* 1856Mbps */
1034 		mmio_write_32(DBSC_DBPDRGD_0, 0x30005E00);
1035 
1036 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000026);
1037 
1038 	/* Select setting value in bps */
1039 	if (ddr_md == 0)	/* 1584Mbps */
1040 		mmio_write_32(DBSC_DBPDRGD_0, 0x0014A9C9);
1041 	else			/* 1856Mbps */
1042 		mmio_write_32(DBSC_DBPDRGD_0, 0x0014CB49);
1043 
1044 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000027);
1045 
1046 	/* Select setting value in bps */
1047 	if (ddr_md == 0)	/* 1584Mbps */
1048 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000D70);
1049 	else			/* 1856Mbps */
1050 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000F14);
1051 
1052 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000028);
1053 	mmio_write_32(DBSC_DBPDRGD_0, 0x00000046);
1054 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000029);
1055 
1056 	/* Select setting value in bps */
1057 	if (ddr_md == 0) {	/* 1584Mbps */
1058 		if (REFRESH_RATE > 3900)
1059 			mmio_write_32(DBSC_DBPDRGD_0, 0x18);	/* [7]SRT=0 */
1060 		else
1061 			mmio_write_32(DBSC_DBPDRGD_0, 0x98);	/* [7]SRT=1 */
1062 	} else {	/* 1856Mbps */
1063 		if (REFRESH_RATE > 3900)
1064 			mmio_write_32(DBSC_DBPDRGD_0, 0x20);	/* [7]SRT=0 */
1065 		else
1066 			mmio_write_32(DBSC_DBPDRGD_0, 0xA0);	/* [7]SRT=1 */
1067 	}
1068 
1069 	mmio_write_32(DBSC_DBPDRGA_0, 0x0000002C);
1070 	mmio_write_32(DBSC_DBPDRGD_0, 0x81003047);
1071 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000091);
1072 	mmio_write_32(DBSC_DBPDRGD_0, 0x0007BB6B);
1073 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000095);
1074 	mmio_write_32(DBSC_DBPDRGD_0, 0x0007BBAD);
1075 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000099);
1076 	mmio_write_32(DBSC_DBPDRGD_0, 0x0007BB6B);
1077 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000021);	/* DDR_DSGCR */
1078 	mmio_write_32(DBSC_DBPDRGD_0, 0x0024641E);
1079 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);	/* DDR_PGSR0 */
1080 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
1081 		;
1082 
1083 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000001);	/* DDR_PIR */
1084 	mmio_write_32(DBSC_DBPDRGD_0, 0x40010000);
1085 
1086 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);	/* DDR_PGSR0 */
1087 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
1088 		;
1089 
1090 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000092);	/* DDR_ZQ0DR */
1091 	mmio_write_32(DBSC_DBPDRGD_0, 0xC2C59AB5);
1092 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000096);	/* DDR_ZQ1DR */
1093 	mmio_write_32(DBSC_DBPDRGD_0, 0xC4285FBF);
1094 	mmio_write_32(DBSC_DBPDRGA_0, 0x0000009A);	/* DDR_ZQ2DR */
1095 	mmio_write_32(DBSC_DBPDRGD_0, 0xC2C59AB5);
1096 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000090);	/* DDR_ZQCR */
1097 
1098 	/* Select setting value in bps */
1099 	if (ddr_md == 0)	/* 1584Mbps */
1100 		mmio_write_32(DBSC_DBPDRGD_0, 0x0C058900);
1101 	else			/* 1856Mbps */
1102 		mmio_write_32(DBSC_DBPDRGD_0, 0x0C058A00);
1103 
1104 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000090);	/* DDR_ZQCR */
1105 
1106 	/* Select setting value in bps */
1107 	if (ddr_md == 0)	/* 1584Mbps */
1108 		mmio_write_32(DBSC_DBPDRGD_0, 0x04058900);
1109 	else			/* 1856Mbps */
1110 		mmio_write_32(DBSC_DBPDRGD_0, 0x04058A00);
1111 
1112 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000001);	/* DDR_PIR */
1113 	mmio_write_32(DBSC_DBPDRGD_0, 0x00050001);
1114 
1115 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);	/* DDR_PGSR0 */
1116 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
1117 		;
1118 
1119 	/* ddr backupmode end */
1120 	if (ddr_backup)
1121 		NOTICE("BL2: [WARM_BOOT]\n");
1122 	else
1123 		NOTICE("BL2: [COLD_BOOT]\n");
1124 
1125 	err = rcar_dram_update_boot_status(ddr_backup);
1126 	if (err) {
1127 		NOTICE("BL2: [BOOT_STATUS_UPDATE_ERROR]\n");
1128 		return INITDRAM_ERR_I;
1129 	}
1130 
1131 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000092);	/* DDR_ZQ0DR */
1132 	mmio_write_32(DBSC_DBPDRGD_0, 0x02C59AB5);
1133 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000096);	/* DDR_ZQ1DR */
1134 	mmio_write_32(DBSC_DBPDRGD_0, 0x04285FBF);
1135 	mmio_write_32(DBSC_DBPDRGA_0, 0x0000009A);	/* DDR_ZQ2DR */
1136 	mmio_write_32(DBSC_DBPDRGD_0, 0x02C59AB5);
1137 
1138 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000001);	/* DDR_PIR */
1139 	mmio_write_32(DBSC_DBPDRGD_0, 0x08000000);
1140 
1141 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000001);	/* DDR_PIR */
1142 	mmio_write_32(DBSC_DBPDRGD_0, 0x00000003);
1143 
1144 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);	/* DDR_PGSR0 */
1145 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
1146 		;
1147 
1148 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000001);	/* DDR_PIR */
1149 	mmio_write_32(DBSC_DBPDRGD_0, 0x80010000);
1150 
1151 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);	/* DDR_PGSR0 */
1152 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
1153 		;
1154 
1155 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000001);	/* DDR_PIR */
1156 	mmio_write_32(DBSC_DBPDRGD_0, 0x00010073);
1157 
1158 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);	/* DDR_PGSR0 */
1159 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
1160 		;
1161 
1162 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000090);	/* DDR_ZQCR */
1163 
1164 	/* Select setting value in bps */
1165 	if (ddr_md == 0)	/* 1584Mbps */
1166 		mmio_write_32(DBSC_DBPDRGD_0, 0x0C058900);
1167 	else			/* 1856Mbps */
1168 		mmio_write_32(DBSC_DBPDRGD_0, 0x0C058A00);
1169 
1170 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000090);	/* DDR_ZQCR */
1171 
1172 	/* Select setting value in bps */
1173 	if (ddr_md == 0)	/* 1584Mbps */
1174 		mmio_write_32(DBSC_DBPDRGD_0, 0x04058900);
1175 	else			/* 1856Mbps */
1176 		mmio_write_32(DBSC_DBPDRGD_0, 0x04058A00);
1177 
1178 	mmio_write_32(DBSC_DBPDRGA_0, 0x0000000C);
1179 	mmio_write_32(DBSC_DBPDRGD_0, 0x18000040);
1180 
1181 	/*
1182 	 * recovery_Step2(PHY setting 2)
1183 	 */
1184 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);
1185 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
1186 		;
1187 
1188 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000A7);
1189 	mmio_write_32(DBSC_DBPDRGD_0, 0x0D0D0D0D);
1190 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000A8);
1191 	mmio_write_32(DBSC_DBPDRGD_0, 0x0D0D0D0D);
1192 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000A9);
1193 	mmio_write_32(DBSC_DBPDRGD_0, 0x000D0D0D);
1194 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000C7);
1195 	mmio_write_32(DBSC_DBPDRGD_0, 0x0D0D0D0D);
1196 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000C8);
1197 	mmio_write_32(DBSC_DBPDRGD_0, 0x0D0D0D0D);
1198 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000C9);
1199 	mmio_write_32(DBSC_DBPDRGD_0, 0x000D0D0D);
1200 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000E7);
1201 	mmio_write_32(DBSC_DBPDRGD_0, 0x0D0D0D0D);
1202 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000E8);
1203 	mmio_write_32(DBSC_DBPDRGD_0, 0x0D0D0D0D);
1204 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000E9);
1205 	mmio_write_32(DBSC_DBPDRGD_0, 0x000D0D0D);
1206 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000107);
1207 	mmio_write_32(DBSC_DBPDRGD_0, 0x0D0D0D0D);
1208 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000108);
1209 	mmio_write_32(DBSC_DBPDRGD_0, 0x0D0D0D0D);
1210 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000109);
1211 	mmio_write_32(DBSC_DBPDRGD_0, 0x000D0D0D);
1212 
1213 	mmio_write_32(DBSC_DBCALCNF, (64000000 / REFRESH_RATE) + 0x01000000);
1214 	mmio_write_32(DBSC_DBBUS0CNF1, 0x00000010);
1215 
1216 	/* Select setting value in bps */
1217 	if (ddr_md == 0) {	/* 1584Mbps */
1218 		mmio_write_32(DBSC_DBRFCNF1,
1219 			      (REFRESH_RATE * 99 / 125) + 0x00080000);
1220 	} else {			/* 1856Mbps */
1221 		mmio_write_32(DBSC_DBRFCNF1,
1222 			      (REFRESH_RATE * 116 / 125) + 0x00080000);
1223 	}
1224 
1225 	mmio_write_32(DBSC_DBRFCNF2, 0x00010000);
1226 	mmio_write_32(DBSC_DBRFEN, 0x00000001);
1227 	mmio_write_32(DBSC_DBCMD, 0x0A840001);
1228 	while (mmio_read_32(DBSC_DBWAIT) & BIT(0))
1229 		;
1230 
1231 	mmio_write_32(DBSC_DBCMD, 0x00000000);
1232 
1233 	mmio_write_32(DBSC_DBCMD, 0x04840010);
1234 	while (mmio_read_32(DBSC_DBWAIT) & BIT(0))
1235 		;
1236 
1237 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);	/* DDR_PGSR0 */
1238 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
1239 		;
1240 
1241 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000001);	/* DDR_PIR */
1242 	mmio_write_32(DBSC_DBPDRGD_0, 0x00010701);
1243 
1244 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);	/* DDR_PGSR0 */
1245 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
1246 		;
1247 
1248 	for (i = 0; i < 4; i++) {
1249 		mmio_write_32(DBSC_DBPDRGA_0, 0xB1 + i * 0x20);
1250 		r5 = (mmio_read_32(DBSC_DBPDRGD_0) & 0xFF00) >> 0x8;
1251 		mmio_write_32(DBSC_DBPDRGA_0, 0xB4 + i * 0x20);
1252 		r6 = mmio_read_32(DBSC_DBPDRGD_0) & 0xFF;
1253 		mmio_write_32(DBSC_DBPDRGA_0, 0xB3 + i * 0x20);
1254 		r7 = mmio_read_32(DBSC_DBPDRGD_0) & 0x7;
1255 
1256 		if (r6 > 0) {
1257 			mmio_write_32(DBSC_DBPDRGA_0, 0xB2 + i * 0x20);
1258 			r2 = mmio_read_32(DBSC_DBPDRGD_0) & 0xFFFFFFF8;
1259 			mmio_write_32(DBSC_DBPDRGA_0, 0xB2 + i * 0x20);
1260 			mmio_write_32(DBSC_DBPDRGD_0, r2 | ((r7 + 0x1) & 0x7));
1261 			mmio_write_32(DBSC_DBPDRGA_0, 0xB0 + i * 0x20);
1262 			r2 = mmio_read_32(DBSC_DBPDRGD_0) & 0xFFFFFF00;
1263 			mmio_write_32(DBSC_DBPDRGA_0, 0xB0 + i * 0x20);
1264 			mmio_write_32(DBSC_DBPDRGD_0, r2 | r6);
1265 		} else {
1266 			mmio_write_32(DBSC_DBPDRGA_0, 0xB2 + i * 0x20);
1267 			r2 = mmio_read_32(DBSC_DBPDRGD_0) & 0xFFFFFFF8;
1268 			mmio_write_32(DBSC_DBPDRGA_0, 0xB2 + i * 0x20);
1269 			mmio_write_32(DBSC_DBPDRGD_0, r2 | r7);
1270 			mmio_write_32(DBSC_DBPDRGA_0, 0xB0 + i * 0x20);
1271 			r2 = mmio_read_32(DBSC_DBPDRGD_0) & 0xFFFFFF00;
1272 			mmio_write_32(DBSC_DBPDRGA_0, 0xB0 + i * 0x20);
1273 			mmio_write_32(DBSC_DBPDRGD_0,
1274 				      r2 | ((r6 + (r5 << 1)) & 0xFF));
1275 		}
1276 	}
1277 
1278 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000005);
1279 	mmio_write_32(DBSC_DBPDRGD_0, 0xC1AA00C0);
1280 
1281 	if (pdqsr_ctl == 0) {
1282 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000A0);
1283 		mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
1284 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000C0);
1285 		mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
1286 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000E0);
1287 		mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
1288 		mmio_write_32(DBSC_DBPDRGA_0, 0x00000100);
1289 		mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
1290 	}
1291 
1292 	/* PDR always off */
1293 	if (pdr_ctl == 1) {
1294 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000A3);
1295 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000008);
1296 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000C3);
1297 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000008);
1298 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000E3);
1299 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000008);
1300 		mmio_write_32(DBSC_DBPDRGA_0, 0x00000103);
1301 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000008);
1302 	}
1303 
1304 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000001);
1305 	mmio_write_32(DBSC_DBPDRGD_0, 0x00010801);
1306 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);
1307 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
1308 		;
1309 
1310 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000005);
1311 	mmio_write_32(DBSC_DBPDRGD_0, 0xC1AA00D8);
1312 
1313 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000001);
1314 	mmio_write_32(DBSC_DBPDRGD_0, 0x00011001);
1315 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);
1316 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
1317 		;
1318 
1319 	if (pdqsr_ctl == 1) {
1320 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000A0);
1321 		mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
1322 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000C0);
1323 		mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
1324 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000E0);
1325 		mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
1326 		mmio_write_32(DBSC_DBPDRGA_0, 0x00000100);
1327 		mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
1328 	}
1329 
1330 	/* PDR dynamic */
1331 	if (pdr_ctl == 1) {
1332 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000A3);
1333 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000000);
1334 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000C3);
1335 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000000);
1336 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000E3);
1337 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000000);
1338 		mmio_write_32(DBSC_DBPDRGA_0, 0x00000103);
1339 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000000);
1340 	}
1341 
1342 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000001);
1343 	mmio_write_32(DBSC_DBPDRGD_0, 0x00012001);
1344 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);
1345 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
1346 		;
1347 
1348 	if (pdqsr_ctl == 1) {
1349 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000A0);
1350 		mmio_write_32(DBSC_DBPDRGD_0, 0x7C000285);
1351 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000C0);
1352 		mmio_write_32(DBSC_DBPDRGD_0, 0x7C000285);
1353 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000E0);
1354 		mmio_write_32(DBSC_DBPDRGD_0, 0x7C000285);
1355 		mmio_write_32(DBSC_DBPDRGA_0, 0x00000100);
1356 		mmio_write_32(DBSC_DBPDRGD_0, 0x7C000285);
1357 	}
1358 
1359 	/* PDR always off */
1360 	if (pdr_ctl == 1) {
1361 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000A3);
1362 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000008);
1363 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000C3);
1364 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000008);
1365 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000E3);
1366 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000008);
1367 		mmio_write_32(DBSC_DBPDRGA_0, 0x00000103);
1368 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000008);
1369 	}
1370 
1371 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000001);
1372 	mmio_write_32(DBSC_DBPDRGD_0, 0x00014001);
1373 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);
1374 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
1375 		;
1376 
1377 	if (pdqsr_ctl == 1) {
1378 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000A0);
1379 		mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
1380 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000C0);
1381 		mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
1382 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000E0);
1383 		mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
1384 		mmio_write_32(DBSC_DBPDRGA_0, 0x00000100);
1385 		mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
1386 	}
1387 
1388 	/* PDR dynamic */
1389 	if (pdr_ctl == 1) {
1390 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000A3);
1391 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000000);
1392 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000C3);
1393 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000000);
1394 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000E3);
1395 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000000);
1396 		mmio_write_32(DBSC_DBPDRGA_0, 0x00000103);
1397 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000000);
1398 	}
1399 
1400 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000001);
1401 	mmio_write_32(DBSC_DBPDRGD_0, 0x00018001);
1402 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);
1403 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
1404 		;
1405 
1406 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000A0);
1407 	mmio_write_32(DBSC_DBPDRGD_0, 0x7C000285);
1408 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000C0);
1409 	mmio_write_32(DBSC_DBPDRGD_0, 0x7C000285);
1410 	mmio_write_32(DBSC_DBPDRGA_0, 0x000000E0);
1411 	mmio_write_32(DBSC_DBPDRGD_0, 0x7C000285);
1412 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000100);
1413 	mmio_write_32(DBSC_DBPDRGD_0, 0x7C000285);
1414 	mmio_write_32(DBSC_DBPDRGA_0, 0x0000002C);
1415 	mmio_write_32(DBSC_DBPDRGD_0, 0x81003087);
1416 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000001);
1417 	mmio_write_32(DBSC_DBPDRGD_0, 0x00010401);
1418 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);
1419 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
1420 		;
1421 
1422 	for (i = 0; i < 4; i++) {
1423 		mmio_write_32(DBSC_DBPDRGA_0, 0xB1 + i * 0x20);
1424 		r5 = ((mmio_read_32(DBSC_DBPDRGD_0) & 0xFF00) >> 0x8);
1425 		mmio_write_32(DBSC_DBPDRGA_0, 0xB4 + i * 0x20);
1426 		r6 = mmio_read_32(DBSC_DBPDRGD_0) & 0xFF;
1427 		mmio_write_32(DBSC_DBPDRGA_0, 0xB3 + i * 0x20);
1428 		r7 = mmio_read_32(DBSC_DBPDRGD_0) & 0x7;
1429 		r12 = r5 >> 0x2;
1430 
1431 		if (r12 < r6) {
1432 			mmio_write_32(DBSC_DBPDRGA_0, 0xB2 + i * 0x20);
1433 			r2 = mmio_read_32(DBSC_DBPDRGD_0) & 0xFFFFFFF8;
1434 			mmio_write_32(DBSC_DBPDRGA_0, 0xB2 + i * 0x20);
1435 			mmio_write_32(DBSC_DBPDRGD_0, r2 | ((r7 + 0x1) & 0x7));
1436 			mmio_write_32(DBSC_DBPDRGA_0, 0xB0 + i * 0x20);
1437 			r2 = mmio_read_32(DBSC_DBPDRGD_0) & 0xFFFFFF00;
1438 			mmio_write_32(DBSC_DBPDRGA_0, 0xB0 + i * 0x20);
1439 			mmio_write_32(DBSC_DBPDRGD_0, r2 | ((r6 - r12) & 0xFF));
1440 		} else {
1441 			mmio_write_32(DBSC_DBPDRGA_0, 0xB2 + i * 0x20);
1442 			r2 = mmio_read_32(DBSC_DBPDRGD_0) & 0xFFFFFFF8;
1443 			mmio_write_32(DBSC_DBPDRGA_0, 0xB2 + i * 0x20);
1444 			mmio_write_32(DBSC_DBPDRGD_0, r2 | (r7 & 0x7));
1445 			mmio_write_32(DBSC_DBPDRGA_0, 0xB0 + i * 0x20);
1446 			r2 = mmio_read_32(DBSC_DBPDRGD_0) & 0xFFFFFF00;
1447 			mmio_write_32(DBSC_DBPDRGA_0, 0xB0 + i * 0x20);
1448 			mmio_write_32(DBSC_DBPDRGD_0,
1449 				      r2 |
1450 				      ((r6 + r5 + (r5 >> 1) + r12) & 0xFF));
1451 		}
1452 	}
1453 
1454 	if (pdqsr_ctl == 0) {
1455 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000A0);
1456 		mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
1457 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000C0);
1458 		mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
1459 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000E0);
1460 		mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
1461 		mmio_write_32(DBSC_DBPDRGA_0, 0x00000100);
1462 		mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
1463 	}
1464 
1465 	/* PDR always off */
1466 	if (pdr_ctl == 1) {
1467 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000A3);
1468 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000008);
1469 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000C3);
1470 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000008);
1471 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000E3);
1472 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000008);
1473 		mmio_write_32(DBSC_DBPDRGA_0, 0x00000103);
1474 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000008);
1475 	}
1476 
1477 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000001);
1478 	mmio_write_32(DBSC_DBPDRGD_0, 0x00015001);
1479 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);
1480 	while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
1481 		;
1482 
1483 	if (lcdl_ctl == 1) {
1484 		for (i = 0; i < 4; i++) {
1485 			mmio_write_32(DBSC_DBPDRGA_0, 0x000000B0 + i * 0x20);
1486 			dqsgd_0c = mmio_read_32(DBSC_DBPDRGD_0) & 0x000000FF;
1487 			mmio_write_32(DBSC_DBPDRGA_0, 0x000000B1 + i * 0x20);
1488 			bdlcount_0c = (mmio_read_32(DBSC_DBPDRGD_0) &
1489 					0x0000FF00) >> 8;
1490 			bdlcount_0c_div2 = (bdlcount_0c >> 1);
1491 			bdlcount_0c_div4 = (bdlcount_0c >> 2);
1492 			bdlcount_0c_div8 = (bdlcount_0c >> 3);
1493 			bdlcount_0c_div16 = (bdlcount_0c >> 4);
1494 
1495 			if (ddr_md == 0) {	/* 1584Mbps */
1496 				lcdl_judge1 = bdlcount_0c_div2 +
1497 					      bdlcount_0c_div4 +
1498 					      bdlcount_0c_div8;
1499 				lcdl_judge2 = bdlcount_0c +
1500 					      bdlcount_0c_div4 +
1501 					      bdlcount_0c_div16;
1502 			} else {	/* 1856Mbps */
1503 				lcdl_judge1 = bdlcount_0c_div2 +
1504 					      bdlcount_0c_div4;
1505 				lcdl_judge2 = bdlcount_0c +
1506 					      bdlcount_0c_div4;
1507 			}
1508 
1509 			if (dqsgd_0c <= lcdl_judge1)
1510 				continue;
1511 
1512 			if (dqsgd_0c <= lcdl_judge2) {
1513 				mmio_write_32(DBSC_DBPDRGA_0, 0xB0 + i * 0x20);
1514 				regval = mmio_read_32(DBSC_DBPDRGD_0) &
1515 						0xFFFFFF00;
1516 				mmio_write_32(DBSC_DBPDRGD_0,
1517 					      (dqsgd_0c - bdlcount_0c_div8) |
1518 					      regval);
1519 			} else {
1520 				mmio_write_32(DBSC_DBPDRGA_0, 0xB0 + i * 0x20);
1521 				regval = mmio_read_32(DBSC_DBPDRGD_0) &
1522 						0xFFFFFF00;
1523 				mmio_write_32(DBSC_DBPDRGD_0, regval);
1524 				mmio_write_32(DBSC_DBPDRGA_0, 0xB2 + i * 0x20);
1525 				gatesl_0c = mmio_read_32(DBSC_DBPDRGD_0) & 0x7;
1526 				mmio_write_32(DBSC_DBPDRGA_0, 0xB2 + i * 0x20);
1527 				regval = mmio_read_32(DBSC_DBPDRGD_0) &
1528 						0xFFFFFFF8;
1529 				mmio_write_32(DBSC_DBPDRGD_0,
1530 					      regval | (gatesl_0c + 1));
1531 				mmio_write_32(DBSC_DBPDRGA_0, 0xAF + i * 0x20);
1532 				regval = mmio_read_32(DBSC_DBPDRGD_0);
1533 				rdqsd_0c = (regval & 0xFF00) >> 8;
1534 				rdqsnd_0c = (regval & 0xFF0000) >> 16;
1535 				mmio_write_32(DBSC_DBPDRGA_0, 0xAF + i * 0x20);
1536 				mmio_write_32(DBSC_DBPDRGD_0,
1537 					      (regval & 0xFF0000FF) |
1538 					      ((rdqsd_0c +
1539 						bdlcount_0c_div4) << 8) |
1540 					      ((rdqsnd_0c +
1541 						bdlcount_0c_div4) << 16));
1542 				mmio_write_32(DBSC_DBPDRGA_0, 0xAA + i * 0x20);
1543 				regval = (mmio_read_32(DBSC_DBPDRGD_0));
1544 				rbd_0c[0] = (regval) & 0x1f;
1545 				rbd_0c[1] = (regval >>  8) & 0x1f;
1546 				rbd_0c[2] = (regval >> 16) & 0x1f;
1547 				rbd_0c[3] = (regval >> 24) & 0x1f;
1548 				mmio_write_32(DBSC_DBPDRGA_0, 0xAA + i * 0x20);
1549 				regval = mmio_read_32(DBSC_DBPDRGD_0) &
1550 						0xE0E0E0E0;
1551 				for (j = 0; j < 4; j++) {
1552 					rbd_0c[j] = rbd_0c[j] +
1553 						    bdlcount_0c_div4;
1554 					if (rbd_0c[j] > 0x1F)
1555 						rbd_0c[j] = 0x1F;
1556 					regval = regval | (rbd_0c[j] << 8 * j);
1557 				}
1558 				mmio_write_32(DBSC_DBPDRGD_0, regval);
1559 				mmio_write_32(DBSC_DBPDRGA_0, 0xAB + i * 0x20);
1560 				regval = (mmio_read_32(DBSC_DBPDRGD_0));
1561 				rbd_0c[0] = regval & 0x1f;
1562 				rbd_0c[1] = (regval >> 8) & 0x1f;
1563 				rbd_0c[2] = (regval >> 16) & 0x1f;
1564 				rbd_0c[3] = (regval >> 24) & 0x1f;
1565 				mmio_write_32(DBSC_DBPDRGA_0, 0xAB + i * 0x20);
1566 				regval = mmio_read_32(DBSC_DBPDRGD_0) &
1567 						0xE0E0E0E0;
1568 				for (j = 0; j < 4; j++) {
1569 					rbd_0c[j] = rbd_0c[j] +
1570 						    bdlcount_0c_div4;
1571 					if (rbd_0c[j] > 0x1F)
1572 						rbd_0c[j] = 0x1F;
1573 					regval = regval | (rbd_0c[j] << 8 * j);
1574 				}
1575 				mmio_write_32(DBSC_DBPDRGD_0, regval);
1576 			}
1577 		}
1578 		mmio_write_32(DBSC_DBPDRGA_0, 0x00000002);
1579 		mmio_write_32(DBSC_DBPDRGD_0, 0x07D81E37);
1580 	}
1581 
1582 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000003);
1583 	if (byp_ctl == 1)
1584 		mmio_write_32(DBSC_DBPDRGD_0, 0x0380C720);
1585 	else
1586 		mmio_write_32(DBSC_DBPDRGD_0, 0x0380C700);
1587 
1588 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000007);
1589 	while (mmio_read_32(DBSC_DBPDRGD_0) & BIT(30))
1590 		;
1591 	mmio_write_32(DBSC_DBPDRGA_0, 0x00000021);
1592 	mmio_write_32(DBSC_DBPDRGD_0, 0x0024643E);
1593 
1594 	/*
1595 	 * recovery_Step3(DBSC Setting 2)
1596 	 */
1597 	mmio_write_32(DBSC_DBDFICUPDCNF, 0x40100001);
1598 	mmio_write_32(DBSC_DBACEN, 0x00000001);
1599 
1600 	if (pdqsr_ctl == 1) {
1601 		mmio_write_32(0xE67F0018, 0x00000001);
1602 		regval = mmio_read_32(0x40000000);
1603 		mmio_write_32(DBSC_DBPDRGA_0, 0x00000000);
1604 		mmio_write_32(DBSC_DBPDRGD_0, regval);
1605 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000A0);
1606 		mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
1607 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000C0);
1608 		mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
1609 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000E0);
1610 		mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
1611 		mmio_write_32(DBSC_DBPDRGA_0, 0x00000100);
1612 		mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
1613 	}
1614 
1615 	/* PDR dynamic */
1616 	if (pdr_ctl == 1) {
1617 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000A3);
1618 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000000);
1619 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000C3);
1620 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000000);
1621 		mmio_write_32(DBSC_DBPDRGA_0, 0x000000E3);
1622 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000000);
1623 		mmio_write_32(DBSC_DBPDRGA_0, 0x00000103);
1624 		mmio_write_32(DBSC_DBPDRGD_0, 0x00000000);
1625 	}
1626 
1627 	mmio_write_32(DBSC_DBPDLK_0, 0x00000000);
1628 	mmio_write_32(DBSC_DBSYSCNT0, 0x00000000);
1629 
1630 #ifdef ddr_qos_init_setting /* only for non qos_init */
1631 	mmio_write_32(DBSC_DBSYSCNT0, 0x00001234);
1632 	mmio_write_32(DBSC_DBCAM0CNF1, 0x00043218);
1633 	mmio_write_32(DBSC_DBCAM0CNF2, 0x000000F4);
1634 	mmio_write_32(DBSC_DBSCHCNT0, 0x000f0037);
1635 	mmio_write_32(DBSC_DBSCHSZ0, 0x00000001);
1636 	mmio_write_32(DBSC_DBSCHRW0, 0x22421111);
1637 	mmio_write_32(DBSC_SCFCTST2, 0x012F1123);
1638 	mmio_write_32(DBSC_DBSCHQOS00, 0x00000F00);
1639 	mmio_write_32(DBSC_DBSCHQOS01, 0x00000B00);
1640 	mmio_write_32(DBSC_DBSCHQOS02, 0x00000000);
1641 	mmio_write_32(DBSC_DBSCHQOS03, 0x00000000);
1642 	mmio_write_32(DBSC_DBSCHQOS40, 0x00000300);
1643 	mmio_write_32(DBSC_DBSCHQOS41, 0x000002F0);
1644 	mmio_write_32(DBSC_DBSCHQOS42, 0x00000200);
1645 	mmio_write_32(DBSC_DBSCHQOS43, 0x00000100);
1646 	mmio_write_32(DBSC_DBSCHQOS90, 0x00000100);
1647 	mmio_write_32(DBSC_DBSCHQOS91, 0x000000F0);
1648 	mmio_write_32(DBSC_DBSCHQOS92, 0x000000A0);
1649 	mmio_write_32(DBSC_DBSCHQOS93, 0x00000040);
1650 	mmio_write_32(DBSC_DBSCHQOS130, 0x00000100);
1651 	mmio_write_32(DBSC_DBSCHQOS131, 0x000000F0);
1652 	mmio_write_32(DBSC_DBSCHQOS132, 0x000000A0);
1653 	mmio_write_32(DBSC_DBSCHQOS133, 0x00000040);
1654 	mmio_write_32(DBSC_DBSCHQOS140, 0x000000C0);
1655 	mmio_write_32(DBSC_DBSCHQOS141, 0x000000B0);
1656 	mmio_write_32(DBSC_DBSCHQOS142, 0x00000080);
1657 	mmio_write_32(DBSC_DBSCHQOS143, 0x00000040);
1658 	mmio_write_32(DBSC_DBSCHQOS150, 0x00000040);
1659 	mmio_write_32(DBSC_DBSCHQOS151, 0x00000030);
1660 	mmio_write_32(DBSC_DBSCHQOS152, 0x00000020);
1661 	mmio_write_32(DBSC_DBSCHQOS153, 0x00000010);
1662 
1663 	if (pdqsr_ctl == 0)
1664 		mmio_write_32(0xE67F0018, 0x00000001);
1665 
1666 	mmio_write_32(DBSC_DBSYSCNT0, 0x00000000);
1667 #endif
1668 
1669 	return 1;
1670 
1671 } /* recovery_from_backup_mode */
1672 
1673 /*
1674  * init_ddr : MD19=0,DDR3L,1584Mbps / MD19=1,DDR3L,1856Mbps
1675  */
1676 
1677 /*
1678  * DDR Initialize entry for IPL
1679  */
rcar_dram_init(void)1680 int32_t rcar_dram_init(void)
1681 {
1682 	uint32_t dataL;
1683 	uint32_t failcount;
1684 	uint32_t md = 0;
1685 	uint32_t ddr = 0;
1686 	uint32_t ddr_backup;
1687 
1688 	md = *((volatile uint32_t*)RST_MODEMR);
1689 	ddr = (md & 0x00080000) >> 19;
1690 	if (ddr == 0x0)
1691 		NOTICE("BL2: DDR1584(%s)\n", RCAR_E3_DDR_VERSION);
1692 	else if (ddr == 0x1)
1693 		NOTICE("BL2: DDR1856(%s)\n", RCAR_E3_DDR_VERSION);
1694 
1695 	rcar_dram_get_boot_status(&ddr_backup);
1696 
1697 	if (ddr_backup == DRAM_BOOT_STATUS_WARM)
1698 		dataL = recovery_from_backup_mode(ddr_backup);	/* WARM boot */
1699 	else
1700 		dataL = init_ddr();				/* COLD boot */
1701 
1702 	if (dataL == 1)
1703 		failcount = 0;
1704 	else
1705 		failcount = 1;
1706 
1707 	if (failcount == 0)
1708 		return INITDRAM_OK;
1709 	else
1710 		return INITDRAM_NG;
1711 
1712 }
1713