xref: /rk3399_ARM-atf/plat/intel/soc/agilex5/include/agilex5_clock_manager.h (revision 12211eac5c2fdbdb87f09a71eee4cff56d9266aa)
11b1a3eb1SJit Loon Lim /*
21b1a3eb1SJit Loon Lim  * Copyright (c) 2019-2022, Intel Corporation. All rights reserved.
3fa1e92c6SSieu Mun Tang  * Copyright (c) 2024, Altera Corporation. All rights reserved.
41b1a3eb1SJit Loon Lim  *
51b1a3eb1SJit Loon Lim  * SPDX-License-Identifier: BSD-3-Clause
61b1a3eb1SJit Loon Lim  */
71b1a3eb1SJit Loon Lim 
81b1a3eb1SJit Loon Lim #ifndef CLOCKMANAGER_H
91b1a3eb1SJit Loon Lim #define CLOCKMANAGER_H
101b1a3eb1SJit Loon Lim 
111b1a3eb1SJit Loon Lim #include "socfpga_handoff.h"
121b1a3eb1SJit Loon Lim 
131b1a3eb1SJit Loon Lim /* Clock Manager Registers */
14*e60bedd5SSieu Mun Tang #define CLKMGR_BASE				0x10D10000
15*e60bedd5SSieu Mun Tang #define CLKMGR_CTRL				0x00
16*e60bedd5SSieu Mun Tang #define CLKMGR_STAT				0x04
17*e60bedd5SSieu Mun Tang #define CLKMGR_TESTIOCTROL			0x08
18*e60bedd5SSieu Mun Tang #define CLKMGR_INTRGEN				0x0C
191b1a3eb1SJit Loon Lim #define CLKMGR_INTRMSK				0x10
201b1a3eb1SJit Loon Lim #define CLKMGR_INTRCLR				0x14
211b1a3eb1SJit Loon Lim #define CLKMGR_INTRSTS				0x18
22*e60bedd5SSieu Mun Tang #define CLKMGR_INTRSTK				0x1C
231b1a3eb1SJit Loon Lim #define CLKMGR_INTRRAW				0x20
241b1a3eb1SJit Loon Lim 
25*e60bedd5SSieu Mun Tang /* Clock manager control related macros */
26*e60bedd5SSieu Mun Tang #define CLKMGR(_reg)				(CLKMGR_BASE + (CLKMGR_##_reg))
27*e60bedd5SSieu Mun Tang #define CLKMGR_STAT_MAINPLLLOCKED		BIT(8)
28*e60bedd5SSieu Mun Tang #define CLKMGR_STAT_PERPLLLOCKED		BIT(16)
29*e60bedd5SSieu Mun Tang 
30*e60bedd5SSieu Mun Tang #define CLKMGR_INTRCLR_MAINLOCKLOST		BIT(2)
31*e60bedd5SSieu Mun Tang #define CLKMGR_INTRCLR_PERLOCKLOST		BIT(3)
32*e60bedd5SSieu Mun Tang 
33*e60bedd5SSieu Mun Tang #define CLKMGR_STAT_ALLPLLLOCKED		(CLKMGR_STAT_MAINPLLLOCKED | \
34*e60bedd5SSieu Mun Tang 						CLKMGR_STAT_PERPLLLOCKED)
35*e60bedd5SSieu Mun Tang 
361b1a3eb1SJit Loon Lim /* Main PLL Group */
37*e60bedd5SSieu Mun Tang #define CLKMGR_MAINPLL_BASE			0x10D10024
38*e60bedd5SSieu Mun Tang #define CLKMGR_MAINPLL_EN			0x00
39*e60bedd5SSieu Mun Tang #define CLKMGR_MAINPLL_ENS			0x04
40*e60bedd5SSieu Mun Tang #define CLKMGR_MAINPLL_ENR			0x08
41*e60bedd5SSieu Mun Tang #define CLKMGR_MAINPLL_BYPASS			0x0C
421b1a3eb1SJit Loon Lim #define CLKMGR_MAINPLL_BYPASSS			0x10
431b1a3eb1SJit Loon Lim #define CLKMGR_MAINPLL_BYPASSR			0x14
44*e60bedd5SSieu Mun Tang #define CLKMGR_MAINPLL_NOCCLK			0x1C
451b1a3eb1SJit Loon Lim #define CLKMGR_MAINPLL_NOCDIV			0x20
461b1a3eb1SJit Loon Lim #define CLKMGR_MAINPLL_PLLGLOB			0x24
471b1a3eb1SJit Loon Lim #define CLKMGR_MAINPLL_FDBCK			0x28
48*e60bedd5SSieu Mun Tang #define CLKMGR_MAINPLL_MEM			0x2C
491b1a3eb1SJit Loon Lim #define CLKMGR_MAINPLL_MEMSTAT			0x30
501b1a3eb1SJit Loon Lim #define CLKMGR_MAINPLL_VCOCALIB			0x34
511b1a3eb1SJit Loon Lim #define CLKMGR_MAINPLL_PLLC0			0x38
52*e60bedd5SSieu Mun Tang #define CLKMGR_MAINPLL_PLLC1			0x3C
531b1a3eb1SJit Loon Lim #define CLKMGR_MAINPLL_PLLC2			0x40
541b1a3eb1SJit Loon Lim #define CLKMGR_MAINPLL_PLLC3			0x44
551b1a3eb1SJit Loon Lim #define CLKMGR_MAINPLL_PLLM			0x48
56*e60bedd5SSieu Mun Tang #define CLKMGR_MAINPLL_FHOP			0x4C
571b1a3eb1SJit Loon Lim #define CLKMGR_MAINPLL_SSC			0x50
581b1a3eb1SJit Loon Lim #define CLKMGR_MAINPLL_LOSTLOCK			0x54
591b1a3eb1SJit Loon Lim 
60*e60bedd5SSieu Mun Tang #define CLKMGR_MAINPLL(_reg)			(CLKMGR_MAINPLL_BASE + \
61*e60bedd5SSieu Mun Tang 							(CLKMGR_MAINPLL_##_reg))
62*e60bedd5SSieu Mun Tang 
63*e60bedd5SSieu Mun Tang #define CLKMGR_XPLL_LOSTLOCK_BYPASSCLEAR	BIT(0)
64*e60bedd5SSieu Mun Tang #define CLKMGR_XPLLGLOB_CLR_LOSTLOCK_BYPASS	BIT(29)
65*e60bedd5SSieu Mun Tang 
661b1a3eb1SJit Loon Lim /* Peripheral PLL Group */
67*e60bedd5SSieu Mun Tang #define CLKMGR_PERPLL_BASE			0x10D1007C
68*e60bedd5SSieu Mun Tang #define CLKMGR_PERPLL_EN			0x00
69*e60bedd5SSieu Mun Tang #define CLKMGR_PERPLL_ENS			0x04
70*e60bedd5SSieu Mun Tang #define CLKMGR_PERPLL_ENR			0x08
71*e60bedd5SSieu Mun Tang #define CLKMGR_PERPLL_BYPASS			0x0C
72*e60bedd5SSieu Mun Tang #define CLKMGR_PERPLL_BYPASSS			0x10
73*e60bedd5SSieu Mun Tang #define CLKMGR_PERPLL_BYPASSR			0x14
741b1a3eb1SJit Loon Lim #define CLKMGR_PERPLL_EMACCTL			0x18
75*e60bedd5SSieu Mun Tang #define CLKMGR_PERPLL_GPIODIV			0x1C
761b1a3eb1SJit Loon Lim #define CLKMGR_PERPLL_PLLGLOB			0x20
771b1a3eb1SJit Loon Lim #define CLKMGR_PERPLL_FDBCK			0x24
781b1a3eb1SJit Loon Lim #define CLKMGR_PERPLL_MEM			0x28
79*e60bedd5SSieu Mun Tang #define CLKMGR_PERPLL_MEMSTAT			0x2C
80*e60bedd5SSieu Mun Tang #define CLKMGR_PERPLL_VCOCALIB			0x30
81*e60bedd5SSieu Mun Tang #define CLKMGR_PERPLL_PLLC0			0x34
82*e60bedd5SSieu Mun Tang #define CLKMGR_PERPLL_PLLC1			0x38
83*e60bedd5SSieu Mun Tang #define CLKMGR_PERPLL_PLLC2			0x3C
841b1a3eb1SJit Loon Lim #define CLKMGR_PERPLL_PLLC3			0x40
851b1a3eb1SJit Loon Lim #define CLKMGR_PERPLL_PLLM			0x44
86*e60bedd5SSieu Mun Tang #define CLKMGR_PERPLL_FHOP			0x48
87*e60bedd5SSieu Mun Tang #define CLKMGR_PERPLL_SSC			0x4C
881b1a3eb1SJit Loon Lim #define CLKMGR_PERPLL_LOSTLOCK			0x50
891b1a3eb1SJit Loon Lim 
90*e60bedd5SSieu Mun Tang #define CLKMGR_PERPLL(_reg)			(CLKMGR_PERPLL_BASE + \
91*e60bedd5SSieu Mun Tang 							(CLKMGR_PERPLL_##_reg))
92*e60bedd5SSieu Mun Tang 
931b1a3eb1SJit Loon Lim /* Altera Group */
94*e60bedd5SSieu Mun Tang #define CLKMGR_ALTERA_BASE			0x10D100D0
95*e60bedd5SSieu Mun Tang #define CLKMGR_ALTERA_JTAG			0x00
96*e60bedd5SSieu Mun Tang #define CLKMGR_ALTERA_EMACACTR			0x04
97*e60bedd5SSieu Mun Tang #define CLKMGR_ALTERA_EMACBCTR			0x08
98*e60bedd5SSieu Mun Tang #define CLKMGR_ALTERA_EMACPTPCTR		0x0C
991b1a3eb1SJit Loon Lim #define CLKMGR_ALTERA_GPIODBCTR			0x10
1001b1a3eb1SJit Loon Lim #define CLKMGR_ALTERA_S2FUSER0CTR		0x18
101*e60bedd5SSieu Mun Tang #define CLKMGR_ALTERA_S2FUSER1CTR		0x1C
1021b1a3eb1SJit Loon Lim #define CLKMGR_ALTERA_PSIREFCTR			0x20
1031b1a3eb1SJit Loon Lim #define CLKMGR_ALTERA_EXTCNTRST			0x24
1041b1a3eb1SJit Loon Lim #define CLKMGR_ALTERA_USB31CTR			0x28
105*e60bedd5SSieu Mun Tang #define CLKMGR_ALTERA_DSUCTR			0x2C
1061b1a3eb1SJit Loon Lim #define CLKMGR_ALTERA_CORE01CTR			0x30
1071b1a3eb1SJit Loon Lim #define CLKMGR_ALTERA_CORE23CTR			0x34
1081b1a3eb1SJit Loon Lim #define CLKMGR_ALTERA_CORE2CTR			0x38
109*e60bedd5SSieu Mun Tang #define CLKMGR_ALTERA_CORE3CTR			0x3C
110*e60bedd5SSieu Mun Tang #define CLKMGR_ALTERA_SERIAL_CON_PLL_CTR	0x40
1111b1a3eb1SJit Loon Lim 
112*e60bedd5SSieu Mun Tang #define CLKMGR_ALTERA(_reg)			(CLKMGR_ALTERA_BASE + \
113*e60bedd5SSieu Mun Tang 							(CLKMGR_ALTERA_##_reg))
114*e60bedd5SSieu Mun Tang 
115*e60bedd5SSieu Mun Tang #define CLKMGR_ALTERA_EXTCNTRST_EMACACNTRST	BIT(0)
116*e60bedd5SSieu Mun Tang #define CLKMGR_ALTERA_EXTCNTRST_EMACBCNTRST	BIT(1)
117*e60bedd5SSieu Mun Tang #define CLKMGR_ALTERA_EXTCNTRST_EMACPTPCNTRST	BIT(2)
118*e60bedd5SSieu Mun Tang #define CLKMGR_ALTERA_EXTCNTRST_GPIODBCNTRST	BIT(3)
119*e60bedd5SSieu Mun Tang #define CLKMGR_ALTERA_EXTCNTRST_S2FUSER0CNTRST	BIT(5)
120*e60bedd5SSieu Mun Tang #define CLKMGR_ALTERA_EXTCNTRST_S2FUSER1CNTRST	BIT(6)
121*e60bedd5SSieu Mun Tang #define CLKMGR_ALTERA_EXTCNTRST_PSIREFCNTRST	BIT(7)
122*e60bedd5SSieu Mun Tang #define CLKMGR_ALTERA_EXTCNTRST_USB31REFCNTRST	BIT(8)
123*e60bedd5SSieu Mun Tang #define CLKMGR_ALTERA_EXTCNTRST_DSUCNTRST	BIT(10)
124*e60bedd5SSieu Mun Tang #define CLKMGR_ALTERA_EXTCNTRST_CORE01CNTRST	BIT(11)
125*e60bedd5SSieu Mun Tang #define CLKMGR_ALTERA_EXTCNTRST_CORE2CNTRST	BIT(12)
126*e60bedd5SSieu Mun Tang #define CLKMGR_ALTERA_EXTCNTRST_CORE3CNTRST	BIT(13)
127*e60bedd5SSieu Mun Tang 
128*e60bedd5SSieu Mun Tang #define CLKMGR_ALTERA_EXTCNTRST_ALLCNTRST	\
129*e60bedd5SSieu Mun Tang 						(CLKMGR_ALTERA_EXTCNTRST_EMACACNTRST |	\
130*e60bedd5SSieu Mun Tang 						CLKMGR_ALTERA_EXTCNTRST_EMACBCNTRST |	\
131*e60bedd5SSieu Mun Tang 						CLKMGR_ALTERA_EXTCNTRST_EMACPTPCNTRST |	\
132*e60bedd5SSieu Mun Tang 						CLKMGR_ALTERA_EXTCNTRST_GPIODBCNTRST |	\
133*e60bedd5SSieu Mun Tang 						CLKMGR_ALTERA_EXTCNTRST_S2FUSER0CNTRST |\
134*e60bedd5SSieu Mun Tang 						CLKMGR_ALTERA_EXTCNTRST_S2FUSER1CNTRST |\
135*e60bedd5SSieu Mun Tang 						CLKMGR_ALTERA_EXTCNTRST_PSIREFCNTRST |	\
136*e60bedd5SSieu Mun Tang 						CLKMGR_ALTERA_EXTCNTRST_USB31REFCNTRST |\
137*e60bedd5SSieu Mun Tang 						CLKMGR_ALTERA_EXTCNTRST_DSUCNTRST |	\
138*e60bedd5SSieu Mun Tang 						CLKMGR_ALTERA_EXTCNTRST_CORE01CNTRST |	\
139*e60bedd5SSieu Mun Tang 						CLKMGR_ALTERA_EXTCNTRST_CORE2CNTRST |	\
140*e60bedd5SSieu Mun Tang 						CLKMGR_ALTERA_EXTCNTRST_CORE3CNTRST)
141*e60bedd5SSieu Mun Tang 
142*e60bedd5SSieu Mun Tang #define CLKMGR_ALTERA_CORE0			0
143*e60bedd5SSieu Mun Tang #define CLKMGR_ALTERA_CORE1			1
144*e60bedd5SSieu Mun Tang #define CLKMGR_ALTERA_CORE2			2
145*e60bedd5SSieu Mun Tang #define CLKMGR_ALTERA_CORE3			3
146*e60bedd5SSieu Mun Tang 
147*e60bedd5SSieu Mun Tang /* PLL membus configuration macros */
1481b1a3eb1SJit Loon Lim #define CLKMGR_MEM_REQ				BIT(24)
1491b1a3eb1SJit Loon Lim #define CLKMGR_MEM_WR				BIT(25)
1501b1a3eb1SJit Loon Lim #define CLKMGR_MEM_ERR				BIT(26)
1511b1a3eb1SJit Loon Lim #define CLKMGR_MEM_WDAT_OFFSET			16
152*e60bedd5SSieu Mun Tang #define CLKMGR_MEM_ADDR_MASK			GENMASK(15, 0)
153*e60bedd5SSieu Mun Tang #define CLKMGR_MEM_ADDR_START			0x00004000
154*e60bedd5SSieu Mun Tang #define CLKMGR_PLLCFG_SRC_SYNC_MODE		0x27
155*e60bedd5SSieu Mun Tang #define CLKMGR_PLLCFG_OVRSHOOT_FREQ_LOCK	0xB3
156*e60bedd5SSieu Mun Tang #define CLKMGR_PLLCFG_LOCK_SETTLE_TIME		0xE6
157*e60bedd5SSieu Mun Tang #define CLKMGR_PLLCFG_DUTYCYCLE_CLKSLICE0	0x03
158*e60bedd5SSieu Mun Tang #define CLKMGR_PLLCFG_DUTYCYCLE_CLKSLICE1	0x07
1591b1a3eb1SJit Loon Lim 
1601b1a3eb1SJit Loon Lim /* Clock Manager Macros */
1611b1a3eb1SJit Loon Lim #define CLKMGR_CTRL_BOOTMODE_SET_MSK		0x00000001
1621b1a3eb1SJit Loon Lim #define CLKMGR_STAT_BUSY_E_BUSY			0x1
1631b1a3eb1SJit Loon Lim #define CLKMGR_STAT_BUSY(x)			(((x) & 0x00000001) >> 0)
1641b1a3eb1SJit Loon Lim #define CLKMGR_INTRCLR_MAINLOCKLOST_SET_MSK	0x00000004
1651b1a3eb1SJit Loon Lim #define CLKMGR_INTRCLR_PERLOCKLOST_SET_MSK	0x00000008
1661b1a3eb1SJit Loon Lim #define CLKMGR_INTOSC_HZ			460000000
167*e60bedd5SSieu Mun Tang #define CLKMGR_CTRL_BOOTMODE			BIT(0)
168*e60bedd5SSieu Mun Tang #define CLKMGR_STAT_MAINPLL_LOCKED		BIT(8)
169*e60bedd5SSieu Mun Tang #define CLKMGR_STAT_MAIN_TRANS			BIT(9)
170*e60bedd5SSieu Mun Tang #define CLKMGR_STAT_PERPLL_LOCKED		BIT(16)
171*e60bedd5SSieu Mun Tang #define CLKMGR_STAT_PERF_TRANS			BIT(17)
172*e60bedd5SSieu Mun Tang #define CLKMGR_STAT_BOOTMODE			BIT(24)
173*e60bedd5SSieu Mun Tang #define CLKMGR_STAT_BOOTCLKSRC			BIT(25)
1741b1a3eb1SJit Loon Lim 
175*e60bedd5SSieu Mun Tang #define CLKMGR_STAT_ALLPLL_LOCKED_MASK		(CLKMGR_STAT_MAINPLL_LOCKED | \
176*e60bedd5SSieu Mun Tang 						 CLKMGR_STAT_PERPLL_LOCKED)
1771b1a3eb1SJit Loon Lim /* Main PLL Macros */
178*e60bedd5SSieu Mun Tang #define CLKMGR_MAINPLL_EN_RESET			0x0000005E
179*e60bedd5SSieu Mun Tang #define CLKMGR_MAINPLL_ENS_RESET		0x0000005E
180*e60bedd5SSieu Mun Tang #define CLKMGR_MAINPLL_PLLGLOB_PD_N		BIT(0)
181*e60bedd5SSieu Mun Tang #define CLKMGR_MAINPLL_PLLGLOB_RST_N		BIT(1)
182*e60bedd5SSieu Mun Tang #define CLKMGR_MAINPLL_PLLCX_EN			BIT(27)
183*e60bedd5SSieu Mun Tang #define CLKMGR_MAINPLL_PLLCX_MUTE		BIT(28)
1841b1a3eb1SJit Loon Lim 
1851b1a3eb1SJit Loon Lim #define CLKMGR_PERPLL_EN_SDMMCCLK		BIT(5)
186*e60bedd5SSieu Mun Tang #define CLKMGR_PERPLL_GPIODIV_GPIODBCLK_SET(x)	(((x) << 0) & 0x0000FFFF)
187*e60bedd5SSieu Mun Tang #define CLKMGR_PERPLL_PLLGLOB_PD_N		BIT(0)
188*e60bedd5SSieu Mun Tang #define CLKMGR_PERPLL_PLLGLOB_RST_N		BIT(1)
189*e60bedd5SSieu Mun Tang #define CLKMGR_PERPLL_PLLCX_EN			BIT(27)
190*e60bedd5SSieu Mun Tang #define CLKMGR_PERPLL_PLLCX_MUTE		BIT(28)
1911b1a3eb1SJit Loon Lim 
1921b1a3eb1SJit Loon Lim /* Altera Macros */
193*e60bedd5SSieu Mun Tang #define CLKMGR_ALTERA_EXTCNTRST_RESET		0xFF
1941b1a3eb1SJit Loon Lim 
1951b1a3eb1SJit Loon Lim /* Shared Macros */
196*e60bedd5SSieu Mun Tang #define CLKMGR_PLLGLOB_PSRC(x)			(((x) & 0x00030000) >> 16)
1971b1a3eb1SJit Loon Lim #define CLKMGR_PSRC_MAIN			0
1981b1a3eb1SJit Loon Lim #define CLKMGR_PSRC_PER				1
1991b1a3eb1SJit Loon Lim 
2001b1a3eb1SJit Loon Lim #define CLKMGR_PLLGLOB_PSRC_EOSC1		0x0
2011b1a3eb1SJit Loon Lim #define CLKMGR_PLLGLOB_PSRC_INTOSC		0x1
2021b1a3eb1SJit Loon Lim #define CLKMGR_PLLGLOB_PSRC_F2S			0x2
2031b1a3eb1SJit Loon Lim 
204*e60bedd5SSieu Mun Tang #define CLKMGR_PLLM_MDIV(x)			((x) & 0x000003FF)
2051b1a3eb1SJit Loon Lim #define CLKMGR_PLLGLOB_PD_SET_MSK		0x00000001
2061b1a3eb1SJit Loon Lim #define CLKMGR_PLLGLOB_RST_SET_MSK		0x00000002
2071b1a3eb1SJit Loon Lim 
208*e60bedd5SSieu Mun Tang #define CLKMGR_PLLGLOB_REFCLKDIV(x)		(((x) & 0x00003F00) >> 8)
209*e60bedd5SSieu Mun Tang #define CLKMGR_PLLGLOB_AREFCLKDIV(x)		(((x) & 0x00000F00) >> 8)
2101b1a3eb1SJit Loon Lim #define CLKMGR_PLLGLOB_DREFCLKDIV(x)		(((x) & 0x00003000) >> 12)
2111b1a3eb1SJit Loon Lim 
212*e60bedd5SSieu Mun Tang #define CLKMGR_VCOCALIB_HSCNT_SET(x)		(((x) << 0) & 0x000003FF)
213*e60bedd5SSieu Mun Tang #define CLKMGR_VCOCALIB_MSCNT_SET(x)		(((x) << 16) & 0x00FF0000)
2141b1a3eb1SJit Loon Lim 
2151b1a3eb1SJit Loon Lim #define CLKMGR_CLR_LOSTLOCK_BYPASS		0x20000000
2161b1a3eb1SJit Loon Lim 
217*e60bedd5SSieu Mun Tang #define CLKMGR_CLKSRC_MASK			GENMASK(18, 16)
218*e60bedd5SSieu Mun Tang #define CLKMGR_CLKSRC_OFFSET			16
219*e60bedd5SSieu Mun Tang #define CLKMGR_CLKSRC_MAIN			0
220*e60bedd5SSieu Mun Tang #define CLKMGR_CLKSRC_PER			1
221*e60bedd5SSieu Mun Tang #define CLKMGR_CLKSRC_OSC1			2
222*e60bedd5SSieu Mun Tang #define CLKMGR_CLKSRC_INTOSC			3
223*e60bedd5SSieu Mun Tang #define CLKMGR_CLKSRC_FPGA			4
224*e60bedd5SSieu Mun Tang #define CLKMGR_PLLCX_DIV_MSK			GENMASK(10, 0)
225*e60bedd5SSieu Mun Tang 
226*e60bedd5SSieu Mun Tang #define GET_CLKMGR_CLKSRC(x)			(((x) & CLKMGR_CLKSRC_MASK) >> \
227*e60bedd5SSieu Mun Tang 							CLKMGR_CLKSRC_OFFSET)
228*e60bedd5SSieu Mun Tang 
229*e60bedd5SSieu Mun Tang #define CLKMGR_MAINPLL_NOCDIV_L4MP_MASK		GENMASK(5, 4)
230*e60bedd5SSieu Mun Tang #define CLKMGR_MAINPLL_NOCDIV_L4MP_OFFSET	4
231*e60bedd5SSieu Mun Tang #define GET_CLKMGR_MAINPLL_NOCDIV_L4MP(x)	(((x) & CLKMGR_MAINPLL_NOCDIV_L4MP_MASK) >> \
232*e60bedd5SSieu Mun Tang 						CLKMGR_MAINPLL_NOCDIV_L4MP_OFFSET)
233*e60bedd5SSieu Mun Tang 
234*e60bedd5SSieu Mun Tang #define CLKMGR_MAINPLL_NOCDIV_L4SP_MASK		GENMASK(7, 6)
235*e60bedd5SSieu Mun Tang #define CLKMGR_MAINPLL_NOCDIV_L4SP_OFFSET	6
236*e60bedd5SSieu Mun Tang #define GET_CLKMGR_MAINPLL_NOCDIV_L4SP(x)	(((x) & CLKMGR_MAINPLL_NOCDIV_L4SP_MASK) >> \
237*e60bedd5SSieu Mun Tang 						CLKMGR_MAINPLL_NOCDIV_L4SP_OFFSET)
238*e60bedd5SSieu Mun Tang 
239*e60bedd5SSieu Mun Tang #define CLKMGR_MAINPLL_NOCDIV_SPHY_MASK		GENMASK(17, 16)
240*e60bedd5SSieu Mun Tang #define CLKMGR_MAINPLL_NOCDIV_SPHY_OFFSET	16
241*e60bedd5SSieu Mun Tang #define GET_CLKMGR_MAINPLL_NOCDIV_SPHY(x)	(((x) & CLKMGR_MAINPLL_NOCDIV_SPHY_MASK) >> \
242*e60bedd5SSieu Mun Tang 						CLKMGR_MAINPLL_NOCDIV_SPHY_OFFSET)
243*e60bedd5SSieu Mun Tang 
244*e60bedd5SSieu Mun Tang 
245*e60bedd5SSieu Mun Tang #define CLKMGR_MAINPLL_NOCDIV_L4SYSFREE_MASK	GENMASK(3, 2)
246*e60bedd5SSieu Mun Tang #define CLKMGR_MAINPLL_NOCDIV_L4SYSFREE_OFFSET	2
247*e60bedd5SSieu Mun Tang #define GET_CLKMGR_MAINPLL_NOCDIV_L4SYSFREE(x)	(((x) & CLKMGR_MAINPLL_NOCDIV_L4SYSFREE_MASK) >> \
248*e60bedd5SSieu Mun Tang 						CLKMGR_MAINPLL_NOCDIV_L4SYSFREE_OFFSET)
249*e60bedd5SSieu Mun Tang 
250*e60bedd5SSieu Mun Tang #define CLKMGR_PERPLL_EMAC0_CLK_SRC_MASK	BIT(26)
251*e60bedd5SSieu Mun Tang #define CLKMGR_PERPLL_EMAC0_CLK_SRC_OFFSET	26
252*e60bedd5SSieu Mun Tang #define GET_CLKMGR_PERPLL_EMAC0_CLK_SRC(x)	(((x) & CLKMGR_PERPLL_EMAC0_CLK_SRC_MASK) >> \
253*e60bedd5SSieu Mun Tang 						CLKMGR_PERPLL_EMAC0_CLK_SRC_OFFSET)
254*e60bedd5SSieu Mun Tang 
255*e60bedd5SSieu Mun Tang #define CLKMGR_ALTERA_EMACACTR_CLK_SRC_MASK	GENMASK(18, 16)
256*e60bedd5SSieu Mun Tang #define CLKMGR_ALTERA_EMACACTR_CLK_SRC_OFFSET	16
257*e60bedd5SSieu Mun Tang #define GET_CLKMGR_EMACACTR_CLK_SRC(x)		(((x) & CLKMGR_ALTERA_EMACACTR_CLK_SRC_MASK) >> \
258*e60bedd5SSieu Mun Tang 						CLKMGR_ALTERA_EMACACTR_CLK_SRC_OFFSET)
259*e60bedd5SSieu Mun Tang 
260*e60bedd5SSieu Mun Tang #define CLKMGR_MPU_CLK_ID			0
261*e60bedd5SSieu Mun Tang #define CLKMGR_MPU_PERIPH_CLK_ID		1
262*e60bedd5SSieu Mun Tang #define CLKMGR_L4_MAIN_CLK_ID			2
263*e60bedd5SSieu Mun Tang #define CLKMGR_L4_MP_CLK_ID			3
264*e60bedd5SSieu Mun Tang #define CLKMGR_L4_SP_CLK_ID			4
265*e60bedd5SSieu Mun Tang #define CLKMGR_WDT_CLK_ID			5
266*e60bedd5SSieu Mun Tang #define CLKMGR_UART_CLK_ID			6
267*e60bedd5SSieu Mun Tang #define CLKMGR_EMAC0_CLK_ID			7
268*e60bedd5SSieu Mun Tang #define CLKMGR_EMAC1_CLK_ID			8
269*e60bedd5SSieu Mun Tang #define CLKMGR_EMAC2_CLK_ID			9
270*e60bedd5SSieu Mun Tang #define CLKMGR_EMAC_PTP_CLK_ID			10
271*e60bedd5SSieu Mun Tang #define CLKMGR_SDMMC_CLK_ID			11
272*e60bedd5SSieu Mun Tang 
273*e60bedd5SSieu Mun Tang #define CLKMGR_MAINPLL_BYPASS_ALL		(0xF6)
274*e60bedd5SSieu Mun Tang #define CLKMGR_PERPLL_BYPASS_ALL		(0xEF)
275*e60bedd5SSieu Mun Tang #define CLKMGR_PLLCX_STAT			BIT(29)
276*e60bedd5SSieu Mun Tang #define GET_PLLCX_STAT(x)			((x) & CLKMGR_PLLCX_STAT)
277*e60bedd5SSieu Mun Tang 
278*e60bedd5SSieu Mun Tang #define CLKMGR_MAINPLL_TYPE			(0)
279*e60bedd5SSieu Mun Tang #define CLKMGR_PERPLL_TYPE			(1)
280*e60bedd5SSieu Mun Tang 
281*e60bedd5SSieu Mun Tang #define CLKMGR_MAX_RETRY_COUNT			1000
282*e60bedd5SSieu Mun Tang 
283*e60bedd5SSieu Mun Tang #define CLKMGR_PLLM_MDIV_MASK			GENMASK(9, 0)
284*e60bedd5SSieu Mun Tang #define CLKMGR_PLLGLOB_PD_MASK			BIT(0)
285*e60bedd5SSieu Mun Tang #define CLKMGR_PLLGLOB_RST_MASK			BIT(1)
286*e60bedd5SSieu Mun Tang #define CLKMGR_PLLGLOB_AREFCLKDIV_MASK		GENMASK(11, 8)
287*e60bedd5SSieu Mun Tang #define CLKMGR_PLLGLOB_DREFCLKDIV_MASK		GENMASK(13, 12)
288*e60bedd5SSieu Mun Tang #define CLKMGR_PLLGLOB_REFCLKDIV_MASK		GENMASK(13, 8)
289*e60bedd5SSieu Mun Tang #define CLKMGR_PLLGLOB_MODCLKDIV_MASK		GENMASK(24, 27)
290*e60bedd5SSieu Mun Tang #define CLKMGR_PLLGLOB_AREFCLKDIV_OFFSET	8
291*e60bedd5SSieu Mun Tang #define CLKMGR_PLLGLOB_DREFCLKDIV_OFFSET	12
292*e60bedd5SSieu Mun Tang #define CLKMGR_PLLGLOB_REFCLKDIV_OFFSET		8
293*e60bedd5SSieu Mun Tang #define CLKMGR_PLLGLOB_MODCLKDIV_OFFSET		24
294*e60bedd5SSieu Mun Tang #define CLKMGR_PLLGLOB_VCO_PSRC_MASK		GENMASK(17, 16)
295*e60bedd5SSieu Mun Tang #define CLKMGR_PLLGLOB_VCO_PSRC_OFFSET		16
296*e60bedd5SSieu Mun Tang #define CLKMGR_PLLGLOB_CLR_LOSTLOCK_BYPASS_MASK	BIT(29)
297*e60bedd5SSieu Mun Tang 
298*e60bedd5SSieu Mun Tang #define CLKMGR_VCOCALIB_MSCNT_MASK		GENMASK(23, 16)
299*e60bedd5SSieu Mun Tang #define CLKMGR_VCOCALIB_MSCNT_OFFSET		16
300*e60bedd5SSieu Mun Tang #define CLKMGR_VCOCALIB_HSCNT_MASK		GENMASK(9, 0)
301*e60bedd5SSieu Mun Tang #define CLKMGR_VCOCALIB_MSCNT_CONST		100
302*e60bedd5SSieu Mun Tang #define CLKMGR_VCOCALIB_HSCNT_CONST		4
3031b1a3eb1SJit Loon Lim 
304fa1e92c6SSieu Mun Tang int config_clkmgr_handoff(handoff *hoff_ptr);
305*e60bedd5SSieu Mun Tang uint32_t clkmgr_get_rate(uint32_t clk_id);
306*e60bedd5SSieu Mun Tang 
307*e60bedd5SSieu Mun Tang /* PLL configuration data structure in power-down state */
308*e60bedd5SSieu Mun Tang typedef struct pll_cfg {
309*e60bedd5SSieu Mun Tang 	uint32_t addr;
310*e60bedd5SSieu Mun Tang 	uint32_t data;
311*e60bedd5SSieu Mun Tang 	uint32_t mask;
312*e60bedd5SSieu Mun Tang } pll_cfg_t;
3131b1a3eb1SJit Loon Lim 
3141b1a3eb1SJit Loon Lim #endif
315