blob: 5410771c92fa7a3397d7b98838fe10f52598f942 [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 Vasutdcc9ef82019-08-07 18:19:26 +020012#include "rcar_def.h"
13#include "../ddr_regs.h"
Valentine Barshakf2184142018-10-30 02:06:17 +030014
Valentine Barshakf2184142018-10-30 02:06:17 +030015static uint32_t init_ddr_v3m_1600(void)
16{
Marek Vasut3aa0d442019-07-14 11:03:21 +020017 uint32_t i, r2, r5, r6, r7, r12;
Valentine Barshakf2184142018-10-30 02:06:17 +030018
Marek Vasut3aa0d442019-07-14 11:03:21 +020019 mmio_write_32(DBSC_DBSYSCNT0, 0x00001234);
20 mmio_write_32(DBSC_DBKIND, 0x00000007);
Valentine Barshakf2184142018-10-30 02:06:17 +030021#if RCAR_DRAM_DDR3L_MEMCONF == 0
Marek Vasutdcc9ef82019-08-07 18:19:26 +020022 mmio_write_32(DBSC_DBMEMCONF_0_0, 0x0f030a02); // 1GB: Eagle
Valentine Barshakf2184142018-10-30 02:06:17 +030023#else
Marek Vasutdcc9ef82019-08-07 18:19:26 +020024 mmio_write_32(DBSC_DBMEMCONF_0_0, 0x10030a02); // 2GB: V3MSK
Valentine Barshakf2184142018-10-30 02:06:17 +030025#endif
Marek Vasut3aa0d442019-07-14 11:03:21 +020026 mmio_write_32(DBSC_DBPHYCONF0, 0x00000001);
27 mmio_write_32(DBSC_DBTR0, 0x0000000B);
28 mmio_write_32(DBSC_DBTR1, 0x00000008);
29 mmio_write_32(DBSC_DBTR3, 0x0000000B);
30 mmio_write_32(DBSC_DBTR4, 0x000B000B);
31 mmio_write_32(DBSC_DBTR5, 0x00000027);
32 mmio_write_32(DBSC_DBTR6, 0x0000001C);
33 mmio_write_32(DBSC_DBTR7, 0x00060006);
34 mmio_write_32(DBSC_DBTR8, 0x00000020);
35 mmio_write_32(DBSC_DBTR9, 0x00000006);
36 mmio_write_32(DBSC_DBTR10, 0x0000000C);
37 mmio_write_32(DBSC_DBTR11, 0x0000000B);
38 mmio_write_32(DBSC_DBTR12, 0x00120012);
39 mmio_write_32(DBSC_DBTR13, 0x01180118);
40 mmio_write_32(DBSC_DBTR14, 0x00140005);
41 mmio_write_32(DBSC_DBTR15, 0x00050004);
42 mmio_write_32(DBSC_DBTR16, 0x071D0305);
43 mmio_write_32(DBSC_DBTR17, 0x040C0010);
44 mmio_write_32(DBSC_DBTR18, 0x00000200);
45 mmio_write_32(DBSC_DBTR19, 0x01000040);
46 mmio_write_32(DBSC_DBTR20, 0x02000120);
47 mmio_write_32(DBSC_DBTR21, 0x00040004);
48 mmio_write_32(DBSC_DBBL, 0x00000000);
49 mmio_write_32(DBSC_DBODT0, 0x00000001);
50 mmio_write_32(DBSC_DBADJ0, 0x00000001);
51 mmio_write_32(DBSC_DBCAM0CNF1, 0x00082010);
52 mmio_write_32(DBSC_DBCAM0CNF2, 0x00002000);
53 mmio_write_32(DBSC_DBSCHCNT0, 0x080f003f);
54 mmio_write_32(DBSC_DBSCHCNT1, 0x00001010);
55 mmio_write_32(DBSC_DBSCHSZ0, 0x00000001);
56 mmio_write_32(DBSC_DBSCHRW0, 0x00000200);
57 mmio_write_32(DBSC_DBSCHRW1, 0x00000040);
58 mmio_write_32(DBSC_DBSCHQOS40, 0x00000600);
59 mmio_write_32(DBSC_DBSCHQOS41, 0x00000480);
60 mmio_write_32(DBSC_DBSCHQOS42, 0x00000300);
61 mmio_write_32(DBSC_DBSCHQOS43, 0x00000180);
62 mmio_write_32(DBSC_DBSCHQOS90, 0x00000400);
63 mmio_write_32(DBSC_DBSCHQOS91, 0x00000300);
64 mmio_write_32(DBSC_DBSCHQOS92, 0x00000200);
65 mmio_write_32(DBSC_DBSCHQOS93, 0x00000100);
66 mmio_write_32(DBSC_DBSCHQOS130, 0x00000300);
67 mmio_write_32(DBSC_DBSCHQOS131, 0x00000240);
68 mmio_write_32(DBSC_DBSCHQOS132, 0x00000180);
69 mmio_write_32(DBSC_DBSCHQOS133, 0x000000c0);
70 mmio_write_32(DBSC_DBSCHQOS140, 0x00000200);
71 mmio_write_32(DBSC_DBSCHQOS141, 0x00000180);
72 mmio_write_32(DBSC_DBSCHQOS142, 0x00000100);
73 mmio_write_32(DBSC_DBSCHQOS143, 0x00000080);
74 mmio_write_32(DBSC_DBSCHQOS150, 0x00000100);
75 mmio_write_32(DBSC_DBSCHQOS151, 0x000000c0);
76 mmio_write_32(DBSC_DBSCHQOS152, 0x00000080);
77 mmio_write_32(DBSC_DBSCHQOS153, 0x00000040);
78 mmio_write_32(DBSC_DBSYSCONF1, 0x00000002);
79 mmio_write_32(DBSC_DBCAM0CNF1, 0x00040C04);
80 mmio_write_32(DBSC_DBCAM0CNF2, 0x000001c4);
81 mmio_write_32(DBSC_DBSCHSZ0, 0x00000003);
82 mmio_write_32(DBSC_DBSCHRW1, 0x001a0080);
Marek Vasutdcc9ef82019-08-07 18:19:26 +020083 mmio_write_32(DBSC_DBDFICNT_0, 0x00000010);
Valentine Barshakf2184142018-10-30 02:06:17 +030084
Marek Vasutdcc9ef82019-08-07 18:19:26 +020085 mmio_write_32(DBSC_DBPDLK_0, 0x0000A55A);
Marek Vasut3aa0d442019-07-14 11:03:21 +020086 mmio_write_32(DBSC_DBCMD, 0x01000001);
87 mmio_write_32(DBSC_DBCMD, 0x08000000);
Marek Vasutdcc9ef82019-08-07 18:19:26 +020088 mmio_write_32(DBSC_DBPDRGA_0, 0x00000001);
89 mmio_write_32(DBSC_DBPDRGD_0, 0x80010000);
90 mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);
91 while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
Marek Vasut3aa0d442019-07-14 11:03:21 +020092 ;
Valentine Barshakf2184142018-10-30 02:06:17 +030093
Marek Vasutdcc9ef82019-08-07 18:19:26 +020094 mmio_write_32(DBSC_DBPDRGA_0, 0x00000008);
95 mmio_write_32(DBSC_DBPDRGD_0, 0x000B8000);
96 mmio_write_32(DBSC_DBPDRGA_0, 0x00000090);
97 mmio_write_32(DBSC_DBPDRGD_0, 0x04058904);
98 mmio_write_32(DBSC_DBPDRGA_0, 0x00000091);
99 mmio_write_32(DBSC_DBPDRGD_0, 0x0007BB6D);
100 mmio_write_32(DBSC_DBPDRGA_0, 0x00000095);
101 mmio_write_32(DBSC_DBPDRGD_0, 0x0007BB6B);
102 mmio_write_32(DBSC_DBPDRGA_0, 0x00000099);
103 mmio_write_32(DBSC_DBPDRGD_0, 0x0007BB6D);
104 mmio_write_32(DBSC_DBPDRGA_0, 0x00000090);
105 mmio_write_32(DBSC_DBPDRGD_0, 0x04058900);
106 mmio_write_32(DBSC_DBPDRGA_0, 0x00000021);
107 mmio_write_32(DBSC_DBPDRGD_0, 0x0024641E);
108 mmio_write_32(DBSC_DBPDRGA_0, 0x00000001);
109 mmio_write_32(DBSC_DBPDRGD_0, 0x00010073);
110 mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);
111 while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
Marek Vasut3aa0d442019-07-14 11:03:21 +0200112 ;
Valentine Barshakf2184142018-10-30 02:06:17 +0300113
Marek Vasutdcc9ef82019-08-07 18:19:26 +0200114 mmio_write_32(DBSC_DBPDRGA_0, 0x00000090);
115 mmio_write_32(DBSC_DBPDRGD_0, 0x0C058900);
116 mmio_write_32(DBSC_DBPDRGA_0, 0x00000090);
117 mmio_write_32(DBSC_DBPDRGD_0, 0x04058900);
118 mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);
119 while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
Marek Vasut3aa0d442019-07-14 11:03:21 +0200120 ;
Valentine Barshakf2184142018-10-30 02:06:17 +0300121
Marek Vasutdcc9ef82019-08-07 18:19:26 +0200122 mmio_write_32(DBSC_DBPDRGA_0, 0x00000003);
123 mmio_write_32(DBSC_DBPDRGD_0, 0x0780C700);
124 mmio_write_32(DBSC_DBPDRGA_0, 0x00000007);
125 while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(30)))
Marek Vasut3aa0d442019-07-14 11:03:21 +0200126 ;
Valentine Barshakf2184142018-10-30 02:06:17 +0300127
Marek Vasutdcc9ef82019-08-07 18:19:26 +0200128 mmio_write_32(DBSC_DBPDRGA_0, 0x00000004);
129 mmio_write_32(DBSC_DBPDRGD_0, 0x08C0C170);
130 mmio_write_32(DBSC_DBPDRGA_0, 0x00000022);
131 mmio_write_32(DBSC_DBPDRGD_0, 0x1000040B);
132 mmio_write_32(DBSC_DBPDRGA_0, 0x00000023);
133 mmio_write_32(DBSC_DBPDRGD_0, 0x2D9C0B66);
134 mmio_write_32(DBSC_DBPDRGA_0, 0x00000024);
135 mmio_write_32(DBSC_DBPDRGD_0, 0x2A88C400);
136 mmio_write_32(DBSC_DBPDRGA_0, 0x00000025);
137 mmio_write_32(DBSC_DBPDRGD_0, 0x30005200);
138 mmio_write_32(DBSC_DBPDRGA_0, 0x00000026);
139 mmio_write_32(DBSC_DBPDRGD_0, 0x0014A9C9);
140 mmio_write_32(DBSC_DBPDRGA_0, 0x00000027);
141 mmio_write_32(DBSC_DBPDRGD_0, 0x00000D70);
142 mmio_write_32(DBSC_DBPDRGA_0, 0x00000028);
143 mmio_write_32(DBSC_DBPDRGD_0, 0x00000004);
144 mmio_write_32(DBSC_DBPDRGA_0, 0x00000029);
145 mmio_write_32(DBSC_DBPDRGD_0, 0x00000018);
146 mmio_write_32(DBSC_DBPDRGA_0, 0x0000002C);
147 mmio_write_32(DBSC_DBPDRGD_0, 0x81003047);
148 mmio_write_32(DBSC_DBPDRGA_0, 0x00000020);
149 mmio_write_32(DBSC_DBPDRGD_0, 0x00181884);
150 mmio_write_32(DBSC_DBPDRGA_0, 0x0000001A);
151 mmio_write_32(DBSC_DBPDRGD_0, 0x13C03C10);
152 mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);
153 while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
Marek Vasut3aa0d442019-07-14 11:03:21 +0200154 ;
Valentine Barshakf2184142018-10-30 02:06:17 +0300155
Marek Vasutdcc9ef82019-08-07 18:19:26 +0200156 mmio_write_32(DBSC_DBPDRGA_0, 0x000000A7);
157 mmio_write_32(DBSC_DBPDRGD_0, 0x0D0D0D0D);
158 mmio_write_32(DBSC_DBPDRGA_0, 0x000000A8);
159 mmio_write_32(DBSC_DBPDRGD_0, 0x0D0D0D0D);
160 mmio_write_32(DBSC_DBPDRGA_0, 0x000000A9);
161 mmio_write_32(DBSC_DBPDRGD_0, 0x000D0D0D);
162 mmio_write_32(DBSC_DBPDRGA_0, 0x000000C7);
163 mmio_write_32(DBSC_DBPDRGD_0, 0x0D0D0D0D);
164 mmio_write_32(DBSC_DBPDRGA_0, 0x000000C8);
165 mmio_write_32(DBSC_DBPDRGD_0, 0x0D0D0D0D);
166 mmio_write_32(DBSC_DBPDRGA_0, 0x000000C9);
167 mmio_write_32(DBSC_DBPDRGD_0, 0x000D0D0D);
168 mmio_write_32(DBSC_DBPDRGA_0, 0x000000E7);
169 mmio_write_32(DBSC_DBPDRGD_0, 0x0D0D0D0D);
170 mmio_write_32(DBSC_DBPDRGA_0, 0x000000E8);
171 mmio_write_32(DBSC_DBPDRGD_0, 0x0D0D0D0D);
172 mmio_write_32(DBSC_DBPDRGA_0, 0x000000E9);
173 mmio_write_32(DBSC_DBPDRGD_0, 0x000D0D0D);
174 mmio_write_32(DBSC_DBPDRGA_0, 0x00000107);
175 mmio_write_32(DBSC_DBPDRGD_0, 0x0D0D0D0D);
176 mmio_write_32(DBSC_DBPDRGA_0, 0x00000108);
177 mmio_write_32(DBSC_DBPDRGD_0, 0x0D0D0D0D);
178 mmio_write_32(DBSC_DBPDRGA_0, 0x00000109);
179 mmio_write_32(DBSC_DBPDRGD_0, 0x000D0D0D);
180 mmio_write_32(DBSC_DBPDRGA_0, 0x00000001);
181 mmio_write_32(DBSC_DBPDRGD_0, 0x00010181);
Marek Vasut3aa0d442019-07-14 11:03:21 +0200182 mmio_write_32(DBSC_DBCMD, 0x08000001);
Marek Vasutdcc9ef82019-08-07 18:19:26 +0200183 mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);
184 while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
Marek Vasut3aa0d442019-07-14 11:03:21 +0200185 ;
Valentine Barshakf2184142018-10-30 02:06:17 +0300186
Marek Vasutdcc9ef82019-08-07 18:19:26 +0200187 mmio_write_32(DBSC_DBPDRGA_0, 0x00000001);
188 mmio_write_32(DBSC_DBPDRGD_0, 0x00010601);
189 mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);
190 while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
Marek Vasut3aa0d442019-07-14 11:03:21 +0200191 ;
Valentine Barshakf2184142018-10-30 02:06:17 +0300192
Marek Vasut3aa0d442019-07-14 11:03:21 +0200193 for (i = 0; i < 4; i++) {
Marek Vasutdcc9ef82019-08-07 18:19:26 +0200194 mmio_write_32(DBSC_DBPDRGA_0, 0xB1 + i * 0x20);
195 r5 = (mmio_read_32(DBSC_DBPDRGD_0) & 0xFF00) >> 8;
196 mmio_write_32(DBSC_DBPDRGA_0, 0xB4 + i * 0x20);
197 r6 = mmio_read_32(DBSC_DBPDRGD_0) & 0xFF;
198 mmio_write_32(DBSC_DBPDRGA_0, 0xB3 + i * 0x20);
199 r7 = mmio_read_32(DBSC_DBPDRGD_0) & 0x7;
Valentine Barshakf2184142018-10-30 02:06:17 +0300200
Marek Vasut3aa0d442019-07-14 11:03:21 +0200201 if (r6 > 0) {
Marek Vasutdcc9ef82019-08-07 18:19:26 +0200202 mmio_write_32(DBSC_DBPDRGA_0, 0xB2 + i * 0x20);
203 r2 = (mmio_read_32(DBSC_DBPDRGD_0) & 0xFFFFFFF8);
Valentine Barshakf2184142018-10-30 02:06:17 +0300204
Marek Vasutdcc9ef82019-08-07 18:19:26 +0200205 mmio_write_32(DBSC_DBPDRGA_0, 0xB2 + i * 0x20);
206 mmio_write_32(DBSC_DBPDRGD_0, ((r7 + 1) & 0x7) | r2);
207 mmio_write_32(DBSC_DBPDRGA_0, 0xB0 + i * 0x20);
208 r2 = (mmio_read_32(DBSC_DBPDRGD_0) & 0xFFFFFF00);
209 mmio_write_32(DBSC_DBPDRGA_0, 0xB0 + i * 0x20);
210 mmio_write_32(DBSC_DBPDRGD_0, r2 | r6);
Marek Vasut3aa0d442019-07-14 11:03:21 +0200211 } else {
Marek Vasutdcc9ef82019-08-07 18:19:26 +0200212 mmio_write_32(DBSC_DBPDRGA_0, 0xB2 + i * 0x20);
213 r2 = (mmio_read_32(DBSC_DBPDRGD_0) & 0xFFFFFFF8);
214 mmio_write_32(DBSC_DBPDRGA_0, 0xB2 + i * 0x20);
215 mmio_write_32(DBSC_DBPDRGD_0, r2 | r7);
Valentine Barshakf2184142018-10-30 02:06:17 +0300216
Marek Vasutdcc9ef82019-08-07 18:19:26 +0200217 mmio_write_32(DBSC_DBPDRGA_0, 0xB0 + i * 0x20);
218 r2 = (mmio_read_32(DBSC_DBPDRGD_0) & 0xFFFFFF00);
219 mmio_write_32(DBSC_DBPDRGA_0, 0xB0 + i * 0x20);
220 mmio_write_32(DBSC_DBPDRGD_0, r2 |
Marek Vasut3aa0d442019-07-14 11:03:21 +0200221 (((r5 << 1) + r6) & 0xFF));
222 }
223 }
Valentine Barshakf2184142018-10-30 02:06:17 +0300224
Marek Vasutdcc9ef82019-08-07 18:19:26 +0200225 mmio_write_32(DBSC_DBPDRGA_0, 0x00000005);
226 mmio_write_32(DBSC_DBPDRGD_0, 0xC1AA00A0);
227 mmio_write_32(DBSC_DBPDRGA_0, 0x000000A0);
228 mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
229 mmio_write_32(DBSC_DBPDRGA_0, 0x000000C0);
230 mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
231 mmio_write_32(DBSC_DBPDRGA_0, 0x000000E0);
232 mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
233 mmio_write_32(DBSC_DBPDRGA_0, 0x00000100);
234 mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
235 mmio_write_32(DBSC_DBPDRGA_0, 0x00000001);
236 mmio_write_32(DBSC_DBPDRGD_0, 0x00010801);
237 mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);
238 while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
Marek Vasut3aa0d442019-07-14 11:03:21 +0200239 ;
Valentine Barshakf2184142018-10-30 02:06:17 +0300240
Marek Vasutdcc9ef82019-08-07 18:19:26 +0200241 mmio_write_32(DBSC_DBPDRGA_0, 0x00000005);
242 mmio_write_32(DBSC_DBPDRGD_0, 0xC1AA00B8);
243 mmio_write_32(DBSC_DBPDRGA_0, 0x00000001);
244 mmio_write_32(DBSC_DBPDRGD_0, 0x0001F001);
245 mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);
246 while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
Marek Vasut3aa0d442019-07-14 11:03:21 +0200247 ;
Valentine Barshakf2184142018-10-30 02:06:17 +0300248
Marek Vasutdcc9ef82019-08-07 18:19:26 +0200249 mmio_write_32(DBSC_DBPDRGA_0, 0x000000A0);
250 mmio_write_32(DBSC_DBPDRGD_0, 0x7C000285);
251 mmio_write_32(DBSC_DBPDRGA_0, 0x000000C0);
252 mmio_write_32(DBSC_DBPDRGD_0, 0x7C000285);
253 mmio_write_32(DBSC_DBPDRGA_0, 0x000000E0);
254 mmio_write_32(DBSC_DBPDRGD_0, 0x7C000285);
255 mmio_write_32(DBSC_DBPDRGA_0, 0x00000100);
256 mmio_write_32(DBSC_DBPDRGD_0, 0x7C000285);
257 mmio_write_32(DBSC_DBPDRGA_0, 0x0000002C);
258 mmio_write_32(DBSC_DBPDRGD_0, 0x81003087);
259 mmio_write_32(DBSC_DBPDRGA_0, 0x00000001);
260 mmio_write_32(DBSC_DBPDRGD_0, 0x00010401);
261 mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);
262 while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
Marek Vasut3aa0d442019-07-14 11:03:21 +0200263 ;
Valentine Barshakf2184142018-10-30 02:06:17 +0300264
Marek Vasut3aa0d442019-07-14 11:03:21 +0200265 for (i = 0; i < 4; i++) {
Marek Vasutdcc9ef82019-08-07 18:19:26 +0200266 mmio_write_32(DBSC_DBPDRGA_0, 0xB1 + i * 0x20);
267 r5 = (mmio_read_32(DBSC_DBPDRGD_0) & 0xFF00) >> 8;
268 mmio_write_32(DBSC_DBPDRGA_0, 0xB4 + i * 0x20);
269 r6 = (mmio_read_32(DBSC_DBPDRGD_0) & 0xFF);
Valentine Barshakf2184142018-10-30 02:06:17 +0300270
Marek Vasutdcc9ef82019-08-07 18:19:26 +0200271 mmio_write_32(DBSC_DBPDRGA_0, 0xB3 + i * 0x20);
272 r7 = (mmio_read_32(DBSC_DBPDRGD_0) & 0x7);
Marek Vasut3aa0d442019-07-14 11:03:21 +0200273 r12 = (r5 >> 2);
274 if (r6 - r12 > 0) {
Marek Vasutdcc9ef82019-08-07 18:19:26 +0200275 mmio_write_32(DBSC_DBPDRGA_0, 0xB2 + i * 0x20);
276 r2 = (mmio_read_32(DBSC_DBPDRGD_0) & 0xFFFFFFF8);
Valentine Barshakf2184142018-10-30 02:06:17 +0300277
Marek Vasutdcc9ef82019-08-07 18:19:26 +0200278 mmio_write_32(DBSC_DBPDRGA_0, 0xB2 + i * 0x20);
279 mmio_write_32(DBSC_DBPDRGD_0, ((r7 + 1) & 0x7) | r2);
280 mmio_write_32(DBSC_DBPDRGA_0, 0xB0 + i * 0x20);
281 r2 = (mmio_read_32(DBSC_DBPDRGD_0) & 0xFFFFFF00);
Valentine Barshakf2184142018-10-30 02:06:17 +0300282
Marek Vasutdcc9ef82019-08-07 18:19:26 +0200283 mmio_write_32(DBSC_DBPDRGA_0, 0xB0 + i * 0x20);
284 mmio_write_32(DBSC_DBPDRGD_0, ((r6 - r12) & 0xFF) | r2);
Marek Vasut3aa0d442019-07-14 11:03:21 +0200285 } else {
Marek Vasutdcc9ef82019-08-07 18:19:26 +0200286 mmio_write_32(DBSC_DBPDRGA_0, 0xB2 + i * 0x20);
287 r2 = (mmio_read_32(DBSC_DBPDRGD_0) & 0xFFFFFFF8);
288 mmio_write_32(DBSC_DBPDRGA_0, 0xB2 + i * 0x20);
289 mmio_write_32(DBSC_DBPDRGD_0, (r7 & 0x7) | r2);
290 mmio_write_32(DBSC_DBPDRGA_0, 0xB0 + i * 0x20);
291 r2 = (mmio_read_32(DBSC_DBPDRGD_0) & 0xFFFFFF00);
292 mmio_write_32(DBSC_DBPDRGA_0, 0xB0 + i * 0x20);
293 mmio_write_32(DBSC_DBPDRGD_0, r2 |
Marek Vasut3aa0d442019-07-14 11:03:21 +0200294 ((r6 + r5 +
295 (r5 >> 1) + r12) & 0xFF));
296 }
297 }
Valentine Barshakf2184142018-10-30 02:06:17 +0300298
Marek Vasutdcc9ef82019-08-07 18:19:26 +0200299 mmio_write_32(DBSC_DBPDRGA_0, 0x000000A0);
300 mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
301 mmio_write_32(DBSC_DBPDRGA_0, 0x000000C0);
302 mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
303 mmio_write_32(DBSC_DBPDRGA_0, 0x000000E0);
304 mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
305 mmio_write_32(DBSC_DBPDRGA_0, 0x00000100);
306 mmio_write_32(DBSC_DBPDRGD_0, 0x7C0002C5);
307 mmio_write_32(DBSC_DBPDRGA_0, 0x00000001);
308 mmio_write_32(DBSC_DBPDRGD_0, 0x00015001);
309 mmio_write_32(DBSC_DBPDRGA_0, 0x00000006);
310 while (!(mmio_read_32(DBSC_DBPDRGD_0) & BIT(0)))
Marek Vasut3aa0d442019-07-14 11:03:21 +0200311 ;
Valentine Barshakf2184142018-10-30 02:06:17 +0300312
Marek Vasutdcc9ef82019-08-07 18:19:26 +0200313 mmio_write_32(DBSC_DBPDRGA_0, 0x00000003);
314 mmio_write_32(DBSC_DBPDRGD_0, 0x0380C700);
315 mmio_write_32(DBSC_DBPDRGA_0, 0x00000007);
316 while (mmio_read_32(DBSC_DBPDRGD_0) & BIT(30))
Marek Vasut3aa0d442019-07-14 11:03:21 +0200317 ;
Marek Vasutdcc9ef82019-08-07 18:19:26 +0200318 mmio_write_32(DBSC_DBPDRGA_0, 0x00000021);
319 mmio_write_32(DBSC_DBPDRGD_0, 0x0024643E);
Valentine Barshakf2184142018-10-30 02:06:17 +0300320
Marek Vasut3aa0d442019-07-14 11:03:21 +0200321 mmio_write_32(DBSC_DBBUS0CNF1, 0x00000000);
322 mmio_write_32(DBSC_DBBUS0CNF0, 0x00010001);
323 mmio_write_32(DBSC_DBCALCNF, 0x0100200E);
324 mmio_write_32(DBSC_DBRFCNF1, 0x00081860);
325 mmio_write_32(DBSC_DBRFCNF2, 0x00010000);
326 mmio_write_32(DBSC_DBDFICUPDCNF, 0x40100001);
327 mmio_write_32(DBSC_DBRFEN, 0x00000001);
328 mmio_write_32(DBSC_DBACEN, 0x00000001);
Marek Vasutdcc9ef82019-08-07 18:19:26 +0200329 mmio_write_32(DBSC_DBPDLK_0, 0x00000000);
Marek Vasut3aa0d442019-07-14 11:03:21 +0200330 mmio_write_32(0xE67F0024, 0x00000001);
331 mmio_write_32(DBSC_DBSYSCNT0, 0x00000000);
332
333 return INITDRAM_OK;
Valentine Barshakf2184142018-10-30 02:06:17 +0300334}
335
336int32_t rcar_dram_init(void)
337{
Marek Vasut3aa0d442019-07-14 11:03:21 +0200338 return init_ddr_v3m_1600();
Valentine Barshakf2184142018-10-30 02:06:17 +0300339}