1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Copyright (C) 2022 Kernkonzept GmbH.
4  *
5  * Based on gcc-msm8916.c:
6  *   Copyright 2015 Linaro Limited
7  * adapted with data from clock-gcc-8909.c in Qualcomm's msm-3.18 release:
8  *   Copyright (c) 2014-2016, The Linux Foundation. All rights reserved.
9  */
10 
11 #include <linux/bitops.h>
12 #include <linux/clk-provider.h>
13 #include <linux/err.h>
14 #include <linux/kernel.h>
15 #include <linux/module.h>
16 #include <linux/of.h>
17 #include <linux/of_device.h>
18 #include <linux/platform_device.h>
19 #include <linux/regmap.h>
20 #include <linux/reset-controller.h>
21 
22 #include <dt-bindings/clock/qcom,gcc-msm8909.h>
23 
24 #include "clk-alpha-pll.h"
25 #include "clk-branch.h"
26 #include "clk-pll.h"
27 #include "clk-rcg.h"
28 #include "clk-regmap.h"
29 #include "common.h"
30 #include "gdsc.h"
31 #include "reset.h"
32 
33 /* Need to match the order of clocks in DT binding */
34 enum {
35 	DT_XO,
36 	DT_SLEEP_CLK,
37 	DT_DSI0PLL,
38 	DT_DSI0PLL_BYTE,
39 };
40 
41 enum {
42 	P_XO,
43 	P_SLEEP_CLK,
44 	P_GPLL0,
45 	P_GPLL1,
46 	P_GPLL2,
47 	P_BIMC,
48 	P_DSI0PLL,
49 	P_DSI0PLL_BYTE,
50 };
51 
52 static const struct parent_map gcc_xo_map[] = {
53 	{ P_XO, 0 },
54 };
55 
56 static const struct clk_parent_data gcc_xo_data[] = {
57 	{ .index = DT_XO },
58 };
59 
60 static const struct clk_parent_data gcc_sleep_clk_data[] = {
61 	{ .index = DT_SLEEP_CLK },
62 };
63 
64 static struct clk_alpha_pll gpll0_early = {
65 	.offset = 0x21000,
66 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
67 	.clkr = {
68 		.enable_reg = 0x45000,
69 		.enable_mask = BIT(0),
70 		.hw.init = &(struct clk_init_data) {
71 			.name = "gpll0_early",
72 			.parent_data = gcc_xo_data,
73 			.num_parents = ARRAY_SIZE(gcc_xo_data),
74 			/* Avoid rate changes for shared clock */
75 			.ops = &clk_alpha_pll_fixed_ops,
76 		},
77 	},
78 };
79 
80 static struct clk_alpha_pll_postdiv gpll0 = {
81 	.offset = 0x21000,
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 		/* Avoid rate changes for shared clock */
90 		.ops = &clk_alpha_pll_postdiv_ro_ops,
91 	},
92 };
93 
94 static struct clk_pll gpll1 = {
95 	.l_reg = 0x20004,
96 	.m_reg = 0x20008,
97 	.n_reg = 0x2000c,
98 	.config_reg = 0x20010,
99 	.mode_reg = 0x20000,
100 	.status_reg = 0x2001c,
101 	.status_bit = 17,
102 	.clkr.hw.init = &(struct clk_init_data) {
103 		.name = "gpll1",
104 		.parent_data = gcc_xo_data,
105 		.num_parents = ARRAY_SIZE(gcc_xo_data),
106 		.ops = &clk_pll_ops,
107 	},
108 };
109 
110 static struct clk_regmap gpll1_vote = {
111 	.enable_reg = 0x45000,
112 	.enable_mask = BIT(1),
113 	.hw.init = &(struct clk_init_data) {
114 		.name = "gpll1_vote",
115 		.parent_hws = (const struct clk_hw*[]) {
116 			&gpll1.clkr.hw,
117 		},
118 		.num_parents = 1,
119 		.ops = &clk_pll_vote_ops,
120 	},
121 };
122 
123 static struct clk_alpha_pll gpll2_early = {
124 	.offset = 0x25000,
125 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
126 	.clkr = {
127 		.enable_reg = 0x45000,
128 		.enable_mask = BIT(3),
129 		.hw.init = &(struct clk_init_data) {
130 			.name = "gpll2_early",
131 			.parent_data = gcc_xo_data,
132 			.num_parents = ARRAY_SIZE(gcc_xo_data),
133 			/* Avoid rate changes for shared clock */
134 			.ops = &clk_alpha_pll_fixed_ops,
135 		},
136 	},
137 };
138 
139 static struct clk_alpha_pll_postdiv gpll2 = {
140 	.offset = 0x25000,
141 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
142 	.clkr.hw.init = &(struct clk_init_data) {
143 		.name = "gpll2",
144 		.parent_hws = (const struct clk_hw*[]) {
145 			&gpll2_early.clkr.hw,
146 		},
147 		.num_parents = 1,
148 		/* Avoid rate changes for shared clock */
149 		.ops = &clk_alpha_pll_postdiv_ro_ops,
150 	},
151 };
152 
153 static struct clk_alpha_pll bimc_pll_early = {
154 	.offset = 0x23000,
155 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
156 	.clkr = {
157 		.enable_reg = 0x45000,
158 		.enable_mask = BIT(2),
159 		.hw.init = &(struct clk_init_data) {
160 			.name = "bimc_pll_early",
161 			.parent_data = gcc_xo_data,
162 			.num_parents = ARRAY_SIZE(gcc_xo_data),
163 			/* Avoid rate changes for shared clock */
164 			.ops = &clk_alpha_pll_fixed_ops,
165 		},
166 	},
167 };
168 
169 static struct clk_alpha_pll_postdiv bimc_pll = {
170 	.offset = 0x23000,
171 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
172 	.clkr.hw.init = &(struct clk_init_data) {
173 		.name = "bimc_pll",
174 		.parent_hws = (const struct clk_hw*[]) {
175 			&bimc_pll_early.clkr.hw,
176 		},
177 		.num_parents = 1,
178 		/* Avoid rate changes for shared clock */
179 		.ops = &clk_alpha_pll_postdiv_ro_ops,
180 	},
181 };
182 
183 static const struct parent_map gcc_xo_gpll0_map[] = {
184 	{ P_XO, 0 },
185 	{ P_GPLL0, 1 },
186 };
187 
188 static const struct clk_parent_data gcc_xo_gpll0_data[] = {
189 	{ .index = DT_XO },
190 	{ .hw = &gpll0.clkr.hw },
191 };
192 
193 static const struct parent_map gcc_xo_gpll0_bimc_map[] = {
194 	{ P_XO, 0 },
195 	{ P_GPLL0, 1 },
196 	{ P_BIMC, 2 },
197 };
198 
199 static const struct clk_parent_data gcc_xo_gpll0_bimc_data[] = {
200 	{ .index = DT_XO },
201 	{ .hw = &gpll0.clkr.hw },
202 	{ .hw = &bimc_pll.clkr.hw },
203 };
204 
205 static const struct freq_tbl ftbl_apss_ahb_clk_src[] = {
206 	F(19200000, P_XO, 1, 0, 0),
207 	F(50000000, P_GPLL0, 16, 0, 0),
208 	F(100000000, P_GPLL0, 8, 0, 0),
209 	{ }
210 };
211 
212 static struct clk_rcg2 apss_ahb_clk_src = {
213 	.cmd_rcgr = 0x46000,
214 	.hid_width = 5,
215 	.freq_tbl = ftbl_apss_ahb_clk_src,
216 	.parent_map = gcc_xo_gpll0_map,
217 	.clkr.hw.init = &(struct clk_init_data) {
218 		.name = "apss_ahb_clk_src",
219 		.parent_data = gcc_xo_gpll0_data,
220 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
221 		.ops = &clk_rcg2_ops,
222 	}
223 };
224 
225 static struct clk_rcg2 bimc_ddr_clk_src = {
226 	.cmd_rcgr = 0x32004,
227 	.hid_width = 5,
228 	.parent_map = gcc_xo_gpll0_bimc_map,
229 	.clkr.hw.init = &(struct clk_init_data) {
230 		.name = "bimc_ddr_clk_src",
231 		.parent_data = gcc_xo_gpll0_bimc_data,
232 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_bimc_data),
233 		.ops = &clk_rcg2_ops,
234 		.flags = CLK_GET_RATE_NOCACHE,
235 	},
236 };
237 
238 static struct clk_rcg2 bimc_gpu_clk_src = {
239 	.cmd_rcgr = 0x31028,
240 	.hid_width = 5,
241 	.parent_map = gcc_xo_gpll0_bimc_map,
242 	.clkr.hw.init = &(struct clk_init_data) {
243 		.name = "bimc_gpu_clk_src",
244 		.parent_data = gcc_xo_gpll0_bimc_data,
245 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_bimc_data),
246 		.ops = &clk_rcg2_ops,
247 		.flags = CLK_GET_RATE_NOCACHE,
248 	},
249 };
250 
251 static const struct freq_tbl ftbl_blsp_i2c_apps_clk_src[] = {
252 	F(19200000, P_XO, 1, 0, 0),
253 	F(50000000, P_GPLL0, 16, 0, 0),
254 	{ }
255 };
256 
257 static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
258 	.cmd_rcgr = 0x0200c,
259 	.hid_width = 5,
260 	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
261 	.parent_map = gcc_xo_gpll0_map,
262 	.clkr.hw.init = &(struct clk_init_data) {
263 		.name = "blsp1_qup1_i2c_apps_clk_src",
264 		.parent_data = gcc_xo_gpll0_data,
265 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
266 		.ops = &clk_rcg2_ops,
267 	}
268 };
269 
270 static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
271 	.cmd_rcgr = 0x03000,
272 	.hid_width = 5,
273 	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
274 	.parent_map = gcc_xo_gpll0_map,
275 	.clkr.hw.init = &(struct clk_init_data) {
276 		.name = "blsp1_qup2_i2c_apps_clk_src",
277 		.parent_data = gcc_xo_gpll0_data,
278 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
279 		.ops = &clk_rcg2_ops,
280 	}
281 };
282 
283 static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
284 	.cmd_rcgr = 0x04000,
285 	.hid_width = 5,
286 	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
287 	.parent_map = gcc_xo_gpll0_map,
288 	.clkr.hw.init = &(struct clk_init_data) {
289 		.name = "blsp1_qup3_i2c_apps_clk_src",
290 		.parent_data = gcc_xo_gpll0_data,
291 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
292 		.ops = &clk_rcg2_ops,
293 	}
294 };
295 
296 static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
297 	.cmd_rcgr = 0x05000,
298 	.hid_width = 5,
299 	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
300 	.parent_map = gcc_xo_gpll0_map,
301 	.clkr.hw.init = &(struct clk_init_data) {
302 		.name = "blsp1_qup4_i2c_apps_clk_src",
303 		.parent_data = gcc_xo_gpll0_data,
304 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
305 		.ops = &clk_rcg2_ops,
306 	}
307 };
308 
309 static struct clk_rcg2 blsp1_qup5_i2c_apps_clk_src = {
310 	.cmd_rcgr = 0x06000,
311 	.hid_width = 5,
312 	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
313 	.parent_map = gcc_xo_gpll0_map,
314 	.clkr.hw.init = &(struct clk_init_data) {
315 		.name = "blsp1_qup5_i2c_apps_clk_src",
316 		.parent_data = gcc_xo_gpll0_data,
317 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
318 		.ops = &clk_rcg2_ops,
319 	}
320 };
321 
322 static struct clk_rcg2 blsp1_qup6_i2c_apps_clk_src = {
323 	.cmd_rcgr = 0x07000,
324 	.hid_width = 5,
325 	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
326 	.parent_map = gcc_xo_gpll0_map,
327 	.clkr.hw.init = &(struct clk_init_data) {
328 		.name = "blsp1_qup6_i2c_apps_clk_src",
329 		.parent_data = gcc_xo_gpll0_data,
330 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
331 		.ops = &clk_rcg2_ops,
332 	}
333 };
334 
335 static const struct freq_tbl ftbl_blsp_spi_apps_clk_src[] = {
336 	F(960000, P_XO, 10, 1, 2),
337 	F(4800000, P_XO, 4, 0, 0),
338 	F(9600000, P_XO, 2, 0, 0),
339 	F(16000000, P_GPLL0, 10, 1, 5),
340 	F(19200000, P_XO, 1, 0, 0),
341 	F(25000000, P_GPLL0, 16, 1, 2),
342 	F(50000000, P_GPLL0, 16, 0, 0),
343 	{ }
344 };
345 
346 static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
347 	.cmd_rcgr = 0x02024,
348 	.hid_width = 5,
349 	.mnd_width = 8,
350 	.freq_tbl = ftbl_blsp_spi_apps_clk_src,
351 	.parent_map = gcc_xo_gpll0_map,
352 	.clkr.hw.init = &(struct clk_init_data) {
353 		.name = "blsp1_qup1_spi_apps_clk_src",
354 		.parent_data = gcc_xo_gpll0_data,
355 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
356 		.ops = &clk_rcg2_ops,
357 	}
358 };
359 
360 static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
361 	.cmd_rcgr = 0x03014,
362 	.hid_width = 5,
363 	.mnd_width = 8,
364 	.freq_tbl = ftbl_blsp_spi_apps_clk_src,
365 	.parent_map = gcc_xo_gpll0_map,
366 	.clkr.hw.init = &(struct clk_init_data) {
367 		.name = "blsp1_qup2_spi_apps_clk_src",
368 		.parent_data = gcc_xo_gpll0_data,
369 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
370 		.ops = &clk_rcg2_ops,
371 	}
372 };
373 
374 static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
375 	.cmd_rcgr = 0x04024,
376 	.hid_width = 5,
377 	.mnd_width = 8,
378 	.freq_tbl = ftbl_blsp_spi_apps_clk_src,
379 	.parent_map = gcc_xo_gpll0_map,
380 	.clkr.hw.init = &(struct clk_init_data) {
381 		.name = "blsp1_qup3_spi_apps_clk_src",
382 		.parent_data = gcc_xo_gpll0_data,
383 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
384 		.ops = &clk_rcg2_ops,
385 	}
386 };
387 
388 static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
389 	.cmd_rcgr = 0x05024,
390 	.hid_width = 5,
391 	.mnd_width = 8,
392 	.freq_tbl = ftbl_blsp_spi_apps_clk_src,
393 	.parent_map = gcc_xo_gpll0_map,
394 	.clkr.hw.init = &(struct clk_init_data) {
395 		.name = "blsp1_qup4_spi_apps_clk_src",
396 		.parent_data = gcc_xo_gpll0_data,
397 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
398 		.ops = &clk_rcg2_ops,
399 	}
400 };
401 
402 static struct clk_rcg2 blsp1_qup5_spi_apps_clk_src = {
403 	.cmd_rcgr = 0x06024,
404 	.hid_width = 5,
405 	.mnd_width = 8,
406 	.freq_tbl = ftbl_blsp_spi_apps_clk_src,
407 	.parent_map = gcc_xo_gpll0_map,
408 	.clkr.hw.init = &(struct clk_init_data) {
409 		.name = "blsp1_qup5_spi_apps_clk_src",
410 		.parent_data = gcc_xo_gpll0_data,
411 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
412 		.ops = &clk_rcg2_ops,
413 	}
414 };
415 
416 static struct clk_rcg2 blsp1_qup6_spi_apps_clk_src = {
417 	.cmd_rcgr = 0x07024,
418 	.hid_width = 5,
419 	.mnd_width = 8,
420 	.freq_tbl = ftbl_blsp_spi_apps_clk_src,
421 	.parent_map = gcc_xo_gpll0_map,
422 	.clkr.hw.init = &(struct clk_init_data) {
423 		.name = "blsp1_qup6_spi_apps_clk_src",
424 		.parent_data = gcc_xo_gpll0_data,
425 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
426 		.ops = &clk_rcg2_ops,
427 	}
428 };
429 
430 static const struct freq_tbl ftbl_blsp_uart_apps_clk_src[] = {
431 	F(3686400, P_GPLL0, 1, 72, 15625),
432 	F(7372800, P_GPLL0, 1, 144, 15625),
433 	F(14745600, P_GPLL0, 1, 288, 15625),
434 	F(16000000, P_GPLL0, 10, 1, 5),
435 	F(19200000, P_XO, 1, 0, 0),
436 	F(24000000, P_GPLL0, 1, 3, 100),
437 	F(25000000, P_GPLL0, 16, 1, 2),
438 	F(32000000, P_GPLL0, 1, 1, 25),
439 	F(40000000, P_GPLL0, 1, 1, 20),
440 	F(46400000, P_GPLL0, 1, 29, 500),
441 	F(48000000, P_GPLL0, 1, 3, 50),
442 	F(51200000, P_GPLL0, 1, 8, 125),
443 	F(56000000, P_GPLL0, 1, 7, 100),
444 	F(58982400, P_GPLL0, 1, 1152, 15625),
445 	F(60000000, P_GPLL0, 1, 3, 40),
446 	{ }
447 };
448 
449 static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
450 	.cmd_rcgr = 0x02044,
451 	.hid_width = 5,
452 	.mnd_width = 16,
453 	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
454 	.parent_map = gcc_xo_gpll0_map,
455 	.clkr.hw.init = &(struct clk_init_data) {
456 		.name = "blsp1_uart1_apps_clk_src",
457 		.parent_data = gcc_xo_gpll0_data,
458 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
459 		.ops = &clk_rcg2_ops,
460 	}
461 };
462 
463 static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
464 	.cmd_rcgr = 0x03034,
465 	.hid_width = 5,
466 	.mnd_width = 16,
467 	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
468 	.parent_map = gcc_xo_gpll0_map,
469 	.clkr.hw.init = &(struct clk_init_data) {
470 		.name = "blsp1_uart2_apps_clk_src",
471 		.parent_data = gcc_xo_gpll0_data,
472 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
473 		.ops = &clk_rcg2_ops,
474 	}
475 };
476 
477 static const struct parent_map gcc_byte0_map[] = {
478 	{ P_XO, 0 },
479 	{ P_DSI0PLL_BYTE, 1 },
480 };
481 
482 static const struct clk_parent_data gcc_byte_data[] = {
483 	{ .index = DT_XO },
484 	{ .index = DT_DSI0PLL_BYTE },
485 };
486 
487 static struct clk_rcg2 byte0_clk_src = {
488 	.cmd_rcgr = 0x4d044,
489 	.hid_width = 5,
490 	.parent_map = gcc_byte0_map,
491 	.clkr.hw.init = &(struct clk_init_data) {
492 		.name = "byte0_clk_src",
493 		.parent_data = gcc_byte_data,
494 		.num_parents = ARRAY_SIZE(gcc_byte_data),
495 		.ops = &clk_byte2_ops,
496 		.flags = CLK_SET_RATE_PARENT,
497 	}
498 };
499 
500 static const struct freq_tbl ftbl_camss_gp_clk_src[] = {
501 	F(100000000, P_GPLL0, 8, 0, 0),
502 	F(200000000, P_GPLL0, 4, 0, 0),
503 	{ }
504 };
505 
506 static struct clk_rcg2 camss_gp0_clk_src = {
507 	.cmd_rcgr = 0x54000,
508 	.hid_width = 5,
509 	.mnd_width = 8,
510 	.freq_tbl = ftbl_camss_gp_clk_src,
511 	.parent_map = gcc_xo_gpll0_map,
512 	.clkr.hw.init = &(struct clk_init_data) {
513 		.name = "camss_gp0_clk_src",
514 		.parent_data = gcc_xo_gpll0_data,
515 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
516 		.ops = &clk_rcg2_ops,
517 	}
518 };
519 
520 static struct clk_rcg2 camss_gp1_clk_src = {
521 	.cmd_rcgr = 0x55000,
522 	.hid_width = 5,
523 	.mnd_width = 8,
524 	.freq_tbl = ftbl_camss_gp_clk_src,
525 	.parent_map = gcc_xo_gpll0_map,
526 	.clkr.hw.init = &(struct clk_init_data) {
527 		.name = "camss_gp1_clk_src",
528 		.parent_data = gcc_xo_gpll0_data,
529 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
530 		.ops = &clk_rcg2_ops,
531 	}
532 };
533 
534 static const struct freq_tbl ftbl_camss_top_ahb_clk_src[] = {
535 	F(40000000, P_GPLL0, 10, 1, 2),
536 	F(80000000, P_GPLL0, 10, 0, 0),
537 	{ }
538 };
539 
540 static struct clk_rcg2 camss_top_ahb_clk_src = {
541 	.cmd_rcgr = 0x5a000,
542 	.hid_width = 5,
543 	.mnd_width = 8,
544 	.freq_tbl = ftbl_camss_top_ahb_clk_src,
545 	.parent_map = gcc_xo_gpll0_map,
546 	.clkr.hw.init = &(struct clk_init_data) {
547 		.name = "camss_top_ahb_clk_src",
548 		.parent_data = gcc_xo_gpll0_data,
549 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
550 		.ops = &clk_rcg2_ops,
551 	}
552 };
553 
554 static const struct freq_tbl ftbl_crypto_clk_src[] = {
555 	F(50000000, P_GPLL0, 16, 0, 0),
556 	F(80000000, P_GPLL0, 10, 0, 0),
557 	F(100000000, P_GPLL0, 8, 0, 0),
558 	F(160000000, P_GPLL0, 5, 0, 0),
559 	{ }
560 };
561 
562 static struct clk_rcg2 crypto_clk_src = {
563 	.cmd_rcgr = 0x16004,
564 	.hid_width = 5,
565 	.freq_tbl = ftbl_crypto_clk_src,
566 	.parent_map = gcc_xo_gpll0_map,
567 	.clkr.hw.init = &(struct clk_init_data) {
568 		.name = "crypto_clk_src",
569 		.parent_data = gcc_xo_gpll0_data,
570 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
571 		.ops = &clk_rcg2_ops,
572 	}
573 };
574 
575 static const struct freq_tbl ftbl_csi_clk_src[] = {
576 	F(100000000, P_GPLL0, 8, 0, 0),
577 	F(200000000, P_GPLL0, 4, 0, 0),
578 	{ }
579 };
580 
581 static struct clk_rcg2 csi0_clk_src = {
582 	.cmd_rcgr = 0x4e020,
583 	.hid_width = 5,
584 	.freq_tbl = ftbl_csi_clk_src,
585 	.parent_map = gcc_xo_gpll0_map,
586 	.clkr.hw.init = &(struct clk_init_data) {
587 		.name = "csi0_clk_src",
588 		.parent_data = gcc_xo_gpll0_data,
589 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_map),
590 		.ops = &clk_rcg2_ops,
591 	}
592 };
593 
594 static struct clk_rcg2 csi1_clk_src = {
595 	.cmd_rcgr = 0x4f020,
596 	.hid_width = 5,
597 	.freq_tbl = ftbl_csi_clk_src,
598 	.parent_map = gcc_xo_gpll0_map,
599 	.clkr.hw.init = &(struct clk_init_data) {
600 		.name = "csi1_clk_src",
601 		.parent_data = gcc_xo_gpll0_data,
602 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
603 		.ops = &clk_rcg2_ops,
604 	}
605 };
606 
607 static const struct freq_tbl ftbl_csi_phytimer_clk_src[] = {
608 	F(100000000, P_GPLL0, 8, 0, 0),
609 	F(200000000, P_GPLL0, 4, 0, 0),
610 	{ }
611 };
612 
613 static struct clk_rcg2 csi0phytimer_clk_src = {
614 	.cmd_rcgr = 0x4e000,
615 	.hid_width = 5,
616 	.freq_tbl = ftbl_csi_phytimer_clk_src,
617 	.parent_map = gcc_xo_gpll0_map,
618 	.clkr.hw.init = &(struct clk_init_data) {
619 		.name = "csi0phytimer_clk_src",
620 		.parent_data = gcc_xo_gpll0_data,
621 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
622 		.ops = &clk_rcg2_ops,
623 	}
624 };
625 
626 static const struct freq_tbl ftbl_esc0_clk_src[] = {
627 	F(19200000, P_XO, 1, 0, 0),
628 	{ }
629 };
630 
631 static struct clk_rcg2 esc0_clk_src = {
632 	.cmd_rcgr = 0x4d05c,
633 	.hid_width = 5,
634 	.freq_tbl = ftbl_esc0_clk_src,
635 	.parent_map = gcc_xo_map,
636 	.clkr.hw.init = &(struct clk_init_data) {
637 		.name = "esc0_clk_src",
638 		.parent_data = gcc_xo_data,
639 		.num_parents = ARRAY_SIZE(gcc_xo_data),
640 		.ops = &clk_rcg2_ops,
641 	}
642 };
643 
644 static const struct parent_map gcc_gfx3d_map[] = {
645 	{ P_XO, 0 },
646 	{ P_GPLL0, 1 },
647 	{ P_GPLL1, 2 },
648 };
649 
650 static const struct clk_parent_data gcc_gfx3d_data[] = {
651 	{ .index = DT_XO },
652 	{ .hw = &gpll0.clkr.hw },
653 	{ .hw = &gpll1_vote.hw },
654 };
655 
656 static const struct freq_tbl ftbl_gfx3d_clk_src[] = {
657 	F(19200000, P_XO, 1, 0, 0),
658 	F(50000000, P_GPLL0, 16, 0, 0),
659 	F(80000000, P_GPLL0, 10, 0, 0),
660 	F(100000000, P_GPLL0, 8, 0, 0),
661 	F(160000000, P_GPLL0, 5, 0, 0),
662 	F(177780000, P_GPLL0, 4.5, 0, 0),
663 	F(200000000, P_GPLL0, 4, 0, 0),
664 	F(266670000, P_GPLL0, 3, 0, 0),
665 	F(307200000, P_GPLL1, 4, 0, 0),
666 	F(409600000, P_GPLL1, 3, 0, 0),
667 	{ }
668 };
669 
670 static struct clk_rcg2 gfx3d_clk_src = {
671 	.cmd_rcgr = 0x59000,
672 	.hid_width = 5,
673 	.freq_tbl = ftbl_gfx3d_clk_src,
674 	.parent_map = gcc_gfx3d_map,
675 	.clkr.hw.init = &(struct clk_init_data) {
676 		.name = "gfx3d_clk_src",
677 		.parent_data = gcc_gfx3d_data,
678 		.num_parents = ARRAY_SIZE(gcc_gfx3d_data),
679 		.ops = &clk_rcg2_ops,
680 	}
681 };
682 
683 static const struct freq_tbl ftbl_gp_clk_src[] = {
684 	F(150000, P_XO, 1, 1, 128),
685 	F(19200000, P_XO, 1, 0, 0),
686 	{ }
687 };
688 
689 static struct clk_rcg2 gp1_clk_src = {
690 	.cmd_rcgr = 0x08004,
691 	.hid_width = 5,
692 	.mnd_width = 8,
693 	.freq_tbl = ftbl_gp_clk_src,
694 	.parent_map = gcc_xo_map,
695 	.clkr.hw.init = &(struct clk_init_data) {
696 		.name = "gp1_clk_src",
697 		.parent_data = gcc_xo_data,
698 		.num_parents = ARRAY_SIZE(gcc_xo_data),
699 		.ops = &clk_rcg2_ops,
700 	}
701 };
702 
703 static struct clk_rcg2 gp2_clk_src = {
704 	.cmd_rcgr = 0x09004,
705 	.hid_width = 5,
706 	.mnd_width = 8,
707 	.freq_tbl = ftbl_gp_clk_src,
708 	.parent_map = gcc_xo_map,
709 	.clkr.hw.init = &(struct clk_init_data) {
710 		.name = "gp2_clk_src",
711 		.parent_data = gcc_xo_data,
712 		.num_parents = ARRAY_SIZE(gcc_xo_data),
713 		.ops = &clk_rcg2_ops,
714 	}
715 };
716 
717 static struct clk_rcg2 gp3_clk_src = {
718 	.cmd_rcgr = 0x0a004,
719 	.hid_width = 5,
720 	.mnd_width = 8,
721 	.freq_tbl = ftbl_gp_clk_src,
722 	.parent_map = gcc_xo_map,
723 	.clkr.hw.init = &(struct clk_init_data) {
724 		.name = "gp3_clk_src",
725 		.parent_data = gcc_xo_data,
726 		.num_parents = ARRAY_SIZE(gcc_xo_data),
727 		.ops = &clk_rcg2_ops,
728 	}
729 };
730 
731 static const struct parent_map gcc_mclk_map[] = {
732 	{ P_XO, 0 },
733 	{ P_GPLL0, 1 },
734 	{ P_GPLL2, 3 },
735 };
736 
737 static const struct clk_parent_data gcc_mclk_data[] = {
738 	{ .index = DT_XO },
739 	{ .hw = &gpll0.clkr.hw },
740 	{ .hw = &gpll2.clkr.hw },
741 };
742 
743 static const struct freq_tbl ftbl_mclk_clk_src[] = {
744 	F(24000000, P_GPLL2, 1, 1, 33),
745 	F(66667000, P_GPLL0, 12, 0, 0),
746 	{ }
747 };
748 
749 static struct clk_rcg2 mclk0_clk_src = {
750 	.cmd_rcgr = 0x52000,
751 	.hid_width = 5,
752 	.mnd_width = 8,
753 	.freq_tbl = ftbl_mclk_clk_src,
754 	.parent_map = gcc_mclk_map,
755 	.clkr.hw.init = &(struct clk_init_data) {
756 		.name = "mclk0_clk_src",
757 		.parent_data = gcc_mclk_data,
758 		.num_parents = ARRAY_SIZE(gcc_mclk_data),
759 		.ops = &clk_rcg2_ops,
760 	}
761 };
762 
763 static struct clk_rcg2 mclk1_clk_src = {
764 	.cmd_rcgr = 0x53000,
765 	.hid_width = 5,
766 	.mnd_width = 8,
767 	.freq_tbl = ftbl_mclk_clk_src,
768 	.parent_map = gcc_mclk_map,
769 	.clkr.hw.init = &(struct clk_init_data) {
770 		.name = "mclk1_clk_src",
771 		.parent_data = gcc_mclk_data,
772 		.num_parents = ARRAY_SIZE(gcc_mclk_data),
773 		.ops = &clk_rcg2_ops,
774 	}
775 };
776 
777 static const struct parent_map gcc_mdp_map[] = {
778 	{ P_XO, 0 },
779 	{ P_GPLL0, 1 },
780 	{ P_GPLL1, 3 },
781 };
782 
783 static const struct clk_parent_data gcc_mdp_data[] = {
784 	{ .index = DT_XO },
785 	{ .hw = &gpll0.clkr.hw },
786 	{ .hw = &gpll1_vote.hw },
787 };
788 
789 static const struct freq_tbl ftbl_mdp_clk_src[] = {
790 	F(50000000, P_GPLL0, 16, 0, 0),
791 	F(80000000, P_GPLL0, 10, 0, 0),
792 	F(100000000, P_GPLL0, 8, 0, 0),
793 	F(160000000, P_GPLL0, 5, 0, 0),
794 	F(177780000, P_GPLL0, 4.5, 0, 0),
795 	F(200000000, P_GPLL0, 4, 0, 0),
796 	F(266670000, P_GPLL0, 3, 0, 0),
797 	F(307200000, P_GPLL1, 4, 0, 0),
798 	{ }
799 };
800 
801 static struct clk_rcg2 mdp_clk_src = {
802 	.cmd_rcgr = 0x4d014,
803 	.hid_width = 5,
804 	.freq_tbl = ftbl_mdp_clk_src,
805 	.parent_map = gcc_mdp_map,
806 	.clkr.hw.init = &(struct clk_init_data) {
807 		.name = "mdp_clk_src",
808 		.parent_data = gcc_mdp_data,
809 		.num_parents = ARRAY_SIZE(gcc_mdp_data),
810 		.ops = &clk_rcg2_ops,
811 	}
812 };
813 
814 static const struct parent_map gcc_pclk0_map[] = {
815 	{ P_XO, 0 },
816 	{ P_DSI0PLL, 1 },
817 };
818 
819 static const struct clk_parent_data gcc_pclk_data[] = {
820 	{ .index = DT_XO },
821 	{ .index = DT_DSI0PLL },
822 };
823 
824 static struct clk_rcg2 pclk0_clk_src = {
825 	.cmd_rcgr = 0x4d000,
826 	.hid_width = 5,
827 	.mnd_width = 8,
828 	.parent_map = gcc_pclk0_map,
829 	.clkr.hw.init = &(struct clk_init_data) {
830 		.name = "pclk0_clk_src",
831 		.parent_data = gcc_pclk_data,
832 		.num_parents = ARRAY_SIZE(gcc_pclk_data),
833 		.ops = &clk_pixel_ops,
834 		.flags = CLK_SET_RATE_PARENT,
835 	}
836 };
837 
838 static struct clk_rcg2 pcnoc_bfdcd_clk_src = {
839 	.cmd_rcgr = 0x27000,
840 	.hid_width = 5,
841 	.parent_map = gcc_xo_gpll0_bimc_map,
842 	.clkr.hw.init = &(struct clk_init_data) {
843 		.name = "pcnoc_bfdcd_clk_src",
844 		.parent_data = gcc_xo_gpll0_bimc_data,
845 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_bimc_data),
846 		.ops = &clk_rcg2_ops,
847 	},
848 };
849 
850 static const struct freq_tbl ftbl_pdm2_clk_src[] = {
851 	F(64000000, P_GPLL0, 12.5, 0, 0),
852 	{ }
853 };
854 
855 static struct clk_rcg2 pdm2_clk_src = {
856 	.cmd_rcgr = 0x44010,
857 	.hid_width = 5,
858 	.freq_tbl = ftbl_pdm2_clk_src,
859 	.parent_map = gcc_xo_gpll0_map,
860 	.clkr.hw.init = &(struct clk_init_data) {
861 		.name = "pdm2_clk_src",
862 		.parent_data = gcc_xo_gpll0_data,
863 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
864 		.ops = &clk_rcg2_ops,
865 	}
866 };
867 
868 static const struct freq_tbl ftbl_gcc_sdcc1_2_apps_clk[] = {
869 	F(144000, P_XO, 16, 3, 25),
870 	F(400000, P_XO, 12, 1, 4),
871 	F(20000000, P_GPLL0, 10, 1, 4),
872 	F(25000000, P_GPLL0, 16, 1, 2),
873 	F(50000000, P_GPLL0, 16, 0, 0),
874 	F(100000000, P_GPLL0, 8, 0, 0),
875 	F(177770000, P_GPLL0, 4.5, 0, 0),
876 	F(200000000, P_GPLL0, 4, 0, 0),
877 	{ }
878 };
879 
880 static struct clk_rcg2 sdcc1_apps_clk_src = {
881 	.cmd_rcgr = 0x42004,
882 	.hid_width = 5,
883 	.mnd_width = 8,
884 	.freq_tbl = ftbl_gcc_sdcc1_2_apps_clk,
885 	.parent_map = gcc_xo_gpll0_map,
886 	.clkr.hw.init = &(struct clk_init_data) {
887 		.name = "sdcc1_apps_clk_src",
888 		.parent_data = gcc_xo_gpll0_data,
889 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
890 		.ops = &clk_rcg2_floor_ops,
891 	}
892 };
893 
894 static struct clk_rcg2 sdcc2_apps_clk_src = {
895 	.cmd_rcgr = 0x43004,
896 	.hid_width = 5,
897 	.mnd_width = 8,
898 	.freq_tbl = ftbl_gcc_sdcc1_2_apps_clk,
899 	.parent_map = gcc_xo_gpll0_map,
900 	.clkr.hw.init = &(struct clk_init_data) {
901 		.name = "sdcc2_apps_clk_src",
902 		.parent_data = gcc_xo_gpll0_data,
903 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
904 		.ops = &clk_rcg2_floor_ops,
905 	}
906 };
907 
908 static struct clk_rcg2 system_noc_bfdcd_clk_src = {
909 	.cmd_rcgr = 0x26004,
910 	.hid_width = 5,
911 	.parent_map = gcc_xo_gpll0_bimc_map,
912 	.clkr.hw.init = &(struct clk_init_data) {
913 		.name = "system_noc_bfdcd_clk_src",
914 		.parent_data = gcc_xo_gpll0_bimc_data,
915 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_bimc_data),
916 		.ops = &clk_rcg2_ops,
917 	},
918 };
919 
920 static const struct freq_tbl ftbl_gcc_usb_hs_system_clk[] = {
921 	F(57140000, P_GPLL0, 14, 0, 0),
922 	F(80000000, P_GPLL0, 10, 0, 0),
923 	F(100000000, P_GPLL0, 8, 0, 0),
924 	{ }
925 };
926 
927 static struct clk_rcg2 usb_hs_system_clk_src = {
928 	.cmd_rcgr = 0x41010,
929 	.hid_width = 5,
930 	.freq_tbl = ftbl_gcc_usb_hs_system_clk,
931 	.parent_map = gcc_xo_gpll0_map,
932 	.clkr.hw.init = &(struct clk_init_data) {
933 		.name = "usb_hs_system_clk_src",
934 		.parent_data = gcc_xo_gpll0_data,
935 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
936 		.ops = &clk_rcg2_ops,
937 	}
938 };
939 
940 static const struct parent_map gcc_vcodec0_map[] = {
941 	{ P_XO, 0 },
942 	{ P_GPLL0, 1 },
943 	{ P_GPLL1, 3 },
944 };
945 
946 static const struct clk_parent_data gcc_vcodec0_data[] = {
947 	{ .index = DT_XO },
948 	{ .hw = &gpll0.clkr.hw },
949 	{ .hw = &gpll1_vote.hw },
950 };
951 
952 static const struct freq_tbl ftbl_vcodec0_clk_src[] = {
953 	F(133330000, P_GPLL0, 6, 0, 0),
954 	F(266670000, P_GPLL0, 3, 0, 0),
955 	F(307200000, P_GPLL1, 4, 0, 0),
956 	{ }
957 };
958 
959 static struct clk_rcg2 vcodec0_clk_src = {
960 	.cmd_rcgr = 0x4c000,
961 	.hid_width = 5,
962 	.mnd_width = 8,
963 	.freq_tbl = ftbl_vcodec0_clk_src,
964 	.parent_map = gcc_vcodec0_map,
965 	.clkr.hw.init = &(struct clk_init_data) {
966 		.name = "vcodec0_clk_src",
967 		.parent_data = gcc_vcodec0_data,
968 		.num_parents = ARRAY_SIZE(gcc_vcodec0_data),
969 		.ops = &clk_rcg2_ops,
970 	}
971 };
972 
973 static const struct freq_tbl ftbl_gcc_camss_vfe0_clk[] = {
974 	F(50000000, P_GPLL0, 16, 0, 0),
975 	F(80000000, P_GPLL0, 10, 0, 0),
976 	F(100000000, P_GPLL0, 8, 0, 0),
977 	F(133330000, P_GPLL0, 6, 0, 0),
978 	F(160000000, P_GPLL0, 5, 0, 0),
979 	F(177780000, P_GPLL0, 4.5, 0, 0),
980 	F(200000000, P_GPLL0, 4, 0, 0),
981 	F(266670000, P_GPLL0, 3, 0, 0),
982 	F(320000000, P_GPLL0, 2.5, 0, 0),
983 	{ }
984 };
985 
986 static struct clk_rcg2 vfe0_clk_src = {
987 	.cmd_rcgr = 0x58000,
988 	.hid_width = 5,
989 	.freq_tbl = ftbl_gcc_camss_vfe0_clk,
990 	.parent_map = gcc_xo_gpll0_map,
991 	.clkr.hw.init = &(struct clk_init_data) {
992 		.name = "vfe0_clk_src",
993 		.parent_data = gcc_xo_gpll0_data,
994 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
995 		.ops = &clk_rcg2_ops,
996 	}
997 };
998 
999 static const struct freq_tbl ftbl_vsync_clk_src[] = {
1000 	F(19200000, P_XO, 1, 0, 0),
1001 	{ }
1002 };
1003 
1004 static struct clk_rcg2 vsync_clk_src = {
1005 	.cmd_rcgr = 0x4d02c,
1006 	.hid_width = 5,
1007 	.freq_tbl = ftbl_vsync_clk_src,
1008 	.parent_map = gcc_xo_map,
1009 	.clkr.hw.init = &(struct clk_init_data) {
1010 		.name = "vsync_clk_src",
1011 		.parent_data = gcc_xo_data,
1012 		.num_parents = ARRAY_SIZE(gcc_xo_data),
1013 		.ops = &clk_rcg2_ops,
1014 	}
1015 };
1016 
1017 static struct clk_branch gcc_apss_tcu_clk = {
1018 	.halt_reg = 0x12018,
1019 	.halt_check = BRANCH_HALT_VOTED,
1020 	.clkr = {
1021 		.enable_reg = 0x4500c,
1022 		.enable_mask = BIT(1),
1023 		.hw.init = &(struct clk_init_data) {
1024 			.name = "gcc_apss_tcu_clk",
1025 			.parent_hws = (const struct clk_hw*[]) {
1026 				&bimc_ddr_clk_src.clkr.hw,
1027 			},
1028 			.num_parents = 1,
1029 			.ops = &clk_branch2_ops,
1030 		}
1031 	}
1032 };
1033 
1034 static struct clk_branch gcc_blsp1_ahb_clk = {
1035 	.halt_reg = 0x01008,
1036 	.halt_check = BRANCH_HALT_VOTED,
1037 	.clkr = {
1038 		.enable_reg = 0x45004,
1039 		.enable_mask = BIT(10),
1040 		.hw.init = &(struct clk_init_data) {
1041 			.name = "gcc_blsp1_ahb_clk",
1042 			.parent_hws = (const struct clk_hw*[]) {
1043 				&pcnoc_bfdcd_clk_src.clkr.hw,
1044 			},
1045 			.num_parents = 1,
1046 			.ops = &clk_branch2_ops,
1047 		}
1048 	}
1049 };
1050 
1051 static struct clk_branch gcc_blsp1_sleep_clk = {
1052 	.halt_reg = 0x01004,
1053 	.halt_check = BRANCH_HALT_VOTED,
1054 	.clkr = {
1055 		.enable_reg = 0x45004,
1056 		.enable_mask = BIT(9),
1057 		.hw.init = &(struct clk_init_data) {
1058 			.name = "gcc_blsp1_sleep_clk",
1059 			.parent_data = gcc_sleep_clk_data,
1060 			.num_parents = ARRAY_SIZE(gcc_sleep_clk_data),
1061 			.ops = &clk_branch2_ops,
1062 		}
1063 	}
1064 };
1065 
1066 static struct clk_branch gcc_boot_rom_ahb_clk = {
1067 	.halt_reg = 0x1300c,
1068 	.halt_check = BRANCH_HALT_VOTED,
1069 	.clkr = {
1070 		.enable_reg = 0x45004,
1071 		.enable_mask = BIT(7),
1072 		.hw.init = &(struct clk_init_data) {
1073 			.name = "gcc_boot_rom_ahb_clk",
1074 			.parent_hws = (const struct clk_hw*[]) {
1075 				&pcnoc_bfdcd_clk_src.clkr.hw,
1076 			},
1077 			.num_parents = 1,
1078 			.ops = &clk_branch2_ops,
1079 		}
1080 	}
1081 };
1082 
1083 static struct clk_branch gcc_crypto_clk = {
1084 	.halt_reg = 0x1601c,
1085 	.halt_check = BRANCH_HALT_VOTED,
1086 	.clkr = {
1087 		.enable_reg = 0x45004,
1088 		.enable_mask = BIT(2),
1089 		.hw.init = &(struct clk_init_data) {
1090 			.name = "gcc_crypto_clk",
1091 			.parent_hws = (const struct clk_hw*[]) {
1092 				&crypto_clk_src.clkr.hw,
1093 			},
1094 			.num_parents = 1,
1095 			.ops = &clk_branch2_ops,
1096 			.flags = CLK_SET_RATE_PARENT,
1097 		}
1098 	}
1099 };
1100 
1101 static struct clk_branch gcc_crypto_ahb_clk = {
1102 	.halt_reg = 0x16024,
1103 	.halt_check = BRANCH_HALT_VOTED,
1104 	.clkr = {
1105 		.enable_reg = 0x45004,
1106 		.enable_mask = BIT(0),
1107 		.hw.init = &(struct clk_init_data) {
1108 			.name = "gcc_crypto_ahb_clk",
1109 			.parent_hws = (const struct clk_hw*[]) {
1110 				&pcnoc_bfdcd_clk_src.clkr.hw,
1111 			},
1112 			.num_parents = 1,
1113 			.ops = &clk_branch2_ops,
1114 		}
1115 	}
1116 };
1117 
1118 static struct clk_branch gcc_crypto_axi_clk = {
1119 	.halt_reg = 0x16020,
1120 	.halt_check = BRANCH_HALT_VOTED,
1121 	.clkr = {
1122 		.enable_reg = 0x45004,
1123 		.enable_mask = BIT(1),
1124 		.hw.init = &(struct clk_init_data) {
1125 			.name = "gcc_crypto_axi_clk",
1126 			.parent_hws = (const struct clk_hw*[]) {
1127 				&pcnoc_bfdcd_clk_src.clkr.hw,
1128 			},
1129 			.num_parents = 1,
1130 			.ops = &clk_branch2_ops,
1131 		}
1132 	}
1133 };
1134 
1135 static struct clk_branch gcc_gfx_tbu_clk = {
1136 	.halt_reg = 0x12010,
1137 	.halt_check = BRANCH_HALT_VOTED,
1138 	.clkr = {
1139 		.enable_reg = 0x4500c,
1140 		.enable_mask = BIT(3),
1141 		.hw.init = &(struct clk_init_data) {
1142 			.name = "gcc_gfx_tbu_clk",
1143 			.parent_hws = (const struct clk_hw*[]) {
1144 				&bimc_ddr_clk_src.clkr.hw,
1145 			},
1146 			.num_parents = 1,
1147 			.ops = &clk_branch2_ops,
1148 		}
1149 	}
1150 };
1151 
1152 static struct clk_branch gcc_gfx_tcu_clk = {
1153 	.halt_reg = 0x12020,
1154 	.halt_check = BRANCH_HALT_VOTED,
1155 	.clkr = {
1156 		.enable_reg = 0x4500c,
1157 		.enable_mask = BIT(2),
1158 		.hw.init = &(struct clk_init_data) {
1159 			.name = "gcc_gfx_tcu_clk",
1160 			.parent_hws = (const struct clk_hw*[]) {
1161 				&bimc_ddr_clk_src.clkr.hw,
1162 			},
1163 			.num_parents = 1,
1164 			.ops = &clk_branch2_ops,
1165 		}
1166 	}
1167 };
1168 
1169 static struct clk_branch gcc_gtcu_ahb_clk = {
1170 	.halt_reg = 0x12044,
1171 	.halt_check = BRANCH_HALT_VOTED,
1172 	.clkr = {
1173 		.enable_reg = 0x4500c,
1174 		.enable_mask = BIT(13),
1175 		.hw.init = &(struct clk_init_data) {
1176 			.name = "gcc_gtcu_ahb_clk",
1177 			.parent_hws = (const struct clk_hw*[]) {
1178 				&pcnoc_bfdcd_clk_src.clkr.hw,
1179 			},
1180 			.num_parents = 1,
1181 			.ops = &clk_branch2_ops,
1182 		}
1183 	}
1184 };
1185 
1186 static struct clk_branch gcc_mdp_tbu_clk = {
1187 	.halt_reg = 0x1201c,
1188 	.halt_check = BRANCH_HALT_VOTED,
1189 	.clkr = {
1190 		.enable_reg = 0x4500c,
1191 		.enable_mask = BIT(4),
1192 		.hw.init = &(struct clk_init_data) {
1193 			.name = "gcc_mdp_tbu_clk",
1194 			.parent_hws = (const struct clk_hw*[]) {
1195 				&system_noc_bfdcd_clk_src.clkr.hw,
1196 			},
1197 			.num_parents = 1,
1198 			.ops = &clk_branch2_ops,
1199 		}
1200 	}
1201 };
1202 
1203 static struct clk_branch gcc_prng_ahb_clk = {
1204 	.halt_reg = 0x13004,
1205 	.halt_check = BRANCH_HALT_VOTED,
1206 	.clkr = {
1207 		.enable_reg = 0x45004,
1208 		.enable_mask = BIT(8),
1209 		.hw.init = &(struct clk_init_data) {
1210 			.name = "gcc_prng_ahb_clk",
1211 			.parent_hws = (const struct clk_hw*[]) {
1212 				&pcnoc_bfdcd_clk_src.clkr.hw,
1213 			},
1214 			.num_parents = 1,
1215 			.ops = &clk_branch2_ops,
1216 		}
1217 	}
1218 };
1219 
1220 static struct clk_branch gcc_smmu_cfg_clk = {
1221 	.halt_reg = 0x12038,
1222 	.halt_check = BRANCH_HALT_VOTED,
1223 	.clkr = {
1224 		.enable_reg = 0x4500c,
1225 		.enable_mask = BIT(12),
1226 		.hw.init = &(struct clk_init_data) {
1227 			.name = "gcc_smmu_cfg_clk",
1228 			.parent_hws = (const struct clk_hw*[]) {
1229 				&pcnoc_bfdcd_clk_src.clkr.hw,
1230 			},
1231 			.num_parents = 1,
1232 			.ops = &clk_branch2_ops,
1233 		}
1234 	}
1235 };
1236 
1237 static struct clk_branch gcc_venus_tbu_clk = {
1238 	.halt_reg = 0x12014,
1239 	.halt_check = BRANCH_HALT_VOTED,
1240 	.clkr = {
1241 		.enable_reg = 0x4500c,
1242 		.enable_mask = BIT(5),
1243 		.hw.init = &(struct clk_init_data) {
1244 			.name = "gcc_venus_tbu_clk",
1245 			.parent_hws = (const struct clk_hw*[]) {
1246 				&system_noc_bfdcd_clk_src.clkr.hw,
1247 			},
1248 			.num_parents = 1,
1249 			.ops = &clk_branch2_ops,
1250 		}
1251 	}
1252 };
1253 
1254 static struct clk_branch gcc_vfe_tbu_clk = {
1255 	.halt_reg = 0x1203c,
1256 	.halt_check = BRANCH_HALT_VOTED,
1257 	.clkr = {
1258 		.enable_reg = 0x4500c,
1259 		.enable_mask = BIT(9),
1260 		.hw.init = &(struct clk_init_data) {
1261 			.name = "gcc_vfe_tbu_clk",
1262 			.parent_hws = (const struct clk_hw*[]) {
1263 				&system_noc_bfdcd_clk_src.clkr.hw,
1264 			},
1265 			.num_parents = 1,
1266 			.ops = &clk_branch2_ops,
1267 		}
1268 	}
1269 };
1270 
1271 static struct clk_branch gcc_bimc_gfx_clk = {
1272 	.halt_reg = 0x31024,
1273 	.halt_check = BRANCH_HALT,
1274 	.clkr = {
1275 		.enable_reg = 0x31024,
1276 		.enable_mask = BIT(0),
1277 		.hw.init = &(struct clk_init_data) {
1278 			.name = "gcc_bimc_gfx_clk",
1279 			.parent_hws = (const struct clk_hw*[]) {
1280 				&bimc_gpu_clk_src.clkr.hw,
1281 			},
1282 			.num_parents = 1,
1283 			.ops = &clk_branch2_ops,
1284 		}
1285 	}
1286 };
1287 
1288 static struct clk_branch gcc_bimc_gpu_clk = {
1289 	.halt_reg = 0x31040,
1290 	.halt_check = BRANCH_HALT,
1291 	.clkr = {
1292 		.enable_reg = 0x31040,
1293 		.enable_mask = BIT(0),
1294 		.hw.init = &(struct clk_init_data) {
1295 			.name = "gcc_bimc_gpu_clk",
1296 			.parent_hws = (const struct clk_hw*[]) {
1297 				&bimc_gpu_clk_src.clkr.hw,
1298 			},
1299 			.num_parents = 1,
1300 			.ops = &clk_branch2_ops,
1301 		}
1302 	}
1303 };
1304 
1305 static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
1306 	.halt_reg = 0x02008,
1307 	.halt_check = BRANCH_HALT,
1308 	.clkr = {
1309 		.enable_reg = 0x02008,
1310 		.enable_mask = BIT(0),
1311 		.hw.init = &(struct clk_init_data) {
1312 			.name = "gcc_blsp1_qup1_i2c_apps_clk",
1313 			.parent_hws = (const struct clk_hw*[]) {
1314 				&blsp1_qup1_i2c_apps_clk_src.clkr.hw,
1315 			},
1316 			.num_parents = 1,
1317 			.ops = &clk_branch2_ops,
1318 			.flags = CLK_SET_RATE_PARENT,
1319 		}
1320 	}
1321 };
1322 
1323 static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
1324 	.halt_reg = 0x03010,
1325 	.halt_check = BRANCH_HALT,
1326 	.clkr = {
1327 		.enable_reg = 0x03010,
1328 		.enable_mask = BIT(0),
1329 		.hw.init = &(struct clk_init_data) {
1330 			.name = "gcc_blsp1_qup2_i2c_apps_clk",
1331 			.parent_hws = (const struct clk_hw*[]) {
1332 				&blsp1_qup2_i2c_apps_clk_src.clkr.hw,
1333 			},
1334 			.num_parents = 1,
1335 			.ops = &clk_branch2_ops,
1336 			.flags = CLK_SET_RATE_PARENT,
1337 		}
1338 	}
1339 };
1340 
1341 static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
1342 	.halt_reg = 0x04020,
1343 	.halt_check = BRANCH_HALT,
1344 	.clkr = {
1345 		.enable_reg = 0x04020,
1346 		.enable_mask = BIT(0),
1347 		.hw.init = &(struct clk_init_data) {
1348 			.name = "gcc_blsp1_qup3_i2c_apps_clk",
1349 			.parent_hws = (const struct clk_hw*[]) {
1350 				&blsp1_qup3_i2c_apps_clk_src.clkr.hw,
1351 			},
1352 			.num_parents = 1,
1353 			.ops = &clk_branch2_ops,
1354 			.flags = CLK_SET_RATE_PARENT,
1355 		}
1356 	}
1357 };
1358 
1359 static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
1360 	.halt_reg = 0x05020,
1361 	.halt_check = BRANCH_HALT,
1362 	.clkr = {
1363 		.enable_reg = 0x05020,
1364 		.enable_mask = BIT(0),
1365 		.hw.init = &(struct clk_init_data) {
1366 			.name = "gcc_blsp1_qup4_i2c_apps_clk",
1367 			.parent_hws = (const struct clk_hw*[]) {
1368 				&blsp1_qup4_i2c_apps_clk_src.clkr.hw,
1369 			},
1370 			.num_parents = 1,
1371 			.ops = &clk_branch2_ops,
1372 			.flags = CLK_SET_RATE_PARENT,
1373 		}
1374 	}
1375 };
1376 
1377 static struct clk_branch gcc_blsp1_qup5_i2c_apps_clk = {
1378 	.halt_reg = 0x06020,
1379 	.halt_check = BRANCH_HALT,
1380 	.clkr = {
1381 		.enable_reg = 0x06020,
1382 		.enable_mask = BIT(0),
1383 		.hw.init = &(struct clk_init_data) {
1384 			.name = "gcc_blsp1_qup5_i2c_apps_clk",
1385 			.parent_hws = (const struct clk_hw*[]) {
1386 				&blsp1_qup5_i2c_apps_clk_src.clkr.hw,
1387 			},
1388 			.num_parents = 1,
1389 			.ops = &clk_branch2_ops,
1390 			.flags = CLK_SET_RATE_PARENT,
1391 		}
1392 	}
1393 };
1394 
1395 static struct clk_branch gcc_blsp1_qup6_i2c_apps_clk = {
1396 	.halt_reg = 0x07020,
1397 	.halt_check = BRANCH_HALT,
1398 	.clkr = {
1399 		.enable_reg = 0x07020,
1400 		.enable_mask = BIT(0),
1401 		.hw.init = &(struct clk_init_data) {
1402 			.name = "gcc_blsp1_qup6_i2c_apps_clk",
1403 			.parent_hws = (const struct clk_hw*[]) {
1404 				&blsp1_qup6_i2c_apps_clk_src.clkr.hw,
1405 			},
1406 			.num_parents = 1,
1407 			.ops = &clk_branch2_ops,
1408 			.flags = CLK_SET_RATE_PARENT,
1409 		}
1410 	}
1411 };
1412 
1413 static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
1414 	.halt_reg = 0x02004,
1415 	.halt_check = BRANCH_HALT,
1416 	.clkr = {
1417 		.enable_reg = 0x02004,
1418 		.enable_mask = BIT(0),
1419 		.hw.init = &(struct clk_init_data) {
1420 			.name = "gcc_blsp1_qup1_spi_apps_clk",
1421 			.parent_hws = (const struct clk_hw*[]) {
1422 				&blsp1_qup1_spi_apps_clk_src.clkr.hw,
1423 			},
1424 			.num_parents = 1,
1425 			.ops = &clk_branch2_ops,
1426 			.flags = CLK_SET_RATE_PARENT,
1427 		}
1428 	}
1429 };
1430 
1431 static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
1432 	.halt_reg = 0x0300c,
1433 	.halt_check = BRANCH_HALT,
1434 	.clkr = {
1435 		.enable_reg = 0x0300c,
1436 		.enable_mask = BIT(0),
1437 		.hw.init = &(struct clk_init_data) {
1438 			.name = "gcc_blsp1_qup2_spi_apps_clk",
1439 			.parent_hws = (const struct clk_hw*[]) {
1440 				&blsp1_qup2_spi_apps_clk_src.clkr.hw,
1441 			},
1442 			.num_parents = 1,
1443 			.ops = &clk_branch2_ops,
1444 			.flags = CLK_SET_RATE_PARENT,
1445 		}
1446 	}
1447 };
1448 
1449 static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
1450 	.halt_reg = 0x0401c,
1451 	.halt_check = BRANCH_HALT,
1452 	.clkr = {
1453 		.enable_reg = 0x0401c,
1454 		.enable_mask = BIT(0),
1455 		.hw.init = &(struct clk_init_data) {
1456 			.name = "gcc_blsp1_qup3_spi_apps_clk",
1457 			.parent_hws = (const struct clk_hw*[]) {
1458 				&blsp1_qup3_spi_apps_clk_src.clkr.hw,
1459 			},
1460 			.num_parents = 1,
1461 			.ops = &clk_branch2_ops,
1462 			.flags = CLK_SET_RATE_PARENT,
1463 		}
1464 	}
1465 };
1466 
1467 static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
1468 	.halt_reg = 0x0501c,
1469 	.halt_check = BRANCH_HALT,
1470 	.clkr = {
1471 		.enable_reg = 0x0501c,
1472 		.enable_mask = BIT(0),
1473 		.hw.init = &(struct clk_init_data) {
1474 			.name = "gcc_blsp1_qup4_spi_apps_clk",
1475 			.parent_hws = (const struct clk_hw*[]) {
1476 				&blsp1_qup4_spi_apps_clk_src.clkr.hw,
1477 			},
1478 			.num_parents = 1,
1479 			.ops = &clk_branch2_ops,
1480 			.flags = CLK_SET_RATE_PARENT,
1481 		}
1482 	}
1483 };
1484 
1485 static struct clk_branch gcc_blsp1_qup5_spi_apps_clk = {
1486 	.halt_reg = 0x0601c,
1487 	.halt_check = BRANCH_HALT,
1488 	.clkr = {
1489 		.enable_reg = 0x0601c,
1490 		.enable_mask = BIT(0),
1491 		.hw.init = &(struct clk_init_data) {
1492 			.name = "gcc_blsp1_qup5_spi_apps_clk",
1493 			.parent_hws = (const struct clk_hw*[]) {
1494 				&blsp1_qup5_spi_apps_clk_src.clkr.hw,
1495 			},
1496 			.num_parents = 1,
1497 			.ops = &clk_branch2_ops,
1498 			.flags = CLK_SET_RATE_PARENT,
1499 		}
1500 	}
1501 };
1502 
1503 static struct clk_branch gcc_blsp1_qup6_spi_apps_clk = {
1504 	.halt_reg = 0x0701c,
1505 	.halt_check = BRANCH_HALT,
1506 	.clkr = {
1507 		.enable_reg = 0x0701c,
1508 		.enable_mask = BIT(0),
1509 		.hw.init = &(struct clk_init_data) {
1510 			.name = "gcc_blsp1_qup6_spi_apps_clk",
1511 			.parent_hws = (const struct clk_hw*[]) {
1512 				&blsp1_qup6_spi_apps_clk_src.clkr.hw,
1513 			},
1514 			.num_parents = 1,
1515 			.ops = &clk_branch2_ops,
1516 			.flags = CLK_SET_RATE_PARENT,
1517 		}
1518 	}
1519 };
1520 
1521 static struct clk_branch gcc_blsp1_uart1_apps_clk = {
1522 	.halt_reg = 0x0203c,
1523 	.halt_check = BRANCH_HALT,
1524 	.clkr = {
1525 		.enable_reg = 0x0203c,
1526 		.enable_mask = BIT(0),
1527 		.hw.init = &(struct clk_init_data) {
1528 			.name = "gcc_blsp1_uart1_apps_clk",
1529 			.parent_hws = (const struct clk_hw*[]) {
1530 				&blsp1_uart1_apps_clk_src.clkr.hw,
1531 			},
1532 			.num_parents = 1,
1533 			.ops = &clk_branch2_ops,
1534 			.flags = CLK_SET_RATE_PARENT,
1535 		}
1536 	}
1537 };
1538 
1539 static struct clk_branch gcc_blsp1_uart2_apps_clk = {
1540 	.halt_reg = 0x0302c,
1541 	.halt_check = BRANCH_HALT,
1542 	.clkr = {
1543 		.enable_reg = 0x0302c,
1544 		.enable_mask = BIT(0),
1545 		.hw.init = &(struct clk_init_data) {
1546 			.name = "gcc_blsp1_uart2_apps_clk",
1547 			.parent_hws = (const struct clk_hw*[]) {
1548 				&blsp1_uart2_apps_clk_src.clkr.hw,
1549 			},
1550 			.num_parents = 1,
1551 			.ops = &clk_branch2_ops,
1552 			.flags = CLK_SET_RATE_PARENT,
1553 		}
1554 	}
1555 };
1556 
1557 static struct clk_branch gcc_camss_ahb_clk = {
1558 	.halt_reg = 0x5a014,
1559 	.halt_check = BRANCH_HALT,
1560 	.clkr = {
1561 		.enable_reg = 0x5a014,
1562 		.enable_mask = BIT(0),
1563 		.hw.init = &(struct clk_init_data) {
1564 			.name = "gcc_camss_ahb_clk",
1565 			.parent_hws = (const struct clk_hw*[]) {
1566 				&pcnoc_bfdcd_clk_src.clkr.hw,
1567 			},
1568 			.num_parents = 1,
1569 			.ops = &clk_branch2_ops,
1570 		}
1571 	}
1572 };
1573 
1574 static struct clk_branch gcc_camss_csi0_clk = {
1575 	.halt_reg = 0x4e03c,
1576 	.halt_check = BRANCH_HALT,
1577 	.clkr = {
1578 		.enable_reg = 0x4e03c,
1579 		.enable_mask = BIT(0),
1580 		.hw.init = &(struct clk_init_data) {
1581 			.name = "gcc_camss_csi0_clk",
1582 			.parent_hws = (const struct clk_hw*[]) {
1583 				&csi0_clk_src.clkr.hw,
1584 			},
1585 			.num_parents = 1,
1586 			.ops = &clk_branch2_ops,
1587 			.flags = CLK_SET_RATE_PARENT,
1588 		}
1589 	}
1590 };
1591 
1592 static struct clk_branch gcc_camss_csi0_ahb_clk = {
1593 	.halt_reg = 0x4e040,
1594 	.halt_check = BRANCH_HALT,
1595 	.clkr = {
1596 		.enable_reg = 0x4e040,
1597 		.enable_mask = BIT(0),
1598 		.hw.init = &(struct clk_init_data) {
1599 			.name = "gcc_camss_csi0_ahb_clk",
1600 			.parent_hws = (const struct clk_hw*[]) {
1601 				&camss_top_ahb_clk_src.clkr.hw,
1602 			},
1603 			.num_parents = 1,
1604 			.ops = &clk_branch2_ops,
1605 			.flags = CLK_SET_RATE_PARENT,
1606 		}
1607 	}
1608 };
1609 
1610 static struct clk_branch gcc_camss_csi0phy_clk = {
1611 	.halt_reg = 0x4e048,
1612 	.halt_check = BRANCH_HALT,
1613 	.clkr = {
1614 		.enable_reg = 0x4e048,
1615 		.enable_mask = BIT(0),
1616 		.hw.init = &(struct clk_init_data) {
1617 			.name = "gcc_camss_csi0phy_clk",
1618 			.parent_hws = (const struct clk_hw*[]) {
1619 				&csi0_clk_src.clkr.hw,
1620 			},
1621 			.num_parents = 1,
1622 			.ops = &clk_branch2_ops,
1623 			.flags = CLK_SET_RATE_PARENT,
1624 		}
1625 	}
1626 };
1627 
1628 static struct clk_branch gcc_camss_csi0phytimer_clk = {
1629 	.halt_reg = 0x4e01c,
1630 	.halt_check = BRANCH_HALT,
1631 	.clkr = {
1632 		.enable_reg = 0x4e01c,
1633 		.enable_mask = BIT(0),
1634 		.hw.init = &(struct clk_init_data) {
1635 			.name = "gcc_camss_csi0phytimer_clk",
1636 			.parent_hws = (const struct clk_hw*[]) {
1637 				&csi0phytimer_clk_src.clkr.hw,
1638 			},
1639 			.num_parents = 1,
1640 			.ops = &clk_branch2_ops,
1641 			.flags = CLK_SET_RATE_PARENT,
1642 		}
1643 	}
1644 };
1645 
1646 static struct clk_branch gcc_camss_csi0pix_clk = {
1647 	.halt_reg = 0x4e058,
1648 	.halt_check = BRANCH_HALT,
1649 	.clkr = {
1650 		.enable_reg = 0x4e058,
1651 		.enable_mask = BIT(0),
1652 		.hw.init = &(struct clk_init_data) {
1653 			.name = "gcc_camss_csi0pix_clk",
1654 			.parent_hws = (const struct clk_hw*[]) {
1655 				&csi0_clk_src.clkr.hw,
1656 			},
1657 			.num_parents = 1,
1658 			.ops = &clk_branch2_ops,
1659 			.flags = CLK_SET_RATE_PARENT,
1660 		}
1661 	}
1662 };
1663 
1664 static struct clk_branch gcc_camss_csi0rdi_clk = {
1665 	.halt_reg = 0x4e050,
1666 	.halt_check = BRANCH_HALT,
1667 	.clkr = {
1668 		.enable_reg = 0x4e050,
1669 		.enable_mask = BIT(0),
1670 		.hw.init = &(struct clk_init_data) {
1671 			.name = "gcc_camss_csi0rdi_clk",
1672 			.parent_hws = (const struct clk_hw*[]) {
1673 				&csi0_clk_src.clkr.hw,
1674 			},
1675 			.num_parents = 1,
1676 			.ops = &clk_branch2_ops,
1677 			.flags = CLK_SET_RATE_PARENT,
1678 		}
1679 	}
1680 };
1681 
1682 static struct clk_branch gcc_camss_csi1_clk = {
1683 	.halt_reg = 0x4f03c,
1684 	.halt_check = BRANCH_HALT,
1685 	.clkr = {
1686 		.enable_reg = 0x4f03c,
1687 		.enable_mask = BIT(0),
1688 		.hw.init = &(struct clk_init_data) {
1689 			.name = "gcc_camss_csi1_clk",
1690 			.parent_hws = (const struct clk_hw*[]) {
1691 				&csi1_clk_src.clkr.hw,
1692 			},
1693 			.num_parents = 1,
1694 			.ops = &clk_branch2_ops,
1695 			.flags = CLK_SET_RATE_PARENT,
1696 		}
1697 	}
1698 };
1699 
1700 static struct clk_branch gcc_camss_csi1_ahb_clk = {
1701 	.halt_reg = 0x4f040,
1702 	.halt_check = BRANCH_HALT,
1703 	.clkr = {
1704 		.enable_reg = 0x4f040,
1705 		.enable_mask = BIT(0),
1706 		.hw.init = &(struct clk_init_data) {
1707 			.name = "gcc_camss_csi1_ahb_clk",
1708 			.parent_hws = (const struct clk_hw*[]) {
1709 				&camss_top_ahb_clk_src.clkr.hw,
1710 			},
1711 			.num_parents = 1,
1712 			.ops = &clk_branch2_ops,
1713 			.flags = CLK_SET_RATE_PARENT,
1714 		}
1715 	}
1716 };
1717 
1718 static struct clk_branch gcc_camss_csi1phy_clk = {
1719 	.halt_reg = 0x4f048,
1720 	.halt_check = BRANCH_HALT,
1721 	.clkr = {
1722 		.enable_reg = 0x4f048,
1723 		.enable_mask = BIT(0),
1724 		.hw.init = &(struct clk_init_data) {
1725 			.name = "gcc_camss_csi1phy_clk",
1726 			.parent_hws = (const struct clk_hw*[]) {
1727 				&csi1_clk_src.clkr.hw,
1728 			},
1729 			.num_parents = 1,
1730 			.ops = &clk_branch2_ops,
1731 			.flags = CLK_SET_RATE_PARENT,
1732 		}
1733 	}
1734 };
1735 
1736 static struct clk_branch gcc_camss_csi1pix_clk = {
1737 	.halt_reg = 0x4f058,
1738 	.halt_check = BRANCH_HALT,
1739 	.clkr = {
1740 		.enable_reg = 0x4f058,
1741 		.enable_mask = BIT(0),
1742 		.hw.init = &(struct clk_init_data) {
1743 			.name = "gcc_camss_csi1pix_clk",
1744 			.parent_hws = (const struct clk_hw*[]) {
1745 				&csi1_clk_src.clkr.hw,
1746 			},
1747 			.num_parents = 1,
1748 			.ops = &clk_branch2_ops,
1749 			.flags = CLK_SET_RATE_PARENT,
1750 		}
1751 	}
1752 };
1753 
1754 static struct clk_branch gcc_camss_csi1rdi_clk = {
1755 	.halt_reg = 0x4f050,
1756 	.halt_check = BRANCH_HALT,
1757 	.clkr = {
1758 		.enable_reg = 0x4f050,
1759 		.enable_mask = BIT(0),
1760 		.hw.init = &(struct clk_init_data) {
1761 			.name = "gcc_camss_csi1rdi_clk",
1762 			.parent_hws = (const struct clk_hw*[]) {
1763 				&csi1_clk_src.clkr.hw,
1764 			},
1765 			.num_parents = 1,
1766 			.ops = &clk_branch2_ops,
1767 			.flags = CLK_SET_RATE_PARENT,
1768 		}
1769 	}
1770 };
1771 
1772 static struct clk_branch gcc_camss_csi_vfe0_clk = {
1773 	.halt_reg = 0x58050,
1774 	.halt_check = BRANCH_HALT,
1775 	.clkr = {
1776 		.enable_reg = 0x58050,
1777 		.enable_mask = BIT(0),
1778 		.hw.init = &(struct clk_init_data) {
1779 			.name = "gcc_camss_csi_vfe0_clk",
1780 			.parent_hws = (const struct clk_hw*[]) {
1781 				&vfe0_clk_src.clkr.hw,
1782 			},
1783 			.num_parents = 1,
1784 			.ops = &clk_branch2_ops,
1785 			.flags = CLK_SET_RATE_PARENT,
1786 		}
1787 	}
1788 };
1789 
1790 static struct clk_branch gcc_camss_gp0_clk = {
1791 	.halt_reg = 0x54018,
1792 	.halt_check = BRANCH_HALT,
1793 	.clkr = {
1794 		.enable_reg = 0x54018,
1795 		.enable_mask = BIT(0),
1796 		.hw.init = &(struct clk_init_data) {
1797 			.name = "gcc_camss_gp0_clk",
1798 			.parent_hws = (const struct clk_hw*[]) {
1799 				&camss_gp0_clk_src.clkr.hw,
1800 			},
1801 			.num_parents = 1,
1802 			.ops = &clk_branch2_ops,
1803 			.flags = CLK_SET_RATE_PARENT,
1804 		}
1805 	}
1806 };
1807 
1808 static struct clk_branch gcc_camss_gp1_clk = {
1809 	.halt_reg = 0x55018,
1810 	.halt_check = BRANCH_HALT,
1811 	.clkr = {
1812 		.enable_reg = 0x55018,
1813 		.enable_mask = BIT(0),
1814 		.hw.init = &(struct clk_init_data) {
1815 			.name = "gcc_camss_gp1_clk",
1816 			.parent_hws = (const struct clk_hw*[]) {
1817 				&camss_gp1_clk_src.clkr.hw,
1818 			},
1819 			.num_parents = 1,
1820 			.ops = &clk_branch2_ops,
1821 			.flags = CLK_SET_RATE_PARENT,
1822 		}
1823 	}
1824 };
1825 
1826 static struct clk_branch gcc_camss_ispif_ahb_clk = {
1827 	.halt_reg = 0x50004,
1828 	.halt_check = BRANCH_HALT,
1829 	.clkr = {
1830 		.enable_reg = 0x50004,
1831 		.enable_mask = BIT(0),
1832 		.hw.init = &(struct clk_init_data) {
1833 			.name = "gcc_camss_ispif_ahb_clk",
1834 			.parent_hws = (const struct clk_hw*[]) {
1835 				&camss_top_ahb_clk_src.clkr.hw,
1836 			},
1837 			.num_parents = 1,
1838 			.ops = &clk_branch2_ops,
1839 			.flags = CLK_SET_RATE_PARENT,
1840 		}
1841 	}
1842 };
1843 
1844 static struct clk_branch gcc_camss_mclk0_clk = {
1845 	.halt_reg = 0x52018,
1846 	.halt_check = BRANCH_HALT,
1847 	.clkr = {
1848 		.enable_reg = 0x52018,
1849 		.enable_mask = BIT(0),
1850 		.hw.init = &(struct clk_init_data) {
1851 			.name = "gcc_camss_mclk0_clk",
1852 			.parent_hws = (const struct clk_hw*[]) {
1853 				&mclk0_clk_src.clkr.hw,
1854 			},
1855 			.num_parents = 1,
1856 			.ops = &clk_branch2_ops,
1857 			.flags = CLK_SET_RATE_PARENT,
1858 		}
1859 	}
1860 };
1861 
1862 static struct clk_branch gcc_camss_mclk1_clk = {
1863 	.halt_reg = 0x53018,
1864 	.halt_check = BRANCH_HALT,
1865 	.clkr = {
1866 		.enable_reg = 0x53018,
1867 		.enable_mask = BIT(0),
1868 		.hw.init = &(struct clk_init_data) {
1869 			.name = "gcc_camss_mclk1_clk",
1870 			.parent_hws = (const struct clk_hw*[]) {
1871 				&mclk1_clk_src.clkr.hw,
1872 			},
1873 			.num_parents = 1,
1874 			.ops = &clk_branch2_ops,
1875 			.flags = CLK_SET_RATE_PARENT,
1876 		}
1877 	}
1878 };
1879 
1880 static struct clk_branch gcc_camss_top_ahb_clk = {
1881 	.halt_reg = 0x56004,
1882 	.halt_check = BRANCH_HALT,
1883 	.clkr = {
1884 		.enable_reg = 0x56004,
1885 		.enable_mask = BIT(0),
1886 		.hw.init = &(struct clk_init_data) {
1887 			.name = "gcc_camss_top_ahb_clk",
1888 			.parent_hws = (const struct clk_hw*[]) {
1889 				&camss_top_ahb_clk_src.clkr.hw,
1890 			},
1891 			.num_parents = 1,
1892 			.ops = &clk_branch2_ops,
1893 			.flags = CLK_SET_RATE_PARENT,
1894 		}
1895 	}
1896 };
1897 
1898 static struct clk_branch gcc_camss_vfe0_clk = {
1899 	.halt_reg = 0x58038,
1900 	.halt_check = BRANCH_HALT,
1901 	.clkr = {
1902 		.enable_reg = 0x58038,
1903 		.enable_mask = BIT(0),
1904 		.hw.init = &(struct clk_init_data) {
1905 			.name = "gcc_camss_vfe0_clk",
1906 			.parent_hws = (const struct clk_hw*[]) {
1907 				&vfe0_clk_src.clkr.hw,
1908 			},
1909 			.num_parents = 1,
1910 			.ops = &clk_branch2_ops,
1911 			.flags = CLK_SET_RATE_PARENT,
1912 		}
1913 	}
1914 };
1915 
1916 static struct clk_branch gcc_camss_vfe_ahb_clk = {
1917 	.halt_reg = 0x58044,
1918 	.halt_check = BRANCH_HALT,
1919 	.clkr = {
1920 		.enable_reg = 0x58044,
1921 		.enable_mask = BIT(0),
1922 		.hw.init = &(struct clk_init_data) {
1923 			.name = "gcc_camss_vfe_ahb_clk",
1924 			.parent_hws = (const struct clk_hw*[]) {
1925 				&camss_top_ahb_clk_src.clkr.hw,
1926 			},
1927 			.num_parents = 1,
1928 			.ops = &clk_branch2_ops,
1929 			.flags = CLK_SET_RATE_PARENT,
1930 		}
1931 	}
1932 };
1933 
1934 static struct clk_branch gcc_camss_vfe_axi_clk = {
1935 	.halt_reg = 0x58048,
1936 	.halt_check = BRANCH_HALT,
1937 	.clkr = {
1938 		.enable_reg = 0x58048,
1939 		.enable_mask = BIT(0),
1940 		.hw.init = &(struct clk_init_data) {
1941 			.name = "gcc_camss_vfe_axi_clk",
1942 			.parent_hws = (const struct clk_hw*[]) {
1943 				&system_noc_bfdcd_clk_src.clkr.hw,
1944 			},
1945 			.num_parents = 1,
1946 			.ops = &clk_branch2_ops,
1947 		}
1948 	}
1949 };
1950 
1951 static struct clk_branch gcc_gp1_clk = {
1952 	.halt_reg = 0x08000,
1953 	.halt_check = BRANCH_HALT,
1954 	.clkr = {
1955 		.enable_reg = 0x08000,
1956 		.enable_mask = BIT(0),
1957 		.hw.init = &(struct clk_init_data) {
1958 			.name = "gcc_gp1_clk",
1959 			.parent_hws = (const struct clk_hw*[]) {
1960 				&gp1_clk_src.clkr.hw,
1961 			},
1962 			.num_parents = 1,
1963 			.ops = &clk_branch2_ops,
1964 			.flags = CLK_SET_RATE_PARENT,
1965 		}
1966 	}
1967 };
1968 
1969 static struct clk_branch gcc_gp2_clk = {
1970 	.halt_reg = 0x09000,
1971 	.halt_check = BRANCH_HALT,
1972 	.clkr = {
1973 		.enable_reg = 0x09000,
1974 		.enable_mask = BIT(0),
1975 		.hw.init = &(struct clk_init_data) {
1976 			.name = "gcc_gp2_clk",
1977 			.parent_hws = (const struct clk_hw*[]) {
1978 				&gp2_clk_src.clkr.hw,
1979 			},
1980 			.num_parents = 1,
1981 			.ops = &clk_branch2_ops,
1982 			.flags = CLK_SET_RATE_PARENT,
1983 		}
1984 	}
1985 };
1986 
1987 static struct clk_branch gcc_gp3_clk = {
1988 	.halt_reg = 0x0a000,
1989 	.halt_check = BRANCH_HALT,
1990 	.clkr = {
1991 		.enable_reg = 0x0a000,
1992 		.enable_mask = BIT(0),
1993 		.hw.init = &(struct clk_init_data) {
1994 			.name = "gcc_gp3_clk",
1995 			.parent_hws = (const struct clk_hw*[]) {
1996 				&gp3_clk_src.clkr.hw,
1997 			},
1998 			.num_parents = 1,
1999 			.ops = &clk_branch2_ops,
2000 			.flags = CLK_SET_RATE_PARENT,
2001 		}
2002 	}
2003 };
2004 
2005 static struct clk_branch gcc_mdss_ahb_clk = {
2006 	.halt_reg = 0x4d07c,
2007 	.halt_check = BRANCH_HALT,
2008 	.clkr = {
2009 		.enable_reg = 0x4d07c,
2010 		.enable_mask = BIT(0),
2011 		.hw.init = &(struct clk_init_data) {
2012 			.name = "gcc_mdss_ahb_clk",
2013 			.parent_hws = (const struct clk_hw*[]) {
2014 				&pcnoc_bfdcd_clk_src.clkr.hw,
2015 			},
2016 			.num_parents = 1,
2017 			.ops = &clk_branch2_ops,
2018 		}
2019 	}
2020 };
2021 
2022 static struct clk_branch gcc_mdss_axi_clk = {
2023 	.halt_reg = 0x4d080,
2024 	.halt_check = BRANCH_HALT,
2025 	.clkr = {
2026 		.enable_reg = 0x4d080,
2027 		.enable_mask = BIT(0),
2028 		.hw.init = &(struct clk_init_data) {
2029 			.name = "gcc_mdss_axi_clk",
2030 			.parent_hws = (const struct clk_hw*[]) {
2031 				&system_noc_bfdcd_clk_src.clkr.hw,
2032 			},
2033 			.num_parents = 1,
2034 			.ops = &clk_branch2_ops,
2035 		}
2036 	}
2037 };
2038 
2039 static struct clk_branch gcc_mdss_byte0_clk = {
2040 	.halt_reg = 0x4d094,
2041 	.halt_check = BRANCH_HALT,
2042 	.clkr = {
2043 		.enable_reg = 0x4d094,
2044 		.enable_mask = BIT(0),
2045 		.hw.init = &(struct clk_init_data) {
2046 			.name = "gcc_mdss_byte0_clk",
2047 			.parent_hws = (const struct clk_hw*[]) {
2048 				&byte0_clk_src.clkr.hw,
2049 			},
2050 			.num_parents = 1,
2051 			.ops = &clk_branch2_ops,
2052 			.flags = CLK_SET_RATE_PARENT,
2053 		}
2054 	}
2055 };
2056 
2057 static struct clk_branch gcc_mdss_esc0_clk = {
2058 	.halt_reg = 0x4d098,
2059 	.halt_check = BRANCH_HALT,
2060 	.clkr = {
2061 		.enable_reg = 0x4d098,
2062 		.enable_mask = BIT(0),
2063 		.hw.init = &(struct clk_init_data) {
2064 			.name = "gcc_mdss_esc0_clk",
2065 			.parent_hws = (const struct clk_hw*[]) {
2066 				&esc0_clk_src.clkr.hw,
2067 			},
2068 			.num_parents = 1,
2069 			.ops = &clk_branch2_ops,
2070 			.flags = CLK_SET_RATE_PARENT,
2071 		}
2072 	}
2073 };
2074 
2075 static struct clk_branch gcc_mdss_mdp_clk = {
2076 	.halt_reg = 0x4d088,
2077 	.halt_check = BRANCH_HALT,
2078 	.clkr = {
2079 		.enable_reg = 0x4d088,
2080 		.enable_mask = BIT(0),
2081 		.hw.init = &(struct clk_init_data) {
2082 			.name = "gcc_mdss_mdp_clk",
2083 			.parent_hws = (const struct clk_hw*[]) {
2084 				&mdp_clk_src.clkr.hw,
2085 			},
2086 			.num_parents = 1,
2087 			.ops = &clk_branch2_ops,
2088 			.flags = CLK_SET_RATE_PARENT,
2089 		}
2090 	}
2091 };
2092 
2093 static struct clk_branch gcc_mdss_pclk0_clk = {
2094 	.halt_reg = 0x4d084,
2095 	.halt_check = BRANCH_HALT,
2096 	.clkr = {
2097 		.enable_reg = 0x4d084,
2098 		.enable_mask = BIT(0),
2099 		.hw.init = &(struct clk_init_data) {
2100 			.name = "gcc_mdss_pclk0_clk",
2101 			.parent_hws = (const struct clk_hw*[]) {
2102 				&pclk0_clk_src.clkr.hw,
2103 			},
2104 			.num_parents = 1,
2105 			.ops = &clk_branch2_ops,
2106 			.flags = CLK_SET_RATE_PARENT,
2107 		}
2108 	}
2109 };
2110 
2111 static struct clk_branch gcc_mdss_vsync_clk = {
2112 	.halt_reg = 0x4d090,
2113 	.halt_check = BRANCH_HALT,
2114 	.clkr = {
2115 		.enable_reg = 0x4d090,
2116 		.enable_mask = BIT(0),
2117 		.hw.init = &(struct clk_init_data) {
2118 			.name = "gcc_mdss_vsync_clk",
2119 			.parent_hws = (const struct clk_hw*[]) {
2120 				&vsync_clk_src.clkr.hw,
2121 			},
2122 			.num_parents = 1,
2123 			.ops = &clk_branch2_ops,
2124 			.flags = CLK_SET_RATE_PARENT,
2125 		}
2126 	}
2127 };
2128 
2129 static struct clk_branch gcc_mss_cfg_ahb_clk = {
2130 	.halt_reg = 0x49000,
2131 	.halt_check = BRANCH_HALT,
2132 	.clkr = {
2133 		.enable_reg = 0x49000,
2134 		.enable_mask = BIT(0),
2135 		.hw.init = &(struct clk_init_data) {
2136 			.name = "gcc_mss_cfg_ahb_clk",
2137 			.parent_hws = (const struct clk_hw*[]) {
2138 				&pcnoc_bfdcd_clk_src.clkr.hw,
2139 			},
2140 			.num_parents = 1,
2141 			.ops = &clk_branch2_ops,
2142 		}
2143 	}
2144 };
2145 
2146 static struct clk_branch gcc_mss_q6_bimc_axi_clk = {
2147 	.halt_reg = 0x49004,
2148 	.halt_check = BRANCH_HALT,
2149 	.clkr = {
2150 		.enable_reg = 0x49004,
2151 		.enable_mask = BIT(0),
2152 		.hw.init = &(struct clk_init_data) {
2153 			.name = "gcc_mss_q6_bimc_axi_clk",
2154 			.parent_hws = (const struct clk_hw*[]) {
2155 				&bimc_ddr_clk_src.clkr.hw,
2156 			},
2157 			.num_parents = 1,
2158 			.ops = &clk_branch2_ops,
2159 		}
2160 	}
2161 };
2162 
2163 static struct clk_branch gcc_oxili_ahb_clk = {
2164 	.halt_reg = 0x59028,
2165 	.halt_check = BRANCH_HALT,
2166 	.clkr = {
2167 		.enable_reg = 0x59028,
2168 		.enable_mask = BIT(0),
2169 		.hw.init = &(struct clk_init_data) {
2170 			.name = "gcc_oxili_ahb_clk",
2171 			.parent_hws = (const struct clk_hw*[]) {
2172 				&pcnoc_bfdcd_clk_src.clkr.hw,
2173 			},
2174 			.num_parents = 1,
2175 			.ops = &clk_branch2_ops,
2176 		}
2177 	}
2178 };
2179 
2180 static struct clk_branch gcc_oxili_gfx3d_clk = {
2181 	.halt_reg = 0x59020,
2182 	.halt_check = BRANCH_HALT,
2183 	.clkr = {
2184 		.enable_reg = 0x59020,
2185 		.enable_mask = BIT(0),
2186 		.hw.init = &(struct clk_init_data) {
2187 			.name = "gcc_oxili_gfx3d_clk",
2188 			.parent_hws = (const struct clk_hw*[]) {
2189 				&gfx3d_clk_src.clkr.hw,
2190 			},
2191 			.num_parents = 1,
2192 			.ops = &clk_branch2_ops,
2193 			.flags = CLK_SET_RATE_PARENT,
2194 		}
2195 	}
2196 };
2197 
2198 static struct clk_branch gcc_pdm2_clk = {
2199 	.halt_reg = 0x4400c,
2200 	.halt_check = BRANCH_HALT,
2201 	.clkr = {
2202 		.enable_reg = 0x4400c,
2203 		.enable_mask = BIT(0),
2204 		.hw.init = &(struct clk_init_data) {
2205 			.name = "gcc_pdm2_clk",
2206 			.parent_hws = (const struct clk_hw*[]) {
2207 				&pdm2_clk_src.clkr.hw,
2208 			},
2209 			.num_parents = 1,
2210 			.ops = &clk_branch2_ops,
2211 			.flags = CLK_SET_RATE_PARENT,
2212 		}
2213 	}
2214 };
2215 
2216 static struct clk_branch gcc_pdm_ahb_clk = {
2217 	.halt_reg = 0x44004,
2218 	.halt_check = BRANCH_HALT,
2219 	.clkr = {
2220 		.enable_reg = 0x44004,
2221 		.enable_mask = BIT(0),
2222 		.hw.init = &(struct clk_init_data) {
2223 			.name = "gcc_pdm_ahb_clk",
2224 			.parent_hws = (const struct clk_hw*[]) {
2225 				&pcnoc_bfdcd_clk_src.clkr.hw,
2226 			},
2227 			.num_parents = 1,
2228 			.ops = &clk_branch2_ops,
2229 		}
2230 	}
2231 };
2232 
2233 static struct clk_branch gcc_sdcc1_ahb_clk = {
2234 	.halt_reg = 0x4201c,
2235 	.halt_check = BRANCH_HALT,
2236 	.clkr = {
2237 		.enable_reg = 0x4201c,
2238 		.enable_mask = BIT(0),
2239 		.hw.init = &(struct clk_init_data) {
2240 			.name = "gcc_sdcc1_ahb_clk",
2241 			.parent_hws = (const struct clk_hw*[]) {
2242 				&pcnoc_bfdcd_clk_src.clkr.hw,
2243 			},
2244 			.num_parents = 1,
2245 			.ops = &clk_branch2_ops,
2246 		}
2247 	}
2248 };
2249 
2250 static struct clk_branch gcc_sdcc1_apps_clk = {
2251 	.halt_reg = 0x42018,
2252 	.halt_check = BRANCH_HALT,
2253 	.clkr = {
2254 		.enable_reg = 0x42018,
2255 		.enable_mask = BIT(0),
2256 		.hw.init = &(struct clk_init_data) {
2257 			.name = "gcc_sdcc1_apps_clk",
2258 			.parent_hws = (const struct clk_hw*[]) {
2259 				&sdcc1_apps_clk_src.clkr.hw,
2260 			},
2261 			.num_parents = 1,
2262 			.ops = &clk_branch2_ops,
2263 			.flags = CLK_SET_RATE_PARENT,
2264 		}
2265 	}
2266 };
2267 
2268 static struct clk_branch gcc_sdcc2_ahb_clk = {
2269 	.halt_reg = 0x4301c,
2270 	.halt_check = BRANCH_HALT,
2271 	.clkr = {
2272 		.enable_reg = 0x4301c,
2273 		.enable_mask = BIT(0),
2274 		.hw.init = &(struct clk_init_data) {
2275 			.name = "gcc_sdcc2_ahb_clk",
2276 			.parent_hws = (const struct clk_hw*[]) {
2277 				&pcnoc_bfdcd_clk_src.clkr.hw,
2278 			},
2279 			.num_parents = 1,
2280 			.ops = &clk_branch2_ops,
2281 		}
2282 	}
2283 };
2284 
2285 static struct clk_branch gcc_sdcc2_apps_clk = {
2286 	.halt_reg = 0x43018,
2287 	.halt_check = BRANCH_HALT,
2288 	.clkr = {
2289 		.enable_reg = 0x43018,
2290 		.enable_mask = BIT(0),
2291 		.hw.init = &(struct clk_init_data) {
2292 			.name = "gcc_sdcc2_apps_clk",
2293 			.parent_hws = (const struct clk_hw*[]) {
2294 				&sdcc2_apps_clk_src.clkr.hw,
2295 			},
2296 			.num_parents = 1,
2297 			.ops = &clk_branch2_ops,
2298 			.flags = CLK_SET_RATE_PARENT,
2299 		}
2300 	}
2301 };
2302 
2303 static struct clk_branch gcc_usb2a_phy_sleep_clk = {
2304 	.halt_reg = 0x4102c,
2305 	.halt_check = BRANCH_HALT,
2306 	.clkr = {
2307 		.enable_reg = 0x4102c,
2308 		.enable_mask = BIT(0),
2309 		.hw.init = &(struct clk_init_data) {
2310 			.name = "gcc_usb2a_phy_sleep_clk",
2311 			.parent_data = gcc_sleep_clk_data,
2312 			.num_parents = ARRAY_SIZE(gcc_sleep_clk_data),
2313 			.ops = &clk_branch2_ops,
2314 		}
2315 	}
2316 };
2317 
2318 static struct clk_branch gcc_usb_hs_ahb_clk = {
2319 	.halt_reg = 0x41008,
2320 	.halt_check = BRANCH_HALT,
2321 	.clkr = {
2322 		.enable_reg = 0x41008,
2323 		.enable_mask = BIT(0),
2324 		.hw.init = &(struct clk_init_data) {
2325 			.name = "gcc_usb_hs_ahb_clk",
2326 			.parent_hws = (const struct clk_hw*[]) {
2327 				&pcnoc_bfdcd_clk_src.clkr.hw,
2328 			},
2329 			.num_parents = 1,
2330 			.ops = &clk_branch2_ops,
2331 		}
2332 	}
2333 };
2334 
2335 static struct clk_branch gcc_usb_hs_phy_cfg_ahb_clk = {
2336 	.halt_reg = 0x41030,
2337 	.halt_check = BRANCH_HALT,
2338 	.clkr = {
2339 		.enable_reg = 0x41030,
2340 		.enable_mask = BIT(0),
2341 		.hw.init = &(struct clk_init_data) {
2342 			.name = "gcc_usb_hs_phy_cfg_ahb_clk",
2343 			.parent_hws = (const struct clk_hw*[]) {
2344 				&pcnoc_bfdcd_clk_src.clkr.hw,
2345 			},
2346 			.num_parents = 1,
2347 			.ops = &clk_branch2_ops,
2348 		}
2349 	}
2350 };
2351 
2352 static struct clk_branch gcc_usb_hs_system_clk = {
2353 	.halt_reg = 0x41004,
2354 	.halt_check = BRANCH_HALT,
2355 	.clkr = {
2356 		.enable_reg = 0x41004,
2357 		.enable_mask = BIT(0),
2358 		.hw.init = &(struct clk_init_data) {
2359 			.name = "gcc_usb_hs_system_clk",
2360 			.parent_hws = (const struct clk_hw*[]) {
2361 				&usb_hs_system_clk_src.clkr.hw,
2362 			},
2363 			.num_parents = 1,
2364 			.ops = &clk_branch2_ops,
2365 			.flags = CLK_SET_RATE_PARENT,
2366 		}
2367 	}
2368 };
2369 
2370 static struct clk_branch gcc_venus0_ahb_clk = {
2371 	.halt_reg = 0x4c020,
2372 	.halt_check = BRANCH_HALT,
2373 	.clkr = {
2374 		.enable_reg = 0x4c020,
2375 		.enable_mask = BIT(0),
2376 		.hw.init = &(struct clk_init_data) {
2377 			.name = "gcc_venus0_ahb_clk",
2378 			.parent_hws = (const struct clk_hw*[]) {
2379 				&pcnoc_bfdcd_clk_src.clkr.hw,
2380 			},
2381 			.num_parents = 1,
2382 			.ops = &clk_branch2_ops,
2383 		}
2384 	}
2385 };
2386 
2387 static struct clk_branch gcc_venus0_axi_clk = {
2388 	.halt_reg = 0x4c024,
2389 	.halt_check = BRANCH_HALT,
2390 	.clkr = {
2391 		.enable_reg = 0x4c024,
2392 		.enable_mask = BIT(0),
2393 		.hw.init = &(struct clk_init_data) {
2394 			.name = "gcc_venus0_axi_clk",
2395 			.parent_hws = (const struct clk_hw*[]) {
2396 				&system_noc_bfdcd_clk_src.clkr.hw,
2397 			},
2398 			.num_parents = 1,
2399 			.ops = &clk_branch2_ops,
2400 		}
2401 	}
2402 };
2403 
2404 static struct clk_branch gcc_venus0_core0_vcodec0_clk = {
2405 	.halt_reg = 0x4c02c,
2406 	.halt_check = BRANCH_HALT,
2407 	.clkr = {
2408 		.enable_reg = 0x4c02c,
2409 		.enable_mask = BIT(0),
2410 		.hw.init = &(struct clk_init_data) {
2411 			.name = "gcc_venus0_core0_vcodec0_clk",
2412 			.parent_hws = (const struct clk_hw*[]) {
2413 				&vcodec0_clk_src.clkr.hw,
2414 			},
2415 			.num_parents = 1,
2416 			.ops = &clk_branch2_ops,
2417 			.flags = CLK_SET_RATE_PARENT,
2418 		}
2419 	}
2420 };
2421 
2422 static struct clk_branch gcc_venus0_vcodec0_clk = {
2423 	.halt_reg = 0x4c01c,
2424 	.halt_check = BRANCH_HALT,
2425 	.clkr = {
2426 		.enable_reg = 0x4c01c,
2427 		.enable_mask = BIT(0),
2428 		.hw.init = &(struct clk_init_data) {
2429 			.name = "gcc_venus0_vcodec0_clk",
2430 			.parent_hws = (const struct clk_hw*[]) {
2431 				&vcodec0_clk_src.clkr.hw,
2432 			},
2433 			.num_parents = 1,
2434 			.ops = &clk_branch2_ops,
2435 			.flags = CLK_SET_RATE_PARENT,
2436 		}
2437 	}
2438 };
2439 
2440 static struct gdsc mdss_gdsc = {
2441 	.gdscr = 0x4d078,
2442 	.cxcs = (unsigned int []) { 0x4d080, 0x4d088 },
2443 	.cxc_count = 2,
2444 	.pd = {
2445 		.name = "mdss_gdsc",
2446 	},
2447 	.pwrsts = PWRSTS_OFF_ON,
2448 };
2449 
2450 static struct gdsc oxili_gdsc = {
2451 	.gdscr = 0x5901c,
2452 	.cxcs = (unsigned int []) { 0x59020 },
2453 	.cxc_count = 1,
2454 	.pd = {
2455 		.name = "oxili_gdsc",
2456 	},
2457 	.pwrsts = PWRSTS_OFF_ON,
2458 };
2459 
2460 static struct gdsc venus_gdsc = {
2461 	.gdscr = 0x4c018,
2462 	.cxcs = (unsigned int []) { 0x4c024, 0x4c01c },
2463 	.cxc_count = 2,
2464 	.pd = {
2465 		.name = "venus_gdsc",
2466 	},
2467 	.pwrsts = PWRSTS_OFF_ON,
2468 };
2469 
2470 static struct gdsc venus_core0_gdsc = {
2471 	.gdscr = 0x4c028,
2472 	.cxcs = (unsigned int []) { 0x4c02c },
2473 	.cxc_count = 1,
2474 	.pd = {
2475 		.name = "venus_core0_gdsc",
2476 	},
2477 	.flags = HW_CTRL,
2478 	.pwrsts = PWRSTS_OFF_ON,
2479 };
2480 
2481 static struct gdsc vfe_gdsc = {
2482 	.gdscr = 0x58034,
2483 	.cxcs = (unsigned int []) { 0x58038, 0x58048, 0x58050 },
2484 	.cxc_count = 3,
2485 	.pd = {
2486 		.name = "vfe_gdsc",
2487 	},
2488 	.pwrsts = PWRSTS_OFF_ON,
2489 };
2490 
2491 static struct clk_regmap *gcc_msm8909_clocks[] = {
2492 	[GPLL0_EARLY] = &gpll0_early.clkr,
2493 	[GPLL0] = &gpll0.clkr,
2494 	[GPLL1] = &gpll1.clkr,
2495 	[GPLL1_VOTE] = &gpll1_vote,
2496 	[GPLL2_EARLY] = &gpll2_early.clkr,
2497 	[GPLL2] = &gpll2.clkr,
2498 	[BIMC_PLL_EARLY] = &bimc_pll_early.clkr,
2499 	[BIMC_PLL] = &bimc_pll.clkr,
2500 	[APSS_AHB_CLK_SRC] = &apss_ahb_clk_src.clkr,
2501 	[BIMC_DDR_CLK_SRC] = &bimc_ddr_clk_src.clkr,
2502 	[BIMC_GPU_CLK_SRC] = &bimc_gpu_clk_src.clkr,
2503 	[BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
2504 	[BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
2505 	[BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
2506 	[BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
2507 	[BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
2508 	[BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
2509 	[BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
2510 	[BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
2511 	[BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr,
2512 	[BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr,
2513 	[BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr,
2514 	[BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr,
2515 	[BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
2516 	[BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
2517 	[BYTE0_CLK_SRC] = &byte0_clk_src.clkr,
2518 	[CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr,
2519 	[CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr,
2520 	[CAMSS_TOP_AHB_CLK_SRC] = &camss_top_ahb_clk_src.clkr,
2521 	[CRYPTO_CLK_SRC] = &crypto_clk_src.clkr,
2522 	[CSI0_CLK_SRC] = &csi0_clk_src.clkr,
2523 	[CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr,
2524 	[CSI1_CLK_SRC] = &csi1_clk_src.clkr,
2525 	[ESC0_CLK_SRC] = &esc0_clk_src.clkr,
2526 	[GFX3D_CLK_SRC] = &gfx3d_clk_src.clkr,
2527 	[GP1_CLK_SRC] = &gp1_clk_src.clkr,
2528 	[GP2_CLK_SRC] = &gp2_clk_src.clkr,
2529 	[GP3_CLK_SRC] = &gp3_clk_src.clkr,
2530 	[MCLK0_CLK_SRC] = &mclk0_clk_src.clkr,
2531 	[MCLK1_CLK_SRC] = &mclk1_clk_src.clkr,
2532 	[MDP_CLK_SRC] = &mdp_clk_src.clkr,
2533 	[PCLK0_CLK_SRC] = &pclk0_clk_src.clkr,
2534 	[PCNOC_BFDCD_CLK_SRC] = &pcnoc_bfdcd_clk_src.clkr,
2535 	[PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
2536 	[SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
2537 	[SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
2538 	[SYSTEM_NOC_BFDCD_CLK_SRC] = &system_noc_bfdcd_clk_src.clkr,
2539 	[USB_HS_SYSTEM_CLK_SRC] = &usb_hs_system_clk_src.clkr,
2540 	[VCODEC0_CLK_SRC] = &vcodec0_clk_src.clkr,
2541 	[VFE0_CLK_SRC] = &vfe0_clk_src.clkr,
2542 	[VSYNC_CLK_SRC] = &vsync_clk_src.clkr,
2543 	[GCC_APSS_TCU_CLK] = &gcc_apss_tcu_clk.clkr,
2544 	[GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
2545 	[GCC_BLSP1_SLEEP_CLK] = &gcc_blsp1_sleep_clk.clkr,
2546 	[GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
2547 	[GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr,
2548 	[GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr,
2549 	[GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr,
2550 	[GCC_GFX_TBU_CLK] = &gcc_gfx_tbu_clk.clkr,
2551 	[GCC_GFX_TCU_CLK] = &gcc_gfx_tcu_clk.clkr,
2552 	[GCC_GTCU_AHB_CLK] = &gcc_gtcu_ahb_clk.clkr,
2553 	[GCC_MDP_TBU_CLK] = &gcc_mdp_tbu_clk.clkr,
2554 	[GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
2555 	[GCC_SMMU_CFG_CLK] = &gcc_smmu_cfg_clk.clkr,
2556 	[GCC_VENUS_TBU_CLK] = &gcc_venus_tbu_clk.clkr,
2557 	[GCC_VFE_TBU_CLK] = &gcc_vfe_tbu_clk.clkr,
2558 	[GCC_BIMC_GFX_CLK] = &gcc_bimc_gfx_clk.clkr,
2559 	[GCC_BIMC_GPU_CLK] = &gcc_bimc_gpu_clk.clkr,
2560 	[GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
2561 	[GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
2562 	[GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
2563 	[GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
2564 	[GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
2565 	[GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
2566 	[GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
2567 	[GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
2568 	[GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr,
2569 	[GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr,
2570 	[GCC_BLSP1_QUP6_I2C_APPS_CLK] = &gcc_blsp1_qup6_i2c_apps_clk.clkr,
2571 	[GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr,
2572 	[GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
2573 	[GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
2574 	[GCC_CAMSS_AHB_CLK] = &gcc_camss_ahb_clk.clkr,
2575 	[GCC_CAMSS_CSI0_CLK] = &gcc_camss_csi0_clk.clkr,
2576 	[GCC_CAMSS_CSI0_AHB_CLK] = &gcc_camss_csi0_ahb_clk.clkr,
2577 	[GCC_CAMSS_CSI0PHY_CLK] = &gcc_camss_csi0phy_clk.clkr,
2578 	[GCC_CAMSS_CSI0PHYTIMER_CLK] = &gcc_camss_csi0phytimer_clk.clkr,
2579 	[GCC_CAMSS_CSI0PIX_CLK] = &gcc_camss_csi0pix_clk.clkr,
2580 	[GCC_CAMSS_CSI0RDI_CLK] = &gcc_camss_csi0rdi_clk.clkr,
2581 	[GCC_CAMSS_CSI1_CLK] = &gcc_camss_csi1_clk.clkr,
2582 	[GCC_CAMSS_CSI1_AHB_CLK] = &gcc_camss_csi1_ahb_clk.clkr,
2583 	[GCC_CAMSS_CSI1PHY_CLK] = &gcc_camss_csi1phy_clk.clkr,
2584 	[GCC_CAMSS_CSI1PIX_CLK] = &gcc_camss_csi1pix_clk.clkr,
2585 	[GCC_CAMSS_CSI1RDI_CLK] = &gcc_camss_csi1rdi_clk.clkr,
2586 	[GCC_CAMSS_CSI_VFE0_CLK] = &gcc_camss_csi_vfe0_clk.clkr,
2587 	[GCC_CAMSS_GP0_CLK] = &gcc_camss_gp0_clk.clkr,
2588 	[GCC_CAMSS_GP1_CLK] = &gcc_camss_gp1_clk.clkr,
2589 	[GCC_CAMSS_ISPIF_AHB_CLK] = &gcc_camss_ispif_ahb_clk.clkr,
2590 	[GCC_CAMSS_MCLK0_CLK] = &gcc_camss_mclk0_clk.clkr,
2591 	[GCC_CAMSS_MCLK1_CLK] = &gcc_camss_mclk1_clk.clkr,
2592 	[GCC_CAMSS_TOP_AHB_CLK] = &gcc_camss_top_ahb_clk.clkr,
2593 	[GCC_CAMSS_VFE0_CLK] = &gcc_camss_vfe0_clk.clkr,
2594 	[GCC_CAMSS_VFE_AHB_CLK] = &gcc_camss_vfe_ahb_clk.clkr,
2595 	[GCC_CAMSS_VFE_AXI_CLK] = &gcc_camss_vfe_axi_clk.clkr,
2596 	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
2597 	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
2598 	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
2599 	[GCC_MDSS_AHB_CLK] = &gcc_mdss_ahb_clk.clkr,
2600 	[GCC_MDSS_AXI_CLK] = &gcc_mdss_axi_clk.clkr,
2601 	[GCC_MDSS_BYTE0_CLK] = &gcc_mdss_byte0_clk.clkr,
2602 	[GCC_MDSS_ESC0_CLK] = &gcc_mdss_esc0_clk.clkr,
2603 	[GCC_MDSS_MDP_CLK] = &gcc_mdss_mdp_clk.clkr,
2604 	[GCC_MDSS_PCLK0_CLK] = &gcc_mdss_pclk0_clk.clkr,
2605 	[GCC_MDSS_VSYNC_CLK] = &gcc_mdss_vsync_clk.clkr,
2606 	[GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,
2607 	[GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr,
2608 	[GCC_OXILI_AHB_CLK] = &gcc_oxili_ahb_clk.clkr,
2609 	[GCC_OXILI_GFX3D_CLK] = &gcc_oxili_gfx3d_clk.clkr,
2610 	[GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
2611 	[GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
2612 	[GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
2613 	[GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
2614 	[GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
2615 	[GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
2616 	[GCC_USB2A_PHY_SLEEP_CLK] = &gcc_usb2a_phy_sleep_clk.clkr,
2617 	[GCC_USB_HS_AHB_CLK] = &gcc_usb_hs_ahb_clk.clkr,
2618 	[GCC_USB_HS_PHY_CFG_AHB_CLK] = &gcc_usb_hs_phy_cfg_ahb_clk.clkr,
2619 	[GCC_USB_HS_SYSTEM_CLK] = &gcc_usb_hs_system_clk.clkr,
2620 	[GCC_VENUS0_AHB_CLK] = &gcc_venus0_ahb_clk.clkr,
2621 	[GCC_VENUS0_AXI_CLK] = &gcc_venus0_axi_clk.clkr,
2622 	[GCC_VENUS0_CORE0_VCODEC0_CLK] = &gcc_venus0_core0_vcodec0_clk.clkr,
2623 	[GCC_VENUS0_VCODEC0_CLK] = &gcc_venus0_vcodec0_clk.clkr,
2624 };
2625 
2626 static struct gdsc *gcc_msm8909_gdscs[] = {
2627 	[MDSS_GDSC] = &mdss_gdsc,
2628 	[OXILI_GDSC] = &oxili_gdsc,
2629 	[VENUS_GDSC] = &venus_gdsc,
2630 	[VENUS_CORE0_GDSC] = &venus_core0_gdsc,
2631 	[VFE_GDSC] = &vfe_gdsc,
2632 };
2633 
2634 static const struct qcom_reset_map gcc_msm8909_resets[] = {
2635 	[GCC_AUDIO_CORE_BCR] = { 0x1c008 },
2636 	[GCC_BLSP1_BCR] = { 0x01000 },
2637 	[GCC_BLSP1_QUP1_BCR] = { 0x02000 },
2638 	[GCC_BLSP1_QUP2_BCR] = { 0x03008 },
2639 	[GCC_BLSP1_QUP3_BCR] = { 0x04018 },
2640 	[GCC_BLSP1_QUP4_BCR] = { 0x05018 },
2641 	[GCC_BLSP1_QUP5_BCR] = { 0x06018 },
2642 	[GCC_BLSP1_QUP6_BCR] = { 0x07018 },
2643 	[GCC_BLSP1_UART1_BCR] = { 0x02038 },
2644 	[GCC_BLSP1_UART2_BCR] = { 0x03028 },
2645 	[GCC_CAMSS_CSI0_BCR] = { 0x4e038 },
2646 	[GCC_CAMSS_CSI0PHY_BCR] = { 0x4e044 },
2647 	[GCC_CAMSS_CSI0PIX_BCR] = { 0x4e054 },
2648 	[GCC_CAMSS_CSI0RDI_BCR] = { 0x4e04c },
2649 	[GCC_CAMSS_CSI1_BCR] = { 0x4f038 },
2650 	[GCC_CAMSS_CSI1PHY_BCR] = { 0x4f044 },
2651 	[GCC_CAMSS_CSI1PIX_BCR] = { 0x4f054 },
2652 	[GCC_CAMSS_CSI1RDI_BCR] = { 0x4f04c },
2653 	[GCC_CAMSS_CSI_VFE0_BCR] = { 0x5804c },
2654 	[GCC_CAMSS_GP0_BCR] = { 0x54014 },
2655 	[GCC_CAMSS_GP1_BCR] = { 0x55014 },
2656 	[GCC_CAMSS_ISPIF_BCR] = { 0x50000 },
2657 	[GCC_CAMSS_MCLK0_BCR] = { 0x52014 },
2658 	[GCC_CAMSS_MCLK1_BCR] = { 0x53014 },
2659 	[GCC_CAMSS_PHY0_BCR] = { 0x4e018 },
2660 	[GCC_CAMSS_TOP_BCR] = { 0x56000 },
2661 	[GCC_CAMSS_TOP_AHB_BCR] = { 0x5a018 },
2662 	[GCC_CAMSS_VFE_BCR] = { 0x58030 },
2663 	[GCC_CRYPTO_BCR] = { 0x16000 },
2664 	[GCC_MDSS_BCR] = { 0x4d074 },
2665 	[GCC_OXILI_BCR] = { 0x59018 },
2666 	[GCC_PDM_BCR] = { 0x44000 },
2667 	[GCC_PRNG_BCR] = { 0x13000 },
2668 	[GCC_QUSB2_PHY_BCR] = { 0x4103c },
2669 	[GCC_SDCC1_BCR] = { 0x42000 },
2670 	[GCC_SDCC2_BCR] = { 0x43000 },
2671 	[GCC_ULT_AUDIO_BCR] = { 0x1c0b4 },
2672 	[GCC_USB2A_PHY_BCR] = { 0x41028 },
2673 	[GCC_USB2_HS_PHY_ONLY_BCR] = { .reg = 0x41034, .udelay = 15 },
2674 	[GCC_USB_HS_BCR] = { 0x41000 },
2675 	[GCC_VENUS0_BCR] = { 0x4c014 },
2676 	/* Subsystem Restart */
2677 	[GCC_MSS_RESTART] = { 0x3e000 },
2678 };
2679 
2680 static const struct regmap_config gcc_msm8909_regmap_config = {
2681 	.reg_bits	= 32,
2682 	.reg_stride	= 4,
2683 	.val_bits	= 32,
2684 	.max_register	= 0x80000,
2685 	.fast_io	= true,
2686 };
2687 
2688 static const struct qcom_cc_desc gcc_msm8909_desc = {
2689 	.config = &gcc_msm8909_regmap_config,
2690 	.clks = gcc_msm8909_clocks,
2691 	.num_clks = ARRAY_SIZE(gcc_msm8909_clocks),
2692 	.resets = gcc_msm8909_resets,
2693 	.num_resets = ARRAY_SIZE(gcc_msm8909_resets),
2694 	.gdscs = gcc_msm8909_gdscs,
2695 	.num_gdscs = ARRAY_SIZE(gcc_msm8909_gdscs),
2696 };
2697 
2698 static const struct of_device_id gcc_msm8909_match_table[] = {
2699 	{ .compatible = "qcom,gcc-msm8909" },
2700 	{ }
2701 };
2702 MODULE_DEVICE_TABLE(of, gcc_msm8909_match_table);
2703 
gcc_msm8909_probe(struct platform_device * pdev)2704 static int gcc_msm8909_probe(struct platform_device *pdev)
2705 {
2706 	return qcom_cc_probe(pdev, &gcc_msm8909_desc);
2707 }
2708 
2709 static struct platform_driver gcc_msm8909_driver = {
2710 	.probe		= gcc_msm8909_probe,
2711 	.driver		= {
2712 		.name	= "gcc-msm8909",
2713 		.of_match_table = gcc_msm8909_match_table,
2714 	},
2715 };
2716 
gcc_msm8909_init(void)2717 static int __init gcc_msm8909_init(void)
2718 {
2719 	return platform_driver_register(&gcc_msm8909_driver);
2720 }
2721 core_initcall(gcc_msm8909_init);
2722 
gcc_msm8909_exit(void)2723 static void __exit gcc_msm8909_exit(void)
2724 {
2725 	platform_driver_unregister(&gcc_msm8909_driver);
2726 }
2727 module_exit(gcc_msm8909_exit);
2728 
2729 MODULE_DESCRIPTION("Qualcomm GCC MSM8909 Driver");
2730 MODULE_LICENSE("GPL");
2731 MODULE_ALIAS("platform:gcc-msm8909");
2732