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