1 // SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2 /*
3 * Copyright (c) 2023, The Linux Foundation. All rights reserved.
4 */
5 #include <linux/clk-provider.h>
6 #include <linux/mod_devicetable.h>
7 #include <linux/module.h>
8 #include <linux/platform_device.h>
9 #include <linux/regmap.h>
10
11 #include <dt-bindings/clock/qcom,gcc-ipq5018.h>
12 #include <dt-bindings/reset/qcom,gcc-ipq5018.h>
13
14 #include "clk-alpha-pll.h"
15 #include "clk-branch.h"
16 #include "clk-rcg.h"
17 #include "clk-regmap.h"
18 #include "clk-regmap-divider.h"
19 #include "clk-regmap-mux.h"
20 #include "clk-regmap-phy-mux.h"
21 #include "reset.h"
22
23 /* Need to match the order of clocks in DT binding */
24 enum {
25 DT_XO,
26 DT_SLEEP_CLK,
27 DT_PCIE20_PHY0_PIPE_CLK,
28 DT_PCIE20_PHY1_PIPE_CLK,
29 DT_USB3_PHY0_CC_PIPE_CLK,
30 DT_GEPHY_RX_CLK,
31 DT_GEPHY_TX_CLK,
32 DT_UNIPHY_RX_CLK,
33 DT_UNIPHY_TX_CLK,
34 };
35
36 enum {
37 P_XO,
38 P_CORE_PI_SLEEP_CLK,
39 P_PCIE20_PHY0_PIPE,
40 P_PCIE20_PHY1_PIPE,
41 P_USB3PHY_0_PIPE,
42 P_GEPHY_RX,
43 P_GEPHY_TX,
44 P_UNIPHY_RX,
45 P_UNIPHY_TX,
46 P_GPLL0,
47 P_GPLL0_DIV2,
48 P_GPLL2,
49 P_GPLL4,
50 P_UBI32_PLL,
51 };
52
53 static const struct clk_parent_data gcc_xo_data[] = {
54 { .index = DT_XO },
55 };
56
57 static const struct clk_parent_data gcc_sleep_clk_data[] = {
58 { .index = DT_SLEEP_CLK },
59 };
60
61 static struct clk_alpha_pll gpll0_main = {
62 .offset = 0x21000,
63 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
64 .clkr = {
65 .enable_reg = 0x0b000,
66 .enable_mask = BIT(0),
67 .hw.init = &(struct clk_init_data) {
68 .name = "gpll0_main",
69 .parent_data = gcc_xo_data,
70 .num_parents = ARRAY_SIZE(gcc_xo_data),
71 .ops = &clk_alpha_pll_stromer_ops,
72 },
73 },
74 };
75
76 static struct clk_alpha_pll gpll2_main = {
77 .offset = 0x4a000,
78 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
79 .clkr = {
80 .enable_reg = 0x0b000,
81 .enable_mask = BIT(2),
82 .hw.init = &(struct clk_init_data) {
83 .name = "gpll2_main",
84 .parent_data = gcc_xo_data,
85 .num_parents = ARRAY_SIZE(gcc_xo_data),
86 .ops = &clk_alpha_pll_stromer_ops,
87 },
88 },
89 };
90
91 static struct clk_alpha_pll gpll4_main = {
92 .offset = 0x24000,
93 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
94 .clkr = {
95 .enable_reg = 0x0b000,
96 .enable_mask = BIT(5),
97 .hw.init = &(struct clk_init_data) {
98 .name = "gpll4_main",
99 .parent_data = gcc_xo_data,
100 .num_parents = ARRAY_SIZE(gcc_xo_data),
101 .ops = &clk_alpha_pll_stromer_ops,
102 },
103 },
104 };
105
106 static struct clk_alpha_pll ubi32_pll_main = {
107 .offset = 0x25000,
108 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
109 .clkr = {
110 .enable_reg = 0x0b000,
111 .enable_mask = BIT(6),
112 .hw.init = &(struct clk_init_data) {
113 .name = "ubi32_pll_main",
114 .parent_data = gcc_xo_data,
115 .num_parents = ARRAY_SIZE(gcc_xo_data),
116 .ops = &clk_alpha_pll_stromer_ops,
117 },
118 },
119 };
120
121 static struct clk_alpha_pll_postdiv gpll0 = {
122 .offset = 0x21000,
123 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
124 .width = 4,
125 .clkr.hw.init = &(struct clk_init_data) {
126 .name = "gpll0",
127 .parent_hws = (const struct clk_hw *[]) {
128 &gpll0_main.clkr.hw,
129 },
130 .num_parents = 1,
131 .ops = &clk_alpha_pll_postdiv_ro_ops,
132 },
133 };
134
135 static struct clk_alpha_pll_postdiv gpll2 = {
136 .offset = 0x4a000,
137 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
138 .width = 4,
139 .clkr.hw.init = &(struct clk_init_data) {
140 .name = "gpll2",
141 .parent_hws = (const struct clk_hw *[]) {
142 &gpll2_main.clkr.hw,
143 },
144 .num_parents = 1,
145 .ops = &clk_alpha_pll_postdiv_ro_ops,
146 },
147 };
148
149 static struct clk_alpha_pll_postdiv gpll4 = {
150 .offset = 0x24000,
151 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
152 .width = 4,
153 .clkr.hw.init = &(struct clk_init_data) {
154 .name = "gpll4",
155 .parent_hws = (const struct clk_hw *[]) {
156 &gpll4_main.clkr.hw,
157 },
158 .num_parents = 1,
159 .ops = &clk_alpha_pll_postdiv_ro_ops,
160 },
161 };
162
163 static struct clk_alpha_pll_postdiv ubi32_pll = {
164 .offset = 0x25000,
165 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
166 .width = 4,
167 .clkr.hw.init = &(struct clk_init_data) {
168 .name = "ubi32_pll",
169 .parent_hws = (const struct clk_hw *[]) {
170 &ubi32_pll_main.clkr.hw,
171 },
172 .num_parents = 1,
173 .ops = &clk_alpha_pll_postdiv_ro_ops,
174 .flags = CLK_SET_RATE_PARENT,
175 },
176 };
177
178 static struct clk_fixed_factor gpll0_out_main_div2 = {
179 .mult = 1,
180 .div = 2,
181 .hw.init = &(struct clk_init_data) {
182 .name = "gpll0_out_main_div2",
183 .parent_hws = (const struct clk_hw *[]) {
184 &gpll0_main.clkr.hw,
185 },
186 .num_parents = 1,
187 .ops = &clk_fixed_factor_ops,
188 .flags = CLK_SET_RATE_PARENT,
189 },
190 };
191
192 static const struct clk_parent_data gcc_xo_gpll0_gpll0_out_main_div2[] = {
193 { .index = DT_XO },
194 { .hw = &gpll0.clkr.hw },
195 { .hw = &gpll0_out_main_div2.hw },
196 };
197
198 static const struct parent_map gcc_xo_gpll0_gpll0_out_main_div2_map[] = {
199 { P_XO, 0 },
200 { P_GPLL0, 1 },
201 { P_GPLL0_DIV2, 4 },
202 };
203
204 static const struct clk_parent_data gcc_xo_gpll0[] = {
205 { .index = DT_XO },
206 { .hw = &gpll0.clkr.hw },
207 };
208
209 static const struct parent_map gcc_xo_gpll0_map[] = {
210 { P_XO, 0 },
211 { P_GPLL0, 1 },
212 };
213
214 static const struct clk_parent_data gcc_xo_gpll0_out_main_div2_gpll0[] = {
215 { .index = DT_XO },
216 { .hw = &gpll0_out_main_div2.hw },
217 { .hw = &gpll0.clkr.hw },
218 };
219
220 static const struct parent_map gcc_xo_gpll0_out_main_div2_gpll0_map[] = {
221 { P_XO, 0 },
222 { P_GPLL0_DIV2, 2 },
223 { P_GPLL0, 1 },
224 };
225
226 static const struct clk_parent_data gcc_xo_ubi32_gpll0[] = {
227 { .index = DT_XO },
228 { .hw = &ubi32_pll.clkr.hw },
229 { .hw = &gpll0.clkr.hw },
230 };
231
232 static const struct parent_map gcc_xo_ubi32_gpll0_map[] = {
233 { P_XO, 0 },
234 { P_UBI32_PLL, 1 },
235 { P_GPLL0, 2 },
236 };
237
238 static const struct clk_parent_data gcc_xo_gpll0_gpll2[] = {
239 { .index = DT_XO },
240 { .hw = &gpll0.clkr.hw },
241 { .hw = &gpll2.clkr.hw },
242 };
243
244 static const struct parent_map gcc_xo_gpll0_gpll2_map[] = {
245 { P_XO, 0 },
246 { P_GPLL0, 1 },
247 { P_GPLL2, 2 },
248 };
249
250 static const struct clk_parent_data gcc_xo_gpll0_gpll2_gpll4[] = {
251 { .index = DT_XO },
252 { .hw = &gpll0.clkr.hw },
253 { .hw = &gpll2.clkr.hw },
254 { .hw = &gpll4.clkr.hw },
255 };
256
257 static const struct parent_map gcc_xo_gpll0_gpll2_gpll4_map[] = {
258 { P_XO, 0 },
259 { P_GPLL0, 1 },
260 { P_GPLL2, 2 },
261 { P_GPLL4, 3 },
262 };
263
264 static const struct clk_parent_data gcc_xo_gpll0_gpll4[] = {
265 { .index = DT_XO },
266 { .hw = &gpll0.clkr.hw },
267 { .hw = &gpll4.clkr.hw },
268 };
269
270 static const struct parent_map gcc_xo_gpll0_gpll4_map[] = {
271 { P_XO, 0 },
272 { P_GPLL0, 1 },
273 { P_GPLL4, 2 },
274 };
275
276 static const struct clk_parent_data gcc_xo_gpll0_core_pi_sleep_clk[] = {
277 { .index = DT_XO },
278 { .hw = &gpll0.clkr.hw },
279 { .index = DT_SLEEP_CLK },
280 };
281
282 static const struct parent_map gcc_xo_gpll0_core_pi_sleep_clk_map[] = {
283 { P_XO, 0 },
284 { P_GPLL0, 2 },
285 { P_CORE_PI_SLEEP_CLK, 6 },
286 };
287
288 static const struct clk_parent_data gcc_xo_gpll0_gpll0_out_main_div2_sleep_clk[] = {
289 { .index = DT_XO },
290 { .hw = &gpll0.clkr.hw },
291 { .hw = &gpll0_out_main_div2.hw },
292 { .index = DT_SLEEP_CLK },
293 };
294
295 static const struct parent_map gcc_xo_gpll0_gpll0_out_main_div2_sleep_clk_map[] = {
296 { P_XO, 0 },
297 { P_GPLL0, 1 },
298 { P_GPLL0_DIV2, 4 },
299 { P_CORE_PI_SLEEP_CLK, 6 },
300 };
301
302 static const struct clk_parent_data gcc_xo_gpll0_gpll2_gpll0_out_main_div2[] = {
303 { .index = DT_XO },
304 { .hw = &gpll0.clkr.hw },
305 { .hw = &gpll2.clkr.hw },
306 { .hw = &gpll0_out_main_div2.hw },
307 };
308
309 static const struct parent_map gcc_xo_gpll0_gpll2_gpll0_out_main_div2_map[] = {
310 { P_XO, 0 },
311 { P_GPLL0, 1 },
312 { P_GPLL2, 2 },
313 { P_GPLL0_DIV2, 4 },
314 };
315
316 static const struct clk_parent_data gcc_xo_gpll4_gpll0_gpll0_out_main_div2[] = {
317 { .index = DT_XO },
318 { .hw = &gpll4.clkr.hw },
319 { .hw = &gpll0.clkr.hw },
320 { .hw = &gpll0_out_main_div2.hw },
321 };
322
323 static const struct parent_map gcc_xo_gpll4_gpll0_gpll0_out_main_div2_map1[] = {
324 { P_XO, 0 },
325 { P_GPLL4, 1 },
326 { P_GPLL0, 2 },
327 { P_GPLL0_DIV2, 4 },
328 };
329
330 static const struct parent_map gcc_xo_gpll4_gpll0_gpll0_out_main_div2_map2[] = {
331 { P_XO, 0 },
332 { P_GPLL4, 1 },
333 { P_GPLL0, 3 },
334 { P_GPLL0_DIV2, 4 },
335 };
336
337 static const struct clk_parent_data gcc_xo_gephy_gcc_rx_gephy_gcc_tx_ubi32_pll_gpll0[] = {
338 { .index = DT_XO },
339 { .index = DT_GEPHY_RX_CLK },
340 { .index = DT_GEPHY_TX_CLK },
341 { .hw = &ubi32_pll.clkr.hw },
342 { .hw = &gpll0.clkr.hw },
343 };
344
345 static const struct parent_map gcc_xo_gephy_gcc_rx_gephy_gcc_tx_ubi32_pll_gpll0_map[] = {
346 { P_XO, 0 },
347 { P_GEPHY_RX, 1 },
348 { P_GEPHY_TX, 2 },
349 { P_UBI32_PLL, 3 },
350 { P_GPLL0, 4 },
351 };
352
353 static const struct clk_parent_data gcc_xo_gephy_gcc_tx_gephy_gcc_rx_ubi32_pll_gpll0[] = {
354 { .index = DT_XO },
355 { .index = DT_GEPHY_TX_CLK },
356 { .index = DT_GEPHY_RX_CLK },
357 { .hw = &ubi32_pll.clkr.hw },
358 { .hw = &gpll0.clkr.hw },
359 };
360
361 static const struct parent_map gcc_xo_gephy_gcc_tx_gephy_gcc_rx_ubi32_pll_gpll0_map[] = {
362 { P_XO, 0 },
363 { P_GEPHY_TX, 1 },
364 { P_GEPHY_RX, 2 },
365 { P_UBI32_PLL, 3 },
366 { P_GPLL0, 4 },
367 };
368
369 static const struct clk_parent_data gcc_xo_uniphy_gcc_rx_uniphy_gcc_tx_ubi32_pll_gpll0[] = {
370 { .index = DT_XO },
371 { .index = DT_UNIPHY_RX_CLK },
372 { .index = DT_UNIPHY_TX_CLK },
373 { .hw = &ubi32_pll.clkr.hw },
374 { .hw = &gpll0.clkr.hw },
375 };
376
377 static const struct parent_map gcc_xo_uniphy_gcc_rx_uniphy_gcc_tx_ubi32_pll_gpll0_map[] = {
378 { P_XO, 0 },
379 { P_UNIPHY_RX, 1 },
380 { P_UNIPHY_TX, 2 },
381 { P_UBI32_PLL, 3 },
382 { P_GPLL0, 4 },
383 };
384
385 static const struct clk_parent_data gcc_xo_uniphy_gcc_tx_uniphy_gcc_rx_ubi32_pll_gpll0[] = {
386 { .index = DT_XO },
387 { .index = DT_UNIPHY_TX_CLK },
388 { .index = DT_UNIPHY_RX_CLK },
389 { .hw = &ubi32_pll.clkr.hw },
390 { .hw = &gpll0.clkr.hw },
391 };
392
393 static const struct parent_map gcc_xo_uniphy_gcc_tx_uniphy_gcc_rx_ubi32_pll_gpll0_map[] = {
394 { P_XO, 0 },
395 { P_UNIPHY_TX, 1 },
396 { P_UNIPHY_RX, 2 },
397 { P_UBI32_PLL, 3 },
398 { P_GPLL0, 4 },
399 };
400
401 static const struct clk_parent_data gcc_pcie20_phy0_pipe_clk_xo[] = {
402 { .index = DT_PCIE20_PHY0_PIPE_CLK },
403 { .index = DT_XO },
404 };
405
406 static const struct parent_map gcc_pcie20_phy0_pipe_clk_xo_map[] = {
407 { P_PCIE20_PHY0_PIPE, 0 },
408 { P_XO, 2 },
409 };
410
411 static const struct clk_parent_data gcc_pcie20_phy1_pipe_clk_xo[] = {
412 { .index = DT_PCIE20_PHY1_PIPE_CLK },
413 { .index = DT_XO },
414 };
415
416 static const struct parent_map gcc_pcie20_phy1_pipe_clk_xo_map[] = {
417 { P_PCIE20_PHY1_PIPE, 0 },
418 { P_XO, 2 },
419 };
420
421 static const struct clk_parent_data gcc_usb3phy_0_cc_pipe_clk_xo[] = {
422 { .index = DT_USB3_PHY0_CC_PIPE_CLK },
423 { .index = DT_XO },
424 };
425
426 static const struct parent_map gcc_usb3phy_0_cc_pipe_clk_xo_map[] = {
427 { P_USB3PHY_0_PIPE, 0 },
428 { P_XO, 2 },
429 };
430
431 static const struct freq_tbl ftbl_adss_pwm_clk_src[] = {
432 F(24000000, P_XO, 1, 0, 0),
433 F(100000000, P_GPLL0, 8, 0, 0),
434 { }
435 };
436
437 static struct clk_rcg2 adss_pwm_clk_src = {
438 .cmd_rcgr = 0x1f008,
439 .freq_tbl = ftbl_adss_pwm_clk_src,
440 .hid_width = 5,
441 .parent_map = gcc_xo_gpll0_map,
442 .clkr.hw.init = &(struct clk_init_data) {
443 .name = "adss_pwm_clk_src",
444 .parent_data = gcc_xo_gpll0,
445 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
446 .ops = &clk_rcg2_ops,
447 },
448 };
449
450 static const struct freq_tbl ftbl_blsp1_qup_i2c_apps_clk_src[] = {
451 F(50000000, P_GPLL0, 16, 0, 0),
452 { }
453 };
454
455 static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
456 .cmd_rcgr = 0x0200c,
457 .freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,
458 .hid_width = 5,
459 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
460 .clkr.hw.init = &(struct clk_init_data) {
461 .name = "blsp1_qup1_i2c_apps_clk_src",
462 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
463 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
464 .ops = &clk_rcg2_ops,
465 },
466 };
467
468 static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
469 .cmd_rcgr = 0x03000,
470 .freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,
471 .hid_width = 5,
472 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
473 .clkr.hw.init = &(struct clk_init_data) {
474 .name = "blsp1_qup2_i2c_apps_clk_src",
475 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
476 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
477 .ops = &clk_rcg2_ops,
478 },
479 };
480
481 static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
482 .cmd_rcgr = 0x04000,
483 .freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,
484 .hid_width = 5,
485 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
486 .clkr.hw.init = &(struct clk_init_data) {
487 .name = "blsp1_qup3_i2c_apps_clk_src",
488 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
489 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
490 .ops = &clk_rcg2_ops,
491 },
492 };
493
494 static const struct freq_tbl ftbl_blsp1_qup_spi_apps_clk_src[] = {
495 F(960000, P_XO, 10, 2, 5),
496 F(4800000, P_XO, 5, 0, 0),
497 F(9600000, P_XO, 2, 4, 5),
498 F(16000000, P_GPLL0, 10, 1, 5),
499 F(24000000, P_XO, 1, 0, 0),
500 F(50000000, P_GPLL0, 16, 0, 0),
501 { }
502 };
503
504 static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
505 .cmd_rcgr = 0x02024,
506 .freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,
507 .mnd_width = 8,
508 .hid_width = 5,
509 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
510 .clkr.hw.init = &(struct clk_init_data) {
511 .name = "blsp1_qup1_spi_apps_clk_src",
512 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
513 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
514 .ops = &clk_rcg2_ops,
515 },
516 };
517
518 static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
519 .cmd_rcgr = 0x03014,
520 .freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,
521 .mnd_width = 8,
522 .hid_width = 5,
523 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
524 .clkr.hw.init = &(struct clk_init_data) {
525 .name = "blsp1_qup2_spi_apps_clk_src",
526 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
527 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
528 .ops = &clk_rcg2_ops,
529 },
530 };
531
532 static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
533 .cmd_rcgr = 0x04014,
534 .freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,
535 .mnd_width = 8,
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_qup3_spi_apps_clk_src",
540 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
541 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
542 .ops = &clk_rcg2_ops,
543 },
544 };
545
546 static const struct freq_tbl ftbl_blsp1_uart_apps_clk_src[] = {
547 F(3686400, P_GPLL0_DIV2, 1, 144, 15625),
548 F(7372800, P_GPLL0_DIV2, 1, 288, 15625),
549 F(14745600, P_GPLL0_DIV2, 1, 576, 15625),
550 F(24000000, P_XO, 1, 0, 0),
551 F(25000000, P_GPLL0, 16, 1, 2),
552 F(40000000, P_GPLL0, 1, 1, 20),
553 F(46400000, P_GPLL0, 1, 29, 500),
554 F(48000000, P_GPLL0, 1, 3, 50),
555 F(51200000, P_GPLL0, 1, 8, 125),
556 F(56000000, P_GPLL0, 1, 7, 100),
557 F(58982400, P_GPLL0, 1, 1152, 15625),
558 F(60000000, P_GPLL0, 1, 3, 40),
559 F(64000000, P_GPLL0, 10, 4, 5),
560 { }
561 };
562
563 static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
564 .cmd_rcgr = 0x02044,
565 .freq_tbl = ftbl_blsp1_uart_apps_clk_src,
566 .mnd_width = 16,
567 .hid_width = 5,
568 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
569 .clkr.hw.init = &(struct clk_init_data) {
570 .name = "blsp1_uart1_apps_clk_src",
571 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
572 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
573 .ops = &clk_rcg2_ops,
574 },
575 };
576
577 static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
578 .cmd_rcgr = 0x03034,
579 .freq_tbl = ftbl_blsp1_uart_apps_clk_src,
580 .mnd_width = 16,
581 .hid_width = 5,
582 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
583 .clkr.hw.init = &(struct clk_init_data) {
584 .name = "blsp1_uart2_apps_clk_src",
585 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
586 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
587 .ops = &clk_rcg2_ops,
588 },
589 };
590
591 static const struct freq_tbl ftbl_crypto_clk_src[] = {
592 F(160000000, P_GPLL0, 5, 0, 0),
593 { }
594 };
595
596 static struct clk_rcg2 crypto_clk_src = {
597 .cmd_rcgr = 0x16004,
598 .freq_tbl = ftbl_crypto_clk_src,
599 .hid_width = 5,
600 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
601 .clkr.hw.init = &(struct clk_init_data) {
602 .name = "crypto_clk_src",
603 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
604 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
605 .ops = &clk_rcg2_ops,
606 },
607 };
608
609 static const struct freq_tbl ftbl_gmac0_tx_clk_src[] = {
610 F(2500000, P_GEPHY_TX, 5, 0, 0),
611 F(24000000, P_XO, 1, 0, 0),
612 F(25000000, P_GEPHY_TX, 5, 0, 0),
613 F(125000000, P_GEPHY_TX, 1, 0, 0),
614 { }
615 };
616
617 static struct clk_rcg2 gmac0_rx_clk_src = {
618 .cmd_rcgr = 0x68020,
619 .parent_map = gcc_xo_gephy_gcc_rx_gephy_gcc_tx_ubi32_pll_gpll0_map,
620 .hid_width = 5,
621 .freq_tbl = ftbl_gmac0_tx_clk_src,
622 .clkr.hw.init = &(struct clk_init_data) {
623 .name = "gmac0_rx_clk_src",
624 .parent_data = gcc_xo_gephy_gcc_rx_gephy_gcc_tx_ubi32_pll_gpll0,
625 .num_parents = ARRAY_SIZE(gcc_xo_gephy_gcc_rx_gephy_gcc_tx_ubi32_pll_gpll0),
626 .ops = &clk_rcg2_ops,
627 },
628 };
629
630 static struct clk_regmap_div gmac0_rx_div_clk_src = {
631 .reg = 0x68420,
632 .shift = 0,
633 .width = 4,
634 .clkr = {
635 .hw.init = &(struct clk_init_data) {
636 .name = "gmac0_rx_div_clk_src",
637 .parent_hws = (const struct clk_hw *[]) {
638 &gmac0_rx_clk_src.clkr.hw,
639 },
640 .num_parents = 1,
641 .ops = &clk_regmap_div_ops,
642 .flags = CLK_SET_RATE_PARENT,
643 },
644 },
645 };
646
647 static struct clk_rcg2 gmac0_tx_clk_src = {
648 .cmd_rcgr = 0x68028,
649 .parent_map = gcc_xo_gephy_gcc_tx_gephy_gcc_rx_ubi32_pll_gpll0_map,
650 .hid_width = 5,
651 .freq_tbl = ftbl_gmac0_tx_clk_src,
652 .clkr.hw.init = &(struct clk_init_data) {
653 .name = "gmac0_tx_clk_src",
654 .parent_data = gcc_xo_gephy_gcc_tx_gephy_gcc_rx_ubi32_pll_gpll0,
655 .num_parents = ARRAY_SIZE(gcc_xo_gephy_gcc_tx_gephy_gcc_rx_ubi32_pll_gpll0),
656 .ops = &clk_rcg2_ops,
657 },
658 };
659
660 static struct clk_regmap_div gmac0_tx_div_clk_src = {
661 .reg = 0x68424,
662 .shift = 0,
663 .width = 4,
664 .clkr = {
665 .hw.init = &(struct clk_init_data) {
666 .name = "gmac0_tx_div_clk_src",
667 .parent_hws = (const struct clk_hw *[]) {
668 &gmac0_tx_clk_src.clkr.hw,
669 },
670 .num_parents = 1,
671 .ops = &clk_regmap_div_ops,
672 .flags = CLK_SET_RATE_PARENT,
673 },
674 },
675 };
676
677 static const struct freq_tbl ftbl_gmac1_rx_clk_src[] = {
678 F(2500000, P_UNIPHY_RX, 12.5, 0, 0),
679 F(24000000, P_XO, 1, 0, 0),
680 F(25000000, P_UNIPHY_RX, 2.5, 0, 0),
681 F(125000000, P_UNIPHY_RX, 2.5, 0, 0),
682 F(125000000, P_UNIPHY_RX, 1, 0, 0),
683 F(312500000, P_UNIPHY_RX, 1, 0, 0),
684 { }
685 };
686
687 static struct clk_rcg2 gmac1_rx_clk_src = {
688 .cmd_rcgr = 0x68030,
689 .parent_map = gcc_xo_uniphy_gcc_rx_uniphy_gcc_tx_ubi32_pll_gpll0_map,
690 .hid_width = 5,
691 .freq_tbl = ftbl_gmac1_rx_clk_src,
692 .clkr.hw.init = &(struct clk_init_data) {
693 .name = "gmac1_rx_clk_src",
694 .parent_data = gcc_xo_uniphy_gcc_rx_uniphy_gcc_tx_ubi32_pll_gpll0,
695 .num_parents = ARRAY_SIZE(gcc_xo_uniphy_gcc_rx_uniphy_gcc_tx_ubi32_pll_gpll0),
696 .ops = &clk_rcg2_ops,
697 },
698 };
699
700 static struct clk_regmap_div gmac1_rx_div_clk_src = {
701 .reg = 0x68430,
702 .shift = 0,
703 .width = 4,
704 .clkr = {
705 .hw.init = &(struct clk_init_data) {
706 .name = "gmac1_rx_div_clk_src",
707 .parent_hws = (const struct clk_hw *[]) {
708 &gmac1_rx_clk_src.clkr.hw,
709 },
710 .num_parents = 1,
711 .ops = &clk_regmap_div_ops,
712 .flags = CLK_SET_RATE_PARENT,
713 },
714 },
715 };
716
717 static const struct freq_tbl ftbl_gmac1_tx_clk_src[] = {
718 F(2500000, P_UNIPHY_TX, 12.5, 0, 0),
719 F(24000000, P_XO, 1, 0, 0),
720 F(25000000, P_UNIPHY_TX, 2.5, 0, 0),
721 F(125000000, P_UNIPHY_TX, 2.5, 0, 0),
722 F(125000000, P_UNIPHY_TX, 1, 0, 0),
723 F(312500000, P_UNIPHY_TX, 1, 0, 0),
724 { }
725 };
726
727 static struct clk_rcg2 gmac1_tx_clk_src = {
728 .cmd_rcgr = 0x68038,
729 .parent_map = gcc_xo_uniphy_gcc_tx_uniphy_gcc_rx_ubi32_pll_gpll0_map,
730 .hid_width = 5,
731 .freq_tbl = ftbl_gmac1_tx_clk_src,
732 .clkr.hw.init = &(struct clk_init_data) {
733 .name = "gmac1_tx_clk_src",
734 .parent_data = gcc_xo_uniphy_gcc_tx_uniphy_gcc_rx_ubi32_pll_gpll0,
735 .num_parents = ARRAY_SIZE(gcc_xo_uniphy_gcc_tx_uniphy_gcc_rx_ubi32_pll_gpll0),
736 .ops = &clk_rcg2_ops,
737 },
738 };
739
740 static struct clk_regmap_div gmac1_tx_div_clk_src = {
741 .reg = 0x68434,
742 .shift = 0,
743 .width = 4,
744 .clkr = {
745 .hw.init = &(struct clk_init_data) {
746 .name = "gmac1_tx_div_clk_src",
747 .parent_hws = (const struct clk_hw *[]) {
748 &gmac1_tx_clk_src.clkr.hw,
749 },
750 .num_parents = 1,
751 .ops = &clk_regmap_div_ops,
752 .flags = CLK_SET_RATE_PARENT,
753 },
754 },
755 };
756
757 static const struct freq_tbl ftbl_gmac_clk_src[] = {
758 F(240000000, P_GPLL4, 5, 0, 0),
759 { }
760 };
761
762 static struct clk_rcg2 gmac_clk_src = {
763 .cmd_rcgr = 0x68080,
764 .parent_map = gcc_xo_gpll0_gpll4_map,
765 .hid_width = 5,
766 .freq_tbl = ftbl_gmac_clk_src,
767 .clkr.hw.init = &(struct clk_init_data) {
768 .name = "gmac_clk_src",
769 .parent_data = gcc_xo_gpll0_gpll4,
770 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll4),
771 .ops = &clk_rcg2_ops,
772 },
773 };
774
775 static const struct freq_tbl ftbl_gp_clk_src[] = {
776 F(200000000, P_GPLL0, 4, 0, 0),
777 { }
778 };
779
780 static struct clk_rcg2 gp1_clk_src = {
781 .cmd_rcgr = 0x08004,
782 .freq_tbl = ftbl_gp_clk_src,
783 .mnd_width = 8,
784 .hid_width = 5,
785 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_sleep_clk_map,
786 .clkr.hw.init = &(struct clk_init_data) {
787 .name = "gp1_clk_src",
788 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2_sleep_clk,
789 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2_sleep_clk),
790 .ops = &clk_rcg2_ops,
791 },
792 };
793
794 static struct clk_rcg2 gp2_clk_src = {
795 .cmd_rcgr = 0x09004,
796 .freq_tbl = ftbl_gp_clk_src,
797 .mnd_width = 8,
798 .hid_width = 5,
799 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_sleep_clk_map,
800 .clkr.hw.init = &(struct clk_init_data) {
801 .name = "gp2_clk_src",
802 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2_sleep_clk,
803 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2_sleep_clk),
804 .ops = &clk_rcg2_ops,
805 },
806 };
807
808 static struct clk_rcg2 gp3_clk_src = {
809 .cmd_rcgr = 0x0a004,
810 .freq_tbl = ftbl_gp_clk_src,
811 .mnd_width = 8,
812 .hid_width = 5,
813 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_sleep_clk_map,
814 .clkr.hw.init = &(struct clk_init_data) {
815 .name = "gp3_clk_src",
816 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2_sleep_clk,
817 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2_sleep_clk),
818 .ops = &clk_rcg2_ops,
819 },
820 };
821
822 static const struct freq_tbl ftbl_lpass_axim_clk_src[] = {
823 F(133333334, P_GPLL0, 6, 0, 0),
824 { }
825 };
826
827 static struct clk_rcg2 lpass_axim_clk_src = {
828 .cmd_rcgr = 0x2e028,
829 .freq_tbl = ftbl_lpass_axim_clk_src,
830 .hid_width = 5,
831 .parent_map = gcc_xo_gpll0_map,
832 .clkr.hw.init = &(struct clk_init_data) {
833 .name = "lpass_axim_clk_src",
834 .parent_data = gcc_xo_gpll0,
835 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
836 .ops = &clk_rcg2_ops,
837 },
838 };
839
840 static const struct freq_tbl ftbl_lpass_sway_clk_src[] = {
841 F(66666667, P_GPLL0, 12, 0, 0),
842 { }
843 };
844
845 static struct clk_rcg2 lpass_sway_clk_src = {
846 .cmd_rcgr = 0x2e040,
847 .freq_tbl = ftbl_lpass_sway_clk_src,
848 .hid_width = 5,
849 .parent_map = gcc_xo_gpll0_map,
850 .clkr.hw.init = &(struct clk_init_data) {
851 .name = "lpass_sway_clk_src",
852 .parent_data = gcc_xo_gpll0,
853 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
854 .ops = &clk_rcg2_ops,
855 },
856 };
857
858 static const struct freq_tbl ftbl_pcie0_aux_clk_src[] = {
859 F(2000000, P_XO, 12, 0, 0),
860 };
861
862 static struct clk_rcg2 pcie0_aux_clk_src = {
863 .cmd_rcgr = 0x75020,
864 .freq_tbl = ftbl_pcie0_aux_clk_src,
865 .mnd_width = 16,
866 .hid_width = 5,
867 .parent_map = gcc_xo_gpll0_core_pi_sleep_clk_map,
868 .clkr.hw.init = &(struct clk_init_data) {
869 .name = "pcie0_aux_clk_src",
870 .parent_data = gcc_xo_gpll0_core_pi_sleep_clk,
871 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_core_pi_sleep_clk),
872 .ops = &clk_rcg2_ops,
873 },
874 };
875
876 static const struct freq_tbl ftbl_pcie0_axi_clk_src[] = {
877 F(240000000, P_GPLL4, 5, 0, 0),
878 { }
879 };
880
881 static struct clk_rcg2 pcie0_axi_clk_src = {
882 .cmd_rcgr = 0x75050,
883 .freq_tbl = ftbl_pcie0_axi_clk_src,
884 .hid_width = 5,
885 .parent_map = gcc_xo_gpll0_gpll4_map,
886 .clkr.hw.init = &(struct clk_init_data) {
887 .name = "pcie0_axi_clk_src",
888 .parent_data = gcc_xo_gpll0_gpll4,
889 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll4),
890 .ops = &clk_rcg2_ops,
891 },
892 };
893
894 static struct clk_rcg2 pcie1_aux_clk_src = {
895 .cmd_rcgr = 0x76020,
896 .freq_tbl = ftbl_pcie0_aux_clk_src,
897 .mnd_width = 16,
898 .hid_width = 5,
899 .parent_map = gcc_xo_gpll0_core_pi_sleep_clk_map,
900 .clkr.hw.init = &(struct clk_init_data) {
901 .name = "pcie1_aux_clk_src",
902 .parent_data = gcc_xo_gpll0_core_pi_sleep_clk,
903 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_core_pi_sleep_clk),
904 .ops = &clk_rcg2_ops,
905 },
906 };
907
908 static struct clk_rcg2 pcie1_axi_clk_src = {
909 .cmd_rcgr = 0x76050,
910 .freq_tbl = ftbl_gp_clk_src,
911 .hid_width = 5,
912 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
913 .clkr.hw.init = &(struct clk_init_data) {
914 .name = "pcie1_axi_clk_src",
915 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
916 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
917 .ops = &clk_rcg2_ops,
918 },
919 };
920
921 static struct clk_regmap_mux pcie0_pipe_clk_src = {
922 .reg = 0x7501c,
923 .shift = 8,
924 .width = 2,
925 .parent_map = gcc_pcie20_phy0_pipe_clk_xo_map,
926 .clkr = {
927 .hw.init = &(struct clk_init_data) {
928 .name = "pcie0_pipe_clk_src",
929 .parent_data = gcc_pcie20_phy0_pipe_clk_xo,
930 .num_parents = ARRAY_SIZE(gcc_pcie20_phy0_pipe_clk_xo),
931 .ops = &clk_regmap_mux_closest_ops,
932 .flags = CLK_SET_RATE_PARENT,
933 },
934 },
935 };
936
937 static struct clk_regmap_mux pcie1_pipe_clk_src = {
938 .reg = 0x7601c,
939 .shift = 8,
940 .width = 2,
941 .parent_map = gcc_pcie20_phy1_pipe_clk_xo_map, .clkr = {
942 .hw.init = &(struct clk_init_data) {
943 .name = "pcie1_pipe_clk_src",
944 .parent_data = gcc_pcie20_phy1_pipe_clk_xo,
945 .num_parents = ARRAY_SIZE(gcc_pcie20_phy1_pipe_clk_xo),
946 .ops = &clk_regmap_mux_closest_ops,
947 .flags = CLK_SET_RATE_PARENT,
948 },
949 },
950 };
951
952 static const struct freq_tbl ftbl_pcnoc_bfdcd_clk_src[] = {
953 F(100000000, P_GPLL0, 8, 0, 0),
954 { }
955 };
956
957 static struct clk_rcg2 pcnoc_bfdcd_clk_src = {
958 .cmd_rcgr = 0x27000,
959 .freq_tbl = ftbl_pcnoc_bfdcd_clk_src,
960 .hid_width = 5,
961 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
962 .clkr.hw.init = &(struct clk_init_data) {
963 .name = "pcnoc_bfdcd_clk_src",
964 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
965 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
966 .ops = &clk_rcg2_ops,
967 },
968 };
969
970 static struct clk_fixed_factor pcnoc_clk_src = {
971 .mult = 1,
972 .div = 1,
973 .hw.init = &(struct clk_init_data) {
974 .name = "pcnoc_clk_src",
975 .parent_hws = (const struct clk_hw *[]) {
976 &pcnoc_bfdcd_clk_src.clkr.hw,
977 },
978 .num_parents = 1,
979 .ops = &clk_fixed_factor_ops,
980 .flags = CLK_SET_RATE_PARENT,
981 },
982 };
983
984 static const struct freq_tbl ftbl_qdss_at_clk_src[] = {
985 F(240000000, P_GPLL4, 5, 0, 0),
986 { }
987 };
988
989 static struct clk_rcg2 qdss_at_clk_src = {
990 .cmd_rcgr = 0x2900c,
991 .freq_tbl = ftbl_qdss_at_clk_src,
992 .hid_width = 5,
993 .parent_map = gcc_xo_gpll4_gpll0_gpll0_out_main_div2_map1,
994 .clkr.hw.init = &(struct clk_init_data) {
995 .name = "qdss_at_clk_src",
996 .parent_data = gcc_xo_gpll4_gpll0_gpll0_out_main_div2,
997 .num_parents = ARRAY_SIZE(gcc_xo_gpll4_gpll0_gpll0_out_main_div2),
998 .ops = &clk_rcg2_ops,
999 },
1000 };
1001
1002 static const struct freq_tbl ftbl_qdss_stm_clk_src[] = {
1003 F(200000000, P_GPLL0, 4, 0, 0),
1004 { }
1005 };
1006
1007 static struct clk_rcg2 qdss_stm_clk_src = {
1008 .cmd_rcgr = 0x2902c,
1009 .freq_tbl = ftbl_qdss_stm_clk_src,
1010 .hid_width = 5,
1011 .parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1012 .clkr.hw.init = &(struct clk_init_data) {
1013 .name = "qdss_stm_clk_src",
1014 .parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1015 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
1016 .ops = &clk_rcg2_ops,
1017 },
1018 };
1019
1020 static const struct freq_tbl ftbl_qdss_traceclkin_clk_src[] = {
1021 F(266666667, P_GPLL0, 3, 0, 0),
1022 { }
1023 };
1024
1025 static struct clk_rcg2 qdss_traceclkin_clk_src = {
1026 .cmd_rcgr = 0x29048,
1027 .freq_tbl = ftbl_qdss_traceclkin_clk_src,
1028 .hid_width = 5,
1029 .parent_map = gcc_xo_gpll4_gpll0_gpll0_out_main_div2_map1,
1030 .clkr.hw.init = &(struct clk_init_data) {
1031 .name = "qdss_traceclkin_clk_src",
1032 .parent_data = gcc_xo_gpll4_gpll0_gpll0_out_main_div2,
1033 .num_parents = ARRAY_SIZE(gcc_xo_gpll4_gpll0_gpll0_out_main_div2),
1034 .ops = &clk_rcg2_ops,
1035 },
1036 };
1037
1038 static const struct freq_tbl ftbl_qdss_tsctr_clk_src[] = {
1039 F(600000000, P_GPLL4, 2, 0, 0),
1040 { }
1041 };
1042
1043 static struct clk_rcg2 qdss_tsctr_clk_src = {
1044 .cmd_rcgr = 0x29064,
1045 .freq_tbl = ftbl_qdss_tsctr_clk_src,
1046 .hid_width = 5,
1047 .parent_map = gcc_xo_gpll4_gpll0_gpll0_out_main_div2_map1,
1048 .clkr.hw.init = &(struct clk_init_data) {
1049 .name = "qdss_tsctr_clk_src",
1050 .parent_data = gcc_xo_gpll4_gpll0_gpll0_out_main_div2,
1051 .num_parents = ARRAY_SIZE(gcc_xo_gpll4_gpll0_gpll0_out_main_div2),
1052 .ops = &clk_rcg2_ops,
1053 },
1054 };
1055
1056 static struct clk_fixed_factor qdss_tsctr_div2_clk_src = {
1057 .mult = 1,
1058 .div = 2,
1059 .hw.init = &(struct clk_init_data) {
1060 .name = "qdss_tsctr_div2_clk_src",
1061 .parent_hws = (const struct clk_hw *[]) {
1062 &qdss_tsctr_clk_src.clkr.hw,
1063 },
1064 .num_parents = 1,
1065 .flags = CLK_SET_RATE_PARENT,
1066 .ops = &clk_fixed_factor_ops,
1067 },
1068 };
1069
1070 static struct clk_fixed_factor qdss_dap_sync_clk_src = {
1071 .mult = 1,
1072 .div = 4,
1073 .hw.init = &(struct clk_init_data) {
1074 .name = "qdss_dap_sync_clk_src",
1075 .parent_hws = (const struct clk_hw *[]) {
1076 &qdss_tsctr_clk_src.clkr.hw,
1077 },
1078 .num_parents = 1,
1079 .ops = &clk_fixed_factor_ops,
1080 },
1081 };
1082
1083 static struct clk_fixed_factor eud_at_clk_src = {
1084 .mult = 1,
1085 .div = 6,
1086 .hw.init = &(struct clk_init_data) {
1087 .name = "eud_at_clk_src",
1088 .parent_hws = (const struct clk_hw *[]) {
1089 &qdss_at_clk_src.clkr.hw,
1090 },
1091 .num_parents = 1,
1092 .ops = &clk_fixed_factor_ops,
1093 .flags = CLK_SET_RATE_PARENT,
1094 },
1095 };
1096
1097 static const struct freq_tbl ftbl_qpic_io_macro_clk_src[] = {
1098 F(24000000, P_XO, 1, 0, 0),
1099 F(100000000, P_GPLL0, 8, 0, 0),
1100 F(200000000, P_GPLL0, 4, 0, 0),
1101 F(320000000, P_GPLL0, 2.5, 0, 0),
1102 };
1103
1104 static struct clk_rcg2 qpic_io_macro_clk_src = {
1105 .cmd_rcgr = 0x57010,
1106 .freq_tbl = ftbl_qpic_io_macro_clk_src,
1107 .hid_width = 5,
1108 .parent_map = gcc_xo_gpll0_gpll2_map,
1109 .clkr.hw.init = &(struct clk_init_data) {
1110 .name = "qpic_io_macro_clk_src",
1111 .parent_data = gcc_xo_gpll0_gpll2,
1112 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll2),
1113 .ops = &clk_rcg2_ops,
1114 },
1115 };
1116
1117 static const struct freq_tbl ftbl_sdcc1_apps_clk_src[] = {
1118 F(143713, P_XO, 1, 1, 167),
1119 F(400000, P_XO, 1, 1, 60),
1120 F(24000000, P_XO, 1, 0, 0),
1121 F(48000000, P_GPLL2, 12, 1, 2),
1122 F(96000000, P_GPLL2, 12, 0, 0),
1123 F(177777778, P_GPLL0, 1, 2, 9),
1124 F(192000000, P_GPLL2, 6, 0, 0),
1125 F(200000000, P_GPLL0, 4, 0, 0),
1126 { }
1127 };
1128
1129 static struct clk_rcg2 sdcc1_apps_clk_src = {
1130 .cmd_rcgr = 0x42004,
1131 .freq_tbl = ftbl_sdcc1_apps_clk_src,
1132 .mnd_width = 8,
1133 .hid_width = 5,
1134 .parent_map = gcc_xo_gpll0_gpll2_gpll0_out_main_div2_map,
1135 .clkr.hw.init = &(struct clk_init_data) {
1136 .name = "sdcc1_apps_clk_src",
1137 .parent_data = gcc_xo_gpll0_gpll2_gpll0_out_main_div2,
1138 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll2_gpll0_out_main_div2),
1139 .ops = &clk_rcg2_floor_ops,
1140 },
1141 };
1142
1143 static const struct freq_tbl ftbl_system_noc_bfdcd_clk_src[] = {
1144 F(266666667, P_GPLL0, 3, 0, 0),
1145 { }
1146 };
1147
1148 static struct clk_rcg2 system_noc_bfdcd_clk_src = {
1149 .cmd_rcgr = 0x26004,
1150 .freq_tbl = ftbl_system_noc_bfdcd_clk_src,
1151 .hid_width = 5,
1152 .parent_map = gcc_xo_gpll0_gpll2_gpll0_out_main_div2_map,
1153 .clkr.hw.init = &(struct clk_init_data) {
1154 .name = "system_noc_bfdcd_clk_src",
1155 .parent_data = gcc_xo_gpll0_gpll2_gpll0_out_main_div2,
1156 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll2_gpll0_out_main_div2),
1157 .ops = &clk_rcg2_ops,
1158 },
1159 };
1160
1161 static struct clk_fixed_factor system_noc_clk_src = {
1162 .mult = 1,
1163 .div = 1,
1164 .hw.init = &(struct clk_init_data) {
1165 .name = "system_noc_clk_src",
1166 .parent_hws = (const struct clk_hw *[]) {
1167 &system_noc_bfdcd_clk_src.clkr.hw,
1168 },
1169 .num_parents = 1,
1170 .ops = &clk_fixed_factor_ops,
1171 .flags = CLK_SET_RATE_PARENT,
1172 },
1173 };
1174
1175 static const struct freq_tbl ftbl_apss_axi_clk_src[] = {
1176 F(400000000, P_GPLL0, 2, 0, 0),
1177 { }
1178 };
1179
1180 static struct clk_rcg2 ubi0_axi_clk_src = {
1181 .cmd_rcgr = 0x68088,
1182 .freq_tbl = ftbl_apss_axi_clk_src,
1183 .hid_width = 5,
1184 .parent_map = gcc_xo_gpll0_gpll2_map,
1185 .clkr.hw.init = &(struct clk_init_data) {
1186 .name = "ubi0_axi_clk_src",
1187 .parent_data = gcc_xo_gpll0_gpll2,
1188 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll2),
1189 .ops = &clk_rcg2_ops,
1190 .flags = CLK_SET_RATE_PARENT,
1191 },
1192 };
1193
1194 static const struct freq_tbl ftbl_ubi0_core_clk_src[] = {
1195 F(850000000, P_UBI32_PLL, 1, 0, 0),
1196 F(1000000000, P_UBI32_PLL, 1, 0, 0),
1197 };
1198
1199 static struct clk_rcg2 ubi0_core_clk_src = {
1200 .cmd_rcgr = 0x68100,
1201 .freq_tbl = ftbl_ubi0_core_clk_src,
1202 .hid_width = 5,
1203 .parent_map = gcc_xo_ubi32_gpll0_map,
1204 .clkr.hw.init = &(struct clk_init_data) {
1205 .name = "ubi0_core_clk_src",
1206 .parent_data = gcc_xo_ubi32_gpll0,
1207 .num_parents = ARRAY_SIZE(gcc_xo_ubi32_gpll0),
1208 .ops = &clk_rcg2_ops,
1209 .flags = CLK_SET_RATE_PARENT,
1210 },
1211 };
1212
1213 static struct clk_rcg2 usb0_aux_clk_src = {
1214 .cmd_rcgr = 0x3e05c,
1215 .freq_tbl = ftbl_pcie0_aux_clk_src,
1216 .mnd_width = 16,
1217 .hid_width = 5,
1218 .parent_map = gcc_xo_gpll0_core_pi_sleep_clk_map,
1219 .clkr.hw.init = &(struct clk_init_data) {
1220 .name = "usb0_aux_clk_src",
1221 .parent_data = gcc_xo_gpll0_core_pi_sleep_clk,
1222 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_core_pi_sleep_clk),
1223 .ops = &clk_rcg2_ops,
1224 },
1225 };
1226
1227 static const struct freq_tbl ftbl_usb0_lfps_clk_src[] = {
1228 F(25000000, P_GPLL0, 16, 1, 2),
1229 { }
1230 };
1231
1232 static struct clk_rcg2 usb0_lfps_clk_src = {
1233 .cmd_rcgr = 0x3e090,
1234 .freq_tbl = ftbl_usb0_lfps_clk_src,
1235 .mnd_width = 8,
1236 .hid_width = 5,
1237 .parent_map = gcc_xo_gpll0_map,
1238 .clkr.hw.init = &(struct clk_init_data) {
1239 .name = "usb0_lfps_clk_src",
1240 .parent_data = gcc_xo_gpll0,
1241 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
1242 .ops = &clk_rcg2_ops,
1243 },
1244 };
1245
1246 static struct clk_rcg2 usb0_master_clk_src = {
1247 .cmd_rcgr = 0x3e00c,
1248 .freq_tbl = ftbl_gp_clk_src,
1249 .mnd_width = 8,
1250 .hid_width = 5,
1251 .parent_map = gcc_xo_gpll0_out_main_div2_gpll0_map,
1252 .clkr.hw.init = &(struct clk_init_data) {
1253 .name = "usb0_master_clk_src",
1254 .parent_data = gcc_xo_gpll0_out_main_div2_gpll0,
1255 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_out_main_div2_gpll0),
1256 .ops = &clk_rcg2_ops,
1257 },
1258 };
1259
1260 static const struct freq_tbl ftbl_usb0_mock_utmi_clk_src[] = {
1261 F(60000000, P_GPLL4, 10, 1, 2),
1262 { }
1263 };
1264
1265 static struct clk_rcg2 usb0_mock_utmi_clk_src = {
1266 .cmd_rcgr = 0x3e020,
1267 .freq_tbl = ftbl_usb0_mock_utmi_clk_src,
1268 .mnd_width = 8,
1269 .hid_width = 5,
1270 .parent_map = gcc_xo_gpll4_gpll0_gpll0_out_main_div2_map2,
1271 .clkr.hw.init = &(struct clk_init_data) {
1272 .name = "usb0_mock_utmi_clk_src",
1273 .parent_data = gcc_xo_gpll4_gpll0_gpll0_out_main_div2,
1274 .num_parents = ARRAY_SIZE(gcc_xo_gpll4_gpll0_gpll0_out_main_div2),
1275 .ops = &clk_rcg2_ops,
1276 },
1277 };
1278
1279 static struct clk_regmap_mux usb0_pipe_clk_src = {
1280 .reg = 0x3e048,
1281 .shift = 8,
1282 .width = 2,
1283 .parent_map = gcc_usb3phy_0_cc_pipe_clk_xo_map,
1284 .clkr = {
1285 .hw.init = &(struct clk_init_data) {
1286 .name = "usb0_pipe_clk_src",
1287 .parent_data = gcc_usb3phy_0_cc_pipe_clk_xo,
1288 .num_parents = ARRAY_SIZE(gcc_usb3phy_0_cc_pipe_clk_xo),
1289 .ops = &clk_regmap_mux_closest_ops,
1290 .flags = CLK_SET_RATE_PARENT,
1291 },
1292 },
1293 };
1294
1295 static const struct freq_tbl ftbl_q6_axi_clk_src[] = {
1296 F(400000000, P_GPLL0, 2, 0, 0),
1297 { }
1298 };
1299
1300 static struct clk_rcg2 q6_axi_clk_src = {
1301 .cmd_rcgr = 0x59120,
1302 .freq_tbl = ftbl_q6_axi_clk_src,
1303 .hid_width = 5,
1304 .parent_map = gcc_xo_gpll0_gpll2_gpll4_map,
1305 .clkr.hw.init = &(struct clk_init_data) {
1306 .name = "q6_axi_clk_src",
1307 .parent_data = gcc_xo_gpll0_gpll2_gpll4,
1308 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll2_gpll4),
1309 .ops = &clk_rcg2_ops,
1310 },
1311 };
1312
1313 static const struct freq_tbl ftbl_wcss_ahb_clk_src[] = {
1314 F(133333333, P_GPLL0, 6, 0, 0),
1315 { }
1316 };
1317
1318 static struct clk_rcg2 wcss_ahb_clk_src = {
1319 .cmd_rcgr = 0x59020,
1320 .freq_tbl = ftbl_wcss_ahb_clk_src,
1321 .hid_width = 5,
1322 .parent_map = gcc_xo_gpll0_map,
1323 .clkr.hw.init = &(struct clk_init_data) {
1324 .name = "wcss_ahb_clk_src",
1325 .parent_data = gcc_xo_gpll0,
1326 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
1327 .ops = &clk_rcg2_ops,
1328 },
1329 };
1330
1331 static struct clk_branch gcc_sleep_clk_src = {
1332 .halt_reg = 0x30000,
1333 .clkr = {
1334 .enable_reg = 0x30000,
1335 .enable_mask = BIT(1),
1336 .hw.init = &(struct clk_init_data) {
1337 .name = "gcc_sleep_clk_src",
1338 .parent_data = gcc_sleep_clk_data,
1339 .num_parents = ARRAY_SIZE(gcc_sleep_clk_data),
1340 .ops = &clk_branch2_ops,
1341 },
1342 },
1343 };
1344
1345 static struct clk_branch gcc_xo_clk_src = {
1346 .halt_reg = 0x30018,
1347 .clkr = {
1348 .enable_reg = 0x30018,
1349 .enable_mask = BIT(1),
1350 .hw.init = &(struct clk_init_data) {
1351 .name = "gcc_xo_clk_src",
1352 .parent_data = gcc_xo_data,
1353 .num_parents = ARRAY_SIZE(gcc_xo_data),
1354 .flags = CLK_SET_RATE_PARENT,
1355 .ops = &clk_branch2_ops,
1356 },
1357 },
1358 };
1359
1360 static struct clk_branch gcc_xo_clk = {
1361 .halt_reg = 0x30030,
1362 .clkr = {
1363 .enable_reg = 0x30030,
1364 .enable_mask = BIT(0),
1365 .hw.init = &(struct clk_init_data) {
1366 .name = "gcc_xo_clk",
1367 .parent_hws = (const struct clk_hw *[]) {
1368 &gcc_xo_clk_src.clkr.hw,
1369 },
1370 .num_parents = 1,
1371 .flags = CLK_SET_RATE_PARENT,
1372 .ops = &clk_branch2_ops,
1373 },
1374 },
1375 };
1376
1377 static struct clk_branch gcc_adss_pwm_clk = {
1378 .halt_reg = 0x1f020,
1379 .clkr = {
1380 .enable_reg = 0x1f020,
1381 .enable_mask = BIT(0),
1382 .hw.init = &(struct clk_init_data) {
1383 .name = "gcc_adss_pwm_clk",
1384 .parent_hws = (const struct clk_hw *[]) {
1385 &adss_pwm_clk_src.clkr.hw,
1386 },
1387 .num_parents = 1,
1388 .flags = CLK_SET_RATE_PARENT,
1389 .ops = &clk_branch2_ops,
1390 },
1391 },
1392 };
1393
1394 static struct clk_branch gcc_blsp1_ahb_clk = {
1395 .halt_reg = 0x01008,
1396 .halt_check = BRANCH_HALT_VOTED,
1397 .clkr = {
1398 .enable_reg = 0x0b004,
1399 .enable_mask = BIT(10),
1400 .hw.init = &(struct clk_init_data) {
1401 .name = "gcc_blsp1_ahb_clk",
1402 .parent_hws = (const struct clk_hw *[]) {
1403 &pcnoc_clk_src.hw,
1404 },
1405 .num_parents = 1,
1406 .flags = CLK_SET_RATE_PARENT,
1407 .ops = &clk_branch2_ops,
1408 },
1409 },
1410 };
1411
1412 static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
1413 .halt_reg = 0x02008,
1414 .clkr = {
1415 .enable_reg = 0x02008,
1416 .enable_mask = BIT(0),
1417 .hw.init = &(struct clk_init_data) {
1418 .name = "gcc_blsp1_qup1_i2c_apps_clk",
1419 .parent_hws = (const struct clk_hw *[]) {
1420 &blsp1_qup1_i2c_apps_clk_src.clkr.hw,
1421 },
1422 .num_parents = 1,
1423 .flags = CLK_SET_RATE_PARENT,
1424 .ops = &clk_branch2_ops,
1425 },
1426 },
1427 };
1428
1429 static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
1430 .halt_reg = 0x02004,
1431 .clkr = {
1432 .enable_reg = 0x02004,
1433 .enable_mask = BIT(0),
1434 .hw.init = &(struct clk_init_data) {
1435 .name = "gcc_blsp1_qup1_spi_apps_clk",
1436 .parent_hws = (const struct clk_hw *[]) {
1437 &blsp1_qup1_spi_apps_clk_src.clkr.hw,
1438 },
1439 .num_parents = 1,
1440 .flags = CLK_SET_RATE_PARENT,
1441 .ops = &clk_branch2_ops,
1442 },
1443 },
1444 };
1445
1446 static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
1447 .halt_reg = 0x03010,
1448 .clkr = {
1449 .enable_reg = 0x03010,
1450 .enable_mask = BIT(0),
1451 .hw.init = &(struct clk_init_data) {
1452 .name = "gcc_blsp1_qup2_i2c_apps_clk",
1453 .parent_hws = (const struct clk_hw *[]) {
1454 &blsp1_qup2_i2c_apps_clk_src.clkr.hw,
1455 },
1456 .num_parents = 1,
1457 .flags = CLK_SET_RATE_PARENT,
1458 .ops = &clk_branch2_ops,
1459 },
1460 },
1461 };
1462
1463 static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
1464 .halt_reg = 0x0300c,
1465 .clkr = {
1466 .enable_reg = 0x0300c,
1467 .enable_mask = BIT(0),
1468 .hw.init = &(struct clk_init_data) {
1469 .name = "gcc_blsp1_qup2_spi_apps_clk",
1470 .parent_hws = (const struct clk_hw *[]) {
1471 &blsp1_qup2_spi_apps_clk_src.clkr.hw,
1472 },
1473 .num_parents = 1,
1474 .flags = CLK_SET_RATE_PARENT,
1475 .ops = &clk_branch2_ops,
1476 },
1477 },
1478 };
1479
1480 static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
1481 .halt_reg = 0x04010,
1482 .clkr = {
1483 .enable_reg = 0x04010,
1484 .enable_mask = BIT(0),
1485 .hw.init = &(struct clk_init_data) {
1486 .name = "gcc_blsp1_qup3_i2c_apps_clk",
1487 .parent_hws = (const struct clk_hw *[]) {
1488 &blsp1_qup3_i2c_apps_clk_src.clkr.hw,
1489 },
1490 .num_parents = 1,
1491 .flags = CLK_SET_RATE_PARENT,
1492 .ops = &clk_branch2_ops,
1493 },
1494 },
1495 };
1496
1497 static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
1498 .halt_reg = 0x0400c,
1499 .clkr = {
1500 .enable_reg = 0x0400c,
1501 .enable_mask = BIT(0),
1502 .hw.init = &(struct clk_init_data) {
1503 .name = "gcc_blsp1_qup3_spi_apps_clk",
1504 .parent_hws = (const struct clk_hw *[]) {
1505 &blsp1_qup3_spi_apps_clk_src.clkr.hw,
1506 },
1507 .num_parents = 1,
1508 .flags = CLK_SET_RATE_PARENT,
1509 .ops = &clk_branch2_ops,
1510 },
1511 },
1512 };
1513
1514 static struct clk_branch gcc_blsp1_uart1_apps_clk = {
1515 .halt_reg = 0x0203c,
1516 .clkr = {
1517 .enable_reg = 0x0203c,
1518 .enable_mask = BIT(0),
1519 .hw.init = &(struct clk_init_data) {
1520 .name = "gcc_blsp1_uart1_apps_clk",
1521 .parent_hws = (const struct clk_hw *[]) {
1522 &blsp1_uart1_apps_clk_src.clkr.hw,
1523 },
1524 .num_parents = 1,
1525 .flags = CLK_SET_RATE_PARENT,
1526 .ops = &clk_branch2_ops,
1527 },
1528 },
1529 };
1530
1531 static struct clk_branch gcc_blsp1_uart2_apps_clk = {
1532 .halt_reg = 0x0302c,
1533 .clkr = {
1534 .enable_reg = 0x0302c,
1535 .enable_mask = BIT(0),
1536 .hw.init = &(struct clk_init_data) {
1537 .name = "gcc_blsp1_uart2_apps_clk",
1538 .parent_hws = (const struct clk_hw *[]) {
1539 &blsp1_uart2_apps_clk_src.clkr.hw,
1540 },
1541 .num_parents = 1,
1542 .flags = CLK_SET_RATE_PARENT,
1543 .ops = &clk_branch2_ops,
1544 },
1545 },
1546 };
1547
1548 static struct clk_branch gcc_btss_lpo_clk = {
1549 .halt_reg = 0x1c004,
1550 .clkr = {
1551 .enable_reg = 0x1c004,
1552 .enable_mask = BIT(0),
1553 .hw.init = &(struct clk_init_data) {
1554 .name = "gcc_btss_lpo_clk",
1555 .ops = &clk_branch2_ops,
1556 },
1557 },
1558 };
1559
1560 static struct clk_branch gcc_cmn_blk_ahb_clk = {
1561 .halt_reg = 0x56308,
1562 .clkr = {
1563 .enable_reg = 0x56308,
1564 .enable_mask = BIT(0),
1565 .hw.init = &(struct clk_init_data) {
1566 .name = "gcc_cmn_blk_ahb_clk",
1567 .parent_hws = (const struct clk_hw *[]) {
1568 &pcnoc_clk_src.hw,
1569 },
1570 .num_parents = 1,
1571 .flags = CLK_SET_RATE_PARENT,
1572 .ops = &clk_branch2_ops,
1573 },
1574 },
1575 };
1576
1577 static struct clk_branch gcc_cmn_blk_sys_clk = {
1578 .halt_reg = 0x5630c,
1579 .clkr = {
1580 .enable_reg = 0x5630c,
1581 .enable_mask = BIT(0),
1582 .hw.init = &(struct clk_init_data) {
1583 .name = "gcc_cmn_blk_sys_clk",
1584 .parent_hws = (const struct clk_hw *[]) {
1585 &gcc_xo_clk_src.clkr.hw,
1586 },
1587 .num_parents = 1,
1588 .flags = CLK_SET_RATE_PARENT,
1589 .ops = &clk_branch2_ops,
1590 },
1591 },
1592 };
1593
1594 static struct clk_branch gcc_crypto_ahb_clk = {
1595 .halt_reg = 0x16024,
1596 .halt_check = BRANCH_HALT_VOTED,
1597 .clkr = {
1598 .enable_reg = 0x0b004,
1599 .enable_mask = BIT(0),
1600 .hw.init = &(struct clk_init_data) {
1601 .name = "gcc_crypto_ahb_clk",
1602 .parent_hws = (const struct clk_hw *[]) {
1603 &pcnoc_clk_src.hw,
1604 },
1605 .num_parents = 1,
1606 .flags = CLK_SET_RATE_PARENT,
1607 .ops = &clk_branch2_ops,
1608 },
1609 },
1610 };
1611
1612 static struct clk_branch gcc_crypto_axi_clk = {
1613 .halt_reg = 0x16020,
1614 .halt_check = BRANCH_HALT_VOTED,
1615 .clkr = {
1616 .enable_reg = 0x0b004,
1617 .enable_mask = BIT(1),
1618 .hw.init = &(struct clk_init_data) {
1619 .name = "gcc_crypto_axi_clk",
1620 .parent_hws = (const struct clk_hw *[]) {
1621 &pcnoc_clk_src.hw,
1622 },
1623 .num_parents = 1,
1624 .flags = CLK_SET_RATE_PARENT,
1625 .ops = &clk_branch2_ops,
1626 },
1627 },
1628 };
1629
1630 static struct clk_branch gcc_crypto_clk = {
1631 .halt_reg = 0x1601c,
1632 .halt_check = BRANCH_HALT_VOTED,
1633 .clkr = {
1634 .enable_reg = 0x0b004,
1635 .enable_mask = BIT(2),
1636 .hw.init = &(struct clk_init_data) {
1637 .name = "gcc_crypto_clk",
1638 .parent_hws = (const struct clk_hw *[]) {
1639 &crypto_clk_src.clkr.hw,
1640 },
1641 .num_parents = 1,
1642 .flags = CLK_SET_RATE_PARENT,
1643 .ops = &clk_branch2_ops,
1644 },
1645 },
1646 };
1647
1648 static struct clk_branch gcc_dcc_clk = {
1649 .halt_reg = 0x77004,
1650 .clkr = {
1651 .enable_reg = 0x77004,
1652 .enable_mask = BIT(0),
1653 .hw.init = &(struct clk_init_data) {
1654 .name = "gcc_dcc_clk",
1655 .parent_hws = (const struct clk_hw *[]) {
1656 &pcnoc_clk_src.hw,
1657 },
1658 .num_parents = 1,
1659 .flags = CLK_SET_RATE_PARENT,
1660 .ops = &clk_branch2_ops,
1661 },
1662 },
1663 };
1664
1665 static struct clk_branch gcc_gephy_rx_clk = {
1666 .halt_reg = 0x56010,
1667 .halt_check = BRANCH_HALT_DELAY,
1668 .clkr = {
1669 .enable_reg = 0x56010,
1670 .enable_mask = BIT(0),
1671 .hw.init = &(struct clk_init_data) {
1672 .name = "gcc_gephy_rx_clk",
1673 .parent_hws = (const struct clk_hw *[]) {
1674 &gmac0_rx_div_clk_src.clkr.hw,
1675 },
1676 .num_parents = 1,
1677 .ops = &clk_branch2_ops,
1678 .flags = CLK_SET_RATE_PARENT,
1679 },
1680 },
1681 };
1682
1683 static struct clk_branch gcc_gephy_tx_clk = {
1684 .halt_reg = 0x56014,
1685 .halt_check = BRANCH_HALT_DELAY,
1686 .clkr = {
1687 .enable_reg = 0x56014,
1688 .enable_mask = BIT(0),
1689 .hw.init = &(struct clk_init_data) {
1690 .name = "gcc_gephy_tx_clk",
1691 .parent_hws = (const struct clk_hw *[]) {
1692 &gmac0_tx_div_clk_src.clkr.hw,
1693 },
1694 .num_parents = 1,
1695 .ops = &clk_branch2_ops,
1696 .flags = CLK_SET_RATE_PARENT,
1697 },
1698 },
1699 };
1700
1701 static struct clk_branch gcc_gmac0_cfg_clk = {
1702 .halt_reg = 0x68304,
1703 .clkr = {
1704 .enable_reg = 0x68304,
1705 .enable_mask = BIT(0),
1706 .hw.init = &(struct clk_init_data) {
1707 .name = "gcc_gmac0_cfg_clk",
1708 .parent_hws = (const struct clk_hw *[]) {
1709 &gmac_clk_src.clkr.hw,
1710 },
1711 .num_parents = 1,
1712 .flags = CLK_SET_RATE_PARENT,
1713 .ops = &clk_branch2_ops,
1714 },
1715 },
1716 };
1717
1718 static struct clk_branch gcc_gmac0_ptp_clk = {
1719 .halt_reg = 0x68300,
1720 .clkr = {
1721 .enable_reg = 0x68300,
1722 .enable_mask = BIT(0),
1723 .hw.init = &(struct clk_init_data) {
1724 .name = "gcc_gmac0_ptp_clk",
1725 .parent_hws = (const struct clk_hw *[]) {
1726 &gmac_clk_src.clkr.hw,
1727 },
1728 .num_parents = 1,
1729 .flags = CLK_SET_RATE_PARENT,
1730 .ops = &clk_branch2_ops,
1731 },
1732 },
1733 };
1734
1735 static struct clk_branch gcc_gmac0_rx_clk = {
1736 .halt_reg = 0x68240,
1737 .clkr = {
1738 .enable_reg = 0x68240,
1739 .enable_mask = BIT(0),
1740 .hw.init = &(struct clk_init_data) {
1741 .name = "gcc_gmac0_rx_clk",
1742 .parent_hws = (const struct clk_hw *[]) {
1743 &gmac0_rx_div_clk_src.clkr.hw,
1744 },
1745 .num_parents = 1,
1746 .ops = &clk_branch2_ops,
1747 .flags = CLK_SET_RATE_PARENT,
1748 },
1749 },
1750 };
1751
1752 static struct clk_branch gcc_gmac0_sys_clk = {
1753 .halt_reg = 0x68190,
1754 .halt_check = BRANCH_HALT_DELAY,
1755 .halt_bit = 31,
1756 .clkr = {
1757 .enable_reg = 0x683190,
1758 .enable_mask = BIT(0),
1759 .hw.init = &(struct clk_init_data) {
1760 .name = "gcc_gmac0_sys_clk",
1761 .parent_hws = (const struct clk_hw *[]) {
1762 &gmac_clk_src.clkr.hw,
1763 },
1764 .num_parents = 1,
1765 .flags = CLK_SET_RATE_PARENT,
1766 .ops = &clk_branch2_ops,
1767 },
1768 },
1769 };
1770
1771 static struct clk_branch gcc_gmac0_tx_clk = {
1772 .halt_reg = 0x68244,
1773 .clkr = {
1774 .enable_reg = 0x68244,
1775 .enable_mask = BIT(0),
1776 .hw.init = &(struct clk_init_data) {
1777 .name = "gcc_gmac0_tx_clk",
1778 .parent_hws = (const struct clk_hw *[]) {
1779 &gmac0_tx_div_clk_src.clkr.hw,
1780 },
1781 .num_parents = 1,
1782 .ops = &clk_branch2_ops,
1783 .flags = CLK_SET_RATE_PARENT,
1784 },
1785 },
1786 };
1787
1788 static struct clk_branch gcc_gmac1_cfg_clk = {
1789 .halt_reg = 0x68324,
1790 .clkr = {
1791 .enable_reg = 0x68324,
1792 .enable_mask = BIT(0),
1793 .hw.init = &(struct clk_init_data) {
1794 .name = "gcc_gmac1_cfg_clk",
1795 .parent_hws = (const struct clk_hw *[]) {
1796 &gmac_clk_src.clkr.hw,
1797 },
1798 .num_parents = 1,
1799 .flags = CLK_SET_RATE_PARENT,
1800 .ops = &clk_branch2_ops,
1801 },
1802 },
1803 };
1804
1805 static struct clk_branch gcc_gmac1_ptp_clk = {
1806 .halt_reg = 0x68320,
1807 .clkr = {
1808 .enable_reg = 0x68320,
1809 .enable_mask = BIT(0),
1810 .hw.init = &(struct clk_init_data) {
1811 .name = "gcc_gmac1_ptp_clk",
1812 .parent_hws = (const struct clk_hw *[]) {
1813 &gmac_clk_src.clkr.hw,
1814 },
1815 .num_parents = 1,
1816 .flags = CLK_SET_RATE_PARENT,
1817 .ops = &clk_branch2_ops,
1818 },
1819 },
1820 };
1821
1822 static struct clk_branch gcc_gmac1_rx_clk = {
1823 .halt_reg = 0x68248,
1824 .clkr = {
1825 .enable_reg = 0x68248,
1826 .enable_mask = BIT(0),
1827 .hw.init = &(struct clk_init_data) {
1828 .name = "gcc_gmac1_rx_clk",
1829 .parent_hws = (const struct clk_hw *[]) {
1830 &gmac1_rx_div_clk_src.clkr.hw,
1831 },
1832 .num_parents = 1,
1833 .ops = &clk_branch2_ops,
1834 .flags = CLK_SET_RATE_PARENT,
1835 },
1836 },
1837 };
1838
1839 static struct clk_branch gcc_gmac1_sys_clk = {
1840 .halt_reg = 0x68310,
1841 .clkr = {
1842 .enable_reg = 0x68310,
1843 .enable_mask = BIT(0),
1844 .hw.init = &(struct clk_init_data) {
1845 .name = "gcc_gmac1_sys_clk",
1846 .parent_hws = (const struct clk_hw *[]) {
1847 &gmac_clk_src.clkr.hw,
1848 },
1849 .num_parents = 1,
1850 .flags = CLK_SET_RATE_PARENT,
1851 .ops = &clk_branch2_ops,
1852 },
1853 },
1854 };
1855
1856 static struct clk_branch gcc_gmac1_tx_clk = {
1857 .halt_reg = 0x6824c,
1858 .clkr = {
1859 .enable_reg = 0x6824c,
1860 .enable_mask = BIT(0),
1861 .hw.init = &(struct clk_init_data) {
1862 .name = "gcc_gmac1_tx_clk",
1863 .parent_hws = (const struct clk_hw *[]) {
1864 &gmac1_tx_div_clk_src.clkr.hw,
1865 },
1866 .num_parents = 1,
1867 .ops = &clk_branch2_ops,
1868 .flags = CLK_SET_RATE_PARENT,
1869 },
1870 },
1871 };
1872
1873 static struct clk_branch gcc_gp1_clk = {
1874 .halt_reg = 0x08000,
1875 .clkr = {
1876 .enable_reg = 0x08000,
1877 .enable_mask = BIT(0),
1878 .hw.init = &(struct clk_init_data) {
1879 .name = "gcc_gp1_clk",
1880 .parent_hws = (const struct clk_hw *[]) {
1881 &gp1_clk_src.clkr.hw,
1882 },
1883 .num_parents = 1,
1884 .flags = CLK_SET_RATE_PARENT,
1885 .ops = &clk_branch2_ops,
1886 },
1887 },
1888 };
1889
1890 static struct clk_branch gcc_gp2_clk = {
1891 .halt_reg = 0x09000,
1892 .clkr = {
1893 .enable_reg = 0x09000,
1894 .enable_mask = BIT(0),
1895 .hw.init = &(struct clk_init_data) {
1896 .name = "gcc_gp2_clk",
1897 .parent_hws = (const struct clk_hw *[]) {
1898 &gp2_clk_src.clkr.hw,
1899 },
1900 .num_parents = 1,
1901 .flags = CLK_SET_RATE_PARENT,
1902 .ops = &clk_branch2_ops,
1903 },
1904 },
1905 };
1906
1907 static struct clk_branch gcc_gp3_clk = {
1908 .halt_reg = 0x0a000,
1909 .clkr = {
1910 .enable_reg = 0x0a000,
1911 .enable_mask = BIT(0),
1912 .hw.init = &(struct clk_init_data) {
1913 .name = "gcc_gp3_clk",
1914 .parent_hws = (const struct clk_hw *[]) {
1915 &gp3_clk_src.clkr.hw,
1916 },
1917 .num_parents = 1,
1918 .flags = CLK_SET_RATE_PARENT,
1919 .ops = &clk_branch2_ops,
1920 },
1921 },
1922 };
1923
1924 static struct clk_branch gcc_lpass_core_axim_clk = {
1925 .halt_reg = 0x2e048,
1926 .halt_check = BRANCH_VOTED,
1927 .clkr = {
1928 .enable_reg = 0x2e048,
1929 .enable_mask = BIT(0),
1930 .hw.init = &(struct clk_init_data) {
1931 .name = "gcc_lpass_core_axim_clk",
1932 .parent_hws = (const struct clk_hw *[]) {
1933 &lpass_axim_clk_src.clkr.hw,
1934 },
1935 .num_parents = 1,
1936 .flags = CLK_SET_RATE_PARENT,
1937 .ops = &clk_branch2_ops,
1938 },
1939 },
1940 };
1941
1942 static struct clk_branch gcc_lpass_sway_clk = {
1943 .halt_reg = 0x2e04c,
1944 .clkr = {
1945 .enable_reg = 0x2e04c,
1946 .enable_mask = BIT(0),
1947 .hw.init = &(struct clk_init_data) {
1948 .name = "gcc_lpass_sway_clk",
1949 .parent_hws = (const struct clk_hw *[]) {
1950 &lpass_sway_clk_src.clkr.hw,
1951 },
1952 .num_parents = 1,
1953 .flags = CLK_SET_RATE_PARENT,
1954 .ops = &clk_branch2_ops,
1955 },
1956 },
1957 };
1958
1959 static struct clk_branch gcc_mdio0_ahb_clk = {
1960 .halt_reg = 0x58004,
1961 .clkr = {
1962 .enable_reg = 0x58004,
1963 .enable_mask = BIT(0),
1964 .hw.init = &(struct clk_init_data) {
1965 .name = "gcc_mdioi0_ahb_clk",
1966 .parent_hws = (const struct clk_hw *[]) {
1967 &pcnoc_clk_src.hw,
1968 },
1969 .num_parents = 1,
1970 .flags = CLK_SET_RATE_PARENT,
1971 .ops = &clk_branch2_ops,
1972 },
1973 },
1974 };
1975
1976 static struct clk_branch gcc_mdio1_ahb_clk = {
1977 .halt_reg = 0x58014,
1978 .clkr = {
1979 .enable_reg = 0x58014,
1980 .enable_mask = BIT(0),
1981 .hw.init = &(struct clk_init_data) {
1982 .name = "gcc_mdio1_ahb_clk",
1983 .parent_hws = (const struct clk_hw *[]) {
1984 &pcnoc_clk_src.hw,
1985 },
1986 .num_parents = 1,
1987 .flags = CLK_SET_RATE_PARENT,
1988 .ops = &clk_branch2_ops,
1989 },
1990 },
1991 };
1992
1993 static struct clk_branch gcc_pcie0_ahb_clk = {
1994 .halt_reg = 0x75010,
1995 .clkr = {
1996 .enable_reg = 0x75010,
1997 .enable_mask = BIT(0),
1998 .hw.init = &(struct clk_init_data) {
1999 .name = "gcc_pcie0_ahb_clk",
2000 .parent_hws = (const struct clk_hw *[]) {
2001 &pcnoc_clk_src.hw,
2002 },
2003 .num_parents = 1,
2004 .flags = CLK_SET_RATE_PARENT,
2005 .ops = &clk_branch2_ops,
2006 },
2007 },
2008 };
2009
2010 static struct clk_branch gcc_pcie0_aux_clk = {
2011 .halt_reg = 0x75014,
2012 .clkr = {
2013 .enable_reg = 0x75014,
2014 .enable_mask = BIT(0),
2015 .hw.init = &(struct clk_init_data) {
2016 .name = "gcc_pcie0_aux_clk",
2017 .parent_hws = (const struct clk_hw *[]) {
2018 &pcie0_aux_clk_src.clkr.hw,
2019 },
2020 .num_parents = 1,
2021 .flags = CLK_SET_RATE_PARENT,
2022 .ops = &clk_branch2_ops,
2023 },
2024 },
2025 };
2026
2027 static struct clk_branch gcc_pcie0_axi_m_clk = {
2028 .halt_reg = 0x75008,
2029 .clkr = {
2030 .enable_reg = 0x75008,
2031 .enable_mask = BIT(0),
2032 .hw.init = &(struct clk_init_data) {
2033 .name = "gcc_pcie0_axi_m_clk",
2034 .parent_hws = (const struct clk_hw *[]) {
2035 &pcie0_axi_clk_src.clkr.hw,
2036 },
2037 .num_parents = 1,
2038 .flags = CLK_SET_RATE_PARENT,
2039 .ops = &clk_branch2_ops,
2040 },
2041 },
2042 };
2043
2044 static struct clk_branch gcc_pcie0_axi_s_bridge_clk = {
2045 .halt_reg = 0x75048,
2046 .clkr = {
2047 .enable_reg = 0x75048,
2048 .enable_mask = BIT(0),
2049 .hw.init = &(struct clk_init_data) {
2050 .name = "gcc_pcie0_axi_s_bridge_clk",
2051 .parent_hws = (const struct clk_hw *[]) {
2052 &pcie0_axi_clk_src.clkr.hw,
2053 },
2054 .num_parents = 1,
2055 .flags = CLK_SET_RATE_PARENT,
2056 .ops = &clk_branch2_ops,
2057 },
2058 },
2059 };
2060
2061 static struct clk_branch gcc_pcie0_axi_s_clk = {
2062 .halt_reg = 0x7500c,
2063 .clkr = {
2064 .enable_reg = 0x7500c,
2065 .enable_mask = BIT(0),
2066 .hw.init = &(struct clk_init_data) {
2067 .name = "gcc_pcie0_axi_s_clk",
2068 .parent_hws = (const struct clk_hw *[]) {
2069 &pcie0_axi_clk_src.clkr.hw,
2070 },
2071 .num_parents = 1,
2072 .flags = CLK_SET_RATE_PARENT,
2073 .ops = &clk_branch2_ops,
2074 },
2075 },
2076 };
2077
2078 static struct clk_branch gcc_pcie0_pipe_clk = {
2079 .halt_reg = 0x75018,
2080 .halt_check = BRANCH_HALT_DELAY,
2081 .halt_bit = 31,
2082 .clkr = {
2083 .enable_reg = 0x75018,
2084 .enable_mask = BIT(0),
2085 .hw.init = &(struct clk_init_data) {
2086 .name = "gcc_pcie0_pipe_clk",
2087 .parent_hws = (const struct clk_hw *[]) {
2088 &pcie0_pipe_clk_src.clkr.hw,
2089 },
2090 .num_parents = 1,
2091 .flags = CLK_SET_RATE_PARENT,
2092 .ops = &clk_branch2_ops,
2093 },
2094 },
2095 };
2096
2097 static struct clk_branch gcc_pcie1_ahb_clk = {
2098 .halt_reg = 0x76010,
2099 .clkr = {
2100 .enable_reg = 0x76010,
2101 .enable_mask = BIT(0),
2102 .hw.init = &(struct clk_init_data) {
2103 .name = "gcc_pcie1_ahb_clk",
2104 .parent_hws = (const struct clk_hw *[]) {
2105 &pcnoc_clk_src.hw,
2106 },
2107 .num_parents = 1,
2108 .flags = CLK_SET_RATE_PARENT,
2109 .ops = &clk_branch2_ops,
2110 },
2111 },
2112 };
2113
2114 static struct clk_branch gcc_pcie1_aux_clk = {
2115 .halt_reg = 0x76014,
2116 .clkr = {
2117 .enable_reg = 0x76014,
2118 .enable_mask = BIT(0),
2119 .hw.init = &(struct clk_init_data) {
2120 .name = "gcc_pcie1_aux_clk",
2121 .parent_hws = (const struct clk_hw *[]) {
2122 &pcie1_aux_clk_src.clkr.hw,
2123 },
2124 .num_parents = 1,
2125 .flags = CLK_SET_RATE_PARENT,
2126 .ops = &clk_branch2_ops,
2127 },
2128 },
2129 };
2130
2131 static struct clk_branch gcc_pcie1_axi_m_clk = {
2132 .halt_reg = 0x76008,
2133 .clkr = {
2134 .enable_reg = 0x76008,
2135 .enable_mask = BIT(0),
2136 .hw.init = &(struct clk_init_data) {
2137 .name = "gcc_pcie1_axi_m_clk",
2138 .parent_hws = (const struct clk_hw *[]) {
2139 &pcie1_axi_clk_src.clkr.hw,
2140 },
2141 .num_parents = 1,
2142 .flags = CLK_SET_RATE_PARENT,
2143 .ops = &clk_branch2_ops,
2144 },
2145 },
2146 };
2147
2148 static struct clk_branch gcc_pcie1_axi_s_bridge_clk = {
2149 .halt_reg = 0x76048,
2150 .clkr = {
2151 .enable_reg = 0x76048,
2152 .enable_mask = BIT(0),
2153 .hw.init = &(struct clk_init_data) {
2154 .name = "gcc_pcie1_axi_s_bridge_clk",
2155 .parent_hws = (const struct clk_hw *[]) {
2156 &pcie1_axi_clk_src.clkr.hw,
2157 },
2158 .num_parents = 1,
2159 .flags = CLK_SET_RATE_PARENT,
2160 .ops = &clk_branch2_ops,
2161 },
2162 },
2163 };
2164
2165 static struct clk_branch gcc_pcie1_axi_s_clk = {
2166 .halt_reg = 0x7600c,
2167 .clkr = {
2168 .enable_reg = 0x7600c,
2169 .enable_mask = BIT(0),
2170 .hw.init = &(struct clk_init_data) {
2171 .name = "gcc_pcie1_axi_s_clk",
2172 .parent_hws = (const struct clk_hw *[]) {
2173 &pcie1_axi_clk_src.clkr.hw,
2174 },
2175 .num_parents = 1,
2176 .flags = CLK_SET_RATE_PARENT,
2177 .ops = &clk_branch2_ops,
2178 },
2179 },
2180 };
2181
2182 static struct clk_branch gcc_pcie1_pipe_clk = {
2183 .halt_reg = 8,
2184 .halt_check = BRANCH_HALT_DELAY,
2185 .halt_bit = 31,
2186 .clkr = {
2187 .enable_reg = 0x76018,
2188 .enable_mask = BIT(0),
2189 .hw.init = &(struct clk_init_data) {
2190 .name = "gcc_pcie1_pipe_clk",
2191 .parent_hws = (const struct clk_hw *[]) {
2192 &pcie1_pipe_clk_src.clkr.hw,
2193 },
2194 .num_parents = 1,
2195 .flags = CLK_SET_RATE_PARENT,
2196 .ops = &clk_branch2_ops,
2197 },
2198 },
2199 };
2200
2201 static struct clk_branch gcc_prng_ahb_clk = {
2202 .halt_reg = 0x13004,
2203 .halt_check = BRANCH_HALT_VOTED,
2204 .clkr = {
2205 .enable_reg = 0x0b004,
2206 .enable_mask = BIT(8),
2207 .hw.init = &(struct clk_init_data) {
2208 .name = "gcc_prng_ahb_clk",
2209 .parent_hws = (const struct clk_hw *[]) {
2210 &pcnoc_clk_src.hw,
2211 },
2212 .num_parents = 1,
2213 .flags = CLK_SET_RATE_PARENT,
2214 .ops = &clk_branch2_ops,
2215 },
2216 },
2217 };
2218
2219 static struct clk_branch gcc_q6_ahb_clk = {
2220 .halt_reg = 0x59138,
2221 .clkr = {
2222 .enable_reg = 0x59138,
2223 .enable_mask = BIT(0),
2224 .hw.init = &(struct clk_init_data) {
2225 .name = "gcc_q6_ahb_clk",
2226 .parent_hws = (const struct clk_hw *[]) {
2227 &wcss_ahb_clk_src.clkr.hw,
2228 },
2229 .num_parents = 1,
2230 .flags = CLK_SET_RATE_PARENT,
2231 .ops = &clk_branch2_ops,
2232 },
2233 },
2234 };
2235
2236 static struct clk_branch gcc_q6_ahb_s_clk = {
2237 .halt_reg = 0x5914c,
2238 .clkr = {
2239 .enable_reg = 0x5914c,
2240 .enable_mask = BIT(0),
2241 .hw.init = &(struct clk_init_data) {
2242 .name = "gcc_q6_ahb_s_clk",
2243 .parent_hws = (const struct clk_hw *[]) {
2244 &wcss_ahb_clk_src.clkr.hw,
2245 },
2246 .num_parents = 1,
2247 .flags = CLK_SET_RATE_PARENT,
2248 .ops = &clk_branch2_ops,
2249 },
2250 },
2251 };
2252
2253 static struct clk_branch gcc_q6_axim_clk = {
2254 .halt_reg = 0x5913c,
2255 .clkr = {
2256 .enable_reg = 0x5913c,
2257 .enable_mask = BIT(0),
2258 .hw.init = &(struct clk_init_data) {
2259 .name = "gcc_q6_axim_clk",
2260 .parent_hws = (const struct clk_hw *[]) {
2261 &q6_axi_clk_src.clkr.hw,
2262 },
2263 .num_parents = 1,
2264 .flags = CLK_SET_RATE_PARENT,
2265 .ops = &clk_branch2_ops,
2266 },
2267 },
2268 };
2269
2270 static struct clk_branch gcc_q6_axim2_clk = {
2271 .halt_reg = 0x59150,
2272 .clkr = {
2273 .enable_reg = 0x59150,
2274 .enable_mask = BIT(0),
2275 .hw.init = &(struct clk_init_data) {
2276 .name = "gcc_q6_axim2_clk",
2277 .parent_hws = (const struct clk_hw *[]) {
2278 &q6_axi_clk_src.clkr.hw,
2279 },
2280 .num_parents = 1,
2281 .flags = CLK_SET_RATE_PARENT,
2282 .ops = &clk_branch2_ops,
2283 },
2284 },
2285 };
2286
2287 static struct clk_branch gcc_q6_axis_clk = {
2288 .halt_reg = 0x59154,
2289 .clkr = {
2290 .enable_reg = 0x59154,
2291 .enable_mask = BIT(0),
2292 .hw.init = &(struct clk_init_data) {
2293 .name = "gcc_q6_axis_clk",
2294 .parent_hws = (const struct clk_hw *[]) {
2295 &system_noc_clk_src.hw,
2296 },
2297 .num_parents = 1,
2298 .flags = CLK_SET_RATE_PARENT,
2299 .ops = &clk_branch2_ops,
2300 },
2301 },
2302 };
2303
2304 static struct clk_branch gcc_q6_tsctr_1to2_clk = {
2305 .halt_reg = 0x59148,
2306 .clkr = {
2307 .enable_reg = 0x59148,
2308 .enable_mask = BIT(0),
2309 .hw.init = &(struct clk_init_data) {
2310 .name = "gcc_q6_tsctr_1to2_clk",
2311 .parent_hws = (const struct clk_hw *[]) {
2312 &qdss_tsctr_div2_clk_src.hw,
2313 },
2314 .num_parents = 1,
2315 .flags = CLK_SET_RATE_PARENT,
2316 .ops = &clk_branch2_ops,
2317 },
2318 },
2319 };
2320
2321 static struct clk_branch gcc_q6ss_atbm_clk = {
2322 .halt_reg = 0x59144,
2323 .clkr = {
2324 .enable_reg = 0x59144,
2325 .enable_mask = BIT(0),
2326 .hw.init = &(struct clk_init_data) {
2327 .name = "gcc_q6ss_atbm_clk",
2328 .parent_hws = (const struct clk_hw *[]) {
2329 &qdss_at_clk_src.clkr.hw,
2330 },
2331 .num_parents = 1,
2332 .flags = CLK_SET_RATE_PARENT,
2333 .ops = &clk_branch2_ops,
2334 },
2335 },
2336 };
2337
2338 static struct clk_branch gcc_q6ss_pclkdbg_clk = {
2339 .halt_reg = 0x59140,
2340 .clkr = {
2341 .enable_reg = 0x59140,
2342 .enable_mask = BIT(0),
2343 .hw.init = &(struct clk_init_data) {
2344 .name = "gcc_q6ss_pclkdbg_clk",
2345 .parent_hws = (const struct clk_hw *[]) {
2346 &qdss_dap_sync_clk_src.hw,
2347 },
2348 .num_parents = 1,
2349 .flags = CLK_SET_RATE_PARENT,
2350 .ops = &clk_branch2_ops,
2351 },
2352 },
2353 };
2354
2355 static struct clk_branch gcc_q6ss_trig_clk = {
2356 .halt_reg = 0x59128,
2357 .clkr = {
2358 .enable_reg = 0x59128,
2359 .enable_mask = BIT(0),
2360 .hw.init = &(struct clk_init_data) {
2361 .name = "gcc_q6ss_trig_clk",
2362 .parent_hws = (const struct clk_hw *[]) {
2363 &qdss_dap_sync_clk_src.hw,
2364 },
2365 .num_parents = 1,
2366 .flags = CLK_SET_RATE_PARENT,
2367 .ops = &clk_branch2_ops,
2368 },
2369 },
2370 };
2371
2372 static struct clk_branch gcc_qdss_at_clk = {
2373 .halt_reg = 0x29024,
2374 .clkr = {
2375 .enable_reg = 0x29024,
2376 .enable_mask = BIT(0),
2377 .hw.init = &(struct clk_init_data) {
2378 .name = "gcc_qdss_at_clk",
2379 .parent_hws = (const struct clk_hw *[]) {
2380 &qdss_at_clk_src.clkr.hw,
2381 },
2382 .num_parents = 1,
2383 .flags = CLK_SET_RATE_PARENT,
2384 .ops = &clk_branch2_ops,
2385 },
2386 },
2387 };
2388
2389 static struct clk_branch gcc_qdss_dap_clk = {
2390 .halt_reg = 0x29084,
2391 .clkr = {
2392 .enable_reg = 0x29084,
2393 .enable_mask = BIT(0),
2394 .hw.init = &(struct clk_init_data) {
2395 .name = "gcc_qdss_dap_clk",
2396 .parent_hws = (const struct clk_hw *[]) {
2397 &qdss_tsctr_clk_src.clkr.hw,
2398 },
2399 .num_parents = 1,
2400 .flags = CLK_SET_RATE_PARENT,
2401 .ops = &clk_branch2_ops,
2402 },
2403 },
2404 };
2405
2406 static struct clk_branch gcc_qdss_cfg_ahb_clk = {
2407 .halt_reg = 0x29008,
2408 .clkr = {
2409 .enable_reg = 0x29008,
2410 .enable_mask = BIT(0),
2411 .hw.init = &(struct clk_init_data) {
2412 .name = "gcc_qdss_cfg_ahb_clk",
2413 .parent_hws = (const struct clk_hw *[]) {
2414 &pcnoc_clk_src.hw,
2415 },
2416 .num_parents = 1,
2417 .flags = CLK_SET_RATE_PARENT,
2418 .ops = &clk_branch2_ops,
2419 },
2420 },
2421 };
2422
2423 static struct clk_branch gcc_qdss_dap_ahb_clk = {
2424 .halt_reg = 0x29004,
2425 .clkr = {
2426 .enable_reg = 0x29004,
2427 .enable_mask = BIT(0),
2428 .hw.init = &(struct clk_init_data) {
2429 .name = "gcc_qdss_dap_ahb_clk",
2430 .parent_hws = (const struct clk_hw *[]) {
2431 &pcnoc_clk_src.hw,
2432 },
2433 .num_parents = 1,
2434 .flags = CLK_SET_RATE_PARENT,
2435 .ops = &clk_branch2_ops,
2436 },
2437 },
2438 };
2439
2440 static struct clk_branch gcc_qdss_etr_usb_clk = {
2441 .halt_reg = 0x29028,
2442 .clkr = {
2443 .enable_reg = 0x29028,
2444 .enable_mask = BIT(0),
2445 .hw.init = &(struct clk_init_data) {
2446 .name = "gcc_qdss_etr_usb_clk",
2447 .parent_hws = (const struct clk_hw *[]) {
2448 &system_noc_clk_src.hw,
2449 },
2450 .num_parents = 1,
2451 .flags = CLK_SET_RATE_PARENT,
2452 .ops = &clk_branch2_ops,
2453 },
2454 },
2455 };
2456
2457 static struct clk_branch gcc_qdss_eud_at_clk = {
2458 .halt_reg = 0x29020,
2459 .clkr = {
2460 .enable_reg = 0x29020,
2461 .enable_mask = BIT(0),
2462 .hw.init = &(struct clk_init_data) {
2463 .name = "gcc_qdss_eud_at_clk",
2464 .parent_hws = (const struct clk_hw *[]) {
2465 &eud_at_clk_src.hw,
2466 },
2467 .num_parents = 1,
2468 .flags = CLK_SET_RATE_PARENT,
2469 .ops = &clk_branch2_ops,
2470 },
2471 },
2472 };
2473
2474 static struct clk_branch gcc_qdss_stm_clk = {
2475 .halt_reg = 0x29044,
2476 .clkr = {
2477 .enable_reg = 0x29044,
2478 .enable_mask = BIT(0),
2479 .hw.init = &(struct clk_init_data) {
2480 .name = "gcc_qdss_stm_clk",
2481 .parent_hws = (const struct clk_hw *[]) {
2482 &qdss_stm_clk_src.clkr.hw,
2483 },
2484 .num_parents = 1,
2485 .flags = CLK_SET_RATE_PARENT,
2486 .ops = &clk_branch2_ops,
2487 },
2488 },
2489 };
2490
2491 static struct clk_branch gcc_qdss_traceclkin_clk = {
2492 .halt_reg = 0x29060,
2493 .clkr = {
2494 .enable_reg = 0x29060,
2495 .enable_mask = BIT(0),
2496 .hw.init = &(struct clk_init_data) {
2497 .name = "gcc_qdss_traceclkin_clk",
2498 .parent_hws = (const struct clk_hw *[]) {
2499 &qdss_traceclkin_clk_src.clkr.hw,
2500 },
2501 .num_parents = 1,
2502 .flags = CLK_SET_RATE_PARENT,
2503 .ops = &clk_branch2_ops,
2504 },
2505 },
2506 };
2507
2508 static struct clk_branch gcc_qdss_tsctr_div8_clk = {
2509 .halt_reg = 0x2908c,
2510 .clkr = {
2511 .enable_reg = 0x2908c,
2512 .enable_mask = BIT(0),
2513 .hw.init = &(struct clk_init_data) {
2514 .name = "gcc_qdss_tsctr_div8_clk",
2515 .parent_hws = (const struct clk_hw *[]) {
2516 &qdss_tsctr_clk_src.clkr.hw,
2517 },
2518 .num_parents = 1,
2519 .flags = CLK_SET_RATE_PARENT,
2520 .ops = &clk_branch2_ops,
2521 },
2522 },
2523 };
2524
2525 static struct clk_branch gcc_qpic_ahb_clk = {
2526 .halt_reg = 0x57024,
2527 .clkr = {
2528 .enable_reg = 0x57024,
2529 .enable_mask = BIT(0),
2530 .hw.init = &(struct clk_init_data) {
2531 .name = "gcc_qpic_ahb_clk",
2532 .parent_hws = (const struct clk_hw *[]) {
2533 &pcnoc_clk_src.hw,
2534 },
2535 .num_parents = 1,
2536 .flags = CLK_SET_RATE_PARENT,
2537 .ops = &clk_branch2_ops,
2538 },
2539 },
2540 };
2541
2542 static struct clk_branch gcc_qpic_clk = {
2543 .halt_reg = 0x57020,
2544 .clkr = {
2545 .enable_reg = 0x57020,
2546 .enable_mask = BIT(0),
2547 .hw.init = &(struct clk_init_data) {
2548 .name = "gcc_qpic_clk",
2549 .parent_hws = (const struct clk_hw *[]) {
2550 &pcnoc_clk_src.hw,
2551 },
2552 .num_parents = 1,
2553 .flags = CLK_SET_RATE_PARENT,
2554 .ops = &clk_branch2_ops,
2555 },
2556 },
2557 };
2558
2559 static struct clk_branch gcc_qpic_io_macro_clk = {
2560 .halt_reg = 0x5701c,
2561 .clkr = {
2562 .enable_reg = 0x5701c,
2563 .enable_mask = BIT(0),
2564 .hw.init = &(struct clk_init_data) {
2565 .name = "gcc_qpic_io_macro_clk",
2566 .parent_hws = (const struct clk_hw *[]) {
2567 &qpic_io_macro_clk_src.clkr.hw,
2568 },
2569 .num_parents = 1,
2570 .flags = CLK_SET_RATE_PARENT,
2571 .ops = &clk_branch2_ops,
2572 },
2573 },
2574 };
2575
2576 static struct clk_branch gcc_sdcc1_ahb_clk = {
2577 .halt_reg = 0x4201c,
2578 .clkr = {
2579 .enable_reg = 0x4201c,
2580 .enable_mask = BIT(0),
2581 .hw.init = &(struct clk_init_data) {
2582 .name = "gcc_sdcc1_ahb_clk",
2583 .parent_hws = (const struct clk_hw *[]) {
2584 &pcnoc_clk_src.hw,
2585 },
2586 .num_parents = 1,
2587 .flags = CLK_SET_RATE_PARENT,
2588 .ops = &clk_branch2_ops,
2589 },
2590 },
2591 };
2592
2593 static struct clk_branch gcc_sdcc1_apps_clk = {
2594 .halt_reg = 0x42018,
2595 .clkr = {
2596 .enable_reg = 0x42018,
2597 .enable_mask = BIT(0),
2598 .hw.init = &(struct clk_init_data) {
2599 .name = "gcc_sdcc1_apps_clk",
2600 .parent_hws = (const struct clk_hw *[]) {
2601 &sdcc1_apps_clk_src.clkr.hw,
2602 },
2603 .num_parents = 1,
2604 .flags = CLK_SET_RATE_PARENT,
2605 .ops = &clk_branch2_ops,
2606 },
2607 },
2608 };
2609
2610 static struct clk_branch gcc_snoc_gmac0_ahb_clk = {
2611 .halt_reg = 0x260a0,
2612 .clkr = {
2613 .enable_reg = 0x260a0,
2614 .enable_mask = BIT(0),
2615 .hw.init = &(struct clk_init_data) {
2616 .name = "gcc_snoc_gmac0_ahb_clk",
2617 .parent_hws = (const struct clk_hw *[]) {
2618 &gmac_clk_src.clkr.hw,
2619 },
2620 .num_parents = 1,
2621 .flags = CLK_SET_RATE_PARENT,
2622 .ops = &clk_branch2_ops,
2623 },
2624 },
2625 };
2626
2627 static struct clk_branch gcc_snoc_gmac0_axi_clk = {
2628 .halt_reg = 0x26084,
2629 .clkr = {
2630 .enable_reg = 0x26084,
2631 .enable_mask = BIT(0),
2632 .hw.init = &(struct clk_init_data) {
2633 .name = "gcc_snoc_gmac0_axi_clk",
2634 .parent_hws = (const struct clk_hw *[]) {
2635 &gmac_clk_src.clkr.hw,
2636 },
2637 .num_parents = 1,
2638 .flags = CLK_SET_RATE_PARENT,
2639 .ops = &clk_branch2_ops,
2640 },
2641 },
2642 };
2643
2644 static struct clk_branch gcc_snoc_gmac1_ahb_clk = {
2645 .halt_reg = 0x260a4,
2646 .clkr = {
2647 .enable_reg = 0x260a4,
2648 .enable_mask = BIT(0),
2649 .hw.init = &(struct clk_init_data) {
2650 .name = "gcc_snoc_gmac1_ahb_clk",
2651 .parent_hws = (const struct clk_hw *[]) {
2652 &gmac_clk_src.clkr.hw,
2653 },
2654 .num_parents = 1,
2655 .flags = CLK_SET_RATE_PARENT,
2656 .ops = &clk_branch2_ops,
2657 },
2658 },
2659 };
2660
2661 static struct clk_branch gcc_snoc_gmac1_axi_clk = {
2662 .halt_reg = 0x26088,
2663 .clkr = {
2664 .enable_reg = 0x26088,
2665 .enable_mask = BIT(0),
2666 .hw.init = &(struct clk_init_data) {
2667 .name = "gcc_snoc_gmac1_axi_clk",
2668 .parent_hws = (const struct clk_hw *[]) {
2669 &gmac_clk_src.clkr.hw,
2670 },
2671 .num_parents = 1,
2672 .flags = CLK_SET_RATE_PARENT,
2673 .ops = &clk_branch2_ops,
2674 },
2675 },
2676 };
2677
2678 static struct clk_branch gcc_snoc_lpass_axim_clk = {
2679 .halt_reg = 0x26074,
2680 .clkr = {
2681 .enable_reg = 0x26074,
2682 .enable_mask = BIT(0),
2683 .hw.init = &(struct clk_init_data) {
2684 .name = "gcc_snoc_lpass_axim_clk",
2685 .parent_hws = (const struct clk_hw *[]) {
2686 &lpass_axim_clk_src.clkr.hw,
2687 },
2688 .num_parents = 1,
2689 .flags = CLK_SET_RATE_PARENT,
2690 .ops = &clk_branch2_ops,
2691 },
2692 },
2693 };
2694
2695 static struct clk_branch gcc_snoc_lpass_sway_clk = {
2696 .halt_reg = 0x26078,
2697 .clkr = {
2698 .enable_reg = 0x26078,
2699 .enable_mask = BIT(0),
2700 .hw.init = &(struct clk_init_data) {
2701 .name = "gcc_snoc_lpass_sway_clk",
2702 .parent_hws = (const struct clk_hw *[]) {
2703 &lpass_sway_clk_src.clkr.hw,
2704 },
2705 .num_parents = 1,
2706 .flags = CLK_SET_RATE_PARENT,
2707 .ops = &clk_branch2_ops,
2708 },
2709 },
2710 };
2711
2712 static struct clk_branch gcc_snoc_ubi0_axi_clk = {
2713 .halt_reg = 0x26094,
2714 .clkr = {
2715 .enable_reg = 0x26094,
2716 .enable_mask = BIT(0),
2717 .hw.init = &(struct clk_init_data) {
2718 .name = "gcc_snoc_ubi0_axi_clk",
2719 .parent_hws = (const struct clk_hw *[]) {
2720 &ubi0_axi_clk_src.clkr.hw,
2721 },
2722 .num_parents = 1,
2723 .flags = CLK_SET_RATE_PARENT,
2724 .ops = &clk_branch2_ops,
2725 },
2726 },
2727 };
2728
2729 static struct clk_branch gcc_sys_noc_pcie0_axi_clk = {
2730 .halt_reg = 0x26048,
2731 .clkr = {
2732 .enable_reg = 0x26048,
2733 .enable_mask = BIT(0),
2734 .hw.init = &(struct clk_init_data) {
2735 .name = "gcc_sys_noc_pcie0_axi_clk",
2736 .parent_hws = (const struct clk_hw *[]) {
2737 &pcie0_axi_clk_src.clkr.hw,
2738 },
2739 .num_parents = 1,
2740 .flags = CLK_SET_RATE_PARENT,
2741 .ops = &clk_branch2_ops,
2742 },
2743 },
2744 };
2745
2746 static struct clk_branch gcc_sys_noc_pcie1_axi_clk = {
2747 .halt_reg = 0x2604c,
2748 .clkr = {
2749 .enable_reg = 0x2604c,
2750 .enable_mask = BIT(0),
2751 .hw.init = &(struct clk_init_data) {
2752 .name = "gcc_sys_noc_pcie1_axi_clk",
2753 .parent_hws = (const struct clk_hw *[]) {
2754 &pcie1_axi_clk_src.clkr.hw,
2755 },
2756 .num_parents = 1,
2757 .flags = CLK_SET_RATE_PARENT,
2758 .ops = &clk_branch2_ops,
2759 },
2760 },
2761 };
2762
2763 static struct clk_branch gcc_sys_noc_qdss_stm_axi_clk = {
2764 .halt_reg = 0x26024,
2765 .clkr = {
2766 .enable_reg = 0x26024,
2767 .enable_mask = BIT(0),
2768 .hw.init = &(struct clk_init_data) {
2769 .name = "gcc_sys_noc_qdss_stm_axi_clk",
2770 .parent_hws = (const struct clk_hw *[]) {
2771 &qdss_stm_clk_src.clkr.hw,
2772 },
2773 .num_parents = 1,
2774 .flags = CLK_SET_RATE_PARENT,
2775 .ops = &clk_branch2_ops,
2776 },
2777 },
2778 };
2779
2780 static struct clk_branch gcc_sys_noc_usb0_axi_clk = {
2781 .halt_reg = 0x26040,
2782 .clkr = {
2783 .enable_reg = 0x26040,
2784 .enable_mask = BIT(0),
2785 .hw.init = &(struct clk_init_data) {
2786 .name = "gcc_sys_noc_usb0_axi_clk",
2787 .parent_hws = (const struct clk_hw *[]) {
2788 &usb0_master_clk_src.clkr.hw,
2789 },
2790 .num_parents = 1,
2791 .flags = CLK_SET_RATE_PARENT,
2792 .ops = &clk_branch2_ops,
2793 },
2794 },
2795 };
2796
2797 static struct clk_branch gcc_sys_noc_wcss_ahb_clk = {
2798 .halt_reg = 0x26034,
2799 .clkr = {
2800 .enable_reg = 0x26034,
2801 .enable_mask = BIT(0),
2802 .hw.init = &(struct clk_init_data) {
2803 .name = "gcc_sys_noc_wcss_ahb_clk",
2804 .parent_hws = (const struct clk_hw *[]) {
2805 &wcss_ahb_clk_src.clkr.hw,
2806 },
2807 .num_parents = 1,
2808 .flags = CLK_SET_RATE_PARENT,
2809 .ops = &clk_branch2_ops,
2810 },
2811 },
2812 };
2813
2814 static struct clk_branch gcc_ubi0_axi_clk = {
2815 .halt_reg = 0x68200,
2816 .halt_check = BRANCH_HALT_DELAY,
2817 .clkr = {
2818 .enable_reg = 0x68200,
2819 .enable_mask = BIT(0),
2820 .hw.init = &(struct clk_init_data) {
2821 .name = "gcc_ubi0_axi_clk",
2822 .parent_hws = (const struct clk_hw *[]) {
2823 &ubi0_axi_clk_src.clkr.hw,
2824 },
2825 .num_parents = 1,
2826 .flags = CLK_SET_RATE_PARENT,
2827 .ops = &clk_branch2_ops,
2828 },
2829 },
2830 };
2831
2832 static struct clk_branch gcc_ubi0_cfg_clk = {
2833 .halt_reg = 0x68160,
2834 .halt_check = BRANCH_HALT_DELAY,
2835 .clkr = {
2836 .enable_reg = 0x68160,
2837 .enable_mask = BIT(0),
2838 .hw.init = &(struct clk_init_data) {
2839 .name = "gcc_ubi0_cfg_clk",
2840 .parent_hws = (const struct clk_hw *[]) {
2841 &pcnoc_clk_src.hw,
2842 },
2843 .num_parents = 1,
2844 .flags = CLK_SET_RATE_PARENT,
2845 .ops = &clk_branch2_ops,
2846 },
2847 },
2848 };
2849
2850 static struct clk_branch gcc_ubi0_dbg_clk = {
2851 .halt_reg = 0x68214,
2852 .halt_check = BRANCH_HALT_DELAY,
2853 .clkr = {
2854 .enable_reg = 0x68214,
2855 .enable_mask = BIT(0),
2856 .hw.init = &(struct clk_init_data) {
2857 .name = "gcc_ubi0_dbg_clk",
2858 .parent_hws = (const struct clk_hw *[]) {
2859 &qdss_tsctr_clk_src.clkr.hw,
2860 },
2861 .num_parents = 1,
2862 .flags = CLK_SET_RATE_PARENT,
2863 .ops = &clk_branch2_ops,
2864 },
2865 },
2866 };
2867
2868 static struct clk_branch gcc_ubi0_core_clk = {
2869 .halt_reg = 0x68210,
2870 .halt_check = BRANCH_HALT_DELAY,
2871 .clkr = {
2872 .enable_reg = 0x68210,
2873 .enable_mask = BIT(0),
2874 .hw.init = &(struct clk_init_data) {
2875 .name = "gcc_ubi0_core_clk",
2876 .parent_hws = (const struct clk_hw *[]) {
2877 &ubi0_core_clk_src.clkr.hw,
2878 },
2879 .num_parents = 1,
2880 .flags = CLK_SET_RATE_PARENT,
2881 .ops = &clk_branch2_ops,
2882 },
2883 },
2884 };
2885
2886 static struct clk_branch gcc_ubi0_nc_axi_clk = {
2887 .halt_reg = 0x68204,
2888 .halt_check = BRANCH_HALT_DELAY,
2889 .clkr = {
2890 .enable_reg = 0x68204,
2891 .enable_mask = BIT(0),
2892 .hw.init = &(struct clk_init_data) {
2893 .name = "gcc_ubi0_nc_axi_clk",
2894 .parent_hws = (const struct clk_hw *[]) {
2895 &system_noc_clk_src.hw,
2896 },
2897 .num_parents = 1,
2898 .flags = CLK_SET_RATE_PARENT,
2899 .ops = &clk_branch2_ops,
2900 },
2901 },
2902 };
2903
2904 static struct clk_branch gcc_ubi0_utcm_clk = {
2905 .halt_reg = 0x68208,
2906 .halt_check = BRANCH_HALT_DELAY,
2907 .clkr = {
2908 .enable_reg = 0x68208,
2909 .enable_mask = BIT(0),
2910 .hw.init = &(struct clk_init_data) {
2911 .name = "gcc_ubi0_utcm_clk",
2912 .parent_hws = (const struct clk_hw *[]) {
2913 &system_noc_clk_src.hw,
2914 },
2915 .num_parents = 1,
2916 .flags = CLK_SET_RATE_PARENT,
2917 .ops = &clk_branch2_ops,
2918 },
2919 },
2920 };
2921
2922 static struct clk_branch gcc_uniphy_ahb_clk = {
2923 .halt_reg = 0x56108,
2924 .clkr = {
2925 .enable_reg = 0x56108,
2926 .enable_mask = BIT(0),
2927 .hw.init = &(struct clk_init_data) {
2928 .name = "gcc_uniphy_ahb_clk",
2929 .parent_hws = (const struct clk_hw *[]) {
2930 &pcnoc_clk_src.hw,
2931 },
2932 .num_parents = 1,
2933 .flags = CLK_SET_RATE_PARENT,
2934 .ops = &clk_branch2_ops,
2935 },
2936 },
2937 };
2938
2939 static struct clk_branch gcc_uniphy_rx_clk = {
2940 .halt_reg = 0x56110,
2941 .clkr = {
2942 .enable_reg = 0x56110,
2943 .enable_mask = BIT(0),
2944 .hw.init = &(struct clk_init_data) {
2945 .name = "gcc_uniphy_rx_clk",
2946 .parent_hws = (const struct clk_hw *[]) {
2947 &gmac1_rx_div_clk_src.clkr.hw,
2948 },
2949 .num_parents = 1,
2950 .ops = &clk_branch2_ops,
2951 .flags = CLK_SET_RATE_PARENT,
2952 },
2953 },
2954 };
2955
2956 static struct clk_branch gcc_uniphy_tx_clk = {
2957 .halt_reg = 0x56114,
2958 .clkr = {
2959 .enable_reg = 0x56114,
2960 .enable_mask = BIT(0),
2961 .hw.init = &(struct clk_init_data) {
2962 .name = "gcc_uniphy_tx_clk",
2963 .parent_hws = (const struct clk_hw *[]) {
2964 &gmac1_tx_div_clk_src.clkr.hw,
2965 },
2966 .num_parents = 1,
2967 .ops = &clk_branch2_ops,
2968 .flags = CLK_SET_RATE_PARENT,
2969 },
2970 },
2971 };
2972
2973 static struct clk_branch gcc_uniphy_sys_clk = {
2974 .halt_reg = 0x5610c,
2975 .clkr = {
2976 .enable_reg = 0x5610c,
2977 .enable_mask = BIT(0),
2978 .hw.init = &(struct clk_init_data) {
2979 .name = "gcc_uniphy_sys_clk",
2980 .parent_hws = (const struct clk_hw *[]) {
2981 &gcc_xo_clk_src.clkr.hw,
2982 },
2983 .num_parents = 1,
2984 .flags = CLK_SET_RATE_PARENT,
2985 .ops = &clk_branch2_ops,
2986 },
2987 },
2988 };
2989
2990 static struct clk_branch gcc_usb0_aux_clk = {
2991 .halt_reg = 0x3e044,
2992 .clkr = {
2993 .enable_reg = 0x3e044,
2994 .enable_mask = BIT(0),
2995 .hw.init = &(struct clk_init_data) {
2996 .name = "gcc_usb0_aux_clk",
2997 .parent_hws = (const struct clk_hw *[]) {
2998 &usb0_aux_clk_src.clkr.hw,
2999 },
3000 .num_parents = 1,
3001 .flags = CLK_SET_RATE_PARENT,
3002 .ops = &clk_branch2_ops,
3003 },
3004 },
3005 };
3006
3007 static struct clk_branch gcc_usb0_eud_at_clk = {
3008 .halt_reg = 0x3e04c,
3009 .halt_check = BRANCH_HALT_VOTED,
3010 .clkr = {
3011 .enable_reg = 0x3e04c,
3012 .enable_mask = BIT(0),
3013 .hw.init = &(struct clk_init_data) {
3014 .name = "gcc_usb0_eud_at_clk",
3015 .parent_hws = (const struct clk_hw *[]) {
3016 &eud_at_clk_src.hw,
3017 },
3018 .num_parents = 1,
3019 .flags = CLK_SET_RATE_PARENT,
3020 .ops = &clk_branch2_ops,
3021 },
3022 },
3023 };
3024
3025 static struct clk_branch gcc_usb0_lfps_clk = {
3026 .halt_reg = 0x3e050,
3027 .clkr = {
3028 .enable_reg = 0x3e050,
3029 .enable_mask = BIT(0),
3030 .hw.init = &(struct clk_init_data) {
3031 .name = "gcc_usb0_lfps_clk",
3032 .parent_hws = (const struct clk_hw *[]) {
3033 &usb0_lfps_clk_src.clkr.hw,
3034 },
3035 .num_parents = 1,
3036 .flags = CLK_SET_RATE_PARENT,
3037 .ops = &clk_branch2_ops,
3038 },
3039 },
3040 };
3041
3042 static struct clk_branch gcc_usb0_master_clk = {
3043 .halt_reg = 0x3e000,
3044 .clkr = {
3045 .enable_reg = 0x3e000,
3046 .enable_mask = BIT(0),
3047 .hw.init = &(struct clk_init_data) {
3048 .name = "gcc_usb0_master_clk",
3049 .parent_hws = (const struct clk_hw *[]) {
3050 &usb0_master_clk_src.clkr.hw,
3051 },
3052 .num_parents = 1,
3053 .flags = CLK_SET_RATE_PARENT,
3054 .ops = &clk_branch2_ops,
3055 },
3056 },
3057 };
3058
3059 static struct clk_branch gcc_usb0_mock_utmi_clk = {
3060 .halt_reg = 0x3e008,
3061 .clkr = {
3062 .enable_reg = 0x3e008,
3063 .enable_mask = BIT(0),
3064 .hw.init = &(struct clk_init_data) {
3065 .name = "gcc_usb0_mock_utmi_clk",
3066 .parent_hws = (const struct clk_hw *[]) {
3067 &usb0_mock_utmi_clk_src.clkr.hw,
3068 },
3069 .num_parents = 1,
3070 .flags = CLK_SET_RATE_PARENT,
3071 .ops = &clk_branch2_ops,
3072 },
3073 },
3074 };
3075
3076 static struct clk_branch gcc_usb0_phy_cfg_ahb_clk = {
3077 .halt_reg = 0x3e080,
3078 .clkr = {
3079 .enable_reg = 0x3e080,
3080 .enable_mask = BIT(0),
3081 .hw.init = &(struct clk_init_data) {
3082 .name = "gcc_usb0_phy_cfg_ahb_clk",
3083 .parent_hws = (const struct clk_hw *[]) {
3084 &pcnoc_clk_src.hw,
3085 },
3086 .num_parents = 1,
3087 .flags = CLK_SET_RATE_PARENT,
3088 .ops = &clk_branch2_ops,
3089 },
3090 },
3091 };
3092
3093 static struct clk_branch gcc_usb0_sleep_clk = {
3094 .halt_reg = 0x3e004,
3095 .clkr = {
3096 .enable_reg = 0x3e004,
3097 .enable_mask = BIT(0),
3098 .hw.init = &(struct clk_init_data) {
3099 .name = "gcc_usb0_sleep_clk",
3100 .parent_hws = (const struct clk_hw *[]) {
3101 &gcc_sleep_clk_src.clkr.hw,
3102 },
3103 .num_parents = 1,
3104 .flags = CLK_SET_RATE_PARENT,
3105 .ops = &clk_branch2_ops,
3106 },
3107 },
3108 };
3109
3110 static struct clk_branch gcc_usb0_pipe_clk = {
3111 .halt_reg = 0x3e040,
3112 .halt_check = BRANCH_HALT_DELAY,
3113 .clkr = {
3114 .enable_reg = 0x3e040,
3115 .enable_mask = BIT(0),
3116 .hw.init = &(struct clk_init_data) {
3117 .name = "gcc_usb0_pipe_clk",
3118 .parent_hws = (const struct clk_hw *[]) {
3119 &usb0_pipe_clk_src.clkr.hw,
3120 },
3121 .num_parents = 1,
3122 .flags = CLK_SET_RATE_PARENT,
3123 .ops = &clk_branch2_ops,
3124 },
3125 },
3126 };
3127
3128 static struct clk_branch gcc_wcss_acmt_clk = {
3129 .halt_reg = 0x59064,
3130 .clkr = {
3131 .enable_reg = 0x59064,
3132 .enable_mask = BIT(0),
3133 .hw.init = &(struct clk_init_data) {
3134 .name = "gcc_wcss_acmt_clk",
3135 .parent_hws = (const struct clk_hw *[]) {
3136 &wcss_ahb_clk_src.clkr.hw,
3137 },
3138 .num_parents = 1,
3139 .flags = CLK_SET_RATE_PARENT,
3140 .ops = &clk_branch2_ops,
3141 },
3142 },
3143 };
3144
3145 static struct clk_branch gcc_wcss_ahb_s_clk = {
3146 .halt_reg = 0x59034,
3147 .clkr = {
3148 .enable_reg = 0x59034,
3149 .enable_mask = BIT(0),
3150 .hw.init = &(struct clk_init_data) {
3151 .name = "gcc_wcss_ahb_s_clk",
3152 .parent_hws = (const struct clk_hw *[]) {
3153 &wcss_ahb_clk_src.clkr.hw,
3154 },
3155 .num_parents = 1,
3156 .flags = CLK_SET_RATE_PARENT,
3157 .ops = &clk_branch2_ops,
3158 },
3159 },
3160 };
3161
3162 static struct clk_branch gcc_wcss_axi_m_clk = {
3163 .halt_reg = 0x5903c,
3164 .clkr = {
3165 .enable_reg = 0x5903c,
3166 .enable_mask = BIT(0),
3167 .hw.init = &(struct clk_init_data) {
3168 .name = "gcc_wcss_axi_m_clk",
3169 .parent_hws = (const struct clk_hw *[]) {
3170 &system_noc_clk_src.hw,
3171 },
3172 .num_parents = 1,
3173 .flags = CLK_SET_RATE_PARENT,
3174 .ops = &clk_branch2_ops,
3175 },
3176 },
3177 };
3178
3179 static struct clk_branch gcc_wcss_axi_s_clk = {
3180 .halt_reg = 0x59068,
3181 .clkr = {
3182 .enable_reg = 0x59068,
3183 .enable_mask = BIT(0),
3184 .hw.init = &(struct clk_init_data) {
3185 .name = "gcc_wi_s_clk",
3186 .parent_hws = (const struct clk_hw *[]) {
3187 &system_noc_clk_src.hw,
3188 },
3189 .num_parents = 1,
3190 .flags = CLK_SET_RATE_PARENT,
3191 .ops = &clk_branch2_ops,
3192 },
3193 },
3194 };
3195
3196 static struct clk_branch gcc_wcss_dbg_ifc_apb_bdg_clk = {
3197 .halt_reg = 0x59050,
3198 .clkr = {
3199 .enable_reg = 0x59050,
3200 .enable_mask = BIT(0),
3201 .hw.init = &(struct clk_init_data) {
3202 .name = "gcc_wcss_dbg_ifc_apb_bdg_clk",
3203 .parent_hws = (const struct clk_hw *[]) {
3204 &qdss_dap_sync_clk_src.hw,
3205 },
3206 .num_parents = 1,
3207 .flags = CLK_SET_RATE_PARENT,
3208 .ops = &clk_branch2_ops,
3209 },
3210 },
3211 };
3212
3213 static struct clk_branch gcc_wcss_dbg_ifc_apb_clk = {
3214 .halt_reg = 0x59040,
3215 .clkr = {
3216 .enable_reg = 0x59040,
3217 .enable_mask = BIT(0),
3218 .hw.init = &(struct clk_init_data) {
3219 .name = "gcc_wcss_dbg_ifc_apb_clk",
3220 .parent_hws = (const struct clk_hw *[]) {
3221 &qdss_dap_sync_clk_src.hw,
3222 },
3223 .num_parents = 1,
3224 .flags = CLK_SET_RATE_PARENT,
3225 .ops = &clk_branch2_ops,
3226 },
3227 },
3228 };
3229
3230 static struct clk_branch gcc_wcss_dbg_ifc_atb_bdg_clk = {
3231 .halt_reg = 0x59054,
3232 .clkr = {
3233 .enable_reg = 0x59054,
3234 .enable_mask = BIT(0),
3235 .hw.init = &(struct clk_init_data) {
3236 .name = "gcc_wcss_dbg_ifc_atb_bdg_clk",
3237 .parent_hws = (const struct clk_hw *[]) {
3238 &qdss_at_clk_src.clkr.hw,
3239 },
3240 .num_parents = 1,
3241 .flags = CLK_SET_RATE_PARENT,
3242 .ops = &clk_branch2_ops,
3243 },
3244 },
3245 };
3246
3247 static struct clk_branch gcc_wcss_dbg_ifc_atb_clk = {
3248 .halt_reg = 0x59044,
3249 .clkr = {
3250 .enable_reg = 0x59044,
3251 .enable_mask = BIT(0),
3252 .hw.init = &(struct clk_init_data) {
3253 .name = "gcc_wcss_dbg_ifc_atb_clk",
3254 .parent_hws = (const struct clk_hw *[]) {
3255 &qdss_at_clk_src.clkr.hw,
3256 },
3257 .num_parents = 1,
3258 .flags = CLK_SET_RATE_PARENT,
3259 .ops = &clk_branch2_ops,
3260 },
3261 },
3262 };
3263
3264 static struct clk_branch gcc_wcss_dbg_ifc_dapbus_bdg_clk = {
3265 .halt_reg = 0x59060,
3266 .clkr = {
3267 .enable_reg = 0x59060,
3268 .enable_mask = BIT(0),
3269 .hw.init = &(struct clk_init_data) {
3270 .name = "gcc_wcss_dbg_ifc_dapbus_bdg_clk",
3271 .parent_hws = (const struct clk_hw *[]) {
3272 &qdss_dap_sync_clk_src.hw,
3273 },
3274 .num_parents = 1,
3275 .flags = CLK_SET_RATE_PARENT,
3276 .ops = &clk_branch2_ops,
3277 },
3278 },
3279 };
3280
3281 static struct clk_branch gcc_wcss_dbg_ifc_dapbus_clk = {
3282 .halt_reg = 0x5905c,
3283 .clkr = {
3284 .enable_reg = 0x5905c,
3285 .enable_mask = BIT(0),
3286 .hw.init = &(struct clk_init_data) {
3287 .name = "gcc_wcss_dbg_ifc_dapbus_clk",
3288 .parent_hws = (const struct clk_hw *[]) {
3289 &qdss_dap_sync_clk_src.hw,
3290 },
3291 .num_parents = 1,
3292 .flags = CLK_SET_RATE_PARENT,
3293 .ops = &clk_branch2_ops,
3294 },
3295 },
3296 };
3297
3298 static struct clk_branch gcc_wcss_dbg_ifc_nts_bdg_clk = {
3299 .halt_reg = 0x59058,
3300 .clkr = {
3301 .enable_reg = 0x59058,
3302 .enable_mask = BIT(0),
3303 .hw.init = &(struct clk_init_data) {
3304 .name = "gcc_wcss_dbg_ifc_nts_bdg_clk",
3305 .parent_hws = (const struct clk_hw *[]) {
3306 &qdss_tsctr_div2_clk_src.hw,
3307 },
3308 .num_parents = 1,
3309 .flags = CLK_SET_RATE_PARENT,
3310 .ops = &clk_branch2_ops,
3311 },
3312 },
3313 };
3314
3315 static struct clk_branch gcc_wcss_dbg_ifc_nts_clk = {
3316 .halt_reg = 0x59048,
3317 .clkr = {
3318 .enable_reg = 0x59048,
3319 .enable_mask = BIT(0),
3320 .hw.init = &(struct clk_init_data) {
3321 .name = "gcc_wcss_dbg_ifc_nts_clk",
3322 .parent_hws = (const struct clk_hw *[]) {
3323 &qdss_tsctr_div2_clk_src.hw,
3324 },
3325 .num_parents = 1,
3326 .flags = CLK_SET_RATE_PARENT,
3327 .ops = &clk_branch2_ops,
3328 },
3329 },
3330 };
3331
3332 static struct clk_branch gcc_wcss_ecahb_clk = {
3333 .halt_reg = 0x59038,
3334 .clkr = {
3335 .enable_reg = 0x59038,
3336 .enable_mask = BIT(0),
3337 .hw.init = &(struct clk_init_data) {
3338 .name = "gcc_wcss_ecahb_clk",
3339 .parent_hws = (const struct clk_hw *[]) {
3340 &wcss_ahb_clk_src.clkr.hw,
3341 },
3342 .num_parents = 1,
3343 .flags = CLK_SET_RATE_PARENT,
3344 .ops = &clk_branch2_ops,
3345 },
3346 },
3347 };
3348
3349 static struct clk_hw *gcc_ipq5018_hws[] = {
3350 &gpll0_out_main_div2.hw,
3351 &pcnoc_clk_src.hw,
3352 &system_noc_clk_src.hw,
3353 &qdss_dap_sync_clk_src.hw,
3354 &qdss_tsctr_div2_clk_src.hw,
3355 &eud_at_clk_src.hw,
3356 };
3357
3358 static const struct alpha_pll_config ubi32_pll_config = {
3359 .l = 0x29,
3360 .alpha = 0xaaaaaaaa,
3361 .alpha_hi = 0xaa,
3362 .config_ctl_val = 0x4001075b,
3363 .main_output_mask = BIT(0),
3364 .aux_output_mask = BIT(1),
3365 .alpha_en_mask = BIT(24),
3366 .vco_val = 0x1,
3367 .vco_mask = GENMASK(21, 20),
3368 .test_ctl_val = 0x0,
3369 .test_ctl_hi_val = 0x0,
3370 };
3371
3372 static struct clk_regmap *gcc_ipq5018_clks[] = {
3373 [GPLL0_MAIN] = &gpll0_main.clkr,
3374 [GPLL0] = &gpll0.clkr,
3375 [GPLL2_MAIN] = &gpll2_main.clkr,
3376 [GPLL2] = &gpll2.clkr,
3377 [GPLL4_MAIN] = &gpll4_main.clkr,
3378 [GPLL4] = &gpll4.clkr,
3379 [UBI32_PLL_MAIN] = &ubi32_pll_main.clkr,
3380 [UBI32_PLL] = &ubi32_pll.clkr,
3381 [ADSS_PWM_CLK_SRC] = &adss_pwm_clk_src.clkr,
3382 [BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
3383 [BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
3384 [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
3385 [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
3386 [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
3387 [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
3388 [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
3389 [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
3390 [CRYPTO_CLK_SRC] = &crypto_clk_src.clkr,
3391 [GCC_ADSS_PWM_CLK] = &gcc_adss_pwm_clk.clkr,
3392 [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
3393 [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
3394 [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
3395 [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
3396 [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
3397 [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
3398 [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
3399 [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
3400 [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
3401 [GCC_BTSS_LPO_CLK] = &gcc_btss_lpo_clk.clkr,
3402 [GCC_CMN_BLK_AHB_CLK] = &gcc_cmn_blk_ahb_clk.clkr,
3403 [GCC_CMN_BLK_SYS_CLK] = &gcc_cmn_blk_sys_clk.clkr,
3404 [GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr,
3405 [GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr,
3406 [GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr,
3407 [GCC_DCC_CLK] = &gcc_dcc_clk.clkr,
3408 [GCC_GEPHY_RX_CLK] = &gcc_gephy_rx_clk.clkr,
3409 [GCC_GEPHY_TX_CLK] = &gcc_gephy_tx_clk.clkr,
3410 [GCC_GMAC0_CFG_CLK] = &gcc_gmac0_cfg_clk.clkr,
3411 [GCC_GMAC0_PTP_CLK] = &gcc_gmac0_ptp_clk.clkr,
3412 [GCC_GMAC0_RX_CLK] = &gcc_gmac0_rx_clk.clkr,
3413 [GCC_GMAC0_SYS_CLK] = &gcc_gmac0_sys_clk.clkr,
3414 [GCC_GMAC0_TX_CLK] = &gcc_gmac0_tx_clk.clkr,
3415 [GCC_GMAC1_CFG_CLK] = &gcc_gmac1_cfg_clk.clkr,
3416 [GCC_GMAC1_PTP_CLK] = &gcc_gmac1_ptp_clk.clkr,
3417 [GCC_GMAC1_RX_CLK] = &gcc_gmac1_rx_clk.clkr,
3418 [GCC_GMAC1_SYS_CLK] = &gcc_gmac1_sys_clk.clkr,
3419 [GCC_GMAC1_TX_CLK] = &gcc_gmac1_tx_clk.clkr,
3420 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
3421 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
3422 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
3423 [GCC_LPASS_CORE_AXIM_CLK] = &gcc_lpass_core_axim_clk.clkr,
3424 [GCC_LPASS_SWAY_CLK] = &gcc_lpass_sway_clk.clkr,
3425 [GCC_MDIO0_AHB_CLK] = &gcc_mdio0_ahb_clk.clkr,
3426 [GCC_MDIO1_AHB_CLK] = &gcc_mdio1_ahb_clk.clkr,
3427 [GCC_PCIE0_AHB_CLK] = &gcc_pcie0_ahb_clk.clkr,
3428 [GCC_PCIE0_AUX_CLK] = &gcc_pcie0_aux_clk.clkr,
3429 [GCC_PCIE0_AXI_M_CLK] = &gcc_pcie0_axi_m_clk.clkr,
3430 [GCC_PCIE0_AXI_S_BRIDGE_CLK] = &gcc_pcie0_axi_s_bridge_clk.clkr,
3431 [GCC_PCIE0_AXI_S_CLK] = &gcc_pcie0_axi_s_clk.clkr,
3432 [GCC_PCIE1_AHB_CLK] = &gcc_pcie1_ahb_clk.clkr,
3433 [GCC_PCIE1_AUX_CLK] = &gcc_pcie1_aux_clk.clkr,
3434 [GCC_PCIE1_AXI_M_CLK] = &gcc_pcie1_axi_m_clk.clkr,
3435 [GCC_PCIE1_AXI_S_BRIDGE_CLK] = &gcc_pcie1_axi_s_bridge_clk.clkr,
3436 [GCC_PCIE1_AXI_S_CLK] = &gcc_pcie1_axi_s_clk.clkr,
3437 [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
3438 [GCC_Q6_AXIM_CLK] = &gcc_q6_axim_clk.clkr,
3439 [GCC_Q6_AXIM2_CLK] = &gcc_q6_axim2_clk.clkr,
3440 [GCC_Q6_AXIS_CLK] = &gcc_q6_axis_clk.clkr,
3441 [GCC_Q6_AHB_CLK] = &gcc_q6_ahb_clk.clkr,
3442 [GCC_Q6_AHB_S_CLK] = &gcc_q6_ahb_s_clk.clkr,
3443 [GCC_Q6_TSCTR_1TO2_CLK] = &gcc_q6_tsctr_1to2_clk.clkr,
3444 [GCC_Q6SS_ATBM_CLK] = &gcc_q6ss_atbm_clk.clkr,
3445 [GCC_Q6SS_PCLKDBG_CLK] = &gcc_q6ss_pclkdbg_clk.clkr,
3446 [GCC_Q6SS_TRIG_CLK] = &gcc_q6ss_trig_clk.clkr,
3447 [GCC_QDSS_AT_CLK] = &gcc_qdss_at_clk.clkr,
3448 [GCC_QDSS_CFG_AHB_CLK] = &gcc_qdss_cfg_ahb_clk.clkr,
3449 [GCC_QDSS_DAP_AHB_CLK] = &gcc_qdss_dap_ahb_clk.clkr,
3450 [GCC_QDSS_DAP_CLK] = &gcc_qdss_dap_clk.clkr,
3451 [GCC_QDSS_ETR_USB_CLK] = &gcc_qdss_etr_usb_clk.clkr,
3452 [GCC_QDSS_EUD_AT_CLK] = &gcc_qdss_eud_at_clk.clkr,
3453 [GCC_QDSS_STM_CLK] = &gcc_qdss_stm_clk.clkr,
3454 [GCC_QDSS_TRACECLKIN_CLK] = &gcc_qdss_traceclkin_clk.clkr,
3455 [GCC_QDSS_TSCTR_DIV8_CLK] = &gcc_qdss_tsctr_div8_clk.clkr,
3456 [GCC_QPIC_AHB_CLK] = &gcc_qpic_ahb_clk.clkr,
3457 [GCC_QPIC_CLK] = &gcc_qpic_clk.clkr,
3458 [GCC_QPIC_IO_MACRO_CLK] = &gcc_qpic_io_macro_clk.clkr,
3459 [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
3460 [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
3461 [GCC_SLEEP_CLK_SRC] = &gcc_sleep_clk_src.clkr,
3462 [GCC_SNOC_GMAC0_AHB_CLK] = &gcc_snoc_gmac0_ahb_clk.clkr,
3463 [GCC_SNOC_GMAC0_AXI_CLK] = &gcc_snoc_gmac0_axi_clk.clkr,
3464 [GCC_SNOC_GMAC1_AHB_CLK] = &gcc_snoc_gmac1_ahb_clk.clkr,
3465 [GCC_SNOC_GMAC1_AXI_CLK] = &gcc_snoc_gmac1_axi_clk.clkr,
3466 [GCC_SNOC_LPASS_AXIM_CLK] = &gcc_snoc_lpass_axim_clk.clkr,
3467 [GCC_SNOC_LPASS_SWAY_CLK] = &gcc_snoc_lpass_sway_clk.clkr,
3468 [GCC_SNOC_UBI0_AXI_CLK] = &gcc_snoc_ubi0_axi_clk.clkr,
3469 [GCC_SYS_NOC_PCIE0_AXI_CLK] = &gcc_sys_noc_pcie0_axi_clk.clkr,
3470 [GCC_SYS_NOC_PCIE1_AXI_CLK] = &gcc_sys_noc_pcie1_axi_clk.clkr,
3471 [GCC_SYS_NOC_QDSS_STM_AXI_CLK] = &gcc_sys_noc_qdss_stm_axi_clk.clkr,
3472 [GCC_SYS_NOC_USB0_AXI_CLK] = &gcc_sys_noc_usb0_axi_clk.clkr,
3473 [GCC_SYS_NOC_WCSS_AHB_CLK] = &gcc_sys_noc_wcss_ahb_clk.clkr,
3474 [GCC_UBI0_AXI_CLK] = &gcc_ubi0_axi_clk.clkr,
3475 [GCC_UBI0_CFG_CLK] = &gcc_ubi0_cfg_clk.clkr,
3476 [GCC_UBI0_CORE_CLK] = &gcc_ubi0_core_clk.clkr,
3477 [GCC_UBI0_DBG_CLK] = &gcc_ubi0_dbg_clk.clkr,
3478 [GCC_UBI0_NC_AXI_CLK] = &gcc_ubi0_nc_axi_clk.clkr,
3479 [GCC_UBI0_UTCM_CLK] = &gcc_ubi0_utcm_clk.clkr,
3480 [GCC_UNIPHY_AHB_CLK] = &gcc_uniphy_ahb_clk.clkr,
3481 [GCC_UNIPHY_RX_CLK] = &gcc_uniphy_rx_clk.clkr,
3482 [GCC_UNIPHY_SYS_CLK] = &gcc_uniphy_sys_clk.clkr,
3483 [GCC_UNIPHY_TX_CLK] = &gcc_uniphy_tx_clk.clkr,
3484 [GCC_USB0_AUX_CLK] = &gcc_usb0_aux_clk.clkr,
3485 [GCC_USB0_EUD_AT_CLK] = &gcc_usb0_eud_at_clk.clkr,
3486 [GCC_USB0_LFPS_CLK] = &gcc_usb0_lfps_clk.clkr,
3487 [GCC_USB0_MASTER_CLK] = &gcc_usb0_master_clk.clkr,
3488 [GCC_USB0_MOCK_UTMI_CLK] = &gcc_usb0_mock_utmi_clk.clkr,
3489 [GCC_USB0_PHY_CFG_AHB_CLK] = &gcc_usb0_phy_cfg_ahb_clk.clkr,
3490 [GCC_USB0_SLEEP_CLK] = &gcc_usb0_sleep_clk.clkr,
3491 [GCC_WCSS_ACMT_CLK] = &gcc_wcss_acmt_clk.clkr,
3492 [GCC_WCSS_AHB_S_CLK] = &gcc_wcss_ahb_s_clk.clkr,
3493 [GCC_WCSS_AXI_M_CLK] = &gcc_wcss_axi_m_clk.clkr,
3494 [GCC_WCSS_AXI_S_CLK] = &gcc_wcss_axi_s_clk.clkr,
3495 [GCC_WCSS_DBG_IFC_APB_BDG_CLK] = &gcc_wcss_dbg_ifc_apb_bdg_clk.clkr,
3496 [GCC_WCSS_DBG_IFC_APB_CLK] = &gcc_wcss_dbg_ifc_apb_clk.clkr,
3497 [GCC_WCSS_DBG_IFC_ATB_BDG_CLK] = &gcc_wcss_dbg_ifc_atb_bdg_clk.clkr,
3498 [GCC_WCSS_DBG_IFC_ATB_CLK] = &gcc_wcss_dbg_ifc_atb_clk.clkr,
3499 [GCC_WCSS_DBG_IFC_DAPBUS_BDG_CLK] = &gcc_wcss_dbg_ifc_dapbus_bdg_clk.clkr,
3500 [GCC_WCSS_DBG_IFC_DAPBUS_CLK] = &gcc_wcss_dbg_ifc_dapbus_clk.clkr,
3501 [GCC_WCSS_DBG_IFC_NTS_BDG_CLK] = &gcc_wcss_dbg_ifc_nts_bdg_clk.clkr,
3502 [GCC_WCSS_DBG_IFC_NTS_CLK] = &gcc_wcss_dbg_ifc_nts_clk.clkr,
3503 [GCC_WCSS_ECAHB_CLK] = &gcc_wcss_ecahb_clk.clkr,
3504 [GCC_XO_CLK] = &gcc_xo_clk.clkr,
3505 [GCC_XO_CLK_SRC] = &gcc_xo_clk_src.clkr,
3506 [GMAC0_RX_CLK_SRC] = &gmac0_rx_clk_src.clkr,
3507 [GMAC0_RX_DIV_CLK_SRC] = &gmac0_rx_div_clk_src.clkr,
3508 [GMAC0_TX_CLK_SRC] = &gmac0_tx_clk_src.clkr,
3509 [GMAC0_TX_DIV_CLK_SRC] = &gmac0_tx_div_clk_src.clkr,
3510 [GMAC1_RX_CLK_SRC] = &gmac1_rx_clk_src.clkr,
3511 [GMAC1_RX_DIV_CLK_SRC] = &gmac1_rx_div_clk_src.clkr,
3512 [GMAC1_TX_CLK_SRC] = &gmac1_tx_clk_src.clkr,
3513 [GMAC1_TX_DIV_CLK_SRC] = &gmac1_tx_div_clk_src.clkr,
3514 [GMAC_CLK_SRC] = &gmac_clk_src.clkr,
3515 [GP1_CLK_SRC] = &gp1_clk_src.clkr,
3516 [GP2_CLK_SRC] = &gp2_clk_src.clkr,
3517 [GP3_CLK_SRC] = &gp3_clk_src.clkr,
3518 [LPASS_AXIM_CLK_SRC] = &lpass_axim_clk_src.clkr,
3519 [LPASS_SWAY_CLK_SRC] = &lpass_sway_clk_src.clkr,
3520 [PCIE0_AUX_CLK_SRC] = &pcie0_aux_clk_src.clkr,
3521 [PCIE0_AXI_CLK_SRC] = &pcie0_axi_clk_src.clkr,
3522 [PCIE1_AUX_CLK_SRC] = &pcie1_aux_clk_src.clkr,
3523 [PCIE1_AXI_CLK_SRC] = &pcie1_axi_clk_src.clkr,
3524 [PCNOC_BFDCD_CLK_SRC] = &pcnoc_bfdcd_clk_src.clkr,
3525 [Q6_AXI_CLK_SRC] = &q6_axi_clk_src.clkr,
3526 [QDSS_AT_CLK_SRC] = &qdss_at_clk_src.clkr,
3527 [QDSS_STM_CLK_SRC] = &qdss_stm_clk_src.clkr,
3528 [QDSS_TSCTR_CLK_SRC] = &qdss_tsctr_clk_src.clkr,
3529 [QDSS_TRACECLKIN_CLK_SRC] = &qdss_traceclkin_clk_src.clkr,
3530 [QPIC_IO_MACRO_CLK_SRC] = &qpic_io_macro_clk_src.clkr,
3531 [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
3532 [SYSTEM_NOC_BFDCD_CLK_SRC] = &system_noc_bfdcd_clk_src.clkr,
3533 [UBI0_AXI_CLK_SRC] = &ubi0_axi_clk_src.clkr,
3534 [UBI0_CORE_CLK_SRC] = &ubi0_core_clk_src.clkr,
3535 [USB0_AUX_CLK_SRC] = &usb0_aux_clk_src.clkr,
3536 [USB0_LFPS_CLK_SRC] = &usb0_lfps_clk_src.clkr,
3537 [USB0_MASTER_CLK_SRC] = &usb0_master_clk_src.clkr,
3538 [USB0_MOCK_UTMI_CLK_SRC] = &usb0_mock_utmi_clk_src.clkr,
3539 [WCSS_AHB_CLK_SRC] = &wcss_ahb_clk_src.clkr,
3540 [PCIE0_PIPE_CLK_SRC] = &pcie0_pipe_clk_src.clkr,
3541 [PCIE1_PIPE_CLK_SRC] = &pcie1_pipe_clk_src.clkr,
3542 [GCC_PCIE0_PIPE_CLK] = &gcc_pcie0_pipe_clk.clkr,
3543 [GCC_PCIE1_PIPE_CLK] = &gcc_pcie1_pipe_clk.clkr,
3544 [USB0_PIPE_CLK_SRC] = &usb0_pipe_clk_src.clkr,
3545 [GCC_USB0_PIPE_CLK] = &gcc_usb0_pipe_clk.clkr,
3546 };
3547
3548 static const struct qcom_reset_map gcc_ipq5018_resets[] = {
3549 [GCC_APC0_VOLTAGE_DROOP_DETECTOR_BCR] = { 0x78000, 0 },
3550 [GCC_BLSP1_BCR] = { 0x01000, 0 },
3551 [GCC_BLSP1_QUP1_BCR] = { 0x02000, 0 },
3552 [GCC_BLSP1_QUP2_BCR] = { 0x03008, 0 },
3553 [GCC_BLSP1_QUP3_BCR] = { 0x04008, 0 },
3554 [GCC_BLSP1_UART1_BCR] = { 0x02038, 0 },
3555 [GCC_BLSP1_UART2_BCR] = { 0x03028, 0 },
3556 [GCC_BOOT_ROM_BCR] = { 0x13008, 0 },
3557 [GCC_BTSS_BCR] = { 0x1c000, 0 },
3558 [GCC_CMN_BLK_BCR] = { 0x56300, 0 },
3559 [GCC_CMN_LDO_BCR] = { 0x33000, 0 },
3560 [GCC_CE_BCR] = { 0x33014, 0 },
3561 [GCC_CRYPTO_BCR] = { 0x16000, 0 },
3562 [GCC_DCC_BCR] = { 0x77000, 0 },
3563 [GCC_DCD_BCR] = { 0x2a000, 0 },
3564 [GCC_DDRSS_BCR] = { 0x1e000, 0 },
3565 [GCC_EDPD_BCR] = { 0x3a000, 0 },
3566 [GCC_GEPHY_BCR] = { 0x56000, 0 },
3567 [GCC_GEPHY_MDC_SW_ARES] = { 0x56004, 0 },
3568 [GCC_GEPHY_DSP_HW_ARES] = { 0x56004, 1 },
3569 [GCC_GEPHY_RX_ARES] = { 0x56004, 2 },
3570 [GCC_GEPHY_TX_ARES] = { 0x56004, 3 },
3571 [GCC_GMAC0_BCR] = { 0x19000, 0 },
3572 [GCC_GMAC0_CFG_ARES] = { 0x68428, 0 },
3573 [GCC_GMAC0_SYS_ARES] = { 0x68428, 1 },
3574 [GCC_GMAC1_BCR] = { 0x19100, 0 },
3575 [GCC_GMAC1_CFG_ARES] = { 0x68438, 0 },
3576 [GCC_GMAC1_SYS_ARES] = { 0x68438, 1 },
3577 [GCC_IMEM_BCR] = { 0x0e000, 0 },
3578 [GCC_LPASS_BCR] = { 0x2e000, 0 },
3579 [GCC_MDIO0_BCR] = { 0x58000, 0 },
3580 [GCC_MDIO1_BCR] = { 0x58010, 0 },
3581 [GCC_MPM_BCR] = { 0x2c000, 0 },
3582 [GCC_PCIE0_BCR] = { 0x75004, 0 },
3583 [GCC_PCIE0_LINK_DOWN_BCR] = { 0x750a8, 0 },
3584 [GCC_PCIE0_PHY_BCR] = { 0x75038, 0 },
3585 [GCC_PCIE0PHY_PHY_BCR] = { 0x7503c, 0 },
3586 [GCC_PCIE0_PIPE_ARES] = { 0x75040, 0 },
3587 [GCC_PCIE0_SLEEP_ARES] = { 0x75040, 1 },
3588 [GCC_PCIE0_CORE_STICKY_ARES] = { 0x75040, 2 },
3589 [GCC_PCIE0_AXI_MASTER_ARES] = { 0x75040, 3 },
3590 [GCC_PCIE0_AXI_SLAVE_ARES] = { 0x75040, 4 },
3591 [GCC_PCIE0_AHB_ARES] = { 0x75040, 5 },
3592 [GCC_PCIE0_AXI_MASTER_STICKY_ARES] = { 0x75040, 6 },
3593 [GCC_PCIE0_AXI_SLAVE_STICKY_ARES] = { 0x75040, 7 },
3594 [GCC_PCIE1_BCR] = { 0x76004, 0 },
3595 [GCC_PCIE1_LINK_DOWN_BCR] = { 0x76044, 0 },
3596 [GCC_PCIE1_PHY_BCR] = { 0x76038, 0 },
3597 [GCC_PCIE1PHY_PHY_BCR] = { 0x7603c, 0 },
3598 [GCC_PCIE1_PIPE_ARES] = { 0x76040, 0 },
3599 [GCC_PCIE1_SLEEP_ARES] = { 0x76040, 1 },
3600 [GCC_PCIE1_CORE_STICKY_ARES] = { 0x76040, 2 },
3601 [GCC_PCIE1_AXI_MASTER_ARES] = { 0x76040, 3 },
3602 [GCC_PCIE1_AXI_SLAVE_ARES] = { 0x76040, 4 },
3603 [GCC_PCIE1_AHB_ARES] = { 0x76040, 5 },
3604 [GCC_PCIE1_AXI_MASTER_STICKY_ARES] = { 0x76040, 6 },
3605 [GCC_PCIE1_AXI_SLAVE_STICKY_ARES] = { 0x76040, 7 },
3606 [GCC_PCNOC_BCR] = { 0x27018, 0 },
3607 [GCC_PCNOC_BUS_TIMEOUT0_BCR] = { 0x48000, 0 },
3608 [GCC_PCNOC_BUS_TIMEOUT1_BCR] = { 0x48008, 0 },
3609 [GCC_PCNOC_BUS_TIMEOUT2_BCR] = { 0x48010, 0 },
3610 [GCC_PCNOC_BUS_TIMEOUT3_BCR] = { 0x48018, 0 },
3611 [GCC_PCNOC_BUS_TIMEOUT4_BCR] = { 0x48020, 0 },
3612 [GCC_PCNOC_BUS_TIMEOUT5_BCR] = { 0x48028, 0 },
3613 [GCC_PCNOC_BUS_TIMEOUT6_BCR] = { 0x48030, 0 },
3614 [GCC_PCNOC_BUS_TIMEOUT7_BCR] = { 0x48038, 0 },
3615 [GCC_PCNOC_BUS_TIMEOUT8_BCR] = { 0x48040, 0 },
3616 [GCC_PCNOC_BUS_TIMEOUT9_BCR] = { 0x48048, 0 },
3617 [GCC_PCNOC_BUS_TIMEOUT10_BCR] = { 0x48050, 0 },
3618 [GCC_PCNOC_BUS_TIMEOUT11_BCR] = { 0x48058, 0 },
3619 [GCC_PRNG_BCR] = { 0x13000, 0 },
3620 [GCC_Q6SS_DBG_ARES] = { 0x59110, 0 },
3621 [GCC_Q6_AHB_S_ARES] = { 0x59110, 1 },
3622 [GCC_Q6_AHB_ARES] = { 0x59110, 2 },
3623 [GCC_Q6_AXIM2_ARES] = { 0x59110, 3 },
3624 [GCC_Q6_AXIM_ARES] = { 0x59110, 4 },
3625 [GCC_Q6_AXIS_ARES] = { 0x59158, 0 },
3626 [GCC_QDSS_BCR] = { 0x29000, 0 },
3627 [GCC_QPIC_BCR] = { 0x57018, 0 },
3628 [GCC_QUSB2_0_PHY_BCR] = { 0x41030, 0 },
3629 [GCC_SDCC1_BCR] = { 0x42000, 0 },
3630 [GCC_SEC_CTRL_BCR] = { 0x1a000, 0 },
3631 [GCC_SPDM_BCR] = { 0x2f000, 0 },
3632 [GCC_SYSTEM_NOC_BCR] = { 0x26000, 0 },
3633 [GCC_TCSR_BCR] = { 0x28000, 0 },
3634 [GCC_TLMM_BCR] = { 0x34000, 0 },
3635 [GCC_UBI0_AXI_ARES] = { 0x680},
3636 [GCC_UBI0_AHB_ARES] = { 0x68010, 1 },
3637 [GCC_UBI0_NC_AXI_ARES] = { 0x68010, 2 },
3638 [GCC_UBI0_DBG_ARES] = { 0x68010, 3 },
3639 [GCC_UBI0_UTCM_ARES] = { 0x68010, 6 },
3640 [GCC_UBI0_CORE_ARES] = { 0x68010, 7 },
3641 [GCC_UBI32_BCR] = { 0x19064, 0 },
3642 [GCC_UNIPHY_BCR] = { 0x56100, 0 },
3643 [GCC_UNIPHY_AHB_ARES] = { 0x56104, 0 },
3644 [GCC_UNIPHY_SYS_ARES] = { 0x56104, 1 },
3645 [GCC_UNIPHY_RX_ARES] = { 0x56104, 4 },
3646 [GCC_UNIPHY_TX_ARES] = { 0x56104, 5 },
3647 [GCC_UNIPHY_SOFT_RESET] = {0x56104, 0 },
3648 [GCC_USB0_BCR] = { 0x3e070, 0 },
3649 [GCC_USB0_PHY_BCR] = { 0x3e034, 0 },
3650 [GCC_WCSS_BCR] = { 0x18000, 0 },
3651 [GCC_WCSS_DBG_ARES] = { 0x59008, 0 },
3652 [GCC_WCSS_ECAHB_ARES] = { 0x59008, 1 },
3653 [GCC_WCSS_ACMT_ARES] = { 0x59008, 2 },
3654 [GCC_WCSS_DBG_BDG_ARES] = { 0x59008, 3 },
3655 [GCC_WCSS_AHB_S_ARES] = { 0x59008, 4 },
3656 [GCC_WCSS_AXI_M_ARES] = { 0x59008, 5 },
3657 [GCC_WCSS_AXI_S_ARES] = { 0x59008, 6 },
3658 [GCC_WCSS_Q6_BCR] = { 0x18004, 0 },
3659 [GCC_WCSSAON_RESET] = { 0x59010, 0},
3660 [GCC_GEPHY_MISC_ARES] = { 0x56004, 0 },
3661 };
3662
3663 static const struct of_device_id gcc_ipq5018_match_table[] = {
3664 { .compatible = "qcom,gcc-ipq5018" },
3665 { }
3666 };
3667 MODULE_DEVICE_TABLE(of, gcc_ipq5018_match_table);
3668
3669 static const struct regmap_config gcc_ipq5018_regmap_config = {
3670 .reg_bits = 32,
3671 .reg_stride = 4,
3672 .val_bits = 32,
3673 .max_register = 0x7fffc,
3674 .fast_io = true,
3675 };
3676
3677 static const struct qcom_cc_desc gcc_ipq5018_desc = {
3678 .config = &gcc_ipq5018_regmap_config,
3679 .clks = gcc_ipq5018_clks,
3680 .num_clks = ARRAY_SIZE(gcc_ipq5018_clks),
3681 .resets = gcc_ipq5018_resets,
3682 .num_resets = ARRAY_SIZE(gcc_ipq5018_resets),
3683 .clk_hws = gcc_ipq5018_hws,
3684 .num_clk_hws = ARRAY_SIZE(gcc_ipq5018_hws),
3685 };
3686
gcc_ipq5018_probe(struct platform_device * pdev)3687 static int gcc_ipq5018_probe(struct platform_device *pdev)
3688 {
3689 struct regmap *regmap;
3690 struct qcom_cc_desc ipq5018_desc = gcc_ipq5018_desc;
3691
3692 regmap = qcom_cc_map(pdev, &ipq5018_desc);
3693 if (IS_ERR(regmap))
3694 return PTR_ERR(regmap);
3695
3696 clk_alpha_pll_configure(&ubi32_pll_main, regmap, &ubi32_pll_config);
3697
3698 return qcom_cc_really_probe(pdev, &ipq5018_desc, regmap);
3699 }
3700
3701 static struct platform_driver gcc_ipq5018_driver = {
3702 .probe = gcc_ipq5018_probe,
3703 .driver = {
3704 .name = "qcom,gcc-ipq5018",
3705 .of_match_table = gcc_ipq5018_match_table,
3706 },
3707 };
3708
gcc_ipq5018_init(void)3709 static int __init gcc_ipq5018_init(void)
3710 {
3711 return platform_driver_register(&gcc_ipq5018_driver);
3712 }
3713 core_initcall(gcc_ipq5018_init);
3714
gcc_ipq5018_exit(void)3715 static void __exit gcc_ipq5018_exit(void)
3716 {
3717 platform_driver_unregister(&gcc_ipq5018_driver);
3718 }
3719 module_exit(gcc_ipq5018_exit);
3720
3721 MODULE_DESCRIPTION("Qualcomm Technologies, Inc. GCC IPQ5018 Driver");
3722 MODULE_LICENSE("GPL");
3723