xref: /arm-trusted-firmware/drivers/renesas/rcar/qos/qos_common.h (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu /*
2*91f16700Schasinglulu  * Copyright (c) 2017-2019, Renesas Electronics Corporation. All rights reserved.
3*91f16700Schasinglulu  *
4*91f16700Schasinglulu  * SPDX-License-Identifier: BSD-3-Clause
5*91f16700Schasinglulu  */
6*91f16700Schasinglulu 
7*91f16700Schasinglulu #ifndef QOS_COMMON_H
8*91f16700Schasinglulu #define QOS_COMMON_H
9*91f16700Schasinglulu 
10*91f16700Schasinglulu #define RCAR_REF_DEFAULT		0U
11*91f16700Schasinglulu 
12*91f16700Schasinglulu /* define used for get_refperiod. */
13*91f16700Schasinglulu /* REFPERIOD_CYCLE need smaller than QOSWT_WTSET0_CYCLEs */
14*91f16700Schasinglulu /* refere to plat/renesas/rcar/ddr/ddr_a/ddr_init_e3.h for E3. */
15*91f16700Schasinglulu #if (RCAR_REF_INT == RCAR_REF_DEFAULT)	/* REF default */
16*91f16700Schasinglulu #define REFPERIOD_CYCLE		/* unit:ns */	\
17*91f16700Schasinglulu 	((126 * BASE_SUB_SLOT_NUM * 1000U) / 400)
18*91f16700Schasinglulu #else					/* REF option */
19*91f16700Schasinglulu #define REFPERIOD_CYCLE		/* unit:ns */	\
20*91f16700Schasinglulu 	((252 * BASE_SUB_SLOT_NUM * 1000U) / 400)
21*91f16700Schasinglulu #endif
22*91f16700Schasinglulu 
23*91f16700Schasinglulu #if (RCAR_LSI == RCAR_E3)
24*91f16700Schasinglulu /* define used for E3 */
25*91f16700Schasinglulu #if (RCAR_REF_INT == RCAR_REF_DEFAULT)	/* REF 3.9usec */
26*91f16700Schasinglulu #define SUB_SLOT_CYCLE_E3		0xAFU	/* 175 */
27*91f16700Schasinglulu #else /* REF 7.8usec */
28*91f16700Schasinglulu #define SUB_SLOT_CYCLE_E3		0x15EU	/* 350 */
29*91f16700Schasinglulu #endif /* (RCAR_REF_INT == RCAR_REF_DEFAULT) */
30*91f16700Schasinglulu 
31*91f16700Schasinglulu #define OPERATING_FREQ_E3		266U	/* MHz */
32*91f16700Schasinglulu #define SL_INIT_SSLOTCLK_E3		(SUB_SLOT_CYCLE_E3 - 1U)
33*91f16700Schasinglulu #endif
34*91f16700Schasinglulu 
35*91f16700Schasinglulu #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_M3N)
36*91f16700Schasinglulu /* define used for M3N */
37*91f16700Schasinglulu #if (RCAR_REF_INT == RCAR_REF_DEFAULT)	/* REF 1.95usec */
38*91f16700Schasinglulu #define SUB_SLOT_CYCLE_M3N		0x7EU	/* 126 */
39*91f16700Schasinglulu #else /* REF 3.9usec */
40*91f16700Schasinglulu #define SUB_SLOT_CYCLE_M3N		0xFCU	/* 252 */
41*91f16700Schasinglulu #endif /* (RCAR_REF_INT == RCAR_REF_DEFAULT) */
42*91f16700Schasinglulu 
43*91f16700Schasinglulu #define SL_INIT_SSLOTCLK_M3N		(SUB_SLOT_CYCLE_M3N - 1U)
44*91f16700Schasinglulu #define QOSWT_WTSET0_CYCLE_M3N		/* unit:ns */	\
45*91f16700Schasinglulu 	((SUB_SLOT_CYCLE_M3N * BASE_SUB_SLOT_NUM * 1000U) / OPERATING_FREQ)
46*91f16700Schasinglulu #endif
47*91f16700Schasinglulu 
48*91f16700Schasinglulu #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_H3)
49*91f16700Schasinglulu /* define used for H3 */
50*91f16700Schasinglulu #if (RCAR_REF_INT == RCAR_REF_DEFAULT)	/* REF 1.95usec */
51*91f16700Schasinglulu #define SUB_SLOT_CYCLE_H3_20		0x7EU	/* 126 */
52*91f16700Schasinglulu #else /* REF 3.9usec */
53*91f16700Schasinglulu #define SUB_SLOT_CYCLE_H3_20		0xFCU	/* 252 */
54*91f16700Schasinglulu #endif /* (RCAR_REF_INT == RCAR_REF_DEFAULT) */
55*91f16700Schasinglulu 
56*91f16700Schasinglulu #define SL_INIT_SSLOTCLK_H3_20		(SUB_SLOT_CYCLE_H3_20 - 1U)
57*91f16700Schasinglulu #define QOSWT_WTSET0_CYCLE_H3_20	/* unit:ns */	\
58*91f16700Schasinglulu 	((SUB_SLOT_CYCLE_H3_20 * BASE_SUB_SLOT_NUM * 1000U) / OPERATING_FREQ)
59*91f16700Schasinglulu 
60*91f16700Schasinglulu /* define used for H3 Cut 30 */
61*91f16700Schasinglulu #define SUB_SLOT_CYCLE_H3_30		(SUB_SLOT_CYCLE_H3_20)	/* same as H3 Cut 20 */
62*91f16700Schasinglulu #define SL_INIT_SSLOTCLK_H3_30		(SUB_SLOT_CYCLE_H3_30 - 1U)
63*91f16700Schasinglulu #define QOSWT_WTSET0_CYCLE_H3_30	/* unit:ns */	\
64*91f16700Schasinglulu 	((SUB_SLOT_CYCLE_H3_30 * BASE_SUB_SLOT_NUM * 1000U) / OPERATING_FREQ)
65*91f16700Schasinglulu 
66*91f16700Schasinglulu #endif
67*91f16700Schasinglulu 
68*91f16700Schasinglulu #if (RCAR_LSI == RCAR_H3N)
69*91f16700Schasinglulu /* define used for H3N */
70*91f16700Schasinglulu #if (RCAR_REF_INT == RCAR_REF_DEFAULT)	/* REF 1.95usec */
71*91f16700Schasinglulu #define SUB_SLOT_CYCLE_H3N		0x7EU	/* 126 */
72*91f16700Schasinglulu #else /* REF 3.9usec */
73*91f16700Schasinglulu #define SUB_SLOT_CYCLE_H3N		0xFCU	/* 252 */
74*91f16700Schasinglulu #endif /* (RCAR_REF_INT == RCAR_REF_DEFAULT) */
75*91f16700Schasinglulu 
76*91f16700Schasinglulu #define SL_INIT_SSLOTCLK_H3N		(SUB_SLOT_CYCLE_H3N - 1U)
77*91f16700Schasinglulu #define QOSWT_WTSET0_CYCLE_H3N		/* unit:ns */	\
78*91f16700Schasinglulu 	((SUB_SLOT_CYCLE_H3N * BASE_SUB_SLOT_NUM * 1000U) / OPERATING_FREQ)
79*91f16700Schasinglulu 
80*91f16700Schasinglulu #endif
81*91f16700Schasinglulu 
82*91f16700Schasinglulu #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RCAR_M3)
83*91f16700Schasinglulu /* define used for M3 */
84*91f16700Schasinglulu #if (RCAR_REF_INT == RCAR_REF_DEFAULT)	/* REF 1.95usec */
85*91f16700Schasinglulu #define SUB_SLOT_CYCLE_M3_11		0x7EU	/* 126 */
86*91f16700Schasinglulu #define SUB_SLOT_CYCLE_M3_30		0x7EU	/* 126 */
87*91f16700Schasinglulu #else /* REF 3.9usec */
88*91f16700Schasinglulu #define SUB_SLOT_CYCLE_M3_11		0xFCU	/* 252 */
89*91f16700Schasinglulu #define SUB_SLOT_CYCLE_M3_30		0xFCU	/* 252 */
90*91f16700Schasinglulu #endif /* (RCAR_REF_INT == RCAR_REF_DEFAULT) */
91*91f16700Schasinglulu 
92*91f16700Schasinglulu #define SL_INIT_SSLOTCLK_M3_11		(SUB_SLOT_CYCLE_M3_11 - 1U)
93*91f16700Schasinglulu #define SL_INIT_SSLOTCLK_M3_30		(SUB_SLOT_CYCLE_M3_30 - 1U)
94*91f16700Schasinglulu #define QOSWT_WTSET0_CYCLE_M3_11	/* unit:ns */	\
95*91f16700Schasinglulu 	((SUB_SLOT_CYCLE_M3_11 * BASE_SUB_SLOT_NUM * 1000U) / OPERATING_FREQ)
96*91f16700Schasinglulu #define QOSWT_WTSET0_CYCLE_M3_30	/* unit:ns */	\
97*91f16700Schasinglulu 	((SUB_SLOT_CYCLE_M3_30 * BASE_SUB_SLOT_NUM * 1000U) / OPERATING_FREQ)
98*91f16700Schasinglulu #endif
99*91f16700Schasinglulu 
100*91f16700Schasinglulu #define OPERATING_FREQ			400U	/* MHz */
101*91f16700Schasinglulu #define BASE_SUB_SLOT_NUM		0x6U
102*91f16700Schasinglulu #define SUB_SLOT_CYCLE			0x7EU	/* 126 */
103*91f16700Schasinglulu 
104*91f16700Schasinglulu #define QOSWT_WTSET0_CYCLE		/* unit:ns */	\
105*91f16700Schasinglulu 	((SUB_SLOT_CYCLE * BASE_SUB_SLOT_NUM * 1000U) / OPERATING_FREQ)
106*91f16700Schasinglulu 
107*91f16700Schasinglulu #define SL_INIT_REFFSSLOT		(0x3U << 24U)
108*91f16700Schasinglulu #define SL_INIT_SLOTSSLOT		((BASE_SUB_SLOT_NUM - 1U) << 16U)
109*91f16700Schasinglulu #define SL_INIT_SSLOTCLK		(SUB_SLOT_CYCLE - 1U)
110*91f16700Schasinglulu 
111*91f16700Schasinglulu static inline void io_write_32(uintptr_t addr, uint32_t value)
112*91f16700Schasinglulu {
113*91f16700Schasinglulu 	*(volatile uint32_t *)addr = value;
114*91f16700Schasinglulu }
115*91f16700Schasinglulu 
116*91f16700Schasinglulu static inline uint32_t io_read_32(uintptr_t addr)
117*91f16700Schasinglulu {
118*91f16700Schasinglulu 	return *(volatile uint32_t *)addr;
119*91f16700Schasinglulu }
120*91f16700Schasinglulu 
121*91f16700Schasinglulu static inline void io_write_64(uintptr_t addr, uint64_t value)
122*91f16700Schasinglulu {
123*91f16700Schasinglulu 	*(volatile uint64_t *)addr = value;
124*91f16700Schasinglulu }
125*91f16700Schasinglulu 
126*91f16700Schasinglulu typedef struct {
127*91f16700Schasinglulu 	uintptr_t addr;
128*91f16700Schasinglulu 	uint64_t value;
129*91f16700Schasinglulu } mstat_slot_t;
130*91f16700Schasinglulu 
131*91f16700Schasinglulu struct rcar_gen3_dbsc_qos_settings {
132*91f16700Schasinglulu 	uint32_t	reg;
133*91f16700Schasinglulu 	uint32_t	val;
134*91f16700Schasinglulu };
135*91f16700Schasinglulu 
136*91f16700Schasinglulu extern uint32_t qos_init_ddr_ch;
137*91f16700Schasinglulu extern uint8_t qos_init_ddr_phyvalid;
138*91f16700Schasinglulu 
139*91f16700Schasinglulu void rcar_qos_dbsc_setting(struct rcar_gen3_dbsc_qos_settings *qos,
140*91f16700Schasinglulu 			   unsigned int qos_size, bool dbsc_wren);
141*91f16700Schasinglulu 
142*91f16700Schasinglulu #endif /* QOS_COMMON_H */
143