1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * Copyright (c) 2013, The Linux Foundation. All rights reserved.
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-msm8974.h>
18#include <dt-bindings/reset/qcom,gcc-msm8974.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_GPLL1,
32	P_GPLL4,
33};
34
35static const struct parent_map gcc_xo_gpll0_map[] = {
36	{ P_XO, 0 },
37	{ P_GPLL0, 1 }
38};
39
40static const char * const gcc_xo_gpll0[] = {
41	"xo",
42	"gpll0_vote",
43};
44
45static const struct parent_map gcc_xo_gpll0_gpll4_map[] = {
46	{ P_XO, 0 },
47	{ P_GPLL0, 1 },
48	{ P_GPLL4, 5 }
49};
50
51static const char * const gcc_xo_gpll0_gpll4[] = {
52	"xo",
53	"gpll0_vote",
54	"gpll4_vote",
55};
56
57static struct clk_pll gpll0 = {
58	.l_reg = 0x0004,
59	.m_reg = 0x0008,
60	.n_reg = 0x000c,
61	.config_reg = 0x0014,
62	.mode_reg = 0x0000,
63	.status_reg = 0x001c,
64	.status_bit = 17,
65	.clkr.hw.init = &(struct clk_init_data){
66		.name = "gpll0",
67		.parent_names = (const char *[]){ "xo" },
68		.num_parents = 1,
69		.ops = &clk_pll_ops,
70	},
71};
72
73static struct clk_regmap gpll0_vote = {
74	.enable_reg = 0x1480,
75	.enable_mask = BIT(0),
76	.hw.init = &(struct clk_init_data){
77		.name = "gpll0_vote",
78		.parent_names = (const char *[]){ "gpll0" },
79		.num_parents = 1,
80		.ops = &clk_pll_vote_ops,
81	},
82};
83
84static struct clk_rcg2 config_noc_clk_src = {
85	.cmd_rcgr = 0x0150,
86	.hid_width = 5,
87	.parent_map = gcc_xo_gpll0_map,
88	.clkr.hw.init = &(struct clk_init_data){
89		.name = "config_noc_clk_src",
90		.parent_names = gcc_xo_gpll0,
91		.num_parents = 2,
92		.ops = &clk_rcg2_ops,
93	},
94};
95
96static struct clk_rcg2 periph_noc_clk_src = {
97	.cmd_rcgr = 0x0190,
98	.hid_width = 5,
99	.parent_map = gcc_xo_gpll0_map,
100	.clkr.hw.init = &(struct clk_init_data){
101		.name = "periph_noc_clk_src",
102		.parent_names = gcc_xo_gpll0,
103		.num_parents = 2,
104		.ops = &clk_rcg2_ops,
105	},
106};
107
108static struct clk_rcg2 system_noc_clk_src = {
109	.cmd_rcgr = 0x0120,
110	.hid_width = 5,
111	.parent_map = gcc_xo_gpll0_map,
112	.clkr.hw.init = &(struct clk_init_data){
113		.name = "system_noc_clk_src",
114		.parent_names = gcc_xo_gpll0,
115		.num_parents = 2,
116		.ops = &clk_rcg2_ops,
117	},
118};
119
120static struct clk_pll gpll1 = {
121	.l_reg = 0x0044,
122	.m_reg = 0x0048,
123	.n_reg = 0x004c,
124	.config_reg = 0x0054,
125	.mode_reg = 0x0040,
126	.status_reg = 0x005c,
127	.status_bit = 17,
128	.clkr.hw.init = &(struct clk_init_data){
129		.name = "gpll1",
130		.parent_names = (const char *[]){ "xo" },
131		.num_parents = 1,
132		.ops = &clk_pll_ops,
133	},
134};
135
136static struct clk_regmap gpll1_vote = {
137	.enable_reg = 0x1480,
138	.enable_mask = BIT(1),
139	.hw.init = &(struct clk_init_data){
140		.name = "gpll1_vote",
141		.parent_names = (const char *[]){ "gpll1" },
142		.num_parents = 1,
143		.ops = &clk_pll_vote_ops,
144	},
145};
146
147static struct clk_pll gpll4 = {
148	.l_reg = 0x1dc4,
149	.m_reg = 0x1dc8,
150	.n_reg = 0x1dcc,
151	.config_reg = 0x1dd4,
152	.mode_reg = 0x1dc0,
153	.status_reg = 0x1ddc,
154	.status_bit = 17,
155	.clkr.hw.init = &(struct clk_init_data){
156		.name = "gpll4",
157		.parent_names = (const char *[]){ "xo" },
158		.num_parents = 1,
159		.ops = &clk_pll_ops,
160	},
161};
162
163static struct clk_regmap gpll4_vote = {
164	.enable_reg = 0x1480,
165	.enable_mask = BIT(4),
166	.hw.init = &(struct clk_init_data){
167		.name = "gpll4_vote",
168		.parent_names = (const char *[]){ "gpll4" },
169		.num_parents = 1,
170		.ops = &clk_pll_vote_ops,
171	},
172};
173
174static const struct freq_tbl ftbl_gcc_usb30_master_clk[] = {
175	F(125000000, P_GPLL0, 1, 5, 24),
176	{ }
177};
178
179static struct clk_rcg2 usb30_master_clk_src = {
180	.cmd_rcgr = 0x03d4,
181	.mnd_width = 8,
182	.hid_width = 5,
183	.parent_map = gcc_xo_gpll0_map,
184	.freq_tbl = ftbl_gcc_usb30_master_clk,
185	.clkr.hw.init = &(struct clk_init_data){
186		.name = "usb30_master_clk_src",
187		.parent_names = gcc_xo_gpll0,
188		.num_parents = 2,
189		.ops = &clk_rcg2_ops,
190	},
191};
192
193static const struct freq_tbl ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk[] = {
194	F(19200000, P_XO, 1, 0, 0),
195	F(37500000, P_GPLL0, 16, 0, 0),
196	F(50000000, P_GPLL0, 12, 0, 0),
197	{ }
198};
199
200static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
201	.cmd_rcgr = 0x0660,
202	.hid_width = 5,
203	.parent_map = gcc_xo_gpll0_map,
204	.freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
205	.clkr.hw.init = &(struct clk_init_data){
206		.name = "blsp1_qup1_i2c_apps_clk_src",
207		.parent_names = gcc_xo_gpll0,
208		.num_parents = 2,
209		.ops = &clk_rcg2_ops,
210	},
211};
212
213static const struct freq_tbl ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk[] = {
214	F(960000, P_XO, 10, 1, 2),
215	F(4800000, P_XO, 4, 0, 0),
216	F(9600000, P_XO, 2, 0, 0),
217	F(15000000, P_GPLL0, 10, 1, 4),
218	F(19200000, P_XO, 1, 0, 0),
219	F(25000000, P_GPLL0, 12, 1, 2),
220	F(50000000, P_GPLL0, 12, 0, 0),
221	{ }
222};
223
224static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
225	.cmd_rcgr = 0x064c,
226	.mnd_width = 8,
227	.hid_width = 5,
228	.parent_map = gcc_xo_gpll0_map,
229	.freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
230	.clkr.hw.init = &(struct clk_init_data){
231		.name = "blsp1_qup1_spi_apps_clk_src",
232		.parent_names = gcc_xo_gpll0,
233		.num_parents = 2,
234		.ops = &clk_rcg2_ops,
235	},
236};
237
238static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
239	.cmd_rcgr = 0x06e0,
240	.hid_width = 5,
241	.parent_map = gcc_xo_gpll0_map,
242	.freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
243	.clkr.hw.init = &(struct clk_init_data){
244		.name = "blsp1_qup2_i2c_apps_clk_src",
245		.parent_names = gcc_xo_gpll0,
246		.num_parents = 2,
247		.ops = &clk_rcg2_ops,
248	},
249};
250
251static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
252	.cmd_rcgr = 0x06cc,
253	.mnd_width = 8,
254	.hid_width = 5,
255	.parent_map = gcc_xo_gpll0_map,
256	.freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
257	.clkr.hw.init = &(struct clk_init_data){
258		.name = "blsp1_qup2_spi_apps_clk_src",
259		.parent_names = gcc_xo_gpll0,
260		.num_parents = 2,
261		.ops = &clk_rcg2_ops,
262	},
263};
264
265static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
266	.cmd_rcgr = 0x0760,
267	.hid_width = 5,
268	.parent_map = gcc_xo_gpll0_map,
269	.freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
270	.clkr.hw.init = &(struct clk_init_data){
271		.name = "blsp1_qup3_i2c_apps_clk_src",
272		.parent_names = gcc_xo_gpll0,
273		.num_parents = 2,
274		.ops = &clk_rcg2_ops,
275	},
276};
277
278static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
279	.cmd_rcgr = 0x074c,
280	.mnd_width = 8,
281	.hid_width = 5,
282	.parent_map = gcc_xo_gpll0_map,
283	.freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
284	.clkr.hw.init = &(struct clk_init_data){
285		.name = "blsp1_qup3_spi_apps_clk_src",
286		.parent_names = gcc_xo_gpll0,
287		.num_parents = 2,
288		.ops = &clk_rcg2_ops,
289	},
290};
291
292static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
293	.cmd_rcgr = 0x07e0,
294	.hid_width = 5,
295	.parent_map = gcc_xo_gpll0_map,
296	.freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
297	.clkr.hw.init = &(struct clk_init_data){
298		.name = "blsp1_qup4_i2c_apps_clk_src",
299		.parent_names = gcc_xo_gpll0,
300		.num_parents = 2,
301		.ops = &clk_rcg2_ops,
302	},
303};
304
305static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
306	.cmd_rcgr = 0x07cc,
307	.mnd_width = 8,
308	.hid_width = 5,
309	.parent_map = gcc_xo_gpll0_map,
310	.freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
311	.clkr.hw.init = &(struct clk_init_data){
312		.name = "blsp1_qup4_spi_apps_clk_src",
313		.parent_names = gcc_xo_gpll0,
314		.num_parents = 2,
315		.ops = &clk_rcg2_ops,
316	},
317};
318
319static struct clk_rcg2 blsp1_qup5_i2c_apps_clk_src = {
320	.cmd_rcgr = 0x0860,
321	.hid_width = 5,
322	.parent_map = gcc_xo_gpll0_map,
323	.freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
324	.clkr.hw.init = &(struct clk_init_data){
325		.name = "blsp1_qup5_i2c_apps_clk_src",
326		.parent_names = gcc_xo_gpll0,
327		.num_parents = 2,
328		.ops = &clk_rcg2_ops,
329	},
330};
331
332static struct clk_rcg2 blsp1_qup5_spi_apps_clk_src = {
333	.cmd_rcgr = 0x084c,
334	.mnd_width = 8,
335	.hid_width = 5,
336	.parent_map = gcc_xo_gpll0_map,
337	.freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
338	.clkr.hw.init = &(struct clk_init_data){
339		.name = "blsp1_qup5_spi_apps_clk_src",
340		.parent_names = gcc_xo_gpll0,
341		.num_parents = 2,
342		.ops = &clk_rcg2_ops,
343	},
344};
345
346static struct clk_rcg2 blsp1_qup6_i2c_apps_clk_src = {
347	.cmd_rcgr = 0x08e0,
348	.hid_width = 5,
349	.parent_map = gcc_xo_gpll0_map,
350	.freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
351	.clkr.hw.init = &(struct clk_init_data){
352		.name = "blsp1_qup6_i2c_apps_clk_src",
353		.parent_names = gcc_xo_gpll0,
354		.num_parents = 2,
355		.ops = &clk_rcg2_ops,
356	},
357};
358
359static struct clk_rcg2 blsp1_qup6_spi_apps_clk_src = {
360	.cmd_rcgr = 0x08cc,
361	.mnd_width = 8,
362	.hid_width = 5,
363	.parent_map = gcc_xo_gpll0_map,
364	.freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
365	.clkr.hw.init = &(struct clk_init_data){
366		.name = "blsp1_qup6_spi_apps_clk_src",
367		.parent_names = gcc_xo_gpll0,
368		.num_parents = 2,
369		.ops = &clk_rcg2_ops,
370	},
371};
372
373static const struct freq_tbl ftbl_gcc_blsp1_2_uart1_6_apps_clk[] = {
374	F(3686400, P_GPLL0, 1, 96, 15625),
375	F(7372800, P_GPLL0, 1, 192, 15625),
376	F(14745600, P_GPLL0, 1, 384, 15625),
377	F(16000000, P_GPLL0, 5, 2, 15),
378	F(19200000, P_XO, 1, 0, 0),
379	F(24000000, P_GPLL0, 5, 1, 5),
380	F(32000000, P_GPLL0, 1, 4, 75),
381	F(40000000, P_GPLL0, 15, 0, 0),
382	F(46400000, P_GPLL0, 1, 29, 375),
383	F(48000000, P_GPLL0, 12.5, 0, 0),
384	F(51200000, P_GPLL0, 1, 32, 375),
385	F(56000000, P_GPLL0, 1, 7, 75),
386	F(58982400, P_GPLL0, 1, 1536, 15625),
387	F(60000000, P_GPLL0, 10, 0, 0),
388	F(63160000, P_GPLL0, 9.5, 0, 0),
389	{ }
390};
391
392static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
393	.cmd_rcgr = 0x068c,
394	.mnd_width = 16,
395	.hid_width = 5,
396	.parent_map = gcc_xo_gpll0_map,
397	.freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
398	.clkr.hw.init = &(struct clk_init_data){
399		.name = "blsp1_uart1_apps_clk_src",
400		.parent_names = gcc_xo_gpll0,
401		.num_parents = 2,
402		.ops = &clk_rcg2_ops,
403	},
404};
405
406static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
407	.cmd_rcgr = 0x070c,
408	.mnd_width = 16,
409	.hid_width = 5,
410	.parent_map = gcc_xo_gpll0_map,
411	.freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
412	.clkr.hw.init = &(struct clk_init_data){
413		.name = "blsp1_uart2_apps_clk_src",
414		.parent_names = gcc_xo_gpll0,
415		.num_parents = 2,
416		.ops = &clk_rcg2_ops,
417	},
418};
419
420static struct clk_rcg2 blsp1_uart3_apps_clk_src = {
421	.cmd_rcgr = 0x078c,
422	.mnd_width = 16,
423	.hid_width = 5,
424	.parent_map = gcc_xo_gpll0_map,
425	.freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
426	.clkr.hw.init = &(struct clk_init_data){
427		.name = "blsp1_uart3_apps_clk_src",
428		.parent_names = gcc_xo_gpll0,
429		.num_parents = 2,
430		.ops = &clk_rcg2_ops,
431	},
432};
433
434static struct clk_rcg2 blsp1_uart4_apps_clk_src = {
435	.cmd_rcgr = 0x080c,
436	.mnd_width = 16,
437	.hid_width = 5,
438	.parent_map = gcc_xo_gpll0_map,
439	.freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
440	.clkr.hw.init = &(struct clk_init_data){
441		.name = "blsp1_uart4_apps_clk_src",
442		.parent_names = gcc_xo_gpll0,
443		.num_parents = 2,
444		.ops = &clk_rcg2_ops,
445	},
446};
447
448static struct clk_rcg2 blsp1_uart5_apps_clk_src = {
449	.cmd_rcgr = 0x088c,
450	.mnd_width = 16,
451	.hid_width = 5,
452	.parent_map = gcc_xo_gpll0_map,
453	.freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
454	.clkr.hw.init = &(struct clk_init_data){
455		.name = "blsp1_uart5_apps_clk_src",
456		.parent_names = gcc_xo_gpll0,
457		.num_parents = 2,
458		.ops = &clk_rcg2_ops,
459	},
460};
461
462static struct clk_rcg2 blsp1_uart6_apps_clk_src = {
463	.cmd_rcgr = 0x090c,
464	.mnd_width = 16,
465	.hid_width = 5,
466	.parent_map = gcc_xo_gpll0_map,
467	.freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
468	.clkr.hw.init = &(struct clk_init_data){
469		.name = "blsp1_uart6_apps_clk_src",
470		.parent_names = gcc_xo_gpll0,
471		.num_parents = 2,
472		.ops = &clk_rcg2_ops,
473	},
474};
475
476static struct clk_rcg2 blsp2_qup1_i2c_apps_clk_src = {
477	.cmd_rcgr = 0x09a0,
478	.hid_width = 5,
479	.parent_map = gcc_xo_gpll0_map,
480	.freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
481	.clkr.hw.init = &(struct clk_init_data){
482		.name = "blsp2_qup1_i2c_apps_clk_src",
483		.parent_names = gcc_xo_gpll0,
484		.num_parents = 2,
485		.ops = &clk_rcg2_ops,
486	},
487};
488
489static struct clk_rcg2 blsp2_qup1_spi_apps_clk_src = {
490	.cmd_rcgr = 0x098c,
491	.mnd_width = 8,
492	.hid_width = 5,
493	.parent_map = gcc_xo_gpll0_map,
494	.freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
495	.clkr.hw.init = &(struct clk_init_data){
496		.name = "blsp2_qup1_spi_apps_clk_src",
497		.parent_names = gcc_xo_gpll0,
498		.num_parents = 2,
499		.ops = &clk_rcg2_ops,
500	},
501};
502
503static struct clk_rcg2 blsp2_qup2_i2c_apps_clk_src = {
504	.cmd_rcgr = 0x0a20,
505	.hid_width = 5,
506	.parent_map = gcc_xo_gpll0_map,
507	.freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
508	.clkr.hw.init = &(struct clk_init_data){
509		.name = "blsp2_qup2_i2c_apps_clk_src",
510		.parent_names = gcc_xo_gpll0,
511		.num_parents = 2,
512		.ops = &clk_rcg2_ops,
513	},
514};
515
516static struct clk_rcg2 blsp2_qup2_spi_apps_clk_src = {
517	.cmd_rcgr = 0x0a0c,
518	.mnd_width = 8,
519	.hid_width = 5,
520	.parent_map = gcc_xo_gpll0_map,
521	.freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
522	.clkr.hw.init = &(struct clk_init_data){
523		.name = "blsp2_qup2_spi_apps_clk_src",
524		.parent_names = gcc_xo_gpll0,
525		.num_parents = 2,
526		.ops = &clk_rcg2_ops,
527	},
528};
529
530static struct clk_rcg2 blsp2_qup3_i2c_apps_clk_src = {
531	.cmd_rcgr = 0x0aa0,
532	.hid_width = 5,
533	.parent_map = gcc_xo_gpll0_map,
534	.freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
535	.clkr.hw.init = &(struct clk_init_data){
536		.name = "blsp2_qup3_i2c_apps_clk_src",
537		.parent_names = gcc_xo_gpll0,
538		.num_parents = 2,
539		.ops = &clk_rcg2_ops,
540	},
541};
542
543static struct clk_rcg2 blsp2_qup3_spi_apps_clk_src = {
544	.cmd_rcgr = 0x0a8c,
545	.mnd_width = 8,
546	.hid_width = 5,
547	.parent_map = gcc_xo_gpll0_map,
548	.freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
549	.clkr.hw.init = &(struct clk_init_data){
550		.name = "blsp2_qup3_spi_apps_clk_src",
551		.parent_names = gcc_xo_gpll0,
552		.num_parents = 2,
553		.ops = &clk_rcg2_ops,
554	},
555};
556
557static struct clk_rcg2 blsp2_qup4_i2c_apps_clk_src = {
558	.cmd_rcgr = 0x0b20,
559	.hid_width = 5,
560	.parent_map = gcc_xo_gpll0_map,
561	.freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
562	.clkr.hw.init = &(struct clk_init_data){
563		.name = "blsp2_qup4_i2c_apps_clk_src",
564		.parent_names = gcc_xo_gpll0,
565		.num_parents = 2,
566		.ops = &clk_rcg2_ops,
567	},
568};
569
570static struct clk_rcg2 blsp2_qup4_spi_apps_clk_src = {
571	.cmd_rcgr = 0x0b0c,
572	.mnd_width = 8,
573	.hid_width = 5,
574	.parent_map = gcc_xo_gpll0_map,
575	.freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
576	.clkr.hw.init = &(struct clk_init_data){
577		.name = "blsp2_qup4_spi_apps_clk_src",
578		.parent_names = gcc_xo_gpll0,
579		.num_parents = 2,
580		.ops = &clk_rcg2_ops,
581	},
582};
583
584static struct clk_rcg2 blsp2_qup5_i2c_apps_clk_src = {
585	.cmd_rcgr = 0x0ba0,
586	.hid_width = 5,
587	.parent_map = gcc_xo_gpll0_map,
588	.freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
589	.clkr.hw.init = &(struct clk_init_data){
590		.name = "blsp2_qup5_i2c_apps_clk_src",
591		.parent_names = gcc_xo_gpll0,
592		.num_parents = 2,
593		.ops = &clk_rcg2_ops,
594	},
595};
596
597static struct clk_rcg2 blsp2_qup5_spi_apps_clk_src = {
598	.cmd_rcgr = 0x0b8c,
599	.mnd_width = 8,
600	.hid_width = 5,
601	.parent_map = gcc_xo_gpll0_map,
602	.freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
603	.clkr.hw.init = &(struct clk_init_data){
604		.name = "blsp2_qup5_spi_apps_clk_src",
605		.parent_names = gcc_xo_gpll0,
606		.num_parents = 2,
607		.ops = &clk_rcg2_ops,
608	},
609};
610
611static struct clk_rcg2 blsp2_qup6_i2c_apps_clk_src = {
612	.cmd_rcgr = 0x0c20,
613	.hid_width = 5,
614	.parent_map = gcc_xo_gpll0_map,
615	.freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
616	.clkr.hw.init = &(struct clk_init_data){
617		.name = "blsp2_qup6_i2c_apps_clk_src",
618		.parent_names = gcc_xo_gpll0,
619		.num_parents = 2,
620		.ops = &clk_rcg2_ops,
621	},
622};
623
624static struct clk_rcg2 blsp2_qup6_spi_apps_clk_src = {
625	.cmd_rcgr = 0x0c0c,
626	.mnd_width = 8,
627	.hid_width = 5,
628	.parent_map = gcc_xo_gpll0_map,
629	.freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
630	.clkr.hw.init = &(struct clk_init_data){
631		.name = "blsp2_qup6_spi_apps_clk_src",
632		.parent_names = gcc_xo_gpll0,
633		.num_parents = 2,
634		.ops = &clk_rcg2_ops,
635	},
636};
637
638static struct clk_rcg2 blsp2_uart1_apps_clk_src = {
639	.cmd_rcgr = 0x09cc,
640	.mnd_width = 16,
641	.hid_width = 5,
642	.parent_map = gcc_xo_gpll0_map,
643	.freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
644	.clkr.hw.init = &(struct clk_init_data){
645		.name = "blsp2_uart1_apps_clk_src",
646		.parent_names = gcc_xo_gpll0,
647		.num_parents = 2,
648		.ops = &clk_rcg2_ops,
649	},
650};
651
652static struct clk_rcg2 blsp2_uart2_apps_clk_src = {
653	.cmd_rcgr = 0x0a4c,
654	.mnd_width = 16,
655	.hid_width = 5,
656	.parent_map = gcc_xo_gpll0_map,
657	.freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
658	.clkr.hw.init = &(struct clk_init_data){
659		.name = "blsp2_uart2_apps_clk_src",
660		.parent_names = gcc_xo_gpll0,
661		.num_parents = 2,
662		.ops = &clk_rcg2_ops,
663	},
664};
665
666static struct clk_rcg2 blsp2_uart3_apps_clk_src = {
667	.cmd_rcgr = 0x0acc,
668	.mnd_width = 16,
669	.hid_width = 5,
670	.parent_map = gcc_xo_gpll0_map,
671	.freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
672	.clkr.hw.init = &(struct clk_init_data){
673		.name = "blsp2_uart3_apps_clk_src",
674		.parent_names = gcc_xo_gpll0,
675		.num_parents = 2,
676		.ops = &clk_rcg2_ops,
677	},
678};
679
680static struct clk_rcg2 blsp2_uart4_apps_clk_src = {
681	.cmd_rcgr = 0x0b4c,
682	.mnd_width = 16,
683	.hid_width = 5,
684	.parent_map = gcc_xo_gpll0_map,
685	.freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
686	.clkr.hw.init = &(struct clk_init_data){
687		.name = "blsp2_uart4_apps_clk_src",
688		.parent_names = gcc_xo_gpll0,
689		.num_parents = 2,
690		.ops = &clk_rcg2_ops,
691	},
692};
693
694static struct clk_rcg2 blsp2_uart5_apps_clk_src = {
695	.cmd_rcgr = 0x0bcc,
696	.mnd_width = 16,
697	.hid_width = 5,
698	.parent_map = gcc_xo_gpll0_map,
699	.freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
700	.clkr.hw.init = &(struct clk_init_data){
701		.name = "blsp2_uart5_apps_clk_src",
702		.parent_names = gcc_xo_gpll0,
703		.num_parents = 2,
704		.ops = &clk_rcg2_ops,
705	},
706};
707
708static struct clk_rcg2 blsp2_uart6_apps_clk_src = {
709	.cmd_rcgr = 0x0c4c,
710	.mnd_width = 16,
711	.hid_width = 5,
712	.parent_map = gcc_xo_gpll0_map,
713	.freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
714	.clkr.hw.init = &(struct clk_init_data){
715		.name = "blsp2_uart6_apps_clk_src",
716		.parent_names = gcc_xo_gpll0,
717		.num_parents = 2,
718		.ops = &clk_rcg2_ops,
719	},
720};
721
722static const struct freq_tbl ftbl_gcc_ce1_clk[] = {
723	F(50000000, P_GPLL0, 12, 0, 0),
724	F(75000000, P_GPLL0, 8, 0, 0),
725	F(100000000, P_GPLL0, 6, 0, 0),
726	F(150000000, P_GPLL0, 4, 0, 0),
727	{ }
728};
729
730static struct clk_rcg2 ce1_clk_src = {
731	.cmd_rcgr = 0x1050,
732	.hid_width = 5,
733	.parent_map = gcc_xo_gpll0_map,
734	.freq_tbl = ftbl_gcc_ce1_clk,
735	.clkr.hw.init = &(struct clk_init_data){
736		.name = "ce1_clk_src",
737		.parent_names = gcc_xo_gpll0,
738		.num_parents = 2,
739		.ops = &clk_rcg2_ops,
740	},
741};
742
743static const struct freq_tbl ftbl_gcc_ce2_clk[] = {
744	F(50000000, P_GPLL0, 12, 0, 0),
745	F(75000000, P_GPLL0, 8, 0, 0),
746	F(100000000, P_GPLL0, 6, 0, 0),
747	F(150000000, P_GPLL0, 4, 0, 0),
748	{ }
749};
750
751static struct clk_rcg2 ce2_clk_src = {
752	.cmd_rcgr = 0x1090,
753	.hid_width = 5,
754	.parent_map = gcc_xo_gpll0_map,
755	.freq_tbl = ftbl_gcc_ce2_clk,
756	.clkr.hw.init = &(struct clk_init_data){
757		.name = "ce2_clk_src",
758		.parent_names = gcc_xo_gpll0,
759		.num_parents = 2,
760		.ops = &clk_rcg2_ops,
761	},
762};
763
764static const struct freq_tbl ftbl_gcc_gp_clk[] = {
765	F(4800000, P_XO, 4, 0, 0),
766	F(6000000, P_GPLL0, 10, 1, 10),
767	F(6750000, P_GPLL0, 1, 1, 89),
768	F(8000000, P_GPLL0, 15, 1, 5),
769	F(9600000, P_XO, 2, 0, 0),
770	F(16000000, P_GPLL0, 1, 2, 75),
771	F(19200000, P_XO, 1, 0, 0),
772	F(24000000, P_GPLL0, 5, 1, 5),
773	{ }
774};
775
776
777static struct clk_rcg2 gp1_clk_src = {
778	.cmd_rcgr = 0x1904,
779	.mnd_width = 8,
780	.hid_width = 5,
781	.parent_map = gcc_xo_gpll0_map,
782	.freq_tbl = ftbl_gcc_gp_clk,
783	.clkr.hw.init = &(struct clk_init_data){
784		.name = "gp1_clk_src",
785		.parent_names = gcc_xo_gpll0,
786		.num_parents = 2,
787		.ops = &clk_rcg2_ops,
788	},
789};
790
791static struct clk_rcg2 gp2_clk_src = {
792	.cmd_rcgr = 0x1944,
793	.mnd_width = 8,
794	.hid_width = 5,
795	.parent_map = gcc_xo_gpll0_map,
796	.freq_tbl = ftbl_gcc_gp_clk,
797	.clkr.hw.init = &(struct clk_init_data){
798		.name = "gp2_clk_src",
799		.parent_names = gcc_xo_gpll0,
800		.num_parents = 2,
801		.ops = &clk_rcg2_ops,
802	},
803};
804
805static struct clk_rcg2 gp3_clk_src = {
806	.cmd_rcgr = 0x1984,
807	.mnd_width = 8,
808	.hid_width = 5,
809	.parent_map = gcc_xo_gpll0_map,
810	.freq_tbl = ftbl_gcc_gp_clk,
811	.clkr.hw.init = &(struct clk_init_data){
812		.name = "gp3_clk_src",
813		.parent_names = gcc_xo_gpll0,
814		.num_parents = 2,
815		.ops = &clk_rcg2_ops,
816	},
817};
818
819static const struct freq_tbl ftbl_gcc_pdm2_clk[] = {
820	F(60000000, P_GPLL0, 10, 0, 0),
821	{ }
822};
823
824static struct clk_rcg2 pdm2_clk_src = {
825	.cmd_rcgr = 0x0cd0,
826	.hid_width = 5,
827	.parent_map = gcc_xo_gpll0_map,
828	.freq_tbl = ftbl_gcc_pdm2_clk,
829	.clkr.hw.init = &(struct clk_init_data){
830		.name = "pdm2_clk_src",
831		.parent_names = gcc_xo_gpll0,
832		.num_parents = 2,
833		.ops = &clk_rcg2_ops,
834	},
835};
836
837static const struct freq_tbl ftbl_gcc_sdcc1_4_apps_clk[] = {
838	F(144000, P_XO, 16, 3, 25),
839	F(400000, P_XO, 12, 1, 4),
840	F(20000000, P_GPLL0, 15, 1, 2),
841	F(25000000, P_GPLL0, 12, 1, 2),
842	F(50000000, P_GPLL0, 12, 0, 0),
843	F(100000000, P_GPLL0, 6, 0, 0),
844	F(200000000, P_GPLL0, 3, 0, 0),
845	{ }
846};
847
848static const struct freq_tbl ftbl_gcc_sdcc1_apps_clk_pro[] = {
849	F(144000, P_XO, 16, 3, 25),
850	F(400000, P_XO, 12, 1, 4),
851	F(20000000, P_GPLL0, 15, 1, 2),
852	F(25000000, P_GPLL0, 12, 1, 2),
853	F(50000000, P_GPLL0, 12, 0, 0),
854	F(100000000, P_GPLL0, 6, 0, 0),
855	F(192000000, P_GPLL4, 4, 0, 0),
856	F(200000000, P_GPLL0, 3, 0, 0),
857	F(384000000, P_GPLL4, 2, 0, 0),
858	{ }
859};
860
861static struct clk_init_data sdcc1_apps_clk_src_init = {
862	.name = "sdcc1_apps_clk_src",
863	.parent_names = gcc_xo_gpll0,
864	.num_parents = 2,
865	.ops = &clk_rcg2_floor_ops,
866};
867
868static struct clk_rcg2 sdcc1_apps_clk_src = {
869	.cmd_rcgr = 0x04d0,
870	.mnd_width = 8,
871	.hid_width = 5,
872	.parent_map = gcc_xo_gpll0_map,
873	.freq_tbl = ftbl_gcc_sdcc1_4_apps_clk,
874	.clkr.hw.init = &sdcc1_apps_clk_src_init,
875};
876
877static struct clk_rcg2 sdcc2_apps_clk_src = {
878	.cmd_rcgr = 0x0510,
879	.mnd_width = 8,
880	.hid_width = 5,
881	.parent_map = gcc_xo_gpll0_map,
882	.freq_tbl = ftbl_gcc_sdcc1_4_apps_clk,
883	.clkr.hw.init = &(struct clk_init_data){
884		.name = "sdcc2_apps_clk_src",
885		.parent_names = gcc_xo_gpll0,
886		.num_parents = 2,
887		.ops = &clk_rcg2_floor_ops,
888	},
889};
890
891static struct clk_rcg2 sdcc3_apps_clk_src = {
892	.cmd_rcgr = 0x0550,
893	.mnd_width = 8,
894	.hid_width = 5,
895	.parent_map = gcc_xo_gpll0_map,
896	.freq_tbl = ftbl_gcc_sdcc1_4_apps_clk,
897	.clkr.hw.init = &(struct clk_init_data){
898		.name = "sdcc3_apps_clk_src",
899		.parent_names = gcc_xo_gpll0,
900		.num_parents = 2,
901		.ops = &clk_rcg2_floor_ops,
902	},
903};
904
905static struct clk_rcg2 sdcc4_apps_clk_src = {
906	.cmd_rcgr = 0x0590,
907	.mnd_width = 8,
908	.hid_width = 5,
909	.parent_map = gcc_xo_gpll0_map,
910	.freq_tbl = ftbl_gcc_sdcc1_4_apps_clk,
911	.clkr.hw.init = &(struct clk_init_data){
912		.name = "sdcc4_apps_clk_src",
913		.parent_names = gcc_xo_gpll0,
914		.num_parents = 2,
915		.ops = &clk_rcg2_floor_ops,
916	},
917};
918
919static const struct freq_tbl ftbl_gcc_tsif_ref_clk[] = {
920	F(105000, P_XO, 2, 1, 91),
921	{ }
922};
923
924static struct clk_rcg2 tsif_ref_clk_src = {
925	.cmd_rcgr = 0x0d90,
926	.mnd_width = 8,
927	.hid_width = 5,
928	.parent_map = gcc_xo_gpll0_map,
929	.freq_tbl = ftbl_gcc_tsif_ref_clk,
930	.clkr.hw.init = &(struct clk_init_data){
931		.name = "tsif_ref_clk_src",
932		.parent_names = gcc_xo_gpll0,
933		.num_parents = 2,
934		.ops = &clk_rcg2_ops,
935	},
936};
937
938static const struct freq_tbl ftbl_gcc_usb30_mock_utmi_clk[] = {
939	F(60000000, P_GPLL0, 10, 0, 0),
940	{ }
941};
942
943static struct clk_rcg2 usb30_mock_utmi_clk_src = {
944	.cmd_rcgr = 0x03e8,
945	.hid_width = 5,
946	.parent_map = gcc_xo_gpll0_map,
947	.freq_tbl = ftbl_gcc_usb30_mock_utmi_clk,
948	.clkr.hw.init = &(struct clk_init_data){
949		.name = "usb30_mock_utmi_clk_src",
950		.parent_names = gcc_xo_gpll0,
951		.num_parents = 2,
952		.ops = &clk_rcg2_ops,
953	},
954};
955
956static const struct freq_tbl ftbl_gcc_usb_hs_system_clk[] = {
957	F(60000000, P_GPLL0, 10, 0, 0),
958	F(75000000, P_GPLL0, 8, 0, 0),
959	{ }
960};
961
962static struct clk_rcg2 usb_hs_system_clk_src = {
963	.cmd_rcgr = 0x0490,
964	.hid_width = 5,
965	.parent_map = gcc_xo_gpll0_map,
966	.freq_tbl = ftbl_gcc_usb_hs_system_clk,
967	.clkr.hw.init = &(struct clk_init_data){
968		.name = "usb_hs_system_clk_src",
969		.parent_names = gcc_xo_gpll0,
970		.num_parents = 2,
971		.ops = &clk_rcg2_ops,
972	},
973};
974
975static const struct freq_tbl ftbl_gcc_usb_hsic_clk[] = {
976	F(480000000, P_GPLL1, 1, 0, 0),
977	{ }
978};
979
980static const struct parent_map usb_hsic_clk_src_map[] = {
981	{ P_XO, 0 },
982	{ P_GPLL1, 4 }
983};
984
985static struct clk_rcg2 usb_hsic_clk_src = {
986	.cmd_rcgr = 0x0440,
987	.hid_width = 5,
988	.parent_map = usb_hsic_clk_src_map,
989	.freq_tbl = ftbl_gcc_usb_hsic_clk,
990	.clkr.hw.init = &(struct clk_init_data){
991		.name = "usb_hsic_clk_src",
992		.parent_names = (const char *[]){
993			"xo",
994			"gpll1_vote",
995		},
996		.num_parents = 2,
997		.ops = &clk_rcg2_ops,
998	},
999};
1000
1001static const struct freq_tbl ftbl_gcc_usb_hsic_io_cal_clk[] = {
1002	F(9600000, P_XO, 2, 0, 0),
1003	{ }
1004};
1005
1006static struct clk_rcg2 usb_hsic_io_cal_clk_src = {
1007	.cmd_rcgr = 0x0458,
1008	.hid_width = 5,
1009	.parent_map = gcc_xo_gpll0_map,
1010	.freq_tbl = ftbl_gcc_usb_hsic_io_cal_clk,
1011	.clkr.hw.init = &(struct clk_init_data){
1012		.name = "usb_hsic_io_cal_clk_src",
1013		.parent_names = gcc_xo_gpll0,
1014		.num_parents = 1,
1015		.ops = &clk_rcg2_ops,
1016	},
1017};
1018
1019static const struct freq_tbl ftbl_gcc_usb_hsic_system_clk[] = {
1020	F(60000000, P_GPLL0, 10, 0, 0),
1021	F(75000000, P_GPLL0, 8, 0, 0),
1022	{ }
1023};
1024
1025static struct clk_rcg2 usb_hsic_system_clk_src = {
1026	.cmd_rcgr = 0x041c,
1027	.hid_width = 5,
1028	.parent_map = gcc_xo_gpll0_map,
1029	.freq_tbl = ftbl_gcc_usb_hsic_system_clk,
1030	.clkr.hw.init = &(struct clk_init_data){
1031		.name = "usb_hsic_system_clk_src",
1032		.parent_names = gcc_xo_gpll0,
1033		.num_parents = 2,
1034		.ops = &clk_rcg2_ops,
1035	},
1036};
1037
1038static struct clk_regmap gcc_mmss_gpll0_clk_src = {
1039	.enable_reg = 0x1484,
1040	.enable_mask = BIT(26),
1041	.hw.init = &(struct clk_init_data){
1042		.name = "mmss_gpll0_vote",
1043		.parent_names = (const char *[]){
1044			"gpll0_vote",
1045		},
1046		.num_parents = 1,
1047		.ops = &clk_branch_simple_ops,
1048	},
1049};
1050
1051static struct clk_branch gcc_bam_dma_ahb_clk = {
1052	.halt_reg = 0x0d44,
1053	.halt_check = BRANCH_HALT_VOTED,
1054	.clkr = {
1055		.enable_reg = 0x1484,
1056		.enable_mask = BIT(12),
1057		.hw.init = &(struct clk_init_data){
1058			.name = "gcc_bam_dma_ahb_clk",
1059			.parent_names = (const char *[]){
1060				"periph_noc_clk_src",
1061			},
1062			.num_parents = 1,
1063			.ops = &clk_branch2_ops,
1064		},
1065	},
1066};
1067
1068static struct clk_branch gcc_blsp1_ahb_clk = {
1069	.halt_reg = 0x05c4,
1070	.halt_check = BRANCH_HALT_VOTED,
1071	.clkr = {
1072		.enable_reg = 0x1484,
1073		.enable_mask = BIT(17),
1074		.hw.init = &(struct clk_init_data){
1075			.name = "gcc_blsp1_ahb_clk",
1076			.parent_names = (const char *[]){
1077				"periph_noc_clk_src",
1078			},
1079			.num_parents = 1,
1080			.ops = &clk_branch2_ops,
1081		},
1082	},
1083};
1084
1085static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
1086	.halt_reg = 0x0648,
1087	.clkr = {
1088		.enable_reg = 0x0648,
1089		.enable_mask = BIT(0),
1090		.hw.init = &(struct clk_init_data){
1091			.name = "gcc_blsp1_qup1_i2c_apps_clk",
1092			.parent_names = (const char *[]){
1093				"blsp1_qup1_i2c_apps_clk_src",
1094			},
1095			.num_parents = 1,
1096			.flags = CLK_SET_RATE_PARENT,
1097			.ops = &clk_branch2_ops,
1098		},
1099	},
1100};
1101
1102static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
1103	.halt_reg = 0x0644,
1104	.clkr = {
1105		.enable_reg = 0x0644,
1106		.enable_mask = BIT(0),
1107		.hw.init = &(struct clk_init_data){
1108			.name = "gcc_blsp1_qup1_spi_apps_clk",
1109			.parent_names = (const char *[]){
1110				"blsp1_qup1_spi_apps_clk_src",
1111			},
1112			.num_parents = 1,
1113			.flags = CLK_SET_RATE_PARENT,
1114			.ops = &clk_branch2_ops,
1115		},
1116	},
1117};
1118
1119static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
1120	.halt_reg = 0x06c8,
1121	.clkr = {
1122		.enable_reg = 0x06c8,
1123		.enable_mask = BIT(0),
1124		.hw.init = &(struct clk_init_data){
1125			.name = "gcc_blsp1_qup2_i2c_apps_clk",
1126			.parent_names = (const char *[]){
1127				"blsp1_qup2_i2c_apps_clk_src",
1128			},
1129			.num_parents = 1,
1130			.flags = CLK_SET_RATE_PARENT,
1131			.ops = &clk_branch2_ops,
1132		},
1133	},
1134};
1135
1136static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
1137	.halt_reg = 0x06c4,
1138	.clkr = {
1139		.enable_reg = 0x06c4,
1140		.enable_mask = BIT(0),
1141		.hw.init = &(struct clk_init_data){
1142			.name = "gcc_blsp1_qup2_spi_apps_clk",
1143			.parent_names = (const char *[]){
1144				"blsp1_qup2_spi_apps_clk_src",
1145			},
1146			.num_parents = 1,
1147			.flags = CLK_SET_RATE_PARENT,
1148			.ops = &clk_branch2_ops,
1149		},
1150	},
1151};
1152
1153static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
1154	.halt_reg = 0x0748,
1155	.clkr = {
1156		.enable_reg = 0x0748,
1157		.enable_mask = BIT(0),
1158		.hw.init = &(struct clk_init_data){
1159			.name = "gcc_blsp1_qup3_i2c_apps_clk",
1160			.parent_names = (const char *[]){
1161				"blsp1_qup3_i2c_apps_clk_src",
1162			},
1163			.num_parents = 1,
1164			.flags = CLK_SET_RATE_PARENT,
1165			.ops = &clk_branch2_ops,
1166		},
1167	},
1168};
1169
1170static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
1171	.halt_reg = 0x0744,
1172	.clkr = {
1173		.enable_reg = 0x0744,
1174		.enable_mask = BIT(0),
1175		.hw.init = &(struct clk_init_data){
1176			.name = "gcc_blsp1_qup3_spi_apps_clk",
1177			.parent_names = (const char *[]){
1178				"blsp1_qup3_spi_apps_clk_src",
1179			},
1180			.num_parents = 1,
1181			.flags = CLK_SET_RATE_PARENT,
1182			.ops = &clk_branch2_ops,
1183		},
1184	},
1185};
1186
1187static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
1188	.halt_reg = 0x07c8,
1189	.clkr = {
1190		.enable_reg = 0x07c8,
1191		.enable_mask = BIT(0),
1192		.hw.init = &(struct clk_init_data){
1193			.name = "gcc_blsp1_qup4_i2c_apps_clk",
1194			.parent_names = (const char *[]){
1195				"blsp1_qup4_i2c_apps_clk_src",
1196			},
1197			.num_parents = 1,
1198			.flags = CLK_SET_RATE_PARENT,
1199			.ops = &clk_branch2_ops,
1200		},
1201	},
1202};
1203
1204static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
1205	.halt_reg = 0x07c4,
1206	.clkr = {
1207		.enable_reg = 0x07c4,
1208		.enable_mask = BIT(0),
1209		.hw.init = &(struct clk_init_data){
1210			.name = "gcc_blsp1_qup4_spi_apps_clk",
1211			.parent_names = (const char *[]){
1212				"blsp1_qup4_spi_apps_clk_src",
1213			},
1214			.num_parents = 1,
1215			.flags = CLK_SET_RATE_PARENT,
1216			.ops = &clk_branch2_ops,
1217		},
1218	},
1219};
1220
1221static struct clk_branch gcc_blsp1_qup5_i2c_apps_clk = {
1222	.halt_reg = 0x0848,
1223	.clkr = {
1224		.enable_reg = 0x0848,
1225		.enable_mask = BIT(0),
1226		.hw.init = &(struct clk_init_data){
1227			.name = "gcc_blsp1_qup5_i2c_apps_clk",
1228			.parent_names = (const char *[]){
1229				"blsp1_qup5_i2c_apps_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_blsp1_qup5_spi_apps_clk = {
1239	.halt_reg = 0x0844,
1240	.clkr = {
1241		.enable_reg = 0x0844,
1242		.enable_mask = BIT(0),
1243		.hw.init = &(struct clk_init_data){
1244			.name = "gcc_blsp1_qup5_spi_apps_clk",
1245			.parent_names = (const char *[]){
1246				"blsp1_qup5_spi_apps_clk_src",
1247			},
1248			.num_parents = 1,
1249			.flags = CLK_SET_RATE_PARENT,
1250			.ops = &clk_branch2_ops,
1251		},
1252	},
1253};
1254
1255static struct clk_branch gcc_blsp1_qup6_i2c_apps_clk = {
1256	.halt_reg = 0x08c8,
1257	.clkr = {
1258		.enable_reg = 0x08c8,
1259		.enable_mask = BIT(0),
1260		.hw.init = &(struct clk_init_data){
1261			.name = "gcc_blsp1_qup6_i2c_apps_clk",
1262			.parent_names = (const char *[]){
1263				"blsp1_qup6_i2c_apps_clk_src",
1264			},
1265			.num_parents = 1,
1266			.flags = CLK_SET_RATE_PARENT,
1267			.ops = &clk_branch2_ops,
1268		},
1269	},
1270};
1271
1272static struct clk_branch gcc_blsp1_qup6_spi_apps_clk = {
1273	.halt_reg = 0x08c4,
1274	.clkr = {
1275		.enable_reg = 0x08c4,
1276		.enable_mask = BIT(0),
1277		.hw.init = &(struct clk_init_data){
1278			.name = "gcc_blsp1_qup6_spi_apps_clk",
1279			.parent_names = (const char *[]){
1280				"blsp1_qup6_spi_apps_clk_src",
1281			},
1282			.num_parents = 1,
1283			.flags = CLK_SET_RATE_PARENT,
1284			.ops = &clk_branch2_ops,
1285		},
1286	},
1287};
1288
1289static struct clk_branch gcc_blsp1_uart1_apps_clk = {
1290	.halt_reg = 0x0684,
1291	.clkr = {
1292		.enable_reg = 0x0684,
1293		.enable_mask = BIT(0),
1294		.hw.init = &(struct clk_init_data){
1295			.name = "gcc_blsp1_uart1_apps_clk",
1296			.parent_names = (const char *[]){
1297				"blsp1_uart1_apps_clk_src",
1298			},
1299			.num_parents = 1,
1300			.flags = CLK_SET_RATE_PARENT,
1301			.ops = &clk_branch2_ops,
1302		},
1303	},
1304};
1305
1306static struct clk_branch gcc_blsp1_uart2_apps_clk = {
1307	.halt_reg = 0x0704,
1308	.clkr = {
1309		.enable_reg = 0x0704,
1310		.enable_mask = BIT(0),
1311		.hw.init = &(struct clk_init_data){
1312			.name = "gcc_blsp1_uart2_apps_clk",
1313			.parent_names = (const char *[]){
1314				"blsp1_uart2_apps_clk_src",
1315			},
1316			.num_parents = 1,
1317			.flags = CLK_SET_RATE_PARENT,
1318			.ops = &clk_branch2_ops,
1319		},
1320	},
1321};
1322
1323static struct clk_branch gcc_blsp1_uart3_apps_clk = {
1324	.halt_reg = 0x0784,
1325	.clkr = {
1326		.enable_reg = 0x0784,
1327		.enable_mask = BIT(0),
1328		.hw.init = &(struct clk_init_data){
1329			.name = "gcc_blsp1_uart3_apps_clk",
1330			.parent_names = (const char *[]){
1331				"blsp1_uart3_apps_clk_src",
1332			},
1333			.num_parents = 1,
1334			.flags = CLK_SET_RATE_PARENT,
1335			.ops = &clk_branch2_ops,
1336		},
1337	},
1338};
1339
1340static struct clk_branch gcc_blsp1_uart4_apps_clk = {
1341	.halt_reg = 0x0804,
1342	.clkr = {
1343		.enable_reg = 0x0804,
1344		.enable_mask = BIT(0),
1345		.hw.init = &(struct clk_init_data){
1346			.name = "gcc_blsp1_uart4_apps_clk",
1347			.parent_names = (const char *[]){
1348				"blsp1_uart4_apps_clk_src",
1349			},
1350			.num_parents = 1,
1351			.flags = CLK_SET_RATE_PARENT,
1352			.ops = &clk_branch2_ops,
1353		},
1354	},
1355};
1356
1357static struct clk_branch gcc_blsp1_uart5_apps_clk = {
1358	.halt_reg = 0x0884,
1359	.clkr = {
1360		.enable_reg = 0x0884,
1361		.enable_mask = BIT(0),
1362		.hw.init = &(struct clk_init_data){
1363			.name = "gcc_blsp1_uart5_apps_clk",
1364			.parent_names = (const char *[]){
1365				"blsp1_uart5_apps_clk_src",
1366			},
1367			.num_parents = 1,
1368			.flags = CLK_SET_RATE_PARENT,
1369			.ops = &clk_branch2_ops,
1370		},
1371	},
1372};
1373
1374static struct clk_branch gcc_blsp1_uart6_apps_clk = {
1375	.halt_reg = 0x0904,
1376	.clkr = {
1377		.enable_reg = 0x0904,
1378		.enable_mask = BIT(0),
1379		.hw.init = &(struct clk_init_data){
1380			.name = "gcc_blsp1_uart6_apps_clk",
1381			.parent_names = (const char *[]){
1382				"blsp1_uart6_apps_clk_src",
1383			},
1384			.num_parents = 1,
1385			.flags = CLK_SET_RATE_PARENT,
1386			.ops = &clk_branch2_ops,
1387		},
1388	},
1389};
1390
1391static struct clk_branch gcc_blsp2_ahb_clk = {
1392	.halt_reg = 0x0944,
1393	.halt_check = BRANCH_HALT_VOTED,
1394	.clkr = {
1395		.enable_reg = 0x1484,
1396		.enable_mask = BIT(15),
1397		.hw.init = &(struct clk_init_data){
1398			.name = "gcc_blsp2_ahb_clk",
1399			.parent_names = (const char *[]){
1400				"periph_noc_clk_src",
1401			},
1402			.num_parents = 1,
1403			.ops = &clk_branch2_ops,
1404		},
1405	},
1406};
1407
1408static struct clk_branch gcc_blsp2_qup1_i2c_apps_clk = {
1409	.halt_reg = 0x0988,
1410	.clkr = {
1411		.enable_reg = 0x0988,
1412		.enable_mask = BIT(0),
1413		.hw.init = &(struct clk_init_data){
1414			.name = "gcc_blsp2_qup1_i2c_apps_clk",
1415			.parent_names = (const char *[]){
1416				"blsp2_qup1_i2c_apps_clk_src",
1417			},
1418			.num_parents = 1,
1419			.flags = CLK_SET_RATE_PARENT,
1420			.ops = &clk_branch2_ops,
1421		},
1422	},
1423};
1424
1425static struct clk_branch gcc_blsp2_qup1_spi_apps_clk = {
1426	.halt_reg = 0x0984,
1427	.clkr = {
1428		.enable_reg = 0x0984,
1429		.enable_mask = BIT(0),
1430		.hw.init = &(struct clk_init_data){
1431			.name = "gcc_blsp2_qup1_spi_apps_clk",
1432			.parent_names = (const char *[]){
1433				"blsp2_qup1_spi_apps_clk_src",
1434			},
1435			.num_parents = 1,
1436			.flags = CLK_SET_RATE_PARENT,
1437			.ops = &clk_branch2_ops,
1438		},
1439	},
1440};
1441
1442static struct clk_branch gcc_blsp2_qup2_i2c_apps_clk = {
1443	.halt_reg = 0x0a08,
1444	.clkr = {
1445		.enable_reg = 0x0a08,
1446		.enable_mask = BIT(0),
1447		.hw.init = &(struct clk_init_data){
1448			.name = "gcc_blsp2_qup2_i2c_apps_clk",
1449			.parent_names = (const char *[]){
1450				"blsp2_qup2_i2c_apps_clk_src",
1451			},
1452			.num_parents = 1,
1453			.flags = CLK_SET_RATE_PARENT,
1454			.ops = &clk_branch2_ops,
1455		},
1456	},
1457};
1458
1459static struct clk_branch gcc_blsp2_qup2_spi_apps_clk = {
1460	.halt_reg = 0x0a04,
1461	.clkr = {
1462		.enable_reg = 0x0a04,
1463		.enable_mask = BIT(0),
1464		.hw.init = &(struct clk_init_data){
1465			.name = "gcc_blsp2_qup2_spi_apps_clk",
1466			.parent_names = (const char *[]){
1467				"blsp2_qup2_spi_apps_clk_src",
1468			},
1469			.num_parents = 1,
1470			.flags = CLK_SET_RATE_PARENT,
1471			.ops = &clk_branch2_ops,
1472		},
1473	},
1474};
1475
1476static struct clk_branch gcc_blsp2_qup3_i2c_apps_clk = {
1477	.halt_reg = 0x0a88,
1478	.clkr = {
1479		.enable_reg = 0x0a88,
1480		.enable_mask = BIT(0),
1481		.hw.init = &(struct clk_init_data){
1482			.name = "gcc_blsp2_qup3_i2c_apps_clk",
1483			.parent_names = (const char *[]){
1484				"blsp2_qup3_i2c_apps_clk_src",
1485			},
1486			.num_parents = 1,
1487			.flags = CLK_SET_RATE_PARENT,
1488			.ops = &clk_branch2_ops,
1489		},
1490	},
1491};
1492
1493static struct clk_branch gcc_blsp2_qup3_spi_apps_clk = {
1494	.halt_reg = 0x0a84,
1495	.clkr = {
1496		.enable_reg = 0x0a84,
1497		.enable_mask = BIT(0),
1498		.hw.init = &(struct clk_init_data){
1499			.name = "gcc_blsp2_qup3_spi_apps_clk",
1500			.parent_names = (const char *[]){
1501				"blsp2_qup3_spi_apps_clk_src",
1502			},
1503			.num_parents = 1,
1504			.flags = CLK_SET_RATE_PARENT,
1505			.ops = &clk_branch2_ops,
1506		},
1507	},
1508};
1509
1510static struct clk_branch gcc_blsp2_qup4_i2c_apps_clk = {
1511	.halt_reg = 0x0b08,
1512	.clkr = {
1513		.enable_reg = 0x0b08,
1514		.enable_mask = BIT(0),
1515		.hw.init = &(struct clk_init_data){
1516			.name = "gcc_blsp2_qup4_i2c_apps_clk",
1517			.parent_names = (const char *[]){
1518				"blsp2_qup4_i2c_apps_clk_src",
1519			},
1520			.num_parents = 1,
1521			.flags = CLK_SET_RATE_PARENT,
1522			.ops = &clk_branch2_ops,
1523		},
1524	},
1525};
1526
1527static struct clk_branch gcc_blsp2_qup4_spi_apps_clk = {
1528	.halt_reg = 0x0b04,
1529	.clkr = {
1530		.enable_reg = 0x0b04,
1531		.enable_mask = BIT(0),
1532		.hw.init = &(struct clk_init_data){
1533			.name = "gcc_blsp2_qup4_spi_apps_clk",
1534			.parent_names = (const char *[]){
1535				"blsp2_qup4_spi_apps_clk_src",
1536			},
1537			.num_parents = 1,
1538			.flags = CLK_SET_RATE_PARENT,
1539			.ops = &clk_branch2_ops,
1540		},
1541	},
1542};
1543
1544static struct clk_branch gcc_blsp2_qup5_i2c_apps_clk = {
1545	.halt_reg = 0x0b88,
1546	.clkr = {
1547		.enable_reg = 0x0b88,
1548		.enable_mask = BIT(0),
1549		.hw.init = &(struct clk_init_data){
1550			.name = "gcc_blsp2_qup5_i2c_apps_clk",
1551			.parent_names = (const char *[]){
1552				"blsp2_qup5_i2c_apps_clk_src",
1553			},
1554			.num_parents = 1,
1555			.flags = CLK_SET_RATE_PARENT,
1556			.ops = &clk_branch2_ops,
1557		},
1558	},
1559};
1560
1561static struct clk_branch gcc_blsp2_qup5_spi_apps_clk = {
1562	.halt_reg = 0x0b84,
1563	.clkr = {
1564		.enable_reg = 0x0b84,
1565		.enable_mask = BIT(0),
1566		.hw.init = &(struct clk_init_data){
1567			.name = "gcc_blsp2_qup5_spi_apps_clk",
1568			.parent_names = (const char *[]){
1569				"blsp2_qup5_spi_apps_clk_src",
1570			},
1571			.num_parents = 1,
1572			.flags = CLK_SET_RATE_PARENT,
1573			.ops = &clk_branch2_ops,
1574		},
1575	},
1576};
1577
1578static struct clk_branch gcc_blsp2_qup6_i2c_apps_clk = {
1579	.halt_reg = 0x0c08,
1580	.clkr = {
1581		.enable_reg = 0x0c08,
1582		.enable_mask = BIT(0),
1583		.hw.init = &(struct clk_init_data){
1584			.name = "gcc_blsp2_qup6_i2c_apps_clk",
1585			.parent_names = (const char *[]){
1586				"blsp2_qup6_i2c_apps_clk_src",
1587			},
1588			.num_parents = 1,
1589			.flags = CLK_SET_RATE_PARENT,
1590			.ops = &clk_branch2_ops,
1591		},
1592	},
1593};
1594
1595static struct clk_branch gcc_blsp2_qup6_spi_apps_clk = {
1596	.halt_reg = 0x0c04,
1597	.clkr = {
1598		.enable_reg = 0x0c04,
1599		.enable_mask = BIT(0),
1600		.hw.init = &(struct clk_init_data){
1601			.name = "gcc_blsp2_qup6_spi_apps_clk",
1602			.parent_names = (const char *[]){
1603				"blsp2_qup6_spi_apps_clk_src",
1604			},
1605			.num_parents = 1,
1606			.flags = CLK_SET_RATE_PARENT,
1607			.ops = &clk_branch2_ops,
1608		},
1609	},
1610};
1611
1612static struct clk_branch gcc_blsp2_uart1_apps_clk = {
1613	.halt_reg = 0x09c4,
1614	.clkr = {
1615		.enable_reg = 0x09c4,
1616		.enable_mask = BIT(0),
1617		.hw.init = &(struct clk_init_data){
1618			.name = "gcc_blsp2_uart1_apps_clk",
1619			.parent_names = (const char *[]){
1620				"blsp2_uart1_apps_clk_src",
1621			},
1622			.num_parents = 1,
1623			.flags = CLK_SET_RATE_PARENT,
1624			.ops = &clk_branch2_ops,
1625		},
1626	},
1627};
1628
1629static struct clk_branch gcc_blsp2_uart2_apps_clk = {
1630	.halt_reg = 0x0a44,
1631	.clkr = {
1632		.enable_reg = 0x0a44,
1633		.enable_mask = BIT(0),
1634		.hw.init = &(struct clk_init_data){
1635			.name = "gcc_blsp2_uart2_apps_clk",
1636			.parent_names = (const char *[]){
1637				"blsp2_uart2_apps_clk_src",
1638			},
1639			.num_parents = 1,
1640			.flags = CLK_SET_RATE_PARENT,
1641			.ops = &clk_branch2_ops,
1642		},
1643	},
1644};
1645
1646static struct clk_branch gcc_blsp2_uart3_apps_clk = {
1647	.halt_reg = 0x0ac4,
1648	.clkr = {
1649		.enable_reg = 0x0ac4,
1650		.enable_mask = BIT(0),
1651		.hw.init = &(struct clk_init_data){
1652			.name = "gcc_blsp2_uart3_apps_clk",
1653			.parent_names = (const char *[]){
1654				"blsp2_uart3_apps_clk_src",
1655			},
1656			.num_parents = 1,
1657			.flags = CLK_SET_RATE_PARENT,
1658			.ops = &clk_branch2_ops,
1659		},
1660	},
1661};
1662
1663static struct clk_branch gcc_blsp2_uart4_apps_clk = {
1664	.halt_reg = 0x0b44,
1665	.clkr = {
1666		.enable_reg = 0x0b44,
1667		.enable_mask = BIT(0),
1668		.hw.init = &(struct clk_init_data){
1669			.name = "gcc_blsp2_uart4_apps_clk",
1670			.parent_names = (const char *[]){
1671				"blsp2_uart4_apps_clk_src",
1672			},
1673			.num_parents = 1,
1674			.flags = CLK_SET_RATE_PARENT,
1675			.ops = &clk_branch2_ops,
1676		},
1677	},
1678};
1679
1680static struct clk_branch gcc_blsp2_uart5_apps_clk = {
1681	.halt_reg = 0x0bc4,
1682	.clkr = {
1683		.enable_reg = 0x0bc4,
1684		.enable_mask = BIT(0),
1685		.hw.init = &(struct clk_init_data){
1686			.name = "gcc_blsp2_uart5_apps_clk",
1687			.parent_names = (const char *[]){
1688				"blsp2_uart5_apps_clk_src",
1689			},
1690			.num_parents = 1,
1691			.flags = CLK_SET_RATE_PARENT,
1692			.ops = &clk_branch2_ops,
1693		},
1694	},
1695};
1696
1697static struct clk_branch gcc_blsp2_uart6_apps_clk = {
1698	.halt_reg = 0x0c44,
1699	.clkr = {
1700		.enable_reg = 0x0c44,
1701		.enable_mask = BIT(0),
1702		.hw.init = &(struct clk_init_data){
1703			.name = "gcc_blsp2_uart6_apps_clk",
1704			.parent_names = (const char *[]){
1705				"blsp2_uart6_apps_clk_src",
1706			},
1707			.num_parents = 1,
1708			.flags = CLK_SET_RATE_PARENT,
1709			.ops = &clk_branch2_ops,
1710		},
1711	},
1712};
1713
1714static struct clk_branch gcc_boot_rom_ahb_clk = {
1715	.halt_reg = 0x0e04,
1716	.halt_check = BRANCH_HALT_VOTED,
1717	.clkr = {
1718		.enable_reg = 0x1484,
1719		.enable_mask = BIT(10),
1720		.hw.init = &(struct clk_init_data){
1721			.name = "gcc_boot_rom_ahb_clk",
1722			.parent_names = (const char *[]){
1723				"config_noc_clk_src",
1724			},
1725			.num_parents = 1,
1726			.ops = &clk_branch2_ops,
1727		},
1728	},
1729};
1730
1731static struct clk_branch gcc_ce1_ahb_clk = {
1732	.halt_reg = 0x104c,
1733	.halt_check = BRANCH_HALT_VOTED,
1734	.clkr = {
1735		.enable_reg = 0x1484,
1736		.enable_mask = BIT(3),
1737		.hw.init = &(struct clk_init_data){
1738			.name = "gcc_ce1_ahb_clk",
1739			.parent_names = (const char *[]){
1740				"config_noc_clk_src",
1741			},
1742			.num_parents = 1,
1743			.ops = &clk_branch2_ops,
1744		},
1745	},
1746};
1747
1748static struct clk_branch gcc_ce1_axi_clk = {
1749	.halt_reg = 0x1048,
1750	.halt_check = BRANCH_HALT_VOTED,
1751	.clkr = {
1752		.enable_reg = 0x1484,
1753		.enable_mask = BIT(4),
1754		.hw.init = &(struct clk_init_data){
1755			.name = "gcc_ce1_axi_clk",
1756			.parent_names = (const char *[]){
1757				"system_noc_clk_src",
1758			},
1759			.num_parents = 1,
1760			.ops = &clk_branch2_ops,
1761		},
1762	},
1763};
1764
1765static struct clk_branch gcc_ce1_clk = {
1766	.halt_reg = 0x1050,
1767	.halt_check = BRANCH_HALT_VOTED,
1768	.clkr = {
1769		.enable_reg = 0x1484,
1770		.enable_mask = BIT(5),
1771		.hw.init = &(struct clk_init_data){
1772			.name = "gcc_ce1_clk",
1773			.parent_names = (const char *[]){
1774				"ce1_clk_src",
1775			},
1776			.num_parents = 1,
1777			.flags = CLK_SET_RATE_PARENT,
1778			.ops = &clk_branch2_ops,
1779		},
1780	},
1781};
1782
1783static struct clk_branch gcc_ce2_ahb_clk = {
1784	.halt_reg = 0x108c,
1785	.halt_check = BRANCH_HALT_VOTED,
1786	.clkr = {
1787		.enable_reg = 0x1484,
1788		.enable_mask = BIT(0),
1789		.hw.init = &(struct clk_init_data){
1790			.name = "gcc_ce2_ahb_clk",
1791			.parent_names = (const char *[]){
1792				"config_noc_clk_src",
1793			},
1794			.num_parents = 1,
1795			.ops = &clk_branch2_ops,
1796		},
1797	},
1798};
1799
1800static struct clk_branch gcc_ce2_axi_clk = {
1801	.halt_reg = 0x1088,
1802	.halt_check = BRANCH_HALT_VOTED,
1803	.clkr = {
1804		.enable_reg = 0x1484,
1805		.enable_mask = BIT(1),
1806		.hw.init = &(struct clk_init_data){
1807			.name = "gcc_ce2_axi_clk",
1808			.parent_names = (const char *[]){
1809				"system_noc_clk_src",
1810			},
1811			.num_parents = 1,
1812			.ops = &clk_branch2_ops,
1813		},
1814	},
1815};
1816
1817static struct clk_branch gcc_ce2_clk = {
1818	.halt_reg = 0x1090,
1819	.halt_check = BRANCH_HALT_VOTED,
1820	.clkr = {
1821		.enable_reg = 0x1484,
1822		.enable_mask = BIT(2),
1823		.hw.init = &(struct clk_init_data){
1824			.name = "gcc_ce2_clk",
1825			.parent_names = (const char *[]){
1826				"ce2_clk_src",
1827			},
1828			.num_parents = 1,
1829			.flags = CLK_SET_RATE_PARENT,
1830			.ops = &clk_branch2_ops,
1831		},
1832	},
1833};
1834
1835static struct clk_branch gcc_gp1_clk = {
1836	.halt_reg = 0x1900,
1837	.clkr = {
1838		.enable_reg = 0x1900,
1839		.enable_mask = BIT(0),
1840		.hw.init = &(struct clk_init_data){
1841			.name = "gcc_gp1_clk",
1842			.parent_names = (const char *[]){
1843				"gp1_clk_src",
1844			},
1845			.num_parents = 1,
1846			.flags = CLK_SET_RATE_PARENT,
1847			.ops = &clk_branch2_ops,
1848		},
1849	},
1850};
1851
1852static struct clk_branch gcc_gp2_clk = {
1853	.halt_reg = 0x1940,
1854	.clkr = {
1855		.enable_reg = 0x1940,
1856		.enable_mask = BIT(0),
1857		.hw.init = &(struct clk_init_data){
1858			.name = "gcc_gp2_clk",
1859			.parent_names = (const char *[]){
1860				"gp2_clk_src",
1861			},
1862			.num_parents = 1,
1863			.flags = CLK_SET_RATE_PARENT,
1864			.ops = &clk_branch2_ops,
1865		},
1866	},
1867};
1868
1869static struct clk_branch gcc_gp3_clk = {
1870	.halt_reg = 0x1980,
1871	.clkr = {
1872		.enable_reg = 0x1980,
1873		.enable_mask = BIT(0),
1874		.hw.init = &(struct clk_init_data){
1875			.name = "gcc_gp3_clk",
1876			.parent_names = (const char *[]){
1877				"gp3_clk_src",
1878			},
1879			.num_parents = 1,
1880			.flags = CLK_SET_RATE_PARENT,
1881			.ops = &clk_branch2_ops,
1882		},
1883	},
1884};
1885
1886static struct clk_branch gcc_lpass_q6_axi_clk = {
1887	.halt_reg = 0x11c0,
1888	.clkr = {
1889		.enable_reg = 0x11c0,
1890		.enable_mask = BIT(0),
1891		.hw.init = &(struct clk_init_data){
1892			.name = "gcc_lpass_q6_axi_clk",
1893			.parent_names = (const char *[]){
1894				"system_noc_clk_src",
1895			},
1896			.num_parents = 1,
1897			.ops = &clk_branch2_ops,
1898		},
1899	},
1900};
1901
1902static struct clk_branch gcc_mmss_noc_cfg_ahb_clk = {
1903	.halt_reg = 0x024c,
1904	.clkr = {
1905		.enable_reg = 0x024c,
1906		.enable_mask = BIT(0),
1907		.hw.init = &(struct clk_init_data){
1908			.name = "gcc_mmss_noc_cfg_ahb_clk",
1909			.parent_names = (const char *[]){
1910				"config_noc_clk_src",
1911			},
1912			.num_parents = 1,
1913			.ops = &clk_branch2_ops,
1914			.flags = CLK_IGNORE_UNUSED,
1915		},
1916	},
1917};
1918
1919static struct clk_branch gcc_ocmem_noc_cfg_ahb_clk = {
1920	.halt_reg = 0x0248,
1921	.clkr = {
1922		.enable_reg = 0x0248,
1923		.enable_mask = BIT(0),
1924		.hw.init = &(struct clk_init_data){
1925			.name = "gcc_ocmem_noc_cfg_ahb_clk",
1926			.parent_names = (const char *[]){
1927				"config_noc_clk_src",
1928			},
1929			.num_parents = 1,
1930			.ops = &clk_branch2_ops,
1931		},
1932	},
1933};
1934
1935static struct clk_branch gcc_mss_cfg_ahb_clk = {
1936	.halt_reg = 0x0280,
1937	.clkr = {
1938		.enable_reg = 0x0280,
1939		.enable_mask = BIT(0),
1940		.hw.init = &(struct clk_init_data){
1941			.name = "gcc_mss_cfg_ahb_clk",
1942			.parent_names = (const char *[]){
1943				"config_noc_clk_src",
1944			},
1945			.num_parents = 1,
1946			.ops = &clk_branch2_ops,
1947		},
1948	},
1949};
1950
1951static struct clk_branch gcc_mss_q6_bimc_axi_clk = {
1952	.halt_reg = 0x0284,
1953	.clkr = {
1954		.enable_reg = 0x0284,
1955		.enable_mask = BIT(0),
1956		.hw.init = &(struct clk_init_data){
1957			.name = "gcc_mss_q6_bimc_axi_clk",
1958			.ops = &clk_branch2_ops,
1959		},
1960	},
1961};
1962
1963static struct clk_branch gcc_pdm2_clk = {
1964	.halt_reg = 0x0ccc,
1965	.clkr = {
1966		.enable_reg = 0x0ccc,
1967		.enable_mask = BIT(0),
1968		.hw.init = &(struct clk_init_data){
1969			.name = "gcc_pdm2_clk",
1970			.parent_names = (const char *[]){
1971				"pdm2_clk_src",
1972			},
1973			.num_parents = 1,
1974			.flags = CLK_SET_RATE_PARENT,
1975			.ops = &clk_branch2_ops,
1976		},
1977	},
1978};
1979
1980static struct clk_branch gcc_pdm_ahb_clk = {
1981	.halt_reg = 0x0cc4,
1982	.clkr = {
1983		.enable_reg = 0x0cc4,
1984		.enable_mask = BIT(0),
1985		.hw.init = &(struct clk_init_data){
1986			.name = "gcc_pdm_ahb_clk",
1987			.parent_names = (const char *[]){
1988				"periph_noc_clk_src",
1989			},
1990			.num_parents = 1,
1991			.ops = &clk_branch2_ops,
1992		},
1993	},
1994};
1995
1996static struct clk_branch gcc_prng_ahb_clk = {
1997	.halt_reg = 0x0d04,
1998	.halt_check = BRANCH_HALT_VOTED,
1999	.clkr = {
2000		.enable_reg = 0x1484,
2001		.enable_mask = BIT(13),
2002		.hw.init = &(struct clk_init_data){
2003			.name = "gcc_prng_ahb_clk",
2004			.parent_names = (const char *[]){
2005				"periph_noc_clk_src",
2006			},
2007			.num_parents = 1,
2008			.ops = &clk_branch2_ops,
2009		},
2010	},
2011};
2012
2013static struct clk_branch gcc_sdcc1_ahb_clk = {
2014	.halt_reg = 0x04c8,
2015	.clkr = {
2016		.enable_reg = 0x04c8,
2017		.enable_mask = BIT(0),
2018		.hw.init = &(struct clk_init_data){
2019			.name = "gcc_sdcc1_ahb_clk",
2020			.parent_names = (const char *[]){
2021				"periph_noc_clk_src",
2022			},
2023			.num_parents = 1,
2024			.ops = &clk_branch2_ops,
2025		},
2026	},
2027};
2028
2029static struct clk_branch gcc_sdcc1_apps_clk = {
2030	.halt_reg = 0x04c4,
2031	.clkr = {
2032		.enable_reg = 0x04c4,
2033		.enable_mask = BIT(0),
2034		.hw.init = &(struct clk_init_data){
2035			.name = "gcc_sdcc1_apps_clk",
2036			.parent_names = (const char *[]){
2037				"sdcc1_apps_clk_src",
2038			},
2039			.num_parents = 1,
2040			.flags = CLK_SET_RATE_PARENT,
2041			.ops = &clk_branch2_ops,
2042		},
2043	},
2044};
2045
2046static struct clk_branch gcc_sdcc1_cdccal_ff_clk = {
2047	.halt_reg = 0x04e8,
2048	.clkr = {
2049		.enable_reg = 0x04e8,
2050		.enable_mask = BIT(0),
2051		.hw.init = &(struct clk_init_data){
2052			.name = "gcc_sdcc1_cdccal_ff_clk",
2053			.parent_names = (const char *[]){
2054				"xo"
2055			},
2056			.num_parents = 1,
2057			.ops = &clk_branch2_ops,
2058		},
2059	},
2060};
2061
2062static struct clk_branch gcc_sdcc1_cdccal_sleep_clk = {
2063	.halt_reg = 0x04e4,
2064	.clkr = {
2065		.enable_reg = 0x04e4,
2066		.enable_mask = BIT(0),
2067		.hw.init = &(struct clk_init_data){
2068			.name = "gcc_sdcc1_cdccal_sleep_clk",
2069			.parent_names = (const char *[]){
2070				"sleep_clk_src"
2071			},
2072			.num_parents = 1,
2073			.ops = &clk_branch2_ops,
2074		},
2075	},
2076};
2077
2078static struct clk_branch gcc_sdcc2_ahb_clk = {
2079	.halt_reg = 0x0508,
2080	.clkr = {
2081		.enable_reg = 0x0508,
2082		.enable_mask = BIT(0),
2083		.hw.init = &(struct clk_init_data){
2084			.name = "gcc_sdcc2_ahb_clk",
2085			.parent_names = (const char *[]){
2086				"periph_noc_clk_src",
2087			},
2088			.num_parents = 1,
2089			.ops = &clk_branch2_ops,
2090		},
2091	},
2092};
2093
2094static struct clk_branch gcc_sdcc2_apps_clk = {
2095	.halt_reg = 0x0504,
2096	.clkr = {
2097		.enable_reg = 0x0504,
2098		.enable_mask = BIT(0),
2099		.hw.init = &(struct clk_init_data){
2100			.name = "gcc_sdcc2_apps_clk",
2101			.parent_names = (const char *[]){
2102				"sdcc2_apps_clk_src",
2103			},
2104			.num_parents = 1,
2105			.flags = CLK_SET_RATE_PARENT,
2106			.ops = &clk_branch2_ops,
2107		},
2108	},
2109};
2110
2111static struct clk_branch gcc_sdcc3_ahb_clk = {
2112	.halt_reg = 0x0548,
2113	.clkr = {
2114		.enable_reg = 0x0548,
2115		.enable_mask = BIT(0),
2116		.hw.init = &(struct clk_init_data){
2117			.name = "gcc_sdcc3_ahb_clk",
2118			.parent_names = (const char *[]){
2119				"periph_noc_clk_src",
2120			},
2121			.num_parents = 1,
2122			.ops = &clk_branch2_ops,
2123		},
2124	},
2125};
2126
2127static struct clk_branch gcc_sdcc3_apps_clk = {
2128	.halt_reg = 0x0544,
2129	.clkr = {
2130		.enable_reg = 0x0544,
2131		.enable_mask = BIT(0),
2132		.hw.init = &(struct clk_init_data){
2133			.name = "gcc_sdcc3_apps_clk",
2134			.parent_names = (const char *[]){
2135				"sdcc3_apps_clk_src",
2136			},
2137			.num_parents = 1,
2138			.flags = CLK_SET_RATE_PARENT,
2139			.ops = &clk_branch2_ops,
2140		},
2141	},
2142};
2143
2144static struct clk_branch gcc_sdcc4_ahb_clk = {
2145	.halt_reg = 0x0588,
2146	.clkr = {
2147		.enable_reg = 0x0588,
2148		.enable_mask = BIT(0),
2149		.hw.init = &(struct clk_init_data){
2150			.name = "gcc_sdcc4_ahb_clk",
2151			.parent_names = (const char *[]){
2152				"periph_noc_clk_src",
2153			},
2154			.num_parents = 1,
2155			.ops = &clk_branch2_ops,
2156		},
2157	},
2158};
2159
2160static struct clk_branch gcc_sdcc4_apps_clk = {
2161	.halt_reg = 0x0584,
2162	.clkr = {
2163		.enable_reg = 0x0584,
2164		.enable_mask = BIT(0),
2165		.hw.init = &(struct clk_init_data){
2166			.name = "gcc_sdcc4_apps_clk",
2167			.parent_names = (const char *[]){
2168				"sdcc4_apps_clk_src",
2169			},
2170			.num_parents = 1,
2171			.flags = CLK_SET_RATE_PARENT,
2172			.ops = &clk_branch2_ops,
2173		},
2174	},
2175};
2176
2177static struct clk_branch gcc_sys_noc_usb3_axi_clk = {
2178	.halt_reg = 0x0108,
2179	.clkr = {
2180		.enable_reg = 0x0108,
2181		.enable_mask = BIT(0),
2182		.hw.init = &(struct clk_init_data){
2183			.name = "gcc_sys_noc_usb3_axi_clk",
2184			.parent_names = (const char *[]){
2185				"usb30_master_clk_src",
2186			},
2187			.num_parents = 1,
2188			.flags = CLK_SET_RATE_PARENT,
2189			.ops = &clk_branch2_ops,
2190		},
2191	},
2192};
2193
2194static struct clk_branch gcc_tsif_ahb_clk = {
2195	.halt_reg = 0x0d84,
2196	.clkr = {
2197		.enable_reg = 0x0d84,
2198		.enable_mask = BIT(0),
2199		.hw.init = &(struct clk_init_data){
2200			.name = "gcc_tsif_ahb_clk",
2201			.parent_names = (const char *[]){
2202				"periph_noc_clk_src",
2203			},
2204			.num_parents = 1,
2205			.ops = &clk_branch2_ops,
2206		},
2207	},
2208};
2209
2210static struct clk_branch gcc_tsif_ref_clk = {
2211	.halt_reg = 0x0d88,
2212	.clkr = {
2213		.enable_reg = 0x0d88,
2214		.enable_mask = BIT(0),
2215		.hw.init = &(struct clk_init_data){
2216			.name = "gcc_tsif_ref_clk",
2217			.parent_names = (const char *[]){
2218				"tsif_ref_clk_src",
2219			},
2220			.num_parents = 1,
2221			.flags = CLK_SET_RATE_PARENT,
2222			.ops = &clk_branch2_ops,
2223		},
2224	},
2225};
2226
2227static struct clk_branch gcc_usb2a_phy_sleep_clk = {
2228	.halt_reg = 0x04ac,
2229	.clkr = {
2230		.enable_reg = 0x04ac,
2231		.enable_mask = BIT(0),
2232		.hw.init = &(struct clk_init_data){
2233			.name = "gcc_usb2a_phy_sleep_clk",
2234			.parent_names = (const char *[]){
2235				"sleep_clk_src",
2236			},
2237			.num_parents = 1,
2238			.ops = &clk_branch2_ops,
2239		},
2240	},
2241};
2242
2243static struct clk_branch gcc_usb2b_phy_sleep_clk = {
2244	.halt_reg = 0x04b4,
2245	.clkr = {
2246		.enable_reg = 0x04b4,
2247		.enable_mask = BIT(0),
2248		.hw.init = &(struct clk_init_data){
2249			.name = "gcc_usb2b_phy_sleep_clk",
2250			.parent_names = (const char *[]){
2251				"sleep_clk_src",
2252			},
2253			.num_parents = 1,
2254			.ops = &clk_branch2_ops,
2255		},
2256	},
2257};
2258
2259static struct clk_branch gcc_usb30_master_clk = {
2260	.halt_reg = 0x03c8,
2261	.clkr = {
2262		.enable_reg = 0x03c8,
2263		.enable_mask = BIT(0),
2264		.hw.init = &(struct clk_init_data){
2265			.name = "gcc_usb30_master_clk",
2266			.parent_names = (const char *[]){
2267				"usb30_master_clk_src",
2268			},
2269			.num_parents = 1,
2270			.flags = CLK_SET_RATE_PARENT,
2271			.ops = &clk_branch2_ops,
2272		},
2273	},
2274};
2275
2276static struct clk_branch gcc_usb30_mock_utmi_clk = {
2277	.halt_reg = 0x03d0,
2278	.clkr = {
2279		.enable_reg = 0x03d0,
2280		.enable_mask = BIT(0),
2281		.hw.init = &(struct clk_init_data){
2282			.name = "gcc_usb30_mock_utmi_clk",
2283			.parent_names = (const char *[]){
2284				"usb30_mock_utmi_clk_src",
2285			},
2286			.num_parents = 1,
2287			.flags = CLK_SET_RATE_PARENT,
2288			.ops = &clk_branch2_ops,
2289		},
2290	},
2291};
2292
2293static struct clk_branch gcc_usb30_sleep_clk = {
2294	.halt_reg = 0x03cc,
2295	.clkr = {
2296		.enable_reg = 0x03cc,
2297		.enable_mask = BIT(0),
2298		.hw.init = &(struct clk_init_data){
2299			.name = "gcc_usb30_sleep_clk",
2300			.parent_names = (const char *[]){
2301				"sleep_clk_src",
2302			},
2303			.num_parents = 1,
2304			.ops = &clk_branch2_ops,
2305		},
2306	},
2307};
2308
2309static struct clk_branch gcc_usb_hs_ahb_clk = {
2310	.halt_reg = 0x0488,
2311	.clkr = {
2312		.enable_reg = 0x0488,
2313		.enable_mask = BIT(0),
2314		.hw.init = &(struct clk_init_data){
2315			.name = "gcc_usb_hs_ahb_clk",
2316			.parent_names = (const char *[]){
2317				"periph_noc_clk_src",
2318			},
2319			.num_parents = 1,
2320			.ops = &clk_branch2_ops,
2321		},
2322	},
2323};
2324
2325static struct clk_branch gcc_usb_hs_system_clk = {
2326	.halt_reg = 0x0484,
2327	.clkr = {
2328		.enable_reg = 0x0484,
2329		.enable_mask = BIT(0),
2330		.hw.init = &(struct clk_init_data){
2331			.name = "gcc_usb_hs_system_clk",
2332			.parent_names = (const char *[]){
2333				"usb_hs_system_clk_src",
2334			},
2335			.num_parents = 1,
2336			.flags = CLK_SET_RATE_PARENT,
2337			.ops = &clk_branch2_ops,
2338		},
2339	},
2340};
2341
2342static struct clk_branch gcc_usb_hsic_ahb_clk = {
2343	.halt_reg = 0x0408,
2344	.clkr = {
2345		.enable_reg = 0x0408,
2346		.enable_mask = BIT(0),
2347		.hw.init = &(struct clk_init_data){
2348			.name = "gcc_usb_hsic_ahb_clk",
2349			.parent_names = (const char *[]){
2350				"periph_noc_clk_src",
2351			},
2352			.num_parents = 1,
2353			.ops = &clk_branch2_ops,
2354		},
2355	},
2356};
2357
2358static struct clk_branch gcc_usb_hsic_clk = {
2359	.halt_reg = 0x0410,
2360	.clkr = {
2361		.enable_reg = 0x0410,
2362		.enable_mask = BIT(0),
2363		.hw.init = &(struct clk_init_data){
2364			.name = "gcc_usb_hsic_clk",
2365			.parent_names = (const char *[]){
2366				"usb_hsic_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_usb_hsic_io_cal_clk = {
2376	.halt_reg = 0x0414,
2377	.clkr = {
2378		.enable_reg = 0x0414,
2379		.enable_mask = BIT(0),
2380		.hw.init = &(struct clk_init_data){
2381			.name = "gcc_usb_hsic_io_cal_clk",
2382			.parent_names = (const char *[]){
2383				"usb_hsic_io_cal_clk_src",
2384			},
2385			.num_parents = 1,
2386			.flags = CLK_SET_RATE_PARENT,
2387			.ops = &clk_branch2_ops,
2388		},
2389	},
2390};
2391
2392static struct clk_branch gcc_usb_hsic_io_cal_sleep_clk = {
2393	.halt_reg = 0x0418,
2394	.clkr = {
2395		.enable_reg = 0x0418,
2396		.enable_mask = BIT(0),
2397		.hw.init = &(struct clk_init_data){
2398			.name = "gcc_usb_hsic_io_cal_sleep_clk",
2399			.parent_names = (const char *[]){
2400				"sleep_clk_src",
2401			},
2402			.num_parents = 1,
2403			.ops = &clk_branch2_ops,
2404		},
2405	},
2406};
2407
2408static struct clk_branch gcc_usb_hsic_system_clk = {
2409	.halt_reg = 0x040c,
2410	.clkr = {
2411		.enable_reg = 0x040c,
2412		.enable_mask = BIT(0),
2413		.hw.init = &(struct clk_init_data){
2414			.name = "gcc_usb_hsic_system_clk",
2415			.parent_names = (const char *[]){
2416				"usb_hsic_system_clk_src",
2417			},
2418			.num_parents = 1,
2419			.flags = CLK_SET_RATE_PARENT,
2420			.ops = &clk_branch2_ops,
2421		},
2422	},
2423};
2424
2425static struct gdsc usb_hs_hsic_gdsc = {
2426	.gdscr = 0x404,
2427	.pd = {
2428		.name = "usb_hs_hsic",
2429	},
2430	.pwrsts = PWRSTS_OFF_ON,
2431};
2432
2433static struct clk_regmap *gcc_msm8974_clocks[] = {
2434	[GPLL0] = &gpll0.clkr,
2435	[GPLL0_VOTE] = &gpll0_vote,
2436	[CONFIG_NOC_CLK_SRC] = &config_noc_clk_src.clkr,
2437	[PERIPH_NOC_CLK_SRC] = &periph_noc_clk_src.clkr,
2438	[SYSTEM_NOC_CLK_SRC] = &system_noc_clk_src.clkr,
2439	[GPLL1] = &gpll1.clkr,
2440	[GPLL1_VOTE] = &gpll1_vote,
2441	[USB30_MASTER_CLK_SRC] = &usb30_master_clk_src.clkr,
2442	[BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
2443	[BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
2444	[BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
2445	[BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
2446	[BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
2447	[BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
2448	[BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
2449	[BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
2450	[BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr,
2451	[BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr,
2452	[BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr,
2453	[BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr,
2454	[BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
2455	[BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
2456	[BLSP1_UART3_APPS_CLK_SRC] = &blsp1_uart3_apps_clk_src.clkr,
2457	[BLSP1_UART4_APPS_CLK_SRC] = &blsp1_uart4_apps_clk_src.clkr,
2458	[BLSP1_UART5_APPS_CLK_SRC] = &blsp1_uart5_apps_clk_src.clkr,
2459	[BLSP1_UART6_APPS_CLK_SRC] = &blsp1_uart6_apps_clk_src.clkr,
2460	[BLSP2_QUP1_I2C_APPS_CLK_SRC] = &blsp2_qup1_i2c_apps_clk_src.clkr,
2461	[BLSP2_QUP1_SPI_APPS_CLK_SRC] = &blsp2_qup1_spi_apps_clk_src.clkr,
2462	[BLSP2_QUP2_I2C_APPS_CLK_SRC] = &blsp2_qup2_i2c_apps_clk_src.clkr,
2463	[BLSP2_QUP2_SPI_APPS_CLK_SRC] = &blsp2_qup2_spi_apps_clk_src.clkr,
2464	[BLSP2_QUP3_I2C_APPS_CLK_SRC] = &blsp2_qup3_i2c_apps_clk_src.clkr,
2465	[BLSP2_QUP3_SPI_APPS_CLK_SRC] = &blsp2_qup3_spi_apps_clk_src.clkr,
2466	[BLSP2_QUP4_I2C_APPS_CLK_SRC] = &blsp2_qup4_i2c_apps_clk_src.clkr,
2467	[BLSP2_QUP4_SPI_APPS_CLK_SRC] = &blsp2_qup4_spi_apps_clk_src.clkr,
2468	[BLSP2_QUP5_I2C_APPS_CLK_SRC] = &blsp2_qup5_i2c_apps_clk_src.clkr,
2469	[BLSP2_QUP5_SPI_APPS_CLK_SRC] = &blsp2_qup5_spi_apps_clk_src.clkr,
2470	[BLSP2_QUP6_I2C_APPS_CLK_SRC] = &blsp2_qup6_i2c_apps_clk_src.clkr,
2471	[BLSP2_QUP6_SPI_APPS_CLK_SRC] = &blsp2_qup6_spi_apps_clk_src.clkr,
2472	[BLSP2_UART1_APPS_CLK_SRC] = &blsp2_uart1_apps_clk_src.clkr,
2473	[BLSP2_UART2_APPS_CLK_SRC] = &blsp2_uart2_apps_clk_src.clkr,
2474	[BLSP2_UART3_APPS_CLK_SRC] = &blsp2_uart3_apps_clk_src.clkr,
2475	[BLSP2_UART4_APPS_CLK_SRC] = &blsp2_uart4_apps_clk_src.clkr,
2476	[BLSP2_UART5_APPS_CLK_SRC] = &blsp2_uart5_apps_clk_src.clkr,
2477	[BLSP2_UART6_APPS_CLK_SRC] = &blsp2_uart6_apps_clk_src.clkr,
2478	[CE1_CLK_SRC] = &ce1_clk_src.clkr,
2479	[CE2_CLK_SRC] = &ce2_clk_src.clkr,
2480	[GP1_CLK_SRC] = &gp1_clk_src.clkr,
2481	[GP2_CLK_SRC] = &gp2_clk_src.clkr,
2482	[GP3_CLK_SRC] = &gp3_clk_src.clkr,
2483	[PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
2484	[SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
2485	[SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
2486	[SDCC3_APPS_CLK_SRC] = &sdcc3_apps_clk_src.clkr,
2487	[SDCC4_APPS_CLK_SRC] = &sdcc4_apps_clk_src.clkr,
2488	[TSIF_REF_CLK_SRC] = &tsif_ref_clk_src.clkr,
2489	[USB30_MOCK_UTMI_CLK_SRC] = &usb30_mock_utmi_clk_src.clkr,
2490	[USB_HS_SYSTEM_CLK_SRC] = &usb_hs_system_clk_src.clkr,
2491	[USB_HSIC_CLK_SRC] = &usb_hsic_clk_src.clkr,
2492	[USB_HSIC_IO_CAL_CLK_SRC] = &usb_hsic_io_cal_clk_src.clkr,
2493	[USB_HSIC_SYSTEM_CLK_SRC] = &usb_hsic_system_clk_src.clkr,
2494	[GCC_BAM_DMA_AHB_CLK] = &gcc_bam_dma_ahb_clk.clkr,
2495	[GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
2496	[GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
2497	[GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
2498	[GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
2499	[GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
2500	[GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
2501	[GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
2502	[GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
2503	[GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
2504	[GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr,
2505	[GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr,
2506	[GCC_BLSP1_QUP6_I2C_APPS_CLK] = &gcc_blsp1_qup6_i2c_apps_clk.clkr,
2507	[GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr,
2508	[GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
2509	[GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
2510	[GCC_BLSP1_UART3_APPS_CLK] = &gcc_blsp1_uart3_apps_clk.clkr,
2511	[GCC_BLSP1_UART4_APPS_CLK] = &gcc_blsp1_uart4_apps_clk.clkr,
2512	[GCC_BLSP1_UART5_APPS_CLK] = &gcc_blsp1_uart5_apps_clk.clkr,
2513	[GCC_BLSP1_UART6_APPS_CLK] = &gcc_blsp1_uart6_apps_clk.clkr,
2514	[GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr,
2515	[GCC_BLSP2_QUP1_I2C_APPS_CLK] = &gcc_blsp2_qup1_i2c_apps_clk.clkr,
2516	[GCC_BLSP2_QUP1_SPI_APPS_CLK] = &gcc_blsp2_qup1_spi_apps_clk.clkr,
2517	[GCC_BLSP2_QUP2_I2C_APPS_CLK] = &gcc_blsp2_qup2_i2c_apps_clk.clkr,
2518	[GCC_BLSP2_QUP2_SPI_APPS_CLK] = &gcc_blsp2_qup2_spi_apps_clk.clkr,
2519	[GCC_BLSP2_QUP3_I2C_APPS_CLK] = &gcc_blsp2_qup3_i2c_apps_clk.clkr,
2520	[GCC_BLSP2_QUP3_SPI_APPS_CLK] = &gcc_blsp2_qup3_spi_apps_clk.clkr,
2521	[GCC_BLSP2_QUP4_I2C_APPS_CLK] = &gcc_blsp2_qup4_i2c_apps_clk.clkr,
2522	[GCC_BLSP2_QUP4_SPI_APPS_CLK] = &gcc_blsp2_qup4_spi_apps_clk.clkr,
2523	[GCC_BLSP2_QUP5_I2C_APPS_CLK] = &gcc_blsp2_qup5_i2c_apps_clk.clkr,
2524	[GCC_BLSP2_QUP5_SPI_APPS_CLK] = &gcc_blsp2_qup5_spi_apps_clk.clkr,
2525	[GCC_BLSP2_QUP6_I2C_APPS_CLK] = &gcc_blsp2_qup6_i2c_apps_clk.clkr,
2526	[GCC_BLSP2_QUP6_SPI_APPS_CLK] = &gcc_blsp2_qup6_spi_apps_clk.clkr,
2527	[GCC_BLSP2_UART1_APPS_CLK] = &gcc_blsp2_uart1_apps_clk.clkr,
2528	[GCC_BLSP2_UART2_APPS_CLK] = &gcc_blsp2_uart2_apps_clk.clkr,
2529	[GCC_BLSP2_UART3_APPS_CLK] = &gcc_blsp2_uart3_apps_clk.clkr,
2530	[GCC_BLSP2_UART4_APPS_CLK] = &gcc_blsp2_uart4_apps_clk.clkr,
2531	[GCC_BLSP2_UART5_APPS_CLK] = &gcc_blsp2_uart5_apps_clk.clkr,
2532	[GCC_BLSP2_UART6_APPS_CLK] = &gcc_blsp2_uart6_apps_clk.clkr,
2533	[GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
2534	[GCC_CE1_AHB_CLK] = &gcc_ce1_ahb_clk.clkr,
2535	[GCC_CE1_AXI_CLK] = &gcc_ce1_axi_clk.clkr,
2536	[GCC_CE1_CLK] = &gcc_ce1_clk.clkr,
2537	[GCC_CE2_AHB_CLK] = &gcc_ce2_ahb_clk.clkr,
2538	[GCC_CE2_AXI_CLK] = &gcc_ce2_axi_clk.clkr,
2539	[GCC_CE2_CLK] = &gcc_ce2_clk.clkr,
2540	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
2541	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
2542	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
2543	[GCC_LPASS_Q6_AXI_CLK] = &gcc_lpass_q6_axi_clk.clkr,
2544	[GCC_MMSS_NOC_CFG_AHB_CLK] = &gcc_mmss_noc_cfg_ahb_clk.clkr,
2545	[GCC_OCMEM_NOC_CFG_AHB_CLK] = &gcc_ocmem_noc_cfg_ahb_clk.clkr,
2546	[GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,
2547	[GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr,
2548	[GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
2549	[GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
2550	[GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
2551	[GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
2552	[GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
2553	[GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
2554	[GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
2555	[GCC_SDCC3_AHB_CLK] = &gcc_sdcc3_ahb_clk.clkr,
2556	[GCC_SDCC3_APPS_CLK] = &gcc_sdcc3_apps_clk.clkr,
2557	[GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr,
2558	[GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr,
2559	[GCC_SYS_NOC_USB3_AXI_CLK] = &gcc_sys_noc_usb3_axi_clk.clkr,
2560	[GCC_TSIF_AHB_CLK] = &gcc_tsif_ahb_clk.clkr,
2561	[GCC_TSIF_REF_CLK] = &gcc_tsif_ref_clk.clkr,
2562	[GCC_USB2A_PHY_SLEEP_CLK] = &gcc_usb2a_phy_sleep_clk.clkr,
2563	[GCC_USB2B_PHY_SLEEP_CLK] = &gcc_usb2b_phy_sleep_clk.clkr,
2564	[GCC_USB30_MASTER_CLK] = &gcc_usb30_master_clk.clkr,
2565	[GCC_USB30_MOCK_UTMI_CLK] = &gcc_usb30_mock_utmi_clk.clkr,
2566	[GCC_USB30_SLEEP_CLK] = &gcc_usb30_sleep_clk.clkr,
2567	[GCC_USB_HS_AHB_CLK] = &gcc_usb_hs_ahb_clk.clkr,
2568	[GCC_USB_HS_SYSTEM_CLK] = &gcc_usb_hs_system_clk.clkr,
2569	[GCC_USB_HSIC_AHB_CLK] = &gcc_usb_hsic_ahb_clk.clkr,
2570	[GCC_USB_HSIC_CLK] = &gcc_usb_hsic_clk.clkr,
2571	[GCC_USB_HSIC_IO_CAL_CLK] = &gcc_usb_hsic_io_cal_clk.clkr,
2572	[GCC_USB_HSIC_IO_CAL_SLEEP_CLK] = &gcc_usb_hsic_io_cal_sleep_clk.clkr,
2573	[GCC_USB_HSIC_SYSTEM_CLK] = &gcc_usb_hsic_system_clk.clkr,
2574	[GCC_MMSS_GPLL0_CLK_SRC] = &gcc_mmss_gpll0_clk_src,
2575	[GPLL4] = NULL,
2576	[GPLL4_VOTE] = NULL,
2577	[GCC_SDCC1_CDCCAL_SLEEP_CLK] = NULL,
2578	[GCC_SDCC1_CDCCAL_FF_CLK] = NULL,
2579};
2580
2581static const struct qcom_reset_map gcc_msm8974_resets[] = {
2582	[GCC_SYSTEM_NOC_BCR] = { 0x0100 },
2583	[GCC_CONFIG_NOC_BCR] = { 0x0140 },
2584	[GCC_PERIPH_NOC_BCR] = { 0x0180 },
2585	[GCC_IMEM_BCR] = { 0x0200 },
2586	[GCC_MMSS_BCR] = { 0x0240 },
2587	[GCC_QDSS_BCR] = { 0x0300 },
2588	[GCC_USB_30_BCR] = { 0x03c0 },
2589	[GCC_USB3_PHY_BCR] = { 0x03fc },
2590	[GCC_USB_HS_HSIC_BCR] = { 0x0400 },
2591	[GCC_USB_HS_BCR] = { 0x0480 },
2592	[GCC_USB2A_PHY_BCR] = { 0x04a8 },
2593	[GCC_USB2B_PHY_BCR] = { 0x04b0 },
2594	[GCC_SDCC1_BCR] = { 0x04c0 },
2595	[GCC_SDCC2_BCR] = { 0x0500 },
2596	[GCC_SDCC3_BCR] = { 0x0540 },
2597	[GCC_SDCC4_BCR] = { 0x0580 },
2598	[GCC_BLSP1_BCR] = { 0x05c0 },
2599	[GCC_BLSP1_QUP1_BCR] = { 0x0640 },
2600	[GCC_BLSP1_UART1_BCR] = { 0x0680 },
2601	[GCC_BLSP1_QUP2_BCR] = { 0x06c0 },
2602	[GCC_BLSP1_UART2_BCR] = { 0x0700 },
2603	[GCC_BLSP1_QUP3_BCR] = { 0x0740 },
2604	[GCC_BLSP1_UART3_BCR] = { 0x0780 },
2605	[GCC_BLSP1_QUP4_BCR] = { 0x07c0 },
2606	[GCC_BLSP1_UART4_BCR] = { 0x0800 },
2607	[GCC_BLSP1_QUP5_BCR] = { 0x0840 },
2608	[GCC_BLSP1_UART5_BCR] = { 0x0880 },
2609	[GCC_BLSP1_QUP6_BCR] = { 0x08c0 },
2610	[GCC_BLSP1_UART6_BCR] = { 0x0900 },
2611	[GCC_BLSP2_BCR] = { 0x0940 },
2612	[GCC_BLSP2_QUP1_BCR] = { 0x0980 },
2613	[GCC_BLSP2_UART1_BCR] = { 0x09c0 },
2614	[GCC_BLSP2_QUP2_BCR] = { 0x0a00 },
2615	[GCC_BLSP2_UART2_BCR] = { 0x0a40 },
2616	[GCC_BLSP2_QUP3_BCR] = { 0x0a80 },
2617	[GCC_BLSP2_UART3_BCR] = { 0x0ac0 },
2618	[GCC_BLSP2_QUP4_BCR] = { 0x0b00 },
2619	[GCC_BLSP2_UART4_BCR] = { 0x0b40 },
2620	[GCC_BLSP2_QUP5_BCR] = { 0x0b80 },
2621	[GCC_BLSP2_UART5_BCR] = { 0x0bc0 },
2622	[GCC_BLSP2_QUP6_BCR] = { 0x0c00 },
2623	[GCC_BLSP2_UART6_BCR] = { 0x0c40 },
2624	[GCC_PDM_BCR] = { 0x0cc0 },
2625	[GCC_BAM_DMA_BCR] = { 0x0d40 },
2626	[GCC_TSIF_BCR] = { 0x0d80 },
2627	[GCC_TCSR_BCR] = { 0x0dc0 },
2628	[GCC_BOOT_ROM_BCR] = { 0x0e00 },
2629	[GCC_MSG_RAM_BCR] = { 0x0e40 },
2630	[GCC_TLMM_BCR] = { 0x0e80 },
2631	[GCC_MPM_BCR] = { 0x0ec0 },
2632	[GCC_SEC_CTRL_BCR] = { 0x0f40 },
2633	[GCC_SPMI_BCR] = { 0x0fc0 },
2634	[GCC_SPDM_BCR] = { 0x1000 },
2635	[GCC_CE1_BCR] = { 0x1040 },
2636	[GCC_CE2_BCR] = { 0x1080 },
2637	[GCC_BIMC_BCR] = { 0x1100 },
2638	[GCC_MPM_NON_AHB_RESET] = { 0x0ec4, 2 },
2639	[GCC_MPM_AHB_RESET] = {	0x0ec4, 1 },
2640	[GCC_SNOC_BUS_TIMEOUT0_BCR] = { 0x1240 },
2641	[GCC_SNOC_BUS_TIMEOUT2_BCR] = { 0x1248 },
2642	[GCC_PNOC_BUS_TIMEOUT0_BCR] = { 0x1280 },
2643	[GCC_PNOC_BUS_TIMEOUT1_BCR] = { 0x1288 },
2644	[GCC_PNOC_BUS_TIMEOUT2_BCR] = { 0x1290 },
2645	[GCC_PNOC_BUS_TIMEOUT3_BCR] = { 0x1298 },
2646	[GCC_PNOC_BUS_TIMEOUT4_BCR] = { 0x12a0 },
2647	[GCC_CNOC_BUS_TIMEOUT0_BCR] = { 0x12c0 },
2648	[GCC_CNOC_BUS_TIMEOUT1_BCR] = { 0x12c8 },
2649	[GCC_CNOC_BUS_TIMEOUT2_BCR] = { 0x12d0 },
2650	[GCC_CNOC_BUS_TIMEOUT3_BCR] = { 0x12d8 },
2651	[GCC_CNOC_BUS_TIMEOUT4_BCR] = { 0x12e0 },
2652	[GCC_CNOC_BUS_TIMEOUT5_BCR] = { 0x12e8 },
2653	[GCC_CNOC_BUS_TIMEOUT6_BCR] = { 0x12f0 },
2654	[GCC_DEHR_BCR] = { 0x1300 },
2655	[GCC_RBCPR_BCR] = { 0x1380 },
2656	[GCC_MSS_RESTART] = { 0x1680 },
2657	[GCC_LPASS_RESTART] = { 0x16c0 },
2658	[GCC_WCSS_RESTART] = { 0x1700 },
2659	[GCC_VENUS_RESTART] = { 0x1740 },
2660};
2661
2662static struct gdsc *gcc_msm8974_gdscs[] = {
2663	[USB_HS_HSIC_GDSC] = &usb_hs_hsic_gdsc,
2664};
2665
2666static const struct regmap_config gcc_msm8974_regmap_config = {
2667	.reg_bits	= 32,
2668	.reg_stride	= 4,
2669	.val_bits	= 32,
2670	.max_register	= 0x1fc0,
2671	.fast_io	= true,
2672};
2673
2674static const struct qcom_cc_desc gcc_msm8974_desc = {
2675	.config = &gcc_msm8974_regmap_config,
2676	.clks = gcc_msm8974_clocks,
2677	.num_clks = ARRAY_SIZE(gcc_msm8974_clocks),
2678	.resets = gcc_msm8974_resets,
2679	.num_resets = ARRAY_SIZE(gcc_msm8974_resets),
2680	.gdscs = gcc_msm8974_gdscs,
2681	.num_gdscs = ARRAY_SIZE(gcc_msm8974_gdscs),
2682};
2683
2684static const struct of_device_id gcc_msm8974_match_table[] = {
2685	{ .compatible = "qcom,gcc-msm8974" },
2686	{ .compatible = "qcom,gcc-msm8974pro" , .data = (void *)1UL },
2687	{ .compatible = "qcom,gcc-msm8974pro-ac", .data = (void *)1UL },
2688	{ }
2689};
2690MODULE_DEVICE_TABLE(of, gcc_msm8974_match_table);
2691
2692static void msm8974_pro_clock_override(void)
2693{
2694	sdcc1_apps_clk_src_init.parent_names = gcc_xo_gpll0_gpll4;
2695	sdcc1_apps_clk_src_init.num_parents = 3;
2696	sdcc1_apps_clk_src.freq_tbl = ftbl_gcc_sdcc1_apps_clk_pro;
2697	sdcc1_apps_clk_src.parent_map = gcc_xo_gpll0_gpll4_map;
2698
2699	gcc_msm8974_clocks[GPLL4] = &gpll4.clkr;
2700	gcc_msm8974_clocks[GPLL4_VOTE] = &gpll4_vote;
2701	gcc_msm8974_clocks[GCC_SDCC1_CDCCAL_SLEEP_CLK] =
2702		&gcc_sdcc1_cdccal_sleep_clk.clkr;
2703	gcc_msm8974_clocks[GCC_SDCC1_CDCCAL_FF_CLK] =
2704		&gcc_sdcc1_cdccal_ff_clk.clkr;
2705}
2706
2707static int gcc_msm8974_probe(struct platform_device *pdev)
2708{
2709	int ret;
2710	struct device *dev = &pdev->dev;
2711	bool pro;
2712	const struct of_device_id *id;
2713
2714	id = of_match_device(gcc_msm8974_match_table, dev);
2715	if (!id)
2716		return -ENODEV;
2717	pro = !!(id->data);
2718
2719	if (pro)
2720		msm8974_pro_clock_override();
2721
2722	ret = qcom_cc_register_board_clk(dev, "xo_board", "xo", 19200000);
2723	if (ret)
2724		return ret;
2725
2726	ret = qcom_cc_register_sleep_clk(dev);
2727	if (ret)
2728		return ret;
2729
2730	return qcom_cc_probe(pdev, &gcc_msm8974_desc);
2731}
2732
2733static struct platform_driver gcc_msm8974_driver = {
2734	.probe		= gcc_msm8974_probe,
2735	.driver		= {
2736		.name	= "gcc-msm8974",
2737		.of_match_table = gcc_msm8974_match_table,
2738	},
2739};
2740
2741static int __init gcc_msm8974_init(void)
2742{
2743	return platform_driver_register(&gcc_msm8974_driver);
2744}
2745core_initcall(gcc_msm8974_init);
2746
2747static void __exit gcc_msm8974_exit(void)
2748{
2749	platform_driver_unregister(&gcc_msm8974_driver);
2750}
2751module_exit(gcc_msm8974_exit);
2752
2753MODULE_DESCRIPTION("QCOM GCC MSM8974 Driver");
2754MODULE_LICENSE("GPL v2");
2755MODULE_ALIAS("platform:gcc-msm8974");
2756