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

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