xref: /optee_os/core/include/dt-bindings/clock/stm32mp13-clksrc.h (revision c95d740ab3604844575dc99dad8bd512781c5d07)
1 /* SPDX-License-Identifier: GPL-2.0+ or BSD-3-Clause */
2 /*
3  * Copyright (C) STMicroelectronics 2022 - All Rights Reserved
4  * Author: Gabriel Fernandez <gabriel.fernandez@foss.st.com>
5  */
6 
7 #ifndef _DT_BINDINGS_CLOCK_STM32MP13_CLKSRC_H_
8 #define _DT_BINDINGS_CLOCK_STM32MP13_CLKSRC_H_
9 
10 #define CMD_DIV		0
11 #define CMD_MUX		1
12 #define CMD_CLK		2
13 
14 #define CMD_SHIFT	26
15 #define CMD_MASK	0xFC000000
16 #define CMD_DATA_MASK	0x03FFFFFF
17 
18 #define DIV_ID_SHIFT	8
19 #define DIV_ID_MASK	0x0000FF00
20 
21 #define DIV_DIVN_SHIFT	0
22 #define DIV_DIVN_MASK	0x000000FF
23 
24 #define MUX_ID_SHIFT	4
25 #define MUX_ID_MASK	0x00000FF0
26 
27 #define MUX_SEL_SHIFT	0
28 #define MUX_SEL_MASK	0x0000000F
29 
30 #define CLK_ID_MASK	GENMASK_32(19, 11)
31 #define CLK_ID_SHIFT	11
32 #define CLK_ON_MASK	0x00000400
33 #define CLK_ON_SHIFT	10
34 #define CLK_DIV_MASK	GENMASK_32(9, 4)
35 #define CLK_DIV_SHIFT	4
36 #define CLK_SEL_MASK	GENMASK_32(3, 0)
37 #define CLK_SEL_SHIFT	0
38 
39 #define DIV_PLL1DIVP	0
40 #define DIV_PLL2DIVP	1
41 #define DIV_PLL2DIVQ	2
42 #define DIV_PLL2DIVR	3
43 #define DIV_PLL3DIVP	4
44 #define DIV_PLL3DIVQ	5
45 #define DIV_PLL3DIVR	6
46 #define DIV_PLL4DIVP	7
47 #define DIV_PLL4DIVQ	8
48 #define DIV_PLL4DIVR	9
49 #define DIV_MPU		10
50 #define DIV_AXI		11
51 #define DIV_MLAHB	12
52 #define DIV_APB1	13
53 #define DIV_APB2	14
54 #define DIV_APB3	15
55 #define DIV_APB4	16
56 #define DIV_APB5	17
57 #define DIV_APB6	18
58 #define DIV_RTC		19
59 #define DIV_MCO1	20
60 #define DIV_MCO2	21
61 #define DIV_HSI		22
62 #define DIV_TRACE	23
63 #define DIV_ETH1PTP	24
64 #define DIV_ETH2PTP	25
65 #define DIV_NB		26
66 
67 #define DIV(div_id, div)	((CMD_DIV << CMD_SHIFT) |\
68 				 ((div_id) << DIV_ID_SHIFT) |\
69 				 (div))
70 
71 #define CLKSRC(mux_id, sel)	((CMD_MUX << CMD_SHIFT) |\
72 				 ((mux_id) << MUX_ID_SHIFT) |\
73 				 (sel))
74 
75 /* CLK output is enable */
76 #define CLK_SRC(clk_id, sel)	((CMD_CLK << CMD_SHIFT) |\
77 				 ((clk_id) << CLK_ID_SHIFT) |\
78 				 (sel) | CLK_ON_MASK)
79 
80 #define CLK_DISABLED(clk_id)	((CMD_CLK << CMD_SHIFT) |\
81 				 ((clk_id) << CLK_ID_SHIFT))
82 
83 #define MUX_MPU			0
84 #define MUX_AXI			1
85 #define MUX_MLAHB		2
86 #define MUX_PLL12		3
87 #define MUX_PLL3		4
88 #define MUX_PLL4		5
89 #define MUX_RTC			6
90 #define MUX_MCO1		7
91 #define MUX_MCO2		8
92 #define MUX_CKPER		9
93 #define MUX_ADC1		10
94 #define MUX_ADC2		11
95 #define MUX_DCMIPP		12
96 #define MUX_ETH1		13
97 #define MUX_ETH2		14
98 #define MUX_FDCAN		15
99 #define MUX_FMC			16
100 #define MUX_I2C12		17
101 #define MUX_I2C3		18
102 #define MUX_I2C4		19
103 #define MUX_I2C5		20
104 #define MUX_LPTIM1		21
105 #define MUX_LPTIM2		22
106 #define MUX_LPTIM3		23
107 #define MUX_LPTIM45		24
108 #define MUX_QSPI		25
109 #define MUX_RNG1		26
110 #define MUX_SAES		27
111 #define MUX_SAI1		28
112 #define MUX_SAI2		29
113 #define MUX_SDMMC1		30
114 #define MUX_SDMMC2		31
115 #define MUX_SPDIF		32
116 #define MUX_SPI1		33
117 #define MUX_SPI23		34
118 #define MUX_SPI4		35
119 #define MUX_SPI5		36
120 #define MUX_STGEN		37
121 #define MUX_UART1		38
122 #define MUX_UART2		39
123 #define MUX_UART35		40
124 #define MUX_UART4		41
125 #define MUX_UART6		42
126 #define MUX_UART78		43
127 #define MUX_USBO		44
128 #define MUX_USBPHY		45
129 #define MUX_NB			46
130 
131 /* ADC MUX is the first Kernel MUX */
132 #define MUX_KERNEL_BEGIN	MUX_ADC1
133 
134 #define CLK_MPU_HSI		CLKSRC(MUX_MPU, 0)
135 #define CLK_MPU_HSE		CLKSRC(MUX_MPU, 1)
136 #define CLK_MPU_PLL1P		CLKSRC(MUX_MPU, 2)
137 #define CLK_MPU_PLL1P_DIV	CLKSRC(MUX_MPU, 3)
138 
139 #define CLK_AXI_HSI		CLKSRC(MUX_AXI, 0)
140 #define CLK_AXI_HSE		CLKSRC(MUX_AXI, 1)
141 #define CLK_AXI_PLL2P		CLKSRC(MUX_AXI, 2)
142 
143 #define CLK_MLAHBS_HSI		CLKSRC(MUX_MLAHB, 0)
144 #define CLK_MLAHBS_HSE		CLKSRC(MUX_MLAHB, 1)
145 #define CLK_MLAHBS_CSI		CLKSRC(MUX_MLAHB, 2)
146 #define CLK_MLAHBS_PLL3		CLKSRC(MUX_MLAHB, 3)
147 
148 #define CLK_PLL12_HSI		CLKSRC(MUX_PLL12, 0)
149 #define CLK_PLL12_HSE		CLKSRC(MUX_PLL12, 1)
150 
151 #define CLK_PLL3_HSI		CLKSRC(MUX_PLL3, 0)
152 #define CLK_PLL3_HSE		CLKSRC(MUX_PLL3, 1)
153 #define CLK_PLL3_CSI		CLKSRC(MUX_PLL3, 2)
154 
155 #define CLK_PLL4_HSI		CLKSRC(MUX_PLL4, 0)
156 #define CLK_PLL4_HSE		CLKSRC(MUX_PLL4, 1)
157 #define CLK_PLL4_CSI		CLKSRC(MUX_PLL4, 2)
158 
159 #define CLK_RTC_DISABLED	CLKSRC(MUX_RTC, 0)
160 #define CLK_RTC_LSE		CLKSRC(MUX_RTC, 1)
161 #define CLK_RTC_LSI		CLKSRC(MUX_RTC, 2)
162 #define CLK_RTC_HSE		CLKSRC(MUX_RTC, 3)
163 
164 #define CLK_MCO1_HSI		CLK_SRC(CK_MCO1, 0)
165 #define CLK_MCO1_HSE		CLK_SRC(CK_MCO1, 1)
166 #define CLK_MCO1_CSI		CLK_SRC(CK_MCO1, 2)
167 #define CLK_MCO1_LSI		CLK_SRC(CK_MCO1, 3)
168 #define CLK_MCO1_LSE		CLK_SRC(CK_MCO1, 4)
169 #define CLK_MCO1_DISABLED	CLK_DISABLED(CK_MCO1)
170 
171 #define CLK_MCO2_MPU		CLK_SRC(CK_MCO2, 0)
172 #define CLK_MCO2_AXI		CLK_SRC(CK_MCO2, 1)
173 #define CLK_MCO2_MLAHB		CLK_SRC(CK_MCO2, 2)
174 #define CLK_MCO2_PLL4		CLK_SRC(CK_MCO2, 3)
175 #define CLK_MCO2_HSE		CLK_SRC(CK_MCO2, 4)
176 #define CLK_MCO2_HSI		CLK_SRC(CK_MCO2, 5)
177 #define CLK_MCO2_DISABLED	CLK_DISABLED(CK_MCO2)
178 
179 #define CLK_CKPER_HSI		CLKSRC(MUX_CKPER, 0)
180 #define CLK_CKPER_CSI		CLKSRC(MUX_CKPER, 1)
181 #define CLK_CKPER_HSE		CLKSRC(MUX_CKPER, 2)
182 #define CLK_CKPER_DISABLED	CLKSRC(MUX_CKPER, 3)
183 
184 #define CLK_I2C12_PCLK1		CLKSRC(MUX_I2C12, 0)
185 #define CLK_I2C12_PLL4R		CLKSRC(MUX_I2C12, 1)
186 #define CLK_I2C12_HSI		CLKSRC(MUX_I2C12, 2)
187 #define CLK_I2C12_CSI		CLKSRC(MUX_I2C12, 3)
188 
189 #define CLK_I2C3_PCLK6		CLKSRC(MUX_I2C3, 0)
190 #define CLK_I2C3_PLL4R		CLKSRC(MUX_I2C3, 1)
191 #define CLK_I2C3_HSI		CLKSRC(MUX_I2C3, 2)
192 #define CLK_I2C3_CSI		CLKSRC(MUX_I2C3, 3)
193 
194 #define CLK_I2C4_PCLK6		CLKSRC(MUX_I2C4, 0)
195 #define CLK_I2C4_PLL4R		CLKSRC(MUX_I2C4, 1)
196 #define CLK_I2C4_HSI		CLKSRC(MUX_I2C4, 2)
197 #define CLK_I2C4_CSI		CLKSRC(MUX_I2C4, 3)
198 
199 #define CLK_I2C5_PCLK6		CLKSRC(MUX_I2C5, 0)
200 #define CLK_I2C5_PLL4R		CLKSRC(MUX_I2C5, 1)
201 #define CLK_I2C5_HSI		CLKSRC(MUX_I2C5, 2)
202 #define CLK_I2C5_CSI		CLKSRC(MUX_I2C5, 3)
203 
204 #define CLK_SPI1_PLL4P		CLKSRC(MUX_SPI1, 0)
205 #define CLK_SPI1_PLL3Q		CLKSRC(MUX_SPI1, 1)
206 #define CLK_SPI1_I2SCKIN	CLKSRC(MUX_SPI1, 2)
207 #define CLK_SPI1_CKPER		CLKSRC(MUX_SPI1, 3)
208 #define CLK_SPI1_PLL3R		CLKSRC(MUX_SPI1, 4)
209 
210 #define CLK_SPI23_PLL4P		CLKSRC(MUX_SPI23, 0)
211 #define CLK_SPI23_PLL3Q		CLKSRC(MUX_SPI23, 1)
212 #define CLK_SPI23_I2SCKIN	CLKSRC(MUX_SPI23, 2)
213 #define CLK_SPI23_CKPER		CLKSRC(MUX_SPI23, 3)
214 #define CLK_SPI23_PLL3R		CLKSRC(MUX_SPI23, 4)
215 
216 #define CLK_SPI4_PCLK6		CLKSRC(MUX_SPI4, 0)
217 #define CLK_SPI4_PLL4Q		CLKSRC(MUX_SPI4, 1)
218 #define CLK_SPI4_HSI		CLKSRC(MUX_SPI4, 2)
219 #define CLK_SPI4_CSI		CLKSRC(MUX_SPI4, 3)
220 #define CLK_SPI4_HSE		CLKSRC(MUX_SPI4, 4)
221 #define CLK_SPI4_I2SCKIN	CLKSRC(MUX_SPI4, 5)
222 
223 #define CLK_SPI5_PCLK6		CLKSRC(MUX_SPI5, 0)
224 #define CLK_SPI5_PLL4Q		CLKSRC(MUX_SPI5, 1)
225 #define CLK_SPI5_HSI		CLKSRC(MUX_SPI5, 2)
226 #define CLK_SPI5_CSI		CLKSRC(MUX_SPI5, 3)
227 #define CLK_SPI5_HSE		CLKSRC(MUX_SPI5, 4)
228 
229 #define CLK_UART1_PCLK6		CLKSRC(MUX_UART1, 0)
230 #define CLK_UART1_PLL3Q		CLKSRC(MUX_UART1, 1)
231 #define CLK_UART1_HSI		CLKSRC(MUX_UART1, 2)
232 #define CLK_UART1_CSI		CLKSRC(MUX_UART1, 3)
233 #define CLK_UART1_PLL4Q		CLKSRC(MUX_UART1, 4)
234 #define CLK_UART1_HSE		CLKSRC(MUX_UART1, 5)
235 
236 #define CLK_UART2_PCLK6		CLKSRC(MUX_UART2, 0)
237 #define CLK_UART2_PLL3Q		CLKSRC(MUX_UART2, 1)
238 #define CLK_UART2_HSI		CLKSRC(MUX_UART2, 2)
239 #define CLK_UART2_CSI		CLKSRC(MUX_UART2, 3)
240 #define CLK_UART2_PLL4Q		CLKSRC(MUX_UART2, 4)
241 #define CLK_UART2_HSE		CLKSRC(MUX_UART2, 5)
242 
243 #define CLK_UART35_PCLK1	CLKSRC(MUX_UART35, 0)
244 #define CLK_UART35_PLL4Q	CLKSRC(MUX_UART35, 1)
245 #define CLK_UART35_HSI		CLKSRC(MUX_UART35, 2)
246 #define CLK_UART35_CSI		CLKSRC(MUX_UART35, 3)
247 #define CLK_UART35_HSE		CLKSRC(MUX_UART35, 4)
248 
249 #define CLK_UART4_PCLK1		CLKSRC(MUX_UART4, 0)
250 #define CLK_UART4_PLL4Q		CLKSRC(MUX_UART4, 1)
251 #define CLK_UART4_HSI		CLKSRC(MUX_UART4, 2)
252 #define CLK_UART4_CSI		CLKSRC(MUX_UART4, 3)
253 #define CLK_UART4_HSE		CLKSRC(MUX_UART4, 4)
254 
255 #define CLK_UART6_PCLK2		CLKSRC(MUX_UART6, 0)
256 #define CLK_UART6_PLL4Q		CLKSRC(MUX_UART6, 1)
257 #define CLK_UART6_HSI		CLKSRC(MUX_UART6, 2)
258 #define CLK_UART6_CSI		CLKSRC(MUX_UART6, 3)
259 #define CLK_UART6_HSE		CLKSRC(MUX_UART6, 4)
260 
261 #define CLK_UART78_PCLK1	CLKSRC(MUX_UART78, 0)
262 #define CLK_UART78_PLL4Q	CLKSRC(MUX_UART78, 1)
263 #define CLK_UART78_HSI		CLKSRC(MUX_UART78, 2)
264 #define CLK_UART78_CSI		CLKSRC(MUX_UART78, 3)
265 #define CLK_UART78_HSE		CLKSRC(MUX_UART78, 4)
266 
267 #define CLK_LPTIM1_PCLK1	CLKSRC(MUX_LPTIM1, 0)
268 #define CLK_LPTIM1_PLL4P	CLKSRC(MUX_LPTIM1, 1)
269 #define CLK_LPTIM1_PLL3Q	CLKSRC(MUX_LPTIM1, 2)
270 #define CLK_LPTIM1_LSE		CLKSRC(MUX_LPTIM1, 3)
271 #define CLK_LPTIM1_LSI		CLKSRC(MUX_LPTIM1, 4)
272 #define CLK_LPTIM1_CKPER	CLKSRC(MUX_LPTIM1, 5)
273 
274 #define CLK_LPTIM2_PCLK3	CLKSRC(MUX_LPTIM2, 0)
275 #define CLK_LPTIM2_PLL4Q	CLKSRC(MUX_LPTIM2, 1)
276 #define CLK_LPTIM2_CKPER	CLKSRC(MUX_LPTIM2, 2)
277 #define CLK_LPTIM2_LSE		CLKSRC(MUX_LPTIM2, 3)
278 #define CLK_LPTIM2_LSI		CLKSRC(MUX_LPTIM2, 4)
279 
280 #define CLK_LPTIM3_PCLK3	CLKSRC(MUX_LPTIM3, 0)
281 #define CLK_LPTIM3_PLL4Q	CLKSRC(MUX_LPTIM3, 1)
282 #define CLK_LPTIM3_CKPER	CLKSRC(MUX_LPTIM3, 2)
283 #define CLK_LPTIM3_LSE		CLKSRC(MUX_LPTIM3, 3)
284 #define CLK_LPTIM3_LSI		CLKSRC(MUX_LPTIM3, 4)
285 
286 #define CLK_LPTIM45_PCLK3	CLKSRC(MUX_LPTIM45, 0)
287 #define CLK_LPTIM45_PLL4P	CLKSRC(MUX_LPTIM45, 1)
288 #define CLK_LPTIM45_PLL3Q	CLKSRC(MUX_LPTIM45, 2)
289 #define CLK_LPTIM45_LSE		CLKSRC(MUX_LPTIM45, 3)
290 #define CLK_LPTIM45_LSI		CLKSRC(MUX_LPTIM45, 4)
291 #define CLK_LPTIM45_CKPER	CLKSRC(MUX_LPTIM45, 5)
292 
293 #define CLK_SAI1_PLL4Q		CLKSRC(MUX_SAI1, 0)
294 #define CLK_SAI1_PLL3Q		CLKSRC(MUX_SAI1, 1)
295 #define CLK_SAI1_I2SCKIN	CLKSRC(MUX_SAI1, 2)
296 #define CLK_SAI1_CKPER		CLKSRC(MUX_SAI1, 3)
297 #define CLK_SAI1_PLL3R		CLKSRC(MUX_SAI1, 4)
298 
299 #define CLK_SAI2_PLL4Q		CLKSRC(MUX_SAI2, 0)
300 #define CLK_SAI2_PLL3Q		CLKSRC(MUX_SAI2, 1)
301 #define CLK_SAI2_I2SCKIN	CLKSRC(MUX_SAI2, 2)
302 #define CLK_SAI2_CKPER		CLKSRC(MUX_SAI2, 3)
303 #define CLK_SAI2_SPDIF		CLKSRC(MUX_SAI2, 4)
304 #define CLK_SAI2_PLL3R		CLKSRC(MUX_SAI2, 5)
305 
306 #define CLK_FDCAN_HSE		CLKSRC(MUX_FDCAN, 0)
307 #define CLK_FDCAN_PLL3Q		CLKSRC(MUX_FDCAN, 1)
308 #define CLK_FDCAN_PLL4Q		CLKSRC(MUX_FDCAN, 2)
309 #define CLK_FDCAN_PLL4R		CLKSRC(MUX_FDCAN, 3)
310 
311 #define CLK_SPDIF_PLL4P		CLKSRC(MUX_SPDIF, 0)
312 #define CLK_SPDIF_PLL3Q		CLKSRC(MUX_SPDIF, 1)
313 #define CLK_SPDIF_HSI		CLKSRC(MUX_SPDIF, 2)
314 
315 #define CLK_ADC1_PLL4R		CLKSRC(MUX_ADC1, 0)
316 #define CLK_ADC1_CKPER		CLKSRC(MUX_ADC1, 1)
317 #define CLK_ADC1_PLL3Q		CLKSRC(MUX_ADC1, 2)
318 
319 #define CLK_ADC2_PLL4R		CLKSRC(MUX_ADC2, 0)
320 #define CLK_ADC2_CKPER		CLKSRC(MUX_ADC2, 1)
321 #define CLK_ADC2_PLL3Q		CLKSRC(MUX_ADC2, 2)
322 
323 #define CLK_SDMMC1_HCLK6	CLKSRC(MUX_SDMMC1, 0)
324 #define CLK_SDMMC1_PLL3R	CLKSRC(MUX_SDMMC1, 1)
325 #define CLK_SDMMC1_PLL4P	CLKSRC(MUX_SDMMC1, 2)
326 #define CLK_SDMMC1_HSI		CLKSRC(MUX_SDMMC1, 3)
327 
328 #define CLK_SDMMC2_HCLK6	CLKSRC(MUX_SDMMC2, 0)
329 #define CLK_SDMMC2_PLL3R	CLKSRC(MUX_SDMMC2, 1)
330 #define CLK_SDMMC2_PLL4P	CLKSRC(MUX_SDMMC2, 2)
331 #define CLK_SDMMC2_HSI		CLKSRC(MUX_SDMMC2, 3)
332 
333 #define CLK_ETH1_PLL4P		CLKSRC(MUX_ETH1, 0)
334 #define CLK_ETH1_PLL3Q		CLKSRC(MUX_ETH1, 1)
335 
336 #define CLK_ETH2_PLL4P		CLKSRC(MUX_ETH2, 0)
337 #define CLK_ETH2_PLL3Q		CLKSRC(MUX_ETH2, 1)
338 
339 #define CLK_USBPHY_HSE		CLKSRC(MUX_USBPHY, 0)
340 #define CLK_USBPHY_PLL4R	CLKSRC(MUX_USBPHY, 1)
341 #define CLK_USBPHY_HSE_DIV2	CLKSRC(MUX_USBPHY, 2)
342 
343 #define CLK_USBO_PLL4R		CLKSRC(MUX_USBO, 0)
344 #define CLK_USBO_USBPHY		CLKSRC(MUX_USBO, 1)
345 
346 #define CLK_QSPI_ACLK		CLKSRC(MUX_QSPI, 0)
347 #define CLK_QSPI_PLL3R		CLKSRC(MUX_QSPI, 1)
348 #define CLK_QSPI_PLL4P		CLKSRC(MUX_QSPI, 2)
349 #define CLK_QSPI_CKPER		CLKSRC(MUX_QSPI, 3)
350 
351 #define CLK_FMC_ACLK		CLKSRC(MUX_FMC, 0)
352 #define CLK_FMC_PLL3R		CLKSRC(MUX_FMC, 1)
353 #define CLK_FMC_PLL4P		CLKSRC(MUX_FMC, 2)
354 #define CLK_FMC_CKPER		CLKSRC(MUX_FMC, 3)
355 
356 #define CLK_RNG1_CSI		CLKSRC(MUX_RNG1, 0)
357 #define CLK_RNG1_PLL4R		CLKSRC(MUX_RNG1, 1)
358 #define CLK_RNG1_LSE		CLKSRC(MUX_RNG1, 2)
359 #define CLK_RNG1_LSI		CLKSRC(MUX_RNG1, 3)
360 
361 #define CLK_STGEN_HSI		CLKSRC(MUX_STGEN, 0)
362 #define CLK_STGEN_HSE		CLKSRC(MUX_STGEN, 1)
363 
364 #define CLK_DCMIPP_ACLK		CLKSRC(MUX_DCMIPP, 0)
365 #define CLK_DCMIPP_PLL2Q	CLKSRC(MUX_DCMIPP, 1)
366 #define CLK_DCMIPP_PLL4P	CLKSRC(MUX_DCMIPP, 2)
367 #define CLK_DCMIPP_CKPER	CLKSRC(MUX_DCMIPP, 3)
368 
369 #define CLK_SAES_AXI		CLKSRC(MUX_SAES, 0)
370 #define CLK_SAES_CKPER		CLKSRC(MUX_SAES, 1)
371 #define CLK_SAES_PLL4R		CLKSRC(MUX_SAES, 2)
372 #define CLK_SAES_LSI		CLKSRC(MUX_SAES, 3)
373 
374 /* define for st,pll /csg */
375 #define SSCG_MODE_CENTER_SPREAD	0
376 #define SSCG_MODE_DOWN_SPREAD	1
377 
378 /* define for st,drive */
379 #define LSEDRV_LOWEST		0
380 #define LSEDRV_MEDIUM_LOW	1
381 #define LSEDRV_MEDIUM_HIGH	2
382 #define LSEDRV_HIGHEST		3
383 
384 #endif /* _DT_BINDINGS_CLOCK_STM32MP13_CLKSRC_H_ */
385