blob: 27a3a2ab4e6540a6259b8ea8bfadbbf9afa53c47 [file] [log] [blame]
Valentine Barshakf2184142018-10-30 02:06:17 +03001/*
Marek Vasut92f4b352019-06-14 02:05:43 +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
8#include <stdint.h>
Marek Vasut92f4b352019-06-14 02:05:43 +02009
Valentine Barshakf2184142018-10-30 02:06:17 +030010#include <common/debug.h>
Marek Vasut92f4b352019-06-14 02:05:43 +020011
12#include "../qos_common.h"
13#include "../qos_reg.h"
Valentine Barshakf2184142018-10-30 02:06:17 +030014#include "qos_init_v3m.h"
15
16#define RCAR_QOS_VERSION "rev.0.01"
17
Valentine Barshakf2184142018-10-30 02:06:17 +030018#if RCAR_QOS_TYPE == RCAR_QOS_TYPE_DEFAULT
19static const mstat_slot_t mstat_fix[] = {
20 {0x0000U, 0x000000000000FFFFU},
21 {0x0008U, 0x000000000000FFFFU},
22 {0x0010U, 0x000000000000FFFFU},
23 {0x0018U, 0x000000000000FFFFU},
24 {0x0020U, 0x001414090000FFFFU},
25 {0x0028U, 0x000C00000000FFFFU},
26 {0x0030U, 0x001008040000FFFFU},
27 {0x0038U, 0x001004040000FFFFU},
28 {0x0040U, 0x001004040000FFFFU},
29 {0x0048U, 0x000000000000FFFFU},
30 {0x0050U, 0x001004040000FFFFU},
31 {0x0058U, 0x001004040000FFFFU},
32 {0x0060U, 0x000000000000FFFFU},
33 {0x0068U, 0x001404040000FFFFU},
34 {0x0070U, 0x001008030000FFFFU},
35 {0x0078U, 0x001004030000FFFFU},
36 {0x0080U, 0x001004030000FFFFU},
37 {0x0088U, 0x000000000000FFFFU},
38 {0x0090U, 0x001004040000FFFFU},
39 {0x0098U, 0x001004040000FFFFU},
40 {0x00A0U, 0x000000000000FFFFU},
41 {0x00A8U, 0x000000000000FFFFU},
42 {0x00B0U, 0x000000000000FFFFU},
43 {0x00B8U, 0x000000000000FFFFU},
44 {0x00C0U, 0x000000000000FFFFU},
45 {0x00C8U, 0x000000000000FFFFU},
46 {0x00D0U, 0x000000000000FFFFU},
47 {0x00D8U, 0x000000000000FFFFU},
48 {0x00E0U, 0x001404020000FFFFU},
49 {0x00E8U, 0x000000000000FFFFU},
50 {0x00F0U, 0x000000000000FFFFU},
51 {0x00F8U, 0x000000000000FFFFU},
52 {0x0100U, 0x000000000000FFFFU},
53 {0x0108U, 0x000C04020000FFFFU},
54 {0x0110U, 0x000000000000FFFFU},
55 {0x0118U, 0x001404020000FFFFU},
56 {0x0120U, 0x000000000000FFFFU},
57 {0x0128U, 0x000000000000FFFFU},
58 {0x0130U, 0x000000000000FFFFU},
59 {0x0138U, 0x000000000000FFFFU},
60 {0x0140U, 0x000000000000FFFFU},
61 {0x0148U, 0x000000000000FFFFU},
62};
63
64static const mstat_slot_t mstat_be[] = {
65 {0x0000U, 0x00100020447FFC01U},
66 {0x0008U, 0x00100020447FFC01U},
67 {0x0010U, 0x00100040447FFC01U},
68 {0x0018U, 0x00100040447FFC01U},
69 {0x0020U, 0x0000000000000000U},
70 {0x0028U, 0x0000000000000000U},
71 {0x0030U, 0x0000000000000000U},
72 {0x0038U, 0x0000000000000000U},
73 {0x0040U, 0x0000000000000000U},
74 {0x0048U, 0x0000000000000000U},
75 {0x0050U, 0x0000000000000000U},
76 {0x0058U, 0x0000000000000000U},
77 {0x0060U, 0x0000000000000000U},
78 {0x0068U, 0x0000000000000000U},
79 {0x0070U, 0x0000000000000000U},
80 {0x0078U, 0x0000000000000000U},
81 {0x0080U, 0x0000000000000000U},
82 {0x0088U, 0x0000000000000000U},
83 {0x0090U, 0x0000000000000000U},
84 {0x0098U, 0x0000000000000000U},
85 {0x00A0U, 0x00100010447FFC01U},
86 {0x00A8U, 0x00100010447FFC01U},
87 {0x00B0U, 0x00100010447FFC01U},
88 {0x00B8U, 0x00100010447FFC01U},
89 {0x00C0U, 0x00100010447FFC01U},
90 {0x00C8U, 0x00100010447FFC01U},
91 {0x00D0U, 0x0000000000000000U},
92 {0x00D8U, 0x00100010447FFC01U},
93 {0x00E0U, 0x0000000000000000U},
94 {0x00E8U, 0x00100010447FFC01U},
95 {0x00F0U, 0x00100010447FFC01U},
96 {0x00F8U, 0x00100010447FFC01U},
97 {0x0100U, 0x00100010447FFC01U},
98 {0x0108U, 0x0000000000000000U},
99 {0x0110U, 0x00100010447FFC01U},
100 {0x0118U, 0x0000000000000000U},
101 {0x0120U, 0x00100010447FFC01U},
102 {0x0128U, 0x00100010447FFC01U},
103 {0x0130U, 0x00100010447FFC01U},
104 {0x0138U, 0x00100010447FFC01U},
105 {0x0140U, 0x00100020447FFC01U},
106 {0x0148U, 0x00100020447FFC01U},
107};
108#endif
109
110static void dbsc_setting(void)
111{
112
113 /* BUFCAM settings */
114 //DBSC_DBCAM0CNF0 not set
115 io_write_32(DBSC_DBCAM0CNF1, 0x00044218); //dbcam0cnf1
116 io_write_32(DBSC_DBCAM0CNF2, 0x000000F4); //dbcam0cnf2
117 //io_write_32(DBSC_DBCAM0CNF3, 0x00000007); //dbcam0cnf3
118 io_write_32(DBSC_DBSCHCNT0, 0x080F003F); //dbschcnt0
119 io_write_32(DBSC_DBSCHCNT1, 0x00001010); //dbschcnt0
120
121 io_write_32(DBSC_DBSCHSZ0, 0x00000001); //dbschsz0
122 io_write_32(DBSC_DBSCHRW0, 0x22421111); //dbschrw0
123 io_write_32(DBSC_DBSCHRW1, 0x00180034); //dbschrw1
124 io_write_32(DBSC_SCFCTST0,0x180B1708);
125 io_write_32(DBSC_SCFCTST1,0x0808070C);
126 io_write_32(DBSC_SCFCTST2,0x012F1123);
127
128 /* QoS Settings */
Marek Vasut92f4b352019-06-14 02:05:43 +0200129 io_write_32(DBSC_DBSCHQOS00, 0x0000F000);
130 io_write_32(DBSC_DBSCHQOS01, 0x0000E000);
131 io_write_32(DBSC_DBSCHQOS02, 0x00007000);
132 io_write_32(DBSC_DBSCHQOS03, 0x00000000);
133 //DBSC_DBSCHQOS10 not set
134 //DBSC_DBSCHQOS11 not set
135 //DBSC_DBSCHQOS12 not set
136 //DBSC_DBSCHQOS13 not set
137 //DBSC_DBSCHQOS20 not set
138 //DBSC_DBSCHQOS21 not set
139 //DBSC_DBSCHQOS22 not set
140 //DBSC_DBSCHQOS23 not set
141 //DBSC_DBSCHQOS30 not set
142 //DBSC_DBSCHQOS31 not set
143 //DBSC_DBSCHQOS32 not set
144 //DBSC_DBSCHQOS33 not set
145 io_write_32(DBSC_DBSCHQOS40, 0x0000F000);
146 io_write_32(DBSC_DBSCHQOS41, 0x0000EFFF);
147 io_write_32(DBSC_DBSCHQOS42, 0x0000B000);
148 io_write_32(DBSC_DBSCHQOS43, 0x00000000);
149 //DBSC_DBSCHQOS50 not set
150 //DBSC_DBSCHQOS51 not set
151 //DBSC_DBSCHQOS52 not set
152 //DBSC_DBSCHQOS53 not set
153 //DBSC_DBSCHQOS60 not set
154 //DBSC_DBSCHQOS61 not set
155 //DBSC_DBSCHQOS62 not set
156 //DBSC_DBSCHQOS63 not set
157 //DBSC_DBSCHQOS70 not set
158 //DBSC_DBSCHQOS71 not set
159 //DBSC_DBSCHQOS72 not set
160 //DBSC_DBSCHQOS73 not set
161 //DBSC_DBSCHQOS80 not set
162 //DBSC_DBSCHQOS81 not set
163 //DBSC_DBSCHQOS82 not set
164 //DBSC_DBSCHQOS83 not set
165 io_write_32(DBSC_DBSCHQOS90, 0x0000F000);
166 io_write_32(DBSC_DBSCHQOS91, 0x0000EFFF);
167 io_write_32(DBSC_DBSCHQOS92, 0x0000D000);
168 io_write_32(DBSC_DBSCHQOS93, 0x00000000);
169 //DBSC_DBSCHQOS100 not set
170 //DBSC_DBSCHQOS101 not set
171 //DBSC_DBSCHQOS102 not set
172 //DBSC_DBSCHQOS103 not set
173 //DBSC_DBSCHQOS110 not set
174 //DBSC_DBSCHQOS111 not set
175 //DBSC_DBSCHQOS112 not set
176 //DBSC_DBSCHQOS113 not set
177 //DBSC_DBSCHQOS120 not set
178 //DBSC_DBSCHQOS121 not set
179 //DBSC_DBSCHQOS122 not set
180 //DBSC_DBSCHQOS123 not set
181 io_write_32(DBSC_DBSCHQOS130, 0x0000F000);
182 io_write_32(DBSC_DBSCHQOS131, 0x0000EFFF);
183 io_write_32(DBSC_DBSCHQOS132, 0x0000E800);
184 io_write_32(DBSC_DBSCHQOS133, 0x00007000);
185 io_write_32(DBSC_DBSCHQOS140, 0x0000F000);
186 io_write_32(DBSC_DBSCHQOS141, 0x0000EFFF);
187 io_write_32(DBSC_DBSCHQOS142, 0x0000E800);
188 io_write_32(DBSC_DBSCHQOS143, 0x0000B000);
189 io_write_32(DBSC_DBSCHQOS150, 0x000007D0);
190 io_write_32(DBSC_DBSCHQOS151, 0x000007CF);
191 io_write_32(DBSC_DBSCHQOS152, 0x000005D0);
192 io_write_32(DBSC_DBSCHQOS153, 0x000003D0);
Valentine Barshakf2184142018-10-30 02:06:17 +0300193}
194
195void qos_init_v3m(void)
196{
197return;
198
199 dbsc_setting();
200
201#if !(RCAR_QOS_TYPE == RCAR_QOS_NONE)
202#if RCAR_QOS_TYPE == RCAR_QOS_TYPE_DEFAULT
203 NOTICE("BL2: QoS is default setting(%s)\n", RCAR_QOS_VERSION);
204#endif
205
206 /* Resource Alloc setting */
Marek Vasut92f4b352019-06-14 02:05:43 +0200207 io_write_32(QOSCTRL_RAS, 0x00000020U);
208 io_write_32(QOSCTRL_FIXTH, 0x000F0005U);
209 io_write_32(QOSCTRL_REGGD, 0x00000004U);
210 io_write_64(QOSCTRL_DANN, 0x0202020104040200U);
211 io_write_32(QOSCTRL_DANT, 0x00201008U);
212 io_write_32(QOSCTRL_EC, 0x00080001U); /* need for H3 ES1 */
213 io_write_64(QOSCTRL_EMS, 0x0000000000000000U);
214 io_write_32(QOSCTRL_INSFC, 0x63C20001U);
215 io_write_32(QOSCTRL_BERR, 0x00000000U);
Valentine Barshakf2184142018-10-30 02:06:17 +0300216
Marek Vasut92f4b352019-06-14 02:05:43 +0200217 /* QOSBW setting */
218 io_write_32(QOSCTRL_SL_INIT, 0x0305007DU);
219 io_write_32(QOSCTRL_REF_ARS, 0x00330000U);
Valentine Barshakf2184142018-10-30 02:06:17 +0300220
Marek Vasut92f4b352019-06-14 02:05:43 +0200221 /* QOSBW SRAM setting */
Valentine Barshakf2184142018-10-30 02:06:17 +0300222 {
223 uint32_t i;
224
225 for (i = 0U; i < ARRAY_SIZE(mstat_fix); i++) {
Marek Vasut92f4b352019-06-14 02:05:43 +0200226 io_write_64(QOSBW_FIX_QOS_BANK0 + mstat_fix[i].addr,
Valentine Barshakf2184142018-10-30 02:06:17 +0300227 mstat_fix[i].value);
Marek Vasut92f4b352019-06-14 02:05:43 +0200228 io_write_64(QOSBW_FIX_QOS_BANK1 + mstat_fix[i].addr,
Valentine Barshakf2184142018-10-30 02:06:17 +0300229 mstat_fix[i].value);
230 }
231 for (i = 0U; i < ARRAY_SIZE(mstat_be); i++) {
Marek Vasut92f4b352019-06-14 02:05:43 +0200232 io_write_64(QOSBW_BE_QOS_BANK0 + mstat_be[i].addr,
Valentine Barshakf2184142018-10-30 02:06:17 +0300233 mstat_be[i].value);
Marek Vasut92f4b352019-06-14 02:05:43 +0200234 io_write_64(QOSBW_BE_QOS_BANK1 + mstat_be[i].addr,
Valentine Barshakf2184142018-10-30 02:06:17 +0300235 mstat_be[i].value);
236 }
237 }
238
239 /* AXI-IF arbitration setting */
240 io_write_32(DBSC_AXARB, 0x18010000U);
241
242 /* Resource Alloc start */
Marek Vasut92f4b352019-06-14 02:05:43 +0200243 io_write_32(QOSCTRL_RAEN, 0x00000001U);
Valentine Barshakf2184142018-10-30 02:06:17 +0300244
Marek Vasut92f4b352019-06-14 02:05:43 +0200245 /* QOSBW start */
246 io_write_32(QOSCTRL_STATQC, 0x00000001U);
Valentine Barshakf2184142018-10-30 02:06:17 +0300247
248#else
249 NOTICE("BL2: QoS is None\n");
250#endif /* !(RCAR_QOS_TYPE == RCAR_QOS_NONE) */
251}