xref: /rk3399_ARM-atf/drivers/renesas/rcar/qos/qos_init.c (revision 44f4bb24ffe9536ba64768c34496c057d77d37c2)
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