xref: /openbmc/linux/drivers/clk/qcom/gcc-msm8909.c (revision c900529f3d9161bfde5cca0754f83b4d3c3e0220)
1bf37a057SStephan Gerhold // SPDX-License-Identifier: GPL-2.0-only
2bf37a057SStephan Gerhold /*
3bf37a057SStephan Gerhold  * Copyright (C) 2022 Kernkonzept GmbH.
4bf37a057SStephan Gerhold  *
5bf37a057SStephan Gerhold  * Based on gcc-msm8916.c:
6bf37a057SStephan Gerhold  *   Copyright 2015 Linaro Limited
7bf37a057SStephan Gerhold  * adapted with data from clock-gcc-8909.c in Qualcomm's msm-3.18 release:
8bf37a057SStephan Gerhold  *   Copyright (c) 2014-2016, The Linux Foundation. All rights reserved.
9bf37a057SStephan Gerhold  */
10bf37a057SStephan Gerhold 
11bf37a057SStephan Gerhold #include <linux/bitops.h>
12bf37a057SStephan Gerhold #include <linux/clk-provider.h>
13bf37a057SStephan Gerhold #include <linux/err.h>
14bf37a057SStephan Gerhold #include <linux/kernel.h>
15bf37a057SStephan Gerhold #include <linux/module.h>
16bf37a057SStephan Gerhold #include <linux/of.h>
17bf37a057SStephan Gerhold #include <linux/platform_device.h>
18bf37a057SStephan Gerhold #include <linux/regmap.h>
19bf37a057SStephan Gerhold #include <linux/reset-controller.h>
20bf37a057SStephan Gerhold 
21bf37a057SStephan Gerhold #include <dt-bindings/clock/qcom,gcc-msm8909.h>
22bf37a057SStephan Gerhold 
23bf37a057SStephan Gerhold #include "clk-alpha-pll.h"
24bf37a057SStephan Gerhold #include "clk-branch.h"
25bf37a057SStephan Gerhold #include "clk-pll.h"
26bf37a057SStephan Gerhold #include "clk-rcg.h"
27bf37a057SStephan Gerhold #include "clk-regmap.h"
28bf37a057SStephan Gerhold #include "common.h"
29bf37a057SStephan Gerhold #include "gdsc.h"
30bf37a057SStephan Gerhold #include "reset.h"
31bf37a057SStephan Gerhold 
32bf37a057SStephan Gerhold /* Need to match the order of clocks in DT binding */
33bf37a057SStephan Gerhold enum {
34bf37a057SStephan Gerhold 	DT_XO,
35bf37a057SStephan Gerhold 	DT_SLEEP_CLK,
36bf37a057SStephan Gerhold 	DT_DSI0PLL,
37bf37a057SStephan Gerhold 	DT_DSI0PLL_BYTE,
38bf37a057SStephan Gerhold };
39bf37a057SStephan Gerhold 
40bf37a057SStephan Gerhold enum {
41bf37a057SStephan Gerhold 	P_XO,
42bf37a057SStephan Gerhold 	P_SLEEP_CLK,
43bf37a057SStephan Gerhold 	P_GPLL0,
44bf37a057SStephan Gerhold 	P_GPLL1,
45bf37a057SStephan Gerhold 	P_GPLL2,
46bf37a057SStephan Gerhold 	P_BIMC,
47bf37a057SStephan Gerhold 	P_DSI0PLL,
48bf37a057SStephan Gerhold 	P_DSI0PLL_BYTE,
49bf37a057SStephan Gerhold };
50bf37a057SStephan Gerhold 
51bf37a057SStephan Gerhold static const struct parent_map gcc_xo_map[] = {
52bf37a057SStephan Gerhold 	{ P_XO, 0 },
53bf37a057SStephan Gerhold };
54bf37a057SStephan Gerhold 
55bf37a057SStephan Gerhold static const struct clk_parent_data gcc_xo_data[] = {
56bf37a057SStephan Gerhold 	{ .index = DT_XO },
57bf37a057SStephan Gerhold };
58bf37a057SStephan Gerhold 
59bf37a057SStephan Gerhold static const struct clk_parent_data gcc_sleep_clk_data[] = {
60bf37a057SStephan Gerhold 	{ .index = DT_SLEEP_CLK },
61bf37a057SStephan Gerhold };
62bf37a057SStephan Gerhold 
63bf37a057SStephan Gerhold static struct clk_alpha_pll gpll0_early = {
64bf37a057SStephan Gerhold 	.offset = 0x21000,
65bf37a057SStephan Gerhold 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
66bf37a057SStephan Gerhold 	.clkr = {
67bf37a057SStephan Gerhold 		.enable_reg = 0x45000,
68bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
69bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
70bf37a057SStephan Gerhold 			.name = "gpll0_early",
71bf37a057SStephan Gerhold 			.parent_data = gcc_xo_data,
72bf37a057SStephan Gerhold 			.num_parents = ARRAY_SIZE(gcc_xo_data),
73bf37a057SStephan Gerhold 			/* Avoid rate changes for shared clock */
74bf37a057SStephan Gerhold 			.ops = &clk_alpha_pll_fixed_ops,
75bf37a057SStephan Gerhold 		},
76bf37a057SStephan Gerhold 	},
77bf37a057SStephan Gerhold };
78bf37a057SStephan Gerhold 
79bf37a057SStephan Gerhold static struct clk_alpha_pll_postdiv gpll0 = {
80bf37a057SStephan Gerhold 	.offset = 0x21000,
81bf37a057SStephan Gerhold 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
82bf37a057SStephan Gerhold 	.clkr.hw.init = &(struct clk_init_data) {
83bf37a057SStephan Gerhold 		.name = "gpll0",
84bf37a057SStephan Gerhold 		.parent_hws = (const struct clk_hw*[]) {
85bf37a057SStephan Gerhold 			&gpll0_early.clkr.hw,
86bf37a057SStephan Gerhold 		},
87bf37a057SStephan Gerhold 		.num_parents = 1,
88bf37a057SStephan Gerhold 		/* Avoid rate changes for shared clock */
89bf37a057SStephan Gerhold 		.ops = &clk_alpha_pll_postdiv_ro_ops,
90bf37a057SStephan Gerhold 	},
91bf37a057SStephan Gerhold };
92bf37a057SStephan Gerhold 
93bf37a057SStephan Gerhold static struct clk_pll gpll1 = {
94bf37a057SStephan Gerhold 	.l_reg = 0x20004,
95bf37a057SStephan Gerhold 	.m_reg = 0x20008,
96bf37a057SStephan Gerhold 	.n_reg = 0x2000c,
97bf37a057SStephan Gerhold 	.config_reg = 0x20010,
98bf37a057SStephan Gerhold 	.mode_reg = 0x20000,
99bf37a057SStephan Gerhold 	.status_reg = 0x2001c,
100bf37a057SStephan Gerhold 	.status_bit = 17,
101bf37a057SStephan Gerhold 	.clkr.hw.init = &(struct clk_init_data) {
102bf37a057SStephan Gerhold 		.name = "gpll1",
103bf37a057SStephan Gerhold 		.parent_data = gcc_xo_data,
104bf37a057SStephan Gerhold 		.num_parents = ARRAY_SIZE(gcc_xo_data),
105bf37a057SStephan Gerhold 		.ops = &clk_pll_ops,
106bf37a057SStephan Gerhold 	},
107bf37a057SStephan Gerhold };
108bf37a057SStephan Gerhold 
109bf37a057SStephan Gerhold static struct clk_regmap gpll1_vote = {
110bf37a057SStephan Gerhold 	.enable_reg = 0x45000,
111bf37a057SStephan Gerhold 	.enable_mask = BIT(1),
112bf37a057SStephan Gerhold 	.hw.init = &(struct clk_init_data) {
113bf37a057SStephan Gerhold 		.name = "gpll1_vote",
114bf37a057SStephan Gerhold 		.parent_hws = (const struct clk_hw*[]) {
115bf37a057SStephan Gerhold 			&gpll1.clkr.hw,
116bf37a057SStephan Gerhold 		},
117bf37a057SStephan Gerhold 		.num_parents = 1,
118bf37a057SStephan Gerhold 		.ops = &clk_pll_vote_ops,
119bf37a057SStephan Gerhold 	},
120bf37a057SStephan Gerhold };
121bf37a057SStephan Gerhold 
122bf37a057SStephan Gerhold static struct clk_alpha_pll gpll2_early = {
123bf37a057SStephan Gerhold 	.offset = 0x25000,
124bf37a057SStephan Gerhold 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
125bf37a057SStephan Gerhold 	.clkr = {
126bf37a057SStephan Gerhold 		.enable_reg = 0x45000,
127bf37a057SStephan Gerhold 		.enable_mask = BIT(3),
128bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
129bf37a057SStephan Gerhold 			.name = "gpll2_early",
130bf37a057SStephan Gerhold 			.parent_data = gcc_xo_data,
131bf37a057SStephan Gerhold 			.num_parents = ARRAY_SIZE(gcc_xo_data),
132bf37a057SStephan Gerhold 			/* Avoid rate changes for shared clock */
133bf37a057SStephan Gerhold 			.ops = &clk_alpha_pll_fixed_ops,
134bf37a057SStephan Gerhold 		},
135bf37a057SStephan Gerhold 	},
136bf37a057SStephan Gerhold };
137bf37a057SStephan Gerhold 
138bf37a057SStephan Gerhold static struct clk_alpha_pll_postdiv gpll2 = {
139bf37a057SStephan Gerhold 	.offset = 0x25000,
140bf37a057SStephan Gerhold 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
141bf37a057SStephan Gerhold 	.clkr.hw.init = &(struct clk_init_data) {
142bf37a057SStephan Gerhold 		.name = "gpll2",
143bf37a057SStephan Gerhold 		.parent_hws = (const struct clk_hw*[]) {
144bf37a057SStephan Gerhold 			&gpll2_early.clkr.hw,
145bf37a057SStephan Gerhold 		},
146bf37a057SStephan Gerhold 		.num_parents = 1,
147bf37a057SStephan Gerhold 		/* Avoid rate changes for shared clock */
148bf37a057SStephan Gerhold 		.ops = &clk_alpha_pll_postdiv_ro_ops,
149bf37a057SStephan Gerhold 	},
150bf37a057SStephan Gerhold };
151bf37a057SStephan Gerhold 
152bf37a057SStephan Gerhold static struct clk_alpha_pll bimc_pll_early = {
153bf37a057SStephan Gerhold 	.offset = 0x23000,
154bf37a057SStephan Gerhold 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
155bf37a057SStephan Gerhold 	.clkr = {
156bf37a057SStephan Gerhold 		.enable_reg = 0x45000,
157bf37a057SStephan Gerhold 		.enable_mask = BIT(2),
158bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
159bf37a057SStephan Gerhold 			.name = "bimc_pll_early",
160bf37a057SStephan Gerhold 			.parent_data = gcc_xo_data,
161bf37a057SStephan Gerhold 			.num_parents = ARRAY_SIZE(gcc_xo_data),
162bf37a057SStephan Gerhold 			/* Avoid rate changes for shared clock */
163bf37a057SStephan Gerhold 			.ops = &clk_alpha_pll_fixed_ops,
164bf37a057SStephan Gerhold 		},
165bf37a057SStephan Gerhold 	},
166bf37a057SStephan Gerhold };
167bf37a057SStephan Gerhold 
168bf37a057SStephan Gerhold static struct clk_alpha_pll_postdiv bimc_pll = {
169bf37a057SStephan Gerhold 	.offset = 0x23000,
170bf37a057SStephan Gerhold 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
171bf37a057SStephan Gerhold 	.clkr.hw.init = &(struct clk_init_data) {
172bf37a057SStephan Gerhold 		.name = "bimc_pll",
173bf37a057SStephan Gerhold 		.parent_hws = (const struct clk_hw*[]) {
174bf37a057SStephan Gerhold 			&bimc_pll_early.clkr.hw,
175bf37a057SStephan Gerhold 		},
176bf37a057SStephan Gerhold 		.num_parents = 1,
177bf37a057SStephan Gerhold 		/* Avoid rate changes for shared clock */
178bf37a057SStephan Gerhold 		.ops = &clk_alpha_pll_postdiv_ro_ops,
179bf37a057SStephan Gerhold 	},
180bf37a057SStephan Gerhold };
181bf37a057SStephan Gerhold 
182bf37a057SStephan Gerhold static const struct parent_map gcc_xo_gpll0_map[] = {
183bf37a057SStephan Gerhold 	{ P_XO, 0 },
184bf37a057SStephan Gerhold 	{ P_GPLL0, 1 },
185bf37a057SStephan Gerhold };
186bf37a057SStephan Gerhold 
187bf37a057SStephan Gerhold static const struct clk_parent_data gcc_xo_gpll0_data[] = {
188bf37a057SStephan Gerhold 	{ .index = DT_XO },
189bf37a057SStephan Gerhold 	{ .hw = &gpll0.clkr.hw },
190bf37a057SStephan Gerhold };
191bf37a057SStephan Gerhold 
192bf37a057SStephan Gerhold static const struct parent_map gcc_xo_gpll0_bimc_map[] = {
193bf37a057SStephan Gerhold 	{ P_XO, 0 },
194bf37a057SStephan Gerhold 	{ P_GPLL0, 1 },
195bf37a057SStephan Gerhold 	{ P_BIMC, 2 },
196bf37a057SStephan Gerhold };
197bf37a057SStephan Gerhold 
198bf37a057SStephan Gerhold static const struct clk_parent_data gcc_xo_gpll0_bimc_data[] = {
199bf37a057SStephan Gerhold 	{ .index = DT_XO },
200bf37a057SStephan Gerhold 	{ .hw = &gpll0.clkr.hw },
201bf37a057SStephan Gerhold 	{ .hw = &bimc_pll.clkr.hw },
202bf37a057SStephan Gerhold };
203bf37a057SStephan Gerhold 
204bf37a057SStephan Gerhold static const struct freq_tbl ftbl_apss_ahb_clk_src[] = {
205bf37a057SStephan Gerhold 	F(19200000, P_XO, 1, 0, 0),
206bf37a057SStephan Gerhold 	F(50000000, P_GPLL0, 16, 0, 0),
207bf37a057SStephan Gerhold 	F(100000000, P_GPLL0, 8, 0, 0),
208bf37a057SStephan Gerhold 	{ }
209bf37a057SStephan Gerhold };
210bf37a057SStephan Gerhold 
211bf37a057SStephan Gerhold static struct clk_rcg2 apss_ahb_clk_src = {
212bf37a057SStephan Gerhold 	.cmd_rcgr = 0x46000,
213bf37a057SStephan Gerhold 	.hid_width = 5,
214bf37a057SStephan Gerhold 	.freq_tbl = ftbl_apss_ahb_clk_src,
215bf37a057SStephan Gerhold 	.parent_map = gcc_xo_gpll0_map,
216bf37a057SStephan Gerhold 	.clkr.hw.init = &(struct clk_init_data) {
217bf37a057SStephan Gerhold 		.name = "apss_ahb_clk_src",
218bf37a057SStephan Gerhold 		.parent_data = gcc_xo_gpll0_data,
219bf37a057SStephan Gerhold 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
220bf37a057SStephan Gerhold 		.ops = &clk_rcg2_ops,
221bf37a057SStephan Gerhold 	}
222bf37a057SStephan Gerhold };
223bf37a057SStephan Gerhold 
224bf37a057SStephan Gerhold static struct clk_rcg2 bimc_ddr_clk_src = {
225bf37a057SStephan Gerhold 	.cmd_rcgr = 0x32004,
226bf37a057SStephan Gerhold 	.hid_width = 5,
227bf37a057SStephan Gerhold 	.parent_map = gcc_xo_gpll0_bimc_map,
228bf37a057SStephan Gerhold 	.clkr.hw.init = &(struct clk_init_data) {
229bf37a057SStephan Gerhold 		.name = "bimc_ddr_clk_src",
230bf37a057SStephan Gerhold 		.parent_data = gcc_xo_gpll0_bimc_data,
231bf37a057SStephan Gerhold 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_bimc_data),
232bf37a057SStephan Gerhold 		.ops = &clk_rcg2_ops,
233bf37a057SStephan Gerhold 		.flags = CLK_GET_RATE_NOCACHE,
234bf37a057SStephan Gerhold 	},
235bf37a057SStephan Gerhold };
236bf37a057SStephan Gerhold 
237bf37a057SStephan Gerhold static struct clk_rcg2 bimc_gpu_clk_src = {
238bf37a057SStephan Gerhold 	.cmd_rcgr = 0x31028,
239bf37a057SStephan Gerhold 	.hid_width = 5,
240bf37a057SStephan Gerhold 	.parent_map = gcc_xo_gpll0_bimc_map,
241bf37a057SStephan Gerhold 	.clkr.hw.init = &(struct clk_init_data) {
242bf37a057SStephan Gerhold 		.name = "bimc_gpu_clk_src",
243bf37a057SStephan Gerhold 		.parent_data = gcc_xo_gpll0_bimc_data,
244bf37a057SStephan Gerhold 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_bimc_data),
245bf37a057SStephan Gerhold 		.ops = &clk_rcg2_ops,
246bf37a057SStephan Gerhold 		.flags = CLK_GET_RATE_NOCACHE,
247bf37a057SStephan Gerhold 	},
248bf37a057SStephan Gerhold };
249bf37a057SStephan Gerhold 
250bf37a057SStephan Gerhold static const struct freq_tbl ftbl_blsp_i2c_apps_clk_src[] = {
251bf37a057SStephan Gerhold 	F(19200000, P_XO, 1, 0, 0),
252bf37a057SStephan Gerhold 	F(50000000, P_GPLL0, 16, 0, 0),
253bf37a057SStephan Gerhold 	{ }
254bf37a057SStephan Gerhold };
255bf37a057SStephan Gerhold 
256bf37a057SStephan Gerhold static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
257bf37a057SStephan Gerhold 	.cmd_rcgr = 0x0200c,
258bf37a057SStephan Gerhold 	.hid_width = 5,
259bf37a057SStephan Gerhold 	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
260bf37a057SStephan Gerhold 	.parent_map = gcc_xo_gpll0_map,
261bf37a057SStephan Gerhold 	.clkr.hw.init = &(struct clk_init_data) {
262bf37a057SStephan Gerhold 		.name = "blsp1_qup1_i2c_apps_clk_src",
263bf37a057SStephan Gerhold 		.parent_data = gcc_xo_gpll0_data,
264bf37a057SStephan Gerhold 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
265bf37a057SStephan Gerhold 		.ops = &clk_rcg2_ops,
266bf37a057SStephan Gerhold 	}
267bf37a057SStephan Gerhold };
268bf37a057SStephan Gerhold 
269bf37a057SStephan Gerhold static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
270bf37a057SStephan Gerhold 	.cmd_rcgr = 0x03000,
271bf37a057SStephan Gerhold 	.hid_width = 5,
272bf37a057SStephan Gerhold 	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
273bf37a057SStephan Gerhold 	.parent_map = gcc_xo_gpll0_map,
274bf37a057SStephan Gerhold 	.clkr.hw.init = &(struct clk_init_data) {
275bf37a057SStephan Gerhold 		.name = "blsp1_qup2_i2c_apps_clk_src",
276bf37a057SStephan Gerhold 		.parent_data = gcc_xo_gpll0_data,
277bf37a057SStephan Gerhold 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
278bf37a057SStephan Gerhold 		.ops = &clk_rcg2_ops,
279bf37a057SStephan Gerhold 	}
280bf37a057SStephan Gerhold };
281bf37a057SStephan Gerhold 
282bf37a057SStephan Gerhold static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
283bf37a057SStephan Gerhold 	.cmd_rcgr = 0x04000,
284bf37a057SStephan Gerhold 	.hid_width = 5,
285bf37a057SStephan Gerhold 	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
286bf37a057SStephan Gerhold 	.parent_map = gcc_xo_gpll0_map,
287bf37a057SStephan Gerhold 	.clkr.hw.init = &(struct clk_init_data) {
288bf37a057SStephan Gerhold 		.name = "blsp1_qup3_i2c_apps_clk_src",
289bf37a057SStephan Gerhold 		.parent_data = gcc_xo_gpll0_data,
290bf37a057SStephan Gerhold 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
291bf37a057SStephan Gerhold 		.ops = &clk_rcg2_ops,
292bf37a057SStephan Gerhold 	}
293bf37a057SStephan Gerhold };
294bf37a057SStephan Gerhold 
295bf37a057SStephan Gerhold static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
296bf37a057SStephan Gerhold 	.cmd_rcgr = 0x05000,
297bf37a057SStephan Gerhold 	.hid_width = 5,
298bf37a057SStephan Gerhold 	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
299bf37a057SStephan Gerhold 	.parent_map = gcc_xo_gpll0_map,
300bf37a057SStephan Gerhold 	.clkr.hw.init = &(struct clk_init_data) {
301bf37a057SStephan Gerhold 		.name = "blsp1_qup4_i2c_apps_clk_src",
302bf37a057SStephan Gerhold 		.parent_data = gcc_xo_gpll0_data,
303bf37a057SStephan Gerhold 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
304bf37a057SStephan Gerhold 		.ops = &clk_rcg2_ops,
305bf37a057SStephan Gerhold 	}
306bf37a057SStephan Gerhold };
307bf37a057SStephan Gerhold 
308bf37a057SStephan Gerhold static struct clk_rcg2 blsp1_qup5_i2c_apps_clk_src = {
309bf37a057SStephan Gerhold 	.cmd_rcgr = 0x06000,
310bf37a057SStephan Gerhold 	.hid_width = 5,
311bf37a057SStephan Gerhold 	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
312bf37a057SStephan Gerhold 	.parent_map = gcc_xo_gpll0_map,
313bf37a057SStephan Gerhold 	.clkr.hw.init = &(struct clk_init_data) {
314bf37a057SStephan Gerhold 		.name = "blsp1_qup5_i2c_apps_clk_src",
315bf37a057SStephan Gerhold 		.parent_data = gcc_xo_gpll0_data,
316bf37a057SStephan Gerhold 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
317bf37a057SStephan Gerhold 		.ops = &clk_rcg2_ops,
318bf37a057SStephan Gerhold 	}
319bf37a057SStephan Gerhold };
320bf37a057SStephan Gerhold 
321bf37a057SStephan Gerhold static struct clk_rcg2 blsp1_qup6_i2c_apps_clk_src = {
322bf37a057SStephan Gerhold 	.cmd_rcgr = 0x07000,
323bf37a057SStephan Gerhold 	.hid_width = 5,
324bf37a057SStephan Gerhold 	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
325bf37a057SStephan Gerhold 	.parent_map = gcc_xo_gpll0_map,
326bf37a057SStephan Gerhold 	.clkr.hw.init = &(struct clk_init_data) {
327bf37a057SStephan Gerhold 		.name = "blsp1_qup6_i2c_apps_clk_src",
328bf37a057SStephan Gerhold 		.parent_data = gcc_xo_gpll0_data,
329bf37a057SStephan Gerhold 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
330bf37a057SStephan Gerhold 		.ops = &clk_rcg2_ops,
331bf37a057SStephan Gerhold 	}
332bf37a057SStephan Gerhold };
333bf37a057SStephan Gerhold 
334bf37a057SStephan Gerhold static const struct freq_tbl ftbl_blsp_spi_apps_clk_src[] = {
335bf37a057SStephan Gerhold 	F(960000, P_XO, 10, 1, 2),
336bf37a057SStephan Gerhold 	F(4800000, P_XO, 4, 0, 0),
337bf37a057SStephan Gerhold 	F(9600000, P_XO, 2, 0, 0),
338bf37a057SStephan Gerhold 	F(16000000, P_GPLL0, 10, 1, 5),
339bf37a057SStephan Gerhold 	F(19200000, P_XO, 1, 0, 0),
340bf37a057SStephan Gerhold 	F(25000000, P_GPLL0, 16, 1, 2),
341bf37a057SStephan Gerhold 	F(50000000, P_GPLL0, 16, 0, 0),
342bf37a057SStephan Gerhold 	{ }
343bf37a057SStephan Gerhold };
344bf37a057SStephan Gerhold 
345bf37a057SStephan Gerhold static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
346bf37a057SStephan Gerhold 	.cmd_rcgr = 0x02024,
347bf37a057SStephan Gerhold 	.hid_width = 5,
348bf37a057SStephan Gerhold 	.mnd_width = 8,
349bf37a057SStephan Gerhold 	.freq_tbl = ftbl_blsp_spi_apps_clk_src,
350bf37a057SStephan Gerhold 	.parent_map = gcc_xo_gpll0_map,
351bf37a057SStephan Gerhold 	.clkr.hw.init = &(struct clk_init_data) {
352bf37a057SStephan Gerhold 		.name = "blsp1_qup1_spi_apps_clk_src",
353bf37a057SStephan Gerhold 		.parent_data = gcc_xo_gpll0_data,
354bf37a057SStephan Gerhold 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
355bf37a057SStephan Gerhold 		.ops = &clk_rcg2_ops,
356bf37a057SStephan Gerhold 	}
357bf37a057SStephan Gerhold };
358bf37a057SStephan Gerhold 
359bf37a057SStephan Gerhold static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
360bf37a057SStephan Gerhold 	.cmd_rcgr = 0x03014,
361bf37a057SStephan Gerhold 	.hid_width = 5,
362bf37a057SStephan Gerhold 	.mnd_width = 8,
363bf37a057SStephan Gerhold 	.freq_tbl = ftbl_blsp_spi_apps_clk_src,
364bf37a057SStephan Gerhold 	.parent_map = gcc_xo_gpll0_map,
365bf37a057SStephan Gerhold 	.clkr.hw.init = &(struct clk_init_data) {
366bf37a057SStephan Gerhold 		.name = "blsp1_qup2_spi_apps_clk_src",
367bf37a057SStephan Gerhold 		.parent_data = gcc_xo_gpll0_data,
368bf37a057SStephan Gerhold 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
369bf37a057SStephan Gerhold 		.ops = &clk_rcg2_ops,
370bf37a057SStephan Gerhold 	}
371bf37a057SStephan Gerhold };
372bf37a057SStephan Gerhold 
373bf37a057SStephan Gerhold static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
374bf37a057SStephan Gerhold 	.cmd_rcgr = 0x04024,
375bf37a057SStephan Gerhold 	.hid_width = 5,
376bf37a057SStephan Gerhold 	.mnd_width = 8,
377bf37a057SStephan Gerhold 	.freq_tbl = ftbl_blsp_spi_apps_clk_src,
378bf37a057SStephan Gerhold 	.parent_map = gcc_xo_gpll0_map,
379bf37a057SStephan Gerhold 	.clkr.hw.init = &(struct clk_init_data) {
380bf37a057SStephan Gerhold 		.name = "blsp1_qup3_spi_apps_clk_src",
381bf37a057SStephan Gerhold 		.parent_data = gcc_xo_gpll0_data,
382bf37a057SStephan Gerhold 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
383bf37a057SStephan Gerhold 		.ops = &clk_rcg2_ops,
384bf37a057SStephan Gerhold 	}
385bf37a057SStephan Gerhold };
386bf37a057SStephan Gerhold 
387bf37a057SStephan Gerhold static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
388bf37a057SStephan Gerhold 	.cmd_rcgr = 0x05024,
389bf37a057SStephan Gerhold 	.hid_width = 5,
390bf37a057SStephan Gerhold 	.mnd_width = 8,
391bf37a057SStephan Gerhold 	.freq_tbl = ftbl_blsp_spi_apps_clk_src,
392bf37a057SStephan Gerhold 	.parent_map = gcc_xo_gpll0_map,
393bf37a057SStephan Gerhold 	.clkr.hw.init = &(struct clk_init_data) {
394bf37a057SStephan Gerhold 		.name = "blsp1_qup4_spi_apps_clk_src",
395bf37a057SStephan Gerhold 		.parent_data = gcc_xo_gpll0_data,
396bf37a057SStephan Gerhold 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
397bf37a057SStephan Gerhold 		.ops = &clk_rcg2_ops,
398bf37a057SStephan Gerhold 	}
399bf37a057SStephan Gerhold };
400bf37a057SStephan Gerhold 
401bf37a057SStephan Gerhold static struct clk_rcg2 blsp1_qup5_spi_apps_clk_src = {
402bf37a057SStephan Gerhold 	.cmd_rcgr = 0x06024,
403bf37a057SStephan Gerhold 	.hid_width = 5,
404bf37a057SStephan Gerhold 	.mnd_width = 8,
405bf37a057SStephan Gerhold 	.freq_tbl = ftbl_blsp_spi_apps_clk_src,
406bf37a057SStephan Gerhold 	.parent_map = gcc_xo_gpll0_map,
407bf37a057SStephan Gerhold 	.clkr.hw.init = &(struct clk_init_data) {
408bf37a057SStephan Gerhold 		.name = "blsp1_qup5_spi_apps_clk_src",
409bf37a057SStephan Gerhold 		.parent_data = gcc_xo_gpll0_data,
410bf37a057SStephan Gerhold 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
411bf37a057SStephan Gerhold 		.ops = &clk_rcg2_ops,
412bf37a057SStephan Gerhold 	}
413bf37a057SStephan Gerhold };
414bf37a057SStephan Gerhold 
415bf37a057SStephan Gerhold static struct clk_rcg2 blsp1_qup6_spi_apps_clk_src = {
416bf37a057SStephan Gerhold 	.cmd_rcgr = 0x07024,
417bf37a057SStephan Gerhold 	.hid_width = 5,
418bf37a057SStephan Gerhold 	.mnd_width = 8,
419bf37a057SStephan Gerhold 	.freq_tbl = ftbl_blsp_spi_apps_clk_src,
420bf37a057SStephan Gerhold 	.parent_map = gcc_xo_gpll0_map,
421bf37a057SStephan Gerhold 	.clkr.hw.init = &(struct clk_init_data) {
422bf37a057SStephan Gerhold 		.name = "blsp1_qup6_spi_apps_clk_src",
423bf37a057SStephan Gerhold 		.parent_data = gcc_xo_gpll0_data,
424bf37a057SStephan Gerhold 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
425bf37a057SStephan Gerhold 		.ops = &clk_rcg2_ops,
426bf37a057SStephan Gerhold 	}
427bf37a057SStephan Gerhold };
428bf37a057SStephan Gerhold 
429bf37a057SStephan Gerhold static const struct freq_tbl ftbl_blsp_uart_apps_clk_src[] = {
430bf37a057SStephan Gerhold 	F(3686400, P_GPLL0, 1, 72, 15625),
431bf37a057SStephan Gerhold 	F(7372800, P_GPLL0, 1, 144, 15625),
432bf37a057SStephan Gerhold 	F(14745600, P_GPLL0, 1, 288, 15625),
433bf37a057SStephan Gerhold 	F(16000000, P_GPLL0, 10, 1, 5),
434bf37a057SStephan Gerhold 	F(19200000, P_XO, 1, 0, 0),
435bf37a057SStephan Gerhold 	F(24000000, P_GPLL0, 1, 3, 100),
436bf37a057SStephan Gerhold 	F(25000000, P_GPLL0, 16, 1, 2),
437bf37a057SStephan Gerhold 	F(32000000, P_GPLL0, 1, 1, 25),
438bf37a057SStephan Gerhold 	F(40000000, P_GPLL0, 1, 1, 20),
439bf37a057SStephan Gerhold 	F(46400000, P_GPLL0, 1, 29, 500),
440bf37a057SStephan Gerhold 	F(48000000, P_GPLL0, 1, 3, 50),
441bf37a057SStephan Gerhold 	F(51200000, P_GPLL0, 1, 8, 125),
442bf37a057SStephan Gerhold 	F(56000000, P_GPLL0, 1, 7, 100),
443bf37a057SStephan Gerhold 	F(58982400, P_GPLL0, 1, 1152, 15625),
444bf37a057SStephan Gerhold 	F(60000000, P_GPLL0, 1, 3, 40),
445bf37a057SStephan Gerhold 	{ }
446bf37a057SStephan Gerhold };
447bf37a057SStephan Gerhold 
448bf37a057SStephan Gerhold static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
449bf37a057SStephan Gerhold 	.cmd_rcgr = 0x02044,
450bf37a057SStephan Gerhold 	.hid_width = 5,
451bf37a057SStephan Gerhold 	.mnd_width = 16,
452bf37a057SStephan Gerhold 	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
453bf37a057SStephan Gerhold 	.parent_map = gcc_xo_gpll0_map,
454bf37a057SStephan Gerhold 	.clkr.hw.init = &(struct clk_init_data) {
455bf37a057SStephan Gerhold 		.name = "blsp1_uart1_apps_clk_src",
456bf37a057SStephan Gerhold 		.parent_data = gcc_xo_gpll0_data,
457bf37a057SStephan Gerhold 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
458bf37a057SStephan Gerhold 		.ops = &clk_rcg2_ops,
459bf37a057SStephan Gerhold 	}
460bf37a057SStephan Gerhold };
461bf37a057SStephan Gerhold 
462bf37a057SStephan Gerhold static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
463bf37a057SStephan Gerhold 	.cmd_rcgr = 0x03034,
464bf37a057SStephan Gerhold 	.hid_width = 5,
465bf37a057SStephan Gerhold 	.mnd_width = 16,
466bf37a057SStephan Gerhold 	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
467bf37a057SStephan Gerhold 	.parent_map = gcc_xo_gpll0_map,
468bf37a057SStephan Gerhold 	.clkr.hw.init = &(struct clk_init_data) {
469bf37a057SStephan Gerhold 		.name = "blsp1_uart2_apps_clk_src",
470bf37a057SStephan Gerhold 		.parent_data = gcc_xo_gpll0_data,
471bf37a057SStephan Gerhold 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
472bf37a057SStephan Gerhold 		.ops = &clk_rcg2_ops,
473bf37a057SStephan Gerhold 	}
474bf37a057SStephan Gerhold };
475bf37a057SStephan Gerhold 
476bf37a057SStephan Gerhold static const struct parent_map gcc_byte0_map[] = {
477bf37a057SStephan Gerhold 	{ P_XO, 0 },
478bf37a057SStephan Gerhold 	{ P_DSI0PLL_BYTE, 1 },
479bf37a057SStephan Gerhold };
480bf37a057SStephan Gerhold 
481bf37a057SStephan Gerhold static const struct clk_parent_data gcc_byte_data[] = {
482bf37a057SStephan Gerhold 	{ .index = DT_XO },
483bf37a057SStephan Gerhold 	{ .index = DT_DSI0PLL_BYTE },
484bf37a057SStephan Gerhold };
485bf37a057SStephan Gerhold 
486bf37a057SStephan Gerhold static struct clk_rcg2 byte0_clk_src = {
487bf37a057SStephan Gerhold 	.cmd_rcgr = 0x4d044,
488bf37a057SStephan Gerhold 	.hid_width = 5,
489bf37a057SStephan Gerhold 	.parent_map = gcc_byte0_map,
490bf37a057SStephan Gerhold 	.clkr.hw.init = &(struct clk_init_data) {
491bf37a057SStephan Gerhold 		.name = "byte0_clk_src",
492bf37a057SStephan Gerhold 		.parent_data = gcc_byte_data,
493bf37a057SStephan Gerhold 		.num_parents = ARRAY_SIZE(gcc_byte_data),
494bf37a057SStephan Gerhold 		.ops = &clk_byte2_ops,
495bf37a057SStephan Gerhold 		.flags = CLK_SET_RATE_PARENT,
496bf37a057SStephan Gerhold 	}
497bf37a057SStephan Gerhold };
498bf37a057SStephan Gerhold 
499bf37a057SStephan Gerhold static const struct freq_tbl ftbl_camss_gp_clk_src[] = {
500bf37a057SStephan Gerhold 	F(100000000, P_GPLL0, 8, 0, 0),
501bf37a057SStephan Gerhold 	F(200000000, P_GPLL0, 4, 0, 0),
502bf37a057SStephan Gerhold 	{ }
503bf37a057SStephan Gerhold };
504bf37a057SStephan Gerhold 
505bf37a057SStephan Gerhold static struct clk_rcg2 camss_gp0_clk_src = {
506bf37a057SStephan Gerhold 	.cmd_rcgr = 0x54000,
507bf37a057SStephan Gerhold 	.hid_width = 5,
508bf37a057SStephan Gerhold 	.mnd_width = 8,
509bf37a057SStephan Gerhold 	.freq_tbl = ftbl_camss_gp_clk_src,
510bf37a057SStephan Gerhold 	.parent_map = gcc_xo_gpll0_map,
511bf37a057SStephan Gerhold 	.clkr.hw.init = &(struct clk_init_data) {
512bf37a057SStephan Gerhold 		.name = "camss_gp0_clk_src",
513bf37a057SStephan Gerhold 		.parent_data = gcc_xo_gpll0_data,
514bf37a057SStephan Gerhold 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
515bf37a057SStephan Gerhold 		.ops = &clk_rcg2_ops,
516bf37a057SStephan Gerhold 	}
517bf37a057SStephan Gerhold };
518bf37a057SStephan Gerhold 
519bf37a057SStephan Gerhold static struct clk_rcg2 camss_gp1_clk_src = {
520bf37a057SStephan Gerhold 	.cmd_rcgr = 0x55000,
521bf37a057SStephan Gerhold 	.hid_width = 5,
522bf37a057SStephan Gerhold 	.mnd_width = 8,
523bf37a057SStephan Gerhold 	.freq_tbl = ftbl_camss_gp_clk_src,
524bf37a057SStephan Gerhold 	.parent_map = gcc_xo_gpll0_map,
525bf37a057SStephan Gerhold 	.clkr.hw.init = &(struct clk_init_data) {
526bf37a057SStephan Gerhold 		.name = "camss_gp1_clk_src",
527bf37a057SStephan Gerhold 		.parent_data = gcc_xo_gpll0_data,
528bf37a057SStephan Gerhold 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
529bf37a057SStephan Gerhold 		.ops = &clk_rcg2_ops,
530bf37a057SStephan Gerhold 	}
531bf37a057SStephan Gerhold };
532bf37a057SStephan Gerhold 
533bf37a057SStephan Gerhold static const struct freq_tbl ftbl_camss_top_ahb_clk_src[] = {
534bf37a057SStephan Gerhold 	F(40000000, P_GPLL0, 10, 1, 2),
535bf37a057SStephan Gerhold 	F(80000000, P_GPLL0, 10, 0, 0),
536bf37a057SStephan Gerhold 	{ }
537bf37a057SStephan Gerhold };
538bf37a057SStephan Gerhold 
539bf37a057SStephan Gerhold static struct clk_rcg2 camss_top_ahb_clk_src = {
540bf37a057SStephan Gerhold 	.cmd_rcgr = 0x5a000,
541bf37a057SStephan Gerhold 	.hid_width = 5,
542bf37a057SStephan Gerhold 	.mnd_width = 8,
543bf37a057SStephan Gerhold 	.freq_tbl = ftbl_camss_top_ahb_clk_src,
544bf37a057SStephan Gerhold 	.parent_map = gcc_xo_gpll0_map,
545bf37a057SStephan Gerhold 	.clkr.hw.init = &(struct clk_init_data) {
546bf37a057SStephan Gerhold 		.name = "camss_top_ahb_clk_src",
547bf37a057SStephan Gerhold 		.parent_data = gcc_xo_gpll0_data,
548bf37a057SStephan Gerhold 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
549bf37a057SStephan Gerhold 		.ops = &clk_rcg2_ops,
550bf37a057SStephan Gerhold 	}
551bf37a057SStephan Gerhold };
552bf37a057SStephan Gerhold 
553bf37a057SStephan Gerhold static const struct freq_tbl ftbl_crypto_clk_src[] = {
554bf37a057SStephan Gerhold 	F(50000000, P_GPLL0, 16, 0, 0),
555bf37a057SStephan Gerhold 	F(80000000, P_GPLL0, 10, 0, 0),
556bf37a057SStephan Gerhold 	F(100000000, P_GPLL0, 8, 0, 0),
557bf37a057SStephan Gerhold 	F(160000000, P_GPLL0, 5, 0, 0),
558bf37a057SStephan Gerhold 	{ }
559bf37a057SStephan Gerhold };
560bf37a057SStephan Gerhold 
561bf37a057SStephan Gerhold static struct clk_rcg2 crypto_clk_src = {
562bf37a057SStephan Gerhold 	.cmd_rcgr = 0x16004,
563bf37a057SStephan Gerhold 	.hid_width = 5,
564bf37a057SStephan Gerhold 	.freq_tbl = ftbl_crypto_clk_src,
565bf37a057SStephan Gerhold 	.parent_map = gcc_xo_gpll0_map,
566bf37a057SStephan Gerhold 	.clkr.hw.init = &(struct clk_init_data) {
567bf37a057SStephan Gerhold 		.name = "crypto_clk_src",
568bf37a057SStephan Gerhold 		.parent_data = gcc_xo_gpll0_data,
569bf37a057SStephan Gerhold 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
570bf37a057SStephan Gerhold 		.ops = &clk_rcg2_ops,
571bf37a057SStephan Gerhold 	}
572bf37a057SStephan Gerhold };
573bf37a057SStephan Gerhold 
574bf37a057SStephan Gerhold static const struct freq_tbl ftbl_csi_clk_src[] = {
575bf37a057SStephan Gerhold 	F(100000000, P_GPLL0, 8, 0, 0),
576bf37a057SStephan Gerhold 	F(200000000, P_GPLL0, 4, 0, 0),
577bf37a057SStephan Gerhold 	{ }
578bf37a057SStephan Gerhold };
579bf37a057SStephan Gerhold 
580bf37a057SStephan Gerhold static struct clk_rcg2 csi0_clk_src = {
581bf37a057SStephan Gerhold 	.cmd_rcgr = 0x4e020,
582bf37a057SStephan Gerhold 	.hid_width = 5,
583bf37a057SStephan Gerhold 	.freq_tbl = ftbl_csi_clk_src,
584bf37a057SStephan Gerhold 	.parent_map = gcc_xo_gpll0_map,
585bf37a057SStephan Gerhold 	.clkr.hw.init = &(struct clk_init_data) {
586bf37a057SStephan Gerhold 		.name = "csi0_clk_src",
587bf37a057SStephan Gerhold 		.parent_data = gcc_xo_gpll0_data,
588bf37a057SStephan Gerhold 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_map),
589bf37a057SStephan Gerhold 		.ops = &clk_rcg2_ops,
590bf37a057SStephan Gerhold 	}
591bf37a057SStephan Gerhold };
592bf37a057SStephan Gerhold 
593bf37a057SStephan Gerhold static struct clk_rcg2 csi1_clk_src = {
594bf37a057SStephan Gerhold 	.cmd_rcgr = 0x4f020,
595bf37a057SStephan Gerhold 	.hid_width = 5,
596bf37a057SStephan Gerhold 	.freq_tbl = ftbl_csi_clk_src,
597bf37a057SStephan Gerhold 	.parent_map = gcc_xo_gpll0_map,
598bf37a057SStephan Gerhold 	.clkr.hw.init = &(struct clk_init_data) {
599bf37a057SStephan Gerhold 		.name = "csi1_clk_src",
600bf37a057SStephan Gerhold 		.parent_data = gcc_xo_gpll0_data,
601bf37a057SStephan Gerhold 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
602bf37a057SStephan Gerhold 		.ops = &clk_rcg2_ops,
603bf37a057SStephan Gerhold 	}
604bf37a057SStephan Gerhold };
605bf37a057SStephan Gerhold 
606bf37a057SStephan Gerhold static const struct freq_tbl ftbl_csi_phytimer_clk_src[] = {
607bf37a057SStephan Gerhold 	F(100000000, P_GPLL0, 8, 0, 0),
608bf37a057SStephan Gerhold 	F(200000000, P_GPLL0, 4, 0, 0),
609bf37a057SStephan Gerhold 	{ }
610bf37a057SStephan Gerhold };
611bf37a057SStephan Gerhold 
612bf37a057SStephan Gerhold static struct clk_rcg2 csi0phytimer_clk_src = {
613bf37a057SStephan Gerhold 	.cmd_rcgr = 0x4e000,
614bf37a057SStephan Gerhold 	.hid_width = 5,
615bf37a057SStephan Gerhold 	.freq_tbl = ftbl_csi_phytimer_clk_src,
616bf37a057SStephan Gerhold 	.parent_map = gcc_xo_gpll0_map,
617bf37a057SStephan Gerhold 	.clkr.hw.init = &(struct clk_init_data) {
618bf37a057SStephan Gerhold 		.name = "csi0phytimer_clk_src",
619bf37a057SStephan Gerhold 		.parent_data = gcc_xo_gpll0_data,
620bf37a057SStephan Gerhold 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
621bf37a057SStephan Gerhold 		.ops = &clk_rcg2_ops,
622bf37a057SStephan Gerhold 	}
623bf37a057SStephan Gerhold };
624bf37a057SStephan Gerhold 
625bf37a057SStephan Gerhold static const struct freq_tbl ftbl_esc0_clk_src[] = {
626bf37a057SStephan Gerhold 	F(19200000, P_XO, 1, 0, 0),
627bf37a057SStephan Gerhold 	{ }
628bf37a057SStephan Gerhold };
629bf37a057SStephan Gerhold 
630bf37a057SStephan Gerhold static struct clk_rcg2 esc0_clk_src = {
631bf37a057SStephan Gerhold 	.cmd_rcgr = 0x4d05c,
632bf37a057SStephan Gerhold 	.hid_width = 5,
633bf37a057SStephan Gerhold 	.freq_tbl = ftbl_esc0_clk_src,
634bf37a057SStephan Gerhold 	.parent_map = gcc_xo_map,
635bf37a057SStephan Gerhold 	.clkr.hw.init = &(struct clk_init_data) {
636bf37a057SStephan Gerhold 		.name = "esc0_clk_src",
637bf37a057SStephan Gerhold 		.parent_data = gcc_xo_data,
638bf37a057SStephan Gerhold 		.num_parents = ARRAY_SIZE(gcc_xo_data),
639bf37a057SStephan Gerhold 		.ops = &clk_rcg2_ops,
640bf37a057SStephan Gerhold 	}
641bf37a057SStephan Gerhold };
642bf37a057SStephan Gerhold 
643bf37a057SStephan Gerhold static const struct parent_map gcc_gfx3d_map[] = {
644bf37a057SStephan Gerhold 	{ P_XO, 0 },
645bf37a057SStephan Gerhold 	{ P_GPLL0, 1 },
646bf37a057SStephan Gerhold 	{ P_GPLL1, 2 },
647bf37a057SStephan Gerhold };
648bf37a057SStephan Gerhold 
649bf37a057SStephan Gerhold static const struct clk_parent_data gcc_gfx3d_data[] = {
650bf37a057SStephan Gerhold 	{ .index = DT_XO },
651bf37a057SStephan Gerhold 	{ .hw = &gpll0.clkr.hw },
652bf37a057SStephan Gerhold 	{ .hw = &gpll1_vote.hw },
653bf37a057SStephan Gerhold };
654bf37a057SStephan Gerhold 
655bf37a057SStephan Gerhold static const struct freq_tbl ftbl_gfx3d_clk_src[] = {
656bf37a057SStephan Gerhold 	F(19200000, P_XO, 1, 0, 0),
657bf37a057SStephan Gerhold 	F(50000000, P_GPLL0, 16, 0, 0),
658bf37a057SStephan Gerhold 	F(80000000, P_GPLL0, 10, 0, 0),
659bf37a057SStephan Gerhold 	F(100000000, P_GPLL0, 8, 0, 0),
660bf37a057SStephan Gerhold 	F(160000000, P_GPLL0, 5, 0, 0),
661bf37a057SStephan Gerhold 	F(177780000, P_GPLL0, 4.5, 0, 0),
662bf37a057SStephan Gerhold 	F(200000000, P_GPLL0, 4, 0, 0),
663bf37a057SStephan Gerhold 	F(266670000, P_GPLL0, 3, 0, 0),
664bf37a057SStephan Gerhold 	F(307200000, P_GPLL1, 4, 0, 0),
665bf37a057SStephan Gerhold 	F(409600000, P_GPLL1, 3, 0, 0),
666bf37a057SStephan Gerhold 	{ }
667bf37a057SStephan Gerhold };
668bf37a057SStephan Gerhold 
669bf37a057SStephan Gerhold static struct clk_rcg2 gfx3d_clk_src = {
670bf37a057SStephan Gerhold 	.cmd_rcgr = 0x59000,
671bf37a057SStephan Gerhold 	.hid_width = 5,
672bf37a057SStephan Gerhold 	.freq_tbl = ftbl_gfx3d_clk_src,
673bf37a057SStephan Gerhold 	.parent_map = gcc_gfx3d_map,
674bf37a057SStephan Gerhold 	.clkr.hw.init = &(struct clk_init_data) {
675bf37a057SStephan Gerhold 		.name = "gfx3d_clk_src",
676bf37a057SStephan Gerhold 		.parent_data = gcc_gfx3d_data,
677bf37a057SStephan Gerhold 		.num_parents = ARRAY_SIZE(gcc_gfx3d_data),
678bf37a057SStephan Gerhold 		.ops = &clk_rcg2_ops,
679bf37a057SStephan Gerhold 	}
680bf37a057SStephan Gerhold };
681bf37a057SStephan Gerhold 
682bf37a057SStephan Gerhold static const struct freq_tbl ftbl_gp_clk_src[] = {
683bf37a057SStephan Gerhold 	F(150000, P_XO, 1, 1, 128),
684bf37a057SStephan Gerhold 	F(19200000, P_XO, 1, 0, 0),
685bf37a057SStephan Gerhold 	{ }
686bf37a057SStephan Gerhold };
687bf37a057SStephan Gerhold 
688bf37a057SStephan Gerhold static struct clk_rcg2 gp1_clk_src = {
689bf37a057SStephan Gerhold 	.cmd_rcgr = 0x08004,
690bf37a057SStephan Gerhold 	.hid_width = 5,
691bf37a057SStephan Gerhold 	.mnd_width = 8,
692bf37a057SStephan Gerhold 	.freq_tbl = ftbl_gp_clk_src,
693bf37a057SStephan Gerhold 	.parent_map = gcc_xo_map,
694bf37a057SStephan Gerhold 	.clkr.hw.init = &(struct clk_init_data) {
695bf37a057SStephan Gerhold 		.name = "gp1_clk_src",
696bf37a057SStephan Gerhold 		.parent_data = gcc_xo_data,
697bf37a057SStephan Gerhold 		.num_parents = ARRAY_SIZE(gcc_xo_data),
698bf37a057SStephan Gerhold 		.ops = &clk_rcg2_ops,
699bf37a057SStephan Gerhold 	}
700bf37a057SStephan Gerhold };
701bf37a057SStephan Gerhold 
702bf37a057SStephan Gerhold static struct clk_rcg2 gp2_clk_src = {
703bf37a057SStephan Gerhold 	.cmd_rcgr = 0x09004,
704bf37a057SStephan Gerhold 	.hid_width = 5,
705bf37a057SStephan Gerhold 	.mnd_width = 8,
706bf37a057SStephan Gerhold 	.freq_tbl = ftbl_gp_clk_src,
707bf37a057SStephan Gerhold 	.parent_map = gcc_xo_map,
708bf37a057SStephan Gerhold 	.clkr.hw.init = &(struct clk_init_data) {
709bf37a057SStephan Gerhold 		.name = "gp2_clk_src",
710bf37a057SStephan Gerhold 		.parent_data = gcc_xo_data,
711bf37a057SStephan Gerhold 		.num_parents = ARRAY_SIZE(gcc_xo_data),
712bf37a057SStephan Gerhold 		.ops = &clk_rcg2_ops,
713bf37a057SStephan Gerhold 	}
714bf37a057SStephan Gerhold };
715bf37a057SStephan Gerhold 
716bf37a057SStephan Gerhold static struct clk_rcg2 gp3_clk_src = {
717bf37a057SStephan Gerhold 	.cmd_rcgr = 0x0a004,
718bf37a057SStephan Gerhold 	.hid_width = 5,
719bf37a057SStephan Gerhold 	.mnd_width = 8,
720bf37a057SStephan Gerhold 	.freq_tbl = ftbl_gp_clk_src,
721bf37a057SStephan Gerhold 	.parent_map = gcc_xo_map,
722bf37a057SStephan Gerhold 	.clkr.hw.init = &(struct clk_init_data) {
723bf37a057SStephan Gerhold 		.name = "gp3_clk_src",
724bf37a057SStephan Gerhold 		.parent_data = gcc_xo_data,
725bf37a057SStephan Gerhold 		.num_parents = ARRAY_SIZE(gcc_xo_data),
726bf37a057SStephan Gerhold 		.ops = &clk_rcg2_ops,
727bf37a057SStephan Gerhold 	}
728bf37a057SStephan Gerhold };
729bf37a057SStephan Gerhold 
730bf37a057SStephan Gerhold static const struct parent_map gcc_mclk_map[] = {
731bf37a057SStephan Gerhold 	{ P_XO, 0 },
732bf37a057SStephan Gerhold 	{ P_GPLL0, 1 },
733bf37a057SStephan Gerhold 	{ P_GPLL2, 3 },
734bf37a057SStephan Gerhold };
735bf37a057SStephan Gerhold 
736bf37a057SStephan Gerhold static const struct clk_parent_data gcc_mclk_data[] = {
737bf37a057SStephan Gerhold 	{ .index = DT_XO },
738bf37a057SStephan Gerhold 	{ .hw = &gpll0.clkr.hw },
739bf37a057SStephan Gerhold 	{ .hw = &gpll2.clkr.hw },
740bf37a057SStephan Gerhold };
741bf37a057SStephan Gerhold 
742bf37a057SStephan Gerhold static const struct freq_tbl ftbl_mclk_clk_src[] = {
743bf37a057SStephan Gerhold 	F(24000000, P_GPLL2, 1, 1, 33),
744bf37a057SStephan Gerhold 	F(66667000, P_GPLL0, 12, 0, 0),
745bf37a057SStephan Gerhold 	{ }
746bf37a057SStephan Gerhold };
747bf37a057SStephan Gerhold 
748bf37a057SStephan Gerhold static struct clk_rcg2 mclk0_clk_src = {
749bf37a057SStephan Gerhold 	.cmd_rcgr = 0x52000,
750bf37a057SStephan Gerhold 	.hid_width = 5,
751bf37a057SStephan Gerhold 	.mnd_width = 8,
752bf37a057SStephan Gerhold 	.freq_tbl = ftbl_mclk_clk_src,
753bf37a057SStephan Gerhold 	.parent_map = gcc_mclk_map,
754bf37a057SStephan Gerhold 	.clkr.hw.init = &(struct clk_init_data) {
755bf37a057SStephan Gerhold 		.name = "mclk0_clk_src",
756bf37a057SStephan Gerhold 		.parent_data = gcc_mclk_data,
757bf37a057SStephan Gerhold 		.num_parents = ARRAY_SIZE(gcc_mclk_data),
758bf37a057SStephan Gerhold 		.ops = &clk_rcg2_ops,
759bf37a057SStephan Gerhold 	}
760bf37a057SStephan Gerhold };
761bf37a057SStephan Gerhold 
762bf37a057SStephan Gerhold static struct clk_rcg2 mclk1_clk_src = {
763bf37a057SStephan Gerhold 	.cmd_rcgr = 0x53000,
764bf37a057SStephan Gerhold 	.hid_width = 5,
765bf37a057SStephan Gerhold 	.mnd_width = 8,
766bf37a057SStephan Gerhold 	.freq_tbl = ftbl_mclk_clk_src,
767bf37a057SStephan Gerhold 	.parent_map = gcc_mclk_map,
768bf37a057SStephan Gerhold 	.clkr.hw.init = &(struct clk_init_data) {
769bf37a057SStephan Gerhold 		.name = "mclk1_clk_src",
770bf37a057SStephan Gerhold 		.parent_data = gcc_mclk_data,
771bf37a057SStephan Gerhold 		.num_parents = ARRAY_SIZE(gcc_mclk_data),
772bf37a057SStephan Gerhold 		.ops = &clk_rcg2_ops,
773bf37a057SStephan Gerhold 	}
774bf37a057SStephan Gerhold };
775bf37a057SStephan Gerhold 
776bf37a057SStephan Gerhold static const struct parent_map gcc_mdp_map[] = {
777bf37a057SStephan Gerhold 	{ P_XO, 0 },
778bf37a057SStephan Gerhold 	{ P_GPLL0, 1 },
779bf37a057SStephan Gerhold 	{ P_GPLL1, 3 },
780bf37a057SStephan Gerhold };
781bf37a057SStephan Gerhold 
782bf37a057SStephan Gerhold static const struct clk_parent_data gcc_mdp_data[] = {
783bf37a057SStephan Gerhold 	{ .index = DT_XO },
784bf37a057SStephan Gerhold 	{ .hw = &gpll0.clkr.hw },
785bf37a057SStephan Gerhold 	{ .hw = &gpll1_vote.hw },
786bf37a057SStephan Gerhold };
787bf37a057SStephan Gerhold 
788bf37a057SStephan Gerhold static const struct freq_tbl ftbl_mdp_clk_src[] = {
789bf37a057SStephan Gerhold 	F(50000000, P_GPLL0, 16, 0, 0),
790bf37a057SStephan Gerhold 	F(80000000, P_GPLL0, 10, 0, 0),
791bf37a057SStephan Gerhold 	F(100000000, P_GPLL0, 8, 0, 0),
792bf37a057SStephan Gerhold 	F(160000000, P_GPLL0, 5, 0, 0),
793bf37a057SStephan Gerhold 	F(177780000, P_GPLL0, 4.5, 0, 0),
794bf37a057SStephan Gerhold 	F(200000000, P_GPLL0, 4, 0, 0),
795bf37a057SStephan Gerhold 	F(266670000, P_GPLL0, 3, 0, 0),
796bf37a057SStephan Gerhold 	F(307200000, P_GPLL1, 4, 0, 0),
797bf37a057SStephan Gerhold 	{ }
798bf37a057SStephan Gerhold };
799bf37a057SStephan Gerhold 
800bf37a057SStephan Gerhold static struct clk_rcg2 mdp_clk_src = {
801bf37a057SStephan Gerhold 	.cmd_rcgr = 0x4d014,
802bf37a057SStephan Gerhold 	.hid_width = 5,
803bf37a057SStephan Gerhold 	.freq_tbl = ftbl_mdp_clk_src,
804bf37a057SStephan Gerhold 	.parent_map = gcc_mdp_map,
805bf37a057SStephan Gerhold 	.clkr.hw.init = &(struct clk_init_data) {
806bf37a057SStephan Gerhold 		.name = "mdp_clk_src",
807bf37a057SStephan Gerhold 		.parent_data = gcc_mdp_data,
808bf37a057SStephan Gerhold 		.num_parents = ARRAY_SIZE(gcc_mdp_data),
809bf37a057SStephan Gerhold 		.ops = &clk_rcg2_ops,
810bf37a057SStephan Gerhold 	}
811bf37a057SStephan Gerhold };
812bf37a057SStephan Gerhold 
813bf37a057SStephan Gerhold static const struct parent_map gcc_pclk0_map[] = {
814bf37a057SStephan Gerhold 	{ P_XO, 0 },
815bf37a057SStephan Gerhold 	{ P_DSI0PLL, 1 },
816bf37a057SStephan Gerhold };
817bf37a057SStephan Gerhold 
818bf37a057SStephan Gerhold static const struct clk_parent_data gcc_pclk_data[] = {
819bf37a057SStephan Gerhold 	{ .index = DT_XO },
820bf37a057SStephan Gerhold 	{ .index = DT_DSI0PLL },
821bf37a057SStephan Gerhold };
822bf37a057SStephan Gerhold 
823bf37a057SStephan Gerhold static struct clk_rcg2 pclk0_clk_src = {
824bf37a057SStephan Gerhold 	.cmd_rcgr = 0x4d000,
825bf37a057SStephan Gerhold 	.hid_width = 5,
826bf37a057SStephan Gerhold 	.mnd_width = 8,
827bf37a057SStephan Gerhold 	.parent_map = gcc_pclk0_map,
828bf37a057SStephan Gerhold 	.clkr.hw.init = &(struct clk_init_data) {
829bf37a057SStephan Gerhold 		.name = "pclk0_clk_src",
830bf37a057SStephan Gerhold 		.parent_data = gcc_pclk_data,
831bf37a057SStephan Gerhold 		.num_parents = ARRAY_SIZE(gcc_pclk_data),
832bf37a057SStephan Gerhold 		.ops = &clk_pixel_ops,
833bf37a057SStephan Gerhold 		.flags = CLK_SET_RATE_PARENT,
834bf37a057SStephan Gerhold 	}
835bf37a057SStephan Gerhold };
836bf37a057SStephan Gerhold 
837bf37a057SStephan Gerhold static struct clk_rcg2 pcnoc_bfdcd_clk_src = {
838bf37a057SStephan Gerhold 	.cmd_rcgr = 0x27000,
839bf37a057SStephan Gerhold 	.hid_width = 5,
840bf37a057SStephan Gerhold 	.parent_map = gcc_xo_gpll0_bimc_map,
841bf37a057SStephan Gerhold 	.clkr.hw.init = &(struct clk_init_data) {
842bf37a057SStephan Gerhold 		.name = "pcnoc_bfdcd_clk_src",
843bf37a057SStephan Gerhold 		.parent_data = gcc_xo_gpll0_bimc_data,
844bf37a057SStephan Gerhold 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_bimc_data),
845bf37a057SStephan Gerhold 		.ops = &clk_rcg2_ops,
846bf37a057SStephan Gerhold 	},
847bf37a057SStephan Gerhold };
848bf37a057SStephan Gerhold 
849bf37a057SStephan Gerhold static const struct freq_tbl ftbl_pdm2_clk_src[] = {
850bf37a057SStephan Gerhold 	F(64000000, P_GPLL0, 12.5, 0, 0),
851bf37a057SStephan Gerhold 	{ }
852bf37a057SStephan Gerhold };
853bf37a057SStephan Gerhold 
854bf37a057SStephan Gerhold static struct clk_rcg2 pdm2_clk_src = {
855bf37a057SStephan Gerhold 	.cmd_rcgr = 0x44010,
856bf37a057SStephan Gerhold 	.hid_width = 5,
857bf37a057SStephan Gerhold 	.freq_tbl = ftbl_pdm2_clk_src,
858bf37a057SStephan Gerhold 	.parent_map = gcc_xo_gpll0_map,
859bf37a057SStephan Gerhold 	.clkr.hw.init = &(struct clk_init_data) {
860bf37a057SStephan Gerhold 		.name = "pdm2_clk_src",
861bf37a057SStephan Gerhold 		.parent_data = gcc_xo_gpll0_data,
862bf37a057SStephan Gerhold 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
863bf37a057SStephan Gerhold 		.ops = &clk_rcg2_ops,
864bf37a057SStephan Gerhold 	}
865bf37a057SStephan Gerhold };
866bf37a057SStephan Gerhold 
867bf37a057SStephan Gerhold static const struct freq_tbl ftbl_gcc_sdcc1_2_apps_clk[] = {
868bf37a057SStephan Gerhold 	F(144000, P_XO, 16, 3, 25),
869bf37a057SStephan Gerhold 	F(400000, P_XO, 12, 1, 4),
870bf37a057SStephan Gerhold 	F(20000000, P_GPLL0, 10, 1, 4),
871bf37a057SStephan Gerhold 	F(25000000, P_GPLL0, 16, 1, 2),
872bf37a057SStephan Gerhold 	F(50000000, P_GPLL0, 16, 0, 0),
873bf37a057SStephan Gerhold 	F(100000000, P_GPLL0, 8, 0, 0),
874bf37a057SStephan Gerhold 	F(177770000, P_GPLL0, 4.5, 0, 0),
875bf37a057SStephan Gerhold 	F(200000000, P_GPLL0, 4, 0, 0),
876bf37a057SStephan Gerhold 	{ }
877bf37a057SStephan Gerhold };
878bf37a057SStephan Gerhold 
879bf37a057SStephan Gerhold static struct clk_rcg2 sdcc1_apps_clk_src = {
880bf37a057SStephan Gerhold 	.cmd_rcgr = 0x42004,
881bf37a057SStephan Gerhold 	.hid_width = 5,
882bf37a057SStephan Gerhold 	.mnd_width = 8,
883bf37a057SStephan Gerhold 	.freq_tbl = ftbl_gcc_sdcc1_2_apps_clk,
884bf37a057SStephan Gerhold 	.parent_map = gcc_xo_gpll0_map,
885bf37a057SStephan Gerhold 	.clkr.hw.init = &(struct clk_init_data) {
886bf37a057SStephan Gerhold 		.name = "sdcc1_apps_clk_src",
887bf37a057SStephan Gerhold 		.parent_data = gcc_xo_gpll0_data,
888bf37a057SStephan Gerhold 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
889bf37a057SStephan Gerhold 		.ops = &clk_rcg2_floor_ops,
890bf37a057SStephan Gerhold 	}
891bf37a057SStephan Gerhold };
892bf37a057SStephan Gerhold 
893bf37a057SStephan Gerhold static struct clk_rcg2 sdcc2_apps_clk_src = {
894bf37a057SStephan Gerhold 	.cmd_rcgr = 0x43004,
895bf37a057SStephan Gerhold 	.hid_width = 5,
896bf37a057SStephan Gerhold 	.mnd_width = 8,
897bf37a057SStephan Gerhold 	.freq_tbl = ftbl_gcc_sdcc1_2_apps_clk,
898bf37a057SStephan Gerhold 	.parent_map = gcc_xo_gpll0_map,
899bf37a057SStephan Gerhold 	.clkr.hw.init = &(struct clk_init_data) {
900bf37a057SStephan Gerhold 		.name = "sdcc2_apps_clk_src",
901bf37a057SStephan Gerhold 		.parent_data = gcc_xo_gpll0_data,
902bf37a057SStephan Gerhold 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
903bf37a057SStephan Gerhold 		.ops = &clk_rcg2_floor_ops,
904bf37a057SStephan Gerhold 	}
905bf37a057SStephan Gerhold };
906bf37a057SStephan Gerhold 
907bf37a057SStephan Gerhold static struct clk_rcg2 system_noc_bfdcd_clk_src = {
908bf37a057SStephan Gerhold 	.cmd_rcgr = 0x26004,
909bf37a057SStephan Gerhold 	.hid_width = 5,
910bf37a057SStephan Gerhold 	.parent_map = gcc_xo_gpll0_bimc_map,
911bf37a057SStephan Gerhold 	.clkr.hw.init = &(struct clk_init_data) {
912bf37a057SStephan Gerhold 		.name = "system_noc_bfdcd_clk_src",
913bf37a057SStephan Gerhold 		.parent_data = gcc_xo_gpll0_bimc_data,
914bf37a057SStephan Gerhold 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_bimc_data),
915bf37a057SStephan Gerhold 		.ops = &clk_rcg2_ops,
916bf37a057SStephan Gerhold 	},
917bf37a057SStephan Gerhold };
918bf37a057SStephan Gerhold 
919bf37a057SStephan Gerhold static const struct freq_tbl ftbl_gcc_usb_hs_system_clk[] = {
920bf37a057SStephan Gerhold 	F(57140000, P_GPLL0, 14, 0, 0),
921bf37a057SStephan Gerhold 	F(80000000, P_GPLL0, 10, 0, 0),
922bf37a057SStephan Gerhold 	F(100000000, P_GPLL0, 8, 0, 0),
923bf37a057SStephan Gerhold 	{ }
924bf37a057SStephan Gerhold };
925bf37a057SStephan Gerhold 
926bf37a057SStephan Gerhold static struct clk_rcg2 usb_hs_system_clk_src = {
927bf37a057SStephan Gerhold 	.cmd_rcgr = 0x41010,
928bf37a057SStephan Gerhold 	.hid_width = 5,
929bf37a057SStephan Gerhold 	.freq_tbl = ftbl_gcc_usb_hs_system_clk,
930bf37a057SStephan Gerhold 	.parent_map = gcc_xo_gpll0_map,
931bf37a057SStephan Gerhold 	.clkr.hw.init = &(struct clk_init_data) {
932bf37a057SStephan Gerhold 		.name = "usb_hs_system_clk_src",
933bf37a057SStephan Gerhold 		.parent_data = gcc_xo_gpll0_data,
934bf37a057SStephan Gerhold 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
935bf37a057SStephan Gerhold 		.ops = &clk_rcg2_ops,
936bf37a057SStephan Gerhold 	}
937bf37a057SStephan Gerhold };
938bf37a057SStephan Gerhold 
939bf37a057SStephan Gerhold static const struct parent_map gcc_vcodec0_map[] = {
940bf37a057SStephan Gerhold 	{ P_XO, 0 },
941bf37a057SStephan Gerhold 	{ P_GPLL0, 1 },
942bf37a057SStephan Gerhold 	{ P_GPLL1, 3 },
943bf37a057SStephan Gerhold };
944bf37a057SStephan Gerhold 
945bf37a057SStephan Gerhold static const struct clk_parent_data gcc_vcodec0_data[] = {
946bf37a057SStephan Gerhold 	{ .index = DT_XO },
947bf37a057SStephan Gerhold 	{ .hw = &gpll0.clkr.hw },
948bf37a057SStephan Gerhold 	{ .hw = &gpll1_vote.hw },
949bf37a057SStephan Gerhold };
950bf37a057SStephan Gerhold 
951bf37a057SStephan Gerhold static const struct freq_tbl ftbl_vcodec0_clk_src[] = {
952bf37a057SStephan Gerhold 	F(133330000, P_GPLL0, 6, 0, 0),
953bf37a057SStephan Gerhold 	F(266670000, P_GPLL0, 3, 0, 0),
954bf37a057SStephan Gerhold 	F(307200000, P_GPLL1, 4, 0, 0),
955bf37a057SStephan Gerhold 	{ }
956bf37a057SStephan Gerhold };
957bf37a057SStephan Gerhold 
958bf37a057SStephan Gerhold static struct clk_rcg2 vcodec0_clk_src = {
959bf37a057SStephan Gerhold 	.cmd_rcgr = 0x4c000,
960bf37a057SStephan Gerhold 	.hid_width = 5,
961bf37a057SStephan Gerhold 	.mnd_width = 8,
962bf37a057SStephan Gerhold 	.freq_tbl = ftbl_vcodec0_clk_src,
963bf37a057SStephan Gerhold 	.parent_map = gcc_vcodec0_map,
964bf37a057SStephan Gerhold 	.clkr.hw.init = &(struct clk_init_data) {
965bf37a057SStephan Gerhold 		.name = "vcodec0_clk_src",
966bf37a057SStephan Gerhold 		.parent_data = gcc_vcodec0_data,
967bf37a057SStephan Gerhold 		.num_parents = ARRAY_SIZE(gcc_vcodec0_data),
968bf37a057SStephan Gerhold 		.ops = &clk_rcg2_ops,
969bf37a057SStephan Gerhold 	}
970bf37a057SStephan Gerhold };
971bf37a057SStephan Gerhold 
972bf37a057SStephan Gerhold static const struct freq_tbl ftbl_gcc_camss_vfe0_clk[] = {
973bf37a057SStephan Gerhold 	F(50000000, P_GPLL0, 16, 0, 0),
974bf37a057SStephan Gerhold 	F(80000000, P_GPLL0, 10, 0, 0),
975bf37a057SStephan Gerhold 	F(100000000, P_GPLL0, 8, 0, 0),
976bf37a057SStephan Gerhold 	F(133330000, P_GPLL0, 6, 0, 0),
977bf37a057SStephan Gerhold 	F(160000000, P_GPLL0, 5, 0, 0),
978bf37a057SStephan Gerhold 	F(177780000, P_GPLL0, 4.5, 0, 0),
979bf37a057SStephan Gerhold 	F(200000000, P_GPLL0, 4, 0, 0),
980bf37a057SStephan Gerhold 	F(266670000, P_GPLL0, 3, 0, 0),
981bf37a057SStephan Gerhold 	F(320000000, P_GPLL0, 2.5, 0, 0),
982bf37a057SStephan Gerhold 	{ }
983bf37a057SStephan Gerhold };
984bf37a057SStephan Gerhold 
985bf37a057SStephan Gerhold static struct clk_rcg2 vfe0_clk_src = {
986bf37a057SStephan Gerhold 	.cmd_rcgr = 0x58000,
987bf37a057SStephan Gerhold 	.hid_width = 5,
988bf37a057SStephan Gerhold 	.freq_tbl = ftbl_gcc_camss_vfe0_clk,
989bf37a057SStephan Gerhold 	.parent_map = gcc_xo_gpll0_map,
990bf37a057SStephan Gerhold 	.clkr.hw.init = &(struct clk_init_data) {
991bf37a057SStephan Gerhold 		.name = "vfe0_clk_src",
992bf37a057SStephan Gerhold 		.parent_data = gcc_xo_gpll0_data,
993bf37a057SStephan Gerhold 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_data),
994bf37a057SStephan Gerhold 		.ops = &clk_rcg2_ops,
995bf37a057SStephan Gerhold 	}
996bf37a057SStephan Gerhold };
997bf37a057SStephan Gerhold 
998bf37a057SStephan Gerhold static const struct freq_tbl ftbl_vsync_clk_src[] = {
999bf37a057SStephan Gerhold 	F(19200000, P_XO, 1, 0, 0),
1000bf37a057SStephan Gerhold 	{ }
1001bf37a057SStephan Gerhold };
1002bf37a057SStephan Gerhold 
1003bf37a057SStephan Gerhold static struct clk_rcg2 vsync_clk_src = {
1004bf37a057SStephan Gerhold 	.cmd_rcgr = 0x4d02c,
1005bf37a057SStephan Gerhold 	.hid_width = 5,
1006bf37a057SStephan Gerhold 	.freq_tbl = ftbl_vsync_clk_src,
1007bf37a057SStephan Gerhold 	.parent_map = gcc_xo_map,
1008bf37a057SStephan Gerhold 	.clkr.hw.init = &(struct clk_init_data) {
1009bf37a057SStephan Gerhold 		.name = "vsync_clk_src",
1010bf37a057SStephan Gerhold 		.parent_data = gcc_xo_data,
1011bf37a057SStephan Gerhold 		.num_parents = ARRAY_SIZE(gcc_xo_data),
1012bf37a057SStephan Gerhold 		.ops = &clk_rcg2_ops,
1013bf37a057SStephan Gerhold 	}
1014bf37a057SStephan Gerhold };
1015bf37a057SStephan Gerhold 
1016bf37a057SStephan Gerhold static struct clk_branch gcc_apss_tcu_clk = {
1017bf37a057SStephan Gerhold 	.halt_reg = 0x12018,
1018bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT_VOTED,
1019bf37a057SStephan Gerhold 	.clkr = {
1020bf37a057SStephan Gerhold 		.enable_reg = 0x4500c,
1021bf37a057SStephan Gerhold 		.enable_mask = BIT(1),
1022bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1023bf37a057SStephan Gerhold 			.name = "gcc_apss_tcu_clk",
1024bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1025bf37a057SStephan Gerhold 				&bimc_ddr_clk_src.clkr.hw,
1026bf37a057SStephan Gerhold 			},
1027bf37a057SStephan Gerhold 			.num_parents = 1,
1028bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1029bf37a057SStephan Gerhold 		}
1030bf37a057SStephan Gerhold 	}
1031bf37a057SStephan Gerhold };
1032bf37a057SStephan Gerhold 
1033bf37a057SStephan Gerhold static struct clk_branch gcc_blsp1_ahb_clk = {
1034bf37a057SStephan Gerhold 	.halt_reg = 0x01008,
1035bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT_VOTED,
1036bf37a057SStephan Gerhold 	.clkr = {
1037bf37a057SStephan Gerhold 		.enable_reg = 0x45004,
1038bf37a057SStephan Gerhold 		.enable_mask = BIT(10),
1039bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1040bf37a057SStephan Gerhold 			.name = "gcc_blsp1_ahb_clk",
1041bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1042bf37a057SStephan Gerhold 				&pcnoc_bfdcd_clk_src.clkr.hw,
1043bf37a057SStephan Gerhold 			},
1044bf37a057SStephan Gerhold 			.num_parents = 1,
1045bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1046bf37a057SStephan Gerhold 		}
1047bf37a057SStephan Gerhold 	}
1048bf37a057SStephan Gerhold };
1049bf37a057SStephan Gerhold 
1050bf37a057SStephan Gerhold static struct clk_branch gcc_blsp1_sleep_clk = {
1051bf37a057SStephan Gerhold 	.halt_reg = 0x01004,
1052bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT_VOTED,
1053bf37a057SStephan Gerhold 	.clkr = {
1054bf37a057SStephan Gerhold 		.enable_reg = 0x45004,
1055bf37a057SStephan Gerhold 		.enable_mask = BIT(9),
1056bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1057bf37a057SStephan Gerhold 			.name = "gcc_blsp1_sleep_clk",
1058bf37a057SStephan Gerhold 			.parent_data = gcc_sleep_clk_data,
1059bf37a057SStephan Gerhold 			.num_parents = ARRAY_SIZE(gcc_sleep_clk_data),
1060bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1061bf37a057SStephan Gerhold 		}
1062bf37a057SStephan Gerhold 	}
1063bf37a057SStephan Gerhold };
1064bf37a057SStephan Gerhold 
1065bf37a057SStephan Gerhold static struct clk_branch gcc_boot_rom_ahb_clk = {
1066bf37a057SStephan Gerhold 	.halt_reg = 0x1300c,
1067bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT_VOTED,
1068bf37a057SStephan Gerhold 	.clkr = {
1069bf37a057SStephan Gerhold 		.enable_reg = 0x45004,
1070bf37a057SStephan Gerhold 		.enable_mask = BIT(7),
1071bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1072bf37a057SStephan Gerhold 			.name = "gcc_boot_rom_ahb_clk",
1073bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1074bf37a057SStephan Gerhold 				&pcnoc_bfdcd_clk_src.clkr.hw,
1075bf37a057SStephan Gerhold 			},
1076bf37a057SStephan Gerhold 			.num_parents = 1,
1077bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1078bf37a057SStephan Gerhold 		}
1079bf37a057SStephan Gerhold 	}
1080bf37a057SStephan Gerhold };
1081bf37a057SStephan Gerhold 
1082bf37a057SStephan Gerhold static struct clk_branch gcc_crypto_clk = {
1083bf37a057SStephan Gerhold 	.halt_reg = 0x1601c,
1084bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT_VOTED,
1085bf37a057SStephan Gerhold 	.clkr = {
1086bf37a057SStephan Gerhold 		.enable_reg = 0x45004,
1087bf37a057SStephan Gerhold 		.enable_mask = BIT(2),
1088bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1089bf37a057SStephan Gerhold 			.name = "gcc_crypto_clk",
1090bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1091bf37a057SStephan Gerhold 				&crypto_clk_src.clkr.hw,
1092bf37a057SStephan Gerhold 			},
1093bf37a057SStephan Gerhold 			.num_parents = 1,
1094bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1095bf37a057SStephan Gerhold 			.flags = CLK_SET_RATE_PARENT,
1096bf37a057SStephan Gerhold 		}
1097bf37a057SStephan Gerhold 	}
1098bf37a057SStephan Gerhold };
1099bf37a057SStephan Gerhold 
1100bf37a057SStephan Gerhold static struct clk_branch gcc_crypto_ahb_clk = {
1101bf37a057SStephan Gerhold 	.halt_reg = 0x16024,
1102bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT_VOTED,
1103bf37a057SStephan Gerhold 	.clkr = {
1104bf37a057SStephan Gerhold 		.enable_reg = 0x45004,
1105bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
1106bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1107bf37a057SStephan Gerhold 			.name = "gcc_crypto_ahb_clk",
1108bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1109bf37a057SStephan Gerhold 				&pcnoc_bfdcd_clk_src.clkr.hw,
1110bf37a057SStephan Gerhold 			},
1111bf37a057SStephan Gerhold 			.num_parents = 1,
1112bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1113bf37a057SStephan Gerhold 		}
1114bf37a057SStephan Gerhold 	}
1115bf37a057SStephan Gerhold };
1116bf37a057SStephan Gerhold 
1117bf37a057SStephan Gerhold static struct clk_branch gcc_crypto_axi_clk = {
1118bf37a057SStephan Gerhold 	.halt_reg = 0x16020,
1119bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT_VOTED,
1120bf37a057SStephan Gerhold 	.clkr = {
1121bf37a057SStephan Gerhold 		.enable_reg = 0x45004,
1122bf37a057SStephan Gerhold 		.enable_mask = BIT(1),
1123bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1124bf37a057SStephan Gerhold 			.name = "gcc_crypto_axi_clk",
1125bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1126bf37a057SStephan Gerhold 				&pcnoc_bfdcd_clk_src.clkr.hw,
1127bf37a057SStephan Gerhold 			},
1128bf37a057SStephan Gerhold 			.num_parents = 1,
1129bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1130bf37a057SStephan Gerhold 		}
1131bf37a057SStephan Gerhold 	}
1132bf37a057SStephan Gerhold };
1133bf37a057SStephan Gerhold 
1134bf37a057SStephan Gerhold static struct clk_branch gcc_gfx_tbu_clk = {
1135bf37a057SStephan Gerhold 	.halt_reg = 0x12010,
1136bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT_VOTED,
1137bf37a057SStephan Gerhold 	.clkr = {
1138bf37a057SStephan Gerhold 		.enable_reg = 0x4500c,
1139bf37a057SStephan Gerhold 		.enable_mask = BIT(3),
1140bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1141bf37a057SStephan Gerhold 			.name = "gcc_gfx_tbu_clk",
1142bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1143bf37a057SStephan Gerhold 				&bimc_ddr_clk_src.clkr.hw,
1144bf37a057SStephan Gerhold 			},
1145bf37a057SStephan Gerhold 			.num_parents = 1,
1146bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1147bf37a057SStephan Gerhold 		}
1148bf37a057SStephan Gerhold 	}
1149bf37a057SStephan Gerhold };
1150bf37a057SStephan Gerhold 
1151bf37a057SStephan Gerhold static struct clk_branch gcc_gfx_tcu_clk = {
1152bf37a057SStephan Gerhold 	.halt_reg = 0x12020,
1153bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT_VOTED,
1154bf37a057SStephan Gerhold 	.clkr = {
1155bf37a057SStephan Gerhold 		.enable_reg = 0x4500c,
1156bf37a057SStephan Gerhold 		.enable_mask = BIT(2),
1157bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1158bf37a057SStephan Gerhold 			.name = "gcc_gfx_tcu_clk",
1159bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1160bf37a057SStephan Gerhold 				&bimc_ddr_clk_src.clkr.hw,
1161bf37a057SStephan Gerhold 			},
1162bf37a057SStephan Gerhold 			.num_parents = 1,
1163bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1164bf37a057SStephan Gerhold 		}
1165bf37a057SStephan Gerhold 	}
1166bf37a057SStephan Gerhold };
1167bf37a057SStephan Gerhold 
1168bf37a057SStephan Gerhold static struct clk_branch gcc_gtcu_ahb_clk = {
1169bf37a057SStephan Gerhold 	.halt_reg = 0x12044,
1170bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT_VOTED,
1171bf37a057SStephan Gerhold 	.clkr = {
1172bf37a057SStephan Gerhold 		.enable_reg = 0x4500c,
1173bf37a057SStephan Gerhold 		.enable_mask = BIT(13),
1174bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1175bf37a057SStephan Gerhold 			.name = "gcc_gtcu_ahb_clk",
1176bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1177bf37a057SStephan Gerhold 				&pcnoc_bfdcd_clk_src.clkr.hw,
1178bf37a057SStephan Gerhold 			},
1179bf37a057SStephan Gerhold 			.num_parents = 1,
1180bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1181bf37a057SStephan Gerhold 		}
1182bf37a057SStephan Gerhold 	}
1183bf37a057SStephan Gerhold };
1184bf37a057SStephan Gerhold 
1185bf37a057SStephan Gerhold static struct clk_branch gcc_mdp_tbu_clk = {
1186bf37a057SStephan Gerhold 	.halt_reg = 0x1201c,
1187bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT_VOTED,
1188bf37a057SStephan Gerhold 	.clkr = {
1189bf37a057SStephan Gerhold 		.enable_reg = 0x4500c,
1190bf37a057SStephan Gerhold 		.enable_mask = BIT(4),
1191bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1192bf37a057SStephan Gerhold 			.name = "gcc_mdp_tbu_clk",
1193bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1194bf37a057SStephan Gerhold 				&system_noc_bfdcd_clk_src.clkr.hw,
1195bf37a057SStephan Gerhold 			},
1196bf37a057SStephan Gerhold 			.num_parents = 1,
1197bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1198bf37a057SStephan Gerhold 		}
1199bf37a057SStephan Gerhold 	}
1200bf37a057SStephan Gerhold };
1201bf37a057SStephan Gerhold 
1202bf37a057SStephan Gerhold static struct clk_branch gcc_prng_ahb_clk = {
1203bf37a057SStephan Gerhold 	.halt_reg = 0x13004,
1204bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT_VOTED,
1205bf37a057SStephan Gerhold 	.clkr = {
1206bf37a057SStephan Gerhold 		.enable_reg = 0x45004,
1207bf37a057SStephan Gerhold 		.enable_mask = BIT(8),
1208bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1209bf37a057SStephan Gerhold 			.name = "gcc_prng_ahb_clk",
1210bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1211bf37a057SStephan Gerhold 				&pcnoc_bfdcd_clk_src.clkr.hw,
1212bf37a057SStephan Gerhold 			},
1213bf37a057SStephan Gerhold 			.num_parents = 1,
1214bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1215bf37a057SStephan Gerhold 		}
1216bf37a057SStephan Gerhold 	}
1217bf37a057SStephan Gerhold };
1218bf37a057SStephan Gerhold 
1219bf37a057SStephan Gerhold static struct clk_branch gcc_smmu_cfg_clk = {
1220bf37a057SStephan Gerhold 	.halt_reg = 0x12038,
1221bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT_VOTED,
1222bf37a057SStephan Gerhold 	.clkr = {
1223bf37a057SStephan Gerhold 		.enable_reg = 0x4500c,
1224bf37a057SStephan Gerhold 		.enable_mask = BIT(12),
1225bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1226bf37a057SStephan Gerhold 			.name = "gcc_smmu_cfg_clk",
1227bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1228bf37a057SStephan Gerhold 				&pcnoc_bfdcd_clk_src.clkr.hw,
1229bf37a057SStephan Gerhold 			},
1230bf37a057SStephan Gerhold 			.num_parents = 1,
1231bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1232bf37a057SStephan Gerhold 		}
1233bf37a057SStephan Gerhold 	}
1234bf37a057SStephan Gerhold };
1235bf37a057SStephan Gerhold 
1236bf37a057SStephan Gerhold static struct clk_branch gcc_venus_tbu_clk = {
1237bf37a057SStephan Gerhold 	.halt_reg = 0x12014,
1238bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT_VOTED,
1239bf37a057SStephan Gerhold 	.clkr = {
1240bf37a057SStephan Gerhold 		.enable_reg = 0x4500c,
1241bf37a057SStephan Gerhold 		.enable_mask = BIT(5),
1242bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1243bf37a057SStephan Gerhold 			.name = "gcc_venus_tbu_clk",
1244bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1245bf37a057SStephan Gerhold 				&system_noc_bfdcd_clk_src.clkr.hw,
1246bf37a057SStephan Gerhold 			},
1247bf37a057SStephan Gerhold 			.num_parents = 1,
1248bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1249bf37a057SStephan Gerhold 		}
1250bf37a057SStephan Gerhold 	}
1251bf37a057SStephan Gerhold };
1252bf37a057SStephan Gerhold 
1253bf37a057SStephan Gerhold static struct clk_branch gcc_vfe_tbu_clk = {
1254bf37a057SStephan Gerhold 	.halt_reg = 0x1203c,
1255bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT_VOTED,
1256bf37a057SStephan Gerhold 	.clkr = {
1257bf37a057SStephan Gerhold 		.enable_reg = 0x4500c,
1258bf37a057SStephan Gerhold 		.enable_mask = BIT(9),
1259bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1260bf37a057SStephan Gerhold 			.name = "gcc_vfe_tbu_clk",
1261bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1262bf37a057SStephan Gerhold 				&system_noc_bfdcd_clk_src.clkr.hw,
1263bf37a057SStephan Gerhold 			},
1264bf37a057SStephan Gerhold 			.num_parents = 1,
1265bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1266bf37a057SStephan Gerhold 		}
1267bf37a057SStephan Gerhold 	}
1268bf37a057SStephan Gerhold };
1269bf37a057SStephan Gerhold 
1270bf37a057SStephan Gerhold static struct clk_branch gcc_bimc_gfx_clk = {
1271bf37a057SStephan Gerhold 	.halt_reg = 0x31024,
1272bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
1273bf37a057SStephan Gerhold 	.clkr = {
1274bf37a057SStephan Gerhold 		.enable_reg = 0x31024,
1275bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
1276bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1277bf37a057SStephan Gerhold 			.name = "gcc_bimc_gfx_clk",
1278bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1279bf37a057SStephan Gerhold 				&bimc_gpu_clk_src.clkr.hw,
1280bf37a057SStephan Gerhold 			},
1281bf37a057SStephan Gerhold 			.num_parents = 1,
1282bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1283bf37a057SStephan Gerhold 		}
1284bf37a057SStephan Gerhold 	}
1285bf37a057SStephan Gerhold };
1286bf37a057SStephan Gerhold 
1287bf37a057SStephan Gerhold static struct clk_branch gcc_bimc_gpu_clk = {
1288bf37a057SStephan Gerhold 	.halt_reg = 0x31040,
1289bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
1290bf37a057SStephan Gerhold 	.clkr = {
1291bf37a057SStephan Gerhold 		.enable_reg = 0x31040,
1292bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
1293bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1294bf37a057SStephan Gerhold 			.name = "gcc_bimc_gpu_clk",
1295bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1296bf37a057SStephan Gerhold 				&bimc_gpu_clk_src.clkr.hw,
1297bf37a057SStephan Gerhold 			},
1298bf37a057SStephan Gerhold 			.num_parents = 1,
1299bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1300bf37a057SStephan Gerhold 		}
1301bf37a057SStephan Gerhold 	}
1302bf37a057SStephan Gerhold };
1303bf37a057SStephan Gerhold 
1304bf37a057SStephan Gerhold static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
1305bf37a057SStephan Gerhold 	.halt_reg = 0x02008,
1306bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
1307bf37a057SStephan Gerhold 	.clkr = {
1308bf37a057SStephan Gerhold 		.enable_reg = 0x02008,
1309bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
1310bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1311bf37a057SStephan Gerhold 			.name = "gcc_blsp1_qup1_i2c_apps_clk",
1312bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1313bf37a057SStephan Gerhold 				&blsp1_qup1_i2c_apps_clk_src.clkr.hw,
1314bf37a057SStephan Gerhold 			},
1315bf37a057SStephan Gerhold 			.num_parents = 1,
1316bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1317bf37a057SStephan Gerhold 			.flags = CLK_SET_RATE_PARENT,
1318bf37a057SStephan Gerhold 		}
1319bf37a057SStephan Gerhold 	}
1320bf37a057SStephan Gerhold };
1321bf37a057SStephan Gerhold 
1322bf37a057SStephan Gerhold static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
1323bf37a057SStephan Gerhold 	.halt_reg = 0x03010,
1324bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
1325bf37a057SStephan Gerhold 	.clkr = {
1326bf37a057SStephan Gerhold 		.enable_reg = 0x03010,
1327bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
1328bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1329bf37a057SStephan Gerhold 			.name = "gcc_blsp1_qup2_i2c_apps_clk",
1330bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1331bf37a057SStephan Gerhold 				&blsp1_qup2_i2c_apps_clk_src.clkr.hw,
1332bf37a057SStephan Gerhold 			},
1333bf37a057SStephan Gerhold 			.num_parents = 1,
1334bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1335bf37a057SStephan Gerhold 			.flags = CLK_SET_RATE_PARENT,
1336bf37a057SStephan Gerhold 		}
1337bf37a057SStephan Gerhold 	}
1338bf37a057SStephan Gerhold };
1339bf37a057SStephan Gerhold 
1340bf37a057SStephan Gerhold static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
1341bf37a057SStephan Gerhold 	.halt_reg = 0x04020,
1342bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
1343bf37a057SStephan Gerhold 	.clkr = {
1344bf37a057SStephan Gerhold 		.enable_reg = 0x04020,
1345bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
1346bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1347bf37a057SStephan Gerhold 			.name = "gcc_blsp1_qup3_i2c_apps_clk",
1348bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1349bf37a057SStephan Gerhold 				&blsp1_qup3_i2c_apps_clk_src.clkr.hw,
1350bf37a057SStephan Gerhold 			},
1351bf37a057SStephan Gerhold 			.num_parents = 1,
1352bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1353bf37a057SStephan Gerhold 			.flags = CLK_SET_RATE_PARENT,
1354bf37a057SStephan Gerhold 		}
1355bf37a057SStephan Gerhold 	}
1356bf37a057SStephan Gerhold };
1357bf37a057SStephan Gerhold 
1358bf37a057SStephan Gerhold static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
1359bf37a057SStephan Gerhold 	.halt_reg = 0x05020,
1360bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
1361bf37a057SStephan Gerhold 	.clkr = {
1362bf37a057SStephan Gerhold 		.enable_reg = 0x05020,
1363bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
1364bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1365bf37a057SStephan Gerhold 			.name = "gcc_blsp1_qup4_i2c_apps_clk",
1366bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1367bf37a057SStephan Gerhold 				&blsp1_qup4_i2c_apps_clk_src.clkr.hw,
1368bf37a057SStephan Gerhold 			},
1369bf37a057SStephan Gerhold 			.num_parents = 1,
1370bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1371bf37a057SStephan Gerhold 			.flags = CLK_SET_RATE_PARENT,
1372bf37a057SStephan Gerhold 		}
1373bf37a057SStephan Gerhold 	}
1374bf37a057SStephan Gerhold };
1375bf37a057SStephan Gerhold 
1376bf37a057SStephan Gerhold static struct clk_branch gcc_blsp1_qup5_i2c_apps_clk = {
1377bf37a057SStephan Gerhold 	.halt_reg = 0x06020,
1378bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
1379bf37a057SStephan Gerhold 	.clkr = {
1380bf37a057SStephan Gerhold 		.enable_reg = 0x06020,
1381bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
1382bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1383bf37a057SStephan Gerhold 			.name = "gcc_blsp1_qup5_i2c_apps_clk",
1384bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1385bf37a057SStephan Gerhold 				&blsp1_qup5_i2c_apps_clk_src.clkr.hw,
1386bf37a057SStephan Gerhold 			},
1387bf37a057SStephan Gerhold 			.num_parents = 1,
1388bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1389bf37a057SStephan Gerhold 			.flags = CLK_SET_RATE_PARENT,
1390bf37a057SStephan Gerhold 		}
1391bf37a057SStephan Gerhold 	}
1392bf37a057SStephan Gerhold };
1393bf37a057SStephan Gerhold 
1394bf37a057SStephan Gerhold static struct clk_branch gcc_blsp1_qup6_i2c_apps_clk = {
1395bf37a057SStephan Gerhold 	.halt_reg = 0x07020,
1396bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
1397bf37a057SStephan Gerhold 	.clkr = {
1398bf37a057SStephan Gerhold 		.enable_reg = 0x07020,
1399bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
1400bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1401bf37a057SStephan Gerhold 			.name = "gcc_blsp1_qup6_i2c_apps_clk",
1402bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1403bf37a057SStephan Gerhold 				&blsp1_qup6_i2c_apps_clk_src.clkr.hw,
1404bf37a057SStephan Gerhold 			},
1405bf37a057SStephan Gerhold 			.num_parents = 1,
1406bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1407bf37a057SStephan Gerhold 			.flags = CLK_SET_RATE_PARENT,
1408bf37a057SStephan Gerhold 		}
1409bf37a057SStephan Gerhold 	}
1410bf37a057SStephan Gerhold };
1411bf37a057SStephan Gerhold 
1412bf37a057SStephan Gerhold static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
1413bf37a057SStephan Gerhold 	.halt_reg = 0x02004,
1414bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
1415bf37a057SStephan Gerhold 	.clkr = {
1416bf37a057SStephan Gerhold 		.enable_reg = 0x02004,
1417bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
1418bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1419bf37a057SStephan Gerhold 			.name = "gcc_blsp1_qup1_spi_apps_clk",
1420bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1421bf37a057SStephan Gerhold 				&blsp1_qup1_spi_apps_clk_src.clkr.hw,
1422bf37a057SStephan Gerhold 			},
1423bf37a057SStephan Gerhold 			.num_parents = 1,
1424bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1425bf37a057SStephan Gerhold 			.flags = CLK_SET_RATE_PARENT,
1426bf37a057SStephan Gerhold 		}
1427bf37a057SStephan Gerhold 	}
1428bf37a057SStephan Gerhold };
1429bf37a057SStephan Gerhold 
1430bf37a057SStephan Gerhold static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
1431bf37a057SStephan Gerhold 	.halt_reg = 0x0300c,
1432bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
1433bf37a057SStephan Gerhold 	.clkr = {
1434bf37a057SStephan Gerhold 		.enable_reg = 0x0300c,
1435bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
1436bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1437bf37a057SStephan Gerhold 			.name = "gcc_blsp1_qup2_spi_apps_clk",
1438bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1439bf37a057SStephan Gerhold 				&blsp1_qup2_spi_apps_clk_src.clkr.hw,
1440bf37a057SStephan Gerhold 			},
1441bf37a057SStephan Gerhold 			.num_parents = 1,
1442bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1443bf37a057SStephan Gerhold 			.flags = CLK_SET_RATE_PARENT,
1444bf37a057SStephan Gerhold 		}
1445bf37a057SStephan Gerhold 	}
1446bf37a057SStephan Gerhold };
1447bf37a057SStephan Gerhold 
1448bf37a057SStephan Gerhold static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
1449bf37a057SStephan Gerhold 	.halt_reg = 0x0401c,
1450bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
1451bf37a057SStephan Gerhold 	.clkr = {
1452bf37a057SStephan Gerhold 		.enable_reg = 0x0401c,
1453bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
1454bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1455bf37a057SStephan Gerhold 			.name = "gcc_blsp1_qup3_spi_apps_clk",
1456bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1457bf37a057SStephan Gerhold 				&blsp1_qup3_spi_apps_clk_src.clkr.hw,
1458bf37a057SStephan Gerhold 			},
1459bf37a057SStephan Gerhold 			.num_parents = 1,
1460bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1461bf37a057SStephan Gerhold 			.flags = CLK_SET_RATE_PARENT,
1462bf37a057SStephan Gerhold 		}
1463bf37a057SStephan Gerhold 	}
1464bf37a057SStephan Gerhold };
1465bf37a057SStephan Gerhold 
1466bf37a057SStephan Gerhold static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
1467bf37a057SStephan Gerhold 	.halt_reg = 0x0501c,
1468bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
1469bf37a057SStephan Gerhold 	.clkr = {
1470bf37a057SStephan Gerhold 		.enable_reg = 0x0501c,
1471bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
1472bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1473bf37a057SStephan Gerhold 			.name = "gcc_blsp1_qup4_spi_apps_clk",
1474bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1475bf37a057SStephan Gerhold 				&blsp1_qup4_spi_apps_clk_src.clkr.hw,
1476bf37a057SStephan Gerhold 			},
1477bf37a057SStephan Gerhold 			.num_parents = 1,
1478bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1479bf37a057SStephan Gerhold 			.flags = CLK_SET_RATE_PARENT,
1480bf37a057SStephan Gerhold 		}
1481bf37a057SStephan Gerhold 	}
1482bf37a057SStephan Gerhold };
1483bf37a057SStephan Gerhold 
1484bf37a057SStephan Gerhold static struct clk_branch gcc_blsp1_qup5_spi_apps_clk = {
1485bf37a057SStephan Gerhold 	.halt_reg = 0x0601c,
1486bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
1487bf37a057SStephan Gerhold 	.clkr = {
1488bf37a057SStephan Gerhold 		.enable_reg = 0x0601c,
1489bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
1490bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1491bf37a057SStephan Gerhold 			.name = "gcc_blsp1_qup5_spi_apps_clk",
1492bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1493bf37a057SStephan Gerhold 				&blsp1_qup5_spi_apps_clk_src.clkr.hw,
1494bf37a057SStephan Gerhold 			},
1495bf37a057SStephan Gerhold 			.num_parents = 1,
1496bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1497bf37a057SStephan Gerhold 			.flags = CLK_SET_RATE_PARENT,
1498bf37a057SStephan Gerhold 		}
1499bf37a057SStephan Gerhold 	}
1500bf37a057SStephan Gerhold };
1501bf37a057SStephan Gerhold 
1502bf37a057SStephan Gerhold static struct clk_branch gcc_blsp1_qup6_spi_apps_clk = {
1503bf37a057SStephan Gerhold 	.halt_reg = 0x0701c,
1504bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
1505bf37a057SStephan Gerhold 	.clkr = {
1506bf37a057SStephan Gerhold 		.enable_reg = 0x0701c,
1507bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
1508bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1509bf37a057SStephan Gerhold 			.name = "gcc_blsp1_qup6_spi_apps_clk",
1510bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1511bf37a057SStephan Gerhold 				&blsp1_qup6_spi_apps_clk_src.clkr.hw,
1512bf37a057SStephan Gerhold 			},
1513bf37a057SStephan Gerhold 			.num_parents = 1,
1514bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1515bf37a057SStephan Gerhold 			.flags = CLK_SET_RATE_PARENT,
1516bf37a057SStephan Gerhold 		}
1517bf37a057SStephan Gerhold 	}
1518bf37a057SStephan Gerhold };
1519bf37a057SStephan Gerhold 
1520bf37a057SStephan Gerhold static struct clk_branch gcc_blsp1_uart1_apps_clk = {
1521bf37a057SStephan Gerhold 	.halt_reg = 0x0203c,
1522bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
1523bf37a057SStephan Gerhold 	.clkr = {
1524bf37a057SStephan Gerhold 		.enable_reg = 0x0203c,
1525bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
1526bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1527bf37a057SStephan Gerhold 			.name = "gcc_blsp1_uart1_apps_clk",
1528bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1529bf37a057SStephan Gerhold 				&blsp1_uart1_apps_clk_src.clkr.hw,
1530bf37a057SStephan Gerhold 			},
1531bf37a057SStephan Gerhold 			.num_parents = 1,
1532bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1533bf37a057SStephan Gerhold 			.flags = CLK_SET_RATE_PARENT,
1534bf37a057SStephan Gerhold 		}
1535bf37a057SStephan Gerhold 	}
1536bf37a057SStephan Gerhold };
1537bf37a057SStephan Gerhold 
1538bf37a057SStephan Gerhold static struct clk_branch gcc_blsp1_uart2_apps_clk = {
1539bf37a057SStephan Gerhold 	.halt_reg = 0x0302c,
1540bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
1541bf37a057SStephan Gerhold 	.clkr = {
1542bf37a057SStephan Gerhold 		.enable_reg = 0x0302c,
1543bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
1544bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1545bf37a057SStephan Gerhold 			.name = "gcc_blsp1_uart2_apps_clk",
1546bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1547bf37a057SStephan Gerhold 				&blsp1_uart2_apps_clk_src.clkr.hw,
1548bf37a057SStephan Gerhold 			},
1549bf37a057SStephan Gerhold 			.num_parents = 1,
1550bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1551bf37a057SStephan Gerhold 			.flags = CLK_SET_RATE_PARENT,
1552bf37a057SStephan Gerhold 		}
1553bf37a057SStephan Gerhold 	}
1554bf37a057SStephan Gerhold };
1555bf37a057SStephan Gerhold 
1556bf37a057SStephan Gerhold static struct clk_branch gcc_camss_ahb_clk = {
1557bf37a057SStephan Gerhold 	.halt_reg = 0x5a014,
1558bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
1559bf37a057SStephan Gerhold 	.clkr = {
1560bf37a057SStephan Gerhold 		.enable_reg = 0x5a014,
1561bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
1562bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1563bf37a057SStephan Gerhold 			.name = "gcc_camss_ahb_clk",
1564bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1565bf37a057SStephan Gerhold 				&pcnoc_bfdcd_clk_src.clkr.hw,
1566bf37a057SStephan Gerhold 			},
1567bf37a057SStephan Gerhold 			.num_parents = 1,
1568bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1569bf37a057SStephan Gerhold 		}
1570bf37a057SStephan Gerhold 	}
1571bf37a057SStephan Gerhold };
1572bf37a057SStephan Gerhold 
1573bf37a057SStephan Gerhold static struct clk_branch gcc_camss_csi0_clk = {
1574bf37a057SStephan Gerhold 	.halt_reg = 0x4e03c,
1575bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
1576bf37a057SStephan Gerhold 	.clkr = {
1577bf37a057SStephan Gerhold 		.enable_reg = 0x4e03c,
1578bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
1579bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1580bf37a057SStephan Gerhold 			.name = "gcc_camss_csi0_clk",
1581bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1582bf37a057SStephan Gerhold 				&csi0_clk_src.clkr.hw,
1583bf37a057SStephan Gerhold 			},
1584bf37a057SStephan Gerhold 			.num_parents = 1,
1585bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1586bf37a057SStephan Gerhold 			.flags = CLK_SET_RATE_PARENT,
1587bf37a057SStephan Gerhold 		}
1588bf37a057SStephan Gerhold 	}
1589bf37a057SStephan Gerhold };
1590bf37a057SStephan Gerhold 
1591bf37a057SStephan Gerhold static struct clk_branch gcc_camss_csi0_ahb_clk = {
1592bf37a057SStephan Gerhold 	.halt_reg = 0x4e040,
1593bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
1594bf37a057SStephan Gerhold 	.clkr = {
1595bf37a057SStephan Gerhold 		.enable_reg = 0x4e040,
1596bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
1597bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1598bf37a057SStephan Gerhold 			.name = "gcc_camss_csi0_ahb_clk",
1599bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1600bf37a057SStephan Gerhold 				&camss_top_ahb_clk_src.clkr.hw,
1601bf37a057SStephan Gerhold 			},
1602bf37a057SStephan Gerhold 			.num_parents = 1,
1603bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1604bf37a057SStephan Gerhold 			.flags = CLK_SET_RATE_PARENT,
1605bf37a057SStephan Gerhold 		}
1606bf37a057SStephan Gerhold 	}
1607bf37a057SStephan Gerhold };
1608bf37a057SStephan Gerhold 
1609bf37a057SStephan Gerhold static struct clk_branch gcc_camss_csi0phy_clk = {
1610bf37a057SStephan Gerhold 	.halt_reg = 0x4e048,
1611bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
1612bf37a057SStephan Gerhold 	.clkr = {
1613bf37a057SStephan Gerhold 		.enable_reg = 0x4e048,
1614bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
1615bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1616bf37a057SStephan Gerhold 			.name = "gcc_camss_csi0phy_clk",
1617bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1618bf37a057SStephan Gerhold 				&csi0_clk_src.clkr.hw,
1619bf37a057SStephan Gerhold 			},
1620bf37a057SStephan Gerhold 			.num_parents = 1,
1621bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1622bf37a057SStephan Gerhold 			.flags = CLK_SET_RATE_PARENT,
1623bf37a057SStephan Gerhold 		}
1624bf37a057SStephan Gerhold 	}
1625bf37a057SStephan Gerhold };
1626bf37a057SStephan Gerhold 
1627bf37a057SStephan Gerhold static struct clk_branch gcc_camss_csi0phytimer_clk = {
1628bf37a057SStephan Gerhold 	.halt_reg = 0x4e01c,
1629bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
1630bf37a057SStephan Gerhold 	.clkr = {
1631bf37a057SStephan Gerhold 		.enable_reg = 0x4e01c,
1632bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
1633bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1634bf37a057SStephan Gerhold 			.name = "gcc_camss_csi0phytimer_clk",
1635bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1636bf37a057SStephan Gerhold 				&csi0phytimer_clk_src.clkr.hw,
1637bf37a057SStephan Gerhold 			},
1638bf37a057SStephan Gerhold 			.num_parents = 1,
1639bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1640bf37a057SStephan Gerhold 			.flags = CLK_SET_RATE_PARENT,
1641bf37a057SStephan Gerhold 		}
1642bf37a057SStephan Gerhold 	}
1643bf37a057SStephan Gerhold };
1644bf37a057SStephan Gerhold 
1645bf37a057SStephan Gerhold static struct clk_branch gcc_camss_csi0pix_clk = {
1646bf37a057SStephan Gerhold 	.halt_reg = 0x4e058,
1647bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
1648bf37a057SStephan Gerhold 	.clkr = {
1649bf37a057SStephan Gerhold 		.enable_reg = 0x4e058,
1650bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
1651bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1652bf37a057SStephan Gerhold 			.name = "gcc_camss_csi0pix_clk",
1653bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1654bf37a057SStephan Gerhold 				&csi0_clk_src.clkr.hw,
1655bf37a057SStephan Gerhold 			},
1656bf37a057SStephan Gerhold 			.num_parents = 1,
1657bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1658bf37a057SStephan Gerhold 			.flags = CLK_SET_RATE_PARENT,
1659bf37a057SStephan Gerhold 		}
1660bf37a057SStephan Gerhold 	}
1661bf37a057SStephan Gerhold };
1662bf37a057SStephan Gerhold 
1663bf37a057SStephan Gerhold static struct clk_branch gcc_camss_csi0rdi_clk = {
1664bf37a057SStephan Gerhold 	.halt_reg = 0x4e050,
1665bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
1666bf37a057SStephan Gerhold 	.clkr = {
1667bf37a057SStephan Gerhold 		.enable_reg = 0x4e050,
1668bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
1669bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1670bf37a057SStephan Gerhold 			.name = "gcc_camss_csi0rdi_clk",
1671bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1672bf37a057SStephan Gerhold 				&csi0_clk_src.clkr.hw,
1673bf37a057SStephan Gerhold 			},
1674bf37a057SStephan Gerhold 			.num_parents = 1,
1675bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1676bf37a057SStephan Gerhold 			.flags = CLK_SET_RATE_PARENT,
1677bf37a057SStephan Gerhold 		}
1678bf37a057SStephan Gerhold 	}
1679bf37a057SStephan Gerhold };
1680bf37a057SStephan Gerhold 
1681bf37a057SStephan Gerhold static struct clk_branch gcc_camss_csi1_clk = {
1682bf37a057SStephan Gerhold 	.halt_reg = 0x4f03c,
1683bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
1684bf37a057SStephan Gerhold 	.clkr = {
1685bf37a057SStephan Gerhold 		.enable_reg = 0x4f03c,
1686bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
1687bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1688bf37a057SStephan Gerhold 			.name = "gcc_camss_csi1_clk",
1689bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1690bf37a057SStephan Gerhold 				&csi1_clk_src.clkr.hw,
1691bf37a057SStephan Gerhold 			},
1692bf37a057SStephan Gerhold 			.num_parents = 1,
1693bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1694bf37a057SStephan Gerhold 			.flags = CLK_SET_RATE_PARENT,
1695bf37a057SStephan Gerhold 		}
1696bf37a057SStephan Gerhold 	}
1697bf37a057SStephan Gerhold };
1698bf37a057SStephan Gerhold 
1699bf37a057SStephan Gerhold static struct clk_branch gcc_camss_csi1_ahb_clk = {
1700bf37a057SStephan Gerhold 	.halt_reg = 0x4f040,
1701bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
1702bf37a057SStephan Gerhold 	.clkr = {
1703bf37a057SStephan Gerhold 		.enable_reg = 0x4f040,
1704bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
1705bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1706bf37a057SStephan Gerhold 			.name = "gcc_camss_csi1_ahb_clk",
1707bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1708bf37a057SStephan Gerhold 				&camss_top_ahb_clk_src.clkr.hw,
1709bf37a057SStephan Gerhold 			},
1710bf37a057SStephan Gerhold 			.num_parents = 1,
1711bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1712bf37a057SStephan Gerhold 			.flags = CLK_SET_RATE_PARENT,
1713bf37a057SStephan Gerhold 		}
1714bf37a057SStephan Gerhold 	}
1715bf37a057SStephan Gerhold };
1716bf37a057SStephan Gerhold 
1717bf37a057SStephan Gerhold static struct clk_branch gcc_camss_csi1phy_clk = {
1718bf37a057SStephan Gerhold 	.halt_reg = 0x4f048,
1719bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
1720bf37a057SStephan Gerhold 	.clkr = {
1721bf37a057SStephan Gerhold 		.enable_reg = 0x4f048,
1722bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
1723bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1724bf37a057SStephan Gerhold 			.name = "gcc_camss_csi1phy_clk",
1725bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1726bf37a057SStephan Gerhold 				&csi1_clk_src.clkr.hw,
1727bf37a057SStephan Gerhold 			},
1728bf37a057SStephan Gerhold 			.num_parents = 1,
1729bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1730bf37a057SStephan Gerhold 			.flags = CLK_SET_RATE_PARENT,
1731bf37a057SStephan Gerhold 		}
1732bf37a057SStephan Gerhold 	}
1733bf37a057SStephan Gerhold };
1734bf37a057SStephan Gerhold 
1735bf37a057SStephan Gerhold static struct clk_branch gcc_camss_csi1pix_clk = {
1736bf37a057SStephan Gerhold 	.halt_reg = 0x4f058,
1737bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
1738bf37a057SStephan Gerhold 	.clkr = {
1739bf37a057SStephan Gerhold 		.enable_reg = 0x4f058,
1740bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
1741bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1742bf37a057SStephan Gerhold 			.name = "gcc_camss_csi1pix_clk",
1743bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1744bf37a057SStephan Gerhold 				&csi1_clk_src.clkr.hw,
1745bf37a057SStephan Gerhold 			},
1746bf37a057SStephan Gerhold 			.num_parents = 1,
1747bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1748bf37a057SStephan Gerhold 			.flags = CLK_SET_RATE_PARENT,
1749bf37a057SStephan Gerhold 		}
1750bf37a057SStephan Gerhold 	}
1751bf37a057SStephan Gerhold };
1752bf37a057SStephan Gerhold 
1753bf37a057SStephan Gerhold static struct clk_branch gcc_camss_csi1rdi_clk = {
1754bf37a057SStephan Gerhold 	.halt_reg = 0x4f050,
1755bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
1756bf37a057SStephan Gerhold 	.clkr = {
1757bf37a057SStephan Gerhold 		.enable_reg = 0x4f050,
1758bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
1759bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1760bf37a057SStephan Gerhold 			.name = "gcc_camss_csi1rdi_clk",
1761bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1762bf37a057SStephan Gerhold 				&csi1_clk_src.clkr.hw,
1763bf37a057SStephan Gerhold 			},
1764bf37a057SStephan Gerhold 			.num_parents = 1,
1765bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1766bf37a057SStephan Gerhold 			.flags = CLK_SET_RATE_PARENT,
1767bf37a057SStephan Gerhold 		}
1768bf37a057SStephan Gerhold 	}
1769bf37a057SStephan Gerhold };
1770bf37a057SStephan Gerhold 
1771bf37a057SStephan Gerhold static struct clk_branch gcc_camss_csi_vfe0_clk = {
1772bf37a057SStephan Gerhold 	.halt_reg = 0x58050,
1773bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
1774bf37a057SStephan Gerhold 	.clkr = {
1775bf37a057SStephan Gerhold 		.enable_reg = 0x58050,
1776bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
1777bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1778bf37a057SStephan Gerhold 			.name = "gcc_camss_csi_vfe0_clk",
1779bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1780bf37a057SStephan Gerhold 				&vfe0_clk_src.clkr.hw,
1781bf37a057SStephan Gerhold 			},
1782bf37a057SStephan Gerhold 			.num_parents = 1,
1783bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1784bf37a057SStephan Gerhold 			.flags = CLK_SET_RATE_PARENT,
1785bf37a057SStephan Gerhold 		}
1786bf37a057SStephan Gerhold 	}
1787bf37a057SStephan Gerhold };
1788bf37a057SStephan Gerhold 
1789bf37a057SStephan Gerhold static struct clk_branch gcc_camss_gp0_clk = {
1790bf37a057SStephan Gerhold 	.halt_reg = 0x54018,
1791bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
1792bf37a057SStephan Gerhold 	.clkr = {
1793bf37a057SStephan Gerhold 		.enable_reg = 0x54018,
1794bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
1795bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1796bf37a057SStephan Gerhold 			.name = "gcc_camss_gp0_clk",
1797bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1798bf37a057SStephan Gerhold 				&camss_gp0_clk_src.clkr.hw,
1799bf37a057SStephan Gerhold 			},
1800bf37a057SStephan Gerhold 			.num_parents = 1,
1801bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1802bf37a057SStephan Gerhold 			.flags = CLK_SET_RATE_PARENT,
1803bf37a057SStephan Gerhold 		}
1804bf37a057SStephan Gerhold 	}
1805bf37a057SStephan Gerhold };
1806bf37a057SStephan Gerhold 
1807bf37a057SStephan Gerhold static struct clk_branch gcc_camss_gp1_clk = {
1808bf37a057SStephan Gerhold 	.halt_reg = 0x55018,
1809bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
1810bf37a057SStephan Gerhold 	.clkr = {
1811bf37a057SStephan Gerhold 		.enable_reg = 0x55018,
1812bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
1813bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1814bf37a057SStephan Gerhold 			.name = "gcc_camss_gp1_clk",
1815bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1816bf37a057SStephan Gerhold 				&camss_gp1_clk_src.clkr.hw,
1817bf37a057SStephan Gerhold 			},
1818bf37a057SStephan Gerhold 			.num_parents = 1,
1819bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1820bf37a057SStephan Gerhold 			.flags = CLK_SET_RATE_PARENT,
1821bf37a057SStephan Gerhold 		}
1822bf37a057SStephan Gerhold 	}
1823bf37a057SStephan Gerhold };
1824bf37a057SStephan Gerhold 
1825bf37a057SStephan Gerhold static struct clk_branch gcc_camss_ispif_ahb_clk = {
1826bf37a057SStephan Gerhold 	.halt_reg = 0x50004,
1827bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
1828bf37a057SStephan Gerhold 	.clkr = {
1829bf37a057SStephan Gerhold 		.enable_reg = 0x50004,
1830bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
1831bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1832bf37a057SStephan Gerhold 			.name = "gcc_camss_ispif_ahb_clk",
1833bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1834bf37a057SStephan Gerhold 				&camss_top_ahb_clk_src.clkr.hw,
1835bf37a057SStephan Gerhold 			},
1836bf37a057SStephan Gerhold 			.num_parents = 1,
1837bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1838bf37a057SStephan Gerhold 			.flags = CLK_SET_RATE_PARENT,
1839bf37a057SStephan Gerhold 		}
1840bf37a057SStephan Gerhold 	}
1841bf37a057SStephan Gerhold };
1842bf37a057SStephan Gerhold 
1843bf37a057SStephan Gerhold static struct clk_branch gcc_camss_mclk0_clk = {
1844bf37a057SStephan Gerhold 	.halt_reg = 0x52018,
1845bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
1846bf37a057SStephan Gerhold 	.clkr = {
1847bf37a057SStephan Gerhold 		.enable_reg = 0x52018,
1848bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
1849bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1850bf37a057SStephan Gerhold 			.name = "gcc_camss_mclk0_clk",
1851bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1852bf37a057SStephan Gerhold 				&mclk0_clk_src.clkr.hw,
1853bf37a057SStephan Gerhold 			},
1854bf37a057SStephan Gerhold 			.num_parents = 1,
1855bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1856bf37a057SStephan Gerhold 			.flags = CLK_SET_RATE_PARENT,
1857bf37a057SStephan Gerhold 		}
1858bf37a057SStephan Gerhold 	}
1859bf37a057SStephan Gerhold };
1860bf37a057SStephan Gerhold 
1861bf37a057SStephan Gerhold static struct clk_branch gcc_camss_mclk1_clk = {
1862bf37a057SStephan Gerhold 	.halt_reg = 0x53018,
1863bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
1864bf37a057SStephan Gerhold 	.clkr = {
1865bf37a057SStephan Gerhold 		.enable_reg = 0x53018,
1866bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
1867bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1868bf37a057SStephan Gerhold 			.name = "gcc_camss_mclk1_clk",
1869bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1870bf37a057SStephan Gerhold 				&mclk1_clk_src.clkr.hw,
1871bf37a057SStephan Gerhold 			},
1872bf37a057SStephan Gerhold 			.num_parents = 1,
1873bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1874bf37a057SStephan Gerhold 			.flags = CLK_SET_RATE_PARENT,
1875bf37a057SStephan Gerhold 		}
1876bf37a057SStephan Gerhold 	}
1877bf37a057SStephan Gerhold };
1878bf37a057SStephan Gerhold 
1879bf37a057SStephan Gerhold static struct clk_branch gcc_camss_top_ahb_clk = {
1880bf37a057SStephan Gerhold 	.halt_reg = 0x56004,
1881bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
1882bf37a057SStephan Gerhold 	.clkr = {
1883bf37a057SStephan Gerhold 		.enable_reg = 0x56004,
1884bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
1885bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1886bf37a057SStephan Gerhold 			.name = "gcc_camss_top_ahb_clk",
1887bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1888bf37a057SStephan Gerhold 				&camss_top_ahb_clk_src.clkr.hw,
1889bf37a057SStephan Gerhold 			},
1890bf37a057SStephan Gerhold 			.num_parents = 1,
1891bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1892bf37a057SStephan Gerhold 			.flags = CLK_SET_RATE_PARENT,
1893bf37a057SStephan Gerhold 		}
1894bf37a057SStephan Gerhold 	}
1895bf37a057SStephan Gerhold };
1896bf37a057SStephan Gerhold 
1897bf37a057SStephan Gerhold static struct clk_branch gcc_camss_vfe0_clk = {
1898bf37a057SStephan Gerhold 	.halt_reg = 0x58038,
1899bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
1900bf37a057SStephan Gerhold 	.clkr = {
1901bf37a057SStephan Gerhold 		.enable_reg = 0x58038,
1902bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
1903bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1904bf37a057SStephan Gerhold 			.name = "gcc_camss_vfe0_clk",
1905bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1906bf37a057SStephan Gerhold 				&vfe0_clk_src.clkr.hw,
1907bf37a057SStephan Gerhold 			},
1908bf37a057SStephan Gerhold 			.num_parents = 1,
1909bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1910bf37a057SStephan Gerhold 			.flags = CLK_SET_RATE_PARENT,
1911bf37a057SStephan Gerhold 		}
1912bf37a057SStephan Gerhold 	}
1913bf37a057SStephan Gerhold };
1914bf37a057SStephan Gerhold 
1915bf37a057SStephan Gerhold static struct clk_branch gcc_camss_vfe_ahb_clk = {
1916bf37a057SStephan Gerhold 	.halt_reg = 0x58044,
1917bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
1918bf37a057SStephan Gerhold 	.clkr = {
1919bf37a057SStephan Gerhold 		.enable_reg = 0x58044,
1920bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
1921bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1922bf37a057SStephan Gerhold 			.name = "gcc_camss_vfe_ahb_clk",
1923bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1924bf37a057SStephan Gerhold 				&camss_top_ahb_clk_src.clkr.hw,
1925bf37a057SStephan Gerhold 			},
1926bf37a057SStephan Gerhold 			.num_parents = 1,
1927bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1928bf37a057SStephan Gerhold 			.flags = CLK_SET_RATE_PARENT,
1929bf37a057SStephan Gerhold 		}
1930bf37a057SStephan Gerhold 	}
1931bf37a057SStephan Gerhold };
1932bf37a057SStephan Gerhold 
1933bf37a057SStephan Gerhold static struct clk_branch gcc_camss_vfe_axi_clk = {
1934bf37a057SStephan Gerhold 	.halt_reg = 0x58048,
1935bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
1936bf37a057SStephan Gerhold 	.clkr = {
1937bf37a057SStephan Gerhold 		.enable_reg = 0x58048,
1938bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
1939bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1940bf37a057SStephan Gerhold 			.name = "gcc_camss_vfe_axi_clk",
1941bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1942bf37a057SStephan Gerhold 				&system_noc_bfdcd_clk_src.clkr.hw,
1943bf37a057SStephan Gerhold 			},
1944bf37a057SStephan Gerhold 			.num_parents = 1,
1945bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1946bf37a057SStephan Gerhold 		}
1947bf37a057SStephan Gerhold 	}
1948bf37a057SStephan Gerhold };
1949bf37a057SStephan Gerhold 
1950bf37a057SStephan Gerhold static struct clk_branch gcc_gp1_clk = {
1951bf37a057SStephan Gerhold 	.halt_reg = 0x08000,
1952bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
1953bf37a057SStephan Gerhold 	.clkr = {
1954bf37a057SStephan Gerhold 		.enable_reg = 0x08000,
1955bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
1956bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1957bf37a057SStephan Gerhold 			.name = "gcc_gp1_clk",
1958bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1959bf37a057SStephan Gerhold 				&gp1_clk_src.clkr.hw,
1960bf37a057SStephan Gerhold 			},
1961bf37a057SStephan Gerhold 			.num_parents = 1,
1962bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1963bf37a057SStephan Gerhold 			.flags = CLK_SET_RATE_PARENT,
1964bf37a057SStephan Gerhold 		}
1965bf37a057SStephan Gerhold 	}
1966bf37a057SStephan Gerhold };
1967bf37a057SStephan Gerhold 
1968bf37a057SStephan Gerhold static struct clk_branch gcc_gp2_clk = {
1969bf37a057SStephan Gerhold 	.halt_reg = 0x09000,
1970bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
1971bf37a057SStephan Gerhold 	.clkr = {
1972bf37a057SStephan Gerhold 		.enable_reg = 0x09000,
1973bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
1974bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1975bf37a057SStephan Gerhold 			.name = "gcc_gp2_clk",
1976bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1977bf37a057SStephan Gerhold 				&gp2_clk_src.clkr.hw,
1978bf37a057SStephan Gerhold 			},
1979bf37a057SStephan Gerhold 			.num_parents = 1,
1980bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1981bf37a057SStephan Gerhold 			.flags = CLK_SET_RATE_PARENT,
1982bf37a057SStephan Gerhold 		}
1983bf37a057SStephan Gerhold 	}
1984bf37a057SStephan Gerhold };
1985bf37a057SStephan Gerhold 
1986bf37a057SStephan Gerhold static struct clk_branch gcc_gp3_clk = {
1987bf37a057SStephan Gerhold 	.halt_reg = 0x0a000,
1988bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
1989bf37a057SStephan Gerhold 	.clkr = {
1990bf37a057SStephan Gerhold 		.enable_reg = 0x0a000,
1991bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
1992bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
1993bf37a057SStephan Gerhold 			.name = "gcc_gp3_clk",
1994bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
1995bf37a057SStephan Gerhold 				&gp3_clk_src.clkr.hw,
1996bf37a057SStephan Gerhold 			},
1997bf37a057SStephan Gerhold 			.num_parents = 1,
1998bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
1999bf37a057SStephan Gerhold 			.flags = CLK_SET_RATE_PARENT,
2000bf37a057SStephan Gerhold 		}
2001bf37a057SStephan Gerhold 	}
2002bf37a057SStephan Gerhold };
2003bf37a057SStephan Gerhold 
2004bf37a057SStephan Gerhold static struct clk_branch gcc_mdss_ahb_clk = {
2005bf37a057SStephan Gerhold 	.halt_reg = 0x4d07c,
2006bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
2007bf37a057SStephan Gerhold 	.clkr = {
2008bf37a057SStephan Gerhold 		.enable_reg = 0x4d07c,
2009bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
2010bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
2011bf37a057SStephan Gerhold 			.name = "gcc_mdss_ahb_clk",
2012bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
2013bf37a057SStephan Gerhold 				&pcnoc_bfdcd_clk_src.clkr.hw,
2014bf37a057SStephan Gerhold 			},
2015bf37a057SStephan Gerhold 			.num_parents = 1,
2016bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
2017bf37a057SStephan Gerhold 		}
2018bf37a057SStephan Gerhold 	}
2019bf37a057SStephan Gerhold };
2020bf37a057SStephan Gerhold 
2021bf37a057SStephan Gerhold static struct clk_branch gcc_mdss_axi_clk = {
2022bf37a057SStephan Gerhold 	.halt_reg = 0x4d080,
2023bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
2024bf37a057SStephan Gerhold 	.clkr = {
2025bf37a057SStephan Gerhold 		.enable_reg = 0x4d080,
2026bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
2027bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
2028bf37a057SStephan Gerhold 			.name = "gcc_mdss_axi_clk",
2029bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
2030bf37a057SStephan Gerhold 				&system_noc_bfdcd_clk_src.clkr.hw,
2031bf37a057SStephan Gerhold 			},
2032bf37a057SStephan Gerhold 			.num_parents = 1,
2033bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
2034bf37a057SStephan Gerhold 		}
2035bf37a057SStephan Gerhold 	}
2036bf37a057SStephan Gerhold };
2037bf37a057SStephan Gerhold 
2038bf37a057SStephan Gerhold static struct clk_branch gcc_mdss_byte0_clk = {
2039bf37a057SStephan Gerhold 	.halt_reg = 0x4d094,
2040bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
2041bf37a057SStephan Gerhold 	.clkr = {
2042bf37a057SStephan Gerhold 		.enable_reg = 0x4d094,
2043bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
2044bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
2045bf37a057SStephan Gerhold 			.name = "gcc_mdss_byte0_clk",
2046bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
2047bf37a057SStephan Gerhold 				&byte0_clk_src.clkr.hw,
2048bf37a057SStephan Gerhold 			},
2049bf37a057SStephan Gerhold 			.num_parents = 1,
2050bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
2051bf37a057SStephan Gerhold 			.flags = CLK_SET_RATE_PARENT,
2052bf37a057SStephan Gerhold 		}
2053bf37a057SStephan Gerhold 	}
2054bf37a057SStephan Gerhold };
2055bf37a057SStephan Gerhold 
2056bf37a057SStephan Gerhold static struct clk_branch gcc_mdss_esc0_clk = {
2057bf37a057SStephan Gerhold 	.halt_reg = 0x4d098,
2058bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
2059bf37a057SStephan Gerhold 	.clkr = {
2060bf37a057SStephan Gerhold 		.enable_reg = 0x4d098,
2061bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
2062bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
2063bf37a057SStephan Gerhold 			.name = "gcc_mdss_esc0_clk",
2064bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
2065bf37a057SStephan Gerhold 				&esc0_clk_src.clkr.hw,
2066bf37a057SStephan Gerhold 			},
2067bf37a057SStephan Gerhold 			.num_parents = 1,
2068bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
2069bf37a057SStephan Gerhold 			.flags = CLK_SET_RATE_PARENT,
2070bf37a057SStephan Gerhold 		}
2071bf37a057SStephan Gerhold 	}
2072bf37a057SStephan Gerhold };
2073bf37a057SStephan Gerhold 
2074bf37a057SStephan Gerhold static struct clk_branch gcc_mdss_mdp_clk = {
2075bf37a057SStephan Gerhold 	.halt_reg = 0x4d088,
2076bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
2077bf37a057SStephan Gerhold 	.clkr = {
2078bf37a057SStephan Gerhold 		.enable_reg = 0x4d088,
2079bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
2080bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
2081bf37a057SStephan Gerhold 			.name = "gcc_mdss_mdp_clk",
2082bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
2083bf37a057SStephan Gerhold 				&mdp_clk_src.clkr.hw,
2084bf37a057SStephan Gerhold 			},
2085bf37a057SStephan Gerhold 			.num_parents = 1,
2086bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
2087bf37a057SStephan Gerhold 			.flags = CLK_SET_RATE_PARENT,
2088bf37a057SStephan Gerhold 		}
2089bf37a057SStephan Gerhold 	}
2090bf37a057SStephan Gerhold };
2091bf37a057SStephan Gerhold 
2092bf37a057SStephan Gerhold static struct clk_branch gcc_mdss_pclk0_clk = {
2093bf37a057SStephan Gerhold 	.halt_reg = 0x4d084,
2094bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
2095bf37a057SStephan Gerhold 	.clkr = {
2096bf37a057SStephan Gerhold 		.enable_reg = 0x4d084,
2097bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
2098bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
2099bf37a057SStephan Gerhold 			.name = "gcc_mdss_pclk0_clk",
2100bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
2101bf37a057SStephan Gerhold 				&pclk0_clk_src.clkr.hw,
2102bf37a057SStephan Gerhold 			},
2103bf37a057SStephan Gerhold 			.num_parents = 1,
2104bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
2105bf37a057SStephan Gerhold 			.flags = CLK_SET_RATE_PARENT,
2106bf37a057SStephan Gerhold 		}
2107bf37a057SStephan Gerhold 	}
2108bf37a057SStephan Gerhold };
2109bf37a057SStephan Gerhold 
2110bf37a057SStephan Gerhold static struct clk_branch gcc_mdss_vsync_clk = {
2111bf37a057SStephan Gerhold 	.halt_reg = 0x4d090,
2112bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
2113bf37a057SStephan Gerhold 	.clkr = {
2114bf37a057SStephan Gerhold 		.enable_reg = 0x4d090,
2115bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
2116bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
2117bf37a057SStephan Gerhold 			.name = "gcc_mdss_vsync_clk",
2118bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
2119bf37a057SStephan Gerhold 				&vsync_clk_src.clkr.hw,
2120bf37a057SStephan Gerhold 			},
2121bf37a057SStephan Gerhold 			.num_parents = 1,
2122bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
2123bf37a057SStephan Gerhold 			.flags = CLK_SET_RATE_PARENT,
2124bf37a057SStephan Gerhold 		}
2125bf37a057SStephan Gerhold 	}
2126bf37a057SStephan Gerhold };
2127bf37a057SStephan Gerhold 
2128bf37a057SStephan Gerhold static struct clk_branch gcc_mss_cfg_ahb_clk = {
2129bf37a057SStephan Gerhold 	.halt_reg = 0x49000,
2130bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
2131bf37a057SStephan Gerhold 	.clkr = {
2132bf37a057SStephan Gerhold 		.enable_reg = 0x49000,
2133bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
2134bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
2135bf37a057SStephan Gerhold 			.name = "gcc_mss_cfg_ahb_clk",
2136bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
2137bf37a057SStephan Gerhold 				&pcnoc_bfdcd_clk_src.clkr.hw,
2138bf37a057SStephan Gerhold 			},
2139bf37a057SStephan Gerhold 			.num_parents = 1,
2140bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
2141bf37a057SStephan Gerhold 		}
2142bf37a057SStephan Gerhold 	}
2143bf37a057SStephan Gerhold };
2144bf37a057SStephan Gerhold 
2145bf37a057SStephan Gerhold static struct clk_branch gcc_mss_q6_bimc_axi_clk = {
2146bf37a057SStephan Gerhold 	.halt_reg = 0x49004,
2147bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
2148bf37a057SStephan Gerhold 	.clkr = {
2149bf37a057SStephan Gerhold 		.enable_reg = 0x49004,
2150bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
2151bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
2152bf37a057SStephan Gerhold 			.name = "gcc_mss_q6_bimc_axi_clk",
2153bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
2154bf37a057SStephan Gerhold 				&bimc_ddr_clk_src.clkr.hw,
2155bf37a057SStephan Gerhold 			},
2156bf37a057SStephan Gerhold 			.num_parents = 1,
2157bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
2158bf37a057SStephan Gerhold 		}
2159bf37a057SStephan Gerhold 	}
2160bf37a057SStephan Gerhold };
2161bf37a057SStephan Gerhold 
2162bf37a057SStephan Gerhold static struct clk_branch gcc_oxili_ahb_clk = {
2163bf37a057SStephan Gerhold 	.halt_reg = 0x59028,
2164bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
2165bf37a057SStephan Gerhold 	.clkr = {
2166bf37a057SStephan Gerhold 		.enable_reg = 0x59028,
2167bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
2168bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
2169bf37a057SStephan Gerhold 			.name = "gcc_oxili_ahb_clk",
2170bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
2171bf37a057SStephan Gerhold 				&pcnoc_bfdcd_clk_src.clkr.hw,
2172bf37a057SStephan Gerhold 			},
2173bf37a057SStephan Gerhold 			.num_parents = 1,
2174bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
2175bf37a057SStephan Gerhold 		}
2176bf37a057SStephan Gerhold 	}
2177bf37a057SStephan Gerhold };
2178bf37a057SStephan Gerhold 
2179bf37a057SStephan Gerhold static struct clk_branch gcc_oxili_gfx3d_clk = {
2180bf37a057SStephan Gerhold 	.halt_reg = 0x59020,
2181bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
2182bf37a057SStephan Gerhold 	.clkr = {
2183bf37a057SStephan Gerhold 		.enable_reg = 0x59020,
2184bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
2185bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
2186bf37a057SStephan Gerhold 			.name = "gcc_oxili_gfx3d_clk",
2187bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
2188bf37a057SStephan Gerhold 				&gfx3d_clk_src.clkr.hw,
2189bf37a057SStephan Gerhold 			},
2190bf37a057SStephan Gerhold 			.num_parents = 1,
2191bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
2192bf37a057SStephan Gerhold 			.flags = CLK_SET_RATE_PARENT,
2193bf37a057SStephan Gerhold 		}
2194bf37a057SStephan Gerhold 	}
2195bf37a057SStephan Gerhold };
2196bf37a057SStephan Gerhold 
2197bf37a057SStephan Gerhold static struct clk_branch gcc_pdm2_clk = {
2198bf37a057SStephan Gerhold 	.halt_reg = 0x4400c,
2199bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
2200bf37a057SStephan Gerhold 	.clkr = {
2201bf37a057SStephan Gerhold 		.enable_reg = 0x4400c,
2202bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
2203bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
2204bf37a057SStephan Gerhold 			.name = "gcc_pdm2_clk",
2205bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
2206bf37a057SStephan Gerhold 				&pdm2_clk_src.clkr.hw,
2207bf37a057SStephan Gerhold 			},
2208bf37a057SStephan Gerhold 			.num_parents = 1,
2209bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
2210bf37a057SStephan Gerhold 			.flags = CLK_SET_RATE_PARENT,
2211bf37a057SStephan Gerhold 		}
2212bf37a057SStephan Gerhold 	}
2213bf37a057SStephan Gerhold };
2214bf37a057SStephan Gerhold 
2215bf37a057SStephan Gerhold static struct clk_branch gcc_pdm_ahb_clk = {
2216bf37a057SStephan Gerhold 	.halt_reg = 0x44004,
2217bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
2218bf37a057SStephan Gerhold 	.clkr = {
2219bf37a057SStephan Gerhold 		.enable_reg = 0x44004,
2220bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
2221bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
2222bf37a057SStephan Gerhold 			.name = "gcc_pdm_ahb_clk",
2223bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
2224bf37a057SStephan Gerhold 				&pcnoc_bfdcd_clk_src.clkr.hw,
2225bf37a057SStephan Gerhold 			},
2226bf37a057SStephan Gerhold 			.num_parents = 1,
2227bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
2228bf37a057SStephan Gerhold 		}
2229bf37a057SStephan Gerhold 	}
2230bf37a057SStephan Gerhold };
2231bf37a057SStephan Gerhold 
2232bf37a057SStephan Gerhold static struct clk_branch gcc_sdcc1_ahb_clk = {
2233bf37a057SStephan Gerhold 	.halt_reg = 0x4201c,
2234bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
2235bf37a057SStephan Gerhold 	.clkr = {
2236bf37a057SStephan Gerhold 		.enable_reg = 0x4201c,
2237bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
2238bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
2239bf37a057SStephan Gerhold 			.name = "gcc_sdcc1_ahb_clk",
2240bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
2241bf37a057SStephan Gerhold 				&pcnoc_bfdcd_clk_src.clkr.hw,
2242bf37a057SStephan Gerhold 			},
2243bf37a057SStephan Gerhold 			.num_parents = 1,
2244bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
2245bf37a057SStephan Gerhold 		}
2246bf37a057SStephan Gerhold 	}
2247bf37a057SStephan Gerhold };
2248bf37a057SStephan Gerhold 
2249bf37a057SStephan Gerhold static struct clk_branch gcc_sdcc1_apps_clk = {
2250bf37a057SStephan Gerhold 	.halt_reg = 0x42018,
2251bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
2252bf37a057SStephan Gerhold 	.clkr = {
2253bf37a057SStephan Gerhold 		.enable_reg = 0x42018,
2254bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
2255bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
2256bf37a057SStephan Gerhold 			.name = "gcc_sdcc1_apps_clk",
2257bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
2258bf37a057SStephan Gerhold 				&sdcc1_apps_clk_src.clkr.hw,
2259bf37a057SStephan Gerhold 			},
2260bf37a057SStephan Gerhold 			.num_parents = 1,
2261bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
2262bf37a057SStephan Gerhold 			.flags = CLK_SET_RATE_PARENT,
2263bf37a057SStephan Gerhold 		}
2264bf37a057SStephan Gerhold 	}
2265bf37a057SStephan Gerhold };
2266bf37a057SStephan Gerhold 
2267bf37a057SStephan Gerhold static struct clk_branch gcc_sdcc2_ahb_clk = {
2268bf37a057SStephan Gerhold 	.halt_reg = 0x4301c,
2269bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
2270bf37a057SStephan Gerhold 	.clkr = {
2271bf37a057SStephan Gerhold 		.enable_reg = 0x4301c,
2272bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
2273bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
2274bf37a057SStephan Gerhold 			.name = "gcc_sdcc2_ahb_clk",
2275bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
2276bf37a057SStephan Gerhold 				&pcnoc_bfdcd_clk_src.clkr.hw,
2277bf37a057SStephan Gerhold 			},
2278bf37a057SStephan Gerhold 			.num_parents = 1,
2279bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
2280bf37a057SStephan Gerhold 		}
2281bf37a057SStephan Gerhold 	}
2282bf37a057SStephan Gerhold };
2283bf37a057SStephan Gerhold 
2284bf37a057SStephan Gerhold static struct clk_branch gcc_sdcc2_apps_clk = {
2285bf37a057SStephan Gerhold 	.halt_reg = 0x43018,
2286bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
2287bf37a057SStephan Gerhold 	.clkr = {
2288bf37a057SStephan Gerhold 		.enable_reg = 0x43018,
2289bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
2290bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
2291bf37a057SStephan Gerhold 			.name = "gcc_sdcc2_apps_clk",
2292bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
2293bf37a057SStephan Gerhold 				&sdcc2_apps_clk_src.clkr.hw,
2294bf37a057SStephan Gerhold 			},
2295bf37a057SStephan Gerhold 			.num_parents = 1,
2296bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
2297bf37a057SStephan Gerhold 			.flags = CLK_SET_RATE_PARENT,
2298bf37a057SStephan Gerhold 		}
2299bf37a057SStephan Gerhold 	}
2300bf37a057SStephan Gerhold };
2301bf37a057SStephan Gerhold 
2302bf37a057SStephan Gerhold static struct clk_branch gcc_usb2a_phy_sleep_clk = {
2303bf37a057SStephan Gerhold 	.halt_reg = 0x4102c,
2304bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
2305bf37a057SStephan Gerhold 	.clkr = {
2306bf37a057SStephan Gerhold 		.enable_reg = 0x4102c,
2307bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
2308bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
2309bf37a057SStephan Gerhold 			.name = "gcc_usb2a_phy_sleep_clk",
2310bf37a057SStephan Gerhold 			.parent_data = gcc_sleep_clk_data,
2311bf37a057SStephan Gerhold 			.num_parents = ARRAY_SIZE(gcc_sleep_clk_data),
2312bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
2313bf37a057SStephan Gerhold 		}
2314bf37a057SStephan Gerhold 	}
2315bf37a057SStephan Gerhold };
2316bf37a057SStephan Gerhold 
2317bf37a057SStephan Gerhold static struct clk_branch gcc_usb_hs_ahb_clk = {
2318bf37a057SStephan Gerhold 	.halt_reg = 0x41008,
2319bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
2320bf37a057SStephan Gerhold 	.clkr = {
2321bf37a057SStephan Gerhold 		.enable_reg = 0x41008,
2322bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
2323bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
2324bf37a057SStephan Gerhold 			.name = "gcc_usb_hs_ahb_clk",
2325bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
2326bf37a057SStephan Gerhold 				&pcnoc_bfdcd_clk_src.clkr.hw,
2327bf37a057SStephan Gerhold 			},
2328bf37a057SStephan Gerhold 			.num_parents = 1,
2329bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
2330bf37a057SStephan Gerhold 		}
2331bf37a057SStephan Gerhold 	}
2332bf37a057SStephan Gerhold };
2333bf37a057SStephan Gerhold 
2334bf37a057SStephan Gerhold static struct clk_branch gcc_usb_hs_phy_cfg_ahb_clk = {
2335bf37a057SStephan Gerhold 	.halt_reg = 0x41030,
2336bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
2337bf37a057SStephan Gerhold 	.clkr = {
2338bf37a057SStephan Gerhold 		.enable_reg = 0x41030,
2339bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
2340bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
2341bf37a057SStephan Gerhold 			.name = "gcc_usb_hs_phy_cfg_ahb_clk",
2342bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
2343bf37a057SStephan Gerhold 				&pcnoc_bfdcd_clk_src.clkr.hw,
2344bf37a057SStephan Gerhold 			},
2345bf37a057SStephan Gerhold 			.num_parents = 1,
2346bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
2347bf37a057SStephan Gerhold 		}
2348bf37a057SStephan Gerhold 	}
2349bf37a057SStephan Gerhold };
2350bf37a057SStephan Gerhold 
2351bf37a057SStephan Gerhold static struct clk_branch gcc_usb_hs_system_clk = {
2352bf37a057SStephan Gerhold 	.halt_reg = 0x41004,
2353bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
2354bf37a057SStephan Gerhold 	.clkr = {
2355bf37a057SStephan Gerhold 		.enable_reg = 0x41004,
2356bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
2357bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
2358bf37a057SStephan Gerhold 			.name = "gcc_usb_hs_system_clk",
2359bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
2360bf37a057SStephan Gerhold 				&usb_hs_system_clk_src.clkr.hw,
2361bf37a057SStephan Gerhold 			},
2362bf37a057SStephan Gerhold 			.num_parents = 1,
2363bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
2364bf37a057SStephan Gerhold 			.flags = CLK_SET_RATE_PARENT,
2365bf37a057SStephan Gerhold 		}
2366bf37a057SStephan Gerhold 	}
2367bf37a057SStephan Gerhold };
2368bf37a057SStephan Gerhold 
2369bf37a057SStephan Gerhold static struct clk_branch gcc_venus0_ahb_clk = {
2370bf37a057SStephan Gerhold 	.halt_reg = 0x4c020,
2371bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
2372bf37a057SStephan Gerhold 	.clkr = {
2373bf37a057SStephan Gerhold 		.enable_reg = 0x4c020,
2374bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
2375bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
2376bf37a057SStephan Gerhold 			.name = "gcc_venus0_ahb_clk",
2377bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
2378bf37a057SStephan Gerhold 				&pcnoc_bfdcd_clk_src.clkr.hw,
2379bf37a057SStephan Gerhold 			},
2380bf37a057SStephan Gerhold 			.num_parents = 1,
2381bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
2382bf37a057SStephan Gerhold 		}
2383bf37a057SStephan Gerhold 	}
2384bf37a057SStephan Gerhold };
2385bf37a057SStephan Gerhold 
2386bf37a057SStephan Gerhold static struct clk_branch gcc_venus0_axi_clk = {
2387bf37a057SStephan Gerhold 	.halt_reg = 0x4c024,
2388bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
2389bf37a057SStephan Gerhold 	.clkr = {
2390bf37a057SStephan Gerhold 		.enable_reg = 0x4c024,
2391bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
2392bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
2393bf37a057SStephan Gerhold 			.name = "gcc_venus0_axi_clk",
2394bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
2395bf37a057SStephan Gerhold 				&system_noc_bfdcd_clk_src.clkr.hw,
2396bf37a057SStephan Gerhold 			},
2397bf37a057SStephan Gerhold 			.num_parents = 1,
2398bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
2399bf37a057SStephan Gerhold 		}
2400bf37a057SStephan Gerhold 	}
2401bf37a057SStephan Gerhold };
2402bf37a057SStephan Gerhold 
2403bf37a057SStephan Gerhold static struct clk_branch gcc_venus0_core0_vcodec0_clk = {
2404bf37a057SStephan Gerhold 	.halt_reg = 0x4c02c,
2405bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
2406bf37a057SStephan Gerhold 	.clkr = {
2407bf37a057SStephan Gerhold 		.enable_reg = 0x4c02c,
2408bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
2409bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
2410bf37a057SStephan Gerhold 			.name = "gcc_venus0_core0_vcodec0_clk",
2411bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
2412bf37a057SStephan Gerhold 				&vcodec0_clk_src.clkr.hw,
2413bf37a057SStephan Gerhold 			},
2414bf37a057SStephan Gerhold 			.num_parents = 1,
2415bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
2416bf37a057SStephan Gerhold 			.flags = CLK_SET_RATE_PARENT,
2417bf37a057SStephan Gerhold 		}
2418bf37a057SStephan Gerhold 	}
2419bf37a057SStephan Gerhold };
2420bf37a057SStephan Gerhold 
2421bf37a057SStephan Gerhold static struct clk_branch gcc_venus0_vcodec0_clk = {
2422bf37a057SStephan Gerhold 	.halt_reg = 0x4c01c,
2423bf37a057SStephan Gerhold 	.halt_check = BRANCH_HALT,
2424bf37a057SStephan Gerhold 	.clkr = {
2425bf37a057SStephan Gerhold 		.enable_reg = 0x4c01c,
2426bf37a057SStephan Gerhold 		.enable_mask = BIT(0),
2427bf37a057SStephan Gerhold 		.hw.init = &(struct clk_init_data) {
2428bf37a057SStephan Gerhold 			.name = "gcc_venus0_vcodec0_clk",
2429bf37a057SStephan Gerhold 			.parent_hws = (const struct clk_hw*[]) {
2430bf37a057SStephan Gerhold 				&vcodec0_clk_src.clkr.hw,
2431bf37a057SStephan Gerhold 			},
2432bf37a057SStephan Gerhold 			.num_parents = 1,
2433bf37a057SStephan Gerhold 			.ops = &clk_branch2_ops,
2434bf37a057SStephan Gerhold 			.flags = CLK_SET_RATE_PARENT,
2435bf37a057SStephan Gerhold 		}
2436bf37a057SStephan Gerhold 	}
2437bf37a057SStephan Gerhold };
2438bf37a057SStephan Gerhold 
2439bf37a057SStephan Gerhold static struct gdsc mdss_gdsc = {
2440bf37a057SStephan Gerhold 	.gdscr = 0x4d078,
2441bf37a057SStephan Gerhold 	.cxcs = (unsigned int []) { 0x4d080, 0x4d088 },
2442bf37a057SStephan Gerhold 	.cxc_count = 2,
2443bf37a057SStephan Gerhold 	.pd = {
2444bf37a057SStephan Gerhold 		.name = "mdss_gdsc",
2445bf37a057SStephan Gerhold 	},
2446bf37a057SStephan Gerhold 	.pwrsts = PWRSTS_OFF_ON,
2447bf37a057SStephan Gerhold };
2448bf37a057SStephan Gerhold 
2449bf37a057SStephan Gerhold static struct gdsc oxili_gdsc = {
2450bf37a057SStephan Gerhold 	.gdscr = 0x5901c,
2451bf37a057SStephan Gerhold 	.cxcs = (unsigned int []) { 0x59020 },
2452bf37a057SStephan Gerhold 	.cxc_count = 1,
2453bf37a057SStephan Gerhold 	.pd = {
2454bf37a057SStephan Gerhold 		.name = "oxili_gdsc",
2455bf37a057SStephan Gerhold 	},
2456bf37a057SStephan Gerhold 	.pwrsts = PWRSTS_OFF_ON,
2457bf37a057SStephan Gerhold };
2458bf37a057SStephan Gerhold 
2459bf37a057SStephan Gerhold static struct gdsc venus_gdsc = {
2460bf37a057SStephan Gerhold 	.gdscr = 0x4c018,
2461bf37a057SStephan Gerhold 	.cxcs = (unsigned int []) { 0x4c024, 0x4c01c },
2462bf37a057SStephan Gerhold 	.cxc_count = 2,
2463bf37a057SStephan Gerhold 	.pd = {
2464bf37a057SStephan Gerhold 		.name = "venus_gdsc",
2465bf37a057SStephan Gerhold 	},
2466bf37a057SStephan Gerhold 	.pwrsts = PWRSTS_OFF_ON,
2467bf37a057SStephan Gerhold };
2468bf37a057SStephan Gerhold 
2469bf37a057SStephan Gerhold static struct gdsc venus_core0_gdsc = {
2470bf37a057SStephan Gerhold 	.gdscr = 0x4c028,
2471bf37a057SStephan Gerhold 	.cxcs = (unsigned int []) { 0x4c02c },
2472bf37a057SStephan Gerhold 	.cxc_count = 1,
2473bf37a057SStephan Gerhold 	.pd = {
2474bf37a057SStephan Gerhold 		.name = "venus_core0_gdsc",
2475bf37a057SStephan Gerhold 	},
2476bf37a057SStephan Gerhold 	.flags = HW_CTRL,
2477bf37a057SStephan Gerhold 	.pwrsts = PWRSTS_OFF_ON,
2478bf37a057SStephan Gerhold };
2479bf37a057SStephan Gerhold 
2480bf37a057SStephan Gerhold static struct gdsc vfe_gdsc = {
2481bf37a057SStephan Gerhold 	.gdscr = 0x58034,
2482bf37a057SStephan Gerhold 	.cxcs = (unsigned int []) { 0x58038, 0x58048, 0x58050 },
2483bf37a057SStephan Gerhold 	.cxc_count = 3,
2484bf37a057SStephan Gerhold 	.pd = {
2485bf37a057SStephan Gerhold 		.name = "vfe_gdsc",
2486bf37a057SStephan Gerhold 	},
2487bf37a057SStephan Gerhold 	.pwrsts = PWRSTS_OFF_ON,
2488bf37a057SStephan Gerhold };
2489bf37a057SStephan Gerhold 
2490bf37a057SStephan Gerhold static struct clk_regmap *gcc_msm8909_clocks[] = {
2491bf37a057SStephan Gerhold 	[GPLL0_EARLY] = &gpll0_early.clkr,
2492bf37a057SStephan Gerhold 	[GPLL0] = &gpll0.clkr,
2493bf37a057SStephan Gerhold 	[GPLL1] = &gpll1.clkr,
2494bf37a057SStephan Gerhold 	[GPLL1_VOTE] = &gpll1_vote,
2495bf37a057SStephan Gerhold 	[GPLL2_EARLY] = &gpll2_early.clkr,
2496bf37a057SStephan Gerhold 	[GPLL2] = &gpll2.clkr,
2497bf37a057SStephan Gerhold 	[BIMC_PLL_EARLY] = &bimc_pll_early.clkr,
2498bf37a057SStephan Gerhold 	[BIMC_PLL] = &bimc_pll.clkr,
2499bf37a057SStephan Gerhold 	[APSS_AHB_CLK_SRC] = &apss_ahb_clk_src.clkr,
2500bf37a057SStephan Gerhold 	[BIMC_DDR_CLK_SRC] = &bimc_ddr_clk_src.clkr,
2501bf37a057SStephan Gerhold 	[BIMC_GPU_CLK_SRC] = &bimc_gpu_clk_src.clkr,
2502bf37a057SStephan Gerhold 	[BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
2503bf37a057SStephan Gerhold 	[BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
2504bf37a057SStephan Gerhold 	[BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
2505bf37a057SStephan Gerhold 	[BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
2506bf37a057SStephan Gerhold 	[BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
2507bf37a057SStephan Gerhold 	[BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
2508bf37a057SStephan Gerhold 	[BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
2509bf37a057SStephan Gerhold 	[BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
2510bf37a057SStephan Gerhold 	[BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr,
2511bf37a057SStephan Gerhold 	[BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr,
2512bf37a057SStephan Gerhold 	[BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr,
2513bf37a057SStephan Gerhold 	[BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr,
2514bf37a057SStephan Gerhold 	[BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
2515bf37a057SStephan Gerhold 	[BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
2516bf37a057SStephan Gerhold 	[BYTE0_CLK_SRC] = &byte0_clk_src.clkr,
2517bf37a057SStephan Gerhold 	[CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr,
2518bf37a057SStephan Gerhold 	[CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr,
2519bf37a057SStephan Gerhold 	[CAMSS_TOP_AHB_CLK_SRC] = &camss_top_ahb_clk_src.clkr,
2520bf37a057SStephan Gerhold 	[CRYPTO_CLK_SRC] = &crypto_clk_src.clkr,
2521bf37a057SStephan Gerhold 	[CSI0_CLK_SRC] = &csi0_clk_src.clkr,
2522bf37a057SStephan Gerhold 	[CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr,
2523bf37a057SStephan Gerhold 	[CSI1_CLK_SRC] = &csi1_clk_src.clkr,
2524bf37a057SStephan Gerhold 	[ESC0_CLK_SRC] = &esc0_clk_src.clkr,
2525bf37a057SStephan Gerhold 	[GFX3D_CLK_SRC] = &gfx3d_clk_src.clkr,
2526bf37a057SStephan Gerhold 	[GP1_CLK_SRC] = &gp1_clk_src.clkr,
2527bf37a057SStephan Gerhold 	[GP2_CLK_SRC] = &gp2_clk_src.clkr,
2528bf37a057SStephan Gerhold 	[GP3_CLK_SRC] = &gp3_clk_src.clkr,
2529bf37a057SStephan Gerhold 	[MCLK0_CLK_SRC] = &mclk0_clk_src.clkr,
2530bf37a057SStephan Gerhold 	[MCLK1_CLK_SRC] = &mclk1_clk_src.clkr,
2531bf37a057SStephan Gerhold 	[MDP_CLK_SRC] = &mdp_clk_src.clkr,
2532bf37a057SStephan Gerhold 	[PCLK0_CLK_SRC] = &pclk0_clk_src.clkr,
2533bf37a057SStephan Gerhold 	[PCNOC_BFDCD_CLK_SRC] = &pcnoc_bfdcd_clk_src.clkr,
2534bf37a057SStephan Gerhold 	[PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
2535bf37a057SStephan Gerhold 	[SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
2536bf37a057SStephan Gerhold 	[SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
2537bf37a057SStephan Gerhold 	[SYSTEM_NOC_BFDCD_CLK_SRC] = &system_noc_bfdcd_clk_src.clkr,
2538bf37a057SStephan Gerhold 	[USB_HS_SYSTEM_CLK_SRC] = &usb_hs_system_clk_src.clkr,
2539bf37a057SStephan Gerhold 	[VCODEC0_CLK_SRC] = &vcodec0_clk_src.clkr,
2540bf37a057SStephan Gerhold 	[VFE0_CLK_SRC] = &vfe0_clk_src.clkr,
2541bf37a057SStephan Gerhold 	[VSYNC_CLK_SRC] = &vsync_clk_src.clkr,
2542bf37a057SStephan Gerhold 	[GCC_APSS_TCU_CLK] = &gcc_apss_tcu_clk.clkr,
2543bf37a057SStephan Gerhold 	[GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
2544bf37a057SStephan Gerhold 	[GCC_BLSP1_SLEEP_CLK] = &gcc_blsp1_sleep_clk.clkr,
2545bf37a057SStephan Gerhold 	[GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
2546bf37a057SStephan Gerhold 	[GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr,
2547bf37a057SStephan Gerhold 	[GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr,
2548bf37a057SStephan Gerhold 	[GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr,
2549bf37a057SStephan Gerhold 	[GCC_GFX_TBU_CLK] = &gcc_gfx_tbu_clk.clkr,
2550bf37a057SStephan Gerhold 	[GCC_GFX_TCU_CLK] = &gcc_gfx_tcu_clk.clkr,
2551bf37a057SStephan Gerhold 	[GCC_GTCU_AHB_CLK] = &gcc_gtcu_ahb_clk.clkr,
2552bf37a057SStephan Gerhold 	[GCC_MDP_TBU_CLK] = &gcc_mdp_tbu_clk.clkr,
2553bf37a057SStephan Gerhold 	[GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
2554bf37a057SStephan Gerhold 	[GCC_SMMU_CFG_CLK] = &gcc_smmu_cfg_clk.clkr,
2555bf37a057SStephan Gerhold 	[GCC_VENUS_TBU_CLK] = &gcc_venus_tbu_clk.clkr,
2556bf37a057SStephan Gerhold 	[GCC_VFE_TBU_CLK] = &gcc_vfe_tbu_clk.clkr,
2557bf37a057SStephan Gerhold 	[GCC_BIMC_GFX_CLK] = &gcc_bimc_gfx_clk.clkr,
2558bf37a057SStephan Gerhold 	[GCC_BIMC_GPU_CLK] = &gcc_bimc_gpu_clk.clkr,
2559bf37a057SStephan Gerhold 	[GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
2560bf37a057SStephan Gerhold 	[GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
2561bf37a057SStephan Gerhold 	[GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
2562bf37a057SStephan Gerhold 	[GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
2563bf37a057SStephan Gerhold 	[GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
2564bf37a057SStephan Gerhold 	[GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
2565bf37a057SStephan Gerhold 	[GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
2566bf37a057SStephan Gerhold 	[GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
2567bf37a057SStephan Gerhold 	[GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr,
2568bf37a057SStephan Gerhold 	[GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr,
2569bf37a057SStephan Gerhold 	[GCC_BLSP1_QUP6_I2C_APPS_CLK] = &gcc_blsp1_qup6_i2c_apps_clk.clkr,
2570bf37a057SStephan Gerhold 	[GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr,
2571bf37a057SStephan Gerhold 	[GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
2572bf37a057SStephan Gerhold 	[GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
2573bf37a057SStephan Gerhold 	[GCC_CAMSS_AHB_CLK] = &gcc_camss_ahb_clk.clkr,
2574bf37a057SStephan Gerhold 	[GCC_CAMSS_CSI0_CLK] = &gcc_camss_csi0_clk.clkr,
2575bf37a057SStephan Gerhold 	[GCC_CAMSS_CSI0_AHB_CLK] = &gcc_camss_csi0_ahb_clk.clkr,
2576bf37a057SStephan Gerhold 	[GCC_CAMSS_CSI0PHY_CLK] = &gcc_camss_csi0phy_clk.clkr,
2577bf37a057SStephan Gerhold 	[GCC_CAMSS_CSI0PHYTIMER_CLK] = &gcc_camss_csi0phytimer_clk.clkr,
2578bf37a057SStephan Gerhold 	[GCC_CAMSS_CSI0PIX_CLK] = &gcc_camss_csi0pix_clk.clkr,
2579bf37a057SStephan Gerhold 	[GCC_CAMSS_CSI0RDI_CLK] = &gcc_camss_csi0rdi_clk.clkr,
2580bf37a057SStephan Gerhold 	[GCC_CAMSS_CSI1_CLK] = &gcc_camss_csi1_clk.clkr,
2581bf37a057SStephan Gerhold 	[GCC_CAMSS_CSI1_AHB_CLK] = &gcc_camss_csi1_ahb_clk.clkr,
2582bf37a057SStephan Gerhold 	[GCC_CAMSS_CSI1PHY_CLK] = &gcc_camss_csi1phy_clk.clkr,
2583bf37a057SStephan Gerhold 	[GCC_CAMSS_CSI1PIX_CLK] = &gcc_camss_csi1pix_clk.clkr,
2584bf37a057SStephan Gerhold 	[GCC_CAMSS_CSI1RDI_CLK] = &gcc_camss_csi1rdi_clk.clkr,
2585bf37a057SStephan Gerhold 	[GCC_CAMSS_CSI_VFE0_CLK] = &gcc_camss_csi_vfe0_clk.clkr,
2586bf37a057SStephan Gerhold 	[GCC_CAMSS_GP0_CLK] = &gcc_camss_gp0_clk.clkr,
2587bf37a057SStephan Gerhold 	[GCC_CAMSS_GP1_CLK] = &gcc_camss_gp1_clk.clkr,
2588bf37a057SStephan Gerhold 	[GCC_CAMSS_ISPIF_AHB_CLK] = &gcc_camss_ispif_ahb_clk.clkr,
2589bf37a057SStephan Gerhold 	[GCC_CAMSS_MCLK0_CLK] = &gcc_camss_mclk0_clk.clkr,
2590bf37a057SStephan Gerhold 	[GCC_CAMSS_MCLK1_CLK] = &gcc_camss_mclk1_clk.clkr,
2591bf37a057SStephan Gerhold 	[GCC_CAMSS_TOP_AHB_CLK] = &gcc_camss_top_ahb_clk.clkr,
2592bf37a057SStephan Gerhold 	[GCC_CAMSS_VFE0_CLK] = &gcc_camss_vfe0_clk.clkr,
2593bf37a057SStephan Gerhold 	[GCC_CAMSS_VFE_AHB_CLK] = &gcc_camss_vfe_ahb_clk.clkr,
2594bf37a057SStephan Gerhold 	[GCC_CAMSS_VFE_AXI_CLK] = &gcc_camss_vfe_axi_clk.clkr,
2595bf37a057SStephan Gerhold 	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
2596bf37a057SStephan Gerhold 	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
2597bf37a057SStephan Gerhold 	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
2598bf37a057SStephan Gerhold 	[GCC_MDSS_AHB_CLK] = &gcc_mdss_ahb_clk.clkr,
2599bf37a057SStephan Gerhold 	[GCC_MDSS_AXI_CLK] = &gcc_mdss_axi_clk.clkr,
2600bf37a057SStephan Gerhold 	[GCC_MDSS_BYTE0_CLK] = &gcc_mdss_byte0_clk.clkr,
2601bf37a057SStephan Gerhold 	[GCC_MDSS_ESC0_CLK] = &gcc_mdss_esc0_clk.clkr,
2602bf37a057SStephan Gerhold 	[GCC_MDSS_MDP_CLK] = &gcc_mdss_mdp_clk.clkr,
2603bf37a057SStephan Gerhold 	[GCC_MDSS_PCLK0_CLK] = &gcc_mdss_pclk0_clk.clkr,
2604bf37a057SStephan Gerhold 	[GCC_MDSS_VSYNC_CLK] = &gcc_mdss_vsync_clk.clkr,
2605bf37a057SStephan Gerhold 	[GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,
2606bf37a057SStephan Gerhold 	[GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr,
2607bf37a057SStephan Gerhold 	[GCC_OXILI_AHB_CLK] = &gcc_oxili_ahb_clk.clkr,
2608bf37a057SStephan Gerhold 	[GCC_OXILI_GFX3D_CLK] = &gcc_oxili_gfx3d_clk.clkr,
2609bf37a057SStephan Gerhold 	[GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
2610bf37a057SStephan Gerhold 	[GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
2611bf37a057SStephan Gerhold 	[GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
2612bf37a057SStephan Gerhold 	[GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
2613bf37a057SStephan Gerhold 	[GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
2614bf37a057SStephan Gerhold 	[GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
2615bf37a057SStephan Gerhold 	[GCC_USB2A_PHY_SLEEP_CLK] = &gcc_usb2a_phy_sleep_clk.clkr,
2616bf37a057SStephan Gerhold 	[GCC_USB_HS_AHB_CLK] = &gcc_usb_hs_ahb_clk.clkr,
2617bf37a057SStephan Gerhold 	[GCC_USB_HS_PHY_CFG_AHB_CLK] = &gcc_usb_hs_phy_cfg_ahb_clk.clkr,
2618bf37a057SStephan Gerhold 	[GCC_USB_HS_SYSTEM_CLK] = &gcc_usb_hs_system_clk.clkr,
2619bf37a057SStephan Gerhold 	[GCC_VENUS0_AHB_CLK] = &gcc_venus0_ahb_clk.clkr,
2620bf37a057SStephan Gerhold 	[GCC_VENUS0_AXI_CLK] = &gcc_venus0_axi_clk.clkr,
2621bf37a057SStephan Gerhold 	[GCC_VENUS0_CORE0_VCODEC0_CLK] = &gcc_venus0_core0_vcodec0_clk.clkr,
2622bf37a057SStephan Gerhold 	[GCC_VENUS0_VCODEC0_CLK] = &gcc_venus0_vcodec0_clk.clkr,
2623bf37a057SStephan Gerhold };
2624bf37a057SStephan Gerhold 
2625bf37a057SStephan Gerhold static struct gdsc *gcc_msm8909_gdscs[] = {
2626bf37a057SStephan Gerhold 	[MDSS_GDSC] = &mdss_gdsc,
2627bf37a057SStephan Gerhold 	[OXILI_GDSC] = &oxili_gdsc,
2628bf37a057SStephan Gerhold 	[VENUS_GDSC] = &venus_gdsc,
2629bf37a057SStephan Gerhold 	[VENUS_CORE0_GDSC] = &venus_core0_gdsc,
2630bf37a057SStephan Gerhold 	[VFE_GDSC] = &vfe_gdsc,
2631bf37a057SStephan Gerhold };
2632bf37a057SStephan Gerhold 
2633bf37a057SStephan Gerhold static const struct qcom_reset_map gcc_msm8909_resets[] = {
2634bf37a057SStephan Gerhold 	[GCC_AUDIO_CORE_BCR] = { 0x1c008 },
2635bf37a057SStephan Gerhold 	[GCC_BLSP1_BCR] = { 0x01000 },
2636bf37a057SStephan Gerhold 	[GCC_BLSP1_QUP1_BCR] = { 0x02000 },
2637bf37a057SStephan Gerhold 	[GCC_BLSP1_QUP2_BCR] = { 0x03008 },
2638bf37a057SStephan Gerhold 	[GCC_BLSP1_QUP3_BCR] = { 0x04018 },
2639bf37a057SStephan Gerhold 	[GCC_BLSP1_QUP4_BCR] = { 0x05018 },
2640bf37a057SStephan Gerhold 	[GCC_BLSP1_QUP5_BCR] = { 0x06018 },
2641bf37a057SStephan Gerhold 	[GCC_BLSP1_QUP6_BCR] = { 0x07018 },
2642bf37a057SStephan Gerhold 	[GCC_BLSP1_UART1_BCR] = { 0x02038 },
2643bf37a057SStephan Gerhold 	[GCC_BLSP1_UART2_BCR] = { 0x03028 },
2644bf37a057SStephan Gerhold 	[GCC_CAMSS_CSI0_BCR] = { 0x4e038 },
2645bf37a057SStephan Gerhold 	[GCC_CAMSS_CSI0PHY_BCR] = { 0x4e044 },
2646bf37a057SStephan Gerhold 	[GCC_CAMSS_CSI0PIX_BCR] = { 0x4e054 },
2647bf37a057SStephan Gerhold 	[GCC_CAMSS_CSI0RDI_BCR] = { 0x4e04c },
2648bf37a057SStephan Gerhold 	[GCC_CAMSS_CSI1_BCR] = { 0x4f038 },
2649bf37a057SStephan Gerhold 	[GCC_CAMSS_CSI1PHY_BCR] = { 0x4f044 },
2650bf37a057SStephan Gerhold 	[GCC_CAMSS_CSI1PIX_BCR] = { 0x4f054 },
2651bf37a057SStephan Gerhold 	[GCC_CAMSS_CSI1RDI_BCR] = { 0x4f04c },
2652bf37a057SStephan Gerhold 	[GCC_CAMSS_CSI_VFE0_BCR] = { 0x5804c },
2653bf37a057SStephan Gerhold 	[GCC_CAMSS_GP0_BCR] = { 0x54014 },
2654bf37a057SStephan Gerhold 	[GCC_CAMSS_GP1_BCR] = { 0x55014 },
2655bf37a057SStephan Gerhold 	[GCC_CAMSS_ISPIF_BCR] = { 0x50000 },
2656bf37a057SStephan Gerhold 	[GCC_CAMSS_MCLK0_BCR] = { 0x52014 },
2657bf37a057SStephan Gerhold 	[GCC_CAMSS_MCLK1_BCR] = { 0x53014 },
2658bf37a057SStephan Gerhold 	[GCC_CAMSS_PHY0_BCR] = { 0x4e018 },
2659bf37a057SStephan Gerhold 	[GCC_CAMSS_TOP_BCR] = { 0x56000 },
2660bf37a057SStephan Gerhold 	[GCC_CAMSS_TOP_AHB_BCR] = { 0x5a018 },
2661bf37a057SStephan Gerhold 	[GCC_CAMSS_VFE_BCR] = { 0x58030 },
2662bf37a057SStephan Gerhold 	[GCC_CRYPTO_BCR] = { 0x16000 },
2663bf37a057SStephan Gerhold 	[GCC_MDSS_BCR] = { 0x4d074 },
2664bf37a057SStephan Gerhold 	[GCC_OXILI_BCR] = { 0x59018 },
2665bf37a057SStephan Gerhold 	[GCC_PDM_BCR] = { 0x44000 },
2666bf37a057SStephan Gerhold 	[GCC_PRNG_BCR] = { 0x13000 },
2667bf37a057SStephan Gerhold 	[GCC_QUSB2_PHY_BCR] = { 0x4103c },
2668bf37a057SStephan Gerhold 	[GCC_SDCC1_BCR] = { 0x42000 },
2669bf37a057SStephan Gerhold 	[GCC_SDCC2_BCR] = { 0x43000 },
2670bf37a057SStephan Gerhold 	[GCC_ULT_AUDIO_BCR] = { 0x1c0b4 },
2671bf37a057SStephan Gerhold 	[GCC_USB2A_PHY_BCR] = { 0x41028 },
2672*dcc6c9fbSStephan Gerhold 	[GCC_USB2_HS_PHY_ONLY_BCR] = { .reg = 0x41034, .udelay = 15 },
2673bf37a057SStephan Gerhold 	[GCC_USB_HS_BCR] = { 0x41000 },
2674bf37a057SStephan Gerhold 	[GCC_VENUS0_BCR] = { 0x4c014 },
2675bf37a057SStephan Gerhold 	/* Subsystem Restart */
2676bf37a057SStephan Gerhold 	[GCC_MSS_RESTART] = { 0x3e000 },
2677bf37a057SStephan Gerhold };
2678bf37a057SStephan Gerhold 
2679bf37a057SStephan Gerhold static const struct regmap_config gcc_msm8909_regmap_config = {
2680bf37a057SStephan Gerhold 	.reg_bits	= 32,
2681bf37a057SStephan Gerhold 	.reg_stride	= 4,
2682bf37a057SStephan Gerhold 	.val_bits	= 32,
2683bf37a057SStephan Gerhold 	.max_register	= 0x80000,
2684bf37a057SStephan Gerhold 	.fast_io	= true,
2685bf37a057SStephan Gerhold };
2686bf37a057SStephan Gerhold 
2687bf37a057SStephan Gerhold static const struct qcom_cc_desc gcc_msm8909_desc = {
2688bf37a057SStephan Gerhold 	.config = &gcc_msm8909_regmap_config,
2689bf37a057SStephan Gerhold 	.clks = gcc_msm8909_clocks,
2690bf37a057SStephan Gerhold 	.num_clks = ARRAY_SIZE(gcc_msm8909_clocks),
2691bf37a057SStephan Gerhold 	.resets = gcc_msm8909_resets,
2692bf37a057SStephan Gerhold 	.num_resets = ARRAY_SIZE(gcc_msm8909_resets),
2693bf37a057SStephan Gerhold 	.gdscs = gcc_msm8909_gdscs,
2694bf37a057SStephan Gerhold 	.num_gdscs = ARRAY_SIZE(gcc_msm8909_gdscs),
2695bf37a057SStephan Gerhold };
2696bf37a057SStephan Gerhold 
2697bf37a057SStephan Gerhold static const struct of_device_id gcc_msm8909_match_table[] = {
2698bf37a057SStephan Gerhold 	{ .compatible = "qcom,gcc-msm8909" },
2699bf37a057SStephan Gerhold 	{ }
2700bf37a057SStephan Gerhold };
2701bf37a057SStephan Gerhold MODULE_DEVICE_TABLE(of, gcc_msm8909_match_table);
2702bf37a057SStephan Gerhold 
gcc_msm8909_probe(struct platform_device * pdev)2703bf37a057SStephan Gerhold static int gcc_msm8909_probe(struct platform_device *pdev)
2704bf37a057SStephan Gerhold {
2705bf37a057SStephan Gerhold 	return qcom_cc_probe(pdev, &gcc_msm8909_desc);
2706bf37a057SStephan Gerhold }
2707bf37a057SStephan Gerhold 
2708bf37a057SStephan Gerhold static struct platform_driver gcc_msm8909_driver = {
2709bf37a057SStephan Gerhold 	.probe		= gcc_msm8909_probe,
2710bf37a057SStephan Gerhold 	.driver		= {
2711bf37a057SStephan Gerhold 		.name	= "gcc-msm8909",
2712bf37a057SStephan Gerhold 		.of_match_table = gcc_msm8909_match_table,
2713bf37a057SStephan Gerhold 	},
2714bf37a057SStephan Gerhold };
2715bf37a057SStephan Gerhold 
gcc_msm8909_init(void)2716bf37a057SStephan Gerhold static int __init gcc_msm8909_init(void)
2717bf37a057SStephan Gerhold {
2718bf37a057SStephan Gerhold 	return platform_driver_register(&gcc_msm8909_driver);
2719bf37a057SStephan Gerhold }
2720bf37a057SStephan Gerhold core_initcall(gcc_msm8909_init);
2721bf37a057SStephan Gerhold 
gcc_msm8909_exit(void)2722bf37a057SStephan Gerhold static void __exit gcc_msm8909_exit(void)
2723bf37a057SStephan Gerhold {
2724bf37a057SStephan Gerhold 	platform_driver_unregister(&gcc_msm8909_driver);
2725bf37a057SStephan Gerhold }
2726bf37a057SStephan Gerhold module_exit(gcc_msm8909_exit);
2727bf37a057SStephan Gerhold 
2728bf37a057SStephan Gerhold MODULE_DESCRIPTION("Qualcomm GCC MSM8909 Driver");
2729bf37a057SStephan Gerhold MODULE_LICENSE("GPL");
2730bf37a057SStephan Gerhold MODULE_ALIAS("platform:gcc-msm8909");
2731