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