xref: /openbmc/linux/drivers/clk/qcom/gcc-sdm660.c (revision 3ddc8b84)
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
4  * Copyright (c) 2018, Craig Tatlor.
5  */
6 
7 #include <linux/kernel.h>
8 #include <linux/bitops.h>
9 #include <linux/err.h>
10 #include <linux/platform_device.h>
11 #include <linux/module.h>
12 #include <linux/of.h>
13 #include <linux/clk-provider.h>
14 #include <linux/regmap.h>
15 #include <linux/reset-controller.h>
16 
17 #include <dt-bindings/clock/qcom,gcc-sdm660.h>
18 
19 #include "common.h"
20 #include "clk-regmap.h"
21 #include "clk-alpha-pll.h"
22 #include "clk-rcg.h"
23 #include "clk-branch.h"
24 #include "reset.h"
25 #include "gdsc.h"
26 
27 enum {
28 	P_XO,
29 	P_SLEEP_CLK,
30 	P_GPLL0,
31 	P_GPLL1,
32 	P_GPLL4,
33 	P_GPLL0_EARLY_DIV,
34 	P_GPLL1_EARLY_DIV,
35 };
36 
37 static struct clk_fixed_factor xo = {
38 	.mult = 1,
39 	.div = 1,
40 	.hw.init = &(struct clk_init_data){
41 		.name = "xo",
42 		.parent_data = &(const struct clk_parent_data) {
43 			.fw_name = "xo"
44 		},
45 		.num_parents = 1,
46 		.ops = &clk_fixed_factor_ops,
47 	},
48 };
49 
50 static struct clk_alpha_pll gpll0_early = {
51 	.offset = 0x0,
52 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
53 	.clkr = {
54 		.enable_reg = 0x52000,
55 		.enable_mask = BIT(0),
56 		.hw.init = &(struct clk_init_data){
57 			.name = "gpll0_early",
58 			.parent_data = &(const struct clk_parent_data){
59 				.fw_name = "xo",
60 			},
61 			.num_parents = 1,
62 			.ops = &clk_alpha_pll_ops,
63 		},
64 	},
65 };
66 
67 static struct clk_fixed_factor gpll0_early_div = {
68 	.mult = 1,
69 	.div = 2,
70 	.hw.init = &(struct clk_init_data){
71 		.name = "gpll0_early_div",
72 		.parent_hws = (const struct clk_hw*[]){
73 			&gpll0_early.clkr.hw,
74 		},
75 		.num_parents = 1,
76 		.ops = &clk_fixed_factor_ops,
77 	},
78 };
79 
80 static struct clk_alpha_pll_postdiv gpll0 = {
81 	.offset = 0x00000,
82 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
83 	.clkr.hw.init = &(struct clk_init_data){
84 		.name = "gpll0",
85 		.parent_hws = (const struct clk_hw*[]){
86 			&gpll0_early.clkr.hw,
87 		},
88 		.num_parents = 1,
89 		.ops = &clk_alpha_pll_postdiv_ops,
90 	},
91 };
92 
93 static struct clk_alpha_pll gpll1_early = {
94 	.offset = 0x1000,
95 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
96 	.clkr = {
97 		.enable_reg = 0x52000,
98 		.enable_mask = BIT(1),
99 		.hw.init = &(struct clk_init_data){
100 			.name = "gpll1_early",
101 			.parent_data = &(const struct clk_parent_data){
102 				.fw_name = "xo",
103 			},
104 			.num_parents = 1,
105 			.ops = &clk_alpha_pll_ops,
106 		},
107 	},
108 };
109 
110 static struct clk_fixed_factor gpll1_early_div = {
111 	.mult = 1,
112 	.div = 2,
113 	.hw.init = &(struct clk_init_data){
114 		.name = "gpll1_early_div",
115 		.parent_hws = (const struct clk_hw*[]){
116 			&gpll1_early.clkr.hw,
117 		},
118 		.num_parents = 1,
119 		.ops = &clk_fixed_factor_ops,
120 	},
121 };
122 
123 static struct clk_alpha_pll_postdiv gpll1 = {
124 	.offset = 0x1000,
125 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
126 	.clkr.hw.init = &(struct clk_init_data){
127 		.name = "gpll1",
128 		.parent_hws = (const struct clk_hw*[]){
129 			&gpll1_early.clkr.hw,
130 		},
131 		.num_parents = 1,
132 		.ops = &clk_alpha_pll_postdiv_ops,
133 	},
134 };
135 
136 static struct clk_alpha_pll gpll4_early = {
137 	.offset = 0x77000,
138 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
139 	.clkr = {
140 		.enable_reg = 0x52000,
141 		.enable_mask = BIT(4),
142 		.hw.init = &(struct clk_init_data){
143 			.name = "gpll4_early",
144 			.parent_data = &(const struct clk_parent_data){
145 				.fw_name = "xo",
146 			},
147 			.num_parents = 1,
148 			.ops = &clk_alpha_pll_ops,
149 		},
150 	},
151 };
152 
153 static struct clk_alpha_pll_postdiv gpll4 = {
154 	.offset = 0x77000,
155 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
156 	.clkr.hw.init = &(struct clk_init_data)
157 	{
158 		.name = "gpll4",
159 		.parent_hws = (const struct clk_hw*[]){
160 			&gpll4_early.clkr.hw,
161 		},
162 		.num_parents = 1,
163 		.ops = &clk_alpha_pll_postdiv_ops,
164 	},
165 };
166 
167 static const struct parent_map gcc_parent_map_xo_gpll0_gpll0_early_div[] = {
168 	{ P_XO, 0 },
169 	{ P_GPLL0, 1 },
170 	{ P_GPLL0_EARLY_DIV, 6 },
171 };
172 
173 static const struct clk_parent_data gcc_parent_data_xo_gpll0_gpll0_early_div[] = {
174 	{ .fw_name = "xo" },
175 	{ .hw = &gpll0.clkr.hw },
176 	{ .hw = &gpll0_early_div.hw },
177 };
178 
179 static const struct parent_map gcc_parent_map_xo_gpll0[] = {
180 	{ P_XO, 0 },
181 	{ P_GPLL0, 1 },
182 };
183 
184 static const struct clk_parent_data gcc_parent_data_xo_gpll0[] = {
185 	{ .fw_name = "xo" },
186 	{ .hw = &gpll0.clkr.hw },
187 };
188 
189 static const struct parent_map gcc_parent_map_xo_gpll0_sleep_clk_gpll0_early_div[] = {
190 	{ P_XO, 0 },
191 	{ P_GPLL0, 1 },
192 	{ P_SLEEP_CLK, 5 },
193 	{ P_GPLL0_EARLY_DIV, 6 },
194 };
195 
196 static const struct clk_parent_data gcc_parent_data_xo_gpll0_sleep_clk_gpll0_early_div[] = {
197 	{ .fw_name = "xo" },
198 	{ .hw = &gpll0.clkr.hw },
199 	{ .fw_name = "sleep_clk" },
200 	{ .hw = &gpll0_early_div.hw },
201 };
202 
203 static const struct parent_map gcc_parent_map_xo_sleep_clk[] = {
204 	{ P_XO, 0 },
205 	{ P_SLEEP_CLK, 5 },
206 };
207 
208 static const struct clk_parent_data gcc_parent_data_xo_sleep_clk[] = {
209 	{ .fw_name = "xo" },
210 	{ .fw_name = "sleep_clk" },
211 };
212 
213 static const struct parent_map gcc_parent_map_xo_gpll4[] = {
214 	{ P_XO, 0 },
215 	{ P_GPLL4, 5 },
216 };
217 
218 static const struct clk_parent_data gcc_parent_data_xo_gpll4[] = {
219 	{ .fw_name = "xo" },
220 	{ .hw = &gpll4.clkr.hw },
221 };
222 
223 static const struct parent_map gcc_parent_map_xo_gpll0_gpll0_early_div_gpll1_gpll4_gpll1_early_div[] = {
224 	{ P_XO, 0 },
225 	{ P_GPLL0, 1 },
226 	{ P_GPLL0_EARLY_DIV, 3 },
227 	{ P_GPLL1, 4 },
228 	{ P_GPLL4, 5 },
229 	{ P_GPLL1_EARLY_DIV, 6 },
230 };
231 
232 static const struct clk_parent_data gcc_parent_data_xo_gpll0_gpll0_early_div_gpll1_gpll4_gpll1_early_div[] = {
233 	{ .fw_name = "xo" },
234 	{ .hw = &gpll0.clkr.hw },
235 	{ .hw = &gpll0_early_div.hw },
236 	{ .hw = &gpll1.clkr.hw },
237 	{ .hw = &gpll4.clkr.hw },
238 	{ .hw = &gpll1_early_div.hw },
239 };
240 
241 static const struct parent_map gcc_parent_map_xo_gpll0_gpll4_gpll0_early_div[] = {
242 	{ P_XO, 0 },
243 	{ P_GPLL0, 1 },
244 	{ P_GPLL4, 5 },
245 	{ P_GPLL0_EARLY_DIV, 6 },
246 };
247 
248 static const struct clk_parent_data gcc_parent_data_xo_gpll0_gpll4_gpll0_early_div[] = {
249 	{ .fw_name = "xo" },
250 	{ .hw = &gpll0.clkr.hw },
251 	{ .hw = &gpll4.clkr.hw },
252 	{ .hw = &gpll0_early_div.hw },
253 };
254 
255 static const struct parent_map gcc_parent_map_xo_gpll0_gpll0_early_div_gpll4[] = {
256 	{ P_XO, 0 },
257 	{ P_GPLL0, 1 },
258 	{ P_GPLL0_EARLY_DIV, 2 },
259 	{ P_GPLL4, 5 },
260 };
261 
262 static const struct clk_parent_data gcc_parent_data_xo_gpll0_gpll0_early_div_gpll4[] = {
263 	{ .fw_name = "xo" },
264 	{ .hw = &gpll0.clkr.hw },
265 	{ .hw = &gpll0_early_div.hw },
266 	{ .hw = &gpll4.clkr.hw },
267 };
268 
269 static const struct freq_tbl ftbl_blsp1_qup1_i2c_apps_clk_src[] = {
270 	F(19200000, P_XO, 1, 0, 0),
271 	F(50000000, P_GPLL0, 12, 0, 0),
272 	{ }
273 };
274 
275 static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
276 	.cmd_rcgr = 0x19020,
277 	.mnd_width = 0,
278 	.hid_width = 5,
279 	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
280 	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
281 	.clkr.hw.init = &(struct clk_init_data){
282 		.name = "blsp1_qup1_i2c_apps_clk_src",
283 		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
284 		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
285 		.ops = &clk_rcg2_ops,
286 	},
287 };
288 
289 static const struct freq_tbl ftbl_blsp1_qup1_spi_apps_clk_src[] = {
290 	F(960000, P_XO, 10, 1, 2),
291 	F(4800000, P_XO, 4, 0, 0),
292 	F(9600000, P_XO, 2, 0, 0),
293 	F(15000000, P_GPLL0, 10, 1, 4),
294 	F(19200000, P_XO, 1, 0, 0),
295 	F(25000000, P_GPLL0, 12, 1, 2),
296 	F(50000000, P_GPLL0, 12, 0, 0),
297 	{ }
298 };
299 
300 static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
301 	.cmd_rcgr = 0x1900c,
302 	.mnd_width = 8,
303 	.hid_width = 5,
304 	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
305 	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
306 	.clkr.hw.init = &(struct clk_init_data){
307 		.name = "blsp1_qup1_spi_apps_clk_src",
308 		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
309 		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
310 		.ops = &clk_rcg2_ops,
311 	},
312 };
313 
314 static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
315 	.cmd_rcgr = 0x1b020,
316 	.mnd_width = 0,
317 	.hid_width = 5,
318 	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
319 	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
320 	.clkr.hw.init = &(struct clk_init_data){
321 		.name = "blsp1_qup2_i2c_apps_clk_src",
322 		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
323 		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
324 		.ops = &clk_rcg2_ops,
325 	},
326 };
327 
328 static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
329 	.cmd_rcgr = 0x1b00c,
330 	.mnd_width = 8,
331 	.hid_width = 5,
332 	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
333 	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
334 	.clkr.hw.init = &(struct clk_init_data){
335 		.name = "blsp1_qup2_spi_apps_clk_src",
336 		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
337 		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
338 		.ops = &clk_rcg2_ops,
339 	},
340 };
341 
342 static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
343 	.cmd_rcgr = 0x1d020,
344 	.mnd_width = 0,
345 	.hid_width = 5,
346 	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
347 	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
348 	.clkr.hw.init = &(struct clk_init_data){
349 		.name = "blsp1_qup3_i2c_apps_clk_src",
350 		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
351 		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
352 		.ops = &clk_rcg2_ops,
353 	},
354 };
355 
356 static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
357 	.cmd_rcgr = 0x1d00c,
358 	.mnd_width = 8,
359 	.hid_width = 5,
360 	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
361 	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
362 	.clkr.hw.init = &(struct clk_init_data){
363 		.name = "blsp1_qup3_spi_apps_clk_src",
364 		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
365 		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
366 		.ops = &clk_rcg2_ops,
367 	},
368 };
369 
370 static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
371 	.cmd_rcgr = 0x1f020,
372 	.mnd_width = 0,
373 	.hid_width = 5,
374 	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
375 	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
376 	.clkr.hw.init = &(struct clk_init_data){
377 		.name = "blsp1_qup4_i2c_apps_clk_src",
378 		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
379 		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
380 		.ops = &clk_rcg2_ops,
381 	},
382 };
383 
384 static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
385 	.cmd_rcgr = 0x1f00c,
386 	.mnd_width = 8,
387 	.hid_width = 5,
388 	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
389 	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
390 	.clkr.hw.init = &(struct clk_init_data){
391 		.name = "blsp1_qup4_spi_apps_clk_src",
392 		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
393 		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
394 		.ops = &clk_rcg2_ops,
395 	},
396 };
397 
398 static const struct freq_tbl ftbl_blsp1_uart1_apps_clk_src[] = {
399 	F(3686400, P_GPLL0, 1, 96, 15625),
400 	F(7372800, P_GPLL0, 1, 192, 15625),
401 	F(14745600, P_GPLL0, 1, 384, 15625),
402 	F(16000000, P_GPLL0, 5, 2, 15),
403 	F(19200000, P_XO, 1, 0, 0),
404 	F(24000000, P_GPLL0, 5, 1, 5),
405 	F(32000000, P_GPLL0, 1, 4, 75),
406 	F(40000000, P_GPLL0, 15, 0, 0),
407 	F(46400000, P_GPLL0, 1, 29, 375),
408 	F(48000000, P_GPLL0, 12.5, 0, 0),
409 	F(51200000, P_GPLL0, 1, 32, 375),
410 	F(56000000, P_GPLL0, 1, 7, 75),
411 	F(58982400, P_GPLL0, 1, 1536, 15625),
412 	F(60000000, P_GPLL0, 10, 0, 0),
413 	F(63157895, P_GPLL0, 9.5, 0, 0),
414 	{ }
415 };
416 
417 static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
418 	.cmd_rcgr = 0x1a00c,
419 	.mnd_width = 16,
420 	.hid_width = 5,
421 	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
422 	.freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
423 	.clkr.hw.init = &(struct clk_init_data){
424 		.name = "blsp1_uart1_apps_clk_src",
425 		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
426 		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
427 		.ops = &clk_rcg2_ops,
428 	},
429 };
430 
431 static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
432 	.cmd_rcgr = 0x1c00c,
433 	.mnd_width = 16,
434 	.hid_width = 5,
435 	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
436 	.freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
437 	.clkr.hw.init = &(struct clk_init_data){
438 		.name = "blsp1_uart2_apps_clk_src",
439 		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
440 		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
441 		.ops = &clk_rcg2_ops,
442 	},
443 };
444 
445 static struct clk_rcg2 blsp2_qup1_i2c_apps_clk_src = {
446 	.cmd_rcgr = 0x26020,
447 	.mnd_width = 0,
448 	.hid_width = 5,
449 	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
450 	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
451 	.clkr.hw.init = &(struct clk_init_data){
452 		.name = "blsp2_qup1_i2c_apps_clk_src",
453 		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
454 		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
455 		.ops = &clk_rcg2_ops,
456 	},
457 };
458 
459 static struct clk_rcg2 blsp2_qup1_spi_apps_clk_src = {
460 	.cmd_rcgr = 0x2600c,
461 	.mnd_width = 8,
462 	.hid_width = 5,
463 	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
464 	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
465 	.clkr.hw.init = &(struct clk_init_data){
466 		.name = "blsp2_qup1_spi_apps_clk_src",
467 		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
468 		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
469 		.ops = &clk_rcg2_ops,
470 	},
471 };
472 
473 static struct clk_rcg2 blsp2_qup2_i2c_apps_clk_src = {
474 	.cmd_rcgr = 0x28020,
475 	.mnd_width = 0,
476 	.hid_width = 5,
477 	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
478 	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
479 	.clkr.hw.init = &(struct clk_init_data){
480 		.name = "blsp2_qup2_i2c_apps_clk_src",
481 		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
482 		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
483 		.ops = &clk_rcg2_ops,
484 	},
485 };
486 
487 static struct clk_rcg2 blsp2_qup2_spi_apps_clk_src = {
488 	.cmd_rcgr = 0x2800c,
489 	.mnd_width = 8,
490 	.hid_width = 5,
491 	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
492 	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
493 	.clkr.hw.init = &(struct clk_init_data){
494 		.name = "blsp2_qup2_spi_apps_clk_src",
495 		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
496 		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
497 		.ops = &clk_rcg2_ops,
498 	},
499 };
500 
501 static struct clk_rcg2 blsp2_qup3_i2c_apps_clk_src = {
502 	.cmd_rcgr = 0x2a020,
503 	.mnd_width = 0,
504 	.hid_width = 5,
505 	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
506 	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
507 	.clkr.hw.init = &(struct clk_init_data){
508 		.name = "blsp2_qup3_i2c_apps_clk_src",
509 		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
510 		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
511 		.ops = &clk_rcg2_ops,
512 	},
513 };
514 
515 static struct clk_rcg2 blsp2_qup3_spi_apps_clk_src = {
516 	.cmd_rcgr = 0x2a00c,
517 	.mnd_width = 8,
518 	.hid_width = 5,
519 	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
520 	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
521 	.clkr.hw.init = &(struct clk_init_data){
522 		.name = "blsp2_qup3_spi_apps_clk_src",
523 		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
524 		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
525 		.ops = &clk_rcg2_ops,
526 	},
527 };
528 
529 static struct clk_rcg2 blsp2_qup4_i2c_apps_clk_src = {
530 	.cmd_rcgr = 0x2c020,
531 	.mnd_width = 0,
532 	.hid_width = 5,
533 	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
534 	.freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
535 	.clkr.hw.init = &(struct clk_init_data){
536 		.name = "blsp2_qup4_i2c_apps_clk_src",
537 		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
538 		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
539 		.ops = &clk_rcg2_ops,
540 	},
541 };
542 
543 static struct clk_rcg2 blsp2_qup4_spi_apps_clk_src = {
544 	.cmd_rcgr = 0x2c00c,
545 	.mnd_width = 8,
546 	.hid_width = 5,
547 	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
548 	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
549 	.clkr.hw.init = &(struct clk_init_data){
550 		.name = "blsp2_qup4_spi_apps_clk_src",
551 		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
552 		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
553 		.ops = &clk_rcg2_ops,
554 	},
555 };
556 
557 static struct clk_rcg2 blsp2_uart1_apps_clk_src = {
558 	.cmd_rcgr = 0x2700c,
559 	.mnd_width = 16,
560 	.hid_width = 5,
561 	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
562 	.freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
563 	.clkr.hw.init = &(struct clk_init_data){
564 		.name = "blsp2_uart1_apps_clk_src",
565 		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
566 		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
567 		.ops = &clk_rcg2_ops,
568 	},
569 };
570 
571 static struct clk_rcg2 blsp2_uart2_apps_clk_src = {
572 	.cmd_rcgr = 0x2900c,
573 	.mnd_width = 16,
574 	.hid_width = 5,
575 	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
576 	.freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
577 	.clkr.hw.init = &(struct clk_init_data){
578 		.name = "blsp2_uart2_apps_clk_src",
579 		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
580 		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
581 		.ops = &clk_rcg2_ops,
582 	},
583 };
584 
585 static const struct freq_tbl ftbl_gp1_clk_src[] = {
586 	F(19200000, P_XO, 1, 0, 0),
587 	F(100000000, P_GPLL0, 6, 0, 0),
588 	F(200000000, P_GPLL0, 3, 0, 0),
589 	{ }
590 };
591 
592 static struct clk_rcg2 gp1_clk_src = {
593 	.cmd_rcgr = 0x64004,
594 	.mnd_width = 8,
595 	.hid_width = 5,
596 	.parent_map = gcc_parent_map_xo_gpll0_sleep_clk_gpll0_early_div,
597 	.freq_tbl = ftbl_gp1_clk_src,
598 	.clkr.hw.init = &(struct clk_init_data){
599 		.name = "gp1_clk_src",
600 		.parent_data = gcc_parent_data_xo_gpll0_sleep_clk_gpll0_early_div,
601 		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_sleep_clk_gpll0_early_div),
602 		.ops = &clk_rcg2_ops,
603 	},
604 };
605 
606 static struct clk_rcg2 gp2_clk_src = {
607 	.cmd_rcgr = 0x65004,
608 	.mnd_width = 8,
609 	.hid_width = 5,
610 	.parent_map = gcc_parent_map_xo_gpll0_sleep_clk_gpll0_early_div,
611 	.freq_tbl = ftbl_gp1_clk_src,
612 	.clkr.hw.init = &(struct clk_init_data){
613 		.name = "gp2_clk_src",
614 		.parent_data = gcc_parent_data_xo_gpll0_sleep_clk_gpll0_early_div,
615 		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_sleep_clk_gpll0_early_div),
616 		.ops = &clk_rcg2_ops,
617 	},
618 };
619 
620 static struct clk_rcg2 gp3_clk_src = {
621 	.cmd_rcgr = 0x66004,
622 	.mnd_width = 8,
623 	.hid_width = 5,
624 	.parent_map = gcc_parent_map_xo_gpll0_sleep_clk_gpll0_early_div,
625 	.freq_tbl = ftbl_gp1_clk_src,
626 	.clkr.hw.init = &(struct clk_init_data){
627 		.name = "gp3_clk_src",
628 		.parent_data = gcc_parent_data_xo_gpll0_sleep_clk_gpll0_early_div,
629 		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_sleep_clk_gpll0_early_div),
630 		.ops = &clk_rcg2_ops,
631 	},
632 };
633 
634 static const struct freq_tbl ftbl_hmss_gpll0_clk_src[] = {
635 	F(300000000, P_GPLL0, 2, 0, 0),
636 	F(600000000, P_GPLL0, 1, 0, 0),
637 	{ }
638 };
639 
640 static struct clk_rcg2 hmss_gpll0_clk_src = {
641 	.cmd_rcgr = 0x4805c,
642 	.mnd_width = 0,
643 	.hid_width = 5,
644 	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
645 	.freq_tbl = ftbl_hmss_gpll0_clk_src,
646 	.clkr.hw.init = &(struct clk_init_data){
647 		.name = "hmss_gpll0_clk_src",
648 		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
649 		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
650 		.ops = &clk_rcg2_ops,
651 	},
652 };
653 
654 static const struct freq_tbl ftbl_hmss_gpll4_clk_src[] = {
655 	F(384000000, P_GPLL4, 4, 0, 0),
656 	F(768000000, P_GPLL4, 2, 0, 0),
657 	F(1536000000, P_GPLL4, 1, 0, 0),
658 	{ }
659 };
660 
661 static struct clk_rcg2 hmss_gpll4_clk_src = {
662 	.cmd_rcgr = 0x48074,
663 	.mnd_width = 0,
664 	.hid_width = 5,
665 	.parent_map = gcc_parent_map_xo_gpll4,
666 	.freq_tbl = ftbl_hmss_gpll4_clk_src,
667 	.clkr.hw.init = &(struct clk_init_data){
668 		.name = "hmss_gpll4_clk_src",
669 		.parent_data = gcc_parent_data_xo_gpll4,
670 		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll4),
671 		.ops = &clk_rcg2_ops,
672 	},
673 };
674 
675 static const struct freq_tbl ftbl_hmss_rbcpr_clk_src[] = {
676 	F(19200000, P_XO, 1, 0, 0),
677 	{ }
678 };
679 
680 static struct clk_rcg2 hmss_rbcpr_clk_src = {
681 	.cmd_rcgr = 0x48044,
682 	.mnd_width = 0,
683 	.hid_width = 5,
684 	.parent_map = gcc_parent_map_xo_gpll0,
685 	.freq_tbl = ftbl_hmss_rbcpr_clk_src,
686 	.clkr.hw.init = &(struct clk_init_data){
687 		.name = "hmss_rbcpr_clk_src",
688 		.parent_data = gcc_parent_data_xo_gpll0,
689 		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0),
690 		.ops = &clk_rcg2_ops,
691 	},
692 };
693 
694 static const struct freq_tbl ftbl_pdm2_clk_src[] = {
695 	F(60000000, P_GPLL0, 10, 0, 0),
696 	{ }
697 };
698 
699 static struct clk_rcg2 pdm2_clk_src = {
700 	.cmd_rcgr = 0x33010,
701 	.mnd_width = 0,
702 	.hid_width = 5,
703 	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
704 	.freq_tbl = ftbl_pdm2_clk_src,
705 	.clkr.hw.init = &(struct clk_init_data){
706 		.name = "pdm2_clk_src",
707 		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
708 		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
709 		.ops = &clk_rcg2_ops,
710 	},
711 };
712 
713 static const struct freq_tbl ftbl_qspi_ser_clk_src[] = {
714 	F(19200000, P_XO, 1, 0, 0),
715 	F(80200000, P_GPLL1_EARLY_DIV, 5, 0, 0),
716 	F(160400000, P_GPLL1, 5, 0, 0),
717 	F(267333333, P_GPLL1, 3, 0, 0),
718 	{ }
719 };
720 
721 static struct clk_rcg2 qspi_ser_clk_src = {
722 	.cmd_rcgr = 0x4d00c,
723 	.mnd_width = 0,
724 	.hid_width = 5,
725 	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div_gpll1_gpll4_gpll1_early_div,
726 	.freq_tbl = ftbl_qspi_ser_clk_src,
727 	.clkr.hw.init = &(struct clk_init_data){
728 		.name = "qspi_ser_clk_src",
729 		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div_gpll1_gpll4_gpll1_early_div,
730 		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div_gpll1_gpll4_gpll1_early_div),
731 		.ops = &clk_rcg2_ops,
732 	},
733 };
734 
735 static const struct freq_tbl ftbl_sdcc1_apps_clk_src[] = {
736 	F(144000, P_XO, 16, 3, 25),
737 	F(400000, P_XO, 12, 1, 4),
738 	F(20000000, P_GPLL0_EARLY_DIV, 5, 1, 3),
739 	F(25000000, P_GPLL0_EARLY_DIV, 6, 1, 2),
740 	F(50000000, P_GPLL0_EARLY_DIV, 6, 0, 0),
741 	F(100000000, P_GPLL0, 6, 0, 0),
742 	F(192000000, P_GPLL4, 8, 0, 0),
743 	F(384000000, P_GPLL4, 4, 0, 0),
744 	{ }
745 };
746 
747 static struct clk_rcg2 sdcc1_apps_clk_src = {
748 	.cmd_rcgr = 0x1602c,
749 	.mnd_width = 8,
750 	.hid_width = 5,
751 	.parent_map = gcc_parent_map_xo_gpll0_gpll4_gpll0_early_div,
752 	.freq_tbl = ftbl_sdcc1_apps_clk_src,
753 	.clkr.hw.init = &(struct clk_init_data){
754 		.name = "sdcc1_apps_clk_src",
755 		.parent_data = gcc_parent_data_xo_gpll0_gpll4_gpll0_early_div,
756 		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll4_gpll0_early_div),
757 		.ops = &clk_rcg2_floor_ops,
758 	},
759 };
760 
761 static const struct freq_tbl ftbl_sdcc1_ice_core_clk_src[] = {
762 	F(75000000, P_GPLL0_EARLY_DIV, 4, 0, 0),
763 	F(150000000, P_GPLL0, 4, 0, 0),
764 	F(200000000, P_GPLL0, 3, 0, 0),
765 	F(300000000, P_GPLL0, 2, 0, 0),
766 	{ }
767 };
768 
769 static struct clk_rcg2 sdcc1_ice_core_clk_src = {
770 	.cmd_rcgr = 0x16010,
771 	.mnd_width = 0,
772 	.hid_width = 5,
773 	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
774 	.freq_tbl = ftbl_sdcc1_ice_core_clk_src,
775 	.clkr.hw.init = &(struct clk_init_data){
776 		.name = "sdcc1_ice_core_clk_src",
777 		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
778 		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
779 		.ops = &clk_rcg2_ops,
780 	},
781 };
782 
783 static const struct freq_tbl ftbl_sdcc2_apps_clk_src[] = {
784 	F(144000, P_XO, 16, 3, 25),
785 	F(400000, P_XO, 12, 1, 4),
786 	F(20000000, P_GPLL0_EARLY_DIV, 5, 1, 3),
787 	F(25000000, P_GPLL0_EARLY_DIV, 6, 1, 2),
788 	F(50000000, P_GPLL0_EARLY_DIV, 6, 0, 0),
789 	F(100000000, P_GPLL0, 6, 0, 0),
790 	F(192000000, P_GPLL4, 8, 0, 0),
791 	F(200000000, P_GPLL0, 3, 0, 0),
792 	{ }
793 };
794 
795 static struct clk_rcg2 sdcc2_apps_clk_src = {
796 	.cmd_rcgr = 0x14010,
797 	.mnd_width = 8,
798 	.hid_width = 5,
799 	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div_gpll4,
800 	.freq_tbl = ftbl_sdcc2_apps_clk_src,
801 	.clkr.hw.init = &(struct clk_init_data){
802 		.name = "sdcc2_apps_clk_src",
803 		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div_gpll4,
804 		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div_gpll4),
805 		.ops = &clk_rcg2_floor_ops,
806 	},
807 };
808 
809 static const struct freq_tbl ftbl_ufs_axi_clk_src[] = {
810 	F(50000000, P_GPLL0_EARLY_DIV, 6, 0, 0),
811 	F(100000000, P_GPLL0, 6, 0, 0),
812 	F(150000000, P_GPLL0, 4, 0, 0),
813 	F(200000000, P_GPLL0, 3, 0, 0),
814 	F(240000000, P_GPLL0, 2.5, 0, 0),
815 	{ }
816 };
817 
818 static struct clk_rcg2 ufs_axi_clk_src = {
819 	.cmd_rcgr = 0x75018,
820 	.mnd_width = 8,
821 	.hid_width = 5,
822 	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
823 	.freq_tbl = ftbl_ufs_axi_clk_src,
824 	.clkr.hw.init = &(struct clk_init_data){
825 		.name = "ufs_axi_clk_src",
826 		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
827 		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
828 		.ops = &clk_rcg2_ops,
829 	},
830 };
831 
832 static const struct freq_tbl ftbl_ufs_ice_core_clk_src[] = {
833 	F(75000000, P_GPLL0_EARLY_DIV, 4, 0, 0),
834 	F(150000000, P_GPLL0, 4, 0, 0),
835 	F(300000000, P_GPLL0, 2, 0, 0),
836 	{ }
837 };
838 
839 static struct clk_rcg2 ufs_ice_core_clk_src = {
840 	.cmd_rcgr = 0x76010,
841 	.mnd_width = 0,
842 	.hid_width = 5,
843 	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
844 	.freq_tbl = ftbl_ufs_ice_core_clk_src,
845 	.clkr.hw.init = &(struct clk_init_data){
846 		.name = "ufs_ice_core_clk_src",
847 		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
848 		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
849 		.ops = &clk_rcg2_ops,
850 	},
851 };
852 
853 static struct clk_rcg2 ufs_phy_aux_clk_src = {
854 	.cmd_rcgr = 0x76044,
855 	.mnd_width = 0,
856 	.hid_width = 5,
857 	.parent_map = gcc_parent_map_xo_sleep_clk,
858 	.freq_tbl = ftbl_hmss_rbcpr_clk_src,
859 	.clkr.hw.init = &(struct clk_init_data){
860 		.name = "ufs_phy_aux_clk_src",
861 		.parent_data = gcc_parent_data_xo_sleep_clk,
862 		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_sleep_clk),
863 		.ops = &clk_rcg2_ops,
864 	},
865 };
866 
867 static const struct freq_tbl ftbl_ufs_unipro_core_clk_src[] = {
868 	F(37500000, P_GPLL0_EARLY_DIV, 8, 0, 0),
869 	F(75000000, P_GPLL0, 8, 0, 0),
870 	F(150000000, P_GPLL0, 4, 0, 0),
871 	{ }
872 };
873 
874 static struct clk_rcg2 ufs_unipro_core_clk_src = {
875 	.cmd_rcgr = 0x76028,
876 	.mnd_width = 0,
877 	.hid_width = 5,
878 	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
879 	.freq_tbl = ftbl_ufs_unipro_core_clk_src,
880 	.clkr.hw.init = &(struct clk_init_data){
881 		.name = "ufs_unipro_core_clk_src",
882 		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
883 		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
884 		.ops = &clk_rcg2_ops,
885 	},
886 };
887 
888 static const struct freq_tbl ftbl_usb20_master_clk_src[] = {
889 	F(19200000, P_XO, 1, 0, 0),
890 	F(60000000, P_GPLL0, 10, 0, 0),
891 	F(120000000, P_GPLL0, 5, 0, 0),
892 	{ }
893 };
894 
895 static struct clk_rcg2 usb20_master_clk_src = {
896 	.cmd_rcgr = 0x2f010,
897 	.mnd_width = 8,
898 	.hid_width = 5,
899 	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
900 	.freq_tbl = ftbl_usb20_master_clk_src,
901 	.clkr.hw.init = &(struct clk_init_data){
902 		.name = "usb20_master_clk_src",
903 		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
904 		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
905 		.ops = &clk_rcg2_ops,
906 	},
907 };
908 
909 static const struct freq_tbl ftbl_usb20_mock_utmi_clk_src[] = {
910 	F(19200000, P_XO, 1, 0, 0),
911 	F(60000000, P_GPLL0, 10, 0, 0),
912 	{ }
913 };
914 
915 static struct clk_rcg2 usb20_mock_utmi_clk_src = {
916 	.cmd_rcgr = 0x2f024,
917 	.mnd_width = 0,
918 	.hid_width = 5,
919 	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
920 	.freq_tbl = ftbl_usb20_mock_utmi_clk_src,
921 	.clkr.hw.init = &(struct clk_init_data){
922 		.name = "usb20_mock_utmi_clk_src",
923 		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
924 		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
925 		.ops = &clk_rcg2_ops,
926 	},
927 };
928 
929 static const struct freq_tbl ftbl_usb30_master_clk_src[] = {
930 	F(19200000, P_XO, 1, 0, 0),
931 	F(66666667, P_GPLL0_EARLY_DIV, 4.5, 0, 0),
932 	F(120000000, P_GPLL0, 5, 0, 0),
933 	F(133333333, P_GPLL0, 4.5, 0, 0),
934 	F(150000000, P_GPLL0, 4, 0, 0),
935 	F(200000000, P_GPLL0, 3, 0, 0),
936 	F(240000000, P_GPLL0, 2.5, 0, 0),
937 	{ }
938 };
939 
940 static struct clk_rcg2 usb30_master_clk_src = {
941 	.cmd_rcgr = 0xf014,
942 	.mnd_width = 8,
943 	.hid_width = 5,
944 	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
945 	.freq_tbl = ftbl_usb30_master_clk_src,
946 	.clkr.hw.init = &(struct clk_init_data){
947 		.name = "usb30_master_clk_src",
948 		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
949 		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
950 		.ops = &clk_rcg2_ops,
951 	},
952 };
953 
954 static const struct freq_tbl ftbl_usb30_mock_utmi_clk_src[] = {
955 	F(19200000, P_XO, 1, 0, 0),
956 	F(40000000, P_GPLL0_EARLY_DIV, 7.5, 0, 0),
957 	F(60000000, P_GPLL0, 10, 0, 0),
958 	{ }
959 };
960 
961 static struct clk_rcg2 usb30_mock_utmi_clk_src = {
962 	.cmd_rcgr = 0xf028,
963 	.mnd_width = 0,
964 	.hid_width = 5,
965 	.parent_map = gcc_parent_map_xo_gpll0_gpll0_early_div,
966 	.freq_tbl = ftbl_usb30_mock_utmi_clk_src,
967 	.clkr.hw.init = &(struct clk_init_data){
968 		.name = "usb30_mock_utmi_clk_src",
969 		.parent_data = gcc_parent_data_xo_gpll0_gpll0_early_div,
970 		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_gpll0_gpll0_early_div),
971 		.ops = &clk_rcg2_ops,
972 	},
973 };
974 
975 static const struct freq_tbl ftbl_usb3_phy_aux_clk_src[] = {
976 	F(1200000, P_XO, 16, 0, 0),
977 	F(19200000, P_XO, 1, 0, 0),
978 	{ }
979 };
980 
981 static struct clk_rcg2 usb3_phy_aux_clk_src = {
982 	.cmd_rcgr = 0x5000c,
983 	.mnd_width = 0,
984 	.hid_width = 5,
985 	.parent_map = gcc_parent_map_xo_sleep_clk,
986 	.freq_tbl = ftbl_usb3_phy_aux_clk_src,
987 	.clkr.hw.init = &(struct clk_init_data){
988 		.name = "usb3_phy_aux_clk_src",
989 		.parent_data = gcc_parent_data_xo_sleep_clk,
990 		.num_parents = ARRAY_SIZE(gcc_parent_data_xo_sleep_clk),
991 		.ops = &clk_rcg2_ops,
992 	},
993 };
994 
995 static struct clk_branch gcc_aggre2_ufs_axi_clk = {
996 	.halt_reg = 0x75034,
997 	.halt_check = BRANCH_HALT,
998 	.clkr = {
999 		.enable_reg = 0x75034,
1000 		.enable_mask = BIT(0),
1001 		.hw.init = &(struct clk_init_data){
1002 			.name = "gcc_aggre2_ufs_axi_clk",
1003 			.parent_hws = (const struct clk_hw*[]) {
1004 				&ufs_axi_clk_src.clkr.hw,
1005 			},
1006 			.num_parents = 1,
1007 			.ops = &clk_branch2_ops,
1008 		},
1009 	},
1010 };
1011 
1012 static struct clk_branch gcc_aggre2_usb3_axi_clk = {
1013 	.halt_reg = 0xf03c,
1014 	.halt_check = BRANCH_HALT,
1015 	.clkr = {
1016 		.enable_reg = 0xf03c,
1017 		.enable_mask = BIT(0),
1018 		.hw.init = &(struct clk_init_data){
1019 			.name = "gcc_aggre2_usb3_axi_clk",
1020 			.parent_hws = (const struct clk_hw*[]) {
1021 				&usb30_master_clk_src.clkr.hw,
1022 			},
1023 			.num_parents = 1,
1024 			.ops = &clk_branch2_ops,
1025 		},
1026 	},
1027 };
1028 
1029 static struct clk_branch gcc_bimc_gfx_clk = {
1030 	.halt_reg = 0x7106c,
1031 	.halt_check = BRANCH_VOTED,
1032 	.clkr = {
1033 		.enable_reg = 0x7106c,
1034 		.enable_mask = BIT(0),
1035 		.hw.init = &(struct clk_init_data){
1036 			.name = "gcc_bimc_gfx_clk",
1037 			.ops = &clk_branch2_ops,
1038 		},
1039 	},
1040 };
1041 
1042 static struct clk_branch gcc_bimc_hmss_axi_clk = {
1043 	.halt_reg = 0x48004,
1044 	.halt_check = BRANCH_HALT_VOTED,
1045 	.clkr = {
1046 		.enable_reg = 0x52004,
1047 		.enable_mask = BIT(22),
1048 		.hw.init = &(struct clk_init_data){
1049 			.name = "gcc_bimc_hmss_axi_clk",
1050 			.ops = &clk_branch2_ops,
1051 		},
1052 	},
1053 };
1054 
1055 static struct clk_branch gcc_bimc_mss_q6_axi_clk = {
1056 	.halt_reg = 0x4401c,
1057 	.halt_check = BRANCH_HALT,
1058 	.clkr = {
1059 		.enable_reg = 0x4401c,
1060 		.enable_mask = BIT(0),
1061 		.hw.init = &(struct clk_init_data){
1062 			.name = "gcc_bimc_mss_q6_axi_clk",
1063 			.ops = &clk_branch2_ops,
1064 		},
1065 	},
1066 };
1067 
1068 static struct clk_branch gcc_blsp1_ahb_clk = {
1069 	.halt_reg = 0x17004,
1070 	.halt_check = BRANCH_HALT_VOTED,
1071 	.clkr = {
1072 		.enable_reg = 0x52004,
1073 		.enable_mask = BIT(17),
1074 		.hw.init = &(struct clk_init_data){
1075 			.name = "gcc_blsp1_ahb_clk",
1076 			.ops = &clk_branch2_ops,
1077 		},
1078 	},
1079 };
1080 
1081 static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
1082 	.halt_reg = 0x19008,
1083 	.halt_check = BRANCH_HALT,
1084 	.clkr = {
1085 		.enable_reg = 0x19008,
1086 		.enable_mask = BIT(0),
1087 		.hw.init = &(struct clk_init_data){
1088 			.name = "gcc_blsp1_qup1_i2c_apps_clk",
1089 			.parent_hws = (const struct clk_hw*[]) {
1090 				&blsp1_qup1_i2c_apps_clk_src.clkr.hw,
1091 			},
1092 			.num_parents = 1,
1093 			.flags = CLK_SET_RATE_PARENT,
1094 			.ops = &clk_branch2_ops,
1095 		},
1096 	},
1097 };
1098 
1099 static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
1100 	.halt_reg = 0x19004,
1101 	.halt_check = BRANCH_HALT,
1102 	.clkr = {
1103 		.enable_reg = 0x19004,
1104 		.enable_mask = BIT(0),
1105 		.hw.init = &(struct clk_init_data){
1106 			.name = "gcc_blsp1_qup1_spi_apps_clk",
1107 			.parent_hws = (const struct clk_hw*[]) {
1108 				&blsp1_qup1_spi_apps_clk_src.clkr.hw,
1109 			},
1110 			.num_parents = 1,
1111 			.flags = CLK_SET_RATE_PARENT,
1112 			.ops = &clk_branch2_ops,
1113 		},
1114 	},
1115 };
1116 
1117 static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
1118 	.halt_reg = 0x1b008,
1119 	.halt_check = BRANCH_HALT,
1120 	.clkr = {
1121 		.enable_reg = 0x1b008,
1122 		.enable_mask = BIT(0),
1123 		.hw.init = &(struct clk_init_data){
1124 			.name = "gcc_blsp1_qup2_i2c_apps_clk",
1125 			.parent_hws = (const struct clk_hw*[]) {
1126 				&blsp1_qup2_i2c_apps_clk_src.clkr.hw,
1127 			},
1128 			.num_parents = 1,
1129 			.flags = CLK_SET_RATE_PARENT,
1130 			.ops = &clk_branch2_ops,
1131 		},
1132 	},
1133 };
1134 
1135 static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
1136 	.halt_reg = 0x1b004,
1137 	.halt_check = BRANCH_HALT,
1138 	.clkr = {
1139 		.enable_reg = 0x1b004,
1140 		.enable_mask = BIT(0),
1141 		.hw.init = &(struct clk_init_data){
1142 			.name = "gcc_blsp1_qup2_spi_apps_clk",
1143 			.parent_hws = (const struct clk_hw*[]) {
1144 				&blsp1_qup2_spi_apps_clk_src.clkr.hw,
1145 			},
1146 			.num_parents = 1,
1147 			.flags = CLK_SET_RATE_PARENT,
1148 			.ops = &clk_branch2_ops,
1149 		},
1150 	},
1151 };
1152 
1153 static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
1154 	.halt_reg = 0x1d008,
1155 	.halt_check = BRANCH_HALT,
1156 	.clkr = {
1157 		.enable_reg = 0x1d008,
1158 		.enable_mask = BIT(0),
1159 		.hw.init = &(struct clk_init_data){
1160 			.name = "gcc_blsp1_qup3_i2c_apps_clk",
1161 			.parent_hws = (const struct clk_hw*[]) {
1162 				&blsp1_qup3_i2c_apps_clk_src.clkr.hw,
1163 			},
1164 			.num_parents = 1,
1165 			.flags = CLK_SET_RATE_PARENT,
1166 			.ops = &clk_branch2_ops,
1167 		},
1168 	},
1169 };
1170 
1171 static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
1172 	.halt_reg = 0x1d004,
1173 	.halt_check = BRANCH_HALT,
1174 	.clkr = {
1175 		.enable_reg = 0x1d004,
1176 		.enable_mask = BIT(0),
1177 		.hw.init = &(struct clk_init_data){
1178 			.name = "gcc_blsp1_qup3_spi_apps_clk",
1179 			.parent_hws = (const struct clk_hw*[]) {
1180 				&blsp1_qup3_spi_apps_clk_src.clkr.hw,
1181 			},
1182 			.num_parents = 1,
1183 			.flags = CLK_SET_RATE_PARENT,
1184 			.ops = &clk_branch2_ops,
1185 		},
1186 	},
1187 };
1188 
1189 static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
1190 	.halt_reg = 0x1f008,
1191 	.halt_check = BRANCH_HALT,
1192 	.clkr = {
1193 		.enable_reg = 0x1f008,
1194 		.enable_mask = BIT(0),
1195 		.hw.init = &(struct clk_init_data){
1196 			.name = "gcc_blsp1_qup4_i2c_apps_clk",
1197 			.parent_hws = (const struct clk_hw*[]) {
1198 				&blsp1_qup4_i2c_apps_clk_src.clkr.hw,
1199 			},
1200 			.num_parents = 1,
1201 			.flags = CLK_SET_RATE_PARENT,
1202 			.ops = &clk_branch2_ops,
1203 		},
1204 	},
1205 };
1206 
1207 static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
1208 	.halt_reg = 0x1f004,
1209 	.halt_check = BRANCH_HALT,
1210 	.clkr = {
1211 		.enable_reg = 0x1f004,
1212 		.enable_mask = BIT(0),
1213 		.hw.init = &(struct clk_init_data){
1214 			.name = "gcc_blsp1_qup4_spi_apps_clk",
1215 			.parent_hws = (const struct clk_hw*[]) {
1216 				&blsp1_qup4_spi_apps_clk_src.clkr.hw,
1217 			},
1218 			.num_parents = 1,
1219 			.flags = CLK_SET_RATE_PARENT,
1220 			.ops = &clk_branch2_ops,
1221 		},
1222 	},
1223 };
1224 
1225 static struct clk_branch gcc_blsp1_uart1_apps_clk = {
1226 	.halt_reg = 0x1a004,
1227 	.halt_check = BRANCH_HALT,
1228 	.clkr = {
1229 		.enable_reg = 0x1a004,
1230 		.enable_mask = BIT(0),
1231 		.hw.init = &(struct clk_init_data){
1232 			.name = "gcc_blsp1_uart1_apps_clk",
1233 			.parent_hws = (const struct clk_hw*[]) {
1234 				&blsp1_uart1_apps_clk_src.clkr.hw,
1235 			},
1236 			.num_parents = 1,
1237 			.flags = CLK_SET_RATE_PARENT,
1238 			.ops = &clk_branch2_ops,
1239 		},
1240 	},
1241 };
1242 
1243 static struct clk_branch gcc_blsp1_uart2_apps_clk = {
1244 	.halt_reg = 0x1c004,
1245 	.halt_check = BRANCH_HALT,
1246 	.clkr = {
1247 		.enable_reg = 0x1c004,
1248 		.enable_mask = BIT(0),
1249 		.hw.init = &(struct clk_init_data){
1250 			.name = "gcc_blsp1_uart2_apps_clk",
1251 			.parent_hws = (const struct clk_hw*[]) {
1252 				&blsp1_uart2_apps_clk_src.clkr.hw,
1253 			},
1254 			.num_parents = 1,
1255 			.flags = CLK_SET_RATE_PARENT,
1256 			.ops = &clk_branch2_ops,
1257 		},
1258 	},
1259 };
1260 
1261 static struct clk_branch gcc_blsp2_ahb_clk = {
1262 	.halt_reg = 0x25004,
1263 	.halt_check = BRANCH_HALT_VOTED,
1264 	.clkr = {
1265 		.enable_reg = 0x52004,
1266 		.enable_mask = BIT(15),
1267 		.hw.init = &(struct clk_init_data){
1268 			.name = "gcc_blsp2_ahb_clk",
1269 			.ops = &clk_branch2_ops,
1270 		},
1271 	},
1272 };
1273 
1274 static struct clk_branch gcc_blsp2_qup1_i2c_apps_clk = {
1275 	.halt_reg = 0x26008,
1276 	.halt_check = BRANCH_HALT,
1277 	.clkr = {
1278 		.enable_reg = 0x26008,
1279 		.enable_mask = BIT(0),
1280 		.hw.init = &(struct clk_init_data){
1281 			.name = "gcc_blsp2_qup1_i2c_apps_clk",
1282 			.parent_hws = (const struct clk_hw*[]) {
1283 				&blsp2_qup1_i2c_apps_clk_src.clkr.hw,
1284 			},
1285 			.num_parents = 1,
1286 			.flags = CLK_SET_RATE_PARENT,
1287 			.ops = &clk_branch2_ops,
1288 		},
1289 	},
1290 };
1291 
1292 static struct clk_branch gcc_blsp2_qup1_spi_apps_clk = {
1293 	.halt_reg = 0x26004,
1294 	.halt_check = BRANCH_HALT,
1295 	.clkr = {
1296 		.enable_reg = 0x26004,
1297 		.enable_mask = BIT(0),
1298 		.hw.init = &(struct clk_init_data){
1299 			.name = "gcc_blsp2_qup1_spi_apps_clk",
1300 			.parent_hws = (const struct clk_hw*[]) {
1301 				&blsp2_qup1_spi_apps_clk_src.clkr.hw,
1302 			},
1303 			.num_parents = 1,
1304 			.flags = CLK_SET_RATE_PARENT,
1305 			.ops = &clk_branch2_ops,
1306 		},
1307 	},
1308 };
1309 
1310 static struct clk_branch gcc_blsp2_qup2_i2c_apps_clk = {
1311 	.halt_reg = 0x28008,
1312 	.halt_check = BRANCH_HALT,
1313 	.clkr = {
1314 		.enable_reg = 0x28008,
1315 		.enable_mask = BIT(0),
1316 		.hw.init = &(struct clk_init_data){
1317 			.name = "gcc_blsp2_qup2_i2c_apps_clk",
1318 			.parent_hws = (const struct clk_hw*[]) {
1319 				&blsp2_qup2_i2c_apps_clk_src.clkr.hw,
1320 			},
1321 			.num_parents = 1,
1322 			.flags = CLK_SET_RATE_PARENT,
1323 			.ops = &clk_branch2_ops,
1324 		},
1325 	},
1326 };
1327 
1328 static struct clk_branch gcc_blsp2_qup2_spi_apps_clk = {
1329 	.halt_reg = 0x28004,
1330 	.halt_check = BRANCH_HALT,
1331 	.clkr = {
1332 		.enable_reg = 0x28004,
1333 		.enable_mask = BIT(0),
1334 		.hw.init = &(struct clk_init_data){
1335 			.name = "gcc_blsp2_qup2_spi_apps_clk",
1336 			.parent_hws = (const struct clk_hw*[]) {
1337 				&blsp2_qup2_spi_apps_clk_src.clkr.hw,
1338 			},
1339 			.num_parents = 1,
1340 			.flags = CLK_SET_RATE_PARENT,
1341 			.ops = &clk_branch2_ops,
1342 		},
1343 	},
1344 };
1345 
1346 static struct clk_branch gcc_blsp2_qup3_i2c_apps_clk = {
1347 	.halt_reg = 0x2a008,
1348 	.halt_check = BRANCH_HALT,
1349 	.clkr = {
1350 		.enable_reg = 0x2a008,
1351 		.enable_mask = BIT(0),
1352 		.hw.init = &(struct clk_init_data){
1353 			.name = "gcc_blsp2_qup3_i2c_apps_clk",
1354 			.parent_hws = (const struct clk_hw*[]) {
1355 				&blsp2_qup3_i2c_apps_clk_src.clkr.hw,
1356 			},
1357 			.num_parents = 1,
1358 			.flags = CLK_SET_RATE_PARENT,
1359 			.ops = &clk_branch2_ops,
1360 		},
1361 	},
1362 };
1363 
1364 static struct clk_branch gcc_blsp2_qup3_spi_apps_clk = {
1365 	.halt_reg = 0x2a004,
1366 	.halt_check = BRANCH_HALT,
1367 	.clkr = {
1368 		.enable_reg = 0x2a004,
1369 		.enable_mask = BIT(0),
1370 		.hw.init = &(struct clk_init_data){
1371 			.name = "gcc_blsp2_qup3_spi_apps_clk",
1372 			.parent_hws = (const struct clk_hw*[]) {
1373 				&blsp2_qup3_spi_apps_clk_src.clkr.hw,
1374 			},
1375 			.num_parents = 1,
1376 			.flags = CLK_SET_RATE_PARENT,
1377 			.ops = &clk_branch2_ops,
1378 		},
1379 	},
1380 };
1381 
1382 static struct clk_branch gcc_blsp2_qup4_i2c_apps_clk = {
1383 	.halt_reg = 0x2c008,
1384 	.halt_check = BRANCH_HALT,
1385 	.clkr = {
1386 		.enable_reg = 0x2c008,
1387 		.enable_mask = BIT(0),
1388 		.hw.init = &(struct clk_init_data){
1389 			.name = "gcc_blsp2_qup4_i2c_apps_clk",
1390 			.parent_hws = (const struct clk_hw*[]) {
1391 				&blsp2_qup4_i2c_apps_clk_src.clkr.hw,
1392 			},
1393 			.num_parents = 1,
1394 			.flags = CLK_SET_RATE_PARENT,
1395 			.ops = &clk_branch2_ops,
1396 		},
1397 	},
1398 };
1399 
1400 static struct clk_branch gcc_blsp2_qup4_spi_apps_clk = {
1401 	.halt_reg = 0x2c004,
1402 	.halt_check = BRANCH_HALT,
1403 	.clkr = {
1404 		.enable_reg = 0x2c004,
1405 		.enable_mask = BIT(0),
1406 		.hw.init = &(struct clk_init_data){
1407 			.name = "gcc_blsp2_qup4_spi_apps_clk",
1408 			.parent_hws = (const struct clk_hw*[]) {
1409 				&blsp2_qup4_spi_apps_clk_src.clkr.hw,
1410 			},
1411 			.num_parents = 1,
1412 			.flags = CLK_SET_RATE_PARENT,
1413 			.ops = &clk_branch2_ops,
1414 		},
1415 	},
1416 };
1417 
1418 static struct clk_branch gcc_blsp2_uart1_apps_clk = {
1419 	.halt_reg = 0x27004,
1420 	.halt_check = BRANCH_HALT,
1421 	.clkr = {
1422 		.enable_reg = 0x27004,
1423 		.enable_mask = BIT(0),
1424 		.hw.init = &(struct clk_init_data){
1425 			.name = "gcc_blsp2_uart1_apps_clk",
1426 			.parent_hws = (const struct clk_hw*[]) {
1427 				&blsp2_uart1_apps_clk_src.clkr.hw,
1428 			},
1429 			.num_parents = 1,
1430 			.flags = CLK_SET_RATE_PARENT,
1431 			.ops = &clk_branch2_ops,
1432 		},
1433 	},
1434 };
1435 
1436 static struct clk_branch gcc_blsp2_uart2_apps_clk = {
1437 	.halt_reg = 0x29004,
1438 	.halt_check = BRANCH_HALT,
1439 	.clkr = {
1440 		.enable_reg = 0x29004,
1441 		.enable_mask = BIT(0),
1442 		.hw.init = &(struct clk_init_data){
1443 			.name = "gcc_blsp2_uart2_apps_clk",
1444 			.parent_hws = (const struct clk_hw*[]) {
1445 				&blsp2_uart2_apps_clk_src.clkr.hw,
1446 			},
1447 			.num_parents = 1,
1448 			.flags = CLK_SET_RATE_PARENT,
1449 			.ops = &clk_branch2_ops,
1450 		},
1451 	},
1452 };
1453 
1454 static struct clk_branch gcc_boot_rom_ahb_clk = {
1455 	.halt_reg = 0x38004,
1456 	.halt_check = BRANCH_HALT_VOTED,
1457 	.clkr = {
1458 		.enable_reg = 0x52004,
1459 		.enable_mask = BIT(10),
1460 		.hw.init = &(struct clk_init_data){
1461 			.name = "gcc_boot_rom_ahb_clk",
1462 			.ops = &clk_branch2_ops,
1463 		},
1464 	},
1465 };
1466 
1467 static struct clk_branch gcc_cfg_noc_usb2_axi_clk = {
1468 	.halt_reg = 0x5058,
1469 	.halt_check = BRANCH_HALT,
1470 	.clkr = {
1471 		.enable_reg = 0x5058,
1472 		.enable_mask = BIT(0),
1473 		.hw.init = &(struct clk_init_data){
1474 			.name = "gcc_cfg_noc_usb2_axi_clk",
1475 			.parent_hws = (const struct clk_hw*[]) {
1476 				&usb20_master_clk_src.clkr.hw,
1477 			},
1478 			.num_parents = 1,
1479 			.ops = &clk_branch2_ops,
1480 		},
1481 	},
1482 };
1483 
1484 static struct clk_branch gcc_cfg_noc_usb3_axi_clk = {
1485 	.halt_reg = 0x5018,
1486 	.halt_check = BRANCH_HALT,
1487 	.clkr = {
1488 		.enable_reg = 0x5018,
1489 		.enable_mask = BIT(0),
1490 		.hw.init = &(struct clk_init_data){
1491 			.name = "gcc_cfg_noc_usb3_axi_clk",
1492 			.parent_hws = (const struct clk_hw*[]) {
1493 				&usb30_master_clk_src.clkr.hw,
1494 			},
1495 			.num_parents = 1,
1496 			.ops = &clk_branch2_ops,
1497 		},
1498 	},
1499 };
1500 
1501 static struct clk_branch gcc_dcc_ahb_clk = {
1502 	.halt_reg = 0x84004,
1503 	.clkr = {
1504 		.enable_reg = 0x84004,
1505 		.enable_mask = BIT(0),
1506 		.hw.init = &(struct clk_init_data){
1507 			.name = "gcc_dcc_ahb_clk",
1508 			.ops = &clk_branch2_ops,
1509 		},
1510 	},
1511 };
1512 
1513 static struct clk_branch gcc_gp1_clk = {
1514 	.halt_reg = 0x64000,
1515 	.halt_check = BRANCH_HALT,
1516 	.clkr = {
1517 		.enable_reg = 0x64000,
1518 		.enable_mask = BIT(0),
1519 		.hw.init = &(struct clk_init_data){
1520 			.name = "gcc_gp1_clk",
1521 			.parent_hws = (const struct clk_hw*[]) {
1522 				&gp1_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_gp2_clk = {
1532 	.halt_reg = 0x65000,
1533 	.halt_check = BRANCH_HALT,
1534 	.clkr = {
1535 		.enable_reg = 0x65000,
1536 		.enable_mask = BIT(0),
1537 		.hw.init = &(struct clk_init_data){
1538 			.name = "gcc_gp2_clk",
1539 			.parent_hws = (const struct clk_hw*[]) {
1540 				&gp2_clk_src.clkr.hw,
1541 			},
1542 			.num_parents = 1,
1543 			.flags = CLK_SET_RATE_PARENT,
1544 			.ops = &clk_branch2_ops,
1545 		},
1546 	},
1547 };
1548 
1549 static struct clk_branch gcc_gp3_clk = {
1550 	.halt_reg = 0x66000,
1551 	.halt_check = BRANCH_HALT,
1552 	.clkr = {
1553 		.enable_reg = 0x66000,
1554 		.enable_mask = BIT(0),
1555 		.hw.init = &(struct clk_init_data){
1556 			.name = "gcc_gp3_clk",
1557 			.parent_hws = (const struct clk_hw*[]) {
1558 				&gp3_clk_src.clkr.hw,
1559 			},
1560 			.num_parents = 1,
1561 			.flags = CLK_SET_RATE_PARENT,
1562 			.ops = &clk_branch2_ops,
1563 		},
1564 	},
1565 };
1566 
1567 static struct clk_branch gcc_gpu_bimc_gfx_clk = {
1568 	.halt_reg = 0x71010,
1569 	.halt_check = BRANCH_VOTED,
1570 	.clkr = {
1571 		.enable_reg = 0x71010,
1572 		.enable_mask = BIT(0),
1573 		.hw.init = &(struct clk_init_data){
1574 			.name = "gcc_gpu_bimc_gfx_clk",
1575 			.ops = &clk_branch2_ops,
1576 		},
1577 	},
1578 };
1579 
1580 static struct clk_branch gcc_gpu_cfg_ahb_clk = {
1581 	.halt_reg = 0x71004,
1582 	.halt_check = BRANCH_VOTED,
1583 	.clkr = {
1584 		.enable_reg = 0x71004,
1585 		.enable_mask = BIT(0),
1586 		.hw.init = &(struct clk_init_data){
1587 			.name = "gcc_gpu_cfg_ahb_clk",
1588 			.ops = &clk_branch2_ops,
1589 			.flags = CLK_IS_CRITICAL,
1590 		},
1591 	},
1592 };
1593 
1594 static struct clk_branch gcc_gpu_gpll0_clk = {
1595 	.halt_reg = 0x5200c,
1596 	.halt_check = BRANCH_HALT_DELAY,
1597 	.clkr = {
1598 		.enable_reg = 0x5200c,
1599 		.enable_mask = BIT(4),
1600 		.hw.init = &(struct clk_init_data){
1601 			.name = "gcc_gpu_gpll0_clk",
1602 			.parent_hws = (const struct clk_hw*[]) {
1603 				&gpll0.clkr.hw,
1604 			},
1605 			.num_parents = 1,
1606 			.ops = &clk_branch2_ops,
1607 		},
1608 	},
1609 };
1610 
1611 static struct clk_branch gcc_gpu_gpll0_div_clk = {
1612 	.halt_reg = 0x5200c,
1613 	.halt_check = BRANCH_HALT_DELAY,
1614 	.clkr = {
1615 		.enable_reg = 0x5200c,
1616 		.enable_mask = BIT(3),
1617 		.hw.init = &(struct clk_init_data){
1618 			.name = "gcc_gpu_gpll0_div_clk",
1619 			.parent_hws = (const struct clk_hw*[]) {
1620 				&gpll0_early_div.hw,
1621 			},
1622 			.num_parents = 1,
1623 			.ops = &clk_branch2_ops,
1624 		},
1625 	},
1626 };
1627 
1628 static struct clk_branch gcc_hmss_dvm_bus_clk = {
1629 	.halt_reg = 0x4808c,
1630 	.halt_check = BRANCH_HALT,
1631 	.clkr = {
1632 		.enable_reg = 0x4808c,
1633 		.enable_mask = BIT(0),
1634 		.hw.init = &(struct clk_init_data){
1635 			.name = "gcc_hmss_dvm_bus_clk",
1636 			.ops = &clk_branch2_ops,
1637 			.flags = CLK_IGNORE_UNUSED,
1638 		},
1639 	},
1640 };
1641 
1642 static struct clk_branch gcc_hmss_rbcpr_clk = {
1643 	.halt_reg = 0x48008,
1644 	.halt_check = BRANCH_HALT,
1645 	.clkr = {
1646 		.enable_reg = 0x48008,
1647 		.enable_mask = BIT(0),
1648 		.hw.init = &(struct clk_init_data){
1649 			.name = "gcc_hmss_rbcpr_clk",
1650 			.parent_hws = (const struct clk_hw*[]) {
1651 				&hmss_rbcpr_clk_src.clkr.hw,
1652 			},
1653 			.num_parents = 1,
1654 			.flags = CLK_SET_RATE_PARENT,
1655 			.ops = &clk_branch2_ops,
1656 		},
1657 	},
1658 };
1659 
1660 static struct clk_branch gcc_mmss_gpll0_clk = {
1661 	.halt_reg = 0x5200c,
1662 	.halt_check = BRANCH_HALT_DELAY,
1663 	.clkr = {
1664 		.enable_reg = 0x5200c,
1665 		.enable_mask = BIT(1),
1666 		.hw.init = &(struct clk_init_data){
1667 			.name = "gcc_mmss_gpll0_clk",
1668 			.parent_hws = (const struct clk_hw*[]) {
1669 				&gpll0.clkr.hw,
1670 			},
1671 			.num_parents = 1,
1672 			.ops = &clk_branch2_ops,
1673 		},
1674 	},
1675 };
1676 
1677 static struct clk_branch gcc_mmss_gpll0_div_clk = {
1678 	.halt_reg = 0x5200c,
1679 	.halt_check = BRANCH_HALT_DELAY,
1680 	.clkr = {
1681 		.enable_reg = 0x5200c,
1682 		.enable_mask = BIT(0),
1683 		.hw.init = &(struct clk_init_data){
1684 			.name = "gcc_mmss_gpll0_div_clk",
1685 			.parent_hws = (const struct clk_hw*[]) {
1686 				&gpll0_early_div.hw,
1687 			},
1688 			.num_parents = 1,
1689 			.ops = &clk_branch2_ops,
1690 		},
1691 	},
1692 };
1693 
1694 static struct clk_branch gcc_mmss_noc_cfg_ahb_clk = {
1695 	.halt_reg = 0x9004,
1696 	.halt_check = BRANCH_HALT,
1697 	.clkr = {
1698 		.enable_reg = 0x9004,
1699 		.enable_mask = BIT(0),
1700 		.hw.init = &(struct clk_init_data){
1701 			.name = "gcc_mmss_noc_cfg_ahb_clk",
1702 			.ops = &clk_branch2_ops,
1703 			/*
1704 			 * Any access to mmss depends on this clock.
1705 			 * Gating this clock has been shown to crash the system
1706 			 * when mmssnoc_axi_rpm_clk is inited in rpmcc.
1707 			 */
1708 			.flags = CLK_IS_CRITICAL,
1709 		},
1710 	},
1711 };
1712 
1713 static struct clk_branch gcc_mmss_sys_noc_axi_clk = {
1714 	.halt_reg = 0x9000,
1715 	.halt_check = BRANCH_HALT,
1716 	.clkr = {
1717 		.enable_reg = 0x9000,
1718 		.enable_mask = BIT(0),
1719 		.hw.init = &(struct clk_init_data){
1720 			.name = "gcc_mmss_sys_noc_axi_clk",
1721 			.ops = &clk_branch2_ops,
1722 		},
1723 	},
1724 };
1725 
1726 static struct clk_branch gcc_mss_cfg_ahb_clk = {
1727 	.halt_reg = 0x8a000,
1728 	.clkr = {
1729 		.enable_reg = 0x8a000,
1730 		.enable_mask = BIT(0),
1731 		.hw.init = &(struct clk_init_data){
1732 			.name = "gcc_mss_cfg_ahb_clk",
1733 			.ops = &clk_branch2_ops,
1734 		},
1735 	},
1736 };
1737 
1738 static struct clk_branch gcc_mss_mnoc_bimc_axi_clk = {
1739 	.halt_reg = 0x8a004,
1740 	.halt_check = BRANCH_HALT,
1741 	.hwcg_reg = 0x8a004,
1742 	.hwcg_bit = 1,
1743 	.clkr = {
1744 		.enable_reg = 0x8a004,
1745 		.enable_mask = BIT(0),
1746 		.hw.init = &(struct clk_init_data){
1747 			.name = "gcc_mss_mnoc_bimc_axi_clk",
1748 			.ops = &clk_branch2_ops,
1749 		},
1750 	},
1751 };
1752 
1753 static struct clk_branch gcc_mss_q6_bimc_axi_clk = {
1754 	.halt_reg = 0x8a040,
1755 	.clkr = {
1756 		.enable_reg = 0x8a040,
1757 		.enable_mask = BIT(0),
1758 		.hw.init = &(struct clk_init_data){
1759 			.name = "gcc_mss_q6_bimc_axi_clk",
1760 			.ops = &clk_branch2_ops,
1761 		},
1762 	},
1763 };
1764 
1765 static struct clk_branch gcc_mss_snoc_axi_clk = {
1766 	.halt_reg = 0x8a03c,
1767 	.clkr = {
1768 		.enable_reg = 0x8a03c,
1769 		.enable_mask = BIT(0),
1770 		.hw.init = &(struct clk_init_data){
1771 			.name = "gcc_mss_snoc_axi_clk",
1772 			.ops = &clk_branch2_ops,
1773 		},
1774 	},
1775 };
1776 
1777 static struct clk_branch gcc_pdm2_clk = {
1778 	.halt_reg = 0x3300c,
1779 	.halt_check = BRANCH_HALT,
1780 	.clkr = {
1781 		.enable_reg = 0x3300c,
1782 		.enable_mask = BIT(0),
1783 		.hw.init = &(struct clk_init_data){
1784 			.name = "gcc_pdm2_clk",
1785 			.parent_hws = (const struct clk_hw*[]) {
1786 				&pdm2_clk_src.clkr.hw,
1787 			},
1788 			.num_parents = 1,
1789 			.flags = CLK_SET_RATE_PARENT,
1790 			.ops = &clk_branch2_ops,
1791 		},
1792 	},
1793 };
1794 
1795 static struct clk_branch gcc_pdm_ahb_clk = {
1796 	.halt_reg = 0x33004,
1797 	.halt_check = BRANCH_HALT,
1798 	.clkr = {
1799 		.enable_reg = 0x33004,
1800 		.enable_mask = BIT(0),
1801 		.hw.init = &(struct clk_init_data){
1802 			.name = "gcc_pdm_ahb_clk",
1803 			.ops = &clk_branch2_ops,
1804 		},
1805 	},
1806 };
1807 
1808 static struct clk_branch gcc_prng_ahb_clk = {
1809 	.halt_reg = 0x34004,
1810 	.halt_check = BRANCH_HALT_VOTED,
1811 	.clkr = {
1812 		.enable_reg = 0x52004,
1813 		.enable_mask = BIT(13),
1814 		.hw.init = &(struct clk_init_data){
1815 			.name = "gcc_prng_ahb_clk",
1816 			.ops = &clk_branch2_ops,
1817 		},
1818 	},
1819 };
1820 
1821 static struct clk_branch gcc_qspi_ahb_clk = {
1822 	.halt_reg = 0x4d004,
1823 	.halt_check = BRANCH_HALT,
1824 	.clkr = {
1825 		.enable_reg = 0x4d004,
1826 		.enable_mask = BIT(0),
1827 		.hw.init = &(struct clk_init_data){
1828 			.name = "gcc_qspi_ahb_clk",
1829 			.ops = &clk_branch2_ops,
1830 		},
1831 	},
1832 };
1833 
1834 static struct clk_branch gcc_qspi_ser_clk = {
1835 	.halt_reg = 0x4d008,
1836 	.halt_check = BRANCH_HALT,
1837 	.clkr = {
1838 		.enable_reg = 0x4d008,
1839 		.enable_mask = BIT(0),
1840 		.hw.init = &(struct clk_init_data){
1841 			.name = "gcc_qspi_ser_clk",
1842 			.parent_hws = (const struct clk_hw*[]) {
1843 				&qspi_ser_clk_src.clkr.hw,
1844 			},
1845 			.num_parents = 1,
1846 			.flags = CLK_SET_RATE_PARENT,
1847 			.ops = &clk_branch2_ops,
1848 		},
1849 	},
1850 };
1851 
1852 static struct clk_branch gcc_rx0_usb2_clkref_clk = {
1853 	.halt_reg = 0x88018,
1854 	.halt_check = BRANCH_HALT_VOTED,
1855 	.clkr = {
1856 		.enable_reg = 0x88018,
1857 		.enable_mask = BIT(0),
1858 		.hw.init = &(struct clk_init_data){
1859 			.name = "gcc_rx0_usb2_clkref_clk",
1860 			.ops = &clk_branch2_ops,
1861 		},
1862 	},
1863 };
1864 
1865 static struct clk_branch gcc_rx1_usb2_clkref_clk = {
1866 	.halt_reg = 0x88014,
1867 	.halt_check = BRANCH_HALT_VOTED,
1868 	.clkr = {
1869 		.enable_reg = 0x88014,
1870 		.enable_mask = BIT(0),
1871 		.hw.init = &(struct clk_init_data){
1872 			.name = "gcc_rx1_usb2_clkref_clk",
1873 			.ops = &clk_branch2_ops,
1874 		},
1875 	},
1876 };
1877 
1878 static struct clk_branch gcc_sdcc1_ahb_clk = {
1879 	.halt_reg = 0x16008,
1880 	.halt_check = BRANCH_HALT,
1881 	.clkr = {
1882 		.enable_reg = 0x16008,
1883 		.enable_mask = BIT(0),
1884 		.hw.init = &(struct clk_init_data){
1885 			.name = "gcc_sdcc1_ahb_clk",
1886 			.ops = &clk_branch2_ops,
1887 		},
1888 	},
1889 };
1890 
1891 static struct clk_branch gcc_sdcc1_apps_clk = {
1892 	.halt_reg = 0x16004,
1893 	.halt_check = BRANCH_HALT,
1894 	.clkr = {
1895 		.enable_reg = 0x16004,
1896 		.enable_mask = BIT(0),
1897 		.hw.init = &(struct clk_init_data){
1898 			.name = "gcc_sdcc1_apps_clk",
1899 			.parent_hws = (const struct clk_hw*[]) {
1900 				&sdcc1_apps_clk_src.clkr.hw,
1901 			},
1902 			.num_parents = 1,
1903 			.flags = CLK_SET_RATE_PARENT,
1904 			.ops = &clk_branch2_ops,
1905 		},
1906 	},
1907 };
1908 
1909 static struct clk_branch gcc_sdcc1_ice_core_clk = {
1910 	.halt_reg = 0x1600c,
1911 	.halt_check = BRANCH_HALT,
1912 	.clkr = {
1913 		.enable_reg = 0x1600c,
1914 		.enable_mask = BIT(0),
1915 		.hw.init = &(struct clk_init_data){
1916 			.name = "gcc_sdcc1_ice_core_clk",
1917 			.parent_hws = (const struct clk_hw*[]) {
1918 				&sdcc1_ice_core_clk_src.clkr.hw,
1919 			},
1920 			.num_parents = 1,
1921 			.flags = CLK_SET_RATE_PARENT,
1922 			.ops = &clk_branch2_ops,
1923 		},
1924 	},
1925 };
1926 
1927 static struct clk_branch gcc_sdcc2_ahb_clk = {
1928 	.halt_reg = 0x14008,
1929 	.halt_check = BRANCH_HALT,
1930 	.clkr = {
1931 		.enable_reg = 0x14008,
1932 		.enable_mask = BIT(0),
1933 		.hw.init = &(struct clk_init_data){
1934 			.name = "gcc_sdcc2_ahb_clk",
1935 			.ops = &clk_branch2_ops,
1936 		},
1937 	},
1938 };
1939 
1940 static struct clk_branch gcc_sdcc2_apps_clk = {
1941 	.halt_reg = 0x14004,
1942 	.halt_check = BRANCH_HALT,
1943 	.clkr = {
1944 		.enable_reg = 0x14004,
1945 		.enable_mask = BIT(0),
1946 		.hw.init = &(struct clk_init_data){
1947 			.name = "gcc_sdcc2_apps_clk",
1948 			.parent_hws = (const struct clk_hw*[]) {
1949 				&sdcc2_apps_clk_src.clkr.hw,
1950 			},
1951 			.num_parents = 1,
1952 			.flags = CLK_SET_RATE_PARENT,
1953 			.ops = &clk_branch2_ops,
1954 		},
1955 	},
1956 };
1957 
1958 static struct clk_branch gcc_ufs_ahb_clk = {
1959 	.halt_reg = 0x7500c,
1960 	.halt_check = BRANCH_HALT,
1961 	.clkr = {
1962 		.enable_reg = 0x7500c,
1963 		.enable_mask = BIT(0),
1964 		.hw.init = &(struct clk_init_data){
1965 			.name = "gcc_ufs_ahb_clk",
1966 			.ops = &clk_branch2_ops,
1967 		},
1968 	},
1969 };
1970 
1971 static struct clk_branch gcc_ufs_axi_clk = {
1972 	.halt_reg = 0x75008,
1973 	.halt_check = BRANCH_HALT,
1974 	.clkr = {
1975 		.enable_reg = 0x75008,
1976 		.enable_mask = BIT(0),
1977 		.hw.init = &(struct clk_init_data){
1978 			.name = "gcc_ufs_axi_clk",
1979 			.parent_hws = (const struct clk_hw*[]) {
1980 				&ufs_axi_clk_src.clkr.hw,
1981 			},
1982 			.num_parents = 1,
1983 			.flags = CLK_SET_RATE_PARENT,
1984 			.ops = &clk_branch2_ops,
1985 		},
1986 	},
1987 };
1988 
1989 static struct clk_branch gcc_ufs_clkref_clk = {
1990 	.halt_reg = 0x88008,
1991 	.halt_check = BRANCH_HALT,
1992 	.clkr = {
1993 		.enable_reg = 0x88008,
1994 		.enable_mask = BIT(0),
1995 		.hw.init = &(struct clk_init_data){
1996 			.name = "gcc_ufs_clkref_clk",
1997 			.ops = &clk_branch2_ops,
1998 		},
1999 	},
2000 };
2001 
2002 static struct clk_branch gcc_ufs_ice_core_clk = {
2003 	.halt_reg = 0x7600c,
2004 	.halt_check = BRANCH_HALT,
2005 	.clkr = {
2006 		.enable_reg = 0x7600c,
2007 		.enable_mask = BIT(0),
2008 		.hw.init = &(struct clk_init_data){
2009 			.name = "gcc_ufs_ice_core_clk",
2010 			.parent_hws = (const struct clk_hw*[]) {
2011 				&ufs_ice_core_clk_src.clkr.hw,
2012 			},
2013 			.num_parents = 1,
2014 			.flags = CLK_SET_RATE_PARENT,
2015 			.ops = &clk_branch2_ops,
2016 		},
2017 	},
2018 };
2019 
2020 static struct clk_branch gcc_ufs_phy_aux_clk = {
2021 	.halt_reg = 0x76040,
2022 	.halt_check = BRANCH_HALT,
2023 	.clkr = {
2024 		.enable_reg = 0x76040,
2025 		.enable_mask = BIT(0),
2026 		.hw.init = &(struct clk_init_data){
2027 			.name = "gcc_ufs_phy_aux_clk",
2028 			.parent_hws = (const struct clk_hw*[]) {
2029 				&ufs_phy_aux_clk_src.clkr.hw,
2030 			},
2031 			.num_parents = 1,
2032 			.flags = CLK_SET_RATE_PARENT,
2033 			.ops = &clk_branch2_ops,
2034 		},
2035 	},
2036 };
2037 
2038 static struct clk_branch gcc_ufs_rx_symbol_0_clk = {
2039 	.halt_reg = 0x75014,
2040 	.halt_check = BRANCH_HALT_SKIP,
2041 	.clkr = {
2042 		.enable_reg = 0x75014,
2043 		.enable_mask = BIT(0),
2044 		.hw.init = &(struct clk_init_data){
2045 			.name = "gcc_ufs_rx_symbol_0_clk",
2046 			.ops = &clk_branch2_ops,
2047 		},
2048 	},
2049 };
2050 
2051 static struct clk_branch gcc_ufs_rx_symbol_1_clk = {
2052 	.halt_reg = 0x7605c,
2053 	.halt_check = BRANCH_HALT_SKIP,
2054 	.clkr = {
2055 		.enable_reg = 0x7605c,
2056 		.enable_mask = BIT(0),
2057 		.hw.init = &(struct clk_init_data){
2058 			.name = "gcc_ufs_rx_symbol_1_clk",
2059 			.ops = &clk_branch2_ops,
2060 		},
2061 	},
2062 };
2063 
2064 static struct clk_branch gcc_ufs_tx_symbol_0_clk = {
2065 	.halt_reg = 0x75010,
2066 	.halt_check = BRANCH_HALT_SKIP,
2067 	.clkr = {
2068 		.enable_reg = 0x75010,
2069 		.enable_mask = BIT(0),
2070 		.hw.init = &(struct clk_init_data){
2071 			.name = "gcc_ufs_tx_symbol_0_clk",
2072 			.ops = &clk_branch2_ops,
2073 		},
2074 	},
2075 };
2076 
2077 static struct clk_branch gcc_ufs_unipro_core_clk = {
2078 	.halt_reg = 0x76008,
2079 	.halt_check = BRANCH_HALT,
2080 	.clkr = {
2081 		.enable_reg = 0x76008,
2082 		.enable_mask = BIT(0),
2083 		.hw.init = &(struct clk_init_data){
2084 			.name = "gcc_ufs_unipro_core_clk",
2085 			.parent_hws = (const struct clk_hw*[]) {
2086 				&ufs_unipro_core_clk_src.clkr.hw,
2087 			},
2088 			.flags = CLK_SET_RATE_PARENT,
2089 			.num_parents = 1,
2090 			.ops = &clk_branch2_ops,
2091 		},
2092 	},
2093 };
2094 
2095 static struct clk_branch gcc_usb20_master_clk = {
2096 	.halt_reg = 0x2f004,
2097 	.halt_check = BRANCH_HALT,
2098 	.clkr = {
2099 		.enable_reg = 0x2f004,
2100 		.enable_mask = BIT(0),
2101 		.hw.init = &(struct clk_init_data){
2102 			.name = "gcc_usb20_master_clk",
2103 			.parent_hws = (const struct clk_hw*[]) {
2104 				&usb20_master_clk_src.clkr.hw,
2105 			},
2106 			.flags = CLK_SET_RATE_PARENT,
2107 			.num_parents = 1,
2108 			.ops = &clk_branch2_ops,
2109 		},
2110 	},
2111 };
2112 
2113 static struct clk_branch gcc_usb20_mock_utmi_clk = {
2114 	.halt_reg = 0x2f00c,
2115 	.halt_check = BRANCH_HALT,
2116 	.clkr = {
2117 		.enable_reg = 0x2f00c,
2118 		.enable_mask = BIT(0),
2119 		.hw.init = &(struct clk_init_data){
2120 			.name = "gcc_usb20_mock_utmi_clk",
2121 			.parent_hws = (const struct clk_hw*[]) {
2122 				&usb20_mock_utmi_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_usb20_sleep_clk = {
2132 	.halt_reg = 0x2f008,
2133 	.halt_check = BRANCH_HALT,
2134 	.clkr = {
2135 		.enable_reg = 0x2f008,
2136 		.enable_mask = BIT(0),
2137 		.hw.init = &(struct clk_init_data){
2138 			.name = "gcc_usb20_sleep_clk",
2139 			.ops = &clk_branch2_ops,
2140 		},
2141 	},
2142 };
2143 
2144 static struct clk_branch gcc_usb30_master_clk = {
2145 	.halt_reg = 0xf008,
2146 	.halt_check = BRANCH_HALT,
2147 	.clkr = {
2148 		.enable_reg = 0xf008,
2149 		.enable_mask = BIT(0),
2150 		.hw.init = &(struct clk_init_data){
2151 			.name = "gcc_usb30_master_clk",
2152 			.parent_hws = (const struct clk_hw*[]) {
2153 				&usb30_master_clk_src.clkr.hw,
2154 			},
2155 			.num_parents = 1,
2156 			.flags = CLK_SET_RATE_PARENT,
2157 			.ops = &clk_branch2_ops,
2158 		},
2159 	},
2160 };
2161 
2162 static struct clk_branch gcc_usb30_mock_utmi_clk = {
2163 	.halt_reg = 0xf010,
2164 	.halt_check = BRANCH_HALT,
2165 	.clkr = {
2166 		.enable_reg = 0xf010,
2167 		.enable_mask = BIT(0),
2168 		.hw.init = &(struct clk_init_data){
2169 			.name = "gcc_usb30_mock_utmi_clk",
2170 			.parent_hws = (const struct clk_hw*[]) {
2171 				&usb30_mock_utmi_clk_src.clkr.hw,
2172 			},
2173 			.num_parents = 1,
2174 			.flags = CLK_SET_RATE_PARENT,
2175 			.ops = &clk_branch2_ops,
2176 		},
2177 	},
2178 };
2179 
2180 static struct clk_branch gcc_usb30_sleep_clk = {
2181 	.halt_reg = 0xf00c,
2182 	.halt_check = BRANCH_HALT,
2183 	.clkr = {
2184 		.enable_reg = 0xf00c,
2185 		.enable_mask = BIT(0),
2186 		.hw.init = &(struct clk_init_data){
2187 			.name = "gcc_usb30_sleep_clk",
2188 			.ops = &clk_branch2_ops,
2189 		},
2190 	},
2191 };
2192 
2193 static struct clk_branch gcc_usb3_clkref_clk = {
2194 	.halt_reg = 0x8800c,
2195 	.halt_check = BRANCH_HALT,
2196 	.clkr = {
2197 		.enable_reg = 0x8800c,
2198 		.enable_mask = BIT(0),
2199 		.hw.init = &(struct clk_init_data){
2200 			.name = "gcc_usb3_clkref_clk",
2201 			.ops = &clk_branch2_ops,
2202 		},
2203 	},
2204 };
2205 
2206 static struct clk_branch gcc_usb3_phy_aux_clk = {
2207 	.halt_reg = 0x50000,
2208 	.halt_check = BRANCH_HALT,
2209 	.clkr = {
2210 		.enable_reg = 0x50000,
2211 		.enable_mask = BIT(0),
2212 		.hw.init = &(struct clk_init_data){
2213 			.name = "gcc_usb3_phy_aux_clk",
2214 			.parent_hws = (const struct clk_hw*[]) {
2215 				&usb3_phy_aux_clk_src.clkr.hw,
2216 			},
2217 			.num_parents = 1,
2218 			.flags = CLK_SET_RATE_PARENT,
2219 			.ops = &clk_branch2_ops,
2220 		},
2221 	},
2222 };
2223 
2224 static struct clk_branch gcc_usb3_phy_pipe_clk = {
2225 	.halt_reg = 0x50004,
2226 	.halt_check = BRANCH_HALT_DELAY,
2227 	.clkr = {
2228 		.enable_reg = 0x50004,
2229 		.enable_mask = BIT(0),
2230 		.hw.init = &(struct clk_init_data){
2231 			.name = "gcc_usb3_phy_pipe_clk",
2232 			.ops = &clk_branch2_ops,
2233 		},
2234 	},
2235 };
2236 
2237 static struct clk_branch gcc_usb_phy_cfg_ahb2phy_clk = {
2238 	.halt_reg = 0x6a004,
2239 	.halt_check = BRANCH_HALT,
2240 	.clkr = {
2241 		.enable_reg = 0x6a004,
2242 		.enable_mask = BIT(0),
2243 		.hw.init = &(struct clk_init_data){
2244 			.name = "gcc_usb_phy_cfg_ahb2phy_clk",
2245 			.ops = &clk_branch2_ops,
2246 		},
2247 	},
2248 };
2249 
2250 static struct gdsc ufs_gdsc = {
2251 	.gdscr = 0x75004,
2252 	.gds_hw_ctrl = 0x0,
2253 	.pd = {
2254 		.name = "ufs_gdsc",
2255 	},
2256 	.pwrsts = PWRSTS_OFF_ON,
2257 	.flags = VOTABLE,
2258 };
2259 
2260 static struct gdsc usb_30_gdsc = {
2261 	.gdscr = 0xf004,
2262 	.gds_hw_ctrl = 0x0,
2263 	.pd = {
2264 		.name = "usb_30_gdsc",
2265 	},
2266 	.pwrsts = PWRSTS_OFF_ON,
2267 	.flags = VOTABLE,
2268 };
2269 
2270 static struct gdsc pcie_0_gdsc = {
2271 	.gdscr = 0x6b004,
2272 	.gds_hw_ctrl = 0x0,
2273 	.pd = {
2274 		.name = "pcie_0_gdsc",
2275 	},
2276 	.pwrsts = PWRSTS_OFF_ON,
2277 	.flags = VOTABLE,
2278 };
2279 
2280 static struct clk_hw *gcc_sdm660_hws[] = {
2281 	&xo.hw,
2282 	&gpll0_early_div.hw,
2283 	&gpll1_early_div.hw,
2284 };
2285 
2286 static struct clk_regmap *gcc_sdm660_clocks[] = {
2287 	[BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
2288 	[BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
2289 	[BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
2290 	[BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
2291 	[BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
2292 	[BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
2293 	[BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
2294 	[BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
2295 	[BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
2296 	[BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
2297 	[BLSP2_QUP1_I2C_APPS_CLK_SRC] = &blsp2_qup1_i2c_apps_clk_src.clkr,
2298 	[BLSP2_QUP1_SPI_APPS_CLK_SRC] = &blsp2_qup1_spi_apps_clk_src.clkr,
2299 	[BLSP2_QUP2_I2C_APPS_CLK_SRC] = &blsp2_qup2_i2c_apps_clk_src.clkr,
2300 	[BLSP2_QUP2_SPI_APPS_CLK_SRC] = &blsp2_qup2_spi_apps_clk_src.clkr,
2301 	[BLSP2_QUP3_I2C_APPS_CLK_SRC] = &blsp2_qup3_i2c_apps_clk_src.clkr,
2302 	[BLSP2_QUP3_SPI_APPS_CLK_SRC] = &blsp2_qup3_spi_apps_clk_src.clkr,
2303 	[BLSP2_QUP4_I2C_APPS_CLK_SRC] = &blsp2_qup4_i2c_apps_clk_src.clkr,
2304 	[BLSP2_QUP4_SPI_APPS_CLK_SRC] = &blsp2_qup4_spi_apps_clk_src.clkr,
2305 	[BLSP2_UART1_APPS_CLK_SRC] = &blsp2_uart1_apps_clk_src.clkr,
2306 	[BLSP2_UART2_APPS_CLK_SRC] = &blsp2_uart2_apps_clk_src.clkr,
2307 	[GCC_AGGRE2_UFS_AXI_CLK] = &gcc_aggre2_ufs_axi_clk.clkr,
2308 	[GCC_AGGRE2_USB3_AXI_CLK] = &gcc_aggre2_usb3_axi_clk.clkr,
2309 	[GCC_BIMC_GFX_CLK] = &gcc_bimc_gfx_clk.clkr,
2310 	[GCC_BIMC_HMSS_AXI_CLK] = &gcc_bimc_hmss_axi_clk.clkr,
2311 	[GCC_BIMC_MSS_Q6_AXI_CLK] = &gcc_bimc_mss_q6_axi_clk.clkr,
2312 	[GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
2313 	[GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
2314 	[GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
2315 	[GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
2316 	[GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
2317 	[GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
2318 	[GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
2319 	[GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
2320 	[GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
2321 	[GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
2322 	[GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
2323 	[GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr,
2324 	[GCC_BLSP2_QUP1_I2C_APPS_CLK] = &gcc_blsp2_qup1_i2c_apps_clk.clkr,
2325 	[GCC_BLSP2_QUP1_SPI_APPS_CLK] = &gcc_blsp2_qup1_spi_apps_clk.clkr,
2326 	[GCC_BLSP2_QUP2_I2C_APPS_CLK] = &gcc_blsp2_qup2_i2c_apps_clk.clkr,
2327 	[GCC_BLSP2_QUP2_SPI_APPS_CLK] = &gcc_blsp2_qup2_spi_apps_clk.clkr,
2328 	[GCC_BLSP2_QUP3_I2C_APPS_CLK] = &gcc_blsp2_qup3_i2c_apps_clk.clkr,
2329 	[GCC_BLSP2_QUP3_SPI_APPS_CLK] = &gcc_blsp2_qup3_spi_apps_clk.clkr,
2330 	[GCC_BLSP2_QUP4_I2C_APPS_CLK] = &gcc_blsp2_qup4_i2c_apps_clk.clkr,
2331 	[GCC_BLSP2_QUP4_SPI_APPS_CLK] = &gcc_blsp2_qup4_spi_apps_clk.clkr,
2332 	[GCC_BLSP2_UART1_APPS_CLK] = &gcc_blsp2_uart1_apps_clk.clkr,
2333 	[GCC_BLSP2_UART2_APPS_CLK] = &gcc_blsp2_uart2_apps_clk.clkr,
2334 	[GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
2335 	[GCC_CFG_NOC_USB2_AXI_CLK] = &gcc_cfg_noc_usb2_axi_clk.clkr,
2336 	[GCC_CFG_NOC_USB3_AXI_CLK] = &gcc_cfg_noc_usb3_axi_clk.clkr,
2337 	[GCC_DCC_AHB_CLK] = &gcc_dcc_ahb_clk.clkr,
2338 	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
2339 	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
2340 	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
2341 	[GCC_GPU_BIMC_GFX_CLK] = &gcc_gpu_bimc_gfx_clk.clkr,
2342 	[GCC_GPU_CFG_AHB_CLK] = &gcc_gpu_cfg_ahb_clk.clkr,
2343 	[GCC_GPU_GPLL0_CLK] = &gcc_gpu_gpll0_clk.clkr,
2344 	[GCC_GPU_GPLL0_DIV_CLK] = &gcc_gpu_gpll0_div_clk.clkr,
2345 	[GCC_HMSS_DVM_BUS_CLK] = &gcc_hmss_dvm_bus_clk.clkr,
2346 	[GCC_HMSS_RBCPR_CLK] = &gcc_hmss_rbcpr_clk.clkr,
2347 	[GCC_MMSS_GPLL0_CLK] = &gcc_mmss_gpll0_clk.clkr,
2348 	[GCC_MMSS_GPLL0_DIV_CLK] = &gcc_mmss_gpll0_div_clk.clkr,
2349 	[GCC_MMSS_NOC_CFG_AHB_CLK] = &gcc_mmss_noc_cfg_ahb_clk.clkr,
2350 	[GCC_MMSS_SYS_NOC_AXI_CLK] = &gcc_mmss_sys_noc_axi_clk.clkr,
2351 	[GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,
2352 	[GCC_MSS_MNOC_BIMC_AXI_CLK] = &gcc_mss_mnoc_bimc_axi_clk.clkr,
2353 	[GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr,
2354 	[GCC_MSS_SNOC_AXI_CLK] = &gcc_mss_snoc_axi_clk.clkr,
2355 	[GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
2356 	[GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
2357 	[GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
2358 	[GCC_QSPI_AHB_CLK] = &gcc_qspi_ahb_clk.clkr,
2359 	[GCC_QSPI_SER_CLK] = &gcc_qspi_ser_clk.clkr,
2360 	[GCC_RX0_USB2_CLKREF_CLK] = &gcc_rx0_usb2_clkref_clk.clkr,
2361 	[GCC_RX1_USB2_CLKREF_CLK] = &gcc_rx1_usb2_clkref_clk.clkr,
2362 	[GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
2363 	[GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
2364 	[GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
2365 	[GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
2366 	[GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
2367 	[GCC_UFS_AHB_CLK] = &gcc_ufs_ahb_clk.clkr,
2368 	[GCC_UFS_AXI_CLK] = &gcc_ufs_axi_clk.clkr,
2369 	[GCC_UFS_CLKREF_CLK] = &gcc_ufs_clkref_clk.clkr,
2370 	[GCC_UFS_ICE_CORE_CLK] = &gcc_ufs_ice_core_clk.clkr,
2371 	[GCC_UFS_PHY_AUX_CLK] = &gcc_ufs_phy_aux_clk.clkr,
2372 	[GCC_UFS_RX_SYMBOL_0_CLK] = &gcc_ufs_rx_symbol_0_clk.clkr,
2373 	[GCC_UFS_RX_SYMBOL_1_CLK] = &gcc_ufs_rx_symbol_1_clk.clkr,
2374 	[GCC_UFS_TX_SYMBOL_0_CLK] = &gcc_ufs_tx_symbol_0_clk.clkr,
2375 	[GCC_UFS_UNIPRO_CORE_CLK] = &gcc_ufs_unipro_core_clk.clkr,
2376 	[GCC_USB20_MASTER_CLK] = &gcc_usb20_master_clk.clkr,
2377 	[GCC_USB20_MOCK_UTMI_CLK] = &gcc_usb20_mock_utmi_clk.clkr,
2378 	[GCC_USB20_SLEEP_CLK] = &gcc_usb20_sleep_clk.clkr,
2379 	[GCC_USB30_MASTER_CLK] = &gcc_usb30_master_clk.clkr,
2380 	[GCC_USB30_MOCK_UTMI_CLK] = &gcc_usb30_mock_utmi_clk.clkr,
2381 	[GCC_USB30_SLEEP_CLK] = &gcc_usb30_sleep_clk.clkr,
2382 	[GCC_USB3_CLKREF_CLK] = &gcc_usb3_clkref_clk.clkr,
2383 	[GCC_USB3_PHY_AUX_CLK] = &gcc_usb3_phy_aux_clk.clkr,
2384 	[GCC_USB3_PHY_PIPE_CLK] = &gcc_usb3_phy_pipe_clk.clkr,
2385 	[GCC_USB_PHY_CFG_AHB2PHY_CLK] = &gcc_usb_phy_cfg_ahb2phy_clk.clkr,
2386 	[GP1_CLK_SRC] = &gp1_clk_src.clkr,
2387 	[GP2_CLK_SRC] = &gp2_clk_src.clkr,
2388 	[GP3_CLK_SRC] = &gp3_clk_src.clkr,
2389 	[GPLL0] = &gpll0.clkr,
2390 	[GPLL0_EARLY] = &gpll0_early.clkr,
2391 	[GPLL1] = &gpll1.clkr,
2392 	[GPLL1_EARLY] = &gpll1_early.clkr,
2393 	[GPLL4] = &gpll4.clkr,
2394 	[GPLL4_EARLY] = &gpll4_early.clkr,
2395 	[HMSS_GPLL0_CLK_SRC] = &hmss_gpll0_clk_src.clkr,
2396 	[HMSS_GPLL4_CLK_SRC] = &hmss_gpll4_clk_src.clkr,
2397 	[HMSS_RBCPR_CLK_SRC] = &hmss_rbcpr_clk_src.clkr,
2398 	[PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
2399 	[QSPI_SER_CLK_SRC] = &qspi_ser_clk_src.clkr,
2400 	[SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
2401 	[SDCC1_ICE_CORE_CLK_SRC] = &sdcc1_ice_core_clk_src.clkr,
2402 	[SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
2403 	[UFS_AXI_CLK_SRC] = &ufs_axi_clk_src.clkr,
2404 	[UFS_ICE_CORE_CLK_SRC] = &ufs_ice_core_clk_src.clkr,
2405 	[UFS_PHY_AUX_CLK_SRC] = &ufs_phy_aux_clk_src.clkr,
2406 	[UFS_UNIPRO_CORE_CLK_SRC] = &ufs_unipro_core_clk_src.clkr,
2407 	[USB20_MASTER_CLK_SRC] = &usb20_master_clk_src.clkr,
2408 	[USB20_MOCK_UTMI_CLK_SRC] = &usb20_mock_utmi_clk_src.clkr,
2409 	[USB30_MASTER_CLK_SRC] = &usb30_master_clk_src.clkr,
2410 	[USB30_MOCK_UTMI_CLK_SRC] = &usb30_mock_utmi_clk_src.clkr,
2411 	[USB3_PHY_AUX_CLK_SRC] = &usb3_phy_aux_clk_src.clkr,
2412 };
2413 
2414 static struct gdsc *gcc_sdm660_gdscs[] = {
2415 	[UFS_GDSC] = &ufs_gdsc,
2416 	[USB_30_GDSC] = &usb_30_gdsc,
2417 	[PCIE_0_GDSC] = &pcie_0_gdsc,
2418 };
2419 
2420 static const struct qcom_reset_map gcc_sdm660_resets[] = {
2421 	[GCC_QUSB2PHY_PRIM_BCR] = { 0x12000 },
2422 	[GCC_QUSB2PHY_SEC_BCR] = { 0x12004 },
2423 	[GCC_UFS_BCR] = { 0x75000 },
2424 	[GCC_USB3_DP_PHY_BCR] = { 0x50028 },
2425 	[GCC_USB3_PHY_BCR] = { 0x50020 },
2426 	[GCC_USB3PHY_PHY_BCR] = { 0x50024 },
2427 	[GCC_USB_20_BCR] = { 0x2f000 },
2428 	[GCC_USB_30_BCR] = { 0xf000 },
2429 	[GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x6a000 },
2430 	[GCC_MSS_RESTART] = { 0x79000 },
2431 };
2432 
2433 static const struct regmap_config gcc_sdm660_regmap_config = {
2434 	.reg_bits	= 32,
2435 	.reg_stride	= 4,
2436 	.val_bits	= 32,
2437 	.max_register	= 0x94000,
2438 	.fast_io	= true,
2439 };
2440 
2441 static const struct qcom_cc_desc gcc_sdm660_desc = {
2442 	.config = &gcc_sdm660_regmap_config,
2443 	.clks = gcc_sdm660_clocks,
2444 	.num_clks = ARRAY_SIZE(gcc_sdm660_clocks),
2445 	.resets = gcc_sdm660_resets,
2446 	.num_resets = ARRAY_SIZE(gcc_sdm660_resets),
2447 	.gdscs = gcc_sdm660_gdscs,
2448 	.num_gdscs = ARRAY_SIZE(gcc_sdm660_gdscs),
2449 	.clk_hws = gcc_sdm660_hws,
2450 	.num_clk_hws = ARRAY_SIZE(gcc_sdm660_hws),
2451 };
2452 
2453 static const struct of_device_id gcc_sdm660_match_table[] = {
2454 	{ .compatible = "qcom,gcc-sdm630" },
2455 	{ .compatible = "qcom,gcc-sdm660" },
2456 	{ }
2457 };
2458 MODULE_DEVICE_TABLE(of, gcc_sdm660_match_table);
2459 
2460 static int gcc_sdm660_probe(struct platform_device *pdev)
2461 {
2462 	int ret;
2463 	struct regmap *regmap;
2464 
2465 	regmap = qcom_cc_map(pdev, &gcc_sdm660_desc);
2466 	if (IS_ERR(regmap))
2467 		return PTR_ERR(regmap);
2468 
2469 	/*
2470 	 * Set the HMSS_AHB_CLK_SLEEP_ENA bit to allow the hmss_ahb_clk to be
2471 	 * turned off by hardware during certain apps low power modes.
2472 	 */
2473 	ret = regmap_update_bits(regmap, 0x52008, BIT(21), BIT(21));
2474 	if (ret)
2475 		return ret;
2476 
2477 	return qcom_cc_really_probe(pdev, &gcc_sdm660_desc, regmap);
2478 }
2479 
2480 static struct platform_driver gcc_sdm660_driver = {
2481 	.probe		= gcc_sdm660_probe,
2482 	.driver		= {
2483 		.name	= "gcc-sdm660",
2484 		.of_match_table = gcc_sdm660_match_table,
2485 	},
2486 };
2487 
2488 static int __init gcc_sdm660_init(void)
2489 {
2490 	return platform_driver_register(&gcc_sdm660_driver);
2491 }
2492 core_initcall_sync(gcc_sdm660_init);
2493 
2494 static void __exit gcc_sdm660_exit(void)
2495 {
2496 	platform_driver_unregister(&gcc_sdm660_driver);
2497 }
2498 module_exit(gcc_sdm660_exit);
2499 
2500 MODULE_LICENSE("GPL v2");
2501 MODULE_DESCRIPTION("QCOM GCC sdm660 Driver");
2502