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