blob: e9491dc414d65a7465bc1290ddb4336fdec8a02b [file] [log] [blame]
Jorge Ramirez-Ortiz47503d22018-09-23 09:36:52 +02001/*
Marek Vasutb0eb9882019-06-14 01:22:38 +02002 * Copyright (c) 2015-2019, Renesas Electronics Corporation. All rights reserved.
Jorge Ramirez-Ortiz47503d22018-09-23 09:36:52 +02003 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7#include <stdint.h>
Antonio Nino Diaze0f90632018-12-14 00:18:21 +00008
9#include <common/debug.h>
10
Jorge Ramirez-Ortiz47503d22018-09-23 09:36:52 +020011#include <rcar_def.h>
Antonio Nino Diaze0f90632018-12-14 00:18:21 +000012
Jorge Ramirez-Ortiz47503d22018-09-23 09:36:52 +020013#include "../qos_common.h"
Marek Vasutb0eb9882019-06-14 01:22:38 +020014#include "../qos_reg.h"
Jorge Ramirez-Ortiz47503d22018-09-23 09:36:52 +020015#include "qos_init_h3_v11.h"
16
17#define RCAR_QOS_VERSION "rev.0.37"
18
Jorge Ramirez-Ortiz47503d22018-09-23 09:36:52 +020019#if RCAR_QOS_TYPE == RCAR_QOS_TYPE_DEFAULT
20static const mstat_slot_t mstat_fix[] = {
21 {0x0000U, 0x0000000000000000UL},
22 {0x0008U, 0x0000000000000000UL},
23 {0x0010U, 0x0000000000000000UL},
24 {0x0018U, 0x0000000000000000UL},
25 {0x0020U, 0x0000000000000000UL},
26 {0x0028U, 0x0000000000000000UL},
27 {0x0030U, 0x001004030000FFFFUL},
28 {0x0038U, 0x001008060000FFFFUL},
29 {0x0040U, 0x001414090000FFFFUL},
30 {0x0048U, 0x0000000000000000UL},
31 {0x0050U, 0x001410010000FFFFUL},
32 {0x0058U, 0x00140C0C0000FFFFUL},
33 {0x0060U, 0x00140C0C0000FFFFUL},
34 {0x0068U, 0x0000000000000000UL},
35 {0x0070U, 0x001410010000FFFFUL},
36 {0x0078U, 0x001008060000FFFFUL},
37 {0x0080U, 0x001004020000FFFFUL},
38 {0x0088U, 0x001414090000FFFFUL},
39 {0x0090U, 0x00140C0C0000FFFFUL},
40 {0x0098U, 0x001408080000FFFFUL},
41 {0x00A0U, 0x000C08020000FFFFUL},
42 {0x00A8U, 0x000C04010000FFFFUL},
43 {0x00B0U, 0x000C04010000FFFFUL},
44 {0x00B8U, 0x0000000000000000UL},
45 {0x00C0U, 0x000C08020000FFFFUL},
46 {0x00C8U, 0x000C04010000FFFFUL},
47 {0x00D0U, 0x000C04010000FFFFUL},
48 {0x00D8U, 0x000C04030000FFFFUL},
49 {0x00E0U, 0x000C100F0000FFFFUL},
50 {0x00E8U, 0x0000000000000000UL},
51 {0x00F0U, 0x001010080000FFFFUL},
52 {0x00F8U, 0x001010080000FFFFUL},
53 {0x0100U, 0x0000000000000000UL},
54 {0x0108U, 0x000C04030000FFFFUL},
55 {0x0110U, 0x001010080000FFFFUL},
56 {0x0118U, 0x001010080000FFFFUL},
57 {0x0120U, 0x0000000000000000UL},
58 {0x0128U, 0x000C100E0000FFFFUL},
59 {0x0130U, 0x0000000000000000UL},
60 {0x0138U, 0x001008050000FFFFUL},
61 {0x0140U, 0x001008050000FFFFUL},
62 {0x0148U, 0x001008050000FFFFUL},
63 {0x0150U, 0x001008050000FFFFUL},
64 {0x0158U, 0x001008050000FFFFUL},
65 {0x0160U, 0x001008050000FFFFUL},
66 {0x0168U, 0x001008050000FFFFUL},
67 {0x0170U, 0x001008050000FFFFUL},
68 {0x0178U, 0x001004030000FFFFUL},
69 {0x0180U, 0x001004030000FFFFUL},
70 {0x0188U, 0x001004030000FFFFUL},
71 {0x0190U, 0x001014140000FFFFUL},
72 {0x0198U, 0x001014140000FFFFUL},
73 {0x01A0U, 0x001008050000FFFFUL},
74 {0x01A8U, 0x001008050000FFFFUL},
75 {0x01B0U, 0x001008050000FFFFUL},
76 {0x01B8U, 0x0000000000000000UL},
77 {0x01C0U, 0x0000000000000000UL},
78 {0x01C8U, 0x0000000000000000UL},
79 {0x01D0U, 0x0000000000000000UL},
80 {0x01D8U, 0x0000000000000000UL},
81 {0x01E0U, 0x0000000000000000UL},
82 {0x01E8U, 0x0000000000000000UL},
83 {0x01F0U, 0x0000000000000000UL},
84 {0x01F8U, 0x0000000000000000UL},
85 {0x0200U, 0x0000000000000000UL},
86 {0x0208U, 0x0000000000000000UL},
87 {0x0210U, 0x0000000000000000UL},
88 {0x0218U, 0x0000000000000000UL},
89 {0x0220U, 0x0000000000000000UL},
90 {0x0228U, 0x0000000000000000UL},
91 {0x0230U, 0x0000000000000000UL},
92 {0x0238U, 0x0000000000000000UL},
93 {0x0240U, 0x0000000000000000UL},
94 {0x0248U, 0x0000000000000000UL},
95 {0x0250U, 0x0000000000000000UL},
96 {0x0258U, 0x0000000000000000UL},
97 {0x0260U, 0x0000000000000000UL},
98 {0x0268U, 0x001408010000FFFFUL},
99 {0x0270U, 0x001404010000FFFFUL},
100 {0x0278U, 0x0000000000000000UL},
101 {0x0280U, 0x0000000000000000UL},
102 {0x0288U, 0x0000000000000000UL},
103 {0x0290U, 0x001408010000FFFFUL},
104 {0x0298U, 0x001404010000FFFFUL},
105 {0x02A0U, 0x000C04010000FFFFUL},
106 {0x02A8U, 0x000C04010000FFFFUL},
107 {0x02B0U, 0x001404010000FFFFUL},
108 {0x02B8U, 0x0000000000000000UL},
109 {0x02C0U, 0x0000000000000000UL},
110 {0x02C8U, 0x0000000000000000UL},
111 {0x02D0U, 0x000C04010000FFFFUL},
112 {0x02D8U, 0x000C04010000FFFFUL},
113 {0x02E0U, 0x001404010000FFFFUL},
114 {0x02E8U, 0x0000000000000000UL},
115 {0x02F0U, 0x0000000000000000UL},
116 {0x02F8U, 0x0000000000000000UL},
117 {0x0300U, 0x0000000000000000UL},
118 {0x0308U, 0x0000000000000000UL},
119 {0x0310U, 0x0000000000000000UL},
120 {0x0318U, 0x0000000000000000UL},
121 {0x0320U, 0x0000000000000000UL},
122 {0x0328U, 0x0000000000000000UL},
123 {0x0330U, 0x0000000000000000UL},
124 {0x0338U, 0x0000000000000000UL},
125};
126
127static const mstat_slot_t mstat_be[] = {
128 {0x0000U, 0x001200100C89C401UL},
129 {0x0008U, 0x001200100C89C401UL},
130 {0x0010U, 0x001200100C89C401UL},
131 {0x0018U, 0x001200100C89C401UL},
132 {0x0020U, 0x001100100C803401UL},
133 {0x0028U, 0x001100100C80FC01UL},
134 {0x0030U, 0x0000000000000000UL},
135 {0x0038U, 0x0000000000000000UL},
136 {0x0040U, 0x0000000000000000UL},
137 {0x0048U, 0x0000000000000000UL},
138 {0x0050U, 0x0000000000000000UL},
139 {0x0058U, 0x0000000000000000UL},
140 {0x0060U, 0x0000000000000000UL},
141 {0x0068U, 0x001100100C803401UL},
142 {0x0070U, 0x0000000000000000UL},
143 {0x0078U, 0x0000000000000000UL},
144 {0x0080U, 0x0000000000000000UL},
145 {0x0088U, 0x0000000000000000UL},
146 {0x0090U, 0x0000000000000000UL},
147 {0x0098U, 0x0000000000000000UL},
148 {0x00A0U, 0x0000000000000000UL},
149 {0x00A8U, 0x0000000000000000UL},
150 {0x00B0U, 0x0000000000000000UL},
151 {0x00B8U, 0x001100100C803401UL},
152 {0x00C0U, 0x0000000000000000UL},
153 {0x00C8U, 0x0000000000000000UL},
154 {0x00D0U, 0x0000000000000000UL},
155 {0x00D8U, 0x0000000000000000UL},
156 {0x00E0U, 0x0000000000000000UL},
157 {0x00E8U, 0x001100100C803401UL},
158 {0x00F0U, 0x0000000000000000UL},
159 {0x00F8U, 0x0000000000000000UL},
160 {0x0100U, 0x0000000000000000UL},
161 {0x0108U, 0x0000000000000000UL},
162 {0x0110U, 0x0000000000000000UL},
163 {0x0118U, 0x0000000000000000UL},
164 {0x0120U, 0x0000000000000000UL},
165 {0x0128U, 0x0000000000000000UL},
166 {0x0130U, 0x001100100C803401UL},
167 {0x0138U, 0x0000000000000000UL},
168 {0x0140U, 0x0000000000000000UL},
169 {0x0148U, 0x0000000000000000UL},
170 {0x0150U, 0x0000000000000000UL},
171 {0x0158U, 0x0000000000000000UL},
172 {0x0160U, 0x0000000000000000UL},
173 {0x0168U, 0x0000000000000000UL},
174 {0x0170U, 0x0000000000000000UL},
175 {0x0178U, 0x0000000000000000UL},
176 {0x0180U, 0x0000000000000000UL},
177 {0x0188U, 0x0000000000000000UL},
178 {0x0190U, 0x0000000000000000UL},
179 {0x0198U, 0x0000000000000000UL},
180 {0x01A0U, 0x0000000000000000UL},
181 {0x01A8U, 0x0000000000000000UL},
182 {0x01B0U, 0x0000000000000000UL},
183 {0x01B8U, 0x001100100C803401UL},
184 {0x01C0U, 0x001100800C8FFC01UL},
185 {0x01C8U, 0x001100800C8FFC01UL},
186 {0x01D0U, 0x001100800C8FFC01UL},
187 {0x01D8U, 0x001100800C8FFC01UL},
188 {0x01E0U, 0x001100100C80FC01UL},
189 {0x01E8U, 0x001200100C80FC01UL},
190 {0x01F0U, 0x001100100C80FC01UL},
191 {0x01F8U, 0x001100100C803401UL},
192 {0x0200U, 0x001100100C80FC01UL},
193 {0x0208U, 0x001200100C80FC01UL},
194 {0x0210U, 0x001100100C80FC01UL},
195 {0x0218U, 0x001100100C825801UL},
196 {0x0220U, 0x001100100C825801UL},
197 {0x0228U, 0x001100100C803401UL},
198 {0x0230U, 0x001100100C825801UL},
199 {0x0238U, 0x001100100C825801UL},
200 {0x0240U, 0x001200100C8BB801UL},
201 {0x0248U, 0x001100200C8FFC01UL},
202 {0x0250U, 0x001200100C8BB801UL},
203 {0x0258U, 0x001100200C8FFC01UL},
204 {0x0260U, 0x001100100C84E401UL},
205 {0x0268U, 0x0000000000000000UL},
206 {0x0270U, 0x0000000000000000UL},
207 {0x0278U, 0x001100100C81F401UL},
208 {0x0280U, 0x001100100C803401UL},
209 {0x0288U, 0x001100100C803401UL},
210 {0x0290U, 0x0000000000000000UL},
211 {0x0298U, 0x0000000000000000UL},
212 {0x02A0U, 0x0000000000000000UL},
213 {0x02A8U, 0x0000000000000000UL},
214 {0x02B0U, 0x0000000000000000UL},
215 {0x02B8U, 0x001100100C803401UL},
216 {0x02C0U, 0x001100100C803401UL},
217 {0x02C8U, 0x001100100C803401UL},
218 {0x02D0U, 0x0000000000000000UL},
219 {0x02D8U, 0x0000000000000000UL},
220 {0x02E0U, 0x0000000000000000UL},
221 {0x02E8U, 0x001100100C803401UL},
222 {0x02F0U, 0x001100300C8FFC01UL},
223 {0x02F8U, 0x001100500C8FFC01UL},
224 {0x0300U, 0x001100100C803401UL},
225 {0x0308U, 0x001100300C8FFC01UL},
226 {0x0310U, 0x001100500C8FFC01UL},
227 {0x0318U, 0x001200100C803401UL},
228 {0x0320U, 0x001100300C8FFC01UL},
229 {0x0328U, 0x001100500C8FFC01UL},
230 {0x0330U, 0x001100300C8FFC01UL},
231 {0x0338U, 0x001100500C8FFC01UL},
232};
233#endif
234
235static void dbsc_setting(void)
236{
237 uint32_t md = 0;
238
239 /* BUFCAM settings */
240 /* DBSC_DBCAM0CNF0 not set */
241 io_write_32(DBSC_DBCAM0CNF1, 0x00044218); /* dbcam0cnf1 */
242 io_write_32(DBSC_DBCAM0CNF2, 0x000000F4); /* dbcam0cnf2 */
243 /* DBSC_DBCAM0CNF3 not set */
244 io_write_32(DBSC_DBSCHCNT0, 0x080F0037); /* dbschcnt0 */
245 io_write_32(DBSC_DBSCHCNT1, 0x00001010); /* dbschcnt1 */
246 io_write_32(DBSC_DBSCHSZ0, 0x00000001); /* dbschsz0 */
247 io_write_32(DBSC_DBSCHRW0, 0x22421111); /* dbschrw0 */
248
249 md = (*((volatile uint32_t *)RST_MODEMR) & 0x000A0000) >> 17;
250
251 switch (md) {
252 case 0x0:
253 /* DDR3200 */
254 io_write_32(DBSC_SCFCTST2, 0x012F1123);
255 break;
256 case 0x1: /* MD19=0,MD17=1 : LPDDR4-3000, 4GByte(1GByte x4) */
257 /* DDR2800 */
258 io_write_32(DBSC_SCFCTST2, 0x012F1123);
259 break;
260 case 0x4: /* MD19=1,MD17=0 : LPDDR4-2400, 4GByte(1GByte x4) */
261 /* DDR2400 */
262 io_write_32(DBSC_SCFCTST2, 0x012F1123);
263 break;
264 default: /* MD19=1,MD17=1 : LPDDR4-1600, 4GByte(1GByte x4) */
265 /* DDR1600 */
266 io_write_32(DBSC_SCFCTST2, 0x012F1123);
267 break;
268 }
269
270 /* QoS Settings */
Marek Vasutb0eb9882019-06-14 01:22:38 +0200271 io_write_32(DBSC_DBSCHQOS00, 0x0000F000);
272 io_write_32(DBSC_DBSCHQOS01, 0x0000E000);
273 io_write_32(DBSC_DBSCHQOS02, 0x00007000);
274 io_write_32(DBSC_DBSCHQOS03, 0x00000000);
275 /* DBSC_DBSCHQOS10 not set */
276 /* DBSC_DBSCHQOS11 not set */
277 /* DBSC_DBSCHQOS12 not set */
278 /* DBSC_DBSCHQOS13 not set */
279 /* DBSC_DBSCHQOS20 not set */
280 /* DBSC_DBSCHQOS21 not set */
281 /* DBSC_DBSCHQOS22 not set */
282 /* DBSC_DBSCHQOS23 not set */
283 /* DBSC_DBSCHQOS30 not set */
284 /* DBSC_DBSCHQOS31 not set */
285 /* DBSC_DBSCHQOS32 not set */
286 /* DBSC_DBSCHQOS33 not set */
287 io_write_32(DBSC_DBSCHQOS40, 0x00000E00);
288 io_write_32(DBSC_DBSCHQOS41, 0x00000DFF);
289 io_write_32(DBSC_DBSCHQOS42, 0x00000400);
290 io_write_32(DBSC_DBSCHQOS43, 0x00000200);
291 /* DBSC_DBSCHQOS50 not set */
292 /* DBSC_DBSCHQOS51 not set */
293 /* DBSC_DBSCHQOS52 not set */
294 /* DBSC_DBSCHQOS53 not set */
295 /* DBSC_DBSCHQOS60 not set */
296 /* DBSC_DBSCHQOS61 not set */
297 /* DBSC_DBSCHQOS62 not set */
298 /* DBSC_DBSCHQOS63 not set */
299 /* DBSC_DBSCHQOS70 not set */
300 /* DBSC_DBSCHQOS71 not set */
301 /* DBSC_DBSCHQOS72 not set */
302 /* DBSC_DBSCHQOS73 not set */
303 /* DBSC_DBSCHQOS80 not set */
304 /* DBSC_DBSCHQOS81 not set */
305 /* DBSC_DBSCHQOS82 not set */
306 /* DBSC_DBSCHQOS83 not set */
307 io_write_32(DBSC_DBSCHQOS90, 0x00000C00);
308 io_write_32(DBSC_DBSCHQOS91, 0x00000BFF);
309 io_write_32(DBSC_DBSCHQOS92, 0x00000400);
310 io_write_32(DBSC_DBSCHQOS93, 0x00000200);
311 /* DBSC_DBSCHQOS100 not set */
312 /* DBSC_DBSCHQOS101 not set */
313 /* DBSC_DBSCHQOS102 not set */
314 /* DBSC_DBSCHQOS103 not set */
315 /* DBSC_DBSCHQOS110 not set */
316 /* DBSC_DBSCHQOS111 not set */
317 /* DBSC_DBSCHQOS112 not set */
318 /* DBSC_DBSCHQOS113 not set */
319 /* DBSC_DBSCHQOS120 not set */
320 /* DBSC_DBSCHQOS121 not set */
321 /* DBSC_DBSCHQOS122 not set */
322 /* DBSC_DBSCHQOS123 not set */
323 io_write_32(DBSC_DBSCHQOS130, 0x00000980);
324 io_write_32(DBSC_DBSCHQOS131, 0x0000097F);
325 io_write_32(DBSC_DBSCHQOS132, 0x00000300);
326 io_write_32(DBSC_DBSCHQOS133, 0x00000180);
327 io_write_32(DBSC_DBSCHQOS140, 0x00000800);
328 io_write_32(DBSC_DBSCHQOS141, 0x000007FF);
329 io_write_32(DBSC_DBSCHQOS142, 0x00000300);
330 io_write_32(DBSC_DBSCHQOS143, 0x00000180);
331 io_write_32(DBSC_DBSCHQOS150, 0x000007D0);
332 io_write_32(DBSC_DBSCHQOS151, 0x000007CF);
333 io_write_32(DBSC_DBSCHQOS152, 0x000005D0);
334 io_write_32(DBSC_DBSCHQOS153, 0x000003D0);
Jorge Ramirez-Ortiz47503d22018-09-23 09:36:52 +0200335}
336
337void qos_init_h3_v11(void)
338{
339 dbsc_setting();
340
341 /* DRAM Split Address mapping */
342#if (RCAR_DRAM_SPLIT == RCAR_DRAM_SPLIT_4CH) || \
343 (RCAR_DRAM_SPLIT == RCAR_DRAM_SPLIT_AUTO)
344 NOTICE("BL2: DRAM Split is 4ch\n");
345 io_write_32(AXI_ADSPLCR0, ADSPLCR0_ADRMODE_DEFAULT
346 | ADSPLCR0_SPLITSEL(0xFFU)
347 | ADSPLCR0_AREA(0x1BU)
348 | ADSPLCR0_SWP);
349 io_write_32(AXI_ADSPLCR1, 0x00000000U);
350 io_write_32(AXI_ADSPLCR2, 0xA8A90000U);
351 io_write_32(AXI_ADSPLCR3, 0x00000000U);
352#elif RCAR_DRAM_SPLIT == RCAR_DRAM_SPLIT_2CH
353 NOTICE("BL2: DRAM Split is 2ch\n");
354 io_write_32(AXI_ADSPLCR0, 0x00000000U);
355 io_write_32(AXI_ADSPLCR1, ADSPLCR0_ADRMODE_DEFAULT
356 | ADSPLCR0_SPLITSEL(0xFFU)
357 | ADSPLCR0_AREA(0x1BU)
358 | ADSPLCR0_SWP);
359 io_write_32(AXI_ADSPLCR2, 0x00000000U);
360 io_write_32(AXI_ADSPLCR3, 0x00000000U);
361#else
362 NOTICE("BL2: DRAM Split is OFF\n");
363#endif
364
365#if !(RCAR_QOS_TYPE == RCAR_QOS_NONE)
366#if RCAR_QOS_TYPE == RCAR_QOS_TYPE_DEFAULT
367 NOTICE("BL2: QoS is default setting(%s)\n", RCAR_QOS_VERSION);
368#endif
369
370 /* AR Cache setting */
371 io_write_32(0xE67D1000U, 0x00000100U);
372 io_write_32(0xE67D1008U, 0x00000100U);
373
374 /* Resource Alloc setting */
375#if RCAR_DRAM_SPLIT == RCAR_DRAM_SPLIT_2CH
Marek Vasutb0eb9882019-06-14 01:22:38 +0200376 io_write_32(QOSCTRL_RAS, 0x00000020U);
Jorge Ramirez-Ortiz47503d22018-09-23 09:36:52 +0200377#else
Marek Vasutb0eb9882019-06-14 01:22:38 +0200378 io_write_32(QOSCTRL_RAS, 0x00000040U);
Jorge Ramirez-Ortiz47503d22018-09-23 09:36:52 +0200379#endif
Marek Vasutb0eb9882019-06-14 01:22:38 +0200380 io_write_32(QOSCTRL_FIXTH, 0x000F0005U);
381 io_write_32(QOSCTRL_REGGD, 0x00000000U);
Jorge Ramirez-Ortiz47503d22018-09-23 09:36:52 +0200382#if RCAR_DRAM_SPLIT == RCAR_DRAM_SPLIT_2CH
Marek Vasutb0eb9882019-06-14 01:22:38 +0200383 io_write_64(QOSCTRL_DANN, 0x0101010102020201UL);
384 io_write_32(QOSCTRL_DANT, 0x00181008U);
Jorge Ramirez-Ortiz47503d22018-09-23 09:36:52 +0200385#else
Marek Vasutb0eb9882019-06-14 01:22:38 +0200386 io_write_64(QOSCTRL_DANN, 0x0101000004040401UL);
387 io_write_32(QOSCTRL_DANT, 0x003C2010U);
Jorge Ramirez-Ortiz47503d22018-09-23 09:36:52 +0200388#endif
Marek Vasutb0eb9882019-06-14 01:22:38 +0200389 io_write_32(QOSCTRL_EC, 0x00080001U); /* need for H3 v1.* */
390 io_write_64(QOSCTRL_EMS, 0x0000000000000000UL);
391 io_write_32(QOSCTRL_INSFC, 0xC7840001U);
392 io_write_32(QOSCTRL_BERR, 0x00000000U);
393 io_write_32(QOSCTRL_RACNT0, 0x00000000U);
Jorge Ramirez-Ortiz47503d22018-09-23 09:36:52 +0200394
Marek Vasutb0eb9882019-06-14 01:22:38 +0200395 /* QOSBW setting */
396 io_write_32(QOSCTRL_SL_INIT,
Jorge Ramirez-Ortiz47503d22018-09-23 09:36:52 +0200397 SL_INIT_REFFSSLOT | SL_INIT_SLOTSSLOT | SL_INIT_SSLOTCLK);
Marek Vasutb0eb9882019-06-14 01:22:38 +0200398 io_write_32(QOSCTRL_REF_ARS, 0x00330000U);
Jorge Ramirez-Ortiz47503d22018-09-23 09:36:52 +0200399
Marek Vasutb0eb9882019-06-14 01:22:38 +0200400 /* QOSBW SRAM setting */
Jorge Ramirez-Ortiz47503d22018-09-23 09:36:52 +0200401 {
402 uint32_t i;
403
404 for (i = 0U; i < ARRAY_SIZE(mstat_fix); i++) {
Marek Vasutb0eb9882019-06-14 01:22:38 +0200405 io_write_64(QOSBW_FIX_QOS_BANK0 + mstat_fix[i].addr,
Jorge Ramirez-Ortiz47503d22018-09-23 09:36:52 +0200406 mstat_fix[i].value);
Marek Vasutb0eb9882019-06-14 01:22:38 +0200407 io_write_64(QOSBW_FIX_QOS_BANK1 + mstat_fix[i].addr,
Jorge Ramirez-Ortiz47503d22018-09-23 09:36:52 +0200408 mstat_fix[i].value);
409 }
410 for (i = 0U; i < ARRAY_SIZE(mstat_be); i++) {
Marek Vasutb0eb9882019-06-14 01:22:38 +0200411 io_write_64(QOSBW_BE_QOS_BANK0 + mstat_be[i].addr,
Jorge Ramirez-Ortiz47503d22018-09-23 09:36:52 +0200412 mstat_be[i].value);
Marek Vasutb0eb9882019-06-14 01:22:38 +0200413 io_write_64(QOSBW_BE_QOS_BANK1 + mstat_be[i].addr,
Jorge Ramirez-Ortiz47503d22018-09-23 09:36:52 +0200414 mstat_be[i].value);
415 }
416 }
417
418 /* 3DG bus Leaf setting */
419 io_write_32(0xFD820808U, 0x00001234U);
420 io_write_32(0xFD820800U, 0x0000003FU);
421 io_write_32(0xFD821800U, 0x0000003FU);
422 io_write_32(0xFD822800U, 0x0000003FU);
423 io_write_32(0xFD823800U, 0x0000003FU);
424 io_write_32(0xFD824800U, 0x0000003FU);
425 io_write_32(0xFD825800U, 0x0000003FU);
426 io_write_32(0xFD826800U, 0x0000003FU);
427 io_write_32(0xFD827800U, 0x0000003FU);
428
429 /* VIO bus Leaf setting */
430 io_write_32(0xFEB89800, 0x00000001U);
431 io_write_32(0xFEB8A800, 0x00000001U);
432 io_write_32(0xFEB8B800, 0x00000001U);
433 io_write_32(0xFEB8C800, 0x00000001U);
434
435 /* HSC bus Leaf setting */
436 io_write_32(0xE6430800, 0x00000001U);
437 io_write_32(0xE6431800, 0x00000001U);
438 io_write_32(0xE6432800, 0x00000001U);
439 io_write_32(0xE6433800, 0x00000001U);
440
441 /* MP bus Leaf setting */
442 io_write_32(0xEC620800, 0x00000001U);
443 io_write_32(0xEC621800, 0x00000001U);
444
445 /* PERIE bus Leaf setting */
446 io_write_32(0xE7760800, 0x00000001U);
447 io_write_32(0xE7768800, 0x00000001U);
448
449 /* PERIW bus Leaf setting */
450 io_write_32(0xE6760800, 0x00000001U);
451 io_write_32(0xE6768800, 0x00000001U);
452
453 /* RT bus Leaf setting */
454 io_write_32(0xFFC50800, 0x00000001U);
455 io_write_32(0xFFC51800, 0x00000001U);
456
457 /* CCI bus Leaf setting */
458 {
459
460 uint32_t modemr = io_read_32(RCAR_MODEMR);
461
462 modemr &= MODEMR_BOOT_CPU_MASK;
463
464 if ((modemr == MODEMR_BOOT_CPU_CA57) ||
465 (modemr == MODEMR_BOOT_CPU_CA53)) {
466 io_write_32(0xF1300800, 0x00000001U);
467 io_write_32(0xF1340800, 0x00000001U);
468 io_write_32(0xF1380800, 0x00000001U);
469 io_write_32(0xF13C0800, 0x00000001U);
470 }
471 }
472
473 /* Resource Alloc start */
Marek Vasutb0eb9882019-06-14 01:22:38 +0200474 io_write_32(QOSCTRL_RAEN, 0x00000001U);
Jorge Ramirez-Ortiz47503d22018-09-23 09:36:52 +0200475
Marek Vasutb0eb9882019-06-14 01:22:38 +0200476 /* QOSBW start */
477 io_write_32(QOSCTRL_STATQC, 0x00000001U);
Jorge Ramirez-Ortiz47503d22018-09-23 09:36:52 +0200478#else
479 NOTICE("BL2: QoS is None\n");
480
481 /* Resource Alloc setting */
Marek Vasutb0eb9882019-06-14 01:22:38 +0200482 io_write_32(QOSCTRL_EC, 0x00080001U); /* need for H3 v1.* */
Jorge Ramirez-Ortiz47503d22018-09-23 09:36:52 +0200483#endif /* !(RCAR_QOS_TYPE == RCAR_QOS_NONE) */
484}