blob: 358db252e20ec877b40a448e10c091012e97b592 [file] [log] [blame]
Channagoud Kadabi123c9722014-02-06 13:22:50 -08001/* Copyright (c) 2013-2014, 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
38
39/* Mux source select values */
40#define cxo_source_val 0
41#define gpll0_source_val 1
42#define gpll4_source_val 5
43#define cxo_mm_source_val 0
44#define mmpll0_mm_source_val 1
45#define mmpll1_mm_source_val 2
46#define mmpll3_mm_source_val 3
47#define gpll0_mm_source_val 5
Channagoud Kadabib4c64b82014-07-24 17:18:46 -070048#define edppll_270_mm_source_val 4
49#define edppll_350_mm_source_val 4
Channagoud Kadabi123c9722014-02-06 13:22:50 -080050
51struct clk_freq_tbl rcg_dummy_freq = F_END;
52
53
54/* Clock Operations */
Channagoud Kadabi3dcc4ed2014-04-10 14:59:41 -070055static struct clk_ops clk_ops_rst =
56{
57 .reset = clock_lib2_reset_clk_reset,
58};
59
Channagoud Kadabi123c9722014-02-06 13:22:50 -080060static struct clk_ops clk_ops_branch =
61{
62 .enable = clock_lib2_branch_clk_enable,
63 .disable = clock_lib2_branch_clk_disable,
64 .set_rate = clock_lib2_branch_set_rate,
Channagoud Kadabi3dcc4ed2014-04-10 14:59:41 -070065 .reset = clock_lib2_branch_clk_reset,
Channagoud Kadabi123c9722014-02-06 13:22:50 -080066};
67
68static struct clk_ops clk_ops_rcg_mnd =
69{
70 .enable = clock_lib2_rcg_enable,
71 .set_rate = clock_lib2_rcg_set_rate,
72};
73
74static struct clk_ops clk_ops_rcg =
75{
76 .enable = clock_lib2_rcg_enable,
77 .set_rate = clock_lib2_rcg_set_rate,
78};
79
80static struct clk_ops clk_ops_cxo =
81{
82 .enable = cxo_clk_enable,
83 .disable = cxo_clk_disable,
84};
85
86static struct clk_ops clk_ops_pll_vote =
87{
88 .enable = pll_vote_clk_enable,
89 .disable = pll_vote_clk_disable,
90 .auto_off = pll_vote_clk_disable,
91 .is_enabled = pll_vote_clk_is_enabled,
92};
93
94static struct clk_ops clk_ops_vote =
95{
96 .enable = clock_lib2_vote_clk_enable,
97 .disable = clock_lib2_vote_clk_disable,
98};
99
100/* Clock Sources */
101static struct fixed_clk cxo_clk_src =
102{
103 .c = {
104 .rate = 19200000,
105 .dbg_name = "cxo_clk_src",
106 .ops = &clk_ops_cxo,
107 },
108};
109
110static struct pll_vote_clk gpll0_clk_src =
111{
112 .en_reg = (void *) APCS_GPLL_ENA_VOTE,
113 .en_mask = BIT(0),
114 .status_reg = (void *) GPLL0_MODE,
115 .status_mask = BIT(30),
116 .parent = &cxo_clk_src.c,
117
118 .c = {
119 .rate = 600000000,
120 .dbg_name = "gpll0_clk_src",
121 .ops = &clk_ops_pll_vote,
122 },
123};
124
125static struct pll_vote_clk gpll4_clk_src =
126{
127 .en_reg = (void *) APCS_GPLL_ENA_VOTE,
128 .en_mask = BIT(4),
129 .status_reg = (void *) GPLL4_MODE,
130 .status_mask = BIT(30),
131 .parent = &cxo_clk_src.c,
132
133 .c = {
134 .rate = 1600000000,
135 .dbg_name = "gpll4_clk_src",
136 .ops = &clk_ops_pll_vote,
137 },
138};
139
140/* UART Clocks */
141static struct clk_freq_tbl ftbl_gcc_blsp1_2_uart1_6_apps_clk[] =
142{
143 F( 3686400, gpll0, 1, 96, 15625),
144 F( 7372800, gpll0, 1, 192, 15625),
145 F(14745600, gpll0, 1, 384, 15625),
146 F(16000000, gpll0, 5, 2, 15),
147 F(19200000, cxo, 1, 0, 0),
148 F(24000000, gpll0, 5, 1, 5),
149 F(32000000, gpll0, 1, 4, 75),
150 F(40000000, gpll0, 15, 0, 0),
151 F(46400000, gpll0, 1, 29, 375),
152 F(48000000, gpll0, 12.5, 0, 0),
153 F(51200000, gpll0, 1, 32, 375),
154 F(56000000, gpll0, 1, 7, 75),
155 F(58982400, gpll0, 1, 1536, 15625),
156 F(60000000, gpll0, 10, 0, 0),
Channagoud Kadabia66a6f22014-05-28 17:19:44 -0700157 F(63160000, gpll0, 9.5, 0, 0),
Channagoud Kadabi123c9722014-02-06 13:22:50 -0800158 F_END
159};
160
Channagoud Kadabi123c9722014-02-06 13:22:50 -0800161static struct rcg_clk blsp1_uart2_apps_clk_src =
162{
163 .cmd_reg = (uint32_t *) BLSP1_UART2_APPS_CMD_RCGR,
164 .cfg_reg = (uint32_t *) BLSP1_UART2_APPS_CFG_RCGR,
165 .m_reg = (uint32_t *) BLSP1_UART2_APPS_M,
166 .n_reg = (uint32_t *) BLSP1_UART2_APPS_N,
167 .d_reg = (uint32_t *) BLSP1_UART2_APPS_D,
168
169 .set_rate = clock_lib2_rcg_set_rate_mnd,
170 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
171 .current_freq = &rcg_dummy_freq,
172
173 .c = {
174 .dbg_name = "blsp1_uart2_apps_clk",
175 .ops = &clk_ops_rcg_mnd,
176 },
177};
178
Channagoud Kadabi123c9722014-02-06 13:22:50 -0800179static struct branch_clk gcc_blsp1_uart2_apps_clk =
180{
181 .cbcr_reg = (uint32_t *) BLSP1_UART2_APPS_CBCR,
182 .parent = &blsp1_uart2_apps_clk_src.c,
183
184 .c = {
185 .dbg_name = "gcc_blsp1_uart2_apps_clk",
186 .ops = &clk_ops_branch,
187 },
188};
189
190static struct vote_clk gcc_blsp1_ahb_clk = {
191 .cbcr_reg = (uint32_t *) BLSP1_AHB_CBCR,
192 .vote_reg = (uint32_t *) APCS_CLOCK_BRANCH_ENA_VOTE,
193 .en_mask = BIT(17),
194
195 .c = {
196 .dbg_name = "gcc_blsp1_ahb_clk",
197 .ops = &clk_ops_vote,
198 },
199};
200
Channagoud Kadabi123c9722014-02-06 13:22:50 -0800201/* USB Clocks */
202static struct clk_freq_tbl ftbl_gcc_usb_hs_system_clk[] =
203{
204 F(75000000, gpll0, 8, 0, 0),
205 F_END
206};
207
208static struct rcg_clk usb_hs_system_clk_src =
209{
210 .cmd_reg = (uint32_t *) USB_HS_SYSTEM_CMD_RCGR,
211 .cfg_reg = (uint32_t *) USB_HS_SYSTEM_CFG_RCGR,
212
213 .set_rate = clock_lib2_rcg_set_rate_hid,
214 .freq_tbl = ftbl_gcc_usb_hs_system_clk,
215 .current_freq = &rcg_dummy_freq,
216
217 .c = {
218 .dbg_name = "usb_hs_system_clk",
219 .ops = &clk_ops_rcg,
220 },
221};
222
223static struct branch_clk gcc_usb_hs_system_clk =
224{
225 .cbcr_reg = (uint32_t *) USB_HS_SYSTEM_CBCR,
226 .parent = &usb_hs_system_clk_src.c,
227
228 .c = {
229 .dbg_name = "gcc_usb_hs_system_clk",
230 .ops = &clk_ops_branch,
231 },
232};
233
234static struct branch_clk gcc_usb_hs_ahb_clk =
235{
236 .cbcr_reg = (uint32_t *) USB_HS_AHB_CBCR,
237 .has_sibling = 1,
238
239 .c = {
240 .dbg_name = "gcc_usb_hs_ahb_clk",
241 .ops = &clk_ops_branch,
242 },
243};
244
245/* SDCC Clocks */
Channagoud Kadabie804d642014-08-20 17:43:57 -0700246static struct clk_freq_tbl ftbl_gcc_sdcc1_apps_clk[] =
Channagoud Kadabi123c9722014-02-06 13:22:50 -0800247{
248 F( 144000, cxo, 16, 3, 25),
249 F( 400000, cxo, 12, 1, 4),
250 F( 20000000, gpll0, 15, 1, 2),
251 F( 25000000, gpll0, 12, 1, 2),
252 F( 50000000, gpll0, 12, 0, 0),
Channagoud Kadabia66a6f22014-05-28 17:19:44 -0700253 F( 96000000, gpll4, 6, 0, 0),
254 F(192000000, gpll4, 2, 0, 0),
255 F(384000000, gpll4, 1, 0, 0),
Channagoud Kadabi123c9722014-02-06 13:22:50 -0800256 F_END
257};
258
Channagoud Kadabie804d642014-08-20 17:43:57 -0700259static struct clk_freq_tbl ftbl_gcc_sdcc2_4_apps_clk[] =
260{
261 F( 144000, cxo, 16, 3, 25),
262 F( 400000, cxo, 12, 1, 4),
263 F( 20000000, gpll0, 15, 1, 2),
264 F( 25000000, gpll0, 12, 1, 2),
265 F( 50000000, gpll0, 12, 0, 0),
266 F(100000000, gpll0, 6, 0, 0),
267 F(200000000, gpll0, 3, 0, 0),
268 F_END
269};
270
Channagoud Kadabi123c9722014-02-06 13:22:50 -0800271static struct rcg_clk sdcc1_apps_clk_src =
272{
273 .cmd_reg = (uint32_t *) SDCC1_CMD_RCGR,
274 .cfg_reg = (uint32_t *) SDCC1_CFG_RCGR,
275 .m_reg = (uint32_t *) SDCC1_M,
276 .n_reg = (uint32_t *) SDCC1_N,
277 .d_reg = (uint32_t *) SDCC1_D,
278
279 .set_rate = clock_lib2_rcg_set_rate_mnd,
Channagoud Kadabie804d642014-08-20 17:43:57 -0700280 .freq_tbl = ftbl_gcc_sdcc1_apps_clk,
Channagoud Kadabi123c9722014-02-06 13:22:50 -0800281 .current_freq = &rcg_dummy_freq,
282
283 .c = {
284 .dbg_name = "sdc1_clk",
285 .ops = &clk_ops_rcg_mnd,
286 },
287};
288
289static struct branch_clk gcc_sdcc1_apps_clk =
290{
291 .cbcr_reg = (uint32_t *) SDCC1_APPS_CBCR,
292 .parent = &sdcc1_apps_clk_src.c,
293
294 .c = {
295 .dbg_name = "gcc_sdcc1_apps_clk",
296 .ops = &clk_ops_branch,
297 },
298};
299
300static struct branch_clk gcc_sdcc1_ahb_clk =
301{
302 .cbcr_reg = (uint32_t *) SDCC1_AHB_CBCR,
303 .has_sibling = 1,
304
305 .c = {
306 .dbg_name = "gcc_sdcc1_ahb_clk",
307 .ops = &clk_ops_branch,
308 },
309};
310
Channagoud Kadabie804d642014-08-20 17:43:57 -0700311static struct rcg_clk sdcc2_apps_clk_src =
312{
313 .cmd_reg = (uint32_t *) SDCC2_CMD_RCGR,
314 .cfg_reg = (uint32_t *) SDCC2_CFG_RCGR,
315 .m_reg = (uint32_t *) SDCC2_M,
316 .n_reg = (uint32_t *) SDCC2_N,
317 .d_reg = (uint32_t *) SDCC2_D,
318
319 .set_rate = clock_lib2_rcg_set_rate_mnd,
320 .freq_tbl = ftbl_gcc_sdcc2_4_apps_clk,
321 .current_freq = &rcg_dummy_freq,
322
323 .c = {
324 .dbg_name = "sdc2_clk",
325 .ops = &clk_ops_rcg_mnd,
326 },
327};
328
329static struct branch_clk gcc_sdcc2_apps_clk =
330{
331 .cbcr_reg = (uint32_t *) SDCC2_APPS_CBCR,
332 .parent = &sdcc2_apps_clk_src.c,
333
334 .c = {
335 .dbg_name = "gcc_sdcc2_apps_clk",
336 .ops = &clk_ops_branch,
337 },
338};
339
340static struct branch_clk gcc_sdcc2_ahb_clk =
341{
342 .cbcr_reg = (uint32_t *) SDCC2_AHB_CBCR,
343 .has_sibling = 1,
344
345 .c = {
346 .dbg_name = "gcc_sdcc2_ahb_clk",
347 .ops = &clk_ops_branch,
348 },
349};
350
Channagoud Kadabi3dcc4ed2014-04-10 14:59:41 -0700351static struct branch_clk gcc_sys_noc_usb30_axi_clk = {
352 .cbcr_reg = (uint32_t *) SYS_NOC_USB3_AXI_CBCR,
353 .has_sibling = 1,
354
355 .c = {
356 .dbg_name = "sys_noc_usb30_axi_clk",
357 .ops = &clk_ops_branch,
358 },
359};
360
361static struct branch_clk gcc_usb2b_phy_sleep_clk = {
362 .cbcr_reg = (uint32_t *) USB2B_PHY_SLEEP_CBCR,
363 .bcr_reg = (uint32_t *) USB2B_PHY_BCR,
364 .has_sibling = 1,
365
366 .c = {
367 .dbg_name = "usb2b_phy_sleep_clk",
368 .ops = &clk_ops_branch,
369 },
370};
371
372static struct clk_freq_tbl ftbl_gcc_usb30_master_clk[] = {
373 F( 125000000, gpll0, 1, 5, 24),
374 F_END
375};
376
377static struct rcg_clk usb30_master_clk_src = {
378 .cmd_reg = (uint32_t *) USB30_MASTER_CMD_RCGR,
379 .cfg_reg = (uint32_t *) USB30_MASTER_CFG_RCGR,
380 .m_reg = (uint32_t *) USB30_MASTER_M,
381 .n_reg = (uint32_t *) USB30_MASTER_N,
382 .d_reg = (uint32_t *) USB30_MASTER_D,
383
384 .set_rate = clock_lib2_rcg_set_rate_mnd,
385 .freq_tbl = ftbl_gcc_usb30_master_clk,
386 .current_freq = &rcg_dummy_freq,
387
388 .c = {
389 .dbg_name = "usb30_master_clk_src",
390 .ops = &clk_ops_rcg,
391 },
392};
393
394static struct branch_clk gcc_usb30_master_clk = {
395 .cbcr_reg = (uint32_t *) USB30_MASTER_CBCR,
396 .bcr_reg = (uint32_t *) USB_30_BCR,
397 .parent = &usb30_master_clk_src.c,
398
399 .c = {
400 .dbg_name = "usb30_master_clk",
401 .ops = &clk_ops_branch,
402 },
403};
404
405static struct clk_freq_tbl ftbl_gcc_usb30_mock_utmi_clk_src[] = {
406 F( 60000000, gpll0, 10, 0, 0),
407 F_END
408};
409
410static struct rcg_clk usb30_mock_utmi_clk_src = {
411 .cmd_reg = (uint32_t *) USB30_MOCK_UTMI_CMD_RCGR,
412 .cfg_reg = (uint32_t *) USB30_MOCK_UTMI_CFG_RCGR,
413 .set_rate = clock_lib2_rcg_set_rate_hid,
414 .freq_tbl = ftbl_gcc_usb30_mock_utmi_clk_src,
415 .current_freq = &rcg_dummy_freq,
416
417 .c = {
418 .dbg_name = "usb30_mock_utmi_clk_src",
419 .ops = &clk_ops_rcg,
420 },
421};
422
423static struct branch_clk gcc_usb30_mock_utmi_clk = {
424 .cbcr_reg = (uint32_t *) USB30_MOCK_UTMI_CBCR,
425 .has_sibling = 0,
426 .parent = &usb30_mock_utmi_clk_src.c,
427
428 .c = {
429 .dbg_name = "usb30_mock_utmi_clk",
430 .ops = &clk_ops_branch,
431 },
432};
433
434static struct branch_clk gcc_usb30_sleep_clk = {
435 .cbcr_reg = (uint32_t *) USB30_SLEEP_CBCR,
436 .has_sibling = 1,
437
438 .c = {
439 .dbg_name = "usb30_sleep_clk",
440 .ops = &clk_ops_branch,
441 },
442};
443
444static struct clk_freq_tbl ftbl_gcc_usb30_phy_aux_clk_src[] = {
445 F( 1200000, cxo, 16, 0, 0),
446 F_END
447};
448
449static struct rcg_clk usb30_phy_aux_clk_src = {
450 .cmd_reg = (uint32_t *) USB30_PHY_AUX_CMD_RCGR,
451 .cfg_reg = (uint32_t *) USB30_PHY_AUX_CFG_RCGR,
452 .set_rate = clock_lib2_rcg_set_rate_hid,
453 .freq_tbl = ftbl_gcc_usb30_phy_aux_clk_src,
454 .current_freq = &rcg_dummy_freq,
455
456 .c = {
457 .dbg_name = "usb30_phy_aux_clk_src",
458 .ops = &clk_ops_rcg,
459 },
460};
461
462static struct branch_clk gcc_usb30_phy_aux_clk = {
463 .cbcr_reg = (uint32_t *)USB30_PHY_AUX_CBCR,
464 .has_sibling = 0,
465 .parent = &usb30_phy_aux_clk_src.c,
466
467 .c = {
468 .dbg_name = "usb30_phy_aux_clk",
469 .ops = &clk_ops_branch,
470 },
471};
472
473static struct branch_clk gcc_usb30_pipe_clk = {
474 .bcr_reg = (uint32_t *) USB30PHY_PHY_BCR,
475 .cbcr_reg = (uint32_t *) USB30_PHY_PIPE_CBCR,
476 .has_sibling = 1,
477
478 .c = {
479 .dbg_name = "usb30_pipe_clk",
480 .ops = &clk_ops_branch,
481 },
482};
483
484static struct reset_clk gcc_usb30_phy_reset = {
Channagoud Kadabi3c2be1c2014-06-01 18:59:21 -0700485 .bcr_reg = (uint32_t )USB30_PHY_BCR,
Channagoud Kadabi3dcc4ed2014-04-10 14:59:41 -0700486
487 .c = {
488 .dbg_name = "usb30_phy_reset",
489 .ops = &clk_ops_rst,
490 },
491};
492
Channagoud Kadabi3c2be1c2014-06-01 18:59:21 -0700493static struct branch_clk gcc_usb_phy_cfg_ahb2phy_clk = {
494 .cbcr_reg = (uint32_t *)USB_PHY_CFG_AHB2PHY_CBCR,
495 .has_sibling = 1,
496
497 .c = {
498 .dbg_name = "usb_phy_cfg_ahb2phy_clk",
499 .ops = &clk_ops_branch,
500 },
501};
502
Channagoud Kadabib4c64b82014-07-24 17:18:46 -0700503/* Display clocks */
504static struct clk_freq_tbl ftbl_mdss_esc0_1_clk[] = {
505 F_MM(19200000, cxo, 1, 0, 0),
506 F_END
507};
508
509static struct clk_freq_tbl ftbl_mdss_esc1_1_clk[] = {
510 F_MM(19200000, cxo, 1, 0, 0),
511 F_END
512};
513
514static struct clk_freq_tbl ftbl_mmss_axi_clk[] = {
515 F_MM(19200000, cxo, 1, 0, 0),
516 F_MM(100000000, gpll0, 6, 0, 0),
Siddhartha Agrawale24a18a2014-10-13 17:07:43 -0700517 F_MM(300000000, gpll0, 2, 0, 0),
Channagoud Kadabib4c64b82014-07-24 17:18:46 -0700518 F_END
519};
520
521static struct clk_freq_tbl ftbl_mdp_clk[] = {
522 F_MM( 75000000, gpll0, 8, 0, 0),
523 F_MM( 240000000, gpll0, 2.5, 0, 0),
Siddhartha Agrawale24a18a2014-10-13 17:07:43 -0700524 F_MM(300000000, gpll0, 2, 0, 0),
Channagoud Kadabib4c64b82014-07-24 17:18:46 -0700525 F_END
526};
527
528static struct rcg_clk dsi_esc0_clk_src = {
529 .cmd_reg = (uint32_t *) DSI_ESC0_CMD_RCGR,
530 .cfg_reg = (uint32_t *) DSI_ESC0_CFG_RCGR,
531 .set_rate = clock_lib2_rcg_set_rate_hid,
532 .freq_tbl = ftbl_mdss_esc0_1_clk,
533
534 .c = {
535 .dbg_name = "dsi_esc0_clk_src",
536 .ops = &clk_ops_rcg,
537 },
538};
539
540static struct rcg_clk dsi_esc1_clk_src = {
541 .cmd_reg = (uint32_t *) DSI_ESC1_CMD_RCGR,
542 .cfg_reg = (uint32_t *) DSI_ESC1_CFG_RCGR,
543 .set_rate = clock_lib2_rcg_set_rate_hid,
544 .freq_tbl = ftbl_mdss_esc1_1_clk,
545
546 .c = {
547 .dbg_name = "dsi_esc1_clk_src",
548 .ops = &clk_ops_rcg,
549 },
550};
551
552static struct clk_freq_tbl ftbl_mdss_vsync_clk[] = {
553 F_MM(19200000, cxo, 1, 0, 0),
554 F_END
555};
556
557static struct rcg_clk vsync_clk_src = {
558 .cmd_reg = (uint32_t *) VSYNC_CMD_RCGR,
559 .cfg_reg = (uint32_t *) VSYNC_CFG_RCGR,
560 .set_rate = clock_lib2_rcg_set_rate_hid,
561 .freq_tbl = ftbl_mdss_vsync_clk,
562
563 .c = {
564 .dbg_name = "vsync_clk_src",
565 .ops = &clk_ops_rcg,
566 },
567};
568
569static struct rcg_clk mdp_axi_clk_src = {
570 .cmd_reg = (uint32_t *) MDP_AXI_CMD_RCGR,
571 .cfg_reg = (uint32_t *) MDP_AXI_CFG_RCGR,
572 .set_rate = clock_lib2_rcg_set_rate_hid,
573 .freq_tbl = ftbl_mmss_axi_clk,
574
575 .c = {
576 .dbg_name = "mdp_axi_clk_src",
577 .ops = &clk_ops_rcg,
578 },
579};
580
581static struct branch_clk mdss_esc0_clk = {
582 .cbcr_reg = (uint32_t *) DSI_ESC0_CBCR,
583 .parent = &dsi_esc0_clk_src.c,
584 .has_sibling = 0,
585
586 .c = {
587 .dbg_name = "mdss_esc0_clk",
588 .ops = &clk_ops_branch,
589 },
590};
591
592static struct branch_clk mdss_esc1_clk = {
593 .cbcr_reg = (uint32_t *) DSI_ESC1_CBCR,
594 .parent = &dsi_esc1_clk_src.c,
595 .has_sibling = 0,
596
597 .c = {
598 .dbg_name = "mdss_esc1_clk",
599 .ops = &clk_ops_branch,
600 },
601};
602
603static struct branch_clk mdss_axi_clk = {
604 .cbcr_reg = (uint32_t *) MDP_AXI_CBCR,
605 .parent = &mdp_axi_clk_src.c,
606 .has_sibling = 0,
607
608 .c = {
609 .dbg_name = "mdss_axi_clk",
610 .ops = &clk_ops_branch,
611 },
612};
613
614static struct branch_clk mmss_mmssnoc_axi_clk = {
615 .cbcr_reg = (uint32_t *) MMSS_MMSSNOC_AXI_CBCR,
616 .parent = &mdp_axi_clk_src.c,
617 .has_sibling = 0,
618
619 .c = {
620 .dbg_name = "mmss_mmssnoc_axi_clk",
621 .ops = &clk_ops_branch,
622 },
623};
624
625static struct branch_clk mmss_s0_axi_clk = {
626 .cbcr_reg = (uint32_t *) MMSS_S0_AXI_CBCR,
627 .parent = &mdp_axi_clk_src.c,
628 .has_sibling = 0,
629
630 .c = {
631 .dbg_name = "mmss_s0_axi_clk",
632 .ops = &clk_ops_branch,
633 },
634};
635
636static struct branch_clk mdp_ahb_clk = {
637 .cbcr_reg = (uint32_t *) MDP_AHB_CBCR,
638 .has_sibling = 1,
639
640 .c = {
641 .dbg_name = "mdp_ahb_clk",
642 .ops = &clk_ops_branch,
643 },
644};
645
646static struct rcg_clk mdss_mdp_clk_src = {
647 .cmd_reg = (uint32_t *) MDP_CMD_RCGR,
648 .cfg_reg = (uint32_t *) MDP_CFG_RCGR,
649 .set_rate = clock_lib2_rcg_set_rate_hid,
650 .freq_tbl = ftbl_mdp_clk,
651 .current_freq = &rcg_dummy_freq,
652
653 .c = {
654 .dbg_name = "mdss_mdp_clk_src",
655 .ops = &clk_ops_rcg,
656 },
657};
658
659static struct branch_clk mdss_mdp_clk = {
660 .cbcr_reg = (uint32_t *) MDP_CBCR,
661 .parent = &mdss_mdp_clk_src.c,
662 .has_sibling = 1,
663
664 .c = {
665 .dbg_name = "mdss_mdp_clk",
666 .ops = &clk_ops_branch,
667 },
668};
669
670static struct branch_clk mdss_mdp_lut_clk = {
Veera Sundaram Sankaran76f05102014-12-09 13:59:40 -0800671 .cbcr_reg = (uint32_t *) MDP_LUT_CBCR,
Channagoud Kadabib4c64b82014-07-24 17:18:46 -0700672 .parent = &mdss_mdp_clk_src.c,
673 .has_sibling = 1,
674
675 .c = {
676 .dbg_name = "mdss_mdp_lut_clk",
677 .ops = &clk_ops_branch,
678 },
679};
680
681static struct branch_clk mdss_vsync_clk = {
Veera Sundaram Sankaran76f05102014-12-09 13:59:40 -0800682 .cbcr_reg = (uint32_t *) MDSS_VSYNC_CBCR,
Channagoud Kadabib4c64b82014-07-24 17:18:46 -0700683 .parent = &vsync_clk_src.c,
684 .has_sibling = 0,
685
686 .c = {
687 .dbg_name = "mdss_vsync_clk",
688 .ops = &clk_ops_branch,
689 },
690};
691
692static struct clk_freq_tbl ftbl_mdss_edpaux_clk[] = {
693 F_MM(19200000, cxo, 1, 0, 0),
694 F_END
695};
696
697static struct rcg_clk edpaux_clk_src = {
698 .cmd_reg = (uint32_t *) EDPAUX_CMD_RCGR,
699 .set_rate = clock_lib2_rcg_set_rate_hid,
700 .freq_tbl = ftbl_mdss_edpaux_clk,
701
702 .c = {
703 .dbg_name = "edpaux_clk_src",
704 .ops = &clk_ops_rcg,
705 },
706};
707
708static struct branch_clk mdss_edpaux_clk = {
Veera Sundaram Sankaran76f05102014-12-09 13:59:40 -0800709 .cbcr_reg = (uint32_t *) MDSS_EDPAUX_CBCR,
Channagoud Kadabib4c64b82014-07-24 17:18:46 -0700710 .parent = &edpaux_clk_src.c,
711 .has_sibling = 0,
712
713 .c = {
714 .dbg_name = "mdss_edpaux_clk",
715 .ops = &clk_ops_branch,
716 },
717};
718
719static struct clk_freq_tbl ftbl_mdss_edplink_clk[] = {
720 F_MDSS(162000000, edppll_270, 2, 0, 0),
721 F_MDSS(270000000, edppll_270, 11, 0, 0),
722 F_END
723};
724
725static struct rcg_clk edplink_clk_src = {
726 .cmd_reg = (uint32_t *)EDPLINK_CMD_RCGR,
727 .set_rate = clock_lib2_rcg_set_rate_hid,
728 .freq_tbl = ftbl_mdss_edplink_clk,
729 .current_freq = &rcg_dummy_freq,
730 .c = {
731 .dbg_name = "edplink_clk_src",
732 .ops = &clk_ops_rcg,
733 },
734};
735
736static struct clk_freq_tbl ftbl_mdss_edppixel_clk[] = {
737 F_MDSS(138500000, edppll_350, 2, 0, 0),
738 F_MDSS(350000000, edppll_350, 11, 0, 0),
739 F_END
740};
741
742static struct rcg_clk edppixel_clk_src = {
743 .cmd_reg = (uint32_t *)EDPPIXEL_CMD_RCGR,
744 .set_rate = clock_lib2_rcg_set_rate_mnd,
745 .freq_tbl = ftbl_mdss_edppixel_clk,
746 .current_freq = &rcg_dummy_freq,
747 .c = {
748 .dbg_name = "edppixel_clk_src",
749 .ops = &clk_ops_rcg_mnd,
750 },
751};
752
753static struct branch_clk mdss_edplink_clk = {
754 .cbcr_reg = (uint32_t *)MDSS_EDPLINK_CBCR,
755 .has_sibling = 0,
756 .parent = &edplink_clk_src.c,
757 .c = {
758 .dbg_name = "mdss_edplink_clk",
759 .ops = &clk_ops_branch,
760 },
761};
762
763static struct branch_clk mdss_edppixel_clk = {
764 .cbcr_reg = (uint32_t *)MDSS_EDPPIXEL_CBCR,
765 .has_sibling = 0,
766 .parent = &edppixel_clk_src.c,
767 .c = {
768 .dbg_name = "mdss_edppixel_clk",
769 .ops = &clk_ops_branch,
770 },
771};
Channagoud Kadabi3c2be1c2014-06-01 18:59:21 -0700772
Channagoud Kadabi5f42b272014-08-21 18:40:39 -0700773static struct branch_clk mmss_misc_ahb_clk = {
Veera Sundaram Sankaran76f05102014-12-09 13:59:40 -0800774 .cbcr_reg = (uint32_t *) MMSS_MISC_AHB_CBCR,
Channagoud Kadabi5f42b272014-08-21 18:40:39 -0700775 .has_sibling = 1,
776
777 .c = {
778 .dbg_name = "mmss_misc_ahb_clk",
779 .ops = &clk_ops_branch,
780 },
781};
782
Channagoud Kadabi123c9722014-02-06 13:22:50 -0800783/* Clock lookup table */
Channagoud Kadabi608b6a72014-04-14 13:58:03 -0700784static struct clk_lookup msm_8994_clocks[] =
Channagoud Kadabi123c9722014-02-06 13:22:50 -0800785{
786 CLK_LOOKUP("sdc1_iface_clk", gcc_sdcc1_ahb_clk.c),
787 CLK_LOOKUP("sdc1_core_clk", gcc_sdcc1_apps_clk.c),
788
Channagoud Kadabie804d642014-08-20 17:43:57 -0700789 CLK_LOOKUP("sdc2_iface_clk", gcc_sdcc2_ahb_clk.c),
790 CLK_LOOKUP("sdc2_core_clk", gcc_sdcc2_apps_clk.c),
791
Channagoud Kadabi123c9722014-02-06 13:22:50 -0800792 CLK_LOOKUP("uart2_iface_clk", gcc_blsp1_ahb_clk.c),
793 CLK_LOOKUP("uart2_core_clk", gcc_blsp1_uart2_apps_clk.c),
794
795 CLK_LOOKUP("usb_iface_clk", gcc_usb_hs_ahb_clk.c),
796 CLK_LOOKUP("usb_core_clk", gcc_usb_hs_system_clk.c),
Channagoud Kadabi3dcc4ed2014-04-10 14:59:41 -0700797
798 /* USB30 clocks */
799 CLK_LOOKUP("usb2b_phy_sleep_clk", gcc_usb2b_phy_sleep_clk.c),
800 CLK_LOOKUP("usb30_master_clk", gcc_usb30_master_clk.c),
Channagoud Kadabi3c2be1c2014-06-01 18:59:21 -0700801 CLK_LOOKUP("usb30_iface_clk", gcc_sys_noc_usb30_axi_clk.c),
Channagoud Kadabi3dcc4ed2014-04-10 14:59:41 -0700802 CLK_LOOKUP("usb30_mock_utmi_clk", gcc_usb30_mock_utmi_clk.c),
803 CLK_LOOKUP("usb30_sleep_clk", gcc_usb30_sleep_clk.c),
804 CLK_LOOKUP("usb30_phy_aux_clk", gcc_usb30_phy_aux_clk.c),
805 CLK_LOOKUP("usb30_pipe_clk", gcc_usb30_pipe_clk.c),
806 CLK_LOOKUP("usb30_phy_reset", gcc_usb30_phy_reset.c),
Channagoud Kadabi3c2be1c2014-06-01 18:59:21 -0700807
808 CLK_LOOKUP("usb_phy_cfg_ahb2phy_clk", gcc_usb_phy_cfg_ahb2phy_clk.c),
Channagoud Kadabib4c64b82014-07-24 17:18:46 -0700809
810 /* mdss clocks */
811 CLK_LOOKUP("mdp_ahb_clk", mdp_ahb_clk.c),
812 CLK_LOOKUP("mdss_esc0_clk", mdss_esc0_clk.c),
813 CLK_LOOKUP("mdss_esc1_clk", mdss_esc1_clk.c),
814 CLK_LOOKUP("mdss_axi_clk", mdss_axi_clk.c),
815 CLK_LOOKUP("mmss_mmssnoc_axi_clk", mmss_mmssnoc_axi_clk.c),
816 CLK_LOOKUP("mmss_s0_axi_clk", mmss_s0_axi_clk.c),
817 CLK_LOOKUP("mdss_vsync_clk", mdss_vsync_clk.c),
818 CLK_LOOKUP("mdss_mdp_clk_src", mdss_mdp_clk_src.c),
819 CLK_LOOKUP("mdss_mdp_clk", mdss_mdp_clk.c),
820 CLK_LOOKUP("mdss_mdp_lut_clk", mdss_mdp_lut_clk.c),
Channagoud Kadabi5f42b272014-08-21 18:40:39 -0700821 CLK_LOOKUP("mmss_misc_ahb_clk", mmss_misc_ahb_clk.c),
Channagoud Kadabib4c64b82014-07-24 17:18:46 -0700822
823 CLK_LOOKUP("edp_pixel_clk", mdss_edppixel_clk.c),
824 CLK_LOOKUP("edp_link_clk", mdss_edplink_clk.c),
825 CLK_LOOKUP("edp_aux_clk", mdss_edpaux_clk.c),
Channagoud Kadabi123c9722014-02-06 13:22:50 -0800826};
827
828void platform_clock_init(void)
829{
Channagoud Kadabi608b6a72014-04-14 13:58:03 -0700830 clk_init(msm_8994_clocks, ARRAY_SIZE(msm_8994_clocks));
Channagoud Kadabi123c9722014-02-06 13:22:50 -0800831}