xref: /linux/drivers/clk/qcom/gcc-mdm9607.c (revision 762f99f4f3cb41a775b5157dd761217beba65873)
1*48b72532SKonrad Dybcio // SPDX-License-Identifier: GPL-2.0-only
2*48b72532SKonrad Dybcio /*
3*48b72532SKonrad Dybcio  * Copyright (c) 2021, Konrad Dybcio <konrad.dybcio@somainline.org>
4*48b72532SKonrad Dybcio  */
5*48b72532SKonrad Dybcio 
6*48b72532SKonrad Dybcio #include <linux/kernel.h>
7*48b72532SKonrad Dybcio #include <linux/bitops.h>
8*48b72532SKonrad Dybcio #include <linux/err.h>
9*48b72532SKonrad Dybcio #include <linux/platform_device.h>
10*48b72532SKonrad Dybcio #include <linux/module.h>
11*48b72532SKonrad Dybcio #include <linux/of.h>
12*48b72532SKonrad Dybcio #include <linux/clk-provider.h>
13*48b72532SKonrad Dybcio #include <linux/regmap.h>
14*48b72532SKonrad Dybcio #include <linux/reset-controller.h>
15*48b72532SKonrad Dybcio 
16*48b72532SKonrad Dybcio #include <dt-bindings/clock/qcom,gcc-mdm9607.h>
17*48b72532SKonrad Dybcio 
18*48b72532SKonrad Dybcio #include "common.h"
19*48b72532SKonrad Dybcio #include "clk-regmap.h"
20*48b72532SKonrad Dybcio #include "clk-alpha-pll.h"
21*48b72532SKonrad Dybcio #include "clk-pll.h"
22*48b72532SKonrad Dybcio #include "clk-rcg.h"
23*48b72532SKonrad Dybcio #include "clk-branch.h"
24*48b72532SKonrad Dybcio #include "reset.h"
25*48b72532SKonrad Dybcio #include "gdsc.h"
26*48b72532SKonrad Dybcio 
27*48b72532SKonrad Dybcio enum {
28*48b72532SKonrad Dybcio 	P_XO,
29*48b72532SKonrad Dybcio 	P_BIMC,
30*48b72532SKonrad Dybcio 	P_GPLL0,
31*48b72532SKonrad Dybcio 	P_GPLL1,
32*48b72532SKonrad Dybcio 	P_GPLL2,
33*48b72532SKonrad Dybcio 	P_SLEEP_CLK,
34*48b72532SKonrad Dybcio };
35*48b72532SKonrad Dybcio 
36*48b72532SKonrad Dybcio static struct clk_alpha_pll gpll0_early = {
37*48b72532SKonrad Dybcio 	.offset = 0x21000,
38*48b72532SKonrad Dybcio 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
39*48b72532SKonrad Dybcio 	.clkr = {
40*48b72532SKonrad Dybcio 		.enable_reg = 0x45000,
41*48b72532SKonrad Dybcio 		.enable_mask = BIT(0),
42*48b72532SKonrad Dybcio 		.hw.init = &(struct clk_init_data)
43*48b72532SKonrad Dybcio 		{
44*48b72532SKonrad Dybcio 			.name = "gpll0_early",
45*48b72532SKonrad Dybcio 			.parent_data = &(const struct clk_parent_data){
46*48b72532SKonrad Dybcio 				.fw_name = "xo",
47*48b72532SKonrad Dybcio 			},
48*48b72532SKonrad Dybcio 			.num_parents = 1,
49*48b72532SKonrad Dybcio 			.ops = &clk_alpha_pll_ops,
50*48b72532SKonrad Dybcio 		},
51*48b72532SKonrad Dybcio 	},
52*48b72532SKonrad Dybcio };
53*48b72532SKonrad Dybcio 
54*48b72532SKonrad Dybcio static struct clk_alpha_pll_postdiv gpll0 = {
55*48b72532SKonrad Dybcio 	.offset = 0x21000,
56*48b72532SKonrad Dybcio 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
57*48b72532SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data)
58*48b72532SKonrad Dybcio 	{
59*48b72532SKonrad Dybcio 		.name = "gpll0",
60*48b72532SKonrad Dybcio 		.parent_hws = (const struct clk_hw *[]){ &gpll0_early.clkr.hw },
61*48b72532SKonrad Dybcio 		.num_parents = 1,
62*48b72532SKonrad Dybcio 		.ops = &clk_alpha_pll_postdiv_ops,
63*48b72532SKonrad Dybcio 	},
64*48b72532SKonrad Dybcio };
65*48b72532SKonrad Dybcio 
66*48b72532SKonrad Dybcio static const struct parent_map gcc_xo_gpll0_map[] = {
67*48b72532SKonrad Dybcio 	{ P_XO, 0 },
68*48b72532SKonrad Dybcio 	{ P_GPLL0, 1 },
69*48b72532SKonrad Dybcio };
70*48b72532SKonrad Dybcio 
71*48b72532SKonrad Dybcio static const struct clk_parent_data gcc_xo_gpll0[] = {
72*48b72532SKonrad Dybcio 	{ .fw_name = "xo" },
73*48b72532SKonrad Dybcio 	{ .hw = &gpll0.clkr.hw },
74*48b72532SKonrad Dybcio };
75*48b72532SKonrad Dybcio 
76*48b72532SKonrad Dybcio static struct clk_pll gpll1 = {
77*48b72532SKonrad Dybcio 	.l_reg = 0x20004,
78*48b72532SKonrad Dybcio 	.m_reg = 0x20008,
79*48b72532SKonrad Dybcio 	.n_reg = 0x2000c,
80*48b72532SKonrad Dybcio 	.config_reg = 0x20010,
81*48b72532SKonrad Dybcio 	.mode_reg = 0x20000,
82*48b72532SKonrad Dybcio 	.status_reg = 0x2001c,
83*48b72532SKonrad Dybcio 	.status_bit = 17,
84*48b72532SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
85*48b72532SKonrad Dybcio 		.name = "gpll1",
86*48b72532SKonrad Dybcio 		.parent_data = &(const struct clk_parent_data){
87*48b72532SKonrad Dybcio 			.fw_name = "xo",
88*48b72532SKonrad Dybcio 		},
89*48b72532SKonrad Dybcio 		.num_parents = 1,
90*48b72532SKonrad Dybcio 		.ops = &clk_pll_ops,
91*48b72532SKonrad Dybcio 	},
92*48b72532SKonrad Dybcio };
93*48b72532SKonrad Dybcio 
94*48b72532SKonrad Dybcio static struct clk_regmap gpll1_vote = {
95*48b72532SKonrad Dybcio 	.enable_reg = 0x45000,
96*48b72532SKonrad Dybcio 	.enable_mask = BIT(1),
97*48b72532SKonrad Dybcio 	.hw.init = &(struct clk_init_data){
98*48b72532SKonrad Dybcio 		.name = "gpll1_vote",
99*48b72532SKonrad Dybcio 		.parent_hws = (const struct clk_hw *[]){ &gpll1.clkr.hw },
100*48b72532SKonrad Dybcio 		.num_parents = 1,
101*48b72532SKonrad Dybcio 		.ops = &clk_pll_vote_ops,
102*48b72532SKonrad Dybcio 	},
103*48b72532SKonrad Dybcio };
104*48b72532SKonrad Dybcio 
105*48b72532SKonrad Dybcio static const struct parent_map gcc_xo_gpll0_gpll1_sleep_map[] = {
106*48b72532SKonrad Dybcio 	{ P_XO, 0 },
107*48b72532SKonrad Dybcio 	{ P_GPLL0, 1 },
108*48b72532SKonrad Dybcio 	{ P_GPLL1, 2 },
109*48b72532SKonrad Dybcio 	{ P_SLEEP_CLK, 6 },
110*48b72532SKonrad Dybcio };
111*48b72532SKonrad Dybcio 
112*48b72532SKonrad Dybcio static const struct clk_parent_data gcc_xo_gpll0_gpll1_sleep[] = {
113*48b72532SKonrad Dybcio 	{ .fw_name = "xo" },
114*48b72532SKonrad Dybcio 	{ .hw = &gpll0.clkr.hw },
115*48b72532SKonrad Dybcio 	{ .hw = &gpll1_vote.hw },
116*48b72532SKonrad Dybcio 	{ .fw_name = "sleep_clk" },
117*48b72532SKonrad Dybcio };
118*48b72532SKonrad Dybcio 
119*48b72532SKonrad Dybcio static struct clk_alpha_pll gpll2_early = {
120*48b72532SKonrad Dybcio 	.offset = 0x25000,
121*48b72532SKonrad Dybcio 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
122*48b72532SKonrad Dybcio 	.clkr = {
123*48b72532SKonrad Dybcio 		.enable_reg = 0x45000,
124*48b72532SKonrad Dybcio 		.enable_mask = BIT(3), /* Yeah, apparently it's not 2 */
125*48b72532SKonrad Dybcio 		.hw.init = &(struct clk_init_data)
126*48b72532SKonrad Dybcio 		{
127*48b72532SKonrad Dybcio 			.name = "gpll2_early",
128*48b72532SKonrad Dybcio 			.parent_data = &(const struct clk_parent_data){
129*48b72532SKonrad Dybcio 				.fw_name = "xo",
130*48b72532SKonrad Dybcio 			},
131*48b72532SKonrad Dybcio 			.num_parents = 1,
132*48b72532SKonrad Dybcio 			.ops = &clk_alpha_pll_ops,
133*48b72532SKonrad Dybcio 		},
134*48b72532SKonrad Dybcio 	},
135*48b72532SKonrad Dybcio };
136*48b72532SKonrad Dybcio 
137*48b72532SKonrad Dybcio static struct clk_alpha_pll_postdiv gpll2 = {
138*48b72532SKonrad Dybcio 	.offset = 0x25000,
139*48b72532SKonrad Dybcio 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
140*48b72532SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data)
141*48b72532SKonrad Dybcio 	{
142*48b72532SKonrad Dybcio 		.name = "gpll2",
143*48b72532SKonrad Dybcio 		.parent_hws = (const struct clk_hw *[]){ &gpll2_early.clkr.hw },
144*48b72532SKonrad Dybcio 		.num_parents = 1,
145*48b72532SKonrad Dybcio 		.ops = &clk_alpha_pll_postdiv_ops,
146*48b72532SKonrad Dybcio 	},
147*48b72532SKonrad Dybcio };
148*48b72532SKonrad Dybcio 
149*48b72532SKonrad Dybcio static const struct parent_map gcc_xo_gpll0_gpll2_map[] = {
150*48b72532SKonrad Dybcio 	{ P_XO, 0 },
151*48b72532SKonrad Dybcio 	{ P_GPLL0, 1 },
152*48b72532SKonrad Dybcio 	{ P_GPLL2, 2 },
153*48b72532SKonrad Dybcio };
154*48b72532SKonrad Dybcio 
155*48b72532SKonrad Dybcio static const struct clk_parent_data gcc_xo_gpll0_gpll2[] = {
156*48b72532SKonrad Dybcio 	{ .fw_name = "xo" },
157*48b72532SKonrad Dybcio 	{ .hw = &gpll0.clkr.hw },
158*48b72532SKonrad Dybcio 	{ .hw = &gpll2.clkr.hw },
159*48b72532SKonrad Dybcio };
160*48b72532SKonrad Dybcio 
161*48b72532SKonrad Dybcio static const struct parent_map gcc_xo_gpll0_gpll1_gpll2_map[] = {
162*48b72532SKonrad Dybcio 	{ P_XO, 0 },
163*48b72532SKonrad Dybcio 	{ P_GPLL0, 1 },
164*48b72532SKonrad Dybcio 	{ P_GPLL1, 2 },
165*48b72532SKonrad Dybcio 	{ P_GPLL2, 3 },
166*48b72532SKonrad Dybcio };
167*48b72532SKonrad Dybcio 
168*48b72532SKonrad Dybcio static const struct clk_parent_data gcc_xo_gpll0_gpll1_gpll2[] = {
169*48b72532SKonrad Dybcio 	{ .fw_name = "xo" },
170*48b72532SKonrad Dybcio 	{ .hw = &gpll0.clkr.hw },
171*48b72532SKonrad Dybcio 	{ .hw = &gpll1_vote.hw },
172*48b72532SKonrad Dybcio 	{ .hw = &gpll2.clkr.hw },
173*48b72532SKonrad Dybcio };
174*48b72532SKonrad Dybcio 
175*48b72532SKonrad Dybcio static const struct freq_tbl ftbl_apss_ahb_clk[] = {
176*48b72532SKonrad Dybcio 	F(19200000, P_XO, 1, 0, 0),
177*48b72532SKonrad Dybcio 	F(50000000, P_GPLL0, 16, 0, 0),
178*48b72532SKonrad Dybcio 	F(100000000, P_GPLL0, 8, 0, 0),
179*48b72532SKonrad Dybcio 	{ }
180*48b72532SKonrad Dybcio };
181*48b72532SKonrad Dybcio 
182*48b72532SKonrad Dybcio static struct clk_rcg2 apss_ahb_clk_src = {
183*48b72532SKonrad Dybcio 	.cmd_rcgr = 0x46000,
184*48b72532SKonrad Dybcio 	.hid_width = 5,
185*48b72532SKonrad Dybcio 	.parent_map = gcc_xo_gpll0_map,
186*48b72532SKonrad Dybcio 	.freq_tbl = ftbl_apss_ahb_clk,
187*48b72532SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
188*48b72532SKonrad Dybcio 		.name = "apss_ahb_clk_src",
189*48b72532SKonrad Dybcio 		.parent_data = gcc_xo_gpll0,
190*48b72532SKonrad Dybcio 		.num_parents = 2,
191*48b72532SKonrad Dybcio 		.ops = &clk_rcg2_ops,
192*48b72532SKonrad Dybcio 	},
193*48b72532SKonrad Dybcio };
194*48b72532SKonrad Dybcio 
195*48b72532SKonrad Dybcio static struct clk_pll bimc_pll = {
196*48b72532SKonrad Dybcio 	.l_reg = 0x23004,
197*48b72532SKonrad Dybcio 	.m_reg = 0x23008,
198*48b72532SKonrad Dybcio 	.n_reg = 0x2300c,
199*48b72532SKonrad Dybcio 	.config_reg = 0x23010,
200*48b72532SKonrad Dybcio 	.mode_reg = 0x23000,
201*48b72532SKonrad Dybcio 	.status_reg = 0x2301c,
202*48b72532SKonrad Dybcio 	.status_bit = 17,
203*48b72532SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
204*48b72532SKonrad Dybcio 		.name = "bimc_pll",
205*48b72532SKonrad Dybcio 		.parent_data = &(const struct clk_parent_data){
206*48b72532SKonrad Dybcio 			.fw_name = "xo",
207*48b72532SKonrad Dybcio 		},
208*48b72532SKonrad Dybcio 		.num_parents = 1,
209*48b72532SKonrad Dybcio 		.ops = &clk_pll_ops,
210*48b72532SKonrad Dybcio 	},
211*48b72532SKonrad Dybcio };
212*48b72532SKonrad Dybcio 
213*48b72532SKonrad Dybcio static struct clk_regmap bimc_pll_vote = {
214*48b72532SKonrad Dybcio 	.enable_reg = 0x45000,
215*48b72532SKonrad Dybcio 	.enable_mask = BIT(3),
216*48b72532SKonrad Dybcio 	.hw.init = &(struct clk_init_data){
217*48b72532SKonrad Dybcio 		.name = "bimc_pll_vote",
218*48b72532SKonrad Dybcio 		.parent_hws = (const struct clk_hw *[]){ &bimc_pll.clkr.hw },
219*48b72532SKonrad Dybcio 		.num_parents = 1,
220*48b72532SKonrad Dybcio 		.ops = &clk_pll_vote_ops,
221*48b72532SKonrad Dybcio 	},
222*48b72532SKonrad Dybcio };
223*48b72532SKonrad Dybcio 
224*48b72532SKonrad Dybcio static const struct parent_map gcc_xo_gpll0_bimc_map[] = {
225*48b72532SKonrad Dybcio 	{ P_XO, 0 },
226*48b72532SKonrad Dybcio 	{ P_GPLL0, 1 },
227*48b72532SKonrad Dybcio 	{ P_BIMC, 2 },
228*48b72532SKonrad Dybcio };
229*48b72532SKonrad Dybcio 
230*48b72532SKonrad Dybcio static const struct clk_parent_data gcc_xo_gpll0_bimc[] = {
231*48b72532SKonrad Dybcio 	{ .fw_name = "xo" },
232*48b72532SKonrad Dybcio 	{ .hw = &gpll0.clkr.hw },
233*48b72532SKonrad Dybcio 	{ .hw = &bimc_pll_vote.hw },
234*48b72532SKonrad Dybcio };
235*48b72532SKonrad Dybcio 
236*48b72532SKonrad Dybcio static const struct freq_tbl ftbl_pcnoc_bfdcd_clk_src[] = {
237*48b72532SKonrad Dybcio 	F(19200000, P_XO, 1, 0, 0),
238*48b72532SKonrad Dybcio 	F(50000000, P_GPLL0, 16, 0, 0),
239*48b72532SKonrad Dybcio 	F(100000000, P_GPLL0, 8, 0, 0),
240*48b72532SKonrad Dybcio 	{ }
241*48b72532SKonrad Dybcio };
242*48b72532SKonrad Dybcio 
243*48b72532SKonrad Dybcio static struct clk_rcg2 pcnoc_bfdcd_clk_src = {
244*48b72532SKonrad Dybcio 	.cmd_rcgr = 0x27000,
245*48b72532SKonrad Dybcio 	.freq_tbl = ftbl_pcnoc_bfdcd_clk_src,
246*48b72532SKonrad Dybcio 	.hid_width = 5,
247*48b72532SKonrad Dybcio 	.parent_map = gcc_xo_gpll0_bimc_map,
248*48b72532SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
249*48b72532SKonrad Dybcio 		.name = "pcnoc_bfdcd_clk_src",
250*48b72532SKonrad Dybcio 		.parent_data = gcc_xo_gpll0_bimc,
251*48b72532SKonrad Dybcio 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_bimc),
252*48b72532SKonrad Dybcio 		.ops = &clk_rcg2_ops,
253*48b72532SKonrad Dybcio 		.flags = CLK_IS_CRITICAL,
254*48b72532SKonrad Dybcio 	},
255*48b72532SKonrad Dybcio };
256*48b72532SKonrad Dybcio 
257*48b72532SKonrad Dybcio static struct clk_rcg2 system_noc_bfdcd_clk_src = {
258*48b72532SKonrad Dybcio 	.cmd_rcgr = 0x26004,
259*48b72532SKonrad Dybcio 	.hid_width = 5,
260*48b72532SKonrad Dybcio 	.parent_map = gcc_xo_gpll0_bimc_map,
261*48b72532SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
262*48b72532SKonrad Dybcio 		.name = "system_noc_bfdcd_clk_src",
263*48b72532SKonrad Dybcio 		.parent_data = gcc_xo_gpll0_bimc,
264*48b72532SKonrad Dybcio 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_bimc),
265*48b72532SKonrad Dybcio 		.ops = &clk_rcg2_ops,
266*48b72532SKonrad Dybcio 	},
267*48b72532SKonrad Dybcio };
268*48b72532SKonrad Dybcio 
269*48b72532SKonrad Dybcio static const struct freq_tbl ftbl_gcc_blsp1_qup1_6_i2c_apps_clk[] = {
270*48b72532SKonrad Dybcio 	F(19200000, P_XO, 1, 0, 0),
271*48b72532SKonrad Dybcio 	F(50000000, P_GPLL0, 16, 0, 0),
272*48b72532SKonrad Dybcio 	{ }
273*48b72532SKonrad Dybcio };
274*48b72532SKonrad Dybcio 
275*48b72532SKonrad Dybcio static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
276*48b72532SKonrad Dybcio 	.cmd_rcgr = 0x200c,
277*48b72532SKonrad Dybcio 	.hid_width = 5,
278*48b72532SKonrad Dybcio 	.parent_map = gcc_xo_gpll0_map,
279*48b72532SKonrad Dybcio 	.freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
280*48b72532SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
281*48b72532SKonrad Dybcio 		.name = "blsp1_qup1_i2c_apps_clk_src",
282*48b72532SKonrad Dybcio 		.parent_data = gcc_xo_gpll0,
283*48b72532SKonrad Dybcio 		.num_parents = 2,
284*48b72532SKonrad Dybcio 		.ops = &clk_rcg2_ops,
285*48b72532SKonrad Dybcio 	},
286*48b72532SKonrad Dybcio };
287*48b72532SKonrad Dybcio 
288*48b72532SKonrad Dybcio static const struct freq_tbl ftbl_gcc_blsp1_qup1_6_spi_apps_clk[] = {
289*48b72532SKonrad Dybcio 	F(960000, P_XO, 10, 1, 2),
290*48b72532SKonrad Dybcio 	F(4800000, P_XO, 4, 0, 0),
291*48b72532SKonrad Dybcio 	F(9600000, P_XO, 2, 0, 0),
292*48b72532SKonrad Dybcio 	F(16000000, P_GPLL0, 10, 1, 5),
293*48b72532SKonrad Dybcio 	F(19200000, P_XO, 1, 0, 0),
294*48b72532SKonrad Dybcio 	F(25000000, P_GPLL0, 16, 1, 2),
295*48b72532SKonrad Dybcio 	F(50000000, P_GPLL0, 16, 0, 0),
296*48b72532SKonrad Dybcio 	{ }
297*48b72532SKonrad Dybcio };
298*48b72532SKonrad Dybcio 
299*48b72532SKonrad Dybcio static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
300*48b72532SKonrad Dybcio 	.cmd_rcgr = 0x2024,
301*48b72532SKonrad Dybcio 	.mnd_width = 8,
302*48b72532SKonrad Dybcio 	.hid_width = 5,
303*48b72532SKonrad Dybcio 	.parent_map = gcc_xo_gpll0_map,
304*48b72532SKonrad Dybcio 	.freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
305*48b72532SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
306*48b72532SKonrad Dybcio 		.name = "blsp1_qup1_spi_apps_clk_src",
307*48b72532SKonrad Dybcio 		.parent_data = gcc_xo_gpll0,
308*48b72532SKonrad Dybcio 		.num_parents = 2,
309*48b72532SKonrad Dybcio 		.ops = &clk_rcg2_ops,
310*48b72532SKonrad Dybcio 	},
311*48b72532SKonrad Dybcio };
312*48b72532SKonrad Dybcio 
313*48b72532SKonrad Dybcio static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
314*48b72532SKonrad Dybcio 	.cmd_rcgr = 0x3000,
315*48b72532SKonrad Dybcio 	.hid_width = 5,
316*48b72532SKonrad Dybcio 	.parent_map = gcc_xo_gpll0_map,
317*48b72532SKonrad Dybcio 	.freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
318*48b72532SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
319*48b72532SKonrad Dybcio 		.name = "blsp1_qup2_i2c_apps_clk_src",
320*48b72532SKonrad Dybcio 		.parent_data = gcc_xo_gpll0,
321*48b72532SKonrad Dybcio 		.num_parents = 2,
322*48b72532SKonrad Dybcio 		.ops = &clk_rcg2_ops,
323*48b72532SKonrad Dybcio 	},
324*48b72532SKonrad Dybcio };
325*48b72532SKonrad Dybcio 
326*48b72532SKonrad Dybcio static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
327*48b72532SKonrad Dybcio 	.cmd_rcgr = 0x3014,
328*48b72532SKonrad Dybcio 	.mnd_width = 8,
329*48b72532SKonrad Dybcio 	.hid_width = 5,
330*48b72532SKonrad Dybcio 	.parent_map = gcc_xo_gpll0_map,
331*48b72532SKonrad Dybcio 	.freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
332*48b72532SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
333*48b72532SKonrad Dybcio 		.name = "blsp1_qup2_spi_apps_clk_src",
334*48b72532SKonrad Dybcio 		.parent_data = gcc_xo_gpll0,
335*48b72532SKonrad Dybcio 		.num_parents = 2,
336*48b72532SKonrad Dybcio 		.ops = &clk_rcg2_ops,
337*48b72532SKonrad Dybcio 	},
338*48b72532SKonrad Dybcio };
339*48b72532SKonrad Dybcio 
340*48b72532SKonrad Dybcio static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
341*48b72532SKonrad Dybcio 	.cmd_rcgr = 0x4000,
342*48b72532SKonrad Dybcio 	.hid_width = 5,
343*48b72532SKonrad Dybcio 	.parent_map = gcc_xo_gpll0_map,
344*48b72532SKonrad Dybcio 	.freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
345*48b72532SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
346*48b72532SKonrad Dybcio 		.name = "blsp1_qup3_i2c_apps_clk_src",
347*48b72532SKonrad Dybcio 		.parent_data = gcc_xo_gpll0,
348*48b72532SKonrad Dybcio 		.num_parents = 2,
349*48b72532SKonrad Dybcio 		.ops = &clk_rcg2_ops,
350*48b72532SKonrad Dybcio 	},
351*48b72532SKonrad Dybcio };
352*48b72532SKonrad Dybcio 
353*48b72532SKonrad Dybcio static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
354*48b72532SKonrad Dybcio 	.cmd_rcgr = 0x4024,
355*48b72532SKonrad Dybcio 	.mnd_width = 8,
356*48b72532SKonrad Dybcio 	.hid_width = 5,
357*48b72532SKonrad Dybcio 	.parent_map = gcc_xo_gpll0_map,
358*48b72532SKonrad Dybcio 	.freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
359*48b72532SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
360*48b72532SKonrad Dybcio 		.name = "blsp1_qup3_spi_apps_clk_src",
361*48b72532SKonrad Dybcio 		.parent_data = gcc_xo_gpll0,
362*48b72532SKonrad Dybcio 		.num_parents = 2,
363*48b72532SKonrad Dybcio 		.ops = &clk_rcg2_ops,
364*48b72532SKonrad Dybcio 	},
365*48b72532SKonrad Dybcio };
366*48b72532SKonrad Dybcio 
367*48b72532SKonrad Dybcio static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
368*48b72532SKonrad Dybcio 	.cmd_rcgr = 0x5000,
369*48b72532SKonrad Dybcio 	.hid_width = 5,
370*48b72532SKonrad Dybcio 	.parent_map = gcc_xo_gpll0_map,
371*48b72532SKonrad Dybcio 	.freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
372*48b72532SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
373*48b72532SKonrad Dybcio 		.name = "blsp1_qup4_i2c_apps_clk_src",
374*48b72532SKonrad Dybcio 		.parent_data = gcc_xo_gpll0,
375*48b72532SKonrad Dybcio 		.num_parents = 2,
376*48b72532SKonrad Dybcio 		.ops = &clk_rcg2_ops,
377*48b72532SKonrad Dybcio 	},
378*48b72532SKonrad Dybcio };
379*48b72532SKonrad Dybcio 
380*48b72532SKonrad Dybcio static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
381*48b72532SKonrad Dybcio 	.cmd_rcgr = 0x5024,
382*48b72532SKonrad Dybcio 	.mnd_width = 8,
383*48b72532SKonrad Dybcio 	.hid_width = 5,
384*48b72532SKonrad Dybcio 	.parent_map = gcc_xo_gpll0_map,
385*48b72532SKonrad Dybcio 	.freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
386*48b72532SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
387*48b72532SKonrad Dybcio 		.name = "blsp1_qup4_spi_apps_clk_src",
388*48b72532SKonrad Dybcio 		.parent_data = gcc_xo_gpll0,
389*48b72532SKonrad Dybcio 		.num_parents = 2,
390*48b72532SKonrad Dybcio 		.ops = &clk_rcg2_ops,
391*48b72532SKonrad Dybcio 	},
392*48b72532SKonrad Dybcio };
393*48b72532SKonrad Dybcio 
394*48b72532SKonrad Dybcio static struct clk_rcg2 blsp1_qup5_i2c_apps_clk_src = {
395*48b72532SKonrad Dybcio 	.cmd_rcgr = 0x6000,
396*48b72532SKonrad Dybcio 	.hid_width = 5,
397*48b72532SKonrad Dybcio 	.parent_map = gcc_xo_gpll0_map,
398*48b72532SKonrad Dybcio 	.freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
399*48b72532SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
400*48b72532SKonrad Dybcio 		.name = "blsp1_qup5_i2c_apps_clk_src",
401*48b72532SKonrad Dybcio 		.parent_data = gcc_xo_gpll0,
402*48b72532SKonrad Dybcio 		.num_parents = 2,
403*48b72532SKonrad Dybcio 		.ops = &clk_rcg2_ops,
404*48b72532SKonrad Dybcio 	},
405*48b72532SKonrad Dybcio };
406*48b72532SKonrad Dybcio 
407*48b72532SKonrad Dybcio static struct clk_rcg2 blsp1_qup5_spi_apps_clk_src = {
408*48b72532SKonrad Dybcio 	.cmd_rcgr = 0x6024,
409*48b72532SKonrad Dybcio 	.mnd_width = 8,
410*48b72532SKonrad Dybcio 	.hid_width = 5,
411*48b72532SKonrad Dybcio 	.parent_map = gcc_xo_gpll0_map,
412*48b72532SKonrad Dybcio 	.freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
413*48b72532SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
414*48b72532SKonrad Dybcio 		.name = "blsp1_qup5_spi_apps_clk_src",
415*48b72532SKonrad Dybcio 		.parent_data = gcc_xo_gpll0,
416*48b72532SKonrad Dybcio 		.num_parents = 2,
417*48b72532SKonrad Dybcio 		.ops = &clk_rcg2_ops,
418*48b72532SKonrad Dybcio 	},
419*48b72532SKonrad Dybcio };
420*48b72532SKonrad Dybcio 
421*48b72532SKonrad Dybcio static struct clk_rcg2 blsp1_qup6_i2c_apps_clk_src = {
422*48b72532SKonrad Dybcio 	.cmd_rcgr = 0x7000,
423*48b72532SKonrad Dybcio 	.hid_width = 5,
424*48b72532SKonrad Dybcio 	.parent_map = gcc_xo_gpll0_map,
425*48b72532SKonrad Dybcio 	.freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
426*48b72532SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
427*48b72532SKonrad Dybcio 		.name = "blsp1_qup6_i2c_apps_clk_src",
428*48b72532SKonrad Dybcio 		.parent_data = gcc_xo_gpll0,
429*48b72532SKonrad Dybcio 		.num_parents = 2,
430*48b72532SKonrad Dybcio 		.ops = &clk_rcg2_ops,
431*48b72532SKonrad Dybcio 	},
432*48b72532SKonrad Dybcio };
433*48b72532SKonrad Dybcio 
434*48b72532SKonrad Dybcio static struct clk_rcg2 blsp1_qup6_spi_apps_clk_src = {
435*48b72532SKonrad Dybcio 	.cmd_rcgr = 0x7024,
436*48b72532SKonrad Dybcio 	.mnd_width = 8,
437*48b72532SKonrad Dybcio 	.hid_width = 5,
438*48b72532SKonrad Dybcio 	.parent_map = gcc_xo_gpll0_map,
439*48b72532SKonrad Dybcio 	.freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
440*48b72532SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
441*48b72532SKonrad Dybcio 		.name = "blsp1_qup6_spi_apps_clk_src",
442*48b72532SKonrad Dybcio 		.parent_data = gcc_xo_gpll0,
443*48b72532SKonrad Dybcio 		.num_parents = 2,
444*48b72532SKonrad Dybcio 		.ops = &clk_rcg2_ops,
445*48b72532SKonrad Dybcio 	},
446*48b72532SKonrad Dybcio };
447*48b72532SKonrad Dybcio 
448*48b72532SKonrad Dybcio static const struct freq_tbl ftbl_gcc_blsp1_uart1_6_apps_clk[] = {
449*48b72532SKonrad Dybcio 	F(3686400, P_GPLL0, 1, 72, 15625),
450*48b72532SKonrad Dybcio 	F(7372800, P_GPLL0, 1, 144, 15625),
451*48b72532SKonrad Dybcio 	F(14745600, P_GPLL0, 1, 288, 15625),
452*48b72532SKonrad Dybcio 	F(16000000, P_GPLL0, 10, 1, 5),
453*48b72532SKonrad Dybcio 	F(19200000, P_XO, 1, 0, 0),
454*48b72532SKonrad Dybcio 	F(24000000, P_GPLL0, 1, 3, 100),
455*48b72532SKonrad Dybcio 	F(25000000, P_GPLL0, 16, 1, 2),
456*48b72532SKonrad Dybcio 	F(32000000, P_GPLL0, 1, 1, 25),
457*48b72532SKonrad Dybcio 	F(40000000, P_GPLL0, 1, 1, 20),
458*48b72532SKonrad Dybcio 	F(46400000, P_GPLL0, 1, 29, 500),
459*48b72532SKonrad Dybcio 	F(48000000, P_GPLL0, 1, 3, 50),
460*48b72532SKonrad Dybcio 	F(51200000, P_GPLL0, 1, 8, 125),
461*48b72532SKonrad Dybcio 	F(56000000, P_GPLL0, 1, 7, 100),
462*48b72532SKonrad Dybcio 	F(58982400, P_GPLL0, 1, 1152, 15625),
463*48b72532SKonrad Dybcio 	F(60000000, P_GPLL0, 1, 3, 40),
464*48b72532SKonrad Dybcio 	{ }
465*48b72532SKonrad Dybcio };
466*48b72532SKonrad Dybcio 
467*48b72532SKonrad Dybcio static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
468*48b72532SKonrad Dybcio 	.cmd_rcgr = 0x2044,
469*48b72532SKonrad Dybcio 	.mnd_width = 16,
470*48b72532SKonrad Dybcio 	.hid_width = 5,
471*48b72532SKonrad Dybcio 	.parent_map = gcc_xo_gpll0_map,
472*48b72532SKonrad Dybcio 	.freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
473*48b72532SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
474*48b72532SKonrad Dybcio 		.name = "blsp1_uart1_apps_clk_src",
475*48b72532SKonrad Dybcio 		.parent_data = gcc_xo_gpll0,
476*48b72532SKonrad Dybcio 		.num_parents = 2,
477*48b72532SKonrad Dybcio 		.ops = &clk_rcg2_ops,
478*48b72532SKonrad Dybcio 	},
479*48b72532SKonrad Dybcio };
480*48b72532SKonrad Dybcio 
481*48b72532SKonrad Dybcio static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
482*48b72532SKonrad Dybcio 	.cmd_rcgr = 0x3034,
483*48b72532SKonrad Dybcio 	.mnd_width = 16,
484*48b72532SKonrad Dybcio 	.hid_width = 5,
485*48b72532SKonrad Dybcio 	.parent_map = gcc_xo_gpll0_map,
486*48b72532SKonrad Dybcio 	.freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
487*48b72532SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
488*48b72532SKonrad Dybcio 		.name = "blsp1_uart2_apps_clk_src",
489*48b72532SKonrad Dybcio 		.parent_data = gcc_xo_gpll0,
490*48b72532SKonrad Dybcio 		.num_parents = 2,
491*48b72532SKonrad Dybcio 		.ops = &clk_rcg2_ops,
492*48b72532SKonrad Dybcio 	},
493*48b72532SKonrad Dybcio };
494*48b72532SKonrad Dybcio 
495*48b72532SKonrad Dybcio static struct clk_rcg2 blsp1_uart3_apps_clk_src = {
496*48b72532SKonrad Dybcio 	.cmd_rcgr = 0x4044,
497*48b72532SKonrad Dybcio 	.mnd_width = 16,
498*48b72532SKonrad Dybcio 	.hid_width = 5,
499*48b72532SKonrad Dybcio 	.parent_map = gcc_xo_gpll0_map,
500*48b72532SKonrad Dybcio 	.freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
501*48b72532SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
502*48b72532SKonrad Dybcio 		.name = "blsp1_uart3_apps_clk_src",
503*48b72532SKonrad Dybcio 		.parent_data = gcc_xo_gpll0,
504*48b72532SKonrad Dybcio 		.num_parents = 2,
505*48b72532SKonrad Dybcio 		.ops = &clk_rcg2_ops,
506*48b72532SKonrad Dybcio 	},
507*48b72532SKonrad Dybcio };
508*48b72532SKonrad Dybcio 
509*48b72532SKonrad Dybcio static struct clk_rcg2 blsp1_uart4_apps_clk_src = {
510*48b72532SKonrad Dybcio 	.cmd_rcgr = 0x5044,
511*48b72532SKonrad Dybcio 	.mnd_width = 16,
512*48b72532SKonrad Dybcio 	.hid_width = 5,
513*48b72532SKonrad Dybcio 	.parent_map = gcc_xo_gpll0_map,
514*48b72532SKonrad Dybcio 	.freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
515*48b72532SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
516*48b72532SKonrad Dybcio 		.name = "blsp1_uart4_apps_clk_src",
517*48b72532SKonrad Dybcio 		.parent_data = gcc_xo_gpll0,
518*48b72532SKonrad Dybcio 		.num_parents = 2,
519*48b72532SKonrad Dybcio 		.ops = &clk_rcg2_ops,
520*48b72532SKonrad Dybcio 	},
521*48b72532SKonrad Dybcio };
522*48b72532SKonrad Dybcio 
523*48b72532SKonrad Dybcio static struct clk_rcg2 blsp1_uart5_apps_clk_src = {
524*48b72532SKonrad Dybcio 	.cmd_rcgr = 0x6044,
525*48b72532SKonrad Dybcio 	.mnd_width = 16,
526*48b72532SKonrad Dybcio 	.hid_width = 5,
527*48b72532SKonrad Dybcio 	.parent_map = gcc_xo_gpll0_map,
528*48b72532SKonrad Dybcio 	.freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
529*48b72532SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
530*48b72532SKonrad Dybcio 		.name = "blsp1_uart5_apps_clk_src",
531*48b72532SKonrad Dybcio 		.parent_data = gcc_xo_gpll0,
532*48b72532SKonrad Dybcio 		.num_parents = 2,
533*48b72532SKonrad Dybcio 		.ops = &clk_rcg2_ops,
534*48b72532SKonrad Dybcio 	},
535*48b72532SKonrad Dybcio };
536*48b72532SKonrad Dybcio 
537*48b72532SKonrad Dybcio static struct clk_rcg2 blsp1_uart6_apps_clk_src = {
538*48b72532SKonrad Dybcio 	.cmd_rcgr = 0x7044,
539*48b72532SKonrad Dybcio 	.mnd_width = 16,
540*48b72532SKonrad Dybcio 	.hid_width = 5,
541*48b72532SKonrad Dybcio 	.parent_map = gcc_xo_gpll0_map,
542*48b72532SKonrad Dybcio 	.freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
543*48b72532SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
544*48b72532SKonrad Dybcio 		.name = "blsp1_uart6_apps_clk_src",
545*48b72532SKonrad Dybcio 		.parent_data = gcc_xo_gpll0,
546*48b72532SKonrad Dybcio 		.num_parents = 2,
547*48b72532SKonrad Dybcio 		.ops = &clk_rcg2_ops,
548*48b72532SKonrad Dybcio 	},
549*48b72532SKonrad Dybcio };
550*48b72532SKonrad Dybcio 
551*48b72532SKonrad Dybcio static const struct freq_tbl ftbl_gcc_crypto_clk[] = {
552*48b72532SKonrad Dybcio 	F(50000000, P_GPLL0, 16, 0, 0),
553*48b72532SKonrad Dybcio 	F(80000000, P_GPLL0, 10, 0, 0),
554*48b72532SKonrad Dybcio 	F(100000000, P_GPLL0, 8, 0, 0),
555*48b72532SKonrad Dybcio 	F(160000000, P_GPLL0, 5, 0, 0),
556*48b72532SKonrad Dybcio 	{ }
557*48b72532SKonrad Dybcio };
558*48b72532SKonrad Dybcio 
559*48b72532SKonrad Dybcio static struct clk_rcg2 crypto_clk_src = {
560*48b72532SKonrad Dybcio 	.cmd_rcgr = 0x16004,
561*48b72532SKonrad Dybcio 	.hid_width = 5,
562*48b72532SKonrad Dybcio 	.parent_map = gcc_xo_gpll0_map,
563*48b72532SKonrad Dybcio 	.freq_tbl = ftbl_gcc_crypto_clk,
564*48b72532SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
565*48b72532SKonrad Dybcio 		.name = "crypto_clk_src",
566*48b72532SKonrad Dybcio 		.parent_data = gcc_xo_gpll0,
567*48b72532SKonrad Dybcio 		.num_parents = 2,
568*48b72532SKonrad Dybcio 		.ops = &clk_rcg2_ops,
569*48b72532SKonrad Dybcio 	},
570*48b72532SKonrad Dybcio };
571*48b72532SKonrad Dybcio 
572*48b72532SKonrad Dybcio static const struct freq_tbl ftbl_gcc_gp1_3_clk[] = {
573*48b72532SKonrad Dybcio 	F(19200000, P_XO, 1, 0,	0),
574*48b72532SKonrad Dybcio 	{ }
575*48b72532SKonrad Dybcio };
576*48b72532SKonrad Dybcio 
577*48b72532SKonrad Dybcio static struct clk_rcg2 gp1_clk_src = {
578*48b72532SKonrad Dybcio 	.cmd_rcgr = 0x8004,
579*48b72532SKonrad Dybcio 	.mnd_width = 8,
580*48b72532SKonrad Dybcio 	.hid_width = 5,
581*48b72532SKonrad Dybcio 	.parent_map = gcc_xo_gpll0_gpll1_sleep_map,
582*48b72532SKonrad Dybcio 	.freq_tbl = ftbl_gcc_gp1_3_clk,
583*48b72532SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
584*48b72532SKonrad Dybcio 		.name = "gp1_clk_src",
585*48b72532SKonrad Dybcio 		.parent_data = gcc_xo_gpll0_gpll1_sleep,
586*48b72532SKonrad Dybcio 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1_sleep),
587*48b72532SKonrad Dybcio 		.ops = &clk_rcg2_ops,
588*48b72532SKonrad Dybcio 	},
589*48b72532SKonrad Dybcio };
590*48b72532SKonrad Dybcio 
591*48b72532SKonrad Dybcio static struct clk_rcg2 gp2_clk_src = {
592*48b72532SKonrad Dybcio 	.cmd_rcgr = 0x09004,
593*48b72532SKonrad Dybcio 	.mnd_width = 8,
594*48b72532SKonrad Dybcio 	.hid_width = 5,
595*48b72532SKonrad Dybcio 	.parent_map = gcc_xo_gpll0_gpll1_sleep_map,
596*48b72532SKonrad Dybcio 	.freq_tbl = ftbl_gcc_gp1_3_clk,
597*48b72532SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
598*48b72532SKonrad Dybcio 		.name = "gp2_clk_src",
599*48b72532SKonrad Dybcio 		.parent_data = gcc_xo_gpll0_gpll1_sleep,
600*48b72532SKonrad Dybcio 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1_sleep),
601*48b72532SKonrad Dybcio 		.ops = &clk_rcg2_ops,
602*48b72532SKonrad Dybcio 	},
603*48b72532SKonrad Dybcio };
604*48b72532SKonrad Dybcio 
605*48b72532SKonrad Dybcio static struct clk_rcg2 gp3_clk_src = {
606*48b72532SKonrad Dybcio 	.cmd_rcgr = 0x0a004,
607*48b72532SKonrad Dybcio 	.mnd_width = 8,
608*48b72532SKonrad Dybcio 	.hid_width = 5,
609*48b72532SKonrad Dybcio 	.parent_map = gcc_xo_gpll0_gpll1_sleep_map,
610*48b72532SKonrad Dybcio 	.freq_tbl = ftbl_gcc_gp1_3_clk,
611*48b72532SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
612*48b72532SKonrad Dybcio 		.name = "gp3_clk_src",
613*48b72532SKonrad Dybcio 		.parent_data = gcc_xo_gpll0_gpll1_sleep,
614*48b72532SKonrad Dybcio 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1_sleep),
615*48b72532SKonrad Dybcio 		.ops = &clk_rcg2_ops,
616*48b72532SKonrad Dybcio 	},
617*48b72532SKonrad Dybcio };
618*48b72532SKonrad Dybcio 
619*48b72532SKonrad Dybcio static const struct freq_tbl ftbl_gcc_pdm2_clk[] = {
620*48b72532SKonrad Dybcio 	F(64000000, P_GPLL0, 12.5, 0, 0),
621*48b72532SKonrad Dybcio 	{ }
622*48b72532SKonrad Dybcio };
623*48b72532SKonrad Dybcio 
624*48b72532SKonrad Dybcio static struct clk_rcg2 pdm2_clk_src = {
625*48b72532SKonrad Dybcio 	.cmd_rcgr = 0x44010,
626*48b72532SKonrad Dybcio 	.hid_width = 5,
627*48b72532SKonrad Dybcio 	.parent_map = gcc_xo_gpll0_map,
628*48b72532SKonrad Dybcio 	.freq_tbl = ftbl_gcc_pdm2_clk,
629*48b72532SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
630*48b72532SKonrad Dybcio 		.name = "pdm2_clk_src",
631*48b72532SKonrad Dybcio 		.parent_data = gcc_xo_gpll0,
632*48b72532SKonrad Dybcio 		.num_parents = 2,
633*48b72532SKonrad Dybcio 		.ops = &clk_rcg2_ops,
634*48b72532SKonrad Dybcio 	},
635*48b72532SKonrad Dybcio };
636*48b72532SKonrad Dybcio 
637*48b72532SKonrad Dybcio static const struct freq_tbl ftbl_gcc_sdcc_apps_clk[] = {
638*48b72532SKonrad Dybcio 	F(144000, P_XO, 16, 3, 25),
639*48b72532SKonrad Dybcio 	F(400000, P_XO, 12, 1, 4),
640*48b72532SKonrad Dybcio 	F(20000000, P_GPLL0, 10, 1, 4),
641*48b72532SKonrad Dybcio 	F(25000000, P_GPLL0, 16, 1, 2),
642*48b72532SKonrad Dybcio 	F(50000000, P_GPLL0, 16, 0, 0),
643*48b72532SKonrad Dybcio 	F(100000000, P_GPLL0, 8, 0, 0),
644*48b72532SKonrad Dybcio 	F(177770000, P_GPLL0, 4.5, 0, 0),
645*48b72532SKonrad Dybcio 	F(200000000, P_GPLL0, 4, 0, 0),
646*48b72532SKonrad Dybcio 	{ }
647*48b72532SKonrad Dybcio };
648*48b72532SKonrad Dybcio 
649*48b72532SKonrad Dybcio static struct clk_rcg2 sdcc1_apps_clk_src = {
650*48b72532SKonrad Dybcio 	.cmd_rcgr = 0x42004,
651*48b72532SKonrad Dybcio 	.mnd_width = 8,
652*48b72532SKonrad Dybcio 	.hid_width = 5,
653*48b72532SKonrad Dybcio 	.parent_map = gcc_xo_gpll0_map,
654*48b72532SKonrad Dybcio 	.freq_tbl = ftbl_gcc_sdcc_apps_clk,
655*48b72532SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
656*48b72532SKonrad Dybcio 		.name = "sdcc1_apps_clk_src",
657*48b72532SKonrad Dybcio 		.parent_data = gcc_xo_gpll0,
658*48b72532SKonrad Dybcio 		.num_parents = 2,
659*48b72532SKonrad Dybcio 		.ops = &clk_rcg2_floor_ops,
660*48b72532SKonrad Dybcio 	},
661*48b72532SKonrad Dybcio };
662*48b72532SKonrad Dybcio 
663*48b72532SKonrad Dybcio static struct clk_rcg2 sdcc2_apps_clk_src = {
664*48b72532SKonrad Dybcio 	.cmd_rcgr = 0x43004,
665*48b72532SKonrad Dybcio 	.mnd_width = 8,
666*48b72532SKonrad Dybcio 	.hid_width = 5,
667*48b72532SKonrad Dybcio 	.parent_map = gcc_xo_gpll0_map,
668*48b72532SKonrad Dybcio 	.freq_tbl = ftbl_gcc_sdcc_apps_clk,
669*48b72532SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
670*48b72532SKonrad Dybcio 		.name = "sdcc2_apps_clk_src",
671*48b72532SKonrad Dybcio 		.parent_data = gcc_xo_gpll0,
672*48b72532SKonrad Dybcio 		.num_parents = 2,
673*48b72532SKonrad Dybcio 		.ops = &clk_rcg2_floor_ops,
674*48b72532SKonrad Dybcio 	},
675*48b72532SKonrad Dybcio };
676*48b72532SKonrad Dybcio 
677*48b72532SKonrad Dybcio static const struct freq_tbl ftbl_gcc_apss_tcu_clk[] = {
678*48b72532SKonrad Dybcio 	F(155000000, P_GPLL2, 6, 0, 0),
679*48b72532SKonrad Dybcio 	F(310000000, P_GPLL2, 3, 0, 0),
680*48b72532SKonrad Dybcio 	F(400000000, P_GPLL0, 2, 0, 0),
681*48b72532SKonrad Dybcio 	{ }
682*48b72532SKonrad Dybcio };
683*48b72532SKonrad Dybcio 
684*48b72532SKonrad Dybcio static struct clk_rcg2 apss_tcu_clk_src = {
685*48b72532SKonrad Dybcio 	.cmd_rcgr = 0x1207c,
686*48b72532SKonrad Dybcio 	.hid_width = 5,
687*48b72532SKonrad Dybcio 	.parent_map = gcc_xo_gpll0_gpll1_gpll2_map,
688*48b72532SKonrad Dybcio 	.freq_tbl = ftbl_gcc_apss_tcu_clk,
689*48b72532SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
690*48b72532SKonrad Dybcio 		.name = "apss_tcu_clk_src",
691*48b72532SKonrad Dybcio 		.parent_data = gcc_xo_gpll0_gpll1_gpll2,
692*48b72532SKonrad Dybcio 		.num_parents = 4,
693*48b72532SKonrad Dybcio 		.ops = &clk_rcg2_ops,
694*48b72532SKonrad Dybcio 	},
695*48b72532SKonrad Dybcio };
696*48b72532SKonrad Dybcio 
697*48b72532SKonrad Dybcio static const struct freq_tbl ftbl_gcc_usb_hs_system_clk[] = {
698*48b72532SKonrad Dybcio 	F(19200000, P_XO, 1, 0, 0),
699*48b72532SKonrad Dybcio 	F(57140000, P_GPLL0, 14, 0, 0),
700*48b72532SKonrad Dybcio 	F(69565000, P_GPLL0, 11.5, 0, 0),
701*48b72532SKonrad Dybcio 	F(133330000, P_GPLL0, 6, 0, 0),
702*48b72532SKonrad Dybcio 	F(177778000, P_GPLL0, 4.5, 0, 0),
703*48b72532SKonrad Dybcio 	{ }
704*48b72532SKonrad Dybcio };
705*48b72532SKonrad Dybcio 
706*48b72532SKonrad Dybcio static struct clk_rcg2 usb_hs_system_clk_src = {
707*48b72532SKonrad Dybcio 	.cmd_rcgr = 0x41010,
708*48b72532SKonrad Dybcio 	.hid_width = 5,
709*48b72532SKonrad Dybcio 	.parent_map = gcc_xo_gpll0_map,
710*48b72532SKonrad Dybcio 	.freq_tbl = ftbl_gcc_usb_hs_system_clk,
711*48b72532SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
712*48b72532SKonrad Dybcio 		.name = "usb_hs_system_clk_src",
713*48b72532SKonrad Dybcio 		.parent_data = gcc_xo_gpll0,
714*48b72532SKonrad Dybcio 		.num_parents = 2,
715*48b72532SKonrad Dybcio 		.ops = &clk_rcg2_ops,
716*48b72532SKonrad Dybcio 	},
717*48b72532SKonrad Dybcio };
718*48b72532SKonrad Dybcio 
719*48b72532SKonrad Dybcio static const struct freq_tbl ftbl_usb_hsic_clk_src[] = {
720*48b72532SKonrad Dybcio 	F(480000000, P_GPLL2, 1, 0, 0),
721*48b72532SKonrad Dybcio 	{ }
722*48b72532SKonrad Dybcio };
723*48b72532SKonrad Dybcio 
724*48b72532SKonrad Dybcio static struct clk_rcg2 usb_hsic_clk_src = {
725*48b72532SKonrad Dybcio 	.cmd_rcgr = 0x3d018,
726*48b72532SKonrad Dybcio 	.hid_width = 5,
727*48b72532SKonrad Dybcio 	.parent_map = gcc_xo_gpll0_gpll2_map,
728*48b72532SKonrad Dybcio 	.freq_tbl = ftbl_usb_hsic_clk_src,
729*48b72532SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
730*48b72532SKonrad Dybcio 		.name = "usb_hsic_clk_src",
731*48b72532SKonrad Dybcio 		.parent_data = gcc_xo_gpll0_gpll2,
732*48b72532SKonrad Dybcio 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll2),
733*48b72532SKonrad Dybcio 		.ops = &clk_rcg2_ops,
734*48b72532SKonrad Dybcio 	},
735*48b72532SKonrad Dybcio };
736*48b72532SKonrad Dybcio 
737*48b72532SKonrad Dybcio static const struct freq_tbl ftbl_usb_hsic_io_cal_clk_src[] = {
738*48b72532SKonrad Dybcio 	F(9600000, P_XO, 2, 0, 0),
739*48b72532SKonrad Dybcio 	{ }
740*48b72532SKonrad Dybcio };
741*48b72532SKonrad Dybcio 
742*48b72532SKonrad Dybcio static struct clk_rcg2 usb_hsic_io_cal_clk_src = {
743*48b72532SKonrad Dybcio 	.cmd_rcgr = 0x3d030,
744*48b72532SKonrad Dybcio 	.hid_width = 5,
745*48b72532SKonrad Dybcio 	.parent_map = gcc_xo_gpll0_map,
746*48b72532SKonrad Dybcio 	.freq_tbl = ftbl_usb_hsic_io_cal_clk_src,
747*48b72532SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
748*48b72532SKonrad Dybcio 		.name = "usb_hsic_io_cal_clk_src",
749*48b72532SKonrad Dybcio 		.parent_data = gcc_xo_gpll0,
750*48b72532SKonrad Dybcio 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
751*48b72532SKonrad Dybcio 		.ops = &clk_rcg2_ops,
752*48b72532SKonrad Dybcio 	},
753*48b72532SKonrad Dybcio };
754*48b72532SKonrad Dybcio 
755*48b72532SKonrad Dybcio static const struct freq_tbl ftbl_usb_hsic_system_clk_src[] = {
756*48b72532SKonrad Dybcio 	F(19200000, P_XO, 1, 0, 0),
757*48b72532SKonrad Dybcio 	F(57140000, P_GPLL0, 14, 0, 0),
758*48b72532SKonrad Dybcio 	F(133330000, P_GPLL0, 6, 0, 0),
759*48b72532SKonrad Dybcio 	F(177778000, P_GPLL0, 4.5, 0, 0),
760*48b72532SKonrad Dybcio 	{ }
761*48b72532SKonrad Dybcio };
762*48b72532SKonrad Dybcio 
763*48b72532SKonrad Dybcio static struct clk_rcg2 usb_hsic_system_clk_src = {
764*48b72532SKonrad Dybcio 	.cmd_rcgr = 0x3d000,
765*48b72532SKonrad Dybcio 	.hid_width = 5,
766*48b72532SKonrad Dybcio 	.parent_map = gcc_xo_gpll0_map,
767*48b72532SKonrad Dybcio 	.freq_tbl = ftbl_usb_hsic_system_clk_src,
768*48b72532SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
769*48b72532SKonrad Dybcio 		.name = "usb_hsic_system_clk_src",
770*48b72532SKonrad Dybcio 		.parent_data = gcc_xo_gpll0,
771*48b72532SKonrad Dybcio 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
772*48b72532SKonrad Dybcio 		.ops = &clk_rcg2_ops,
773*48b72532SKonrad Dybcio 	},
774*48b72532SKonrad Dybcio };
775*48b72532SKonrad Dybcio 
776*48b72532SKonrad Dybcio static struct clk_branch gcc_blsp1_ahb_clk = {
777*48b72532SKonrad Dybcio 	.halt_reg = 0x1008,
778*48b72532SKonrad Dybcio 	.halt_check = BRANCH_HALT_VOTED,
779*48b72532SKonrad Dybcio 	.clkr = {
780*48b72532SKonrad Dybcio 		.enable_reg = 0x45004,
781*48b72532SKonrad Dybcio 		.enable_mask = BIT(10),
782*48b72532SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
783*48b72532SKonrad Dybcio 			.name = "gcc_blsp1_ahb_clk",
784*48b72532SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &pcnoc_bfdcd_clk_src.clkr.hw },
785*48b72532SKonrad Dybcio 			.num_parents = 1,
786*48b72532SKonrad Dybcio 			.ops = &clk_branch2_ops,
787*48b72532SKonrad Dybcio 		},
788*48b72532SKonrad Dybcio 	},
789*48b72532SKonrad Dybcio };
790*48b72532SKonrad Dybcio 
791*48b72532SKonrad Dybcio static struct clk_branch gcc_blsp1_sleep_clk = {
792*48b72532SKonrad Dybcio 	.halt_reg = 0x1004,
793*48b72532SKonrad Dybcio 	.clkr = {
794*48b72532SKonrad Dybcio 		.enable_reg = 0x1004,
795*48b72532SKonrad Dybcio 		.enable_mask = BIT(0),
796*48b72532SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
797*48b72532SKonrad Dybcio 			.name = "gcc_blsp1_sleep_clk",
798*48b72532SKonrad Dybcio 			.parent_data = &(const struct clk_parent_data){
799*48b72532SKonrad Dybcio 				.fw_name = "sleep_clk",
800*48b72532SKonrad Dybcio 			},
801*48b72532SKonrad Dybcio 			.num_parents = 1,
802*48b72532SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
803*48b72532SKonrad Dybcio 			.ops = &clk_branch2_ops,
804*48b72532SKonrad Dybcio 		},
805*48b72532SKonrad Dybcio 	},
806*48b72532SKonrad Dybcio };
807*48b72532SKonrad Dybcio 
808*48b72532SKonrad Dybcio static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
809*48b72532SKonrad Dybcio 	.halt_reg = 0x2008,
810*48b72532SKonrad Dybcio 	.clkr = {
811*48b72532SKonrad Dybcio 		.enable_reg = 0x2008,
812*48b72532SKonrad Dybcio 		.enable_mask = BIT(0),
813*48b72532SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
814*48b72532SKonrad Dybcio 			.name = "gcc_blsp1_qup1_i2c_apps_clk",
815*48b72532SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &blsp1_qup1_i2c_apps_clk_src.clkr.hw },
816*48b72532SKonrad Dybcio 			.num_parents = 1,
817*48b72532SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
818*48b72532SKonrad Dybcio 			.ops = &clk_branch2_ops,
819*48b72532SKonrad Dybcio 		},
820*48b72532SKonrad Dybcio 	},
821*48b72532SKonrad Dybcio };
822*48b72532SKonrad Dybcio 
823*48b72532SKonrad Dybcio static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
824*48b72532SKonrad Dybcio 	.halt_reg = 0x2004,
825*48b72532SKonrad Dybcio 	.clkr = {
826*48b72532SKonrad Dybcio 		.enable_reg = 0x2004,
827*48b72532SKonrad Dybcio 		.enable_mask = BIT(0),
828*48b72532SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
829*48b72532SKonrad Dybcio 			.name = "gcc_blsp1_qup1_spi_apps_clk",
830*48b72532SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &blsp1_qup1_spi_apps_clk_src.clkr.hw },
831*48b72532SKonrad Dybcio 			.num_parents = 1,
832*48b72532SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
833*48b72532SKonrad Dybcio 			.ops = &clk_branch2_ops,
834*48b72532SKonrad Dybcio 		},
835*48b72532SKonrad Dybcio 	},
836*48b72532SKonrad Dybcio };
837*48b72532SKonrad Dybcio 
838*48b72532SKonrad Dybcio static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
839*48b72532SKonrad Dybcio 	.halt_reg = 0x3010,
840*48b72532SKonrad Dybcio 	.clkr = {
841*48b72532SKonrad Dybcio 		.enable_reg = 0x3010,
842*48b72532SKonrad Dybcio 		.enable_mask = BIT(0),
843*48b72532SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
844*48b72532SKonrad Dybcio 			.name = "gcc_blsp1_qup2_i2c_apps_clk",
845*48b72532SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &blsp1_qup2_i2c_apps_clk_src.clkr.hw },
846*48b72532SKonrad Dybcio 			.num_parents = 1,
847*48b72532SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
848*48b72532SKonrad Dybcio 			.ops = &clk_branch2_ops,
849*48b72532SKonrad Dybcio 		},
850*48b72532SKonrad Dybcio 	},
851*48b72532SKonrad Dybcio };
852*48b72532SKonrad Dybcio 
853*48b72532SKonrad Dybcio static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
854*48b72532SKonrad Dybcio 	.halt_reg = 0x300c,
855*48b72532SKonrad Dybcio 	.clkr = {
856*48b72532SKonrad Dybcio 		.enable_reg = 0x300c,
857*48b72532SKonrad Dybcio 		.enable_mask = BIT(0),
858*48b72532SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
859*48b72532SKonrad Dybcio 			.name = "gcc_blsp1_qup2_spi_apps_clk",
860*48b72532SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &blsp1_qup2_spi_apps_clk_src.clkr.hw },
861*48b72532SKonrad Dybcio 			.num_parents = 1,
862*48b72532SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
863*48b72532SKonrad Dybcio 			.ops = &clk_branch2_ops,
864*48b72532SKonrad Dybcio 		},
865*48b72532SKonrad Dybcio 	},
866*48b72532SKonrad Dybcio };
867*48b72532SKonrad Dybcio 
868*48b72532SKonrad Dybcio static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
869*48b72532SKonrad Dybcio 	.halt_reg = 0x4020,
870*48b72532SKonrad Dybcio 	.clkr = {
871*48b72532SKonrad Dybcio 		.enable_reg = 0x4020,
872*48b72532SKonrad Dybcio 		.enable_mask = BIT(0),
873*48b72532SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
874*48b72532SKonrad Dybcio 			.name = "gcc_blsp1_qup3_i2c_apps_clk",
875*48b72532SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &blsp1_qup3_i2c_apps_clk_src.clkr.hw },
876*48b72532SKonrad Dybcio 			.num_parents = 1,
877*48b72532SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
878*48b72532SKonrad Dybcio 			.ops = &clk_branch2_ops,
879*48b72532SKonrad Dybcio 		},
880*48b72532SKonrad Dybcio 	},
881*48b72532SKonrad Dybcio };
882*48b72532SKonrad Dybcio 
883*48b72532SKonrad Dybcio static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
884*48b72532SKonrad Dybcio 	.halt_reg = 0x401c,
885*48b72532SKonrad Dybcio 	.clkr = {
886*48b72532SKonrad Dybcio 		.enable_reg = 0x401c,
887*48b72532SKonrad Dybcio 		.enable_mask = BIT(0),
888*48b72532SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
889*48b72532SKonrad Dybcio 			.name = "gcc_blsp1_qup3_spi_apps_clk",
890*48b72532SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &blsp1_qup3_spi_apps_clk_src.clkr.hw },
891*48b72532SKonrad Dybcio 			.num_parents = 1,
892*48b72532SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
893*48b72532SKonrad Dybcio 			.ops = &clk_branch2_ops,
894*48b72532SKonrad Dybcio 		},
895*48b72532SKonrad Dybcio 	},
896*48b72532SKonrad Dybcio };
897*48b72532SKonrad Dybcio 
898*48b72532SKonrad Dybcio static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
899*48b72532SKonrad Dybcio 	.halt_reg = 0x5020,
900*48b72532SKonrad Dybcio 	.clkr = {
901*48b72532SKonrad Dybcio 		.enable_reg = 0x5020,
902*48b72532SKonrad Dybcio 		.enable_mask = BIT(0),
903*48b72532SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
904*48b72532SKonrad Dybcio 			.name = "gcc_blsp1_qup4_i2c_apps_clk",
905*48b72532SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &blsp1_qup4_i2c_apps_clk_src.clkr.hw },
906*48b72532SKonrad Dybcio 			.num_parents = 1,
907*48b72532SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
908*48b72532SKonrad Dybcio 			.ops = &clk_branch2_ops,
909*48b72532SKonrad Dybcio 		},
910*48b72532SKonrad Dybcio 	},
911*48b72532SKonrad Dybcio };
912*48b72532SKonrad Dybcio 
913*48b72532SKonrad Dybcio static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
914*48b72532SKonrad Dybcio 	.halt_reg = 0x501c,
915*48b72532SKonrad Dybcio 	.clkr = {
916*48b72532SKonrad Dybcio 		.enable_reg = 0x501c,
917*48b72532SKonrad Dybcio 		.enable_mask = BIT(0),
918*48b72532SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
919*48b72532SKonrad Dybcio 			.name = "gcc_blsp1_qup4_spi_apps_clk",
920*48b72532SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &blsp1_qup4_spi_apps_clk_src.clkr.hw },
921*48b72532SKonrad Dybcio 			.num_parents = 1,
922*48b72532SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
923*48b72532SKonrad Dybcio 			.ops = &clk_branch2_ops,
924*48b72532SKonrad Dybcio 		},
925*48b72532SKonrad Dybcio 	},
926*48b72532SKonrad Dybcio };
927*48b72532SKonrad Dybcio 
928*48b72532SKonrad Dybcio static struct clk_branch gcc_blsp1_qup5_i2c_apps_clk = {
929*48b72532SKonrad Dybcio 	.halt_reg = 0x6020,
930*48b72532SKonrad Dybcio 	.clkr = {
931*48b72532SKonrad Dybcio 		.enable_reg = 0x6020,
932*48b72532SKonrad Dybcio 		.enable_mask = BIT(0),
933*48b72532SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
934*48b72532SKonrad Dybcio 			.name = "gcc_blsp1_qup5_i2c_apps_clk",
935*48b72532SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &blsp1_qup5_i2c_apps_clk_src.clkr.hw },
936*48b72532SKonrad Dybcio 			.num_parents = 1,
937*48b72532SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
938*48b72532SKonrad Dybcio 			.ops = &clk_branch2_ops,
939*48b72532SKonrad Dybcio 		},
940*48b72532SKonrad Dybcio 	},
941*48b72532SKonrad Dybcio };
942*48b72532SKonrad Dybcio 
943*48b72532SKonrad Dybcio static struct clk_branch gcc_blsp1_qup5_spi_apps_clk = {
944*48b72532SKonrad Dybcio 	.halt_reg = 0x601c,
945*48b72532SKonrad Dybcio 	.clkr = {
946*48b72532SKonrad Dybcio 		.enable_reg = 0x601c,
947*48b72532SKonrad Dybcio 		.enable_mask = BIT(0),
948*48b72532SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
949*48b72532SKonrad Dybcio 			.name = "gcc_blsp1_qup5_spi_apps_clk",
950*48b72532SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &blsp1_qup5_spi_apps_clk_src.clkr.hw },
951*48b72532SKonrad Dybcio 			.num_parents = 1,
952*48b72532SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
953*48b72532SKonrad Dybcio 			.ops = &clk_branch2_ops,
954*48b72532SKonrad Dybcio 		},
955*48b72532SKonrad Dybcio 	},
956*48b72532SKonrad Dybcio };
957*48b72532SKonrad Dybcio 
958*48b72532SKonrad Dybcio static struct clk_branch gcc_blsp1_qup6_i2c_apps_clk = {
959*48b72532SKonrad Dybcio 	.halt_reg = 0x7020,
960*48b72532SKonrad Dybcio 	.clkr = {
961*48b72532SKonrad Dybcio 		.enable_reg = 0x7020,
962*48b72532SKonrad Dybcio 		.enable_mask = BIT(0),
963*48b72532SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
964*48b72532SKonrad Dybcio 			.name = "gcc_blsp1_qup6_i2c_apps_clk",
965*48b72532SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &blsp1_qup6_i2c_apps_clk_src.clkr.hw },
966*48b72532SKonrad Dybcio 			.num_parents = 1,
967*48b72532SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
968*48b72532SKonrad Dybcio 			.ops = &clk_branch2_ops,
969*48b72532SKonrad Dybcio 		},
970*48b72532SKonrad Dybcio 	},
971*48b72532SKonrad Dybcio };
972*48b72532SKonrad Dybcio 
973*48b72532SKonrad Dybcio static struct clk_branch gcc_blsp1_qup6_spi_apps_clk = {
974*48b72532SKonrad Dybcio 	.halt_reg = 0x701c,
975*48b72532SKonrad Dybcio 	.clkr = {
976*48b72532SKonrad Dybcio 		.enable_reg = 0x701c,
977*48b72532SKonrad Dybcio 		.enable_mask = BIT(0),
978*48b72532SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
979*48b72532SKonrad Dybcio 			.name = "gcc_blsp1_qup6_spi_apps_clk",
980*48b72532SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &blsp1_qup6_spi_apps_clk_src.clkr.hw },
981*48b72532SKonrad Dybcio 			.num_parents = 1,
982*48b72532SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
983*48b72532SKonrad Dybcio 			.ops = &clk_branch2_ops,
984*48b72532SKonrad Dybcio 		},
985*48b72532SKonrad Dybcio 	},
986*48b72532SKonrad Dybcio };
987*48b72532SKonrad Dybcio 
988*48b72532SKonrad Dybcio static struct clk_branch gcc_blsp1_uart1_apps_clk = {
989*48b72532SKonrad Dybcio 	.halt_reg = 0x203c,
990*48b72532SKonrad Dybcio 	.clkr = {
991*48b72532SKonrad Dybcio 		.enable_reg = 0x203c,
992*48b72532SKonrad Dybcio 		.enable_mask = BIT(0),
993*48b72532SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
994*48b72532SKonrad Dybcio 			.name = "gcc_blsp1_uart1_apps_clk",
995*48b72532SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &blsp1_uart1_apps_clk_src.clkr.hw },
996*48b72532SKonrad Dybcio 			.num_parents = 1,
997*48b72532SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
998*48b72532SKonrad Dybcio 			.ops = &clk_branch2_ops,
999*48b72532SKonrad Dybcio 		},
1000*48b72532SKonrad Dybcio 	},
1001*48b72532SKonrad Dybcio };
1002*48b72532SKonrad Dybcio 
1003*48b72532SKonrad Dybcio static struct clk_branch gcc_blsp1_uart2_apps_clk = {
1004*48b72532SKonrad Dybcio 	.halt_reg = 0x302c,
1005*48b72532SKonrad Dybcio 	.clkr = {
1006*48b72532SKonrad Dybcio 		.enable_reg = 0x302c,
1007*48b72532SKonrad Dybcio 		.enable_mask = BIT(0),
1008*48b72532SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1009*48b72532SKonrad Dybcio 			.name = "gcc_blsp1_uart2_apps_clk",
1010*48b72532SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &blsp1_uart2_apps_clk_src.clkr.hw },
1011*48b72532SKonrad Dybcio 			.num_parents = 1,
1012*48b72532SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1013*48b72532SKonrad Dybcio 			.ops = &clk_branch2_ops,
1014*48b72532SKonrad Dybcio 		},
1015*48b72532SKonrad Dybcio 	},
1016*48b72532SKonrad Dybcio };
1017*48b72532SKonrad Dybcio 
1018*48b72532SKonrad Dybcio static struct clk_branch gcc_blsp1_uart3_apps_clk = {
1019*48b72532SKonrad Dybcio 	.halt_reg = 0x403c,
1020*48b72532SKonrad Dybcio 	.clkr = {
1021*48b72532SKonrad Dybcio 		.enable_reg = 0x403c,
1022*48b72532SKonrad Dybcio 		.enable_mask = BIT(0),
1023*48b72532SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1024*48b72532SKonrad Dybcio 			.name = "gcc_blsp1_uart3_apps_clk",
1025*48b72532SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &blsp1_uart3_apps_clk_src.clkr.hw },
1026*48b72532SKonrad Dybcio 			.num_parents = 1,
1027*48b72532SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1028*48b72532SKonrad Dybcio 			.ops = &clk_branch2_ops,
1029*48b72532SKonrad Dybcio 		},
1030*48b72532SKonrad Dybcio 	},
1031*48b72532SKonrad Dybcio };
1032*48b72532SKonrad Dybcio 
1033*48b72532SKonrad Dybcio static struct clk_branch gcc_blsp1_uart4_apps_clk = {
1034*48b72532SKonrad Dybcio 	.halt_reg = 0x503c,
1035*48b72532SKonrad Dybcio 	.clkr = {
1036*48b72532SKonrad Dybcio 		.enable_reg = 0x503c,
1037*48b72532SKonrad Dybcio 		.enable_mask = BIT(0),
1038*48b72532SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1039*48b72532SKonrad Dybcio 			.name = "gcc_blsp1_uart4_apps_clk",
1040*48b72532SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &blsp1_uart4_apps_clk_src.clkr.hw },
1041*48b72532SKonrad Dybcio 			.num_parents = 1,
1042*48b72532SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1043*48b72532SKonrad Dybcio 			.ops = &clk_branch2_ops,
1044*48b72532SKonrad Dybcio 		},
1045*48b72532SKonrad Dybcio 	},
1046*48b72532SKonrad Dybcio };
1047*48b72532SKonrad Dybcio 
1048*48b72532SKonrad Dybcio static struct clk_branch gcc_blsp1_uart5_apps_clk = {
1049*48b72532SKonrad Dybcio 	.halt_reg = 0x603c,
1050*48b72532SKonrad Dybcio 	.clkr = {
1051*48b72532SKonrad Dybcio 		.enable_reg = 0x603c,
1052*48b72532SKonrad Dybcio 		.enable_mask = BIT(0),
1053*48b72532SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1054*48b72532SKonrad Dybcio 			.name = "gcc_blsp1_uart5_apps_clk",
1055*48b72532SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &blsp1_uart5_apps_clk_src.clkr.hw },
1056*48b72532SKonrad Dybcio 			.num_parents = 1,
1057*48b72532SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1058*48b72532SKonrad Dybcio 			.ops = &clk_branch2_ops,
1059*48b72532SKonrad Dybcio 		},
1060*48b72532SKonrad Dybcio 	},
1061*48b72532SKonrad Dybcio };
1062*48b72532SKonrad Dybcio 
1063*48b72532SKonrad Dybcio static struct clk_branch gcc_blsp1_uart6_apps_clk = {
1064*48b72532SKonrad Dybcio 	.halt_reg = 0x703c,
1065*48b72532SKonrad Dybcio 	.clkr = {
1066*48b72532SKonrad Dybcio 		.enable_reg = 0x703c,
1067*48b72532SKonrad Dybcio 		.enable_mask = BIT(0),
1068*48b72532SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1069*48b72532SKonrad Dybcio 			.name = "gcc_blsp1_uart6_apps_clk",
1070*48b72532SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &blsp1_uart6_apps_clk_src.clkr.hw },
1071*48b72532SKonrad Dybcio 			.num_parents = 1,
1072*48b72532SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1073*48b72532SKonrad Dybcio 			.ops = &clk_branch2_ops,
1074*48b72532SKonrad Dybcio 		},
1075*48b72532SKonrad Dybcio 	},
1076*48b72532SKonrad Dybcio };
1077*48b72532SKonrad Dybcio 
1078*48b72532SKonrad Dybcio static struct clk_branch gcc_boot_rom_ahb_clk = {
1079*48b72532SKonrad Dybcio 	.halt_reg = 0x1300c,
1080*48b72532SKonrad Dybcio 	.halt_check = BRANCH_HALT_VOTED,
1081*48b72532SKonrad Dybcio 	.clkr = {
1082*48b72532SKonrad Dybcio 		.enable_reg = 0x45004,
1083*48b72532SKonrad Dybcio 		.enable_mask = BIT(7),
1084*48b72532SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1085*48b72532SKonrad Dybcio 			.name = "gcc_boot_rom_ahb_clk",
1086*48b72532SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &pcnoc_bfdcd_clk_src.clkr.hw },
1087*48b72532SKonrad Dybcio 			.num_parents = 1,
1088*48b72532SKonrad Dybcio 			.ops = &clk_branch2_ops,
1089*48b72532SKonrad Dybcio 		},
1090*48b72532SKonrad Dybcio 	},
1091*48b72532SKonrad Dybcio };
1092*48b72532SKonrad Dybcio 
1093*48b72532SKonrad Dybcio static struct clk_branch gcc_crypto_ahb_clk = {
1094*48b72532SKonrad Dybcio 	.halt_reg = 0x16024,
1095*48b72532SKonrad Dybcio 	.halt_check = BRANCH_HALT_VOTED,
1096*48b72532SKonrad Dybcio 	.clkr = {
1097*48b72532SKonrad Dybcio 		.enable_reg = 0x45004,
1098*48b72532SKonrad Dybcio 		.enable_mask = BIT(0),
1099*48b72532SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1100*48b72532SKonrad Dybcio 			.name = "gcc_crypto_ahb_clk",
1101*48b72532SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &pcnoc_bfdcd_clk_src.clkr.hw },
1102*48b72532SKonrad Dybcio 			.num_parents = 1,
1103*48b72532SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1104*48b72532SKonrad Dybcio 			.ops = &clk_branch2_ops,
1105*48b72532SKonrad Dybcio 		},
1106*48b72532SKonrad Dybcio 	},
1107*48b72532SKonrad Dybcio };
1108*48b72532SKonrad Dybcio 
1109*48b72532SKonrad Dybcio static struct clk_branch gcc_crypto_axi_clk = {
1110*48b72532SKonrad Dybcio 	.halt_reg = 0x16020,
1111*48b72532SKonrad Dybcio 	.halt_check = BRANCH_HALT_VOTED,
1112*48b72532SKonrad Dybcio 	.clkr = {
1113*48b72532SKonrad Dybcio 		.enable_reg = 0x45004,
1114*48b72532SKonrad Dybcio 		.enable_mask = BIT(1),
1115*48b72532SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1116*48b72532SKonrad Dybcio 			.name = "gcc_crypto_axi_clk",
1117*48b72532SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &pcnoc_bfdcd_clk_src.clkr.hw },
1118*48b72532SKonrad Dybcio 			.num_parents = 1,
1119*48b72532SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1120*48b72532SKonrad Dybcio 			.ops = &clk_branch2_ops,
1121*48b72532SKonrad Dybcio 		},
1122*48b72532SKonrad Dybcio 	},
1123*48b72532SKonrad Dybcio };
1124*48b72532SKonrad Dybcio 
1125*48b72532SKonrad Dybcio static struct clk_branch gcc_crypto_clk = {
1126*48b72532SKonrad Dybcio 	.halt_reg = 0x1601c,
1127*48b72532SKonrad Dybcio 	.halt_check = BRANCH_HALT_VOTED,
1128*48b72532SKonrad Dybcio 	.clkr = {
1129*48b72532SKonrad Dybcio 		.enable_reg = 0x45004,
1130*48b72532SKonrad Dybcio 		.enable_mask = BIT(2),
1131*48b72532SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1132*48b72532SKonrad Dybcio 			.name = "gcc_crypto_clk",
1133*48b72532SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &crypto_clk_src.clkr.hw },
1134*48b72532SKonrad Dybcio 			.num_parents = 1,
1135*48b72532SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1136*48b72532SKonrad Dybcio 			.ops = &clk_branch2_ops,
1137*48b72532SKonrad Dybcio 		},
1138*48b72532SKonrad Dybcio 	},
1139*48b72532SKonrad Dybcio };
1140*48b72532SKonrad Dybcio 
1141*48b72532SKonrad Dybcio static struct clk_branch gcc_gp1_clk = {
1142*48b72532SKonrad Dybcio 	.halt_reg = 0x08000,
1143*48b72532SKonrad Dybcio 	.clkr = {
1144*48b72532SKonrad Dybcio 		.enable_reg = 0x08000,
1145*48b72532SKonrad Dybcio 		.enable_mask = BIT(0),
1146*48b72532SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1147*48b72532SKonrad Dybcio 			.name = "gcc_gp1_clk",
1148*48b72532SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &gp1_clk_src.clkr.hw },
1149*48b72532SKonrad Dybcio 			.num_parents = 1,
1150*48b72532SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1151*48b72532SKonrad Dybcio 			.ops = &clk_branch2_ops,
1152*48b72532SKonrad Dybcio 		},
1153*48b72532SKonrad Dybcio 	},
1154*48b72532SKonrad Dybcio };
1155*48b72532SKonrad Dybcio 
1156*48b72532SKonrad Dybcio static struct clk_branch gcc_gp2_clk = {
1157*48b72532SKonrad Dybcio 	.halt_reg = 0x09000,
1158*48b72532SKonrad Dybcio 	.clkr = {
1159*48b72532SKonrad Dybcio 		.enable_reg = 0x09000,
1160*48b72532SKonrad Dybcio 		.enable_mask = BIT(0),
1161*48b72532SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1162*48b72532SKonrad Dybcio 			.name = "gcc_gp2_clk",
1163*48b72532SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &gp2_clk_src.clkr.hw },
1164*48b72532SKonrad Dybcio 			.num_parents = 1,
1165*48b72532SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1166*48b72532SKonrad Dybcio 			.ops = &clk_branch2_ops,
1167*48b72532SKonrad Dybcio 		},
1168*48b72532SKonrad Dybcio 	},
1169*48b72532SKonrad Dybcio };
1170*48b72532SKonrad Dybcio 
1171*48b72532SKonrad Dybcio static struct clk_branch gcc_gp3_clk = {
1172*48b72532SKonrad Dybcio 	.halt_reg = 0x0a000,
1173*48b72532SKonrad Dybcio 	.clkr = {
1174*48b72532SKonrad Dybcio 		.enable_reg = 0x0a000,
1175*48b72532SKonrad Dybcio 		.enable_mask = BIT(0),
1176*48b72532SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1177*48b72532SKonrad Dybcio 			.name = "gcc_gp3_clk",
1178*48b72532SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &gp3_clk_src.clkr.hw },
1179*48b72532SKonrad Dybcio 			.num_parents = 1,
1180*48b72532SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1181*48b72532SKonrad Dybcio 			.ops = &clk_branch2_ops,
1182*48b72532SKonrad Dybcio 		},
1183*48b72532SKonrad Dybcio 	},
1184*48b72532SKonrad Dybcio };
1185*48b72532SKonrad Dybcio 
1186*48b72532SKonrad Dybcio static struct clk_branch gcc_mss_cfg_ahb_clk = {
1187*48b72532SKonrad Dybcio 	.halt_reg = 0x49000,
1188*48b72532SKonrad Dybcio 	.clkr = {
1189*48b72532SKonrad Dybcio 		.enable_reg = 0x49000,
1190*48b72532SKonrad Dybcio 		.enable_mask = BIT(0),
1191*48b72532SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1192*48b72532SKonrad Dybcio 			.name = "gcc_mss_cfg_ahb_clk",
1193*48b72532SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &pcnoc_bfdcd_clk_src.clkr.hw },
1194*48b72532SKonrad Dybcio 			.num_parents = 1,
1195*48b72532SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1196*48b72532SKonrad Dybcio 			.ops = &clk_branch2_ops,
1197*48b72532SKonrad Dybcio 		},
1198*48b72532SKonrad Dybcio 	},
1199*48b72532SKonrad Dybcio };
1200*48b72532SKonrad Dybcio 
1201*48b72532SKonrad Dybcio static struct clk_branch gcc_pdm2_clk = {
1202*48b72532SKonrad Dybcio 	.halt_reg = 0x4400c,
1203*48b72532SKonrad Dybcio 	.clkr = {
1204*48b72532SKonrad Dybcio 		.enable_reg = 0x4400c,
1205*48b72532SKonrad Dybcio 		.enable_mask = BIT(0),
1206*48b72532SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1207*48b72532SKonrad Dybcio 			.name = "gcc_pdm2_clk",
1208*48b72532SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &pdm2_clk_src.clkr.hw },
1209*48b72532SKonrad Dybcio 			.num_parents = 1,
1210*48b72532SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1211*48b72532SKonrad Dybcio 			.ops = &clk_branch2_ops,
1212*48b72532SKonrad Dybcio 		},
1213*48b72532SKonrad Dybcio 	},
1214*48b72532SKonrad Dybcio };
1215*48b72532SKonrad Dybcio 
1216*48b72532SKonrad Dybcio static struct clk_branch gcc_pdm_ahb_clk = {
1217*48b72532SKonrad Dybcio 	.halt_reg = 0x44004,
1218*48b72532SKonrad Dybcio 	.clkr = {
1219*48b72532SKonrad Dybcio 		.enable_reg = 0x44004,
1220*48b72532SKonrad Dybcio 		.enable_mask = BIT(0),
1221*48b72532SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1222*48b72532SKonrad Dybcio 			.name = "gcc_pdm_ahb_clk",
1223*48b72532SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &pcnoc_bfdcd_clk_src.clkr.hw },
1224*48b72532SKonrad Dybcio 			.num_parents = 1,
1225*48b72532SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1226*48b72532SKonrad Dybcio 			.ops = &clk_branch2_ops,
1227*48b72532SKonrad Dybcio 		},
1228*48b72532SKonrad Dybcio 	},
1229*48b72532SKonrad Dybcio };
1230*48b72532SKonrad Dybcio 
1231*48b72532SKonrad Dybcio static struct clk_branch gcc_prng_ahb_clk = {
1232*48b72532SKonrad Dybcio 	.halt_reg = 0x13004,
1233*48b72532SKonrad Dybcio 	.halt_check = BRANCH_HALT_VOTED,
1234*48b72532SKonrad Dybcio 	.clkr = {
1235*48b72532SKonrad Dybcio 		.enable_reg = 0x45004,
1236*48b72532SKonrad Dybcio 		.enable_mask = BIT(8),
1237*48b72532SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1238*48b72532SKonrad Dybcio 			.name = "gcc_prng_ahb_clk",
1239*48b72532SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &pcnoc_bfdcd_clk_src.clkr.hw },
1240*48b72532SKonrad Dybcio 			.num_parents = 1,
1241*48b72532SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1242*48b72532SKonrad Dybcio 			.ops = &clk_branch2_ops,
1243*48b72532SKonrad Dybcio 		},
1244*48b72532SKonrad Dybcio 	},
1245*48b72532SKonrad Dybcio };
1246*48b72532SKonrad Dybcio 
1247*48b72532SKonrad Dybcio static struct clk_branch gcc_sdcc1_ahb_clk = {
1248*48b72532SKonrad Dybcio 	.halt_reg = 0x4201c,
1249*48b72532SKonrad Dybcio 	.clkr = {
1250*48b72532SKonrad Dybcio 		.enable_reg = 0x4201c,
1251*48b72532SKonrad Dybcio 		.enable_mask = BIT(0),
1252*48b72532SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1253*48b72532SKonrad Dybcio 			.name = "gcc_sdcc1_ahb_clk",
1254*48b72532SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &pcnoc_bfdcd_clk_src.clkr.hw },
1255*48b72532SKonrad Dybcio 			.num_parents = 1,
1256*48b72532SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1257*48b72532SKonrad Dybcio 			.ops = &clk_branch2_ops,
1258*48b72532SKonrad Dybcio 		},
1259*48b72532SKonrad Dybcio 	},
1260*48b72532SKonrad Dybcio };
1261*48b72532SKonrad Dybcio 
1262*48b72532SKonrad Dybcio static struct clk_branch gcc_sdcc1_apps_clk = {
1263*48b72532SKonrad Dybcio 	.halt_reg = 0x42018,
1264*48b72532SKonrad Dybcio 	.clkr = {
1265*48b72532SKonrad Dybcio 		.enable_reg = 0x42018,
1266*48b72532SKonrad Dybcio 		.enable_mask = BIT(0),
1267*48b72532SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1268*48b72532SKonrad Dybcio 			.name = "gcc_sdcc1_apps_clk",
1269*48b72532SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &sdcc1_apps_clk_src.clkr.hw },
1270*48b72532SKonrad Dybcio 			.num_parents = 1,
1271*48b72532SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1272*48b72532SKonrad Dybcio 			.ops = &clk_branch2_ops,
1273*48b72532SKonrad Dybcio 		},
1274*48b72532SKonrad Dybcio 	},
1275*48b72532SKonrad Dybcio };
1276*48b72532SKonrad Dybcio 
1277*48b72532SKonrad Dybcio static struct clk_branch gcc_sdcc2_ahb_clk = {
1278*48b72532SKonrad Dybcio 	.halt_reg = 0x4301c,
1279*48b72532SKonrad Dybcio 	.clkr = {
1280*48b72532SKonrad Dybcio 		.enable_reg = 0x4301c,
1281*48b72532SKonrad Dybcio 		.enable_mask = BIT(0),
1282*48b72532SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1283*48b72532SKonrad Dybcio 			.name = "gcc_sdcc2_ahb_clk",
1284*48b72532SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &pcnoc_bfdcd_clk_src.clkr.hw },
1285*48b72532SKonrad Dybcio 			.num_parents = 1,
1286*48b72532SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1287*48b72532SKonrad Dybcio 			.ops = &clk_branch2_ops,
1288*48b72532SKonrad Dybcio 		},
1289*48b72532SKonrad Dybcio 	},
1290*48b72532SKonrad Dybcio };
1291*48b72532SKonrad Dybcio 
1292*48b72532SKonrad Dybcio static struct clk_branch gcc_sdcc2_apps_clk = {
1293*48b72532SKonrad Dybcio 	.halt_reg = 0x43018,
1294*48b72532SKonrad Dybcio 	.clkr = {
1295*48b72532SKonrad Dybcio 		.enable_reg = 0x43018,
1296*48b72532SKonrad Dybcio 		.enable_mask = BIT(0),
1297*48b72532SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1298*48b72532SKonrad Dybcio 			.name = "gcc_sdcc2_apps_clk",
1299*48b72532SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &sdcc2_apps_clk_src.clkr.hw },
1300*48b72532SKonrad Dybcio 			.num_parents = 1,
1301*48b72532SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1302*48b72532SKonrad Dybcio 			.ops = &clk_branch2_ops,
1303*48b72532SKonrad Dybcio 		},
1304*48b72532SKonrad Dybcio 	},
1305*48b72532SKonrad Dybcio };
1306*48b72532SKonrad Dybcio 
1307*48b72532SKonrad Dybcio static struct clk_rcg2 bimc_ddr_clk_src = {
1308*48b72532SKonrad Dybcio 	.cmd_rcgr = 0x32004,
1309*48b72532SKonrad Dybcio 	.hid_width = 5,
1310*48b72532SKonrad Dybcio 	.parent_map = gcc_xo_gpll0_bimc_map,
1311*48b72532SKonrad Dybcio 	.clkr.hw.init = &(struct clk_init_data){
1312*48b72532SKonrad Dybcio 		.name = "bimc_ddr_clk_src",
1313*48b72532SKonrad Dybcio 		.parent_data = gcc_xo_gpll0_bimc,
1314*48b72532SKonrad Dybcio 		.num_parents = 3,
1315*48b72532SKonrad Dybcio 		.ops = &clk_rcg2_ops,
1316*48b72532SKonrad Dybcio 		.flags = CLK_GET_RATE_NOCACHE,
1317*48b72532SKonrad Dybcio 	},
1318*48b72532SKonrad Dybcio };
1319*48b72532SKonrad Dybcio 
1320*48b72532SKonrad Dybcio static struct clk_branch gcc_mss_q6_bimc_axi_clk = {
1321*48b72532SKonrad Dybcio 	.halt_reg = 0x49004,
1322*48b72532SKonrad Dybcio 	.clkr = {
1323*48b72532SKonrad Dybcio 		.enable_reg = 0x49004,
1324*48b72532SKonrad Dybcio 		.enable_mask = BIT(0),
1325*48b72532SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1326*48b72532SKonrad Dybcio 			.name = "gcc_mss_q6_bimc_axi_clk",
1327*48b72532SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &bimc_ddr_clk_src.clkr.hw },
1328*48b72532SKonrad Dybcio 			.num_parents = 1,
1329*48b72532SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1330*48b72532SKonrad Dybcio 			.ops = &clk_branch2_ops,
1331*48b72532SKonrad Dybcio 		},
1332*48b72532SKonrad Dybcio 	},
1333*48b72532SKonrad Dybcio };
1334*48b72532SKonrad Dybcio 
1335*48b72532SKonrad Dybcio static struct clk_branch gcc_apss_tcu_clk = {
1336*48b72532SKonrad Dybcio 	.halt_reg = 0x12018,
1337*48b72532SKonrad Dybcio 	.halt_check = BRANCH_HALT_VOTED,
1338*48b72532SKonrad Dybcio 	.clkr = {
1339*48b72532SKonrad Dybcio 		.enable_reg = 0x4500c,
1340*48b72532SKonrad Dybcio 		.enable_mask = BIT(1),
1341*48b72532SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1342*48b72532SKonrad Dybcio 			.name = "gcc_apss_tcu_clk",
1343*48b72532SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &bimc_ddr_clk_src.clkr.hw },
1344*48b72532SKonrad Dybcio 			.num_parents = 1,
1345*48b72532SKonrad Dybcio 			.ops = &clk_branch2_ops,
1346*48b72532SKonrad Dybcio 		},
1347*48b72532SKonrad Dybcio 	},
1348*48b72532SKonrad Dybcio };
1349*48b72532SKonrad Dybcio 
1350*48b72532SKonrad Dybcio static struct clk_branch gcc_smmu_cfg_clk = {
1351*48b72532SKonrad Dybcio 	.halt_reg = 0x12038,
1352*48b72532SKonrad Dybcio 	.halt_check = BRANCH_HALT_VOTED,
1353*48b72532SKonrad Dybcio 	.clkr = {
1354*48b72532SKonrad Dybcio 		.enable_reg = 0x4500c,
1355*48b72532SKonrad Dybcio 		.enable_mask = BIT(12),
1356*48b72532SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1357*48b72532SKonrad Dybcio 			.name = "gcc_smmu_cfg_clk",
1358*48b72532SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &pcnoc_bfdcd_clk_src.clkr.hw },
1359*48b72532SKonrad Dybcio 			.num_parents = 1,
1360*48b72532SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1361*48b72532SKonrad Dybcio 			.ops = &clk_branch2_ops,
1362*48b72532SKonrad Dybcio 		},
1363*48b72532SKonrad Dybcio 	},
1364*48b72532SKonrad Dybcio };
1365*48b72532SKonrad Dybcio 
1366*48b72532SKonrad Dybcio static struct clk_branch gcc_qdss_dap_clk = {
1367*48b72532SKonrad Dybcio 	.halt_reg = 0x29084,
1368*48b72532SKonrad Dybcio 	.halt_check = BRANCH_HALT_VOTED,
1369*48b72532SKonrad Dybcio 	.clkr = {
1370*48b72532SKonrad Dybcio 		.enable_reg = 0x45004,
1371*48b72532SKonrad Dybcio 		.enable_mask = BIT(19),
1372*48b72532SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1373*48b72532SKonrad Dybcio 			.name = "gcc_qdss_dap_clk",
1374*48b72532SKonrad Dybcio 			.parent_data = &(const struct clk_parent_data){
1375*48b72532SKonrad Dybcio 				.fw_name = "xo",
1376*48b72532SKonrad Dybcio 			},
1377*48b72532SKonrad Dybcio 			.num_parents = 1,
1378*48b72532SKonrad Dybcio 			.ops = &clk_branch2_ops,
1379*48b72532SKonrad Dybcio 		},
1380*48b72532SKonrad Dybcio 	},
1381*48b72532SKonrad Dybcio };
1382*48b72532SKonrad Dybcio 
1383*48b72532SKonrad Dybcio static struct clk_branch gcc_usb2a_phy_sleep_clk = {
1384*48b72532SKonrad Dybcio 	.halt_reg = 0x4102c,
1385*48b72532SKonrad Dybcio 	.clkr = {
1386*48b72532SKonrad Dybcio 		.enable_reg = 0x4102c,
1387*48b72532SKonrad Dybcio 		.enable_mask = BIT(0),
1388*48b72532SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1389*48b72532SKonrad Dybcio 			.name = "gcc_usb2a_phy_sleep_clk",
1390*48b72532SKonrad Dybcio 			.parent_data = &(const struct clk_parent_data){
1391*48b72532SKonrad Dybcio 				.fw_name = "sleep_clk",
1392*48b72532SKonrad Dybcio 			},
1393*48b72532SKonrad Dybcio 			.num_parents = 1,
1394*48b72532SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1395*48b72532SKonrad Dybcio 			.ops = &clk_branch2_ops,
1396*48b72532SKonrad Dybcio 		},
1397*48b72532SKonrad Dybcio 	},
1398*48b72532SKonrad Dybcio };
1399*48b72532SKonrad Dybcio 
1400*48b72532SKonrad Dybcio static struct clk_branch gcc_usb_hs_phy_cfg_ahb_clk = {
1401*48b72532SKonrad Dybcio 	.halt_reg = 0x41030,
1402*48b72532SKonrad Dybcio 	.halt_check = BRANCH_HALT,
1403*48b72532SKonrad Dybcio 	.clkr = {
1404*48b72532SKonrad Dybcio 		.enable_reg = 0x41030,
1405*48b72532SKonrad Dybcio 		.enable_mask = BIT(0),
1406*48b72532SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1407*48b72532SKonrad Dybcio 			.name = "gcc_usb_hs_phy_cfg_ahb_clk",
1408*48b72532SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &pcnoc_bfdcd_clk_src.clkr.hw },
1409*48b72532SKonrad Dybcio 			.num_parents = 1,
1410*48b72532SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1411*48b72532SKonrad Dybcio 			.ops = &clk_branch2_ops,
1412*48b72532SKonrad Dybcio 		},
1413*48b72532SKonrad Dybcio 	},
1414*48b72532SKonrad Dybcio };
1415*48b72532SKonrad Dybcio 
1416*48b72532SKonrad Dybcio static struct clk_branch gcc_usb_hs_ahb_clk = {
1417*48b72532SKonrad Dybcio 	.halt_reg = 0x41008,
1418*48b72532SKonrad Dybcio 	.clkr = {
1419*48b72532SKonrad Dybcio 		.enable_reg = 0x41008,
1420*48b72532SKonrad Dybcio 		.enable_mask = BIT(0),
1421*48b72532SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1422*48b72532SKonrad Dybcio 			.name = "gcc_usb_hs_ahb_clk",
1423*48b72532SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &pcnoc_bfdcd_clk_src.clkr.hw },
1424*48b72532SKonrad Dybcio 			.num_parents = 1,
1425*48b72532SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1426*48b72532SKonrad Dybcio 			.ops = &clk_branch2_ops,
1427*48b72532SKonrad Dybcio 		},
1428*48b72532SKonrad Dybcio 	},
1429*48b72532SKonrad Dybcio };
1430*48b72532SKonrad Dybcio 
1431*48b72532SKonrad Dybcio static struct clk_branch gcc_usb_hs_system_clk = {
1432*48b72532SKonrad Dybcio 	.halt_reg = 0x41004,
1433*48b72532SKonrad Dybcio 	.clkr = {
1434*48b72532SKonrad Dybcio 		.enable_reg = 0x41004,
1435*48b72532SKonrad Dybcio 		.enable_mask = BIT(0),
1436*48b72532SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1437*48b72532SKonrad Dybcio 			.name = "gcc_usb_hs_system_clk",
1438*48b72532SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &usb_hs_system_clk_src.clkr.hw },
1439*48b72532SKonrad Dybcio 			.num_parents = 1,
1440*48b72532SKonrad Dybcio 			.flags = CLK_SET_RATE_PARENT,
1441*48b72532SKonrad Dybcio 			.ops = &clk_branch2_ops,
1442*48b72532SKonrad Dybcio 		},
1443*48b72532SKonrad Dybcio 	},
1444*48b72532SKonrad Dybcio };
1445*48b72532SKonrad Dybcio 
1446*48b72532SKonrad Dybcio static struct clk_branch gcc_apss_ahb_clk = {
1447*48b72532SKonrad Dybcio 	.halt_reg = 0x4601c,
1448*48b72532SKonrad Dybcio 	.halt_check = BRANCH_HALT_VOTED,
1449*48b72532SKonrad Dybcio 	.clkr = {
1450*48b72532SKonrad Dybcio 		.enable_reg = 0x45004,
1451*48b72532SKonrad Dybcio 		.enable_mask = BIT(14),
1452*48b72532SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1453*48b72532SKonrad Dybcio 			.name = "gcc_apss_ahb_clk",
1454*48b72532SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &pcnoc_bfdcd_clk_src.clkr.hw },
1455*48b72532SKonrad Dybcio 			.num_parents = 1,
1456*48b72532SKonrad Dybcio 			.ops = &clk_branch2_ops,
1457*48b72532SKonrad Dybcio 		},
1458*48b72532SKonrad Dybcio 	},
1459*48b72532SKonrad Dybcio };
1460*48b72532SKonrad Dybcio 
1461*48b72532SKonrad Dybcio static struct clk_branch gcc_apss_axi_clk = {
1462*48b72532SKonrad Dybcio 	.halt_reg = 0x4601c,
1463*48b72532SKonrad Dybcio 	.halt_check = BRANCH_HALT_VOTED,
1464*48b72532SKonrad Dybcio 	.clkr = {
1465*48b72532SKonrad Dybcio 		.enable_reg = 0x45004,
1466*48b72532SKonrad Dybcio 		.enable_mask = BIT(13),
1467*48b72532SKonrad Dybcio 		.hw.init = &(struct clk_init_data){
1468*48b72532SKonrad Dybcio 			.name = "gcc_apss_axi_clk",
1469*48b72532SKonrad Dybcio 			.parent_hws = (const struct clk_hw *[]){ &pcnoc_bfdcd_clk_src.clkr.hw },
1470*48b72532SKonrad Dybcio 			.num_parents = 1,
1471*48b72532SKonrad Dybcio 			.ops = &clk_branch2_ops,
1472*48b72532SKonrad Dybcio 		},
1473*48b72532SKonrad Dybcio 	},
1474*48b72532SKonrad Dybcio };
1475*48b72532SKonrad Dybcio 
1476*48b72532SKonrad Dybcio static struct clk_regmap *gcc_mdm9607_clocks[] = {
1477*48b72532SKonrad Dybcio 	[GPLL0] = &gpll0.clkr,
1478*48b72532SKonrad Dybcio 	[GPLL0_EARLY] = &gpll0_early.clkr,
1479*48b72532SKonrad Dybcio 	[GPLL1] = &gpll1.clkr,
1480*48b72532SKonrad Dybcio 	[GPLL1_VOTE] = &gpll1_vote,
1481*48b72532SKonrad Dybcio 	[GPLL2] = &gpll2.clkr,
1482*48b72532SKonrad Dybcio 	[GPLL2_EARLY] = &gpll2_early.clkr,
1483*48b72532SKonrad Dybcio 	[BIMC_PLL] = &bimc_pll.clkr,
1484*48b72532SKonrad Dybcio 	[BIMC_PLL_VOTE] = &bimc_pll_vote,
1485*48b72532SKonrad Dybcio 	[BIMC_DDR_CLK_SRC] = &bimc_ddr_clk_src.clkr,
1486*48b72532SKonrad Dybcio 	[PCNOC_BFDCD_CLK_SRC] = &pcnoc_bfdcd_clk_src.clkr,
1487*48b72532SKonrad Dybcio 	[SYSTEM_NOC_BFDCD_CLK_SRC] = &system_noc_bfdcd_clk_src.clkr,
1488*48b72532SKonrad Dybcio 	[APSS_AHB_CLK_SRC] = &apss_ahb_clk_src.clkr,
1489*48b72532SKonrad Dybcio 	[BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
1490*48b72532SKonrad Dybcio 	[BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
1491*48b72532SKonrad Dybcio 	[BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
1492*48b72532SKonrad Dybcio 	[BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
1493*48b72532SKonrad Dybcio 	[BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
1494*48b72532SKonrad Dybcio 	[BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
1495*48b72532SKonrad Dybcio 	[BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
1496*48b72532SKonrad Dybcio 	[BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
1497*48b72532SKonrad Dybcio 	[BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr,
1498*48b72532SKonrad Dybcio 	[BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr,
1499*48b72532SKonrad Dybcio 	[BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr,
1500*48b72532SKonrad Dybcio 	[BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr,
1501*48b72532SKonrad Dybcio 	[BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
1502*48b72532SKonrad Dybcio 	[BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
1503*48b72532SKonrad Dybcio 	[BLSP1_UART3_APPS_CLK_SRC] = &blsp1_uart3_apps_clk_src.clkr,
1504*48b72532SKonrad Dybcio 	[BLSP1_UART4_APPS_CLK_SRC] = &blsp1_uart4_apps_clk_src.clkr,
1505*48b72532SKonrad Dybcio 	[BLSP1_UART5_APPS_CLK_SRC] = &blsp1_uart5_apps_clk_src.clkr,
1506*48b72532SKonrad Dybcio 	[BLSP1_UART6_APPS_CLK_SRC] = &blsp1_uart6_apps_clk_src.clkr,
1507*48b72532SKonrad Dybcio 	[CRYPTO_CLK_SRC] = &crypto_clk_src.clkr,
1508*48b72532SKonrad Dybcio 	[GP1_CLK_SRC] = &gp1_clk_src.clkr,
1509*48b72532SKonrad Dybcio 	[GP2_CLK_SRC] = &gp2_clk_src.clkr,
1510*48b72532SKonrad Dybcio 	[GP3_CLK_SRC] = &gp3_clk_src.clkr,
1511*48b72532SKonrad Dybcio 	[PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
1512*48b72532SKonrad Dybcio 	[SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
1513*48b72532SKonrad Dybcio 	[SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
1514*48b72532SKonrad Dybcio 	[APSS_TCU_CLK_SRC] = &apss_tcu_clk_src.clkr,
1515*48b72532SKonrad Dybcio 	[USB_HS_SYSTEM_CLK_SRC] = &usb_hs_system_clk_src.clkr,
1516*48b72532SKonrad Dybcio 	[GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
1517*48b72532SKonrad Dybcio 	[GCC_BLSP1_SLEEP_CLK] = &gcc_blsp1_sleep_clk.clkr,
1518*48b72532SKonrad Dybcio 	[GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
1519*48b72532SKonrad Dybcio 	[GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
1520*48b72532SKonrad Dybcio 	[GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
1521*48b72532SKonrad Dybcio 	[GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
1522*48b72532SKonrad Dybcio 	[GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
1523*48b72532SKonrad Dybcio 	[GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
1524*48b72532SKonrad Dybcio 	[GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
1525*48b72532SKonrad Dybcio 	[GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
1526*48b72532SKonrad Dybcio 	[GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr,
1527*48b72532SKonrad Dybcio 	[GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr,
1528*48b72532SKonrad Dybcio 	[GCC_BLSP1_QUP6_I2C_APPS_CLK] = &gcc_blsp1_qup6_i2c_apps_clk.clkr,
1529*48b72532SKonrad Dybcio 	[GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr,
1530*48b72532SKonrad Dybcio 	[GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
1531*48b72532SKonrad Dybcio 	[GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
1532*48b72532SKonrad Dybcio 	[GCC_BLSP1_UART3_APPS_CLK] = &gcc_blsp1_uart3_apps_clk.clkr,
1533*48b72532SKonrad Dybcio 	[GCC_BLSP1_UART4_APPS_CLK] = &gcc_blsp1_uart4_apps_clk.clkr,
1534*48b72532SKonrad Dybcio 	[GCC_BLSP1_UART5_APPS_CLK] = &gcc_blsp1_uart5_apps_clk.clkr,
1535*48b72532SKonrad Dybcio 	[GCC_BLSP1_UART6_APPS_CLK] = &gcc_blsp1_uart6_apps_clk.clkr,
1536*48b72532SKonrad Dybcio 	[GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
1537*48b72532SKonrad Dybcio 	[GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr,
1538*48b72532SKonrad Dybcio 	[GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr,
1539*48b72532SKonrad Dybcio 	[GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr,
1540*48b72532SKonrad Dybcio 	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
1541*48b72532SKonrad Dybcio 	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
1542*48b72532SKonrad Dybcio 	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
1543*48b72532SKonrad Dybcio 	[GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,
1544*48b72532SKonrad Dybcio 	[GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
1545*48b72532SKonrad Dybcio 	[GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
1546*48b72532SKonrad Dybcio 	[GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
1547*48b72532SKonrad Dybcio 	[GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
1548*48b72532SKonrad Dybcio 	[GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
1549*48b72532SKonrad Dybcio 	[GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
1550*48b72532SKonrad Dybcio 	[GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
1551*48b72532SKonrad Dybcio 	[GCC_SMMU_CFG_CLK] = &gcc_smmu_cfg_clk.clkr,
1552*48b72532SKonrad Dybcio 	[GCC_USB2A_PHY_SLEEP_CLK] = &gcc_usb2a_phy_sleep_clk.clkr,
1553*48b72532SKonrad Dybcio 	[GCC_USB_HS_PHY_CFG_AHB_CLK] = &gcc_usb_hs_phy_cfg_ahb_clk.clkr,
1554*48b72532SKonrad Dybcio 	[GCC_USB_HS_AHB_CLK] = &gcc_usb_hs_ahb_clk.clkr,
1555*48b72532SKonrad Dybcio 	[GCC_USB_HS_SYSTEM_CLK] = &gcc_usb_hs_system_clk.clkr,
1556*48b72532SKonrad Dybcio 	[GCC_APSS_TCU_CLK] = &gcc_apss_tcu_clk.clkr,
1557*48b72532SKonrad Dybcio 	[GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr,
1558*48b72532SKonrad Dybcio 	[GCC_QDSS_DAP_CLK] = &gcc_qdss_dap_clk.clkr,
1559*48b72532SKonrad Dybcio 	[GCC_APSS_AHB_CLK] = &gcc_apss_ahb_clk.clkr,
1560*48b72532SKonrad Dybcio 	[GCC_APSS_AXI_CLK] = &gcc_apss_axi_clk.clkr,
1561*48b72532SKonrad Dybcio 	[GCC_USB_HSIC_CLK_SRC] = &usb_hsic_clk_src.clkr,
1562*48b72532SKonrad Dybcio 	[GCC_USB_HSIC_IO_CAL_CLK_SRC] = &usb_hsic_io_cal_clk_src.clkr,
1563*48b72532SKonrad Dybcio 	[GCC_USB_HSIC_SYSTEM_CLK_SRC] = &usb_hsic_system_clk_src.clkr,
1564*48b72532SKonrad Dybcio };
1565*48b72532SKonrad Dybcio 
1566*48b72532SKonrad Dybcio static const struct qcom_reset_map gcc_mdm9607_resets[] = {
1567*48b72532SKonrad Dybcio 	[USB_HS_HSIC_BCR] = { 0x3d05c },
1568*48b72532SKonrad Dybcio 	[GCC_MSS_RESTART] = { 0x3e000 },
1569*48b72532SKonrad Dybcio 	[USB_HS_BCR] = { 0x41000 },
1570*48b72532SKonrad Dybcio 	[USB2_HS_PHY_ONLY_BCR] = { 0x41034 },
1571*48b72532SKonrad Dybcio 	[QUSB2_PHY_BCR] = { 0x4103c },
1572*48b72532SKonrad Dybcio };
1573*48b72532SKonrad Dybcio 
1574*48b72532SKonrad Dybcio static const struct regmap_config gcc_mdm9607_regmap_config = {
1575*48b72532SKonrad Dybcio 	.reg_bits	= 32,
1576*48b72532SKonrad Dybcio 	.reg_stride	= 4,
1577*48b72532SKonrad Dybcio 	.val_bits	= 32,
1578*48b72532SKonrad Dybcio 	.max_register	= 0x80000,
1579*48b72532SKonrad Dybcio 	.fast_io	= true,
1580*48b72532SKonrad Dybcio };
1581*48b72532SKonrad Dybcio 
1582*48b72532SKonrad Dybcio static const struct qcom_cc_desc gcc_mdm9607_desc = {
1583*48b72532SKonrad Dybcio 	.config = &gcc_mdm9607_regmap_config,
1584*48b72532SKonrad Dybcio 	.clks = gcc_mdm9607_clocks,
1585*48b72532SKonrad Dybcio 	.num_clks = ARRAY_SIZE(gcc_mdm9607_clocks),
1586*48b72532SKonrad Dybcio 	.resets = gcc_mdm9607_resets,
1587*48b72532SKonrad Dybcio 	.num_resets = ARRAY_SIZE(gcc_mdm9607_resets),
1588*48b72532SKonrad Dybcio };
1589*48b72532SKonrad Dybcio 
1590*48b72532SKonrad Dybcio static const struct of_device_id gcc_mdm9607_match_table[] = {
1591*48b72532SKonrad Dybcio 	{ .compatible = "qcom,gcc-mdm9607" },
1592*48b72532SKonrad Dybcio 	{ }
1593*48b72532SKonrad Dybcio };
1594*48b72532SKonrad Dybcio MODULE_DEVICE_TABLE(of, gcc_mdm9607_match_table);
1595*48b72532SKonrad Dybcio 
gcc_mdm9607_probe(struct platform_device * pdev)1596*48b72532SKonrad Dybcio static int gcc_mdm9607_probe(struct platform_device *pdev)
1597*48b72532SKonrad Dybcio {
1598*48b72532SKonrad Dybcio 	struct regmap *regmap;
1599*48b72532SKonrad Dybcio 
1600*48b72532SKonrad Dybcio 	regmap = qcom_cc_map(pdev, &gcc_mdm9607_desc);
1601*48b72532SKonrad Dybcio 	if (IS_ERR(regmap))
1602*48b72532SKonrad Dybcio 		return PTR_ERR(regmap);
1603*48b72532SKonrad Dybcio 
1604*48b72532SKonrad Dybcio 	/* Vote for GPLL0 to turn on. Needed by acpuclock. */
1605*48b72532SKonrad Dybcio 	regmap_update_bits(regmap, 0x45000, BIT(0), BIT(0));
1606*48b72532SKonrad Dybcio 
1607*48b72532SKonrad Dybcio 	return qcom_cc_really_probe(&pdev->dev, &gcc_mdm9607_desc, regmap);
1608*48b72532SKonrad Dybcio }
1609*48b72532SKonrad Dybcio 
1610*48b72532SKonrad Dybcio static struct platform_driver gcc_mdm9607_driver = {
1611*48b72532SKonrad Dybcio 	.probe		= gcc_mdm9607_probe,
1612*48b72532SKonrad Dybcio 	.driver		= {
1613*48b72532SKonrad Dybcio 		.name	= "gcc-mdm9607",
1614*48b72532SKonrad Dybcio 		.of_match_table = gcc_mdm9607_match_table,
1615*48b72532SKonrad Dybcio 	},
1616*48b72532SKonrad Dybcio };
1617*48b72532SKonrad Dybcio 
gcc_mdm9607_init(void)1618*48b72532SKonrad Dybcio static int __init gcc_mdm9607_init(void)
1619*48b72532SKonrad Dybcio {
1620*48b72532SKonrad Dybcio 	return platform_driver_register(&gcc_mdm9607_driver);
1621*48b72532SKonrad Dybcio }
1622*48b72532SKonrad Dybcio core_initcall(gcc_mdm9607_init);
1623*48b72532SKonrad Dybcio 
gcc_mdm9607_exit(void)1624*48b72532SKonrad Dybcio static void __exit gcc_mdm9607_exit(void)
1625*48b72532SKonrad Dybcio {
1626*48b72532SKonrad Dybcio 	platform_driver_unregister(&gcc_mdm9607_driver);
1627*48b72532SKonrad Dybcio }
1628*48b72532SKonrad Dybcio module_exit(gcc_mdm9607_exit);
1629*48b72532SKonrad Dybcio 
1630*48b72532SKonrad Dybcio MODULE_DESCRIPTION("Qualcomm GCC mdm9607 Driver");
1631*48b72532SKonrad Dybcio MODULE_LICENSE("GPL v2");
1632*48b72532SKonrad Dybcio