xref: /arm-trusted-firmware/plat/intel/soc/n5x/include/n5x_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 "socfpga_handoff.h"
11*91f16700Schasinglulu 
12*91f16700Schasinglulu /* MACRO DEFINITION */
13*91f16700Schasinglulu #define SOCFPGA_GLOBAL_TIMER				0xffd01000
14*91f16700Schasinglulu #define SOCFPGA_GLOBAL_TIMER_EN				0x3
15*91f16700Schasinglulu 
16*91f16700Schasinglulu #define CLKMGR_PLLGLOB_VCO_PSRC_MASK			GENMASK(17, 16)
17*91f16700Schasinglulu #define CLKMGR_PLLGLOB_VCO_PSRC_OFFSET			16
18*91f16700Schasinglulu #define CLKMGR_PLLDIV_FDIV_MASK				GENMASK(16, 8)
19*91f16700Schasinglulu #define CLKMGR_PLLDIV_FDIV_OFFSET			8
20*91f16700Schasinglulu #define CLKMGR_PLLDIV_REFCLKDIV_MASK			GENMASK(5, 0)
21*91f16700Schasinglulu #define CLKMGR_PLLDIV_REFCLKDIV_OFFSET			0
22*91f16700Schasinglulu #define CLKMGR_PLLDIV_OUTDIV_QDIV_MASK			GENMASK(26, 24)
23*91f16700Schasinglulu #define CLKMGR_PLLDIV_OUTDIV_QDIV_OFFSET		24
24*91f16700Schasinglulu 
25*91f16700Schasinglulu #define CLKMGR_PLLOUTDIV_C0CNT_MASK			GENMASK(4, 0)
26*91f16700Schasinglulu #define CLKMGR_PLLOUTDIV_C0CNT_OFFSET			0
27*91f16700Schasinglulu #define CLKMGR_PLLOUTDIV_C1CNT_MASK			GENMASK(12, 8)
28*91f16700Schasinglulu #define CLKMGR_PLLOUTDIV_C1CNT_OFFSET			8
29*91f16700Schasinglulu #define CLKMGR_PLLDIV_OUTDIV_QDIV_MASK			GENMASK(26, 24)
30*91f16700Schasinglulu #define CLKMGR_PLLDIV_OUTDIV_QDIV_OFFSET		24
31*91f16700Schasinglulu #define CLKMGR_CLKSRC_MASK				GENMASK(18, 16)
32*91f16700Schasinglulu #define CLKMGR_CLKSRC_OFFSET				16
33*91f16700Schasinglulu #define CLKMGR_NOCDIV_DIVIDER_MASK			GENMASK(1, 0)
34*91f16700Schasinglulu #define CLKMGR_NOCDIV_L4MAIN_OFFSET			0
35*91f16700Schasinglulu 
36*91f16700Schasinglulu #define CLKMGR_INTOSC_HZ				400000000
37*91f16700Schasinglulu #define CLKMGR_VCO_PSRC_EOSC1				0
38*91f16700Schasinglulu #define CLKMGR_VCO_PSRC_INTOSC				1
39*91f16700Schasinglulu #define CLKMGR_VCO_PSRC_F2S				2
40*91f16700Schasinglulu #define CLKMGR_CLKSRC_MAIN				0
41*91f16700Schasinglulu #define CLKMGR_CLKSRC_PER				1
42*91f16700Schasinglulu 
43*91f16700Schasinglulu #define CLKMGR_N5X_BASE					0xffd10000
44*91f16700Schasinglulu #define CLKMGR_MAINPLL_NOCCLK				0x40
45*91f16700Schasinglulu #define CLKMGR_MAINPLL_NOCDIV				0x44
46*91f16700Schasinglulu #define CLKMGR_MAINPLL_PLLGLOB				0x48
47*91f16700Schasinglulu #define CLKMGR_MAINPLL_PLLOUTDIV			0x54
48*91f16700Schasinglulu #define CLKMGR_MAINPLL_PLLDIV				0x50
49*91f16700Schasinglulu #define CLKMGR_PERPLL_PLLGLOB				0x9c
50*91f16700Schasinglulu #define CLKMGR_PERPLL_PLLDIV				0xa4
51*91f16700Schasinglulu #define CLKMGR_PERPLL_PLLOUTDIV				0xa8
52*91f16700Schasinglulu 
53*91f16700Schasinglulu /* FUNCTION DEFINITION */
54*91f16700Schasinglulu uint64_t clk_get_pll_output_hz(void);
55*91f16700Schasinglulu uint64_t get_l4_clk(void);
56*91f16700Schasinglulu uint32_t get_clk_freq(uint32_t psrc_reg);
57*91f16700Schasinglulu uint32_t get_mpu_clk(void);
58*91f16700Schasinglulu uint32_t get_cpu_clk(void);
59*91f16700Schasinglulu 
60*91f16700Schasinglulu #endif
61