blob: 7b017c4d806cbf7ce7c38040a65e991978ee5f3d [file] [log] [blame]
Taniya Das3fe6c032021-02-11 15:58:29 +05301/* SPDX-License-Identifier: GPL-2.0-only */
2
3#include <assert.h>
4#include <commonlib/helpers.h>
Taniya Das3fe6c032021-02-11 15:58:29 +05305#include <device/mmio.h>
6#include <soc/clock.h>
Taniya Das3fe6c032021-02-11 15:58:29 +05307#include <types.h>
8
9static struct clock_freq_config qspi_core_cfg[] = {
10 {
11 .hz = SRC_XO_HZ, /* 19.2KHz */
12 .src = SRC_XO_19_2MHZ,
13 .div = QCOM_CLOCK_DIV(1),
14 },
15 {
16 .hz = 100 * MHz,
17 .src = SRC_GPLL0_MAIN_600MHZ,
18 .div = QCOM_CLOCK_DIV(6),
19 },
20 {
21 .hz = 150 * MHz,
22 .src = SRC_GPLL0_MAIN_600MHZ,
23 .div = QCOM_CLOCK_DIV(4),
24 },
25 {
26 .hz = 200 * MHz,
27 .src = SRC_GPLL0_MAIN_600MHZ,
28 .div = QCOM_CLOCK_DIV(3),
29 },
30 {
Shelley Chen363202b2022-05-11 18:29:19 -070031 .hz = 240 * MHz,
32 .src = SRC_GPLL0_MAIN_600MHZ,
33 .div = QCOM_CLOCK_DIV(2.5),
34 },
35 {
36 .hz = 300 * MHz,
37 .src = SRC_GPLL0_MAIN_600MHZ,
38 .div = QCOM_CLOCK_DIV(2),
39 },
40 {
Taniya Das3fe6c032021-02-11 15:58:29 +053041 .hz = 400 * MHz,
42 .src = SRC_GPLL0_MAIN_600MHZ,
43 .div = QCOM_CLOCK_DIV(1.5),
44 },
45};
46
47static struct clock_freq_config qupv3_wrap_cfg[] = {
48 {
49 .hz = SRC_XO_HZ, /* 19.2KHz */
50 .src = SRC_XO_19_2MHZ,
51 .div = QCOM_CLOCK_DIV(1),
52 },
53 {
54 .hz = 32 * MHz,
55 .src = SRC_GPLL0_EVEN_300MHZ,
56 .div = QCOM_CLOCK_DIV(1),
57 .m = 8,
58 .n = 75,
59 .d_2 = 75,
60 },
61 {
62 .hz = 48 * MHz,
63 .src = SRC_GPLL0_EVEN_300MHZ,
64 .div = QCOM_CLOCK_DIV(1),
65 .m = 4,
66 .n = 25,
67 .d_2 = 25,
68 },
69 {
70 .hz = 64 * MHz,
71 .src = SRC_GPLL0_EVEN_300MHZ,
72 .div = QCOM_CLOCK_DIV(1),
73 .m = 16,
74 .n = 75,
75 .d_2 = 75,
76 },
77 {
78 .hz = 96 * MHz,
79 .src = SRC_GPLL0_EVEN_300MHZ,
80 .div = QCOM_CLOCK_DIV(1),
81 .m = 8,
82 .n = 25,
83 .d_2 = 25,
84 },
85 {
86 .hz = 100 * MHz,
87 .src = SRC_GPLL0_MAIN_600MHZ,
88 .div = QCOM_CLOCK_DIV(6),
89 },
90 {
91 .hz = SRC_XO_HZ, /* 19.2KHz */
92 .src = SRC_XO_19_2MHZ,
93 .div = QCOM_CLOCK_DIV(1),
94 },
95 {
96 .hz = SRC_XO_HZ, /* 19.2KHz */
97 .src = SRC_XO_19_2MHZ,
98 .div = QCOM_CLOCK_DIV(1),
99 },
100};
101
102static struct clock_freq_config sdcc1_core_cfg[] = {
103 {
104 .hz = 100 * MHz,
105 .src = SRC_GPLL0_EVEN_300MHZ,
106 .div = QCOM_CLOCK_DIV(3),
107 },
108 {
109 .hz = 192 * MHz,
110 .src = SRC_GPLL10_MAIN_384MHZ,
111 .div = QCOM_CLOCK_DIV(2),
112 },
113 {
114 .hz = 384 * MHz,
115 .src = SRC_GPLL10_MAIN_384MHZ,
116 .div = QCOM_CLOCK_DIV(1),
117 },
118};
119
120static struct clock_freq_config sdcc2_core_cfg[] = {
121 {
122 .hz = 50 * MHz,
123 .src = SRC_GPLL0_EVEN_300MHZ,
124 .div = QCOM_CLOCK_DIV(6),
125 },
126 {
127 .hz = 202 * MHz,
128 .src = SRC_GPLL9_MAIN_808MHZ,
129 .div = QCOM_CLOCK_DIV(4),
130 },
131};
132
133static struct pcie pcie_cfg[] = {
134 [PCIE_1_GDSC] = {
135 .gdscr = &gcc->pcie_1.gdscr,
136 },
137 [PCIE_1_SLV_Q2A_AXI_CLK] = {
138 .clk = &gcc->pcie_1.slv_q2a_axi_cbcr,
139 .clk_br_en = &gcc->apcs_clk_br_en,
140 .vote_bit = PCIE_1_SLV_Q2A_AXI_CLK_ENA,
141 },
142 [PCIE_1_SLV_AXI_CLK] = {
143 .clk = &gcc->pcie_1.slv_axi_cbcr,
144 .clk_br_en = &gcc->apcs_clk_br_en,
145 .vote_bit = PCIE_1_SLV_AXI_CLK_ENA,
146 },
147 [PCIE_1_MSTR_AXI_CLK] = {
148 .clk = &gcc->pcie_1.mstr_axi_cbcr,
149 .clk_br_en = &gcc->apcs_clk_br_en,
150 .vote_bit = PCIE_1_MSTR_AXI_CLK_ENA,
151 },
152 [PCIE_1_CFG_AHB_CLK] = {
153 .clk = &gcc->pcie_1.cfg_ahb_cbcr,
154 .clk_br_en = &gcc->apcs_clk_br_en,
155 .vote_bit = PCIE_1_CFG_AHB_CLK_ENA,
156 },
157 [PCIE_1_AUX_CLK] = {
158 .clk = &gcc->pcie_1.aux_cbcr,
159 .clk_br_en = &gcc->apcs_clk_br_en,
160 .vote_bit = PCIE_1_AUX_CLK_ENA,
161 },
162 [AGGRE_NOC_PCIE_TBU_CLK] = {
163 .clk = &gcc->aggre_noc_pcie_tbu_cbcr,
164 .clk_br_en = &gcc->apcs_clk_br_en,
165 .vote_bit = AGGRE_NOC_PCIE_TBU_CLK_ENA,
166 },
167 [AGGRE_NOC_PCIE_1_AXI_CLK] = {
168 .clk = &gcc->pcie_1.aggre_noc_pcie_axi_cbcr,
169 .clk_br_en = &gcc->apcs_clk_br_en,
170 .vote_bit = AGGRE_NOC_PCIE_1_AXI_CLK_ENA,
171 },
172 [DDRSS_PCIE_SF_CLK] = {
173 .clk = &gcc->pcie_1.ddrss_pcie_sf_cbcr,
174 .clk_br_en = &gcc->apcs_clk_br_en,
175 .vote_bit = DDRSS_PCIE_SF_CLK_ENA,
176 },
177 [PCIE1_PHY_RCHNG_CLK] = {
178 .clk = &gcc->pcie_1.phy_rchng_cbcr,
179 .clk_br_en = &gcc->apcs_clk_br_en,
180 .vote_bit = PCIE1_PHY_RCHNG_CLK_ENA,
181 },
182 [AGGRE_NOC_PCIE_CENTER_SF_AXI_CLK] = {
183 .clk = &gcc->pcie_1.aggre_noc_pcie_center_sf_axi_cbcr,
184 .clk_br_en = &gcc->apcs_clk_br_en1,
185 .vote_bit = AGGRE_NOC_PCIE_CENTER_SF_AXI_CLK_ENA,
186 },
187 [PCIE_1_PIPE_CLK] = {
188 .clk = &gcc->pcie_1.pipe_cbcr,
189 .clk_br_en = &gcc->apcs_clk_br_en,
190 .vote_bit = PCIE_1_PIPE_CLK_ENA,
191 },
192 [PCIE_CLKREF_EN] = {
193 .clk = &gcc->pcie_clkref_en,
194 .vote_bit = NO_VOTE_BIT,
195 },
196 [GCC_PCIE_1_PIPE_MUXR] = {
197 .clk = &gcc->pcie_1.pipe_muxr,
198 .vote_bit = NO_VOTE_BIT,
199 },
200};
201
202static struct clock_freq_config mdss_mdp_cfg[] = {
203 {
204 .hz = 200 * MHz,
205 .src = SRC_GCC_DISP_GPLL0_CLK,
206 .div = QCOM_CLOCK_DIV(3),
207 },
208 {
209 .hz = 300 * MHz,
210 .src = SRC_GCC_DISP_GPLL0_CLK,
211 .div = QCOM_CLOCK_DIV(2),
212 },
Taniya Das5fa28a52022-02-24 23:17:06 +0530213 {
214 .hz = 400 * MHz,
215 .src = SRC_GCC_DISP_GPLL0_CLK,
216 .div = QCOM_CLOCK_DIV(1.5),
217 },
Taniya Das3fe6c032021-02-11 15:58:29 +0530218};
219
Taniya Dasaf2c89c2021-11-19 14:19:18 +0530220static struct clock_rcg *mdss_clock[MDSS_CLK_COUNT] = {
Taniya Das3fe6c032021-02-11 15:58:29 +0530221 [MDSS_CLK_MDP] = &mdss->mdp,
222 [MDSS_CLK_VSYNC] = &mdss->vsync,
223 [MDSS_CLK_ESC0] = &mdss->esc0,
224 [MDSS_CLK_BYTE0] = &mdss->byte0,
225 [MDSS_CLK_BYTE0_INTF] = &mdss->byte0,
Taniya Dasaf2c89c2021-11-19 14:19:18 +0530226 [MDSS_CLK_AHB] = &mdss->mdss_ahb,
227 [MDSS_CLK_EDP_LINK] = &mdss->edp_link,
228 [MDSS_CLK_EDP_LINK_INTF] = &mdss->edp_link,
229 [MDSS_CLK_EDP_AUX] = &mdss->edp_aux,
230};
231
232static struct clock_rcg_mnd *mdss_clock_mnd[MDSS_CLK_COUNT] = {
233 [MDSS_CLK_PCLK0] = &mdss->pclk0,
234 [MDSS_CLK_EDP_PIXEL] = &mdss->edp_pixel,
Taniya Das3fe6c032021-02-11 15:58:29 +0530235};
236
237static u32 *mdss_cbcr[MDSS_CLK_COUNT] = {
238 [GCC_DISP_AHB] = &gcc->disp_ahb_cbcr,
239 [GCC_DISP_HF_AXI] = &gcc->disp_hf_axi_cbcr,
240 [GCC_DISP_SF_AXI] = &gcc->disp_sf_axi_cbcr,
Taniya Dasaf2c89c2021-11-19 14:19:18 +0530241 [GCC_EDP_CLKREF_EN] = &gcc->edp_clkref_en,
Taniya Das3fe6c032021-02-11 15:58:29 +0530242 [MDSS_CLK_PCLK0] = &mdss->pclk0_cbcr,
243 [MDSS_CLK_MDP] = &mdss->mdp_cbcr,
244 [MDSS_CLK_VSYNC] = &mdss->vsync_cbcr,
245 [MDSS_CLK_BYTE0] = &mdss->byte0_cbcr,
246 [MDSS_CLK_BYTE0_INTF] = &mdss->byte0_intf_cbcr,
247 [MDSS_CLK_ESC0] = &mdss->esc0_cbcr,
248 [MDSS_CLK_AHB] = &mdss->ahb_cbcr,
Taniya Dasaf2c89c2021-11-19 14:19:18 +0530249 [MDSS_CLK_EDP_PIXEL] = &mdss->edp_pixel_cbcr,
250 [MDSS_CLK_EDP_LINK] = &mdss->edp_link_cbcr,
251 [MDSS_CLK_EDP_LINK_INTF] = &mdss->edp_link_intf_cbcr,
252 [MDSS_CLK_EDP_AUX] = &mdss->edp_aux_cbcr,
Taniya Das3fe6c032021-02-11 15:58:29 +0530253};
254
255static u32 *gdsc[MAX_GDSC] = {
256 [PCIE_1_GDSC] = &gcc->pcie_1.gdscr,
257 [MDSS_CORE_GDSC] = &mdss->core_gdsc,
258};
259
260static enum cb_err clock_configure_gpll0(void)
261{
262 struct alpha_pll_reg_val_config gpll0_cfg = {0};
263
264 gpll0_cfg.reg_user_ctl = &gcc->gpll0.user_ctl;
265 gpll0_cfg.user_ctl_val = (1 << PLL_POST_DIV_EVEN_SHFT |
266 3 << PLL_POST_DIV_ODD_SHFT |
267 1 << PLL_PLLOUT_EVEN_SHFT |
268 1 << PLL_PLLOUT_MAIN_SHFT |
269 1 << PLL_PLLOUT_ODD_SHFT);
270
271 return clock_configure_enable_gpll(&gpll0_cfg, false, 0);
272}
273
274void clock_configure_qspi(uint32_t hz)
275{
276 clock_configure(&gcc->qspi_core,
277 qspi_core_cfg, hz,
278 ARRAY_SIZE(qspi_core_cfg));
279 clock_enable(&gcc->qspi_cnoc_ahb_cbcr);
280 clock_enable(&gcc->qspi_core_cbcr);
281}
282
Taniya Das3fe6c032021-02-11 15:58:29 +0530283void clock_enable_qup(int qup)
284{
285 struct qupv3_clock *qup_clk;
286 int s = qup % QUP_WRAP1_S0, clk_en_off;
287
288 qup_clk = qup < QUP_WRAP1_S0 ?
289 &gcc->qup_wrap0_s[s] : &gcc->qup_wrap1_s[s];
290
291 if (qup < QUP_WRAP1_S6) {
292 clk_en_off = qup < QUP_WRAP1_S0 ?
293 QUPV3_WRAP0_CLK_ENA_S(s) : QUPV3_WRAP1_CLK_ENA_S(s);
294 clock_enable_vote(&qup_clk->cbcr, &gcc->apcs_clk_br_en1,
295 clk_en_off);
296 } else {
297 clk_en_off = QUPV3_WRAP1_CLK_ENA_1_S(s);
298 clock_enable_vote(&qup_clk->cbcr, &gcc->apcs_clk_br_en,
299 clk_en_off);
300 }
301}
302
Shelley Chenfaaa7592022-04-01 14:58:22 -0700303void clock_configure_sdcc1(uint32_t hz)
Taniya Das3fe6c032021-02-11 15:58:29 +0530304{
Shelley Chenfaaa7592022-04-01 14:58:22 -0700305 if (hz > CLK_100MHZ) {
306 struct alpha_pll_reg_val_config gpll10_cfg = {0};
307 gpll10_cfg.reg_mode = &gcc->gpll10.mode;
308 gpll10_cfg.reg_opmode = &gcc->gpll10.opmode;
309 gpll10_cfg.reg_l = &gcc->gpll10.l;
310 gpll10_cfg.l_val = 0x14;
311 gpll10_cfg.reg_cal_l = &gcc->gpll10.cal_l;
312 gpll10_cfg.cal_l_val = 0x44;
313 gpll10_cfg.fsm_enable = true;
314 gpll10_cfg.reg_apcs_pll_br_en = &gcc->apcs_pll_br_en;
315 clock_configure_enable_gpll(&gpll10_cfg, true, 9);
Taniya Das3fe6c032021-02-11 15:58:29 +0530316 }
Shelley Chenfaaa7592022-04-01 14:58:22 -0700317 clock_configure((struct clock_rcg *)&gcc->sdcc1, sdcc1_core_cfg,
318 hz, ARRAY_SIZE(sdcc1_core_cfg));
319 clock_enable(&gcc->sdcc1_ahb_cbcr);
320 clock_enable(&gcc->sdcc1_apps_cbcr);
321}
322
323void clock_configure_sdcc2(uint32_t hz)
324{
325 if (hz > CLK_100MHZ) {
326 struct alpha_pll_reg_val_config gpll9_cfg = {0};
327 gpll9_cfg.reg_mode = &gcc->gpll9.mode;
328 gpll9_cfg.reg_opmode = &gcc->gpll9.opmode;
329 gpll9_cfg.reg_alpha = &gcc->gpll9.alpha;
330 gpll9_cfg.alpha_val = 0x1555;
331 gpll9_cfg.reg_l = &gcc->gpll9.l;
332 gpll9_cfg.l_val = 0x2A;
333 gpll9_cfg.reg_cal_l = &gcc->gpll9.cal_l;
334 gpll9_cfg.cal_l_val = 0x44;
335 gpll9_cfg.fsm_enable = true;
336 gpll9_cfg.reg_apcs_pll_br_en = &gcc->apcs_pll_br_en;
337 clock_configure_enable_gpll(&gpll9_cfg, true, 8);
338 }
339 clock_configure((struct clock_rcg *)&gcc->sdcc2, sdcc2_core_cfg,
340 hz, ARRAY_SIZE(sdcc2_core_cfg));
341 clock_enable(&gcc->sdcc2_ahb_cbcr);
342 clock_enable(&gcc->sdcc2_apps_cbcr);
Taniya Das3fe6c032021-02-11 15:58:29 +0530343}
344
345void clock_configure_dfsr(int qup)
346{
347 clock_configure_dfsr_table(qup, qupv3_wrap_cfg,
348 ARRAY_SIZE(qupv3_wrap_cfg));
349}
350
351static enum cb_err pll_init_and_set(struct sc7280_apss_clock *apss, u32 l_val)
352{
353 struct alpha_pll_reg_val_config pll_cfg = {0};
354 int ret;
355 u32 gfmux_val, regval;
356
357 pll_cfg.reg_l = &apss->pll.l;
358 pll_cfg.l_val = l_val;
359
360 pll_cfg.reg_config_ctl = &apss->pll.config_ctl_lo;
361 pll_cfg.reg_config_ctl_hi = &apss->pll.config_ctl_hi;
362 pll_cfg.reg_config_ctl_hi1 = &apss->pll.config_ctl_u1;
363
364 regval = read32(&apss->pll.config_ctl_lo);
365 pll_cfg.config_ctl_val = regval &
366 (~(0x2 << K_P_SHFT | 0x2 << K_I_SHFT));
367
368 regval = read32(&apss->pll.config_ctl_hi);
369 pll_cfg.config_ctl_hi_val = (regval | (BIT(KLSB_SHFT) |
370 BIT(RON_MODE_SHFT))) & (~(0x4 << KLSB_SHFT));
371
372 regval = read32(&apss->pll.config_ctl_u1);
373 pll_cfg.config_ctl_hi1_val = (regval | BIT(FAST_LOCK_LOW_L_SHFT)) &
374 ~BIT(DCO_BIAS_ADJ_SHFT);
375
376 ret = clock_configure_enable_gpll(&pll_cfg, false, 0);
377 if (ret != CB_SUCCESS)
378 return CB_ERR;
379
380 pll_cfg.reg_mode = &apss->pll.mode;
381 pll_cfg.reg_opmode = &apss->pll.opmode;
382 pll_cfg.reg_user_ctl = &apss->pll.user_ctl;
383
384 ret = zonda_pll_enable(&pll_cfg);
385 if (ret != CB_SUCCESS)
386 return CB_ERR;
387
388 gfmux_val = read32(&apss->cfg_gfmux) & ~GFMUX_SRC_SEL_BMSK;
389 gfmux_val |= APCS_SRC_EARLY;
390 write32(&apss->cfg_gfmux, gfmux_val);
391
392 return CB_SUCCESS;
393}
394
395enum cb_err clock_enable_gdsc(enum clk_gdsc gdsc_type)
396{
397 if (gdsc_type > MAX_GDSC)
398 return CB_ERR;
399
400 return enable_and_poll_gdsc_status(gdsc[gdsc_type]);
401}
402
403enum cb_err mdss_clock_configure(enum clk_mdss clk_type, uint32_t hz,
404 uint32_t source, uint32_t divider, uint32_t m,
405 uint32_t n, uint32_t d_2)
406{
407 struct clock_freq_config mdss_clk_cfg;
408 uint32_t idx;
409
410 if (clk_type >= MDSS_CLK_COUNT)
411 return CB_ERR;
412
413 /* Initialize it with received arguments */
414 mdss_clk_cfg.div = divider ? QCOM_CLOCK_DIV(divider) : 0;
Taniya Das3fe6c032021-02-11 15:58:29 +0530415 mdss_clk_cfg.src = source;
416 mdss_clk_cfg.m = m;
417 mdss_clk_cfg.n = n;
418 mdss_clk_cfg.d_2 = d_2;
Shelley Chen420ba8b2022-03-31 18:07:59 -0700419 mdss_clk_cfg.hz = hz;
420
421 if (clk_type == MDSS_CLK_MDP) {
422 for (idx = 0; idx < ARRAY_SIZE(mdss_mdp_cfg); idx++) {
423 if (hz <= mdss_mdp_cfg[idx].hz) {
424 mdss_clk_cfg.src = mdss_mdp_cfg[idx].src;
425 mdss_clk_cfg.div = mdss_mdp_cfg[idx].div;
426 mdss_clk_cfg.hz = mdss_mdp_cfg[idx].hz;
427 mdss_clk_cfg.m = 0;
428 break;
429 }
430 }
431 }
Taniya Das3fe6c032021-02-11 15:58:29 +0530432
Taniya Dasaf2c89c2021-11-19 14:19:18 +0530433 switch (clk_type) {
434 case MDSS_CLK_EDP_PIXEL:
435 case MDSS_CLK_PCLK0:
436 return clock_configure((struct clock_rcg *)
Shelley Chen420ba8b2022-03-31 18:07:59 -0700437 mdss_clock_mnd[clk_type],
438 &mdss_clk_cfg, mdss_clk_cfg.hz, 1);
Taniya Dasaf2c89c2021-11-19 14:19:18 +0530439 default:
440 return clock_configure(mdss_clock[clk_type],
Shelley Chen420ba8b2022-03-31 18:07:59 -0700441 &mdss_clk_cfg, mdss_clk_cfg.hz, 1);
Taniya Dasaf2c89c2021-11-19 14:19:18 +0530442 }
Taniya Das3fe6c032021-02-11 15:58:29 +0530443}
444
445enum cb_err mdss_clock_enable(enum clk_mdss clk_type)
446{
447 if (clk_type >= MDSS_CLK_COUNT)
448 return CB_ERR;
449
Taniya Dase3cf0082021-06-23 09:08:57 +0530450 /* Enable clock */
Taniya Das3fe6c032021-02-11 15:58:29 +0530451 return clock_enable(mdss_cbcr[clk_type]);
452}
453
454enum cb_err clock_enable_pcie(enum clk_pcie clk_type)
455{
456 int clk_vote_bit;
457
458 if (clk_type >= PCIE_CLK_COUNT)
459 return CB_ERR;
460
461 clk_vote_bit = pcie_cfg[clk_type].vote_bit;
462 if (clk_vote_bit < 0)
463 return clock_enable(pcie_cfg[clk_type].clk);
464
465 clock_enable_vote(pcie_cfg[clk_type].clk,
466 pcie_cfg[clk_type].clk_br_en,
467 pcie_cfg[clk_type].vote_bit);
468
469 return CB_SUCCESS;
470}
471
472enum cb_err clock_configure_mux(enum clk_pcie clk_type, u32 src_type)
473{
474 if (clk_type >= PCIE_CLK_COUNT)
475 return CB_ERR;
476
477 /* Set clock src */
478 write32(pcie_cfg[clk_type].clk, src_type);
479
480 return CB_SUCCESS;
481}
482
483static void speed_up_boot_cpu(void)
484{
485 /* 1516.8 MHz */
486 if (!pll_init_and_set(apss_silver, L_VAL_1516P8MHz))
487 printk(BIOS_DEBUG, "Silver Frequency bumped to 1.5168(GHz)\n");
488
489 /* 1190.4 MHz */
490 if (!pll_init_and_set(apss_l3, L_VAL_1190P4MHz))
491 printk(BIOS_DEBUG, "L3 Frequency bumped to 1.1904(GHz)\n");
492}
493
494void clock_init(void)
495{
496 clock_configure_gpll0();
497
498 clock_enable_vote(&gcc->qup_wrap0_core_2x_cbcr,
499 &gcc->apcs_clk_br_en1,
500 QUPV3_WRAP0_CORE_2X_CLK_ENA);
501 clock_enable_vote(&gcc->qup_wrap0_core_cbcr,
502 &gcc->apcs_clk_br_en1,
503 QUPV3_WRAP0_CORE_CLK_ENA);
504 clock_enable_vote(&gcc->qup_wrap0_m_ahb_cbcr,
505 &gcc->apcs_clk_br_en1,
506 QUPV3_WRAP_0_M_AHB_CLK_ENA);
507 clock_enable_vote(&gcc->qup_wrap0_s_ahb_cbcr,
508 &gcc->apcs_clk_br_en1,
509 QUPV3_WRAP_0_S_AHB_CLK_ENA);
510
511 clock_enable_vote(&gcc->qup_wrap1_core_2x_cbcr,
512 &gcc->apcs_clk_br_en1,
513 QUPV3_WRAP1_CORE_2X_CLK_ENA);
514 clock_enable_vote(&gcc->qup_wrap1_core_cbcr,
515 &gcc->apcs_clk_br_en1,
516 QUPV3_WRAP1_CORE_CLK_ENA);
517 clock_enable_vote(&gcc->qup_wrap1_m_ahb_cbcr,
518 &gcc->apcs_clk_br_en1,
519 QUPV3_WRAP_1_M_AHB_CLK_ENA);
520 clock_enable_vote(&gcc->qup_wrap1_s_ahb_cbcr,
521 &gcc->apcs_clk_br_en1,
522 QUPV3_WRAP_1_S_AHB_CLK_ENA);
523
524 speed_up_boot_cpu();
525}