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