blob: 6b1989c22dc8d9784e702338a9522d86e0d53c06 [file] [log] [blame]
lijuangd18524e2018-04-04 20:22:19 +08001/* Copyright (c) 2015-2016, 2018, The Linux Foundation. All rights reserved.
Aparna Mallavarapuca676882015-01-19 20:39:06 +05302 *
3 * Redistribution and use in source and binary forms, with or without
4 * modification, are permitted provided that the following conditions are
5 * met:
6 * * Redistributions of source code must retain the above copyright
7 * notice, this list of conditions and the following disclaimer.
8 * * Redistributions in binary form must reproduce the above
9 * copyright notice, this list of conditions and the following
10 * disclaimer in the documentation and/or other materials provided
11 * with the distribution.
12 * * Neither the name of The Linux Foundation nor the names of its
13 * contributors may be used to endorse or promote products derived
14 * from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
20 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
23 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
25 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
26 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29#include <assert.h>
30#include <reg.h>
31#include <err.h>
32#include <clock.h>
33#include <clock_pll.h>
34#include <clock_lib2.h>
35#include <platform/clock.h>
36#include <platform/iomap.h>
37#include <platform.h>
38
39/* Mux source select values */
40#define cxo_source_val 0
41#define gpll0_source_val 1
vijay kumara0a74722015-09-04 15:45:49 +053042#define gpll2_source_val 4
Aparna Mallavarapuca676882015-01-19 20:39:06 +053043#define gpll4_source_val 2
44#define cxo_mm_source_val 0
Padmanabhan Komanduru2655ea62015-06-08 12:23:32 +053045#define gpll0_mm_source_val 6
46#define gpll6_mm_source_val 3
Aparna Mallavarapuca676882015-01-19 20:39:06 +053047
48struct clk_freq_tbl rcg_dummy_freq = F_END;
49
50
51/* Clock Operations */
52static struct clk_ops clk_ops_branch =
53{
54 .enable = clock_lib2_branch_clk_enable,
55 .disable = clock_lib2_branch_clk_disable,
56 .set_rate = clock_lib2_branch_set_rate,
57};
58
59static struct clk_ops clk_ops_rcg_mnd =
60{
61 .enable = clock_lib2_rcg_enable,
62 .set_rate = clock_lib2_rcg_set_rate,
63};
64
65static struct clk_ops clk_ops_rcg =
66{
67 .enable = clock_lib2_rcg_enable,
68 .set_rate = clock_lib2_rcg_set_rate,
69};
70
71static struct clk_ops clk_ops_cxo =
72{
73 .enable = cxo_clk_enable,
74 .disable = cxo_clk_disable,
75};
76
77static struct clk_ops clk_ops_pll_vote =
78{
79 .enable = pll_vote_clk_enable,
80 .disable = pll_vote_clk_disable,
81 .auto_off = pll_vote_clk_disable,
82 .is_enabled = pll_vote_clk_is_enabled,
83};
84
85static struct clk_ops clk_ops_vote =
86{
87 .enable = clock_lib2_vote_clk_enable,
88 .disable = clock_lib2_vote_clk_disable,
89};
90
91/* Clock Sources */
92static struct fixed_clk cxo_clk_src =
93{
94 .c = {
95 .rate = 19200000,
96 .dbg_name = "cxo_clk_src",
97 .ops = &clk_ops_cxo,
98 },
99};
100
101static struct pll_vote_clk gpll0_clk_src =
102{
103 .en_reg = (void *) APCS_GPLL_ENA_VOTE,
104 .en_mask = BIT(0),
105 .status_reg = (void *) GPLL0_STATUS,
106 .status_mask = BIT(17),
107 .parent = &cxo_clk_src.c,
108
109 .c = {
110 .rate = 800000000,
111 .dbg_name = "gpll0_clk_src",
112 .ops = &clk_ops_pll_vote,
113 },
114};
115
vijay kumara0a74722015-09-04 15:45:49 +0530116static struct pll_vote_clk gpll2_clk_src =
117{
118 .en_reg = (void *) APCS_GPLL_ENA_VOTE,
119 .en_mask = BIT(2),
120 .status_reg = (void *) GPLL2_STATUS,
121 .status_mask = BIT(17),
122 .parent = &cxo_clk_src.c,
123
124 .c = {
125 .rate = 932000000,
126 .dbg_name = "gpll2_clk_src",
127 .ops = &clk_ops_pll_vote,
128 },
129};
130
Aparna Mallavarapu7b638e62015-03-26 05:51:57 +0530131static struct pll_vote_clk gpll4_clk_src =
132{
133 .en_reg = (void *) APCS_GPLL_ENA_VOTE,
134 .en_mask = BIT(5),
135 .status_reg = (void *) GPLL4_MODE,
136 .status_mask = BIT(30),
137 .parent = &cxo_clk_src.c,
138
139 .c = {
140 .rate = 1152000000,
141 .dbg_name = "gpll4_clk_src",
142 .ops = &clk_ops_pll_vote,
143 },
144};
145
Padmanabhan Komanduru2655ea62015-06-08 12:23:32 +0530146static struct pll_vote_clk gpll6_clk_src =
147{
148 .en_reg = (void *) APCS_GPLL_ENA_VOTE,
149 .en_mask = BIT(7),
150 .status_reg = (void *) GPLL6_STATUS,
151 .status_mask = BIT(17),
152 .parent = &cxo_clk_src.c,
153
154 .c = {
155 .rate = 1080000000,
156 .dbg_name = "gpll6_clk_src",
157 .ops = &clk_ops_pll_vote,
158 },
159};
160
Aparna Mallavarapuca676882015-01-19 20:39:06 +0530161/* SDCC Clocks */
162static struct clk_freq_tbl ftbl_gcc_sdcc1_apps_clk[] =
163{
164 F( 144000, cxo, 16, 3, 25),
165 F( 400000, cxo, 12, 1, 4),
166 F( 20000000, gpll0, 10, 1, 4),
167 F( 25000000, gpll0, 16, 1, 2),
168 F( 50000000, gpll0, 16, 0, 0),
169 F(100000000, gpll0, 8, 0, 0),
170 F(177770000, gpll0, 4.5, 0, 0),
Aparna Mallavarapuf47a8682015-04-20 13:22:08 +0530171 F(192000000, gpll4, 6, 0, 0),
Aparna Mallavarapu7b638e62015-03-26 05:51:57 +0530172 F(384000000, gpll4, 3, 0, 0),
Aparna Mallavarapuca676882015-01-19 20:39:06 +0530173 F_END
174};
175
vijay kumara0a74722015-09-04 15:45:49 +0530176/* SDCC Clocks for version 8976 v 1.1*/
177static struct clk_freq_tbl ftbl_gcc_sdcc1_apps_clk_8976_v_1_1[] =
178{
179 F( 144000, cxo, 16, 3, 25),
180 F( 400000, cxo, 12, 1, 4),
181 F( 20000000, gpll0, 10, 1, 4),
182 F( 25000000, gpll0, 16, 1, 2),
183 F( 50000000, gpll0, 16, 0, 0),
184 F(100000000, gpll0, 8, 0, 0),
185 F(177770000, gpll0, 4.5, 0, 0),
186 F(186400000, gpll2, 5, 0, 0),
187 F(372800000, gpll2, 2.5, 0, 0),
188 F_END
189};
190
Aparna Mallavarapuca676882015-01-19 20:39:06 +0530191static struct rcg_clk sdcc1_apps_clk_src =
192{
193 .cmd_reg = (uint32_t *) SDCC1_CMD_RCGR,
194 .cfg_reg = (uint32_t *) SDCC1_CFG_RCGR,
195 .m_reg = (uint32_t *) SDCC1_M,
196 .n_reg = (uint32_t *) SDCC1_N,
197 .d_reg = (uint32_t *) SDCC1_D,
198
199 .set_rate = clock_lib2_rcg_set_rate_mnd,
Aparna Mallavarapu7b638e62015-03-26 05:51:57 +0530200 .freq_tbl = ftbl_gcc_sdcc1_apps_clk,
Aparna Mallavarapuca676882015-01-19 20:39:06 +0530201 .current_freq = &rcg_dummy_freq,
202
203 .c = {
204 .dbg_name = "sdc1_clk",
205 .ops = &clk_ops_rcg_mnd,
206 },
207};
208
209static struct branch_clk gcc_sdcc1_apps_clk =
210{
211 .cbcr_reg = (uint32_t *) SDCC1_APPS_CBCR,
212 .parent = &sdcc1_apps_clk_src.c,
213
214 .c = {
215 .dbg_name = "gcc_sdcc1_apps_clk",
216 .ops = &clk_ops_branch,
217 },
218};
219
220static struct branch_clk gcc_sdcc1_ahb_clk =
221{
222 .cbcr_reg = (uint32_t *) SDCC1_AHB_CBCR,
223 .has_sibling = 1,
224
225 .c = {
226 .dbg_name = "gcc_sdcc1_ahb_clk",
227 .ops = &clk_ops_branch,
228 },
229};
230
231static struct clk_freq_tbl ftbl_gcc_sdcc2_apps_clk[] =
232{
233 F( 144000, cxo, 16, 3, 25),
234 F( 400000, cxo, 12, 1, 4),
235 F( 20000000, gpll0, 10, 1, 4),
236 F( 25000000, gpll0, 16, 1, 2),
237 F( 50000000, gpll0, 16, 0, 0),
238 F(100000000, gpll0, 8, 0, 0),
239 F(177770000, gpll0, 4.5, 0, 0),
240 F(200000000, gpll0, 4, 0, 0),
241 F_END
242};
243
244static struct rcg_clk sdcc2_apps_clk_src =
245{
246 .cmd_reg = (uint32_t *) SDCC2_CMD_RCGR,
247 .cfg_reg = (uint32_t *) SDCC2_CFG_RCGR,
248 .m_reg = (uint32_t *) SDCC2_M,
249 .n_reg = (uint32_t *) SDCC2_N,
250 .d_reg = (uint32_t *) SDCC2_D,
251
252 .set_rate = clock_lib2_rcg_set_rate_mnd,
253 .freq_tbl = ftbl_gcc_sdcc2_apps_clk,
254 .current_freq = &rcg_dummy_freq,
255
256 .c = {
257 .dbg_name = "sdc2_clk",
258 .ops = &clk_ops_rcg_mnd,
259 },
260};
261
262static struct branch_clk gcc_sdcc2_apps_clk =
263{
264 .cbcr_reg = (uint32_t *) SDCC2_APPS_CBCR,
265 .parent = &sdcc2_apps_clk_src.c,
266
267 .c = {
268 .dbg_name = "gcc_sdcc2_apps_clk",
269 .ops = &clk_ops_branch,
270 },
271};
272
273static struct branch_clk gcc_sdcc2_ahb_clk =
274{
275 .cbcr_reg = (uint32_t *) SDCC2_AHB_CBCR,
276 .has_sibling = 1,
277
278 .c = {
279 .dbg_name = "gcc_sdcc2_ahb_clk",
280 .ops = &clk_ops_branch,
281 },
282};
283
284/* UART Clocks */
285static struct clk_freq_tbl ftbl_gcc_blsp1_2_uart1_2_apps_clk[] =
286{
287 F( 3686400, gpll0, 1, 72, 15625),
288 F( 7372800, gpll0, 1, 144, 15625),
289 F(14745600, gpll0, 1, 288, 15625),
290 F(16000000, gpll0, 10, 1, 5),
291 F(19200000, cxo, 1, 0, 0),
292 F(24000000, gpll0, 1, 3, 100),
293 F(25000000, gpll0, 16, 1, 2),
294 F(32000000, gpll0, 1, 1, 25),
295 F(40000000, gpll0, 1, 1, 20),
296 F(46400000, gpll0, 1, 29, 500),
297 F(48000000, gpll0, 1, 3, 50),
298 F(51200000, gpll0, 1, 8, 125),
299 F(56000000, gpll0, 1, 7, 100),
300 F(58982400, gpll0, 1,1152, 15625),
301 F(60000000, gpll0, 1, 3, 40),
302 F_END
303};
304
305static struct rcg_clk blsp1_uart2_apps_clk_src =
306{
307 .cmd_reg = (uint32_t *) BLSP1_UART2_APPS_CMD_RCGR,
308 .cfg_reg = (uint32_t *) BLSP1_UART2_APPS_CFG_RCGR,
309 .m_reg = (uint32_t *) BLSP1_UART2_APPS_M,
310 .n_reg = (uint32_t *) BLSP1_UART2_APPS_N,
311 .d_reg = (uint32_t *) BLSP1_UART2_APPS_D,
312
313 .set_rate = clock_lib2_rcg_set_rate_mnd,
314 .freq_tbl = ftbl_gcc_blsp1_2_uart1_2_apps_clk,
315 .current_freq = &rcg_dummy_freq,
316
317 .c = {
318 .dbg_name = "blsp1_uart2_apps_clk",
319 .ops = &clk_ops_rcg_mnd,
320 },
321};
322
323static struct branch_clk gcc_blsp1_uart2_apps_clk =
324{
325 .cbcr_reg = (uint32_t *) BLSP1_UART2_APPS_CBCR,
326 .parent = &blsp1_uart2_apps_clk_src.c,
327
328 .c = {
329 .dbg_name = "gcc_blsp1_uart2_apps_clk",
330 .ops = &clk_ops_branch,
331 },
332};
333
334static struct vote_clk gcc_blsp1_ahb_clk = {
335 .cbcr_reg = (uint32_t *) BLSP1_AHB_CBCR,
336 .vote_reg = (uint32_t *) APCS_CLOCK_BRANCH_ENA_VOTE,
337 .en_mask = BIT(10),
338
339 .c = {
340 .dbg_name = "gcc_blsp1_ahb_clk",
341 .ops = &clk_ops_vote,
342 },
343};
344
345/* USB Clocks */
346static struct clk_freq_tbl ftbl_gcc_usb_hs_system_clk[] =
347{
Aparna Mallavarapubbec4632015-05-27 17:48:01 +0530348 F(100000000, gpll0, 10, 0, 0),
Aparna Mallavarapuca676882015-01-19 20:39:06 +0530349 F(133330000, gpll0, 6, 0, 0),
350 F_END
351};
352
353static struct rcg_clk usb_hs_system_clk_src =
354{
355 .cmd_reg = (uint32_t *) USB_HS_SYSTEM_CMD_RCGR,
356 .cfg_reg = (uint32_t *) USB_HS_SYSTEM_CFG_RCGR,
357
358 .set_rate = clock_lib2_rcg_set_rate_hid,
359 .freq_tbl = ftbl_gcc_usb_hs_system_clk,
360 .current_freq = &rcg_dummy_freq,
361
362 .c = {
363 .dbg_name = "usb_hs_system_clk",
364 .ops = &clk_ops_rcg,
365 },
366};
367
368static struct branch_clk gcc_usb_hs_system_clk =
369{
370 .cbcr_reg = (uint32_t *) USB_HS_SYSTEM_CBCR,
371 .parent = &usb_hs_system_clk_src.c,
372
373 .c = {
374 .dbg_name = "gcc_usb_hs_system_clk",
375 .ops = &clk_ops_branch,
376 },
377};
378
379static struct branch_clk gcc_usb_hs_ahb_clk =
380{
381 .cbcr_reg = (uint32_t *) USB_HS_AHB_CBCR,
382 .has_sibling = 1,
383
384 .c = {
385 .dbg_name = "gcc_usb_hs_ahb_clk",
386 .ops = &clk_ops_branch,
387 },
388};
389
Padmanabhan Komandurufba66322015-04-13 12:47:31 -0700390/* Display clocks */
391static struct clk_freq_tbl ftbl_mdss_esc0_1_clk[] = {
392 F_MM(19200000, cxo, 1, 0, 0),
393 F_END
394};
395
Padmanabhan Komanduru2655ea62015-06-08 12:23:32 +0530396static struct clk_freq_tbl ftbl_mdss_esc1_1_clk[] = {
397 F_MM(19200000, cxo, 1, 0, 0),
398 F_END
399};
400
Padmanabhan Komandurufba66322015-04-13 12:47:31 -0700401static struct clk_freq_tbl ftbl_mdp_clk[] = {
Padmanabhan Komanduru92f83d22015-11-12 16:39:53 +0530402 F( 50000000, gpll0, 16, 0, 0),
403 F( 80000000, gpll0, 10, 0, 0),
404 F( 100000000, gpll0, 8, 0, 0),
405 F( 145450000, gpll0, 5.5, 0, 0),
406 F( 160000000, gpll0, 5, 0, 0),
407 F( 177780000, gpll0, 4.5, 0, 0),
408 F( 200000000, gpll0, 4, 0, 0),
409 F( 266670000, gpll0, 3, 0, 0),
410 F( 320000000, gpll0, 2.5, 0, 0),
Padmanabhan Komanduru2655ea62015-06-08 12:23:32 +0530411 F_END
412};
413
414static struct clk_freq_tbl ftbl_mdp_clk_8956[] = {
415 F_MM( 50000000, gpll0, 16, 0, 0),
416 F_MM( 80000000, gpll0, 10, 0, 0),
417 F_MM( 100000000, gpll0, 8, 0, 0),
418 F_MM( 145454545, gpll0, 5.5, 0, 0),
419 F_MM( 160000000, gpll0, 5, 0, 0),
420 F_MM( 177777778, gpll0, 4.5, 0, 0),
421 F_MM( 200000000, gpll0, 4, 0, 0),
422 F_MM( 270000000, gpll6, 4, 0, 0),
423 F_MM( 320000000, gpll0, 2.5, 0, 0),
424 F_MM( 360000000, gpll6, 3, 0, 0),
Padmanabhan Komandurufba66322015-04-13 12:47:31 -0700425 F_END
426};
427
428static struct rcg_clk dsi_esc0_clk_src = {
429 .cmd_reg = (uint32_t *) DSI_ESC0_CMD_RCGR,
430 .cfg_reg = (uint32_t *) DSI_ESC0_CFG_RCGR,
431 .set_rate = clock_lib2_rcg_set_rate_hid,
432 .freq_tbl = ftbl_mdss_esc0_1_clk,
433
434 .c = {
435 .dbg_name = "dsi_esc0_clk_src",
436 .ops = &clk_ops_rcg,
437 },
438};
439
Padmanabhan Komanduru2655ea62015-06-08 12:23:32 +0530440static struct rcg_clk dsi_esc1_clk_src = {
441 .cmd_reg = (uint32_t *) DSI_ESC1_CMD_RCGR,
442 .cfg_reg = (uint32_t *) DSI_ESC1_CFG_RCGR,
443 .set_rate = clock_lib2_rcg_set_rate_hid,
444 .freq_tbl = ftbl_mdss_esc1_1_clk,
445
446 .c = {
447 .dbg_name = "dsi_esc1_clk_src",
448 .ops = &clk_ops_rcg,
449 },
450};
451
Padmanabhan Komandurufba66322015-04-13 12:47:31 -0700452static struct clk_freq_tbl ftbl_mdss_vsync_clk[] = {
453 F_MM(19200000, cxo, 1, 0, 0),
454 F_END
455};
456
457static struct rcg_clk vsync_clk_src = {
458 .cmd_reg = (uint32_t *) VSYNC_CMD_RCGR,
459 .cfg_reg = (uint32_t *) VSYNC_CFG_RCGR,
460 .set_rate = clock_lib2_rcg_set_rate_hid,
461 .freq_tbl = ftbl_mdss_vsync_clk,
462
463 .c = {
464 .dbg_name = "vsync_clk_src",
465 .ops = &clk_ops_rcg,
466 },
467};
468
469static struct branch_clk mdss_esc0_clk = {
470 .cbcr_reg = (uint32_t *) DSI_ESC0_CBCR,
471 .parent = &dsi_esc0_clk_src.c,
472 .has_sibling = 0,
473
474 .c = {
475 .dbg_name = "mdss_esc0_clk",
476 .ops = &clk_ops_branch,
477 },
478};
479
Padmanabhan Komanduru2655ea62015-06-08 12:23:32 +0530480static struct branch_clk mdss_esc1_clk = {
481 .cbcr_reg = (uint32_t *) DSI_ESC1_CBCR,
482 .parent = &dsi_esc1_clk_src.c,
483 .has_sibling = 0,
484
485 .c = {
486 .dbg_name = "mdss_esc1_clk",
487 .ops = &clk_ops_branch,
488 },
489};
490
Padmanabhan Komandurufba66322015-04-13 12:47:31 -0700491static struct branch_clk mdss_axi_clk = {
492 .cbcr_reg = (uint32_t *) MDP_AXI_CBCR,
493 .has_sibling = 1,
494
495 .c = {
496 .dbg_name = "mdss_axi_clk",
497 .ops = &clk_ops_branch,
498 },
499};
500
501static struct branch_clk mdp_ahb_clk = {
502 .cbcr_reg = (uint32_t *) MDP_AHB_CBCR,
503 .has_sibling = 1,
504
505 .c = {
506 .dbg_name = "mdp_ahb_clk",
507 .ops = &clk_ops_branch,
508 },
509};
510
511static struct rcg_clk mdss_mdp_clk_src = {
512 .cmd_reg = (uint32_t *) MDP_CMD_RCGR,
513 .cfg_reg = (uint32_t *) MDP_CFG_RCGR,
514 .set_rate = clock_lib2_rcg_set_rate_hid,
515 .freq_tbl = ftbl_mdp_clk,
516 .current_freq = &rcg_dummy_freq,
517
518 .c = {
519 .dbg_name = "mdss_mdp_clk_src",
520 .ops = &clk_ops_rcg,
521 },
522};
523
524static struct branch_clk mdss_mdp_clk = {
525 .cbcr_reg = (uint32_t *) MDP_CBCR,
526 .parent = &mdss_mdp_clk_src.c,
527 .has_sibling = 0,
528
529 .c = {
530 .dbg_name = "mdss_mdp_clk",
531 .ops = &clk_ops_branch,
532 },
533};
534
535static struct branch_clk mdss_vsync_clk = {
536 .cbcr_reg = (uint32_t *) MDSS_VSYNC_CBCR,
537 .parent = &vsync_clk_src.c,
538 .has_sibling = 0,
539
540 .c = {
541 .dbg_name = "mdss_vsync_clk",
542 .ops = &clk_ops_branch,
543 },
544};
545
Aparna Mallavarapuca676882015-01-19 20:39:06 +0530546static struct clk_freq_tbl ftbl_gcc_ce1_clk[] = {
547 F(160000000, gpll0, 5, 0, 0),
548 F_END
549};
550
551static struct rcg_clk ce1_clk_src = {
552 .cmd_reg = (uint32_t *) GCC_CRYPTO_CMD_RCGR,
553 .cfg_reg = (uint32_t *) GCC_CRYPTO_CFG_RCGR,
554 .set_rate = clock_lib2_rcg_set_rate_hid,
555 .freq_tbl = ftbl_gcc_ce1_clk,
556 .current_freq = &rcg_dummy_freq,
557
558 .c = {
559 .dbg_name = "ce1_clk_src",
560 .ops = &clk_ops_rcg,
561 },
562};
563
564static struct vote_clk gcc_ce1_clk = {
565 .cbcr_reg = (uint32_t *) GCC_CRYPTO_CBCR,
566 .vote_reg = (uint32_t *) APCS_CLOCK_BRANCH_ENA_VOTE,
567 .en_mask = BIT(2),
568
569 .c = {
570 .dbg_name = "gcc_ce1_clk",
571 .ops = &clk_ops_vote,
572 },
573};
574
575static struct vote_clk gcc_ce1_ahb_clk = {
576 .cbcr_reg = (uint32_t *) GCC_CRYPTO_AHB_CBCR,
577 .vote_reg = (uint32_t *) APCS_CLOCK_BRANCH_ENA_VOTE,
578 .en_mask = BIT(0),
579
580 .c = {
581 .dbg_name = "gcc_ce1_ahb_clk",
582 .ops = &clk_ops_vote,
583 },
584};
585
586static struct vote_clk gcc_ce1_axi_clk = {
587 .cbcr_reg = (uint32_t *) GCC_CRYPTO_AXI_CBCR,
588 .vote_reg = (uint32_t *) APCS_CLOCK_BRANCH_ENA_VOTE,
589 .en_mask = BIT(1),
590
591 .c = {
592 .dbg_name = "gcc_ce1_axi_clk",
593 .ops = &clk_ops_vote,
594 },
595};
596
597/* Clock lookup table */
598static struct clk_lookup msm_clocks_8952[] =
599{
600 CLK_LOOKUP("sdc1_iface_clk", gcc_sdcc1_ahb_clk.c),
601 CLK_LOOKUP("sdc1_core_clk", gcc_sdcc1_apps_clk.c),
602
603 CLK_LOOKUP("sdc2_iface_clk", gcc_sdcc2_ahb_clk.c),
604 CLK_LOOKUP("sdc2_core_clk", gcc_sdcc2_apps_clk.c),
605
606 CLK_LOOKUP("uart2_iface_clk", gcc_blsp1_ahb_clk.c),
607 CLK_LOOKUP("uart2_core_clk", gcc_blsp1_uart2_apps_clk.c),
608
609 CLK_LOOKUP("usb_iface_clk", gcc_usb_hs_ahb_clk.c),
610 CLK_LOOKUP("usb_core_clk", gcc_usb_hs_system_clk.c),
611
Padmanabhan Komandurufba66322015-04-13 12:47:31 -0700612 CLK_LOOKUP("mdp_ahb_clk", mdp_ahb_clk.c),
613 CLK_LOOKUP("mdss_esc0_clk", mdss_esc0_clk.c),
Padmanabhan Komanduru2655ea62015-06-08 12:23:32 +0530614 CLK_LOOKUP("mdss_esc1_clk", mdss_esc1_clk.c),
Padmanabhan Komandurufba66322015-04-13 12:47:31 -0700615 CLK_LOOKUP("mdss_axi_clk", mdss_axi_clk.c),
616 CLK_LOOKUP("mdss_vsync_clk", mdss_vsync_clk.c),
617 CLK_LOOKUP("mdss_mdp_clk_src", mdss_mdp_clk_src.c),
618 CLK_LOOKUP("mdss_mdp_clk", mdss_mdp_clk.c),
Aparna Mallavarapuca676882015-01-19 20:39:06 +0530619
620 CLK_LOOKUP("ce1_ahb_clk", gcc_ce1_ahb_clk.c),
621 CLK_LOOKUP("ce1_axi_clk", gcc_ce1_axi_clk.c),
622 CLK_LOOKUP("ce1_core_clk", gcc_ce1_clk.c),
623 CLK_LOOKUP("ce1_src_clk", ce1_clk_src.c),
624};
625
Unnati Gandhi81b77062015-05-28 14:23:39 +0530626void msm8956_clock_override()
627{
628 gpll4_clk_src.status_reg = (void *)GPLL4_STATUS;
629 gpll4_clk_src.status_mask = BIT(17);
Padmanabhan Komanduru2655ea62015-06-08 12:23:32 +0530630 mdss_mdp_clk_src.freq_tbl = ftbl_mdp_clk_8956;
Unnati Gandhi81b77062015-05-28 14:23:39 +0530631}
632
vijay kumara0a74722015-09-04 15:45:49 +0530633void msm8976_v_1_1_sdcc_clock_modify()
634{
635 sdcc1_apps_clk_src.freq_tbl = ftbl_gcc_sdcc1_apps_clk_8976_v_1_1;
636}
637
Parth Dixit5817c022015-11-07 16:23:57 +0530638void msm8937_clock_override()
639{
640 gpll0_clk_src.status_reg = (void *)GPLL0_MODE;
641 gpll0_clk_src.status_mask = BIT(30);
642}
643
Aparna Mallavarapuca676882015-01-19 20:39:06 +0530644void platform_clock_init(void)
645{
vijay kumara0a74722015-09-04 15:45:49 +0530646 if (platform_is_msm8956()) {
Unnati Gandhi81b77062015-05-28 14:23:39 +0530647 msm8956_clock_override();
vijay kumara0a74722015-09-04 15:45:49 +0530648 if (platform_is_msm8976_v_1_1())
649 /*freq and GPLL change for 8976 v1.1 */
650 msm8976_v_1_1_sdcc_clock_modify();
651 }
Parth Dixit5817c022015-11-07 16:23:57 +0530652
lijuangd18524e2018-04-04 20:22:19 +0800653 if (platform_is_msm8937() || platform_is_msm8917() ||
lijuang412d4f02018-10-16 18:27:48 +0800654 platform_is_sdm429() || platform_is_sdm439() ||
655 platform_is_qm215())
Parth Dixit5817c022015-11-07 16:23:57 +0530656 msm8937_clock_override();
657
Aparna Mallavarapuca676882015-01-19 20:39:06 +0530658 clk_init(msm_clocks_8952, ARRAY_SIZE(msm_clocks_8952));
659}