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