xref: /arm-trusted-firmware/plat/intel/soc/stratix10/include/s10_clock_manager.h (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu /*
2*91f16700Schasinglulu  * Copyright (c) 2019-2023, 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 "s10_system_manager.h"
11*91f16700Schasinglulu #include "socfpga_handoff.h"
12*91f16700Schasinglulu 
13*91f16700Schasinglulu #define ALT_CLKMGR				0xffd10000
14*91f16700Schasinglulu 
15*91f16700Schasinglulu #define ALT_CLKMGR_CTRL				0x0
16*91f16700Schasinglulu #define ALT_CLKMGR_STAT				0x4
17*91f16700Schasinglulu #define ALT_CLKMGR_INTRCLR			0x14
18*91f16700Schasinglulu #define ALT_CLKMGR_INTRCLR_MAINLOCKLOST_SET_MSK	0x00000004
19*91f16700Schasinglulu #define ALT_CLKMGR_INTRCLR_PERLOCKLOST_SET_MSK	0x00000008
20*91f16700Schasinglulu 
21*91f16700Schasinglulu #define ALT_CLKMGR_CTRL_BOOTMODE_SET_MSK	0x00000001
22*91f16700Schasinglulu #define ALT_CLKMGR_STAT_BUSY_E_BUSY		0x1
23*91f16700Schasinglulu #define ALT_CLKMGR_STAT_BUSY(x)			(((x) & 0x00000001) >> 0)
24*91f16700Schasinglulu #define ALT_CLKMGR_STAT_MAINPLLLOCKED(x)	(((x) & 0x00000100) >> 8)
25*91f16700Schasinglulu #define ALT_CLKMGR_STAT_PERPLLLOCKED(x)		(((x) & 0x00000200) >> 9)
26*91f16700Schasinglulu 
27*91f16700Schasinglulu #define ALT_CLKMGR_MAINPLL			0xffd10030
28*91f16700Schasinglulu #define ALT_CLKMGR_MAINPLL_EN			0x0
29*91f16700Schasinglulu #define ALT_CLKMGR_MAINPLL_BYPASS		0xc
30*91f16700Schasinglulu #define ALT_CLKMGR_MAINPLL_MPUCLK		0x18
31*91f16700Schasinglulu #define ALT_CLKMGR_MAINPLL_NOCCLK		0x1c
32*91f16700Schasinglulu #define ALT_CLKMGR_MAINPLL_CNTR2CLK		0x20
33*91f16700Schasinglulu #define ALT_CLKMGR_MAINPLL_CNTR3CLK		0x24
34*91f16700Schasinglulu #define ALT_CLKMGR_MAINPLL_CNTR4CLK		0x28
35*91f16700Schasinglulu #define ALT_CLKMGR_MAINPLL_CNTR5CLK		0x2c
36*91f16700Schasinglulu #define ALT_CLKMGR_MAINPLL_CNTR6CLK		0x30
37*91f16700Schasinglulu #define ALT_CLKMGR_MAINPLL_CNTR7CLK		0x34
38*91f16700Schasinglulu #define ALT_CLKMGR_MAINPLL_CNTR8CLK		0x38
39*91f16700Schasinglulu #define ALT_CLKMGR_MAINPLL_CNTR9CLK		0x3c
40*91f16700Schasinglulu #define ALT_CLKMGR_MAINPLL_NOCDIV		0x40
41*91f16700Schasinglulu #define ALT_CLKMGR_MAINPLL_PLLGLOB		0x44
42*91f16700Schasinglulu #define ALT_CLKMGR_MAINPLL_FDBCK		0x48
43*91f16700Schasinglulu #define ALT_CLKMGR_MAINPLL_PLLC0		0x54
44*91f16700Schasinglulu #define ALT_CLKMGR_MAINPLL_PLLC1		0x58
45*91f16700Schasinglulu #define ALT_CLKMGR_MAINPLL_VCOCALIB		0x5c
46*91f16700Schasinglulu #define ALT_CLKMGR_MAINPLL_EN_RESET		0x000000ff
47*91f16700Schasinglulu #define ALT_CLKMGR_MAINPLL_FDBCK_MDIV(x)	(((x) & 0xff000000) >> 24)
48*91f16700Schasinglulu #define ALT_CLKMGR_MAINPLL_PLLGLOB_PD_SET_MSK	0x00000001
49*91f16700Schasinglulu #define ALT_CLKMGR_MAINPLL_PLLGLOB_REFCLKDIV(x)	(((x) & 0x00003f00) >> 8)
50*91f16700Schasinglulu #define ALT_CLKMGR_MAINPLL_PLLGLOB_RST_SET_MSK	0x00000002
51*91f16700Schasinglulu #define ALT_CLKMGR_MAINPLL_VCOCALIB_HSCNT_SET(x) (((x) << 0) & 0x000000ff)
52*91f16700Schasinglulu #define ALT_CLKMGR_MAINPLL_VCOCALIB_MSCNT_SET(x) (((x) << 9) & 0x0001fe00)
53*91f16700Schasinglulu 
54*91f16700Schasinglulu #define ALT_CLKMGR_PSRC(x)			(((x) & 0x00030000) >> 16)
55*91f16700Schasinglulu #define ALT_CLKMGR_SRC_MAIN			0
56*91f16700Schasinglulu #define ALT_CLKMGR_SRC_PER			1
57*91f16700Schasinglulu 
58*91f16700Schasinglulu #define ALT_CLKMGR_PLLGLOB_PSRC_EOSC1		0x0
59*91f16700Schasinglulu #define ALT_CLKMGR_PLLGLOB_PSRC_INTOSC		0x1
60*91f16700Schasinglulu #define ALT_CLKMGR_PLLGLOB_PSRC_F2S		0x2
61*91f16700Schasinglulu 
62*91f16700Schasinglulu #define ALT_CLKMGR_PERPLL			0xffd100a4
63*91f16700Schasinglulu #define ALT_CLKMGR_PERPLL_EN			0x0
64*91f16700Schasinglulu #define ALT_CLKMGR_PERPLL_EN_SDMMCCLK		BIT(5)
65*91f16700Schasinglulu #define ALT_CLKMGR_PERPLL_BYPASS		0xc
66*91f16700Schasinglulu #define ALT_CLKMGR_PERPLL_CNTR2CLK		0x18
67*91f16700Schasinglulu #define ALT_CLKMGR_PERPLL_CNTR3CLK		0x1c
68*91f16700Schasinglulu #define ALT_CLKMGR_PERPLL_CNTR4CLK		0x20
69*91f16700Schasinglulu #define ALT_CLKMGR_PERPLL_CNTR5CLK		0x24
70*91f16700Schasinglulu #define ALT_CLKMGR_PERPLL_CNTR6CLK		0x28
71*91f16700Schasinglulu #define ALT_CLKMGR_PERPLL_CNTR7CLK		0x2c
72*91f16700Schasinglulu #define ALT_CLKMGR_PERPLL_CNTR8CLK		0x30
73*91f16700Schasinglulu #define ALT_CLKMGR_PERPLL_CNTR9CLK		0x34
74*91f16700Schasinglulu #define ALT_CLKMGR_PERPLL_GPIODIV		0x3c
75*91f16700Schasinglulu #define ALT_CLKMGR_PERPLL_EMACCTL		0x38
76*91f16700Schasinglulu #define ALT_CLKMGR_PERPLL_PLLGLOB		0x40
77*91f16700Schasinglulu #define ALT_CLKMGR_PERPLL_FDBCK			0x44
78*91f16700Schasinglulu #define ALT_CLKMGR_PERPLL_PLLC0			0x50
79*91f16700Schasinglulu #define ALT_CLKMGR_PERPLL_PLLC1			0x54
80*91f16700Schasinglulu #define ALT_CLKMGR_PERPLL_EN_RESET		0x00000fff
81*91f16700Schasinglulu #define ALT_CLKMGR_PERPLL_FDBCK_MDIV(x)		(((x) & 0xff000000) >> 24)
82*91f16700Schasinglulu #define ALT_CLKMGR_PERPLL_GPIODIV_GPIODBCLK_SET(x) (((x) << 0) & 0x0000ffff)
83*91f16700Schasinglulu #define ALT_CLKMGR_PERPLL_PLLGLOB_PD_SET_MSK	0x00000001
84*91f16700Schasinglulu #define ALT_CLKMGR_PERPLL_PLLGLOB_REFCLKDIV(x)	(((x) & 0x00003f00) >> 8)
85*91f16700Schasinglulu #define ALT_CLKMGR_PERPLL_PLLGLOB_REFCLKDIV_SET(x) (((x) << 8) & 0x00003f00)
86*91f16700Schasinglulu #define ALT_CLKMGR_PERPLL_PLLGLOB_RST_SET_MSK	0x00000002
87*91f16700Schasinglulu #define ALT_CLKMGR_PERPLL_VCOCALIB_HSCNT_SET(x) (((x) << 0) & 0x000000ff)
88*91f16700Schasinglulu #define ALT_CLKMGR_PERPLL_VCOCALIB_MSCNT_SET(x) (((x) << 9) & 0x0001fe00)
89*91f16700Schasinglulu #define ALT_CLKMGR_PERPLL_VCOCALIB		0x58
90*91f16700Schasinglulu 
91*91f16700Schasinglulu #define ALT_CLKMGR_INTOSC_HZ			460000000
92*91f16700Schasinglulu 
93*91f16700Schasinglulu void config_clkmgr_handoff(handoff *hoff_ptr);
94*91f16700Schasinglulu uint32_t get_wdt_clk(void);
95*91f16700Schasinglulu uint32_t get_uart_clk(void);
96*91f16700Schasinglulu uint32_t get_mmc_clk(void);
97*91f16700Schasinglulu uint32_t get_l3_clk(uint32_t ref_clk);
98*91f16700Schasinglulu uint32_t get_ref_clk(uint32_t pllglob);
99*91f16700Schasinglulu uint32_t get_cpu_clk(void);
100*91f16700Schasinglulu 
101*91f16700Schasinglulu #endif
102