xref: /rk3399_rockchip-uboot/arch/arm/mach-socfpga/include/mach/clock_manager_arria10.h (revision 753a4dde970c2bc9022321f1093e544e3a150f6e)
1*177ba1f9SLey Foon Tan /*
2*177ba1f9SLey Foon Tan  * Copyright (C) 2016-2017 Intel Corporation
3*177ba1f9SLey Foon Tan  *
4*177ba1f9SLey Foon Tan  * SPDX-License-Identifier:	GPL-2.0
5*177ba1f9SLey Foon Tan  */
6*177ba1f9SLey Foon Tan 
7*177ba1f9SLey Foon Tan #ifndef CLOCK_MANAGER_ARRIA10
8*177ba1f9SLey Foon Tan #define CLOCK_MANAGER_ARRIA10
9*177ba1f9SLey Foon Tan 
10*177ba1f9SLey Foon Tan #ifndef __ASSEMBLER__
11*177ba1f9SLey Foon Tan 
12*177ba1f9SLey Foon Tan struct socfpga_clock_manager_main_pll {
13*177ba1f9SLey Foon Tan 	u32  vco0;
14*177ba1f9SLey Foon Tan 	u32  vco1;
15*177ba1f9SLey Foon Tan 	u32  en;
16*177ba1f9SLey Foon Tan 	u32  ens;
17*177ba1f9SLey Foon Tan 	u32  enr;
18*177ba1f9SLey Foon Tan 	u32  bypass;
19*177ba1f9SLey Foon Tan 	u32  bypasss;
20*177ba1f9SLey Foon Tan 	u32  bypassr;
21*177ba1f9SLey Foon Tan 	u32  mpuclk;
22*177ba1f9SLey Foon Tan 	u32  nocclk;
23*177ba1f9SLey Foon Tan 	u32  cntr2clk;
24*177ba1f9SLey Foon Tan 	u32  cntr3clk;
25*177ba1f9SLey Foon Tan 	u32  cntr4clk;
26*177ba1f9SLey Foon Tan 	u32  cntr5clk;
27*177ba1f9SLey Foon Tan 	u32  cntr6clk;
28*177ba1f9SLey Foon Tan 	u32  cntr7clk;
29*177ba1f9SLey Foon Tan 	u32  cntr8clk;
30*177ba1f9SLey Foon Tan 	u32  cntr9clk;
31*177ba1f9SLey Foon Tan 	u32  pad_0x48_0x5b[5];
32*177ba1f9SLey Foon Tan 	u32  cntr15clk;
33*177ba1f9SLey Foon Tan 	u32  outrst;
34*177ba1f9SLey Foon Tan 	u32  outrststat;
35*177ba1f9SLey Foon Tan 	u32  nocdiv;
36*177ba1f9SLey Foon Tan 	u32  pad_0x6c_0x80[5];
37*177ba1f9SLey Foon Tan };
38*177ba1f9SLey Foon Tan 
39*177ba1f9SLey Foon Tan struct socfpga_clock_manager_per_pll {
40*177ba1f9SLey Foon Tan 	u32  vco0;
41*177ba1f9SLey Foon Tan 	u32  vco1;
42*177ba1f9SLey Foon Tan 	u32  en;
43*177ba1f9SLey Foon Tan 	u32  ens;
44*177ba1f9SLey Foon Tan 	u32  enr;
45*177ba1f9SLey Foon Tan 	u32  bypass;
46*177ba1f9SLey Foon Tan 	u32  bypasss;
47*177ba1f9SLey Foon Tan 	u32  bypassr;
48*177ba1f9SLey Foon Tan 	u32  pad_0x20_0x27[2];
49*177ba1f9SLey Foon Tan 	u32  cntr2clk;
50*177ba1f9SLey Foon Tan 	u32  cntr3clk;
51*177ba1f9SLey Foon Tan 	u32  cntr4clk;
52*177ba1f9SLey Foon Tan 	u32  cntr5clk;
53*177ba1f9SLey Foon Tan 	u32  cntr6clk;
54*177ba1f9SLey Foon Tan 	u32  cntr7clk;
55*177ba1f9SLey Foon Tan 	u32  cntr8clk;
56*177ba1f9SLey Foon Tan 	u32  cntr9clk;
57*177ba1f9SLey Foon Tan 	u32  pad_0x48_0x5f[6];
58*177ba1f9SLey Foon Tan 	u32  outrst;
59*177ba1f9SLey Foon Tan 	u32  outrststat;
60*177ba1f9SLey Foon Tan 	u32  emacctl;
61*177ba1f9SLey Foon Tan 	u32  gpiodiv;
62*177ba1f9SLey Foon Tan 	u32  pad_0x70_0x80[4];
63*177ba1f9SLey Foon Tan };
64*177ba1f9SLey Foon Tan 
65*177ba1f9SLey Foon Tan struct socfpga_clock_manager_altera {
66*177ba1f9SLey Foon Tan 	u32	mpuclk;
67*177ba1f9SLey Foon Tan 	u32	nocclk;
68*177ba1f9SLey Foon Tan 	u32	mainmisc0;
69*177ba1f9SLey Foon Tan 	u32	mainmisc1;
70*177ba1f9SLey Foon Tan 	u32	perimisc0;
71*177ba1f9SLey Foon Tan 	u32	perimisc1;
72*177ba1f9SLey Foon Tan };
73*177ba1f9SLey Foon Tan 
74*177ba1f9SLey Foon Tan struct socfpga_clock_manager {
75*177ba1f9SLey Foon Tan 	/* clkmgr */
76*177ba1f9SLey Foon Tan 	u32  ctrl;
77*177ba1f9SLey Foon Tan 	u32  intr;
78*177ba1f9SLey Foon Tan 	u32  intrs;
79*177ba1f9SLey Foon Tan 	u32  intrr;
80*177ba1f9SLey Foon Tan 	u32  intren;
81*177ba1f9SLey Foon Tan 	u32  intrens;
82*177ba1f9SLey Foon Tan 	u32  intrenr;
83*177ba1f9SLey Foon Tan 	u32  stat;
84*177ba1f9SLey Foon Tan 	u32  testioctrl;
85*177ba1f9SLey Foon Tan 	u32  _pad_0x24_0x40[7];
86*177ba1f9SLey Foon Tan 	/* mainpllgrp */
87*177ba1f9SLey Foon Tan 	struct socfpga_clock_manager_main_pll main_pll;
88*177ba1f9SLey Foon Tan 	/* perpllgrp */
89*177ba1f9SLey Foon Tan 	struct socfpga_clock_manager_per_pll per_pll;
90*177ba1f9SLey Foon Tan 	struct socfpga_clock_manager_altera altera;
91*177ba1f9SLey Foon Tan };
92*177ba1f9SLey Foon Tan 
93*177ba1f9SLey Foon Tan void cm_use_intosc(void);
94*177ba1f9SLey Foon Tan unsigned int cm_get_noc_clk_hz(void);
95*177ba1f9SLey Foon Tan unsigned int cm_get_l4_noc_hz(unsigned int nocdivshift);
96*177ba1f9SLey Foon Tan int cm_basic_init(const void *blob);
97*177ba1f9SLey Foon Tan 
98*177ba1f9SLey Foon Tan unsigned int cm_get_l4_sp_clk_hz(void);
99*177ba1f9SLey Foon Tan unsigned int cm_get_main_vco_clk_hz(void);
100*177ba1f9SLey Foon Tan unsigned int cm_get_per_vco_clk_hz(void);
101*177ba1f9SLey Foon Tan unsigned long cm_get_mpu_clk_hz(void);
102*177ba1f9SLey Foon Tan 
103*177ba1f9SLey Foon Tan unsigned int cm_get_qspi_controller_clk_hz(void);
104*177ba1f9SLey Foon Tan unsigned int cm_get_mmc_controller_clk_hz(void);
105*177ba1f9SLey Foon Tan unsigned int cm_get_spi_controller_clk_hz(void);
106*177ba1f9SLey Foon Tan 
107*177ba1f9SLey Foon Tan #endif /* __ASSEMBLER__ */
108*177ba1f9SLey Foon Tan 
109*177ba1f9SLey Foon Tan #define CLKMGR_ALTERAGRP_MPU_CLK_OFFSET			0x140
110*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_NOC_CLK_OFFSET			0x144
111*177ba1f9SLey Foon Tan #define LOCKED_MASK	(CLKMGR_CLKMGR_STAT_MAINPLLLOCKED_SET_MSK  | \
112*177ba1f9SLey Foon Tan 			 CLKMGR_CLKMGR_STAT_PERPLLLOCKED_SET_MSK)
113*177ba1f9SLey Foon Tan 
114*177ba1f9SLey Foon Tan /* value */
115*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_BYPASS_RESET			0x0000003f
116*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_BYPASS_RESET			0x000000ff
117*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_VCO0_RESET			0x00010053
118*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_VCO1_RESET			0x00010001
119*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_VCO0_RESET			0x00010053
120*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_VCO1_RESET			0x00010001
121*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_VCO0_PSRC_EOSC			0x0
122*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_VCO0_PSRC_E_INTOSC		0x1
123*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_VCO0_PSRC_F2S			0x2
124*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_VCO0_PSRC_EOSC			0x0
125*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_VCO0_PSRC_E_INTOSC		0x1
126*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_VCO0_PSRC_F2S			0x2
127*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_VCO0_PSRC_MAIN			0x3
128*177ba1f9SLey Foon Tan 
129*177ba1f9SLey Foon Tan /* mask */
130*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_EN_S2FUSER0CLKEN_SET_MSK		BIT(6)
131*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_EN_HMCPLLREFCLKEN_SET_MSK	BIT(7)
132*177ba1f9SLey Foon Tan #define CLKMGR_CLKMGR_STAT_MAINPLLLOCKED_SET_MSK	BIT(8)
133*177ba1f9SLey Foon Tan #define CLKMGR_CLKMGR_STAT_PERPLLLOCKED_SET_MSK		BIT(9)
134*177ba1f9SLey Foon Tan #define CLKMGR_CLKMGR_STAT_BOOTCLKSRC_SET_MSK		BIT(17)
135*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_VCO0_BGPWRDN_SET_MSK		BIT(0)
136*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_VCO0_PWRDN_SET_MSK		BIT(1)
137*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_VCO0_EN_SET_MSK			BIT(2)
138*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_VCO0_OUTRSTALL_SET_MSK		BIT(3)
139*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_VCO0_REGEXTSEL_SET_MSK		BIT(4)
140*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_VCO0_BGPWRDN_SET_MSK		BIT(0)
141*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_VCO0_PWRDN_SET_MSK		BIT(1)
142*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_VCO0_EN_SET_MSK			BIT(2)
143*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_VCO0_OUTRSTALL_SET_MSK		BIT(3)
144*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_VCO0_REGEXTSEL_SET_MSK		BIT(4)
145*177ba1f9SLey Foon Tan #define CLKMGR_CLKMGR_INTR_MAINPLLACHIEVED_SET_MSK	BIT(0)
146*177ba1f9SLey Foon Tan #define CLKMGR_CLKMGR_INTR_PERPLLACHIEVED_SET_MSK	BIT(1)
147*177ba1f9SLey Foon Tan #define CLKMGR_CLKMGR_INTR_MAINPLLLOST_SET_MSK		BIT(2)
148*177ba1f9SLey Foon Tan #define CLKMGR_CLKMGR_INTR_PERPLLLOST_SET_MSK		BIT(3)
149*177ba1f9SLey Foon Tan #define CLKMGR_CLKMGR_INTR_MAINPLLRFSLIP_SET_MSK	BIT(8)
150*177ba1f9SLey Foon Tan #define CLKMGR_CLKMGR_INTR_PERPLLRFSLIP_SET_MSK		BIT(9)
151*177ba1f9SLey Foon Tan #define CLKMGR_CLKMGR_INTR_MAINPLLFBSLIP_SET_MSK	BIT(10)
152*177ba1f9SLey Foon Tan #define CLKMGR_CLKMGR_INTR_PERPLLFBSLIP_SET_MSK		BIT(11)
153*177ba1f9SLey Foon Tan #define CLKMGR_CLKMGR_CTL_BOOTMOD_SET_MSK		BIT(0)
154*177ba1f9SLey Foon Tan #define CLKMGR_CLKMGR_CTL_BOOTCLK_INTOSC_SET_MSK	0x00000300
155*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_EN_RESET				0x00000f7f
156*177ba1f9SLey Foon Tan #define CLKMGR_PERPLLGRP_EN_SDMMCCLK_MASK		BIT(5)
157*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_VCO0_PSRC_MSK			0x00000003
158*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_VCO1_NUMER_MSK			0x00001fff
159*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_VCO1_DENOM_MSK			0x0000003f
160*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_CNTRCLK_MSK			0x000003ff
161*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_VCO0_PSRC_MSK			0x00000003
162*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_VCO1_NUMER_MSK			0x00001fff
163*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_VCO1_DENOM_MSK			0x0000003f
164*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_CNTRCLK_MSK			0x000003ff
165*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_MPUCLK_SRC_MSK			0x00000007
166*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_MPUCLK_CNT_MSK			0x000003ff
167*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_MPUCLK_SRC_MAIN			0
168*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_MPUCLK_SRC_PERI			1
169*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_MPUCLK_SRC_OSC1			2
170*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_MPUCLK_SRC_INTOSC		3
171*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_MPUCLK_SRC_FPGA			4
172*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_NOCDIV_MSK			0x00000003
173*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_NOCCLK_CNT_MSK			0x000003ff
174*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_NOCCLK_SRC_MSK			0x00000007
175*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_NOCCLK_SRC_MAIN			0
176*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_NOCCLK_SRC_PERI			1
177*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_NOCCLK_SRC_OSC1			2
178*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_NOCCLK_SRC_INTOSC		3
179*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_NOCCLK_SRC_FPGA			4
180*177ba1f9SLey Foon Tan 
181*177ba1f9SLey Foon Tan #define CLKMGR_PERPLLGRP_SRC_MSK			0x00000007
182*177ba1f9SLey Foon Tan #define CLKMGR_PERPLLGRP_SRC_MAIN			0
183*177ba1f9SLey Foon Tan #define CLKMGR_PERPLLGRP_SRC_PERI			1
184*177ba1f9SLey Foon Tan #define CLKMGR_PERPLLGRP_SRC_OSC1			2
185*177ba1f9SLey Foon Tan #define CLKMGR_PERPLLGRP_SRC_INTOSC			3
186*177ba1f9SLey Foon Tan #define CLKMGR_PERPLLGRP_SRC_FPGA			4
187*177ba1f9SLey Foon Tan 
188*177ba1f9SLey Foon Tan /* bit shifting macro */
189*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_VCO0_PSRC_LSB		8
190*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_VCO0_PSRC_LSB		8
191*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_VCO1_DENOM_LSB		16
192*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_VCO1_DENOM_LSB		16
193*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_NOCCLK_PERICNT_LSB	16
194*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_NOCCLK_SRC_LSB		16
195*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_NOCDIV_L4MAINCLK_LSB	0
196*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_NOCDIV_L4MPCLK_LSB	8
197*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_NOCDIV_L4SPCLK_LSB	16
198*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_NOCDIV_CSATCLK_LSB	24
199*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_NOCDIV_CSTRACECLK_LSB	26
200*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_NOCDIV_CSPDBGCLK_LSB	28
201*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_MPUCLK_SRC_LSB		16
202*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_MPUCLK_PERICNT_LSB	16
203*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_NOCCLK_SRC_LSB		16
204*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_CNTR7CLK_SRC_LSB		16
205*177ba1f9SLey Foon Tan #define CLKMGR_MAINPLL_CNTR9CLK_SRC_LSB		16
206*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_CNTR2CLK_SRC_LSB		16
207*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_CNTR3CLK_SRC_LSB		16
208*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_CNTR4CLK_SRC_LSB		16
209*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_CNTR5CLK_SRC_LSB		16
210*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_CNTR6CLK_SRC_LSB		16
211*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_CNTR8CLK_SRC_LSB		16
212*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_EMACCTL_EMAC0SEL_LSB	26
213*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_EMACCTL_EMAC1SEL_LSB	27
214*177ba1f9SLey Foon Tan #define CLKMGR_PERPLL_EMACCTL_EMAC2SEL_LSB	28
215*177ba1f9SLey Foon Tan 
216*177ba1f9SLey Foon Tan /* PLL ramping work around */
217*177ba1f9SLey Foon Tan #define CLKMGR_PLL_RAMP_MPUCLK_THRESHOLD_HZ	900000000
218*177ba1f9SLey Foon Tan #define CLKMGR_PLL_RAMP_NOCCLK_THRESHOLD_HZ	300000000
219*177ba1f9SLey Foon Tan #define CLKMGR_PLL_RAMP_MPUCLK_INCREMENT_HZ	100000000
220*177ba1f9SLey Foon Tan #define CLKMGR_PLL_RAMP_NOCCLK_INCREMENT_HZ	33000000
221*177ba1f9SLey Foon Tan 
222*177ba1f9SLey Foon Tan #define CLKMGR_STAT_BUSY			BIT(0)
223*177ba1f9SLey Foon Tan 
224*177ba1f9SLey Foon Tan #endif /* CLOCK_MANAGER_ARRIA10 */
225