xref: /optee_os/core/include/dt-bindings/clock/stm32mp25-clksrc.h (revision 0de0b5e26feaf05c761c4aad620fb437a987ae7e)
1*0de0b5e2SGabriel Fernandez /* SPDX-License-Identifier: BSD-2-Clause */
2*0de0b5e2SGabriel Fernandez /*
3*0de0b5e2SGabriel Fernandez  * Copyright (C) STMicroelectronics 2024 - All Rights Reserved
4*0de0b5e2SGabriel Fernandez  */
5*0de0b5e2SGabriel Fernandez 
6*0de0b5e2SGabriel Fernandez #ifndef _DT_BINDINGS_CLOCK_STM32MP25_CLKSRC_H_
7*0de0b5e2SGabriel Fernandez #define _DT_BINDINGS_CLOCK_STM32MP25_CLKSRC_H_
8*0de0b5e2SGabriel Fernandez 
9*0de0b5e2SGabriel Fernandez #define CMD_DIV		0
10*0de0b5e2SGabriel Fernandez #define CMD_MUX		1
11*0de0b5e2SGabriel Fernandez #define CMD_CLK		2
12*0de0b5e2SGabriel Fernandez #define CMD_FLEXGEN	3
13*0de0b5e2SGabriel Fernandez #define CMD_OBS		4
14*0de0b5e2SGabriel Fernandez 
15*0de0b5e2SGabriel Fernandez #define CMD_ADDR_BIT	0x80000000
16*0de0b5e2SGabriel Fernandez 
17*0de0b5e2SGabriel Fernandez #define CMD_SHIFT	26
18*0de0b5e2SGabriel Fernandez #define CMD_MASK	0xFC000000
19*0de0b5e2SGabriel Fernandez #define CMD_DATA_MASK	0x03FFFFFF
20*0de0b5e2SGabriel Fernandez 
21*0de0b5e2SGabriel Fernandez #define DIV_ID_SHIFT	8
22*0de0b5e2SGabriel Fernandez #define DIV_ID_MASK	0x0000FF00
23*0de0b5e2SGabriel Fernandez 
24*0de0b5e2SGabriel Fernandez #define DIV_DIVN_SHIFT	0
25*0de0b5e2SGabriel Fernandez #define DIV_DIVN_MASK	0x000000FF
26*0de0b5e2SGabriel Fernandez 
27*0de0b5e2SGabriel Fernandez #define MUX_ID_SHIFT	4
28*0de0b5e2SGabriel Fernandez #define MUX_ID_MASK	0x00000FF0
29*0de0b5e2SGabriel Fernandez 
30*0de0b5e2SGabriel Fernandez #define MUX_SEL_SHIFT	0
31*0de0b5e2SGabriel Fernandez #define MUX_SEL_MASK	0x0000000F
32*0de0b5e2SGabriel Fernandez 
33*0de0b5e2SGabriel Fernandez /* CLK define */
34*0de0b5e2SGabriel Fernandez #define CLK_ON_MASK	BIT(21)
35*0de0b5e2SGabriel Fernandez #define CLK_ON_SHIFT	21
36*0de0b5e2SGabriel Fernandez 
37*0de0b5e2SGabriel Fernandez #define CLK_ID_MASK	GENMASK_32(20, 12)
38*0de0b5e2SGabriel Fernandez #define CLK_ID_SHIFT	12
39*0de0b5e2SGabriel Fernandez 
40*0de0b5e2SGabriel Fernandez #define CLK_NO_DIV_MASK	0x0000080
41*0de0b5e2SGabriel Fernandez #define CLK_DIV_MASK	GENMASK_32(10, 5)
42*0de0b5e2SGabriel Fernandez #define CLK_DIV_SHIFT	5
43*0de0b5e2SGabriel Fernandez 
44*0de0b5e2SGabriel Fernandez #define CLK_NO_SEL_MASK	0x00000010
45*0de0b5e2SGabriel Fernandez #define CLK_SEL_MASK	GENMASK_32(3, 0)
46*0de0b5e2SGabriel Fernandez #define CLK_SEL_SHIFT	0
47*0de0b5e2SGabriel Fernandez 
48*0de0b5e2SGabriel Fernandez #define CLK_CFG(clk_id, sel, div, state)	((CMD_CLK << CMD_SHIFT) |\
49*0de0b5e2SGabriel Fernandez 						 ((state) << CLK_ON_SHIFT) |\
50*0de0b5e2SGabriel Fernandez 						 ((clk_id) << CLK_ID_SHIFT) |\
51*0de0b5e2SGabriel Fernandez 						 ((div) << CLK_DIV_SHIFT) |\
52*0de0b5e2SGabriel Fernandez 						 ((sel) << CLK_SEL_SHIFT))
53*0de0b5e2SGabriel Fernandez 
54*0de0b5e2SGabriel Fernandez #define CLK_OFF		0
55*0de0b5e2SGabriel Fernandez #define CLK_ON		1
56*0de0b5e2SGabriel Fernandez #define CLK_NODIV	0x00000040
57*0de0b5e2SGabriel Fernandez #define CLK_NOMUX	0x00000010
58*0de0b5e2SGabriel Fernandez 
59*0de0b5e2SGabriel Fernandez /* Flexgen define */
60*0de0b5e2SGabriel Fernandez #define FLEX_ID_SHIFT	13
61*0de0b5e2SGabriel Fernandez #define FLEX_SEL_SHIFT	9
62*0de0b5e2SGabriel Fernandez #define FLEX_PDIV_SHIFT	6
63*0de0b5e2SGabriel Fernandez #define FLEX_FDIV_SHIFT	0
64*0de0b5e2SGabriel Fernandez 
65*0de0b5e2SGabriel Fernandez #define FLEX_ID_MASK	GENMASK_32(18, 13)
66*0de0b5e2SGabriel Fernandez #define FLEX_SEL_MASK	GENMASK_32(12, 9)
67*0de0b5e2SGabriel Fernandez #define FLEX_PDIV_MASK	GENMASK_32(8, 6)
68*0de0b5e2SGabriel Fernandez #define FLEX_FDIV_MASK	GENMASK_32(5, 0)
69*0de0b5e2SGabriel Fernandez 
70*0de0b5e2SGabriel Fernandez #define DIV_CFG(div_id, div)	((CMD_DIV << CMD_SHIFT) |\
71*0de0b5e2SGabriel Fernandez 				 ((div_id) << DIV_ID_SHIFT |\
72*0de0b5e2SGabriel Fernandez 				 (div)))
73*0de0b5e2SGabriel Fernandez 
74*0de0b5e2SGabriel Fernandez #define MUX_CFG(mux_id, sel)	((CMD_MUX << CMD_SHIFT) |\
75*0de0b5e2SGabriel Fernandez 				 ((mux_id) << MUX_ID_SHIFT |\
76*0de0b5e2SGabriel Fernandez 				 (sel)))
77*0de0b5e2SGabriel Fernandez 
78*0de0b5e2SGabriel Fernandez #define CLK_ADDR_SHIFT		16
79*0de0b5e2SGabriel Fernandez #define CLK_ADDR_MASK		0x7FFF0000
80*0de0b5e2SGabriel Fernandez #define CLK_ADDR_VAL_MASK	0xFFFF
81*0de0b5e2SGabriel Fernandez 
82*0de0b5e2SGabriel Fernandez #define DIV_LSMCU	0
83*0de0b5e2SGabriel Fernandez #define DIV_APB1	1
84*0de0b5e2SGabriel Fernandez #define DIV_APB2	2
85*0de0b5e2SGabriel Fernandez #define DIV_APB3	3
86*0de0b5e2SGabriel Fernandez #define DIV_APB4	4
87*0de0b5e2SGabriel Fernandez #define DIV_APBDBG	5
88*0de0b5e2SGabriel Fernandez #define DIV_RTC		6
89*0de0b5e2SGabriel Fernandez #define DIV_NB		7
90*0de0b5e2SGabriel Fernandez 
91*0de0b5e2SGabriel Fernandez #define MUX_MUXSEL0	0
92*0de0b5e2SGabriel Fernandez #define MUX_MUXSEL1	1
93*0de0b5e2SGabriel Fernandez #define MUX_MUXSEL2	2
94*0de0b5e2SGabriel Fernandez #define MUX_MUXSEL3	3
95*0de0b5e2SGabriel Fernandez #define MUX_MUXSEL4	4
96*0de0b5e2SGabriel Fernandez #define MUX_MUXSEL5	5
97*0de0b5e2SGabriel Fernandez #define MUX_MUXSEL6	6
98*0de0b5e2SGabriel Fernandez #define MUX_MUXSEL7	7
99*0de0b5e2SGabriel Fernandez #define MUX_XBARSEL	8
100*0de0b5e2SGabriel Fernandez #define MUX_RTC		9
101*0de0b5e2SGabriel Fernandez #define MUX_MCO1	10
102*0de0b5e2SGabriel Fernandez #define MUX_MCO2	11
103*0de0b5e2SGabriel Fernandez #define MUX_ADC12	12
104*0de0b5e2SGabriel Fernandez #define MUX_ADC3	13
105*0de0b5e2SGabriel Fernandez #define MUX_USB2PHY1	14
106*0de0b5e2SGabriel Fernandez #define MUX_USB2PHY2	15
107*0de0b5e2SGabriel Fernandez #define MUX_USB3PCIEPHY	16
108*0de0b5e2SGabriel Fernandez #define MUX_DSIBLANE	17
109*0de0b5e2SGabriel Fernandez #define MUX_DSIPHY	18
110*0de0b5e2SGabriel Fernandez #define MUX_LVDSPHY	19
111*0de0b5e2SGabriel Fernandez #define MUX_DTS		20
112*0de0b5e2SGabriel Fernandez #define MUX_D3PER	21
113*0de0b5e2SGabriel Fernandez #define MUX_NB		22
114*0de0b5e2SGabriel Fernandez 
115*0de0b5e2SGabriel Fernandez #define MUXSEL_HSI		0
116*0de0b5e2SGabriel Fernandez #define MUXSEL_HSE		1
117*0de0b5e2SGabriel Fernandez #define MUXSEL_MSI		2
118*0de0b5e2SGabriel Fernandez 
119*0de0b5e2SGabriel Fernandez /* KERNEL source clocks */
120*0de0b5e2SGabriel Fernandez #define MUX_RTC_DISABLED	0x0
121*0de0b5e2SGabriel Fernandez #define MUX_RTC_LSE		0x1
122*0de0b5e2SGabriel Fernandez #define MUX_RTC_LSI		0x2
123*0de0b5e2SGabriel Fernandez #define MUX_RTC_HSE		0x3
124*0de0b5e2SGabriel Fernandez 
125*0de0b5e2SGabriel Fernandez #define MUX_MCO1_FLEX61		0x0
126*0de0b5e2SGabriel Fernandez #define MUX_MCO1_OBSER0		0x1
127*0de0b5e2SGabriel Fernandez 
128*0de0b5e2SGabriel Fernandez #define MUX_MCO2_FLEX62		0x0
129*0de0b5e2SGabriel Fernandez #define MUX_MCO2_OBSER1		0x1
130*0de0b5e2SGabriel Fernandez 
131*0de0b5e2SGabriel Fernandez #define MUX_ADC12_FLEX46	0x0
132*0de0b5e2SGabriel Fernandez #define MUX_ADC12_LSMCU		0x1
133*0de0b5e2SGabriel Fernandez 
134*0de0b5e2SGabriel Fernandez #define MUX_ADC3_FLEX47		0x0
135*0de0b5e2SGabriel Fernandez #define MUX_ADC3_LSMCU		0x1
136*0de0b5e2SGabriel Fernandez #define MUX_ADC3_FLEX46		0x2
137*0de0b5e2SGabriel Fernandez 
138*0de0b5e2SGabriel Fernandez #define MUX_USB2PHY1_FLEX57	0x0
139*0de0b5e2SGabriel Fernandez #define MUX_USB2PHY1_HSE	0x1
140*0de0b5e2SGabriel Fernandez 
141*0de0b5e2SGabriel Fernandez #define MUX_USB2PHY2_FLEX58	0x0
142*0de0b5e2SGabriel Fernandez #define MUX_USB2PHY2_HSE	0x1
143*0de0b5e2SGabriel Fernandez 
144*0de0b5e2SGabriel Fernandez #define MUX_USB3PCIEPHY_FLEX34	0x0
145*0de0b5e2SGabriel Fernandez #define MUX_USB3PCIEPHY_HSE	0x1
146*0de0b5e2SGabriel Fernandez 
147*0de0b5e2SGabriel Fernandez #define MUX_DSIBLANE_DSIPHY	0x0
148*0de0b5e2SGabriel Fernandez #define MUX_DSIBLANE_FLEX27	0x1
149*0de0b5e2SGabriel Fernandez 
150*0de0b5e2SGabriel Fernandez #define MUX_DSIPHY_FLEX28	0x0
151*0de0b5e2SGabriel Fernandez #define MUX_DSIPHY_HSE		0x1
152*0de0b5e2SGabriel Fernandez 
153*0de0b5e2SGabriel Fernandez #define MUX_LVDSPHY_FLEX32	0x0
154*0de0b5e2SGabriel Fernandez #define MUX_LVDSPHY_HSE		0x1
155*0de0b5e2SGabriel Fernandez 
156*0de0b5e2SGabriel Fernandez #define MUX_DTS_HSI		0x0
157*0de0b5e2SGabriel Fernandez #define MUX_DTS_HSE		0x1
158*0de0b5e2SGabriel Fernandez #define MUX_DTS_MSI		0x2
159*0de0b5e2SGabriel Fernandez 
160*0de0b5e2SGabriel Fernandez #define MUX_D3PER_MSI		0x0
161*0de0b5e2SGabriel Fernandez #define MUX_D3PER_LSI		0x1
162*0de0b5e2SGabriel Fernandez #define MUX_D3PER_LSE		0x2
163*0de0b5e2SGabriel Fernandez 
164*0de0b5e2SGabriel Fernandez /* PLLs source clocks */
165*0de0b5e2SGabriel Fernandez #define PLL_SRC_HSI		0x0
166*0de0b5e2SGabriel Fernandez #define PLL_SRC_HSE		0x1
167*0de0b5e2SGabriel Fernandez #define PLL_SRC_MSI		0x2
168*0de0b5e2SGabriel Fernandez #define PLL_SRC_DISABLED	0x3
169*0de0b5e2SGabriel Fernandez 
170*0de0b5e2SGabriel Fernandez /* XBAR source clocks */
171*0de0b5e2SGabriel Fernandez #define XBAR_SRC_PLL4		0x0
172*0de0b5e2SGabriel Fernandez #define XBAR_SRC_PLL5		0x1
173*0de0b5e2SGabriel Fernandez #define XBAR_SRC_PLL6		0x2
174*0de0b5e2SGabriel Fernandez #define XBAR_SRC_PLL7		0x3
175*0de0b5e2SGabriel Fernandez #define XBAR_SRC_PLL8		0x4
176*0de0b5e2SGabriel Fernandez #define XBAR_SRC_HSI		0x5
177*0de0b5e2SGabriel Fernandez #define XBAR_SRC_HSE		0x6
178*0de0b5e2SGabriel Fernandez #define XBAR_SRC_MSI		0x7
179*0de0b5e2SGabriel Fernandez #define XBAR_SRC_HSI_KER	0x8
180*0de0b5e2SGabriel Fernandez #define XBAR_SRC_HSE_KER	0x9
181*0de0b5e2SGabriel Fernandez #define XBAR_SRC_MSI_KER	0xA
182*0de0b5e2SGabriel Fernandez #define XBAR_SRC_SPDIF_SYMB	0xB
183*0de0b5e2SGabriel Fernandez #define XBAR_SRC_I2S		0xC
184*0de0b5e2SGabriel Fernandez #define XBAR_SRC_LSI		0xD
185*0de0b5e2SGabriel Fernandez #define XBAR_SRC_LSE		0xE
186*0de0b5e2SGabriel Fernandez 
187*0de0b5e2SGabriel Fernandez /*
188*0de0b5e2SGabriel Fernandez  * Configure a XBAR channel with its clock source
189*0de0b5e2SGabriel Fernandez  * channel_nb: XBAR channel number from 0 to 63
190*0de0b5e2SGabriel Fernandez  * channel_src: one of the 15 previous XBAR source clocks defines
191*0de0b5e2SGabriel Fernandez  * channel_prediv: value of the PREDIV in channel RCC_PREDIVxCFGR register
192*0de0b5e2SGabriel Fernandez  *		   can be either 1, 2, 4 or 1024
193*0de0b5e2SGabriel Fernandez  * channel_findiv: value of the FINDIV in channel RCC_FINDIVxCFGR register
194*0de0b5e2SGabriel Fernandez  *		   from 1 to 64
195*0de0b5e2SGabriel Fernandez  */
196*0de0b5e2SGabriel Fernandez 
197*0de0b5e2SGabriel Fernandez #define FLEXGEN_CFG(ch, sel, pdiv, fdiv)	((CMD_FLEXGEN << CMD_SHIFT) |\
198*0de0b5e2SGabriel Fernandez 						((ch) << FLEX_ID_SHIFT) |\
199*0de0b5e2SGabriel Fernandez 						((sel) << FLEX_SEL_SHIFT) |\
200*0de0b5e2SGabriel Fernandez 						((pdiv) << FLEX_PDIV_SHIFT) |\
201*0de0b5e2SGabriel Fernandez 						((fdiv) << FLEX_FDIV_SHIFT))
202*0de0b5e2SGabriel Fernandez 
203*0de0b5e2SGabriel Fernandez /* Register addresses of MCO1 & MCO2 */
204*0de0b5e2SGabriel Fernandez #define MCO1			0x494
205*0de0b5e2SGabriel Fernandez #define MCO2			0x498
206*0de0b5e2SGabriel Fernandez 
207*0de0b5e2SGabriel Fernandez #define MCO_OFF			0
208*0de0b5e2SGabriel Fernandez #define MCO_ON			1
209*0de0b5e2SGabriel Fernandez #define MCO_STATUS_SHIFT	8
210*0de0b5e2SGabriel Fernandez 
211*0de0b5e2SGabriel Fernandez #define MCO_CFG(addr, sel, status)	(CMD_ADDR_BIT |\
212*0de0b5e2SGabriel Fernandez 					((addr) << CLK_ADDR_SHIFT) |\
213*0de0b5e2SGabriel Fernandez 					((status) << MCO_STATUS_SHIFT) |\
214*0de0b5e2SGabriel Fernandez 					(sel))
215*0de0b5e2SGabriel Fernandez #define OBS_ID_SHIFT		14
216*0de0b5e2SGabriel Fernandez #define OBS_STATUS_SHIFT	13
217*0de0b5e2SGabriel Fernandez #define OBS_INTEXT_SHIFT	12
218*0de0b5e2SGabriel Fernandez #define OBS_DIV_SHIFT		9
219*0de0b5e2SGabriel Fernandez #define OBS_INV_SHIFT		8
220*0de0b5e2SGabriel Fernandez #define OBS_SEL_SHIFT		0
221*0de0b5e2SGabriel Fernandez 
222*0de0b5e2SGabriel Fernandez #define OBS_ID_MASK		GENMASK_32(14, 14)
223*0de0b5e2SGabriel Fernandez #define OBS_STATUS_MASK		GENMASK_32(13, 13)
224*0de0b5e2SGabriel Fernandez #define OBS_INTEXT_MASK		GENMASK_32(12, 12)
225*0de0b5e2SGabriel Fernandez #define OBS_DIV_MASK		GENMASK_32(11, 9)
226*0de0b5e2SGabriel Fernandez #define OBS_INV_MASK		BIT(8)
227*0de0b5e2SGabriel Fernandez #define OBS_SEL_MASK		GENMASK_32(7, 0)
228*0de0b5e2SGabriel Fernandez 
229*0de0b5e2SGabriel Fernandez #define OBS_CFG(id, status, int_ext, div, inv, sel)\
230*0de0b5e2SGabriel Fernandez 	((CMD_OBS << CMD_SHIFT) |\
231*0de0b5e2SGabriel Fernandez 	((id) << OBS_ID_SHIFT) |\
232*0de0b5e2SGabriel Fernandez 	((status) << OBS_STATUS_SHIFT) |\
233*0de0b5e2SGabriel Fernandez 	((int_ext) << OBS_INTEXT_SHIFT) |\
234*0de0b5e2SGabriel Fernandez 	((div) << OBS_DIV_SHIFT) |\
235*0de0b5e2SGabriel Fernandez 	((inv) << OBS_INV_SHIFT) |\
236*0de0b5e2SGabriel Fernandez 	((sel) << OBS_SEL_SHIFT))
237*0de0b5e2SGabriel Fernandez 
238*0de0b5e2SGabriel Fernandez #define OBS0			0
239*0de0b5e2SGabriel Fernandez #define OBS1			1
240*0de0b5e2SGabriel Fernandez 
241*0de0b5e2SGabriel Fernandez #define OBS_OFF			0
242*0de0b5e2SGabriel Fernandez #define OBS_ON			1
243*0de0b5e2SGabriel Fernandez 
244*0de0b5e2SGabriel Fernandez #define OBS_INT			0
245*0de0b5e2SGabriel Fernandez #define OBS_EXT			1
246*0de0b5e2SGabriel Fernandez 
247*0de0b5e2SGabriel Fernandez #define OBS_DIV1		0
248*0de0b5e2SGabriel Fernandez #define OBS_DIV2		1
249*0de0b5e2SGabriel Fernandez #define OBS_DIV4		2
250*0de0b5e2SGabriel Fernandez #define OBS_DIV8		3
251*0de0b5e2SGabriel Fernandez #define OBS_DIV16		4
252*0de0b5e2SGabriel Fernandez #define OBS_DIV32		5
253*0de0b5e2SGabriel Fernandez #define OBS_DIV64		6
254*0de0b5e2SGabriel Fernandez #define OBS_DIV128		7
255*0de0b5e2SGabriel Fernandez 
256*0de0b5e2SGabriel Fernandez #define OBS_NO_INV		0
257*0de0b5e2SGabriel Fernandez #define OBS_INV			1
258*0de0b5e2SGabriel Fernandez 
259*0de0b5e2SGabriel Fernandez #define OBS_INT_CFG(id, status, div, inv, sel)\
260*0de0b5e2SGabriel Fernandez 		OBS_CFG(id, status, OBS_INT, div, inv, sel)
261*0de0b5e2SGabriel Fernandez 
262*0de0b5e2SGabriel Fernandez #define OBS_EXT_CFG(id, status, div, inv, sel)\
263*0de0b5e2SGabriel Fernandez 		OBS_CFG(id, status, OBS_EXT, div, inv, sel)
264*0de0b5e2SGabriel Fernandez 
265*0de0b5e2SGabriel Fernandez /* define for st,pll /csg */
266*0de0b5e2SGabriel Fernandez #define SSCG_MODE_CENTER_SPREAD	0
267*0de0b5e2SGabriel Fernandez #define SSCG_MODE_DOWN_SPREAD	1
268*0de0b5e2SGabriel Fernandez 
269*0de0b5e2SGabriel Fernandez /* define for st,drive */
270*0de0b5e2SGabriel Fernandez #define LSEDRV_LOWEST		0
271*0de0b5e2SGabriel Fernandez #define LSEDRV_MEDIUM_LOW	2
272*0de0b5e2SGabriel Fernandez #define LSEDRV_MEDIUM_HIGH	1
273*0de0b5e2SGabriel Fernandez #define LSEDRV_HIGHEST		3
274*0de0b5e2SGabriel Fernandez 
275*0de0b5e2SGabriel Fernandez #endif /* _DT_BINDINGS_CLOCK_STM32MP25_CLKSRC_H_ */
276