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