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