blob: 00e1903ce1a9eb1345c7f7058d719c8a21bc2e9b [file] [log] [blame]
Valentine Barshakf2184142018-10-30 02:06:17 +03001/*
Marek Vasuta75f8262019-07-14 08:55:27 +02002 * Copyright (c) 2015-2019, Renesas Electronics Corporation
Valentine Barshakf2184142018-10-30 02:06:17 +03003 * All rights reserved.
4 *
5 * SPDX-License-Identifier: BSD-3-Clause
6 */
7
Marek Vasutb9e78d42019-07-14 09:22:57 +02008#include <lib/mmio.h>
Marek Vasuta75f8262019-07-14 08:55:27 +02009#include <lib/utils_def.h>
Valentine Barshakf2184142018-10-30 02:06:17 +030010#include <stdint.h>
11#include "boot_init_dram.h"
Marek Vasut291bbfe2019-07-14 09:10:34 +020012#include "boot_init_dram_regdef.h"
Valentine Barshakf2184142018-10-30 02:06:17 +030013
Valentine Barshakf2184142018-10-30 02:06:17 +030014static uint32_t init_ddr_v3m_1600(void)
15{
Marek Vasut3aa0d442019-07-14 11:03:21 +020016 uint32_t i, r2, r5, r6, r7, r12;
Valentine Barshakf2184142018-10-30 02:06:17 +030017
Marek Vasut3aa0d442019-07-14 11:03:21 +020018 mmio_write_32(DBSC_DBSYSCNT0, 0x00001234);
19 mmio_write_32(DBSC_DBKIND, 0x00000007);
Valentine Barshakf2184142018-10-30 02:06:17 +030020#if RCAR_DRAM_DDR3L_MEMCONF == 0
Marek Vasut3aa0d442019-07-14 11:03:21 +020021 mmio_write_32(DBSC_DBMEMCONF00, 0x0f030a02); // 1GB: Eagle
Valentine Barshakf2184142018-10-30 02:06:17 +030022#else
Marek Vasut3aa0d442019-07-14 11:03:21 +020023 mmio_write_32(DBSC_DBMEMCONF00, 0x10030a02); // 2GB: V3MSK
Valentine Barshakf2184142018-10-30 02:06:17 +030024#endif
Marek Vasut3aa0d442019-07-14 11:03:21 +020025 mmio_write_32(DBSC_DBPHYCONF0, 0x00000001);
26 mmio_write_32(DBSC_DBTR0, 0x0000000B);
27 mmio_write_32(DBSC_DBTR1, 0x00000008);
28 mmio_write_32(DBSC_DBTR3, 0x0000000B);
29 mmio_write_32(DBSC_DBTR4, 0x000B000B);
30 mmio_write_32(DBSC_DBTR5, 0x00000027);
31 mmio_write_32(DBSC_DBTR6, 0x0000001C);
32 mmio_write_32(DBSC_DBTR7, 0x00060006);
33 mmio_write_32(DBSC_DBTR8, 0x00000020);
34 mmio_write_32(DBSC_DBTR9, 0x00000006);
35 mmio_write_32(DBSC_DBTR10, 0x0000000C);
36 mmio_write_32(DBSC_DBTR11, 0x0000000B);
37 mmio_write_32(DBSC_DBTR12, 0x00120012);
38 mmio_write_32(DBSC_DBTR13, 0x01180118);
39 mmio_write_32(DBSC_DBTR14, 0x00140005);
40 mmio_write_32(DBSC_DBTR15, 0x00050004);
41 mmio_write_32(DBSC_DBTR16, 0x071D0305);
42 mmio_write_32(DBSC_DBTR17, 0x040C0010);
43 mmio_write_32(DBSC_DBTR18, 0x00000200);
44 mmio_write_32(DBSC_DBTR19, 0x01000040);
45 mmio_write_32(DBSC_DBTR20, 0x02000120);
46 mmio_write_32(DBSC_DBTR21, 0x00040004);
47 mmio_write_32(DBSC_DBBL, 0x00000000);
48 mmio_write_32(DBSC_DBODT0, 0x00000001);
49 mmio_write_32(DBSC_DBADJ0, 0x00000001);
50 mmio_write_32(DBSC_DBCAM0CNF1, 0x00082010);
51 mmio_write_32(DBSC_DBCAM0CNF2, 0x00002000);
52 mmio_write_32(DBSC_DBSCHCNT0, 0x080f003f);
53 mmio_write_32(DBSC_DBSCHCNT1, 0x00001010);
54 mmio_write_32(DBSC_DBSCHSZ0, 0x00000001);
55 mmio_write_32(DBSC_DBSCHRW0, 0x00000200);
56 mmio_write_32(DBSC_DBSCHRW1, 0x00000040);
57 mmio_write_32(DBSC_DBSCHQOS40, 0x00000600);
58 mmio_write_32(DBSC_DBSCHQOS41, 0x00000480);
59 mmio_write_32(DBSC_DBSCHQOS42, 0x00000300);
60 mmio_write_32(DBSC_DBSCHQOS43, 0x00000180);
61 mmio_write_32(DBSC_DBSCHQOS90, 0x00000400);
62 mmio_write_32(DBSC_DBSCHQOS91, 0x00000300);
63 mmio_write_32(DBSC_DBSCHQOS92, 0x00000200);
64 mmio_write_32(DBSC_DBSCHQOS93, 0x00000100);
65 mmio_write_32(DBSC_DBSCHQOS130, 0x00000300);
66 mmio_write_32(DBSC_DBSCHQOS131, 0x00000240);
67 mmio_write_32(DBSC_DBSCHQOS132, 0x00000180);
68 mmio_write_32(DBSC_DBSCHQOS133, 0x000000c0);
69 mmio_write_32(DBSC_DBSCHQOS140, 0x00000200);
70 mmio_write_32(DBSC_DBSCHQOS141, 0x00000180);
71 mmio_write_32(DBSC_DBSCHQOS142, 0x00000100);
72 mmio_write_32(DBSC_DBSCHQOS143, 0x00000080);
73 mmio_write_32(DBSC_DBSCHQOS150, 0x00000100);
74 mmio_write_32(DBSC_DBSCHQOS151, 0x000000c0);
75 mmio_write_32(DBSC_DBSCHQOS152, 0x00000080);
76 mmio_write_32(DBSC_DBSCHQOS153, 0x00000040);
77 mmio_write_32(DBSC_DBSYSCONF1, 0x00000002);
78 mmio_write_32(DBSC_DBCAM0CNF1, 0x00040C04);
79 mmio_write_32(DBSC_DBCAM0CNF2, 0x000001c4);
80 mmio_write_32(DBSC_DBSCHSZ0, 0x00000003);
81 mmio_write_32(DBSC_DBSCHRW1, 0x001a0080);
82 mmio_write_32(DBSC_DBDFICNT0, 0x00000010);
Valentine Barshakf2184142018-10-30 02:06:17 +030083
Marek Vasut3aa0d442019-07-14 11:03:21 +020084 mmio_write_32(DBSC_DBPDLK0, 0x0000A55A);
85 mmio_write_32(DBSC_DBCMD, 0x01000001);
86 mmio_write_32(DBSC_DBCMD, 0x08000000);
87 mmio_write_32(DBSC_DBPDRGA0, 0x00000001);
88 mmio_write_32(DBSC_DBPDRGD0, 0x80010000);
89 mmio_write_32(DBSC_DBPDRGA0, 0x00000006);
90 while (!(mmio_read_32(DBSC_DBPDRGD0) & BIT(0)))
91 ;
Valentine Barshakf2184142018-10-30 02:06:17 +030092
Marek Vasut3aa0d442019-07-14 11:03:21 +020093 mmio_write_32(DBSC_DBPDRGA0, 0x00000008);
94 mmio_write_32(DBSC_DBPDRGD0, 0x000B8000);
95 mmio_write_32(DBSC_DBPDRGA0, 0x00000090);
96 mmio_write_32(DBSC_DBPDRGD0, 0x04058904);
97 mmio_write_32(DBSC_DBPDRGA0, 0x00000091);
98 mmio_write_32(DBSC_DBPDRGD0, 0x0007BB6D);
99 mmio_write_32(DBSC_DBPDRGA0, 0x00000095);
100 mmio_write_32(DBSC_DBPDRGD0, 0x0007BB6B);
101 mmio_write_32(DBSC_DBPDRGA0, 0x00000099);
102 mmio_write_32(DBSC_DBPDRGD0, 0x0007BB6D);
103 mmio_write_32(DBSC_DBPDRGA0, 0x00000090);
104 mmio_write_32(DBSC_DBPDRGD0, 0x04058900);
105 mmio_write_32(DBSC_DBPDRGA0, 0x00000021);
106 mmio_write_32(DBSC_DBPDRGD0, 0x0024641E);
107 mmio_write_32(DBSC_DBPDRGA0, 0x00000001);
108 mmio_write_32(DBSC_DBPDRGD0, 0x00010073);
109 mmio_write_32(DBSC_DBPDRGA0, 0x00000006);
110 while (!(mmio_read_32(DBSC_DBPDRGD0) & BIT(0)))
111 ;
Valentine Barshakf2184142018-10-30 02:06:17 +0300112
Marek Vasut3aa0d442019-07-14 11:03:21 +0200113 mmio_write_32(DBSC_DBPDRGA0, 0x00000090);
114 mmio_write_32(DBSC_DBPDRGD0, 0x0C058900);
115 mmio_write_32(DBSC_DBPDRGA0, 0x00000090);
116 mmio_write_32(DBSC_DBPDRGD0, 0x04058900);
117 mmio_write_32(DBSC_DBPDRGA0, 0x00000006);
118 while (!(mmio_read_32(DBSC_DBPDRGD0) & BIT(0)))
119 ;
Valentine Barshakf2184142018-10-30 02:06:17 +0300120
Marek Vasut3aa0d442019-07-14 11:03:21 +0200121 mmio_write_32(DBSC_DBPDRGA0, 0x00000003);
122 mmio_write_32(DBSC_DBPDRGD0, 0x0780C700);
123 mmio_write_32(DBSC_DBPDRGA0, 0x00000007);
124 while (!(mmio_read_32(DBSC_DBPDRGD0) & BIT(30)))
125 ;
Valentine Barshakf2184142018-10-30 02:06:17 +0300126
Marek Vasut3aa0d442019-07-14 11:03:21 +0200127 mmio_write_32(DBSC_DBPDRGA0, 0x00000004);
128 mmio_write_32(DBSC_DBPDRGD0, 0x08C0C170);
129 mmio_write_32(DBSC_DBPDRGA0, 0x00000022);
130 mmio_write_32(DBSC_DBPDRGD0, 0x1000040B);
131 mmio_write_32(DBSC_DBPDRGA0, 0x00000023);
132 mmio_write_32(DBSC_DBPDRGD0, 0x2D9C0B66);
133 mmio_write_32(DBSC_DBPDRGA0, 0x00000024);
134 mmio_write_32(DBSC_DBPDRGD0, 0x2A88C400);
135 mmio_write_32(DBSC_DBPDRGA0, 0x00000025);
136 mmio_write_32(DBSC_DBPDRGD0, 0x30005200);
137 mmio_write_32(DBSC_DBPDRGA0, 0x00000026);
138 mmio_write_32(DBSC_DBPDRGD0, 0x0014A9C9);
139 mmio_write_32(DBSC_DBPDRGA0, 0x00000027);
140 mmio_write_32(DBSC_DBPDRGD0, 0x00000D70);
141 mmio_write_32(DBSC_DBPDRGA0, 0x00000028);
142 mmio_write_32(DBSC_DBPDRGD0, 0x00000004);
143 mmio_write_32(DBSC_DBPDRGA0, 0x00000029);
144 mmio_write_32(DBSC_DBPDRGD0, 0x00000018);
145 mmio_write_32(DBSC_DBPDRGA0, 0x0000002C);
146 mmio_write_32(DBSC_DBPDRGD0, 0x81003047);
147 mmio_write_32(DBSC_DBPDRGA0, 0x00000020);
148 mmio_write_32(DBSC_DBPDRGD0, 0x00181884);
149 mmio_write_32(DBSC_DBPDRGA0, 0x0000001A);
150 mmio_write_32(DBSC_DBPDRGD0, 0x13C03C10);
151 mmio_write_32(DBSC_DBPDRGA0, 0x00000006);
152 while (!(mmio_read_32(DBSC_DBPDRGD0) & BIT(0)))
153 ;
Valentine Barshakf2184142018-10-30 02:06:17 +0300154
Marek Vasut3aa0d442019-07-14 11:03:21 +0200155 mmio_write_32(DBSC_DBPDRGA0, 0x000000A7);
156 mmio_write_32(DBSC_DBPDRGD0, 0x0D0D0D0D);
157 mmio_write_32(DBSC_DBPDRGA0, 0x000000A8);
158 mmio_write_32(DBSC_DBPDRGD0, 0x0D0D0D0D);
159 mmio_write_32(DBSC_DBPDRGA0, 0x000000A9);
160 mmio_write_32(DBSC_DBPDRGD0, 0x000D0D0D);
161 mmio_write_32(DBSC_DBPDRGA0, 0x000000C7);
162 mmio_write_32(DBSC_DBPDRGD0, 0x0D0D0D0D);
163 mmio_write_32(DBSC_DBPDRGA0, 0x000000C8);
164 mmio_write_32(DBSC_DBPDRGD0, 0x0D0D0D0D);
165 mmio_write_32(DBSC_DBPDRGA0, 0x000000C9);
166 mmio_write_32(DBSC_DBPDRGD0, 0x000D0D0D);
167 mmio_write_32(DBSC_DBPDRGA0, 0x000000E7);
168 mmio_write_32(DBSC_DBPDRGD0, 0x0D0D0D0D);
169 mmio_write_32(DBSC_DBPDRGA0, 0x000000E8);
170 mmio_write_32(DBSC_DBPDRGD0, 0x0D0D0D0D);
171 mmio_write_32(DBSC_DBPDRGA0, 0x000000E9);
172 mmio_write_32(DBSC_DBPDRGD0, 0x000D0D0D);
173 mmio_write_32(DBSC_DBPDRGA0, 0x00000107);
174 mmio_write_32(DBSC_DBPDRGD0, 0x0D0D0D0D);
175 mmio_write_32(DBSC_DBPDRGA0, 0x00000108);
176 mmio_write_32(DBSC_DBPDRGD0, 0x0D0D0D0D);
177 mmio_write_32(DBSC_DBPDRGA0, 0x00000109);
178 mmio_write_32(DBSC_DBPDRGD0, 0x000D0D0D);
179 mmio_write_32(DBSC_DBPDRGA0, 0x00000001);
180 mmio_write_32(DBSC_DBPDRGD0, 0x00010181);
181 mmio_write_32(DBSC_DBCMD, 0x08000001);
182 mmio_write_32(DBSC_DBPDRGA0, 0x00000006);
183 while (!(mmio_read_32(DBSC_DBPDRGD0) & BIT(0)))
184 ;
Valentine Barshakf2184142018-10-30 02:06:17 +0300185
Marek Vasut3aa0d442019-07-14 11:03:21 +0200186 mmio_write_32(DBSC_DBPDRGA0, 0x00000001);
187 mmio_write_32(DBSC_DBPDRGD0, 0x00010601);
188 mmio_write_32(DBSC_DBPDRGA0, 0x00000006);
189 while (!(mmio_read_32(DBSC_DBPDRGD0) & BIT(0)))
190 ;
Valentine Barshakf2184142018-10-30 02:06:17 +0300191
Marek Vasut3aa0d442019-07-14 11:03:21 +0200192 for (i = 0; i < 4; i++) {
193 mmio_write_32(DBSC_DBPDRGA0, 0xB1 + i * 0x20);
194 r5 = (mmio_read_32(DBSC_DBPDRGD0) & 0xFF00) >> 8;
195 mmio_write_32(DBSC_DBPDRGA0, 0xB4 + i * 0x20);
196 r6 = mmio_read_32(DBSC_DBPDRGD0) & 0xFF;
197 mmio_write_32(DBSC_DBPDRGA0, 0xB3 + i * 0x20);
198 r7 = mmio_read_32(DBSC_DBPDRGD0) & 0x7;
Valentine Barshakf2184142018-10-30 02:06:17 +0300199
Marek Vasut3aa0d442019-07-14 11:03:21 +0200200 if (r6 > 0) {
201 mmio_write_32(DBSC_DBPDRGA0, 0xB2 + i * 0x20);
202 r2 = (mmio_read_32(DBSC_DBPDRGD0) & 0xFFFFFFF8);
Valentine Barshakf2184142018-10-30 02:06:17 +0300203
Marek Vasut3aa0d442019-07-14 11:03:21 +0200204 mmio_write_32(DBSC_DBPDRGA0, 0xB2 + i * 0x20);
205 mmio_write_32(DBSC_DBPDRGD0, ((r7 + 1) & 0x7) | r2);
206 mmio_write_32(DBSC_DBPDRGA0, 0xB0 + i * 0x20);
207 r2 = (mmio_read_32(DBSC_DBPDRGD0) & 0xFFFFFF00);
208 mmio_write_32(DBSC_DBPDRGA0, 0xB0 + i * 0x20);
209 mmio_write_32(DBSC_DBPDRGD0, r2 | r6);
210 } else {
211 mmio_write_32(DBSC_DBPDRGA0, 0xB2 + i * 0x20);
212 r2 = (mmio_read_32(DBSC_DBPDRGD0) & 0xFFFFFFF8);
213 mmio_write_32(DBSC_DBPDRGA0, 0xB2 + i * 0x20);
214 mmio_write_32(DBSC_DBPDRGD0, r2 | r7);
Valentine Barshakf2184142018-10-30 02:06:17 +0300215
Marek Vasut3aa0d442019-07-14 11:03:21 +0200216 mmio_write_32(DBSC_DBPDRGA0, 0xB0 + i * 0x20);
217 r2 = (mmio_read_32(DBSC_DBPDRGD0) & 0xFFFFFF00);
218 mmio_write_32(DBSC_DBPDRGA0, 0xB0 + i * 0x20);
219 mmio_write_32(DBSC_DBPDRGD0, r2 |
220 (((r5 << 1) + r6) & 0xFF));
221 }
222 }
Valentine Barshakf2184142018-10-30 02:06:17 +0300223
Marek Vasut3aa0d442019-07-14 11:03:21 +0200224 mmio_write_32(DBSC_DBPDRGA0, 0x00000005);
225 mmio_write_32(DBSC_DBPDRGD0, 0xC1AA00A0);
226 mmio_write_32(DBSC_DBPDRGA0, 0x000000A0);
227 mmio_write_32(DBSC_DBPDRGD0, 0x7C0002C5);
228 mmio_write_32(DBSC_DBPDRGA0, 0x000000C0);
229 mmio_write_32(DBSC_DBPDRGD0, 0x7C0002C5);
230 mmio_write_32(DBSC_DBPDRGA0, 0x000000E0);
231 mmio_write_32(DBSC_DBPDRGD0, 0x7C0002C5);
232 mmio_write_32(DBSC_DBPDRGA0, 0x00000100);
233 mmio_write_32(DBSC_DBPDRGD0, 0x7C0002C5);
234 mmio_write_32(DBSC_DBPDRGA0, 0x00000001);
235 mmio_write_32(DBSC_DBPDRGD0, 0x00010801);
236 mmio_write_32(DBSC_DBPDRGA0, 0x00000006);
237 while (!(mmio_read_32(DBSC_DBPDRGD0) & BIT(0)))
238 ;
Valentine Barshakf2184142018-10-30 02:06:17 +0300239
Marek Vasut3aa0d442019-07-14 11:03:21 +0200240 mmio_write_32(DBSC_DBPDRGA0, 0x00000005);
241 mmio_write_32(DBSC_DBPDRGD0, 0xC1AA00B8);
242 mmio_write_32(DBSC_DBPDRGA0, 0x00000001);
243 mmio_write_32(DBSC_DBPDRGD0, 0x0001F001);
244 mmio_write_32(DBSC_DBPDRGA0, 0x00000006);
245 while (!(mmio_read_32(DBSC_DBPDRGD0) & BIT(0)))
246 ;
Valentine Barshakf2184142018-10-30 02:06:17 +0300247
Marek Vasut3aa0d442019-07-14 11:03:21 +0200248 mmio_write_32(DBSC_DBPDRGA0, 0x000000A0);
249 mmio_write_32(DBSC_DBPDRGD0, 0x7C000285);
250 mmio_write_32(DBSC_DBPDRGA0, 0x000000C0);
251 mmio_write_32(DBSC_DBPDRGD0, 0x7C000285);
252 mmio_write_32(DBSC_DBPDRGA0, 0x000000E0);
253 mmio_write_32(DBSC_DBPDRGD0, 0x7C000285);
254 mmio_write_32(DBSC_DBPDRGA0, 0x00000100);
255 mmio_write_32(DBSC_DBPDRGD0, 0x7C000285);
256 mmio_write_32(DBSC_DBPDRGA0, 0x0000002C);
257 mmio_write_32(DBSC_DBPDRGD0, 0x81003087);
258 mmio_write_32(DBSC_DBPDRGA0, 0x00000001);
259 mmio_write_32(DBSC_DBPDRGD0, 0x00010401);
260 mmio_write_32(DBSC_DBPDRGA0, 0x00000006);
261 while (!(mmio_read_32(DBSC_DBPDRGD0) & BIT(0)))
262 ;
Valentine Barshakf2184142018-10-30 02:06:17 +0300263
Marek Vasut3aa0d442019-07-14 11:03:21 +0200264 for (i = 0; i < 4; i++) {
265 mmio_write_32(DBSC_DBPDRGA0, 0xB1 + i * 0x20);
266 r5 = (mmio_read_32(DBSC_DBPDRGD0) & 0xFF00) >> 8;
267 mmio_write_32(DBSC_DBPDRGA0, 0xB4 + i * 0x20);
268 r6 = (mmio_read_32(DBSC_DBPDRGD0) & 0xFF);
Valentine Barshakf2184142018-10-30 02:06:17 +0300269
Marek Vasut3aa0d442019-07-14 11:03:21 +0200270 mmio_write_32(DBSC_DBPDRGA0, 0xB3 + i * 0x20);
271 r7 = (mmio_read_32(DBSC_DBPDRGD0) & 0x7);
272 r12 = (r5 >> 2);
273 if (r6 - r12 > 0) {
274 mmio_write_32(DBSC_DBPDRGA0, 0xB2 + i * 0x20);
275 r2 = (mmio_read_32(DBSC_DBPDRGD0) & 0xFFFFFFF8);
Valentine Barshakf2184142018-10-30 02:06:17 +0300276
Marek Vasut3aa0d442019-07-14 11:03:21 +0200277 mmio_write_32(DBSC_DBPDRGA0, 0xB2 + i * 0x20);
278 mmio_write_32(DBSC_DBPDRGD0, ((r7 + 1) & 0x7) | r2);
279 mmio_write_32(DBSC_DBPDRGA0, 0xB0 + i * 0x20);
280 r2 = (mmio_read_32(DBSC_DBPDRGD0) & 0xFFFFFF00);
Valentine Barshakf2184142018-10-30 02:06:17 +0300281
Marek Vasut3aa0d442019-07-14 11:03:21 +0200282 mmio_write_32(DBSC_DBPDRGA0, 0xB0 + i * 0x20);
283 mmio_write_32(DBSC_DBPDRGD0, ((r6 - r12) & 0xFF) | r2);
284 } else {
285 mmio_write_32(DBSC_DBPDRGA0, 0xB2 + i * 0x20);
286 r2 = (mmio_read_32(DBSC_DBPDRGD0) & 0xFFFFFFF8);
287 mmio_write_32(DBSC_DBPDRGA0, 0xB2 + i * 0x20);
288 mmio_write_32(DBSC_DBPDRGD0, (r7 & 0x7) | r2);
289 mmio_write_32(DBSC_DBPDRGA0, 0xB0 + i * 0x20);
290 r2 = (mmio_read_32(DBSC_DBPDRGD0) & 0xFFFFFF00);
291 mmio_write_32(DBSC_DBPDRGA0, 0xB0 + i * 0x20);
292 mmio_write_32(DBSC_DBPDRGD0, r2 |
293 ((r6 + r5 +
294 (r5 >> 1) + r12) & 0xFF));
295 }
296 }
Valentine Barshakf2184142018-10-30 02:06:17 +0300297
Marek Vasut3aa0d442019-07-14 11:03:21 +0200298 mmio_write_32(DBSC_DBPDRGA0, 0x000000A0);
299 mmio_write_32(DBSC_DBPDRGD0, 0x7C0002C5);
300 mmio_write_32(DBSC_DBPDRGA0, 0x000000C0);
301 mmio_write_32(DBSC_DBPDRGD0, 0x7C0002C5);
302 mmio_write_32(DBSC_DBPDRGA0, 0x000000E0);
303 mmio_write_32(DBSC_DBPDRGD0, 0x7C0002C5);
304 mmio_write_32(DBSC_DBPDRGA0, 0x00000100);
305 mmio_write_32(DBSC_DBPDRGD0, 0x7C0002C5);
306 mmio_write_32(DBSC_DBPDRGA0, 0x00000001);
307 mmio_write_32(DBSC_DBPDRGD0, 0x00015001);
308 mmio_write_32(DBSC_DBPDRGA0, 0x00000006);
309 while (!(mmio_read_32(DBSC_DBPDRGD0) & BIT(0)))
310 ;
Valentine Barshakf2184142018-10-30 02:06:17 +0300311
Marek Vasut3aa0d442019-07-14 11:03:21 +0200312 mmio_write_32(DBSC_DBPDRGA0, 0x00000003);
313 mmio_write_32(DBSC_DBPDRGD0, 0x0380C700);
314 mmio_write_32(DBSC_DBPDRGA0, 0x00000007);
315 while (mmio_read_32(DBSC_DBPDRGD0) & BIT(30))
316 ;
317 mmio_write_32(DBSC_DBPDRGA0, 0x00000021);
318 mmio_write_32(DBSC_DBPDRGD0, 0x0024643E);
Valentine Barshakf2184142018-10-30 02:06:17 +0300319
Marek Vasut3aa0d442019-07-14 11:03:21 +0200320 mmio_write_32(DBSC_DBBUS0CNF1, 0x00000000);
321 mmio_write_32(DBSC_DBBUS0CNF0, 0x00010001);
322 mmio_write_32(DBSC_DBCALCNF, 0x0100200E);
323 mmio_write_32(DBSC_DBRFCNF1, 0x00081860);
324 mmio_write_32(DBSC_DBRFCNF2, 0x00010000);
325 mmio_write_32(DBSC_DBDFICUPDCNF, 0x40100001);
326 mmio_write_32(DBSC_DBRFEN, 0x00000001);
327 mmio_write_32(DBSC_DBACEN, 0x00000001);
328 mmio_write_32(DBSC_DBPDLK0, 0x00000000);
329 mmio_write_32(0xE67F0024, 0x00000001);
330 mmio_write_32(DBSC_DBSYSCNT0, 0x00000000);
331
332 return INITDRAM_OK;
Valentine Barshakf2184142018-10-30 02:06:17 +0300333}
334
335int32_t rcar_dram_init(void)
336{
Marek Vasut3aa0d442019-07-14 11:03:21 +0200337 return init_ddr_v3m_1600();
Valentine Barshakf2184142018-10-30 02:06:17 +0300338}