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 */ 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 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 */ 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