36
36
#define PMU1_CFG 0x8C
37
37
#define DIG_SW_SEL BIT(25)
38
38
39
- /* clock scaling */
40
- #define CLKCFG_FDIV_MASK 0x1f00
41
- #define CLKCFG_FDIV_USB_VAL 0x0300
42
- #define CLKCFG_FFRAC_MASK 0x001f
43
- #define CLKCFG_FFRAC_USB_VAL 0x0003
44
-
45
39
/* EFUSE bits */
46
40
#define EFUSE_MT7688 0x100000
47
41
@@ -53,226 +47,6 @@ static int dram_type;
53
47
54
48
static struct ralink_soc_info * soc_info_ptr ;
55
49
56
- static __init u32
57
- mt7620_calc_rate (u32 ref_rate , u32 mul , u32 div )
58
- {
59
- u64 t ;
60
-
61
- t = ref_rate ;
62
- t *= mul ;
63
- do_div (t , div );
64
-
65
- return t ;
66
- }
67
-
68
- #define MHZ (x ) ((x) * 1000 * 1000)
69
-
70
- static __init unsigned long
71
- mt7620_get_xtal_rate (void )
72
- {
73
- u32 reg ;
74
-
75
- reg = rt_sysc_r32 (SYSC_REG_SYSTEM_CONFIG0 );
76
- if (reg & SYSCFG0_XTAL_FREQ_SEL )
77
- return MHZ (40 );
78
-
79
- return MHZ (20 );
80
- }
81
-
82
- static __init unsigned long
83
- mt7620_get_periph_rate (unsigned long xtal_rate )
84
- {
85
- u32 reg ;
86
-
87
- reg = rt_sysc_r32 (SYSC_REG_CLKCFG0 );
88
- if (reg & CLKCFG0_PERI_CLK_SEL )
89
- return xtal_rate ;
90
-
91
- return MHZ (40 );
92
- }
93
-
94
- static const u32 mt7620_clk_divider [] __initconst = { 2 , 3 , 4 , 8 };
95
-
96
- static __init unsigned long
97
- mt7620_get_cpu_pll_rate (unsigned long xtal_rate )
98
- {
99
- u32 reg ;
100
- u32 mul ;
101
- u32 div ;
102
-
103
- reg = rt_sysc_r32 (SYSC_REG_CPLL_CONFIG0 );
104
- if (reg & CPLL_CFG0_BYPASS_REF_CLK )
105
- return xtal_rate ;
106
-
107
- if ((reg & CPLL_CFG0_SW_CFG ) == 0 )
108
- return MHZ (600 );
109
-
110
- mul = (reg >> CPLL_CFG0_PLL_MULT_RATIO_SHIFT ) &
111
- CPLL_CFG0_PLL_MULT_RATIO_MASK ;
112
- mul += 24 ;
113
- if (reg & CPLL_CFG0_LC_CURFCK )
114
- mul *= 2 ;
115
-
116
- div = (reg >> CPLL_CFG0_PLL_DIV_RATIO_SHIFT ) &
117
- CPLL_CFG0_PLL_DIV_RATIO_MASK ;
118
-
119
- WARN_ON (div >= ARRAY_SIZE (mt7620_clk_divider ));
120
-
121
- return mt7620_calc_rate (xtal_rate , mul , mt7620_clk_divider [div ]);
122
- }
123
-
124
- static __init unsigned long
125
- mt7620_get_pll_rate (unsigned long xtal_rate , unsigned long cpu_pll_rate )
126
- {
127
- u32 reg ;
128
-
129
- reg = rt_sysc_r32 (SYSC_REG_CPLL_CONFIG1 );
130
- if (reg & CPLL_CFG1_CPU_AUX1 )
131
- return xtal_rate ;
132
-
133
- if (reg & CPLL_CFG1_CPU_AUX0 )
134
- return MHZ (480 );
135
-
136
- return cpu_pll_rate ;
137
- }
138
-
139
- static __init unsigned long
140
- mt7620_get_cpu_rate (unsigned long pll_rate )
141
- {
142
- u32 reg ;
143
- u32 mul ;
144
- u32 div ;
145
-
146
- reg = rt_sysc_r32 (SYSC_REG_CPU_SYS_CLKCFG );
147
-
148
- mul = reg & CPU_SYS_CLKCFG_CPU_FFRAC_MASK ;
149
- div = (reg >> CPU_SYS_CLKCFG_CPU_FDIV_SHIFT ) &
150
- CPU_SYS_CLKCFG_CPU_FDIV_MASK ;
151
-
152
- return mt7620_calc_rate (pll_rate , mul , div );
153
- }
154
-
155
- static const u32 mt7620_ocp_dividers [16 ] __initconst = {
156
- [CPU_SYS_CLKCFG_OCP_RATIO_2 ] = 2 ,
157
- [CPU_SYS_CLKCFG_OCP_RATIO_3 ] = 3 ,
158
- [CPU_SYS_CLKCFG_OCP_RATIO_4 ] = 4 ,
159
- [CPU_SYS_CLKCFG_OCP_RATIO_5 ] = 5 ,
160
- [CPU_SYS_CLKCFG_OCP_RATIO_10 ] = 10 ,
161
- };
162
-
163
- static __init unsigned long
164
- mt7620_get_dram_rate (unsigned long pll_rate )
165
- {
166
- if (dram_type == SYSCFG0_DRAM_TYPE_SDRAM )
167
- return pll_rate / 4 ;
168
-
169
- return pll_rate / 3 ;
170
- }
171
-
172
- static __init unsigned long
173
- mt7620_get_sys_rate (unsigned long cpu_rate )
174
- {
175
- u32 reg ;
176
- u32 ocp_ratio ;
177
- u32 div ;
178
-
179
- reg = rt_sysc_r32 (SYSC_REG_CPU_SYS_CLKCFG );
180
-
181
- ocp_ratio = (reg >> CPU_SYS_CLKCFG_OCP_RATIO_SHIFT ) &
182
- CPU_SYS_CLKCFG_OCP_RATIO_MASK ;
183
-
184
- if (WARN_ON (ocp_ratio >= ARRAY_SIZE (mt7620_ocp_dividers )))
185
- return cpu_rate ;
186
-
187
- div = mt7620_ocp_dividers [ocp_ratio ];
188
- if (WARN (!div , "invalid divider for OCP ratio %u" , ocp_ratio ))
189
- return cpu_rate ;
190
-
191
- return cpu_rate / div ;
192
- }
193
-
194
- void __init ralink_clk_init (void )
195
- {
196
- unsigned long xtal_rate ;
197
- unsigned long cpu_pll_rate ;
198
- unsigned long pll_rate ;
199
- unsigned long cpu_rate ;
200
- unsigned long sys_rate ;
201
- unsigned long dram_rate ;
202
- unsigned long periph_rate ;
203
- unsigned long pcmi2s_rate ;
204
-
205
- xtal_rate = mt7620_get_xtal_rate ();
206
-
207
- #define RFMT (label ) label ":%lu.%03luMHz "
208
- #define RINT (x ) ((x) / 1000000)
209
- #define RFRAC (x ) (((x) / 1000) % 1000)
210
-
211
- if (is_mt76x8 ()) {
212
- if (xtal_rate == MHZ (40 ))
213
- cpu_rate = MHZ (580 );
214
- else
215
- cpu_rate = MHZ (575 );
216
- dram_rate = sys_rate = cpu_rate / 3 ;
217
- periph_rate = MHZ (40 );
218
- pcmi2s_rate = MHZ (480 );
219
-
220
- ralink_clk_add ("10000d00.uartlite" , periph_rate );
221
- ralink_clk_add ("10000e00.uartlite" , periph_rate );
222
- } else {
223
- cpu_pll_rate = mt7620_get_cpu_pll_rate (xtal_rate );
224
- pll_rate = mt7620_get_pll_rate (xtal_rate , cpu_pll_rate );
225
-
226
- cpu_rate = mt7620_get_cpu_rate (pll_rate );
227
- dram_rate = mt7620_get_dram_rate (pll_rate );
228
- sys_rate = mt7620_get_sys_rate (cpu_rate );
229
- periph_rate = mt7620_get_periph_rate (xtal_rate );
230
- pcmi2s_rate = periph_rate ;
231
-
232
- pr_debug (RFMT ("XTAL" ) RFMT ("CPU_PLL" ) RFMT ("PLL" ),
233
- RINT (xtal_rate ), RFRAC (xtal_rate ),
234
- RINT (cpu_pll_rate ), RFRAC (cpu_pll_rate ),
235
- RINT (pll_rate ), RFRAC (pll_rate ));
236
-
237
- ralink_clk_add ("10000500.uart" , periph_rate );
238
- }
239
-
240
- pr_debug (RFMT ("CPU" ) RFMT ("DRAM" ) RFMT ("SYS" ) RFMT ("PERIPH" ),
241
- RINT (cpu_rate ), RFRAC (cpu_rate ),
242
- RINT (dram_rate ), RFRAC (dram_rate ),
243
- RINT (sys_rate ), RFRAC (sys_rate ),
244
- RINT (periph_rate ), RFRAC (periph_rate ));
245
- #undef RFRAC
246
- #undef RINT
247
- #undef RFMT
248
-
249
- ralink_clk_add ("cpu" , cpu_rate );
250
- ralink_clk_add ("10000100.timer" , periph_rate );
251
- ralink_clk_add ("10000120.watchdog" , periph_rate );
252
- ralink_clk_add ("10000900.i2c" , periph_rate );
253
- ralink_clk_add ("10000a00.i2s" , pcmi2s_rate );
254
- ralink_clk_add ("10000b00.spi" , sys_rate );
255
- ralink_clk_add ("10000b40.spi" , sys_rate );
256
- ralink_clk_add ("10000c00.uartlite" , periph_rate );
257
- ralink_clk_add ("10000d00.uart1" , periph_rate );
258
- ralink_clk_add ("10000e00.uart2" , periph_rate );
259
- ralink_clk_add ("10180000.wmac" , xtal_rate );
260
-
261
- if (IS_ENABLED (CONFIG_USB ) && !is_mt76x8 ()) {
262
- /*
263
- * When the CPU goes into sleep mode, the BUS clock will be
264
- * too low for USB to function properly. Adjust the busses
265
- * fractional divider to fix this
266
- */
267
- u32 val = rt_sysc_r32 (SYSC_REG_CPU_SYS_CLKCFG );
268
-
269
- val &= ~(CLKCFG_FDIV_MASK | CLKCFG_FFRAC_MASK );
270
- val |= CLKCFG_FDIV_USB_VAL | CLKCFG_FFRAC_USB_VAL ;
271
-
272
- rt_sysc_w32 (val , SYSC_REG_CPU_SYS_CLKCFG );
273
- }
274
- }
275
-
276
50
void __init ralink_of_remap (void )
277
51
{
278
52
rt_sysc_membase = plat_of_remap_node ("ralink,mt7620a-sysc" );
0 commit comments