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