blob: 2e8ef93d576d5996322b187aa880899338127b8c [file] [log] [blame]
Deepak Katragadda575a45f2016-10-11 15:06:56 -07001/*
Deepak Katragadda125fe372017-03-01 10:28:24 -08002 * Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
Deepak Katragadda575a45f2016-10-11 15:06:56 -07003 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 and
6 * only version 2 as published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 */
13
14#include <linux/kernel.h>
15#include <linux/bitops.h>
16#include <linux/err.h>
17#include <linux/platform_device.h>
18#include <linux/module.h>
19#include <linux/of.h>
20#include <linux/of_device.h>
21#include <linux/clk.h>
22#include <linux/clk-provider.h>
23#include <linux/regmap.h>
24#include <linux/reset-controller.h>
25
Kyle Yan6a20fae2017-02-14 13:34:41 -080026#include <dt-bindings/clock/qcom,gcc-sdm845.h>
Deepak Katragadda575a45f2016-10-11 15:06:56 -070027
28#include "common.h"
29#include "clk-regmap.h"
30#include "clk-pll.h"
31#include "clk-rcg.h"
32#include "clk-branch.h"
33#include "reset.h"
34#include "clk-alpha-pll.h"
Kyle Yan6a20fae2017-02-14 13:34:41 -080035#include "vdd-level-sdm845.h"
Deepak Katragadda575a45f2016-10-11 15:06:56 -070036
37#define GCC_APCS_CLOCK_SLEEP_ENA_VOTE_OFFSET 0x52008
38#define CPUSS_AHB_CLK_SLEEP_ENA BIT(21)
Deepak Katragaddab666c982017-04-10 14:16:17 -070039#define SYS_NOC_CPUSS_AHB_CLK_SLEEP_ENA BIT(0)
Deepak Katragadda575a45f2016-10-11 15:06:56 -070040#define GCC_MMSS_MISC 0x09FFC
41#define GCC_GPU_MISC 0x71028
42
43#define F(f, s, h, m, n) { (f), (s), (2 * (h) - 1), (m), (n) }
44
45static DEFINE_VDD_REGULATORS(vdd_cx, VDD_CX_NUM, 1, vdd_corner);
46static DEFINE_VDD_REGULATORS(vdd_cx_ao, VDD_CX_NUM, 1, vdd_corner);
47
48enum {
49 P_BI_TCXO,
50 P_AUD_REF_CLK,
51 P_CORE_BI_PLL_TEST_SE,
52 P_GPLL0_OUT_EVEN,
53 P_GPLL0_OUT_MAIN,
Deepak Katragadda575a45f2016-10-11 15:06:56 -070054 P_GPLL4_OUT_MAIN,
55 P_SLEEP_CLK,
56};
57
58static const struct parent_map gcc_parent_map_0[] = {
59 { P_BI_TCXO, 0 },
60 { P_GPLL0_OUT_MAIN, 1 },
61 { P_GPLL0_OUT_EVEN, 6 },
62 { P_CORE_BI_PLL_TEST_SE, 7 },
63};
64
65static const char * const gcc_parent_names_0[] = {
66 "bi_tcxo",
67 "gpll0",
68 "gpll0_out_even",
69 "core_bi_pll_test_se",
70};
71
72static const struct parent_map gcc_parent_map_1[] = {
73 { P_BI_TCXO, 0 },
74 { P_GPLL0_OUT_MAIN, 1 },
75 { P_SLEEP_CLK, 5 },
76 { P_GPLL0_OUT_EVEN, 6 },
77 { P_CORE_BI_PLL_TEST_SE, 7 },
78};
79
80static const char * const gcc_parent_names_1[] = {
81 "bi_tcxo",
82 "gpll0",
83 "core_pi_sleep_clk",
84 "gpll0_out_even",
85 "core_bi_pll_test_se",
86};
87
88static const struct parent_map gcc_parent_map_2[] = {
89 { P_BI_TCXO, 0 },
90 { P_SLEEP_CLK, 5 },
91 { P_CORE_BI_PLL_TEST_SE, 7 },
92};
93
94static const char * const gcc_parent_names_2[] = {
95 "bi_tcxo",
96 "core_pi_sleep_clk",
97 "core_bi_pll_test_se",
98};
99
100static const struct parent_map gcc_parent_map_3[] = {
101 { P_BI_TCXO, 0 },
102 { P_GPLL0_OUT_MAIN, 1 },
103 { P_CORE_BI_PLL_TEST_SE, 7 },
104};
105
106static const char * const gcc_parent_names_3[] = {
107 "bi_tcxo",
108 "gpll0",
109 "core_bi_pll_test_se",
110};
111
112static const struct parent_map gcc_parent_map_4[] = {
113 { P_BI_TCXO, 0 },
114 { P_CORE_BI_PLL_TEST_SE, 7 },
115};
116
117static const char * const gcc_parent_names_4[] = {
118 "bi_tcxo",
119 "core_bi_pll_test_se",
120};
121
122static const struct parent_map gcc_parent_map_5[] = {
123 { P_BI_TCXO, 0 },
124 { P_GPLL0_OUT_MAIN, 1 },
Deepak Katragadda125fe372017-03-01 10:28:24 -0800125 { P_GPLL4_OUT_MAIN, 5 },
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700126 { P_GPLL0_OUT_EVEN, 6 },
127 { P_CORE_BI_PLL_TEST_SE, 7 },
128};
129
130static const char * const gcc_parent_names_5[] = {
131 "bi_tcxo",
132 "gpll0",
Deepak Katragadda125fe372017-03-01 10:28:24 -0800133 "gpll4",
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700134 "gpll0_out_even",
135 "core_bi_pll_test_se",
136};
137
138static const struct parent_map gcc_parent_map_6[] = {
139 { P_BI_TCXO, 0 },
140 { P_GPLL0_OUT_MAIN, 1 },
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700141 { P_AUD_REF_CLK, 2 },
142 { P_GPLL0_OUT_EVEN, 6 },
143 { P_CORE_BI_PLL_TEST_SE, 7 },
144};
145
Deepak Katragadda125fe372017-03-01 10:28:24 -0800146static const char * const gcc_parent_names_6[] = {
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700147 "bi_tcxo",
148 "gpll0",
149 "aud_ref_clk",
150 "gpll0_out_even",
151 "core_bi_pll_test_se",
152};
153
Deepak Katragaddad075ba32017-04-06 13:45:47 -0700154static struct clk_dummy measure_only_snoc_clk = {
155 .rrate = 1000,
156 .hw.init = &(struct clk_init_data){
157 .name = "measure_only_snoc_clk",
158 .ops = &clk_dummy_ops,
159 },
160};
161
162static struct clk_dummy measure_only_cnoc_clk = {
163 .rrate = 1000,
164 .hw.init = &(struct clk_init_data){
165 .name = "measure_only_cnoc_clk",
166 .ops = &clk_dummy_ops,
167 },
168};
169
170static struct clk_dummy measure_only_bimc_clk = {
171 .rrate = 1000,
172 .hw.init = &(struct clk_init_data){
173 .name = "measure_only_bimc_clk",
174 .ops = &clk_dummy_ops,
175 },
176};
177
178static struct clk_dummy measure_only_ipa_2x_clk = {
179 .rrate = 1000,
180 .hw.init = &(struct clk_init_data){
181 .name = "measure_only_ipa_2x_clk",
182 .ops = &clk_dummy_ops,
183 },
184};
185
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700186static struct pll_vco fabia_vco[] = {
187 { 250000000, 2000000000, 0 },
188 { 125000000, 1000000000, 1 },
189};
190
191static struct clk_alpha_pll gpll0 = {
192 .offset = 0x0,
193 .vco_table = fabia_vco,
194 .num_vco = ARRAY_SIZE(fabia_vco),
195 .type = FABIA_PLL,
196 .clkr = {
197 .enable_reg = 0x52000,
198 .enable_mask = BIT(0),
199 .hw.init = &(struct clk_init_data){
200 .name = "gpll0",
201 .parent_names = (const char *[]){ "bi_tcxo" },
202 .num_parents = 1,
203 .ops = &clk_fabia_fixed_pll_ops,
Deepak Katragaddad04d2ca2017-03-30 11:03:20 -0700204 VDD_CX_FMAX_MAP4(
205 MIN, 615000000,
206 LOW, 1066000000,
207 LOW_L1, 1600000000,
208 NOMINAL, 2000000000),
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700209 },
210 },
211};
212
213static const struct clk_div_table post_div_table_fabia_even[] = {
214 { 0x0, 1 },
215 { 0x1, 2 },
216 { 0x3, 4 },
217 { 0x7, 8 },
Stephen Boyd9e3b0a32017-03-07 05:30:31 -0800218 { }
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700219};
220
221static struct clk_alpha_pll_postdiv gpll0_out_even = {
222 .offset = 0x0,
223 .post_div_shift = 8,
224 .post_div_table = post_div_table_fabia_even,
225 .num_post_div = ARRAY_SIZE(post_div_table_fabia_even),
226 .width = 4,
227 .clkr.hw.init = &(struct clk_init_data){
228 .name = "gpll0_out_even",
229 .parent_names = (const char *[]){ "gpll0" },
230 .num_parents = 1,
231 .ops = &clk_generic_pll_postdiv_ops,
232 },
233};
234
235static struct clk_alpha_pll gpll1 = {
236 .offset = 0x1000,
237 .vco_table = fabia_vco,
238 .num_vco = ARRAY_SIZE(fabia_vco),
239 .type = FABIA_PLL,
240 .clkr = {
241 .enable_reg = 0x52000,
242 .enable_mask = BIT(1),
243 .hw.init = &(struct clk_init_data){
244 .name = "gpll1",
245 .parent_names = (const char *[]){ "bi_tcxo" },
246 .num_parents = 1,
247 .ops = &clk_fabia_fixed_pll_ops,
Deepak Katragaddad04d2ca2017-03-30 11:03:20 -0700248 VDD_CX_FMAX_MAP4(
249 MIN, 615000000,
250 LOW, 1066000000,
251 LOW_L1, 1600000000,
252 NOMINAL, 2000000000),
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700253 },
254 },
255};
256
257static const struct freq_tbl ftbl_gcc_cpuss_ahb_clk_src[] = {
258 F(19200000, P_BI_TCXO, 1, 0, 0),
259 F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0),
260 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
261 { }
262};
263
264static struct clk_rcg2 gcc_cpuss_ahb_clk_src = {
265 .cmd_rcgr = 0x48014,
266 .mnd_width = 0,
267 .hid_width = 5,
268 .parent_map = gcc_parent_map_0,
269 .freq_tbl = ftbl_gcc_cpuss_ahb_clk_src,
270 .clkr.hw.init = &(struct clk_init_data){
271 .name = "gcc_cpuss_ahb_clk_src",
272 .parent_names = gcc_parent_names_0,
273 .num_parents = 4,
274 .flags = CLK_SET_RATE_PARENT,
275 .ops = &clk_rcg2_ops,
276 VDD_CX_FMAX_MAP3_AO(
277 MIN, 19200000,
278 LOW, 50000000,
279 NOMINAL, 100000000),
280 },
281};
282
283static const struct freq_tbl ftbl_gcc_cpuss_rbcpr_clk_src[] = {
284 F(19200000, P_BI_TCXO, 1, 0, 0),
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700285 { }
286};
287
288static struct clk_rcg2 gcc_cpuss_rbcpr_clk_src = {
289 .cmd_rcgr = 0x4815c,
290 .mnd_width = 0,
291 .hid_width = 5,
292 .parent_map = gcc_parent_map_3,
293 .freq_tbl = ftbl_gcc_cpuss_rbcpr_clk_src,
294 .clkr.hw.init = &(struct clk_init_data){
295 .name = "gcc_cpuss_rbcpr_clk_src",
296 .parent_names = gcc_parent_names_3,
297 .num_parents = 3,
298 .flags = CLK_SET_RATE_PARENT,
299 .ops = &clk_rcg2_ops,
Deepak Katragadda125fe372017-03-01 10:28:24 -0800300 VDD_CX_FMAX_MAP1(
301 MIN, 19200000),
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700302 },
303};
304
305static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
306 F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
307 F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
308 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
309 F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
310 { }
311};
312
313static struct clk_rcg2 gcc_gp1_clk_src = {
314 .cmd_rcgr = 0x64004,
315 .mnd_width = 8,
316 .hid_width = 5,
317 .parent_map = gcc_parent_map_1,
318 .freq_tbl = ftbl_gcc_gp1_clk_src,
319 .clkr.hw.init = &(struct clk_init_data){
320 .name = "gcc_gp1_clk_src",
321 .parent_names = gcc_parent_names_1,
322 .num_parents = 5,
323 .flags = CLK_SET_RATE_PARENT,
324 .ops = &clk_rcg2_ops,
325 VDD_CX_FMAX_MAP4(
326 MIN, 19200000,
327 LOWER, 50000000,
328 LOW, 100000000,
329 NOMINAL, 200000000),
330 },
331};
332
333static struct clk_rcg2 gcc_gp2_clk_src = {
334 .cmd_rcgr = 0x65004,
335 .mnd_width = 8,
336 .hid_width = 5,
337 .parent_map = gcc_parent_map_1,
338 .freq_tbl = ftbl_gcc_gp1_clk_src,
339 .clkr.hw.init = &(struct clk_init_data){
340 .name = "gcc_gp2_clk_src",
341 .parent_names = gcc_parent_names_1,
342 .num_parents = 5,
343 .flags = CLK_SET_RATE_PARENT,
344 .ops = &clk_rcg2_ops,
345 VDD_CX_FMAX_MAP4(
346 MIN, 19200000,
347 LOWER, 50000000,
348 LOW, 100000000,
349 NOMINAL, 200000000),
350 },
351};
352
353static struct clk_rcg2 gcc_gp3_clk_src = {
354 .cmd_rcgr = 0x66004,
355 .mnd_width = 8,
356 .hid_width = 5,
357 .parent_map = gcc_parent_map_1,
358 .freq_tbl = ftbl_gcc_gp1_clk_src,
359 .clkr.hw.init = &(struct clk_init_data){
360 .name = "gcc_gp3_clk_src",
361 .parent_names = gcc_parent_names_1,
362 .num_parents = 5,
363 .flags = CLK_SET_RATE_PARENT,
364 .ops = &clk_rcg2_ops,
365 VDD_CX_FMAX_MAP4(
366 MIN, 19200000,
367 LOWER, 50000000,
368 LOW, 100000000,
369 NOMINAL, 200000000),
370 },
371};
372
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700373static const struct freq_tbl ftbl_gcc_pcie_0_aux_clk_src[] = {
374 F(9600000, P_BI_TCXO, 2, 0, 0),
375 F(19200000, P_BI_TCXO, 1, 0, 0),
376 { }
377};
378
379static struct clk_rcg2 gcc_pcie_0_aux_clk_src = {
380 .cmd_rcgr = 0x6b028,
381 .mnd_width = 16,
382 .hid_width = 5,
383 .parent_map = gcc_parent_map_2,
384 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
385 .clkr.hw.init = &(struct clk_init_data){
386 .name = "gcc_pcie_0_aux_clk_src",
387 .parent_names = gcc_parent_names_2,
388 .num_parents = 3,
389 .flags = CLK_SET_RATE_PARENT,
390 .ops = &clk_rcg2_ops,
391 VDD_CX_FMAX_MAP2(
392 MIN, 9600000,
393 LOW, 19200000),
394 },
395};
396
397static struct clk_rcg2 gcc_pcie_1_aux_clk_src = {
398 .cmd_rcgr = 0x8d028,
399 .mnd_width = 16,
400 .hid_width = 5,
401 .parent_map = gcc_parent_map_2,
402 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
403 .clkr.hw.init = &(struct clk_init_data){
404 .name = "gcc_pcie_1_aux_clk_src",
405 .parent_names = gcc_parent_names_2,
406 .num_parents = 3,
407 .flags = CLK_SET_RATE_PARENT,
408 .ops = &clk_rcg2_ops,
409 VDD_CX_FMAX_MAP2(
410 MIN, 9600000,
411 LOW, 19200000),
412 },
413};
414
415static const struct freq_tbl ftbl_gcc_pcie_phy_refgen_clk_src[] = {
416 F(19200000, P_BI_TCXO, 1, 0, 0),
417 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
418 { }
419};
420
421static struct clk_rcg2 gcc_pcie_phy_refgen_clk_src = {
422 .cmd_rcgr = 0x6f014,
423 .mnd_width = 0,
424 .hid_width = 5,
425 .parent_map = gcc_parent_map_0,
426 .freq_tbl = ftbl_gcc_pcie_phy_refgen_clk_src,
427 .clkr.hw.init = &(struct clk_init_data){
428 .name = "gcc_pcie_phy_refgen_clk_src",
429 .parent_names = gcc_parent_names_0,
430 .num_parents = 4,
431 .flags = CLK_SET_RATE_PARENT,
432 .ops = &clk_rcg2_ops,
433 VDD_CX_FMAX_MAP2(
434 MIN, 19200000,
435 LOW, 100000000),
436 },
437};
438
439static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
440 F(19200000, P_BI_TCXO, 1, 0, 0),
441 F(60000000, P_GPLL0_OUT_MAIN, 10, 0, 0),
442 { }
443};
444
445static struct clk_rcg2 gcc_pdm2_clk_src = {
446 .cmd_rcgr = 0x33010,
447 .mnd_width = 0,
448 .hid_width = 5,
449 .parent_map = gcc_parent_map_0,
450 .freq_tbl = ftbl_gcc_pdm2_clk_src,
451 .clkr.hw.init = &(struct clk_init_data){
452 .name = "gcc_pdm2_clk_src",
453 .parent_names = gcc_parent_names_0,
454 .num_parents = 4,
455 .flags = CLK_SET_RATE_PARENT,
456 .ops = &clk_rcg2_ops,
457 VDD_CX_FMAX_MAP3(
458 MIN, 9600000,
459 LOWER, 19200000,
460 LOW, 60000000),
461 },
462};
463
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700464static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = {
Deepak Katragadda125fe372017-03-01 10:28:24 -0800465 F(7372800, P_GPLL0_OUT_EVEN, 1, 384, 15625),
466 F(14745600, P_GPLL0_OUT_EVEN, 1, 768, 15625),
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700467 F(19200000, P_BI_TCXO, 1, 0, 0),
Deepak Katragadda125fe372017-03-01 10:28:24 -0800468 F(29491200, P_GPLL0_OUT_EVEN, 1, 1536, 15625),
469 F(32000000, P_GPLL0_OUT_EVEN, 1, 8, 75),
470 F(48000000, P_GPLL0_OUT_EVEN, 1, 4, 25),
471 F(64000000, P_GPLL0_OUT_EVEN, 1, 16, 75),
472 F(80000000, P_GPLL0_OUT_EVEN, 1, 4, 15),
473 F(96000000, P_GPLL0_OUT_EVEN, 1, 8, 25),
474 F(100000000, P_GPLL0_OUT_EVEN, 3, 0, 0),
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700475 { }
476};
477
478static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = {
479 .cmd_rcgr = 0x17034,
480 .mnd_width = 16,
481 .hid_width = 5,
482 .parent_map = gcc_parent_map_0,
483 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
484 .enable_safe_config = true,
485 .clkr.hw.init = &(struct clk_init_data){
486 .name = "gcc_qupv3_wrap0_s0_clk_src",
487 .parent_names = gcc_parent_names_0,
488 .num_parents = 4,
489 .flags = CLK_SET_RATE_PARENT,
490 .ops = &clk_rcg2_ops,
Deepak Katragadda125fe372017-03-01 10:28:24 -0800491 VDD_CX_FMAX_MAP3(
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700492 MIN, 19200000,
493 LOWER, 75000000,
Deepak Katragadda125fe372017-03-01 10:28:24 -0800494 LOW, 100000000),
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700495 },
496};
497
498static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = {
499 .cmd_rcgr = 0x17164,
500 .mnd_width = 16,
501 .hid_width = 5,
502 .parent_map = gcc_parent_map_0,
503 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
504 .enable_safe_config = true,
505 .clkr.hw.init = &(struct clk_init_data){
506 .name = "gcc_qupv3_wrap0_s1_clk_src",
507 .parent_names = gcc_parent_names_0,
508 .num_parents = 4,
509 .flags = CLK_SET_RATE_PARENT,
510 .ops = &clk_rcg2_ops,
Deepak Katragadda125fe372017-03-01 10:28:24 -0800511 VDD_CX_FMAX_MAP3(
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700512 MIN, 19200000,
513 LOWER, 75000000,
Deepak Katragadda125fe372017-03-01 10:28:24 -0800514 LOW, 100000000),
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700515 },
516};
517
518static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = {
519 .cmd_rcgr = 0x17294,
520 .mnd_width = 16,
521 .hid_width = 5,
522 .parent_map = gcc_parent_map_0,
523 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
524 .enable_safe_config = true,
525 .clkr.hw.init = &(struct clk_init_data){
526 .name = "gcc_qupv3_wrap0_s2_clk_src",
527 .parent_names = gcc_parent_names_0,
528 .num_parents = 4,
529 .flags = CLK_SET_RATE_PARENT,
530 .ops = &clk_rcg2_ops,
Deepak Katragadda125fe372017-03-01 10:28:24 -0800531 VDD_CX_FMAX_MAP3(
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700532 MIN, 19200000,
533 LOWER, 75000000,
Deepak Katragadda125fe372017-03-01 10:28:24 -0800534 LOW, 100000000),
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700535 },
536};
537
538static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = {
539 .cmd_rcgr = 0x173c4,
540 .mnd_width = 16,
541 .hid_width = 5,
542 .parent_map = gcc_parent_map_0,
543 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
544 .enable_safe_config = true,
545 .clkr.hw.init = &(struct clk_init_data){
546 .name = "gcc_qupv3_wrap0_s3_clk_src",
547 .parent_names = gcc_parent_names_0,
548 .num_parents = 4,
549 .flags = CLK_SET_RATE_PARENT,
550 .ops = &clk_rcg2_ops,
Deepak Katragadda125fe372017-03-01 10:28:24 -0800551 VDD_CX_FMAX_MAP3(
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700552 MIN, 19200000,
553 LOWER, 75000000,
Deepak Katragadda125fe372017-03-01 10:28:24 -0800554 LOW, 100000000),
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700555 },
556};
557
558static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = {
559 .cmd_rcgr = 0x174f4,
560 .mnd_width = 16,
561 .hid_width = 5,
562 .parent_map = gcc_parent_map_0,
563 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
564 .enable_safe_config = true,
565 .clkr.hw.init = &(struct clk_init_data){
566 .name = "gcc_qupv3_wrap0_s4_clk_src",
567 .parent_names = gcc_parent_names_0,
568 .num_parents = 4,
569 .flags = CLK_SET_RATE_PARENT,
570 .ops = &clk_rcg2_ops,
Deepak Katragadda125fe372017-03-01 10:28:24 -0800571 VDD_CX_FMAX_MAP3(
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700572 MIN, 19200000,
573 LOWER, 75000000,
Deepak Katragadda125fe372017-03-01 10:28:24 -0800574 LOW, 100000000),
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700575 },
576};
577
578static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = {
579 .cmd_rcgr = 0x17624,
580 .mnd_width = 16,
581 .hid_width = 5,
582 .parent_map = gcc_parent_map_0,
583 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
584 .enable_safe_config = true,
585 .clkr.hw.init = &(struct clk_init_data){
586 .name = "gcc_qupv3_wrap0_s5_clk_src",
587 .parent_names = gcc_parent_names_0,
588 .num_parents = 4,
589 .flags = CLK_SET_RATE_PARENT,
590 .ops = &clk_rcg2_ops,
Deepak Katragadda125fe372017-03-01 10:28:24 -0800591 VDD_CX_FMAX_MAP3(
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700592 MIN, 19200000,
593 LOWER, 75000000,
Deepak Katragadda125fe372017-03-01 10:28:24 -0800594 LOW, 100000000),
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700595 },
596};
597
598static struct clk_rcg2 gcc_qupv3_wrap0_s6_clk_src = {
599 .cmd_rcgr = 0x17754,
600 .mnd_width = 16,
601 .hid_width = 5,
602 .parent_map = gcc_parent_map_0,
603 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
604 .enable_safe_config = true,
605 .clkr.hw.init = &(struct clk_init_data){
606 .name = "gcc_qupv3_wrap0_s6_clk_src",
607 .parent_names = gcc_parent_names_0,
608 .num_parents = 4,
609 .flags = CLK_SET_RATE_PARENT,
610 .ops = &clk_rcg2_ops,
Deepak Katragadda125fe372017-03-01 10:28:24 -0800611 VDD_CX_FMAX_MAP3(
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700612 MIN, 19200000,
613 LOWER, 75000000,
Deepak Katragadda125fe372017-03-01 10:28:24 -0800614 LOW, 100000000),
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700615 },
616};
617
618static struct clk_rcg2 gcc_qupv3_wrap0_s7_clk_src = {
619 .cmd_rcgr = 0x17884,
620 .mnd_width = 16,
621 .hid_width = 5,
622 .parent_map = gcc_parent_map_0,
623 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
624 .enable_safe_config = true,
625 .clkr.hw.init = &(struct clk_init_data){
626 .name = "gcc_qupv3_wrap0_s7_clk_src",
627 .parent_names = gcc_parent_names_0,
628 .num_parents = 4,
629 .flags = CLK_SET_RATE_PARENT,
630 .ops = &clk_rcg2_ops,
Deepak Katragadda125fe372017-03-01 10:28:24 -0800631 VDD_CX_FMAX_MAP3(
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700632 MIN, 19200000,
633 LOWER, 75000000,
Deepak Katragadda125fe372017-03-01 10:28:24 -0800634 LOW, 100000000),
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700635 },
636};
637
638static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = {
639 .cmd_rcgr = 0x18018,
640 .mnd_width = 16,
641 .hid_width = 5,
642 .parent_map = gcc_parent_map_0,
643 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
644 .enable_safe_config = true,
645 .clkr.hw.init = &(struct clk_init_data){
646 .name = "gcc_qupv3_wrap1_s0_clk_src",
647 .parent_names = gcc_parent_names_0,
648 .num_parents = 4,
649 .flags = CLK_SET_RATE_PARENT,
650 .ops = &clk_rcg2_ops,
Deepak Katragadda125fe372017-03-01 10:28:24 -0800651 VDD_CX_FMAX_MAP3(
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700652 MIN, 19200000,
653 LOWER, 75000000,
Deepak Katragadda125fe372017-03-01 10:28:24 -0800654 LOW, 100000000),
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700655 },
656};
657
658static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = {
659 .cmd_rcgr = 0x18148,
660 .mnd_width = 16,
661 .hid_width = 5,
662 .parent_map = gcc_parent_map_0,
663 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
664 .enable_safe_config = true,
665 .clkr.hw.init = &(struct clk_init_data){
666 .name = "gcc_qupv3_wrap1_s1_clk_src",
667 .parent_names = gcc_parent_names_0,
668 .num_parents = 4,
669 .flags = CLK_SET_RATE_PARENT,
670 .ops = &clk_rcg2_ops,
Deepak Katragadda125fe372017-03-01 10:28:24 -0800671 VDD_CX_FMAX_MAP3(
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700672 MIN, 19200000,
673 LOWER, 75000000,
Deepak Katragadda125fe372017-03-01 10:28:24 -0800674 LOW, 100000000),
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700675 },
676};
677
678static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = {
679 .cmd_rcgr = 0x18278,
680 .mnd_width = 16,
681 .hid_width = 5,
682 .parent_map = gcc_parent_map_0,
683 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
684 .enable_safe_config = true,
685 .clkr.hw.init = &(struct clk_init_data){
686 .name = "gcc_qupv3_wrap1_s2_clk_src",
687 .parent_names = gcc_parent_names_0,
688 .num_parents = 4,
689 .flags = CLK_SET_RATE_PARENT,
690 .ops = &clk_rcg2_ops,
Deepak Katragadda125fe372017-03-01 10:28:24 -0800691 VDD_CX_FMAX_MAP3(
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700692 MIN, 19200000,
693 LOWER, 75000000,
Deepak Katragadda125fe372017-03-01 10:28:24 -0800694 LOW, 100000000),
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700695 },
696};
697
698static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = {
699 .cmd_rcgr = 0x183a8,
700 .mnd_width = 16,
701 .hid_width = 5,
702 .parent_map = gcc_parent_map_0,
703 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
704 .enable_safe_config = true,
705 .clkr.hw.init = &(struct clk_init_data){
706 .name = "gcc_qupv3_wrap1_s3_clk_src",
707 .parent_names = gcc_parent_names_0,
708 .num_parents = 4,
709 .flags = CLK_SET_RATE_PARENT,
710 .ops = &clk_rcg2_ops,
Deepak Katragadda125fe372017-03-01 10:28:24 -0800711 VDD_CX_FMAX_MAP3(
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700712 MIN, 19200000,
713 LOWER, 75000000,
Deepak Katragadda125fe372017-03-01 10:28:24 -0800714 LOW, 100000000),
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700715 },
716};
717
718static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = {
719 .cmd_rcgr = 0x184d8,
720 .mnd_width = 16,
721 .hid_width = 5,
722 .parent_map = gcc_parent_map_0,
723 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
724 .enable_safe_config = true,
725 .clkr.hw.init = &(struct clk_init_data){
726 .name = "gcc_qupv3_wrap1_s4_clk_src",
727 .parent_names = gcc_parent_names_0,
728 .num_parents = 4,
729 .flags = CLK_SET_RATE_PARENT,
730 .ops = &clk_rcg2_ops,
Deepak Katragadda125fe372017-03-01 10:28:24 -0800731 VDD_CX_FMAX_MAP3(
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700732 MIN, 19200000,
733 LOWER, 75000000,
Deepak Katragadda125fe372017-03-01 10:28:24 -0800734 LOW, 100000000),
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700735 },
736};
737
738static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = {
739 .cmd_rcgr = 0x18608,
740 .mnd_width = 16,
741 .hid_width = 5,
742 .parent_map = gcc_parent_map_0,
743 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
744 .enable_safe_config = true,
745 .clkr.hw.init = &(struct clk_init_data){
746 .name = "gcc_qupv3_wrap1_s5_clk_src",
747 .parent_names = gcc_parent_names_0,
748 .num_parents = 4,
749 .flags = CLK_SET_RATE_PARENT,
750 .ops = &clk_rcg2_ops,
Deepak Katragadda125fe372017-03-01 10:28:24 -0800751 VDD_CX_FMAX_MAP3(
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700752 MIN, 19200000,
753 LOWER, 75000000,
Deepak Katragadda125fe372017-03-01 10:28:24 -0800754 LOW, 100000000),
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700755 },
756};
757
758static struct clk_rcg2 gcc_qupv3_wrap1_s6_clk_src = {
759 .cmd_rcgr = 0x18738,
760 .mnd_width = 16,
761 .hid_width = 5,
762 .parent_map = gcc_parent_map_0,
763 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
764 .enable_safe_config = true,
765 .clkr.hw.init = &(struct clk_init_data){
766 .name = "gcc_qupv3_wrap1_s6_clk_src",
767 .parent_names = gcc_parent_names_0,
768 .num_parents = 4,
769 .flags = CLK_SET_RATE_PARENT,
770 .ops = &clk_rcg2_ops,
Deepak Katragadda125fe372017-03-01 10:28:24 -0800771 VDD_CX_FMAX_MAP3(
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700772 MIN, 19200000,
773 LOWER, 75000000,
Deepak Katragadda125fe372017-03-01 10:28:24 -0800774 LOW, 100000000),
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700775 },
776};
777
778static struct clk_rcg2 gcc_qupv3_wrap1_s7_clk_src = {
779 .cmd_rcgr = 0x18868,
780 .mnd_width = 16,
781 .hid_width = 5,
782 .parent_map = gcc_parent_map_0,
783 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
784 .enable_safe_config = true,
785 .clkr.hw.init = &(struct clk_init_data){
786 .name = "gcc_qupv3_wrap1_s7_clk_src",
787 .parent_names = gcc_parent_names_0,
788 .num_parents = 4,
789 .flags = CLK_SET_RATE_PARENT,
790 .ops = &clk_rcg2_ops,
Deepak Katragadda125fe372017-03-01 10:28:24 -0800791 VDD_CX_FMAX_MAP3(
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700792 MIN, 19200000,
793 LOWER, 75000000,
Deepak Katragadda125fe372017-03-01 10:28:24 -0800794 LOW, 100000000),
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700795 },
796};
797
798static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {
799 F(19200000, P_BI_TCXO, 1, 0, 0),
800 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
801 F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
802 { }
803};
804
805static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {
806 .cmd_rcgr = 0x1400c,
807 .mnd_width = 8,
808 .hid_width = 5,
Deepak Katragadda125fe372017-03-01 10:28:24 -0800809 .parent_map = gcc_parent_map_5,
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700810 .freq_tbl = ftbl_gcc_sdcc2_apps_clk_src,
811 .enable_safe_config = true,
812 .clkr.hw.init = &(struct clk_init_data){
813 .name = "gcc_sdcc2_apps_clk_src",
Deepak Katragadda125fe372017-03-01 10:28:24 -0800814 .parent_names = gcc_parent_names_5,
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700815 .num_parents = 5,
816 .flags = CLK_SET_RATE_PARENT,
817 .ops = &clk_rcg2_ops,
818 VDD_CX_FMAX_MAP4(
819 MIN, 9600000,
820 LOWER, 19200000,
821 LOW, 100000000,
822 LOW_L1, 200000000),
823 },
824};
825
826static const struct freq_tbl ftbl_gcc_sdcc4_apps_clk_src[] = {
827 F(9600000, P_BI_TCXO, 2, 0, 0),
828 F(19200000, P_BI_TCXO, 1, 0, 0),
829 F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0),
830 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
831 { }
832};
833
834static struct clk_rcg2 gcc_sdcc4_apps_clk_src = {
835 .cmd_rcgr = 0x1600c,
836 .mnd_width = 8,
837 .hid_width = 5,
838 .parent_map = gcc_parent_map_3,
839 .freq_tbl = ftbl_gcc_sdcc4_apps_clk_src,
Deepak Katragadda125fe372017-03-01 10:28:24 -0800840 .enable_safe_config = true,
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700841 .clkr.hw.init = &(struct clk_init_data){
842 .name = "gcc_sdcc4_apps_clk_src",
843 .parent_names = gcc_parent_names_3,
844 .num_parents = 3,
845 .flags = CLK_SET_RATE_PARENT,
846 .ops = &clk_rcg2_ops,
847 VDD_CX_FMAX_MAP4(
848 MIN, 9600000,
849 LOWER, 19200000,
850 LOW, 50000000,
851 NOMINAL, 100000000),
852 },
853};
854
855static const struct freq_tbl ftbl_gcc_tsif_ref_clk_src[] = {
856 F(105495, P_BI_TCXO, 2, 1, 91),
857 { }
858};
859
860static struct clk_rcg2 gcc_tsif_ref_clk_src = {
861 .cmd_rcgr = 0x36010,
862 .mnd_width = 8,
863 .hid_width = 5,
Deepak Katragadda125fe372017-03-01 10:28:24 -0800864 .parent_map = gcc_parent_map_6,
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700865 .freq_tbl = ftbl_gcc_tsif_ref_clk_src,
866 .clkr.hw.init = &(struct clk_init_data){
867 .name = "gcc_tsif_ref_clk_src",
Deepak Katragadda125fe372017-03-01 10:28:24 -0800868 .parent_names = gcc_parent_names_6,
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700869 .num_parents = 5,
870 .flags = CLK_SET_RATE_PARENT,
871 .ops = &clk_rcg2_ops,
872 VDD_CX_FMAX_MAP1(
873 MIN, 105495),
874 },
875};
876
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700877static struct clk_rcg2 gcc_ufs_card_axi_clk_src = {
878 .cmd_rcgr = 0x7501c,
879 .mnd_width = 8,
880 .hid_width = 5,
881 .parent_map = gcc_parent_map_0,
Deepak Katragadda125fe372017-03-01 10:28:24 -0800882 .freq_tbl = ftbl_gcc_gp1_clk_src,
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700883 .enable_safe_config = true,
884 .clkr.hw.init = &(struct clk_init_data){
885 .name = "gcc_ufs_card_axi_clk_src",
886 .parent_names = gcc_parent_names_0,
887 .num_parents = 4,
888 .flags = CLK_SET_RATE_PARENT,
889 .ops = &clk_rcg2_ops,
Deepak Katragadda125fe372017-03-01 10:28:24 -0800890 VDD_CX_FMAX_MAP3(
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700891 MIN, 50000000,
892 LOW, 100000000,
Deepak Katragadda125fe372017-03-01 10:28:24 -0800893 NOMINAL, 200000000),
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700894 },
895};
896
897static const struct freq_tbl ftbl_gcc_ufs_card_ice_core_clk_src[] = {
898 F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0),
899 F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
900 F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
901 F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
902 { }
903};
904
905static struct clk_rcg2 gcc_ufs_card_ice_core_clk_src = {
906 .cmd_rcgr = 0x7505c,
907 .mnd_width = 0,
908 .hid_width = 5,
909 .parent_map = gcc_parent_map_0,
910 .freq_tbl = ftbl_gcc_ufs_card_ice_core_clk_src,
911 .enable_safe_config = true,
912 .clkr.hw.init = &(struct clk_init_data){
913 .name = "gcc_ufs_card_ice_core_clk_src",
914 .parent_names = gcc_parent_names_0,
915 .num_parents = 4,
916 .flags = CLK_SET_RATE_PARENT,
917 .ops = &clk_rcg2_ops,
918 VDD_CX_FMAX_MAP3(
919 MIN, 75000000,
920 LOW, 150000000,
921 NOMINAL, 300000000),
922 },
923};
924
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700925static struct clk_rcg2 gcc_ufs_card_phy_aux_clk_src = {
926 .cmd_rcgr = 0x75090,
927 .mnd_width = 0,
928 .hid_width = 5,
929 .parent_map = gcc_parent_map_4,
Deepak Katragadda125fe372017-03-01 10:28:24 -0800930 .freq_tbl = ftbl_gcc_cpuss_rbcpr_clk_src,
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700931 .clkr.hw.init = &(struct clk_init_data){
932 .name = "gcc_ufs_card_phy_aux_clk_src",
933 .parent_names = gcc_parent_names_4,
934 .num_parents = 2,
935 .flags = CLK_SET_RATE_PARENT,
936 .ops = &clk_rcg2_ops,
937 VDD_CX_FMAX_MAP1(
938 MIN, 19200000),
939 },
940};
941
942static const struct freq_tbl ftbl_gcc_ufs_card_unipro_core_clk_src[] = {
943 F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0),
944 F(75000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
945 F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
946 { }
947};
948
949static struct clk_rcg2 gcc_ufs_card_unipro_core_clk_src = {
950 .cmd_rcgr = 0x75074,
951 .mnd_width = 0,
952 .hid_width = 5,
953 .parent_map = gcc_parent_map_0,
954 .freq_tbl = ftbl_gcc_ufs_card_unipro_core_clk_src,
955 .enable_safe_config = true,
956 .clkr.hw.init = &(struct clk_init_data){
957 .name = "gcc_ufs_card_unipro_core_clk_src",
958 .parent_names = gcc_parent_names_0,
959 .num_parents = 4,
960 .flags = CLK_SET_RATE_PARENT,
961 .ops = &clk_rcg2_ops,
962 VDD_CX_FMAX_MAP3(
963 MIN, 37500000,
964 LOW, 75000000,
965 NOMINAL, 150000000),
966 },
967};
968
Deepak Katragadda125fe372017-03-01 10:28:24 -0800969static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = {
970 F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
971 F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
972 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
973 F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
974 F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
975 { }
976};
977
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700978static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = {
979 .cmd_rcgr = 0x7701c,
980 .mnd_width = 8,
981 .hid_width = 5,
982 .parent_map = gcc_parent_map_0,
Deepak Katragadda125fe372017-03-01 10:28:24 -0800983 .freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src,
Deepak Katragadda575a45f2016-10-11 15:06:56 -0700984 .enable_safe_config = true,
985 .clkr.hw.init = &(struct clk_init_data){
986 .name = "gcc_ufs_phy_axi_clk_src",
987 .parent_names = gcc_parent_names_0,
988 .num_parents = 4,
989 .flags = CLK_SET_RATE_PARENT,
990 .ops = &clk_rcg2_ops,
991 VDD_CX_FMAX_MAP4(
992 MIN, 50000000,
993 LOW, 100000000,
994 NOMINAL, 200000000,
995 HIGH, 240000000),
996 },
997};
998
999static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = {
1000 .cmd_rcgr = 0x7705c,
1001 .mnd_width = 0,
1002 .hid_width = 5,
1003 .parent_map = gcc_parent_map_0,
1004 .freq_tbl = ftbl_gcc_ufs_card_ice_core_clk_src,
1005 .enable_safe_config = true,
1006 .clkr.hw.init = &(struct clk_init_data){
1007 .name = "gcc_ufs_phy_ice_core_clk_src",
1008 .parent_names = gcc_parent_names_0,
1009 .num_parents = 4,
1010 .flags = CLK_SET_RATE_PARENT,
1011 .ops = &clk_rcg2_ops,
1012 VDD_CX_FMAX_MAP3(
1013 MIN, 75000000,
1014 LOW, 150000000,
1015 NOMINAL, 300000000),
1016 },
1017};
1018
1019static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = {
1020 .cmd_rcgr = 0x77090,
1021 .mnd_width = 0,
1022 .hid_width = 5,
1023 .parent_map = gcc_parent_map_4,
1024 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
1025 .clkr.hw.init = &(struct clk_init_data){
1026 .name = "gcc_ufs_phy_phy_aux_clk_src",
1027 .parent_names = gcc_parent_names_4,
1028 .num_parents = 2,
1029 .flags = CLK_SET_RATE_PARENT,
1030 .ops = &clk_rcg2_ops,
1031 VDD_CX_FMAX_MAP1(
1032 MIN, 19200000),
1033 },
1034};
1035
1036static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = {
1037 .cmd_rcgr = 0x77074,
1038 .mnd_width = 0,
1039 .hid_width = 5,
1040 .parent_map = gcc_parent_map_0,
1041 .freq_tbl = ftbl_gcc_ufs_card_unipro_core_clk_src,
1042 .clkr.hw.init = &(struct clk_init_data){
1043 .name = "gcc_ufs_phy_unipro_core_clk_src",
1044 .parent_names = gcc_parent_names_0,
1045 .num_parents = 4,
1046 .flags = CLK_SET_RATE_PARENT,
1047 .ops = &clk_rcg2_ops,
1048 VDD_CX_FMAX_MAP3(
1049 MIN, 37500000,
1050 LOW, 75000000,
1051 NOMINAL, 150000000),
1052 },
1053};
1054
1055static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {
1056 F(33333333, P_GPLL0_OUT_EVEN, 9, 0, 0),
1057 F(66666667, P_GPLL0_OUT_EVEN, 4.5, 0, 0),
1058 F(133333333, P_GPLL0_OUT_MAIN, 4.5, 0, 0),
1059 F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
1060 F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
1061 { }
1062};
1063
1064static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {
1065 .cmd_rcgr = 0xf018,
1066 .mnd_width = 8,
1067 .hid_width = 5,
1068 .parent_map = gcc_parent_map_0,
1069 .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
1070 .enable_safe_config = true,
1071 .clkr.hw.init = &(struct clk_init_data){
1072 .name = "gcc_usb30_prim_master_clk_src",
1073 .parent_names = gcc_parent_names_0,
1074 .num_parents = 4,
1075 .flags = CLK_SET_RATE_PARENT,
1076 .ops = &clk_rcg2_ops,
1077 VDD_CX_FMAX_MAP5(
1078 MIN, 33333333,
1079 LOWER, 66666667,
1080 LOW, 133333333,
1081 NOMINAL, 200000000,
1082 HIGH, 240000000),
1083 },
1084};
1085
1086static const struct freq_tbl ftbl_gcc_usb30_prim_mock_utmi_clk_src[] = {
1087 F(20000000, P_GPLL0_OUT_EVEN, 15, 0, 0),
1088 F(40000000, P_GPLL0_OUT_EVEN, 7.5, 0, 0),
1089 F(60000000, P_GPLL0_OUT_MAIN, 10, 0, 0),
1090 { }
1091};
1092
1093static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {
1094 .cmd_rcgr = 0xf030,
1095 .mnd_width = 0,
1096 .hid_width = 5,
1097 .parent_map = gcc_parent_map_0,
1098 .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
1099 .enable_safe_config = true,
1100 .clkr.hw.init = &(struct clk_init_data){
1101 .name = "gcc_usb30_prim_mock_utmi_clk_src",
1102 .parent_names = gcc_parent_names_0,
1103 .num_parents = 4,
1104 .flags = CLK_SET_RATE_PARENT,
1105 .ops = &clk_rcg2_ops,
1106 VDD_CX_FMAX_MAP3(
1107 MIN, 19200000,
1108 LOWER, 40000000,
1109 LOW, 60000000),
1110 },
1111};
1112
1113static struct clk_rcg2 gcc_usb30_sec_master_clk_src = {
1114 .cmd_rcgr = 0x10018,
1115 .mnd_width = 8,
1116 .hid_width = 5,
1117 .parent_map = gcc_parent_map_0,
1118 .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
1119 .clkr.hw.init = &(struct clk_init_data){
1120 .name = "gcc_usb30_sec_master_clk_src",
1121 .parent_names = gcc_parent_names_0,
1122 .num_parents = 4,
1123 .flags = CLK_SET_RATE_PARENT,
1124 .ops = &clk_rcg2_ops,
1125 VDD_CX_FMAX_MAP5(
1126 MIN, 33333333,
1127 LOWER, 66666667,
1128 LOW, 133333333,
1129 NOMINAL, 200000000,
1130 HIGH, 240000000),
1131 },
1132};
1133
1134static struct clk_rcg2 gcc_usb30_sec_mock_utmi_clk_src = {
1135 .cmd_rcgr = 0x10030,
1136 .mnd_width = 0,
1137 .hid_width = 5,
1138 .parent_map = gcc_parent_map_0,
1139 .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
1140 .clkr.hw.init = &(struct clk_init_data){
1141 .name = "gcc_usb30_sec_mock_utmi_clk_src",
1142 .parent_names = gcc_parent_names_0,
1143 .num_parents = 4,
1144 .flags = CLK_SET_RATE_PARENT,
1145 .ops = &clk_rcg2_ops,
1146 VDD_CX_FMAX_MAP3(
1147 MIN, 19200000,
1148 LOWER, 40000000,
1149 LOW, 60000000),
1150 },
1151};
1152
1153static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {
1154 .cmd_rcgr = 0xf05c,
1155 .mnd_width = 0,
1156 .hid_width = 5,
1157 .parent_map = gcc_parent_map_2,
Deepak Katragadda125fe372017-03-01 10:28:24 -08001158 .freq_tbl = ftbl_gcc_cpuss_rbcpr_clk_src,
Deepak Katragadda575a45f2016-10-11 15:06:56 -07001159 .clkr.hw.init = &(struct clk_init_data){
1160 .name = "gcc_usb3_prim_phy_aux_clk_src",
1161 .parent_names = gcc_parent_names_2,
1162 .num_parents = 3,
1163 .flags = CLK_SET_RATE_PARENT,
1164 .ops = &clk_rcg2_ops,
1165 VDD_CX_FMAX_MAP1(
1166 MIN, 19200000),
1167 },
1168};
1169
1170static struct clk_rcg2 gcc_usb3_sec_phy_aux_clk_src = {
1171 .cmd_rcgr = 0x1005c,
1172 .mnd_width = 0,
1173 .hid_width = 5,
1174 .parent_map = gcc_parent_map_2,
Deepak Katragadda125fe372017-03-01 10:28:24 -08001175 .freq_tbl = ftbl_gcc_cpuss_rbcpr_clk_src,
Deepak Katragadda575a45f2016-10-11 15:06:56 -07001176 .enable_safe_config = true,
1177 .clkr.hw.init = &(struct clk_init_data){
1178 .name = "gcc_usb3_sec_phy_aux_clk_src",
1179 .parent_names = gcc_parent_names_2,
1180 .num_parents = 3,
1181 .flags = CLK_SET_RATE_PARENT,
1182 .ops = &clk_rcg2_ops,
1183 VDD_CX_FMAX_MAP1(
1184 MIN, 19200000),
1185 },
1186};
1187
1188static struct clk_branch gcc_aggre_noc_pcie_tbu_clk = {
1189 .halt_reg = 0x90014,
1190 .halt_check = BRANCH_HALT,
1191 .clkr = {
1192 .enable_reg = 0x90014,
1193 .enable_mask = BIT(0),
1194 .hw.init = &(struct clk_init_data){
1195 .name = "gcc_aggre_noc_pcie_tbu_clk",
1196 .ops = &clk_branch2_ops,
1197 },
1198 },
1199};
1200
1201static struct clk_branch gcc_aggre_ufs_card_axi_clk = {
1202 .halt_reg = 0x82028,
1203 .halt_check = BRANCH_HALT,
1204 .clkr = {
1205 .enable_reg = 0x82028,
1206 .enable_mask = BIT(0),
1207 .hw.init = &(struct clk_init_data){
1208 .name = "gcc_aggre_ufs_card_axi_clk",
1209 .parent_names = (const char *[]){
1210 "gcc_ufs_card_axi_clk_src",
1211 },
1212 .num_parents = 1,
1213 .flags = CLK_SET_RATE_PARENT,
1214 .ops = &clk_branch2_ops,
1215 },
1216 },
1217};
1218
1219static struct clk_branch gcc_aggre_ufs_phy_axi_clk = {
1220 .halt_reg = 0x82024,
1221 .halt_check = BRANCH_HALT,
1222 .clkr = {
1223 .enable_reg = 0x82024,
1224 .enable_mask = BIT(0),
1225 .hw.init = &(struct clk_init_data){
1226 .name = "gcc_aggre_ufs_phy_axi_clk",
1227 .parent_names = (const char *[]){
1228 "gcc_ufs_phy_axi_clk_src",
1229 },
1230 .num_parents = 1,
1231 .flags = CLK_SET_RATE_PARENT,
1232 .ops = &clk_branch2_ops,
1233 },
1234 },
1235};
1236
1237static struct clk_branch gcc_aggre_usb3_prim_axi_clk = {
1238 .halt_reg = 0x8201c,
1239 .halt_check = BRANCH_HALT,
1240 .clkr = {
1241 .enable_reg = 0x8201c,
1242 .enable_mask = BIT(0),
1243 .hw.init = &(struct clk_init_data){
1244 .name = "gcc_aggre_usb3_prim_axi_clk",
1245 .parent_names = (const char *[]){
1246 "gcc_usb30_prim_master_clk_src",
1247 },
1248 .num_parents = 1,
1249 .flags = CLK_SET_RATE_PARENT,
1250 .ops = &clk_branch2_ops,
1251 },
1252 },
1253};
1254
1255static struct clk_branch gcc_aggre_usb3_sec_axi_clk = {
1256 .halt_reg = 0x82020,
1257 .halt_check = BRANCH_HALT,
1258 .clkr = {
1259 .enable_reg = 0x82020,
1260 .enable_mask = BIT(0),
1261 .hw.init = &(struct clk_init_data){
1262 .name = "gcc_aggre_usb3_sec_axi_clk",
1263 .parent_names = (const char *[]){
1264 "gcc_usb30_sec_master_clk_src",
1265 },
1266 .num_parents = 1,
1267 .flags = CLK_SET_RATE_PARENT,
1268 .ops = &clk_branch2_ops,
1269 },
1270 },
1271};
1272
1273static struct clk_branch gcc_boot_rom_ahb_clk = {
1274 .halt_reg = 0x38004,
1275 .halt_check = BRANCH_HALT_VOTED,
1276 .clkr = {
1277 .enable_reg = 0x52004,
1278 .enable_mask = BIT(10),
1279 .hw.init = &(struct clk_init_data){
1280 .name = "gcc_boot_rom_ahb_clk",
1281 .ops = &clk_branch2_ops,
1282 },
1283 },
1284};
1285
1286static struct clk_branch gcc_camera_ahb_clk = {
1287 .halt_reg = 0xb008,
1288 .halt_check = BRANCH_HALT,
1289 .clkr = {
1290 .enable_reg = 0xb008,
1291 .enable_mask = BIT(0),
1292 .hw.init = &(struct clk_init_data){
1293 .name = "gcc_camera_ahb_clk",
1294 .ops = &clk_branch2_ops,
1295 },
1296 },
1297};
1298
1299static struct clk_branch gcc_camera_axi_clk = {
1300 .halt_reg = 0xb020,
1301 .halt_check = BRANCH_VOTED,
1302 .clkr = {
1303 .enable_reg = 0xb020,
1304 .enable_mask = BIT(0),
1305 .hw.init = &(struct clk_init_data){
1306 .name = "gcc_camera_axi_clk",
1307 .ops = &clk_branch2_ops,
1308 },
1309 },
1310};
1311
1312static struct clk_branch gcc_camera_xo_clk = {
1313 .halt_reg = 0xb02c,
1314 .halt_check = BRANCH_HALT,
1315 .clkr = {
1316 .enable_reg = 0xb02c,
1317 .enable_mask = BIT(0),
1318 .hw.init = &(struct clk_init_data){
1319 .name = "gcc_camera_xo_clk",
1320 .ops = &clk_branch2_ops,
1321 },
1322 },
1323};
1324
1325static struct clk_branch gcc_ce1_ahb_clk = {
1326 .halt_reg = 0x4100c,
1327 .halt_check = BRANCH_HALT_VOTED,
1328 .clkr = {
1329 .enable_reg = 0x52004,
1330 .enable_mask = BIT(3),
1331 .hw.init = &(struct clk_init_data){
1332 .name = "gcc_ce1_ahb_clk",
1333 .ops = &clk_branch2_ops,
1334 },
1335 },
1336};
1337
1338static struct clk_branch gcc_ce1_axi_clk = {
1339 .halt_reg = 0x41008,
1340 .halt_check = BRANCH_HALT_VOTED,
1341 .clkr = {
1342 .enable_reg = 0x52004,
1343 .enable_mask = BIT(4),
1344 .hw.init = &(struct clk_init_data){
1345 .name = "gcc_ce1_axi_clk",
1346 .ops = &clk_branch2_ops,
1347 },
1348 },
1349};
1350
1351static struct clk_branch gcc_ce1_clk = {
1352 .halt_reg = 0x41004,
1353 .halt_check = BRANCH_HALT_VOTED,
1354 .clkr = {
1355 .enable_reg = 0x52004,
1356 .enable_mask = BIT(5),
1357 .hw.init = &(struct clk_init_data){
1358 .name = "gcc_ce1_clk",
1359 .ops = &clk_branch2_ops,
1360 },
1361 },
1362};
1363
1364static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {
1365 .halt_reg = 0x502c,
1366 .halt_check = BRANCH_HALT,
1367 .clkr = {
1368 .enable_reg = 0x502c,
1369 .enable_mask = BIT(0),
1370 .hw.init = &(struct clk_init_data){
1371 .name = "gcc_cfg_noc_usb3_prim_axi_clk",
1372 .parent_names = (const char *[]){
1373 "gcc_usb30_prim_master_clk_src",
1374 },
1375 .num_parents = 1,
1376 .flags = CLK_SET_RATE_PARENT,
1377 .ops = &clk_branch2_ops,
1378 },
1379 },
1380};
1381
1382static struct clk_branch gcc_cfg_noc_usb3_sec_axi_clk = {
1383 .halt_reg = 0x5030,
1384 .halt_check = BRANCH_HALT,
1385 .clkr = {
1386 .enable_reg = 0x5030,
1387 .enable_mask = BIT(0),
1388 .hw.init = &(struct clk_init_data){
1389 .name = "gcc_cfg_noc_usb3_sec_axi_clk",
1390 .parent_names = (const char *[]){
1391 "gcc_usb30_sec_master_clk_src",
1392 },
1393 .num_parents = 1,
1394 .flags = CLK_SET_RATE_PARENT,
1395 .ops = &clk_branch2_ops,
1396 },
1397 },
1398};
1399
1400static struct clk_branch gcc_cpuss_ahb_clk = {
1401 .halt_reg = 0x48000,
1402 .halt_check = BRANCH_HALT_VOTED,
1403 .clkr = {
1404 .enable_reg = 0x52004,
1405 .enable_mask = BIT(21),
1406 .hw.init = &(struct clk_init_data){
1407 .name = "gcc_cpuss_ahb_clk",
1408 .parent_names = (const char *[]){
1409 "gcc_cpuss_ahb_clk_src",
1410 },
1411 .num_parents = 1,
1412 .flags = CLK_SET_RATE_PARENT,
1413 .ops = &clk_branch2_ops,
1414 },
1415 },
1416};
1417
1418static struct clk_branch gcc_cpuss_dvm_bus_clk = {
1419 .halt_reg = 0x48190,
1420 .halt_check = BRANCH_HALT,
1421 .clkr = {
1422 .enable_reg = 0x48190,
1423 .enable_mask = BIT(0),
1424 .hw.init = &(struct clk_init_data){
1425 .name = "gcc_cpuss_dvm_bus_clk",
1426 .ops = &clk_branch2_ops,
1427 },
1428 },
1429};
1430
1431static struct clk_branch gcc_cpuss_gnoc_clk = {
1432 .halt_reg = 0x48004,
1433 .halt_check = BRANCH_HALT_VOTED,
1434 .clkr = {
1435 .enable_reg = 0x52004,
1436 .enable_mask = BIT(22),
1437 .hw.init = &(struct clk_init_data){
1438 .name = "gcc_cpuss_gnoc_clk",
1439 .ops = &clk_branch2_ops,
1440 },
1441 },
1442};
1443
1444static struct clk_branch gcc_cpuss_rbcpr_clk = {
1445 .halt_reg = 0x48008,
1446 .halt_check = BRANCH_HALT,
1447 .clkr = {
1448 .enable_reg = 0x48008,
1449 .enable_mask = BIT(0),
1450 .hw.init = &(struct clk_init_data){
1451 .name = "gcc_cpuss_rbcpr_clk",
1452 .parent_names = (const char *[]){
1453 "gcc_cpuss_rbcpr_clk_src",
1454 },
1455 .num_parents = 1,
1456 .flags = CLK_SET_RATE_PARENT,
1457 .ops = &clk_branch2_ops,
1458 },
1459 },
1460};
1461
1462static struct clk_branch gcc_cxo_tx1_clkref_clk = {
1463 .halt_reg = 0x8c020,
1464 .halt_check = BRANCH_HALT,
1465 .clkr = {
1466 .enable_reg = 0x8c020,
1467 .enable_mask = BIT(0),
1468 .hw.init = &(struct clk_init_data){
1469 .name = "gcc_cxo_tx1_clkref_clk",
1470 .ops = &clk_branch2_ops,
1471 },
1472 },
1473};
1474
1475static struct clk_branch gcc_ddrss_gpu_axi_clk = {
1476 .halt_reg = 0x44038,
1477 .halt_check = BRANCH_HALT,
1478 .clkr = {
1479 .enable_reg = 0x44038,
1480 .enable_mask = BIT(0),
1481 .hw.init = &(struct clk_init_data){
1482 .name = "gcc_ddrss_gpu_axi_clk",
1483 .ops = &clk_branch2_ops,
1484 },
1485 },
1486};
1487
1488static struct clk_branch gcc_disp_ahb_clk = {
1489 .halt_reg = 0xb00c,
1490 .halt_check = BRANCH_HALT,
1491 .clkr = {
1492 .enable_reg = 0xb00c,
1493 .enable_mask = BIT(0),
1494 .hw.init = &(struct clk_init_data){
1495 .name = "gcc_disp_ahb_clk",
1496 .ops = &clk_branch2_ops,
1497 },
1498 },
1499};
1500
1501static struct clk_branch gcc_disp_axi_clk = {
1502 .halt_reg = 0xb024,
1503 .halt_check = BRANCH_VOTED,
1504 .clkr = {
1505 .enable_reg = 0xb024,
1506 .enable_mask = BIT(0),
1507 .hw.init = &(struct clk_init_data){
1508 .name = "gcc_disp_axi_clk",
1509 .ops = &clk_branch2_ops,
1510 },
1511 },
1512};
1513
1514static struct clk_gate2 gcc_disp_gpll0_clk_src = {
1515 .udelay = 500,
1516 .clkr = {
1517 .enable_reg = 0x52004,
1518 .enable_mask = BIT(18),
1519 .hw.init = &(struct clk_init_data){
1520 .name = "gcc_disp_gpll0_clk_src",
1521 .parent_names = (const char *[]){
1522 "gpll0",
1523 },
1524 .num_parents = 1,
1525 .flags = CLK_SET_RATE_PARENT,
1526 .ops = &clk_gate2_ops,
1527 },
1528 },
1529};
1530
1531static struct clk_gate2 gcc_disp_gpll0_div_clk_src = {
1532 .udelay = 500,
1533 .clkr = {
1534 .enable_reg = 0x52004,
1535 .enable_mask = BIT(19),
1536 .hw.init = &(struct clk_init_data){
1537 .name = "gcc_disp_gpll0_div_clk_src",
1538 .parent_names = (const char *[]){
1539 "gpll0_out_even",
1540 },
1541 .num_parents = 1,
1542 .flags = CLK_SET_RATE_PARENT,
1543 .ops = &clk_gate2_ops,
1544 },
1545 },
1546};
1547
1548static struct clk_branch gcc_disp_xo_clk = {
1549 .halt_reg = 0xb030,
1550 .halt_check = BRANCH_HALT,
1551 .clkr = {
1552 .enable_reg = 0xb030,
1553 .enable_mask = BIT(0),
1554 .hw.init = &(struct clk_init_data){
1555 .name = "gcc_disp_xo_clk",
1556 .ops = &clk_branch2_ops,
1557 },
1558 },
1559};
1560
1561static struct clk_branch gcc_gp1_clk = {
1562 .halt_reg = 0x64000,
1563 .halt_check = BRANCH_HALT,
1564 .clkr = {
1565 .enable_reg = 0x64000,
1566 .enable_mask = BIT(0),
1567 .hw.init = &(struct clk_init_data){
1568 .name = "gcc_gp1_clk",
1569 .parent_names = (const char *[]){
1570 "gcc_gp1_clk_src",
1571 },
1572 .num_parents = 1,
1573 .flags = CLK_SET_RATE_PARENT,
1574 .ops = &clk_branch2_ops,
1575 },
1576 },
1577};
1578
1579static struct clk_branch gcc_gp2_clk = {
1580 .halt_reg = 0x65000,
1581 .halt_check = BRANCH_HALT,
1582 .clkr = {
1583 .enable_reg = 0x65000,
1584 .enable_mask = BIT(0),
1585 .hw.init = &(struct clk_init_data){
1586 .name = "gcc_gp2_clk",
1587 .parent_names = (const char *[]){
1588 "gcc_gp2_clk_src",
1589 },
1590 .num_parents = 1,
1591 .flags = CLK_SET_RATE_PARENT,
1592 .ops = &clk_branch2_ops,
1593 },
1594 },
1595};
1596
1597static struct clk_branch gcc_gp3_clk = {
1598 .halt_reg = 0x66000,
1599 .halt_check = BRANCH_HALT,
1600 .clkr = {
1601 .enable_reg = 0x66000,
1602 .enable_mask = BIT(0),
1603 .hw.init = &(struct clk_init_data){
1604 .name = "gcc_gp3_clk",
1605 .parent_names = (const char *[]){
1606 "gcc_gp3_clk_src",
1607 },
1608 .num_parents = 1,
1609 .flags = CLK_SET_RATE_PARENT,
1610 .ops = &clk_branch2_ops,
1611 },
1612 },
1613};
1614
1615static struct clk_branch gcc_gpu_cfg_ahb_clk = {
1616 .halt_reg = 0x71004,
1617 .halt_check = BRANCH_HALT,
1618 .clkr = {
1619 .enable_reg = 0x71004,
1620 .enable_mask = BIT(0),
1621 .hw.init = &(struct clk_init_data){
1622 .name = "gcc_gpu_cfg_ahb_clk",
1623 .ops = &clk_branch2_ops,
1624 },
1625 },
1626};
1627
1628static struct clk_gate2 gcc_gpu_gpll0_clk_src = {
1629 .udelay = 500,
1630 .clkr = {
1631 .enable_reg = 0x52004,
1632 .enable_mask = BIT(15),
1633 .hw.init = &(struct clk_init_data){
1634 .name = "gcc_gpu_gpll0_clk_src",
1635 .parent_names = (const char *[]){
1636 "gpll0",
1637 },
1638 .num_parents = 1,
1639 .flags = CLK_SET_RATE_PARENT,
1640 .ops = &clk_gate2_ops,
1641 },
1642 },
1643};
1644
1645static struct clk_gate2 gcc_gpu_gpll0_div_clk_src = {
1646 .udelay = 500,
1647 .clkr = {
1648 .enable_reg = 0x52004,
1649 .enable_mask = BIT(16),
1650 .hw.init = &(struct clk_init_data){
1651 .name = "gcc_gpu_gpll0_div_clk_src",
1652 .parent_names = (const char *[]){
1653 "gpll0_out_even",
1654 },
1655 .num_parents = 1,
1656 .flags = CLK_SET_RATE_PARENT,
1657 .ops = &clk_gate2_ops,
1658 },
1659 },
1660};
1661
1662static struct clk_branch gcc_gpu_memnoc_gfx_clk = {
1663 .halt_reg = 0x7100c,
1664 .halt_check = BRANCH_HALT,
1665 .clkr = {
1666 .enable_reg = 0x7100c,
1667 .enable_mask = BIT(0),
1668 .hw.init = &(struct clk_init_data){
1669 .name = "gcc_gpu_memnoc_gfx_clk",
1670 .ops = &clk_branch2_ops,
1671 },
1672 },
1673};
1674
1675static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = {
1676 .halt_reg = 0x71018,
1677 .halt_check = BRANCH_HALT,
1678 .clkr = {
1679 .enable_reg = 0x71018,
1680 .enable_mask = BIT(0),
1681 .hw.init = &(struct clk_init_data){
1682 .name = "gcc_gpu_snoc_dvm_gfx_clk",
1683 .ops = &clk_branch2_ops,
1684 },
1685 },
1686};
1687
Deepak Katragadda575a45f2016-10-11 15:06:56 -07001688static struct clk_branch gcc_mss_axis2_clk = {
1689 .halt_reg = 0x8a008,
1690 .halt_check = BRANCH_HALT,
1691 .clkr = {
1692 .enable_reg = 0x8a008,
1693 .enable_mask = BIT(0),
1694 .hw.init = &(struct clk_init_data){
1695 .name = "gcc_mss_axis2_clk",
1696 .ops = &clk_branch2_ops,
1697 },
1698 },
1699};
1700
1701static struct clk_branch gcc_mss_cfg_ahb_clk = {
1702 .halt_reg = 0x8a000,
1703 .halt_check = BRANCH_HALT,
1704 .clkr = {
1705 .enable_reg = 0x8a000,
1706 .enable_mask = BIT(0),
1707 .hw.init = &(struct clk_init_data){
1708 .name = "gcc_mss_cfg_ahb_clk",
1709 .ops = &clk_branch2_ops,
1710 },
1711 },
1712};
1713
1714static struct clk_gate2 gcc_mss_gpll0_div_clk_src = {
1715 .udelay = 500,
1716 .clkr = {
1717 .enable_reg = 0x52004,
1718 .enable_mask = BIT(17),
1719 .hw.init = &(struct clk_init_data){
1720 .name = "gcc_mss_gpll0_div_clk_src",
1721 .ops = &clk_gate2_ops,
1722 },
1723 },
1724};
1725
1726static struct clk_branch gcc_mss_mfab_axis_clk = {
1727 .halt_reg = 0x8a004,
1728 .halt_check = BRANCH_VOTED,
1729 .clkr = {
1730 .enable_reg = 0x8a004,
1731 .enable_mask = BIT(0),
1732 .hw.init = &(struct clk_init_data){
1733 .name = "gcc_mss_mfab_axis_clk",
1734 .ops = &clk_branch2_ops,
1735 },
1736 },
1737};
1738
1739static struct clk_branch gcc_mss_q6_memnoc_axi_clk = {
1740 .halt_reg = 0x8a154,
1741 .halt_check = BRANCH_VOTED,
1742 .clkr = {
1743 .enable_reg = 0x8a154,
1744 .enable_mask = BIT(0),
1745 .hw.init = &(struct clk_init_data){
1746 .name = "gcc_mss_q6_memnoc_axi_clk",
1747 .ops = &clk_branch2_ops,
1748 },
1749 },
1750};
1751
1752static struct clk_branch gcc_mss_snoc_axi_clk = {
1753 .halt_reg = 0x8a150,
1754 .halt_check = BRANCH_HALT,
1755 .clkr = {
1756 .enable_reg = 0x8a150,
1757 .enable_mask = BIT(0),
1758 .hw.init = &(struct clk_init_data){
1759 .name = "gcc_mss_snoc_axi_clk",
1760 .ops = &clk_branch2_ops,
1761 },
1762 },
1763};
1764
1765static struct clk_branch gcc_pcie_0_aux_clk = {
1766 .halt_reg = 0x6b01c,
1767 .halt_check = BRANCH_HALT_VOTED,
1768 .clkr = {
1769 .enable_reg = 0x5200c,
1770 .enable_mask = BIT(3),
1771 .hw.init = &(struct clk_init_data){
1772 .name = "gcc_pcie_0_aux_clk",
1773 .parent_names = (const char *[]){
1774 "gcc_pcie_0_aux_clk_src",
1775 },
1776 .num_parents = 1,
1777 .flags = CLK_SET_RATE_PARENT,
1778 .ops = &clk_branch2_ops,
1779 },
1780 },
1781};
1782
1783static struct clk_branch gcc_pcie_0_cfg_ahb_clk = {
1784 .halt_reg = 0x6b018,
1785 .halt_check = BRANCH_HALT_VOTED,
1786 .clkr = {
1787 .enable_reg = 0x5200c,
1788 .enable_mask = BIT(2),
1789 .hw.init = &(struct clk_init_data){
1790 .name = "gcc_pcie_0_cfg_ahb_clk",
1791 .ops = &clk_branch2_ops,
1792 },
1793 },
1794};
1795
1796static struct clk_branch gcc_pcie_0_clkref_clk = {
1797 .halt_reg = 0x8c00c,
1798 .halt_check = BRANCH_HALT,
1799 .clkr = {
1800 .enable_reg = 0x8c00c,
1801 .enable_mask = BIT(0),
1802 .hw.init = &(struct clk_init_data){
1803 .name = "gcc_pcie_0_clkref_clk",
1804 .ops = &clk_branch2_ops,
1805 },
1806 },
1807};
1808
1809static struct clk_branch gcc_pcie_0_mstr_axi_clk = {
1810 .halt_reg = 0x6b014,
1811 .halt_check = BRANCH_HALT_VOTED,
1812 .clkr = {
1813 .enable_reg = 0x5200c,
1814 .enable_mask = BIT(1),
1815 .hw.init = &(struct clk_init_data){
1816 .name = "gcc_pcie_0_mstr_axi_clk",
1817 .ops = &clk_branch2_ops,
1818 },
1819 },
1820};
1821
1822static struct clk_gate2 gcc_pcie_0_pipe_clk = {
1823 .udelay = 500,
1824 .clkr = {
1825 .enable_reg = 0x5200c,
1826 .enable_mask = BIT(4),
1827 .hw.init = &(struct clk_init_data){
1828 .name = "gcc_pcie_0_pipe_clk",
1829 .ops = &clk_gate2_ops,
1830 },
1831 },
1832};
1833
1834static struct clk_branch gcc_pcie_0_slv_axi_clk = {
1835 .halt_reg = 0x6b010,
1836 .halt_check = BRANCH_HALT_VOTED,
1837 .clkr = {
1838 .enable_reg = 0x5200c,
1839 .enable_mask = BIT(0),
1840 .hw.init = &(struct clk_init_data){
1841 .name = "gcc_pcie_0_slv_axi_clk",
1842 .ops = &clk_branch2_ops,
1843 },
1844 },
1845};
1846
1847static struct clk_branch gcc_pcie_0_slv_q2a_axi_clk = {
1848 .halt_reg = 0x6b00c,
1849 .halt_check = BRANCH_HALT_VOTED,
1850 .clkr = {
1851 .enable_reg = 0x5200c,
1852 .enable_mask = BIT(5),
1853 .hw.init = &(struct clk_init_data){
1854 .name = "gcc_pcie_0_slv_q2a_axi_clk",
1855 .ops = &clk_branch2_ops,
1856 },
1857 },
1858};
1859
1860static struct clk_branch gcc_pcie_1_aux_clk = {
1861 .halt_reg = 0x8d01c,
1862 .halt_check = BRANCH_HALT_VOTED,
1863 .clkr = {
1864 .enable_reg = 0x52004,
1865 .enable_mask = BIT(29),
1866 .hw.init = &(struct clk_init_data){
1867 .name = "gcc_pcie_1_aux_clk",
1868 .parent_names = (const char *[]){
1869 "gcc_pcie_1_aux_clk_src",
1870 },
1871 .num_parents = 1,
1872 .flags = CLK_SET_RATE_PARENT,
1873 .ops = &clk_branch2_ops,
1874 },
1875 },
1876};
1877
1878static struct clk_branch gcc_pcie_1_cfg_ahb_clk = {
1879 .halt_reg = 0x8d018,
1880 .halt_check = BRANCH_HALT_VOTED,
1881 .clkr = {
1882 .enable_reg = 0x52004,
1883 .enable_mask = BIT(28),
1884 .hw.init = &(struct clk_init_data){
1885 .name = "gcc_pcie_1_cfg_ahb_clk",
1886 .ops = &clk_branch2_ops,
1887 },
1888 },
1889};
1890
1891static struct clk_branch gcc_pcie_1_clkref_clk = {
1892 .halt_reg = 0x8c02c,
1893 .halt_check = BRANCH_HALT,
1894 .clkr = {
1895 .enable_reg = 0x8c02c,
1896 .enable_mask = BIT(0),
1897 .hw.init = &(struct clk_init_data){
1898 .name = "gcc_pcie_1_clkref_clk",
1899 .ops = &clk_branch2_ops,
1900 },
1901 },
1902};
1903
1904static struct clk_branch gcc_pcie_1_mstr_axi_clk = {
1905 .halt_reg = 0x8d014,
1906 .halt_check = BRANCH_HALT_VOTED,
1907 .clkr = {
1908 .enable_reg = 0x52004,
1909 .enable_mask = BIT(27),
1910 .hw.init = &(struct clk_init_data){
1911 .name = "gcc_pcie_1_mstr_axi_clk",
1912 .ops = &clk_branch2_ops,
1913 },
1914 },
1915};
1916
1917static struct clk_gate2 gcc_pcie_1_pipe_clk = {
1918 .udelay = 500,
1919 .clkr = {
1920 .enable_reg = 0x52004,
1921 .enable_mask = BIT(30),
1922 .hw.init = &(struct clk_init_data){
1923 .name = "gcc_pcie_1_pipe_clk",
1924 .ops = &clk_gate2_ops,
1925 },
1926 },
1927};
1928
1929static struct clk_branch gcc_pcie_1_slv_axi_clk = {
1930 .halt_reg = 0x8d010,
1931 .halt_check = BRANCH_HALT_VOTED,
1932 .clkr = {
1933 .enable_reg = 0x52004,
1934 .enable_mask = BIT(26),
1935 .hw.init = &(struct clk_init_data){
1936 .name = "gcc_pcie_1_slv_axi_clk",
1937 .ops = &clk_branch2_ops,
1938 },
1939 },
1940};
1941
1942static struct clk_branch gcc_pcie_1_slv_q2a_axi_clk = {
1943 .halt_reg = 0x8d00c,
1944 .halt_check = BRANCH_HALT_VOTED,
1945 .clkr = {
1946 .enable_reg = 0x52004,
1947 .enable_mask = BIT(25),
1948 .hw.init = &(struct clk_init_data){
1949 .name = "gcc_pcie_1_slv_q2a_axi_clk",
1950 .ops = &clk_branch2_ops,
1951 },
1952 },
1953};
1954
1955static struct clk_branch gcc_pcie_phy_aux_clk = {
1956 .halt_reg = 0x6f004,
1957 .halt_check = BRANCH_HALT,
1958 .clkr = {
1959 .enable_reg = 0x6f004,
1960 .enable_mask = BIT(0),
1961 .hw.init = &(struct clk_init_data){
1962 .name = "gcc_pcie_phy_aux_clk",
1963 .parent_names = (const char *[]){
1964 "gcc_pcie_0_aux_clk_src",
1965 },
1966 .num_parents = 1,
1967 .flags = CLK_SET_RATE_PARENT,
1968 .ops = &clk_branch2_ops,
1969 },
1970 },
1971};
1972
1973static struct clk_branch gcc_pcie_phy_refgen_clk = {
1974 .halt_reg = 0x6f02c,
1975 .halt_check = BRANCH_HALT,
1976 .clkr = {
1977 .enable_reg = 0x6f02c,
1978 .enable_mask = BIT(0),
1979 .hw.init = &(struct clk_init_data){
1980 .name = "gcc_pcie_phy_refgen_clk",
1981 .parent_names = (const char *[]){
1982 "gcc_pcie_phy_refgen_clk_src",
1983 },
1984 .num_parents = 1,
1985 .flags = CLK_SET_RATE_PARENT,
1986 .ops = &clk_branch2_ops,
1987 },
1988 },
1989};
1990
1991static struct clk_branch gcc_pdm2_clk = {
1992 .halt_reg = 0x3300c,
1993 .halt_check = BRANCH_HALT,
1994 .clkr = {
1995 .enable_reg = 0x3300c,
1996 .enable_mask = BIT(0),
1997 .hw.init = &(struct clk_init_data){
1998 .name = "gcc_pdm2_clk",
1999 .parent_names = (const char *[]){
2000 "gcc_pdm2_clk_src",
2001 },
2002 .num_parents = 1,
2003 .flags = CLK_SET_RATE_PARENT,
2004 .ops = &clk_branch2_ops,
2005 },
2006 },
2007};
2008
2009static struct clk_branch gcc_pdm_ahb_clk = {
2010 .halt_reg = 0x33004,
2011 .halt_check = BRANCH_HALT,
2012 .clkr = {
2013 .enable_reg = 0x33004,
2014 .enable_mask = BIT(0),
2015 .hw.init = &(struct clk_init_data){
2016 .name = "gcc_pdm_ahb_clk",
2017 .ops = &clk_branch2_ops,
2018 },
2019 },
2020};
2021
2022static struct clk_branch gcc_pdm_xo4_clk = {
2023 .halt_reg = 0x33008,
2024 .halt_check = BRANCH_HALT,
2025 .clkr = {
2026 .enable_reg = 0x33008,
2027 .enable_mask = BIT(0),
2028 .hw.init = &(struct clk_init_data){
2029 .name = "gcc_pdm_xo4_clk",
2030 .ops = &clk_branch2_ops,
2031 },
2032 },
2033};
2034
2035static struct clk_branch gcc_prng_ahb_clk = {
2036 .halt_reg = 0x34004,
2037 .halt_check = BRANCH_HALT_VOTED,
2038 .clkr = {
2039 .enable_reg = 0x52004,
2040 .enable_mask = BIT(13),
2041 .hw.init = &(struct clk_init_data){
2042 .name = "gcc_prng_ahb_clk",
2043 .ops = &clk_branch2_ops,
2044 },
2045 },
2046};
2047
2048static struct clk_branch gcc_qmip_camera_ahb_clk = {
2049 .halt_reg = 0xb014,
2050 .halt_check = BRANCH_HALT,
2051 .clkr = {
2052 .enable_reg = 0xb014,
2053 .enable_mask = BIT(0),
2054 .hw.init = &(struct clk_init_data){
2055 .name = "gcc_qmip_camera_ahb_clk",
2056 .ops = &clk_branch2_ops,
2057 },
2058 },
2059};
2060
2061static struct clk_branch gcc_qmip_disp_ahb_clk = {
2062 .halt_reg = 0xb018,
2063 .halt_check = BRANCH_HALT,
2064 .clkr = {
2065 .enable_reg = 0xb018,
2066 .enable_mask = BIT(0),
2067 .hw.init = &(struct clk_init_data){
2068 .name = "gcc_qmip_disp_ahb_clk",
2069 .ops = &clk_branch2_ops,
2070 },
2071 },
2072};
2073
2074static struct clk_branch gcc_qmip_video_ahb_clk = {
2075 .halt_reg = 0xb010,
2076 .halt_check = BRANCH_HALT,
2077 .clkr = {
2078 .enable_reg = 0xb010,
2079 .enable_mask = BIT(0),
2080 .hw.init = &(struct clk_init_data){
2081 .name = "gcc_qmip_video_ahb_clk",
2082 .ops = &clk_branch2_ops,
2083 },
2084 },
2085};
2086
Deepak Katragadda575a45f2016-10-11 15:06:56 -07002087static struct clk_branch gcc_qupv3_wrap0_s0_clk = {
2088 .halt_reg = 0x17030,
2089 .halt_check = BRANCH_HALT_VOTED,
2090 .clkr = {
2091 .enable_reg = 0x5200c,
2092 .enable_mask = BIT(10),
2093 .hw.init = &(struct clk_init_data){
2094 .name = "gcc_qupv3_wrap0_s0_clk",
2095 .parent_names = (const char *[]){
2096 "gcc_qupv3_wrap0_s0_clk_src",
2097 },
2098 .num_parents = 1,
2099 .flags = CLK_SET_RATE_PARENT,
2100 .ops = &clk_branch2_ops,
2101 },
2102 },
2103};
2104
2105static struct clk_branch gcc_qupv3_wrap0_s1_clk = {
2106 .halt_reg = 0x17160,
2107 .halt_check = BRANCH_HALT_VOTED,
2108 .clkr = {
2109 .enable_reg = 0x5200c,
2110 .enable_mask = BIT(11),
2111 .hw.init = &(struct clk_init_data){
2112 .name = "gcc_qupv3_wrap0_s1_clk",
2113 .parent_names = (const char *[]){
2114 "gcc_qupv3_wrap0_s1_clk_src",
2115 },
2116 .num_parents = 1,
2117 .flags = CLK_SET_RATE_PARENT,
2118 .ops = &clk_branch2_ops,
2119 },
2120 },
2121};
2122
2123static struct clk_branch gcc_qupv3_wrap0_s2_clk = {
2124 .halt_reg = 0x17290,
2125 .halt_check = BRANCH_HALT_VOTED,
2126 .clkr = {
2127 .enable_reg = 0x5200c,
2128 .enable_mask = BIT(12),
2129 .hw.init = &(struct clk_init_data){
2130 .name = "gcc_qupv3_wrap0_s2_clk",
2131 .parent_names = (const char *[]){
2132 "gcc_qupv3_wrap0_s2_clk_src",
2133 },
2134 .num_parents = 1,
2135 .flags = CLK_SET_RATE_PARENT,
2136 .ops = &clk_branch2_ops,
2137 },
2138 },
2139};
2140
2141static struct clk_branch gcc_qupv3_wrap0_s3_clk = {
2142 .halt_reg = 0x173c0,
2143 .halt_check = BRANCH_HALT_VOTED,
2144 .clkr = {
2145 .enable_reg = 0x5200c,
2146 .enable_mask = BIT(13),
2147 .hw.init = &(struct clk_init_data){
2148 .name = "gcc_qupv3_wrap0_s3_clk",
2149 .parent_names = (const char *[]){
2150 "gcc_qupv3_wrap0_s3_clk_src",
2151 },
2152 .num_parents = 1,
2153 .flags = CLK_SET_RATE_PARENT,
2154 .ops = &clk_branch2_ops,
2155 },
2156 },
2157};
2158
2159static struct clk_branch gcc_qupv3_wrap0_s4_clk = {
2160 .halt_reg = 0x174f0,
2161 .halt_check = BRANCH_HALT_VOTED,
2162 .clkr = {
2163 .enable_reg = 0x5200c,
2164 .enable_mask = BIT(14),
2165 .hw.init = &(struct clk_init_data){
2166 .name = "gcc_qupv3_wrap0_s4_clk",
2167 .parent_names = (const char *[]){
2168 "gcc_qupv3_wrap0_s4_clk_src",
2169 },
2170 .num_parents = 1,
2171 .flags = CLK_SET_RATE_PARENT,
2172 .ops = &clk_branch2_ops,
2173 },
2174 },
2175};
2176
2177static struct clk_branch gcc_qupv3_wrap0_s5_clk = {
2178 .halt_reg = 0x17620,
2179 .halt_check = BRANCH_HALT_VOTED,
2180 .clkr = {
2181 .enable_reg = 0x5200c,
2182 .enable_mask = BIT(15),
2183 .hw.init = &(struct clk_init_data){
2184 .name = "gcc_qupv3_wrap0_s5_clk",
2185 .parent_names = (const char *[]){
2186 "gcc_qupv3_wrap0_s5_clk_src",
2187 },
2188 .num_parents = 1,
2189 .flags = CLK_SET_RATE_PARENT,
2190 .ops = &clk_branch2_ops,
2191 },
2192 },
2193};
2194
2195static struct clk_branch gcc_qupv3_wrap0_s6_clk = {
2196 .halt_reg = 0x17750,
2197 .halt_check = BRANCH_HALT_VOTED,
2198 .clkr = {
2199 .enable_reg = 0x5200c,
2200 .enable_mask = BIT(16),
2201 .hw.init = &(struct clk_init_data){
2202 .name = "gcc_qupv3_wrap0_s6_clk",
2203 .parent_names = (const char *[]){
2204 "gcc_qupv3_wrap0_s6_clk_src",
2205 },
2206 .num_parents = 1,
2207 .flags = CLK_SET_RATE_PARENT,
2208 .ops = &clk_branch2_ops,
2209 },
2210 },
2211};
2212
2213static struct clk_branch gcc_qupv3_wrap0_s7_clk = {
2214 .halt_reg = 0x17880,
2215 .halt_check = BRANCH_HALT_VOTED,
2216 .clkr = {
2217 .enable_reg = 0x5200c,
2218 .enable_mask = BIT(17),
2219 .hw.init = &(struct clk_init_data){
2220 .name = "gcc_qupv3_wrap0_s7_clk",
2221 .parent_names = (const char *[]){
2222 "gcc_qupv3_wrap0_s7_clk_src",
2223 },
2224 .num_parents = 1,
2225 .flags = CLK_SET_RATE_PARENT,
2226 .ops = &clk_branch2_ops,
2227 },
2228 },
2229};
2230
Deepak Katragadda575a45f2016-10-11 15:06:56 -07002231static struct clk_branch gcc_qupv3_wrap1_s0_clk = {
2232 .halt_reg = 0x18014,
2233 .halt_check = BRANCH_HALT_VOTED,
2234 .clkr = {
2235 .enable_reg = 0x5200c,
2236 .enable_mask = BIT(22),
2237 .hw.init = &(struct clk_init_data){
2238 .name = "gcc_qupv3_wrap1_s0_clk",
2239 .parent_names = (const char *[]){
2240 "gcc_qupv3_wrap1_s0_clk_src",
2241 },
2242 .num_parents = 1,
2243 .flags = CLK_SET_RATE_PARENT,
2244 .ops = &clk_branch2_ops,
2245 },
2246 },
2247};
2248
2249static struct clk_branch gcc_qupv3_wrap1_s1_clk = {
2250 .halt_reg = 0x18144,
2251 .halt_check = BRANCH_HALT_VOTED,
2252 .clkr = {
2253 .enable_reg = 0x5200c,
2254 .enable_mask = BIT(23),
2255 .hw.init = &(struct clk_init_data){
2256 .name = "gcc_qupv3_wrap1_s1_clk",
2257 .parent_names = (const char *[]){
2258 "gcc_qupv3_wrap1_s1_clk_src",
2259 },
2260 .num_parents = 1,
2261 .flags = CLK_SET_RATE_PARENT,
2262 .ops = &clk_branch2_ops,
2263 },
2264 },
2265};
2266
2267static struct clk_branch gcc_qupv3_wrap1_s2_clk = {
2268 .halt_reg = 0x18274,
2269 .halt_check = BRANCH_HALT_VOTED,
2270 .clkr = {
2271 .enable_reg = 0x5200c,
2272 .enable_mask = BIT(24),
2273 .hw.init = &(struct clk_init_data){
2274 .name = "gcc_qupv3_wrap1_s2_clk",
2275 .parent_names = (const char *[]){
2276 "gcc_qupv3_wrap1_s2_clk_src",
2277 },
2278 .num_parents = 1,
2279 .flags = CLK_SET_RATE_PARENT,
2280 .ops = &clk_branch2_ops,
2281 },
2282 },
2283};
2284
2285static struct clk_branch gcc_qupv3_wrap1_s3_clk = {
2286 .halt_reg = 0x183a4,
2287 .halt_check = BRANCH_HALT_VOTED,
2288 .clkr = {
2289 .enable_reg = 0x5200c,
2290 .enable_mask = BIT(25),
2291 .hw.init = &(struct clk_init_data){
2292 .name = "gcc_qupv3_wrap1_s3_clk",
2293 .parent_names = (const char *[]){
2294 "gcc_qupv3_wrap1_s3_clk_src",
2295 },
2296 .num_parents = 1,
2297 .flags = CLK_SET_RATE_PARENT,
2298 .ops = &clk_branch2_ops,
2299 },
2300 },
2301};
2302
2303static struct clk_branch gcc_qupv3_wrap1_s4_clk = {
2304 .halt_reg = 0x184d4,
2305 .halt_check = BRANCH_HALT_VOTED,
2306 .clkr = {
2307 .enable_reg = 0x5200c,
2308 .enable_mask = BIT(26),
2309 .hw.init = &(struct clk_init_data){
2310 .name = "gcc_qupv3_wrap1_s4_clk",
2311 .parent_names = (const char *[]){
2312 "gcc_qupv3_wrap1_s4_clk_src",
2313 },
2314 .num_parents = 1,
2315 .flags = CLK_SET_RATE_PARENT,
2316 .ops = &clk_branch2_ops,
2317 },
2318 },
2319};
2320
2321static struct clk_branch gcc_qupv3_wrap1_s5_clk = {
2322 .halt_reg = 0x18604,
2323 .halt_check = BRANCH_HALT_VOTED,
2324 .clkr = {
2325 .enable_reg = 0x5200c,
2326 .enable_mask = BIT(27),
2327 .hw.init = &(struct clk_init_data){
2328 .name = "gcc_qupv3_wrap1_s5_clk",
2329 .parent_names = (const char *[]){
2330 "gcc_qupv3_wrap1_s5_clk_src",
2331 },
2332 .num_parents = 1,
2333 .flags = CLK_SET_RATE_PARENT,
2334 .ops = &clk_branch2_ops,
2335 },
2336 },
2337};
2338
2339static struct clk_branch gcc_qupv3_wrap1_s6_clk = {
2340 .halt_reg = 0x18734,
2341 .halt_check = BRANCH_HALT_VOTED,
2342 .clkr = {
2343 .enable_reg = 0x5200c,
2344 .enable_mask = BIT(28),
2345 .hw.init = &(struct clk_init_data){
2346 .name = "gcc_qupv3_wrap1_s6_clk",
2347 .parent_names = (const char *[]){
2348 "gcc_qupv3_wrap1_s6_clk_src",
2349 },
2350 .num_parents = 1,
2351 .flags = CLK_SET_RATE_PARENT,
2352 .ops = &clk_branch2_ops,
2353 },
2354 },
2355};
2356
2357static struct clk_branch gcc_qupv3_wrap1_s7_clk = {
2358 .halt_reg = 0x18864,
2359 .halt_check = BRANCH_HALT_VOTED,
2360 .clkr = {
2361 .enable_reg = 0x5200c,
2362 .enable_mask = BIT(29),
2363 .hw.init = &(struct clk_init_data){
2364 .name = "gcc_qupv3_wrap1_s7_clk",
2365 .parent_names = (const char *[]){
2366 "gcc_qupv3_wrap1_s7_clk_src",
2367 },
2368 .num_parents = 1,
2369 .flags = CLK_SET_RATE_PARENT,
2370 .ops = &clk_branch2_ops,
2371 },
2372 },
2373};
2374
2375static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = {
2376 .halt_reg = 0x17004,
2377 .halt_check = BRANCH_HALT_VOTED,
2378 .clkr = {
2379 .enable_reg = 0x5200c,
2380 .enable_mask = BIT(6),
2381 .hw.init = &(struct clk_init_data){
2382 .name = "gcc_qupv3_wrap_0_m_ahb_clk",
2383 .ops = &clk_branch2_ops,
2384 },
2385 },
2386};
2387
2388static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = {
2389 .halt_reg = 0x17008,
2390 .halt_check = BRANCH_HALT_VOTED,
2391 .clkr = {
2392 .enable_reg = 0x5200c,
2393 .enable_mask = BIT(7),
2394 .hw.init = &(struct clk_init_data){
2395 .name = "gcc_qupv3_wrap_0_s_ahb_clk",
2396 .ops = &clk_branch2_ops,
2397 },
2398 },
2399};
2400
2401static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = {
2402 .halt_reg = 0x1800c,
2403 .halt_check = BRANCH_HALT_VOTED,
2404 .clkr = {
2405 .enable_reg = 0x5200c,
2406 .enable_mask = BIT(20),
2407 .hw.init = &(struct clk_init_data){
2408 .name = "gcc_qupv3_wrap_1_m_ahb_clk",
2409 .ops = &clk_branch2_ops,
2410 },
2411 },
2412};
2413
2414static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = {
2415 .halt_reg = 0x18010,
2416 .halt_check = BRANCH_HALT_VOTED,
2417 .clkr = {
2418 .enable_reg = 0x5200c,
2419 .enable_mask = BIT(21),
2420 .hw.init = &(struct clk_init_data){
2421 .name = "gcc_qupv3_wrap_1_s_ahb_clk",
2422 .ops = &clk_branch2_ops,
2423 },
2424 },
2425};
2426
2427static struct clk_branch gcc_rx1_usb2_clkref_clk = {
2428 .halt_reg = 0x8c014,
2429 .halt_check = BRANCH_HALT,
2430 .clkr = {
2431 .enable_reg = 0x8c014,
2432 .enable_mask = BIT(0),
2433 .hw.init = &(struct clk_init_data){
2434 .name = "gcc_rx1_usb2_clkref_clk",
2435 .ops = &clk_branch2_ops,
2436 },
2437 },
2438};
2439
2440static struct clk_branch gcc_rx2_qlink_clkref_clk = {
2441 .halt_reg = 0x8c018,
2442 .halt_check = BRANCH_HALT,
2443 .clkr = {
2444 .enable_reg = 0x8c018,
2445 .enable_mask = BIT(0),
2446 .hw.init = &(struct clk_init_data){
2447 .name = "gcc_rx2_qlink_clkref_clk",
2448 .ops = &clk_branch2_ops,
2449 },
2450 },
2451};
2452
2453static struct clk_branch gcc_rx3_modem_clkref_clk = {
2454 .halt_reg = 0x8c01c,
2455 .halt_check = BRANCH_HALT,
2456 .clkr = {
2457 .enable_reg = 0x8c01c,
2458 .enable_mask = BIT(0),
2459 .hw.init = &(struct clk_init_data){
2460 .name = "gcc_rx3_modem_clkref_clk",
2461 .ops = &clk_branch2_ops,
2462 },
2463 },
2464};
2465
2466static struct clk_branch gcc_sdcc2_ahb_clk = {
2467 .halt_reg = 0x14008,
2468 .halt_check = BRANCH_HALT,
2469 .clkr = {
2470 .enable_reg = 0x14008,
2471 .enable_mask = BIT(0),
2472 .hw.init = &(struct clk_init_data){
2473 .name = "gcc_sdcc2_ahb_clk",
2474 .ops = &clk_branch2_ops,
2475 },
2476 },
2477};
2478
2479static struct clk_branch gcc_sdcc2_apps_clk = {
2480 .halt_reg = 0x14004,
2481 .halt_check = BRANCH_HALT,
2482 .clkr = {
2483 .enable_reg = 0x14004,
2484 .enable_mask = BIT(0),
2485 .hw.init = &(struct clk_init_data){
2486 .name = "gcc_sdcc2_apps_clk",
2487 .parent_names = (const char *[]){
2488 "gcc_sdcc2_apps_clk_src",
2489 },
2490 .num_parents = 1,
2491 .flags = CLK_SET_RATE_PARENT,
2492 .ops = &clk_branch2_ops,
2493 },
2494 },
2495};
2496
2497static struct clk_branch gcc_sdcc4_ahb_clk = {
2498 .halt_reg = 0x16008,
2499 .halt_check = BRANCH_HALT,
2500 .clkr = {
2501 .enable_reg = 0x16008,
2502 .enable_mask = BIT(0),
2503 .hw.init = &(struct clk_init_data){
2504 .name = "gcc_sdcc4_ahb_clk",
2505 .ops = &clk_branch2_ops,
2506 },
2507 },
2508};
2509
2510static struct clk_branch gcc_sdcc4_apps_clk = {
2511 .halt_reg = 0x16004,
2512 .halt_check = BRANCH_HALT,
2513 .clkr = {
2514 .enable_reg = 0x16004,
2515 .enable_mask = BIT(0),
2516 .hw.init = &(struct clk_init_data){
2517 .name = "gcc_sdcc4_apps_clk",
2518 .parent_names = (const char *[]){
2519 "gcc_sdcc4_apps_clk_src",
2520 },
2521 .num_parents = 1,
2522 .flags = CLK_SET_RATE_PARENT,
2523 .ops = &clk_branch2_ops,
2524 },
2525 },
2526};
2527
2528static struct clk_branch gcc_sys_noc_cpuss_ahb_clk = {
2529 .halt_reg = 0x414c,
2530 .halt_check = BRANCH_HALT_VOTED,
2531 .clkr = {
2532 .enable_reg = 0x52004,
2533 .enable_mask = BIT(0),
2534 .hw.init = &(struct clk_init_data){
2535 .name = "gcc_sys_noc_cpuss_ahb_clk",
2536 .parent_names = (const char *[]){
2537 "gcc_cpuss_ahb_clk_src",
2538 },
2539 .num_parents = 1,
2540 .flags = CLK_SET_RATE_PARENT,
2541 .ops = &clk_branch2_ops,
2542 },
2543 },
2544};
2545
2546static struct clk_branch gcc_tsif_ahb_clk = {
2547 .halt_reg = 0x36004,
2548 .halt_check = BRANCH_HALT,
2549 .clkr = {
2550 .enable_reg = 0x36004,
2551 .enable_mask = BIT(0),
2552 .hw.init = &(struct clk_init_data){
2553 .name = "gcc_tsif_ahb_clk",
2554 .ops = &clk_branch2_ops,
2555 },
2556 },
2557};
2558
2559static struct clk_branch gcc_tsif_inactivity_timers_clk = {
2560 .halt_reg = 0x3600c,
2561 .halt_check = BRANCH_HALT,
2562 .clkr = {
2563 .enable_reg = 0x3600c,
2564 .enable_mask = BIT(0),
2565 .hw.init = &(struct clk_init_data){
2566 .name = "gcc_tsif_inactivity_timers_clk",
2567 .ops = &clk_branch2_ops,
2568 },
2569 },
2570};
2571
2572static struct clk_branch gcc_tsif_ref_clk = {
2573 .halt_reg = 0x36008,
2574 .halt_check = BRANCH_HALT,
2575 .clkr = {
2576 .enable_reg = 0x36008,
2577 .enable_mask = BIT(0),
2578 .hw.init = &(struct clk_init_data){
2579 .name = "gcc_tsif_ref_clk",
2580 .parent_names = (const char *[]){
2581 "gcc_tsif_ref_clk_src",
2582 },
2583 .num_parents = 1,
2584 .flags = CLK_SET_RATE_PARENT,
2585 .ops = &clk_branch2_ops,
2586 },
2587 },
2588};
2589
2590static struct clk_branch gcc_ufs_card_ahb_clk = {
2591 .halt_reg = 0x75010,
2592 .halt_check = BRANCH_HALT,
2593 .clkr = {
2594 .enable_reg = 0x75010,
2595 .enable_mask = BIT(0),
2596 .hw.init = &(struct clk_init_data){
2597 .name = "gcc_ufs_card_ahb_clk",
2598 .ops = &clk_branch2_ops,
2599 },
2600 },
2601};
2602
2603static struct clk_branch gcc_ufs_card_axi_clk = {
2604 .halt_reg = 0x7500c,
2605 .halt_check = BRANCH_HALT,
2606 .clkr = {
2607 .enable_reg = 0x7500c,
2608 .enable_mask = BIT(0),
2609 .hw.init = &(struct clk_init_data){
2610 .name = "gcc_ufs_card_axi_clk",
2611 .parent_names = (const char *[]){
2612 "gcc_ufs_card_axi_clk_src",
2613 },
2614 .num_parents = 1,
2615 .flags = CLK_SET_RATE_PARENT,
2616 .ops = &clk_branch2_ops,
2617 },
2618 },
2619};
2620
2621static struct clk_branch gcc_ufs_card_clkref_clk = {
2622 .halt_reg = 0x8c004,
2623 .halt_check = BRANCH_HALT,
2624 .clkr = {
2625 .enable_reg = 0x8c004,
2626 .enable_mask = BIT(0),
2627 .hw.init = &(struct clk_init_data){
2628 .name = "gcc_ufs_card_clkref_clk",
2629 .ops = &clk_branch2_ops,
2630 },
2631 },
2632};
2633
2634static struct clk_branch gcc_ufs_card_ice_core_clk = {
2635 .halt_reg = 0x75058,
2636 .halt_check = BRANCH_HALT,
2637 .clkr = {
2638 .enable_reg = 0x75058,
2639 .enable_mask = BIT(0),
2640 .hw.init = &(struct clk_init_data){
2641 .name = "gcc_ufs_card_ice_core_clk",
2642 .parent_names = (const char *[]){
2643 "gcc_ufs_card_ice_core_clk_src",
2644 },
2645 .num_parents = 1,
2646 .flags = CLK_SET_RATE_PARENT,
2647 .ops = &clk_branch2_ops,
2648 },
2649 },
2650};
2651
2652static struct clk_branch gcc_ufs_card_phy_aux_clk = {
2653 .halt_reg = 0x7508c,
2654 .halt_check = BRANCH_HALT,
2655 .clkr = {
2656 .enable_reg = 0x7508c,
2657 .enable_mask = BIT(0),
2658 .hw.init = &(struct clk_init_data){
2659 .name = "gcc_ufs_card_phy_aux_clk",
2660 .parent_names = (const char *[]){
2661 "gcc_ufs_card_phy_aux_clk_src",
2662 },
2663 .num_parents = 1,
2664 .flags = CLK_SET_RATE_PARENT,
2665 .ops = &clk_branch2_ops,
2666 },
2667 },
2668};
2669
2670static struct clk_gate2 gcc_ufs_card_rx_symbol_0_clk = {
2671 .udelay = 500,
2672 .clkr = {
2673 .enable_reg = 0x75018,
2674 .enable_mask = BIT(0),
2675 .hw.init = &(struct clk_init_data){
2676 .name = "gcc_ufs_card_rx_symbol_0_clk",
2677 .ops = &clk_gate2_ops,
2678 },
2679 },
2680};
2681
2682static struct clk_gate2 gcc_ufs_card_rx_symbol_1_clk = {
2683 .udelay = 500,
2684 .clkr = {
2685 .enable_reg = 0x750a8,
2686 .enable_mask = BIT(0),
2687 .hw.init = &(struct clk_init_data){
2688 .name = "gcc_ufs_card_rx_symbol_1_clk",
2689 .ops = &clk_gate2_ops,
2690 },
2691 },
2692};
2693
2694static struct clk_gate2 gcc_ufs_card_tx_symbol_0_clk = {
2695 .udelay = 500,
2696 .clkr = {
2697 .enable_reg = 0x75014,
2698 .enable_mask = BIT(0),
2699 .hw.init = &(struct clk_init_data){
2700 .name = "gcc_ufs_card_tx_symbol_0_clk",
2701 .ops = &clk_gate2_ops,
2702 },
2703 },
2704};
2705
2706static struct clk_branch gcc_ufs_card_unipro_core_clk = {
2707 .halt_reg = 0x75054,
2708 .halt_check = BRANCH_HALT,
2709 .clkr = {
2710 .enable_reg = 0x75054,
2711 .enable_mask = BIT(0),
2712 .hw.init = &(struct clk_init_data){
2713 .name = "gcc_ufs_card_unipro_core_clk",
2714 .parent_names = (const char *[]){
2715 "gcc_ufs_card_unipro_core_clk_src",
2716 },
2717 .num_parents = 1,
2718 .flags = CLK_SET_RATE_PARENT,
2719 .ops = &clk_branch2_ops,
2720 },
2721 },
2722};
2723
2724static struct clk_branch gcc_ufs_mem_clkref_clk = {
2725 .halt_reg = 0x8c000,
2726 .halt_check = BRANCH_HALT,
2727 .clkr = {
2728 .enable_reg = 0x8c000,
2729 .enable_mask = BIT(0),
2730 .hw.init = &(struct clk_init_data){
2731 .name = "gcc_ufs_mem_clkref_clk",
2732 .ops = &clk_branch2_ops,
2733 },
2734 },
2735};
2736
2737static struct clk_branch gcc_ufs_phy_ahb_clk = {
2738 .halt_reg = 0x77010,
2739 .halt_check = BRANCH_HALT,
2740 .clkr = {
2741 .enable_reg = 0x77010,
2742 .enable_mask = BIT(0),
2743 .hw.init = &(struct clk_init_data){
2744 .name = "gcc_ufs_phy_ahb_clk",
2745 .ops = &clk_branch2_ops,
2746 },
2747 },
2748};
2749
2750static struct clk_branch gcc_ufs_phy_axi_clk = {
2751 .halt_reg = 0x7700c,
2752 .halt_check = BRANCH_HALT,
2753 .clkr = {
2754 .enable_reg = 0x7700c,
2755 .enable_mask = BIT(0),
2756 .hw.init = &(struct clk_init_data){
2757 .name = "gcc_ufs_phy_axi_clk",
2758 .parent_names = (const char *[]){
2759 "gcc_ufs_phy_axi_clk_src",
2760 },
2761 .num_parents = 1,
2762 .flags = CLK_SET_RATE_PARENT,
2763 .ops = &clk_branch2_ops,
2764 },
2765 },
2766};
2767
2768static struct clk_branch gcc_ufs_phy_ice_core_clk = {
2769 .halt_reg = 0x77058,
2770 .halt_check = BRANCH_HALT,
2771 .clkr = {
2772 .enable_reg = 0x77058,
2773 .enable_mask = BIT(0),
2774 .hw.init = &(struct clk_init_data){
2775 .name = "gcc_ufs_phy_ice_core_clk",
2776 .parent_names = (const char *[]){
2777 "gcc_ufs_phy_ice_core_clk_src",
2778 },
2779 .num_parents = 1,
2780 .flags = CLK_SET_RATE_PARENT,
2781 .ops = &clk_branch2_ops,
2782 },
2783 },
2784};
2785
2786static struct clk_branch gcc_ufs_phy_phy_aux_clk = {
2787 .halt_reg = 0x7708c,
2788 .halt_check = BRANCH_HALT,
2789 .clkr = {
2790 .enable_reg = 0x7708c,
2791 .enable_mask = BIT(0),
2792 .hw.init = &(struct clk_init_data){
2793 .name = "gcc_ufs_phy_phy_aux_clk",
2794 .parent_names = (const char *[]){
2795 "gcc_ufs_phy_phy_aux_clk_src",
2796 },
2797 .num_parents = 1,
2798 .flags = CLK_SET_RATE_PARENT,
2799 .ops = &clk_branch2_ops,
2800 },
2801 },
2802};
2803
2804static struct clk_gate2 gcc_ufs_phy_rx_symbol_0_clk = {
2805 .udelay = 500,
2806 .clkr = {
2807 .enable_reg = 0x77018,
2808 .enable_mask = BIT(0),
2809 .hw.init = &(struct clk_init_data){
2810 .name = "gcc_ufs_phy_rx_symbol_0_clk",
2811 .ops = &clk_gate2_ops,
2812 },
2813 },
2814};
2815
2816static struct clk_gate2 gcc_ufs_phy_rx_symbol_1_clk = {
2817 .udelay = 500,
2818 .clkr = {
2819 .enable_reg = 0x770a8,
2820 .enable_mask = BIT(0),
2821 .hw.init = &(struct clk_init_data){
2822 .name = "gcc_ufs_phy_rx_symbol_1_clk",
2823 .ops = &clk_gate2_ops,
2824 },
2825 },
2826};
2827
2828static struct clk_gate2 gcc_ufs_phy_tx_symbol_0_clk = {
2829 .udelay = 500,
2830 .clkr = {
2831 .enable_reg = 0x77014,
2832 .enable_mask = BIT(0),
2833 .hw.init = &(struct clk_init_data){
2834 .name = "gcc_ufs_phy_tx_symbol_0_clk",
2835 .ops = &clk_gate2_ops,
2836 },
2837 },
2838};
2839
2840static struct clk_branch gcc_ufs_phy_unipro_core_clk = {
2841 .halt_reg = 0x77054,
2842 .halt_check = BRANCH_HALT,
2843 .clkr = {
2844 .enable_reg = 0x77054,
2845 .enable_mask = BIT(0),
2846 .hw.init = &(struct clk_init_data){
2847 .name = "gcc_ufs_phy_unipro_core_clk",
2848 .parent_names = (const char *[]){
2849 "gcc_ufs_phy_unipro_core_clk_src",
2850 },
2851 .num_parents = 1,
2852 .flags = CLK_SET_RATE_PARENT,
2853 .ops = &clk_branch2_ops,
2854 },
2855 },
2856};
2857
2858static struct clk_branch gcc_usb30_prim_master_clk = {
2859 .halt_reg = 0xf00c,
2860 .halt_check = BRANCH_HALT,
2861 .clkr = {
2862 .enable_reg = 0xf00c,
2863 .enable_mask = BIT(0),
2864 .hw.init = &(struct clk_init_data){
2865 .name = "gcc_usb30_prim_master_clk",
2866 .parent_names = (const char *[]){
2867 "gcc_usb30_prim_master_clk_src",
2868 },
2869 .num_parents = 1,
2870 .flags = CLK_SET_RATE_PARENT,
2871 .ops = &clk_branch2_ops,
2872 },
2873 },
2874};
2875
2876static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {
2877 .halt_reg = 0xf014,
2878 .halt_check = BRANCH_HALT,
2879 .clkr = {
2880 .enable_reg = 0xf014,
2881 .enable_mask = BIT(0),
2882 .hw.init = &(struct clk_init_data){
2883 .name = "gcc_usb30_prim_mock_utmi_clk",
2884 .parent_names = (const char *[]){
2885 "gcc_usb30_prim_mock_utmi_clk_src",
2886 },
2887 .num_parents = 1,
2888 .flags = CLK_SET_RATE_PARENT,
2889 .ops = &clk_branch2_ops,
2890 },
2891 },
2892};
2893
2894static struct clk_branch gcc_usb30_prim_sleep_clk = {
2895 .halt_reg = 0xf010,
2896 .halt_check = BRANCH_HALT,
2897 .clkr = {
2898 .enable_reg = 0xf010,
2899 .enable_mask = BIT(0),
2900 .hw.init = &(struct clk_init_data){
2901 .name = "gcc_usb30_prim_sleep_clk",
2902 .ops = &clk_branch2_ops,
2903 },
2904 },
2905};
2906
2907static struct clk_branch gcc_usb30_sec_master_clk = {
2908 .halt_reg = 0x1000c,
2909 .halt_check = BRANCH_HALT,
2910 .clkr = {
2911 .enable_reg = 0x1000c,
2912 .enable_mask = BIT(0),
2913 .hw.init = &(struct clk_init_data){
2914 .name = "gcc_usb30_sec_master_clk",
2915 .parent_names = (const char *[]){
2916 "gcc_usb30_sec_master_clk_src",
2917 },
2918 .num_parents = 1,
2919 .flags = CLK_SET_RATE_PARENT,
2920 .ops = &clk_branch2_ops,
2921 },
2922 },
2923};
2924
2925static struct clk_branch gcc_usb30_sec_mock_utmi_clk = {
2926 .halt_reg = 0x10014,
2927 .halt_check = BRANCH_HALT,
2928 .clkr = {
2929 .enable_reg = 0x10014,
2930 .enable_mask = BIT(0),
2931 .hw.init = &(struct clk_init_data){
2932 .name = "gcc_usb30_sec_mock_utmi_clk",
2933 .parent_names = (const char *[]){
2934 "gcc_usb30_sec_mock_utmi_clk_src",
2935 },
2936 .num_parents = 1,
2937 .flags = CLK_SET_RATE_PARENT,
2938 .ops = &clk_branch2_ops,
2939 },
2940 },
2941};
2942
2943static struct clk_branch gcc_usb30_sec_sleep_clk = {
2944 .halt_reg = 0x10010,
2945 .halt_check = BRANCH_HALT,
2946 .clkr = {
2947 .enable_reg = 0x10010,
2948 .enable_mask = BIT(0),
2949 .hw.init = &(struct clk_init_data){
2950 .name = "gcc_usb30_sec_sleep_clk",
2951 .ops = &clk_branch2_ops,
2952 },
2953 },
2954};
2955
2956static struct clk_branch gcc_usb3_prim_clkref_clk = {
2957 .halt_reg = 0x8c008,
2958 .halt_check = BRANCH_HALT,
2959 .clkr = {
2960 .enable_reg = 0x8c008,
2961 .enable_mask = BIT(0),
2962 .hw.init = &(struct clk_init_data){
2963 .name = "gcc_usb3_prim_clkref_clk",
2964 .ops = &clk_branch2_ops,
2965 },
2966 },
2967};
2968
2969static struct clk_branch gcc_usb3_prim_phy_aux_clk = {
2970 .halt_reg = 0xf04c,
2971 .halt_check = BRANCH_HALT,
2972 .clkr = {
2973 .enable_reg = 0xf04c,
2974 .enable_mask = BIT(0),
2975 .hw.init = &(struct clk_init_data){
2976 .name = "gcc_usb3_prim_phy_aux_clk",
2977 .parent_names = (const char *[]){
2978 "gcc_usb3_prim_phy_aux_clk_src",
2979 },
2980 .num_parents = 1,
2981 .flags = CLK_SET_RATE_PARENT,
2982 .ops = &clk_branch2_ops,
2983 },
2984 },
2985};
2986
2987static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {
2988 .halt_reg = 0xf050,
2989 .halt_check = BRANCH_HALT,
2990 .clkr = {
2991 .enable_reg = 0xf050,
2992 .enable_mask = BIT(0),
2993 .hw.init = &(struct clk_init_data){
2994 .name = "gcc_usb3_prim_phy_com_aux_clk",
2995 .parent_names = (const char *[]){
2996 "gcc_usb3_prim_phy_aux_clk_src",
2997 },
2998 .num_parents = 1,
2999 .flags = CLK_SET_RATE_PARENT,
3000 .ops = &clk_branch2_ops,
3001 },
3002 },
3003};
3004
3005static struct clk_gate2 gcc_usb3_prim_phy_pipe_clk = {
3006 .udelay = 500,
3007 .clkr = {
3008 .enable_reg = 0xf054,
3009 .enable_mask = BIT(0),
3010 .hw.init = &(struct clk_init_data){
3011 .name = "gcc_usb3_prim_phy_pipe_clk",
3012 .ops = &clk_gate2_ops,
3013 },
3014 },
3015};
3016
3017static struct clk_branch gcc_usb3_sec_clkref_clk = {
3018 .halt_reg = 0x8c028,
3019 .halt_check = BRANCH_HALT,
3020 .clkr = {
3021 .enable_reg = 0x8c028,
3022 .enable_mask = BIT(0),
3023 .hw.init = &(struct clk_init_data){
3024 .name = "gcc_usb3_sec_clkref_clk",
3025 .ops = &clk_branch2_ops,
3026 },
3027 },
3028};
3029
3030static struct clk_branch gcc_usb3_sec_phy_aux_clk = {
3031 .halt_reg = 0x1004c,
3032 .halt_check = BRANCH_HALT,
3033 .clkr = {
3034 .enable_reg = 0x1004c,
3035 .enable_mask = BIT(0),
3036 .hw.init = &(struct clk_init_data){
3037 .name = "gcc_usb3_sec_phy_aux_clk",
3038 .parent_names = (const char *[]){
3039 "gcc_usb3_sec_phy_aux_clk_src",
3040 },
3041 .num_parents = 1,
3042 .flags = CLK_SET_RATE_PARENT,
3043 .ops = &clk_branch2_ops,
3044 },
3045 },
3046};
3047
3048static struct clk_branch gcc_usb3_sec_phy_com_aux_clk = {
3049 .halt_reg = 0x10050,
3050 .halt_check = BRANCH_HALT,
3051 .clkr = {
3052 .enable_reg = 0x10050,
3053 .enable_mask = BIT(0),
3054 .hw.init = &(struct clk_init_data){
3055 .name = "gcc_usb3_sec_phy_com_aux_clk",
3056 .parent_names = (const char *[]){
3057 "gcc_usb3_sec_phy_aux_clk_src",
3058 },
3059 .num_parents = 1,
3060 .flags = CLK_SET_RATE_PARENT,
3061 .ops = &clk_branch2_ops,
3062 },
3063 },
3064};
3065
3066static struct clk_gate2 gcc_usb3_sec_phy_pipe_clk = {
3067 .udelay = 500,
3068 .clkr = {
3069 .enable_reg = 0x10054,
3070 .enable_mask = BIT(0),
3071 .hw.init = &(struct clk_init_data){
3072 .name = "gcc_usb3_sec_phy_pipe_clk",
3073 .ops = &clk_gate2_ops,
3074 },
3075 },
3076};
3077
3078static struct clk_branch gcc_usb_phy_cfg_ahb2phy_clk = {
3079 .halt_reg = 0x6a004,
3080 .halt_check = BRANCH_HALT,
3081 .clkr = {
3082 .enable_reg = 0x6a004,
3083 .enable_mask = BIT(0),
3084 .hw.init = &(struct clk_init_data){
3085 .name = "gcc_usb_phy_cfg_ahb2phy_clk",
3086 .ops = &clk_branch2_ops,
3087 },
3088 },
3089};
3090
3091static struct clk_branch gcc_video_ahb_clk = {
3092 .halt_reg = 0xb004,
3093 .halt_check = BRANCH_HALT,
3094 .clkr = {
3095 .enable_reg = 0xb004,
3096 .enable_mask = BIT(0),
3097 .hw.init = &(struct clk_init_data){
3098 .name = "gcc_video_ahb_clk",
3099 .ops = &clk_branch2_ops,
3100 },
3101 },
3102};
3103
3104static struct clk_branch gcc_video_axi_clk = {
3105 .halt_reg = 0xb01c,
3106 .halt_check = BRANCH_VOTED,
3107 .clkr = {
3108 .enable_reg = 0xb01c,
3109 .enable_mask = BIT(0),
3110 .hw.init = &(struct clk_init_data){
3111 .name = "gcc_video_axi_clk",
3112 .ops = &clk_branch2_ops,
3113 },
3114 },
3115};
3116
3117static struct clk_branch gcc_video_xo_clk = {
3118 .halt_reg = 0xb028,
3119 .halt_check = BRANCH_HALT,
3120 .clkr = {
3121 .enable_reg = 0xb028,
3122 .enable_mask = BIT(0),
3123 .hw.init = &(struct clk_init_data){
3124 .name = "gcc_video_xo_clk",
3125 .ops = &clk_branch2_ops,
3126 },
3127 },
3128};
3129
Deepak Katragaddad075ba32017-04-06 13:45:47 -07003130struct clk_hw *gcc_sdm845_hws[] = {
3131 [MEASURE_ONLY_SNOC_CLK] = &measure_only_snoc_clk.hw,
3132 [MEASURE_ONLY_CNOC_CLK] = &measure_only_cnoc_clk.hw,
3133 [MEASURE_ONLY_BIMC_CLK] = &measure_only_bimc_clk.hw,
3134 [MEASURE_ONLY_IPA_2X_CLK] = &measure_only_ipa_2x_clk.hw,
3135};
3136
Kyle Yan6a20fae2017-02-14 13:34:41 -08003137static struct clk_regmap *gcc_sdm845_clocks[] = {
Deepak Katragadda575a45f2016-10-11 15:06:56 -07003138 [GCC_AGGRE_NOC_PCIE_TBU_CLK] = &gcc_aggre_noc_pcie_tbu_clk.clkr,
3139 [GCC_AGGRE_UFS_CARD_AXI_CLK] = &gcc_aggre_ufs_card_axi_clk.clkr,
3140 [GCC_AGGRE_UFS_PHY_AXI_CLK] = &gcc_aggre_ufs_phy_axi_clk.clkr,
3141 [GCC_AGGRE_USB3_PRIM_AXI_CLK] = &gcc_aggre_usb3_prim_axi_clk.clkr,
3142 [GCC_AGGRE_USB3_SEC_AXI_CLK] = &gcc_aggre_usb3_sec_axi_clk.clkr,
3143 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
3144 [GCC_CAMERA_AHB_CLK] = &gcc_camera_ahb_clk.clkr,
3145 [GCC_CAMERA_AXI_CLK] = &gcc_camera_axi_clk.clkr,
3146 [GCC_CAMERA_XO_CLK] = &gcc_camera_xo_clk.clkr,
3147 [GCC_CE1_AHB_CLK] = &gcc_ce1_ahb_clk.clkr,
3148 [GCC_CE1_AXI_CLK] = &gcc_ce1_axi_clk.clkr,
3149 [GCC_CE1_CLK] = &gcc_ce1_clk.clkr,
3150 [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
3151 [GCC_CFG_NOC_USB3_SEC_AXI_CLK] = &gcc_cfg_noc_usb3_sec_axi_clk.clkr,
3152 [GCC_CPUSS_AHB_CLK] = &gcc_cpuss_ahb_clk.clkr,
3153 [GCC_CPUSS_AHB_CLK_SRC] = &gcc_cpuss_ahb_clk_src.clkr,
3154 [GCC_CPUSS_DVM_BUS_CLK] = &gcc_cpuss_dvm_bus_clk.clkr,
3155 [GCC_CPUSS_GNOC_CLK] = &gcc_cpuss_gnoc_clk.clkr,
3156 [GCC_CPUSS_RBCPR_CLK] = &gcc_cpuss_rbcpr_clk.clkr,
3157 [GCC_CPUSS_RBCPR_CLK_SRC] = &gcc_cpuss_rbcpr_clk_src.clkr,
3158 [GCC_CXO_TX1_CLKREF_CLK] = &gcc_cxo_tx1_clkref_clk.clkr,
3159 [GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr,
3160 [GCC_DISP_AHB_CLK] = &gcc_disp_ahb_clk.clkr,
3161 [GCC_DISP_AXI_CLK] = &gcc_disp_axi_clk.clkr,
3162 [GCC_DISP_GPLL0_CLK_SRC] = &gcc_disp_gpll0_clk_src.clkr,
3163 [GCC_DISP_GPLL0_DIV_CLK_SRC] = &gcc_disp_gpll0_div_clk_src.clkr,
3164 [GCC_DISP_XO_CLK] = &gcc_disp_xo_clk.clkr,
3165 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
3166 [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
3167 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
3168 [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
3169 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
3170 [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
3171 [GCC_GPU_CFG_AHB_CLK] = &gcc_gpu_cfg_ahb_clk.clkr,
3172 [GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr,
3173 [GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr,
3174 [GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,
3175 [GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,
Deepak Katragadda575a45f2016-10-11 15:06:56 -07003176 [GCC_MSS_AXIS2_CLK] = &gcc_mss_axis2_clk.clkr,
3177 [GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,
3178 [GCC_MSS_GPLL0_DIV_CLK_SRC] = &gcc_mss_gpll0_div_clk_src.clkr,
3179 [GCC_MSS_MFAB_AXIS_CLK] = &gcc_mss_mfab_axis_clk.clkr,
3180 [GCC_MSS_Q6_MEMNOC_AXI_CLK] = &gcc_mss_q6_memnoc_axi_clk.clkr,
3181 [GCC_MSS_SNOC_AXI_CLK] = &gcc_mss_snoc_axi_clk.clkr,
3182 [GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,
3183 [GCC_PCIE_0_AUX_CLK_SRC] = &gcc_pcie_0_aux_clk_src.clkr,
3184 [GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr,
3185 [GCC_PCIE_0_CLKREF_CLK] = &gcc_pcie_0_clkref_clk.clkr,
3186 [GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr,
3187 [GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,
3188 [GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr,
3189 [GCC_PCIE_0_SLV_Q2A_AXI_CLK] = &gcc_pcie_0_slv_q2a_axi_clk.clkr,
3190 [GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr,
3191 [GCC_PCIE_1_AUX_CLK_SRC] = &gcc_pcie_1_aux_clk_src.clkr,
3192 [GCC_PCIE_1_CFG_AHB_CLK] = &gcc_pcie_1_cfg_ahb_clk.clkr,
3193 [GCC_PCIE_1_CLKREF_CLK] = &gcc_pcie_1_clkref_clk.clkr,
3194 [GCC_PCIE_1_MSTR_AXI_CLK] = &gcc_pcie_1_mstr_axi_clk.clkr,
3195 [GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr,
3196 [GCC_PCIE_1_SLV_AXI_CLK] = &gcc_pcie_1_slv_axi_clk.clkr,
3197 [GCC_PCIE_1_SLV_Q2A_AXI_CLK] = &gcc_pcie_1_slv_q2a_axi_clk.clkr,
3198 [GCC_PCIE_PHY_AUX_CLK] = &gcc_pcie_phy_aux_clk.clkr,
3199 [GCC_PCIE_PHY_REFGEN_CLK] = &gcc_pcie_phy_refgen_clk.clkr,
3200 [GCC_PCIE_PHY_REFGEN_CLK_SRC] = &gcc_pcie_phy_refgen_clk_src.clkr,
3201 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
3202 [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
3203 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
3204 [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
3205 [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
3206 [GCC_QMIP_CAMERA_AHB_CLK] = &gcc_qmip_camera_ahb_clk.clkr,
3207 [GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr,
3208 [GCC_QMIP_VIDEO_AHB_CLK] = &gcc_qmip_video_ahb_clk.clkr,
Deepak Katragadda575a45f2016-10-11 15:06:56 -07003209 [GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr,
3210 [GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr,
3211 [GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr,
3212 [GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr,
3213 [GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr,
3214 [GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr,
3215 [GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr,
3216 [GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr,
3217 [GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr,
3218 [GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr,
3219 [GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr,
3220 [GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr,
3221 [GCC_QUPV3_WRAP0_S6_CLK] = &gcc_qupv3_wrap0_s6_clk.clkr,
3222 [GCC_QUPV3_WRAP0_S6_CLK_SRC] = &gcc_qupv3_wrap0_s6_clk_src.clkr,
3223 [GCC_QUPV3_WRAP0_S7_CLK] = &gcc_qupv3_wrap0_s7_clk.clkr,
3224 [GCC_QUPV3_WRAP0_S7_CLK_SRC] = &gcc_qupv3_wrap0_s7_clk_src.clkr,
Deepak Katragadda575a45f2016-10-11 15:06:56 -07003225 [GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr,
3226 [GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr,
3227 [GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr,
3228 [GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr,
3229 [GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr,
3230 [GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr,
3231 [GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr,
3232 [GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr,
3233 [GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr,
3234 [GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr,
3235 [GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr,
3236 [GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr,
3237 [GCC_QUPV3_WRAP1_S6_CLK] = &gcc_qupv3_wrap1_s6_clk.clkr,
3238 [GCC_QUPV3_WRAP1_S6_CLK_SRC] = &gcc_qupv3_wrap1_s6_clk_src.clkr,
3239 [GCC_QUPV3_WRAP1_S7_CLK] = &gcc_qupv3_wrap1_s7_clk.clkr,
3240 [GCC_QUPV3_WRAP1_S7_CLK_SRC] = &gcc_qupv3_wrap1_s7_clk_src.clkr,
3241 [GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr,
3242 [GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr,
3243 [GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr,
3244 [GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr,
3245 [GCC_RX1_USB2_CLKREF_CLK] = &gcc_rx1_usb2_clkref_clk.clkr,
3246 [GCC_RX2_QLINK_CLKREF_CLK] = &gcc_rx2_qlink_clkref_clk.clkr,
3247 [GCC_RX3_MODEM_CLKREF_CLK] = &gcc_rx3_modem_clkref_clk.clkr,
3248 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
3249 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
3250 [GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr,
3251 [GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr,
3252 [GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr,
3253 [GCC_SDCC4_APPS_CLK_SRC] = &gcc_sdcc4_apps_clk_src.clkr,
3254 [GCC_SYS_NOC_CPUSS_AHB_CLK] = &gcc_sys_noc_cpuss_ahb_clk.clkr,
3255 [GCC_TSIF_AHB_CLK] = &gcc_tsif_ahb_clk.clkr,
3256 [GCC_TSIF_INACTIVITY_TIMERS_CLK] =
3257 &gcc_tsif_inactivity_timers_clk.clkr,
3258 [GCC_TSIF_REF_CLK] = &gcc_tsif_ref_clk.clkr,
3259 [GCC_TSIF_REF_CLK_SRC] = &gcc_tsif_ref_clk_src.clkr,
3260 [GCC_UFS_CARD_AHB_CLK] = &gcc_ufs_card_ahb_clk.clkr,
3261 [GCC_UFS_CARD_AXI_CLK] = &gcc_ufs_card_axi_clk.clkr,
3262 [GCC_UFS_CARD_AXI_CLK_SRC] = &gcc_ufs_card_axi_clk_src.clkr,
3263 [GCC_UFS_CARD_CLKREF_CLK] = &gcc_ufs_card_clkref_clk.clkr,
3264 [GCC_UFS_CARD_ICE_CORE_CLK] = &gcc_ufs_card_ice_core_clk.clkr,
3265 [GCC_UFS_CARD_ICE_CORE_CLK_SRC] = &gcc_ufs_card_ice_core_clk_src.clkr,
3266 [GCC_UFS_CARD_PHY_AUX_CLK] = &gcc_ufs_card_phy_aux_clk.clkr,
3267 [GCC_UFS_CARD_PHY_AUX_CLK_SRC] = &gcc_ufs_card_phy_aux_clk_src.clkr,
3268 [GCC_UFS_CARD_RX_SYMBOL_0_CLK] = &gcc_ufs_card_rx_symbol_0_clk.clkr,
3269 [GCC_UFS_CARD_RX_SYMBOL_1_CLK] = &gcc_ufs_card_rx_symbol_1_clk.clkr,
3270 [GCC_UFS_CARD_TX_SYMBOL_0_CLK] = &gcc_ufs_card_tx_symbol_0_clk.clkr,
3271 [GCC_UFS_CARD_UNIPRO_CORE_CLK] = &gcc_ufs_card_unipro_core_clk.clkr,
3272 [GCC_UFS_CARD_UNIPRO_CORE_CLK_SRC] =
3273 &gcc_ufs_card_unipro_core_clk_src.clkr,
3274 [GCC_UFS_MEM_CLKREF_CLK] = &gcc_ufs_mem_clkref_clk.clkr,
3275 [GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr,
3276 [GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr,
3277 [GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr,
3278 [GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr,
3279 [GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr,
3280 [GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr,
3281 [GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr,
3282 [GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr,
3283 [GCC_UFS_PHY_RX_SYMBOL_1_CLK] = &gcc_ufs_phy_rx_symbol_1_clk.clkr,
3284 [GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr,
3285 [GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr,
3286 [GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] =
3287 &gcc_ufs_phy_unipro_core_clk_src.clkr,
3288 [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,
3289 [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,
3290 [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,
3291 [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] =
3292 &gcc_usb30_prim_mock_utmi_clk_src.clkr,
3293 [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,
3294 [GCC_USB30_SEC_MASTER_CLK] = &gcc_usb30_sec_master_clk.clkr,
3295 [GCC_USB30_SEC_MASTER_CLK_SRC] = &gcc_usb30_sec_master_clk_src.clkr,
3296 [GCC_USB30_SEC_MOCK_UTMI_CLK] = &gcc_usb30_sec_mock_utmi_clk.clkr,
3297 [GCC_USB30_SEC_MOCK_UTMI_CLK_SRC] =
3298 &gcc_usb30_sec_mock_utmi_clk_src.clkr,
3299 [GCC_USB30_SEC_SLEEP_CLK] = &gcc_usb30_sec_sleep_clk.clkr,
3300 [GCC_USB3_PRIM_CLKREF_CLK] = &gcc_usb3_prim_clkref_clk.clkr,
3301 [GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr,
3302 [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,
3303 [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,
3304 [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,
3305 [GCC_USB3_SEC_CLKREF_CLK] = &gcc_usb3_sec_clkref_clk.clkr,
3306 [GCC_USB3_SEC_PHY_AUX_CLK] = &gcc_usb3_sec_phy_aux_clk.clkr,
3307 [GCC_USB3_SEC_PHY_AUX_CLK_SRC] = &gcc_usb3_sec_phy_aux_clk_src.clkr,
3308 [GCC_USB3_SEC_PHY_COM_AUX_CLK] = &gcc_usb3_sec_phy_com_aux_clk.clkr,
3309 [GCC_USB3_SEC_PHY_PIPE_CLK] = &gcc_usb3_sec_phy_pipe_clk.clkr,
3310 [GCC_USB_PHY_CFG_AHB2PHY_CLK] = &gcc_usb_phy_cfg_ahb2phy_clk.clkr,
3311 [GCC_VIDEO_AHB_CLK] = &gcc_video_ahb_clk.clkr,
3312 [GCC_VIDEO_AXI_CLK] = &gcc_video_axi_clk.clkr,
3313 [GCC_VIDEO_XO_CLK] = &gcc_video_xo_clk.clkr,
3314 [GPLL0] = &gpll0.clkr,
3315 [GPLL0_OUT_EVEN] = &gpll0_out_even.clkr,
3316 [GPLL1] = &gpll1.clkr,
3317};
3318
Kyle Yan6a20fae2017-02-14 13:34:41 -08003319static const struct qcom_reset_map gcc_sdm845_resets[] = {
Deepak Katragadda575a45f2016-10-11 15:06:56 -07003320 [GCC_GPU_BCR] = { 0x71000 },
3321 [GCC_MMSS_BCR] = { 0xb000 },
3322 [GCC_PCIE_0_BCR] = { 0x6b000 },
3323 [GCC_PCIE_1_BCR] = { 0x8d000 },
3324 [GCC_PCIE_PHY_BCR] = { 0x6f000 },
3325 [GCC_PDM_BCR] = { 0x33000 },
3326 [GCC_PRNG_BCR] = { 0x34000 },
3327 [GCC_QUPV3_WRAPPER_0_BCR] = { 0x17000 },
3328 [GCC_QUPV3_WRAPPER_1_BCR] = { 0x18000 },
Deepak Katragadda15e9aca2017-03-14 14:10:59 -07003329 [GCC_QUSB2PHY_PRIM_BCR] = { 0x12000 },
3330 [GCC_QUSB2PHY_SEC_BCR] = { 0x12004 },
Deepak Katragadda575a45f2016-10-11 15:06:56 -07003331 [GCC_SDCC2_BCR] = { 0x14000 },
3332 [GCC_SDCC4_BCR] = { 0x16000 },
3333 [GCC_TSIF_BCR] = { 0x36000 },
3334 [GCC_UFS_CARD_BCR] = { 0x75000 },
3335 [GCC_UFS_PHY_BCR] = { 0x77000 },
3336 [GCC_USB30_PRIM_BCR] = { 0xf000 },
3337 [GCC_USB30_SEC_BCR] = { 0x10000 },
Deepak Katragadda15e9aca2017-03-14 14:10:59 -07003338 [GCC_USB3_PHY_PRIM_BCR] = { 0x50000 },
3339 [GCC_USB3PHY_PHY_PRIM_BCR] = { 0x50004 },
3340 [GCC_USB3_DP_PHY_PRIM_BCR] = { 0x50008 },
3341 [GCC_USB3_PHY_SEC_BCR] = { 0x5000c },
3342 [GCC_USB3PHY_PHY_SEC_BCR] = { 0x50010 },
3343 [GCC_USB3_DP_PHY_SEC_BCR] = { 0x50014 },
Deepak Katragadda575a45f2016-10-11 15:06:56 -07003344 [GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x6a000 },
3345};
3346
Kyle Yan6a20fae2017-02-14 13:34:41 -08003347static const struct regmap_config gcc_sdm845_regmap_config = {
Deepak Katragadda575a45f2016-10-11 15:06:56 -07003348 .reg_bits = 32,
3349 .reg_stride = 4,
3350 .val_bits = 32,
3351 .max_register = 0x182090,
3352 .fast_io = true,
3353};
3354
Kyle Yan6a20fae2017-02-14 13:34:41 -08003355static const struct qcom_cc_desc gcc_sdm845_desc = {
3356 .config = &gcc_sdm845_regmap_config,
3357 .clks = gcc_sdm845_clocks,
3358 .num_clks = ARRAY_SIZE(gcc_sdm845_clocks),
3359 .resets = gcc_sdm845_resets,
3360 .num_resets = ARRAY_SIZE(gcc_sdm845_resets),
Deepak Katragadda575a45f2016-10-11 15:06:56 -07003361};
3362
Kyle Yan6a20fae2017-02-14 13:34:41 -08003363static const struct of_device_id gcc_sdm845_match_table[] = {
3364 { .compatible = "qcom,gcc-sdm845" },
Deepak Katragadda575a45f2016-10-11 15:06:56 -07003365 { }
3366};
Kyle Yan6a20fae2017-02-14 13:34:41 -08003367MODULE_DEVICE_TABLE(of, gcc_sdm845_match_table);
Deepak Katragadda575a45f2016-10-11 15:06:56 -07003368
Kyle Yan6a20fae2017-02-14 13:34:41 -08003369static int gcc_sdm845_probe(struct platform_device *pdev)
Deepak Katragadda575a45f2016-10-11 15:06:56 -07003370{
Deepak Katragaddad075ba32017-04-06 13:45:47 -07003371 struct clk *clk;
Deepak Katragadda575a45f2016-10-11 15:06:56 -07003372 struct regmap *regmap;
Deepak Katragaddad075ba32017-04-06 13:45:47 -07003373 int i, ret = 0;
Deepak Katragadda575a45f2016-10-11 15:06:56 -07003374
Kyle Yan6a20fae2017-02-14 13:34:41 -08003375 regmap = qcom_cc_map(pdev, &gcc_sdm845_desc);
Deepak Katragadda575a45f2016-10-11 15:06:56 -07003376 if (IS_ERR(regmap))
3377 return PTR_ERR(regmap);
3378
Deepak Katragadda575a45f2016-10-11 15:06:56 -07003379 /*
Deepak Katragaddab666c982017-04-10 14:16:17 -07003380 * Set the *_SLEEP_ENA bits to allow certain cpuss* clocks to be
Deepak Katragadda575a45f2016-10-11 15:06:56 -07003381 * turned off by hardware during certain apps low power modes.
3382 */
3383 regmap_update_bits(regmap, GCC_APCS_CLOCK_SLEEP_ENA_VOTE_OFFSET,
Deepak Katragaddab666c982017-04-10 14:16:17 -07003384 CPUSS_AHB_CLK_SLEEP_ENA | SYS_NOC_CPUSS_AHB_CLK_SLEEP_ENA,
3385 CPUSS_AHB_CLK_SLEEP_ENA | SYS_NOC_CPUSS_AHB_CLK_SLEEP_ENA);
Deepak Katragadda575a45f2016-10-11 15:06:56 -07003386
3387 vdd_cx.regulator[0] = devm_regulator_get(&pdev->dev, "vdd_cx");
3388 if (IS_ERR(vdd_cx.regulator[0])) {
3389 if (!(PTR_ERR(vdd_cx.regulator[0]) == -EPROBE_DEFER))
3390 dev_err(&pdev->dev,
3391 "Unable to get vdd_cx regulator\n");
3392 return PTR_ERR(vdd_cx.regulator[0]);
3393 }
3394
3395 vdd_cx_ao.regulator[0] = devm_regulator_get(&pdev->dev, "vdd_cx_ao");
3396 if (IS_ERR(vdd_cx_ao.regulator[0])) {
3397 if (!(PTR_ERR(vdd_cx_ao.regulator[0]) == -EPROBE_DEFER))
3398 dev_err(&pdev->dev,
3399 "Unable to get vdd_cx_ao regulator\n");
3400 return PTR_ERR(vdd_cx_ao.regulator[0]);
3401 }
3402
Deepak Katragaddad075ba32017-04-06 13:45:47 -07003403 /* Register the dummy measurement clocks */
3404 for (i = 0; i < ARRAY_SIZE(gcc_sdm845_hws); i++) {
3405 clk = devm_clk_register(&pdev->dev, gcc_sdm845_hws[i]);
3406 if (IS_ERR(clk))
3407 return PTR_ERR(clk);
3408 }
3409
Kyle Yan6a20fae2017-02-14 13:34:41 -08003410 ret = qcom_cc_really_probe(pdev, &gcc_sdm845_desc, regmap);
Deepak Katragadda575a45f2016-10-11 15:06:56 -07003411 if (ret) {
3412 dev_err(&pdev->dev, "Failed to register GCC clocks\n");
3413 return ret;
3414 }
3415
3416 /* Disable the GPLL0 active input to MMSS and GPU via MISC registers */
3417 regmap_update_bits(regmap, GCC_MMSS_MISC, 0x3, 0x3);
3418 regmap_update_bits(regmap, GCC_GPU_MISC, 0x3, 0x3);
3419
Deepak Katragaddab666c982017-04-10 14:16:17 -07003420 /* Keep these CPUSS clocks enabled always */
Deepak Katragadda575a45f2016-10-11 15:06:56 -07003421 clk_prepare_enable(gcc_cpuss_ahb_clk.clkr.hw.clk);
Deepak Katragaddab666c982017-04-10 14:16:17 -07003422 clk_prepare_enable(gcc_sys_noc_cpuss_ahb_clk.clkr.hw.clk);
Deepak Katragadda575a45f2016-10-11 15:06:56 -07003423 clk_prepare_enable(gcc_cpuss_dvm_bus_clk.clkr.hw.clk);
3424 clk_prepare_enable(gcc_cpuss_gnoc_clk.clkr.hw.clk);
3425
3426 /* Keep the core XO clock enabled always */
3427 clk_prepare_enable(gcc_camera_xo_clk.clkr.hw.clk);
3428 clk_prepare_enable(gcc_disp_xo_clk.clkr.hw.clk);
3429 clk_prepare_enable(gcc_video_xo_clk.clkr.hw.clk);
3430
3431 /* Enable for core register access */
3432 clk_prepare_enable(gcc_gpu_cfg_ahb_clk.clkr.hw.clk);
3433 clk_prepare_enable(gcc_disp_ahb_clk.clkr.hw.clk);
3434 clk_prepare_enable(gcc_camera_ahb_clk.clkr.hw.clk);
3435 clk_prepare_enable(gcc_video_ahb_clk.clkr.hw.clk);
3436
3437 /*
3438 * TODO:
3439 * 1. Support HW clock measurement
3440 * 2. Support UFS clock hw_ctrl
3441 * 3. Support mux clock interface for pcie pipe clocks
3442 * 4. QUPv3 support
3443 */
3444
3445 dev_info(&pdev->dev, "Registered GCC clocks\n");
3446 return ret;
3447}
3448
Kyle Yan6a20fae2017-02-14 13:34:41 -08003449static struct platform_driver gcc_sdm845_driver = {
3450 .probe = gcc_sdm845_probe,
Deepak Katragadda575a45f2016-10-11 15:06:56 -07003451 .driver = {
Kyle Yan6a20fae2017-02-14 13:34:41 -08003452 .name = "gcc-sdm845",
3453 .of_match_table = gcc_sdm845_match_table,
Deepak Katragadda575a45f2016-10-11 15:06:56 -07003454 },
3455};
3456
Kyle Yan6a20fae2017-02-14 13:34:41 -08003457static int __init gcc_sdm845_init(void)
Deepak Katragadda575a45f2016-10-11 15:06:56 -07003458{
Kyle Yan6a20fae2017-02-14 13:34:41 -08003459 return platform_driver_register(&gcc_sdm845_driver);
Deepak Katragadda575a45f2016-10-11 15:06:56 -07003460}
Kyle Yan6a20fae2017-02-14 13:34:41 -08003461core_initcall(gcc_sdm845_init);
Deepak Katragadda575a45f2016-10-11 15:06:56 -07003462
Kyle Yan6a20fae2017-02-14 13:34:41 -08003463static void __exit gcc_sdm845_exit(void)
Deepak Katragadda575a45f2016-10-11 15:06:56 -07003464{
Kyle Yan6a20fae2017-02-14 13:34:41 -08003465 platform_driver_unregister(&gcc_sdm845_driver);
Deepak Katragadda575a45f2016-10-11 15:06:56 -07003466}
Kyle Yan6a20fae2017-02-14 13:34:41 -08003467module_exit(gcc_sdm845_exit);
Deepak Katragadda575a45f2016-10-11 15:06:56 -07003468
Kyle Yan6a20fae2017-02-14 13:34:41 -08003469MODULE_DESCRIPTION("QTI GCC SDM845 Driver");
Deepak Katragadda575a45f2016-10-11 15:06:56 -07003470MODULE_LICENSE("GPL v2");
Kyle Yan6a20fae2017-02-14 13:34:41 -08003471MODULE_ALIAS("platform:gcc-sdm845");