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