xref: /rk3399_ARM-atf/plat/intel/soc/agilex/include/agilex_clock_manager.h (revision 9118bdf4011b5a54fec5c1eb80e1ad99ab7ac4bd)
12f11d548SHadi Asyrafi /*
2f65bdf3aSBenjaminLimJL  * Copyright (c) 2019-2022, Intel Corporation. All rights reserved.
32f11d548SHadi Asyrafi  *
42f11d548SHadi Asyrafi  * SPDX-License-Identifier: BSD-3-Clause
52f11d548SHadi Asyrafi  */
62f11d548SHadi Asyrafi 
72f11d548SHadi Asyrafi #ifndef CLOCKMANAGER_H
82f11d548SHadi Asyrafi #define CLOCKMANAGER_H
92f11d548SHadi Asyrafi 
10328718f2SHadi Asyrafi #include "socfpga_handoff.h"
112f11d548SHadi Asyrafi 
122f11d548SHadi Asyrafi /* Clock Manager Registers */
132f11d548SHadi Asyrafi #define CLKMGR_OFFSET				0xffd10000
142f11d548SHadi Asyrafi 
152f11d548SHadi Asyrafi #define CLKMGR_CTRL				0x0
162f11d548SHadi Asyrafi #define CLKMGR_STAT				0x4
172f11d548SHadi Asyrafi #define CLKMGR_INTRCLR				0x14
182f11d548SHadi Asyrafi 
192f11d548SHadi Asyrafi /* Main PLL Group */
202f11d548SHadi Asyrafi #define CLKMGR_MAINPLL				0xffd10024
212f11d548SHadi Asyrafi #define CLKMGR_MAINPLL_EN			0x0
222f11d548SHadi Asyrafi #define CLKMGR_MAINPLL_BYPASS			0xc
232f11d548SHadi Asyrafi #define CLKMGR_MAINPLL_MPUCLK			0x18
242f11d548SHadi Asyrafi #define CLKMGR_MAINPLL_NOCCLK			0x1c
252f11d548SHadi Asyrafi #define CLKMGR_MAINPLL_NOCDIV			0x20
262f11d548SHadi Asyrafi #define CLKMGR_MAINPLL_PLLGLOB			0x24
272f11d548SHadi Asyrafi #define CLKMGR_MAINPLL_FDBCK			0x28
282f11d548SHadi Asyrafi #define CLKMGR_MAINPLL_MEM			0x2c
292f11d548SHadi Asyrafi #define CLKMGR_MAINPLL_MEMSTAT			0x30
302f11d548SHadi Asyrafi #define CLKMGR_MAINPLL_PLLC0			0x34
312f11d548SHadi Asyrafi #define CLKMGR_MAINPLL_PLLC1			0x38
322f11d548SHadi Asyrafi #define CLKMGR_MAINPLL_VCOCALIB			0x3c
332f11d548SHadi Asyrafi #define CLKMGR_MAINPLL_PLLC2			0x40
342f11d548SHadi Asyrafi #define CLKMGR_MAINPLL_PLLC3			0x44
352f11d548SHadi Asyrafi #define CLKMGR_MAINPLL_PLLM			0x48
36960a12b3SHadi Asyrafi #define CLKMGR_MAINPLL_LOSTLOCK			0x54
372f11d548SHadi Asyrafi 
382f11d548SHadi Asyrafi /* Peripheral PLL Group */
392f11d548SHadi Asyrafi #define CLKMGR_PERPLL				0xffd1007c
402f11d548SHadi Asyrafi #define CLKMGR_PERPLL_EN			0x0
412f11d548SHadi Asyrafi #define CLKMGR_PERPLL_BYPASS			0xc
422f11d548SHadi Asyrafi #define CLKMGR_PERPLL_EMACCTL			0x18
432f11d548SHadi Asyrafi #define CLKMGR_PERPLL_GPIODIV			0x1c
442f11d548SHadi Asyrafi #define CLKMGR_PERPLL_PLLGLOB			0x20
452f11d548SHadi Asyrafi #define CLKMGR_PERPLL_FDBCK			0x24
462f11d548SHadi Asyrafi #define CLKMGR_PERPLL_MEM			0x28
472f11d548SHadi Asyrafi #define CLKMGR_PERPLL_MEMSTAT			0x2c
482f11d548SHadi Asyrafi #define CLKMGR_PERPLL_PLLC0			0x30
492f11d548SHadi Asyrafi #define CLKMGR_PERPLL_PLLC1			0x34
502f11d548SHadi Asyrafi #define CLKMGR_PERPLL_VCOCALIB			0x38
512f11d548SHadi Asyrafi #define CLKMGR_PERPLL_PLLC2			0x3c
522f11d548SHadi Asyrafi #define CLKMGR_PERPLL_PLLC3			0x40
532f11d548SHadi Asyrafi #define CLKMGR_PERPLL_PLLM			0x44
54960a12b3SHadi Asyrafi #define CLKMGR_PERPLL_LOSTLOCK			0x50
552f11d548SHadi Asyrafi 
562f11d548SHadi Asyrafi /* Altera Group */
572f11d548SHadi Asyrafi #define CLKMGR_ALTERA				0xffd100d0
582f11d548SHadi Asyrafi #define CLKMGR_ALTERA_JTAG			0x0
592f11d548SHadi Asyrafi #define CLKMGR_ALTERA_EMACACTR			0x4
602f11d548SHadi Asyrafi #define CLKMGR_ALTERA_EMACBCTR			0x8
612f11d548SHadi Asyrafi #define CLKMGR_ALTERA_EMACPTPCTR		0xc
622f11d548SHadi Asyrafi #define CLKMGR_ALTERA_GPIODBCTR			0x10
632f11d548SHadi Asyrafi #define CLKMGR_ALTERA_SDMMCCTR			0x14
642f11d548SHadi Asyrafi #define CLKMGR_ALTERA_S2FUSER0CTR		0x18
652f11d548SHadi Asyrafi #define CLKMGR_ALTERA_S2FUSER1CTR		0x1c
662f11d548SHadi Asyrafi #define CLKMGR_ALTERA_PSIREFCTR			0x20
672f11d548SHadi Asyrafi #define CLKMGR_ALTERA_EXTCNTRST			0x24
682f11d548SHadi Asyrafi 
692f11d548SHadi Asyrafi /* Membus */
702f11d548SHadi Asyrafi #define CLKMGR_MEM_REQ				BIT(24)
712f11d548SHadi Asyrafi #define CLKMGR_MEM_WR				BIT(25)
722f11d548SHadi Asyrafi #define CLKMGR_MEM_ERR				BIT(26)
732f11d548SHadi Asyrafi #define CLKMGR_MEM_WDAT_OFFSET			16
742f11d548SHadi Asyrafi #define CLKMGR_MEM_ADDR				0x4027
752f11d548SHadi Asyrafi #define CLKMGR_MEM_WDAT				0x80
762f11d548SHadi Asyrafi 
772f11d548SHadi Asyrafi /* Clock Manager Macros */
782f11d548SHadi Asyrafi #define CLKMGR_CTRL_BOOTMODE_SET_MSK		0x00000001
792f11d548SHadi Asyrafi #define CLKMGR_STAT_BUSY_E_BUSY			0x1
802f11d548SHadi Asyrafi #define CLKMGR_STAT_BUSY(x)			(((x) & 0x00000001) >> 0)
812f11d548SHadi Asyrafi #define CLKMGR_STAT_MAINPLLLOCKED(x)		(((x) & 0x00000100) >> 8)
822f11d548SHadi Asyrafi #define CLKMGR_STAT_PERPLLLOCKED(x)		(((x) & 0x00010000) >> 16)
832f11d548SHadi Asyrafi #define CLKMGR_INTRCLR_MAINLOCKLOST_SET_MSK	0x00000004
842f11d548SHadi Asyrafi #define CLKMGR_INTRCLR_PERLOCKLOST_SET_MSK	0x00000008
854e865bd2SHadi Asyrafi #define CLKMGR_INTOSC_HZ			460000000
862f11d548SHadi Asyrafi 
872f11d548SHadi Asyrafi /* Main PLL Macros */
882f11d548SHadi Asyrafi #define CLKMGR_MAINPLL_EN_RESET			0x000000ff
892f11d548SHadi Asyrafi 
902f11d548SHadi Asyrafi /* Peripheral PLL Macros */
912f11d548SHadi Asyrafi #define CLKMGR_PERPLL_EN_RESET			0x00000fff
92aea772ddSTien Hock Loh #define CLKMGR_PERPLL_EN_SDMMCCLK		BIT(5)
932f11d548SHadi Asyrafi #define CLKMGR_PERPLL_GPIODIV_GPIODBCLK_SET(x)	(((x) << 0) & 0x0000ffff)
942f11d548SHadi Asyrafi 
952f11d548SHadi Asyrafi /* Altera Macros */
962f11d548SHadi Asyrafi #define CLKMGR_ALTERA_EXTCNTRST_RESET		0xff
972f11d548SHadi Asyrafi 
984e865bd2SHadi Asyrafi /* Shared Macros */
994e865bd2SHadi Asyrafi #define CLKMGR_PSRC(x)				(((x) & 0x00030000) >> 16)
1004e865bd2SHadi Asyrafi #define CLKMGR_PSRC_MAIN			0
1014e865bd2SHadi Asyrafi #define CLKMGR_PSRC_PER				1
1024e865bd2SHadi Asyrafi 
1034e865bd2SHadi Asyrafi #define CLKMGR_PLLGLOB_PSRC_EOSC1		0x0
1044e865bd2SHadi Asyrafi #define CLKMGR_PLLGLOB_PSRC_INTOSC		0x1
1054e865bd2SHadi Asyrafi #define CLKMGR_PLLGLOB_PSRC_F2S			0x2
1064e865bd2SHadi Asyrafi 
1074e865bd2SHadi Asyrafi #define CLKMGR_PLLM_MDIV(x)			((x) & 0x000003ff)
1084e865bd2SHadi Asyrafi #define CLKMGR_PLLGLOB_PD_SET_MSK		0x00000001
1094e865bd2SHadi Asyrafi #define CLKMGR_PLLGLOB_RST_SET_MSK		0x00000002
1104e865bd2SHadi Asyrafi 
1114e865bd2SHadi Asyrafi #define CLKMGR_PLLGLOB_REFCLKDIV(x)		(((x) & 0x00003f00) >> 8)
1124e865bd2SHadi Asyrafi #define CLKMGR_PLLGLOB_AREFCLKDIV(x)		(((x) & 0x00000f00) >> 8)
1134e865bd2SHadi Asyrafi #define CLKMGR_PLLGLOB_DREFCLKDIV(x)		(((x) & 0x00003000) >> 12)
1144e865bd2SHadi Asyrafi 
1154e865bd2SHadi Asyrafi #define CLKMGR_VCOCALIB_HSCNT_SET(x)		(((x) << 0) & 0x000003ff)
1164e865bd2SHadi Asyrafi #define CLKMGR_VCOCALIB_MSCNT_SET(x)		(((x) << 16) & 0x00ff0000)
1174e865bd2SHadi Asyrafi 
118960a12b3SHadi Asyrafi #define CLKMGR_CLR_LOSTLOCK_BYPASS		0x20000000
1192f11d548SHadi Asyrafi 
1202f11d548SHadi Asyrafi typedef struct {
1212f11d548SHadi Asyrafi 	uint32_t  clk_freq_of_eosc1;
1222f11d548SHadi Asyrafi 	uint32_t  clk_freq_of_f2h_free;
1232f11d548SHadi Asyrafi 	uint32_t  clk_freq_of_cb_intosc_ls;
1242f11d548SHadi Asyrafi } CLOCK_SOURCE_CONFIG;
1252f11d548SHadi Asyrafi 
1262f11d548SHadi Asyrafi void config_clkmgr_handoff(handoff *hoff_ptr);
1274e865bd2SHadi Asyrafi uint32_t get_wdt_clk(void);
1284e865bd2SHadi Asyrafi uint32_t get_uart_clk(void);
1294e865bd2SHadi Asyrafi uint32_t get_mmc_clk(void);
1305f06bffaSJit Loon Lim uint32_t get_mpu_clk(void);
13102a9d70cSSieu Mun Tang uint32_t get_cpu_clk(void);
132*150d2be0SJit Loon Lim uint32_t get_mpu_periph_clk(void);
1332f11d548SHadi Asyrafi 
1342f11d548SHadi Asyrafi #endif
135