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