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