xref: /rk3399_ARM-atf/plat/intel/soc/n5x/include/n5x_clock_manager.h (revision 398509447bff78a67c8de6e73684a875005a056d)
102a9d70cSSieu Mun Tang /*
202a9d70cSSieu Mun Tang  * Copyright (c) 2019-2023, Intel Corporation. All rights reserved.
3*b3d28508SSieu Mun Tang  * Copyright (c) 2024, Altera Corporation. All rights reserved.
402a9d70cSSieu Mun Tang  *
502a9d70cSSieu Mun Tang  * SPDX-License-Identifier: BSD-3-Clause
602a9d70cSSieu Mun Tang  */
702a9d70cSSieu Mun Tang 
8150d2be0SJit Loon Lim #ifndef N5X_SOCFPGA_CLOCKMANAGER_H
9150d2be0SJit Loon Lim #define N5X_SOCFPGA_CLOCKMANAGER_H
1002a9d70cSSieu Mun Tang 
1102a9d70cSSieu Mun Tang 
1202a9d70cSSieu Mun Tang /* MACRO DEFINITION */
1302a9d70cSSieu Mun Tang #define SOCFPGA_GLOBAL_TIMER_EN				0x3
1402a9d70cSSieu Mun Tang 
1502a9d70cSSieu Mun Tang #define CLKMGR_PLLGLOB_VCO_PSRC_MASK			GENMASK(17, 16)
1602a9d70cSSieu Mun Tang #define CLKMGR_PLLGLOB_VCO_PSRC_OFFSET			16
1702a9d70cSSieu Mun Tang #define CLKMGR_PLLDIV_FDIV_MASK				GENMASK(16, 8)
1802a9d70cSSieu Mun Tang #define CLKMGR_PLLDIV_FDIV_OFFSET			8
1902a9d70cSSieu Mun Tang #define CLKMGR_PLLDIV_REFCLKDIV_MASK			GENMASK(5, 0)
2002a9d70cSSieu Mun Tang #define CLKMGR_PLLDIV_REFCLKDIV_OFFSET			0
2102a9d70cSSieu Mun Tang #define CLKMGR_PLLDIV_OUTDIV_QDIV_MASK			GENMASK(26, 24)
2202a9d70cSSieu Mun Tang #define CLKMGR_PLLDIV_OUTDIV_QDIV_OFFSET		24
2302a9d70cSSieu Mun Tang 
245f06bffaSJit Loon Lim #define CLKMGR_PLLOUTDIV_C0CNT_MASK			GENMASK(4, 0)
255f06bffaSJit Loon Lim #define CLKMGR_PLLOUTDIV_C0CNT_OFFSET			0
2602a9d70cSSieu Mun Tang #define CLKMGR_PLLOUTDIV_C1CNT_MASK			GENMASK(12, 8)
2702a9d70cSSieu Mun Tang #define CLKMGR_PLLOUTDIV_C1CNT_OFFSET			8
2802a9d70cSSieu Mun Tang #define CLKMGR_PLLDIV_OUTDIV_QDIV_MASK			GENMASK(26, 24)
2902a9d70cSSieu Mun Tang #define CLKMGR_PLLDIV_OUTDIV_QDIV_OFFSET		24
3002a9d70cSSieu Mun Tang #define CLKMGR_CLKSRC_MASK				GENMASK(18, 16)
3102a9d70cSSieu Mun Tang #define CLKMGR_CLKSRC_OFFSET				16
3202a9d70cSSieu Mun Tang #define CLKMGR_NOCDIV_DIVIDER_MASK			GENMASK(1, 0)
3302a9d70cSSieu Mun Tang #define CLKMGR_NOCDIV_L4MAIN_OFFSET			0
3402a9d70cSSieu Mun Tang 
3502a9d70cSSieu Mun Tang #define CLKMGR_INTOSC_HZ				400000000
3602a9d70cSSieu Mun Tang #define CLKMGR_VCO_PSRC_EOSC1				0
3702a9d70cSSieu Mun Tang #define CLKMGR_VCO_PSRC_INTOSC				1
3802a9d70cSSieu Mun Tang #define CLKMGR_VCO_PSRC_F2S				2
3902a9d70cSSieu Mun Tang #define CLKMGR_CLKSRC_MAIN				0
4002a9d70cSSieu Mun Tang #define CLKMGR_CLKSRC_PER				1
4102a9d70cSSieu Mun Tang 
4202a9d70cSSieu Mun Tang #define CLKMGR_N5X_BASE					0xffd10000
4302a9d70cSSieu Mun Tang #define CLKMGR_MAINPLL_NOCCLK				0x40
4402a9d70cSSieu Mun Tang #define CLKMGR_MAINPLL_NOCDIV				0x44
4502a9d70cSSieu Mun Tang #define CLKMGR_MAINPLL_PLLGLOB				0x48
4602a9d70cSSieu Mun Tang #define CLKMGR_MAINPLL_PLLOUTDIV			0x54
4702a9d70cSSieu Mun Tang #define CLKMGR_MAINPLL_PLLDIV				0x50
4802a9d70cSSieu Mun Tang #define CLKMGR_PERPLL_PLLGLOB				0x9c
4902a9d70cSSieu Mun Tang #define CLKMGR_PERPLL_PLLDIV				0xa4
5002a9d70cSSieu Mun Tang #define CLKMGR_PERPLL_PLLOUTDIV				0xa8
5102a9d70cSSieu Mun Tang 
5202a9d70cSSieu Mun Tang /* FUNCTION DEFINITION */
5302a9d70cSSieu Mun Tang uint64_t clk_get_pll_output_hz(void);
5402a9d70cSSieu Mun Tang uint64_t get_l4_clk(void);
5502a9d70cSSieu Mun Tang uint32_t get_clk_freq(uint32_t psrc_reg);
565f06bffaSJit Loon Lim uint32_t get_mpu_clk(void);
5702a9d70cSSieu Mun Tang uint32_t get_cpu_clk(void);
58150d2be0SJit Loon Lim uint32_t get_mpu_periph_clk(void);
5902a9d70cSSieu Mun Tang 
60150d2be0SJit Loon Lim #endif /* N5X_SOCFPGA_CLOCKMANAGER_H */
61