blob: 33dcd9f270f1ea2c613f411aa9b951faa6c37309 [file] [log] [blame]
Syed Rameez Mustafa3971c142013-01-09 19:04:53 -08001/* Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07002 *
3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License version 2 and
5 * only version 2 as published by the Free Software Foundation.
6 *
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
11 */
12
13#include <linux/kernel.h>
14#include <linux/init.h>
15#include <linux/err.h>
16#include <linux/ctype.h>
17#include <linux/io.h>
18#include <linux/spinlock.h>
19#include <linux/delay.h>
20#include <linux/clk.h>
21#include <linux/iopoll.h>
Vikram Mulukutlaf7c52d32013-01-31 11:39:58 -080022#include <linux/regulator/consumer.h>
Vikram Mulukutlab13abe42012-10-03 11:38:48 -070023
24#include <mach/rpm-regulator-smd.h>
25#include <mach/socinfo.h>
26#include <mach/rpm-smd.h>
27
28#include "clock-local2.h"
29#include "clock-pll.h"
30#include "clock-rpm.h"
31#include "clock-voter.h"
32#include "clock.h"
Vikram Mulukutlae03b4b62013-03-20 17:45:37 -070033#include "clock-dsi-8610.h"
Vikram Mulukutlab13abe42012-10-03 11:38:48 -070034
35enum {
36 GCC_BASE,
37 MMSS_BASE,
38 LPASS_BASE,
39 APCS_BASE,
Vikram Mulukutla4157cca2013-01-24 15:42:41 -080040 APCS_PLL_BASE,
Vikram Mulukutlab13abe42012-10-03 11:38:48 -070041 N_BASES,
42};
43
44static void __iomem *virt_bases[N_BASES];
45
46#define GCC_REG_BASE(x) (void __iomem *)(virt_bases[GCC_BASE] + (x))
47#define MMSS_REG_BASE(x) (void __iomem *)(virt_bases[MMSS_BASE] + (x))
48#define LPASS_REG_BASE(x) (void __iomem *)(virt_bases[LPASS_BASE] + (x))
49#define APCS_REG_BASE(x) (void __iomem *)(virt_bases[APCS_BASE] + (x))
50
51#define GPLL0_MODE 0x0000
52#define GPLL0_L_VAL 0x0004
53#define GPLL0_M_VAL 0x0008
54#define GPLL0_N_VAL 0x000C
55#define GPLL0_USER_CTL 0x0010
56#define GPLL0_STATUS 0x001C
57#define GPLL2_MODE 0x0080
58#define GPLL2_L_VAL 0x0084
59#define GPLL2_M_VAL 0x0088
60#define GPLL2_N_VAL 0x008C
61#define GPLL2_USER_CTL 0x0090
62#define GPLL2_STATUS 0x009C
63#define CONFIG_NOC_BCR 0x0140
64#define MMSS_BCR 0x0240
65#define MMSS_NOC_CFG_AHB_CBCR 0x024C
66#define MSS_CFG_AHB_CBCR 0x0280
67#define MSS_Q6_BIMC_AXI_CBCR 0x0284
68#define USB_HS_BCR 0x0480
69#define USB_HS_SYSTEM_CBCR 0x0484
70#define USB_HS_AHB_CBCR 0x0488
71#define USB_HS_SYSTEM_CMD_RCGR 0x0490
72#define USB2A_PHY_BCR 0x04A8
73#define USB2A_PHY_SLEEP_CBCR 0x04AC
74#define SDCC1_BCR 0x04C0
75#define SDCC1_APPS_CMD_RCGR 0x04D0
76#define SDCC1_APPS_CBCR 0x04C4
77#define SDCC1_AHB_CBCR 0x04C8
78#define SDCC2_BCR 0x0500
79#define SDCC2_APPS_CMD_RCGR 0x0510
80#define SDCC2_APPS_CBCR 0x0504
81#define SDCC2_AHB_CBCR 0x0508
82#define BLSP1_BCR 0x05C0
83#define BLSP1_AHB_CBCR 0x05C4
84#define BLSP1_QUP1_BCR 0x0640
85#define BLSP1_QUP1_SPI_APPS_CBCR 0x0644
86#define BLSP1_QUP1_I2C_APPS_CBCR 0x0648
87#define BLSP1_QUP1_SPI_APPS_CMD_RCGR 0x064C
88#define BLSP1_UART1_BCR 0x0680
89#define BLSP1_UART1_APPS_CBCR 0x0684
90#define BLSP1_UART1_SIM_CBCR 0x0688
91#define BLSP1_UART1_APPS_CMD_RCGR 0x068C
92#define BLSP1_QUP2_BCR 0x06C0
93#define BLSP1_QUP2_SPI_APPS_CBCR 0x06C4
94#define BLSP1_QUP2_I2C_APPS_CBCR 0x06C8
95#define BLSP1_QUP2_SPI_APPS_CMD_RCGR 0x06CC
96#define BLSP1_UART2_BCR 0x0700
97#define BLSP1_UART2_APPS_CBCR 0x0704
98#define BLSP1_UART2_SIM_CBCR 0x0708
99#define BLSP1_UART2_APPS_CMD_RCGR 0x070C
100#define BLSP1_QUP3_BCR 0x0740
101#define BLSP1_QUP3_SPI_APPS_CBCR 0x0744
102#define BLSP1_QUP3_I2C_APPS_CBCR 0x0748
103#define BLSP1_QUP3_SPI_APPS_CMD_RCGR 0x074C
104#define BLSP1_UART3_BCR 0x0780
105#define BLSP1_UART3_APPS_CBCR 0x0784
106#define BLSP1_UART3_SIM_CBCR 0x0788
107#define BLSP1_UART3_APPS_CMD_RCGR 0x078C
108#define BLSP1_QUP4_BCR 0x07C0
109#define BLSP1_QUP4_SPI_APPS_CBCR 0x07C4
110#define BLSP1_QUP4_I2C_APPS_CBCR 0x07C8
111#define BLSP1_QUP4_SPI_APPS_CMD_RCGR 0x07CC
112#define BLSP1_UART4_BCR 0x0800
113#define BLSP1_UART4_APPS_CBCR 0x0804
114#define BLSP1_UART4_SIM_CBCR 0x0808
115#define BLSP1_UART4_APPS_CMD_RCGR 0x080C
116#define BLSP1_QUP5_BCR 0x0840
117#define BLSP1_QUP5_SPI_APPS_CBCR 0x0844
118#define BLSP1_QUP5_I2C_APPS_CBCR 0x0848
119#define BLSP1_QUP5_SPI_APPS_CMD_RCGR 0x084C
120#define BLSP1_UART5_BCR 0x0880
121#define BLSP1_UART5_APPS_CBCR 0x0884
122#define BLSP1_UART5_SIM_CBCR 0x0888
123#define BLSP1_UART5_APPS_CMD_RCGR 0x088C
124#define BLSP1_QUP6_BCR 0x08C0
125#define BLSP1_QUP6_SPI_APPS_CBCR 0x08C4
126#define BLSP1_QUP6_I2C_APPS_CBCR 0x08C8
127#define BLSP1_QUP6_SPI_APPS_CMD_RCGR 0x08CC
128#define BLSP1_UART6_BCR 0x0900
129#define BLSP1_UART6_APPS_CBCR 0x0904
130#define BLSP1_UART6_SIM_CBCR 0x0908
131#define BLSP1_UART6_APPS_CMD_RCGR 0x090C
132#define PDM_BCR 0x0CC0
133#define PDM_AHB_CBCR 0x0CC4
134#define PDM2_CBCR 0x0CCC
135#define PDM2_CMD_RCGR 0x0CD0
136#define PRNG_BCR 0x0D00
137#define PRNG_AHB_CBCR 0x0D04
138#define BOOT_ROM_BCR 0x0E00
139#define BOOT_ROM_AHB_CBCR 0x0E04
140#define CE1_BCR 0x1040
141#define CE1_CMD_RCGR 0x1050
142#define CE1_CBCR 0x1044
143#define CE1_AXI_CBCR 0x1048
144#define CE1_AHB_CBCR 0x104C
145#define COPSS_SMMU_AHB_CBCR 0x015C
146#define LPSS_SMMU_AHB_CBCR 0x0158
Vikram Mulukutla55318acb2013-04-15 17:47:34 -0700147#define BIMC_SMMU_CBCR 0x1120
Vikram Mulukutlab13abe42012-10-03 11:38:48 -0700148#define LPASS_Q6_AXI_CBCR 0x11C0
149#define APCS_GPLL_ENA_VOTE 0x1480
150#define APCS_CLOCK_BRANCH_ENA_VOTE 0x1484
151#define APCS_CLOCK_SLEEP_ENA_VOTE 0x1488
152#define GP1_CBCR 0x1900
153#define GP1_CMD_RCGR 0x1904
154#define GP2_CBCR 0x1940
155#define GP2_CMD_RCGR 0x1944
156#define GP3_CBCR 0x1980
157#define GP3_CMD_RCGR 0x1984
158#define XO_CBCR 0x0034
159
160#define MMPLL0_PLL_MODE 0x0000
161#define MMPLL0_PLL_L_VAL 0x0004
162#define MMPLL0_PLL_M_VAL 0x0008
163#define MMPLL0_PLL_N_VAL 0x000C
164#define MMPLL0_PLL_USER_CTL 0x0010
165#define MMPLL0_PLL_STATUS 0x001C
166#define MMSS_PLL_VOTE_APCS_REG 0x0100
167#define MMPLL1_PLL_MODE 0x4100
168#define MMPLL1_PLL_L_VAL 0x4104
169#define MMPLL1_PLL_M_VAL 0x4108
170#define MMPLL1_PLL_N_VAL 0x410C
171#define MMPLL1_PLL_USER_CTL 0x4110
172#define MMPLL1_PLL_STATUS 0x411C
173#define DSI_PCLK_CMD_RCGR 0x2000
174#define DSI_CMD_RCGR 0x2020
175#define MDP_VSYNC_CMD_RCGR 0x2080
176#define DSI_BYTE_CMD_RCGR 0x2120
177#define DSI_ESC_CMD_RCGR 0x2160
178#define DSI_BCR 0x2200
179#define DSI_BYTE_BCR 0x2204
180#define DSI_ESC_BCR 0x2208
181#define DSI_AHB_BCR 0x220C
182#define DSI_PCLK_BCR 0x2214
183#define MDP_LCDC_BCR 0x2218
184#define MDP_DSI_BCR 0x221C
185#define MDP_VSYNC_BCR 0x2220
186#define MDP_AXI_BCR 0x2224
187#define MDP_AHB_BCR 0x2228
188#define MDP_AXI_CBCR 0x2314
189#define MDP_VSYNC_CBCR 0x231C
190#define MDP_AHB_CBCR 0x2318
191#define DSI_PCLK_CBCR 0x233C
192#define GMEM_GFX3D_CBCR 0x4038
193#define MDP_LCDC_CBCR 0x2340
194#define MDP_DSI_CBCR 0x2320
195#define DSI_CBCR 0x2324
196#define DSI_BYTE_CBCR 0x2328
197#define DSI_ESC_CBCR 0x232C
198#define DSI_AHB_CBCR 0x2330
199#define CSI0PHYTIMER_CMD_RCGR 0x3000
200#define CSI0PHYTIMER_BCR 0x3020
201#define CSI0PHYTIMER_CBCR 0x3024
202#define CSI1PHYTIMER_CMD_RCGR 0x3030
203#define CSI1PHYTIMER_BCR 0x3050
204#define CSI1PHYTIMER_CBCR 0x3054
205#define CSI0_CMD_RCGR 0x3090
206#define CSI0_BCR 0x30B0
207#define CSI0_CBCR 0x30B4
208#define CSI_AHB_BCR 0x30B8
209#define CSI_AHB_CBCR 0x30BC
210#define CSI0PHY_BCR 0x30C0
211#define CSI0PHY_CBCR 0x30C4
212#define CSI0RDI_BCR 0x30D0
213#define CSI0RDI_CBCR 0x30D4
214#define CSI0PIX_BCR 0x30E0
215#define CSI0PIX_CBCR 0x30E4
216#define CSI1_CMD_RCGR 0x3100
217#define CSI1_BCR 0x3120
218#define CSI1_CBCR 0x3124
219#define CSI1PHY_BCR 0x3130
220#define CSI1PHY_CBCR 0x3134
221#define CSI1RDI_BCR 0x3140
222#define CSI1RDI_CBCR 0x3144
223#define CSI1PIX_BCR 0x3150
224#define CSI1PIX_CBCR 0x3154
225#define MCLK0_CMD_RCGR 0x3360
226#define MCLK0_BCR 0x3380
227#define MCLK0_CBCR 0x3384
228#define MCLK1_CMD_RCGR 0x3390
229#define MCLK1_BCR 0x33B0
230#define MCLK1_CBCR 0x33B4
231#define VFE_CMD_RCGR 0x3600
232#define VFE_BCR 0x36A0
233#define VFE_AHB_BCR 0x36AC
234#define VFE_AXI_BCR 0x36B0
235#define VFE_CBCR 0x36A8
236#define VFE_AHB_CBCR 0x36B8
237#define VFE_AXI_CBCR 0x36BC
238#define CSI_VFE_BCR 0x3700
239#define CSI_VFE_CBCR 0x3704
240#define GFX3D_CMD_RCGR 0x4000
241#define OXILI_GFX3D_CBCR 0x4028
242#define OXILI_GFX3D_BCR 0x4030
Matt Wagantall8ce3c462013-07-03 19:24:53 -0700243#define GMEM_GFX3D_BCR 0x4040
Vikram Mulukutlab13abe42012-10-03 11:38:48 -0700244#define OXILI_AHB_BCR 0x4044
245#define OXILI_AHB_CBCR 0x403C
246#define AHB_CMD_RCGR 0x5000
247#define MMSSNOCAHB_BCR 0x5020
248#define MMSSNOCAHB_BTO_BCR 0x5030
249#define MMSS_MISC_AHB_BCR 0x5034
250#define MMSS_MMSSNOC_AHB_CBCR 0x5024
251#define MMSS_MMSSNOC_BTO_AHB_CBCR 0x5028
252#define MMSS_MISC_AHB_CBCR 0x502C
253#define AXI_CMD_RCGR 0x5040
254#define MMSSNOCAXI_BCR 0x5060
255#define MMSS_S0_AXI_BCR 0x5068
256#define MMSS_S0_AXI_CBCR 0x5064
257#define MMSS_MMSSNOC_AXI_CBCR 0x506C
258#define BIMC_GFX_BCR 0x5090
259#define BIMC_GFX_CBCR 0x5094
Vikram Mulukutla8964a382013-04-10 14:30:50 -0700260#define MMSS_CAMSS_MISC 0x3718
Vikram Mulukutlab13abe42012-10-03 11:38:48 -0700261
262#define AUDIO_CORE_GDSCR 0x7000
263#define SPDM_BCR 0x1000
264#define LPAAUDIO_PLL_MODE 0x0000
265#define LPAAUDIO_PLL_L_VAL 0x0004
266#define LPAAUDIO_PLL_M_VAL 0x0008
267#define LPAAUDIO_PLL_N_VAL 0x000C
268#define LPAAUDIO_PLL_USER_CTL 0x0010
269#define LPAAUDIO_PLL_STATUS 0x001C
270#define LPAQ6_PLL_MODE 0x1000
271#define LPAQ6_PLL_USER_CTL 0x1010
272#define LPAQ6_PLL_STATUS 0x101C
273#define LPA_PLL_VOTE_APPS 0x2000
274#define AUDIO_CORE_BCR_SLP_CBCR 0x4004
275#define Q6SS_BCR_SLP_CBCR 0x6004
276#define AUDIO_CORE_GDSC_XO_CBCR 0x7004
277#define AUDIO_CORE_LPAIF_DMA_CBCR 0x9000
278#define AUDIO_CORE_LPAIF_CSR_CBCR 0x9004
279#define LPAIF_SPKR_CMD_RCGR 0xA000
280#define AUDIO_CORE_LPAIF_CODEC_SPKR_OSR_CBCR 0xA014
281#define AUDIO_CORE_LPAIF_CODEC_SPKR_IBIT_CBCR 0xA018
282#define AUDIO_CORE_LPAIF_CODEC_SPKR_EBIT_CBCR 0xA01C
283#define LPAIF_PRI_CMD_RCGR 0xB000
284#define AUDIO_CORE_LPAIF_PRI_OSR_CBCR 0xB014
285#define AUDIO_CORE_LPAIF_PRI_IBIT_CBCR 0xB018
286#define AUDIO_CORE_LPAIF_PRI_EBIT_CBCR 0xB01C
287#define LPAIF_SEC_CMD_RCGR 0xC000
288#define AUDIO_CORE_LPAIF_SEC_OSR_CBCR 0xC014
289#define AUDIO_CORE_LPAIF_SEC_IBIT_CBCR 0xC018
290#define AUDIO_CORE_LPAIF_SEC_EBIT_CBCR 0xC01C
291#define LPAIF_TER_CMD_RCGR 0xD000
292#define AUDIO_CORE_LPAIF_TER_OSR_CBCR 0xD014
293#define AUDIO_CORE_LPAIF_TER_IBIT_CBCR 0xD018
294#define AUDIO_CORE_LPAIF_TER_EBIT_CBCR 0xD01C
295#define LPAIF_QUAD_CMD_RCGR 0xE000
296#define AUDIO_CORE_LPAIF_QUAD_OSR_CBCR 0xE014
297#define AUDIO_CORE_LPAIF_QUAD_IBIT_CBCR 0xE018
298#define AUDIO_CORE_LPAIF_QUAD_EBIT_CBCR 0xE01C
299#define LPAIF_PCM0_CMD_RCGR 0xF000
300#define AUDIO_CORE_LPAIF_PCM0_IBIT_CBCR 0xF014
301#define AUDIO_CORE_LPAIF_PCM0_EBIT_CBCR 0xF018
302#define LPAIF_PCM1_CMD_RCGR 0x10000
303#define AUDIO_CORE_LPAIF_PCM1_IBIT_CBCR 0x10014
304#define AUDIO_CORE_LPAIF_PCM1_EBIT_CBCR 0x10018
305#define SLIMBUS_CMD_RCGR 0x12000
306#define AUDIO_CORE_SLIMBUS_CORE_CBCR 0x12014
307#define LPAIF_PCMOE_CMD_RCGR 0x13000
308#define AUDIO_CORE_LPAIF_PCM_DATA_OE_CBCR 0x13014
309#define Q6CORE_CMD_RCGR 0x14000
310#define SLEEP_CMD_RCGR 0x15000
311#define SPDM_CMD_RCGR 0x16000
312#define AUDIO_WRAPPER_SPDM_CBCR 0x16014
313#define XO_CMD_RCGR 0x17000
314#define AHBFABRIC_CMD_RCGR 0x18000
315#define AUDIO_CORE_LPM_CBCR 0x19000
316#define AUDIO_CORE_AVSYNC_CSR_CBCR 0x1A000
317#define AUDIO_CORE_AVSYNC_XO_CBCR 0x1A004
318#define AUDIO_CORE_AVSYNC_BT_XO_CBCR 0x1A008
319#define AUDIO_CORE_AVSYNC_FM_XO_CBCR 0x1A00C
320#define AUDIO_CORE_IXFABRIC_CBCR 0x1B000
321#define AUDIO_WRAPPER_EFABRIC_CBCR 0x1B004
322#define AUDIO_CORE_TCM_SLAVE_CBCR 0x1C000
323#define AUDIO_CORE_CSR_CBCR 0x1D000
324#define AUDIO_CORE_DML_CBCR 0x1E000
325#define AUDIO_CORE_SYSNOC_CBCR 0x1F000
326#define AUDIO_WRAPPER_SYSNOC_SWAY_CBCR 0x1F004
327#define AUDIO_CORE_TIMEOUT_CBCR 0x20000
328#define AUDIO_WRAPPER_TIMEOUT_CBCR 0x20004
329#define AUDIO_CORE_SECURITY_CBCR 0x21000
330#define AUDIO_WRAPPER_SECURITY_CBCR 0x21004
331#define Q6SS_AHB_LFABIF_CBCR 0x22000
332#define Q6SS_AHBM_CBCR 0x22004
333#define AUDIO_WRAPPER_LCC_CSR_CBCR 0x23000
334#define AUDIO_WRAPPER_BR_CBCR 0x24000
335#define AUDIO_WRAPPER_SMEM_CBCR 0x25000
336#define Q6SS_XO_CBCR 0x26000
337#define Q6SS_SLP_CBCR 0x26004
338#define LPASS_Q6SS_BCR 0x6000
339#define AUDIO_WRAPPER_STM_XO_CBCR 0x27000
340#define AUDIO_CORE_IXFABRIC_SPDMTM_CSR_CBCR 0x28000
341#define AUDIO_WRAPPER_EFABRIC_SPDMTM_CSR_CBCR 0x28004
342
343/* Mux source select values */
344#define gcc_xo_source_val 0
345#define gpll0_source_val 1
346#define gnd_source_val 5
347#define mmpll0_mm_source_val 1
348#define mmpll1_mm_source_val 2
349#define gpll0_mm_source_val 5
350#define gcc_xo_mm_source_val 0
351#define mm_gnd_source_val 6
Vikram Mulukutlab13abe42012-10-03 11:38:48 -0700352#define dsipll_mm_source_val 1
353
354#define F(f, s, div, m, n) \
355 { \
356 .freq_hz = (f), \
357 .src_clk = &s##_clk_src.c, \
358 .m_val = (m), \
359 .n_val = ~((n)-(m)) * !!(n), \
360 .d_val = ~(n),\
361 .div_src_val = BVAL(4, 0, (int)(2*(div) - 1)) \
362 | BVAL(10, 8, s##_source_val), \
363 }
364
Vikram Mulukutla4157cca2013-01-24 15:42:41 -0800365#define F_APCS_PLL(f, l, m, n, pre_div, post_div, vco) \
366 { \
367 .freq_hz = (f), \
368 .l_val = (l), \
369 .m_val = (m), \
370 .n_val = (n), \
371 .pre_div_val = BVAL(12, 12, (pre_div)), \
372 .post_div_val = BVAL(9, 8, (post_div)), \
373 .vco_val = BVAL(29, 28, (vco)), \
374 }
375
Vikram Mulukutlab13abe42012-10-03 11:38:48 -0700376#define F_MM(f, s, div, m, n) \
377 { \
378 .freq_hz = (f), \
379 .src_clk = &s##_clk_src.c, \
380 .m_val = (m), \
381 .n_val = ~((n)-(m)) * !!(n), \
382 .d_val = ~(n),\
383 .div_src_val = BVAL(4, 0, (int)(2*(div) - 1)) \
384 | BVAL(10, 8, s##_mm_source_val), \
385 }
386
387#define F_HDMI(f, s, div, m, n) \
388 { \
389 .freq_hz = (f), \
390 .src_clk = &s##_clk_src, \
391 .m_val = (m), \
392 .n_val = ~((n)-(m)) * !!(n), \
393 .d_val = ~(n),\
394 .div_src_val = BVAL(4, 0, (int)(2*(div) - 1)) \
395 | BVAL(10, 8, s##_mm_source_val), \
396 }
397
398#define F_MDSS(f, s, div, m, n) \
399 { \
400 .freq_hz = (f), \
401 .m_val = (m), \
402 .n_val = ~((n)-(m)) * !!(n), \
403 .d_val = ~(n),\
404 .div_src_val = BVAL(4, 0, (int)(2*(div) - 1)) \
405 | BVAL(10, 8, s##_mm_source_val), \
406 }
407
Vikram Mulukutlab13abe42012-10-03 11:38:48 -0700408#define VDD_DIG_FMAX_MAP1(l1, f1) \
409 .vdd_class = &vdd_dig, \
410 .fmax = (unsigned long[VDD_DIG_NUM]) { \
411 [VDD_DIG_##l1] = (f1), \
412 }, \
413 .num_fmax = VDD_DIG_NUM
414#define VDD_DIG_FMAX_MAP2(l1, f1, l2, f2) \
415 .vdd_class = &vdd_dig, \
416 .fmax = (unsigned long[VDD_DIG_NUM]) { \
417 [VDD_DIG_##l1] = (f1), \
418 [VDD_DIG_##l2] = (f2), \
419 }, \
420 .num_fmax = VDD_DIG_NUM
421#define VDD_DIG_FMAX_MAP3(l1, f1, l2, f2, l3, f3) \
422 .vdd_class = &vdd_dig, \
423 .fmax = (unsigned long[VDD_DIG_NUM]) { \
424 [VDD_DIG_##l1] = (f1), \
425 [VDD_DIG_##l2] = (f2), \
426 [VDD_DIG_##l3] = (f3), \
427 }, \
428 .num_fmax = VDD_DIG_NUM
429
430enum vdd_dig_levels {
431 VDD_DIG_NONE,
432 VDD_DIG_LOW,
433 VDD_DIG_NOMINAL,
434 VDD_DIG_HIGH,
435 VDD_DIG_NUM
436};
437
Junjie Wubb5a79e2013-05-15 13:12:39 -0700438static int vdd_corner[] = {
439 RPM_REGULATOR_CORNER_NONE, /* VDD_DIG_NONE */
440 RPM_REGULATOR_CORNER_SVS_SOC, /* VDD_DIG_LOW */
441 RPM_REGULATOR_CORNER_NORMAL, /* VDD_DIG_NOMINAL */
442 RPM_REGULATOR_CORNER_SUPER_TURBO, /* VDD_DIG_HIGH */
Vikram Mulukutlab13abe42012-10-03 11:38:48 -0700443};
444
Patrick Daly653c0b52013-04-16 17:18:28 -0700445static DEFINE_VDD_REGULATORS(vdd_dig, VDD_DIG_NUM, 1, vdd_corner, NULL);
Vikram Mulukutlab13abe42012-10-03 11:38:48 -0700446
447#define RPM_MISC_CLK_TYPE 0x306b6c63
448#define RPM_BUS_CLK_TYPE 0x316b6c63
449#define RPM_MEM_CLK_TYPE 0x326b6c63
450
451#define RPM_SMD_KEY_ENABLE 0x62616E45
452
453#define CXO_ID 0x0
454#define QDSS_ID 0x1
455#define RPM_SCALING_ENABLE_ID 0x2
456
457#define PNOC_ID 0x0
458#define SNOC_ID 0x1
459#define CNOC_ID 0x2
460#define MMSSNOC_AHB_ID 0x3
461
462#define BIMC_ID 0x0
463#define OXILI_ID 0x1
464#define OCMEM_ID 0x2
465
466#define D0_ID 1
467#define D1_ID 2
Vikram Mulukutla7e5b3112013-04-15 16:32:40 -0700468#define A0_ID 4
469#define A1_ID 5
470#define A2_ID 6
Vikram Mulukutlab13abe42012-10-03 11:38:48 -0700471#define DIFF_CLK_ID 7
472#define DIV_CLK_ID 11
473
474DEFINE_CLK_RPM_SMD(pnoc_clk, pnoc_a_clk, RPM_BUS_CLK_TYPE, PNOC_ID, NULL);
475DEFINE_CLK_RPM_SMD(snoc_clk, snoc_a_clk, RPM_BUS_CLK_TYPE, SNOC_ID, NULL);
476DEFINE_CLK_RPM_SMD(cnoc_clk, cnoc_a_clk, RPM_BUS_CLK_TYPE, CNOC_ID, NULL);
477DEFINE_CLK_RPM_SMD(mmssnoc_ahb_clk, mmssnoc_ahb_a_clk, RPM_BUS_CLK_TYPE,
478 MMSSNOC_AHB_ID, NULL);
479
480DEFINE_CLK_RPM_SMD(bimc_clk, bimc_a_clk, RPM_MEM_CLK_TYPE, BIMC_ID, NULL);
481
482DEFINE_CLK_RPM_SMD_BRANCH(gcc_xo_clk_src, gcc_xo_a_clk_src,
483 RPM_MISC_CLK_TYPE, CXO_ID, 19200000);
484DEFINE_CLK_RPM_SMD_QDSS(qdss_clk, qdss_a_clk, RPM_MISC_CLK_TYPE, QDSS_ID);
485
486DEFINE_CLK_RPM_SMD_XO_BUFFER(cxo_d0, cxo_d0_a, D0_ID);
487DEFINE_CLK_RPM_SMD_XO_BUFFER(cxo_d1, cxo_d1_a, D1_ID);
488DEFINE_CLK_RPM_SMD_XO_BUFFER(cxo_a0, cxo_a0_a, A0_ID);
489DEFINE_CLK_RPM_SMD_XO_BUFFER(cxo_a1, cxo_a1_a, A1_ID);
490DEFINE_CLK_RPM_SMD_XO_BUFFER(cxo_a2, cxo_a2_a, A2_ID);
491DEFINE_CLK_RPM_SMD_XO_BUFFER(div_clk, div_a_clk, DIV_CLK_ID);
492DEFINE_CLK_RPM_SMD_XO_BUFFER(diff_clk, diff_a_clk, DIFF_CLK_ID);
493
494DEFINE_CLK_RPM_SMD_XO_BUFFER_PINCTRL(cxo_d0_pin, cxo_d0_a_pin, D0_ID);
495DEFINE_CLK_RPM_SMD_XO_BUFFER_PINCTRL(cxo_d1_pin, cxo_d1_a_pin, D1_ID);
496DEFINE_CLK_RPM_SMD_XO_BUFFER_PINCTRL(cxo_a0_pin, cxo_a0_a_pin, A0_ID);
497DEFINE_CLK_RPM_SMD_XO_BUFFER_PINCTRL(cxo_a1_pin, cxo_a1_a_pin, A1_ID);
498DEFINE_CLK_RPM_SMD_XO_BUFFER_PINCTRL(cxo_a2_pin, cxo_a2_a_pin, A2_ID);
499
500static DEFINE_CLK_VOTER(pnoc_msmbus_clk, &pnoc_clk.c, LONG_MAX);
501static DEFINE_CLK_VOTER(snoc_msmbus_clk, &snoc_clk.c, LONG_MAX);
502static DEFINE_CLK_VOTER(cnoc_msmbus_clk, &cnoc_clk.c, LONG_MAX);
503static DEFINE_CLK_VOTER(pnoc_msmbus_a_clk, &pnoc_a_clk.c, LONG_MAX);
504static DEFINE_CLK_VOTER(snoc_msmbus_a_clk, &snoc_a_clk.c, LONG_MAX);
505static DEFINE_CLK_VOTER(cnoc_msmbus_a_clk, &cnoc_a_clk.c, LONG_MAX);
506
507static DEFINE_CLK_VOTER(bimc_msmbus_clk, &bimc_clk.c, LONG_MAX);
508static DEFINE_CLK_VOTER(bimc_msmbus_a_clk, &bimc_a_clk.c, LONG_MAX);
509static DEFINE_CLK_VOTER(bimc_acpu_a_clk, &bimc_a_clk.c, LONG_MAX);
510
Chandra Ramachandranc7c6e382013-07-31 16:34:10 -0700511static DEFINE_CLK_VOTER(pnoc_keepalive_a_clk, &pnoc_a_clk.c, LONG_MAX);
Vikram Mulukutlab13abe42012-10-03 11:38:48 -0700512static DEFINE_CLK_VOTER(pnoc_sps_clk, &pnoc_clk.c, LONG_MAX);
513static DEFINE_CLK_VOTER(pnoc_iommu_clk, &pnoc_clk.c, LONG_MAX);
Vikram Mulukutlab13abe42012-10-03 11:38:48 -0700514
Vikram Mulukutlaae4ae302013-04-24 12:00:28 -0700515static DEFINE_CLK_BRANCH_VOTER(cxo_otg_clk, &gcc_xo_clk_src.c);
516static DEFINE_CLK_BRANCH_VOTER(cxo_lpass_pil_clk, &gcc_xo_clk_src.c);
517static DEFINE_CLK_BRANCH_VOTER(cxo_lpm_clk, &gcc_xo_clk_src.c);
518static DEFINE_CLK_BRANCH_VOTER(cxo_pil_pronto_clk, &gcc_xo_clk_src.c);
519static DEFINE_CLK_BRANCH_VOTER(cxo_mss_pil_clk, &gcc_xo_clk_src.c);
520static DEFINE_CLK_BRANCH_VOTER(cxo_pil_mba_clk, &gcc_xo_clk_src.c);
521static DEFINE_CLK_BRANCH_VOTER(cxo_wlan_clk, &gcc_xo_clk_src.c);
522static DEFINE_CLK_BRANCH_VOTER(cxo_acpu_clk, &gcc_xo_clk_src.c);
523
Vikram Mulukutla4157cca2013-01-24 15:42:41 -0800524static DEFINE_CLK_MEASURE(apc0_m_clk);
525static DEFINE_CLK_MEASURE(apc1_m_clk);
526static DEFINE_CLK_MEASURE(apc2_m_clk);
527static DEFINE_CLK_MEASURE(apc3_m_clk);
528static DEFINE_CLK_MEASURE(l2_m_clk);
529
530#define APCS_SH_PLL_MODE 0x000
531#define APCS_SH_PLL_L_VAL 0x004
532#define APCS_SH_PLL_M_VAL 0x008
533#define APCS_SH_PLL_N_VAL 0x00C
534#define APCS_SH_PLL_USER_CTL 0x010
535#define APCS_SH_PLL_CONFIG_CTL 0x014
536#define APCS_SH_PLL_STATUS 0x01C
537
538enum vdd_sr2_pll_levels {
539 VDD_SR2_PLL_OFF,
Patrick Daly6fb589a2013-03-29 17:55:55 -0700540 VDD_SR2_PLL_SVS,
541 VDD_SR2_PLL_NOM,
542 VDD_SR2_PLL_TUR,
Vikram Mulukutla4157cca2013-01-24 15:42:41 -0800543 VDD_SR2_PLL_NUM
544};
545
Junjie Wubb5a79e2013-05-15 13:12:39 -0700546static int vdd_sr2_levels[] = {
547 0, RPM_REGULATOR_CORNER_NONE, /* VDD_SR2_PLL_OFF */
548 1800000, RPM_REGULATOR_CORNER_SVS_SOC, /* VDD_SR2_PLL_SVS */
549 1800000, RPM_REGULATOR_CORNER_NORMAL, /* VDD_SR2_PLL_NOM */
550 1800000, RPM_REGULATOR_CORNER_SUPER_TURBO, /* VDD_SR2_PLL_TUR */
Patrick Dalyebc26bc2013-02-05 11:49:07 -0800551};
Vikram Mulukutla4157cca2013-01-24 15:42:41 -0800552
Patrick Daly653c0b52013-04-16 17:18:28 -0700553static DEFINE_VDD_REGULATORS(vdd_sr2_pll, VDD_SR2_PLL_NUM, 2,
554 vdd_sr2_levels, NULL);
Vikram Mulukutla4157cca2013-01-24 15:42:41 -0800555
556static struct pll_freq_tbl apcs_pll_freq[] = {
Patrick Daly83806032013-03-25 15:18:24 -0700557 F_APCS_PLL( 768000000, 40, 0x0, 0x1, 0x0, 0x0, 0x0),
Vikram Mulukutla4157cca2013-01-24 15:42:41 -0800558 F_APCS_PLL( 787200000, 41, 0x0, 0x1, 0x0, 0x0, 0x0),
559 F_APCS_PLL( 998400000, 52, 0x0, 0x1, 0x0, 0x0, 0x0),
560 F_APCS_PLL(1190400000, 62, 0x0, 0x1, 0x0, 0x0, 0x0),
561 PLL_F_END
562};
563
564static struct pll_clk a7sspll = {
565 .mode_reg = (void __iomem *)APCS_SH_PLL_MODE,
566 .l_reg = (void __iomem *)APCS_SH_PLL_L_VAL,
567 .m_reg = (void __iomem *)APCS_SH_PLL_M_VAL,
568 .n_reg = (void __iomem *)APCS_SH_PLL_N_VAL,
569 .config_reg = (void __iomem *)APCS_SH_PLL_USER_CTL,
570 .status_reg = (void __iomem *)APCS_SH_PLL_STATUS,
571 .freq_tbl = apcs_pll_freq,
572 .masks = {
573 .vco_mask = BM(29, 28),
574 .pre_div_mask = BIT(12),
575 .post_div_mask = BM(9, 8),
576 .mn_en_mask = BIT(24),
577 .main_output_mask = BIT(0),
578 },
579 .base = &virt_bases[APCS_PLL_BASE],
580 .c = {
Patrick Daly9bdc8a52013-03-21 19:12:40 -0700581 .parent = &gcc_xo_a_clk_src.c,
Vikram Mulukutla4157cca2013-01-24 15:42:41 -0800582 .dbg_name = "a7sspll",
583 .ops = &clk_ops_sr2_pll,
584 .vdd_class = &vdd_sr2_pll,
585 .fmax = (unsigned long [VDD_SR2_PLL_NUM]) {
Patrick Daly6fb589a2013-03-29 17:55:55 -0700586 [VDD_SR2_PLL_SVS] = 1000000000,
587 [VDD_SR2_PLL_NOM] = 1900000000,
Vikram Mulukutla4157cca2013-01-24 15:42:41 -0800588 },
589 .num_fmax = VDD_SR2_PLL_NUM,
590 CLK_INIT(a7sspll.c),
Vikram Mulukutla4157cca2013-01-24 15:42:41 -0800591 },
592};
593
594static unsigned int soft_vote_gpll0;
595
Vikram Mulukutlab13abe42012-10-03 11:38:48 -0700596static struct pll_vote_clk gpll0_clk_src = {
597 .en_reg = (void __iomem *)APCS_GPLL_ENA_VOTE,
598 .en_mask = BIT(0),
599 .status_reg = (void __iomem *)GPLL0_STATUS,
600 .status_mask = BIT(17),
Vikram Mulukutla4157cca2013-01-24 15:42:41 -0800601 .soft_vote = &soft_vote_gpll0,
602 .soft_vote_mask = PLL_SOFT_VOTE_PRIMARY,
Vikram Mulukutlab13abe42012-10-03 11:38:48 -0700603 .base = &virt_bases[GCC_BASE],
604 .c = {
605 .parent = &gcc_xo_clk_src.c,
606 .rate = 600000000,
607 .dbg_name = "gpll0_clk_src",
Vikram Mulukutla4157cca2013-01-24 15:42:41 -0800608 .ops = &clk_ops_pll_acpu_vote,
Vikram Mulukutlab13abe42012-10-03 11:38:48 -0700609 CLK_INIT(gpll0_clk_src.c),
610 },
611};
612
Vikram Mulukutla4157cca2013-01-24 15:42:41 -0800613static struct pll_vote_clk gpll0_ao_clk_src = {
614 .en_reg = (void __iomem *)APCS_GPLL_ENA_VOTE,
615 .en_mask = BIT(0),
616 .status_reg = (void __iomem *)GPLL0_STATUS,
617 .status_mask = BIT(17),
618 .soft_vote = &soft_vote_gpll0,
619 .soft_vote_mask = PLL_SOFT_VOTE_ACPU,
620 .base = &virt_bases[GCC_BASE],
621 .c = {
622 .rate = 600000000,
623 .dbg_name = "gpll0_ao_clk_src",
624 .ops = &clk_ops_pll_acpu_vote,
625 CLK_INIT(gpll0_ao_clk_src.c),
626 },
627};
628
Vikram Mulukutlab13abe42012-10-03 11:38:48 -0700629static struct pll_vote_clk mmpll0_clk_src = {
630 .en_reg = (void __iomem *)MMSS_PLL_VOTE_APCS_REG,
631 .en_mask = BIT(0),
632 .status_reg = (void __iomem *)MMPLL0_PLL_STATUS,
633 .status_mask = BIT(17),
634 .base = &virt_bases[MMSS_BASE],
635 .c = {
636 .parent = &gcc_xo_clk_src.c,
637 .dbg_name = "mmpll0_clk_src",
638 .rate = 800000000,
639 .ops = &clk_ops_pll_vote,
640 CLK_INIT(mmpll0_clk_src.c),
641 },
642};
643
644static struct pll_config_regs mmpll0_regs __initdata = {
645 .l_reg = (void __iomem *)MMPLL0_PLL_L_VAL,
646 .m_reg = (void __iomem *)MMPLL0_PLL_M_VAL,
647 .n_reg = (void __iomem *)MMPLL0_PLL_N_VAL,
648 .config_reg = (void __iomem *)MMPLL0_PLL_USER_CTL,
649 .mode_reg = (void __iomem *)MMPLL0_PLL_MODE,
650 .base = &virt_bases[MMSS_BASE],
651};
652
653static struct pll_clk mmpll1_clk_src = {
654 .mode_reg = (void __iomem *)MMPLL1_PLL_MODE,
655 .status_reg = (void __iomem *)MMPLL1_PLL_STATUS,
656 .base = &virt_bases[MMSS_BASE],
657 .c = {
658 .parent = &gcc_xo_clk_src.c,
659 .dbg_name = "mmpll1_clk_src",
660 .rate = 1200000000,
661 .ops = &clk_ops_local_pll,
662 CLK_INIT(mmpll1_clk_src.c),
663 },
664};
665
666static struct pll_config_regs mmpll1_regs __initdata = {
667 .l_reg = (void __iomem *)MMPLL1_PLL_L_VAL,
668 .m_reg = (void __iomem *)MMPLL1_PLL_M_VAL,
669 .n_reg = (void __iomem *)MMPLL1_PLL_N_VAL,
670 .config_reg = (void __iomem *)MMPLL1_PLL_USER_CTL,
671 .mode_reg = (void __iomem *)MMPLL1_PLL_MODE,
672 .base = &virt_bases[MMSS_BASE],
673};
674
Vikram Mulukutlab13abe42012-10-03 11:38:48 -0700675static struct clk_freq_tbl ftbl_gcc_blsp1_qup1_6_spi_apps_clk[] = {
676 F( 960000, gcc_xo, 10, 1, 2),
677 F( 4800000, gcc_xo, 4, 0, 0),
678 F( 9600000, gcc_xo, 2, 0, 0),
679 F(15000000, gpll0, 10, 1, 4),
680 F(19200000, gcc_xo, 1, 0, 0),
681 F(25000000, gpll0, 12, 1, 2),
682 F(50000000, gpll0, 12, 0, 0),
683 F_END,
684};
685
686static struct rcg_clk blsp1_qup1_spi_apps_clk_src = {
687 .cmd_rcgr_reg = BLSP1_QUP1_SPI_APPS_CMD_RCGR,
688 .set_rate = set_rate_mnd,
689 .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
690 .current_freq = &rcg_dummy_freq,
691 .base = &virt_bases[GCC_BASE],
692 .c = {
693 .dbg_name = "blsp1_qup1_spi_apps_clk_src",
694 .ops = &clk_ops_rcg_mnd,
695 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
696 CLK_INIT(blsp1_qup1_spi_apps_clk_src.c),
697 },
698};
699
700static struct rcg_clk blsp1_qup2_spi_apps_clk_src = {
701 .cmd_rcgr_reg = BLSP1_QUP2_SPI_APPS_CMD_RCGR,
702 .set_rate = set_rate_mnd,
703 .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
704 .current_freq = &rcg_dummy_freq,
705 .base = &virt_bases[GCC_BASE],
706 .c = {
707 .dbg_name = "blsp1_qup2_spi_apps_clk_src",
708 .ops = &clk_ops_rcg_mnd,
709 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
710 CLK_INIT(blsp1_qup2_spi_apps_clk_src.c),
711 },
712};
713
714static struct rcg_clk blsp1_qup3_spi_apps_clk_src = {
715 .cmd_rcgr_reg = BLSP1_QUP3_SPI_APPS_CMD_RCGR,
716 .set_rate = set_rate_mnd,
717 .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
718 .current_freq = &rcg_dummy_freq,
719 .base = &virt_bases[GCC_BASE],
720 .c = {
721 .dbg_name = "blsp1_qup3_spi_apps_clk_src",
722 .ops = &clk_ops_rcg_mnd,
723 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
724 CLK_INIT(blsp1_qup3_spi_apps_clk_src.c),
725 },
726};
727
728static struct rcg_clk blsp1_qup4_spi_apps_clk_src = {
729 .cmd_rcgr_reg = BLSP1_QUP4_SPI_APPS_CMD_RCGR,
730 .set_rate = set_rate_mnd,
731 .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
732 .current_freq = &rcg_dummy_freq,
733 .base = &virt_bases[GCC_BASE],
734 .c = {
735 .dbg_name = "blsp1_qup4_spi_apps_clk_src",
736 .ops = &clk_ops_rcg_mnd,
737 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
738 CLK_INIT(blsp1_qup4_spi_apps_clk_src.c),
739 },
740};
741
742static struct rcg_clk blsp1_qup5_spi_apps_clk_src = {
743 .cmd_rcgr_reg = BLSP1_QUP5_SPI_APPS_CMD_RCGR,
744 .set_rate = set_rate_mnd,
745 .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
746 .current_freq = &rcg_dummy_freq,
747 .base = &virt_bases[GCC_BASE],
748 .c = {
749 .dbg_name = "blsp1_qup5_spi_apps_clk_src",
750 .ops = &clk_ops_rcg_mnd,
751 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
752 CLK_INIT(blsp1_qup5_spi_apps_clk_src.c),
753 },
754};
755
756static struct rcg_clk blsp1_qup6_spi_apps_clk_src = {
757 .cmd_rcgr_reg = BLSP1_QUP6_SPI_APPS_CMD_RCGR,
758 .set_rate = set_rate_mnd,
759 .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
760 .current_freq = &rcg_dummy_freq,
761 .base = &virt_bases[GCC_BASE],
762 .c = {
763 .dbg_name = "blsp1_qup6_spi_apps_clk_src",
764 .ops = &clk_ops_rcg_mnd,
765 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
766 CLK_INIT(blsp1_qup6_spi_apps_clk_src.c),
767 },
768};
769
770static struct clk_freq_tbl ftbl_gcc_blsp1_uart1_6_apps_clk[] = {
771 F( 3686400, gpll0, 1, 96, 15625),
772 F( 7372800, gpll0, 1, 192, 15625),
773 F(14745600, gpll0, 1, 384, 15625),
774 F(16000000, gpll0, 5, 2, 15),
775 F(19200000, gcc_xo, 1, 0, 0),
776 F(24000000, gpll0, 5, 1, 5),
777 F(32000000, gpll0, 1, 4, 75),
778 F(40000000, gpll0, 15, 0, 0),
779 F(46400000, gpll0, 1, 29, 375),
780 F(48000000, gpll0, 12.5, 0, 0),
781 F(51200000, gpll0, 1, 32, 375),
782 F(56000000, gpll0, 1, 7, 75),
783 F(58982400, gpll0, 1, 1536, 15625),
784 F(60000000, gpll0, 10, 0, 0),
785 F_END,
786};
787
788static struct rcg_clk blsp1_uart1_apps_clk_src = {
789 .cmd_rcgr_reg = BLSP1_UART1_APPS_CMD_RCGR,
790 .set_rate = set_rate_mnd,
791 .freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
792 .current_freq = &rcg_dummy_freq,
793 .base = &virt_bases[GCC_BASE],
794 .c = {
795 .dbg_name = "blsp1_uart1_apps_clk_src",
796 .ops = &clk_ops_rcg_mnd,
797 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
798 CLK_INIT(blsp1_uart1_apps_clk_src.c),
799 },
800};
801
802static struct rcg_clk blsp1_uart2_apps_clk_src = {
803 .cmd_rcgr_reg = BLSP1_UART2_APPS_CMD_RCGR,
804 .set_rate = set_rate_mnd,
805 .freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
806 .current_freq = &rcg_dummy_freq,
807 .base = &virt_bases[GCC_BASE],
808 .c = {
809 .dbg_name = "blsp1_uart2_apps_clk_src",
810 .ops = &clk_ops_rcg_mnd,
811 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
812 CLK_INIT(blsp1_uart2_apps_clk_src.c),
813 },
814};
815
816static struct rcg_clk blsp1_uart3_apps_clk_src = {
817 .cmd_rcgr_reg = BLSP1_UART3_APPS_CMD_RCGR,
818 .set_rate = set_rate_mnd,
819 .freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
820 .current_freq = &rcg_dummy_freq,
821 .base = &virt_bases[GCC_BASE],
822 .c = {
823 .dbg_name = "blsp1_uart3_apps_clk_src",
824 .ops = &clk_ops_rcg_mnd,
825 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
826 CLK_INIT(blsp1_uart3_apps_clk_src.c),
827 },
828};
829
830static struct rcg_clk blsp1_uart4_apps_clk_src = {
831 .cmd_rcgr_reg = BLSP1_UART4_APPS_CMD_RCGR,
832 .set_rate = set_rate_mnd,
833 .freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
834 .current_freq = &rcg_dummy_freq,
835 .base = &virt_bases[GCC_BASE],
836 .c = {
837 .dbg_name = "blsp1_uart4_apps_clk_src",
838 .ops = &clk_ops_rcg_mnd,
839 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
840 CLK_INIT(blsp1_uart4_apps_clk_src.c),
841 },
842};
843
844static struct rcg_clk blsp1_uart5_apps_clk_src = {
845 .cmd_rcgr_reg = BLSP1_UART5_APPS_CMD_RCGR,
846 .set_rate = set_rate_mnd,
847 .freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
848 .current_freq = &rcg_dummy_freq,
849 .base = &virt_bases[GCC_BASE],
850 .c = {
851 .dbg_name = "blsp1_uart5_apps_clk_src",
852 .ops = &clk_ops_rcg_mnd,
853 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
854 CLK_INIT(blsp1_uart5_apps_clk_src.c),
855 },
856};
857
858static struct rcg_clk blsp1_uart6_apps_clk_src = {
859 .cmd_rcgr_reg = BLSP1_UART6_APPS_CMD_RCGR,
860 .set_rate = set_rate_mnd,
861 .freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
862 .current_freq = &rcg_dummy_freq,
863 .base = &virt_bases[GCC_BASE],
864 .c = {
865 .dbg_name = "blsp1_uart6_apps_clk_src",
866 .ops = &clk_ops_rcg_mnd,
867 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
868 CLK_INIT(blsp1_uart6_apps_clk_src.c),
869 },
870};
871
872static struct clk_freq_tbl ftbl_gcc_ce1_clk[] = {
873 F(50000000, gpll0, 12, 0, 0),
874 F(100000000, gpll0, 6, 0, 0),
875 F_END,
876};
877
878static struct rcg_clk ce1_clk_src = {
879 .cmd_rcgr_reg = CE1_CMD_RCGR,
880 .set_rate = set_rate_hid,
881 .freq_tbl = ftbl_gcc_ce1_clk,
882 .current_freq = &rcg_dummy_freq,
883 .base = &virt_bases[GCC_BASE],
884 .c = {
885 .dbg_name = "ce1_clk_src",
886 .ops = &clk_ops_rcg,
887 VDD_DIG_FMAX_MAP2(LOW, 50000000, NOMINAL, 100000000),
888 CLK_INIT(ce1_clk_src.c),
889 },
890};
891
892static struct clk_freq_tbl ftbl_gcc_gp1_3_clk[] = {
893 F(19200000, gcc_xo, 1, 0, 0),
894 F_END,
895};
896
897static struct rcg_clk gp1_clk_src = {
898 .cmd_rcgr_reg = GP1_CMD_RCGR,
899 .set_rate = set_rate_mnd,
900 .freq_tbl = ftbl_gcc_gp1_3_clk,
901 .current_freq = &rcg_dummy_freq,
902 .base = &virt_bases[GCC_BASE],
903 .c = {
904 .dbg_name = "gp1_clk_src",
905 .ops = &clk_ops_rcg_mnd,
906 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
907 CLK_INIT(gp1_clk_src.c),
908 },
909};
910
911static struct rcg_clk gp2_clk_src = {
912 .cmd_rcgr_reg = GP2_CMD_RCGR,
913 .set_rate = set_rate_mnd,
914 .freq_tbl = ftbl_gcc_gp1_3_clk,
915 .current_freq = &rcg_dummy_freq,
916 .base = &virt_bases[GCC_BASE],
917 .c = {
918 .dbg_name = "gp2_clk_src",
919 .ops = &clk_ops_rcg_mnd,
920 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
921 CLK_INIT(gp2_clk_src.c),
922 },
923};
924
925static struct rcg_clk gp3_clk_src = {
926 .cmd_rcgr_reg = GP3_CMD_RCGR,
927 .set_rate = set_rate_mnd,
928 .freq_tbl = ftbl_gcc_gp1_3_clk,
929 .current_freq = &rcg_dummy_freq,
930 .base = &virt_bases[GCC_BASE],
931 .c = {
932 .dbg_name = "gp3_clk_src",
933 .ops = &clk_ops_rcg_mnd,
934 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
935 CLK_INIT(gp3_clk_src.c),
936 },
937};
938
939static struct clk_freq_tbl ftbl_gcc_pdm2_clk[] = {
940 F(60000000, gpll0, 10, 0, 0),
941 F_END,
942};
943
944static struct rcg_clk pdm2_clk_src = {
945 .cmd_rcgr_reg = PDM2_CMD_RCGR,
946 .set_rate = set_rate_hid,
947 .freq_tbl = ftbl_gcc_pdm2_clk,
948 .current_freq = &rcg_dummy_freq,
949 .base = &virt_bases[GCC_BASE],
950 .c = {
951 .dbg_name = "pdm2_clk_src",
952 .ops = &clk_ops_rcg,
953 VDD_DIG_FMAX_MAP1(LOW, 120000000),
954 CLK_INIT(pdm2_clk_src.c),
955 },
956};
957
958static struct clk_freq_tbl ftbl_gcc_sdcc1_2_apps_clk[] = {
959 F( 144000, gcc_xo, 16, 3, 25),
960 F( 400000, gcc_xo, 12, 1, 4),
961 F( 20000000, gpll0, 15, 1, 2),
962 F( 25000000, gpll0, 12, 1, 2),
963 F( 50000000, gpll0, 12, 0, 0),
964 F(100000000, gpll0, 6, 0, 0),
965 F(200000000, gpll0, 3, 0, 0),
966 F_END,
967};
968
969static struct rcg_clk sdcc1_apps_clk_src = {
970 .cmd_rcgr_reg = SDCC1_APPS_CMD_RCGR,
971 .set_rate = set_rate_mnd,
972 .freq_tbl = ftbl_gcc_sdcc1_2_apps_clk,
973 .current_freq = &rcg_dummy_freq,
974 .base = &virt_bases[GCC_BASE],
975 .c = {
976 .dbg_name = "sdcc1_apps_clk_src",
977 .ops = &clk_ops_rcg_mnd,
978 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
979 CLK_INIT(sdcc1_apps_clk_src.c),
980 },
981};
982
983static struct rcg_clk sdcc2_apps_clk_src = {
984 .cmd_rcgr_reg = SDCC2_APPS_CMD_RCGR,
985 .set_rate = set_rate_mnd,
986 .freq_tbl = ftbl_gcc_sdcc1_2_apps_clk,
987 .current_freq = &rcg_dummy_freq,
988 .base = &virt_bases[GCC_BASE],
989 .c = {
990 .dbg_name = "sdcc2_apps_clk_src",
991 .ops = &clk_ops_rcg_mnd,
992 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
993 CLK_INIT(sdcc2_apps_clk_src.c),
994 },
995};
996
997static struct clk_freq_tbl ftbl_gcc_usb_hs_system_clk[] = {
998 F(75000000, gpll0, 8, 0, 0),
999 F_END,
1000};
1001
1002static struct rcg_clk usb_hs_system_clk_src = {
1003 .cmd_rcgr_reg = USB_HS_SYSTEM_CMD_RCGR,
1004 .set_rate = set_rate_hid,
1005 .freq_tbl = ftbl_gcc_usb_hs_system_clk,
1006 .current_freq = &rcg_dummy_freq,
1007 .base = &virt_bases[GCC_BASE],
1008 .c = {
1009 .dbg_name = "usb_hs_system_clk_src",
1010 .ops = &clk_ops_rcg,
1011 VDD_DIG_FMAX_MAP2(LOW, 60000000, NOMINAL, 100000000),
1012 CLK_INIT(usb_hs_system_clk_src.c),
1013 },
1014};
1015
1016static struct local_vote_clk gcc_blsp1_ahb_clk = {
1017 .cbcr_reg = BLSP1_AHB_CBCR,
1018 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
1019 .en_mask = BIT(17),
1020 .base = &virt_bases[GCC_BASE],
1021 .c = {
1022 .dbg_name = "gcc_blsp1_ahb_clk",
1023 .ops = &clk_ops_vote,
1024 CLK_INIT(gcc_blsp1_ahb_clk.c),
1025 },
1026};
1027
1028static struct branch_clk gcc_blsp1_qup1_i2c_apps_clk = {
1029 .cbcr_reg = BLSP1_QUP1_I2C_APPS_CBCR,
1030 .has_sibling = 1,
1031 .base = &virt_bases[GCC_BASE],
1032 .c = {
1033 .parent = &gcc_xo_clk_src.c,
1034 .dbg_name = "gcc_blsp1_qup1_i2c_apps_clk",
1035 .ops = &clk_ops_branch,
1036 CLK_INIT(gcc_blsp1_qup1_i2c_apps_clk.c),
1037 },
1038};
1039
1040static struct branch_clk gcc_blsp1_qup1_spi_apps_clk = {
1041 .cbcr_reg = BLSP1_QUP1_SPI_APPS_CBCR,
1042 .has_sibling = 0,
1043 .base = &virt_bases[GCC_BASE],
1044 .c = {
1045 .parent = &blsp1_qup1_spi_apps_clk_src.c,
1046 .dbg_name = "gcc_blsp1_qup1_spi_apps_clk",
1047 .ops = &clk_ops_branch,
1048 CLK_INIT(gcc_blsp1_qup1_spi_apps_clk.c),
1049 },
1050};
1051
1052static struct branch_clk gcc_blsp1_qup2_i2c_apps_clk = {
1053 .cbcr_reg = BLSP1_QUP2_I2C_APPS_CBCR,
1054 .has_sibling = 1,
1055 .base = &virt_bases[GCC_BASE],
1056 .c = {
1057 .parent = &gcc_xo_clk_src.c,
1058 .dbg_name = "gcc_blsp1_qup2_i2c_apps_clk",
1059 .ops = &clk_ops_branch,
1060 CLK_INIT(gcc_blsp1_qup2_i2c_apps_clk.c),
1061 },
1062};
1063
1064static struct branch_clk gcc_blsp1_qup2_spi_apps_clk = {
1065 .cbcr_reg = BLSP1_QUP2_SPI_APPS_CBCR,
1066 .has_sibling = 0,
1067 .base = &virt_bases[GCC_BASE],
1068 .c = {
1069 .parent = &blsp1_qup2_spi_apps_clk_src.c,
1070 .dbg_name = "gcc_blsp1_qup2_spi_apps_clk",
1071 .ops = &clk_ops_branch,
1072 CLK_INIT(gcc_blsp1_qup2_spi_apps_clk.c),
1073 },
1074};
1075
1076static struct branch_clk gcc_blsp1_qup3_i2c_apps_clk = {
1077 .cbcr_reg = BLSP1_QUP3_I2C_APPS_CBCR,
1078 .has_sibling = 1,
1079 .base = &virt_bases[GCC_BASE],
1080 .c = {
1081 .parent = &gcc_xo_clk_src.c,
1082 .dbg_name = "gcc_blsp1_qup3_i2c_apps_clk",
1083 .ops = &clk_ops_branch,
1084 CLK_INIT(gcc_blsp1_qup3_i2c_apps_clk.c),
1085 },
1086};
1087
1088static struct branch_clk gcc_blsp1_qup3_spi_apps_clk = {
1089 .cbcr_reg = BLSP1_QUP3_SPI_APPS_CBCR,
1090 .has_sibling = 0,
1091 .base = &virt_bases[GCC_BASE],
1092 .c = {
1093 .parent = &blsp1_qup3_spi_apps_clk_src.c,
1094 .dbg_name = "gcc_blsp1_qup3_spi_apps_clk",
1095 .ops = &clk_ops_branch,
1096 CLK_INIT(gcc_blsp1_qup3_spi_apps_clk.c),
1097 },
1098};
1099
1100static struct branch_clk gcc_blsp1_qup4_i2c_apps_clk = {
1101 .cbcr_reg = BLSP1_QUP4_I2C_APPS_CBCR,
1102 .has_sibling = 1,
1103 .base = &virt_bases[GCC_BASE],
1104 .c = {
1105 .parent = &gcc_xo_clk_src.c,
1106 .dbg_name = "gcc_blsp1_qup4_i2c_apps_clk",
1107 .ops = &clk_ops_branch,
1108 CLK_INIT(gcc_blsp1_qup4_i2c_apps_clk.c),
1109 },
1110};
1111
1112static struct branch_clk gcc_blsp1_qup4_spi_apps_clk = {
1113 .cbcr_reg = BLSP1_QUP4_SPI_APPS_CBCR,
1114 .has_sibling = 0,
1115 .base = &virt_bases[GCC_BASE],
1116 .c = {
1117 .parent = &blsp1_qup4_spi_apps_clk_src.c,
1118 .dbg_name = "gcc_blsp1_qup4_spi_apps_clk",
1119 .ops = &clk_ops_branch,
1120 CLK_INIT(gcc_blsp1_qup4_spi_apps_clk.c),
1121 },
1122};
1123
1124static struct branch_clk gcc_blsp1_qup5_i2c_apps_clk = {
1125 .cbcr_reg = BLSP1_QUP5_I2C_APPS_CBCR,
1126 .has_sibling = 1,
1127 .base = &virt_bases[GCC_BASE],
1128 .c = {
1129 .parent = &gcc_xo_clk_src.c,
1130 .dbg_name = "gcc_blsp1_qup5_i2c_apps_clk",
1131 .ops = &clk_ops_branch,
1132 CLK_INIT(gcc_blsp1_qup5_i2c_apps_clk.c),
1133 },
1134};
1135
1136static struct branch_clk gcc_blsp1_qup5_spi_apps_clk = {
1137 .cbcr_reg = BLSP1_QUP5_SPI_APPS_CBCR,
1138 .has_sibling = 0,
1139 .base = &virt_bases[GCC_BASE],
1140 .c = {
1141 .parent = &blsp1_qup5_spi_apps_clk_src.c,
1142 .dbg_name = "gcc_blsp1_qup5_spi_apps_clk",
1143 .ops = &clk_ops_branch,
1144 CLK_INIT(gcc_blsp1_qup5_spi_apps_clk.c),
1145 },
1146};
1147
1148static struct branch_clk gcc_blsp1_qup6_i2c_apps_clk = {
1149 .cbcr_reg = BLSP1_QUP6_I2C_APPS_CBCR,
1150 .has_sibling = 1,
1151 .base = &virt_bases[GCC_BASE],
1152 .c = {
1153 .parent = &gcc_xo_clk_src.c,
1154 .dbg_name = "gcc_blsp1_qup6_i2c_apps_clk",
1155 .ops = &clk_ops_branch,
1156 CLK_INIT(gcc_blsp1_qup6_i2c_apps_clk.c),
1157 },
1158};
1159
1160static struct branch_clk gcc_blsp1_qup6_spi_apps_clk = {
1161 .cbcr_reg = BLSP1_QUP6_SPI_APPS_CBCR,
1162 .has_sibling = 0,
1163 .base = &virt_bases[GCC_BASE],
1164 .c = {
1165 .parent = &blsp1_qup6_spi_apps_clk_src.c,
1166 .dbg_name = "gcc_blsp1_qup6_spi_apps_clk",
1167 .ops = &clk_ops_branch,
1168 CLK_INIT(gcc_blsp1_qup6_spi_apps_clk.c),
1169 },
1170};
1171
1172static struct branch_clk gcc_blsp1_uart1_apps_clk = {
1173 .cbcr_reg = BLSP1_UART1_APPS_CBCR,
1174 .has_sibling = 0,
1175 .base = &virt_bases[GCC_BASE],
1176 .c = {
1177 .parent = &blsp1_uart1_apps_clk_src.c,
1178 .dbg_name = "gcc_blsp1_uart1_apps_clk",
1179 .ops = &clk_ops_branch,
1180 CLK_INIT(gcc_blsp1_uart1_apps_clk.c),
1181 },
1182};
1183
1184static struct branch_clk gcc_blsp1_uart2_apps_clk = {
1185 .cbcr_reg = BLSP1_UART2_APPS_CBCR,
1186 .has_sibling = 0,
1187 .base = &virt_bases[GCC_BASE],
1188 .c = {
1189 .parent = &blsp1_uart2_apps_clk_src.c,
1190 .dbg_name = "gcc_blsp1_uart2_apps_clk",
1191 .ops = &clk_ops_branch,
1192 CLK_INIT(gcc_blsp1_uart2_apps_clk.c),
1193 },
1194};
1195
1196static struct branch_clk gcc_blsp1_uart3_apps_clk = {
1197 .cbcr_reg = BLSP1_UART3_APPS_CBCR,
1198 .has_sibling = 0,
1199 .base = &virt_bases[GCC_BASE],
1200 .c = {
1201 .parent = &blsp1_uart3_apps_clk_src.c,
1202 .dbg_name = "gcc_blsp1_uart3_apps_clk",
1203 .ops = &clk_ops_branch,
1204 CLK_INIT(gcc_blsp1_uart3_apps_clk.c),
1205 },
1206};
1207
1208static struct branch_clk gcc_blsp1_uart4_apps_clk = {
1209 .cbcr_reg = BLSP1_UART4_APPS_CBCR,
1210 .has_sibling = 0,
1211 .base = &virt_bases[GCC_BASE],
1212 .c = {
1213 .parent = &blsp1_uart4_apps_clk_src.c,
1214 .dbg_name = "gcc_blsp1_uart4_apps_clk",
1215 .ops = &clk_ops_branch,
1216 CLK_INIT(gcc_blsp1_uart4_apps_clk.c),
1217 },
1218};
1219
1220static struct branch_clk gcc_blsp1_uart5_apps_clk = {
1221 .cbcr_reg = BLSP1_UART5_APPS_CBCR,
1222 .has_sibling = 0,
1223 .base = &virt_bases[GCC_BASE],
1224 .c = {
1225 .parent = &blsp1_uart5_apps_clk_src.c,
1226 .dbg_name = "gcc_blsp1_uart5_apps_clk",
1227 .ops = &clk_ops_branch,
1228 CLK_INIT(gcc_blsp1_uart5_apps_clk.c),
1229 },
1230};
1231
1232static struct branch_clk gcc_blsp1_uart6_apps_clk = {
1233 .cbcr_reg = BLSP1_UART6_APPS_CBCR,
1234 .has_sibling = 0,
1235 .base = &virt_bases[GCC_BASE],
1236 .c = {
1237 .parent = &blsp1_uart6_apps_clk_src.c,
1238 .dbg_name = "gcc_blsp1_uart6_apps_clk",
1239 .ops = &clk_ops_branch,
1240 CLK_INIT(gcc_blsp1_uart6_apps_clk.c),
1241 },
1242};
1243
1244static struct local_vote_clk gcc_boot_rom_ahb_clk = {
1245 .cbcr_reg = BOOT_ROM_AHB_CBCR,
1246 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
1247 .en_mask = BIT(10),
1248 .base = &virt_bases[GCC_BASE],
1249 .c = {
1250 .dbg_name = "gcc_boot_rom_ahb_clk",
1251 .ops = &clk_ops_vote,
1252 CLK_INIT(gcc_boot_rom_ahb_clk.c),
1253 },
1254};
1255
1256static struct local_vote_clk gcc_ce1_ahb_clk = {
1257 .cbcr_reg = CE1_AHB_CBCR,
1258 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
1259 .en_mask = BIT(3),
1260 .base = &virt_bases[GCC_BASE],
1261 .c = {
1262 .dbg_name = "gcc_ce1_ahb_clk",
1263 .ops = &clk_ops_vote,
1264 CLK_INIT(gcc_ce1_ahb_clk.c),
1265 },
1266};
1267
1268static struct local_vote_clk gcc_ce1_axi_clk = {
1269 .cbcr_reg = CE1_AXI_CBCR,
1270 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
1271 .en_mask = BIT(4),
1272 .base = &virt_bases[GCC_BASE],
1273 .c = {
1274 .dbg_name = "gcc_ce1_axi_clk",
1275 .ops = &clk_ops_vote,
1276 CLK_INIT(gcc_ce1_axi_clk.c),
1277 },
1278};
1279
1280static struct local_vote_clk gcc_ce1_clk = {
1281 .cbcr_reg = CE1_CBCR,
1282 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
1283 .en_mask = BIT(5),
1284 .base = &virt_bases[GCC_BASE],
1285 .c = {
1286 .dbg_name = "gcc_ce1_clk",
1287 .ops = &clk_ops_vote,
1288 CLK_INIT(gcc_ce1_clk.c),
1289 },
1290};
1291
1292static struct branch_clk gcc_copss_smmu_ahb_clk = {
1293 .cbcr_reg = COPSS_SMMU_AHB_CBCR,
1294 .has_sibling = 1,
1295 .base = &virt_bases[GCC_BASE],
1296 .c = {
1297 .dbg_name = "gcc_copss_smmu_ahb_clk",
1298 .ops = &clk_ops_branch,
1299 CLK_INIT(gcc_copss_smmu_ahb_clk.c),
1300 },
1301};
1302
1303static struct branch_clk gcc_lpss_smmu_ahb_clk = {
1304 .cbcr_reg = LPSS_SMMU_AHB_CBCR,
1305 .has_sibling = 1,
1306 .base = &virt_bases[GCC_BASE],
1307 .c = {
1308 .dbg_name = "gcc_lpss_smmu_ahb_clk",
1309 .ops = &clk_ops_branch,
1310 CLK_INIT(gcc_lpss_smmu_ahb_clk.c),
1311 },
1312};
1313
1314static struct branch_clk gcc_gp1_clk = {
1315 .cbcr_reg = GP1_CBCR,
1316 .has_sibling = 0,
1317 .base = &virt_bases[GCC_BASE],
1318 .c = {
1319 .parent = &gp1_clk_src.c,
1320 .dbg_name = "gcc_gp1_clk",
1321 .ops = &clk_ops_branch,
1322 CLK_INIT(gcc_gp1_clk.c),
1323 },
1324};
1325
1326static struct branch_clk gcc_gp2_clk = {
1327 .cbcr_reg = GP2_CBCR,
1328 .has_sibling = 0,
1329 .base = &virt_bases[GCC_BASE],
1330 .c = {
1331 .parent = &gp2_clk_src.c,
1332 .dbg_name = "gcc_gp2_clk",
1333 .ops = &clk_ops_branch,
1334 CLK_INIT(gcc_gp2_clk.c),
1335 },
1336};
1337
1338static struct branch_clk gcc_gp3_clk = {
1339 .cbcr_reg = GP3_CBCR,
1340 .has_sibling = 0,
1341 .base = &virt_bases[GCC_BASE],
1342 .c = {
1343 .parent = &gp3_clk_src.c,
1344 .dbg_name = "gcc_gp3_clk",
1345 .ops = &clk_ops_branch,
1346 CLK_INIT(gcc_gp3_clk.c),
1347 },
1348};
1349
1350static struct branch_clk gcc_lpass_q6_axi_clk = {
1351 .cbcr_reg = LPASS_Q6_AXI_CBCR,
1352 .has_sibling = 1,
1353 .base = &virt_bases[GCC_BASE],
Vikram Mulukutla2dfa8b12013-01-15 18:17:10 -08001354 /* FIXME: Remove this once simulation is fixed. */
1355 .halt_check = DELAY,
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07001356 .c = {
1357 .dbg_name = "gcc_lpass_q6_axi_clk",
1358 .ops = &clk_ops_branch,
1359 CLK_INIT(gcc_lpass_q6_axi_clk.c),
1360 },
1361};
1362
1363static struct branch_clk gcc_mmss_noc_cfg_ahb_clk = {
1364 .cbcr_reg = MMSS_NOC_CFG_AHB_CBCR,
1365 .has_sibling = 1,
1366 .base = &virt_bases[GCC_BASE],
1367 .c = {
1368 .dbg_name = "gcc_mmss_noc_cfg_ahb_clk",
1369 .ops = &clk_ops_branch,
1370 CLK_INIT(gcc_mmss_noc_cfg_ahb_clk.c),
1371 },
1372};
1373
1374static struct branch_clk gcc_mss_cfg_ahb_clk = {
1375 .cbcr_reg = MSS_CFG_AHB_CBCR,
1376 .has_sibling = 1,
1377 .base = &virt_bases[GCC_BASE],
1378 .c = {
1379 .dbg_name = "gcc_mss_cfg_ahb_clk",
1380 .ops = &clk_ops_branch,
1381 CLK_INIT(gcc_mss_cfg_ahb_clk.c),
1382 },
1383};
1384
1385static struct branch_clk gcc_mss_q6_bimc_axi_clk = {
1386 .cbcr_reg = MSS_Q6_BIMC_AXI_CBCR,
1387 .has_sibling = 1,
1388 .base = &virt_bases[GCC_BASE],
1389 .c = {
1390 .dbg_name = "gcc_mss_q6_bimc_axi_clk",
1391 .ops = &clk_ops_branch,
1392 CLK_INIT(gcc_mss_q6_bimc_axi_clk.c),
1393 },
1394};
1395
1396static struct branch_clk gcc_pdm2_clk = {
1397 .cbcr_reg = PDM2_CBCR,
1398 .has_sibling = 0,
1399 .base = &virt_bases[GCC_BASE],
1400 .c = {
1401 .parent = &pdm2_clk_src.c,
1402 .dbg_name = "gcc_pdm2_clk",
1403 .ops = &clk_ops_branch,
1404 CLK_INIT(gcc_pdm2_clk.c),
1405 },
1406};
1407
1408static struct branch_clk gcc_pdm_ahb_clk = {
1409 .cbcr_reg = PDM_AHB_CBCR,
1410 .has_sibling = 1,
1411 .base = &virt_bases[GCC_BASE],
1412 .c = {
1413 .dbg_name = "gcc_pdm_ahb_clk",
1414 .ops = &clk_ops_branch,
1415 CLK_INIT(gcc_pdm_ahb_clk.c),
1416 },
1417};
1418
1419static struct local_vote_clk gcc_prng_ahb_clk = {
1420 .cbcr_reg = PRNG_AHB_CBCR,
1421 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
1422 .en_mask = BIT(13),
1423 .base = &virt_bases[GCC_BASE],
1424 .c = {
1425 .dbg_name = "gcc_prng_ahb_clk",
1426 .ops = &clk_ops_vote,
1427 CLK_INIT(gcc_prng_ahb_clk.c),
1428 },
1429};
1430
1431static struct branch_clk gcc_sdcc1_ahb_clk = {
1432 .cbcr_reg = SDCC1_AHB_CBCR,
1433 .has_sibling = 1,
1434 .base = &virt_bases[GCC_BASE],
1435 .c = {
1436 .dbg_name = "gcc_sdcc1_ahb_clk",
1437 .ops = &clk_ops_branch,
1438 CLK_INIT(gcc_sdcc1_ahb_clk.c),
1439 },
1440};
1441
1442static struct branch_clk gcc_sdcc1_apps_clk = {
1443 .cbcr_reg = SDCC1_APPS_CBCR,
1444 .has_sibling = 0,
1445 .base = &virt_bases[GCC_BASE],
1446 .c = {
1447 .parent = &sdcc1_apps_clk_src.c,
1448 .dbg_name = "gcc_sdcc1_apps_clk",
1449 .ops = &clk_ops_branch,
1450 CLK_INIT(gcc_sdcc1_apps_clk.c),
1451 },
1452};
1453
1454static struct branch_clk gcc_sdcc2_ahb_clk = {
1455 .cbcr_reg = SDCC2_AHB_CBCR,
1456 .has_sibling = 1,
1457 .base = &virt_bases[GCC_BASE],
1458 .c = {
1459 .dbg_name = "gcc_sdcc2_ahb_clk",
1460 .ops = &clk_ops_branch,
1461 CLK_INIT(gcc_sdcc2_ahb_clk.c),
1462 },
1463};
1464
1465static struct branch_clk gcc_sdcc2_apps_clk = {
1466 .cbcr_reg = SDCC2_APPS_CBCR,
1467 .has_sibling = 0,
1468 .base = &virt_bases[GCC_BASE],
1469 .c = {
1470 .parent = &sdcc2_apps_clk_src.c,
1471 .dbg_name = "gcc_sdcc2_apps_clk",
1472 .ops = &clk_ops_branch,
1473 CLK_INIT(gcc_sdcc2_apps_clk.c),
1474 },
1475};
1476
1477static struct branch_clk gcc_usb2a_phy_sleep_clk = {
1478 .cbcr_reg = USB2A_PHY_SLEEP_CBCR,
1479 .has_sibling = 1,
1480 .base = &virt_bases[GCC_BASE],
1481 .c = {
1482 .dbg_name = "gcc_usb2a_phy_sleep_clk",
1483 .ops = &clk_ops_branch,
1484 CLK_INIT(gcc_usb2a_phy_sleep_clk.c),
1485 },
1486};
1487
1488static struct branch_clk gcc_usb_hs_ahb_clk = {
1489 .cbcr_reg = USB_HS_AHB_CBCR,
1490 .has_sibling = 1,
1491 .base = &virt_bases[GCC_BASE],
1492 .c = {
1493 .dbg_name = "gcc_usb_hs_ahb_clk",
1494 .ops = &clk_ops_branch,
1495 CLK_INIT(gcc_usb_hs_ahb_clk.c),
1496 },
1497};
1498
1499static struct branch_clk gcc_usb_hs_system_clk = {
1500 .cbcr_reg = USB_HS_SYSTEM_CBCR,
1501 .has_sibling = 0,
1502 .bcr_reg = USB_HS_BCR,
1503 .base = &virt_bases[GCC_BASE],
1504 .c = {
1505 .parent = &usb_hs_system_clk_src.c,
1506 .dbg_name = "gcc_usb_hs_system_clk",
1507 .ops = &clk_ops_branch,
1508 CLK_INIT(gcc_usb_hs_system_clk.c),
1509 },
1510};
1511
Vikram Mulukutla55318acb2013-04-15 17:47:34 -07001512static struct branch_clk gcc_bimc_smmu_clk = {
1513 .cbcr_reg = BIMC_SMMU_CBCR,
1514 .has_sibling = 0,
1515 .base = &virt_bases[GCC_BASE],
1516 .c = {
1517 .dbg_name = "gcc_bimc_smmu_clk",
1518 .ops = &clk_ops_branch,
1519 CLK_INIT(gcc_bimc_smmu_clk.c),
1520 },
1521};
1522
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07001523static struct clk_freq_tbl ftbl_csi0_1_clk[] = {
1524 F_MM(100000000, gpll0, 6, 0, 0),
1525 F_MM(200000000, mmpll0, 4, 0, 0),
1526 F_END,
1527};
1528
1529static struct rcg_clk csi0_clk_src = {
1530 .cmd_rcgr_reg = CSI0_CMD_RCGR,
1531 .set_rate = set_rate_hid,
1532 .freq_tbl = ftbl_csi0_1_clk,
1533 .current_freq = &rcg_dummy_freq,
1534 .base = &virt_bases[MMSS_BASE],
1535 .c = {
1536 .dbg_name = "csi0_clk_src",
1537 .ops = &clk_ops_rcg,
1538 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
1539 CLK_INIT(csi0_clk_src.c),
1540 },
1541};
1542
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07001543static struct clk_freq_tbl ftbl_mmss_mmssnoc_axi_clk[] = {
1544 F_MM( 19200000, gcc_xo, 1, 0, 0),
1545 F_MM( 37500000, gpll0, 16, 0, 0),
1546 F_MM( 50000000, gpll0, 12, 0, 0),
1547 F_MM( 75000000, gpll0, 8, 0, 0),
1548 F_MM(100000000, gpll0, 6, 0, 0),
1549 F_MM(150000000, gpll0, 4, 0, 0),
1550 F_MM(200000000, mmpll0, 4, 0, 0),
1551 F_END,
1552};
1553
1554static struct rcg_clk axi_clk_src = {
1555 .cmd_rcgr_reg = AXI_CMD_RCGR,
1556 .set_rate = set_rate_hid,
1557 .freq_tbl = ftbl_mmss_mmssnoc_axi_clk,
1558 .current_freq = &rcg_dummy_freq,
1559 .base = &virt_bases[MMSS_BASE],
1560 .c = {
1561 .dbg_name = "axi_clk_src",
1562 .ops = &clk_ops_rcg,
1563 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
1564 CLK_INIT(axi_clk_src.c),
1565 },
1566};
1567
Vikram Mulukutlae1e5c482013-01-28 14:43:20 -08001568static DEFINE_CLK_VOTER(mdp_axi_clk_src, &axi_clk_src.c, 200000000);
1569static DEFINE_CLK_VOTER(mmssnoc_axi_clk_src, &axi_clk_src.c, 200000000);
1570
Vikram Mulukutlae03b4b62013-03-20 17:45:37 -07001571static struct clk_ops dsi_byte_clk_src_ops;
1572static struct clk_ops dsi_pixel_clk_src_ops;
1573static struct clk_ops dsi_dsi_clk_src_ops;
1574
1575static struct dsi_pll_vco_clk dsi_vco = {
1576 .vco_clk_min = 600000000,
1577 .vco_clk_max = 1200000000,
1578 .pref_div_ratio = 26,
1579 .c = {
1580 .parent = &gcc_xo_clk_src.c,
1581 .dbg_name = "dsi_vco",
1582 .ops = &clk_ops_dsi_vco,
1583 CLK_INIT(dsi_vco.c),
1584 },
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07001585};
1586
Vikram Mulukutlae03b4b62013-03-20 17:45:37 -07001587static struct clk dsi_pll_byte = {
1588 .parent = &dsi_vco.c,
1589 .dbg_name = "dsi_pll_byte",
1590 .ops = &clk_ops_dsi_byteclk,
1591 CLK_INIT(dsi_pll_byte),
1592};
1593
1594static struct clk dsi_pll_pixel = {
1595 .parent = &dsi_vco.c,
1596 .dbg_name = "dsi_pll_pixel",
1597 .ops = &clk_ops_dsi_dsiclk,
1598 CLK_INIT(dsi_pll_pixel),
1599};
1600
1601static struct clk_freq_tbl pixel_freq_tbl[] = {
1602 {
1603 .src_clk = &dsi_pll_pixel,
1604 .div_src_val = BVAL(10, 8, dsipll_mm_source_val),
1605 },
1606 F_END
1607};
1608
1609#define CFG_RCGR_DIV_MASK BM(4, 0)
1610
1611static int set_rate_pixel_byte_clk(struct clk *clk, unsigned long rate)
1612{
1613 struct rcg_clk *rcg = to_rcg_clk(clk);
1614 struct clk *pll = clk->parent;
1615 unsigned long source_rate, div;
1616 struct clk_freq_tbl *cur_freq = rcg->current_freq;
1617 int rc;
1618
1619 if (rate == 0)
1620 return clk_set_rate(pll, 0);
1621
1622 source_rate = clk_round_rate(pll, rate);
1623 if (!source_rate || ((2 * source_rate) % rate))
1624 return -EINVAL;
1625
1626 div = ((2 * source_rate)/rate) - 1;
1627 if (div > CFG_RCGR_DIV_MASK)
1628 return -EINVAL;
1629
1630 rc = clk_set_rate(pll, source_rate);
1631 if (rc)
1632 return rc;
1633
1634 cur_freq->div_src_val &= ~CFG_RCGR_DIV_MASK;
1635 cur_freq->div_src_val |= BVAL(4, 0, div);
1636 rcg->set_rate(rcg, cur_freq);
1637
1638 return 0;
1639}
1640
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07001641static struct rcg_clk dsi_pclk_clk_src = {
1642 .cmd_rcgr_reg = DSI_PCLK_CMD_RCGR,
1643 .set_rate = set_rate_mnd,
Vikram Mulukutlae03b4b62013-03-20 17:45:37 -07001644 .current_freq = pixel_freq_tbl,
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07001645 .base = &virt_bases[MMSS_BASE],
1646 .c = {
Vikram Mulukutlae03b4b62013-03-20 17:45:37 -07001647 .parent = &dsi_pll_pixel,
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07001648 .dbg_name = "dsi_pclk_clk_src",
Vikram Mulukutlae03b4b62013-03-20 17:45:37 -07001649 .ops = &dsi_pixel_clk_src_ops,
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07001650 VDD_DIG_FMAX_MAP2(LOW, 50000000, NOMINAL, 103330000),
1651 CLK_INIT(dsi_pclk_clk_src.c),
1652 },
1653};
1654
1655static struct clk_freq_tbl ftbl_oxili_gfx3d_clk[] = {
1656 F_MM( 19200000, gcc_xo, 1, 0, 0),
1657 F_MM( 37500000, gpll0, 16, 0, 0),
1658 F_MM( 50000000, gpll0, 12, 0, 0),
1659 F_MM( 75000000, gpll0, 8, 0, 0),
1660 F_MM(100000000, gpll0, 6, 0, 0),
1661 F_MM(150000000, gpll0, 4, 0, 0),
1662 F_MM(200000000, gpll0, 3, 0, 0),
1663 F_MM(300000000, gpll0, 2, 0, 0),
1664 F_MM(400000000, mmpll1, 3, 0, 0),
1665 F_END,
1666};
1667
1668static struct rcg_clk gfx3d_clk_src = {
1669 .cmd_rcgr_reg = GFX3D_CMD_RCGR,
1670 .set_rate = set_rate_hid,
1671 .freq_tbl = ftbl_oxili_gfx3d_clk,
1672 .current_freq = &rcg_dummy_freq,
1673 .base = &virt_bases[MMSS_BASE],
1674 .c = {
1675 .dbg_name = "gfx3d_clk_src",
1676 .ops = &clk_ops_rcg,
1677 VDD_DIG_FMAX_MAP3(LOW, 150000000, NOMINAL, 300000000, HIGH,
1678 400000000),
1679 CLK_INIT(gfx3d_clk_src.c),
1680 },
1681};
1682
1683static struct clk_freq_tbl ftbl_vfe_clk[] = {
1684 F_MM( 37500000, gpll0, 16, 0, 0),
1685 F_MM( 50000000, gpll0, 12, 0, 0),
1686 F_MM( 60000000, gpll0, 10, 0, 0),
1687 F_MM( 80000000, gpll0, 7.5, 0, 0),
1688 F_MM(100000000, gpll0, 6, 0, 0),
1689 F_MM(109090000, gpll0, 5.5, 0, 0),
1690 F_MM(133330000, gpll0, 4.5, 0, 0),
1691 F_MM(200000000, gpll0, 3, 0, 0),
1692 F_MM(228570000, mmpll0, 3.5, 0, 0),
1693 F_MM(266670000, mmpll0, 3, 0, 0),
1694 F_MM(320000000, mmpll0, 2.5, 0, 0),
1695 F_END,
1696};
1697
1698static struct rcg_clk vfe_clk_src = {
1699 .cmd_rcgr_reg = VFE_CMD_RCGR,
1700 .set_rate = set_rate_hid,
1701 .freq_tbl = ftbl_vfe_clk,
1702 .current_freq = &rcg_dummy_freq,
1703 .base = &virt_bases[MMSS_BASE],
1704 .c = {
1705 .dbg_name = "vfe_clk_src",
1706 .ops = &clk_ops_rcg,
1707 VDD_DIG_FMAX_MAP3(LOW, 133330000, NOMINAL, 266670000, HIGH,
1708 320000000),
1709 CLK_INIT(vfe_clk_src.c),
1710 },
1711};
1712
1713static struct rcg_clk csi1_clk_src = {
1714 .cmd_rcgr_reg = CSI1_CMD_RCGR,
1715 .set_rate = set_rate_hid,
1716 .freq_tbl = ftbl_csi0_1_clk,
1717 .current_freq = &rcg_dummy_freq,
1718 .base = &virt_bases[MMSS_BASE],
1719 .c = {
1720 .dbg_name = "csi1_clk_src",
1721 .ops = &clk_ops_rcg,
1722 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
1723 CLK_INIT(csi1_clk_src.c),
1724 },
1725};
1726
1727static struct clk_freq_tbl ftbl_csi0_1phytimer_clk[] = {
1728 F_MM(100000000, gpll0, 6, 0, 0),
1729 F_MM(200000000, mmpll0, 4, 0, 0),
1730 F_END,
1731};
1732
1733static struct rcg_clk csi0phytimer_clk_src = {
1734 .cmd_rcgr_reg = CSI0PHYTIMER_CMD_RCGR,
1735 .set_rate = set_rate_hid,
1736 .freq_tbl = ftbl_csi0_1phytimer_clk,
1737 .current_freq = &rcg_dummy_freq,
1738 .base = &virt_bases[MMSS_BASE],
1739 .c = {
1740 .dbg_name = "csi0phytimer_clk_src",
1741 .ops = &clk_ops_rcg,
1742 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
1743 CLK_INIT(csi0phytimer_clk_src.c),
1744 },
1745};
1746
1747static struct rcg_clk csi1phytimer_clk_src = {
1748 .cmd_rcgr_reg = CSI1PHYTIMER_CMD_RCGR,
1749 .set_rate = set_rate_hid,
1750 .freq_tbl = ftbl_csi0_1phytimer_clk,
1751 .current_freq = &rcg_dummy_freq,
1752 .base = &virt_bases[MMSS_BASE],
1753 .c = {
1754 .dbg_name = "csi1phytimer_clk_src",
1755 .ops = &clk_ops_rcg,
1756 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
1757 CLK_INIT(csi1phytimer_clk_src.c),
1758 },
1759};
1760
Vikram Mulukutlae03b4b62013-03-20 17:45:37 -07001761/*
1762 * The DSI clock will always use a divider of 1. However, we still
1763 * need to set the right voltage and source.
1764 */
1765static int set_rate_dsi_clk(struct clk *clk, unsigned long rate)
1766{
1767 struct rcg_clk *rcg = to_rcg_clk(clk);
1768 struct clk_freq_tbl *cur_freq = rcg->current_freq;
1769
1770 rcg->set_rate(rcg, cur_freq);
1771
1772 return 0;
1773}
1774
1775static struct clk_freq_tbl dsi_freq_tbl[] = {
1776 {
1777 .src_clk = &dsi_pll_pixel,
1778 .div_src_val = BVAL(4, 0, 0) |
1779 BVAL(10, 8, dsipll_mm_source_val),
1780 },
1781 F_END
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07001782};
1783
1784static struct rcg_clk dsi_clk_src = {
1785 .cmd_rcgr_reg = DSI_CMD_RCGR,
1786 .set_rate = set_rate_mnd,
Vikram Mulukutlae03b4b62013-03-20 17:45:37 -07001787 .current_freq = dsi_freq_tbl,
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07001788 .base = &virt_bases[MMSS_BASE],
1789 .c = {
Vikram Mulukutlae03b4b62013-03-20 17:45:37 -07001790 .parent = &dsi_pll_pixel,
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07001791 .dbg_name = "dsi_clk_src",
Vikram Mulukutlae03b4b62013-03-20 17:45:37 -07001792 .ops = &dsi_dsi_clk_src_ops,
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07001793 VDD_DIG_FMAX_MAP2(LOW, 155000000, NOMINAL, 310000000),
1794 CLK_INIT(dsi_clk_src.c),
1795 },
1796};
1797
Vikram Mulukutlae03b4b62013-03-20 17:45:37 -07001798static struct clk_freq_tbl byte_freq_tbl[] = {
1799 {
1800 .src_clk = &dsi_pll_byte,
1801 .div_src_val = BVAL(10, 8, dsipll_mm_source_val),
1802 },
1803 F_END
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07001804};
1805
1806static struct rcg_clk dsi_byte_clk_src = {
1807 .cmd_rcgr_reg = DSI_BYTE_CMD_RCGR,
1808 .set_rate = set_rate_hid,
Vikram Mulukutlae03b4b62013-03-20 17:45:37 -07001809 .current_freq = byte_freq_tbl,
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07001810 .base = &virt_bases[MMSS_BASE],
1811 .c = {
Vikram Mulukutlae03b4b62013-03-20 17:45:37 -07001812 .parent = &dsi_pll_byte,
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07001813 .dbg_name = "dsi_byte_clk_src",
Vikram Mulukutlae03b4b62013-03-20 17:45:37 -07001814 .ops = &dsi_byte_clk_src_ops,
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07001815 VDD_DIG_FMAX_MAP2(LOW, 62500000, NOMINAL, 125000000),
1816 CLK_INIT(dsi_byte_clk_src.c),
1817 },
1818};
1819
1820static struct clk_freq_tbl ftbl_dsi_esc_clk[] = {
1821 F_MM(19200000, gcc_xo, 1, 0, 0),
1822 F_END,
1823};
1824
1825static struct rcg_clk dsi_esc_clk_src = {
1826 .cmd_rcgr_reg = DSI_ESC_CMD_RCGR,
1827 .set_rate = set_rate_hid,
1828 .freq_tbl = ftbl_dsi_esc_clk,
1829 .current_freq = &rcg_dummy_freq,
1830 .base = &virt_bases[MMSS_BASE],
1831 .c = {
1832 .dbg_name = "dsi_esc_clk_src",
1833 .ops = &clk_ops_rcg,
1834 VDD_DIG_FMAX_MAP1(LOW, 19200000),
1835 CLK_INIT(dsi_esc_clk_src.c),
1836 },
1837};
1838
1839static struct clk_freq_tbl ftbl_mclk0_1_clk[] = {
Lokesh Kumar Aakulu329a3472013-06-03 06:08:17 -07001840 F_MM(24000000, gpll0, 5, 1, 5),
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07001841 F_MM(66670000, gpll0, 9, 0, 0),
1842 F_END,
1843};
1844
1845static struct rcg_clk mclk0_clk_src = {
1846 .cmd_rcgr_reg = MCLK0_CMD_RCGR,
1847 .set_rate = set_rate_mnd,
1848 .freq_tbl = ftbl_mclk0_1_clk,
1849 .current_freq = &rcg_dummy_freq,
1850 .base = &virt_bases[MMSS_BASE],
1851 .c = {
1852 .dbg_name = "mclk0_clk_src",
1853 .ops = &clk_ops_rcg_mnd,
1854 VDD_DIG_FMAX_MAP1(LOW, 66670000),
1855 CLK_INIT(mclk0_clk_src.c),
1856 },
1857};
1858
1859static struct rcg_clk mclk1_clk_src = {
1860 .cmd_rcgr_reg = MCLK1_CMD_RCGR,
1861 .set_rate = set_rate_mnd,
1862 .freq_tbl = ftbl_mclk0_1_clk,
1863 .current_freq = &rcg_dummy_freq,
1864 .base = &virt_bases[MMSS_BASE],
1865 .c = {
1866 .dbg_name = "mclk1_clk_src",
1867 .ops = &clk_ops_rcg_mnd,
1868 VDD_DIG_FMAX_MAP1(LOW, 66670000),
1869 CLK_INIT(mclk1_clk_src.c),
1870 },
1871};
1872
1873static struct clk_freq_tbl ftbl_mdp_vsync_clk[] = {
1874 F_MM(19200000, gcc_xo, 1, 0, 0),
1875 F_END,
1876};
1877
1878static struct rcg_clk mdp_vsync_clk_src = {
1879 .cmd_rcgr_reg = MDP_VSYNC_CMD_RCGR,
1880 .set_rate = set_rate_hid,
1881 .freq_tbl = ftbl_mdp_vsync_clk,
1882 .current_freq = &rcg_dummy_freq,
1883 .base = &virt_bases[MMSS_BASE],
1884 .c = {
1885 .dbg_name = "mdp_vsync_clk_src",
1886 .ops = &clk_ops_rcg,
1887 VDD_DIG_FMAX_MAP1(LOW, 19200000),
1888 CLK_INIT(mdp_vsync_clk_src.c),
1889 },
1890};
1891
1892static struct branch_clk bimc_gfx_clk = {
1893 .cbcr_reg = BIMC_GFX_CBCR,
1894 .has_sibling = 1,
1895 .base = &virt_bases[MMSS_BASE],
Vikram Mulukutla2dfa8b12013-01-15 18:17:10 -08001896 /* FIXME: Remove this once simulation is fixed. */
1897 .halt_check = DELAY,
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07001898 .c = {
1899 .dbg_name = "bimc_gfx_clk",
1900 .ops = &clk_ops_branch,
1901 CLK_INIT(bimc_gfx_clk.c),
Vikram Mulukutla55318acb2013-04-15 17:47:34 -07001902 /* FIXME: Remove once kgsl votes on the depends clock. */
1903 .depends = &gcc_bimc_smmu_clk.c,
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07001904 },
1905};
1906
1907static struct branch_clk csi0_clk = {
1908 .cbcr_reg = CSI0_CBCR,
1909 .has_sibling = 1,
1910 .base = &virt_bases[MMSS_BASE],
1911 .c = {
1912 .parent = &csi0_clk_src.c,
1913 .dbg_name = "csi0_clk",
1914 .ops = &clk_ops_branch,
1915 CLK_INIT(csi0_clk.c),
1916 },
1917};
1918
1919static struct branch_clk csi0phy_clk = {
1920 .cbcr_reg = CSI0PHY_CBCR,
1921 .has_sibling = 1,
1922 .base = &virt_bases[MMSS_BASE],
1923 .c = {
1924 .parent = &csi0_clk_src.c,
1925 .dbg_name = "csi0phy_clk",
1926 .ops = &clk_ops_branch,
1927 CLK_INIT(csi0phy_clk.c),
1928 },
1929};
1930
1931static struct branch_clk csi0phytimer_clk = {
1932 .cbcr_reg = CSI0PHYTIMER_CBCR,
1933 .has_sibling = 0,
1934 .base = &virt_bases[MMSS_BASE],
1935 .c = {
1936 .parent = &csi0phytimer_clk_src.c,
1937 .dbg_name = "csi0phytimer_clk",
1938 .ops = &clk_ops_branch,
1939 CLK_INIT(csi0phytimer_clk.c),
1940 },
1941};
1942
1943static struct branch_clk csi0pix_clk = {
1944 .cbcr_reg = CSI0PIX_CBCR,
1945 .has_sibling = 1,
1946 .base = &virt_bases[MMSS_BASE],
1947 .c = {
1948 .parent = &csi0_clk_src.c,
1949 .dbg_name = "csi0pix_clk",
1950 .ops = &clk_ops_branch,
1951 CLK_INIT(csi0pix_clk.c),
1952 },
1953};
1954
1955static struct branch_clk csi0rdi_clk = {
1956 .cbcr_reg = CSI0RDI_CBCR,
1957 .has_sibling = 1,
1958 .base = &virt_bases[MMSS_BASE],
1959 .c = {
1960 .parent = &csi0_clk_src.c,
1961 .dbg_name = "csi0rdi_clk",
1962 .ops = &clk_ops_branch,
1963 CLK_INIT(csi0rdi_clk.c),
1964 },
1965};
1966
1967static struct branch_clk csi1_clk = {
1968 .cbcr_reg = CSI1_CBCR,
1969 .has_sibling = 1,
1970 .base = &virt_bases[MMSS_BASE],
1971 .c = {
1972 .parent = &csi1_clk_src.c,
1973 .dbg_name = "csi1_clk",
1974 .ops = &clk_ops_branch,
1975 CLK_INIT(csi1_clk.c),
1976 },
1977};
1978
1979static struct branch_clk csi1phy_clk = {
1980 .cbcr_reg = CSI1PHY_CBCR,
1981 .has_sibling = 1,
1982 .base = &virt_bases[MMSS_BASE],
1983 .c = {
1984 .parent = &csi1_clk_src.c,
1985 .dbg_name = "csi1phy_clk",
1986 .ops = &clk_ops_branch,
1987 CLK_INIT(csi1phy_clk.c),
1988 },
1989};
1990
1991static struct branch_clk csi1phytimer_clk = {
1992 .cbcr_reg = CSI1PHYTIMER_CBCR,
1993 .has_sibling = 0,
1994 .base = &virt_bases[MMSS_BASE],
1995 .c = {
1996 .parent = &csi1phytimer_clk_src.c,
1997 .dbg_name = "csi1phytimer_clk",
1998 .ops = &clk_ops_branch,
1999 CLK_INIT(csi1phytimer_clk.c),
2000 },
2001};
2002
2003static struct branch_clk csi1pix_clk = {
2004 .cbcr_reg = CSI1PIX_CBCR,
2005 .has_sibling = 1,
2006 .base = &virt_bases[MMSS_BASE],
2007 .c = {
Vikram Mulukutlaa1d5c142013-01-16 10:30:12 -08002008 .parent = &csi1_clk_src.c,
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07002009 .dbg_name = "csi1pix_clk",
2010 .ops = &clk_ops_branch,
2011 CLK_INIT(csi1pix_clk.c),
2012 },
2013};
2014
2015static struct branch_clk csi1rdi_clk = {
2016 .cbcr_reg = CSI1RDI_CBCR,
2017 .has_sibling = 1,
2018 .base = &virt_bases[MMSS_BASE],
2019 .c = {
Vikram Mulukutlaa1d5c142013-01-16 10:30:12 -08002020 .parent = &csi1_clk_src.c,
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07002021 .dbg_name = "csi1rdi_clk",
2022 .ops = &clk_ops_branch,
2023 CLK_INIT(csi1rdi_clk.c),
2024 },
2025};
2026
Vikram Mulukutla49423392013-05-02 09:03:02 -07002027static struct cam_mux_clk csi0phy_cam_mux_clk = {
Vikram Mulukutla8964a382013-04-10 14:30:50 -07002028 .enable_reg = MMSS_CAMSS_MISC,
2029 .enable_mask = BIT(11),
2030 .select_reg = MMSS_CAMSS_MISC,
2031 .select_mask = BIT(9),
2032 .sources = (struct mux_source[]) {
2033 { &csi0phy_clk.c, 0 },
2034 { &csi1phy_clk.c, BIT(9) },
2035 { 0 },
2036 },
2037 .base = &virt_bases[MMSS_BASE],
2038 .c = {
Vikram Mulukutla49423392013-05-02 09:03:02 -07002039 .dbg_name = "csi0phy_cam_mux_clk",
2040 .ops = &clk_ops_cam_mux,
2041 CLK_INIT(csi0phy_cam_mux_clk.c),
Vikram Mulukutla8964a382013-04-10 14:30:50 -07002042 },
2043};
2044
Vikram Mulukutla49423392013-05-02 09:03:02 -07002045static struct cam_mux_clk csi1phy_cam_mux_clk = {
Vikram Mulukutla8964a382013-04-10 14:30:50 -07002046 .enable_reg = MMSS_CAMSS_MISC,
2047 .enable_mask = BIT(10),
2048 .select_reg = MMSS_CAMSS_MISC,
2049 .select_mask = BIT(8),
2050 .sources = (struct mux_source[]) {
2051 { &csi0phy_clk.c, 0 },
2052 { &csi1phy_clk.c, BIT(8) },
2053 { 0 },
2054 },
2055 .base = &virt_bases[MMSS_BASE],
2056 .c = {
Vikram Mulukutla49423392013-05-02 09:03:02 -07002057 .dbg_name = "csi1phy_cam_mux_clk",
2058 .ops = &clk_ops_cam_mux,
2059 CLK_INIT(csi1phy_cam_mux_clk.c),
Vikram Mulukutla8964a382013-04-10 14:30:50 -07002060 },
2061};
2062
Vikram Mulukutla49423392013-05-02 09:03:02 -07002063static struct cam_mux_clk csi0pix_cam_mux_clk = {
Vikram Mulukutla8964a382013-04-10 14:30:50 -07002064 .enable_reg = MMSS_CAMSS_MISC,
2065 .enable_mask = BIT(7),
2066 .select_reg = MMSS_CAMSS_MISC,
2067 .select_mask = BIT(3),
2068 .sources = (struct mux_source[]) {
2069 { &csi0pix_clk.c, 0 },
2070 { &csi1pix_clk.c, BIT(3) },
2071 { 0 },
2072 },
2073 .base = &virt_bases[MMSS_BASE],
2074 .c = {
Vikram Mulukutla49423392013-05-02 09:03:02 -07002075 .dbg_name = "csi0pix_cam_mux_clk",
2076 .ops = &clk_ops_cam_mux,
2077 CLK_INIT(csi0pix_cam_mux_clk.c),
Vikram Mulukutla8964a382013-04-10 14:30:50 -07002078 },
2079};
2080
2081
Vikram Mulukutla49423392013-05-02 09:03:02 -07002082static struct cam_mux_clk rdi2_cam_mux_clk = {
Vikram Mulukutla8964a382013-04-10 14:30:50 -07002083 .enable_reg = MMSS_CAMSS_MISC,
2084 .enable_mask = BIT(6),
2085 .select_reg = MMSS_CAMSS_MISC,
2086 .select_mask = BIT(2),
2087 .sources = (struct mux_source[]) {
2088 { &csi0rdi_clk.c, 0 },
2089 { &csi1rdi_clk.c, BIT(2) },
2090 { 0 },
2091 },
2092 .base = &virt_bases[MMSS_BASE],
2093 .c = {
Vikram Mulukutla49423392013-05-02 09:03:02 -07002094 .dbg_name = "rdi2_cam_mux_clk",
2095 .ops = &clk_ops_cam_mux,
2096 CLK_INIT(rdi2_cam_mux_clk.c),
Vikram Mulukutla8964a382013-04-10 14:30:50 -07002097 },
2098};
2099
Vikram Mulukutla49423392013-05-02 09:03:02 -07002100static struct cam_mux_clk rdi1_cam_mux_clk = {
Vikram Mulukutla8964a382013-04-10 14:30:50 -07002101 .enable_reg = MMSS_CAMSS_MISC,
2102 .enable_mask = BIT(5),
2103 .select_reg = MMSS_CAMSS_MISC,
2104 .select_mask = BIT(1),
2105 .sources = (struct mux_source[]) {
2106 { &csi0rdi_clk.c, 0 },
2107 { &csi1rdi_clk.c, BIT(1) },
2108 { 0 },
2109 },
2110 .base = &virt_bases[MMSS_BASE],
2111 .c = {
Vikram Mulukutla49423392013-05-02 09:03:02 -07002112 .dbg_name = "rdi1_cam_mux_clk",
2113 .ops = &clk_ops_cam_mux,
2114 CLK_INIT(rdi1_cam_mux_clk.c),
Vikram Mulukutla8964a382013-04-10 14:30:50 -07002115 },
2116};
2117
Vikram Mulukutla49423392013-05-02 09:03:02 -07002118static struct cam_mux_clk rdi0_cam_mux_clk = {
Vikram Mulukutla8964a382013-04-10 14:30:50 -07002119 .enable_reg = MMSS_CAMSS_MISC,
2120 .enable_mask = BIT(4),
2121 .select_reg = MMSS_CAMSS_MISC,
2122 .select_mask = BIT(0),
2123 .sources = (struct mux_source[]) {
2124 { &csi0rdi_clk.c, 0 },
2125 { &csi1rdi_clk.c, BIT(0) },
2126 { 0 },
2127 },
2128 .base = &virt_bases[MMSS_BASE],
2129 .c = {
Vikram Mulukutla49423392013-05-02 09:03:02 -07002130 .dbg_name = "rdi0_cam_mux_clk",
2131 .ops = &clk_ops_cam_mux,
2132 CLK_INIT(rdi0_cam_mux_clk.c),
Vikram Mulukutla8964a382013-04-10 14:30:50 -07002133 },
2134};
2135
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07002136static struct branch_clk csi_ahb_clk = {
2137 .cbcr_reg = CSI_AHB_CBCR,
2138 .has_sibling = 1,
2139 .base = &virt_bases[MMSS_BASE],
2140 .c = {
2141 .dbg_name = "csi_ahb_clk",
2142 .ops = &clk_ops_branch,
2143 CLK_INIT(csi_ahb_clk.c),
2144 },
2145};
2146
2147static struct branch_clk csi_vfe_clk = {
2148 .cbcr_reg = CSI_VFE_CBCR,
Matt Wagantall8ce3c462013-07-03 19:24:53 -07002149 .bcr_reg = CSI_VFE_BCR,
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07002150 .has_sibling = 1,
2151 .base = &virt_bases[MMSS_BASE],
2152 .c = {
2153 .parent = &vfe_clk_src.c,
2154 .dbg_name = "csi_vfe_clk",
2155 .ops = &clk_ops_branch,
2156 CLK_INIT(csi_vfe_clk.c),
2157 },
2158};
2159
2160static struct branch_clk dsi_clk = {
2161 .cbcr_reg = DSI_CBCR,
2162 .has_sibling = 0,
2163 .base = &virt_bases[MMSS_BASE],
2164 .c = {
2165 .parent = &dsi_clk_src.c,
2166 .dbg_name = "dsi_clk",
2167 .ops = &clk_ops_branch,
2168 CLK_INIT(dsi_clk.c),
2169 },
2170};
2171
2172static struct branch_clk dsi_ahb_clk = {
2173 .cbcr_reg = DSI_AHB_CBCR,
2174 .has_sibling = 1,
2175 .base = &virt_bases[MMSS_BASE],
2176 .c = {
2177 .dbg_name = "dsi_ahb_clk",
2178 .ops = &clk_ops_branch,
2179 CLK_INIT(dsi_ahb_clk.c),
2180 },
2181};
2182
2183static struct branch_clk dsi_byte_clk = {
2184 .cbcr_reg = DSI_BYTE_CBCR,
2185 .has_sibling = 0,
2186 .base = &virt_bases[MMSS_BASE],
2187 .c = {
2188 .parent = &dsi_byte_clk_src.c,
2189 .dbg_name = "dsi_byte_clk",
2190 .ops = &clk_ops_branch,
2191 CLK_INIT(dsi_byte_clk.c),
2192 },
2193};
2194
2195static struct branch_clk dsi_esc_clk = {
2196 .cbcr_reg = DSI_ESC_CBCR,
2197 .has_sibling = 0,
2198 .base = &virt_bases[MMSS_BASE],
2199 .c = {
2200 .parent = &dsi_esc_clk_src.c,
2201 .dbg_name = "dsi_esc_clk",
2202 .ops = &clk_ops_branch,
2203 CLK_INIT(dsi_esc_clk.c),
2204 },
2205};
2206
2207static struct branch_clk dsi_pclk_clk = {
2208 .cbcr_reg = DSI_PCLK_CBCR,
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07002209 .base = &virt_bases[MMSS_BASE],
2210 .c = {
2211 .parent = &dsi_pclk_clk_src.c,
2212 .dbg_name = "dsi_pclk_clk",
2213 .ops = &clk_ops_branch,
2214 CLK_INIT(dsi_pclk_clk.c),
2215 },
2216};
2217
2218static struct branch_clk gmem_gfx3d_clk = {
2219 .cbcr_reg = GMEM_GFX3D_CBCR,
Matt Wagantall8ce3c462013-07-03 19:24:53 -07002220 .bcr_reg = GMEM_GFX3D_BCR,
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07002221 .has_sibling = 1,
2222 .base = &virt_bases[MMSS_BASE],
2223 .c = {
2224 .parent = &gfx3d_clk_src.c,
2225 .dbg_name = "gmem_gfx3d_clk",
2226 .ops = &clk_ops_branch,
2227 CLK_INIT(gmem_gfx3d_clk.c),
2228 },
2229};
2230
2231static struct branch_clk mclk0_clk = {
2232 .cbcr_reg = MCLK0_CBCR,
2233 .has_sibling = 0,
2234 .base = &virt_bases[MMSS_BASE],
2235 .c = {
2236 .parent = &mclk0_clk_src.c,
2237 .dbg_name = "mclk0_clk",
2238 .ops = &clk_ops_branch,
2239 CLK_INIT(mclk0_clk.c),
2240 },
2241};
2242
2243static struct branch_clk mclk1_clk = {
2244 .cbcr_reg = MCLK1_CBCR,
2245 .has_sibling = 0,
2246 .base = &virt_bases[MMSS_BASE],
2247 .c = {
2248 .parent = &mclk1_clk_src.c,
2249 .dbg_name = "mclk1_clk",
2250 .ops = &clk_ops_branch,
2251 CLK_INIT(mclk1_clk.c),
2252 },
2253};
2254
2255static struct branch_clk mdp_ahb_clk = {
2256 .cbcr_reg = MDP_AHB_CBCR,
2257 .has_sibling = 1,
2258 .base = &virt_bases[MMSS_BASE],
2259 .c = {
2260 .dbg_name = "mdp_ahb_clk",
2261 .ops = &clk_ops_branch,
2262 CLK_INIT(mdp_ahb_clk.c),
2263 },
2264};
2265
Vikram Mulukutlac32edfb2013-08-19 12:17:02 -07002266static struct branch_clk mmss_mmssnoc_axi_clk;
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07002267static struct branch_clk mdp_axi_clk = {
2268 .cbcr_reg = MDP_AXI_CBCR,
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07002269 .base = &virt_bases[MMSS_BASE],
Vikram Mulukutla2dfa8b12013-01-15 18:17:10 -08002270 /* FIXME: Remove this once simulation is fixed. */
2271 .halt_check = DELAY,
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07002272 .c = {
Vikram Mulukutlae1e5c482013-01-28 14:43:20 -08002273 .parent = &mdp_axi_clk_src.c,
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07002274 .dbg_name = "mdp_axi_clk",
2275 .ops = &clk_ops_branch,
2276 CLK_INIT(mdp_axi_clk.c),
Vikram Mulukutlac32edfb2013-08-19 12:17:02 -07002277 .depends = &mmss_mmssnoc_axi_clk.c,
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07002278 },
2279};
2280
2281static struct branch_clk mdp_dsi_clk = {
2282 .cbcr_reg = MDP_DSI_CBCR,
2283 .has_sibling = 1,
2284 .base = &virt_bases[MMSS_BASE],
2285 .c = {
2286 .parent = &dsi_pclk_clk_src.c,
2287 .dbg_name = "mdp_dsi_clk",
2288 .ops = &clk_ops_branch,
2289 CLK_INIT(mdp_dsi_clk.c),
2290 },
2291};
2292
2293static struct branch_clk mdp_lcdc_clk = {
2294 .cbcr_reg = MDP_LCDC_CBCR,
2295 .has_sibling = 1,
2296 .base = &virt_bases[MMSS_BASE],
2297 .c = {
2298 .parent = &dsi_pclk_clk_src.c,
2299 .dbg_name = "mdp_lcdc_clk",
2300 .ops = &clk_ops_branch,
2301 CLK_INIT(mdp_lcdc_clk.c),
2302 },
2303};
2304
2305static struct branch_clk mdp_vsync_clk = {
2306 .cbcr_reg = MDP_VSYNC_CBCR,
2307 .has_sibling = 0,
2308 .base = &virt_bases[MMSS_BASE],
2309 .c = {
2310 .parent = &mdp_vsync_clk_src.c,
2311 .dbg_name = "mdp_vsync_clk",
2312 .ops = &clk_ops_branch,
2313 CLK_INIT(mdp_vsync_clk.c),
2314 },
2315};
2316
2317static struct branch_clk mmss_misc_ahb_clk = {
2318 .cbcr_reg = MMSS_MISC_AHB_CBCR,
2319 .has_sibling = 1,
2320 .base = &virt_bases[MMSS_BASE],
2321 .c = {
2322 .dbg_name = "mmss_misc_ahb_clk",
2323 .ops = &clk_ops_branch,
2324 CLK_INIT(mmss_misc_ahb_clk.c),
2325 },
2326};
2327
2328static struct branch_clk mmss_mmssnoc_axi_clk = {
2329 .cbcr_reg = MMSS_MMSSNOC_AXI_CBCR,
2330 .has_sibling = 1,
2331 .base = &virt_bases[MMSS_BASE],
2332 .c = {
Vikram Mulukutlac32edfb2013-08-19 12:17:02 -07002333 .parent = &axi_clk_src.c,
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07002334 .dbg_name = "mmss_mmssnoc_axi_clk",
2335 .ops = &clk_ops_branch,
2336 CLK_INIT(mmss_mmssnoc_axi_clk.c),
2337 },
2338};
2339
2340static struct branch_clk mmss_s0_axi_clk = {
2341 .cbcr_reg = MMSS_S0_AXI_CBCR,
2342 .has_sibling = 0,
2343 .base = &virt_bases[MMSS_BASE],
2344 .c = {
Vikram Mulukutlae1e5c482013-01-28 14:43:20 -08002345 .parent = &mmssnoc_axi_clk_src.c,
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07002346 .dbg_name = "mmss_s0_axi_clk",
2347 .ops = &clk_ops_branch,
2348 CLK_INIT(mmss_s0_axi_clk.c),
Vikram Mulukutlac32edfb2013-08-19 12:17:02 -07002349 .depends = &mmss_mmssnoc_axi_clk.c,
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07002350 },
2351};
2352
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07002353static struct branch_clk mmss_mmssnoc_bto_ahb_clk = {
2354 .cbcr_reg = MMSS_MMSSNOC_BTO_AHB_CBCR,
2355 .has_sibling = 1,
2356 .base = &virt_bases[MMSS_BASE],
2357 .c = {
2358 .dbg_name = "mmss_mmssnoc_bto_ahb_clk",
2359 .ops = &clk_ops_branch,
2360 CLK_INIT(mmss_mmssnoc_bto_ahb_clk.c),
2361 },
2362};
2363
2364static struct branch_clk oxili_ahb_clk = {
2365 .cbcr_reg = OXILI_AHB_CBCR,
Matt Wagantall8ce3c462013-07-03 19:24:53 -07002366 .bcr_reg = OXILI_AHB_BCR,
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07002367 .has_sibling = 1,
2368 .base = &virt_bases[MMSS_BASE],
2369 .c = {
2370 .dbg_name = "oxili_ahb_clk",
2371 .ops = &clk_ops_branch,
2372 CLK_INIT(oxili_ahb_clk.c),
2373 },
2374};
2375
2376static struct branch_clk oxili_gfx3d_clk = {
2377 .cbcr_reg = OXILI_GFX3D_CBCR,
Matt Wagantall8ce3c462013-07-03 19:24:53 -07002378 .bcr_reg = OXILI_GFX3D_BCR,
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07002379 .has_sibling = 0,
2380 .base = &virt_bases[MMSS_BASE],
2381 .c = {
2382 .parent = &gfx3d_clk_src.c,
2383 .dbg_name = "oxili_gfx3d_clk",
2384 .ops = &clk_ops_branch,
2385 CLK_INIT(oxili_gfx3d_clk.c),
2386 },
2387};
2388
2389static struct branch_clk vfe_clk = {
2390 .cbcr_reg = VFE_CBCR,
Matt Wagantall8ce3c462013-07-03 19:24:53 -07002391 .bcr_reg = VFE_BCR,
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07002392 .has_sibling = 1,
2393 .base = &virt_bases[MMSS_BASE],
2394 .c = {
2395 .parent = &vfe_clk_src.c,
2396 .dbg_name = "vfe_clk",
2397 .ops = &clk_ops_branch,
2398 CLK_INIT(vfe_clk.c),
2399 },
2400};
2401
2402static struct branch_clk vfe_ahb_clk = {
2403 .cbcr_reg = VFE_AHB_CBCR,
Matt Wagantall8ce3c462013-07-03 19:24:53 -07002404 .bcr_reg = VFE_AHB_BCR,
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07002405 .has_sibling = 1,
2406 .base = &virt_bases[MMSS_BASE],
2407 .c = {
2408 .dbg_name = "vfe_ahb_clk",
2409 .ops = &clk_ops_branch,
2410 CLK_INIT(vfe_ahb_clk.c),
2411 },
2412};
2413
2414static struct branch_clk vfe_axi_clk = {
2415 .cbcr_reg = VFE_AXI_CBCR,
Matt Wagantall8ce3c462013-07-03 19:24:53 -07002416 .bcr_reg = VFE_AXI_BCR,
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07002417 .has_sibling = 1,
2418 .base = &virt_bases[MMSS_BASE],
Vikram Mulukutla2dfa8b12013-01-15 18:17:10 -08002419 /* FIXME: Remove this once simulation is fixed. */
2420 .halt_check = DELAY,
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07002421 .c = {
2422 .parent = &axi_clk_src.c,
2423 .dbg_name = "vfe_axi_clk",
2424 .ops = &clk_ops_branch,
2425 CLK_INIT(vfe_axi_clk.c),
Vikram Mulukutlac32edfb2013-08-19 12:17:02 -07002426 .depends = &mmss_mmssnoc_axi_clk.c,
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07002427 },
2428};
2429
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07002430static struct branch_clk q6ss_ahb_lfabif_clk = {
2431 .cbcr_reg = Q6SS_AHB_LFABIF_CBCR,
2432 .has_sibling = 1,
2433 .base = &virt_bases[LPASS_BASE],
2434 .c = {
2435 .dbg_name = "q6ss_ahb_lfabif_clk",
2436 .ops = &clk_ops_branch,
2437 CLK_INIT(q6ss_ahb_lfabif_clk.c),
2438 },
2439};
2440
2441static struct branch_clk q6ss_ahbm_clk = {
2442 .cbcr_reg = Q6SS_AHBM_CBCR,
2443 .has_sibling = 1,
2444 .base = &virt_bases[LPASS_BASE],
2445 .c = {
2446 .dbg_name = "q6ss_ahbm_clk",
2447 .ops = &clk_ops_branch,
2448 CLK_INIT(q6ss_ahbm_clk.c),
2449 },
2450};
2451
2452static struct branch_clk q6ss_xo_clk = {
2453 .cbcr_reg = Q6SS_XO_CBCR,
2454 .has_sibling = 1,
2455 .bcr_reg = LPASS_Q6SS_BCR,
2456 .base = &virt_bases[LPASS_BASE],
2457 .c = {
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07002458 .dbg_name = "q6ss_xo_clk",
2459 .ops = &clk_ops_branch,
2460 CLK_INIT(q6ss_xo_clk.c),
2461 },
2462};
2463
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07002464#ifdef CONFIG_DEBUG_FS
2465
2466struct measure_mux_entry {
2467 struct clk *c;
2468 int base;
2469 u32 debug_mux;
2470};
2471
2472static struct measure_mux_entry measure_mux[] = {
2473 { &snoc_clk.c, GCC_BASE, 0x0000},
2474 { &cnoc_clk.c, GCC_BASE, 0x0008},
2475 { &gcc_copss_smmu_ahb_clk.c, GCC_BASE, 0x000c},
2476 { &gcc_lpss_smmu_ahb_clk.c, GCC_BASE, 0x000d},
2477 { &pnoc_clk.c, GCC_BASE, 0x0010},
2478 { &gcc_mmss_noc_cfg_ahb_clk.c, GCC_BASE, 0x002a},
2479 { &gcc_mss_cfg_ahb_clk.c, GCC_BASE, 0x0030},
2480 { &gcc_mss_q6_bimc_axi_clk.c, GCC_BASE, 0x0031},
2481 { &gcc_usb_hs_system_clk.c, GCC_BASE, 0x0060},
2482 { &gcc_usb_hs_ahb_clk.c, GCC_BASE, 0x0061},
2483 { &gcc_usb2a_phy_sleep_clk.c, GCC_BASE, 0x0063},
2484 { &gcc_sdcc1_apps_clk.c, GCC_BASE, 0x0068},
2485 { &gcc_sdcc1_ahb_clk.c, GCC_BASE, 0x0069},
2486 { &gcc_sdcc2_apps_clk.c, GCC_BASE, 0x0070},
2487 { &gcc_sdcc2_ahb_clk.c, GCC_BASE, 0x0071},
2488 { &gcc_blsp1_ahb_clk.c, GCC_BASE, 0x0088},
2489 {&gcc_blsp1_qup1_spi_apps_clk.c, GCC_BASE, 0x008a},
2490 {&gcc_blsp1_qup1_i2c_apps_clk.c, GCC_BASE, 0x008b},
2491 { &gcc_blsp1_uart1_apps_clk.c, GCC_BASE, 0x008c},
2492 {&gcc_blsp1_qup2_spi_apps_clk.c, GCC_BASE, 0x008e},
2493 {&gcc_blsp1_qup2_i2c_apps_clk.c, GCC_BASE, 0x0090},
2494 { &gcc_blsp1_uart2_apps_clk.c, GCC_BASE, 0x0091},
2495 {&gcc_blsp1_qup3_spi_apps_clk.c, GCC_BASE, 0x0093},
2496 {&gcc_blsp1_qup3_i2c_apps_clk.c, GCC_BASE, 0x0094},
2497 { &gcc_blsp1_uart3_apps_clk.c, GCC_BASE, 0x0095},
2498 {&gcc_blsp1_qup4_spi_apps_clk.c, GCC_BASE, 0x0098},
2499 {&gcc_blsp1_qup4_i2c_apps_clk.c, GCC_BASE, 0x0099},
2500 { &gcc_blsp1_uart4_apps_clk.c, GCC_BASE, 0x009a},
2501 {&gcc_blsp1_qup5_spi_apps_clk.c, GCC_BASE, 0x009c},
2502 {&gcc_blsp1_qup5_i2c_apps_clk.c, GCC_BASE, 0x009d},
2503 { &gcc_blsp1_uart5_apps_clk.c, GCC_BASE, 0x009e},
2504 {&gcc_blsp1_qup6_spi_apps_clk.c, GCC_BASE, 0x00a1},
2505 {&gcc_blsp1_qup6_i2c_apps_clk.c, GCC_BASE, 0x00a2},
2506 { &gcc_blsp1_uart6_apps_clk.c, GCC_BASE, 0x00a3},
2507 { &gcc_pdm_ahb_clk.c, GCC_BASE, 0x00d0},
2508 { &gcc_pdm2_clk.c, GCC_BASE, 0x00d2},
2509 { &gcc_prng_ahb_clk.c, GCC_BASE, 0x00d8},
2510 { &gcc_boot_rom_ahb_clk.c, GCC_BASE, 0x00f8},
2511 { &gcc_ce1_clk.c, GCC_BASE, 0x0138},
2512 { &gcc_ce1_axi_clk.c, GCC_BASE, 0x0139},
2513 { &gcc_ce1_ahb_clk.c, GCC_BASE, 0x013a},
2514 { &gcc_xo_clk_src.c, GCC_BASE, 0x0149},
Vikram Mulukutlad3854052013-06-13 12:47:19 -07002515 { &bimc_clk.c, GCC_BASE, 0x0155},
Vikram Mulukutla55318acb2013-04-15 17:47:34 -07002516 { &gcc_bimc_smmu_clk.c, GCC_BASE, 0x015e},
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07002517 { &gcc_lpass_q6_axi_clk.c, GCC_BASE, 0x0160},
2518
Vikram Mulukutla82cb8442013-01-28 13:36:51 -08002519 { &mmssnoc_ahb_clk.c, MMSS_BASE, 0x0001},
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07002520 { &mmss_misc_ahb_clk.c, MMSS_BASE, 0x0003},
2521 {&mmss_mmssnoc_axi_clk.c, MMSS_BASE, 0x0004},
2522 { &mmss_s0_axi_clk.c, MMSS_BASE, 0x0005},
2523 { &oxili_ahb_clk.c, MMSS_BASE, 0x0007},
2524 { &oxili_gfx3d_clk.c, MMSS_BASE, 0x0008},
2525 { &gmem_gfx3d_clk.c, MMSS_BASE, 0x0009},
2526 { &mdp_axi_clk.c, MMSS_BASE, 0x000a},
2527 { &mdp_vsync_clk.c, MMSS_BASE, 0x000b},
2528 { &mdp_ahb_clk.c, MMSS_BASE, 0x000c},
2529 { &dsi_pclk_clk.c, MMSS_BASE, 0x000d},
2530 { &mdp_dsi_clk.c, MMSS_BASE, 0x000e},
2531 { &mdp_lcdc_clk.c, MMSS_BASE, 0x000f},
2532 { &dsi_clk.c, MMSS_BASE, 0x0010},
2533 { &dsi_byte_clk.c, MMSS_BASE, 0x0011},
2534 { &dsi_esc_clk.c, MMSS_BASE, 0x0012},
2535 { &dsi_ahb_clk.c, MMSS_BASE, 0x0013},
2536 { &mclk0_clk.c, MMSS_BASE, 0x0015},
2537 { &mclk1_clk.c, MMSS_BASE, 0x0016},
2538 { &csi0phytimer_clk.c, MMSS_BASE, 0x0017},
2539 { &csi1phytimer_clk.c, MMSS_BASE, 0x0018},
2540 { &vfe_clk.c, MMSS_BASE, 0x0019},
2541 { &vfe_ahb_clk.c, MMSS_BASE, 0x001a},
2542 { &vfe_axi_clk.c, MMSS_BASE, 0x001b},
2543 { &csi_vfe_clk.c, MMSS_BASE, 0x001c},
2544 { &csi0_clk.c, MMSS_BASE, 0x001d},
2545 { &csi_ahb_clk.c, MMSS_BASE, 0x001e},
2546 { &csi0phy_clk.c, MMSS_BASE, 0x001f},
2547 { &csi0rdi_clk.c, MMSS_BASE, 0x0020},
2548 { &csi0pix_clk.c, MMSS_BASE, 0x0021},
2549 { &csi1_clk.c, MMSS_BASE, 0x0022},
2550 { &csi1phy_clk.c, MMSS_BASE, 0x0023},
2551 { &csi1rdi_clk.c, MMSS_BASE, 0x0024},
2552 { &csi1pix_clk.c, MMSS_BASE, 0x0025},
2553 { &bimc_gfx_clk.c, MMSS_BASE, 0x0032},
2554
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07002555 { &q6ss_ahbm_clk.c, LPASS_BASE, 0x001d},
2556 { &q6ss_ahb_lfabif_clk.c, LPASS_BASE, 0x001e},
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07002557 { &q6ss_xo_clk.c, LPASS_BASE, 0x002b},
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07002558
Vikram Mulukutlaf0279052013-04-30 14:51:58 -07002559 {&apc0_m_clk, APCS_BASE, 0x00010},
2560 {&apc1_m_clk, APCS_BASE, 0x00114},
2561 {&apc2_m_clk, APCS_BASE, 0x00220},
2562 {&apc3_m_clk, APCS_BASE, 0x00324},
2563 {&l2_m_clk, APCS_BASE, 0x01000},
Vikram Mulukutla4157cca2013-01-24 15:42:41 -08002564
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07002565 {&dummy_clk, N_BASES, 0x0000},
2566};
2567
2568#define GCC_DEBUG_CLK_CTL 0x1880
2569#define MMSS_DEBUG_CLK_CTL 0x0900
2570#define LPASS_DEBUG_CLK_CTL 0x29000
2571#define GLB_CLK_DIAG 0x001C
2572
2573static int measure_clk_set_parent(struct clk *c, struct clk *parent)
2574{
2575 struct measure_clk *clk = to_measure_clk(c);
2576 unsigned long flags;
2577 u32 regval, clk_sel, i;
2578
2579 if (!parent)
2580 return -EINVAL;
2581
2582 for (i = 0; i < (ARRAY_SIZE(measure_mux) - 1); i++)
2583 if (measure_mux[i].c == parent)
2584 break;
2585
2586 if (measure_mux[i].c == &dummy_clk)
2587 return -EINVAL;
2588
2589 spin_lock_irqsave(&local_clock_reg_lock, flags);
2590 /*
2591 * Program the test vector, measurement period (sample_ticks)
2592 * and scaling multiplier.
2593 */
2594 clk->sample_ticks = 0x10000;
2595 clk->multiplier = 1;
2596
2597 switch (measure_mux[i].base) {
2598
2599 case GCC_BASE:
2600 writel_relaxed(0, GCC_REG_BASE(GCC_DEBUG_CLK_CTL));
2601 clk_sel = measure_mux[i].debug_mux;
2602 break;
2603
2604 case MMSS_BASE:
2605 writel_relaxed(0, MMSS_REG_BASE(MMSS_DEBUG_CLK_CTL));
2606 clk_sel = 0x02C;
2607 regval = BVAL(11, 0, measure_mux[i].debug_mux);
2608 writel_relaxed(regval, MMSS_REG_BASE(MMSS_DEBUG_CLK_CTL));
2609
2610 /* Activate debug clock output */
2611 regval |= BIT(16);
2612 writel_relaxed(regval, MMSS_REG_BASE(MMSS_DEBUG_CLK_CTL));
2613 break;
2614
2615 case LPASS_BASE:
2616 writel_relaxed(0, LPASS_REG_BASE(LPASS_DEBUG_CLK_CTL));
2617 clk_sel = 0x161;
2618 regval = BVAL(11, 0, measure_mux[i].debug_mux);
2619 writel_relaxed(regval, LPASS_REG_BASE(LPASS_DEBUG_CLK_CTL));
2620
2621 /* Activate debug clock output */
2622 regval |= BIT(20);
2623 writel_relaxed(regval, LPASS_REG_BASE(LPASS_DEBUG_CLK_CTL));
2624 break;
2625
2626 case APCS_BASE:
2627 clk->multiplier = 4;
2628 clk_sel = 0x16A;
2629 regval = measure_mux[i].debug_mux;
Vikram Mulukutlaf0279052013-04-30 14:51:58 -07002630 /* Use a divider value of 4. */
2631 regval |= BVAL(31, 30, 0x3);
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07002632 writel_relaxed(regval, APCS_REG_BASE(GLB_CLK_DIAG));
2633 break;
2634
2635 default:
2636 return -EINVAL;
2637 }
2638
2639 /* Set debug mux clock index */
2640 regval = BVAL(8, 0, clk_sel);
2641 writel_relaxed(regval, GCC_REG_BASE(GCC_DEBUG_CLK_CTL));
2642
2643 /* Activate debug clock output */
2644 regval |= BIT(16);
2645 writel_relaxed(regval, GCC_REG_BASE(GCC_DEBUG_CLK_CTL));
2646
2647 /* Make sure test vector is set before starting measurements. */
2648 mb();
2649 spin_unlock_irqrestore(&local_clock_reg_lock, flags);
2650
2651 return 0;
2652}
2653
2654#define CLOCK_FRQ_MEASURE_CTL 0x1884
2655#define CLOCK_FRQ_MEASURE_STATUS 0x1888
2656
2657/* Sample clock for 'ticks' reference clock ticks. */
2658static u32 run_measurement(unsigned ticks)
2659{
2660 /* Stop counters and set the XO4 counter start value. */
2661 writel_relaxed(ticks, GCC_REG_BASE(CLOCK_FRQ_MEASURE_CTL));
2662
2663 /* Wait for timer to become ready. */
2664 while ((readl_relaxed(GCC_REG_BASE(CLOCK_FRQ_MEASURE_STATUS)) &
2665 BIT(25)) != 0)
2666 cpu_relax();
2667
2668 /* Run measurement and wait for completion. */
2669 writel_relaxed(BIT(20)|ticks, GCC_REG_BASE(CLOCK_FRQ_MEASURE_CTL));
2670 while ((readl_relaxed(GCC_REG_BASE(CLOCK_FRQ_MEASURE_STATUS)) &
2671 BIT(25)) == 0)
2672 cpu_relax();
2673
2674 /* Return measured ticks. */
2675 return readl_relaxed(GCC_REG_BASE(CLOCK_FRQ_MEASURE_STATUS)) &
2676 BM(24, 0);
2677}
2678
2679#define GCC_XO_DIV4_CBCR 0x10C8
2680#define PLLTEST_PAD_CFG 0x188C
2681
2682/*
2683 * Perform a hardware rate measurement for a given clock.
2684 * FOR DEBUG USE ONLY: Measurements take ~15 ms!
2685 */
2686static unsigned long measure_clk_get_rate(struct clk *c)
2687{
2688 unsigned long flags;
2689 u32 gcc_xo4_reg_backup;
2690 u64 raw_count_short, raw_count_full;
2691 struct measure_clk *clk = to_measure_clk(c);
2692 unsigned ret;
2693
2694 ret = clk_prepare_enable(&gcc_xo_clk_src.c);
2695 if (ret) {
2696 pr_warning("CXO clock failed to enable. Can't measure\n");
2697 return 0;
2698 }
2699
2700 spin_lock_irqsave(&local_clock_reg_lock, flags);
2701
2702 /* Enable CXO/4 and RINGOSC branch. */
2703 gcc_xo4_reg_backup = readl_relaxed(GCC_REG_BASE(GCC_XO_DIV4_CBCR));
2704 writel_relaxed(0x1, GCC_REG_BASE(GCC_XO_DIV4_CBCR));
2705
2706 /*
2707 * The ring oscillator counter will not reset if the measured clock
2708 * is not running. To detect this, run a short measurement before
2709 * the full measurement. If the raw results of the two are the same
2710 * then the clock must be off.
2711 */
2712
2713 /* Run a short measurement. (~1 ms) */
2714 raw_count_short = run_measurement(0x1000);
2715 /* Run a full measurement. (~14 ms) */
2716 raw_count_full = run_measurement(clk->sample_ticks);
2717
2718 writel_relaxed(gcc_xo4_reg_backup, GCC_REG_BASE(GCC_XO_DIV4_CBCR));
2719
2720 /* Return 0 if the clock is off. */
2721 if (raw_count_full == raw_count_short) {
2722 ret = 0;
2723 } else {
2724 /* Compute rate in Hz. */
2725 raw_count_full = ((raw_count_full * 10) + 15) * 4800000;
2726 do_div(raw_count_full, ((clk->sample_ticks * 10) + 35));
2727 ret = (raw_count_full * clk->multiplier);
2728 }
2729
2730 writel_relaxed(0x51A00, GCC_REG_BASE(PLLTEST_PAD_CFG));
2731 spin_unlock_irqrestore(&local_clock_reg_lock, flags);
2732
2733 clk_disable_unprepare(&gcc_xo_clk_src.c);
2734
2735 return ret;
2736}
2737#else /* !CONFIG_DEBUG_FS */
2738static int measure_clk_set_parent(struct clk *clk, struct clk *parent)
2739{
2740 return -EINVAL;
2741}
2742
2743static unsigned long measure_clk_get_rate(struct clk *clk)
2744{
2745 return 0;
2746}
2747#endif /* CONFIG_DEBUG_FS */
2748
2749static struct clk_ops clk_ops_measure = {
2750 .set_parent = measure_clk_set_parent,
2751 .get_rate = measure_clk_get_rate,
2752};
2753
2754static struct measure_clk measure_clk = {
2755 .c = {
2756 .dbg_name = "measure_clk",
2757 .ops = &clk_ops_measure,
2758 CLK_INIT(measure_clk.c),
2759 },
2760 .multiplier = 1,
2761};
2762
Syed Rameez Mustafa3971c142013-01-09 19:04:53 -08002763static struct clk_lookup msm_clocks_8610[] = {
Mayank Rana05754c92013-07-24 17:12:37 +05302764 CLK_LOOKUP("xo", cxo_otg_clk.c, "f9a55000.usb"),
Vikram Mulukutlaae4ae302013-04-24 12:00:28 -07002765 CLK_LOOKUP("xo", cxo_lpass_pil_clk.c, "fe200000.qcom,lpass"),
2766 CLK_LOOKUP("xo", cxo_lpm_clk.c, "fc4281d0.qcom,mpm"),
Vikram Mulukutlacee3bcf2013-03-13 15:55:45 -07002767
Vikram Mulukutlaae4ae302013-04-24 12:00:28 -07002768 CLK_LOOKUP("xo", cxo_mss_pil_clk.c, "fc880000.qcom,mss"),
Vikram Mulukutlacee3bcf2013-03-13 15:55:45 -07002769 CLK_LOOKUP("bus_clk", gcc_mss_q6_bimc_axi_clk.c, "fc880000.qcom,mss"),
2770 CLK_LOOKUP("iface_clk", gcc_mss_cfg_ahb_clk.c, "fc880000.qcom,mss"),
2771 CLK_LOOKUP("mem_clk", gcc_boot_rom_ahb_clk.c, "fc880000.qcom,mss"),
2772
Vikram Mulukutlaae4ae302013-04-24 12:00:28 -07002773 CLK_LOOKUP("xo", cxo_pil_mba_clk.c, "pil-mba"),
2774 CLK_LOOKUP("xo", cxo_wlan_clk.c, "fb000000.qcom,wcnss-wlan"),
2775 CLK_LOOKUP("xo", cxo_pil_pronto_clk.c, "fb21b000.qcom,pronto"),
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07002776 CLK_LOOKUP("measure", measure_clk.c, "debug"),
2777
2778 CLK_LOOKUP("iface_clk", gcc_blsp1_ahb_clk.c, "f991f000.serial"),
2779 CLK_LOOKUP("core_clk", gcc_blsp1_uart3_apps_clk.c, "f991f000.serial"),
Hanumant Singhbbf01da2013-04-09 16:27:28 -07002780 CLK_LOOKUP("iface_clk", gcc_blsp1_ahb_clk.c, "f991e000.serial"),
2781 CLK_LOOKUP("core_clk", gcc_blsp1_uart2_apps_clk.c, "f991e000.serial"),
Chandra Ramachandranc7c6e382013-07-31 16:34:10 -07002782 CLK_LOOKUP("bus_clk", pnoc_keepalive_a_clk.c, ""),
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07002783 CLK_LOOKUP("dfab_clk", pnoc_sps_clk.c, "msm_sps"),
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07002784
2785 CLK_LOOKUP("bus_clk", snoc_clk.c, ""),
2786 CLK_LOOKUP("bus_clk", pnoc_clk.c, ""),
2787 CLK_LOOKUP("bus_clk", cnoc_clk.c, ""),
2788 CLK_LOOKUP("mem_clk", bimc_clk.c, ""),
2789 CLK_LOOKUP("bus_clk", snoc_a_clk.c, ""),
2790 CLK_LOOKUP("bus_clk", pnoc_a_clk.c, ""),
2791 CLK_LOOKUP("bus_clk", cnoc_a_clk.c, ""),
2792 CLK_LOOKUP("mem_clk", bimc_a_clk.c, ""),
2793
2794 CLK_LOOKUP("bus_clk", cnoc_msmbus_clk.c, "msm_config_noc"),
2795 CLK_LOOKUP("bus_a_clk", cnoc_msmbus_a_clk.c, "msm_config_noc"),
2796 CLK_LOOKUP("bus_clk", snoc_msmbus_clk.c, "msm_sys_noc"),
2797 CLK_LOOKUP("bus_a_clk", snoc_msmbus_a_clk.c, "msm_sys_noc"),
2798 CLK_LOOKUP("bus_clk", pnoc_msmbus_clk.c, "msm_periph_noc"),
2799 CLK_LOOKUP("bus_a_clk", pnoc_msmbus_a_clk.c, "msm_periph_noc"),
2800 CLK_LOOKUP("mem_clk", bimc_msmbus_clk.c, "msm_bimc"),
2801 CLK_LOOKUP("mem_a_clk", bimc_msmbus_a_clk.c, "msm_bimc"),
2802 CLK_LOOKUP("mem_clk", bimc_acpu_a_clk.c, ""),
Gagan Mac125029b2013-03-07 17:24:27 -07002803 CLK_LOOKUP("bus_clk", mmss_s0_axi_clk.c, "msm_mmss_noc"),
2804 CLK_LOOKUP("bus_a_clk", mmss_s0_axi_clk.c, "msm_mmss_noc"),
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07002805
Aparna Das0f5a6ea2013-03-06 15:28:08 -08002806 /* CoreSight clocks */
2807 CLK_LOOKUP("core_clk", qdss_clk.c, "fc326000.tmc"),
2808 CLK_LOOKUP("core_clk", qdss_clk.c, "fc320000.tpiu"),
2809 CLK_LOOKUP("core_clk", qdss_clk.c, "fc324000.replicator"),
2810 CLK_LOOKUP("core_clk", qdss_clk.c, "fc325000.tmc"),
2811 CLK_LOOKUP("core_clk", qdss_clk.c, "fc323000.funnel"),
2812 CLK_LOOKUP("core_clk", qdss_clk.c, "fc321000.funnel"),
2813 CLK_LOOKUP("core_clk", qdss_clk.c, "fc322000.funnel"),
2814 CLK_LOOKUP("core_clk", qdss_clk.c, "fc355000.funnel"),
2815 CLK_LOOKUP("core_clk", qdss_clk.c, "fc302000.stm"),
2816 CLK_LOOKUP("core_clk", qdss_clk.c, "fc34c000.etm"),
2817 CLK_LOOKUP("core_clk", qdss_clk.c, "fc34d000.etm"),
2818 CLK_LOOKUP("core_clk", qdss_clk.c, "fc34e000.etm"),
2819 CLK_LOOKUP("core_clk", qdss_clk.c, "fc34f000.etm"),
2820 CLK_LOOKUP("core_clk", qdss_clk.c, "fc301000.csr"),
2821 CLK_LOOKUP("core_clk", qdss_clk.c, "fc310000.cti"),
2822 CLK_LOOKUP("core_clk", qdss_clk.c, "fc311000.cti"),
2823 CLK_LOOKUP("core_clk", qdss_clk.c, "fc312000.cti"),
2824 CLK_LOOKUP("core_clk", qdss_clk.c, "fc313000.cti"),
2825 CLK_LOOKUP("core_clk", qdss_clk.c, "fc314000.cti"),
2826 CLK_LOOKUP("core_clk", qdss_clk.c, "fc315000.cti"),
2827 CLK_LOOKUP("core_clk", qdss_clk.c, "fc316000.cti"),
2828 CLK_LOOKUP("core_clk", qdss_clk.c, "fc317000.cti"),
2829 CLK_LOOKUP("core_clk", qdss_clk.c, "fc318000.cti"),
2830 CLK_LOOKUP("core_clk", qdss_clk.c, "fc351000.cti"),
2831 CLK_LOOKUP("core_clk", qdss_clk.c, "fc352000.cti"),
2832 CLK_LOOKUP("core_clk", qdss_clk.c, "fc353000.cti"),
2833 CLK_LOOKUP("core_clk", qdss_clk.c, "fc354000.cti"),
Aparna Das29e23432013-04-16 16:37:39 -07002834 CLK_LOOKUP("core_clk", qdss_clk.c, "fc34c000.jtagmm"),
2835 CLK_LOOKUP("core_clk", qdss_clk.c, "fc34d000.jtagmm"),
2836 CLK_LOOKUP("core_clk", qdss_clk.c, "fc34e000.jtagmm"),
2837 CLK_LOOKUP("core_clk", qdss_clk.c, "fc34f000.jtagmm"),
Aparna Das05172f22013-05-13 15:06:44 -07002838 CLK_LOOKUP("core_clk", qdss_clk.c, "fd820018.hwevent"),
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07002839
Aparna Das0f5a6ea2013-03-06 15:28:08 -08002840
2841 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc326000.tmc"),
2842 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc320000.tpiu"),
2843 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc324000.replicator"),
2844 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc325000.tmc"),
2845 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc323000.funnel"),
2846 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc321000.funnel"),
2847 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc322000.funnel"),
2848 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc355000.funnel"),
2849 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc302000.stm"),
2850 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc34c000.etm"),
2851 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc34d000.etm"),
2852 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc34e000.etm"),
2853 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc34f000.etm"),
2854 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc301000.csr"),
2855 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc310000.cti"),
2856 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc311000.cti"),
2857 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc312000.cti"),
2858 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc313000.cti"),
2859 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc314000.cti"),
2860 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc315000.cti"),
2861 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc316000.cti"),
2862 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc317000.cti"),
2863 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc318000.cti"),
2864 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc351000.cti"),
2865 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc352000.cti"),
2866 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc353000.cti"),
2867 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc354000.cti"),
Aparna Das29e23432013-04-16 16:37:39 -07002868 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc34c000.jtagmm"),
2869 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc34d000.jtagmm"),
2870 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc34e000.jtagmm"),
2871 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc34f000.jtagmm"),
Aparna Das05172f22013-05-13 15:06:44 -07002872 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fd820018.hwevent"),
Aparna Das0f5a6ea2013-03-06 15:28:08 -08002873
Aparna Das05172f22013-05-13 15:06:44 -07002874 CLK_LOOKUP("core_mmss_clk", mmss_misc_ahb_clk.c, "fd820018.hwevent"),
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07002875
2876 CLK_LOOKUP("core_clk_src", blsp1_qup1_spi_apps_clk_src.c, ""),
2877 CLK_LOOKUP("core_clk_src", blsp1_qup2_spi_apps_clk_src.c, ""),
2878 CLK_LOOKUP("core_clk_src", blsp1_qup3_spi_apps_clk_src.c, ""),
2879 CLK_LOOKUP("core_clk_src", blsp1_qup4_spi_apps_clk_src.c, ""),
2880 CLK_LOOKUP("core_clk_src", blsp1_qup5_spi_apps_clk_src.c, ""),
2881 CLK_LOOKUP("core_clk_src", blsp1_qup6_spi_apps_clk_src.c, ""),
2882 CLK_LOOKUP("core_clk_src", blsp1_uart1_apps_clk_src.c, ""),
2883 CLK_LOOKUP("core_clk_src", blsp1_uart2_apps_clk_src.c, ""),
2884 CLK_LOOKUP("core_clk_src", blsp1_uart3_apps_clk_src.c, ""),
2885 CLK_LOOKUP("core_clk_src", blsp1_uart4_apps_clk_src.c, ""),
2886 CLK_LOOKUP("core_clk_src", blsp1_uart5_apps_clk_src.c, ""),
2887 CLK_LOOKUP("core_clk_src", blsp1_uart6_apps_clk_src.c, ""),
2888 CLK_LOOKUP("core_clk_src", ce1_clk_src.c, ""),
2889 CLK_LOOKUP("core_clk_src", gp1_clk_src.c, ""),
2890 CLK_LOOKUP("core_clk_src", gp2_clk_src.c, ""),
2891 CLK_LOOKUP("core_clk_src", gp3_clk_src.c, ""),
2892 CLK_LOOKUP("core_clk_src", pdm2_clk_src.c, ""),
2893 CLK_LOOKUP("core_clk_src", sdcc1_apps_clk_src.c, ""),
2894 CLK_LOOKUP("core_clk_src", sdcc2_apps_clk_src.c, ""),
2895 CLK_LOOKUP("core_clk_src", usb_hs_system_clk_src.c, ""),
Chun Zhangf39a0652013-05-01 15:57:54 -07002896 CLK_LOOKUP("iface_clk", gcc_blsp1_ahb_clk.c, "f9923000.i2c"),
Gilad Avidovf84f2792013-01-31 13:26:39 -07002897 CLK_LOOKUP("iface_clk", gcc_blsp1_ahb_clk.c, "f9925000.i2c"),
Kuirong Wangc6d072c2013-01-29 10:33:03 -08002898 CLK_LOOKUP("iface_clk", gcc_blsp1_ahb_clk.c, "f9927000.i2c"),
Gilad Avidova460c472013-04-12 16:23:32 -06002899 CLK_LOOKUP("iface_clk", gcc_blsp1_ahb_clk.c, "f9926000.spi"),
Chun Zhangf39a0652013-05-01 15:57:54 -07002900 CLK_LOOKUP("core_clk", gcc_blsp1_qup1_i2c_apps_clk.c, "f9923000.i2c"),
2901 CLK_LOOKUP("core_clk", gcc_blsp1_qup1_spi_apps_clk.c, ""),
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07002902 CLK_LOOKUP("core_clk", gcc_blsp1_qup2_i2c_apps_clk.c, ""),
2903 CLK_LOOKUP("core_clk", gcc_blsp1_qup2_spi_apps_clk.c, ""),
Gilad Avidovf84f2792013-01-31 13:26:39 -07002904 CLK_LOOKUP("core_clk", gcc_blsp1_qup3_i2c_apps_clk.c, "f9925000.i2c"),
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07002905 CLK_LOOKUP("core_clk", gcc_blsp1_qup3_spi_apps_clk.c, ""),
2906 CLK_LOOKUP("core_clk", gcc_blsp1_qup4_i2c_apps_clk.c, ""),
Gilad Avidova460c472013-04-12 16:23:32 -06002907 CLK_LOOKUP("core_clk", gcc_blsp1_qup4_spi_apps_clk.c, "f9926000.spi"),
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07002908 CLK_LOOKUP("core_clk", gcc_blsp1_qup4_spi_apps_clk.c, ""),
Kuirong Wangc6d072c2013-01-29 10:33:03 -08002909 CLK_LOOKUP("core_clk", gcc_blsp1_qup5_i2c_apps_clk.c, "f9927000.i2c"),
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07002910 CLK_LOOKUP("core_clk", gcc_blsp1_qup5_spi_apps_clk.c, ""),
Kenneth Heitke0d4fbb12013-04-10 12:51:14 -06002911 CLK_LOOKUP("iface_clk", gcc_blsp1_ahb_clk.c, "f9928000.i2c"),
2912 CLK_LOOKUP("core_clk", gcc_blsp1_qup6_i2c_apps_clk.c, "f9928000.i2c"),
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07002913 CLK_LOOKUP("core_clk", gcc_blsp1_qup6_spi_apps_clk.c, ""),
2914 CLK_LOOKUP("core_clk", gcc_blsp1_uart1_apps_clk.c, ""),
2915 CLK_LOOKUP("core_clk", gcc_blsp1_uart2_apps_clk.c, ""),
2916 CLK_LOOKUP("core_clk", gcc_blsp1_uart3_apps_clk.c, ""),
2917 CLK_LOOKUP("core_clk", gcc_blsp1_uart4_apps_clk.c, ""),
2918 CLK_LOOKUP("core_clk", gcc_blsp1_uart5_apps_clk.c, ""),
2919 CLK_LOOKUP("core_clk", gcc_blsp1_uart6_apps_clk.c, ""),
2920 CLK_LOOKUP("iface_clk", gcc_boot_rom_ahb_clk.c, ""),
2921 CLK_LOOKUP("iface_clk", gcc_ce1_ahb_clk.c, ""),
2922 CLK_LOOKUP("core_clk", gcc_ce1_axi_clk.c, ""),
2923 CLK_LOOKUP("core_clk", gcc_ce1_clk.c, ""),
2924 CLK_LOOKUP("iface_clk", gcc_copss_smmu_ahb_clk.c, ""),
2925 CLK_LOOKUP("iface_clk", gcc_lpss_smmu_ahb_clk.c, ""),
2926 CLK_LOOKUP("core_clk", gcc_gp1_clk.c, ""),
2927 CLK_LOOKUP("core_clk", gcc_gp2_clk.c, ""),
2928 CLK_LOOKUP("core_clk", gcc_gp3_clk.c, ""),
2929 CLK_LOOKUP("core_clk", gcc_lpass_q6_axi_clk.c, ""),
2930 CLK_LOOKUP("iface_clk", gcc_mss_cfg_ahb_clk.c, ""),
2931 CLK_LOOKUP("core_clk", gcc_mss_q6_bimc_axi_clk.c, ""),
2932 CLK_LOOKUP("core_clk", gcc_pdm2_clk.c, ""),
2933 CLK_LOOKUP("iface_clk", gcc_pdm_ahb_clk.c, ""),
Hariprasad Dhalinarasimha2cced7d2013-04-13 17:25:58 -07002934 CLK_LOOKUP("iface_clk", gcc_prng_ahb_clk.c, "f9bff000.qcom,msm-rng"),
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07002935 CLK_LOOKUP("iface_clk", gcc_sdcc1_ahb_clk.c, "msm_sdcc.1"),
2936 CLK_LOOKUP("core_clk", gcc_sdcc1_apps_clk.c, "msm_sdcc.1"),
2937 CLK_LOOKUP("iface_clk", gcc_sdcc2_ahb_clk.c, "msm_sdcc.2"),
2938 CLK_LOOKUP("core_clk", gcc_sdcc2_apps_clk.c, "msm_sdcc.2"),
Mayank Rana05754c92013-07-24 17:12:37 +05302939 CLK_LOOKUP("sleep_clk", gcc_usb2a_phy_sleep_clk.c, "f9a55000.usb"),
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07002940 CLK_LOOKUP("iface_clk", gcc_usb_hs_ahb_clk.c, "f9a55000.usb"),
2941 CLK_LOOKUP("core_clk", gcc_usb_hs_system_clk.c, "f9a55000.usb"),
2942
2943 CLK_LOOKUP("core_clk_src", csi0_clk_src.c, ""),
2944 CLK_LOOKUP("core_clk_src", axi_clk_src.c, ""),
Vikram Mulukutlae1e5c482013-01-28 14:43:20 -08002945 CLK_LOOKUP("", mdp_axi_clk_src.c, ""),
2946 CLK_LOOKUP("", mmssnoc_axi_clk_src.c, ""),
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07002947 CLK_LOOKUP("core_clk_src", dsi_pclk_clk_src.c, ""),
2948 CLK_LOOKUP("core_clk_src", gfx3d_clk_src.c, ""),
2949 CLK_LOOKUP("core_clk_src", vfe_clk_src.c, ""),
2950 CLK_LOOKUP("core_clk_src", csi1_clk_src.c, ""),
2951 CLK_LOOKUP("core_clk_src", csi0phytimer_clk_src.c, ""),
2952 CLK_LOOKUP("core_clk_src", csi1phytimer_clk_src.c, ""),
2953 CLK_LOOKUP("core_clk_src", dsi_clk_src.c, ""),
2954 CLK_LOOKUP("core_clk_src", dsi_byte_clk_src.c, ""),
2955 CLK_LOOKUP("core_clk_src", dsi_esc_clk_src.c, ""),
2956 CLK_LOOKUP("core_clk_src", mclk0_clk_src.c, ""),
2957 CLK_LOOKUP("core_clk_src", mclk1_clk_src.c, ""),
2958 CLK_LOOKUP("core_clk_src", mdp_vsync_clk_src.c, ""),
2959
2960 CLK_LOOKUP("core_clk", bimc_gfx_clk.c, ""),
2961 CLK_LOOKUP("core_clk", csi0_clk.c, ""),
2962 CLK_LOOKUP("core_clk", csi0phy_clk.c, ""),
2963 CLK_LOOKUP("core_clk", csi0phytimer_clk.c, ""),
2964 CLK_LOOKUP("core_clk", csi0pix_clk.c, ""),
2965 CLK_LOOKUP("core_clk", csi0rdi_clk.c, ""),
2966 CLK_LOOKUP("core_clk", csi1_clk.c, ""),
2967 CLK_LOOKUP("core_clk", csi1phy_clk.c, ""),
2968 CLK_LOOKUP("core_clk", csi1phytimer_clk.c, ""),
2969 CLK_LOOKUP("core_clk", csi1pix_clk.c, ""),
2970 CLK_LOOKUP("core_clk", csi1rdi_clk.c, ""),
2971 CLK_LOOKUP("core_clk", csi_ahb_clk.c, ""),
2972 CLK_LOOKUP("core_clk", csi_vfe_clk.c, ""),
2973 CLK_LOOKUP("core_clk", dsi_clk.c, ""),
2974 CLK_LOOKUP("core_clk", dsi_ahb_clk.c, ""),
2975 CLK_LOOKUP("core_clk", dsi_byte_clk.c, ""),
2976 CLK_LOOKUP("core_clk", dsi_esc_clk.c, ""),
2977 CLK_LOOKUP("core_clk", dsi_pclk_clk.c, ""),
2978 CLK_LOOKUP("core_clk", gmem_gfx3d_clk.c, ""),
2979 CLK_LOOKUP("core_clk", mclk0_clk.c, ""),
2980 CLK_LOOKUP("core_clk", mclk1_clk.c, ""),
2981 CLK_LOOKUP("core_clk", mdp_ahb_clk.c, ""),
2982 CLK_LOOKUP("core_clk", mdp_axi_clk.c, ""),
2983 CLK_LOOKUP("core_clk", mdp_dsi_clk.c, ""),
2984 CLK_LOOKUP("core_clk", mdp_lcdc_clk.c, ""),
2985 CLK_LOOKUP("core_clk", mdp_vsync_clk.c, ""),
2986 CLK_LOOKUP("core_clk", mmss_misc_ahb_clk.c, ""),
2987 CLK_LOOKUP("core_clk", mmss_s0_axi_clk.c, ""),
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07002988 CLK_LOOKUP("core_clk", mmss_mmssnoc_bto_ahb_clk.c, ""),
2989 CLK_LOOKUP("core_clk", mmss_mmssnoc_axi_clk.c, ""),
2990 CLK_LOOKUP("core_clk", vfe_clk.c, ""),
2991 CLK_LOOKUP("core_clk", vfe_ahb_clk.c, ""),
2992 CLK_LOOKUP("core_clk", vfe_axi_clk.c, ""),
2993
Vikram Mulukutla49423392013-05-02 09:03:02 -07002994 CLK_LOOKUP("core_clk", csi0pix_cam_mux_clk.c, ""),
2995 CLK_LOOKUP("core_clk", csi0phy_cam_mux_clk.c, ""),
2996 CLK_LOOKUP("core_clk", csi1phy_cam_mux_clk.c, ""),
2997 CLK_LOOKUP("core_clk", rdi2_cam_mux_clk.c, ""),
2998 CLK_LOOKUP("core_clk", rdi1_cam_mux_clk.c, ""),
2999 CLK_LOOKUP("core_clk", rdi0_cam_mux_clk.c, ""),
Vikram Mulukutla8964a382013-04-10 14:30:50 -07003000
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07003001 CLK_LOOKUP("core_clk", oxili_gfx3d_clk.c, "fdc00000.qcom,kgsl-3d0"),
3002 CLK_LOOKUP("iface_clk", oxili_ahb_clk.c, "fdc00000.qcom,kgsl-3d0"),
3003 CLK_LOOKUP("mem_iface_clk", bimc_gfx_clk.c, "fdc00000.qcom,kgsl-3d0"),
3004 CLK_LOOKUP("mem_clk", gmem_gfx3d_clk.c, "fdc00000.qcom,kgsl-3d0"),
Vikram Mulukutla55318acb2013-04-15 17:47:34 -07003005 CLK_LOOKUP("alt_mem_iface_clk", gcc_bimc_smmu_clk.c,
3006 "fdc00000.qcom,kgsl-3d0"),
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07003007
3008 CLK_LOOKUP("iface_clk", vfe_ahb_clk.c, "fd890000.qcom,iommu"),
3009 CLK_LOOKUP("core_clk", vfe_axi_clk.c, "fd890000.qcom,iommu"),
3010 CLK_LOOKUP("iface_clk", mdp_ahb_clk.c, "fd860000.qcom,iommu"),
3011 CLK_LOOKUP("core_clk", mdp_axi_clk.c, "fd860000.qcom,iommu"),
3012 CLK_LOOKUP("iface_clk", mdp_ahb_clk.c, "fd870000.qcom,iommu"),
3013 CLK_LOOKUP("core_clk", mdp_axi_clk.c, "fd870000.qcom,iommu"),
3014 CLK_LOOKUP("iface_clk", oxili_ahb_clk.c, "fd880000.qcom,iommu"),
3015 CLK_LOOKUP("core_clk", bimc_gfx_clk.c, "fd880000.qcom,iommu"),
Vikram Mulukutla55318acb2013-04-15 17:47:34 -07003016 CLK_LOOKUP("alt_core_clk", gcc_bimc_smmu_clk.c, "fd880000.qcom,iommu"),
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07003017 CLK_LOOKUP("iface_clk", gcc_lpss_smmu_ahb_clk.c, "fd000000.qcom,iommu"),
3018 CLK_LOOKUP("core_clk", gcc_lpass_q6_axi_clk.c, "fd000000.qcom,iommu"),
3019 CLK_LOOKUP("iface_clk", gcc_copss_smmu_ahb_clk.c,
3020 "fd010000.qcom,iommu"),
3021 CLK_LOOKUP("core_clk", pnoc_iommu_clk.c, "fd010000.qcom,iommu"),
3022
Lokesh Kumar Aakulu329a3472013-06-03 06:08:17 -07003023 /* MM sensor clocks */
3024 CLK_LOOKUP("cam_src_clk", mclk0_clk_src.c, "6-006f"),
Li Sun3eb82a62013-06-14 15:14:22 +08003025 CLK_LOOKUP("cam_src_clk", mclk0_clk_src.c, "6-007d"),
Lokesh Kumar Aakulu329a3472013-06-03 06:08:17 -07003026 CLK_LOOKUP("cam_src_clk", mclk0_clk_src.c, "6-006d"),
Ju He543b5802013-06-07 16:03:34 -07003027 CLK_LOOKUP("cam_src_clk", mclk1_clk_src.c, "6-0078"),
Yu Yang8744be82013-06-18 14:39:37 +08003028 CLK_LOOKUP("cam_src_clk", mclk0_clk_src.c, "6-0020"),
Wei Ding7d2f73d2013-09-10 09:41:10 +08003029 CLK_LOOKUP("cam_src_clk", mclk0_clk_src.c, "6-006a"),
Lokesh Kumar Aakulu329a3472013-06-03 06:08:17 -07003030 CLK_LOOKUP("cam_clk", mclk0_clk.c, "6-006f"),
Li Sun3eb82a62013-06-14 15:14:22 +08003031 CLK_LOOKUP("cam_clk", mclk0_clk.c, "6-007d"),
Lokesh Kumar Aakulu329a3472013-06-03 06:08:17 -07003032 CLK_LOOKUP("cam_clk", mclk0_clk.c, "6-006d"),
Ju He543b5802013-06-07 16:03:34 -07003033 CLK_LOOKUP("cam_clk", mclk1_clk.c, "6-0078"),
Yu Yang8744be82013-06-18 14:39:37 +08003034 CLK_LOOKUP("cam_clk", mclk0_clk.c, "6-0020"),
Wei Ding7d2f73d2013-09-10 09:41:10 +08003035 CLK_LOOKUP("cam_clk", mclk0_clk.c, "6-006a"),
Lokesh Kumar Aakulu329a3472013-06-03 06:08:17 -07003036
3037
3038 /* CSIPHY clocks */
3039 CLK_LOOKUP("csiphy_timer_src_clk", csi0phytimer_clk_src.c,
3040 "fda00c00.qcom,csiphy"),
3041 CLK_LOOKUP("csiphy_timer_clk", csi0phytimer_clk.c,
3042 "fda00c00.qcom,csiphy"),
3043 CLK_LOOKUP("csiphy_timer_src_clk", csi1phytimer_clk_src.c,
3044 "fda01000.qcom,csiphy"),
3045 CLK_LOOKUP("csiphy_timer_clk", csi1phytimer_clk.c,
3046 "fda01000.qcom,csiphy"),
3047
3048 /* CSID clocks */
juhe85f33272013-05-10 15:21:08 +08003049 CLK_LOOKUP("csi_clk", csi0_clk.c, "fda00000.qcom,csid"),
Lokesh Kumar Aakulu329a3472013-06-03 06:08:17 -07003050 CLK_LOOKUP("csi_src_clk", csi0_clk_src.c, "fda00000.qcom,csid"),
juhe85f33272013-05-10 15:21:08 +08003051 CLK_LOOKUP("csi_ahb_clk", csi_ahb_clk.c, "fda00000.qcom,csid"),
3052 CLK_LOOKUP("csi0phy_mux_clk", csi0phy_cam_mux_clk.c,
3053 "fda00000.qcom,csid"),
3054 CLK_LOOKUP("csi1phy_mux_clk", csi1phy_cam_mux_clk.c,
3055 "fda00000.qcom,csid"),
3056 CLK_LOOKUP("csi0pix_mux_clk", csi0pix_cam_mux_clk.c,
3057 "fda00000.qcom,csid"),
3058 CLK_LOOKUP("csi0rdi_mux_clk", rdi0_cam_mux_clk.c,
3059 "fda00000.qcom,csid"),
3060 CLK_LOOKUP("csi1rdi_mux_clk", rdi1_cam_mux_clk.c,
3061 "fda00000.qcom,csid"),
3062 CLK_LOOKUP("csi2rdi_mux_clk", rdi2_cam_mux_clk.c,
3063 "fda00000.qcom,csid"),
Lokesh Kumar Aakulu329a3472013-06-03 06:08:17 -07003064
juhe85f33272013-05-10 15:21:08 +08003065 CLK_LOOKUP("csi_clk", csi1_clk.c, "fda00400.qcom,csid"),
Lokesh Kumar Aakulu329a3472013-06-03 06:08:17 -07003066 CLK_LOOKUP("csi_src_clk", csi1_clk_src.c, "fda00400.qcom,csid"),
juhe85f33272013-05-10 15:21:08 +08003067 CLK_LOOKUP("csi_ahb_clk", csi_ahb_clk.c, "fda00400.qcom,csid"),
3068 CLK_LOOKUP("csi0phy_mux_clk", csi0phy_cam_mux_clk.c,
3069 "fda00400.qcom,csid"),
3070 CLK_LOOKUP("csi1phy_mux_clk", csi1phy_cam_mux_clk.c,
3071 "fda00400.qcom,csid"),
3072 CLK_LOOKUP("csi0pix_mux_clk", csi0pix_cam_mux_clk.c,
3073 "fda00400.qcom,csid"),
3074 CLK_LOOKUP("csi0rdi_mux_clk", rdi0_cam_mux_clk.c,
3075 "fda00400.qcom,csid"),
3076 CLK_LOOKUP("csi1rdi_mux_clk", rdi1_cam_mux_clk.c,
3077 "fda00400.qcom,csid"),
3078 CLK_LOOKUP("csi2rdi_mux_clk", rdi2_cam_mux_clk.c,
3079 "fda00400.qcom,csid"),
Lokesh Kumar Aakulu329a3472013-06-03 06:08:17 -07003080
juhe85f33272013-05-10 15:21:08 +08003081 CLK_LOOKUP("csi_phy_src_clk", csi0phy_clk.c, "fda00000.qcom,csid"),
3082 CLK_LOOKUP("csi_phy_src_clk", csi1phy_clk.c, "fda00400.qcom,csid"),
3083 CLK_LOOKUP("csi_pix_src_clk", csi0pix_clk.c, "fda00000.qcom,csid"),
3084 CLK_LOOKUP("csi_pix_src_clk", csi1pix_clk.c, "fda00400.qcom,csid"),
3085 CLK_LOOKUP("csi_rdi_src_clk", csi0rdi_clk.c, "fda00000.qcom,csid"),
3086 CLK_LOOKUP("csi_rdi_src_clk", csi1rdi_clk.c, "fda00400.qcom,csid"),
3087 /* ISPIF need no clock */
Lokesh Kumar Aakulu329a3472013-06-03 06:08:17 -07003088
3089 CLK_LOOKUP("vfe_clk_src", vfe_clk_src.c, "fde00000.qcom,vfe"),
3090 CLK_LOOKUP("vfe_clk", vfe_clk.c, "fde00000.qcom,vfe"),
3091
3092 CLK_LOOKUP("csi_vfe_clk", csi_vfe_clk.c, "fde00000.qcom,vfe"),
3093 CLK_LOOKUP("vfe_ahb_clk", vfe_ahb_clk.c, "fde00000.qcom,vfe"),
3094
3095 CLK_LOOKUP("bus_clk", vfe_axi_clk.c, "fde00000.qcom,vfe"),
3096
3097
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07003098 CLK_LOOKUP("core_clk", q6ss_xo_clk.c, "fe200000.qcom,lpass"),
3099 CLK_LOOKUP("bus_clk", gcc_lpass_q6_axi_clk.c, "fe200000.qcom,lpass"),
3100 CLK_LOOKUP("iface_clk", q6ss_ahb_lfabif_clk.c, "fe200000.qcom,lpass"),
3101 CLK_LOOKUP("reg_clk", q6ss_ahbm_clk.c, "fe200000.qcom,lpass"),
Vikram Mulukutla4157cca2013-01-24 15:42:41 -08003102
Vikram Mulukutlaae4ae302013-04-24 12:00:28 -07003103 CLK_LOOKUP("xo", cxo_acpu_clk.c, "f9011050.qcom,acpuclk"),
Vikram Mulukutla4157cca2013-01-24 15:42:41 -08003104 CLK_LOOKUP("gpll0", gpll0_ao_clk_src.c, "f9011050.qcom,acpuclk"),
3105 CLK_LOOKUP("a7sspll", a7sspll.c, "f9011050.qcom,acpuclk"),
3106
3107 CLK_LOOKUP("measure_clk", apc0_m_clk, ""),
3108 CLK_LOOKUP("measure_clk", apc1_m_clk, ""),
3109 CLK_LOOKUP("measure_clk", apc2_m_clk, ""),
3110 CLK_LOOKUP("measure_clk", apc3_m_clk, ""),
3111 CLK_LOOKUP("measure_clk", l2_m_clk, ""),
Xiaoming Zhou8150acf2013-04-04 16:31:17 -04003112
Vikram Mulukutlaae4ae302013-04-24 12:00:28 -07003113 CLK_LOOKUP("xo", cxo_wlan_clk.c, "fb000000.qcom,wcnss-wlan"),
Vikram Mulukutla7e5b3112013-04-15 16:32:40 -07003114 CLK_LOOKUP("rf_clk", cxo_a1.c, "fb000000.qcom,wcnss-wlan"),
Vikram Mulukutlaed078512013-04-09 14:15:33 -07003115
Xiaoming Zhou8150acf2013-04-04 16:31:17 -04003116 CLK_LOOKUP("iface_clk", mdp_ahb_clk.c, "fd900000.qcom,mdss_mdp"),
3117 CLK_LOOKUP("core_clk", mdp_axi_clk.c, "fd900000.qcom,mdss_mdp"),
3118 CLK_LOOKUP("lcdc_clk", mdp_lcdc_clk.c, "fd900000.qcom,mdss_mdp"),
3119 CLK_LOOKUP("vsync_clk", mdp_vsync_clk.c, "fd900000.qcom,mdss_mdp"),
Xiaoming Zhoud58589e2013-04-10 22:30:51 -04003120 CLK_LOOKUP("dsi_clk", mdp_dsi_clk.c, "fd900000.qcom,mdss_mdp"),
Xiaoming Zhou8150acf2013-04-04 16:31:17 -04003121 CLK_LOOKUP("iface_clk", dsi_ahb_clk.c, "fdd00000.qcom,mdss_dsi"),
Xiaoming Zhoud58589e2013-04-10 22:30:51 -04003122 CLK_LOOKUP("dsi_clk", dsi_clk.c, "fdd00000.qcom,mdss_dsi"),
Xiaoming Zhou8150acf2013-04-04 16:31:17 -04003123 CLK_LOOKUP("byte_clk", dsi_byte_clk.c, "fdd00000.qcom,mdss_dsi"),
3124 CLK_LOOKUP("esc_clk", dsi_esc_clk.c, "fdd00000.qcom,mdss_dsi"),
3125 CLK_LOOKUP("pixel_clk", dsi_pclk_clk.c, "fdd00000.qcom,mdss_dsi"),
Hariprasad Dhalinarasimhad9ede5a2013-04-14 16:30:09 -07003126
3127 /* QSEECOM Clocks */
3128 CLK_LOOKUP("core_clk", gcc_ce1_clk.c, "qseecom"),
3129 CLK_LOOKUP("iface_clk", gcc_ce1_ahb_clk.c, "qseecom"),
3130 CLK_LOOKUP("bus_clk", gcc_ce1_axi_clk.c, "qseecom"),
3131 CLK_LOOKUP("core_clk_src", ce1_clk_src.c, "qseecom"),
Vikram Mulukutlafd6833c2013-04-18 12:46:48 -07003132
3133 CLK_LOOKUP("core_clk", gcc_ce1_clk.c, "scm"),
3134 CLK_LOOKUP("iface_clk", gcc_ce1_ahb_clk.c, "scm"),
3135 CLK_LOOKUP("bus_clk", gcc_ce1_axi_clk.c, "scm"),
3136 CLK_LOOKUP("core_clk_src", ce1_clk_src.c, "scm"),
Hariprasad Dhalinarasimha315b9bd2013-05-14 12:31:56 -07003137
3138 /* Add QCEDEV clocks */
3139 CLK_LOOKUP("core_clk", gcc_ce1_clk.c, "fd400000.qcom,qcedev"),
3140 CLK_LOOKUP("iface_clk", gcc_ce1_ahb_clk.c, "fd400000.qcom,qcedev"),
3141 CLK_LOOKUP("bus_clk", gcc_ce1_axi_clk.c, "fd400000.qcom,qcedev"),
3142 CLK_LOOKUP("core_clk_src", ce1_clk_src.c, "fd400000.qcom,qcedev"),
3143
3144 /* Add QCRYPTO clocks */
3145 CLK_LOOKUP("core_clk", gcc_ce1_clk.c, "fd404000.qcom,qcrypto"),
3146 CLK_LOOKUP("iface_clk", gcc_ce1_ahb_clk.c, "fd404000.qcom,qcrypto"),
3147 CLK_LOOKUP("bus_clk", gcc_ce1_axi_clk.c, "fd404000.qcom,qcrypto"),
3148 CLK_LOOKUP("core_clk_src", ce1_clk_src.c, "fd404000.qcom,qcrypto"),
Matt Wagantall8ce3c462013-07-03 19:24:53 -07003149
3150 /* GDSC clocks */
3151 CLK_LOOKUP("core_clk", vfe_clk.c, "fd8c36a4.qcom,gdsc"),
3152 CLK_LOOKUP("iface_clk", vfe_ahb_clk.c, "fd8c36a4.qcom,gdsc"),
3153 CLK_LOOKUP("bus_clk", vfe_axi_clk.c, "fd8c36a4.qcom,gdsc"),
Matt Wagantall8ce3c462013-07-03 19:24:53 -07003154 CLK_LOOKUP("core_clk", oxili_gfx3d_clk.c, "fd8c4034.qcom,gdsc"),
3155 CLK_LOOKUP("iface_clk", oxili_ahb_clk.c, "fd8c4034.qcom,gdsc"),
3156 CLK_LOOKUP("mem_clk", gmem_gfx3d_clk.c, "fd8c4034.qcom,gdsc"),
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07003157};
3158
Syed Rameez Mustafa3971c142013-01-09 19:04:53 -08003159static struct clk_lookup msm_clocks_8610_rumi[] = {
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07003160 CLK_DUMMY("core_clk", BLSP1_UART_CLK, "f991f000.serial", OFF),
3161 CLK_DUMMY("iface_clk", BLSP1_UART_CLK, "f991f000.serial", OFF),
3162 CLK_DUMMY("iface_clk", HSUSB_IFACE_CLK, "f9a55000.usb", OFF),
3163 CLK_DUMMY("core_clk", HSUSB_CORE_CLK, "f9a55000.usb", OFF),
3164 CLK_DUMMY("iface_clk", NULL, "msm_sdcc.1", OFF),
3165 CLK_DUMMY("core_clk", NULL, "msm_sdcc.1", OFF),
3166 CLK_DUMMY("bus_clk", NULL, "msm_sdcc.1", OFF),
3167 CLK_DUMMY("iface_clk", NULL, "msm_sdcc.2", OFF),
3168 CLK_DUMMY("core_clk", NULL, "msm_sdcc.2", OFF),
3169 CLK_DUMMY("bus_clk", NULL, "msm_sdcc.2", OFF),
3170 CLK_DUMMY("dfab_clk", DFAB_CLK, "msm_sps", OFF),
3171 CLK_DUMMY("iface_clk", NULL, "fd890000.qcom,iommu", OFF),
3172 CLK_DUMMY("core_clk", NULL, "fd890000.qcom,iommu", OFF),
3173 CLK_DUMMY("iface_clk", NULL, "fd860000.qcom,iommu", OFF),
3174 CLK_DUMMY("core_clk", NULL, "fd860000.qcom,iommu", OFF),
3175 CLK_DUMMY("iface_clk", NULL, "fd870000.qcom,iommu", OFF),
3176 CLK_DUMMY("core_clk", NULL, "fd870000.qcom,iommu", OFF),
3177 CLK_DUMMY("iface_clk", NULL, "fd880000.qcom,iommu", OFF),
3178 CLK_DUMMY("core_clk", NULL, "fd880000.qcom,iommu", OFF),
Olav Haugan3431b4c2013-04-30 14:09:08 -07003179 CLK_DUMMY("alt_core_clk", NULL, "fd880000.qcom,iommu", OFF),
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07003180 CLK_DUMMY("iface_clk", NULL, "fd000000.qcom,iommu", OFF),
3181 CLK_DUMMY("core_clk", NULL, "fd000000.qcom,iommu", OFF),
3182 CLK_DUMMY("iface_clk", NULL, "fd010000.qcom,iommu", OFF),
3183 CLK_DUMMY("core_clk", NULL, "fd010000.qcom,iommu", OFF),
Vikram Mulukutla4157cca2013-01-24 15:42:41 -08003184 CLK_DUMMY("xo", NULL, "f9011050.qcom,acpuclk", OFF),
3185 CLK_DUMMY("gpll0", NULL, "f9011050.qcom,acpuclk", OFF),
3186 CLK_DUMMY("a7sspll", NULL, "f9011050.qcom,acpuclk", OFF),
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07003187};
3188
Syed Rameez Mustafa3971c142013-01-09 19:04:53 -08003189struct clock_init_data msm8610_rumi_clock_init_data __initdata = {
3190 .table = msm_clocks_8610_rumi,
3191 .size = ARRAY_SIZE(msm_clocks_8610_rumi),
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07003192};
3193
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07003194/* MMPLL0 at 800 MHz, main output enabled. */
3195static struct pll_config mmpll0_config __initdata = {
3196 .l = 0x29,
3197 .m = 0x2,
3198 .n = 0x3,
3199 .vco_val = 0x0,
3200 .vco_mask = BM(21, 20),
3201 .pre_div_val = 0x0,
3202 .pre_div_mask = BM(14, 12),
3203 .post_div_val = 0x0,
3204 .post_div_mask = BM(9, 8),
3205 .mn_ena_val = BIT(24),
3206 .mn_ena_mask = BIT(24),
3207 .main_output_val = BIT(0),
3208 .main_output_mask = BIT(0),
3209};
3210
3211/* MMPLL1 at 1200 MHz, main output enabled. */
3212static struct pll_config mmpll1_config __initdata = {
3213 .l = 0x3E,
3214 .m = 0x1,
3215 .n = 0x2,
3216 .vco_val = 0x0,
3217 .vco_mask = BM(21, 20),
3218 .pre_div_val = 0x0,
3219 .pre_div_mask = BM(14, 12),
3220 .post_div_val = 0x0,
3221 .post_div_mask = BM(9, 8),
3222 .mn_ena_val = BIT(24),
3223 .mn_ena_mask = BIT(24),
3224 .main_output_val = BIT(0),
3225 .main_output_mask = BIT(0),
3226};
3227
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07003228static void __init reg_init(void)
3229{
Vikram Mulukutla81577ab2013-03-25 10:55:36 -07003230 u32 regval;
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07003231
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07003232 configure_sr_hpm_lp_pll(&mmpll0_config, &mmpll0_regs, 1);
3233 configure_sr_hpm_lp_pll(&mmpll1_config, &mmpll1_regs, 1);
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07003234
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07003235 /* Vote for GPLL0 to turn on. Needed by acpuclock. */
3236 regval = readl_relaxed(GCC_REG_BASE(APCS_GPLL_ENA_VOTE));
3237 regval |= BIT(0);
3238 writel_relaxed(regval, GCC_REG_BASE(APCS_GPLL_ENA_VOTE));
3239
3240 /*
3241 * TODO: Confirm that no clocks need to be voted on in this sleep vote
3242 * register.
3243 */
3244 writel_relaxed(0x0, GCC_REG_BASE(APCS_CLOCK_SLEEP_ENA_VOTE));
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07003245}
3246
Syed Rameez Mustafa3971c142013-01-09 19:04:53 -08003247static void __init msm8610_clock_post_init(void)
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07003248{
3249 /*
3250 * Hold an active set vote for CXO; this is because CXO is expected
3251 * to remain on whenever CPUs aren't power collapsed.
3252 */
3253 clk_prepare_enable(&gcc_xo_a_clk_src.c);
Chandra Ramachandranc7c6e382013-07-31 16:34:10 -07003254 /*
3255 * Hold an active set vote for the PNOC AHB source. Sleep set vote is 0.
3256 */
3257 clk_set_rate(&pnoc_keepalive_a_clk.c, 19200000);
3258 clk_prepare_enable(&pnoc_keepalive_a_clk.c);
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07003259 /* Set rates for single-rate clocks. */
3260 clk_set_rate(&usb_hs_system_clk_src.c,
3261 usb_hs_system_clk_src.freq_tbl[0].freq_hz);
3262 clk_set_rate(&pdm2_clk_src.c, pdm2_clk_src.freq_tbl[0].freq_hz);
3263 clk_set_rate(&mclk0_clk_src.c, mclk0_clk_src.freq_tbl[0].freq_hz);
3264 clk_set_rate(&mclk1_clk_src.c, mclk1_clk_src.freq_tbl[0].freq_hz);
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07003265}
3266
Vikram Mulukutlae03b4b62013-03-20 17:45:37 -07003267static void dsi_init(void)
3268{
3269 dsi_byte_clk_src_ops = clk_ops_rcg;
3270 dsi_byte_clk_src_ops.set_rate = set_rate_pixel_byte_clk;
3271 dsi_byte_clk_src_ops.handoff = byte_rcg_handoff;
3272 dsi_byte_clk_src_ops.get_parent = NULL;
3273
3274 dsi_dsi_clk_src_ops = clk_ops_rcg_mnd;
3275 dsi_dsi_clk_src_ops.set_rate = set_rate_dsi_clk;
3276 dsi_dsi_clk_src_ops.handoff = pixel_rcg_handoff;
3277 dsi_dsi_clk_src_ops.get_parent = NULL;
3278
3279 dsi_pixel_clk_src_ops = clk_ops_rcg_mnd;
3280 dsi_pixel_clk_src_ops.set_rate = set_rate_pixel_byte_clk;
3281 dsi_pixel_clk_src_ops.handoff = pixel_rcg_handoff;
3282 dsi_pixel_clk_src_ops.get_parent = NULL;
3283
3284 dsi_clk_ctrl_init(&dsi_ahb_clk.c);
3285}
3286
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07003287#define GCC_CC_PHYS 0xFC400000
3288#define GCC_CC_SIZE SZ_16K
3289
3290#define MMSS_CC_PHYS 0xFD8C0000
3291#define MMSS_CC_SIZE SZ_256K
3292
3293#define LPASS_CC_PHYS 0xFE000000
3294#define LPASS_CC_SIZE SZ_256K
3295
3296#define APCS_GCC_CC_PHYS 0xF9011000
3297#define APCS_GCC_CC_SIZE SZ_4K
3298
Vikram Mulukutla4157cca2013-01-24 15:42:41 -08003299#define APCS_KPSS_SH_PLL_PHYS 0xF9016000
3300#define APCS_KPSS_SH_PLL_SIZE SZ_64
3301
Syed Rameez Mustafa3971c142013-01-09 19:04:53 -08003302static void __init msm8610_clock_pre_init(void)
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07003303{
3304 virt_bases[GCC_BASE] = ioremap(GCC_CC_PHYS, GCC_CC_SIZE);
3305 if (!virt_bases[GCC_BASE])
Syed Rameez Mustafa3971c142013-01-09 19:04:53 -08003306 panic("clock-8610: Unable to ioremap GCC memory!");
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07003307
3308 virt_bases[MMSS_BASE] = ioremap(MMSS_CC_PHYS, MMSS_CC_SIZE);
3309 if (!virt_bases[MMSS_BASE])
Syed Rameez Mustafa3971c142013-01-09 19:04:53 -08003310 panic("clock-8610: Unable to ioremap MMSS_CC memory!");
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07003311
3312 virt_bases[LPASS_BASE] = ioremap(LPASS_CC_PHYS, LPASS_CC_SIZE);
3313 if (!virt_bases[LPASS_BASE])
Syed Rameez Mustafa3971c142013-01-09 19:04:53 -08003314 panic("clock-8610: Unable to ioremap LPASS_CC memory!");
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07003315
3316 virt_bases[APCS_BASE] = ioremap(APCS_GCC_CC_PHYS, APCS_GCC_CC_SIZE);
3317 if (!virt_bases[APCS_BASE])
Syed Rameez Mustafa3971c142013-01-09 19:04:53 -08003318 panic("clock-8610: Unable to ioremap APCS_GCC_CC memory!");
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07003319
Vikram Mulukutla4157cca2013-01-24 15:42:41 -08003320 virt_bases[APCS_PLL_BASE] = ioremap(APCS_KPSS_SH_PLL_PHYS,
3321 APCS_KPSS_SH_PLL_SIZE);
3322 if (!virt_bases[APCS_PLL_BASE])
3323 panic("clock-8610: Unable to ioremap APCS_GCC_CC memory!");
3324
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07003325 clk_ops_local_pll.enable = sr_hpm_lp_pll_clk_enable;
3326
Patrick Dalyebc26bc2013-02-05 11:49:07 -08003327 vdd_dig.regulator[0] = regulator_get(NULL, "vdd_dig");
3328 if (IS_ERR(vdd_dig.regulator[0]))
Syed Rameez Mustafa3971c142013-01-09 19:04:53 -08003329 panic("clock-8610: Unable to get the vdd_dig regulator!");
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07003330
Patrick Dalyebc26bc2013-02-05 11:49:07 -08003331 vdd_sr2_pll.regulator[0] = regulator_get(NULL, "vdd_sr2_pll");
3332 if (IS_ERR(vdd_sr2_pll.regulator[0]))
Vikram Mulukutla4157cca2013-01-24 15:42:41 -08003333 panic("clock-8610: Unable to get the vdd_sr2_pll regulator!");
3334
Patrick Daly6fb589a2013-03-29 17:55:55 -07003335 vdd_sr2_pll.regulator[1] = regulator_get(NULL, "vdd_sr2_dig");
3336 if (IS_ERR(vdd_sr2_pll.regulator[1]))
3337 panic("clock-8610: Unable to get the vdd_sr2_dig regulator!");
3338
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07003339 enable_rpm_scaling();
3340
3341 /* Enable a clock to allow access to MMSS clock registers */
3342 clk_prepare_enable(&gcc_mmss_noc_cfg_ahb_clk.c),
3343
3344 reg_init();
3345
Vikram Mulukutlae03b4b62013-03-20 17:45:37 -07003346 dsi_init();
3347
Vikram Mulukutla82cb8442013-01-28 13:36:51 -08003348 /* Maintain the max nominal frequency on the MMSSNOC AHB bus. */
3349 clk_set_rate(&mmssnoc_ahb_a_clk.c, 40000000);
3350 clk_prepare_enable(&mmssnoc_ahb_a_clk.c);
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07003351}
3352
Syed Rameez Mustafa3971c142013-01-09 19:04:53 -08003353struct clock_init_data msm8610_clock_init_data __initdata = {
3354 .table = msm_clocks_8610,
3355 .size = ARRAY_SIZE(msm_clocks_8610),
3356 .pre_init = msm8610_clock_pre_init,
3357 .post_init = msm8610_clock_post_init,
Vikram Mulukutlab13abe42012-10-03 11:38:48 -07003358};