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