xref: /arm-trusted-firmware/plat/intel/soc/agilex5/include/agilex5_clock_manager.h (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu /*
2*91f16700Schasinglulu  * Copyright (c) 2019-2022, Intel Corporation. All rights reserved.
3*91f16700Schasinglulu  *
4*91f16700Schasinglulu  * SPDX-License-Identifier: BSD-3-Clause
5*91f16700Schasinglulu  */
6*91f16700Schasinglulu 
7*91f16700Schasinglulu #ifndef CLOCKMANAGER_H
8*91f16700Schasinglulu #define CLOCKMANAGER_H
9*91f16700Schasinglulu 
10*91f16700Schasinglulu #include "socfpga_handoff.h"
11*91f16700Schasinglulu 
12*91f16700Schasinglulu /* Clock Manager Registers */
13*91f16700Schasinglulu #define CLKMGR_OFFSET					0x10d10000
14*91f16700Schasinglulu 
15*91f16700Schasinglulu #define CLKMGR_CTRL					0x0
16*91f16700Schasinglulu #define CLKMGR_STAT					0x4
17*91f16700Schasinglulu #define CLKMGR_TESTIOCTROL				0x8
18*91f16700Schasinglulu #define CLKMGR_INTRGEN					0xc
19*91f16700Schasinglulu #define CLKMGR_INTRMSK					0x10
20*91f16700Schasinglulu #define CLKMGR_INTRCLR					0x14
21*91f16700Schasinglulu #define CLKMGR_INTRSTS					0x18
22*91f16700Schasinglulu #define CLKMGR_INTRSTK					0x1c
23*91f16700Schasinglulu #define CLKMGR_INTRRAW					0x20
24*91f16700Schasinglulu 
25*91f16700Schasinglulu /* Main PLL Group */
26*91f16700Schasinglulu #define CLKMGR_MAINPLL					0x10d10024
27*91f16700Schasinglulu #define CLKMGR_MAINPLL_EN				0x0
28*91f16700Schasinglulu #define CLKMGR_MAINPLL_ENS				0x4
29*91f16700Schasinglulu #define CLKMGR_MAINPLL_BYPASS				0xc
30*91f16700Schasinglulu #define CLKMGR_MAINPLL_BYPASSS				0x10
31*91f16700Schasinglulu #define CLKMGR_MAINPLL_BYPASSR				0x14
32*91f16700Schasinglulu #define CLKMGR_MAINPLL_NOCCLK				0x1c
33*91f16700Schasinglulu #define CLKMGR_MAINPLL_NOCDIV				0x20
34*91f16700Schasinglulu #define CLKMGR_MAINPLL_PLLGLOB				0x24
35*91f16700Schasinglulu #define CLKMGR_MAINPLL_FDBCK				0x28
36*91f16700Schasinglulu #define CLKMGR_MAINPLL_MEM				0x2c
37*91f16700Schasinglulu #define CLKMGR_MAINPLL_MEMSTAT				0x30
38*91f16700Schasinglulu #define CLKMGR_MAINPLL_VCOCALIB				0x34
39*91f16700Schasinglulu #define CLKMGR_MAINPLL_PLLC0				0x38
40*91f16700Schasinglulu #define CLKMGR_MAINPLL_PLLC1				0x3c
41*91f16700Schasinglulu #define CLKMGR_MAINPLL_PLLC2				0x40
42*91f16700Schasinglulu #define CLKMGR_MAINPLL_PLLC3				0x44
43*91f16700Schasinglulu #define CLKMGR_MAINPLL_PLLM				0x48
44*91f16700Schasinglulu #define CLKMGR_MAINPLL_FHOP				0x4c
45*91f16700Schasinglulu #define CLKMGR_MAINPLL_SSC				0x50
46*91f16700Schasinglulu #define CLKMGR_MAINPLL_LOSTLOCK				0x54
47*91f16700Schasinglulu 
48*91f16700Schasinglulu /* Peripheral PLL Group */
49*91f16700Schasinglulu #define CLKMGR_PERPLL					0x10d1007c
50*91f16700Schasinglulu #define CLKMGR_PERPLL_EN				0x0
51*91f16700Schasinglulu #define CLKMGR_PERPLL_ENS				0x4
52*91f16700Schasinglulu #define CLKMGR_PERPLL_BYPASS				0xc
53*91f16700Schasinglulu #define CLKMGR_PERPLL_EMACCTL				0x18
54*91f16700Schasinglulu #define CLKMGR_PERPLL_GPIODIV				0x1c
55*91f16700Schasinglulu #define CLKMGR_PERPLL_PLLGLOB				0x20
56*91f16700Schasinglulu #define CLKMGR_PERPLL_FDBCK				0x24
57*91f16700Schasinglulu #define CLKMGR_PERPLL_MEM				0x28
58*91f16700Schasinglulu #define CLKMGR_PERPLL_MEMSTAT				0x2c
59*91f16700Schasinglulu #define CLKMGR_PERPLL_PLLC0				0x30
60*91f16700Schasinglulu #define CLKMGR_PERPLL_PLLC1				0x34
61*91f16700Schasinglulu #define CLKMGR_PERPLL_VCOCALIB				0x38
62*91f16700Schasinglulu #define CLKMGR_PERPLL_PLLC2				0x3c
63*91f16700Schasinglulu #define CLKMGR_PERPLL_PLLC3				0x40
64*91f16700Schasinglulu #define CLKMGR_PERPLL_PLLM				0x44
65*91f16700Schasinglulu #define CLKMGR_PERPLL_LOSTLOCK				0x50
66*91f16700Schasinglulu 
67*91f16700Schasinglulu /* Altera Group */
68*91f16700Schasinglulu #define CLKMGR_ALTERA					0x10d100d0
69*91f16700Schasinglulu #define CLKMGR_ALTERA_JTAG				0x0
70*91f16700Schasinglulu #define CLKMGR_ALTERA_EMACACTR				0x4
71*91f16700Schasinglulu #define CLKMGR_ALTERA_EMACBCTR				0x8
72*91f16700Schasinglulu #define CLKMGR_ALTERA_EMACPTPCTR			0xc
73*91f16700Schasinglulu #define CLKMGR_ALTERA_GPIODBCTR				0x10
74*91f16700Schasinglulu #define CLKMGR_ALTERA_S2FUSER0CTR			0x18
75*91f16700Schasinglulu #define CLKMGR_ALTERA_S2FUSER1CTR			0x1c
76*91f16700Schasinglulu #define CLKMGR_ALTERA_PSIREFCTR				0x20
77*91f16700Schasinglulu #define CLKMGR_ALTERA_EXTCNTRST				0x24
78*91f16700Schasinglulu #define CLKMGR_ALTERA_USB31CTR				0x28
79*91f16700Schasinglulu #define CLKMGR_ALTERA_DSUCTR				0x2c
80*91f16700Schasinglulu #define CLKMGR_ALTERA_CORE01CTR				0x30
81*91f16700Schasinglulu #define CLKMGR_ALTERA_CORE23CTR				0x34
82*91f16700Schasinglulu #define CLKMGR_ALTERA_CORE2CTR				0x38
83*91f16700Schasinglulu #define CLKMGR_ALTERA_CORE3CTR				0x3c
84*91f16700Schasinglulu 
85*91f16700Schasinglulu /* Membus */
86*91f16700Schasinglulu #define CLKMGR_MEM_REQ					BIT(24)
87*91f16700Schasinglulu #define CLKMGR_MEM_WR					BIT(25)
88*91f16700Schasinglulu #define CLKMGR_MEM_ERR					BIT(26)
89*91f16700Schasinglulu #define CLKMGR_MEM_WDAT_OFFSET				16
90*91f16700Schasinglulu #define CLKMGR_MEM_ADDR					0x4027
91*91f16700Schasinglulu #define CLKMGR_MEM_WDAT					0x80
92*91f16700Schasinglulu 
93*91f16700Schasinglulu /* Clock Manager Macros */
94*91f16700Schasinglulu #define CLKMGR_CTRL_BOOTMODE_SET_MSK			0x00000001
95*91f16700Schasinglulu #define CLKMGR_STAT_BUSY_E_BUSY				0x1
96*91f16700Schasinglulu #define CLKMGR_STAT_BUSY(x)				(((x) & 0x00000001) >> 0)
97*91f16700Schasinglulu #define CLKMGR_STAT_MAINPLLLOCKED(x)			(((x) & 0x00000100) >> 8)
98*91f16700Schasinglulu #define CLKMGR_STAT_PERPLLLOCKED(x)			(((x) & 0x00010000) >> 16)
99*91f16700Schasinglulu #define CLKMGR_INTRCLR_MAINLOCKLOST_SET_MSK		0x00000004
100*91f16700Schasinglulu #define CLKMGR_INTRCLR_PERLOCKLOST_SET_MSK		0x00000008
101*91f16700Schasinglulu #define CLKMGR_INTOSC_HZ				460000000
102*91f16700Schasinglulu 
103*91f16700Schasinglulu /* Main PLL Macros */
104*91f16700Schasinglulu #define CLKMGR_MAINPLL_EN_RESET				0x0000005e
105*91f16700Schasinglulu #define CLKMGR_MAINPLL_ENS_RESET			0x0000005e
106*91f16700Schasinglulu 
107*91f16700Schasinglulu /* Peripheral PLL Macros */
108*91f16700Schasinglulu #define CLKMGR_PERPLL_EN_RESET				0x040007FF
109*91f16700Schasinglulu #define CLKMGR_PERPLL_ENS_RESET			0x040007FF
110*91f16700Schasinglulu 
111*91f16700Schasinglulu #define CLKMGR_PERPLL_EN_SDMMCCLK			BIT(5)
112*91f16700Schasinglulu #define CLKMGR_PERPLL_GPIODIV_GPIODBCLK_SET(x)		(((x) << 0) & 0x0000ffff)
113*91f16700Schasinglulu 
114*91f16700Schasinglulu /* Altera Macros */
115*91f16700Schasinglulu #define CLKMGR_ALTERA_EXTCNTRST_RESET			0xff
116*91f16700Schasinglulu 
117*91f16700Schasinglulu /* Shared Macros */
118*91f16700Schasinglulu #define CLKMGR_PSRC(x)					(((x) & 0x00030000) >> 16)
119*91f16700Schasinglulu #define CLKMGR_PSRC_MAIN				0
120*91f16700Schasinglulu #define CLKMGR_PSRC_PER					1
121*91f16700Schasinglulu 
122*91f16700Schasinglulu #define CLKMGR_PLLGLOB_PSRC_EOSC1			0x0
123*91f16700Schasinglulu #define CLKMGR_PLLGLOB_PSRC_INTOSC			0x1
124*91f16700Schasinglulu #define CLKMGR_PLLGLOB_PSRC_F2S				0x2
125*91f16700Schasinglulu 
126*91f16700Schasinglulu #define CLKMGR_PLLM_MDIV(x)				((x) & 0x000003ff)
127*91f16700Schasinglulu #define CLKMGR_PLLGLOB_PD_SET_MSK			0x00000001
128*91f16700Schasinglulu #define CLKMGR_PLLGLOB_RST_SET_MSK			0x00000002
129*91f16700Schasinglulu 
130*91f16700Schasinglulu #define CLKMGR_PLLGLOB_REFCLKDIV(x)			(((x) & 0x00003f00) >> 8)
131*91f16700Schasinglulu #define CLKMGR_PLLGLOB_AREFCLKDIV(x)			(((x) & 0x00000f00) >> 8)
132*91f16700Schasinglulu #define CLKMGR_PLLGLOB_DREFCLKDIV(x)			(((x) & 0x00003000) >> 12)
133*91f16700Schasinglulu 
134*91f16700Schasinglulu #define CLKMGR_VCOCALIB_HSCNT_SET(x)			(((x) << 0) & 0x000003ff)
135*91f16700Schasinglulu #define CLKMGR_VCOCALIB_MSCNT_SET(x)			(((x) << 16) & 0x00ff0000)
136*91f16700Schasinglulu 
137*91f16700Schasinglulu #define CLKMGR_CLR_LOSTLOCK_BYPASS			0x20000000
138*91f16700Schasinglulu 
139*91f16700Schasinglulu typedef struct {
140*91f16700Schasinglulu 	uint32_t  clk_freq_of_eosc1;
141*91f16700Schasinglulu 	uint32_t  clk_freq_of_f2h_free;
142*91f16700Schasinglulu 	uint32_t  clk_freq_of_cb_intosc_ls;
143*91f16700Schasinglulu } CLOCK_SOURCE_CONFIG;
144*91f16700Schasinglulu 
145*91f16700Schasinglulu void config_clkmgr_handoff(handoff *hoff_ptr);
146*91f16700Schasinglulu uint32_t get_wdt_clk(void);
147*91f16700Schasinglulu uint32_t get_uart_clk(void);
148*91f16700Schasinglulu uint32_t get_mmc_clk(void);
149*91f16700Schasinglulu 
150*91f16700Schasinglulu #endif
151