1c67703ebSMarek Vasut /*
2c67703ebSMarek Vasut * Copyright (c) 2015-2019, Renesas Electronics Corporation. All rights reserved.
3c67703ebSMarek Vasut *
4c67703ebSMarek Vasut * SPDX-License-Identifier: BSD-3-Clause
5c67703ebSMarek Vasut */
6c67703ebSMarek Vasut
7c67703ebSMarek Vasut #include <stdint.h>
8c67703ebSMarek Vasut
9c67703ebSMarek Vasut #include <common/debug.h>
10c67703ebSMarek Vasut #include <lib/mmio.h>
11c67703ebSMarek Vasut
12c67703ebSMarek Vasut #include "qos_init.h"
13c67703ebSMarek Vasut #include "qos_common.h"
14c67703ebSMarek Vasut #include "qos_reg.h"
15*7c103d60SMarek Vasut #include "rcar_def.h"
16c67703ebSMarek Vasut #if RCAR_LSI == RCAR_AUTO
17c67703ebSMarek Vasut #include "H3/qos_init_h3_v10.h"
18c67703ebSMarek Vasut #include "H3/qos_init_h3_v11.h"
19c67703ebSMarek Vasut #include "H3/qos_init_h3_v20.h"
20c67703ebSMarek Vasut #include "H3/qos_init_h3_v30.h"
21c67703ebSMarek Vasut #include "M3/qos_init_m3_v10.h"
22c67703ebSMarek Vasut #include "M3/qos_init_m3_v11.h"
23c67703ebSMarek Vasut #include "M3/qos_init_m3_v30.h"
24c67703ebSMarek Vasut #include "M3N/qos_init_m3n_v10.h"
25c67703ebSMarek Vasut #include "V3M/qos_init_v3m.h"
26c67703ebSMarek Vasut #endif
27c67703ebSMarek Vasut #if RCAR_LSI == RCAR_H3 /* H3 */
28c67703ebSMarek Vasut #include "H3/qos_init_h3_v10.h"
29c67703ebSMarek Vasut #include "H3/qos_init_h3_v11.h"
30c67703ebSMarek Vasut #include "H3/qos_init_h3_v20.h"
31c67703ebSMarek Vasut #include "H3/qos_init_h3_v30.h"
32c67703ebSMarek Vasut #endif
33c67703ebSMarek Vasut #if RCAR_LSI == RCAR_H3N /* H3 */
34c67703ebSMarek Vasut #include "H3/qos_init_h3n_v30.h"
35c67703ebSMarek Vasut #endif
36c67703ebSMarek Vasut #if RCAR_LSI == RCAR_M3 /* M3 */
37c67703ebSMarek Vasut #include "M3/qos_init_m3_v10.h"
38c67703ebSMarek Vasut #include "M3/qos_init_m3_v11.h"
39c67703ebSMarek Vasut #include "M3/qos_init_m3_v30.h"
40c67703ebSMarek Vasut #endif
41c67703ebSMarek Vasut #if RCAR_LSI == RCAR_M3N /* M3N */
42c67703ebSMarek Vasut #include "M3N/qos_init_m3n_v10.h"
43c67703ebSMarek Vasut #endif
44c67703ebSMarek Vasut #if RCAR_LSI == RCAR_V3M /* V3M */
45c67703ebSMarek Vasut #include "V3M/qos_init_v3m.h"
46c67703ebSMarek Vasut #endif
47c67703ebSMarek Vasut #if RCAR_LSI == RCAR_E3 /* E3 */
48c67703ebSMarek Vasut #include "E3/qos_init_e3_v10.h"
49c67703ebSMarek Vasut #endif
50c67703ebSMarek Vasut #if RCAR_LSI == RCAR_D3 /* D3 */
51c67703ebSMarek Vasut #include "D3/qos_init_d3.h"
52c67703ebSMarek Vasut #endif
53c67703ebSMarek Vasut
54c67703ebSMarek Vasut #if (RCAR_LSI != RCAR_E3) && (RCAR_LSI != RCAR_D3) && (RCAR_LSI != RCAR_V3M)
55c67703ebSMarek Vasut
56c67703ebSMarek Vasut #define DRAM_CH_CNT 0x04
57c67703ebSMarek Vasut uint32_t qos_init_ddr_ch;
58c67703ebSMarek Vasut uint8_t qos_init_ddr_phyvalid;
59c67703ebSMarek Vasut #endif
60c67703ebSMarek Vasut
61c67703ebSMarek Vasut #define PRR_PRODUCT_ERR(reg) \
62c67703ebSMarek Vasut do { \
63c67703ebSMarek Vasut ERROR("LSI Product ID(PRR=0x%x) QoS " \
64c67703ebSMarek Vasut "initialize not supported.\n", reg); \
65c67703ebSMarek Vasut panic(); \
66c67703ebSMarek Vasut } while (0)
67c67703ebSMarek Vasut
68c67703ebSMarek Vasut #define PRR_CUT_ERR(reg) \
69c67703ebSMarek Vasut do { \
70c67703ebSMarek Vasut ERROR("LSI Cut ID(PRR=0x%x) QoS " \
71c67703ebSMarek Vasut "initialize not supported.\n", reg); \
72c67703ebSMarek Vasut panic(); \
73c67703ebSMarek Vasut } while (0)
74c67703ebSMarek Vasut
rcar_qos_init(void)75c67703ebSMarek Vasut void rcar_qos_init(void)
76c67703ebSMarek Vasut {
77c67703ebSMarek Vasut uint32_t reg;
78c67703ebSMarek Vasut #if (RCAR_LSI != RCAR_E3) && (RCAR_LSI != RCAR_D3) && (RCAR_LSI != RCAR_V3M)
79c67703ebSMarek Vasut uint32_t i;
80c67703ebSMarek Vasut
81c67703ebSMarek Vasut qos_init_ddr_ch = 0;
82c67703ebSMarek Vasut qos_init_ddr_phyvalid = get_boardcnf_phyvalid();
83c67703ebSMarek Vasut for (i = 0; i < DRAM_CH_CNT; i++) {
84c67703ebSMarek Vasut if ((qos_init_ddr_phyvalid & (1 << i))) {
85c67703ebSMarek Vasut qos_init_ddr_ch++;
86c67703ebSMarek Vasut }
87c67703ebSMarek Vasut }
88c67703ebSMarek Vasut #endif
89c67703ebSMarek Vasut
90c67703ebSMarek Vasut reg = mmio_read_32(PRR);
91c67703ebSMarek Vasut #if (RCAR_LSI == RCAR_AUTO) || RCAR_LSI_CUT_COMPAT
92c67703ebSMarek Vasut switch (reg & PRR_PRODUCT_MASK) {
93c67703ebSMarek Vasut case PRR_PRODUCT_H3:
94c67703ebSMarek Vasut #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_H3)
95c67703ebSMarek Vasut switch (reg & PRR_CUT_MASK) {
96c67703ebSMarek Vasut case PRR_PRODUCT_10:
97c67703ebSMarek Vasut qos_init_h3_v10();
98c67703ebSMarek Vasut break;
99c67703ebSMarek Vasut case PRR_PRODUCT_11:
100c67703ebSMarek Vasut qos_init_h3_v11();
101c67703ebSMarek Vasut break;
102c67703ebSMarek Vasut case PRR_PRODUCT_20:
103c67703ebSMarek Vasut qos_init_h3_v20();
104c67703ebSMarek Vasut break;
105c67703ebSMarek Vasut case PRR_PRODUCT_30:
106c67703ebSMarek Vasut default:
107c67703ebSMarek Vasut qos_init_h3_v30();
108c67703ebSMarek Vasut break;
109c67703ebSMarek Vasut }
110c67703ebSMarek Vasut #elif (RCAR_LSI == RCAR_H3N)
111c67703ebSMarek Vasut switch (reg & PRR_CUT_MASK) {
112c67703ebSMarek Vasut case PRR_PRODUCT_30:
113c67703ebSMarek Vasut default:
114c67703ebSMarek Vasut qos_init_h3n_v30();
115c67703ebSMarek Vasut break;
116c67703ebSMarek Vasut }
117c67703ebSMarek Vasut #else
118c67703ebSMarek Vasut PRR_PRODUCT_ERR(reg);
119c67703ebSMarek Vasut #endif
120c67703ebSMarek Vasut break;
121c67703ebSMarek Vasut case PRR_PRODUCT_M3:
122c67703ebSMarek Vasut #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_M3)
123c67703ebSMarek Vasut switch (reg & PRR_CUT_MASK) {
124c67703ebSMarek Vasut case PRR_PRODUCT_10:
125c67703ebSMarek Vasut qos_init_m3_v10();
126c67703ebSMarek Vasut break;
127c67703ebSMarek Vasut case PRR_PRODUCT_21: /* M3 Cut 13 */
128c67703ebSMarek Vasut qos_init_m3_v11();
129c67703ebSMarek Vasut break;
130c67703ebSMarek Vasut case PRR_PRODUCT_30: /* M3 Cut 30 */
131c67703ebSMarek Vasut default:
132c67703ebSMarek Vasut qos_init_m3_v30();
133c67703ebSMarek Vasut break;
134c67703ebSMarek Vasut }
135c67703ebSMarek Vasut #else
136c67703ebSMarek Vasut PRR_PRODUCT_ERR(reg);
137c67703ebSMarek Vasut #endif
138c67703ebSMarek Vasut break;
139c67703ebSMarek Vasut case PRR_PRODUCT_M3N:
140c67703ebSMarek Vasut #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_M3N)
141c67703ebSMarek Vasut switch (reg & PRR_CUT_MASK) {
142c67703ebSMarek Vasut case PRR_PRODUCT_10:
143c67703ebSMarek Vasut default:
144c67703ebSMarek Vasut qos_init_m3n_v10();
145c67703ebSMarek Vasut break;
146c67703ebSMarek Vasut }
147c67703ebSMarek Vasut #else
148c67703ebSMarek Vasut PRR_PRODUCT_ERR(reg);
149c67703ebSMarek Vasut #endif
150c67703ebSMarek Vasut break;
151c67703ebSMarek Vasut case PRR_PRODUCT_V3M:
152c67703ebSMarek Vasut #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_V3M)
153c67703ebSMarek Vasut switch (reg & PRR_CUT_MASK) {
154c67703ebSMarek Vasut case PRR_PRODUCT_10:
155c67703ebSMarek Vasut case PRR_PRODUCT_20:
156c67703ebSMarek Vasut default:
157c67703ebSMarek Vasut qos_init_v3m();
158c67703ebSMarek Vasut break;
159c67703ebSMarek Vasut }
160c67703ebSMarek Vasut #else
161c67703ebSMarek Vasut PRR_PRODUCT_ERR(reg);
162c67703ebSMarek Vasut #endif
163c67703ebSMarek Vasut break;
164c67703ebSMarek Vasut case PRR_PRODUCT_E3:
165c67703ebSMarek Vasut #if (RCAR_LSI == RCAR_E3)
166c67703ebSMarek Vasut switch (reg & PRR_CUT_MASK) {
167c67703ebSMarek Vasut case PRR_PRODUCT_10:
168c67703ebSMarek Vasut default:
169c67703ebSMarek Vasut qos_init_e3_v10();
170c67703ebSMarek Vasut break;
171c67703ebSMarek Vasut }
172c67703ebSMarek Vasut #else
173c67703ebSMarek Vasut PRR_PRODUCT_ERR(reg);
174c67703ebSMarek Vasut #endif
175c67703ebSMarek Vasut break;
176c67703ebSMarek Vasut case PRR_PRODUCT_D3:
177c67703ebSMarek Vasut #if (RCAR_LSI == RCAR_D3)
178c67703ebSMarek Vasut switch (reg & PRR_CUT_MASK) {
179c67703ebSMarek Vasut case PRR_PRODUCT_10:
180c67703ebSMarek Vasut default:
181c67703ebSMarek Vasut qos_init_d3();
182c67703ebSMarek Vasut break;
183c67703ebSMarek Vasut }
184c67703ebSMarek Vasut #else
185c67703ebSMarek Vasut PRR_PRODUCT_ERR(reg);
186c67703ebSMarek Vasut #endif
187c67703ebSMarek Vasut break;
188c67703ebSMarek Vasut default:
189c67703ebSMarek Vasut PRR_PRODUCT_ERR(reg);
190c67703ebSMarek Vasut break;
191c67703ebSMarek Vasut }
192c67703ebSMarek Vasut #else
193c67703ebSMarek Vasut #if RCAR_LSI == RCAR_H3 /* H3 */
194c67703ebSMarek Vasut #if RCAR_LSI_CUT == RCAR_CUT_10
195c67703ebSMarek Vasut /* H3 Cut 10 */
196c67703ebSMarek Vasut if ((PRR_PRODUCT_H3 | PRR_PRODUCT_10)
197c67703ebSMarek Vasut != (reg & (PRR_PRODUCT_MASK | PRR_CUT_MASK))) {
198c67703ebSMarek Vasut PRR_PRODUCT_ERR(reg);
199c67703ebSMarek Vasut }
200c67703ebSMarek Vasut qos_init_h3_v10();
201c67703ebSMarek Vasut #elif RCAR_LSI_CUT == RCAR_CUT_11
202c67703ebSMarek Vasut /* H3 Cut 11 */
203c67703ebSMarek Vasut if ((PRR_PRODUCT_H3 | PRR_PRODUCT_11)
204c67703ebSMarek Vasut != (reg & (PRR_PRODUCT_MASK | PRR_CUT_MASK))) {
205c67703ebSMarek Vasut PRR_PRODUCT_ERR(reg);
206c67703ebSMarek Vasut }
207c67703ebSMarek Vasut qos_init_h3_v11();
208c67703ebSMarek Vasut #elif RCAR_LSI_CUT == RCAR_CUT_20
209c67703ebSMarek Vasut /* H3 Cut 20 */
210c67703ebSMarek Vasut if ((PRR_PRODUCT_H3 | PRR_PRODUCT_20)
211c67703ebSMarek Vasut != (reg & (PRR_PRODUCT_MASK | PRR_CUT_MASK))) {
212c67703ebSMarek Vasut PRR_PRODUCT_ERR(reg);
213c67703ebSMarek Vasut }
214c67703ebSMarek Vasut qos_init_h3_v20();
215c67703ebSMarek Vasut #else
216c67703ebSMarek Vasut /* H3 Cut 30 or later */
217c67703ebSMarek Vasut if ((PRR_PRODUCT_H3)
218c67703ebSMarek Vasut != (reg & (PRR_PRODUCT_MASK))) {
219c67703ebSMarek Vasut PRR_PRODUCT_ERR(reg);
220c67703ebSMarek Vasut }
221c67703ebSMarek Vasut qos_init_h3_v30();
222c67703ebSMarek Vasut #endif
223c67703ebSMarek Vasut #elif RCAR_LSI == RCAR_H3N /* H3 */
224c67703ebSMarek Vasut /* H3N Cut 30 or later */
225c67703ebSMarek Vasut if ((PRR_PRODUCT_H3)
226c67703ebSMarek Vasut != (reg & (PRR_PRODUCT_MASK))) {
227c67703ebSMarek Vasut PRR_PRODUCT_ERR(reg);
228c67703ebSMarek Vasut }
229c67703ebSMarek Vasut qos_init_h3n_v30();
230c67703ebSMarek Vasut #elif RCAR_LSI == RCAR_M3 /* M3 */
231c67703ebSMarek Vasut #if RCAR_LSI_CUT == RCAR_CUT_10
232c67703ebSMarek Vasut /* M3 Cut 10 */
233c67703ebSMarek Vasut if ((PRR_PRODUCT_M3 | PRR_PRODUCT_10)
234c67703ebSMarek Vasut != (reg & (PRR_PRODUCT_MASK | PRR_CUT_MASK))) {
235c67703ebSMarek Vasut PRR_PRODUCT_ERR(reg);
236c67703ebSMarek Vasut }
237c67703ebSMarek Vasut qos_init_m3_v10();
238c67703ebSMarek Vasut #elif RCAR_LSI_CUT == RCAR_CUT_11
239c67703ebSMarek Vasut /* M3 Cut 11 */
240c67703ebSMarek Vasut if ((PRR_PRODUCT_M3 | PRR_PRODUCT_20)
241c67703ebSMarek Vasut != (reg & (PRR_PRODUCT_MASK | PRR_CUT_MASK))) {
242c67703ebSMarek Vasut PRR_PRODUCT_ERR(reg);
243c67703ebSMarek Vasut }
244c67703ebSMarek Vasut qos_init_m3_v11();
245c67703ebSMarek Vasut #elif RCAR_LSI_CUT == RCAR_CUT_13
246c67703ebSMarek Vasut /* M3 Cut 13 */
247c67703ebSMarek Vasut if ((PRR_PRODUCT_M3 | PRR_PRODUCT_21)
248c67703ebSMarek Vasut != (reg & (PRR_PRODUCT_MASK | PRR_CUT_MASK))) {
249c67703ebSMarek Vasut PRR_PRODUCT_ERR(reg);
250c67703ebSMarek Vasut }
251c67703ebSMarek Vasut qos_init_m3_v11();
252c67703ebSMarek Vasut #else
253c67703ebSMarek Vasut /* M3 Cut 30 or later */
254c67703ebSMarek Vasut if ((PRR_PRODUCT_M3)
255c67703ebSMarek Vasut != (reg & (PRR_PRODUCT_MASK))) {
256c67703ebSMarek Vasut PRR_PRODUCT_ERR(reg);
257c67703ebSMarek Vasut }
258c67703ebSMarek Vasut qos_init_m3_v30();
259c67703ebSMarek Vasut #endif
260c67703ebSMarek Vasut #elif RCAR_LSI == RCAR_M3N /* M3N */
261c67703ebSMarek Vasut /* M3N Cut 10 or later */
262c67703ebSMarek Vasut if ((PRR_PRODUCT_M3N)
263c67703ebSMarek Vasut != (reg & (PRR_PRODUCT_MASK))) {
264c67703ebSMarek Vasut PRR_PRODUCT_ERR(reg);
265c67703ebSMarek Vasut }
266c67703ebSMarek Vasut qos_init_m3n_v10();
267c67703ebSMarek Vasut #elif RCAR_LSI == RCAR_V3M /* V3M */
268c67703ebSMarek Vasut /* V3M Cut 10 or later */
269c67703ebSMarek Vasut if ((PRR_PRODUCT_V3M)
270c67703ebSMarek Vasut != (reg & (PRR_PRODUCT_MASK))) {
271c67703ebSMarek Vasut PRR_PRODUCT_ERR(reg);
272c67703ebSMarek Vasut }
273c67703ebSMarek Vasut qos_init_v3m();
274c67703ebSMarek Vasut #elif RCAR_LSI == RCAR_D3 /* D3 */
275c67703ebSMarek Vasut /* D3 Cut 10 or later */
276c67703ebSMarek Vasut if ((PRR_PRODUCT_D3)
277c67703ebSMarek Vasut != (reg & (PRR_PRODUCT_MASK))) {
278c67703ebSMarek Vasut PRR_PRODUCT_ERR(reg);
279c67703ebSMarek Vasut }
280c67703ebSMarek Vasut qos_init_d3();
281c67703ebSMarek Vasut #elif RCAR_LSI == RCAR_E3 /* E3 */
282c67703ebSMarek Vasut /* E3 Cut 10 or later */
283c67703ebSMarek Vasut if ((PRR_PRODUCT_E3)
284c67703ebSMarek Vasut != (reg & (PRR_PRODUCT_MASK))) {
285c67703ebSMarek Vasut PRR_PRODUCT_ERR(reg);
286c67703ebSMarek Vasut }
287c67703ebSMarek Vasut qos_init_e3_v10();
288c67703ebSMarek Vasut #else
289c67703ebSMarek Vasut #error "Don't have QoS initialize routine(Unknown chip)."
290c67703ebSMarek Vasut #endif
291c67703ebSMarek Vasut #endif
292c67703ebSMarek Vasut }
293c67703ebSMarek Vasut
294c67703ebSMarek Vasut #if (RCAR_LSI != RCAR_E3) && (RCAR_LSI != RCAR_D3) && (RCAR_LSI != RCAR_V3M)
get_refperiod(void)295c67703ebSMarek Vasut uint32_t get_refperiod(void)
296c67703ebSMarek Vasut {
297c67703ebSMarek Vasut uint32_t refperiod = QOSWT_WTSET0_CYCLE;
298c67703ebSMarek Vasut
299c67703ebSMarek Vasut #if (RCAR_LSI == RCAR_AUTO) || RCAR_LSI_CUT_COMPAT
300c67703ebSMarek Vasut uint32_t reg;
301c67703ebSMarek Vasut
302c67703ebSMarek Vasut reg = mmio_read_32(PRR);
303c67703ebSMarek Vasut switch (reg & PRR_PRODUCT_MASK) {
304c67703ebSMarek Vasut #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_H3)
305c67703ebSMarek Vasut case PRR_PRODUCT_H3:
306c67703ebSMarek Vasut switch (reg & PRR_CUT_MASK) {
307c67703ebSMarek Vasut case PRR_PRODUCT_10:
308c67703ebSMarek Vasut case PRR_PRODUCT_11:
309c67703ebSMarek Vasut break;
310c67703ebSMarek Vasut case PRR_PRODUCT_20:
311c67703ebSMarek Vasut case PRR_PRODUCT_30:
312c67703ebSMarek Vasut default:
313c67703ebSMarek Vasut refperiod = REFPERIOD_CYCLE;
314c67703ebSMarek Vasut break;
315c67703ebSMarek Vasut }
316c67703ebSMarek Vasut break;
317c67703ebSMarek Vasut #elif (RCAR_LSI == RCAR_H3N)
318c67703ebSMarek Vasut case PRR_PRODUCT_H3:
319c67703ebSMarek Vasut switch (reg & PRR_CUT_MASK) {
320c67703ebSMarek Vasut case PRR_PRODUCT_30:
321c67703ebSMarek Vasut default:
322c67703ebSMarek Vasut refperiod = REFPERIOD_CYCLE;
323c67703ebSMarek Vasut break;
324c67703ebSMarek Vasut }
325c67703ebSMarek Vasut break;
326c67703ebSMarek Vasut #endif
327c67703ebSMarek Vasut #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_M3)
328c67703ebSMarek Vasut case PRR_PRODUCT_M3:
329c67703ebSMarek Vasut switch (reg & PRR_CUT_MASK) {
330c67703ebSMarek Vasut case PRR_PRODUCT_10:
331c67703ebSMarek Vasut break;
332c67703ebSMarek Vasut case PRR_PRODUCT_20: /* M3 Cut 11 */
333c67703ebSMarek Vasut case PRR_PRODUCT_21: /* M3 Cut 13 */
334c67703ebSMarek Vasut case PRR_PRODUCT_30: /* M3 Cut 30 */
335c67703ebSMarek Vasut default:
336c67703ebSMarek Vasut refperiod = REFPERIOD_CYCLE;
337c67703ebSMarek Vasut break;
338c67703ebSMarek Vasut }
339c67703ebSMarek Vasut break;
340c67703ebSMarek Vasut #endif
341c67703ebSMarek Vasut #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_M3N)
342c67703ebSMarek Vasut case PRR_PRODUCT_M3N:
343c67703ebSMarek Vasut refperiod = REFPERIOD_CYCLE;
344c67703ebSMarek Vasut break;
345c67703ebSMarek Vasut #endif
346c67703ebSMarek Vasut default:
347c67703ebSMarek Vasut break;
348c67703ebSMarek Vasut }
349c67703ebSMarek Vasut #elif RCAR_LSI == RCAR_H3
350c67703ebSMarek Vasut #if RCAR_LSI_CUT == RCAR_CUT_10
351c67703ebSMarek Vasut /* H3 Cut 10 */
352c67703ebSMarek Vasut #elif RCAR_LSI_CUT == RCAR_CUT_11
353c67703ebSMarek Vasut /* H3 Cut 11 */
354c67703ebSMarek Vasut #else
355c67703ebSMarek Vasut /* H3 Cut 20 */
356c67703ebSMarek Vasut /* H3 Cut 30 or later */
357c67703ebSMarek Vasut refperiod = REFPERIOD_CYCLE;
358c67703ebSMarek Vasut #endif
359c67703ebSMarek Vasut #elif RCAR_LSI == RCAR_H3N
360c67703ebSMarek Vasut /* H3N Cut 30 or later */
361c67703ebSMarek Vasut refperiod = REFPERIOD_CYCLE;
362c67703ebSMarek Vasut #elif RCAR_LSI == RCAR_M3
363c67703ebSMarek Vasut #if RCAR_LSI_CUT == RCAR_CUT_10
364c67703ebSMarek Vasut /* M3 Cut 10 */
365c67703ebSMarek Vasut #else
366c67703ebSMarek Vasut /* M3 Cut 11 */
367c67703ebSMarek Vasut /* M3 Cut 13 */
368c67703ebSMarek Vasut /* M3 Cut 30 or later */
369c67703ebSMarek Vasut refperiod = REFPERIOD_CYCLE;
370c67703ebSMarek Vasut #endif
371c67703ebSMarek Vasut #elif RCAR_LSI == RCAR_M3N /* for M3N */
372c67703ebSMarek Vasut refperiod = REFPERIOD_CYCLE;
373c67703ebSMarek Vasut #endif
374c67703ebSMarek Vasut
375c67703ebSMarek Vasut return refperiod;
376c67703ebSMarek Vasut }
377c67703ebSMarek Vasut #endif
378c67703ebSMarek Vasut
rcar_qos_dbsc_setting(struct rcar_gen3_dbsc_qos_settings * qos,unsigned int qos_size,bool dbsc_wren)379c67703ebSMarek Vasut void rcar_qos_dbsc_setting(struct rcar_gen3_dbsc_qos_settings *qos,
380c67703ebSMarek Vasut unsigned int qos_size, bool dbsc_wren)
381c67703ebSMarek Vasut {
382c67703ebSMarek Vasut int i;
383c67703ebSMarek Vasut
384c67703ebSMarek Vasut /* Register write enable */
385c67703ebSMarek Vasut if (dbsc_wren)
386c67703ebSMarek Vasut io_write_32(DBSC_DBSYSCNT0, 0x00001234U);
387c67703ebSMarek Vasut
388c67703ebSMarek Vasut for (i = 0; i < qos_size; i++)
389c67703ebSMarek Vasut io_write_32(qos[i].reg, qos[i].val);
390c67703ebSMarek Vasut
391c67703ebSMarek Vasut /* Register write protect */
392c67703ebSMarek Vasut if (dbsc_wren)
393c67703ebSMarek Vasut io_write_32(DBSC_DBSYSCNT0, 0x00000000U);
394c67703ebSMarek Vasut }
395