xref: /linux/drivers/clk/qcom/nwgcc-nord.c (revision 0fc8f6200d2313278fbf4539bbab74677c685531)
1*a4f780cdSTaniya Das // SPDX-License-Identifier: GPL-2.0-only
2*a4f780cdSTaniya Das /*
3*a4f780cdSTaniya Das  * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
4*a4f780cdSTaniya Das  */
5*a4f780cdSTaniya Das 
6*a4f780cdSTaniya Das #include <linux/clk-provider.h>
7*a4f780cdSTaniya Das #include <linux/mod_devicetable.h>
8*a4f780cdSTaniya Das #include <linux/module.h>
9*a4f780cdSTaniya Das #include <linux/platform_device.h>
10*a4f780cdSTaniya Das #include <linux/regmap.h>
11*a4f780cdSTaniya Das 
12*a4f780cdSTaniya Das #include <dt-bindings/clock/qcom,nord-nwgcc.h>
13*a4f780cdSTaniya Das 
14*a4f780cdSTaniya Das #include "clk-alpha-pll.h"
15*a4f780cdSTaniya Das #include "clk-branch.h"
16*a4f780cdSTaniya Das #include "clk-pll.h"
17*a4f780cdSTaniya Das #include "clk-rcg.h"
18*a4f780cdSTaniya Das #include "clk-regmap.h"
19*a4f780cdSTaniya Das #include "clk-regmap-divider.h"
20*a4f780cdSTaniya Das #include "clk-regmap-mux.h"
21*a4f780cdSTaniya Das #include "common.h"
22*a4f780cdSTaniya Das #include "reset.h"
23*a4f780cdSTaniya Das 
24*a4f780cdSTaniya Das enum {
25*a4f780cdSTaniya Das 	DT_BI_TCXO,
26*a4f780cdSTaniya Das 	DT_SLEEP_CLK,
27*a4f780cdSTaniya Das };
28*a4f780cdSTaniya Das 
29*a4f780cdSTaniya Das enum {
30*a4f780cdSTaniya Das 	P_BI_TCXO,
31*a4f780cdSTaniya Das 	P_NW_GCC_GPLL0_OUT_EVEN,
32*a4f780cdSTaniya Das 	P_NW_GCC_GPLL0_OUT_MAIN,
33*a4f780cdSTaniya Das 	P_SLEEP_CLK,
34*a4f780cdSTaniya Das };
35*a4f780cdSTaniya Das 
36*a4f780cdSTaniya Das static struct clk_alpha_pll nw_gcc_gpll0 = {
37*a4f780cdSTaniya Das 	.offset = 0x0,
38*a4f780cdSTaniya Das 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
39*a4f780cdSTaniya Das 	.clkr = {
40*a4f780cdSTaniya Das 		.enable_reg = 0x0,
41*a4f780cdSTaniya Das 		.enable_mask = BIT(0),
42*a4f780cdSTaniya Das 		.hw.init = &(const struct clk_init_data) {
43*a4f780cdSTaniya Das 			.name = "nw_gcc_gpll0",
44*a4f780cdSTaniya Das 			.parent_data = &(const struct clk_parent_data) {
45*a4f780cdSTaniya Das 				.index = DT_BI_TCXO,
46*a4f780cdSTaniya Das 			},
47*a4f780cdSTaniya Das 			.num_parents = 1,
48*a4f780cdSTaniya Das 			.ops = &clk_alpha_pll_fixed_lucid_ole_ops,
49*a4f780cdSTaniya Das 		},
50*a4f780cdSTaniya Das 	},
51*a4f780cdSTaniya Das };
52*a4f780cdSTaniya Das 
53*a4f780cdSTaniya Das static const struct clk_div_table post_div_table_nw_gcc_gpll0_out_even[] = {
54*a4f780cdSTaniya Das 	{ 0x1, 2 },
55*a4f780cdSTaniya Das 	{ }
56*a4f780cdSTaniya Das };
57*a4f780cdSTaniya Das 
58*a4f780cdSTaniya Das static struct clk_alpha_pll_postdiv nw_gcc_gpll0_out_even = {
59*a4f780cdSTaniya Das 	.offset = 0x0,
60*a4f780cdSTaniya Das 	.post_div_shift = 10,
61*a4f780cdSTaniya Das 	.post_div_table = post_div_table_nw_gcc_gpll0_out_even,
62*a4f780cdSTaniya Das 	.num_post_div = ARRAY_SIZE(post_div_table_nw_gcc_gpll0_out_even),
63*a4f780cdSTaniya Das 	.width = 4,
64*a4f780cdSTaniya Das 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_OLE],
65*a4f780cdSTaniya Das 	.clkr.hw.init = &(const struct clk_init_data) {
66*a4f780cdSTaniya Das 		.name = "nw_gcc_gpll0_out_even",
67*a4f780cdSTaniya Das 		.parent_hws = (const struct clk_hw*[]) {
68*a4f780cdSTaniya Das 			&nw_gcc_gpll0.clkr.hw,
69*a4f780cdSTaniya Das 		},
70*a4f780cdSTaniya Das 		.num_parents = 1,
71*a4f780cdSTaniya Das 		.ops = &clk_alpha_pll_postdiv_lucid_ole_ops,
72*a4f780cdSTaniya Das 	},
73*a4f780cdSTaniya Das };
74*a4f780cdSTaniya Das 
75*a4f780cdSTaniya Das static const struct parent_map nw_gcc_parent_map_0[] = {
76*a4f780cdSTaniya Das 	{ P_BI_TCXO, 0 },
77*a4f780cdSTaniya Das 	{ P_NW_GCC_GPLL0_OUT_MAIN, 1 },
78*a4f780cdSTaniya Das 	{ P_SLEEP_CLK, 5 },
79*a4f780cdSTaniya Das 	{ P_NW_GCC_GPLL0_OUT_EVEN, 6 },
80*a4f780cdSTaniya Das };
81*a4f780cdSTaniya Das 
82*a4f780cdSTaniya Das static const struct clk_parent_data nw_gcc_parent_data_0[] = {
83*a4f780cdSTaniya Das 	{ .index = DT_BI_TCXO },
84*a4f780cdSTaniya Das 	{ .hw = &nw_gcc_gpll0.clkr.hw },
85*a4f780cdSTaniya Das 	{ .index = DT_SLEEP_CLK },
86*a4f780cdSTaniya Das 	{ .hw = &nw_gcc_gpll0_out_even.clkr.hw },
87*a4f780cdSTaniya Das };
88*a4f780cdSTaniya Das 
89*a4f780cdSTaniya Das static const struct freq_tbl ftbl_nw_gcc_gp1_clk_src[] = {
90*a4f780cdSTaniya Das 	F(60000000, P_NW_GCC_GPLL0_OUT_MAIN, 10, 0, 0),
91*a4f780cdSTaniya Das 	F(100000000, P_NW_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
92*a4f780cdSTaniya Das 	F(200000000, P_NW_GCC_GPLL0_OUT_MAIN, 3, 0, 0),
93*a4f780cdSTaniya Das 	{ }
94*a4f780cdSTaniya Das };
95*a4f780cdSTaniya Das 
96*a4f780cdSTaniya Das static struct clk_rcg2 nw_gcc_gp1_clk_src = {
97*a4f780cdSTaniya Das 	.cmd_rcgr = 0x20004,
98*a4f780cdSTaniya Das 	.mnd_width = 16,
99*a4f780cdSTaniya Das 	.hid_width = 5,
100*a4f780cdSTaniya Das 	.parent_map = nw_gcc_parent_map_0,
101*a4f780cdSTaniya Das 	.freq_tbl = ftbl_nw_gcc_gp1_clk_src,
102*a4f780cdSTaniya Das 	.hw_clk_ctrl = true,
103*a4f780cdSTaniya Das 	.clkr.hw.init = &(const struct clk_init_data) {
104*a4f780cdSTaniya Das 		.name = "nw_gcc_gp1_clk_src",
105*a4f780cdSTaniya Das 		.parent_data = nw_gcc_parent_data_0,
106*a4f780cdSTaniya Das 		.num_parents = ARRAY_SIZE(nw_gcc_parent_data_0),
107*a4f780cdSTaniya Das 		.flags = CLK_SET_RATE_PARENT,
108*a4f780cdSTaniya Das 		.ops = &clk_rcg2_shared_ops,
109*a4f780cdSTaniya Das 	},
110*a4f780cdSTaniya Das };
111*a4f780cdSTaniya Das 
112*a4f780cdSTaniya Das static struct clk_rcg2 nw_gcc_gp2_clk_src = {
113*a4f780cdSTaniya Das 	.cmd_rcgr = 0x21004,
114*a4f780cdSTaniya Das 	.mnd_width = 16,
115*a4f780cdSTaniya Das 	.hid_width = 5,
116*a4f780cdSTaniya Das 	.parent_map = nw_gcc_parent_map_0,
117*a4f780cdSTaniya Das 	.freq_tbl = ftbl_nw_gcc_gp1_clk_src,
118*a4f780cdSTaniya Das 	.hw_clk_ctrl = true,
119*a4f780cdSTaniya Das 	.clkr.hw.init = &(const struct clk_init_data) {
120*a4f780cdSTaniya Das 		.name = "nw_gcc_gp2_clk_src",
121*a4f780cdSTaniya Das 		.parent_data = nw_gcc_parent_data_0,
122*a4f780cdSTaniya Das 		.num_parents = ARRAY_SIZE(nw_gcc_parent_data_0),
123*a4f780cdSTaniya Das 		.flags = CLK_SET_RATE_PARENT,
124*a4f780cdSTaniya Das 		.ops = &clk_rcg2_shared_ops,
125*a4f780cdSTaniya Das 	},
126*a4f780cdSTaniya Das };
127*a4f780cdSTaniya Das 
128*a4f780cdSTaniya Das static struct clk_branch nw_gcc_acmu_mux_clk = {
129*a4f780cdSTaniya Das 	.halt_reg = 0x1f01c,
130*a4f780cdSTaniya Das 	.halt_check = BRANCH_HALT,
131*a4f780cdSTaniya Das 	.clkr = {
132*a4f780cdSTaniya Das 		.enable_reg = 0x1f01c,
133*a4f780cdSTaniya Das 		.enable_mask = BIT(0),
134*a4f780cdSTaniya Das 		.hw.init = &(const struct clk_init_data) {
135*a4f780cdSTaniya Das 			.name = "nw_gcc_acmu_mux_clk",
136*a4f780cdSTaniya Das 			.ops = &clk_branch2_ops,
137*a4f780cdSTaniya Das 		},
138*a4f780cdSTaniya Das 	},
139*a4f780cdSTaniya Das };
140*a4f780cdSTaniya Das 
141*a4f780cdSTaniya Das static struct clk_branch nw_gcc_camera_hf_axi_clk = {
142*a4f780cdSTaniya Das 	.halt_reg = 0x16008,
143*a4f780cdSTaniya Das 	.halt_check = BRANCH_HALT_SKIP,
144*a4f780cdSTaniya Das 	.hwcg_reg = 0x16008,
145*a4f780cdSTaniya Das 	.hwcg_bit = 1,
146*a4f780cdSTaniya Das 	.clkr = {
147*a4f780cdSTaniya Das 		.enable_reg = 0x16008,
148*a4f780cdSTaniya Das 		.enable_mask = BIT(0),
149*a4f780cdSTaniya Das 		.hw.init = &(const struct clk_init_data) {
150*a4f780cdSTaniya Das 			.name = "nw_gcc_camera_hf_axi_clk",
151*a4f780cdSTaniya Das 			.ops = &clk_branch2_ops,
152*a4f780cdSTaniya Das 		},
153*a4f780cdSTaniya Das 	},
154*a4f780cdSTaniya Das };
155*a4f780cdSTaniya Das 
156*a4f780cdSTaniya Das static struct clk_branch nw_gcc_camera_sf_axi_clk = {
157*a4f780cdSTaniya Das 	.halt_reg = 0x1601c,
158*a4f780cdSTaniya Das 	.halt_check = BRANCH_HALT_SKIP,
159*a4f780cdSTaniya Das 	.hwcg_reg = 0x1601c,
160*a4f780cdSTaniya Das 	.hwcg_bit = 1,
161*a4f780cdSTaniya Das 	.clkr = {
162*a4f780cdSTaniya Das 		.enable_reg = 0x1601c,
163*a4f780cdSTaniya Das 		.enable_mask = BIT(0),
164*a4f780cdSTaniya Das 		.hw.init = &(const struct clk_init_data) {
165*a4f780cdSTaniya Das 			.name = "nw_gcc_camera_sf_axi_clk",
166*a4f780cdSTaniya Das 			.ops = &clk_branch2_ops,
167*a4f780cdSTaniya Das 		},
168*a4f780cdSTaniya Das 	},
169*a4f780cdSTaniya Das };
170*a4f780cdSTaniya Das 
171*a4f780cdSTaniya Das static struct clk_branch nw_gcc_camera_trig_clk = {
172*a4f780cdSTaniya Das 	.halt_reg = 0x16034,
173*a4f780cdSTaniya Das 	.halt_check = BRANCH_HALT_VOTED,
174*a4f780cdSTaniya Das 	.hwcg_reg = 0x16034,
175*a4f780cdSTaniya Das 	.hwcg_bit = 1,
176*a4f780cdSTaniya Das 	.clkr = {
177*a4f780cdSTaniya Das 		.enable_reg = 0x16034,
178*a4f780cdSTaniya Das 		.enable_mask = BIT(0),
179*a4f780cdSTaniya Das 		.hw.init = &(const struct clk_init_data) {
180*a4f780cdSTaniya Das 			.name = "nw_gcc_camera_trig_clk",
181*a4f780cdSTaniya Das 			.ops = &clk_branch2_ops,
182*a4f780cdSTaniya Das 		},
183*a4f780cdSTaniya Das 	},
184*a4f780cdSTaniya Das };
185*a4f780cdSTaniya Das 
186*a4f780cdSTaniya Das static struct clk_branch nw_gcc_disp_0_hf_axi_clk = {
187*a4f780cdSTaniya Das 	.halt_reg = 0x18008,
188*a4f780cdSTaniya Das 	.halt_check = BRANCH_HALT_SKIP,
189*a4f780cdSTaniya Das 	.hwcg_reg = 0x18008,
190*a4f780cdSTaniya Das 	.hwcg_bit = 1,
191*a4f780cdSTaniya Das 	.clkr = {
192*a4f780cdSTaniya Das 		.enable_reg = 0x18008,
193*a4f780cdSTaniya Das 		.enable_mask = BIT(0),
194*a4f780cdSTaniya Das 		.hw.init = &(const struct clk_init_data) {
195*a4f780cdSTaniya Das 			.name = "nw_gcc_disp_0_hf_axi_clk",
196*a4f780cdSTaniya Das 			.ops = &clk_branch2_ops,
197*a4f780cdSTaniya Das 		},
198*a4f780cdSTaniya Das 	},
199*a4f780cdSTaniya Das };
200*a4f780cdSTaniya Das 
201*a4f780cdSTaniya Das static struct clk_branch nw_gcc_disp_0_trig_clk = {
202*a4f780cdSTaniya Das 	.halt_reg = 0x1801c,
203*a4f780cdSTaniya Das 	.halt_check = BRANCH_HALT_VOTED,
204*a4f780cdSTaniya Das 	.hwcg_reg = 0x1801c,
205*a4f780cdSTaniya Das 	.hwcg_bit = 1,
206*a4f780cdSTaniya Das 	.clkr = {
207*a4f780cdSTaniya Das 		.enable_reg = 0x1801c,
208*a4f780cdSTaniya Das 		.enable_mask = BIT(0),
209*a4f780cdSTaniya Das 		.hw.init = &(const struct clk_init_data) {
210*a4f780cdSTaniya Das 			.name = "nw_gcc_disp_0_trig_clk",
211*a4f780cdSTaniya Das 			.ops = &clk_branch2_ops,
212*a4f780cdSTaniya Das 		},
213*a4f780cdSTaniya Das 	},
214*a4f780cdSTaniya Das };
215*a4f780cdSTaniya Das 
216*a4f780cdSTaniya Das static struct clk_branch nw_gcc_disp_1_hf_axi_clk = {
217*a4f780cdSTaniya Das 	.halt_reg = 0x19008,
218*a4f780cdSTaniya Das 	.halt_check = BRANCH_HALT_SKIP,
219*a4f780cdSTaniya Das 	.hwcg_reg = 0x19008,
220*a4f780cdSTaniya Das 	.hwcg_bit = 1,
221*a4f780cdSTaniya Das 	.clkr = {
222*a4f780cdSTaniya Das 		.enable_reg = 0x19008,
223*a4f780cdSTaniya Das 		.enable_mask = BIT(0),
224*a4f780cdSTaniya Das 		.hw.init = &(const struct clk_init_data) {
225*a4f780cdSTaniya Das 			.name = "nw_gcc_disp_1_hf_axi_clk",
226*a4f780cdSTaniya Das 			.ops = &clk_branch2_ops,
227*a4f780cdSTaniya Das 		},
228*a4f780cdSTaniya Das 	},
229*a4f780cdSTaniya Das };
230*a4f780cdSTaniya Das 
231*a4f780cdSTaniya Das static struct clk_branch nw_gcc_disp_1_trig_clk = {
232*a4f780cdSTaniya Das 	.halt_reg = 0x1901c,
233*a4f780cdSTaniya Das 	.halt_check = BRANCH_HALT_VOTED,
234*a4f780cdSTaniya Das 	.hwcg_reg = 0x1901c,
235*a4f780cdSTaniya Das 	.hwcg_bit = 1,
236*a4f780cdSTaniya Das 	.clkr = {
237*a4f780cdSTaniya Das 		.enable_reg = 0x1901c,
238*a4f780cdSTaniya Das 		.enable_mask = BIT(0),
239*a4f780cdSTaniya Das 		.hw.init = &(const struct clk_init_data) {
240*a4f780cdSTaniya Das 			.name = "nw_gcc_disp_1_trig_clk",
241*a4f780cdSTaniya Das 			.ops = &clk_branch2_ops,
242*a4f780cdSTaniya Das 		},
243*a4f780cdSTaniya Das 	},
244*a4f780cdSTaniya Das };
245*a4f780cdSTaniya Das 
246*a4f780cdSTaniya Das static struct clk_branch nw_gcc_dprx0_axi_hf_clk = {
247*a4f780cdSTaniya Das 	.halt_reg = 0x29004,
248*a4f780cdSTaniya Das 	.halt_check = BRANCH_HALT_SKIP,
249*a4f780cdSTaniya Das 	.hwcg_reg = 0x29004,
250*a4f780cdSTaniya Das 	.hwcg_bit = 1,
251*a4f780cdSTaniya Das 	.clkr = {
252*a4f780cdSTaniya Das 		.enable_reg = 0x29004,
253*a4f780cdSTaniya Das 		.enable_mask = BIT(0),
254*a4f780cdSTaniya Das 		.hw.init = &(const struct clk_init_data) {
255*a4f780cdSTaniya Das 			.name = "nw_gcc_dprx0_axi_hf_clk",
256*a4f780cdSTaniya Das 			.ops = &clk_branch2_ops,
257*a4f780cdSTaniya Das 		},
258*a4f780cdSTaniya Das 	},
259*a4f780cdSTaniya Das };
260*a4f780cdSTaniya Das 
261*a4f780cdSTaniya Das static struct clk_branch nw_gcc_dprx1_axi_hf_clk = {
262*a4f780cdSTaniya Das 	.halt_reg = 0x2a004,
263*a4f780cdSTaniya Das 	.halt_check = BRANCH_HALT_SKIP,
264*a4f780cdSTaniya Das 	.hwcg_reg = 0x2a004,
265*a4f780cdSTaniya Das 	.hwcg_bit = 1,
266*a4f780cdSTaniya Das 	.clkr = {
267*a4f780cdSTaniya Das 		.enable_reg = 0x2a004,
268*a4f780cdSTaniya Das 		.enable_mask = BIT(0),
269*a4f780cdSTaniya Das 		.hw.init = &(const struct clk_init_data) {
270*a4f780cdSTaniya Das 			.name = "nw_gcc_dprx1_axi_hf_clk",
271*a4f780cdSTaniya Das 			.ops = &clk_branch2_ops,
272*a4f780cdSTaniya Das 		},
273*a4f780cdSTaniya Das 	},
274*a4f780cdSTaniya Das };
275*a4f780cdSTaniya Das 
276*a4f780cdSTaniya Das static struct clk_branch nw_gcc_eva_axi0_clk = {
277*a4f780cdSTaniya Das 	.halt_reg = 0x1b008,
278*a4f780cdSTaniya Das 	.halt_check = BRANCH_HALT_SKIP,
279*a4f780cdSTaniya Das 	.hwcg_reg = 0x1b008,
280*a4f780cdSTaniya Das 	.hwcg_bit = 1,
281*a4f780cdSTaniya Das 	.clkr = {
282*a4f780cdSTaniya Das 		.enable_reg = 0x1b008,
283*a4f780cdSTaniya Das 		.enable_mask = BIT(0),
284*a4f780cdSTaniya Das 		.hw.init = &(const struct clk_init_data) {
285*a4f780cdSTaniya Das 			.name = "nw_gcc_eva_axi0_clk",
286*a4f780cdSTaniya Das 			.ops = &clk_branch2_ops,
287*a4f780cdSTaniya Das 		},
288*a4f780cdSTaniya Das 	},
289*a4f780cdSTaniya Das };
290*a4f780cdSTaniya Das 
291*a4f780cdSTaniya Das static struct clk_branch nw_gcc_eva_axi0c_clk = {
292*a4f780cdSTaniya Das 	.halt_reg = 0x1b01c,
293*a4f780cdSTaniya Das 	.halt_check = BRANCH_HALT_SKIP,
294*a4f780cdSTaniya Das 	.hwcg_reg = 0x1b01c,
295*a4f780cdSTaniya Das 	.hwcg_bit = 1,
296*a4f780cdSTaniya Das 	.clkr = {
297*a4f780cdSTaniya Das 		.enable_reg = 0x1b01c,
298*a4f780cdSTaniya Das 		.enable_mask = BIT(0),
299*a4f780cdSTaniya Das 		.hw.init = &(const struct clk_init_data) {
300*a4f780cdSTaniya Das 			.name = "nw_gcc_eva_axi0c_clk",
301*a4f780cdSTaniya Das 			.ops = &clk_branch2_ops,
302*a4f780cdSTaniya Das 		},
303*a4f780cdSTaniya Das 	},
304*a4f780cdSTaniya Das };
305*a4f780cdSTaniya Das 
306*a4f780cdSTaniya Das static struct clk_branch nw_gcc_eva_trig_clk = {
307*a4f780cdSTaniya Das 	.halt_reg = 0x1b028,
308*a4f780cdSTaniya Das 	.halt_check = BRANCH_HALT_VOTED,
309*a4f780cdSTaniya Das 	.hwcg_reg = 0x1b028,
310*a4f780cdSTaniya Das 	.hwcg_bit = 1,
311*a4f780cdSTaniya Das 	.clkr = {
312*a4f780cdSTaniya Das 		.enable_reg = 0x1b028,
313*a4f780cdSTaniya Das 		.enable_mask = BIT(0),
314*a4f780cdSTaniya Das 		.hw.init = &(const struct clk_init_data) {
315*a4f780cdSTaniya Das 			.name = "nw_gcc_eva_trig_clk",
316*a4f780cdSTaniya Das 			.ops = &clk_branch2_ops,
317*a4f780cdSTaniya Das 		},
318*a4f780cdSTaniya Das 	},
319*a4f780cdSTaniya Das };
320*a4f780cdSTaniya Das 
321*a4f780cdSTaniya Das static struct clk_branch nw_gcc_frq_measure_ref_clk = {
322*a4f780cdSTaniya Das 	.halt_reg = 0x1f008,
323*a4f780cdSTaniya Das 	.halt_check = BRANCH_HALT,
324*a4f780cdSTaniya Das 	.clkr = {
325*a4f780cdSTaniya Das 		.enable_reg = 0x1f008,
326*a4f780cdSTaniya Das 		.enable_mask = BIT(0),
327*a4f780cdSTaniya Das 		.hw.init = &(const struct clk_init_data) {
328*a4f780cdSTaniya Das 			.name = "nw_gcc_frq_measure_ref_clk",
329*a4f780cdSTaniya Das 			.ops = &clk_branch2_ops,
330*a4f780cdSTaniya Das 		},
331*a4f780cdSTaniya Das 	},
332*a4f780cdSTaniya Das };
333*a4f780cdSTaniya Das 
334*a4f780cdSTaniya Das static struct clk_branch nw_gcc_gp1_clk = {
335*a4f780cdSTaniya Das 	.halt_reg = 0x20000,
336*a4f780cdSTaniya Das 	.halt_check = BRANCH_HALT,
337*a4f780cdSTaniya Das 	.clkr = {
338*a4f780cdSTaniya Das 		.enable_reg = 0x20000,
339*a4f780cdSTaniya Das 		.enable_mask = BIT(0),
340*a4f780cdSTaniya Das 		.hw.init = &(const struct clk_init_data) {
341*a4f780cdSTaniya Das 			.name = "nw_gcc_gp1_clk",
342*a4f780cdSTaniya Das 			.parent_hws = (const struct clk_hw*[]) {
343*a4f780cdSTaniya Das 				&nw_gcc_gp1_clk_src.clkr.hw,
344*a4f780cdSTaniya Das 			},
345*a4f780cdSTaniya Das 			.num_parents = 1,
346*a4f780cdSTaniya Das 			.flags = CLK_SET_RATE_PARENT,
347*a4f780cdSTaniya Das 			.ops = &clk_branch2_ops,
348*a4f780cdSTaniya Das 		},
349*a4f780cdSTaniya Das 	},
350*a4f780cdSTaniya Das };
351*a4f780cdSTaniya Das 
352*a4f780cdSTaniya Das static struct clk_branch nw_gcc_gp2_clk = {
353*a4f780cdSTaniya Das 	.halt_reg = 0x21000,
354*a4f780cdSTaniya Das 	.halt_check = BRANCH_HALT,
355*a4f780cdSTaniya Das 	.clkr = {
356*a4f780cdSTaniya Das 		.enable_reg = 0x21000,
357*a4f780cdSTaniya Das 		.enable_mask = BIT(0),
358*a4f780cdSTaniya Das 		.hw.init = &(const struct clk_init_data) {
359*a4f780cdSTaniya Das 			.name = "nw_gcc_gp2_clk",
360*a4f780cdSTaniya Das 			.parent_hws = (const struct clk_hw*[]) {
361*a4f780cdSTaniya Das 				&nw_gcc_gp2_clk_src.clkr.hw,
362*a4f780cdSTaniya Das 			},
363*a4f780cdSTaniya Das 			.num_parents = 1,
364*a4f780cdSTaniya Das 			.flags = CLK_SET_RATE_PARENT,
365*a4f780cdSTaniya Das 			.ops = &clk_branch2_ops,
366*a4f780cdSTaniya Das 		},
367*a4f780cdSTaniya Das 	},
368*a4f780cdSTaniya Das };
369*a4f780cdSTaniya Das 
370*a4f780cdSTaniya Das static struct clk_branch nw_gcc_gpu_2_gpll0_clk_src = {
371*a4f780cdSTaniya Das 	.halt_reg = 0x24150,
372*a4f780cdSTaniya Das 	.halt_check = BRANCH_HALT_VOTED,
373*a4f780cdSTaniya Das 	.hwcg_reg = 0x24150,
374*a4f780cdSTaniya Das 	.hwcg_bit = 1,
375*a4f780cdSTaniya Das 	.clkr = {
376*a4f780cdSTaniya Das 		.enable_reg = 0x76000,
377*a4f780cdSTaniya Das 		.enable_mask = BIT(6),
378*a4f780cdSTaniya Das 		.hw.init = &(const struct clk_init_data) {
379*a4f780cdSTaniya Das 			.name = "nw_gcc_gpu_2_gpll0_clk_src",
380*a4f780cdSTaniya Das 			.parent_hws = (const struct clk_hw*[]) {
381*a4f780cdSTaniya Das 				&nw_gcc_gpll0.clkr.hw,
382*a4f780cdSTaniya Das 			},
383*a4f780cdSTaniya Das 			.num_parents = 1,
384*a4f780cdSTaniya Das 			.flags = CLK_SET_RATE_PARENT,
385*a4f780cdSTaniya Das 			.ops = &clk_branch2_ops,
386*a4f780cdSTaniya Das 		},
387*a4f780cdSTaniya Das 	},
388*a4f780cdSTaniya Das };
389*a4f780cdSTaniya Das 
390*a4f780cdSTaniya Das static struct clk_branch nw_gcc_gpu_2_gpll0_div_clk_src = {
391*a4f780cdSTaniya Das 	.halt_reg = 0x24158,
392*a4f780cdSTaniya Das 	.halt_check = BRANCH_HALT_VOTED,
393*a4f780cdSTaniya Das 	.hwcg_reg = 0x24158,
394*a4f780cdSTaniya Das 	.hwcg_bit = 1,
395*a4f780cdSTaniya Das 	.clkr = {
396*a4f780cdSTaniya Das 		.enable_reg = 0x76000,
397*a4f780cdSTaniya Das 		.enable_mask = BIT(7),
398*a4f780cdSTaniya Das 		.hw.init = &(const struct clk_init_data) {
399*a4f780cdSTaniya Das 			.name = "nw_gcc_gpu_2_gpll0_div_clk_src",
400*a4f780cdSTaniya Das 			.parent_hws = (const struct clk_hw*[]) {
401*a4f780cdSTaniya Das 				&nw_gcc_gpll0_out_even.clkr.hw,
402*a4f780cdSTaniya Das 			},
403*a4f780cdSTaniya Das 			.num_parents = 1,
404*a4f780cdSTaniya Das 			.flags = CLK_SET_RATE_PARENT,
405*a4f780cdSTaniya Das 			.ops = &clk_branch2_ops,
406*a4f780cdSTaniya Das 		},
407*a4f780cdSTaniya Das 	},
408*a4f780cdSTaniya Das };
409*a4f780cdSTaniya Das 
410*a4f780cdSTaniya Das static struct clk_branch nw_gcc_gpu_2_hscnoc_gfx_clk = {
411*a4f780cdSTaniya Das 	.halt_reg = 0x2400c,
412*a4f780cdSTaniya Das 	.halt_check = BRANCH_HALT_VOTED,
413*a4f780cdSTaniya Das 	.hwcg_reg = 0x2400c,
414*a4f780cdSTaniya Das 	.hwcg_bit = 1,
415*a4f780cdSTaniya Das 	.clkr = {
416*a4f780cdSTaniya Das 		.enable_reg = 0x2400c,
417*a4f780cdSTaniya Das 		.enable_mask = BIT(0),
418*a4f780cdSTaniya Das 		.hw.init = &(const struct clk_init_data) {
419*a4f780cdSTaniya Das 			.name = "nw_gcc_gpu_2_hscnoc_gfx_clk",
420*a4f780cdSTaniya Das 			.ops = &clk_branch2_ops,
421*a4f780cdSTaniya Das 		},
422*a4f780cdSTaniya Das 	},
423*a4f780cdSTaniya Das };
424*a4f780cdSTaniya Das 
425*a4f780cdSTaniya Das static struct clk_branch nw_gcc_gpu_gpll0_clk_src = {
426*a4f780cdSTaniya Das 	.halt_reg = 0x23150,
427*a4f780cdSTaniya Das 	.halt_check = BRANCH_HALT_VOTED,
428*a4f780cdSTaniya Das 	.hwcg_reg = 0x23150,
429*a4f780cdSTaniya Das 	.hwcg_bit = 1,
430*a4f780cdSTaniya Das 	.clkr = {
431*a4f780cdSTaniya Das 		.enable_reg = 0x76000,
432*a4f780cdSTaniya Das 		.enable_mask = BIT(4),
433*a4f780cdSTaniya Das 		.hw.init = &(const struct clk_init_data) {
434*a4f780cdSTaniya Das 			.name = "nw_gcc_gpu_gpll0_clk_src",
435*a4f780cdSTaniya Das 			.parent_hws = (const struct clk_hw*[]) {
436*a4f780cdSTaniya Das 				&nw_gcc_gpll0.clkr.hw,
437*a4f780cdSTaniya Das 			},
438*a4f780cdSTaniya Das 			.num_parents = 1,
439*a4f780cdSTaniya Das 			.flags = CLK_SET_RATE_PARENT,
440*a4f780cdSTaniya Das 			.ops = &clk_branch2_ops,
441*a4f780cdSTaniya Das 		},
442*a4f780cdSTaniya Das 	},
443*a4f780cdSTaniya Das };
444*a4f780cdSTaniya Das 
445*a4f780cdSTaniya Das static struct clk_branch nw_gcc_gpu_gpll0_div_clk_src = {
446*a4f780cdSTaniya Das 	.halt_reg = 0x23158,
447*a4f780cdSTaniya Das 	.halt_check = BRANCH_HALT_VOTED,
448*a4f780cdSTaniya Das 	.hwcg_reg = 0x23158,
449*a4f780cdSTaniya Das 	.hwcg_bit = 1,
450*a4f780cdSTaniya Das 	.clkr = {
451*a4f780cdSTaniya Das 		.enable_reg = 0x76000,
452*a4f780cdSTaniya Das 		.enable_mask = BIT(5),
453*a4f780cdSTaniya Das 		.hw.init = &(const struct clk_init_data) {
454*a4f780cdSTaniya Das 			.name = "nw_gcc_gpu_gpll0_div_clk_src",
455*a4f780cdSTaniya Das 			.parent_hws = (const struct clk_hw*[]) {
456*a4f780cdSTaniya Das 				&nw_gcc_gpll0_out_even.clkr.hw,
457*a4f780cdSTaniya Das 			},
458*a4f780cdSTaniya Das 			.num_parents = 1,
459*a4f780cdSTaniya Das 			.flags = CLK_SET_RATE_PARENT,
460*a4f780cdSTaniya Das 			.ops = &clk_branch2_ops,
461*a4f780cdSTaniya Das 		},
462*a4f780cdSTaniya Das 	},
463*a4f780cdSTaniya Das };
464*a4f780cdSTaniya Das 
465*a4f780cdSTaniya Das static struct clk_branch nw_gcc_gpu_hscnoc_gfx_clk = {
466*a4f780cdSTaniya Das 	.halt_reg = 0x2300c,
467*a4f780cdSTaniya Das 	.halt_check = BRANCH_HALT_SKIP,
468*a4f780cdSTaniya Das 	.hwcg_reg = 0x2300c,
469*a4f780cdSTaniya Das 	.hwcg_bit = 1,
470*a4f780cdSTaniya Das 	.clkr = {
471*a4f780cdSTaniya Das 		.enable_reg = 0x2300c,
472*a4f780cdSTaniya Das 		.enable_mask = BIT(0),
473*a4f780cdSTaniya Das 		.hw.init = &(const struct clk_init_data) {
474*a4f780cdSTaniya Das 			.name = "nw_gcc_gpu_hscnoc_gfx_clk",
475*a4f780cdSTaniya Das 			.ops = &clk_branch2_ops,
476*a4f780cdSTaniya Das 		},
477*a4f780cdSTaniya Das 	},
478*a4f780cdSTaniya Das };
479*a4f780cdSTaniya Das 
480*a4f780cdSTaniya Das static struct clk_branch nw_gcc_gpu_smmu_vote_clk = {
481*a4f780cdSTaniya Das 	.halt_reg = 0x86038,
482*a4f780cdSTaniya Das 	.halt_check = BRANCH_HALT_VOTED,
483*a4f780cdSTaniya Das 	.clkr = {
484*a4f780cdSTaniya Das 		.enable_reg = 0x86038,
485*a4f780cdSTaniya Das 		.enable_mask = BIT(0),
486*a4f780cdSTaniya Das 		.hw.init = &(const struct clk_init_data) {
487*a4f780cdSTaniya Das 			.name = "nw_gcc_gpu_smmu_vote_clk",
488*a4f780cdSTaniya Das 			.ops = &clk_branch2_ops,
489*a4f780cdSTaniya Das 		},
490*a4f780cdSTaniya Das 	},
491*a4f780cdSTaniya Das };
492*a4f780cdSTaniya Das 
493*a4f780cdSTaniya Das static struct clk_branch nw_gcc_hscnoc_gpu_2_axi_clk = {
494*a4f780cdSTaniya Das 	.halt_reg = 0x24160,
495*a4f780cdSTaniya Das 	.halt_check = BRANCH_HALT_SKIP,
496*a4f780cdSTaniya Das 	.hwcg_reg = 0x24160,
497*a4f780cdSTaniya Das 	.hwcg_bit = 1,
498*a4f780cdSTaniya Das 	.clkr = {
499*a4f780cdSTaniya Das 		.enable_reg = 0x24160,
500*a4f780cdSTaniya Das 		.enable_mask = BIT(0),
501*a4f780cdSTaniya Das 		.hw.init = &(const struct clk_init_data) {
502*a4f780cdSTaniya Das 			.name = "nw_gcc_hscnoc_gpu_2_axi_clk",
503*a4f780cdSTaniya Das 			.ops = &clk_branch2_ops,
504*a4f780cdSTaniya Das 		},
505*a4f780cdSTaniya Das 	},
506*a4f780cdSTaniya Das };
507*a4f780cdSTaniya Das 
508*a4f780cdSTaniya Das static struct clk_branch nw_gcc_hscnoc_gpu_axi_clk = {
509*a4f780cdSTaniya Das 	.halt_reg = 0x23160,
510*a4f780cdSTaniya Das 	.halt_check = BRANCH_HALT_SKIP,
511*a4f780cdSTaniya Das 	.hwcg_reg = 0x23160,
512*a4f780cdSTaniya Das 	.hwcg_bit = 1,
513*a4f780cdSTaniya Das 	.clkr = {
514*a4f780cdSTaniya Das 		.enable_reg = 0x23160,
515*a4f780cdSTaniya Das 		.enable_mask = BIT(0),
516*a4f780cdSTaniya Das 		.hw.init = &(const struct clk_init_data) {
517*a4f780cdSTaniya Das 			.name = "nw_gcc_hscnoc_gpu_axi_clk",
518*a4f780cdSTaniya Das 			.ops = &clk_branch2_ops,
519*a4f780cdSTaniya Das 		},
520*a4f780cdSTaniya Das 	},
521*a4f780cdSTaniya Das };
522*a4f780cdSTaniya Das 
523*a4f780cdSTaniya Das static struct clk_branch nw_gcc_mmu_1_tcu_vote_clk = {
524*a4f780cdSTaniya Das 	.halt_reg = 0x86040,
525*a4f780cdSTaniya Das 	.halt_check = BRANCH_HALT_VOTED,
526*a4f780cdSTaniya Das 	.clkr = {
527*a4f780cdSTaniya Das 		.enable_reg = 0x86040,
528*a4f780cdSTaniya Das 		.enable_mask = BIT(0),
529*a4f780cdSTaniya Das 		.hw.init = &(const struct clk_init_data) {
530*a4f780cdSTaniya Das 			.name = "nw_gcc_mmu_1_tcu_vote_clk",
531*a4f780cdSTaniya Das 			.ops = &clk_branch2_ops,
532*a4f780cdSTaniya Das 		},
533*a4f780cdSTaniya Das 	},
534*a4f780cdSTaniya Das };
535*a4f780cdSTaniya Das 
536*a4f780cdSTaniya Das static struct clk_branch nw_gcc_video_axi0_clk = {
537*a4f780cdSTaniya Das 	.halt_reg = 0x1a008,
538*a4f780cdSTaniya Das 	.halt_check = BRANCH_HALT_SKIP,
539*a4f780cdSTaniya Das 	.hwcg_reg = 0x1a008,
540*a4f780cdSTaniya Das 	.hwcg_bit = 1,
541*a4f780cdSTaniya Das 	.clkr = {
542*a4f780cdSTaniya Das 		.enable_reg = 0x1a008,
543*a4f780cdSTaniya Das 		.enable_mask = BIT(0),
544*a4f780cdSTaniya Das 		.hw.init = &(const struct clk_init_data) {
545*a4f780cdSTaniya Das 			.name = "nw_gcc_video_axi0_clk",
546*a4f780cdSTaniya Das 			.ops = &clk_branch2_ops,
547*a4f780cdSTaniya Das 		},
548*a4f780cdSTaniya Das 	},
549*a4f780cdSTaniya Das };
550*a4f780cdSTaniya Das 
551*a4f780cdSTaniya Das static struct clk_branch nw_gcc_video_axi0c_clk = {
552*a4f780cdSTaniya Das 	.halt_reg = 0x1a01c,
553*a4f780cdSTaniya Das 	.halt_check = BRANCH_HALT_SKIP,
554*a4f780cdSTaniya Das 	.hwcg_reg = 0x1a01c,
555*a4f780cdSTaniya Das 	.hwcg_bit = 1,
556*a4f780cdSTaniya Das 	.clkr = {
557*a4f780cdSTaniya Das 		.enable_reg = 0x1a01c,
558*a4f780cdSTaniya Das 		.enable_mask = BIT(0),
559*a4f780cdSTaniya Das 		.hw.init = &(const struct clk_init_data) {
560*a4f780cdSTaniya Das 			.name = "nw_gcc_video_axi0c_clk",
561*a4f780cdSTaniya Das 			.ops = &clk_branch2_ops,
562*a4f780cdSTaniya Das 		},
563*a4f780cdSTaniya Das 	},
564*a4f780cdSTaniya Das };
565*a4f780cdSTaniya Das 
566*a4f780cdSTaniya Das static struct clk_branch nw_gcc_video_axi1_clk = {
567*a4f780cdSTaniya Das 	.halt_reg = 0x1a030,
568*a4f780cdSTaniya Das 	.halt_check = BRANCH_HALT_SKIP,
569*a4f780cdSTaniya Das 	.hwcg_reg = 0x1a030,
570*a4f780cdSTaniya Das 	.hwcg_bit = 1,
571*a4f780cdSTaniya Das 	.clkr = {
572*a4f780cdSTaniya Das 		.enable_reg = 0x1a030,
573*a4f780cdSTaniya Das 		.enable_mask = BIT(0),
574*a4f780cdSTaniya Das 		.hw.init = &(const struct clk_init_data) {
575*a4f780cdSTaniya Das 			.name = "nw_gcc_video_axi1_clk",
576*a4f780cdSTaniya Das 			.ops = &clk_branch2_ops,
577*a4f780cdSTaniya Das 		},
578*a4f780cdSTaniya Das 	},
579*a4f780cdSTaniya Das };
580*a4f780cdSTaniya Das 
581*a4f780cdSTaniya Das static struct clk_regmap *nw_gcc_nord_clocks[] = {
582*a4f780cdSTaniya Das 	[NW_GCC_ACMU_MUX_CLK] = &nw_gcc_acmu_mux_clk.clkr,
583*a4f780cdSTaniya Das 	[NW_GCC_CAMERA_HF_AXI_CLK] = &nw_gcc_camera_hf_axi_clk.clkr,
584*a4f780cdSTaniya Das 	[NW_GCC_CAMERA_SF_AXI_CLK] = &nw_gcc_camera_sf_axi_clk.clkr,
585*a4f780cdSTaniya Das 	[NW_GCC_CAMERA_TRIG_CLK] = &nw_gcc_camera_trig_clk.clkr,
586*a4f780cdSTaniya Das 	[NW_GCC_DISP_0_HF_AXI_CLK] = &nw_gcc_disp_0_hf_axi_clk.clkr,
587*a4f780cdSTaniya Das 	[NW_GCC_DISP_0_TRIG_CLK] = &nw_gcc_disp_0_trig_clk.clkr,
588*a4f780cdSTaniya Das 	[NW_GCC_DISP_1_HF_AXI_CLK] = &nw_gcc_disp_1_hf_axi_clk.clkr,
589*a4f780cdSTaniya Das 	[NW_GCC_DISP_1_TRIG_CLK] = &nw_gcc_disp_1_trig_clk.clkr,
590*a4f780cdSTaniya Das 	[NW_GCC_DPRX0_AXI_HF_CLK] = &nw_gcc_dprx0_axi_hf_clk.clkr,
591*a4f780cdSTaniya Das 	[NW_GCC_DPRX1_AXI_HF_CLK] = &nw_gcc_dprx1_axi_hf_clk.clkr,
592*a4f780cdSTaniya Das 	[NW_GCC_EVA_AXI0_CLK] = &nw_gcc_eva_axi0_clk.clkr,
593*a4f780cdSTaniya Das 	[NW_GCC_EVA_AXI0C_CLK] = &nw_gcc_eva_axi0c_clk.clkr,
594*a4f780cdSTaniya Das 	[NW_GCC_EVA_TRIG_CLK] = &nw_gcc_eva_trig_clk.clkr,
595*a4f780cdSTaniya Das 	[NW_GCC_FRQ_MEASURE_REF_CLK] = &nw_gcc_frq_measure_ref_clk.clkr,
596*a4f780cdSTaniya Das 	[NW_GCC_GP1_CLK] = &nw_gcc_gp1_clk.clkr,
597*a4f780cdSTaniya Das 	[NW_GCC_GP1_CLK_SRC] = &nw_gcc_gp1_clk_src.clkr,
598*a4f780cdSTaniya Das 	[NW_GCC_GP2_CLK] = &nw_gcc_gp2_clk.clkr,
599*a4f780cdSTaniya Das 	[NW_GCC_GP2_CLK_SRC] = &nw_gcc_gp2_clk_src.clkr,
600*a4f780cdSTaniya Das 	[NW_GCC_GPLL0] = &nw_gcc_gpll0.clkr,
601*a4f780cdSTaniya Das 	[NW_GCC_GPLL0_OUT_EVEN] = &nw_gcc_gpll0_out_even.clkr,
602*a4f780cdSTaniya Das 	[NW_GCC_GPU_2_GPLL0_CLK_SRC] = &nw_gcc_gpu_2_gpll0_clk_src.clkr,
603*a4f780cdSTaniya Das 	[NW_GCC_GPU_2_GPLL0_DIV_CLK_SRC] = &nw_gcc_gpu_2_gpll0_div_clk_src.clkr,
604*a4f780cdSTaniya Das 	[NW_GCC_GPU_2_HSCNOC_GFX_CLK] = &nw_gcc_gpu_2_hscnoc_gfx_clk.clkr,
605*a4f780cdSTaniya Das 	[NW_GCC_GPU_GPLL0_CLK_SRC] = &nw_gcc_gpu_gpll0_clk_src.clkr,
606*a4f780cdSTaniya Das 	[NW_GCC_GPU_GPLL0_DIV_CLK_SRC] = &nw_gcc_gpu_gpll0_div_clk_src.clkr,
607*a4f780cdSTaniya Das 	[NW_GCC_GPU_HSCNOC_GFX_CLK] = &nw_gcc_gpu_hscnoc_gfx_clk.clkr,
608*a4f780cdSTaniya Das 	[NW_GCC_GPU_SMMU_VOTE_CLK] = &nw_gcc_gpu_smmu_vote_clk.clkr,
609*a4f780cdSTaniya Das 	[NW_GCC_HSCNOC_GPU_2_AXI_CLK] = &nw_gcc_hscnoc_gpu_2_axi_clk.clkr,
610*a4f780cdSTaniya Das 	[NW_GCC_HSCNOC_GPU_AXI_CLK] = &nw_gcc_hscnoc_gpu_axi_clk.clkr,
611*a4f780cdSTaniya Das 	[NW_GCC_MMU_1_TCU_VOTE_CLK] = &nw_gcc_mmu_1_tcu_vote_clk.clkr,
612*a4f780cdSTaniya Das 	[NW_GCC_VIDEO_AXI0_CLK] = &nw_gcc_video_axi0_clk.clkr,
613*a4f780cdSTaniya Das 	[NW_GCC_VIDEO_AXI0C_CLK] = &nw_gcc_video_axi0c_clk.clkr,
614*a4f780cdSTaniya Das 	[NW_GCC_VIDEO_AXI1_CLK] = &nw_gcc_video_axi1_clk.clkr,
615*a4f780cdSTaniya Das };
616*a4f780cdSTaniya Das 
617*a4f780cdSTaniya Das static const struct qcom_reset_map nw_gcc_nord_resets[] = {
618*a4f780cdSTaniya Das 	[NW_GCC_CAMERA_BCR] = { 0x16000 },
619*a4f780cdSTaniya Das 	[NW_GCC_DISPLAY_0_BCR] = { 0x18000 },
620*a4f780cdSTaniya Das 	[NW_GCC_DISPLAY_1_BCR] = { 0x19000 },
621*a4f780cdSTaniya Das 	[NW_GCC_DPRX0_BCR] = { 0x29000 },
622*a4f780cdSTaniya Das 	[NW_GCC_DPRX1_BCR] = { 0x2a000 },
623*a4f780cdSTaniya Das 	[NW_GCC_EVA_BCR] = { 0x1b000 },
624*a4f780cdSTaniya Das 	[NW_GCC_GPU_2_BCR] = { 0x24000 },
625*a4f780cdSTaniya Das 	[NW_GCC_GPU_BCR] = { 0x23000 },
626*a4f780cdSTaniya Das 	[NW_GCC_VIDEO_BCR] = { 0x1a000 },
627*a4f780cdSTaniya Das };
628*a4f780cdSTaniya Das 
629*a4f780cdSTaniya Das static u32 nw_gcc_nord_critical_cbcrs[] = {
630*a4f780cdSTaniya Das 	0x16004, /* NW_GCC_CAMERA_AHB_CLK */
631*a4f780cdSTaniya Das 	0x16030, /* NW_GCC_CAMERA_XO_CLK */
632*a4f780cdSTaniya Das 	0x18004, /* NW_GCC_DISP_0_AHB_CLK */
633*a4f780cdSTaniya Das 	0x19004, /* NW_GCC_DISP_1_AHB_CLK */
634*a4f780cdSTaniya Das 	0x29018, /* NW_GCC_DPRX0_CFG_AHB_CLK */
635*a4f780cdSTaniya Das 	0x2a018, /* NW_GCC_DPRX1_CFG_AHB_CLK */
636*a4f780cdSTaniya Das 	0x1b004, /* NW_GCC_EVA_AHB_CLK */
637*a4f780cdSTaniya Das 	0x1b024, /* NW_GCC_EVA_XO_CLK */
638*a4f780cdSTaniya Das 	0x23004, /* NW_GCC_GPU_CFG_AHB_CLK */
639*a4f780cdSTaniya Das 	0x24004, /* NW_GCC_GPU_2_CFG_AHB_CLK */
640*a4f780cdSTaniya Das 	0x1a004, /* NW_GCC_VIDEO_AHB_CLK */
641*a4f780cdSTaniya Das 	0x1a044, /* NW_GCC_VIDEO_XO_CLK */
642*a4f780cdSTaniya Das };
643*a4f780cdSTaniya Das 
644*a4f780cdSTaniya Das static struct qcom_cc_driver_data nw_gcc_nord_driver_data = {
645*a4f780cdSTaniya Das 	.clk_cbcrs = nw_gcc_nord_critical_cbcrs,
646*a4f780cdSTaniya Das 	.num_clk_cbcrs = ARRAY_SIZE(nw_gcc_nord_critical_cbcrs),
647*a4f780cdSTaniya Das };
648*a4f780cdSTaniya Das 
649*a4f780cdSTaniya Das static const struct regmap_config nw_gcc_nord_regmap_config = {
650*a4f780cdSTaniya Das 	.reg_bits = 32,
651*a4f780cdSTaniya Das 	.reg_stride = 4,
652*a4f780cdSTaniya Das 	.val_bits = 32,
653*a4f780cdSTaniya Das 	.max_register = 0xf41f0,
654*a4f780cdSTaniya Das 	.fast_io = true,
655*a4f780cdSTaniya Das };
656*a4f780cdSTaniya Das 
657*a4f780cdSTaniya Das static const struct qcom_cc_desc nw_gcc_nord_desc = {
658*a4f780cdSTaniya Das 	.config = &nw_gcc_nord_regmap_config,
659*a4f780cdSTaniya Das 	.clks = nw_gcc_nord_clocks,
660*a4f780cdSTaniya Das 	.num_clks = ARRAY_SIZE(nw_gcc_nord_clocks),
661*a4f780cdSTaniya Das 	.resets = nw_gcc_nord_resets,
662*a4f780cdSTaniya Das 	.num_resets = ARRAY_SIZE(nw_gcc_nord_resets),
663*a4f780cdSTaniya Das 	.driver_data = &nw_gcc_nord_driver_data,
664*a4f780cdSTaniya Das };
665*a4f780cdSTaniya Das 
666*a4f780cdSTaniya Das static const struct of_device_id nw_gcc_nord_match_table[] = {
667*a4f780cdSTaniya Das 	{ .compatible = "qcom,nord-nwgcc" },
668*a4f780cdSTaniya Das 	{ }
669*a4f780cdSTaniya Das };
670*a4f780cdSTaniya Das MODULE_DEVICE_TABLE(of, nw_gcc_nord_match_table);
671*a4f780cdSTaniya Das 
672*a4f780cdSTaniya Das static int nw_gcc_nord_probe(struct platform_device *pdev)
673*a4f780cdSTaniya Das {
674*a4f780cdSTaniya Das 	return qcom_cc_probe(pdev, &nw_gcc_nord_desc);
675*a4f780cdSTaniya Das }
676*a4f780cdSTaniya Das 
677*a4f780cdSTaniya Das static struct platform_driver nw_gcc_nord_driver = {
678*a4f780cdSTaniya Das 	.probe = nw_gcc_nord_probe,
679*a4f780cdSTaniya Das 	.driver = {
680*a4f780cdSTaniya Das 		.name = "nwgcc-nord",
681*a4f780cdSTaniya Das 		.of_match_table = nw_gcc_nord_match_table,
682*a4f780cdSTaniya Das 	},
683*a4f780cdSTaniya Das };
684*a4f780cdSTaniya Das 
685*a4f780cdSTaniya Das module_platform_driver(nw_gcc_nord_driver);
686*a4f780cdSTaniya Das 
687*a4f780cdSTaniya Das MODULE_DESCRIPTION("QTI NWGCC NORD Driver");
688*a4f780cdSTaniya Das MODULE_LICENSE("GPL");
689