xref: /rk3399_ARM-atf/include/dt-bindings/clock/stm32mp25-clksrc.h (revision 2d462888429ed8afaf202b12654466060e437a48)
185229098SGabriel Fernandez /* SPDX-License-Identifier: GPL-2.0-only OR BSD-3-Clause */
23ccb708eSGabriel Fernandez /*
385229098SGabriel Fernandez  * Copyright (C) 2023-2024, STMicroelectronics - All Rights Reserved
43ccb708eSGabriel Fernandez  */
53ccb708eSGabriel Fernandez 
63ccb708eSGabriel Fernandez #ifndef _DT_BINDINGS_CLOCK_STM32MP25_CLKSRC_H_
73ccb708eSGabriel Fernandez #define _DT_BINDINGS_CLOCK_STM32MP25_CLKSRC_H_
83ccb708eSGabriel Fernandez 
93ccb708eSGabriel Fernandez #define CMD_DIV		0
103ccb708eSGabriel Fernandez #define CMD_MUX		1
113ccb708eSGabriel Fernandez #define CMD_CLK		2
123ccb708eSGabriel Fernandez #define CMD_FLEXGEN	3
133ccb708eSGabriel Fernandez 
143ccb708eSGabriel Fernandez #define CMD_ADDR_BIT	0x80000000
153ccb708eSGabriel Fernandez 
163ccb708eSGabriel Fernandez #define CMD_SHIFT	26
173ccb708eSGabriel Fernandez #define CMD_MASK	0xFC000000
183ccb708eSGabriel Fernandez #define CMD_DATA_MASK	0x03FFFFFF
193ccb708eSGabriel Fernandez 
203ccb708eSGabriel Fernandez #define DIV_ID_SHIFT	8
213ccb708eSGabriel Fernandez #define DIV_ID_MASK	0x0000FF00
223ccb708eSGabriel Fernandez 
233ccb708eSGabriel Fernandez #define DIV_DIVN_SHIFT	0
243ccb708eSGabriel Fernandez #define DIV_DIVN_MASK	0x000000FF
253ccb708eSGabriel Fernandez 
263ccb708eSGabriel Fernandez #define MUX_ID_SHIFT	4
273ccb708eSGabriel Fernandez #define MUX_ID_MASK	0x00000FF0
283ccb708eSGabriel Fernandez 
293ccb708eSGabriel Fernandez #define MUX_SEL_SHIFT	0
303ccb708eSGabriel Fernandez #define MUX_SEL_MASK	0x0000000F
313ccb708eSGabriel Fernandez 
323ccb708eSGabriel Fernandez /* CLK define */
333ccb708eSGabriel Fernandez #define CLK_ON_MASK	BIT(21)
343ccb708eSGabriel Fernandez #define CLK_ON_SHIFT	21
353ccb708eSGabriel Fernandez 
363ccb708eSGabriel Fernandez #define CLK_ID_MASK	GENMASK_32(20, 12)
373ccb708eSGabriel Fernandez #define CLK_ID_SHIFT	12
383ccb708eSGabriel Fernandez 
393ccb708eSGabriel Fernandez #define CLK_NO_DIV_MASK	0x0000080
403ccb708eSGabriel Fernandez #define CLK_DIV_MASK	GENMASK_32(10, 5)
413ccb708eSGabriel Fernandez #define CLK_DIV_SHIFT	5
423ccb708eSGabriel Fernandez 
433ccb708eSGabriel Fernandez #define CLK_NO_SEL_MASK	0x00000010
443ccb708eSGabriel Fernandez #define CLK_SEL_MASK	GENMASK_32(3, 0)
453ccb708eSGabriel Fernandez #define CLK_SEL_SHIFT	0
463ccb708eSGabriel Fernandez 
473ccb708eSGabriel Fernandez #define CLK_CFG(clk_id, sel, div, state)	((CMD_CLK << CMD_SHIFT) |\
483ccb708eSGabriel Fernandez 						 ((state) << CLK_ON_SHIFT) |\
493ccb708eSGabriel Fernandez 						 ((clk_id) << CLK_ID_SHIFT) |\
503ccb708eSGabriel Fernandez 						 ((div) << CLK_DIV_SHIFT) |\
513ccb708eSGabriel Fernandez 						 ((sel) << CLK_SEL_SHIFT))
523ccb708eSGabriel Fernandez 
533ccb708eSGabriel Fernandez #define CLK_OFF		0
543ccb708eSGabriel Fernandez #define CLK_ON		1
553ccb708eSGabriel Fernandez #define CLK_NODIV	0x00000040
563ccb708eSGabriel Fernandez #define CLK_NOMUX	0x00000010
573ccb708eSGabriel Fernandez 
583ccb708eSGabriel Fernandez /* Flexgen define */
59*a8d4cc71SGabriel Fernandez #define FLEX_ID_SHIFT	20
60*a8d4cc71SGabriel Fernandez #define FLEX_SEL_SHIFT	16
613ccb708eSGabriel Fernandez #define FLEX_PDIV_SHIFT	6
623ccb708eSGabriel Fernandez #define FLEX_FDIV_SHIFT	0
633ccb708eSGabriel Fernandez 
64*a8d4cc71SGabriel Fernandez #define FLEX_ID_MASK	GENMASK_32(25, 20)
65*a8d4cc71SGabriel Fernandez #define FLEX_SEL_MASK	GENMASK_32(19, 16)
66*a8d4cc71SGabriel Fernandez #define FLEX_PDIV_MASK	GENMASK_32(15, 6)
673ccb708eSGabriel Fernandez #define FLEX_FDIV_MASK	GENMASK_32(5, 0)
683ccb708eSGabriel Fernandez 
693ccb708eSGabriel Fernandez #define DIV_CFG(div_id, div)	((CMD_DIV << CMD_SHIFT) |\
703ccb708eSGabriel Fernandez 				 ((div_id) << DIV_ID_SHIFT |\
713ccb708eSGabriel Fernandez 				 (div)))
723ccb708eSGabriel Fernandez 
733ccb708eSGabriel Fernandez #define MUX_CFG(mux_id, sel)	((CMD_MUX << CMD_SHIFT) |\
743ccb708eSGabriel Fernandez 				 ((mux_id) << MUX_ID_SHIFT |\
753ccb708eSGabriel Fernandez 				 (sel)))
763ccb708eSGabriel Fernandez 
773ccb708eSGabriel Fernandez #define CLK_ADDR_SHIFT		16
783ccb708eSGabriel Fernandez #define CLK_ADDR_MASK		0x7FFF0000
793ccb708eSGabriel Fernandez #define CLK_ADDR_VAL_MASK	0xFFFF
803ccb708eSGabriel Fernandez 
813ccb708eSGabriel Fernandez #define DIV_LSMCU	0
823ccb708eSGabriel Fernandez #define DIV_APB1	1
833ccb708eSGabriel Fernandez #define DIV_APB2	2
843ccb708eSGabriel Fernandez #define DIV_APB3	3
853ccb708eSGabriel Fernandez #define DIV_APB4	4
863ccb708eSGabriel Fernandez #define DIV_APBDBG	5
873ccb708eSGabriel Fernandez #define DIV_RTC		6
883ccb708eSGabriel Fernandez #define DIV_NB		7
893ccb708eSGabriel Fernandez 
903ccb708eSGabriel Fernandez #define MUX_MUXSEL0	0
913ccb708eSGabriel Fernandez #define MUX_MUXSEL1	1
923ccb708eSGabriel Fernandez #define MUX_MUXSEL2	2
933ccb708eSGabriel Fernandez #define MUX_MUXSEL3	3
943ccb708eSGabriel Fernandez #define MUX_MUXSEL4	4
953ccb708eSGabriel Fernandez #define MUX_MUXSEL5	5
963ccb708eSGabriel Fernandez #define MUX_MUXSEL6	6
973ccb708eSGabriel Fernandez #define MUX_MUXSEL7	7
983ccb708eSGabriel Fernandez #define MUX_XBARSEL	8
993ccb708eSGabriel Fernandez #define MUX_RTC		9
1003ccb708eSGabriel Fernandez #define MUX_MCO1	10
1013ccb708eSGabriel Fernandez #define MUX_MCO2	11
1023ccb708eSGabriel Fernandez #define MUX_ADC12	12
1033ccb708eSGabriel Fernandez #define MUX_ADC3	13
1043ccb708eSGabriel Fernandez #define MUX_USB2PHY1	14
1053ccb708eSGabriel Fernandez #define MUX_USB2PHY2	15
1063ccb708eSGabriel Fernandez #define MUX_USB3PCIEPHY	16
1073ccb708eSGabriel Fernandez #define MUX_DSIBLANE	17
1083ccb708eSGabriel Fernandez #define MUX_DSIPHY	18
1093ccb708eSGabriel Fernandez #define MUX_LVDSPHY	19
1103ccb708eSGabriel Fernandez #define MUX_DTS		20
11185229098SGabriel Fernandez #define MUX_D3PER	21
11285229098SGabriel Fernandez #define MUX_NB		22
1133ccb708eSGabriel Fernandez 
1143ccb708eSGabriel Fernandez #define MUXSEL_HSI		0
1153ccb708eSGabriel Fernandez #define MUXSEL_HSE		1
1163ccb708eSGabriel Fernandez #define MUXSEL_MSI		2
1173ccb708eSGabriel Fernandez 
1183ccb708eSGabriel Fernandez /* KERNEL source clocks */
1193ccb708eSGabriel Fernandez #define MUX_RTC_DISABLED	0x0
1203ccb708eSGabriel Fernandez #define MUX_RTC_LSE		0x1
1213ccb708eSGabriel Fernandez #define MUX_RTC_LSI		0x2
1223ccb708eSGabriel Fernandez #define MUX_RTC_HSE		0x3
1233ccb708eSGabriel Fernandez 
1243ccb708eSGabriel Fernandez #define MUX_MCO1_FLEX61		0x0
1253ccb708eSGabriel Fernandez #define MUX_MCO1_OBSER0		0x1
1263ccb708eSGabriel Fernandez 
1273ccb708eSGabriel Fernandez #define MUX_MCO2_FLEX62		0x0
1283ccb708eSGabriel Fernandez #define MUX_MCO2_OBSER1		0x1
1293ccb708eSGabriel Fernandez 
1303ccb708eSGabriel Fernandez #define MUX_ADC12_FLEX46	0x0
1313ccb708eSGabriel Fernandez #define MUX_ADC12_LSMCU		0x1
1323ccb708eSGabriel Fernandez 
1333ccb708eSGabriel Fernandez #define MUX_ADC3_FLEX47		0x0
1343ccb708eSGabriel Fernandez #define MUX_ADC3_LSMCU		0x1
1353ccb708eSGabriel Fernandez #define MUX_ADC3_FLEX46		0x2
1363ccb708eSGabriel Fernandez 
1373ccb708eSGabriel Fernandez #define MUX_USB2PHY1_FLEX57	0x0
1383ccb708eSGabriel Fernandez #define MUX_USB2PHY1_HSE	0x1
1393ccb708eSGabriel Fernandez 
1403ccb708eSGabriel Fernandez #define MUX_USB2PHY2_FLEX58	0x0
1413ccb708eSGabriel Fernandez #define MUX_USB2PHY2_HSE	0x1
1423ccb708eSGabriel Fernandez 
1433ccb708eSGabriel Fernandez #define MUX_USB3PCIEPHY_FLEX34	0x0
1443ccb708eSGabriel Fernandez #define MUX_USB3PCIEPHY_HSE	0x1
1453ccb708eSGabriel Fernandez 
14685229098SGabriel Fernandez #define MUX_DSIBLANE_DSIPHY	0x0
1473ccb708eSGabriel Fernandez #define MUX_DSIBLANE_FLEX27	0x1
1483ccb708eSGabriel Fernandez 
1493ccb708eSGabriel Fernandez #define MUX_DSIPHY_FLEX28	0x0
1503ccb708eSGabriel Fernandez #define MUX_DSIPHY_HSE		0x1
1513ccb708eSGabriel Fernandez 
1523ccb708eSGabriel Fernandez #define MUX_LVDSPHY_FLEX32	0x0
1533ccb708eSGabriel Fernandez #define MUX_LVDSPHY_HSE		0x1
1543ccb708eSGabriel Fernandez 
1553ccb708eSGabriel Fernandez #define MUX_DTS_HSI		0x0
1563ccb708eSGabriel Fernandez #define MUX_DTS_HSE		0x1
1573ccb708eSGabriel Fernandez #define MUX_DTS_MSI		0x2
1583ccb708eSGabriel Fernandez 
1593ccb708eSGabriel Fernandez #define MUX_D3PER_MSI		0x0
1603ccb708eSGabriel Fernandez #define MUX_D3PER_LSI		0x1
1613ccb708eSGabriel Fernandez #define MUX_D3PER_LSE		0x2
1623ccb708eSGabriel Fernandez 
1633ccb708eSGabriel Fernandez /* PLLs source clocks */
1643ccb708eSGabriel Fernandez #define PLL_SRC_HSI		0x0
1653ccb708eSGabriel Fernandez #define PLL_SRC_HSE		0x1
1663ccb708eSGabriel Fernandez #define PLL_SRC_MSI		0x2
1673ccb708eSGabriel Fernandez #define PLL_SRC_DISABLED	0x3
1683ccb708eSGabriel Fernandez 
1693ccb708eSGabriel Fernandez /* XBAR source clocks */
1703ccb708eSGabriel Fernandez #define XBAR_SRC_PLL4		0x0
1713ccb708eSGabriel Fernandez #define XBAR_SRC_PLL5		0x1
1723ccb708eSGabriel Fernandez #define XBAR_SRC_PLL6		0x2
1733ccb708eSGabriel Fernandez #define XBAR_SRC_PLL7		0x3
1743ccb708eSGabriel Fernandez #define XBAR_SRC_PLL8		0x4
1753ccb708eSGabriel Fernandez #define XBAR_SRC_HSI		0x5
1763ccb708eSGabriel Fernandez #define XBAR_SRC_HSE		0x6
1773ccb708eSGabriel Fernandez #define XBAR_SRC_MSI		0x7
1783ccb708eSGabriel Fernandez #define XBAR_SRC_HSI_KER	0x8
1793ccb708eSGabriel Fernandez #define XBAR_SRC_HSE_KER	0x9
1803ccb708eSGabriel Fernandez #define XBAR_SRC_MSI_KER	0xA
1813ccb708eSGabriel Fernandez #define XBAR_SRC_SPDIF_SYMB	0xB
1823ccb708eSGabriel Fernandez #define XBAR_SRC_I2S		0xC
1833ccb708eSGabriel Fernandez #define XBAR_SRC_LSI		0xD
1843ccb708eSGabriel Fernandez #define XBAR_SRC_LSE		0xE
1853ccb708eSGabriel Fernandez 
1863ccb708eSGabriel Fernandez /*
1873ccb708eSGabriel Fernandez  * Configure a XBAR channel with its clock source
1883ccb708eSGabriel Fernandez  * channel_nb: XBAR channel number from 0 to 63
1893ccb708eSGabriel Fernandez  * channel_src: one of the 15 previous XBAR source clocks defines
1903ccb708eSGabriel Fernandez  * channel_prediv: value of the PREDIV in channel RCC_PREDIVxCFGR register
1913ccb708eSGabriel Fernandez  *		   can be either 1, 2, 4 or 1024
1923ccb708eSGabriel Fernandez  * channel_findiv: value of the FINDIV in channel RCC_FINDIVxCFGR register
1933ccb708eSGabriel Fernandez  *		   from 1 to 64
1943ccb708eSGabriel Fernandez  */
1953ccb708eSGabriel Fernandez 
1963ccb708eSGabriel Fernandez #define FLEXGEN_CFG(ch, sel, pdiv, fdiv)	((CMD_FLEXGEN << CMD_SHIFT) |\
1973ccb708eSGabriel Fernandez 						((ch) << FLEX_ID_SHIFT) |\
1983ccb708eSGabriel Fernandez 						((sel) << FLEX_SEL_SHIFT) |\
1993ccb708eSGabriel Fernandez 						((pdiv) << FLEX_PDIV_SHIFT) |\
2003ccb708eSGabriel Fernandez 						((fdiv) << FLEX_FDIV_SHIFT))
2013ccb708eSGabriel Fernandez 
2023ccb708eSGabriel Fernandez /* Register addresses of MCO1 & MCO2 */
2033ccb708eSGabriel Fernandez #define MCO1			0x494
2043ccb708eSGabriel Fernandez #define MCO2			0x498
2053ccb708eSGabriel Fernandez 
2063ccb708eSGabriel Fernandez #define MCO_OFF			0
2073ccb708eSGabriel Fernandez #define MCO_ON			1
2083ccb708eSGabriel Fernandez #define MCO_STATUS_SHIFT	8
2093ccb708eSGabriel Fernandez 
2103ccb708eSGabriel Fernandez #define MCO_CFG(addr, sel, status)	(CMD_ADDR_BIT |\
2113ccb708eSGabriel Fernandez 					((addr) << CLK_ADDR_SHIFT) |\
2123ccb708eSGabriel Fernandez 					((status) << MCO_STATUS_SHIFT) |\
2133ccb708eSGabriel Fernandez 					(sel))
2143ccb708eSGabriel Fernandez 
2153ccb708eSGabriel Fernandez /* define for st,pll /csg */
2163ccb708eSGabriel Fernandez #define SSCG_MODE_CENTER_SPREAD	0
2173ccb708eSGabriel Fernandez #define SSCG_MODE_DOWN_SPREAD	1
2183ccb708eSGabriel Fernandez 
2193ccb708eSGabriel Fernandez /* define for st,drive */
2203ccb708eSGabriel Fernandez #define LSEDRV_LOWEST		0
22185229098SGabriel Fernandez #define LSEDRV_MEDIUM_LOW	2
22285229098SGabriel Fernandez #define LSEDRV_MEDIUM_HIGH	1
2233ccb708eSGabriel Fernandez #define LSEDRV_HIGHEST		3
2243ccb708eSGabriel Fernandez 
2253ccb708eSGabriel Fernandez #endif /* _DT_BINDINGS_CLOCK_STM32MP25_CLKSRC_H_ */
226