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