xref: /arm-trusted-firmware/plat/intel/soc/agilex/include/agilex_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				0xffd10000
14*91f16700Schasinglulu 
15*91f16700Schasinglulu #define CLKMGR_CTRL				0x0
16*91f16700Schasinglulu #define CLKMGR_STAT				0x4
17*91f16700Schasinglulu #define CLKMGR_INTRCLR				0x14
18*91f16700Schasinglulu 
19*91f16700Schasinglulu /* Main PLL Group */
20*91f16700Schasinglulu #define CLKMGR_MAINPLL				0xffd10024
21*91f16700Schasinglulu #define CLKMGR_MAINPLL_EN			0x0
22*91f16700Schasinglulu #define CLKMGR_MAINPLL_BYPASS			0xc
23*91f16700Schasinglulu #define CLKMGR_MAINPLL_MPUCLK			0x18
24*91f16700Schasinglulu #define CLKMGR_MAINPLL_NOCCLK			0x1c
25*91f16700Schasinglulu #define CLKMGR_MAINPLL_NOCDIV			0x20
26*91f16700Schasinglulu #define CLKMGR_MAINPLL_PLLGLOB			0x24
27*91f16700Schasinglulu #define CLKMGR_MAINPLL_FDBCK			0x28
28*91f16700Schasinglulu #define CLKMGR_MAINPLL_MEM			0x2c
29*91f16700Schasinglulu #define CLKMGR_MAINPLL_MEMSTAT			0x30
30*91f16700Schasinglulu #define CLKMGR_MAINPLL_PLLC0			0x34
31*91f16700Schasinglulu #define CLKMGR_MAINPLL_PLLC1			0x38
32*91f16700Schasinglulu #define CLKMGR_MAINPLL_VCOCALIB			0x3c
33*91f16700Schasinglulu #define CLKMGR_MAINPLL_PLLC2			0x40
34*91f16700Schasinglulu #define CLKMGR_MAINPLL_PLLC3			0x44
35*91f16700Schasinglulu #define CLKMGR_MAINPLL_PLLM			0x48
36*91f16700Schasinglulu #define CLKMGR_MAINPLL_LOSTLOCK			0x54
37*91f16700Schasinglulu 
38*91f16700Schasinglulu /* Peripheral PLL Group */
39*91f16700Schasinglulu #define CLKMGR_PERPLL				0xffd1007c
40*91f16700Schasinglulu #define CLKMGR_PERPLL_EN			0x0
41*91f16700Schasinglulu #define CLKMGR_PERPLL_BYPASS			0xc
42*91f16700Schasinglulu #define CLKMGR_PERPLL_EMACCTL			0x18
43*91f16700Schasinglulu #define CLKMGR_PERPLL_GPIODIV			0x1c
44*91f16700Schasinglulu #define CLKMGR_PERPLL_PLLGLOB			0x20
45*91f16700Schasinglulu #define CLKMGR_PERPLL_FDBCK			0x24
46*91f16700Schasinglulu #define CLKMGR_PERPLL_MEM			0x28
47*91f16700Schasinglulu #define CLKMGR_PERPLL_MEMSTAT			0x2c
48*91f16700Schasinglulu #define CLKMGR_PERPLL_PLLC0			0x30
49*91f16700Schasinglulu #define CLKMGR_PERPLL_PLLC1			0x34
50*91f16700Schasinglulu #define CLKMGR_PERPLL_VCOCALIB			0x38
51*91f16700Schasinglulu #define CLKMGR_PERPLL_PLLC2			0x3c
52*91f16700Schasinglulu #define CLKMGR_PERPLL_PLLC3			0x40
53*91f16700Schasinglulu #define CLKMGR_PERPLL_PLLM			0x44
54*91f16700Schasinglulu #define CLKMGR_PERPLL_LOSTLOCK			0x50
55*91f16700Schasinglulu 
56*91f16700Schasinglulu /* Altera Group */
57*91f16700Schasinglulu #define CLKMGR_ALTERA				0xffd100d0
58*91f16700Schasinglulu #define CLKMGR_ALTERA_JTAG			0x0
59*91f16700Schasinglulu #define CLKMGR_ALTERA_EMACACTR			0x4
60*91f16700Schasinglulu #define CLKMGR_ALTERA_EMACBCTR			0x8
61*91f16700Schasinglulu #define CLKMGR_ALTERA_EMACPTPCTR		0xc
62*91f16700Schasinglulu #define CLKMGR_ALTERA_GPIODBCTR			0x10
63*91f16700Schasinglulu #define CLKMGR_ALTERA_SDMMCCTR			0x14
64*91f16700Schasinglulu #define CLKMGR_ALTERA_S2FUSER0CTR		0x18
65*91f16700Schasinglulu #define CLKMGR_ALTERA_S2FUSER1CTR		0x1c
66*91f16700Schasinglulu #define CLKMGR_ALTERA_PSIREFCTR			0x20
67*91f16700Schasinglulu #define CLKMGR_ALTERA_EXTCNTRST			0x24
68*91f16700Schasinglulu 
69*91f16700Schasinglulu /* Membus */
70*91f16700Schasinglulu #define CLKMGR_MEM_REQ				BIT(24)
71*91f16700Schasinglulu #define CLKMGR_MEM_WR				BIT(25)
72*91f16700Schasinglulu #define CLKMGR_MEM_ERR				BIT(26)
73*91f16700Schasinglulu #define CLKMGR_MEM_WDAT_OFFSET			16
74*91f16700Schasinglulu #define CLKMGR_MEM_ADDR				0x4027
75*91f16700Schasinglulu #define CLKMGR_MEM_WDAT				0x80
76*91f16700Schasinglulu 
77*91f16700Schasinglulu /* Clock Manager Macros */
78*91f16700Schasinglulu #define CLKMGR_CTRL_BOOTMODE_SET_MSK		0x00000001
79*91f16700Schasinglulu #define CLKMGR_STAT_BUSY_E_BUSY			0x1
80*91f16700Schasinglulu #define CLKMGR_STAT_BUSY(x)			(((x) & 0x00000001) >> 0)
81*91f16700Schasinglulu #define CLKMGR_STAT_MAINPLLLOCKED(x)		(((x) & 0x00000100) >> 8)
82*91f16700Schasinglulu #define CLKMGR_STAT_PERPLLLOCKED(x)		(((x) & 0x00010000) >> 16)
83*91f16700Schasinglulu #define CLKMGR_INTRCLR_MAINLOCKLOST_SET_MSK	0x00000004
84*91f16700Schasinglulu #define CLKMGR_INTRCLR_PERLOCKLOST_SET_MSK	0x00000008
85*91f16700Schasinglulu #define CLKMGR_INTOSC_HZ			460000000
86*91f16700Schasinglulu 
87*91f16700Schasinglulu /* Main PLL Macros */
88*91f16700Schasinglulu #define CLKMGR_MAINPLL_EN_RESET			0x000000ff
89*91f16700Schasinglulu 
90*91f16700Schasinglulu /* Peripheral PLL Macros */
91*91f16700Schasinglulu #define CLKMGR_PERPLL_EN_RESET			0x00000fff
92*91f16700Schasinglulu #define CLKMGR_PERPLL_EN_SDMMCCLK		BIT(5)
93*91f16700Schasinglulu #define CLKMGR_PERPLL_GPIODIV_GPIODBCLK_SET(x)	(((x) << 0) & 0x0000ffff)
94*91f16700Schasinglulu 
95*91f16700Schasinglulu /* Altera Macros */
96*91f16700Schasinglulu #define CLKMGR_ALTERA_EXTCNTRST_RESET		0xff
97*91f16700Schasinglulu 
98*91f16700Schasinglulu /* Shared Macros */
99*91f16700Schasinglulu #define CLKMGR_PSRC(x)				(((x) & 0x00030000) >> 16)
100*91f16700Schasinglulu #define CLKMGR_PSRC_MAIN			0
101*91f16700Schasinglulu #define CLKMGR_PSRC_PER				1
102*91f16700Schasinglulu 
103*91f16700Schasinglulu #define CLKMGR_PLLGLOB_PSRC_EOSC1		0x0
104*91f16700Schasinglulu #define CLKMGR_PLLGLOB_PSRC_INTOSC		0x1
105*91f16700Schasinglulu #define CLKMGR_PLLGLOB_PSRC_F2S			0x2
106*91f16700Schasinglulu 
107*91f16700Schasinglulu #define CLKMGR_PLLM_MDIV(x)			((x) & 0x000003ff)
108*91f16700Schasinglulu #define CLKMGR_PLLGLOB_PD_SET_MSK		0x00000001
109*91f16700Schasinglulu #define CLKMGR_PLLGLOB_RST_SET_MSK		0x00000002
110*91f16700Schasinglulu 
111*91f16700Schasinglulu #define CLKMGR_PLLGLOB_REFCLKDIV(x)		(((x) & 0x00003f00) >> 8)
112*91f16700Schasinglulu #define CLKMGR_PLLGLOB_AREFCLKDIV(x)		(((x) & 0x00000f00) >> 8)
113*91f16700Schasinglulu #define CLKMGR_PLLGLOB_DREFCLKDIV(x)		(((x) & 0x00003000) >> 12)
114*91f16700Schasinglulu 
115*91f16700Schasinglulu #define CLKMGR_VCOCALIB_HSCNT_SET(x)		(((x) << 0) & 0x000003ff)
116*91f16700Schasinglulu #define CLKMGR_VCOCALIB_MSCNT_SET(x)		(((x) << 16) & 0x00ff0000)
117*91f16700Schasinglulu 
118*91f16700Schasinglulu #define CLKMGR_CLR_LOSTLOCK_BYPASS		0x20000000
119*91f16700Schasinglulu 
120*91f16700Schasinglulu typedef struct {
121*91f16700Schasinglulu 	uint32_t  clk_freq_of_eosc1;
122*91f16700Schasinglulu 	uint32_t  clk_freq_of_f2h_free;
123*91f16700Schasinglulu 	uint32_t  clk_freq_of_cb_intosc_ls;
124*91f16700Schasinglulu } CLOCK_SOURCE_CONFIG;
125*91f16700Schasinglulu 
126*91f16700Schasinglulu void config_clkmgr_handoff(handoff *hoff_ptr);
127*91f16700Schasinglulu uint32_t get_wdt_clk(void);
128*91f16700Schasinglulu uint32_t get_uart_clk(void);
129*91f16700Schasinglulu uint32_t get_mmc_clk(void);
130*91f16700Schasinglulu uint32_t get_mpu_clk(void);
131*91f16700Schasinglulu uint32_t get_cpu_clk(void);
132*91f16700Schasinglulu 
133*91f16700Schasinglulu #endif
134