xref: /openbmc/linux/drivers/clk/qcom/gcc-mdm9607.c (revision aa0dc6a7)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Copyright (c) 2021, Konrad Dybcio <konrad.dybcio@somainline.org>
4  */
5 
6 #include <linux/kernel.h>
7 #include <linux/bitops.h>
8 #include <linux/err.h>
9 #include <linux/platform_device.h>
10 #include <linux/module.h>
11 #include <linux/of.h>
12 #include <linux/of_device.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-mdm9607.h>
18 
19 #include "common.h"
20 #include "clk-regmap.h"
21 #include "clk-alpha-pll.h"
22 #include "clk-pll.h"
23 #include "clk-rcg.h"
24 #include "clk-branch.h"
25 #include "reset.h"
26 #include "gdsc.h"
27 
28 enum {
29 	P_XO,
30 	P_BIMC,
31 	P_GPLL0,
32 	P_GPLL1,
33 	P_GPLL2,
34 	P_SLEEP_CLK,
35 };
36 
37 static struct clk_alpha_pll gpll0_early = {
38 	.offset = 0x21000,
39 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
40 	.clkr = {
41 		.enable_reg = 0x45000,
42 		.enable_mask = BIT(0),
43 		.hw.init = &(struct clk_init_data)
44 		{
45 			.name = "gpll0_early",
46 			.parent_data = &(const struct clk_parent_data){
47 				.fw_name = "xo",
48 			},
49 			.num_parents = 1,
50 			.ops = &clk_alpha_pll_ops,
51 		},
52 	},
53 };
54 
55 static struct clk_alpha_pll_postdiv gpll0 = {
56 	.offset = 0x21000,
57 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
58 	.clkr.hw.init = &(struct clk_init_data)
59 	{
60 		.name = "gpll0",
61 		.parent_hws = (const struct clk_hw *[]){ &gpll0_early.clkr.hw },
62 		.num_parents = 1,
63 		.ops = &clk_alpha_pll_postdiv_ops,
64 	},
65 };
66 
67 static const struct parent_map gcc_xo_gpll0_map[] = {
68 	{ P_XO, 0 },
69 	{ P_GPLL0, 1 },
70 };
71 
72 static const struct clk_parent_data gcc_xo_gpll0[] = {
73 	{ .fw_name = "xo" },
74 	{ .hw = &gpll0.clkr.hw },
75 };
76 
77 static struct clk_pll gpll1 = {
78 	.l_reg = 0x20004,
79 	.m_reg = 0x20008,
80 	.n_reg = 0x2000c,
81 	.config_reg = 0x20010,
82 	.mode_reg = 0x20000,
83 	.status_reg = 0x2001c,
84 	.status_bit = 17,
85 	.clkr.hw.init = &(struct clk_init_data){
86 		.name = "gpll1",
87 		.parent_data = &(const struct clk_parent_data){
88 			.fw_name = "xo",
89 		},
90 		.num_parents = 1,
91 		.ops = &clk_pll_ops,
92 	},
93 };
94 
95 static struct clk_regmap gpll1_vote = {
96 	.enable_reg = 0x45000,
97 	.enable_mask = BIT(1),
98 	.hw.init = &(struct clk_init_data){
99 		.name = "gpll1_vote",
100 		.parent_hws = (const struct clk_hw *[]){ &gpll1.clkr.hw },
101 		.num_parents = 1,
102 		.ops = &clk_pll_vote_ops,
103 	},
104 };
105 
106 static const struct parent_map gcc_xo_gpll0_gpll1_sleep_map[] = {
107 	{ P_XO, 0 },
108 	{ P_GPLL0, 1 },
109 	{ P_GPLL1, 2 },
110 	{ P_SLEEP_CLK, 6 },
111 };
112 
113 static const struct clk_parent_data gcc_xo_gpll0_gpll1_sleep[] = {
114 	{ .fw_name = "xo" },
115 	{ .hw = &gpll0.clkr.hw },
116 	{ .hw = &gpll1_vote.hw },
117 	{ .fw_name = "sleep_clk" },
118 };
119 
120 static struct clk_alpha_pll gpll2_early = {
121 	.offset = 0x25000,
122 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
123 	.clkr = {
124 		.enable_reg = 0x45000,
125 		.enable_mask = BIT(3), /* Yeah, apparently it's not 2 */
126 		.hw.init = &(struct clk_init_data)
127 		{
128 			.name = "gpll2_early",
129 			.parent_data = &(const struct clk_parent_data){
130 				.fw_name = "xo",
131 			},
132 			.num_parents = 1,
133 			.ops = &clk_alpha_pll_ops,
134 		},
135 	},
136 };
137 
138 static struct clk_alpha_pll_postdiv gpll2 = {
139 	.offset = 0x25000,
140 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
141 	.clkr.hw.init = &(struct clk_init_data)
142 	{
143 		.name = "gpll2",
144 		.parent_hws = (const struct clk_hw *[]){ &gpll2_early.clkr.hw },
145 		.num_parents = 1,
146 		.ops = &clk_alpha_pll_postdiv_ops,
147 	},
148 };
149 
150 static const struct parent_map gcc_xo_gpll0_gpll2_map[] = {
151 	{ P_XO, 0 },
152 	{ P_GPLL0, 1 },
153 	{ P_GPLL2, 2 },
154 };
155 
156 static const struct clk_parent_data gcc_xo_gpll0_gpll2[] = {
157 	{ .fw_name = "xo" },
158 	{ .hw = &gpll0.clkr.hw },
159 	{ .hw = &gpll2.clkr.hw },
160 };
161 
162 static const struct parent_map gcc_xo_gpll0_gpll1_gpll2_map[] = {
163 	{ P_XO, 0 },
164 	{ P_GPLL0, 1 },
165 	{ P_GPLL1, 2 },
166 	{ P_GPLL2, 3 },
167 };
168 
169 static const struct clk_parent_data gcc_xo_gpll0_gpll1_gpll2[] = {
170 	{ .fw_name = "xo" },
171 	{ .hw = &gpll0.clkr.hw },
172 	{ .hw = &gpll1_vote.hw },
173 	{ .hw = &gpll2.clkr.hw },
174 };
175 
176 static const struct freq_tbl ftbl_apss_ahb_clk[] = {
177 	F(19200000, P_XO, 1, 0, 0),
178 	F(50000000, P_GPLL0, 16, 0, 0),
179 	F(100000000, P_GPLL0, 8, 0, 0),
180 	{ }
181 };
182 
183 static struct clk_rcg2 apss_ahb_clk_src = {
184 	.cmd_rcgr = 0x46000,
185 	.hid_width = 5,
186 	.parent_map = gcc_xo_gpll0_map,
187 	.freq_tbl = ftbl_apss_ahb_clk,
188 	.clkr.hw.init = &(struct clk_init_data){
189 		.name = "apss_ahb_clk_src",
190 		.parent_data = gcc_xo_gpll0,
191 		.num_parents = 2,
192 		.ops = &clk_rcg2_ops,
193 	},
194 };
195 
196 static struct clk_pll bimc_pll = {
197 	.l_reg = 0x23004,
198 	.m_reg = 0x23008,
199 	.n_reg = 0x2300c,
200 	.config_reg = 0x23010,
201 	.mode_reg = 0x23000,
202 	.status_reg = 0x2301c,
203 	.status_bit = 17,
204 	.clkr.hw.init = &(struct clk_init_data){
205 		.name = "bimc_pll",
206 		.parent_data = &(const struct clk_parent_data){
207 			.fw_name = "xo",
208 		},
209 		.num_parents = 1,
210 		.ops = &clk_pll_ops,
211 	},
212 };
213 
214 static struct clk_regmap bimc_pll_vote = {
215 	.enable_reg = 0x45000,
216 	.enable_mask = BIT(3),
217 	.hw.init = &(struct clk_init_data){
218 		.name = "bimc_pll_vote",
219 		.parent_hws = (const struct clk_hw *[]){ &bimc_pll.clkr.hw },
220 		.num_parents = 1,
221 		.ops = &clk_pll_vote_ops,
222 	},
223 };
224 
225 static const struct parent_map gcc_xo_gpll0_bimc_map[] = {
226 	{ P_XO, 0 },
227 	{ P_GPLL0, 1 },
228 	{ P_BIMC, 2 },
229 };
230 
231 static const struct clk_parent_data gcc_xo_gpll0_bimc[] = {
232 	{ .fw_name = "xo" },
233 	{ .hw = &gpll0.clkr.hw },
234 	{ .hw = &bimc_pll_vote.hw },
235 };
236 
237 static const struct freq_tbl ftbl_pcnoc_bfdcd_clk_src[] = {
238 	F(19200000, P_XO, 1, 0, 0),
239 	F(50000000, P_GPLL0, 16, 0, 0),
240 	F(100000000, P_GPLL0, 8, 0, 0),
241 	{ }
242 };
243 
244 static struct clk_rcg2 pcnoc_bfdcd_clk_src = {
245 	.cmd_rcgr = 0x27000,
246 	.freq_tbl = ftbl_pcnoc_bfdcd_clk_src,
247 	.hid_width = 5,
248 	.parent_map = gcc_xo_gpll0_bimc_map,
249 	.clkr.hw.init = &(struct clk_init_data){
250 		.name = "pcnoc_bfdcd_clk_src",
251 		.parent_data = gcc_xo_gpll0_bimc,
252 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_bimc),
253 		.ops = &clk_rcg2_ops,
254 		.flags = CLK_IS_CRITICAL,
255 	},
256 };
257 
258 static struct clk_rcg2 system_noc_bfdcd_clk_src = {
259 	.cmd_rcgr = 0x26004,
260 	.hid_width = 5,
261 	.parent_map = gcc_xo_gpll0_bimc_map,
262 	.clkr.hw.init = &(struct clk_init_data){
263 		.name = "system_noc_bfdcd_clk_src",
264 		.parent_data = gcc_xo_gpll0_bimc,
265 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_bimc),
266 		.ops = &clk_rcg2_ops,
267 	},
268 };
269 
270 static const struct freq_tbl ftbl_gcc_blsp1_qup1_6_i2c_apps_clk[] = {
271 	F(19200000, P_XO, 1, 0, 0),
272 	F(50000000, P_GPLL0, 16, 0, 0),
273 	{ }
274 };
275 
276 static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
277 	.cmd_rcgr = 0x200c,
278 	.hid_width = 5,
279 	.parent_map = gcc_xo_gpll0_map,
280 	.freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
281 	.clkr.hw.init = &(struct clk_init_data){
282 		.name = "blsp1_qup1_i2c_apps_clk_src",
283 		.parent_data = gcc_xo_gpll0,
284 		.num_parents = 2,
285 		.ops = &clk_rcg2_ops,
286 	},
287 };
288 
289 static const struct freq_tbl ftbl_gcc_blsp1_qup1_6_spi_apps_clk[] = {
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(16000000, P_GPLL0, 10, 1, 5),
294 	F(19200000, P_XO, 1, 0, 0),
295 	F(25000000, P_GPLL0, 16, 1, 2),
296 	F(50000000, P_GPLL0, 16, 0, 0),
297 	{ }
298 };
299 
300 static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
301 	.cmd_rcgr = 0x2024,
302 	.mnd_width = 8,
303 	.hid_width = 5,
304 	.parent_map = gcc_xo_gpll0_map,
305 	.freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
306 	.clkr.hw.init = &(struct clk_init_data){
307 		.name = "blsp1_qup1_spi_apps_clk_src",
308 		.parent_data = gcc_xo_gpll0,
309 		.num_parents = 2,
310 		.ops = &clk_rcg2_ops,
311 	},
312 };
313 
314 static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
315 	.cmd_rcgr = 0x3000,
316 	.hid_width = 5,
317 	.parent_map = gcc_xo_gpll0_map,
318 	.freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
319 	.clkr.hw.init = &(struct clk_init_data){
320 		.name = "blsp1_qup2_i2c_apps_clk_src",
321 		.parent_data = gcc_xo_gpll0,
322 		.num_parents = 2,
323 		.ops = &clk_rcg2_ops,
324 	},
325 };
326 
327 static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
328 	.cmd_rcgr = 0x3014,
329 	.mnd_width = 8,
330 	.hid_width = 5,
331 	.parent_map = gcc_xo_gpll0_map,
332 	.freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
333 	.clkr.hw.init = &(struct clk_init_data){
334 		.name = "blsp1_qup2_spi_apps_clk_src",
335 		.parent_data = gcc_xo_gpll0,
336 		.num_parents = 2,
337 		.ops = &clk_rcg2_ops,
338 	},
339 };
340 
341 static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
342 	.cmd_rcgr = 0x4000,
343 	.hid_width = 5,
344 	.parent_map = gcc_xo_gpll0_map,
345 	.freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
346 	.clkr.hw.init = &(struct clk_init_data){
347 		.name = "blsp1_qup3_i2c_apps_clk_src",
348 		.parent_data = gcc_xo_gpll0,
349 		.num_parents = 2,
350 		.ops = &clk_rcg2_ops,
351 	},
352 };
353 
354 static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
355 	.cmd_rcgr = 0x4024,
356 	.mnd_width = 8,
357 	.hid_width = 5,
358 	.parent_map = gcc_xo_gpll0_map,
359 	.freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
360 	.clkr.hw.init = &(struct clk_init_data){
361 		.name = "blsp1_qup3_spi_apps_clk_src",
362 		.parent_data = gcc_xo_gpll0,
363 		.num_parents = 2,
364 		.ops = &clk_rcg2_ops,
365 	},
366 };
367 
368 static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
369 	.cmd_rcgr = 0x5000,
370 	.hid_width = 5,
371 	.parent_map = gcc_xo_gpll0_map,
372 	.freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
373 	.clkr.hw.init = &(struct clk_init_data){
374 		.name = "blsp1_qup4_i2c_apps_clk_src",
375 		.parent_data = gcc_xo_gpll0,
376 		.num_parents = 2,
377 		.ops = &clk_rcg2_ops,
378 	},
379 };
380 
381 static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
382 	.cmd_rcgr = 0x5024,
383 	.mnd_width = 8,
384 	.hid_width = 5,
385 	.parent_map = gcc_xo_gpll0_map,
386 	.freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
387 	.clkr.hw.init = &(struct clk_init_data){
388 		.name = "blsp1_qup4_spi_apps_clk_src",
389 		.parent_data = gcc_xo_gpll0,
390 		.num_parents = 2,
391 		.ops = &clk_rcg2_ops,
392 	},
393 };
394 
395 static struct clk_rcg2 blsp1_qup5_i2c_apps_clk_src = {
396 	.cmd_rcgr = 0x6000,
397 	.hid_width = 5,
398 	.parent_map = gcc_xo_gpll0_map,
399 	.freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
400 	.clkr.hw.init = &(struct clk_init_data){
401 		.name = "blsp1_qup5_i2c_apps_clk_src",
402 		.parent_data = gcc_xo_gpll0,
403 		.num_parents = 2,
404 		.ops = &clk_rcg2_ops,
405 	},
406 };
407 
408 static struct clk_rcg2 blsp1_qup5_spi_apps_clk_src = {
409 	.cmd_rcgr = 0x6024,
410 	.mnd_width = 8,
411 	.hid_width = 5,
412 	.parent_map = gcc_xo_gpll0_map,
413 	.freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
414 	.clkr.hw.init = &(struct clk_init_data){
415 		.name = "blsp1_qup5_spi_apps_clk_src",
416 		.parent_data = gcc_xo_gpll0,
417 		.num_parents = 2,
418 		.ops = &clk_rcg2_ops,
419 	},
420 };
421 
422 static struct clk_rcg2 blsp1_qup6_i2c_apps_clk_src = {
423 	.cmd_rcgr = 0x7000,
424 	.hid_width = 5,
425 	.parent_map = gcc_xo_gpll0_map,
426 	.freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
427 	.clkr.hw.init = &(struct clk_init_data){
428 		.name = "blsp1_qup6_i2c_apps_clk_src",
429 		.parent_data = gcc_xo_gpll0,
430 		.num_parents = 2,
431 		.ops = &clk_rcg2_ops,
432 	},
433 };
434 
435 static struct clk_rcg2 blsp1_qup6_spi_apps_clk_src = {
436 	.cmd_rcgr = 0x7024,
437 	.mnd_width = 8,
438 	.hid_width = 5,
439 	.parent_map = gcc_xo_gpll0_map,
440 	.freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
441 	.clkr.hw.init = &(struct clk_init_data){
442 		.name = "blsp1_qup6_spi_apps_clk_src",
443 		.parent_data = gcc_xo_gpll0,
444 		.num_parents = 2,
445 		.ops = &clk_rcg2_ops,
446 	},
447 };
448 
449 static const struct freq_tbl ftbl_gcc_blsp1_uart1_6_apps_clk[] = {
450 	F(3686400, P_GPLL0, 1, 72, 15625),
451 	F(7372800, P_GPLL0, 1, 144, 15625),
452 	F(14745600, P_GPLL0, 1, 288, 15625),
453 	F(16000000, P_GPLL0, 10, 1, 5),
454 	F(19200000, P_XO, 1, 0, 0),
455 	F(24000000, P_GPLL0, 1, 3, 100),
456 	F(25000000, P_GPLL0, 16, 1, 2),
457 	F(32000000, P_GPLL0, 1, 1, 25),
458 	F(40000000, P_GPLL0, 1, 1, 20),
459 	F(46400000, P_GPLL0, 1, 29, 500),
460 	F(48000000, P_GPLL0, 1, 3, 50),
461 	F(51200000, P_GPLL0, 1, 8, 125),
462 	F(56000000, P_GPLL0, 1, 7, 100),
463 	F(58982400, P_GPLL0, 1, 1152, 15625),
464 	F(60000000, P_GPLL0, 1, 3, 40),
465 	{ }
466 };
467 
468 static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
469 	.cmd_rcgr = 0x2044,
470 	.mnd_width = 16,
471 	.hid_width = 5,
472 	.parent_map = gcc_xo_gpll0_map,
473 	.freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
474 	.clkr.hw.init = &(struct clk_init_data){
475 		.name = "blsp1_uart1_apps_clk_src",
476 		.parent_data = gcc_xo_gpll0,
477 		.num_parents = 2,
478 		.ops = &clk_rcg2_ops,
479 	},
480 };
481 
482 static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
483 	.cmd_rcgr = 0x3034,
484 	.mnd_width = 16,
485 	.hid_width = 5,
486 	.parent_map = gcc_xo_gpll0_map,
487 	.freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
488 	.clkr.hw.init = &(struct clk_init_data){
489 		.name = "blsp1_uart2_apps_clk_src",
490 		.parent_data = gcc_xo_gpll0,
491 		.num_parents = 2,
492 		.ops = &clk_rcg2_ops,
493 	},
494 };
495 
496 static struct clk_rcg2 blsp1_uart3_apps_clk_src = {
497 	.cmd_rcgr = 0x4044,
498 	.mnd_width = 16,
499 	.hid_width = 5,
500 	.parent_map = gcc_xo_gpll0_map,
501 	.freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
502 	.clkr.hw.init = &(struct clk_init_data){
503 		.name = "blsp1_uart3_apps_clk_src",
504 		.parent_data = gcc_xo_gpll0,
505 		.num_parents = 2,
506 		.ops = &clk_rcg2_ops,
507 	},
508 };
509 
510 static struct clk_rcg2 blsp1_uart4_apps_clk_src = {
511 	.cmd_rcgr = 0x5044,
512 	.mnd_width = 16,
513 	.hid_width = 5,
514 	.parent_map = gcc_xo_gpll0_map,
515 	.freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
516 	.clkr.hw.init = &(struct clk_init_data){
517 		.name = "blsp1_uart4_apps_clk_src",
518 		.parent_data = gcc_xo_gpll0,
519 		.num_parents = 2,
520 		.ops = &clk_rcg2_ops,
521 	},
522 };
523 
524 static struct clk_rcg2 blsp1_uart5_apps_clk_src = {
525 	.cmd_rcgr = 0x6044,
526 	.mnd_width = 16,
527 	.hid_width = 5,
528 	.parent_map = gcc_xo_gpll0_map,
529 	.freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
530 	.clkr.hw.init = &(struct clk_init_data){
531 		.name = "blsp1_uart5_apps_clk_src",
532 		.parent_data = gcc_xo_gpll0,
533 		.num_parents = 2,
534 		.ops = &clk_rcg2_ops,
535 	},
536 };
537 
538 static struct clk_rcg2 blsp1_uart6_apps_clk_src = {
539 	.cmd_rcgr = 0x6044,
540 	.mnd_width = 16,
541 	.hid_width = 5,
542 	.parent_map = gcc_xo_gpll0_map,
543 	.freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
544 	.clkr.hw.init = &(struct clk_init_data){
545 		.name = "blsp1_uart6_apps_clk_src",
546 		.parent_data = gcc_xo_gpll0,
547 		.num_parents = 2,
548 		.ops = &clk_rcg2_ops,
549 	},
550 };
551 
552 static const struct freq_tbl ftbl_gcc_crypto_clk[] = {
553 	F(50000000, P_GPLL0, 16, 0, 0),
554 	F(80000000, P_GPLL0, 10, 0, 0),
555 	F(100000000, P_GPLL0, 8, 0, 0),
556 	F(160000000, P_GPLL0, 5, 0, 0),
557 	{ }
558 };
559 
560 static struct clk_rcg2 crypto_clk_src = {
561 	.cmd_rcgr = 0x16004,
562 	.hid_width = 5,
563 	.parent_map = gcc_xo_gpll0_map,
564 	.freq_tbl = ftbl_gcc_crypto_clk,
565 	.clkr.hw.init = &(struct clk_init_data){
566 		.name = "crypto_clk_src",
567 		.parent_data = gcc_xo_gpll0,
568 		.num_parents = 2,
569 		.ops = &clk_rcg2_ops,
570 	},
571 };
572 
573 static const struct freq_tbl ftbl_gcc_gp1_3_clk[] = {
574 	F(19200000, P_XO, 1, 0,	0),
575 	{ }
576 };
577 
578 static struct clk_rcg2 gp1_clk_src = {
579 	.cmd_rcgr = 0x8004,
580 	.mnd_width = 8,
581 	.hid_width = 5,
582 	.parent_map = gcc_xo_gpll0_gpll1_sleep_map,
583 	.freq_tbl = ftbl_gcc_gp1_3_clk,
584 	.clkr.hw.init = &(struct clk_init_data){
585 		.name = "gp1_clk_src",
586 		.parent_data = gcc_xo_gpll0_gpll1_sleep,
587 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1_sleep),
588 		.ops = &clk_rcg2_ops,
589 	},
590 };
591 
592 static struct clk_rcg2 gp2_clk_src = {
593 	.cmd_rcgr = 0x09004,
594 	.mnd_width = 8,
595 	.hid_width = 5,
596 	.parent_map = gcc_xo_gpll0_gpll1_sleep_map,
597 	.freq_tbl = ftbl_gcc_gp1_3_clk,
598 	.clkr.hw.init = &(struct clk_init_data){
599 		.name = "gp2_clk_src",
600 		.parent_data = gcc_xo_gpll0_gpll1_sleep,
601 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1_sleep),
602 		.ops = &clk_rcg2_ops,
603 	},
604 };
605 
606 static struct clk_rcg2 gp3_clk_src = {
607 	.cmd_rcgr = 0x0a004,
608 	.mnd_width = 8,
609 	.hid_width = 5,
610 	.parent_map = gcc_xo_gpll0_gpll1_sleep_map,
611 	.freq_tbl = ftbl_gcc_gp1_3_clk,
612 	.clkr.hw.init = &(struct clk_init_data){
613 		.name = "gp3_clk_src",
614 		.parent_data = gcc_xo_gpll0_gpll1_sleep,
615 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1_sleep),
616 		.ops = &clk_rcg2_ops,
617 	},
618 };
619 
620 static const struct freq_tbl ftbl_gcc_pdm2_clk[] = {
621 	F(64000000, P_GPLL0, 12.5, 0, 0),
622 	{ }
623 };
624 
625 static struct clk_rcg2 pdm2_clk_src = {
626 	.cmd_rcgr = 0x44010,
627 	.hid_width = 5,
628 	.parent_map = gcc_xo_gpll0_map,
629 	.freq_tbl = ftbl_gcc_pdm2_clk,
630 	.clkr.hw.init = &(struct clk_init_data){
631 		.name = "pdm2_clk_src",
632 		.parent_data = gcc_xo_gpll0,
633 		.num_parents = 2,
634 		.ops = &clk_rcg2_ops,
635 	},
636 };
637 
638 static const struct freq_tbl ftbl_gcc_sdcc_apps_clk[] = {
639 	F(144000, P_XO, 16, 3, 25),
640 	F(400000, P_XO, 12, 1, 4),
641 	F(20000000, P_GPLL0, 10, 1, 4),
642 	F(25000000, P_GPLL0, 16, 1, 2),
643 	F(50000000, P_GPLL0, 16, 0, 0),
644 	F(100000000, P_GPLL0, 8, 0, 0),
645 	F(177770000, P_GPLL0, 4.5, 0, 0),
646 	F(200000000, P_GPLL0, 4, 0, 0),
647 	{ }
648 };
649 
650 static struct clk_rcg2 sdcc1_apps_clk_src = {
651 	.cmd_rcgr = 0x42004,
652 	.mnd_width = 8,
653 	.hid_width = 5,
654 	.parent_map = gcc_xo_gpll0_map,
655 	.freq_tbl = ftbl_gcc_sdcc_apps_clk,
656 	.clkr.hw.init = &(struct clk_init_data){
657 		.name = "sdcc1_apps_clk_src",
658 		.parent_data = gcc_xo_gpll0,
659 		.num_parents = 2,
660 		.ops = &clk_rcg2_floor_ops,
661 	},
662 };
663 
664 static struct clk_rcg2 sdcc2_apps_clk_src = {
665 	.cmd_rcgr = 0x43004,
666 	.mnd_width = 8,
667 	.hid_width = 5,
668 	.parent_map = gcc_xo_gpll0_map,
669 	.freq_tbl = ftbl_gcc_sdcc_apps_clk,
670 	.clkr.hw.init = &(struct clk_init_data){
671 		.name = "sdcc2_apps_clk_src",
672 		.parent_data = gcc_xo_gpll0,
673 		.num_parents = 2,
674 		.ops = &clk_rcg2_floor_ops,
675 	},
676 };
677 
678 static const struct freq_tbl ftbl_gcc_apss_tcu_clk[] = {
679 	F(155000000, P_GPLL2, 6, 0, 0),
680 	F(310000000, P_GPLL2, 3, 0, 0),
681 	F(400000000, P_GPLL0, 2, 0, 0),
682 	{ }
683 };
684 
685 static struct clk_rcg2 apss_tcu_clk_src = {
686 	.cmd_rcgr = 0x1207c,
687 	.hid_width = 5,
688 	.parent_map = gcc_xo_gpll0_gpll1_gpll2_map,
689 	.freq_tbl = ftbl_gcc_apss_tcu_clk,
690 	.clkr.hw.init = &(struct clk_init_data){
691 		.name = "apss_tcu_clk_src",
692 		.parent_data = gcc_xo_gpll0_gpll1_gpll2,
693 		.num_parents = 4,
694 		.ops = &clk_rcg2_ops,
695 	},
696 };
697 
698 static const struct freq_tbl ftbl_gcc_usb_hs_system_clk[] = {
699 	F(19200000, P_XO, 1, 0, 0),
700 	F(57140000, P_GPLL0, 14, 0, 0),
701 	F(69565000, P_GPLL0, 11.5, 0, 0),
702 	F(133330000, P_GPLL0, 6, 0, 0),
703 	F(177778000, P_GPLL0, 4.5, 0, 0),
704 	{ }
705 };
706 
707 static struct clk_rcg2 usb_hs_system_clk_src = {
708 	.cmd_rcgr = 0x41010,
709 	.hid_width = 5,
710 	.parent_map = gcc_xo_gpll0_map,
711 	.freq_tbl = ftbl_gcc_usb_hs_system_clk,
712 	.clkr.hw.init = &(struct clk_init_data){
713 		.name = "usb_hs_system_clk_src",
714 		.parent_data = gcc_xo_gpll0,
715 		.num_parents = 2,
716 		.ops = &clk_rcg2_ops,
717 	},
718 };
719 
720 static const struct freq_tbl ftbl_usb_hsic_clk_src[] = {
721 	F(480000000, P_GPLL2, 1, 0, 0),
722 	{ }
723 };
724 
725 static struct clk_rcg2 usb_hsic_clk_src = {
726 	.cmd_rcgr = 0x3d018,
727 	.hid_width = 5,
728 	.parent_map = gcc_xo_gpll0_gpll2_map,
729 	.freq_tbl = ftbl_usb_hsic_clk_src,
730 	.clkr.hw.init = &(struct clk_init_data){
731 		.name = "usb_hsic_clk_src",
732 		.parent_data = gcc_xo_gpll0_gpll2,
733 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll2),
734 		.ops = &clk_rcg2_ops,
735 	},
736 };
737 
738 static const struct freq_tbl ftbl_usb_hsic_io_cal_clk_src[] = {
739 	F(9600000, P_XO, 2, 0, 0),
740 	{ }
741 };
742 
743 static struct clk_rcg2 usb_hsic_io_cal_clk_src = {
744 	.cmd_rcgr = 0x3d030,
745 	.hid_width = 5,
746 	.parent_map = gcc_xo_gpll0_map,
747 	.freq_tbl = ftbl_usb_hsic_io_cal_clk_src,
748 	.clkr.hw.init = &(struct clk_init_data){
749 		.name = "usb_hsic_io_cal_clk_src",
750 		.parent_data = gcc_xo_gpll0,
751 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
752 		.ops = &clk_rcg2_ops,
753 	},
754 };
755 
756 static const struct freq_tbl ftbl_usb_hsic_system_clk_src[] = {
757 	F(19200000, P_XO, 1, 0, 0),
758 	F(57140000, P_GPLL0, 14, 0, 0),
759 	F(133330000, P_GPLL0, 6, 0, 0),
760 	F(177778000, P_GPLL0, 4.5, 0, 0),
761 	{ }
762 };
763 
764 static struct clk_rcg2 usb_hsic_system_clk_src = {
765 	.cmd_rcgr = 0x3d000,
766 	.hid_width = 5,
767 	.parent_map = gcc_xo_gpll0_map,
768 	.freq_tbl = ftbl_usb_hsic_system_clk_src,
769 	.clkr.hw.init = &(struct clk_init_data){
770 		.name = "usb_hsic_system_clk_src",
771 		.parent_data = gcc_xo_gpll0,
772 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
773 		.ops = &clk_rcg2_ops,
774 	},
775 };
776 
777 static struct clk_branch gcc_blsp1_ahb_clk = {
778 	.halt_reg = 0x1008,
779 	.halt_check = BRANCH_HALT_VOTED,
780 	.clkr = {
781 		.enable_reg = 0x45004,
782 		.enable_mask = BIT(10),
783 		.hw.init = &(struct clk_init_data){
784 			.name = "gcc_blsp1_ahb_clk",
785 			.parent_hws = (const struct clk_hw *[]){ &pcnoc_bfdcd_clk_src.clkr.hw },
786 			.num_parents = 1,
787 			.ops = &clk_branch2_ops,
788 		},
789 	},
790 };
791 
792 static struct clk_branch gcc_blsp1_sleep_clk = {
793 	.halt_reg = 0x1004,
794 	.clkr = {
795 		.enable_reg = 0x1004,
796 		.enable_mask = BIT(0),
797 		.hw.init = &(struct clk_init_data){
798 			.name = "gcc_blsp1_sleep_clk",
799 			.parent_data = &(const struct clk_parent_data){
800 				.fw_name = "sleep_clk",
801 			},
802 			.num_parents = 1,
803 			.flags = CLK_SET_RATE_PARENT,
804 			.ops = &clk_branch2_ops,
805 		},
806 	},
807 };
808 
809 static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
810 	.halt_reg = 0x2008,
811 	.clkr = {
812 		.enable_reg = 0x2008,
813 		.enable_mask = BIT(0),
814 		.hw.init = &(struct clk_init_data){
815 			.name = "gcc_blsp1_qup1_i2c_apps_clk",
816 			.parent_hws = (const struct clk_hw *[]){ &blsp1_qup1_i2c_apps_clk_src.clkr.hw },
817 			.num_parents = 1,
818 			.flags = CLK_SET_RATE_PARENT,
819 			.ops = &clk_branch2_ops,
820 		},
821 	},
822 };
823 
824 static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
825 	.halt_reg = 0x2004,
826 	.clkr = {
827 		.enable_reg = 0x2004,
828 		.enable_mask = BIT(0),
829 		.hw.init = &(struct clk_init_data){
830 			.name = "gcc_blsp1_qup1_spi_apps_clk",
831 			.parent_hws = (const struct clk_hw *[]){ &blsp1_qup1_spi_apps_clk_src.clkr.hw },
832 			.num_parents = 1,
833 			.flags = CLK_SET_RATE_PARENT,
834 			.ops = &clk_branch2_ops,
835 		},
836 	},
837 };
838 
839 static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
840 	.halt_reg = 0x3010,
841 	.clkr = {
842 		.enable_reg = 0x3010,
843 		.enable_mask = BIT(0),
844 		.hw.init = &(struct clk_init_data){
845 			.name = "gcc_blsp1_qup2_i2c_apps_clk",
846 			.parent_hws = (const struct clk_hw *[]){ &blsp1_qup2_i2c_apps_clk_src.clkr.hw },
847 			.num_parents = 1,
848 			.flags = CLK_SET_RATE_PARENT,
849 			.ops = &clk_branch2_ops,
850 		},
851 	},
852 };
853 
854 static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
855 	.halt_reg = 0x300c,
856 	.clkr = {
857 		.enable_reg = 0x300c,
858 		.enable_mask = BIT(0),
859 		.hw.init = &(struct clk_init_data){
860 			.name = "gcc_blsp1_qup2_spi_apps_clk",
861 			.parent_hws = (const struct clk_hw *[]){ &blsp1_qup2_spi_apps_clk_src.clkr.hw },
862 			.num_parents = 1,
863 			.flags = CLK_SET_RATE_PARENT,
864 			.ops = &clk_branch2_ops,
865 		},
866 	},
867 };
868 
869 static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
870 	.halt_reg = 0x4020,
871 	.clkr = {
872 		.enable_reg = 0x4020,
873 		.enable_mask = BIT(0),
874 		.hw.init = &(struct clk_init_data){
875 			.name = "gcc_blsp1_qup3_i2c_apps_clk",
876 			.parent_hws = (const struct clk_hw *[]){ &blsp1_qup3_i2c_apps_clk_src.clkr.hw },
877 			.num_parents = 1,
878 			.flags = CLK_SET_RATE_PARENT,
879 			.ops = &clk_branch2_ops,
880 		},
881 	},
882 };
883 
884 static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
885 	.halt_reg = 0x401c,
886 	.clkr = {
887 		.enable_reg = 0x401c,
888 		.enable_mask = BIT(0),
889 		.hw.init = &(struct clk_init_data){
890 			.name = "gcc_blsp1_qup3_spi_apps_clk",
891 			.parent_hws = (const struct clk_hw *[]){ &blsp1_qup3_spi_apps_clk_src.clkr.hw },
892 			.num_parents = 1,
893 			.flags = CLK_SET_RATE_PARENT,
894 			.ops = &clk_branch2_ops,
895 		},
896 	},
897 };
898 
899 static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
900 	.halt_reg = 0x5020,
901 	.clkr = {
902 		.enable_reg = 0x5020,
903 		.enable_mask = BIT(0),
904 		.hw.init = &(struct clk_init_data){
905 			.name = "gcc_blsp1_qup4_i2c_apps_clk",
906 			.parent_hws = (const struct clk_hw *[]){ &blsp1_qup4_i2c_apps_clk_src.clkr.hw },
907 			.num_parents = 1,
908 			.flags = CLK_SET_RATE_PARENT,
909 			.ops = &clk_branch2_ops,
910 		},
911 	},
912 };
913 
914 static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
915 	.halt_reg = 0x501c,
916 	.clkr = {
917 		.enable_reg = 0x501c,
918 		.enable_mask = BIT(0),
919 		.hw.init = &(struct clk_init_data){
920 			.name = "gcc_blsp1_qup4_spi_apps_clk",
921 			.parent_hws = (const struct clk_hw *[]){ &blsp1_qup4_spi_apps_clk_src.clkr.hw },
922 			.num_parents = 1,
923 			.flags = CLK_SET_RATE_PARENT,
924 			.ops = &clk_branch2_ops,
925 		},
926 	},
927 };
928 
929 static struct clk_branch gcc_blsp1_qup5_i2c_apps_clk = {
930 	.halt_reg = 0x6020,
931 	.clkr = {
932 		.enable_reg = 0x6020,
933 		.enable_mask = BIT(0),
934 		.hw.init = &(struct clk_init_data){
935 			.name = "gcc_blsp1_qup5_i2c_apps_clk",
936 			.parent_hws = (const struct clk_hw *[]){ &blsp1_qup5_i2c_apps_clk_src.clkr.hw },
937 			.num_parents = 1,
938 			.flags = CLK_SET_RATE_PARENT,
939 			.ops = &clk_branch2_ops,
940 		},
941 	},
942 };
943 
944 static struct clk_branch gcc_blsp1_qup5_spi_apps_clk = {
945 	.halt_reg = 0x601c,
946 	.clkr = {
947 		.enable_reg = 0x601c,
948 		.enable_mask = BIT(0),
949 		.hw.init = &(struct clk_init_data){
950 			.name = "gcc_blsp1_qup5_spi_apps_clk",
951 			.parent_hws = (const struct clk_hw *[]){ &blsp1_qup5_spi_apps_clk_src.clkr.hw },
952 			.num_parents = 1,
953 			.flags = CLK_SET_RATE_PARENT,
954 			.ops = &clk_branch2_ops,
955 		},
956 	},
957 };
958 
959 static struct clk_branch gcc_blsp1_qup6_i2c_apps_clk = {
960 	.halt_reg = 0x7020,
961 	.clkr = {
962 		.enable_reg = 0x7020,
963 		.enable_mask = BIT(0),
964 		.hw.init = &(struct clk_init_data){
965 			.name = "gcc_blsp1_qup6_i2c_apps_clk",
966 			.parent_hws = (const struct clk_hw *[]){ &blsp1_qup6_i2c_apps_clk_src.clkr.hw },
967 			.num_parents = 1,
968 			.flags = CLK_SET_RATE_PARENT,
969 			.ops = &clk_branch2_ops,
970 		},
971 	},
972 };
973 
974 static struct clk_branch gcc_blsp1_qup6_spi_apps_clk = {
975 	.halt_reg = 0x701c,
976 	.clkr = {
977 		.enable_reg = 0x701c,
978 		.enable_mask = BIT(0),
979 		.hw.init = &(struct clk_init_data){
980 			.name = "gcc_blsp1_qup6_spi_apps_clk",
981 			.parent_hws = (const struct clk_hw *[]){ &blsp1_qup6_spi_apps_clk_src.clkr.hw },
982 			.num_parents = 1,
983 			.flags = CLK_SET_RATE_PARENT,
984 			.ops = &clk_branch2_ops,
985 		},
986 	},
987 };
988 
989 static struct clk_branch gcc_blsp1_uart1_apps_clk = {
990 	.halt_reg = 0x203c,
991 	.clkr = {
992 		.enable_reg = 0x203c,
993 		.enable_mask = BIT(0),
994 		.hw.init = &(struct clk_init_data){
995 			.name = "gcc_blsp1_uart1_apps_clk",
996 			.parent_hws = (const struct clk_hw *[]){ &blsp1_uart1_apps_clk_src.clkr.hw },
997 			.num_parents = 1,
998 			.flags = CLK_SET_RATE_PARENT,
999 			.ops = &clk_branch2_ops,
1000 		},
1001 	},
1002 };
1003 
1004 static struct clk_branch gcc_blsp1_uart2_apps_clk = {
1005 	.halt_reg = 0x302c,
1006 	.clkr = {
1007 		.enable_reg = 0x302c,
1008 		.enable_mask = BIT(0),
1009 		.hw.init = &(struct clk_init_data){
1010 			.name = "gcc_blsp1_uart2_apps_clk",
1011 			.parent_hws = (const struct clk_hw *[]){ &blsp1_uart2_apps_clk_src.clkr.hw },
1012 			.num_parents = 1,
1013 			.flags = CLK_SET_RATE_PARENT,
1014 			.ops = &clk_branch2_ops,
1015 		},
1016 	},
1017 };
1018 
1019 static struct clk_branch gcc_blsp1_uart3_apps_clk = {
1020 	.halt_reg = 0x403c,
1021 	.clkr = {
1022 		.enable_reg = 0x403c,
1023 		.enable_mask = BIT(0),
1024 		.hw.init = &(struct clk_init_data){
1025 			.name = "gcc_blsp1_uart3_apps_clk",
1026 			.parent_hws = (const struct clk_hw *[]){ &blsp1_uart3_apps_clk_src.clkr.hw },
1027 			.num_parents = 1,
1028 			.flags = CLK_SET_RATE_PARENT,
1029 			.ops = &clk_branch2_ops,
1030 		},
1031 	},
1032 };
1033 
1034 static struct clk_branch gcc_blsp1_uart4_apps_clk = {
1035 	.halt_reg = 0x503c,
1036 	.clkr = {
1037 		.enable_reg = 0x503c,
1038 		.enable_mask = BIT(0),
1039 		.hw.init = &(struct clk_init_data){
1040 			.name = "gcc_blsp1_uart4_apps_clk",
1041 			.parent_hws = (const struct clk_hw *[]){ &blsp1_uart4_apps_clk_src.clkr.hw },
1042 			.num_parents = 1,
1043 			.flags = CLK_SET_RATE_PARENT,
1044 			.ops = &clk_branch2_ops,
1045 		},
1046 	},
1047 };
1048 
1049 static struct clk_branch gcc_blsp1_uart5_apps_clk = {
1050 	.halt_reg = 0x603c,
1051 	.clkr = {
1052 		.enable_reg = 0x603c,
1053 		.enable_mask = BIT(0),
1054 		.hw.init = &(struct clk_init_data){
1055 			.name = "gcc_blsp1_uart5_apps_clk",
1056 			.parent_hws = (const struct clk_hw *[]){ &blsp1_uart5_apps_clk_src.clkr.hw },
1057 			.num_parents = 1,
1058 			.flags = CLK_SET_RATE_PARENT,
1059 			.ops = &clk_branch2_ops,
1060 		},
1061 	},
1062 };
1063 
1064 static struct clk_branch gcc_blsp1_uart6_apps_clk = {
1065 	.halt_reg = 0x703c,
1066 	.clkr = {
1067 		.enable_reg = 0x703c,
1068 		.enable_mask = BIT(0),
1069 		.hw.init = &(struct clk_init_data){
1070 			.name = "gcc_blsp1_uart6_apps_clk",
1071 			.parent_hws = (const struct clk_hw *[]){ &blsp1_uart6_apps_clk_src.clkr.hw },
1072 			.num_parents = 1,
1073 			.flags = CLK_SET_RATE_PARENT,
1074 			.ops = &clk_branch2_ops,
1075 		},
1076 	},
1077 };
1078 
1079 static struct clk_branch gcc_boot_rom_ahb_clk = {
1080 	.halt_reg = 0x1300c,
1081 	.halt_check = BRANCH_HALT_VOTED,
1082 	.clkr = {
1083 		.enable_reg = 0x45004,
1084 		.enable_mask = BIT(7),
1085 		.hw.init = &(struct clk_init_data){
1086 			.name = "gcc_boot_rom_ahb_clk",
1087 			.parent_hws = (const struct clk_hw *[]){ &pcnoc_bfdcd_clk_src.clkr.hw },
1088 			.num_parents = 1,
1089 			.ops = &clk_branch2_ops,
1090 		},
1091 	},
1092 };
1093 
1094 static struct clk_branch gcc_crypto_ahb_clk = {
1095 	.halt_reg = 0x16024,
1096 	.halt_check = BRANCH_HALT_VOTED,
1097 	.clkr = {
1098 		.enable_reg = 0x45004,
1099 		.enable_mask = BIT(0),
1100 		.hw.init = &(struct clk_init_data){
1101 			.name = "gcc_crypto_ahb_clk",
1102 			.parent_hws = (const struct clk_hw *[]){ &pcnoc_bfdcd_clk_src.clkr.hw },
1103 			.num_parents = 1,
1104 			.flags = CLK_SET_RATE_PARENT,
1105 			.ops = &clk_branch2_ops,
1106 		},
1107 	},
1108 };
1109 
1110 static struct clk_branch gcc_crypto_axi_clk = {
1111 	.halt_reg = 0x16020,
1112 	.halt_check = BRANCH_HALT_VOTED,
1113 	.clkr = {
1114 		.enable_reg = 0x45004,
1115 		.enable_mask = BIT(1),
1116 		.hw.init = &(struct clk_init_data){
1117 			.name = "gcc_crypto_axi_clk",
1118 			.parent_hws = (const struct clk_hw *[]){ &pcnoc_bfdcd_clk_src.clkr.hw },
1119 			.num_parents = 1,
1120 			.flags = CLK_SET_RATE_PARENT,
1121 			.ops = &clk_branch2_ops,
1122 		},
1123 	},
1124 };
1125 
1126 static struct clk_branch gcc_crypto_clk = {
1127 	.halt_reg = 0x1601c,
1128 	.halt_check = BRANCH_HALT_VOTED,
1129 	.clkr = {
1130 		.enable_reg = 0x45004,
1131 		.enable_mask = BIT(2),
1132 		.hw.init = &(struct clk_init_data){
1133 			.name = "gcc_crypto_clk",
1134 			.parent_hws = (const struct clk_hw *[]){ &crypto_clk_src.clkr.hw },
1135 			.num_parents = 1,
1136 			.flags = CLK_SET_RATE_PARENT,
1137 			.ops = &clk_branch2_ops,
1138 		},
1139 	},
1140 };
1141 
1142 static struct clk_branch gcc_gp1_clk = {
1143 	.halt_reg = 0x08000,
1144 	.clkr = {
1145 		.enable_reg = 0x08000,
1146 		.enable_mask = BIT(0),
1147 		.hw.init = &(struct clk_init_data){
1148 			.name = "gcc_gp1_clk",
1149 			.parent_hws = (const struct clk_hw *[]){ &gp1_clk_src.clkr.hw },
1150 			.num_parents = 1,
1151 			.flags = CLK_SET_RATE_PARENT,
1152 			.ops = &clk_branch2_ops,
1153 		},
1154 	},
1155 };
1156 
1157 static struct clk_branch gcc_gp2_clk = {
1158 	.halt_reg = 0x09000,
1159 	.clkr = {
1160 		.enable_reg = 0x09000,
1161 		.enable_mask = BIT(0),
1162 		.hw.init = &(struct clk_init_data){
1163 			.name = "gcc_gp2_clk",
1164 			.parent_hws = (const struct clk_hw *[]){ &gp2_clk_src.clkr.hw },
1165 			.num_parents = 1,
1166 			.flags = CLK_SET_RATE_PARENT,
1167 			.ops = &clk_branch2_ops,
1168 		},
1169 	},
1170 };
1171 
1172 static struct clk_branch gcc_gp3_clk = {
1173 	.halt_reg = 0x0a000,
1174 	.clkr = {
1175 		.enable_reg = 0x0a000,
1176 		.enable_mask = BIT(0),
1177 		.hw.init = &(struct clk_init_data){
1178 			.name = "gcc_gp3_clk",
1179 			.parent_hws = (const struct clk_hw *[]){ &gp3_clk_src.clkr.hw },
1180 			.num_parents = 1,
1181 			.flags = CLK_SET_RATE_PARENT,
1182 			.ops = &clk_branch2_ops,
1183 		},
1184 	},
1185 };
1186 
1187 static struct clk_branch gcc_mss_cfg_ahb_clk = {
1188 	.halt_reg = 0x49000,
1189 	.clkr = {
1190 		.enable_reg = 0x49000,
1191 		.enable_mask = BIT(0),
1192 		.hw.init = &(struct clk_init_data){
1193 			.name = "gcc_mss_cfg_ahb_clk",
1194 			.parent_hws = (const struct clk_hw *[]){ &pcnoc_bfdcd_clk_src.clkr.hw },
1195 			.num_parents = 1,
1196 			.flags = CLK_SET_RATE_PARENT,
1197 			.ops = &clk_branch2_ops,
1198 		},
1199 	},
1200 };
1201 
1202 static struct clk_branch gcc_pdm2_clk = {
1203 	.halt_reg = 0x4400c,
1204 	.clkr = {
1205 		.enable_reg = 0x4400c,
1206 		.enable_mask = BIT(0),
1207 		.hw.init = &(struct clk_init_data){
1208 			.name = "gcc_pdm2_clk",
1209 			.parent_hws = (const struct clk_hw *[]){ &pdm2_clk_src.clkr.hw },
1210 			.num_parents = 1,
1211 			.flags = CLK_SET_RATE_PARENT,
1212 			.ops = &clk_branch2_ops,
1213 		},
1214 	},
1215 };
1216 
1217 static struct clk_branch gcc_pdm_ahb_clk = {
1218 	.halt_reg = 0x44004,
1219 	.clkr = {
1220 		.enable_reg = 0x44004,
1221 		.enable_mask = BIT(0),
1222 		.hw.init = &(struct clk_init_data){
1223 			.name = "gcc_pdm_ahb_clk",
1224 			.parent_hws = (const struct clk_hw *[]){ &pcnoc_bfdcd_clk_src.clkr.hw },
1225 			.num_parents = 1,
1226 			.flags = CLK_SET_RATE_PARENT,
1227 			.ops = &clk_branch2_ops,
1228 		},
1229 	},
1230 };
1231 
1232 static struct clk_branch gcc_prng_ahb_clk = {
1233 	.halt_reg = 0x13004,
1234 	.halt_check = BRANCH_HALT_VOTED,
1235 	.clkr = {
1236 		.enable_reg = 0x45004,
1237 		.enable_mask = BIT(8),
1238 		.hw.init = &(struct clk_init_data){
1239 			.name = "gcc_prng_ahb_clk",
1240 			.parent_hws = (const struct clk_hw *[]){ &pcnoc_bfdcd_clk_src.clkr.hw },
1241 			.num_parents = 1,
1242 			.flags = CLK_SET_RATE_PARENT,
1243 			.ops = &clk_branch2_ops,
1244 		},
1245 	},
1246 };
1247 
1248 static struct clk_branch gcc_sdcc1_ahb_clk = {
1249 	.halt_reg = 0x4201c,
1250 	.clkr = {
1251 		.enable_reg = 0x4201c,
1252 		.enable_mask = BIT(0),
1253 		.hw.init = &(struct clk_init_data){
1254 			.name = "gcc_sdcc1_ahb_clk",
1255 			.parent_hws = (const struct clk_hw *[]){ &pcnoc_bfdcd_clk_src.clkr.hw },
1256 			.num_parents = 1,
1257 			.flags = CLK_SET_RATE_PARENT,
1258 			.ops = &clk_branch2_ops,
1259 		},
1260 	},
1261 };
1262 
1263 static struct clk_branch gcc_sdcc1_apps_clk = {
1264 	.halt_reg = 0x42018,
1265 	.clkr = {
1266 		.enable_reg = 0x42018,
1267 		.enable_mask = BIT(0),
1268 		.hw.init = &(struct clk_init_data){
1269 			.name = "gcc_sdcc1_apps_clk",
1270 			.parent_hws = (const struct clk_hw *[]){ &sdcc1_apps_clk_src.clkr.hw },
1271 			.num_parents = 1,
1272 			.flags = CLK_SET_RATE_PARENT,
1273 			.ops = &clk_branch2_ops,
1274 		},
1275 	},
1276 };
1277 
1278 static struct clk_branch gcc_sdcc2_ahb_clk = {
1279 	.halt_reg = 0x4301c,
1280 	.clkr = {
1281 		.enable_reg = 0x4301c,
1282 		.enable_mask = BIT(0),
1283 		.hw.init = &(struct clk_init_data){
1284 			.name = "gcc_sdcc2_ahb_clk",
1285 			.parent_hws = (const struct clk_hw *[]){ &pcnoc_bfdcd_clk_src.clkr.hw },
1286 			.num_parents = 1,
1287 			.flags = CLK_SET_RATE_PARENT,
1288 			.ops = &clk_branch2_ops,
1289 		},
1290 	},
1291 };
1292 
1293 static struct clk_branch gcc_sdcc2_apps_clk = {
1294 	.halt_reg = 0x43018,
1295 	.clkr = {
1296 		.enable_reg = 0x43018,
1297 		.enable_mask = BIT(0),
1298 		.hw.init = &(struct clk_init_data){
1299 			.name = "gcc_sdcc2_apps_clk",
1300 			.parent_hws = (const struct clk_hw *[]){ &sdcc2_apps_clk_src.clkr.hw },
1301 			.num_parents = 1,
1302 			.flags = CLK_SET_RATE_PARENT,
1303 			.ops = &clk_branch2_ops,
1304 		},
1305 	},
1306 };
1307 
1308 static struct clk_rcg2 bimc_ddr_clk_src = {
1309 	.cmd_rcgr = 0x32004,
1310 	.hid_width = 5,
1311 	.parent_map = gcc_xo_gpll0_bimc_map,
1312 	.clkr.hw.init = &(struct clk_init_data){
1313 		.name = "bimc_ddr_clk_src",
1314 		.parent_data = gcc_xo_gpll0_bimc,
1315 		.num_parents = 3,
1316 		.ops = &clk_rcg2_ops,
1317 		.flags = CLK_GET_RATE_NOCACHE,
1318 	},
1319 };
1320 
1321 static struct clk_branch gcc_mss_q6_bimc_axi_clk = {
1322 	.halt_reg = 0x49004,
1323 	.clkr = {
1324 		.enable_reg = 0x49004,
1325 		.enable_mask = BIT(0),
1326 		.hw.init = &(struct clk_init_data){
1327 			.name = "gcc_mss_q6_bimc_axi_clk",
1328 			.parent_hws = (const struct clk_hw *[]){ &bimc_ddr_clk_src.clkr.hw },
1329 			.num_parents = 1,
1330 			.flags = CLK_SET_RATE_PARENT,
1331 			.ops = &clk_branch2_ops,
1332 		},
1333 	},
1334 };
1335 
1336 static struct clk_branch gcc_apss_tcu_clk = {
1337 	.halt_reg = 0x12018,
1338 	.halt_check = BRANCH_HALT_VOTED,
1339 	.clkr = {
1340 		.enable_reg = 0x4500c,
1341 		.enable_mask = BIT(1),
1342 		.hw.init = &(struct clk_init_data){
1343 			.name = "gcc_apss_tcu_clk",
1344 			.parent_hws = (const struct clk_hw *[]){ &bimc_ddr_clk_src.clkr.hw },
1345 			.num_parents = 1,
1346 			.ops = &clk_branch2_ops,
1347 		},
1348 	},
1349 };
1350 
1351 static struct clk_branch gcc_smmu_cfg_clk = {
1352 	.halt_reg = 0x12038,
1353 	.halt_check = BRANCH_HALT_VOTED,
1354 	.clkr = {
1355 		.enable_reg = 0x4500c,
1356 		.enable_mask = BIT(12),
1357 		.hw.init = &(struct clk_init_data){
1358 			.name = "gcc_smmu_cfg_clk",
1359 			.parent_hws = (const struct clk_hw *[]){ &pcnoc_bfdcd_clk_src.clkr.hw },
1360 			.num_parents = 1,
1361 			.flags = CLK_SET_RATE_PARENT,
1362 			.ops = &clk_branch2_ops,
1363 		},
1364 	},
1365 };
1366 
1367 static struct clk_branch gcc_qdss_dap_clk = {
1368 	.halt_reg = 0x29084,
1369 	.halt_check = BRANCH_HALT_VOTED,
1370 	.clkr = {
1371 		.enable_reg = 0x45004,
1372 		.enable_mask = BIT(19),
1373 		.hw.init = &(struct clk_init_data){
1374 			.name = "gcc_qdss_dap_clk",
1375 			.parent_data = &(const struct clk_parent_data){
1376 				.fw_name = "xo",
1377 			},
1378 			.num_parents = 1,
1379 			.ops = &clk_branch2_ops,
1380 		},
1381 	},
1382 };
1383 
1384 static struct clk_branch gcc_usb2a_phy_sleep_clk = {
1385 	.halt_reg = 0x4102c,
1386 	.clkr = {
1387 		.enable_reg = 0x4102c,
1388 		.enable_mask = BIT(0),
1389 		.hw.init = &(struct clk_init_data){
1390 			.name = "gcc_usb2a_phy_sleep_clk",
1391 			.parent_data = &(const struct clk_parent_data){
1392 				.fw_name = "sleep_clk",
1393 			},
1394 			.num_parents = 1,
1395 			.flags = CLK_SET_RATE_PARENT,
1396 			.ops = &clk_branch2_ops,
1397 		},
1398 	},
1399 };
1400 
1401 static struct clk_branch gcc_usb_hs_phy_cfg_ahb_clk = {
1402 	.halt_reg = 0x41030,
1403 	.halt_check = BRANCH_HALT,
1404 	.clkr = {
1405 		.enable_reg = 0x41030,
1406 		.enable_mask = BIT(0),
1407 		.hw.init = &(struct clk_init_data){
1408 			.name = "gcc_usb_hs_phy_cfg_ahb_clk",
1409 			.parent_hws = (const struct clk_hw *[]){ &pcnoc_bfdcd_clk_src.clkr.hw },
1410 			.num_parents = 1,
1411 			.flags = CLK_SET_RATE_PARENT,
1412 			.ops = &clk_branch2_ops,
1413 		},
1414 	},
1415 };
1416 
1417 static struct clk_branch gcc_usb_hs_ahb_clk = {
1418 	.halt_reg = 0x41008,
1419 	.clkr = {
1420 		.enable_reg = 0x41008,
1421 		.enable_mask = BIT(0),
1422 		.hw.init = &(struct clk_init_data){
1423 			.name = "gcc_usb_hs_ahb_clk",
1424 			.parent_hws = (const struct clk_hw *[]){ &pcnoc_bfdcd_clk_src.clkr.hw },
1425 			.num_parents = 1,
1426 			.flags = CLK_SET_RATE_PARENT,
1427 			.ops = &clk_branch2_ops,
1428 		},
1429 	},
1430 };
1431 
1432 static struct clk_branch gcc_usb_hs_system_clk = {
1433 	.halt_reg = 0x41004,
1434 	.clkr = {
1435 		.enable_reg = 0x41004,
1436 		.enable_mask = BIT(0),
1437 		.hw.init = &(struct clk_init_data){
1438 			.name = "gcc_usb_hs_system_clk",
1439 			.parent_hws = (const struct clk_hw *[]){ &usb_hs_system_clk_src.clkr.hw },
1440 			.num_parents = 1,
1441 			.flags = CLK_SET_RATE_PARENT,
1442 			.ops = &clk_branch2_ops,
1443 		},
1444 	},
1445 };
1446 
1447 static struct clk_branch gcc_apss_ahb_clk = {
1448 	.halt_reg = 0x4601c,
1449 	.halt_check = BRANCH_HALT_VOTED,
1450 	.clkr = {
1451 		.enable_reg = 0x45004,
1452 		.enable_mask = BIT(14),
1453 		.hw.init = &(struct clk_init_data){
1454 			.name = "gcc_apss_ahb_clk",
1455 			.parent_hws = (const struct clk_hw *[]){ &pcnoc_bfdcd_clk_src.clkr.hw },
1456 			.num_parents = 1,
1457 			.ops = &clk_branch2_ops,
1458 		},
1459 	},
1460 };
1461 
1462 static struct clk_branch gcc_apss_axi_clk = {
1463 	.halt_reg = 0x4601c,
1464 	.halt_check = BRANCH_HALT_VOTED,
1465 	.clkr = {
1466 		.enable_reg = 0x45004,
1467 		.enable_mask = BIT(13),
1468 		.hw.init = &(struct clk_init_data){
1469 			.name = "gcc_apss_axi_clk",
1470 			.parent_hws = (const struct clk_hw *[]){ &pcnoc_bfdcd_clk_src.clkr.hw },
1471 			.num_parents = 1,
1472 			.ops = &clk_branch2_ops,
1473 		},
1474 	},
1475 };
1476 
1477 static struct clk_regmap *gcc_mdm9607_clocks[] = {
1478 	[GPLL0] = &gpll0.clkr,
1479 	[GPLL0_EARLY] = &gpll0_early.clkr,
1480 	[GPLL1] = &gpll1.clkr,
1481 	[GPLL1_VOTE] = &gpll1_vote,
1482 	[GPLL2] = &gpll2.clkr,
1483 	[GPLL2_EARLY] = &gpll2_early.clkr,
1484 	[BIMC_PLL] = &bimc_pll.clkr,
1485 	[BIMC_PLL_VOTE] = &bimc_pll_vote,
1486 	[BIMC_DDR_CLK_SRC] = &bimc_ddr_clk_src.clkr,
1487 	[PCNOC_BFDCD_CLK_SRC] = &pcnoc_bfdcd_clk_src.clkr,
1488 	[SYSTEM_NOC_BFDCD_CLK_SRC] = &system_noc_bfdcd_clk_src.clkr,
1489 	[APSS_AHB_CLK_SRC] = &apss_ahb_clk_src.clkr,
1490 	[BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
1491 	[BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
1492 	[BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
1493 	[BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
1494 	[BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
1495 	[BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
1496 	[BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
1497 	[BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
1498 	[BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr,
1499 	[BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr,
1500 	[BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr,
1501 	[BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr,
1502 	[BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
1503 	[BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
1504 	[BLSP1_UART3_APPS_CLK_SRC] = &blsp1_uart3_apps_clk_src.clkr,
1505 	[BLSP1_UART4_APPS_CLK_SRC] = &blsp1_uart4_apps_clk_src.clkr,
1506 	[BLSP1_UART5_APPS_CLK_SRC] = &blsp1_uart5_apps_clk_src.clkr,
1507 	[BLSP1_UART6_APPS_CLK_SRC] = &blsp1_uart6_apps_clk_src.clkr,
1508 	[CRYPTO_CLK_SRC] = &crypto_clk_src.clkr,
1509 	[GP1_CLK_SRC] = &gp1_clk_src.clkr,
1510 	[GP2_CLK_SRC] = &gp2_clk_src.clkr,
1511 	[GP3_CLK_SRC] = &gp3_clk_src.clkr,
1512 	[PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
1513 	[SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
1514 	[SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
1515 	[APSS_TCU_CLK_SRC] = &apss_tcu_clk_src.clkr,
1516 	[USB_HS_SYSTEM_CLK_SRC] = &usb_hs_system_clk_src.clkr,
1517 	[GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
1518 	[GCC_BLSP1_SLEEP_CLK] = &gcc_blsp1_sleep_clk.clkr,
1519 	[GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
1520 	[GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
1521 	[GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
1522 	[GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
1523 	[GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
1524 	[GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
1525 	[GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
1526 	[GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
1527 	[GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr,
1528 	[GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr,
1529 	[GCC_BLSP1_QUP6_I2C_APPS_CLK] = &gcc_blsp1_qup6_i2c_apps_clk.clkr,
1530 	[GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr,
1531 	[GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
1532 	[GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
1533 	[GCC_BLSP1_UART3_APPS_CLK] = &gcc_blsp1_uart3_apps_clk.clkr,
1534 	[GCC_BLSP1_UART4_APPS_CLK] = &gcc_blsp1_uart4_apps_clk.clkr,
1535 	[GCC_BLSP1_UART5_APPS_CLK] = &gcc_blsp1_uart5_apps_clk.clkr,
1536 	[GCC_BLSP1_UART6_APPS_CLK] = &gcc_blsp1_uart6_apps_clk.clkr,
1537 	[GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
1538 	[GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr,
1539 	[GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr,
1540 	[GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr,
1541 	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
1542 	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
1543 	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
1544 	[GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,
1545 	[GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
1546 	[GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
1547 	[GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
1548 	[GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
1549 	[GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
1550 	[GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
1551 	[GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
1552 	[GCC_SMMU_CFG_CLK] = &gcc_smmu_cfg_clk.clkr,
1553 	[GCC_USB2A_PHY_SLEEP_CLK] = &gcc_usb2a_phy_sleep_clk.clkr,
1554 	[GCC_USB_HS_PHY_CFG_AHB_CLK] = &gcc_usb_hs_phy_cfg_ahb_clk.clkr,
1555 	[GCC_USB_HS_AHB_CLK] = &gcc_usb_hs_ahb_clk.clkr,
1556 	[GCC_USB_HS_SYSTEM_CLK] = &gcc_usb_hs_system_clk.clkr,
1557 	[GCC_APSS_TCU_CLK] = &gcc_apss_tcu_clk.clkr,
1558 	[GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr,
1559 	[GCC_QDSS_DAP_CLK] = &gcc_qdss_dap_clk.clkr,
1560 	[GCC_APSS_AHB_CLK] = &gcc_apss_ahb_clk.clkr,
1561 	[GCC_APSS_AXI_CLK] = &gcc_apss_axi_clk.clkr,
1562 	[GCC_USB_HSIC_CLK_SRC] = &usb_hsic_clk_src.clkr,
1563 	[GCC_USB_HSIC_IO_CAL_CLK_SRC] = &usb_hsic_io_cal_clk_src.clkr,
1564 	[GCC_USB_HSIC_SYSTEM_CLK_SRC] = &usb_hsic_system_clk_src.clkr,
1565 };
1566 
1567 static const struct qcom_reset_map gcc_mdm9607_resets[] = {
1568 	[USB_HS_HSIC_BCR] = { 0x3d05c },
1569 	[GCC_MSS_RESTART] = { 0x3e000 },
1570 	[USB_HS_BCR] = { 0x41000 },
1571 	[USB2_HS_PHY_ONLY_BCR] = { 0x41034 },
1572 	[QUSB2_PHY_BCR] = { 0x4103c },
1573 };
1574 
1575 static const struct regmap_config gcc_mdm9607_regmap_config = {
1576 	.reg_bits	= 32,
1577 	.reg_stride	= 4,
1578 	.val_bits	= 32,
1579 	.max_register	= 0x80000,
1580 	.fast_io	= true,
1581 };
1582 
1583 static const struct qcom_cc_desc gcc_mdm9607_desc = {
1584 	.config = &gcc_mdm9607_regmap_config,
1585 	.clks = gcc_mdm9607_clocks,
1586 	.num_clks = ARRAY_SIZE(gcc_mdm9607_clocks),
1587 	.resets = gcc_mdm9607_resets,
1588 	.num_resets = ARRAY_SIZE(gcc_mdm9607_resets),
1589 };
1590 
1591 static const struct of_device_id gcc_mdm9607_match_table[] = {
1592 	{ .compatible = "qcom,gcc-mdm9607" },
1593 	{ }
1594 };
1595 MODULE_DEVICE_TABLE(of, gcc_mdm9607_match_table);
1596 
1597 static int gcc_mdm9607_probe(struct platform_device *pdev)
1598 {
1599 	struct regmap *regmap;
1600 
1601 	regmap = qcom_cc_map(pdev, &gcc_mdm9607_desc);
1602 	if (IS_ERR(regmap))
1603 		return PTR_ERR(regmap);
1604 
1605 	/* Vote for GPLL0 to turn on. Needed by acpuclock. */
1606 	regmap_update_bits(regmap, 0x45000, BIT(0), BIT(0));
1607 
1608 	return qcom_cc_really_probe(pdev, &gcc_mdm9607_desc, regmap);
1609 }
1610 
1611 static struct platform_driver gcc_mdm9607_driver = {
1612 	.probe		= gcc_mdm9607_probe,
1613 	.driver		= {
1614 		.name	= "gcc-mdm9607",
1615 		.of_match_table = gcc_mdm9607_match_table,
1616 	},
1617 };
1618 
1619 static int __init gcc_mdm9607_init(void)
1620 {
1621 	return platform_driver_register(&gcc_mdm9607_driver);
1622 }
1623 core_initcall(gcc_mdm9607_init);
1624 
1625 static void __exit gcc_mdm9607_exit(void)
1626 {
1627 	platform_driver_unregister(&gcc_mdm9607_driver);
1628 }
1629 module_exit(gcc_mdm9607_exit);
1630 
1631 MODULE_DESCRIPTION("Qualcomm GCC mdm9607 Driver");
1632 MODULE_LICENSE("GPL v2");
1633