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

source code of linux/drivers/clk/qcom/gcc-ipq8074.c