blob: 9c9aad72dcb6f3d768fa791e4f90ed4952f15150 [file] [log] [blame]
Olav Haugana2eee312012-12-04 12:52:02 -08001/* Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -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>
Vikram Mulukutla14ee37d2012-08-08 15:18:09 -070021#include <linux/iopoll.h>
Patrick Dalyfc479532013-02-05 11:57:18 -080022#include <linux/regulator/consumer.h>
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -070023
Vikram Mulukutlab7a1a742012-05-30 17:24:33 -070024#include <mach/rpm-regulator-smd.h>
Vikram Mulukutla19245e02012-07-23 15:58:04 -070025#include <mach/socinfo.h>
Vikram Mulukutla77140da2012-08-13 21:37:18 -070026#include <mach/rpm-smd.h>
Vikram Mulukutla4c93ce72013-05-02 20:16:49 -070027#include <mach/clock-generic.h>
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -070028
29#include "clock-local2.h"
30#include "clock-pll.h"
Vikram Mulukutlad08a1522012-05-24 15:24:01 -070031#include "clock-rpm.h"
32#include "clock-voter.h"
Vikram Mulukutlafe0f5a52012-08-16 16:51:08 -070033#include "clock-mdss-8974.h"
Matt Wagantall33d01f52012-02-23 23:27:44 -080034#include "clock.h"
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -070035
36enum {
37 GCC_BASE,
38 MMSS_BASE,
39 LPASS_BASE,
Matt Wagantalledf2fad2012-08-06 16:11:46 -070040 APCS_BASE,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -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))
Matt Wagantalledf2fad2012-08-06 16:11:46 -070049#define APCS_REG_BASE(x) (void __iomem *)(virt_bases[APCS_BASE] + (x))
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -070050
51#define GPLL0_MODE_REG 0x0000
52#define GPLL0_L_REG 0x0004
53#define GPLL0_M_REG 0x0008
54#define GPLL0_N_REG 0x000C
55#define GPLL0_USER_CTL_REG 0x0010
56#define GPLL0_CONFIG_CTL_REG 0x0014
57#define GPLL0_TEST_CTL_REG 0x0018
58#define GPLL0_STATUS_REG 0x001C
59
60#define GPLL1_MODE_REG 0x0040
61#define GPLL1_L_REG 0x0044
62#define GPLL1_M_REG 0x0048
63#define GPLL1_N_REG 0x004C
64#define GPLL1_USER_CTL_REG 0x0050
65#define GPLL1_CONFIG_CTL_REG 0x0054
66#define GPLL1_TEST_CTL_REG 0x0058
67#define GPLL1_STATUS_REG 0x005C
68
Junjie Wu5e905ea2013-06-07 15:47:20 -070069#define GPLL4_MODE_REG 0x1DC0
70#define GPLL4_L_REG 0x1DC4
71#define GPLL4_M_REG 0x1DC8
72#define GPLL4_N_REG 0x1DCC
73#define GPLL4_USER_CTL_REG 0x1DD0
74#define GPLL4_CONFIG_CTL_REG 0x1DD4
75#define GPLL4_TEST_CTL_REG 0x1DD8
76#define GPLL4_STATUS_REG 0x1DDC
77
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -070078#define MMPLL0_MODE_REG 0x0000
79#define MMPLL0_L_REG 0x0004
80#define MMPLL0_M_REG 0x0008
81#define MMPLL0_N_REG 0x000C
82#define MMPLL0_USER_CTL_REG 0x0010
83#define MMPLL0_CONFIG_CTL_REG 0x0014
84#define MMPLL0_TEST_CTL_REG 0x0018
85#define MMPLL0_STATUS_REG 0x001C
86
87#define MMPLL1_MODE_REG 0x0040
88#define MMPLL1_L_REG 0x0044
89#define MMPLL1_M_REG 0x0048
90#define MMPLL1_N_REG 0x004C
91#define MMPLL1_USER_CTL_REG 0x0050
92#define MMPLL1_CONFIG_CTL_REG 0x0054
93#define MMPLL1_TEST_CTL_REG 0x0058
94#define MMPLL1_STATUS_REG 0x005C
95
96#define MMPLL3_MODE_REG 0x0080
97#define MMPLL3_L_REG 0x0084
98#define MMPLL3_M_REG 0x0088
99#define MMPLL3_N_REG 0x008C
100#define MMPLL3_USER_CTL_REG 0x0090
101#define MMPLL3_CONFIG_CTL_REG 0x0094
102#define MMPLL3_TEST_CTL_REG 0x0098
103#define MMPLL3_STATUS_REG 0x009C
104
105#define LPAPLL_MODE_REG 0x0000
106#define LPAPLL_L_REG 0x0004
107#define LPAPLL_M_REG 0x0008
108#define LPAPLL_N_REG 0x000C
109#define LPAPLL_USER_CTL_REG 0x0010
110#define LPAPLL_CONFIG_CTL_REG 0x0014
111#define LPAPLL_TEST_CTL_REG 0x0018
112#define LPAPLL_STATUS_REG 0x001C
113
114#define GCC_DEBUG_CLK_CTL_REG 0x1880
115#define CLOCK_FRQ_MEASURE_CTL_REG 0x1884
116#define CLOCK_FRQ_MEASURE_STATUS_REG 0x1888
117#define GCC_XO_DIV4_CBCR_REG 0x10C8
Matt Wagantall9a9b6f02012-08-07 23:12:26 -0700118#define GCC_PLLTEST_PAD_CFG_REG 0x188C
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700119#define APCS_GPLL_ENA_VOTE_REG 0x1480
120#define MMSS_PLL_VOTE_APCS_REG 0x0100
121#define MMSS_DEBUG_CLK_CTL_REG 0x0900
122#define LPASS_DEBUG_CLK_CTL_REG 0x29000
123#define LPASS_LPA_PLL_VOTE_APPS_REG 0x2000
124
Matt Wagantalledf2fad2012-08-06 16:11:46 -0700125#define GLB_CLK_DIAG_REG 0x001C
Matt Wagantall0976c4c2013-02-07 17:12:43 -0800126#define L2_CBCR_REG 0x004C
Matt Wagantalledf2fad2012-08-06 16:11:46 -0700127
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700128#define USB30_MASTER_CMD_RCGR 0x03D4
129#define USB30_MOCK_UTMI_CMD_RCGR 0x03E8
130#define USB_HSIC_SYSTEM_CMD_RCGR 0x041C
131#define USB_HSIC_CMD_RCGR 0x0440
132#define USB_HSIC_IO_CAL_CMD_RCGR 0x0458
133#define USB_HS_SYSTEM_CMD_RCGR 0x0490
Vikram Mulukutla3b98a6d2012-08-15 20:35:25 -0700134#define SYS_NOC_USB3_AXI_CBCR 0x0108
135#define USB30_SLEEP_CBCR 0x03CC
136#define USB2A_PHY_SLEEP_CBCR 0x04AC
137#define USB2B_PHY_SLEEP_CBCR 0x04B4
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700138#define SDCC1_APPS_CMD_RCGR 0x04D0
139#define SDCC2_APPS_CMD_RCGR 0x0510
140#define SDCC3_APPS_CMD_RCGR 0x0550
141#define SDCC4_APPS_CMD_RCGR 0x0590
142#define BLSP1_QUP1_SPI_APPS_CMD_RCGR 0x064C
Vikram Mulukutlaa57e6e42013-01-23 16:58:08 -0800143#define BLSP1_QUP1_I2C_APPS_CMD_RCGR 0x0660
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700144#define BLSP1_UART1_APPS_CMD_RCGR 0x068C
145#define BLSP1_QUP2_SPI_APPS_CMD_RCGR 0x06CC
Vikram Mulukutlaa57e6e42013-01-23 16:58:08 -0800146#define BLSP1_QUP2_I2C_APPS_CMD_RCGR 0x06E0
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700147#define BLSP1_UART2_APPS_CMD_RCGR 0x070C
148#define BLSP1_QUP3_SPI_APPS_CMD_RCGR 0x074C
Vikram Mulukutlaa57e6e42013-01-23 16:58:08 -0800149#define BLSP1_QUP3_I2C_APPS_CMD_RCGR 0x0760
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700150#define BLSP1_UART3_APPS_CMD_RCGR 0x078C
151#define BLSP1_QUP4_SPI_APPS_CMD_RCGR 0x07CC
Vikram Mulukutlaa57e6e42013-01-23 16:58:08 -0800152#define BLSP1_QUP4_I2C_APPS_CMD_RCGR 0x07E0
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700153#define BLSP1_UART4_APPS_CMD_RCGR 0x080C
154#define BLSP1_QUP5_SPI_APPS_CMD_RCGR 0x084C
Vikram Mulukutlaa57e6e42013-01-23 16:58:08 -0800155#define BLSP1_QUP5_I2C_APPS_CMD_RCGR 0x0860
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700156#define BLSP1_UART5_APPS_CMD_RCGR 0x088C
157#define BLSP1_QUP6_SPI_APPS_CMD_RCGR 0x08CC
Vikram Mulukutlaa57e6e42013-01-23 16:58:08 -0800158#define BLSP1_QUP6_I2C_APPS_CMD_RCGR 0x08E0
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700159#define BLSP1_UART6_APPS_CMD_RCGR 0x090C
160#define BLSP2_QUP1_SPI_APPS_CMD_RCGR 0x098C
Vikram Mulukutlaa57e6e42013-01-23 16:58:08 -0800161#define BLSP2_QUP1_I2C_APPS_CMD_RCGR 0x09A0
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700162#define BLSP2_UART1_APPS_CMD_RCGR 0x09CC
163#define BLSP2_QUP2_SPI_APPS_CMD_RCGR 0x0A0C
Vikram Mulukutlaa57e6e42013-01-23 16:58:08 -0800164#define BLSP2_QUP2_I2C_APPS_CMD_RCGR 0x0A20
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700165#define BLSP2_UART2_APPS_CMD_RCGR 0x0A4C
166#define BLSP2_QUP3_SPI_APPS_CMD_RCGR 0x0A8C
Vikram Mulukutlaa57e6e42013-01-23 16:58:08 -0800167#define BLSP2_QUP3_I2C_APPS_CMD_RCGR 0x0AA0
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700168#define BLSP2_UART3_APPS_CMD_RCGR 0x0ACC
169#define BLSP2_QUP4_SPI_APPS_CMD_RCGR 0x0B0C
Vikram Mulukutlaa57e6e42013-01-23 16:58:08 -0800170#define BLSP2_QUP4_I2C_APPS_CMD_RCGR 0x0B20
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700171#define BLSP2_UART4_APPS_CMD_RCGR 0x0B4C
172#define BLSP2_QUP5_SPI_APPS_CMD_RCGR 0x0B8C
Vikram Mulukutlaa57e6e42013-01-23 16:58:08 -0800173#define BLSP2_QUP5_I2C_APPS_CMD_RCGR 0x0BA0
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700174#define BLSP2_UART5_APPS_CMD_RCGR 0x0BCC
175#define BLSP2_QUP6_SPI_APPS_CMD_RCGR 0x0C0C
Vikram Mulukutlaa57e6e42013-01-23 16:58:08 -0800176#define BLSP2_QUP6_I2C_APPS_CMD_RCGR 0x0C20
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700177#define BLSP2_UART6_APPS_CMD_RCGR 0x0C4C
178#define PDM2_CMD_RCGR 0x0CD0
179#define TSIF_REF_CMD_RCGR 0x0D90
180#define CE1_CMD_RCGR 0x1050
181#define CE2_CMD_RCGR 0x1090
182#define GP1_CMD_RCGR 0x1904
183#define GP2_CMD_RCGR 0x1944
184#define GP3_CMD_RCGR 0x1984
185#define LPAIF_SPKR_CMD_RCGR 0xA000
186#define LPAIF_PRI_CMD_RCGR 0xB000
187#define LPAIF_SEC_CMD_RCGR 0xC000
188#define LPAIF_TER_CMD_RCGR 0xD000
189#define LPAIF_QUAD_CMD_RCGR 0xE000
190#define LPAIF_PCM0_CMD_RCGR 0xF000
191#define LPAIF_PCM1_CMD_RCGR 0x10000
192#define RESAMPLER_CMD_RCGR 0x11000
193#define SLIMBUS_CMD_RCGR 0x12000
194#define LPAIF_PCMOE_CMD_RCGR 0x13000
195#define AHBFABRIC_CMD_RCGR 0x18000
196#define VCODEC0_CMD_RCGR 0x1000
197#define PCLK0_CMD_RCGR 0x2000
198#define PCLK1_CMD_RCGR 0x2020
199#define MDP_CMD_RCGR 0x2040
200#define EXTPCLK_CMD_RCGR 0x2060
201#define VSYNC_CMD_RCGR 0x2080
202#define EDPPIXEL_CMD_RCGR 0x20A0
203#define EDPLINK_CMD_RCGR 0x20C0
204#define EDPAUX_CMD_RCGR 0x20E0
205#define HDMI_CMD_RCGR 0x2100
206#define BYTE0_CMD_RCGR 0x2120
207#define BYTE1_CMD_RCGR 0x2140
208#define ESC0_CMD_RCGR 0x2160
209#define ESC1_CMD_RCGR 0x2180
210#define CSI0PHYTIMER_CMD_RCGR 0x3000
211#define CSI1PHYTIMER_CMD_RCGR 0x3030
212#define CSI2PHYTIMER_CMD_RCGR 0x3060
213#define CSI0_CMD_RCGR 0x3090
214#define CSI1_CMD_RCGR 0x3100
215#define CSI2_CMD_RCGR 0x3160
216#define CSI3_CMD_RCGR 0x31C0
217#define CCI_CMD_RCGR 0x3300
218#define MCLK0_CMD_RCGR 0x3360
219#define MCLK1_CMD_RCGR 0x3390
220#define MCLK2_CMD_RCGR 0x33C0
221#define MCLK3_CMD_RCGR 0x33F0
222#define MMSS_GP0_CMD_RCGR 0x3420
223#define MMSS_GP1_CMD_RCGR 0x3450
224#define JPEG0_CMD_RCGR 0x3500
225#define JPEG1_CMD_RCGR 0x3520
226#define JPEG2_CMD_RCGR 0x3540
227#define VFE0_CMD_RCGR 0x3600
228#define VFE1_CMD_RCGR 0x3620
229#define CPP_CMD_RCGR 0x3640
230#define GFX3D_CMD_RCGR 0x4000
231#define RBCPR_CMD_RCGR 0x4060
232#define AHB_CMD_RCGR 0x5000
233#define AXI_CMD_RCGR 0x5040
234#define OCMEMNOC_CMD_RCGR 0x5090
Vikram Mulukutla274b2d92012-07-13 15:53:04 -0700235#define OCMEMCX_OCMEMNOC_CBCR 0x4058
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700236
237#define MMSS_BCR 0x0240
238#define USB_30_BCR 0x03C0
239#define USB3_PHY_BCR 0x03FC
240#define USB_HS_HSIC_BCR 0x0400
241#define USB_HS_BCR 0x0480
242#define SDCC1_BCR 0x04C0
243#define SDCC2_BCR 0x0500
244#define SDCC3_BCR 0x0540
245#define SDCC4_BCR 0x0580
246#define BLSP1_BCR 0x05C0
247#define BLSP1_QUP1_BCR 0x0640
248#define BLSP1_UART1_BCR 0x0680
249#define BLSP1_QUP2_BCR 0x06C0
250#define BLSP1_UART2_BCR 0x0700
251#define BLSP1_QUP3_BCR 0x0740
252#define BLSP1_UART3_BCR 0x0780
253#define BLSP1_QUP4_BCR 0x07C0
254#define BLSP1_UART4_BCR 0x0800
255#define BLSP1_QUP5_BCR 0x0840
256#define BLSP1_UART5_BCR 0x0880
257#define BLSP1_QUP6_BCR 0x08C0
258#define BLSP1_UART6_BCR 0x0900
259#define BLSP2_BCR 0x0940
260#define BLSP2_QUP1_BCR 0x0980
261#define BLSP2_UART1_BCR 0x09C0
262#define BLSP2_QUP2_BCR 0x0A00
263#define BLSP2_UART2_BCR 0x0A40
264#define BLSP2_QUP3_BCR 0x0A80
265#define BLSP2_UART3_BCR 0x0AC0
266#define BLSP2_QUP4_BCR 0x0B00
267#define BLSP2_UART4_BCR 0x0B40
268#define BLSP2_QUP5_BCR 0x0B80
269#define BLSP2_UART5_BCR 0x0BC0
270#define BLSP2_QUP6_BCR 0x0C00
271#define BLSP2_UART6_BCR 0x0C40
Vikram Mulukutlaa967db42012-05-10 16:20:40 -0700272#define BOOT_ROM_BCR 0x0E00
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700273#define PDM_BCR 0x0CC0
274#define PRNG_BCR 0x0D00
275#define BAM_DMA_BCR 0x0D40
276#define TSIF_BCR 0x0D80
277#define CE1_BCR 0x1040
278#define CE2_BCR 0x1080
279#define AUDIO_CORE_BCR 0x4000
280#define VENUS0_BCR 0x1020
281#define MDSS_BCR 0x2300
282#define CAMSS_PHY0_BCR 0x3020
283#define CAMSS_PHY1_BCR 0x3050
284#define CAMSS_PHY2_BCR 0x3080
285#define CAMSS_CSI0_BCR 0x30B0
286#define CAMSS_CSI0PHY_BCR 0x30C0
287#define CAMSS_CSI0RDI_BCR 0x30D0
288#define CAMSS_CSI0PIX_BCR 0x30E0
289#define CAMSS_CSI1_BCR 0x3120
290#define CAMSS_CSI1PHY_BCR 0x3130
291#define CAMSS_CSI1RDI_BCR 0x3140
292#define CAMSS_CSI1PIX_BCR 0x3150
293#define CAMSS_CSI2_BCR 0x3180
294#define CAMSS_CSI2PHY_BCR 0x3190
295#define CAMSS_CSI2RDI_BCR 0x31A0
296#define CAMSS_CSI2PIX_BCR 0x31B0
297#define CAMSS_CSI3_BCR 0x31E0
298#define CAMSS_CSI3PHY_BCR 0x31F0
299#define CAMSS_CSI3RDI_BCR 0x3200
300#define CAMSS_CSI3PIX_BCR 0x3210
301#define CAMSS_ISPIF_BCR 0x3220
302#define CAMSS_CCI_BCR 0x3340
303#define CAMSS_MCLK0_BCR 0x3380
304#define CAMSS_MCLK1_BCR 0x33B0
305#define CAMSS_MCLK2_BCR 0x33E0
306#define CAMSS_MCLK3_BCR 0x3410
307#define CAMSS_GP0_BCR 0x3440
308#define CAMSS_GP1_BCR 0x3470
309#define CAMSS_TOP_BCR 0x3480
310#define CAMSS_MICRO_BCR 0x3490
311#define CAMSS_JPEG_BCR 0x35A0
312#define CAMSS_VFE_BCR 0x36A0
313#define CAMSS_CSI_VFE0_BCR 0x3700
314#define CAMSS_CSI_VFE1_BCR 0x3710
315#define OCMEMNOC_BCR 0x50B0
316#define MMSSNOCAHB_BCR 0x5020
317#define MMSSNOCAXI_BCR 0x5060
318#define OXILI_GFX3D_CBCR 0x4028
319#define OXILICX_AHB_CBCR 0x403C
320#define OXILICX_AXI_CBCR 0x4038
321#define OXILI_BCR 0x4020
322#define OXILICX_BCR 0x4030
Vikram Mulukutlaa967db42012-05-10 16:20:40 -0700323#define LPASS_Q6SS_BCR 0x6000
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700324
325#define OCMEM_SYS_NOC_AXI_CBCR 0x0244
326#define OCMEM_NOC_CFG_AHB_CBCR 0x0248
327#define MMSS_NOC_CFG_AHB_CBCR 0x024C
328
329#define USB30_MASTER_CBCR 0x03C8
330#define USB30_MOCK_UTMI_CBCR 0x03D0
331#define USB_HSIC_AHB_CBCR 0x0408
332#define USB_HSIC_SYSTEM_CBCR 0x040C
333#define USB_HSIC_CBCR 0x0410
334#define USB_HSIC_IO_CAL_CBCR 0x0414
335#define USB_HS_SYSTEM_CBCR 0x0484
336#define USB_HS_AHB_CBCR 0x0488
337#define SDCC1_APPS_CBCR 0x04C4
338#define SDCC1_AHB_CBCR 0x04C8
339#define SDCC2_APPS_CBCR 0x0504
340#define SDCC2_AHB_CBCR 0x0508
341#define SDCC3_APPS_CBCR 0x0544
342#define SDCC3_AHB_CBCR 0x0548
343#define SDCC4_APPS_CBCR 0x0584
344#define SDCC4_AHB_CBCR 0x0588
345#define BLSP1_AHB_CBCR 0x05C4
346#define BLSP1_QUP1_SPI_APPS_CBCR 0x0644
347#define BLSP1_QUP1_I2C_APPS_CBCR 0x0648
348#define BLSP1_UART1_APPS_CBCR 0x0684
349#define BLSP1_UART1_SIM_CBCR 0x0688
350#define BLSP1_QUP2_SPI_APPS_CBCR 0x06C4
351#define BLSP1_QUP2_I2C_APPS_CBCR 0x06C8
352#define BLSP1_UART2_APPS_CBCR 0x0704
353#define BLSP1_UART2_SIM_CBCR 0x0708
354#define BLSP1_QUP3_SPI_APPS_CBCR 0x0744
355#define BLSP1_QUP3_I2C_APPS_CBCR 0x0748
356#define BLSP1_UART3_APPS_CBCR 0x0784
357#define BLSP1_UART3_SIM_CBCR 0x0788
358#define BLSP1_QUP4_SPI_APPS_CBCR 0x07C4
359#define BLSP1_QUP4_I2C_APPS_CBCR 0x07C8
360#define BLSP1_UART4_APPS_CBCR 0x0804
361#define BLSP1_UART4_SIM_CBCR 0x0808
362#define BLSP1_QUP5_SPI_APPS_CBCR 0x0844
363#define BLSP1_QUP5_I2C_APPS_CBCR 0x0848
364#define BLSP1_UART5_APPS_CBCR 0x0884
365#define BLSP1_UART5_SIM_CBCR 0x0888
366#define BLSP1_QUP6_SPI_APPS_CBCR 0x08C4
367#define BLSP1_QUP6_I2C_APPS_CBCR 0x08C8
368#define BLSP1_UART6_APPS_CBCR 0x0904
369#define BLSP1_UART6_SIM_CBCR 0x0908
370#define BLSP2_AHB_CBCR 0x0944
Vikram Mulukutlaa967db42012-05-10 16:20:40 -0700371#define BOOT_ROM_AHB_CBCR 0x0E04
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700372#define BLSP2_QUP1_SPI_APPS_CBCR 0x0984
373#define BLSP2_QUP1_I2C_APPS_CBCR 0x0988
374#define BLSP2_UART1_APPS_CBCR 0x09C4
375#define BLSP2_UART1_SIM_CBCR 0x09C8
376#define BLSP2_QUP2_SPI_APPS_CBCR 0x0A04
377#define BLSP2_QUP2_I2C_APPS_CBCR 0x0A08
378#define BLSP2_UART2_APPS_CBCR 0x0A44
379#define BLSP2_UART2_SIM_CBCR 0x0A48
380#define BLSP2_QUP3_SPI_APPS_CBCR 0x0A84
381#define BLSP2_QUP3_I2C_APPS_CBCR 0x0A88
382#define BLSP2_UART3_APPS_CBCR 0x0AC4
383#define BLSP2_UART3_SIM_CBCR 0x0AC8
384#define BLSP2_QUP4_SPI_APPS_CBCR 0x0B04
385#define BLSP2_QUP4_I2C_APPS_CBCR 0x0B08
386#define BLSP2_UART4_APPS_CBCR 0x0B44
387#define BLSP2_UART4_SIM_CBCR 0x0B48
388#define BLSP2_QUP5_SPI_APPS_CBCR 0x0B84
389#define BLSP2_QUP5_I2C_APPS_CBCR 0x0B88
390#define BLSP2_UART5_APPS_CBCR 0x0BC4
391#define BLSP2_UART5_SIM_CBCR 0x0BC8
392#define BLSP2_QUP6_SPI_APPS_CBCR 0x0C04
393#define BLSP2_QUP6_I2C_APPS_CBCR 0x0C08
394#define BLSP2_UART6_APPS_CBCR 0x0C44
395#define BLSP2_UART6_SIM_CBCR 0x0C48
396#define PDM_AHB_CBCR 0x0CC4
397#define PDM_XO4_CBCR 0x0CC8
398#define PDM2_CBCR 0x0CCC
399#define PRNG_AHB_CBCR 0x0D04
400#define BAM_DMA_AHB_CBCR 0x0D44
401#define TSIF_AHB_CBCR 0x0D84
402#define TSIF_REF_CBCR 0x0D88
403#define MSG_RAM_AHB_CBCR 0x0E44
404#define CE1_CBCR 0x1044
405#define CE1_AXI_CBCR 0x1048
406#define CE1_AHB_CBCR 0x104C
407#define CE2_CBCR 0x1084
408#define CE2_AXI_CBCR 0x1088
409#define CE2_AHB_CBCR 0x108C
410#define GCC_AHB_CBCR 0x10C0
411#define GP1_CBCR 0x1900
412#define GP2_CBCR 0x1940
413#define GP3_CBCR 0x1980
Vikram Mulukutla14ee37d2012-08-08 15:18:09 -0700414#define AUDIO_CORE_GDSCR 0x7000
Vikram Mulukutla6c0f1a72012-08-10 01:59:28 -0700415#define AUDIO_CORE_IXFABRIC_CBCR 0x1B000
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700416#define AUDIO_CORE_LPAIF_CODEC_SPKR_OSR_CBCR 0xA014
417#define AUDIO_CORE_LPAIF_CODEC_SPKR_IBIT_CBCR 0xA018
418#define AUDIO_CORE_LPAIF_CODEC_SPKR_EBIT_CBCR 0xA01C
419#define AUDIO_CORE_LPAIF_PRI_OSR_CBCR 0xB014
420#define AUDIO_CORE_LPAIF_PRI_IBIT_CBCR 0xB018
421#define AUDIO_CORE_LPAIF_PRI_EBIT_CBCR 0xB01C
422#define AUDIO_CORE_LPAIF_SEC_OSR_CBCR 0xC014
423#define AUDIO_CORE_LPAIF_SEC_IBIT_CBCR 0xC018
424#define AUDIO_CORE_LPAIF_SEC_EBIT_CBCR 0xC01C
425#define AUDIO_CORE_LPAIF_TER_OSR_CBCR 0xD014
426#define AUDIO_CORE_LPAIF_TER_IBIT_CBCR 0xD018
427#define AUDIO_CORE_LPAIF_TER_EBIT_CBCR 0xD01C
428#define AUDIO_CORE_LPAIF_QUAD_OSR_CBCR 0xE014
429#define AUDIO_CORE_LPAIF_QUAD_IBIT_CBCR 0xE018
430#define AUDIO_CORE_LPAIF_QUAD_EBIT_CBCR 0xE01C
431#define AUDIO_CORE_LPAIF_PCM0_IBIT_CBCR 0xF014
432#define AUDIO_CORE_LPAIF_PCM0_EBIT_CBCR 0xF018
433#define AUDIO_CORE_LPAIF_PCM1_IBIT_CBCR 0x10014
434#define AUDIO_CORE_LPAIF_PCM1_EBIT_CBCR 0x10018
435#define AUDIO_CORE_RESAMPLER_CORE_CBCR 0x11014
436#define AUDIO_CORE_RESAMPLER_LFABIF_CBCR 0x11018
437#define AUDIO_CORE_SLIMBUS_CORE_CBCR 0x12014
438#define AUDIO_CORE_SLIMBUS_LFABIF_CBCR 0x12018
439#define AUDIO_CORE_LPAIF_PCM_DATA_OE_CBCR 0x13014
440#define VENUS0_VCODEC0_CBCR 0x1028
441#define VENUS0_AHB_CBCR 0x1030
442#define VENUS0_AXI_CBCR 0x1034
443#define VENUS0_OCMEMNOC_CBCR 0x1038
444#define MDSS_AHB_CBCR 0x2308
445#define MDSS_HDMI_AHB_CBCR 0x230C
446#define MDSS_AXI_CBCR 0x2310
447#define MDSS_PCLK0_CBCR 0x2314
448#define MDSS_PCLK1_CBCR 0x2318
449#define MDSS_MDP_CBCR 0x231C
450#define MDSS_MDP_LUT_CBCR 0x2320
451#define MDSS_EXTPCLK_CBCR 0x2324
452#define MDSS_VSYNC_CBCR 0x2328
453#define MDSS_EDPPIXEL_CBCR 0x232C
454#define MDSS_EDPLINK_CBCR 0x2330
455#define MDSS_EDPAUX_CBCR 0x2334
456#define MDSS_HDMI_CBCR 0x2338
457#define MDSS_BYTE0_CBCR 0x233C
458#define MDSS_BYTE1_CBCR 0x2340
459#define MDSS_ESC0_CBCR 0x2344
460#define MDSS_ESC1_CBCR 0x2348
461#define CAMSS_PHY0_CSI0PHYTIMER_CBCR 0x3024
462#define CAMSS_PHY1_CSI1PHYTIMER_CBCR 0x3054
463#define CAMSS_PHY2_CSI2PHYTIMER_CBCR 0x3084
464#define CAMSS_CSI0_CBCR 0x30B4
465#define CAMSS_CSI0_AHB_CBCR 0x30BC
466#define CAMSS_CSI0PHY_CBCR 0x30C4
467#define CAMSS_CSI0RDI_CBCR 0x30D4
468#define CAMSS_CSI0PIX_CBCR 0x30E4
469#define CAMSS_CSI1_CBCR 0x3124
470#define CAMSS_CSI1_AHB_CBCR 0x3128
471#define CAMSS_CSI1PHY_CBCR 0x3134
472#define CAMSS_CSI1RDI_CBCR 0x3144
473#define CAMSS_CSI1PIX_CBCR 0x3154
474#define CAMSS_CSI2_CBCR 0x3184
475#define CAMSS_CSI2_AHB_CBCR 0x3188
476#define CAMSS_CSI2PHY_CBCR 0x3194
477#define CAMSS_CSI2RDI_CBCR 0x31A4
478#define CAMSS_CSI2PIX_CBCR 0x31B4
479#define CAMSS_CSI3_CBCR 0x31E4
480#define CAMSS_CSI3_AHB_CBCR 0x31E8
481#define CAMSS_CSI3PHY_CBCR 0x31F4
482#define CAMSS_CSI3RDI_CBCR 0x3204
483#define CAMSS_CSI3PIX_CBCR 0x3214
484#define CAMSS_ISPIF_AHB_CBCR 0x3224
485#define CAMSS_CCI_CCI_CBCR 0x3344
486#define CAMSS_CCI_CCI_AHB_CBCR 0x3348
487#define CAMSS_MCLK0_CBCR 0x3384
488#define CAMSS_MCLK1_CBCR 0x33B4
489#define CAMSS_MCLK2_CBCR 0x33E4
490#define CAMSS_MCLK3_CBCR 0x3414
491#define CAMSS_GP0_CBCR 0x3444
492#define CAMSS_GP1_CBCR 0x3474
493#define CAMSS_TOP_AHB_CBCR 0x3484
494#define CAMSS_MICRO_AHB_CBCR 0x3494
495#define CAMSS_JPEG_JPEG0_CBCR 0x35A8
496#define CAMSS_JPEG_JPEG1_CBCR 0x35AC
497#define CAMSS_JPEG_JPEG2_CBCR 0x35B0
498#define CAMSS_JPEG_JPEG_AHB_CBCR 0x35B4
499#define CAMSS_JPEG_JPEG_AXI_CBCR 0x35B8
500#define CAMSS_JPEG_JPEG_OCMEMNOC_CBCR 0x35BC
501#define CAMSS_VFE_VFE0_CBCR 0x36A8
502#define CAMSS_VFE_VFE1_CBCR 0x36AC
503#define CAMSS_VFE_CPP_CBCR 0x36B0
504#define CAMSS_VFE_CPP_AHB_CBCR 0x36B4
505#define CAMSS_VFE_VFE_AHB_CBCR 0x36B8
506#define CAMSS_VFE_VFE_AXI_CBCR 0x36BC
507#define CAMSS_VFE_VFE_OCMEMNOC_CBCR 0x36C0
508#define CAMSS_CSI_VFE0_CBCR 0x3704
509#define CAMSS_CSI_VFE1_CBCR 0x3714
510#define MMSS_MMSSNOC_AXI_CBCR 0x506C
511#define MMSS_MMSSNOC_AHB_CBCR 0x5024
512#define MMSS_MMSSNOC_BTO_AHB_CBCR 0x5028
513#define MMSS_MISC_AHB_CBCR 0x502C
514#define MMSS_S0_AXI_CBCR 0x5064
515#define OCMEMNOC_CBCR 0x50B4
Vikram Mulukutlaa967db42012-05-10 16:20:40 -0700516#define LPASS_Q6SS_AHB_LFABIF_CBCR 0x22000
517#define LPASS_Q6SS_XO_CBCR 0x26000
Vikram Mulukutla3454e9e2012-08-11 20:18:42 -0700518#define LPASS_Q6_AXI_CBCR 0x11C0
Vikram Mulukutlab5b311e2012-08-09 14:58:48 -0700519#define Q6SS_AHBM_CBCR 0x22004
Vikram Mulukutla97ac3342012-08-21 12:55:13 -0700520#define AUDIO_WRAPPER_BR_CBCR 0x24000
Vikram Mulukutlaa967db42012-05-10 16:20:40 -0700521#define MSS_CFG_AHB_CBCR 0x0280
Vikram Mulukutla31926eb2012-08-12 19:58:08 -0700522#define MSS_Q6_BIMC_AXI_CBCR 0x0284
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700523
524#define APCS_CLOCK_BRANCH_ENA_VOTE 0x1484
525#define APCS_CLOCK_SLEEP_ENA_VOTE 0x1488
526
527/* Mux source select values */
528#define cxo_source_val 0
529#define gpll0_source_val 1
530#define gpll1_source_val 2
Junjie Wu5e905ea2013-06-07 15:47:20 -0700531#define gpll4_source_val 5
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700532#define gnd_source_val 5
533#define mmpll0_mm_source_val 1
534#define mmpll1_mm_source_val 2
535#define mmpll3_mm_source_val 3
536#define gpll0_mm_source_val 5
537#define cxo_mm_source_val 0
538#define mm_gnd_source_val 6
539#define gpll1_hsic_source_val 4
540#define cxo_lpass_source_val 0
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700541#define gpll0_lpass_source_val 5
542#define edppll_270_mm_source_val 4
543#define edppll_350_mm_source_val 4
544#define dsipll_750_mm_source_val 1
Vikram Mulukutlafe0f5a52012-08-16 16:51:08 -0700545#define dsipll0_byte_mm_source_val 1
546#define dsipll0_pixel_mm_source_val 1
Vikram Mulukutla86b76342012-08-15 16:22:09 -0700547#define hdmipll_mm_source_val 3
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700548
Vikram Mulukutlad3dca652012-11-19 11:04:13 -0800549#define F_GCC_GND \
550 { \
551 .freq_hz = 0, \
552 .m_val = 0, \
553 .n_val = 0, \
554 .div_src_val = BVAL(4, 0, 1) | BVAL(10, 8, gnd_source_val), \
555 }
556
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700557#define F(f, s, div, m, n) \
558 { \
559 .freq_hz = (f), \
560 .src_clk = &s##_clk_src.c, \
561 .m_val = (m), \
Vikram Mulukutla60bfbb02012-08-08 00:49:20 -0700562 .n_val = ~((n)-(m)) * !!(n), \
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700563 .d_val = ~(n),\
564 .div_src_val = BVAL(4, 0, (int)(2*(div) - 1)) \
565 | BVAL(10, 8, s##_source_val), \
566 }
567
568#define F_MM(f, s, div, m, n) \
569 { \
570 .freq_hz = (f), \
571 .src_clk = &s##_clk_src.c, \
572 .m_val = (m), \
Vikram Mulukutla60bfbb02012-08-08 00:49:20 -0700573 .n_val = ~((n)-(m)) * !!(n), \
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700574 .d_val = ~(n),\
575 .div_src_val = BVAL(4, 0, (int)(2*(div) - 1)) \
576 | BVAL(10, 8, s##_mm_source_val), \
577 }
578
Vikram Mulukutla86b76342012-08-15 16:22:09 -0700579#define F_HDMI(f, s, div, m, n) \
580 { \
581 .freq_hz = (f), \
582 .src_clk = &s##_clk_src, \
583 .m_val = (m), \
584 .n_val = ~((n)-(m)) * !!(n), \
585 .d_val = ~(n),\
586 .div_src_val = BVAL(4, 0, (int)(2*(div) - 1)) \
587 | BVAL(10, 8, s##_mm_source_val), \
588 }
589
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700590#define F_MDSS(f, s, div, m, n) \
591 { \
592 .freq_hz = (f), \
593 .m_val = (m), \
Vikram Mulukutla60bfbb02012-08-08 00:49:20 -0700594 .n_val = ~((n)-(m)) * !!(n), \
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700595 .d_val = ~(n),\
596 .div_src_val = BVAL(4, 0, (int)(2*(div) - 1)) \
597 | BVAL(10, 8, s##_mm_source_val), \
598 }
599
600#define F_HSIC(f, s, div, m, n) \
601 { \
602 .freq_hz = (f), \
603 .src_clk = &s##_clk_src.c, \
604 .m_val = (m), \
Vikram Mulukutla60bfbb02012-08-08 00:49:20 -0700605 .n_val = ~((n)-(m)) * !!(n), \
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700606 .d_val = ~(n),\
607 .div_src_val = BVAL(4, 0, (int)(2*(div) - 1)) \
608 | BVAL(10, 8, s##_hsic_source_val), \
609 }
610
611#define F_LPASS(f, s, div, m, n) \
612 { \
613 .freq_hz = (f), \
614 .src_clk = &s##_clk_src.c, \
615 .m_val = (m), \
Vikram Mulukutla60bfbb02012-08-08 00:49:20 -0700616 .n_val = ~((n)-(m)) * !!(n), \
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700617 .d_val = ~(n),\
618 .div_src_val = BVAL(4, 0, (int)(2*(div) - 1)) \
619 | BVAL(10, 8, s##_lpass_source_val), \
620 }
621
622#define VDD_DIG_FMAX_MAP1(l1, f1) \
Saravana Kannan55e959d2012-10-15 22:16:04 -0700623 .vdd_class = &vdd_dig, \
624 .fmax = (unsigned long[VDD_DIG_NUM]) { \
625 [VDD_DIG_##l1] = (f1), \
626 }, \
627 .num_fmax = VDD_DIG_NUM
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700628#define VDD_DIG_FMAX_MAP2(l1, f1, l2, f2) \
Saravana Kannan55e959d2012-10-15 22:16:04 -0700629 .vdd_class = &vdd_dig, \
630 .fmax = (unsigned long[VDD_DIG_NUM]) { \
631 [VDD_DIG_##l1] = (f1), \
632 [VDD_DIG_##l2] = (f2), \
633 }, \
634 .num_fmax = VDD_DIG_NUM
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700635#define VDD_DIG_FMAX_MAP3(l1, f1, l2, f2, l3, f3) \
Saravana Kannan55e959d2012-10-15 22:16:04 -0700636 .vdd_class = &vdd_dig, \
637 .fmax = (unsigned long[VDD_DIG_NUM]) { \
638 [VDD_DIG_##l1] = (f1), \
639 [VDD_DIG_##l2] = (f2), \
640 [VDD_DIG_##l3] = (f3), \
641 }, \
642 .num_fmax = VDD_DIG_NUM
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700643
644enum vdd_dig_levels {
645 VDD_DIG_NONE,
646 VDD_DIG_LOW,
647 VDD_DIG_NOMINAL,
Saravana Kannan55e959d2012-10-15 22:16:04 -0700648 VDD_DIG_HIGH,
649 VDD_DIG_NUM
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700650};
651
Junjie Wubb5a79e2013-05-15 13:12:39 -0700652static int vdd_corner[] = {
653 RPM_REGULATOR_CORNER_NONE, /* VDD_DIG_NONE */
654 RPM_REGULATOR_CORNER_SVS_SOC, /* VDD_DIG_LOW */
655 RPM_REGULATOR_CORNER_NORMAL, /* VDD_DIG_NOMINAL */
656 RPM_REGULATOR_CORNER_SUPER_TURBO, /* VDD_DIG_HIGH */
Vikram Mulukutlab7a1a742012-05-30 17:24:33 -0700657};
658
Patrick Daly653c0b52013-04-16 17:18:28 -0700659static DEFINE_VDD_REGULATORS(vdd_dig, VDD_DIG_NUM, 1, vdd_corner, NULL);
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700660
Vikram Mulukutla80b7ab52012-07-26 19:03:15 -0700661#define RPM_MISC_CLK_TYPE 0x306b6c63
662#define RPM_BUS_CLK_TYPE 0x316b6c63
663#define RPM_MEM_CLK_TYPE 0x326b6c63
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700664
Vikram Mulukutla77140da2012-08-13 21:37:18 -0700665#define RPM_SMD_KEY_ENABLE 0x62616E45
666
667#define CXO_ID 0x0
668#define QDSS_ID 0x1
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700669
Vikram Mulukutla6ddff4e2012-06-22 15:11:28 -0700670#define PNOC_ID 0x0
671#define SNOC_ID 0x1
672#define CNOC_ID 0x2
Vikram Mulukutlac77922f2012-08-13 21:44:45 -0700673#define MMSSNOC_AHB_ID 0x3
Matt Wagantallc4388bf2012-05-14 23:03:00 -0700674
Vikram Mulukutla6ddff4e2012-06-22 15:11:28 -0700675#define BIMC_ID 0x0
Vikram Mulukutla1e6127d2012-08-21 21:05:24 -0700676#define OXILI_ID 0x1
677#define OCMEM_ID 0x2
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700678
Vikram Mulukutla02ea7112012-08-29 12:06:11 -0700679#define D0_ID 1
680#define D1_ID 2
Vikram Mulukutlab5a70392013-01-07 11:53:43 -0800681#define A0_ID 4
682#define A1_ID 5
683#define A2_ID 6
Vikram Mulukutla02ea7112012-08-29 12:06:11 -0700684#define DIFF_CLK_ID 7
Vikram Mulukutla8cb2bb52012-11-14 11:23:49 -0800685#define DIV_CLK1_ID 11
686#define DIV_CLK2_ID 12
Vikram Mulukutla80b7ab52012-07-26 19:03:15 -0700687
Vikram Mulukutla6ddff4e2012-06-22 15:11:28 -0700688DEFINE_CLK_RPM_SMD(pnoc_clk, pnoc_a_clk, RPM_BUS_CLK_TYPE, PNOC_ID, NULL);
689DEFINE_CLK_RPM_SMD(snoc_clk, snoc_a_clk, RPM_BUS_CLK_TYPE, SNOC_ID, NULL);
690DEFINE_CLK_RPM_SMD(cnoc_clk, cnoc_a_clk, RPM_BUS_CLK_TYPE, CNOC_ID, NULL);
Vikram Mulukutla09e20812012-07-12 11:32:42 -0700691DEFINE_CLK_RPM_SMD(mmssnoc_ahb_clk, mmssnoc_ahb_a_clk, RPM_BUS_CLK_TYPE,
692 MMSSNOC_AHB_ID, NULL);
Vikram Mulukutla6ddff4e2012-06-22 15:11:28 -0700693
694DEFINE_CLK_RPM_SMD(bimc_clk, bimc_a_clk, RPM_MEM_CLK_TYPE, BIMC_ID, NULL);
695DEFINE_CLK_RPM_SMD(ocmemgx_clk, ocmemgx_a_clk, RPM_MEM_CLK_TYPE, OCMEM_ID,
696 NULL);
Vikram Mulukutla1e6127d2012-08-21 21:05:24 -0700697DEFINE_CLK_RPM_SMD(gfx3d_clk_src, gfx3d_a_clk_src, RPM_MEM_CLK_TYPE, OXILI_ID,
698 NULL);
Vikram Mulukutla6ddff4e2012-06-22 15:11:28 -0700699
700DEFINE_CLK_RPM_SMD_BRANCH(cxo_clk_src, cxo_a_clk_src,
701 RPM_MISC_CLK_TYPE, CXO_ID, 19200000);
Vikram Mulukutla0f63e002012-06-28 14:29:44 -0700702DEFINE_CLK_RPM_SMD_QDSS(qdss_clk, qdss_a_clk, RPM_MISC_CLK_TYPE, QDSS_ID);
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700703
Vikram Mulukutla80b7ab52012-07-26 19:03:15 -0700704DEFINE_CLK_RPM_SMD_XO_BUFFER(cxo_d0, cxo_d0_a, D0_ID);
705DEFINE_CLK_RPM_SMD_XO_BUFFER(cxo_d1, cxo_d1_a, D1_ID);
706DEFINE_CLK_RPM_SMD_XO_BUFFER(cxo_a0, cxo_a0_a, A0_ID);
707DEFINE_CLK_RPM_SMD_XO_BUFFER(cxo_a1, cxo_a1_a, A1_ID);
708DEFINE_CLK_RPM_SMD_XO_BUFFER(cxo_a2, cxo_a2_a, A2_ID);
Vikram Mulukutla8cb2bb52012-11-14 11:23:49 -0800709DEFINE_CLK_RPM_SMD_XO_BUFFER(div_clk1, div_a_clk1, DIV_CLK1_ID);
710DEFINE_CLK_RPM_SMD_XO_BUFFER(div_clk2, div_a_clk2, DIV_CLK2_ID);
Vikram Mulukutla02ea7112012-08-29 12:06:11 -0700711DEFINE_CLK_RPM_SMD_XO_BUFFER(diff_clk, diff_a_clk, DIFF_CLK_ID);
Vikram Mulukutla80b7ab52012-07-26 19:03:15 -0700712
713DEFINE_CLK_RPM_SMD_XO_BUFFER_PINCTRL(cxo_d0_pin, cxo_d0_a_pin, D0_ID);
714DEFINE_CLK_RPM_SMD_XO_BUFFER_PINCTRL(cxo_d1_pin, cxo_d1_a_pin, D1_ID);
715DEFINE_CLK_RPM_SMD_XO_BUFFER_PINCTRL(cxo_a0_pin, cxo_a0_a_pin, A0_ID);
716DEFINE_CLK_RPM_SMD_XO_BUFFER_PINCTRL(cxo_a1_pin, cxo_a1_a_pin, A1_ID);
717DEFINE_CLK_RPM_SMD_XO_BUFFER_PINCTRL(cxo_a2_pin, cxo_a2_a_pin, A2_ID);
718
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700719static struct pll_vote_clk gpll0_clk_src = {
720 .en_reg = (void __iomem *)APCS_GPLL_ENA_VOTE_REG,
Tianyi Gou41c1a502013-03-21 10:50:55 -0700721 .en_mask = BIT(0),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700722 .status_reg = (void __iomem *)GPLL0_STATUS_REG,
723 .status_mask = BIT(17),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700724 .base = &virt_bases[GCC_BASE],
725 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -0700726 .parent = &cxo_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700727 .rate = 600000000,
728 .dbg_name = "gpll0_clk_src",
729 .ops = &clk_ops_pll_vote,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700730 CLK_INIT(gpll0_clk_src.c),
731 },
732};
733
734static struct pll_vote_clk gpll1_clk_src = {
735 .en_reg = (void __iomem *)APCS_GPLL_ENA_VOTE_REG,
736 .en_mask = BIT(1),
737 .status_reg = (void __iomem *)GPLL1_STATUS_REG,
738 .status_mask = BIT(17),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700739 .base = &virt_bases[GCC_BASE],
740 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -0700741 .parent = &cxo_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700742 .rate = 480000000,
743 .dbg_name = "gpll1_clk_src",
744 .ops = &clk_ops_pll_vote,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700745 CLK_INIT(gpll1_clk_src.c),
746 },
747};
748
Junjie Wu5e905ea2013-06-07 15:47:20 -0700749static struct pll_vote_clk gpll4_clk_src = {
750 .en_reg = (void __iomem *)APCS_GPLL_ENA_VOTE_REG,
751 .en_mask = BIT(4),
752 .status_reg = (void __iomem *)GPLL4_STATUS_REG,
753 .status_mask = BIT(17),
754 .base = &virt_bases[GCC_BASE],
755 .c = {
756 .parent = &cxo_clk_src.c,
757 .rate = 800000000,
758 .dbg_name = "gpll4_clk_src",
759 .ops = &clk_ops_pll_vote,
760 CLK_INIT(gpll4_clk_src.c),
761 },
762};
763
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700764static struct pll_vote_clk mmpll0_clk_src = {
765 .en_reg = (void __iomem *)MMSS_PLL_VOTE_APCS_REG,
766 .en_mask = BIT(0),
767 .status_reg = (void __iomem *)MMPLL0_STATUS_REG,
768 .status_mask = BIT(17),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700769 .base = &virt_bases[MMSS_BASE],
770 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -0700771 .parent = &cxo_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700772 .dbg_name = "mmpll0_clk_src",
773 .rate = 800000000,
774 .ops = &clk_ops_pll_vote,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700775 CLK_INIT(mmpll0_clk_src.c),
776 },
777};
778
779static struct pll_vote_clk mmpll1_clk_src = {
780 .en_reg = (void __iomem *)MMSS_PLL_VOTE_APCS_REG,
781 .en_mask = BIT(1),
782 .status_reg = (void __iomem *)MMPLL1_STATUS_REG,
783 .status_mask = BIT(17),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700784 .base = &virt_bases[MMSS_BASE],
785 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -0700786 .parent = &cxo_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700787 .dbg_name = "mmpll1_clk_src",
Vikram Mulukutlad16a8f12012-07-20 13:33:45 -0700788 .rate = 846000000,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700789 .ops = &clk_ops_pll_vote,
Vikram Mulukutla293c4692013-01-03 15:09:47 -0800790 /* May be reassigned at runtime; alloc memory at compile time */
791 VDD_DIG_FMAX_MAP1(LOW, 846000000),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700792 CLK_INIT(mmpll1_clk_src.c),
793 },
794};
795
796static struct pll_clk mmpll3_clk_src = {
797 .mode_reg = (void __iomem *)MMPLL3_MODE_REG,
798 .status_reg = (void __iomem *)MMPLL3_STATUS_REG,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700799 .base = &virt_bases[MMSS_BASE],
800 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -0700801 .parent = &cxo_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700802 .dbg_name = "mmpll3_clk_src",
Vikram Mulukutla293c4692013-01-03 15:09:47 -0800803 .rate = 820000000,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700804 .ops = &clk_ops_local_pll,
805 CLK_INIT(mmpll3_clk_src.c),
806 },
807};
808
Vikram Mulukutlad08a1522012-05-24 15:24:01 -0700809static DEFINE_CLK_VOTER(pnoc_msmbus_clk, &pnoc_clk.c, LONG_MAX);
810static DEFINE_CLK_VOTER(snoc_msmbus_clk, &snoc_clk.c, LONG_MAX);
811static DEFINE_CLK_VOTER(cnoc_msmbus_clk, &cnoc_clk.c, LONG_MAX);
812static DEFINE_CLK_VOTER(pnoc_msmbus_a_clk, &pnoc_a_clk.c, LONG_MAX);
813static DEFINE_CLK_VOTER(snoc_msmbus_a_clk, &snoc_a_clk.c, LONG_MAX);
814static DEFINE_CLK_VOTER(cnoc_msmbus_a_clk, &cnoc_a_clk.c, LONG_MAX);
815
816static DEFINE_CLK_VOTER(bimc_msmbus_clk, &bimc_clk.c, LONG_MAX);
817static DEFINE_CLK_VOTER(bimc_msmbus_a_clk, &bimc_a_clk.c, LONG_MAX);
818static DEFINE_CLK_VOTER(bimc_acpu_a_clk, &bimc_a_clk.c, LONG_MAX);
Vikram Mulukutla1e6127d2012-08-21 21:05:24 -0700819static DEFINE_CLK_VOTER(oxili_gfx3d_clk_src, &gfx3d_clk_src.c, LONG_MAX);
Vikram Mulukutlad08a1522012-05-24 15:24:01 -0700820static DEFINE_CLK_VOTER(ocmemgx_msmbus_clk, &ocmemgx_clk.c, LONG_MAX);
821static DEFINE_CLK_VOTER(ocmemgx_msmbus_a_clk, &ocmemgx_a_clk.c, LONG_MAX);
Naveen Ramaraj65396b92012-08-15 17:05:07 -0700822static DEFINE_CLK_VOTER(ocmemgx_core_clk, &ocmemgx_clk.c, LONG_MAX);
Vikram Mulukutlad08a1522012-05-24 15:24:01 -0700823
Vikram Mulukutlab0ad9f32012-07-03 12:57:24 -0700824static DEFINE_CLK_VOTER(pnoc_sps_clk, &pnoc_clk.c, 0);
Vikram Mulukutlab0ad9f32012-07-03 12:57:24 -0700825
Vikram Mulukutla510f7492013-02-04 11:59:52 -0800826static DEFINE_CLK_BRANCH_VOTER(cxo_otg_clk, &cxo_clk_src.c);
827static DEFINE_CLK_BRANCH_VOTER(cxo_pil_lpass_clk, &cxo_clk_src.c);
828static DEFINE_CLK_BRANCH_VOTER(cxo_pil_mss_clk, &cxo_clk_src.c);
829static DEFINE_CLK_BRANCH_VOTER(cxo_wlan_clk, &cxo_clk_src.c);
830static DEFINE_CLK_BRANCH_VOTER(cxo_pil_pronto_clk, &cxo_clk_src.c);
Vijayavardhan Vennapusadec1fe62013-02-12 16:05:14 +0530831static DEFINE_CLK_BRANCH_VOTER(cxo_dwc3_clk, &cxo_clk_src.c);
Vijayavardhan Vennapusa3c959c02013-03-04 10:34:16 +0530832static DEFINE_CLK_BRANCH_VOTER(cxo_ehci_host_clk, &cxo_clk_src.c);
Vikram Mulukutlaae4ae302013-04-24 12:00:28 -0700833static DEFINE_CLK_BRANCH_VOTER(cxo_lpm_clk, &cxo_clk_src.c);
Vikram Mulukutla510f7492013-02-04 11:59:52 -0800834
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700835static struct clk_freq_tbl ftbl_gcc_usb30_master_clk[] = {
836 F(125000000, gpll0, 1, 5, 24),
837 F_END
838};
839
840static struct rcg_clk usb30_master_clk_src = {
841 .cmd_rcgr_reg = USB30_MASTER_CMD_RCGR,
842 .set_rate = set_rate_mnd,
843 .freq_tbl = ftbl_gcc_usb30_master_clk,
844 .current_freq = &rcg_dummy_freq,
845 .base = &virt_bases[GCC_BASE],
846 .c = {
847 .dbg_name = "usb30_master_clk_src",
848 .ops = &clk_ops_rcg_mnd,
849 VDD_DIG_FMAX_MAP1(NOMINAL, 125000000),
850 CLK_INIT(usb30_master_clk_src.c),
851 },
852};
853
854static struct clk_freq_tbl ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk[] = {
855 F( 960000, cxo, 10, 1, 2),
856 F( 4800000, cxo, 4, 0, 0),
857 F( 9600000, cxo, 2, 0, 0),
858 F(15000000, gpll0, 10, 1, 4),
859 F(19200000, cxo, 1, 0, 0),
860 F(25000000, gpll0, 12, 1, 2),
861 F(50000000, gpll0, 12, 0, 0),
862 F_END
863};
864
865static struct rcg_clk blsp1_qup1_spi_apps_clk_src = {
866 .cmd_rcgr_reg = BLSP1_QUP1_SPI_APPS_CMD_RCGR,
867 .set_rate = set_rate_mnd,
868 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
869 .current_freq = &rcg_dummy_freq,
870 .base = &virt_bases[GCC_BASE],
871 .c = {
872 .dbg_name = "blsp1_qup1_spi_apps_clk_src",
873 .ops = &clk_ops_rcg_mnd,
874 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
875 CLK_INIT(blsp1_qup1_spi_apps_clk_src.c),
876 },
877};
878
879static struct rcg_clk blsp1_qup2_spi_apps_clk_src = {
880 .cmd_rcgr_reg = BLSP1_QUP2_SPI_APPS_CMD_RCGR,
881 .set_rate = set_rate_mnd,
882 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
883 .current_freq = &rcg_dummy_freq,
884 .base = &virt_bases[GCC_BASE],
885 .c = {
886 .dbg_name = "blsp1_qup2_spi_apps_clk_src",
887 .ops = &clk_ops_rcg_mnd,
888 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
889 CLK_INIT(blsp1_qup2_spi_apps_clk_src.c),
890 },
891};
892
893static struct rcg_clk blsp1_qup3_spi_apps_clk_src = {
894 .cmd_rcgr_reg = BLSP1_QUP3_SPI_APPS_CMD_RCGR,
895 .set_rate = set_rate_mnd,
896 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
897 .current_freq = &rcg_dummy_freq,
898 .base = &virt_bases[GCC_BASE],
899 .c = {
900 .dbg_name = "blsp1_qup3_spi_apps_clk_src",
901 .ops = &clk_ops_rcg_mnd,
902 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
903 CLK_INIT(blsp1_qup3_spi_apps_clk_src.c),
904 },
905};
906
907static struct rcg_clk blsp1_qup4_spi_apps_clk_src = {
908 .cmd_rcgr_reg = BLSP1_QUP4_SPI_APPS_CMD_RCGR,
909 .set_rate = set_rate_mnd,
910 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
911 .current_freq = &rcg_dummy_freq,
912 .base = &virt_bases[GCC_BASE],
913 .c = {
914 .dbg_name = "blsp1_qup4_spi_apps_clk_src",
915 .ops = &clk_ops_rcg_mnd,
916 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
917 CLK_INIT(blsp1_qup4_spi_apps_clk_src.c),
918 },
919};
920
921static struct rcg_clk blsp1_qup5_spi_apps_clk_src = {
922 .cmd_rcgr_reg = BLSP1_QUP5_SPI_APPS_CMD_RCGR,
923 .set_rate = set_rate_mnd,
924 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
925 .current_freq = &rcg_dummy_freq,
926 .base = &virt_bases[GCC_BASE],
927 .c = {
928 .dbg_name = "blsp1_qup5_spi_apps_clk_src",
929 .ops = &clk_ops_rcg_mnd,
930 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
931 CLK_INIT(blsp1_qup5_spi_apps_clk_src.c),
932 },
933};
934
935static struct rcg_clk blsp1_qup6_spi_apps_clk_src = {
936 .cmd_rcgr_reg = BLSP1_QUP6_SPI_APPS_CMD_RCGR,
937 .set_rate = set_rate_mnd,
938 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
939 .current_freq = &rcg_dummy_freq,
940 .base = &virt_bases[GCC_BASE],
941 .c = {
942 .dbg_name = "blsp1_qup6_spi_apps_clk_src",
943 .ops = &clk_ops_rcg_mnd,
944 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
945 CLK_INIT(blsp1_qup6_spi_apps_clk_src.c),
946 },
947};
948
Vikram Mulukutlaa57e6e42013-01-23 16:58:08 -0800949static struct clk_freq_tbl ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk[] = {
Vikram Mulukutla49bce0a22013-04-17 12:42:56 -0700950 F(19200000, cxo, 1, 0, 0),
Vikram Mulukutlaa57e6e42013-01-23 16:58:08 -0800951 F(50000000, gpll0, 12, 0, 0),
952 F_END
953};
954
955static struct rcg_clk blsp1_qup1_i2c_apps_clk_src = {
956 .cmd_rcgr_reg = BLSP1_QUP1_I2C_APPS_CMD_RCGR,
957 .set_rate = set_rate_hid,
958 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
959 .current_freq = &rcg_dummy_freq,
960 .base = &virt_bases[GCC_BASE],
961 .c = {
962 .dbg_name = "blsp1_qup1_i2c_apps_clk_src",
963 .ops = &clk_ops_rcg,
964 VDD_DIG_FMAX_MAP1(LOW, 50000000),
965 CLK_INIT(blsp1_qup1_i2c_apps_clk_src.c),
966 },
967};
968
969static struct rcg_clk blsp1_qup2_i2c_apps_clk_src = {
970 .cmd_rcgr_reg = BLSP1_QUP2_I2C_APPS_CMD_RCGR,
971 .set_rate = set_rate_hid,
972 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
973 .current_freq = &rcg_dummy_freq,
974 .base = &virt_bases[GCC_BASE],
975 .c = {
976 .dbg_name = "blsp1_qup2_i2c_apps_clk_src",
977 .ops = &clk_ops_rcg,
978 VDD_DIG_FMAX_MAP1(LOW, 50000000),
979 CLK_INIT(blsp1_qup2_i2c_apps_clk_src.c),
980 },
981};
982
983static struct rcg_clk blsp1_qup3_i2c_apps_clk_src = {
984 .cmd_rcgr_reg = BLSP1_QUP3_I2C_APPS_CMD_RCGR,
985 .set_rate = set_rate_hid,
986 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
987 .current_freq = &rcg_dummy_freq,
988 .base = &virt_bases[GCC_BASE],
989 .c = {
990 .dbg_name = "blsp1_qup3_i2c_apps_clk_src",
991 .ops = &clk_ops_rcg,
992 VDD_DIG_FMAX_MAP1(LOW, 50000000),
993 CLK_INIT(blsp1_qup3_i2c_apps_clk_src.c),
994 },
995};
996
997static struct rcg_clk blsp1_qup4_i2c_apps_clk_src = {
998 .cmd_rcgr_reg = BLSP1_QUP4_I2C_APPS_CMD_RCGR,
999 .set_rate = set_rate_hid,
1000 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
1001 .current_freq = &rcg_dummy_freq,
1002 .base = &virt_bases[GCC_BASE],
1003 .c = {
1004 .dbg_name = "blsp1_qup4_i2c_apps_clk_src",
1005 .ops = &clk_ops_rcg,
1006 VDD_DIG_FMAX_MAP1(LOW, 50000000),
1007 CLK_INIT(blsp1_qup4_i2c_apps_clk_src.c),
1008 },
1009};
1010
1011static struct rcg_clk blsp1_qup5_i2c_apps_clk_src = {
1012 .cmd_rcgr_reg = BLSP1_QUP5_I2C_APPS_CMD_RCGR,
1013 .set_rate = set_rate_hid,
1014 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
1015 .current_freq = &rcg_dummy_freq,
1016 .base = &virt_bases[GCC_BASE],
1017 .c = {
1018 .dbg_name = "blsp1_qup5_i2c_apps_clk_src",
1019 .ops = &clk_ops_rcg,
1020 VDD_DIG_FMAX_MAP1(LOW, 50000000),
1021 CLK_INIT(blsp1_qup5_i2c_apps_clk_src.c),
1022 },
1023};
1024
1025static struct rcg_clk blsp1_qup6_i2c_apps_clk_src = {
1026 .cmd_rcgr_reg = BLSP1_QUP6_I2C_APPS_CMD_RCGR,
1027 .set_rate = set_rate_hid,
1028 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
1029 .current_freq = &rcg_dummy_freq,
1030 .base = &virt_bases[GCC_BASE],
1031 .c = {
1032 .dbg_name = "blsp1_qup6_i2c_apps_clk_src",
1033 .ops = &clk_ops_rcg,
1034 VDD_DIG_FMAX_MAP1(LOW, 50000000),
1035 CLK_INIT(blsp1_qup6_i2c_apps_clk_src.c),
1036 },
1037};
1038
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001039static struct clk_freq_tbl ftbl_gcc_blsp1_2_uart1_6_apps_clk[] = {
Vikram Mulukutlad3dca652012-11-19 11:04:13 -08001040 F_GCC_GND,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001041 F( 3686400, gpll0, 1, 96, 15625),
1042 F( 7372800, gpll0, 1, 192, 15625),
1043 F(14745600, gpll0, 1, 384, 15625),
1044 F(16000000, gpll0, 5, 2, 15),
1045 F(19200000, cxo, 1, 0, 0),
1046 F(24000000, gpll0, 5, 1, 5),
1047 F(32000000, gpll0, 1, 4, 75),
1048 F(40000000, gpll0, 15, 0, 0),
1049 F(46400000, gpll0, 1, 29, 375),
1050 F(48000000, gpll0, 12.5, 0, 0),
1051 F(51200000, gpll0, 1, 32, 375),
1052 F(56000000, gpll0, 1, 7, 75),
1053 F(58982400, gpll0, 1, 1536, 15625),
1054 F(60000000, gpll0, 10, 0, 0),
Vikram Mulukutlaa89c9ec2013-01-08 18:39:02 -08001055 F(63160000, gpll0, 9.5, 0, 0),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001056 F_END
1057};
1058
1059static struct rcg_clk blsp1_uart1_apps_clk_src = {
1060 .cmd_rcgr_reg = BLSP1_UART1_APPS_CMD_RCGR,
1061 .set_rate = set_rate_mnd,
1062 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
1063 .current_freq = &rcg_dummy_freq,
1064 .base = &virt_bases[GCC_BASE],
1065 .c = {
1066 .dbg_name = "blsp1_uart1_apps_clk_src",
1067 .ops = &clk_ops_rcg_mnd,
1068 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
1069 CLK_INIT(blsp1_uart1_apps_clk_src.c),
1070 },
1071};
1072
1073static struct rcg_clk blsp1_uart2_apps_clk_src = {
1074 .cmd_rcgr_reg = BLSP1_UART2_APPS_CMD_RCGR,
1075 .set_rate = set_rate_mnd,
1076 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
1077 .current_freq = &rcg_dummy_freq,
1078 .base = &virt_bases[GCC_BASE],
1079 .c = {
1080 .dbg_name = "blsp1_uart2_apps_clk_src",
1081 .ops = &clk_ops_rcg_mnd,
1082 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
1083 CLK_INIT(blsp1_uart2_apps_clk_src.c),
1084 },
1085};
1086
1087static struct rcg_clk blsp1_uart3_apps_clk_src = {
1088 .cmd_rcgr_reg = BLSP1_UART3_APPS_CMD_RCGR,
1089 .set_rate = set_rate_mnd,
1090 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
1091 .current_freq = &rcg_dummy_freq,
1092 .base = &virt_bases[GCC_BASE],
1093 .c = {
1094 .dbg_name = "blsp1_uart3_apps_clk_src",
1095 .ops = &clk_ops_rcg_mnd,
1096 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
1097 CLK_INIT(blsp1_uart3_apps_clk_src.c),
1098 },
1099};
1100
1101static struct rcg_clk blsp1_uart4_apps_clk_src = {
1102 .cmd_rcgr_reg = BLSP1_UART4_APPS_CMD_RCGR,
1103 .set_rate = set_rate_mnd,
1104 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
1105 .current_freq = &rcg_dummy_freq,
1106 .base = &virt_bases[GCC_BASE],
1107 .c = {
1108 .dbg_name = "blsp1_uart4_apps_clk_src",
1109 .ops = &clk_ops_rcg_mnd,
1110 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
1111 CLK_INIT(blsp1_uart4_apps_clk_src.c),
1112 },
1113};
1114
1115static struct rcg_clk blsp1_uart5_apps_clk_src = {
1116 .cmd_rcgr_reg = BLSP1_UART5_APPS_CMD_RCGR,
1117 .set_rate = set_rate_mnd,
1118 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
1119 .current_freq = &rcg_dummy_freq,
1120 .base = &virt_bases[GCC_BASE],
1121 .c = {
1122 .dbg_name = "blsp1_uart5_apps_clk_src",
1123 .ops = &clk_ops_rcg_mnd,
1124 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
1125 CLK_INIT(blsp1_uart5_apps_clk_src.c),
1126 },
1127};
1128
1129static struct rcg_clk blsp1_uart6_apps_clk_src = {
1130 .cmd_rcgr_reg = BLSP1_UART6_APPS_CMD_RCGR,
1131 .set_rate = set_rate_mnd,
1132 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
1133 .current_freq = &rcg_dummy_freq,
1134 .base = &virt_bases[GCC_BASE],
1135 .c = {
1136 .dbg_name = "blsp1_uart6_apps_clk_src",
1137 .ops = &clk_ops_rcg_mnd,
1138 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
1139 CLK_INIT(blsp1_uart6_apps_clk_src.c),
1140 },
1141};
1142
1143static struct rcg_clk blsp2_qup1_spi_apps_clk_src = {
1144 .cmd_rcgr_reg = BLSP2_QUP1_SPI_APPS_CMD_RCGR,
1145 .set_rate = set_rate_mnd,
1146 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
1147 .current_freq = &rcg_dummy_freq,
1148 .base = &virt_bases[GCC_BASE],
1149 .c = {
1150 .dbg_name = "blsp2_qup1_spi_apps_clk_src",
1151 .ops = &clk_ops_rcg_mnd,
1152 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
1153 CLK_INIT(blsp2_qup1_spi_apps_clk_src.c),
1154 },
1155};
1156
1157static struct rcg_clk blsp2_qup2_spi_apps_clk_src = {
1158 .cmd_rcgr_reg = BLSP2_QUP2_SPI_APPS_CMD_RCGR,
1159 .set_rate = set_rate_mnd,
1160 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
1161 .current_freq = &rcg_dummy_freq,
1162 .base = &virt_bases[GCC_BASE],
1163 .c = {
1164 .dbg_name = "blsp2_qup2_spi_apps_clk_src",
1165 .ops = &clk_ops_rcg_mnd,
1166 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
1167 CLK_INIT(blsp2_qup2_spi_apps_clk_src.c),
1168 },
1169};
1170
1171static struct rcg_clk blsp2_qup3_spi_apps_clk_src = {
1172 .cmd_rcgr_reg = BLSP2_QUP3_SPI_APPS_CMD_RCGR,
1173 .set_rate = set_rate_mnd,
1174 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
1175 .current_freq = &rcg_dummy_freq,
1176 .base = &virt_bases[GCC_BASE],
1177 .c = {
1178 .dbg_name = "blsp2_qup3_spi_apps_clk_src",
1179 .ops = &clk_ops_rcg_mnd,
1180 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
1181 CLK_INIT(blsp2_qup3_spi_apps_clk_src.c),
1182 },
1183};
1184
1185static struct rcg_clk blsp2_qup4_spi_apps_clk_src = {
1186 .cmd_rcgr_reg = BLSP2_QUP4_SPI_APPS_CMD_RCGR,
1187 .set_rate = set_rate_mnd,
1188 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
1189 .current_freq = &rcg_dummy_freq,
1190 .base = &virt_bases[GCC_BASE],
1191 .c = {
1192 .dbg_name = "blsp2_qup4_spi_apps_clk_src",
1193 .ops = &clk_ops_rcg_mnd,
1194 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
1195 CLK_INIT(blsp2_qup4_spi_apps_clk_src.c),
1196 },
1197};
1198
1199static struct rcg_clk blsp2_qup5_spi_apps_clk_src = {
1200 .cmd_rcgr_reg = BLSP2_QUP5_SPI_APPS_CMD_RCGR,
1201 .set_rate = set_rate_mnd,
1202 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
1203 .current_freq = &rcg_dummy_freq,
1204 .base = &virt_bases[GCC_BASE],
1205 .c = {
1206 .dbg_name = "blsp2_qup5_spi_apps_clk_src",
1207 .ops = &clk_ops_rcg_mnd,
1208 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
1209 CLK_INIT(blsp2_qup5_spi_apps_clk_src.c),
1210 },
1211};
1212
1213static struct rcg_clk blsp2_qup6_spi_apps_clk_src = {
1214 .cmd_rcgr_reg = BLSP2_QUP6_SPI_APPS_CMD_RCGR,
1215 .set_rate = set_rate_mnd,
1216 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
1217 .current_freq = &rcg_dummy_freq,
1218 .base = &virt_bases[GCC_BASE],
1219 .c = {
1220 .dbg_name = "blsp2_qup6_spi_apps_clk_src",
1221 .ops = &clk_ops_rcg_mnd,
1222 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
1223 CLK_INIT(blsp2_qup6_spi_apps_clk_src.c),
1224 },
1225};
1226
Vikram Mulukutlaa57e6e42013-01-23 16:58:08 -08001227static struct rcg_clk blsp2_qup1_i2c_apps_clk_src = {
1228 .cmd_rcgr_reg = BLSP2_QUP1_I2C_APPS_CMD_RCGR,
1229 .set_rate = set_rate_hid,
1230 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
1231 .current_freq = &rcg_dummy_freq,
1232 .base = &virt_bases[GCC_BASE],
1233 .c = {
1234 .dbg_name = "blsp2_qup1_i2c_apps_clk_src",
1235 .ops = &clk_ops_rcg,
1236 VDD_DIG_FMAX_MAP1(LOW, 50000000),
1237 CLK_INIT(blsp2_qup1_i2c_apps_clk_src.c),
1238 },
1239};
1240
1241static struct rcg_clk blsp2_qup2_i2c_apps_clk_src = {
1242 .cmd_rcgr_reg = BLSP2_QUP2_I2C_APPS_CMD_RCGR,
1243 .set_rate = set_rate_hid,
1244 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
1245 .current_freq = &rcg_dummy_freq,
1246 .base = &virt_bases[GCC_BASE],
1247 .c = {
1248 .dbg_name = "blsp2_qup2_i2c_apps_clk_src",
1249 .ops = &clk_ops_rcg,
1250 VDD_DIG_FMAX_MAP1(LOW, 50000000),
1251 CLK_INIT(blsp2_qup2_i2c_apps_clk_src.c),
1252 },
1253};
1254
1255static struct rcg_clk blsp2_qup3_i2c_apps_clk_src = {
1256 .cmd_rcgr_reg = BLSP2_QUP3_I2C_APPS_CMD_RCGR,
1257 .set_rate = set_rate_hid,
1258 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
1259 .current_freq = &rcg_dummy_freq,
1260 .base = &virt_bases[GCC_BASE],
1261 .c = {
1262 .dbg_name = "blsp2_qup3_i2c_apps_clk_src",
1263 .ops = &clk_ops_rcg,
1264 VDD_DIG_FMAX_MAP1(LOW, 50000000),
1265 CLK_INIT(blsp2_qup3_i2c_apps_clk_src.c),
1266 },
1267};
1268
1269static struct rcg_clk blsp2_qup4_i2c_apps_clk_src = {
1270 .cmd_rcgr_reg = BLSP2_QUP4_I2C_APPS_CMD_RCGR,
1271 .set_rate = set_rate_hid,
1272 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
1273 .current_freq = &rcg_dummy_freq,
1274 .base = &virt_bases[GCC_BASE],
1275 .c = {
1276 .dbg_name = "blsp2_qup4_i2c_apps_clk_src",
1277 .ops = &clk_ops_rcg,
1278 VDD_DIG_FMAX_MAP1(LOW, 50000000),
1279 CLK_INIT(blsp2_qup4_i2c_apps_clk_src.c),
1280 },
1281};
1282
1283static struct rcg_clk blsp2_qup5_i2c_apps_clk_src = {
1284 .cmd_rcgr_reg = BLSP2_QUP5_I2C_APPS_CMD_RCGR,
1285 .set_rate = set_rate_hid,
1286 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
1287 .current_freq = &rcg_dummy_freq,
1288 .base = &virt_bases[GCC_BASE],
1289 .c = {
1290 .dbg_name = "blsp2_qup5_i2c_apps_clk_src",
1291 .ops = &clk_ops_rcg,
1292 VDD_DIG_FMAX_MAP1(LOW, 50000000),
1293 CLK_INIT(blsp2_qup5_i2c_apps_clk_src.c),
1294 },
1295};
1296
1297static struct rcg_clk blsp2_qup6_i2c_apps_clk_src = {
1298 .cmd_rcgr_reg = BLSP2_QUP6_I2C_APPS_CMD_RCGR,
1299 .set_rate = set_rate_hid,
1300 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
1301 .current_freq = &rcg_dummy_freq,
1302 .base = &virt_bases[GCC_BASE],
1303 .c = {
1304 .dbg_name = "blsp2_qup6_i2c_apps_clk_src",
1305 .ops = &clk_ops_rcg,
1306 VDD_DIG_FMAX_MAP1(LOW, 50000000),
1307 CLK_INIT(blsp2_qup6_i2c_apps_clk_src.c),
1308 },
1309};
1310
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001311static struct rcg_clk blsp2_uart1_apps_clk_src = {
1312 .cmd_rcgr_reg = BLSP2_UART1_APPS_CMD_RCGR,
1313 .set_rate = set_rate_mnd,
1314 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
1315 .current_freq = &rcg_dummy_freq,
1316 .base = &virt_bases[GCC_BASE],
1317 .c = {
1318 .dbg_name = "blsp2_uart1_apps_clk_src",
1319 .ops = &clk_ops_rcg_mnd,
1320 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
1321 CLK_INIT(blsp2_uart1_apps_clk_src.c),
1322 },
1323};
1324
1325static struct rcg_clk blsp2_uart2_apps_clk_src = {
1326 .cmd_rcgr_reg = BLSP2_UART2_APPS_CMD_RCGR,
1327 .set_rate = set_rate_mnd,
1328 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
1329 .current_freq = &rcg_dummy_freq,
1330 .base = &virt_bases[GCC_BASE],
1331 .c = {
1332 .dbg_name = "blsp2_uart2_apps_clk_src",
1333 .ops = &clk_ops_rcg_mnd,
1334 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
1335 CLK_INIT(blsp2_uart2_apps_clk_src.c),
1336 },
1337};
1338
1339static struct rcg_clk blsp2_uart3_apps_clk_src = {
1340 .cmd_rcgr_reg = BLSP2_UART3_APPS_CMD_RCGR,
1341 .set_rate = set_rate_mnd,
1342 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
1343 .current_freq = &rcg_dummy_freq,
1344 .base = &virt_bases[GCC_BASE],
1345 .c = {
1346 .dbg_name = "blsp2_uart3_apps_clk_src",
1347 .ops = &clk_ops_rcg_mnd,
1348 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
1349 CLK_INIT(blsp2_uart3_apps_clk_src.c),
1350 },
1351};
1352
1353static struct rcg_clk blsp2_uart4_apps_clk_src = {
1354 .cmd_rcgr_reg = BLSP2_UART4_APPS_CMD_RCGR,
1355 .set_rate = set_rate_mnd,
1356 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
1357 .current_freq = &rcg_dummy_freq,
1358 .base = &virt_bases[GCC_BASE],
1359 .c = {
1360 .dbg_name = "blsp2_uart4_apps_clk_src",
1361 .ops = &clk_ops_rcg_mnd,
1362 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
1363 CLK_INIT(blsp2_uart4_apps_clk_src.c),
1364 },
1365};
1366
1367static struct rcg_clk blsp2_uart5_apps_clk_src = {
1368 .cmd_rcgr_reg = BLSP2_UART5_APPS_CMD_RCGR,
1369 .set_rate = set_rate_mnd,
1370 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
1371 .current_freq = &rcg_dummy_freq,
1372 .base = &virt_bases[GCC_BASE],
1373 .c = {
1374 .dbg_name = "blsp2_uart5_apps_clk_src",
1375 .ops = &clk_ops_rcg_mnd,
1376 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
1377 CLK_INIT(blsp2_uart5_apps_clk_src.c),
1378 },
1379};
1380
1381static struct rcg_clk blsp2_uart6_apps_clk_src = {
1382 .cmd_rcgr_reg = BLSP2_UART6_APPS_CMD_RCGR,
1383 .set_rate = set_rate_mnd,
1384 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
1385 .current_freq = &rcg_dummy_freq,
1386 .base = &virt_bases[GCC_BASE],
1387 .c = {
1388 .dbg_name = "blsp2_uart6_apps_clk_src",
1389 .ops = &clk_ops_rcg_mnd,
1390 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
1391 CLK_INIT(blsp2_uart6_apps_clk_src.c),
1392 },
1393};
1394
1395static struct clk_freq_tbl ftbl_gcc_ce1_clk[] = {
1396 F( 50000000, gpll0, 12, 0, 0),
1397 F(100000000, gpll0, 6, 0, 0),
1398 F_END
1399};
1400
Junjie Wu5e905ea2013-06-07 15:47:20 -07001401static struct clk_freq_tbl ftbl_gcc_ce1_v3_clk[] = {
1402 F( 50000000, gpll0, 12, 0, 0),
1403 F( 75000000, gpll0, 8, 0, 0),
1404 F(100000000, gpll0, 6, 0, 0),
1405 F(150000000, gpll0, 4, 0, 0),
1406 F_END
1407};
1408
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001409static struct rcg_clk ce1_clk_src = {
1410 .cmd_rcgr_reg = CE1_CMD_RCGR,
1411 .set_rate = set_rate_hid,
1412 .freq_tbl = ftbl_gcc_ce1_clk,
1413 .current_freq = &rcg_dummy_freq,
1414 .base = &virt_bases[GCC_BASE],
1415 .c = {
1416 .dbg_name = "ce1_clk_src",
1417 .ops = &clk_ops_rcg,
1418 VDD_DIG_FMAX_MAP2(LOW, 50000000, NOMINAL, 100000000),
1419 CLK_INIT(ce1_clk_src.c),
1420 },
1421};
1422
1423static struct clk_freq_tbl ftbl_gcc_ce2_clk[] = {
1424 F( 50000000, gpll0, 12, 0, 0),
1425 F(100000000, gpll0, 6, 0, 0),
1426 F_END
1427};
1428
Junjie Wu5e905ea2013-06-07 15:47:20 -07001429static struct clk_freq_tbl ftbl_gcc_ce2_v3_clk[] = {
1430 F( 50000000, gpll0, 12, 0, 0),
1431 F( 75000000, gpll0, 8, 0, 0),
1432 F(100000000, gpll0, 6, 0, 0),
1433 F(150000000, gpll0, 4, 0, 0),
1434 F_END
1435};
1436
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001437static struct rcg_clk ce2_clk_src = {
1438 .cmd_rcgr_reg = CE2_CMD_RCGR,
1439 .set_rate = set_rate_hid,
1440 .freq_tbl = ftbl_gcc_ce2_clk,
1441 .current_freq = &rcg_dummy_freq,
1442 .base = &virt_bases[GCC_BASE],
1443 .c = {
1444 .dbg_name = "ce2_clk_src",
1445 .ops = &clk_ops_rcg,
1446 VDD_DIG_FMAX_MAP2(LOW, 50000000, NOMINAL, 100000000),
1447 CLK_INIT(ce2_clk_src.c),
1448 },
1449};
1450
1451static struct clk_freq_tbl ftbl_gcc_gp_clk[] = {
Vikram Mulukutla2ee07052013-02-19 15:52:06 -08001452 F( 4800000, cxo, 4, 0, 0),
1453 F( 6000000, gpll0, 10, 1, 10),
1454 F( 6750000, gpll0, 1, 1, 89),
1455 F( 8000000, gpll0, 15, 1, 5),
1456 F( 9600000, cxo, 2, 0, 0),
1457 F(16000000, gpll0, 1, 2, 75),
1458 F(19200000, cxo, 1, 0, 0),
1459 F(24000000, gpll0, 5, 1, 5),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001460 F_END
1461};
1462
1463static struct rcg_clk gp1_clk_src = {
1464 .cmd_rcgr_reg = GP1_CMD_RCGR,
1465 .set_rate = set_rate_mnd,
1466 .freq_tbl = ftbl_gcc_gp_clk,
1467 .current_freq = &rcg_dummy_freq,
1468 .base = &virt_bases[GCC_BASE],
1469 .c = {
1470 .dbg_name = "gp1_clk_src",
1471 .ops = &clk_ops_rcg_mnd,
1472 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
1473 CLK_INIT(gp1_clk_src.c),
1474 },
1475};
1476
1477static struct rcg_clk gp2_clk_src = {
1478 .cmd_rcgr_reg = GP2_CMD_RCGR,
1479 .set_rate = set_rate_mnd,
1480 .freq_tbl = ftbl_gcc_gp_clk,
1481 .current_freq = &rcg_dummy_freq,
1482 .base = &virt_bases[GCC_BASE],
1483 .c = {
1484 .dbg_name = "gp2_clk_src",
1485 .ops = &clk_ops_rcg_mnd,
1486 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
1487 CLK_INIT(gp2_clk_src.c),
1488 },
1489};
1490
1491static struct rcg_clk gp3_clk_src = {
1492 .cmd_rcgr_reg = GP3_CMD_RCGR,
1493 .set_rate = set_rate_mnd,
1494 .freq_tbl = ftbl_gcc_gp_clk,
1495 .current_freq = &rcg_dummy_freq,
1496 .base = &virt_bases[GCC_BASE],
1497 .c = {
1498 .dbg_name = "gp3_clk_src",
1499 .ops = &clk_ops_rcg_mnd,
1500 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
1501 CLK_INIT(gp3_clk_src.c),
1502 },
1503};
1504
1505static struct clk_freq_tbl ftbl_gcc_pdm2_clk[] = {
1506 F(60000000, gpll0, 10, 0, 0),
1507 F_END
1508};
1509
1510static struct rcg_clk pdm2_clk_src = {
1511 .cmd_rcgr_reg = PDM2_CMD_RCGR,
1512 .set_rate = set_rate_hid,
1513 .freq_tbl = ftbl_gcc_pdm2_clk,
1514 .current_freq = &rcg_dummy_freq,
1515 .base = &virt_bases[GCC_BASE],
1516 .c = {
1517 .dbg_name = "pdm2_clk_src",
1518 .ops = &clk_ops_rcg,
1519 VDD_DIG_FMAX_MAP1(LOW, 60000000),
1520 CLK_INIT(pdm2_clk_src.c),
1521 },
1522};
1523
Junjie Wu5e905ea2013-06-07 15:47:20 -07001524static struct clk_freq_tbl ftbl_gcc_sdcc1_4_apps_clk[] = {
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001525 F( 144000, cxo, 16, 3, 25),
1526 F( 400000, cxo, 12, 1, 4),
1527 F( 20000000, gpll0, 15, 1, 2),
1528 F( 25000000, gpll0, 12, 1, 2),
1529 F( 50000000, gpll0, 12, 0, 0),
1530 F(100000000, gpll0, 6, 0, 0),
1531 F(200000000, gpll0, 3, 0, 0),
Junjie Wu5e905ea2013-06-07 15:47:20 -07001532 F(400000000, gpll4, 2, 0, 0),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001533 F_END
1534};
1535
Vikram Mulukutla19245e02012-07-23 15:58:04 -07001536static struct clk_freq_tbl ftbl_gcc_sdcc_apps_rumi_clk[] = {
1537 F( 400000, cxo, 12, 1, 4),
1538 F( 19200000, cxo, 1, 0, 0),
1539 F_END
1540};
1541
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001542static struct rcg_clk sdcc1_apps_clk_src = {
1543 .cmd_rcgr_reg = SDCC1_APPS_CMD_RCGR,
1544 .set_rate = set_rate_mnd,
Junjie Wu5e905ea2013-06-07 15:47:20 -07001545 .freq_tbl = ftbl_gcc_sdcc1_4_apps_clk,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001546 .current_freq = &rcg_dummy_freq,
1547 .base = &virt_bases[GCC_BASE],
1548 .c = {
1549 .dbg_name = "sdcc1_apps_clk_src",
1550 .ops = &clk_ops_rcg_mnd,
1551 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
1552 CLK_INIT(sdcc1_apps_clk_src.c),
1553 },
1554};
1555
1556static struct rcg_clk sdcc2_apps_clk_src = {
1557 .cmd_rcgr_reg = SDCC2_APPS_CMD_RCGR,
1558 .set_rate = set_rate_mnd,
Junjie Wu5e905ea2013-06-07 15:47:20 -07001559 .freq_tbl = ftbl_gcc_sdcc1_4_apps_clk,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001560 .current_freq = &rcg_dummy_freq,
1561 .base = &virt_bases[GCC_BASE],
1562 .c = {
1563 .dbg_name = "sdcc2_apps_clk_src",
1564 .ops = &clk_ops_rcg_mnd,
1565 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
1566 CLK_INIT(sdcc2_apps_clk_src.c),
1567 },
1568};
1569
1570static struct rcg_clk sdcc3_apps_clk_src = {
1571 .cmd_rcgr_reg = SDCC3_APPS_CMD_RCGR,
1572 .set_rate = set_rate_mnd,
Junjie Wu5e905ea2013-06-07 15:47:20 -07001573 .freq_tbl = ftbl_gcc_sdcc1_4_apps_clk,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001574 .current_freq = &rcg_dummy_freq,
1575 .base = &virt_bases[GCC_BASE],
1576 .c = {
1577 .dbg_name = "sdcc3_apps_clk_src",
1578 .ops = &clk_ops_rcg_mnd,
1579 VDD_DIG_FMAX_MAP2(LOW, 50000000, NOMINAL, 100000000),
1580 CLK_INIT(sdcc3_apps_clk_src.c),
1581 },
1582};
1583
1584static struct rcg_clk sdcc4_apps_clk_src = {
1585 .cmd_rcgr_reg = SDCC4_APPS_CMD_RCGR,
1586 .set_rate = set_rate_mnd,
Junjie Wu5e905ea2013-06-07 15:47:20 -07001587 .freq_tbl = ftbl_gcc_sdcc1_4_apps_clk,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001588 .current_freq = &rcg_dummy_freq,
1589 .base = &virt_bases[GCC_BASE],
1590 .c = {
1591 .dbg_name = "sdcc4_apps_clk_src",
1592 .ops = &clk_ops_rcg_mnd,
1593 VDD_DIG_FMAX_MAP2(LOW, 50000000, NOMINAL, 100000000),
1594 CLK_INIT(sdcc4_apps_clk_src.c),
1595 },
1596};
1597
1598static struct clk_freq_tbl ftbl_gcc_tsif_ref_clk[] = {
1599 F(105000, cxo, 2, 1, 91),
1600 F_END
1601};
1602
1603static struct rcg_clk tsif_ref_clk_src = {
1604 .cmd_rcgr_reg = TSIF_REF_CMD_RCGR,
1605 .set_rate = set_rate_mnd,
1606 .freq_tbl = ftbl_gcc_tsif_ref_clk,
1607 .current_freq = &rcg_dummy_freq,
1608 .base = &virt_bases[GCC_BASE],
1609 .c = {
1610 .dbg_name = "tsif_ref_clk_src",
1611 .ops = &clk_ops_rcg_mnd,
1612 VDD_DIG_FMAX_MAP1(LOW, 105500),
1613 CLK_INIT(tsif_ref_clk_src.c),
1614 },
1615};
1616
1617static struct clk_freq_tbl ftbl_gcc_usb30_mock_utmi_clk[] = {
1618 F(60000000, gpll0, 10, 0, 0),
1619 F_END
1620};
1621
1622static struct rcg_clk usb30_mock_utmi_clk_src = {
1623 .cmd_rcgr_reg = USB30_MOCK_UTMI_CMD_RCGR,
1624 .set_rate = set_rate_hid,
1625 .freq_tbl = ftbl_gcc_usb30_mock_utmi_clk,
1626 .current_freq = &rcg_dummy_freq,
1627 .base = &virt_bases[GCC_BASE],
1628 .c = {
1629 .dbg_name = "usb30_mock_utmi_clk_src",
1630 .ops = &clk_ops_rcg,
1631 VDD_DIG_FMAX_MAP1(NOMINAL, 60000000),
1632 CLK_INIT(usb30_mock_utmi_clk_src.c),
1633 },
1634};
1635
1636static struct clk_freq_tbl ftbl_gcc_usb_hs_system_clk[] = {
1637 F(75000000, gpll0, 8, 0, 0),
1638 F_END
1639};
1640
1641static struct rcg_clk usb_hs_system_clk_src = {
1642 .cmd_rcgr_reg = USB_HS_SYSTEM_CMD_RCGR,
1643 .set_rate = set_rate_hid,
1644 .freq_tbl = ftbl_gcc_usb_hs_system_clk,
1645 .current_freq = &rcg_dummy_freq,
1646 .base = &virt_bases[GCC_BASE],
1647 .c = {
1648 .dbg_name = "usb_hs_system_clk_src",
1649 .ops = &clk_ops_rcg,
1650 VDD_DIG_FMAX_MAP2(LOW, 37500000, NOMINAL, 75000000),
1651 CLK_INIT(usb_hs_system_clk_src.c),
1652 },
1653};
1654
1655static struct clk_freq_tbl ftbl_gcc_usb_hsic_clk[] = {
1656 F_HSIC(480000000, gpll1, 1, 0, 0),
1657 F_END
1658};
1659
1660static struct rcg_clk usb_hsic_clk_src = {
1661 .cmd_rcgr_reg = USB_HSIC_CMD_RCGR,
1662 .set_rate = set_rate_hid,
1663 .freq_tbl = ftbl_gcc_usb_hsic_clk,
1664 .current_freq = &rcg_dummy_freq,
1665 .base = &virt_bases[GCC_BASE],
1666 .c = {
1667 .dbg_name = "usb_hsic_clk_src",
1668 .ops = &clk_ops_rcg,
1669 VDD_DIG_FMAX_MAP1(LOW, 480000000),
1670 CLK_INIT(usb_hsic_clk_src.c),
1671 },
1672};
1673
1674static struct clk_freq_tbl ftbl_gcc_usb_hsic_io_cal_clk[] = {
1675 F(9600000, cxo, 2, 0, 0),
1676 F_END
1677};
1678
1679static struct rcg_clk usb_hsic_io_cal_clk_src = {
1680 .cmd_rcgr_reg = USB_HSIC_IO_CAL_CMD_RCGR,
1681 .set_rate = set_rate_hid,
1682 .freq_tbl = ftbl_gcc_usb_hsic_io_cal_clk,
1683 .current_freq = &rcg_dummy_freq,
1684 .base = &virt_bases[GCC_BASE],
1685 .c = {
1686 .dbg_name = "usb_hsic_io_cal_clk_src",
1687 .ops = &clk_ops_rcg,
1688 VDD_DIG_FMAX_MAP1(LOW, 9600000),
1689 CLK_INIT(usb_hsic_io_cal_clk_src.c),
1690 },
1691};
1692
1693static struct clk_freq_tbl ftbl_gcc_usb_hsic_system_clk[] = {
1694 F(75000000, gpll0, 8, 0, 0),
1695 F_END
1696};
1697
1698static struct rcg_clk usb_hsic_system_clk_src = {
1699 .cmd_rcgr_reg = USB_HSIC_SYSTEM_CMD_RCGR,
1700 .set_rate = set_rate_hid,
1701 .freq_tbl = ftbl_gcc_usb_hsic_system_clk,
1702 .current_freq = &rcg_dummy_freq,
1703 .base = &virt_bases[GCC_BASE],
1704 .c = {
1705 .dbg_name = "usb_hsic_system_clk_src",
1706 .ops = &clk_ops_rcg,
1707 VDD_DIG_FMAX_MAP2(LOW, 37500000, NOMINAL, 75000000),
1708 CLK_INIT(usb_hsic_system_clk_src.c),
1709 },
1710};
1711
1712static struct local_vote_clk gcc_bam_dma_ahb_clk = {
1713 .cbcr_reg = BAM_DMA_AHB_CBCR,
1714 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
1715 .en_mask = BIT(12),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001716 .base = &virt_bases[GCC_BASE],
1717 .c = {
1718 .dbg_name = "gcc_bam_dma_ahb_clk",
1719 .ops = &clk_ops_vote,
1720 CLK_INIT(gcc_bam_dma_ahb_clk.c),
1721 },
1722};
1723
1724static struct local_vote_clk gcc_blsp1_ahb_clk = {
1725 .cbcr_reg = BLSP1_AHB_CBCR,
1726 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
1727 .en_mask = BIT(17),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001728 .base = &virt_bases[GCC_BASE],
1729 .c = {
1730 .dbg_name = "gcc_blsp1_ahb_clk",
1731 .ops = &clk_ops_vote,
1732 CLK_INIT(gcc_blsp1_ahb_clk.c),
1733 },
1734};
1735
1736static struct branch_clk gcc_blsp1_qup1_i2c_apps_clk = {
1737 .cbcr_reg = BLSP1_QUP1_I2C_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001738 .base = &virt_bases[GCC_BASE],
1739 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07001740 .parent = &cxo_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001741 .dbg_name = "gcc_blsp1_qup1_i2c_apps_clk",
1742 .ops = &clk_ops_branch,
1743 CLK_INIT(gcc_blsp1_qup1_i2c_apps_clk.c),
1744 },
1745};
1746
1747static struct branch_clk gcc_blsp1_qup1_spi_apps_clk = {
1748 .cbcr_reg = BLSP1_QUP1_SPI_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001749 .base = &virt_bases[GCC_BASE],
1750 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07001751 .parent = &blsp1_qup1_spi_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001752 .dbg_name = "gcc_blsp1_qup1_spi_apps_clk",
1753 .ops = &clk_ops_branch,
1754 CLK_INIT(gcc_blsp1_qup1_spi_apps_clk.c),
1755 },
1756};
1757
1758static struct branch_clk gcc_blsp1_qup2_i2c_apps_clk = {
1759 .cbcr_reg = BLSP1_QUP2_I2C_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001760 .base = &virt_bases[GCC_BASE],
1761 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07001762 .parent = &cxo_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001763 .dbg_name = "gcc_blsp1_qup2_i2c_apps_clk",
1764 .ops = &clk_ops_branch,
1765 CLK_INIT(gcc_blsp1_qup2_i2c_apps_clk.c),
1766 },
1767};
1768
1769static struct branch_clk gcc_blsp1_qup2_spi_apps_clk = {
1770 .cbcr_reg = BLSP1_QUP2_SPI_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001771 .base = &virt_bases[GCC_BASE],
1772 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07001773 .parent = &blsp1_qup2_spi_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001774 .dbg_name = "gcc_blsp1_qup2_spi_apps_clk",
1775 .ops = &clk_ops_branch,
1776 CLK_INIT(gcc_blsp1_qup2_spi_apps_clk.c),
1777 },
1778};
1779
1780static struct branch_clk gcc_blsp1_qup3_i2c_apps_clk = {
1781 .cbcr_reg = BLSP1_QUP3_I2C_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001782 .base = &virt_bases[GCC_BASE],
1783 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07001784 .parent = &cxo_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001785 .dbg_name = "gcc_blsp1_qup3_i2c_apps_clk",
1786 .ops = &clk_ops_branch,
1787 CLK_INIT(gcc_blsp1_qup3_i2c_apps_clk.c),
1788 },
1789};
1790
1791static struct branch_clk gcc_blsp1_qup3_spi_apps_clk = {
1792 .cbcr_reg = BLSP1_QUP3_SPI_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001793 .base = &virt_bases[GCC_BASE],
1794 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07001795 .parent = &blsp1_qup3_spi_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001796 .dbg_name = "gcc_blsp1_qup3_spi_apps_clk",
1797 .ops = &clk_ops_branch,
1798 CLK_INIT(gcc_blsp1_qup3_spi_apps_clk.c),
1799 },
1800};
1801
1802static struct branch_clk gcc_blsp1_qup4_i2c_apps_clk = {
1803 .cbcr_reg = BLSP1_QUP4_I2C_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001804 .base = &virt_bases[GCC_BASE],
1805 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07001806 .parent = &cxo_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001807 .dbg_name = "gcc_blsp1_qup4_i2c_apps_clk",
1808 .ops = &clk_ops_branch,
1809 CLK_INIT(gcc_blsp1_qup4_i2c_apps_clk.c),
1810 },
1811};
1812
1813static struct branch_clk gcc_blsp1_qup4_spi_apps_clk = {
1814 .cbcr_reg = BLSP1_QUP4_SPI_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001815 .base = &virt_bases[GCC_BASE],
1816 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07001817 .parent = &blsp1_qup4_spi_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001818 .dbg_name = "gcc_blsp1_qup4_spi_apps_clk",
1819 .ops = &clk_ops_branch,
1820 CLK_INIT(gcc_blsp1_qup4_spi_apps_clk.c),
1821 },
1822};
1823
1824static struct branch_clk gcc_blsp1_qup5_i2c_apps_clk = {
1825 .cbcr_reg = BLSP1_QUP5_I2C_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001826 .base = &virt_bases[GCC_BASE],
1827 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07001828 .parent = &cxo_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001829 .dbg_name = "gcc_blsp1_qup5_i2c_apps_clk",
1830 .ops = &clk_ops_branch,
1831 CLK_INIT(gcc_blsp1_qup5_i2c_apps_clk.c),
1832 },
1833};
1834
1835static struct branch_clk gcc_blsp1_qup5_spi_apps_clk = {
1836 .cbcr_reg = BLSP1_QUP5_SPI_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001837 .base = &virt_bases[GCC_BASE],
1838 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07001839 .parent = &blsp1_qup5_spi_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001840 .dbg_name = "gcc_blsp1_qup5_spi_apps_clk",
1841 .ops = &clk_ops_branch,
1842 CLK_INIT(gcc_blsp1_qup5_spi_apps_clk.c),
1843 },
1844};
1845
1846static struct branch_clk gcc_blsp1_qup6_i2c_apps_clk = {
1847 .cbcr_reg = BLSP1_QUP6_I2C_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001848 .base = &virt_bases[GCC_BASE],
1849 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07001850 .parent = &cxo_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001851 .dbg_name = "gcc_blsp1_qup6_i2c_apps_clk",
1852 .ops = &clk_ops_branch,
1853 CLK_INIT(gcc_blsp1_qup6_i2c_apps_clk.c),
1854 },
1855};
1856
1857static struct branch_clk gcc_blsp1_qup6_spi_apps_clk = {
1858 .cbcr_reg = BLSP1_QUP6_SPI_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001859 .base = &virt_bases[GCC_BASE],
1860 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07001861 .parent = &blsp1_qup6_spi_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001862 .dbg_name = "gcc_blsp1_qup6_spi_apps_clk",
1863 .ops = &clk_ops_branch,
1864 CLK_INIT(gcc_blsp1_qup6_spi_apps_clk.c),
1865 },
1866};
1867
1868static struct branch_clk gcc_blsp1_uart1_apps_clk = {
1869 .cbcr_reg = BLSP1_UART1_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001870 .base = &virt_bases[GCC_BASE],
1871 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07001872 .parent = &blsp1_uart1_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001873 .dbg_name = "gcc_blsp1_uart1_apps_clk",
1874 .ops = &clk_ops_branch,
1875 CLK_INIT(gcc_blsp1_uart1_apps_clk.c),
1876 },
1877};
1878
1879static struct branch_clk gcc_blsp1_uart2_apps_clk = {
1880 .cbcr_reg = BLSP1_UART2_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001881 .base = &virt_bases[GCC_BASE],
1882 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07001883 .parent = &blsp1_uart2_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001884 .dbg_name = "gcc_blsp1_uart2_apps_clk",
1885 .ops = &clk_ops_branch,
1886 CLK_INIT(gcc_blsp1_uart2_apps_clk.c),
1887 },
1888};
1889
1890static struct branch_clk gcc_blsp1_uart3_apps_clk = {
1891 .cbcr_reg = BLSP1_UART3_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001892 .base = &virt_bases[GCC_BASE],
1893 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07001894 .parent = &blsp1_uart3_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001895 .dbg_name = "gcc_blsp1_uart3_apps_clk",
1896 .ops = &clk_ops_branch,
1897 CLK_INIT(gcc_blsp1_uart3_apps_clk.c),
1898 },
1899};
1900
1901static struct branch_clk gcc_blsp1_uart4_apps_clk = {
1902 .cbcr_reg = BLSP1_UART4_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001903 .base = &virt_bases[GCC_BASE],
1904 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07001905 .parent = &blsp1_uart4_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001906 .dbg_name = "gcc_blsp1_uart4_apps_clk",
1907 .ops = &clk_ops_branch,
1908 CLK_INIT(gcc_blsp1_uart4_apps_clk.c),
1909 },
1910};
1911
1912static struct branch_clk gcc_blsp1_uart5_apps_clk = {
1913 .cbcr_reg = BLSP1_UART5_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001914 .base = &virt_bases[GCC_BASE],
1915 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07001916 .parent = &blsp1_uart5_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001917 .dbg_name = "gcc_blsp1_uart5_apps_clk",
1918 .ops = &clk_ops_branch,
1919 CLK_INIT(gcc_blsp1_uart5_apps_clk.c),
1920 },
1921};
1922
1923static struct branch_clk gcc_blsp1_uart6_apps_clk = {
1924 .cbcr_reg = BLSP1_UART6_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001925 .base = &virt_bases[GCC_BASE],
1926 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07001927 .parent = &blsp1_uart6_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001928 .dbg_name = "gcc_blsp1_uart6_apps_clk",
1929 .ops = &clk_ops_branch,
1930 CLK_INIT(gcc_blsp1_uart6_apps_clk.c),
1931 },
1932};
1933
Vikram Mulukutlaa967db42012-05-10 16:20:40 -07001934static struct local_vote_clk gcc_boot_rom_ahb_clk = {
1935 .cbcr_reg = BOOT_ROM_AHB_CBCR,
1936 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
1937 .en_mask = BIT(10),
Vikram Mulukutlaa967db42012-05-10 16:20:40 -07001938 .base = &virt_bases[GCC_BASE],
1939 .c = {
1940 .dbg_name = "gcc_boot_rom_ahb_clk",
1941 .ops = &clk_ops_vote,
1942 CLK_INIT(gcc_boot_rom_ahb_clk.c),
1943 },
1944};
1945
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001946static struct local_vote_clk gcc_blsp2_ahb_clk = {
1947 .cbcr_reg = BLSP2_AHB_CBCR,
1948 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
1949 .en_mask = BIT(15),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001950 .base = &virt_bases[GCC_BASE],
1951 .c = {
1952 .dbg_name = "gcc_blsp2_ahb_clk",
1953 .ops = &clk_ops_vote,
1954 CLK_INIT(gcc_blsp2_ahb_clk.c),
1955 },
1956};
1957
1958static struct branch_clk gcc_blsp2_qup1_i2c_apps_clk = {
1959 .cbcr_reg = BLSP2_QUP1_I2C_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001960 .base = &virt_bases[GCC_BASE],
1961 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07001962 .parent = &cxo_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001963 .dbg_name = "gcc_blsp2_qup1_i2c_apps_clk",
1964 .ops = &clk_ops_branch,
1965 CLK_INIT(gcc_blsp2_qup1_i2c_apps_clk.c),
1966 },
1967};
1968
1969static struct branch_clk gcc_blsp2_qup1_spi_apps_clk = {
1970 .cbcr_reg = BLSP2_QUP1_SPI_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001971 .base = &virt_bases[GCC_BASE],
1972 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07001973 .parent = &blsp2_qup1_spi_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001974 .dbg_name = "gcc_blsp2_qup1_spi_apps_clk",
1975 .ops = &clk_ops_branch,
1976 CLK_INIT(gcc_blsp2_qup1_spi_apps_clk.c),
1977 },
1978};
1979
1980static struct branch_clk gcc_blsp2_qup2_i2c_apps_clk = {
1981 .cbcr_reg = BLSP2_QUP2_I2C_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001982 .base = &virt_bases[GCC_BASE],
1983 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07001984 .parent = &cxo_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001985 .dbg_name = "gcc_blsp2_qup2_i2c_apps_clk",
1986 .ops = &clk_ops_branch,
1987 CLK_INIT(gcc_blsp2_qup2_i2c_apps_clk.c),
1988 },
1989};
1990
1991static struct branch_clk gcc_blsp2_qup2_spi_apps_clk = {
1992 .cbcr_reg = BLSP2_QUP2_SPI_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001993 .base = &virt_bases[GCC_BASE],
1994 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07001995 .parent = &blsp2_qup2_spi_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001996 .dbg_name = "gcc_blsp2_qup2_spi_apps_clk",
1997 .ops = &clk_ops_branch,
1998 CLK_INIT(gcc_blsp2_qup2_spi_apps_clk.c),
1999 },
2000};
2001
2002static struct branch_clk gcc_blsp2_qup3_i2c_apps_clk = {
2003 .cbcr_reg = BLSP2_QUP3_I2C_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002004 .base = &virt_bases[GCC_BASE],
2005 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002006 .parent = &cxo_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002007 .dbg_name = "gcc_blsp2_qup3_i2c_apps_clk",
2008 .ops = &clk_ops_branch,
2009 CLK_INIT(gcc_blsp2_qup3_i2c_apps_clk.c),
2010 },
2011};
2012
2013static struct branch_clk gcc_blsp2_qup3_spi_apps_clk = {
2014 .cbcr_reg = BLSP2_QUP3_SPI_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002015 .base = &virt_bases[GCC_BASE],
2016 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002017 .parent = &blsp2_qup3_spi_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002018 .dbg_name = "gcc_blsp2_qup3_spi_apps_clk",
2019 .ops = &clk_ops_branch,
2020 CLK_INIT(gcc_blsp2_qup3_spi_apps_clk.c),
2021 },
2022};
2023
2024static struct branch_clk gcc_blsp2_qup4_i2c_apps_clk = {
2025 .cbcr_reg = BLSP2_QUP4_I2C_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002026 .base = &virt_bases[GCC_BASE],
2027 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002028 .parent = &cxo_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002029 .dbg_name = "gcc_blsp2_qup4_i2c_apps_clk",
2030 .ops = &clk_ops_branch,
2031 CLK_INIT(gcc_blsp2_qup4_i2c_apps_clk.c),
2032 },
2033};
2034
2035static struct branch_clk gcc_blsp2_qup4_spi_apps_clk = {
2036 .cbcr_reg = BLSP2_QUP4_SPI_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002037 .base = &virt_bases[GCC_BASE],
2038 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002039 .parent = &blsp2_qup4_spi_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002040 .dbg_name = "gcc_blsp2_qup4_spi_apps_clk",
2041 .ops = &clk_ops_branch,
2042 CLK_INIT(gcc_blsp2_qup4_spi_apps_clk.c),
2043 },
2044};
2045
2046static struct branch_clk gcc_blsp2_qup5_i2c_apps_clk = {
2047 .cbcr_reg = BLSP2_QUP5_I2C_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002048 .base = &virt_bases[GCC_BASE],
2049 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002050 .parent = &cxo_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002051 .dbg_name = "gcc_blsp2_qup5_i2c_apps_clk",
2052 .ops = &clk_ops_branch,
2053 CLK_INIT(gcc_blsp2_qup5_i2c_apps_clk.c),
2054 },
2055};
2056
2057static struct branch_clk gcc_blsp2_qup5_spi_apps_clk = {
2058 .cbcr_reg = BLSP2_QUP5_SPI_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002059 .base = &virt_bases[GCC_BASE],
2060 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002061 .parent = &blsp2_qup5_spi_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002062 .dbg_name = "gcc_blsp2_qup5_spi_apps_clk",
2063 .ops = &clk_ops_branch,
2064 CLK_INIT(gcc_blsp2_qup5_spi_apps_clk.c),
2065 },
2066};
2067
2068static struct branch_clk gcc_blsp2_qup6_i2c_apps_clk = {
2069 .cbcr_reg = BLSP2_QUP6_I2C_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002070 .base = &virt_bases[GCC_BASE],
2071 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002072 .parent = &cxo_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002073 .dbg_name = "gcc_blsp2_qup6_i2c_apps_clk",
2074 .ops = &clk_ops_branch,
2075 CLK_INIT(gcc_blsp2_qup6_i2c_apps_clk.c),
2076 },
2077};
2078
2079static struct branch_clk gcc_blsp2_qup6_spi_apps_clk = {
2080 .cbcr_reg = BLSP2_QUP6_SPI_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002081 .base = &virt_bases[GCC_BASE],
2082 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002083 .parent = &blsp2_qup6_spi_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002084 .dbg_name = "gcc_blsp2_qup6_spi_apps_clk",
2085 .ops = &clk_ops_branch,
2086 CLK_INIT(gcc_blsp2_qup6_spi_apps_clk.c),
2087 },
2088};
2089
2090static struct branch_clk gcc_blsp2_uart1_apps_clk = {
2091 .cbcr_reg = BLSP2_UART1_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002092 .base = &virt_bases[GCC_BASE],
2093 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002094 .parent = &blsp2_uart1_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002095 .dbg_name = "gcc_blsp2_uart1_apps_clk",
2096 .ops = &clk_ops_branch,
2097 CLK_INIT(gcc_blsp2_uart1_apps_clk.c),
2098 },
2099};
2100
2101static struct branch_clk gcc_blsp2_uart2_apps_clk = {
2102 .cbcr_reg = BLSP2_UART2_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002103 .base = &virt_bases[GCC_BASE],
2104 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002105 .parent = &blsp2_uart2_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002106 .dbg_name = "gcc_blsp2_uart2_apps_clk",
2107 .ops = &clk_ops_branch,
2108 CLK_INIT(gcc_blsp2_uart2_apps_clk.c),
2109 },
2110};
2111
2112static struct branch_clk gcc_blsp2_uart3_apps_clk = {
2113 .cbcr_reg = BLSP2_UART3_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002114 .base = &virt_bases[GCC_BASE],
2115 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002116 .parent = &blsp2_uart3_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002117 .dbg_name = "gcc_blsp2_uart3_apps_clk",
2118 .ops = &clk_ops_branch,
2119 CLK_INIT(gcc_blsp2_uart3_apps_clk.c),
2120 },
2121};
2122
2123static struct branch_clk gcc_blsp2_uart4_apps_clk = {
2124 .cbcr_reg = BLSP2_UART4_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002125 .base = &virt_bases[GCC_BASE],
2126 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002127 .parent = &blsp2_uart4_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002128 .dbg_name = "gcc_blsp2_uart4_apps_clk",
2129 .ops = &clk_ops_branch,
2130 CLK_INIT(gcc_blsp2_uart4_apps_clk.c),
2131 },
2132};
2133
2134static struct branch_clk gcc_blsp2_uart5_apps_clk = {
2135 .cbcr_reg = BLSP2_UART5_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002136 .base = &virt_bases[GCC_BASE],
2137 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002138 .parent = &blsp2_uart5_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002139 .dbg_name = "gcc_blsp2_uart5_apps_clk",
2140 .ops = &clk_ops_branch,
2141 CLK_INIT(gcc_blsp2_uart5_apps_clk.c),
2142 },
2143};
2144
2145static struct branch_clk gcc_blsp2_uart6_apps_clk = {
2146 .cbcr_reg = BLSP2_UART6_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002147 .base = &virt_bases[GCC_BASE],
2148 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002149 .parent = &blsp2_uart6_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002150 .dbg_name = "gcc_blsp2_uart6_apps_clk",
2151 .ops = &clk_ops_branch,
2152 CLK_INIT(gcc_blsp2_uart6_apps_clk.c),
2153 },
2154};
2155
2156static struct local_vote_clk gcc_ce1_clk = {
2157 .cbcr_reg = CE1_CBCR,
2158 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
2159 .en_mask = BIT(5),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002160 .base = &virt_bases[GCC_BASE],
2161 .c = {
2162 .dbg_name = "gcc_ce1_clk",
2163 .ops = &clk_ops_vote,
2164 CLK_INIT(gcc_ce1_clk.c),
2165 },
2166};
2167
2168static struct local_vote_clk gcc_ce1_ahb_clk = {
2169 .cbcr_reg = CE1_AHB_CBCR,
2170 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
2171 .en_mask = BIT(3),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002172 .base = &virt_bases[GCC_BASE],
2173 .c = {
2174 .dbg_name = "gcc_ce1_ahb_clk",
2175 .ops = &clk_ops_vote,
2176 CLK_INIT(gcc_ce1_ahb_clk.c),
2177 },
2178};
2179
2180static struct local_vote_clk gcc_ce1_axi_clk = {
2181 .cbcr_reg = CE1_AXI_CBCR,
2182 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
2183 .en_mask = BIT(4),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002184 .base = &virt_bases[GCC_BASE],
2185 .c = {
2186 .dbg_name = "gcc_ce1_axi_clk",
2187 .ops = &clk_ops_vote,
2188 CLK_INIT(gcc_ce1_axi_clk.c),
2189 },
2190};
2191
2192static struct local_vote_clk gcc_ce2_clk = {
2193 .cbcr_reg = CE2_CBCR,
2194 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
2195 .en_mask = BIT(2),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002196 .base = &virt_bases[GCC_BASE],
2197 .c = {
2198 .dbg_name = "gcc_ce2_clk",
2199 .ops = &clk_ops_vote,
2200 CLK_INIT(gcc_ce2_clk.c),
2201 },
2202};
2203
2204static struct local_vote_clk gcc_ce2_ahb_clk = {
2205 .cbcr_reg = CE2_AHB_CBCR,
2206 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
2207 .en_mask = BIT(0),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002208 .base = &virt_bases[GCC_BASE],
2209 .c = {
Vikram Mulukutla3f580f82012-09-04 15:22:42 -07002210 .dbg_name = "gcc_ce2_ahb_clk",
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002211 .ops = &clk_ops_vote,
Vikram Mulukutla3f580f82012-09-04 15:22:42 -07002212 CLK_INIT(gcc_ce2_ahb_clk.c),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002213 },
2214};
2215
2216static struct local_vote_clk gcc_ce2_axi_clk = {
2217 .cbcr_reg = CE2_AXI_CBCR,
2218 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
2219 .en_mask = BIT(1),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002220 .base = &virt_bases[GCC_BASE],
2221 .c = {
Vikram Mulukutla3f580f82012-09-04 15:22:42 -07002222 .dbg_name = "gcc_ce2_axi_clk",
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002223 .ops = &clk_ops_vote,
2224 CLK_INIT(gcc_ce2_axi_clk.c),
2225 },
2226};
2227
2228static struct branch_clk gcc_gp1_clk = {
2229 .cbcr_reg = GP1_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002230 .base = &virt_bases[GCC_BASE],
2231 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002232 .parent = &gp1_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002233 .dbg_name = "gcc_gp1_clk",
2234 .ops = &clk_ops_branch,
2235 CLK_INIT(gcc_gp1_clk.c),
2236 },
2237};
2238
2239static struct branch_clk gcc_gp2_clk = {
2240 .cbcr_reg = GP2_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002241 .base = &virt_bases[GCC_BASE],
2242 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002243 .parent = &gp2_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002244 .dbg_name = "gcc_gp2_clk",
2245 .ops = &clk_ops_branch,
2246 CLK_INIT(gcc_gp2_clk.c),
2247 },
2248};
2249
2250static struct branch_clk gcc_gp3_clk = {
2251 .cbcr_reg = GP3_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002252 .base = &virt_bases[GCC_BASE],
2253 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002254 .parent = &gp3_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002255 .dbg_name = "gcc_gp3_clk",
2256 .ops = &clk_ops_branch,
2257 CLK_INIT(gcc_gp3_clk.c),
2258 },
2259};
2260
2261static struct branch_clk gcc_pdm2_clk = {
2262 .cbcr_reg = PDM2_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002263 .base = &virt_bases[GCC_BASE],
2264 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002265 .parent = &pdm2_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002266 .dbg_name = "gcc_pdm2_clk",
2267 .ops = &clk_ops_branch,
2268 CLK_INIT(gcc_pdm2_clk.c),
2269 },
2270};
2271
2272static struct branch_clk gcc_pdm_ahb_clk = {
2273 .cbcr_reg = PDM_AHB_CBCR,
2274 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002275 .base = &virt_bases[GCC_BASE],
2276 .c = {
2277 .dbg_name = "gcc_pdm_ahb_clk",
2278 .ops = &clk_ops_branch,
2279 CLK_INIT(gcc_pdm_ahb_clk.c),
2280 },
2281};
2282
2283static struct local_vote_clk gcc_prng_ahb_clk = {
2284 .cbcr_reg = PRNG_AHB_CBCR,
2285 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
2286 .en_mask = BIT(13),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002287 .base = &virt_bases[GCC_BASE],
2288 .c = {
2289 .dbg_name = "gcc_prng_ahb_clk",
2290 .ops = &clk_ops_vote,
2291 CLK_INIT(gcc_prng_ahb_clk.c),
2292 },
2293};
2294
2295static struct branch_clk gcc_sdcc1_ahb_clk = {
2296 .cbcr_reg = SDCC1_AHB_CBCR,
2297 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002298 .base = &virt_bases[GCC_BASE],
2299 .c = {
2300 .dbg_name = "gcc_sdcc1_ahb_clk",
2301 .ops = &clk_ops_branch,
2302 CLK_INIT(gcc_sdcc1_ahb_clk.c),
2303 },
2304};
2305
2306static struct branch_clk gcc_sdcc1_apps_clk = {
2307 .cbcr_reg = SDCC1_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002308 .base = &virt_bases[GCC_BASE],
2309 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002310 .parent = &sdcc1_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002311 .dbg_name = "gcc_sdcc1_apps_clk",
2312 .ops = &clk_ops_branch,
2313 CLK_INIT(gcc_sdcc1_apps_clk.c),
2314 },
2315};
2316
2317static struct branch_clk gcc_sdcc2_ahb_clk = {
2318 .cbcr_reg = SDCC2_AHB_CBCR,
2319 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002320 .base = &virt_bases[GCC_BASE],
2321 .c = {
2322 .dbg_name = "gcc_sdcc2_ahb_clk",
2323 .ops = &clk_ops_branch,
2324 CLK_INIT(gcc_sdcc2_ahb_clk.c),
2325 },
2326};
2327
2328static struct branch_clk gcc_sdcc2_apps_clk = {
2329 .cbcr_reg = SDCC2_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002330 .base = &virt_bases[GCC_BASE],
2331 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002332 .parent = &sdcc2_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002333 .dbg_name = "gcc_sdcc2_apps_clk",
2334 .ops = &clk_ops_branch,
2335 CLK_INIT(gcc_sdcc2_apps_clk.c),
2336 },
2337};
2338
2339static struct branch_clk gcc_sdcc3_ahb_clk = {
2340 .cbcr_reg = SDCC3_AHB_CBCR,
2341 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002342 .base = &virt_bases[GCC_BASE],
2343 .c = {
2344 .dbg_name = "gcc_sdcc3_ahb_clk",
2345 .ops = &clk_ops_branch,
2346 CLK_INIT(gcc_sdcc3_ahb_clk.c),
2347 },
2348};
2349
2350static struct branch_clk gcc_sdcc3_apps_clk = {
2351 .cbcr_reg = SDCC3_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002352 .base = &virt_bases[GCC_BASE],
2353 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002354 .parent = &sdcc3_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002355 .dbg_name = "gcc_sdcc3_apps_clk",
2356 .ops = &clk_ops_branch,
2357 CLK_INIT(gcc_sdcc3_apps_clk.c),
2358 },
2359};
2360
2361static struct branch_clk gcc_sdcc4_ahb_clk = {
2362 .cbcr_reg = SDCC4_AHB_CBCR,
2363 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002364 .base = &virt_bases[GCC_BASE],
2365 .c = {
2366 .dbg_name = "gcc_sdcc4_ahb_clk",
2367 .ops = &clk_ops_branch,
2368 CLK_INIT(gcc_sdcc4_ahb_clk.c),
2369 },
2370};
2371
2372static struct branch_clk gcc_sdcc4_apps_clk = {
2373 .cbcr_reg = SDCC4_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002374 .base = &virt_bases[GCC_BASE],
2375 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002376 .parent = &sdcc4_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002377 .dbg_name = "gcc_sdcc4_apps_clk",
2378 .ops = &clk_ops_branch,
2379 CLK_INIT(gcc_sdcc4_apps_clk.c),
2380 },
2381};
2382
2383static struct branch_clk gcc_tsif_ahb_clk = {
2384 .cbcr_reg = TSIF_AHB_CBCR,
2385 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002386 .base = &virt_bases[GCC_BASE],
2387 .c = {
2388 .dbg_name = "gcc_tsif_ahb_clk",
2389 .ops = &clk_ops_branch,
2390 CLK_INIT(gcc_tsif_ahb_clk.c),
2391 },
2392};
2393
2394static struct branch_clk gcc_tsif_ref_clk = {
2395 .cbcr_reg = TSIF_REF_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002396 .base = &virt_bases[GCC_BASE],
2397 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002398 .parent = &tsif_ref_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002399 .dbg_name = "gcc_tsif_ref_clk",
2400 .ops = &clk_ops_branch,
2401 CLK_INIT(gcc_tsif_ref_clk.c),
2402 },
2403};
2404
Vikram Mulukutla9e3512c2012-09-28 13:53:52 -07002405struct branch_clk gcc_sys_noc_usb3_axi_clk = {
2406 .cbcr_reg = SYS_NOC_USB3_AXI_CBCR,
Vikram Mulukutla9e3512c2012-09-28 13:53:52 -07002407 .has_sibling = 1,
2408 .base = &virt_bases[GCC_BASE],
2409 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002410 .parent = &usb30_master_clk_src.c,
Vikram Mulukutla9e3512c2012-09-28 13:53:52 -07002411 .dbg_name = "gcc_sys_noc_usb3_axi_clk",
2412 .ops = &clk_ops_branch,
2413 CLK_INIT(gcc_sys_noc_usb3_axi_clk.c),
2414 },
2415};
2416
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002417static struct branch_clk gcc_usb30_master_clk = {
2418 .cbcr_reg = USB30_MASTER_CBCR,
Vikram Mulukutla777c3ce2012-07-03 20:02:55 -07002419 .bcr_reg = USB_30_BCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002420 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002421 .base = &virt_bases[GCC_BASE],
2422 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002423 .parent = &usb30_master_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002424 .dbg_name = "gcc_usb30_master_clk",
2425 .ops = &clk_ops_branch,
2426 CLK_INIT(gcc_usb30_master_clk.c),
Vikram Mulukutla9e3512c2012-09-28 13:53:52 -07002427 .depends = &gcc_sys_noc_usb3_axi_clk.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002428 },
2429};
2430
2431static struct branch_clk gcc_usb30_mock_utmi_clk = {
2432 .cbcr_reg = USB30_MOCK_UTMI_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002433 .base = &virt_bases[GCC_BASE],
2434 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002435 .parent = &usb30_mock_utmi_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002436 .dbg_name = "gcc_usb30_mock_utmi_clk",
2437 .ops = &clk_ops_branch,
2438 CLK_INIT(gcc_usb30_mock_utmi_clk.c),
2439 },
2440};
2441
Vikram Mulukutla3b98a6d2012-08-15 20:35:25 -07002442struct branch_clk gcc_usb30_sleep_clk = {
2443 .cbcr_reg = USB30_SLEEP_CBCR,
2444 .has_sibling = 1,
2445 .base = &virt_bases[GCC_BASE],
2446 .c = {
2447 .dbg_name = "gcc_usb30_sleep_clk",
2448 .ops = &clk_ops_branch,
2449 CLK_INIT(gcc_usb30_sleep_clk.c),
2450 },
2451};
2452
2453struct branch_clk gcc_usb2a_phy_sleep_clk = {
2454 .cbcr_reg = USB2A_PHY_SLEEP_CBCR,
2455 .has_sibling = 1,
2456 .base = &virt_bases[GCC_BASE],
2457 .c = {
2458 .dbg_name = "gcc_usb2a_phy_sleep_clk",
2459 .ops = &clk_ops_branch,
2460 CLK_INIT(gcc_usb2a_phy_sleep_clk.c),
2461 },
2462};
2463
2464struct branch_clk gcc_usb2b_phy_sleep_clk = {
2465 .cbcr_reg = USB2B_PHY_SLEEP_CBCR,
2466 .has_sibling = 1,
2467 .base = &virt_bases[GCC_BASE],
2468 .c = {
2469 .dbg_name = "gcc_usb2b_phy_sleep_clk",
2470 .ops = &clk_ops_branch,
2471 CLK_INIT(gcc_usb2b_phy_sleep_clk.c),
2472 },
2473};
2474
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002475static struct branch_clk gcc_usb_hs_ahb_clk = {
2476 .cbcr_reg = USB_HS_AHB_CBCR,
2477 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002478 .base = &virt_bases[GCC_BASE],
2479 .c = {
2480 .dbg_name = "gcc_usb_hs_ahb_clk",
2481 .ops = &clk_ops_branch,
2482 CLK_INIT(gcc_usb_hs_ahb_clk.c),
2483 },
2484};
2485
2486static struct branch_clk gcc_usb_hs_system_clk = {
2487 .cbcr_reg = USB_HS_SYSTEM_CBCR,
Vikram Mulukutla777c3ce2012-07-03 20:02:55 -07002488 .bcr_reg = USB_HS_BCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002489 .base = &virt_bases[GCC_BASE],
2490 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002491 .parent = &usb_hs_system_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002492 .dbg_name = "gcc_usb_hs_system_clk",
2493 .ops = &clk_ops_branch,
2494 CLK_INIT(gcc_usb_hs_system_clk.c),
2495 },
2496};
2497
2498static struct branch_clk gcc_usb_hsic_ahb_clk = {
2499 .cbcr_reg = USB_HSIC_AHB_CBCR,
2500 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002501 .base = &virt_bases[GCC_BASE],
2502 .c = {
2503 .dbg_name = "gcc_usb_hsic_ahb_clk",
2504 .ops = &clk_ops_branch,
2505 CLK_INIT(gcc_usb_hsic_ahb_clk.c),
2506 },
2507};
2508
2509static struct branch_clk gcc_usb_hsic_clk = {
2510 .cbcr_reg = USB_HSIC_CBCR,
Vikram Mulukutla777c3ce2012-07-03 20:02:55 -07002511 .bcr_reg = USB_HS_HSIC_BCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002512 .base = &virt_bases[GCC_BASE],
2513 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002514 .parent = &usb_hsic_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002515 .dbg_name = "gcc_usb_hsic_clk",
2516 .ops = &clk_ops_branch,
2517 CLK_INIT(gcc_usb_hsic_clk.c),
2518 },
2519};
2520
2521static struct branch_clk gcc_usb_hsic_io_cal_clk = {
2522 .cbcr_reg = USB_HSIC_IO_CAL_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002523 .base = &virt_bases[GCC_BASE],
2524 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002525 .parent = &usb_hsic_io_cal_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002526 .dbg_name = "gcc_usb_hsic_io_cal_clk",
2527 .ops = &clk_ops_branch,
2528 CLK_INIT(gcc_usb_hsic_io_cal_clk.c),
2529 },
2530};
2531
2532static struct branch_clk gcc_usb_hsic_system_clk = {
2533 .cbcr_reg = USB_HSIC_SYSTEM_CBCR,
Vikram Mulukutla66fe3382012-12-10 20:23:34 -08002534 .bcr_reg = USB_HS_HSIC_BCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002535 .base = &virt_bases[GCC_BASE],
2536 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002537 .parent = &usb_hsic_system_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002538 .dbg_name = "gcc_usb_hsic_system_clk",
2539 .ops = &clk_ops_branch,
2540 CLK_INIT(gcc_usb_hsic_system_clk.c),
2541 },
2542};
2543
Vikram Mulukutla274b2d92012-07-13 15:53:04 -07002544struct branch_clk gcc_mmss_noc_cfg_ahb_clk = {
2545 .cbcr_reg = MMSS_NOC_CFG_AHB_CBCR,
2546 .has_sibling = 1,
2547 .base = &virt_bases[GCC_BASE],
2548 .c = {
2549 .dbg_name = "gcc_mmss_noc_cfg_ahb_clk",
2550 .ops = &clk_ops_branch,
2551 CLK_INIT(gcc_mmss_noc_cfg_ahb_clk.c),
2552 },
2553};
2554
2555struct branch_clk gcc_ocmem_noc_cfg_ahb_clk = {
2556 .cbcr_reg = OCMEM_NOC_CFG_AHB_CBCR,
2557 .has_sibling = 1,
2558 .base = &virt_bases[GCC_BASE],
2559 .c = {
2560 .dbg_name = "gcc_ocmem_noc_cfg_ahb_clk",
2561 .ops = &clk_ops_branch,
2562 CLK_INIT(gcc_ocmem_noc_cfg_ahb_clk.c),
2563 },
2564};
2565
Vikram Mulukutlaa967db42012-05-10 16:20:40 -07002566static struct branch_clk gcc_mss_cfg_ahb_clk = {
2567 .cbcr_reg = MSS_CFG_AHB_CBCR,
2568 .has_sibling = 1,
2569 .base = &virt_bases[GCC_BASE],
2570 .c = {
2571 .dbg_name = "gcc_mss_cfg_ahb_clk",
2572 .ops = &clk_ops_branch,
2573 CLK_INIT(gcc_mss_cfg_ahb_clk.c),
2574 },
2575};
2576
Vikram Mulukutla31926eb2012-08-12 19:58:08 -07002577static struct branch_clk gcc_mss_q6_bimc_axi_clk = {
2578 .cbcr_reg = MSS_Q6_BIMC_AXI_CBCR,
2579 .has_sibling = 1,
2580 .base = &virt_bases[GCC_BASE],
2581 .c = {
2582 .dbg_name = "gcc_mss_q6_bimc_axi_clk",
2583 .ops = &clk_ops_branch,
2584 CLK_INIT(gcc_mss_q6_bimc_axi_clk.c),
2585 },
2586};
2587
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002588static struct clk_freq_tbl ftbl_mmss_axi_clk[] = {
Vikram Mulukutlad16a8f12012-07-20 13:33:45 -07002589 F_MM( 19200000, cxo, 1, 0, 0),
Vikram Mulukutla694fafd2012-09-20 19:24:22 -07002590 F_MM( 37500000, gpll0, 16, 0, 0),
2591 F_MM( 50000000, gpll0, 12, 0, 0),
2592 F_MM( 75000000, gpll0, 8, 0, 0),
2593 F_MM(100000000, gpll0, 6, 0, 0),
Vikram Mulukutlad16a8f12012-07-20 13:33:45 -07002594 F_MM(150000000, gpll0, 4, 0, 0),
2595 F_MM(282000000, mmpll1, 3, 0, 0),
Vikram Mulukutlad16a8f12012-07-20 13:33:45 -07002596 F_MM(400000000, mmpll0, 2, 0, 0),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002597 F_END
2598};
2599
Vikram Mulukutla293c4692013-01-03 15:09:47 -08002600static struct clk_freq_tbl ftbl_mmss_axi_v2_clk[] = {
2601 F_MM( 19200000, cxo, 1, 0, 0),
2602 F_MM( 37500000, gpll0, 16, 0, 0),
2603 F_MM( 50000000, gpll0, 12, 0, 0),
2604 F_MM( 75000000, gpll0, 8, 0, 0),
2605 F_MM(100000000, gpll0, 6, 0, 0),
2606 F_MM(150000000, gpll0, 4, 0, 0),
Vikram Mulukutla66cabd32013-02-22 11:05:13 -08002607 F_MM(291750000, mmpll1, 4, 0, 0),
Vikram Mulukutla293c4692013-01-03 15:09:47 -08002608 F_MM(400000000, mmpll0, 2, 0, 0),
2609 F_MM(466800000, mmpll1, 2.5, 0, 0),
2610 F_END
2611};
2612
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002613static struct rcg_clk axi_clk_src = {
2614 .cmd_rcgr_reg = 0x5040,
2615 .set_rate = set_rate_hid,
2616 .freq_tbl = ftbl_mmss_axi_clk,
2617 .current_freq = &rcg_dummy_freq,
2618 .base = &virt_bases[MMSS_BASE],
2619 .c = {
2620 .dbg_name = "axi_clk_src",
2621 .ops = &clk_ops_rcg,
Vikram Mulukutlad16a8f12012-07-20 13:33:45 -07002622 VDD_DIG_FMAX_MAP3(LOW, 150000000, NOMINAL, 282000000,
Vikram Mulukutla9f588e82012-08-31 20:46:30 -07002623 HIGH, 400000000),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002624 CLK_INIT(axi_clk_src.c),
2625 },
2626};
2627
Vikram Mulukutlad08a1522012-05-24 15:24:01 -07002628static struct clk_freq_tbl ftbl_ocmemnoc_clk[] = {
2629 F_MM( 19200000, cxo, 1, 0, 0),
Vikram Mulukutla694fafd2012-09-20 19:24:22 -07002630 F_MM( 37500000, gpll0, 16, 0, 0),
2631 F_MM( 50000000, gpll0, 12, 0, 0),
2632 F_MM( 75000000, gpll0, 8, 0, 0),
2633 F_MM(100000000, gpll0, 6, 0, 0),
Vikram Mulukutlad08a1522012-05-24 15:24:01 -07002634 F_MM(150000000, gpll0, 4, 0, 0),
Vikram Mulukutlad16a8f12012-07-20 13:33:45 -07002635 F_MM(282000000, mmpll1, 3, 0, 0),
Vikram Mulukutlad08a1522012-05-24 15:24:01 -07002636 F_MM(400000000, mmpll0, 2, 0, 0),
2637 F_END
2638};
2639
Vikram Mulukutla293c4692013-01-03 15:09:47 -08002640static struct clk_freq_tbl ftbl_ocmemnoc_v2_clk[] = {
2641 F_MM( 19200000, cxo, 1, 0, 0),
2642 F_MM( 37500000, gpll0, 16, 0, 0),
2643 F_MM( 50000000, gpll0, 12, 0, 0),
2644 F_MM( 75000000, gpll0, 8, 0, 0),
2645 F_MM(100000000, gpll0, 6, 0, 0),
2646 F_MM(150000000, gpll0, 4, 0, 0),
Vikram Mulukutla66cabd32013-02-22 11:05:13 -08002647 F_MM(291750000, mmpll1, 4, 0, 0),
Vikram Mulukutla293c4692013-01-03 15:09:47 -08002648 F_MM(400000000, mmpll0, 2, 0, 0),
2649 F_END
2650};
2651
Vikram Mulukutlad08a1522012-05-24 15:24:01 -07002652struct rcg_clk ocmemnoc_clk_src = {
2653 .cmd_rcgr_reg = OCMEMNOC_CMD_RCGR,
2654 .set_rate = set_rate_hid,
2655 .freq_tbl = ftbl_ocmemnoc_clk,
2656 .current_freq = &rcg_dummy_freq,
2657 .base = &virt_bases[MMSS_BASE],
2658 .c = {
2659 .dbg_name = "ocmemnoc_clk_src",
2660 .ops = &clk_ops_rcg,
Vikram Mulukutlad16a8f12012-07-20 13:33:45 -07002661 VDD_DIG_FMAX_MAP3(LOW, 150000000, NOMINAL, 282000000,
Vikram Mulukutlad08a1522012-05-24 15:24:01 -07002662 HIGH, 400000000),
2663 CLK_INIT(ocmemnoc_clk_src.c),
2664 },
2665};
2666
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002667static struct clk_freq_tbl ftbl_camss_csi0_3_clk[] = {
2668 F_MM(100000000, gpll0, 6, 0, 0),
2669 F_MM(200000000, mmpll0, 4, 0, 0),
2670 F_END
2671};
2672
2673static struct rcg_clk csi0_clk_src = {
2674 .cmd_rcgr_reg = CSI0_CMD_RCGR,
2675 .set_rate = set_rate_hid,
2676 .freq_tbl = ftbl_camss_csi0_3_clk,
2677 .current_freq = &rcg_dummy_freq,
2678 .base = &virt_bases[MMSS_BASE],
2679 .c = {
2680 .dbg_name = "csi0_clk_src",
2681 .ops = &clk_ops_rcg,
2682 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
2683 CLK_INIT(csi0_clk_src.c),
2684 },
2685};
2686
2687static struct rcg_clk csi1_clk_src = {
2688 .cmd_rcgr_reg = CSI1_CMD_RCGR,
2689 .set_rate = set_rate_hid,
2690 .freq_tbl = ftbl_camss_csi0_3_clk,
2691 .current_freq = &rcg_dummy_freq,
2692 .base = &virt_bases[MMSS_BASE],
2693 .c = {
2694 .dbg_name = "csi1_clk_src",
2695 .ops = &clk_ops_rcg,
2696 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
2697 CLK_INIT(csi1_clk_src.c),
2698 },
2699};
2700
2701static struct rcg_clk csi2_clk_src = {
2702 .cmd_rcgr_reg = CSI2_CMD_RCGR,
2703 .set_rate = set_rate_hid,
2704 .freq_tbl = ftbl_camss_csi0_3_clk,
2705 .current_freq = &rcg_dummy_freq,
2706 .base = &virt_bases[MMSS_BASE],
2707 .c = {
2708 .dbg_name = "csi2_clk_src",
2709 .ops = &clk_ops_rcg,
2710 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
2711 CLK_INIT(csi2_clk_src.c),
2712 },
2713};
2714
2715static struct rcg_clk csi3_clk_src = {
2716 .cmd_rcgr_reg = CSI3_CMD_RCGR,
2717 .set_rate = set_rate_hid,
2718 .freq_tbl = ftbl_camss_csi0_3_clk,
2719 .current_freq = &rcg_dummy_freq,
2720 .base = &virt_bases[MMSS_BASE],
2721 .c = {
2722 .dbg_name = "csi3_clk_src",
2723 .ops = &clk_ops_rcg,
2724 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
2725 CLK_INIT(csi3_clk_src.c),
2726 },
2727};
2728
2729static struct clk_freq_tbl ftbl_camss_vfe_vfe0_1_clk[] = {
2730 F_MM( 37500000, gpll0, 16, 0, 0),
2731 F_MM( 50000000, gpll0, 12, 0, 0),
2732 F_MM( 60000000, gpll0, 10, 0, 0),
2733 F_MM( 80000000, gpll0, 7.5, 0, 0),
2734 F_MM(100000000, gpll0, 6, 0, 0),
2735 F_MM(109090000, gpll0, 5.5, 0, 0),
2736 F_MM(150000000, gpll0, 4, 0, 0),
2737 F_MM(200000000, gpll0, 3, 0, 0),
2738 F_MM(228570000, mmpll0, 3.5, 0, 0),
2739 F_MM(266670000, mmpll0, 3, 0, 0),
2740 F_MM(320000000, mmpll0, 2.5, 0, 0),
Junjie Wu5e905ea2013-06-07 15:47:20 -07002741 F_MM(465000000, mmpll3, 2, 0, 0),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002742 F_END
2743};
2744
2745static struct rcg_clk vfe0_clk_src = {
2746 .cmd_rcgr_reg = VFE0_CMD_RCGR,
2747 .set_rate = set_rate_hid,
2748 .freq_tbl = ftbl_camss_vfe_vfe0_1_clk,
2749 .current_freq = &rcg_dummy_freq,
2750 .base = &virt_bases[MMSS_BASE],
2751 .c = {
2752 .dbg_name = "vfe0_clk_src",
2753 .ops = &clk_ops_rcg,
2754 VDD_DIG_FMAX_MAP3(LOW, 133330000, NOMINAL, 266670000,
2755 HIGH, 320000000),
2756 CLK_INIT(vfe0_clk_src.c),
2757 },
2758};
2759
2760static struct rcg_clk vfe1_clk_src = {
2761 .cmd_rcgr_reg = VFE1_CMD_RCGR,
2762 .set_rate = set_rate_hid,
2763 .freq_tbl = ftbl_camss_vfe_vfe0_1_clk,
2764 .current_freq = &rcg_dummy_freq,
2765 .base = &virt_bases[MMSS_BASE],
2766 .c = {
2767 .dbg_name = "vfe1_clk_src",
2768 .ops = &clk_ops_rcg,
2769 VDD_DIG_FMAX_MAP3(LOW, 133330000, NOMINAL, 266670000,
2770 HIGH, 320000000),
2771 CLK_INIT(vfe1_clk_src.c),
2772 },
2773};
2774
2775static struct clk_freq_tbl ftbl_mdss_mdp_clk[] = {
2776 F_MM( 37500000, gpll0, 16, 0, 0),
2777 F_MM( 60000000, gpll0, 10, 0, 0),
2778 F_MM( 75000000, gpll0, 8, 0, 0),
2779 F_MM( 85710000, gpll0, 7, 0, 0),
2780 F_MM(100000000, gpll0, 6, 0, 0),
2781 F_MM(133330000, mmpll0, 6, 0, 0),
2782 F_MM(160000000, mmpll0, 5, 0, 0),
2783 F_MM(200000000, mmpll0, 4, 0, 0),
Vikram Mulukutla0c6143b2012-12-11 12:16:32 -08002784 F_MM(240000000, gpll0, 2.5, 0, 0),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002785 F_MM(266670000, mmpll0, 3, 0, 0),
2786 F_MM(320000000, mmpll0, 2.5, 0, 0),
2787 F_END
2788};
2789
2790static struct rcg_clk mdp_clk_src = {
2791 .cmd_rcgr_reg = MDP_CMD_RCGR,
2792 .set_rate = set_rate_hid,
2793 .freq_tbl = ftbl_mdss_mdp_clk,
2794 .current_freq = &rcg_dummy_freq,
2795 .base = &virt_bases[MMSS_BASE],
2796 .c = {
2797 .dbg_name = "mdp_clk_src",
2798 .ops = &clk_ops_rcg,
2799 VDD_DIG_FMAX_MAP3(LOW, 133330000, NOMINAL, 266670000,
2800 HIGH, 320000000),
2801 CLK_INIT(mdp_clk_src.c),
2802 },
2803};
2804
2805static struct clk_freq_tbl ftbl_camss_cci_cci_clk[] = {
2806 F_MM(19200000, cxo, 1, 0, 0),
2807 F_END
2808};
2809
2810static struct rcg_clk cci_clk_src = {
2811 .cmd_rcgr_reg = CCI_CMD_RCGR,
2812 .set_rate = set_rate_hid,
2813 .freq_tbl = ftbl_camss_cci_cci_clk,
2814 .current_freq = &rcg_dummy_freq,
2815 .base = &virt_bases[MMSS_BASE],
2816 .c = {
2817 .dbg_name = "cci_clk_src",
2818 .ops = &clk_ops_rcg,
2819 VDD_DIG_FMAX_MAP2(LOW, 20000000, NOMINAL, 40000000),
2820 CLK_INIT(cci_clk_src.c),
2821 },
2822};
2823
2824static struct clk_freq_tbl ftbl_camss_gp0_1_clk[] = {
2825 F_MM( 10000, cxo, 16, 1, 120),
2826 F_MM( 20000, cxo, 16, 1, 50),
2827 F_MM( 6000000, gpll0, 10, 1, 10),
2828 F_MM(12000000, gpll0, 10, 1, 5),
2829 F_MM(13000000, gpll0, 10, 13, 60),
2830 F_MM(24000000, gpll0, 5, 1, 5),
2831 F_END
2832};
2833
2834static struct rcg_clk mmss_gp0_clk_src = {
2835 .cmd_rcgr_reg = MMSS_GP0_CMD_RCGR,
2836 .set_rate = set_rate_mnd,
2837 .freq_tbl = ftbl_camss_gp0_1_clk,
2838 .current_freq = &rcg_dummy_freq,
2839 .base = &virt_bases[MMSS_BASE],
2840 .c = {
2841 .dbg_name = "mmss_gp0_clk_src",
2842 .ops = &clk_ops_rcg_mnd,
2843 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
2844 CLK_INIT(mmss_gp0_clk_src.c),
2845 },
2846};
2847
2848static struct rcg_clk mmss_gp1_clk_src = {
2849 .cmd_rcgr_reg = MMSS_GP1_CMD_RCGR,
2850 .set_rate = set_rate_mnd,
2851 .freq_tbl = ftbl_camss_gp0_1_clk,
2852 .current_freq = &rcg_dummy_freq,
2853 .base = &virt_bases[MMSS_BASE],
2854 .c = {
2855 .dbg_name = "mmss_gp1_clk_src",
2856 .ops = &clk_ops_rcg_mnd,
2857 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
2858 CLK_INIT(mmss_gp1_clk_src.c),
2859 },
2860};
2861
2862static struct clk_freq_tbl ftbl_camss_jpeg_jpeg0_2_clk[] = {
2863 F_MM( 75000000, gpll0, 8, 0, 0),
2864 F_MM(150000000, gpll0, 4, 0, 0),
2865 F_MM(200000000, gpll0, 3, 0, 0),
2866 F_MM(228570000, mmpll0, 3.5, 0, 0),
2867 F_MM(266670000, mmpll0, 3, 0, 0),
2868 F_MM(320000000, mmpll0, 2.5, 0, 0),
2869 F_END
2870};
2871
2872static struct rcg_clk jpeg0_clk_src = {
2873 .cmd_rcgr_reg = JPEG0_CMD_RCGR,
2874 .set_rate = set_rate_hid,
2875 .freq_tbl = ftbl_camss_jpeg_jpeg0_2_clk,
2876 .current_freq = &rcg_dummy_freq,
2877 .base = &virt_bases[MMSS_BASE],
2878 .c = {
2879 .dbg_name = "jpeg0_clk_src",
2880 .ops = &clk_ops_rcg,
2881 VDD_DIG_FMAX_MAP3(LOW, 133330000, NOMINAL, 266670000,
2882 HIGH, 320000000),
2883 CLK_INIT(jpeg0_clk_src.c),
2884 },
2885};
2886
2887static struct rcg_clk jpeg1_clk_src = {
2888 .cmd_rcgr_reg = JPEG1_CMD_RCGR,
2889 .set_rate = set_rate_hid,
2890 .freq_tbl = ftbl_camss_jpeg_jpeg0_2_clk,
2891 .current_freq = &rcg_dummy_freq,
2892 .base = &virt_bases[MMSS_BASE],
2893 .c = {
2894 .dbg_name = "jpeg1_clk_src",
2895 .ops = &clk_ops_rcg,
2896 VDD_DIG_FMAX_MAP3(LOW, 133330000, NOMINAL, 266670000,
2897 HIGH, 320000000),
2898 CLK_INIT(jpeg1_clk_src.c),
2899 },
2900};
2901
2902static struct rcg_clk jpeg2_clk_src = {
2903 .cmd_rcgr_reg = JPEG2_CMD_RCGR,
2904 .set_rate = set_rate_hid,
2905 .freq_tbl = ftbl_camss_jpeg_jpeg0_2_clk,
2906 .current_freq = &rcg_dummy_freq,
2907 .base = &virt_bases[MMSS_BASE],
2908 .c = {
2909 .dbg_name = "jpeg2_clk_src",
2910 .ops = &clk_ops_rcg,
2911 VDD_DIG_FMAX_MAP3(LOW, 133330000, NOMINAL, 266670000,
2912 HIGH, 320000000),
2913 CLK_INIT(jpeg2_clk_src.c),
2914 },
2915};
2916
2917static struct clk_freq_tbl ftbl_camss_mclk0_3_clk[] = {
Vikram Mulukutla7dc75022012-08-23 16:50:56 -07002918 F_MM(19200000, cxo, 1, 0, 0),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002919 F_MM(66670000, gpll0, 9, 0, 0),
2920 F_END
2921};
2922
Junjie Wu5e905ea2013-06-07 15:47:20 -07002923static struct clk_freq_tbl ftbl_camss_mclk0_3_v3_clk[] = {
2924 F_MM( 4800000, cxo, 4, 0, 0),
2925 F_MM( 6000000, gpll0, 10, 1, 10),
2926 F_MM( 8000000, gpll0, 15, 1, 5),
2927 F_MM( 9600000, cxo, 2, 0, 0),
2928 F_MM(16000000, gpll0, 10, 1, 5),
2929 F_MM(19200000, cxo, 1, 0, 0),
2930 F_MM(24000000, gpll0, 5, 1, 5),
2931 F_MM(32000000, mmpll0, 5, 1, 5),
2932 F_MM(48000000, gpll0, 12.5, 0, 0),
2933 F_MM(64000000, mmpll0, 12.5, 0, 0),
2934 F_MM(66670000, gpll0, 9, 0, 0),
2935 F_END
2936};
2937
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002938static struct rcg_clk mclk0_clk_src = {
2939 .cmd_rcgr_reg = MCLK0_CMD_RCGR,
2940 .set_rate = set_rate_hid,
2941 .freq_tbl = ftbl_camss_mclk0_3_clk,
2942 .current_freq = &rcg_dummy_freq,
2943 .base = &virt_bases[MMSS_BASE],
2944 .c = {
2945 .dbg_name = "mclk0_clk_src",
2946 .ops = &clk_ops_rcg,
2947 VDD_DIG_FMAX_MAP1(LOW, 66670000),
2948 CLK_INIT(mclk0_clk_src.c),
2949 },
2950};
2951
2952static struct rcg_clk mclk1_clk_src = {
2953 .cmd_rcgr_reg = MCLK1_CMD_RCGR,
2954 .set_rate = set_rate_hid,
2955 .freq_tbl = ftbl_camss_mclk0_3_clk,
2956 .current_freq = &rcg_dummy_freq,
2957 .base = &virt_bases[MMSS_BASE],
2958 .c = {
2959 .dbg_name = "mclk1_clk_src",
2960 .ops = &clk_ops_rcg,
2961 VDD_DIG_FMAX_MAP1(LOW, 66670000),
2962 CLK_INIT(mclk1_clk_src.c),
2963 },
2964};
2965
2966static struct rcg_clk mclk2_clk_src = {
2967 .cmd_rcgr_reg = MCLK2_CMD_RCGR,
2968 .set_rate = set_rate_hid,
2969 .freq_tbl = ftbl_camss_mclk0_3_clk,
2970 .current_freq = &rcg_dummy_freq,
2971 .base = &virt_bases[MMSS_BASE],
2972 .c = {
2973 .dbg_name = "mclk2_clk_src",
2974 .ops = &clk_ops_rcg,
2975 VDD_DIG_FMAX_MAP1(LOW, 66670000),
2976 CLK_INIT(mclk2_clk_src.c),
2977 },
2978};
2979
2980static struct rcg_clk mclk3_clk_src = {
2981 .cmd_rcgr_reg = MCLK3_CMD_RCGR,
2982 .set_rate = set_rate_hid,
2983 .freq_tbl = ftbl_camss_mclk0_3_clk,
2984 .current_freq = &rcg_dummy_freq,
2985 .base = &virt_bases[MMSS_BASE],
2986 .c = {
2987 .dbg_name = "mclk3_clk_src",
2988 .ops = &clk_ops_rcg,
2989 VDD_DIG_FMAX_MAP1(LOW, 66670000),
2990 CLK_INIT(mclk3_clk_src.c),
2991 },
2992};
2993
2994static struct clk_freq_tbl ftbl_camss_phy0_2_csi0_2phytimer_clk[] = {
2995 F_MM(100000000, gpll0, 6, 0, 0),
2996 F_MM(200000000, mmpll0, 4, 0, 0),
2997 F_END
2998};
2999
3000static struct rcg_clk csi0phytimer_clk_src = {
3001 .cmd_rcgr_reg = CSI0PHYTIMER_CMD_RCGR,
3002 .set_rate = set_rate_hid,
3003 .freq_tbl = ftbl_camss_phy0_2_csi0_2phytimer_clk,
3004 .current_freq = &rcg_dummy_freq,
3005 .base = &virt_bases[MMSS_BASE],
3006 .c = {
3007 .dbg_name = "csi0phytimer_clk_src",
3008 .ops = &clk_ops_rcg,
3009 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
3010 CLK_INIT(csi0phytimer_clk_src.c),
3011 },
3012};
3013
3014static struct rcg_clk csi1phytimer_clk_src = {
3015 .cmd_rcgr_reg = CSI1PHYTIMER_CMD_RCGR,
3016 .set_rate = set_rate_hid,
3017 .freq_tbl = ftbl_camss_phy0_2_csi0_2phytimer_clk,
3018 .current_freq = &rcg_dummy_freq,
3019 .base = &virt_bases[MMSS_BASE],
3020 .c = {
3021 .dbg_name = "csi1phytimer_clk_src",
3022 .ops = &clk_ops_rcg,
3023 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
3024 CLK_INIT(csi1phytimer_clk_src.c),
3025 },
3026};
3027
3028static struct rcg_clk csi2phytimer_clk_src = {
3029 .cmd_rcgr_reg = CSI2PHYTIMER_CMD_RCGR,
3030 .set_rate = set_rate_hid,
3031 .freq_tbl = ftbl_camss_phy0_2_csi0_2phytimer_clk,
3032 .current_freq = &rcg_dummy_freq,
3033 .base = &virt_bases[MMSS_BASE],
3034 .c = {
3035 .dbg_name = "csi2phytimer_clk_src",
3036 .ops = &clk_ops_rcg,
3037 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
3038 CLK_INIT(csi2phytimer_clk_src.c),
3039 },
3040};
3041
3042static struct clk_freq_tbl ftbl_camss_vfe_cpp_clk[] = {
3043 F_MM(150000000, gpll0, 4, 0, 0),
3044 F_MM(266670000, mmpll0, 3, 0, 0),
3045 F_MM(320000000, mmpll0, 2.5, 0, 0),
Junjie Wu5e905ea2013-06-07 15:47:20 -07003046 F_MM(465000000, mmpll3, 2, 0, 0),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003047 F_END
3048};
3049
3050static struct rcg_clk cpp_clk_src = {
3051 .cmd_rcgr_reg = CPP_CMD_RCGR,
3052 .set_rate = set_rate_hid,
3053 .freq_tbl = ftbl_camss_vfe_cpp_clk,
3054 .current_freq = &rcg_dummy_freq,
3055 .base = &virt_bases[MMSS_BASE],
3056 .c = {
3057 .dbg_name = "cpp_clk_src",
3058 .ops = &clk_ops_rcg,
3059 VDD_DIG_FMAX_MAP3(LOW, 133330000, NOMINAL, 266670000,
3060 HIGH, 320000000),
3061 CLK_INIT(cpp_clk_src.c),
3062 },
3063};
3064
Vikram Mulukutlaae13f3c2013-03-20 18:03:29 -07003065static struct clk_freq_tbl byte_freq_tbl[] = {
3066 {
Vikram Mulukutla81e17e52013-05-02 20:31:51 -07003067 .src_clk = &byte_clk_src_8974.c,
Vikram Mulukutlaae13f3c2013-03-20 18:03:29 -07003068 .div_src_val = BVAL(10, 8, dsipll0_byte_mm_source_val),
3069 },
3070 F_END
Vikram Mulukutlafe0f5a52012-08-16 16:51:08 -07003071};
Vikram Mulukutlafe0f5a52012-08-16 16:51:08 -07003072
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003073static struct rcg_clk byte0_clk_src = {
3074 .cmd_rcgr_reg = BYTE0_CMD_RCGR,
Vikram Mulukutlaae13f3c2013-03-20 18:03:29 -07003075 .current_freq = byte_freq_tbl,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003076 .base = &virt_bases[MMSS_BASE],
3077 .c = {
Vikram Mulukutla81e17e52013-05-02 20:31:51 -07003078 .parent = &byte_clk_src_8974.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003079 .dbg_name = "byte0_clk_src",
Vikram Mulukutlafe0f5a52012-08-16 16:51:08 -07003080 .ops = &clk_ops_byte,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003081 VDD_DIG_FMAX_MAP3(LOW, 93800000, NOMINAL, 187500000,
3082 HIGH, 188000000),
3083 CLK_INIT(byte0_clk_src.c),
3084 },
3085};
3086
3087static struct rcg_clk byte1_clk_src = {
3088 .cmd_rcgr_reg = BYTE1_CMD_RCGR,
Vikram Mulukutlaae13f3c2013-03-20 18:03:29 -07003089 .current_freq = byte_freq_tbl,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003090 .base = &virt_bases[MMSS_BASE],
3091 .c = {
Vikram Mulukutla81e17e52013-05-02 20:31:51 -07003092 .parent = &byte_clk_src_8974.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003093 .dbg_name = "byte1_clk_src",
Vikram Mulukutlafe0f5a52012-08-16 16:51:08 -07003094 .ops = &clk_ops_byte,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003095 VDD_DIG_FMAX_MAP3(LOW, 93800000, NOMINAL, 187500000,
3096 HIGH, 188000000),
3097 CLK_INIT(byte1_clk_src.c),
3098 },
3099};
3100
3101static struct clk_freq_tbl ftbl_mdss_edpaux_clk[] = {
3102 F_MM(19200000, cxo, 1, 0, 0),
3103 F_END
3104};
3105
3106static struct rcg_clk edpaux_clk_src = {
3107 .cmd_rcgr_reg = EDPAUX_CMD_RCGR,
3108 .set_rate = set_rate_hid,
3109 .freq_tbl = ftbl_mdss_edpaux_clk,
3110 .current_freq = &rcg_dummy_freq,
3111 .base = &virt_bases[MMSS_BASE],
3112 .c = {
3113 .dbg_name = "edpaux_clk_src",
3114 .ops = &clk_ops_rcg,
3115 VDD_DIG_FMAX_MAP2(LOW, 20000000, NOMINAL, 40000000),
3116 CLK_INIT(edpaux_clk_src.c),
3117 },
3118};
3119
3120static struct clk_freq_tbl ftbl_mdss_edplink_clk[] = {
Asaf Penso6b5251b2012-10-11 12:27:03 -07003121 F_MDSS(162000000, edppll_270, 2, 0, 0),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003122 F_MDSS(270000000, edppll_270, 11, 0, 0),
3123 F_END
3124};
3125
3126static struct rcg_clk edplink_clk_src = {
3127 .cmd_rcgr_reg = EDPLINK_CMD_RCGR,
3128 .set_rate = set_rate_hid,
3129 .freq_tbl = ftbl_mdss_edplink_clk,
3130 .current_freq = &rcg_dummy_freq,
3131 .base = &virt_bases[MMSS_BASE],
3132 .c = {
3133 .dbg_name = "edplink_clk_src",
3134 .ops = &clk_ops_rcg,
3135 VDD_DIG_FMAX_MAP2(LOW, 135000000, NOMINAL, 270000000),
3136 CLK_INIT(edplink_clk_src.c),
3137 },
3138};
3139
3140static struct clk_freq_tbl ftbl_mdss_edppixel_clk[] = {
Asaf Penso56084db2012-11-15 20:14:54 +02003141 F_MDSS(138500000, edppll_350, 2, 0, 0),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003142 F_MDSS(350000000, edppll_350, 11, 0, 0),
3143 F_END
3144};
3145
3146static struct rcg_clk edppixel_clk_src = {
3147 .cmd_rcgr_reg = EDPPIXEL_CMD_RCGR,
3148 .set_rate = set_rate_mnd,
3149 .freq_tbl = ftbl_mdss_edppixel_clk,
3150 .current_freq = &rcg_dummy_freq,
3151 .base = &virt_bases[MMSS_BASE],
3152 .c = {
3153 .dbg_name = "edppixel_clk_src",
3154 .ops = &clk_ops_rcg_mnd,
3155 VDD_DIG_FMAX_MAP2(LOW, 175000000, NOMINAL, 350000000),
3156 CLK_INIT(edppixel_clk_src.c),
3157 },
3158};
3159
3160static struct clk_freq_tbl ftbl_mdss_esc0_1_clk[] = {
3161 F_MM(19200000, cxo, 1, 0, 0),
3162 F_END
3163};
3164
3165static struct rcg_clk esc0_clk_src = {
3166 .cmd_rcgr_reg = ESC0_CMD_RCGR,
3167 .set_rate = set_rate_hid,
3168 .freq_tbl = ftbl_mdss_esc0_1_clk,
3169 .current_freq = &rcg_dummy_freq,
3170 .base = &virt_bases[MMSS_BASE],
3171 .c = {
3172 .dbg_name = "esc0_clk_src",
3173 .ops = &clk_ops_rcg,
3174 VDD_DIG_FMAX_MAP2(LOW, 20000000, NOMINAL, 40000000),
3175 CLK_INIT(esc0_clk_src.c),
3176 },
3177};
3178
3179static struct rcg_clk esc1_clk_src = {
3180 .cmd_rcgr_reg = ESC1_CMD_RCGR,
3181 .set_rate = set_rate_hid,
3182 .freq_tbl = ftbl_mdss_esc0_1_clk,
3183 .current_freq = &rcg_dummy_freq,
3184 .base = &virt_bases[MMSS_BASE],
3185 .c = {
3186 .dbg_name = "esc1_clk_src",
3187 .ops = &clk_ops_rcg,
3188 VDD_DIG_FMAX_MAP2(LOW, 20000000, NOMINAL, 40000000),
3189 CLK_INIT(esc1_clk_src.c),
3190 },
3191};
3192
Vikram Mulukutla86b76342012-08-15 16:22:09 -07003193static int hdmi_pll_clk_enable(struct clk *c)
3194{
Vikram Mulukutla5acd7932012-11-29 14:20:34 -08003195 return hdmi_pll_enable();
Vikram Mulukutla86b76342012-08-15 16:22:09 -07003196}
3197
3198static void hdmi_pll_clk_disable(struct clk *c)
3199{
Vikram Mulukutla86b76342012-08-15 16:22:09 -07003200 hdmi_pll_disable();
Vikram Mulukutla86b76342012-08-15 16:22:09 -07003201}
3202
3203static int hdmi_pll_clk_set_rate(struct clk *c, unsigned long rate)
3204{
Vikram Mulukutla5acd7932012-11-29 14:20:34 -08003205 return hdmi_pll_set_rate(rate);
Vikram Mulukutla86b76342012-08-15 16:22:09 -07003206}
3207
Vikram Mulukutla86b76342012-08-15 16:22:09 -07003208static struct clk_ops clk_ops_hdmi_pll = {
3209 .enable = hdmi_pll_clk_enable,
3210 .disable = hdmi_pll_clk_disable,
3211 .set_rate = hdmi_pll_clk_set_rate,
Vikram Mulukutla86b76342012-08-15 16:22:09 -07003212};
3213
3214static struct clk hdmipll_clk_src = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003215 .parent = &cxo_clk_src.c,
Vikram Mulukutla86b76342012-08-15 16:22:09 -07003216 .dbg_name = "hdmipll_clk_src",
3217 .ops = &clk_ops_hdmi_pll,
3218 CLK_INIT(hdmipll_clk_src),
Vikram Mulukutla86b76342012-08-15 16:22:09 -07003219};
3220
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003221static struct clk_freq_tbl ftbl_mdss_extpclk_clk[] = {
Vikram Mulukutla86b76342012-08-15 16:22:09 -07003222 /*
3223 * The zero rate is required since suspend/resume wipes out the HDMI PHY
3224 * registers. This entry allows the HDMI driver to switch the cached
3225 * rate to zero before suspend and back to the real rate after resume.
3226 */
3227 F_HDMI( 0, hdmipll, 1, 0, 0),
3228 F_HDMI( 25200000, hdmipll, 1, 0, 0),
Ujwal Patele698fae2012-11-29 14:04:33 -08003229 F_HDMI( 27000000, hdmipll, 1, 0, 0),
Vikram Mulukutla86b76342012-08-15 16:22:09 -07003230 F_HDMI( 27030000, hdmipll, 1, 0, 0),
Manoj Rao6c1d2792013-05-08 11:59:38 -07003231 F_HDMI( 65000000, hdmipll, 1, 0, 0),
Vikram Mulukutla86b76342012-08-15 16:22:09 -07003232 F_HDMI( 74250000, hdmipll, 1, 0, 0),
Manoj Rao6c1d2792013-05-08 11:59:38 -07003233 F_HDMI(108000000, hdmipll, 1, 0, 0),
Vikram Mulukutla86b76342012-08-15 16:22:09 -07003234 F_HDMI(148500000, hdmipll, 1, 0, 0),
Ujwal Patele698fae2012-11-29 14:04:33 -08003235 F_HDMI(268500000, hdmipll, 1, 0, 0),
Vikram Mulukutla86b76342012-08-15 16:22:09 -07003236 F_HDMI(297000000, hdmipll, 1, 0, 0),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003237 F_END
3238};
3239
3240static struct rcg_clk extpclk_clk_src = {
3241 .cmd_rcgr_reg = EXTPCLK_CMD_RCGR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003242 .freq_tbl = ftbl_mdss_extpclk_clk,
3243 .current_freq = &rcg_dummy_freq,
3244 .base = &virt_bases[MMSS_BASE],
3245 .c = {
3246 .dbg_name = "extpclk_clk_src",
Vikram Mulukutla5acd7932012-11-29 14:20:34 -08003247 .ops = &clk_ops_rcg_hdmi,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003248 VDD_DIG_FMAX_MAP2(LOW, 148500000, NOMINAL, 297000000),
3249 CLK_INIT(extpclk_clk_src.c),
3250 },
3251};
3252
3253static struct clk_freq_tbl ftbl_mdss_hdmi_clk[] = {
3254 F_MDSS(19200000, cxo, 1, 0, 0),
3255 F_END
3256};
3257
3258static struct rcg_clk hdmi_clk_src = {
3259 .cmd_rcgr_reg = HDMI_CMD_RCGR,
3260 .set_rate = set_rate_hid,
3261 .freq_tbl = ftbl_mdss_hdmi_clk,
3262 .current_freq = &rcg_dummy_freq,
3263 .base = &virt_bases[MMSS_BASE],
3264 .c = {
3265 .dbg_name = "hdmi_clk_src",
3266 .ops = &clk_ops_rcg,
3267 VDD_DIG_FMAX_MAP2(LOW, 20000000, NOMINAL, 40000000),
3268 CLK_INIT(hdmi_clk_src.c),
3269 },
3270};
3271
Vikram Mulukutla4c93ce72013-05-02 20:16:49 -07003272struct clk_ops clk_ops_pixel_clock;
3273
3274static long round_rate_pixel(struct clk *clk, unsigned long rate)
3275{
3276 int frac_num[] = {3, 2, 4, 1};
3277 int frac_den[] = {8, 9, 9, 1};
3278 int delta = 100000;
3279 int i;
3280
3281 for (i = 0; i < ARRAY_SIZE(frac_num); i++) {
3282 unsigned long request = (rate * frac_den[i]) / frac_num[i];
3283 unsigned long src_rate;
3284
3285 src_rate = clk_round_rate(clk->parent, request);
3286 if ((src_rate < (request - delta)) ||
3287 (src_rate > (request + delta)))
3288 continue;
3289
3290 return (src_rate * frac_num[i]) / frac_den[i];
3291 }
3292
3293 return -EINVAL;
3294}
3295
3296
3297static int set_rate_pixel(struct clk *clk, unsigned long rate)
3298{
3299 struct rcg_clk *rcg = to_rcg_clk(clk);
3300 struct clk_freq_tbl *pixel_freq = rcg->current_freq;
3301 int frac_num[] = {3, 2, 4, 1};
3302 int frac_den[] = {8, 9, 9, 1};
3303 int delta = 100000;
3304 int i, rc;
3305
3306 for (i = 0; i < ARRAY_SIZE(frac_num); i++) {
3307 unsigned long request = (rate * frac_den[i]) / frac_num[i];
3308 unsigned long src_rate;
3309
3310 src_rate = clk_round_rate(clk->parent, request);
3311 if ((src_rate < (request - delta)) ||
3312 (src_rate > (request + delta)))
3313 continue;
3314
3315 rc = clk_set_rate(clk->parent, src_rate);
3316 if (rc)
3317 return rc;
3318
3319 pixel_freq->div_src_val &= ~BM(4, 0);
3320 if (frac_den[i] == frac_num[i]) {
3321 pixel_freq->m_val = 0;
3322 pixel_freq->n_val = 0;
3323 } else {
3324 pixel_freq->m_val = frac_num[i];
3325 pixel_freq->n_val = ~(frac_den[i] - frac_num[i]);
3326 pixel_freq->d_val = ~frac_den[i];
3327 }
3328 set_rate_mnd(rcg, pixel_freq);
3329 return 0;
3330 }
3331 return -EINVAL;
3332}
3333
Vikram Mulukutlaae13f3c2013-03-20 18:03:29 -07003334static struct clk_freq_tbl pixel_freq_tbl[] = {
3335 {
Vikram Mulukutla81e17e52013-05-02 20:31:51 -07003336 .src_clk = &pixel_clk_src_8974.c,
Vikram Mulukutla4c93ce72013-05-02 20:16:49 -07003337 .div_src_val = BVAL(10, 8, dsipll0_pixel_mm_source_val)
3338 | BVAL(4, 0, 0),
Vikram Mulukutlaae13f3c2013-03-20 18:03:29 -07003339 },
3340 F_END
Patrick Dalyadeeb472013-03-06 21:22:32 -08003341};
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003342
3343static struct rcg_clk pclk0_clk_src = {
3344 .cmd_rcgr_reg = PCLK0_CMD_RCGR,
Vikram Mulukutlaae13f3c2013-03-20 18:03:29 -07003345 .current_freq = pixel_freq_tbl,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003346 .base = &virt_bases[MMSS_BASE],
3347 .c = {
Vikram Mulukutla81e17e52013-05-02 20:31:51 -07003348 .parent = &pixel_clk_src_8974.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003349 .dbg_name = "pclk0_clk_src",
Vikram Mulukutla81e17e52013-05-02 20:31:51 -07003350 .ops = &clk_ops_pixel_clock,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003351 VDD_DIG_FMAX_MAP2(LOW, 125000000, NOMINAL, 250000000),
3352 CLK_INIT(pclk0_clk_src.c),
3353 },
3354};
3355
3356static struct rcg_clk pclk1_clk_src = {
3357 .cmd_rcgr_reg = PCLK1_CMD_RCGR,
Vikram Mulukutlaae13f3c2013-03-20 18:03:29 -07003358 .current_freq = pixel_freq_tbl,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003359 .base = &virt_bases[MMSS_BASE],
3360 .c = {
Vikram Mulukutla81e17e52013-05-02 20:31:51 -07003361 .parent = &pixel_clk_src_8974.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003362 .dbg_name = "pclk1_clk_src",
Vikram Mulukutla81e17e52013-05-02 20:31:51 -07003363 .ops = &clk_ops_pixel_clock,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003364 VDD_DIG_FMAX_MAP2(LOW, 125000000, NOMINAL, 250000000),
3365 CLK_INIT(pclk1_clk_src.c),
3366 },
3367};
3368
3369static struct clk_freq_tbl ftbl_mdss_vsync_clk[] = {
3370 F_MDSS(19200000, cxo, 1, 0, 0),
3371 F_END
3372};
3373
3374static struct rcg_clk vsync_clk_src = {
3375 .cmd_rcgr_reg = VSYNC_CMD_RCGR,
3376 .set_rate = set_rate_hid,
3377 .freq_tbl = ftbl_mdss_vsync_clk,
3378 .current_freq = &rcg_dummy_freq,
3379 .base = &virt_bases[MMSS_BASE],
3380 .c = {
3381 .dbg_name = "vsync_clk_src",
3382 .ops = &clk_ops_rcg,
3383 VDD_DIG_FMAX_MAP2(LOW, 20000000, NOMINAL, 40000000),
3384 CLK_INIT(vsync_clk_src.c),
3385 },
3386};
3387
3388static struct clk_freq_tbl ftbl_venus0_vcodec0_clk[] = {
3389 F_MM( 50000000, gpll0, 12, 0, 0),
3390 F_MM(100000000, gpll0, 6, 0, 0),
3391 F_MM(133330000, mmpll0, 6, 0, 0),
3392 F_MM(200000000, mmpll0, 4, 0, 0),
3393 F_MM(266670000, mmpll0, 3, 0, 0),
3394 F_MM(410000000, mmpll3, 2, 0, 0),
3395 F_END
3396};
3397
Vikram Mulukutla293c4692013-01-03 15:09:47 -08003398static struct clk_freq_tbl ftbl_venus0_vcodec0_v2_clk[] = {
3399 F_MM( 50000000, gpll0, 12, 0, 0),
3400 F_MM(100000000, gpll0, 6, 0, 0),
3401 F_MM(133330000, mmpll0, 6, 0, 0),
3402 F_MM(200000000, mmpll0, 4, 0, 0),
3403 F_MM(266670000, mmpll0, 3, 0, 0),
3404 F_MM(465000000, mmpll3, 2, 0, 0),
3405 F_END
3406};
3407
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003408static struct rcg_clk vcodec0_clk_src = {
3409 .cmd_rcgr_reg = VCODEC0_CMD_RCGR,
3410 .set_rate = set_rate_mnd,
3411 .freq_tbl = ftbl_venus0_vcodec0_clk,
3412 .current_freq = &rcg_dummy_freq,
3413 .base = &virt_bases[MMSS_BASE],
3414 .c = {
3415 .dbg_name = "vcodec0_clk_src",
3416 .ops = &clk_ops_rcg_mnd,
3417 VDD_DIG_FMAX_MAP3(LOW, 133330000, NOMINAL, 266670000,
3418 HIGH, 410000000),
3419 CLK_INIT(vcodec0_clk_src.c),
3420 },
3421};
3422
3423static struct branch_clk camss_cci_cci_ahb_clk = {
3424 .cbcr_reg = CAMSS_CCI_CCI_AHB_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003425 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003426 .base = &virt_bases[MMSS_BASE],
3427 .c = {
3428 .dbg_name = "camss_cci_cci_ahb_clk",
3429 .ops = &clk_ops_branch,
3430 CLK_INIT(camss_cci_cci_ahb_clk.c),
3431 },
3432};
3433
3434static struct branch_clk camss_cci_cci_clk = {
3435 .cbcr_reg = CAMSS_CCI_CCI_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003436 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003437 .base = &virt_bases[MMSS_BASE],
3438 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003439 .parent = &cci_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003440 .dbg_name = "camss_cci_cci_clk",
3441 .ops = &clk_ops_branch,
3442 CLK_INIT(camss_cci_cci_clk.c),
3443 },
3444};
3445
3446static struct branch_clk camss_csi0_ahb_clk = {
3447 .cbcr_reg = CAMSS_CSI0_AHB_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003448 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003449 .base = &virt_bases[MMSS_BASE],
3450 .c = {
3451 .dbg_name = "camss_csi0_ahb_clk",
3452 .ops = &clk_ops_branch,
3453 CLK_INIT(camss_csi0_ahb_clk.c),
3454 },
3455};
3456
3457static struct branch_clk camss_csi0_clk = {
3458 .cbcr_reg = CAMSS_CSI0_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003459 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003460 .base = &virt_bases[MMSS_BASE],
3461 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003462 .parent = &csi0_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003463 .dbg_name = "camss_csi0_clk",
3464 .ops = &clk_ops_branch,
3465 CLK_INIT(camss_csi0_clk.c),
3466 },
3467};
3468
3469static struct branch_clk camss_csi0phy_clk = {
3470 .cbcr_reg = CAMSS_CSI0PHY_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003471 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003472 .base = &virt_bases[MMSS_BASE],
3473 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003474 .parent = &csi0_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003475 .dbg_name = "camss_csi0phy_clk",
3476 .ops = &clk_ops_branch,
3477 CLK_INIT(camss_csi0phy_clk.c),
3478 },
3479};
3480
3481static struct branch_clk camss_csi0pix_clk = {
3482 .cbcr_reg = CAMSS_CSI0PIX_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003483 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003484 .base = &virt_bases[MMSS_BASE],
3485 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003486 .parent = &csi0_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003487 .dbg_name = "camss_csi0pix_clk",
3488 .ops = &clk_ops_branch,
3489 CLK_INIT(camss_csi0pix_clk.c),
3490 },
3491};
3492
3493static struct branch_clk camss_csi0rdi_clk = {
3494 .cbcr_reg = CAMSS_CSI0RDI_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003495 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003496 .base = &virt_bases[MMSS_BASE],
3497 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003498 .parent = &csi0_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003499 .dbg_name = "camss_csi0rdi_clk",
3500 .ops = &clk_ops_branch,
3501 CLK_INIT(camss_csi0rdi_clk.c),
3502 },
3503};
3504
3505static struct branch_clk camss_csi1_ahb_clk = {
3506 .cbcr_reg = CAMSS_CSI1_AHB_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003507 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003508 .base = &virt_bases[MMSS_BASE],
3509 .c = {
3510 .dbg_name = "camss_csi1_ahb_clk",
3511 .ops = &clk_ops_branch,
3512 CLK_INIT(camss_csi1_ahb_clk.c),
3513 },
3514};
3515
3516static struct branch_clk camss_csi1_clk = {
3517 .cbcr_reg = CAMSS_CSI1_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003518 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003519 .base = &virt_bases[MMSS_BASE],
3520 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003521 .parent = &csi1_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003522 .dbg_name = "camss_csi1_clk",
3523 .ops = &clk_ops_branch,
3524 CLK_INIT(camss_csi1_clk.c),
3525 },
3526};
3527
3528static struct branch_clk camss_csi1phy_clk = {
3529 .cbcr_reg = CAMSS_CSI1PHY_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003530 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003531 .base = &virt_bases[MMSS_BASE],
3532 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003533 .parent = &csi1_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003534 .dbg_name = "camss_csi1phy_clk",
3535 .ops = &clk_ops_branch,
3536 CLK_INIT(camss_csi1phy_clk.c),
3537 },
3538};
3539
3540static struct branch_clk camss_csi1pix_clk = {
3541 .cbcr_reg = CAMSS_CSI1PIX_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003542 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003543 .base = &virt_bases[MMSS_BASE],
3544 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003545 .parent = &csi1_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003546 .dbg_name = "camss_csi1pix_clk",
3547 .ops = &clk_ops_branch,
3548 CLK_INIT(camss_csi1pix_clk.c),
3549 },
3550};
3551
3552static struct branch_clk camss_csi1rdi_clk = {
3553 .cbcr_reg = CAMSS_CSI1RDI_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003554 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003555 .base = &virt_bases[MMSS_BASE],
3556 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003557 .parent = &csi1_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003558 .dbg_name = "camss_csi1rdi_clk",
3559 .ops = &clk_ops_branch,
3560 CLK_INIT(camss_csi1rdi_clk.c),
3561 },
3562};
3563
3564static struct branch_clk camss_csi2_ahb_clk = {
3565 .cbcr_reg = CAMSS_CSI2_AHB_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003566 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003567 .base = &virt_bases[MMSS_BASE],
3568 .c = {
3569 .dbg_name = "camss_csi2_ahb_clk",
3570 .ops = &clk_ops_branch,
3571 CLK_INIT(camss_csi2_ahb_clk.c),
3572 },
3573};
3574
3575static struct branch_clk camss_csi2_clk = {
3576 .cbcr_reg = CAMSS_CSI2_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003577 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003578 .base = &virt_bases[MMSS_BASE],
3579 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003580 .parent = &csi2_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003581 .dbg_name = "camss_csi2_clk",
3582 .ops = &clk_ops_branch,
3583 CLK_INIT(camss_csi2_clk.c),
3584 },
3585};
3586
3587static struct branch_clk camss_csi2phy_clk = {
3588 .cbcr_reg = CAMSS_CSI2PHY_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003589 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003590 .base = &virt_bases[MMSS_BASE],
3591 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003592 .parent = &csi2_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003593 .dbg_name = "camss_csi2phy_clk",
3594 .ops = &clk_ops_branch,
3595 CLK_INIT(camss_csi2phy_clk.c),
3596 },
3597};
3598
3599static struct branch_clk camss_csi2pix_clk = {
3600 .cbcr_reg = CAMSS_CSI2PIX_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003601 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003602 .base = &virt_bases[MMSS_BASE],
3603 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003604 .parent = &csi2_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003605 .dbg_name = "camss_csi2pix_clk",
3606 .ops = &clk_ops_branch,
3607 CLK_INIT(camss_csi2pix_clk.c),
3608 },
3609};
3610
3611static struct branch_clk camss_csi2rdi_clk = {
3612 .cbcr_reg = CAMSS_CSI2RDI_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003613 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003614 .base = &virt_bases[MMSS_BASE],
3615 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003616 .parent = &csi2_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003617 .dbg_name = "camss_csi2rdi_clk",
3618 .ops = &clk_ops_branch,
3619 CLK_INIT(camss_csi2rdi_clk.c),
3620 },
3621};
3622
3623static struct branch_clk camss_csi3_ahb_clk = {
3624 .cbcr_reg = CAMSS_CSI3_AHB_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003625 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003626 .base = &virt_bases[MMSS_BASE],
3627 .c = {
3628 .dbg_name = "camss_csi3_ahb_clk",
3629 .ops = &clk_ops_branch,
3630 CLK_INIT(camss_csi3_ahb_clk.c),
3631 },
3632};
3633
3634static struct branch_clk camss_csi3_clk = {
3635 .cbcr_reg = CAMSS_CSI3_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003636 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003637 .base = &virt_bases[MMSS_BASE],
3638 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003639 .parent = &csi3_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003640 .dbg_name = "camss_csi3_clk",
3641 .ops = &clk_ops_branch,
3642 CLK_INIT(camss_csi3_clk.c),
3643 },
3644};
3645
3646static struct branch_clk camss_csi3phy_clk = {
3647 .cbcr_reg = CAMSS_CSI3PHY_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003648 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003649 .base = &virt_bases[MMSS_BASE],
3650 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003651 .parent = &csi3_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003652 .dbg_name = "camss_csi3phy_clk",
3653 .ops = &clk_ops_branch,
3654 CLK_INIT(camss_csi3phy_clk.c),
3655 },
3656};
3657
3658static struct branch_clk camss_csi3pix_clk = {
3659 .cbcr_reg = CAMSS_CSI3PIX_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003660 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003661 .base = &virt_bases[MMSS_BASE],
3662 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003663 .parent = &csi3_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003664 .dbg_name = "camss_csi3pix_clk",
3665 .ops = &clk_ops_branch,
3666 CLK_INIT(camss_csi3pix_clk.c),
3667 },
3668};
3669
3670static struct branch_clk camss_csi3rdi_clk = {
3671 .cbcr_reg = CAMSS_CSI3RDI_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003672 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003673 .base = &virt_bases[MMSS_BASE],
3674 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003675 .parent = &csi3_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003676 .dbg_name = "camss_csi3rdi_clk",
3677 .ops = &clk_ops_branch,
3678 CLK_INIT(camss_csi3rdi_clk.c),
3679 },
3680};
3681
3682static struct branch_clk camss_csi_vfe0_clk = {
3683 .cbcr_reg = CAMSS_CSI_VFE0_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003684 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003685 .base = &virt_bases[MMSS_BASE],
3686 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003687 .parent = &vfe0_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003688 .dbg_name = "camss_csi_vfe0_clk",
3689 .ops = &clk_ops_branch,
3690 CLK_INIT(camss_csi_vfe0_clk.c),
3691 },
3692};
3693
3694static struct branch_clk camss_csi_vfe1_clk = {
3695 .cbcr_reg = CAMSS_CSI_VFE1_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003696 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003697 .base = &virt_bases[MMSS_BASE],
3698 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003699 .parent = &vfe1_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003700 .dbg_name = "camss_csi_vfe1_clk",
3701 .ops = &clk_ops_branch,
3702 CLK_INIT(camss_csi_vfe1_clk.c),
3703 },
3704};
3705
3706static struct branch_clk camss_gp0_clk = {
3707 .cbcr_reg = CAMSS_GP0_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003708 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003709 .base = &virt_bases[MMSS_BASE],
3710 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003711 .parent = &mmss_gp0_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003712 .dbg_name = "camss_gp0_clk",
3713 .ops = &clk_ops_branch,
3714 CLK_INIT(camss_gp0_clk.c),
3715 },
3716};
3717
3718static struct branch_clk camss_gp1_clk = {
3719 .cbcr_reg = CAMSS_GP1_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003720 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003721 .base = &virt_bases[MMSS_BASE],
3722 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003723 .parent = &mmss_gp1_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003724 .dbg_name = "camss_gp1_clk",
3725 .ops = &clk_ops_branch,
3726 CLK_INIT(camss_gp1_clk.c),
3727 },
3728};
3729
3730static struct branch_clk camss_ispif_ahb_clk = {
3731 .cbcr_reg = CAMSS_ISPIF_AHB_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003732 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003733 .base = &virt_bases[MMSS_BASE],
3734 .c = {
3735 .dbg_name = "camss_ispif_ahb_clk",
3736 .ops = &clk_ops_branch,
3737 CLK_INIT(camss_ispif_ahb_clk.c),
3738 },
3739};
3740
3741static struct branch_clk camss_jpeg_jpeg0_clk = {
3742 .cbcr_reg = CAMSS_JPEG_JPEG0_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003743 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003744 .base = &virt_bases[MMSS_BASE],
3745 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003746 .parent = &jpeg0_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003747 .dbg_name = "camss_jpeg_jpeg0_clk",
3748 .ops = &clk_ops_branch,
3749 CLK_INIT(camss_jpeg_jpeg0_clk.c),
3750 },
3751};
3752
3753static struct branch_clk camss_jpeg_jpeg1_clk = {
3754 .cbcr_reg = CAMSS_JPEG_JPEG1_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003755 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003756 .base = &virt_bases[MMSS_BASE],
3757 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003758 .parent = &jpeg1_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003759 .dbg_name = "camss_jpeg_jpeg1_clk",
3760 .ops = &clk_ops_branch,
3761 CLK_INIT(camss_jpeg_jpeg1_clk.c),
3762 },
3763};
3764
3765static struct branch_clk camss_jpeg_jpeg2_clk = {
3766 .cbcr_reg = CAMSS_JPEG_JPEG2_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003767 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003768 .base = &virt_bases[MMSS_BASE],
3769 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003770 .parent = &jpeg2_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003771 .dbg_name = "camss_jpeg_jpeg2_clk",
3772 .ops = &clk_ops_branch,
3773 CLK_INIT(camss_jpeg_jpeg2_clk.c),
3774 },
3775};
3776
3777static struct branch_clk camss_jpeg_jpeg_ahb_clk = {
3778 .cbcr_reg = CAMSS_JPEG_JPEG_AHB_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003779 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003780 .base = &virt_bases[MMSS_BASE],
3781 .c = {
3782 .dbg_name = "camss_jpeg_jpeg_ahb_clk",
3783 .ops = &clk_ops_branch,
3784 CLK_INIT(camss_jpeg_jpeg_ahb_clk.c),
3785 },
3786};
3787
3788static struct branch_clk camss_jpeg_jpeg_axi_clk = {
3789 .cbcr_reg = CAMSS_JPEG_JPEG_AXI_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003790 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003791 .base = &virt_bases[MMSS_BASE],
3792 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003793 .parent = &axi_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003794 .dbg_name = "camss_jpeg_jpeg_axi_clk",
3795 .ops = &clk_ops_branch,
3796 CLK_INIT(camss_jpeg_jpeg_axi_clk.c),
3797 },
3798};
3799
3800static struct branch_clk camss_jpeg_jpeg_ocmemnoc_clk = {
3801 .cbcr_reg = CAMSS_JPEG_JPEG_OCMEMNOC_CBCR,
3802 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003803 .base = &virt_bases[MMSS_BASE],
3804 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003805 .parent = &ocmemnoc_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003806 .dbg_name = "camss_jpeg_jpeg_ocmemnoc_clk",
3807 .ops = &clk_ops_branch,
3808 CLK_INIT(camss_jpeg_jpeg_ocmemnoc_clk.c),
3809 },
3810};
3811
3812static struct branch_clk camss_mclk0_clk = {
3813 .cbcr_reg = CAMSS_MCLK0_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003814 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003815 .base = &virt_bases[MMSS_BASE],
3816 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003817 .parent = &mclk0_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003818 .dbg_name = "camss_mclk0_clk",
3819 .ops = &clk_ops_branch,
3820 CLK_INIT(camss_mclk0_clk.c),
3821 },
3822};
3823
3824static struct branch_clk camss_mclk1_clk = {
3825 .cbcr_reg = CAMSS_MCLK1_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003826 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003827 .base = &virt_bases[MMSS_BASE],
3828 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003829 .parent = &mclk1_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003830 .dbg_name = "camss_mclk1_clk",
3831 .ops = &clk_ops_branch,
3832 CLK_INIT(camss_mclk1_clk.c),
3833 },
3834};
3835
3836static struct branch_clk camss_mclk2_clk = {
3837 .cbcr_reg = CAMSS_MCLK2_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003838 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003839 .base = &virt_bases[MMSS_BASE],
3840 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003841 .parent = &mclk2_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003842 .dbg_name = "camss_mclk2_clk",
3843 .ops = &clk_ops_branch,
3844 CLK_INIT(camss_mclk2_clk.c),
3845 },
3846};
3847
3848static struct branch_clk camss_mclk3_clk = {
3849 .cbcr_reg = CAMSS_MCLK3_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003850 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003851 .base = &virt_bases[MMSS_BASE],
3852 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003853 .parent = &mclk3_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003854 .dbg_name = "camss_mclk3_clk",
3855 .ops = &clk_ops_branch,
3856 CLK_INIT(camss_mclk3_clk.c),
3857 },
3858};
3859
3860static struct branch_clk camss_micro_ahb_clk = {
3861 .cbcr_reg = CAMSS_MICRO_AHB_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003862 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003863 .base = &virt_bases[MMSS_BASE],
3864 .c = {
3865 .dbg_name = "camss_micro_ahb_clk",
3866 .ops = &clk_ops_branch,
3867 CLK_INIT(camss_micro_ahb_clk.c),
3868 },
3869};
3870
3871static struct branch_clk camss_phy0_csi0phytimer_clk = {
3872 .cbcr_reg = CAMSS_PHY0_CSI0PHYTIMER_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003873 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003874 .base = &virt_bases[MMSS_BASE],
3875 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003876 .parent = &csi0phytimer_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003877 .dbg_name = "camss_phy0_csi0phytimer_clk",
3878 .ops = &clk_ops_branch,
3879 CLK_INIT(camss_phy0_csi0phytimer_clk.c),
3880 },
3881};
3882
3883static struct branch_clk camss_phy1_csi1phytimer_clk = {
3884 .cbcr_reg = CAMSS_PHY1_CSI1PHYTIMER_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003885 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003886 .base = &virt_bases[MMSS_BASE],
3887 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003888 .parent = &csi1phytimer_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003889 .dbg_name = "camss_phy1_csi1phytimer_clk",
3890 .ops = &clk_ops_branch,
3891 CLK_INIT(camss_phy1_csi1phytimer_clk.c),
3892 },
3893};
3894
3895static struct branch_clk camss_phy2_csi2phytimer_clk = {
3896 .cbcr_reg = CAMSS_PHY2_CSI2PHYTIMER_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003897 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003898 .base = &virt_bases[MMSS_BASE],
3899 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003900 .parent = &csi2phytimer_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003901 .dbg_name = "camss_phy2_csi2phytimer_clk",
3902 .ops = &clk_ops_branch,
3903 CLK_INIT(camss_phy2_csi2phytimer_clk.c),
3904 },
3905};
3906
3907static struct branch_clk camss_top_ahb_clk = {
3908 .cbcr_reg = CAMSS_TOP_AHB_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003909 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003910 .base = &virt_bases[MMSS_BASE],
3911 .c = {
3912 .dbg_name = "camss_top_ahb_clk",
3913 .ops = &clk_ops_branch,
3914 CLK_INIT(camss_top_ahb_clk.c),
3915 },
3916};
3917
3918static struct branch_clk camss_vfe_cpp_ahb_clk = {
3919 .cbcr_reg = CAMSS_VFE_CPP_AHB_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003920 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003921 .base = &virt_bases[MMSS_BASE],
3922 .c = {
3923 .dbg_name = "camss_vfe_cpp_ahb_clk",
3924 .ops = &clk_ops_branch,
3925 CLK_INIT(camss_vfe_cpp_ahb_clk.c),
3926 },
3927};
3928
3929static struct branch_clk camss_vfe_cpp_clk = {
3930 .cbcr_reg = CAMSS_VFE_CPP_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003931 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003932 .base = &virt_bases[MMSS_BASE],
3933 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003934 .parent = &cpp_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003935 .dbg_name = "camss_vfe_cpp_clk",
3936 .ops = &clk_ops_branch,
3937 CLK_INIT(camss_vfe_cpp_clk.c),
3938 },
3939};
3940
3941static struct branch_clk camss_vfe_vfe0_clk = {
3942 .cbcr_reg = CAMSS_VFE_VFE0_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003943 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003944 .base = &virt_bases[MMSS_BASE],
3945 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003946 .parent = &vfe0_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003947 .dbg_name = "camss_vfe_vfe0_clk",
3948 .ops = &clk_ops_branch,
3949 CLK_INIT(camss_vfe_vfe0_clk.c),
3950 },
3951};
3952
3953static struct branch_clk camss_vfe_vfe1_clk = {
3954 .cbcr_reg = CAMSS_VFE_VFE1_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003955 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003956 .base = &virt_bases[MMSS_BASE],
3957 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003958 .parent = &vfe1_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003959 .dbg_name = "camss_vfe_vfe1_clk",
3960 .ops = &clk_ops_branch,
3961 CLK_INIT(camss_vfe_vfe1_clk.c),
3962 },
3963};
3964
3965static struct branch_clk camss_vfe_vfe_ahb_clk = {
3966 .cbcr_reg = CAMSS_VFE_VFE_AHB_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003967 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003968 .base = &virt_bases[MMSS_BASE],
3969 .c = {
3970 .dbg_name = "camss_vfe_vfe_ahb_clk",
3971 .ops = &clk_ops_branch,
3972 CLK_INIT(camss_vfe_vfe_ahb_clk.c),
3973 },
3974};
3975
3976static struct branch_clk camss_vfe_vfe_axi_clk = {
3977 .cbcr_reg = CAMSS_VFE_VFE_AXI_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003978 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003979 .base = &virt_bases[MMSS_BASE],
3980 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003981 .parent = &axi_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003982 .dbg_name = "camss_vfe_vfe_axi_clk",
3983 .ops = &clk_ops_branch,
3984 CLK_INIT(camss_vfe_vfe_axi_clk.c),
3985 },
3986};
3987
3988static struct branch_clk camss_vfe_vfe_ocmemnoc_clk = {
3989 .cbcr_reg = CAMSS_VFE_VFE_OCMEMNOC_CBCR,
3990 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003991 .base = &virt_bases[MMSS_BASE],
3992 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003993 .parent = &ocmemnoc_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003994 .dbg_name = "camss_vfe_vfe_ocmemnoc_clk",
3995 .ops = &clk_ops_branch,
3996 CLK_INIT(camss_vfe_vfe_ocmemnoc_clk.c),
3997 },
3998};
3999
4000static struct branch_clk mdss_ahb_clk = {
4001 .cbcr_reg = MDSS_AHB_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004002 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004003 .base = &virt_bases[MMSS_BASE],
4004 .c = {
4005 .dbg_name = "mdss_ahb_clk",
4006 .ops = &clk_ops_branch,
4007 CLK_INIT(mdss_ahb_clk.c),
4008 },
4009};
4010
4011static struct branch_clk mdss_axi_clk = {
4012 .cbcr_reg = MDSS_AXI_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004013 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004014 .base = &virt_bases[MMSS_BASE],
4015 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004016 .parent = &axi_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004017 .dbg_name = "mdss_axi_clk",
4018 .ops = &clk_ops_branch,
4019 CLK_INIT(mdss_axi_clk.c),
4020 },
4021};
4022
4023static struct branch_clk mdss_byte0_clk = {
4024 .cbcr_reg = MDSS_BYTE0_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004025 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004026 .base = &virt_bases[MMSS_BASE],
4027 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004028 .parent = &byte0_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004029 .dbg_name = "mdss_byte0_clk",
4030 .ops = &clk_ops_branch,
4031 CLK_INIT(mdss_byte0_clk.c),
4032 },
4033};
4034
4035static struct branch_clk mdss_byte1_clk = {
4036 .cbcr_reg = MDSS_BYTE1_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004037 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004038 .base = &virt_bases[MMSS_BASE],
4039 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004040 .parent = &byte1_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004041 .dbg_name = "mdss_byte1_clk",
4042 .ops = &clk_ops_branch,
4043 CLK_INIT(mdss_byte1_clk.c),
4044 },
4045};
4046
4047static struct branch_clk mdss_edpaux_clk = {
4048 .cbcr_reg = MDSS_EDPAUX_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004049 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004050 .base = &virt_bases[MMSS_BASE],
4051 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004052 .parent = &edpaux_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004053 .dbg_name = "mdss_edpaux_clk",
4054 .ops = &clk_ops_branch,
4055 CLK_INIT(mdss_edpaux_clk.c),
4056 },
4057};
4058
4059static struct branch_clk mdss_edplink_clk = {
4060 .cbcr_reg = MDSS_EDPLINK_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004061 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004062 .base = &virt_bases[MMSS_BASE],
4063 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004064 .parent = &edplink_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004065 .dbg_name = "mdss_edplink_clk",
4066 .ops = &clk_ops_branch,
4067 CLK_INIT(mdss_edplink_clk.c),
4068 },
4069};
4070
4071static struct branch_clk mdss_edppixel_clk = {
4072 .cbcr_reg = MDSS_EDPPIXEL_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004073 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004074 .base = &virt_bases[MMSS_BASE],
4075 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004076 .parent = &edppixel_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004077 .dbg_name = "mdss_edppixel_clk",
4078 .ops = &clk_ops_branch,
4079 CLK_INIT(mdss_edppixel_clk.c),
4080 },
4081};
4082
4083static struct branch_clk mdss_esc0_clk = {
4084 .cbcr_reg = MDSS_ESC0_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004085 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004086 .base = &virt_bases[MMSS_BASE],
4087 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004088 .parent = &esc0_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004089 .dbg_name = "mdss_esc0_clk",
4090 .ops = &clk_ops_branch,
4091 CLK_INIT(mdss_esc0_clk.c),
4092 },
4093};
4094
4095static struct branch_clk mdss_esc1_clk = {
4096 .cbcr_reg = MDSS_ESC1_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004097 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004098 .base = &virt_bases[MMSS_BASE],
4099 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004100 .parent = &esc1_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004101 .dbg_name = "mdss_esc1_clk",
4102 .ops = &clk_ops_branch,
4103 CLK_INIT(mdss_esc1_clk.c),
4104 },
4105};
4106
4107static struct branch_clk mdss_extpclk_clk = {
4108 .cbcr_reg = MDSS_EXTPCLK_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004109 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004110 .base = &virt_bases[MMSS_BASE],
4111 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004112 .parent = &extpclk_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004113 .dbg_name = "mdss_extpclk_clk",
4114 .ops = &clk_ops_branch,
4115 CLK_INIT(mdss_extpclk_clk.c),
4116 },
4117};
4118
4119static struct branch_clk mdss_hdmi_ahb_clk = {
4120 .cbcr_reg = MDSS_HDMI_AHB_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004121 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004122 .base = &virt_bases[MMSS_BASE],
4123 .c = {
4124 .dbg_name = "mdss_hdmi_ahb_clk",
4125 .ops = &clk_ops_branch,
4126 CLK_INIT(mdss_hdmi_ahb_clk.c),
4127 },
4128};
4129
4130static struct branch_clk mdss_hdmi_clk = {
4131 .cbcr_reg = MDSS_HDMI_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004132 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004133 .base = &virt_bases[MMSS_BASE],
4134 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004135 .parent = &hdmi_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004136 .dbg_name = "mdss_hdmi_clk",
4137 .ops = &clk_ops_branch,
4138 CLK_INIT(mdss_hdmi_clk.c),
4139 },
4140};
4141
4142static struct branch_clk mdss_mdp_clk = {
4143 .cbcr_reg = MDSS_MDP_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004144 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004145 .base = &virt_bases[MMSS_BASE],
4146 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004147 .parent = &mdp_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004148 .dbg_name = "mdss_mdp_clk",
4149 .ops = &clk_ops_branch,
4150 CLK_INIT(mdss_mdp_clk.c),
4151 },
4152};
4153
4154static struct branch_clk mdss_mdp_lut_clk = {
4155 .cbcr_reg = MDSS_MDP_LUT_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004156 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004157 .base = &virt_bases[MMSS_BASE],
4158 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004159 .parent = &mdp_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004160 .dbg_name = "mdss_mdp_lut_clk",
4161 .ops = &clk_ops_branch,
4162 CLK_INIT(mdss_mdp_lut_clk.c),
4163 },
4164};
4165
4166static struct branch_clk mdss_pclk0_clk = {
4167 .cbcr_reg = MDSS_PCLK0_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004168 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004169 .base = &virt_bases[MMSS_BASE],
4170 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004171 .parent = &pclk0_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004172 .dbg_name = "mdss_pclk0_clk",
4173 .ops = &clk_ops_branch,
4174 CLK_INIT(mdss_pclk0_clk.c),
4175 },
4176};
4177
4178static struct branch_clk mdss_pclk1_clk = {
4179 .cbcr_reg = MDSS_PCLK1_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004180 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004181 .base = &virt_bases[MMSS_BASE],
4182 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004183 .parent = &pclk1_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004184 .dbg_name = "mdss_pclk1_clk",
4185 .ops = &clk_ops_branch,
4186 CLK_INIT(mdss_pclk1_clk.c),
4187 },
4188};
4189
4190static struct branch_clk mdss_vsync_clk = {
4191 .cbcr_reg = MDSS_VSYNC_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004192 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004193 .base = &virt_bases[MMSS_BASE],
4194 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004195 .parent = &vsync_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004196 .dbg_name = "mdss_vsync_clk",
4197 .ops = &clk_ops_branch,
4198 CLK_INIT(mdss_vsync_clk.c),
4199 },
4200};
4201
4202static struct branch_clk mmss_misc_ahb_clk = {
4203 .cbcr_reg = MMSS_MISC_AHB_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004204 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004205 .base = &virt_bases[MMSS_BASE],
4206 .c = {
4207 .dbg_name = "mmss_misc_ahb_clk",
4208 .ops = &clk_ops_branch,
4209 CLK_INIT(mmss_misc_ahb_clk.c),
4210 },
4211};
4212
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004213static struct branch_clk mmss_mmssnoc_bto_ahb_clk = {
4214 .cbcr_reg = MMSS_MMSSNOC_BTO_AHB_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004215 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004216 .base = &virt_bases[MMSS_BASE],
4217 .c = {
4218 .dbg_name = "mmss_mmssnoc_bto_ahb_clk",
4219 .ops = &clk_ops_branch,
4220 CLK_INIT(mmss_mmssnoc_bto_ahb_clk.c),
4221 },
4222};
4223
4224static struct branch_clk mmss_mmssnoc_axi_clk = {
4225 .cbcr_reg = MMSS_MMSSNOC_AXI_CBCR,
Vikram Mulukutlac15dac02012-08-09 13:31:08 -07004226 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004227 .base = &virt_bases[MMSS_BASE],
4228 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004229 .parent = &axi_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004230 .dbg_name = "mmss_mmssnoc_axi_clk",
4231 .ops = &clk_ops_branch,
4232 CLK_INIT(mmss_mmssnoc_axi_clk.c),
4233 },
4234};
4235
4236static struct branch_clk mmss_s0_axi_clk = {
4237 .cbcr_reg = MMSS_S0_AXI_CBCR,
Vikram Mulukutlac15dac02012-08-09 13:31:08 -07004238 /* The bus driver needs set_rate to go through to the parent */
4239 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004240 .base = &virt_bases[MMSS_BASE],
4241 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004242 .parent = &axi_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004243 .dbg_name = "mmss_s0_axi_clk",
4244 .ops = &clk_ops_branch,
4245 CLK_INIT(mmss_s0_axi_clk.c),
Vikram Mulukutlac15dac02012-08-09 13:31:08 -07004246 .depends = &mmss_mmssnoc_axi_clk.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004247 },
4248};
4249
Vikram Mulukutlad08a1522012-05-24 15:24:01 -07004250struct branch_clk ocmemnoc_clk = {
4251 .cbcr_reg = OCMEMNOC_CBCR,
Vikram Mulukutlad08a1522012-05-24 15:24:01 -07004252 .has_sibling = 0,
4253 .bcr_reg = 0x50b0,
4254 .base = &virt_bases[MMSS_BASE],
4255 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004256 .parent = &ocmemnoc_clk_src.c,
Vikram Mulukutlad08a1522012-05-24 15:24:01 -07004257 .dbg_name = "ocmemnoc_clk",
4258 .ops = &clk_ops_branch,
4259 CLK_INIT(ocmemnoc_clk.c),
4260 },
4261};
4262
Vikram Mulukutla274b2d92012-07-13 15:53:04 -07004263struct branch_clk ocmemcx_ocmemnoc_clk = {
4264 .cbcr_reg = OCMEMCX_OCMEMNOC_CBCR,
Vikram Mulukutla274b2d92012-07-13 15:53:04 -07004265 .has_sibling = 1,
4266 .base = &virt_bases[MMSS_BASE],
4267 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004268 .parent = &ocmemnoc_clk_src.c,
Vikram Mulukutla274b2d92012-07-13 15:53:04 -07004269 .dbg_name = "ocmemcx_ocmemnoc_clk",
4270 .ops = &clk_ops_branch,
4271 CLK_INIT(ocmemcx_ocmemnoc_clk.c),
4272 },
4273};
4274
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004275static struct branch_clk venus0_ahb_clk = {
4276 .cbcr_reg = VENUS0_AHB_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004277 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004278 .base = &virt_bases[MMSS_BASE],
4279 .c = {
4280 .dbg_name = "venus0_ahb_clk",
4281 .ops = &clk_ops_branch,
4282 CLK_INIT(venus0_ahb_clk.c),
4283 },
4284};
4285
4286static struct branch_clk venus0_axi_clk = {
4287 .cbcr_reg = VENUS0_AXI_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004288 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004289 .base = &virt_bases[MMSS_BASE],
4290 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004291 .parent = &axi_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004292 .dbg_name = "venus0_axi_clk",
4293 .ops = &clk_ops_branch,
4294 CLK_INIT(venus0_axi_clk.c),
4295 },
4296};
4297
4298static struct branch_clk venus0_ocmemnoc_clk = {
4299 .cbcr_reg = VENUS0_OCMEMNOC_CBCR,
4300 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004301 .base = &virt_bases[MMSS_BASE],
4302 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004303 .parent = &ocmemnoc_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004304 .dbg_name = "venus0_ocmemnoc_clk",
4305 .ops = &clk_ops_branch,
4306 CLK_INIT(venus0_ocmemnoc_clk.c),
4307 },
4308};
4309
4310static struct branch_clk venus0_vcodec0_clk = {
4311 .cbcr_reg = VENUS0_VCODEC0_CBCR,
Matt Wagantallfe4f6982013-05-20 13:36:20 -07004312 .bcr_reg = VENUS0_BCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004313 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004314 .base = &virt_bases[MMSS_BASE],
4315 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004316 .parent = &vcodec0_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004317 .dbg_name = "venus0_vcodec0_clk",
4318 .ops = &clk_ops_branch,
4319 CLK_INIT(venus0_vcodec0_clk.c),
4320 },
4321};
4322
Vikram Mulukutlae3b03062012-05-16 12:07:08 -07004323static struct branch_clk oxilicx_axi_clk = {
4324 .cbcr_reg = OXILICX_AXI_CBCR,
Vikram Mulukutlae3b03062012-05-16 12:07:08 -07004325 .has_sibling = 1,
4326 .base = &virt_bases[MMSS_BASE],
4327 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004328 .parent = &axi_clk_src.c,
Vikram Mulukutlae3b03062012-05-16 12:07:08 -07004329 .dbg_name = "oxilicx_axi_clk",
4330 .ops = &clk_ops_branch,
4331 CLK_INIT(oxilicx_axi_clk.c),
4332 },
4333};
4334
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004335static struct branch_clk oxili_gfx3d_clk = {
4336 .cbcr_reg = OXILI_GFX3D_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004337 .base = &virt_bases[MMSS_BASE],
4338 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004339 .parent = &oxili_gfx3d_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004340 .dbg_name = "oxili_gfx3d_clk",
4341 .ops = &clk_ops_branch,
4342 CLK_INIT(oxili_gfx3d_clk.c),
Vikram Mulukutlae3b03062012-05-16 12:07:08 -07004343 .depends = &oxilicx_axi_clk.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004344 },
4345};
4346
4347static struct branch_clk oxilicx_ahb_clk = {
4348 .cbcr_reg = OXILICX_AHB_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004349 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004350 .base = &virt_bases[MMSS_BASE],
4351 .c = {
4352 .dbg_name = "oxilicx_ahb_clk",
4353 .ops = &clk_ops_branch,
4354 CLK_INIT(oxilicx_ahb_clk.c),
4355 },
4356};
4357
Vikram Mulukutlaa967db42012-05-10 16:20:40 -07004358static struct branch_clk q6ss_ahb_lfabif_clk = {
4359 .cbcr_reg = LPASS_Q6SS_AHB_LFABIF_CBCR,
4360 .has_sibling = 1,
4361 .base = &virt_bases[LPASS_BASE],
4362 .c = {
4363 .dbg_name = "q6ss_ahb_lfabif_clk",
4364 .ops = &clk_ops_branch,
4365 CLK_INIT(q6ss_ahb_lfabif_clk.c),
4366 },
4367};
4368
Vikram Mulukutla6c0f1a72012-08-10 01:59:28 -07004369
Vikram Mulukutla3454e9e2012-08-11 20:18:42 -07004370static struct branch_clk gcc_lpass_q6_axi_clk = {
4371 .cbcr_reg = LPASS_Q6_AXI_CBCR,
4372 .has_sibling = 1,
4373 .base = &virt_bases[GCC_BASE],
4374 .c = {
4375 .dbg_name = "gcc_lpass_q6_axi_clk",
4376 .ops = &clk_ops_branch,
4377 CLK_INIT(gcc_lpass_q6_axi_clk.c),
4378 },
4379};
4380
Vikram Mulukutlaa967db42012-05-10 16:20:40 -07004381static struct branch_clk q6ss_xo_clk = {
4382 .cbcr_reg = LPASS_Q6SS_XO_CBCR,
4383 .bcr_reg = LPASS_Q6SS_BCR,
4384 .has_sibling = 1,
4385 .base = &virt_bases[LPASS_BASE],
4386 .c = {
4387 .dbg_name = "q6ss_xo_clk",
4388 .ops = &clk_ops_branch,
4389 CLK_INIT(q6ss_xo_clk.c),
4390 },
4391};
4392
Vikram Mulukutlab5b311e2012-08-09 14:58:48 -07004393static struct branch_clk q6ss_ahbm_clk = {
4394 .cbcr_reg = Q6SS_AHBM_CBCR,
4395 .has_sibling = 1,
4396 .base = &virt_bases[LPASS_BASE],
4397 .c = {
4398 .dbg_name = "q6ss_ahbm_clk",
4399 .ops = &clk_ops_branch,
4400 CLK_INIT(q6ss_ahbm_clk.c),
4401 },
4402};
4403
Matt Wagantalledf2fad2012-08-06 16:11:46 -07004404static DEFINE_CLK_MEASURE(l2_m_clk);
4405static DEFINE_CLK_MEASURE(krait0_m_clk);
4406static DEFINE_CLK_MEASURE(krait1_m_clk);
4407static DEFINE_CLK_MEASURE(krait2_m_clk);
4408static DEFINE_CLK_MEASURE(krait3_m_clk);
4409
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004410#ifdef CONFIG_DEBUG_FS
4411
4412struct measure_mux_entry {
4413 struct clk *c;
4414 int base;
4415 u32 debug_mux;
4416};
4417
Matt Wagantall0976c4c2013-02-07 17:12:43 -08004418enum {
4419 M_ACPU0 = 0,
4420 M_ACPU1,
4421 M_ACPU2,
4422 M_ACPU3,
4423 M_L2,
4424};
4425
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004426struct measure_mux_entry measure_mux[] = {
Vikram Mulukutla9cd8f0f2012-07-27 14:15:24 -07004427 {&gcc_pdm_ahb_clk.c, GCC_BASE, 0x00d0},
4428 {&gcc_blsp2_qup1_i2c_apps_clk.c, GCC_BASE, 0x00ab},
4429 {&gcc_blsp2_qup3_spi_apps_clk.c, GCC_BASE, 0x00b3},
4430 {&gcc_blsp2_uart5_apps_clk.c, GCC_BASE, 0x00be},
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004431 {&gcc_usb30_master_clk.c, GCC_BASE, 0x0050},
Vikram Mulukutla9cd8f0f2012-07-27 14:15:24 -07004432 {&gcc_blsp2_qup3_i2c_apps_clk.c, GCC_BASE, 0x00b4},
4433 {&gcc_usb_hsic_system_clk.c, GCC_BASE, 0x0059},
4434 {&gcc_blsp2_uart3_apps_clk.c, GCC_BASE, 0x00b5},
4435 {&gcc_usb_hsic_io_cal_clk.c, GCC_BASE, 0x005b},
4436 {&gcc_ce2_axi_clk.c, GCC_BASE, 0x0141},
4437 {&gcc_sdcc3_ahb_clk.c, GCC_BASE, 0x0079},
4438 {&gcc_blsp1_qup5_i2c_apps_clk.c, GCC_BASE, 0x009d},
4439 {&gcc_blsp1_qup1_spi_apps_clk.c, GCC_BASE, 0x008a},
4440 {&gcc_blsp2_uart4_apps_clk.c, GCC_BASE, 0x00ba},
4441 {&gcc_ce2_clk.c, GCC_BASE, 0x0140},
4442 {&gcc_blsp1_uart2_apps_clk.c, GCC_BASE, 0x0091},
4443 {&gcc_sdcc1_ahb_clk.c, GCC_BASE, 0x0069},
4444 {&gcc_mss_cfg_ahb_clk.c, GCC_BASE, 0x0030},
4445 {&gcc_tsif_ahb_clk.c, GCC_BASE, 0x00e8},
4446 {&gcc_sdcc4_ahb_clk.c, GCC_BASE, 0x0081},
4447 {&gcc_blsp1_qup4_spi_apps_clk.c, GCC_BASE, 0x0098},
4448 {&gcc_blsp2_qup4_spi_apps_clk.c, GCC_BASE, 0x00b8},
4449 {&gcc_blsp1_qup3_spi_apps_clk.c, GCC_BASE, 0x0093},
4450 {&gcc_blsp1_qup6_i2c_apps_clk.c, GCC_BASE, 0x00a2},
4451 {&gcc_blsp2_qup6_i2c_apps_clk.c, GCC_BASE, 0x00c2},
4452 {&gcc_bam_dma_ahb_clk.c, GCC_BASE, 0x00e0},
4453 {&gcc_sdcc3_apps_clk.c, GCC_BASE, 0x0078},
4454 {&gcc_usb_hs_system_clk.c, GCC_BASE, 0x0060},
4455 {&gcc_blsp1_ahb_clk.c, GCC_BASE, 0x0088},
4456 {&gcc_sdcc1_apps_clk.c, GCC_BASE, 0x0068},
4457 {&gcc_blsp2_qup5_i2c_apps_clk.c, GCC_BASE, 0x00bd},
4458 {&gcc_blsp1_uart4_apps_clk.c, GCC_BASE, 0x009a},
4459 {&gcc_blsp2_qup2_spi_apps_clk.c, GCC_BASE, 0x00ae},
4460 {&gcc_blsp2_qup6_spi_apps_clk.c, GCC_BASE, 0x00c1},
4461 {&gcc_blsp2_uart2_apps_clk.c, GCC_BASE, 0x00b1},
4462 {&gcc_blsp1_qup2_spi_apps_clk.c, GCC_BASE, 0x008e},
4463 {&gcc_usb_hsic_ahb_clk.c, GCC_BASE, 0x0058},
4464 {&gcc_blsp1_uart3_apps_clk.c, GCC_BASE, 0x0095},
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004465 {&gcc_usb30_mock_utmi_clk.c, GCC_BASE, 0x0052},
Vikram Mulukutla9cd8f0f2012-07-27 14:15:24 -07004466 {&gcc_ce1_axi_clk.c, GCC_BASE, 0x0139},
4467 {&gcc_sdcc4_apps_clk.c, GCC_BASE, 0x0080},
4468 {&gcc_blsp1_qup5_spi_apps_clk.c, GCC_BASE, 0x009c},
4469 {&gcc_usb_hs_ahb_clk.c, GCC_BASE, 0x0061},
4470 {&gcc_blsp1_qup6_spi_apps_clk.c, GCC_BASE, 0x00a1},
4471 {&gcc_blsp2_qup2_i2c_apps_clk.c, GCC_BASE, 0x00b0},
4472 {&gcc_prng_ahb_clk.c, GCC_BASE, 0x00d8},
4473 {&gcc_blsp1_qup3_i2c_apps_clk.c, GCC_BASE, 0x0094},
4474 {&gcc_usb_hsic_clk.c, GCC_BASE, 0x005a},
4475 {&gcc_blsp1_uart6_apps_clk.c, GCC_BASE, 0x00a3},
4476 {&gcc_sdcc2_apps_clk.c, GCC_BASE, 0x0070},
4477 {&gcc_tsif_ref_clk.c, GCC_BASE, 0x00e9},
4478 {&gcc_blsp1_uart1_apps_clk.c, GCC_BASE, 0x008c},
4479 {&gcc_blsp2_qup5_spi_apps_clk.c, GCC_BASE, 0x00bc},
4480 {&gcc_blsp1_qup4_i2c_apps_clk.c, GCC_BASE, 0x0099},
4481 {&gcc_mmss_noc_cfg_ahb_clk.c, GCC_BASE, 0x002a},
4482 {&gcc_blsp2_ahb_clk.c, GCC_BASE, 0x00a8},
4483 {&gcc_boot_rom_ahb_clk.c, GCC_BASE, 0x00f8},
4484 {&gcc_ce1_ahb_clk.c, GCC_BASE, 0x013a},
4485 {&gcc_pdm2_clk.c, GCC_BASE, 0x00d2},
4486 {&gcc_blsp2_qup4_i2c_apps_clk.c, GCC_BASE, 0x00b9},
4487 {&gcc_ce2_ahb_clk.c, GCC_BASE, 0x0142},
4488 {&gcc_blsp1_uart5_apps_clk.c, GCC_BASE, 0x009e},
4489 {&gcc_blsp2_qup1_spi_apps_clk.c, GCC_BASE, 0x00aa},
4490 {&gcc_blsp1_qup2_i2c_apps_clk.c, GCC_BASE, 0x0090},
4491 {&gcc_blsp2_uart1_apps_clk.c, GCC_BASE, 0x00ac},
4492 {&gcc_blsp1_qup1_i2c_apps_clk.c, GCC_BASE, 0x008b},
4493 {&gcc_blsp2_uart6_apps_clk.c, GCC_BASE, 0x00c3},
4494 {&gcc_sdcc2_ahb_clk.c, GCC_BASE, 0x0071},
Vikram Mulukutla3b98a6d2012-08-15 20:35:25 -07004495 {&gcc_usb30_sleep_clk.c, GCC_BASE, 0x0051},
4496 {&gcc_usb2a_phy_sleep_clk.c, GCC_BASE, 0x0063},
4497 {&gcc_usb2b_phy_sleep_clk.c, GCC_BASE, 0x0064},
4498 {&gcc_sys_noc_usb3_axi_clk.c, GCC_BASE, 0x0001},
Vikram Mulukutla9cd8f0f2012-07-27 14:15:24 -07004499 {&gcc_ocmem_noc_cfg_ahb_clk.c, GCC_BASE, 0x0029},
4500 {&gcc_ce1_clk.c, GCC_BASE, 0x0138},
Vikram Mulukutla3454e9e2012-08-11 20:18:42 -07004501 {&gcc_lpass_q6_axi_clk.c, GCC_BASE, 0x0160},
Vikram Mulukutla31926eb2012-08-12 19:58:08 -07004502 {&gcc_mss_q6_bimc_axi_clk.c, GCC_BASE, 0x0031},
Vikram Mulukutlab5294732012-10-15 14:21:47 -07004503 {&cnoc_clk.c, GCC_BASE, 0x0008},
4504 {&pnoc_clk.c, GCC_BASE, 0x0010},
4505 {&snoc_clk.c, GCC_BASE, 0x0000},
4506 {&bimc_clk.c, GCC_BASE, 0x0155},
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004507 {&mmss_mmssnoc_axi_clk.c, MMSS_BASE, 0x0004},
Vikram Mulukutlad08a1522012-05-24 15:24:01 -07004508 {&ocmemnoc_clk.c, MMSS_BASE, 0x0007},
Vikram Mulukutla274b2d92012-07-13 15:53:04 -07004509 {&ocmemcx_ocmemnoc_clk.c, MMSS_BASE, 0x0009},
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004510 {&camss_cci_cci_ahb_clk.c, MMSS_BASE, 0x002e},
4511 {&camss_cci_cci_clk.c, MMSS_BASE, 0x002d},
4512 {&camss_csi0_ahb_clk.c, MMSS_BASE, 0x0042},
4513 {&camss_csi0_clk.c, MMSS_BASE, 0x0041},
4514 {&camss_csi0phy_clk.c, MMSS_BASE, 0x0043},
4515 {&camss_csi0pix_clk.c, MMSS_BASE, 0x0045},
4516 {&camss_csi0rdi_clk.c, MMSS_BASE, 0x0044},
4517 {&camss_csi1_ahb_clk.c, MMSS_BASE, 0x0047},
4518 {&camss_csi1_clk.c, MMSS_BASE, 0x0046},
4519 {&camss_csi1phy_clk.c, MMSS_BASE, 0x0048},
4520 {&camss_csi1pix_clk.c, MMSS_BASE, 0x004a},
4521 {&camss_csi1rdi_clk.c, MMSS_BASE, 0x0049},
4522 {&camss_csi2_ahb_clk.c, MMSS_BASE, 0x004c},
4523 {&camss_csi2_clk.c, MMSS_BASE, 0x004b},
4524 {&camss_csi2phy_clk.c, MMSS_BASE, 0x004d},
4525 {&camss_csi2pix_clk.c, MMSS_BASE, 0x004f},
4526 {&camss_csi2rdi_clk.c, MMSS_BASE, 0x004e},
4527 {&camss_csi3_ahb_clk.c, MMSS_BASE, 0x0051},
4528 {&camss_csi3_clk.c, MMSS_BASE, 0x0050},
4529 {&camss_csi3phy_clk.c, MMSS_BASE, 0x0052},
4530 {&camss_csi3pix_clk.c, MMSS_BASE, 0x0054},
4531 {&camss_csi3rdi_clk.c, MMSS_BASE, 0x0053},
4532 {&camss_csi_vfe0_clk.c, MMSS_BASE, 0x003f},
4533 {&camss_csi_vfe1_clk.c, MMSS_BASE, 0x0040},
4534 {&camss_gp0_clk.c, MMSS_BASE, 0x0027},
4535 {&camss_gp1_clk.c, MMSS_BASE, 0x0028},
4536 {&camss_ispif_ahb_clk.c, MMSS_BASE, 0x0055},
4537 {&camss_jpeg_jpeg0_clk.c, MMSS_BASE, 0x0032},
4538 {&camss_jpeg_jpeg1_clk.c, MMSS_BASE, 0x0033},
4539 {&camss_jpeg_jpeg2_clk.c, MMSS_BASE, 0x0034},
4540 {&camss_jpeg_jpeg_ahb_clk.c, MMSS_BASE, 0x0035},
4541 {&camss_jpeg_jpeg_axi_clk.c, MMSS_BASE, 0x0036},
4542 {&camss_jpeg_jpeg_ocmemnoc_clk.c, MMSS_BASE, 0x0037},
4543 {&camss_mclk0_clk.c, MMSS_BASE, 0x0029},
4544 {&camss_mclk1_clk.c, MMSS_BASE, 0x002a},
4545 {&camss_mclk2_clk.c, MMSS_BASE, 0x002b},
4546 {&camss_mclk3_clk.c, MMSS_BASE, 0x002c},
4547 {&camss_micro_ahb_clk.c, MMSS_BASE, 0x0026},
4548 {&camss_phy0_csi0phytimer_clk.c, MMSS_BASE, 0x002f},
4549 {&camss_phy1_csi1phytimer_clk.c, MMSS_BASE, 0x0030},
4550 {&camss_phy2_csi2phytimer_clk.c, MMSS_BASE, 0x0031},
4551 {&camss_top_ahb_clk.c, MMSS_BASE, 0x0025},
4552 {&camss_vfe_cpp_ahb_clk.c, MMSS_BASE, 0x003b},
4553 {&camss_vfe_cpp_clk.c, MMSS_BASE, 0x003a},
4554 {&camss_vfe_vfe0_clk.c, MMSS_BASE, 0x0038},
4555 {&camss_vfe_vfe1_clk.c, MMSS_BASE, 0x0039},
4556 {&camss_vfe_vfe_ahb_clk.c, MMSS_BASE, 0x003c},
4557 {&camss_vfe_vfe_axi_clk.c, MMSS_BASE, 0x003d},
4558 {&camss_vfe_vfe_ocmemnoc_clk.c, MMSS_BASE, 0x003e},
Vikram Mulukutladf04d532012-08-10 21:01:00 -07004559 {&oxilicx_axi_clk.c, MMSS_BASE, 0x000b},
4560 {&oxilicx_ahb_clk.c, MMSS_BASE, 0x000c},
4561 {&ocmemcx_ocmemnoc_clk.c, MMSS_BASE, 0x0009},
4562 {&oxili_gfx3d_clk.c, MMSS_BASE, 0x000d},
4563 {&venus0_axi_clk.c, MMSS_BASE, 0x000f},
4564 {&venus0_ocmemnoc_clk.c, MMSS_BASE, 0x0010},
4565 {&venus0_ahb_clk.c, MMSS_BASE, 0x0011},
4566 {&venus0_vcodec0_clk.c, MMSS_BASE, 0x000e},
4567 {&mmss_s0_axi_clk.c, MMSS_BASE, 0x0005},
4568 {&mmssnoc_ahb_clk.c, MMSS_BASE, 0x0001},
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004569 {&mdss_ahb_clk.c, MMSS_BASE, 0x0022},
4570 {&mdss_hdmi_clk.c, MMSS_BASE, 0x001d},
4571 {&mdss_mdp_clk.c, MMSS_BASE, 0x0014},
4572 {&mdss_mdp_lut_clk.c, MMSS_BASE, 0x0015},
4573 {&mdss_axi_clk.c, MMSS_BASE, 0x0024},
4574 {&mdss_vsync_clk.c, MMSS_BASE, 0x001c},
4575 {&mdss_esc0_clk.c, MMSS_BASE, 0x0020},
4576 {&mdss_esc1_clk.c, MMSS_BASE, 0x0021},
4577 {&mdss_edpaux_clk.c, MMSS_BASE, 0x001b},
4578 {&mdss_byte0_clk.c, MMSS_BASE, 0x001e},
4579 {&mdss_byte1_clk.c, MMSS_BASE, 0x001f},
4580 {&mdss_edplink_clk.c, MMSS_BASE, 0x001a},
4581 {&mdss_edppixel_clk.c, MMSS_BASE, 0x0019},
4582 {&mdss_extpclk_clk.c, MMSS_BASE, 0x0018},
4583 {&mdss_hdmi_ahb_clk.c, MMSS_BASE, 0x0023},
4584 {&mdss_pclk0_clk.c, MMSS_BASE, 0x0016},
4585 {&mdss_pclk1_clk.c, MMSS_BASE, 0x0017},
Vikram Mulukutlaa967db42012-05-10 16:20:40 -07004586 {&q6ss_xo_clk.c, LPASS_BASE, 0x002b},
4587 {&q6ss_ahb_lfabif_clk.c, LPASS_BASE, 0x001e},
Vikram Mulukutlab5b311e2012-08-09 14:58:48 -07004588 {&q6ss_ahbm_clk.c, LPASS_BASE, 0x001d},
Vikram Mulukutlaa967db42012-05-10 16:20:40 -07004589
Matt Wagantall0976c4c2013-02-07 17:12:43 -08004590 {&krait0_m_clk, APCS_BASE, M_ACPU0},
4591 {&krait1_m_clk, APCS_BASE, M_ACPU1},
4592 {&krait2_m_clk, APCS_BASE, M_ACPU2},
4593 {&krait3_m_clk, APCS_BASE, M_ACPU3},
4594 {&l2_m_clk, APCS_BASE, M_L2},
Matt Wagantalledf2fad2012-08-06 16:11:46 -07004595
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004596 {&dummy_clk, N_BASES, 0x0000},
4597};
4598
4599static int measure_clk_set_parent(struct clk *c, struct clk *parent)
4600{
4601 struct measure_clk *clk = to_measure_clk(c);
4602 unsigned long flags;
4603 u32 regval, clk_sel, i;
4604
4605 if (!parent)
4606 return -EINVAL;
4607
4608 for (i = 0; i < (ARRAY_SIZE(measure_mux) - 1); i++)
4609 if (measure_mux[i].c == parent)
4610 break;
4611
4612 if (measure_mux[i].c == &dummy_clk)
4613 return -EINVAL;
4614
4615 spin_lock_irqsave(&local_clock_reg_lock, flags);
4616 /*
4617 * Program the test vector, measurement period (sample_ticks)
4618 * and scaling multiplier.
4619 */
4620 clk->sample_ticks = 0x10000;
4621 clk->multiplier = 1;
4622
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004623 switch (measure_mux[i].base) {
4624
4625 case GCC_BASE:
Vikram Mulukutlaae7cfdb2012-08-10 15:30:21 -07004626 writel_relaxed(0, GCC_REG_BASE(GCC_DEBUG_CLK_CTL_REG));
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004627 clk_sel = measure_mux[i].debug_mux;
4628 break;
4629
4630 case MMSS_BASE:
Vikram Mulukutlaae7cfdb2012-08-10 15:30:21 -07004631 writel_relaxed(0, MMSS_REG_BASE(MMSS_DEBUG_CLK_CTL_REG));
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004632 clk_sel = 0x02C;
4633 regval = BVAL(11, 0, measure_mux[i].debug_mux);
4634 writel_relaxed(regval, MMSS_REG_BASE(MMSS_DEBUG_CLK_CTL_REG));
4635
4636 /* Activate debug clock output */
4637 regval |= BIT(16);
4638 writel_relaxed(regval, MMSS_REG_BASE(MMSS_DEBUG_CLK_CTL_REG));
4639 break;
4640
4641 case LPASS_BASE:
Vikram Mulukutlaae7cfdb2012-08-10 15:30:21 -07004642 writel_relaxed(0, LPASS_REG_BASE(LPASS_DEBUG_CLK_CTL_REG));
Vikram Mulukutla93537012012-08-08 14:44:33 -07004643 clk_sel = 0x161;
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004644 regval = BVAL(11, 0, measure_mux[i].debug_mux);
4645 writel_relaxed(regval, LPASS_REG_BASE(LPASS_DEBUG_CLK_CTL_REG));
4646
4647 /* Activate debug clock output */
Vikram Mulukutla93537012012-08-08 14:44:33 -07004648 regval |= BIT(20);
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004649 writel_relaxed(regval, LPASS_REG_BASE(LPASS_DEBUG_CLK_CTL_REG));
4650 break;
4651
Matt Wagantalledf2fad2012-08-06 16:11:46 -07004652 case APCS_BASE:
4653 clk->multiplier = 4;
4654 clk_sel = 0x16A;
Matt Wagantall0976c4c2013-02-07 17:12:43 -08004655
4656 if (SOCINFO_VERSION_MAJOR(socinfo_get_version()) == 1) {
4657 if (measure_mux[i].debug_mux == M_L2)
4658 regval = BIT(7)|BIT(0);
4659 else
4660 regval = BIT(7)|(measure_mux[i].debug_mux << 3);
4661 } else {
4662 if (measure_mux[i].debug_mux == M_L2)
4663 regval = BIT(12);
4664 else
4665 regval = measure_mux[i].debug_mux << 8;
4666 writel_relaxed(BIT(0), APCS_REG_BASE(L2_CBCR_REG));
4667 }
Matt Wagantalledf2fad2012-08-06 16:11:46 -07004668 writel_relaxed(regval, APCS_REG_BASE(GLB_CLK_DIAG_REG));
4669 break;
4670
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004671 default:
4672 return -EINVAL;
4673 }
4674
4675 /* Set debug mux clock index */
4676 regval = BVAL(8, 0, clk_sel);
4677 writel_relaxed(regval, GCC_REG_BASE(GCC_DEBUG_CLK_CTL_REG));
4678
4679 /* Activate debug clock output */
4680 regval |= BIT(16);
4681 writel_relaxed(regval, GCC_REG_BASE(GCC_DEBUG_CLK_CTL_REG));
4682
4683 /* Make sure test vector is set before starting measurements. */
4684 mb();
4685 spin_unlock_irqrestore(&local_clock_reg_lock, flags);
4686
4687 return 0;
4688}
4689
4690/* Sample clock for 'ticks' reference clock ticks. */
4691static u32 run_measurement(unsigned ticks)
4692{
4693 /* Stop counters and set the XO4 counter start value. */
4694 writel_relaxed(ticks, GCC_REG_BASE(CLOCK_FRQ_MEASURE_CTL_REG));
4695
4696 /* Wait for timer to become ready. */
4697 while ((readl_relaxed(GCC_REG_BASE(CLOCK_FRQ_MEASURE_STATUS_REG)) &
4698 BIT(25)) != 0)
4699 cpu_relax();
4700
4701 /* Run measurement and wait for completion. */
4702 writel_relaxed(BIT(20)|ticks, GCC_REG_BASE(CLOCK_FRQ_MEASURE_CTL_REG));
4703 while ((readl_relaxed(GCC_REG_BASE(CLOCK_FRQ_MEASURE_STATUS_REG)) &
4704 BIT(25)) == 0)
4705 cpu_relax();
4706
4707 /* Return measured ticks. */
4708 return readl_relaxed(GCC_REG_BASE(CLOCK_FRQ_MEASURE_STATUS_REG)) &
4709 BM(24, 0);
4710}
4711
4712/*
4713 * Perform a hardware rate measurement for a given clock.
4714 * FOR DEBUG USE ONLY: Measurements take ~15 ms!
4715 */
4716static unsigned long measure_clk_get_rate(struct clk *c)
4717{
4718 unsigned long flags;
4719 u32 gcc_xo4_reg_backup;
4720 u64 raw_count_short, raw_count_full;
4721 struct measure_clk *clk = to_measure_clk(c);
4722 unsigned ret;
4723
4724 ret = clk_prepare_enable(&cxo_clk_src.c);
4725 if (ret) {
4726 pr_warning("CXO clock failed to enable. Can't measure\n");
4727 return 0;
4728 }
4729
4730 spin_lock_irqsave(&local_clock_reg_lock, flags);
4731
4732 /* Enable CXO/4 and RINGOSC branch. */
4733 gcc_xo4_reg_backup = readl_relaxed(GCC_REG_BASE(GCC_XO_DIV4_CBCR_REG));
4734 writel_relaxed(0x1, GCC_REG_BASE(GCC_XO_DIV4_CBCR_REG));
4735
4736 /*
4737 * The ring oscillator counter will not reset if the measured clock
4738 * is not running. To detect this, run a short measurement before
4739 * the full measurement. If the raw results of the two are the same
4740 * then the clock must be off.
4741 */
4742
4743 /* Run a short measurement. (~1 ms) */
4744 raw_count_short = run_measurement(0x1000);
4745 /* Run a full measurement. (~14 ms) */
4746 raw_count_full = run_measurement(clk->sample_ticks);
4747
4748 writel_relaxed(gcc_xo4_reg_backup, GCC_REG_BASE(GCC_XO_DIV4_CBCR_REG));
4749
4750 /* Return 0 if the clock is off. */
4751 if (raw_count_full == raw_count_short) {
4752 ret = 0;
4753 } else {
4754 /* Compute rate in Hz. */
4755 raw_count_full = ((raw_count_full * 10) + 15) * 4800000;
4756 do_div(raw_count_full, ((clk->sample_ticks * 10) + 35));
4757 ret = (raw_count_full * clk->multiplier);
4758 }
4759
Matt Wagantall9a9b6f02012-08-07 23:12:26 -07004760 writel_relaxed(0x51A00, GCC_REG_BASE(GCC_PLLTEST_PAD_CFG_REG));
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004761 spin_unlock_irqrestore(&local_clock_reg_lock, flags);
4762
4763 clk_disable_unprepare(&cxo_clk_src.c);
4764
4765 return ret;
4766}
4767#else /* !CONFIG_DEBUG_FS */
4768static int measure_clk_set_parent(struct clk *clk, struct clk *parent)
4769{
4770 return -EINVAL;
4771}
4772
4773static unsigned long measure_clk_get_rate(struct clk *clk)
4774{
4775 return 0;
4776}
4777#endif /* CONFIG_DEBUG_FS */
4778
Matt Wagantallae053222012-05-14 19:42:07 -07004779static struct clk_ops clk_ops_measure = {
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004780 .set_parent = measure_clk_set_parent,
4781 .get_rate = measure_clk_get_rate,
4782};
4783
4784static struct measure_clk measure_clk = {
4785 .c = {
4786 .dbg_name = "measure_clk",
Matt Wagantallae053222012-05-14 19:42:07 -07004787 .ops = &clk_ops_measure,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004788 CLK_INIT(measure_clk.c),
4789 },
4790 .multiplier = 1,
4791};
4792
Vikram Mulukutla19245e02012-07-23 15:58:04 -07004793
4794static struct clk_lookup msm_clocks_8974_rumi[] = {
4795 CLK_LOOKUP("iface_clk", gcc_sdcc1_ahb_clk.c, "msm_sdcc.1"),
4796 CLK_LOOKUP("core_clk", gcc_sdcc1_apps_clk.c, "msm_sdcc.1"),
Vikram Mulukutla19245e02012-07-23 15:58:04 -07004797 CLK_LOOKUP("iface_clk", gcc_sdcc2_ahb_clk.c, "msm_sdcc.2"),
4798 CLK_LOOKUP("core_clk", gcc_sdcc2_apps_clk.c, "msm_sdcc.2"),
Vikram Mulukutla19245e02012-07-23 15:58:04 -07004799 CLK_LOOKUP("iface_clk", gcc_sdcc3_ahb_clk.c, "msm_sdcc.3"),
4800 CLK_LOOKUP("core_clk", gcc_sdcc3_apps_clk.c, "msm_sdcc.3"),
Vikram Mulukutla19245e02012-07-23 15:58:04 -07004801 CLK_LOOKUP("iface_clk", gcc_sdcc4_ahb_clk.c, "msm_sdcc.4"),
4802 CLK_LOOKUP("core_clk", gcc_sdcc4_apps_clk.c, "msm_sdcc.4"),
Vikram Mulukutla19245e02012-07-23 15:58:04 -07004803 CLK_DUMMY("xo", XO_CLK, NULL, OFF),
Tianyi Gou7fea5da2012-12-06 15:56:31 -08004804 CLK_DUMMY("xo", XO_CLK, "fb21b000.qcom,pronto", OFF),
Stepan Moskovchenkof97dede72012-08-08 17:40:44 -07004805 CLK_DUMMY("core_clk", BLSP2_UART_CLK, "f991f000.serial", OFF),
4806 CLK_DUMMY("iface_clk", BLSP2_UART_CLK, "f991f000.serial", OFF),
Vikram Mulukutla19245e02012-07-23 15:58:04 -07004807 CLK_DUMMY("core_clk", SDC1_CLK, NULL, OFF),
4808 CLK_DUMMY("iface_clk", SDC1_P_CLK, NULL, OFF),
4809 CLK_DUMMY("core_clk", SDC3_CLK, NULL, OFF),
4810 CLK_DUMMY("iface_clk", SDC3_P_CLK, NULL, OFF),
4811 CLK_DUMMY("phy_clk", NULL, "msm_otg", OFF),
4812 CLK_DUMMY("core_clk", NULL, "msm_otg", OFF),
4813 CLK_DUMMY("iface_clk", NULL, "msm_otg", OFF),
4814 CLK_DUMMY("xo", NULL, "msm_otg", OFF),
4815 CLK_DUMMY("dfab_clk", DFAB_CLK, NULL, 0),
4816 CLK_DUMMY("dma_bam_pclk", DMA_BAM_P_CLK, NULL, 0),
4817 CLK_DUMMY("mem_clk", NULL, NULL, 0),
4818 CLK_DUMMY("core_clk", SPI_CLK, "spi_qsd.1", OFF),
4819 CLK_DUMMY("iface_clk", SPI_P_CLK, "spi_qsd.1", OFF),
4820 CLK_DUMMY("core_clk", NULL, "f9966000.i2c", 0),
4821 CLK_DUMMY("iface_clk", NULL, "f9966000.i2c", 0),
4822 CLK_DUMMY("core_clk", NULL, "fe12f000.slim", OFF),
4823 CLK_DUMMY("core_clk", "mdp.0", NULL, 0),
4824 CLK_DUMMY("core_clk_src", "mdp.0", NULL, 0),
4825 CLK_DUMMY("lut_clk", "mdp.0", NULL, 0),
4826 CLK_DUMMY("vsync_clk", "mdp.0", NULL, 0),
4827 CLK_DUMMY("iface_clk", "mdp.0", NULL, 0),
4828 CLK_DUMMY("bus_clk", "mdp.0", NULL, 0),
Olav Haugan5bec5192013-01-21 17:59:17 -08004829 CLK_DUMMY("iface_clk", NULL, "fda64000.qcom,iommu", OFF),
4830 CLK_DUMMY("core_clk", NULL, "fda64000.qcom,iommu", OFF),
4831 CLK_DUMMY("alt_core_clk", NULL, "fda64000.qcom,iommu", OFF),
4832 CLK_DUMMY("iface_clk", NULL, "fda44000.qcom,iommu", OFF),
4833 CLK_DUMMY("core_clk", NULL, "fda44000.qcom,iommu", OFF),
4834 CLK_DUMMY("alt_core_clk", NULL, "fda44000.qcom,iommu", OFF),
4835 CLK_DUMMY("iface_clk", NULL, "fd928000.qcom,iommu", OFF),
4836 CLK_DUMMY("core_clk", NULL, "fd928000.qcom,iommu", oFF),
4837 CLK_DUMMY("core_clk", NULL, "fdb10000.qcom,iommu", OFF),
4838 CLK_DUMMY("iface_clk", NULL, "fdb10000.qcom,iommu", OFF),
4839 CLK_DUMMY("alt_core_clk", NULL, "fdb10000.qcom,iommu", OFF),
4840 CLK_DUMMY("iface_clk", NULL, "fdc84000.qcom,iommu", OFF),
4841 CLK_DUMMY("alt_core_clk", NULL, "fdc84000.qcom,iommu", oFF),
4842 CLK_DUMMY("core_clk", NULL, "fdc84000.qcom,iommu", oFF),
Vikram Mulukutla19245e02012-07-23 15:58:04 -07004843};
4844
Junjie Wua043bb22013-06-17 11:14:23 -07004845static struct clk_lookup msm_clocks_8974ac_only[] __initdata = {
4846 CLK_LOOKUP("gpll4", gpll4_clk_src.c, ""),
4847};
4848
4849static struct clk_lookup msm_clocks_8974_common[] __initdata = {
Vikram Mulukutla510f7492013-02-04 11:59:52 -08004850 CLK_LOOKUP("xo", cxo_otg_clk.c, "msm_otg"),
4851 CLK_LOOKUP("xo", cxo_pil_lpass_clk.c, "fe200000.qcom,lpass"),
4852 CLK_LOOKUP("xo", cxo_pil_mss_clk.c, "fc880000.qcom,mss"),
4853 CLK_LOOKUP("xo", cxo_wlan_clk.c, "fb000000.qcom,wcnss-wlan"),
Patrick Daly87958452013-03-18 18:34:52 -07004854 CLK_LOOKUP("rf_clk", cxo_a2.c, "fb000000.qcom,wcnss-wlan"),
Vikram Mulukutla510f7492013-02-04 11:59:52 -08004855 CLK_LOOKUP("xo", cxo_pil_pronto_clk.c, "fb21b000.qcom,pronto"),
Vijayavardhan Vennapusadec1fe62013-02-12 16:05:14 +05304856 CLK_LOOKUP("xo", cxo_dwc3_clk.c, "msm_dwc3"),
Vijayavardhan Vennapusa3c959c02013-03-04 10:34:16 +05304857 CLK_LOOKUP("xo", cxo_ehci_host_clk.c, "msm_ehci_host"),
Vikram Mulukutlaae4ae302013-04-24 12:00:28 -07004858 CLK_LOOKUP("xo", cxo_lpm_clk.c, "fc4281d0.qcom,mpm"),
Vikram Mulukutla510f7492013-02-04 11:59:52 -08004859
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004860 CLK_LOOKUP("measure", measure_clk.c, "debug"),
4861
4862 CLK_LOOKUP("dma_bam_pclk", gcc_bam_dma_ahb_clk.c, "msm_sps"),
Stepan Moskovchenkof97dede72012-08-08 17:40:44 -07004863 CLK_LOOKUP("iface_clk", gcc_blsp1_ahb_clk.c, "f991f000.serial"),
Amy Malochebc7e9672012-08-15 10:30:40 -07004864 CLK_LOOKUP("iface_clk", gcc_blsp1_ahb_clk.c, "f9924000.i2c"),
Stepan Moskovchenko5269b602012-08-08 17:57:09 -07004865 CLK_LOOKUP("iface_clk", gcc_blsp1_ahb_clk.c, "f991e000.serial"),
Asaf Penso2b1a6242013-04-09 17:25:56 -07004866 CLK_LOOKUP("core_clk", gcc_blsp1_qup1_i2c_apps_clk.c, "f9923000.i2c"),
4867 CLK_LOOKUP("iface_clk", gcc_blsp1_ahb_clk.c, "f9923000.i2c"),
Amy Malochebc7e9672012-08-15 10:30:40 -07004868 CLK_LOOKUP("core_clk", gcc_blsp1_qup2_i2c_apps_clk.c, "f9924000.i2c"),
4869 CLK_LOOKUP("core_clk", gcc_blsp1_qup2_spi_apps_clk.c, ""),
Subbaraman Narayanamurthy3f93ab12012-08-17 19:39:47 -07004870 CLK_LOOKUP("core_clk", gcc_blsp1_qup1_spi_apps_clk.c, "f9923000.spi"),
4871 CLK_LOOKUP("iface_clk", gcc_blsp1_ahb_clk.c, "f9923000.spi"),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004872 CLK_LOOKUP("core_clk", gcc_blsp1_qup3_i2c_apps_clk.c, ""),
4873 CLK_LOOKUP("core_clk", gcc_blsp1_qup3_spi_apps_clk.c, ""),
4874 CLK_LOOKUP("core_clk", gcc_blsp1_qup4_i2c_apps_clk.c, ""),
4875 CLK_LOOKUP("core_clk", gcc_blsp1_qup4_spi_apps_clk.c, ""),
4876 CLK_LOOKUP("core_clk", gcc_blsp1_qup5_i2c_apps_clk.c, ""),
4877 CLK_LOOKUP("core_clk", gcc_blsp1_qup5_spi_apps_clk.c, ""),
4878 CLK_LOOKUP("core_clk", gcc_blsp1_qup6_i2c_apps_clk.c, ""),
4879 CLK_LOOKUP("core_clk", gcc_blsp1_qup6_spi_apps_clk.c, ""),
4880 CLK_LOOKUP("core_clk", gcc_blsp1_uart1_apps_clk.c, ""),
Stepan Moskovchenko5269b602012-08-08 17:57:09 -07004881 CLK_LOOKUP("core_clk", gcc_blsp1_uart2_apps_clk.c, "f991e000.serial"),
Stepan Moskovchenkof97dede72012-08-08 17:40:44 -07004882 CLK_LOOKUP("core_clk", gcc_blsp1_uart3_apps_clk.c, "f991f000.serial"),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004883 CLK_LOOKUP("core_clk", gcc_blsp1_uart4_apps_clk.c, ""),
4884 CLK_LOOKUP("core_clk", gcc_blsp1_uart5_apps_clk.c, ""),
4885 CLK_LOOKUP("core_clk", gcc_blsp1_uart6_apps_clk.c, ""),
4886
Sagar Dharia8a73da92012-08-11 16:41:25 -06004887 CLK_LOOKUP("iface_clk", gcc_blsp2_ahb_clk.c, "f9967000.i2c"),
Sagar Dhariae0bb6502012-08-10 20:25:51 -06004888 CLK_LOOKUP("iface_clk", gcc_blsp2_ahb_clk.c, "f9966000.spi"),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004889 CLK_LOOKUP("iface_clk", gcc_blsp2_ahb_clk.c, "f995e000.serial"),
Saket Saurabhf34322b2013-01-15 11:57:25 +05304890 CLK_LOOKUP("iface_clk", gcc_blsp2_ahb_clk.c, "f995d000.uart"),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004891 CLK_LOOKUP("core_clk", gcc_blsp2_qup1_i2c_apps_clk.c, ""),
4892 CLK_LOOKUP("core_clk", gcc_blsp2_qup1_spi_apps_clk.c, ""),
4893 CLK_LOOKUP("core_clk", gcc_blsp2_qup2_i2c_apps_clk.c, ""),
4894 CLK_LOOKUP("core_clk", gcc_blsp2_qup2_spi_apps_clk.c, ""),
Vikram Mulukutla82da88d2012-05-04 11:24:03 -07004895 CLK_LOOKUP("core_clk", gcc_blsp2_qup3_i2c_apps_clk.c, ""),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004896 CLK_LOOKUP("core_clk", gcc_blsp2_qup3_spi_apps_clk.c, ""),
Sagar Dharia8a73da92012-08-11 16:41:25 -06004897 CLK_LOOKUP("core_clk", gcc_blsp2_qup4_i2c_apps_clk.c, ""),
Sagar Dharia8a73da92012-08-11 16:41:25 -06004898 CLK_LOOKUP("core_clk", gcc_blsp2_qup5_i2c_apps_clk.c, "f9967000.i2c"),
Sagar Dhariae0bb6502012-08-10 20:25:51 -06004899 CLK_LOOKUP("core_clk", gcc_blsp2_qup4_spi_apps_clk.c, "f9966000.spi"),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004900 CLK_LOOKUP("core_clk", gcc_blsp2_qup5_spi_apps_clk.c, ""),
4901 CLK_LOOKUP("core_clk", gcc_blsp2_qup6_i2c_apps_clk.c, ""),
4902 CLK_LOOKUP("core_clk", gcc_blsp2_qup6_spi_apps_clk.c, ""),
Saket Saurabhf34322b2013-01-15 11:57:25 +05304903 CLK_LOOKUP("core_clk", gcc_blsp2_uart1_apps_clk.c, "f995d000.uart"),
Vikram Mulukutla82da88d2012-05-04 11:24:03 -07004904 CLK_LOOKUP("core_clk", gcc_blsp2_uart2_apps_clk.c, "f995e000.serial"),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004905 CLK_LOOKUP("core_clk", gcc_blsp2_uart3_apps_clk.c, ""),
4906 CLK_LOOKUP("core_clk", gcc_blsp2_uart4_apps_clk.c, ""),
4907 CLK_LOOKUP("core_clk", gcc_blsp2_uart5_apps_clk.c, ""),
4908 CLK_LOOKUP("core_clk", gcc_blsp2_uart6_apps_clk.c, ""),
4909
Vikram Mulukutla3f580f82012-09-04 15:22:42 -07004910 CLK_LOOKUP("core_clk_src", ce1_clk_src.c, ""),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004911 CLK_LOOKUP("core_clk", gcc_ce1_clk.c, ""),
4912 CLK_LOOKUP("core_clk", gcc_ce2_clk.c, ""),
4913 CLK_LOOKUP("iface_clk", gcc_ce1_ahb_clk.c, ""),
4914 CLK_LOOKUP("iface_clk", gcc_ce2_ahb_clk.c, ""),
4915 CLK_LOOKUP("bus_clk", gcc_ce1_axi_clk.c, ""),
4916 CLK_LOOKUP("bus_clk", gcc_ce2_axi_clk.c, ""),
4917
Mona Hossainb43e94b2012-05-07 08:52:06 -07004918 CLK_LOOKUP("core_clk", gcc_ce2_clk.c, "qcedev.0"),
4919 CLK_LOOKUP("iface_clk", gcc_ce2_ahb_clk.c, "qcedev.0"),
4920 CLK_LOOKUP("bus_clk", gcc_ce2_axi_clk.c, "qcedev.0"),
4921 CLK_LOOKUP("core_clk_src", ce2_clk_src.c, "qcedev.0"),
4922
4923 CLK_LOOKUP("core_clk", gcc_ce2_clk.c, "qcrypto.0"),
4924 CLK_LOOKUP("iface_clk", gcc_ce2_ahb_clk.c, "qcrypto.0"),
4925 CLK_LOOKUP("bus_clk", gcc_ce2_axi_clk.c, "qcrypto.0"),
4926 CLK_LOOKUP("core_clk_src", ce2_clk_src.c, "qcrypto.0"),
4927
Ramesh Masavarapuff377032012-09-14 12:11:32 -07004928 CLK_LOOKUP("core_clk", gcc_ce1_clk.c, "qseecom"),
4929 CLK_LOOKUP("iface_clk", gcc_ce1_ahb_clk.c, "qseecom"),
4930 CLK_LOOKUP("bus_clk", gcc_ce1_axi_clk.c, "qseecom"),
4931 CLK_LOOKUP("core_clk_src", ce1_clk_src.c, "qseecom"),
4932
Mona Hossainc92629e2013-04-01 13:37:46 -07004933 CLK_LOOKUP("ce_drv_core_clk", gcc_ce2_clk.c, "qseecom"),
4934 CLK_LOOKUP("ce_drv_iface_clk", gcc_ce2_ahb_clk.c, "qseecom"),
4935 CLK_LOOKUP("ce_drv_bus_clk", gcc_ce2_axi_clk.c, "qseecom"),
4936 CLK_LOOKUP("ce_drv_core_clk_src", ce2_clk_src.c, "qseecom"),
4937
Hariprasad Dhalinarasimha005f0a52013-05-20 17:19:08 -07004938 CLK_LOOKUP("core_clk", gcc_ce1_clk.c, "mcd"),
4939 CLK_LOOKUP("iface_clk", gcc_ce1_ahb_clk.c, "mcd"),
4940 CLK_LOOKUP("bus_clk", gcc_ce1_axi_clk.c, "mcd"),
4941 CLK_LOOKUP("core_clk_src", ce1_clk_src.c, "mcd"),
4942
Patrick Daly1dbfa292013-03-13 14:47:33 -07004943 CLK_LOOKUP("core_clk", gcc_ce1_clk.c, "scm"),
4944 CLK_LOOKUP("iface_clk", gcc_ce1_ahb_clk.c, "scm"),
4945 CLK_LOOKUP("bus_clk", gcc_ce1_axi_clk.c, "scm"),
4946 CLK_LOOKUP("core_clk_src", ce1_clk_src.c, "scm"),
4947
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004948 CLK_LOOKUP("core_clk", gcc_gp1_clk.c, ""),
4949 CLK_LOOKUP("core_clk", gcc_gp2_clk.c, ""),
4950 CLK_LOOKUP("core_clk", gcc_gp3_clk.c, ""),
4951
4952 CLK_LOOKUP("core_clk", gcc_pdm2_clk.c, ""),
4953 CLK_LOOKUP("iface_clk", gcc_pdm_ahb_clk.c, ""),
4954 CLK_LOOKUP("iface_clk", gcc_prng_ahb_clk.c, ""),
4955
4956 CLK_LOOKUP("iface_clk", gcc_sdcc1_ahb_clk.c, "msm_sdcc.1"),
4957 CLK_LOOKUP("core_clk", gcc_sdcc1_apps_clk.c, "msm_sdcc.1"),
4958 CLK_LOOKUP("iface_clk", gcc_sdcc2_ahb_clk.c, "msm_sdcc.2"),
4959 CLK_LOOKUP("core_clk", gcc_sdcc2_apps_clk.c, "msm_sdcc.2"),
4960 CLK_LOOKUP("iface_clk", gcc_sdcc3_ahb_clk.c, "msm_sdcc.3"),
4961 CLK_LOOKUP("core_clk", gcc_sdcc3_apps_clk.c, "msm_sdcc.3"),
4962 CLK_LOOKUP("iface_clk", gcc_sdcc4_ahb_clk.c, "msm_sdcc.4"),
4963 CLK_LOOKUP("core_clk", gcc_sdcc4_apps_clk.c, "msm_sdcc.4"),
4964
Liron Kuch59339922013-01-01 18:29:47 +02004965 CLK_LOOKUP("iface_clk", gcc_tsif_ahb_clk.c, "f99d8000.msm_tspp"),
4966 CLK_LOOKUP("ref_clk", gcc_tsif_ref_clk.c, "f99d8000.msm_tspp"),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004967
Manu Gautam1fd82ac2012-08-22 10:27:36 -07004968 CLK_LOOKUP("mem_clk", gcc_usb30_master_clk.c, "usb_bam"),
4969 CLK_LOOKUP("mem_iface_clk", gcc_sys_noc_usb3_axi_clk.c, "usb_bam"),
Manu Gautam51be9712012-06-06 14:54:52 +05304970 CLK_LOOKUP("core_clk", gcc_usb30_master_clk.c, "msm_dwc3"),
4971 CLK_LOOKUP("utmi_clk", gcc_usb30_mock_utmi_clk.c, "msm_dwc3"),
Vikram Mulukutla3b98a6d2012-08-15 20:35:25 -07004972 CLK_LOOKUP("iface_clk", gcc_sys_noc_usb3_axi_clk.c, "msm_dwc3"),
Gagan Macf095ded2012-10-16 16:37:39 -06004973 CLK_LOOKUP("iface_clk", gcc_sys_noc_usb3_axi_clk.c, "msm_usb3"),
Vikram Mulukutla3b98a6d2012-08-15 20:35:25 -07004974 CLK_LOOKUP("sleep_clk", gcc_usb30_sleep_clk.c, "msm_dwc3"),
4975 CLK_LOOKUP("sleep_a_clk", gcc_usb2a_phy_sleep_clk.c, "msm_dwc3"),
4976 CLK_LOOKUP("sleep_b_clk", gcc_usb2b_phy_sleep_clk.c, "msm_dwc3"),
Vikram Mulukutla02ea7112012-08-29 12:06:11 -07004977 CLK_LOOKUP("ref_clk", diff_clk.c, "msm_dwc3"),
Manu Gautam51be9712012-06-06 14:54:52 +05304978 CLK_LOOKUP("iface_clk", gcc_usb_hs_ahb_clk.c, "msm_otg"),
4979 CLK_LOOKUP("core_clk", gcc_usb_hs_system_clk.c, "msm_otg"),
4980 CLK_LOOKUP("iface_clk", gcc_usb_hsic_ahb_clk.c, "msm_hsic_host"),
4981 CLK_LOOKUP("phy_clk", gcc_usb_hsic_clk.c, "msm_hsic_host"),
4982 CLK_LOOKUP("cal_clk", gcc_usb_hsic_io_cal_clk.c, "msm_hsic_host"),
4983 CLK_LOOKUP("core_clk", gcc_usb_hsic_system_clk.c, "msm_hsic_host"),
Banajit Goswamiac80ec12013-03-11 16:54:48 -07004984 CLK_LOOKUP("osr_clk", div_clk1.c, "msm-dai-q6-dev.16384"),
Vikram Mulukutla8cb2bb52012-11-14 11:23:49 -08004985 CLK_LOOKUP("ref_clk", div_clk2.c, "msm_smsc_hub"),
Vijayavardhan Vennapusa1f5da0b2013-01-08 20:03:57 +05304986 CLK_LOOKUP("iface_clk", gcc_usb_hs_ahb_clk.c, "msm_ehci_host"),
4987 CLK_LOOKUP("core_clk", gcc_usb_hs_system_clk.c, "msm_ehci_host"),
4988 CLK_LOOKUP("sleep_clk", gcc_usb2b_phy_sleep_clk.c, "msm_ehci_host"),
Amy Maloche527acc42012-12-07 18:40:54 -08004989 CLK_LOOKUP("pwm_clk", div_clk2.c, "0-0048"),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004990
4991 /* Multimedia clocks */
4992 CLK_LOOKUP("bus_clk_src", axi_clk_src.c, ""),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004993 CLK_LOOKUP("bus_clk", mmss_mmssnoc_axi_clk.c, ""),
Vikram Mulukutlabc59ee82012-11-07 18:22:36 -08004994 CLK_LOOKUP("bus_clk", mmssnoc_ahb_clk.c, ""),
Asaf Penso6b5251b2012-10-11 12:27:03 -07004995 CLK_LOOKUP("core_clk", mdss_edpaux_clk.c, "fd923400.qcom,mdss_edp"),
4996 CLK_LOOKUP("pixel_clk", mdss_edppixel_clk.c, "fd923400.qcom,mdss_edp"),
4997 CLK_LOOKUP("link_clk", mdss_edplink_clk.c, "fd923400.qcom,mdss_edp"),
Chandan Uddaraju19203fa2012-07-31 00:28:02 -07004998 CLK_LOOKUP("byte_clk", mdss_byte0_clk.c, "fd922800.qcom,mdss_dsi"),
Chandan Uddarajufcd5ef42012-12-11 10:36:39 -08004999 CLK_LOOKUP("byte_clk", mdss_byte1_clk.c, "fd922e00.qcom,mdss_dsi"),
Chandan Uddaraju19203fa2012-07-31 00:28:02 -07005000 CLK_LOOKUP("core_clk", mdss_esc0_clk.c, "fd922800.qcom,mdss_dsi"),
Chandan Uddarajufcd5ef42012-12-11 10:36:39 -08005001 CLK_LOOKUP("core_clk", mdss_esc1_clk.c, "fd922e00.qcom,mdss_dsi"),
Aravind Venkateswaran6b6d9c42013-05-06 16:10:03 -07005002 CLK_LOOKUP("iface_clk", mdss_ahb_clk.c, "fd922800.qcom,mdss_dsi"),
5003 CLK_LOOKUP("iface_clk", mdss_ahb_clk.c, "fd922e00.qcom,mdss_dsi"),
5004 CLK_LOOKUP("bus_clk", mdss_axi_clk.c, "fd922800.qcom,mdss_dsi"),
5005 CLK_LOOKUP("bus_clk", mdss_axi_clk.c, "fd922e00.qcom,mdss_dsi"),
Chandan Uddaraju09adf322012-08-16 02:55:23 -07005006 CLK_LOOKUP("pixel_clk", mdss_pclk0_clk.c, "fd922800.qcom,mdss_dsi"),
Chandan Uddarajufcd5ef42012-12-11 10:36:39 -08005007 CLK_LOOKUP("pixel_clk", mdss_pclk1_clk.c, "fd922e00.qcom,mdss_dsi"),
Ujwal Patel9faae9a2012-09-10 19:00:02 -07005008 CLK_LOOKUP("iface_clk", mdss_ahb_clk.c, "fd922100.qcom,hdmi_tx"),
5009 CLK_LOOKUP("alt_iface_clk", mdss_hdmi_ahb_clk.c,
5010 "fd922100.qcom,hdmi_tx"),
Ujwal Patel7232cde2012-08-13 22:50:13 -07005011 CLK_LOOKUP("core_clk", mdss_hdmi_clk.c, "fd922100.qcom,hdmi_tx"),
Ujwal Patelb89a77e2013-05-03 08:34:03 -07005012 CLK_LOOKUP("mdp_core_clk", mdss_mdp_clk.c, "fd922100.qcom,hdmi_tx"),
Ujwal Patel7232cde2012-08-13 22:50:13 -07005013 CLK_LOOKUP("extp_clk", mdss_extpclk_clk.c, "fd922100.qcom,hdmi_tx"),
Adrian Salido-Moreno5ef3ac02012-05-14 18:40:47 -07005014 CLK_LOOKUP("core_clk", mdss_mdp_clk.c, "mdp.0"),
5015 CLK_LOOKUP("lut_clk", mdss_mdp_lut_clk.c, "mdp.0"),
5016 CLK_LOOKUP("core_clk_src", mdp_clk_src.c, "mdp.0"),
5017 CLK_LOOKUP("vsync_clk", mdss_vsync_clk.c, "mdp.0"),
Kevin Chanb4b5f862012-08-23 14:34:33 -07005018
5019 /* MM sensor clocks */
Sreesudhan Ramakrish Ramkumar9f2ea272012-08-28 18:31:25 -07005020 CLK_LOOKUP("cam_src_clk", mclk0_clk_src.c, "6e.qcom,camera"),
Punit Sonid5f5b8e2013-01-30 16:40:29 -08005021 CLK_LOOKUP("cam_src_clk", mclk0_clk_src.c, "20.qcom,camera"),
Sreesudhan Ramakrish Ramkumar39074612012-10-11 20:48:51 -07005022 CLK_LOOKUP("cam_src_clk", mclk2_clk_src.c, "6c.qcom,camera"),
Sreesudhan Ramakrish Ramkumar6be27812012-09-19 16:42:06 -07005023 CLK_LOOKUP("cam_src_clk", mclk1_clk_src.c, "90.qcom,camera"),
Sreesudhan Ramakrish Ramkumar9f2ea272012-08-28 18:31:25 -07005024 CLK_LOOKUP("cam_clk", camss_mclk0_clk.c, "6e.qcom,camera"),
Punit Sonid5f5b8e2013-01-30 16:40:29 -08005025 CLK_LOOKUP("cam_clk", camss_mclk0_clk.c, "20.qcom,camera"),
Sreesudhan Ramakrish Ramkumar39074612012-10-11 20:48:51 -07005026 CLK_LOOKUP("cam_clk", camss_mclk2_clk.c, "6c.qcom,camera"),
Sreesudhan Ramakrish Ramkumar6be27812012-09-19 16:42:06 -07005027 CLK_LOOKUP("cam_clk", camss_mclk1_clk.c, "90.qcom,camera"),
Kevin Chanb4b5f862012-08-23 14:34:33 -07005028 CLK_LOOKUP("cam_clk", camss_mclk1_clk.c, ""),
5029 CLK_LOOKUP("cam_clk", camss_mclk2_clk.c, ""),
5030 CLK_LOOKUP("cam_clk", camss_mclk3_clk.c, ""),
5031 CLK_LOOKUP("cam_gp0_src_clk", mmss_gp0_clk_src.c, ""),
5032 CLK_LOOKUP("cam_gp1_src_clk", mmss_gp1_clk_src.c, ""),
5033 CLK_LOOKUP("cam_gp0_clk", camss_gp0_clk.c, ""),
5034 CLK_LOOKUP("cam_gp1_clk", camss_gp1_clk.c, ""),
5035 /* CCI clocks */
5036 CLK_LOOKUP("camss_top_ahb_clk", camss_top_ahb_clk.c,
5037 "fda0c000.qcom,cci"),
5038 CLK_LOOKUP("cci_ahb_clk", camss_cci_cci_ahb_clk.c, "fda0c000.qcom,cci"),
5039 CLK_LOOKUP("cci_src_clk", cci_clk_src.c, "fda0c000.qcom,cci"),
5040 CLK_LOOKUP("cci_clk", camss_cci_cci_clk.c, "fda0c000.qcom,cci"),
5041 /* CSIPHY clocks */
Shuzhen Wang65765c22013-01-08 14:37:15 -08005042 CLK_LOOKUP("camss_top_ahb_clk", camss_top_ahb_clk.c,
5043 "fda0ac00.qcom,csiphy"),
Kevin Chanb4b5f862012-08-23 14:34:33 -07005044 CLK_LOOKUP("ispif_ahb_clk", camss_ispif_ahb_clk.c,
5045 "fda0ac00.qcom,csiphy"),
5046 CLK_LOOKUP("csiphy_timer_src_clk", csi0phytimer_clk_src.c,
5047 "fda0ac00.qcom,csiphy"),
5048 CLK_LOOKUP("csiphy_timer_clk", camss_phy0_csi0phytimer_clk.c,
5049 "fda0ac00.qcom,csiphy"),
Shuzhen Wang65765c22013-01-08 14:37:15 -08005050 CLK_LOOKUP("camss_top_ahb_clk", camss_top_ahb_clk.c,
5051 "fda0b000.qcom,csiphy"),
Kevin Chanb4b5f862012-08-23 14:34:33 -07005052 CLK_LOOKUP("ispif_ahb_clk", camss_ispif_ahb_clk.c,
5053 "fda0b000.qcom,csiphy"),
5054 CLK_LOOKUP("csiphy_timer_src_clk", csi1phytimer_clk_src.c,
5055 "fda0b000.qcom,csiphy"),
5056 CLK_LOOKUP("csiphy_timer_clk", camss_phy1_csi1phytimer_clk.c,
5057 "fda0b000.qcom,csiphy"),
Shuzhen Wang65765c22013-01-08 14:37:15 -08005058 CLK_LOOKUP("camss_top_ahb_clk", camss_top_ahb_clk.c,
5059 "fda0b400.qcom,csiphy"),
Kevin Chanb4b5f862012-08-23 14:34:33 -07005060 CLK_LOOKUP("ispif_ahb_clk", camss_ispif_ahb_clk.c,
5061 "fda0b400.qcom,csiphy"),
5062 CLK_LOOKUP("csiphy_timer_src_clk", csi2phytimer_clk_src.c,
5063 "fda0b400.qcom,csiphy"),
5064 CLK_LOOKUP("csiphy_timer_clk", camss_phy2_csi2phytimer_clk.c,
5065 "fda0b400.qcom,csiphy"),
Evgeniy Borisov4de53312013-03-27 05:14:41 -07005066
Kevin Chanb4b5f862012-08-23 14:34:33 -07005067 /* CSID clocks */
Shuzhen Wang65765c22013-01-08 14:37:15 -08005068 CLK_LOOKUP("ispif_ahb_clk", camss_ispif_ahb_clk.c,
Evgeniy Borisov4de53312013-03-27 05:14:41 -07005069 "fda08000.qcom,csid"),
5070 CLK_LOOKUP("camss_top_ahb_clk", camss_top_ahb_clk.c,
5071 "fda08000.qcom,csid"),
5072 CLK_LOOKUP("csi_ahb_clk", camss_csi0_ahb_clk.c,
5073 "fda08000.qcom,csid"),
5074 CLK_LOOKUP("csi_src_clk", csi0_clk_src.c,
5075 "fda08000.qcom,csid"),
5076 CLK_LOOKUP("csi_phy_clk", camss_csi0phy_clk.c,
5077 "fda08000.qcom,csid"),
5078 CLK_LOOKUP("csi_clk", camss_csi0_clk.c,
5079 "fda08000.qcom,csid"),
5080 CLK_LOOKUP("csi_pix_clk", camss_csi0pix_clk.c,
5081 "fda08000.qcom,csid"),
5082 CLK_LOOKUP("csi_rdi_clk", camss_csi0rdi_clk.c,
5083 "fda08000.qcom,csid"),
Sreesudhan Ramakrish Ramkumar4f9d27f2012-08-28 23:51:38 -07005084
Shuzhen Wang65765c22013-01-08 14:37:15 -08005085 CLK_LOOKUP("ispif_ahb_clk", camss_ispif_ahb_clk.c,
Evgeniy Borisov4de53312013-03-27 05:14:41 -07005086 "fda08400.qcom,csid"),
5087 CLK_LOOKUP("camss_top_ahb_clk", camss_top_ahb_clk.c,
5088 "fda08400.qcom,csid"),
5089 CLK_LOOKUP("csi_ahb_clk", camss_csi1_ahb_clk.c,
5090 "fda08400.qcom,csid"),
5091 CLK_LOOKUP("csi_src_clk", csi1_clk_src.c,
5092 "fda08400.qcom,csid"),
5093 CLK_LOOKUP("csi_phy_clk", camss_csi1phy_clk.c,
5094 "fda08400.qcom,csid"),
5095 CLK_LOOKUP("csi_clk", camss_csi1_clk.c,
5096 "fda08400.qcom,csid"),
5097 CLK_LOOKUP("csi_pix_clk", camss_csi1pix_clk.c,
5098 "fda08400.qcom,csid"),
5099 CLK_LOOKUP("csi_rdi_clk", camss_csi1rdi_clk.c,
5100 "fda08400.qcom,csid"),
Sreesudhan Ramakrish Ramkumar4f9d27f2012-08-28 23:51:38 -07005101
Shuzhen Wang65765c22013-01-08 14:37:15 -08005102 CLK_LOOKUP("ispif_ahb_clk", camss_ispif_ahb_clk.c,
Evgeniy Borisov4de53312013-03-27 05:14:41 -07005103 "fda08800.qcom,csid"),
5104 CLK_LOOKUP("camss_top_ahb_clk", camss_top_ahb_clk.c,
5105 "fda08800.qcom,csid"),
5106 CLK_LOOKUP("csi_ahb_clk", camss_csi2_ahb_clk.c,
5107 "fda08800.qcom,csid"),
5108 CLK_LOOKUP("csi_src_clk", csi2_clk_src.c,
5109 "fda08800.qcom,csid"),
5110 CLK_LOOKUP("csi_phy_clk", camss_csi2phy_clk.c,
5111 "fda08800.qcom,csid"),
5112 CLK_LOOKUP("csi_clk", camss_csi2_clk.c,
5113 "fda08800.qcom,csid"),
5114 CLK_LOOKUP("csi_pix_clk", camss_csi2pix_clk.c,
5115 "fda08800.qcom,csid"),
5116 CLK_LOOKUP("csi_rdi_clk", camss_csi2rdi_clk.c,
5117 "fda08800.qcom,csid"),
Sreesudhan Ramakrish Ramkumar4f9d27f2012-08-28 23:51:38 -07005118
Shuzhen Wang65765c22013-01-08 14:37:15 -08005119 CLK_LOOKUP("ispif_ahb_clk", camss_ispif_ahb_clk.c,
Evgeniy Borisov4de53312013-03-27 05:14:41 -07005120 "fda08c00.qcom,csid"),
5121 CLK_LOOKUP("camss_top_ahb_clk", camss_top_ahb_clk.c,
5122 "fda08c00.qcom,csid"),
5123 CLK_LOOKUP("csi_ahb_clk", camss_csi3_ahb_clk.c,
5124 "fda08c00.qcom,csid"),
5125 CLK_LOOKUP("csi_src_clk", csi3_clk_src.c,
5126 "fda08c00.qcom,csid"),
5127 CLK_LOOKUP("csi_phy_clk", camss_csi3phy_clk.c,
5128 "fda08c00.qcom,csid"),
5129 CLK_LOOKUP("csi_clk", camss_csi3_clk.c,
5130 "fda08c00.qcom,csid"),
5131 CLK_LOOKUP("csi_pix_clk", camss_csi3pix_clk.c,
5132 "fda08c00.qcom,csid"),
5133 CLK_LOOKUP("csi_rdi_clk", camss_csi3rdi_clk.c,
5134 "fda08c00.qcom,csid"),
Sreesudhan Ramakrish Ramkumar4f9d27f2012-08-28 23:51:38 -07005135
Kevin Chan1d5fd4a2013-01-11 14:08:14 -08005136 /* ISPIF clocks */
Vladislav Hristovb5820152013-04-09 13:37:53 -07005137 CLK_LOOKUP("ispif_ahb_clk", camss_ispif_ahb_clk.c,
5138 "fda0a000.qcom,ispif"),
Kevin Chan1d5fd4a2013-01-11 14:08:14 -08005139
Kevin Chanb4b5f862012-08-23 14:34:33 -07005140 /*VFE clocks*/
5141 CLK_LOOKUP("camss_top_ahb_clk", camss_top_ahb_clk.c,
5142 "fda10000.qcom,vfe"),
5143 CLK_LOOKUP("vfe_clk_src", vfe0_clk_src.c, "fda10000.qcom,vfe"),
5144 CLK_LOOKUP("camss_vfe_vfe_clk", camss_vfe_vfe0_clk.c,
5145 "fda10000.qcom,vfe"),
5146 CLK_LOOKUP("camss_csi_vfe_clk", camss_csi_vfe0_clk.c,
5147 "fda10000.qcom,vfe"),
5148 CLK_LOOKUP("iface_clk", camss_vfe_vfe_ahb_clk.c, "fda10000.qcom,vfe"),
5149 CLK_LOOKUP("bus_clk", camss_vfe_vfe_axi_clk.c, "fda10000.qcom,vfe"),
5150 CLK_LOOKUP("alt_bus_clk", camss_vfe_vfe_ocmemnoc_clk.c,
5151 "fda10000.qcom,vfe"),
5152 CLK_LOOKUP("camss_top_ahb_clk", camss_top_ahb_clk.c,
5153 "fda14000.qcom,vfe"),
5154 CLK_LOOKUP("vfe_clk_src", vfe1_clk_src.c, "fda14000.qcom,vfe"),
5155 CLK_LOOKUP("camss_vfe_vfe_clk", camss_vfe_vfe1_clk.c,
5156 "fda14000.qcom,vfe"),
5157 CLK_LOOKUP("camss_csi_vfe_clk", camss_csi_vfe1_clk.c,
5158 "fda14000.qcom,vfe"),
5159 CLK_LOOKUP("iface_clk", camss_vfe_vfe_ahb_clk.c, "fda14000.qcom,vfe"),
5160 CLK_LOOKUP("bus_clk", camss_vfe_vfe_axi_clk.c, "fda14000.qcom,vfe"),
5161 CLK_LOOKUP("alt_bus_clk", camss_vfe_vfe_ocmemnoc_clk.c,
5162 "fda14000.qcom,vfe"),
Ashwini Raoef0ff762012-08-28 16:36:45 -07005163 /*Jpeg Clocks*/
5164 CLK_LOOKUP("core_clk", camss_jpeg_jpeg0_clk.c, "fda1c000.qcom,jpeg"),
5165 CLK_LOOKUP("core_clk", camss_jpeg_jpeg1_clk.c, "fda20000.qcom,jpeg"),
5166 CLK_LOOKUP("core_clk", camss_jpeg_jpeg2_clk.c, "fda24000.qcom,jpeg"),
5167 CLK_LOOKUP("iface_clk", camss_jpeg_jpeg_ahb_clk.c,
5168 "fda1c000.qcom,jpeg"),
5169 CLK_LOOKUP("iface_clk", camss_jpeg_jpeg_ahb_clk.c,
5170 "fda20000.qcom,jpeg"),
5171 CLK_LOOKUP("iface_clk", camss_jpeg_jpeg_ahb_clk.c,
5172 "fda24000.qcom,jpeg"),
Sathish Ambleyd1b89ed2012-02-07 21:47:47 -08005173 CLK_LOOKUP("iface_clk", camss_jpeg_jpeg_ahb_clk.c,
5174 "fda64000.qcom,iommu"),
5175 CLK_LOOKUP("core_clk", camss_jpeg_jpeg_axi_clk.c,
5176 "fda64000.qcom,iommu"),
Olav Haugana2eee312012-12-04 12:52:02 -08005177 CLK_LOOKUP("alt_core_clk", camss_top_ahb_clk.c, "fda64000.qcom,iommu"),
Ashwini Raoef0ff762012-08-28 16:36:45 -07005178 CLK_LOOKUP("bus_clk0", camss_jpeg_jpeg_axi_clk.c, "fda1c000.qcom,jpeg"),
5179 CLK_LOOKUP("bus_clk0", camss_jpeg_jpeg_axi_clk.c, "fda20000.qcom,jpeg"),
5180 CLK_LOOKUP("bus_clk0", camss_jpeg_jpeg_axi_clk.c, "fda24000.qcom,jpeg"),
5181 CLK_LOOKUP("alt_bus_clk", camss_jpeg_jpeg_ocmemnoc_clk.c,
5182 "fda1c000.qcom,jpeg"),
5183 CLK_LOOKUP("alt_bus_clk", camss_jpeg_jpeg_ocmemnoc_clk.c,
5184 "fda20000.qcom,jpeg"),
5185 CLK_LOOKUP("alt_bus_clk", camss_jpeg_jpeg_ocmemnoc_clk.c,
5186 "fda24000.qcom,jpeg"),
5187 CLK_LOOKUP("camss_top_ahb_clk", camss_top_ahb_clk.c,
5188 "fda1c000.qcom,jpeg"),
5189 CLK_LOOKUP("camss_top_ahb_clk", camss_top_ahb_clk.c,
5190 "fda20000.qcom,jpeg"),
5191 CLK_LOOKUP("camss_top_ahb_clk", camss_top_ahb_clk.c,
5192 "fda24000.qcom,jpeg"),
Sreesudhan Ramakrish Ramkumar9f79f602012-11-21 18:26:40 -08005193 CLK_LOOKUP("micro_iface_clk", camss_micro_ahb_clk.c,
5194 "fda04000.qcom,cpp"),
5195 CLK_LOOKUP("camss_top_ahb_clk", camss_top_ahb_clk.c,
5196 "fda04000.qcom,cpp"),
5197 CLK_LOOKUP("cpp_iface_clk", camss_vfe_cpp_ahb_clk.c,
5198 "fda04000.qcom,cpp"),
5199 CLK_LOOKUP("cpp_core_clk", camss_vfe_cpp_clk.c, "fda04000.qcom,cpp"),
5200 CLK_LOOKUP("cpp_bus_clk", camss_vfe_vfe_axi_clk.c, "fda04000.qcom,cpp"),
5201 CLK_LOOKUP("vfe_clk_src", vfe0_clk_src.c, "fda04000.qcom,cpp"),
5202 CLK_LOOKUP("camss_vfe_vfe_clk", camss_vfe_vfe0_clk.c,
5203 "fda04000.qcom,cpp"),
5204 CLK_LOOKUP("iface_clk", camss_vfe_vfe_ahb_clk.c, "fda04000.qcom,cpp"),
5205
5206
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005207 CLK_LOOKUP("iface_clk", camss_micro_ahb_clk.c, ""),
Olav Haugana2eee312012-12-04 12:52:02 -08005208 CLK_LOOKUP("iface_clk", camss_vfe_vfe_ahb_clk.c, "fda44000.qcom,iommu"),
5209 CLK_LOOKUP("core_clk", camss_vfe_vfe_axi_clk.c, "fda44000.qcom,iommu"),
5210 CLK_LOOKUP("alt_core_clk", camss_top_ahb_clk.c, "fda44000.qcom,iommu"),
Adrian Salido-Moreno5ef3ac02012-05-14 18:40:47 -07005211 CLK_LOOKUP("iface_clk", mdss_ahb_clk.c, "mdp.0"),
Asaf Penso6b5251b2012-10-11 12:27:03 -07005212 CLK_LOOKUP("iface_clk", mdss_ahb_clk.c, "fd923400.qcom,mdss_edp"),
Sathish Ambleyd1b89ed2012-02-07 21:47:47 -08005213 CLK_LOOKUP("iface_clk", mdss_ahb_clk.c, "fd928000.qcom,iommu"),
5214 CLK_LOOKUP("core_clk", mdss_axi_clk.c, "fd928000.qcom,iommu"),
Adrian Salido-Moreno5ef3ac02012-05-14 18:40:47 -07005215 CLK_LOOKUP("bus_clk", mdss_axi_clk.c, "mdp.0"),
Vikram Mulukutlae3b03062012-05-16 12:07:08 -07005216 CLK_LOOKUP("core_clk", oxili_gfx3d_clk.c, "fdb00000.qcom,kgsl-3d0"),
5217 CLK_LOOKUP("iface_clk", oxilicx_ahb_clk.c, "fdb00000.qcom,kgsl-3d0"),
Vikram Mulukutla274b2d92012-07-13 15:53:04 -07005218 CLK_LOOKUP("mem_iface_clk", ocmemcx_ocmemnoc_clk.c,
5219 "fdb00000.qcom,kgsl-3d0"),
Vikram Mulukutlae3b03062012-05-16 12:07:08 -07005220 CLK_LOOKUP("core_clk", oxilicx_axi_clk.c, "fdb10000.qcom,iommu"),
5221 CLK_LOOKUP("iface_clk", oxilicx_ahb_clk.c, "fdb10000.qcom,iommu"),
Stepan Moskovchenkob26b8ca2012-07-24 19:42:44 -07005222 CLK_LOOKUP("alt_core_clk", oxili_gfx3d_clk.c, "fdb10000.qcom,iommu"),
Naveen Ramarajbea2d5d2012-08-15 17:26:43 -07005223 CLK_LOOKUP("core_clk", ocmemgx_core_clk.c, "fdd00000.qcom,ocmem"),
5224 CLK_LOOKUP("iface_clk", ocmemcx_ocmemnoc_clk.c, "fdd00000.qcom,ocmem"),
Sathish Ambleyd1b89ed2012-02-07 21:47:47 -08005225 CLK_LOOKUP("iface_clk", venus0_ahb_clk.c, "fdc84000.qcom,iommu"),
Stepan Moskovchenkob26b8ca2012-07-24 19:42:44 -07005226 CLK_LOOKUP("alt_core_clk", venus0_vcodec0_clk.c, "fdc84000.qcom,iommu"),
Sathish Ambleyd1b89ed2012-02-07 21:47:47 -08005227 CLK_LOOKUP("core_clk", venus0_axi_clk.c, "fdc84000.qcom,iommu"),
5228 CLK_LOOKUP("bus_clk", venus0_axi_clk.c, ""),
Tianyi Gou828798d2012-05-02 21:12:38 -07005229 CLK_LOOKUP("src_clk", vcodec0_clk_src.c, "fdce0000.qcom,venus"),
5230 CLK_LOOKUP("core_clk", venus0_vcodec0_clk.c, "fdce0000.qcom,venus"),
5231 CLK_LOOKUP("iface_clk", venus0_ahb_clk.c, "fdce0000.qcom,venus"),
5232 CLK_LOOKUP("bus_clk", venus0_axi_clk.c, "fdce0000.qcom,venus"),
5233 CLK_LOOKUP("mem_clk", venus0_ocmemnoc_clk.c, "fdce0000.qcom,venus"),
Vinay Kalia40680aa2012-07-23 12:45:39 -07005234 CLK_LOOKUP("core_clk", venus0_vcodec0_clk.c, "fdc00000.qcom,vidc"),
5235 CLK_LOOKUP("iface_clk", venus0_ahb_clk.c, "fdc00000.qcom,vidc"),
5236 CLK_LOOKUP("bus_clk", venus0_axi_clk.c, "fdc00000.qcom,vidc"),
5237 CLK_LOOKUP("mem_clk", venus0_ocmemnoc_clk.c, "fdc00000.qcom,vidc"),
Tianyi Gou828798d2012-05-02 21:12:38 -07005238
Matt Wagantall5900b7b2013-04-11 15:45:17 -07005239 CLK_LOOKUP("core_clk", venus0_vcodec0_clk.c, "fd8c1024.qcom,gdsc"),
5240 CLK_LOOKUP("core_clk", mdss_mdp_clk.c, "fd8c2304.qcom,gdsc"),
5241 CLK_LOOKUP("lut_clk", mdss_mdp_lut_clk.c, "fd8c2304.qcom,gdsc"),
5242 CLK_LOOKUP("core0_clk", camss_jpeg_jpeg0_clk.c, "fd8c35a4.qcom,gdsc"),
5243 CLK_LOOKUP("core1_clk", camss_jpeg_jpeg1_clk.c, "fd8c35a4.qcom,gdsc"),
5244 CLK_LOOKUP("core2_clk", camss_jpeg_jpeg2_clk.c, "fd8c35a4.qcom,gdsc"),
5245 CLK_LOOKUP("core0_clk", camss_vfe_vfe0_clk.c, "fd8c36a4.qcom,gdsc"),
5246 CLK_LOOKUP("core1_clk", camss_vfe_vfe1_clk.c, "fd8c36a4.qcom,gdsc"),
5247 CLK_LOOKUP("csi0_clk", camss_csi_vfe0_clk.c, "fd8c36a4.qcom,gdsc"),
5248 CLK_LOOKUP("csi1_clk", camss_csi_vfe1_clk.c, "fd8c36a4.qcom,gdsc"),
5249 CLK_LOOKUP("cpp_clk", camss_vfe_cpp_clk.c, "fd8c36a4.qcom,gdsc"),
Matt Wagantall3ef52422013-04-10 20:29:19 -07005250 CLK_LOOKUP("core_clk", oxili_gfx3d_clk.c, "fd8c4024.qcom,gdsc"),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005251
5252 /* LPASS clocks */
Tianyi Gou7fea5da2012-12-06 15:56:31 -08005253 CLK_LOOKUP("bus_clk", gcc_mss_q6_bimc_axi_clk.c, "fc880000.qcom,mss"),
5254 CLK_LOOKUP("iface_clk", gcc_mss_cfg_ahb_clk.c, "fc880000.qcom,mss"),
5255 CLK_LOOKUP("mem_clk", gcc_boot_rom_ahb_clk.c, "fc880000.qcom,mss"),
Vikram Mulukutla31926eb2012-08-12 19:58:08 -07005256
Tianyi Gou7fea5da2012-12-06 15:56:31 -08005257 CLK_LOOKUP("core_clk", q6ss_xo_clk.c, "fe200000.qcom,lpass"),
5258 CLK_LOOKUP("bus_clk", gcc_lpass_q6_axi_clk.c, "fe200000.qcom,lpass"),
5259 CLK_LOOKUP("iface_clk", q6ss_ahb_lfabif_clk.c, "fe200000.qcom,lpass"),
5260 CLK_LOOKUP("reg_clk", q6ss_ahbm_clk.c, "fe200000.qcom,lpass"),
Hariprasad Dhalinarasimhade991f02012-05-31 13:15:51 -07005261 CLK_LOOKUP("core_clk", gcc_prng_ahb_clk.c, "msm_rng"),
Vikram Mulukutlaa967db42012-05-10 16:20:40 -07005262
Vikram Mulukutlab0ad9f32012-07-03 12:57:24 -07005263 CLK_LOOKUP("dfab_clk", pnoc_sps_clk.c, "msm_sps"),
Vikram Mulukutlad08a1522012-05-24 15:24:01 -07005264
5265 CLK_LOOKUP("bus_clk", snoc_clk.c, ""),
5266 CLK_LOOKUP("bus_clk", pnoc_clk.c, ""),
5267 CLK_LOOKUP("bus_clk", cnoc_clk.c, ""),
5268 CLK_LOOKUP("mem_clk", bimc_clk.c, ""),
5269 CLK_LOOKUP("mem_clk", ocmemgx_clk.c, ""),
5270 CLK_LOOKUP("bus_clk", snoc_a_clk.c, ""),
5271 CLK_LOOKUP("bus_clk", pnoc_a_clk.c, ""),
5272 CLK_LOOKUP("bus_clk", cnoc_a_clk.c, ""),
5273 CLK_LOOKUP("mem_clk", bimc_a_clk.c, ""),
5274 CLK_LOOKUP("mem_clk", ocmemgx_a_clk.c, ""),
5275
5276 CLK_LOOKUP("bus_clk", cnoc_msmbus_clk.c, "msm_config_noc"),
5277 CLK_LOOKUP("bus_a_clk", cnoc_msmbus_a_clk.c, "msm_config_noc"),
5278 CLK_LOOKUP("bus_clk", snoc_msmbus_clk.c, "msm_sys_noc"),
5279 CLK_LOOKUP("bus_a_clk", snoc_msmbus_a_clk.c, "msm_sys_noc"),
5280 CLK_LOOKUP("bus_clk", pnoc_msmbus_clk.c, "msm_periph_noc"),
5281 CLK_LOOKUP("bus_a_clk", pnoc_msmbus_a_clk.c, "msm_periph_noc"),
5282 CLK_LOOKUP("mem_clk", bimc_msmbus_clk.c, "msm_bimc"),
5283 CLK_LOOKUP("mem_a_clk", bimc_msmbus_a_clk.c, "msm_bimc"),
5284 CLK_LOOKUP("mem_clk", bimc_acpu_a_clk.c, ""),
5285 CLK_LOOKUP("ocmem_clk", ocmemgx_msmbus_clk.c, "msm_bus"),
5286 CLK_LOOKUP("ocmem_a_clk", ocmemgx_msmbus_a_clk.c, "msm_bus"),
5287 CLK_LOOKUP("bus_clk", ocmemnoc_clk.c, "msm_ocmem_noc"),
5288 CLK_LOOKUP("bus_a_clk", ocmemnoc_clk.c, "msm_ocmem_noc"),
Vikram Mulukutlac15dac02012-08-09 13:31:08 -07005289 CLK_LOOKUP("bus_clk", mmss_s0_axi_clk.c, "msm_mmss_noc"),
5290 CLK_LOOKUP("bus_a_clk", mmss_s0_axi_clk.c, "msm_mmss_noc"),
Vikram Mulukutla274b2d92012-07-13 15:53:04 -07005291 CLK_LOOKUP("iface_clk", gcc_mmss_noc_cfg_ahb_clk.c, ""),
5292 CLK_LOOKUP("iface_clk", gcc_ocmem_noc_cfg_ahb_clk.c, ""),
Vikram Mulukutla0f63e002012-06-28 14:29:44 -07005293
Pratik Pateld8204a12013-02-07 18:36:55 -08005294 /* CoreSight clocks */
5295 CLK_LOOKUP("core_clk", qdss_clk.c, "fc322000.tmc"),
5296 CLK_LOOKUP("core_clk", qdss_clk.c, "fc318000.tpiu"),
5297 CLK_LOOKUP("core_clk", qdss_clk.c, "fc31c000.replicator"),
5298 CLK_LOOKUP("core_clk", qdss_clk.c, "fc307000.tmc"),
5299 CLK_LOOKUP("core_clk", qdss_clk.c, "fc31b000.funnel"),
5300 CLK_LOOKUP("core_clk", qdss_clk.c, "fc319000.funnel"),
5301 CLK_LOOKUP("core_clk", qdss_clk.c, "fc31a000.funnel"),
5302 CLK_LOOKUP("core_clk", qdss_clk.c, "fc345000.funnel"),
5303 CLK_LOOKUP("core_clk", qdss_clk.c, "fc364000.funnel"),
5304 CLK_LOOKUP("core_clk", qdss_clk.c, "fc321000.stm"),
5305 CLK_LOOKUP("core_clk", qdss_clk.c, "fc33c000.etm"),
5306 CLK_LOOKUP("core_clk", qdss_clk.c, "fc33d000.etm"),
5307 CLK_LOOKUP("core_clk", qdss_clk.c, "fc33e000.etm"),
5308 CLK_LOOKUP("core_clk", qdss_clk.c, "fc33f000.etm"),
Pratik Patel6bcbe7b2013-02-08 11:54:28 -08005309 CLK_LOOKUP("core_clk", qdss_clk.c, "fc308000.cti"),
5310 CLK_LOOKUP("core_clk", qdss_clk.c, "fc309000.cti"),
5311 CLK_LOOKUP("core_clk", qdss_clk.c, "fc30a000.cti"),
5312 CLK_LOOKUP("core_clk", qdss_clk.c, "fc30b000.cti"),
5313 CLK_LOOKUP("core_clk", qdss_clk.c, "fc30c000.cti"),
5314 CLK_LOOKUP("core_clk", qdss_clk.c, "fc30d000.cti"),
5315 CLK_LOOKUP("core_clk", qdss_clk.c, "fc30e000.cti"),
5316 CLK_LOOKUP("core_clk", qdss_clk.c, "fc30f000.cti"),
5317 CLK_LOOKUP("core_clk", qdss_clk.c, "fc310000.cti"),
5318 CLK_LOOKUP("core_clk", qdss_clk.c, "fc340000.cti"),
5319 CLK_LOOKUP("core_clk", qdss_clk.c, "fc341000.cti"),
5320 CLK_LOOKUP("core_clk", qdss_clk.c, "fc342000.cti"),
5321 CLK_LOOKUP("core_clk", qdss_clk.c, "fc343000.cti"),
5322 CLK_LOOKUP("core_clk", qdss_clk.c, "fc344000.cti"),
Aparna Das9392ffe2013-04-02 14:08:40 -07005323 CLK_LOOKUP("core_clk", qdss_clk.c, "fdf30018.hwevent"),
Vikram Mulukutla0f63e002012-06-28 14:29:44 -07005324
Pratik Pateld8204a12013-02-07 18:36:55 -08005325 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc322000.tmc"),
5326 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc318000.tpiu"),
5327 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc31c000.replicator"),
5328 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc307000.tmc"),
5329 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc31b000.funnel"),
5330 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc319000.funnel"),
5331 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc31a000.funnel"),
5332 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc345000.funnel"),
5333 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc364000.funnel"),
5334 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc321000.stm"),
5335 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc33c000.etm"),
5336 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc33d000.etm"),
5337 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc33e000.etm"),
5338 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc33f000.etm"),
Pratik Patel6bcbe7b2013-02-08 11:54:28 -08005339 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc308000.cti"),
5340 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc309000.cti"),
5341 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc30a000.cti"),
5342 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc30b000.cti"),
5343 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc30c000.cti"),
5344 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc30d000.cti"),
5345 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc30e000.cti"),
5346 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc30f000.cti"),
5347 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc310000.cti"),
5348 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc340000.cti"),
5349 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc341000.cti"),
5350 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc342000.cti"),
5351 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc343000.cti"),
5352 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc344000.cti"),
Aparna Das9392ffe2013-04-02 14:08:40 -07005353 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fdf30018.hwevent"),
5354
5355 CLK_LOOKUP("core_mmss_clk", mmss_misc_ahb_clk.c, "fdf30018.hwevent"),
Matt Wagantalledf2fad2012-08-06 16:11:46 -07005356
5357 CLK_LOOKUP("l2_m_clk", l2_m_clk, ""),
5358 CLK_LOOKUP("krait0_m_clk", krait0_m_clk, ""),
5359 CLK_LOOKUP("krait1_m_clk", krait1_m_clk, ""),
5360 CLK_LOOKUP("krait2_m_clk", krait2_m_clk, ""),
5361 CLK_LOOKUP("krait3_m_clk", krait3_m_clk, ""),
Vikram Mulukutla4c93ce72013-05-02 20:16:49 -07005362
5363 /* DSI PLL clocks */
5364 CLK_LOOKUP("", dsi_vco_clk_8974.c, ""),
5365 CLK_LOOKUP("", analog_postdiv_clk_8974.c, ""),
5366 CLK_LOOKUP("", indirect_path_div2_clk_8974.c, ""),
5367 CLK_LOOKUP("", pixel_clk_src_8974.c, ""),
5368 CLK_LOOKUP("", byte_mux_8974.c, ""),
5369 CLK_LOOKUP("", byte_clk_src_8974.c, ""),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005370};
5371
Junjie Wua043bb22013-06-17 11:14:23 -07005372static struct clk_lookup msm_clocks_8974[ARRAY_SIZE(msm_clocks_8974_common)
5373 + ARRAY_SIZE(msm_clocks_8974ac_only)];
5374
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005375static struct pll_config_regs mmpll0_regs __initdata = {
5376 .l_reg = (void __iomem *)MMPLL0_L_REG,
5377 .m_reg = (void __iomem *)MMPLL0_M_REG,
5378 .n_reg = (void __iomem *)MMPLL0_N_REG,
5379 .config_reg = (void __iomem *)MMPLL0_USER_CTL_REG,
5380 .mode_reg = (void __iomem *)MMPLL0_MODE_REG,
5381 .base = &virt_bases[MMSS_BASE],
5382};
5383
5384/* MMPLL0 at 800 MHz, main output enabled. */
5385static struct pll_config mmpll0_config __initdata = {
5386 .l = 0x29,
5387 .m = 0x2,
5388 .n = 0x3,
5389 .vco_val = 0x0,
5390 .vco_mask = BM(21, 20),
5391 .pre_div_val = 0x0,
5392 .pre_div_mask = BM(14, 12),
5393 .post_div_val = 0x0,
5394 .post_div_mask = BM(9, 8),
5395 .mn_ena_val = BIT(24),
5396 .mn_ena_mask = BIT(24),
5397 .main_output_val = BIT(0),
5398 .main_output_mask = BIT(0),
5399};
5400
5401static struct pll_config_regs mmpll1_regs __initdata = {
5402 .l_reg = (void __iomem *)MMPLL1_L_REG,
5403 .m_reg = (void __iomem *)MMPLL1_M_REG,
5404 .n_reg = (void __iomem *)MMPLL1_N_REG,
5405 .config_reg = (void __iomem *)MMPLL1_USER_CTL_REG,
5406 .mode_reg = (void __iomem *)MMPLL1_MODE_REG,
5407 .base = &virt_bases[MMSS_BASE],
5408};
5409
Vikram Mulukutla293c4692013-01-03 15:09:47 -08005410/* MMPLL1 at 846 MHz, main output enabled. */
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005411static struct pll_config mmpll1_config __initdata = {
Vikram Mulukutlad16a8f12012-07-20 13:33:45 -07005412 .l = 0x2C,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005413 .m = 0x1,
Vikram Mulukutlad16a8f12012-07-20 13:33:45 -07005414 .n = 0x10,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005415 .vco_val = 0x0,
5416 .vco_mask = BM(21, 20),
5417 .pre_div_val = 0x0,
5418 .pre_div_mask = BM(14, 12),
5419 .post_div_val = 0x0,
5420 .post_div_mask = BM(9, 8),
5421 .mn_ena_val = BIT(24),
5422 .mn_ena_mask = BIT(24),
5423 .main_output_val = BIT(0),
5424 .main_output_mask = BIT(0),
5425};
5426
Vikram Mulukutla293c4692013-01-03 15:09:47 -08005427/* MMPLL1 at 1167 MHz, main output enabled. */
5428static struct pll_config mmpll1_v2_config __initdata = {
5429 .l = 60,
5430 .m = 25,
5431 .n = 32,
5432 .vco_val = 0x0,
5433 .vco_mask = BM(21, 20),
5434 .pre_div_val = 0x0,
5435 .pre_div_mask = BM(14, 12),
5436 .post_div_val = 0x0,
5437 .post_div_mask = BM(9, 8),
5438 .mn_ena_val = BIT(24),
5439 .mn_ena_mask = BIT(24),
5440 .main_output_val = BIT(0),
5441 .main_output_mask = BIT(0),
5442};
5443
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005444static struct pll_config_regs mmpll3_regs __initdata = {
5445 .l_reg = (void __iomem *)MMPLL3_L_REG,
5446 .m_reg = (void __iomem *)MMPLL3_M_REG,
5447 .n_reg = (void __iomem *)MMPLL3_N_REG,
5448 .config_reg = (void __iomem *)MMPLL3_USER_CTL_REG,
5449 .mode_reg = (void __iomem *)MMPLL3_MODE_REG,
5450 .base = &virt_bases[MMSS_BASE],
5451};
5452
5453/* MMPLL3 at 820 MHz, main output enabled. */
5454static struct pll_config mmpll3_config __initdata = {
5455 .l = 0x2A,
5456 .m = 0x11,
5457 .n = 0x18,
5458 .vco_val = 0x0,
5459 .vco_mask = BM(21, 20),
5460 .pre_div_val = 0x0,
5461 .pre_div_mask = BM(14, 12),
5462 .post_div_val = 0x0,
5463 .post_div_mask = BM(9, 8),
5464 .mn_ena_val = BIT(24),
5465 .mn_ena_mask = BIT(24),
5466 .main_output_val = BIT(0),
5467 .main_output_mask = BIT(0),
5468};
5469
Vikram Mulukutla293c4692013-01-03 15:09:47 -08005470/* MMPLL3 at 930 MHz, main output enabled. */
5471static struct pll_config mmpll3_v2_config __initdata = {
5472 .l = 48,
5473 .m = 7,
5474 .n = 16,
5475 .vco_val = 0x0,
5476 .vco_mask = BM(21, 20),
5477 .pre_div_val = 0x0,
5478 .pre_div_mask = BM(14, 12),
5479 .post_div_val = 0x0,
5480 .post_div_mask = BM(9, 8),
5481 .mn_ena_val = BIT(24),
5482 .mn_ena_mask = BIT(24),
5483 .main_output_val = BIT(0),
5484 .main_output_mask = BIT(0),
5485};
5486
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005487static void __init reg_init(void)
5488{
Vikram Mulukutla6cce1552013-02-12 19:08:59 -08005489 u32 regval;
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005490
Vikram Mulukutla6da35d32012-07-18 13:55:31 -07005491 configure_sr_hpm_lp_pll(&mmpll0_config, &mmpll0_regs, 1);
Vikram Mulukutla293c4692013-01-03 15:09:47 -08005492
5493 if (SOCINFO_VERSION_MAJOR(socinfo_get_version()) == 2) {
5494 configure_sr_hpm_lp_pll(&mmpll1_v2_config, &mmpll1_regs, 1);
5495 configure_sr_hpm_lp_pll(&mmpll3_v2_config, &mmpll3_regs, 0);
5496 } else {
5497 configure_sr_hpm_lp_pll(&mmpll1_config, &mmpll1_regs, 1);
5498 configure_sr_hpm_lp_pll(&mmpll3_config, &mmpll3_regs, 0);
5499 }
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005500
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005501 /* Vote for GPLL0 to turn on. Needed by acpuclock. */
5502 regval = readl_relaxed(GCC_REG_BASE(APCS_GPLL_ENA_VOTE_REG));
5503 regval |= BIT(0);
5504 writel_relaxed(regval, GCC_REG_BASE(APCS_GPLL_ENA_VOTE_REG));
5505
5506 /*
Vikram Mulukutla4e2a89c2013-02-06 22:39:38 -08005507 * V2 requires additional votes to allow the LPASS and MMSS
5508 * controllers to use GPLL0.
5509 */
5510 if (SOCINFO_VERSION_MAJOR(socinfo_get_version()) == 2) {
5511 regval = readl_relaxed(
5512 GCC_REG_BASE(APCS_CLOCK_BRANCH_ENA_VOTE));
5513 writel_relaxed(regval | BIT(26) | BIT(25),
5514 GCC_REG_BASE(APCS_CLOCK_BRANCH_ENA_VOTE));
5515 }
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005516}
5517
Abhimanyu Kapur90ced6e2012-06-26 17:41:25 -07005518static void __init msm8974_clock_post_init(void)
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005519{
Vikram Mulukutla293c4692013-01-03 15:09:47 -08005520 if (SOCINFO_VERSION_MAJOR(socinfo_get_version()) == 2) {
Vikram Mulukutla66cabd32013-02-22 11:05:13 -08005521 clk_set_rate(&axi_clk_src.c, 291750000);
5522 clk_set_rate(&ocmemnoc_clk_src.c, 291750000);
Vikram Mulukutla293c4692013-01-03 15:09:47 -08005523 } else {
5524 clk_set_rate(&axi_clk_src.c, 282000000);
5525 clk_set_rate(&ocmemnoc_clk_src.c, 282000000);
5526 }
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005527
Vikram Mulukutlaf8634bb2012-06-28 16:21:21 -07005528 /*
Vikram Mulukutla09e20812012-07-12 11:32:42 -07005529 * Hold an active set vote at a rate of 40MHz for the MMSS NOC AHB
5530 * source. Sleep set vote is 0.
5531 */
5532 clk_set_rate(&mmssnoc_ahb_a_clk.c, 40000000);
5533 clk_prepare_enable(&mmssnoc_ahb_a_clk.c);
5534
5535 /*
Vikram Mulukutlaf8634bb2012-06-28 16:21:21 -07005536 * Hold an active set vote for CXO; this is because CXO is expected
5537 * to remain on whenever CPUs aren't power collapsed.
5538 */
5539 clk_prepare_enable(&cxo_a_clk_src.c);
5540
Vikram Mulukutla274b2d92012-07-13 15:53:04 -07005541 /*
5542 * TODO: Temporarily enable NOC configuration AHB clocks. Remove when
5543 * the bus driver is ready.
5544 */
5545 clk_prepare_enable(&gcc_mmss_noc_cfg_ahb_clk.c);
5546 clk_prepare_enable(&gcc_ocmem_noc_cfg_ahb_clk.c);
5547
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005548 /* Set rates for single-rate clocks. */
5549 clk_set_rate(&usb30_master_clk_src.c,
5550 usb30_master_clk_src.freq_tbl[0].freq_hz);
5551 clk_set_rate(&tsif_ref_clk_src.c,
5552 tsif_ref_clk_src.freq_tbl[0].freq_hz);
5553 clk_set_rate(&usb_hs_system_clk_src.c,
5554 usb_hs_system_clk_src.freq_tbl[0].freq_hz);
5555 clk_set_rate(&usb_hsic_clk_src.c,
5556 usb_hsic_clk_src.freq_tbl[0].freq_hz);
5557 clk_set_rate(&usb_hsic_io_cal_clk_src.c,
5558 usb_hsic_io_cal_clk_src.freq_tbl[0].freq_hz);
5559 clk_set_rate(&usb_hsic_system_clk_src.c,
5560 usb_hsic_system_clk_src.freq_tbl[0].freq_hz);
5561 clk_set_rate(&usb30_mock_utmi_clk_src.c,
5562 usb30_mock_utmi_clk_src.freq_tbl[0].freq_hz);
5563 clk_set_rate(&pdm2_clk_src.c, pdm2_clk_src.freq_tbl[0].freq_hz);
5564 clk_set_rate(&cci_clk_src.c, cci_clk_src.freq_tbl[0].freq_hz);
5565 clk_set_rate(&mclk0_clk_src.c, mclk0_clk_src.freq_tbl[0].freq_hz);
5566 clk_set_rate(&mclk1_clk_src.c, mclk1_clk_src.freq_tbl[0].freq_hz);
5567 clk_set_rate(&mclk2_clk_src.c, mclk2_clk_src.freq_tbl[0].freq_hz);
5568 clk_set_rate(&edpaux_clk_src.c, edpaux_clk_src.freq_tbl[0].freq_hz);
5569 clk_set_rate(&esc0_clk_src.c, esc0_clk_src.freq_tbl[0].freq_hz);
5570 clk_set_rate(&esc1_clk_src.c, esc1_clk_src.freq_tbl[0].freq_hz);
5571 clk_set_rate(&hdmi_clk_src.c, hdmi_clk_src.freq_tbl[0].freq_hz);
5572 clk_set_rate(&vsync_clk_src.c, vsync_clk_src.freq_tbl[0].freq_hz);
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005573}
5574
Matt Wagantalledf2fad2012-08-06 16:11:46 -07005575#define GCC_CC_PHYS 0xFC400000
5576#define GCC_CC_SIZE SZ_16K
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005577
Matt Wagantalledf2fad2012-08-06 16:11:46 -07005578#define MMSS_CC_PHYS 0xFD8C0000
5579#define MMSS_CC_SIZE SZ_256K
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005580
Matt Wagantalledf2fad2012-08-06 16:11:46 -07005581#define LPASS_CC_PHYS 0xFE000000
5582#define LPASS_CC_SIZE SZ_256K
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005583
Matt Wagantalledf2fad2012-08-06 16:11:46 -07005584#define APCS_GCC_CC_PHYS 0xF9011000
5585#define APCS_GCC_CC_SIZE SZ_4K
Vikram Mulukutlaa967db42012-05-10 16:20:40 -07005586
Vikram Mulukutlaa57e6e42013-01-23 16:58:08 -08005587static struct clk *qup_i2c_clks[][2] __initdata = {
5588 {&gcc_blsp1_qup1_i2c_apps_clk.c, &blsp1_qup1_i2c_apps_clk_src.c,},
5589 {&gcc_blsp1_qup2_i2c_apps_clk.c, &blsp1_qup2_i2c_apps_clk_src.c,},
5590 {&gcc_blsp1_qup3_i2c_apps_clk.c, &blsp1_qup3_i2c_apps_clk_src.c,},
5591 {&gcc_blsp1_qup4_i2c_apps_clk.c, &blsp1_qup4_i2c_apps_clk_src.c,},
5592 {&gcc_blsp1_qup5_i2c_apps_clk.c, &blsp1_qup5_i2c_apps_clk_src.c,},
5593 {&gcc_blsp1_qup6_i2c_apps_clk.c, &blsp1_qup6_i2c_apps_clk_src.c,},
5594 {&gcc_blsp2_qup1_i2c_apps_clk.c, &blsp2_qup1_i2c_apps_clk_src.c,},
5595 {&gcc_blsp2_qup2_i2c_apps_clk.c, &blsp2_qup2_i2c_apps_clk_src.c,},
5596 {&gcc_blsp2_qup3_i2c_apps_clk.c, &blsp2_qup3_i2c_apps_clk_src.c,},
5597 {&gcc_blsp2_qup4_i2c_apps_clk.c, &blsp2_qup4_i2c_apps_clk_src.c,},
5598 {&gcc_blsp2_qup5_i2c_apps_clk.c, &blsp2_qup5_i2c_apps_clk_src.c,},
5599 {&gcc_blsp2_qup6_i2c_apps_clk.c, &blsp2_qup6_i2c_apps_clk_src.c,},
5600};
5601
Junjie Wu5e905ea2013-06-07 15:47:20 -07005602/* v1 to v2 clock changes */
5603static void __init msm8974_v2_clock_override(void)
5604{
5605 int i;
5606
5607 mmpll3_clk_src.c.rate = 930000000;
5608 mmpll1_clk_src.c.rate = 1167000000;
5609 mmpll1_clk_src.c.fmax[VDD_DIG_NOMINAL] = 1167000000;
5610
5611 ocmemnoc_clk_src.freq_tbl = ftbl_ocmemnoc_v2_clk;
5612 ocmemnoc_clk_src.c.fmax[VDD_DIG_NOMINAL] = 291750000;
5613
5614 axi_clk_src.freq_tbl = ftbl_mmss_axi_v2_clk;
5615 axi_clk_src.c.fmax[VDD_DIG_NOMINAL] = 291750000;
5616 axi_clk_src.c.fmax[VDD_DIG_HIGH] = 466800000;
5617
5618 vcodec0_clk_src.freq_tbl = ftbl_venus0_vcodec0_v2_clk;
5619 vcodec0_clk_src.c.fmax[VDD_DIG_HIGH] = 465000000;
5620
5621 mdp_clk_src.c.fmax[VDD_DIG_NOMINAL] = 240000000;
5622
5623 /* The parent of each of the QUP I2C clocks is an RCG on V2 */
5624 for (i = 0; i < ARRAY_SIZE(qup_i2c_clks); i++)
5625 qup_i2c_clks[i][0]->parent = qup_i2c_clks[i][1];
5626}
5627
5628/* v2 to v3 clock changes */
5629static void __init msm8974_v3_clock_override(void)
5630{
5631 ce1_clk_src.c.fmax[VDD_DIG_LOW] = 75000000;
5632 ce1_clk_src.c.fmax[VDD_DIG_NOMINAL] = 150000000;
5633 ce1_clk_src.freq_tbl = ftbl_gcc_ce1_v3_clk;
5634 ce2_clk_src.c.fmax[VDD_DIG_LOW] = 75000000;
5635 ce2_clk_src.c.fmax[VDD_DIG_NOMINAL] = 150000000;
5636 ce2_clk_src.freq_tbl = ftbl_gcc_ce2_v3_clk;
5637
5638 sdcc1_apps_clk_src.c.fmax[VDD_DIG_LOW] = 200000000;
5639 sdcc1_apps_clk_src.c.fmax[VDD_DIG_NOMINAL] = 400000000;
5640
5641 vfe0_clk_src.c.fmax[VDD_DIG_LOW] = 150000000;
5642 vfe0_clk_src.c.fmax[VDD_DIG_NOMINAL] = 320000000;
5643 vfe0_clk_src.c.fmax[VDD_DIG_HIGH] = 465000000;
5644 vfe1_clk_src.c.fmax[VDD_DIG_LOW] = 150000000;
5645 vfe1_clk_src.c.fmax[VDD_DIG_NOMINAL] = 320000000;
5646 vfe1_clk_src.c.fmax[VDD_DIG_HIGH] = 465000000;
5647 cpp_clk_src.c.fmax[VDD_DIG_LOW] = 150000000;
5648 cpp_clk_src.c.fmax[VDD_DIG_NOMINAL] = 320000000;
5649 cpp_clk_src.c.fmax[VDD_DIG_HIGH] = 465000000;
5650
5651 mdp_clk_src.c.fmax[VDD_DIG_NOMINAL] = 266670000;
5652
5653 mclk0_clk_src.freq_tbl = ftbl_camss_mclk0_3_v3_clk;
5654 mclk1_clk_src.freq_tbl = ftbl_camss_mclk0_3_v3_clk;
5655 mclk2_clk_src.freq_tbl = ftbl_camss_mclk0_3_v3_clk;
5656 mclk3_clk_src.freq_tbl = ftbl_camss_mclk0_3_v3_clk;
5657 mclk0_clk_src.set_rate = set_rate_mnd;
5658 mclk1_clk_src.set_rate = set_rate_mnd;
5659 mclk2_clk_src.set_rate = set_rate_mnd;
5660 mclk3_clk_src.set_rate = set_rate_mnd;
Junjie Wua043bb22013-06-17 11:14:23 -07005661 mclk0_clk_src.c.ops = &clk_ops_rcg_mnd;
5662 mclk1_clk_src.c.ops = &clk_ops_rcg_mnd;
5663 mclk2_clk_src.c.ops = &clk_ops_rcg_mnd;
5664 mclk3_clk_src.c.ops = &clk_ops_rcg_mnd;
Junjie Wu5e905ea2013-06-07 15:47:20 -07005665}
5666
Abhimanyu Kapur90ced6e2012-06-26 17:41:25 -07005667static void __init msm8974_clock_pre_init(void)
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005668{
5669 virt_bases[GCC_BASE] = ioremap(GCC_CC_PHYS, GCC_CC_SIZE);
5670 if (!virt_bases[GCC_BASE])
Abhimanyu Kapur90ced6e2012-06-26 17:41:25 -07005671 panic("clock-8974: Unable to ioremap GCC memory!");
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005672
5673 virt_bases[MMSS_BASE] = ioremap(MMSS_CC_PHYS, MMSS_CC_SIZE);
5674 if (!virt_bases[MMSS_BASE])
Abhimanyu Kapur90ced6e2012-06-26 17:41:25 -07005675 panic("clock-8974: Unable to ioremap MMSS_CC memory!");
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005676
5677 virt_bases[LPASS_BASE] = ioremap(LPASS_CC_PHYS, LPASS_CC_SIZE);
5678 if (!virt_bases[LPASS_BASE])
Abhimanyu Kapur90ced6e2012-06-26 17:41:25 -07005679 panic("clock-8974: Unable to ioremap LPASS_CC memory!");
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005680
Matt Wagantalledf2fad2012-08-06 16:11:46 -07005681 virt_bases[APCS_BASE] = ioremap(APCS_GCC_CC_PHYS, APCS_GCC_CC_SIZE);
5682 if (!virt_bases[APCS_BASE])
5683 panic("clock-8974: Unable to ioremap APCS_GCC_CC memory!");
5684
Vikram Mulukutla6da35d32012-07-18 13:55:31 -07005685 clk_ops_local_pll.enable = sr_hpm_lp_pll_clk_enable;
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005686
Patrick Dalyebc26bc2013-02-05 11:49:07 -08005687 vdd_dig.regulator[0] = regulator_get(NULL, "vdd_dig");
5688 if (IS_ERR(vdd_dig.regulator[0]))
Vikram Mulukutla19245e02012-07-23 15:58:04 -07005689 panic("clock-8974: Unable to get the vdd_dig regulator!");
Vikram Mulukutlab7a1a742012-05-30 17:24:33 -07005690
Vikram Mulukutla77140da2012-08-13 21:37:18 -07005691 enable_rpm_scaling();
5692
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005693 reg_init();
Vikram Mulukutla293c4692013-01-03 15:09:47 -08005694
Junjie Wua043bb22013-06-17 11:14:23 -07005695 memcpy(msm_clocks_8974, msm_clocks_8974_common,
5696 sizeof(msm_clocks_8974_common));
5697 msm8974_clock_init_data.size -= ARRAY_SIZE(msm_clocks_8974ac_only);
5698
Junjie Wu5e905ea2013-06-07 15:47:20 -07005699 /* version specific changes */
5700 if (SOCINFO_VERSION_MAJOR(socinfo_get_version()) >= 2)
5701 msm8974_v2_clock_override();
Junjie Wua043bb22013-06-17 11:14:23 -07005702 if (SOCINFO_VERSION_MAJOR(socinfo_get_version()) == 3) {
Junjie Wu5e905ea2013-06-07 15:47:20 -07005703 msm8974_v3_clock_override();
Junjie Wua043bb22013-06-17 11:14:23 -07005704 memcpy(msm_clocks_8974 + ARRAY_SIZE(msm_clocks_8974_common),
5705 msm_clocks_8974ac_only, sizeof(msm_clocks_8974ac_only));
5706 msm8974_clock_init_data.size +=
5707 ARRAY_SIZE(msm_clocks_8974ac_only);
5708 }
Siddhartha Agrawal4b0d5a62013-02-25 23:23:41 -08005709
Vikram Mulukutla4c93ce72013-05-02 20:16:49 -07005710 clk_ops_pixel_clock = clk_ops_pixel;
5711 clk_ops_pixel_clock.set_rate = set_rate_pixel;
5712 clk_ops_pixel_clock.round_rate = round_rate_pixel;
5713
Patrick Dalyadeeb472013-03-06 21:22:32 -08005714 /*
5715 * MDSS needs the ahb clock and needs to init before we register the
5716 * lookup table.
5717 */
5718 mdss_clk_ctrl_pre_init(&mdss_ahb_clk.c);
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005719}
5720
Vikram Mulukutla19245e02012-07-23 15:58:04 -07005721static void __init msm8974_rumi_clock_pre_init(void)
5722{
5723 virt_bases[GCC_BASE] = ioremap(GCC_CC_PHYS, GCC_CC_SIZE);
5724 if (!virt_bases[GCC_BASE])
5725 panic("clock-8974: Unable to ioremap GCC memory!");
5726
5727 /* SDCC clocks are partially emulated in the RUMI */
5728 sdcc1_apps_clk_src.freq_tbl = ftbl_gcc_sdcc_apps_rumi_clk;
5729 sdcc2_apps_clk_src.freq_tbl = ftbl_gcc_sdcc_apps_rumi_clk;
5730 sdcc3_apps_clk_src.freq_tbl = ftbl_gcc_sdcc_apps_rumi_clk;
5731 sdcc4_apps_clk_src.freq_tbl = ftbl_gcc_sdcc_apps_rumi_clk;
5732
Patrick Dalyebc26bc2013-02-05 11:49:07 -08005733 vdd_dig.regulator[0] = regulator_get(NULL, "vdd_dig");
5734 if (IS_ERR(vdd_dig.regulator[0]))
Vikram Mulukutla19245e02012-07-23 15:58:04 -07005735 panic("clock-8974: Unable to get the vdd_dig regulator!");
Vikram Mulukutla19245e02012-07-23 15:58:04 -07005736}
5737
Abhimanyu Kapur90ced6e2012-06-26 17:41:25 -07005738struct clock_init_data msm8974_clock_init_data __initdata = {
5739 .table = msm_clocks_8974,
5740 .size = ARRAY_SIZE(msm_clocks_8974),
5741 .pre_init = msm8974_clock_pre_init,
5742 .post_init = msm8974_clock_post_init,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005743};
Vikram Mulukutla19245e02012-07-23 15:58:04 -07005744
5745struct clock_init_data msm8974_rumi_clock_init_data __initdata = {
5746 .table = msm_clocks_8974_rumi,
5747 .size = ARRAY_SIZE(msm_clocks_8974_rumi),
5748 .pre_init = msm8974_rumi_clock_pre_init,
5749};