1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3 * Copyright (c) 2022-2023, Qualcomm Innovation Center, Inc. All rights reserved.
4 */
5
6 #include <linux/clk-provider.h>
7 #include <linux/mod_devicetable.h>
8 #include <linux/module.h>
9 #include <linux/platform_device.h>
10 #include <linux/regmap.h>
11
12 #include <dt-bindings/clock/qcom,qdu1000-ecpricc.h>
13
14 #include "clk-alpha-pll.h"
15 #include "clk-branch.h"
16 #include "clk-rcg.h"
17 #include "clk-regmap.h"
18 #include "clk-regmap-divider.h"
19 #include "clk-regmap-mux.h"
20 #include "common.h"
21 #include "reset.h"
22
23 enum {
24 DT_BI_TCXO,
25 DT_GCC_ECPRI_CC_GPLL0_OUT_MAIN,
26 DT_GCC_ECPRI_CC_GPLL1_OUT_EVEN,
27 DT_GCC_ECPRI_CC_GPLL2_OUT_MAIN,
28 DT_GCC_ECPRI_CC_GPLL3_OUT_MAIN,
29 DT_GCC_ECPRI_CC_GPLL4_OUT_MAIN,
30 DT_GCC_ECPRI_CC_GPLL5_OUT_EVEN,
31 };
32
33 enum {
34 P_BI_TCXO,
35 P_ECPRI_CC_PLL0_OUT_MAIN,
36 P_ECPRI_CC_PLL1_OUT_MAIN,
37 P_GCC_ECPRI_CC_GPLL0_OUT_MAIN,
38 P_GCC_ECPRI_CC_GPLL1_OUT_EVEN,
39 P_GCC_ECPRI_CC_GPLL2_OUT_MAIN,
40 P_GCC_ECPRI_CC_GPLL3_OUT_MAIN,
41 P_GCC_ECPRI_CC_GPLL4_OUT_MAIN,
42 P_GCC_ECPRI_CC_GPLL5_OUT_EVEN,
43 };
44
45 static const struct pll_vco lucid_evo_vco[] = {
46 { 249600000, 2020000000, 0 },
47 };
48
49 /* 700 MHz configuration */
50 static const struct alpha_pll_config ecpri_cc_pll0_config = {
51 .l = 0x24,
52 .alpha = 0x7555,
53 .config_ctl_val = 0x20485699,
54 .config_ctl_hi_val = 0x00182261,
55 .config_ctl_hi1_val = 0x32aa299c,
56 .user_ctl_val = 0x00000000,
57 .user_ctl_hi_val = 0x00000805,
58 };
59
60 static struct clk_alpha_pll ecpri_cc_pll0 = {
61 .offset = 0x0,
62 .vco_table = lucid_evo_vco,
63 .num_vco = ARRAY_SIZE(lucid_evo_vco),
64 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
65 .clkr = {
66 .enable_reg = 0x0,
67 .enable_mask = BIT(0),
68 .hw.init = &(const struct clk_init_data) {
69 .name = "ecpri_cc_pll0",
70 .parent_data = &(const struct clk_parent_data) {
71 .index = DT_BI_TCXO,
72 },
73 .num_parents = 1,
74 .ops = &clk_alpha_pll_fixed_lucid_evo_ops,
75 },
76 },
77 };
78
79 /* 806 MHz configuration */
80 static const struct alpha_pll_config ecpri_cc_pll1_config = {
81 .l = 0x29,
82 .alpha = 0xfaaa,
83 .config_ctl_val = 0x20485699,
84 .config_ctl_hi_val = 0x00182261,
85 .config_ctl_hi1_val = 0x32aa299c,
86 .user_ctl_val = 0x00000000,
87 .user_ctl_hi_val = 0x00000805,
88 };
89
90 static struct clk_alpha_pll ecpri_cc_pll1 = {
91 .offset = 0x1000,
92 .vco_table = lucid_evo_vco,
93 .num_vco = ARRAY_SIZE(lucid_evo_vco),
94 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
95 .clkr = {
96 .enable_reg = 0x0,
97 .enable_mask = BIT(1),
98 .hw.init = &(const struct clk_init_data) {
99 .name = "ecpri_cc_pll1",
100 .parent_data = &(const struct clk_parent_data) {
101 .index = DT_BI_TCXO,
102 },
103 .num_parents = 1,
104 .ops = &clk_alpha_pll_fixed_lucid_evo_ops,
105 },
106 },
107 };
108
109 static const struct parent_map ecpri_cc_parent_map_0[] = {
110 { P_BI_TCXO, 0 },
111 { P_GCC_ECPRI_CC_GPLL0_OUT_MAIN, 1 },
112 { P_GCC_ECPRI_CC_GPLL2_OUT_MAIN, 2 },
113 { P_GCC_ECPRI_CC_GPLL5_OUT_EVEN, 3 },
114 { P_ECPRI_CC_PLL1_OUT_MAIN, 4 },
115 { P_GCC_ECPRI_CC_GPLL4_OUT_MAIN, 5 },
116 { P_ECPRI_CC_PLL0_OUT_MAIN, 6 },
117 };
118
119 static const struct clk_parent_data ecpri_cc_parent_data_0[] = {
120 { .index = DT_BI_TCXO },
121 { .index = DT_GCC_ECPRI_CC_GPLL0_OUT_MAIN },
122 { .index = DT_GCC_ECPRI_CC_GPLL2_OUT_MAIN },
123 { .index = DT_GCC_ECPRI_CC_GPLL5_OUT_EVEN },
124 { .hw = &ecpri_cc_pll1.clkr.hw },
125 { .index = DT_GCC_ECPRI_CC_GPLL4_OUT_MAIN },
126 { .hw = &ecpri_cc_pll0.clkr.hw },
127 };
128
129 static const struct parent_map ecpri_cc_parent_map_1[] = {
130 { P_BI_TCXO, 0 },
131 { P_GCC_ECPRI_CC_GPLL0_OUT_MAIN, 1 },
132 { P_GCC_ECPRI_CC_GPLL1_OUT_EVEN, 2 },
133 { P_GCC_ECPRI_CC_GPLL3_OUT_MAIN, 3 },
134 { P_ECPRI_CC_PLL1_OUT_MAIN, 4 },
135 { P_GCC_ECPRI_CC_GPLL4_OUT_MAIN, 5 },
136 { P_ECPRI_CC_PLL0_OUT_MAIN, 6 },
137 };
138
139 static const struct clk_parent_data ecpri_cc_parent_data_1[] = {
140 { .index = DT_BI_TCXO },
141 { .index = DT_GCC_ECPRI_CC_GPLL0_OUT_MAIN },
142 { .index = DT_GCC_ECPRI_CC_GPLL1_OUT_EVEN },
143 { .index = DT_GCC_ECPRI_CC_GPLL3_OUT_MAIN },
144 { .hw = &ecpri_cc_pll1.clkr.hw },
145 { .index = DT_GCC_ECPRI_CC_GPLL4_OUT_MAIN },
146 { .hw = &ecpri_cc_pll0.clkr.hw },
147 };
148
149 static const struct parent_map ecpri_cc_parent_map_2[] = {
150 { P_BI_TCXO, 0 },
151 { P_GCC_ECPRI_CC_GPLL0_OUT_MAIN, 1 },
152 { P_GCC_ECPRI_CC_GPLL5_OUT_EVEN, 3 },
153 { P_ECPRI_CC_PLL1_OUT_MAIN, 4 },
154 { P_GCC_ECPRI_CC_GPLL4_OUT_MAIN, 5 },
155 { P_ECPRI_CC_PLL0_OUT_MAIN, 6 },
156 };
157
158 static const struct clk_parent_data ecpri_cc_parent_data_2[] = {
159 { .index = DT_BI_TCXO },
160 { .index = DT_GCC_ECPRI_CC_GPLL0_OUT_MAIN },
161 { .index = DT_GCC_ECPRI_CC_GPLL5_OUT_EVEN },
162 { .hw = &ecpri_cc_pll1.clkr.hw },
163 { .index = DT_GCC_ECPRI_CC_GPLL4_OUT_MAIN },
164 { .hw = &ecpri_cc_pll0.clkr.hw },
165 };
166
167 static const struct freq_tbl ftbl_ecpri_cc_ecpri_clk_src[] = {
168 F(466500000, P_GCC_ECPRI_CC_GPLL5_OUT_EVEN, 1, 0, 0),
169 { }
170 };
171
172 static struct clk_rcg2 ecpri_cc_ecpri_clk_src = {
173 .cmd_rcgr = 0x9034,
174 .mnd_width = 0,
175 .hid_width = 5,
176 .parent_map = ecpri_cc_parent_map_2,
177 .freq_tbl = ftbl_ecpri_cc_ecpri_clk_src,
178 .clkr.hw.init = &(const struct clk_init_data) {
179 .name = "ecpri_cc_ecpri_clk_src",
180 .parent_data = ecpri_cc_parent_data_2,
181 .num_parents = ARRAY_SIZE(ecpri_cc_parent_data_2),
182 .ops = &clk_rcg2_shared_ops,
183 },
184 };
185
186 static const struct freq_tbl ftbl_ecpri_cc_ecpri_dma_clk_src[] = {
187 F(466500000, P_GCC_ECPRI_CC_GPLL5_OUT_EVEN, 1, 0, 0),
188 F(500000000, P_GCC_ECPRI_CC_GPLL2_OUT_MAIN, 1, 0, 0),
189 { }
190 };
191
192 static struct clk_rcg2 ecpri_cc_ecpri_dma_clk_src = {
193 .cmd_rcgr = 0x9080,
194 .mnd_width = 0,
195 .hid_width = 5,
196 .parent_map = ecpri_cc_parent_map_0,
197 .freq_tbl = ftbl_ecpri_cc_ecpri_dma_clk_src,
198 .clkr.hw.init = &(const struct clk_init_data) {
199 .name = "ecpri_cc_ecpri_dma_clk_src",
200 .parent_data = ecpri_cc_parent_data_0,
201 .num_parents = ARRAY_SIZE(ecpri_cc_parent_data_0),
202 .ops = &clk_rcg2_shared_ops,
203 },
204 };
205
206 static const struct freq_tbl ftbl_ecpri_cc_ecpri_fast_clk_src[] = {
207 F(500000000, P_GCC_ECPRI_CC_GPLL2_OUT_MAIN, 1, 0, 0),
208 F(600000000, P_GCC_ECPRI_CC_GPLL0_OUT_MAIN, 1, 0, 0),
209 { }
210 };
211
212 static struct clk_rcg2 ecpri_cc_ecpri_fast_clk_src = {
213 .cmd_rcgr = 0x904c,
214 .mnd_width = 0,
215 .hid_width = 5,
216 .parent_map = ecpri_cc_parent_map_0,
217 .freq_tbl = ftbl_ecpri_cc_ecpri_fast_clk_src,
218 .clkr.hw.init = &(const struct clk_init_data) {
219 .name = "ecpri_cc_ecpri_fast_clk_src",
220 .parent_data = ecpri_cc_parent_data_0,
221 .num_parents = ARRAY_SIZE(ecpri_cc_parent_data_0),
222 .ops = &clk_rcg2_shared_ops,
223 },
224 };
225
226 static const struct freq_tbl ftbl_ecpri_cc_ecpri_oran_clk_src[] = {
227 F(500000000, P_GCC_ECPRI_CC_GPLL2_OUT_MAIN, 1, 0, 0),
228 { }
229 };
230
231 static struct clk_rcg2 ecpri_cc_ecpri_oran_clk_src = {
232 .cmd_rcgr = 0x9064,
233 .mnd_width = 0,
234 .hid_width = 5,
235 .parent_map = ecpri_cc_parent_map_0,
236 .freq_tbl = ftbl_ecpri_cc_ecpri_oran_clk_src,
237 .clkr.hw.init = &(const struct clk_init_data) {
238 .name = "ecpri_cc_ecpri_oran_clk_src",
239 .parent_data = ecpri_cc_parent_data_0,
240 .num_parents = ARRAY_SIZE(ecpri_cc_parent_data_0),
241 .ops = &clk_rcg2_shared_ops,
242 },
243 };
244
245 static const struct freq_tbl ftbl_ecpri_cc_eth_100g_c2c0_hm_ff_clk_src[] = {
246 F(201500000, P_ECPRI_CC_PLL1_OUT_MAIN, 4, 0, 0),
247 F(403000000, P_ECPRI_CC_PLL1_OUT_MAIN, 2, 0, 0),
248 F(466500000, P_GCC_ECPRI_CC_GPLL5_OUT_EVEN, 1, 0, 0),
249 { }
250 };
251
252 static struct clk_rcg2 ecpri_cc_eth_100g_c2c0_hm_ff_clk_src = {
253 .cmd_rcgr = 0x81b0,
254 .mnd_width = 0,
255 .hid_width = 5,
256 .parent_map = ecpri_cc_parent_map_0,
257 .freq_tbl = ftbl_ecpri_cc_eth_100g_c2c0_hm_ff_clk_src,
258 .clkr.hw.init = &(const struct clk_init_data) {
259 .name = "ecpri_cc_eth_100g_c2c0_hm_ff_clk_src",
260 .parent_data = ecpri_cc_parent_data_0,
261 .num_parents = ARRAY_SIZE(ecpri_cc_parent_data_0),
262 .ops = &clk_rcg2_shared_ops,
263 },
264 };
265
266 static const struct freq_tbl ftbl_ecpri_cc_eth_100g_c2c_hm_macsec_clk_src[] = {
267 F(100000000, P_GCC_ECPRI_CC_GPLL0_OUT_MAIN, 6, 0, 0),
268 F(200000000, P_GCC_ECPRI_CC_GPLL0_OUT_MAIN, 3, 0, 0),
269 { }
270 };
271
272 static struct clk_rcg2 ecpri_cc_eth_100g_c2c_hm_macsec_clk_src = {
273 .cmd_rcgr = 0x8150,
274 .mnd_width = 0,
275 .hid_width = 5,
276 .parent_map = ecpri_cc_parent_map_0,
277 .freq_tbl = ftbl_ecpri_cc_eth_100g_c2c_hm_macsec_clk_src,
278 .clkr.hw.init = &(const struct clk_init_data) {
279 .name = "ecpri_cc_eth_100g_c2c_hm_macsec_clk_src",
280 .parent_data = ecpri_cc_parent_data_0,
281 .num_parents = ARRAY_SIZE(ecpri_cc_parent_data_0),
282 .ops = &clk_rcg2_shared_ops,
283 },
284 };
285
286 static struct clk_rcg2 ecpri_cc_eth_100g_dbg_c2c_hm_ff_clk_src = {
287 .cmd_rcgr = 0x81c8,
288 .mnd_width = 0,
289 .hid_width = 5,
290 .parent_map = ecpri_cc_parent_map_0,
291 .freq_tbl = ftbl_ecpri_cc_eth_100g_c2c0_hm_ff_clk_src,
292 .clkr.hw.init = &(const struct clk_init_data) {
293 .name = "ecpri_cc_eth_100g_dbg_c2c_hm_ff_clk_src",
294 .parent_data = ecpri_cc_parent_data_0,
295 .num_parents = ARRAY_SIZE(ecpri_cc_parent_data_0),
296 .ops = &clk_rcg2_shared_ops,
297 },
298 };
299
300 static struct clk_rcg2 ecpri_cc_eth_100g_fh0_hm_ff_clk_src = {
301 .cmd_rcgr = 0x8168,
302 .mnd_width = 0,
303 .hid_width = 5,
304 .parent_map = ecpri_cc_parent_map_0,
305 .freq_tbl = ftbl_ecpri_cc_eth_100g_c2c0_hm_ff_clk_src,
306 .clkr.hw.init = &(const struct clk_init_data) {
307 .name = "ecpri_cc_eth_100g_fh0_hm_ff_clk_src",
308 .parent_data = ecpri_cc_parent_data_0,
309 .num_parents = ARRAY_SIZE(ecpri_cc_parent_data_0),
310 .ops = &clk_rcg2_shared_ops,
311 },
312 };
313
314 static struct clk_rcg2 ecpri_cc_eth_100g_fh0_macsec_clk_src = {
315 .cmd_rcgr = 0x8108,
316 .mnd_width = 0,
317 .hid_width = 5,
318 .parent_map = ecpri_cc_parent_map_0,
319 .freq_tbl = ftbl_ecpri_cc_eth_100g_c2c_hm_macsec_clk_src,
320 .clkr.hw.init = &(const struct clk_init_data) {
321 .name = "ecpri_cc_eth_100g_fh0_macsec_clk_src",
322 .parent_data = ecpri_cc_parent_data_0,
323 .num_parents = ARRAY_SIZE(ecpri_cc_parent_data_0),
324 .ops = &clk_rcg2_shared_ops,
325 },
326 };
327
328 static struct clk_rcg2 ecpri_cc_eth_100g_fh1_hm_ff_clk_src = {
329 .cmd_rcgr = 0x8180,
330 .mnd_width = 0,
331 .hid_width = 5,
332 .parent_map = ecpri_cc_parent_map_0,
333 .freq_tbl = ftbl_ecpri_cc_ecpri_clk_src,
334 .clkr.hw.init = &(const struct clk_init_data) {
335 .name = "ecpri_cc_eth_100g_fh1_hm_ff_clk_src",
336 .parent_data = ecpri_cc_parent_data_0,
337 .num_parents = ARRAY_SIZE(ecpri_cc_parent_data_0),
338 .ops = &clk_rcg2_shared_ops,
339 },
340 };
341
342 static const struct freq_tbl ftbl_ecpri_cc_eth_100g_fh1_macsec_clk_src[] = {
343 F(200000000, P_GCC_ECPRI_CC_GPLL0_OUT_MAIN, 3, 0, 0),
344 { }
345 };
346
347 static struct clk_rcg2 ecpri_cc_eth_100g_fh1_macsec_clk_src = {
348 .cmd_rcgr = 0x8120,
349 .mnd_width = 0,
350 .hid_width = 5,
351 .parent_map = ecpri_cc_parent_map_0,
352 .freq_tbl = ftbl_ecpri_cc_eth_100g_fh1_macsec_clk_src,
353 .clkr.hw.init = &(const struct clk_init_data) {
354 .name = "ecpri_cc_eth_100g_fh1_macsec_clk_src",
355 .parent_data = ecpri_cc_parent_data_0,
356 .num_parents = ARRAY_SIZE(ecpri_cc_parent_data_0),
357 .ops = &clk_rcg2_shared_ops,
358 },
359 };
360
361 static struct clk_rcg2 ecpri_cc_eth_100g_fh2_hm_ff_clk_src = {
362 .cmd_rcgr = 0x8198,
363 .mnd_width = 0,
364 .hid_width = 5,
365 .parent_map = ecpri_cc_parent_map_0,
366 .freq_tbl = ftbl_ecpri_cc_eth_100g_c2c0_hm_ff_clk_src,
367 .clkr.hw.init = &(const struct clk_init_data) {
368 .name = "ecpri_cc_eth_100g_fh2_hm_ff_clk_src",
369 .parent_data = ecpri_cc_parent_data_0,
370 .num_parents = ARRAY_SIZE(ecpri_cc_parent_data_0),
371 .ops = &clk_rcg2_shared_ops,
372 },
373 };
374
375 static struct clk_rcg2 ecpri_cc_eth_100g_fh2_macsec_clk_src = {
376 .cmd_rcgr = 0x8138,
377 .mnd_width = 0,
378 .hid_width = 5,
379 .parent_map = ecpri_cc_parent_map_0,
380 .freq_tbl = ftbl_ecpri_cc_eth_100g_fh1_macsec_clk_src,
381 .clkr.hw.init = &(const struct clk_init_data) {
382 .name = "ecpri_cc_eth_100g_fh2_macsec_clk_src",
383 .parent_data = ecpri_cc_parent_data_0,
384 .num_parents = ARRAY_SIZE(ecpri_cc_parent_data_0),
385 .ops = &clk_rcg2_shared_ops,
386 },
387 };
388
389 static const struct freq_tbl ftbl_ecpri_cc_eth_100g_mac_c2c_hm_ref_clk_src[] = {
390 F(533000000, P_GCC_ECPRI_CC_GPLL1_OUT_EVEN, 1, 0, 0),
391 F(700000000, P_GCC_ECPRI_CC_GPLL3_OUT_MAIN, 1, 0, 0),
392 F(806000000, P_GCC_ECPRI_CC_GPLL4_OUT_MAIN, 1, 0, 0),
393 { }
394 };
395
396 static struct clk_rcg2 ecpri_cc_eth_100g_mac_c2c_hm_ref_clk_src = {
397 .cmd_rcgr = 0x8228,
398 .mnd_width = 0,
399 .hid_width = 5,
400 .parent_map = ecpri_cc_parent_map_1,
401 .freq_tbl = ftbl_ecpri_cc_eth_100g_mac_c2c_hm_ref_clk_src,
402 .clkr.hw.init = &(const struct clk_init_data) {
403 .name = "ecpri_cc_eth_100g_mac_c2c_hm_ref_clk_src",
404 .parent_data = ecpri_cc_parent_data_1,
405 .num_parents = ARRAY_SIZE(ecpri_cc_parent_data_1),
406 .ops = &clk_rcg2_shared_ops,
407 },
408 };
409
410 static struct clk_rcg2 ecpri_cc_eth_100g_mac_dbg_c2c_hm_ref_clk_src = {
411 .cmd_rcgr = 0x8240,
412 .mnd_width = 0,
413 .hid_width = 5,
414 .parent_map = ecpri_cc_parent_map_1,
415 .freq_tbl = ftbl_ecpri_cc_eth_100g_mac_c2c_hm_ref_clk_src,
416 .clkr.hw.init = &(const struct clk_init_data) {
417 .name = "ecpri_cc_eth_100g_mac_dbg_c2c_hm_ref_clk_src",
418 .parent_data = ecpri_cc_parent_data_1,
419 .num_parents = ARRAY_SIZE(ecpri_cc_parent_data_1),
420 .ops = &clk_rcg2_shared_ops,
421 },
422 };
423
424 static struct clk_rcg2 ecpri_cc_eth_100g_mac_fh0_hm_ref_clk_src = {
425 .cmd_rcgr = 0x81e0,
426 .mnd_width = 0,
427 .hid_width = 5,
428 .parent_map = ecpri_cc_parent_map_1,
429 .freq_tbl = ftbl_ecpri_cc_eth_100g_mac_c2c_hm_ref_clk_src,
430 .clkr.hw.init = &(const struct clk_init_data) {
431 .name = "ecpri_cc_eth_100g_mac_fh0_hm_ref_clk_src",
432 .parent_data = ecpri_cc_parent_data_1,
433 .num_parents = ARRAY_SIZE(ecpri_cc_parent_data_1),
434 .ops = &clk_rcg2_shared_ops,
435 },
436 };
437
438 static struct clk_rcg2 ecpri_cc_eth_100g_mac_fh1_hm_ref_clk_src = {
439 .cmd_rcgr = 0x81f8,
440 .mnd_width = 0,
441 .hid_width = 5,
442 .parent_map = ecpri_cc_parent_map_1,
443 .freq_tbl = ftbl_ecpri_cc_eth_100g_mac_c2c_hm_ref_clk_src,
444 .clkr.hw.init = &(const struct clk_init_data) {
445 .name = "ecpri_cc_eth_100g_mac_fh1_hm_ref_clk_src",
446 .parent_data = ecpri_cc_parent_data_1,
447 .num_parents = ARRAY_SIZE(ecpri_cc_parent_data_1),
448 .ops = &clk_rcg2_shared_ops,
449 },
450 };
451
452 static struct clk_rcg2 ecpri_cc_eth_100g_mac_fh2_hm_ref_clk_src = {
453 .cmd_rcgr = 0x8210,
454 .mnd_width = 0,
455 .hid_width = 5,
456 .parent_map = ecpri_cc_parent_map_1,
457 .freq_tbl = ftbl_ecpri_cc_eth_100g_mac_c2c_hm_ref_clk_src,
458 .clkr.hw.init = &(const struct clk_init_data) {
459 .name = "ecpri_cc_eth_100g_mac_fh2_hm_ref_clk_src",
460 .parent_data = ecpri_cc_parent_data_1,
461 .num_parents = ARRAY_SIZE(ecpri_cc_parent_data_1),
462 .ops = &clk_rcg2_shared_ops,
463 },
464 };
465
466 static const struct freq_tbl ftbl_ecpri_cc_mss_emac_clk_src[] = {
467 F(403000000, P_GCC_ECPRI_CC_GPLL4_OUT_MAIN, 2, 0, 0),
468 { }
469 };
470
471 static struct clk_rcg2 ecpri_cc_mss_emac_clk_src = {
472 .cmd_rcgr = 0xe00c,
473 .mnd_width = 0,
474 .hid_width = 5,
475 .parent_map = ecpri_cc_parent_map_2,
476 .freq_tbl = ftbl_ecpri_cc_mss_emac_clk_src,
477 .clkr.hw.init = &(const struct clk_init_data) {
478 .name = "ecpri_cc_mss_emac_clk_src",
479 .parent_data = ecpri_cc_parent_data_2,
480 .num_parents = ARRAY_SIZE(ecpri_cc_parent_data_2),
481 .ops = &clk_rcg2_shared_ops,
482 },
483 };
484
485 static struct clk_regmap_div ecpri_cc_ecpri_fast_div2_clk_src = {
486 .reg = 0x907c,
487 .shift = 0,
488 .width = 4,
489 .clkr.hw.init = &(const struct clk_init_data) {
490 .name = "ecpri_cc_ecpri_fast_div2_clk_src",
491 .parent_hws = (const struct clk_hw*[]) {
492 &ecpri_cc_ecpri_fast_clk_src.clkr.hw,
493 },
494 .num_parents = 1,
495 .flags = CLK_SET_RATE_PARENT,
496 .ops = &clk_regmap_div_ro_ops,
497 },
498 };
499
500 static struct clk_regmap_div ecpri_cc_eth_100g_c2c_hm_ff_0_div_clk_src = {
501 .reg = 0x8290,
502 .shift = 0,
503 .width = 4,
504 .clkr.hw.init = &(const struct clk_init_data) {
505 .name = "ecpri_cc_eth_100g_c2c_hm_ff_0_div_clk_src",
506 .parent_hws = (const struct clk_hw*[]) {
507 &ecpri_cc_eth_100g_c2c0_hm_ff_clk_src.clkr.hw,
508 },
509 .num_parents = 1,
510 .flags = CLK_SET_RATE_PARENT,
511 .ops = &clk_regmap_div_ro_ops,
512 },
513 };
514
515 static struct clk_regmap_div ecpri_cc_eth_100g_c2c_hm_ff_1_div_clk_src = {
516 .reg = 0x8294,
517 .shift = 0,
518 .width = 4,
519 .clkr.hw.init = &(const struct clk_init_data) {
520 .name = "ecpri_cc_eth_100g_c2c_hm_ff_1_div_clk_src",
521 .parent_hws = (const struct clk_hw*[]) {
522 &ecpri_cc_eth_100g_c2c0_hm_ff_clk_src.clkr.hw,
523 },
524 .num_parents = 1,
525 .flags = CLK_SET_RATE_PARENT,
526 .ops = &clk_regmap_div_ro_ops,
527 },
528 };
529
530 static struct clk_regmap_div ecpri_cc_eth_100g_dbg_c2c_hm_ff_0_div_clk_src = {
531 .reg = 0x8298,
532 .shift = 0,
533 .width = 4,
534 .clkr.hw.init = &(const struct clk_init_data) {
535 .name = "ecpri_cc_eth_100g_dbg_c2c_hm_ff_0_div_clk_src",
536 .parent_hws = (const struct clk_hw*[]) {
537 &ecpri_cc_eth_100g_dbg_c2c_hm_ff_clk_src.clkr.hw,
538 },
539 .num_parents = 1,
540 .flags = CLK_SET_RATE_PARENT,
541 .ops = &clk_regmap_div_ro_ops,
542 },
543 };
544
545 static struct clk_regmap_div ecpri_cc_eth_100g_dbg_c2c_hm_ff_1_div_clk_src = {
546 .reg = 0x829c,
547 .shift = 0,
548 .width = 4,
549 .clkr.hw.init = &(const struct clk_init_data) {
550 .name = "ecpri_cc_eth_100g_dbg_c2c_hm_ff_1_div_clk_src",
551 .parent_hws = (const struct clk_hw*[]) {
552 &ecpri_cc_eth_100g_dbg_c2c_hm_ff_clk_src.clkr.hw,
553 },
554 .num_parents = 1,
555 .flags = CLK_SET_RATE_PARENT,
556 .ops = &clk_regmap_div_ro_ops,
557 },
558 };
559
560 static struct clk_regmap_div ecpri_cc_eth_100g_fh_0_hm_ff_0_div_clk_src = {
561 .reg = 0x8260,
562 .shift = 0,
563 .width = 4,
564 .clkr.hw.init = &(const struct clk_init_data) {
565 .name = "ecpri_cc_eth_100g_fh_0_hm_ff_0_div_clk_src",
566 .parent_hws = (const struct clk_hw*[]) {
567 &ecpri_cc_eth_100g_fh0_hm_ff_clk_src.clkr.hw,
568 },
569 .num_parents = 1,
570 .flags = CLK_SET_RATE_PARENT,
571 .ops = &clk_regmap_div_ro_ops,
572 },
573 };
574
575 static struct clk_regmap_div ecpri_cc_eth_100g_fh_0_hm_ff_1_div_clk_src = {
576 .reg = 0x8264,
577 .shift = 0,
578 .width = 4,
579 .clkr.hw.init = &(const struct clk_init_data) {
580 .name = "ecpri_cc_eth_100g_fh_0_hm_ff_1_div_clk_src",
581 .parent_hws = (const struct clk_hw*[]) {
582 &ecpri_cc_eth_100g_fh0_hm_ff_clk_src.clkr.hw,
583 },
584 .num_parents = 1,
585 .flags = CLK_SET_RATE_PARENT,
586 .ops = &clk_regmap_div_ro_ops,
587 },
588 };
589
590 static struct clk_regmap_div ecpri_cc_eth_100g_fh_0_hm_ff_2_div_clk_src = {
591 .reg = 0x8268,
592 .shift = 0,
593 .width = 4,
594 .clkr.hw.init = &(const struct clk_init_data) {
595 .name = "ecpri_cc_eth_100g_fh_0_hm_ff_2_div_clk_src",
596 .parent_hws = (const struct clk_hw*[]) {
597 &ecpri_cc_eth_100g_fh0_hm_ff_clk_src.clkr.hw,
598 },
599 .num_parents = 1,
600 .flags = CLK_SET_RATE_PARENT,
601 .ops = &clk_regmap_div_ro_ops,
602 },
603 };
604
605 static struct clk_regmap_div ecpri_cc_eth_100g_fh_0_hm_ff_3_div_clk_src = {
606 .reg = 0x826c,
607 .shift = 0,
608 .width = 4,
609 .clkr.hw.init = &(const struct clk_init_data) {
610 .name = "ecpri_cc_eth_100g_fh_0_hm_ff_3_div_clk_src",
611 .parent_hws = (const struct clk_hw*[]) {
612 &ecpri_cc_eth_100g_fh0_hm_ff_clk_src.clkr.hw,
613 },
614 .num_parents = 1,
615 .flags = CLK_SET_RATE_PARENT,
616 .ops = &clk_regmap_div_ro_ops,
617 },
618 };
619
620 static struct clk_regmap_div ecpri_cc_eth_100g_fh_1_hm_ff_0_div_clk_src = {
621 .reg = 0x8270,
622 .shift = 0,
623 .width = 4,
624 .clkr.hw.init = &(const struct clk_init_data) {
625 .name = "ecpri_cc_eth_100g_fh_1_hm_ff_0_div_clk_src",
626 .parent_hws = (const struct clk_hw*[]) {
627 &ecpri_cc_eth_100g_fh1_hm_ff_clk_src.clkr.hw,
628 },
629 .num_parents = 1,
630 .flags = CLK_SET_RATE_PARENT,
631 .ops = &clk_regmap_div_ro_ops,
632 },
633 };
634
635 static struct clk_regmap_div ecpri_cc_eth_100g_fh_1_hm_ff_1_div_clk_src = {
636 .reg = 0x8274,
637 .shift = 0,
638 .width = 4,
639 .clkr.hw.init = &(const struct clk_init_data) {
640 .name = "ecpri_cc_eth_100g_fh_1_hm_ff_1_div_clk_src",
641 .parent_hws = (const struct clk_hw*[]) {
642 &ecpri_cc_eth_100g_fh1_hm_ff_clk_src.clkr.hw,
643 },
644 .num_parents = 1,
645 .flags = CLK_SET_RATE_PARENT,
646 .ops = &clk_regmap_div_ro_ops,
647 },
648 };
649
650 static struct clk_regmap_div ecpri_cc_eth_100g_fh_1_hm_ff_2_div_clk_src = {
651 .reg = 0x8278,
652 .shift = 0,
653 .width = 4,
654 .clkr.hw.init = &(const struct clk_init_data) {
655 .name = "ecpri_cc_eth_100g_fh_1_hm_ff_2_div_clk_src",
656 .parent_hws = (const struct clk_hw*[]) {
657 &ecpri_cc_eth_100g_fh1_hm_ff_clk_src.clkr.hw,
658 },
659 .num_parents = 1,
660 .flags = CLK_SET_RATE_PARENT,
661 .ops = &clk_regmap_div_ro_ops,
662 },
663 };
664
665 static struct clk_regmap_div ecpri_cc_eth_100g_fh_1_hm_ff_3_div_clk_src = {
666 .reg = 0x827c,
667 .shift = 0,
668 .width = 4,
669 .clkr.hw.init = &(const struct clk_init_data) {
670 .name = "ecpri_cc_eth_100g_fh_1_hm_ff_3_div_clk_src",
671 .parent_hws = (const struct clk_hw*[]) {
672 &ecpri_cc_eth_100g_fh1_hm_ff_clk_src.clkr.hw,
673 },
674 .num_parents = 1,
675 .flags = CLK_SET_RATE_PARENT,
676 .ops = &clk_regmap_div_ro_ops,
677 },
678 };
679
680 static struct clk_regmap_div ecpri_cc_eth_100g_fh_2_hm_ff_0_div_clk_src = {
681 .reg = 0x8280,
682 .shift = 0,
683 .width = 4,
684 .clkr.hw.init = &(const struct clk_init_data) {
685 .name = "ecpri_cc_eth_100g_fh_2_hm_ff_0_div_clk_src",
686 .parent_hws = (const struct clk_hw*[]) {
687 &ecpri_cc_eth_100g_fh2_hm_ff_clk_src.clkr.hw,
688 },
689 .num_parents = 1,
690 .flags = CLK_SET_RATE_PARENT,
691 .ops = &clk_regmap_div_ro_ops,
692 },
693 };
694
695 static struct clk_regmap_div ecpri_cc_eth_100g_fh_2_hm_ff_1_div_clk_src = {
696 .reg = 0x8284,
697 .shift = 0,
698 .width = 4,
699 .clkr.hw.init = &(const struct clk_init_data) {
700 .name = "ecpri_cc_eth_100g_fh_2_hm_ff_1_div_clk_src",
701 .parent_hws = (const struct clk_hw*[]) {
702 &ecpri_cc_eth_100g_fh2_hm_ff_clk_src.clkr.hw,
703 },
704 .num_parents = 1,
705 .flags = CLK_SET_RATE_PARENT,
706 .ops = &clk_regmap_div_ro_ops,
707 },
708 };
709
710 static struct clk_regmap_div ecpri_cc_eth_100g_fh_2_hm_ff_2_div_clk_src = {
711 .reg = 0x8288,
712 .shift = 0,
713 .width = 4,
714 .clkr.hw.init = &(const struct clk_init_data) {
715 .name = "ecpri_cc_eth_100g_fh_2_hm_ff_2_div_clk_src",
716 .parent_hws = (const struct clk_hw*[]) {
717 &ecpri_cc_eth_100g_fh2_hm_ff_clk_src.clkr.hw,
718 },
719 .num_parents = 1,
720 .flags = CLK_SET_RATE_PARENT,
721 .ops = &clk_regmap_div_ro_ops,
722 },
723 };
724
725 static struct clk_regmap_div ecpri_cc_eth_100g_fh_2_hm_ff_3_div_clk_src = {
726 .reg = 0x828c,
727 .shift = 0,
728 .width = 4,
729 .clkr.hw.init = &(const struct clk_init_data) {
730 .name = "ecpri_cc_eth_100g_fh_2_hm_ff_3_div_clk_src",
731 .parent_hws = (const struct clk_hw*[]) {
732 &ecpri_cc_eth_100g_fh2_hm_ff_clk_src.clkr.hw,
733 },
734 .num_parents = 1,
735 .flags = CLK_SET_RATE_PARENT,
736 .ops = &clk_regmap_div_ro_ops,
737 },
738 };
739
740 static struct clk_branch ecpri_cc_ecpri_cg_clk = {
741 .halt_reg = 0x900c,
742 .halt_check = BRANCH_HALT,
743 .clkr = {
744 .enable_reg = 0x900c,
745 .enable_mask = BIT(0),
746 .hw.init = &(const struct clk_init_data) {
747 .name = "ecpri_cc_ecpri_cg_clk",
748 .parent_hws = (const struct clk_hw*[]) {
749 &ecpri_cc_ecpri_clk_src.clkr.hw,
750 },
751 .num_parents = 1,
752 .flags = CLK_SET_RATE_PARENT,
753 .ops = &clk_branch2_ops,
754 },
755 },
756 };
757
758 static struct clk_branch ecpri_cc_ecpri_dma_clk = {
759 .halt_reg = 0x902c,
760 .halt_check = BRANCH_HALT,
761 .clkr = {
762 .enable_reg = 0x902c,
763 .enable_mask = BIT(0),
764 .hw.init = &(const struct clk_init_data) {
765 .name = "ecpri_cc_ecpri_dma_clk",
766 .parent_hws = (const struct clk_hw*[]) {
767 &ecpri_cc_ecpri_dma_clk_src.clkr.hw,
768 },
769 .num_parents = 1,
770 .flags = CLK_SET_RATE_PARENT,
771 .ops = &clk_branch2_ops,
772 },
773 },
774 };
775
776 static struct clk_branch ecpri_cc_ecpri_dma_noc_clk = {
777 .halt_reg = 0xf004,
778 .halt_check = BRANCH_HALT,
779 .clkr = {
780 .enable_reg = 0xf004,
781 .enable_mask = BIT(0),
782 .hw.init = &(const struct clk_init_data) {
783 .name = "ecpri_cc_ecpri_dma_noc_clk",
784 .parent_hws = (const struct clk_hw*[]) {
785 &ecpri_cc_ecpri_dma_clk_src.clkr.hw,
786 },
787 .num_parents = 1,
788 .flags = CLK_SET_RATE_PARENT,
789 .ops = &clk_branch2_ops,
790 },
791 },
792 };
793
794 static struct clk_branch ecpri_cc_ecpri_fast_clk = {
795 .halt_reg = 0x9014,
796 .halt_check = BRANCH_HALT,
797 .clkr = {
798 .enable_reg = 0x9014,
799 .enable_mask = BIT(0),
800 .hw.init = &(const struct clk_init_data) {
801 .name = "ecpri_cc_ecpri_fast_clk",
802 .parent_hws = (const struct clk_hw*[]) {
803 &ecpri_cc_ecpri_fast_clk_src.clkr.hw,
804 },
805 .num_parents = 1,
806 .flags = CLK_SET_RATE_PARENT,
807 .ops = &clk_branch2_ops,
808 },
809 },
810 };
811
812 static struct clk_branch ecpri_cc_ecpri_fast_div2_clk = {
813 .halt_reg = 0x901c,
814 .halt_check = BRANCH_HALT,
815 .clkr = {
816 .enable_reg = 0x901c,
817 .enable_mask = BIT(0),
818 .hw.init = &(const struct clk_init_data) {
819 .name = "ecpri_cc_ecpri_fast_div2_clk",
820 .parent_hws = (const struct clk_hw*[]) {
821 &ecpri_cc_ecpri_fast_div2_clk_src.clkr.hw,
822 },
823 .num_parents = 1,
824 .flags = CLK_SET_RATE_PARENT,
825 .ops = &clk_branch2_ops,
826 },
827 },
828 };
829
830 static struct clk_branch ecpri_cc_ecpri_fast_div2_noc_clk = {
831 .halt_reg = 0xf008,
832 .halt_check = BRANCH_HALT,
833 .clkr = {
834 .enable_reg = 0xf008,
835 .enable_mask = BIT(0),
836 .hw.init = &(const struct clk_init_data) {
837 .name = "ecpri_cc_ecpri_fast_div2_noc_clk",
838 .parent_hws = (const struct clk_hw*[]) {
839 &ecpri_cc_ecpri_fast_div2_clk_src.clkr.hw,
840 },
841 .num_parents = 1,
842 .flags = CLK_SET_RATE_PARENT,
843 .ops = &clk_branch2_ops,
844 },
845 },
846 };
847
848 static struct clk_branch ecpri_cc_ecpri_fr_clk = {
849 .halt_reg = 0x9004,
850 .halt_check = BRANCH_HALT,
851 .clkr = {
852 .enable_reg = 0x9004,
853 .enable_mask = BIT(0),
854 .hw.init = &(const struct clk_init_data) {
855 .name = "ecpri_cc_ecpri_fr_clk",
856 .parent_hws = (const struct clk_hw*[]) {
857 &ecpri_cc_ecpri_clk_src.clkr.hw,
858 },
859 .num_parents = 1,
860 .flags = CLK_SET_RATE_PARENT,
861 .ops = &clk_branch2_ops,
862 },
863 },
864 };
865
866 static struct clk_branch ecpri_cc_ecpri_oran_div2_clk = {
867 .halt_reg = 0x9024,
868 .halt_check = BRANCH_HALT,
869 .clkr = {
870 .enable_reg = 0x9024,
871 .enable_mask = BIT(0),
872 .hw.init = &(const struct clk_init_data) {
873 .name = "ecpri_cc_ecpri_oran_div2_clk",
874 .parent_hws = (const struct clk_hw*[]) {
875 &ecpri_cc_ecpri_oran_clk_src.clkr.hw,
876 },
877 .num_parents = 1,
878 .flags = CLK_SET_RATE_PARENT,
879 .ops = &clk_branch2_ops,
880 },
881 },
882 };
883
884 static struct clk_branch ecpri_cc_eth_100g_c2c0_udp_fifo_clk = {
885 .halt_reg = 0x80cc,
886 .halt_check = BRANCH_HALT,
887 .clkr = {
888 .enable_reg = 0x80cc,
889 .enable_mask = BIT(0),
890 .hw.init = &(const struct clk_init_data) {
891 .name = "ecpri_cc_eth_100g_c2c0_udp_fifo_clk",
892 .parent_hws = (const struct clk_hw*[]) {
893 &ecpri_cc_ecpri_clk_src.clkr.hw,
894 },
895 .num_parents = 1,
896 .flags = CLK_SET_RATE_PARENT,
897 .ops = &clk_branch2_ops,
898 },
899 },
900 };
901
902 static struct clk_branch ecpri_cc_eth_100g_c2c1_udp_fifo_clk = {
903 .halt_reg = 0x80d0,
904 .halt_check = BRANCH_HALT,
905 .clkr = {
906 .enable_reg = 0x80d0,
907 .enable_mask = BIT(0),
908 .hw.init = &(const struct clk_init_data) {
909 .name = "ecpri_cc_eth_100g_c2c1_udp_fifo_clk",
910 .parent_hws = (const struct clk_hw*[]) {
911 &ecpri_cc_ecpri_clk_src.clkr.hw,
912 },
913 .num_parents = 1,
914 .flags = CLK_SET_RATE_PARENT,
915 .ops = &clk_branch2_ops,
916 },
917 },
918 };
919
920 static struct clk_mem_branch ecpri_cc_eth_100g_c2c_0_hm_ff_0_clk = {
921 .mem_enable_reg = 0x8410,
922 .mem_ack_reg = 0x8424,
923 .mem_enable_ack_mask = BIT(0),
924 .branch = {
925 .halt_reg = 0x80b4,
926 .halt_check = BRANCH_HALT,
927 .clkr = {
928 .enable_reg = 0x80b4,
929 .enable_mask = BIT(0),
930 .hw.init = &(const struct clk_init_data) {
931 .name = "ecpri_cc_eth_100g_c2c_0_hm_ff_0_clk",
932 .parent_hws = (const struct clk_hw*[]) {
933 &ecpri_cc_eth_100g_c2c_hm_ff_0_div_clk_src.clkr.hw,
934 },
935 .num_parents = 1,
936 .flags = CLK_SET_RATE_PARENT,
937 .ops = &clk_branch2_mem_ops,
938 },
939 },
940 },
941 };
942
943 static struct clk_mem_branch ecpri_cc_eth_100g_c2c_0_hm_ff_1_clk = {
944 .mem_enable_reg = 0x8410,
945 .mem_ack_reg = 0x8424,
946 .mem_enable_ack_mask = BIT(1),
947 .branch = {
948 .halt_reg = 0x80bc,
949 .halt_check = BRANCH_HALT,
950 .clkr = {
951 .enable_reg = 0x80bc,
952 .enable_mask = BIT(0),
953 .hw.init = &(const struct clk_init_data) {
954 .name = "ecpri_cc_eth_100g_c2c_0_hm_ff_1_clk",
955 .parent_hws = (const struct clk_hw*[]) {
956 &ecpri_cc_eth_100g_c2c_hm_ff_1_div_clk_src.clkr.hw,
957 },
958 .num_parents = 1,
959 .flags = CLK_SET_RATE_PARENT,
960 .ops = &clk_branch2_mem_ops,
961 },
962 },
963 },
964 };
965
966 static struct clk_mem_branch ecpri_cc_eth_100g_c2c_hm_macsec_clk = {
967 .mem_enable_reg = 0x8410,
968 .mem_ack_reg = 0x8424,
969 .mem_enable_ack_mask = BIT(4),
970 .branch = {
971 .halt_reg = 0x80ac,
972 .halt_check = BRANCH_HALT,
973 .clkr = {
974 .enable_reg = 0x80ac,
975 .enable_mask = BIT(0),
976 .hw.init = &(const struct clk_init_data) {
977 .name = "ecpri_cc_eth_100g_c2c_hm_macsec_clk",
978 .parent_hws = (const struct clk_hw*[]) {
979 &ecpri_cc_eth_100g_c2c_hm_macsec_clk_src.clkr.hw,
980 },
981 .num_parents = 1,
982 .flags = CLK_SET_RATE_PARENT,
983 .ops = &clk_branch2_mem_ops,
984 },
985 },
986 },
987 };
988
989 static struct clk_mem_branch ecpri_cc_eth_100g_dbg_c2c_hm_ff_0_clk = {
990 .mem_enable_reg = 0x8414,
991 .mem_ack_reg = 0x8428,
992 .mem_enable_ack_mask = BIT(0),
993 .branch = {
994 .halt_reg = 0x80d8,
995 .halt_check = BRANCH_HALT,
996 .clkr = {
997 .enable_reg = 0x80d8,
998 .enable_mask = BIT(0),
999 .hw.init = &(const struct clk_init_data) {
1000 .name = "ecpri_cc_eth_100g_dbg_c2c_hm_ff_0_clk",
1001 .parent_hws = (const struct clk_hw*[]) {
1002 &ecpri_cc_eth_100g_dbg_c2c_hm_ff_0_div_clk_src.clkr.hw,
1003 },
1004 .num_parents = 1,
1005 .flags = CLK_SET_RATE_PARENT,
1006 .ops = &clk_branch2_mem_ops,
1007 },
1008 },
1009 },
1010 };
1011
1012 static struct clk_mem_branch ecpri_cc_eth_100g_dbg_c2c_hm_ff_1_clk = {
1013 .mem_enable_reg = 0x8414,
1014 .mem_ack_reg = 0x8428,
1015 .mem_enable_ack_mask = BIT(1),
1016 .branch = {
1017 .halt_reg = 0x80e0,
1018 .halt_check = BRANCH_HALT,
1019 .clkr = {
1020 .enable_reg = 0x80e0,
1021 .enable_mask = BIT(0),
1022 .hw.init = &(const struct clk_init_data) {
1023 .name = "ecpri_cc_eth_100g_dbg_c2c_hm_ff_1_clk",
1024 .parent_hws = (const struct clk_hw*[]) {
1025 &ecpri_cc_eth_100g_dbg_c2c_hm_ff_1_div_clk_src.clkr.hw,
1026 },
1027 .num_parents = 1,
1028 .flags = CLK_SET_RATE_PARENT,
1029 .ops = &clk_branch2_mem_ops,
1030 },
1031 },
1032 },
1033 };
1034
1035 static struct clk_branch ecpri_cc_eth_100g_dbg_c2c_udp_fifo_clk = {
1036 .halt_reg = 0x80f0,
1037 .halt_check = BRANCH_HALT,
1038 .clkr = {
1039 .enable_reg = 0x80f0,
1040 .enable_mask = BIT(0),
1041 .hw.init = &(const struct clk_init_data) {
1042 .name = "ecpri_cc_eth_100g_dbg_c2c_udp_fifo_clk",
1043 .parent_hws = (const struct clk_hw*[]) {
1044 &ecpri_cc_ecpri_clk_src.clkr.hw,
1045 },
1046 .num_parents = 1,
1047 .flags = CLK_SET_RATE_PARENT,
1048 .ops = &clk_branch2_ops,
1049 },
1050 },
1051 };
1052
1053 static struct clk_mem_branch ecpri_cc_eth_100g_fh_0_hm_ff_0_clk = {
1054 .mem_enable_reg = 0x8404,
1055 .mem_ack_reg = 0x8418,
1056 .mem_enable_ack_mask = BIT(0),
1057 .branch = {
1058 .halt_reg = 0x800c,
1059 .halt_check = BRANCH_HALT,
1060 .clkr = {
1061 .enable_reg = 0x800c,
1062 .enable_mask = BIT(0),
1063 .hw.init = &(const struct clk_init_data) {
1064 .name = "ecpri_cc_eth_100g_fh_0_hm_ff_0_clk",
1065 .parent_hws = (const struct clk_hw*[]) {
1066 &ecpri_cc_eth_100g_fh_0_hm_ff_0_div_clk_src.clkr.hw,
1067 },
1068 .num_parents = 1,
1069 .flags = CLK_SET_RATE_PARENT,
1070 .ops = &clk_branch2_mem_ops,
1071 },
1072 },
1073 },
1074 };
1075
1076 static struct clk_mem_branch ecpri_cc_eth_100g_fh_0_hm_ff_1_clk = {
1077 .mem_enable_reg = 0x8404,
1078 .mem_ack_reg = 0x8418,
1079 .mem_enable_ack_mask = BIT(1),
1080 .branch = {
1081 .halt_reg = 0x8014,
1082 .halt_check = BRANCH_HALT,
1083 .clkr = {
1084 .enable_reg = 0x8014,
1085 .enable_mask = BIT(0),
1086 .hw.init = &(const struct clk_init_data) {
1087 .name = "ecpri_cc_eth_100g_fh_0_hm_ff_1_clk",
1088 .parent_hws = (const struct clk_hw*[]) {
1089 &ecpri_cc_eth_100g_fh_0_hm_ff_1_div_clk_src.clkr.hw,
1090 },
1091 .num_parents = 1,
1092 .flags = CLK_SET_RATE_PARENT,
1093 .ops = &clk_branch2_mem_ops,
1094 },
1095 },
1096 },
1097 };
1098
1099 static struct clk_mem_branch ecpri_cc_eth_100g_fh_0_hm_ff_2_clk = {
1100 .mem_enable_reg = 0x8404,
1101 .mem_ack_reg = 0x8418,
1102 .mem_enable_ack_mask = BIT(2),
1103 .branch = {
1104 .halt_reg = 0x801c,
1105 .halt_check = BRANCH_HALT,
1106 .clkr = {
1107 .enable_reg = 0x801c,
1108 .enable_mask = BIT(0),
1109 .hw.init = &(const struct clk_init_data) {
1110 .name = "ecpri_cc_eth_100g_fh_0_hm_ff_2_clk",
1111 .parent_hws = (const struct clk_hw*[]) {
1112 &ecpri_cc_eth_100g_fh_0_hm_ff_2_div_clk_src.clkr.hw,
1113 },
1114 .num_parents = 1,
1115 .flags = CLK_SET_RATE_PARENT,
1116 .ops = &clk_branch2_mem_ops,
1117 },
1118 },
1119 },
1120 };
1121
1122 static struct clk_mem_branch ecpri_cc_eth_100g_fh_0_hm_ff_3_clk = {
1123 .mem_enable_reg = 0x8404,
1124 .mem_ack_reg = 0x8418,
1125 .mem_enable_ack_mask = BIT(3),
1126 .branch = {
1127 .halt_reg = 0x8024,
1128 .halt_check = BRANCH_HALT,
1129 .clkr = {
1130 .enable_reg = 0x8024,
1131 .enable_mask = BIT(0),
1132 .hw.init = &(const struct clk_init_data) {
1133 .name = "ecpri_cc_eth_100g_fh_0_hm_ff_3_clk",
1134 .parent_hws = (const struct clk_hw*[]) {
1135 &ecpri_cc_eth_100g_fh_0_hm_ff_3_div_clk_src.clkr.hw,
1136 },
1137 .num_parents = 1,
1138 .flags = CLK_SET_RATE_PARENT,
1139 .ops = &clk_branch2_mem_ops,
1140 },
1141 },
1142 },
1143 };
1144
1145 static struct clk_branch ecpri_cc_eth_100g_fh_0_udp_fifo_clk = {
1146 .halt_reg = 0x8034,
1147 .halt_check = BRANCH_HALT,
1148 .clkr = {
1149 .enable_reg = 0x8034,
1150 .enable_mask = BIT(0),
1151 .hw.init = &(const struct clk_init_data) {
1152 .name = "ecpri_cc_eth_100g_fh_0_udp_fifo_clk",
1153 .parent_hws = (const struct clk_hw*[]) {
1154 &ecpri_cc_ecpri_clk_src.clkr.hw,
1155 },
1156 .num_parents = 1,
1157 .flags = CLK_SET_RATE_PARENT,
1158 .ops = &clk_branch2_ops,
1159 },
1160 },
1161 };
1162
1163 static struct clk_mem_branch ecpri_cc_eth_100g_fh_1_hm_ff_0_clk = {
1164 .mem_enable_reg = 0x8408,
1165 .mem_ack_reg = 0x841c,
1166 .mem_enable_ack_mask = BIT(0),
1167 .branch = {
1168 .halt_reg = 0x8044,
1169 .halt_check = BRANCH_HALT,
1170 .clkr = {
1171 .enable_reg = 0x8044,
1172 .enable_mask = BIT(0),
1173 .hw.init = &(const struct clk_init_data) {
1174 .name = "ecpri_cc_eth_100g_fh_1_hm_ff_0_clk",
1175 .parent_hws = (const struct clk_hw*[]) {
1176 &ecpri_cc_eth_100g_fh_1_hm_ff_0_div_clk_src.clkr.hw,
1177 },
1178 .num_parents = 1,
1179 .flags = CLK_SET_RATE_PARENT,
1180 .ops = &clk_branch2_mem_ops,
1181 },
1182 },
1183 },
1184 };
1185
1186 static struct clk_mem_branch ecpri_cc_eth_100g_fh_1_hm_ff_1_clk = {
1187 .mem_enable_reg = 0x8408,
1188 .mem_ack_reg = 0x841c,
1189 .mem_enable_ack_mask = BIT(1),
1190 .branch = {
1191 .halt_reg = 0x804c,
1192 .halt_check = BRANCH_HALT,
1193 .clkr = {
1194 .enable_reg = 0x804c,
1195 .enable_mask = BIT(0),
1196 .hw.init = &(const struct clk_init_data) {
1197 .name = "ecpri_cc_eth_100g_fh_1_hm_ff_1_clk",
1198 .parent_hws = (const struct clk_hw*[]) {
1199 &ecpri_cc_eth_100g_fh_1_hm_ff_1_div_clk_src.clkr.hw,
1200 },
1201 .num_parents = 1,
1202 .flags = CLK_SET_RATE_PARENT,
1203 .ops = &clk_branch2_mem_ops,
1204 },
1205 },
1206 },
1207 };
1208
1209 static struct clk_mem_branch ecpri_cc_eth_100g_fh_1_hm_ff_2_clk = {
1210 .mem_enable_reg = 0x8408,
1211 .mem_ack_reg = 0x841c,
1212 .mem_enable_ack_mask = BIT(2),
1213 .branch = {
1214 .halt_reg = 0x8054,
1215 .halt_check = BRANCH_HALT,
1216 .clkr = {
1217 .enable_reg = 0x8054,
1218 .enable_mask = BIT(0),
1219 .hw.init = &(const struct clk_init_data) {
1220 .name = "ecpri_cc_eth_100g_fh_1_hm_ff_2_clk",
1221 .parent_hws = (const struct clk_hw*[]) {
1222 &ecpri_cc_eth_100g_fh_1_hm_ff_2_div_clk_src.clkr.hw,
1223 },
1224 .num_parents = 1,
1225 .flags = CLK_SET_RATE_PARENT,
1226 .ops = &clk_branch2_mem_ops,
1227 },
1228 },
1229 },
1230 };
1231
1232 static struct clk_mem_branch ecpri_cc_eth_100g_fh_1_hm_ff_3_clk = {
1233 .mem_enable_reg = 0x8408,
1234 .mem_ack_reg = 0x841c,
1235 .mem_enable_ack_mask = BIT(3),
1236 .branch = {
1237 .halt_reg = 0x805c,
1238 .halt_check = BRANCH_HALT,
1239 .clkr = {
1240 .enable_reg = 0x805c,
1241 .enable_mask = BIT(0),
1242 .hw.init = &(const struct clk_init_data) {
1243 .name = "ecpri_cc_eth_100g_fh_1_hm_ff_3_clk",
1244 .parent_hws = (const struct clk_hw*[]) {
1245 &ecpri_cc_eth_100g_fh_1_hm_ff_3_div_clk_src.clkr.hw,
1246 },
1247 .num_parents = 1,
1248 .flags = CLK_SET_RATE_PARENT,
1249 .ops = &clk_branch2_mem_ops,
1250 },
1251 },
1252 },
1253 };
1254
1255 static struct clk_branch ecpri_cc_eth_100g_fh_1_udp_fifo_clk = {
1256 .halt_reg = 0x806c,
1257 .halt_check = BRANCH_HALT,
1258 .clkr = {
1259 .enable_reg = 0x806c,
1260 .enable_mask = BIT(0),
1261 .hw.init = &(const struct clk_init_data) {
1262 .name = "ecpri_cc_eth_100g_fh_1_udp_fifo_clk",
1263 .parent_hws = (const struct clk_hw*[]) {
1264 &ecpri_cc_ecpri_clk_src.clkr.hw,
1265 },
1266 .num_parents = 1,
1267 .flags = CLK_SET_RATE_PARENT,
1268 .ops = &clk_branch2_ops,
1269 },
1270 },
1271 };
1272
1273 static struct clk_mem_branch ecpri_cc_eth_100g_fh_2_hm_ff_0_clk = {
1274 .mem_enable_reg = 0x840c,
1275 .mem_ack_reg = 0x8420,
1276 .mem_enable_ack_mask = BIT(0),
1277 .branch = {
1278 .halt_reg = 0x807c,
1279 .halt_check = BRANCH_HALT,
1280 .clkr = {
1281 .enable_reg = 0x807c,
1282 .enable_mask = BIT(0),
1283 .hw.init = &(const struct clk_init_data) {
1284 .name = "ecpri_cc_eth_100g_fh_2_hm_ff_0_clk",
1285 .parent_hws = (const struct clk_hw*[]) {
1286 &ecpri_cc_eth_100g_fh_2_hm_ff_0_div_clk_src.clkr.hw,
1287 },
1288 .num_parents = 1,
1289 .flags = CLK_SET_RATE_PARENT,
1290 .ops = &clk_branch2_mem_ops,
1291 },
1292 },
1293 },
1294 };
1295
1296 static struct clk_mem_branch ecpri_cc_eth_100g_fh_2_hm_ff_1_clk = {
1297 .mem_enable_reg = 0x840c,
1298 .mem_ack_reg = 0x8420,
1299 .mem_enable_ack_mask = BIT(1),
1300 .branch = {
1301 .halt_reg = 0x8084,
1302 .halt_check = BRANCH_HALT,
1303 .clkr = {
1304 .enable_reg = 0x8084,
1305 .enable_mask = BIT(0),
1306 .hw.init = &(const struct clk_init_data) {
1307 .name = "ecpri_cc_eth_100g_fh_2_hm_ff_1_clk",
1308 .parent_hws = (const struct clk_hw*[]) {
1309 &ecpri_cc_eth_100g_fh_2_hm_ff_1_div_clk_src.clkr.hw,
1310 },
1311 .num_parents = 1,
1312 .flags = CLK_SET_RATE_PARENT,
1313 .ops = &clk_branch2_mem_ops,
1314 },
1315 },
1316 },
1317 };
1318
1319 static struct clk_mem_branch ecpri_cc_eth_100g_fh_2_hm_ff_2_clk = {
1320 .mem_enable_reg = 0x840c,
1321 .mem_ack_reg = 0x8420,
1322 .mem_enable_ack_mask = BIT(2),
1323 .branch = {
1324 .halt_reg = 0x808c,
1325 .halt_check = BRANCH_HALT,
1326 .clkr = {
1327 .enable_reg = 0x808c,
1328 .enable_mask = BIT(0),
1329 .hw.init = &(const struct clk_init_data) {
1330 .name = "ecpri_cc_eth_100g_fh_2_hm_ff_2_clk",
1331 .parent_hws = (const struct clk_hw*[]) {
1332 &ecpri_cc_eth_100g_fh_2_hm_ff_2_div_clk_src.clkr.hw,
1333 },
1334 .num_parents = 1,
1335 .flags = CLK_SET_RATE_PARENT,
1336 .ops = &clk_branch2_mem_ops,
1337 },
1338 },
1339 },
1340 };
1341
1342 static struct clk_mem_branch ecpri_cc_eth_100g_fh_2_hm_ff_3_clk = {
1343 .mem_enable_reg = 0x840c,
1344 .mem_ack_reg = 0x8420,
1345 .mem_enable_ack_mask = BIT(3),
1346 .branch = {
1347 .halt_reg = 0x8094,
1348 .halt_check = BRANCH_HALT,
1349 .clkr = {
1350 .enable_reg = 0x8094,
1351 .enable_mask = BIT(0),
1352 .hw.init = &(const struct clk_init_data) {
1353 .name = "ecpri_cc_eth_100g_fh_2_hm_ff_3_clk",
1354 .parent_hws = (const struct clk_hw*[]) {
1355 &ecpri_cc_eth_100g_fh_2_hm_ff_3_div_clk_src.clkr.hw,
1356 },
1357 .num_parents = 1,
1358 .flags = CLK_SET_RATE_PARENT,
1359 .ops = &clk_branch2_mem_ops,
1360 },
1361 },
1362 },
1363 };
1364
1365 static struct clk_branch ecpri_cc_eth_100g_fh_2_udp_fifo_clk = {
1366 .halt_reg = 0x80a4,
1367 .halt_check = BRANCH_HALT,
1368 .clkr = {
1369 .enable_reg = 0x80a4,
1370 .enable_mask = BIT(0),
1371 .hw.init = &(const struct clk_init_data) {
1372 .name = "ecpri_cc_eth_100g_fh_2_udp_fifo_clk",
1373 .parent_hws = (const struct clk_hw*[]) {
1374 &ecpri_cc_ecpri_clk_src.clkr.hw,
1375 },
1376 .num_parents = 1,
1377 .flags = CLK_SET_RATE_PARENT,
1378 .ops = &clk_branch2_ops,
1379 },
1380 },
1381 };
1382
1383 static struct clk_mem_branch ecpri_cc_eth_100g_fh_macsec_0_clk = {
1384 .mem_enable_reg = 0x8404,
1385 .mem_ack_reg = 0x8418,
1386 .mem_enable_ack_mask = BIT(4),
1387 .branch = {
1388 .halt_reg = 0x8004,
1389 .halt_check = BRANCH_HALT,
1390 .clkr = {
1391 .enable_reg = 0x8004,
1392 .enable_mask = BIT(0),
1393 .hw.init = &(const struct clk_init_data) {
1394 .name = "ecpri_cc_eth_100g_fh_macsec_0_clk",
1395 .parent_hws = (const struct clk_hw*[]) {
1396 &ecpri_cc_eth_100g_fh0_macsec_clk_src.clkr.hw,
1397 },
1398 .num_parents = 1,
1399 .flags = CLK_SET_RATE_PARENT,
1400 .ops = &clk_branch2_mem_ops,
1401 },
1402 },
1403 },
1404 };
1405
1406 static struct clk_mem_branch ecpri_cc_eth_100g_fh_macsec_1_clk = {
1407 .mem_enable_reg = 0x8408,
1408 .mem_ack_reg = 0x841c,
1409 .mem_enable_ack_mask = BIT(4),
1410 .branch = {
1411 .halt_reg = 0x803c,
1412 .halt_check = BRANCH_HALT,
1413 .clkr = {
1414 .enable_reg = 0x803c,
1415 .enable_mask = BIT(0),
1416 .hw.init = &(const struct clk_init_data) {
1417 .name = "ecpri_cc_eth_100g_fh_macsec_1_clk",
1418 .parent_hws = (const struct clk_hw*[]) {
1419 &ecpri_cc_eth_100g_fh1_macsec_clk_src.clkr.hw,
1420 },
1421 .num_parents = 1,
1422 .flags = CLK_SET_RATE_PARENT,
1423 .ops = &clk_branch2_mem_ops,
1424 },
1425 },
1426 },
1427 };
1428
1429 static struct clk_mem_branch ecpri_cc_eth_100g_fh_macsec_2_clk = {
1430 .mem_enable_reg = 0x840c,
1431 .mem_ack_reg = 0x8420,
1432 .mem_enable_ack_mask = BIT(4),
1433 .branch = {
1434 .halt_reg = 0x8074,
1435 .halt_check = BRANCH_HALT,
1436 .clkr = {
1437 .enable_reg = 0x8074,
1438 .enable_mask = BIT(0),
1439 .hw.init = &(const struct clk_init_data) {
1440 .name = "ecpri_cc_eth_100g_fh_macsec_2_clk",
1441 .parent_hws = (const struct clk_hw*[]) {
1442 &ecpri_cc_eth_100g_fh2_macsec_clk_src.clkr.hw,
1443 },
1444 .num_parents = 1,
1445 .flags = CLK_SET_RATE_PARENT,
1446 .ops = &clk_branch2_mem_ops,
1447 },
1448 },
1449 },
1450 };
1451
1452 static struct clk_mem_branch ecpri_cc_eth_100g_mac_c2c_hm_ref_clk = {
1453 .mem_enable_reg = 0x8410,
1454 .mem_ack_reg = 0x8424,
1455 .mem_enable_ack_mask = BIT(5),
1456 .branch = {
1457 .halt_reg = 0x80c4,
1458 .halt_check = BRANCH_HALT,
1459 .clkr = {
1460 .enable_reg = 0x80c4,
1461 .enable_mask = BIT(0),
1462 .hw.init = &(const struct clk_init_data) {
1463 .name = "ecpri_cc_eth_100g_mac_c2c_hm_ref_clk",
1464 .parent_hws = (const struct clk_hw*[]) {
1465 &ecpri_cc_eth_100g_mac_c2c_hm_ref_clk_src.clkr.hw,
1466 },
1467 .num_parents = 1,
1468 .flags = CLK_SET_RATE_PARENT,
1469 .ops = &clk_branch2_mem_ops,
1470 },
1471 },
1472 },
1473 };
1474
1475 static struct clk_mem_branch ecpri_cc_eth_100g_mac_dbg_c2c_hm_ref_clk = {
1476 .mem_enable_reg = 0x8414,
1477 .mem_ack_reg = 0x8428,
1478 .mem_enable_ack_mask = BIT(5),
1479 .branch = {
1480 .halt_reg = 0x80e8,
1481 .halt_check = BRANCH_HALT,
1482 .clkr = {
1483 .enable_reg = 0x80e8,
1484 .enable_mask = BIT(0),
1485 .hw.init = &(const struct clk_init_data) {
1486 .name = "ecpri_cc_eth_100g_mac_dbg_c2c_hm_ref_clk",
1487 .parent_hws = (const struct clk_hw*[]) {
1488 &ecpri_cc_eth_100g_mac_dbg_c2c_hm_ref_clk_src.clkr.hw,
1489 },
1490 .num_parents = 1,
1491 .flags = CLK_SET_RATE_PARENT,
1492 .ops = &clk_branch2_mem_ops,
1493 },
1494 },
1495 },
1496 };
1497
1498 static struct clk_mem_branch ecpri_cc_eth_100g_mac_fh0_hm_ref_clk = {
1499 .mem_enable_reg = 0x8404,
1500 .mem_ack_reg = 0x8418,
1501 .mem_enable_ack_mask = BIT(5),
1502 .branch = {
1503 .halt_reg = 0x802c,
1504 .halt_check = BRANCH_HALT,
1505 .clkr = {
1506 .enable_reg = 0x802c,
1507 .enable_mask = BIT(0),
1508 .hw.init = &(const struct clk_init_data) {
1509 .name = "ecpri_cc_eth_100g_mac_fh0_hm_ref_clk",
1510 .parent_hws = (const struct clk_hw*[]) {
1511 &ecpri_cc_eth_100g_mac_fh0_hm_ref_clk_src.clkr.hw,
1512 },
1513 .num_parents = 1,
1514 .flags = CLK_SET_RATE_PARENT,
1515 .ops = &clk_branch2_mem_ops,
1516 },
1517 },
1518 },
1519 };
1520
1521 static struct clk_mem_branch ecpri_cc_eth_100g_mac_fh1_hm_ref_clk = {
1522 .mem_enable_reg = 0x8408,
1523 .mem_ack_reg = 0x841c,
1524 .mem_enable_ack_mask = BIT(5),
1525 .branch = {
1526 .halt_reg = 0x8064,
1527 .halt_check = BRANCH_HALT,
1528 .clkr = {
1529 .enable_reg = 0x8064,
1530 .enable_mask = BIT(0),
1531 .hw.init = &(const struct clk_init_data) {
1532 .name = "ecpri_cc_eth_100g_mac_fh1_hm_ref_clk",
1533 .parent_hws = (const struct clk_hw*[]) {
1534 &ecpri_cc_eth_100g_mac_fh1_hm_ref_clk_src.clkr.hw,
1535 },
1536 .num_parents = 1,
1537 .flags = CLK_SET_RATE_PARENT,
1538 .ops = &clk_branch2_mem_ops,
1539 },
1540 },
1541 },
1542 };
1543
1544 static struct clk_mem_branch ecpri_cc_eth_100g_mac_fh2_hm_ref_clk = {
1545 .mem_enable_reg = 0x840c,
1546 .mem_ack_reg = 0x8420,
1547 .mem_enable_ack_mask = BIT(5),
1548 .branch = {
1549 .halt_reg = 0x809c,
1550 .halt_check = BRANCH_HALT,
1551 .clkr = {
1552 .enable_reg = 0x809c,
1553 .enable_mask = BIT(0),
1554 .hw.init = &(const struct clk_init_data) {
1555 .name = "ecpri_cc_eth_100g_mac_fh2_hm_ref_clk",
1556 .parent_hws = (const struct clk_hw*[]) {
1557 &ecpri_cc_eth_100g_mac_fh2_hm_ref_clk_src.clkr.hw,
1558 },
1559 .num_parents = 1,
1560 .flags = CLK_SET_RATE_PARENT,
1561 .ops = &clk_branch2_mem_ops,
1562 },
1563 },
1564 },
1565 };
1566
1567 static struct clk_branch ecpri_cc_eth_dbg_nfapi_axi_clk = {
1568 .halt_reg = 0x80f4,
1569 .halt_check = BRANCH_HALT,
1570 .clkr = {
1571 .enable_reg = 0x80f4,
1572 .enable_mask = BIT(0),
1573 .hw.init = &(const struct clk_init_data) {
1574 .name = "ecpri_cc_eth_dbg_nfapi_axi_clk",
1575 .parent_hws = (const struct clk_hw*[]) {
1576 &ecpri_cc_ecpri_dma_clk_src.clkr.hw,
1577 },
1578 .num_parents = 1,
1579 .flags = CLK_SET_RATE_PARENT,
1580 .ops = &clk_branch2_ops,
1581 },
1582 },
1583 };
1584
1585 static struct clk_branch ecpri_cc_eth_dbg_noc_axi_clk = {
1586 .halt_reg = 0x80fc,
1587 .halt_check = BRANCH_HALT,
1588 .clkr = {
1589 .enable_reg = 0x80fc,
1590 .enable_mask = BIT(0),
1591 .hw.init = &(const struct clk_init_data) {
1592 .name = "ecpri_cc_eth_dbg_noc_axi_clk",
1593 .parent_hws = (const struct clk_hw*[]) {
1594 &ecpri_cc_mss_emac_clk_src.clkr.hw,
1595 },
1596 .num_parents = 1,
1597 .flags = CLK_SET_RATE_PARENT,
1598 .ops = &clk_branch2_ops,
1599 },
1600 },
1601 };
1602
1603 static struct clk_mem_branch ecpri_cc_eth_phy_0_ock_sram_clk = {
1604 .mem_enable_reg = 0x8404,
1605 .mem_ack_reg = 0x8418,
1606 .mem_enable_ack_mask = BIT(6),
1607 .branch = {
1608 .halt_reg = 0xd140,
1609 .halt_check = BRANCH_HALT,
1610 .clkr = {
1611 .enable_reg = 0xd140,
1612 .enable_mask = BIT(0),
1613 .hw.init = &(const struct clk_init_data) {
1614 .name = "ecpri_cc_eth_phy_0_ock_sram_clk",
1615 .ops = &clk_branch2_mem_ops,
1616 },
1617 },
1618 },
1619 };
1620
1621 static struct clk_mem_branch ecpri_cc_eth_phy_1_ock_sram_clk = {
1622 .mem_enable_reg = 0x8408,
1623 .mem_ack_reg = 0x841C,
1624 .mem_enable_ack_mask = BIT(6),
1625 .branch = {
1626 .halt_reg = 0xd148,
1627 .halt_check = BRANCH_HALT,
1628 .clkr = {
1629 .enable_reg = 0xd148,
1630 .enable_mask = BIT(0),
1631 .hw.init = &(const struct clk_init_data) {
1632 .name = "ecpri_cc_eth_phy_1_ock_sram_clk",
1633 .ops = &clk_branch2_mem_ops,
1634 },
1635 },
1636 },
1637 };
1638
1639 static struct clk_mem_branch ecpri_cc_eth_phy_2_ock_sram_clk = {
1640 .mem_enable_reg = 0x840c,
1641 .mem_ack_reg = 0x8420,
1642 .mem_enable_ack_mask = BIT(6),
1643 .branch = {
1644 .halt_reg = 0xd150,
1645 .halt_check = BRANCH_HALT,
1646 .clkr = {
1647 .enable_reg = 0xd150,
1648 .enable_mask = BIT(0),
1649 .hw.init = &(const struct clk_init_data) {
1650 .name = "ecpri_cc_eth_phy_2_ock_sram_clk",
1651 .ops = &clk_branch2_mem_ops,
1652 },
1653 },
1654 },
1655 };
1656
1657 static struct clk_mem_branch ecpri_cc_eth_phy_3_ock_sram_clk = {
1658 .mem_enable_reg = 0x8410,
1659 .mem_ack_reg = 0x8424,
1660 .mem_enable_ack_mask = BIT(6),
1661 .branch = {
1662 .halt_reg = 0xd158,
1663 .halt_check = BRANCH_HALT,
1664 .clkr = {
1665 .enable_reg = 0xd158,
1666 .enable_mask = BIT(0),
1667 .hw.init = &(const struct clk_init_data) {
1668 .name = "ecpri_cc_eth_phy_3_ock_sram_clk",
1669 .ops = &clk_branch2_mem_ops,
1670 },
1671 },
1672 },
1673 };
1674
1675 static struct clk_mem_branch ecpri_cc_eth_phy_4_ock_sram_clk = {
1676 .mem_enable_reg = 0x8414,
1677 .mem_ack_reg = 0x8428,
1678 .mem_enable_ack_mask = BIT(6),
1679 .branch = {
1680 .halt_reg = 0xd160,
1681 .halt_check = BRANCH_HALT,
1682 .clkr = {
1683 .enable_reg = 0xd160,
1684 .enable_mask = BIT(0),
1685 .hw.init = &(const struct clk_init_data) {
1686 .name = "ecpri_cc_eth_phy_4_ock_sram_clk",
1687 .ops = &clk_branch2_mem_ops,
1688 },
1689 },
1690 },
1691 };
1692
1693 static struct clk_branch ecpri_cc_mss_emac_clk = {
1694 .halt_reg = 0xe008,
1695 .halt_check = BRANCH_HALT,
1696 .clkr = {
1697 .enable_reg = 0xe008,
1698 .enable_mask = BIT(0),
1699 .hw.init = &(const struct clk_init_data) {
1700 .name = "ecpri_cc_mss_emac_clk",
1701 .parent_hws = (const struct clk_hw*[]) {
1702 &ecpri_cc_mss_emac_clk_src.clkr.hw,
1703 },
1704 .num_parents = 1,
1705 .flags = CLK_SET_RATE_PARENT,
1706 .ops = &clk_branch2_ops,
1707 },
1708 },
1709 };
1710
1711 static struct clk_branch ecpri_cc_mss_oran_clk = {
1712 .halt_reg = 0xe004,
1713 .halt_check = BRANCH_HALT,
1714 .clkr = {
1715 .enable_reg = 0xe004,
1716 .enable_mask = BIT(0),
1717 .hw.init = &(const struct clk_init_data) {
1718 .name = "ecpri_cc_mss_oran_clk",
1719 .parent_hws = (const struct clk_hw*[]) {
1720 &ecpri_cc_ecpri_oran_clk_src.clkr.hw,
1721 },
1722 .num_parents = 1,
1723 .flags = CLK_SET_RATE_PARENT,
1724 .ops = &clk_branch2_ops,
1725 },
1726 },
1727 };
1728
1729 static struct clk_branch ecpri_cc_phy0_lane0_rx_clk = {
1730 .halt_reg = 0xd000,
1731 .halt_check = BRANCH_HALT,
1732 .clkr = {
1733 .enable_reg = 0xd000,
1734 .enable_mask = BIT(0),
1735 .hw.init = &(const struct clk_init_data) {
1736 .name = "ecpri_cc_phy0_lane0_rx_clk",
1737 .ops = &clk_branch2_ops,
1738 },
1739 },
1740 };
1741
1742 static struct clk_branch ecpri_cc_phy0_lane0_tx_clk = {
1743 .halt_reg = 0xd050,
1744 .halt_check = BRANCH_HALT,
1745 .clkr = {
1746 .enable_reg = 0xd050,
1747 .enable_mask = BIT(0),
1748 .hw.init = &(const struct clk_init_data) {
1749 .name = "ecpri_cc_phy0_lane0_tx_clk",
1750 .ops = &clk_branch2_ops,
1751 },
1752 },
1753 };
1754
1755 static struct clk_branch ecpri_cc_phy0_lane1_rx_clk = {
1756 .halt_reg = 0xd004,
1757 .halt_check = BRANCH_HALT,
1758 .clkr = {
1759 .enable_reg = 0xd004,
1760 .enable_mask = BIT(0),
1761 .hw.init = &(const struct clk_init_data) {
1762 .name = "ecpri_cc_phy0_lane1_rx_clk",
1763 .ops = &clk_branch2_ops,
1764 },
1765 },
1766 };
1767
1768 static struct clk_branch ecpri_cc_phy0_lane1_tx_clk = {
1769 .halt_reg = 0xd054,
1770 .halt_check = BRANCH_HALT,
1771 .clkr = {
1772 .enable_reg = 0xd054,
1773 .enable_mask = BIT(0),
1774 .hw.init = &(const struct clk_init_data) {
1775 .name = "ecpri_cc_phy0_lane1_tx_clk",
1776 .ops = &clk_branch2_ops,
1777 },
1778 },
1779 };
1780
1781 static struct clk_branch ecpri_cc_phy0_lane2_rx_clk = {
1782 .halt_reg = 0xd008,
1783 .halt_check = BRANCH_HALT,
1784 .clkr = {
1785 .enable_reg = 0xd008,
1786 .enable_mask = BIT(0),
1787 .hw.init = &(const struct clk_init_data) {
1788 .name = "ecpri_cc_phy0_lane2_rx_clk",
1789 .ops = &clk_branch2_ops,
1790 },
1791 },
1792 };
1793
1794 static struct clk_branch ecpri_cc_phy0_lane2_tx_clk = {
1795 .halt_reg = 0xd058,
1796 .halt_check = BRANCH_HALT,
1797 .clkr = {
1798 .enable_reg = 0xd058,
1799 .enable_mask = BIT(0),
1800 .hw.init = &(const struct clk_init_data) {
1801 .name = "ecpri_cc_phy0_lane2_tx_clk",
1802 .ops = &clk_branch2_ops,
1803 },
1804 },
1805 };
1806
1807 static struct clk_branch ecpri_cc_phy0_lane3_rx_clk = {
1808 .halt_reg = 0xd00c,
1809 .halt_check = BRANCH_HALT,
1810 .clkr = {
1811 .enable_reg = 0xd00c,
1812 .enable_mask = BIT(0),
1813 .hw.init = &(const struct clk_init_data) {
1814 .name = "ecpri_cc_phy0_lane3_rx_clk",
1815 .ops = &clk_branch2_ops,
1816 },
1817 },
1818 };
1819
1820 static struct clk_branch ecpri_cc_phy0_lane3_tx_clk = {
1821 .halt_reg = 0xd05c,
1822 .halt_check = BRANCH_HALT,
1823 .clkr = {
1824 .enable_reg = 0xd05c,
1825 .enable_mask = BIT(0),
1826 .hw.init = &(const struct clk_init_data) {
1827 .name = "ecpri_cc_phy0_lane3_tx_clk",
1828 .ops = &clk_branch2_ops,
1829 },
1830 },
1831 };
1832
1833 static struct clk_branch ecpri_cc_phy1_lane0_rx_clk = {
1834 .halt_reg = 0xd010,
1835 .halt_check = BRANCH_HALT,
1836 .clkr = {
1837 .enable_reg = 0xd010,
1838 .enable_mask = BIT(0),
1839 .hw.init = &(const struct clk_init_data) {
1840 .name = "ecpri_cc_phy1_lane0_rx_clk",
1841 .ops = &clk_branch2_ops,
1842 },
1843 },
1844 };
1845
1846 static struct clk_branch ecpri_cc_phy1_lane0_tx_clk = {
1847 .halt_reg = 0xd060,
1848 .halt_check = BRANCH_HALT,
1849 .clkr = {
1850 .enable_reg = 0xd060,
1851 .enable_mask = BIT(0),
1852 .hw.init = &(const struct clk_init_data) {
1853 .name = "ecpri_cc_phy1_lane0_tx_clk",
1854 .ops = &clk_branch2_ops,
1855 },
1856 },
1857 };
1858
1859 static struct clk_branch ecpri_cc_phy1_lane1_rx_clk = {
1860 .halt_reg = 0xd014,
1861 .halt_check = BRANCH_HALT,
1862 .clkr = {
1863 .enable_reg = 0xd014,
1864 .enable_mask = BIT(0),
1865 .hw.init = &(const struct clk_init_data) {
1866 .name = "ecpri_cc_phy1_lane1_rx_clk",
1867 .ops = &clk_branch2_ops,
1868 },
1869 },
1870 };
1871
1872 static struct clk_branch ecpri_cc_phy1_lane1_tx_clk = {
1873 .halt_reg = 0xd064,
1874 .halt_check = BRANCH_HALT,
1875 .clkr = {
1876 .enable_reg = 0xd064,
1877 .enable_mask = BIT(0),
1878 .hw.init = &(const struct clk_init_data) {
1879 .name = "ecpri_cc_phy1_lane1_tx_clk",
1880 .ops = &clk_branch2_ops,
1881 },
1882 },
1883 };
1884
1885 static struct clk_branch ecpri_cc_phy1_lane2_rx_clk = {
1886 .halt_reg = 0xd018,
1887 .halt_check = BRANCH_HALT,
1888 .clkr = {
1889 .enable_reg = 0xd018,
1890 .enable_mask = BIT(0),
1891 .hw.init = &(const struct clk_init_data) {
1892 .name = "ecpri_cc_phy1_lane2_rx_clk",
1893 .ops = &clk_branch2_ops,
1894 },
1895 },
1896 };
1897
1898 static struct clk_branch ecpri_cc_phy1_lane2_tx_clk = {
1899 .halt_reg = 0xd068,
1900 .halt_check = BRANCH_HALT,
1901 .clkr = {
1902 .enable_reg = 0xd068,
1903 .enable_mask = BIT(0),
1904 .hw.init = &(const struct clk_init_data) {
1905 .name = "ecpri_cc_phy1_lane2_tx_clk",
1906 .ops = &clk_branch2_ops,
1907 },
1908 },
1909 };
1910
1911 static struct clk_branch ecpri_cc_phy1_lane3_rx_clk = {
1912 .halt_reg = 0xd01c,
1913 .halt_check = BRANCH_HALT,
1914 .clkr = {
1915 .enable_reg = 0xd01c,
1916 .enable_mask = BIT(0),
1917 .hw.init = &(const struct clk_init_data) {
1918 .name = "ecpri_cc_phy1_lane3_rx_clk",
1919 .ops = &clk_branch2_ops,
1920 },
1921 },
1922 };
1923
1924 static struct clk_branch ecpri_cc_phy1_lane3_tx_clk = {
1925 .halt_reg = 0xd06c,
1926 .halt_check = BRANCH_HALT,
1927 .clkr = {
1928 .enable_reg = 0xd06c,
1929 .enable_mask = BIT(0),
1930 .hw.init = &(const struct clk_init_data) {
1931 .name = "ecpri_cc_phy1_lane3_tx_clk",
1932 .ops = &clk_branch2_ops,
1933 },
1934 },
1935 };
1936
1937 static struct clk_branch ecpri_cc_phy2_lane0_rx_clk = {
1938 .halt_reg = 0xd020,
1939 .halt_check = BRANCH_HALT,
1940 .clkr = {
1941 .enable_reg = 0xd020,
1942 .enable_mask = BIT(0),
1943 .hw.init = &(const struct clk_init_data) {
1944 .name = "ecpri_cc_phy2_lane0_rx_clk",
1945 .ops = &clk_branch2_ops,
1946 },
1947 },
1948 };
1949
1950 static struct clk_branch ecpri_cc_phy2_lane0_tx_clk = {
1951 .halt_reg = 0xd070,
1952 .halt_check = BRANCH_HALT,
1953 .clkr = {
1954 .enable_reg = 0xd070,
1955 .enable_mask = BIT(0),
1956 .hw.init = &(const struct clk_init_data) {
1957 .name = "ecpri_cc_phy2_lane0_tx_clk",
1958 .ops = &clk_branch2_ops,
1959 },
1960 },
1961 };
1962
1963 static struct clk_branch ecpri_cc_phy2_lane1_rx_clk = {
1964 .halt_reg = 0xd024,
1965 .halt_check = BRANCH_HALT,
1966 .clkr = {
1967 .enable_reg = 0xd024,
1968 .enable_mask = BIT(0),
1969 .hw.init = &(const struct clk_init_data) {
1970 .name = "ecpri_cc_phy2_lane1_rx_clk",
1971 .ops = &clk_branch2_ops,
1972 },
1973 },
1974 };
1975
1976 static struct clk_branch ecpri_cc_phy2_lane1_tx_clk = {
1977 .halt_reg = 0xd074,
1978 .halt_check = BRANCH_HALT,
1979 .clkr = {
1980 .enable_reg = 0xd074,
1981 .enable_mask = BIT(0),
1982 .hw.init = &(const struct clk_init_data) {
1983 .name = "ecpri_cc_phy2_lane1_tx_clk",
1984 .ops = &clk_branch2_ops,
1985 },
1986 },
1987 };
1988
1989 static struct clk_branch ecpri_cc_phy2_lane2_rx_clk = {
1990 .halt_reg = 0xd028,
1991 .halt_check = BRANCH_HALT,
1992 .clkr = {
1993 .enable_reg = 0xd028,
1994 .enable_mask = BIT(0),
1995 .hw.init = &(const struct clk_init_data) {
1996 .name = "ecpri_cc_phy2_lane2_rx_clk",
1997 .ops = &clk_branch2_ops,
1998 },
1999 },
2000 };
2001
2002 static struct clk_branch ecpri_cc_phy2_lane2_tx_clk = {
2003 .halt_reg = 0xd078,
2004 .halt_check = BRANCH_HALT,
2005 .clkr = {
2006 .enable_reg = 0xd078,
2007 .enable_mask = BIT(0),
2008 .hw.init = &(const struct clk_init_data) {
2009 .name = "ecpri_cc_phy2_lane2_tx_clk",
2010 .ops = &clk_branch2_ops,
2011 },
2012 },
2013 };
2014
2015 static struct clk_branch ecpri_cc_phy2_lane3_rx_clk = {
2016 .halt_reg = 0xd02c,
2017 .halt_check = BRANCH_HALT,
2018 .clkr = {
2019 .enable_reg = 0xd02c,
2020 .enable_mask = BIT(0),
2021 .hw.init = &(const struct clk_init_data) {
2022 .name = "ecpri_cc_phy2_lane3_rx_clk",
2023 .ops = &clk_branch2_ops,
2024 },
2025 },
2026 };
2027
2028 static struct clk_branch ecpri_cc_phy2_lane3_tx_clk = {
2029 .halt_reg = 0xd07c,
2030 .halt_check = BRANCH_HALT,
2031 .clkr = {
2032 .enable_reg = 0xd07c,
2033 .enable_mask = BIT(0),
2034 .hw.init = &(const struct clk_init_data) {
2035 .name = "ecpri_cc_phy2_lane3_tx_clk",
2036 .ops = &clk_branch2_ops,
2037 },
2038 },
2039 };
2040
2041 static struct clk_branch ecpri_cc_phy3_lane0_rx_clk = {
2042 .halt_reg = 0xd030,
2043 .halt_check = BRANCH_HALT,
2044 .clkr = {
2045 .enable_reg = 0xd030,
2046 .enable_mask = BIT(0),
2047 .hw.init = &(const struct clk_init_data) {
2048 .name = "ecpri_cc_phy3_lane0_rx_clk",
2049 .ops = &clk_branch2_ops,
2050 },
2051 },
2052 };
2053
2054 static struct clk_branch ecpri_cc_phy3_lane0_tx_clk = {
2055 .halt_reg = 0xd080,
2056 .halt_check = BRANCH_HALT,
2057 .clkr = {
2058 .enable_reg = 0xd080,
2059 .enable_mask = BIT(0),
2060 .hw.init = &(const struct clk_init_data) {
2061 .name = "ecpri_cc_phy3_lane0_tx_clk",
2062 .ops = &clk_branch2_ops,
2063 },
2064 },
2065 };
2066
2067 static struct clk_branch ecpri_cc_phy3_lane1_rx_clk = {
2068 .halt_reg = 0xd034,
2069 .halt_check = BRANCH_HALT,
2070 .clkr = {
2071 .enable_reg = 0xd034,
2072 .enable_mask = BIT(0),
2073 .hw.init = &(const struct clk_init_data) {
2074 .name = "ecpri_cc_phy3_lane1_rx_clk",
2075 .ops = &clk_branch2_ops,
2076 },
2077 },
2078 };
2079
2080 static struct clk_branch ecpri_cc_phy3_lane1_tx_clk = {
2081 .halt_reg = 0xd084,
2082 .halt_check = BRANCH_HALT,
2083 .clkr = {
2084 .enable_reg = 0xd084,
2085 .enable_mask = BIT(0),
2086 .hw.init = &(const struct clk_init_data) {
2087 .name = "ecpri_cc_phy3_lane1_tx_clk",
2088 .ops = &clk_branch2_ops,
2089 },
2090 },
2091 };
2092
2093 static struct clk_branch ecpri_cc_phy3_lane2_rx_clk = {
2094 .halt_reg = 0xd038,
2095 .halt_check = BRANCH_HALT,
2096 .clkr = {
2097 .enable_reg = 0xd038,
2098 .enable_mask = BIT(0),
2099 .hw.init = &(const struct clk_init_data) {
2100 .name = "ecpri_cc_phy3_lane2_rx_clk",
2101 .ops = &clk_branch2_ops,
2102 },
2103 },
2104 };
2105
2106 static struct clk_branch ecpri_cc_phy3_lane2_tx_clk = {
2107 .halt_reg = 0xd088,
2108 .halt_check = BRANCH_HALT,
2109 .clkr = {
2110 .enable_reg = 0xd088,
2111 .enable_mask = BIT(0),
2112 .hw.init = &(const struct clk_init_data) {
2113 .name = "ecpri_cc_phy3_lane2_tx_clk",
2114 .ops = &clk_branch2_ops,
2115 },
2116 },
2117 };
2118
2119 static struct clk_branch ecpri_cc_phy3_lane3_rx_clk = {
2120 .halt_reg = 0xd03c,
2121 .halt_check = BRANCH_HALT,
2122 .clkr = {
2123 .enable_reg = 0xd03c,
2124 .enable_mask = BIT(0),
2125 .hw.init = &(const struct clk_init_data) {
2126 .name = "ecpri_cc_phy3_lane3_rx_clk",
2127 .ops = &clk_branch2_ops,
2128 },
2129 },
2130 };
2131
2132 static struct clk_branch ecpri_cc_phy3_lane3_tx_clk = {
2133 .halt_reg = 0xd08c,
2134 .halt_check = BRANCH_HALT,
2135 .clkr = {
2136 .enable_reg = 0xd08c,
2137 .enable_mask = BIT(0),
2138 .hw.init = &(const struct clk_init_data) {
2139 .name = "ecpri_cc_phy3_lane3_tx_clk",
2140 .ops = &clk_branch2_ops,
2141 },
2142 },
2143 };
2144
2145 static struct clk_branch ecpri_cc_phy4_lane0_rx_clk = {
2146 .halt_reg = 0xd040,
2147 .halt_check = BRANCH_HALT,
2148 .clkr = {
2149 .enable_reg = 0xd040,
2150 .enable_mask = BIT(0),
2151 .hw.init = &(const struct clk_init_data) {
2152 .name = "ecpri_cc_phy4_lane0_rx_clk",
2153 .ops = &clk_branch2_ops,
2154 },
2155 },
2156 };
2157
2158 static struct clk_branch ecpri_cc_phy4_lane0_tx_clk = {
2159 .halt_reg = 0xd090,
2160 .halt_check = BRANCH_HALT,
2161 .clkr = {
2162 .enable_reg = 0xd090,
2163 .enable_mask = BIT(0),
2164 .hw.init = &(const struct clk_init_data) {
2165 .name = "ecpri_cc_phy4_lane0_tx_clk",
2166 .ops = &clk_branch2_ops,
2167 },
2168 },
2169 };
2170
2171 static struct clk_branch ecpri_cc_phy4_lane1_rx_clk = {
2172 .halt_reg = 0xd044,
2173 .halt_check = BRANCH_HALT,
2174 .clkr = {
2175 .enable_reg = 0xd044,
2176 .enable_mask = BIT(0),
2177 .hw.init = &(const struct clk_init_data) {
2178 .name = "ecpri_cc_phy4_lane1_rx_clk",
2179 .ops = &clk_branch2_ops,
2180 },
2181 },
2182 };
2183
2184 static struct clk_branch ecpri_cc_phy4_lane1_tx_clk = {
2185 .halt_reg = 0xd094,
2186 .halt_check = BRANCH_HALT,
2187 .clkr = {
2188 .enable_reg = 0xd094,
2189 .enable_mask = BIT(0),
2190 .hw.init = &(const struct clk_init_data) {
2191 .name = "ecpri_cc_phy4_lane1_tx_clk",
2192 .ops = &clk_branch2_ops,
2193 },
2194 },
2195 };
2196
2197 static struct clk_branch ecpri_cc_phy4_lane2_rx_clk = {
2198 .halt_reg = 0xd048,
2199 .halt_check = BRANCH_HALT,
2200 .clkr = {
2201 .enable_reg = 0xd048,
2202 .enable_mask = BIT(0),
2203 .hw.init = &(const struct clk_init_data) {
2204 .name = "ecpri_cc_phy4_lane2_rx_clk",
2205 .ops = &clk_branch2_ops,
2206 },
2207 },
2208 };
2209
2210 static struct clk_branch ecpri_cc_phy4_lane2_tx_clk = {
2211 .halt_reg = 0xd098,
2212 .halt_check = BRANCH_HALT,
2213 .clkr = {
2214 .enable_reg = 0xd098,
2215 .enable_mask = BIT(0),
2216 .hw.init = &(const struct clk_init_data) {
2217 .name = "ecpri_cc_phy4_lane2_tx_clk",
2218 .ops = &clk_branch2_ops,
2219 },
2220 },
2221 };
2222
2223 static struct clk_branch ecpri_cc_phy4_lane3_rx_clk = {
2224 .halt_reg = 0xd04c,
2225 .halt_check = BRANCH_HALT,
2226 .clkr = {
2227 .enable_reg = 0xd04c,
2228 .enable_mask = BIT(0),
2229 .hw.init = &(const struct clk_init_data) {
2230 .name = "ecpri_cc_phy4_lane3_rx_clk",
2231 .ops = &clk_branch2_ops,
2232 },
2233 },
2234 };
2235
2236 static struct clk_branch ecpri_cc_phy4_lane3_tx_clk = {
2237 .halt_reg = 0xd09c,
2238 .halt_check = BRANCH_HALT,
2239 .clkr = {
2240 .enable_reg = 0xd09c,
2241 .enable_mask = BIT(0),
2242 .hw.init = &(const struct clk_init_data) {
2243 .name = "ecpri_cc_phy4_lane3_tx_clk",
2244 .ops = &clk_branch2_ops,
2245 },
2246 },
2247 };
2248
2249 static struct clk_regmap *ecpri_cc_qdu1000_clocks[] = {
2250 [ECPRI_CC_ECPRI_CG_CLK] = &ecpri_cc_ecpri_cg_clk.clkr,
2251 [ECPRI_CC_ECPRI_CLK_SRC] = &ecpri_cc_ecpri_clk_src.clkr,
2252 [ECPRI_CC_ECPRI_DMA_CLK] = &ecpri_cc_ecpri_dma_clk.clkr,
2253 [ECPRI_CC_ECPRI_DMA_CLK_SRC] = &ecpri_cc_ecpri_dma_clk_src.clkr,
2254 [ECPRI_CC_ECPRI_DMA_NOC_CLK] = &ecpri_cc_ecpri_dma_noc_clk.clkr,
2255 [ECPRI_CC_ECPRI_FAST_CLK] = &ecpri_cc_ecpri_fast_clk.clkr,
2256 [ECPRI_CC_ECPRI_FAST_CLK_SRC] = &ecpri_cc_ecpri_fast_clk_src.clkr,
2257 [ECPRI_CC_ECPRI_FAST_DIV2_CLK] = &ecpri_cc_ecpri_fast_div2_clk.clkr,
2258 [ECPRI_CC_ECPRI_FAST_DIV2_CLK_SRC] = &ecpri_cc_ecpri_fast_div2_clk_src.clkr,
2259 [ECPRI_CC_ECPRI_FAST_DIV2_NOC_CLK] = &ecpri_cc_ecpri_fast_div2_noc_clk.clkr,
2260 [ECPRI_CC_ECPRI_FR_CLK] = &ecpri_cc_ecpri_fr_clk.clkr,
2261 [ECPRI_CC_ECPRI_ORAN_CLK_SRC] = &ecpri_cc_ecpri_oran_clk_src.clkr,
2262 [ECPRI_CC_ECPRI_ORAN_DIV2_CLK] = &ecpri_cc_ecpri_oran_div2_clk.clkr,
2263 [ECPRI_CC_ETH_100G_C2C0_HM_FF_CLK_SRC] = &ecpri_cc_eth_100g_c2c0_hm_ff_clk_src.clkr,
2264 [ECPRI_CC_ETH_100G_C2C0_UDP_FIFO_CLK] = &ecpri_cc_eth_100g_c2c0_udp_fifo_clk.clkr,
2265 [ECPRI_CC_ETH_100G_C2C1_UDP_FIFO_CLK] = &ecpri_cc_eth_100g_c2c1_udp_fifo_clk.clkr,
2266 [ECPRI_CC_ETH_100G_C2C_0_HM_FF_0_CLK] = &ecpri_cc_eth_100g_c2c_0_hm_ff_0_clk.branch.clkr,
2267 [ECPRI_CC_ETH_100G_C2C_0_HM_FF_1_CLK] = &ecpri_cc_eth_100g_c2c_0_hm_ff_1_clk.branch.clkr,
2268 [ECPRI_CC_ETH_100G_C2C_HM_FF_0_DIV_CLK_SRC] =
2269 &ecpri_cc_eth_100g_c2c_hm_ff_0_div_clk_src.clkr,
2270 [ECPRI_CC_ETH_100G_C2C_HM_FF_1_DIV_CLK_SRC] =
2271 &ecpri_cc_eth_100g_c2c_hm_ff_1_div_clk_src.clkr,
2272 [ECPRI_CC_ETH_100G_C2C_HM_MACSEC_CLK] = &ecpri_cc_eth_100g_c2c_hm_macsec_clk.branch.clkr,
2273 [ECPRI_CC_ETH_100G_C2C_HM_MACSEC_CLK_SRC] = &ecpri_cc_eth_100g_c2c_hm_macsec_clk_src.clkr,
2274 [ECPRI_CC_ETH_100G_DBG_C2C_HM_FF_0_CLK] =
2275 &ecpri_cc_eth_100g_dbg_c2c_hm_ff_0_clk.branch.clkr,
2276 [ECPRI_CC_ETH_100G_DBG_C2C_HM_FF_0_DIV_CLK_SRC] =
2277 &ecpri_cc_eth_100g_dbg_c2c_hm_ff_0_div_clk_src.clkr,
2278 [ECPRI_CC_ETH_100G_DBG_C2C_HM_FF_1_CLK] =
2279 &ecpri_cc_eth_100g_dbg_c2c_hm_ff_1_clk.branch.clkr,
2280 [ECPRI_CC_ETH_100G_DBG_C2C_HM_FF_1_DIV_CLK_SRC] =
2281 &ecpri_cc_eth_100g_dbg_c2c_hm_ff_1_div_clk_src.clkr,
2282 [ECPRI_CC_ETH_100G_DBG_C2C_HM_FF_CLK_SRC] = &ecpri_cc_eth_100g_dbg_c2c_hm_ff_clk_src.clkr,
2283 [ECPRI_CC_ETH_100G_DBG_C2C_UDP_FIFO_CLK] = &ecpri_cc_eth_100g_dbg_c2c_udp_fifo_clk.clkr,
2284 [ECPRI_CC_ETH_100G_FH0_HM_FF_CLK_SRC] = &ecpri_cc_eth_100g_fh0_hm_ff_clk_src.clkr,
2285 [ECPRI_CC_ETH_100G_FH0_MACSEC_CLK_SRC] = &ecpri_cc_eth_100g_fh0_macsec_clk_src.clkr,
2286 [ECPRI_CC_ETH_100G_FH1_HM_FF_CLK_SRC] = &ecpri_cc_eth_100g_fh1_hm_ff_clk_src.clkr,
2287 [ECPRI_CC_ETH_100G_FH1_MACSEC_CLK_SRC] = &ecpri_cc_eth_100g_fh1_macsec_clk_src.clkr,
2288 [ECPRI_CC_ETH_100G_FH2_HM_FF_CLK_SRC] = &ecpri_cc_eth_100g_fh2_hm_ff_clk_src.clkr,
2289 [ECPRI_CC_ETH_100G_FH2_MACSEC_CLK_SRC] = &ecpri_cc_eth_100g_fh2_macsec_clk_src.clkr,
2290 [ECPRI_CC_ETH_100G_FH_0_HM_FF_0_CLK] = &ecpri_cc_eth_100g_fh_0_hm_ff_0_clk.branch.clkr,
2291 [ECPRI_CC_ETH_100G_FH_0_HM_FF_0_DIV_CLK_SRC] =
2292 &ecpri_cc_eth_100g_fh_0_hm_ff_0_div_clk_src.clkr,
2293 [ECPRI_CC_ETH_100G_FH_0_HM_FF_1_CLK] = &ecpri_cc_eth_100g_fh_0_hm_ff_1_clk.branch.clkr,
2294 [ECPRI_CC_ETH_100G_FH_0_HM_FF_1_DIV_CLK_SRC] =
2295 &ecpri_cc_eth_100g_fh_0_hm_ff_1_div_clk_src.clkr,
2296 [ECPRI_CC_ETH_100G_FH_0_HM_FF_2_CLK] = &ecpri_cc_eth_100g_fh_0_hm_ff_2_clk.branch.clkr,
2297 [ECPRI_CC_ETH_100G_FH_0_HM_FF_2_DIV_CLK_SRC] =
2298 &ecpri_cc_eth_100g_fh_0_hm_ff_2_div_clk_src.clkr,
2299 [ECPRI_CC_ETH_100G_FH_0_HM_FF_3_CLK] = &ecpri_cc_eth_100g_fh_0_hm_ff_3_clk.branch.clkr,
2300 [ECPRI_CC_ETH_100G_FH_0_HM_FF_3_DIV_CLK_SRC] =
2301 &ecpri_cc_eth_100g_fh_0_hm_ff_3_div_clk_src.clkr,
2302 [ECPRI_CC_ETH_100G_FH_0_UDP_FIFO_CLK] = &ecpri_cc_eth_100g_fh_0_udp_fifo_clk.clkr,
2303 [ECPRI_CC_ETH_100G_FH_1_HM_FF_0_CLK] = &ecpri_cc_eth_100g_fh_1_hm_ff_0_clk.branch.clkr,
2304 [ECPRI_CC_ETH_100G_FH_1_HM_FF_0_DIV_CLK_SRC] =
2305 &ecpri_cc_eth_100g_fh_1_hm_ff_0_div_clk_src.clkr,
2306 [ECPRI_CC_ETH_100G_FH_1_HM_FF_1_CLK] = &ecpri_cc_eth_100g_fh_1_hm_ff_1_clk.branch.clkr,
2307 [ECPRI_CC_ETH_100G_FH_1_HM_FF_1_DIV_CLK_SRC] =
2308 &ecpri_cc_eth_100g_fh_1_hm_ff_1_div_clk_src.clkr,
2309 [ECPRI_CC_ETH_100G_FH_1_HM_FF_2_CLK] = &ecpri_cc_eth_100g_fh_1_hm_ff_2_clk.branch.clkr,
2310 [ECPRI_CC_ETH_100G_FH_1_HM_FF_2_DIV_CLK_SRC] =
2311 &ecpri_cc_eth_100g_fh_1_hm_ff_2_div_clk_src.clkr,
2312 [ECPRI_CC_ETH_100G_FH_1_HM_FF_3_CLK] = &ecpri_cc_eth_100g_fh_1_hm_ff_3_clk.branch.clkr,
2313 [ECPRI_CC_ETH_100G_FH_1_HM_FF_3_DIV_CLK_SRC] =
2314 &ecpri_cc_eth_100g_fh_1_hm_ff_3_div_clk_src.clkr,
2315 [ECPRI_CC_ETH_100G_FH_1_UDP_FIFO_CLK] = &ecpri_cc_eth_100g_fh_1_udp_fifo_clk.clkr,
2316 [ECPRI_CC_ETH_100G_FH_2_HM_FF_0_CLK] = &ecpri_cc_eth_100g_fh_2_hm_ff_0_clk.branch.clkr,
2317 [ECPRI_CC_ETH_100G_FH_2_HM_FF_0_DIV_CLK_SRC] =
2318 &ecpri_cc_eth_100g_fh_2_hm_ff_0_div_clk_src.clkr,
2319 [ECPRI_CC_ETH_100G_FH_2_HM_FF_1_CLK] = &ecpri_cc_eth_100g_fh_2_hm_ff_1_clk.branch.clkr,
2320 [ECPRI_CC_ETH_100G_FH_2_HM_FF_1_DIV_CLK_SRC] =
2321 &ecpri_cc_eth_100g_fh_2_hm_ff_1_div_clk_src.clkr,
2322 [ECPRI_CC_ETH_100G_FH_2_HM_FF_2_CLK] = &ecpri_cc_eth_100g_fh_2_hm_ff_2_clk.branch.clkr,
2323 [ECPRI_CC_ETH_100G_FH_2_HM_FF_2_DIV_CLK_SRC] =
2324 &ecpri_cc_eth_100g_fh_2_hm_ff_2_div_clk_src.clkr,
2325 [ECPRI_CC_ETH_100G_FH_2_HM_FF_3_CLK] = &ecpri_cc_eth_100g_fh_2_hm_ff_3_clk.branch.clkr,
2326 [ECPRI_CC_ETH_100G_FH_2_HM_FF_3_DIV_CLK_SRC] =
2327 &ecpri_cc_eth_100g_fh_2_hm_ff_3_div_clk_src.clkr,
2328 [ECPRI_CC_ETH_100G_FH_2_UDP_FIFO_CLK] = &ecpri_cc_eth_100g_fh_2_udp_fifo_clk.clkr,
2329 [ECPRI_CC_ETH_100G_FH_MACSEC_0_CLK] = &ecpri_cc_eth_100g_fh_macsec_0_clk.branch.clkr,
2330 [ECPRI_CC_ETH_100G_FH_MACSEC_1_CLK] = &ecpri_cc_eth_100g_fh_macsec_1_clk.branch.clkr,
2331 [ECPRI_CC_ETH_100G_FH_MACSEC_2_CLK] = &ecpri_cc_eth_100g_fh_macsec_2_clk.branch.clkr,
2332 [ECPRI_CC_ETH_100G_MAC_C2C_HM_REF_CLK] = &ecpri_cc_eth_100g_mac_c2c_hm_ref_clk.branch.clkr,
2333 [ECPRI_CC_ETH_100G_MAC_C2C_HM_REF_CLK_SRC] = &ecpri_cc_eth_100g_mac_c2c_hm_ref_clk_src.clkr,
2334 [ECPRI_CC_ETH_100G_MAC_DBG_C2C_HM_REF_CLK] =
2335 &ecpri_cc_eth_100g_mac_dbg_c2c_hm_ref_clk.branch.clkr,
2336 [ECPRI_CC_ETH_100G_MAC_DBG_C2C_HM_REF_CLK_SRC] =
2337 &ecpri_cc_eth_100g_mac_dbg_c2c_hm_ref_clk_src.clkr,
2338 [ECPRI_CC_ETH_100G_MAC_FH0_HM_REF_CLK] = &ecpri_cc_eth_100g_mac_fh0_hm_ref_clk.branch.clkr,
2339 [ECPRI_CC_ETH_100G_MAC_FH0_HM_REF_CLK_SRC] = &ecpri_cc_eth_100g_mac_fh0_hm_ref_clk_src.clkr,
2340 [ECPRI_CC_ETH_100G_MAC_FH1_HM_REF_CLK] = &ecpri_cc_eth_100g_mac_fh1_hm_ref_clk.branch.clkr,
2341 [ECPRI_CC_ETH_100G_MAC_FH1_HM_REF_CLK_SRC] = &ecpri_cc_eth_100g_mac_fh1_hm_ref_clk_src.clkr,
2342 [ECPRI_CC_ETH_100G_MAC_FH2_HM_REF_CLK] = &ecpri_cc_eth_100g_mac_fh2_hm_ref_clk.branch.clkr,
2343 [ECPRI_CC_ETH_100G_MAC_FH2_HM_REF_CLK_SRC] = &ecpri_cc_eth_100g_mac_fh2_hm_ref_clk_src.clkr,
2344 [ECPRI_CC_ETH_DBG_NFAPI_AXI_CLK] = &ecpri_cc_eth_dbg_nfapi_axi_clk.clkr,
2345 [ECPRI_CC_ETH_DBG_NOC_AXI_CLK] = &ecpri_cc_eth_dbg_noc_axi_clk.clkr,
2346 [ECPRI_CC_ETH_PHY_0_OCK_SRAM_CLK] = &ecpri_cc_eth_phy_0_ock_sram_clk.branch.clkr,
2347 [ECPRI_CC_ETH_PHY_1_OCK_SRAM_CLK] = &ecpri_cc_eth_phy_1_ock_sram_clk.branch.clkr,
2348 [ECPRI_CC_ETH_PHY_2_OCK_SRAM_CLK] = &ecpri_cc_eth_phy_2_ock_sram_clk.branch.clkr,
2349 [ECPRI_CC_ETH_PHY_3_OCK_SRAM_CLK] = &ecpri_cc_eth_phy_3_ock_sram_clk.branch.clkr,
2350 [ECPRI_CC_ETH_PHY_4_OCK_SRAM_CLK] = &ecpri_cc_eth_phy_4_ock_sram_clk.branch.clkr,
2351 [ECPRI_CC_MSS_EMAC_CLK] = &ecpri_cc_mss_emac_clk.clkr,
2352 [ECPRI_CC_MSS_EMAC_CLK_SRC] = &ecpri_cc_mss_emac_clk_src.clkr,
2353 [ECPRI_CC_MSS_ORAN_CLK] = &ecpri_cc_mss_oran_clk.clkr,
2354 [ECPRI_CC_PHY0_LANE0_RX_CLK] = &ecpri_cc_phy0_lane0_rx_clk.clkr,
2355 [ECPRI_CC_PHY0_LANE0_TX_CLK] = &ecpri_cc_phy0_lane0_tx_clk.clkr,
2356 [ECPRI_CC_PHY0_LANE1_RX_CLK] = &ecpri_cc_phy0_lane1_rx_clk.clkr,
2357 [ECPRI_CC_PHY0_LANE1_TX_CLK] = &ecpri_cc_phy0_lane1_tx_clk.clkr,
2358 [ECPRI_CC_PHY0_LANE2_RX_CLK] = &ecpri_cc_phy0_lane2_rx_clk.clkr,
2359 [ECPRI_CC_PHY0_LANE2_TX_CLK] = &ecpri_cc_phy0_lane2_tx_clk.clkr,
2360 [ECPRI_CC_PHY0_LANE3_RX_CLK] = &ecpri_cc_phy0_lane3_rx_clk.clkr,
2361 [ECPRI_CC_PHY0_LANE3_TX_CLK] = &ecpri_cc_phy0_lane3_tx_clk.clkr,
2362 [ECPRI_CC_PHY1_LANE0_RX_CLK] = &ecpri_cc_phy1_lane0_rx_clk.clkr,
2363 [ECPRI_CC_PHY1_LANE0_TX_CLK] = &ecpri_cc_phy1_lane0_tx_clk.clkr,
2364 [ECPRI_CC_PHY1_LANE1_RX_CLK] = &ecpri_cc_phy1_lane1_rx_clk.clkr,
2365 [ECPRI_CC_PHY1_LANE1_TX_CLK] = &ecpri_cc_phy1_lane1_tx_clk.clkr,
2366 [ECPRI_CC_PHY1_LANE2_RX_CLK] = &ecpri_cc_phy1_lane2_rx_clk.clkr,
2367 [ECPRI_CC_PHY1_LANE2_TX_CLK] = &ecpri_cc_phy1_lane2_tx_clk.clkr,
2368 [ECPRI_CC_PHY1_LANE3_RX_CLK] = &ecpri_cc_phy1_lane3_rx_clk.clkr,
2369 [ECPRI_CC_PHY1_LANE3_TX_CLK] = &ecpri_cc_phy1_lane3_tx_clk.clkr,
2370 [ECPRI_CC_PHY2_LANE0_RX_CLK] = &ecpri_cc_phy2_lane0_rx_clk.clkr,
2371 [ECPRI_CC_PHY2_LANE0_TX_CLK] = &ecpri_cc_phy2_lane0_tx_clk.clkr,
2372 [ECPRI_CC_PHY2_LANE1_RX_CLK] = &ecpri_cc_phy2_lane1_rx_clk.clkr,
2373 [ECPRI_CC_PHY2_LANE1_TX_CLK] = &ecpri_cc_phy2_lane1_tx_clk.clkr,
2374 [ECPRI_CC_PHY2_LANE2_RX_CLK] = &ecpri_cc_phy2_lane2_rx_clk.clkr,
2375 [ECPRI_CC_PHY2_LANE2_TX_CLK] = &ecpri_cc_phy2_lane2_tx_clk.clkr,
2376 [ECPRI_CC_PHY2_LANE3_RX_CLK] = &ecpri_cc_phy2_lane3_rx_clk.clkr,
2377 [ECPRI_CC_PHY2_LANE3_TX_CLK] = &ecpri_cc_phy2_lane3_tx_clk.clkr,
2378 [ECPRI_CC_PHY3_LANE0_RX_CLK] = &ecpri_cc_phy3_lane0_rx_clk.clkr,
2379 [ECPRI_CC_PHY3_LANE0_TX_CLK] = &ecpri_cc_phy3_lane0_tx_clk.clkr,
2380 [ECPRI_CC_PHY3_LANE1_RX_CLK] = &ecpri_cc_phy3_lane1_rx_clk.clkr,
2381 [ECPRI_CC_PHY3_LANE1_TX_CLK] = &ecpri_cc_phy3_lane1_tx_clk.clkr,
2382 [ECPRI_CC_PHY3_LANE2_RX_CLK] = &ecpri_cc_phy3_lane2_rx_clk.clkr,
2383 [ECPRI_CC_PHY3_LANE2_TX_CLK] = &ecpri_cc_phy3_lane2_tx_clk.clkr,
2384 [ECPRI_CC_PHY3_LANE3_RX_CLK] = &ecpri_cc_phy3_lane3_rx_clk.clkr,
2385 [ECPRI_CC_PHY3_LANE3_TX_CLK] = &ecpri_cc_phy3_lane3_tx_clk.clkr,
2386 [ECPRI_CC_PHY4_LANE0_RX_CLK] = &ecpri_cc_phy4_lane0_rx_clk.clkr,
2387 [ECPRI_CC_PHY4_LANE0_TX_CLK] = &ecpri_cc_phy4_lane0_tx_clk.clkr,
2388 [ECPRI_CC_PHY4_LANE1_RX_CLK] = &ecpri_cc_phy4_lane1_rx_clk.clkr,
2389 [ECPRI_CC_PHY4_LANE1_TX_CLK] = &ecpri_cc_phy4_lane1_tx_clk.clkr,
2390 [ECPRI_CC_PHY4_LANE2_RX_CLK] = &ecpri_cc_phy4_lane2_rx_clk.clkr,
2391 [ECPRI_CC_PHY4_LANE2_TX_CLK] = &ecpri_cc_phy4_lane2_tx_clk.clkr,
2392 [ECPRI_CC_PHY4_LANE3_RX_CLK] = &ecpri_cc_phy4_lane3_rx_clk.clkr,
2393 [ECPRI_CC_PHY4_LANE3_TX_CLK] = &ecpri_cc_phy4_lane3_tx_clk.clkr,
2394 [ECPRI_CC_PLL0] = &ecpri_cc_pll0.clkr,
2395 [ECPRI_CC_PLL1] = &ecpri_cc_pll1.clkr,
2396 };
2397
2398 static const struct qcom_reset_map ecpri_cc_qdu1000_resets[] = {
2399 [ECPRI_CC_CLK_CTL_TOP_ECPRI_CC_ECPRI_SS_BCR] = { 0x9000 },
2400 [ECPRI_CC_CLK_CTL_TOP_ECPRI_CC_ETH_C2C_BCR] = { 0x80a8 },
2401 [ECPRI_CC_CLK_CTL_TOP_ECPRI_CC_ETH_FH0_BCR] = { 0x8000 },
2402 [ECPRI_CC_CLK_CTL_TOP_ECPRI_CC_ETH_FH1_BCR] = { 0x8038 },
2403 [ECPRI_CC_CLK_CTL_TOP_ECPRI_CC_ETH_FH2_BCR] = { 0x8070 },
2404 [ECPRI_CC_CLK_CTL_TOP_ECPRI_CC_ETH_WRAPPER_TOP_BCR] = { 0x8104 },
2405 [ECPRI_CC_CLK_CTL_TOP_ECPRI_CC_MODEM_BCR] = { 0xe000 },
2406 [ECPRI_CC_CLK_CTL_TOP_ECPRI_CC_NOC_BCR] = { 0xf000 },
2407 };
2408
2409 static const struct regmap_config ecpri_cc_qdu1000_regmap_config = {
2410 .reg_bits = 32,
2411 .reg_stride = 4,
2412 .val_bits = 32,
2413 .max_register = 0x31bf0,
2414 .fast_io = true,
2415 };
2416
2417 static const struct qcom_cc_desc ecpri_cc_qdu1000_desc = {
2418 .config = &ecpri_cc_qdu1000_regmap_config,
2419 .clks = ecpri_cc_qdu1000_clocks,
2420 .num_clks = ARRAY_SIZE(ecpri_cc_qdu1000_clocks),
2421 .resets = ecpri_cc_qdu1000_resets,
2422 .num_resets = ARRAY_SIZE(ecpri_cc_qdu1000_resets),
2423 };
2424
2425 static const struct of_device_id ecpri_cc_qdu1000_match_table[] = {
2426 { .compatible = "qcom,qdu1000-ecpricc" },
2427 { }
2428 };
2429 MODULE_DEVICE_TABLE(of, ecpri_cc_qdu1000_match_table);
2430
ecpri_cc_qdu1000_probe(struct platform_device * pdev)2431 static int ecpri_cc_qdu1000_probe(struct platform_device *pdev)
2432 {
2433 struct regmap *regmap;
2434
2435 regmap = qcom_cc_map(pdev, &ecpri_cc_qdu1000_desc);
2436 if (IS_ERR(regmap))
2437 return PTR_ERR(regmap);
2438
2439 clk_lucid_evo_pll_configure(&ecpri_cc_pll0, regmap, &ecpri_cc_pll0_config);
2440 clk_lucid_evo_pll_configure(&ecpri_cc_pll1, regmap, &ecpri_cc_pll1_config);
2441
2442 return qcom_cc_really_probe(&pdev->dev, &ecpri_cc_qdu1000_desc, regmap);
2443 }
2444
2445 static struct platform_driver ecpri_cc_qdu1000_driver = {
2446 .probe = ecpri_cc_qdu1000_probe,
2447 .driver = {
2448 .name = "ecpri_cc-qdu1000",
2449 .of_match_table = ecpri_cc_qdu1000_match_table,
2450 },
2451 };
2452
2453 module_platform_driver(ecpri_cc_qdu1000_driver);
2454
2455 MODULE_DESCRIPTION("QTI ECPRICC QDU1000 Driver");
2456 MODULE_LICENSE("GPL");
2457