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