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