1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * Copyright 2020 Linaro Limited
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/clk-provider.h>
13#include <linux/regmap.h>
14#include <linux/reset-controller.h>
15
16#include <dt-bindings/clock/qcom,gcc-msm8939.h>
17#include <dt-bindings/reset/qcom,gcc-msm8939.h>
18
19#include "common.h"
20#include "clk-regmap.h"
21#include "clk-pll.h"
22#include "clk-rcg.h"
23#include "clk-branch.h"
24#include "reset.h"
25#include "gdsc.h"
26
27enum {
28	P_XO,
29	P_GPLL0,
30	P_GPLL0_AUX,
31	P_BIMC,
32	P_GPLL1,
33	P_GPLL1_AUX,
34	P_GPLL2,
35	P_GPLL2_AUX,
36	P_GPLL3,
37	P_GPLL3_AUX,
38	P_GPLL4,
39	P_GPLL5,
40	P_GPLL5_AUX,
41	P_GPLL5_EARLY,
42	P_GPLL6,
43	P_GPLL6_AUX,
44	P_SLEEP_CLK,
45	P_DSI0_PHYPLL_BYTE,
46	P_DSI0_PHYPLL_DSI,
47	P_EXT_PRI_I2S,
48	P_EXT_SEC_I2S,
49	P_EXT_MCLK,
50};
51
52static struct clk_pll gpll0 = {
53	.l_reg = 0x21004,
54	.m_reg = 0x21008,
55	.n_reg = 0x2100c,
56	.config_reg = 0x21010,
57	.mode_reg = 0x21000,
58	.status_reg = 0x2101c,
59	.status_bit = 17,
60	.clkr.hw.init = &(struct clk_init_data){
61		.name = "gpll0",
62		.parent_data = &(const struct clk_parent_data) {
63			.fw_name = "xo",
64		},
65		.num_parents = 1,
66		.ops = &clk_pll_ops,
67	},
68};
69
70static struct clk_regmap gpll0_vote = {
71	.enable_reg = 0x45000,
72	.enable_mask = BIT(0),
73	.hw.init = &(struct clk_init_data){
74		.name = "gpll0_vote",
75		.parent_hws = (const struct clk_hw*[]) {
76			&gpll0.clkr.hw,
77		},
78		.num_parents = 1,
79		.ops = &clk_pll_vote_ops,
80	},
81};
82
83static struct clk_pll gpll1 = {
84	.l_reg = 0x20004,
85	.m_reg = 0x20008,
86	.n_reg = 0x2000c,
87	.config_reg = 0x20010,
88	.mode_reg = 0x20000,
89	.status_reg = 0x2001c,
90	.status_bit = 17,
91	.clkr.hw.init = &(struct clk_init_data){
92		.name = "gpll1",
93		.parent_data = &(const struct clk_parent_data) {
94			.fw_name = "xo",
95		},
96		.num_parents = 1,
97		.ops = &clk_pll_ops,
98	},
99};
100
101static struct clk_regmap gpll1_vote = {
102	.enable_reg = 0x45000,
103	.enable_mask = BIT(1),
104	.hw.init = &(struct clk_init_data){
105		.name = "gpll1_vote",
106		.parent_hws = (const struct clk_hw*[]) {
107			&gpll1.clkr.hw,
108		},
109		.num_parents = 1,
110		.ops = &clk_pll_vote_ops,
111	},
112};
113
114static struct clk_pll gpll2 = {
115	.l_reg = 0x4a004,
116	.m_reg = 0x4a008,
117	.n_reg = 0x4a00c,
118	.config_reg = 0x4a010,
119	.mode_reg = 0x4a000,
120	.status_reg = 0x4a01c,
121	.status_bit = 17,
122	.clkr.hw.init = &(struct clk_init_data){
123		.name = "gpll2",
124		.parent_data = &(const struct clk_parent_data) {
125			.fw_name = "xo",
126		},
127		.num_parents = 1,
128		.ops = &clk_pll_ops,
129	},
130};
131
132static struct clk_regmap gpll2_vote = {
133	.enable_reg = 0x45000,
134	.enable_mask = BIT(2),
135	.hw.init = &(struct clk_init_data){
136		.name = "gpll2_vote",
137		.parent_hws = (const struct clk_hw*[]) {
138			&gpll2.clkr.hw,
139		},
140		.num_parents = 1,
141		.ops = &clk_pll_vote_ops,
142	},
143};
144
145static struct clk_pll bimc_pll = {
146	.l_reg = 0x23004,
147	.m_reg = 0x23008,
148	.n_reg = 0x2300c,
149	.config_reg = 0x23010,
150	.mode_reg = 0x23000,
151	.status_reg = 0x2301c,
152	.status_bit = 17,
153	.clkr.hw.init = &(struct clk_init_data){
154		.name = "bimc_pll",
155		.parent_data = &(const struct clk_parent_data) {
156			.fw_name = "xo",
157		},
158		.num_parents = 1,
159		.ops = &clk_pll_ops,
160	},
161};
162
163static struct clk_regmap bimc_pll_vote = {
164	.enable_reg = 0x45000,
165	.enable_mask = BIT(3),
166	.hw.init = &(struct clk_init_data){
167		.name = "bimc_pll_vote",
168		.parent_hws = (const struct clk_hw*[]) {
169			&bimc_pll.clkr.hw,
170		},
171		.num_parents = 1,
172		.ops = &clk_pll_vote_ops,
173	},
174};
175
176static struct clk_pll gpll3 = {
177	.l_reg = 0x22004,
178	.m_reg = 0x22008,
179	.n_reg = 0x2200c,
180	.config_reg = 0x22010,
181	.mode_reg = 0x22000,
182	.status_reg = 0x2201c,
183	.status_bit = 17,
184	.clkr.hw.init = &(struct clk_init_data){
185		.name = "gpll3",
186		.parent_data = &(const struct clk_parent_data) {
187			.fw_name = "xo",
188		},
189		.num_parents = 1,
190		.ops = &clk_pll_ops,
191	},
192};
193
194static struct clk_regmap gpll3_vote = {
195	.enable_reg = 0x45000,
196	.enable_mask = BIT(4),
197	.hw.init = &(struct clk_init_data){
198		.name = "gpll3_vote",
199		.parent_hws = (const struct clk_hw*[]) {
200			&gpll3.clkr.hw,
201		},
202		.num_parents = 1,
203		.ops = &clk_pll_vote_ops,
204	},
205};
206
207/* GPLL3 at 1100 MHz, main output enabled. */
208static const struct pll_config gpll3_config = {
209	.l = 57,
210	.m = 7,
211	.n = 24,
212	.vco_val = 0x0,
213	.vco_mask = BIT(20),
214	.pre_div_val = 0x0,
215	.pre_div_mask = BIT(12),
216	.post_div_val = 0x0,
217	.post_div_mask = BIT(9) | BIT(8),
218	.mn_ena_mask = BIT(24),
219	.main_output_mask = BIT(0),
220	.aux_output_mask = BIT(1),
221};
222
223static struct clk_pll gpll4 = {
224	.l_reg = 0x24004,
225	.m_reg = 0x24008,
226	.n_reg = 0x2400c,
227	.config_reg = 0x24010,
228	.mode_reg = 0x24000,
229	.status_reg = 0x2401c,
230	.status_bit = 17,
231	.clkr.hw.init = &(struct clk_init_data){
232		.name = "gpll4",
233		.parent_data = &(const struct clk_parent_data) {
234			.fw_name = "xo",
235		},
236		.num_parents = 1,
237		.ops = &clk_pll_ops,
238	},
239};
240
241static struct clk_regmap gpll4_vote = {
242	.enable_reg = 0x45000,
243	.enable_mask = BIT(5),
244	.hw.init = &(struct clk_init_data){
245		.name = "gpll4_vote",
246		.parent_hws = (const struct clk_hw*[]) {
247			&gpll4.clkr.hw,
248		},
249		.num_parents = 1,
250		.ops = &clk_pll_vote_ops,
251	},
252};
253
254/* GPLL4 at 1200 MHz, main output enabled. */
255static struct pll_config gpll4_config = {
256	.l = 62,
257	.m = 1,
258	.n = 2,
259	.vco_val = 0x0,
260	.vco_mask = BIT(20),
261	.pre_div_val = 0x0,
262	.pre_div_mask = BIT(12),
263	.post_div_val = 0x0,
264	.post_div_mask = BIT(9) | BIT(8),
265	.mn_ena_mask = BIT(24),
266	.main_output_mask = BIT(0),
267};
268
269static struct clk_pll gpll5 = {
270	.l_reg = 0x25004,
271	.m_reg = 0x25008,
272	.n_reg = 0x2500c,
273	.config_reg = 0x25010,
274	.mode_reg = 0x25000,
275	.status_reg = 0x2501c,
276	.status_bit = 17,
277	.clkr.hw.init = &(struct clk_init_data){
278		.name = "gpll5",
279		.parent_data = &(const struct clk_parent_data) {
280			.fw_name = "xo",
281		},
282		.num_parents = 1,
283		.ops = &clk_pll_ops,
284	},
285};
286
287static struct clk_regmap gpll5_vote = {
288	.enable_reg = 0x45000,
289	.enable_mask = BIT(6),
290	.hw.init = &(struct clk_init_data){
291		.name = "gpll5_vote",
292		.parent_hws = (const struct clk_hw*[]) {
293			&gpll5.clkr.hw,
294		},
295		.num_parents = 1,
296		.ops = &clk_pll_vote_ops,
297	},
298};
299
300static struct clk_pll gpll6 = {
301	.l_reg = 0x37004,
302	.m_reg = 0x37008,
303	.n_reg = 0x3700c,
304	.config_reg = 0x37010,
305	.mode_reg = 0x37000,
306	.status_reg = 0x3701c,
307	.status_bit = 17,
308	.clkr.hw.init = &(struct clk_init_data){
309		.name = "gpll6",
310		.parent_data = &(const struct clk_parent_data) {
311			.fw_name = "xo",
312		},
313		.num_parents = 1,
314		.ops = &clk_pll_ops,
315	},
316};
317
318static struct clk_regmap gpll6_vote = {
319	.enable_reg = 0x45000,
320	.enable_mask = BIT(7),
321	.hw.init = &(struct clk_init_data){
322		.name = "gpll6_vote",
323		.parent_hws = (const struct clk_hw*[]) {
324			&gpll6.clkr.hw,
325		},
326		.num_parents = 1,
327		.ops = &clk_pll_vote_ops,
328	},
329};
330
331static const struct parent_map gcc_xo_gpll0_map[] = {
332	{ P_XO, 0 },
333	{ P_GPLL0, 1 },
334};
335
336static const struct clk_parent_data gcc_xo_gpll0_parent_data[] = {
337	{ .fw_name = "xo" },
338	{ .hw = &gpll0_vote.hw },
339};
340
341static const struct parent_map gcc_xo_gpll0_bimc_map[] = {
342	{ P_XO, 0 },
343	{ P_GPLL0, 1 },
344	{ P_BIMC, 2 },
345};
346
347static const struct clk_parent_data gcc_xo_gpll0_bimc_parent_data[] = {
348	{ .fw_name = "xo" },
349	{ .hw = &gpll0_vote.hw },
350	{ .hw = &bimc_pll_vote.hw },
351};
352
353static const struct parent_map gcc_xo_gpll0_gpll6a_map[] = {
354	{ P_XO, 0 },
355	{ P_GPLL0, 1 },
356	{ P_GPLL6_AUX, 2 },
357};
358
359static const struct clk_parent_data gcc_xo_gpll0_gpll6a_parent_data[] = {
360	{ .fw_name = "xo" },
361	{ .hw = &gpll0_vote.hw },
362	{ .hw = &gpll6_vote.hw },
363};
364
365static const struct parent_map gcc_xo_gpll0_gpll2a_gpll3_gpll6a_map[] = {
366	{ P_XO, 0 },
367	{ P_GPLL0, 1 },
368	{ P_GPLL2_AUX, 4 },
369	{ P_GPLL3, 2 },
370	{ P_GPLL6_AUX, 3 },
371};
372
373static const struct clk_parent_data gcc_xo_gpll0_gpll2a_gpll3_gpll6a_parent_data[] = {
374	{ .fw_name = "xo" },
375	{ .hw = &gpll0_vote.hw },
376	{ .hw = &gpll2_vote.hw },
377	{ .hw = &gpll3_vote.hw },
378	{ .hw = &gpll6_vote.hw },
379};
380
381static const struct parent_map gcc_xo_gpll0_gpll2_map[] = {
382	{ P_XO, 0 },
383	{ P_GPLL0, 1 },
384	{ P_GPLL2, 2 },
385};
386
387static const struct clk_parent_data gcc_xo_gpll0_gpll2_parent_data[] = {
388	{ .fw_name = "xo" },
389	{ .hw = &gpll0_vote.hw },
390	{ .hw = &gpll2_vote.hw },
391};
392
393static const struct parent_map gcc_xo_gpll0_gpll2_gpll4_map[] = {
394	{ P_XO, 0 },
395	{ P_GPLL0, 1 },
396	{ P_GPLL2, 3 },
397	{ P_GPLL4, 2 },
398};
399
400static const struct clk_parent_data gcc_xo_gpll0_gpll2_gpll4_parent_data[] = {
401	{ .fw_name = "xo" },
402	{ .hw = &gpll0_vote.hw },
403	{ .hw = &gpll2_vote.hw },
404	{ .hw = &gpll4_vote.hw },
405};
406
407static const struct parent_map gcc_xo_gpll0a_map[] = {
408	{ P_XO, 0 },
409	{ P_GPLL0_AUX, 2 },
410};
411
412static const struct clk_parent_data gcc_xo_gpll0a_parent_data[] = {
413	{ .fw_name = "xo" },
414	{ .hw = &gpll0_vote.hw },
415};
416
417static const struct parent_map gcc_xo_gpll0_gpll1a_sleep_map[] = {
418	{ P_XO, 0 },
419	{ P_GPLL0, 1 },
420	{ P_GPLL1_AUX, 2 },
421	{ P_SLEEP_CLK, 6 },
422};
423
424static const struct clk_parent_data gcc_xo_gpll0_gpll1a_sleep_parent_data[] = {
425	{ .fw_name = "xo" },
426	{ .hw = &gpll0_vote.hw },
427	{ .hw = &gpll1_vote.hw },
428	{ .fw_name = "sleep_clk", .name = "sleep_clk" },
429};
430
431static const struct parent_map gcc_xo_gpll0_gpll1a_gpll6_sleep_map[] = {
432	{ P_XO, 0 },
433	{ P_GPLL0, 1 },
434	{ P_GPLL1_AUX, 2 },
435	{ P_GPLL6, 2 },
436	{ P_SLEEP_CLK, 6 },
437};
438
439static const struct clk_parent_data gcc_xo_gpll0_gpll1a_gpll6_sleep_parent_data[] = {
440	{ .fw_name = "xo" },
441	{ .hw = &gpll0_vote.hw },
442	{ .hw = &gpll1_vote.hw },
443	{ .hw = &gpll6_vote.hw },
444	{ .fw_name = "sleep_clk", .name = "sleep_clk" },
445};
446
447static const struct parent_map gcc_xo_gpll0_gpll1a_map[] = {
448	{ P_XO, 0 },
449	{ P_GPLL0, 1 },
450	{ P_GPLL1_AUX, 2 },
451};
452
453static const struct clk_parent_data gcc_xo_gpll0_gpll1a_parent_data[] = {
454	{ .fw_name = "xo" },
455	{ .hw = &gpll0_vote.hw },
456	{ .hw = &gpll1_vote.hw },
457};
458
459static const struct parent_map gcc_xo_dsibyte_map[] = {
460	{ P_XO, 0, },
461	{ P_DSI0_PHYPLL_BYTE, 2 },
462};
463
464static const struct clk_parent_data gcc_xo_dsibyte_parent_data[] = {
465	{ .fw_name = "xo" },
466	{ .fw_name = "dsi0pllbyte", .name = "dsi0pllbyte" },
467};
468
469static const struct parent_map gcc_xo_gpll0a_dsibyte_map[] = {
470	{ P_XO, 0 },
471	{ P_GPLL0_AUX, 2 },
472	{ P_DSI0_PHYPLL_BYTE, 1 },
473};
474
475static const struct clk_parent_data gcc_xo_gpll0a_dsibyte_parent_data[] = {
476	{ .fw_name = "xo" },
477	{ .hw = &gpll0_vote.hw },
478	{ .fw_name = "dsi0pllbyte", .name = "dsi0pllbyte" },
479};
480
481static const struct parent_map gcc_xo_gpll1_dsiphy_gpll6_gpll3a_gpll0a_map[] = {
482	{ P_XO, 0 },
483	{ P_GPLL1, 1 },
484	{ P_DSI0_PHYPLL_DSI, 2 },
485	{ P_GPLL6, 3 },
486	{ P_GPLL3_AUX, 4 },
487	{ P_GPLL0_AUX, 5 },
488};
489
490static const struct clk_parent_data gcc_xo_gpll1_dsiphy_gpll6_gpll3a_gpll0a_parent_data[] = {
491	{ .fw_name = "xo" },
492	{ .hw = &gpll1_vote.hw },
493	{ .fw_name = "dsi0pll", .name = "dsi0pll" },
494	{ .hw = &gpll6_vote.hw },
495	{ .hw = &gpll3_vote.hw },
496	{ .hw = &gpll0_vote.hw },
497};
498
499static const struct parent_map gcc_xo_gpll0a_dsiphy_map[] = {
500	{ P_XO, 0 },
501	{ P_GPLL0_AUX, 2 },
502	{ P_DSI0_PHYPLL_DSI, 1 },
503};
504
505static const struct clk_parent_data gcc_xo_gpll0a_dsiphy_parent_data[] = {
506	{ .fw_name = "xo" },
507	{ .hw = &gpll0_vote.hw },
508	{ .fw_name = "dsi0pll", .name = "dsi0pll" },
509};
510
511static const struct parent_map gcc_xo_gpll0_gpll5a_gpll6_bimc_map[] = {
512	{ P_XO, 0 },
513	{ P_GPLL0, 1 },
514	{ P_GPLL5_AUX, 3 },
515	{ P_GPLL6, 2 },
516	{ P_BIMC, 4 },
517};
518
519static const struct clk_parent_data gcc_xo_gpll0_gpll5a_gpll6_bimc_parent_data[] = {
520	{ .fw_name = "xo" },
521	{ .hw = &gpll0_vote.hw },
522	{ .hw = &gpll5_vote.hw },
523	{ .hw = &gpll6_vote.hw },
524	{ .hw = &bimc_pll_vote.hw },
525};
526
527static const struct parent_map gcc_xo_gpll0_gpll1_sleep_map[] = {
528	{ P_XO, 0 },
529	{ P_GPLL0, 1 },
530	{ P_GPLL1, 2 },
531	{ P_SLEEP_CLK, 6 }
532};
533
534static const struct clk_parent_data gcc_xo_gpll0_gpll1_sleep_parent_data[] = {
535	{ .fw_name = "xo" },
536	{ .hw = &gpll0_vote.hw },
537	{ .hw = &gpll1_vote.hw },
538	{ .fw_name = "sleep_clk", .name = "sleep_clk" },
539};
540
541static const struct parent_map gcc_xo_gpll1_epi2s_emclk_sleep_map[] = {
542	{ P_XO, 0 },
543	{ P_GPLL1, 1 },
544	{ P_EXT_PRI_I2S, 2 },
545	{ P_EXT_MCLK, 3 },
546	{ P_SLEEP_CLK, 6 }
547};
548
549static const struct clk_parent_data gcc_xo_gpll1_epi2s_emclk_sleep_parent_data[] = {
550	{ .fw_name = "xo" },
551	{ .hw = &gpll0_vote.hw },
552	{ .fw_name = "ext_pri_i2s", .name = "ext_pri_i2s" },
553	{ .fw_name = "ext_mclk", .name = "ext_mclk" },
554	{ .fw_name = "sleep_clk", .name = "sleep_clk" },
555};
556
557static const struct parent_map gcc_xo_gpll1_esi2s_emclk_sleep_map[] = {
558	{ P_XO, 0 },
559	{ P_GPLL1, 1 },
560	{ P_EXT_SEC_I2S, 2 },
561	{ P_EXT_MCLK, 3 },
562	{ P_SLEEP_CLK, 6 }
563};
564
565static const struct clk_parent_data gcc_xo_gpll1_esi2s_emclk_sleep_parent_data[] = {
566	{ .fw_name = "xo" },
567	{ .hw = &gpll1_vote.hw },
568	{ .fw_name = "ext_sec_i2s", .name = "ext_sec_i2s" },
569	{ .fw_name = "ext_mclk", .name = "ext_mclk" },
570	{ .fw_name = "sleep_clk", .name = "sleep_clk" },
571};
572
573static const struct parent_map gcc_xo_sleep_map[] = {
574	{ P_XO, 0 },
575	{ P_SLEEP_CLK, 6 }
576};
577
578static const struct clk_parent_data gcc_xo_sleep_parent_data[] = {
579	{ .fw_name = "xo" },
580	{ .fw_name = "sleep_clk", .name = "sleep_clk" },
581};
582
583static const struct parent_map gcc_xo_gpll1_emclk_sleep_map[] = {
584	{ P_XO, 0 },
585	{ P_GPLL1, 1 },
586	{ P_EXT_MCLK, 2 },
587	{ P_SLEEP_CLK, 6 }
588};
589
590static const struct clk_parent_data gcc_xo_gpll1_emclk_sleep_parent_data[] = {
591	{ .fw_name = "xo" },
592	{ .hw = &gpll1_vote.hw },
593	{ .fw_name = "ext_mclk", .name = "ext_mclk" },
594	{ .fw_name = "sleep_clk", .name = "sleep_clk" },
595};
596
597static const struct clk_parent_data gcc_xo_gpll6_gpll0_parent_data[] = {
598	{ .fw_name = "xo" },
599	{ .hw = &gpll6_vote.hw },
600	{ .hw = &gpll0_vote.hw },
601};
602
603static const struct clk_parent_data gcc_xo_gpll6_gpll0a_parent_data[] = {
604	{ .fw_name = "xo" },
605	{ .hw = &gpll6_vote.hw },
606	{ .hw = &gpll0_vote.hw },
607};
608
609static struct clk_rcg2 pcnoc_bfdcd_clk_src = {
610	.cmd_rcgr = 0x27000,
611	.hid_width = 5,
612	.parent_map = gcc_xo_gpll0_map,
613	.clkr.hw.init = &(struct clk_init_data){
614		.name = "pcnoc_bfdcd_clk_src",
615		.parent_data = gcc_xo_gpll0_parent_data,
616		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
617		.ops = &clk_rcg2_ops,
618	},
619};
620
621static struct clk_rcg2 system_noc_bfdcd_clk_src = {
622	.cmd_rcgr = 0x26004,
623	.hid_width = 5,
624	.parent_map = gcc_xo_gpll0_gpll6a_map,
625	.clkr.hw.init = &(struct clk_init_data){
626		.name = "system_noc_bfdcd_clk_src",
627		.parent_data = gcc_xo_gpll0_gpll6a_parent_data,
628		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6a_parent_data),
629		.ops = &clk_rcg2_ops,
630	},
631};
632
633static struct clk_rcg2 bimc_ddr_clk_src = {
634	.cmd_rcgr = 0x32024,
635	.hid_width = 5,
636	.parent_map = gcc_xo_gpll0_bimc_map,
637	.clkr.hw.init = &(struct clk_init_data){
638		.name = "bimc_ddr_clk_src",
639		.parent_data = gcc_xo_gpll0_bimc_parent_data,
640		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_bimc_parent_data),
641		.ops = &clk_rcg2_ops,
642		.flags = CLK_GET_RATE_NOCACHE,
643	},
644};
645
646static struct clk_rcg2 system_mm_noc_bfdcd_clk_src = {
647	.cmd_rcgr = 0x2600c,
648	.hid_width = 5,
649	.parent_map = gcc_xo_gpll0_gpll6a_map,
650	.clkr.hw.init = &(struct clk_init_data){
651		.name = "system_mm_noc_bfdcd_clk_src",
652		.parent_data = gcc_xo_gpll0_gpll6a_parent_data,
653		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6a_parent_data),
654		.ops = &clk_rcg2_ops,
655	},
656};
657
658static const struct freq_tbl ftbl_gcc_camss_ahb_clk[] = {
659	F(40000000, P_GPLL0, 10, 1, 2),
660	F(80000000, P_GPLL0, 10, 0, 0),
661	{ }
662};
663
664static struct clk_rcg2 camss_ahb_clk_src = {
665	.cmd_rcgr = 0x5a000,
666	.mnd_width = 8,
667	.hid_width = 5,
668	.parent_map = gcc_xo_gpll0_map,
669	.freq_tbl = ftbl_gcc_camss_ahb_clk,
670	.clkr.hw.init = &(struct clk_init_data){
671		.name = "camss_ahb_clk_src",
672		.parent_data = gcc_xo_gpll0_parent_data,
673		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
674		.ops = &clk_rcg2_ops,
675	},
676};
677
678static const struct freq_tbl ftbl_apss_ahb_clk[] = {
679	F(19200000, P_XO, 1, 0, 0),
680	F(50000000, P_GPLL0, 16, 0, 0),
681	F(100000000, P_GPLL0, 8, 0, 0),
682	F(133330000, P_GPLL0, 6, 0, 0),
683	{ }
684};
685
686static struct clk_rcg2 apss_ahb_clk_src = {
687	.cmd_rcgr = 0x46000,
688	.hid_width = 5,
689	.parent_map = gcc_xo_gpll0_map,
690	.freq_tbl = ftbl_apss_ahb_clk,
691	.clkr.hw.init = &(struct clk_init_data){
692		.name = "apss_ahb_clk_src",
693		.parent_data = gcc_xo_gpll0_parent_data,
694		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
695		.ops = &clk_rcg2_ops,
696	},
697};
698
699static const struct freq_tbl ftbl_gcc_camss_csi0_1_clk[] = {
700	F(100000000, P_GPLL0, 8, 0,	0),
701	F(200000000, P_GPLL0, 4, 0,	0),
702	{ }
703};
704
705static struct clk_rcg2 csi0_clk_src = {
706	.cmd_rcgr = 0x4e020,
707	.hid_width = 5,
708	.parent_map = gcc_xo_gpll0_map,
709	.freq_tbl = ftbl_gcc_camss_csi0_1_clk,
710	.clkr.hw.init = &(struct clk_init_data){
711		.name = "csi0_clk_src",
712		.parent_data = gcc_xo_gpll0_parent_data,
713		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
714		.ops = &clk_rcg2_ops,
715	},
716};
717
718static struct clk_rcg2 csi1_clk_src = {
719	.cmd_rcgr = 0x4f020,
720	.hid_width = 5,
721	.parent_map = gcc_xo_gpll0_map,
722	.freq_tbl = ftbl_gcc_camss_csi0_1_clk,
723	.clkr.hw.init = &(struct clk_init_data){
724		.name = "csi1_clk_src",
725		.parent_data = gcc_xo_gpll0_parent_data,
726		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
727		.ops = &clk_rcg2_ops,
728	},
729};
730
731static const struct freq_tbl ftbl_gcc_oxili_gfx3d_clk[] = {
732	F(19200000, P_XO, 1, 0, 0),
733	F(50000000, P_GPLL0, 16, 0, 0),
734	F(80000000, P_GPLL0, 10, 0, 0),
735	F(100000000, P_GPLL0, 8, 0, 0),
736	F(160000000, P_GPLL0, 5, 0, 0),
737	F(200000000, P_GPLL0, 4, 0, 0),
738	F(220000000, P_GPLL3, 5, 0, 0),
739	F(266670000, P_GPLL0, 3, 0, 0),
740	F(310000000, P_GPLL2_AUX, 3, 0, 0),
741	F(400000000, P_GPLL0, 2, 0, 0),
742	F(465000000, P_GPLL2_AUX, 2, 0, 0),
743	F(550000000, P_GPLL3, 2, 0, 0),
744	{ }
745};
746
747static struct clk_rcg2 gfx3d_clk_src = {
748	.cmd_rcgr = 0x59000,
749	.hid_width = 5,
750	.parent_map = gcc_xo_gpll0_gpll2a_gpll3_gpll6a_map,
751	.freq_tbl = ftbl_gcc_oxili_gfx3d_clk,
752	.clkr.hw.init = &(struct clk_init_data){
753		.name = "gfx3d_clk_src",
754		.parent_data = gcc_xo_gpll0_gpll2a_gpll3_gpll6a_parent_data,
755		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll2a_gpll3_gpll6a_parent_data),
756		.ops = &clk_rcg2_ops,
757	},
758};
759
760static const struct freq_tbl ftbl_gcc_camss_vfe0_clk[] = {
761	F(50000000, P_GPLL0, 16, 0, 0),
762	F(80000000, P_GPLL0, 10, 0, 0),
763	F(100000000, P_GPLL0, 8, 0, 0),
764	F(160000000, P_GPLL0, 5, 0, 0),
765	F(177780000, P_GPLL0, 4.5, 0, 0),
766	F(200000000, P_GPLL0, 4, 0, 0),
767	F(266670000, P_GPLL0, 3, 0, 0),
768	F(320000000, P_GPLL0, 2.5, 0, 0),
769	F(400000000, P_GPLL0, 2, 0, 0),
770	F(465000000, P_GPLL2, 2, 0, 0),
771	F(480000000, P_GPLL4, 2.5, 0, 0),
772	F(600000000, P_GPLL4, 2, 0, 0),
773	{ }
774};
775
776static struct clk_rcg2 vfe0_clk_src = {
777	.cmd_rcgr = 0x58000,
778	.hid_width = 5,
779	.parent_map = gcc_xo_gpll0_gpll2_gpll4_map,
780	.freq_tbl = ftbl_gcc_camss_vfe0_clk,
781	.clkr.hw.init = &(struct clk_init_data){
782		.name = "vfe0_clk_src",
783		.parent_data = gcc_xo_gpll0_gpll2_gpll4_parent_data,
784		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll2_gpll4_parent_data),
785		.ops = &clk_rcg2_ops,
786	},
787};
788
789static const struct freq_tbl ftbl_gcc_blsp1_qup1_6_i2c_apps_clk[] = {
790	F(19200000, P_XO, 1, 0, 0),
791	F(50000000, P_GPLL0, 16, 0, 0),
792	{ }
793};
794
795static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
796	.cmd_rcgr = 0x0200c,
797	.hid_width = 5,
798	.parent_map = gcc_xo_gpll0_map,
799	.freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
800	.clkr.hw.init = &(struct clk_init_data){
801		.name = "blsp1_qup1_i2c_apps_clk_src",
802		.parent_data = gcc_xo_gpll0_parent_data,
803		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
804		.ops = &clk_rcg2_ops,
805	},
806};
807
808static const struct freq_tbl ftbl_gcc_blsp1_qup1_6_spi_apps_clk[] = {
809	F(960000, P_XO, 10, 1, 2),
810	F(4800000, P_XO, 4, 0, 0),
811	F(9600000, P_XO, 2, 0, 0),
812	F(16000000, P_GPLL0, 10, 1, 5),
813	F(19200000, P_XO, 1, 0, 0),
814	F(25000000, P_GPLL0, 16, 1, 2),
815	F(50000000, P_GPLL0, 16, 0, 0),
816	{ }
817};
818
819static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
820	.cmd_rcgr = 0x02024,
821	.mnd_width = 8,
822	.hid_width = 5,
823	.parent_map = gcc_xo_gpll0_map,
824	.freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
825	.clkr.hw.init = &(struct clk_init_data){
826		.name = "blsp1_qup1_spi_apps_clk_src",
827		.parent_data = gcc_xo_gpll0_parent_data,
828		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
829		.ops = &clk_rcg2_ops,
830	},
831};
832
833static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
834	.cmd_rcgr = 0x03000,
835	.hid_width = 5,
836	.parent_map = gcc_xo_gpll0_map,
837	.freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
838	.clkr.hw.init = &(struct clk_init_data){
839		.name = "blsp1_qup2_i2c_apps_clk_src",
840		.parent_data = gcc_xo_gpll0_parent_data,
841		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
842		.ops = &clk_rcg2_ops,
843	},
844};
845
846static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
847	.cmd_rcgr = 0x03014,
848	.mnd_width = 8,
849	.hid_width = 5,
850	.parent_map = gcc_xo_gpll0_map,
851	.freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
852	.clkr.hw.init = &(struct clk_init_data){
853		.name = "blsp1_qup2_spi_apps_clk_src",
854		.parent_data = gcc_xo_gpll0_parent_data,
855		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
856		.ops = &clk_rcg2_ops,
857	},
858};
859
860static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
861	.cmd_rcgr = 0x04000,
862	.hid_width = 5,
863	.parent_map = gcc_xo_gpll0_map,
864	.freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
865	.clkr.hw.init = &(struct clk_init_data){
866		.name = "blsp1_qup3_i2c_apps_clk_src",
867		.parent_data = gcc_xo_gpll0_parent_data,
868		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
869		.ops = &clk_rcg2_ops,
870	},
871};
872
873static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
874	.cmd_rcgr = 0x04024,
875	.mnd_width = 8,
876	.hid_width = 5,
877	.parent_map = gcc_xo_gpll0_map,
878	.freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
879	.clkr.hw.init = &(struct clk_init_data){
880		.name = "blsp1_qup3_spi_apps_clk_src",
881		.parent_data = gcc_xo_gpll0_parent_data,
882		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
883		.ops = &clk_rcg2_ops,
884	},
885};
886
887static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
888	.cmd_rcgr = 0x05000,
889	.hid_width = 5,
890	.parent_map = gcc_xo_gpll0_map,
891	.freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
892	.clkr.hw.init = &(struct clk_init_data){
893		.name = "blsp1_qup4_i2c_apps_clk_src",
894		.parent_data = gcc_xo_gpll0_parent_data,
895		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
896		.ops = &clk_rcg2_ops,
897	},
898};
899
900static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
901	.cmd_rcgr = 0x05024,
902	.mnd_width = 8,
903	.hid_width = 5,
904	.parent_map = gcc_xo_gpll0_map,
905	.freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
906	.clkr.hw.init = &(struct clk_init_data){
907		.name = "blsp1_qup4_spi_apps_clk_src",
908		.parent_data = gcc_xo_gpll0_parent_data,
909		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
910		.ops = &clk_rcg2_ops,
911	},
912};
913
914static struct clk_rcg2 blsp1_qup5_i2c_apps_clk_src = {
915	.cmd_rcgr = 0x06000,
916	.hid_width = 5,
917	.parent_map = gcc_xo_gpll0_map,
918	.freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
919	.clkr.hw.init = &(struct clk_init_data){
920		.name = "blsp1_qup5_i2c_apps_clk_src",
921		.parent_data = gcc_xo_gpll0_parent_data,
922		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
923		.ops = &clk_rcg2_ops,
924	},
925};
926
927static struct clk_rcg2 blsp1_qup5_spi_apps_clk_src = {
928	.cmd_rcgr = 0x06024,
929	.mnd_width = 8,
930	.hid_width = 5,
931	.parent_map = gcc_xo_gpll0_map,
932	.freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
933	.clkr.hw.init = &(struct clk_init_data){
934		.name = "blsp1_qup5_spi_apps_clk_src",
935		.parent_data = gcc_xo_gpll0_parent_data,
936		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
937		.ops = &clk_rcg2_ops,
938	},
939};
940
941static struct clk_rcg2 blsp1_qup6_i2c_apps_clk_src = {
942	.cmd_rcgr = 0x07000,
943	.hid_width = 5,
944	.parent_map = gcc_xo_gpll0_map,
945	.freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
946	.clkr.hw.init = &(struct clk_init_data){
947		.name = "blsp1_qup6_i2c_apps_clk_src",
948		.parent_data = gcc_xo_gpll0_parent_data,
949		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
950		.ops = &clk_rcg2_ops,
951	},
952};
953
954static struct clk_rcg2 blsp1_qup6_spi_apps_clk_src = {
955	.cmd_rcgr = 0x07024,
956	.mnd_width = 8,
957	.hid_width = 5,
958	.parent_map = gcc_xo_gpll0_map,
959	.freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
960	.clkr.hw.init = &(struct clk_init_data){
961		.name = "blsp1_qup6_spi_apps_clk_src",
962		.parent_data = gcc_xo_gpll0_parent_data,
963		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
964		.ops = &clk_rcg2_ops,
965	},
966};
967
968static const struct freq_tbl ftbl_gcc_blsp1_uart1_6_apps_clk[] = {
969	F(3686400, P_GPLL0, 1, 72, 15625),
970	F(7372800, P_GPLL0, 1, 144, 15625),
971	F(14745600, P_GPLL0, 1, 288, 15625),
972	F(16000000, P_GPLL0, 10, 1, 5),
973	F(19200000, P_XO, 1, 0, 0),
974	F(24000000, P_GPLL0, 1, 3, 100),
975	F(25000000, P_GPLL0, 16, 1, 2),
976	F(32000000, P_GPLL0, 1, 1, 25),
977	F(40000000, P_GPLL0, 1, 1, 20),
978	F(46400000, P_GPLL0, 1, 29, 500),
979	F(48000000, P_GPLL0, 1, 3, 50),
980	F(51200000, P_GPLL0, 1, 8, 125),
981	F(56000000, P_GPLL0, 1, 7, 100),
982	F(58982400, P_GPLL0, 1, 1152, 15625),
983	F(60000000, P_GPLL0, 1, 3, 40),
984	{ }
985};
986
987static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
988	.cmd_rcgr = 0x02044,
989	.mnd_width = 16,
990	.hid_width = 5,
991	.parent_map = gcc_xo_gpll0_map,
992	.freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
993	.clkr.hw.init = &(struct clk_init_data){
994		.name = "blsp1_uart1_apps_clk_src",
995		.parent_data = gcc_xo_gpll0_parent_data,
996		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
997		.ops = &clk_rcg2_ops,
998	},
999};
1000
1001static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
1002	.cmd_rcgr = 0x03034,
1003	.mnd_width = 16,
1004	.hid_width = 5,
1005	.parent_map = gcc_xo_gpll0_map,
1006	.freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
1007	.clkr.hw.init = &(struct clk_init_data){
1008		.name = "blsp1_uart2_apps_clk_src",
1009		.parent_data = gcc_xo_gpll0_parent_data,
1010		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
1011		.ops = &clk_rcg2_ops,
1012	},
1013};
1014
1015static const struct freq_tbl ftbl_gcc_camss_cci_clk[] = {
1016	F(19200000, P_XO, 1, 0, 0),
1017	F(37500000, P_GPLL0, 1, 3, 64),
1018	{ }
1019};
1020
1021static struct clk_rcg2 cci_clk_src = {
1022	.cmd_rcgr = 0x51000,
1023	.mnd_width = 8,
1024	.hid_width = 5,
1025	.parent_map = gcc_xo_gpll0a_map,
1026	.freq_tbl = ftbl_gcc_camss_cci_clk,
1027	.clkr.hw.init = &(struct clk_init_data){
1028		.name = "cci_clk_src",
1029		.parent_data = gcc_xo_gpll0a_parent_data,
1030		.num_parents = ARRAY_SIZE(gcc_xo_gpll0a_parent_data),
1031		.ops = &clk_rcg2_ops,
1032	},
1033};
1034
1035/*
1036 * This is a frequency table for "General Purpose" clocks.
1037 * These clocks can be muxed to the SoC pins and may be used by
1038 * external devices. They're often used as PWM source.
1039 *
1040 * See comment at ftbl_gcc_gp1_3_clk.
1041 */
1042static const struct freq_tbl ftbl_gcc_camss_gp0_1_clk[] = {
1043	F(10000,   P_XO,    16,  1, 120),
1044	F(100000,  P_XO,    16,  1,  12),
1045	F(500000,  P_GPLL0, 16,  1, 100),
1046	F(1000000, P_GPLL0, 16,  1,  50),
1047	F(2500000, P_GPLL0, 16,  1,  20),
1048	F(5000000, P_GPLL0, 16,  1,  10),
1049	F(100000000, P_GPLL0, 8, 0, 0),
1050	F(200000000, P_GPLL0, 4, 0, 0),
1051	{ }
1052};
1053
1054static struct clk_rcg2 camss_gp0_clk_src = {
1055	.cmd_rcgr = 0x54000,
1056	.mnd_width = 8,
1057	.hid_width = 5,
1058	.parent_map = gcc_xo_gpll0_gpll1a_sleep_map,
1059	.freq_tbl = ftbl_gcc_camss_gp0_1_clk,
1060	.clkr.hw.init = &(struct clk_init_data){
1061		.name = "camss_gp0_clk_src",
1062		.parent_data = gcc_xo_gpll0_gpll1a_sleep_parent_data,
1063		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a_sleep_parent_data),
1064		.ops = &clk_rcg2_ops,
1065	},
1066};
1067
1068static struct clk_rcg2 camss_gp1_clk_src = {
1069	.cmd_rcgr = 0x55000,
1070	.mnd_width = 8,
1071	.hid_width = 5,
1072	.parent_map = gcc_xo_gpll0_gpll1a_sleep_map,
1073	.freq_tbl = ftbl_gcc_camss_gp0_1_clk,
1074	.clkr.hw.init = &(struct clk_init_data){
1075		.name = "camss_gp1_clk_src",
1076		.parent_data = gcc_xo_gpll0_gpll1a_sleep_parent_data,
1077		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a_sleep_parent_data),
1078		.ops = &clk_rcg2_ops,
1079	},
1080};
1081
1082static const struct freq_tbl ftbl_gcc_camss_jpeg0_clk[] = {
1083	F(133330000, P_GPLL0, 6, 0,	0),
1084	F(266670000, P_GPLL0, 3, 0,	0),
1085	F(320000000, P_GPLL0, 2.5, 0, 0),
1086	{ }
1087};
1088
1089static struct clk_rcg2 jpeg0_clk_src = {
1090	.cmd_rcgr = 0x57000,
1091	.hid_width = 5,
1092	.parent_map = gcc_xo_gpll0_map,
1093	.freq_tbl = ftbl_gcc_camss_jpeg0_clk,
1094	.clkr.hw.init = &(struct clk_init_data){
1095		.name = "jpeg0_clk_src",
1096		.parent_data = gcc_xo_gpll0_parent_data,
1097		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
1098		.ops = &clk_rcg2_ops,
1099	},
1100};
1101
1102static const struct freq_tbl ftbl_gcc_camss_mclk0_1_clk[] = {
1103	F(24000000, P_GPLL0, 1, 1, 45),
1104	F(66670000, P_GPLL0, 12, 0, 0),
1105	{ }
1106};
1107
1108static struct clk_rcg2 mclk0_clk_src = {
1109	.cmd_rcgr = 0x52000,
1110	.mnd_width = 8,
1111	.hid_width = 5,
1112	.parent_map = gcc_xo_gpll0_gpll1a_gpll6_sleep_map,
1113	.freq_tbl = ftbl_gcc_camss_mclk0_1_clk,
1114	.clkr.hw.init = &(struct clk_init_data){
1115		.name = "mclk0_clk_src",
1116		.parent_data = gcc_xo_gpll0_gpll1a_gpll6_sleep_parent_data,
1117		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a_gpll6_sleep_parent_data),
1118		.ops = &clk_rcg2_ops,
1119	},
1120};
1121
1122static struct clk_rcg2 mclk1_clk_src = {
1123	.cmd_rcgr = 0x53000,
1124	.mnd_width = 8,
1125	.hid_width = 5,
1126	.parent_map = gcc_xo_gpll0_gpll1a_gpll6_sleep_map,
1127	.freq_tbl = ftbl_gcc_camss_mclk0_1_clk,
1128	.clkr.hw.init = &(struct clk_init_data){
1129		.name = "mclk1_clk_src",
1130		.parent_data = gcc_xo_gpll0_gpll1a_gpll6_sleep_parent_data,
1131		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a_gpll6_sleep_parent_data),
1132		.ops = &clk_rcg2_ops,
1133	},
1134};
1135
1136static const struct freq_tbl ftbl_gcc_camss_csi0_1phytimer_clk[] = {
1137	F(100000000, P_GPLL0, 8, 0,	0),
1138	F(200000000, P_GPLL0, 4, 0,	0),
1139	{ }
1140};
1141
1142static struct clk_rcg2 csi0phytimer_clk_src = {
1143	.cmd_rcgr = 0x4e000,
1144	.hid_width = 5,
1145	.parent_map = gcc_xo_gpll0_gpll1a_map,
1146	.freq_tbl = ftbl_gcc_camss_csi0_1phytimer_clk,
1147	.clkr.hw.init = &(struct clk_init_data){
1148		.name = "csi0phytimer_clk_src",
1149		.parent_data = gcc_xo_gpll0_gpll1a_parent_data,
1150		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a_parent_data),
1151		.ops = &clk_rcg2_ops,
1152	},
1153};
1154
1155static struct clk_rcg2 csi1phytimer_clk_src = {
1156	.cmd_rcgr = 0x4f000,
1157	.hid_width = 5,
1158	.parent_map = gcc_xo_gpll0_gpll1a_map,
1159	.freq_tbl = ftbl_gcc_camss_csi0_1phytimer_clk,
1160	.clkr.hw.init = &(struct clk_init_data){
1161		.name = "csi1phytimer_clk_src",
1162		.parent_data = gcc_xo_gpll0_gpll1a_parent_data,
1163		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a_parent_data),
1164		.ops = &clk_rcg2_ops,
1165	},
1166};
1167
1168static const struct freq_tbl ftbl_gcc_camss_cpp_clk[] = {
1169	F(160000000, P_GPLL0, 5, 0, 0),
1170	F(200000000, P_GPLL0, 4, 0, 0),
1171	F(228570000, P_GPLL0, 3.5, 0, 0),
1172	F(266670000, P_GPLL0, 3, 0, 0),
1173	F(320000000, P_GPLL0, 2.5, 0, 0),
1174	F(465000000, P_GPLL2, 2, 0, 0),
1175	{ }
1176};
1177
1178static struct clk_rcg2 cpp_clk_src = {
1179	.cmd_rcgr = 0x58018,
1180	.hid_width = 5,
1181	.parent_map = gcc_xo_gpll0_gpll2_map,
1182	.freq_tbl = ftbl_gcc_camss_cpp_clk,
1183	.clkr.hw.init = &(struct clk_init_data){
1184		.name = "cpp_clk_src",
1185		.parent_data = gcc_xo_gpll0_gpll2_parent_data,
1186		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll2_parent_data),
1187		.ops = &clk_rcg2_ops,
1188	},
1189};
1190
1191static const struct freq_tbl ftbl_gcc_crypto_clk[] = {
1192	F(50000000, P_GPLL0, 16, 0, 0),
1193	F(80000000, P_GPLL0, 10, 0, 0),
1194	F(100000000, P_GPLL0, 8, 0, 0),
1195	F(160000000, P_GPLL0, 5, 0, 0),
1196	{ }
1197};
1198
1199/* This is not in the documentation but is in the downstream driver */
1200static struct clk_rcg2 crypto_clk_src = {
1201	.cmd_rcgr = 0x16004,
1202	.hid_width = 5,
1203	.parent_map = gcc_xo_gpll0_map,
1204	.freq_tbl = ftbl_gcc_crypto_clk,
1205	.clkr.hw.init = &(struct clk_init_data){
1206		.name = "crypto_clk_src",
1207		.parent_data = gcc_xo_gpll0_parent_data,
1208		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
1209		.ops = &clk_rcg2_ops,
1210	},
1211};
1212
1213/*
1214 * This is a frequency table for "General Purpose" clocks.
1215 * These clocks can be muxed to the SoC pins and may be used by
1216 * external devices. They're often used as PWM source.
1217 *
1218 * Please note that MND divider must be enabled for duty-cycle
1219 * control to be possible. (M != N) Also since D register is configured
1220 * with a value multiplied by 2, and duty cycle is calculated as
1221 *                             (2 * D) % 2^W
1222 *                DutyCycle = ----------------
1223 *                              2 * (N % 2^W)
1224 * (where W = .mnd_width)
1225 * N must be half or less than maximum value for the register.
1226 * Otherwise duty-cycle control would be limited.
1227 * (e.g. for 8-bit NMD N should be less than 128)
1228 */
1229static const struct freq_tbl ftbl_gcc_gp1_3_clk[] = {
1230	F(10000,   P_XO,    16,  1, 120),
1231	F(100000,  P_XO,    16,  1,  12),
1232	F(500000,  P_GPLL0, 16,  1, 100),
1233	F(1000000, P_GPLL0, 16,  1,  50),
1234	F(2500000, P_GPLL0, 16,  1,  20),
1235	F(5000000, P_GPLL0, 16,  1,  10),
1236	F(19200000, P_XO, 1, 0,	0),
1237	{ }
1238};
1239
1240static struct clk_rcg2 gp1_clk_src = {
1241	.cmd_rcgr = 0x08004,
1242	.mnd_width = 8,
1243	.hid_width = 5,
1244	.parent_map = gcc_xo_gpll0_gpll1a_sleep_map,
1245	.freq_tbl = ftbl_gcc_gp1_3_clk,
1246	.clkr.hw.init = &(struct clk_init_data){
1247		.name = "gp1_clk_src",
1248		.parent_data = gcc_xo_gpll0_gpll1a_sleep_parent_data,
1249		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a_sleep_parent_data),
1250		.ops = &clk_rcg2_ops,
1251	},
1252};
1253
1254static struct clk_rcg2 gp2_clk_src = {
1255	.cmd_rcgr = 0x09004,
1256	.mnd_width = 8,
1257	.hid_width = 5,
1258	.parent_map = gcc_xo_gpll0_gpll1a_sleep_map,
1259	.freq_tbl = ftbl_gcc_gp1_3_clk,
1260	.clkr.hw.init = &(struct clk_init_data){
1261		.name = "gp2_clk_src",
1262		.parent_data = gcc_xo_gpll0_gpll1a_sleep_parent_data,
1263		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a_sleep_parent_data),
1264		.ops = &clk_rcg2_ops,
1265	},
1266};
1267
1268static struct clk_rcg2 gp3_clk_src = {
1269	.cmd_rcgr = 0x0a004,
1270	.mnd_width = 8,
1271	.hid_width = 5,
1272	.parent_map = gcc_xo_gpll0_gpll1a_sleep_map,
1273	.freq_tbl = ftbl_gcc_gp1_3_clk,
1274	.clkr.hw.init = &(struct clk_init_data){
1275		.name = "gp3_clk_src",
1276		.parent_data = gcc_xo_gpll0_gpll1a_sleep_parent_data,
1277		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a_sleep_parent_data),
1278		.ops = &clk_rcg2_ops,
1279	},
1280};
1281
1282static struct clk_rcg2 byte0_clk_src = {
1283	.cmd_rcgr = 0x4d044,
1284	.hid_width = 5,
1285	.parent_map = gcc_xo_gpll0a_dsibyte_map,
1286	.clkr.hw.init = &(struct clk_init_data){
1287		.name = "byte0_clk_src",
1288		.parent_data = gcc_xo_gpll0a_dsibyte_parent_data,
1289		.num_parents = ARRAY_SIZE(gcc_xo_gpll0a_dsibyte_parent_data),
1290		.ops = &clk_byte2_ops,
1291		.flags = CLK_SET_RATE_PARENT,
1292	},
1293};
1294
1295static struct clk_rcg2 byte1_clk_src = {
1296	.cmd_rcgr = 0x4d0b0,
1297	.hid_width = 5,
1298	.parent_map = gcc_xo_gpll0a_dsibyte_map,
1299	.clkr.hw.init = &(struct clk_init_data){
1300		.name = "byte1_clk_src",
1301		.parent_data = gcc_xo_gpll0a_dsibyte_parent_data,
1302		.num_parents = ARRAY_SIZE(gcc_xo_gpll0a_dsibyte_parent_data),
1303		.ops = &clk_byte2_ops,
1304		.flags = CLK_SET_RATE_PARENT,
1305	},
1306};
1307
1308static const struct freq_tbl ftbl_gcc_mdss_esc_clk[] = {
1309	F(19200000, P_XO, 1, 0, 0),
1310	{ }
1311};
1312
1313static struct clk_rcg2 esc0_clk_src = {
1314	.cmd_rcgr = 0x4d060,
1315	.hid_width = 5,
1316	.parent_map = gcc_xo_dsibyte_map,
1317	.freq_tbl = ftbl_gcc_mdss_esc_clk,
1318	.clkr.hw.init = &(struct clk_init_data){
1319		.name = "esc0_clk_src",
1320		.parent_data = gcc_xo_dsibyte_parent_data,
1321		.num_parents = ARRAY_SIZE(gcc_xo_dsibyte_parent_data),
1322		.ops = &clk_rcg2_ops,
1323	},
1324};
1325
1326static struct clk_rcg2 esc1_clk_src = {
1327	.cmd_rcgr = 0x4d0a8,
1328	.hid_width = 5,
1329	.parent_map = gcc_xo_dsibyte_map,
1330	.freq_tbl = ftbl_gcc_mdss_esc_clk,
1331	.clkr.hw.init = &(struct clk_init_data){
1332		.name = "esc1_clk_src",
1333		.parent_data = gcc_xo_dsibyte_parent_data,
1334		.num_parents = ARRAY_SIZE(gcc_xo_dsibyte_parent_data),
1335		.ops = &clk_rcg2_ops,
1336	},
1337};
1338
1339static const struct freq_tbl ftbl_gcc_mdss_mdp_clk[] = {
1340	F(50000000, P_GPLL0_AUX, 16, 0, 0),
1341	F(80000000, P_GPLL0_AUX, 10, 0, 0),
1342	F(100000000, P_GPLL0_AUX, 8, 0, 0),
1343	F(145500000, P_GPLL0_AUX, 5.5, 0, 0),
1344	F(153600000, P_GPLL0, 4, 0, 0),
1345	F(160000000, P_GPLL0_AUX, 5, 0, 0),
1346	F(177780000, P_GPLL0_AUX, 4.5, 0, 0),
1347	F(200000000, P_GPLL0_AUX, 4, 0, 0),
1348	F(266670000, P_GPLL0_AUX, 3, 0, 0),
1349	F(307200000, P_GPLL1, 2, 0, 0),
1350	F(366670000, P_GPLL3_AUX, 3, 0, 0),
1351	{ }
1352};
1353
1354static struct clk_rcg2 mdp_clk_src = {
1355	.cmd_rcgr = 0x4d014,
1356	.hid_width = 5,
1357	.parent_map = gcc_xo_gpll1_dsiphy_gpll6_gpll3a_gpll0a_map,
1358	.freq_tbl = ftbl_gcc_mdss_mdp_clk,
1359	.clkr.hw.init = &(struct clk_init_data){
1360		.name = "mdp_clk_src",
1361		.parent_data = gcc_xo_gpll1_dsiphy_gpll6_gpll3a_gpll0a_parent_data,
1362		.num_parents = ARRAY_SIZE(gcc_xo_gpll1_dsiphy_gpll6_gpll3a_gpll0a_parent_data),
1363		.ops = &clk_rcg2_ops,
1364	},
1365};
1366
1367static struct clk_rcg2 pclk0_clk_src = {
1368	.cmd_rcgr = 0x4d000,
1369	.mnd_width = 8,
1370	.hid_width = 5,
1371	.parent_map = gcc_xo_gpll0a_dsiphy_map,
1372	.clkr.hw.init = &(struct clk_init_data){
1373		.name = "pclk0_clk_src",
1374		.parent_data = gcc_xo_gpll0a_dsiphy_parent_data,
1375		.num_parents = ARRAY_SIZE(gcc_xo_gpll0a_dsiphy_parent_data),
1376		.ops = &clk_pixel_ops,
1377		.flags = CLK_SET_RATE_PARENT,
1378	},
1379};
1380
1381static struct clk_rcg2 pclk1_clk_src = {
1382	.cmd_rcgr = 0x4d0b8,
1383	.mnd_width = 8,
1384	.hid_width = 5,
1385	.parent_map = gcc_xo_gpll0a_dsiphy_map,
1386	.clkr.hw.init = &(struct clk_init_data){
1387		.name = "pclk1_clk_src",
1388		.parent_data = gcc_xo_gpll0a_dsiphy_parent_data,
1389		.num_parents = ARRAY_SIZE(gcc_xo_gpll0a_dsiphy_parent_data),
1390		.ops = &clk_pixel_ops,
1391		.flags = CLK_SET_RATE_PARENT,
1392	},
1393};
1394
1395static const struct freq_tbl ftbl_gcc_mdss_vsync_clk[] = {
1396	F(19200000, P_XO, 1, 0,	0),
1397	{ }
1398};
1399
1400static struct clk_rcg2 vsync_clk_src = {
1401	.cmd_rcgr = 0x4d02c,
1402	.hid_width = 5,
1403	.parent_map = gcc_xo_gpll0a_map,
1404	.freq_tbl = ftbl_gcc_mdss_vsync_clk,
1405	.clkr.hw.init = &(struct clk_init_data){
1406		.name = "vsync_clk_src",
1407		.parent_data = gcc_xo_gpll0a_parent_data,
1408		.num_parents = ARRAY_SIZE(gcc_xo_gpll0a_parent_data),
1409		.ops = &clk_rcg2_ops,
1410	},
1411};
1412
1413static const struct freq_tbl ftbl_gcc_pdm2_clk[] = {
1414	F(64000000, P_GPLL0, 12.5, 0, 0),
1415	{ }
1416};
1417
1418/* This is not in the documentation but is in the downstream driver */
1419static struct clk_rcg2 pdm2_clk_src = {
1420	.cmd_rcgr = 0x44010,
1421	.hid_width = 5,
1422	.parent_map = gcc_xo_gpll0_map,
1423	.freq_tbl = ftbl_gcc_pdm2_clk,
1424	.clkr.hw.init = &(struct clk_init_data){
1425		.name = "pdm2_clk_src",
1426		.parent_data = gcc_xo_gpll0_parent_data,
1427		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
1428		.ops = &clk_rcg2_ops,
1429	},
1430};
1431
1432static const struct freq_tbl ftbl_gcc_sdcc_apps_clk[] = {
1433	F(144000, P_XO, 16, 3, 25),
1434	F(400000, P_XO, 12, 1, 4),
1435	F(20000000, P_GPLL0, 10, 1, 4),
1436	F(25000000, P_GPLL0, 16, 1, 2),
1437	F(50000000, P_GPLL0, 16, 0, 0),
1438	F(100000000, P_GPLL0, 8, 0, 0),
1439	F(177770000, P_GPLL0, 4.5, 0, 0),
1440	F(200000000, P_GPLL0, 4, 0, 0),
1441	{ }
1442};
1443
1444static struct clk_rcg2 sdcc1_apps_clk_src = {
1445	.cmd_rcgr = 0x42004,
1446	.mnd_width = 8,
1447	.hid_width = 5,
1448	.parent_map = gcc_xo_gpll0_map,
1449	.freq_tbl = ftbl_gcc_sdcc_apps_clk,
1450	.clkr.hw.init = &(struct clk_init_data){
1451		.name = "sdcc1_apps_clk_src",
1452		.parent_data = gcc_xo_gpll0_parent_data,
1453		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
1454		.ops = &clk_rcg2_floor_ops,
1455	},
1456};
1457
1458static struct clk_rcg2 sdcc2_apps_clk_src = {
1459	.cmd_rcgr = 0x43004,
1460	.mnd_width = 8,
1461	.hid_width = 5,
1462	.parent_map = gcc_xo_gpll0_map,
1463	.freq_tbl = ftbl_gcc_sdcc_apps_clk,
1464	.clkr.hw.init = &(struct clk_init_data){
1465		.name = "sdcc2_apps_clk_src",
1466		.parent_data = gcc_xo_gpll0_parent_data,
1467		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
1468		.ops = &clk_rcg2_floor_ops,
1469	},
1470};
1471
1472static const struct freq_tbl ftbl_gcc_apss_tcu_clk[] = {
1473	F(154285000, P_GPLL6, 7, 0, 0),
1474	F(320000000, P_GPLL0, 2.5, 0, 0),
1475	F(400000000, P_GPLL0, 2, 0, 0),
1476	{ }
1477};
1478
1479static struct clk_rcg2 apss_tcu_clk_src = {
1480	.cmd_rcgr = 0x1207c,
1481	.hid_width = 5,
1482	.parent_map = gcc_xo_gpll0_gpll5a_gpll6_bimc_map,
1483	.freq_tbl = ftbl_gcc_apss_tcu_clk,
1484	.clkr.hw.init = &(struct clk_init_data){
1485		.name = "apss_tcu_clk_src",
1486		.parent_data = gcc_xo_gpll0_gpll5a_gpll6_bimc_parent_data,
1487		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll5a_gpll6_bimc_parent_data),
1488		.ops = &clk_rcg2_ops,
1489	},
1490};
1491
1492static const struct freq_tbl ftbl_gcc_bimc_gpu_clk[] = {
1493	F(19200000, P_XO, 1, 0, 0),
1494	F(100000000, P_GPLL0, 8, 0, 0),
1495	F(200000000, P_GPLL0, 4, 0, 0),
1496	F(266500000, P_BIMC, 4, 0, 0),
1497	F(400000000, P_GPLL0, 2, 0, 0),
1498	F(533000000, P_BIMC, 2, 0, 0),
1499	{ }
1500};
1501
1502static struct clk_rcg2 bimc_gpu_clk_src = {
1503	.cmd_rcgr = 0x31028,
1504	.hid_width = 5,
1505	.parent_map = gcc_xo_gpll0_gpll5a_gpll6_bimc_map,
1506	.freq_tbl = ftbl_gcc_bimc_gpu_clk,
1507	.clkr.hw.init = &(struct clk_init_data){
1508		.name = "bimc_gpu_clk_src",
1509		.parent_data = gcc_xo_gpll0_gpll5a_gpll6_bimc_parent_data,
1510		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll5a_gpll6_bimc_parent_data),
1511		.flags = CLK_GET_RATE_NOCACHE,
1512		.ops = &clk_rcg2_ops,
1513	},
1514};
1515
1516static const struct freq_tbl ftbl_gcc_usb_hs_system_clk[] = {
1517	F(57140000, P_GPLL0, 14, 0, 0),
1518	F(80000000, P_GPLL0, 10, 0, 0),
1519	F(100000000, P_GPLL0, 8, 0, 0),
1520	{ }
1521};
1522
1523static struct clk_rcg2 usb_hs_system_clk_src = {
1524	.cmd_rcgr = 0x41010,
1525	.hid_width = 5,
1526	.parent_map = gcc_xo_gpll0_map,
1527	.freq_tbl = ftbl_gcc_usb_hs_system_clk,
1528	.clkr.hw.init = &(struct clk_init_data){
1529		.name = "usb_hs_system_clk_src",
1530		.parent_data = gcc_xo_gpll0_parent_data,
1531		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
1532		.ops = &clk_rcg2_ops,
1533	},
1534};
1535
1536static const struct freq_tbl ftbl_gcc_usb_fs_system_clk[] = {
1537	F(64000000, P_GPLL0, 12.5, 0, 0),
1538	{ }
1539};
1540
1541static struct clk_rcg2 usb_fs_system_clk_src = {
1542	.cmd_rcgr = 0x3f010,
1543	.hid_width = 5,
1544	.parent_map = gcc_xo_gpll0_map,
1545	.freq_tbl = ftbl_gcc_usb_fs_system_clk,
1546	.clkr.hw.init = &(struct clk_init_data){
1547		.name = "usb_fs_system_clk_src",
1548		.parent_data = gcc_xo_gpll6_gpll0_parent_data,
1549		.num_parents = ARRAY_SIZE(gcc_xo_gpll6_gpll0_parent_data),
1550		.ops = &clk_rcg2_ops,
1551	},
1552};
1553
1554static const struct freq_tbl ftbl_gcc_usb_fs_ic_clk[] = {
1555	F(60000000, P_GPLL6, 1, 1, 18),
1556	{ }
1557};
1558
1559static struct clk_rcg2 usb_fs_ic_clk_src = {
1560	.cmd_rcgr = 0x3f034,
1561	.hid_width = 5,
1562	.parent_map = gcc_xo_gpll0_map,
1563	.freq_tbl = ftbl_gcc_usb_fs_ic_clk,
1564	.clkr.hw.init = &(struct clk_init_data){
1565		.name = "usb_fs_ic_clk_src",
1566		.parent_data = gcc_xo_gpll6_gpll0a_parent_data,
1567		.num_parents = ARRAY_SIZE(gcc_xo_gpll6_gpll0a_parent_data),
1568		.ops = &clk_rcg2_ops,
1569	},
1570};
1571
1572static const struct freq_tbl ftbl_gcc_ultaudio_ahb_clk[] = {
1573	F(3200000, P_XO, 6, 0, 0),
1574	F(6400000, P_XO, 3, 0, 0),
1575	F(9600000, P_XO, 2, 0, 0),
1576	F(19200000, P_XO, 1, 0, 0),
1577	F(40000000, P_GPLL0, 10, 1, 2),
1578	F(66670000, P_GPLL0, 12, 0, 0),
1579	F(80000000, P_GPLL0, 10, 0, 0),
1580	F(100000000, P_GPLL0, 8, 0, 0),
1581	{ }
1582};
1583
1584static struct clk_rcg2 ultaudio_ahbfabric_clk_src = {
1585	.cmd_rcgr = 0x1c010,
1586	.hid_width = 5,
1587	.mnd_width = 8,
1588	.parent_map = gcc_xo_gpll0_gpll1_sleep_map,
1589	.freq_tbl = ftbl_gcc_ultaudio_ahb_clk,
1590	.clkr.hw.init = &(struct clk_init_data){
1591		.name = "ultaudio_ahbfabric_clk_src",
1592		.parent_data = gcc_xo_gpll0_gpll1_sleep_parent_data,
1593		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1_sleep_parent_data),
1594		.ops = &clk_rcg2_ops,
1595	},
1596};
1597
1598static struct clk_branch gcc_ultaudio_ahbfabric_ixfabric_clk = {
1599	.halt_reg = 0x1c028,
1600	.clkr = {
1601		.enable_reg = 0x1c028,
1602		.enable_mask = BIT(0),
1603		.hw.init = &(struct clk_init_data){
1604			.name = "gcc_ultaudio_ahbfabric_ixfabric_clk",
1605			.parent_hws = (const struct clk_hw*[]){
1606				&ultaudio_ahbfabric_clk_src.clkr.hw,
1607			},
1608			.num_parents = 1,
1609			.flags = CLK_SET_RATE_PARENT,
1610			.ops = &clk_branch2_ops,
1611		},
1612	},
1613};
1614
1615static struct clk_branch gcc_ultaudio_ahbfabric_ixfabric_lpm_clk = {
1616	.halt_reg = 0x1c024,
1617	.clkr = {
1618		.enable_reg = 0x1c024,
1619		.enable_mask = BIT(0),
1620		.hw.init = &(struct clk_init_data){
1621			.name = "gcc_ultaudio_ahbfabric_ixfabric_lpm_clk",
1622			.parent_hws = (const struct clk_hw*[]){
1623				&ultaudio_ahbfabric_clk_src.clkr.hw,
1624			},
1625			.num_parents = 1,
1626			.flags = CLK_SET_RATE_PARENT,
1627			.ops = &clk_branch2_ops,
1628		},
1629	},
1630};
1631
1632static const struct freq_tbl ftbl_gcc_ultaudio_lpaif_i2s_clk[] = {
1633	F(128000, P_XO, 10, 1, 15),
1634	F(256000, P_XO, 5, 1, 15),
1635	F(384000, P_XO, 5, 1, 10),
1636	F(512000, P_XO, 5, 2, 15),
1637	F(576000, P_XO, 5, 3, 20),
1638	F(705600, P_GPLL1, 16, 1, 80),
1639	F(768000, P_XO, 5, 1, 5),
1640	F(800000, P_XO, 5, 5, 24),
1641	F(1024000, P_XO, 5, 4, 15),
1642	F(1152000, P_XO, 1, 3, 50),
1643	F(1411200, P_GPLL1, 16, 1, 40),
1644	F(1536000, P_XO, 1, 2, 25),
1645	F(1600000, P_XO, 12, 0, 0),
1646	F(1728000, P_XO, 5, 9, 20),
1647	F(2048000, P_XO, 5, 8, 15),
1648	F(2304000, P_XO, 5, 3, 5),
1649	F(2400000, P_XO, 8, 0, 0),
1650	F(2822400, P_GPLL1, 16, 1, 20),
1651	F(3072000, P_XO, 5, 4, 5),
1652	F(4096000, P_GPLL1, 9, 2, 49),
1653	F(4800000, P_XO, 4, 0, 0),
1654	F(5644800, P_GPLL1, 16, 1, 10),
1655	F(6144000, P_GPLL1, 7, 1, 21),
1656	F(8192000, P_GPLL1, 9, 4, 49),
1657	F(9600000, P_XO, 2, 0, 0),
1658	F(11289600, P_GPLL1, 16, 1, 5),
1659	F(12288000, P_GPLL1, 7, 2, 21),
1660	{ }
1661};
1662
1663static struct clk_rcg2 ultaudio_lpaif_pri_i2s_clk_src = {
1664	.cmd_rcgr = 0x1c054,
1665	.hid_width = 5,
1666	.mnd_width = 8,
1667	.parent_map = gcc_xo_gpll1_epi2s_emclk_sleep_map,
1668	.freq_tbl = ftbl_gcc_ultaudio_lpaif_i2s_clk,
1669	.clkr.hw.init = &(struct clk_init_data){
1670		.name = "ultaudio_lpaif_pri_i2s_clk_src",
1671		.parent_data = gcc_xo_gpll1_epi2s_emclk_sleep_parent_data,
1672		.num_parents = ARRAY_SIZE(gcc_xo_gpll1_epi2s_emclk_sleep_parent_data),
1673		.ops = &clk_rcg2_ops,
1674	},
1675};
1676
1677static struct clk_branch gcc_ultaudio_lpaif_pri_i2s_clk = {
1678	.halt_reg = 0x1c068,
1679	.clkr = {
1680		.enable_reg = 0x1c068,
1681		.enable_mask = BIT(0),
1682		.hw.init = &(struct clk_init_data){
1683			.name = "gcc_ultaudio_lpaif_pri_i2s_clk",
1684			.parent_hws = (const struct clk_hw*[]){
1685				&ultaudio_lpaif_pri_i2s_clk_src.clkr.hw,
1686			},
1687			.num_parents = 1,
1688			.flags = CLK_SET_RATE_PARENT,
1689			.ops = &clk_branch2_ops,
1690		},
1691	},
1692};
1693
1694static struct clk_rcg2 ultaudio_lpaif_sec_i2s_clk_src = {
1695	.cmd_rcgr = 0x1c06c,
1696	.hid_width = 5,
1697	.mnd_width = 8,
1698	.parent_map = gcc_xo_gpll1_esi2s_emclk_sleep_map,
1699	.freq_tbl = ftbl_gcc_ultaudio_lpaif_i2s_clk,
1700	.clkr.hw.init = &(struct clk_init_data){
1701		.name = "ultaudio_lpaif_sec_i2s_clk_src",
1702		.parent_data = gcc_xo_gpll1_esi2s_emclk_sleep_parent_data,
1703		.num_parents = ARRAY_SIZE(gcc_xo_gpll1_esi2s_emclk_sleep_parent_data),
1704		.ops = &clk_rcg2_ops,
1705	},
1706};
1707
1708static struct clk_branch gcc_ultaudio_lpaif_sec_i2s_clk = {
1709	.halt_reg = 0x1c080,
1710	.clkr = {
1711		.enable_reg = 0x1c080,
1712		.enable_mask = BIT(0),
1713		.hw.init = &(struct clk_init_data){
1714			.name = "gcc_ultaudio_lpaif_sec_i2s_clk",
1715			.parent_hws = (const struct clk_hw*[]){
1716				&ultaudio_lpaif_sec_i2s_clk_src.clkr.hw,
1717			},
1718			.num_parents = 1,
1719			.flags = CLK_SET_RATE_PARENT,
1720			.ops = &clk_branch2_ops,
1721		},
1722	},
1723};
1724
1725static struct clk_rcg2 ultaudio_lpaif_aux_i2s_clk_src = {
1726	.cmd_rcgr = 0x1c084,
1727	.hid_width = 5,
1728	.mnd_width = 8,
1729	.parent_map = gcc_xo_gpll1_emclk_sleep_map,
1730	.freq_tbl = ftbl_gcc_ultaudio_lpaif_i2s_clk,
1731	.clkr.hw.init = &(struct clk_init_data){
1732		.name = "ultaudio_lpaif_aux_i2s_clk_src",
1733		.parent_data = gcc_xo_gpll1_esi2s_emclk_sleep_parent_data,
1734		.num_parents = ARRAY_SIZE(gcc_xo_gpll1_esi2s_emclk_sleep_parent_data),
1735		.ops = &clk_rcg2_ops,
1736	},
1737};
1738
1739static struct clk_branch gcc_ultaudio_lpaif_aux_i2s_clk = {
1740	.halt_reg = 0x1c098,
1741	.clkr = {
1742		.enable_reg = 0x1c098,
1743		.enable_mask = BIT(0),
1744		.hw.init = &(struct clk_init_data){
1745			.name = "gcc_ultaudio_lpaif_aux_i2s_clk",
1746			.parent_hws = (const struct clk_hw*[]){
1747				&ultaudio_lpaif_aux_i2s_clk_src.clkr.hw,
1748			},
1749			.num_parents = 1,
1750			.flags = CLK_SET_RATE_PARENT,
1751			.ops = &clk_branch2_ops,
1752		},
1753	},
1754};
1755
1756static const struct freq_tbl ftbl_gcc_ultaudio_xo_clk[] = {
1757	F(19200000, P_XO, 1, 0, 0),
1758	{ }
1759};
1760
1761static struct clk_rcg2 ultaudio_xo_clk_src = {
1762	.cmd_rcgr = 0x1c034,
1763	.hid_width = 5,
1764	.parent_map = gcc_xo_sleep_map,
1765	.freq_tbl = ftbl_gcc_ultaudio_xo_clk,
1766	.clkr.hw.init = &(struct clk_init_data){
1767		.name = "ultaudio_xo_clk_src",
1768		.parent_data = gcc_xo_sleep_parent_data,
1769		.num_parents = ARRAY_SIZE(gcc_xo_sleep_parent_data),
1770		.ops = &clk_rcg2_ops,
1771	},
1772};
1773
1774static struct clk_branch gcc_ultaudio_avsync_xo_clk = {
1775	.halt_reg = 0x1c04c,
1776	.clkr = {
1777		.enable_reg = 0x1c04c,
1778		.enable_mask = BIT(0),
1779		.hw.init = &(struct clk_init_data){
1780			.name = "gcc_ultaudio_avsync_xo_clk",
1781			.parent_hws = (const struct clk_hw*[]){
1782				&ultaudio_xo_clk_src.clkr.hw,
1783			},
1784			.num_parents = 1,
1785			.flags = CLK_SET_RATE_PARENT,
1786			.ops = &clk_branch2_ops,
1787		},
1788	},
1789};
1790
1791static struct clk_branch gcc_ultaudio_stc_xo_clk = {
1792	.halt_reg = 0x1c050,
1793	.clkr = {
1794		.enable_reg = 0x1c050,
1795		.enable_mask = BIT(0),
1796		.hw.init = &(struct clk_init_data){
1797			.name = "gcc_ultaudio_stc_xo_clk",
1798			.parent_hws = (const struct clk_hw*[]){
1799				&ultaudio_xo_clk_src.clkr.hw,
1800			},
1801			.num_parents = 1,
1802			.flags = CLK_SET_RATE_PARENT,
1803			.ops = &clk_branch2_ops,
1804		},
1805	},
1806};
1807
1808static const struct freq_tbl ftbl_codec_clk[] = {
1809	F(9600000, P_XO, 2, 0, 0),
1810	F(12288000, P_XO, 1, 16, 25),
1811	F(19200000, P_XO, 1, 0, 0),
1812	F(11289600, P_EXT_MCLK, 1, 0, 0),
1813	{ }
1814};
1815
1816static struct clk_rcg2 codec_digcodec_clk_src = {
1817	.cmd_rcgr = 0x1c09c,
1818	.mnd_width = 8,
1819	.hid_width = 5,
1820	.parent_map = gcc_xo_gpll1_emclk_sleep_map,
1821	.freq_tbl = ftbl_codec_clk,
1822	.clkr.hw.init = &(struct clk_init_data){
1823		.name = "codec_digcodec_clk_src",
1824		.parent_data = gcc_xo_gpll1_emclk_sleep_parent_data,
1825		.num_parents = ARRAY_SIZE(gcc_xo_gpll1_emclk_sleep_parent_data),
1826		.ops = &clk_rcg2_ops,
1827	},
1828};
1829
1830static struct clk_branch gcc_codec_digcodec_clk = {
1831	.halt_reg = 0x1c0b0,
1832	.clkr = {
1833		.enable_reg = 0x1c0b0,
1834		.enable_mask = BIT(0),
1835		.hw.init = &(struct clk_init_data){
1836			.name = "gcc_ultaudio_codec_digcodec_clk",
1837			.parent_hws = (const struct clk_hw*[]){
1838				&codec_digcodec_clk_src.clkr.hw,
1839			},
1840			.num_parents = 1,
1841			.flags = CLK_SET_RATE_PARENT,
1842			.ops = &clk_branch2_ops,
1843		},
1844	},
1845};
1846
1847static struct clk_branch gcc_ultaudio_pcnoc_mport_clk = {
1848	.halt_reg = 0x1c000,
1849	.clkr = {
1850		.enable_reg = 0x1c000,
1851		.enable_mask = BIT(0),
1852		.hw.init = &(struct clk_init_data){
1853			.name = "gcc_ultaudio_pcnoc_mport_clk",
1854			.parent_hws = (const struct clk_hw*[]){
1855				&pcnoc_bfdcd_clk_src.clkr.hw,
1856			},
1857			.num_parents = 1,
1858			.ops = &clk_branch2_ops,
1859		},
1860	},
1861};
1862
1863static struct clk_branch gcc_ultaudio_pcnoc_sway_clk = {
1864	.halt_reg = 0x1c004,
1865	.clkr = {
1866		.enable_reg = 0x1c004,
1867		.enable_mask = BIT(0),
1868		.hw.init = &(struct clk_init_data){
1869			.name = "gcc_ultaudio_pcnoc_sway_clk",
1870			.parent_hws = (const struct clk_hw*[]){
1871				&pcnoc_bfdcd_clk_src.clkr.hw,
1872			},
1873			.num_parents = 1,
1874			.ops = &clk_branch2_ops,
1875		},
1876	},
1877};
1878
1879static const struct freq_tbl ftbl_gcc_venus0_vcodec0_clk[] = {
1880	F(133330000, P_GPLL0, 6, 0, 0),
1881	F(200000000, P_GPLL0, 4, 0, 0),
1882	F(266670000, P_GPLL0, 3, 0, 0),
1883	{ }
1884};
1885
1886static struct clk_rcg2 vcodec0_clk_src = {
1887	.cmd_rcgr = 0x4C000,
1888	.mnd_width = 8,
1889	.hid_width = 5,
1890	.parent_map = gcc_xo_gpll0_map,
1891	.freq_tbl = ftbl_gcc_venus0_vcodec0_clk,
1892	.clkr.hw.init = &(struct clk_init_data){
1893		.name = "vcodec0_clk_src",
1894		.parent_data = gcc_xo_gpll0_parent_data,
1895		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
1896		.ops = &clk_rcg2_ops,
1897	},
1898};
1899
1900static struct clk_branch gcc_blsp1_ahb_clk = {
1901	.halt_reg = 0x01008,
1902	.halt_check = BRANCH_HALT_VOTED,
1903	.clkr = {
1904		.enable_reg = 0x45004,
1905		.enable_mask = BIT(10),
1906		.hw.init = &(struct clk_init_data){
1907			.name = "gcc_blsp1_ahb_clk",
1908			.parent_hws = (const struct clk_hw*[]){
1909				&pcnoc_bfdcd_clk_src.clkr.hw,
1910			},
1911			.num_parents = 1,
1912			.ops = &clk_branch2_ops,
1913		},
1914	},
1915};
1916
1917static struct clk_branch gcc_blsp1_sleep_clk = {
1918	.halt_reg = 0x01004,
1919	.clkr = {
1920		.enable_reg = 0x01004,
1921		.enable_mask = BIT(0),
1922		.hw.init = &(struct clk_init_data){
1923			.name = "gcc_blsp1_sleep_clk",
1924			.ops = &clk_branch2_ops,
1925		},
1926	},
1927};
1928
1929static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
1930	.halt_reg = 0x02008,
1931	.clkr = {
1932		.enable_reg = 0x02008,
1933		.enable_mask = BIT(0),
1934		.hw.init = &(struct clk_init_data){
1935			.name = "gcc_blsp1_qup1_i2c_apps_clk",
1936			.parent_hws = (const struct clk_hw*[]){
1937				&blsp1_qup1_i2c_apps_clk_src.clkr.hw,
1938			},
1939			.num_parents = 1,
1940			.flags = CLK_SET_RATE_PARENT,
1941			.ops = &clk_branch2_ops,
1942		},
1943	},
1944};
1945
1946static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
1947	.halt_reg = 0x02004,
1948	.clkr = {
1949		.enable_reg = 0x02004,
1950		.enable_mask = BIT(0),
1951		.hw.init = &(struct clk_init_data){
1952			.name = "gcc_blsp1_qup1_spi_apps_clk",
1953			.parent_hws = (const struct clk_hw*[]){
1954				&blsp1_qup1_spi_apps_clk_src.clkr.hw,
1955			},
1956			.num_parents = 1,
1957			.flags = CLK_SET_RATE_PARENT,
1958			.ops = &clk_branch2_ops,
1959		},
1960	},
1961};
1962
1963static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
1964	.halt_reg = 0x03010,
1965	.clkr = {
1966		.enable_reg = 0x03010,
1967		.enable_mask = BIT(0),
1968		.hw.init = &(struct clk_init_data){
1969			.name = "gcc_blsp1_qup2_i2c_apps_clk",
1970			.parent_hws = (const struct clk_hw*[]){
1971				&blsp1_qup2_i2c_apps_clk_src.clkr.hw,
1972			},
1973			.num_parents = 1,
1974			.flags = CLK_SET_RATE_PARENT,
1975			.ops = &clk_branch2_ops,
1976		},
1977	},
1978};
1979
1980static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
1981	.halt_reg = 0x0300c,
1982	.clkr = {
1983		.enable_reg = 0x0300c,
1984		.enable_mask = BIT(0),
1985		.hw.init = &(struct clk_init_data){
1986			.name = "gcc_blsp1_qup2_spi_apps_clk",
1987			.parent_hws = (const struct clk_hw*[]){
1988				&blsp1_qup2_spi_apps_clk_src.clkr.hw,
1989			},
1990			.num_parents = 1,
1991			.flags = CLK_SET_RATE_PARENT,
1992			.ops = &clk_branch2_ops,
1993		},
1994	},
1995};
1996
1997static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
1998	.halt_reg = 0x04020,
1999	.clkr = {
2000		.enable_reg = 0x04020,
2001		.enable_mask = BIT(0),
2002		.hw.init = &(struct clk_init_data){
2003			.name = "gcc_blsp1_qup3_i2c_apps_clk",
2004			.parent_hws = (const struct clk_hw*[]){
2005				&blsp1_qup3_i2c_apps_clk_src.clkr.hw,
2006			},
2007			.num_parents = 1,
2008			.flags = CLK_SET_RATE_PARENT,
2009			.ops = &clk_branch2_ops,
2010		},
2011	},
2012};
2013
2014static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
2015	.halt_reg = 0x0401c,
2016	.clkr = {
2017		.enable_reg = 0x0401c,
2018		.enable_mask = BIT(0),
2019		.hw.init = &(struct clk_init_data){
2020			.name = "gcc_blsp1_qup3_spi_apps_clk",
2021			.parent_hws = (const struct clk_hw*[]){
2022				&blsp1_qup3_spi_apps_clk_src.clkr.hw,
2023			},
2024			.num_parents = 1,
2025			.flags = CLK_SET_RATE_PARENT,
2026			.ops = &clk_branch2_ops,
2027		},
2028	},
2029};
2030
2031static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
2032	.halt_reg = 0x05020,
2033	.clkr = {
2034		.enable_reg = 0x05020,
2035		.enable_mask = BIT(0),
2036		.hw.init = &(struct clk_init_data){
2037			.name = "gcc_blsp1_qup4_i2c_apps_clk",
2038			.parent_hws = (const struct clk_hw*[]){
2039				&blsp1_qup4_i2c_apps_clk_src.clkr.hw,
2040			},
2041			.num_parents = 1,
2042			.flags = CLK_SET_RATE_PARENT,
2043			.ops = &clk_branch2_ops,
2044		},
2045	},
2046};
2047
2048static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
2049	.halt_reg = 0x0501c,
2050	.clkr = {
2051		.enable_reg = 0x0501c,
2052		.enable_mask = BIT(0),
2053		.hw.init = &(struct clk_init_data){
2054			.name = "gcc_blsp1_qup4_spi_apps_clk",
2055			.parent_hws = (const struct clk_hw*[]){
2056				&blsp1_qup4_spi_apps_clk_src.clkr.hw,
2057			},
2058			.num_parents = 1,
2059			.flags = CLK_SET_RATE_PARENT,
2060			.ops = &clk_branch2_ops,
2061		},
2062	},
2063};
2064
2065static struct clk_branch gcc_blsp1_qup5_i2c_apps_clk = {
2066	.halt_reg = 0x06020,
2067	.clkr = {
2068		.enable_reg = 0x06020,
2069		.enable_mask = BIT(0),
2070		.hw.init = &(struct clk_init_data){
2071			.name = "gcc_blsp1_qup5_i2c_apps_clk",
2072			.parent_hws = (const struct clk_hw*[]){
2073				&blsp1_qup5_i2c_apps_clk_src.clkr.hw,
2074			},
2075			.num_parents = 1,
2076			.flags = CLK_SET_RATE_PARENT,
2077			.ops = &clk_branch2_ops,
2078		},
2079	},
2080};
2081
2082static struct clk_branch gcc_blsp1_qup5_spi_apps_clk = {
2083	.halt_reg = 0x0601c,
2084	.clkr = {
2085		.enable_reg = 0x0601c,
2086		.enable_mask = BIT(0),
2087		.hw.init = &(struct clk_init_data){
2088			.name = "gcc_blsp1_qup5_spi_apps_clk",
2089			.parent_hws = (const struct clk_hw*[]){
2090				&blsp1_qup5_spi_apps_clk_src.clkr.hw,
2091			},
2092			.num_parents = 1,
2093			.flags = CLK_SET_RATE_PARENT,
2094			.ops = &clk_branch2_ops,
2095		},
2096	},
2097};
2098
2099static struct clk_branch gcc_blsp1_qup6_i2c_apps_clk = {
2100	.halt_reg = 0x07020,
2101	.clkr = {
2102		.enable_reg = 0x07020,
2103		.enable_mask = BIT(0),
2104		.hw.init = &(struct clk_init_data){
2105			.name = "gcc_blsp1_qup6_i2c_apps_clk",
2106			.parent_hws = (const struct clk_hw*[]){
2107				&blsp1_qup6_i2c_apps_clk_src.clkr.hw,
2108			},
2109			.num_parents = 1,
2110			.flags = CLK_SET_RATE_PARENT,
2111			.ops = &clk_branch2_ops,
2112		},
2113	},
2114};
2115
2116static struct clk_branch gcc_blsp1_qup6_spi_apps_clk = {
2117	.halt_reg = 0x0701c,
2118	.clkr = {
2119		.enable_reg = 0x0701c,
2120		.enable_mask = BIT(0),
2121		.hw.init = &(struct clk_init_data){
2122			.name = "gcc_blsp1_qup6_spi_apps_clk",
2123			.parent_hws = (const struct clk_hw*[]){
2124				&blsp1_qup6_spi_apps_clk_src.clkr.hw,
2125			},
2126			.num_parents = 1,
2127			.flags = CLK_SET_RATE_PARENT,
2128			.ops = &clk_branch2_ops,
2129		},
2130	},
2131};
2132
2133static struct clk_branch gcc_blsp1_uart1_apps_clk = {
2134	.halt_reg = 0x0203c,
2135	.clkr = {
2136		.enable_reg = 0x0203c,
2137		.enable_mask = BIT(0),
2138		.hw.init = &(struct clk_init_data){
2139			.name = "gcc_blsp1_uart1_apps_clk",
2140			.parent_hws = (const struct clk_hw*[]){
2141				&blsp1_uart1_apps_clk_src.clkr.hw,
2142			},
2143			.num_parents = 1,
2144			.flags = CLK_SET_RATE_PARENT,
2145			.ops = &clk_branch2_ops,
2146		},
2147	},
2148};
2149
2150static struct clk_branch gcc_blsp1_uart2_apps_clk = {
2151	.halt_reg = 0x0302c,
2152	.clkr = {
2153		.enable_reg = 0x0302c,
2154		.enable_mask = BIT(0),
2155		.hw.init = &(struct clk_init_data){
2156			.name = "gcc_blsp1_uart2_apps_clk",
2157			.parent_hws = (const struct clk_hw*[]){
2158				&blsp1_uart2_apps_clk_src.clkr.hw,
2159			},
2160			.num_parents = 1,
2161			.flags = CLK_SET_RATE_PARENT,
2162			.ops = &clk_branch2_ops,
2163		},
2164	},
2165};
2166
2167static struct clk_branch gcc_boot_rom_ahb_clk = {
2168	.halt_reg = 0x1300c,
2169	.halt_check = BRANCH_HALT_VOTED,
2170	.clkr = {
2171		.enable_reg = 0x45004,
2172		.enable_mask = BIT(7),
2173		.hw.init = &(struct clk_init_data){
2174			.name = "gcc_boot_rom_ahb_clk",
2175			.parent_hws = (const struct clk_hw*[]){
2176				&pcnoc_bfdcd_clk_src.clkr.hw,
2177			},
2178			.num_parents = 1,
2179			.ops = &clk_branch2_ops,
2180		},
2181	},
2182};
2183
2184static struct clk_branch gcc_camss_cci_ahb_clk = {
2185	.halt_reg = 0x5101c,
2186	.clkr = {
2187		.enable_reg = 0x5101c,
2188		.enable_mask = BIT(0),
2189		.hw.init = &(struct clk_init_data){
2190			.name = "gcc_camss_cci_ahb_clk",
2191			.parent_hws = (const struct clk_hw*[]){
2192				&camss_ahb_clk_src.clkr.hw,
2193			},
2194			.num_parents = 1,
2195			.flags = CLK_SET_RATE_PARENT,
2196			.ops = &clk_branch2_ops,
2197		},
2198	},
2199};
2200
2201static struct clk_branch gcc_camss_cci_clk = {
2202	.halt_reg = 0x51018,
2203	.clkr = {
2204		.enable_reg = 0x51018,
2205		.enable_mask = BIT(0),
2206		.hw.init = &(struct clk_init_data){
2207			.name = "gcc_camss_cci_clk",
2208			.parent_hws = (const struct clk_hw*[]){
2209				&cci_clk_src.clkr.hw,
2210			},
2211			.num_parents = 1,
2212			.flags = CLK_SET_RATE_PARENT,
2213			.ops = &clk_branch2_ops,
2214		},
2215	},
2216};
2217
2218static struct clk_branch gcc_camss_csi0_ahb_clk = {
2219	.halt_reg = 0x4e040,
2220	.clkr = {
2221		.enable_reg = 0x4e040,
2222		.enable_mask = BIT(0),
2223		.hw.init = &(struct clk_init_data){
2224			.name = "gcc_camss_csi0_ahb_clk",
2225			.parent_hws = (const struct clk_hw*[]){
2226				&camss_ahb_clk_src.clkr.hw,
2227			},
2228			.num_parents = 1,
2229			.flags = CLK_SET_RATE_PARENT,
2230			.ops = &clk_branch2_ops,
2231		},
2232	},
2233};
2234
2235static struct clk_branch gcc_camss_csi0_clk = {
2236	.halt_reg = 0x4e03c,
2237	.clkr = {
2238		.enable_reg = 0x4e03c,
2239		.enable_mask = BIT(0),
2240		.hw.init = &(struct clk_init_data){
2241			.name = "gcc_camss_csi0_clk",
2242			.parent_hws = (const struct clk_hw*[]){
2243				&csi0_clk_src.clkr.hw,
2244			},
2245			.num_parents = 1,
2246			.flags = CLK_SET_RATE_PARENT,
2247			.ops = &clk_branch2_ops,
2248		},
2249	},
2250};
2251
2252static struct clk_branch gcc_camss_csi0phy_clk = {
2253	.halt_reg = 0x4e048,
2254	.clkr = {
2255		.enable_reg = 0x4e048,
2256		.enable_mask = BIT(0),
2257		.hw.init = &(struct clk_init_data){
2258			.name = "gcc_camss_csi0phy_clk",
2259			.parent_hws = (const struct clk_hw*[]){
2260				&csi0_clk_src.clkr.hw,
2261			},
2262			.num_parents = 1,
2263			.flags = CLK_SET_RATE_PARENT,
2264			.ops = &clk_branch2_ops,
2265		},
2266	},
2267};
2268
2269static struct clk_branch gcc_camss_csi0pix_clk = {
2270	.halt_reg = 0x4e058,
2271	.clkr = {
2272		.enable_reg = 0x4e058,
2273		.enable_mask = BIT(0),
2274		.hw.init = &(struct clk_init_data){
2275			.name = "gcc_camss_csi0pix_clk",
2276			.parent_hws = (const struct clk_hw*[]){
2277				&csi0_clk_src.clkr.hw,
2278			},
2279			.num_parents = 1,
2280			.flags = CLK_SET_RATE_PARENT,
2281			.ops = &clk_branch2_ops,
2282		},
2283	},
2284};
2285
2286static struct clk_branch gcc_camss_csi0rdi_clk = {
2287	.halt_reg = 0x4e050,
2288	.clkr = {
2289		.enable_reg = 0x4e050,
2290		.enable_mask = BIT(0),
2291		.hw.init = &(struct clk_init_data){
2292			.name = "gcc_camss_csi0rdi_clk",
2293			.parent_hws = (const struct clk_hw*[]){
2294				&csi0_clk_src.clkr.hw,
2295			},
2296			.num_parents = 1,
2297			.flags = CLK_SET_RATE_PARENT,
2298			.ops = &clk_branch2_ops,
2299		},
2300	},
2301};
2302
2303static struct clk_branch gcc_camss_csi1_ahb_clk = {
2304	.halt_reg = 0x4f040,
2305	.clkr = {
2306		.enable_reg = 0x4f040,
2307		.enable_mask = BIT(0),
2308		.hw.init = &(struct clk_init_data){
2309			.name = "gcc_camss_csi1_ahb_clk",
2310			.parent_hws = (const struct clk_hw*[]){
2311				&camss_ahb_clk_src.clkr.hw,
2312			},
2313			.num_parents = 1,
2314			.flags = CLK_SET_RATE_PARENT,
2315			.ops = &clk_branch2_ops,
2316		},
2317	},
2318};
2319
2320static struct clk_branch gcc_camss_csi1_clk = {
2321	.halt_reg = 0x4f03c,
2322	.clkr = {
2323		.enable_reg = 0x4f03c,
2324		.enable_mask = BIT(0),
2325		.hw.init = &(struct clk_init_data){
2326			.name = "gcc_camss_csi1_clk",
2327			.parent_hws = (const struct clk_hw*[]){
2328				&csi1_clk_src.clkr.hw,
2329			},
2330			.num_parents = 1,
2331			.flags = CLK_SET_RATE_PARENT,
2332			.ops = &clk_branch2_ops,
2333		},
2334	},
2335};
2336
2337static struct clk_branch gcc_camss_csi1phy_clk = {
2338	.halt_reg = 0x4f048,
2339	.clkr = {
2340		.enable_reg = 0x4f048,
2341		.enable_mask = BIT(0),
2342		.hw.init = &(struct clk_init_data){
2343			.name = "gcc_camss_csi1phy_clk",
2344			.parent_hws = (const struct clk_hw*[]){
2345				&csi1_clk_src.clkr.hw,
2346			},
2347			.num_parents = 1,
2348			.flags = CLK_SET_RATE_PARENT,
2349			.ops = &clk_branch2_ops,
2350		},
2351	},
2352};
2353
2354static struct clk_branch gcc_camss_csi1pix_clk = {
2355	.halt_reg = 0x4f058,
2356	.clkr = {
2357		.enable_reg = 0x4f058,
2358		.enable_mask = BIT(0),
2359		.hw.init = &(struct clk_init_data){
2360			.name = "gcc_camss_csi1pix_clk",
2361			.parent_hws = (const struct clk_hw*[]){
2362				&csi1_clk_src.clkr.hw,
2363			},
2364			.num_parents = 1,
2365			.flags = CLK_SET_RATE_PARENT,
2366			.ops = &clk_branch2_ops,
2367		},
2368	},
2369};
2370
2371static struct clk_branch gcc_camss_csi1rdi_clk = {
2372	.halt_reg = 0x4f050,
2373	.clkr = {
2374		.enable_reg = 0x4f050,
2375		.enable_mask = BIT(0),
2376		.hw.init = &(struct clk_init_data){
2377			.name = "gcc_camss_csi1rdi_clk",
2378			.parent_hws = (const struct clk_hw*[]){
2379				&csi1_clk_src.clkr.hw,
2380			},
2381			.num_parents = 1,
2382			.flags = CLK_SET_RATE_PARENT,
2383			.ops = &clk_branch2_ops,
2384		},
2385	},
2386};
2387
2388static struct clk_branch gcc_camss_csi_vfe0_clk = {
2389	.halt_reg = 0x58050,
2390	.clkr = {
2391		.enable_reg = 0x58050,
2392		.enable_mask = BIT(0),
2393		.hw.init = &(struct clk_init_data){
2394			.name = "gcc_camss_csi_vfe0_clk",
2395			.parent_hws = (const struct clk_hw*[]){
2396				&vfe0_clk_src.clkr.hw,
2397			},
2398			.num_parents = 1,
2399			.flags = CLK_SET_RATE_PARENT,
2400			.ops = &clk_branch2_ops,
2401		},
2402	},
2403};
2404
2405static struct clk_branch gcc_camss_gp0_clk = {
2406	.halt_reg = 0x54018,
2407	.clkr = {
2408		.enable_reg = 0x54018,
2409		.enable_mask = BIT(0),
2410		.hw.init = &(struct clk_init_data){
2411			.name = "gcc_camss_gp0_clk",
2412			.parent_hws = (const struct clk_hw*[]){
2413				&camss_gp0_clk_src.clkr.hw,
2414			},
2415			.num_parents = 1,
2416			.flags = CLK_SET_RATE_PARENT,
2417			.ops = &clk_branch2_ops,
2418		},
2419	},
2420};
2421
2422static struct clk_branch gcc_camss_gp1_clk = {
2423	.halt_reg = 0x55018,
2424	.clkr = {
2425		.enable_reg = 0x55018,
2426		.enable_mask = BIT(0),
2427		.hw.init = &(struct clk_init_data){
2428			.name = "gcc_camss_gp1_clk",
2429			.parent_hws = (const struct clk_hw*[]){
2430				&camss_gp1_clk_src.clkr.hw,
2431			},
2432			.num_parents = 1,
2433			.flags = CLK_SET_RATE_PARENT,
2434			.ops = &clk_branch2_ops,
2435		},
2436	},
2437};
2438
2439static struct clk_branch gcc_camss_ispif_ahb_clk = {
2440	.halt_reg = 0x50004,
2441	.clkr = {
2442		.enable_reg = 0x50004,
2443		.enable_mask = BIT(0),
2444		.hw.init = &(struct clk_init_data){
2445			.name = "gcc_camss_ispif_ahb_clk",
2446			.parent_hws = (const struct clk_hw*[]){
2447				&camss_ahb_clk_src.clkr.hw,
2448			},
2449			.num_parents = 1,
2450			.flags = CLK_SET_RATE_PARENT,
2451			.ops = &clk_branch2_ops,
2452		},
2453	},
2454};
2455
2456static struct clk_branch gcc_camss_jpeg0_clk = {
2457	.halt_reg = 0x57020,
2458	.clkr = {
2459		.enable_reg = 0x57020,
2460		.enable_mask = BIT(0),
2461		.hw.init = &(struct clk_init_data){
2462			.name = "gcc_camss_jpeg0_clk",
2463			.parent_hws = (const struct clk_hw*[]){
2464				&jpeg0_clk_src.clkr.hw,
2465			},
2466			.num_parents = 1,
2467			.flags = CLK_SET_RATE_PARENT,
2468			.ops = &clk_branch2_ops,
2469		},
2470	},
2471};
2472
2473static struct clk_branch gcc_camss_jpeg_ahb_clk = {
2474	.halt_reg = 0x57024,
2475	.clkr = {
2476		.enable_reg = 0x57024,
2477		.enable_mask = BIT(0),
2478		.hw.init = &(struct clk_init_data){
2479			.name = "gcc_camss_jpeg_ahb_clk",
2480			.parent_hws = (const struct clk_hw*[]){
2481				&camss_ahb_clk_src.clkr.hw,
2482			},
2483			.num_parents = 1,
2484			.flags = CLK_SET_RATE_PARENT,
2485			.ops = &clk_branch2_ops,
2486		},
2487	},
2488};
2489
2490static struct clk_branch gcc_camss_jpeg_axi_clk = {
2491	.halt_reg = 0x57028,
2492	.clkr = {
2493		.enable_reg = 0x57028,
2494		.enable_mask = BIT(0),
2495		.hw.init = &(struct clk_init_data){
2496			.name = "gcc_camss_jpeg_axi_clk",
2497			.parent_hws = (const struct clk_hw*[]){
2498				&system_mm_noc_bfdcd_clk_src.clkr.hw,
2499			},
2500			.num_parents = 1,
2501			.flags = CLK_SET_RATE_PARENT,
2502			.ops = &clk_branch2_ops,
2503		},
2504	},
2505};
2506
2507static struct clk_branch gcc_camss_mclk0_clk = {
2508	.halt_reg = 0x52018,
2509	.clkr = {
2510		.enable_reg = 0x52018,
2511		.enable_mask = BIT(0),
2512		.hw.init = &(struct clk_init_data){
2513			.name = "gcc_camss_mclk0_clk",
2514			.parent_hws = (const struct clk_hw*[]){
2515				&mclk0_clk_src.clkr.hw,
2516			},
2517			.num_parents = 1,
2518			.flags = CLK_SET_RATE_PARENT,
2519			.ops = &clk_branch2_ops,
2520		},
2521	},
2522};
2523
2524static struct clk_branch gcc_camss_mclk1_clk = {
2525	.halt_reg = 0x53018,
2526	.clkr = {
2527		.enable_reg = 0x53018,
2528		.enable_mask = BIT(0),
2529		.hw.init = &(struct clk_init_data){
2530			.name = "gcc_camss_mclk1_clk",
2531			.parent_hws = (const struct clk_hw*[]){
2532				&mclk1_clk_src.clkr.hw,
2533			},
2534			.num_parents = 1,
2535			.flags = CLK_SET_RATE_PARENT,
2536			.ops = &clk_branch2_ops,
2537		},
2538	},
2539};
2540
2541static struct clk_branch gcc_camss_micro_ahb_clk = {
2542	.halt_reg = 0x5600c,
2543	.clkr = {
2544		.enable_reg = 0x5600c,
2545		.enable_mask = BIT(0),
2546		.hw.init = &(struct clk_init_data){
2547			.name = "gcc_camss_micro_ahb_clk",
2548			.parent_hws = (const struct clk_hw*[]){
2549				&camss_ahb_clk_src.clkr.hw,
2550			},
2551			.num_parents = 1,
2552			.flags = CLK_SET_RATE_PARENT,
2553			.ops = &clk_branch2_ops,
2554		},
2555	},
2556};
2557
2558static struct clk_branch gcc_camss_csi0phytimer_clk = {
2559	.halt_reg = 0x4e01c,
2560	.clkr = {
2561		.enable_reg = 0x4e01c,
2562		.enable_mask = BIT(0),
2563		.hw.init = &(struct clk_init_data){
2564			.name = "gcc_camss_csi0phytimer_clk",
2565			.parent_hws = (const struct clk_hw*[]){
2566				&csi0phytimer_clk_src.clkr.hw,
2567			},
2568			.num_parents = 1,
2569			.flags = CLK_SET_RATE_PARENT,
2570			.ops = &clk_branch2_ops,
2571		},
2572	},
2573};
2574
2575static struct clk_branch gcc_camss_csi1phytimer_clk = {
2576	.halt_reg = 0x4f01c,
2577	.clkr = {
2578		.enable_reg = 0x4f01c,
2579		.enable_mask = BIT(0),
2580		.hw.init = &(struct clk_init_data){
2581			.name = "gcc_camss_csi1phytimer_clk",
2582			.parent_hws = (const struct clk_hw*[]){
2583				&csi1phytimer_clk_src.clkr.hw,
2584			},
2585			.num_parents = 1,
2586			.flags = CLK_SET_RATE_PARENT,
2587			.ops = &clk_branch2_ops,
2588		},
2589	},
2590};
2591
2592static struct clk_branch gcc_camss_ahb_clk = {
2593	.halt_reg = 0x5a014,
2594	.clkr = {
2595		.enable_reg = 0x5a014,
2596		.enable_mask = BIT(0),
2597		.hw.init = &(struct clk_init_data){
2598			.name = "gcc_camss_ahb_clk",
2599			.parent_hws = (const struct clk_hw*[]){
2600				&camss_ahb_clk_src.clkr.hw,
2601			},
2602			.num_parents = 1,
2603			.flags = CLK_SET_RATE_PARENT,
2604			.ops = &clk_branch2_ops,
2605		},
2606	},
2607};
2608
2609static struct clk_branch gcc_camss_top_ahb_clk = {
2610	.halt_reg = 0x56004,
2611	.clkr = {
2612		.enable_reg = 0x56004,
2613		.enable_mask = BIT(0),
2614		.hw.init = &(struct clk_init_data){
2615			.name = "gcc_camss_top_ahb_clk",
2616			.parent_hws = (const struct clk_hw*[]){
2617				&pcnoc_bfdcd_clk_src.clkr.hw,
2618			},
2619			.num_parents = 1,
2620			.flags = CLK_SET_RATE_PARENT,
2621			.ops = &clk_branch2_ops,
2622		},
2623	},
2624};
2625
2626static struct clk_branch gcc_camss_cpp_ahb_clk = {
2627	.halt_reg = 0x58040,
2628	.clkr = {
2629		.enable_reg = 0x58040,
2630		.enable_mask = BIT(0),
2631		.hw.init = &(struct clk_init_data){
2632			.name = "gcc_camss_cpp_ahb_clk",
2633			.parent_hws = (const struct clk_hw*[]){
2634				&camss_ahb_clk_src.clkr.hw,
2635			},
2636			.num_parents = 1,
2637			.flags = CLK_SET_RATE_PARENT,
2638			.ops = &clk_branch2_ops,
2639		},
2640	},
2641};
2642
2643static struct clk_branch gcc_camss_cpp_clk = {
2644	.halt_reg = 0x5803c,
2645	.clkr = {
2646		.enable_reg = 0x5803c,
2647		.enable_mask = BIT(0),
2648		.hw.init = &(struct clk_init_data){
2649			.name = "gcc_camss_cpp_clk",
2650			.parent_hws = (const struct clk_hw*[]){
2651				&cpp_clk_src.clkr.hw,
2652			},
2653			.num_parents = 1,
2654			.flags = CLK_SET_RATE_PARENT,
2655			.ops = &clk_branch2_ops,
2656		},
2657	},
2658};
2659
2660static struct clk_branch gcc_camss_vfe0_clk = {
2661	.halt_reg = 0x58038,
2662	.clkr = {
2663		.enable_reg = 0x58038,
2664		.enable_mask = BIT(0),
2665		.hw.init = &(struct clk_init_data){
2666			.name = "gcc_camss_vfe0_clk",
2667			.parent_hws = (const struct clk_hw*[]){
2668				&vfe0_clk_src.clkr.hw,
2669			},
2670			.num_parents = 1,
2671			.flags = CLK_SET_RATE_PARENT,
2672			.ops = &clk_branch2_ops,
2673		},
2674	},
2675};
2676
2677static struct clk_branch gcc_camss_vfe_ahb_clk = {
2678	.halt_reg = 0x58044,
2679	.clkr = {
2680		.enable_reg = 0x58044,
2681		.enable_mask = BIT(0),
2682		.hw.init = &(struct clk_init_data){
2683			.name = "gcc_camss_vfe_ahb_clk",
2684			.parent_hws = (const struct clk_hw*[]){
2685				&camss_ahb_clk_src.clkr.hw,
2686			},
2687			.num_parents = 1,
2688			.flags = CLK_SET_RATE_PARENT,
2689			.ops = &clk_branch2_ops,
2690		},
2691	},
2692};
2693
2694static struct clk_branch gcc_camss_vfe_axi_clk = {
2695	.halt_reg = 0x58048,
2696	.clkr = {
2697		.enable_reg = 0x58048,
2698		.enable_mask = BIT(0),
2699		.hw.init = &(struct clk_init_data){
2700			.name = "gcc_camss_vfe_axi_clk",
2701			.parent_hws = (const struct clk_hw*[]){
2702				&system_mm_noc_bfdcd_clk_src.clkr.hw,
2703			},
2704			.num_parents = 1,
2705			.flags = CLK_SET_RATE_PARENT,
2706			.ops = &clk_branch2_ops,
2707		},
2708	},
2709};
2710
2711static struct clk_branch gcc_crypto_ahb_clk = {
2712	.halt_reg = 0x16024,
2713	.halt_check = BRANCH_HALT_VOTED,
2714	.clkr = {
2715		.enable_reg = 0x45004,
2716		.enable_mask = BIT(0),
2717		.hw.init = &(struct clk_init_data){
2718			.name = "gcc_crypto_ahb_clk",
2719			.parent_hws = (const struct clk_hw*[]){
2720				&pcnoc_bfdcd_clk_src.clkr.hw,
2721			},
2722			.num_parents = 1,
2723			.flags = CLK_SET_RATE_PARENT,
2724			.ops = &clk_branch2_ops,
2725		},
2726	},
2727};
2728
2729static struct clk_branch gcc_crypto_axi_clk = {
2730	.halt_reg = 0x16020,
2731	.halt_check = BRANCH_HALT_VOTED,
2732	.clkr = {
2733		.enable_reg = 0x45004,
2734		.enable_mask = BIT(1),
2735		.hw.init = &(struct clk_init_data){
2736			.name = "gcc_crypto_axi_clk",
2737			.parent_hws = (const struct clk_hw*[]){
2738				&pcnoc_bfdcd_clk_src.clkr.hw,
2739			},
2740			.num_parents = 1,
2741			.flags = CLK_SET_RATE_PARENT,
2742			.ops = &clk_branch2_ops,
2743		},
2744	},
2745};
2746
2747static struct clk_branch gcc_crypto_clk = {
2748	.halt_reg = 0x1601c,
2749	.halt_check = BRANCH_HALT_VOTED,
2750	.clkr = {
2751		.enable_reg = 0x45004,
2752		.enable_mask = BIT(2),
2753		.hw.init = &(struct clk_init_data){
2754			.name = "gcc_crypto_clk",
2755			.parent_hws = (const struct clk_hw*[]){
2756				&crypto_clk_src.clkr.hw,
2757			},
2758			.num_parents = 1,
2759			.flags = CLK_SET_RATE_PARENT,
2760			.ops = &clk_branch2_ops,
2761		},
2762	},
2763};
2764
2765static struct clk_branch gcc_oxili_gmem_clk = {
2766	.halt_reg = 0x59024,
2767	.clkr = {
2768		.enable_reg = 0x59024,
2769		.enable_mask = BIT(0),
2770		.hw.init = &(struct clk_init_data){
2771			.name = "gcc_oxili_gmem_clk",
2772			.parent_hws = (const struct clk_hw*[]){
2773				&gfx3d_clk_src.clkr.hw,
2774			},
2775			.num_parents = 1,
2776			.flags = CLK_SET_RATE_PARENT,
2777			.ops = &clk_branch2_ops,
2778		},
2779	},
2780};
2781
2782static struct clk_branch gcc_gp1_clk = {
2783	.halt_reg = 0x08000,
2784	.clkr = {
2785		.enable_reg = 0x08000,
2786		.enable_mask = BIT(0),
2787		.hw.init = &(struct clk_init_data){
2788			.name = "gcc_gp1_clk",
2789			.parent_hws = (const struct clk_hw*[]){
2790				&gp1_clk_src.clkr.hw,
2791			},
2792			.num_parents = 1,
2793			.flags = CLK_SET_RATE_PARENT,
2794			.ops = &clk_branch2_ops,
2795		},
2796	},
2797};
2798
2799static struct clk_branch gcc_gp2_clk = {
2800	.halt_reg = 0x09000,
2801	.clkr = {
2802		.enable_reg = 0x09000,
2803		.enable_mask = BIT(0),
2804		.hw.init = &(struct clk_init_data){
2805			.name = "gcc_gp2_clk",
2806			.parent_hws = (const struct clk_hw*[]){
2807				&gp2_clk_src.clkr.hw,
2808			},
2809			.num_parents = 1,
2810			.flags = CLK_SET_RATE_PARENT,
2811			.ops = &clk_branch2_ops,
2812		},
2813	},
2814};
2815
2816static struct clk_branch gcc_gp3_clk = {
2817	.halt_reg = 0x0a000,
2818	.clkr = {
2819		.enable_reg = 0x0a000,
2820		.enable_mask = BIT(0),
2821		.hw.init = &(struct clk_init_data){
2822			.name = "gcc_gp3_clk",
2823			.parent_hws = (const struct clk_hw*[]){
2824				&gp3_clk_src.clkr.hw,
2825			},
2826			.num_parents = 1,
2827			.flags = CLK_SET_RATE_PARENT,
2828			.ops = &clk_branch2_ops,
2829		},
2830	},
2831};
2832
2833static struct clk_branch gcc_mdss_ahb_clk = {
2834	.halt_reg = 0x4d07c,
2835	.clkr = {
2836		.enable_reg = 0x4d07c,
2837		.enable_mask = BIT(0),
2838		.hw.init = &(struct clk_init_data){
2839			.name = "gcc_mdss_ahb_clk",
2840			.parent_hws = (const struct clk_hw*[]){
2841				&pcnoc_bfdcd_clk_src.clkr.hw,
2842			},
2843			.num_parents = 1,
2844			.flags = CLK_SET_RATE_PARENT,
2845			.ops = &clk_branch2_ops,
2846		},
2847	},
2848};
2849
2850static struct clk_branch gcc_mdss_axi_clk = {
2851	.halt_reg = 0x4d080,
2852	.clkr = {
2853		.enable_reg = 0x4d080,
2854		.enable_mask = BIT(0),
2855		.hw.init = &(struct clk_init_data){
2856			.name = "gcc_mdss_axi_clk",
2857			.parent_hws = (const struct clk_hw*[]){
2858				&system_mm_noc_bfdcd_clk_src.clkr.hw,
2859			},
2860			.num_parents = 1,
2861			.flags = CLK_SET_RATE_PARENT,
2862			.ops = &clk_branch2_ops,
2863		},
2864	},
2865};
2866
2867static struct clk_branch gcc_mdss_byte0_clk = {
2868	.halt_reg = 0x4d094,
2869	.clkr = {
2870		.enable_reg = 0x4d094,
2871		.enable_mask = BIT(0),
2872		.hw.init = &(struct clk_init_data){
2873			.name = "gcc_mdss_byte0_clk",
2874			.parent_hws = (const struct clk_hw*[]){
2875				&byte0_clk_src.clkr.hw,
2876			},
2877			.num_parents = 1,
2878			.flags = CLK_SET_RATE_PARENT,
2879			.ops = &clk_branch2_ops,
2880		},
2881	},
2882};
2883
2884static struct clk_branch gcc_mdss_byte1_clk = {
2885	.halt_reg = 0x4d0a0,
2886	.clkr = {
2887		.enable_reg = 0x4d0a0,
2888		.enable_mask = BIT(0),
2889		.hw.init = &(struct clk_init_data){
2890			.name = "gcc_mdss_byte1_clk",
2891			.parent_hws = (const struct clk_hw*[]){
2892				&byte1_clk_src.clkr.hw,
2893			},
2894			.num_parents = 1,
2895			.flags = CLK_SET_RATE_PARENT,
2896			.ops = &clk_branch2_ops,
2897		},
2898	},
2899};
2900
2901static struct clk_branch gcc_mdss_esc0_clk = {
2902	.halt_reg = 0x4d098,
2903	.clkr = {
2904		.enable_reg = 0x4d098,
2905		.enable_mask = BIT(0),
2906		.hw.init = &(struct clk_init_data){
2907			.name = "gcc_mdss_esc0_clk",
2908			.parent_hws = (const struct clk_hw*[]){
2909				&esc0_clk_src.clkr.hw,
2910			},
2911			.num_parents = 1,
2912			.flags = CLK_SET_RATE_PARENT,
2913			.ops = &clk_branch2_ops,
2914		},
2915	},
2916};
2917
2918static struct clk_branch gcc_mdss_esc1_clk = {
2919	.halt_reg = 0x4d09c,
2920	.clkr = {
2921		.enable_reg = 0x4d09c,
2922		.enable_mask = BIT(0),
2923		.hw.init = &(struct clk_init_data){
2924			.name = "gcc_mdss_esc1_clk",
2925			.parent_hws = (const struct clk_hw*[]){
2926				&esc1_clk_src.clkr.hw,
2927			},
2928			.num_parents = 1,
2929			.flags = CLK_SET_RATE_PARENT,
2930			.ops = &clk_branch2_ops,
2931		},
2932	},
2933};
2934
2935static struct clk_branch gcc_mdss_mdp_clk = {
2936	.halt_reg = 0x4D088,
2937	.clkr = {
2938		.enable_reg = 0x4D088,
2939		.enable_mask = BIT(0),
2940		.hw.init = &(struct clk_init_data){
2941			.name = "gcc_mdss_mdp_clk",
2942			.parent_hws = (const struct clk_hw*[]){
2943				&mdp_clk_src.clkr.hw,
2944			},
2945			.num_parents = 1,
2946			.flags = CLK_SET_RATE_PARENT,
2947			.ops = &clk_branch2_ops,
2948		},
2949	},
2950};
2951
2952static struct clk_branch gcc_mdss_pclk0_clk = {
2953	.halt_reg = 0x4d084,
2954	.clkr = {
2955		.enable_reg = 0x4d084,
2956		.enable_mask = BIT(0),
2957		.hw.init = &(struct clk_init_data){
2958			.name = "gcc_mdss_pclk0_clk",
2959			.parent_hws = (const struct clk_hw*[]){
2960				&pclk0_clk_src.clkr.hw,
2961			},
2962			.num_parents = 1,
2963			.flags = CLK_SET_RATE_PARENT,
2964			.ops = &clk_branch2_ops,
2965		},
2966	},
2967};
2968
2969static struct clk_branch gcc_mdss_pclk1_clk = {
2970	.halt_reg = 0x4d0a4,
2971	.clkr = {
2972		.enable_reg = 0x4d0a4,
2973		.enable_mask = BIT(0),
2974		.hw.init = &(struct clk_init_data){
2975			.name = "gcc_mdss_pclk1_clk",
2976			.parent_hws = (const struct clk_hw*[]){
2977				&pclk1_clk_src.clkr.hw,
2978			},
2979			.num_parents = 1,
2980			.flags = CLK_SET_RATE_PARENT,
2981			.ops = &clk_branch2_ops,
2982		},
2983	},
2984};
2985
2986static struct clk_branch gcc_mdss_vsync_clk = {
2987	.halt_reg = 0x4d090,
2988	.clkr = {
2989		.enable_reg = 0x4d090,
2990		.enable_mask = BIT(0),
2991		.hw.init = &(struct clk_init_data){
2992			.name = "gcc_mdss_vsync_clk",
2993			.parent_hws = (const struct clk_hw*[]){
2994				&vsync_clk_src.clkr.hw,
2995			},
2996			.num_parents = 1,
2997			.flags = CLK_SET_RATE_PARENT,
2998			.ops = &clk_branch2_ops,
2999		},
3000	},
3001};
3002
3003static struct clk_branch gcc_mss_cfg_ahb_clk = {
3004	.halt_reg = 0x49000,
3005	.clkr = {
3006		.enable_reg = 0x49000,
3007		.enable_mask = BIT(0),
3008		.hw.init = &(struct clk_init_data){
3009			.name = "gcc_mss_cfg_ahb_clk",
3010			.parent_hws = (const struct clk_hw*[]){
3011				&pcnoc_bfdcd_clk_src.clkr.hw,
3012			},
3013			.num_parents = 1,
3014			.flags = CLK_SET_RATE_PARENT,
3015			.ops = &clk_branch2_ops,
3016		},
3017	},
3018};
3019
3020static struct clk_branch gcc_mss_q6_bimc_axi_clk = {
3021	.halt_reg = 0x49004,
3022	.clkr = {
3023		.enable_reg = 0x49004,
3024		.enable_mask = BIT(0),
3025		.hw.init = &(struct clk_init_data){
3026			.name = "gcc_mss_q6_bimc_axi_clk",
3027			.parent_hws = (const struct clk_hw*[]){
3028				&bimc_ddr_clk_src.clkr.hw,
3029			},
3030			.num_parents = 1,
3031			.flags = CLK_SET_RATE_PARENT,
3032			.ops = &clk_branch2_ops,
3033		},
3034	},
3035};
3036
3037static struct clk_branch gcc_oxili_ahb_clk = {
3038	.halt_reg = 0x59028,
3039	.clkr = {
3040		.enable_reg = 0x59028,
3041		.enable_mask = BIT(0),
3042		.hw.init = &(struct clk_init_data){
3043			.name = "gcc_oxili_ahb_clk",
3044			.parent_hws = (const struct clk_hw*[]){
3045				&pcnoc_bfdcd_clk_src.clkr.hw,
3046			},
3047			.num_parents = 1,
3048			.flags = CLK_SET_RATE_PARENT,
3049			.ops = &clk_branch2_ops,
3050		},
3051	},
3052};
3053
3054static struct clk_branch gcc_oxili_gfx3d_clk = {
3055	.halt_reg = 0x59020,
3056	.clkr = {
3057		.enable_reg = 0x59020,
3058		.enable_mask = BIT(0),
3059		.hw.init = &(struct clk_init_data){
3060			.name = "gcc_oxili_gfx3d_clk",
3061			.parent_hws = (const struct clk_hw*[]){
3062				&gfx3d_clk_src.clkr.hw,
3063			},
3064			.num_parents = 1,
3065			.flags = CLK_SET_RATE_PARENT,
3066			.ops = &clk_branch2_ops,
3067		},
3068	},
3069};
3070
3071static struct clk_branch gcc_pdm2_clk = {
3072	.halt_reg = 0x4400c,
3073	.clkr = {
3074		.enable_reg = 0x4400c,
3075		.enable_mask = BIT(0),
3076		.hw.init = &(struct clk_init_data){
3077			.name = "gcc_pdm2_clk",
3078			.parent_hws = (const struct clk_hw*[]){
3079				&pdm2_clk_src.clkr.hw,
3080			},
3081			.num_parents = 1,
3082			.flags = CLK_SET_RATE_PARENT,
3083			.ops = &clk_branch2_ops,
3084		},
3085	},
3086};
3087
3088static struct clk_branch gcc_pdm_ahb_clk = {
3089	.halt_reg = 0x44004,
3090	.clkr = {
3091		.enable_reg = 0x44004,
3092		.enable_mask = BIT(0),
3093		.hw.init = &(struct clk_init_data){
3094			.name = "gcc_pdm_ahb_clk",
3095			.parent_hws = (const struct clk_hw*[]){
3096				&pcnoc_bfdcd_clk_src.clkr.hw,
3097			},
3098			.num_parents = 1,
3099			.flags = CLK_SET_RATE_PARENT,
3100			.ops = &clk_branch2_ops,
3101		},
3102	},
3103};
3104
3105static struct clk_branch gcc_prng_ahb_clk = {
3106	.halt_reg = 0x13004,
3107	.halt_check = BRANCH_HALT_VOTED,
3108	.clkr = {
3109		.enable_reg = 0x45004,
3110		.enable_mask = BIT(8),
3111		.hw.init = &(struct clk_init_data){
3112			.name = "gcc_prng_ahb_clk",
3113			.parent_hws = (const struct clk_hw*[]){
3114				&pcnoc_bfdcd_clk_src.clkr.hw,
3115			},
3116			.num_parents = 1,
3117			.ops = &clk_branch2_ops,
3118		},
3119	},
3120};
3121
3122static struct clk_branch gcc_sdcc1_ahb_clk = {
3123	.halt_reg = 0x4201c,
3124	.clkr = {
3125		.enable_reg = 0x4201c,
3126		.enable_mask = BIT(0),
3127		.hw.init = &(struct clk_init_data){
3128			.name = "gcc_sdcc1_ahb_clk",
3129			.parent_hws = (const struct clk_hw*[]){
3130				&pcnoc_bfdcd_clk_src.clkr.hw,
3131			},
3132			.num_parents = 1,
3133			.flags = CLK_SET_RATE_PARENT,
3134			.ops = &clk_branch2_ops,
3135		},
3136	},
3137};
3138
3139static struct clk_branch gcc_sdcc1_apps_clk = {
3140	.halt_reg = 0x42018,
3141	.clkr = {
3142		.enable_reg = 0x42018,
3143		.enable_mask = BIT(0),
3144		.hw.init = &(struct clk_init_data){
3145			.name = "gcc_sdcc1_apps_clk",
3146			.parent_hws = (const struct clk_hw*[]){
3147				&sdcc1_apps_clk_src.clkr.hw,
3148			},
3149			.num_parents = 1,
3150			.flags = CLK_SET_RATE_PARENT,
3151			.ops = &clk_branch2_ops,
3152		},
3153	},
3154};
3155
3156static struct clk_branch gcc_sdcc2_ahb_clk = {
3157	.halt_reg = 0x4301c,
3158	.clkr = {
3159		.enable_reg = 0x4301c,
3160		.enable_mask = BIT(0),
3161		.hw.init = &(struct clk_init_data){
3162			.name = "gcc_sdcc2_ahb_clk",
3163			.parent_hws = (const struct clk_hw*[]){
3164				&pcnoc_bfdcd_clk_src.clkr.hw,
3165			},
3166			.num_parents = 1,
3167			.flags = CLK_SET_RATE_PARENT,
3168			.ops = &clk_branch2_ops,
3169		},
3170	},
3171};
3172
3173static struct clk_branch gcc_sdcc2_apps_clk = {
3174	.halt_reg = 0x43018,
3175	.clkr = {
3176		.enable_reg = 0x43018,
3177		.enable_mask = BIT(0),
3178		.hw.init = &(struct clk_init_data){
3179			.name = "gcc_sdcc2_apps_clk",
3180			.parent_hws = (const struct clk_hw*[]){
3181				&sdcc2_apps_clk_src.clkr.hw,
3182			},
3183			.num_parents = 1,
3184			.flags = CLK_SET_RATE_PARENT,
3185			.ops = &clk_branch2_ops,
3186		},
3187	},
3188};
3189
3190static struct clk_branch gcc_apss_tcu_clk = {
3191	.halt_reg = 0x12018,
3192	.halt_check = BRANCH_HALT_VOTED,
3193	.clkr = {
3194		.enable_reg = 0x4500c,
3195		.enable_mask = BIT(1),
3196		.hw.init = &(struct clk_init_data){
3197			.name = "gcc_apss_tcu_clk",
3198			.parent_hws = (const struct clk_hw*[]){
3199				&bimc_ddr_clk_src.clkr.hw,
3200			},
3201			.num_parents = 1,
3202			.ops = &clk_branch2_ops,
3203		},
3204	},
3205};
3206
3207static struct clk_branch gcc_gfx_tcu_clk = {
3208	.halt_reg = 0x12020,
3209	.halt_check = BRANCH_HALT_VOTED,
3210	.clkr = {
3211		.enable_reg = 0x4500c,
3212		.enable_mask = BIT(2),
3213		.hw.init = &(struct clk_init_data){
3214			.name = "gcc_gfx_tcu_clk",
3215			.parent_hws = (const struct clk_hw*[]){
3216				&bimc_ddr_clk_src.clkr.hw,
3217			},
3218			.num_parents = 1,
3219			.ops = &clk_branch2_ops,
3220		},
3221	},
3222};
3223
3224static struct clk_branch gcc_gfx_tbu_clk = {
3225	.halt_reg = 0x12010,
3226	.halt_check = BRANCH_HALT_VOTED,
3227	.clkr = {
3228		.enable_reg = 0x4500c,
3229		.enable_mask = BIT(3),
3230		.hw.init = &(struct clk_init_data){
3231			.name = "gcc_gfx_tbu_clk",
3232			.parent_hws = (const struct clk_hw*[]){
3233				&bimc_ddr_clk_src.clkr.hw,
3234			},
3235			.num_parents = 1,
3236			.ops = &clk_branch2_ops,
3237		},
3238	},
3239};
3240
3241static struct clk_branch gcc_mdp_tbu_clk = {
3242	.halt_reg = 0x1201c,
3243	.halt_check = BRANCH_HALT_VOTED,
3244	.clkr = {
3245		.enable_reg = 0x4500c,
3246		.enable_mask = BIT(4),
3247		.hw.init = &(struct clk_init_data){
3248			.name = "gcc_mdp_tbu_clk",
3249			.parent_hws = (const struct clk_hw*[]){
3250				&system_mm_noc_bfdcd_clk_src.clkr.hw,
3251			},
3252			.num_parents = 1,
3253			.flags = CLK_SET_RATE_PARENT,
3254			.ops = &clk_branch2_ops,
3255		},
3256	},
3257};
3258
3259static struct clk_branch gcc_venus_tbu_clk = {
3260	.halt_reg = 0x12014,
3261	.halt_check = BRANCH_HALT_VOTED,
3262	.clkr = {
3263		.enable_reg = 0x4500c,
3264		.enable_mask = BIT(5),
3265		.hw.init = &(struct clk_init_data){
3266			.name = "gcc_venus_tbu_clk",
3267			.parent_hws = (const struct clk_hw*[]){
3268				&system_mm_noc_bfdcd_clk_src.clkr.hw,
3269			},
3270			.num_parents = 1,
3271			.flags = CLK_SET_RATE_PARENT,
3272			.ops = &clk_branch2_ops,
3273		},
3274	},
3275};
3276
3277static struct clk_branch gcc_vfe_tbu_clk = {
3278	.halt_reg = 0x1203c,
3279	.halt_check = BRANCH_HALT_VOTED,
3280	.clkr = {
3281		.enable_reg = 0x4500c,
3282		.enable_mask = BIT(9),
3283		.hw.init = &(struct clk_init_data){
3284			.name = "gcc_vfe_tbu_clk",
3285			.parent_hws = (const struct clk_hw*[]){
3286				&system_mm_noc_bfdcd_clk_src.clkr.hw,
3287			},
3288			.num_parents = 1,
3289			.flags = CLK_SET_RATE_PARENT,
3290			.ops = &clk_branch2_ops,
3291		},
3292	},
3293};
3294
3295static struct clk_branch gcc_jpeg_tbu_clk = {
3296	.halt_reg = 0x12034,
3297	.halt_check = BRANCH_HALT_VOTED,
3298	.clkr = {
3299		.enable_reg = 0x4500c,
3300		.enable_mask = BIT(10),
3301		.hw.init = &(struct clk_init_data){
3302			.name = "gcc_jpeg_tbu_clk",
3303			.parent_hws = (const struct clk_hw*[]){
3304				&system_mm_noc_bfdcd_clk_src.clkr.hw,
3305			},
3306			.num_parents = 1,
3307			.flags = CLK_SET_RATE_PARENT,
3308			.ops = &clk_branch2_ops,
3309		},
3310	},
3311};
3312
3313static struct clk_branch gcc_smmu_cfg_clk = {
3314	.halt_reg = 0x12038,
3315	.halt_check = BRANCH_HALT_VOTED,
3316	.clkr = {
3317		.enable_reg = 0x4500c,
3318		.enable_mask = BIT(12),
3319		.hw.init = &(struct clk_init_data){
3320			.name = "gcc_smmu_cfg_clk",
3321			.parent_hws = (const struct clk_hw*[]){
3322				&pcnoc_bfdcd_clk_src.clkr.hw,
3323			},
3324			.num_parents = 1,
3325			.flags = CLK_SET_RATE_PARENT,
3326			.ops = &clk_branch2_ops,
3327		},
3328	},
3329};
3330
3331static struct clk_branch gcc_gtcu_ahb_clk = {
3332	.halt_reg = 0x12044,
3333	.halt_check = BRANCH_HALT_VOTED,
3334	.clkr = {
3335		.enable_reg = 0x4500c,
3336		.enable_mask = BIT(13),
3337		.hw.init = &(struct clk_init_data){
3338			.name = "gcc_gtcu_ahb_clk",
3339			.parent_hws = (const struct clk_hw*[]){
3340				&pcnoc_bfdcd_clk_src.clkr.hw,
3341			},
3342			.num_parents = 1,
3343			.flags = CLK_SET_RATE_PARENT,
3344			.ops = &clk_branch2_ops,
3345		},
3346	},
3347};
3348
3349static struct clk_branch gcc_cpp_tbu_clk = {
3350	.halt_reg = 0x12040,
3351	.halt_check = BRANCH_HALT_VOTED,
3352	.clkr = {
3353		.enable_reg = 0x4500c,
3354		.enable_mask = BIT(14),
3355		.hw.init = &(struct clk_init_data){
3356			.name = "gcc_cpp_tbu_clk",
3357			.parent_hws = (const struct clk_hw*[]){
3358				&pcnoc_bfdcd_clk_src.clkr.hw,
3359			},
3360			.num_parents = 1,
3361			.flags = CLK_SET_RATE_PARENT,
3362			.ops = &clk_branch2_ops,
3363		},
3364	},
3365};
3366
3367static struct clk_branch gcc_mdp_rt_tbu_clk = {
3368	.halt_reg = 0x1201c,
3369	.halt_check = BRANCH_HALT_VOTED,
3370	.clkr = {
3371		.enable_reg = 0x4500c,
3372		.enable_mask = BIT(15),
3373		.hw.init = &(struct clk_init_data){
3374			.name = "gcc_mdp_rt_tbu_clk",
3375			.parent_hws = (const struct clk_hw*[]){
3376				&pcnoc_bfdcd_clk_src.clkr.hw,
3377			},
3378			.num_parents = 1,
3379			.flags = CLK_SET_RATE_PARENT,
3380			.ops = &clk_branch2_ops,
3381		},
3382	},
3383};
3384
3385static struct clk_branch gcc_bimc_gfx_clk = {
3386	.halt_reg = 0x31024,
3387	.clkr = {
3388		.enable_reg = 0x31024,
3389		.enable_mask = BIT(0),
3390		.hw.init = &(struct clk_init_data){
3391			.name = "gcc_bimc_gfx_clk",
3392			.parent_hws = (const struct clk_hw*[]){
3393				&bimc_gpu_clk_src.clkr.hw,
3394			},
3395			.num_parents = 1,
3396			.flags = CLK_SET_RATE_PARENT,
3397			.ops = &clk_branch2_ops,
3398		},
3399	},
3400};
3401
3402static struct clk_branch gcc_bimc_gpu_clk = {
3403	.halt_reg = 0x31040,
3404	.clkr = {
3405		.enable_reg = 0x31040,
3406		.enable_mask = BIT(0),
3407		.hw.init = &(struct clk_init_data){
3408			.name = "gcc_bimc_gpu_clk",
3409			.parent_hws = (const struct clk_hw*[]){
3410				&bimc_gpu_clk_src.clkr.hw,
3411			},
3412			.num_parents = 1,
3413			.flags = CLK_SET_RATE_PARENT,
3414			.ops = &clk_branch2_ops,
3415		},
3416	},
3417};
3418
3419static struct clk_branch gcc_usb2a_phy_sleep_clk = {
3420	.halt_reg = 0x4102c,
3421	.clkr = {
3422		.enable_reg = 0x4102c,
3423		.enable_mask = BIT(0),
3424		.hw.init = &(struct clk_init_data){
3425			.name = "gcc_usb2a_phy_sleep_clk",
3426			.ops = &clk_branch2_ops,
3427		},
3428	},
3429};
3430
3431static struct clk_branch gcc_usb_fs_ahb_clk = {
3432	.halt_reg = 0x3f008,
3433	.clkr = {
3434		.enable_reg = 0x3f008,
3435		.enable_mask = BIT(0),
3436		.hw.init = &(struct clk_init_data){
3437			.name = "gcc_usb_fs_ahb_clk",
3438			.parent_hws = (const struct clk_hw*[]){
3439				&pcnoc_bfdcd_clk_src.clkr.hw,
3440			},
3441			.num_parents = 1,
3442			.flags = CLK_SET_RATE_PARENT,
3443			.ops = &clk_branch2_ops,
3444		},
3445	},
3446};
3447
3448static struct clk_branch gcc_usb_fs_ic_clk = {
3449	.halt_reg = 0x3f030,
3450	.clkr = {
3451		.enable_reg = 0x3f030,
3452		.enable_mask = BIT(0),
3453		.hw.init = &(struct clk_init_data){
3454			.name = "gcc_usb_fs_ic_clk",
3455			.parent_hws = (const struct clk_hw*[]){
3456				&usb_fs_ic_clk_src.clkr.hw,
3457			},
3458			.num_parents = 1,
3459			.flags = CLK_SET_RATE_PARENT,
3460			.ops = &clk_branch2_ops,
3461		},
3462	},
3463};
3464
3465static struct clk_branch gcc_usb_fs_system_clk = {
3466	.halt_reg = 0x3f004,
3467	.clkr = {
3468		.enable_reg = 0x3f004,
3469		.enable_mask = BIT(0),
3470		.hw.init = &(struct clk_init_data){
3471			.name = "gcc_usb_fs_system_clk",
3472			.parent_hws = (const struct clk_hw*[]){
3473				&usb_fs_system_clk_src.clkr.hw,
3474			},
3475			.num_parents = 1,
3476			.flags = CLK_SET_RATE_PARENT,
3477			.ops = &clk_branch2_ops,
3478		},
3479	},
3480};
3481
3482static struct clk_branch gcc_usb_hs_ahb_clk = {
3483	.halt_reg = 0x41008,
3484	.clkr = {
3485		.enable_reg = 0x41008,
3486		.enable_mask = BIT(0),
3487		.hw.init = &(struct clk_init_data){
3488			.name = "gcc_usb_hs_ahb_clk",
3489			.parent_hws = (const struct clk_hw*[]){
3490				&pcnoc_bfdcd_clk_src.clkr.hw,
3491			},
3492			.num_parents = 1,
3493			.flags = CLK_SET_RATE_PARENT,
3494			.ops = &clk_branch2_ops,
3495		},
3496	},
3497};
3498
3499static struct clk_branch gcc_usb_hs_system_clk = {
3500	.halt_reg = 0x41004,
3501	.clkr = {
3502		.enable_reg = 0x41004,
3503		.enable_mask = BIT(0),
3504		.hw.init = &(struct clk_init_data){
3505			.name = "gcc_usb_hs_system_clk",
3506			.parent_hws = (const struct clk_hw*[]){
3507				&usb_hs_system_clk_src.clkr.hw,
3508			},
3509			.num_parents = 1,
3510			.flags = CLK_SET_RATE_PARENT,
3511			.ops = &clk_branch2_ops,
3512		},
3513	},
3514};
3515
3516static struct clk_branch gcc_venus0_ahb_clk = {
3517	.halt_reg = 0x4c020,
3518	.clkr = {
3519		.enable_reg = 0x4c020,
3520		.enable_mask = BIT(0),
3521		.hw.init = &(struct clk_init_data){
3522			.name = "gcc_venus0_ahb_clk",
3523			.parent_hws = (const struct clk_hw*[]){
3524				&pcnoc_bfdcd_clk_src.clkr.hw,
3525			},
3526			.num_parents = 1,
3527			.flags = CLK_SET_RATE_PARENT,
3528			.ops = &clk_branch2_ops,
3529		},
3530	},
3531};
3532
3533static struct clk_branch gcc_venus0_axi_clk = {
3534	.halt_reg = 0x4c024,
3535	.clkr = {
3536		.enable_reg = 0x4c024,
3537		.enable_mask = BIT(0),
3538		.hw.init = &(struct clk_init_data){
3539			.name = "gcc_venus0_axi_clk",
3540			.parent_hws = (const struct clk_hw*[]){
3541				&system_mm_noc_bfdcd_clk_src.clkr.hw,
3542			},
3543			.num_parents = 1,
3544			.flags = CLK_SET_RATE_PARENT,
3545			.ops = &clk_branch2_ops,
3546		},
3547	},
3548};
3549
3550static struct clk_branch gcc_venus0_vcodec0_clk = {
3551	.halt_reg = 0x4c01c,
3552	.clkr = {
3553		.enable_reg = 0x4c01c,
3554		.enable_mask = BIT(0),
3555		.hw.init = &(struct clk_init_data){
3556			.name = "gcc_venus0_vcodec0_clk",
3557			.parent_hws = (const struct clk_hw*[]){
3558				&vcodec0_clk_src.clkr.hw,
3559			},
3560			.num_parents = 1,
3561			.flags = CLK_SET_RATE_PARENT,
3562			.ops = &clk_branch2_ops,
3563		},
3564	},
3565};
3566
3567static struct clk_branch gcc_venus0_core0_vcodec0_clk = {
3568	.halt_reg = 0x4c02c,
3569	.clkr = {
3570		.enable_reg = 0x4c02c,
3571		.enable_mask = BIT(0),
3572		.hw.init = &(struct clk_init_data){
3573			.name = "gcc_venus0_core0_vcodec0_clk",
3574			.parent_hws = (const struct clk_hw*[]){
3575				&vcodec0_clk_src.clkr.hw,
3576			},
3577			.num_parents = 1,
3578			.flags = CLK_SET_RATE_PARENT,
3579			.ops = &clk_branch2_ops,
3580		},
3581	},
3582};
3583
3584static struct clk_branch gcc_venus0_core1_vcodec0_clk = {
3585	.halt_reg = 0x4c034,
3586	.clkr = {
3587		.enable_reg = 0x4c034,
3588		.enable_mask = BIT(0),
3589		.hw.init = &(struct clk_init_data){
3590			.name = "gcc_venus0_core1_vcodec0_clk",
3591			.parent_hws = (const struct clk_hw*[]){
3592				&vcodec0_clk_src.clkr.hw,
3593			},
3594			.num_parents = 1,
3595			.flags = CLK_SET_RATE_PARENT,
3596			.ops = &clk_branch2_ops,
3597		},
3598	},
3599};
3600
3601static struct clk_branch gcc_oxili_timer_clk = {
3602	.halt_reg = 0x59040,
3603	.clkr = {
3604		.enable_reg = 0x59040,
3605		.enable_mask = BIT(0),
3606		.hw.init = &(struct clk_init_data){
3607			.name = "gcc_oxili_timer_clk",
3608			.ops = &clk_branch2_ops,
3609		},
3610	},
3611};
3612
3613static struct gdsc venus_gdsc = {
3614	.gdscr = 0x4c018,
3615	.pd = {
3616		.name = "venus",
3617	},
3618	.pwrsts = PWRSTS_OFF_ON,
3619};
3620
3621static struct gdsc mdss_gdsc = {
3622	.gdscr = 0x4d078,
3623	.pd = {
3624		.name = "mdss",
3625	},
3626	.pwrsts = PWRSTS_OFF_ON,
3627};
3628
3629static struct gdsc jpeg_gdsc = {
3630	.gdscr = 0x5701c,
3631	.pd = {
3632		.name = "jpeg",
3633	},
3634	.pwrsts = PWRSTS_OFF_ON,
3635};
3636
3637static struct gdsc vfe_gdsc = {
3638	.gdscr = 0x58034,
3639	.pd = {
3640		.name = "vfe",
3641	},
3642	.pwrsts = PWRSTS_OFF_ON,
3643};
3644
3645static struct gdsc oxili_gdsc = {
3646	.gdscr = 0x5901c,
3647	.pd = {
3648		.name = "oxili",
3649	},
3650	.pwrsts = PWRSTS_OFF_ON,
3651};
3652
3653static struct gdsc venus_core0_gdsc = {
3654	.gdscr = 0x4c028,
3655	.pd = {
3656		.name = "venus_core0",
3657	},
3658	.pwrsts = PWRSTS_OFF_ON,
3659};
3660
3661static struct gdsc venus_core1_gdsc = {
3662	.gdscr = 0x4c030,
3663	.pd = {
3664		.name = "venus_core1",
3665	},
3666	.pwrsts = PWRSTS_OFF_ON,
3667};
3668
3669static struct clk_regmap *gcc_msm8939_clocks[] = {
3670	[GPLL0] = &gpll0.clkr,
3671	[GPLL0_VOTE] = &gpll0_vote,
3672	[BIMC_PLL] = &bimc_pll.clkr,
3673	[BIMC_PLL_VOTE] = &bimc_pll_vote,
3674	[GPLL1] = &gpll1.clkr,
3675	[GPLL1_VOTE] = &gpll1_vote,
3676	[GPLL2] = &gpll2.clkr,
3677	[GPLL2_VOTE] = &gpll2_vote,
3678	[PCNOC_BFDCD_CLK_SRC] = &pcnoc_bfdcd_clk_src.clkr,
3679	[SYSTEM_NOC_BFDCD_CLK_SRC] = &system_noc_bfdcd_clk_src.clkr,
3680	[SYSTEM_MM_NOC_BFDCD_CLK_SRC] = &system_mm_noc_bfdcd_clk_src.clkr,
3681	[CAMSS_AHB_CLK_SRC] = &camss_ahb_clk_src.clkr,
3682	[APSS_AHB_CLK_SRC] = &apss_ahb_clk_src.clkr,
3683	[CSI0_CLK_SRC] = &csi0_clk_src.clkr,
3684	[CSI1_CLK_SRC] = &csi1_clk_src.clkr,
3685	[GFX3D_CLK_SRC] = &gfx3d_clk_src.clkr,
3686	[VFE0_CLK_SRC] = &vfe0_clk_src.clkr,
3687	[BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
3688	[BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
3689	[BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
3690	[BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
3691	[BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
3692	[BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
3693	[BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
3694	[BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
3695	[BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr,
3696	[BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr,
3697	[BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr,
3698	[BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr,
3699	[BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
3700	[BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
3701	[CCI_CLK_SRC] = &cci_clk_src.clkr,
3702	[CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr,
3703	[CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr,
3704	[JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr,
3705	[MCLK0_CLK_SRC] = &mclk0_clk_src.clkr,
3706	[MCLK1_CLK_SRC] = &mclk1_clk_src.clkr,
3707	[CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr,
3708	[CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr,
3709	[CPP_CLK_SRC] = &cpp_clk_src.clkr,
3710	[CRYPTO_CLK_SRC] = &crypto_clk_src.clkr,
3711	[GP1_CLK_SRC] = &gp1_clk_src.clkr,
3712	[GP2_CLK_SRC] = &gp2_clk_src.clkr,
3713	[GP3_CLK_SRC] = &gp3_clk_src.clkr,
3714	[BYTE0_CLK_SRC] = &byte0_clk_src.clkr,
3715	[ESC0_CLK_SRC] = &esc0_clk_src.clkr,
3716	[MDP_CLK_SRC] = &mdp_clk_src.clkr,
3717	[PCLK0_CLK_SRC] = &pclk0_clk_src.clkr,
3718	[VSYNC_CLK_SRC] = &vsync_clk_src.clkr,
3719	[PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
3720	[SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
3721	[SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
3722	[APSS_TCU_CLK_SRC] = &apss_tcu_clk_src.clkr,
3723	[USB_HS_SYSTEM_CLK_SRC] = &usb_hs_system_clk_src.clkr,
3724	[VCODEC0_CLK_SRC] = &vcodec0_clk_src.clkr,
3725	[GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
3726	[GCC_BLSP1_SLEEP_CLK] = &gcc_blsp1_sleep_clk.clkr,
3727	[GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
3728	[GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
3729	[GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
3730	[GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
3731	[GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
3732	[GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
3733	[GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
3734	[GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
3735	[GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr,
3736	[GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr,
3737	[GCC_BLSP1_QUP6_I2C_APPS_CLK] = &gcc_blsp1_qup6_i2c_apps_clk.clkr,
3738	[GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr,
3739	[GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
3740	[GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
3741	[GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
3742	[GCC_CAMSS_CCI_AHB_CLK] = &gcc_camss_cci_ahb_clk.clkr,
3743	[GCC_CAMSS_CCI_CLK] = &gcc_camss_cci_clk.clkr,
3744	[GCC_CAMSS_CSI0_AHB_CLK] = &gcc_camss_csi0_ahb_clk.clkr,
3745	[GCC_CAMSS_CSI0_CLK] = &gcc_camss_csi0_clk.clkr,
3746	[GCC_CAMSS_CSI0PHY_CLK] = &gcc_camss_csi0phy_clk.clkr,
3747	[GCC_CAMSS_CSI0PIX_CLK] = &gcc_camss_csi0pix_clk.clkr,
3748	[GCC_CAMSS_CSI0RDI_CLK] = &gcc_camss_csi0rdi_clk.clkr,
3749	[GCC_CAMSS_CSI1_AHB_CLK] = &gcc_camss_csi1_ahb_clk.clkr,
3750	[GCC_CAMSS_CSI1_CLK] = &gcc_camss_csi1_clk.clkr,
3751	[GCC_CAMSS_CSI1PHY_CLK] = &gcc_camss_csi1phy_clk.clkr,
3752	[GCC_CAMSS_CSI1PIX_CLK] = &gcc_camss_csi1pix_clk.clkr,
3753	[GCC_CAMSS_CSI1RDI_CLK] = &gcc_camss_csi1rdi_clk.clkr,
3754	[GCC_CAMSS_CSI_VFE0_CLK] = &gcc_camss_csi_vfe0_clk.clkr,
3755	[GCC_CAMSS_GP0_CLK] = &gcc_camss_gp0_clk.clkr,
3756	[GCC_CAMSS_GP1_CLK] = &gcc_camss_gp1_clk.clkr,
3757	[GCC_CAMSS_ISPIF_AHB_CLK] = &gcc_camss_ispif_ahb_clk.clkr,
3758	[GCC_CAMSS_JPEG0_CLK] = &gcc_camss_jpeg0_clk.clkr,
3759	[GCC_CAMSS_JPEG_AHB_CLK] = &gcc_camss_jpeg_ahb_clk.clkr,
3760	[GCC_CAMSS_JPEG_AXI_CLK] = &gcc_camss_jpeg_axi_clk.clkr,
3761	[GCC_CAMSS_MCLK0_CLK] = &gcc_camss_mclk0_clk.clkr,
3762	[GCC_CAMSS_MCLK1_CLK] = &gcc_camss_mclk1_clk.clkr,
3763	[GCC_CAMSS_MICRO_AHB_CLK] = &gcc_camss_micro_ahb_clk.clkr,
3764	[GCC_CAMSS_CSI0PHYTIMER_CLK] = &gcc_camss_csi0phytimer_clk.clkr,
3765	[GCC_CAMSS_CSI1PHYTIMER_CLK] = &gcc_camss_csi1phytimer_clk.clkr,
3766	[GCC_CAMSS_AHB_CLK] = &gcc_camss_ahb_clk.clkr,
3767	[GCC_CAMSS_TOP_AHB_CLK] = &gcc_camss_top_ahb_clk.clkr,
3768	[GCC_CAMSS_CPP_AHB_CLK] = &gcc_camss_cpp_ahb_clk.clkr,
3769	[GCC_CAMSS_CPP_CLK] = &gcc_camss_cpp_clk.clkr,
3770	[GCC_CAMSS_VFE0_CLK] = &gcc_camss_vfe0_clk.clkr,
3771	[GCC_CAMSS_VFE_AHB_CLK] = &gcc_camss_vfe_ahb_clk.clkr,
3772	[GCC_CAMSS_VFE_AXI_CLK] = &gcc_camss_vfe_axi_clk.clkr,
3773	[GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr,
3774	[GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr,
3775	[GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr,
3776	[GCC_OXILI_GMEM_CLK] = &gcc_oxili_gmem_clk.clkr,
3777	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
3778	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
3779	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
3780	[GCC_MDSS_AHB_CLK] = &gcc_mdss_ahb_clk.clkr,
3781	[GCC_MDSS_AXI_CLK] = &gcc_mdss_axi_clk.clkr,
3782	[GCC_MDSS_BYTE0_CLK] = &gcc_mdss_byte0_clk.clkr,
3783	[GCC_MDSS_ESC0_CLK] = &gcc_mdss_esc0_clk.clkr,
3784	[GCC_MDSS_MDP_CLK] = &gcc_mdss_mdp_clk.clkr,
3785	[GCC_MDSS_PCLK0_CLK] = &gcc_mdss_pclk0_clk.clkr,
3786	[GCC_MDSS_VSYNC_CLK] = &gcc_mdss_vsync_clk.clkr,
3787	[GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,
3788	[GCC_OXILI_AHB_CLK] = &gcc_oxili_ahb_clk.clkr,
3789	[GCC_OXILI_GFX3D_CLK] = &gcc_oxili_gfx3d_clk.clkr,
3790	[GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
3791	[GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
3792	[GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
3793	[GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
3794	[GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
3795	[GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
3796	[GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
3797	[GCC_GTCU_AHB_CLK] = &gcc_gtcu_ahb_clk.clkr,
3798	[GCC_JPEG_TBU_CLK] = &gcc_jpeg_tbu_clk.clkr,
3799	[GCC_MDP_TBU_CLK] = &gcc_mdp_tbu_clk.clkr,
3800	[GCC_SMMU_CFG_CLK] = &gcc_smmu_cfg_clk.clkr,
3801	[GCC_VENUS_TBU_CLK] = &gcc_venus_tbu_clk.clkr,
3802	[GCC_VFE_TBU_CLK] = &gcc_vfe_tbu_clk.clkr,
3803	[GCC_USB2A_PHY_SLEEP_CLK] = &gcc_usb2a_phy_sleep_clk.clkr,
3804	[GCC_USB_HS_AHB_CLK] = &gcc_usb_hs_ahb_clk.clkr,
3805	[GCC_USB_HS_SYSTEM_CLK] = &gcc_usb_hs_system_clk.clkr,
3806	[GCC_VENUS0_AHB_CLK] = &gcc_venus0_ahb_clk.clkr,
3807	[GCC_VENUS0_AXI_CLK] = &gcc_venus0_axi_clk.clkr,
3808	[GCC_VENUS0_VCODEC0_CLK] = &gcc_venus0_vcodec0_clk.clkr,
3809	[BIMC_DDR_CLK_SRC] = &bimc_ddr_clk_src.clkr,
3810	[GCC_APSS_TCU_CLK] = &gcc_apss_tcu_clk.clkr,
3811	[GCC_GFX_TCU_CLK] = &gcc_gfx_tcu_clk.clkr,
3812	[BIMC_GPU_CLK_SRC] = &bimc_gpu_clk_src.clkr,
3813	[GCC_BIMC_GFX_CLK] = &gcc_bimc_gfx_clk.clkr,
3814	[GCC_BIMC_GPU_CLK] = &gcc_bimc_gpu_clk.clkr,
3815	[ULTAUDIO_AHBFABRIC_CLK_SRC] = &ultaudio_ahbfabric_clk_src.clkr,
3816	[ULTAUDIO_LPAIF_PRI_I2S_CLK_SRC] = &ultaudio_lpaif_pri_i2s_clk_src.clkr,
3817	[ULTAUDIO_LPAIF_SEC_I2S_CLK_SRC] = &ultaudio_lpaif_sec_i2s_clk_src.clkr,
3818	[ULTAUDIO_LPAIF_AUX_I2S_CLK_SRC] = &ultaudio_lpaif_aux_i2s_clk_src.clkr,
3819	[ULTAUDIO_XO_CLK_SRC] = &ultaudio_xo_clk_src.clkr,
3820	[CODEC_DIGCODEC_CLK_SRC] = &codec_digcodec_clk_src.clkr,
3821	[GCC_ULTAUDIO_PCNOC_MPORT_CLK] = &gcc_ultaudio_pcnoc_mport_clk.clkr,
3822	[GCC_ULTAUDIO_PCNOC_SWAY_CLK] = &gcc_ultaudio_pcnoc_sway_clk.clkr,
3823	[GCC_ULTAUDIO_AVSYNC_XO_CLK] = &gcc_ultaudio_avsync_xo_clk.clkr,
3824	[GCC_ULTAUDIO_STC_XO_CLK] = &gcc_ultaudio_stc_xo_clk.clkr,
3825	[GCC_ULTAUDIO_AHBFABRIC_IXFABRIC_CLK] = &gcc_ultaudio_ahbfabric_ixfabric_clk.clkr,
3826	[GCC_ULTAUDIO_AHBFABRIC_IXFABRIC_LPM_CLK] = &gcc_ultaudio_ahbfabric_ixfabric_lpm_clk.clkr,
3827	[GCC_ULTAUDIO_LPAIF_PRI_I2S_CLK] = &gcc_ultaudio_lpaif_pri_i2s_clk.clkr,
3828	[GCC_ULTAUDIO_LPAIF_SEC_I2S_CLK] = &gcc_ultaudio_lpaif_sec_i2s_clk.clkr,
3829	[GCC_ULTAUDIO_LPAIF_AUX_I2S_CLK] = &gcc_ultaudio_lpaif_aux_i2s_clk.clkr,
3830	[GCC_CODEC_DIGCODEC_CLK] = &gcc_codec_digcodec_clk.clkr,
3831	[GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr,
3832	[GPLL3] = &gpll3.clkr,
3833	[GPLL3_VOTE] = &gpll3_vote,
3834	[GPLL4] = &gpll4.clkr,
3835	[GPLL4_VOTE] = &gpll4_vote,
3836	[GPLL5] = &gpll5.clkr,
3837	[GPLL5_VOTE] = &gpll5_vote,
3838	[GPLL6] = &gpll6.clkr,
3839	[GPLL6_VOTE] = &gpll6_vote,
3840	[BYTE1_CLK_SRC] = &byte1_clk_src.clkr,
3841	[GCC_MDSS_BYTE1_CLK] = &gcc_mdss_byte1_clk.clkr,
3842	[ESC1_CLK_SRC] = &esc1_clk_src.clkr,
3843	[GCC_MDSS_ESC1_CLK] = &gcc_mdss_esc1_clk.clkr,
3844	[PCLK1_CLK_SRC] = &pclk1_clk_src.clkr,
3845	[GCC_MDSS_PCLK1_CLK] = &gcc_mdss_pclk1_clk.clkr,
3846	[GCC_GFX_TBU_CLK] = &gcc_gfx_tbu_clk.clkr,
3847	[GCC_CPP_TBU_CLK] = &gcc_cpp_tbu_clk.clkr,
3848	[GCC_MDP_RT_TBU_CLK] = &gcc_mdp_rt_tbu_clk.clkr,
3849	[USB_FS_SYSTEM_CLK_SRC] = &usb_fs_system_clk_src.clkr,
3850	[USB_FS_IC_CLK_SRC] = &usb_fs_ic_clk_src.clkr,
3851	[GCC_USB_FS_AHB_CLK] = &gcc_usb_fs_ahb_clk.clkr,
3852	[GCC_USB_FS_IC_CLK] = &gcc_usb_fs_ic_clk.clkr,
3853	[GCC_USB_FS_SYSTEM_CLK] = &gcc_usb_fs_system_clk.clkr,
3854	[GCC_VENUS0_CORE0_VCODEC0_CLK] = &gcc_venus0_core0_vcodec0_clk.clkr,
3855	[GCC_VENUS0_CORE1_VCODEC0_CLK] = &gcc_venus0_core1_vcodec0_clk.clkr,
3856	[GCC_OXILI_TIMER_CLK] = &gcc_oxili_timer_clk.clkr,
3857};
3858
3859static struct gdsc *gcc_msm8939_gdscs[] = {
3860	[VENUS_GDSC] = &venus_gdsc,
3861	[MDSS_GDSC] = &mdss_gdsc,
3862	[JPEG_GDSC] = &jpeg_gdsc,
3863	[VFE_GDSC] = &vfe_gdsc,
3864	[OXILI_GDSC] = &oxili_gdsc,
3865	[VENUS_CORE0_GDSC] = &venus_core0_gdsc,
3866	[VENUS_CORE1_GDSC] = &venus_core1_gdsc,
3867};
3868
3869static const struct qcom_reset_map gcc_msm8939_resets[] = {
3870	[GCC_BLSP1_BCR] = { 0x01000 },
3871	[GCC_BLSP1_QUP1_BCR] = { 0x02000 },
3872	[GCC_BLSP1_UART1_BCR] = { 0x02038 },
3873	[GCC_BLSP1_QUP2_BCR] = { 0x03008 },
3874	[GCC_BLSP1_UART2_BCR] = { 0x03028 },
3875	[GCC_BLSP1_QUP3_BCR] = { 0x04018 },
3876	[GCC_BLSP1_UART3_BCR] = { 0x04038 },
3877	[GCC_BLSP1_QUP4_BCR] = { 0x05018 },
3878	[GCC_BLSP1_QUP5_BCR] = { 0x06018 },
3879	[GCC_BLSP1_QUP6_BCR] = { 0x07018 },
3880	[GCC_IMEM_BCR] = { 0x0e000 },
3881	[GCC_SMMU_BCR] = { 0x12000 },
3882	[GCC_APSS_TCU_BCR] = { 0x12050 },
3883	[GCC_SMMU_XPU_BCR] = { 0x12054 },
3884	[GCC_PCNOC_TBU_BCR] = { 0x12058 },
3885	[GCC_PRNG_BCR] = { 0x13000 },
3886	[GCC_BOOT_ROM_BCR] = { 0x13008 },
3887	[GCC_CRYPTO_BCR] = { 0x16000 },
3888	[GCC_SEC_CTRL_BCR] = { 0x1a000 },
3889	[GCC_AUDIO_CORE_BCR] = { 0x1c008 },
3890	[GCC_ULT_AUDIO_BCR] = { 0x1c0b4 },
3891	[GCC_DEHR_BCR] = { 0x1f000 },
3892	[GCC_SYSTEM_NOC_BCR] = { 0x26000 },
3893	[GCC_PCNOC_BCR] = { 0x27018 },
3894	[GCC_TCSR_BCR] = { 0x28000 },
3895	[GCC_QDSS_BCR] = { 0x29000 },
3896	[GCC_DCD_BCR] = { 0x2a000 },
3897	[GCC_MSG_RAM_BCR] = { 0x2b000 },
3898	[GCC_MPM_BCR] = { 0x2c000 },
3899	[GCC_SPMI_BCR] = { 0x2e000 },
3900	[GCC_SPDM_BCR] = { 0x2f000 },
3901	[GCC_MM_SPDM_BCR] = { 0x2f024 },
3902	[GCC_BIMC_BCR] = { 0x31000 },
3903	[GCC_RBCPR_BCR] = { 0x33000 },
3904	[GCC_TLMM_BCR] = { 0x34000 },
3905	[GCC_CAMSS_CSI2_BCR] = { 0x3c038 },
3906	[GCC_CAMSS_CSI2PHY_BCR] = { 0x3c044 },
3907	[GCC_CAMSS_CSI2RDI_BCR] = { 0x3c04c },
3908	[GCC_CAMSS_CSI2PIX_BCR] = { 0x3c054 },
3909	[GCC_USB_FS_BCR] = { 0x3f000 },
3910	[GCC_USB_HS_BCR] = { 0x41000 },
3911	[GCC_USB2A_PHY_BCR] = { 0x41028 },
3912	[GCC_SDCC1_BCR] = { 0x42000 },
3913	[GCC_SDCC2_BCR] = { 0x43000 },
3914	[GCC_PDM_BCR] = { 0x44000 },
3915	[GCC_SNOC_BUS_TIMEOUT0_BCR] = { 0x47000 },
3916	[GCC_PCNOC_BUS_TIMEOUT0_BCR] = { 0x48000 },
3917	[GCC_PCNOC_BUS_TIMEOUT1_BCR] = { 0x48008 },
3918	[GCC_PCNOC_BUS_TIMEOUT2_BCR] = { 0x48010 },
3919	[GCC_PCNOC_BUS_TIMEOUT3_BCR] = { 0x48018 },
3920	[GCC_PCNOC_BUS_TIMEOUT4_BCR] = { 0x48020 },
3921	[GCC_PCNOC_BUS_TIMEOUT5_BCR] = { 0x48028 },
3922	[GCC_PCNOC_BUS_TIMEOUT6_BCR] = { 0x48030 },
3923	[GCC_PCNOC_BUS_TIMEOUT7_BCR] = { 0x48038 },
3924	[GCC_PCNOC_BUS_TIMEOUT8_BCR] = { 0x48040 },
3925	[GCC_PCNOC_BUS_TIMEOUT9_BCR] = { 0x48048 },
3926	[GCC_MMSS_BCR] = { 0x4b000 },
3927	[GCC_VENUS0_BCR] = { 0x4c014 },
3928	[GCC_MDSS_BCR] = { 0x4d074 },
3929	[GCC_CAMSS_PHY0_BCR] = { 0x4e018 },
3930	[GCC_CAMSS_CSI0_BCR] = { 0x4e038 },
3931	[GCC_CAMSS_CSI0PHY_BCR] = { 0x4e044 },
3932	[GCC_CAMSS_CSI0RDI_BCR] = { 0x4e04c },
3933	[GCC_CAMSS_CSI0PIX_BCR] = { 0x4e054 },
3934	[GCC_CAMSS_PHY1_BCR] = { 0x4f018 },
3935	[GCC_CAMSS_CSI1_BCR] = { 0x4f038 },
3936	[GCC_CAMSS_CSI1PHY_BCR] = { 0x4f044 },
3937	[GCC_CAMSS_CSI1RDI_BCR] = { 0x4f04c },
3938	[GCC_CAMSS_CSI1PIX_BCR] = { 0x4f054 },
3939	[GCC_CAMSS_ISPIF_BCR] = { 0x50000 },
3940	[GCC_BLSP1_QUP4_SPI_APPS_CBCR] = { 0x0501c },
3941	[GCC_CAMSS_CCI_BCR] = { 0x51014 },
3942	[GCC_CAMSS_MCLK0_BCR] = { 0x52014 },
3943	[GCC_CAMSS_MCLK1_BCR] = { 0x53014 },
3944	[GCC_CAMSS_GP0_BCR] = { 0x54014 },
3945	[GCC_CAMSS_GP1_BCR] = { 0x55014 },
3946	[GCC_CAMSS_TOP_BCR] = { 0x56000 },
3947	[GCC_CAMSS_MICRO_BCR] = { 0x56008 },
3948	[GCC_CAMSS_JPEG_BCR] = { 0x57018 },
3949	[GCC_CAMSS_VFE_BCR] = { 0x58030 },
3950	[GCC_CAMSS_CSI_VFE0_BCR] = { 0x5804c },
3951	[GCC_OXILI_BCR] = { 0x59018 },
3952	[GCC_GMEM_BCR] = { 0x5902c },
3953	[GCC_CAMSS_AHB_BCR] = { 0x5a018 },
3954	[GCC_CAMSS_MCLK2_BCR] = { 0x5c014 },
3955	[GCC_MDP_TBU_BCR] = { 0x62000 },
3956	[GCC_GFX_TBU_BCR] = { 0x63000 },
3957	[GCC_GFX_TCU_BCR] = { 0x64000 },
3958	[GCC_MSS_TBU_AXI_BCR] = { 0x65000 },
3959	[GCC_MSS_TBU_GSS_AXI_BCR] = { 0x66000 },
3960	[GCC_MSS_TBU_Q6_AXI_BCR] = { 0x67000 },
3961	[GCC_GTCU_AHB_BCR] = { 0x68000 },
3962	[GCC_SMMU_CFG_BCR] = { 0x69000 },
3963	[GCC_VFE_TBU_BCR] = { 0x6a000 },
3964	[GCC_VENUS_TBU_BCR] = { 0x6b000 },
3965	[GCC_JPEG_TBU_BCR] = { 0x6c000 },
3966	[GCC_PRONTO_TBU_BCR] = { 0x6d000 },
3967	[GCC_CPP_TBU_BCR] = { 0x6e000 },
3968	[GCC_MDP_RT_TBU_BCR] = { 0x6f000 },
3969	[GCC_SMMU_CATS_BCR] = { 0x7c000 },
3970};
3971
3972static const struct regmap_config gcc_msm8939_regmap_config = {
3973	.reg_bits	= 32,
3974	.reg_stride	= 4,
3975	.val_bits	= 32,
3976	.max_register	= 0x80000,
3977	.fast_io	= true,
3978};
3979
3980static const struct qcom_cc_desc gcc_msm8939_desc = {
3981	.config = &gcc_msm8939_regmap_config,
3982	.clks = gcc_msm8939_clocks,
3983	.num_clks = ARRAY_SIZE(gcc_msm8939_clocks),
3984	.resets = gcc_msm8939_resets,
3985	.num_resets = ARRAY_SIZE(gcc_msm8939_resets),
3986	.gdscs = gcc_msm8939_gdscs,
3987	.num_gdscs = ARRAY_SIZE(gcc_msm8939_gdscs),
3988};
3989
3990static const struct of_device_id gcc_msm8939_match_table[] = {
3991	{ .compatible = "qcom,gcc-msm8939" },
3992	{ }
3993};
3994MODULE_DEVICE_TABLE(of, gcc_msm8939_match_table);
3995
3996static int gcc_msm8939_probe(struct platform_device *pdev)
3997{
3998	struct regmap *regmap;
3999
4000	regmap = qcom_cc_map(pdev, &gcc_msm8939_desc);
4001	if (IS_ERR(regmap))
4002		return PTR_ERR(regmap);
4003
4004	clk_pll_configure_sr_hpm_lp(&gpll3, regmap, &gpll3_config, true);
4005	clk_pll_configure_sr_hpm_lp(&gpll4, regmap, &gpll4_config, true);
4006
4007	return qcom_cc_really_probe(pdev, &gcc_msm8939_desc, regmap);
4008}
4009
4010static struct platform_driver gcc_msm8939_driver = {
4011	.probe		= gcc_msm8939_probe,
4012	.driver		= {
4013		.name	= "gcc-msm8939",
4014		.of_match_table = gcc_msm8939_match_table,
4015	},
4016};
4017
4018static int __init gcc_msm8939_init(void)
4019{
4020	return platform_driver_register(&gcc_msm8939_driver);
4021}
4022core_initcall(gcc_msm8939_init);
4023
4024static void __exit gcc_msm8939_exit(void)
4025{
4026	platform_driver_unregister(&gcc_msm8939_driver);
4027}
4028module_exit(gcc_msm8939_exit);
4029
4030MODULE_DESCRIPTION("Qualcomm GCC MSM8939 Driver");
4031MODULE_LICENSE("GPL v2");
4032