blob: b6ad898da20fd41a3e9ac192688e9440aff90a89 [file] [log] [blame]
vijay kumar7d06bbb2015-11-24 13:04:55 +05301/* Copyright (c) 2014-2016, The Linux Foundation. All rights reserved.
Joonwoo Park451dca32014-04-02 11:47:03 -07002 *
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 usb30_pipe_source_val 2
43
44struct clk_freq_tbl rcg_dummy_freq = F_END;
45
46
47/* Clock Operations */
48static struct clk_ops clk_ops_reset =
49{
50 .reset = clock_lib2_reset_clk_reset,
51};
52
53static struct clk_ops clk_ops_branch =
54{
55 .enable = clock_lib2_branch_clk_enable,
56 .disable = clock_lib2_branch_clk_disable,
57 .set_rate = clock_lib2_branch_set_rate,
Channagoud Kadabi1b69e482014-09-23 15:20:22 -070058 .reset = clock_lib2_branch_clk_reset,
Joonwoo Park451dca32014-04-02 11:47:03 -070059};
60
61static struct clk_ops clk_ops_rcg_mnd =
62{
63 .enable = clock_lib2_rcg_enable,
64 .set_rate = clock_lib2_rcg_set_rate,
65};
66
67static struct clk_ops clk_ops_rcg =
68{
69 .enable = clock_lib2_rcg_enable,
70 .set_rate = clock_lib2_rcg_set_rate,
71};
72
73static struct clk_ops clk_ops_cxo =
74{
75 .enable = cxo_clk_enable,
76 .disable = cxo_clk_disable,
77};
78
79static struct clk_ops clk_ops_pll_vote =
80{
81 .enable = pll_vote_clk_enable,
82 .disable = pll_vote_clk_disable,
83 .auto_off = pll_vote_clk_disable,
84 .is_enabled = pll_vote_clk_is_enabled,
85};
86
87static struct clk_ops clk_ops_vote =
88{
89 .enable = clock_lib2_vote_clk_enable,
90 .disable = clock_lib2_vote_clk_disable,
91};
92
93/* Clock Sources */
94static struct fixed_clk cxo_clk_src =
95{
96 .c = {
97 .rate = 19200000,
98 .dbg_name = "cxo_clk_src",
99 .ops = &clk_ops_cxo,
100 },
101};
102
103static struct pll_vote_clk gpll0_clk_src =
104{
105 .en_reg = (void *) APCS_GPLL_ENA_VOTE,
106 .en_mask = BIT(0),
107 .status_reg = (void *) GPLL0_STATUS,
108 .status_mask = BIT(30),
109 .parent = &cxo_clk_src.c,
110
111 .c = {
112 .rate = 800000000,
113 .dbg_name = "gpll0_clk_src",
114 .ops = &clk_ops_pll_vote,
115 },
116};
117
118/* SDCC Clocks */
119static struct clk_freq_tbl ftbl_gcc_sdcc1_2_apps_clk[] =
120{
121 F( 144000, cxo, 16, 3, 25),
122 F( 400000, cxo, 12, 1, 4),
Joonwoo Park095007a2014-06-27 17:57:45 -0700123 F( 20000000, gpll0, 15, 1, 2),
124 F( 25000000, gpll0, 12, 1, 2),
125 F( 50000000, gpll0, 12, 0, 0),
126 F(100000000, gpll0, 6, 0, 0),
Channagoud Kadabi6608d022015-04-20 11:31:56 -0700127 F(171430000, gpll0, 3, 50, 0),
Joonwoo Park095007a2014-06-27 17:57:45 -0700128 F(200000000, gpll0, 3, 0, 0),
Joonwoo Park451dca32014-04-02 11:47:03 -0700129 F_END
130};
131
132static struct rcg_clk sdcc1_apps_clk_src =
133{
134 .cmd_reg = (uint32_t *) SDCC1_CMD_RCGR,
135 .cfg_reg = (uint32_t *) SDCC1_CFG_RCGR,
136 .m_reg = (uint32_t *) SDCC1_M,
137 .n_reg = (uint32_t *) SDCC1_N,
138 .d_reg = (uint32_t *) SDCC1_D,
139
140 .set_rate = clock_lib2_rcg_set_rate_mnd,
141 .freq_tbl = ftbl_gcc_sdcc1_2_apps_clk,
142 .current_freq = &rcg_dummy_freq,
143
144 .c = {
145 .dbg_name = "sdc1_clk",
146 .ops = &clk_ops_rcg_mnd,
147 },
148};
149
Runmin Wangdc8e9732016-10-06 11:14:08 -0700150static struct clk_freq_tbl ftbl_gcc_sdcc1_2_apps_clk_sdxhedgehog[] =
151{
152 F( 144000, cxo, 16, 3, 25),
153 F( 400000, cxo, 12, 1, 4),
154 F( 20000000, gpll0, 15, 1, 2),
155 F( 25000000, gpll0, 12, 1, 2),
156 F( 50000000, gpll0, 12, 0, 0),
157 F( 100000000, gpll0, 6, 0, 0),
158 F_END
159};
160
161static struct rcg_clk sdcc1_apps_clk_src_sdxhedgehog =
162{
163 .cmd_reg = (uint32_t *) SDCC1_CMD_RCGR,
164 .cfg_reg = (uint32_t *) SDCC1_CFG_RCGR,
165 .m_reg = (uint32_t *) SDCC1_M,
166 .n_reg = (uint32_t *) SDCC1_N,
167 .d_reg = (uint32_t *) SDCC1_D,
168
169 .set_rate = clock_lib2_rcg_set_rate_mnd,
170 .freq_tbl = ftbl_gcc_sdcc1_2_apps_clk_sdxhedgehog,
171 .current_freq = &rcg_dummy_freq,
172
173 .c = {
174 .dbg_name = "sdc1_clk",
175 .ops = &clk_ops_rcg_mnd,
176 },
177};
178
179static struct branch_clk gcc_sdcc1_apps_clk_sdxhedgehog =
180{
181 .cbcr_reg = (uint32_t *) SDCC1_APPS_CBCR,
182 .parent = &sdcc1_apps_clk_src_sdxhedgehog.c,
183
184 .c = {
185 .dbg_name = "gcc_sdcc1_apps_clk",
186 .ops = &clk_ops_branch,
187 },
188};
189
Joonwoo Park451dca32014-04-02 11:47:03 -0700190static struct branch_clk gcc_sdcc1_apps_clk =
191{
192 .cbcr_reg = (uint32_t *) SDCC1_APPS_CBCR,
193 .parent = &sdcc1_apps_clk_src.c,
194
195 .c = {
196 .dbg_name = "gcc_sdcc1_apps_clk",
197 .ops = &clk_ops_branch,
198 },
199};
200
201static struct branch_clk gcc_sdcc1_ahb_clk =
202{
203 .cbcr_reg = (uint32_t *) SDCC1_AHB_CBCR,
204 .has_sibling = 1,
205
206 .c = {
207 .dbg_name = "gcc_sdcc1_ahb_clk",
208 .ops = &clk_ops_branch,
209 },
210};
211
212/* UART Clocks */
213static struct clk_freq_tbl ftbl_gcc_blsp1_2_uart1_6_apps_clk[] =
214{
Joonwoo Park095007a2014-06-27 17:57:45 -0700215 F( 3686400, gpll0, 1, 96, 15625),
216 F( 7372800, gpll0, 1, 192, 15625),
217 F(14745600, gpll0, 1, 384, 15625),
218 F(16000000, gpll0, 5, 2, 15),
Joonwoo Park451dca32014-04-02 11:47:03 -0700219 F(19200000, cxo, 1, 0, 0),
Joonwoo Park095007a2014-06-27 17:57:45 -0700220 F(24000000, gpll0, 5, 1, 5),
221 F(32000000, gpll0, 1, 4, 75),
222 F(40000000, gpll0, 15, 0, 0),
223 F(46400000, gpll0, 1, 29, 375),
224 F(48000000, gpll0, 12.5, 0, 0),
225 F(51200000, gpll0, 1, 32, 375),
226 F(56000000, gpll0, 1, 7, 75),
227 F(58982400, gpll0, 1, 1536, 15625),
228 F(60000000, gpll0, 10, 0, 0),
229 F(63160000, gpll0, 9.5, 0, 0),
Joonwoo Park451dca32014-04-02 11:47:03 -0700230 F_END
231};
232
Channagoud Kadabi1b69e482014-09-23 15:20:22 -0700233static struct rcg_clk blsp1_uart3_apps_clk_src =
Joonwoo Park451dca32014-04-02 11:47:03 -0700234{
Channagoud Kadabi1b69e482014-09-23 15:20:22 -0700235 .cmd_reg = (uint32_t *) BLSP1_UART3_APPS_CMD_RCGR,
236 .cfg_reg = (uint32_t *) BLSP1_UART3_APPS_CFG_RCGR,
237 .m_reg = (uint32_t *) BLSP1_UART3_APPS_M,
238 .n_reg = (uint32_t *) BLSP1_UART3_APPS_N,
239 .d_reg = (uint32_t *) BLSP1_UART3_APPS_D,
Joonwoo Park451dca32014-04-02 11:47:03 -0700240
241 .set_rate = clock_lib2_rcg_set_rate_mnd,
242 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
243 .current_freq = &rcg_dummy_freq,
244
245 .c = {
Channagoud Kadabi1b69e482014-09-23 15:20:22 -0700246 .dbg_name = "blsp1_uart3_apps_clk",
Joonwoo Park451dca32014-04-02 11:47:03 -0700247 .ops = &clk_ops_rcg_mnd,
248 },
249};
250
Channagoud Kadabi1b69e482014-09-23 15:20:22 -0700251static struct branch_clk gcc_blsp1_uart3_apps_clk =
Joonwoo Park451dca32014-04-02 11:47:03 -0700252{
Channagoud Kadabi1b69e482014-09-23 15:20:22 -0700253 .cbcr_reg = (uint32_t *) BLSP1_UART3_APPS_CBCR,
254 .parent = &blsp1_uart3_apps_clk_src.c,
Joonwoo Park451dca32014-04-02 11:47:03 -0700255
256 .c = {
Channagoud Kadabi1b69e482014-09-23 15:20:22 -0700257 .dbg_name = "gcc_blsp1_uart3_apps_clk",
Joonwoo Park451dca32014-04-02 11:47:03 -0700258 .ops = &clk_ops_branch,
259 },
260};
261
262static struct vote_clk gcc_blsp1_ahb_clk = {
263 .cbcr_reg = (uint32_t *) BLSP1_AHB_CBCR,
264 .vote_reg = (uint32_t *) APCS_CLOCK_BRANCH_ENA_VOTE,
265 .en_mask = BIT(10),
266
267 .c = {
268 .dbg_name = "gcc_blsp1_ahb_clk",
269 .ops = &clk_ops_vote,
270 },
271};
272
273/* USB Clocks */
Joonwoo Park451dca32014-04-02 11:47:03 -0700274static struct branch_clk gcc_sys_noc_usb30_axi_clk =
275{
276 .cbcr_reg = (uint32_t *) SYS_NOC_USB3_AXI_CBCR,
277 .has_sibling = 1,
278
279 .c = {
280 .dbg_name = "gcc_sys_noc_usb3_axi_clk",
281 .ops = &clk_ops_branch,
282 },
283};
284
285static struct branch_clk gcc_usb_phy_cfg_ahb_clk = {
286 .cbcr_reg = (uint32_t *) USB_PHY_CFG_AHB_CBCR,
287 .has_sibling = 1,
288
289 .c = {
290 .dbg_name = "gcc_usb_phy_cfg_ahb_clk",
291 .ops = &clk_ops_branch,
292 },
293};
294
295static struct clk_freq_tbl ftbl_gcc_usb30_master_clk[] =
296{
297 F(125000000, gpll0, 1, 5, 24),
298 F_END
299};
300
301static struct rcg_clk usb30_master_clk_src =
302{
303 .cmd_reg = (uint32_t *) GCC_USB30_MASTER_CMD_RCGR,
304 .cfg_reg = (uint32_t *) GCC_USB30_MASTER_CFG_RCGR,
305 .m_reg = (uint32_t *) GCC_USB30_MASTER_M,
306 .n_reg = (uint32_t *) GCC_USB30_MASTER_N,
307 .d_reg = (uint32_t *) GCC_USB30_MASTER_D,
308
309 .set_rate = clock_lib2_rcg_set_rate_mnd,
310 .freq_tbl = ftbl_gcc_usb30_master_clk,
311 .current_freq = &rcg_dummy_freq,
312
313 .c = {
314 .dbg_name = "usb30_master_clk_src",
315 .ops = &clk_ops_rcg,
316 },
317};
318
Runmin Wangdc8e9732016-10-06 11:14:08 -0700319static struct clk_freq_tbl ftbl_gcc_usb30_master_clk_sdxhedgehog[] =
320{
321 F(30000000, gpll0, 10, 0, 0),
322 F(60000000, gpll0, 5, 0, 0),
323 F(120000000, gpll0, 5, 0, 0),
324 F(171430000, gpll0, 3.5, 0, 0),
325 F(200000000, gpll0, 3, 0, 0),
326 F_END
327};
328
329static struct rcg_clk usb30_master_clk_src_sdxhedgehog =
330{
331 .cmd_reg = (uint32_t *) GCC_USB30_MASTER_CMD_RCGR,
332 .cfg_reg = (uint32_t *) GCC_USB30_MASTER_CFG_RCGR,
333 .m_reg = (uint32_t *) GCC_USB30_MASTER_M,
334 .n_reg = (uint32_t *) GCC_USB30_MASTER_N,
335 .d_reg = (uint32_t *) GCC_USB30_MASTER_D,
336
337 .set_rate = clock_lib2_rcg_set_rate_mnd,
338 .freq_tbl = ftbl_gcc_usb30_master_clk_sdxhedgehog,
339 .current_freq = &rcg_dummy_freq,
340
341 .c = {
342 .dbg_name = "usb30_master_clk_src_sdxhedgehog",
343 .ops = &clk_ops_rcg,
344 },
345};
346
Joonwoo Park451dca32014-04-02 11:47:03 -0700347static struct branch_clk gcc_usb30_master_clk =
348{
349 .cbcr_reg = (uint32_t *) GCC_USB30_MASTER_CBCR,
Channagoud Kadabifdfee232015-10-07 11:55:47 -0700350 .bcr_reg = (uint32_t *) USB_30_BCR,
Joonwoo Park451dca32014-04-02 11:47:03 -0700351 .parent = &usb30_master_clk_src.c,
352
353 .c = {
354 .dbg_name = "gcc_usb30_master_clk",
355 .ops = &clk_ops_branch,
356 },
357};
358
Runmin Wangdc8e9732016-10-06 11:14:08 -0700359static struct branch_clk gcc_usb30_master_clk_sdxhedgehog =
360{
361 .cbcr_reg = (uint32_t *) GCC_USB30_MASTER_CBCR,
362 .bcr_reg = (uint32_t *) USB_30_BCR,
363 .parent = &usb30_master_clk_src_sdxhedgehog.c,
364
365 .c = {
366 .dbg_name = "gcc_usb30_master_clk_sdxhedgehog",
367 .ops = &clk_ops_branch,
368 },
369};
370
Joonwoo Park451dca32014-04-02 11:47:03 -0700371static struct clk_freq_tbl ftbl_gcc_usb30_pipe_clk[] = {
372 F( 19200000, cxo, 1, 0, 0),
373 F_EXT_SRC( 125000000, usb30_pipe, 1, 0, 0),
374 F_END
375};
376
377static struct rcg_clk usb30_pipe_clk_src = {
378 .cmd_reg = (uint32_t *) USB3_PIPE_CMD_RCGR,
379 .cfg_reg = (uint32_t *) USB3_PIPE_CFG_RCGR,
380 .set_rate = clock_lib2_rcg_set_rate_hid,
381 .freq_tbl = ftbl_gcc_usb30_pipe_clk,
382 .current_freq = &rcg_dummy_freq,
383
384 .c = {
385 .dbg_name = "usb30_pipe_clk_src",
386 .ops = &clk_ops_rcg,
387 },
388};
389
390static struct branch_clk gcc_usb30_pipe_clk = {
391 .cbcr_reg = (uint32_t *) USB3_PIPE_CBCR,
Channagoud Kadabi1b69e482014-09-23 15:20:22 -0700392 .bcr_reg = (uint32_t *) USB3_PIPE_BCR,
Joonwoo Park451dca32014-04-02 11:47:03 -0700393 .parent = &usb30_pipe_clk_src.c,
394 .has_sibling = 0,
395
396 .c = {
397 .dbg_name = "gcc_usb30_pipe_clk",
398 .ops = &clk_ops_branch,
399 },
400};
401
Runmin Wangdc8e9732016-10-06 11:14:08 -0700402static struct branch_clk gcc_usb30_pipe_clk_sdxhedgehog = {
403 .bcr_reg = (uint32_t *) USB3_PIPE_BCR,
404 .cbcr_reg = (uint32_t *) USB3_PIPE_CBCR,
405 .has_sibling = 1,
406 .halt_check = 0,
407
408 .c = {
409 .dbg_name = "usb30_pipe_clk_sdxhedgehog",
410 .ops = &clk_ops_branch,
411 },
412};
413
Channagoud Kadabifdfee232015-10-07 11:55:47 -0700414
415static struct branch_clk gcc_usb30_pipe_clk_mdmcalifornium = {
416 .bcr_reg = (uint32_t *) USB3_PIPE_BCR,
417 .cbcr_reg = (uint32_t *) USB3_PIPE_CBCR,
418 .has_sibling = 1,
419 .halt_check = 0,
420
421 .c = {
422 .dbg_name = "usb30_pipe_clk_mdmcalifornium",
423 .ops = &clk_ops_branch,
424 },
425};
426
Joonwoo Park451dca32014-04-02 11:47:03 -0700427static struct clk_freq_tbl ftbl_gcc_usb30_aux_clk[] = {
428 F( 1000000, cxo, 1, 5, 96),
429 F_END
430};
431
432static struct rcg_clk usb30_aux_clk_src = {
433 .cmd_reg = (uint32_t *) USB3_AUX_CMD_RCGR,
434 .cfg_reg = (uint32_t *) USB3_AUX_CFG_RCGR,
435 .m_reg = (uint32_t *) USB3_AUX_M,
436 .n_reg = (uint32_t *) USB3_AUX_N,
437 .d_reg = (uint32_t *) USB3_AUX_D,
438
439 .set_rate = clock_lib2_rcg_set_rate_mnd,
440 .freq_tbl = ftbl_gcc_usb30_aux_clk,
441 .current_freq = &rcg_dummy_freq,
442
443 .c = {
444 .dbg_name = "usb30_aux_clk_src",
445 .ops = &clk_ops_rcg_mnd,
446 },
447};
448
449static struct branch_clk gcc_usb30_aux_clk = {
450 .cbcr_reg = (uint32_t *) USB3_AUX_CBCR,
451 .parent = &usb30_aux_clk_src.c,
452
453 .c = {
454 .dbg_name = "gcc_usb30_aux_clk",
455 .ops = &clk_ops_branch,
456 },
457};
458
459static struct reset_clk gcc_usb30_phy_reset = {
Sridhar Parasuram673c6bb2014-12-29 13:39:35 -0800460 .bcr_reg = (uint32_t) USB3_PHY_BCR,
Joonwoo Park451dca32014-04-02 11:47:03 -0700461
462 .c = {
463 .dbg_name = "usb30_phy_reset",
464 .ops = &clk_ops_reset,
465 },
466};
467
Joonwoo Park76641c72014-05-22 16:37:10 -0700468static struct reset_clk gcc_usb2a_phy_sleep_clk = {
Sridhar Parasuram673c6bb2014-12-29 13:39:35 -0800469 .bcr_reg = (uint32_t) QUSB2A_PHY_BCR,
Joonwoo Park76641c72014-05-22 16:37:10 -0700470
471 .c = {
472 .dbg_name = "usb2b_phy_sleep_clk",
473 .ops = &clk_ops_reset,
474 },
475};
476
vijay kumar7d06bbb2015-11-24 13:04:55 +0530477static struct clk_freq_tbl ftbl_gcc_ce1_clk[] = {
478 F(160000000, gpll0, 5, 0, 0),
479 F_END
480};
481
482static struct rcg_clk ce1_clk_src = {
483 .cmd_reg = (uint32_t *) GCC_CRYPTO_CMD_RCGR,
484 .cfg_reg = (uint32_t *) GCC_CRYPTO_CFG_RCGR,
485 .set_rate = clock_lib2_rcg_set_rate_hid,
486 .freq_tbl = ftbl_gcc_ce1_clk,
487 .current_freq = &rcg_dummy_freq,
488
489 .c = {
490 .dbg_name = "ce1_clk_src",
491 .ops = &clk_ops_rcg,
492 },
493};
494
495static struct vote_clk gcc_ce1_clk = {
496 .cbcr_reg = (uint32_t *) GCC_CRYPTO_CBCR,
497 .vote_reg = (uint32_t *) APCS_CLOCK_BRANCH_ENA_VOTE,
498 .en_mask = BIT(2),
499
500 .c = {
501 .dbg_name = "gcc_ce1_clk",
502 .ops = &clk_ops_vote,
503 },
504};
505
506static struct vote_clk gcc_ce1_ahb_clk = {
507 .cbcr_reg = (uint32_t *) GCC_CRYPTO_AHB_CBCR,
508 .vote_reg = (uint32_t *) APCS_CLOCK_BRANCH_ENA_VOTE,
509 .en_mask = BIT(0),
510
511 .c = {
512 .dbg_name = "gcc_ce1_ahb_clk",
513 .ops = &clk_ops_vote,
514 },
515};
516
517static struct vote_clk gcc_ce1_axi_clk = {
518 .cbcr_reg = (uint32_t *) GCC_CRYPTO_AXI_CBCR,
519 .vote_reg = (uint32_t *) APCS_CLOCK_BRANCH_ENA_VOTE,
520 .en_mask = BIT(1),
521
522 .c = {
523 .dbg_name = "gcc_ce1_axi_clk",
524 .ops = &clk_ops_vote,
525 },
526};
527
Channagoud Kadabifdfee232015-10-07 11:55:47 -0700528static struct clk_freq_tbl ftbl_gcc_usb30_mock_utmi_clk_src[] = {
529 F( 60000000, gpll0, 10, 0, 0),
530 F_END
531};
532
533static struct rcg_clk usb30_mock_utmi_clk_src = {
534 .cmd_reg = (uint32_t *) USB30_MOCK_UTMI_CMD_RCGR,
535 .cfg_reg = (uint32_t *) USB30_MOCK_UTMI_CFG_RCGR,
536 .set_rate = clock_lib2_rcg_set_rate_hid,
537 .freq_tbl = ftbl_gcc_usb30_mock_utmi_clk_src,
538 .current_freq = &rcg_dummy_freq,
539
540 .c = {
541 .dbg_name = "usb30_mock_utmi_clk_src",
542 .ops = &clk_ops_rcg,
543 },
544};
545
Runmin Wangdc8e9732016-10-06 11:14:08 -0700546static struct clk_freq_tbl ftbl_gcc_usb30_mock_utmi_clk_src_sdxhedgehog[] = {
547 F( 19200000, cxo, 1, 0, 0),
548 F_END
549};
550
551static struct rcg_clk usb30_mock_utmi_clk_src_sdxhedgehog = {
552 .cmd_reg = (uint32_t *) USB30_MOCK_UTMI_CMD_RCGR,
553 .cfg_reg = (uint32_t *) USB30_MOCK_UTMI_CFG_RCGR,
554 .set_rate = clock_lib2_rcg_set_rate_hid,
555 .freq_tbl = ftbl_gcc_usb30_mock_utmi_clk_src_sdxhedgehog,
556 .current_freq = &rcg_dummy_freq,
557
558 .c = {
559 .dbg_name = "usb30_mock_utmi_clk_src_sdxhedgehog",
560 .ops = &clk_ops_rcg,
561 },
562};
563
Channagoud Kadabifdfee232015-10-07 11:55:47 -0700564static struct branch_clk gcc_usb30_mock_utmi_clk = {
565 .cbcr_reg = (uint32_t *) USB30_MOCK_UTMI_CBCR,
566 .has_sibling = 0,
567 .parent = &usb30_mock_utmi_clk_src.c,
568
569 .c = {
570 .dbg_name = "usb30_mock_utmi_clk",
571 .ops = &clk_ops_branch,
572 },
573};
574
Runmin Wangdc8e9732016-10-06 11:14:08 -0700575static struct branch_clk gcc_usb30_mock_utmi_clk_sdxhedgehog = {
576 .cbcr_reg = (uint32_t *) USB30_MOCK_UTMI_CBCR,
577 .has_sibling = 0,
578 .parent = &usb30_mock_utmi_clk_src_sdxhedgehog.c,
579
580 .c = {
581 .dbg_name = "usb30_mock_utmi_clk_sdxhedgehog",
582 .ops = &clk_ops_branch,
583 },
584};
585
Channagoud Kadabifdfee232015-10-07 11:55:47 -0700586static struct branch_clk gcc_usb30_sleep_clk = {
587 .cbcr_reg = (uint32_t *) USB30_SLEEP_CBCR,
588 .has_sibling = 1,
589
590 .c = {
591 .dbg_name = "usb30_sleep_clk",
592 .ops = &clk_ops_branch,
593 },
594};
595
596
597
anisha agarwaldd04af62014-11-17 10:57:49 -0800598static struct clk_lookup msm_clocks_9640[] =
Joonwoo Park451dca32014-04-02 11:47:03 -0700599{
600 CLK_LOOKUP("sdc1_iface_clk", gcc_sdcc1_ahb_clk.c),
601 CLK_LOOKUP("sdc1_core_clk", gcc_sdcc1_apps_clk.c),
Runmin Wangdc8e9732016-10-06 11:14:08 -0700602 CLK_LOOKUP("sdc1_core_clk_sdxhedgehog", gcc_sdcc1_apps_clk_sdxhedgehog.c),
Joonwoo Park451dca32014-04-02 11:47:03 -0700603
Channagoud Kadabi1b69e482014-09-23 15:20:22 -0700604 CLK_LOOKUP("uart3_iface_clk", gcc_blsp1_ahb_clk.c),
605 CLK_LOOKUP("uart3_core_clk", gcc_blsp1_uart3_apps_clk.c),
Joonwoo Park451dca32014-04-02 11:47:03 -0700606
Joonwoo Park451dca32014-04-02 11:47:03 -0700607 CLK_LOOKUP("usb30_iface_clk", gcc_sys_noc_usb30_axi_clk.c),
608 CLK_LOOKUP("usb30_master_clk", gcc_usb30_master_clk.c),
Runmin Wangdc8e9732016-10-06 11:14:08 -0700609 CLK_LOOKUP("usb30_master_clk_sdxhedgehog", gcc_usb30_master_clk_sdxhedgehog.c),
Joonwoo Park451dca32014-04-02 11:47:03 -0700610 CLK_LOOKUP("usb30_pipe_clk", gcc_usb30_pipe_clk.c),
Channagoud Kadabifdfee232015-10-07 11:55:47 -0700611 CLK_LOOKUP("usb30_pipe_clk_mdmcalifornium", gcc_usb30_pipe_clk_mdmcalifornium.c),
Runmin Wangdc8e9732016-10-06 11:14:08 -0700612 CLK_LOOKUP("usb30_pipe_clk_sdxhedgehog", gcc_usb30_pipe_clk_sdxhedgehog.c),
Joonwoo Park451dca32014-04-02 11:47:03 -0700613 CLK_LOOKUP("usb30_aux_clk", gcc_usb30_aux_clk.c),
614
Joonwoo Park76641c72014-05-22 16:37:10 -0700615 CLK_LOOKUP("usb2b_phy_sleep_clk", gcc_usb2a_phy_sleep_clk.c),
Joonwoo Park451dca32014-04-02 11:47:03 -0700616 CLK_LOOKUP("usb30_phy_reset", gcc_usb30_phy_reset.c),
617
Channagoud Kadabifdfee232015-10-07 11:55:47 -0700618 CLK_LOOKUP("usb30_mock_utmi_clk", gcc_usb30_mock_utmi_clk.c),
Runmin Wangdc8e9732016-10-06 11:14:08 -0700619 CLK_LOOKUP("usb30_mock_utmi_clk_sdxhedgehog", gcc_usb30_mock_utmi_clk_sdxhedgehog.c),
Joonwoo Park451dca32014-04-02 11:47:03 -0700620 CLK_LOOKUP("usb_phy_cfg_ahb_clk", gcc_usb_phy_cfg_ahb_clk.c),
Channagoud Kadabifdfee232015-10-07 11:55:47 -0700621 CLK_LOOKUP("usb30_sleep_clk", gcc_usb30_sleep_clk.c),
vijay kumar7d06bbb2015-11-24 13:04:55 +0530622 CLK_LOOKUP("ce1_ahb_clk", gcc_ce1_ahb_clk.c),
623 CLK_LOOKUP("ce1_axi_clk", gcc_ce1_axi_clk.c),
624 CLK_LOOKUP("ce1_core_clk", gcc_ce1_clk.c),
625 CLK_LOOKUP("ce1_src_clk", ce1_clk_src.c),
Joonwoo Park451dca32014-04-02 11:47:03 -0700626};
627
628void platform_clock_init(void)
629{
anisha agarwaldd04af62014-11-17 10:57:49 -0800630 clk_init(msm_clocks_9640, ARRAY_SIZE(msm_clocks_9640));
Joonwoo Park451dca32014-04-02 11:47:03 -0700631}