1// SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2/*
3 * Copyright (c) 2023, The Linux Foundation. All rights reserved.
4 */
5#include <linux/clk-provider.h>
6#include <linux/module.h>
7#include <linux/of_device.h>
8#include <linux/regmap.h>
9
10#include <dt-bindings/clock/qcom,gcc-ipq5018.h>
11#include <dt-bindings/reset/qcom,gcc-ipq5018.h>
12
13#include "clk-alpha-pll.h"
14#include "clk-branch.h"
15#include "clk-rcg.h"
16#include "clk-regmap.h"
17#include "clk-regmap-divider.h"
18#include "clk-regmap-mux.h"
19#include "clk-regmap-phy-mux.h"
20#include "reset.h"
21
22/* Need to match the order of clocks in DT binding */
23enum {
24	DT_XO,
25	DT_SLEEP_CLK,
26	DT_PCIE20_PHY0_PIPE_CLK,
27	DT_PCIE20_PHY1_PIPE_CLK,
28	DT_USB3_PHY0_CC_PIPE_CLK,
29	DT_GEPHY_RX_CLK,
30	DT_GEPHY_TX_CLK,
31	DT_UNIPHY_RX_CLK,
32	DT_UNIPHY_TX_CLK,
33};
34
35enum {
36	P_XO,
37	P_CORE_PI_SLEEP_CLK,
38	P_PCIE20_PHY0_PIPE,
39	P_PCIE20_PHY1_PIPE,
40	P_USB3PHY_0_PIPE,
41	P_GEPHY_RX,
42	P_GEPHY_TX,
43	P_UNIPHY_RX,
44	P_UNIPHY_TX,
45	P_GPLL0,
46	P_GPLL0_DIV2,
47	P_GPLL2,
48	P_GPLL4,
49	P_UBI32_PLL,
50};
51
52static const struct clk_parent_data gcc_xo_data[] = {
53	{ .index = DT_XO },
54};
55
56static const struct clk_parent_data gcc_sleep_clk_data[] = {
57	{ .index = DT_SLEEP_CLK },
58};
59
60static struct clk_alpha_pll gpll0_main = {
61	.offset = 0x21000,
62	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
63	.clkr = {
64		.enable_reg = 0x0b000,
65		.enable_mask = BIT(0),
66		.hw.init = &(struct clk_init_data) {
67			.name = "gpll0_main",
68			.parent_data = gcc_xo_data,
69			.num_parents = ARRAY_SIZE(gcc_xo_data),
70			.ops = &clk_alpha_pll_stromer_ops,
71		},
72	},
73};
74
75static struct clk_alpha_pll gpll2_main = {
76	.offset = 0x4a000,
77	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
78	.clkr = {
79		.enable_reg = 0x0b000,
80		.enable_mask = BIT(2),
81		.hw.init = &(struct clk_init_data) {
82			.name = "gpll2_main",
83			.parent_data = gcc_xo_data,
84			.num_parents = ARRAY_SIZE(gcc_xo_data),
85			.ops = &clk_alpha_pll_stromer_ops,
86		},
87	},
88};
89
90static struct clk_alpha_pll gpll4_main = {
91	.offset = 0x24000,
92	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
93	.clkr = {
94		.enable_reg = 0x0b000,
95		.enable_mask = BIT(5),
96		.hw.init = &(struct clk_init_data) {
97			.name = "gpll4_main",
98			.parent_data = gcc_xo_data,
99			.num_parents = ARRAY_SIZE(gcc_xo_data),
100			.ops = &clk_alpha_pll_stromer_ops,
101		},
102	},
103};
104
105static struct clk_alpha_pll ubi32_pll_main = {
106	.offset = 0x25000,
107	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
108	.clkr = {
109		.enable_reg = 0x0b000,
110		.enable_mask = BIT(6),
111		.hw.init = &(struct clk_init_data) {
112			.name = "ubi32_pll_main",
113			.parent_data = gcc_xo_data,
114			.num_parents = ARRAY_SIZE(gcc_xo_data),
115			.ops = &clk_alpha_pll_stromer_ops,
116		},
117	},
118};
119
120static struct clk_alpha_pll_postdiv gpll0 = {
121	.offset = 0x21000,
122	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
123	.width = 4,
124	.clkr.hw.init = &(struct clk_init_data) {
125		.name = "gpll0",
126		.parent_hws = (const struct clk_hw *[]) {
127			&gpll0_main.clkr.hw,
128		},
129		.num_parents = 1,
130		.ops = &clk_alpha_pll_postdiv_ro_ops,
131	},
132};
133
134static struct clk_alpha_pll_postdiv gpll2 = {
135	.offset = 0x4a000,
136	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
137	.width = 4,
138	.clkr.hw.init = &(struct clk_init_data) {
139		.name = "gpll2",
140		.parent_hws = (const struct clk_hw *[]) {
141			&gpll2_main.clkr.hw,
142		},
143		.num_parents = 1,
144		.ops = &clk_alpha_pll_postdiv_ro_ops,
145	},
146};
147
148static struct clk_alpha_pll_postdiv gpll4 = {
149	.offset = 0x24000,
150	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
151	.width = 4,
152	.clkr.hw.init = &(struct clk_init_data) {
153		.name = "gpll4",
154		.parent_hws = (const struct clk_hw *[]) {
155			&gpll4_main.clkr.hw,
156		},
157		.num_parents = 1,
158		.ops = &clk_alpha_pll_postdiv_ro_ops,
159	},
160};
161
162static struct clk_alpha_pll_postdiv ubi32_pll = {
163	.offset = 0x25000,
164	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
165	.width = 4,
166	.clkr.hw.init = &(struct clk_init_data) {
167		.name = "ubi32_pll",
168		.parent_hws = (const struct clk_hw *[]) {
169			&ubi32_pll_main.clkr.hw,
170		},
171		.num_parents = 1,
172		.ops = &clk_alpha_pll_postdiv_ro_ops,
173		.flags = CLK_SET_RATE_PARENT,
174	},
175};
176
177static struct clk_fixed_factor gpll0_out_main_div2 = {
178	.mult = 1,
179	.div = 2,
180	.hw.init = &(struct clk_init_data) {
181		.name = "gpll0_out_main_div2",
182		.parent_hws = (const struct clk_hw *[]) {
183			&gpll0_main.clkr.hw,
184		},
185		.num_parents = 1,
186		.ops = &clk_fixed_factor_ops,
187		.flags = CLK_SET_RATE_PARENT,
188	},
189};
190
191static const struct clk_parent_data gcc_xo_gpll0_gpll0_out_main_div2[] = {
192	{ .index = DT_XO },
193	{ .hw = &gpll0.clkr.hw },
194	{ .hw = &gpll0_out_main_div2.hw },
195};
196
197static const struct parent_map gcc_xo_gpll0_gpll0_out_main_div2_map[] = {
198	{ P_XO, 0 },
199	{ P_GPLL0, 1 },
200	{ P_GPLL0_DIV2, 4 },
201};
202
203static const struct clk_parent_data gcc_xo_gpll0[] = {
204	{ .index = DT_XO },
205	{ .hw = &gpll0.clkr.hw },
206};
207
208static const struct parent_map gcc_xo_gpll0_map[] = {
209	{ P_XO, 0 },
210	{ P_GPLL0, 1 },
211};
212
213static const struct clk_parent_data gcc_xo_gpll0_out_main_div2_gpll0[] = {
214	{ .index = DT_XO },
215	{ .hw = &gpll0_out_main_div2.hw },
216	{ .hw = &gpll0.clkr.hw },
217};
218
219static const struct parent_map gcc_xo_gpll0_out_main_div2_gpll0_map[] = {
220	{ P_XO, 0 },
221	{ P_GPLL0_DIV2, 2 },
222	{ P_GPLL0, 1 },
223};
224
225static const struct clk_parent_data gcc_xo_ubi32_gpll0[] = {
226	{ .index = DT_XO },
227	{ .hw = &ubi32_pll.clkr.hw },
228	{ .hw = &gpll0.clkr.hw },
229};
230
231static const struct parent_map gcc_xo_ubi32_gpll0_map[] = {
232	{ P_XO, 0 },
233	{ P_UBI32_PLL, 1 },
234	{ P_GPLL0, 2 },
235};
236
237static const struct clk_parent_data gcc_xo_gpll0_gpll2[] = {
238	{ .index = DT_XO },
239	{ .hw = &gpll0.clkr.hw },
240	{ .hw = &gpll2.clkr.hw },
241};
242
243static const struct parent_map gcc_xo_gpll0_gpll2_map[] = {
244	{ P_XO, 0 },
245	{ P_GPLL0, 1 },
246	{ P_GPLL2, 2 },
247};
248
249static const struct clk_parent_data gcc_xo_gpll0_gpll2_gpll4[] = {
250	{ .index = DT_XO },
251	{ .hw = &gpll0.clkr.hw },
252	{ .hw = &gpll2.clkr.hw },
253	{ .hw = &gpll4.clkr.hw },
254};
255
256static const struct parent_map gcc_xo_gpll0_gpll2_gpll4_map[] = {
257	{ P_XO, 0 },
258	{ P_GPLL0, 1 },
259	{ P_GPLL2, 2 },
260	{ P_GPLL4, 3 },
261};
262
263static const struct clk_parent_data gcc_xo_gpll0_gpll4[] = {
264	{ .index = DT_XO },
265	{ .hw = &gpll0.clkr.hw },
266	{ .hw = &gpll4.clkr.hw },
267};
268
269static const struct parent_map gcc_xo_gpll0_gpll4_map[] = {
270	{ P_XO, 0 },
271	{ P_GPLL0, 1 },
272	{ P_GPLL4, 2 },
273};
274
275static const struct clk_parent_data gcc_xo_gpll0_core_pi_sleep_clk[] = {
276	{ .index = DT_XO },
277	{ .hw = &gpll0.clkr.hw },
278	{ .index = DT_SLEEP_CLK },
279};
280
281static const struct parent_map gcc_xo_gpll0_core_pi_sleep_clk_map[] = {
282	{ P_XO, 0 },
283	{ P_GPLL0, 2 },
284	{ P_CORE_PI_SLEEP_CLK, 6 },
285};
286
287static const struct clk_parent_data gcc_xo_gpll0_gpll0_out_main_div2_sleep_clk[] = {
288	{ .index = DT_XO },
289	{ .hw = &gpll0.clkr.hw },
290	{ .hw = &gpll0_out_main_div2.hw },
291	{ .index = DT_SLEEP_CLK },
292};
293
294static const struct parent_map gcc_xo_gpll0_gpll0_out_main_div2_sleep_clk_map[] = {
295	{ P_XO, 0 },
296	{ P_GPLL0, 1 },
297	{ P_GPLL0_DIV2, 4 },
298	{ P_CORE_PI_SLEEP_CLK, 6 },
299};
300
301static const struct clk_parent_data gcc_xo_gpll0_gpll2_gpll0_out_main_div2[] = {
302	{ .index = DT_XO },
303	{ .hw = &gpll0.clkr.hw },
304	{ .hw = &gpll2.clkr.hw },
305	{ .hw = &gpll0_out_main_div2.hw },
306};
307
308static const struct parent_map gcc_xo_gpll0_gpll2_gpll0_out_main_div2_map[] = {
309	{ P_XO, 0 },
310	{ P_GPLL0, 1 },
311	{ P_GPLL2, 2 },
312	{ P_GPLL0_DIV2, 4 },
313};
314
315static const struct clk_parent_data gcc_xo_gpll4_gpll0_gpll0_out_main_div2[] = {
316	{ .index = DT_XO },
317	{ .hw = &gpll4.clkr.hw },
318	{ .hw = &gpll0.clkr.hw },
319	{ .hw = &gpll0_out_main_div2.hw },
320};
321
322static const struct parent_map gcc_xo_gpll4_gpll0_gpll0_out_main_div2_map1[] = {
323	{ P_XO, 0 },
324	{ P_GPLL4, 1 },
325	{ P_GPLL0, 2 },
326	{ P_GPLL0_DIV2, 4 },
327};
328
329static const struct parent_map gcc_xo_gpll4_gpll0_gpll0_out_main_div2_map2[] = {
330	{ P_XO, 0 },
331	{ P_GPLL4, 1 },
332	{ P_GPLL0, 3 },
333	{ P_GPLL0_DIV2, 4 },
334};
335
336static const struct clk_parent_data gcc_xo_gephy_gcc_rx_gephy_gcc_tx_ubi32_pll_gpll0[] = {
337	{ .index = DT_XO },
338	{ .index = DT_GEPHY_RX_CLK },
339	{ .index = DT_GEPHY_TX_CLK },
340	{ .hw = &ubi32_pll.clkr.hw },
341	{ .hw = &gpll0.clkr.hw },
342};
343
344static const struct parent_map gcc_xo_gephy_gcc_rx_gephy_gcc_tx_ubi32_pll_gpll0_map[] = {
345	{ P_XO, 0 },
346	{ P_GEPHY_RX, 1 },
347	{ P_GEPHY_TX, 2 },
348	{ P_UBI32_PLL, 3 },
349	{ P_GPLL0, 4 },
350};
351
352static const struct clk_parent_data gcc_xo_gephy_gcc_tx_gephy_gcc_rx_ubi32_pll_gpll0[] = {
353	{ .index = DT_XO },
354	{ .index = DT_GEPHY_TX_CLK },
355	{ .index = DT_GEPHY_RX_CLK },
356	{ .hw = &ubi32_pll.clkr.hw },
357	{ .hw = &gpll0.clkr.hw },
358};
359
360static const struct parent_map gcc_xo_gephy_gcc_tx_gephy_gcc_rx_ubi32_pll_gpll0_map[] = {
361	{ P_XO, 0 },
362	{ P_GEPHY_TX, 1 },
363	{ P_GEPHY_RX, 2 },
364	{ P_UBI32_PLL, 3 },
365	{ P_GPLL0, 4 },
366};
367
368static const struct clk_parent_data gcc_xo_uniphy_gcc_rx_uniphy_gcc_tx_ubi32_pll_gpll0[] = {
369	{ .index = DT_XO },
370	{ .index = DT_UNIPHY_RX_CLK },
371	{ .index = DT_UNIPHY_TX_CLK },
372	{ .hw = &ubi32_pll.clkr.hw },
373	{ .hw = &gpll0.clkr.hw },
374};
375
376static const struct parent_map gcc_xo_uniphy_gcc_rx_uniphy_gcc_tx_ubi32_pll_gpll0_map[] = {
377	{ P_XO, 0 },
378	{ P_UNIPHY_RX, 1 },
379	{ P_UNIPHY_TX, 2 },
380	{ P_UBI32_PLL, 3 },
381	{ P_GPLL0, 4 },
382};
383
384static const struct clk_parent_data gcc_xo_uniphy_gcc_tx_uniphy_gcc_rx_ubi32_pll_gpll0[] = {
385	{ .index = DT_XO },
386	{ .index = DT_UNIPHY_TX_CLK },
387	{ .index = DT_UNIPHY_RX_CLK },
388	{ .hw = &ubi32_pll.clkr.hw },
389	{ .hw = &gpll0.clkr.hw },
390};
391
392static const struct parent_map gcc_xo_uniphy_gcc_tx_uniphy_gcc_rx_ubi32_pll_gpll0_map[] = {
393	{ P_XO, 0 },
394	{ P_UNIPHY_TX, 1 },
395	{ P_UNIPHY_RX, 2 },
396	{ P_UBI32_PLL, 3 },
397	{ P_GPLL0, 4 },
398};
399
400static const struct clk_parent_data gcc_pcie20_phy0_pipe_clk_xo[] = {
401	{ .index = DT_PCIE20_PHY0_PIPE_CLK },
402	{ .index = DT_XO },
403};
404
405static const struct parent_map gcc_pcie20_phy0_pipe_clk_xo_map[] = {
406	{ P_PCIE20_PHY0_PIPE, 0 },
407	{ P_XO, 2 },
408};
409
410static const struct clk_parent_data gcc_pcie20_phy1_pipe_clk_xo[] = {
411	{ .index = DT_PCIE20_PHY1_PIPE_CLK },
412	{ .index = DT_XO },
413};
414
415static const struct parent_map gcc_pcie20_phy1_pipe_clk_xo_map[] = {
416	{ P_PCIE20_PHY1_PIPE, 0 },
417	{ P_XO, 2 },
418};
419
420static const struct clk_parent_data gcc_usb3phy_0_cc_pipe_clk_xo[] = {
421	{ .index = DT_USB3_PHY0_CC_PIPE_CLK },
422	{ .index = DT_XO },
423};
424
425static const struct parent_map gcc_usb3phy_0_cc_pipe_clk_xo_map[] = {
426	{ P_USB3PHY_0_PIPE, 0 },
427	{ P_XO, 2 },
428};
429
430static const struct freq_tbl ftbl_adss_pwm_clk_src[] = {
431	F(24000000, P_XO, 1, 0, 0),
432	F(100000000, P_GPLL0, 8, 0, 0),
433	{ }
434};
435
436static struct clk_rcg2 adss_pwm_clk_src = {
437	.cmd_rcgr = 0x1f008,
438	.freq_tbl = ftbl_adss_pwm_clk_src,
439	.hid_width = 5,
440	.parent_map = gcc_xo_gpll0_map,
441	.clkr.hw.init = &(struct clk_init_data) {
442		.name = "adss_pwm_clk_src",
443		.parent_data = gcc_xo_gpll0,
444		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
445		.ops = &clk_rcg2_ops,
446	},
447};
448
449static const struct freq_tbl ftbl_blsp1_qup_i2c_apps_clk_src[] = {
450	F(50000000, P_GPLL0, 16, 0, 0),
451	{ }
452};
453
454static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
455	.cmd_rcgr = 0x0200c,
456	.freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,
457	.hid_width = 5,
458	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
459	.clkr.hw.init = &(struct clk_init_data) {
460		.name = "blsp1_qup1_i2c_apps_clk_src",
461		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
462		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
463		.ops = &clk_rcg2_ops,
464	},
465};
466
467static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
468	.cmd_rcgr = 0x03000,
469	.freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,
470	.hid_width = 5,
471	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
472	.clkr.hw.init = &(struct clk_init_data) {
473		.name = "blsp1_qup2_i2c_apps_clk_src",
474		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
475		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
476		.ops = &clk_rcg2_ops,
477	},
478};
479
480static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
481	.cmd_rcgr = 0x04000,
482	.freq_tbl = ftbl_blsp1_qup_i2c_apps_clk_src,
483	.hid_width = 5,
484	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
485	.clkr.hw.init = &(struct clk_init_data) {
486		.name = "blsp1_qup3_i2c_apps_clk_src",
487		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
488		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
489		.ops = &clk_rcg2_ops,
490	},
491};
492
493static const struct freq_tbl ftbl_blsp1_qup_spi_apps_clk_src[] = {
494	F(960000, P_XO, 10, 2, 5),
495	F(4800000, P_XO, 5, 0, 0),
496	F(9600000, P_XO, 2, 4, 5),
497	F(16000000, P_GPLL0, 10, 1, 5),
498	F(24000000, P_XO, 1, 0, 0),
499	F(50000000, P_GPLL0, 16, 0, 0),
500	{ }
501};
502
503static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
504	.cmd_rcgr = 0x02024,
505	.freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,
506	.mnd_width = 8,
507	.hid_width = 5,
508	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
509	.clkr.hw.init = &(struct clk_init_data) {
510		.name = "blsp1_qup1_spi_apps_clk_src",
511		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
512		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
513		.ops = &clk_rcg2_ops,
514	},
515};
516
517static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
518	.cmd_rcgr = 0x03014,
519	.freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,
520	.mnd_width = 8,
521	.hid_width = 5,
522	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
523	.clkr.hw.init = &(struct clk_init_data) {
524		.name = "blsp1_qup2_spi_apps_clk_src",
525		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
526		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
527		.ops = &clk_rcg2_ops,
528	},
529};
530
531static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
532	.cmd_rcgr = 0x04014,
533	.freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src,
534	.mnd_width = 8,
535	.hid_width = 5,
536	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
537	.clkr.hw.init = &(struct clk_init_data) {
538		.name = "blsp1_qup3_spi_apps_clk_src",
539		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
540		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
541		.ops = &clk_rcg2_ops,
542	},
543};
544
545static const struct freq_tbl ftbl_blsp1_uart_apps_clk_src[] = {
546	F(3686400, P_GPLL0_DIV2, 1, 144, 15625),
547	F(7372800, P_GPLL0_DIV2, 1, 288, 15625),
548	F(14745600, P_GPLL0_DIV2, 1, 576, 15625),
549	F(24000000, P_XO, 1, 0, 0),
550	F(25000000, P_GPLL0, 16, 1, 2),
551	F(40000000, P_GPLL0, 1, 1, 20),
552	F(46400000, P_GPLL0, 1, 29, 500),
553	F(48000000, P_GPLL0, 1, 3, 50),
554	F(51200000, P_GPLL0, 1, 8, 125),
555	F(56000000, P_GPLL0, 1, 7, 100),
556	F(58982400, P_GPLL0, 1, 1152, 15625),
557	F(60000000, P_GPLL0, 1, 3, 40),
558	F(64000000, P_GPLL0, 10, 4, 5),
559	{ }
560};
561
562static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
563	.cmd_rcgr = 0x02044,
564	.freq_tbl = ftbl_blsp1_uart_apps_clk_src,
565	.mnd_width = 16,
566	.hid_width = 5,
567	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
568	.clkr.hw.init = &(struct clk_init_data) {
569		.name = "blsp1_uart1_apps_clk_src",
570		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
571		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
572		.ops = &clk_rcg2_ops,
573	},
574};
575
576static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
577	.cmd_rcgr = 0x03034,
578	.freq_tbl = ftbl_blsp1_uart_apps_clk_src,
579	.mnd_width = 16,
580	.hid_width = 5,
581	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
582	.clkr.hw.init = &(struct clk_init_data) {
583		.name = "blsp1_uart2_apps_clk_src",
584		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
585		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
586		.ops = &clk_rcg2_ops,
587	},
588};
589
590static const struct freq_tbl ftbl_crypto_clk_src[] = {
591	F(160000000, P_GPLL0, 5, 0, 0),
592	{ }
593};
594
595static struct clk_rcg2 crypto_clk_src = {
596	.cmd_rcgr = 0x16004,
597	.freq_tbl = ftbl_crypto_clk_src,
598	.hid_width = 5,
599	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
600	.clkr.hw.init = &(struct clk_init_data) {
601		.name = "crypto_clk_src",
602		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
603		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
604		.ops = &clk_rcg2_ops,
605	},
606};
607
608static const struct freq_tbl ftbl_gmac0_tx_clk_src[] = {
609	F(2500000, P_GEPHY_TX, 5, 0, 0),
610	F(24000000, P_XO, 1, 0, 0),
611	F(25000000, P_GEPHY_TX, 5, 0, 0),
612	F(125000000, P_GEPHY_TX, 1, 0, 0),
613	{ }
614};
615
616static struct clk_rcg2 gmac0_rx_clk_src = {
617	.cmd_rcgr = 0x68020,
618	.parent_map = gcc_xo_gephy_gcc_rx_gephy_gcc_tx_ubi32_pll_gpll0_map,
619	.hid_width = 5,
620	.freq_tbl = ftbl_gmac0_tx_clk_src,
621	.clkr.hw.init = &(struct clk_init_data) {
622		.name = "gmac0_rx_clk_src",
623		.parent_data = gcc_xo_gephy_gcc_rx_gephy_gcc_tx_ubi32_pll_gpll0,
624		.num_parents = ARRAY_SIZE(gcc_xo_gephy_gcc_rx_gephy_gcc_tx_ubi32_pll_gpll0),
625		.ops = &clk_rcg2_ops,
626	},
627};
628
629static struct clk_regmap_div gmac0_rx_div_clk_src = {
630	.reg = 0x68420,
631	.shift = 0,
632	.width = 4,
633	.clkr = {
634		.hw.init = &(struct clk_init_data) {
635			.name = "gmac0_rx_div_clk_src",
636			.parent_hws = (const struct clk_hw *[]) {
637				&gmac0_rx_clk_src.clkr.hw,
638			},
639			.num_parents = 1,
640			.ops = &clk_regmap_div_ops,
641			.flags = CLK_SET_RATE_PARENT,
642		},
643	},
644};
645
646static struct clk_rcg2 gmac0_tx_clk_src = {
647	.cmd_rcgr = 0x68028,
648	.parent_map = gcc_xo_gephy_gcc_tx_gephy_gcc_rx_ubi32_pll_gpll0_map,
649	.hid_width = 5,
650	.freq_tbl = ftbl_gmac0_tx_clk_src,
651	.clkr.hw.init = &(struct clk_init_data) {
652		.name = "gmac0_tx_clk_src",
653		.parent_data = gcc_xo_gephy_gcc_tx_gephy_gcc_rx_ubi32_pll_gpll0,
654		.num_parents = ARRAY_SIZE(gcc_xo_gephy_gcc_tx_gephy_gcc_rx_ubi32_pll_gpll0),
655		.ops = &clk_rcg2_ops,
656	},
657};
658
659static struct clk_regmap_div gmac0_tx_div_clk_src = {
660	.reg = 0x68424,
661	.shift = 0,
662	.width = 4,
663	.clkr = {
664		.hw.init = &(struct clk_init_data) {
665			.name = "gmac0_tx_div_clk_src",
666			.parent_hws = (const struct clk_hw *[]) {
667				&gmac0_tx_clk_src.clkr.hw,
668			},
669			.num_parents = 1,
670			.ops = &clk_regmap_div_ops,
671			.flags = CLK_SET_RATE_PARENT,
672		},
673	},
674};
675
676static const struct freq_tbl ftbl_gmac1_rx_clk_src[] = {
677	F(2500000, P_UNIPHY_RX, 12.5, 0, 0),
678	F(24000000, P_XO, 1, 0, 0),
679	F(25000000, P_UNIPHY_RX, 2.5, 0, 0),
680	F(125000000, P_UNIPHY_RX, 2.5, 0, 0),
681	F(125000000, P_UNIPHY_RX, 1, 0, 0),
682	F(312500000, P_UNIPHY_RX, 1, 0, 0),
683	{ }
684};
685
686static struct clk_rcg2 gmac1_rx_clk_src = {
687	.cmd_rcgr = 0x68030,
688	.parent_map = gcc_xo_uniphy_gcc_rx_uniphy_gcc_tx_ubi32_pll_gpll0_map,
689	.hid_width = 5,
690	.freq_tbl = ftbl_gmac1_rx_clk_src,
691	.clkr.hw.init = &(struct clk_init_data) {
692		.name = "gmac1_rx_clk_src",
693		.parent_data = gcc_xo_uniphy_gcc_rx_uniphy_gcc_tx_ubi32_pll_gpll0,
694		.num_parents = ARRAY_SIZE(gcc_xo_uniphy_gcc_rx_uniphy_gcc_tx_ubi32_pll_gpll0),
695		.ops = &clk_rcg2_ops,
696	},
697};
698
699static struct clk_regmap_div gmac1_rx_div_clk_src = {
700	.reg = 0x68430,
701	.shift = 0,
702	.width = 4,
703	.clkr = {
704		.hw.init = &(struct clk_init_data) {
705			.name = "gmac1_rx_div_clk_src",
706			.parent_hws = (const struct clk_hw *[]) {
707				&gmac1_rx_clk_src.clkr.hw,
708			},
709			.num_parents = 1,
710			.ops = &clk_regmap_div_ops,
711			.flags = CLK_SET_RATE_PARENT,
712		},
713	},
714};
715
716static const struct freq_tbl ftbl_gmac1_tx_clk_src[] = {
717	F(2500000, P_UNIPHY_TX, 12.5, 0, 0),
718	F(24000000, P_XO, 1, 0, 0),
719	F(25000000, P_UNIPHY_TX, 2.5, 0, 0),
720	F(125000000, P_UNIPHY_TX, 2.5, 0, 0),
721	F(125000000, P_UNIPHY_TX, 1, 0, 0),
722	F(312500000, P_UNIPHY_TX, 1, 0, 0),
723	{ }
724};
725
726static struct clk_rcg2 gmac1_tx_clk_src = {
727	.cmd_rcgr = 0x68038,
728	.parent_map = gcc_xo_uniphy_gcc_tx_uniphy_gcc_rx_ubi32_pll_gpll0_map,
729	.hid_width = 5,
730	.freq_tbl = ftbl_gmac1_tx_clk_src,
731	.clkr.hw.init = &(struct clk_init_data) {
732		.name = "gmac1_tx_clk_src",
733		.parent_data = gcc_xo_uniphy_gcc_tx_uniphy_gcc_rx_ubi32_pll_gpll0,
734		.num_parents = ARRAY_SIZE(gcc_xo_uniphy_gcc_tx_uniphy_gcc_rx_ubi32_pll_gpll0),
735		.ops = &clk_rcg2_ops,
736	},
737};
738
739static struct clk_regmap_div gmac1_tx_div_clk_src = {
740	.reg = 0x68434,
741	.shift = 0,
742	.width = 4,
743	.clkr = {
744		.hw.init = &(struct clk_init_data) {
745			.name = "gmac1_tx_div_clk_src",
746			.parent_hws = (const struct clk_hw *[]) {
747				&gmac1_tx_clk_src.clkr.hw,
748			},
749			.num_parents = 1,
750			.ops = &clk_regmap_div_ops,
751			.flags = CLK_SET_RATE_PARENT,
752		},
753	},
754};
755
756static const struct freq_tbl ftbl_gmac_clk_src[] = {
757	F(240000000, P_GPLL4, 5, 0, 0),
758	{ }
759};
760
761static struct clk_rcg2 gmac_clk_src = {
762	.cmd_rcgr = 0x68080,
763	.parent_map = gcc_xo_gpll0_gpll4_map,
764	.hid_width = 5,
765	.freq_tbl = ftbl_gmac_clk_src,
766	.clkr.hw.init = &(struct clk_init_data) {
767		.name = "gmac_clk_src",
768		.parent_data = gcc_xo_gpll0_gpll4,
769		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll4),
770		.ops = &clk_rcg2_ops,
771	},
772};
773
774static const struct freq_tbl ftbl_gp_clk_src[] = {
775	F(200000000, P_GPLL0, 4, 0, 0),
776	{ }
777};
778
779static struct clk_rcg2 gp1_clk_src = {
780	.cmd_rcgr = 0x08004,
781	.freq_tbl = ftbl_gp_clk_src,
782	.mnd_width = 8,
783	.hid_width = 5,
784	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_sleep_clk_map,
785	.clkr.hw.init = &(struct clk_init_data) {
786		.name = "gp1_clk_src",
787		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2_sleep_clk,
788		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2_sleep_clk),
789		.ops = &clk_rcg2_ops,
790	},
791};
792
793static struct clk_rcg2 gp2_clk_src = {
794	.cmd_rcgr = 0x09004,
795	.freq_tbl = ftbl_gp_clk_src,
796	.mnd_width = 8,
797	.hid_width = 5,
798	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_sleep_clk_map,
799	.clkr.hw.init = &(struct clk_init_data) {
800		.name = "gp2_clk_src",
801		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2_sleep_clk,
802		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2_sleep_clk),
803		.ops = &clk_rcg2_ops,
804	},
805};
806
807static struct clk_rcg2 gp3_clk_src = {
808	.cmd_rcgr = 0x0a004,
809	.freq_tbl = ftbl_gp_clk_src,
810	.mnd_width = 8,
811	.hid_width = 5,
812	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_sleep_clk_map,
813	.clkr.hw.init = &(struct clk_init_data) {
814		.name = "gp3_clk_src",
815		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2_sleep_clk,
816		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2_sleep_clk),
817		.ops = &clk_rcg2_ops,
818	},
819};
820
821static const struct freq_tbl ftbl_lpass_axim_clk_src[] = {
822	F(133333334, P_GPLL0, 6, 0, 0),
823	{ }
824};
825
826static struct clk_rcg2 lpass_axim_clk_src = {
827	.cmd_rcgr = 0x2e028,
828	.freq_tbl = ftbl_lpass_axim_clk_src,
829	.hid_width = 5,
830	.parent_map = gcc_xo_gpll0_map,
831	.clkr.hw.init = &(struct clk_init_data) {
832		.name = "lpass_axim_clk_src",
833		.parent_data = gcc_xo_gpll0,
834		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
835		.ops = &clk_rcg2_ops,
836	},
837};
838
839static const struct freq_tbl ftbl_lpass_sway_clk_src[] = {
840	F(66666667, P_GPLL0, 12, 0, 0),
841	{ }
842};
843
844static struct clk_rcg2 lpass_sway_clk_src = {
845	.cmd_rcgr = 0x2e040,
846	.freq_tbl = ftbl_lpass_sway_clk_src,
847	.hid_width = 5,
848	.parent_map = gcc_xo_gpll0_map,
849	.clkr.hw.init = &(struct clk_init_data) {
850		.name = "lpass_sway_clk_src",
851		.parent_data = gcc_xo_gpll0,
852		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
853		.ops = &clk_rcg2_ops,
854	},
855};
856
857static const struct freq_tbl ftbl_pcie0_aux_clk_src[] = {
858	F(2000000, P_XO, 12, 0, 0),
859	{ }
860};
861
862static struct clk_rcg2 pcie0_aux_clk_src = {
863	.cmd_rcgr = 0x75020,
864	.freq_tbl = ftbl_pcie0_aux_clk_src,
865	.mnd_width = 16,
866	.hid_width = 5,
867	.parent_map = gcc_xo_gpll0_core_pi_sleep_clk_map,
868	.clkr.hw.init = &(struct clk_init_data) {
869		.name = "pcie0_aux_clk_src",
870		.parent_data = gcc_xo_gpll0_core_pi_sleep_clk,
871		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_core_pi_sleep_clk),
872		.ops = &clk_rcg2_ops,
873	},
874};
875
876static const struct freq_tbl ftbl_pcie0_axi_clk_src[] = {
877	F(240000000, P_GPLL4, 5, 0, 0),
878	{ }
879};
880
881static struct clk_rcg2 pcie0_axi_clk_src = {
882	.cmd_rcgr = 0x75050,
883	.freq_tbl = ftbl_pcie0_axi_clk_src,
884	.hid_width = 5,
885	.parent_map = gcc_xo_gpll0_gpll4_map,
886	.clkr.hw.init = &(struct clk_init_data) {
887		.name = "pcie0_axi_clk_src",
888		.parent_data = gcc_xo_gpll0_gpll4,
889		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll4),
890		.ops = &clk_rcg2_ops,
891	},
892};
893
894static struct clk_rcg2 pcie1_aux_clk_src = {
895	.cmd_rcgr = 0x76020,
896	.freq_tbl = ftbl_pcie0_aux_clk_src,
897	.mnd_width = 16,
898	.hid_width = 5,
899	.parent_map = gcc_xo_gpll0_core_pi_sleep_clk_map,
900	.clkr.hw.init = &(struct clk_init_data) {
901		.name = "pcie1_aux_clk_src",
902		.parent_data = gcc_xo_gpll0_core_pi_sleep_clk,
903		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_core_pi_sleep_clk),
904		.ops = &clk_rcg2_ops,
905	},
906};
907
908static struct clk_rcg2 pcie1_axi_clk_src = {
909	.cmd_rcgr = 0x76050,
910	.freq_tbl = ftbl_gp_clk_src,
911	.hid_width = 5,
912	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
913	.clkr.hw.init = &(struct clk_init_data) {
914		.name = "pcie1_axi_clk_src",
915		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
916		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
917		.ops = &clk_rcg2_ops,
918	},
919};
920
921static struct clk_regmap_mux pcie0_pipe_clk_src = {
922	.reg = 0x7501c,
923	.shift = 8,
924	.width = 2,
925	.parent_map = gcc_pcie20_phy0_pipe_clk_xo_map,
926	.clkr = {
927		.hw.init = &(struct clk_init_data) {
928			.name = "pcie0_pipe_clk_src",
929			.parent_data = gcc_pcie20_phy0_pipe_clk_xo,
930			.num_parents = ARRAY_SIZE(gcc_pcie20_phy0_pipe_clk_xo),
931			.ops = &clk_regmap_mux_closest_ops,
932			.flags = CLK_SET_RATE_PARENT,
933		},
934	},
935};
936
937static struct clk_regmap_mux pcie1_pipe_clk_src = {
938	.reg = 0x7601c,
939	.shift = 8,
940	.width = 2,
941	.parent_map = gcc_pcie20_phy1_pipe_clk_xo_map, .clkr = {
942		.hw.init = &(struct clk_init_data) {
943			.name = "pcie1_pipe_clk_src",
944			.parent_data = gcc_pcie20_phy1_pipe_clk_xo,
945			.num_parents = ARRAY_SIZE(gcc_pcie20_phy1_pipe_clk_xo),
946			.ops = &clk_regmap_mux_closest_ops,
947			.flags = CLK_SET_RATE_PARENT,
948		},
949	},
950};
951
952static const struct freq_tbl ftbl_pcnoc_bfdcd_clk_src[] = {
953	F(100000000, P_GPLL0, 8, 0, 0),
954	{ }
955};
956
957static struct clk_rcg2 pcnoc_bfdcd_clk_src = {
958	.cmd_rcgr = 0x27000,
959	.freq_tbl = ftbl_pcnoc_bfdcd_clk_src,
960	.hid_width = 5,
961	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
962	.clkr.hw.init = &(struct clk_init_data) {
963		.name = "pcnoc_bfdcd_clk_src",
964		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
965		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
966		.ops = &clk_rcg2_ops,
967	},
968};
969
970static struct clk_fixed_factor pcnoc_clk_src = {
971	.mult = 1,
972	.div = 1,
973	.hw.init = &(struct clk_init_data) {
974		.name = "pcnoc_clk_src",
975		.parent_hws = (const struct clk_hw *[]) {
976			&pcnoc_bfdcd_clk_src.clkr.hw,
977		},
978		.num_parents = 1,
979		.ops = &clk_fixed_factor_ops,
980		.flags = CLK_SET_RATE_PARENT,
981	},
982};
983
984static const struct freq_tbl ftbl_qdss_at_clk_src[] = {
985	F(240000000, P_GPLL4, 5, 0, 0),
986	{ }
987};
988
989static struct clk_rcg2 qdss_at_clk_src = {
990	.cmd_rcgr = 0x2900c,
991	.freq_tbl = ftbl_qdss_at_clk_src,
992	.hid_width = 5,
993	.parent_map = gcc_xo_gpll4_gpll0_gpll0_out_main_div2_map1,
994	.clkr.hw.init = &(struct clk_init_data) {
995		.name = "qdss_at_clk_src",
996		.parent_data = gcc_xo_gpll4_gpll0_gpll0_out_main_div2,
997		.num_parents = ARRAY_SIZE(gcc_xo_gpll4_gpll0_gpll0_out_main_div2),
998		.ops = &clk_rcg2_ops,
999	},
1000};
1001
1002static const struct freq_tbl ftbl_qdss_stm_clk_src[] = {
1003	F(200000000, P_GPLL0, 4, 0, 0),
1004	{ }
1005};
1006
1007static struct clk_rcg2 qdss_stm_clk_src = {
1008	.cmd_rcgr = 0x2902c,
1009	.freq_tbl = ftbl_qdss_stm_clk_src,
1010	.hid_width = 5,
1011	.parent_map = gcc_xo_gpll0_gpll0_out_main_div2_map,
1012	.clkr.hw.init = &(struct clk_init_data) {
1013		.name = "qdss_stm_clk_src",
1014		.parent_data = gcc_xo_gpll0_gpll0_out_main_div2,
1015		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_out_main_div2),
1016		.ops = &clk_rcg2_ops,
1017	},
1018};
1019
1020static const struct freq_tbl ftbl_qdss_traceclkin_clk_src[] = {
1021	F(266666667, P_GPLL0, 3, 0, 0),
1022	{ }
1023};
1024
1025static struct clk_rcg2 qdss_traceclkin_clk_src = {
1026	.cmd_rcgr = 0x29048,
1027	.freq_tbl = ftbl_qdss_traceclkin_clk_src,
1028	.hid_width = 5,
1029	.parent_map = gcc_xo_gpll4_gpll0_gpll0_out_main_div2_map1,
1030	.clkr.hw.init = &(struct clk_init_data) {
1031		.name = "qdss_traceclkin_clk_src",
1032		.parent_data = gcc_xo_gpll4_gpll0_gpll0_out_main_div2,
1033		.num_parents = ARRAY_SIZE(gcc_xo_gpll4_gpll0_gpll0_out_main_div2),
1034		.ops = &clk_rcg2_ops,
1035	},
1036};
1037
1038static const struct freq_tbl ftbl_qdss_tsctr_clk_src[] = {
1039	F(600000000, P_GPLL4, 2, 0, 0),
1040	{ }
1041};
1042
1043static struct clk_rcg2 qdss_tsctr_clk_src = {
1044	.cmd_rcgr = 0x29064,
1045	.freq_tbl = ftbl_qdss_tsctr_clk_src,
1046	.hid_width = 5,
1047	.parent_map = gcc_xo_gpll4_gpll0_gpll0_out_main_div2_map1,
1048	.clkr.hw.init = &(struct clk_init_data) {
1049		.name = "qdss_tsctr_clk_src",
1050		.parent_data = gcc_xo_gpll4_gpll0_gpll0_out_main_div2,
1051		.num_parents = ARRAY_SIZE(gcc_xo_gpll4_gpll0_gpll0_out_main_div2),
1052		.ops = &clk_rcg2_ops,
1053	},
1054};
1055
1056static struct clk_fixed_factor qdss_tsctr_div2_clk_src = {
1057	.mult = 1,
1058	.div = 2,
1059	.hw.init = &(struct clk_init_data) {
1060		.name = "qdss_tsctr_div2_clk_src",
1061		.parent_hws = (const struct clk_hw *[]) {
1062			&qdss_tsctr_clk_src.clkr.hw,
1063		},
1064		.num_parents = 1,
1065		.flags = CLK_SET_RATE_PARENT,
1066		.ops = &clk_fixed_factor_ops,
1067	},
1068};
1069
1070static struct clk_fixed_factor qdss_dap_sync_clk_src = {
1071	.mult = 1,
1072	.div = 4,
1073	.hw.init = &(struct clk_init_data) {
1074		.name = "qdss_dap_sync_clk_src",
1075		.parent_hws = (const struct clk_hw *[]) {
1076			&qdss_tsctr_clk_src.clkr.hw,
1077		},
1078		.num_parents = 1,
1079		.ops = &clk_fixed_factor_ops,
1080	},
1081};
1082
1083static struct clk_fixed_factor eud_at_clk_src = {
1084	.mult = 1,
1085	.div = 6,
1086	.hw.init = &(struct clk_init_data) {
1087		.name = "eud_at_clk_src",
1088		.parent_hws = (const struct clk_hw *[]) {
1089			&qdss_at_clk_src.clkr.hw,
1090		},
1091		.num_parents = 1,
1092		.ops = &clk_fixed_factor_ops,
1093		.flags = CLK_SET_RATE_PARENT,
1094	},
1095};
1096
1097static const struct freq_tbl ftbl_qpic_io_macro_clk_src[] = {
1098	F(24000000, P_XO, 1, 0, 0),
1099	F(100000000, P_GPLL0, 8, 0, 0),
1100	F(200000000, P_GPLL0, 4, 0, 0),
1101	F(320000000, P_GPLL0, 2.5, 0, 0),
1102	{ }
1103};
1104
1105static struct clk_rcg2 qpic_io_macro_clk_src = {
1106	.cmd_rcgr = 0x57010,
1107	.freq_tbl = ftbl_qpic_io_macro_clk_src,
1108	.hid_width = 5,
1109	.parent_map = gcc_xo_gpll0_gpll2_map,
1110	.clkr.hw.init = &(struct clk_init_data) {
1111		.name = "qpic_io_macro_clk_src",
1112		.parent_data = gcc_xo_gpll0_gpll2,
1113		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll2),
1114		.ops = &clk_rcg2_ops,
1115	},
1116};
1117
1118static const struct freq_tbl ftbl_sdcc1_apps_clk_src[] = {
1119	F(143713, P_XO, 1, 1, 167),
1120	F(400000, P_XO, 1, 1, 60),
1121	F(24000000, P_XO, 1, 0, 0),
1122	F(48000000, P_GPLL2, 12, 1, 2),
1123	F(96000000, P_GPLL2, 12, 0, 0),
1124	F(177777778, P_GPLL0, 1, 2, 9),
1125	F(192000000, P_GPLL2, 6, 0, 0),
1126	F(200000000, P_GPLL0, 4, 0, 0),
1127	{ }
1128};
1129
1130static struct clk_rcg2 sdcc1_apps_clk_src = {
1131	.cmd_rcgr = 0x42004,
1132	.freq_tbl = ftbl_sdcc1_apps_clk_src,
1133	.mnd_width = 8,
1134	.hid_width = 5,
1135	.parent_map = gcc_xo_gpll0_gpll2_gpll0_out_main_div2_map,
1136	.clkr.hw.init = &(struct clk_init_data) {
1137		.name = "sdcc1_apps_clk_src",
1138		.parent_data = gcc_xo_gpll0_gpll2_gpll0_out_main_div2,
1139		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll2_gpll0_out_main_div2),
1140		.ops = &clk_rcg2_floor_ops,
1141	},
1142};
1143
1144static const struct freq_tbl ftbl_system_noc_bfdcd_clk_src[] = {
1145	F(266666667, P_GPLL0, 3, 0, 0),
1146	{ }
1147};
1148
1149static struct clk_rcg2 system_noc_bfdcd_clk_src = {
1150	.cmd_rcgr = 0x26004,
1151	.freq_tbl = ftbl_system_noc_bfdcd_clk_src,
1152	.hid_width = 5,
1153	.parent_map = gcc_xo_gpll0_gpll2_gpll0_out_main_div2_map,
1154	.clkr.hw.init = &(struct clk_init_data) {
1155		.name = "system_noc_bfdcd_clk_src",
1156		.parent_data = gcc_xo_gpll0_gpll2_gpll0_out_main_div2,
1157		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll2_gpll0_out_main_div2),
1158		.ops = &clk_rcg2_ops,
1159	},
1160};
1161
1162static struct clk_fixed_factor system_noc_clk_src = {
1163	.mult = 1,
1164	.div = 1,
1165	.hw.init = &(struct clk_init_data) {
1166		.name = "system_noc_clk_src",
1167		.parent_hws = (const struct clk_hw *[]) {
1168			&system_noc_bfdcd_clk_src.clkr.hw,
1169		},
1170		.num_parents = 1,
1171		.ops = &clk_fixed_factor_ops,
1172		.flags = CLK_SET_RATE_PARENT,
1173	},
1174};
1175
1176static const struct freq_tbl ftbl_apss_axi_clk_src[] = {
1177	F(400000000, P_GPLL0, 2, 0, 0),
1178	{ }
1179};
1180
1181static struct clk_rcg2 ubi0_axi_clk_src = {
1182	.cmd_rcgr = 0x68088,
1183	.freq_tbl = ftbl_apss_axi_clk_src,
1184	.hid_width = 5,
1185	.parent_map = gcc_xo_gpll0_gpll2_map,
1186	.clkr.hw.init = &(struct clk_init_data) {
1187		.name = "ubi0_axi_clk_src",
1188		.parent_data = gcc_xo_gpll0_gpll2,
1189		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll2),
1190		.ops = &clk_rcg2_ops,
1191		.flags = CLK_SET_RATE_PARENT,
1192	},
1193};
1194
1195static const struct freq_tbl ftbl_ubi0_core_clk_src[] = {
1196	F(850000000, P_UBI32_PLL, 1, 0, 0),
1197	F(1000000000, P_UBI32_PLL, 1, 0, 0),
1198	{ }
1199};
1200
1201static struct clk_rcg2 ubi0_core_clk_src = {
1202	.cmd_rcgr = 0x68100,
1203	.freq_tbl = ftbl_ubi0_core_clk_src,
1204	.hid_width = 5,
1205	.parent_map = gcc_xo_ubi32_gpll0_map,
1206	.clkr.hw.init = &(struct clk_init_data) {
1207		.name = "ubi0_core_clk_src",
1208		.parent_data = gcc_xo_ubi32_gpll0,
1209		.num_parents = ARRAY_SIZE(gcc_xo_ubi32_gpll0),
1210		.ops = &clk_rcg2_ops,
1211		.flags = CLK_SET_RATE_PARENT,
1212	},
1213};
1214
1215static struct clk_rcg2 usb0_aux_clk_src = {
1216	.cmd_rcgr = 0x3e05c,
1217	.freq_tbl = ftbl_pcie0_aux_clk_src,
1218	.mnd_width = 16,
1219	.hid_width = 5,
1220	.parent_map = gcc_xo_gpll0_core_pi_sleep_clk_map,
1221	.clkr.hw.init = &(struct clk_init_data) {
1222		.name = "usb0_aux_clk_src",
1223		.parent_data = gcc_xo_gpll0_core_pi_sleep_clk,
1224		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_core_pi_sleep_clk),
1225		.ops = &clk_rcg2_ops,
1226	},
1227};
1228
1229static const struct freq_tbl ftbl_usb0_lfps_clk_src[] = {
1230	F(25000000, P_GPLL0, 16, 1, 2),
1231	{ }
1232};
1233
1234static struct clk_rcg2 usb0_lfps_clk_src = {
1235	.cmd_rcgr = 0x3e090,
1236	.freq_tbl = ftbl_usb0_lfps_clk_src,
1237	.mnd_width = 8,
1238	.hid_width = 5,
1239	.parent_map = gcc_xo_gpll0_map,
1240	.clkr.hw.init = &(struct clk_init_data) {
1241		.name = "usb0_lfps_clk_src",
1242		.parent_data = gcc_xo_gpll0,
1243		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
1244		.ops = &clk_rcg2_ops,
1245	},
1246};
1247
1248static struct clk_rcg2 usb0_master_clk_src = {
1249	.cmd_rcgr = 0x3e00c,
1250	.freq_tbl = ftbl_gp_clk_src,
1251	.mnd_width = 8,
1252	.hid_width = 5,
1253	.parent_map = gcc_xo_gpll0_out_main_div2_gpll0_map,
1254	.clkr.hw.init = &(struct clk_init_data) {
1255		.name = "usb0_master_clk_src",
1256		.parent_data = gcc_xo_gpll0_out_main_div2_gpll0,
1257		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_out_main_div2_gpll0),
1258		.ops = &clk_rcg2_ops,
1259	},
1260};
1261
1262static const struct freq_tbl ftbl_usb0_mock_utmi_clk_src[] = {
1263	F(60000000, P_GPLL4, 10, 1, 2),
1264	{ }
1265};
1266
1267static struct clk_rcg2 usb0_mock_utmi_clk_src = {
1268	.cmd_rcgr = 0x3e020,
1269	.freq_tbl = ftbl_usb0_mock_utmi_clk_src,
1270	.mnd_width = 8,
1271	.hid_width = 5,
1272	.parent_map = gcc_xo_gpll4_gpll0_gpll0_out_main_div2_map2,
1273	.clkr.hw.init = &(struct clk_init_data) {
1274		.name = "usb0_mock_utmi_clk_src",
1275		.parent_data = gcc_xo_gpll4_gpll0_gpll0_out_main_div2,
1276		.num_parents = ARRAY_SIZE(gcc_xo_gpll4_gpll0_gpll0_out_main_div2),
1277		.ops = &clk_rcg2_ops,
1278	},
1279};
1280
1281static struct clk_regmap_mux usb0_pipe_clk_src = {
1282	.reg = 0x3e048,
1283	.shift = 8,
1284	.width = 2,
1285	.parent_map = gcc_usb3phy_0_cc_pipe_clk_xo_map,
1286	.clkr = {
1287		.hw.init = &(struct clk_init_data) {
1288			.name = "usb0_pipe_clk_src",
1289			.parent_data = gcc_usb3phy_0_cc_pipe_clk_xo,
1290			.num_parents = ARRAY_SIZE(gcc_usb3phy_0_cc_pipe_clk_xo),
1291			.ops = &clk_regmap_mux_closest_ops,
1292			.flags = CLK_SET_RATE_PARENT,
1293		},
1294	},
1295};
1296
1297static const struct freq_tbl ftbl_q6_axi_clk_src[] = {
1298	F(400000000, P_GPLL0, 2, 0, 0),
1299	{ }
1300};
1301
1302static struct clk_rcg2 q6_axi_clk_src = {
1303	.cmd_rcgr = 0x59120,
1304	.freq_tbl = ftbl_q6_axi_clk_src,
1305	.hid_width = 5,
1306	.parent_map = gcc_xo_gpll0_gpll2_gpll4_map,
1307	.clkr.hw.init = &(struct clk_init_data) {
1308		.name = "q6_axi_clk_src",
1309		.parent_data = gcc_xo_gpll0_gpll2_gpll4,
1310		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll2_gpll4),
1311		.ops = &clk_rcg2_ops,
1312	},
1313};
1314
1315static const struct freq_tbl ftbl_wcss_ahb_clk_src[] = {
1316	F(133333333, P_GPLL0, 6, 0, 0),
1317	{ }
1318};
1319
1320static struct clk_rcg2 wcss_ahb_clk_src = {
1321	.cmd_rcgr = 0x59020,
1322	.freq_tbl = ftbl_wcss_ahb_clk_src,
1323	.hid_width = 5,
1324	.parent_map = gcc_xo_gpll0_map,
1325	.clkr.hw.init = &(struct clk_init_data) {
1326		.name = "wcss_ahb_clk_src",
1327		.parent_data = gcc_xo_gpll0,
1328		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
1329		.ops = &clk_rcg2_ops,
1330	},
1331};
1332
1333static struct clk_branch gcc_sleep_clk_src = {
1334	.halt_reg = 0x30000,
1335	.clkr = {
1336		.enable_reg = 0x30000,
1337		.enable_mask = BIT(1),
1338		.hw.init = &(struct clk_init_data) {
1339			.name = "gcc_sleep_clk_src",
1340			.parent_data = gcc_sleep_clk_data,
1341			.num_parents = ARRAY_SIZE(gcc_sleep_clk_data),
1342			.ops = &clk_branch2_ops,
1343		},
1344	},
1345};
1346
1347static struct clk_branch gcc_xo_clk_src = {
1348	.halt_reg = 0x30018,
1349	.clkr = {
1350		.enable_reg = 0x30018,
1351		.enable_mask = BIT(1),
1352		.hw.init = &(struct clk_init_data) {
1353			.name = "gcc_xo_clk_src",
1354			.parent_data = gcc_xo_data,
1355			.num_parents = ARRAY_SIZE(gcc_xo_data),
1356			.flags = CLK_SET_RATE_PARENT,
1357			.ops = &clk_branch2_ops,
1358		},
1359	},
1360};
1361
1362static struct clk_branch gcc_xo_clk = {
1363	.halt_reg = 0x30030,
1364	.clkr = {
1365		.enable_reg = 0x30030,
1366		.enable_mask = BIT(0),
1367		.hw.init = &(struct clk_init_data) {
1368			.name = "gcc_xo_clk",
1369			.parent_hws = (const struct clk_hw *[]) {
1370				&gcc_xo_clk_src.clkr.hw,
1371			},
1372			.num_parents = 1,
1373			.flags = CLK_SET_RATE_PARENT,
1374			.ops = &clk_branch2_ops,
1375		},
1376	},
1377};
1378
1379static struct clk_branch gcc_adss_pwm_clk = {
1380	.halt_reg = 0x1f020,
1381	.clkr = {
1382		.enable_reg = 0x1f020,
1383		.enable_mask = BIT(0),
1384		.hw.init = &(struct clk_init_data) {
1385			.name = "gcc_adss_pwm_clk",
1386			.parent_hws = (const struct clk_hw *[]) {
1387				&adss_pwm_clk_src.clkr.hw,
1388			},
1389			.num_parents = 1,
1390			.flags = CLK_SET_RATE_PARENT,
1391			.ops = &clk_branch2_ops,
1392		},
1393	},
1394};
1395
1396static struct clk_branch gcc_blsp1_ahb_clk = {
1397	.halt_reg = 0x01008,
1398	.halt_check = BRANCH_HALT_VOTED,
1399	.clkr = {
1400		.enable_reg = 0x0b004,
1401		.enable_mask = BIT(10),
1402		.hw.init = &(struct clk_init_data) {
1403			.name = "gcc_blsp1_ahb_clk",
1404			.parent_hws = (const struct clk_hw *[]) {
1405				&pcnoc_clk_src.hw,
1406			},
1407			.num_parents = 1,
1408			.flags = CLK_SET_RATE_PARENT,
1409			.ops = &clk_branch2_ops,
1410		},
1411	},
1412};
1413
1414static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
1415	.halt_reg = 0x02008,
1416	.clkr = {
1417		.enable_reg = 0x02008,
1418		.enable_mask = BIT(0),
1419		.hw.init = &(struct clk_init_data) {
1420			.name = "gcc_blsp1_qup1_i2c_apps_clk",
1421			.parent_hws = (const struct clk_hw *[]) {
1422				&blsp1_qup1_i2c_apps_clk_src.clkr.hw,
1423			},
1424			.num_parents = 1,
1425			.flags = CLK_SET_RATE_PARENT,
1426			.ops = &clk_branch2_ops,
1427		},
1428	},
1429};
1430
1431static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
1432	.halt_reg = 0x02004,
1433	.clkr = {
1434		.enable_reg = 0x02004,
1435		.enable_mask = BIT(0),
1436		.hw.init = &(struct clk_init_data) {
1437			.name = "gcc_blsp1_qup1_spi_apps_clk",
1438			.parent_hws = (const struct clk_hw *[]) {
1439				&blsp1_qup1_spi_apps_clk_src.clkr.hw,
1440			},
1441			.num_parents = 1,
1442			.flags = CLK_SET_RATE_PARENT,
1443			.ops = &clk_branch2_ops,
1444		},
1445	},
1446};
1447
1448static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
1449	.halt_reg = 0x03010,
1450	.clkr = {
1451		.enable_reg = 0x03010,
1452		.enable_mask = BIT(0),
1453		.hw.init = &(struct clk_init_data) {
1454			.name = "gcc_blsp1_qup2_i2c_apps_clk",
1455			.parent_hws = (const struct clk_hw *[]) {
1456				&blsp1_qup2_i2c_apps_clk_src.clkr.hw,
1457			},
1458			.num_parents = 1,
1459			.flags = CLK_SET_RATE_PARENT,
1460			.ops = &clk_branch2_ops,
1461		},
1462	},
1463};
1464
1465static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
1466	.halt_reg = 0x0300c,
1467	.clkr = {
1468		.enable_reg = 0x0300c,
1469		.enable_mask = BIT(0),
1470		.hw.init = &(struct clk_init_data) {
1471			.name = "gcc_blsp1_qup2_spi_apps_clk",
1472			.parent_hws = (const struct clk_hw *[]) {
1473				&blsp1_qup2_spi_apps_clk_src.clkr.hw,
1474			},
1475			.num_parents = 1,
1476			.flags = CLK_SET_RATE_PARENT,
1477			.ops = &clk_branch2_ops,
1478		},
1479	},
1480};
1481
1482static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
1483	.halt_reg = 0x04010,
1484	.clkr = {
1485		.enable_reg = 0x04010,
1486		.enable_mask = BIT(0),
1487		.hw.init = &(struct clk_init_data) {
1488			.name = "gcc_blsp1_qup3_i2c_apps_clk",
1489			.parent_hws = (const struct clk_hw *[]) {
1490				&blsp1_qup3_i2c_apps_clk_src.clkr.hw,
1491			},
1492			.num_parents = 1,
1493			.flags = CLK_SET_RATE_PARENT,
1494			.ops = &clk_branch2_ops,
1495		},
1496	},
1497};
1498
1499static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
1500	.halt_reg = 0x0400c,
1501	.clkr = {
1502		.enable_reg = 0x0400c,
1503		.enable_mask = BIT(0),
1504		.hw.init = &(struct clk_init_data) {
1505			.name = "gcc_blsp1_qup3_spi_apps_clk",
1506			.parent_hws = (const struct clk_hw *[]) {
1507				&blsp1_qup3_spi_apps_clk_src.clkr.hw,
1508			},
1509			.num_parents = 1,
1510			.flags = CLK_SET_RATE_PARENT,
1511			.ops = &clk_branch2_ops,
1512		},
1513	},
1514};
1515
1516static struct clk_branch gcc_blsp1_uart1_apps_clk = {
1517	.halt_reg = 0x0203c,
1518	.clkr = {
1519		.enable_reg = 0x0203c,
1520		.enable_mask = BIT(0),
1521		.hw.init = &(struct clk_init_data) {
1522			.name = "gcc_blsp1_uart1_apps_clk",
1523			.parent_hws = (const struct clk_hw *[]) {
1524				&blsp1_uart1_apps_clk_src.clkr.hw,
1525			},
1526			.num_parents = 1,
1527			.flags = CLK_SET_RATE_PARENT,
1528			.ops = &clk_branch2_ops,
1529		},
1530	},
1531};
1532
1533static struct clk_branch gcc_blsp1_uart2_apps_clk = {
1534	.halt_reg = 0x0302c,
1535	.clkr = {
1536		.enable_reg = 0x0302c,
1537		.enable_mask = BIT(0),
1538		.hw.init = &(struct clk_init_data) {
1539			.name = "gcc_blsp1_uart2_apps_clk",
1540			.parent_hws = (const struct clk_hw *[]) {
1541				&blsp1_uart2_apps_clk_src.clkr.hw,
1542			},
1543			.num_parents = 1,
1544			.flags = CLK_SET_RATE_PARENT,
1545			.ops = &clk_branch2_ops,
1546		},
1547	},
1548};
1549
1550static struct clk_branch gcc_btss_lpo_clk = {
1551	.halt_reg = 0x1c004,
1552	.clkr = {
1553		.enable_reg = 0x1c004,
1554		.enable_mask = BIT(0),
1555		.hw.init = &(struct clk_init_data) {
1556			.name = "gcc_btss_lpo_clk",
1557			.ops = &clk_branch2_ops,
1558		},
1559	},
1560};
1561
1562static struct clk_branch gcc_cmn_blk_ahb_clk = {
1563	.halt_reg = 0x56308,
1564	.clkr = {
1565		.enable_reg = 0x56308,
1566		.enable_mask = BIT(0),
1567		.hw.init = &(struct clk_init_data) {
1568			.name = "gcc_cmn_blk_ahb_clk",
1569			.parent_hws = (const struct clk_hw *[]) {
1570				&pcnoc_clk_src.hw,
1571			},
1572			.num_parents = 1,
1573			.flags = CLK_SET_RATE_PARENT,
1574			.ops = &clk_branch2_ops,
1575		},
1576	},
1577};
1578
1579static struct clk_branch gcc_cmn_blk_sys_clk = {
1580	.halt_reg = 0x5630c,
1581	.clkr = {
1582		.enable_reg = 0x5630c,
1583		.enable_mask = BIT(0),
1584		.hw.init = &(struct clk_init_data) {
1585			.name = "gcc_cmn_blk_sys_clk",
1586			.parent_hws = (const struct clk_hw *[]) {
1587				&gcc_xo_clk_src.clkr.hw,
1588			},
1589			.num_parents = 1,
1590			.flags = CLK_SET_RATE_PARENT,
1591			.ops = &clk_branch2_ops,
1592		},
1593	},
1594};
1595
1596static struct clk_branch gcc_crypto_ahb_clk = {
1597	.halt_reg = 0x16024,
1598	.halt_check = BRANCH_HALT_VOTED,
1599	.clkr = {
1600		.enable_reg = 0x0b004,
1601		.enable_mask = BIT(0),
1602		.hw.init = &(struct clk_init_data) {
1603			.name = "gcc_crypto_ahb_clk",
1604			.parent_hws = (const struct clk_hw *[]) {
1605				&pcnoc_clk_src.hw,
1606			},
1607			.num_parents = 1,
1608			.flags = CLK_SET_RATE_PARENT,
1609			.ops = &clk_branch2_ops,
1610		},
1611	},
1612};
1613
1614static struct clk_branch gcc_crypto_axi_clk = {
1615	.halt_reg = 0x16020,
1616	.halt_check = BRANCH_HALT_VOTED,
1617	.clkr = {
1618		.enable_reg = 0x0b004,
1619		.enable_mask = BIT(1),
1620		.hw.init = &(struct clk_init_data) {
1621			.name = "gcc_crypto_axi_clk",
1622			.parent_hws = (const struct clk_hw *[]) {
1623				&pcnoc_clk_src.hw,
1624			},
1625			.num_parents = 1,
1626			.flags = CLK_SET_RATE_PARENT,
1627			.ops = &clk_branch2_ops,
1628		},
1629	},
1630};
1631
1632static struct clk_branch gcc_crypto_clk = {
1633	.halt_reg = 0x1601c,
1634	.halt_check = BRANCH_HALT_VOTED,
1635	.clkr = {
1636		.enable_reg = 0x0b004,
1637		.enable_mask = BIT(2),
1638		.hw.init = &(struct clk_init_data) {
1639			.name = "gcc_crypto_clk",
1640			.parent_hws = (const struct clk_hw *[]) {
1641				&crypto_clk_src.clkr.hw,
1642			},
1643			.num_parents = 1,
1644			.flags = CLK_SET_RATE_PARENT,
1645			.ops = &clk_branch2_ops,
1646		},
1647	},
1648};
1649
1650static struct clk_branch gcc_dcc_clk = {
1651	.halt_reg = 0x77004,
1652	.clkr = {
1653		.enable_reg = 0x77004,
1654		.enable_mask = BIT(0),
1655		.hw.init = &(struct clk_init_data) {
1656			.name = "gcc_dcc_clk",
1657			.parent_hws = (const struct clk_hw *[]) {
1658				&pcnoc_clk_src.hw,
1659			},
1660			.num_parents = 1,
1661			.flags = CLK_SET_RATE_PARENT,
1662			.ops = &clk_branch2_ops,
1663		},
1664	},
1665};
1666
1667static struct clk_branch gcc_gephy_rx_clk = {
1668	.halt_reg = 0x56010,
1669	.halt_check = BRANCH_HALT_DELAY,
1670	.clkr = {
1671		.enable_reg = 0x56010,
1672		.enable_mask = BIT(0),
1673		.hw.init = &(struct clk_init_data) {
1674			.name = "gcc_gephy_rx_clk",
1675			.parent_hws = (const struct clk_hw *[]) {
1676				&gmac0_rx_div_clk_src.clkr.hw,
1677			},
1678			.num_parents = 1,
1679			.ops = &clk_branch2_ops,
1680			.flags = CLK_SET_RATE_PARENT,
1681		},
1682	},
1683};
1684
1685static struct clk_branch gcc_gephy_tx_clk = {
1686	.halt_reg = 0x56014,
1687	.halt_check = BRANCH_HALT_DELAY,
1688	.clkr = {
1689		.enable_reg = 0x56014,
1690		.enable_mask = BIT(0),
1691		.hw.init = &(struct clk_init_data) {
1692			.name = "gcc_gephy_tx_clk",
1693			.parent_hws = (const struct clk_hw *[]) {
1694				&gmac0_tx_div_clk_src.clkr.hw,
1695			},
1696			.num_parents = 1,
1697			.ops = &clk_branch2_ops,
1698			.flags = CLK_SET_RATE_PARENT,
1699		},
1700	},
1701};
1702
1703static struct clk_branch gcc_gmac0_cfg_clk = {
1704	.halt_reg = 0x68304,
1705	.clkr = {
1706		.enable_reg = 0x68304,
1707		.enable_mask = BIT(0),
1708		.hw.init = &(struct clk_init_data) {
1709			.name = "gcc_gmac0_cfg_clk",
1710			.parent_hws = (const struct clk_hw *[]) {
1711				&gmac_clk_src.clkr.hw,
1712			},
1713			.num_parents = 1,
1714			.flags = CLK_SET_RATE_PARENT,
1715			.ops = &clk_branch2_ops,
1716		},
1717	},
1718};
1719
1720static struct clk_branch gcc_gmac0_ptp_clk = {
1721	.halt_reg = 0x68300,
1722	.clkr = {
1723		.enable_reg = 0x68300,
1724		.enable_mask = BIT(0),
1725		.hw.init = &(struct clk_init_data) {
1726			.name = "gcc_gmac0_ptp_clk",
1727			.parent_hws = (const struct clk_hw *[]) {
1728				&gmac_clk_src.clkr.hw,
1729			},
1730			.num_parents = 1,
1731			.flags = CLK_SET_RATE_PARENT,
1732			.ops = &clk_branch2_ops,
1733		},
1734	},
1735};
1736
1737static struct clk_branch gcc_gmac0_rx_clk = {
1738	.halt_reg = 0x68240,
1739	.clkr = {
1740		.enable_reg = 0x68240,
1741		.enable_mask = BIT(0),
1742		.hw.init = &(struct clk_init_data) {
1743			.name = "gcc_gmac0_rx_clk",
1744			.parent_hws = (const struct clk_hw *[]) {
1745				&gmac0_rx_div_clk_src.clkr.hw,
1746			},
1747			.num_parents = 1,
1748			.ops = &clk_branch2_ops,
1749			.flags = CLK_SET_RATE_PARENT,
1750		},
1751	},
1752};
1753
1754static struct clk_branch gcc_gmac0_sys_clk = {
1755	.halt_reg = 0x68190,
1756	.halt_check = BRANCH_HALT_DELAY,
1757	.halt_bit = 31,
1758	.clkr = {
1759		.enable_reg = 0x68190,
1760		.enable_mask = BIT(0),
1761		.hw.init = &(struct clk_init_data) {
1762			.name = "gcc_gmac0_sys_clk",
1763			.parent_hws = (const struct clk_hw *[]) {
1764				&gmac_clk_src.clkr.hw,
1765			},
1766			.num_parents = 1,
1767			.flags = CLK_SET_RATE_PARENT,
1768			.ops = &clk_branch2_ops,
1769		},
1770	},
1771};
1772
1773static struct clk_branch gcc_gmac0_tx_clk = {
1774	.halt_reg = 0x68244,
1775	.clkr = {
1776		.enable_reg = 0x68244,
1777		.enable_mask = BIT(0),
1778		.hw.init = &(struct clk_init_data) {
1779			.name = "gcc_gmac0_tx_clk",
1780			.parent_hws = (const struct clk_hw *[]) {
1781				&gmac0_tx_div_clk_src.clkr.hw,
1782			},
1783			.num_parents = 1,
1784			.ops = &clk_branch2_ops,
1785			.flags = CLK_SET_RATE_PARENT,
1786		},
1787	},
1788};
1789
1790static struct clk_branch gcc_gmac1_cfg_clk = {
1791	.halt_reg = 0x68324,
1792	.clkr = {
1793		.enable_reg = 0x68324,
1794		.enable_mask = BIT(0),
1795		.hw.init = &(struct clk_init_data) {
1796			.name = "gcc_gmac1_cfg_clk",
1797			.parent_hws = (const struct clk_hw *[]) {
1798				&gmac_clk_src.clkr.hw,
1799			},
1800			.num_parents = 1,
1801			.flags = CLK_SET_RATE_PARENT,
1802			.ops = &clk_branch2_ops,
1803		},
1804	},
1805};
1806
1807static struct clk_branch gcc_gmac1_ptp_clk = {
1808	.halt_reg = 0x68320,
1809	.clkr = {
1810		.enable_reg = 0x68320,
1811		.enable_mask = BIT(0),
1812		.hw.init = &(struct clk_init_data) {
1813			.name = "gcc_gmac1_ptp_clk",
1814			.parent_hws = (const struct clk_hw *[]) {
1815				&gmac_clk_src.clkr.hw,
1816			},
1817			.num_parents = 1,
1818			.flags = CLK_SET_RATE_PARENT,
1819			.ops = &clk_branch2_ops,
1820		},
1821	},
1822};
1823
1824static struct clk_branch gcc_gmac1_rx_clk = {
1825	.halt_reg = 0x68248,
1826	.clkr = {
1827		.enable_reg = 0x68248,
1828		.enable_mask = BIT(0),
1829		.hw.init = &(struct clk_init_data) {
1830			.name = "gcc_gmac1_rx_clk",
1831			.parent_hws = (const struct clk_hw *[]) {
1832				&gmac1_rx_div_clk_src.clkr.hw,
1833			},
1834			.num_parents = 1,
1835			.ops = &clk_branch2_ops,
1836			.flags = CLK_SET_RATE_PARENT,
1837		},
1838	},
1839};
1840
1841static struct clk_branch gcc_gmac1_sys_clk = {
1842	.halt_reg = 0x68310,
1843	.clkr = {
1844		.enable_reg = 0x68310,
1845		.enable_mask = BIT(0),
1846		.hw.init = &(struct clk_init_data) {
1847			.name = "gcc_gmac1_sys_clk",
1848			.parent_hws = (const struct clk_hw *[]) {
1849				&gmac_clk_src.clkr.hw,
1850			},
1851			.num_parents = 1,
1852			.flags = CLK_SET_RATE_PARENT,
1853			.ops = &clk_branch2_ops,
1854		},
1855	},
1856};
1857
1858static struct clk_branch gcc_gmac1_tx_clk = {
1859	.halt_reg = 0x6824c,
1860	.clkr = {
1861		.enable_reg = 0x6824c,
1862		.enable_mask = BIT(0),
1863		.hw.init = &(struct clk_init_data) {
1864			.name = "gcc_gmac1_tx_clk",
1865			.parent_hws = (const struct clk_hw *[]) {
1866				&gmac1_tx_div_clk_src.clkr.hw,
1867			},
1868			.num_parents = 1,
1869			.ops = &clk_branch2_ops,
1870			.flags = CLK_SET_RATE_PARENT,
1871		},
1872	},
1873};
1874
1875static struct clk_branch gcc_gp1_clk = {
1876	.halt_reg = 0x08000,
1877	.clkr = {
1878		.enable_reg = 0x08000,
1879		.enable_mask = BIT(0),
1880		.hw.init = &(struct clk_init_data) {
1881			.name = "gcc_gp1_clk",
1882			.parent_hws = (const struct clk_hw *[]) {
1883				&gp1_clk_src.clkr.hw,
1884			},
1885			.num_parents = 1,
1886			.flags = CLK_SET_RATE_PARENT,
1887			.ops = &clk_branch2_ops,
1888		},
1889	},
1890};
1891
1892static struct clk_branch gcc_gp2_clk = {
1893	.halt_reg = 0x09000,
1894	.clkr = {
1895		.enable_reg = 0x09000,
1896		.enable_mask = BIT(0),
1897		.hw.init = &(struct clk_init_data) {
1898			.name = "gcc_gp2_clk",
1899			.parent_hws = (const struct clk_hw *[]) {
1900				&gp2_clk_src.clkr.hw,
1901			},
1902			.num_parents = 1,
1903			.flags = CLK_SET_RATE_PARENT,
1904			.ops = &clk_branch2_ops,
1905		},
1906	},
1907};
1908
1909static struct clk_branch gcc_gp3_clk = {
1910	.halt_reg = 0x0a000,
1911	.clkr = {
1912		.enable_reg = 0x0a000,
1913		.enable_mask = BIT(0),
1914		.hw.init = &(struct clk_init_data) {
1915			.name = "gcc_gp3_clk",
1916			.parent_hws = (const struct clk_hw *[]) {
1917				&gp3_clk_src.clkr.hw,
1918			},
1919			.num_parents = 1,
1920			.flags = CLK_SET_RATE_PARENT,
1921			.ops = &clk_branch2_ops,
1922		},
1923	},
1924};
1925
1926static struct clk_branch gcc_lpass_core_axim_clk = {
1927	.halt_reg = 0x2e048,
1928	.halt_check = BRANCH_VOTED,
1929	.clkr = {
1930		.enable_reg = 0x2e048,
1931		.enable_mask = BIT(0),
1932		.hw.init = &(struct clk_init_data) {
1933			.name = "gcc_lpass_core_axim_clk",
1934			.parent_hws = (const struct clk_hw *[]) {
1935				&lpass_axim_clk_src.clkr.hw,
1936			},
1937			.num_parents = 1,
1938			.flags = CLK_SET_RATE_PARENT,
1939			.ops = &clk_branch2_ops,
1940		},
1941	},
1942};
1943
1944static struct clk_branch gcc_lpass_sway_clk = {
1945	.halt_reg = 0x2e04c,
1946	.clkr = {
1947		.enable_reg = 0x2e04c,
1948		.enable_mask = BIT(0),
1949		.hw.init = &(struct clk_init_data) {
1950			.name = "gcc_lpass_sway_clk",
1951			.parent_hws = (const struct clk_hw *[]) {
1952				&lpass_sway_clk_src.clkr.hw,
1953			},
1954			.num_parents = 1,
1955			.flags = CLK_SET_RATE_PARENT,
1956			.ops = &clk_branch2_ops,
1957		},
1958	},
1959};
1960
1961static struct clk_branch gcc_mdio0_ahb_clk = {
1962	.halt_reg = 0x58004,
1963	.clkr = {
1964		.enable_reg = 0x58004,
1965		.enable_mask = BIT(0),
1966		.hw.init = &(struct clk_init_data) {
1967			.name = "gcc_mdioi0_ahb_clk",
1968			.parent_hws = (const struct clk_hw *[]) {
1969				&pcnoc_clk_src.hw,
1970			},
1971			.num_parents = 1,
1972			.flags = CLK_SET_RATE_PARENT,
1973			.ops = &clk_branch2_ops,
1974		},
1975	},
1976};
1977
1978static struct clk_branch gcc_mdio1_ahb_clk = {
1979	.halt_reg = 0x58014,
1980	.clkr = {
1981		.enable_reg = 0x58014,
1982		.enable_mask = BIT(0),
1983		.hw.init = &(struct clk_init_data) {
1984			.name = "gcc_mdio1_ahb_clk",
1985			.parent_hws = (const struct clk_hw *[]) {
1986				&pcnoc_clk_src.hw,
1987			},
1988			.num_parents = 1,
1989			.flags = CLK_SET_RATE_PARENT,
1990			.ops = &clk_branch2_ops,
1991		},
1992	},
1993};
1994
1995static struct clk_branch gcc_pcie0_ahb_clk = {
1996	.halt_reg = 0x75010,
1997	.clkr = {
1998		.enable_reg = 0x75010,
1999		.enable_mask = BIT(0),
2000		.hw.init = &(struct clk_init_data) {
2001			.name = "gcc_pcie0_ahb_clk",
2002			.parent_hws = (const struct clk_hw *[]) {
2003				&pcnoc_clk_src.hw,
2004			},
2005			.num_parents = 1,
2006			.flags = CLK_SET_RATE_PARENT,
2007			.ops = &clk_branch2_ops,
2008		},
2009	},
2010};
2011
2012static struct clk_branch gcc_pcie0_aux_clk = {
2013	.halt_reg = 0x75014,
2014	.clkr = {
2015		.enable_reg = 0x75014,
2016		.enable_mask = BIT(0),
2017		.hw.init = &(struct clk_init_data) {
2018			.name = "gcc_pcie0_aux_clk",
2019			.parent_hws = (const struct clk_hw *[]) {
2020				&pcie0_aux_clk_src.clkr.hw,
2021			},
2022			.num_parents = 1,
2023			.flags = CLK_SET_RATE_PARENT,
2024			.ops = &clk_branch2_ops,
2025		},
2026	},
2027};
2028
2029static struct clk_branch gcc_pcie0_axi_m_clk = {
2030	.halt_reg = 0x75008,
2031	.clkr = {
2032		.enable_reg = 0x75008,
2033		.enable_mask = BIT(0),
2034		.hw.init = &(struct clk_init_data) {
2035			.name = "gcc_pcie0_axi_m_clk",
2036			.parent_hws = (const struct clk_hw *[]) {
2037				&pcie0_axi_clk_src.clkr.hw,
2038			},
2039			.num_parents = 1,
2040			.flags = CLK_SET_RATE_PARENT,
2041			.ops = &clk_branch2_ops,
2042		},
2043	},
2044};
2045
2046static struct clk_branch gcc_pcie0_axi_s_bridge_clk = {
2047	.halt_reg = 0x75048,
2048	.clkr = {
2049		.enable_reg = 0x75048,
2050		.enable_mask = BIT(0),
2051		.hw.init = &(struct clk_init_data) {
2052			.name = "gcc_pcie0_axi_s_bridge_clk",
2053			.parent_hws = (const struct clk_hw *[]) {
2054				&pcie0_axi_clk_src.clkr.hw,
2055			},
2056			.num_parents = 1,
2057			.flags = CLK_SET_RATE_PARENT,
2058			.ops = &clk_branch2_ops,
2059		},
2060	},
2061};
2062
2063static struct clk_branch gcc_pcie0_axi_s_clk = {
2064	.halt_reg = 0x7500c,
2065	.clkr = {
2066		.enable_reg = 0x7500c,
2067		.enable_mask = BIT(0),
2068		.hw.init = &(struct clk_init_data) {
2069			.name = "gcc_pcie0_axi_s_clk",
2070			.parent_hws = (const struct clk_hw *[]) {
2071				&pcie0_axi_clk_src.clkr.hw,
2072			},
2073			.num_parents = 1,
2074			.flags = CLK_SET_RATE_PARENT,
2075			.ops = &clk_branch2_ops,
2076		},
2077	},
2078};
2079
2080static struct clk_branch gcc_pcie0_pipe_clk = {
2081	.halt_reg = 0x75018,
2082	.halt_check = BRANCH_HALT_DELAY,
2083	.halt_bit = 31,
2084	.clkr = {
2085		.enable_reg = 0x75018,
2086		.enable_mask = BIT(0),
2087		.hw.init = &(struct clk_init_data) {
2088			.name = "gcc_pcie0_pipe_clk",
2089			.parent_hws = (const struct clk_hw *[]) {
2090				&pcie0_pipe_clk_src.clkr.hw,
2091			},
2092			.num_parents = 1,
2093			.flags = CLK_SET_RATE_PARENT,
2094			.ops = &clk_branch2_ops,
2095		},
2096	},
2097};
2098
2099static struct clk_branch gcc_pcie1_ahb_clk = {
2100	.halt_reg = 0x76010,
2101	.clkr = {
2102		.enable_reg = 0x76010,
2103		.enable_mask = BIT(0),
2104		.hw.init = &(struct clk_init_data) {
2105			.name = "gcc_pcie1_ahb_clk",
2106			.parent_hws = (const struct clk_hw *[]) {
2107				&pcnoc_clk_src.hw,
2108			},
2109			.num_parents = 1,
2110			.flags = CLK_SET_RATE_PARENT,
2111			.ops = &clk_branch2_ops,
2112		},
2113	},
2114};
2115
2116static struct clk_branch gcc_pcie1_aux_clk = {
2117	.halt_reg = 0x76014,
2118	.clkr = {
2119		.enable_reg = 0x76014,
2120		.enable_mask = BIT(0),
2121		.hw.init = &(struct clk_init_data) {
2122			.name = "gcc_pcie1_aux_clk",
2123			.parent_hws = (const struct clk_hw *[]) {
2124				&pcie1_aux_clk_src.clkr.hw,
2125			},
2126			.num_parents = 1,
2127			.flags = CLK_SET_RATE_PARENT,
2128			.ops = &clk_branch2_ops,
2129		},
2130	},
2131};
2132
2133static struct clk_branch gcc_pcie1_axi_m_clk = {
2134	.halt_reg = 0x76008,
2135	.clkr = {
2136		.enable_reg = 0x76008,
2137		.enable_mask = BIT(0),
2138		.hw.init = &(struct clk_init_data) {
2139			.name = "gcc_pcie1_axi_m_clk",
2140			.parent_hws = (const struct clk_hw *[]) {
2141				&pcie1_axi_clk_src.clkr.hw,
2142			},
2143			.num_parents = 1,
2144			.flags = CLK_SET_RATE_PARENT,
2145			.ops = &clk_branch2_ops,
2146		},
2147	},
2148};
2149
2150static struct clk_branch gcc_pcie1_axi_s_bridge_clk = {
2151	.halt_reg = 0x76048,
2152	.clkr = {
2153		.enable_reg = 0x76048,
2154		.enable_mask = BIT(0),
2155		.hw.init = &(struct clk_init_data) {
2156			.name = "gcc_pcie1_axi_s_bridge_clk",
2157			.parent_hws = (const struct clk_hw *[]) {
2158				&pcie1_axi_clk_src.clkr.hw,
2159			},
2160			.num_parents = 1,
2161			.flags = CLK_SET_RATE_PARENT,
2162			.ops = &clk_branch2_ops,
2163		},
2164	},
2165};
2166
2167static struct clk_branch gcc_pcie1_axi_s_clk = {
2168	.halt_reg = 0x7600c,
2169	.clkr = {
2170		.enable_reg = 0x7600c,
2171		.enable_mask = BIT(0),
2172		.hw.init = &(struct clk_init_data) {
2173			.name = "gcc_pcie1_axi_s_clk",
2174			.parent_hws = (const struct clk_hw *[]) {
2175				&pcie1_axi_clk_src.clkr.hw,
2176			},
2177			.num_parents = 1,
2178			.flags = CLK_SET_RATE_PARENT,
2179			.ops = &clk_branch2_ops,
2180		},
2181	},
2182};
2183
2184static struct clk_branch gcc_pcie1_pipe_clk = {
2185	.halt_reg = 0x76018,
2186	.halt_check = BRANCH_HALT_DELAY,
2187	.halt_bit = 31,
2188	.clkr = {
2189		.enable_reg = 0x76018,
2190		.enable_mask = BIT(0),
2191		.hw.init = &(struct clk_init_data) {
2192			.name = "gcc_pcie1_pipe_clk",
2193			.parent_hws = (const struct clk_hw *[]) {
2194				&pcie1_pipe_clk_src.clkr.hw,
2195			},
2196			.num_parents = 1,
2197			.flags = CLK_SET_RATE_PARENT,
2198			.ops = &clk_branch2_ops,
2199		},
2200	},
2201};
2202
2203static struct clk_branch gcc_prng_ahb_clk = {
2204	.halt_reg = 0x13004,
2205	.halt_check = BRANCH_HALT_VOTED,
2206	.clkr = {
2207		.enable_reg = 0x0b004,
2208		.enable_mask = BIT(8),
2209		.hw.init = &(struct clk_init_data) {
2210			.name = "gcc_prng_ahb_clk",
2211			.parent_hws = (const struct clk_hw *[]) {
2212				&pcnoc_clk_src.hw,
2213			},
2214			.num_parents = 1,
2215			.flags = CLK_SET_RATE_PARENT,
2216			.ops = &clk_branch2_ops,
2217		},
2218	},
2219};
2220
2221static struct clk_branch gcc_q6_ahb_clk = {
2222	.halt_reg = 0x59138,
2223	.clkr = {
2224		.enable_reg = 0x59138,
2225		.enable_mask = BIT(0),
2226		.hw.init = &(struct clk_init_data) {
2227			.name = "gcc_q6_ahb_clk",
2228			.parent_hws = (const struct clk_hw *[]) {
2229				&wcss_ahb_clk_src.clkr.hw,
2230			},
2231			.num_parents = 1,
2232			.flags = CLK_SET_RATE_PARENT,
2233			.ops = &clk_branch2_ops,
2234		},
2235	},
2236};
2237
2238static struct clk_branch gcc_q6_ahb_s_clk = {
2239	.halt_reg = 0x5914c,
2240	.clkr = {
2241		.enable_reg = 0x5914c,
2242		.enable_mask = BIT(0),
2243		.hw.init = &(struct clk_init_data) {
2244			.name = "gcc_q6_ahb_s_clk",
2245			.parent_hws = (const struct clk_hw *[]) {
2246				&wcss_ahb_clk_src.clkr.hw,
2247			},
2248			.num_parents = 1,
2249			.flags = CLK_SET_RATE_PARENT,
2250			.ops = &clk_branch2_ops,
2251		},
2252	},
2253};
2254
2255static struct clk_branch gcc_q6_axim_clk = {
2256	.halt_reg = 0x5913c,
2257	.clkr = {
2258		.enable_reg = 0x5913c,
2259		.enable_mask = BIT(0),
2260		.hw.init = &(struct clk_init_data) {
2261			.name = "gcc_q6_axim_clk",
2262			.parent_hws = (const struct clk_hw *[]) {
2263				&q6_axi_clk_src.clkr.hw,
2264			},
2265			.num_parents = 1,
2266			.flags = CLK_SET_RATE_PARENT,
2267			.ops = &clk_branch2_ops,
2268		},
2269	},
2270};
2271
2272static struct clk_branch gcc_q6_axim2_clk = {
2273	.halt_reg = 0x59150,
2274	.clkr = {
2275		.enable_reg = 0x59150,
2276		.enable_mask = BIT(0),
2277		.hw.init = &(struct clk_init_data) {
2278			.name = "gcc_q6_axim2_clk",
2279			.parent_hws = (const struct clk_hw *[]) {
2280				&q6_axi_clk_src.clkr.hw,
2281			},
2282			.num_parents = 1,
2283			.flags = CLK_SET_RATE_PARENT,
2284			.ops = &clk_branch2_ops,
2285		},
2286	},
2287};
2288
2289static struct clk_branch gcc_q6_axis_clk = {
2290	.halt_reg = 0x59154,
2291	.clkr = {
2292		.enable_reg = 0x59154,
2293		.enable_mask = BIT(0),
2294		.hw.init = &(struct clk_init_data) {
2295			.name = "gcc_q6_axis_clk",
2296			.parent_hws = (const struct clk_hw *[]) {
2297				&system_noc_clk_src.hw,
2298			},
2299			.num_parents = 1,
2300			.flags = CLK_SET_RATE_PARENT,
2301			.ops = &clk_branch2_ops,
2302		},
2303	},
2304};
2305
2306static struct clk_branch gcc_q6_tsctr_1to2_clk = {
2307	.halt_reg = 0x59148,
2308	.clkr = {
2309		.enable_reg = 0x59148,
2310		.enable_mask = BIT(0),
2311		.hw.init = &(struct clk_init_data) {
2312			.name = "gcc_q6_tsctr_1to2_clk",
2313			.parent_hws = (const struct clk_hw *[]) {
2314				&qdss_tsctr_div2_clk_src.hw,
2315			},
2316			.num_parents = 1,
2317			.flags = CLK_SET_RATE_PARENT,
2318			.ops = &clk_branch2_ops,
2319		},
2320	},
2321};
2322
2323static struct clk_branch gcc_q6ss_atbm_clk = {
2324	.halt_reg = 0x59144,
2325	.clkr = {
2326		.enable_reg = 0x59144,
2327		.enable_mask = BIT(0),
2328		.hw.init = &(struct clk_init_data) {
2329			.name = "gcc_q6ss_atbm_clk",
2330			.parent_hws = (const struct clk_hw *[]) {
2331				&qdss_at_clk_src.clkr.hw,
2332			},
2333			.num_parents = 1,
2334			.flags = CLK_SET_RATE_PARENT,
2335			.ops = &clk_branch2_ops,
2336		},
2337	},
2338};
2339
2340static struct clk_branch gcc_q6ss_pclkdbg_clk = {
2341	.halt_reg = 0x59140,
2342	.clkr = {
2343		.enable_reg = 0x59140,
2344		.enable_mask = BIT(0),
2345		.hw.init = &(struct clk_init_data) {
2346			.name = "gcc_q6ss_pclkdbg_clk",
2347			.parent_hws = (const struct clk_hw *[]) {
2348				&qdss_dap_sync_clk_src.hw,
2349			},
2350			.num_parents = 1,
2351			.flags = CLK_SET_RATE_PARENT,
2352			.ops = &clk_branch2_ops,
2353		},
2354	},
2355};
2356
2357static struct clk_branch gcc_q6ss_trig_clk = {
2358	.halt_reg = 0x59128,
2359	.clkr = {
2360		.enable_reg = 0x59128,
2361		.enable_mask = BIT(0),
2362		.hw.init = &(struct clk_init_data) {
2363			.name = "gcc_q6ss_trig_clk",
2364			.parent_hws = (const struct clk_hw *[]) {
2365				&qdss_dap_sync_clk_src.hw,
2366			},
2367			.num_parents = 1,
2368			.flags = CLK_SET_RATE_PARENT,
2369			.ops = &clk_branch2_ops,
2370		},
2371	},
2372};
2373
2374static struct clk_branch gcc_qdss_at_clk = {
2375	.halt_reg = 0x29024,
2376	.clkr = {
2377		.enable_reg = 0x29024,
2378		.enable_mask = BIT(0),
2379		.hw.init = &(struct clk_init_data) {
2380			.name = "gcc_qdss_at_clk",
2381			.parent_hws = (const struct clk_hw *[]) {
2382				&qdss_at_clk_src.clkr.hw,
2383			},
2384			.num_parents = 1,
2385			.flags = CLK_SET_RATE_PARENT,
2386			.ops = &clk_branch2_ops,
2387		},
2388	},
2389};
2390
2391static struct clk_branch gcc_qdss_dap_clk = {
2392	.halt_reg = 0x29084,
2393	.clkr = {
2394		.enable_reg = 0x29084,
2395		.enable_mask = BIT(0),
2396		.hw.init = &(struct clk_init_data) {
2397			.name = "gcc_qdss_dap_clk",
2398			.parent_hws = (const struct clk_hw *[]) {
2399				&qdss_tsctr_clk_src.clkr.hw,
2400			},
2401			.num_parents = 1,
2402			.flags = CLK_SET_RATE_PARENT,
2403			.ops = &clk_branch2_ops,
2404		},
2405	},
2406};
2407
2408static struct clk_branch gcc_qdss_cfg_ahb_clk = {
2409	.halt_reg = 0x29008,
2410	.clkr = {
2411		.enable_reg = 0x29008,
2412		.enable_mask = BIT(0),
2413		.hw.init = &(struct clk_init_data) {
2414			.name = "gcc_qdss_cfg_ahb_clk",
2415			.parent_hws = (const struct clk_hw *[]) {
2416				&pcnoc_clk_src.hw,
2417			},
2418			.num_parents = 1,
2419			.flags = CLK_SET_RATE_PARENT,
2420			.ops = &clk_branch2_ops,
2421		},
2422	},
2423};
2424
2425static struct clk_branch gcc_qdss_dap_ahb_clk = {
2426	.halt_reg = 0x29004,
2427	.clkr = {
2428		.enable_reg = 0x29004,
2429		.enable_mask = BIT(0),
2430		.hw.init = &(struct clk_init_data) {
2431			.name = "gcc_qdss_dap_ahb_clk",
2432			.parent_hws = (const struct clk_hw *[]) {
2433				&pcnoc_clk_src.hw,
2434			},
2435			.num_parents = 1,
2436			.flags = CLK_SET_RATE_PARENT,
2437			.ops = &clk_branch2_ops,
2438		},
2439	},
2440};
2441
2442static struct clk_branch gcc_qdss_etr_usb_clk = {
2443	.halt_reg = 0x29028,
2444	.clkr = {
2445		.enable_reg = 0x29028,
2446		.enable_mask = BIT(0),
2447		.hw.init = &(struct clk_init_data) {
2448			.name = "gcc_qdss_etr_usb_clk",
2449			.parent_hws = (const struct clk_hw *[]) {
2450				&system_noc_clk_src.hw,
2451			},
2452			.num_parents = 1,
2453			.flags = CLK_SET_RATE_PARENT,
2454			.ops = &clk_branch2_ops,
2455		},
2456	},
2457};
2458
2459static struct clk_branch gcc_qdss_eud_at_clk = {
2460	.halt_reg = 0x29020,
2461	.clkr = {
2462		.enable_reg = 0x29020,
2463		.enable_mask = BIT(0),
2464		.hw.init = &(struct clk_init_data) {
2465			.name = "gcc_qdss_eud_at_clk",
2466			.parent_hws = (const struct clk_hw *[]) {
2467				&eud_at_clk_src.hw,
2468			},
2469			.num_parents = 1,
2470			.flags = CLK_SET_RATE_PARENT,
2471			.ops = &clk_branch2_ops,
2472		},
2473	},
2474};
2475
2476static struct clk_branch gcc_qdss_stm_clk = {
2477	.halt_reg = 0x29044,
2478	.clkr = {
2479		.enable_reg = 0x29044,
2480		.enable_mask = BIT(0),
2481		.hw.init = &(struct clk_init_data) {
2482			.name = "gcc_qdss_stm_clk",
2483			.parent_hws = (const struct clk_hw *[]) {
2484				&qdss_stm_clk_src.clkr.hw,
2485			},
2486			.num_parents = 1,
2487			.flags = CLK_SET_RATE_PARENT,
2488			.ops = &clk_branch2_ops,
2489		},
2490	},
2491};
2492
2493static struct clk_branch gcc_qdss_traceclkin_clk = {
2494	.halt_reg = 0x29060,
2495	.clkr = {
2496		.enable_reg = 0x29060,
2497		.enable_mask = BIT(0),
2498		.hw.init = &(struct clk_init_data) {
2499			.name = "gcc_qdss_traceclkin_clk",
2500			.parent_hws = (const struct clk_hw *[]) {
2501				&qdss_traceclkin_clk_src.clkr.hw,
2502			},
2503			.num_parents = 1,
2504			.flags = CLK_SET_RATE_PARENT,
2505			.ops = &clk_branch2_ops,
2506		},
2507	},
2508};
2509
2510static struct clk_branch gcc_qdss_tsctr_div8_clk = {
2511	.halt_reg = 0x2908c,
2512	.clkr = {
2513		.enable_reg = 0x2908c,
2514		.enable_mask = BIT(0),
2515		.hw.init = &(struct clk_init_data) {
2516			.name = "gcc_qdss_tsctr_div8_clk",
2517			.parent_hws = (const struct clk_hw *[]) {
2518				&qdss_tsctr_clk_src.clkr.hw,
2519			},
2520			.num_parents = 1,
2521			.flags = CLK_SET_RATE_PARENT,
2522			.ops = &clk_branch2_ops,
2523		},
2524	},
2525};
2526
2527static struct clk_branch gcc_qpic_ahb_clk = {
2528	.halt_reg = 0x57024,
2529	.clkr = {
2530		.enable_reg = 0x57024,
2531		.enable_mask = BIT(0),
2532		.hw.init = &(struct clk_init_data) {
2533			.name = "gcc_qpic_ahb_clk",
2534			.parent_hws = (const struct clk_hw *[]) {
2535				&pcnoc_clk_src.hw,
2536			},
2537			.num_parents = 1,
2538			.flags = CLK_SET_RATE_PARENT,
2539			.ops = &clk_branch2_ops,
2540		},
2541	},
2542};
2543
2544static struct clk_branch gcc_qpic_clk = {
2545	.halt_reg = 0x57020,
2546	.clkr = {
2547		.enable_reg = 0x57020,
2548		.enable_mask = BIT(0),
2549		.hw.init = &(struct clk_init_data) {
2550			.name = "gcc_qpic_clk",
2551			.parent_hws = (const struct clk_hw *[]) {
2552				&pcnoc_clk_src.hw,
2553			},
2554			.num_parents = 1,
2555			.flags = CLK_SET_RATE_PARENT,
2556			.ops = &clk_branch2_ops,
2557		},
2558	},
2559};
2560
2561static struct clk_branch gcc_qpic_io_macro_clk = {
2562	.halt_reg = 0x5701c,
2563	.clkr = {
2564		.enable_reg = 0x5701c,
2565		.enable_mask = BIT(0),
2566		.hw.init = &(struct clk_init_data) {
2567			.name = "gcc_qpic_io_macro_clk",
2568			.parent_hws = (const struct clk_hw *[]) {
2569				&qpic_io_macro_clk_src.clkr.hw,
2570			},
2571			.num_parents = 1,
2572			.flags = CLK_SET_RATE_PARENT,
2573			.ops = &clk_branch2_ops,
2574		},
2575	},
2576};
2577
2578static struct clk_branch gcc_sdcc1_ahb_clk = {
2579	.halt_reg = 0x4201c,
2580	.clkr = {
2581		.enable_reg = 0x4201c,
2582		.enable_mask = BIT(0),
2583		.hw.init = &(struct clk_init_data) {
2584			.name = "gcc_sdcc1_ahb_clk",
2585			.parent_hws = (const struct clk_hw *[]) {
2586				&pcnoc_clk_src.hw,
2587			},
2588			.num_parents = 1,
2589			.flags = CLK_SET_RATE_PARENT,
2590			.ops = &clk_branch2_ops,
2591		},
2592	},
2593};
2594
2595static struct clk_branch gcc_sdcc1_apps_clk = {
2596	.halt_reg = 0x42018,
2597	.clkr = {
2598		.enable_reg = 0x42018,
2599		.enable_mask = BIT(0),
2600		.hw.init = &(struct clk_init_data) {
2601			.name = "gcc_sdcc1_apps_clk",
2602			.parent_hws = (const struct clk_hw *[]) {
2603				&sdcc1_apps_clk_src.clkr.hw,
2604			},
2605			.num_parents = 1,
2606			.flags = CLK_SET_RATE_PARENT,
2607			.ops = &clk_branch2_ops,
2608		},
2609	},
2610};
2611
2612static struct clk_branch gcc_snoc_gmac0_ahb_clk = {
2613	.halt_reg = 0x260a0,
2614	.clkr = {
2615		.enable_reg = 0x260a0,
2616		.enable_mask = BIT(0),
2617		.hw.init = &(struct clk_init_data) {
2618			.name = "gcc_snoc_gmac0_ahb_clk",
2619			.parent_hws = (const struct clk_hw *[]) {
2620				&gmac_clk_src.clkr.hw,
2621			},
2622			.num_parents = 1,
2623			.flags = CLK_SET_RATE_PARENT,
2624			.ops = &clk_branch2_ops,
2625		},
2626	},
2627};
2628
2629static struct clk_branch gcc_snoc_gmac0_axi_clk = {
2630	.halt_reg = 0x26084,
2631	.clkr = {
2632		.enable_reg = 0x26084,
2633		.enable_mask = BIT(0),
2634		.hw.init = &(struct clk_init_data) {
2635			.name = "gcc_snoc_gmac0_axi_clk",
2636			.parent_hws = (const struct clk_hw *[]) {
2637				&gmac_clk_src.clkr.hw,
2638			},
2639			.num_parents = 1,
2640			.flags = CLK_SET_RATE_PARENT,
2641			.ops = &clk_branch2_ops,
2642		},
2643	},
2644};
2645
2646static struct clk_branch gcc_snoc_gmac1_ahb_clk = {
2647	.halt_reg = 0x260a4,
2648	.clkr = {
2649		.enable_reg = 0x260a4,
2650		.enable_mask = BIT(0),
2651		.hw.init = &(struct clk_init_data) {
2652			.name = "gcc_snoc_gmac1_ahb_clk",
2653			.parent_hws = (const struct clk_hw *[]) {
2654				&gmac_clk_src.clkr.hw,
2655			},
2656			.num_parents = 1,
2657			.flags = CLK_SET_RATE_PARENT,
2658			.ops = &clk_branch2_ops,
2659		},
2660	},
2661};
2662
2663static struct clk_branch gcc_snoc_gmac1_axi_clk = {
2664	.halt_reg = 0x26088,
2665	.clkr = {
2666		.enable_reg = 0x26088,
2667		.enable_mask = BIT(0),
2668		.hw.init = &(struct clk_init_data) {
2669			.name = "gcc_snoc_gmac1_axi_clk",
2670			.parent_hws = (const struct clk_hw *[]) {
2671				&gmac_clk_src.clkr.hw,
2672			},
2673			.num_parents = 1,
2674			.flags = CLK_SET_RATE_PARENT,
2675			.ops = &clk_branch2_ops,
2676		},
2677	},
2678};
2679
2680static struct clk_branch gcc_snoc_lpass_axim_clk = {
2681	.halt_reg = 0x26074,
2682	.clkr = {
2683		.enable_reg = 0x26074,
2684		.enable_mask = BIT(0),
2685		.hw.init = &(struct clk_init_data) {
2686			.name = "gcc_snoc_lpass_axim_clk",
2687			.parent_hws = (const struct clk_hw *[]) {
2688				&lpass_axim_clk_src.clkr.hw,
2689			},
2690			.num_parents = 1,
2691			.flags = CLK_SET_RATE_PARENT,
2692			.ops = &clk_branch2_ops,
2693		},
2694	},
2695};
2696
2697static struct clk_branch gcc_snoc_lpass_sway_clk = {
2698	.halt_reg = 0x26078,
2699	.clkr = {
2700		.enable_reg = 0x26078,
2701		.enable_mask = BIT(0),
2702		.hw.init = &(struct clk_init_data) {
2703			.name = "gcc_snoc_lpass_sway_clk",
2704			.parent_hws = (const struct clk_hw *[]) {
2705				&lpass_sway_clk_src.clkr.hw,
2706			},
2707			.num_parents = 1,
2708			.flags = CLK_SET_RATE_PARENT,
2709			.ops = &clk_branch2_ops,
2710		},
2711	},
2712};
2713
2714static struct clk_branch gcc_snoc_ubi0_axi_clk = {
2715	.halt_reg = 0x26094,
2716	.clkr = {
2717		.enable_reg = 0x26094,
2718		.enable_mask = BIT(0),
2719		.hw.init = &(struct clk_init_data) {
2720			.name = "gcc_snoc_ubi0_axi_clk",
2721			.parent_hws = (const struct clk_hw *[]) {
2722				&ubi0_axi_clk_src.clkr.hw,
2723			},
2724			.num_parents = 1,
2725			.flags = CLK_SET_RATE_PARENT,
2726			.ops = &clk_branch2_ops,
2727		},
2728	},
2729};
2730
2731static struct clk_branch gcc_sys_noc_pcie0_axi_clk = {
2732	.halt_reg = 0x26048,
2733	.clkr = {
2734		.enable_reg = 0x26048,
2735		.enable_mask = BIT(0),
2736		.hw.init = &(struct clk_init_data) {
2737			.name = "gcc_sys_noc_pcie0_axi_clk",
2738			.parent_hws = (const struct clk_hw *[]) {
2739				&pcie0_axi_clk_src.clkr.hw,
2740			},
2741			.num_parents = 1,
2742			.flags = CLK_SET_RATE_PARENT,
2743			.ops = &clk_branch2_ops,
2744		},
2745	},
2746};
2747
2748static struct clk_branch gcc_sys_noc_pcie1_axi_clk = {
2749	.halt_reg = 0x2604c,
2750	.clkr = {
2751		.enable_reg = 0x2604c,
2752		.enable_mask = BIT(0),
2753		.hw.init = &(struct clk_init_data) {
2754			.name = "gcc_sys_noc_pcie1_axi_clk",
2755			.parent_hws = (const struct clk_hw *[]) {
2756				&pcie1_axi_clk_src.clkr.hw,
2757			},
2758			.num_parents = 1,
2759			.flags = CLK_SET_RATE_PARENT,
2760			.ops = &clk_branch2_ops,
2761		},
2762	},
2763};
2764
2765static struct clk_branch gcc_sys_noc_qdss_stm_axi_clk = {
2766	.halt_reg = 0x26024,
2767	.clkr = {
2768		.enable_reg = 0x26024,
2769		.enable_mask = BIT(0),
2770		.hw.init = &(struct clk_init_data) {
2771			.name = "gcc_sys_noc_qdss_stm_axi_clk",
2772			.parent_hws = (const struct clk_hw *[]) {
2773				&qdss_stm_clk_src.clkr.hw,
2774			},
2775			.num_parents = 1,
2776			.flags = CLK_SET_RATE_PARENT,
2777			.ops = &clk_branch2_ops,
2778		},
2779	},
2780};
2781
2782static struct clk_branch gcc_sys_noc_usb0_axi_clk = {
2783	.halt_reg = 0x26040,
2784	.clkr = {
2785		.enable_reg = 0x26040,
2786		.enable_mask = BIT(0),
2787		.hw.init = &(struct clk_init_data) {
2788			.name = "gcc_sys_noc_usb0_axi_clk",
2789			.parent_hws = (const struct clk_hw *[]) {
2790				&usb0_master_clk_src.clkr.hw,
2791			},
2792			.num_parents = 1,
2793			.flags = CLK_SET_RATE_PARENT,
2794			.ops = &clk_branch2_ops,
2795		},
2796	},
2797};
2798
2799static struct clk_branch gcc_sys_noc_wcss_ahb_clk = {
2800	.halt_reg = 0x26034,
2801	.clkr = {
2802		.enable_reg = 0x26034,
2803		.enable_mask = BIT(0),
2804		.hw.init = &(struct clk_init_data) {
2805			.name = "gcc_sys_noc_wcss_ahb_clk",
2806			.parent_hws = (const struct clk_hw *[]) {
2807				&wcss_ahb_clk_src.clkr.hw,
2808			},
2809			.num_parents = 1,
2810			.flags = CLK_SET_RATE_PARENT,
2811			.ops = &clk_branch2_ops,
2812		},
2813	},
2814};
2815
2816static struct clk_branch gcc_ubi0_axi_clk = {
2817	.halt_reg = 0x68200,
2818	.halt_check = BRANCH_HALT_DELAY,
2819	.clkr = {
2820		.enable_reg = 0x68200,
2821		.enable_mask = BIT(0),
2822		.hw.init = &(struct clk_init_data) {
2823			.name = "gcc_ubi0_axi_clk",
2824			.parent_hws = (const struct clk_hw *[]) {
2825				&ubi0_axi_clk_src.clkr.hw,
2826			},
2827			.num_parents = 1,
2828			.flags = CLK_SET_RATE_PARENT,
2829			.ops = &clk_branch2_ops,
2830		},
2831	},
2832};
2833
2834static struct clk_branch gcc_ubi0_cfg_clk = {
2835	.halt_reg = 0x68160,
2836	.halt_check = BRANCH_HALT_DELAY,
2837	.clkr = {
2838		.enable_reg = 0x68160,
2839		.enable_mask = BIT(0),
2840		.hw.init = &(struct clk_init_data) {
2841			.name = "gcc_ubi0_cfg_clk",
2842			.parent_hws = (const struct clk_hw *[]) {
2843				&pcnoc_clk_src.hw,
2844			},
2845			.num_parents = 1,
2846			.flags = CLK_SET_RATE_PARENT,
2847			.ops = &clk_branch2_ops,
2848		},
2849	},
2850};
2851
2852static struct clk_branch gcc_ubi0_dbg_clk = {
2853	.halt_reg = 0x68214,
2854	.halt_check = BRANCH_HALT_DELAY,
2855	.clkr = {
2856		.enable_reg = 0x68214,
2857		.enable_mask = BIT(0),
2858		.hw.init = &(struct clk_init_data) {
2859			.name = "gcc_ubi0_dbg_clk",
2860			.parent_hws = (const struct clk_hw *[]) {
2861				&qdss_tsctr_clk_src.clkr.hw,
2862			},
2863			.num_parents = 1,
2864			.flags = CLK_SET_RATE_PARENT,
2865			.ops = &clk_branch2_ops,
2866		},
2867	},
2868};
2869
2870static struct clk_branch gcc_ubi0_core_clk = {
2871	.halt_reg = 0x68210,
2872	.halt_check = BRANCH_HALT_DELAY,
2873	.clkr = {
2874		.enable_reg = 0x68210,
2875		.enable_mask = BIT(0),
2876		.hw.init = &(struct clk_init_data) {
2877			.name = "gcc_ubi0_core_clk",
2878			.parent_hws = (const struct clk_hw *[]) {
2879				&ubi0_core_clk_src.clkr.hw,
2880			},
2881			.num_parents = 1,
2882			.flags = CLK_SET_RATE_PARENT,
2883			.ops = &clk_branch2_ops,
2884		},
2885	},
2886};
2887
2888static struct clk_branch gcc_ubi0_nc_axi_clk = {
2889	.halt_reg = 0x68204,
2890	.halt_check = BRANCH_HALT_DELAY,
2891	.clkr = {
2892		.enable_reg = 0x68204,
2893		.enable_mask = BIT(0),
2894		.hw.init = &(struct clk_init_data) {
2895			.name = "gcc_ubi0_nc_axi_clk",
2896			.parent_hws = (const struct clk_hw *[]) {
2897				&system_noc_clk_src.hw,
2898			},
2899			.num_parents = 1,
2900			.flags = CLK_SET_RATE_PARENT,
2901			.ops = &clk_branch2_ops,
2902		},
2903	},
2904};
2905
2906static struct clk_branch gcc_ubi0_utcm_clk = {
2907	.halt_reg = 0x68208,
2908	.halt_check = BRANCH_HALT_DELAY,
2909	.clkr = {
2910		.enable_reg = 0x68208,
2911		.enable_mask = BIT(0),
2912		.hw.init = &(struct clk_init_data) {
2913			.name = "gcc_ubi0_utcm_clk",
2914			.parent_hws = (const struct clk_hw *[]) {
2915				&system_noc_clk_src.hw,
2916			},
2917			.num_parents = 1,
2918			.flags = CLK_SET_RATE_PARENT,
2919			.ops = &clk_branch2_ops,
2920		},
2921	},
2922};
2923
2924static struct clk_branch gcc_uniphy_ahb_clk = {
2925	.halt_reg = 0x56108,
2926	.clkr = {
2927		.enable_reg = 0x56108,
2928		.enable_mask = BIT(0),
2929		.hw.init = &(struct clk_init_data) {
2930			.name = "gcc_uniphy_ahb_clk",
2931			.parent_hws = (const struct clk_hw *[]) {
2932				&pcnoc_clk_src.hw,
2933			},
2934			.num_parents = 1,
2935			.flags = CLK_SET_RATE_PARENT,
2936			.ops = &clk_branch2_ops,
2937		},
2938	},
2939};
2940
2941static struct clk_branch gcc_uniphy_rx_clk = {
2942	.halt_reg = 0x56110,
2943	.clkr = {
2944		.enable_reg = 0x56110,
2945		.enable_mask = BIT(0),
2946		.hw.init = &(struct clk_init_data) {
2947			.name = "gcc_uniphy_rx_clk",
2948			.parent_hws = (const struct clk_hw *[]) {
2949				&gmac1_rx_div_clk_src.clkr.hw,
2950			},
2951			.num_parents = 1,
2952			.ops = &clk_branch2_ops,
2953			.flags = CLK_SET_RATE_PARENT,
2954		},
2955	},
2956};
2957
2958static struct clk_branch gcc_uniphy_tx_clk = {
2959	.halt_reg = 0x56114,
2960	.clkr = {
2961		.enable_reg = 0x56114,
2962		.enable_mask = BIT(0),
2963		.hw.init = &(struct clk_init_data) {
2964			.name = "gcc_uniphy_tx_clk",
2965			.parent_hws = (const struct clk_hw *[]) {
2966				&gmac1_tx_div_clk_src.clkr.hw,
2967			},
2968			.num_parents = 1,
2969			.ops = &clk_branch2_ops,
2970			.flags = CLK_SET_RATE_PARENT,
2971		},
2972	},
2973};
2974
2975static struct clk_branch gcc_uniphy_sys_clk = {
2976	.halt_reg = 0x5610c,
2977	.clkr = {
2978		.enable_reg = 0x5610c,
2979		.enable_mask = BIT(0),
2980		.hw.init = &(struct clk_init_data) {
2981			.name = "gcc_uniphy_sys_clk",
2982			.parent_hws = (const struct clk_hw *[]) {
2983				&gcc_xo_clk_src.clkr.hw,
2984			},
2985			.num_parents = 1,
2986			.flags = CLK_SET_RATE_PARENT,
2987			.ops = &clk_branch2_ops,
2988		},
2989	},
2990};
2991
2992static struct clk_branch gcc_usb0_aux_clk = {
2993	.halt_reg = 0x3e044,
2994	.clkr = {
2995		.enable_reg = 0x3e044,
2996		.enable_mask = BIT(0),
2997		.hw.init = &(struct clk_init_data) {
2998			.name = "gcc_usb0_aux_clk",
2999			.parent_hws = (const struct clk_hw *[]) {
3000				&usb0_aux_clk_src.clkr.hw,
3001			},
3002			.num_parents = 1,
3003			.flags = CLK_SET_RATE_PARENT,
3004			.ops = &clk_branch2_ops,
3005		},
3006	},
3007};
3008
3009static struct clk_branch gcc_usb0_eud_at_clk = {
3010	.halt_reg = 0x3e04c,
3011	.halt_check = BRANCH_HALT_VOTED,
3012	.clkr = {
3013		.enable_reg = 0x3e04c,
3014		.enable_mask = BIT(0),
3015		.hw.init = &(struct clk_init_data) {
3016			.name = "gcc_usb0_eud_at_clk",
3017			.parent_hws = (const struct clk_hw *[]) {
3018				&eud_at_clk_src.hw,
3019			},
3020			.num_parents = 1,
3021			.flags = CLK_SET_RATE_PARENT,
3022			.ops = &clk_branch2_ops,
3023		},
3024	},
3025};
3026
3027static struct clk_branch gcc_usb0_lfps_clk = {
3028	.halt_reg = 0x3e050,
3029	.clkr = {
3030		.enable_reg = 0x3e050,
3031		.enable_mask = BIT(0),
3032		.hw.init = &(struct clk_init_data) {
3033			.name = "gcc_usb0_lfps_clk",
3034			.parent_hws = (const struct clk_hw *[]) {
3035				&usb0_lfps_clk_src.clkr.hw,
3036			},
3037			.num_parents = 1,
3038			.flags = CLK_SET_RATE_PARENT,
3039			.ops = &clk_branch2_ops,
3040		},
3041	},
3042};
3043
3044static struct clk_branch gcc_usb0_master_clk = {
3045	.halt_reg = 0x3e000,
3046	.clkr = {
3047		.enable_reg = 0x3e000,
3048		.enable_mask = BIT(0),
3049		.hw.init = &(struct clk_init_data) {
3050			.name = "gcc_usb0_master_clk",
3051			.parent_hws = (const struct clk_hw *[]) {
3052				&usb0_master_clk_src.clkr.hw,
3053			},
3054			.num_parents = 1,
3055			.flags = CLK_SET_RATE_PARENT,
3056			.ops = &clk_branch2_ops,
3057		},
3058	},
3059};
3060
3061static struct clk_branch gcc_usb0_mock_utmi_clk = {
3062	.halt_reg = 0x3e008,
3063	.clkr = {
3064		.enable_reg = 0x3e008,
3065		.enable_mask = BIT(0),
3066		.hw.init = &(struct clk_init_data) {
3067			.name = "gcc_usb0_mock_utmi_clk",
3068			.parent_hws = (const struct clk_hw *[]) {
3069				&usb0_mock_utmi_clk_src.clkr.hw,
3070			},
3071			.num_parents = 1,
3072			.flags = CLK_SET_RATE_PARENT,
3073			.ops = &clk_branch2_ops,
3074		},
3075	},
3076};
3077
3078static struct clk_branch gcc_usb0_phy_cfg_ahb_clk = {
3079	.halt_reg = 0x3e080,
3080	.clkr = {
3081		.enable_reg = 0x3e080,
3082		.enable_mask = BIT(0),
3083		.hw.init = &(struct clk_init_data) {
3084			.name = "gcc_usb0_phy_cfg_ahb_clk",
3085			.parent_hws = (const struct clk_hw *[]) {
3086				&pcnoc_clk_src.hw,
3087			},
3088			.num_parents = 1,
3089			.flags = CLK_SET_RATE_PARENT,
3090			.ops = &clk_branch2_ops,
3091		},
3092	},
3093};
3094
3095static struct clk_branch gcc_usb0_sleep_clk = {
3096	.halt_reg = 0x3e004,
3097	.clkr = {
3098		.enable_reg = 0x3e004,
3099		.enable_mask = BIT(0),
3100		.hw.init = &(struct clk_init_data) {
3101			.name = "gcc_usb0_sleep_clk",
3102			.parent_hws = (const struct clk_hw *[]) {
3103				&gcc_sleep_clk_src.clkr.hw,
3104			},
3105			.num_parents = 1,
3106			.flags = CLK_SET_RATE_PARENT,
3107			.ops = &clk_branch2_ops,
3108		},
3109	},
3110};
3111
3112static struct clk_branch gcc_usb0_pipe_clk = {
3113	.halt_reg = 0x3e040,
3114	.halt_check = BRANCH_HALT_DELAY,
3115	.clkr = {
3116		.enable_reg = 0x3e040,
3117		.enable_mask = BIT(0),
3118		.hw.init = &(struct clk_init_data) {
3119			.name = "gcc_usb0_pipe_clk",
3120			.parent_hws = (const struct clk_hw *[]) {
3121				&usb0_pipe_clk_src.clkr.hw,
3122			},
3123			.num_parents = 1,
3124			.flags = CLK_SET_RATE_PARENT,
3125			.ops = &clk_branch2_ops,
3126		},
3127	},
3128};
3129
3130static struct clk_branch gcc_wcss_acmt_clk = {
3131	.halt_reg = 0x59064,
3132	.clkr = {
3133		.enable_reg = 0x59064,
3134		.enable_mask = BIT(0),
3135		.hw.init = &(struct clk_init_data) {
3136			.name = "gcc_wcss_acmt_clk",
3137			.parent_hws = (const struct clk_hw *[]) {
3138				&wcss_ahb_clk_src.clkr.hw,
3139			},
3140			.num_parents = 1,
3141			.flags = CLK_SET_RATE_PARENT,
3142			.ops = &clk_branch2_ops,
3143		},
3144	},
3145};
3146
3147static struct clk_branch gcc_wcss_ahb_s_clk = {
3148	.halt_reg = 0x59034,
3149	.clkr = {
3150		.enable_reg = 0x59034,
3151		.enable_mask = BIT(0),
3152		.hw.init = &(struct clk_init_data) {
3153			.name = "gcc_wcss_ahb_s_clk",
3154			.parent_hws = (const struct clk_hw *[]) {
3155				&wcss_ahb_clk_src.clkr.hw,
3156			},
3157			.num_parents = 1,
3158			.flags = CLK_SET_RATE_PARENT,
3159			.ops = &clk_branch2_ops,
3160		},
3161	},
3162};
3163
3164static struct clk_branch gcc_wcss_axi_m_clk = {
3165	.halt_reg = 0x5903c,
3166	.clkr = {
3167		.enable_reg = 0x5903c,
3168		.enable_mask = BIT(0),
3169		.hw.init = &(struct clk_init_data) {
3170			.name = "gcc_wcss_axi_m_clk",
3171			.parent_hws = (const struct clk_hw *[]) {
3172				&system_noc_clk_src.hw,
3173			},
3174			.num_parents = 1,
3175			.flags = CLK_SET_RATE_PARENT,
3176			.ops = &clk_branch2_ops,
3177		},
3178	},
3179};
3180
3181static struct clk_branch gcc_wcss_axi_s_clk = {
3182	.halt_reg = 0x59068,
3183	.clkr = {
3184		.enable_reg = 0x59068,
3185		.enable_mask = BIT(0),
3186		.hw.init = &(struct clk_init_data) {
3187			.name = "gcc_wi_s_clk",
3188			.parent_hws = (const struct clk_hw *[]) {
3189				&system_noc_clk_src.hw,
3190			},
3191			.num_parents = 1,
3192			.flags = CLK_SET_RATE_PARENT,
3193			.ops = &clk_branch2_ops,
3194		},
3195	},
3196};
3197
3198static struct clk_branch gcc_wcss_dbg_ifc_apb_bdg_clk = {
3199	.halt_reg = 0x59050,
3200	.clkr = {
3201		.enable_reg = 0x59050,
3202		.enable_mask = BIT(0),
3203		.hw.init = &(struct clk_init_data) {
3204			.name = "gcc_wcss_dbg_ifc_apb_bdg_clk",
3205			.parent_hws = (const struct clk_hw *[]) {
3206				&qdss_dap_sync_clk_src.hw,
3207			},
3208			.num_parents = 1,
3209			.flags = CLK_SET_RATE_PARENT,
3210			.ops = &clk_branch2_ops,
3211		},
3212	},
3213};
3214
3215static struct clk_branch gcc_wcss_dbg_ifc_apb_clk = {
3216	.halt_reg = 0x59040,
3217	.clkr = {
3218		.enable_reg = 0x59040,
3219		.enable_mask = BIT(0),
3220		.hw.init = &(struct clk_init_data) {
3221			.name = "gcc_wcss_dbg_ifc_apb_clk",
3222			.parent_hws = (const struct clk_hw *[]) {
3223				&qdss_dap_sync_clk_src.hw,
3224			},
3225			.num_parents = 1,
3226			.flags = CLK_SET_RATE_PARENT,
3227			.ops = &clk_branch2_ops,
3228		},
3229	},
3230};
3231
3232static struct clk_branch gcc_wcss_dbg_ifc_atb_bdg_clk = {
3233	.halt_reg = 0x59054,
3234	.clkr = {
3235		.enable_reg = 0x59054,
3236		.enable_mask = BIT(0),
3237		.hw.init = &(struct clk_init_data) {
3238			.name = "gcc_wcss_dbg_ifc_atb_bdg_clk",
3239			.parent_hws = (const struct clk_hw *[]) {
3240				&qdss_at_clk_src.clkr.hw,
3241			},
3242			.num_parents = 1,
3243			.flags = CLK_SET_RATE_PARENT,
3244			.ops = &clk_branch2_ops,
3245		},
3246	},
3247};
3248
3249static struct clk_branch gcc_wcss_dbg_ifc_atb_clk = {
3250	.halt_reg = 0x59044,
3251	.clkr = {
3252		.enable_reg = 0x59044,
3253		.enable_mask = BIT(0),
3254		.hw.init = &(struct clk_init_data) {
3255			.name = "gcc_wcss_dbg_ifc_atb_clk",
3256			.parent_hws = (const struct clk_hw *[]) {
3257				&qdss_at_clk_src.clkr.hw,
3258			},
3259			.num_parents = 1,
3260			.flags = CLK_SET_RATE_PARENT,
3261			.ops = &clk_branch2_ops,
3262		},
3263	},
3264};
3265
3266static struct clk_branch gcc_wcss_dbg_ifc_dapbus_bdg_clk = {
3267	.halt_reg = 0x59060,
3268	.clkr = {
3269		.enable_reg = 0x59060,
3270		.enable_mask = BIT(0),
3271		.hw.init = &(struct clk_init_data) {
3272			.name = "gcc_wcss_dbg_ifc_dapbus_bdg_clk",
3273			.parent_hws = (const struct clk_hw *[]) {
3274				&qdss_dap_sync_clk_src.hw,
3275			},
3276			.num_parents = 1,
3277			.flags = CLK_SET_RATE_PARENT,
3278			.ops = &clk_branch2_ops,
3279		},
3280	},
3281};
3282
3283static struct clk_branch gcc_wcss_dbg_ifc_dapbus_clk = {
3284	.halt_reg = 0x5905c,
3285	.clkr = {
3286		.enable_reg = 0x5905c,
3287		.enable_mask = BIT(0),
3288		.hw.init = &(struct clk_init_data) {
3289			.name = "gcc_wcss_dbg_ifc_dapbus_clk",
3290			.parent_hws = (const struct clk_hw *[]) {
3291				&qdss_dap_sync_clk_src.hw,
3292			},
3293			.num_parents = 1,
3294			.flags = CLK_SET_RATE_PARENT,
3295			.ops = &clk_branch2_ops,
3296		},
3297	},
3298};
3299
3300static struct clk_branch gcc_wcss_dbg_ifc_nts_bdg_clk = {
3301	.halt_reg = 0x59058,
3302	.clkr = {
3303		.enable_reg = 0x59058,
3304		.enable_mask = BIT(0),
3305		.hw.init = &(struct clk_init_data) {
3306			.name = "gcc_wcss_dbg_ifc_nts_bdg_clk",
3307			.parent_hws = (const struct clk_hw *[]) {
3308				&qdss_tsctr_div2_clk_src.hw,
3309			},
3310			.num_parents = 1,
3311			.flags = CLK_SET_RATE_PARENT,
3312			.ops = &clk_branch2_ops,
3313		},
3314	},
3315};
3316
3317static struct clk_branch gcc_wcss_dbg_ifc_nts_clk = {
3318	.halt_reg = 0x59048,
3319	.clkr = {
3320		.enable_reg = 0x59048,
3321		.enable_mask = BIT(0),
3322		.hw.init = &(struct clk_init_data) {
3323			.name = "gcc_wcss_dbg_ifc_nts_clk",
3324			.parent_hws = (const struct clk_hw *[]) {
3325				&qdss_tsctr_div2_clk_src.hw,
3326			},
3327			.num_parents = 1,
3328			.flags = CLK_SET_RATE_PARENT,
3329			.ops = &clk_branch2_ops,
3330		},
3331	},
3332};
3333
3334static struct clk_branch gcc_wcss_ecahb_clk = {
3335	.halt_reg = 0x59038,
3336	.clkr = {
3337		.enable_reg = 0x59038,
3338		.enable_mask = BIT(0),
3339		.hw.init = &(struct clk_init_data) {
3340			.name = "gcc_wcss_ecahb_clk",
3341			.parent_hws = (const struct clk_hw *[]) {
3342				&wcss_ahb_clk_src.clkr.hw,
3343			},
3344			.num_parents = 1,
3345			.flags = CLK_SET_RATE_PARENT,
3346			.ops = &clk_branch2_ops,
3347		},
3348	},
3349};
3350
3351static struct clk_hw *gcc_ipq5018_hws[] = {
3352	&gpll0_out_main_div2.hw,
3353	&pcnoc_clk_src.hw,
3354	&system_noc_clk_src.hw,
3355	&qdss_dap_sync_clk_src.hw,
3356	&qdss_tsctr_div2_clk_src.hw,
3357	&eud_at_clk_src.hw,
3358};
3359
3360static const struct alpha_pll_config ubi32_pll_config = {
3361	.l = 0x29,
3362	.alpha = 0xaaaaaaaa,
3363	.alpha_hi = 0xaa,
3364	.config_ctl_val = 0x4001075b,
3365	.main_output_mask = BIT(0),
3366	.aux_output_mask = BIT(1),
3367	.alpha_en_mask = BIT(24),
3368	.vco_val = 0x1,
3369	.vco_mask = GENMASK(21, 20),
3370	.test_ctl_val = 0x0,
3371	.test_ctl_hi_val = 0x0,
3372};
3373
3374static struct clk_regmap *gcc_ipq5018_clks[] = {
3375	[GPLL0_MAIN] = &gpll0_main.clkr,
3376	[GPLL0] = &gpll0.clkr,
3377	[GPLL2_MAIN] = &gpll2_main.clkr,
3378	[GPLL2] = &gpll2.clkr,
3379	[GPLL4_MAIN] = &gpll4_main.clkr,
3380	[GPLL4] = &gpll4.clkr,
3381	[UBI32_PLL_MAIN] = &ubi32_pll_main.clkr,
3382	[UBI32_PLL] = &ubi32_pll.clkr,
3383	[ADSS_PWM_CLK_SRC] = &adss_pwm_clk_src.clkr,
3384	[BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
3385	[BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
3386	[BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
3387	[BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
3388	[BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
3389	[BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
3390	[BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
3391	[BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
3392	[CRYPTO_CLK_SRC] = &crypto_clk_src.clkr,
3393	[GCC_ADSS_PWM_CLK] = &gcc_adss_pwm_clk.clkr,
3394	[GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
3395	[GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
3396	[GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
3397	[GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
3398	[GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
3399	[GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
3400	[GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
3401	[GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
3402	[GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
3403	[GCC_BTSS_LPO_CLK] = &gcc_btss_lpo_clk.clkr,
3404	[GCC_CMN_BLK_AHB_CLK] = &gcc_cmn_blk_ahb_clk.clkr,
3405	[GCC_CMN_BLK_SYS_CLK] = &gcc_cmn_blk_sys_clk.clkr,
3406	[GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr,
3407	[GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr,
3408	[GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr,
3409	[GCC_DCC_CLK] = &gcc_dcc_clk.clkr,
3410	[GCC_GEPHY_RX_CLK] = &gcc_gephy_rx_clk.clkr,
3411	[GCC_GEPHY_TX_CLK] = &gcc_gephy_tx_clk.clkr,
3412	[GCC_GMAC0_CFG_CLK] = &gcc_gmac0_cfg_clk.clkr,
3413	[GCC_GMAC0_PTP_CLK] = &gcc_gmac0_ptp_clk.clkr,
3414	[GCC_GMAC0_RX_CLK] = &gcc_gmac0_rx_clk.clkr,
3415	[GCC_GMAC0_SYS_CLK] = &gcc_gmac0_sys_clk.clkr,
3416	[GCC_GMAC0_TX_CLK] = &gcc_gmac0_tx_clk.clkr,
3417	[GCC_GMAC1_CFG_CLK] = &gcc_gmac1_cfg_clk.clkr,
3418	[GCC_GMAC1_PTP_CLK] = &gcc_gmac1_ptp_clk.clkr,
3419	[GCC_GMAC1_RX_CLK] = &gcc_gmac1_rx_clk.clkr,
3420	[GCC_GMAC1_SYS_CLK] = &gcc_gmac1_sys_clk.clkr,
3421	[GCC_GMAC1_TX_CLK] = &gcc_gmac1_tx_clk.clkr,
3422	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
3423	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
3424	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
3425	[GCC_LPASS_CORE_AXIM_CLK] = &gcc_lpass_core_axim_clk.clkr,
3426	[GCC_LPASS_SWAY_CLK] = &gcc_lpass_sway_clk.clkr,
3427	[GCC_MDIO0_AHB_CLK] = &gcc_mdio0_ahb_clk.clkr,
3428	[GCC_MDIO1_AHB_CLK] = &gcc_mdio1_ahb_clk.clkr,
3429	[GCC_PCIE0_AHB_CLK] = &gcc_pcie0_ahb_clk.clkr,
3430	[GCC_PCIE0_AUX_CLK] = &gcc_pcie0_aux_clk.clkr,
3431	[GCC_PCIE0_AXI_M_CLK] = &gcc_pcie0_axi_m_clk.clkr,
3432	[GCC_PCIE0_AXI_S_BRIDGE_CLK] = &gcc_pcie0_axi_s_bridge_clk.clkr,
3433	[GCC_PCIE0_AXI_S_CLK] = &gcc_pcie0_axi_s_clk.clkr,
3434	[GCC_PCIE1_AHB_CLK] = &gcc_pcie1_ahb_clk.clkr,
3435	[GCC_PCIE1_AUX_CLK] = &gcc_pcie1_aux_clk.clkr,
3436	[GCC_PCIE1_AXI_M_CLK] = &gcc_pcie1_axi_m_clk.clkr,
3437	[GCC_PCIE1_AXI_S_BRIDGE_CLK] = &gcc_pcie1_axi_s_bridge_clk.clkr,
3438	[GCC_PCIE1_AXI_S_CLK] = &gcc_pcie1_axi_s_clk.clkr,
3439	[GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
3440	[GCC_Q6_AXIM_CLK] = &gcc_q6_axim_clk.clkr,
3441	[GCC_Q6_AXIM2_CLK] = &gcc_q6_axim2_clk.clkr,
3442	[GCC_Q6_AXIS_CLK] = &gcc_q6_axis_clk.clkr,
3443	[GCC_Q6_AHB_CLK] = &gcc_q6_ahb_clk.clkr,
3444	[GCC_Q6_AHB_S_CLK] = &gcc_q6_ahb_s_clk.clkr,
3445	[GCC_Q6_TSCTR_1TO2_CLK] = &gcc_q6_tsctr_1to2_clk.clkr,
3446	[GCC_Q6SS_ATBM_CLK] = &gcc_q6ss_atbm_clk.clkr,
3447	[GCC_Q6SS_PCLKDBG_CLK] = &gcc_q6ss_pclkdbg_clk.clkr,
3448	[GCC_Q6SS_TRIG_CLK] = &gcc_q6ss_trig_clk.clkr,
3449	[GCC_QDSS_AT_CLK] = &gcc_qdss_at_clk.clkr,
3450	[GCC_QDSS_CFG_AHB_CLK] = &gcc_qdss_cfg_ahb_clk.clkr,
3451	[GCC_QDSS_DAP_AHB_CLK] = &gcc_qdss_dap_ahb_clk.clkr,
3452	[GCC_QDSS_DAP_CLK] = &gcc_qdss_dap_clk.clkr,
3453	[GCC_QDSS_ETR_USB_CLK] = &gcc_qdss_etr_usb_clk.clkr,
3454	[GCC_QDSS_EUD_AT_CLK] = &gcc_qdss_eud_at_clk.clkr,
3455	[GCC_QDSS_STM_CLK] = &gcc_qdss_stm_clk.clkr,
3456	[GCC_QDSS_TRACECLKIN_CLK] = &gcc_qdss_traceclkin_clk.clkr,
3457	[GCC_QDSS_TSCTR_DIV8_CLK] = &gcc_qdss_tsctr_div8_clk.clkr,
3458	[GCC_QPIC_AHB_CLK] = &gcc_qpic_ahb_clk.clkr,
3459	[GCC_QPIC_CLK] = &gcc_qpic_clk.clkr,
3460	[GCC_QPIC_IO_MACRO_CLK] = &gcc_qpic_io_macro_clk.clkr,
3461	[GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
3462	[GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
3463	[GCC_SLEEP_CLK_SRC] = &gcc_sleep_clk_src.clkr,
3464	[GCC_SNOC_GMAC0_AHB_CLK] = &gcc_snoc_gmac0_ahb_clk.clkr,
3465	[GCC_SNOC_GMAC0_AXI_CLK] = &gcc_snoc_gmac0_axi_clk.clkr,
3466	[GCC_SNOC_GMAC1_AHB_CLK] = &gcc_snoc_gmac1_ahb_clk.clkr,
3467	[GCC_SNOC_GMAC1_AXI_CLK] = &gcc_snoc_gmac1_axi_clk.clkr,
3468	[GCC_SNOC_LPASS_AXIM_CLK] = &gcc_snoc_lpass_axim_clk.clkr,
3469	[GCC_SNOC_LPASS_SWAY_CLK] = &gcc_snoc_lpass_sway_clk.clkr,
3470	[GCC_SNOC_UBI0_AXI_CLK] = &gcc_snoc_ubi0_axi_clk.clkr,
3471	[GCC_SYS_NOC_PCIE0_AXI_CLK] = &gcc_sys_noc_pcie0_axi_clk.clkr,
3472	[GCC_SYS_NOC_PCIE1_AXI_CLK] = &gcc_sys_noc_pcie1_axi_clk.clkr,
3473	[GCC_SYS_NOC_QDSS_STM_AXI_CLK] = &gcc_sys_noc_qdss_stm_axi_clk.clkr,
3474	[GCC_SYS_NOC_USB0_AXI_CLK] = &gcc_sys_noc_usb0_axi_clk.clkr,
3475	[GCC_SYS_NOC_WCSS_AHB_CLK] = &gcc_sys_noc_wcss_ahb_clk.clkr,
3476	[GCC_UBI0_AXI_CLK] = &gcc_ubi0_axi_clk.clkr,
3477	[GCC_UBI0_CFG_CLK] = &gcc_ubi0_cfg_clk.clkr,
3478	[GCC_UBI0_CORE_CLK] = &gcc_ubi0_core_clk.clkr,
3479	[GCC_UBI0_DBG_CLK] = &gcc_ubi0_dbg_clk.clkr,
3480	[GCC_UBI0_NC_AXI_CLK] = &gcc_ubi0_nc_axi_clk.clkr,
3481	[GCC_UBI0_UTCM_CLK] = &gcc_ubi0_utcm_clk.clkr,
3482	[GCC_UNIPHY_AHB_CLK] = &gcc_uniphy_ahb_clk.clkr,
3483	[GCC_UNIPHY_RX_CLK] = &gcc_uniphy_rx_clk.clkr,
3484	[GCC_UNIPHY_SYS_CLK] = &gcc_uniphy_sys_clk.clkr,
3485	[GCC_UNIPHY_TX_CLK] = &gcc_uniphy_tx_clk.clkr,
3486	[GCC_USB0_AUX_CLK] = &gcc_usb0_aux_clk.clkr,
3487	[GCC_USB0_EUD_AT_CLK] = &gcc_usb0_eud_at_clk.clkr,
3488	[GCC_USB0_LFPS_CLK] = &gcc_usb0_lfps_clk.clkr,
3489	[GCC_USB0_MASTER_CLK] = &gcc_usb0_master_clk.clkr,
3490	[GCC_USB0_MOCK_UTMI_CLK] = &gcc_usb0_mock_utmi_clk.clkr,
3491	[GCC_USB0_PHY_CFG_AHB_CLK] = &gcc_usb0_phy_cfg_ahb_clk.clkr,
3492	[GCC_USB0_SLEEP_CLK] = &gcc_usb0_sleep_clk.clkr,
3493	[GCC_WCSS_ACMT_CLK] = &gcc_wcss_acmt_clk.clkr,
3494	[GCC_WCSS_AHB_S_CLK] = &gcc_wcss_ahb_s_clk.clkr,
3495	[GCC_WCSS_AXI_M_CLK] = &gcc_wcss_axi_m_clk.clkr,
3496	[GCC_WCSS_AXI_S_CLK] = &gcc_wcss_axi_s_clk.clkr,
3497	[GCC_WCSS_DBG_IFC_APB_BDG_CLK] = &gcc_wcss_dbg_ifc_apb_bdg_clk.clkr,
3498	[GCC_WCSS_DBG_IFC_APB_CLK] = &gcc_wcss_dbg_ifc_apb_clk.clkr,
3499	[GCC_WCSS_DBG_IFC_ATB_BDG_CLK] = &gcc_wcss_dbg_ifc_atb_bdg_clk.clkr,
3500	[GCC_WCSS_DBG_IFC_ATB_CLK] = &gcc_wcss_dbg_ifc_atb_clk.clkr,
3501	[GCC_WCSS_DBG_IFC_DAPBUS_BDG_CLK] = &gcc_wcss_dbg_ifc_dapbus_bdg_clk.clkr,
3502	[GCC_WCSS_DBG_IFC_DAPBUS_CLK] = &gcc_wcss_dbg_ifc_dapbus_clk.clkr,
3503	[GCC_WCSS_DBG_IFC_NTS_BDG_CLK] = &gcc_wcss_dbg_ifc_nts_bdg_clk.clkr,
3504	[GCC_WCSS_DBG_IFC_NTS_CLK] = &gcc_wcss_dbg_ifc_nts_clk.clkr,
3505	[GCC_WCSS_ECAHB_CLK] = &gcc_wcss_ecahb_clk.clkr,
3506	[GCC_XO_CLK] = &gcc_xo_clk.clkr,
3507	[GCC_XO_CLK_SRC] = &gcc_xo_clk_src.clkr,
3508	[GMAC0_RX_CLK_SRC] = &gmac0_rx_clk_src.clkr,
3509	[GMAC0_RX_DIV_CLK_SRC] = &gmac0_rx_div_clk_src.clkr,
3510	[GMAC0_TX_CLK_SRC] = &gmac0_tx_clk_src.clkr,
3511	[GMAC0_TX_DIV_CLK_SRC] = &gmac0_tx_div_clk_src.clkr,
3512	[GMAC1_RX_CLK_SRC] = &gmac1_rx_clk_src.clkr,
3513	[GMAC1_RX_DIV_CLK_SRC] = &gmac1_rx_div_clk_src.clkr,
3514	[GMAC1_TX_CLK_SRC] = &gmac1_tx_clk_src.clkr,
3515	[GMAC1_TX_DIV_CLK_SRC] = &gmac1_tx_div_clk_src.clkr,
3516	[GMAC_CLK_SRC] = &gmac_clk_src.clkr,
3517	[GP1_CLK_SRC] = &gp1_clk_src.clkr,
3518	[GP2_CLK_SRC] = &gp2_clk_src.clkr,
3519	[GP3_CLK_SRC] = &gp3_clk_src.clkr,
3520	[LPASS_AXIM_CLK_SRC] = &lpass_axim_clk_src.clkr,
3521	[LPASS_SWAY_CLK_SRC] = &lpass_sway_clk_src.clkr,
3522	[PCIE0_AUX_CLK_SRC] = &pcie0_aux_clk_src.clkr,
3523	[PCIE0_AXI_CLK_SRC] = &pcie0_axi_clk_src.clkr,
3524	[PCIE1_AUX_CLK_SRC] = &pcie1_aux_clk_src.clkr,
3525	[PCIE1_AXI_CLK_SRC] = &pcie1_axi_clk_src.clkr,
3526	[PCNOC_BFDCD_CLK_SRC] = &pcnoc_bfdcd_clk_src.clkr,
3527	[Q6_AXI_CLK_SRC] = &q6_axi_clk_src.clkr,
3528	[QDSS_AT_CLK_SRC] = &qdss_at_clk_src.clkr,
3529	[QDSS_STM_CLK_SRC] = &qdss_stm_clk_src.clkr,
3530	[QDSS_TSCTR_CLK_SRC] = &qdss_tsctr_clk_src.clkr,
3531	[QDSS_TRACECLKIN_CLK_SRC] = &qdss_traceclkin_clk_src.clkr,
3532	[QPIC_IO_MACRO_CLK_SRC] = &qpic_io_macro_clk_src.clkr,
3533	[SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
3534	[SYSTEM_NOC_BFDCD_CLK_SRC] = &system_noc_bfdcd_clk_src.clkr,
3535	[UBI0_AXI_CLK_SRC] = &ubi0_axi_clk_src.clkr,
3536	[UBI0_CORE_CLK_SRC] = &ubi0_core_clk_src.clkr,
3537	[USB0_AUX_CLK_SRC] = &usb0_aux_clk_src.clkr,
3538	[USB0_LFPS_CLK_SRC] = &usb0_lfps_clk_src.clkr,
3539	[USB0_MASTER_CLK_SRC] = &usb0_master_clk_src.clkr,
3540	[USB0_MOCK_UTMI_CLK_SRC] = &usb0_mock_utmi_clk_src.clkr,
3541	[WCSS_AHB_CLK_SRC] = &wcss_ahb_clk_src.clkr,
3542	[PCIE0_PIPE_CLK_SRC] = &pcie0_pipe_clk_src.clkr,
3543	[PCIE1_PIPE_CLK_SRC] = &pcie1_pipe_clk_src.clkr,
3544	[GCC_PCIE0_PIPE_CLK] = &gcc_pcie0_pipe_clk.clkr,
3545	[GCC_PCIE1_PIPE_CLK] = &gcc_pcie1_pipe_clk.clkr,
3546	[USB0_PIPE_CLK_SRC] = &usb0_pipe_clk_src.clkr,
3547	[GCC_USB0_PIPE_CLK] = &gcc_usb0_pipe_clk.clkr,
3548};
3549
3550static const struct qcom_reset_map gcc_ipq5018_resets[] = {
3551	[GCC_APC0_VOLTAGE_DROOP_DETECTOR_BCR] = { 0x78000, 0 },
3552	[GCC_BLSP1_BCR] = { 0x01000, 0 },
3553	[GCC_BLSP1_QUP1_BCR] = { 0x02000, 0 },
3554	[GCC_BLSP1_QUP2_BCR] = { 0x03008, 0 },
3555	[GCC_BLSP1_QUP3_BCR] = { 0x04008, 0 },
3556	[GCC_BLSP1_UART1_BCR] = { 0x02038, 0 },
3557	[GCC_BLSP1_UART2_BCR] = { 0x03028, 0 },
3558	[GCC_BOOT_ROM_BCR] = { 0x13008, 0 },
3559	[GCC_BTSS_BCR] = { 0x1c000, 0 },
3560	[GCC_CMN_BLK_BCR] = { 0x56300, 0 },
3561	[GCC_CMN_LDO_BCR] = { 0x33000, 0 },
3562	[GCC_CE_BCR] = { 0x33014, 0 },
3563	[GCC_CRYPTO_BCR] = { 0x16000, 0 },
3564	[GCC_DCC_BCR] = { 0x77000, 0 },
3565	[GCC_DCD_BCR] = { 0x2a000, 0 },
3566	[GCC_DDRSS_BCR] = { 0x1e000, 0 },
3567	[GCC_EDPD_BCR] = { 0x3a000, 0 },
3568	[GCC_GEPHY_BCR] = { 0x56000, 0 },
3569	[GCC_GEPHY_MDC_SW_ARES] = { 0x56004, 0 },
3570	[GCC_GEPHY_DSP_HW_ARES] = { 0x56004, 1 },
3571	[GCC_GEPHY_RX_ARES] = { 0x56004, 2 },
3572	[GCC_GEPHY_TX_ARES] = { 0x56004, 3 },
3573	[GCC_GMAC0_BCR] = { 0x19000, 0 },
3574	[GCC_GMAC0_CFG_ARES] = { 0x68428, 0 },
3575	[GCC_GMAC0_SYS_ARES] = { 0x68428, 1 },
3576	[GCC_GMAC1_BCR] = { 0x19100, 0 },
3577	[GCC_GMAC1_CFG_ARES] = { 0x68438, 0 },
3578	[GCC_GMAC1_SYS_ARES] = { 0x68438, 1 },
3579	[GCC_IMEM_BCR] = { 0x0e000, 0 },
3580	[GCC_LPASS_BCR] = { 0x2e000, 0 },
3581	[GCC_MDIO0_BCR] = { 0x58000, 0 },
3582	[GCC_MDIO1_BCR] = { 0x58010, 0 },
3583	[GCC_MPM_BCR] = { 0x2c000, 0 },
3584	[GCC_PCIE0_BCR] = { 0x75004, 0 },
3585	[GCC_PCIE0_LINK_DOWN_BCR] = { 0x750a8, 0 },
3586	[GCC_PCIE0_PHY_BCR] = { 0x75038, 0 },
3587	[GCC_PCIE0PHY_PHY_BCR] = { 0x7503c, 0 },
3588	[GCC_PCIE0_PIPE_ARES] = { 0x75040, 0 },
3589	[GCC_PCIE0_SLEEP_ARES] = { 0x75040, 1 },
3590	[GCC_PCIE0_CORE_STICKY_ARES] = { 0x75040, 2 },
3591	[GCC_PCIE0_AXI_MASTER_ARES] = { 0x75040, 3 },
3592	[GCC_PCIE0_AXI_SLAVE_ARES] = { 0x75040, 4 },
3593	[GCC_PCIE0_AHB_ARES] = { 0x75040, 5 },
3594	[GCC_PCIE0_AXI_MASTER_STICKY_ARES] = { 0x75040, 6 },
3595	[GCC_PCIE0_AXI_SLAVE_STICKY_ARES] = { 0x75040, 7 },
3596	[GCC_PCIE1_BCR] = { 0x76004, 0 },
3597	[GCC_PCIE1_LINK_DOWN_BCR] = { 0x76044, 0 },
3598	[GCC_PCIE1_PHY_BCR] = { 0x76038, 0 },
3599	[GCC_PCIE1PHY_PHY_BCR] = { 0x7603c, 0 },
3600	[GCC_PCIE1_PIPE_ARES] = { 0x76040, 0 },
3601	[GCC_PCIE1_SLEEP_ARES] = { 0x76040, 1 },
3602	[GCC_PCIE1_CORE_STICKY_ARES] = { 0x76040, 2 },
3603	[GCC_PCIE1_AXI_MASTER_ARES] = { 0x76040, 3 },
3604	[GCC_PCIE1_AXI_SLAVE_ARES] = { 0x76040, 4 },
3605	[GCC_PCIE1_AHB_ARES] = { 0x76040, 5 },
3606	[GCC_PCIE1_AXI_MASTER_STICKY_ARES] = { 0x76040, 6 },
3607	[GCC_PCIE1_AXI_SLAVE_STICKY_ARES] = { 0x76040, 7 },
3608	[GCC_PCNOC_BCR] = { 0x27018, 0 },
3609	[GCC_PCNOC_BUS_TIMEOUT0_BCR] = { 0x48000, 0 },
3610	[GCC_PCNOC_BUS_TIMEOUT1_BCR] = { 0x48008, 0 },
3611	[GCC_PCNOC_BUS_TIMEOUT2_BCR] = { 0x48010, 0 },
3612	[GCC_PCNOC_BUS_TIMEOUT3_BCR] = { 0x48018, 0 },
3613	[GCC_PCNOC_BUS_TIMEOUT4_BCR] = { 0x48020, 0 },
3614	[GCC_PCNOC_BUS_TIMEOUT5_BCR] = { 0x48028, 0 },
3615	[GCC_PCNOC_BUS_TIMEOUT6_BCR] = { 0x48030, 0 },
3616	[GCC_PCNOC_BUS_TIMEOUT7_BCR] = { 0x48038, 0 },
3617	[GCC_PCNOC_BUS_TIMEOUT8_BCR] = { 0x48040, 0 },
3618	[GCC_PCNOC_BUS_TIMEOUT9_BCR] = { 0x48048, 0 },
3619	[GCC_PCNOC_BUS_TIMEOUT10_BCR] = { 0x48050, 0 },
3620	[GCC_PCNOC_BUS_TIMEOUT11_BCR] = { 0x48058, 0 },
3621	[GCC_PRNG_BCR] = { 0x13000, 0 },
3622	[GCC_Q6SS_DBG_ARES] = { 0x59110, 0 },
3623	[GCC_Q6_AHB_S_ARES] = { 0x59110, 1 },
3624	[GCC_Q6_AHB_ARES] = { 0x59110, 2 },
3625	[GCC_Q6_AXIM2_ARES] = { 0x59110, 3 },
3626	[GCC_Q6_AXIM_ARES] = { 0x59110, 4 },
3627	[GCC_Q6_AXIS_ARES] = { 0x59158, 0 },
3628	[GCC_QDSS_BCR] = { 0x29000, 0 },
3629	[GCC_QPIC_BCR] = { 0x57018, 0 },
3630	[GCC_QUSB2_0_PHY_BCR] = { 0x41030, 0 },
3631	[GCC_SDCC1_BCR] = { 0x42000, 0 },
3632	[GCC_SEC_CTRL_BCR] = { 0x1a000, 0 },
3633	[GCC_SPDM_BCR] = { 0x2f000, 0 },
3634	[GCC_SYSTEM_NOC_BCR] = { 0x26000, 0 },
3635	[GCC_TCSR_BCR] = { 0x28000, 0 },
3636	[GCC_TLMM_BCR] = { 0x34000, 0 },
3637	[GCC_UBI0_AXI_ARES] = { 0x68010, 0 },
3638	[GCC_UBI0_AHB_ARES] = { 0x68010, 1 },
3639	[GCC_UBI0_NC_AXI_ARES] = { 0x68010, 2 },
3640	[GCC_UBI0_DBG_ARES] = { 0x68010, 3 },
3641	[GCC_UBI0_UTCM_ARES] = { 0x68010, 6 },
3642	[GCC_UBI0_CORE_ARES] = { 0x68010, 7 },
3643	[GCC_UBI32_BCR] = { 0x19064, 0 },
3644	[GCC_UNIPHY_BCR] = { 0x56100, 0 },
3645	[GCC_UNIPHY_AHB_ARES] = { 0x56104, 0 },
3646	[GCC_UNIPHY_SYS_ARES] = { 0x56104, 1 },
3647	[GCC_UNIPHY_RX_ARES] = { 0x56104, 4 },
3648	[GCC_UNIPHY_TX_ARES] = { 0x56104, 5 },
3649	[GCC_UNIPHY_SOFT_RESET] = {0x56104, 0 },
3650	[GCC_USB0_BCR] = { 0x3e070, 0 },
3651	[GCC_USB0_PHY_BCR] = { 0x3e034, 0 },
3652	[GCC_WCSS_BCR] = { 0x18000, 0 },
3653	[GCC_WCSS_DBG_ARES] = { 0x59008, 0 },
3654	[GCC_WCSS_ECAHB_ARES] = { 0x59008, 1 },
3655	[GCC_WCSS_ACMT_ARES] = { 0x59008, 2 },
3656	[GCC_WCSS_DBG_BDG_ARES] = { 0x59008, 3 },
3657	[GCC_WCSS_AHB_S_ARES] = { 0x59008, 4 },
3658	[GCC_WCSS_AXI_M_ARES] = { 0x59008, 5 },
3659	[GCC_WCSS_AXI_S_ARES] = { 0x59008, 6 },
3660	[GCC_WCSS_Q6_BCR] = { 0x18004, 0 },
3661	[GCC_WCSSAON_RESET] = { 0x59010, 0},
3662	[GCC_GEPHY_MISC_ARES] = { 0x56004, 0 },
3663};
3664
3665static const struct of_device_id gcc_ipq5018_match_table[] = {
3666	{ .compatible = "qcom,gcc-ipq5018" },
3667	{ }
3668};
3669MODULE_DEVICE_TABLE(of, gcc_ipq5018_match_table);
3670
3671static const struct regmap_config gcc_ipq5018_regmap_config = {
3672	.reg_bits = 32,
3673	.reg_stride = 4,
3674	.val_bits = 32,
3675	.max_register = 0x7fffc,
3676	.fast_io = true,
3677};
3678
3679static const struct qcom_cc_desc gcc_ipq5018_desc = {
3680	.config = &gcc_ipq5018_regmap_config,
3681	.clks = gcc_ipq5018_clks,
3682	.num_clks = ARRAY_SIZE(gcc_ipq5018_clks),
3683	.resets = gcc_ipq5018_resets,
3684	.num_resets = ARRAY_SIZE(gcc_ipq5018_resets),
3685	.clk_hws = gcc_ipq5018_hws,
3686	.num_clk_hws = ARRAY_SIZE(gcc_ipq5018_hws),
3687};
3688
3689static int gcc_ipq5018_probe(struct platform_device *pdev)
3690{
3691	struct regmap *regmap;
3692	struct qcom_cc_desc ipq5018_desc = gcc_ipq5018_desc;
3693
3694	regmap = qcom_cc_map(pdev, &ipq5018_desc);
3695	if (IS_ERR(regmap))
3696		return PTR_ERR(regmap);
3697
3698	clk_alpha_pll_configure(&ubi32_pll_main, regmap, &ubi32_pll_config);
3699
3700	return qcom_cc_really_probe(pdev, &ipq5018_desc, regmap);
3701}
3702
3703static struct platform_driver gcc_ipq5018_driver = {
3704	.probe = gcc_ipq5018_probe,
3705	.driver = {
3706		.name = "qcom,gcc-ipq5018",
3707		.of_match_table = gcc_ipq5018_match_table,
3708	},
3709};
3710
3711static int __init gcc_ipq5018_init(void)
3712{
3713	return platform_driver_register(&gcc_ipq5018_driver);
3714}
3715core_initcall(gcc_ipq5018_init);
3716
3717static void __exit gcc_ipq5018_exit(void)
3718{
3719	platform_driver_unregister(&gcc_ipq5018_driver);
3720}
3721module_exit(gcc_ipq5018_exit);
3722
3723MODULE_DESCRIPTION("Qualcomm Technologies, Inc. GCC IPQ5018 Driver");
3724MODULE_LICENSE("GPL");
3725