xref: /arm-trusted-firmware/drivers/renesas/rzg/qos/qos_common.h (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu /*
2*91f16700Schasinglulu  * Copyright (c) 2021, 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 #if (RCAR_REF_INT == RCAR_REF_DEFAULT)	/* REF default */
15*91f16700Schasinglulu #define REFPERIOD_CYCLE		/* unit:ns */	\
16*91f16700Schasinglulu 	((126U * BASE_SUB_SLOT_NUM * 1000U) / 400U)
17*91f16700Schasinglulu #else					/* REF option */
18*91f16700Schasinglulu #define REFPERIOD_CYCLE		/* unit:ns */	\
19*91f16700Schasinglulu 	((252U * BASE_SUB_SLOT_NUM * 1000U) / 400U)
20*91f16700Schasinglulu #endif
21*91f16700Schasinglulu 
22*91f16700Schasinglulu #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RZ_G2M)
23*91f16700Schasinglulu /* define used for G2M */
24*91f16700Schasinglulu #if (RCAR_REF_INT == RCAR_REF_DEFAULT)	/* REF 1.95usec */
25*91f16700Schasinglulu #define SUB_SLOT_CYCLE_G2M_11		0x7EU	/* 126 */
26*91f16700Schasinglulu #define SUB_SLOT_CYCLE_G2M_30		0x7EU	/* 126 */
27*91f16700Schasinglulu #else /* REF 3.9usec */
28*91f16700Schasinglulu #define SUB_SLOT_CYCLE_G2M_11		0xFCU	/* 252 */
29*91f16700Schasinglulu #define SUB_SLOT_CYCLE_G2M_30		0xFCU	/* 252 */
30*91f16700Schasinglulu #endif /* (RCAR_REF_INT == RCAR_REF_DEFAULT) */
31*91f16700Schasinglulu 
32*91f16700Schasinglulu #define SL_INIT_SSLOTCLK_G2M_11		(SUB_SLOT_CYCLE_G2M_11 - 1U)
33*91f16700Schasinglulu #define SL_INIT_SSLOTCLK_G2M_30		(SUB_SLOT_CYCLE_G2M_30 - 1U)
34*91f16700Schasinglulu #define QOSWT_WTSET0_CYCLE_G2M_11	/* unit:ns */	\
35*91f16700Schasinglulu 	((SUB_SLOT_CYCLE_G2M_11 * BASE_SUB_SLOT_NUM * 1000U) / OPERATING_FREQ)
36*91f16700Schasinglulu #define QOSWT_WTSET0_CYCLE_G2M_30	/* unit:ns */	\
37*91f16700Schasinglulu 	((SUB_SLOT_CYCLE_G2M_30 * BASE_SUB_SLOT_NUM * 1000U) / OPERATING_FREQ)
38*91f16700Schasinglulu #endif
39*91f16700Schasinglulu 
40*91f16700Schasinglulu #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RZ_G2N)
41*91f16700Schasinglulu /* define used for G2N */
42*91f16700Schasinglulu #if (RCAR_REF_INT == RCAR_REF_DEFAULT)	/* REF 1.95usec */
43*91f16700Schasinglulu #define SUB_SLOT_CYCLE_G2N		0x7EU	/* 126 */
44*91f16700Schasinglulu #else /* REF 3.9usec */
45*91f16700Schasinglulu #define SUB_SLOT_CYCLE_G2N		0xFCU	/* 252 */
46*91f16700Schasinglulu #endif /* (RCAR_REF_INT == RCAR_REF_DEFAULT) */
47*91f16700Schasinglulu 
48*91f16700Schasinglulu #define SL_INIT_SSLOTCLK_G2N		(SUB_SLOT_CYCLE_G2N - 1U)
49*91f16700Schasinglulu #define QOSWT_WTSET0_CYCLE_G2N		/* unit:ns */	\
50*91f16700Schasinglulu 	((SUB_SLOT_CYCLE_G2N * BASE_SUB_SLOT_NUM * 1000U) / OPERATING_FREQ)
51*91f16700Schasinglulu #endif /* (RCAR_LSI == RZ_G2N) */
52*91f16700Schasinglulu 
53*91f16700Schasinglulu #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RZ_G2H)
54*91f16700Schasinglulu /* define used for G2H */
55*91f16700Schasinglulu #if (RCAR_REF_INT == RCAR_REF_DEFAULT)	/* REF 1.95usec */
56*91f16700Schasinglulu #define SUB_SLOT_CYCLE_G2H		0x7EU	/* 126 */
57*91f16700Schasinglulu #else /* REF 3.9usec */
58*91f16700Schasinglulu #define SUB_SLOT_CYCLE_G2H		0xFCU	/* 252 */
59*91f16700Schasinglulu #endif /* (RCAR_REF_INT == RCAR_REF_DEFAULT) */
60*91f16700Schasinglulu 
61*91f16700Schasinglulu #define SL_INIT_SSLOTCLK_G2H		(SUB_SLOT_CYCLE_G2H - 1U)
62*91f16700Schasinglulu #define QOSWT_WTSET0_CYCLE_G2H		/* unit:ns */	\
63*91f16700Schasinglulu 	((SUB_SLOT_CYCLE_G2H * BASE_SUB_SLOT_NUM * 1000U) / OPERATING_FREQ)
64*91f16700Schasinglulu #endif
65*91f16700Schasinglulu 
66*91f16700Schasinglulu #if (RCAR_LSI == RCAR_AUTO) || (RCAR_LSI == RZ_G2E)
67*91f16700Schasinglulu /* define used for G2E */
68*91f16700Schasinglulu #if (RCAR_REF_INT == RCAR_REF_DEFAULT)	/* REF 3.9usec */
69*91f16700Schasinglulu #define SUB_SLOT_CYCLE_G2E		0xAFU	/* 175 */
70*91f16700Schasinglulu #else /* REF 7.8usec */
71*91f16700Schasinglulu #define SUB_SLOT_CYCLE_G2E		0x15EU	/* 350 */
72*91f16700Schasinglulu #endif /* (RCAR_REF_INT == RCAR_REF_DEFAULT) */
73*91f16700Schasinglulu 
74*91f16700Schasinglulu #define OPERATING_FREQ_G2E		266U	/* MHz */
75*91f16700Schasinglulu #define SL_INIT_SSLOTCLK_G2E		(SUB_SLOT_CYCLE_G2E - 1U)
76*91f16700Schasinglulu #endif
77*91f16700Schasinglulu 
78*91f16700Schasinglulu #define OPERATING_FREQ			400U	/* MHz */
79*91f16700Schasinglulu #define BASE_SUB_SLOT_NUM		0x6U
80*91f16700Schasinglulu #define SUB_SLOT_CYCLE			0x7EU	/* 126 */
81*91f16700Schasinglulu 
82*91f16700Schasinglulu #define QOSWT_WTSET0_CYCLE		/* unit:ns */	\
83*91f16700Schasinglulu 	((SUB_SLOT_CYCLE * BASE_SUB_SLOT_NUM * 1000U) / OPERATING_FREQ)
84*91f16700Schasinglulu 
85*91f16700Schasinglulu #define SL_INIT_REFFSSLOT		(0x3U << 24U)
86*91f16700Schasinglulu #define SL_INIT_SLOTSSLOT		((BASE_SUB_SLOT_NUM - 1U) << 16U)
87*91f16700Schasinglulu #define SL_INIT_SSLOTCLK		(SUB_SLOT_CYCLE - 1U)
88*91f16700Schasinglulu 
89*91f16700Schasinglulu typedef struct {
90*91f16700Schasinglulu 	uintptr_t addr;
91*91f16700Schasinglulu 	uint64_t value;
92*91f16700Schasinglulu } mstat_slot_t;
93*91f16700Schasinglulu 
94*91f16700Schasinglulu struct rcar_gen3_dbsc_qos_settings {
95*91f16700Schasinglulu 	uint32_t	reg;
96*91f16700Schasinglulu 	uint32_t	val;
97*91f16700Schasinglulu };
98*91f16700Schasinglulu 
99*91f16700Schasinglulu extern uint32_t qos_init_ddr_ch;
100*91f16700Schasinglulu extern uint8_t qos_init_ddr_phyvalid;
101*91f16700Schasinglulu 
102*91f16700Schasinglulu void rzg_qos_dbsc_setting(const struct rcar_gen3_dbsc_qos_settings *qos,
103*91f16700Schasinglulu 			  unsigned int qos_size, bool dbsc_wren);
104*91f16700Schasinglulu 
105*91f16700Schasinglulu #endif /* QOS_COMMON_H */
106