1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3 * Copyright (c) 2017, The Linux Foundation. All rights reserved.
4 */
5
6 #include <linux/kernel.h>
7 #include <linux/err.h>
8 #include <linux/platform_device.h>
9 #include <linux/module.h>
10 #include <linux/of.h>
11 #include <linux/clk-provider.h>
12 #include <linux/regmap.h>
13
14 #include <dt-bindings/clock/qcom,gcc-ipq8074.h>
15
16 #include "common.h"
17 #include "clk-regmap.h"
18 #include "clk-pll.h"
19 #include "clk-rcg.h"
20 #include "clk-branch.h"
21 #include "clk-alpha-pll.h"
22 #include "clk-regmap-divider.h"
23 #include "clk-regmap-mux.h"
24 #include "gdsc.h"
25 #include "reset.h"
26
27 enum {
28 P_XO,
29 P_GPLL0,
30 P_GPLL0_DIV2,
31 P_GPLL2,
32 P_GPLL4,
33 P_GPLL6,
34 P_SLEEP_CLK,
35 P_PCIE20_PHY0_PIPE,
36 P_PCIE20_PHY1_PIPE,
37 P_USB3PHY_0_PIPE,
38 P_USB3PHY_1_PIPE,
39 P_UBI32_PLL,
40 P_NSS_CRYPTO_PLL,
41 P_BIAS_PLL,
42 P_BIAS_PLL_NSS_NOC,
43 P_UNIPHY0_RX,
44 P_UNIPHY0_TX,
45 P_UNIPHY1_RX,
46 P_UNIPHY1_TX,
47 P_UNIPHY2_RX,
48 P_UNIPHY2_TX,
49 };
50
51 static struct clk_alpha_pll gpll0_main = {
52 .offset = 0x21000,
53 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
54 .clkr = {
55 .enable_reg = 0x0b000,
56 .enable_mask = BIT(0),
57 .hw.init = &(struct clk_init_data){
58 .name = "gpll0_main",
59 .parent_data = &(const struct clk_parent_data){
60 .fw_name = "xo",
61 .name = "xo",
62 },
63 .num_parents = 1,
64 .ops = &clk_alpha_pll_ops,
65 },
66 },
67 };
68
69 static struct clk_fixed_factor gpll0_out_main_div2 = {
70 .mult = 1,
71 .div = 2,
72 .hw.init = &(struct clk_init_data){
73 .name = "gpll0_out_main_div2",
74 .parent_hws = (const struct clk_hw *[]){
75 &gpll0_main.clkr.hw },
76 .num_parents = 1,
77 .ops = &clk_fixed_factor_ops,
78 .flags = CLK_SET_RATE_PARENT,
79 },
80 };
81
82 static struct clk_alpha_pll_postdiv gpll0 = {
83 .offset = 0x21000,
84 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
85 .width = 4,
86 .clkr.hw.init = &(struct clk_init_data){
87 .name = "gpll0",
88 .parent_hws = (const struct clk_hw *[]){
89 &gpll0_main.clkr.hw },
90 .num_parents = 1,
91 .ops = &clk_alpha_pll_postdiv_ro_ops,
92 },
93 };
94
95 static struct clk_alpha_pll gpll2_main = {
96 .offset = 0x4a000,
97 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
98 .clkr = {
99 .enable_reg = 0x0b000,
100 .enable_mask = BIT(2),
101 .hw.init = &(struct clk_init_data){
102 .name = "gpll2_main",
103 .parent_data = &(const struct clk_parent_data){
104 .fw_name = "xo",
105 .name = "xo",
106 },
107 .num_parents = 1,
108 .ops = &clk_alpha_pll_ops,
109 .flags = CLK_IS_CRITICAL,
110 },
111 },
112 };
113
114 static struct clk_alpha_pll_postdiv gpll2 = {
115 .offset = 0x4a000,
116 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
117 .width = 4,
118 .clkr.hw.init = &(struct clk_init_data){
119 .name = "gpll2",
120 .parent_hws = (const struct clk_hw *[]){
121 &gpll2_main.clkr.hw },
122 .num_parents = 1,
123 .ops = &clk_alpha_pll_postdiv_ro_ops,
124 .flags = CLK_SET_RATE_PARENT,
125 },
126 };
127
128 static struct clk_alpha_pll gpll4_main = {
129 .offset = 0x24000,
130 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
131 .clkr = {
132 .enable_reg = 0x0b000,
133 .enable_mask = BIT(5),
134 .hw.init = &(struct clk_init_data){
135 .name = "gpll4_main",
136 .parent_data = &(const struct clk_parent_data){
137 .fw_name = "xo",
138 .name = "xo",
139 },
140 .num_parents = 1,
141 .ops = &clk_alpha_pll_ops,
142 .flags = CLK_IS_CRITICAL,
143 },
144 },
145 };
146
147 static struct clk_alpha_pll_postdiv gpll4 = {
148 .offset = 0x24000,
149 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
150 .width = 4,
151 .clkr.hw.init = &(struct clk_init_data){
152 .name = "gpll4",
153 .parent_hws = (const struct clk_hw *[]){
154 &gpll4_main.clkr.hw },
155 .num_parents = 1,
156 .ops = &clk_alpha_pll_postdiv_ro_ops,
157 .flags = CLK_SET_RATE_PARENT,
158 },
159 };
160
161 static struct clk_alpha_pll gpll6_main = {
162 .offset = 0x37000,
163 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_BRAMMO],
164 .flags = SUPPORTS_DYNAMIC_UPDATE,
165 .clkr = {
166 .enable_reg = 0x0b000,
167 .enable_mask = BIT(7),
168 .hw.init = &(struct clk_init_data){
169 .name = "gpll6_main",
170 .parent_data = &(const struct clk_parent_data){
171 .fw_name = "xo",
172 .name = "xo",
173 },
174 .num_parents = 1,
175 .ops = &clk_alpha_pll_ops,
176 .flags = CLK_IS_CRITICAL,
177 },
178 },
179 };
180
181 static struct clk_alpha_pll_postdiv gpll6 = {
182 .offset = 0x37000,
183 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_BRAMMO],
184 .width = 2,
185 .clkr.hw.init = &(struct clk_init_data){
186 .name = "gpll6",
187 .parent_hws = (const struct clk_hw *[]){
188 &gpll6_main.clkr.hw },
189 .num_parents = 1,
190 .ops = &clk_alpha_pll_postdiv_ro_ops,
191 .flags = CLK_SET_RATE_PARENT,
192 },
193 };
194
195 static struct clk_fixed_factor gpll6_out_main_div2 = {
196 .mult = 1,
197 .div = 2,
198 .hw.init = &(struct clk_init_data){
199 .name = "gpll6_out_main_div2",
200 .parent_hws = (const struct clk_hw *[]){
201 &gpll6_main.clkr.hw },
202 .num_parents = 1,
203 .ops = &clk_fixed_factor_ops,
204 .flags = CLK_SET_RATE_PARENT,
205 },
206 };
207
208 static struct clk_alpha_pll ubi32_pll_main = {
209 .offset = 0x25000,
210 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_HUAYRA],
211 .flags = SUPPORTS_DYNAMIC_UPDATE,
212 .clkr = {
213 .enable_reg = 0x0b000,
214 .enable_mask = BIT(6),
215 .hw.init = &(struct clk_init_data){
216 .name = "ubi32_pll_main",
217 .parent_data = &(const struct clk_parent_data){
218 .fw_name = "xo",
219 .name = "xo",
220 },
221 .num_parents = 1,
222 .ops = &clk_alpha_pll_huayra_ops,
223 },
224 },
225 };
226
227 static struct clk_alpha_pll_postdiv ubi32_pll = {
228 .offset = 0x25000,
229 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_HUAYRA],
230 .width = 2,
231 .clkr.hw.init = &(struct clk_init_data){
232 .name = "ubi32_pll",
233 .parent_hws = (const struct clk_hw *[]){
234 &ubi32_pll_main.clkr.hw },
235 .num_parents = 1,
236 .ops = &clk_alpha_pll_postdiv_ro_ops,
237 .flags = CLK_SET_RATE_PARENT,
238 },
239 };
240
241 static struct clk_alpha_pll nss_crypto_pll_main = {
242 .offset = 0x22000,
243 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
244 .clkr = {
245 .enable_reg = 0x0b000,
246 .enable_mask = BIT(4),
247 .hw.init = &(struct clk_init_data){
248 .name = "nss_crypto_pll_main",
249 .parent_data = &(const struct clk_parent_data){
250 .fw_name = "xo",
251 .name = "xo",
252 },
253 .num_parents = 1,
254 .ops = &clk_alpha_pll_ops,
255 },
256 },
257 };
258
259 static struct clk_alpha_pll_postdiv nss_crypto_pll = {
260 .offset = 0x22000,
261 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
262 .width = 4,
263 .clkr.hw.init = &(struct clk_init_data){
264 .name = "nss_crypto_pll",
265 .parent_hws = (const struct clk_hw *[]){
266 &nss_crypto_pll_main.clkr.hw },
267 .num_parents = 1,
268 .ops = &clk_alpha_pll_postdiv_ro_ops,
269 .flags = CLK_SET_RATE_PARENT,
270 },
271 };
272
273 static const struct freq_tbl ftbl_pcnoc_bfdcd_clk_src[] = {
274 F(19200000, P_XO, 1, 0, 0),
275 F(50000000, P_GPLL0, 16, 0, 0),
276 F(100000000, P_GPLL0, 8, 0, 0),
277 { }
278 };
279
280 static const struct clk_parent_data gcc_xo_gpll0_gpll0_out_main_div2[] = {
281 { .fw_name = "xo", .name = "xo" },
282 { .hw = &gpll0.clkr.hw},
283 { .hw = &gpll0_out_main_div2.hw},
284 };
285
286 static const struct parent_map gcc_xo_gpll0_gpll0_out_main_div2_map[] = {
287 { P_XO, 0 },
288 { P_GPLL0, 1 },
289 { P_GPLL0_DIV2, 4 },
290 };
291
292 static struct clk_rcg2 pcnoc_bfdcd_clk_src = {
293 .cmd_rcgr = 0x27000,
294 .freq_tbl = ftbl_pcnoc_bfdcd_clk_src,
295 .hid_width = 5,
296 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
297 .clkr.hw.init = &(struct clk_init_data){
298 .name = "pcnoc_bfdcd_clk_src",
299 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
300 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
301 .ops = &clk_rcg2_ops,
302 .flags = CLK_IS_CRITICAL,
303 },
304 };
305
306 static struct clk_fixed_factor pcnoc_clk_src = {
307 .mult = 1,
308 .div = 1,
309 .hw.init = &(struct clk_init_data){
310 .name = "pcnoc_clk_src",
311 .parent_hws = (const struct clk_hw *[]){
312 &pcnoc_bfdcd_clk_src.clkr.hw },
313 .num_parents = 1,
314 .ops = &clk_fixed_factor_ops,
315 .flags = CLK_SET_RATE_PARENT,
316 },
317 };
318
319 static struct clk_branch gcc_sleep_clk_src = {
320 .halt_reg = 0x30000,
321 .clkr = {
322 .enable_reg = 0x30000,
323 .enable_mask = BIT(1),
324 .hw.init = &(struct clk_init_data){
325 .name = "gcc_sleep_clk_src",
326 .parent_data = &(const struct clk_parent_data){
327 .fw_name = "sleep_clk",
328 .name = "sleep_clk",
329 },
330 .num_parents = 1,
331 .ops = &clk_branch2_ops,
332 .flags = CLK_IS_CRITICAL,
333 },
334 },
335 };
336
337 static const struct freq_tbl ftbl_blsp1_qup_i2c_apps_clk_src[] = {
338 F(19200000, P_XO, 1, 0, 0),
339 F(25000000, P_GPLL0_DIV2, 16, 0, 0),
340 F(50000000, P_GPLL0, 16, 0, 0),
341 { }
342 };
343
344 static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
345 .cmd_rcgr = 0x0200c,
346 .freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,
347 .hid_width = 5,
348 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
349 .clkr.hw.init = &(struct clk_init_data){
350 .name = "blsp1_qup1_i2c_apps_clk_src",
351 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
352 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
353 .ops = &clk_rcg2_ops,
354 },
355 };
356
357 static const struct freq_tbl ftbl_blsp1_qup_spi_apps_clk_src[] = {
358 F(960000, P_XO, 10, 1, 2),
359 F(4800000, P_XO, 4, 0, 0),
360 F(9600000, P_XO, 2, 0, 0),
361 F(12500000, P_GPLL0_DIV2, 16, 1, 2),
362 F(16000000, P_GPLL0, 10, 1, 5),
363 F(19200000, P_XO, 1, 0, 0),
364 F(25000000, P_GPLL0, 16, 1, 2),
365 F(50000000, P_GPLL0, 16, 0, 0),
366 { }
367 };
368
369 static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
370 .cmd_rcgr = 0x02024,
371 .freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,
372 .mnd_width = 8,
373 .hid_width = 5,
374 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
375 .clkr.hw.init = &(struct clk_init_data){
376 .name = "blsp1_qup1_spi_apps_clk_src",
377 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
378 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
379 .ops = &clk_rcg2_ops,
380 },
381 };
382
383 static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
384 .cmd_rcgr = 0x03000,
385 .freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,
386 .hid_width = 5,
387 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
388 .clkr.hw.init = &(struct clk_init_data){
389 .name = "blsp1_qup2_i2c_apps_clk_src",
390 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
391 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
392 .ops = &clk_rcg2_ops,
393 },
394 };
395
396 static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
397 .cmd_rcgr = 0x03014,
398 .freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,
399 .mnd_width = 8,
400 .hid_width = 5,
401 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
402 .clkr.hw.init = &(struct clk_init_data){
403 .name = "blsp1_qup2_spi_apps_clk_src",
404 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
405 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
406 .ops = &clk_rcg2_ops,
407 },
408 };
409
410 static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
411 .cmd_rcgr = 0x04000,
412 .freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,
413 .hid_width = 5,
414 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
415 .clkr.hw.init = &(struct clk_init_data){
416 .name = "blsp1_qup3_i2c_apps_clk_src",
417 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
418 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
419 .ops = &clk_rcg2_ops,
420 },
421 };
422
423 static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
424 .cmd_rcgr = 0x04014,
425 .freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,
426 .mnd_width = 8,
427 .hid_width = 5,
428 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
429 .clkr.hw.init = &(struct clk_init_data){
430 .name = "blsp1_qup3_spi_apps_clk_src",
431 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
432 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
433 .ops = &clk_rcg2_ops,
434 },
435 };
436
437 static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
438 .cmd_rcgr = 0x05000,
439 .freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,
440 .hid_width = 5,
441 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
442 .clkr.hw.init = &(struct clk_init_data){
443 .name = "blsp1_qup4_i2c_apps_clk_src",
444 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
445 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
446 .ops = &clk_rcg2_ops,
447 },
448 };
449
450 static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
451 .cmd_rcgr = 0x05014,
452 .freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,
453 .mnd_width = 8,
454 .hid_width = 5,
455 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
456 .clkr.hw.init = &(struct clk_init_data){
457 .name = "blsp1_qup4_spi_apps_clk_src",
458 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
459 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
460 .ops = &clk_rcg2_ops,
461 },
462 };
463
464 static struct clk_rcg2 blsp1_qup5_i2c_apps_clk_src = {
465 .cmd_rcgr = 0x06000,
466 .freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,
467 .hid_width = 5,
468 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
469 .clkr.hw.init = &(struct clk_init_data){
470 .name = "blsp1_qup5_i2c_apps_clk_src",
471 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
472 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
473 .ops = &clk_rcg2_ops,
474 },
475 };
476
477 static struct clk_rcg2 blsp1_qup5_spi_apps_clk_src = {
478 .cmd_rcgr = 0x06014,
479 .freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,
480 .mnd_width = 8,
481 .hid_width = 5,
482 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
483 .clkr.hw.init = &(struct clk_init_data){
484 .name = "blsp1_qup5_spi_apps_clk_src",
485 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
486 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
487 .ops = &clk_rcg2_ops,
488 },
489 };
490
491 static struct clk_rcg2 blsp1_qup6_i2c_apps_clk_src = {
492 .cmd_rcgr = 0x07000,
493 .freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,
494 .hid_width = 5,
495 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
496 .clkr.hw.init = &(struct clk_init_data){
497 .name = "blsp1_qup6_i2c_apps_clk_src",
498 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
499 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
500 .ops = &clk_rcg2_ops,
501 },
502 };
503
504 static struct clk_rcg2 blsp1_qup6_spi_apps_clk_src = {
505 .cmd_rcgr = 0x07014,
506 .freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,
507 .mnd_width = 8,
508 .hid_width = 5,
509 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
510 .clkr.hw.init = &(struct clk_init_data){
511 .name = "blsp1_qup6_spi_apps_clk_src",
512 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
513 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
514 .ops = &clk_rcg2_ops,
515 },
516 };
517
518 static const struct freq_tbl ftbl_blsp1_uart_apps_clk_src[] = {
519 F(3686400, P_GPLL0_DIV2, 1, 144, 15625),
520 F(7372800, P_GPLL0_DIV2, 1, 288, 15625),
521 F(14745600, P_GPLL0_DIV2, 1, 576, 15625),
522 F(16000000, P_GPLL0_DIV2, 5, 1, 5),
523 F(19200000, P_XO, 1, 0, 0),
524 F(24000000, P_GPLL0, 1, 3, 100),
525 F(25000000, P_GPLL0, 16, 1, 2),
526 F(32000000, P_GPLL0, 1, 1, 25),
527 F(40000000, P_GPLL0, 1, 1, 20),
528 F(46400000, P_GPLL0, 1, 29, 500),
529 F(48000000, P_GPLL0, 1, 3, 50),
530 F(51200000, P_GPLL0, 1, 8, 125),
531 F(56000000, P_GPLL0, 1, 7, 100),
532 F(58982400, P_GPLL0, 1, 1152, 15625),
533 F(60000000, P_GPLL0, 1, 3, 40),
534 F(64000000, P_GPLL0, 12.5, 1, 1),
535 { }
536 };
537
538 static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
539 .cmd_rcgr = 0x02044,
540 .freq_tbl = ftbl_blsp1_uart_apps_clk_src,
541 .mnd_width = 16,
542 .hid_width = 5,
543 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
544 .clkr.hw.init = &(struct clk_init_data){
545 .name = "blsp1_uart1_apps_clk_src",
546 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
547 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
548 .ops = &clk_rcg2_ops,
549 },
550 };
551
552 static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
553 .cmd_rcgr = 0x03034,
554 .freq_tbl = ftbl_blsp1_uart_apps_clk_src,
555 .mnd_width = 16,
556 .hid_width = 5,
557 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
558 .clkr.hw.init = &(struct clk_init_data){
559 .name = "blsp1_uart2_apps_clk_src",
560 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
561 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
562 .ops = &clk_rcg2_ops,
563 },
564 };
565
566 static struct clk_rcg2 blsp1_uart3_apps_clk_src = {
567 .cmd_rcgr = 0x04034,
568 .freq_tbl = ftbl_blsp1_uart_apps_clk_src,
569 .mnd_width = 16,
570 .hid_width = 5,
571 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
572 .clkr.hw.init = &(struct clk_init_data){
573 .name = "blsp1_uart3_apps_clk_src",
574 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
575 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
576 .ops = &clk_rcg2_ops,
577 },
578 };
579
580 static struct clk_rcg2 blsp1_uart4_apps_clk_src = {
581 .cmd_rcgr = 0x05034,
582 .freq_tbl = ftbl_blsp1_uart_apps_clk_src,
583 .mnd_width = 16,
584 .hid_width = 5,
585 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
586 .clkr.hw.init = &(struct clk_init_data){
587 .name = "blsp1_uart4_apps_clk_src",
588 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
589 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
590 .ops = &clk_rcg2_ops,
591 },
592 };
593
594 static struct clk_rcg2 blsp1_uart5_apps_clk_src = {
595 .cmd_rcgr = 0x06034,
596 .freq_tbl = ftbl_blsp1_uart_apps_clk_src,
597 .mnd_width = 16,
598 .hid_width = 5,
599 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
600 .clkr.hw.init = &(struct clk_init_data){
601 .name = "blsp1_uart5_apps_clk_src",
602 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
603 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
604 .ops = &clk_rcg2_ops,
605 },
606 };
607
608 static struct clk_rcg2 blsp1_uart6_apps_clk_src = {
609 .cmd_rcgr = 0x07034,
610 .freq_tbl = ftbl_blsp1_uart_apps_clk_src,
611 .mnd_width = 16,
612 .hid_width = 5,
613 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
614 .clkr.hw.init = &(struct clk_init_data){
615 .name = "blsp1_uart6_apps_clk_src",
616 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
617 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
618 .ops = &clk_rcg2_ops,
619 },
620 };
621
622 static const struct clk_parent_data gcc_xo_gpll0[] = {
623 { .fw_name = "xo" },
624 { .hw = &gpll0.clkr.hw },
625 };
626
627 static const struct parent_map gcc_xo_gpll0_map[] = {
628 { P_XO, 0 },
629 { P_GPLL0, 1 },
630 };
631
632 static const struct freq_tbl ftbl_pcie_axi_clk_src[] = {
633 F(19200000, P_XO, 1, 0, 0),
634 F(200000000, P_GPLL0, 4, 0, 0),
635 { }
636 };
637
638 static struct clk_rcg2 pcie0_axi_clk_src = {
639 .cmd_rcgr = 0x75054,
640 .freq_tbl = ftbl_pcie_axi_clk_src,
641 .hid_width = 5,
642 .parent_map = gcc_xo_gpll0_map,
643 .clkr.hw.init = &(struct clk_init_data){
644 .name = "pcie0_axi_clk_src",
645 .parent_data = gcc_xo_gpll0,
646 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
647 .ops = &clk_rcg2_ops,
648 },
649 };
650
651 static const struct freq_tbl ftbl_pcie_aux_clk_src[] = {
652 F(19200000, P_XO, 1, 0, 0),
653 };
654
655 static const struct clk_parent_data gcc_xo_gpll0_sleep_clk[] = {
656 { .fw_name = "xo", .name = "xo" },
657 { .hw = &gpll0.clkr.hw },
658 { .fw_name = "sleep_clk", .name = "sleep_clk" },
659 };
660
661 static const struct parent_map gcc_xo_gpll0_sleep_clk_map[] = {
662 { P_XO, 0 },
663 { P_GPLL0, 2 },
664 { P_SLEEP_CLK, 6 },
665 };
666
667 static struct clk_rcg2 pcie0_aux_clk_src = {
668 .cmd_rcgr = 0x75024,
669 .freq_tbl = ftbl_pcie_aux_clk_src,
670 .mnd_width = 16,
671 .hid_width = 5,
672 .parent_map = gcc_xo_gpll0_sleep_clk_map,
673 .clkr.hw.init = &(struct clk_init_data){
674 .name = "pcie0_aux_clk_src",
675 .parent_data = gcc_xo_gpll0_sleep_clk,
676 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_sleep_clk),
677 .ops = &clk_rcg2_ops,
678 },
679 };
680
681 static const struct clk_parent_data gcc_pcie20_phy0_pipe_clk_xo[] = {
682 { .fw_name = "pcie0_pipe", .name = "pcie20_phy0_pipe_clk" },
683 { .fw_name = "xo", .name = "xo" },
684 };
685
686 static const struct parent_map gcc_pcie20_phy0_pipe_clk_xo_map[] = {
687 { P_PCIE20_PHY0_PIPE, 0 },
688 { P_XO, 2 },
689 };
690
691 static struct clk_regmap_mux pcie0_pipe_clk_src = {
692 .reg = 0x7501c,
693 .shift = 8,
694 .width = 2,
695 .parent_map = gcc_pcie20_phy0_pipe_clk_xo_map,
696 .clkr = {
697 .hw.init = &(struct clk_init_data){
698 .name = "pcie0_pipe_clk_src",
699 .parent_data = gcc_pcie20_phy0_pipe_clk_xo,
700 .num_parents = ARRAY_SIZE(gcc_pcie20_phy0_pipe_clk_xo),
701 .ops = &clk_regmap_mux_closest_ops,
702 .flags = CLK_SET_RATE_PARENT,
703 },
704 },
705 };
706
707 static struct clk_rcg2 pcie1_axi_clk_src = {
708 .cmd_rcgr = 0x76054,
709 .freq_tbl = ftbl_pcie_axi_clk_src,
710 .hid_width = 5,
711 .parent_map = gcc_xo_gpll0_map,
712 .clkr.hw.init = &(struct clk_init_data){
713 .name = "pcie1_axi_clk_src",
714 .parent_data = gcc_xo_gpll0,
715 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
716 .ops = &clk_rcg2_ops,
717 },
718 };
719
720 static struct clk_rcg2 pcie1_aux_clk_src = {
721 .cmd_rcgr = 0x76024,
722 .freq_tbl = ftbl_pcie_aux_clk_src,
723 .mnd_width = 16,
724 .hid_width = 5,
725 .parent_map = gcc_xo_gpll0_sleep_clk_map,
726 .clkr.hw.init = &(struct clk_init_data){
727 .name = "pcie1_aux_clk_src",
728 .parent_data = gcc_xo_gpll0_sleep_clk,
729 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_sleep_clk),
730 .ops = &clk_rcg2_ops,
731 },
732 };
733
734 static const struct clk_parent_data gcc_pcie20_phy1_pipe_clk_xo[] = {
735 { .fw_name = "pcie1_pipe", .name = "pcie20_phy1_pipe_clk" },
736 { .fw_name = "xo", .name = "xo" },
737 };
738
739 static const struct parent_map gcc_pcie20_phy1_pipe_clk_xo_map[] = {
740 { P_PCIE20_PHY1_PIPE, 0 },
741 { P_XO, 2 },
742 };
743
744 static struct clk_regmap_mux pcie1_pipe_clk_src = {
745 .reg = 0x7601c,
746 .shift = 8,
747 .width = 2,
748 .parent_map = gcc_pcie20_phy1_pipe_clk_xo_map,
749 .clkr = {
750 .hw.init = &(struct clk_init_data){
751 .name = "pcie1_pipe_clk_src",
752 .parent_data = gcc_pcie20_phy1_pipe_clk_xo,
753 .num_parents = ARRAY_SIZE(gcc_pcie20_phy1_pipe_clk_xo),
754 .ops = &clk_regmap_mux_closest_ops,
755 .flags = CLK_SET_RATE_PARENT,
756 },
757 },
758 };
759
760 static const struct freq_tbl ftbl_sdcc_apps_clk_src[] = {
761 F(144000, P_XO, 16, 3, 25),
762 F(400000, P_XO, 12, 1, 4),
763 F(24000000, P_GPLL2, 12, 1, 4),
764 F(48000000, P_GPLL2, 12, 1, 2),
765 F(96000000, P_GPLL2, 12, 0, 0),
766 F(177777778, P_GPLL0, 4.5, 0, 0),
767 F(192000000, P_GPLL2, 6, 0, 0),
768 F(384000000, P_GPLL2, 3, 0, 0),
769 { }
770 };
771
772 static const struct clk_parent_data gcc_xo_gpll0_gpll2_gpll0_out_main_div2[] = {
773 { .fw_name = "xo", .name = "xo" },
774 { .hw = &gpll0.clkr.hw },
775 { .hw = &gpll2.clkr.hw },
776 { .hw = &gpll0_out_main_div2.hw },
777 };
778
779 static const struct parent_map gcc_xo_gpll0_gpll2_gpll0_out_main_div2_map[] = {
780 { P_XO, 0 },
781 { P_GPLL0, 1 },
782 { P_GPLL2, 2 },
783 { P_GPLL0_DIV2, 4 },
784 };
785
786 static struct clk_rcg2 sdcc1_apps_clk_src = {
787 .cmd_rcgr = 0x42004,
788 .freq_tbl = ftbl_sdcc_apps_clk_src,
789 .mnd_width = 8,
790 .hid_width = 5,
791 .parent_map = gcc_xo_gpll0_gpll2_gpll0_out_main_div2_map,
792 .clkr.hw.init = &(struct clk_init_data){
793 .name = "sdcc1_apps_clk_src",
794 .parent_data = gcc_xo_gpll0_gpll2_gpll0_out_main_div2,
795 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll2_gpll0_out_main_div2),
796 .ops = &clk_rcg2_floor_ops,
797 },
798 };
799
800 static const struct freq_tbl ftbl_sdcc_ice_core_clk_src[] = {
801 F(19200000, P_XO, 1, 0, 0),
802 F(160000000, P_GPLL0, 5, 0, 0),
803 F(308570000, P_GPLL6, 3.5, 0, 0),
804 };
805
806 static const struct clk_parent_data gcc_xo_gpll0_gpll6_gpll0_div2[] = {
807 { .fw_name = "xo", .name = "xo" },
808 { .hw = &gpll0.clkr.hw },
809 { .hw = &gpll6.clkr.hw },
810 { .hw = &gpll0_out_main_div2.hw },
811 };
812
813 static const struct parent_map gcc_xo_gpll0_gpll6_gpll0_div2_map[] = {
814 { P_XO, 0 },
815 { P_GPLL0, 1 },
816 { P_GPLL6, 2 },
817 { P_GPLL0_DIV2, 4 },
818 };
819
820 static struct clk_rcg2 sdcc1_ice_core_clk_src = {
821 .cmd_rcgr = 0x5d000,
822 .freq_tbl = ftbl_sdcc_ice_core_clk_src,
823 .mnd_width = 8,
824 .hid_width = 5,
825 .parent_map = gcc_xo_gpll0_gpll6_gpll0_div2_map,
826 .clkr.hw.init = &(struct clk_init_data){
827 .name = "sdcc1_ice_core_clk_src",
828 .parent_data = gcc_xo_gpll0_gpll6_gpll0_div2,
829 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_gpll0_div2),
830 .ops = &clk_rcg2_ops,
831 },
832 };
833
834 static struct clk_rcg2 sdcc2_apps_clk_src = {
835 .cmd_rcgr = 0x43004,
836 .freq_tbl = ftbl_sdcc_apps_clk_src,
837 .mnd_width = 8,
838 .hid_width = 5,
839 .parent_map = gcc_xo_gpll0_gpll2_gpll0_out_main_div2_map,
840 .clkr.hw.init = &(struct clk_init_data){
841 .name = "sdcc2_apps_clk_src",
842 .parent_data = gcc_xo_gpll0_gpll2_gpll0_out_main_div2,
843 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll2_gpll0_out_main_div2),
844 .ops = &clk_rcg2_floor_ops,
845 },
846 };
847
848 static const struct freq_tbl ftbl_usb_master_clk_src[] = {
849 F(80000000, P_GPLL0_DIV2, 5, 0, 0),
850 F(100000000, P_GPLL0, 8, 0, 0),
851 F(133330000, P_GPLL0, 6, 0, 0),
852 { }
853 };
854
855 static const struct clk_parent_data gcc_xo_gpll0_out_main_div2_gpll0[] = {
856 { .fw_name = "xo", .name = "xo" },
857 { .hw = &gpll0_out_main_div2.hw },
858 { .hw = &gpll0.clkr.hw },
859 };
860
861 static const struct parent_map gcc_xo_gpll0_out_main_div2_gpll0_map[] = {
862 { P_XO, 0 },
863 { P_GPLL0_DIV2, 2 },
864 { P_GPLL0, 1 },
865 };
866
867 static struct clk_rcg2 usb0_master_clk_src = {
868 .cmd_rcgr = 0x3e00c,
869 .freq_tbl = ftbl_usb_master_clk_src,
870 .mnd_width = 8,
871 .hid_width = 5,
872 .parent_map = gcc_xo_gpll0_out_main_div2_gpll0_map,
873 .clkr.hw.init = &(struct clk_init_data){
874 .name = "usb0_master_clk_src",
875 .parent_data = gcc_xo_gpll0_out_main_div2_gpll0,
876 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_out_main_div2_gpll0),
877 .ops = &clk_rcg2_ops,
878 },
879 };
880
881 static const struct freq_tbl ftbl_usb_aux_clk_src[] = {
882 F(19200000, P_XO, 1, 0, 0),
883 { }
884 };
885
886 static struct clk_rcg2 usb0_aux_clk_src = {
887 .cmd_rcgr = 0x3e05c,
888 .freq_tbl = ftbl_usb_aux_clk_src,
889 .mnd_width = 16,
890 .hid_width = 5,
891 .parent_map = gcc_xo_gpll0_sleep_clk_map,
892 .clkr.hw.init = &(struct clk_init_data){
893 .name = "usb0_aux_clk_src",
894 .parent_data = gcc_xo_gpll0_sleep_clk,
895 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_sleep_clk),
896 .ops = &clk_rcg2_ops,
897 },
898 };
899
900 static const struct freq_tbl ftbl_usb_mock_utmi_clk_src[] = {
901 F(19200000, P_XO, 1, 0, 0),
902 F(20000000, P_GPLL6, 6, 1, 9),
903 F(60000000, P_GPLL6, 6, 1, 3),
904 { }
905 };
906
907 static const struct clk_parent_data gcc_xo_gpll6_gpll0_gpll0_out_main_div2[] = {
908 { .fw_name = "xo", .name = "xo" },
909 { .hw = &gpll6.clkr.hw },
910 { .hw = &gpll0.clkr.hw },
911 { .hw = &gpll0_out_main_div2.hw },
912 };
913
914 static const struct parent_map gcc_xo_gpll6_gpll0_gpll0_out_main_div2_map[] = {
915 { P_XO, 0 },
916 { P_GPLL6, 1 },
917 { P_GPLL0, 3 },
918 { P_GPLL0_DIV2, 4 },
919 };
920
921 static struct clk_rcg2 usb0_mock_utmi_clk_src = {
922 .cmd_rcgr = 0x3e020,
923 .freq_tbl = ftbl_usb_mock_utmi_clk_src,
924 .mnd_width = 8,
925 .hid_width = 5,
926 .parent_map = gcc_xo_gpll6_gpll0_gpll0_out_main_div2_map,
927 .clkr.hw.init = &(struct clk_init_data){
928 .name = "usb0_mock_utmi_clk_src",
929 .parent_data = gcc_xo_gpll6_gpll0_gpll0_out_main_div2,
930 .num_parents = ARRAY_SIZE(gcc_xo_gpll6_gpll0_gpll0_out_main_div2),
931 .ops = &clk_rcg2_ops,
932 },
933 };
934
935 static const struct clk_parent_data gcc_usb3phy_0_cc_pipe_clk_xo[] = {
936 { .fw_name = "usb3phy_0_cc_pipe_clk", .name = "usb3phy_0_cc_pipe_clk" },
937 { .fw_name = "xo", .name = "xo" },
938 };
939
940 static const struct parent_map gcc_usb3phy_0_cc_pipe_clk_xo_map[] = {
941 { P_USB3PHY_0_PIPE, 0 },
942 { P_XO, 2 },
943 };
944
945 static struct clk_regmap_mux usb0_pipe_clk_src = {
946 .reg = 0x3e048,
947 .shift = 8,
948 .width = 2,
949 .parent_map = gcc_usb3phy_0_cc_pipe_clk_xo_map,
950 .clkr = {
951 .hw.init = &(struct clk_init_data){
952 .name = "usb0_pipe_clk_src",
953 .parent_data = gcc_usb3phy_0_cc_pipe_clk_xo,
954 .num_parents = ARRAY_SIZE(gcc_usb3phy_0_cc_pipe_clk_xo),
955 .ops = &clk_regmap_mux_closest_ops,
956 .flags = CLK_SET_RATE_PARENT,
957 },
958 },
959 };
960
961 static struct clk_rcg2 usb1_master_clk_src = {
962 .cmd_rcgr = 0x3f00c,
963 .freq_tbl = ftbl_usb_master_clk_src,
964 .mnd_width = 8,
965 .hid_width = 5,
966 .parent_map = gcc_xo_gpll0_out_main_div2_gpll0_map,
967 .clkr.hw.init = &(struct clk_init_data){
968 .name = "usb1_master_clk_src",
969 .parent_data = gcc_xo_gpll0_out_main_div2_gpll0,
970 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_out_main_div2_gpll0),
971 .ops = &clk_rcg2_ops,
972 },
973 };
974
975 static struct clk_rcg2 usb1_aux_clk_src = {
976 .cmd_rcgr = 0x3f05c,
977 .freq_tbl = ftbl_usb_aux_clk_src,
978 .mnd_width = 16,
979 .hid_width = 5,
980 .parent_map = gcc_xo_gpll0_sleep_clk_map,
981 .clkr.hw.init = &(struct clk_init_data){
982 .name = "usb1_aux_clk_src",
983 .parent_data = gcc_xo_gpll0_sleep_clk,
984 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_sleep_clk),
985 .ops = &clk_rcg2_ops,
986 },
987 };
988
989 static struct clk_rcg2 usb1_mock_utmi_clk_src = {
990 .cmd_rcgr = 0x3f020,
991 .freq_tbl = ftbl_usb_mock_utmi_clk_src,
992 .mnd_width = 8,
993 .hid_width = 5,
994 .parent_map = gcc_xo_gpll6_gpll0_gpll0_out_main_div2_map,
995 .clkr.hw.init = &(struct clk_init_data){
996 .name = "usb1_mock_utmi_clk_src",
997 .parent_data = gcc_xo_gpll6_gpll0_gpll0_out_main_div2,
998 .num_parents = ARRAY_SIZE(gcc_xo_gpll6_gpll0_gpll0_out_main_div2),
999 .ops = &clk_rcg2_ops,
1000 },
1001 };
1002
1003 static const struct clk_parent_data gcc_usb3phy_1_cc_pipe_clk_xo[] = {
1004 { .fw_name = "usb3phy_1_cc_pipe_clk", .name = "usb3phy_1_cc_pipe_clk" },
1005 { .fw_name = "xo", .name = "xo" },
1006 };
1007
1008 static const struct parent_map gcc_usb3phy_1_cc_pipe_clk_xo_map[] = {
1009 { P_USB3PHY_1_PIPE, 0 },
1010 { P_XO, 2 },
1011 };
1012
1013 static struct clk_regmap_mux usb1_pipe_clk_src = {
1014 .reg = 0x3f048,
1015 .shift = 8,
1016 .width = 2,
1017 .parent_map = gcc_usb3phy_1_cc_pipe_clk_xo_map,
1018 .clkr = {
1019 .hw.init = &(struct clk_init_data){
1020 .name = "usb1_pipe_clk_src",
1021 .parent_data = gcc_usb3phy_1_cc_pipe_clk_xo,
1022 .num_parents = ARRAY_SIZE(gcc_usb3phy_1_cc_pipe_clk_xo),
1023 .ops = &clk_regmap_mux_closest_ops,
1024 .flags = CLK_SET_RATE_PARENT,
1025 },
1026 },
1027 };
1028
1029 static struct clk_branch gcc_xo_clk_src = {
1030 .halt_reg = 0x30018,
1031 .clkr = {
1032 .enable_reg = 0x30018,
1033 .enable_mask = BIT(1),
1034 .hw.init = &(struct clk_init_data){
1035 .name = "gcc_xo_clk_src",
1036 .parent_data = &(const struct clk_parent_data){
1037 .fw_name = "xo",
1038 .name = "xo",
1039 },
1040 .num_parents = 1,
1041 .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
1042 .ops = &clk_branch2_ops,
1043 },
1044 },
1045 };
1046
1047 static struct clk_fixed_factor gcc_xo_div4_clk_src = {
1048 .mult = 1,
1049 .div = 4,
1050 .hw.init = &(struct clk_init_data){
1051 .name = "gcc_xo_div4_clk_src",
1052 .parent_hws = (const struct clk_hw *[]){
1053 &gcc_xo_clk_src.clkr.hw },
1054 .num_parents = 1,
1055 .ops = &clk_fixed_factor_ops,
1056 .flags = CLK_SET_RATE_PARENT,
1057 },
1058 };
1059
1060 static const struct freq_tbl ftbl_system_noc_bfdcd_clk_src[] = {
1061 F(19200000, P_XO, 1, 0, 0),
1062 F(50000000, P_GPLL0_DIV2, 8, 0, 0),
1063 F(100000000, P_GPLL0, 8, 0, 0),
1064 F(133333333, P_GPLL0, 6, 0, 0),
1065 F(160000000, P_GPLL0, 5, 0, 0),
1066 F(200000000, P_GPLL0, 4, 0, 0),
1067 F(266666667, P_GPLL0, 3, 0, 0),
1068 { }
1069 };
1070
1071 static const struct clk_parent_data gcc_xo_gpll0_gpll6_gpll0_out_main_div2[] = {
1072 { .fw_name = "xo", .name = "xo" },
1073 { .hw = &gpll0.clkr.hw },
1074 { .hw = &gpll6.clkr.hw },
1075 { .hw = &gpll0_out_main_div2.hw },
1076 };
1077
1078 static const struct parent_map gcc_xo_gpll0_gpll6_gpll0_out_main_div2_map[] = {
1079 { P_XO, 0 },
1080 { P_GPLL0, 1 },
1081 { P_GPLL6, 2 },
1082 { P_GPLL0_DIV2, 3 },
1083 };
1084
1085 static struct clk_rcg2 system_noc_bfdcd_clk_src = {
1086 .cmd_rcgr = 0x26004,
1087 .freq_tbl = ftbl_system_noc_bfdcd_clk_src,
1088 .hid_width = 5,
1089 .parent_map = gcc_xo_gpll0_gpll6_gpll0_out_main_div2_map,
1090 .clkr.hw.init = &(struct clk_init_data){
1091 .name = "system_noc_bfdcd_clk_src",
1092 .parent_data = gcc_xo_gpll0_gpll6_gpll0_out_main_div2,
1093 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_gpll0_out_main_div2),
1094 .ops = &clk_rcg2_ops,
1095 .flags = CLK_IS_CRITICAL,
1096 },
1097 };
1098
1099 static struct clk_fixed_factor system_noc_clk_src = {
1100 .mult = 1,
1101 .div = 1,
1102 .hw.init = &(struct clk_init_data){
1103 .name = "system_noc_clk_src",
1104 .parent_hws = (const struct clk_hw *[]){
1105 &system_noc_bfdcd_clk_src.clkr.hw },
1106 .num_parents = 1,
1107 .ops = &clk_fixed_factor_ops,
1108 .flags = CLK_SET_RATE_PARENT,
1109 },
1110 };
1111
1112 static const struct freq_tbl ftbl_nss_ce_clk_src[] = {
1113 F(19200000, P_XO, 1, 0, 0),
1114 F(200000000, P_GPLL0, 4, 0, 0),
1115 { }
1116 };
1117
1118 static struct clk_rcg2 nss_ce_clk_src = {
1119 .cmd_rcgr = 0x68098,
1120 .freq_tbl = ftbl_nss_ce_clk_src,
1121 .hid_width = 5,
1122 .parent_map = gcc_xo_gpll0_map,
1123 .clkr.hw.init = &(struct clk_init_data){
1124 .name = "nss_ce_clk_src",
1125 .parent_data = gcc_xo_gpll0,
1126 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
1127 .ops = &clk_rcg2_ops,
1128 },
1129 };
1130
1131 static const struct freq_tbl ftbl_nss_noc_bfdcd_clk_src[] = {
1132 F(19200000, P_XO, 1, 0, 0),
1133 F(461500000, P_BIAS_PLL_NSS_NOC, 1, 0, 0),
1134 { }
1135 };
1136
1137 static const struct clk_parent_data gcc_xo_bias_pll_nss_noc_clk_gpll0_gpll2[] = {
1138 { .fw_name = "xo", .name = "xo" },
1139 { .fw_name = "bias_pll_nss_noc_clk", .name = "bias_pll_nss_noc_clk" },
1140 { .hw = &gpll0.clkr.hw },
1141 { .hw = &gpll2.clkr.hw },
1142 };
1143
1144 static const struct parent_map gcc_xo_bias_pll_nss_noc_clk_gpll0_gpll2_map[] = {
1145 { P_XO, 0 },
1146 { P_BIAS_PLL_NSS_NOC, 1 },
1147 { P_GPLL0, 2 },
1148 { P_GPLL2, 3 },
1149 };
1150
1151 static struct clk_rcg2 nss_noc_bfdcd_clk_src = {
1152 .cmd_rcgr = 0x68088,
1153 .freq_tbl = ftbl_nss_noc_bfdcd_clk_src,
1154 .hid_width = 5,
1155 .parent_map = gcc_xo_bias_pll_nss_noc_clk_gpll0_gpll2_map,
1156 .clkr.hw.init = &(struct clk_init_data){
1157 .name = "nss_noc_bfdcd_clk_src",
1158 .parent_data = gcc_xo_bias_pll_nss_noc_clk_gpll0_gpll2,
1159 .num_parents = ARRAY_SIZE(gcc_xo_bias_pll_nss_noc_clk_gpll0_gpll2),
1160 .ops = &clk_rcg2_ops,
1161 },
1162 };
1163
1164 static struct clk_fixed_factor nss_noc_clk_src = {
1165 .mult = 1,
1166 .div = 1,
1167 .hw.init = &(struct clk_init_data){
1168 .name = "nss_noc_clk_src",
1169 .parent_hws = (const struct clk_hw *[]){
1170 &nss_noc_bfdcd_clk_src.clkr.hw },
1171 .num_parents = 1,
1172 .ops = &clk_fixed_factor_ops,
1173 .flags = CLK_SET_RATE_PARENT,
1174 },
1175 };
1176
1177 static const struct freq_tbl ftbl_nss_crypto_clk_src[] = {
1178 F(19200000, P_XO, 1, 0, 0),
1179 F(600000000, P_NSS_CRYPTO_PLL, 1, 0, 0),
1180 { }
1181 };
1182
1183 static const struct clk_parent_data gcc_xo_nss_crypto_pll_gpll0[] = {
1184 { .fw_name = "xo", .name = "xo" },
1185 { .hw = &nss_crypto_pll.clkr.hw },
1186 { .hw = &gpll0.clkr.hw },
1187 };
1188
1189 static const struct parent_map gcc_xo_nss_crypto_pll_gpll0_map[] = {
1190 { P_XO, 0 },
1191 { P_NSS_CRYPTO_PLL, 1 },
1192 { P_GPLL0, 2 },
1193 };
1194
1195 static struct clk_rcg2 nss_crypto_clk_src = {
1196 .cmd_rcgr = 0x68144,
1197 .freq_tbl = ftbl_nss_crypto_clk_src,
1198 .mnd_width = 16,
1199 .hid_width = 5,
1200 .parent_map = gcc_xo_nss_crypto_pll_gpll0_map,
1201 .clkr.hw.init = &(struct clk_init_data){
1202 .name = "nss_crypto_clk_src",
1203 .parent_data = gcc_xo_nss_crypto_pll_gpll0,
1204 .num_parents = ARRAY_SIZE(gcc_xo_nss_crypto_pll_gpll0),
1205 .ops = &clk_rcg2_ops,
1206 },
1207 };
1208
1209 static const struct freq_tbl ftbl_nss_ubi_clk_src[] = {
1210 F(19200000, P_XO, 1, 0, 0),
1211 F(187200000, P_UBI32_PLL, 8, 0, 0),
1212 F(748800000, P_UBI32_PLL, 2, 0, 0),
1213 F(1497600000, P_UBI32_PLL, 1, 0, 0),
1214 F(1689600000, P_UBI32_PLL, 1, 0, 0),
1215 { }
1216 };
1217
1218 static const struct clk_parent_data gcc_xo_ubi32_pll_gpll0_gpll2_gpll4_gpll6[] = {
1219 { .fw_name = "xo", .name = "xo" },
1220 { .hw = &ubi32_pll.clkr.hw },
1221 { .hw = &gpll0.clkr.hw },
1222 { .hw = &gpll2.clkr.hw },
1223 { .hw = &gpll4.clkr.hw },
1224 { .hw = &gpll6.clkr.hw },
1225 };
1226
1227 static const struct parent_map gcc_xo_ubi32_gpll0_gpll2_gpll4_gpll6_map[] = {
1228 { P_XO, 0 },
1229 { P_UBI32_PLL, 1 },
1230 { P_GPLL0, 2 },
1231 { P_GPLL2, 3 },
1232 { P_GPLL4, 4 },
1233 { P_GPLL6, 5 },
1234 };
1235
1236 static struct clk_rcg2 nss_ubi0_clk_src = {
1237 .cmd_rcgr = 0x68104,
1238 .freq_tbl = ftbl_nss_ubi_clk_src,
1239 .hid_width = 5,
1240 .parent_map = gcc_xo_ubi32_gpll0_gpll2_gpll4_gpll6_map,
1241 .clkr.hw.init = &(struct clk_init_data){
1242 .name = "nss_ubi0_clk_src",
1243 .parent_data = gcc_xo_ubi32_pll_gpll0_gpll2_gpll4_gpll6,
1244 .num_parents = ARRAY_SIZE(gcc_xo_ubi32_pll_gpll0_gpll2_gpll4_gpll6),
1245 .ops = &clk_rcg2_ops,
1246 .flags = CLK_SET_RATE_PARENT,
1247 },
1248 };
1249
1250 static struct clk_regmap_div nss_ubi0_div_clk_src = {
1251 .reg = 0x68118,
1252 .shift = 0,
1253 .width = 4,
1254 .clkr = {
1255 .hw.init = &(struct clk_init_data){
1256 .name = "nss_ubi0_div_clk_src",
1257 .parent_hws = (const struct clk_hw *[]){
1258 &nss_ubi0_clk_src.clkr.hw },
1259 .num_parents = 1,
1260 .ops = &clk_regmap_div_ro_ops,
1261 .flags = CLK_SET_RATE_PARENT,
1262 },
1263 },
1264 };
1265
1266 static struct clk_rcg2 nss_ubi1_clk_src = {
1267 .cmd_rcgr = 0x68124,
1268 .freq_tbl = ftbl_nss_ubi_clk_src,
1269 .hid_width = 5,
1270 .parent_map = gcc_xo_ubi32_gpll0_gpll2_gpll4_gpll6_map,
1271 .clkr.hw.init = &(struct clk_init_data){
1272 .name = "nss_ubi1_clk_src",
1273 .parent_data = gcc_xo_ubi32_pll_gpll0_gpll2_gpll4_gpll6,
1274 .num_parents = ARRAY_SIZE(gcc_xo_ubi32_pll_gpll0_gpll2_gpll4_gpll6),
1275 .ops = &clk_rcg2_ops,
1276 .flags = CLK_SET_RATE_PARENT,
1277 },
1278 };
1279
1280 static struct clk_regmap_div nss_ubi1_div_clk_src = {
1281 .reg = 0x68138,
1282 .shift = 0,
1283 .width = 4,
1284 .clkr = {
1285 .hw.init = &(struct clk_init_data){
1286 .name = "nss_ubi1_div_clk_src",
1287 .parent_hws = (const struct clk_hw *[]){
1288 &nss_ubi1_clk_src.clkr.hw },
1289 .num_parents = 1,
1290 .ops = &clk_regmap_div_ro_ops,
1291 .flags = CLK_SET_RATE_PARENT,
1292 },
1293 },
1294 };
1295
1296 static const struct freq_tbl ftbl_ubi_mpt_clk_src[] = {
1297 F(19200000, P_XO, 1, 0, 0),
1298 F(25000000, P_GPLL0_DIV2, 16, 0, 0),
1299 { }
1300 };
1301
1302 static const struct clk_parent_data gcc_xo_gpll0_out_main_div2[] = {
1303 { .fw_name = "xo", .name = "xo" },
1304 { .hw = &gpll0_out_main_div2.hw },
1305 };
1306
1307 static const struct parent_map gcc_xo_gpll0_out_main_div2_map[] = {
1308 { P_XO, 0 },
1309 { P_GPLL0_DIV2, 1 },
1310 };
1311
1312 static struct clk_rcg2 ubi_mpt_clk_src = {
1313 .cmd_rcgr = 0x68090,
1314 .freq_tbl = ftbl_ubi_mpt_clk_src,
1315 .hid_width = 5,
1316 .parent_map = gcc_xo_gpll0_out_main_div2_map,
1317 .clkr.hw.init = &(struct clk_init_data){
1318 .name = "ubi_mpt_clk_src",
1319 .parent_data = gcc_xo_gpll0_out_main_div2,
1320 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_out_main_div2),
1321 .ops = &clk_rcg2_ops,
1322 },
1323 };
1324
1325 static const struct freq_tbl ftbl_nss_imem_clk_src[] = {
1326 F(19200000, P_XO, 1, 0, 0),
1327 F(400000000, P_GPLL0, 2, 0, 0),
1328 { }
1329 };
1330
1331 static const struct clk_parent_data gcc_xo_gpll0_gpll4[] = {
1332 { .fw_name = "xo", .name = "xo" },
1333 { .hw = &gpll0.clkr.hw },
1334 { .hw = &gpll4.clkr.hw },
1335 };
1336
1337 static const struct parent_map gcc_xo_gpll0_gpll4_map[] = {
1338 { P_XO, 0 },
1339 { P_GPLL0, 1 },
1340 { P_GPLL4, 2 },
1341 };
1342
1343 static struct clk_rcg2 nss_imem_clk_src = {
1344 .cmd_rcgr = 0x68158,
1345 .freq_tbl = ftbl_nss_imem_clk_src,
1346 .hid_width = 5,
1347 .parent_map = gcc_xo_gpll0_gpll4_map,
1348 .clkr.hw.init = &(struct clk_init_data){
1349 .name = "nss_imem_clk_src",
1350 .parent_data = gcc_xo_gpll0_gpll4,
1351 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll4),
1352 .ops = &clk_rcg2_ops,
1353 },
1354 };
1355
1356 static const struct freq_tbl ftbl_nss_ppe_clk_src[] = {
1357 F(19200000, P_XO, 1, 0, 0),
1358 F(300000000, P_BIAS_PLL, 1, 0, 0),
1359 { }
1360 };
1361
1362 static const struct clk_parent_data gcc_xo_bias_gpll0_gpll4_nss_ubi32[] = {
1363 { .fw_name = "xo", .name = "xo" },
1364 { .fw_name = "bias_pll_cc_clk", .name = "bias_pll_cc_clk" },
1365 { .hw = &gpll0.clkr.hw },
1366 { .hw = &gpll4.clkr.hw },
1367 { .hw = &nss_crypto_pll.clkr.hw },
1368 { .hw = &ubi32_pll.clkr.hw },
1369 };
1370
1371 static const struct parent_map gcc_xo_bias_gpll0_gpll4_nss_ubi32_map[] = {
1372 { P_XO, 0 },
1373 { P_BIAS_PLL, 1 },
1374 { P_GPLL0, 2 },
1375 { P_GPLL4, 3 },
1376 { P_NSS_CRYPTO_PLL, 4 },
1377 { P_UBI32_PLL, 5 },
1378 };
1379
1380 static struct clk_rcg2 nss_ppe_clk_src = {
1381 .cmd_rcgr = 0x68080,
1382 .freq_tbl = ftbl_nss_ppe_clk_src,
1383 .hid_width = 5,
1384 .parent_map = gcc_xo_bias_gpll0_gpll4_nss_ubi32_map,
1385 .clkr.hw.init = &(struct clk_init_data){
1386 .name = "nss_ppe_clk_src",
1387 .parent_data = gcc_xo_bias_gpll0_gpll4_nss_ubi32,
1388 .num_parents = ARRAY_SIZE(gcc_xo_bias_gpll0_gpll4_nss_ubi32),
1389 .ops = &clk_rcg2_ops,
1390 },
1391 };
1392
1393 static struct clk_fixed_factor nss_ppe_cdiv_clk_src = {
1394 .mult = 1,
1395 .div = 4,
1396 .hw.init = &(struct clk_init_data){
1397 .name = "nss_ppe_cdiv_clk_src",
1398 .parent_hws = (const struct clk_hw *[]){
1399 &nss_ppe_clk_src.clkr.hw },
1400 .num_parents = 1,
1401 .ops = &clk_fixed_factor_ops,
1402 .flags = CLK_SET_RATE_PARENT,
1403 },
1404 };
1405
1406 static const struct freq_tbl ftbl_nss_port1_rx_clk_src[] = {
1407 F(19200000, P_XO, 1, 0, 0),
1408 F(25000000, P_UNIPHY0_RX, 5, 0, 0),
1409 F(125000000, P_UNIPHY0_RX, 1, 0, 0),
1410 { }
1411 };
1412
1413 static const struct clk_parent_data gcc_xo_uniphy0_rx_tx_ubi32_bias[] = {
1414 { .fw_name = "xo", .name = "xo" },
1415 { .fw_name = "uniphy0_gcc_rx_clk", .name = "uniphy0_gcc_rx_clk" },
1416 { .fw_name = "uniphy0_gcc_tx_clk", .name = "uniphy0_gcc_tx_clk" },
1417 { .hw = &ubi32_pll.clkr.hw },
1418 { .fw_name = "bias_pll_cc_clk", .name = "bias_pll_cc_clk" },
1419 };
1420
1421 static const struct parent_map gcc_xo_uniphy0_rx_tx_ubi32_bias_map[] = {
1422 { P_XO, 0 },
1423 { P_UNIPHY0_RX, 1 },
1424 { P_UNIPHY0_TX, 2 },
1425 { P_UBI32_PLL, 5 },
1426 { P_BIAS_PLL, 6 },
1427 };
1428
1429 static struct clk_rcg2 nss_port1_rx_clk_src = {
1430 .cmd_rcgr = 0x68020,
1431 .freq_tbl = ftbl_nss_port1_rx_clk_src,
1432 .hid_width = 5,
1433 .parent_map = gcc_xo_uniphy0_rx_tx_ubi32_bias_map,
1434 .clkr.hw.init = &(struct clk_init_data){
1435 .name = "nss_port1_rx_clk_src",
1436 .parent_data = gcc_xo_uniphy0_rx_tx_ubi32_bias,
1437 .num_parents = ARRAY_SIZE(gcc_xo_uniphy0_rx_tx_ubi32_bias),
1438 .ops = &clk_rcg2_ops,
1439 },
1440 };
1441
1442 static struct clk_regmap_div nss_port1_rx_div_clk_src = {
1443 .reg = 0x68400,
1444 .shift = 0,
1445 .width = 4,
1446 .clkr = {
1447 .hw.init = &(struct clk_init_data){
1448 .name = "nss_port1_rx_div_clk_src",
1449 .parent_hws = (const struct clk_hw *[]){
1450 &nss_port1_rx_clk_src.clkr.hw },
1451 .num_parents = 1,
1452 .ops = &clk_regmap_div_ops,
1453 .flags = CLK_SET_RATE_PARENT,
1454 },
1455 },
1456 };
1457
1458 static const struct freq_tbl ftbl_nss_port1_tx_clk_src[] = {
1459 F(19200000, P_XO, 1, 0, 0),
1460 F(25000000, P_UNIPHY0_TX, 5, 0, 0),
1461 F(125000000, P_UNIPHY0_TX, 1, 0, 0),
1462 { }
1463 };
1464
1465 static const struct clk_parent_data gcc_xo_uniphy0_tx_rx_ubi32_bias[] = {
1466 { .fw_name = "xo", .name = "xo" },
1467 { .fw_name = "uniphy0_gcc_tx_clk", .name = "uniphy0_gcc_tx_clk" },
1468 { .fw_name = "uniphy0_gcc_rx_clk", .name = "uniphy0_gcc_rx_clk" },
1469 { .hw = &ubi32_pll.clkr.hw },
1470 { .fw_name = "bias_pll_cc_clk", .name = "bias_pll_cc_clk" },
1471 };
1472
1473 static const struct parent_map gcc_xo_uniphy0_tx_rx_ubi32_bias_map[] = {
1474 { P_XO, 0 },
1475 { P_UNIPHY0_TX, 1 },
1476 { P_UNIPHY0_RX, 2 },
1477 { P_UBI32_PLL, 5 },
1478 { P_BIAS_PLL, 6 },
1479 };
1480
1481 static struct clk_rcg2 nss_port1_tx_clk_src = {
1482 .cmd_rcgr = 0x68028,
1483 .freq_tbl = ftbl_nss_port1_tx_clk_src,
1484 .hid_width = 5,
1485 .parent_map = gcc_xo_uniphy0_tx_rx_ubi32_bias_map,
1486 .clkr.hw.init = &(struct clk_init_data){
1487 .name = "nss_port1_tx_clk_src",
1488 .parent_data = gcc_xo_uniphy0_tx_rx_ubi32_bias,
1489 .num_parents = ARRAY_SIZE(gcc_xo_uniphy0_tx_rx_ubi32_bias),
1490 .ops = &clk_rcg2_ops,
1491 },
1492 };
1493
1494 static struct clk_regmap_div nss_port1_tx_div_clk_src = {
1495 .reg = 0x68404,
1496 .shift = 0,
1497 .width = 4,
1498 .clkr = {
1499 .hw.init = &(struct clk_init_data){
1500 .name = "nss_port1_tx_div_clk_src",
1501 .parent_hws = (const struct clk_hw *[]){
1502 &nss_port1_tx_clk_src.clkr.hw },
1503 .num_parents = 1,
1504 .ops = &clk_regmap_div_ops,
1505 .flags = CLK_SET_RATE_PARENT,
1506 },
1507 },
1508 };
1509
1510 static struct clk_rcg2 nss_port2_rx_clk_src = {
1511 .cmd_rcgr = 0x68030,
1512 .freq_tbl = ftbl_nss_port1_rx_clk_src,
1513 .hid_width = 5,
1514 .parent_map = gcc_xo_uniphy0_rx_tx_ubi32_bias_map,
1515 .clkr.hw.init = &(struct clk_init_data){
1516 .name = "nss_port2_rx_clk_src",
1517 .parent_data = gcc_xo_uniphy0_rx_tx_ubi32_bias,
1518 .num_parents = ARRAY_SIZE(gcc_xo_uniphy0_rx_tx_ubi32_bias),
1519 .ops = &clk_rcg2_ops,
1520 },
1521 };
1522
1523 static struct clk_regmap_div nss_port2_rx_div_clk_src = {
1524 .reg = 0x68410,
1525 .shift = 0,
1526 .width = 4,
1527 .clkr = {
1528 .hw.init = &(struct clk_init_data){
1529 .name = "nss_port2_rx_div_clk_src",
1530 .parent_hws = (const struct clk_hw *[]){
1531 &nss_port2_rx_clk_src.clkr.hw },
1532 .num_parents = 1,
1533 .ops = &clk_regmap_div_ops,
1534 .flags = CLK_SET_RATE_PARENT,
1535 },
1536 },
1537 };
1538
1539 static struct clk_rcg2 nss_port2_tx_clk_src = {
1540 .cmd_rcgr = 0x68038,
1541 .freq_tbl = ftbl_nss_port1_tx_clk_src,
1542 .hid_width = 5,
1543 .parent_map = gcc_xo_uniphy0_tx_rx_ubi32_bias_map,
1544 .clkr.hw.init = &(struct clk_init_data){
1545 .name = "nss_port2_tx_clk_src",
1546 .parent_data = gcc_xo_uniphy0_tx_rx_ubi32_bias,
1547 .num_parents = ARRAY_SIZE(gcc_xo_uniphy0_tx_rx_ubi32_bias),
1548 .ops = &clk_rcg2_ops,
1549 },
1550 };
1551
1552 static struct clk_regmap_div nss_port2_tx_div_clk_src = {
1553 .reg = 0x68414,
1554 .shift = 0,
1555 .width = 4,
1556 .clkr = {
1557 .hw.init = &(struct clk_init_data){
1558 .name = "nss_port2_tx_div_clk_src",
1559 .parent_hws = (const struct clk_hw *[]){
1560 &nss_port2_tx_clk_src.clkr.hw },
1561 .num_parents = 1,
1562 .ops = &clk_regmap_div_ops,
1563 .flags = CLK_SET_RATE_PARENT,
1564 },
1565 },
1566 };
1567
1568 static struct clk_rcg2 nss_port3_rx_clk_src = {
1569 .cmd_rcgr = 0x68040,
1570 .freq_tbl = ftbl_nss_port1_rx_clk_src,
1571 .hid_width = 5,
1572 .parent_map = gcc_xo_uniphy0_rx_tx_ubi32_bias_map,
1573 .clkr.hw.init = &(struct clk_init_data){
1574 .name = "nss_port3_rx_clk_src",
1575 .parent_data = gcc_xo_uniphy0_rx_tx_ubi32_bias,
1576 .num_parents = ARRAY_SIZE(gcc_xo_uniphy0_rx_tx_ubi32_bias),
1577 .ops = &clk_rcg2_ops,
1578 },
1579 };
1580
1581 static struct clk_regmap_div nss_port3_rx_div_clk_src = {
1582 .reg = 0x68420,
1583 .shift = 0,
1584 .width = 4,
1585 .clkr = {
1586 .hw.init = &(struct clk_init_data){
1587 .name = "nss_port3_rx_div_clk_src",
1588 .parent_hws = (const struct clk_hw *[]){
1589 &nss_port3_rx_clk_src.clkr.hw },
1590 .num_parents = 1,
1591 .ops = &clk_regmap_div_ops,
1592 .flags = CLK_SET_RATE_PARENT,
1593 },
1594 },
1595 };
1596
1597 static struct clk_rcg2 nss_port3_tx_clk_src = {
1598 .cmd_rcgr = 0x68048,
1599 .freq_tbl = ftbl_nss_port1_tx_clk_src,
1600 .hid_width = 5,
1601 .parent_map = gcc_xo_uniphy0_tx_rx_ubi32_bias_map,
1602 .clkr.hw.init = &(struct clk_init_data){
1603 .name = "nss_port3_tx_clk_src",
1604 .parent_data = gcc_xo_uniphy0_tx_rx_ubi32_bias,
1605 .num_parents = ARRAY_SIZE(gcc_xo_uniphy0_tx_rx_ubi32_bias),
1606 .ops = &clk_rcg2_ops,
1607 },
1608 };
1609
1610 static struct clk_regmap_div nss_port3_tx_div_clk_src = {
1611 .reg = 0x68424,
1612 .shift = 0,
1613 .width = 4,
1614 .clkr = {
1615 .hw.init = &(struct clk_init_data){
1616 .name = "nss_port3_tx_div_clk_src",
1617 .parent_hws = (const struct clk_hw *[]){
1618 &nss_port3_tx_clk_src.clkr.hw },
1619 .num_parents = 1,
1620 .ops = &clk_regmap_div_ops,
1621 .flags = CLK_SET_RATE_PARENT,
1622 },
1623 },
1624 };
1625
1626 static struct clk_rcg2 nss_port4_rx_clk_src = {
1627 .cmd_rcgr = 0x68050,
1628 .freq_tbl = ftbl_nss_port1_rx_clk_src,
1629 .hid_width = 5,
1630 .parent_map = gcc_xo_uniphy0_rx_tx_ubi32_bias_map,
1631 .clkr.hw.init = &(struct clk_init_data){
1632 .name = "nss_port4_rx_clk_src",
1633 .parent_data = gcc_xo_uniphy0_rx_tx_ubi32_bias,
1634 .num_parents = ARRAY_SIZE(gcc_xo_uniphy0_rx_tx_ubi32_bias),
1635 .ops = &clk_rcg2_ops,
1636 },
1637 };
1638
1639 static struct clk_regmap_div nss_port4_rx_div_clk_src = {
1640 .reg = 0x68430,
1641 .shift = 0,
1642 .width = 4,
1643 .clkr = {
1644 .hw.init = &(struct clk_init_data){
1645 .name = "nss_port4_rx_div_clk_src",
1646 .parent_hws = (const struct clk_hw *[]){
1647 &nss_port4_rx_clk_src.clkr.hw },
1648 .num_parents = 1,
1649 .ops = &clk_regmap_div_ops,
1650 .flags = CLK_SET_RATE_PARENT,
1651 },
1652 },
1653 };
1654
1655 static struct clk_rcg2 nss_port4_tx_clk_src = {
1656 .cmd_rcgr = 0x68058,
1657 .freq_tbl = ftbl_nss_port1_tx_clk_src,
1658 .hid_width = 5,
1659 .parent_map = gcc_xo_uniphy0_tx_rx_ubi32_bias_map,
1660 .clkr.hw.init = &(struct clk_init_data){
1661 .name = "nss_port4_tx_clk_src",
1662 .parent_data = gcc_xo_uniphy0_tx_rx_ubi32_bias,
1663 .num_parents = ARRAY_SIZE(gcc_xo_uniphy0_tx_rx_ubi32_bias),
1664 .ops = &clk_rcg2_ops,
1665 },
1666 };
1667
1668 static struct clk_regmap_div nss_port4_tx_div_clk_src = {
1669 .reg = 0x68434,
1670 .shift = 0,
1671 .width = 4,
1672 .clkr = {
1673 .hw.init = &(struct clk_init_data){
1674 .name = "nss_port4_tx_div_clk_src",
1675 .parent_hws = (const struct clk_hw *[]){
1676 &nss_port4_tx_clk_src.clkr.hw },
1677 .num_parents = 1,
1678 .ops = &clk_regmap_div_ops,
1679 .flags = CLK_SET_RATE_PARENT,
1680 },
1681 },
1682 };
1683
1684 static const struct freq_tbl ftbl_nss_port5_rx_clk_src[] = {
1685 F(19200000, P_XO, 1, 0, 0),
1686 F(25000000, P_UNIPHY1_RX, 12.5, 0, 0),
1687 F(25000000, P_UNIPHY0_RX, 5, 0, 0),
1688 F(78125000, P_UNIPHY1_RX, 4, 0, 0),
1689 F(125000000, P_UNIPHY1_RX, 2.5, 0, 0),
1690 F(125000000, P_UNIPHY0_RX, 1, 0, 0),
1691 F(156250000, P_UNIPHY1_RX, 2, 0, 0),
1692 F(312500000, P_UNIPHY1_RX, 1, 0, 0),
1693 { }
1694 };
1695
1696 static const struct clk_parent_data gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32_bias[] = {
1697 { .fw_name = "xo", .name = "xo" },
1698 { .fw_name = "uniphy0_gcc_rx_clk", .name = "uniphy0_gcc_rx_clk" },
1699 { .fw_name = "uniphy0_gcc_tx_clk", .name = "uniphy0_gcc_tx_clk" },
1700 { .fw_name = "uniphy1_gcc_rx_clk", .name = "uniphy1_gcc_rx_clk" },
1701 { .fw_name = "uniphy1_gcc_tx_clk", .name = "uniphy1_gcc_tx_clk" },
1702 { .hw = &ubi32_pll.clkr.hw },
1703 { .fw_name = "bias_pll_cc_clk", .name = "bias_pll_cc_clk" },
1704 };
1705
1706 static const struct parent_map
1707 gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32_bias_map[] = {
1708 { P_XO, 0 },
1709 { P_UNIPHY0_RX, 1 },
1710 { P_UNIPHY0_TX, 2 },
1711 { P_UNIPHY1_RX, 3 },
1712 { P_UNIPHY1_TX, 4 },
1713 { P_UBI32_PLL, 5 },
1714 { P_BIAS_PLL, 6 },
1715 };
1716
1717 static struct clk_rcg2 nss_port5_rx_clk_src = {
1718 .cmd_rcgr = 0x68060,
1719 .freq_tbl = ftbl_nss_port5_rx_clk_src,
1720 .hid_width = 5,
1721 .parent_map = gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32_bias_map,
1722 .clkr.hw.init = &(struct clk_init_data){
1723 .name = "nss_port5_rx_clk_src",
1724 .parent_data = gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32_bias,
1725 .num_parents = ARRAY_SIZE(gcc_xo_uniphy0_rx_tx_uniphy1_rx_tx_ubi32_bias),
1726 .ops = &clk_rcg2_ops,
1727 },
1728 };
1729
1730 static struct clk_regmap_div nss_port5_rx_div_clk_src = {
1731 .reg = 0x68440,
1732 .shift = 0,
1733 .width = 4,
1734 .clkr = {
1735 .hw.init = &(struct clk_init_data){
1736 .name = "nss_port5_rx_div_clk_src",
1737 .parent_hws = (const struct clk_hw *[]){
1738 &nss_port5_rx_clk_src.clkr.hw },
1739 .num_parents = 1,
1740 .ops = &clk_regmap_div_ops,
1741 .flags = CLK_SET_RATE_PARENT,
1742 },
1743 },
1744 };
1745
1746 static const struct freq_tbl ftbl_nss_port5_tx_clk_src[] = {
1747 F(19200000, P_XO, 1, 0, 0),
1748 F(25000000, P_UNIPHY1_TX, 12.5, 0, 0),
1749 F(25000000, P_UNIPHY0_TX, 5, 0, 0),
1750 F(78125000, P_UNIPHY1_TX, 4, 0, 0),
1751 F(125000000, P_UNIPHY1_TX, 2.5, 0, 0),
1752 F(125000000, P_UNIPHY0_TX, 1, 0, 0),
1753 F(156250000, P_UNIPHY1_TX, 2, 0, 0),
1754 F(312500000, P_UNIPHY1_TX, 1, 0, 0),
1755 { }
1756 };
1757
1758 static const struct clk_parent_data gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32_bias[] = {
1759 { .fw_name = "xo", .name = "xo" },
1760 { .fw_name = "uniphy0_gcc_tx_clk", .name = "uniphy0_gcc_tx_clk" },
1761 { .fw_name = "uniphy0_gcc_rx_clk", .name = "uniphy0_gcc_rx_clk" },
1762 { .fw_name = "uniphy1_gcc_tx_clk", .name = "uniphy1_gcc_tx_clk" },
1763 { .fw_name = "uniphy1_gcc_rx_clk", .name = "uniphy1_gcc_rx_clk" },
1764 { .hw = &ubi32_pll.clkr.hw },
1765 { .fw_name = "bias_pll_cc_clk", .name = "bias_pll_cc_clk" },
1766 };
1767
1768 static const struct parent_map
1769 gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32_bias_map[] = {
1770 { P_XO, 0 },
1771 { P_UNIPHY0_TX, 1 },
1772 { P_UNIPHY0_RX, 2 },
1773 { P_UNIPHY1_TX, 3 },
1774 { P_UNIPHY1_RX, 4 },
1775 { P_UBI32_PLL, 5 },
1776 { P_BIAS_PLL, 6 },
1777 };
1778
1779 static struct clk_rcg2 nss_port5_tx_clk_src = {
1780 .cmd_rcgr = 0x68068,
1781 .freq_tbl = ftbl_nss_port5_tx_clk_src,
1782 .hid_width = 5,
1783 .parent_map = gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32_bias_map,
1784 .clkr.hw.init = &(struct clk_init_data){
1785 .name = "nss_port5_tx_clk_src",
1786 .parent_data = gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32_bias,
1787 .num_parents = ARRAY_SIZE(gcc_xo_uniphy0_tx_rx_uniphy1_tx_rx_ubi32_bias),
1788 .ops = &clk_rcg2_ops,
1789 },
1790 };
1791
1792 static struct clk_regmap_div nss_port5_tx_div_clk_src = {
1793 .reg = 0x68444,
1794 .shift = 0,
1795 .width = 4,
1796 .clkr = {
1797 .hw.init = &(struct clk_init_data){
1798 .name = "nss_port5_tx_div_clk_src",
1799 .parent_hws = (const struct clk_hw *[]){
1800 &nss_port5_tx_clk_src.clkr.hw },
1801 .num_parents = 1,
1802 .ops = &clk_regmap_div_ops,
1803 .flags = CLK_SET_RATE_PARENT,
1804 },
1805 },
1806 };
1807
1808 static const struct freq_tbl ftbl_nss_port6_rx_clk_src[] = {
1809 F(19200000, P_XO, 1, 0, 0),
1810 F(25000000, P_UNIPHY2_RX, 5, 0, 0),
1811 F(25000000, P_UNIPHY2_RX, 12.5, 0, 0),
1812 F(78125000, P_UNIPHY2_RX, 4, 0, 0),
1813 F(125000000, P_UNIPHY2_RX, 1, 0, 0),
1814 F(125000000, P_UNIPHY2_RX, 2.5, 0, 0),
1815 F(156250000, P_UNIPHY2_RX, 2, 0, 0),
1816 F(312500000, P_UNIPHY2_RX, 1, 0, 0),
1817 { }
1818 };
1819
1820 static const struct clk_parent_data gcc_xo_uniphy2_rx_tx_ubi32_bias[] = {
1821 { .fw_name = "xo", .name = "xo" },
1822 { .fw_name = "uniphy2_gcc_rx_clk", .name = "uniphy2_gcc_rx_clk" },
1823 { .fw_name = "uniphy2_gcc_tx_clk", .name = "uniphy2_gcc_tx_clk" },
1824 { .hw = &ubi32_pll.clkr.hw },
1825 { .fw_name = "bias_pll_cc_clk", .name = "bias_pll_cc_clk" },
1826 };
1827
1828 static const struct parent_map gcc_xo_uniphy2_rx_tx_ubi32_bias_map[] = {
1829 { P_XO, 0 },
1830 { P_UNIPHY2_RX, 1 },
1831 { P_UNIPHY2_TX, 2 },
1832 { P_UBI32_PLL, 5 },
1833 { P_BIAS_PLL, 6 },
1834 };
1835
1836 static struct clk_rcg2 nss_port6_rx_clk_src = {
1837 .cmd_rcgr = 0x68070,
1838 .freq_tbl = ftbl_nss_port6_rx_clk_src,
1839 .hid_width = 5,
1840 .parent_map = gcc_xo_uniphy2_rx_tx_ubi32_bias_map,
1841 .clkr.hw.init = &(struct clk_init_data){
1842 .name = "nss_port6_rx_clk_src",
1843 .parent_data = gcc_xo_uniphy2_rx_tx_ubi32_bias,
1844 .num_parents = ARRAY_SIZE(gcc_xo_uniphy2_rx_tx_ubi32_bias),
1845 .ops = &clk_rcg2_ops,
1846 },
1847 };
1848
1849 static struct clk_regmap_div nss_port6_rx_div_clk_src = {
1850 .reg = 0x68450,
1851 .shift = 0,
1852 .width = 4,
1853 .clkr = {
1854 .hw.init = &(struct clk_init_data){
1855 .name = "nss_port6_rx_div_clk_src",
1856 .parent_hws = (const struct clk_hw *[]){
1857 &nss_port6_rx_clk_src.clkr.hw },
1858 .num_parents = 1,
1859 .ops = &clk_regmap_div_ops,
1860 .flags = CLK_SET_RATE_PARENT,
1861 },
1862 },
1863 };
1864
1865 static const struct freq_tbl ftbl_nss_port6_tx_clk_src[] = {
1866 F(19200000, P_XO, 1, 0, 0),
1867 F(25000000, P_UNIPHY2_TX, 5, 0, 0),
1868 F(25000000, P_UNIPHY2_TX, 12.5, 0, 0),
1869 F(78125000, P_UNIPHY2_TX, 4, 0, 0),
1870 F(125000000, P_UNIPHY2_TX, 1, 0, 0),
1871 F(125000000, P_UNIPHY2_TX, 2.5, 0, 0),
1872 F(156250000, P_UNIPHY2_TX, 2, 0, 0),
1873 F(312500000, P_UNIPHY2_TX, 1, 0, 0),
1874 { }
1875 };
1876
1877 static const struct clk_parent_data gcc_xo_uniphy2_tx_rx_ubi32_bias[] = {
1878 { .fw_name = "xo", .name = "xo" },
1879 { .fw_name = "uniphy2_gcc_tx_clk", .name = "uniphy2_gcc_tx_clk" },
1880 { .fw_name = "uniphy2_gcc_rx_clk", .name = "uniphy2_gcc_rx_clk" },
1881 { .hw = &ubi32_pll.clkr.hw },
1882 { .fw_name = "bias_pll_cc_clk", .name = "bias_pll_cc_clk" },
1883 };
1884
1885 static const struct parent_map gcc_xo_uniphy2_tx_rx_ubi32_bias_map[] = {
1886 { P_XO, 0 },
1887 { P_UNIPHY2_TX, 1 },
1888 { P_UNIPHY2_RX, 2 },
1889 { P_UBI32_PLL, 5 },
1890 { P_BIAS_PLL, 6 },
1891 };
1892
1893 static struct clk_rcg2 nss_port6_tx_clk_src = {
1894 .cmd_rcgr = 0x68078,
1895 .freq_tbl = ftbl_nss_port6_tx_clk_src,
1896 .hid_width = 5,
1897 .parent_map = gcc_xo_uniphy2_tx_rx_ubi32_bias_map,
1898 .clkr.hw.init = &(struct clk_init_data){
1899 .name = "nss_port6_tx_clk_src",
1900 .parent_data = gcc_xo_uniphy2_tx_rx_ubi32_bias,
1901 .num_parents = ARRAY_SIZE(gcc_xo_uniphy2_tx_rx_ubi32_bias),
1902 .ops = &clk_rcg2_ops,
1903 },
1904 };
1905
1906 static struct clk_regmap_div nss_port6_tx_div_clk_src = {
1907 .reg = 0x68454,
1908 .shift = 0,
1909 .width = 4,
1910 .clkr = {
1911 .hw.init = &(struct clk_init_data){
1912 .name = "nss_port6_tx_div_clk_src",
1913 .parent_hws = (const struct clk_hw *[]){
1914 &nss_port6_tx_clk_src.clkr.hw },
1915 .num_parents = 1,
1916 .ops = &clk_regmap_div_ops,
1917 .flags = CLK_SET_RATE_PARENT,
1918 },
1919 },
1920 };
1921
1922 static struct freq_tbl ftbl_crypto_clk_src[] = {
1923 F(40000000, P_GPLL0_DIV2, 10, 0, 0),
1924 F(80000000, P_GPLL0, 10, 0, 0),
1925 F(100000000, P_GPLL0, 8, 0, 0),
1926 F(160000000, P_GPLL0, 5, 0, 0),
1927 { }
1928 };
1929
1930 static struct clk_rcg2 crypto_clk_src = {
1931 .cmd_rcgr = 0x16004,
1932 .freq_tbl = ftbl_crypto_clk_src,
1933 .hid_width = 5,
1934 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1935 .clkr.hw.init = &(struct clk_init_data){
1936 .name = "crypto_clk_src",
1937 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1938 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
1939 .ops = &clk_rcg2_ops,
1940 },
1941 };
1942
1943 static struct freq_tbl ftbl_gp_clk_src[] = {
1944 F(19200000, P_XO, 1, 0, 0),
1945 { }
1946 };
1947
1948 static const struct clk_parent_data gcc_xo_gpll0_gpll6_gpll0_sleep_clk[] = {
1949 { .fw_name = "xo", .name = "xo" },
1950 { .hw = &gpll0.clkr.hw },
1951 { .hw = &gpll6.clkr.hw },
1952 { .hw = &gpll0_out_main_div2.hw },
1953 { .fw_name = "sleep_clk", .name = "sleep_clk" },
1954 };
1955
1956 static const struct parent_map gcc_xo_gpll0_gpll6_gpll0_sleep_clk_map[] = {
1957 { P_XO, 0 },
1958 { P_GPLL0, 1 },
1959 { P_GPLL6, 2 },
1960 { P_GPLL0_DIV2, 4 },
1961 { P_SLEEP_CLK, 6 },
1962 };
1963
1964 static struct clk_rcg2 gp1_clk_src = {
1965 .cmd_rcgr = 0x08004,
1966 .freq_tbl = ftbl_gp_clk_src,
1967 .mnd_width = 8,
1968 .hid_width = 5,
1969 .parent_map = gcc_xo_gpll0_gpll6_gpll0_sleep_clk_map,
1970 .clkr.hw.init = &(struct clk_init_data){
1971 .name = "gp1_clk_src",
1972 .parent_data = gcc_xo_gpll0_gpll6_gpll0_sleep_clk,
1973 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_gpll0_sleep_clk),
1974 .ops = &clk_rcg2_ops,
1975 },
1976 };
1977
1978 static struct clk_rcg2 gp2_clk_src = {
1979 .cmd_rcgr = 0x09004,
1980 .freq_tbl = ftbl_gp_clk_src,
1981 .mnd_width = 8,
1982 .hid_width = 5,
1983 .parent_map = gcc_xo_gpll0_gpll6_gpll0_sleep_clk_map,
1984 .clkr.hw.init = &(struct clk_init_data){
1985 .name = "gp2_clk_src",
1986 .parent_data = gcc_xo_gpll0_gpll6_gpll0_sleep_clk,
1987 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_gpll0_sleep_clk),
1988 .ops = &clk_rcg2_ops,
1989 },
1990 };
1991
1992 static struct clk_rcg2 gp3_clk_src = {
1993 .cmd_rcgr = 0x0a004,
1994 .freq_tbl = ftbl_gp_clk_src,
1995 .mnd_width = 8,
1996 .hid_width = 5,
1997 .parent_map = gcc_xo_gpll0_gpll6_gpll0_sleep_clk_map,
1998 .clkr.hw.init = &(struct clk_init_data){
1999 .name = "gp3_clk_src",
2000 .parent_data = gcc_xo_gpll0_gpll6_gpll0_sleep_clk,
2001 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6_gpll0_sleep_clk),
2002 .ops = &clk_rcg2_ops,
2003 },
2004 };
2005
2006 static struct clk_branch gcc_blsp1_ahb_clk = {
2007 .halt_reg = 0x01008,
2008 .clkr = {
2009 .enable_reg = 0x01008,
2010 .enable_mask = BIT(0),
2011 .hw.init = &(struct clk_init_data){
2012 .name = "gcc_blsp1_ahb_clk",
2013 .parent_hws = (const struct clk_hw *[]){
2014 &pcnoc_clk_src.hw },
2015 .num_parents = 1,
2016 .flags = CLK_SET_RATE_PARENT,
2017 .ops = &clk_branch2_ops,
2018 },
2019 },
2020 };
2021
2022 static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
2023 .halt_reg = 0x02008,
2024 .clkr = {
2025 .enable_reg = 0x02008,
2026 .enable_mask = BIT(0),
2027 .hw.init = &(struct clk_init_data){
2028 .name = "gcc_blsp1_qup1_i2c_apps_clk",
2029 .parent_hws = (const struct clk_hw *[]){
2030 &blsp1_qup1_i2c_apps_clk_src.clkr.hw },
2031 .num_parents = 1,
2032 .flags = CLK_SET_RATE_PARENT,
2033 .ops = &clk_branch2_ops,
2034 },
2035 },
2036 };
2037
2038 static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
2039 .halt_reg = 0x02004,
2040 .clkr = {
2041 .enable_reg = 0x02004,
2042 .enable_mask = BIT(0),
2043 .hw.init = &(struct clk_init_data){
2044 .name = "gcc_blsp1_qup1_spi_apps_clk",
2045 .parent_hws = (const struct clk_hw *[]){
2046 &blsp1_qup1_spi_apps_clk_src.clkr.hw },
2047 .num_parents = 1,
2048 .flags = CLK_SET_RATE_PARENT,
2049 .ops = &clk_branch2_ops,
2050 },
2051 },
2052 };
2053
2054 static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
2055 .halt_reg = 0x03010,
2056 .clkr = {
2057 .enable_reg = 0x03010,
2058 .enable_mask = BIT(0),
2059 .hw.init = &(struct clk_init_data){
2060 .name = "gcc_blsp1_qup2_i2c_apps_clk",
2061 .parent_hws = (const struct clk_hw *[]){
2062 &blsp1_qup2_i2c_apps_clk_src.clkr.hw },
2063 .num_parents = 1,
2064 .flags = CLK_SET_RATE_PARENT,
2065 .ops = &clk_branch2_ops,
2066 },
2067 },
2068 };
2069
2070 static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
2071 .halt_reg = 0x0300c,
2072 .clkr = {
2073 .enable_reg = 0x0300c,
2074 .enable_mask = BIT(0),
2075 .hw.init = &(struct clk_init_data){
2076 .name = "gcc_blsp1_qup2_spi_apps_clk",
2077 .parent_hws = (const struct clk_hw *[]){
2078 &blsp1_qup2_spi_apps_clk_src.clkr.hw },
2079 .num_parents = 1,
2080 .flags = CLK_SET_RATE_PARENT,
2081 .ops = &clk_branch2_ops,
2082 },
2083 },
2084 };
2085
2086 static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
2087 .halt_reg = 0x04010,
2088 .clkr = {
2089 .enable_reg = 0x04010,
2090 .enable_mask = BIT(0),
2091 .hw.init = &(struct clk_init_data){
2092 .name = "gcc_blsp1_qup3_i2c_apps_clk",
2093 .parent_hws = (const struct clk_hw *[]){
2094 &blsp1_qup3_i2c_apps_clk_src.clkr.hw },
2095 .num_parents = 1,
2096 .flags = CLK_SET_RATE_PARENT,
2097 .ops = &clk_branch2_ops,
2098 },
2099 },
2100 };
2101
2102 static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
2103 .halt_reg = 0x0400c,
2104 .clkr = {
2105 .enable_reg = 0x0400c,
2106 .enable_mask = BIT(0),
2107 .hw.init = &(struct clk_init_data){
2108 .name = "gcc_blsp1_qup3_spi_apps_clk",
2109 .parent_hws = (const struct clk_hw *[]){
2110 &blsp1_qup3_spi_apps_clk_src.clkr.hw },
2111 .num_parents = 1,
2112 .flags = CLK_SET_RATE_PARENT,
2113 .ops = &clk_branch2_ops,
2114 },
2115 },
2116 };
2117
2118 static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
2119 .halt_reg = 0x05010,
2120 .clkr = {
2121 .enable_reg = 0x05010,
2122 .enable_mask = BIT(0),
2123 .hw.init = &(struct clk_init_data){
2124 .name = "gcc_blsp1_qup4_i2c_apps_clk",
2125 .parent_hws = (const struct clk_hw *[]){
2126 &blsp1_qup4_i2c_apps_clk_src.clkr.hw },
2127 .num_parents = 1,
2128 .flags = CLK_SET_RATE_PARENT,
2129 .ops = &clk_branch2_ops,
2130 },
2131 },
2132 };
2133
2134 static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
2135 .halt_reg = 0x0500c,
2136 .clkr = {
2137 .enable_reg = 0x0500c,
2138 .enable_mask = BIT(0),
2139 .hw.init = &(struct clk_init_data){
2140 .name = "gcc_blsp1_qup4_spi_apps_clk",
2141 .parent_hws = (const struct clk_hw *[]){
2142 &blsp1_qup4_spi_apps_clk_src.clkr.hw },
2143 .num_parents = 1,
2144 .flags = CLK_SET_RATE_PARENT,
2145 .ops = &clk_branch2_ops,
2146 },
2147 },
2148 };
2149
2150 static struct clk_branch gcc_blsp1_qup5_i2c_apps_clk = {
2151 .halt_reg = 0x06010,
2152 .clkr = {
2153 .enable_reg = 0x06010,
2154 .enable_mask = BIT(0),
2155 .hw.init = &(struct clk_init_data){
2156 .name = "gcc_blsp1_qup5_i2c_apps_clk",
2157 .parent_hws = (const struct clk_hw *[]){
2158 &blsp1_qup5_i2c_apps_clk_src.clkr.hw },
2159 .num_parents = 1,
2160 .flags = CLK_SET_RATE_PARENT,
2161 .ops = &clk_branch2_ops,
2162 },
2163 },
2164 };
2165
2166 static struct clk_branch gcc_blsp1_qup5_spi_apps_clk = {
2167 .halt_reg = 0x0600c,
2168 .clkr = {
2169 .enable_reg = 0x0600c,
2170 .enable_mask = BIT(0),
2171 .hw.init = &(struct clk_init_data){
2172 .name = "gcc_blsp1_qup5_spi_apps_clk",
2173 .parent_hws = (const struct clk_hw *[]){
2174 &blsp1_qup5_spi_apps_clk_src.clkr.hw },
2175 .num_parents = 1,
2176 .flags = CLK_SET_RATE_PARENT,
2177 .ops = &clk_branch2_ops,
2178 },
2179 },
2180 };
2181
2182 static struct clk_branch gcc_blsp1_qup6_i2c_apps_clk = {
2183 .halt_reg = 0x07010,
2184 .clkr = {
2185 .enable_reg = 0x07010,
2186 .enable_mask = BIT(0),
2187 .hw.init = &(struct clk_init_data){
2188 .name = "gcc_blsp1_qup6_i2c_apps_clk",
2189 .parent_hws = (const struct clk_hw *[]){
2190 &blsp1_qup6_i2c_apps_clk_src.clkr.hw },
2191 .num_parents = 1,
2192 .flags = CLK_SET_RATE_PARENT,
2193 .ops = &clk_branch2_ops,
2194 },
2195 },
2196 };
2197
2198 static struct clk_branch gcc_blsp1_qup6_spi_apps_clk = {
2199 .halt_reg = 0x0700c,
2200 .clkr = {
2201 .enable_reg = 0x0700c,
2202 .enable_mask = BIT(0),
2203 .hw.init = &(struct clk_init_data){
2204 .name = "gcc_blsp1_qup6_spi_apps_clk",
2205 .parent_hws = (const struct clk_hw *[]){
2206 &blsp1_qup6_spi_apps_clk_src.clkr.hw },
2207 .num_parents = 1,
2208 .flags = CLK_SET_RATE_PARENT,
2209 .ops = &clk_branch2_ops,
2210 },
2211 },
2212 };
2213
2214 static struct clk_branch gcc_blsp1_uart1_apps_clk = {
2215 .halt_reg = 0x0203c,
2216 .clkr = {
2217 .enable_reg = 0x0203c,
2218 .enable_mask = BIT(0),
2219 .hw.init = &(struct clk_init_data){
2220 .name = "gcc_blsp1_uart1_apps_clk",
2221 .parent_hws = (const struct clk_hw *[]){
2222 &blsp1_uart1_apps_clk_src.clkr.hw },
2223 .num_parents = 1,
2224 .flags = CLK_SET_RATE_PARENT,
2225 .ops = &clk_branch2_ops,
2226 },
2227 },
2228 };
2229
2230 static struct clk_branch gcc_blsp1_uart2_apps_clk = {
2231 .halt_reg = 0x0302c,
2232 .clkr = {
2233 .enable_reg = 0x0302c,
2234 .enable_mask = BIT(0),
2235 .hw.init = &(struct clk_init_data){
2236 .name = "gcc_blsp1_uart2_apps_clk",
2237 .parent_hws = (const struct clk_hw *[]){
2238 &blsp1_uart2_apps_clk_src.clkr.hw },
2239 .num_parents = 1,
2240 .flags = CLK_SET_RATE_PARENT,
2241 .ops = &clk_branch2_ops,
2242 },
2243 },
2244 };
2245
2246 static struct clk_branch gcc_blsp1_uart3_apps_clk = {
2247 .halt_reg = 0x0402c,
2248 .clkr = {
2249 .enable_reg = 0x0402c,
2250 .enable_mask = BIT(0),
2251 .hw.init = &(struct clk_init_data){
2252 .name = "gcc_blsp1_uart3_apps_clk",
2253 .parent_hws = (const struct clk_hw *[]){
2254 &blsp1_uart3_apps_clk_src.clkr.hw },
2255 .num_parents = 1,
2256 .flags = CLK_SET_RATE_PARENT,
2257 .ops = &clk_branch2_ops,
2258 },
2259 },
2260 };
2261
2262 static struct clk_branch gcc_blsp1_uart4_apps_clk = {
2263 .halt_reg = 0x0502c,
2264 .clkr = {
2265 .enable_reg = 0x0502c,
2266 .enable_mask = BIT(0),
2267 .hw.init = &(struct clk_init_data){
2268 .name = "gcc_blsp1_uart4_apps_clk",
2269 .parent_hws = (const struct clk_hw *[]){
2270 &blsp1_uart4_apps_clk_src.clkr.hw },
2271 .num_parents = 1,
2272 .flags = CLK_SET_RATE_PARENT,
2273 .ops = &clk_branch2_ops,
2274 },
2275 },
2276 };
2277
2278 static struct clk_branch gcc_blsp1_uart5_apps_clk = {
2279 .halt_reg = 0x0602c,
2280 .clkr = {
2281 .enable_reg = 0x0602c,
2282 .enable_mask = BIT(0),
2283 .hw.init = &(struct clk_init_data){
2284 .name = "gcc_blsp1_uart5_apps_clk",
2285 .parent_hws = (const struct clk_hw *[]){
2286 &blsp1_uart5_apps_clk_src.clkr.hw },
2287 .num_parents = 1,
2288 .flags = CLK_SET_RATE_PARENT,
2289 .ops = &clk_branch2_ops,
2290 },
2291 },
2292 };
2293
2294 static struct clk_branch gcc_blsp1_uart6_apps_clk = {
2295 .halt_reg = 0x0702c,
2296 .clkr = {
2297 .enable_reg = 0x0702c,
2298 .enable_mask = BIT(0),
2299 .hw.init = &(struct clk_init_data){
2300 .name = "gcc_blsp1_uart6_apps_clk",
2301 .parent_hws = (const struct clk_hw *[]){
2302 &blsp1_uart6_apps_clk_src.clkr.hw },
2303 .num_parents = 1,
2304 .flags = CLK_SET_RATE_PARENT,
2305 .ops = &clk_branch2_ops,
2306 },
2307 },
2308 };
2309
2310 static struct clk_branch gcc_prng_ahb_clk = {
2311 .halt_reg = 0x13004,
2312 .halt_check = BRANCH_HALT_VOTED,
2313 .clkr = {
2314 .enable_reg = 0x0b004,
2315 .enable_mask = BIT(8),
2316 .hw.init = &(struct clk_init_data){
2317 .name = "gcc_prng_ahb_clk",
2318 .parent_hws = (const struct clk_hw *[]){
2319 &pcnoc_clk_src.hw },
2320 .num_parents = 1,
2321 .flags = CLK_SET_RATE_PARENT,
2322 .ops = &clk_branch2_ops,
2323 },
2324 },
2325 };
2326
2327 static struct clk_branch gcc_qpic_ahb_clk = {
2328 .halt_reg = 0x57024,
2329 .clkr = {
2330 .enable_reg = 0x57024,
2331 .enable_mask = BIT(0),
2332 .hw.init = &(struct clk_init_data){
2333 .name = "gcc_qpic_ahb_clk",
2334 .parent_hws = (const struct clk_hw *[]){
2335 &pcnoc_clk_src.hw },
2336 .num_parents = 1,
2337 .flags = CLK_SET_RATE_PARENT,
2338 .ops = &clk_branch2_ops,
2339 },
2340 },
2341 };
2342
2343 static struct clk_branch gcc_qpic_clk = {
2344 .halt_reg = 0x57020,
2345 .clkr = {
2346 .enable_reg = 0x57020,
2347 .enable_mask = BIT(0),
2348 .hw.init = &(struct clk_init_data){
2349 .name = "gcc_qpic_clk",
2350 .parent_hws = (const struct clk_hw *[]){
2351 &pcnoc_clk_src.hw },
2352 .num_parents = 1,
2353 .flags = CLK_SET_RATE_PARENT,
2354 .ops = &clk_branch2_ops,
2355 },
2356 },
2357 };
2358
2359 static struct clk_branch gcc_pcie0_ahb_clk = {
2360 .halt_reg = 0x75010,
2361 .clkr = {
2362 .enable_reg = 0x75010,
2363 .enable_mask = BIT(0),
2364 .hw.init = &(struct clk_init_data){
2365 .name = "gcc_pcie0_ahb_clk",
2366 .parent_hws = (const struct clk_hw *[]){
2367 &pcnoc_clk_src.hw },
2368 .num_parents = 1,
2369 .flags = CLK_SET_RATE_PARENT,
2370 .ops = &clk_branch2_ops,
2371 },
2372 },
2373 };
2374
2375 static struct clk_branch gcc_pcie0_aux_clk = {
2376 .halt_reg = 0x75014,
2377 .clkr = {
2378 .enable_reg = 0x75014,
2379 .enable_mask = BIT(0),
2380 .hw.init = &(struct clk_init_data){
2381 .name = "gcc_pcie0_aux_clk",
2382 .parent_hws = (const struct clk_hw *[]){
2383 &pcie0_aux_clk_src.clkr.hw },
2384 .num_parents = 1,
2385 .flags = CLK_SET_RATE_PARENT,
2386 .ops = &clk_branch2_ops,
2387 },
2388 },
2389 };
2390
2391 static struct clk_branch gcc_pcie0_axi_m_clk = {
2392 .halt_reg = 0x75008,
2393 .clkr = {
2394 .enable_reg = 0x75008,
2395 .enable_mask = BIT(0),
2396 .hw.init = &(struct clk_init_data){
2397 .name = "gcc_pcie0_axi_m_clk",
2398 .parent_hws = (const struct clk_hw *[]){
2399 &pcie0_axi_clk_src.clkr.hw },
2400 .num_parents = 1,
2401 .flags = CLK_SET_RATE_PARENT,
2402 .ops = &clk_branch2_ops,
2403 },
2404 },
2405 };
2406
2407 static struct clk_branch gcc_pcie0_axi_s_clk = {
2408 .halt_reg = 0x7500c,
2409 .clkr = {
2410 .enable_reg = 0x7500c,
2411 .enable_mask = BIT(0),
2412 .hw.init = &(struct clk_init_data){
2413 .name = "gcc_pcie0_axi_s_clk",
2414 .parent_hws = (const struct clk_hw *[]){
2415 &pcie0_axi_clk_src.clkr.hw },
2416 .num_parents = 1,
2417 .flags = CLK_SET_RATE_PARENT,
2418 .ops = &clk_branch2_ops,
2419 },
2420 },
2421 };
2422
2423 static struct clk_branch gcc_pcie0_pipe_clk = {
2424 .halt_reg = 0x75018,
2425 .halt_check = BRANCH_HALT_DELAY,
2426 .clkr = {
2427 .enable_reg = 0x75018,
2428 .enable_mask = BIT(0),
2429 .hw.init = &(struct clk_init_data){
2430 .name = "gcc_pcie0_pipe_clk",
2431 .parent_hws = (const struct clk_hw *[]){
2432 &pcie0_pipe_clk_src.clkr.hw },
2433 .num_parents = 1,
2434 .flags = CLK_SET_RATE_PARENT,
2435 .ops = &clk_branch2_ops,
2436 },
2437 },
2438 };
2439
2440 static struct clk_branch gcc_sys_noc_pcie0_axi_clk = {
2441 .halt_reg = 0x26048,
2442 .clkr = {
2443 .enable_reg = 0x26048,
2444 .enable_mask = BIT(0),
2445 .hw.init = &(struct clk_init_data){
2446 .name = "gcc_sys_noc_pcie0_axi_clk",
2447 .parent_hws = (const struct clk_hw *[]){
2448 &pcie0_axi_clk_src.clkr.hw },
2449 .num_parents = 1,
2450 .flags = CLK_SET_RATE_PARENT,
2451 .ops = &clk_branch2_ops,
2452 },
2453 },
2454 };
2455
2456 static struct clk_branch gcc_pcie1_ahb_clk = {
2457 .halt_reg = 0x76010,
2458 .clkr = {
2459 .enable_reg = 0x76010,
2460 .enable_mask = BIT(0),
2461 .hw.init = &(struct clk_init_data){
2462 .name = "gcc_pcie1_ahb_clk",
2463 .parent_hws = (const struct clk_hw *[]){
2464 &pcnoc_clk_src.hw },
2465 .num_parents = 1,
2466 .flags = CLK_SET_RATE_PARENT,
2467 .ops = &clk_branch2_ops,
2468 },
2469 },
2470 };
2471
2472 static struct clk_branch gcc_pcie1_aux_clk = {
2473 .halt_reg = 0x76014,
2474 .clkr = {
2475 .enable_reg = 0x76014,
2476 .enable_mask = BIT(0),
2477 .hw.init = &(struct clk_init_data){
2478 .name = "gcc_pcie1_aux_clk",
2479 .parent_hws = (const struct clk_hw *[]){
2480 &pcie1_aux_clk_src.clkr.hw },
2481 .num_parents = 1,
2482 .flags = CLK_SET_RATE_PARENT,
2483 .ops = &clk_branch2_ops,
2484 },
2485 },
2486 };
2487
2488 static struct clk_branch gcc_pcie1_axi_m_clk = {
2489 .halt_reg = 0x76008,
2490 .clkr = {
2491 .enable_reg = 0x76008,
2492 .enable_mask = BIT(0),
2493 .hw.init = &(struct clk_init_data){
2494 .name = "gcc_pcie1_axi_m_clk",
2495 .parent_hws = (const struct clk_hw *[]){
2496 &pcie1_axi_clk_src.clkr.hw },
2497 .num_parents = 1,
2498 .flags = CLK_SET_RATE_PARENT,
2499 .ops = &clk_branch2_ops,
2500 },
2501 },
2502 };
2503
2504 static struct clk_branch gcc_pcie1_axi_s_clk = {
2505 .halt_reg = 0x7600c,
2506 .clkr = {
2507 .enable_reg = 0x7600c,
2508 .enable_mask = BIT(0),
2509 .hw.init = &(struct clk_init_data){
2510 .name = "gcc_pcie1_axi_s_clk",
2511 .parent_hws = (const struct clk_hw *[]){
2512 &pcie1_axi_clk_src.clkr.hw },
2513 .num_parents = 1,
2514 .flags = CLK_SET_RATE_PARENT,
2515 .ops = &clk_branch2_ops,
2516 },
2517 },
2518 };
2519
2520 static struct clk_branch gcc_pcie1_pipe_clk = {
2521 .halt_reg = 0x76018,
2522 .halt_check = BRANCH_HALT_DELAY,
2523 .clkr = {
2524 .enable_reg = 0x76018,
2525 .enable_mask = BIT(0),
2526 .hw.init = &(struct clk_init_data){
2527 .name = "gcc_pcie1_pipe_clk",
2528 .parent_hws = (const struct clk_hw *[]){
2529 &pcie1_pipe_clk_src.clkr.hw },
2530 .num_parents = 1,
2531 .flags = CLK_SET_RATE_PARENT,
2532 .ops = &clk_branch2_ops,
2533 },
2534 },
2535 };
2536
2537 static struct clk_branch gcc_sys_noc_pcie1_axi_clk = {
2538 .halt_reg = 0x2604c,
2539 .clkr = {
2540 .enable_reg = 0x2604c,
2541 .enable_mask = BIT(0),
2542 .hw.init = &(struct clk_init_data){
2543 .name = "gcc_sys_noc_pcie1_axi_clk",
2544 .parent_hws = (const struct clk_hw *[]){
2545 &pcie1_axi_clk_src.clkr.hw },
2546 .num_parents = 1,
2547 .flags = CLK_SET_RATE_PARENT,
2548 .ops = &clk_branch2_ops,
2549 },
2550 },
2551 };
2552
2553 static struct clk_branch gcc_usb0_aux_clk = {
2554 .halt_reg = 0x3e044,
2555 .clkr = {
2556 .enable_reg = 0x3e044,
2557 .enable_mask = BIT(0),
2558 .hw.init = &(struct clk_init_data){
2559 .name = "gcc_usb0_aux_clk",
2560 .parent_hws = (const struct clk_hw *[]){
2561 &usb0_aux_clk_src.clkr.hw },
2562 .num_parents = 1,
2563 .flags = CLK_SET_RATE_PARENT,
2564 .ops = &clk_branch2_ops,
2565 },
2566 },
2567 };
2568
2569 static struct clk_branch gcc_sys_noc_usb0_axi_clk = {
2570 .halt_reg = 0x26040,
2571 .clkr = {
2572 .enable_reg = 0x26040,
2573 .enable_mask = BIT(0),
2574 .hw.init = &(struct clk_init_data){
2575 .name = "gcc_sys_noc_usb0_axi_clk",
2576 .parent_hws = (const struct clk_hw *[]){
2577 &usb0_master_clk_src.clkr.hw },
2578 .num_parents = 1,
2579 .flags = CLK_SET_RATE_PARENT,
2580 .ops = &clk_branch2_ops,
2581 },
2582 },
2583 };
2584
2585 static struct clk_branch gcc_usb0_master_clk = {
2586 .halt_reg = 0x3e000,
2587 .clkr = {
2588 .enable_reg = 0x3e000,
2589 .enable_mask = BIT(0),
2590 .hw.init = &(struct clk_init_data){
2591 .name = "gcc_usb0_master_clk",
2592 .parent_hws = (const struct clk_hw *[]){
2593 &usb0_master_clk_src.clkr.hw },
2594 .num_parents = 1,
2595 .flags = CLK_SET_RATE_PARENT,
2596 .ops = &clk_branch2_ops,
2597 },
2598 },
2599 };
2600
2601 static struct clk_branch gcc_usb0_mock_utmi_clk = {
2602 .halt_reg = 0x3e008,
2603 .clkr = {
2604 .enable_reg = 0x3e008,
2605 .enable_mask = BIT(0),
2606 .hw.init = &(struct clk_init_data){
2607 .name = "gcc_usb0_mock_utmi_clk",
2608 .parent_hws = (const struct clk_hw *[]){
2609 &usb0_mock_utmi_clk_src.clkr.hw },
2610 .num_parents = 1,
2611 .flags = CLK_SET_RATE_PARENT,
2612 .ops = &clk_branch2_ops,
2613 },
2614 },
2615 };
2616
2617 static struct clk_branch gcc_usb0_phy_cfg_ahb_clk = {
2618 .halt_reg = 0x3e080,
2619 .clkr = {
2620 .enable_reg = 0x3e080,
2621 .enable_mask = BIT(0),
2622 .hw.init = &(struct clk_init_data){
2623 .name = "gcc_usb0_phy_cfg_ahb_clk",
2624 .parent_hws = (const struct clk_hw *[]){
2625 &pcnoc_clk_src.hw },
2626 .num_parents = 1,
2627 .flags = CLK_SET_RATE_PARENT,
2628 .ops = &clk_branch2_ops,
2629 },
2630 },
2631 };
2632
2633 static struct clk_branch gcc_usb0_pipe_clk = {
2634 .halt_reg = 0x3e040,
2635 .halt_check = BRANCH_HALT_DELAY,
2636 .clkr = {
2637 .enable_reg = 0x3e040,
2638 .enable_mask = BIT(0),
2639 .hw.init = &(struct clk_init_data){
2640 .name = "gcc_usb0_pipe_clk",
2641 .parent_hws = (const struct clk_hw *[]){
2642 &usb0_pipe_clk_src.clkr.hw },
2643 .num_parents = 1,
2644 .flags = CLK_SET_RATE_PARENT,
2645 .ops = &clk_branch2_ops,
2646 },
2647 },
2648 };
2649
2650 static struct clk_branch gcc_usb0_sleep_clk = {
2651 .halt_reg = 0x3e004,
2652 .clkr = {
2653 .enable_reg = 0x3e004,
2654 .enable_mask = BIT(0),
2655 .hw.init = &(struct clk_init_data){
2656 .name = "gcc_usb0_sleep_clk",
2657 .parent_hws = (const struct clk_hw *[]){
2658 &gcc_sleep_clk_src.clkr.hw },
2659 .num_parents = 1,
2660 .flags = CLK_SET_RATE_PARENT,
2661 .ops = &clk_branch2_ops,
2662 },
2663 },
2664 };
2665
2666 static struct clk_branch gcc_usb1_aux_clk = {
2667 .halt_reg = 0x3f044,
2668 .clkr = {
2669 .enable_reg = 0x3f044,
2670 .enable_mask = BIT(0),
2671 .hw.init = &(struct clk_init_data){
2672 .name = "gcc_usb1_aux_clk",
2673 .parent_hws = (const struct clk_hw *[]){
2674 &usb1_aux_clk_src.clkr.hw },
2675 .num_parents = 1,
2676 .flags = CLK_SET_RATE_PARENT,
2677 .ops = &clk_branch2_ops,
2678 },
2679 },
2680 };
2681
2682 static struct clk_branch gcc_sys_noc_usb1_axi_clk = {
2683 .halt_reg = 0x26044,
2684 .clkr = {
2685 .enable_reg = 0x26044,
2686 .enable_mask = BIT(0),
2687 .hw.init = &(struct clk_init_data){
2688 .name = "gcc_sys_noc_usb1_axi_clk",
2689 .parent_hws = (const struct clk_hw *[]){
2690 &usb1_master_clk_src.clkr.hw },
2691 .num_parents = 1,
2692 .flags = CLK_SET_RATE_PARENT,
2693 .ops = &clk_branch2_ops,
2694 },
2695 },
2696 };
2697
2698 static struct clk_branch gcc_usb1_master_clk = {
2699 .halt_reg = 0x3f000,
2700 .clkr = {
2701 .enable_reg = 0x3f000,
2702 .enable_mask = BIT(0),
2703 .hw.init = &(struct clk_init_data){
2704 .name = "gcc_usb1_master_clk",
2705 .parent_hws = (const struct clk_hw *[]){
2706 &usb1_master_clk_src.clkr.hw },
2707 .num_parents = 1,
2708 .flags = CLK_SET_RATE_PARENT,
2709 .ops = &clk_branch2_ops,
2710 },
2711 },
2712 };
2713
2714 static struct clk_branch gcc_usb1_mock_utmi_clk = {
2715 .halt_reg = 0x3f008,
2716 .clkr = {
2717 .enable_reg = 0x3f008,
2718 .enable_mask = BIT(0),
2719 .hw.init = &(struct clk_init_data){
2720 .name = "gcc_usb1_mock_utmi_clk",
2721 .parent_hws = (const struct clk_hw *[]){
2722 &usb1_mock_utmi_clk_src.clkr.hw },
2723 .num_parents = 1,
2724 .flags = CLK_SET_RATE_PARENT,
2725 .ops = &clk_branch2_ops,
2726 },
2727 },
2728 };
2729
2730 static struct clk_branch gcc_usb1_phy_cfg_ahb_clk = {
2731 .halt_reg = 0x3f080,
2732 .clkr = {
2733 .enable_reg = 0x3f080,
2734 .enable_mask = BIT(0),
2735 .hw.init = &(struct clk_init_data){
2736 .name = "gcc_usb1_phy_cfg_ahb_clk",
2737 .parent_hws = (const struct clk_hw *[]){
2738 &pcnoc_clk_src.hw },
2739 .num_parents = 1,
2740 .flags = CLK_SET_RATE_PARENT,
2741 .ops = &clk_branch2_ops,
2742 },
2743 },
2744 };
2745
2746 static struct clk_branch gcc_usb1_pipe_clk = {
2747 .halt_reg = 0x3f040,
2748 .halt_check = BRANCH_HALT_DELAY,
2749 .clkr = {
2750 .enable_reg = 0x3f040,
2751 .enable_mask = BIT(0),
2752 .hw.init = &(struct clk_init_data){
2753 .name = "gcc_usb1_pipe_clk",
2754 .parent_hws = (const struct clk_hw *[]){
2755 &usb1_pipe_clk_src.clkr.hw },
2756 .num_parents = 1,
2757 .flags = CLK_SET_RATE_PARENT,
2758 .ops = &clk_branch2_ops,
2759 },
2760 },
2761 };
2762
2763 static struct clk_branch gcc_usb1_sleep_clk = {
2764 .halt_reg = 0x3f004,
2765 .clkr = {
2766 .enable_reg = 0x3f004,
2767 .enable_mask = BIT(0),
2768 .hw.init = &(struct clk_init_data){
2769 .name = "gcc_usb1_sleep_clk",
2770 .parent_hws = (const struct clk_hw *[]){
2771 &gcc_sleep_clk_src.clkr.hw },
2772 .num_parents = 1,
2773 .flags = CLK_SET_RATE_PARENT,
2774 .ops = &clk_branch2_ops,
2775 },
2776 },
2777 };
2778
2779 static struct clk_branch gcc_sdcc1_ahb_clk = {
2780 .halt_reg = 0x4201c,
2781 .clkr = {
2782 .enable_reg = 0x4201c,
2783 .enable_mask = BIT(0),
2784 .hw.init = &(struct clk_init_data){
2785 .name = "gcc_sdcc1_ahb_clk",
2786 .parent_hws = (const struct clk_hw *[]){
2787 &pcnoc_clk_src.hw },
2788 .num_parents = 1,
2789 .flags = CLK_SET_RATE_PARENT,
2790 .ops = &clk_branch2_ops,
2791 },
2792 },
2793 };
2794
2795 static struct clk_branch gcc_sdcc1_apps_clk = {
2796 .halt_reg = 0x42018,
2797 .clkr = {
2798 .enable_reg = 0x42018,
2799 .enable_mask = BIT(0),
2800 .hw.init = &(struct clk_init_data){
2801 .name = "gcc_sdcc1_apps_clk",
2802 .parent_hws = (const struct clk_hw *[]){
2803 &sdcc1_apps_clk_src.clkr.hw },
2804 .num_parents = 1,
2805 .flags = CLK_SET_RATE_PARENT,
2806 .ops = &clk_branch2_ops,
2807 },
2808 },
2809 };
2810
2811 static struct clk_branch gcc_sdcc1_ice_core_clk = {
2812 .halt_reg = 0x5d014,
2813 .clkr = {
2814 .enable_reg = 0x5d014,
2815 .enable_mask = BIT(0),
2816 .hw.init = &(struct clk_init_data){
2817 .name = "gcc_sdcc1_ice_core_clk",
2818 .parent_hws = (const struct clk_hw *[]){
2819 &sdcc1_ice_core_clk_src.clkr.hw },
2820 .num_parents = 1,
2821 .flags = CLK_SET_RATE_PARENT,
2822 .ops = &clk_branch2_ops,
2823 },
2824 },
2825 };
2826
2827 static struct clk_branch gcc_sdcc2_ahb_clk = {
2828 .halt_reg = 0x4301c,
2829 .clkr = {
2830 .enable_reg = 0x4301c,
2831 .enable_mask = BIT(0),
2832 .hw.init = &(struct clk_init_data){
2833 .name = "gcc_sdcc2_ahb_clk",
2834 .parent_hws = (const struct clk_hw *[]){
2835 &pcnoc_clk_src.hw },
2836 .num_parents = 1,
2837 .flags = CLK_SET_RATE_PARENT,
2838 .ops = &clk_branch2_ops,
2839 },
2840 },
2841 };
2842
2843 static struct clk_branch gcc_sdcc2_apps_clk = {
2844 .halt_reg = 0x43018,
2845 .clkr = {
2846 .enable_reg = 0x43018,
2847 .enable_mask = BIT(0),
2848 .hw.init = &(struct clk_init_data){
2849 .name = "gcc_sdcc2_apps_clk",
2850 .parent_hws = (const struct clk_hw *[]){
2851 &sdcc2_apps_clk_src.clkr.hw },
2852 .num_parents = 1,
2853 .flags = CLK_SET_RATE_PARENT,
2854 .ops = &clk_branch2_ops,
2855 },
2856 },
2857 };
2858
2859 static struct clk_branch gcc_mem_noc_nss_axi_clk = {
2860 .halt_reg = 0x1d03c,
2861 .clkr = {
2862 .enable_reg = 0x1d03c,
2863 .enable_mask = BIT(0),
2864 .hw.init = &(struct clk_init_data){
2865 .name = "gcc_mem_noc_nss_axi_clk",
2866 .parent_hws = (const struct clk_hw *[]){
2867 &nss_noc_clk_src.hw },
2868 .num_parents = 1,
2869 .flags = CLK_SET_RATE_PARENT,
2870 .ops = &clk_branch2_ops,
2871 },
2872 },
2873 };
2874
2875 static struct clk_branch gcc_nss_ce_apb_clk = {
2876 .halt_reg = 0x68174,
2877 .clkr = {
2878 .enable_reg = 0x68174,
2879 .enable_mask = BIT(0),
2880 .hw.init = &(struct clk_init_data){
2881 .name = "gcc_nss_ce_apb_clk",
2882 .parent_hws = (const struct clk_hw *[]){
2883 &nss_ce_clk_src.clkr.hw },
2884 .num_parents = 1,
2885 .flags = CLK_SET_RATE_PARENT,
2886 .ops = &clk_branch2_ops,
2887 },
2888 },
2889 };
2890
2891 static struct clk_branch gcc_nss_ce_axi_clk = {
2892 .halt_reg = 0x68170,
2893 .clkr = {
2894 .enable_reg = 0x68170,
2895 .enable_mask = BIT(0),
2896 .hw.init = &(struct clk_init_data){
2897 .name = "gcc_nss_ce_axi_clk",
2898 .parent_hws = (const struct clk_hw *[]){
2899 &nss_ce_clk_src.clkr.hw },
2900 .num_parents = 1,
2901 .flags = CLK_SET_RATE_PARENT,
2902 .ops = &clk_branch2_ops,
2903 },
2904 },
2905 };
2906
2907 static struct clk_branch gcc_nss_cfg_clk = {
2908 .halt_reg = 0x68160,
2909 .clkr = {
2910 .enable_reg = 0x68160,
2911 .enable_mask = BIT(0),
2912 .hw.init = &(struct clk_init_data){
2913 .name = "gcc_nss_cfg_clk",
2914 .parent_hws = (const struct clk_hw *[]){
2915 &pcnoc_clk_src.hw },
2916 .num_parents = 1,
2917 .flags = CLK_SET_RATE_PARENT,
2918 .ops = &clk_branch2_ops,
2919 },
2920 },
2921 };
2922
2923 static struct clk_branch gcc_nss_crypto_clk = {
2924 .halt_reg = 0x68164,
2925 .clkr = {
2926 .enable_reg = 0x68164,
2927 .enable_mask = BIT(0),
2928 .hw.init = &(struct clk_init_data){
2929 .name = "gcc_nss_crypto_clk",
2930 .parent_hws = (const struct clk_hw *[]){
2931 &nss_crypto_clk_src.clkr.hw },
2932 .num_parents = 1,
2933 .flags = CLK_SET_RATE_PARENT,
2934 .ops = &clk_branch2_ops,
2935 },
2936 },
2937 };
2938
2939 static struct clk_branch gcc_nss_csr_clk = {
2940 .halt_reg = 0x68318,
2941 .clkr = {
2942 .enable_reg = 0x68318,
2943 .enable_mask = BIT(0),
2944 .hw.init = &(struct clk_init_data){
2945 .name = "gcc_nss_csr_clk",
2946 .parent_hws = (const struct clk_hw *[]){
2947 &nss_ce_clk_src.clkr.hw },
2948 .num_parents = 1,
2949 .flags = CLK_SET_RATE_PARENT,
2950 .ops = &clk_branch2_ops,
2951 },
2952 },
2953 };
2954
2955 static struct clk_branch gcc_nss_edma_cfg_clk = {
2956 .halt_reg = 0x6819c,
2957 .clkr = {
2958 .enable_reg = 0x6819c,
2959 .enable_mask = BIT(0),
2960 .hw.init = &(struct clk_init_data){
2961 .name = "gcc_nss_edma_cfg_clk",
2962 .parent_hws = (const struct clk_hw *[]){
2963 &nss_ppe_clk_src.clkr.hw },
2964 .num_parents = 1,
2965 .flags = CLK_SET_RATE_PARENT,
2966 .ops = &clk_branch2_ops,
2967 },
2968 },
2969 };
2970
2971 static struct clk_branch gcc_nss_edma_clk = {
2972 .halt_reg = 0x68198,
2973 .clkr = {
2974 .enable_reg = 0x68198,
2975 .enable_mask = BIT(0),
2976 .hw.init = &(struct clk_init_data){
2977 .name = "gcc_nss_edma_clk",
2978 .parent_hws = (const struct clk_hw *[]){
2979 &nss_ppe_clk_src.clkr.hw },
2980 .num_parents = 1,
2981 .flags = CLK_SET_RATE_PARENT,
2982 .ops = &clk_branch2_ops,
2983 },
2984 },
2985 };
2986
2987 static struct clk_branch gcc_nss_imem_clk = {
2988 .halt_reg = 0x68178,
2989 .clkr = {
2990 .enable_reg = 0x68178,
2991 .enable_mask = BIT(0),
2992 .hw.init = &(struct clk_init_data){
2993 .name = "gcc_nss_imem_clk",
2994 .parent_hws = (const struct clk_hw *[]){
2995 &nss_imem_clk_src.clkr.hw },
2996 .num_parents = 1,
2997 .flags = CLK_SET_RATE_PARENT,
2998 .ops = &clk_branch2_ops,
2999 },
3000 },
3001 };
3002
3003 static struct clk_branch gcc_nss_noc_clk = {
3004 .halt_reg = 0x68168,
3005 .clkr = {
3006 .enable_reg = 0x68168,
3007 .enable_mask = BIT(0),
3008 .hw.init = &(struct clk_init_data){
3009 .name = "gcc_nss_noc_clk",
3010 .parent_hws = (const struct clk_hw *[]){
3011 &nss_noc_clk_src.hw },
3012 .num_parents = 1,
3013 .flags = CLK_SET_RATE_PARENT,
3014 .ops = &clk_branch2_ops,
3015 },
3016 },
3017 };
3018
3019 static struct clk_branch gcc_nss_ppe_btq_clk = {
3020 .halt_reg = 0x6833c,
3021 .clkr = {
3022 .enable_reg = 0x6833c,
3023 .enable_mask = BIT(0),
3024 .hw.init = &(struct clk_init_data){
3025 .name = "gcc_nss_ppe_btq_clk",
3026 .parent_hws = (const struct clk_hw *[]){
3027 &nss_ppe_clk_src.clkr.hw },
3028 .num_parents = 1,
3029 .flags = CLK_SET_RATE_PARENT,
3030 .ops = &clk_branch2_ops,
3031 },
3032 },
3033 };
3034
3035 static struct clk_branch gcc_nss_ppe_cfg_clk = {
3036 .halt_reg = 0x68194,
3037 .clkr = {
3038 .enable_reg = 0x68194,
3039 .enable_mask = BIT(0),
3040 .hw.init = &(struct clk_init_data){
3041 .name = "gcc_nss_ppe_cfg_clk",
3042 .parent_hws = (const struct clk_hw *[]){
3043 &nss_ppe_clk_src.clkr.hw },
3044 .num_parents = 1,
3045 .flags = CLK_SET_RATE_PARENT,
3046 .ops = &clk_branch2_ops,
3047 },
3048 },
3049 };
3050
3051 static struct clk_branch gcc_nss_ppe_clk = {
3052 .halt_reg = 0x68190,
3053 .clkr = {
3054 .enable_reg = 0x68190,
3055 .enable_mask = BIT(0),
3056 .hw.init = &(struct clk_init_data){
3057 .name = "gcc_nss_ppe_clk",
3058 .parent_hws = (const struct clk_hw *[]){
3059 &nss_ppe_clk_src.clkr.hw },
3060 .num_parents = 1,
3061 .flags = CLK_SET_RATE_PARENT,
3062 .ops = &clk_branch2_ops,
3063 },
3064 },
3065 };
3066
3067 static struct clk_branch gcc_nss_ppe_ipe_clk = {
3068 .halt_reg = 0x68338,
3069 .clkr = {
3070 .enable_reg = 0x68338,
3071 .enable_mask = BIT(0),
3072 .hw.init = &(struct clk_init_data){
3073 .name = "gcc_nss_ppe_ipe_clk",
3074 .parent_hws = (const struct clk_hw *[]){
3075 &nss_ppe_clk_src.clkr.hw },
3076 .num_parents = 1,
3077 .flags = CLK_SET_RATE_PARENT,
3078 .ops = &clk_branch2_ops,
3079 },
3080 },
3081 };
3082
3083 static struct clk_branch gcc_nss_ptp_ref_clk = {
3084 .halt_reg = 0x6816c,
3085 .clkr = {
3086 .enable_reg = 0x6816c,
3087 .enable_mask = BIT(0),
3088 .hw.init = &(struct clk_init_data){
3089 .name = "gcc_nss_ptp_ref_clk",
3090 .parent_hws = (const struct clk_hw *[]){
3091 &nss_ppe_cdiv_clk_src.hw },
3092 .num_parents = 1,
3093 .flags = CLK_SET_RATE_PARENT,
3094 .ops = &clk_branch2_ops,
3095 },
3096 },
3097 };
3098
3099 static struct clk_branch gcc_crypto_ppe_clk = {
3100 .halt_reg = 0x68310,
3101 .halt_bit = 31,
3102 .clkr = {
3103 .enable_reg = 0x68310,
3104 .enable_mask = BIT(0),
3105 .hw.init = &(struct clk_init_data){
3106 .name = "gcc_crypto_ppe_clk",
3107 .parent_hws = (const struct clk_hw *[]){
3108 &nss_ppe_clk_src.clkr.hw },
3109 .num_parents = 1,
3110 .flags = CLK_SET_RATE_PARENT,
3111 .ops = &clk_branch2_ops,
3112 },
3113 },
3114 };
3115
3116 static struct clk_branch gcc_nssnoc_ce_apb_clk = {
3117 .halt_reg = 0x6830c,
3118 .clkr = {
3119 .enable_reg = 0x6830c,
3120 .enable_mask = BIT(0),
3121 .hw.init = &(struct clk_init_data){
3122 .name = "gcc_nssnoc_ce_apb_clk",
3123 .parent_hws = (const struct clk_hw *[]){
3124 &nss_ce_clk_src.clkr.hw },
3125 .num_parents = 1,
3126 .flags = CLK_SET_RATE_PARENT,
3127 .ops = &clk_branch2_ops,
3128 },
3129 },
3130 };
3131
3132 static struct clk_branch gcc_nssnoc_ce_axi_clk = {
3133 .halt_reg = 0x68308,
3134 .clkr = {
3135 .enable_reg = 0x68308,
3136 .enable_mask = BIT(0),
3137 .hw.init = &(struct clk_init_data){
3138 .name = "gcc_nssnoc_ce_axi_clk",
3139 .parent_hws = (const struct clk_hw *[]){
3140 &nss_ce_clk_src.clkr.hw },
3141 .num_parents = 1,
3142 .flags = CLK_SET_RATE_PARENT,
3143 .ops = &clk_branch2_ops,
3144 },
3145 },
3146 };
3147
3148 static struct clk_branch gcc_nssnoc_crypto_clk = {
3149 .halt_reg = 0x68314,
3150 .clkr = {
3151 .enable_reg = 0x68314,
3152 .enable_mask = BIT(0),
3153 .hw.init = &(struct clk_init_data){
3154 .name = "gcc_nssnoc_crypto_clk",
3155 .parent_hws = (const struct clk_hw *[]){
3156 &nss_crypto_clk_src.clkr.hw },
3157 .num_parents = 1,
3158 .flags = CLK_SET_RATE_PARENT,
3159 .ops = &clk_branch2_ops,
3160 },
3161 },
3162 };
3163
3164 static struct clk_branch gcc_nssnoc_ppe_cfg_clk = {
3165 .halt_reg = 0x68304,
3166 .clkr = {
3167 .enable_reg = 0x68304,
3168 .enable_mask = BIT(0),
3169 .hw.init = &(struct clk_init_data){
3170 .name = "gcc_nssnoc_ppe_cfg_clk",
3171 .parent_hws = (const struct clk_hw *[]){
3172 &nss_ppe_clk_src.clkr.hw },
3173 .num_parents = 1,
3174 .flags = CLK_SET_RATE_PARENT,
3175 .ops = &clk_branch2_ops,
3176 },
3177 },
3178 };
3179
3180 static struct clk_branch gcc_nssnoc_ppe_clk = {
3181 .halt_reg = 0x68300,
3182 .clkr = {
3183 .enable_reg = 0x68300,
3184 .enable_mask = BIT(0),
3185 .hw.init = &(struct clk_init_data){
3186 .name = "gcc_nssnoc_ppe_clk",
3187 .parent_hws = (const struct clk_hw *[]){
3188 &nss_ppe_clk_src.clkr.hw },
3189 .num_parents = 1,
3190 .flags = CLK_SET_RATE_PARENT,
3191 .ops = &clk_branch2_ops,
3192 },
3193 },
3194 };
3195
3196 static struct clk_branch gcc_nssnoc_qosgen_ref_clk = {
3197 .halt_reg = 0x68180,
3198 .clkr = {
3199 .enable_reg = 0x68180,
3200 .enable_mask = BIT(0),
3201 .hw.init = &(struct clk_init_data){
3202 .name = "gcc_nssnoc_qosgen_ref_clk",
3203 .parent_hws = (const struct clk_hw *[]){
3204 &gcc_xo_clk_src.clkr.hw },
3205 .num_parents = 1,
3206 .flags = CLK_SET_RATE_PARENT,
3207 .ops = &clk_branch2_ops,
3208 },
3209 },
3210 };
3211
3212 static struct clk_branch gcc_nssnoc_snoc_clk = {
3213 .halt_reg = 0x68188,
3214 .clkr = {
3215 .enable_reg = 0x68188,
3216 .enable_mask = BIT(0),
3217 .hw.init = &(struct clk_init_data){
3218 .name = "gcc_nssnoc_snoc_clk",
3219 .parent_hws = (const struct clk_hw *[]){
3220 &system_noc_clk_src.hw },
3221 .num_parents = 1,
3222 .flags = CLK_SET_RATE_PARENT,
3223 .ops = &clk_branch2_ops,
3224 },
3225 },
3226 };
3227
3228 static struct clk_branch gcc_nssnoc_timeout_ref_clk = {
3229 .halt_reg = 0x68184,
3230 .clkr = {
3231 .enable_reg = 0x68184,
3232 .enable_mask = BIT(0),
3233 .hw.init = &(struct clk_init_data){
3234 .name = "gcc_nssnoc_timeout_ref_clk",
3235 .parent_hws = (const struct clk_hw *[]){
3236 &gcc_xo_div4_clk_src.hw },
3237 .num_parents = 1,
3238 .flags = CLK_SET_RATE_PARENT,
3239 .ops = &clk_branch2_ops,
3240 },
3241 },
3242 };
3243
3244 static struct clk_branch gcc_nssnoc_ubi0_ahb_clk = {
3245 .halt_reg = 0x68270,
3246 .clkr = {
3247 .enable_reg = 0x68270,
3248 .enable_mask = BIT(0),
3249 .hw.init = &(struct clk_init_data){
3250 .name = "gcc_nssnoc_ubi0_ahb_clk",
3251 .parent_hws = (const struct clk_hw *[]){
3252 &nss_ce_clk_src.clkr.hw },
3253 .num_parents = 1,
3254 .flags = CLK_SET_RATE_PARENT,
3255 .ops = &clk_branch2_ops,
3256 },
3257 },
3258 };
3259
3260 static struct clk_branch gcc_nssnoc_ubi1_ahb_clk = {
3261 .halt_reg = 0x68274,
3262 .clkr = {
3263 .enable_reg = 0x68274,
3264 .enable_mask = BIT(0),
3265 .hw.init = &(struct clk_init_data){
3266 .name = "gcc_nssnoc_ubi1_ahb_clk",
3267 .parent_hws = (const struct clk_hw *[]){
3268 &nss_ce_clk_src.clkr.hw },
3269 .num_parents = 1,
3270 .flags = CLK_SET_RATE_PARENT,
3271 .ops = &clk_branch2_ops,
3272 },
3273 },
3274 };
3275
3276 static struct clk_branch gcc_ubi0_ahb_clk = {
3277 .halt_reg = 0x6820c,
3278 .halt_check = BRANCH_HALT_DELAY,
3279 .clkr = {
3280 .enable_reg = 0x6820c,
3281 .enable_mask = BIT(0),
3282 .hw.init = &(struct clk_init_data){
3283 .name = "gcc_ubi0_ahb_clk",
3284 .parent_hws = (const struct clk_hw *[]){
3285 &nss_ce_clk_src.clkr.hw },
3286 .num_parents = 1,
3287 .flags = CLK_SET_RATE_PARENT,
3288 .ops = &clk_branch2_ops,
3289 },
3290 },
3291 };
3292
3293 static struct clk_branch gcc_ubi0_axi_clk = {
3294 .halt_reg = 0x68200,
3295 .halt_check = BRANCH_HALT_DELAY,
3296 .clkr = {
3297 .enable_reg = 0x68200,
3298 .enable_mask = BIT(0),
3299 .hw.init = &(struct clk_init_data){
3300 .name = "gcc_ubi0_axi_clk",
3301 .parent_hws = (const struct clk_hw *[]){
3302 &nss_noc_clk_src.hw },
3303 .num_parents = 1,
3304 .flags = CLK_SET_RATE_PARENT,
3305 .ops = &clk_branch2_ops,
3306 },
3307 },
3308 };
3309
3310 static struct clk_branch gcc_ubi0_nc_axi_clk = {
3311 .halt_reg = 0x68204,
3312 .halt_check = BRANCH_HALT_DELAY,
3313 .clkr = {
3314 .enable_reg = 0x68204,
3315 .enable_mask = BIT(0),
3316 .hw.init = &(struct clk_init_data){
3317 .name = "gcc_ubi0_nc_axi_clk",
3318 .parent_hws = (const struct clk_hw *[]){
3319 &nss_noc_clk_src.hw },
3320 .num_parents = 1,
3321 .flags = CLK_SET_RATE_PARENT,
3322 .ops = &clk_branch2_ops,
3323 },
3324 },
3325 };
3326
3327 static struct clk_branch gcc_ubi0_core_clk = {
3328 .halt_reg = 0x68210,
3329 .halt_check = BRANCH_HALT_DELAY,
3330 .clkr = {
3331 .enable_reg = 0x68210,
3332 .enable_mask = BIT(0),
3333 .hw.init = &(struct clk_init_data){
3334 .name = "gcc_ubi0_core_clk",
3335 .parent_hws = (const struct clk_hw *[]){
3336 &nss_ubi0_div_clk_src.clkr.hw },
3337 .num_parents = 1,
3338 .flags = CLK_SET_RATE_PARENT,
3339 .ops = &clk_branch2_ops,
3340 },
3341 },
3342 };
3343
3344 static struct clk_branch gcc_ubi0_mpt_clk = {
3345 .halt_reg = 0x68208,
3346 .halt_check = BRANCH_HALT_DELAY,
3347 .clkr = {
3348 .enable_reg = 0x68208,
3349 .enable_mask = BIT(0),
3350 .hw.init = &(struct clk_init_data){
3351 .name = "gcc_ubi0_mpt_clk",
3352 .parent_hws = (const struct clk_hw *[]){
3353 &ubi_mpt_clk_src.clkr.hw },
3354 .num_parents = 1,
3355 .flags = CLK_SET_RATE_PARENT,
3356 .ops = &clk_branch2_ops,
3357 },
3358 },
3359 };
3360
3361 static struct clk_branch gcc_ubi1_ahb_clk = {
3362 .halt_reg = 0x6822c,
3363 .halt_check = BRANCH_HALT_DELAY,
3364 .clkr = {
3365 .enable_reg = 0x6822c,
3366 .enable_mask = BIT(0),
3367 .hw.init = &(struct clk_init_data){
3368 .name = "gcc_ubi1_ahb_clk",
3369 .parent_hws = (const struct clk_hw *[]){
3370 &nss_ce_clk_src.clkr.hw },
3371 .num_parents = 1,
3372 .flags = CLK_SET_RATE_PARENT,
3373 .ops = &clk_branch2_ops,
3374 },
3375 },
3376 };
3377
3378 static struct clk_branch gcc_ubi1_axi_clk = {
3379 .halt_reg = 0x68220,
3380 .halt_check = BRANCH_HALT_DELAY,
3381 .clkr = {
3382 .enable_reg = 0x68220,
3383 .enable_mask = BIT(0),
3384 .hw.init = &(struct clk_init_data){
3385 .name = "gcc_ubi1_axi_clk",
3386 .parent_hws = (const struct clk_hw *[]){
3387 &nss_noc_clk_src.hw },
3388 .num_parents = 1,
3389 .flags = CLK_SET_RATE_PARENT,
3390 .ops = &clk_branch2_ops,
3391 },
3392 },
3393 };
3394
3395 static struct clk_branch gcc_ubi1_nc_axi_clk = {
3396 .halt_reg = 0x68224,
3397 .halt_check = BRANCH_HALT_DELAY,
3398 .clkr = {
3399 .enable_reg = 0x68224,
3400 .enable_mask = BIT(0),
3401 .hw.init = &(struct clk_init_data){
3402 .name = "gcc_ubi1_nc_axi_clk",
3403 .parent_hws = (const struct clk_hw *[]){
3404 &nss_noc_clk_src.hw },
3405 .num_parents = 1,
3406 .flags = CLK_SET_RATE_PARENT,
3407 .ops = &clk_branch2_ops,
3408 },
3409 },
3410 };
3411
3412 static struct clk_branch gcc_ubi1_core_clk = {
3413 .halt_reg = 0x68230,
3414 .halt_check = BRANCH_HALT_DELAY,
3415 .clkr = {
3416 .enable_reg = 0x68230,
3417 .enable_mask = BIT(0),
3418 .hw.init = &(struct clk_init_data){
3419 .name = "gcc_ubi1_core_clk",
3420 .parent_hws = (const struct clk_hw *[]){
3421 &nss_ubi1_div_clk_src.clkr.hw },
3422 .num_parents = 1,
3423 .flags = CLK_SET_RATE_PARENT,
3424 .ops = &clk_branch2_ops,
3425 },
3426 },
3427 };
3428
3429 static struct clk_branch gcc_ubi1_mpt_clk = {
3430 .halt_reg = 0x68228,
3431 .halt_check = BRANCH_HALT_DELAY,
3432 .clkr = {
3433 .enable_reg = 0x68228,
3434 .enable_mask = BIT(0),
3435 .hw.init = &(struct clk_init_data){
3436 .name = "gcc_ubi1_mpt_clk",
3437 .parent_hws = (const struct clk_hw *[]){
3438 &ubi_mpt_clk_src.clkr.hw },
3439 .num_parents = 1,
3440 .flags = CLK_SET_RATE_PARENT,
3441 .ops = &clk_branch2_ops,
3442 },
3443 },
3444 };
3445
3446 static struct clk_branch gcc_cmn_12gpll_ahb_clk = {
3447 .halt_reg = 0x56308,
3448 .clkr = {
3449 .enable_reg = 0x56308,
3450 .enable_mask = BIT(0),
3451 .hw.init = &(struct clk_init_data){
3452 .name = "gcc_cmn_12gpll_ahb_clk",
3453 .parent_hws = (const struct clk_hw *[]){
3454 &pcnoc_clk_src.hw },
3455 .num_parents = 1,
3456 .flags = CLK_SET_RATE_PARENT,
3457 .ops = &clk_branch2_ops,
3458 },
3459 },
3460 };
3461
3462 static struct clk_branch gcc_cmn_12gpll_sys_clk = {
3463 .halt_reg = 0x5630c,
3464 .clkr = {
3465 .enable_reg = 0x5630c,
3466 .enable_mask = BIT(0),
3467 .hw.init = &(struct clk_init_data){
3468 .name = "gcc_cmn_12gpll_sys_clk",
3469 .parent_hws = (const struct clk_hw *[]){
3470 &gcc_xo_clk_src.clkr.hw },
3471 .num_parents = 1,
3472 .flags = CLK_SET_RATE_PARENT,
3473 .ops = &clk_branch2_ops,
3474 },
3475 },
3476 };
3477
3478 static struct clk_branch gcc_mdio_ahb_clk = {
3479 .halt_reg = 0x58004,
3480 .clkr = {
3481 .enable_reg = 0x58004,
3482 .enable_mask = BIT(0),
3483 .hw.init = &(struct clk_init_data){
3484 .name = "gcc_mdio_ahb_clk",
3485 .parent_hws = (const struct clk_hw *[]){
3486 &pcnoc_clk_src.hw },
3487 .num_parents = 1,
3488 .flags = CLK_SET_RATE_PARENT,
3489 .ops = &clk_branch2_ops,
3490 },
3491 },
3492 };
3493
3494 static struct clk_branch gcc_uniphy0_ahb_clk = {
3495 .halt_reg = 0x56008,
3496 .clkr = {
3497 .enable_reg = 0x56008,
3498 .enable_mask = BIT(0),
3499 .hw.init = &(struct clk_init_data){
3500 .name = "gcc_uniphy0_ahb_clk",
3501 .parent_hws = (const struct clk_hw *[]){
3502 &pcnoc_clk_src.hw },
3503 .num_parents = 1,
3504 .flags = CLK_SET_RATE_PARENT,
3505 .ops = &clk_branch2_ops,
3506 },
3507 },
3508 };
3509
3510 static struct clk_branch gcc_uniphy0_sys_clk = {
3511 .halt_reg = 0x5600c,
3512 .clkr = {
3513 .enable_reg = 0x5600c,
3514 .enable_mask = BIT(0),
3515 .hw.init = &(struct clk_init_data){
3516 .name = "gcc_uniphy0_sys_clk",
3517 .parent_hws = (const struct clk_hw *[]){
3518 &gcc_xo_clk_src.clkr.hw },
3519 .num_parents = 1,
3520 .flags = CLK_SET_RATE_PARENT,
3521 .ops = &clk_branch2_ops,
3522 },
3523 },
3524 };
3525
3526 static struct clk_branch gcc_uniphy1_ahb_clk = {
3527 .halt_reg = 0x56108,
3528 .clkr = {
3529 .enable_reg = 0x56108,
3530 .enable_mask = BIT(0),
3531 .hw.init = &(struct clk_init_data){
3532 .name = "gcc_uniphy1_ahb_clk",
3533 .parent_hws = (const struct clk_hw *[]){
3534 &pcnoc_clk_src.hw },
3535 .num_parents = 1,
3536 .flags = CLK_SET_RATE_PARENT,
3537 .ops = &clk_branch2_ops,
3538 },
3539 },
3540 };
3541
3542 static struct clk_branch gcc_uniphy1_sys_clk = {
3543 .halt_reg = 0x5610c,
3544 .clkr = {
3545 .enable_reg = 0x5610c,
3546 .enable_mask = BIT(0),
3547 .hw.init = &(struct clk_init_data){
3548 .name = "gcc_uniphy1_sys_clk",
3549 .parent_hws = (const struct clk_hw *[]){
3550 &gcc_xo_clk_src.clkr.hw },
3551 .num_parents = 1,
3552 .flags = CLK_SET_RATE_PARENT,
3553 .ops = &clk_branch2_ops,
3554 },
3555 },
3556 };
3557
3558 static struct clk_branch gcc_uniphy2_ahb_clk = {
3559 .halt_reg = 0x56208,
3560 .clkr = {
3561 .enable_reg = 0x56208,
3562 .enable_mask = BIT(0),
3563 .hw.init = &(struct clk_init_data){
3564 .name = "gcc_uniphy2_ahb_clk",
3565 .parent_hws = (const struct clk_hw *[]){
3566 &pcnoc_clk_src.hw },
3567 .num_parents = 1,
3568 .flags = CLK_SET_RATE_PARENT,
3569 .ops = &clk_branch2_ops,
3570 },
3571 },
3572 };
3573
3574 static struct clk_branch gcc_uniphy2_sys_clk = {
3575 .halt_reg = 0x5620c,
3576 .clkr = {
3577 .enable_reg = 0x5620c,
3578 .enable_mask = BIT(0),
3579 .hw.init = &(struct clk_init_data){
3580 .name = "gcc_uniphy2_sys_clk",
3581 .parent_hws = (const struct clk_hw *[]){
3582 &gcc_xo_clk_src.clkr.hw },
3583 .num_parents = 1,
3584 .flags = CLK_SET_RATE_PARENT,
3585 .ops = &clk_branch2_ops,
3586 },
3587 },
3588 };
3589
3590 static struct clk_branch gcc_nss_port1_rx_clk = {
3591 .halt_reg = 0x68240,
3592 .clkr = {
3593 .enable_reg = 0x68240,
3594 .enable_mask = BIT(0),
3595 .hw.init = &(struct clk_init_data){
3596 .name = "gcc_nss_port1_rx_clk",
3597 .parent_hws = (const struct clk_hw *[]){
3598 &nss_port1_rx_div_clk_src.clkr.hw },
3599 .num_parents = 1,
3600 .flags = CLK_SET_RATE_PARENT,
3601 .ops = &clk_branch2_ops,
3602 },
3603 },
3604 };
3605
3606 static struct clk_branch gcc_nss_port1_tx_clk = {
3607 .halt_reg = 0x68244,
3608 .clkr = {
3609 .enable_reg = 0x68244,
3610 .enable_mask = BIT(0),
3611 .hw.init = &(struct clk_init_data){
3612 .name = "gcc_nss_port1_tx_clk",
3613 .parent_hws = (const struct clk_hw *[]){
3614 &nss_port1_tx_div_clk_src.clkr.hw },
3615 .num_parents = 1,
3616 .flags = CLK_SET_RATE_PARENT,
3617 .ops = &clk_branch2_ops,
3618 },
3619 },
3620 };
3621
3622 static struct clk_branch gcc_nss_port2_rx_clk = {
3623 .halt_reg = 0x68248,
3624 .clkr = {
3625 .enable_reg = 0x68248,
3626 .enable_mask = BIT(0),
3627 .hw.init = &(struct clk_init_data){
3628 .name = "gcc_nss_port2_rx_clk",
3629 .parent_hws = (const struct clk_hw *[]){
3630 &nss_port2_rx_div_clk_src.clkr.hw },
3631 .num_parents = 1,
3632 .flags = CLK_SET_RATE_PARENT,
3633 .ops = &clk_branch2_ops,
3634 },
3635 },
3636 };
3637
3638 static struct clk_branch gcc_nss_port2_tx_clk = {
3639 .halt_reg = 0x6824c,
3640 .clkr = {
3641 .enable_reg = 0x6824c,
3642 .enable_mask = BIT(0),
3643 .hw.init = &(struct clk_init_data){
3644 .name = "gcc_nss_port2_tx_clk",
3645 .parent_hws = (const struct clk_hw *[]){
3646 &nss_port2_tx_div_clk_src.clkr.hw },
3647 .num_parents = 1,
3648 .flags = CLK_SET_RATE_PARENT,
3649 .ops = &clk_branch2_ops,
3650 },
3651 },
3652 };
3653
3654 static struct clk_branch gcc_nss_port3_rx_clk = {
3655 .halt_reg = 0x68250,
3656 .clkr = {
3657 .enable_reg = 0x68250,
3658 .enable_mask = BIT(0),
3659 .hw.init = &(struct clk_init_data){
3660 .name = "gcc_nss_port3_rx_clk",
3661 .parent_hws = (const struct clk_hw *[]){
3662 &nss_port3_rx_div_clk_src.clkr.hw },
3663 .num_parents = 1,
3664 .flags = CLK_SET_RATE_PARENT,
3665 .ops = &clk_branch2_ops,
3666 },
3667 },
3668 };
3669
3670 static struct clk_branch gcc_nss_port3_tx_clk = {
3671 .halt_reg = 0x68254,
3672 .clkr = {
3673 .enable_reg = 0x68254,
3674 .enable_mask = BIT(0),
3675 .hw.init = &(struct clk_init_data){
3676 .name = "gcc_nss_port3_tx_clk",
3677 .parent_hws = (const struct clk_hw *[]){
3678 &nss_port3_tx_div_clk_src.clkr.hw },
3679 .num_parents = 1,
3680 .flags = CLK_SET_RATE_PARENT,
3681 .ops = &clk_branch2_ops,
3682 },
3683 },
3684 };
3685
3686 static struct clk_branch gcc_nss_port4_rx_clk = {
3687 .halt_reg = 0x68258,
3688 .clkr = {
3689 .enable_reg = 0x68258,
3690 .enable_mask = BIT(0),
3691 .hw.init = &(struct clk_init_data){
3692 .name = "gcc_nss_port4_rx_clk",
3693 .parent_hws = (const struct clk_hw *[]){
3694 &nss_port4_rx_div_clk_src.clkr.hw },
3695 .num_parents = 1,
3696 .flags = CLK_SET_RATE_PARENT,
3697 .ops = &clk_branch2_ops,
3698 },
3699 },
3700 };
3701
3702 static struct clk_branch gcc_nss_port4_tx_clk = {
3703 .halt_reg = 0x6825c,
3704 .clkr = {
3705 .enable_reg = 0x6825c,
3706 .enable_mask = BIT(0),
3707 .hw.init = &(struct clk_init_data){
3708 .name = "gcc_nss_port4_tx_clk",
3709 .parent_hws = (const struct clk_hw *[]){
3710 &nss_port4_tx_div_clk_src.clkr.hw },
3711 .num_parents = 1,
3712 .flags = CLK_SET_RATE_PARENT,
3713 .ops = &clk_branch2_ops,
3714 },
3715 },
3716 };
3717
3718 static struct clk_branch gcc_nss_port5_rx_clk = {
3719 .halt_reg = 0x68260,
3720 .clkr = {
3721 .enable_reg = 0x68260,
3722 .enable_mask = BIT(0),
3723 .hw.init = &(struct clk_init_data){
3724 .name = "gcc_nss_port5_rx_clk",
3725 .parent_hws = (const struct clk_hw *[]){
3726 &nss_port5_rx_div_clk_src.clkr.hw },
3727 .num_parents = 1,
3728 .flags = CLK_SET_RATE_PARENT,
3729 .ops = &clk_branch2_ops,
3730 },
3731 },
3732 };
3733
3734 static struct clk_branch gcc_nss_port5_tx_clk = {
3735 .halt_reg = 0x68264,
3736 .clkr = {
3737 .enable_reg = 0x68264,
3738 .enable_mask = BIT(0),
3739 .hw.init = &(struct clk_init_data){
3740 .name = "gcc_nss_port5_tx_clk",
3741 .parent_hws = (const struct clk_hw *[]){
3742 &nss_port5_tx_div_clk_src.clkr.hw },
3743 .num_parents = 1,
3744 .flags = CLK_SET_RATE_PARENT,
3745 .ops = &clk_branch2_ops,
3746 },
3747 },
3748 };
3749
3750 static struct clk_branch gcc_nss_port6_rx_clk = {
3751 .halt_reg = 0x68268,
3752 .clkr = {
3753 .enable_reg = 0x68268,
3754 .enable_mask = BIT(0),
3755 .hw.init = &(struct clk_init_data){
3756 .name = "gcc_nss_port6_rx_clk",
3757 .parent_hws = (const struct clk_hw *[]){
3758 &nss_port6_rx_div_clk_src.clkr.hw },
3759 .num_parents = 1,
3760 .flags = CLK_SET_RATE_PARENT,
3761 .ops = &clk_branch2_ops,
3762 },
3763 },
3764 };
3765
3766 static struct clk_branch gcc_nss_port6_tx_clk = {
3767 .halt_reg = 0x6826c,
3768 .clkr = {
3769 .enable_reg = 0x6826c,
3770 .enable_mask = BIT(0),
3771 .hw.init = &(struct clk_init_data){
3772 .name = "gcc_nss_port6_tx_clk",
3773 .parent_hws = (const struct clk_hw *[]){
3774 &nss_port6_tx_div_clk_src.clkr.hw },
3775 .num_parents = 1,
3776 .flags = CLK_SET_RATE_PARENT,
3777 .ops = &clk_branch2_ops,
3778 },
3779 },
3780 };
3781
3782 static struct clk_branch gcc_port1_mac_clk = {
3783 .halt_reg = 0x68320,
3784 .clkr = {
3785 .enable_reg = 0x68320,
3786 .enable_mask = BIT(0),
3787 .hw.init = &(struct clk_init_data){
3788 .name = "gcc_port1_mac_clk",
3789 .parent_hws = (const struct clk_hw *[]){
3790 &nss_ppe_clk_src.clkr.hw },
3791 .num_parents = 1,
3792 .flags = CLK_SET_RATE_PARENT,
3793 .ops = &clk_branch2_ops,
3794 },
3795 },
3796 };
3797
3798 static struct clk_branch gcc_port2_mac_clk = {
3799 .halt_reg = 0x68324,
3800 .clkr = {
3801 .enable_reg = 0x68324,
3802 .enable_mask = BIT(0),
3803 .hw.init = &(struct clk_init_data){
3804 .name = "gcc_port2_mac_clk",
3805 .parent_hws = (const struct clk_hw *[]){
3806 &nss_ppe_clk_src.clkr.hw },
3807 .num_parents = 1,
3808 .flags = CLK_SET_RATE_PARENT,
3809 .ops = &clk_branch2_ops,
3810 },
3811 },
3812 };
3813
3814 static struct clk_branch gcc_port3_mac_clk = {
3815 .halt_reg = 0x68328,
3816 .clkr = {
3817 .enable_reg = 0x68328,
3818 .enable_mask = BIT(0),
3819 .hw.init = &(struct clk_init_data){
3820 .name = "gcc_port3_mac_clk",
3821 .parent_hws = (const struct clk_hw *[]){
3822 &nss_ppe_clk_src.clkr.hw },
3823 .num_parents = 1,
3824 .flags = CLK_SET_RATE_PARENT,
3825 .ops = &clk_branch2_ops,
3826 },
3827 },
3828 };
3829
3830 static struct clk_branch gcc_port4_mac_clk = {
3831 .halt_reg = 0x6832c,
3832 .clkr = {
3833 .enable_reg = 0x6832c,
3834 .enable_mask = BIT(0),
3835 .hw.init = &(struct clk_init_data){
3836 .name = "gcc_port4_mac_clk",
3837 .parent_hws = (const struct clk_hw *[]){
3838 &nss_ppe_clk_src.clkr.hw },
3839 .num_parents = 1,
3840 .flags = CLK_SET_RATE_PARENT,
3841 .ops = &clk_branch2_ops,
3842 },
3843 },
3844 };
3845
3846 static struct clk_branch gcc_port5_mac_clk = {
3847 .halt_reg = 0x68330,
3848 .clkr = {
3849 .enable_reg = 0x68330,
3850 .enable_mask = BIT(0),
3851 .hw.init = &(struct clk_init_data){
3852 .name = "gcc_port5_mac_clk",
3853 .parent_hws = (const struct clk_hw *[]){
3854 &nss_ppe_clk_src.clkr.hw },
3855 .num_parents = 1,
3856 .flags = CLK_SET_RATE_PARENT,
3857 .ops = &clk_branch2_ops,
3858 },
3859 },
3860 };
3861
3862 static struct clk_branch gcc_port6_mac_clk = {
3863 .halt_reg = 0x68334,
3864 .clkr = {
3865 .enable_reg = 0x68334,
3866 .enable_mask = BIT(0),
3867 .hw.init = &(struct clk_init_data){
3868 .name = "gcc_port6_mac_clk",
3869 .parent_hws = (const struct clk_hw *[]){
3870 &nss_ppe_clk_src.clkr.hw },
3871 .num_parents = 1,
3872 .flags = CLK_SET_RATE_PARENT,
3873 .ops = &clk_branch2_ops,
3874 },
3875 },
3876 };
3877
3878 static struct clk_branch gcc_uniphy0_port1_rx_clk = {
3879 .halt_reg = 0x56010,
3880 .clkr = {
3881 .enable_reg = 0x56010,
3882 .enable_mask = BIT(0),
3883 .hw.init = &(struct clk_init_data){
3884 .name = "gcc_uniphy0_port1_rx_clk",
3885 .parent_hws = (const struct clk_hw *[]){
3886 &nss_port1_rx_div_clk_src.clkr.hw },
3887 .num_parents = 1,
3888 .flags = CLK_SET_RATE_PARENT,
3889 .ops = &clk_branch2_ops,
3890 },
3891 },
3892 };
3893
3894 static struct clk_branch gcc_uniphy0_port1_tx_clk = {
3895 .halt_reg = 0x56014,
3896 .clkr = {
3897 .enable_reg = 0x56014,
3898 .enable_mask = BIT(0),
3899 .hw.init = &(struct clk_init_data){
3900 .name = "gcc_uniphy0_port1_tx_clk",
3901 .parent_hws = (const struct clk_hw *[]){
3902 &nss_port1_tx_div_clk_src.clkr.hw },
3903 .num_parents = 1,
3904 .flags = CLK_SET_RATE_PARENT,
3905 .ops = &clk_branch2_ops,
3906 },
3907 },
3908 };
3909
3910 static struct clk_branch gcc_uniphy0_port2_rx_clk = {
3911 .halt_reg = 0x56018,
3912 .clkr = {
3913 .enable_reg = 0x56018,
3914 .enable_mask = BIT(0),
3915 .hw.init = &(struct clk_init_data){
3916 .name = "gcc_uniphy0_port2_rx_clk",
3917 .parent_hws = (const struct clk_hw *[]){
3918 &nss_port2_rx_div_clk_src.clkr.hw },
3919 .num_parents = 1,
3920 .flags = CLK_SET_RATE_PARENT,
3921 .ops = &clk_branch2_ops,
3922 },
3923 },
3924 };
3925
3926 static struct clk_branch gcc_uniphy0_port2_tx_clk = {
3927 .halt_reg = 0x5601c,
3928 .clkr = {
3929 .enable_reg = 0x5601c,
3930 .enable_mask = BIT(0),
3931 .hw.init = &(struct clk_init_data){
3932 .name = "gcc_uniphy0_port2_tx_clk",
3933 .parent_hws = (const struct clk_hw *[]){
3934 &nss_port2_tx_div_clk_src.clkr.hw },
3935 .num_parents = 1,
3936 .flags = CLK_SET_RATE_PARENT,
3937 .ops = &clk_branch2_ops,
3938 },
3939 },
3940 };
3941
3942 static struct clk_branch gcc_uniphy0_port3_rx_clk = {
3943 .halt_reg = 0x56020,
3944 .clkr = {
3945 .enable_reg = 0x56020,
3946 .enable_mask = BIT(0),
3947 .hw.init = &(struct clk_init_data){
3948 .name = "gcc_uniphy0_port3_rx_clk",
3949 .parent_hws = (const struct clk_hw *[]){
3950 &nss_port3_rx_div_clk_src.clkr.hw },
3951 .num_parents = 1,
3952 .flags = CLK_SET_RATE_PARENT,
3953 .ops = &clk_branch2_ops,
3954 },
3955 },
3956 };
3957
3958 static struct clk_branch gcc_uniphy0_port3_tx_clk = {
3959 .halt_reg = 0x56024,
3960 .clkr = {
3961 .enable_reg = 0x56024,
3962 .enable_mask = BIT(0),
3963 .hw.init = &(struct clk_init_data){
3964 .name = "gcc_uniphy0_port3_tx_clk",
3965 .parent_hws = (const struct clk_hw *[]){
3966 &nss_port3_tx_div_clk_src.clkr.hw },
3967 .num_parents = 1,
3968 .flags = CLK_SET_RATE_PARENT,
3969 .ops = &clk_branch2_ops,
3970 },
3971 },
3972 };
3973
3974 static struct clk_branch gcc_uniphy0_port4_rx_clk = {
3975 .halt_reg = 0x56028,
3976 .clkr = {
3977 .enable_reg = 0x56028,
3978 .enable_mask = BIT(0),
3979 .hw.init = &(struct clk_init_data){
3980 .name = "gcc_uniphy0_port4_rx_clk",
3981 .parent_hws = (const struct clk_hw *[]){
3982 &nss_port4_rx_div_clk_src.clkr.hw },
3983 .num_parents = 1,
3984 .flags = CLK_SET_RATE_PARENT,
3985 .ops = &clk_branch2_ops,
3986 },
3987 },
3988 };
3989
3990 static struct clk_branch gcc_uniphy0_port4_tx_clk = {
3991 .halt_reg = 0x5602c,
3992 .clkr = {
3993 .enable_reg = 0x5602c,
3994 .enable_mask = BIT(0),
3995 .hw.init = &(struct clk_init_data){
3996 .name = "gcc_uniphy0_port4_tx_clk",
3997 .parent_hws = (const struct clk_hw *[]){
3998 &nss_port4_tx_div_clk_src.clkr.hw },
3999 .num_parents = 1,
4000 .flags = CLK_SET_RATE_PARENT,
4001 .ops = &clk_branch2_ops,
4002 },
4003 },
4004 };
4005
4006 static struct clk_branch gcc_uniphy0_port5_rx_clk = {
4007 .halt_reg = 0x56030,
4008 .clkr = {
4009 .enable_reg = 0x56030,
4010 .enable_mask = BIT(0),
4011 .hw.init = &(struct clk_init_data){
4012 .name = "gcc_uniphy0_port5_rx_clk",
4013 .parent_hws = (const struct clk_hw *[]){
4014 &nss_port5_rx_div_clk_src.clkr.hw },
4015 .num_parents = 1,
4016 .flags = CLK_SET_RATE_PARENT,
4017 .ops = &clk_branch2_ops,
4018 },
4019 },
4020 };
4021
4022 static struct clk_branch gcc_uniphy0_port5_tx_clk = {
4023 .halt_reg = 0x56034,
4024 .clkr = {
4025 .enable_reg = 0x56034,
4026 .enable_mask = BIT(0),
4027 .hw.init = &(struct clk_init_data){
4028 .name = "gcc_uniphy0_port5_tx_clk",
4029 .parent_hws = (const struct clk_hw *[]){
4030 &nss_port5_tx_div_clk_src.clkr.hw },
4031 .num_parents = 1,
4032 .flags = CLK_SET_RATE_PARENT,
4033 .ops = &clk_branch2_ops,
4034 },
4035 },
4036 };
4037
4038 static struct clk_branch gcc_uniphy1_port5_rx_clk = {
4039 .halt_reg = 0x56110,
4040 .clkr = {
4041 .enable_reg = 0x56110,
4042 .enable_mask = BIT(0),
4043 .hw.init = &(struct clk_init_data){
4044 .name = "gcc_uniphy1_port5_rx_clk",
4045 .parent_hws = (const struct clk_hw *[]){
4046 &nss_port5_rx_div_clk_src.clkr.hw },
4047 .num_parents = 1,
4048 .flags = CLK_SET_RATE_PARENT,
4049 .ops = &clk_branch2_ops,
4050 },
4051 },
4052 };
4053
4054 static struct clk_branch gcc_uniphy1_port5_tx_clk = {
4055 .halt_reg = 0x56114,
4056 .clkr = {
4057 .enable_reg = 0x56114,
4058 .enable_mask = BIT(0),
4059 .hw.init = &(struct clk_init_data){
4060 .name = "gcc_uniphy1_port5_tx_clk",
4061 .parent_hws = (const struct clk_hw *[]){
4062 &nss_port5_tx_div_clk_src.clkr.hw },
4063 .num_parents = 1,
4064 .flags = CLK_SET_RATE_PARENT,
4065 .ops = &clk_branch2_ops,
4066 },
4067 },
4068 };
4069
4070 static struct clk_branch gcc_uniphy2_port6_rx_clk = {
4071 .halt_reg = 0x56210,
4072 .clkr = {
4073 .enable_reg = 0x56210,
4074 .enable_mask = BIT(0),
4075 .hw.init = &(struct clk_init_data){
4076 .name = "gcc_uniphy2_port6_rx_clk",
4077 .parent_hws = (const struct clk_hw *[]){
4078 &nss_port6_rx_div_clk_src.clkr.hw },
4079 .num_parents = 1,
4080 .flags = CLK_SET_RATE_PARENT,
4081 .ops = &clk_branch2_ops,
4082 },
4083 },
4084 };
4085
4086 static struct clk_branch gcc_uniphy2_port6_tx_clk = {
4087 .halt_reg = 0x56214,
4088 .clkr = {
4089 .enable_reg = 0x56214,
4090 .enable_mask = BIT(0),
4091 .hw.init = &(struct clk_init_data){
4092 .name = "gcc_uniphy2_port6_tx_clk",
4093 .parent_hws = (const struct clk_hw *[]){
4094 &nss_port6_tx_div_clk_src.clkr.hw },
4095 .num_parents = 1,
4096 .flags = CLK_SET_RATE_PARENT,
4097 .ops = &clk_branch2_ops,
4098 },
4099 },
4100 };
4101
4102 static struct clk_branch gcc_crypto_ahb_clk = {
4103 .halt_reg = 0x16024,
4104 .halt_check = BRANCH_HALT_VOTED,
4105 .clkr = {
4106 .enable_reg = 0x0b004,
4107 .enable_mask = BIT(0),
4108 .hw.init = &(struct clk_init_data){
4109 .name = "gcc_crypto_ahb_clk",
4110 .parent_hws = (const struct clk_hw *[]){
4111 &pcnoc_clk_src.hw },
4112 .num_parents = 1,
4113 .flags = CLK_SET_RATE_PARENT,
4114 .ops = &clk_branch2_ops,
4115 },
4116 },
4117 };
4118
4119 static struct clk_branch gcc_crypto_axi_clk = {
4120 .halt_reg = 0x16020,
4121 .halt_check = BRANCH_HALT_VOTED,
4122 .clkr = {
4123 .enable_reg = 0x0b004,
4124 .enable_mask = BIT(1),
4125 .hw.init = &(struct clk_init_data){
4126 .name = "gcc_crypto_axi_clk",
4127 .parent_hws = (const struct clk_hw *[]){
4128 &pcnoc_clk_src.hw },
4129 .num_parents = 1,
4130 .flags = CLK_SET_RATE_PARENT,
4131 .ops = &clk_branch2_ops,
4132 },
4133 },
4134 };
4135
4136 static struct clk_branch gcc_crypto_clk = {
4137 .halt_reg = 0x1601c,
4138 .halt_check = BRANCH_HALT_VOTED,
4139 .clkr = {
4140 .enable_reg = 0x0b004,
4141 .enable_mask = BIT(2),
4142 .hw.init = &(struct clk_init_data){
4143 .name = "gcc_crypto_clk",
4144 .parent_hws = (const struct clk_hw *[]){
4145 &crypto_clk_src.clkr.hw },
4146 .num_parents = 1,
4147 .flags = CLK_SET_RATE_PARENT,
4148 .ops = &clk_branch2_ops,
4149 },
4150 },
4151 };
4152
4153 static struct clk_branch gcc_gp1_clk = {
4154 .halt_reg = 0x08000,
4155 .clkr = {
4156 .enable_reg = 0x08000,
4157 .enable_mask = BIT(0),
4158 .hw.init = &(struct clk_init_data){
4159 .name = "gcc_gp1_clk",
4160 .parent_hws = (const struct clk_hw *[]){
4161 &gp1_clk_src.clkr.hw },
4162 .num_parents = 1,
4163 .flags = CLK_SET_RATE_PARENT,
4164 .ops = &clk_branch2_ops,
4165 },
4166 },
4167 };
4168
4169 static struct clk_branch gcc_gp2_clk = {
4170 .halt_reg = 0x09000,
4171 .clkr = {
4172 .enable_reg = 0x09000,
4173 .enable_mask = BIT(0),
4174 .hw.init = &(struct clk_init_data){
4175 .name = "gcc_gp2_clk",
4176 .parent_hws = (const struct clk_hw *[]){
4177 &gp2_clk_src.clkr.hw },
4178 .num_parents = 1,
4179 .flags = CLK_SET_RATE_PARENT,
4180 .ops = &clk_branch2_ops,
4181 },
4182 },
4183 };
4184
4185 static struct clk_branch gcc_gp3_clk = {
4186 .halt_reg = 0x0a000,
4187 .clkr = {
4188 .enable_reg = 0x0a000,
4189 .enable_mask = BIT(0),
4190 .hw.init = &(struct clk_init_data){
4191 .name = "gcc_gp3_clk",
4192 .parent_hws = (const struct clk_hw *[]){
4193 &gp3_clk_src.clkr.hw },
4194 .num_parents = 1,
4195 .flags = CLK_SET_RATE_PARENT,
4196 .ops = &clk_branch2_ops,
4197 },
4198 },
4199 };
4200
4201 static const struct freq_tbl ftbl_pcie_rchng_clk_src[] = {
4202 F(19200000, P_XO, 1, 0, 0),
4203 F(100000000, P_GPLL0, 8, 0, 0),
4204 { }
4205 };
4206
4207 static struct clk_rcg2 pcie0_rchng_clk_src = {
4208 .cmd_rcgr = 0x75070,
4209 .freq_tbl = ftbl_pcie_rchng_clk_src,
4210 .hid_width = 5,
4211 .parent_map = gcc_xo_gpll0_map,
4212 .clkr.hw.init = &(struct clk_init_data){
4213 .name = "pcie0_rchng_clk_src",
4214 .parent_data = gcc_xo_gpll0,
4215 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
4216 .ops = &clk_rcg2_ops,
4217 },
4218 };
4219
4220 static struct clk_branch gcc_pcie0_rchng_clk = {
4221 .halt_reg = 0x75070,
4222 .halt_bit = 31,
4223 .clkr = {
4224 .enable_reg = 0x75070,
4225 .enable_mask = BIT(1),
4226 .hw.init = &(struct clk_init_data){
4227 .name = "gcc_pcie0_rchng_clk",
4228 .parent_hws = (const struct clk_hw *[]){
4229 &pcie0_rchng_clk_src.clkr.hw,
4230 },
4231 .num_parents = 1,
4232 .flags = CLK_SET_RATE_PARENT,
4233 .ops = &clk_branch2_ops,
4234 },
4235 },
4236 };
4237
4238 static struct clk_branch gcc_pcie0_axi_s_bridge_clk = {
4239 .halt_reg = 0x75048,
4240 .halt_bit = 31,
4241 .clkr = {
4242 .enable_reg = 0x75048,
4243 .enable_mask = BIT(0),
4244 .hw.init = &(struct clk_init_data){
4245 .name = "gcc_pcie0_axi_s_bridge_clk",
4246 .parent_hws = (const struct clk_hw *[]){
4247 &pcie0_axi_clk_src.clkr.hw,
4248 },
4249 .num_parents = 1,
4250 .flags = CLK_SET_RATE_PARENT,
4251 .ops = &clk_branch2_ops,
4252 },
4253 },
4254 };
4255
4256 static struct gdsc usb0_gdsc = {
4257 .gdscr = 0x3e078,
4258 .pd = {
4259 .name = "usb0_gdsc",
4260 },
4261 .pwrsts = PWRSTS_OFF_ON,
4262 };
4263
4264 static struct gdsc usb1_gdsc = {
4265 .gdscr = 0x3f078,
4266 .pd = {
4267 .name = "usb1_gdsc",
4268 },
4269 .pwrsts = PWRSTS_OFF_ON,
4270 };
4271
4272 static const struct alpha_pll_config ubi32_pll_config = {
4273 .l = 0x4e,
4274 .config_ctl_val = 0x200d4aa8,
4275 .config_ctl_hi_val = 0x3c2,
4276 .main_output_mask = BIT(0),
4277 .aux_output_mask = BIT(1),
4278 .pre_div_val = 0x0,
4279 .pre_div_mask = BIT(12),
4280 .post_div_val = 0x0,
4281 .post_div_mask = GENMASK(9, 8),
4282 };
4283
4284 static const struct alpha_pll_config nss_crypto_pll_config = {
4285 .l = 0x3e,
4286 .alpha = 0x0,
4287 .alpha_hi = 0x80,
4288 .config_ctl_val = 0x4001055b,
4289 .main_output_mask = BIT(0),
4290 .pre_div_val = 0x0,
4291 .pre_div_mask = GENMASK(14, 12),
4292 .post_div_val = 0x1 << 8,
4293 .post_div_mask = GENMASK(11, 8),
4294 .vco_mask = GENMASK(21, 20),
4295 .vco_val = 0x0,
4296 .alpha_en_mask = BIT(24),
4297 };
4298
4299 static struct clk_hw *gcc_ipq8074_hws[] = {
4300 &gpll0_out_main_div2.hw,
4301 &gpll6_out_main_div2.hw,
4302 &pcnoc_clk_src.hw,
4303 &system_noc_clk_src.hw,
4304 &gcc_xo_div4_clk_src.hw,
4305 &nss_noc_clk_src.hw,
4306 &nss_ppe_cdiv_clk_src.hw,
4307 };
4308
4309 static struct clk_regmap *gcc_ipq8074_clks[] = {
4310 [GPLL0_MAIN] = &gpll0_main.clkr,
4311 [GPLL0] = &gpll0.clkr,
4312 [GPLL2_MAIN] = &gpll2_main.clkr,
4313 [GPLL2] = &gpll2.clkr,
4314 [GPLL4_MAIN] = &gpll4_main.clkr,
4315 [GPLL4] = &gpll4.clkr,
4316 [GPLL6_MAIN] = &gpll6_main.clkr,
4317 [GPLL6] = &gpll6.clkr,
4318 [UBI32_PLL_MAIN] = &ubi32_pll_main.clkr,
4319 [UBI32_PLL] = &ubi32_pll.clkr,
4320 [NSS_CRYPTO_PLL_MAIN] = &nss_crypto_pll_main.clkr,
4321 [NSS_CRYPTO_PLL] = &nss_crypto_pll.clkr,
4322 [PCNOC_BFDCD_CLK_SRC] = &pcnoc_bfdcd_clk_src.clkr,
4323 [GCC_SLEEP_CLK_SRC] = &gcc_sleep_clk_src.clkr,
4324 [BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
4325 [BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
4326 [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
4327 [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
4328 [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
4329 [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
4330 [BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
4331 [BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
4332 [BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr,
4333 [BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr,
4334 [BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr,
4335 [BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr,
4336 [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
4337 [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
4338 [BLSP1_UART3_APPS_CLK_SRC] = &blsp1_uart3_apps_clk_src.clkr,
4339 [BLSP1_UART4_APPS_CLK_SRC] = &blsp1_uart4_apps_clk_src.clkr,
4340 [BLSP1_UART5_APPS_CLK_SRC] = &blsp1_uart5_apps_clk_src.clkr,
4341 [BLSP1_UART6_APPS_CLK_SRC] = &blsp1_uart6_apps_clk_src.clkr,
4342 [PCIE0_AXI_CLK_SRC] = &pcie0_axi_clk_src.clkr,
4343 [PCIE0_AUX_CLK_SRC] = &pcie0_aux_clk_src.clkr,
4344 [PCIE0_PIPE_CLK_SRC] = &pcie0_pipe_clk_src.clkr,
4345 [PCIE1_AXI_CLK_SRC] = &pcie1_axi_clk_src.clkr,
4346 [PCIE1_AUX_CLK_SRC] = &pcie1_aux_clk_src.clkr,
4347 [PCIE1_PIPE_CLK_SRC] = &pcie1_pipe_clk_src.clkr,
4348 [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
4349 [SDCC1_ICE_CORE_CLK_SRC] = &sdcc1_ice_core_clk_src.clkr,
4350 [SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
4351 [USB0_MASTER_CLK_SRC] = &usb0_master_clk_src.clkr,
4352 [USB0_AUX_CLK_SRC] = &usb0_aux_clk_src.clkr,
4353 [USB0_MOCK_UTMI_CLK_SRC] = &usb0_mock_utmi_clk_src.clkr,
4354 [USB0_PIPE_CLK_SRC] = &usb0_pipe_clk_src.clkr,
4355 [USB1_MASTER_CLK_SRC] = &usb1_master_clk_src.clkr,
4356 [USB1_AUX_CLK_SRC] = &usb1_aux_clk_src.clkr,
4357 [USB1_MOCK_UTMI_CLK_SRC] = &usb1_mock_utmi_clk_src.clkr,
4358 [USB1_PIPE_CLK_SRC] = &usb1_pipe_clk_src.clkr,
4359 [GCC_XO_CLK_SRC] = &gcc_xo_clk_src.clkr,
4360 [SYSTEM_NOC_BFDCD_CLK_SRC] = &system_noc_bfdcd_clk_src.clkr,
4361 [NSS_CE_CLK_SRC] = &nss_ce_clk_src.clkr,
4362 [NSS_NOC_BFDCD_CLK_SRC] = &nss_noc_bfdcd_clk_src.clkr,
4363 [NSS_CRYPTO_CLK_SRC] = &nss_crypto_clk_src.clkr,
4364 [NSS_UBI0_CLK_SRC] = &nss_ubi0_clk_src.clkr,
4365 [NSS_UBI0_DIV_CLK_SRC] = &nss_ubi0_div_clk_src.clkr,
4366 [NSS_UBI1_CLK_SRC] = &nss_ubi1_clk_src.clkr,
4367 [NSS_UBI1_DIV_CLK_SRC] = &nss_ubi1_div_clk_src.clkr,
4368 [UBI_MPT_CLK_SRC] = &ubi_mpt_clk_src.clkr,
4369 [NSS_IMEM_CLK_SRC] = &nss_imem_clk_src.clkr,
4370 [NSS_PPE_CLK_SRC] = &nss_ppe_clk_src.clkr,
4371 [NSS_PORT1_RX_CLK_SRC] = &nss_port1_rx_clk_src.clkr,
4372 [NSS_PORT1_RX_DIV_CLK_SRC] = &nss_port1_rx_div_clk_src.clkr,
4373 [NSS_PORT1_TX_CLK_SRC] = &nss_port1_tx_clk_src.clkr,
4374 [NSS_PORT1_TX_DIV_CLK_SRC] = &nss_port1_tx_div_clk_src.clkr,
4375 [NSS_PORT2_RX_CLK_SRC] = &nss_port2_rx_clk_src.clkr,
4376 [NSS_PORT2_RX_DIV_CLK_SRC] = &nss_port2_rx_div_clk_src.clkr,
4377 [NSS_PORT2_TX_CLK_SRC] = &nss_port2_tx_clk_src.clkr,
4378 [NSS_PORT2_TX_DIV_CLK_SRC] = &nss_port2_tx_div_clk_src.clkr,
4379 [NSS_PORT3_RX_CLK_SRC] = &nss_port3_rx_clk_src.clkr,
4380 [NSS_PORT3_RX_DIV_CLK_SRC] = &nss_port3_rx_div_clk_src.clkr,
4381 [NSS_PORT3_TX_CLK_SRC] = &nss_port3_tx_clk_src.clkr,
4382 [NSS_PORT3_TX_DIV_CLK_SRC] = &nss_port3_tx_div_clk_src.clkr,
4383 [NSS_PORT4_RX_CLK_SRC] = &nss_port4_rx_clk_src.clkr,
4384 [NSS_PORT4_RX_DIV_CLK_SRC] = &nss_port4_rx_div_clk_src.clkr,
4385 [NSS_PORT4_TX_CLK_SRC] = &nss_port4_tx_clk_src.clkr,
4386 [NSS_PORT4_TX_DIV_CLK_SRC] = &nss_port4_tx_div_clk_src.clkr,
4387 [NSS_PORT5_RX_CLK_SRC] = &nss_port5_rx_clk_src.clkr,
4388 [NSS_PORT5_RX_DIV_CLK_SRC] = &nss_port5_rx_div_clk_src.clkr,
4389 [NSS_PORT5_TX_CLK_SRC] = &nss_port5_tx_clk_src.clkr,
4390 [NSS_PORT5_TX_DIV_CLK_SRC] = &nss_port5_tx_div_clk_src.clkr,
4391 [NSS_PORT6_RX_CLK_SRC] = &nss_port6_rx_clk_src.clkr,
4392 [NSS_PORT6_RX_DIV_CLK_SRC] = &nss_port6_rx_div_clk_src.clkr,
4393 [NSS_PORT6_TX_CLK_SRC] = &nss_port6_tx_clk_src.clkr,
4394 [NSS_PORT6_TX_DIV_CLK_SRC] = &nss_port6_tx_div_clk_src.clkr,
4395 [CRYPTO_CLK_SRC] = &crypto_clk_src.clkr,
4396 [GP1_CLK_SRC] = &gp1_clk_src.clkr,
4397 [GP2_CLK_SRC] = &gp2_clk_src.clkr,
4398 [GP3_CLK_SRC] = &gp3_clk_src.clkr,
4399 [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
4400 [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
4401 [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
4402 [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
4403 [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
4404 [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
4405 [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
4406 [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
4407 [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
4408 [GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr,
4409 [GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr,
4410 [GCC_BLSP1_QUP6_I2C_APPS_CLK] = &gcc_blsp1_qup6_i2c_apps_clk.clkr,
4411 [GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr,
4412 [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
4413 [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
4414 [GCC_BLSP1_UART3_APPS_CLK] = &gcc_blsp1_uart3_apps_clk.clkr,
4415 [GCC_BLSP1_UART4_APPS_CLK] = &gcc_blsp1_uart4_apps_clk.clkr,
4416 [GCC_BLSP1_UART5_APPS_CLK] = &gcc_blsp1_uart5_apps_clk.clkr,
4417 [GCC_BLSP1_UART6_APPS_CLK] = &gcc_blsp1_uart6_apps_clk.clkr,
4418 [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
4419 [GCC_QPIC_AHB_CLK] = &gcc_qpic_ahb_clk.clkr,
4420 [GCC_QPIC_CLK] = &gcc_qpic_clk.clkr,
4421 [GCC_PCIE0_AHB_CLK] = &gcc_pcie0_ahb_clk.clkr,
4422 [GCC_PCIE0_AUX_CLK] = &gcc_pcie0_aux_clk.clkr,
4423 [GCC_PCIE0_AXI_M_CLK] = &gcc_pcie0_axi_m_clk.clkr,
4424 [GCC_PCIE0_AXI_S_CLK] = &gcc_pcie0_axi_s_clk.clkr,
4425 [GCC_PCIE0_PIPE_CLK] = &gcc_pcie0_pipe_clk.clkr,
4426 [GCC_SYS_NOC_PCIE0_AXI_CLK] = &gcc_sys_noc_pcie0_axi_clk.clkr,
4427 [GCC_PCIE1_AHB_CLK] = &gcc_pcie1_ahb_clk.clkr,
4428 [GCC_PCIE1_AUX_CLK] = &gcc_pcie1_aux_clk.clkr,
4429 [GCC_PCIE1_AXI_M_CLK] = &gcc_pcie1_axi_m_clk.clkr,
4430 [GCC_PCIE1_AXI_S_CLK] = &gcc_pcie1_axi_s_clk.clkr,
4431 [GCC_PCIE1_PIPE_CLK] = &gcc_pcie1_pipe_clk.clkr,
4432 [GCC_SYS_NOC_PCIE1_AXI_CLK] = &gcc_sys_noc_pcie1_axi_clk.clkr,
4433 [GCC_USB0_AUX_CLK] = &gcc_usb0_aux_clk.clkr,
4434 [GCC_SYS_NOC_USB0_AXI_CLK] = &gcc_sys_noc_usb0_axi_clk.clkr,
4435 [GCC_USB0_MASTER_CLK] = &gcc_usb0_master_clk.clkr,
4436 [GCC_USB0_MOCK_UTMI_CLK] = &gcc_usb0_mock_utmi_clk.clkr,
4437 [GCC_USB0_PHY_CFG_AHB_CLK] = &gcc_usb0_phy_cfg_ahb_clk.clkr,
4438 [GCC_USB0_PIPE_CLK] = &gcc_usb0_pipe_clk.clkr,
4439 [GCC_USB0_SLEEP_CLK] = &gcc_usb0_sleep_clk.clkr,
4440 [GCC_USB1_AUX_CLK] = &gcc_usb1_aux_clk.clkr,
4441 [GCC_SYS_NOC_USB1_AXI_CLK] = &gcc_sys_noc_usb1_axi_clk.clkr,
4442 [GCC_USB1_MASTER_CLK] = &gcc_usb1_master_clk.clkr,
4443 [GCC_USB1_MOCK_UTMI_CLK] = &gcc_usb1_mock_utmi_clk.clkr,
4444 [GCC_USB1_PHY_CFG_AHB_CLK] = &gcc_usb1_phy_cfg_ahb_clk.clkr,
4445 [GCC_USB1_PIPE_CLK] = &gcc_usb1_pipe_clk.clkr,
4446 [GCC_USB1_SLEEP_CLK] = &gcc_usb1_sleep_clk.clkr,
4447 [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
4448 [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
4449 [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
4450 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
4451 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
4452 [GCC_MEM_NOC_NSS_AXI_CLK] = &gcc_mem_noc_nss_axi_clk.clkr,
4453 [GCC_NSS_CE_APB_CLK] = &gcc_nss_ce_apb_clk.clkr,
4454 [GCC_NSS_CE_AXI_CLK] = &gcc_nss_ce_axi_clk.clkr,
4455 [GCC_NSS_CFG_CLK] = &gcc_nss_cfg_clk.clkr,
4456 [GCC_NSS_CRYPTO_CLK] = &gcc_nss_crypto_clk.clkr,
4457 [GCC_NSS_CSR_CLK] = &gcc_nss_csr_clk.clkr,
4458 [GCC_NSS_EDMA_CFG_CLK] = &gcc_nss_edma_cfg_clk.clkr,
4459 [GCC_NSS_EDMA_CLK] = &gcc_nss_edma_clk.clkr,
4460 [GCC_NSS_IMEM_CLK] = &gcc_nss_imem_clk.clkr,
4461 [GCC_NSS_NOC_CLK] = &gcc_nss_noc_clk.clkr,
4462 [GCC_NSS_PPE_BTQ_CLK] = &gcc_nss_ppe_btq_clk.clkr,
4463 [GCC_NSS_PPE_CFG_CLK] = &gcc_nss_ppe_cfg_clk.clkr,
4464 [GCC_NSS_PPE_CLK] = &gcc_nss_ppe_clk.clkr,
4465 [GCC_NSS_PPE_IPE_CLK] = &gcc_nss_ppe_ipe_clk.clkr,
4466 [GCC_NSS_PTP_REF_CLK] = &gcc_nss_ptp_ref_clk.clkr,
4467 [GCC_NSSNOC_CE_APB_CLK] = &gcc_nssnoc_ce_apb_clk.clkr,
4468 [GCC_NSSNOC_CE_AXI_CLK] = &gcc_nssnoc_ce_axi_clk.clkr,
4469 [GCC_NSSNOC_CRYPTO_CLK] = &gcc_nssnoc_crypto_clk.clkr,
4470 [GCC_NSSNOC_PPE_CFG_CLK] = &gcc_nssnoc_ppe_cfg_clk.clkr,
4471 [GCC_NSSNOC_PPE_CLK] = &gcc_nssnoc_ppe_clk.clkr,
4472 [GCC_NSSNOC_QOSGEN_REF_CLK] = &gcc_nssnoc_qosgen_ref_clk.clkr,
4473 [GCC_NSSNOC_SNOC_CLK] = &gcc_nssnoc_snoc_clk.clkr,
4474 [GCC_NSSNOC_TIMEOUT_REF_CLK] = &gcc_nssnoc_timeout_ref_clk.clkr,
4475 [GCC_NSSNOC_UBI0_AHB_CLK] = &gcc_nssnoc_ubi0_ahb_clk.clkr,
4476 [GCC_NSSNOC_UBI1_AHB_CLK] = &gcc_nssnoc_ubi1_ahb_clk.clkr,
4477 [GCC_UBI0_AHB_CLK] = &gcc_ubi0_ahb_clk.clkr,
4478 [GCC_UBI0_AXI_CLK] = &gcc_ubi0_axi_clk.clkr,
4479 [GCC_UBI0_NC_AXI_CLK] = &gcc_ubi0_nc_axi_clk.clkr,
4480 [GCC_UBI0_CORE_CLK] = &gcc_ubi0_core_clk.clkr,
4481 [GCC_UBI0_MPT_CLK] = &gcc_ubi0_mpt_clk.clkr,
4482 [GCC_UBI1_AHB_CLK] = &gcc_ubi1_ahb_clk.clkr,
4483 [GCC_UBI1_AXI_CLK] = &gcc_ubi1_axi_clk.clkr,
4484 [GCC_UBI1_NC_AXI_CLK] = &gcc_ubi1_nc_axi_clk.clkr,
4485 [GCC_UBI1_CORE_CLK] = &gcc_ubi1_core_clk.clkr,
4486 [GCC_UBI1_MPT_CLK] = &gcc_ubi1_mpt_clk.clkr,
4487 [GCC_CMN_12GPLL_AHB_CLK] = &gcc_cmn_12gpll_ahb_clk.clkr,
4488 [GCC_CMN_12GPLL_SYS_CLK] = &gcc_cmn_12gpll_sys_clk.clkr,
4489 [GCC_MDIO_AHB_CLK] = &gcc_mdio_ahb_clk.clkr,
4490 [GCC_UNIPHY0_AHB_CLK] = &gcc_uniphy0_ahb_clk.clkr,
4491 [GCC_UNIPHY0_SYS_CLK] = &gcc_uniphy0_sys_clk.clkr,
4492 [GCC_UNIPHY1_AHB_CLK] = &gcc_uniphy1_ahb_clk.clkr,
4493 [GCC_UNIPHY1_SYS_CLK] = &gcc_uniphy1_sys_clk.clkr,
4494 [GCC_UNIPHY2_AHB_CLK] = &gcc_uniphy2_ahb_clk.clkr,
4495 [GCC_UNIPHY2_SYS_CLK] = &gcc_uniphy2_sys_clk.clkr,
4496 [GCC_NSS_PORT1_RX_CLK] = &gcc_nss_port1_rx_clk.clkr,
4497 [GCC_NSS_PORT1_TX_CLK] = &gcc_nss_port1_tx_clk.clkr,
4498 [GCC_NSS_PORT2_RX_CLK] = &gcc_nss_port2_rx_clk.clkr,
4499 [GCC_NSS_PORT2_TX_CLK] = &gcc_nss_port2_tx_clk.clkr,
4500 [GCC_NSS_PORT3_RX_CLK] = &gcc_nss_port3_rx_clk.clkr,
4501 [GCC_NSS_PORT3_TX_CLK] = &gcc_nss_port3_tx_clk.clkr,
4502 [GCC_NSS_PORT4_RX_CLK] = &gcc_nss_port4_rx_clk.clkr,
4503 [GCC_NSS_PORT4_TX_CLK] = &gcc_nss_port4_tx_clk.clkr,
4504 [GCC_NSS_PORT5_RX_CLK] = &gcc_nss_port5_rx_clk.clkr,
4505 [GCC_NSS_PORT5_TX_CLK] = &gcc_nss_port5_tx_clk.clkr,
4506 [GCC_NSS_PORT6_RX_CLK] = &gcc_nss_port6_rx_clk.clkr,
4507 [GCC_NSS_PORT6_TX_CLK] = &gcc_nss_port6_tx_clk.clkr,
4508 [GCC_PORT1_MAC_CLK] = &gcc_port1_mac_clk.clkr,
4509 [GCC_PORT2_MAC_CLK] = &gcc_port2_mac_clk.clkr,
4510 [GCC_PORT3_MAC_CLK] = &gcc_port3_mac_clk.clkr,
4511 [GCC_PORT4_MAC_CLK] = &gcc_port4_mac_clk.clkr,
4512 [GCC_PORT5_MAC_CLK] = &gcc_port5_mac_clk.clkr,
4513 [GCC_PORT6_MAC_CLK] = &gcc_port6_mac_clk.clkr,
4514 [GCC_UNIPHY0_PORT1_RX_CLK] = &gcc_uniphy0_port1_rx_clk.clkr,
4515 [GCC_UNIPHY0_PORT1_TX_CLK] = &gcc_uniphy0_port1_tx_clk.clkr,
4516 [GCC_UNIPHY0_PORT2_RX_CLK] = &gcc_uniphy0_port2_rx_clk.clkr,
4517 [GCC_UNIPHY0_PORT2_TX_CLK] = &gcc_uniphy0_port2_tx_clk.clkr,
4518 [GCC_UNIPHY0_PORT3_RX_CLK] = &gcc_uniphy0_port3_rx_clk.clkr,
4519 [GCC_UNIPHY0_PORT3_TX_CLK] = &gcc_uniphy0_port3_tx_clk.clkr,
4520 [GCC_UNIPHY0_PORT4_RX_CLK] = &gcc_uniphy0_port4_rx_clk.clkr,
4521 [GCC_UNIPHY0_PORT4_TX_CLK] = &gcc_uniphy0_port4_tx_clk.clkr,
4522 [GCC_UNIPHY0_PORT5_RX_CLK] = &gcc_uniphy0_port5_rx_clk.clkr,
4523 [GCC_UNIPHY0_PORT5_TX_CLK] = &gcc_uniphy0_port5_tx_clk.clkr,
4524 [GCC_UNIPHY1_PORT5_RX_CLK] = &gcc_uniphy1_port5_rx_clk.clkr,
4525 [GCC_UNIPHY1_PORT5_TX_CLK] = &gcc_uniphy1_port5_tx_clk.clkr,
4526 [GCC_UNIPHY2_PORT6_RX_CLK] = &gcc_uniphy2_port6_rx_clk.clkr,
4527 [GCC_UNIPHY2_PORT6_TX_CLK] = &gcc_uniphy2_port6_tx_clk.clkr,
4528 [GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr,
4529 [GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr,
4530 [GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr,
4531 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
4532 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
4533 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
4534 [GCC_PCIE0_RCHNG_CLK_SRC] = &pcie0_rchng_clk_src.clkr,
4535 [GCC_PCIE0_RCHNG_CLK] = &gcc_pcie0_rchng_clk.clkr,
4536 [GCC_PCIE0_AXI_S_BRIDGE_CLK] = &gcc_pcie0_axi_s_bridge_clk.clkr,
4537 [GCC_CRYPTO_PPE_CLK] = &gcc_crypto_ppe_clk.clkr,
4538 };
4539
4540 static const struct qcom_reset_map gcc_ipq8074_resets[] = {
4541 [GCC_BLSP1_BCR] = { 0x01000, 0 },
4542 [GCC_BLSP1_QUP1_BCR] = { 0x02000, 0 },
4543 [GCC_BLSP1_UART1_BCR] = { 0x02038, 0 },
4544 [GCC_BLSP1_QUP2_BCR] = { 0x03008, 0 },
4545 [GCC_BLSP1_UART2_BCR] = { 0x03028, 0 },
4546 [GCC_BLSP1_QUP3_BCR] = { 0x04008, 0 },
4547 [GCC_BLSP1_UART3_BCR] = { 0x04028, 0 },
4548 [GCC_BLSP1_QUP4_BCR] = { 0x05008, 0 },
4549 [GCC_BLSP1_UART4_BCR] = { 0x05028, 0 },
4550 [GCC_BLSP1_QUP5_BCR] = { 0x06008, 0 },
4551 [GCC_BLSP1_UART5_BCR] = { 0x06028, 0 },
4552 [GCC_BLSP1_QUP6_BCR] = { 0x07008, 0 },
4553 [GCC_BLSP1_UART6_BCR] = { 0x07028, 0 },
4554 [GCC_IMEM_BCR] = { 0x0e000, 0 },
4555 [GCC_SMMU_BCR] = { 0x12000, 0 },
4556 [GCC_APSS_TCU_BCR] = { 0x12050, 0 },
4557 [GCC_SMMU_XPU_BCR] = { 0x12054, 0 },
4558 [GCC_PCNOC_TBU_BCR] = { 0x12058, 0 },
4559 [GCC_SMMU_CFG_BCR] = { 0x1208c, 0 },
4560 [GCC_PRNG_BCR] = { 0x13000, 0 },
4561 [GCC_BOOT_ROM_BCR] = { 0x13008, 0 },
4562 [GCC_CRYPTO_BCR] = { 0x16000, 0 },
4563 [GCC_WCSS_BCR] = { 0x18000, 0 },
4564 [GCC_WCSS_Q6_BCR] = { 0x18100, 0 },
4565 [GCC_NSS_BCR] = { 0x19000, 0 },
4566 [GCC_SEC_CTRL_BCR] = { 0x1a000, 0 },
4567 [GCC_ADSS_BCR] = { 0x1c000, 0 },
4568 [GCC_DDRSS_BCR] = { 0x1e000, 0 },
4569 [GCC_SYSTEM_NOC_BCR] = { 0x26000, 0 },
4570 [GCC_PCNOC_BCR] = { 0x27018, 0 },
4571 [GCC_TCSR_BCR] = { 0x28000, 0 },
4572 [GCC_QDSS_BCR] = { 0x29000, 0 },
4573 [GCC_DCD_BCR] = { 0x2a000, 0 },
4574 [GCC_MSG_RAM_BCR] = { 0x2b000, 0 },
4575 [GCC_MPM_BCR] = { 0x2c000, 0 },
4576 [GCC_SPMI_BCR] = { 0x2e000, 0 },
4577 [GCC_SPDM_BCR] = { 0x2f000, 0 },
4578 [GCC_RBCPR_BCR] = { 0x33000, 0 },
4579 [GCC_RBCPR_MX_BCR] = { 0x33014, 0 },
4580 [GCC_TLMM_BCR] = { 0x34000, 0 },
4581 [GCC_RBCPR_WCSS_BCR] = { 0x3a000, 0 },
4582 [GCC_USB0_PHY_BCR] = { 0x3e034, 0 },
4583 [GCC_USB3PHY_0_PHY_BCR] = { 0x3e03c, 0 },
4584 [GCC_USB0_BCR] = { 0x3e070, 0 },
4585 [GCC_USB1_PHY_BCR] = { 0x3f034, 0 },
4586 [GCC_USB3PHY_1_PHY_BCR] = { 0x3f03c, 0 },
4587 [GCC_USB1_BCR] = { 0x3f070, 0 },
4588 [GCC_QUSB2_0_PHY_BCR] = { 0x4103c, 0 },
4589 [GCC_QUSB2_1_PHY_BCR] = { 0x41040, 0 },
4590 [GCC_SDCC1_BCR] = { 0x42000, 0 },
4591 [GCC_SDCC2_BCR] = { 0x43000, 0 },
4592 [GCC_SNOC_BUS_TIMEOUT0_BCR] = { 0x47000, 0 },
4593 [GCC_SNOC_BUS_TIMEOUT2_BCR] = { 0x47008, 0 },
4594 [GCC_SNOC_BUS_TIMEOUT3_BCR] = { 0x47010, 0 },
4595 [GCC_PCNOC_BUS_TIMEOUT0_BCR] = { 0x48000, 0 },
4596 [GCC_PCNOC_BUS_TIMEOUT1_BCR] = { 0x48008, 0 },
4597 [GCC_PCNOC_BUS_TIMEOUT2_BCR] = { 0x48010, 0 },
4598 [GCC_PCNOC_BUS_TIMEOUT3_BCR] = { 0x48018, 0 },
4599 [GCC_PCNOC_BUS_TIMEOUT4_BCR] = { 0x48020, 0 },
4600 [GCC_PCNOC_BUS_TIMEOUT5_BCR] = { 0x48028, 0 },
4601 [GCC_PCNOC_BUS_TIMEOUT6_BCR] = { 0x48030, 0 },
4602 [GCC_PCNOC_BUS_TIMEOUT7_BCR] = { 0x48038, 0 },
4603 [GCC_PCNOC_BUS_TIMEOUT8_BCR] = { 0x48040, 0 },
4604 [GCC_PCNOC_BUS_TIMEOUT9_BCR] = { 0x48048, 0 },
4605 [GCC_UNIPHY0_BCR] = { 0x56000, 0 },
4606 [GCC_UNIPHY1_BCR] = { 0x56100, 0 },
4607 [GCC_UNIPHY2_BCR] = { 0x56200, 0 },
4608 [GCC_CMN_12GPLL_BCR] = { 0x56300, 0 },
4609 [GCC_QPIC_BCR] = { 0x57018, 0 },
4610 [GCC_MDIO_BCR] = { 0x58000, 0 },
4611 [GCC_PCIE1_TBU_BCR] = { 0x65000, 0 },
4612 [GCC_WCSS_CORE_TBU_BCR] = { 0x66000, 0 },
4613 [GCC_WCSS_Q6_TBU_BCR] = { 0x67000, 0 },
4614 [GCC_USB0_TBU_BCR] = { 0x6a000, 0 },
4615 [GCC_USB1_TBU_BCR] = { 0x6a004, 0 },
4616 [GCC_PCIE0_TBU_BCR] = { 0x6b000, 0 },
4617 [GCC_NSS_NOC_TBU_BCR] = { 0x6e000, 0 },
4618 [GCC_PCIE0_BCR] = { 0x75004, 0 },
4619 [GCC_PCIE0_PHY_BCR] = { 0x75038, 0 },
4620 [GCC_PCIE0PHY_PHY_BCR] = { 0x7503c, 0 },
4621 [GCC_PCIE0_LINK_DOWN_BCR] = { 0x75044, 0 },
4622 [GCC_PCIE1_BCR] = { 0x76004, 0 },
4623 [GCC_PCIE1_PHY_BCR] = { 0x76038, 0 },
4624 [GCC_PCIE1PHY_PHY_BCR] = { 0x7603c, 0 },
4625 [GCC_PCIE1_LINK_DOWN_BCR] = { 0x76044, 0 },
4626 [GCC_DCC_BCR] = { 0x77000, 0 },
4627 [GCC_APC0_VOLTAGE_DROOP_DETECTOR_BCR] = { 0x78000, 0 },
4628 [GCC_APC1_VOLTAGE_DROOP_DETECTOR_BCR] = { 0x79000, 0 },
4629 [GCC_SMMU_CATS_BCR] = { 0x7c000, 0 },
4630 [GCC_UBI0_AXI_ARES] = { 0x68010, 0 },
4631 [GCC_UBI0_AHB_ARES] = { 0x68010, 1 },
4632 [GCC_UBI0_NC_AXI_ARES] = { 0x68010, 2 },
4633 [GCC_UBI0_DBG_ARES] = { 0x68010, 3 },
4634 [GCC_UBI0_CORE_CLAMP_ENABLE] = { 0x68010, 4 },
4635 [GCC_UBI0_CLKRST_CLAMP_ENABLE] = { 0x68010, 5 },
4636 [GCC_UBI1_AXI_ARES] = { 0x68010, 8 },
4637 [GCC_UBI1_AHB_ARES] = { 0x68010, 9 },
4638 [GCC_UBI1_NC_AXI_ARES] = { 0x68010, 10 },
4639 [GCC_UBI1_DBG_ARES] = { 0x68010, 11 },
4640 [GCC_UBI1_CORE_CLAMP_ENABLE] = { 0x68010, 12 },
4641 [GCC_UBI1_CLKRST_CLAMP_ENABLE] = { 0x68010, 13 },
4642 [GCC_NSS_CFG_ARES] = { 0x68010, 16 },
4643 [GCC_NSS_IMEM_ARES] = { 0x68010, 17 },
4644 [GCC_NSS_NOC_ARES] = { 0x68010, 18 },
4645 [GCC_NSS_CRYPTO_ARES] = { 0x68010, 19 },
4646 [GCC_NSS_CSR_ARES] = { 0x68010, 20 },
4647 [GCC_NSS_CE_APB_ARES] = { 0x68010, 21 },
4648 [GCC_NSS_CE_AXI_ARES] = { 0x68010, 22 },
4649 [GCC_NSSNOC_CE_APB_ARES] = { 0x68010, 23 },
4650 [GCC_NSSNOC_CE_AXI_ARES] = { 0x68010, 24 },
4651 [GCC_NSSNOC_UBI0_AHB_ARES] = { 0x68010, 25 },
4652 [GCC_NSSNOC_UBI1_AHB_ARES] = { 0x68010, 26 },
4653 [GCC_NSSNOC_SNOC_ARES] = { 0x68010, 27 },
4654 [GCC_NSSNOC_CRYPTO_ARES] = { 0x68010, 28 },
4655 [GCC_NSSNOC_ATB_ARES] = { 0x68010, 29 },
4656 [GCC_NSSNOC_QOSGEN_REF_ARES] = { 0x68010, 30 },
4657 [GCC_NSSNOC_TIMEOUT_REF_ARES] = { 0x68010, 31 },
4658 [GCC_PCIE0_PIPE_ARES] = { 0x75040, 0 },
4659 [GCC_PCIE0_SLEEP_ARES] = { 0x75040, 1 },
4660 [GCC_PCIE0_CORE_STICKY_ARES] = { 0x75040, 2 },
4661 [GCC_PCIE0_AXI_MASTER_ARES] = { 0x75040, 3 },
4662 [GCC_PCIE0_AXI_SLAVE_ARES] = { 0x75040, 4 },
4663 [GCC_PCIE0_AHB_ARES] = { 0x75040, 5 },
4664 [GCC_PCIE0_AXI_MASTER_STICKY_ARES] = { 0x75040, 6 },
4665 [GCC_PCIE0_AXI_SLAVE_STICKY_ARES] = { 0x75040, 7 },
4666 [GCC_PCIE1_PIPE_ARES] = { 0x76040, 0 },
4667 [GCC_PCIE1_SLEEP_ARES] = { 0x76040, 1 },
4668 [GCC_PCIE1_CORE_STICKY_ARES] = { 0x76040, 2 },
4669 [GCC_PCIE1_AXI_MASTER_ARES] = { 0x76040, 3 },
4670 [GCC_PCIE1_AXI_SLAVE_ARES] = { 0x76040, 4 },
4671 [GCC_PCIE1_AHB_ARES] = { 0x76040, 5 },
4672 [GCC_PCIE1_AXI_MASTER_STICKY_ARES] = { 0x76040, 6 },
4673 [GCC_PPE_FULL_RESET] = { .reg = 0x68014, .bitmask = GENMASK(19, 16) },
4674 [GCC_UNIPHY0_SOFT_RESET] = { .reg = 0x56004, .bitmask = GENMASK(13, 4) | BIT(1) },
4675 [GCC_UNIPHY0_XPCS_RESET] = { 0x56004, 2 },
4676 [GCC_UNIPHY1_SOFT_RESET] = { .reg = 0x56104, .bitmask = GENMASK(5, 4) | BIT(1) },
4677 [GCC_UNIPHY1_XPCS_RESET] = { 0x56104, 2 },
4678 [GCC_UNIPHY2_SOFT_RESET] = { .reg = 0x56204, .bitmask = GENMASK(5, 4) | BIT(1) },
4679 [GCC_UNIPHY2_XPCS_RESET] = { 0x56204, 2 },
4680 [GCC_EDMA_HW_RESET] = { .reg = 0x68014, .bitmask = GENMASK(21, 20) },
4681 [GCC_NSSPORT1_RESET] = { .reg = 0x68014, .bitmask = BIT(24) | GENMASK(1, 0) },
4682 [GCC_NSSPORT2_RESET] = { .reg = 0x68014, .bitmask = BIT(25) | GENMASK(3, 2) },
4683 [GCC_NSSPORT3_RESET] = { .reg = 0x68014, .bitmask = BIT(26) | GENMASK(5, 4) },
4684 [GCC_NSSPORT4_RESET] = { .reg = 0x68014, .bitmask = BIT(27) | GENMASK(9, 8) },
4685 [GCC_NSSPORT5_RESET] = { .reg = 0x68014, .bitmask = BIT(28) | GENMASK(11, 10) },
4686 [GCC_NSSPORT6_RESET] = { .reg = 0x68014, .bitmask = BIT(29) | GENMASK(13, 12) },
4687 };
4688
4689 static struct gdsc *gcc_ipq8074_gdscs[] = {
4690 [USB0_GDSC] = &usb0_gdsc,
4691 [USB1_GDSC] = &usb1_gdsc,
4692 };
4693
4694 static const struct of_device_id gcc_ipq8074_match_table[] = {
4695 { .compatible = "qcom,gcc-ipq8074" },
4696 { }
4697 };
4698 MODULE_DEVICE_TABLE(of, gcc_ipq8074_match_table);
4699
4700 static const struct regmap_config gcc_ipq8074_regmap_config = {
4701 .reg_bits = 32,
4702 .reg_stride = 4,
4703 .val_bits = 32,
4704 .max_register = 0x7fffc,
4705 .fast_io = true,
4706 };
4707
4708 static const struct qcom_cc_desc gcc_ipq8074_desc = {
4709 .config = &gcc_ipq8074_regmap_config,
4710 .clks = gcc_ipq8074_clks,
4711 .num_clks = ARRAY_SIZE(gcc_ipq8074_clks),
4712 .resets = gcc_ipq8074_resets,
4713 .num_resets = ARRAY_SIZE(gcc_ipq8074_resets),
4714 .clk_hws = gcc_ipq8074_hws,
4715 .num_clk_hws = ARRAY_SIZE(gcc_ipq8074_hws),
4716 .gdscs = gcc_ipq8074_gdscs,
4717 .num_gdscs = ARRAY_SIZE(gcc_ipq8074_gdscs),
4718 };
4719
gcc_ipq8074_probe(struct platform_device * pdev)4720 static int gcc_ipq8074_probe(struct platform_device *pdev)
4721 {
4722 struct regmap *regmap;
4723
4724 regmap = qcom_cc_map(pdev, &gcc_ipq8074_desc);
4725 if (IS_ERR(regmap))
4726 return PTR_ERR(regmap);
4727
4728 /* SW Workaround for UBI32 Huayra PLL */
4729 regmap_update_bits(regmap, 0x2501c, BIT(26), BIT(26));
4730
4731 clk_alpha_pll_configure(&ubi32_pll_main, regmap, &ubi32_pll_config);
4732 clk_alpha_pll_configure(&nss_crypto_pll_main, regmap,
4733 &nss_crypto_pll_config);
4734
4735 return qcom_cc_really_probe(pdev, &gcc_ipq8074_desc, regmap);
4736 }
4737
4738 static struct platform_driver gcc_ipq8074_driver = {
4739 .probe = gcc_ipq8074_probe,
4740 .driver = {
4741 .name = "qcom,gcc-ipq8074",
4742 .of_match_table = gcc_ipq8074_match_table,
4743 },
4744 };
4745
gcc_ipq8074_init(void)4746 static int __init gcc_ipq8074_init(void)
4747 {
4748 return platform_driver_register(&gcc_ipq8074_driver);
4749 }
4750 core_initcall(gcc_ipq8074_init);
4751
gcc_ipq8074_exit(void)4752 static void __exit gcc_ipq8074_exit(void)
4753 {
4754 platform_driver_unregister(&gcc_ipq8074_driver);
4755 }
4756 module_exit(gcc_ipq8074_exit);
4757
4758 MODULE_DESCRIPTION("QCOM GCC IPQ8074 Driver");
4759 MODULE_LICENSE("GPL v2");
4760 MODULE_ALIAS("platform:gcc-ipq8074");
4761