blob: df6b056de9b7eaf15947c6ecef2f87ea25809726 [file] [log] [blame]
Aparna Mallavarapuca676882015-01-19 20:39:06 +05301/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
2 *
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 Komanduru2655ea62015-06-08 12:23:32 +0530402 F( 80000000, gpll0, 10, 0, 0),
403 F( 100000000, gpll0, 8, 0, 0),
404 F( 200000000, gpll0, 4, 0, 0),
405 F( 320000000, gpll0, 2.5, 0, 0),
406 F_END
407};
408
409static struct clk_freq_tbl ftbl_mdp_clk_8956[] = {
410 F_MM( 50000000, gpll0, 16, 0, 0),
411 F_MM( 80000000, gpll0, 10, 0, 0),
412 F_MM( 100000000, gpll0, 8, 0, 0),
413 F_MM( 145454545, gpll0, 5.5, 0, 0),
414 F_MM( 160000000, gpll0, 5, 0, 0),
415 F_MM( 177777778, gpll0, 4.5, 0, 0),
416 F_MM( 200000000, gpll0, 4, 0, 0),
417 F_MM( 270000000, gpll6, 4, 0, 0),
418 F_MM( 320000000, gpll0, 2.5, 0, 0),
419 F_MM( 360000000, gpll6, 3, 0, 0),
Padmanabhan Komandurufba66322015-04-13 12:47:31 -0700420 F_END
421};
422
423static struct rcg_clk dsi_esc0_clk_src = {
424 .cmd_reg = (uint32_t *) DSI_ESC0_CMD_RCGR,
425 .cfg_reg = (uint32_t *) DSI_ESC0_CFG_RCGR,
426 .set_rate = clock_lib2_rcg_set_rate_hid,
427 .freq_tbl = ftbl_mdss_esc0_1_clk,
428
429 .c = {
430 .dbg_name = "dsi_esc0_clk_src",
431 .ops = &clk_ops_rcg,
432 },
433};
434
Padmanabhan Komanduru2655ea62015-06-08 12:23:32 +0530435static struct rcg_clk dsi_esc1_clk_src = {
436 .cmd_reg = (uint32_t *) DSI_ESC1_CMD_RCGR,
437 .cfg_reg = (uint32_t *) DSI_ESC1_CFG_RCGR,
438 .set_rate = clock_lib2_rcg_set_rate_hid,
439 .freq_tbl = ftbl_mdss_esc1_1_clk,
440
441 .c = {
442 .dbg_name = "dsi_esc1_clk_src",
443 .ops = &clk_ops_rcg,
444 },
445};
446
Padmanabhan Komandurufba66322015-04-13 12:47:31 -0700447static struct clk_freq_tbl ftbl_mdss_vsync_clk[] = {
448 F_MM(19200000, cxo, 1, 0, 0),
449 F_END
450};
451
452static struct rcg_clk vsync_clk_src = {
453 .cmd_reg = (uint32_t *) VSYNC_CMD_RCGR,
454 .cfg_reg = (uint32_t *) VSYNC_CFG_RCGR,
455 .set_rate = clock_lib2_rcg_set_rate_hid,
456 .freq_tbl = ftbl_mdss_vsync_clk,
457
458 .c = {
459 .dbg_name = "vsync_clk_src",
460 .ops = &clk_ops_rcg,
461 },
462};
463
464static struct branch_clk mdss_esc0_clk = {
465 .cbcr_reg = (uint32_t *) DSI_ESC0_CBCR,
466 .parent = &dsi_esc0_clk_src.c,
467 .has_sibling = 0,
468
469 .c = {
470 .dbg_name = "mdss_esc0_clk",
471 .ops = &clk_ops_branch,
472 },
473};
474
Padmanabhan Komanduru2655ea62015-06-08 12:23:32 +0530475static struct branch_clk mdss_esc1_clk = {
476 .cbcr_reg = (uint32_t *) DSI_ESC1_CBCR,
477 .parent = &dsi_esc1_clk_src.c,
478 .has_sibling = 0,
479
480 .c = {
481 .dbg_name = "mdss_esc1_clk",
482 .ops = &clk_ops_branch,
483 },
484};
485
Padmanabhan Komandurufba66322015-04-13 12:47:31 -0700486static struct branch_clk mdss_axi_clk = {
487 .cbcr_reg = (uint32_t *) MDP_AXI_CBCR,
488 .has_sibling = 1,
489
490 .c = {
491 .dbg_name = "mdss_axi_clk",
492 .ops = &clk_ops_branch,
493 },
494};
495
496static struct branch_clk mdp_ahb_clk = {
497 .cbcr_reg = (uint32_t *) MDP_AHB_CBCR,
498 .has_sibling = 1,
499
500 .c = {
501 .dbg_name = "mdp_ahb_clk",
502 .ops = &clk_ops_branch,
503 },
504};
505
506static struct rcg_clk mdss_mdp_clk_src = {
507 .cmd_reg = (uint32_t *) MDP_CMD_RCGR,
508 .cfg_reg = (uint32_t *) MDP_CFG_RCGR,
509 .set_rate = clock_lib2_rcg_set_rate_hid,
510 .freq_tbl = ftbl_mdp_clk,
511 .current_freq = &rcg_dummy_freq,
512
513 .c = {
514 .dbg_name = "mdss_mdp_clk_src",
515 .ops = &clk_ops_rcg,
516 },
517};
518
519static struct branch_clk mdss_mdp_clk = {
520 .cbcr_reg = (uint32_t *) MDP_CBCR,
521 .parent = &mdss_mdp_clk_src.c,
522 .has_sibling = 0,
523
524 .c = {
525 .dbg_name = "mdss_mdp_clk",
526 .ops = &clk_ops_branch,
527 },
528};
529
530static struct branch_clk mdss_vsync_clk = {
531 .cbcr_reg = (uint32_t *) MDSS_VSYNC_CBCR,
532 .parent = &vsync_clk_src.c,
533 .has_sibling = 0,
534
535 .c = {
536 .dbg_name = "mdss_vsync_clk",
537 .ops = &clk_ops_branch,
538 },
539};
540
Aparna Mallavarapuca676882015-01-19 20:39:06 +0530541static struct clk_freq_tbl ftbl_gcc_ce1_clk[] = {
542 F(160000000, gpll0, 5, 0, 0),
543 F_END
544};
545
546static struct rcg_clk ce1_clk_src = {
547 .cmd_reg = (uint32_t *) GCC_CRYPTO_CMD_RCGR,
548 .cfg_reg = (uint32_t *) GCC_CRYPTO_CFG_RCGR,
549 .set_rate = clock_lib2_rcg_set_rate_hid,
550 .freq_tbl = ftbl_gcc_ce1_clk,
551 .current_freq = &rcg_dummy_freq,
552
553 .c = {
554 .dbg_name = "ce1_clk_src",
555 .ops = &clk_ops_rcg,
556 },
557};
558
559static struct vote_clk gcc_ce1_clk = {
560 .cbcr_reg = (uint32_t *) GCC_CRYPTO_CBCR,
561 .vote_reg = (uint32_t *) APCS_CLOCK_BRANCH_ENA_VOTE,
562 .en_mask = BIT(2),
563
564 .c = {
565 .dbg_name = "gcc_ce1_clk",
566 .ops = &clk_ops_vote,
567 },
568};
569
570static struct vote_clk gcc_ce1_ahb_clk = {
571 .cbcr_reg = (uint32_t *) GCC_CRYPTO_AHB_CBCR,
572 .vote_reg = (uint32_t *) APCS_CLOCK_BRANCH_ENA_VOTE,
573 .en_mask = BIT(0),
574
575 .c = {
576 .dbg_name = "gcc_ce1_ahb_clk",
577 .ops = &clk_ops_vote,
578 },
579};
580
581static struct vote_clk gcc_ce1_axi_clk = {
582 .cbcr_reg = (uint32_t *) GCC_CRYPTO_AXI_CBCR,
583 .vote_reg = (uint32_t *) APCS_CLOCK_BRANCH_ENA_VOTE,
584 .en_mask = BIT(1),
585
586 .c = {
587 .dbg_name = "gcc_ce1_axi_clk",
588 .ops = &clk_ops_vote,
589 },
590};
591
592/* Clock lookup table */
593static struct clk_lookup msm_clocks_8952[] =
594{
595 CLK_LOOKUP("sdc1_iface_clk", gcc_sdcc1_ahb_clk.c),
596 CLK_LOOKUP("sdc1_core_clk", gcc_sdcc1_apps_clk.c),
597
598 CLK_LOOKUP("sdc2_iface_clk", gcc_sdcc2_ahb_clk.c),
599 CLK_LOOKUP("sdc2_core_clk", gcc_sdcc2_apps_clk.c),
600
601 CLK_LOOKUP("uart2_iface_clk", gcc_blsp1_ahb_clk.c),
602 CLK_LOOKUP("uart2_core_clk", gcc_blsp1_uart2_apps_clk.c),
603
604 CLK_LOOKUP("usb_iface_clk", gcc_usb_hs_ahb_clk.c),
605 CLK_LOOKUP("usb_core_clk", gcc_usb_hs_system_clk.c),
606
Padmanabhan Komandurufba66322015-04-13 12:47:31 -0700607 CLK_LOOKUP("mdp_ahb_clk", mdp_ahb_clk.c),
608 CLK_LOOKUP("mdss_esc0_clk", mdss_esc0_clk.c),
Padmanabhan Komanduru2655ea62015-06-08 12:23:32 +0530609 CLK_LOOKUP("mdss_esc1_clk", mdss_esc1_clk.c),
Padmanabhan Komandurufba66322015-04-13 12:47:31 -0700610 CLK_LOOKUP("mdss_axi_clk", mdss_axi_clk.c),
611 CLK_LOOKUP("mdss_vsync_clk", mdss_vsync_clk.c),
612 CLK_LOOKUP("mdss_mdp_clk_src", mdss_mdp_clk_src.c),
613 CLK_LOOKUP("mdss_mdp_clk", mdss_mdp_clk.c),
Aparna Mallavarapuca676882015-01-19 20:39:06 +0530614
615 CLK_LOOKUP("ce1_ahb_clk", gcc_ce1_ahb_clk.c),
616 CLK_LOOKUP("ce1_axi_clk", gcc_ce1_axi_clk.c),
617 CLK_LOOKUP("ce1_core_clk", gcc_ce1_clk.c),
618 CLK_LOOKUP("ce1_src_clk", ce1_clk_src.c),
619};
620
Unnati Gandhi81b77062015-05-28 14:23:39 +0530621void msm8956_clock_override()
622{
623 gpll4_clk_src.status_reg = (void *)GPLL4_STATUS;
624 gpll4_clk_src.status_mask = BIT(17);
Padmanabhan Komanduru2655ea62015-06-08 12:23:32 +0530625 mdss_mdp_clk_src.freq_tbl = ftbl_mdp_clk_8956;
Unnati Gandhi81b77062015-05-28 14:23:39 +0530626}
627
vijay kumara0a74722015-09-04 15:45:49 +0530628void msm8976_v_1_1_sdcc_clock_modify()
629{
630 sdcc1_apps_clk_src.freq_tbl = ftbl_gcc_sdcc1_apps_clk_8976_v_1_1;
631}
632
Parth Dixit5817c022015-11-07 16:23:57 +0530633void msm8937_clock_override()
634{
635 gpll0_clk_src.status_reg = (void *)GPLL0_MODE;
636 gpll0_clk_src.status_mask = BIT(30);
637}
638
Aparna Mallavarapuca676882015-01-19 20:39:06 +0530639void platform_clock_init(void)
640{
vijay kumara0a74722015-09-04 15:45:49 +0530641 if (platform_is_msm8956()) {
Unnati Gandhi81b77062015-05-28 14:23:39 +0530642 msm8956_clock_override();
vijay kumara0a74722015-09-04 15:45:49 +0530643 if (platform_is_msm8976_v_1_1())
644 /*freq and GPLL change for 8976 v1.1 */
645 msm8976_v_1_1_sdcc_clock_modify();
646 }
Parth Dixit5817c022015-11-07 16:23:57 +0530647
648 if (platform_is_msm8937())
649 msm8937_clock_override();
650
Aparna Mallavarapuca676882015-01-19 20:39:06 +0530651 clk_init(msm_clocks_8952, ARRAY_SIZE(msm_clocks_8952));
652}