1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * Copyright (c) 2020-2021, The Linux Foundation. All rights reserved.
4 */
5
6#include <linux/clk-provider.h>
7#include <linux/kernel.h>
8#include <linux/module.h>
9#include <linux/of.h>
10#include <linux/platform_device.h>
11#include <linux/regmap.h>
12
13#include <dt-bindings/clock/qcom,gcc-sc7280.h>
14
15#include "clk-alpha-pll.h"
16#include "clk-branch.h"
17#include "clk-rcg.h"
18#include "clk-regmap-divider.h"
19#include "clk-regmap-mux.h"
20#include "clk-regmap-phy-mux.h"
21#include "common.h"
22#include "gdsc.h"
23#include "reset.h"
24
25enum {
26	P_BI_TCXO,
27	P_GCC_GPLL0_OUT_EVEN,
28	P_GCC_GPLL0_OUT_MAIN,
29	P_GCC_GPLL0_OUT_ODD,
30	P_GCC_GPLL10_OUT_MAIN,
31	P_GCC_GPLL4_OUT_MAIN,
32	P_GCC_GPLL9_OUT_MAIN,
33	P_PCIE_0_PIPE_CLK,
34	P_PCIE_1_PIPE_CLK,
35	P_SLEEP_CLK,
36	P_UFS_PHY_RX_SYMBOL_0_CLK,
37	P_UFS_PHY_RX_SYMBOL_1_CLK,
38	P_UFS_PHY_TX_SYMBOL_0_CLK,
39	P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK,
40	P_GCC_MSS_GPLL0_MAIN_DIV_CLK,
41};
42
43static struct clk_alpha_pll gcc_gpll0 = {
44	.offset = 0x0,
45	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
46	.clkr = {
47		.enable_reg = 0x52010,
48		.enable_mask = BIT(0),
49		.hw.init = &(struct clk_init_data){
50			.name = "gcc_gpll0",
51			.parent_data = &(const struct clk_parent_data){
52				.fw_name = "bi_tcxo",
53			},
54			.num_parents = 1,
55			.ops = &clk_alpha_pll_fixed_lucid_ops,
56		},
57	},
58};
59
60static const struct clk_div_table post_div_table_gcc_gpll0_out_even[] = {
61	{ 0x1, 2 },
62	{ }
63};
64
65static struct clk_alpha_pll_postdiv gcc_gpll0_out_even = {
66	.offset = 0x0,
67	.post_div_shift = 8,
68	.post_div_table = post_div_table_gcc_gpll0_out_even,
69	.num_post_div = ARRAY_SIZE(post_div_table_gcc_gpll0_out_even),
70	.width = 4,
71	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
72	.clkr.hw.init = &(struct clk_init_data){
73		.name = "gcc_gpll0_out_even",
74		.parent_hws = (const struct clk_hw*[]){
75			&gcc_gpll0.clkr.hw,
76		},
77		.num_parents = 1,
78		.ops = &clk_alpha_pll_postdiv_lucid_ops,
79	},
80};
81
82static const struct clk_div_table post_div_table_gcc_gpll0_out_odd[] = {
83	{ 0x3, 3 },
84	{ }
85};
86
87static struct clk_alpha_pll_postdiv gcc_gpll0_out_odd = {
88	.offset = 0x0,
89	.post_div_shift = 12,
90	.post_div_table = post_div_table_gcc_gpll0_out_odd,
91	.num_post_div = ARRAY_SIZE(post_div_table_gcc_gpll0_out_odd),
92	.width = 4,
93	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
94	.clkr.hw.init = &(struct clk_init_data){
95		.name = "gcc_gpll0_out_odd",
96		.parent_hws = (const struct clk_hw*[]){
97			&gcc_gpll0.clkr.hw,
98		},
99		.num_parents = 1,
100		.ops = &clk_alpha_pll_postdiv_lucid_ops,
101	},
102};
103
104static struct clk_alpha_pll gcc_gpll1 = {
105	.offset = 0x1000,
106	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
107	.clkr = {
108		.enable_reg = 0x52010,
109		.enable_mask = BIT(1),
110		.hw.init = &(struct clk_init_data){
111			.name = "gcc_gpll1",
112			.parent_data = &(const struct clk_parent_data){
113				.fw_name = "bi_tcxo",
114			},
115			.num_parents = 1,
116			.ops = &clk_alpha_pll_fixed_lucid_ops,
117		},
118	},
119};
120
121static struct clk_alpha_pll gcc_gpll10 = {
122	.offset = 0x1e000,
123	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
124	.clkr = {
125		.enable_reg = 0x52010,
126		.enable_mask = BIT(9),
127		.hw.init = &(struct clk_init_data){
128			.name = "gcc_gpll10",
129			.parent_data = &(const struct clk_parent_data){
130				.fw_name = "bi_tcxo",
131			},
132			.num_parents = 1,
133			.ops = &clk_alpha_pll_fixed_lucid_ops,
134		},
135	},
136};
137
138static struct clk_alpha_pll gcc_gpll4 = {
139	.offset = 0x76000,
140	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
141	.clkr = {
142		.enable_reg = 0x52010,
143		.enable_mask = BIT(4),
144		.hw.init = &(struct clk_init_data){
145			.name = "gcc_gpll4",
146			.parent_data = &(const struct clk_parent_data){
147				.fw_name = "bi_tcxo",
148			},
149			.num_parents = 1,
150			.ops = &clk_alpha_pll_fixed_lucid_ops,
151		},
152	},
153};
154
155static struct clk_alpha_pll gcc_gpll9 = {
156	.offset = 0x1c000,
157	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
158	.clkr = {
159		.enable_reg = 0x52010,
160		.enable_mask = BIT(8),
161		.hw.init = &(struct clk_init_data){
162			.name = "gcc_gpll9",
163			.parent_data = &(const struct clk_parent_data){
164				.fw_name = "bi_tcxo",
165			},
166			.num_parents = 1,
167			.ops = &clk_alpha_pll_fixed_lucid_ops,
168		},
169	},
170};
171
172static struct clk_branch gcc_mss_gpll0_main_div_clk_src = {
173	.halt_check = BRANCH_HALT_DELAY,
174	.clkr = {
175		.enable_reg = 0x52000,
176		.enable_mask = BIT(17),
177		.hw.init = &(struct clk_init_data){
178			.name = "gcc_mss_gpll0_main_div_clk_src",
179			.parent_hws = (const struct clk_hw*[]){
180				&gcc_gpll0_out_even.clkr.hw,
181			},
182			.num_parents = 1,
183			.flags = CLK_SET_RATE_PARENT,
184			.ops = &clk_branch2_ops,
185		},
186	},
187};
188
189static const struct parent_map gcc_parent_map_0[] = {
190	{ P_BI_TCXO, 0 },
191	{ P_GCC_GPLL0_OUT_MAIN, 1 },
192	{ P_GCC_GPLL0_OUT_EVEN, 6 },
193};
194
195static const struct clk_parent_data gcc_parent_data_0[] = {
196	{ .fw_name = "bi_tcxo" },
197	{ .hw = &gcc_gpll0.clkr.hw },
198	{ .hw = &gcc_gpll0_out_even.clkr.hw },
199};
200
201static const struct parent_map gcc_parent_map_1[] = {
202	{ P_BI_TCXO, 0 },
203	{ P_GCC_GPLL0_OUT_MAIN, 1 },
204	{ P_GCC_GPLL0_OUT_ODD, 3 },
205	{ P_GCC_GPLL0_OUT_EVEN, 6 },
206};
207
208static const struct clk_parent_data gcc_parent_data_1[] = {
209	{ .fw_name = "bi_tcxo" },
210	{ .hw = &gcc_gpll0.clkr.hw },
211	{ .hw = &gcc_gpll0_out_odd.clkr.hw },
212	{ .hw = &gcc_gpll0_out_even.clkr.hw },
213};
214
215static const struct parent_map gcc_parent_map_2[] = {
216	{ P_BI_TCXO, 0 },
217	{ P_SLEEP_CLK, 5 },
218};
219
220static const struct clk_parent_data gcc_parent_data_2[] = {
221	{ .fw_name = "bi_tcxo" },
222	{ .fw_name = "sleep_clk" },
223};
224
225static const struct parent_map gcc_parent_map_3[] = {
226	{ P_BI_TCXO, 0 },
227};
228
229static const struct clk_parent_data gcc_parent_data_3[] = {
230	{ .fw_name = "bi_tcxo" },
231};
232
233static const struct parent_map gcc_parent_map_4[] = {
234	{ P_BI_TCXO, 0 },
235	{ P_GCC_GPLL0_OUT_MAIN, 1 },
236	{ P_GCC_GPLL0_OUT_ODD, 3 },
237	{ P_SLEEP_CLK, 5 },
238	{ P_GCC_GPLL0_OUT_EVEN, 6 },
239};
240
241static const struct clk_parent_data gcc_parent_data_4[] = {
242	{ .fw_name = "bi_tcxo" },
243	{ .hw = &gcc_gpll0.clkr.hw },
244	{ .hw = &gcc_gpll0_out_odd.clkr.hw },
245	{ .fw_name = "sleep_clk" },
246	{ .hw = &gcc_gpll0_out_even.clkr.hw },
247};
248
249static const struct parent_map gcc_parent_map_5[] = {
250	{ P_BI_TCXO, 0 },
251	{ P_GCC_GPLL0_OUT_EVEN, 6 },
252};
253
254static const struct clk_parent_data gcc_parent_data_5[] = {
255	{ .fw_name = "bi_tcxo" },
256	{ .hw = &gcc_gpll0_out_even.clkr.hw },
257};
258
259static const struct parent_map gcc_parent_map_8[] = {
260	{ P_BI_TCXO, 0 },
261	{ P_GCC_GPLL0_OUT_MAIN, 1 },
262	{ P_GCC_GPLL0_OUT_ODD, 3 },
263	{ P_GCC_GPLL10_OUT_MAIN, 5 },
264	{ P_GCC_GPLL0_OUT_EVEN, 6 },
265};
266
267static const struct clk_parent_data gcc_parent_data_8[] = {
268	{ .fw_name = "bi_tcxo" },
269	{ .hw = &gcc_gpll0.clkr.hw },
270	{ .hw = &gcc_gpll0_out_odd.clkr.hw },
271	{ .hw = &gcc_gpll10.clkr.hw },
272	{ .hw = &gcc_gpll0_out_even.clkr.hw },
273};
274
275static const struct parent_map gcc_parent_map_9[] = {
276	{ P_BI_TCXO, 0 },
277	{ P_GCC_GPLL0_OUT_MAIN, 1 },
278	{ P_GCC_GPLL9_OUT_MAIN, 2 },
279	{ P_GCC_GPLL0_OUT_ODD, 3 },
280	{ P_GCC_GPLL4_OUT_MAIN, 5 },
281	{ P_GCC_GPLL0_OUT_EVEN, 6 },
282};
283
284static const struct clk_parent_data gcc_parent_data_9[] = {
285	{ .fw_name = "bi_tcxo" },
286	{ .hw = &gcc_gpll0.clkr.hw },
287	{ .hw = &gcc_gpll9.clkr.hw },
288	{ .hw = &gcc_gpll0_out_odd.clkr.hw },
289	{ .hw = &gcc_gpll4.clkr.hw },
290	{ .hw = &gcc_gpll0_out_even.clkr.hw },
291};
292
293static const struct parent_map gcc_parent_map_10[] = {
294	{ P_UFS_PHY_RX_SYMBOL_0_CLK, 0 },
295	{ P_BI_TCXO, 2 },
296};
297
298static const struct clk_parent_data gcc_parent_data_10[] = {
299	{ .fw_name = "ufs_phy_rx_symbol_0_clk" },
300	{ .fw_name = "bi_tcxo" },
301};
302
303static const struct parent_map gcc_parent_map_11[] = {
304	{ P_UFS_PHY_RX_SYMBOL_1_CLK, 0 },
305	{ P_BI_TCXO, 2 },
306};
307
308static const struct clk_parent_data gcc_parent_data_11[] = {
309	{ .fw_name = "ufs_phy_rx_symbol_1_clk" },
310	{ .fw_name = "bi_tcxo" },
311};
312
313static const struct parent_map gcc_parent_map_12[] = {
314	{ P_UFS_PHY_TX_SYMBOL_0_CLK, 0 },
315	{ P_BI_TCXO, 2 },
316};
317
318static const struct clk_parent_data gcc_parent_data_12[] = {
319	{ .fw_name = "ufs_phy_tx_symbol_0_clk" },
320	{ .fw_name = "bi_tcxo" },
321};
322
323static const struct parent_map gcc_parent_map_13[] = {
324	{ P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK, 0 },
325	{ P_BI_TCXO, 2 },
326};
327
328static const struct clk_parent_data gcc_parent_data_13[] = {
329	{ .fw_name = "usb3_phy_wrapper_gcc_usb30_pipe_clk" },
330	{ .fw_name = "bi_tcxo" },
331};
332
333static const struct parent_map gcc_parent_map_14[] = {
334	{ P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK, 0 },
335	{ P_BI_TCXO, 2 },
336};
337
338static const struct clk_parent_data gcc_parent_data_14[] = {
339	{ .fw_name = "usb3_phy_wrapper_gcc_usb30_pipe_clk" },
340	{ .fw_name = "bi_tcxo" },
341};
342
343static const struct parent_map gcc_parent_map_15[] = {
344	{ P_BI_TCXO, 0 },
345	{ P_GCC_MSS_GPLL0_MAIN_DIV_CLK, 1 },
346};
347
348static const struct clk_parent_data gcc_parent_data_15[] = {
349	{ .fw_name = "bi_tcxo" },
350	{ .hw = &gcc_mss_gpll0_main_div_clk_src.clkr.hw },
351};
352
353static struct clk_regmap_phy_mux gcc_pcie_0_pipe_clk_src = {
354	.reg = 0x6b054,
355	.clkr = {
356		.hw.init = &(struct clk_init_data){
357			.name = "gcc_pcie_0_pipe_clk_src",
358			.parent_data = &(const struct clk_parent_data){
359				.fw_name = "pcie_0_pipe_clk",
360				.name = "pcie_0_pipe_clk",
361			},
362			.num_parents = 1,
363			.ops = &clk_regmap_phy_mux_ops,
364		},
365	},
366};
367
368static struct clk_regmap_phy_mux gcc_pcie_1_pipe_clk_src = {
369	.reg = 0x8d054,
370	.clkr = {
371		.hw.init = &(struct clk_init_data){
372			.name = "gcc_pcie_1_pipe_clk_src",
373			.parent_data = &(const struct clk_parent_data){
374				.fw_name = "pcie_1_pipe_clk",
375				.name = "pcie_1_pipe_clk",
376			},
377			.num_parents = 1,
378			.ops = &clk_regmap_phy_mux_ops,
379		},
380	},
381};
382
383static struct clk_regmap_mux gcc_ufs_phy_rx_symbol_0_clk_src = {
384	.reg = 0x77058,
385	.shift = 0,
386	.width = 2,
387	.parent_map = gcc_parent_map_10,
388	.clkr = {
389		.hw.init = &(struct clk_init_data){
390			.name = "gcc_ufs_phy_rx_symbol_0_clk_src",
391			.parent_data = gcc_parent_data_10,
392			.num_parents = ARRAY_SIZE(gcc_parent_data_10),
393			.ops = &clk_regmap_mux_closest_ops,
394		},
395	},
396};
397
398static struct clk_regmap_mux gcc_ufs_phy_rx_symbol_1_clk_src = {
399	.reg = 0x770c8,
400	.shift = 0,
401	.width = 2,
402	.parent_map = gcc_parent_map_11,
403	.clkr = {
404		.hw.init = &(struct clk_init_data){
405			.name = "gcc_ufs_phy_rx_symbol_1_clk_src",
406			.parent_data = gcc_parent_data_11,
407			.num_parents = ARRAY_SIZE(gcc_parent_data_11),
408			.ops = &clk_regmap_mux_closest_ops,
409		},
410	},
411};
412
413static struct clk_regmap_mux gcc_ufs_phy_tx_symbol_0_clk_src = {
414	.reg = 0x77048,
415	.shift = 0,
416	.width = 2,
417	.parent_map = gcc_parent_map_12,
418	.clkr = {
419		.hw.init = &(struct clk_init_data){
420			.name = "gcc_ufs_phy_tx_symbol_0_clk_src",
421			.parent_data = gcc_parent_data_12,
422			.num_parents = ARRAY_SIZE(gcc_parent_data_12),
423			.ops = &clk_regmap_mux_closest_ops,
424		},
425	},
426};
427
428static struct clk_regmap_mux gcc_usb3_prim_phy_pipe_clk_src = {
429	.reg = 0xf060,
430	.shift = 0,
431	.width = 2,
432	.parent_map = gcc_parent_map_13,
433	.clkr = {
434		.hw.init = &(struct clk_init_data){
435			.name = "gcc_usb3_prim_phy_pipe_clk_src",
436			.parent_data = gcc_parent_data_13,
437			.num_parents = ARRAY_SIZE(gcc_parent_data_13),
438			.ops = &clk_regmap_mux_closest_ops,
439		},
440	},
441};
442
443static struct clk_regmap_mux gcc_usb3_sec_phy_pipe_clk_src = {
444	.reg = 0x9e060,
445	.shift = 0,
446	.width = 2,
447	.parent_map = gcc_parent_map_14,
448	.clkr = {
449		.hw.init = &(struct clk_init_data){
450			.name = "gcc_usb3_sec_phy_pipe_clk_src",
451			.parent_data = gcc_parent_data_14,
452			.num_parents = ARRAY_SIZE(gcc_parent_data_14),
453			.ops = &clk_regmap_mux_closest_ops,
454		},
455	},
456};
457
458static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
459	F(50000000, P_GCC_GPLL0_OUT_EVEN, 6, 0, 0),
460	F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
461	F(200000000, P_GCC_GPLL0_OUT_ODD, 1, 0, 0),
462	{ }
463};
464
465static struct clk_rcg2 gcc_gp1_clk_src = {
466	.cmd_rcgr = 0x64004,
467	.mnd_width = 16,
468	.hid_width = 5,
469	.parent_map = gcc_parent_map_4,
470	.freq_tbl = ftbl_gcc_gp1_clk_src,
471	.clkr.hw.init = &(struct clk_init_data){
472		.name = "gcc_gp1_clk_src",
473		.parent_data = gcc_parent_data_4,
474		.num_parents = ARRAY_SIZE(gcc_parent_data_4),
475		.ops = &clk_rcg2_ops,
476	},
477};
478
479static struct clk_rcg2 gcc_gp2_clk_src = {
480	.cmd_rcgr = 0x65004,
481	.mnd_width = 16,
482	.hid_width = 5,
483	.parent_map = gcc_parent_map_4,
484	.freq_tbl = ftbl_gcc_gp1_clk_src,
485	.clkr.hw.init = &(struct clk_init_data){
486		.name = "gcc_gp2_clk_src",
487		.parent_data = gcc_parent_data_4,
488		.num_parents = ARRAY_SIZE(gcc_parent_data_4),
489		.ops = &clk_rcg2_ops,
490	},
491};
492
493static struct clk_rcg2 gcc_gp3_clk_src = {
494	.cmd_rcgr = 0x66004,
495	.mnd_width = 16,
496	.hid_width = 5,
497	.parent_map = gcc_parent_map_4,
498	.freq_tbl = ftbl_gcc_gp1_clk_src,
499	.clkr.hw.init = &(struct clk_init_data){
500		.name = "gcc_gp3_clk_src",
501		.parent_data = gcc_parent_data_4,
502		.num_parents = ARRAY_SIZE(gcc_parent_data_4),
503		.ops = &clk_rcg2_ops,
504	},
505};
506
507static const struct freq_tbl ftbl_gcc_pcie_0_aux_clk_src[] = {
508	F(9600000, P_BI_TCXO, 2, 0, 0),
509	F(19200000, P_BI_TCXO, 1, 0, 0),
510	{ }
511};
512
513static struct clk_rcg2 gcc_pcie_0_aux_clk_src = {
514	.cmd_rcgr = 0x6b058,
515	.mnd_width = 16,
516	.hid_width = 5,
517	.parent_map = gcc_parent_map_2,
518	.freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
519	.clkr.hw.init = &(struct clk_init_data){
520		.name = "gcc_pcie_0_aux_clk_src",
521		.parent_data = gcc_parent_data_2,
522		.num_parents = ARRAY_SIZE(gcc_parent_data_2),
523		.ops = &clk_rcg2_ops,
524	},
525};
526
527static const struct freq_tbl ftbl_gcc_pcie_0_phy_rchng_clk_src[] = {
528	F(19200000, P_BI_TCXO, 1, 0, 0),
529	F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
530	{ }
531};
532
533static struct clk_rcg2 gcc_pcie_0_phy_rchng_clk_src = {
534	.cmd_rcgr = 0x6b03c,
535	.mnd_width = 0,
536	.hid_width = 5,
537	.parent_map = gcc_parent_map_0,
538	.freq_tbl = ftbl_gcc_pcie_0_phy_rchng_clk_src,
539	.clkr.hw.init = &(struct clk_init_data){
540		.name = "gcc_pcie_0_phy_rchng_clk_src",
541		.parent_data = gcc_parent_data_0,
542		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
543		.ops = &clk_rcg2_ops,
544	},
545};
546
547static struct clk_rcg2 gcc_pcie_1_aux_clk_src = {
548	.cmd_rcgr = 0x8d058,
549	.mnd_width = 16,
550	.hid_width = 5,
551	.parent_map = gcc_parent_map_2,
552	.freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
553	.clkr.hw.init = &(struct clk_init_data){
554		.name = "gcc_pcie_1_aux_clk_src",
555		.parent_data = gcc_parent_data_2,
556		.num_parents = ARRAY_SIZE(gcc_parent_data_2),
557		.ops = &clk_rcg2_ops,
558	},
559};
560
561static struct clk_rcg2 gcc_pcie_1_phy_rchng_clk_src = {
562	.cmd_rcgr = 0x8d03c,
563	.mnd_width = 0,
564	.hid_width = 5,
565	.parent_map = gcc_parent_map_0,
566	.freq_tbl = ftbl_gcc_pcie_0_phy_rchng_clk_src,
567	.clkr.hw.init = &(struct clk_init_data){
568		.name = "gcc_pcie_1_phy_rchng_clk_src",
569		.parent_data = gcc_parent_data_0,
570		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
571		.flags = CLK_SET_RATE_PARENT,
572		.ops = &clk_rcg2_ops,
573	},
574};
575
576static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
577	F(60000000, P_GCC_GPLL0_OUT_EVEN, 5, 0, 0),
578	{ }
579};
580
581static struct clk_rcg2 gcc_pdm2_clk_src = {
582	.cmd_rcgr = 0x33010,
583	.mnd_width = 0,
584	.hid_width = 5,
585	.parent_map = gcc_parent_map_0,
586	.freq_tbl = ftbl_gcc_pdm2_clk_src,
587	.clkr.hw.init = &(struct clk_init_data){
588		.name = "gcc_pdm2_clk_src",
589		.parent_data = gcc_parent_data_0,
590		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
591		.flags = CLK_SET_RATE_PARENT,
592		.ops = &clk_rcg2_ops,
593	},
594};
595
596static const struct freq_tbl ftbl_gcc_qspi_core_clk_src[] = {
597	F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
598	F(150000000, P_GCC_GPLL0_OUT_MAIN, 4, 0, 0),
599	F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0),
600	F(300000000, P_GCC_GPLL0_OUT_MAIN, 2, 0, 0),
601	{ }
602};
603
604static struct clk_rcg2 gcc_qspi_core_clk_src = {
605	.cmd_rcgr = 0x4b00c,
606	.mnd_width = 0,
607	.hid_width = 5,
608	.parent_map = gcc_parent_map_0,
609	.freq_tbl = ftbl_gcc_qspi_core_clk_src,
610	.clkr.hw.init = &(struct clk_init_data){
611		.name = "gcc_qspi_core_clk_src",
612		.parent_data = gcc_parent_data_0,
613		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
614		.ops = &clk_rcg2_floor_ops,
615	},
616};
617
618static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = {
619	F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
620	F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
621	F(19200000, P_BI_TCXO, 1, 0, 0),
622	F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
623	F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
624	F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
625	F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),
626	F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
627	F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),
628	F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),
629	F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
630	F(102400000, P_GCC_GPLL0_OUT_EVEN, 1, 128, 375),
631	F(112000000, P_GCC_GPLL0_OUT_EVEN, 1, 28, 75),
632	F(117964800, P_GCC_GPLL0_OUT_EVEN, 1, 6144, 15625),
633	F(120000000, P_GCC_GPLL0_OUT_EVEN, 2.5, 0, 0),
634	{ }
635};
636
637static struct clk_init_data gcc_qupv3_wrap0_s0_clk_src_init = {
638	.name = "gcc_qupv3_wrap0_s0_clk_src",
639	.parent_data = gcc_parent_data_0,
640	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
641	.ops = &clk_rcg2_ops,
642};
643
644static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = {
645	.cmd_rcgr = 0x17010,
646	.mnd_width = 16,
647	.hid_width = 5,
648	.parent_map = gcc_parent_map_0,
649	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
650	.clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_src_init,
651};
652
653static struct clk_init_data gcc_qupv3_wrap0_s1_clk_src_init = {
654	.name = "gcc_qupv3_wrap0_s1_clk_src",
655	.parent_data = gcc_parent_data_0,
656	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
657	.ops = &clk_rcg2_ops,
658};
659
660static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = {
661	.cmd_rcgr = 0x17140,
662	.mnd_width = 16,
663	.hid_width = 5,
664	.parent_map = gcc_parent_map_0,
665	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
666	.clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_src_init,
667};
668
669static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s2_clk_src[] = {
670	F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
671	F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
672	F(19200000, P_BI_TCXO, 1, 0, 0),
673	F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
674	F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
675	F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
676	F(52174000, P_GCC_GPLL0_OUT_MAIN, 1, 2, 23),
677	F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),
678	F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
679	F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),
680	F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),
681	F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
682	{ }
683};
684
685static struct clk_init_data gcc_qupv3_wrap0_s2_clk_src_init = {
686	.name = "gcc_qupv3_wrap0_s2_clk_src",
687	.parent_data = gcc_parent_data_0,
688	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
689	.ops = &clk_rcg2_ops,
690};
691
692static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = {
693	.cmd_rcgr = 0x17270,
694	.mnd_width = 16,
695	.hid_width = 5,
696	.parent_map = gcc_parent_map_0,
697	.freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
698	.clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_src_init,
699};
700
701static struct clk_init_data gcc_qupv3_wrap0_s3_clk_src_init = {
702	.name = "gcc_qupv3_wrap0_s3_clk_src",
703	.parent_data = gcc_parent_data_0,
704	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
705	.ops = &clk_rcg2_ops,
706};
707
708static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = {
709	.cmd_rcgr = 0x173a0,
710	.mnd_width = 16,
711	.hid_width = 5,
712	.parent_map = gcc_parent_map_0,
713	.freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
714	.clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_src_init,
715};
716
717static struct clk_init_data gcc_qupv3_wrap0_s4_clk_src_init = {
718	.name = "gcc_qupv3_wrap0_s4_clk_src",
719	.parent_data = gcc_parent_data_0,
720	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
721	.ops = &clk_rcg2_ops,
722};
723
724static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = {
725	.cmd_rcgr = 0x174d0,
726	.mnd_width = 16,
727	.hid_width = 5,
728	.parent_map = gcc_parent_map_0,
729	.freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
730	.clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_src_init,
731};
732
733static struct clk_init_data gcc_qupv3_wrap0_s5_clk_src_init = {
734	.name = "gcc_qupv3_wrap0_s5_clk_src",
735	.parent_data = gcc_parent_data_0,
736	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
737	.ops = &clk_rcg2_ops,
738};
739
740static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = {
741	.cmd_rcgr = 0x17600,
742	.mnd_width = 16,
743	.hid_width = 5,
744	.parent_map = gcc_parent_map_0,
745	.freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
746	.clkr.hw.init = &gcc_qupv3_wrap0_s5_clk_src_init,
747};
748
749static struct clk_init_data gcc_qupv3_wrap0_s6_clk_src_init = {
750	.name = "gcc_qupv3_wrap0_s6_clk_src",
751	.parent_data = gcc_parent_data_0,
752	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
753	.ops = &clk_rcg2_ops,
754};
755
756static struct clk_rcg2 gcc_qupv3_wrap0_s6_clk_src = {
757	.cmd_rcgr = 0x17730,
758	.mnd_width = 16,
759	.hid_width = 5,
760	.parent_map = gcc_parent_map_0,
761	.freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
762	.clkr.hw.init = &gcc_qupv3_wrap0_s6_clk_src_init,
763};
764
765static struct clk_init_data gcc_qupv3_wrap0_s7_clk_src_init = {
766	.name = "gcc_qupv3_wrap0_s7_clk_src",
767	.parent_data = gcc_parent_data_0,
768	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
769	.ops = &clk_rcg2_ops,
770};
771
772static struct clk_rcg2 gcc_qupv3_wrap0_s7_clk_src = {
773	.cmd_rcgr = 0x17860,
774	.mnd_width = 16,
775	.hid_width = 5,
776	.parent_map = gcc_parent_map_0,
777	.freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
778	.clkr.hw.init = &gcc_qupv3_wrap0_s7_clk_src_init,
779};
780
781static struct clk_init_data gcc_qupv3_wrap1_s0_clk_src_init = {
782	.name = "gcc_qupv3_wrap1_s0_clk_src",
783	.parent_data = gcc_parent_data_0,
784	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
785	.ops = &clk_rcg2_ops,
786};
787
788static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = {
789	.cmd_rcgr = 0x18010,
790	.mnd_width = 16,
791	.hid_width = 5,
792	.parent_map = gcc_parent_map_0,
793	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
794	.clkr.hw.init = &gcc_qupv3_wrap1_s0_clk_src_init,
795};
796
797static struct clk_init_data gcc_qupv3_wrap1_s1_clk_src_init = {
798	.name = "gcc_qupv3_wrap1_s1_clk_src",
799	.parent_data = gcc_parent_data_0,
800	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
801	.ops = &clk_rcg2_ops,
802};
803
804static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = {
805	.cmd_rcgr = 0x18140,
806	.mnd_width = 16,
807	.hid_width = 5,
808	.parent_map = gcc_parent_map_0,
809	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
810	.clkr.hw.init = &gcc_qupv3_wrap1_s1_clk_src_init,
811};
812
813static struct clk_init_data gcc_qupv3_wrap1_s2_clk_src_init = {
814	.name = "gcc_qupv3_wrap1_s2_clk_src",
815	.parent_data = gcc_parent_data_0,
816	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
817	.ops = &clk_rcg2_ops,
818};
819
820static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = {
821	.cmd_rcgr = 0x18270,
822	.mnd_width = 16,
823	.hid_width = 5,
824	.parent_map = gcc_parent_map_0,
825	.freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
826	.clkr.hw.init = &gcc_qupv3_wrap1_s2_clk_src_init,
827};
828
829static struct clk_init_data gcc_qupv3_wrap1_s3_clk_src_init = {
830	.name = "gcc_qupv3_wrap1_s3_clk_src",
831	.parent_data = gcc_parent_data_0,
832	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
833	.ops = &clk_rcg2_ops,
834};
835
836static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = {
837	.cmd_rcgr = 0x183a0,
838	.mnd_width = 16,
839	.hid_width = 5,
840	.parent_map = gcc_parent_map_0,
841	.freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
842	.clkr.hw.init = &gcc_qupv3_wrap1_s3_clk_src_init,
843};
844
845static struct clk_init_data gcc_qupv3_wrap1_s4_clk_src_init = {
846	.name = "gcc_qupv3_wrap1_s4_clk_src",
847	.parent_data = gcc_parent_data_0,
848	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
849	.ops = &clk_rcg2_ops,
850};
851
852static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = {
853	.cmd_rcgr = 0x184d0,
854	.mnd_width = 16,
855	.hid_width = 5,
856	.parent_map = gcc_parent_map_0,
857	.freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
858	.clkr.hw.init = &gcc_qupv3_wrap1_s4_clk_src_init,
859};
860
861static struct clk_init_data gcc_qupv3_wrap1_s5_clk_src_init = {
862	.name = "gcc_qupv3_wrap1_s5_clk_src",
863	.parent_data = gcc_parent_data_0,
864	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
865	.ops = &clk_rcg2_ops,
866};
867
868static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = {
869	.cmd_rcgr = 0x18600,
870	.mnd_width = 16,
871	.hid_width = 5,
872	.parent_map = gcc_parent_map_0,
873	.freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
874	.clkr.hw.init = &gcc_qupv3_wrap1_s5_clk_src_init,
875};
876
877static struct clk_init_data gcc_qupv3_wrap1_s6_clk_src_init = {
878	.name = "gcc_qupv3_wrap1_s6_clk_src",
879	.parent_data = gcc_parent_data_0,
880	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
881	.ops = &clk_rcg2_ops,
882};
883
884static struct clk_rcg2 gcc_qupv3_wrap1_s6_clk_src = {
885	.cmd_rcgr = 0x18730,
886	.mnd_width = 16,
887	.hid_width = 5,
888	.parent_map = gcc_parent_map_0,
889	.freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
890	.clkr.hw.init = &gcc_qupv3_wrap1_s6_clk_src_init,
891};
892
893static struct clk_init_data gcc_qupv3_wrap1_s7_clk_src_init = {
894	.name = "gcc_qupv3_wrap1_s7_clk_src",
895	.parent_data = gcc_parent_data_0,
896	.num_parents = ARRAY_SIZE(gcc_parent_data_0),
897	.ops = &clk_rcg2_ops,
898};
899
900static struct clk_rcg2 gcc_qupv3_wrap1_s7_clk_src = {
901	.cmd_rcgr = 0x18860,
902	.mnd_width = 16,
903	.hid_width = 5,
904	.parent_map = gcc_parent_map_0,
905	.freq_tbl = ftbl_gcc_qupv3_wrap0_s2_clk_src,
906	.clkr.hw.init = &gcc_qupv3_wrap1_s7_clk_src_init,
907};
908
909static const struct freq_tbl ftbl_gcc_sdcc1_apps_clk_src[] = {
910	F(144000, P_BI_TCXO, 16, 3, 25),
911	F(400000, P_BI_TCXO, 12, 1, 4),
912	F(19200000, P_BI_TCXO, 1, 0, 0),
913	F(20000000, P_GCC_GPLL0_OUT_EVEN, 5, 1, 3),
914	F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
915	F(50000000, P_GCC_GPLL0_OUT_EVEN, 6, 0, 0),
916	F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
917	F(192000000, P_GCC_GPLL10_OUT_MAIN, 2, 0, 0),
918	F(384000000, P_GCC_GPLL10_OUT_MAIN, 1, 0, 0),
919	{ }
920};
921
922static struct clk_rcg2 gcc_sdcc1_apps_clk_src = {
923	.cmd_rcgr = 0x7500c,
924	.mnd_width = 8,
925	.hid_width = 5,
926	.parent_map = gcc_parent_map_8,
927	.freq_tbl = ftbl_gcc_sdcc1_apps_clk_src,
928	.clkr.hw.init = &(struct clk_init_data){
929		.name = "gcc_sdcc1_apps_clk_src",
930		.parent_data = gcc_parent_data_8,
931		.num_parents = ARRAY_SIZE(gcc_parent_data_8),
932		.ops = &clk_rcg2_floor_ops,
933	},
934};
935
936static const struct freq_tbl ftbl_gcc_sdcc1_ice_core_clk_src[] = {
937	F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
938	F(150000000, P_GCC_GPLL0_OUT_EVEN, 2, 0, 0),
939	F(300000000, P_GCC_GPLL0_OUT_EVEN, 1, 0, 0),
940	{ }
941};
942
943static struct clk_rcg2 gcc_sdcc1_ice_core_clk_src = {
944	.cmd_rcgr = 0x7502c,
945	.mnd_width = 0,
946	.hid_width = 5,
947	.parent_map = gcc_parent_map_1,
948	.freq_tbl = ftbl_gcc_sdcc1_ice_core_clk_src,
949	.clkr.hw.init = &(struct clk_init_data){
950		.name = "gcc_sdcc1_ice_core_clk_src",
951		.parent_data = gcc_parent_data_1,
952		.num_parents = ARRAY_SIZE(gcc_parent_data_1),
953		.ops = &clk_rcg2_floor_ops,
954	},
955};
956
957static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {
958	F(400000, P_BI_TCXO, 12, 1, 4),
959	F(19200000, P_BI_TCXO, 1, 0, 0),
960	F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
961	F(50000000, P_GCC_GPLL0_OUT_EVEN, 6, 0, 0),
962	F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
963	F(202000000, P_GCC_GPLL9_OUT_MAIN, 4, 0, 0),
964	{ }
965};
966
967static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {
968	.cmd_rcgr = 0x1400c,
969	.mnd_width = 8,
970	.hid_width = 5,
971	.parent_map = gcc_parent_map_9,
972	.freq_tbl = ftbl_gcc_sdcc2_apps_clk_src,
973	.clkr.hw.init = &(struct clk_init_data){
974		.name = "gcc_sdcc2_apps_clk_src",
975		.parent_data = gcc_parent_data_9,
976		.num_parents = ARRAY_SIZE(gcc_parent_data_9),
977		.flags = CLK_OPS_PARENT_ENABLE,
978		.ops = &clk_rcg2_floor_ops,
979	},
980};
981
982static const struct freq_tbl ftbl_gcc_sdcc4_apps_clk_src[] = {
983	F(400000, P_BI_TCXO, 12, 1, 4),
984	F(19200000, P_BI_TCXO, 1, 0, 0),
985	F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
986	F(50000000, P_GCC_GPLL0_OUT_EVEN, 6, 0, 0),
987	F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
988	{ }
989};
990
991static struct clk_rcg2 gcc_sdcc4_apps_clk_src = {
992	.cmd_rcgr = 0x1600c,
993	.mnd_width = 8,
994	.hid_width = 5,
995	.parent_map = gcc_parent_map_1,
996	.freq_tbl = ftbl_gcc_sdcc4_apps_clk_src,
997	.clkr.hw.init = &(struct clk_init_data){
998		.name = "gcc_sdcc4_apps_clk_src",
999		.parent_data = gcc_parent_data_1,
1000		.num_parents = ARRAY_SIZE(gcc_parent_data_1),
1001		.ops = &clk_rcg2_floor_ops,
1002	},
1003};
1004
1005static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = {
1006	F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
1007	F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
1008	F(150000000, P_GCC_GPLL0_OUT_EVEN, 2, 0, 0),
1009	F(300000000, P_GCC_GPLL0_OUT_EVEN, 1, 0, 0),
1010	{ }
1011};
1012
1013static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = {
1014	.cmd_rcgr = 0x77024,
1015	.mnd_width = 8,
1016	.hid_width = 5,
1017	.parent_map = gcc_parent_map_0,
1018	.freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src,
1019	.clkr.hw.init = &(struct clk_init_data){
1020		.name = "gcc_ufs_phy_axi_clk_src",
1021		.parent_data = gcc_parent_data_0,
1022		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
1023		.ops = &clk_rcg2_ops,
1024	},
1025};
1026
1027static const struct freq_tbl ftbl_gcc_ufs_phy_ice_core_clk_src[] = {
1028	F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
1029	F(150000000, P_GCC_GPLL0_OUT_EVEN, 2, 0, 0),
1030	F(300000000, P_GCC_GPLL0_OUT_EVEN, 1, 0, 0),
1031	{ }
1032};
1033
1034static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = {
1035	.cmd_rcgr = 0x7706c,
1036	.mnd_width = 0,
1037	.hid_width = 5,
1038	.parent_map = gcc_parent_map_0,
1039	.freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src,
1040	.clkr.hw.init = &(struct clk_init_data){
1041		.name = "gcc_ufs_phy_ice_core_clk_src",
1042		.parent_data = gcc_parent_data_0,
1043		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
1044		.ops = &clk_rcg2_ops,
1045	},
1046};
1047
1048static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = {
1049	.cmd_rcgr = 0x770a0,
1050	.mnd_width = 0,
1051	.hid_width = 5,
1052	.parent_map = gcc_parent_map_3,
1053	.freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
1054	.clkr.hw.init = &(struct clk_init_data){
1055		.name = "gcc_ufs_phy_phy_aux_clk_src",
1056		.parent_data = gcc_parent_data_3,
1057		.num_parents = ARRAY_SIZE(gcc_parent_data_3),
1058		.ops = &clk_rcg2_ops,
1059	},
1060};
1061
1062static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = {
1063	.cmd_rcgr = 0x77084,
1064	.mnd_width = 0,
1065	.hid_width = 5,
1066	.parent_map = gcc_parent_map_0,
1067	.freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src,
1068	.clkr.hw.init = &(struct clk_init_data){
1069		.name = "gcc_ufs_phy_unipro_core_clk_src",
1070		.parent_data = gcc_parent_data_0,
1071		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
1072		.ops = &clk_rcg2_ops,
1073	},
1074};
1075
1076static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {
1077	F(66666667, P_GCC_GPLL0_OUT_EVEN, 4.5, 0, 0),
1078	F(133333333, P_GCC_GPLL0_OUT_MAIN, 4.5, 0, 0),
1079	F(200000000, P_GCC_GPLL0_OUT_ODD, 1, 0, 0),
1080	F(240000000, P_GCC_GPLL0_OUT_MAIN, 2.5, 0, 0),
1081	{ }
1082};
1083
1084static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {
1085	.cmd_rcgr = 0xf020,
1086	.mnd_width = 8,
1087	.hid_width = 5,
1088	.parent_map = gcc_parent_map_1,
1089	.freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
1090	.clkr.hw.init = &(struct clk_init_data){
1091		.name = "gcc_usb30_prim_master_clk_src",
1092		.parent_data = gcc_parent_data_1,
1093		.num_parents = ARRAY_SIZE(gcc_parent_data_1),
1094		.ops = &clk_rcg2_ops,
1095	},
1096};
1097
1098static const struct freq_tbl ftbl_gcc_usb30_prim_mock_utmi_clk_src[] = {
1099	F(19200000, P_BI_TCXO, 1, 0, 0),
1100	{ }
1101};
1102
1103static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {
1104	.cmd_rcgr = 0xf038,
1105	.mnd_width = 0,
1106	.hid_width = 5,
1107	.parent_map = gcc_parent_map_3,
1108	.freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
1109	.clkr.hw.init = &(struct clk_init_data){
1110		.name = "gcc_usb30_prim_mock_utmi_clk_src",
1111		.parent_data = gcc_parent_data_3,
1112		.num_parents = ARRAY_SIZE(gcc_parent_data_3),
1113		.ops = &clk_rcg2_ops,
1114	},
1115};
1116
1117static const struct freq_tbl ftbl_gcc_usb30_sec_master_clk_src[] = {
1118	F(60000000, P_GCC_GPLL0_OUT_EVEN, 5, 0, 0),
1119	F(120000000, P_GCC_GPLL0_OUT_EVEN, 2.5, 0, 0),
1120	{ }
1121};
1122
1123static struct clk_rcg2 gcc_usb30_sec_master_clk_src = {
1124	.cmd_rcgr = 0x9e020,
1125	.mnd_width = 8,
1126	.hid_width = 5,
1127	.parent_map = gcc_parent_map_5,
1128	.freq_tbl = ftbl_gcc_usb30_sec_master_clk_src,
1129	.clkr.hw.init = &(struct clk_init_data){
1130		.name = "gcc_usb30_sec_master_clk_src",
1131		.parent_data = gcc_parent_data_5,
1132		.num_parents = ARRAY_SIZE(gcc_parent_data_5),
1133		.ops = &clk_rcg2_ops,
1134	},
1135};
1136
1137static struct clk_rcg2 gcc_usb30_sec_mock_utmi_clk_src = {
1138	.cmd_rcgr = 0x9e038,
1139	.mnd_width = 0,
1140	.hid_width = 5,
1141	.parent_map = gcc_parent_map_3,
1142	.freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
1143	.clkr.hw.init = &(struct clk_init_data){
1144		.name = "gcc_usb30_sec_mock_utmi_clk_src",
1145		.parent_data = gcc_parent_data_3,
1146		.num_parents = ARRAY_SIZE(gcc_parent_data_3),
1147		.ops = &clk_rcg2_ops,
1148	},
1149};
1150
1151static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {
1152	.cmd_rcgr = 0xf064,
1153	.mnd_width = 0,
1154	.hid_width = 5,
1155	.parent_map = gcc_parent_map_2,
1156	.freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
1157	.clkr.hw.init = &(struct clk_init_data){
1158		.name = "gcc_usb3_prim_phy_aux_clk_src",
1159		.parent_data = gcc_parent_data_2,
1160		.num_parents = ARRAY_SIZE(gcc_parent_data_2),
1161		.ops = &clk_rcg2_ops,
1162	},
1163};
1164
1165static struct clk_rcg2 gcc_usb3_sec_phy_aux_clk_src = {
1166	.cmd_rcgr = 0x9e064,
1167	.mnd_width = 0,
1168	.hid_width = 5,
1169	.parent_map = gcc_parent_map_2,
1170	.freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
1171	.clkr.hw.init = &(struct clk_init_data){
1172		.name = "gcc_usb3_sec_phy_aux_clk_src",
1173		.parent_data = gcc_parent_data_2,
1174		.num_parents = ARRAY_SIZE(gcc_parent_data_2),
1175		.ops = &clk_rcg2_ops,
1176	},
1177};
1178
1179static const struct freq_tbl ftbl_gcc_sec_ctrl_clk_src[] = {
1180	F(4800000, P_BI_TCXO, 4, 0, 0),
1181	F(19200000, P_BI_TCXO, 1, 0, 0),
1182	{ }
1183};
1184
1185static struct clk_rcg2 gcc_sec_ctrl_clk_src = {
1186	.cmd_rcgr = 0x3d02c,
1187	.mnd_width = 0,
1188	.hid_width = 5,
1189	.parent_map = gcc_parent_map_3,
1190	.freq_tbl = ftbl_gcc_sec_ctrl_clk_src,
1191	.clkr.hw.init = &(struct clk_init_data){
1192		.name = "gcc_sec_ctrl_clk_src",
1193		.parent_data = gcc_parent_data_3,
1194		.num_parents = ARRAY_SIZE(gcc_parent_data_3),
1195		.ops = &clk_rcg2_ops,
1196	},
1197};
1198
1199static struct clk_regmap_div gcc_usb30_prim_mock_utmi_postdiv_clk_src = {
1200	.reg = 0xf050,
1201	.shift = 0,
1202	.width = 4,
1203	.clkr.hw.init = &(struct clk_init_data) {
1204		.name = "gcc_usb30_prim_mock_utmi_postdiv_clk_src",
1205		.parent_hws = (const struct clk_hw*[]){
1206			&gcc_usb30_prim_mock_utmi_clk_src.clkr.hw,
1207		},
1208		.num_parents = 1,
1209		.flags = CLK_SET_RATE_PARENT,
1210		.ops = &clk_regmap_div_ro_ops,
1211	},
1212};
1213
1214static struct clk_regmap_div gcc_usb30_sec_mock_utmi_postdiv_clk_src = {
1215	.reg = 0x9e050,
1216	.shift = 0,
1217	.width = 4,
1218	.clkr.hw.init = &(struct clk_init_data) {
1219		.name = "gcc_usb30_sec_mock_utmi_postdiv_clk_src",
1220		.parent_hws = (const struct clk_hw*[]){
1221			&gcc_usb30_sec_mock_utmi_clk_src.clkr.hw,
1222		},
1223		.num_parents = 1,
1224		.flags = CLK_SET_RATE_PARENT,
1225		.ops = &clk_regmap_div_ro_ops,
1226	},
1227};
1228
1229static struct clk_branch gcc_pcie_clkref_en = {
1230	.halt_reg = 0x8c004,
1231	.halt_check = BRANCH_HALT,
1232	.clkr = {
1233		.enable_reg = 0x8c004,
1234		.enable_mask = BIT(0),
1235		.hw.init = &(struct clk_init_data){
1236			.name = "gcc_pcie_clkref_en",
1237			.ops = &clk_branch2_ops,
1238		},
1239	},
1240};
1241
1242static struct clk_branch gcc_edp_clkref_en = {
1243	.halt_reg = 0x8c008,
1244	.halt_check = BRANCH_HALT,
1245	.clkr = {
1246		.enable_reg = 0x8c008,
1247		.enable_mask = BIT(0),
1248		.hw.init = &(struct clk_init_data){
1249			.name = "gcc_edp_clkref_en",
1250			.ops = &clk_branch2_ops,
1251		},
1252	},
1253};
1254
1255static struct clk_branch gcc_aggre_noc_pcie_0_axi_clk = {
1256	.halt_reg = 0x6b080,
1257	.halt_check = BRANCH_HALT_SKIP,
1258	.hwcg_reg = 0x6b080,
1259	.hwcg_bit = 1,
1260	.clkr = {
1261		.enable_reg = 0x52000,
1262		.enable_mask = BIT(12),
1263		.hw.init = &(struct clk_init_data){
1264			.name = "gcc_aggre_noc_pcie_0_axi_clk",
1265			.ops = &clk_branch2_ops,
1266		},
1267	},
1268};
1269
1270static struct clk_branch gcc_aggre_noc_pcie_1_axi_clk = {
1271	.halt_reg = 0x8d084,
1272	.halt_check = BRANCH_HALT_SKIP,
1273	.hwcg_reg = 0x8d084,
1274	.hwcg_bit = 1,
1275	.clkr = {
1276		.enable_reg = 0x52000,
1277		.enable_mask = BIT(11),
1278		.hw.init = &(struct clk_init_data){
1279			.name = "gcc_aggre_noc_pcie_1_axi_clk",
1280			.ops = &clk_branch2_ops,
1281		},
1282	},
1283};
1284
1285static struct clk_branch gcc_aggre_noc_pcie_tbu_clk = {
1286	.halt_reg = 0x90010,
1287	.halt_check = BRANCH_HALT_VOTED,
1288	.hwcg_reg = 0x90010,
1289	.hwcg_bit = 1,
1290	.clkr = {
1291		.enable_reg = 0x52000,
1292		.enable_mask = BIT(18),
1293		.hw.init = &(struct clk_init_data){
1294			.name = "gcc_aggre_noc_pcie_tbu_clk",
1295			.ops = &clk_branch2_ops,
1296		},
1297	},
1298};
1299
1300static struct clk_branch gcc_aggre_noc_pcie_center_sf_axi_clk = {
1301	.halt_reg = 0x8d088,
1302	.halt_check = BRANCH_HALT_VOTED,
1303	.hwcg_reg = 0x8d088,
1304	.hwcg_bit = 1,
1305	.clkr = {
1306		.enable_reg = 0x52008,
1307		.enable_mask = BIT(28),
1308		.hw.init = &(struct clk_init_data){
1309			.name = "gcc_aggre_noc_pcie_center_sf_axi_clk",
1310			.ops = &clk_branch2_ops,
1311		},
1312	},
1313};
1314
1315static struct clk_branch gcc_aggre_ufs_phy_axi_clk = {
1316	.halt_reg = 0x770cc,
1317	.halt_check = BRANCH_HALT_VOTED,
1318	.hwcg_reg = 0x770cc,
1319	.hwcg_bit = 1,
1320	.clkr = {
1321		.enable_reg = 0x770cc,
1322		.enable_mask = BIT(0),
1323		.hw.init = &(struct clk_init_data){
1324			.name = "gcc_aggre_ufs_phy_axi_clk",
1325			.parent_hws = (const struct clk_hw*[]){
1326				&gcc_ufs_phy_axi_clk_src.clkr.hw,
1327			},
1328			.num_parents = 1,
1329			.flags = CLK_SET_RATE_PARENT,
1330			.ops = &clk_branch2_ops,
1331		},
1332	},
1333};
1334
1335static struct clk_branch gcc_aggre_usb3_prim_axi_clk = {
1336	.halt_reg = 0xf080,
1337	.halt_check = BRANCH_HALT_VOTED,
1338	.hwcg_reg = 0xf080,
1339	.hwcg_bit = 1,
1340	.clkr = {
1341		.enable_reg = 0xf080,
1342		.enable_mask = BIT(0),
1343		.hw.init = &(struct clk_init_data){
1344			.name = "gcc_aggre_usb3_prim_axi_clk",
1345			.parent_hws = (const struct clk_hw*[]){
1346				&gcc_usb30_prim_master_clk_src.clkr.hw,
1347			},
1348			.num_parents = 1,
1349			.flags = CLK_SET_RATE_PARENT,
1350			.ops = &clk_branch2_ops,
1351		},
1352	},
1353};
1354
1355static struct clk_branch gcc_aggre_usb3_sec_axi_clk = {
1356	.halt_reg = 0x9e080,
1357	.halt_check = BRANCH_HALT_VOTED,
1358	.hwcg_reg = 0x9e080,
1359	.hwcg_bit = 1,
1360	.clkr = {
1361		.enable_reg = 0x9e080,
1362		.enable_mask = BIT(0),
1363		.hw.init = &(struct clk_init_data){
1364			.name = "gcc_aggre_usb3_sec_axi_clk",
1365			.parent_hws = (const struct clk_hw*[]){
1366				&gcc_usb30_sec_master_clk_src.clkr.hw,
1367			},
1368			.num_parents = 1,
1369			.flags = CLK_SET_RATE_PARENT,
1370			.ops = &clk_branch2_ops,
1371		},
1372	},
1373};
1374
1375static struct clk_branch gcc_camera_hf_axi_clk = {
1376	.halt_reg = 0x26010,
1377	.halt_check = BRANCH_HALT_SKIP,
1378	.hwcg_reg = 0x26010,
1379	.hwcg_bit = 1,
1380	.clkr = {
1381		.enable_reg = 0x26010,
1382		.enable_mask = BIT(0),
1383		.hw.init = &(struct clk_init_data){
1384			.name = "gcc_camera_hf_axi_clk",
1385			.ops = &clk_branch2_ops,
1386		},
1387	},
1388};
1389
1390static struct clk_branch gcc_camera_sf_axi_clk = {
1391	.halt_reg = 0x2601c,
1392	.halt_check = BRANCH_HALT_SKIP,
1393	.hwcg_reg = 0x2601c,
1394	.hwcg_bit = 1,
1395	.clkr = {
1396		.enable_reg = 0x2601c,
1397		.enable_mask = BIT(0),
1398		.hw.init = &(struct clk_init_data){
1399			.name = "gcc_camera_sf_axi_clk",
1400			.ops = &clk_branch2_ops,
1401		},
1402	},
1403};
1404
1405static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {
1406	.halt_reg = 0xf07c,
1407	.halt_check = BRANCH_HALT_VOTED,
1408	.hwcg_reg = 0xf07c,
1409	.hwcg_bit = 1,
1410	.clkr = {
1411		.enable_reg = 0xf07c,
1412		.enable_mask = BIT(0),
1413		.hw.init = &(struct clk_init_data){
1414			.name = "gcc_cfg_noc_usb3_prim_axi_clk",
1415			.parent_hws = (const struct clk_hw*[]){
1416				&gcc_usb30_prim_master_clk_src.clkr.hw,
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_cfg_noc_usb3_sec_axi_clk = {
1426	.halt_reg = 0x9e07c,
1427	.halt_check = BRANCH_HALT_VOTED,
1428	.hwcg_reg = 0x9e07c,
1429	.hwcg_bit = 1,
1430	.clkr = {
1431		.enable_reg = 0x9e07c,
1432		.enable_mask = BIT(0),
1433		.hw.init = &(struct clk_init_data){
1434			.name = "gcc_cfg_noc_usb3_sec_axi_clk",
1435			.parent_hws = (const struct clk_hw*[]){
1436				&gcc_usb30_sec_master_clk_src.clkr.hw,
1437			},
1438			.num_parents = 1,
1439			.flags = CLK_SET_RATE_PARENT,
1440			.ops = &clk_branch2_ops,
1441		},
1442	},
1443};
1444
1445static struct clk_branch gcc_ddrss_gpu_axi_clk = {
1446	.halt_reg = 0x71154,
1447	.halt_check = BRANCH_HALT_SKIP,
1448	.hwcg_reg = 0x71154,
1449	.hwcg_bit = 1,
1450	.clkr = {
1451		.enable_reg = 0x71154,
1452		.enable_mask = BIT(0),
1453		.hw.init = &(struct clk_init_data){
1454			.name = "gcc_ddrss_gpu_axi_clk",
1455			.ops = &clk_branch2_aon_ops,
1456		},
1457	},
1458};
1459
1460static struct clk_branch gcc_ddrss_pcie_sf_clk = {
1461	.halt_reg = 0x8d080,
1462	.halt_check = BRANCH_HALT_SKIP,
1463	.hwcg_reg = 0x8d080,
1464	.hwcg_bit = 1,
1465	.clkr = {
1466		.enable_reg = 0x52000,
1467		.enable_mask = BIT(19),
1468		.hw.init = &(struct clk_init_data){
1469			.name = "gcc_ddrss_pcie_sf_clk",
1470			.ops = &clk_branch2_ops,
1471		},
1472	},
1473};
1474
1475static struct clk_branch gcc_disp_gpll0_clk_src = {
1476	.halt_check = BRANCH_HALT_DELAY,
1477	.clkr = {
1478		.enable_reg = 0x52000,
1479		.enable_mask = BIT(7),
1480		.hw.init = &(struct clk_init_data){
1481			.name = "gcc_disp_gpll0_clk_src",
1482			.parent_hws = (const struct clk_hw*[]){
1483				&gcc_gpll0.clkr.hw,
1484			},
1485			.num_parents = 1,
1486			.flags = CLK_SET_RATE_PARENT,
1487			.ops = &clk_branch2_ops,
1488		},
1489	},
1490};
1491
1492static struct clk_branch gcc_disp_hf_axi_clk = {
1493	.halt_reg = 0x2700c,
1494	.halt_check = BRANCH_HALT_SKIP,
1495	.hwcg_reg = 0x2700c,
1496	.hwcg_bit = 1,
1497	.clkr = {
1498		.enable_reg = 0x2700c,
1499		.enable_mask = BIT(0),
1500		.hw.init = &(struct clk_init_data){
1501			.name = "gcc_disp_hf_axi_clk",
1502			.ops = &clk_branch2_ops,
1503		},
1504	},
1505};
1506
1507static struct clk_branch gcc_disp_sf_axi_clk = {
1508	.halt_reg = 0x27014,
1509	.halt_check = BRANCH_HALT_SKIP,
1510	.hwcg_reg = 0x27014,
1511	.hwcg_bit = 1,
1512	.clkr = {
1513		.enable_reg = 0x27014,
1514		.enable_mask = BIT(0),
1515		.hw.init = &(struct clk_init_data){
1516			.name = "gcc_disp_sf_axi_clk",
1517			.ops = &clk_branch2_ops,
1518		},
1519	},
1520};
1521
1522static struct clk_branch gcc_gp1_clk = {
1523	.halt_reg = 0x64000,
1524	.halt_check = BRANCH_HALT,
1525	.clkr = {
1526		.enable_reg = 0x64000,
1527		.enable_mask = BIT(0),
1528		.hw.init = &(struct clk_init_data){
1529			.name = "gcc_gp1_clk",
1530			.parent_hws = (const struct clk_hw*[]){
1531				&gcc_gp1_clk_src.clkr.hw,
1532			},
1533			.num_parents = 1,
1534			.flags = CLK_SET_RATE_PARENT,
1535			.ops = &clk_branch2_ops,
1536		},
1537	},
1538};
1539
1540static struct clk_branch gcc_gp2_clk = {
1541	.halt_reg = 0x65000,
1542	.halt_check = BRANCH_HALT,
1543	.clkr = {
1544		.enable_reg = 0x65000,
1545		.enable_mask = BIT(0),
1546		.hw.init = &(struct clk_init_data){
1547			.name = "gcc_gp2_clk",
1548			.parent_hws = (const struct clk_hw*[]){
1549				&gcc_gp2_clk_src.clkr.hw,
1550			},
1551			.num_parents = 1,
1552			.flags = CLK_SET_RATE_PARENT,
1553			.ops = &clk_branch2_ops,
1554		},
1555	},
1556};
1557
1558static struct clk_branch gcc_gp3_clk = {
1559	.halt_reg = 0x66000,
1560	.halt_check = BRANCH_HALT,
1561	.clkr = {
1562		.enable_reg = 0x66000,
1563		.enable_mask = BIT(0),
1564		.hw.init = &(struct clk_init_data){
1565			.name = "gcc_gp3_clk",
1566			.parent_hws = (const struct clk_hw*[]){
1567				&gcc_gp3_clk_src.clkr.hw,
1568			},
1569			.num_parents = 1,
1570			.flags = CLK_SET_RATE_PARENT,
1571			.ops = &clk_branch2_ops,
1572		},
1573	},
1574};
1575
1576static struct clk_branch gcc_gpu_gpll0_clk_src = {
1577	.halt_check = BRANCH_HALT_DELAY,
1578	.clkr = {
1579		.enable_reg = 0x52000,
1580		.enable_mask = BIT(15),
1581		.hw.init = &(struct clk_init_data){
1582			.name = "gcc_gpu_gpll0_clk_src",
1583			.parent_hws = (const struct clk_hw*[]){
1584				&gcc_gpll0.clkr.hw,
1585			},
1586			.num_parents = 1,
1587			.flags = CLK_SET_RATE_PARENT,
1588			.ops = &clk_branch2_ops,
1589		},
1590	},
1591};
1592
1593static struct clk_branch gcc_gpu_gpll0_div_clk_src = {
1594	.halt_check = BRANCH_HALT_DELAY,
1595	.clkr = {
1596		.enable_reg = 0x52000,
1597		.enable_mask = BIT(16),
1598		.hw.init = &(struct clk_init_data){
1599			.name = "gcc_gpu_gpll0_div_clk_src",
1600			.parent_hws = (const struct clk_hw*[]){
1601				&gcc_gpll0_out_even.clkr.hw,
1602			},
1603			.num_parents = 1,
1604			.flags = CLK_SET_RATE_PARENT,
1605			.ops = &clk_branch2_ops,
1606		},
1607	},
1608};
1609
1610static struct clk_branch gcc_gpu_iref_en = {
1611	.halt_reg = 0x8c014,
1612	.halt_check = BRANCH_HALT,
1613	.clkr = {
1614		.enable_reg = 0x8c014,
1615		.enable_mask = BIT(0),
1616		.hw.init = &(struct clk_init_data){
1617			.name = "gcc_gpu_iref_en",
1618			.ops = &clk_branch2_ops,
1619		},
1620	},
1621};
1622
1623static struct clk_branch gcc_gpu_memnoc_gfx_clk = {
1624	.halt_reg = 0x7100c,
1625	.halt_check = BRANCH_HALT_VOTED,
1626	.hwcg_reg = 0x7100c,
1627	.hwcg_bit = 1,
1628	.clkr = {
1629		.enable_reg = 0x7100c,
1630		.enable_mask = BIT(0),
1631		.hw.init = &(struct clk_init_data){
1632			.name = "gcc_gpu_memnoc_gfx_clk",
1633			.ops = &clk_branch2_aon_ops,
1634		},
1635	},
1636};
1637
1638static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = {
1639	.halt_reg = 0x71018,
1640	.halt_check = BRANCH_HALT,
1641	.clkr = {
1642		.enable_reg = 0x71018,
1643		.enable_mask = BIT(0),
1644		.hw.init = &(struct clk_init_data){
1645			.name = "gcc_gpu_snoc_dvm_gfx_clk",
1646			.ops = &clk_branch2_aon_ops,
1647		},
1648	},
1649};
1650
1651static struct clk_branch gcc_pcie0_phy_rchng_clk = {
1652	.halt_reg = 0x6b038,
1653	.halt_check = BRANCH_HALT_VOTED,
1654	.clkr = {
1655		.enable_reg = 0x52000,
1656		.enable_mask = BIT(22),
1657		.hw.init = &(struct clk_init_data){
1658			.name = "gcc_pcie0_phy_rchng_clk",
1659			.parent_hws = (const struct clk_hw*[]){
1660				&gcc_pcie_0_phy_rchng_clk_src.clkr.hw,
1661			},
1662			.num_parents = 1,
1663			.flags = CLK_SET_RATE_PARENT,
1664			.ops = &clk_branch2_ops,
1665		},
1666	},
1667};
1668
1669static struct clk_branch gcc_pcie1_phy_rchng_clk = {
1670	.halt_reg = 0x8d038,
1671	.halt_check = BRANCH_HALT_VOTED,
1672	.clkr = {
1673		.enable_reg = 0x52000,
1674		.enable_mask = BIT(23),
1675		.hw.init = &(struct clk_init_data){
1676			.name = "gcc_pcie1_phy_rchng_clk",
1677			.parent_hws = (const struct clk_hw*[]){
1678				&gcc_pcie_1_phy_rchng_clk_src.clkr.hw,
1679			},
1680			.num_parents = 1,
1681			.flags = CLK_SET_RATE_PARENT,
1682			.ops = &clk_branch2_ops,
1683		},
1684	},
1685};
1686
1687static struct clk_branch gcc_pcie_0_aux_clk = {
1688	.halt_reg = 0x6b028,
1689	.halt_check = BRANCH_HALT_VOTED,
1690	.clkr = {
1691		.enable_reg = 0x52008,
1692		.enable_mask = BIT(3),
1693		.hw.init = &(struct clk_init_data){
1694			.name = "gcc_pcie_0_aux_clk",
1695			.parent_hws = (const struct clk_hw*[]){
1696				&gcc_pcie_0_aux_clk_src.clkr.hw,
1697			},
1698			.num_parents = 1,
1699			.flags = CLK_SET_RATE_PARENT,
1700			.ops = &clk_branch2_ops,
1701		},
1702	},
1703};
1704
1705static struct clk_branch gcc_pcie_0_cfg_ahb_clk = {
1706	.halt_reg = 0x6b024,
1707	.halt_check = BRANCH_HALT_VOTED,
1708	.hwcg_reg = 0x6b024,
1709	.hwcg_bit = 1,
1710	.clkr = {
1711		.enable_reg = 0x52008,
1712		.enable_mask = BIT(2),
1713		.hw.init = &(struct clk_init_data){
1714			.name = "gcc_pcie_0_cfg_ahb_clk",
1715			.ops = &clk_branch2_ops,
1716		},
1717	},
1718};
1719
1720static struct clk_branch gcc_pcie_0_mstr_axi_clk = {
1721	.halt_reg = 0x6b01c,
1722	.halt_check = BRANCH_HALT_SKIP,
1723	.clkr = {
1724		.enable_reg = 0x52008,
1725		.enable_mask = BIT(1),
1726		.hw.init = &(struct clk_init_data){
1727			.name = "gcc_pcie_0_mstr_axi_clk",
1728			.ops = &clk_branch2_ops,
1729		},
1730	},
1731};
1732
1733static struct clk_branch gcc_pcie_0_pipe_clk = {
1734	.halt_reg = 0x6b030,
1735	.halt_check = BRANCH_HALT_SKIP,
1736	.clkr = {
1737		.enable_reg = 0x52008,
1738		.enable_mask = BIT(4),
1739		.hw.init = &(struct clk_init_data){
1740			.name = "gcc_pcie_0_pipe_clk",
1741			.parent_hws = (const struct clk_hw*[]){
1742				&gcc_pcie_0_pipe_clk_src.clkr.hw,
1743			},
1744			.num_parents = 1,
1745			.flags = CLK_SET_RATE_PARENT,
1746			.ops = &clk_branch2_ops,
1747		},
1748	},
1749};
1750
1751static struct clk_branch gcc_pcie_0_slv_axi_clk = {
1752	.halt_reg = 0x6b014,
1753	.halt_check = BRANCH_HALT_VOTED,
1754	.clkr = {
1755		.enable_reg = 0x52008,
1756		.enable_mask = BIT(0),
1757		.hw.init = &(struct clk_init_data){
1758			.name = "gcc_pcie_0_slv_axi_clk",
1759			.ops = &clk_branch2_ops,
1760		},
1761	},
1762};
1763
1764static struct clk_branch gcc_pcie_0_slv_q2a_axi_clk = {
1765	.halt_reg = 0x6b010,
1766	.halt_check = BRANCH_HALT_VOTED,
1767	.clkr = {
1768		.enable_reg = 0x52008,
1769		.enable_mask = BIT(5),
1770		.hw.init = &(struct clk_init_data){
1771			.name = "gcc_pcie_0_slv_q2a_axi_clk",
1772			.ops = &clk_branch2_ops,
1773		},
1774	},
1775};
1776
1777static struct clk_branch gcc_pcie_1_aux_clk = {
1778	.halt_reg = 0x8d028,
1779	.halt_check = BRANCH_HALT_VOTED,
1780	.clkr = {
1781		.enable_reg = 0x52000,
1782		.enable_mask = BIT(29),
1783		.hw.init = &(struct clk_init_data){
1784			.name = "gcc_pcie_1_aux_clk",
1785			.parent_hws = (const struct clk_hw*[]){
1786				&gcc_pcie_1_aux_clk_src.clkr.hw,
1787			},
1788			.num_parents = 1,
1789			.flags = CLK_SET_RATE_PARENT,
1790			.ops = &clk_branch2_ops,
1791		},
1792	},
1793};
1794
1795static struct clk_branch gcc_pcie_1_cfg_ahb_clk = {
1796	.halt_reg = 0x8d024,
1797	.halt_check = BRANCH_HALT_VOTED,
1798	.hwcg_reg = 0x8d024,
1799	.hwcg_bit = 1,
1800	.clkr = {
1801		.enable_reg = 0x52000,
1802		.enable_mask = BIT(28),
1803		.hw.init = &(struct clk_init_data){
1804			.name = "gcc_pcie_1_cfg_ahb_clk",
1805			.ops = &clk_branch2_ops,
1806		},
1807	},
1808};
1809
1810static struct clk_branch gcc_pcie_1_mstr_axi_clk = {
1811	.halt_reg = 0x8d01c,
1812	.halt_check = BRANCH_HALT_SKIP,
1813	.clkr = {
1814		.enable_reg = 0x52000,
1815		.enable_mask = BIT(27),
1816		.hw.init = &(struct clk_init_data){
1817			.name = "gcc_pcie_1_mstr_axi_clk",
1818			.ops = &clk_branch2_ops,
1819		},
1820	},
1821};
1822
1823static struct clk_branch gcc_pcie_1_pipe_clk = {
1824	.halt_reg = 0x8d030,
1825	.halt_check = BRANCH_HALT_SKIP,
1826	.clkr = {
1827		.enable_reg = 0x52000,
1828		.enable_mask = BIT(30),
1829		.hw.init = &(struct clk_init_data){
1830			.name = "gcc_pcie_1_pipe_clk",
1831			.parent_hws = (const struct clk_hw*[]){
1832				&gcc_pcie_1_pipe_clk_src.clkr.hw,
1833			},
1834			.num_parents = 1,
1835			.flags = CLK_SET_RATE_PARENT,
1836			.ops = &clk_branch2_ops,
1837		},
1838	},
1839};
1840
1841static struct clk_branch gcc_pcie_1_slv_axi_clk = {
1842	.halt_reg = 0x8d014,
1843	.halt_check = BRANCH_HALT_VOTED,
1844	.clkr = {
1845		.enable_reg = 0x52000,
1846		.enable_mask = BIT(26),
1847		.hw.init = &(struct clk_init_data){
1848			.name = "gcc_pcie_1_slv_axi_clk",
1849			.ops = &clk_branch2_ops,
1850		},
1851	},
1852};
1853
1854static struct clk_branch gcc_pcie_1_slv_q2a_axi_clk = {
1855	.halt_reg = 0x8d010,
1856	.halt_check = BRANCH_HALT_VOTED,
1857	.clkr = {
1858		.enable_reg = 0x52000,
1859		.enable_mask = BIT(25),
1860		.hw.init = &(struct clk_init_data){
1861			.name = "gcc_pcie_1_slv_q2a_axi_clk",
1862			.ops = &clk_branch2_ops,
1863		},
1864	},
1865};
1866
1867static struct clk_branch gcc_pcie_throttle_core_clk = {
1868	.halt_reg = 0x90018,
1869	.halt_check = BRANCH_HALT_SKIP,
1870	.hwcg_reg = 0x90018,
1871	.hwcg_bit = 1,
1872	.clkr = {
1873		.enable_reg = 0x52000,
1874		.enable_mask = BIT(20),
1875		.hw.init = &(struct clk_init_data){
1876			.name = "gcc_pcie_throttle_core_clk",
1877			.ops = &clk_branch2_ops,
1878		},
1879	},
1880};
1881
1882static struct clk_branch gcc_pdm2_clk = {
1883	.halt_reg = 0x3300c,
1884	.halt_check = BRANCH_HALT,
1885	.clkr = {
1886		.enable_reg = 0x3300c,
1887		.enable_mask = BIT(0),
1888		.hw.init = &(struct clk_init_data){
1889			.name = "gcc_pdm2_clk",
1890			.parent_hws = (const struct clk_hw*[]){
1891				&gcc_pdm2_clk_src.clkr.hw,
1892			},
1893			.num_parents = 1,
1894			.flags = CLK_SET_RATE_PARENT,
1895			.ops = &clk_branch2_ops,
1896		},
1897	},
1898};
1899
1900static struct clk_branch gcc_pdm_ahb_clk = {
1901	.halt_reg = 0x33004,
1902	.halt_check = BRANCH_HALT_VOTED,
1903	.hwcg_reg = 0x33004,
1904	.hwcg_bit = 1,
1905	.clkr = {
1906		.enable_reg = 0x33004,
1907		.enable_mask = BIT(0),
1908		.hw.init = &(struct clk_init_data){
1909			.name = "gcc_pdm_ahb_clk",
1910			.ops = &clk_branch2_ops,
1911		},
1912	},
1913};
1914
1915static struct clk_branch gcc_pdm_xo4_clk = {
1916	.halt_reg = 0x33008,
1917	.halt_check = BRANCH_HALT,
1918	.clkr = {
1919		.enable_reg = 0x33008,
1920		.enable_mask = BIT(0),
1921		.hw.init = &(struct clk_init_data){
1922			.name = "gcc_pdm_xo4_clk",
1923			.ops = &clk_branch2_ops,
1924		},
1925	},
1926};
1927
1928static struct clk_branch gcc_qmip_camera_nrt_ahb_clk = {
1929	.halt_reg = 0x26008,
1930	.halt_check = BRANCH_HALT_VOTED,
1931	.hwcg_reg = 0x26008,
1932	.hwcg_bit = 1,
1933	.clkr = {
1934		.enable_reg = 0x26008,
1935		.enable_mask = BIT(0),
1936		.hw.init = &(struct clk_init_data){
1937			.name = "gcc_qmip_camera_nrt_ahb_clk",
1938			.ops = &clk_branch2_ops,
1939		},
1940	},
1941};
1942
1943static struct clk_branch gcc_qmip_camera_rt_ahb_clk = {
1944	.halt_reg = 0x2600c,
1945	.halt_check = BRANCH_HALT_VOTED,
1946	.hwcg_reg = 0x2600c,
1947	.hwcg_bit = 1,
1948	.clkr = {
1949		.enable_reg = 0x2600c,
1950		.enable_mask = BIT(0),
1951		.hw.init = &(struct clk_init_data){
1952			.name = "gcc_qmip_camera_rt_ahb_clk",
1953			.ops = &clk_branch2_ops,
1954		},
1955	},
1956};
1957
1958static struct clk_branch gcc_qmip_disp_ahb_clk = {
1959	.halt_reg = 0x27008,
1960	.halt_check = BRANCH_HALT_VOTED,
1961	.clkr = {
1962		.enable_reg = 0x27008,
1963		.enable_mask = BIT(0),
1964		.hw.init = &(struct clk_init_data){
1965			.name = "gcc_qmip_disp_ahb_clk",
1966			.ops = &clk_branch2_ops,
1967		},
1968	},
1969};
1970
1971static struct clk_branch gcc_qmip_video_vcodec_ahb_clk = {
1972	.halt_reg = 0x28008,
1973	.halt_check = BRANCH_HALT_VOTED,
1974	.hwcg_reg = 0x28008,
1975	.hwcg_bit = 1,
1976	.clkr = {
1977		.enable_reg = 0x28008,
1978		.enable_mask = BIT(0),
1979		.hw.init = &(struct clk_init_data){
1980			.name = "gcc_qmip_video_vcodec_ahb_clk",
1981			.ops = &clk_branch2_ops,
1982		},
1983	},
1984};
1985
1986static struct clk_branch gcc_qspi_cnoc_periph_ahb_clk = {
1987	.halt_reg = 0x4b004,
1988	.halt_check = BRANCH_HALT,
1989	.hwcg_reg = 0x4b004,
1990	.hwcg_bit = 1,
1991	.clkr = {
1992		.enable_reg = 0x4b004,
1993		.enable_mask = BIT(0),
1994		.hw.init = &(struct clk_init_data){
1995			.name = "gcc_qspi_cnoc_periph_ahb_clk",
1996			.ops = &clk_branch2_ops,
1997		},
1998	},
1999};
2000
2001static struct clk_branch gcc_qspi_core_clk = {
2002	.halt_reg = 0x4b008,
2003	.halt_check = BRANCH_HALT,
2004	.clkr = {
2005		.enable_reg = 0x4b008,
2006		.enable_mask = BIT(0),
2007		.hw.init = &(struct clk_init_data){
2008			.name = "gcc_qspi_core_clk",
2009			.parent_hws = (const struct clk_hw*[]){
2010				&gcc_qspi_core_clk_src.clkr.hw,
2011			},
2012			.num_parents = 1,
2013			.flags = CLK_SET_RATE_PARENT,
2014			.ops = &clk_branch2_ops,
2015		},
2016	},
2017};
2018
2019static struct clk_branch gcc_qupv3_wrap0_core_2x_clk = {
2020	.halt_reg = 0x23008,
2021	.halt_check = BRANCH_HALT_VOTED,
2022	.clkr = {
2023		.enable_reg = 0x52008,
2024		.enable_mask = BIT(9),
2025		.hw.init = &(struct clk_init_data){
2026			.name = "gcc_qupv3_wrap0_core_2x_clk",
2027			.ops = &clk_branch2_ops,
2028		},
2029	},
2030};
2031
2032static struct clk_branch gcc_qupv3_wrap0_core_clk = {
2033	.halt_reg = 0x23000,
2034	.halt_check = BRANCH_HALT_VOTED,
2035	.clkr = {
2036		.enable_reg = 0x52008,
2037		.enable_mask = BIT(8),
2038		.hw.init = &(struct clk_init_data){
2039			.name = "gcc_qupv3_wrap0_core_clk",
2040			.ops = &clk_branch2_ops,
2041		},
2042	},
2043};
2044
2045static struct clk_branch gcc_qupv3_wrap0_s0_clk = {
2046	.halt_reg = 0x1700c,
2047	.halt_check = BRANCH_HALT_VOTED,
2048	.clkr = {
2049		.enable_reg = 0x52008,
2050		.enable_mask = BIT(10),
2051		.hw.init = &(struct clk_init_data){
2052			.name = "gcc_qupv3_wrap0_s0_clk",
2053			.parent_hws = (const struct clk_hw*[]){
2054				&gcc_qupv3_wrap0_s0_clk_src.clkr.hw,
2055			},
2056			.num_parents = 1,
2057			.flags = CLK_SET_RATE_PARENT,
2058			.ops = &clk_branch2_ops,
2059		},
2060	},
2061};
2062
2063static struct clk_branch gcc_qupv3_wrap0_s1_clk = {
2064	.halt_reg = 0x1713c,
2065	.halt_check = BRANCH_HALT_VOTED,
2066	.clkr = {
2067		.enable_reg = 0x52008,
2068		.enable_mask = BIT(11),
2069		.hw.init = &(struct clk_init_data){
2070			.name = "gcc_qupv3_wrap0_s1_clk",
2071			.parent_hws = (const struct clk_hw*[]){
2072				&gcc_qupv3_wrap0_s1_clk_src.clkr.hw,
2073			},
2074			.num_parents = 1,
2075			.flags = CLK_SET_RATE_PARENT,
2076			.ops = &clk_branch2_ops,
2077		},
2078	},
2079};
2080
2081static struct clk_branch gcc_qupv3_wrap0_s2_clk = {
2082	.halt_reg = 0x1726c,
2083	.halt_check = BRANCH_HALT_VOTED,
2084	.clkr = {
2085		.enable_reg = 0x52008,
2086		.enable_mask = BIT(12),
2087		.hw.init = &(struct clk_init_data){
2088			.name = "gcc_qupv3_wrap0_s2_clk",
2089			.parent_hws = (const struct clk_hw*[]){
2090				&gcc_qupv3_wrap0_s2_clk_src.clkr.hw,
2091			},
2092			.num_parents = 1,
2093			.flags = CLK_SET_RATE_PARENT,
2094			.ops = &clk_branch2_ops,
2095		},
2096	},
2097};
2098
2099static struct clk_branch gcc_qupv3_wrap0_s3_clk = {
2100	.halt_reg = 0x1739c,
2101	.halt_check = BRANCH_HALT_VOTED,
2102	.clkr = {
2103		.enable_reg = 0x52008,
2104		.enable_mask = BIT(13),
2105		.hw.init = &(struct clk_init_data){
2106			.name = "gcc_qupv3_wrap0_s3_clk",
2107			.parent_hws = (const struct clk_hw*[]){
2108				&gcc_qupv3_wrap0_s3_clk_src.clkr.hw,
2109			},
2110			.num_parents = 1,
2111			.flags = CLK_SET_RATE_PARENT,
2112			.ops = &clk_branch2_ops,
2113		},
2114	},
2115};
2116
2117static struct clk_branch gcc_qupv3_wrap0_s4_clk = {
2118	.halt_reg = 0x174cc,
2119	.halt_check = BRANCH_HALT_VOTED,
2120	.clkr = {
2121		.enable_reg = 0x52008,
2122		.enable_mask = BIT(14),
2123		.hw.init = &(struct clk_init_data){
2124			.name = "gcc_qupv3_wrap0_s4_clk",
2125			.parent_hws = (const struct clk_hw*[]){
2126				&gcc_qupv3_wrap0_s4_clk_src.clkr.hw,
2127			},
2128			.num_parents = 1,
2129			.flags = CLK_SET_RATE_PARENT,
2130			.ops = &clk_branch2_ops,
2131		},
2132	},
2133};
2134
2135static struct clk_branch gcc_qupv3_wrap0_s5_clk = {
2136	.halt_reg = 0x175fc,
2137	.halt_check = BRANCH_HALT_VOTED,
2138	.clkr = {
2139		.enable_reg = 0x52008,
2140		.enable_mask = BIT(15),
2141		.hw.init = &(struct clk_init_data){
2142			.name = "gcc_qupv3_wrap0_s5_clk",
2143			.parent_hws = (const struct clk_hw*[]){
2144				&gcc_qupv3_wrap0_s5_clk_src.clkr.hw,
2145			},
2146			.num_parents = 1,
2147			.flags = CLK_SET_RATE_PARENT,
2148			.ops = &clk_branch2_ops,
2149		},
2150	},
2151};
2152
2153static struct clk_branch gcc_qupv3_wrap0_s6_clk = {
2154	.halt_reg = 0x1772c,
2155	.halt_check = BRANCH_HALT_VOTED,
2156	.clkr = {
2157		.enable_reg = 0x52008,
2158		.enable_mask = BIT(16),
2159		.hw.init = &(struct clk_init_data){
2160			.name = "gcc_qupv3_wrap0_s6_clk",
2161			.parent_hws = (const struct clk_hw*[]){
2162				&gcc_qupv3_wrap0_s6_clk_src.clkr.hw,
2163			},
2164			.num_parents = 1,
2165			.flags = CLK_SET_RATE_PARENT,
2166			.ops = &clk_branch2_ops,
2167		},
2168	},
2169};
2170
2171static struct clk_branch gcc_qupv3_wrap0_s7_clk = {
2172	.halt_reg = 0x1785c,
2173	.halt_check = BRANCH_HALT_VOTED,
2174	.clkr = {
2175		.enable_reg = 0x52008,
2176		.enable_mask = BIT(17),
2177		.hw.init = &(struct clk_init_data){
2178			.name = "gcc_qupv3_wrap0_s7_clk",
2179			.parent_hws = (const struct clk_hw*[]){
2180				&gcc_qupv3_wrap0_s7_clk_src.clkr.hw,
2181			},
2182			.num_parents = 1,
2183			.flags = CLK_SET_RATE_PARENT,
2184			.ops = &clk_branch2_ops,
2185		},
2186	},
2187};
2188
2189static struct clk_branch gcc_qupv3_wrap1_core_2x_clk = {
2190	.halt_reg = 0x23140,
2191	.halt_check = BRANCH_HALT_VOTED,
2192	.clkr = {
2193		.enable_reg = 0x52008,
2194		.enable_mask = BIT(18),
2195		.hw.init = &(struct clk_init_data){
2196			.name = "gcc_qupv3_wrap1_core_2x_clk",
2197			.ops = &clk_branch2_ops,
2198		},
2199	},
2200};
2201
2202static struct clk_branch gcc_qupv3_wrap1_core_clk = {
2203	.halt_reg = 0x23138,
2204	.halt_check = BRANCH_HALT_VOTED,
2205	.clkr = {
2206		.enable_reg = 0x52008,
2207		.enable_mask = BIT(19),
2208		.hw.init = &(struct clk_init_data){
2209			.name = "gcc_qupv3_wrap1_core_clk",
2210			.ops = &clk_branch2_ops,
2211		},
2212	},
2213};
2214
2215static struct clk_branch gcc_qupv3_wrap1_s0_clk = {
2216	.halt_reg = 0x1800c,
2217	.halt_check = BRANCH_HALT_VOTED,
2218	.clkr = {
2219		.enable_reg = 0x52008,
2220		.enable_mask = BIT(22),
2221		.hw.init = &(struct clk_init_data){
2222			.name = "gcc_qupv3_wrap1_s0_clk",
2223			.parent_hws = (const struct clk_hw*[]){
2224				&gcc_qupv3_wrap1_s0_clk_src.clkr.hw,
2225			},
2226			.num_parents = 1,
2227			.flags = CLK_SET_RATE_PARENT,
2228			.ops = &clk_branch2_ops,
2229		},
2230	},
2231};
2232
2233static struct clk_branch gcc_qupv3_wrap1_s1_clk = {
2234	.halt_reg = 0x1813c,
2235	.halt_check = BRANCH_HALT_VOTED,
2236	.clkr = {
2237		.enable_reg = 0x52008,
2238		.enable_mask = BIT(23),
2239		.hw.init = &(struct clk_init_data){
2240			.name = "gcc_qupv3_wrap1_s1_clk",
2241			.parent_hws = (const struct clk_hw*[]){
2242				&gcc_qupv3_wrap1_s1_clk_src.clkr.hw,
2243			},
2244			.num_parents = 1,
2245			.flags = CLK_SET_RATE_PARENT,
2246			.ops = &clk_branch2_ops,
2247		},
2248	},
2249};
2250
2251static struct clk_branch gcc_qupv3_wrap1_s2_clk = {
2252	.halt_reg = 0x1826c,
2253	.halt_check = BRANCH_HALT_VOTED,
2254	.clkr = {
2255		.enable_reg = 0x52008,
2256		.enable_mask = BIT(24),
2257		.hw.init = &(struct clk_init_data){
2258			.name = "gcc_qupv3_wrap1_s2_clk",
2259			.parent_hws = (const struct clk_hw*[]){
2260				&gcc_qupv3_wrap1_s2_clk_src.clkr.hw,
2261			},
2262			.num_parents = 1,
2263			.flags = CLK_SET_RATE_PARENT,
2264			.ops = &clk_branch2_ops,
2265		},
2266	},
2267};
2268
2269static struct clk_branch gcc_qupv3_wrap1_s3_clk = {
2270	.halt_reg = 0x1839c,
2271	.halt_check = BRANCH_HALT_VOTED,
2272	.clkr = {
2273		.enable_reg = 0x52008,
2274		.enable_mask = BIT(25),
2275		.hw.init = &(struct clk_init_data){
2276			.name = "gcc_qupv3_wrap1_s3_clk",
2277			.parent_hws = (const struct clk_hw*[]){
2278				&gcc_qupv3_wrap1_s3_clk_src.clkr.hw,
2279			},
2280			.num_parents = 1,
2281			.flags = CLK_SET_RATE_PARENT,
2282			.ops = &clk_branch2_ops,
2283		},
2284	},
2285};
2286
2287static struct clk_branch gcc_qupv3_wrap1_s4_clk = {
2288	.halt_reg = 0x184cc,
2289	.halt_check = BRANCH_HALT_VOTED,
2290	.clkr = {
2291		.enable_reg = 0x52008,
2292		.enable_mask = BIT(26),
2293		.hw.init = &(struct clk_init_data){
2294			.name = "gcc_qupv3_wrap1_s4_clk",
2295			.parent_hws = (const struct clk_hw*[]){
2296				&gcc_qupv3_wrap1_s4_clk_src.clkr.hw,
2297			},
2298			.num_parents = 1,
2299			.flags = CLK_SET_RATE_PARENT,
2300			.ops = &clk_branch2_ops,
2301		},
2302	},
2303};
2304
2305static struct clk_branch gcc_qupv3_wrap1_s5_clk = {
2306	.halt_reg = 0x185fc,
2307	.halt_check = BRANCH_HALT_VOTED,
2308	.clkr = {
2309		.enable_reg = 0x52008,
2310		.enable_mask = BIT(27),
2311		.hw.init = &(struct clk_init_data){
2312			.name = "gcc_qupv3_wrap1_s5_clk",
2313			.parent_hws = (const struct clk_hw*[]){
2314				&gcc_qupv3_wrap1_s5_clk_src.clkr.hw,
2315			},
2316			.num_parents = 1,
2317			.flags = CLK_SET_RATE_PARENT,
2318			.ops = &clk_branch2_ops,
2319		},
2320	},
2321};
2322
2323static struct clk_branch gcc_qupv3_wrap1_s6_clk = {
2324	.halt_reg = 0x1872c,
2325	.halt_check = BRANCH_HALT_VOTED,
2326	.clkr = {
2327		.enable_reg = 0x52000,
2328		.enable_mask = BIT(13),
2329		.hw.init = &(struct clk_init_data){
2330			.name = "gcc_qupv3_wrap1_s6_clk",
2331			.parent_hws = (const struct clk_hw*[]){
2332				&gcc_qupv3_wrap1_s6_clk_src.clkr.hw,
2333			},
2334			.num_parents = 1,
2335			.flags = CLK_SET_RATE_PARENT,
2336			.ops = &clk_branch2_ops,
2337		},
2338	},
2339};
2340
2341static struct clk_branch gcc_qupv3_wrap1_s7_clk = {
2342	.halt_reg = 0x1885c,
2343	.halt_check = BRANCH_HALT_VOTED,
2344	.clkr = {
2345		.enable_reg = 0x52000,
2346		.enable_mask = BIT(14),
2347		.hw.init = &(struct clk_init_data){
2348			.name = "gcc_qupv3_wrap1_s7_clk",
2349			.parent_hws = (const struct clk_hw*[]){
2350				&gcc_qupv3_wrap1_s7_clk_src.clkr.hw,
2351			},
2352			.num_parents = 1,
2353			.flags = CLK_SET_RATE_PARENT,
2354			.ops = &clk_branch2_ops,
2355		},
2356	},
2357};
2358
2359static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = {
2360	.halt_reg = 0x17004,
2361	.halt_check = BRANCH_HALT_VOTED,
2362	.hwcg_reg = 0x17004,
2363	.hwcg_bit = 1,
2364	.clkr = {
2365		.enable_reg = 0x52008,
2366		.enable_mask = BIT(6),
2367		.hw.init = &(struct clk_init_data){
2368			.name = "gcc_qupv3_wrap_0_m_ahb_clk",
2369			.ops = &clk_branch2_ops,
2370		},
2371	},
2372};
2373
2374static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = {
2375	.halt_reg = 0x17008,
2376	.halt_check = BRANCH_HALT_VOTED,
2377	.hwcg_reg = 0x17008,
2378	.hwcg_bit = 1,
2379	.clkr = {
2380		.enable_reg = 0x52008,
2381		.enable_mask = BIT(7),
2382		.hw.init = &(struct clk_init_data){
2383			.name = "gcc_qupv3_wrap_0_s_ahb_clk",
2384			.ops = &clk_branch2_ops,
2385		},
2386	},
2387};
2388
2389static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = {
2390	.halt_reg = 0x18004,
2391	.halt_check = BRANCH_HALT_VOTED,
2392	.hwcg_reg = 0x18004,
2393	.hwcg_bit = 1,
2394	.clkr = {
2395		.enable_reg = 0x52008,
2396		.enable_mask = BIT(20),
2397		.hw.init = &(struct clk_init_data){
2398			.name = "gcc_qupv3_wrap_1_m_ahb_clk",
2399			.ops = &clk_branch2_ops,
2400		},
2401	},
2402};
2403
2404static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = {
2405	.halt_reg = 0x18008,
2406	.halt_check = BRANCH_HALT_VOTED,
2407	.hwcg_reg = 0x18008,
2408	.hwcg_bit = 1,
2409	.clkr = {
2410		.enable_reg = 0x52008,
2411		.enable_mask = BIT(21),
2412		.hw.init = &(struct clk_init_data){
2413			.name = "gcc_qupv3_wrap_1_s_ahb_clk",
2414			.ops = &clk_branch2_ops,
2415		},
2416	},
2417};
2418
2419static struct clk_branch gcc_sdcc1_ahb_clk = {
2420	.halt_reg = 0x75004,
2421	.halt_check = BRANCH_HALT,
2422	.clkr = {
2423		.enable_reg = 0x75004,
2424		.enable_mask = BIT(0),
2425		.hw.init = &(struct clk_init_data){
2426			.name = "gcc_sdcc1_ahb_clk",
2427			.ops = &clk_branch2_ops,
2428		},
2429	},
2430};
2431
2432static struct clk_branch gcc_sdcc1_apps_clk = {
2433	.halt_reg = 0x75008,
2434	.halt_check = BRANCH_HALT,
2435	.clkr = {
2436		.enable_reg = 0x75008,
2437		.enable_mask = BIT(0),
2438		.hw.init = &(struct clk_init_data){
2439			.name = "gcc_sdcc1_apps_clk",
2440			.parent_hws = (const struct clk_hw*[]){
2441				&gcc_sdcc1_apps_clk_src.clkr.hw,
2442			},
2443			.num_parents = 1,
2444			.flags = CLK_SET_RATE_PARENT,
2445			.ops = &clk_branch2_ops,
2446		},
2447	},
2448};
2449
2450static struct clk_branch gcc_sdcc1_ice_core_clk = {
2451	.halt_reg = 0x75024,
2452	.halt_check = BRANCH_HALT_VOTED,
2453	.hwcg_reg = 0x75024,
2454	.hwcg_bit = 1,
2455	.clkr = {
2456		.enable_reg = 0x75024,
2457		.enable_mask = BIT(0),
2458		.hw.init = &(struct clk_init_data){
2459			.name = "gcc_sdcc1_ice_core_clk",
2460			.parent_hws = (const struct clk_hw*[]){
2461				&gcc_sdcc1_ice_core_clk_src.clkr.hw,
2462			},
2463			.num_parents = 1,
2464			.flags = CLK_SET_RATE_PARENT,
2465			.ops = &clk_branch2_ops,
2466		},
2467	},
2468};
2469
2470static struct clk_branch gcc_sdcc2_ahb_clk = {
2471	.halt_reg = 0x14008,
2472	.halt_check = BRANCH_HALT,
2473	.clkr = {
2474		.enable_reg = 0x14008,
2475		.enable_mask = BIT(0),
2476		.hw.init = &(struct clk_init_data){
2477			.name = "gcc_sdcc2_ahb_clk",
2478			.ops = &clk_branch2_ops,
2479		},
2480	},
2481};
2482
2483static struct clk_branch gcc_sdcc2_apps_clk = {
2484	.halt_reg = 0x14004,
2485	.halt_check = BRANCH_HALT,
2486	.clkr = {
2487		.enable_reg = 0x14004,
2488		.enable_mask = BIT(0),
2489		.hw.init = &(struct clk_init_data){
2490			.name = "gcc_sdcc2_apps_clk",
2491			.parent_hws = (const struct clk_hw*[]){
2492				&gcc_sdcc2_apps_clk_src.clkr.hw,
2493			},
2494			.num_parents = 1,
2495			.flags = CLK_SET_RATE_PARENT,
2496			.ops = &clk_branch2_ops,
2497		},
2498	},
2499};
2500
2501static struct clk_branch gcc_sdcc4_ahb_clk = {
2502	.halt_reg = 0x16008,
2503	.halt_check = BRANCH_HALT,
2504	.clkr = {
2505		.enable_reg = 0x16008,
2506		.enable_mask = BIT(0),
2507		.hw.init = &(struct clk_init_data){
2508			.name = "gcc_sdcc4_ahb_clk",
2509			.ops = &clk_branch2_ops,
2510		},
2511	},
2512};
2513
2514static struct clk_branch gcc_sdcc4_apps_clk = {
2515	.halt_reg = 0x16004,
2516	.halt_check = BRANCH_HALT,
2517	.clkr = {
2518		.enable_reg = 0x16004,
2519		.enable_mask = BIT(0),
2520		.hw.init = &(struct clk_init_data){
2521			.name = "gcc_sdcc4_apps_clk",
2522			.parent_hws = (const struct clk_hw*[]){
2523				&gcc_sdcc4_apps_clk_src.clkr.hw,
2524			},
2525			.num_parents = 1,
2526			.flags = CLK_SET_RATE_PARENT,
2527			.ops = &clk_branch2_ops,
2528		},
2529	},
2530};
2531
2532static struct clk_branch gcc_throttle_pcie_ahb_clk = {
2533	.halt_reg = 0x9001c,
2534	.halt_check = BRANCH_HALT,
2535	.clkr = {
2536		.enable_reg = 0x9001c,
2537		.enable_mask = BIT(0),
2538		.hw.init = &(struct clk_init_data){
2539			.name = "gcc_throttle_pcie_ahb_clk",
2540			.ops = &clk_branch2_ops,
2541		},
2542	},
2543};
2544
2545static struct clk_branch gcc_titan_nrt_throttle_core_clk = {
2546	.halt_reg = 0x26024,
2547	.halt_check = BRANCH_HALT_SKIP,
2548	.hwcg_reg = 0x26024,
2549	.hwcg_bit = 1,
2550	.clkr = {
2551		.enable_reg = 0x26024,
2552		.enable_mask = BIT(0),
2553		.hw.init = &(struct clk_init_data){
2554			.name = "gcc_titan_nrt_throttle_core_clk",
2555			.ops = &clk_branch2_ops,
2556		},
2557	},
2558};
2559
2560static struct clk_branch gcc_titan_rt_throttle_core_clk = {
2561	.halt_reg = 0x26018,
2562	.halt_check = BRANCH_HALT_SKIP,
2563	.hwcg_reg = 0x26018,
2564	.hwcg_bit = 1,
2565	.clkr = {
2566		.enable_reg = 0x26018,
2567		.enable_mask = BIT(0),
2568		.hw.init = &(struct clk_init_data){
2569			.name = "gcc_titan_rt_throttle_core_clk",
2570			.ops = &clk_branch2_ops,
2571		},
2572	},
2573};
2574
2575static struct clk_branch gcc_ufs_1_clkref_en = {
2576	.halt_reg = 0x8c000,
2577	.halt_check = BRANCH_HALT,
2578	.clkr = {
2579		.enable_reg = 0x8c000,
2580		.enable_mask = BIT(0),
2581		.hw.init = &(struct clk_init_data){
2582			.name = "gcc_ufs_1_clkref_en",
2583			.ops = &clk_branch2_ops,
2584		},
2585	},
2586};
2587
2588static struct clk_branch gcc_ufs_phy_ahb_clk = {
2589	.halt_reg = 0x77018,
2590	.halt_check = BRANCH_HALT_VOTED,
2591	.hwcg_reg = 0x77018,
2592	.hwcg_bit = 1,
2593	.clkr = {
2594		.enable_reg = 0x77018,
2595		.enable_mask = BIT(0),
2596		.hw.init = &(struct clk_init_data){
2597			.name = "gcc_ufs_phy_ahb_clk",
2598			.ops = &clk_branch2_ops,
2599		},
2600	},
2601};
2602
2603static struct clk_branch gcc_ufs_phy_axi_clk = {
2604	.halt_reg = 0x77010,
2605	.halt_check = BRANCH_HALT_VOTED,
2606	.hwcg_reg = 0x77010,
2607	.hwcg_bit = 1,
2608	.clkr = {
2609		.enable_reg = 0x77010,
2610		.enable_mask = BIT(0),
2611		.hw.init = &(struct clk_init_data){
2612			.name = "gcc_ufs_phy_axi_clk",
2613			.parent_hws = (const struct clk_hw*[]){
2614				&gcc_ufs_phy_axi_clk_src.clkr.hw,
2615			},
2616			.num_parents = 1,
2617			.flags = CLK_SET_RATE_PARENT,
2618			.ops = &clk_branch2_ops,
2619		},
2620	},
2621};
2622
2623static struct clk_branch gcc_ufs_phy_ice_core_clk = {
2624	.halt_reg = 0x77064,
2625	.halt_check = BRANCH_HALT_VOTED,
2626	.hwcg_reg = 0x77064,
2627	.hwcg_bit = 1,
2628	.clkr = {
2629		.enable_reg = 0x77064,
2630		.enable_mask = BIT(0),
2631		.hw.init = &(struct clk_init_data){
2632			.name = "gcc_ufs_phy_ice_core_clk",
2633			.parent_hws = (const struct clk_hw*[]){
2634				&gcc_ufs_phy_ice_core_clk_src.clkr.hw,
2635			},
2636			.num_parents = 1,
2637			.flags = CLK_SET_RATE_PARENT,
2638			.ops = &clk_branch2_ops,
2639		},
2640	},
2641};
2642
2643static struct clk_branch gcc_ufs_phy_phy_aux_clk = {
2644	.halt_reg = 0x7709c,
2645	.halt_check = BRANCH_HALT_VOTED,
2646	.hwcg_reg = 0x7709c,
2647	.hwcg_bit = 1,
2648	.clkr = {
2649		.enable_reg = 0x7709c,
2650		.enable_mask = BIT(0),
2651		.hw.init = &(struct clk_init_data){
2652			.name = "gcc_ufs_phy_phy_aux_clk",
2653			.parent_hws = (const struct clk_hw*[]){
2654				&gcc_ufs_phy_phy_aux_clk_src.clkr.hw,
2655			},
2656			.num_parents = 1,
2657			.flags = CLK_SET_RATE_PARENT,
2658			.ops = &clk_branch2_ops,
2659		},
2660	},
2661};
2662
2663static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = {
2664	.halt_reg = 0x77020,
2665	.halt_check = BRANCH_HALT_DELAY,
2666	.clkr = {
2667		.enable_reg = 0x77020,
2668		.enable_mask = BIT(0),
2669		.hw.init = &(struct clk_init_data){
2670			.name = "gcc_ufs_phy_rx_symbol_0_clk",
2671			.parent_hws = (const struct clk_hw*[]){
2672				&gcc_ufs_phy_rx_symbol_0_clk_src.clkr.hw,
2673			},
2674			.num_parents = 1,
2675			.flags = CLK_SET_RATE_PARENT,
2676			.ops = &clk_branch2_ops,
2677		},
2678	},
2679};
2680
2681static struct clk_branch gcc_ufs_phy_rx_symbol_1_clk = {
2682	.halt_reg = 0x770b8,
2683	.halt_check = BRANCH_HALT_DELAY,
2684	.clkr = {
2685		.enable_reg = 0x770b8,
2686		.enable_mask = BIT(0),
2687		.hw.init = &(struct clk_init_data){
2688			.name = "gcc_ufs_phy_rx_symbol_1_clk",
2689			.parent_hws = (const struct clk_hw*[]){
2690				&gcc_ufs_phy_rx_symbol_1_clk_src.clkr.hw,
2691			},
2692			.num_parents = 1,
2693			.flags = CLK_SET_RATE_PARENT,
2694			.ops = &clk_branch2_ops,
2695		},
2696	},
2697};
2698
2699static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = {
2700	.halt_reg = 0x7701c,
2701	.halt_check = BRANCH_HALT_DELAY,
2702	.clkr = {
2703		.enable_reg = 0x7701c,
2704		.enable_mask = BIT(0),
2705		.hw.init = &(struct clk_init_data){
2706			.name = "gcc_ufs_phy_tx_symbol_0_clk",
2707			.parent_hws = (const struct clk_hw*[]){
2708				&gcc_ufs_phy_tx_symbol_0_clk_src.clkr.hw,
2709			},
2710			.num_parents = 1,
2711			.flags = CLK_SET_RATE_PARENT,
2712			.ops = &clk_branch2_ops,
2713		},
2714	},
2715};
2716
2717static struct clk_branch gcc_ufs_phy_unipro_core_clk = {
2718	.halt_reg = 0x7705c,
2719	.halt_check = BRANCH_HALT_VOTED,
2720	.hwcg_reg = 0x7705c,
2721	.hwcg_bit = 1,
2722	.clkr = {
2723		.enable_reg = 0x7705c,
2724		.enable_mask = BIT(0),
2725		.hw.init = &(struct clk_init_data){
2726			.name = "gcc_ufs_phy_unipro_core_clk",
2727			.parent_hws = (const struct clk_hw*[]){
2728				&gcc_ufs_phy_unipro_core_clk_src.clkr.hw,
2729			},
2730			.num_parents = 1,
2731			.flags = CLK_SET_RATE_PARENT,
2732			.ops = &clk_branch2_ops,
2733		},
2734	},
2735};
2736
2737static struct clk_branch gcc_usb30_prim_master_clk = {
2738	.halt_reg = 0xf010,
2739	.halt_check = BRANCH_HALT,
2740	.clkr = {
2741		.enable_reg = 0xf010,
2742		.enable_mask = BIT(0),
2743		.hw.init = &(struct clk_init_data){
2744			.name = "gcc_usb30_prim_master_clk",
2745			.parent_hws = (const struct clk_hw*[]){
2746				&gcc_usb30_prim_master_clk_src.clkr.hw,
2747			},
2748			.num_parents = 1,
2749			.flags = CLK_SET_RATE_PARENT,
2750			.ops = &clk_branch2_ops,
2751		},
2752	},
2753};
2754
2755static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {
2756	.halt_reg = 0xf01c,
2757	.halt_check = BRANCH_HALT,
2758	.clkr = {
2759		.enable_reg = 0xf01c,
2760		.enable_mask = BIT(0),
2761		.hw.init = &(struct clk_init_data){
2762			.name = "gcc_usb30_prim_mock_utmi_clk",
2763			.parent_hws = (const struct clk_hw*[]) {
2764				&gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr.hw,
2765			},
2766			.num_parents = 1,
2767			.flags = CLK_SET_RATE_PARENT,
2768			.ops = &clk_branch2_ops,
2769		},
2770	},
2771};
2772
2773static struct clk_branch gcc_usb30_prim_sleep_clk = {
2774	.halt_reg = 0xf018,
2775	.halt_check = BRANCH_HALT,
2776	.clkr = {
2777		.enable_reg = 0xf018,
2778		.enable_mask = BIT(0),
2779		.hw.init = &(struct clk_init_data){
2780			.name = "gcc_usb30_prim_sleep_clk",
2781			.ops = &clk_branch2_ops,
2782		},
2783	},
2784};
2785
2786static struct clk_branch gcc_usb30_sec_master_clk = {
2787	.halt_reg = 0x9e010,
2788	.halt_check = BRANCH_HALT,
2789	.clkr = {
2790		.enable_reg = 0x9e010,
2791		.enable_mask = BIT(0),
2792		.hw.init = &(struct clk_init_data){
2793			.name = "gcc_usb30_sec_master_clk",
2794			.parent_hws = (const struct clk_hw*[]){
2795				&gcc_usb30_sec_master_clk_src.clkr.hw,
2796			},
2797			.num_parents = 1,
2798			.flags = CLK_SET_RATE_PARENT,
2799			.ops = &clk_branch2_ops,
2800		},
2801	},
2802};
2803
2804static struct clk_branch gcc_usb30_sec_mock_utmi_clk = {
2805	.halt_reg = 0x9e01c,
2806	.halt_check = BRANCH_HALT,
2807	.clkr = {
2808		.enable_reg = 0x9e01c,
2809		.enable_mask = BIT(0),
2810		.hw.init = &(struct clk_init_data){
2811			.name = "gcc_usb30_sec_mock_utmi_clk",
2812			.parent_hws = (const struct clk_hw*[]) {
2813				&gcc_usb30_sec_mock_utmi_postdiv_clk_src.clkr.hw,
2814			},
2815			.num_parents = 1,
2816			.flags = CLK_SET_RATE_PARENT,
2817			.ops = &clk_branch2_ops,
2818		},
2819	},
2820};
2821
2822static struct clk_branch gcc_usb30_sec_sleep_clk = {
2823	.halt_reg = 0x9e018,
2824	.halt_check = BRANCH_HALT,
2825	.clkr = {
2826		.enable_reg = 0x9e018,
2827		.enable_mask = BIT(0),
2828		.hw.init = &(struct clk_init_data){
2829			.name = "gcc_usb30_sec_sleep_clk",
2830			.ops = &clk_branch2_ops,
2831		},
2832	},
2833};
2834
2835static struct clk_branch gcc_usb3_prim_phy_aux_clk = {
2836	.halt_reg = 0xf054,
2837	.halt_check = BRANCH_HALT,
2838	.clkr = {
2839		.enable_reg = 0xf054,
2840		.enable_mask = BIT(0),
2841		.hw.init = &(struct clk_init_data){
2842			.name = "gcc_usb3_prim_phy_aux_clk",
2843			.parent_hws = (const struct clk_hw*[]){
2844				&gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
2845			},
2846			.num_parents = 1,
2847			.flags = CLK_SET_RATE_PARENT,
2848			.ops = &clk_branch2_ops,
2849		},
2850	},
2851};
2852
2853static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {
2854	.halt_reg = 0xf058,
2855	.halt_check = BRANCH_HALT,
2856	.clkr = {
2857		.enable_reg = 0xf058,
2858		.enable_mask = BIT(0),
2859		.hw.init = &(struct clk_init_data){
2860			.name = "gcc_usb3_prim_phy_com_aux_clk",
2861			.parent_hws = (const struct clk_hw*[]){
2862				&gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
2863			},
2864			.num_parents = 1,
2865			.flags = CLK_SET_RATE_PARENT,
2866			.ops = &clk_branch2_ops,
2867		},
2868	},
2869};
2870
2871static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {
2872	.halt_reg = 0xf05c,
2873	.halt_check = BRANCH_HALT_DELAY,
2874	.hwcg_reg = 0xf05c,
2875	.hwcg_bit = 1,
2876	.clkr = {
2877		.enable_reg = 0xf05c,
2878		.enable_mask = BIT(0),
2879		.hw.init = &(struct clk_init_data){
2880			.name = "gcc_usb3_prim_phy_pipe_clk",
2881			.parent_hws = (const struct clk_hw*[]){
2882				&gcc_usb3_prim_phy_pipe_clk_src.clkr.hw,
2883			},
2884			.num_parents = 1,
2885			.flags = CLK_SET_RATE_PARENT,
2886			.ops = &clk_branch2_ops,
2887		},
2888	},
2889};
2890
2891static struct clk_branch gcc_cfg_noc_lpass_clk = {
2892	.halt_reg = 0x47020,
2893	.halt_check = BRANCH_HALT,
2894	.clkr = {
2895		.enable_reg = 0x47020,
2896		.enable_mask = BIT(0),
2897		.hw.init = &(struct clk_init_data){
2898			.name = "gcc_cfg_noc_lpass_clk",
2899			.ops = &clk_branch2_aon_ops,
2900		},
2901	},
2902};
2903static struct clk_branch gcc_mss_cfg_ahb_clk = {
2904	.halt_reg = 0x8a000,
2905	.halt_check = BRANCH_HALT,
2906	.clkr = {
2907		.enable_reg = 0x8a000,
2908		.enable_mask = BIT(0),
2909		.hw.init = &(struct clk_init_data){
2910			.name = "gcc_mss_cfg_ahb_clk",
2911			.ops = &clk_branch2_ops,
2912		},
2913	},
2914};
2915
2916static struct clk_branch gcc_mss_offline_axi_clk = {
2917	.halt_reg = 0x8a004,
2918	.halt_check = BRANCH_HALT_DELAY,
2919	.clkr = {
2920		.enable_reg = 0x8a004,
2921		.enable_mask = BIT(0),
2922		.hw.init = &(struct clk_init_data){
2923			.name = "gcc_mss_offline_axi_clk",
2924			.ops = &clk_branch2_ops,
2925		},
2926	},
2927};
2928
2929static struct clk_branch gcc_mss_snoc_axi_clk = {
2930	.halt_reg = 0x8a154,
2931	.halt_check = BRANCH_HALT_DELAY,
2932	.clkr = {
2933		.enable_reg = 0x8a154,
2934		.enable_mask = BIT(0),
2935		.hw.init = &(struct clk_init_data){
2936			.name = "gcc_mss_snoc_axi_clk",
2937			.ops = &clk_branch2_ops,
2938		},
2939	},
2940};
2941
2942static struct clk_branch gcc_mss_q6_memnoc_axi_clk = {
2943	.halt_reg = 0x8a158,
2944	.halt_check = BRANCH_HALT,
2945	.clkr = {
2946		.enable_reg = 0x8a158,
2947		.enable_mask = BIT(0),
2948		.hw.init = &(struct clk_init_data){
2949			.name = "gcc_mss_q6_memnoc_axi_clk",
2950			.ops = &clk_branch2_ops,
2951		},
2952	},
2953};
2954
2955static struct clk_regmap_mux gcc_mss_q6ss_boot_clk_src = {
2956	.reg = 0x8a2a4,
2957	.shift = 0,
2958	.width = 1,
2959	.parent_map = gcc_parent_map_15,
2960	.clkr = {
2961		.hw.init = &(struct clk_init_data){
2962			.name = "gcc_mss_q6ss_boot_clk_src",
2963			.parent_data = gcc_parent_data_15,
2964			.num_parents = ARRAY_SIZE(gcc_parent_data_15),
2965			.ops = &clk_regmap_mux_closest_ops,
2966		},
2967	},
2968};
2969
2970static struct clk_branch gcc_usb3_sec_phy_aux_clk = {
2971	.halt_reg = 0x9e054,
2972	.halt_check = BRANCH_HALT,
2973	.clkr = {
2974		.enable_reg = 0x9e054,
2975		.enable_mask = BIT(0),
2976		.hw.init = &(struct clk_init_data){
2977			.name = "gcc_usb3_sec_phy_aux_clk",
2978			.parent_hws = (const struct clk_hw*[]){
2979				&gcc_usb3_sec_phy_aux_clk_src.clkr.hw,
2980			},
2981			.num_parents = 1,
2982			.flags = CLK_SET_RATE_PARENT,
2983			.ops = &clk_branch2_ops,
2984		},
2985	},
2986};
2987
2988static struct clk_branch gcc_usb3_sec_phy_com_aux_clk = {
2989	.halt_reg = 0x9e058,
2990	.halt_check = BRANCH_HALT,
2991	.clkr = {
2992		.enable_reg = 0x9e058,
2993		.enable_mask = BIT(0),
2994		.hw.init = &(struct clk_init_data){
2995			.name = "gcc_usb3_sec_phy_com_aux_clk",
2996			.parent_hws = (const struct clk_hw*[]){
2997				&gcc_usb3_sec_phy_aux_clk_src.clkr.hw,
2998			},
2999			.num_parents = 1,
3000			.flags = CLK_SET_RATE_PARENT,
3001			.ops = &clk_branch2_ops,
3002		},
3003	},
3004};
3005
3006static struct clk_branch gcc_usb3_sec_phy_pipe_clk = {
3007	.halt_reg = 0x9e05c,
3008	.halt_check = BRANCH_HALT_SKIP,
3009	.hwcg_reg = 0x9e05c,
3010	.hwcg_bit = 1,
3011	.clkr = {
3012		.enable_reg = 0x9e05c,
3013		.enable_mask = BIT(0),
3014		.hw.init = &(struct clk_init_data){
3015			.name = "gcc_usb3_sec_phy_pipe_clk",
3016			.parent_hws = (const struct clk_hw*[]){
3017				&gcc_usb3_sec_phy_pipe_clk_src.clkr.hw,
3018			},
3019			.num_parents = 1,
3020			.flags = CLK_SET_RATE_PARENT,
3021			.ops = &clk_branch2_ops,
3022		},
3023	},
3024};
3025
3026static struct clk_branch gcc_video_axi0_clk = {
3027	.halt_reg = 0x2800c,
3028	.halt_check = BRANCH_HALT_SKIP,
3029	.hwcg_reg = 0x2800c,
3030	.hwcg_bit = 1,
3031	.clkr = {
3032		.enable_reg = 0x2800c,
3033		.enable_mask = BIT(0),
3034		.hw.init = &(struct clk_init_data){
3035			.name = "gcc_video_axi0_clk",
3036			.ops = &clk_branch2_ops,
3037		},
3038	},
3039};
3040
3041static struct clk_branch gcc_video_mvp_throttle_core_clk = {
3042	.halt_reg = 0x28010,
3043	.halt_check = BRANCH_HALT_SKIP,
3044	.hwcg_reg = 0x28010,
3045	.hwcg_bit = 1,
3046	.clkr = {
3047		.enable_reg = 0x28010,
3048		.enable_mask = BIT(0),
3049		.hw.init = &(struct clk_init_data){
3050			.name = "gcc_video_mvp_throttle_core_clk",
3051			.ops = &clk_branch2_ops,
3052		},
3053	},
3054};
3055
3056static struct clk_branch gcc_wpss_ahb_clk = {
3057	.halt_reg = 0x9d154,
3058	.halt_check = BRANCH_HALT,
3059	.clkr = {
3060		.enable_reg = 0x9d154,
3061		.enable_mask = BIT(0),
3062		.hw.init = &(struct clk_init_data){
3063			.name = "gcc_wpss_ahb_clk",
3064			.ops = &clk_branch2_ops,
3065		},
3066	},
3067};
3068
3069static struct clk_branch gcc_wpss_ahb_bdg_mst_clk = {
3070	.halt_reg = 0x9d158,
3071	.halt_check = BRANCH_HALT,
3072	.clkr = {
3073		.enable_reg = 0x9d158,
3074		.enable_mask = BIT(0),
3075		.hw.init = &(struct clk_init_data){
3076			.name = "gcc_wpss_ahb_bdg_mst_clk",
3077			.ops = &clk_branch2_ops,
3078		},
3079	},
3080};
3081
3082static struct clk_branch gcc_wpss_rscp_clk = {
3083	.halt_reg = 0x9d16c,
3084	.halt_check = BRANCH_HALT,
3085	.clkr = {
3086		.enable_reg = 0x9d16c,
3087		.enable_mask = BIT(0),
3088		.hw.init = &(struct clk_init_data){
3089			.name = "gcc_wpss_rscp_clk",
3090			.ops = &clk_branch2_ops,
3091		},
3092	},
3093};
3094
3095static struct gdsc gcc_pcie_0_gdsc = {
3096	.gdscr = 0x6b004,
3097	.pd = {
3098		.name = "gcc_pcie_0_gdsc",
3099	},
3100	.pwrsts = PWRSTS_OFF_ON,
3101	.flags = VOTABLE,
3102};
3103
3104static struct gdsc gcc_pcie_1_gdsc = {
3105	.gdscr = 0x8d004,
3106	.pd = {
3107		.name = "gcc_pcie_1_gdsc",
3108	},
3109	.pwrsts = PWRSTS_RET_ON,
3110	.flags = VOTABLE,
3111};
3112
3113static struct gdsc gcc_ufs_phy_gdsc = {
3114	.gdscr = 0x77004,
3115	.pd = {
3116		.name = "gcc_ufs_phy_gdsc",
3117	},
3118	.pwrsts = PWRSTS_OFF_ON,
3119	.flags = VOTABLE,
3120};
3121
3122static struct gdsc gcc_usb30_prim_gdsc = {
3123	.gdscr = 0xf004,
3124	.pd = {
3125		.name = "gcc_usb30_prim_gdsc",
3126	},
3127	.pwrsts = PWRSTS_RET_ON,
3128	.flags = VOTABLE,
3129};
3130
3131static struct gdsc gcc_usb30_sec_gdsc = {
3132	.gdscr = 0x9e004,
3133	.pd = {
3134		.name = "gcc_usb30_sec_gdsc",
3135	},
3136	.pwrsts = PWRSTS_RET_ON,
3137	.flags = VOTABLE,
3138};
3139
3140static struct gdsc hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc = {
3141	.gdscr = 0x7d050,
3142	.pd = {
3143		.name = "hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc",
3144	},
3145	.pwrsts = PWRSTS_OFF_ON,
3146	.flags = VOTABLE,
3147};
3148
3149static struct gdsc hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc = {
3150	.gdscr = 0x7d058,
3151	.pd = {
3152		.name = "hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc",
3153	},
3154	.pwrsts = PWRSTS_OFF_ON,
3155	.flags = VOTABLE,
3156};
3157
3158static struct gdsc hlos1_vote_mmnoc_mmu_tbu_sf0_gdsc = {
3159	.gdscr = 0x7d054,
3160	.pd = {
3161		.name = "hlos1_vote_mmnoc_mmu_tbu_sf0_gdsc",
3162	},
3163	.pwrsts = PWRSTS_OFF_ON,
3164	.flags = VOTABLE,
3165};
3166
3167static struct gdsc hlos1_vote_turing_mmu_tbu0_gdsc = {
3168	.gdscr = 0x7d05c,
3169	.pd = {
3170		.name = "hlos1_vote_turing_mmu_tbu0_gdsc",
3171	},
3172	.pwrsts = PWRSTS_OFF_ON,
3173	.flags = VOTABLE,
3174};
3175
3176static struct gdsc hlos1_vote_turing_mmu_tbu1_gdsc = {
3177	.gdscr = 0x7d060,
3178	.pd = {
3179		.name = "hlos1_vote_turing_mmu_tbu1_gdsc",
3180	},
3181	.pwrsts = PWRSTS_OFF_ON,
3182	.flags = VOTABLE,
3183};
3184
3185static struct clk_regmap *gcc_sc7280_clocks[] = {
3186	[GCC_AGGRE_NOC_PCIE_0_AXI_CLK] = &gcc_aggre_noc_pcie_0_axi_clk.clkr,
3187	[GCC_AGGRE_NOC_PCIE_1_AXI_CLK] = &gcc_aggre_noc_pcie_1_axi_clk.clkr,
3188	[GCC_AGGRE_UFS_PHY_AXI_CLK] = &gcc_aggre_ufs_phy_axi_clk.clkr,
3189	[GCC_AGGRE_USB3_PRIM_AXI_CLK] = &gcc_aggre_usb3_prim_axi_clk.clkr,
3190	[GCC_AGGRE_USB3_SEC_AXI_CLK] = &gcc_aggre_usb3_sec_axi_clk.clkr,
3191	[GCC_CAMERA_HF_AXI_CLK] = &gcc_camera_hf_axi_clk.clkr,
3192	[GCC_CAMERA_SF_AXI_CLK] = &gcc_camera_sf_axi_clk.clkr,
3193	[GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
3194	[GCC_CFG_NOC_USB3_SEC_AXI_CLK] = &gcc_cfg_noc_usb3_sec_axi_clk.clkr,
3195	[GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr,
3196	[GCC_DDRSS_PCIE_SF_CLK] = &gcc_ddrss_pcie_sf_clk.clkr,
3197	[GCC_DISP_GPLL0_CLK_SRC] = &gcc_disp_gpll0_clk_src.clkr,
3198	[GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr,
3199	[GCC_DISP_SF_AXI_CLK] = &gcc_disp_sf_axi_clk.clkr,
3200	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
3201	[GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
3202	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
3203	[GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
3204	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
3205	[GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
3206	[GCC_GPLL0] = &gcc_gpll0.clkr,
3207	[GCC_GPLL0_OUT_EVEN] = &gcc_gpll0_out_even.clkr,
3208	[GCC_GPLL0_OUT_ODD] = &gcc_gpll0_out_odd.clkr,
3209	[GCC_GPLL1] = &gcc_gpll1.clkr,
3210	[GCC_GPLL10] = &gcc_gpll10.clkr,
3211	[GCC_GPLL4] = &gcc_gpll4.clkr,
3212	[GCC_GPLL9] = &gcc_gpll9.clkr,
3213	[GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr,
3214	[GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr,
3215	[GCC_GPU_IREF_EN] = &gcc_gpu_iref_en.clkr,
3216	[GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,
3217	[GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,
3218	[GCC_PCIE0_PHY_RCHNG_CLK] = &gcc_pcie0_phy_rchng_clk.clkr,
3219	[GCC_PCIE1_PHY_RCHNG_CLK] = &gcc_pcie1_phy_rchng_clk.clkr,
3220	[GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,
3221	[GCC_PCIE_0_AUX_CLK_SRC] = &gcc_pcie_0_aux_clk_src.clkr,
3222	[GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr,
3223	[GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr,
3224	[GCC_PCIE_0_PHY_RCHNG_CLK_SRC] = &gcc_pcie_0_phy_rchng_clk_src.clkr,
3225	[GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,
3226	[GCC_PCIE_0_PIPE_CLK_SRC] = &gcc_pcie_0_pipe_clk_src.clkr,
3227	[GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr,
3228	[GCC_PCIE_0_SLV_Q2A_AXI_CLK] = &gcc_pcie_0_slv_q2a_axi_clk.clkr,
3229	[GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr,
3230	[GCC_PCIE_1_AUX_CLK_SRC] = &gcc_pcie_1_aux_clk_src.clkr,
3231	[GCC_PCIE_1_CFG_AHB_CLK] = &gcc_pcie_1_cfg_ahb_clk.clkr,
3232	[GCC_PCIE_1_MSTR_AXI_CLK] = &gcc_pcie_1_mstr_axi_clk.clkr,
3233	[GCC_PCIE_1_PHY_RCHNG_CLK_SRC] = &gcc_pcie_1_phy_rchng_clk_src.clkr,
3234	[GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr,
3235	[GCC_PCIE_1_PIPE_CLK_SRC] = &gcc_pcie_1_pipe_clk_src.clkr,
3236	[GCC_PCIE_1_SLV_AXI_CLK] = &gcc_pcie_1_slv_axi_clk.clkr,
3237	[GCC_PCIE_1_SLV_Q2A_AXI_CLK] = &gcc_pcie_1_slv_q2a_axi_clk.clkr,
3238	[GCC_PCIE_THROTTLE_CORE_CLK] = &gcc_pcie_throttle_core_clk.clkr,
3239	[GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
3240	[GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
3241	[GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
3242	[GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
3243	[GCC_QMIP_CAMERA_NRT_AHB_CLK] = &gcc_qmip_camera_nrt_ahb_clk.clkr,
3244	[GCC_QMIP_CAMERA_RT_AHB_CLK] = &gcc_qmip_camera_rt_ahb_clk.clkr,
3245	[GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr,
3246	[GCC_QMIP_VIDEO_VCODEC_AHB_CLK] = &gcc_qmip_video_vcodec_ahb_clk.clkr,
3247	[GCC_QSPI_CNOC_PERIPH_AHB_CLK] = &gcc_qspi_cnoc_periph_ahb_clk.clkr,
3248	[GCC_QSPI_CORE_CLK] = &gcc_qspi_core_clk.clkr,
3249	[GCC_QSPI_CORE_CLK_SRC] = &gcc_qspi_core_clk_src.clkr,
3250	[GCC_QUPV3_WRAP0_CORE_2X_CLK] = &gcc_qupv3_wrap0_core_2x_clk.clkr,
3251	[GCC_QUPV3_WRAP0_CORE_CLK] = &gcc_qupv3_wrap0_core_clk.clkr,
3252	[GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr,
3253	[GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr,
3254	[GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr,
3255	[GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr,
3256	[GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr,
3257	[GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr,
3258	[GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr,
3259	[GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr,
3260	[GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr,
3261	[GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr,
3262	[GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr,
3263	[GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr,
3264	[GCC_QUPV3_WRAP0_S6_CLK] = &gcc_qupv3_wrap0_s6_clk.clkr,
3265	[GCC_QUPV3_WRAP0_S6_CLK_SRC] = &gcc_qupv3_wrap0_s6_clk_src.clkr,
3266	[GCC_QUPV3_WRAP0_S7_CLK] = &gcc_qupv3_wrap0_s7_clk.clkr,
3267	[GCC_QUPV3_WRAP0_S7_CLK_SRC] = &gcc_qupv3_wrap0_s7_clk_src.clkr,
3268	[GCC_QUPV3_WRAP1_CORE_2X_CLK] = &gcc_qupv3_wrap1_core_2x_clk.clkr,
3269	[GCC_QUPV3_WRAP1_CORE_CLK] = &gcc_qupv3_wrap1_core_clk.clkr,
3270	[GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr,
3271	[GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr,
3272	[GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr,
3273	[GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr,
3274	[GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr,
3275	[GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr,
3276	[GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr,
3277	[GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr,
3278	[GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr,
3279	[GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr,
3280	[GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr,
3281	[GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr,
3282	[GCC_QUPV3_WRAP1_S6_CLK] = &gcc_qupv3_wrap1_s6_clk.clkr,
3283	[GCC_QUPV3_WRAP1_S6_CLK_SRC] = &gcc_qupv3_wrap1_s6_clk_src.clkr,
3284	[GCC_QUPV3_WRAP1_S7_CLK] = &gcc_qupv3_wrap1_s7_clk.clkr,
3285	[GCC_QUPV3_WRAP1_S7_CLK_SRC] = &gcc_qupv3_wrap1_s7_clk_src.clkr,
3286	[GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr,
3287	[GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr,
3288	[GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr,
3289	[GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr,
3290	[GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
3291	[GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
3292	[GCC_SDCC1_APPS_CLK_SRC] = &gcc_sdcc1_apps_clk_src.clkr,
3293	[GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
3294	[GCC_SDCC1_ICE_CORE_CLK_SRC] = &gcc_sdcc1_ice_core_clk_src.clkr,
3295	[GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
3296	[GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
3297	[GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr,
3298	[GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr,
3299	[GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr,
3300	[GCC_SDCC4_APPS_CLK_SRC] = &gcc_sdcc4_apps_clk_src.clkr,
3301	[GCC_THROTTLE_PCIE_AHB_CLK] = &gcc_throttle_pcie_ahb_clk.clkr,
3302	[GCC_TITAN_NRT_THROTTLE_CORE_CLK] =
3303		&gcc_titan_nrt_throttle_core_clk.clkr,
3304	[GCC_TITAN_RT_THROTTLE_CORE_CLK] = &gcc_titan_rt_throttle_core_clk.clkr,
3305	[GCC_UFS_1_CLKREF_EN] = &gcc_ufs_1_clkref_en.clkr,
3306	[GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr,
3307	[GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr,
3308	[GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr,
3309	[GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr,
3310	[GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr,
3311	[GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr,
3312	[GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr,
3313	[GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr,
3314	[GCC_UFS_PHY_RX_SYMBOL_0_CLK_SRC] =
3315		&gcc_ufs_phy_rx_symbol_0_clk_src.clkr,
3316	[GCC_UFS_PHY_RX_SYMBOL_1_CLK] = &gcc_ufs_phy_rx_symbol_1_clk.clkr,
3317	[GCC_UFS_PHY_RX_SYMBOL_1_CLK_SRC] =
3318		&gcc_ufs_phy_rx_symbol_1_clk_src.clkr,
3319	[GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr,
3320	[GCC_UFS_PHY_TX_SYMBOL_0_CLK_SRC] =
3321		&gcc_ufs_phy_tx_symbol_0_clk_src.clkr,
3322	[GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr,
3323	[GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] =
3324		&gcc_ufs_phy_unipro_core_clk_src.clkr,
3325	[GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,
3326	[GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,
3327	[GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,
3328	[GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] =
3329		&gcc_usb30_prim_mock_utmi_clk_src.clkr,
3330	[GCC_USB30_PRIM_MOCK_UTMI_POSTDIV_CLK_SRC] =
3331		&gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr,
3332	[GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,
3333	[GCC_USB30_SEC_MASTER_CLK] = &gcc_usb30_sec_master_clk.clkr,
3334	[GCC_USB30_SEC_MASTER_CLK_SRC] = &gcc_usb30_sec_master_clk_src.clkr,
3335	[GCC_USB30_SEC_MOCK_UTMI_CLK] = &gcc_usb30_sec_mock_utmi_clk.clkr,
3336	[GCC_USB30_SEC_MOCK_UTMI_CLK_SRC] =
3337			&gcc_usb30_sec_mock_utmi_clk_src.clkr,
3338	[GCC_USB30_SEC_MOCK_UTMI_POSTDIV_CLK_SRC] =
3339			&gcc_usb30_sec_mock_utmi_postdiv_clk_src.clkr,
3340	[GCC_USB30_SEC_SLEEP_CLK] = &gcc_usb30_sec_sleep_clk.clkr,
3341	[GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr,
3342	[GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,
3343	[GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,
3344	[GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,
3345	[GCC_USB3_PRIM_PHY_PIPE_CLK_SRC] = &gcc_usb3_prim_phy_pipe_clk_src.clkr,
3346	[GCC_USB3_SEC_PHY_AUX_CLK] = &gcc_usb3_sec_phy_aux_clk.clkr,
3347	[GCC_USB3_SEC_PHY_AUX_CLK_SRC] = &gcc_usb3_sec_phy_aux_clk_src.clkr,
3348	[GCC_USB3_SEC_PHY_COM_AUX_CLK] = &gcc_usb3_sec_phy_com_aux_clk.clkr,
3349	[GCC_USB3_SEC_PHY_PIPE_CLK] = &gcc_usb3_sec_phy_pipe_clk.clkr,
3350	[GCC_USB3_SEC_PHY_PIPE_CLK_SRC] = &gcc_usb3_sec_phy_pipe_clk_src.clkr,
3351	[GCC_VIDEO_AXI0_CLK] = &gcc_video_axi0_clk.clkr,
3352	[GCC_VIDEO_MVP_THROTTLE_CORE_CLK] =
3353			&gcc_video_mvp_throttle_core_clk.clkr,
3354	[GCC_CFG_NOC_LPASS_CLK] = &gcc_cfg_noc_lpass_clk.clkr,
3355	[GCC_MSS_GPLL0_MAIN_DIV_CLK_SRC] = &gcc_mss_gpll0_main_div_clk_src.clkr,
3356	[GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,
3357	[GCC_MSS_OFFLINE_AXI_CLK] = &gcc_mss_offline_axi_clk.clkr,
3358	[GCC_MSS_SNOC_AXI_CLK] = &gcc_mss_snoc_axi_clk.clkr,
3359	[GCC_MSS_Q6_MEMNOC_AXI_CLK] = &gcc_mss_q6_memnoc_axi_clk.clkr,
3360	[GCC_MSS_Q6SS_BOOT_CLK_SRC] = &gcc_mss_q6ss_boot_clk_src.clkr,
3361	[GCC_AGGRE_NOC_PCIE_TBU_CLK] = &gcc_aggre_noc_pcie_tbu_clk.clkr,
3362	[GCC_AGGRE_NOC_PCIE_CENTER_SF_AXI_CLK] =
3363				&gcc_aggre_noc_pcie_center_sf_axi_clk.clkr,
3364	[GCC_PCIE_CLKREF_EN] = &gcc_pcie_clkref_en.clkr,
3365	[GCC_EDP_CLKREF_EN] = &gcc_edp_clkref_en.clkr,
3366	[GCC_SEC_CTRL_CLK_SRC] = &gcc_sec_ctrl_clk_src.clkr,
3367	[GCC_WPSS_AHB_CLK] = &gcc_wpss_ahb_clk.clkr,
3368	[GCC_WPSS_AHB_BDG_MST_CLK] = &gcc_wpss_ahb_bdg_mst_clk.clkr,
3369	[GCC_WPSS_RSCP_CLK] = &gcc_wpss_rscp_clk.clkr,
3370};
3371
3372static struct gdsc *gcc_sc7280_gdscs[] = {
3373	[GCC_PCIE_0_GDSC] = &gcc_pcie_0_gdsc,
3374	[GCC_PCIE_1_GDSC] = &gcc_pcie_1_gdsc,
3375	[GCC_UFS_PHY_GDSC] = &gcc_ufs_phy_gdsc,
3376	[GCC_USB30_PRIM_GDSC] = &gcc_usb30_prim_gdsc,
3377	[GCC_USB30_SEC_GDSC] = &gcc_usb30_sec_gdsc,
3378	[HLOS1_VOTE_MMNOC_MMU_TBU_HF0_GDSC] = &hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc,
3379	[HLOS1_VOTE_MMNOC_MMU_TBU_HF1_GDSC] = &hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc,
3380	[HLOS1_VOTE_MMNOC_MMU_TBU_SF0_GDSC] = &hlos1_vote_mmnoc_mmu_tbu_sf0_gdsc,
3381	[HLOS1_VOTE_TURING_MMU_TBU0_GDSC] = &hlos1_vote_turing_mmu_tbu0_gdsc,
3382	[HLOS1_VOTE_TURING_MMU_TBU1_GDSC] = &hlos1_vote_turing_mmu_tbu1_gdsc,
3383};
3384
3385static const struct qcom_reset_map gcc_sc7280_resets[] = {
3386	[GCC_PCIE_0_BCR] = { 0x6b000 },
3387	[GCC_PCIE_0_PHY_BCR] = { 0x6c01c },
3388	[GCC_PCIE_1_BCR] = { 0x8d000 },
3389	[GCC_PCIE_1_PHY_BCR] = { 0x8e01c },
3390	[GCC_QUSB2PHY_PRIM_BCR] = { 0x12000 },
3391	[GCC_QUSB2PHY_SEC_BCR] = { 0x12004 },
3392	[GCC_SDCC1_BCR] = { 0x75000 },
3393	[GCC_SDCC2_BCR] = { 0x14000 },
3394	[GCC_SDCC4_BCR] = { 0x16000 },
3395	[GCC_UFS_PHY_BCR] = { 0x77000 },
3396	[GCC_USB30_PRIM_BCR] = { 0xf000 },
3397	[GCC_USB30_SEC_BCR] = { 0x9e000 },
3398	[GCC_USB3_DP_PHY_PRIM_BCR] = { 0x50008 },
3399	[GCC_USB3_PHY_PRIM_BCR] = { 0x50000 },
3400	[GCC_USB3PHY_PHY_PRIM_BCR] = { 0x50004 },
3401	[GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x6a000 },
3402};
3403
3404static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = {
3405	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src),
3406	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src),
3407	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src),
3408	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src),
3409	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src),
3410	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s5_clk_src),
3411	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s6_clk_src),
3412	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s7_clk_src),
3413	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s0_clk_src),
3414	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s1_clk_src),
3415	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s2_clk_src),
3416	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s3_clk_src),
3417	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s4_clk_src),
3418	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s5_clk_src),
3419	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s6_clk_src),
3420	DEFINE_RCG_DFS(gcc_qupv3_wrap1_s7_clk_src),
3421};
3422
3423static const struct regmap_config gcc_sc7280_regmap_config = {
3424	.reg_bits = 32,
3425	.reg_stride = 4,
3426	.val_bits = 32,
3427	.max_register = 0x9f128,
3428	.fast_io = true,
3429};
3430
3431static const struct qcom_cc_desc gcc_sc7280_desc = {
3432	.config = &gcc_sc7280_regmap_config,
3433	.clks = gcc_sc7280_clocks,
3434	.num_clks = ARRAY_SIZE(gcc_sc7280_clocks),
3435	.resets = gcc_sc7280_resets,
3436	.num_resets = ARRAY_SIZE(gcc_sc7280_resets),
3437	.gdscs = gcc_sc7280_gdscs,
3438	.num_gdscs = ARRAY_SIZE(gcc_sc7280_gdscs),
3439};
3440
3441static const struct of_device_id gcc_sc7280_match_table[] = {
3442	{ .compatible = "qcom,gcc-sc7280" },
3443	{ }
3444};
3445MODULE_DEVICE_TABLE(of, gcc_sc7280_match_table);
3446
3447static int gcc_sc7280_probe(struct platform_device *pdev)
3448{
3449	struct regmap *regmap;
3450	int ret;
3451
3452	regmap = qcom_cc_map(pdev, &gcc_sc7280_desc);
3453	if (IS_ERR(regmap))
3454		return PTR_ERR(regmap);
3455
3456	/* Keep some clocks always-on */
3457	qcom_branch_set_clk_en(regmap, 0x26004);/* GCC_CAMERA_AHB_CLK */
3458	qcom_branch_set_clk_en(regmap, 0x26028);/* GCC_CAMERA_XO_CLK */
3459	qcom_branch_set_clk_en(regmap, 0x27004);/* GCC_DISP_AHB_CLK */
3460	qcom_branch_set_clk_en(regmap, 0x2701c);/* GCC_DISP_XO_CLK */
3461	qcom_branch_set_clk_en(regmap, 0x28004);/* GCC_VIDEO_AHB_CLK */
3462	qcom_branch_set_clk_en(regmap, 0x28014);/* GCC_VIDEO_XO_CLK */
3463	qcom_branch_set_clk_en(regmap, 0x71004);/* GCC_GPU_CFG_AHB_CLK */
3464	regmap_update_bits(regmap, 0x7100C, BIT(13), BIT(13));
3465
3466	ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks,
3467			ARRAY_SIZE(gcc_dfs_clocks));
3468	if (ret)
3469		return ret;
3470
3471	return qcom_cc_really_probe(pdev, &gcc_sc7280_desc, regmap);
3472}
3473
3474static struct platform_driver gcc_sc7280_driver = {
3475	.probe = gcc_sc7280_probe,
3476	.driver = {
3477		.name = "gcc-sc7280",
3478		.of_match_table = gcc_sc7280_match_table,
3479	},
3480};
3481
3482static int __init gcc_sc7280_init(void)
3483{
3484	return platform_driver_register(&gcc_sc7280_driver);
3485}
3486subsys_initcall(gcc_sc7280_init);
3487
3488static void __exit gcc_sc7280_exit(void)
3489{
3490	platform_driver_unregister(&gcc_sc7280_driver);
3491}
3492module_exit(gcc_sc7280_exit);
3493
3494MODULE_DESCRIPTION("QTI GCC SC7280 Driver");
3495MODULE_LICENSE("GPL v2");
3496