1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * Copyright (c) 2015, The Linux Foundation. All rights reserved.
4 */
5
6#include <linux/kernel.h>
7#include <linux/bitops.h>
8#include <linux/err.h>
9#include <linux/platform_device.h>
10#include <linux/module.h>
11#include <linux/of.h>
12#include <linux/clk-provider.h>
13#include <linux/regmap.h>
14#include <linux/reset-controller.h>
15
16#include <dt-bindings/clock/qcom,gcc-msm8996.h>
17
18#include "common.h"
19#include "clk-regmap.h"
20#include "clk-alpha-pll.h"
21#include "clk-rcg.h"
22#include "clk-branch.h"
23#include "reset.h"
24#include "gdsc.h"
25
26enum {
27 P_XO,
28 P_GPLL0,
29 P_GPLL0_EARLY_DIV,
30 P_SLEEP_CLK,
31 P_GPLL4,
32 P_AUD_REF_CLK,
33};
34
35static struct clk_fixed_factor xo = {
36 .mult = 1,
37 .div = 1,
38 .hw.init = &(struct clk_init_data){
39 .name = "xo",
40 .parent_data = &(const struct clk_parent_data){
41 .fw_name = "cxo", .name = "xo_board",
42 },
43 .num_parents = 1,
44 .ops = &clk_fixed_factor_ops,
45 },
46};
47
48static struct clk_alpha_pll gpll0_early = {
49 .offset = 0x00000,
50 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
51 .clkr = {
52 .enable_reg = 0x52000,
53 .enable_mask = BIT(0),
54 .hw.init = &(struct clk_init_data){
55 .name = "gpll0_early",
56 .parent_data = &(const struct clk_parent_data){
57 .fw_name = "cxo", .name = "xo_board",
58 },
59 .num_parents = 1,
60 .ops = &clk_alpha_pll_ops,
61 },
62 },
63};
64
65static struct clk_fixed_factor gpll0_early_div = {
66 .mult = 1,
67 .div = 2,
68 .hw.init = &(struct clk_init_data){
69 .name = "gpll0_early_div",
70 .parent_hws = (const struct clk_hw*[]){
71 &gpll0_early.clkr.hw,
72 },
73 .num_parents = 1,
74 .ops = &clk_fixed_factor_ops,
75 },
76};
77
78static struct clk_alpha_pll_postdiv gpll0 = {
79 .offset = 0x00000,
80 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
81 .clkr.hw.init = &(struct clk_init_data){
82 .name = "gpll0",
83 .parent_hws = (const struct clk_hw*[]){
84 &gpll0_early.clkr.hw,
85 },
86 .num_parents = 1,
87 .ops = &clk_alpha_pll_postdiv_ops,
88 },
89};
90
91static struct clk_branch gcc_mmss_gpll0_div_clk = {
92 .halt_check = BRANCH_HALT_DELAY,
93 .clkr = {
94 .enable_reg = 0x5200c,
95 .enable_mask = BIT(0),
96 .hw.init = &(struct clk_init_data){
97 .name = "gcc_mmss_gpll0_div_clk",
98 .parent_hws = (const struct clk_hw*[]){
99 &gpll0.clkr.hw,
100 },
101 .num_parents = 1,
102 .flags = CLK_SET_RATE_PARENT,
103 .ops = &clk_branch2_ops,
104 },
105 },
106};
107
108static struct clk_branch gcc_mss_gpll0_div_clk = {
109 .halt_check = BRANCH_HALT_DELAY,
110 .clkr = {
111 .enable_reg = 0x5200c,
112 .enable_mask = BIT(2),
113 .hw.init = &(struct clk_init_data){
114 .name = "gcc_mss_gpll0_div_clk",
115 .parent_hws = (const struct clk_hw*[]){
116 &gpll0.clkr.hw,
117 },
118 .num_parents = 1,
119 .flags = CLK_SET_RATE_PARENT,
120 .ops = &clk_branch2_ops
121 },
122 },
123};
124
125static struct clk_alpha_pll gpll4_early = {
126 .offset = 0x77000,
127 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
128 .clkr = {
129 .enable_reg = 0x52000,
130 .enable_mask = BIT(4),
131 .hw.init = &(struct clk_init_data){
132 .name = "gpll4_early",
133 .parent_data = &(const struct clk_parent_data){
134 .fw_name = "cxo", .name = "xo_board",
135 },
136 .num_parents = 1,
137 .ops = &clk_alpha_pll_ops,
138 },
139 },
140};
141
142static struct clk_alpha_pll_postdiv gpll4 = {
143 .offset = 0x77000,
144 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
145 .clkr.hw.init = &(struct clk_init_data){
146 .name = "gpll4",
147 .parent_hws = (const struct clk_hw*[]){
148 &gpll4_early.clkr.hw,
149 },
150 .num_parents = 1,
151 .ops = &clk_alpha_pll_postdiv_ops,
152 },
153};
154
155static const struct parent_map gcc_sleep_clk_map[] = {
156 { P_SLEEP_CLK, 5 }
157};
158
159static const struct clk_parent_data gcc_sleep_clk[] = {
160 { .fw_name = "sleep_clk", .name = "sleep_clk" }
161};
162
163static const struct parent_map gcc_xo_gpll0_map[] = {
164 { P_XO, 0 },
165 { P_GPLL0, 1 }
166};
167
168static const struct clk_parent_data gcc_xo_gpll0[] = {
169 { .fw_name = "cxo", .name = "xo_board" },
170 { .hw = &gpll0.clkr.hw }
171};
172
173static const struct parent_map gcc_xo_sleep_clk_map[] = {
174 { P_XO, 0 },
175 { P_SLEEP_CLK, 5 }
176};
177
178static const struct clk_parent_data gcc_xo_sleep_clk[] = {
179 { .fw_name = "cxo", .name = "xo_board" },
180 { .fw_name = "sleep_clk", .name = "sleep_clk" }
181};
182
183static const struct parent_map gcc_xo_gpll0_gpll0_early_div_map[] = {
184 { P_XO, 0 },
185 { P_GPLL0, 1 },
186 { P_GPLL0_EARLY_DIV, 6 }
187};
188
189static const struct clk_parent_data gcc_xo_gpll0_gpll0_early_div[] = {
190 { .fw_name = "cxo", .name = "xo_board" },
191 { .hw = &gpll0.clkr.hw },
192 { .hw = &gpll0_early_div.hw }
193};
194
195static const struct parent_map gcc_xo_gpll0_gpll4_map[] = {
196 { P_XO, 0 },
197 { P_GPLL0, 1 },
198 { P_GPLL4, 5 }
199};
200
201static const struct clk_parent_data gcc_xo_gpll0_gpll4[] = {
202 { .fw_name = "cxo", .name = "xo_board" },
203 { .hw = &gpll0.clkr.hw },
204 { .hw = &gpll4.clkr.hw }
205};
206
207static const struct parent_map gcc_xo_gpll0_aud_ref_clk_map[] = {
208 { P_XO, 0 },
209 { P_GPLL0, 1 },
210 { P_AUD_REF_CLK, 2 }
211};
212
213static const struct clk_parent_data gcc_xo_gpll0_aud_ref_clk[] = {
214 { .fw_name = "cxo", .name = "xo_board" },
215 { .hw = &gpll0.clkr.hw },
216 { .fw_name = "aud_ref_clk", .name = "aud_ref_clk" }
217};
218
219static const struct parent_map gcc_xo_gpll0_sleep_clk_gpll0_early_div_map[] = {
220 { P_XO, 0 },
221 { P_GPLL0, 1 },
222 { P_SLEEP_CLK, 5 },
223 { P_GPLL0_EARLY_DIV, 6 }
224};
225
226static const struct clk_parent_data gcc_xo_gpll0_sleep_clk_gpll0_early_div[] = {
227 { .fw_name = "cxo", .name = "xo_board" },
228 { .hw = &gpll0.clkr.hw },
229 { .fw_name = "sleep_clk", .name = "sleep_clk" },
230 { .hw = &gpll0_early_div.hw }
231};
232
233static const struct parent_map gcc_xo_gpll0_gpll4_gpll0_early_div_map[] = {
234 { P_XO, 0 },
235 { P_GPLL0, 1 },
236 { P_GPLL4, 5 },
237 { P_GPLL0_EARLY_DIV, 6 }
238};
239
240static const struct clk_parent_data gcc_xo_gpll0_gpll4_gpll0_early_div[] = {
241 { .fw_name = "cxo", .name = "xo_board" },
242 { .hw = &gpll0.clkr.hw },
243 { .hw = &gpll4.clkr.hw },
244 { .hw = &gpll0_early_div.hw }
245};
246
247static const struct freq_tbl ftbl_usb30_master_clk_src[] = {
248 F(19200000, P_XO, 1, 0, 0),
249 F(120000000, P_GPLL0, 5, 0, 0),
250 F(150000000, P_GPLL0, 4, 0, 0),
251 { }
252};
253
254static struct clk_rcg2 usb30_master_clk_src = {
255 .cmd_rcgr = 0x0f014,
256 .mnd_width = 8,
257 .hid_width = 5,
258 .parent_map = gcc_xo_gpll0_gpll0_early_div_map,
259 .freq_tbl = ftbl_usb30_master_clk_src,
260 .clkr.hw.init = &(struct clk_init_data){
261 .name = "usb30_master_clk_src",
262 .parent_data = gcc_xo_gpll0_gpll0_early_div,
263 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_early_div),
264 .ops = &clk_rcg2_ops,
265 },
266};
267
268static const struct freq_tbl ftbl_usb30_mock_utmi_clk_src[] = {
269 F(19200000, P_XO, 1, 0, 0),
270 { }
271};
272
273static struct clk_rcg2 usb30_mock_utmi_clk_src = {
274 .cmd_rcgr = 0x0f028,
275 .hid_width = 5,
276 .parent_map = gcc_xo_gpll0_gpll0_early_div_map,
277 .freq_tbl = ftbl_usb30_mock_utmi_clk_src,
278 .clkr.hw.init = &(struct clk_init_data){
279 .name = "usb30_mock_utmi_clk_src",
280 .parent_data = gcc_xo_gpll0_gpll0_early_div,
281 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_early_div),
282 .ops = &clk_rcg2_ops,
283 },
284};
285
286static const struct freq_tbl ftbl_usb3_phy_aux_clk_src[] = {
287 F(1200000, P_XO, 16, 0, 0),
288 { }
289};
290
291static struct clk_rcg2 usb3_phy_aux_clk_src = {
292 .cmd_rcgr = 0x5000c,
293 .hid_width = 5,
294 .parent_map = gcc_xo_sleep_clk_map,
295 .freq_tbl = ftbl_usb3_phy_aux_clk_src,
296 .clkr.hw.init = &(struct clk_init_data){
297 .name = "usb3_phy_aux_clk_src",
298 .parent_data = gcc_xo_sleep_clk,
299 .num_parents = ARRAY_SIZE(gcc_xo_sleep_clk),
300 .ops = &clk_rcg2_ops,
301 },
302};
303
304static const struct freq_tbl ftbl_usb20_master_clk_src[] = {
305 F(120000000, P_GPLL0, 5, 0, 0),
306 { }
307};
308
309static struct clk_rcg2 usb20_master_clk_src = {
310 .cmd_rcgr = 0x12010,
311 .mnd_width = 8,
312 .hid_width = 5,
313 .parent_map = gcc_xo_gpll0_gpll0_early_div_map,
314 .freq_tbl = ftbl_usb20_master_clk_src,
315 .clkr.hw.init = &(struct clk_init_data){
316 .name = "usb20_master_clk_src",
317 .parent_data = gcc_xo_gpll0_gpll0_early_div,
318 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_early_div),
319 .ops = &clk_rcg2_ops,
320 },
321};
322
323static struct clk_rcg2 usb20_mock_utmi_clk_src = {
324 .cmd_rcgr = 0x12024,
325 .hid_width = 5,
326 .parent_map = gcc_xo_gpll0_gpll0_early_div_map,
327 .freq_tbl = ftbl_usb30_mock_utmi_clk_src,
328 .clkr.hw.init = &(struct clk_init_data){
329 .name = "usb20_mock_utmi_clk_src",
330 .parent_data = gcc_xo_gpll0_gpll0_early_div,
331 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll0_early_div),
332 .ops = &clk_rcg2_ops,
333 },
334};
335
336static const struct freq_tbl ftbl_sdcc1_apps_clk_src[] = {
337 F(144000, P_XO, 16, 3, 25),
338 F(400000, P_XO, 12, 1, 4),
339 F(20000000, P_GPLL0, 15, 1, 2),
340 F(25000000, P_GPLL0, 12, 1, 2),
341 F(50000000, P_GPLL0, 12, 0, 0),
342 F(96000000, P_GPLL4, 4, 0, 0),
343 F(192000000, P_GPLL4, 2, 0, 0),
344 F(384000000, P_GPLL4, 1, 0, 0),
345 { }
346};
347
348static struct clk_rcg2 sdcc1_apps_clk_src = {
349 .cmd_rcgr = 0x13010,
350 .mnd_width = 8,
351 .hid_width = 5,
352 .parent_map = gcc_xo_gpll0_gpll4_gpll0_early_div_map,
353 .freq_tbl = ftbl_sdcc1_apps_clk_src,
354 .clkr.hw.init = &(struct clk_init_data){
355 .name = "sdcc1_apps_clk_src",
356 .parent_data = gcc_xo_gpll0_gpll4_gpll0_early_div,
357 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll4_gpll0_early_div),
358 .ops = &clk_rcg2_floor_ops,
359 },
360};
361
362static struct freq_tbl ftbl_sdcc1_ice_core_clk_src[] = {
363 F(19200000, P_XO, 1, 0, 0),
364 F(150000000, P_GPLL0, 4, 0, 0),
365 F(300000000, P_GPLL0, 2, 0, 0),
366 { }
367};
368
369static struct clk_rcg2 sdcc1_ice_core_clk_src = {
370 .cmd_rcgr = 0x13024,
371 .hid_width = 5,
372 .parent_map = gcc_xo_gpll0_gpll4_gpll0_early_div_map,
373 .freq_tbl = ftbl_sdcc1_ice_core_clk_src,
374 .clkr.hw.init = &(struct clk_init_data){
375 .name = "sdcc1_ice_core_clk_src",
376 .parent_data = gcc_xo_gpll0_gpll4_gpll0_early_div,
377 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll4_gpll0_early_div),
378 .ops = &clk_rcg2_ops,
379 },
380};
381
382static const struct freq_tbl ftbl_sdcc2_apps_clk_src[] = {
383 F(144000, P_XO, 16, 3, 25),
384 F(400000, P_XO, 12, 1, 4),
385 F(20000000, P_GPLL0, 15, 1, 2),
386 F(25000000, P_GPLL0, 12, 1, 2),
387 F(50000000, P_GPLL0, 12, 0, 0),
388 F(100000000, P_GPLL0, 6, 0, 0),
389 F(200000000, P_GPLL0, 3, 0, 0),
390 { }
391};
392
393static struct clk_rcg2 sdcc2_apps_clk_src = {
394 .cmd_rcgr = 0x14010,
395 .mnd_width = 8,
396 .hid_width = 5,
397 .parent_map = gcc_xo_gpll0_gpll4_map,
398 .freq_tbl = ftbl_sdcc2_apps_clk_src,
399 .clkr.hw.init = &(struct clk_init_data){
400 .name = "sdcc2_apps_clk_src",
401 .parent_data = gcc_xo_gpll0_gpll4,
402 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll4),
403 .ops = &clk_rcg2_floor_ops,
404 },
405};
406
407static struct clk_rcg2 sdcc3_apps_clk_src = {
408 .cmd_rcgr = 0x15010,
409 .mnd_width = 8,
410 .hid_width = 5,
411 .parent_map = gcc_xo_gpll0_gpll4_map,
412 .freq_tbl = ftbl_sdcc2_apps_clk_src,
413 .clkr.hw.init = &(struct clk_init_data){
414 .name = "sdcc3_apps_clk_src",
415 .parent_data = gcc_xo_gpll0_gpll4,
416 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll4),
417 .ops = &clk_rcg2_floor_ops,
418 },
419};
420
421static const struct freq_tbl ftbl_sdcc4_apps_clk_src[] = {
422 F(144000, P_XO, 16, 3, 25),
423 F(400000, P_XO, 12, 1, 4),
424 F(20000000, P_GPLL0, 15, 1, 2),
425 F(25000000, P_GPLL0, 12, 1, 2),
426 F(50000000, P_GPLL0, 12, 0, 0),
427 F(100000000, P_GPLL0, 6, 0, 0),
428 { }
429};
430
431static struct clk_rcg2 sdcc4_apps_clk_src = {
432 .cmd_rcgr = 0x16010,
433 .mnd_width = 8,
434 .hid_width = 5,
435 .parent_map = gcc_xo_gpll0_map,
436 .freq_tbl = ftbl_sdcc4_apps_clk_src,
437 .clkr.hw.init = &(struct clk_init_data){
438 .name = "sdcc4_apps_clk_src",
439 .parent_data = gcc_xo_gpll0,
440 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
441 .ops = &clk_rcg2_floor_ops,
442 },
443};
444
445static const struct freq_tbl ftbl_blsp1_qup1_spi_apps_clk_src[] = {
446 F(960000, P_XO, 10, 1, 2),
447 F(4800000, P_XO, 4, 0, 0),
448 F(9600000, P_XO, 2, 0, 0),
449 F(15000000, P_GPLL0, 10, 1, 4),
450 F(19200000, P_XO, 1, 0, 0),
451 F(25000000, P_GPLL0, 12, 1, 2),
452 F(50000000, P_GPLL0, 12, 0, 0),
453 { }
454};
455
456static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
457 .cmd_rcgr = 0x1900c,
458 .mnd_width = 8,
459 .hid_width = 5,
460 .parent_map = gcc_xo_gpll0_map,
461 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
462 .clkr.hw.init = &(struct clk_init_data){
463 .name = "blsp1_qup1_spi_apps_clk_src",
464 .parent_data = gcc_xo_gpll0,
465 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
466 .ops = &clk_rcg2_ops,
467 },
468};
469
470static const struct freq_tbl ftbl_blsp1_qup1_i2c_apps_clk_src[] = {
471 F(19200000, P_XO, 1, 0, 0),
472 F(50000000, P_GPLL0, 12, 0, 0),
473 { }
474};
475
476static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
477 .cmd_rcgr = 0x19020,
478 .hid_width = 5,
479 .parent_map = gcc_xo_gpll0_map,
480 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
481 .clkr.hw.init = &(struct clk_init_data){
482 .name = "blsp1_qup1_i2c_apps_clk_src",
483 .parent_data = gcc_xo_gpll0,
484 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
485 .ops = &clk_rcg2_ops,
486 },
487};
488
489static const struct freq_tbl ftbl_blsp1_uart1_apps_clk_src[] = {
490 F(3686400, P_GPLL0, 1, 96, 15625),
491 F(7372800, P_GPLL0, 1, 192, 15625),
492 F(14745600, P_GPLL0, 1, 384, 15625),
493 F(16000000, P_GPLL0, 5, 2, 15),
494 F(19200000, P_XO, 1, 0, 0),
495 F(24000000, P_GPLL0, 5, 1, 5),
496 F(32000000, P_GPLL0, 1, 4, 75),
497 F(40000000, P_GPLL0, 15, 0, 0),
498 F(46400000, P_GPLL0, 1, 29, 375),
499 F(48000000, P_GPLL0, 12.5, 0, 0),
500 F(51200000, P_GPLL0, 1, 32, 375),
501 F(56000000, P_GPLL0, 1, 7, 75),
502 F(58982400, P_GPLL0, 1, 1536, 15625),
503 F(60000000, P_GPLL0, 10, 0, 0),
504 F(63157895, P_GPLL0, 9.5, 0, 0),
505 { }
506};
507
508static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
509 .cmd_rcgr = 0x1a00c,
510 .mnd_width = 16,
511 .hid_width = 5,
512 .parent_map = gcc_xo_gpll0_map,
513 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
514 .clkr.hw.init = &(struct clk_init_data){
515 .name = "blsp1_uart1_apps_clk_src",
516 .parent_data = gcc_xo_gpll0,
517 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
518 .ops = &clk_rcg2_ops,
519 },
520};
521
522static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
523 .cmd_rcgr = 0x1b00c,
524 .mnd_width = 8,
525 .hid_width = 5,
526 .parent_map = gcc_xo_gpll0_map,
527 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
528 .clkr.hw.init = &(struct clk_init_data){
529 .name = "blsp1_qup2_spi_apps_clk_src",
530 .parent_data = gcc_xo_gpll0,
531 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
532 .ops = &clk_rcg2_ops,
533 },
534};
535
536static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
537 .cmd_rcgr = 0x1b020,
538 .hid_width = 5,
539 .parent_map = gcc_xo_gpll0_map,
540 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
541 .clkr.hw.init = &(struct clk_init_data){
542 .name = "blsp1_qup2_i2c_apps_clk_src",
543 .parent_data = gcc_xo_gpll0,
544 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
545 .ops = &clk_rcg2_ops,
546 },
547};
548
549static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
550 .cmd_rcgr = 0x1c00c,
551 .mnd_width = 16,
552 .hid_width = 5,
553 .parent_map = gcc_xo_gpll0_map,
554 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
555 .clkr.hw.init = &(struct clk_init_data){
556 .name = "blsp1_uart2_apps_clk_src",
557 .parent_data = gcc_xo_gpll0,
558 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
559 .ops = &clk_rcg2_ops,
560 },
561};
562
563static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
564 .cmd_rcgr = 0x1d00c,
565 .mnd_width = 8,
566 .hid_width = 5,
567 .parent_map = gcc_xo_gpll0_map,
568 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
569 .clkr.hw.init = &(struct clk_init_data){
570 .name = "blsp1_qup3_spi_apps_clk_src",
571 .parent_data = gcc_xo_gpll0,
572 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
573 .ops = &clk_rcg2_ops,
574 },
575};
576
577static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
578 .cmd_rcgr = 0x1d020,
579 .hid_width = 5,
580 .parent_map = gcc_xo_gpll0_map,
581 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
582 .clkr.hw.init = &(struct clk_init_data){
583 .name = "blsp1_qup3_i2c_apps_clk_src",
584 .parent_data = gcc_xo_gpll0,
585 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
586 .ops = &clk_rcg2_ops,
587 },
588};
589
590static struct clk_rcg2 blsp1_uart3_apps_clk_src = {
591 .cmd_rcgr = 0x1e00c,
592 .mnd_width = 16,
593 .hid_width = 5,
594 .parent_map = gcc_xo_gpll0_map,
595 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
596 .clkr.hw.init = &(struct clk_init_data){
597 .name = "blsp1_uart3_apps_clk_src",
598 .parent_data = gcc_xo_gpll0,
599 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
600 .ops = &clk_rcg2_ops,
601 },
602};
603
604static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
605 .cmd_rcgr = 0x1f00c,
606 .mnd_width = 8,
607 .hid_width = 5,
608 .parent_map = gcc_xo_gpll0_map,
609 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
610 .clkr.hw.init = &(struct clk_init_data){
611 .name = "blsp1_qup4_spi_apps_clk_src",
612 .parent_data = gcc_xo_gpll0,
613 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
614 .ops = &clk_rcg2_ops,
615 },
616};
617
618static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
619 .cmd_rcgr = 0x1f020,
620 .hid_width = 5,
621 .parent_map = gcc_xo_gpll0_map,
622 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
623 .clkr.hw.init = &(struct clk_init_data){
624 .name = "blsp1_qup4_i2c_apps_clk_src",
625 .parent_data = gcc_xo_gpll0,
626 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
627 .ops = &clk_rcg2_ops,
628 },
629};
630
631static struct clk_rcg2 blsp1_uart4_apps_clk_src = {
632 .cmd_rcgr = 0x2000c,
633 .mnd_width = 16,
634 .hid_width = 5,
635 .parent_map = gcc_xo_gpll0_map,
636 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
637 .clkr.hw.init = &(struct clk_init_data){
638 .name = "blsp1_uart4_apps_clk_src",
639 .parent_data = gcc_xo_gpll0,
640 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
641 .ops = &clk_rcg2_ops,
642 },
643};
644
645static struct clk_rcg2 blsp1_qup5_spi_apps_clk_src = {
646 .cmd_rcgr = 0x2100c,
647 .mnd_width = 8,
648 .hid_width = 5,
649 .parent_map = gcc_xo_gpll0_map,
650 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
651 .clkr.hw.init = &(struct clk_init_data){
652 .name = "blsp1_qup5_spi_apps_clk_src",
653 .parent_data = gcc_xo_gpll0,
654 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
655 .ops = &clk_rcg2_ops,
656 },
657};
658
659static struct clk_rcg2 blsp1_qup5_i2c_apps_clk_src = {
660 .cmd_rcgr = 0x21020,
661 .hid_width = 5,
662 .parent_map = gcc_xo_gpll0_map,
663 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
664 .clkr.hw.init = &(struct clk_init_data){
665 .name = "blsp1_qup5_i2c_apps_clk_src",
666 .parent_data = gcc_xo_gpll0,
667 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
668 .ops = &clk_rcg2_ops,
669 },
670};
671
672static struct clk_rcg2 blsp1_uart5_apps_clk_src = {
673 .cmd_rcgr = 0x2200c,
674 .mnd_width = 16,
675 .hid_width = 5,
676 .parent_map = gcc_xo_gpll0_map,
677 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
678 .clkr.hw.init = &(struct clk_init_data){
679 .name = "blsp1_uart5_apps_clk_src",
680 .parent_data = gcc_xo_gpll0,
681 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
682 .ops = &clk_rcg2_ops,
683 },
684};
685
686static struct clk_rcg2 blsp1_qup6_spi_apps_clk_src = {
687 .cmd_rcgr = 0x2300c,
688 .mnd_width = 8,
689 .hid_width = 5,
690 .parent_map = gcc_xo_gpll0_map,
691 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
692 .clkr.hw.init = &(struct clk_init_data){
693 .name = "blsp1_qup6_spi_apps_clk_src",
694 .parent_data = gcc_xo_gpll0,
695 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
696 .ops = &clk_rcg2_ops,
697 },
698};
699
700static struct clk_rcg2 blsp1_qup6_i2c_apps_clk_src = {
701 .cmd_rcgr = 0x23020,
702 .hid_width = 5,
703 .parent_map = gcc_xo_gpll0_map,
704 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
705 .clkr.hw.init = &(struct clk_init_data){
706 .name = "blsp1_qup6_i2c_apps_clk_src",
707 .parent_data = gcc_xo_gpll0,
708 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
709 .ops = &clk_rcg2_ops,
710 },
711};
712
713static struct clk_rcg2 blsp1_uart6_apps_clk_src = {
714 .cmd_rcgr = 0x2400c,
715 .mnd_width = 16,
716 .hid_width = 5,
717 .parent_map = gcc_xo_gpll0_map,
718 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
719 .clkr.hw.init = &(struct clk_init_data){
720 .name = "blsp1_uart6_apps_clk_src",
721 .parent_data = gcc_xo_gpll0,
722 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
723 .ops = &clk_rcg2_ops,
724 },
725};
726
727static struct clk_rcg2 blsp2_qup1_spi_apps_clk_src = {
728 .cmd_rcgr = 0x2600c,
729 .mnd_width = 8,
730 .hid_width = 5,
731 .parent_map = gcc_xo_gpll0_map,
732 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
733 .clkr.hw.init = &(struct clk_init_data){
734 .name = "blsp2_qup1_spi_apps_clk_src",
735 .parent_data = gcc_xo_gpll0,
736 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
737 .ops = &clk_rcg2_ops,
738 },
739};
740
741static struct clk_rcg2 blsp2_qup1_i2c_apps_clk_src = {
742 .cmd_rcgr = 0x26020,
743 .hid_width = 5,
744 .parent_map = gcc_xo_gpll0_map,
745 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
746 .clkr.hw.init = &(struct clk_init_data){
747 .name = "blsp2_qup1_i2c_apps_clk_src",
748 .parent_data = gcc_xo_gpll0,
749 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
750 .ops = &clk_rcg2_ops,
751 },
752};
753
754static struct clk_rcg2 blsp2_uart1_apps_clk_src = {
755 .cmd_rcgr = 0x2700c,
756 .mnd_width = 16,
757 .hid_width = 5,
758 .parent_map = gcc_xo_gpll0_map,
759 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
760 .clkr.hw.init = &(struct clk_init_data){
761 .name = "blsp2_uart1_apps_clk_src",
762 .parent_data = gcc_xo_gpll0,
763 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
764 .ops = &clk_rcg2_ops,
765 },
766};
767
768static struct clk_rcg2 blsp2_qup2_spi_apps_clk_src = {
769 .cmd_rcgr = 0x2800c,
770 .mnd_width = 8,
771 .hid_width = 5,
772 .parent_map = gcc_xo_gpll0_map,
773 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
774 .clkr.hw.init = &(struct clk_init_data){
775 .name = "blsp2_qup2_spi_apps_clk_src",
776 .parent_data = gcc_xo_gpll0,
777 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
778 .ops = &clk_rcg2_ops,
779 },
780};
781
782static struct clk_rcg2 blsp2_qup2_i2c_apps_clk_src = {
783 .cmd_rcgr = 0x28020,
784 .hid_width = 5,
785 .parent_map = gcc_xo_gpll0_map,
786 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
787 .clkr.hw.init = &(struct clk_init_data){
788 .name = "blsp2_qup2_i2c_apps_clk_src",
789 .parent_data = gcc_xo_gpll0,
790 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
791 .ops = &clk_rcg2_ops,
792 },
793};
794
795static struct clk_rcg2 blsp2_uart2_apps_clk_src = {
796 .cmd_rcgr = 0x2900c,
797 .mnd_width = 16,
798 .hid_width = 5,
799 .parent_map = gcc_xo_gpll0_map,
800 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
801 .clkr.hw.init = &(struct clk_init_data){
802 .name = "blsp2_uart2_apps_clk_src",
803 .parent_data = gcc_xo_gpll0,
804 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
805 .ops = &clk_rcg2_ops,
806 },
807};
808
809static struct clk_rcg2 blsp2_qup3_spi_apps_clk_src = {
810 .cmd_rcgr = 0x2a00c,
811 .mnd_width = 8,
812 .hid_width = 5,
813 .parent_map = gcc_xo_gpll0_map,
814 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
815 .clkr.hw.init = &(struct clk_init_data){
816 .name = "blsp2_qup3_spi_apps_clk_src",
817 .parent_data = gcc_xo_gpll0,
818 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
819 .ops = &clk_rcg2_ops,
820 },
821};
822
823static struct clk_rcg2 blsp2_qup3_i2c_apps_clk_src = {
824 .cmd_rcgr = 0x2a020,
825 .hid_width = 5,
826 .parent_map = gcc_xo_gpll0_map,
827 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
828 .clkr.hw.init = &(struct clk_init_data){
829 .name = "blsp2_qup3_i2c_apps_clk_src",
830 .parent_data = gcc_xo_gpll0,
831 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
832 .ops = &clk_rcg2_ops,
833 },
834};
835
836static struct clk_rcg2 blsp2_uart3_apps_clk_src = {
837 .cmd_rcgr = 0x2b00c,
838 .mnd_width = 16,
839 .hid_width = 5,
840 .parent_map = gcc_xo_gpll0_map,
841 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
842 .clkr.hw.init = &(struct clk_init_data){
843 .name = "blsp2_uart3_apps_clk_src",
844 .parent_data = gcc_xo_gpll0,
845 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
846 .ops = &clk_rcg2_ops,
847 },
848};
849
850static struct clk_rcg2 blsp2_qup4_spi_apps_clk_src = {
851 .cmd_rcgr = 0x2c00c,
852 .mnd_width = 8,
853 .hid_width = 5,
854 .parent_map = gcc_xo_gpll0_map,
855 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
856 .clkr.hw.init = &(struct clk_init_data){
857 .name = "blsp2_qup4_spi_apps_clk_src",
858 .parent_data = gcc_xo_gpll0,
859 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
860 .ops = &clk_rcg2_ops,
861 },
862};
863
864static struct clk_rcg2 blsp2_qup4_i2c_apps_clk_src = {
865 .cmd_rcgr = 0x2c020,
866 .hid_width = 5,
867 .parent_map = gcc_xo_gpll0_map,
868 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
869 .clkr.hw.init = &(struct clk_init_data){
870 .name = "blsp2_qup4_i2c_apps_clk_src",
871 .parent_data = gcc_xo_gpll0,
872 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
873 .ops = &clk_rcg2_ops,
874 },
875};
876
877static struct clk_rcg2 blsp2_uart4_apps_clk_src = {
878 .cmd_rcgr = 0x2d00c,
879 .mnd_width = 16,
880 .hid_width = 5,
881 .parent_map = gcc_xo_gpll0_map,
882 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
883 .clkr.hw.init = &(struct clk_init_data){
884 .name = "blsp2_uart4_apps_clk_src",
885 .parent_data = gcc_xo_gpll0,
886 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
887 .ops = &clk_rcg2_ops,
888 },
889};
890
891static struct clk_rcg2 blsp2_qup5_spi_apps_clk_src = {
892 .cmd_rcgr = 0x2e00c,
893 .mnd_width = 8,
894 .hid_width = 5,
895 .parent_map = gcc_xo_gpll0_map,
896 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
897 .clkr.hw.init = &(struct clk_init_data){
898 .name = "blsp2_qup5_spi_apps_clk_src",
899 .parent_data = gcc_xo_gpll0,
900 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
901 .ops = &clk_rcg2_ops,
902 },
903};
904
905static struct clk_rcg2 blsp2_qup5_i2c_apps_clk_src = {
906 .cmd_rcgr = 0x2e020,
907 .hid_width = 5,
908 .parent_map = gcc_xo_gpll0_map,
909 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
910 .clkr.hw.init = &(struct clk_init_data){
911 .name = "blsp2_qup5_i2c_apps_clk_src",
912 .parent_data = gcc_xo_gpll0,
913 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
914 .ops = &clk_rcg2_ops,
915 },
916};
917
918static struct clk_rcg2 blsp2_uart5_apps_clk_src = {
919 .cmd_rcgr = 0x2f00c,
920 .mnd_width = 16,
921 .hid_width = 5,
922 .parent_map = gcc_xo_gpll0_map,
923 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
924 .clkr.hw.init = &(struct clk_init_data){
925 .name = "blsp2_uart5_apps_clk_src",
926 .parent_data = gcc_xo_gpll0,
927 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
928 .ops = &clk_rcg2_ops,
929 },
930};
931
932static struct clk_rcg2 blsp2_qup6_spi_apps_clk_src = {
933 .cmd_rcgr = 0x3000c,
934 .mnd_width = 8,
935 .hid_width = 5,
936 .parent_map = gcc_xo_gpll0_map,
937 .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
938 .clkr.hw.init = &(struct clk_init_data){
939 .name = "blsp2_qup6_spi_apps_clk_src",
940 .parent_data = gcc_xo_gpll0,
941 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
942 .ops = &clk_rcg2_ops,
943 },
944};
945
946static struct clk_rcg2 blsp2_qup6_i2c_apps_clk_src = {
947 .cmd_rcgr = 0x30020,
948 .hid_width = 5,
949 .parent_map = gcc_xo_gpll0_map,
950 .freq_tbl = ftbl_blsp1_qup1_i2c_apps_clk_src,
951 .clkr.hw.init = &(struct clk_init_data){
952 .name = "blsp2_qup6_i2c_apps_clk_src",
953 .parent_data = gcc_xo_gpll0,
954 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
955 .ops = &clk_rcg2_ops,
956 },
957};
958
959static struct clk_rcg2 blsp2_uart6_apps_clk_src = {
960 .cmd_rcgr = 0x3100c,
961 .mnd_width = 16,
962 .hid_width = 5,
963 .parent_map = gcc_xo_gpll0_map,
964 .freq_tbl = ftbl_blsp1_uart1_apps_clk_src,
965 .clkr.hw.init = &(struct clk_init_data){
966 .name = "blsp2_uart6_apps_clk_src",
967 .parent_data = gcc_xo_gpll0,
968 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
969 .ops = &clk_rcg2_ops,
970 },
971};
972
973static const struct freq_tbl ftbl_pdm2_clk_src[] = {
974 F(60000000, P_GPLL0, 10, 0, 0),
975 { }
976};
977
978static struct clk_rcg2 pdm2_clk_src = {
979 .cmd_rcgr = 0x33010,
980 .hid_width = 5,
981 .parent_map = gcc_xo_gpll0_map,
982 .freq_tbl = ftbl_pdm2_clk_src,
983 .clkr.hw.init = &(struct clk_init_data){
984 .name = "pdm2_clk_src",
985 .parent_data = gcc_xo_gpll0,
986 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
987 .ops = &clk_rcg2_ops,
988 },
989};
990
991static const struct freq_tbl ftbl_tsif_ref_clk_src[] = {
992 F(105495, P_XO, 1, 1, 182),
993 { }
994};
995
996static struct clk_rcg2 tsif_ref_clk_src = {
997 .cmd_rcgr = 0x36010,
998 .mnd_width = 8,
999 .hid_width = 5,
1000 .parent_map = gcc_xo_gpll0_aud_ref_clk_map,
1001 .freq_tbl = ftbl_tsif_ref_clk_src,
1002 .clkr.hw.init = &(struct clk_init_data){
1003 .name = "tsif_ref_clk_src",
1004 .parent_data = gcc_xo_gpll0_aud_ref_clk,
1005 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_aud_ref_clk),
1006 .ops = &clk_rcg2_ops,
1007 },
1008};
1009
1010static struct clk_rcg2 gcc_sleep_clk_src = {
1011 .cmd_rcgr = 0x43014,
1012 .hid_width = 5,
1013 .parent_map = gcc_sleep_clk_map,
1014 .clkr.hw.init = &(struct clk_init_data){
1015 .name = "gcc_sleep_clk_src",
1016 .parent_data = gcc_sleep_clk,
1017 .num_parents = ARRAY_SIZE(gcc_sleep_clk),
1018 .ops = &clk_rcg2_ops,
1019 },
1020};
1021
1022static struct clk_rcg2 hmss_rbcpr_clk_src = {
1023 .cmd_rcgr = 0x48040,
1024 .hid_width = 5,
1025 .parent_map = gcc_xo_gpll0_map,
1026 .freq_tbl = ftbl_usb30_mock_utmi_clk_src,
1027 .clkr.hw.init = &(struct clk_init_data){
1028 .name = "hmss_rbcpr_clk_src",
1029 .parent_data = gcc_xo_gpll0,
1030 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
1031 .ops = &clk_rcg2_ops,
1032 },
1033};
1034
1035static struct clk_rcg2 hmss_gpll0_clk_src = {
1036 .cmd_rcgr = 0x48058,
1037 .hid_width = 5,
1038 .parent_map = gcc_xo_gpll0_map,
1039 .clkr.hw.init = &(struct clk_init_data){
1040 .name = "hmss_gpll0_clk_src",
1041 .parent_data = gcc_xo_gpll0,
1042 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
1043 .ops = &clk_rcg2_ops,
1044 },
1045};
1046
1047static const struct freq_tbl ftbl_gp1_clk_src[] = {
1048 F(19200000, P_XO, 1, 0, 0),
1049 F(100000000, P_GPLL0, 6, 0, 0),
1050 F(200000000, P_GPLL0, 3, 0, 0),
1051 { }
1052};
1053
1054static struct clk_rcg2 gp1_clk_src = {
1055 .cmd_rcgr = 0x64004,
1056 .mnd_width = 8,
1057 .hid_width = 5,
1058 .parent_map = gcc_xo_gpll0_sleep_clk_gpll0_early_div_map,
1059 .freq_tbl = ftbl_gp1_clk_src,
1060 .clkr.hw.init = &(struct clk_init_data){
1061 .name = "gp1_clk_src",
1062 .parent_data = gcc_xo_gpll0_sleep_clk_gpll0_early_div,
1063 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_sleep_clk_gpll0_early_div),
1064 .ops = &clk_rcg2_ops,
1065 },
1066};
1067
1068static struct clk_rcg2 gp2_clk_src = {
1069 .cmd_rcgr = 0x65004,
1070 .mnd_width = 8,
1071 .hid_width = 5,
1072 .parent_map = gcc_xo_gpll0_sleep_clk_gpll0_early_div_map,
1073 .freq_tbl = ftbl_gp1_clk_src,
1074 .clkr.hw.init = &(struct clk_init_data){
1075 .name = "gp2_clk_src",
1076 .parent_data = gcc_xo_gpll0_sleep_clk_gpll0_early_div,
1077 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_sleep_clk_gpll0_early_div),
1078 .ops = &clk_rcg2_ops,
1079 },
1080};
1081
1082static struct clk_rcg2 gp3_clk_src = {
1083 .cmd_rcgr = 0x66004,
1084 .mnd_width = 8,
1085 .hid_width = 5,
1086 .parent_map = gcc_xo_gpll0_sleep_clk_gpll0_early_div_map,
1087 .freq_tbl = ftbl_gp1_clk_src,
1088 .clkr.hw.init = &(struct clk_init_data){
1089 .name = "gp3_clk_src",
1090 .parent_data = gcc_xo_gpll0_sleep_clk_gpll0_early_div,
1091 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_sleep_clk_gpll0_early_div),
1092 .ops = &clk_rcg2_ops,
1093 },
1094};
1095
1096static const struct freq_tbl ftbl_pcie_aux_clk_src[] = {
1097 F(1010526, P_XO, 1, 1, 19),
1098 { }
1099};
1100
1101static struct clk_rcg2 pcie_aux_clk_src = {
1102 .cmd_rcgr = 0x6c000,
1103 .mnd_width = 16,
1104 .hid_width = 5,
1105 .parent_map = gcc_xo_sleep_clk_map,
1106 .freq_tbl = ftbl_pcie_aux_clk_src,
1107 .clkr.hw.init = &(struct clk_init_data){
1108 .name = "pcie_aux_clk_src",
1109 .parent_data = gcc_xo_sleep_clk,
1110 .num_parents = ARRAY_SIZE(gcc_xo_sleep_clk),
1111 .ops = &clk_rcg2_ops,
1112 },
1113};
1114
1115static const struct freq_tbl ftbl_ufs_axi_clk_src[] = {
1116 F(100000000, P_GPLL0, 6, 0, 0),
1117 F(200000000, P_GPLL0, 3, 0, 0),
1118 F(240000000, P_GPLL0, 2.5, 0, 0),
1119 { }
1120};
1121
1122static struct clk_rcg2 ufs_axi_clk_src = {
1123 .cmd_rcgr = 0x75024,
1124 .mnd_width = 8,
1125 .hid_width = 5,
1126 .parent_map = gcc_xo_gpll0_map,
1127 .freq_tbl = ftbl_ufs_axi_clk_src,
1128 .clkr.hw.init = &(struct clk_init_data){
1129 .name = "ufs_axi_clk_src",
1130 .parent_data = gcc_xo_gpll0,
1131 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
1132 .ops = &clk_rcg2_ops,
1133 },
1134};
1135
1136static const struct freq_tbl ftbl_ufs_ice_core_clk_src[] = {
1137 F(19200000, P_XO, 1, 0, 0),
1138 F(150000000, P_GPLL0, 4, 0, 0),
1139 F(300000000, P_GPLL0, 2, 0, 0),
1140 { }
1141};
1142
1143static struct clk_rcg2 ufs_ice_core_clk_src = {
1144 .cmd_rcgr = 0x76014,
1145 .hid_width = 5,
1146 .parent_map = gcc_xo_gpll0_map,
1147 .freq_tbl = ftbl_ufs_ice_core_clk_src,
1148 .clkr.hw.init = &(struct clk_init_data){
1149 .name = "ufs_ice_core_clk_src",
1150 .parent_data = gcc_xo_gpll0,
1151 .num_parents = ARRAY_SIZE(gcc_xo_gpll0),
1152 .ops = &clk_rcg2_ops,
1153 },
1154};
1155
1156static const struct freq_tbl ftbl_qspi_ser_clk_src[] = {
1157 F(75000000, P_GPLL0, 8, 0, 0),
1158 F(150000000, P_GPLL0, 4, 0, 0),
1159 F(256000000, P_GPLL4, 1.5, 0, 0),
1160 F(300000000, P_GPLL0, 2, 0, 0),
1161 { }
1162};
1163
1164static struct clk_rcg2 qspi_ser_clk_src = {
1165 .cmd_rcgr = 0x8b00c,
1166 .hid_width = 5,
1167 .parent_map = gcc_xo_gpll0_gpll4_gpll0_early_div_map,
1168 .freq_tbl = ftbl_qspi_ser_clk_src,
1169 .clkr.hw.init = &(struct clk_init_data){
1170 .name = "qspi_ser_clk_src",
1171 .parent_data = gcc_xo_gpll0_gpll4_gpll0_early_div,
1172 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll4_gpll0_early_div),
1173 .ops = &clk_rcg2_ops,
1174 },
1175};
1176
1177static struct clk_branch gcc_sys_noc_usb3_axi_clk = {
1178 .halt_reg = 0x0f03c,
1179 .clkr = {
1180 .enable_reg = 0x0f03c,
1181 .enable_mask = BIT(0),
1182 .hw.init = &(struct clk_init_data){
1183 .name = "gcc_sys_noc_usb3_axi_clk",
1184 .parent_hws = (const struct clk_hw*[]){
1185 &usb30_master_clk_src.clkr.hw,
1186 },
1187 .num_parents = 1,
1188 .flags = CLK_SET_RATE_PARENT,
1189 .ops = &clk_branch2_ops,
1190 },
1191 },
1192};
1193
1194static struct clk_branch gcc_sys_noc_ufs_axi_clk = {
1195 .halt_reg = 0x75038,
1196 .clkr = {
1197 .enable_reg = 0x75038,
1198 .enable_mask = BIT(0),
1199 .hw.init = &(struct clk_init_data){
1200 .name = "gcc_sys_noc_ufs_axi_clk",
1201 .parent_hws = (const struct clk_hw*[]){
1202 &ufs_axi_clk_src.clkr.hw,
1203 },
1204 .num_parents = 1,
1205 .flags = CLK_SET_RATE_PARENT,
1206 .ops = &clk_branch2_ops,
1207 },
1208 },
1209};
1210
1211static struct clk_branch gcc_periph_noc_usb20_ahb_clk = {
1212 .halt_reg = 0x6010,
1213 .clkr = {
1214 .enable_reg = 0x6010,
1215 .enable_mask = BIT(0),
1216 .hw.init = &(struct clk_init_data){
1217 .name = "gcc_periph_noc_usb20_ahb_clk",
1218 .parent_hws = (const struct clk_hw*[]){
1219 &usb20_master_clk_src.clkr.hw,
1220 },
1221 .num_parents = 1,
1222 .flags = CLK_SET_RATE_PARENT,
1223 .ops = &clk_branch2_ops,
1224 },
1225 },
1226};
1227
1228static struct clk_branch gcc_mmss_noc_cfg_ahb_clk = {
1229 .halt_reg = 0x9008,
1230 .clkr = {
1231 .enable_reg = 0x9008,
1232 .enable_mask = BIT(0),
1233 .hw.init = &(struct clk_init_data){
1234 .name = "gcc_mmss_noc_cfg_ahb_clk",
1235 .flags = CLK_IGNORE_UNUSED,
1236 .ops = &clk_branch2_ops,
1237 },
1238 },
1239};
1240
1241static struct clk_branch gcc_mmss_bimc_gfx_clk = {
1242 .halt_reg = 0x9010,
1243 .clkr = {
1244 .enable_reg = 0x9010,
1245 .enable_mask = BIT(0),
1246 .hw.init = &(struct clk_init_data){
1247 .name = "gcc_mmss_bimc_gfx_clk",
1248 .flags = CLK_SET_RATE_PARENT,
1249 .ops = &clk_branch2_ops,
1250 },
1251 },
1252};
1253
1254static struct clk_branch gcc_usb30_master_clk = {
1255 .halt_reg = 0x0f008,
1256 .clkr = {
1257 .enable_reg = 0x0f008,
1258 .enable_mask = BIT(0),
1259 .hw.init = &(struct clk_init_data){
1260 .name = "gcc_usb30_master_clk",
1261 .parent_hws = (const struct clk_hw*[]){
1262 &usb30_master_clk_src.clkr.hw,
1263 },
1264 .num_parents = 1,
1265 .flags = CLK_SET_RATE_PARENT,
1266 .ops = &clk_branch2_ops,
1267 },
1268 },
1269};
1270
1271static struct clk_branch gcc_usb30_sleep_clk = {
1272 .halt_reg = 0x0f00c,
1273 .clkr = {
1274 .enable_reg = 0x0f00c,
1275 .enable_mask = BIT(0),
1276 .hw.init = &(struct clk_init_data){
1277 .name = "gcc_usb30_sleep_clk",
1278 .parent_hws = (const struct clk_hw*[]){
1279 &gcc_sleep_clk_src.clkr.hw,
1280 },
1281 .num_parents = 1,
1282 .flags = CLK_SET_RATE_PARENT,
1283 .ops = &clk_branch2_ops,
1284 },
1285 },
1286};
1287
1288static struct clk_branch gcc_usb30_mock_utmi_clk = {
1289 .halt_reg = 0x0f010,
1290 .clkr = {
1291 .enable_reg = 0x0f010,
1292 .enable_mask = BIT(0),
1293 .hw.init = &(struct clk_init_data){
1294 .name = "gcc_usb30_mock_utmi_clk",
1295 .parent_hws = (const struct clk_hw*[]){
1296 &usb30_mock_utmi_clk_src.clkr.hw,
1297 },
1298 .num_parents = 1,
1299 .flags = CLK_SET_RATE_PARENT,
1300 .ops = &clk_branch2_ops,
1301 },
1302 },
1303};
1304
1305static struct clk_branch gcc_usb3_phy_aux_clk = {
1306 .halt_reg = 0x50000,
1307 .clkr = {
1308 .enable_reg = 0x50000,
1309 .enable_mask = BIT(0),
1310 .hw.init = &(struct clk_init_data){
1311 .name = "gcc_usb3_phy_aux_clk",
1312 .parent_hws = (const struct clk_hw*[]){
1313 &usb3_phy_aux_clk_src.clkr.hw,
1314 },
1315 .num_parents = 1,
1316 .flags = CLK_SET_RATE_PARENT,
1317 .ops = &clk_branch2_ops,
1318 },
1319 },
1320};
1321
1322static struct clk_branch gcc_usb3_phy_pipe_clk = {
1323 .halt_reg = 0x50004,
1324 .halt_check = BRANCH_HALT_SKIP,
1325 .clkr = {
1326 .enable_reg = 0x50004,
1327 .enable_mask = BIT(0),
1328 .hw.init = &(struct clk_init_data){
1329 .name = "gcc_usb3_phy_pipe_clk",
1330 .parent_data = &(const struct clk_parent_data){
1331 .fw_name = "usb3_phy_pipe_clk_src", .name = "usb3_phy_pipe_clk_src",
1332 },
1333 .num_parents = 1,
1334 .flags = CLK_SET_RATE_PARENT,
1335 .ops = &clk_branch2_ops,
1336 },
1337 },
1338};
1339
1340static struct clk_branch gcc_usb20_master_clk = {
1341 .halt_reg = 0x12004,
1342 .clkr = {
1343 .enable_reg = 0x12004,
1344 .enable_mask = BIT(0),
1345 .hw.init = &(struct clk_init_data){
1346 .name = "gcc_usb20_master_clk",
1347 .parent_hws = (const struct clk_hw*[]){
1348 &usb20_master_clk_src.clkr.hw,
1349 },
1350 .num_parents = 1,
1351 .flags = CLK_SET_RATE_PARENT,
1352 .ops = &clk_branch2_ops,
1353 },
1354 },
1355};
1356
1357static struct clk_branch gcc_usb20_sleep_clk = {
1358 .halt_reg = 0x12008,
1359 .clkr = {
1360 .enable_reg = 0x12008,
1361 .enable_mask = BIT(0),
1362 .hw.init = &(struct clk_init_data){
1363 .name = "gcc_usb20_sleep_clk",
1364 .parent_hws = (const struct clk_hw*[]){
1365 &gcc_sleep_clk_src.clkr.hw,
1366 },
1367 .num_parents = 1,
1368 .flags = CLK_SET_RATE_PARENT,
1369 .ops = &clk_branch2_ops,
1370 },
1371 },
1372};
1373
1374static struct clk_branch gcc_usb20_mock_utmi_clk = {
1375 .halt_reg = 0x1200c,
1376 .clkr = {
1377 .enable_reg = 0x1200c,
1378 .enable_mask = BIT(0),
1379 .hw.init = &(struct clk_init_data){
1380 .name = "gcc_usb20_mock_utmi_clk",
1381 .parent_hws = (const struct clk_hw*[]){
1382 &usb20_mock_utmi_clk_src.clkr.hw,
1383 },
1384 .num_parents = 1,
1385 .flags = CLK_SET_RATE_PARENT,
1386 .ops = &clk_branch2_ops,
1387 },
1388 },
1389};
1390
1391static struct clk_branch gcc_usb_phy_cfg_ahb2phy_clk = {
1392 .halt_reg = 0x6a004,
1393 .clkr = {
1394 .enable_reg = 0x6a004,
1395 .enable_mask = BIT(0),
1396 .hw.init = &(struct clk_init_data){
1397 .name = "gcc_usb_phy_cfg_ahb2phy_clk",
1398 .ops = &clk_branch2_ops,
1399 },
1400 },
1401};
1402
1403static struct clk_branch gcc_sdcc1_apps_clk = {
1404 .halt_reg = 0x13004,
1405 .clkr = {
1406 .enable_reg = 0x13004,
1407 .enable_mask = BIT(0),
1408 .hw.init = &(struct clk_init_data){
1409 .name = "gcc_sdcc1_apps_clk",
1410 .parent_hws = (const struct clk_hw*[]){
1411 &sdcc1_apps_clk_src.clkr.hw,
1412 },
1413 .num_parents = 1,
1414 .flags = CLK_SET_RATE_PARENT,
1415 .ops = &clk_branch2_ops,
1416 },
1417 },
1418};
1419
1420static struct clk_branch gcc_sdcc1_ahb_clk = {
1421 .halt_reg = 0x13008,
1422 .clkr = {
1423 .enable_reg = 0x13008,
1424 .enable_mask = BIT(0),
1425 .hw.init = &(struct clk_init_data){
1426 .name = "gcc_sdcc1_ahb_clk",
1427 .ops = &clk_branch2_ops,
1428 },
1429 },
1430};
1431
1432static struct clk_branch gcc_sdcc1_ice_core_clk = {
1433 .halt_reg = 0x13038,
1434 .clkr = {
1435 .enable_reg = 0x13038,
1436 .enable_mask = BIT(0),
1437 .hw.init = &(struct clk_init_data){
1438 .name = "gcc_sdcc1_ice_core_clk",
1439 .parent_hws = (const struct clk_hw*[]){
1440 &sdcc1_ice_core_clk_src.clkr.hw,
1441 },
1442 .num_parents = 1,
1443 .flags = CLK_SET_RATE_PARENT,
1444 .ops = &clk_branch2_ops,
1445 },
1446 },
1447};
1448
1449static struct clk_branch gcc_sdcc2_apps_clk = {
1450 .halt_reg = 0x14004,
1451 .clkr = {
1452 .enable_reg = 0x14004,
1453 .enable_mask = BIT(0),
1454 .hw.init = &(struct clk_init_data){
1455 .name = "gcc_sdcc2_apps_clk",
1456 .parent_hws = (const struct clk_hw*[]){
1457 &sdcc2_apps_clk_src.clkr.hw,
1458 },
1459 .num_parents = 1,
1460 .flags = CLK_SET_RATE_PARENT,
1461 .ops = &clk_branch2_ops,
1462 },
1463 },
1464};
1465
1466static struct clk_branch gcc_sdcc2_ahb_clk = {
1467 .halt_reg = 0x14008,
1468 .clkr = {
1469 .enable_reg = 0x14008,
1470 .enable_mask = BIT(0),
1471 .hw.init = &(struct clk_init_data){
1472 .name = "gcc_sdcc2_ahb_clk",
1473 .ops = &clk_branch2_ops,
1474 },
1475 },
1476};
1477
1478static struct clk_branch gcc_sdcc3_apps_clk = {
1479 .halt_reg = 0x15004,
1480 .clkr = {
1481 .enable_reg = 0x15004,
1482 .enable_mask = BIT(0),
1483 .hw.init = &(struct clk_init_data){
1484 .name = "gcc_sdcc3_apps_clk",
1485 .parent_hws = (const struct clk_hw*[]){
1486 &sdcc3_apps_clk_src.clkr.hw,
1487 },
1488 .num_parents = 1,
1489 .flags = CLK_SET_RATE_PARENT,
1490 .ops = &clk_branch2_ops,
1491 },
1492 },
1493};
1494
1495static struct clk_branch gcc_sdcc3_ahb_clk = {
1496 .halt_reg = 0x15008,
1497 .clkr = {
1498 .enable_reg = 0x15008,
1499 .enable_mask = BIT(0),
1500 .hw.init = &(struct clk_init_data){
1501 .name = "gcc_sdcc3_ahb_clk",
1502 .ops = &clk_branch2_ops,
1503 },
1504 },
1505};
1506
1507static struct clk_branch gcc_sdcc4_apps_clk = {
1508 .halt_reg = 0x16004,
1509 .clkr = {
1510 .enable_reg = 0x16004,
1511 .enable_mask = BIT(0),
1512 .hw.init = &(struct clk_init_data){
1513 .name = "gcc_sdcc4_apps_clk",
1514 .parent_hws = (const struct clk_hw*[]){
1515 &sdcc4_apps_clk_src.clkr.hw,
1516 },
1517 .num_parents = 1,
1518 .flags = CLK_SET_RATE_PARENT,
1519 .ops = &clk_branch2_ops,
1520 },
1521 },
1522};
1523
1524static struct clk_branch gcc_sdcc4_ahb_clk = {
1525 .halt_reg = 0x16008,
1526 .clkr = {
1527 .enable_reg = 0x16008,
1528 .enable_mask = BIT(0),
1529 .hw.init = &(struct clk_init_data){
1530 .name = "gcc_sdcc4_ahb_clk",
1531 .ops = &clk_branch2_ops,
1532 },
1533 },
1534};
1535
1536static struct clk_branch gcc_blsp1_ahb_clk = {
1537 .halt_reg = 0x17004,
1538 .halt_check = BRANCH_HALT_VOTED,
1539 .clkr = {
1540 .enable_reg = 0x52004,
1541 .enable_mask = BIT(17),
1542 .hw.init = &(struct clk_init_data){
1543 .name = "gcc_blsp1_ahb_clk",
1544 .ops = &clk_branch2_ops,
1545 },
1546 },
1547};
1548
1549static struct clk_branch gcc_blsp1_sleep_clk = {
1550 .halt_reg = 0x17008,
1551 .halt_check = BRANCH_HALT_VOTED,
1552 .clkr = {
1553 .enable_reg = 0x52004,
1554 .enable_mask = BIT(16),
1555 .hw.init = &(struct clk_init_data){
1556 .name = "gcc_blsp1_sleep_clk",
1557 .parent_hws = (const struct clk_hw*[]){
1558 &gcc_sleep_clk_src.clkr.hw,
1559 },
1560 .num_parents = 1,
1561 .flags = CLK_SET_RATE_PARENT,
1562 .ops = &clk_branch2_ops,
1563 },
1564 },
1565};
1566
1567static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
1568 .halt_reg = 0x19004,
1569 .clkr = {
1570 .enable_reg = 0x19004,
1571 .enable_mask = BIT(0),
1572 .hw.init = &(struct clk_init_data){
1573 .name = "gcc_blsp1_qup1_spi_apps_clk",
1574 .parent_hws = (const struct clk_hw*[]){
1575 &blsp1_qup1_spi_apps_clk_src.clkr.hw,
1576 },
1577 .num_parents = 1,
1578 .flags = CLK_SET_RATE_PARENT,
1579 .ops = &clk_branch2_ops,
1580 },
1581 },
1582};
1583
1584static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
1585 .halt_reg = 0x19008,
1586 .clkr = {
1587 .enable_reg = 0x19008,
1588 .enable_mask = BIT(0),
1589 .hw.init = &(struct clk_init_data){
1590 .name = "gcc_blsp1_qup1_i2c_apps_clk",
1591 .parent_hws = (const struct clk_hw*[]){
1592 &blsp1_qup1_i2c_apps_clk_src.clkr.hw,
1593 },
1594 .num_parents = 1,
1595 .flags = CLK_SET_RATE_PARENT,
1596 .ops = &clk_branch2_ops,
1597 },
1598 },
1599};
1600
1601static struct clk_branch gcc_blsp1_uart1_apps_clk = {
1602 .halt_reg = 0x1a004,
1603 .clkr = {
1604 .enable_reg = 0x1a004,
1605 .enable_mask = BIT(0),
1606 .hw.init = &(struct clk_init_data){
1607 .name = "gcc_blsp1_uart1_apps_clk",
1608 .parent_hws = (const struct clk_hw*[]){
1609 &blsp1_uart1_apps_clk_src.clkr.hw,
1610 },
1611 .num_parents = 1,
1612 .flags = CLK_SET_RATE_PARENT,
1613 .ops = &clk_branch2_ops,
1614 },
1615 },
1616};
1617
1618static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
1619 .halt_reg = 0x1b004,
1620 .clkr = {
1621 .enable_reg = 0x1b004,
1622 .enable_mask = BIT(0),
1623 .hw.init = &(struct clk_init_data){
1624 .name = "gcc_blsp1_qup2_spi_apps_clk",
1625 .parent_hws = (const struct clk_hw*[]){
1626 &blsp1_qup2_spi_apps_clk_src.clkr.hw,
1627 },
1628 .num_parents = 1,
1629 .flags = CLK_SET_RATE_PARENT,
1630 .ops = &clk_branch2_ops,
1631 },
1632 },
1633};
1634
1635static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
1636 .halt_reg = 0x1b008,
1637 .clkr = {
1638 .enable_reg = 0x1b008,
1639 .enable_mask = BIT(0),
1640 .hw.init = &(struct clk_init_data){
1641 .name = "gcc_blsp1_qup2_i2c_apps_clk",
1642 .parent_hws = (const struct clk_hw*[]){
1643 &blsp1_qup2_i2c_apps_clk_src.clkr.hw,
1644 },
1645 .num_parents = 1,
1646 .flags = CLK_SET_RATE_PARENT,
1647 .ops = &clk_branch2_ops,
1648 },
1649 },
1650};
1651
1652static struct clk_branch gcc_blsp1_uart2_apps_clk = {
1653 .halt_reg = 0x1c004,
1654 .clkr = {
1655 .enable_reg = 0x1c004,
1656 .enable_mask = BIT(0),
1657 .hw.init = &(struct clk_init_data){
1658 .name = "gcc_blsp1_uart2_apps_clk",
1659 .parent_hws = (const struct clk_hw*[]){
1660 &blsp1_uart2_apps_clk_src.clkr.hw,
1661 },
1662 .num_parents = 1,
1663 .flags = CLK_SET_RATE_PARENT,
1664 .ops = &clk_branch2_ops,
1665 },
1666 },
1667};
1668
1669static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
1670 .halt_reg = 0x1d004,
1671 .clkr = {
1672 .enable_reg = 0x1d004,
1673 .enable_mask = BIT(0),
1674 .hw.init = &(struct clk_init_data){
1675 .name = "gcc_blsp1_qup3_spi_apps_clk",
1676 .parent_hws = (const struct clk_hw*[]){
1677 &blsp1_qup3_spi_apps_clk_src.clkr.hw,
1678 },
1679 .num_parents = 1,
1680 .flags = CLK_SET_RATE_PARENT,
1681 .ops = &clk_branch2_ops,
1682 },
1683 },
1684};
1685
1686static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
1687 .halt_reg = 0x1d008,
1688 .clkr = {
1689 .enable_reg = 0x1d008,
1690 .enable_mask = BIT(0),
1691 .hw.init = &(struct clk_init_data){
1692 .name = "gcc_blsp1_qup3_i2c_apps_clk",
1693 .parent_hws = (const struct clk_hw*[]){
1694 &blsp1_qup3_i2c_apps_clk_src.clkr.hw,
1695 },
1696 .num_parents = 1,
1697 .flags = CLK_SET_RATE_PARENT,
1698 .ops = &clk_branch2_ops,
1699 },
1700 },
1701};
1702
1703static struct clk_branch gcc_blsp1_uart3_apps_clk = {
1704 .halt_reg = 0x1e004,
1705 .clkr = {
1706 .enable_reg = 0x1e004,
1707 .enable_mask = BIT(0),
1708 .hw.init = &(struct clk_init_data){
1709 .name = "gcc_blsp1_uart3_apps_clk",
1710 .parent_hws = (const struct clk_hw*[]){
1711 &blsp1_uart3_apps_clk_src.clkr.hw,
1712 },
1713 .num_parents = 1,
1714 .flags = CLK_SET_RATE_PARENT,
1715 .ops = &clk_branch2_ops,
1716 },
1717 },
1718};
1719
1720static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
1721 .halt_reg = 0x1f004,
1722 .clkr = {
1723 .enable_reg = 0x1f004,
1724 .enable_mask = BIT(0),
1725 .hw.init = &(struct clk_init_data){
1726 .name = "gcc_blsp1_qup4_spi_apps_clk",
1727 .parent_hws = (const struct clk_hw*[]){
1728 &blsp1_qup4_spi_apps_clk_src.clkr.hw,
1729 },
1730 .num_parents = 1,
1731 .flags = CLK_SET_RATE_PARENT,
1732 .ops = &clk_branch2_ops,
1733 },
1734 },
1735};
1736
1737static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
1738 .halt_reg = 0x1f008,
1739 .clkr = {
1740 .enable_reg = 0x1f008,
1741 .enable_mask = BIT(0),
1742 .hw.init = &(struct clk_init_data){
1743 .name = "gcc_blsp1_qup4_i2c_apps_clk",
1744 .parent_hws = (const struct clk_hw*[]){
1745 &blsp1_qup4_i2c_apps_clk_src.clkr.hw,
1746 },
1747 .num_parents = 1,
1748 .flags = CLK_SET_RATE_PARENT,
1749 .ops = &clk_branch2_ops,
1750 },
1751 },
1752};
1753
1754static struct clk_branch gcc_blsp1_uart4_apps_clk = {
1755 .halt_reg = 0x20004,
1756 .clkr = {
1757 .enable_reg = 0x20004,
1758 .enable_mask = BIT(0),
1759 .hw.init = &(struct clk_init_data){
1760 .name = "gcc_blsp1_uart4_apps_clk",
1761 .parent_hws = (const struct clk_hw*[]){
1762 &blsp1_uart4_apps_clk_src.clkr.hw,
1763 },
1764 .num_parents = 1,
1765 .flags = CLK_SET_RATE_PARENT,
1766 .ops = &clk_branch2_ops,
1767 },
1768 },
1769};
1770
1771static struct clk_branch gcc_blsp1_qup5_spi_apps_clk = {
1772 .halt_reg = 0x21004,
1773 .clkr = {
1774 .enable_reg = 0x21004,
1775 .enable_mask = BIT(0),
1776 .hw.init = &(struct clk_init_data){
1777 .name = "gcc_blsp1_qup5_spi_apps_clk",
1778 .parent_hws = (const struct clk_hw*[]){
1779 &blsp1_qup5_spi_apps_clk_src.clkr.hw,
1780 },
1781 .num_parents = 1,
1782 .flags = CLK_SET_RATE_PARENT,
1783 .ops = &clk_branch2_ops,
1784 },
1785 },
1786};
1787
1788static struct clk_branch gcc_blsp1_qup5_i2c_apps_clk = {
1789 .halt_reg = 0x21008,
1790 .clkr = {
1791 .enable_reg = 0x21008,
1792 .enable_mask = BIT(0),
1793 .hw.init = &(struct clk_init_data){
1794 .name = "gcc_blsp1_qup5_i2c_apps_clk",
1795 .parent_hws = (const struct clk_hw*[]){
1796 &blsp1_qup5_i2c_apps_clk_src.clkr.hw,
1797 },
1798 .num_parents = 1,
1799 .flags = CLK_SET_RATE_PARENT,
1800 .ops = &clk_branch2_ops,
1801 },
1802 },
1803};
1804
1805static struct clk_branch gcc_blsp1_uart5_apps_clk = {
1806 .halt_reg = 0x22004,
1807 .clkr = {
1808 .enable_reg = 0x22004,
1809 .enable_mask = BIT(0),
1810 .hw.init = &(struct clk_init_data){
1811 .name = "gcc_blsp1_uart5_apps_clk",
1812 .parent_hws = (const struct clk_hw*[]){
1813 &blsp1_uart5_apps_clk_src.clkr.hw,
1814 },
1815 .num_parents = 1,
1816 .flags = CLK_SET_RATE_PARENT,
1817 .ops = &clk_branch2_ops,
1818 },
1819 },
1820};
1821
1822static struct clk_branch gcc_blsp1_qup6_spi_apps_clk = {
1823 .halt_reg = 0x23004,
1824 .clkr = {
1825 .enable_reg = 0x23004,
1826 .enable_mask = BIT(0),
1827 .hw.init = &(struct clk_init_data){
1828 .name = "gcc_blsp1_qup6_spi_apps_clk",
1829 .parent_hws = (const struct clk_hw*[]){
1830 &blsp1_qup6_spi_apps_clk_src.clkr.hw,
1831 },
1832 .num_parents = 1,
1833 .flags = CLK_SET_RATE_PARENT,
1834 .ops = &clk_branch2_ops,
1835 },
1836 },
1837};
1838
1839static struct clk_branch gcc_blsp1_qup6_i2c_apps_clk = {
1840 .halt_reg = 0x23008,
1841 .clkr = {
1842 .enable_reg = 0x23008,
1843 .enable_mask = BIT(0),
1844 .hw.init = &(struct clk_init_data){
1845 .name = "gcc_blsp1_qup6_i2c_apps_clk",
1846 .parent_hws = (const struct clk_hw*[]){
1847 &blsp1_qup6_i2c_apps_clk_src.clkr.hw,
1848 },
1849 .num_parents = 1,
1850 .flags = CLK_SET_RATE_PARENT,
1851 .ops = &clk_branch2_ops,
1852 },
1853 },
1854};
1855
1856static struct clk_branch gcc_blsp1_uart6_apps_clk = {
1857 .halt_reg = 0x24004,
1858 .clkr = {
1859 .enable_reg = 0x24004,
1860 .enable_mask = BIT(0),
1861 .hw.init = &(struct clk_init_data){
1862 .name = "gcc_blsp1_uart6_apps_clk",
1863 .parent_hws = (const struct clk_hw*[]){
1864 &blsp1_uart6_apps_clk_src.clkr.hw,
1865 },
1866 .num_parents = 1,
1867 .flags = CLK_SET_RATE_PARENT,
1868 .ops = &clk_branch2_ops,
1869 },
1870 },
1871};
1872
1873static struct clk_branch gcc_blsp2_ahb_clk = {
1874 .halt_reg = 0x25004,
1875 .halt_check = BRANCH_HALT_VOTED,
1876 .clkr = {
1877 .enable_reg = 0x52004,
1878 .enable_mask = BIT(15),
1879 .hw.init = &(struct clk_init_data){
1880 .name = "gcc_blsp2_ahb_clk",
1881 .ops = &clk_branch2_ops,
1882 },
1883 },
1884};
1885
1886static struct clk_branch gcc_blsp2_sleep_clk = {
1887 .halt_reg = 0x25008,
1888 .halt_check = BRANCH_HALT_VOTED,
1889 .clkr = {
1890 .enable_reg = 0x52004,
1891 .enable_mask = BIT(14),
1892 .hw.init = &(struct clk_init_data){
1893 .name = "gcc_blsp2_sleep_clk",
1894 .parent_hws = (const struct clk_hw*[]){
1895 &gcc_sleep_clk_src.clkr.hw,
1896 },
1897 .num_parents = 1,
1898 .flags = CLK_SET_RATE_PARENT,
1899 .ops = &clk_branch2_ops,
1900 },
1901 },
1902};
1903
1904static struct clk_branch gcc_blsp2_qup1_spi_apps_clk = {
1905 .halt_reg = 0x26004,
1906 .clkr = {
1907 .enable_reg = 0x26004,
1908 .enable_mask = BIT(0),
1909 .hw.init = &(struct clk_init_data){
1910 .name = "gcc_blsp2_qup1_spi_apps_clk",
1911 .parent_hws = (const struct clk_hw*[]){
1912 &blsp2_qup1_spi_apps_clk_src.clkr.hw,
1913 },
1914 .num_parents = 1,
1915 .flags = CLK_SET_RATE_PARENT,
1916 .ops = &clk_branch2_ops,
1917 },
1918 },
1919};
1920
1921static struct clk_branch gcc_blsp2_qup1_i2c_apps_clk = {
1922 .halt_reg = 0x26008,
1923 .clkr = {
1924 .enable_reg = 0x26008,
1925 .enable_mask = BIT(0),
1926 .hw.init = &(struct clk_init_data){
1927 .name = "gcc_blsp2_qup1_i2c_apps_clk",
1928 .parent_hws = (const struct clk_hw*[]){
1929 &blsp2_qup1_i2c_apps_clk_src.clkr.hw,
1930 },
1931 .num_parents = 1,
1932 .flags = CLK_SET_RATE_PARENT,
1933 .ops = &clk_branch2_ops,
1934 },
1935 },
1936};
1937
1938static struct clk_branch gcc_blsp2_uart1_apps_clk = {
1939 .halt_reg = 0x27004,
1940 .clkr = {
1941 .enable_reg = 0x27004,
1942 .enable_mask = BIT(0),
1943 .hw.init = &(struct clk_init_data){
1944 .name = "gcc_blsp2_uart1_apps_clk",
1945 .parent_hws = (const struct clk_hw*[]){
1946 &blsp2_uart1_apps_clk_src.clkr.hw,
1947 },
1948 .num_parents = 1,
1949 .flags = CLK_SET_RATE_PARENT,
1950 .ops = &clk_branch2_ops,
1951 },
1952 },
1953};
1954
1955static struct clk_branch gcc_blsp2_qup2_spi_apps_clk = {
1956 .halt_reg = 0x28004,
1957 .clkr = {
1958 .enable_reg = 0x28004,
1959 .enable_mask = BIT(0),
1960 .hw.init = &(struct clk_init_data){
1961 .name = "gcc_blsp2_qup2_spi_apps_clk",
1962 .parent_hws = (const struct clk_hw*[]){
1963 &blsp2_qup2_spi_apps_clk_src.clkr.hw,
1964 },
1965 .num_parents = 1,
1966 .flags = CLK_SET_RATE_PARENT,
1967 .ops = &clk_branch2_ops,
1968 },
1969 },
1970};
1971
1972static struct clk_branch gcc_blsp2_qup2_i2c_apps_clk = {
1973 .halt_reg = 0x28008,
1974 .clkr = {
1975 .enable_reg = 0x28008,
1976 .enable_mask = BIT(0),
1977 .hw.init = &(struct clk_init_data){
1978 .name = "gcc_blsp2_qup2_i2c_apps_clk",
1979 .parent_hws = (const struct clk_hw*[]){
1980 &blsp2_qup2_i2c_apps_clk_src.clkr.hw,
1981 },
1982 .num_parents = 1,
1983 .flags = CLK_SET_RATE_PARENT,
1984 .ops = &clk_branch2_ops,
1985 },
1986 },
1987};
1988
1989static struct clk_branch gcc_blsp2_uart2_apps_clk = {
1990 .halt_reg = 0x29004,
1991 .clkr = {
1992 .enable_reg = 0x29004,
1993 .enable_mask = BIT(0),
1994 .hw.init = &(struct clk_init_data){
1995 .name = "gcc_blsp2_uart2_apps_clk",
1996 .parent_hws = (const struct clk_hw*[]){
1997 &blsp2_uart2_apps_clk_src.clkr.hw,
1998 },
1999 .num_parents = 1,
2000 .flags = CLK_SET_RATE_PARENT,
2001 .ops = &clk_branch2_ops,
2002 },
2003 },
2004};
2005
2006static struct clk_branch gcc_blsp2_qup3_spi_apps_clk = {
2007 .halt_reg = 0x2a004,
2008 .clkr = {
2009 .enable_reg = 0x2a004,
2010 .enable_mask = BIT(0),
2011 .hw.init = &(struct clk_init_data){
2012 .name = "gcc_blsp2_qup3_spi_apps_clk",
2013 .parent_hws = (const struct clk_hw*[]){
2014 &blsp2_qup3_spi_apps_clk_src.clkr.hw,
2015 },
2016 .num_parents = 1,
2017 .flags = CLK_SET_RATE_PARENT,
2018 .ops = &clk_branch2_ops,
2019 },
2020 },
2021};
2022
2023static struct clk_branch gcc_blsp2_qup3_i2c_apps_clk = {
2024 .halt_reg = 0x2a008,
2025 .clkr = {
2026 .enable_reg = 0x2a008,
2027 .enable_mask = BIT(0),
2028 .hw.init = &(struct clk_init_data){
2029 .name = "gcc_blsp2_qup3_i2c_apps_clk",
2030 .parent_hws = (const struct clk_hw*[]){
2031 &blsp2_qup3_i2c_apps_clk_src.clkr.hw,
2032 },
2033 .num_parents = 1,
2034 .flags = CLK_SET_RATE_PARENT,
2035 .ops = &clk_branch2_ops,
2036 },
2037 },
2038};
2039
2040static struct clk_branch gcc_blsp2_uart3_apps_clk = {
2041 .halt_reg = 0x2b004,
2042 .clkr = {
2043 .enable_reg = 0x2b004,
2044 .enable_mask = BIT(0),
2045 .hw.init = &(struct clk_init_data){
2046 .name = "gcc_blsp2_uart3_apps_clk",
2047 .parent_hws = (const struct clk_hw*[]){
2048 &blsp2_uart3_apps_clk_src.clkr.hw,
2049 },
2050 .num_parents = 1,
2051 .flags = CLK_SET_RATE_PARENT,
2052 .ops = &clk_branch2_ops,
2053 },
2054 },
2055};
2056
2057static struct clk_branch gcc_blsp2_qup4_spi_apps_clk = {
2058 .halt_reg = 0x2c004,
2059 .clkr = {
2060 .enable_reg = 0x2c004,
2061 .enable_mask = BIT(0),
2062 .hw.init = &(struct clk_init_data){
2063 .name = "gcc_blsp2_qup4_spi_apps_clk",
2064 .parent_hws = (const struct clk_hw*[]){
2065 &blsp2_qup4_spi_apps_clk_src.clkr.hw,
2066 },
2067 .num_parents = 1,
2068 .flags = CLK_SET_RATE_PARENT,
2069 .ops = &clk_branch2_ops,
2070 },
2071 },
2072};
2073
2074static struct clk_branch gcc_blsp2_qup4_i2c_apps_clk = {
2075 .halt_reg = 0x2c008,
2076 .clkr = {
2077 .enable_reg = 0x2c008,
2078 .enable_mask = BIT(0),
2079 .hw.init = &(struct clk_init_data){
2080 .name = "gcc_blsp2_qup4_i2c_apps_clk",
2081 .parent_hws = (const struct clk_hw*[]){
2082 &blsp2_qup4_i2c_apps_clk_src.clkr.hw,
2083 },
2084 .num_parents = 1,
2085 .flags = CLK_SET_RATE_PARENT,
2086 .ops = &clk_branch2_ops,
2087 },
2088 },
2089};
2090
2091static struct clk_branch gcc_blsp2_uart4_apps_clk = {
2092 .halt_reg = 0x2d004,
2093 .clkr = {
2094 .enable_reg = 0x2d004,
2095 .enable_mask = BIT(0),
2096 .hw.init = &(struct clk_init_data){
2097 .name = "gcc_blsp2_uart4_apps_clk",
2098 .parent_hws = (const struct clk_hw*[]){
2099 &blsp2_uart4_apps_clk_src.clkr.hw,
2100 },
2101 .num_parents = 1,
2102 .flags = CLK_SET_RATE_PARENT,
2103 .ops = &clk_branch2_ops,
2104 },
2105 },
2106};
2107
2108static struct clk_branch gcc_blsp2_qup5_spi_apps_clk = {
2109 .halt_reg = 0x2e004,
2110 .clkr = {
2111 .enable_reg = 0x2e004,
2112 .enable_mask = BIT(0),
2113 .hw.init = &(struct clk_init_data){
2114 .name = "gcc_blsp2_qup5_spi_apps_clk",
2115 .parent_hws = (const struct clk_hw*[]){
2116 &blsp2_qup5_spi_apps_clk_src.clkr.hw,
2117 },
2118 .num_parents = 1,
2119 .flags = CLK_SET_RATE_PARENT,
2120 .ops = &clk_branch2_ops,
2121 },
2122 },
2123};
2124
2125static struct clk_branch gcc_blsp2_qup5_i2c_apps_clk = {
2126 .halt_reg = 0x2e008,
2127 .clkr = {
2128 .enable_reg = 0x2e008,
2129 .enable_mask = BIT(0),
2130 .hw.init = &(struct clk_init_data){
2131 .name = "gcc_blsp2_qup5_i2c_apps_clk",
2132 .parent_hws = (const struct clk_hw*[]){
2133 &blsp2_qup5_i2c_apps_clk_src.clkr.hw,
2134 },
2135 .num_parents = 1,
2136 .flags = CLK_SET_RATE_PARENT,
2137 .ops = &clk_branch2_ops,
2138 },
2139 },
2140};
2141
2142static struct clk_branch gcc_blsp2_uart5_apps_clk = {
2143 .halt_reg = 0x2f004,
2144 .clkr = {
2145 .enable_reg = 0x2f004,
2146 .enable_mask = BIT(0),
2147 .hw.init = &(struct clk_init_data){
2148 .name = "gcc_blsp2_uart5_apps_clk",
2149 .parent_hws = (const struct clk_hw*[]){
2150 &blsp2_uart5_apps_clk_src.clkr.hw,
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_blsp2_qup6_spi_apps_clk = {
2160 .halt_reg = 0x30004,
2161 .clkr = {
2162 .enable_reg = 0x30004,
2163 .enable_mask = BIT(0),
2164 .hw.init = &(struct clk_init_data){
2165 .name = "gcc_blsp2_qup6_spi_apps_clk",
2166 .parent_hws = (const struct clk_hw*[]){
2167 &blsp2_qup6_spi_apps_clk_src.clkr.hw,
2168 },
2169 .num_parents = 1,
2170 .flags = CLK_SET_RATE_PARENT,
2171 .ops = &clk_branch2_ops,
2172 },
2173 },
2174};
2175
2176static struct clk_branch gcc_blsp2_qup6_i2c_apps_clk = {
2177 .halt_reg = 0x30008,
2178 .clkr = {
2179 .enable_reg = 0x30008,
2180 .enable_mask = BIT(0),
2181 .hw.init = &(struct clk_init_data){
2182 .name = "gcc_blsp2_qup6_i2c_apps_clk",
2183 .parent_hws = (const struct clk_hw*[]){
2184 &blsp2_qup6_i2c_apps_clk_src.clkr.hw,
2185 },
2186 .num_parents = 1,
2187 .flags = CLK_SET_RATE_PARENT,
2188 .ops = &clk_branch2_ops,
2189 },
2190 },
2191};
2192
2193static struct clk_branch gcc_blsp2_uart6_apps_clk = {
2194 .halt_reg = 0x31004,
2195 .clkr = {
2196 .enable_reg = 0x31004,
2197 .enable_mask = BIT(0),
2198 .hw.init = &(struct clk_init_data){
2199 .name = "gcc_blsp2_uart6_apps_clk",
2200 .parent_hws = (const struct clk_hw*[]){
2201 &blsp2_uart6_apps_clk_src.clkr.hw,
2202 },
2203 .num_parents = 1,
2204 .flags = CLK_SET_RATE_PARENT,
2205 .ops = &clk_branch2_ops,
2206 },
2207 },
2208};
2209
2210static struct clk_branch gcc_pdm_ahb_clk = {
2211 .halt_reg = 0x33004,
2212 .clkr = {
2213 .enable_reg = 0x33004,
2214 .enable_mask = BIT(0),
2215 .hw.init = &(struct clk_init_data){
2216 .name = "gcc_pdm_ahb_clk",
2217 .ops = &clk_branch2_ops,
2218 },
2219 },
2220};
2221
2222static struct clk_branch gcc_pdm2_clk = {
2223 .halt_reg = 0x3300c,
2224 .clkr = {
2225 .enable_reg = 0x3300c,
2226 .enable_mask = BIT(0),
2227 .hw.init = &(struct clk_init_data){
2228 .name = "gcc_pdm2_clk",
2229 .parent_hws = (const struct clk_hw*[]){
2230 &pdm2_clk_src.clkr.hw,
2231 },
2232 .num_parents = 1,
2233 .flags = CLK_SET_RATE_PARENT,
2234 .ops = &clk_branch2_ops,
2235 },
2236 },
2237};
2238
2239static struct clk_branch gcc_prng_ahb_clk = {
2240 .halt_reg = 0x34004,
2241 .halt_check = BRANCH_HALT_VOTED,
2242 .clkr = {
2243 .enable_reg = 0x52004,
2244 .enable_mask = BIT(13),
2245 .hw.init = &(struct clk_init_data){
2246 .name = "gcc_prng_ahb_clk",
2247 .ops = &clk_branch2_ops,
2248 },
2249 },
2250};
2251
2252static struct clk_branch gcc_tsif_ahb_clk = {
2253 .halt_reg = 0x36004,
2254 .clkr = {
2255 .enable_reg = 0x36004,
2256 .enable_mask = BIT(0),
2257 .hw.init = &(struct clk_init_data){
2258 .name = "gcc_tsif_ahb_clk",
2259 .ops = &clk_branch2_ops,
2260 },
2261 },
2262};
2263
2264static struct clk_branch gcc_tsif_ref_clk = {
2265 .halt_reg = 0x36008,
2266 .clkr = {
2267 .enable_reg = 0x36008,
2268 .enable_mask = BIT(0),
2269 .hw.init = &(struct clk_init_data){
2270 .name = "gcc_tsif_ref_clk",
2271 .parent_hws = (const struct clk_hw*[]){
2272 &tsif_ref_clk_src.clkr.hw,
2273 },
2274 .num_parents = 1,
2275 .flags = CLK_SET_RATE_PARENT,
2276 .ops = &clk_branch2_ops,
2277 },
2278 },
2279};
2280
2281static struct clk_branch gcc_tsif_inactivity_timers_clk = {
2282 .halt_reg = 0x3600c,
2283 .clkr = {
2284 .enable_reg = 0x3600c,
2285 .enable_mask = BIT(0),
2286 .hw.init = &(struct clk_init_data){
2287 .name = "gcc_tsif_inactivity_timers_clk",
2288 .parent_hws = (const struct clk_hw*[]){
2289 &gcc_sleep_clk_src.clkr.hw,
2290 },
2291 .num_parents = 1,
2292 .flags = CLK_SET_RATE_PARENT,
2293 .ops = &clk_branch2_ops,
2294 },
2295 },
2296};
2297
2298static struct clk_branch gcc_boot_rom_ahb_clk = {
2299 .halt_reg = 0x38004,
2300 .halt_check = BRANCH_HALT_VOTED,
2301 .clkr = {
2302 .enable_reg = 0x52004,
2303 .enable_mask = BIT(10),
2304 .hw.init = &(struct clk_init_data){
2305 .name = "gcc_boot_rom_ahb_clk",
2306 .ops = &clk_branch2_ops,
2307 },
2308 },
2309};
2310
2311static struct clk_branch gcc_bimc_gfx_clk = {
2312 .halt_reg = 0x46018,
2313 .clkr = {
2314 .enable_reg = 0x46018,
2315 .enable_mask = BIT(0),
2316 .hw.init = &(struct clk_init_data){
2317 .name = "gcc_bimc_gfx_clk",
2318 .flags = CLK_SET_RATE_PARENT,
2319 .ops = &clk_branch2_ops,
2320 },
2321 },
2322};
2323
2324static struct clk_branch gcc_hmss_rbcpr_clk = {
2325 .halt_reg = 0x4800c,
2326 .clkr = {
2327 .enable_reg = 0x4800c,
2328 .enable_mask = BIT(0),
2329 .hw.init = &(struct clk_init_data){
2330 .name = "gcc_hmss_rbcpr_clk",
2331 .parent_hws = (const struct clk_hw*[]){
2332 &hmss_rbcpr_clk_src.clkr.hw,
2333 },
2334 .num_parents = 1,
2335 .flags = CLK_SET_RATE_PARENT,
2336 .ops = &clk_branch2_ops,
2337 },
2338 },
2339};
2340
2341static struct clk_branch gcc_gp1_clk = {
2342 .halt_reg = 0x64000,
2343 .clkr = {
2344 .enable_reg = 0x64000,
2345 .enable_mask = BIT(0),
2346 .hw.init = &(struct clk_init_data){
2347 .name = "gcc_gp1_clk",
2348 .parent_hws = (const struct clk_hw*[]){
2349 &gp1_clk_src.clkr.hw,
2350 },
2351 .num_parents = 1,
2352 .flags = CLK_SET_RATE_PARENT,
2353 .ops = &clk_branch2_ops,
2354 },
2355 },
2356};
2357
2358static struct clk_branch gcc_gp2_clk = {
2359 .halt_reg = 0x65000,
2360 .clkr = {
2361 .enable_reg = 0x65000,
2362 .enable_mask = BIT(0),
2363 .hw.init = &(struct clk_init_data){
2364 .name = "gcc_gp2_clk",
2365 .parent_hws = (const struct clk_hw*[]){
2366 &gp2_clk_src.clkr.hw,
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_gp3_clk = {
2376 .halt_reg = 0x66000,
2377 .clkr = {
2378 .enable_reg = 0x66000,
2379 .enable_mask = BIT(0),
2380 .hw.init = &(struct clk_init_data){
2381 .name = "gcc_gp3_clk",
2382 .parent_hws = (const struct clk_hw*[]){
2383 &gp3_clk_src.clkr.hw,
2384 },
2385 .num_parents = 1,
2386 .flags = CLK_SET_RATE_PARENT,
2387 .ops = &clk_branch2_ops,
2388 },
2389 },
2390};
2391
2392static struct clk_branch gcc_pcie_0_slv_axi_clk = {
2393 .halt_reg = 0x6b008,
2394 .clkr = {
2395 .enable_reg = 0x6b008,
2396 .enable_mask = BIT(0),
2397 .hw.init = &(struct clk_init_data){
2398 .name = "gcc_pcie_0_slv_axi_clk",
2399 .ops = &clk_branch2_ops,
2400 },
2401 },
2402};
2403
2404static struct clk_branch gcc_pcie_0_mstr_axi_clk = {
2405 .halt_reg = 0x6b00c,
2406 .clkr = {
2407 .enable_reg = 0x6b00c,
2408 .enable_mask = BIT(0),
2409 .hw.init = &(struct clk_init_data){
2410 .name = "gcc_pcie_0_mstr_axi_clk",
2411 .ops = &clk_branch2_ops,
2412 },
2413 },
2414};
2415
2416static struct clk_branch gcc_pcie_0_cfg_ahb_clk = {
2417 .halt_reg = 0x6b010,
2418 .clkr = {
2419 .enable_reg = 0x6b010,
2420 .enable_mask = BIT(0),
2421 .hw.init = &(struct clk_init_data){
2422 .name = "gcc_pcie_0_cfg_ahb_clk",
2423 .ops = &clk_branch2_ops,
2424 },
2425 },
2426};
2427
2428static struct clk_branch gcc_pcie_0_aux_clk = {
2429 .halt_reg = 0x6b014,
2430 .clkr = {
2431 .enable_reg = 0x6b014,
2432 .enable_mask = BIT(0),
2433 .hw.init = &(struct clk_init_data){
2434 .name = "gcc_pcie_0_aux_clk",
2435 .parent_hws = (const struct clk_hw*[]){
2436 &pcie_aux_clk_src.clkr.hw,
2437 },
2438 .num_parents = 1,
2439 .flags = CLK_SET_RATE_PARENT,
2440 .ops = &clk_branch2_ops,
2441 },
2442 },
2443};
2444
2445static struct clk_branch gcc_pcie_0_pipe_clk = {
2446 .halt_reg = 0x6b018,
2447 .halt_check = BRANCH_HALT_SKIP,
2448 .clkr = {
2449 .enable_reg = 0x6b018,
2450 .enable_mask = BIT(0),
2451 .hw.init = &(struct clk_init_data){
2452 .name = "gcc_pcie_0_pipe_clk",
2453 .parent_data = &(const struct clk_parent_data){
2454 .fw_name = "pcie_0_pipe_clk_src", .name = "pcie_0_pipe_clk_src",
2455 },
2456 .num_parents = 1,
2457 .flags = CLK_SET_RATE_PARENT,
2458 .ops = &clk_branch2_ops,
2459 },
2460 },
2461};
2462
2463static struct clk_branch gcc_pcie_1_slv_axi_clk = {
2464 .halt_reg = 0x6d008,
2465 .clkr = {
2466 .enable_reg = 0x6d008,
2467 .enable_mask = BIT(0),
2468 .hw.init = &(struct clk_init_data){
2469 .name = "gcc_pcie_1_slv_axi_clk",
2470 .ops = &clk_branch2_ops,
2471 },
2472 },
2473};
2474
2475static struct clk_branch gcc_pcie_1_mstr_axi_clk = {
2476 .halt_reg = 0x6d00c,
2477 .clkr = {
2478 .enable_reg = 0x6d00c,
2479 .enable_mask = BIT(0),
2480 .hw.init = &(struct clk_init_data){
2481 .name = "gcc_pcie_1_mstr_axi_clk",
2482 .ops = &clk_branch2_ops,
2483 },
2484 },
2485};
2486
2487static struct clk_branch gcc_pcie_1_cfg_ahb_clk = {
2488 .halt_reg = 0x6d010,
2489 .clkr = {
2490 .enable_reg = 0x6d010,
2491 .enable_mask = BIT(0),
2492 .hw.init = &(struct clk_init_data){
2493 .name = "gcc_pcie_1_cfg_ahb_clk",
2494 .ops = &clk_branch2_ops,
2495 },
2496 },
2497};
2498
2499static struct clk_branch gcc_pcie_1_aux_clk = {
2500 .halt_reg = 0x6d014,
2501 .clkr = {
2502 .enable_reg = 0x6d014,
2503 .enable_mask = BIT(0),
2504 .hw.init = &(struct clk_init_data){
2505 .name = "gcc_pcie_1_aux_clk",
2506 .parent_hws = (const struct clk_hw*[]){
2507 &pcie_aux_clk_src.clkr.hw,
2508 },
2509 .num_parents = 1,
2510 .flags = CLK_SET_RATE_PARENT,
2511 .ops = &clk_branch2_ops,
2512 },
2513 },
2514};
2515
2516static struct clk_branch gcc_pcie_1_pipe_clk = {
2517 .halt_reg = 0x6d018,
2518 .halt_check = BRANCH_HALT_SKIP,
2519 .clkr = {
2520 .enable_reg = 0x6d018,
2521 .enable_mask = BIT(0),
2522 .hw.init = &(struct clk_init_data){
2523 .name = "gcc_pcie_1_pipe_clk",
2524 .parent_data = &(const struct clk_parent_data){
2525 .fw_name = "pcie_1_pipe_clk_src", .name = "pcie_1_pipe_clk_src",
2526 },
2527 .num_parents = 1,
2528 .flags = CLK_SET_RATE_PARENT,
2529 .ops = &clk_branch2_ops,
2530 },
2531 },
2532};
2533
2534static struct clk_branch gcc_pcie_2_slv_axi_clk = {
2535 .halt_reg = 0x6e008,
2536 .clkr = {
2537 .enable_reg = 0x6e008,
2538 .enable_mask = BIT(0),
2539 .hw.init = &(struct clk_init_data){
2540 .name = "gcc_pcie_2_slv_axi_clk",
2541 .ops = &clk_branch2_ops,
2542 },
2543 },
2544};
2545
2546static struct clk_branch gcc_pcie_2_mstr_axi_clk = {
2547 .halt_reg = 0x6e00c,
2548 .clkr = {
2549 .enable_reg = 0x6e00c,
2550 .enable_mask = BIT(0),
2551 .hw.init = &(struct clk_init_data){
2552 .name = "gcc_pcie_2_mstr_axi_clk",
2553 .ops = &clk_branch2_ops,
2554 },
2555 },
2556};
2557
2558static struct clk_branch gcc_pcie_2_cfg_ahb_clk = {
2559 .halt_reg = 0x6e010,
2560 .clkr = {
2561 .enable_reg = 0x6e010,
2562 .enable_mask = BIT(0),
2563 .hw.init = &(struct clk_init_data){
2564 .name = "gcc_pcie_2_cfg_ahb_clk",
2565 .ops = &clk_branch2_ops,
2566 },
2567 },
2568};
2569
2570static struct clk_branch gcc_pcie_2_aux_clk = {
2571 .halt_reg = 0x6e014,
2572 .clkr = {
2573 .enable_reg = 0x6e014,
2574 .enable_mask = BIT(0),
2575 .hw.init = &(struct clk_init_data){
2576 .name = "gcc_pcie_2_aux_clk",
2577 .parent_hws = (const struct clk_hw*[]){
2578 &pcie_aux_clk_src.clkr.hw,
2579 },
2580 .num_parents = 1,
2581 .flags = CLK_SET_RATE_PARENT,
2582 .ops = &clk_branch2_ops,
2583 },
2584 },
2585};
2586
2587static struct clk_branch gcc_pcie_2_pipe_clk = {
2588 .halt_reg = 0x6e018,
2589 .halt_check = BRANCH_HALT_SKIP,
2590 .clkr = {
2591 .enable_reg = 0x6e018,
2592 .enable_mask = BIT(0),
2593 .hw.init = &(struct clk_init_data){
2594 .name = "gcc_pcie_2_pipe_clk",
2595 .parent_data = &(const struct clk_parent_data){
2596 .fw_name = "pcie_2_pipe_clk_src", .name = "pcie_2_pipe_clk_src",
2597 },
2598 .num_parents = 1,
2599 .flags = CLK_SET_RATE_PARENT,
2600 .ops = &clk_branch2_ops,
2601 },
2602 },
2603};
2604
2605static struct clk_branch gcc_pcie_phy_cfg_ahb_clk = {
2606 .halt_reg = 0x6f004,
2607 .clkr = {
2608 .enable_reg = 0x6f004,
2609 .enable_mask = BIT(0),
2610 .hw.init = &(struct clk_init_data){
2611 .name = "gcc_pcie_phy_cfg_ahb_clk",
2612 .ops = &clk_branch2_ops,
2613 },
2614 },
2615};
2616
2617static struct clk_branch gcc_pcie_phy_aux_clk = {
2618 .halt_reg = 0x6f008,
2619 .clkr = {
2620 .enable_reg = 0x6f008,
2621 .enable_mask = BIT(0),
2622 .hw.init = &(struct clk_init_data){
2623 .name = "gcc_pcie_phy_aux_clk",
2624 .parent_hws = (const struct clk_hw*[]){
2625 &pcie_aux_clk_src.clkr.hw,
2626 },
2627 .num_parents = 1,
2628 .flags = CLK_SET_RATE_PARENT,
2629 .ops = &clk_branch2_ops,
2630 },
2631 },
2632};
2633
2634static struct clk_branch gcc_ufs_axi_clk = {
2635 .halt_reg = 0x75008,
2636 .clkr = {
2637 .enable_reg = 0x75008,
2638 .enable_mask = BIT(0),
2639 .hw.init = &(struct clk_init_data){
2640 .name = "gcc_ufs_axi_clk",
2641 .parent_hws = (const struct clk_hw*[]){
2642 &ufs_axi_clk_src.clkr.hw,
2643 },
2644 .num_parents = 1,
2645 .flags = CLK_SET_RATE_PARENT,
2646 .ops = &clk_branch2_ops,
2647 },
2648 },
2649};
2650
2651static struct clk_branch gcc_ufs_ahb_clk = {
2652 .halt_reg = 0x7500c,
2653 .clkr = {
2654 .enable_reg = 0x7500c,
2655 .enable_mask = BIT(0),
2656 .hw.init = &(struct clk_init_data){
2657 .name = "gcc_ufs_ahb_clk",
2658 .ops = &clk_branch2_ops,
2659 },
2660 },
2661};
2662
2663static struct clk_fixed_factor ufs_tx_cfg_clk_src = {
2664 .mult = 1,
2665 .div = 16,
2666 .hw.init = &(struct clk_init_data){
2667 .name = "ufs_tx_cfg_clk_src",
2668 .parent_hws = (const struct clk_hw*[]){
2669 &ufs_axi_clk_src.clkr.hw,
2670 },
2671 .num_parents = 1,
2672 .flags = CLK_SET_RATE_PARENT,
2673 .ops = &clk_fixed_factor_ops,
2674 },
2675};
2676
2677static struct clk_branch gcc_ufs_tx_cfg_clk = {
2678 .halt_reg = 0x75010,
2679 .clkr = {
2680 .enable_reg = 0x75010,
2681 .enable_mask = BIT(0),
2682 .hw.init = &(struct clk_init_data){
2683 .name = "gcc_ufs_tx_cfg_clk",
2684 .parent_hws = (const struct clk_hw*[]){
2685 &ufs_tx_cfg_clk_src.hw,
2686 },
2687 .num_parents = 1,
2688 .flags = CLK_SET_RATE_PARENT,
2689 .ops = &clk_branch2_ops,
2690 },
2691 },
2692};
2693
2694static struct clk_fixed_factor ufs_rx_cfg_clk_src = {
2695 .mult = 1,
2696 .div = 16,
2697 .hw.init = &(struct clk_init_data){
2698 .name = "ufs_rx_cfg_clk_src",
2699 .parent_hws = (const struct clk_hw*[]){
2700 &ufs_axi_clk_src.clkr.hw,
2701 },
2702 .num_parents = 1,
2703 .flags = CLK_SET_RATE_PARENT,
2704 .ops = &clk_fixed_factor_ops,
2705 },
2706};
2707
2708static struct clk_branch gcc_hlos1_vote_lpass_core_smmu_clk = {
2709 .halt_reg = 0x7d010,
2710 .halt_check = BRANCH_HALT_VOTED,
2711 .clkr = {
2712 .enable_reg = 0x7d010,
2713 .enable_mask = BIT(0),
2714 .hw.init = &(struct clk_init_data){
2715 .name = "hlos1_vote_lpass_core_smmu_clk",
2716 .ops = &clk_branch2_ops,
2717 },
2718 },
2719};
2720
2721static struct clk_branch gcc_hlos1_vote_lpass_adsp_smmu_clk = {
2722 .halt_reg = 0x7d014,
2723 .halt_check = BRANCH_HALT_VOTED,
2724 .clkr = {
2725 .enable_reg = 0x7d014,
2726 .enable_mask = BIT(0),
2727 .hw.init = &(struct clk_init_data){
2728 .name = "hlos1_vote_lpass_adsp_smmu_clk",
2729 .ops = &clk_branch2_ops,
2730 },
2731 },
2732};
2733
2734static struct clk_branch gcc_ufs_rx_cfg_clk = {
2735 .halt_reg = 0x75014,
2736 .clkr = {
2737 .enable_reg = 0x75014,
2738 .enable_mask = BIT(0),
2739 .hw.init = &(struct clk_init_data){
2740 .name = "gcc_ufs_rx_cfg_clk",
2741 .parent_hws = (const struct clk_hw*[]){
2742 &ufs_rx_cfg_clk_src.hw,
2743 },
2744 .num_parents = 1,
2745 .flags = CLK_SET_RATE_PARENT,
2746 .ops = &clk_branch2_ops,
2747 },
2748 },
2749};
2750
2751static struct clk_branch gcc_ufs_tx_symbol_0_clk = {
2752 .halt_reg = 0x75018,
2753 .halt_check = BRANCH_HALT_SKIP,
2754 .clkr = {
2755 .enable_reg = 0x75018,
2756 .enable_mask = BIT(0),
2757 .hw.init = &(struct clk_init_data){
2758 .name = "gcc_ufs_tx_symbol_0_clk",
2759 .parent_data = &(const struct clk_parent_data){
2760 .fw_name = "ufs_tx_symbol_0_clk_src", .name = "ufs_tx_symbol_0_clk_src",
2761 },
2762 .num_parents = 1,
2763 .flags = CLK_SET_RATE_PARENT,
2764 .ops = &clk_branch2_ops,
2765 },
2766 },
2767};
2768
2769static struct clk_branch gcc_ufs_rx_symbol_0_clk = {
2770 .halt_reg = 0x7501c,
2771 .halt_check = BRANCH_HALT_SKIP,
2772 .clkr = {
2773 .enable_reg = 0x7501c,
2774 .enable_mask = BIT(0),
2775 .hw.init = &(struct clk_init_data){
2776 .name = "gcc_ufs_rx_symbol_0_clk",
2777 .parent_data = &(const struct clk_parent_data){
2778 .fw_name = "ufs_rx_symbol_0_clk_src", .name = "ufs_rx_symbol_0_clk_src",
2779 },
2780 .num_parents = 1,
2781 .flags = CLK_SET_RATE_PARENT,
2782 .ops = &clk_branch2_ops,
2783 },
2784 },
2785};
2786
2787static struct clk_branch gcc_ufs_rx_symbol_1_clk = {
2788 .halt_reg = 0x75020,
2789 .halt_check = BRANCH_HALT_SKIP,
2790 .clkr = {
2791 .enable_reg = 0x75020,
2792 .enable_mask = BIT(0),
2793 .hw.init = &(struct clk_init_data){
2794 .name = "gcc_ufs_rx_symbol_1_clk",
2795 .parent_data = &(const struct clk_parent_data){
2796 .fw_name = "ufs_rx_symbol_1_clk_src", .name = "ufs_rx_symbol_1_clk_src",
2797 },
2798 .num_parents = 1,
2799 .flags = CLK_SET_RATE_PARENT,
2800 .ops = &clk_branch2_ops,
2801 },
2802 },
2803};
2804
2805static struct clk_fixed_factor ufs_ice_core_postdiv_clk_src = {
2806 .mult = 1,
2807 .div = 2,
2808 .hw.init = &(struct clk_init_data){
2809 .name = "ufs_ice_core_postdiv_clk_src",
2810 .parent_hws = (const struct clk_hw*[]){
2811 &ufs_ice_core_clk_src.clkr.hw,
2812 },
2813 .num_parents = 1,
2814 .flags = CLK_SET_RATE_PARENT,
2815 .ops = &clk_fixed_factor_ops,
2816 },
2817};
2818
2819static struct clk_branch gcc_ufs_unipro_core_clk = {
2820 .halt_reg = 0x7600c,
2821 .clkr = {
2822 .enable_reg = 0x7600c,
2823 .enable_mask = BIT(0),
2824 .hw.init = &(struct clk_init_data){
2825 .name = "gcc_ufs_unipro_core_clk",
2826 .parent_hws = (const struct clk_hw*[]){
2827 &ufs_ice_core_postdiv_clk_src.hw,
2828 },
2829 .num_parents = 1,
2830 .flags = CLK_SET_RATE_PARENT,
2831 .ops = &clk_branch2_ops,
2832 },
2833 },
2834};
2835
2836static struct clk_branch gcc_ufs_ice_core_clk = {
2837 .halt_reg = 0x76010,
2838 .clkr = {
2839 .enable_reg = 0x76010,
2840 .enable_mask = BIT(0),
2841 .hw.init = &(struct clk_init_data){
2842 .name = "gcc_ufs_ice_core_clk",
2843 .parent_hws = (const struct clk_hw*[]){
2844 &ufs_ice_core_clk_src.clkr.hw,
2845 },
2846 .num_parents = 1,
2847 .flags = CLK_SET_RATE_PARENT,
2848 .ops = &clk_branch2_ops,
2849 },
2850 },
2851};
2852
2853static struct clk_branch gcc_ufs_sys_clk_core_clk = {
2854 .halt_check = BRANCH_HALT_DELAY,
2855 .clkr = {
2856 .enable_reg = 0x76030,
2857 .enable_mask = BIT(0),
2858 .hw.init = &(struct clk_init_data){
2859 .name = "gcc_ufs_sys_clk_core_clk",
2860 .ops = &clk_branch2_ops,
2861 },
2862 },
2863};
2864
2865static struct clk_branch gcc_ufs_tx_symbol_clk_core_clk = {
2866 .halt_check = BRANCH_HALT_DELAY,
2867 .clkr = {
2868 .enable_reg = 0x76034,
2869 .enable_mask = BIT(0),
2870 .hw.init = &(struct clk_init_data){
2871 .name = "gcc_ufs_tx_symbol_clk_core_clk",
2872 .ops = &clk_branch2_ops,
2873 },
2874 },
2875};
2876
2877static struct clk_branch gcc_aggre0_snoc_axi_clk = {
2878 .halt_reg = 0x81008,
2879 .clkr = {
2880 .enable_reg = 0x81008,
2881 .enable_mask = BIT(0),
2882 .hw.init = &(struct clk_init_data){
2883 .name = "gcc_aggre0_snoc_axi_clk",
2884 .flags = CLK_IS_CRITICAL,
2885 .ops = &clk_branch2_ops,
2886 },
2887 },
2888};
2889
2890static struct clk_branch gcc_aggre0_cnoc_ahb_clk = {
2891 .halt_reg = 0x8100c,
2892 .clkr = {
2893 .enable_reg = 0x8100c,
2894 .enable_mask = BIT(0),
2895 .hw.init = &(struct clk_init_data){
2896 .name = "gcc_aggre0_cnoc_ahb_clk",
2897 .flags = CLK_IS_CRITICAL,
2898 .ops = &clk_branch2_ops,
2899 },
2900 },
2901};
2902
2903static struct clk_branch gcc_smmu_aggre0_axi_clk = {
2904 .halt_reg = 0x81014,
2905 .clkr = {
2906 .enable_reg = 0x81014,
2907 .enable_mask = BIT(0),
2908 .hw.init = &(struct clk_init_data){
2909 .name = "gcc_smmu_aggre0_axi_clk",
2910 .flags = CLK_IS_CRITICAL,
2911 .ops = &clk_branch2_ops,
2912 },
2913 },
2914};
2915
2916static struct clk_branch gcc_smmu_aggre0_ahb_clk = {
2917 .halt_reg = 0x81018,
2918 .clkr = {
2919 .enable_reg = 0x81018,
2920 .enable_mask = BIT(0),
2921 .hw.init = &(struct clk_init_data){
2922 .name = "gcc_smmu_aggre0_ahb_clk",
2923 .flags = CLK_IS_CRITICAL,
2924 .ops = &clk_branch2_ops,
2925 },
2926 },
2927};
2928
2929static struct clk_branch gcc_aggre2_ufs_axi_clk = {
2930 .halt_reg = 0x83014,
2931 .clkr = {
2932 .enable_reg = 0x83014,
2933 .enable_mask = BIT(0),
2934 .hw.init = &(struct clk_init_data){
2935 .name = "gcc_aggre2_ufs_axi_clk",
2936 .parent_hws = (const struct clk_hw*[]){
2937 &ufs_axi_clk_src.clkr.hw,
2938 },
2939 .num_parents = 1,
2940 .flags = CLK_SET_RATE_PARENT,
2941 .ops = &clk_branch2_ops,
2942 },
2943 },
2944};
2945
2946static struct clk_branch gcc_aggre2_usb3_axi_clk = {
2947 .halt_reg = 0x83018,
2948 .clkr = {
2949 .enable_reg = 0x83018,
2950 .enable_mask = BIT(0),
2951 .hw.init = &(struct clk_init_data){
2952 .name = "gcc_aggre2_usb3_axi_clk",
2953 .parent_hws = (const struct clk_hw*[]){
2954 &usb30_master_clk_src.clkr.hw,
2955 },
2956 .num_parents = 1,
2957 .flags = CLK_SET_RATE_PARENT,
2958 .ops = &clk_branch2_ops,
2959 },
2960 },
2961};
2962
2963static struct clk_branch gcc_dcc_ahb_clk = {
2964 .halt_reg = 0x84004,
2965 .clkr = {
2966 .enable_reg = 0x84004,
2967 .enable_mask = BIT(0),
2968 .hw.init = &(struct clk_init_data){
2969 .name = "gcc_dcc_ahb_clk",
2970 .ops = &clk_branch2_ops,
2971 },
2972 },
2973};
2974
2975static struct clk_branch gcc_aggre0_noc_mpu_cfg_ahb_clk = {
2976 .halt_reg = 0x85000,
2977 .clkr = {
2978 .enable_reg = 0x85000,
2979 .enable_mask = BIT(0),
2980 .hw.init = &(struct clk_init_data){
2981 .name = "gcc_aggre0_noc_mpu_cfg_ahb_clk",
2982 .ops = &clk_branch2_ops,
2983 },
2984 },
2985};
2986
2987static struct clk_branch gcc_qspi_ahb_clk = {
2988 .halt_reg = 0x8b004,
2989 .clkr = {
2990 .enable_reg = 0x8b004,
2991 .enable_mask = BIT(0),
2992 .hw.init = &(struct clk_init_data){
2993 .name = "gcc_qspi_ahb_clk",
2994 .ops = &clk_branch2_ops,
2995 },
2996 },
2997};
2998
2999static struct clk_branch gcc_qspi_ser_clk = {
3000 .halt_reg = 0x8b008,
3001 .clkr = {
3002 .enable_reg = 0x8b008,
3003 .enable_mask = BIT(0),
3004 .hw.init = &(struct clk_init_data){
3005 .name = "gcc_qspi_ser_clk",
3006 .parent_hws = (const struct clk_hw*[]){
3007 &qspi_ser_clk_src.clkr.hw,
3008 },
3009 .num_parents = 1,
3010 .flags = CLK_SET_RATE_PARENT,
3011 .ops = &clk_branch2_ops,
3012 },
3013 },
3014};
3015
3016static struct clk_branch gcc_usb3_clkref_clk = {
3017 .halt_reg = 0x8800C,
3018 .clkr = {
3019 .enable_reg = 0x8800C,
3020 .enable_mask = BIT(0),
3021 .hw.init = &(struct clk_init_data){
3022 .name = "gcc_usb3_clkref_clk",
3023 .parent_data = &(const struct clk_parent_data){
3024 .fw_name = "cxo2",
3025 .name = "xo",
3026 },
3027 .num_parents = 1,
3028 .ops = &clk_branch2_ops,
3029 },
3030 },
3031};
3032
3033static struct clk_branch gcc_hdmi_clkref_clk = {
3034 .halt_reg = 0x88000,
3035 .clkr = {
3036 .enable_reg = 0x88000,
3037 .enable_mask = BIT(0),
3038 .hw.init = &(struct clk_init_data){
3039 .name = "gcc_hdmi_clkref_clk",
3040 .parent_data = &(const struct clk_parent_data){
3041 .fw_name = "cxo2",
3042 .name = "xo",
3043 },
3044 .num_parents = 1,
3045 .ops = &clk_branch2_ops,
3046 },
3047 },
3048};
3049
3050static struct clk_branch gcc_edp_clkref_clk = {
3051 .halt_reg = 0x88004,
3052 .clkr = {
3053 .enable_reg = 0x88004,
3054 .enable_mask = BIT(0),
3055 .hw.init = &(struct clk_init_data){
3056 .name = "gcc_edp_clkref_clk",
3057 .parent_data = &(const struct clk_parent_data){
3058 .fw_name = "cxo2",
3059 .name = "xo",
3060 },
3061 .num_parents = 1,
3062 .ops = &clk_branch2_ops,
3063 },
3064 },
3065};
3066
3067static struct clk_branch gcc_ufs_clkref_clk = {
3068 .halt_reg = 0x88008,
3069 .clkr = {
3070 .enable_reg = 0x88008,
3071 .enable_mask = BIT(0),
3072 .hw.init = &(struct clk_init_data){
3073 .name = "gcc_ufs_clkref_clk",
3074 .parent_data = &(const struct clk_parent_data){
3075 .fw_name = "cxo2",
3076 .name = "xo",
3077 },
3078 .num_parents = 1,
3079 .ops = &clk_branch2_ops,
3080 },
3081 },
3082};
3083
3084static struct clk_branch gcc_pcie_clkref_clk = {
3085 .halt_reg = 0x88010,
3086 .clkr = {
3087 .enable_reg = 0x88010,
3088 .enable_mask = BIT(0),
3089 .hw.init = &(struct clk_init_data){
3090 .name = "gcc_pcie_clkref_clk",
3091 .parent_data = &(const struct clk_parent_data){
3092 .fw_name = "cxo2",
3093 .name = "xo",
3094 },
3095 .num_parents = 1,
3096 .ops = &clk_branch2_ops,
3097 },
3098 },
3099};
3100
3101static struct clk_branch gcc_rx2_usb2_clkref_clk = {
3102 .halt_reg = 0x88014,
3103 .clkr = {
3104 .enable_reg = 0x88014,
3105 .enable_mask = BIT(0),
3106 .hw.init = &(struct clk_init_data){
3107 .name = "gcc_rx2_usb2_clkref_clk",
3108 .parent_data = &(const struct clk_parent_data){
3109 .fw_name = "cxo2",
3110 .name = "xo",
3111 },
3112 .num_parents = 1,
3113 .ops = &clk_branch2_ops,
3114 },
3115 },
3116};
3117
3118static struct clk_branch gcc_rx1_usb2_clkref_clk = {
3119 .halt_reg = 0x88018,
3120 .clkr = {
3121 .enable_reg = 0x88018,
3122 .enable_mask = BIT(0),
3123 .hw.init = &(struct clk_init_data){
3124 .name = "gcc_rx1_usb2_clkref_clk",
3125 .parent_data = &(const struct clk_parent_data){
3126 .fw_name = "cxo2",
3127 .name = "xo",
3128 },
3129 .num_parents = 1,
3130 .ops = &clk_branch2_ops,
3131 },
3132 },
3133};
3134
3135static struct clk_branch gcc_mss_cfg_ahb_clk = {
3136 .halt_reg = 0x8a000,
3137 .clkr = {
3138 .enable_reg = 0x8a000,
3139 .enable_mask = BIT(0),
3140 .hw.init = &(struct clk_init_data){
3141 .name = "gcc_mss_cfg_ahb_clk",
3142 .ops = &clk_branch2_ops,
3143 },
3144 },
3145};
3146
3147static struct clk_branch gcc_mss_mnoc_bimc_axi_clk = {
3148 .halt_reg = 0x8a004,
3149 .clkr = {
3150 .enable_reg = 0x8a004,
3151 .enable_mask = BIT(0),
3152 .hw.init = &(struct clk_init_data){
3153 .name = "gcc_mss_mnoc_bimc_axi_clk",
3154 .ops = &clk_branch2_ops,
3155 },
3156 },
3157};
3158
3159static struct clk_branch gcc_mss_snoc_axi_clk = {
3160 .halt_reg = 0x8a024,
3161 .clkr = {
3162 .enable_reg = 0x8a024,
3163 .enable_mask = BIT(0),
3164 .hw.init = &(struct clk_init_data){
3165 .name = "gcc_mss_snoc_axi_clk",
3166 .ops = &clk_branch2_ops,
3167 },
3168 },
3169};
3170
3171static struct clk_branch gcc_mss_q6_bimc_axi_clk = {
3172 .halt_reg = 0x8a028,
3173 .clkr = {
3174 .enable_reg = 0x8a028,
3175 .enable_mask = BIT(0),
3176 .hw.init = &(struct clk_init_data){
3177 .name = "gcc_mss_q6_bimc_axi_clk",
3178 .ops = &clk_branch2_ops,
3179 },
3180 },
3181};
3182
3183static struct clk_hw *gcc_msm8996_hws[] = {
3184 &xo.hw,
3185 &gpll0_early_div.hw,
3186 &ufs_tx_cfg_clk_src.hw,
3187 &ufs_rx_cfg_clk_src.hw,
3188 &ufs_ice_core_postdiv_clk_src.hw,
3189};
3190
3191static struct gdsc aggre0_noc_gdsc = {
3192 .gdscr = 0x81004,
3193 .gds_hw_ctrl = 0x81028,
3194 .pd = {
3195 .name = "aggre0_noc",
3196 },
3197 .pwrsts = PWRSTS_OFF_ON,
3198 .flags = VOTABLE | ALWAYS_ON,
3199};
3200
3201static struct gdsc hlos1_vote_aggre0_noc_gdsc = {
3202 .gdscr = 0x7d024,
3203 .pd = {
3204 .name = "hlos1_vote_aggre0_noc",
3205 },
3206 .pwrsts = PWRSTS_OFF_ON,
3207 .flags = VOTABLE,
3208};
3209
3210static struct gdsc hlos1_vote_lpass_adsp_gdsc = {
3211 .gdscr = 0x7d034,
3212 .pd = {
3213 .name = "hlos1_vote_lpass_adsp",
3214 },
3215 .pwrsts = PWRSTS_OFF_ON,
3216 .flags = VOTABLE,
3217};
3218
3219static struct gdsc hlos1_vote_lpass_core_gdsc = {
3220 .gdscr = 0x7d038,
3221 .pd = {
3222 .name = "hlos1_vote_lpass_core",
3223 },
3224 .pwrsts = PWRSTS_OFF_ON,
3225 .flags = VOTABLE,
3226};
3227
3228static struct gdsc usb30_gdsc = {
3229 .gdscr = 0xf004,
3230 .pd = {
3231 .name = "usb30",
3232 },
3233 /* TODO: Change to OFF_ON when USB drivers get proper suspend support */
3234 .pwrsts = PWRSTS_RET_ON,
3235};
3236
3237static struct gdsc pcie0_gdsc = {
3238 .gdscr = 0x6b004,
3239 .pd = {
3240 .name = "pcie0",
3241 },
3242 .pwrsts = PWRSTS_OFF_ON,
3243};
3244
3245static struct gdsc pcie1_gdsc = {
3246 .gdscr = 0x6d004,
3247 .pd = {
3248 .name = "pcie1",
3249 },
3250 .pwrsts = PWRSTS_OFF_ON,
3251};
3252
3253static struct gdsc pcie2_gdsc = {
3254 .gdscr = 0x6e004,
3255 .pd = {
3256 .name = "pcie2",
3257 },
3258 .pwrsts = PWRSTS_OFF_ON,
3259};
3260
3261static struct gdsc ufs_gdsc = {
3262 .gdscr = 0x75004,
3263 .pd = {
3264 .name = "ufs",
3265 },
3266 .pwrsts = PWRSTS_OFF_ON,
3267};
3268
3269static struct clk_regmap *gcc_msm8996_clocks[] = {
3270 [GPLL0_EARLY] = &gpll0_early.clkr,
3271 [GPLL0] = &gpll0.clkr,
3272 [GPLL4_EARLY] = &gpll4_early.clkr,
3273 [GPLL4] = &gpll4.clkr,
3274 [USB30_MASTER_CLK_SRC] = &usb30_master_clk_src.clkr,
3275 [USB30_MOCK_UTMI_CLK_SRC] = &usb30_mock_utmi_clk_src.clkr,
3276 [USB3_PHY_AUX_CLK_SRC] = &usb3_phy_aux_clk_src.clkr,
3277 [USB20_MASTER_CLK_SRC] = &usb20_master_clk_src.clkr,
3278 [USB20_MOCK_UTMI_CLK_SRC] = &usb20_mock_utmi_clk_src.clkr,
3279 [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
3280 [SDCC1_ICE_CORE_CLK_SRC] = &sdcc1_ice_core_clk_src.clkr,
3281 [SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
3282 [SDCC3_APPS_CLK_SRC] = &sdcc3_apps_clk_src.clkr,
3283 [SDCC4_APPS_CLK_SRC] = &sdcc4_apps_clk_src.clkr,
3284 [BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
3285 [BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
3286 [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
3287 [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
3288 [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
3289 [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
3290 [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
3291 [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
3292 [BLSP1_UART3_APPS_CLK_SRC] = &blsp1_uart3_apps_clk_src.clkr,
3293 [BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
3294 [BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
3295 [BLSP1_UART4_APPS_CLK_SRC] = &blsp1_uart4_apps_clk_src.clkr,
3296 [BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr,
3297 [BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr,
3298 [BLSP1_UART5_APPS_CLK_SRC] = &blsp1_uart5_apps_clk_src.clkr,
3299 [BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr,
3300 [BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr,
3301 [BLSP1_UART6_APPS_CLK_SRC] = &blsp1_uart6_apps_clk_src.clkr,
3302 [BLSP2_QUP1_SPI_APPS_CLK_SRC] = &blsp2_qup1_spi_apps_clk_src.clkr,
3303 [BLSP2_QUP1_I2C_APPS_CLK_SRC] = &blsp2_qup1_i2c_apps_clk_src.clkr,
3304 [BLSP2_UART1_APPS_CLK_SRC] = &blsp2_uart1_apps_clk_src.clkr,
3305 [BLSP2_QUP2_SPI_APPS_CLK_SRC] = &blsp2_qup2_spi_apps_clk_src.clkr,
3306 [BLSP2_QUP2_I2C_APPS_CLK_SRC] = &blsp2_qup2_i2c_apps_clk_src.clkr,
3307 [BLSP2_UART2_APPS_CLK_SRC] = &blsp2_uart2_apps_clk_src.clkr,
3308 [BLSP2_QUP3_SPI_APPS_CLK_SRC] = &blsp2_qup3_spi_apps_clk_src.clkr,
3309 [BLSP2_QUP3_I2C_APPS_CLK_SRC] = &blsp2_qup3_i2c_apps_clk_src.clkr,
3310 [BLSP2_UART3_APPS_CLK_SRC] = &blsp2_uart3_apps_clk_src.clkr,
3311 [BLSP2_QUP4_SPI_APPS_CLK_SRC] = &blsp2_qup4_spi_apps_clk_src.clkr,
3312 [BLSP2_QUP4_I2C_APPS_CLK_SRC] = &blsp2_qup4_i2c_apps_clk_src.clkr,
3313 [BLSP2_UART4_APPS_CLK_SRC] = &blsp2_uart4_apps_clk_src.clkr,
3314 [BLSP2_QUP5_SPI_APPS_CLK_SRC] = &blsp2_qup5_spi_apps_clk_src.clkr,
3315 [BLSP2_QUP5_I2C_APPS_CLK_SRC] = &blsp2_qup5_i2c_apps_clk_src.clkr,
3316 [BLSP2_UART5_APPS_CLK_SRC] = &blsp2_uart5_apps_clk_src.clkr,
3317 [BLSP2_QUP6_SPI_APPS_CLK_SRC] = &blsp2_qup6_spi_apps_clk_src.clkr,
3318 [BLSP2_QUP6_I2C_APPS_CLK_SRC] = &blsp2_qup6_i2c_apps_clk_src.clkr,
3319 [BLSP2_UART6_APPS_CLK_SRC] = &blsp2_uart6_apps_clk_src.clkr,
3320 [PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
3321 [TSIF_REF_CLK_SRC] = &tsif_ref_clk_src.clkr,
3322 [GCC_SLEEP_CLK_SRC] = &gcc_sleep_clk_src.clkr,
3323 [HMSS_RBCPR_CLK_SRC] = &hmss_rbcpr_clk_src.clkr,
3324 [HMSS_GPLL0_CLK_SRC] = &hmss_gpll0_clk_src.clkr,
3325 [GP1_CLK_SRC] = &gp1_clk_src.clkr,
3326 [GP2_CLK_SRC] = &gp2_clk_src.clkr,
3327 [GP3_CLK_SRC] = &gp3_clk_src.clkr,
3328 [PCIE_AUX_CLK_SRC] = &pcie_aux_clk_src.clkr,
3329 [UFS_AXI_CLK_SRC] = &ufs_axi_clk_src.clkr,
3330 [UFS_ICE_CORE_CLK_SRC] = &ufs_ice_core_clk_src.clkr,
3331 [QSPI_SER_CLK_SRC] = &qspi_ser_clk_src.clkr,
3332 [GCC_SYS_NOC_USB3_AXI_CLK] = &gcc_sys_noc_usb3_axi_clk.clkr,
3333 [GCC_SYS_NOC_UFS_AXI_CLK] = &gcc_sys_noc_ufs_axi_clk.clkr,
3334 [GCC_PERIPH_NOC_USB20_AHB_CLK] = &gcc_periph_noc_usb20_ahb_clk.clkr,
3335 [GCC_MMSS_NOC_CFG_AHB_CLK] = &gcc_mmss_noc_cfg_ahb_clk.clkr,
3336 [GCC_MMSS_BIMC_GFX_CLK] = &gcc_mmss_bimc_gfx_clk.clkr,
3337 [GCC_USB30_MASTER_CLK] = &gcc_usb30_master_clk.clkr,
3338 [GCC_USB30_SLEEP_CLK] = &gcc_usb30_sleep_clk.clkr,
3339 [GCC_USB30_MOCK_UTMI_CLK] = &gcc_usb30_mock_utmi_clk.clkr,
3340 [GCC_USB3_PHY_AUX_CLK] = &gcc_usb3_phy_aux_clk.clkr,
3341 [GCC_USB3_PHY_PIPE_CLK] = &gcc_usb3_phy_pipe_clk.clkr,
3342 [GCC_USB20_MASTER_CLK] = &gcc_usb20_master_clk.clkr,
3343 [GCC_USB20_SLEEP_CLK] = &gcc_usb20_sleep_clk.clkr,
3344 [GCC_USB20_MOCK_UTMI_CLK] = &gcc_usb20_mock_utmi_clk.clkr,
3345 [GCC_USB_PHY_CFG_AHB2PHY_CLK] = &gcc_usb_phy_cfg_ahb2phy_clk.clkr,
3346 [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
3347 [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
3348 [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
3349 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
3350 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
3351 [GCC_SDCC3_APPS_CLK] = &gcc_sdcc3_apps_clk.clkr,
3352 [GCC_SDCC3_AHB_CLK] = &gcc_sdcc3_ahb_clk.clkr,
3353 [GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr,
3354 [GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr,
3355 [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
3356 [GCC_BLSP1_SLEEP_CLK] = &gcc_blsp1_sleep_clk.clkr,
3357 [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
3358 [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
3359 [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
3360 [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
3361 [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
3362 [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
3363 [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
3364 [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
3365 [GCC_BLSP1_UART3_APPS_CLK] = &gcc_blsp1_uart3_apps_clk.clkr,
3366 [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
3367 [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
3368 [GCC_BLSP1_UART4_APPS_CLK] = &gcc_blsp1_uart4_apps_clk.clkr,
3369 [GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr,
3370 [GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr,
3371 [GCC_BLSP1_UART5_APPS_CLK] = &gcc_blsp1_uart5_apps_clk.clkr,
3372 [GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr,
3373 [GCC_BLSP1_QUP6_I2C_APPS_CLK] = &gcc_blsp1_qup6_i2c_apps_clk.clkr,
3374 [GCC_BLSP1_UART6_APPS_CLK] = &gcc_blsp1_uart6_apps_clk.clkr,
3375 [GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr,
3376 [GCC_BLSP2_SLEEP_CLK] = &gcc_blsp2_sleep_clk.clkr,
3377 [GCC_BLSP2_QUP1_SPI_APPS_CLK] = &gcc_blsp2_qup1_spi_apps_clk.clkr,
3378 [GCC_BLSP2_QUP1_I2C_APPS_CLK] = &gcc_blsp2_qup1_i2c_apps_clk.clkr,
3379 [GCC_BLSP2_UART1_APPS_CLK] = &gcc_blsp2_uart1_apps_clk.clkr,
3380 [GCC_BLSP2_QUP2_SPI_APPS_CLK] = &gcc_blsp2_qup2_spi_apps_clk.clkr,
3381 [GCC_BLSP2_QUP2_I2C_APPS_CLK] = &gcc_blsp2_qup2_i2c_apps_clk.clkr,
3382 [GCC_BLSP2_UART2_APPS_CLK] = &gcc_blsp2_uart2_apps_clk.clkr,
3383 [GCC_BLSP2_QUP3_SPI_APPS_CLK] = &gcc_blsp2_qup3_spi_apps_clk.clkr,
3384 [GCC_BLSP2_QUP3_I2C_APPS_CLK] = &gcc_blsp2_qup3_i2c_apps_clk.clkr,
3385 [GCC_BLSP2_UART3_APPS_CLK] = &gcc_blsp2_uart3_apps_clk.clkr,
3386 [GCC_BLSP2_QUP4_SPI_APPS_CLK] = &gcc_blsp2_qup4_spi_apps_clk.clkr,
3387 [GCC_BLSP2_QUP4_I2C_APPS_CLK] = &gcc_blsp2_qup4_i2c_apps_clk.clkr,
3388 [GCC_BLSP2_UART4_APPS_CLK] = &gcc_blsp2_uart4_apps_clk.clkr,
3389 [GCC_BLSP2_QUP5_SPI_APPS_CLK] = &gcc_blsp2_qup5_spi_apps_clk.clkr,
3390 [GCC_BLSP2_QUP5_I2C_APPS_CLK] = &gcc_blsp2_qup5_i2c_apps_clk.clkr,
3391 [GCC_BLSP2_UART5_APPS_CLK] = &gcc_blsp2_uart5_apps_clk.clkr,
3392 [GCC_BLSP2_QUP6_SPI_APPS_CLK] = &gcc_blsp2_qup6_spi_apps_clk.clkr,
3393 [GCC_BLSP2_QUP6_I2C_APPS_CLK] = &gcc_blsp2_qup6_i2c_apps_clk.clkr,
3394 [GCC_BLSP2_UART6_APPS_CLK] = &gcc_blsp2_uart6_apps_clk.clkr,
3395 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
3396 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
3397 [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
3398 [GCC_TSIF_AHB_CLK] = &gcc_tsif_ahb_clk.clkr,
3399 [GCC_TSIF_REF_CLK] = &gcc_tsif_ref_clk.clkr,
3400 [GCC_TSIF_INACTIVITY_TIMERS_CLK] = &gcc_tsif_inactivity_timers_clk.clkr,
3401 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
3402 [GCC_BIMC_GFX_CLK] = &gcc_bimc_gfx_clk.clkr,
3403 [GCC_HMSS_RBCPR_CLK] = &gcc_hmss_rbcpr_clk.clkr,
3404 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
3405 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
3406 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
3407 [GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr,
3408 [GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr,
3409 [GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr,
3410 [GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,
3411 [GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,
3412 [GCC_PCIE_1_SLV_AXI_CLK] = &gcc_pcie_1_slv_axi_clk.clkr,
3413 [GCC_PCIE_1_MSTR_AXI_CLK] = &gcc_pcie_1_mstr_axi_clk.clkr,
3414 [GCC_PCIE_1_CFG_AHB_CLK] = &gcc_pcie_1_cfg_ahb_clk.clkr,
3415 [GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr,
3416 [GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr,
3417 [GCC_PCIE_2_SLV_AXI_CLK] = &gcc_pcie_2_slv_axi_clk.clkr,
3418 [GCC_PCIE_2_MSTR_AXI_CLK] = &gcc_pcie_2_mstr_axi_clk.clkr,
3419 [GCC_PCIE_2_CFG_AHB_CLK] = &gcc_pcie_2_cfg_ahb_clk.clkr,
3420 [GCC_PCIE_2_AUX_CLK] = &gcc_pcie_2_aux_clk.clkr,
3421 [GCC_PCIE_2_PIPE_CLK] = &gcc_pcie_2_pipe_clk.clkr,
3422 [GCC_PCIE_PHY_CFG_AHB_CLK] = &gcc_pcie_phy_cfg_ahb_clk.clkr,
3423 [GCC_PCIE_PHY_AUX_CLK] = &gcc_pcie_phy_aux_clk.clkr,
3424 [GCC_UFS_AXI_CLK] = &gcc_ufs_axi_clk.clkr,
3425 [GCC_UFS_AHB_CLK] = &gcc_ufs_ahb_clk.clkr,
3426 [GCC_UFS_TX_CFG_CLK] = &gcc_ufs_tx_cfg_clk.clkr,
3427 [GCC_UFS_RX_CFG_CLK] = &gcc_ufs_rx_cfg_clk.clkr,
3428 [GCC_HLOS1_VOTE_LPASS_CORE_SMMU_CLK] = &gcc_hlos1_vote_lpass_core_smmu_clk.clkr,
3429 [GCC_HLOS1_VOTE_LPASS_ADSP_SMMU_CLK] = &gcc_hlos1_vote_lpass_adsp_smmu_clk.clkr,
3430 [GCC_UFS_TX_SYMBOL_0_CLK] = &gcc_ufs_tx_symbol_0_clk.clkr,
3431 [GCC_UFS_RX_SYMBOL_0_CLK] = &gcc_ufs_rx_symbol_0_clk.clkr,
3432 [GCC_UFS_RX_SYMBOL_1_CLK] = &gcc_ufs_rx_symbol_1_clk.clkr,
3433 [GCC_UFS_UNIPRO_CORE_CLK] = &gcc_ufs_unipro_core_clk.clkr,
3434 [GCC_UFS_ICE_CORE_CLK] = &gcc_ufs_ice_core_clk.clkr,
3435 [GCC_UFS_SYS_CLK_CORE_CLK] = &gcc_ufs_sys_clk_core_clk.clkr,
3436 [GCC_UFS_TX_SYMBOL_CLK_CORE_CLK] = &gcc_ufs_tx_symbol_clk_core_clk.clkr,
3437 [GCC_AGGRE0_SNOC_AXI_CLK] = &gcc_aggre0_snoc_axi_clk.clkr,
3438 [GCC_AGGRE0_CNOC_AHB_CLK] = &gcc_aggre0_cnoc_ahb_clk.clkr,
3439 [GCC_SMMU_AGGRE0_AXI_CLK] = &gcc_smmu_aggre0_axi_clk.clkr,
3440 [GCC_SMMU_AGGRE0_AHB_CLK] = &gcc_smmu_aggre0_ahb_clk.clkr,
3441 [GCC_AGGRE2_UFS_AXI_CLK] = &gcc_aggre2_ufs_axi_clk.clkr,
3442 [GCC_AGGRE2_USB3_AXI_CLK] = &gcc_aggre2_usb3_axi_clk.clkr,
3443 [GCC_QSPI_AHB_CLK] = &gcc_qspi_ahb_clk.clkr,
3444 [GCC_QSPI_SER_CLK] = &gcc_qspi_ser_clk.clkr,
3445 [GCC_USB3_CLKREF_CLK] = &gcc_usb3_clkref_clk.clkr,
3446 [GCC_HDMI_CLKREF_CLK] = &gcc_hdmi_clkref_clk.clkr,
3447 [GCC_UFS_CLKREF_CLK] = &gcc_ufs_clkref_clk.clkr,
3448 [GCC_PCIE_CLKREF_CLK] = &gcc_pcie_clkref_clk.clkr,
3449 [GCC_RX2_USB2_CLKREF_CLK] = &gcc_rx2_usb2_clkref_clk.clkr,
3450 [GCC_RX1_USB2_CLKREF_CLK] = &gcc_rx1_usb2_clkref_clk.clkr,
3451 [GCC_EDP_CLKREF_CLK] = &gcc_edp_clkref_clk.clkr,
3452 [GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,
3453 [GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr,
3454 [GCC_MSS_SNOC_AXI_CLK] = &gcc_mss_snoc_axi_clk.clkr,
3455 [GCC_MSS_MNOC_BIMC_AXI_CLK] = &gcc_mss_mnoc_bimc_axi_clk.clkr,
3456 [GCC_DCC_AHB_CLK] = &gcc_dcc_ahb_clk.clkr,
3457 [GCC_AGGRE0_NOC_MPU_CFG_AHB_CLK] = &gcc_aggre0_noc_mpu_cfg_ahb_clk.clkr,
3458 [GCC_MMSS_GPLL0_DIV_CLK] = &gcc_mmss_gpll0_div_clk.clkr,
3459 [GCC_MSS_GPLL0_DIV_CLK] = &gcc_mss_gpll0_div_clk.clkr,
3460};
3461
3462static struct gdsc *gcc_msm8996_gdscs[] = {
3463 [AGGRE0_NOC_GDSC] = &aggre0_noc_gdsc,
3464 [HLOS1_VOTE_AGGRE0_NOC_GDSC] = &hlos1_vote_aggre0_noc_gdsc,
3465 [HLOS1_VOTE_LPASS_ADSP_GDSC] = &hlos1_vote_lpass_adsp_gdsc,
3466 [HLOS1_VOTE_LPASS_CORE_GDSC] = &hlos1_vote_lpass_core_gdsc,
3467 [USB30_GDSC] = &usb30_gdsc,
3468 [PCIE0_GDSC] = &pcie0_gdsc,
3469 [PCIE1_GDSC] = &pcie1_gdsc,
3470 [PCIE2_GDSC] = &pcie2_gdsc,
3471 [UFS_GDSC] = &ufs_gdsc,
3472};
3473
3474static const struct qcom_reset_map gcc_msm8996_resets[] = {
3475 [GCC_SYSTEM_NOC_BCR] = { 0x4000 },
3476 [GCC_CONFIG_NOC_BCR] = { 0x5000 },
3477 [GCC_PERIPH_NOC_BCR] = { 0x6000 },
3478 [GCC_IMEM_BCR] = { 0x8000 },
3479 [GCC_MMSS_BCR] = { 0x9000 },
3480 [GCC_PIMEM_BCR] = { 0x0a000 },
3481 [GCC_QDSS_BCR] = { 0x0c000 },
3482 [GCC_USB_30_BCR] = { 0x0f000 },
3483 [GCC_USB_20_BCR] = { 0x12000 },
3484 [GCC_QUSB2PHY_PRIM_BCR] = { 0x12038 },
3485 [GCC_QUSB2PHY_SEC_BCR] = { 0x1203c },
3486 [GCC_USB3_PHY_BCR] = { 0x50020 },
3487 [GCC_USB3PHY_PHY_BCR] = { 0x50024 },
3488 [GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x6a000 },
3489 [GCC_SDCC1_BCR] = { 0x13000 },
3490 [GCC_SDCC2_BCR] = { 0x14000 },
3491 [GCC_SDCC3_BCR] = { 0x15000 },
3492 [GCC_SDCC4_BCR] = { 0x16000 },
3493 [GCC_BLSP1_BCR] = { 0x17000 },
3494 [GCC_BLSP1_QUP1_BCR] = { 0x19000 },
3495 [GCC_BLSP1_UART1_BCR] = { 0x1a000 },
3496 [GCC_BLSP1_QUP2_BCR] = { 0x1b000 },
3497 [GCC_BLSP1_UART2_BCR] = { 0x1c000 },
3498 [GCC_BLSP1_QUP3_BCR] = { 0x1d000 },
3499 [GCC_BLSP1_UART3_BCR] = { 0x1e000 },
3500 [GCC_BLSP1_QUP4_BCR] = { 0x1f000 },
3501 [GCC_BLSP1_UART4_BCR] = { 0x20000 },
3502 [GCC_BLSP1_QUP5_BCR] = { 0x21000 },
3503 [GCC_BLSP1_UART5_BCR] = { 0x22000 },
3504 [GCC_BLSP1_QUP6_BCR] = { 0x23000 },
3505 [GCC_BLSP1_UART6_BCR] = { 0x24000 },
3506 [GCC_BLSP2_BCR] = { 0x25000 },
3507 [GCC_BLSP2_QUP1_BCR] = { 0x26000 },
3508 [GCC_BLSP2_UART1_BCR] = { 0x27000 },
3509 [GCC_BLSP2_QUP2_BCR] = { 0x28000 },
3510 [GCC_BLSP2_UART2_BCR] = { 0x29000 },
3511 [GCC_BLSP2_QUP3_BCR] = { 0x2a000 },
3512 [GCC_BLSP2_UART3_BCR] = { 0x2b000 },
3513 [GCC_BLSP2_QUP4_BCR] = { 0x2c000 },
3514 [GCC_BLSP2_UART4_BCR] = { 0x2d000 },
3515 [GCC_BLSP2_QUP5_BCR] = { 0x2e000 },
3516 [GCC_BLSP2_UART5_BCR] = { 0x2f000 },
3517 [GCC_BLSP2_QUP6_BCR] = { 0x30000 },
3518 [GCC_BLSP2_UART6_BCR] = { 0x31000 },
3519 [GCC_PDM_BCR] = { 0x33000 },
3520 [GCC_PRNG_BCR] = { 0x34000 },
3521 [GCC_TSIF_BCR] = { 0x36000 },
3522 [GCC_TCSR_BCR] = { 0x37000 },
3523 [GCC_BOOT_ROM_BCR] = { 0x38000 },
3524 [GCC_MSG_RAM_BCR] = { 0x39000 },
3525 [GCC_TLMM_BCR] = { 0x3a000 },
3526 [GCC_MPM_BCR] = { 0x3b000 },
3527 [GCC_SEC_CTRL_BCR] = { 0x3d000 },
3528 [GCC_SPMI_BCR] = { 0x3f000 },
3529 [GCC_SPDM_BCR] = { 0x40000 },
3530 [GCC_CE1_BCR] = { 0x41000 },
3531 [GCC_BIMC_BCR] = { 0x44000 },
3532 [GCC_SNOC_BUS_TIMEOUT0_BCR] = { 0x49000 },
3533 [GCC_SNOC_BUS_TIMEOUT2_BCR] = { 0x49008 },
3534 [GCC_SNOC_BUS_TIMEOUT1_BCR] = { 0x49010 },
3535 [GCC_SNOC_BUS_TIMEOUT3_BCR] = { 0x49018 },
3536 [GCC_SNOC_BUS_TIMEOUT_EXTREF_BCR] = { 0x49020 },
3537 [GCC_PNOC_BUS_TIMEOUT0_BCR] = { 0x4a000 },
3538 [GCC_PNOC_BUS_TIMEOUT1_BCR] = { 0x4a008 },
3539 [GCC_PNOC_BUS_TIMEOUT2_BCR] = { 0x4a010 },
3540 [GCC_PNOC_BUS_TIMEOUT3_BCR] = { 0x4a018 },
3541 [GCC_PNOC_BUS_TIMEOUT4_BCR] = { 0x4a020 },
3542 [GCC_CNOC_BUS_TIMEOUT0_BCR] = { 0x4b000 },
3543 [GCC_CNOC_BUS_TIMEOUT1_BCR] = { 0x4b008 },
3544 [GCC_CNOC_BUS_TIMEOUT2_BCR] = { 0x4b010 },
3545 [GCC_CNOC_BUS_TIMEOUT3_BCR] = { 0x4b018 },
3546 [GCC_CNOC_BUS_TIMEOUT4_BCR] = { 0x4b020 },
3547 [GCC_CNOC_BUS_TIMEOUT5_BCR] = { 0x4b028 },
3548 [GCC_CNOC_BUS_TIMEOUT6_BCR] = { 0x4b030 },
3549 [GCC_CNOC_BUS_TIMEOUT7_BCR] = { 0x4b038 },
3550 [GCC_CNOC_BUS_TIMEOUT8_BCR] = { 0x80000 },
3551 [GCC_CNOC_BUS_TIMEOUT9_BCR] = { 0x80008 },
3552 [GCC_CNOC_BUS_TIMEOUT_EXTREF_BCR] = { 0x80010 },
3553 [GCC_APB2JTAG_BCR] = { 0x4c000 },
3554 [GCC_RBCPR_CX_BCR] = { 0x4e000 },
3555 [GCC_RBCPR_MX_BCR] = { 0x4f000 },
3556 [GCC_PCIE_0_BCR] = { 0x6b000 },
3557 [GCC_PCIE_0_PHY_BCR] = { 0x6c01c },
3558 [GCC_PCIE_1_BCR] = { 0x6d000 },
3559 [GCC_PCIE_1_PHY_BCR] = { 0x6d038 },
3560 [GCC_PCIE_2_BCR] = { 0x6e000 },
3561 [GCC_PCIE_2_PHY_BCR] = { 0x6e038 },
3562 [GCC_PCIE_PHY_BCR] = { 0x6f000 },
3563 [GCC_PCIE_PHY_COM_BCR] = { 0x6f014 },
3564 [GCC_PCIE_PHY_COM_NOCSR_BCR] = { 0x6f00c },
3565 [GCC_DCD_BCR] = { 0x70000 },
3566 [GCC_OBT_ODT_BCR] = { 0x73000 },
3567 [GCC_UFS_BCR] = { 0x75000 },
3568 [GCC_SSC_BCR] = { 0x63000 },
3569 [GCC_VS_BCR] = { 0x7a000 },
3570 [GCC_AGGRE0_NOC_BCR] = { 0x81000 },
3571 [GCC_AGGRE1_NOC_BCR] = { 0x82000 },
3572 [GCC_AGGRE2_NOC_BCR] = { 0x83000 },
3573 [GCC_DCC_BCR] = { 0x84000 },
3574 [GCC_IPA_BCR] = { 0x89000 },
3575 [GCC_QSPI_BCR] = { 0x8b000 },
3576 [GCC_SKL_BCR] = { 0x8c000 },
3577 [GCC_MSMPU_BCR] = { 0x8d000 },
3578 [GCC_MSS_Q6_BCR] = { 0x8e000 },
3579 [GCC_QREFS_VBG_CAL_BCR] = { 0x88020 },
3580 [GCC_MSS_RESTART] = { 0x8f008 },
3581};
3582
3583static const struct regmap_config gcc_msm8996_regmap_config = {
3584 .reg_bits = 32,
3585 .reg_stride = 4,
3586 .val_bits = 32,
3587 .max_register = 0x8f010,
3588 .fast_io = true,
3589};
3590
3591static const struct qcom_cc_desc gcc_msm8996_desc = {
3592 .config = &gcc_msm8996_regmap_config,
3593 .clks = gcc_msm8996_clocks,
3594 .num_clks = ARRAY_SIZE(gcc_msm8996_clocks),
3595 .resets = gcc_msm8996_resets,
3596 .num_resets = ARRAY_SIZE(gcc_msm8996_resets),
3597 .gdscs = gcc_msm8996_gdscs,
3598 .num_gdscs = ARRAY_SIZE(gcc_msm8996_gdscs),
3599 .clk_hws = gcc_msm8996_hws,
3600 .num_clk_hws = ARRAY_SIZE(gcc_msm8996_hws),
3601};
3602
3603static const struct of_device_id gcc_msm8996_match_table[] = {
3604 { .compatible = "qcom,gcc-msm8996" },
3605 { }
3606};
3607MODULE_DEVICE_TABLE(of, gcc_msm8996_match_table);
3608
3609static int gcc_msm8996_probe(struct platform_device *pdev)
3610{
3611 struct regmap *regmap;
3612
3613 regmap = qcom_cc_map(pdev, desc: &gcc_msm8996_desc);
3614 if (IS_ERR(ptr: regmap))
3615 return PTR_ERR(ptr: regmap);
3616
3617 /*
3618 * Set the HMSS_AHB_CLK_SLEEP_ENA bit to allow the hmss_ahb_clk to be
3619 * turned off by hardware during certain apps low power modes.
3620 */
3621 regmap_update_bits(map: regmap, reg: 0x52008, BIT(21), BIT(21));
3622
3623 return qcom_cc_really_probe(pdev, desc: &gcc_msm8996_desc, regmap);
3624}
3625
3626static struct platform_driver gcc_msm8996_driver = {
3627 .probe = gcc_msm8996_probe,
3628 .driver = {
3629 .name = "gcc-msm8996",
3630 .of_match_table = gcc_msm8996_match_table,
3631 },
3632};
3633
3634static int __init gcc_msm8996_init(void)
3635{
3636 return platform_driver_register(&gcc_msm8996_driver);
3637}
3638core_initcall(gcc_msm8996_init);
3639
3640static void __exit gcc_msm8996_exit(void)
3641{
3642 platform_driver_unregister(&gcc_msm8996_driver);
3643}
3644module_exit(gcc_msm8996_exit);
3645
3646MODULE_DESCRIPTION("QCOM GCC MSM8996 Driver");
3647MODULE_LICENSE("GPL v2");
3648MODULE_ALIAS("platform:gcc-msm8996");
3649

source code of linux/drivers/clk/qcom/gcc-msm8996.c