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