blob: aee0fd19222b41121bce3f2f1d743c26cb8a6f84 [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>
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -070022
Vikram Mulukutlab7a1a742012-05-30 17:24:33 -070023#include <mach/rpm-regulator-smd.h>
Vikram Mulukutla19245e02012-07-23 15:58:04 -070024#include <mach/socinfo.h>
Vikram Mulukutla77140da2012-08-13 21:37:18 -070025#include <mach/rpm-smd.h>
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -070026
27#include "clock-local2.h"
28#include "clock-pll.h"
Vikram Mulukutlad08a1522012-05-24 15:24:01 -070029#include "clock-rpm.h"
30#include "clock-voter.h"
Vikram Mulukutlafe0f5a52012-08-16 16:51:08 -070031#include "clock-mdss-8974.h"
Matt Wagantall33d01f52012-02-23 23:27:44 -080032#include "clock.h"
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -070033
34enum {
35 GCC_BASE,
36 MMSS_BASE,
37 LPASS_BASE,
Matt Wagantalledf2fad2012-08-06 16:11:46 -070038 APCS_BASE,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -070039 N_BASES,
40};
41
42static void __iomem *virt_bases[N_BASES];
43
44#define GCC_REG_BASE(x) (void __iomem *)(virt_bases[GCC_BASE] + (x))
45#define MMSS_REG_BASE(x) (void __iomem *)(virt_bases[MMSS_BASE] + (x))
46#define LPASS_REG_BASE(x) (void __iomem *)(virt_bases[LPASS_BASE] + (x))
Matt Wagantalledf2fad2012-08-06 16:11:46 -070047#define APCS_REG_BASE(x) (void __iomem *)(virt_bases[APCS_BASE] + (x))
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -070048
49#define GPLL0_MODE_REG 0x0000
50#define GPLL0_L_REG 0x0004
51#define GPLL0_M_REG 0x0008
52#define GPLL0_N_REG 0x000C
53#define GPLL0_USER_CTL_REG 0x0010
54#define GPLL0_CONFIG_CTL_REG 0x0014
55#define GPLL0_TEST_CTL_REG 0x0018
56#define GPLL0_STATUS_REG 0x001C
57
58#define GPLL1_MODE_REG 0x0040
59#define GPLL1_L_REG 0x0044
60#define GPLL1_M_REG 0x0048
61#define GPLL1_N_REG 0x004C
62#define GPLL1_USER_CTL_REG 0x0050
63#define GPLL1_CONFIG_CTL_REG 0x0054
64#define GPLL1_TEST_CTL_REG 0x0058
65#define GPLL1_STATUS_REG 0x005C
66
67#define MMPLL0_MODE_REG 0x0000
68#define MMPLL0_L_REG 0x0004
69#define MMPLL0_M_REG 0x0008
70#define MMPLL0_N_REG 0x000C
71#define MMPLL0_USER_CTL_REG 0x0010
72#define MMPLL0_CONFIG_CTL_REG 0x0014
73#define MMPLL0_TEST_CTL_REG 0x0018
74#define MMPLL0_STATUS_REG 0x001C
75
76#define MMPLL1_MODE_REG 0x0040
77#define MMPLL1_L_REG 0x0044
78#define MMPLL1_M_REG 0x0048
79#define MMPLL1_N_REG 0x004C
80#define MMPLL1_USER_CTL_REG 0x0050
81#define MMPLL1_CONFIG_CTL_REG 0x0054
82#define MMPLL1_TEST_CTL_REG 0x0058
83#define MMPLL1_STATUS_REG 0x005C
84
85#define MMPLL3_MODE_REG 0x0080
86#define MMPLL3_L_REG 0x0084
87#define MMPLL3_M_REG 0x0088
88#define MMPLL3_N_REG 0x008C
89#define MMPLL3_USER_CTL_REG 0x0090
90#define MMPLL3_CONFIG_CTL_REG 0x0094
91#define MMPLL3_TEST_CTL_REG 0x0098
92#define MMPLL3_STATUS_REG 0x009C
93
94#define LPAPLL_MODE_REG 0x0000
95#define LPAPLL_L_REG 0x0004
96#define LPAPLL_M_REG 0x0008
97#define LPAPLL_N_REG 0x000C
98#define LPAPLL_USER_CTL_REG 0x0010
99#define LPAPLL_CONFIG_CTL_REG 0x0014
100#define LPAPLL_TEST_CTL_REG 0x0018
101#define LPAPLL_STATUS_REG 0x001C
102
103#define GCC_DEBUG_CLK_CTL_REG 0x1880
104#define CLOCK_FRQ_MEASURE_CTL_REG 0x1884
105#define CLOCK_FRQ_MEASURE_STATUS_REG 0x1888
106#define GCC_XO_DIV4_CBCR_REG 0x10C8
Matt Wagantall9a9b6f02012-08-07 23:12:26 -0700107#define GCC_PLLTEST_PAD_CFG_REG 0x188C
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700108#define APCS_GPLL_ENA_VOTE_REG 0x1480
109#define MMSS_PLL_VOTE_APCS_REG 0x0100
110#define MMSS_DEBUG_CLK_CTL_REG 0x0900
111#define LPASS_DEBUG_CLK_CTL_REG 0x29000
112#define LPASS_LPA_PLL_VOTE_APPS_REG 0x2000
113
Matt Wagantalledf2fad2012-08-06 16:11:46 -0700114#define GLB_CLK_DIAG_REG 0x001C
Matt Wagantall0976c4c2013-02-07 17:12:43 -0800115#define L2_CBCR_REG 0x004C
Matt Wagantalledf2fad2012-08-06 16:11:46 -0700116
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700117#define USB30_MASTER_CMD_RCGR 0x03D4
118#define USB30_MOCK_UTMI_CMD_RCGR 0x03E8
119#define USB_HSIC_SYSTEM_CMD_RCGR 0x041C
120#define USB_HSIC_CMD_RCGR 0x0440
121#define USB_HSIC_IO_CAL_CMD_RCGR 0x0458
122#define USB_HS_SYSTEM_CMD_RCGR 0x0490
Vikram Mulukutla3b98a6d2012-08-15 20:35:25 -0700123#define SYS_NOC_USB3_AXI_CBCR 0x0108
124#define USB30_SLEEP_CBCR 0x03CC
125#define USB2A_PHY_SLEEP_CBCR 0x04AC
126#define USB2B_PHY_SLEEP_CBCR 0x04B4
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700127#define SDCC1_APPS_CMD_RCGR 0x04D0
128#define SDCC2_APPS_CMD_RCGR 0x0510
129#define SDCC3_APPS_CMD_RCGR 0x0550
130#define SDCC4_APPS_CMD_RCGR 0x0590
131#define BLSP1_QUP1_SPI_APPS_CMD_RCGR 0x064C
Vikram Mulukutlaa57e6e42013-01-23 16:58:08 -0800132#define BLSP1_QUP1_I2C_APPS_CMD_RCGR 0x0660
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700133#define BLSP1_UART1_APPS_CMD_RCGR 0x068C
134#define BLSP1_QUP2_SPI_APPS_CMD_RCGR 0x06CC
Vikram Mulukutlaa57e6e42013-01-23 16:58:08 -0800135#define BLSP1_QUP2_I2C_APPS_CMD_RCGR 0x06E0
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700136#define BLSP1_UART2_APPS_CMD_RCGR 0x070C
137#define BLSP1_QUP3_SPI_APPS_CMD_RCGR 0x074C
Vikram Mulukutlaa57e6e42013-01-23 16:58:08 -0800138#define BLSP1_QUP3_I2C_APPS_CMD_RCGR 0x0760
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700139#define BLSP1_UART3_APPS_CMD_RCGR 0x078C
140#define BLSP1_QUP4_SPI_APPS_CMD_RCGR 0x07CC
Vikram Mulukutlaa57e6e42013-01-23 16:58:08 -0800141#define BLSP1_QUP4_I2C_APPS_CMD_RCGR 0x07E0
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700142#define BLSP1_UART4_APPS_CMD_RCGR 0x080C
143#define BLSP1_QUP5_SPI_APPS_CMD_RCGR 0x084C
Vikram Mulukutlaa57e6e42013-01-23 16:58:08 -0800144#define BLSP1_QUP5_I2C_APPS_CMD_RCGR 0x0860
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700145#define BLSP1_UART5_APPS_CMD_RCGR 0x088C
146#define BLSP1_QUP6_SPI_APPS_CMD_RCGR 0x08CC
Vikram Mulukutlaa57e6e42013-01-23 16:58:08 -0800147#define BLSP1_QUP6_I2C_APPS_CMD_RCGR 0x08E0
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700148#define BLSP1_UART6_APPS_CMD_RCGR 0x090C
149#define BLSP2_QUP1_SPI_APPS_CMD_RCGR 0x098C
Vikram Mulukutlaa57e6e42013-01-23 16:58:08 -0800150#define BLSP2_QUP1_I2C_APPS_CMD_RCGR 0x09A0
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700151#define BLSP2_UART1_APPS_CMD_RCGR 0x09CC
152#define BLSP2_QUP2_SPI_APPS_CMD_RCGR 0x0A0C
Vikram Mulukutlaa57e6e42013-01-23 16:58:08 -0800153#define BLSP2_QUP2_I2C_APPS_CMD_RCGR 0x0A20
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700154#define BLSP2_UART2_APPS_CMD_RCGR 0x0A4C
155#define BLSP2_QUP3_SPI_APPS_CMD_RCGR 0x0A8C
Vikram Mulukutlaa57e6e42013-01-23 16:58:08 -0800156#define BLSP2_QUP3_I2C_APPS_CMD_RCGR 0x0AA0
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700157#define BLSP2_UART3_APPS_CMD_RCGR 0x0ACC
158#define BLSP2_QUP4_SPI_APPS_CMD_RCGR 0x0B0C
Vikram Mulukutlaa57e6e42013-01-23 16:58:08 -0800159#define BLSP2_QUP4_I2C_APPS_CMD_RCGR 0x0B20
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700160#define BLSP2_UART4_APPS_CMD_RCGR 0x0B4C
161#define BLSP2_QUP5_SPI_APPS_CMD_RCGR 0x0B8C
Vikram Mulukutlaa57e6e42013-01-23 16:58:08 -0800162#define BLSP2_QUP5_I2C_APPS_CMD_RCGR 0x0BA0
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700163#define BLSP2_UART5_APPS_CMD_RCGR 0x0BCC
164#define BLSP2_QUP6_SPI_APPS_CMD_RCGR 0x0C0C
Vikram Mulukutlaa57e6e42013-01-23 16:58:08 -0800165#define BLSP2_QUP6_I2C_APPS_CMD_RCGR 0x0C20
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700166#define BLSP2_UART6_APPS_CMD_RCGR 0x0C4C
167#define PDM2_CMD_RCGR 0x0CD0
168#define TSIF_REF_CMD_RCGR 0x0D90
169#define CE1_CMD_RCGR 0x1050
170#define CE2_CMD_RCGR 0x1090
171#define GP1_CMD_RCGR 0x1904
172#define GP2_CMD_RCGR 0x1944
173#define GP3_CMD_RCGR 0x1984
174#define LPAIF_SPKR_CMD_RCGR 0xA000
175#define LPAIF_PRI_CMD_RCGR 0xB000
176#define LPAIF_SEC_CMD_RCGR 0xC000
177#define LPAIF_TER_CMD_RCGR 0xD000
178#define LPAIF_QUAD_CMD_RCGR 0xE000
179#define LPAIF_PCM0_CMD_RCGR 0xF000
180#define LPAIF_PCM1_CMD_RCGR 0x10000
181#define RESAMPLER_CMD_RCGR 0x11000
182#define SLIMBUS_CMD_RCGR 0x12000
183#define LPAIF_PCMOE_CMD_RCGR 0x13000
184#define AHBFABRIC_CMD_RCGR 0x18000
185#define VCODEC0_CMD_RCGR 0x1000
186#define PCLK0_CMD_RCGR 0x2000
187#define PCLK1_CMD_RCGR 0x2020
188#define MDP_CMD_RCGR 0x2040
189#define EXTPCLK_CMD_RCGR 0x2060
190#define VSYNC_CMD_RCGR 0x2080
191#define EDPPIXEL_CMD_RCGR 0x20A0
192#define EDPLINK_CMD_RCGR 0x20C0
193#define EDPAUX_CMD_RCGR 0x20E0
194#define HDMI_CMD_RCGR 0x2100
195#define BYTE0_CMD_RCGR 0x2120
196#define BYTE1_CMD_RCGR 0x2140
197#define ESC0_CMD_RCGR 0x2160
198#define ESC1_CMD_RCGR 0x2180
199#define CSI0PHYTIMER_CMD_RCGR 0x3000
200#define CSI1PHYTIMER_CMD_RCGR 0x3030
201#define CSI2PHYTIMER_CMD_RCGR 0x3060
202#define CSI0_CMD_RCGR 0x3090
203#define CSI1_CMD_RCGR 0x3100
204#define CSI2_CMD_RCGR 0x3160
205#define CSI3_CMD_RCGR 0x31C0
206#define CCI_CMD_RCGR 0x3300
207#define MCLK0_CMD_RCGR 0x3360
208#define MCLK1_CMD_RCGR 0x3390
209#define MCLK2_CMD_RCGR 0x33C0
210#define MCLK3_CMD_RCGR 0x33F0
211#define MMSS_GP0_CMD_RCGR 0x3420
212#define MMSS_GP1_CMD_RCGR 0x3450
213#define JPEG0_CMD_RCGR 0x3500
214#define JPEG1_CMD_RCGR 0x3520
215#define JPEG2_CMD_RCGR 0x3540
216#define VFE0_CMD_RCGR 0x3600
217#define VFE1_CMD_RCGR 0x3620
218#define CPP_CMD_RCGR 0x3640
219#define GFX3D_CMD_RCGR 0x4000
220#define RBCPR_CMD_RCGR 0x4060
221#define AHB_CMD_RCGR 0x5000
222#define AXI_CMD_RCGR 0x5040
223#define OCMEMNOC_CMD_RCGR 0x5090
Vikram Mulukutla274b2d92012-07-13 15:53:04 -0700224#define OCMEMCX_OCMEMNOC_CBCR 0x4058
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700225
226#define MMSS_BCR 0x0240
227#define USB_30_BCR 0x03C0
228#define USB3_PHY_BCR 0x03FC
229#define USB_HS_HSIC_BCR 0x0400
230#define USB_HS_BCR 0x0480
231#define SDCC1_BCR 0x04C0
232#define SDCC2_BCR 0x0500
233#define SDCC3_BCR 0x0540
234#define SDCC4_BCR 0x0580
235#define BLSP1_BCR 0x05C0
236#define BLSP1_QUP1_BCR 0x0640
237#define BLSP1_UART1_BCR 0x0680
238#define BLSP1_QUP2_BCR 0x06C0
239#define BLSP1_UART2_BCR 0x0700
240#define BLSP1_QUP3_BCR 0x0740
241#define BLSP1_UART3_BCR 0x0780
242#define BLSP1_QUP4_BCR 0x07C0
243#define BLSP1_UART4_BCR 0x0800
244#define BLSP1_QUP5_BCR 0x0840
245#define BLSP1_UART5_BCR 0x0880
246#define BLSP1_QUP6_BCR 0x08C0
247#define BLSP1_UART6_BCR 0x0900
248#define BLSP2_BCR 0x0940
249#define BLSP2_QUP1_BCR 0x0980
250#define BLSP2_UART1_BCR 0x09C0
251#define BLSP2_QUP2_BCR 0x0A00
252#define BLSP2_UART2_BCR 0x0A40
253#define BLSP2_QUP3_BCR 0x0A80
254#define BLSP2_UART3_BCR 0x0AC0
255#define BLSP2_QUP4_BCR 0x0B00
256#define BLSP2_UART4_BCR 0x0B40
257#define BLSP2_QUP5_BCR 0x0B80
258#define BLSP2_UART5_BCR 0x0BC0
259#define BLSP2_QUP6_BCR 0x0C00
260#define BLSP2_UART6_BCR 0x0C40
Vikram Mulukutlaa967db42012-05-10 16:20:40 -0700261#define BOOT_ROM_BCR 0x0E00
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700262#define PDM_BCR 0x0CC0
263#define PRNG_BCR 0x0D00
264#define BAM_DMA_BCR 0x0D40
265#define TSIF_BCR 0x0D80
266#define CE1_BCR 0x1040
267#define CE2_BCR 0x1080
268#define AUDIO_CORE_BCR 0x4000
269#define VENUS0_BCR 0x1020
270#define MDSS_BCR 0x2300
271#define CAMSS_PHY0_BCR 0x3020
272#define CAMSS_PHY1_BCR 0x3050
273#define CAMSS_PHY2_BCR 0x3080
274#define CAMSS_CSI0_BCR 0x30B0
275#define CAMSS_CSI0PHY_BCR 0x30C0
276#define CAMSS_CSI0RDI_BCR 0x30D0
277#define CAMSS_CSI0PIX_BCR 0x30E0
278#define CAMSS_CSI1_BCR 0x3120
279#define CAMSS_CSI1PHY_BCR 0x3130
280#define CAMSS_CSI1RDI_BCR 0x3140
281#define CAMSS_CSI1PIX_BCR 0x3150
282#define CAMSS_CSI2_BCR 0x3180
283#define CAMSS_CSI2PHY_BCR 0x3190
284#define CAMSS_CSI2RDI_BCR 0x31A0
285#define CAMSS_CSI2PIX_BCR 0x31B0
286#define CAMSS_CSI3_BCR 0x31E0
287#define CAMSS_CSI3PHY_BCR 0x31F0
288#define CAMSS_CSI3RDI_BCR 0x3200
289#define CAMSS_CSI3PIX_BCR 0x3210
290#define CAMSS_ISPIF_BCR 0x3220
291#define CAMSS_CCI_BCR 0x3340
292#define CAMSS_MCLK0_BCR 0x3380
293#define CAMSS_MCLK1_BCR 0x33B0
294#define CAMSS_MCLK2_BCR 0x33E0
295#define CAMSS_MCLK3_BCR 0x3410
296#define CAMSS_GP0_BCR 0x3440
297#define CAMSS_GP1_BCR 0x3470
298#define CAMSS_TOP_BCR 0x3480
299#define CAMSS_MICRO_BCR 0x3490
300#define CAMSS_JPEG_BCR 0x35A0
301#define CAMSS_VFE_BCR 0x36A0
302#define CAMSS_CSI_VFE0_BCR 0x3700
303#define CAMSS_CSI_VFE1_BCR 0x3710
304#define OCMEMNOC_BCR 0x50B0
305#define MMSSNOCAHB_BCR 0x5020
306#define MMSSNOCAXI_BCR 0x5060
307#define OXILI_GFX3D_CBCR 0x4028
308#define OXILICX_AHB_CBCR 0x403C
309#define OXILICX_AXI_CBCR 0x4038
310#define OXILI_BCR 0x4020
311#define OXILICX_BCR 0x4030
Vikram Mulukutlaa967db42012-05-10 16:20:40 -0700312#define LPASS_Q6SS_BCR 0x6000
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700313
314#define OCMEM_SYS_NOC_AXI_CBCR 0x0244
315#define OCMEM_NOC_CFG_AHB_CBCR 0x0248
316#define MMSS_NOC_CFG_AHB_CBCR 0x024C
317
318#define USB30_MASTER_CBCR 0x03C8
319#define USB30_MOCK_UTMI_CBCR 0x03D0
320#define USB_HSIC_AHB_CBCR 0x0408
321#define USB_HSIC_SYSTEM_CBCR 0x040C
322#define USB_HSIC_CBCR 0x0410
323#define USB_HSIC_IO_CAL_CBCR 0x0414
324#define USB_HS_SYSTEM_CBCR 0x0484
325#define USB_HS_AHB_CBCR 0x0488
326#define SDCC1_APPS_CBCR 0x04C4
327#define SDCC1_AHB_CBCR 0x04C8
328#define SDCC2_APPS_CBCR 0x0504
329#define SDCC2_AHB_CBCR 0x0508
330#define SDCC3_APPS_CBCR 0x0544
331#define SDCC3_AHB_CBCR 0x0548
332#define SDCC4_APPS_CBCR 0x0584
333#define SDCC4_AHB_CBCR 0x0588
334#define BLSP1_AHB_CBCR 0x05C4
335#define BLSP1_QUP1_SPI_APPS_CBCR 0x0644
336#define BLSP1_QUP1_I2C_APPS_CBCR 0x0648
337#define BLSP1_UART1_APPS_CBCR 0x0684
338#define BLSP1_UART1_SIM_CBCR 0x0688
339#define BLSP1_QUP2_SPI_APPS_CBCR 0x06C4
340#define BLSP1_QUP2_I2C_APPS_CBCR 0x06C8
341#define BLSP1_UART2_APPS_CBCR 0x0704
342#define BLSP1_UART2_SIM_CBCR 0x0708
343#define BLSP1_QUP3_SPI_APPS_CBCR 0x0744
344#define BLSP1_QUP3_I2C_APPS_CBCR 0x0748
345#define BLSP1_UART3_APPS_CBCR 0x0784
346#define BLSP1_UART3_SIM_CBCR 0x0788
347#define BLSP1_QUP4_SPI_APPS_CBCR 0x07C4
348#define BLSP1_QUP4_I2C_APPS_CBCR 0x07C8
349#define BLSP1_UART4_APPS_CBCR 0x0804
350#define BLSP1_UART4_SIM_CBCR 0x0808
351#define BLSP1_QUP5_SPI_APPS_CBCR 0x0844
352#define BLSP1_QUP5_I2C_APPS_CBCR 0x0848
353#define BLSP1_UART5_APPS_CBCR 0x0884
354#define BLSP1_UART5_SIM_CBCR 0x0888
355#define BLSP1_QUP6_SPI_APPS_CBCR 0x08C4
356#define BLSP1_QUP6_I2C_APPS_CBCR 0x08C8
357#define BLSP1_UART6_APPS_CBCR 0x0904
358#define BLSP1_UART6_SIM_CBCR 0x0908
359#define BLSP2_AHB_CBCR 0x0944
Vikram Mulukutlaa967db42012-05-10 16:20:40 -0700360#define BOOT_ROM_AHB_CBCR 0x0E04
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700361#define BLSP2_QUP1_SPI_APPS_CBCR 0x0984
362#define BLSP2_QUP1_I2C_APPS_CBCR 0x0988
363#define BLSP2_UART1_APPS_CBCR 0x09C4
364#define BLSP2_UART1_SIM_CBCR 0x09C8
365#define BLSP2_QUP2_SPI_APPS_CBCR 0x0A04
366#define BLSP2_QUP2_I2C_APPS_CBCR 0x0A08
367#define BLSP2_UART2_APPS_CBCR 0x0A44
368#define BLSP2_UART2_SIM_CBCR 0x0A48
369#define BLSP2_QUP3_SPI_APPS_CBCR 0x0A84
370#define BLSP2_QUP3_I2C_APPS_CBCR 0x0A88
371#define BLSP2_UART3_APPS_CBCR 0x0AC4
372#define BLSP2_UART3_SIM_CBCR 0x0AC8
373#define BLSP2_QUP4_SPI_APPS_CBCR 0x0B04
374#define BLSP2_QUP4_I2C_APPS_CBCR 0x0B08
375#define BLSP2_UART4_APPS_CBCR 0x0B44
376#define BLSP2_UART4_SIM_CBCR 0x0B48
377#define BLSP2_QUP5_SPI_APPS_CBCR 0x0B84
378#define BLSP2_QUP5_I2C_APPS_CBCR 0x0B88
379#define BLSP2_UART5_APPS_CBCR 0x0BC4
380#define BLSP2_UART5_SIM_CBCR 0x0BC8
381#define BLSP2_QUP6_SPI_APPS_CBCR 0x0C04
382#define BLSP2_QUP6_I2C_APPS_CBCR 0x0C08
383#define BLSP2_UART6_APPS_CBCR 0x0C44
384#define BLSP2_UART6_SIM_CBCR 0x0C48
385#define PDM_AHB_CBCR 0x0CC4
386#define PDM_XO4_CBCR 0x0CC8
387#define PDM2_CBCR 0x0CCC
388#define PRNG_AHB_CBCR 0x0D04
389#define BAM_DMA_AHB_CBCR 0x0D44
390#define TSIF_AHB_CBCR 0x0D84
391#define TSIF_REF_CBCR 0x0D88
392#define MSG_RAM_AHB_CBCR 0x0E44
393#define CE1_CBCR 0x1044
394#define CE1_AXI_CBCR 0x1048
395#define CE1_AHB_CBCR 0x104C
396#define CE2_CBCR 0x1084
397#define CE2_AXI_CBCR 0x1088
398#define CE2_AHB_CBCR 0x108C
399#define GCC_AHB_CBCR 0x10C0
400#define GP1_CBCR 0x1900
401#define GP2_CBCR 0x1940
402#define GP3_CBCR 0x1980
Vikram Mulukutla14ee37d2012-08-08 15:18:09 -0700403#define AUDIO_CORE_GDSCR 0x7000
Vikram Mulukutla6c0f1a72012-08-10 01:59:28 -0700404#define AUDIO_CORE_IXFABRIC_CBCR 0x1B000
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700405#define AUDIO_CORE_LPAIF_CODEC_SPKR_OSR_CBCR 0xA014
406#define AUDIO_CORE_LPAIF_CODEC_SPKR_IBIT_CBCR 0xA018
407#define AUDIO_CORE_LPAIF_CODEC_SPKR_EBIT_CBCR 0xA01C
408#define AUDIO_CORE_LPAIF_PRI_OSR_CBCR 0xB014
409#define AUDIO_CORE_LPAIF_PRI_IBIT_CBCR 0xB018
410#define AUDIO_CORE_LPAIF_PRI_EBIT_CBCR 0xB01C
411#define AUDIO_CORE_LPAIF_SEC_OSR_CBCR 0xC014
412#define AUDIO_CORE_LPAIF_SEC_IBIT_CBCR 0xC018
413#define AUDIO_CORE_LPAIF_SEC_EBIT_CBCR 0xC01C
414#define AUDIO_CORE_LPAIF_TER_OSR_CBCR 0xD014
415#define AUDIO_CORE_LPAIF_TER_IBIT_CBCR 0xD018
416#define AUDIO_CORE_LPAIF_TER_EBIT_CBCR 0xD01C
417#define AUDIO_CORE_LPAIF_QUAD_OSR_CBCR 0xE014
418#define AUDIO_CORE_LPAIF_QUAD_IBIT_CBCR 0xE018
419#define AUDIO_CORE_LPAIF_QUAD_EBIT_CBCR 0xE01C
420#define AUDIO_CORE_LPAIF_PCM0_IBIT_CBCR 0xF014
421#define AUDIO_CORE_LPAIF_PCM0_EBIT_CBCR 0xF018
422#define AUDIO_CORE_LPAIF_PCM1_IBIT_CBCR 0x10014
423#define AUDIO_CORE_LPAIF_PCM1_EBIT_CBCR 0x10018
424#define AUDIO_CORE_RESAMPLER_CORE_CBCR 0x11014
425#define AUDIO_CORE_RESAMPLER_LFABIF_CBCR 0x11018
426#define AUDIO_CORE_SLIMBUS_CORE_CBCR 0x12014
427#define AUDIO_CORE_SLIMBUS_LFABIF_CBCR 0x12018
428#define AUDIO_CORE_LPAIF_PCM_DATA_OE_CBCR 0x13014
429#define VENUS0_VCODEC0_CBCR 0x1028
430#define VENUS0_AHB_CBCR 0x1030
431#define VENUS0_AXI_CBCR 0x1034
432#define VENUS0_OCMEMNOC_CBCR 0x1038
433#define MDSS_AHB_CBCR 0x2308
434#define MDSS_HDMI_AHB_CBCR 0x230C
435#define MDSS_AXI_CBCR 0x2310
436#define MDSS_PCLK0_CBCR 0x2314
437#define MDSS_PCLK1_CBCR 0x2318
438#define MDSS_MDP_CBCR 0x231C
439#define MDSS_MDP_LUT_CBCR 0x2320
440#define MDSS_EXTPCLK_CBCR 0x2324
441#define MDSS_VSYNC_CBCR 0x2328
442#define MDSS_EDPPIXEL_CBCR 0x232C
443#define MDSS_EDPLINK_CBCR 0x2330
444#define MDSS_EDPAUX_CBCR 0x2334
445#define MDSS_HDMI_CBCR 0x2338
446#define MDSS_BYTE0_CBCR 0x233C
447#define MDSS_BYTE1_CBCR 0x2340
448#define MDSS_ESC0_CBCR 0x2344
449#define MDSS_ESC1_CBCR 0x2348
450#define CAMSS_PHY0_CSI0PHYTIMER_CBCR 0x3024
451#define CAMSS_PHY1_CSI1PHYTIMER_CBCR 0x3054
452#define CAMSS_PHY2_CSI2PHYTIMER_CBCR 0x3084
453#define CAMSS_CSI0_CBCR 0x30B4
454#define CAMSS_CSI0_AHB_CBCR 0x30BC
455#define CAMSS_CSI0PHY_CBCR 0x30C4
456#define CAMSS_CSI0RDI_CBCR 0x30D4
457#define CAMSS_CSI0PIX_CBCR 0x30E4
458#define CAMSS_CSI1_CBCR 0x3124
459#define CAMSS_CSI1_AHB_CBCR 0x3128
460#define CAMSS_CSI1PHY_CBCR 0x3134
461#define CAMSS_CSI1RDI_CBCR 0x3144
462#define CAMSS_CSI1PIX_CBCR 0x3154
463#define CAMSS_CSI2_CBCR 0x3184
464#define CAMSS_CSI2_AHB_CBCR 0x3188
465#define CAMSS_CSI2PHY_CBCR 0x3194
466#define CAMSS_CSI2RDI_CBCR 0x31A4
467#define CAMSS_CSI2PIX_CBCR 0x31B4
468#define CAMSS_CSI3_CBCR 0x31E4
469#define CAMSS_CSI3_AHB_CBCR 0x31E8
470#define CAMSS_CSI3PHY_CBCR 0x31F4
471#define CAMSS_CSI3RDI_CBCR 0x3204
472#define CAMSS_CSI3PIX_CBCR 0x3214
473#define CAMSS_ISPIF_AHB_CBCR 0x3224
474#define CAMSS_CCI_CCI_CBCR 0x3344
475#define CAMSS_CCI_CCI_AHB_CBCR 0x3348
476#define CAMSS_MCLK0_CBCR 0x3384
477#define CAMSS_MCLK1_CBCR 0x33B4
478#define CAMSS_MCLK2_CBCR 0x33E4
479#define CAMSS_MCLK3_CBCR 0x3414
480#define CAMSS_GP0_CBCR 0x3444
481#define CAMSS_GP1_CBCR 0x3474
482#define CAMSS_TOP_AHB_CBCR 0x3484
483#define CAMSS_MICRO_AHB_CBCR 0x3494
484#define CAMSS_JPEG_JPEG0_CBCR 0x35A8
485#define CAMSS_JPEG_JPEG1_CBCR 0x35AC
486#define CAMSS_JPEG_JPEG2_CBCR 0x35B0
487#define CAMSS_JPEG_JPEG_AHB_CBCR 0x35B4
488#define CAMSS_JPEG_JPEG_AXI_CBCR 0x35B8
489#define CAMSS_JPEG_JPEG_OCMEMNOC_CBCR 0x35BC
490#define CAMSS_VFE_VFE0_CBCR 0x36A8
491#define CAMSS_VFE_VFE1_CBCR 0x36AC
492#define CAMSS_VFE_CPP_CBCR 0x36B0
493#define CAMSS_VFE_CPP_AHB_CBCR 0x36B4
494#define CAMSS_VFE_VFE_AHB_CBCR 0x36B8
495#define CAMSS_VFE_VFE_AXI_CBCR 0x36BC
496#define CAMSS_VFE_VFE_OCMEMNOC_CBCR 0x36C0
497#define CAMSS_CSI_VFE0_CBCR 0x3704
498#define CAMSS_CSI_VFE1_CBCR 0x3714
499#define MMSS_MMSSNOC_AXI_CBCR 0x506C
500#define MMSS_MMSSNOC_AHB_CBCR 0x5024
501#define MMSS_MMSSNOC_BTO_AHB_CBCR 0x5028
502#define MMSS_MISC_AHB_CBCR 0x502C
503#define MMSS_S0_AXI_CBCR 0x5064
504#define OCMEMNOC_CBCR 0x50B4
Vikram Mulukutlaa967db42012-05-10 16:20:40 -0700505#define LPASS_Q6SS_AHB_LFABIF_CBCR 0x22000
506#define LPASS_Q6SS_XO_CBCR 0x26000
Vikram Mulukutla3454e9e2012-08-11 20:18:42 -0700507#define LPASS_Q6_AXI_CBCR 0x11C0
Vikram Mulukutlab5b311e2012-08-09 14:58:48 -0700508#define Q6SS_AHBM_CBCR 0x22004
Vikram Mulukutla97ac3342012-08-21 12:55:13 -0700509#define AUDIO_WRAPPER_BR_CBCR 0x24000
Vikram Mulukutlaa967db42012-05-10 16:20:40 -0700510#define MSS_CFG_AHB_CBCR 0x0280
Vikram Mulukutla31926eb2012-08-12 19:58:08 -0700511#define MSS_Q6_BIMC_AXI_CBCR 0x0284
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700512
513#define APCS_CLOCK_BRANCH_ENA_VOTE 0x1484
514#define APCS_CLOCK_SLEEP_ENA_VOTE 0x1488
515
516/* Mux source select values */
517#define cxo_source_val 0
518#define gpll0_source_val 1
519#define gpll1_source_val 2
520#define gnd_source_val 5
521#define mmpll0_mm_source_val 1
522#define mmpll1_mm_source_val 2
523#define mmpll3_mm_source_val 3
524#define gpll0_mm_source_val 5
525#define cxo_mm_source_val 0
526#define mm_gnd_source_val 6
527#define gpll1_hsic_source_val 4
528#define cxo_lpass_source_val 0
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700529#define gpll0_lpass_source_val 5
530#define edppll_270_mm_source_val 4
531#define edppll_350_mm_source_val 4
532#define dsipll_750_mm_source_val 1
Vikram Mulukutlafe0f5a52012-08-16 16:51:08 -0700533#define dsipll0_byte_mm_source_val 1
534#define dsipll0_pixel_mm_source_val 1
Vikram Mulukutla86b76342012-08-15 16:22:09 -0700535#define hdmipll_mm_source_val 3
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700536
Vikram Mulukutlad3dca652012-11-19 11:04:13 -0800537#define F_GCC_GND \
538 { \
539 .freq_hz = 0, \
540 .m_val = 0, \
541 .n_val = 0, \
542 .div_src_val = BVAL(4, 0, 1) | BVAL(10, 8, gnd_source_val), \
543 }
544
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700545#define F(f, s, div, m, n) \
546 { \
547 .freq_hz = (f), \
548 .src_clk = &s##_clk_src.c, \
549 .m_val = (m), \
Vikram Mulukutla60bfbb02012-08-08 00:49:20 -0700550 .n_val = ~((n)-(m)) * !!(n), \
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700551 .d_val = ~(n),\
552 .div_src_val = BVAL(4, 0, (int)(2*(div) - 1)) \
553 | BVAL(10, 8, s##_source_val), \
554 }
555
556#define F_MM(f, s, div, m, n) \
557 { \
558 .freq_hz = (f), \
559 .src_clk = &s##_clk_src.c, \
560 .m_val = (m), \
Vikram Mulukutla60bfbb02012-08-08 00:49:20 -0700561 .n_val = ~((n)-(m)) * !!(n), \
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700562 .d_val = ~(n),\
563 .div_src_val = BVAL(4, 0, (int)(2*(div) - 1)) \
564 | BVAL(10, 8, s##_mm_source_val), \
565 }
566
Vikram Mulukutla86b76342012-08-15 16:22:09 -0700567#define F_HDMI(f, s, div, m, n) \
568 { \
569 .freq_hz = (f), \
570 .src_clk = &s##_clk_src, \
571 .m_val = (m), \
572 .n_val = ~((n)-(m)) * !!(n), \
573 .d_val = ~(n),\
574 .div_src_val = BVAL(4, 0, (int)(2*(div) - 1)) \
575 | BVAL(10, 8, s##_mm_source_val), \
576 }
577
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700578#define F_MDSS(f, s, div, m, n) \
579 { \
580 .freq_hz = (f), \
581 .m_val = (m), \
Vikram Mulukutla60bfbb02012-08-08 00:49:20 -0700582 .n_val = ~((n)-(m)) * !!(n), \
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700583 .d_val = ~(n),\
584 .div_src_val = BVAL(4, 0, (int)(2*(div) - 1)) \
585 | BVAL(10, 8, s##_mm_source_val), \
586 }
587
588#define F_HSIC(f, s, div, m, n) \
589 { \
590 .freq_hz = (f), \
591 .src_clk = &s##_clk_src.c, \
592 .m_val = (m), \
Vikram Mulukutla60bfbb02012-08-08 00:49:20 -0700593 .n_val = ~((n)-(m)) * !!(n), \
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700594 .d_val = ~(n),\
595 .div_src_val = BVAL(4, 0, (int)(2*(div) - 1)) \
596 | BVAL(10, 8, s##_hsic_source_val), \
597 }
598
599#define F_LPASS(f, s, div, m, n) \
600 { \
601 .freq_hz = (f), \
602 .src_clk = &s##_clk_src.c, \
603 .m_val = (m), \
Vikram Mulukutla60bfbb02012-08-08 00:49:20 -0700604 .n_val = ~((n)-(m)) * !!(n), \
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700605 .d_val = ~(n),\
606 .div_src_val = BVAL(4, 0, (int)(2*(div) - 1)) \
607 | BVAL(10, 8, s##_lpass_source_val), \
608 }
609
610#define VDD_DIG_FMAX_MAP1(l1, f1) \
Saravana Kannan55e959d2012-10-15 22:16:04 -0700611 .vdd_class = &vdd_dig, \
612 .fmax = (unsigned long[VDD_DIG_NUM]) { \
613 [VDD_DIG_##l1] = (f1), \
614 }, \
615 .num_fmax = VDD_DIG_NUM
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700616#define VDD_DIG_FMAX_MAP2(l1, f1, l2, f2) \
Saravana Kannan55e959d2012-10-15 22:16:04 -0700617 .vdd_class = &vdd_dig, \
618 .fmax = (unsigned long[VDD_DIG_NUM]) { \
619 [VDD_DIG_##l1] = (f1), \
620 [VDD_DIG_##l2] = (f2), \
621 }, \
622 .num_fmax = VDD_DIG_NUM
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700623#define VDD_DIG_FMAX_MAP3(l1, f1, l2, f2, l3, f3) \
Saravana Kannan55e959d2012-10-15 22:16:04 -0700624 .vdd_class = &vdd_dig, \
625 .fmax = (unsigned long[VDD_DIG_NUM]) { \
626 [VDD_DIG_##l1] = (f1), \
627 [VDD_DIG_##l2] = (f2), \
628 [VDD_DIG_##l3] = (f3), \
629 }, \
630 .num_fmax = VDD_DIG_NUM
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700631
632enum vdd_dig_levels {
633 VDD_DIG_NONE,
634 VDD_DIG_LOW,
635 VDD_DIG_NOMINAL,
Saravana Kannan55e959d2012-10-15 22:16:04 -0700636 VDD_DIG_HIGH,
637 VDD_DIG_NUM
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700638};
639
Vikram Mulukutlab7a1a742012-05-30 17:24:33 -0700640static const int vdd_corner[] = {
641 [VDD_DIG_NONE] = RPM_REGULATOR_CORNER_NONE,
642 [VDD_DIG_LOW] = RPM_REGULATOR_CORNER_SVS_SOC,
643 [VDD_DIG_NOMINAL] = RPM_REGULATOR_CORNER_NORMAL,
644 [VDD_DIG_HIGH] = RPM_REGULATOR_CORNER_SUPER_TURBO,
645};
646
647static struct rpm_regulator *vdd_dig_reg;
648
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700649static int set_vdd_dig(struct clk_vdd_class *vdd_class, int level)
650{
Vikram Mulukutlab7a1a742012-05-30 17:24:33 -0700651 return rpm_regulator_set_voltage(vdd_dig_reg, vdd_corner[level],
652 RPM_REGULATOR_CORNER_SUPER_TURBO);
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700653}
654
Saravana Kannan55e959d2012-10-15 22:16:04 -0700655static DEFINE_VDD_CLASS(vdd_dig, set_vdd_dig, VDD_DIG_NUM);
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700656
Vikram Mulukutla80b7ab52012-07-26 19:03:15 -0700657#define RPM_MISC_CLK_TYPE 0x306b6c63
658#define RPM_BUS_CLK_TYPE 0x316b6c63
659#define RPM_MEM_CLK_TYPE 0x326b6c63
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700660
Vikram Mulukutla77140da2012-08-13 21:37:18 -0700661#define RPM_SMD_KEY_ENABLE 0x62616E45
662
663#define CXO_ID 0x0
664#define QDSS_ID 0x1
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700665
Vikram Mulukutla6ddff4e2012-06-22 15:11:28 -0700666#define PNOC_ID 0x0
667#define SNOC_ID 0x1
668#define CNOC_ID 0x2
Vikram Mulukutlac77922f2012-08-13 21:44:45 -0700669#define MMSSNOC_AHB_ID 0x3
Matt Wagantallc4388bf2012-05-14 23:03:00 -0700670
Vikram Mulukutla6ddff4e2012-06-22 15:11:28 -0700671#define BIMC_ID 0x0
Vikram Mulukutla1e6127d2012-08-21 21:05:24 -0700672#define OXILI_ID 0x1
673#define OCMEM_ID 0x2
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700674
Vikram Mulukutla02ea7112012-08-29 12:06:11 -0700675#define D0_ID 1
676#define D1_ID 2
Vikram Mulukutlab5a70392013-01-07 11:53:43 -0800677#define A0_ID 4
678#define A1_ID 5
679#define A2_ID 6
Vikram Mulukutla02ea7112012-08-29 12:06:11 -0700680#define DIFF_CLK_ID 7
Vikram Mulukutla8cb2bb52012-11-14 11:23:49 -0800681#define DIV_CLK1_ID 11
682#define DIV_CLK2_ID 12
Vikram Mulukutla80b7ab52012-07-26 19:03:15 -0700683
Vikram Mulukutla6ddff4e2012-06-22 15:11:28 -0700684DEFINE_CLK_RPM_SMD(pnoc_clk, pnoc_a_clk, RPM_BUS_CLK_TYPE, PNOC_ID, NULL);
685DEFINE_CLK_RPM_SMD(snoc_clk, snoc_a_clk, RPM_BUS_CLK_TYPE, SNOC_ID, NULL);
686DEFINE_CLK_RPM_SMD(cnoc_clk, cnoc_a_clk, RPM_BUS_CLK_TYPE, CNOC_ID, NULL);
Vikram Mulukutla09e20812012-07-12 11:32:42 -0700687DEFINE_CLK_RPM_SMD(mmssnoc_ahb_clk, mmssnoc_ahb_a_clk, RPM_BUS_CLK_TYPE,
688 MMSSNOC_AHB_ID, NULL);
Vikram Mulukutla6ddff4e2012-06-22 15:11:28 -0700689
690DEFINE_CLK_RPM_SMD(bimc_clk, bimc_a_clk, RPM_MEM_CLK_TYPE, BIMC_ID, NULL);
691DEFINE_CLK_RPM_SMD(ocmemgx_clk, ocmemgx_a_clk, RPM_MEM_CLK_TYPE, OCMEM_ID,
692 NULL);
Vikram Mulukutla1e6127d2012-08-21 21:05:24 -0700693DEFINE_CLK_RPM_SMD(gfx3d_clk_src, gfx3d_a_clk_src, RPM_MEM_CLK_TYPE, OXILI_ID,
694 NULL);
Vikram Mulukutla6ddff4e2012-06-22 15:11:28 -0700695
696DEFINE_CLK_RPM_SMD_BRANCH(cxo_clk_src, cxo_a_clk_src,
697 RPM_MISC_CLK_TYPE, CXO_ID, 19200000);
Vikram Mulukutla0f63e002012-06-28 14:29:44 -0700698DEFINE_CLK_RPM_SMD_QDSS(qdss_clk, qdss_a_clk, RPM_MISC_CLK_TYPE, QDSS_ID);
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700699
Vikram Mulukutla80b7ab52012-07-26 19:03:15 -0700700DEFINE_CLK_RPM_SMD_XO_BUFFER(cxo_d0, cxo_d0_a, D0_ID);
701DEFINE_CLK_RPM_SMD_XO_BUFFER(cxo_d1, cxo_d1_a, D1_ID);
702DEFINE_CLK_RPM_SMD_XO_BUFFER(cxo_a0, cxo_a0_a, A0_ID);
703DEFINE_CLK_RPM_SMD_XO_BUFFER(cxo_a1, cxo_a1_a, A1_ID);
704DEFINE_CLK_RPM_SMD_XO_BUFFER(cxo_a2, cxo_a2_a, A2_ID);
Vikram Mulukutla8cb2bb52012-11-14 11:23:49 -0800705DEFINE_CLK_RPM_SMD_XO_BUFFER(div_clk1, div_a_clk1, DIV_CLK1_ID);
706DEFINE_CLK_RPM_SMD_XO_BUFFER(div_clk2, div_a_clk2, DIV_CLK2_ID);
Vikram Mulukutla02ea7112012-08-29 12:06:11 -0700707DEFINE_CLK_RPM_SMD_XO_BUFFER(diff_clk, diff_a_clk, DIFF_CLK_ID);
Vikram Mulukutla80b7ab52012-07-26 19:03:15 -0700708
709DEFINE_CLK_RPM_SMD_XO_BUFFER_PINCTRL(cxo_d0_pin, cxo_d0_a_pin, D0_ID);
710DEFINE_CLK_RPM_SMD_XO_BUFFER_PINCTRL(cxo_d1_pin, cxo_d1_a_pin, D1_ID);
711DEFINE_CLK_RPM_SMD_XO_BUFFER_PINCTRL(cxo_a0_pin, cxo_a0_a_pin, A0_ID);
712DEFINE_CLK_RPM_SMD_XO_BUFFER_PINCTRL(cxo_a1_pin, cxo_a1_a_pin, A1_ID);
713DEFINE_CLK_RPM_SMD_XO_BUFFER_PINCTRL(cxo_a2_pin, cxo_a2_a_pin, A2_ID);
714
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700715static struct pll_vote_clk gpll0_clk_src = {
716 .en_reg = (void __iomem *)APCS_GPLL_ENA_VOTE_REG,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700717 .status_reg = (void __iomem *)GPLL0_STATUS_REG,
718 .status_mask = BIT(17),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700719 .base = &virt_bases[GCC_BASE],
720 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -0700721 .parent = &cxo_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700722 .rate = 600000000,
723 .dbg_name = "gpll0_clk_src",
724 .ops = &clk_ops_pll_vote,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700725 CLK_INIT(gpll0_clk_src.c),
726 },
727};
728
729static struct pll_vote_clk gpll1_clk_src = {
730 .en_reg = (void __iomem *)APCS_GPLL_ENA_VOTE_REG,
731 .en_mask = BIT(1),
732 .status_reg = (void __iomem *)GPLL1_STATUS_REG,
733 .status_mask = BIT(17),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700734 .base = &virt_bases[GCC_BASE],
735 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -0700736 .parent = &cxo_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700737 .rate = 480000000,
738 .dbg_name = "gpll1_clk_src",
739 .ops = &clk_ops_pll_vote,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700740 CLK_INIT(gpll1_clk_src.c),
741 },
742};
743
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700744static struct pll_vote_clk mmpll0_clk_src = {
745 .en_reg = (void __iomem *)MMSS_PLL_VOTE_APCS_REG,
746 .en_mask = BIT(0),
747 .status_reg = (void __iomem *)MMPLL0_STATUS_REG,
748 .status_mask = BIT(17),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700749 .base = &virt_bases[MMSS_BASE],
750 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -0700751 .parent = &cxo_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700752 .dbg_name = "mmpll0_clk_src",
753 .rate = 800000000,
754 .ops = &clk_ops_pll_vote,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700755 CLK_INIT(mmpll0_clk_src.c),
756 },
757};
758
759static struct pll_vote_clk mmpll1_clk_src = {
760 .en_reg = (void __iomem *)MMSS_PLL_VOTE_APCS_REG,
761 .en_mask = BIT(1),
762 .status_reg = (void __iomem *)MMPLL1_STATUS_REG,
763 .status_mask = BIT(17),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700764 .base = &virt_bases[MMSS_BASE],
765 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -0700766 .parent = &cxo_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700767 .dbg_name = "mmpll1_clk_src",
Vikram Mulukutlad16a8f12012-07-20 13:33:45 -0700768 .rate = 846000000,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700769 .ops = &clk_ops_pll_vote,
Vikram Mulukutla293c4692013-01-03 15:09:47 -0800770 /* May be reassigned at runtime; alloc memory at compile time */
771 VDD_DIG_FMAX_MAP1(LOW, 846000000),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700772 CLK_INIT(mmpll1_clk_src.c),
773 },
774};
775
776static struct pll_clk mmpll3_clk_src = {
777 .mode_reg = (void __iomem *)MMPLL3_MODE_REG,
778 .status_reg = (void __iomem *)MMPLL3_STATUS_REG,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700779 .base = &virt_bases[MMSS_BASE],
780 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -0700781 .parent = &cxo_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700782 .dbg_name = "mmpll3_clk_src",
Vikram Mulukutla293c4692013-01-03 15:09:47 -0800783 .rate = 820000000,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700784 .ops = &clk_ops_local_pll,
785 CLK_INIT(mmpll3_clk_src.c),
786 },
787};
788
Vikram Mulukutlad08a1522012-05-24 15:24:01 -0700789static DEFINE_CLK_VOTER(pnoc_msmbus_clk, &pnoc_clk.c, LONG_MAX);
790static DEFINE_CLK_VOTER(snoc_msmbus_clk, &snoc_clk.c, LONG_MAX);
791static DEFINE_CLK_VOTER(cnoc_msmbus_clk, &cnoc_clk.c, LONG_MAX);
792static DEFINE_CLK_VOTER(pnoc_msmbus_a_clk, &pnoc_a_clk.c, LONG_MAX);
793static DEFINE_CLK_VOTER(snoc_msmbus_a_clk, &snoc_a_clk.c, LONG_MAX);
794static DEFINE_CLK_VOTER(cnoc_msmbus_a_clk, &cnoc_a_clk.c, LONG_MAX);
795
796static DEFINE_CLK_VOTER(bimc_msmbus_clk, &bimc_clk.c, LONG_MAX);
797static DEFINE_CLK_VOTER(bimc_msmbus_a_clk, &bimc_a_clk.c, LONG_MAX);
798static DEFINE_CLK_VOTER(bimc_acpu_a_clk, &bimc_a_clk.c, LONG_MAX);
Vikram Mulukutla1e6127d2012-08-21 21:05:24 -0700799static DEFINE_CLK_VOTER(oxili_gfx3d_clk_src, &gfx3d_clk_src.c, LONG_MAX);
Vikram Mulukutlad08a1522012-05-24 15:24:01 -0700800static DEFINE_CLK_VOTER(ocmemgx_msmbus_clk, &ocmemgx_clk.c, LONG_MAX);
801static DEFINE_CLK_VOTER(ocmemgx_msmbus_a_clk, &ocmemgx_a_clk.c, LONG_MAX);
Naveen Ramaraj65396b92012-08-15 17:05:07 -0700802static DEFINE_CLK_VOTER(ocmemgx_core_clk, &ocmemgx_clk.c, LONG_MAX);
Vikram Mulukutlad08a1522012-05-24 15:24:01 -0700803
Vikram Mulukutlab0ad9f32012-07-03 12:57:24 -0700804static DEFINE_CLK_VOTER(pnoc_sps_clk, &pnoc_clk.c, 0);
Vikram Mulukutlab0ad9f32012-07-03 12:57:24 -0700805
Vikram Mulukutla510f7492013-02-04 11:59:52 -0800806static DEFINE_CLK_BRANCH_VOTER(cxo_otg_clk, &cxo_clk_src.c);
807static DEFINE_CLK_BRANCH_VOTER(cxo_pil_lpass_clk, &cxo_clk_src.c);
808static DEFINE_CLK_BRANCH_VOTER(cxo_pil_mss_clk, &cxo_clk_src.c);
809static DEFINE_CLK_BRANCH_VOTER(cxo_wlan_clk, &cxo_clk_src.c);
810static DEFINE_CLK_BRANCH_VOTER(cxo_pil_pronto_clk, &cxo_clk_src.c);
Vijayavardhan Vennapusadec1fe62013-02-12 16:05:14 +0530811static DEFINE_CLK_BRANCH_VOTER(cxo_dwc3_clk, &cxo_clk_src.c);
Vikram Mulukutla510f7492013-02-04 11:59:52 -0800812
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700813static struct clk_freq_tbl ftbl_gcc_usb30_master_clk[] = {
814 F(125000000, gpll0, 1, 5, 24),
815 F_END
816};
817
818static struct rcg_clk usb30_master_clk_src = {
819 .cmd_rcgr_reg = USB30_MASTER_CMD_RCGR,
820 .set_rate = set_rate_mnd,
821 .freq_tbl = ftbl_gcc_usb30_master_clk,
822 .current_freq = &rcg_dummy_freq,
823 .base = &virt_bases[GCC_BASE],
824 .c = {
825 .dbg_name = "usb30_master_clk_src",
826 .ops = &clk_ops_rcg_mnd,
827 VDD_DIG_FMAX_MAP1(NOMINAL, 125000000),
828 CLK_INIT(usb30_master_clk_src.c),
829 },
830};
831
832static struct clk_freq_tbl ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk[] = {
833 F( 960000, cxo, 10, 1, 2),
834 F( 4800000, cxo, 4, 0, 0),
835 F( 9600000, cxo, 2, 0, 0),
836 F(15000000, gpll0, 10, 1, 4),
837 F(19200000, cxo, 1, 0, 0),
838 F(25000000, gpll0, 12, 1, 2),
839 F(50000000, gpll0, 12, 0, 0),
840 F_END
841};
842
843static struct rcg_clk blsp1_qup1_spi_apps_clk_src = {
844 .cmd_rcgr_reg = BLSP1_QUP1_SPI_APPS_CMD_RCGR,
845 .set_rate = set_rate_mnd,
846 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
847 .current_freq = &rcg_dummy_freq,
848 .base = &virt_bases[GCC_BASE],
849 .c = {
850 .dbg_name = "blsp1_qup1_spi_apps_clk_src",
851 .ops = &clk_ops_rcg_mnd,
852 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
853 CLK_INIT(blsp1_qup1_spi_apps_clk_src.c),
854 },
855};
856
857static struct rcg_clk blsp1_qup2_spi_apps_clk_src = {
858 .cmd_rcgr_reg = BLSP1_QUP2_SPI_APPS_CMD_RCGR,
859 .set_rate = set_rate_mnd,
860 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
861 .current_freq = &rcg_dummy_freq,
862 .base = &virt_bases[GCC_BASE],
863 .c = {
864 .dbg_name = "blsp1_qup2_spi_apps_clk_src",
865 .ops = &clk_ops_rcg_mnd,
866 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
867 CLK_INIT(blsp1_qup2_spi_apps_clk_src.c),
868 },
869};
870
871static struct rcg_clk blsp1_qup3_spi_apps_clk_src = {
872 .cmd_rcgr_reg = BLSP1_QUP3_SPI_APPS_CMD_RCGR,
873 .set_rate = set_rate_mnd,
874 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
875 .current_freq = &rcg_dummy_freq,
876 .base = &virt_bases[GCC_BASE],
877 .c = {
878 .dbg_name = "blsp1_qup3_spi_apps_clk_src",
879 .ops = &clk_ops_rcg_mnd,
880 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
881 CLK_INIT(blsp1_qup3_spi_apps_clk_src.c),
882 },
883};
884
885static struct rcg_clk blsp1_qup4_spi_apps_clk_src = {
886 .cmd_rcgr_reg = BLSP1_QUP4_SPI_APPS_CMD_RCGR,
887 .set_rate = set_rate_mnd,
888 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
889 .current_freq = &rcg_dummy_freq,
890 .base = &virt_bases[GCC_BASE],
891 .c = {
892 .dbg_name = "blsp1_qup4_spi_apps_clk_src",
893 .ops = &clk_ops_rcg_mnd,
894 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
895 CLK_INIT(blsp1_qup4_spi_apps_clk_src.c),
896 },
897};
898
899static struct rcg_clk blsp1_qup5_spi_apps_clk_src = {
900 .cmd_rcgr_reg = BLSP1_QUP5_SPI_APPS_CMD_RCGR,
901 .set_rate = set_rate_mnd,
902 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
903 .current_freq = &rcg_dummy_freq,
904 .base = &virt_bases[GCC_BASE],
905 .c = {
906 .dbg_name = "blsp1_qup5_spi_apps_clk_src",
907 .ops = &clk_ops_rcg_mnd,
908 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
909 CLK_INIT(blsp1_qup5_spi_apps_clk_src.c),
910 },
911};
912
913static struct rcg_clk blsp1_qup6_spi_apps_clk_src = {
914 .cmd_rcgr_reg = BLSP1_QUP6_SPI_APPS_CMD_RCGR,
915 .set_rate = set_rate_mnd,
916 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
917 .current_freq = &rcg_dummy_freq,
918 .base = &virt_bases[GCC_BASE],
919 .c = {
920 .dbg_name = "blsp1_qup6_spi_apps_clk_src",
921 .ops = &clk_ops_rcg_mnd,
922 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
923 CLK_INIT(blsp1_qup6_spi_apps_clk_src.c),
924 },
925};
926
Vikram Mulukutlaa57e6e42013-01-23 16:58:08 -0800927static struct clk_freq_tbl ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk[] = {
928 F(50000000, gpll0, 12, 0, 0),
929 F_END
930};
931
932static struct rcg_clk blsp1_qup1_i2c_apps_clk_src = {
933 .cmd_rcgr_reg = BLSP1_QUP1_I2C_APPS_CMD_RCGR,
934 .set_rate = set_rate_hid,
935 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
936 .current_freq = &rcg_dummy_freq,
937 .base = &virt_bases[GCC_BASE],
938 .c = {
939 .dbg_name = "blsp1_qup1_i2c_apps_clk_src",
940 .ops = &clk_ops_rcg,
941 VDD_DIG_FMAX_MAP1(LOW, 50000000),
942 CLK_INIT(blsp1_qup1_i2c_apps_clk_src.c),
943 },
944};
945
946static struct rcg_clk blsp1_qup2_i2c_apps_clk_src = {
947 .cmd_rcgr_reg = BLSP1_QUP2_I2C_APPS_CMD_RCGR,
948 .set_rate = set_rate_hid,
949 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
950 .current_freq = &rcg_dummy_freq,
951 .base = &virt_bases[GCC_BASE],
952 .c = {
953 .dbg_name = "blsp1_qup2_i2c_apps_clk_src",
954 .ops = &clk_ops_rcg,
955 VDD_DIG_FMAX_MAP1(LOW, 50000000),
956 CLK_INIT(blsp1_qup2_i2c_apps_clk_src.c),
957 },
958};
959
960static struct rcg_clk blsp1_qup3_i2c_apps_clk_src = {
961 .cmd_rcgr_reg = BLSP1_QUP3_I2C_APPS_CMD_RCGR,
962 .set_rate = set_rate_hid,
963 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
964 .current_freq = &rcg_dummy_freq,
965 .base = &virt_bases[GCC_BASE],
966 .c = {
967 .dbg_name = "blsp1_qup3_i2c_apps_clk_src",
968 .ops = &clk_ops_rcg,
969 VDD_DIG_FMAX_MAP1(LOW, 50000000),
970 CLK_INIT(blsp1_qup3_i2c_apps_clk_src.c),
971 },
972};
973
974static struct rcg_clk blsp1_qup4_i2c_apps_clk_src = {
975 .cmd_rcgr_reg = BLSP1_QUP4_I2C_APPS_CMD_RCGR,
976 .set_rate = set_rate_hid,
977 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
978 .current_freq = &rcg_dummy_freq,
979 .base = &virt_bases[GCC_BASE],
980 .c = {
981 .dbg_name = "blsp1_qup4_i2c_apps_clk_src",
982 .ops = &clk_ops_rcg,
983 VDD_DIG_FMAX_MAP1(LOW, 50000000),
984 CLK_INIT(blsp1_qup4_i2c_apps_clk_src.c),
985 },
986};
987
988static struct rcg_clk blsp1_qup5_i2c_apps_clk_src = {
989 .cmd_rcgr_reg = BLSP1_QUP5_I2C_APPS_CMD_RCGR,
990 .set_rate = set_rate_hid,
991 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
992 .current_freq = &rcg_dummy_freq,
993 .base = &virt_bases[GCC_BASE],
994 .c = {
995 .dbg_name = "blsp1_qup5_i2c_apps_clk_src",
996 .ops = &clk_ops_rcg,
997 VDD_DIG_FMAX_MAP1(LOW, 50000000),
998 CLK_INIT(blsp1_qup5_i2c_apps_clk_src.c),
999 },
1000};
1001
1002static struct rcg_clk blsp1_qup6_i2c_apps_clk_src = {
1003 .cmd_rcgr_reg = BLSP1_QUP6_I2C_APPS_CMD_RCGR,
1004 .set_rate = set_rate_hid,
1005 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
1006 .current_freq = &rcg_dummy_freq,
1007 .base = &virt_bases[GCC_BASE],
1008 .c = {
1009 .dbg_name = "blsp1_qup6_i2c_apps_clk_src",
1010 .ops = &clk_ops_rcg,
1011 VDD_DIG_FMAX_MAP1(LOW, 50000000),
1012 CLK_INIT(blsp1_qup6_i2c_apps_clk_src.c),
1013 },
1014};
1015
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001016static struct clk_freq_tbl ftbl_gcc_blsp1_2_uart1_6_apps_clk[] = {
Vikram Mulukutlad3dca652012-11-19 11:04:13 -08001017 F_GCC_GND,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001018 F( 3686400, gpll0, 1, 96, 15625),
1019 F( 7372800, gpll0, 1, 192, 15625),
1020 F(14745600, gpll0, 1, 384, 15625),
1021 F(16000000, gpll0, 5, 2, 15),
1022 F(19200000, cxo, 1, 0, 0),
1023 F(24000000, gpll0, 5, 1, 5),
1024 F(32000000, gpll0, 1, 4, 75),
1025 F(40000000, gpll0, 15, 0, 0),
1026 F(46400000, gpll0, 1, 29, 375),
1027 F(48000000, gpll0, 12.5, 0, 0),
1028 F(51200000, gpll0, 1, 32, 375),
1029 F(56000000, gpll0, 1, 7, 75),
1030 F(58982400, gpll0, 1, 1536, 15625),
1031 F(60000000, gpll0, 10, 0, 0),
Vikram Mulukutlaa89c9ec2013-01-08 18:39:02 -08001032 F(63160000, gpll0, 9.5, 0, 0),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001033 F_END
1034};
1035
1036static struct rcg_clk blsp1_uart1_apps_clk_src = {
1037 .cmd_rcgr_reg = BLSP1_UART1_APPS_CMD_RCGR,
1038 .set_rate = set_rate_mnd,
1039 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
1040 .current_freq = &rcg_dummy_freq,
1041 .base = &virt_bases[GCC_BASE],
1042 .c = {
1043 .dbg_name = "blsp1_uart1_apps_clk_src",
1044 .ops = &clk_ops_rcg_mnd,
1045 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
1046 CLK_INIT(blsp1_uart1_apps_clk_src.c),
1047 },
1048};
1049
1050static struct rcg_clk blsp1_uart2_apps_clk_src = {
1051 .cmd_rcgr_reg = BLSP1_UART2_APPS_CMD_RCGR,
1052 .set_rate = set_rate_mnd,
1053 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
1054 .current_freq = &rcg_dummy_freq,
1055 .base = &virt_bases[GCC_BASE],
1056 .c = {
1057 .dbg_name = "blsp1_uart2_apps_clk_src",
1058 .ops = &clk_ops_rcg_mnd,
1059 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
1060 CLK_INIT(blsp1_uart2_apps_clk_src.c),
1061 },
1062};
1063
1064static struct rcg_clk blsp1_uart3_apps_clk_src = {
1065 .cmd_rcgr_reg = BLSP1_UART3_APPS_CMD_RCGR,
1066 .set_rate = set_rate_mnd,
1067 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
1068 .current_freq = &rcg_dummy_freq,
1069 .base = &virt_bases[GCC_BASE],
1070 .c = {
1071 .dbg_name = "blsp1_uart3_apps_clk_src",
1072 .ops = &clk_ops_rcg_mnd,
1073 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
1074 CLK_INIT(blsp1_uart3_apps_clk_src.c),
1075 },
1076};
1077
1078static struct rcg_clk blsp1_uart4_apps_clk_src = {
1079 .cmd_rcgr_reg = BLSP1_UART4_APPS_CMD_RCGR,
1080 .set_rate = set_rate_mnd,
1081 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
1082 .current_freq = &rcg_dummy_freq,
1083 .base = &virt_bases[GCC_BASE],
1084 .c = {
1085 .dbg_name = "blsp1_uart4_apps_clk_src",
1086 .ops = &clk_ops_rcg_mnd,
1087 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
1088 CLK_INIT(blsp1_uart4_apps_clk_src.c),
1089 },
1090};
1091
1092static struct rcg_clk blsp1_uart5_apps_clk_src = {
1093 .cmd_rcgr_reg = BLSP1_UART5_APPS_CMD_RCGR,
1094 .set_rate = set_rate_mnd,
1095 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
1096 .current_freq = &rcg_dummy_freq,
1097 .base = &virt_bases[GCC_BASE],
1098 .c = {
1099 .dbg_name = "blsp1_uart5_apps_clk_src",
1100 .ops = &clk_ops_rcg_mnd,
1101 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
1102 CLK_INIT(blsp1_uart5_apps_clk_src.c),
1103 },
1104};
1105
1106static struct rcg_clk blsp1_uart6_apps_clk_src = {
1107 .cmd_rcgr_reg = BLSP1_UART6_APPS_CMD_RCGR,
1108 .set_rate = set_rate_mnd,
1109 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
1110 .current_freq = &rcg_dummy_freq,
1111 .base = &virt_bases[GCC_BASE],
1112 .c = {
1113 .dbg_name = "blsp1_uart6_apps_clk_src",
1114 .ops = &clk_ops_rcg_mnd,
1115 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
1116 CLK_INIT(blsp1_uart6_apps_clk_src.c),
1117 },
1118};
1119
1120static struct rcg_clk blsp2_qup1_spi_apps_clk_src = {
1121 .cmd_rcgr_reg = BLSP2_QUP1_SPI_APPS_CMD_RCGR,
1122 .set_rate = set_rate_mnd,
1123 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
1124 .current_freq = &rcg_dummy_freq,
1125 .base = &virt_bases[GCC_BASE],
1126 .c = {
1127 .dbg_name = "blsp2_qup1_spi_apps_clk_src",
1128 .ops = &clk_ops_rcg_mnd,
1129 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
1130 CLK_INIT(blsp2_qup1_spi_apps_clk_src.c),
1131 },
1132};
1133
1134static struct rcg_clk blsp2_qup2_spi_apps_clk_src = {
1135 .cmd_rcgr_reg = BLSP2_QUP2_SPI_APPS_CMD_RCGR,
1136 .set_rate = set_rate_mnd,
1137 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
1138 .current_freq = &rcg_dummy_freq,
1139 .base = &virt_bases[GCC_BASE],
1140 .c = {
1141 .dbg_name = "blsp2_qup2_spi_apps_clk_src",
1142 .ops = &clk_ops_rcg_mnd,
1143 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
1144 CLK_INIT(blsp2_qup2_spi_apps_clk_src.c),
1145 },
1146};
1147
1148static struct rcg_clk blsp2_qup3_spi_apps_clk_src = {
1149 .cmd_rcgr_reg = BLSP2_QUP3_SPI_APPS_CMD_RCGR,
1150 .set_rate = set_rate_mnd,
1151 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
1152 .current_freq = &rcg_dummy_freq,
1153 .base = &virt_bases[GCC_BASE],
1154 .c = {
1155 .dbg_name = "blsp2_qup3_spi_apps_clk_src",
1156 .ops = &clk_ops_rcg_mnd,
1157 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
1158 CLK_INIT(blsp2_qup3_spi_apps_clk_src.c),
1159 },
1160};
1161
1162static struct rcg_clk blsp2_qup4_spi_apps_clk_src = {
1163 .cmd_rcgr_reg = BLSP2_QUP4_SPI_APPS_CMD_RCGR,
1164 .set_rate = set_rate_mnd,
1165 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
1166 .current_freq = &rcg_dummy_freq,
1167 .base = &virt_bases[GCC_BASE],
1168 .c = {
1169 .dbg_name = "blsp2_qup4_spi_apps_clk_src",
1170 .ops = &clk_ops_rcg_mnd,
1171 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
1172 CLK_INIT(blsp2_qup4_spi_apps_clk_src.c),
1173 },
1174};
1175
1176static struct rcg_clk blsp2_qup5_spi_apps_clk_src = {
1177 .cmd_rcgr_reg = BLSP2_QUP5_SPI_APPS_CMD_RCGR,
1178 .set_rate = set_rate_mnd,
1179 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
1180 .current_freq = &rcg_dummy_freq,
1181 .base = &virt_bases[GCC_BASE],
1182 .c = {
1183 .dbg_name = "blsp2_qup5_spi_apps_clk_src",
1184 .ops = &clk_ops_rcg_mnd,
1185 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
1186 CLK_INIT(blsp2_qup5_spi_apps_clk_src.c),
1187 },
1188};
1189
1190static struct rcg_clk blsp2_qup6_spi_apps_clk_src = {
1191 .cmd_rcgr_reg = BLSP2_QUP6_SPI_APPS_CMD_RCGR,
1192 .set_rate = set_rate_mnd,
1193 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
1194 .current_freq = &rcg_dummy_freq,
1195 .base = &virt_bases[GCC_BASE],
1196 .c = {
1197 .dbg_name = "blsp2_qup6_spi_apps_clk_src",
1198 .ops = &clk_ops_rcg_mnd,
1199 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
1200 CLK_INIT(blsp2_qup6_spi_apps_clk_src.c),
1201 },
1202};
1203
Vikram Mulukutlaa57e6e42013-01-23 16:58:08 -08001204static struct rcg_clk blsp2_qup1_i2c_apps_clk_src = {
1205 .cmd_rcgr_reg = BLSP2_QUP1_I2C_APPS_CMD_RCGR,
1206 .set_rate = set_rate_hid,
1207 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
1208 .current_freq = &rcg_dummy_freq,
1209 .base = &virt_bases[GCC_BASE],
1210 .c = {
1211 .dbg_name = "blsp2_qup1_i2c_apps_clk_src",
1212 .ops = &clk_ops_rcg,
1213 VDD_DIG_FMAX_MAP1(LOW, 50000000),
1214 CLK_INIT(blsp2_qup1_i2c_apps_clk_src.c),
1215 },
1216};
1217
1218static struct rcg_clk blsp2_qup2_i2c_apps_clk_src = {
1219 .cmd_rcgr_reg = BLSP2_QUP2_I2C_APPS_CMD_RCGR,
1220 .set_rate = set_rate_hid,
1221 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
1222 .current_freq = &rcg_dummy_freq,
1223 .base = &virt_bases[GCC_BASE],
1224 .c = {
1225 .dbg_name = "blsp2_qup2_i2c_apps_clk_src",
1226 .ops = &clk_ops_rcg,
1227 VDD_DIG_FMAX_MAP1(LOW, 50000000),
1228 CLK_INIT(blsp2_qup2_i2c_apps_clk_src.c),
1229 },
1230};
1231
1232static struct rcg_clk blsp2_qup3_i2c_apps_clk_src = {
1233 .cmd_rcgr_reg = BLSP2_QUP3_I2C_APPS_CMD_RCGR,
1234 .set_rate = set_rate_hid,
1235 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
1236 .current_freq = &rcg_dummy_freq,
1237 .base = &virt_bases[GCC_BASE],
1238 .c = {
1239 .dbg_name = "blsp2_qup3_i2c_apps_clk_src",
1240 .ops = &clk_ops_rcg,
1241 VDD_DIG_FMAX_MAP1(LOW, 50000000),
1242 CLK_INIT(blsp2_qup3_i2c_apps_clk_src.c),
1243 },
1244};
1245
1246static struct rcg_clk blsp2_qup4_i2c_apps_clk_src = {
1247 .cmd_rcgr_reg = BLSP2_QUP4_I2C_APPS_CMD_RCGR,
1248 .set_rate = set_rate_hid,
1249 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
1250 .current_freq = &rcg_dummy_freq,
1251 .base = &virt_bases[GCC_BASE],
1252 .c = {
1253 .dbg_name = "blsp2_qup4_i2c_apps_clk_src",
1254 .ops = &clk_ops_rcg,
1255 VDD_DIG_FMAX_MAP1(LOW, 50000000),
1256 CLK_INIT(blsp2_qup4_i2c_apps_clk_src.c),
1257 },
1258};
1259
1260static struct rcg_clk blsp2_qup5_i2c_apps_clk_src = {
1261 .cmd_rcgr_reg = BLSP2_QUP5_I2C_APPS_CMD_RCGR,
1262 .set_rate = set_rate_hid,
1263 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
1264 .current_freq = &rcg_dummy_freq,
1265 .base = &virt_bases[GCC_BASE],
1266 .c = {
1267 .dbg_name = "blsp2_qup5_i2c_apps_clk_src",
1268 .ops = &clk_ops_rcg,
1269 VDD_DIG_FMAX_MAP1(LOW, 50000000),
1270 CLK_INIT(blsp2_qup5_i2c_apps_clk_src.c),
1271 },
1272};
1273
1274static struct rcg_clk blsp2_qup6_i2c_apps_clk_src = {
1275 .cmd_rcgr_reg = BLSP2_QUP6_I2C_APPS_CMD_RCGR,
1276 .set_rate = set_rate_hid,
1277 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_i2c_apps_clk,
1278 .current_freq = &rcg_dummy_freq,
1279 .base = &virt_bases[GCC_BASE],
1280 .c = {
1281 .dbg_name = "blsp2_qup6_i2c_apps_clk_src",
1282 .ops = &clk_ops_rcg,
1283 VDD_DIG_FMAX_MAP1(LOW, 50000000),
1284 CLK_INIT(blsp2_qup6_i2c_apps_clk_src.c),
1285 },
1286};
1287
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001288static struct rcg_clk blsp2_uart1_apps_clk_src = {
1289 .cmd_rcgr_reg = BLSP2_UART1_APPS_CMD_RCGR,
1290 .set_rate = set_rate_mnd,
1291 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
1292 .current_freq = &rcg_dummy_freq,
1293 .base = &virt_bases[GCC_BASE],
1294 .c = {
1295 .dbg_name = "blsp2_uart1_apps_clk_src",
1296 .ops = &clk_ops_rcg_mnd,
1297 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
1298 CLK_INIT(blsp2_uart1_apps_clk_src.c),
1299 },
1300};
1301
1302static struct rcg_clk blsp2_uart2_apps_clk_src = {
1303 .cmd_rcgr_reg = BLSP2_UART2_APPS_CMD_RCGR,
1304 .set_rate = set_rate_mnd,
1305 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
1306 .current_freq = &rcg_dummy_freq,
1307 .base = &virt_bases[GCC_BASE],
1308 .c = {
1309 .dbg_name = "blsp2_uart2_apps_clk_src",
1310 .ops = &clk_ops_rcg_mnd,
1311 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
1312 CLK_INIT(blsp2_uart2_apps_clk_src.c),
1313 },
1314};
1315
1316static struct rcg_clk blsp2_uart3_apps_clk_src = {
1317 .cmd_rcgr_reg = BLSP2_UART3_APPS_CMD_RCGR,
1318 .set_rate = set_rate_mnd,
1319 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
1320 .current_freq = &rcg_dummy_freq,
1321 .base = &virt_bases[GCC_BASE],
1322 .c = {
1323 .dbg_name = "blsp2_uart3_apps_clk_src",
1324 .ops = &clk_ops_rcg_mnd,
1325 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
1326 CLK_INIT(blsp2_uart3_apps_clk_src.c),
1327 },
1328};
1329
1330static struct rcg_clk blsp2_uart4_apps_clk_src = {
1331 .cmd_rcgr_reg = BLSP2_UART4_APPS_CMD_RCGR,
1332 .set_rate = set_rate_mnd,
1333 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
1334 .current_freq = &rcg_dummy_freq,
1335 .base = &virt_bases[GCC_BASE],
1336 .c = {
1337 .dbg_name = "blsp2_uart4_apps_clk_src",
1338 .ops = &clk_ops_rcg_mnd,
1339 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
1340 CLK_INIT(blsp2_uart4_apps_clk_src.c),
1341 },
1342};
1343
1344static struct rcg_clk blsp2_uart5_apps_clk_src = {
1345 .cmd_rcgr_reg = BLSP2_UART5_APPS_CMD_RCGR,
1346 .set_rate = set_rate_mnd,
1347 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
1348 .current_freq = &rcg_dummy_freq,
1349 .base = &virt_bases[GCC_BASE],
1350 .c = {
1351 .dbg_name = "blsp2_uart5_apps_clk_src",
1352 .ops = &clk_ops_rcg_mnd,
1353 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
1354 CLK_INIT(blsp2_uart5_apps_clk_src.c),
1355 },
1356};
1357
1358static struct rcg_clk blsp2_uart6_apps_clk_src = {
1359 .cmd_rcgr_reg = BLSP2_UART6_APPS_CMD_RCGR,
1360 .set_rate = set_rate_mnd,
1361 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
1362 .current_freq = &rcg_dummy_freq,
1363 .base = &virt_bases[GCC_BASE],
1364 .c = {
1365 .dbg_name = "blsp2_uart6_apps_clk_src",
1366 .ops = &clk_ops_rcg_mnd,
1367 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
1368 CLK_INIT(blsp2_uart6_apps_clk_src.c),
1369 },
1370};
1371
1372static struct clk_freq_tbl ftbl_gcc_ce1_clk[] = {
1373 F( 50000000, gpll0, 12, 0, 0),
1374 F(100000000, gpll0, 6, 0, 0),
1375 F_END
1376};
1377
1378static struct rcg_clk ce1_clk_src = {
1379 .cmd_rcgr_reg = CE1_CMD_RCGR,
1380 .set_rate = set_rate_hid,
1381 .freq_tbl = ftbl_gcc_ce1_clk,
1382 .current_freq = &rcg_dummy_freq,
1383 .base = &virt_bases[GCC_BASE],
1384 .c = {
1385 .dbg_name = "ce1_clk_src",
1386 .ops = &clk_ops_rcg,
1387 VDD_DIG_FMAX_MAP2(LOW, 50000000, NOMINAL, 100000000),
1388 CLK_INIT(ce1_clk_src.c),
1389 },
1390};
1391
1392static struct clk_freq_tbl ftbl_gcc_ce2_clk[] = {
1393 F( 50000000, gpll0, 12, 0, 0),
1394 F(100000000, gpll0, 6, 0, 0),
1395 F_END
1396};
1397
1398static struct rcg_clk ce2_clk_src = {
1399 .cmd_rcgr_reg = CE2_CMD_RCGR,
1400 .set_rate = set_rate_hid,
1401 .freq_tbl = ftbl_gcc_ce2_clk,
1402 .current_freq = &rcg_dummy_freq,
1403 .base = &virt_bases[GCC_BASE],
1404 .c = {
1405 .dbg_name = "ce2_clk_src",
1406 .ops = &clk_ops_rcg,
1407 VDD_DIG_FMAX_MAP2(LOW, 50000000, NOMINAL, 100000000),
1408 CLK_INIT(ce2_clk_src.c),
1409 },
1410};
1411
1412static struct clk_freq_tbl ftbl_gcc_gp_clk[] = {
1413 F(19200000, cxo, 1, 0, 0),
1414 F_END
1415};
1416
1417static struct rcg_clk gp1_clk_src = {
1418 .cmd_rcgr_reg = GP1_CMD_RCGR,
1419 .set_rate = set_rate_mnd,
1420 .freq_tbl = ftbl_gcc_gp_clk,
1421 .current_freq = &rcg_dummy_freq,
1422 .base = &virt_bases[GCC_BASE],
1423 .c = {
1424 .dbg_name = "gp1_clk_src",
1425 .ops = &clk_ops_rcg_mnd,
1426 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
1427 CLK_INIT(gp1_clk_src.c),
1428 },
1429};
1430
1431static struct rcg_clk gp2_clk_src = {
1432 .cmd_rcgr_reg = GP2_CMD_RCGR,
1433 .set_rate = set_rate_mnd,
1434 .freq_tbl = ftbl_gcc_gp_clk,
1435 .current_freq = &rcg_dummy_freq,
1436 .base = &virt_bases[GCC_BASE],
1437 .c = {
1438 .dbg_name = "gp2_clk_src",
1439 .ops = &clk_ops_rcg_mnd,
1440 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
1441 CLK_INIT(gp2_clk_src.c),
1442 },
1443};
1444
1445static struct rcg_clk gp3_clk_src = {
1446 .cmd_rcgr_reg = GP3_CMD_RCGR,
1447 .set_rate = set_rate_mnd,
1448 .freq_tbl = ftbl_gcc_gp_clk,
1449 .current_freq = &rcg_dummy_freq,
1450 .base = &virt_bases[GCC_BASE],
1451 .c = {
1452 .dbg_name = "gp3_clk_src",
1453 .ops = &clk_ops_rcg_mnd,
1454 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
1455 CLK_INIT(gp3_clk_src.c),
1456 },
1457};
1458
1459static struct clk_freq_tbl ftbl_gcc_pdm2_clk[] = {
1460 F(60000000, gpll0, 10, 0, 0),
1461 F_END
1462};
1463
1464static struct rcg_clk pdm2_clk_src = {
1465 .cmd_rcgr_reg = PDM2_CMD_RCGR,
1466 .set_rate = set_rate_hid,
1467 .freq_tbl = ftbl_gcc_pdm2_clk,
1468 .current_freq = &rcg_dummy_freq,
1469 .base = &virt_bases[GCC_BASE],
1470 .c = {
1471 .dbg_name = "pdm2_clk_src",
1472 .ops = &clk_ops_rcg,
1473 VDD_DIG_FMAX_MAP1(LOW, 60000000),
1474 CLK_INIT(pdm2_clk_src.c),
1475 },
1476};
1477
1478static struct clk_freq_tbl ftbl_gcc_sdcc1_2_apps_clk[] = {
1479 F( 144000, cxo, 16, 3, 25),
1480 F( 400000, cxo, 12, 1, 4),
1481 F( 20000000, gpll0, 15, 1, 2),
1482 F( 25000000, gpll0, 12, 1, 2),
1483 F( 50000000, gpll0, 12, 0, 0),
1484 F(100000000, gpll0, 6, 0, 0),
1485 F(200000000, gpll0, 3, 0, 0),
1486 F_END
1487};
1488
1489static struct clk_freq_tbl ftbl_gcc_sdcc3_4_apps_clk[] = {
1490 F( 144000, cxo, 16, 3, 25),
1491 F( 400000, cxo, 12, 1, 4),
1492 F( 20000000, gpll0, 15, 1, 2),
1493 F( 25000000, gpll0, 12, 1, 2),
1494 F( 50000000, gpll0, 12, 0, 0),
1495 F(100000000, gpll0, 6, 0, 0),
1496 F_END
1497};
1498
Vikram Mulukutla19245e02012-07-23 15:58:04 -07001499static struct clk_freq_tbl ftbl_gcc_sdcc_apps_rumi_clk[] = {
1500 F( 400000, cxo, 12, 1, 4),
1501 F( 19200000, cxo, 1, 0, 0),
1502 F_END
1503};
1504
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001505static struct rcg_clk sdcc1_apps_clk_src = {
1506 .cmd_rcgr_reg = SDCC1_APPS_CMD_RCGR,
1507 .set_rate = set_rate_mnd,
1508 .freq_tbl = ftbl_gcc_sdcc1_2_apps_clk,
1509 .current_freq = &rcg_dummy_freq,
1510 .base = &virt_bases[GCC_BASE],
1511 .c = {
1512 .dbg_name = "sdcc1_apps_clk_src",
1513 .ops = &clk_ops_rcg_mnd,
1514 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
1515 CLK_INIT(sdcc1_apps_clk_src.c),
1516 },
1517};
1518
1519static struct rcg_clk sdcc2_apps_clk_src = {
1520 .cmd_rcgr_reg = SDCC2_APPS_CMD_RCGR,
1521 .set_rate = set_rate_mnd,
1522 .freq_tbl = ftbl_gcc_sdcc1_2_apps_clk,
1523 .current_freq = &rcg_dummy_freq,
1524 .base = &virt_bases[GCC_BASE],
1525 .c = {
1526 .dbg_name = "sdcc2_apps_clk_src",
1527 .ops = &clk_ops_rcg_mnd,
1528 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
1529 CLK_INIT(sdcc2_apps_clk_src.c),
1530 },
1531};
1532
1533static struct rcg_clk sdcc3_apps_clk_src = {
1534 .cmd_rcgr_reg = SDCC3_APPS_CMD_RCGR,
1535 .set_rate = set_rate_mnd,
1536 .freq_tbl = ftbl_gcc_sdcc3_4_apps_clk,
1537 .current_freq = &rcg_dummy_freq,
1538 .base = &virt_bases[GCC_BASE],
1539 .c = {
1540 .dbg_name = "sdcc3_apps_clk_src",
1541 .ops = &clk_ops_rcg_mnd,
1542 VDD_DIG_FMAX_MAP2(LOW, 50000000, NOMINAL, 100000000),
1543 CLK_INIT(sdcc3_apps_clk_src.c),
1544 },
1545};
1546
1547static struct rcg_clk sdcc4_apps_clk_src = {
1548 .cmd_rcgr_reg = SDCC4_APPS_CMD_RCGR,
1549 .set_rate = set_rate_mnd,
1550 .freq_tbl = ftbl_gcc_sdcc3_4_apps_clk,
1551 .current_freq = &rcg_dummy_freq,
1552 .base = &virt_bases[GCC_BASE],
1553 .c = {
1554 .dbg_name = "sdcc4_apps_clk_src",
1555 .ops = &clk_ops_rcg_mnd,
1556 VDD_DIG_FMAX_MAP2(LOW, 50000000, NOMINAL, 100000000),
1557 CLK_INIT(sdcc4_apps_clk_src.c),
1558 },
1559};
1560
1561static struct clk_freq_tbl ftbl_gcc_tsif_ref_clk[] = {
1562 F(105000, cxo, 2, 1, 91),
1563 F_END
1564};
1565
1566static struct rcg_clk tsif_ref_clk_src = {
1567 .cmd_rcgr_reg = TSIF_REF_CMD_RCGR,
1568 .set_rate = set_rate_mnd,
1569 .freq_tbl = ftbl_gcc_tsif_ref_clk,
1570 .current_freq = &rcg_dummy_freq,
1571 .base = &virt_bases[GCC_BASE],
1572 .c = {
1573 .dbg_name = "tsif_ref_clk_src",
1574 .ops = &clk_ops_rcg_mnd,
1575 VDD_DIG_FMAX_MAP1(LOW, 105500),
1576 CLK_INIT(tsif_ref_clk_src.c),
1577 },
1578};
1579
1580static struct clk_freq_tbl ftbl_gcc_usb30_mock_utmi_clk[] = {
1581 F(60000000, gpll0, 10, 0, 0),
1582 F_END
1583};
1584
1585static struct rcg_clk usb30_mock_utmi_clk_src = {
1586 .cmd_rcgr_reg = USB30_MOCK_UTMI_CMD_RCGR,
1587 .set_rate = set_rate_hid,
1588 .freq_tbl = ftbl_gcc_usb30_mock_utmi_clk,
1589 .current_freq = &rcg_dummy_freq,
1590 .base = &virt_bases[GCC_BASE],
1591 .c = {
1592 .dbg_name = "usb30_mock_utmi_clk_src",
1593 .ops = &clk_ops_rcg,
1594 VDD_DIG_FMAX_MAP1(NOMINAL, 60000000),
1595 CLK_INIT(usb30_mock_utmi_clk_src.c),
1596 },
1597};
1598
1599static struct clk_freq_tbl ftbl_gcc_usb_hs_system_clk[] = {
1600 F(75000000, gpll0, 8, 0, 0),
1601 F_END
1602};
1603
1604static struct rcg_clk usb_hs_system_clk_src = {
1605 .cmd_rcgr_reg = USB_HS_SYSTEM_CMD_RCGR,
1606 .set_rate = set_rate_hid,
1607 .freq_tbl = ftbl_gcc_usb_hs_system_clk,
1608 .current_freq = &rcg_dummy_freq,
1609 .base = &virt_bases[GCC_BASE],
1610 .c = {
1611 .dbg_name = "usb_hs_system_clk_src",
1612 .ops = &clk_ops_rcg,
1613 VDD_DIG_FMAX_MAP2(LOW, 37500000, NOMINAL, 75000000),
1614 CLK_INIT(usb_hs_system_clk_src.c),
1615 },
1616};
1617
1618static struct clk_freq_tbl ftbl_gcc_usb_hsic_clk[] = {
1619 F_HSIC(480000000, gpll1, 1, 0, 0),
1620 F_END
1621};
1622
1623static struct rcg_clk usb_hsic_clk_src = {
1624 .cmd_rcgr_reg = USB_HSIC_CMD_RCGR,
1625 .set_rate = set_rate_hid,
1626 .freq_tbl = ftbl_gcc_usb_hsic_clk,
1627 .current_freq = &rcg_dummy_freq,
1628 .base = &virt_bases[GCC_BASE],
1629 .c = {
1630 .dbg_name = "usb_hsic_clk_src",
1631 .ops = &clk_ops_rcg,
1632 VDD_DIG_FMAX_MAP1(LOW, 480000000),
1633 CLK_INIT(usb_hsic_clk_src.c),
1634 },
1635};
1636
1637static struct clk_freq_tbl ftbl_gcc_usb_hsic_io_cal_clk[] = {
1638 F(9600000, cxo, 2, 0, 0),
1639 F_END
1640};
1641
1642static struct rcg_clk usb_hsic_io_cal_clk_src = {
1643 .cmd_rcgr_reg = USB_HSIC_IO_CAL_CMD_RCGR,
1644 .set_rate = set_rate_hid,
1645 .freq_tbl = ftbl_gcc_usb_hsic_io_cal_clk,
1646 .current_freq = &rcg_dummy_freq,
1647 .base = &virt_bases[GCC_BASE],
1648 .c = {
1649 .dbg_name = "usb_hsic_io_cal_clk_src",
1650 .ops = &clk_ops_rcg,
1651 VDD_DIG_FMAX_MAP1(LOW, 9600000),
1652 CLK_INIT(usb_hsic_io_cal_clk_src.c),
1653 },
1654};
1655
1656static struct clk_freq_tbl ftbl_gcc_usb_hsic_system_clk[] = {
1657 F(75000000, gpll0, 8, 0, 0),
1658 F_END
1659};
1660
1661static struct rcg_clk usb_hsic_system_clk_src = {
1662 .cmd_rcgr_reg = USB_HSIC_SYSTEM_CMD_RCGR,
1663 .set_rate = set_rate_hid,
1664 .freq_tbl = ftbl_gcc_usb_hsic_system_clk,
1665 .current_freq = &rcg_dummy_freq,
1666 .base = &virt_bases[GCC_BASE],
1667 .c = {
1668 .dbg_name = "usb_hsic_system_clk_src",
1669 .ops = &clk_ops_rcg,
1670 VDD_DIG_FMAX_MAP2(LOW, 37500000, NOMINAL, 75000000),
1671 CLK_INIT(usb_hsic_system_clk_src.c),
1672 },
1673};
1674
1675static struct local_vote_clk gcc_bam_dma_ahb_clk = {
1676 .cbcr_reg = BAM_DMA_AHB_CBCR,
1677 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
1678 .en_mask = BIT(12),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001679 .base = &virt_bases[GCC_BASE],
1680 .c = {
1681 .dbg_name = "gcc_bam_dma_ahb_clk",
1682 .ops = &clk_ops_vote,
1683 CLK_INIT(gcc_bam_dma_ahb_clk.c),
1684 },
1685};
1686
1687static struct local_vote_clk gcc_blsp1_ahb_clk = {
1688 .cbcr_reg = BLSP1_AHB_CBCR,
1689 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
1690 .en_mask = BIT(17),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001691 .base = &virt_bases[GCC_BASE],
1692 .c = {
1693 .dbg_name = "gcc_blsp1_ahb_clk",
1694 .ops = &clk_ops_vote,
1695 CLK_INIT(gcc_blsp1_ahb_clk.c),
1696 },
1697};
1698
1699static struct branch_clk gcc_blsp1_qup1_i2c_apps_clk = {
1700 .cbcr_reg = BLSP1_QUP1_I2C_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001701 .base = &virt_bases[GCC_BASE],
1702 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07001703 .parent = &cxo_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001704 .dbg_name = "gcc_blsp1_qup1_i2c_apps_clk",
1705 .ops = &clk_ops_branch,
1706 CLK_INIT(gcc_blsp1_qup1_i2c_apps_clk.c),
1707 },
1708};
1709
1710static struct branch_clk gcc_blsp1_qup1_spi_apps_clk = {
1711 .cbcr_reg = BLSP1_QUP1_SPI_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001712 .base = &virt_bases[GCC_BASE],
1713 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07001714 .parent = &blsp1_qup1_spi_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001715 .dbg_name = "gcc_blsp1_qup1_spi_apps_clk",
1716 .ops = &clk_ops_branch,
1717 CLK_INIT(gcc_blsp1_qup1_spi_apps_clk.c),
1718 },
1719};
1720
1721static struct branch_clk gcc_blsp1_qup2_i2c_apps_clk = {
1722 .cbcr_reg = BLSP1_QUP2_I2C_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001723 .base = &virt_bases[GCC_BASE],
1724 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07001725 .parent = &cxo_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001726 .dbg_name = "gcc_blsp1_qup2_i2c_apps_clk",
1727 .ops = &clk_ops_branch,
1728 CLK_INIT(gcc_blsp1_qup2_i2c_apps_clk.c),
1729 },
1730};
1731
1732static struct branch_clk gcc_blsp1_qup2_spi_apps_clk = {
1733 .cbcr_reg = BLSP1_QUP2_SPI_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001734 .base = &virt_bases[GCC_BASE],
1735 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07001736 .parent = &blsp1_qup2_spi_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001737 .dbg_name = "gcc_blsp1_qup2_spi_apps_clk",
1738 .ops = &clk_ops_branch,
1739 CLK_INIT(gcc_blsp1_qup2_spi_apps_clk.c),
1740 },
1741};
1742
1743static struct branch_clk gcc_blsp1_qup3_i2c_apps_clk = {
1744 .cbcr_reg = BLSP1_QUP3_I2C_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001745 .base = &virt_bases[GCC_BASE],
1746 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07001747 .parent = &cxo_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001748 .dbg_name = "gcc_blsp1_qup3_i2c_apps_clk",
1749 .ops = &clk_ops_branch,
1750 CLK_INIT(gcc_blsp1_qup3_i2c_apps_clk.c),
1751 },
1752};
1753
1754static struct branch_clk gcc_blsp1_qup3_spi_apps_clk = {
1755 .cbcr_reg = BLSP1_QUP3_SPI_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001756 .base = &virt_bases[GCC_BASE],
1757 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07001758 .parent = &blsp1_qup3_spi_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001759 .dbg_name = "gcc_blsp1_qup3_spi_apps_clk",
1760 .ops = &clk_ops_branch,
1761 CLK_INIT(gcc_blsp1_qup3_spi_apps_clk.c),
1762 },
1763};
1764
1765static struct branch_clk gcc_blsp1_qup4_i2c_apps_clk = {
1766 .cbcr_reg = BLSP1_QUP4_I2C_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001767 .base = &virt_bases[GCC_BASE],
1768 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07001769 .parent = &cxo_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001770 .dbg_name = "gcc_blsp1_qup4_i2c_apps_clk",
1771 .ops = &clk_ops_branch,
1772 CLK_INIT(gcc_blsp1_qup4_i2c_apps_clk.c),
1773 },
1774};
1775
1776static struct branch_clk gcc_blsp1_qup4_spi_apps_clk = {
1777 .cbcr_reg = BLSP1_QUP4_SPI_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001778 .base = &virt_bases[GCC_BASE],
1779 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07001780 .parent = &blsp1_qup4_spi_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001781 .dbg_name = "gcc_blsp1_qup4_spi_apps_clk",
1782 .ops = &clk_ops_branch,
1783 CLK_INIT(gcc_blsp1_qup4_spi_apps_clk.c),
1784 },
1785};
1786
1787static struct branch_clk gcc_blsp1_qup5_i2c_apps_clk = {
1788 .cbcr_reg = BLSP1_QUP5_I2C_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001789 .base = &virt_bases[GCC_BASE],
1790 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07001791 .parent = &cxo_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001792 .dbg_name = "gcc_blsp1_qup5_i2c_apps_clk",
1793 .ops = &clk_ops_branch,
1794 CLK_INIT(gcc_blsp1_qup5_i2c_apps_clk.c),
1795 },
1796};
1797
1798static struct branch_clk gcc_blsp1_qup5_spi_apps_clk = {
1799 .cbcr_reg = BLSP1_QUP5_SPI_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001800 .base = &virt_bases[GCC_BASE],
1801 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07001802 .parent = &blsp1_qup5_spi_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001803 .dbg_name = "gcc_blsp1_qup5_spi_apps_clk",
1804 .ops = &clk_ops_branch,
1805 CLK_INIT(gcc_blsp1_qup5_spi_apps_clk.c),
1806 },
1807};
1808
1809static struct branch_clk gcc_blsp1_qup6_i2c_apps_clk = {
1810 .cbcr_reg = BLSP1_QUP6_I2C_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001811 .base = &virt_bases[GCC_BASE],
1812 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07001813 .parent = &cxo_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001814 .dbg_name = "gcc_blsp1_qup6_i2c_apps_clk",
1815 .ops = &clk_ops_branch,
1816 CLK_INIT(gcc_blsp1_qup6_i2c_apps_clk.c),
1817 },
1818};
1819
1820static struct branch_clk gcc_blsp1_qup6_spi_apps_clk = {
1821 .cbcr_reg = BLSP1_QUP6_SPI_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001822 .base = &virt_bases[GCC_BASE],
1823 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07001824 .parent = &blsp1_qup6_spi_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001825 .dbg_name = "gcc_blsp1_qup6_spi_apps_clk",
1826 .ops = &clk_ops_branch,
1827 CLK_INIT(gcc_blsp1_qup6_spi_apps_clk.c),
1828 },
1829};
1830
1831static struct branch_clk gcc_blsp1_uart1_apps_clk = {
1832 .cbcr_reg = BLSP1_UART1_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001833 .base = &virt_bases[GCC_BASE],
1834 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07001835 .parent = &blsp1_uart1_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001836 .dbg_name = "gcc_blsp1_uart1_apps_clk",
1837 .ops = &clk_ops_branch,
1838 CLK_INIT(gcc_blsp1_uart1_apps_clk.c),
1839 },
1840};
1841
1842static struct branch_clk gcc_blsp1_uart2_apps_clk = {
1843 .cbcr_reg = BLSP1_UART2_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001844 .base = &virt_bases[GCC_BASE],
1845 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07001846 .parent = &blsp1_uart2_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001847 .dbg_name = "gcc_blsp1_uart2_apps_clk",
1848 .ops = &clk_ops_branch,
1849 CLK_INIT(gcc_blsp1_uart2_apps_clk.c),
1850 },
1851};
1852
1853static struct branch_clk gcc_blsp1_uart3_apps_clk = {
1854 .cbcr_reg = BLSP1_UART3_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001855 .base = &virt_bases[GCC_BASE],
1856 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07001857 .parent = &blsp1_uart3_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001858 .dbg_name = "gcc_blsp1_uart3_apps_clk",
1859 .ops = &clk_ops_branch,
1860 CLK_INIT(gcc_blsp1_uart3_apps_clk.c),
1861 },
1862};
1863
1864static struct branch_clk gcc_blsp1_uart4_apps_clk = {
1865 .cbcr_reg = BLSP1_UART4_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001866 .base = &virt_bases[GCC_BASE],
1867 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07001868 .parent = &blsp1_uart4_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001869 .dbg_name = "gcc_blsp1_uart4_apps_clk",
1870 .ops = &clk_ops_branch,
1871 CLK_INIT(gcc_blsp1_uart4_apps_clk.c),
1872 },
1873};
1874
1875static struct branch_clk gcc_blsp1_uart5_apps_clk = {
1876 .cbcr_reg = BLSP1_UART5_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001877 .base = &virt_bases[GCC_BASE],
1878 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07001879 .parent = &blsp1_uart5_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001880 .dbg_name = "gcc_blsp1_uart5_apps_clk",
1881 .ops = &clk_ops_branch,
1882 CLK_INIT(gcc_blsp1_uart5_apps_clk.c),
1883 },
1884};
1885
1886static struct branch_clk gcc_blsp1_uart6_apps_clk = {
1887 .cbcr_reg = BLSP1_UART6_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001888 .base = &virt_bases[GCC_BASE],
1889 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07001890 .parent = &blsp1_uart6_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001891 .dbg_name = "gcc_blsp1_uart6_apps_clk",
1892 .ops = &clk_ops_branch,
1893 CLK_INIT(gcc_blsp1_uart6_apps_clk.c),
1894 },
1895};
1896
Vikram Mulukutlaa967db42012-05-10 16:20:40 -07001897static struct local_vote_clk gcc_boot_rom_ahb_clk = {
1898 .cbcr_reg = BOOT_ROM_AHB_CBCR,
1899 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
1900 .en_mask = BIT(10),
Vikram Mulukutlaa967db42012-05-10 16:20:40 -07001901 .base = &virt_bases[GCC_BASE],
1902 .c = {
1903 .dbg_name = "gcc_boot_rom_ahb_clk",
1904 .ops = &clk_ops_vote,
1905 CLK_INIT(gcc_boot_rom_ahb_clk.c),
1906 },
1907};
1908
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001909static struct local_vote_clk gcc_blsp2_ahb_clk = {
1910 .cbcr_reg = BLSP2_AHB_CBCR,
1911 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
1912 .en_mask = BIT(15),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001913 .base = &virt_bases[GCC_BASE],
1914 .c = {
1915 .dbg_name = "gcc_blsp2_ahb_clk",
1916 .ops = &clk_ops_vote,
1917 CLK_INIT(gcc_blsp2_ahb_clk.c),
1918 },
1919};
1920
1921static struct branch_clk gcc_blsp2_qup1_i2c_apps_clk = {
1922 .cbcr_reg = BLSP2_QUP1_I2C_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001923 .base = &virt_bases[GCC_BASE],
1924 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07001925 .parent = &cxo_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001926 .dbg_name = "gcc_blsp2_qup1_i2c_apps_clk",
1927 .ops = &clk_ops_branch,
1928 CLK_INIT(gcc_blsp2_qup1_i2c_apps_clk.c),
1929 },
1930};
1931
1932static struct branch_clk gcc_blsp2_qup1_spi_apps_clk = {
1933 .cbcr_reg = BLSP2_QUP1_SPI_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001934 .base = &virt_bases[GCC_BASE],
1935 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07001936 .parent = &blsp2_qup1_spi_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001937 .dbg_name = "gcc_blsp2_qup1_spi_apps_clk",
1938 .ops = &clk_ops_branch,
1939 CLK_INIT(gcc_blsp2_qup1_spi_apps_clk.c),
1940 },
1941};
1942
1943static struct branch_clk gcc_blsp2_qup2_i2c_apps_clk = {
1944 .cbcr_reg = BLSP2_QUP2_I2C_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001945 .base = &virt_bases[GCC_BASE],
1946 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07001947 .parent = &cxo_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001948 .dbg_name = "gcc_blsp2_qup2_i2c_apps_clk",
1949 .ops = &clk_ops_branch,
1950 CLK_INIT(gcc_blsp2_qup2_i2c_apps_clk.c),
1951 },
1952};
1953
1954static struct branch_clk gcc_blsp2_qup2_spi_apps_clk = {
1955 .cbcr_reg = BLSP2_QUP2_SPI_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001956 .base = &virt_bases[GCC_BASE],
1957 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07001958 .parent = &blsp2_qup2_spi_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001959 .dbg_name = "gcc_blsp2_qup2_spi_apps_clk",
1960 .ops = &clk_ops_branch,
1961 CLK_INIT(gcc_blsp2_qup2_spi_apps_clk.c),
1962 },
1963};
1964
1965static struct branch_clk gcc_blsp2_qup3_i2c_apps_clk = {
1966 .cbcr_reg = BLSP2_QUP3_I2C_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001967 .base = &virt_bases[GCC_BASE],
1968 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07001969 .parent = &cxo_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001970 .dbg_name = "gcc_blsp2_qup3_i2c_apps_clk",
1971 .ops = &clk_ops_branch,
1972 CLK_INIT(gcc_blsp2_qup3_i2c_apps_clk.c),
1973 },
1974};
1975
1976static struct branch_clk gcc_blsp2_qup3_spi_apps_clk = {
1977 .cbcr_reg = BLSP2_QUP3_SPI_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001978 .base = &virt_bases[GCC_BASE],
1979 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07001980 .parent = &blsp2_qup3_spi_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001981 .dbg_name = "gcc_blsp2_qup3_spi_apps_clk",
1982 .ops = &clk_ops_branch,
1983 CLK_INIT(gcc_blsp2_qup3_spi_apps_clk.c),
1984 },
1985};
1986
1987static struct branch_clk gcc_blsp2_qup4_i2c_apps_clk = {
1988 .cbcr_reg = BLSP2_QUP4_I2C_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001989 .base = &virt_bases[GCC_BASE],
1990 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07001991 .parent = &cxo_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001992 .dbg_name = "gcc_blsp2_qup4_i2c_apps_clk",
1993 .ops = &clk_ops_branch,
1994 CLK_INIT(gcc_blsp2_qup4_i2c_apps_clk.c),
1995 },
1996};
1997
1998static struct branch_clk gcc_blsp2_qup4_spi_apps_clk = {
1999 .cbcr_reg = BLSP2_QUP4_SPI_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002000 .base = &virt_bases[GCC_BASE],
2001 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002002 .parent = &blsp2_qup4_spi_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002003 .dbg_name = "gcc_blsp2_qup4_spi_apps_clk",
2004 .ops = &clk_ops_branch,
2005 CLK_INIT(gcc_blsp2_qup4_spi_apps_clk.c),
2006 },
2007};
2008
2009static struct branch_clk gcc_blsp2_qup5_i2c_apps_clk = {
2010 .cbcr_reg = BLSP2_QUP5_I2C_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002011 .base = &virt_bases[GCC_BASE],
2012 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002013 .parent = &cxo_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002014 .dbg_name = "gcc_blsp2_qup5_i2c_apps_clk",
2015 .ops = &clk_ops_branch,
2016 CLK_INIT(gcc_blsp2_qup5_i2c_apps_clk.c),
2017 },
2018};
2019
2020static struct branch_clk gcc_blsp2_qup5_spi_apps_clk = {
2021 .cbcr_reg = BLSP2_QUP5_SPI_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002022 .base = &virt_bases[GCC_BASE],
2023 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002024 .parent = &blsp2_qup5_spi_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002025 .dbg_name = "gcc_blsp2_qup5_spi_apps_clk",
2026 .ops = &clk_ops_branch,
2027 CLK_INIT(gcc_blsp2_qup5_spi_apps_clk.c),
2028 },
2029};
2030
2031static struct branch_clk gcc_blsp2_qup6_i2c_apps_clk = {
2032 .cbcr_reg = BLSP2_QUP6_I2C_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002033 .base = &virt_bases[GCC_BASE],
2034 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002035 .parent = &cxo_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002036 .dbg_name = "gcc_blsp2_qup6_i2c_apps_clk",
2037 .ops = &clk_ops_branch,
2038 CLK_INIT(gcc_blsp2_qup6_i2c_apps_clk.c),
2039 },
2040};
2041
2042static struct branch_clk gcc_blsp2_qup6_spi_apps_clk = {
2043 .cbcr_reg = BLSP2_QUP6_SPI_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002044 .base = &virt_bases[GCC_BASE],
2045 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002046 .parent = &blsp2_qup6_spi_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002047 .dbg_name = "gcc_blsp2_qup6_spi_apps_clk",
2048 .ops = &clk_ops_branch,
2049 CLK_INIT(gcc_blsp2_qup6_spi_apps_clk.c),
2050 },
2051};
2052
2053static struct branch_clk gcc_blsp2_uart1_apps_clk = {
2054 .cbcr_reg = BLSP2_UART1_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002055 .base = &virt_bases[GCC_BASE],
2056 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002057 .parent = &blsp2_uart1_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002058 .dbg_name = "gcc_blsp2_uart1_apps_clk",
2059 .ops = &clk_ops_branch,
2060 CLK_INIT(gcc_blsp2_uart1_apps_clk.c),
2061 },
2062};
2063
2064static struct branch_clk gcc_blsp2_uart2_apps_clk = {
2065 .cbcr_reg = BLSP2_UART2_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002066 .base = &virt_bases[GCC_BASE],
2067 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002068 .parent = &blsp2_uart2_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002069 .dbg_name = "gcc_blsp2_uart2_apps_clk",
2070 .ops = &clk_ops_branch,
2071 CLK_INIT(gcc_blsp2_uart2_apps_clk.c),
2072 },
2073};
2074
2075static struct branch_clk gcc_blsp2_uart3_apps_clk = {
2076 .cbcr_reg = BLSP2_UART3_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002077 .base = &virt_bases[GCC_BASE],
2078 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002079 .parent = &blsp2_uart3_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002080 .dbg_name = "gcc_blsp2_uart3_apps_clk",
2081 .ops = &clk_ops_branch,
2082 CLK_INIT(gcc_blsp2_uart3_apps_clk.c),
2083 },
2084};
2085
2086static struct branch_clk gcc_blsp2_uart4_apps_clk = {
2087 .cbcr_reg = BLSP2_UART4_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002088 .base = &virt_bases[GCC_BASE],
2089 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002090 .parent = &blsp2_uart4_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002091 .dbg_name = "gcc_blsp2_uart4_apps_clk",
2092 .ops = &clk_ops_branch,
2093 CLK_INIT(gcc_blsp2_uart4_apps_clk.c),
2094 },
2095};
2096
2097static struct branch_clk gcc_blsp2_uart5_apps_clk = {
2098 .cbcr_reg = BLSP2_UART5_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002099 .base = &virt_bases[GCC_BASE],
2100 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002101 .parent = &blsp2_uart5_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002102 .dbg_name = "gcc_blsp2_uart5_apps_clk",
2103 .ops = &clk_ops_branch,
2104 CLK_INIT(gcc_blsp2_uart5_apps_clk.c),
2105 },
2106};
2107
2108static struct branch_clk gcc_blsp2_uart6_apps_clk = {
2109 .cbcr_reg = BLSP2_UART6_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002110 .base = &virt_bases[GCC_BASE],
2111 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002112 .parent = &blsp2_uart6_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002113 .dbg_name = "gcc_blsp2_uart6_apps_clk",
2114 .ops = &clk_ops_branch,
2115 CLK_INIT(gcc_blsp2_uart6_apps_clk.c),
2116 },
2117};
2118
2119static struct local_vote_clk gcc_ce1_clk = {
2120 .cbcr_reg = CE1_CBCR,
2121 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
2122 .en_mask = BIT(5),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002123 .base = &virt_bases[GCC_BASE],
2124 .c = {
2125 .dbg_name = "gcc_ce1_clk",
2126 .ops = &clk_ops_vote,
2127 CLK_INIT(gcc_ce1_clk.c),
2128 },
2129};
2130
2131static struct local_vote_clk gcc_ce1_ahb_clk = {
2132 .cbcr_reg = CE1_AHB_CBCR,
2133 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
2134 .en_mask = BIT(3),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002135 .base = &virt_bases[GCC_BASE],
2136 .c = {
2137 .dbg_name = "gcc_ce1_ahb_clk",
2138 .ops = &clk_ops_vote,
2139 CLK_INIT(gcc_ce1_ahb_clk.c),
2140 },
2141};
2142
2143static struct local_vote_clk gcc_ce1_axi_clk = {
2144 .cbcr_reg = CE1_AXI_CBCR,
2145 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
2146 .en_mask = BIT(4),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002147 .base = &virt_bases[GCC_BASE],
2148 .c = {
2149 .dbg_name = "gcc_ce1_axi_clk",
2150 .ops = &clk_ops_vote,
2151 CLK_INIT(gcc_ce1_axi_clk.c),
2152 },
2153};
2154
2155static struct local_vote_clk gcc_ce2_clk = {
2156 .cbcr_reg = CE2_CBCR,
2157 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
2158 .en_mask = BIT(2),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002159 .base = &virt_bases[GCC_BASE],
2160 .c = {
2161 .dbg_name = "gcc_ce2_clk",
2162 .ops = &clk_ops_vote,
2163 CLK_INIT(gcc_ce2_clk.c),
2164 },
2165};
2166
2167static struct local_vote_clk gcc_ce2_ahb_clk = {
2168 .cbcr_reg = CE2_AHB_CBCR,
2169 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
2170 .en_mask = BIT(0),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002171 .base = &virt_bases[GCC_BASE],
2172 .c = {
Vikram Mulukutla3f580f82012-09-04 15:22:42 -07002173 .dbg_name = "gcc_ce2_ahb_clk",
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002174 .ops = &clk_ops_vote,
Vikram Mulukutla3f580f82012-09-04 15:22:42 -07002175 CLK_INIT(gcc_ce2_ahb_clk.c),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002176 },
2177};
2178
2179static struct local_vote_clk gcc_ce2_axi_clk = {
2180 .cbcr_reg = CE2_AXI_CBCR,
2181 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
2182 .en_mask = BIT(1),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002183 .base = &virt_bases[GCC_BASE],
2184 .c = {
Vikram Mulukutla3f580f82012-09-04 15:22:42 -07002185 .dbg_name = "gcc_ce2_axi_clk",
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002186 .ops = &clk_ops_vote,
2187 CLK_INIT(gcc_ce2_axi_clk.c),
2188 },
2189};
2190
2191static struct branch_clk gcc_gp1_clk = {
2192 .cbcr_reg = GP1_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002193 .base = &virt_bases[GCC_BASE],
2194 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002195 .parent = &gp1_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002196 .dbg_name = "gcc_gp1_clk",
2197 .ops = &clk_ops_branch,
2198 CLK_INIT(gcc_gp1_clk.c),
2199 },
2200};
2201
2202static struct branch_clk gcc_gp2_clk = {
2203 .cbcr_reg = GP2_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002204 .base = &virt_bases[GCC_BASE],
2205 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002206 .parent = &gp2_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002207 .dbg_name = "gcc_gp2_clk",
2208 .ops = &clk_ops_branch,
2209 CLK_INIT(gcc_gp2_clk.c),
2210 },
2211};
2212
2213static struct branch_clk gcc_gp3_clk = {
2214 .cbcr_reg = GP3_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002215 .base = &virt_bases[GCC_BASE],
2216 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002217 .parent = &gp3_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002218 .dbg_name = "gcc_gp3_clk",
2219 .ops = &clk_ops_branch,
2220 CLK_INIT(gcc_gp3_clk.c),
2221 },
2222};
2223
2224static struct branch_clk gcc_pdm2_clk = {
2225 .cbcr_reg = PDM2_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002226 .base = &virt_bases[GCC_BASE],
2227 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002228 .parent = &pdm2_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002229 .dbg_name = "gcc_pdm2_clk",
2230 .ops = &clk_ops_branch,
2231 CLK_INIT(gcc_pdm2_clk.c),
2232 },
2233};
2234
2235static struct branch_clk gcc_pdm_ahb_clk = {
2236 .cbcr_reg = PDM_AHB_CBCR,
2237 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002238 .base = &virt_bases[GCC_BASE],
2239 .c = {
2240 .dbg_name = "gcc_pdm_ahb_clk",
2241 .ops = &clk_ops_branch,
2242 CLK_INIT(gcc_pdm_ahb_clk.c),
2243 },
2244};
2245
2246static struct local_vote_clk gcc_prng_ahb_clk = {
2247 .cbcr_reg = PRNG_AHB_CBCR,
2248 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
2249 .en_mask = BIT(13),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002250 .base = &virt_bases[GCC_BASE],
2251 .c = {
2252 .dbg_name = "gcc_prng_ahb_clk",
2253 .ops = &clk_ops_vote,
2254 CLK_INIT(gcc_prng_ahb_clk.c),
2255 },
2256};
2257
2258static struct branch_clk gcc_sdcc1_ahb_clk = {
2259 .cbcr_reg = SDCC1_AHB_CBCR,
2260 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002261 .base = &virt_bases[GCC_BASE],
2262 .c = {
2263 .dbg_name = "gcc_sdcc1_ahb_clk",
2264 .ops = &clk_ops_branch,
2265 CLK_INIT(gcc_sdcc1_ahb_clk.c),
2266 },
2267};
2268
2269static struct branch_clk gcc_sdcc1_apps_clk = {
2270 .cbcr_reg = SDCC1_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002271 .base = &virt_bases[GCC_BASE],
2272 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002273 .parent = &sdcc1_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002274 .dbg_name = "gcc_sdcc1_apps_clk",
2275 .ops = &clk_ops_branch,
2276 CLK_INIT(gcc_sdcc1_apps_clk.c),
2277 },
2278};
2279
2280static struct branch_clk gcc_sdcc2_ahb_clk = {
2281 .cbcr_reg = SDCC2_AHB_CBCR,
2282 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002283 .base = &virt_bases[GCC_BASE],
2284 .c = {
2285 .dbg_name = "gcc_sdcc2_ahb_clk",
2286 .ops = &clk_ops_branch,
2287 CLK_INIT(gcc_sdcc2_ahb_clk.c),
2288 },
2289};
2290
2291static struct branch_clk gcc_sdcc2_apps_clk = {
2292 .cbcr_reg = SDCC2_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002293 .base = &virt_bases[GCC_BASE],
2294 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002295 .parent = &sdcc2_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002296 .dbg_name = "gcc_sdcc2_apps_clk",
2297 .ops = &clk_ops_branch,
2298 CLK_INIT(gcc_sdcc2_apps_clk.c),
2299 },
2300};
2301
2302static struct branch_clk gcc_sdcc3_ahb_clk = {
2303 .cbcr_reg = SDCC3_AHB_CBCR,
2304 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002305 .base = &virt_bases[GCC_BASE],
2306 .c = {
2307 .dbg_name = "gcc_sdcc3_ahb_clk",
2308 .ops = &clk_ops_branch,
2309 CLK_INIT(gcc_sdcc3_ahb_clk.c),
2310 },
2311};
2312
2313static struct branch_clk gcc_sdcc3_apps_clk = {
2314 .cbcr_reg = SDCC3_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002315 .base = &virt_bases[GCC_BASE],
2316 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002317 .parent = &sdcc3_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002318 .dbg_name = "gcc_sdcc3_apps_clk",
2319 .ops = &clk_ops_branch,
2320 CLK_INIT(gcc_sdcc3_apps_clk.c),
2321 },
2322};
2323
2324static struct branch_clk gcc_sdcc4_ahb_clk = {
2325 .cbcr_reg = SDCC4_AHB_CBCR,
2326 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002327 .base = &virt_bases[GCC_BASE],
2328 .c = {
2329 .dbg_name = "gcc_sdcc4_ahb_clk",
2330 .ops = &clk_ops_branch,
2331 CLK_INIT(gcc_sdcc4_ahb_clk.c),
2332 },
2333};
2334
2335static struct branch_clk gcc_sdcc4_apps_clk = {
2336 .cbcr_reg = SDCC4_APPS_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002337 .base = &virt_bases[GCC_BASE],
2338 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002339 .parent = &sdcc4_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002340 .dbg_name = "gcc_sdcc4_apps_clk",
2341 .ops = &clk_ops_branch,
2342 CLK_INIT(gcc_sdcc4_apps_clk.c),
2343 },
2344};
2345
2346static struct branch_clk gcc_tsif_ahb_clk = {
2347 .cbcr_reg = TSIF_AHB_CBCR,
2348 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002349 .base = &virt_bases[GCC_BASE],
2350 .c = {
2351 .dbg_name = "gcc_tsif_ahb_clk",
2352 .ops = &clk_ops_branch,
2353 CLK_INIT(gcc_tsif_ahb_clk.c),
2354 },
2355};
2356
2357static struct branch_clk gcc_tsif_ref_clk = {
2358 .cbcr_reg = TSIF_REF_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002359 .base = &virt_bases[GCC_BASE],
2360 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002361 .parent = &tsif_ref_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002362 .dbg_name = "gcc_tsif_ref_clk",
2363 .ops = &clk_ops_branch,
2364 CLK_INIT(gcc_tsif_ref_clk.c),
2365 },
2366};
2367
Vikram Mulukutla9e3512c2012-09-28 13:53:52 -07002368struct branch_clk gcc_sys_noc_usb3_axi_clk = {
2369 .cbcr_reg = SYS_NOC_USB3_AXI_CBCR,
Vikram Mulukutla9e3512c2012-09-28 13:53:52 -07002370 .has_sibling = 1,
2371 .base = &virt_bases[GCC_BASE],
2372 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002373 .parent = &usb30_master_clk_src.c,
Vikram Mulukutla9e3512c2012-09-28 13:53:52 -07002374 .dbg_name = "gcc_sys_noc_usb3_axi_clk",
2375 .ops = &clk_ops_branch,
2376 CLK_INIT(gcc_sys_noc_usb3_axi_clk.c),
2377 },
2378};
2379
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002380static struct branch_clk gcc_usb30_master_clk = {
2381 .cbcr_reg = USB30_MASTER_CBCR,
Vikram Mulukutla777c3ce2012-07-03 20:02:55 -07002382 .bcr_reg = USB_30_BCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002383 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002384 .base = &virt_bases[GCC_BASE],
2385 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002386 .parent = &usb30_master_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002387 .dbg_name = "gcc_usb30_master_clk",
2388 .ops = &clk_ops_branch,
2389 CLK_INIT(gcc_usb30_master_clk.c),
Vikram Mulukutla9e3512c2012-09-28 13:53:52 -07002390 .depends = &gcc_sys_noc_usb3_axi_clk.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002391 },
2392};
2393
2394static struct branch_clk gcc_usb30_mock_utmi_clk = {
2395 .cbcr_reg = USB30_MOCK_UTMI_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 = &usb30_mock_utmi_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002399 .dbg_name = "gcc_usb30_mock_utmi_clk",
2400 .ops = &clk_ops_branch,
2401 CLK_INIT(gcc_usb30_mock_utmi_clk.c),
2402 },
2403};
2404
Vikram Mulukutla3b98a6d2012-08-15 20:35:25 -07002405struct branch_clk gcc_usb30_sleep_clk = {
2406 .cbcr_reg = USB30_SLEEP_CBCR,
2407 .has_sibling = 1,
2408 .base = &virt_bases[GCC_BASE],
2409 .c = {
2410 .dbg_name = "gcc_usb30_sleep_clk",
2411 .ops = &clk_ops_branch,
2412 CLK_INIT(gcc_usb30_sleep_clk.c),
2413 },
2414};
2415
2416struct branch_clk gcc_usb2a_phy_sleep_clk = {
2417 .cbcr_reg = USB2A_PHY_SLEEP_CBCR,
2418 .has_sibling = 1,
2419 .base = &virt_bases[GCC_BASE],
2420 .c = {
2421 .dbg_name = "gcc_usb2a_phy_sleep_clk",
2422 .ops = &clk_ops_branch,
2423 CLK_INIT(gcc_usb2a_phy_sleep_clk.c),
2424 },
2425};
2426
2427struct branch_clk gcc_usb2b_phy_sleep_clk = {
2428 .cbcr_reg = USB2B_PHY_SLEEP_CBCR,
2429 .has_sibling = 1,
2430 .base = &virt_bases[GCC_BASE],
2431 .c = {
2432 .dbg_name = "gcc_usb2b_phy_sleep_clk",
2433 .ops = &clk_ops_branch,
2434 CLK_INIT(gcc_usb2b_phy_sleep_clk.c),
2435 },
2436};
2437
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002438static struct branch_clk gcc_usb_hs_ahb_clk = {
2439 .cbcr_reg = USB_HS_AHB_CBCR,
2440 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002441 .base = &virt_bases[GCC_BASE],
2442 .c = {
2443 .dbg_name = "gcc_usb_hs_ahb_clk",
2444 .ops = &clk_ops_branch,
2445 CLK_INIT(gcc_usb_hs_ahb_clk.c),
2446 },
2447};
2448
2449static struct branch_clk gcc_usb_hs_system_clk = {
2450 .cbcr_reg = USB_HS_SYSTEM_CBCR,
Vikram Mulukutla777c3ce2012-07-03 20:02:55 -07002451 .bcr_reg = USB_HS_BCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002452 .base = &virt_bases[GCC_BASE],
2453 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002454 .parent = &usb_hs_system_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002455 .dbg_name = "gcc_usb_hs_system_clk",
2456 .ops = &clk_ops_branch,
2457 CLK_INIT(gcc_usb_hs_system_clk.c),
2458 },
2459};
2460
2461static struct branch_clk gcc_usb_hsic_ahb_clk = {
2462 .cbcr_reg = USB_HSIC_AHB_CBCR,
2463 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002464 .base = &virt_bases[GCC_BASE],
2465 .c = {
2466 .dbg_name = "gcc_usb_hsic_ahb_clk",
2467 .ops = &clk_ops_branch,
2468 CLK_INIT(gcc_usb_hsic_ahb_clk.c),
2469 },
2470};
2471
2472static struct branch_clk gcc_usb_hsic_clk = {
2473 .cbcr_reg = USB_HSIC_CBCR,
Vikram Mulukutla777c3ce2012-07-03 20:02:55 -07002474 .bcr_reg = USB_HS_HSIC_BCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002475 .base = &virt_bases[GCC_BASE],
2476 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002477 .parent = &usb_hsic_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002478 .dbg_name = "gcc_usb_hsic_clk",
2479 .ops = &clk_ops_branch,
2480 CLK_INIT(gcc_usb_hsic_clk.c),
2481 },
2482};
2483
2484static struct branch_clk gcc_usb_hsic_io_cal_clk = {
2485 .cbcr_reg = USB_HSIC_IO_CAL_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002486 .base = &virt_bases[GCC_BASE],
2487 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002488 .parent = &usb_hsic_io_cal_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002489 .dbg_name = "gcc_usb_hsic_io_cal_clk",
2490 .ops = &clk_ops_branch,
2491 CLK_INIT(gcc_usb_hsic_io_cal_clk.c),
2492 },
2493};
2494
2495static struct branch_clk gcc_usb_hsic_system_clk = {
2496 .cbcr_reg = USB_HSIC_SYSTEM_CBCR,
Vikram Mulukutla66fe3382012-12-10 20:23:34 -08002497 .bcr_reg = USB_HS_HSIC_BCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002498 .base = &virt_bases[GCC_BASE],
2499 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07002500 .parent = &usb_hsic_system_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002501 .dbg_name = "gcc_usb_hsic_system_clk",
2502 .ops = &clk_ops_branch,
2503 CLK_INIT(gcc_usb_hsic_system_clk.c),
2504 },
2505};
2506
Vikram Mulukutla274b2d92012-07-13 15:53:04 -07002507struct branch_clk gcc_mmss_noc_cfg_ahb_clk = {
2508 .cbcr_reg = MMSS_NOC_CFG_AHB_CBCR,
2509 .has_sibling = 1,
2510 .base = &virt_bases[GCC_BASE],
2511 .c = {
2512 .dbg_name = "gcc_mmss_noc_cfg_ahb_clk",
2513 .ops = &clk_ops_branch,
2514 CLK_INIT(gcc_mmss_noc_cfg_ahb_clk.c),
2515 },
2516};
2517
2518struct branch_clk gcc_ocmem_noc_cfg_ahb_clk = {
2519 .cbcr_reg = OCMEM_NOC_CFG_AHB_CBCR,
2520 .has_sibling = 1,
2521 .base = &virt_bases[GCC_BASE],
2522 .c = {
2523 .dbg_name = "gcc_ocmem_noc_cfg_ahb_clk",
2524 .ops = &clk_ops_branch,
2525 CLK_INIT(gcc_ocmem_noc_cfg_ahb_clk.c),
2526 },
2527};
2528
Vikram Mulukutlaa967db42012-05-10 16:20:40 -07002529static struct branch_clk gcc_mss_cfg_ahb_clk = {
2530 .cbcr_reg = MSS_CFG_AHB_CBCR,
2531 .has_sibling = 1,
2532 .base = &virt_bases[GCC_BASE],
2533 .c = {
2534 .dbg_name = "gcc_mss_cfg_ahb_clk",
2535 .ops = &clk_ops_branch,
2536 CLK_INIT(gcc_mss_cfg_ahb_clk.c),
2537 },
2538};
2539
Vikram Mulukutla31926eb2012-08-12 19:58:08 -07002540static struct branch_clk gcc_mss_q6_bimc_axi_clk = {
2541 .cbcr_reg = MSS_Q6_BIMC_AXI_CBCR,
2542 .has_sibling = 1,
2543 .base = &virt_bases[GCC_BASE],
2544 .c = {
2545 .dbg_name = "gcc_mss_q6_bimc_axi_clk",
2546 .ops = &clk_ops_branch,
2547 CLK_INIT(gcc_mss_q6_bimc_axi_clk.c),
2548 },
2549};
2550
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002551static struct clk_freq_tbl ftbl_mmss_axi_clk[] = {
Vikram Mulukutlad16a8f12012-07-20 13:33:45 -07002552 F_MM( 19200000, cxo, 1, 0, 0),
Vikram Mulukutla694fafd2012-09-20 19:24:22 -07002553 F_MM( 37500000, gpll0, 16, 0, 0),
2554 F_MM( 50000000, gpll0, 12, 0, 0),
2555 F_MM( 75000000, gpll0, 8, 0, 0),
2556 F_MM(100000000, gpll0, 6, 0, 0),
Vikram Mulukutlad16a8f12012-07-20 13:33:45 -07002557 F_MM(150000000, gpll0, 4, 0, 0),
2558 F_MM(282000000, mmpll1, 3, 0, 0),
Vikram Mulukutlad16a8f12012-07-20 13:33:45 -07002559 F_MM(400000000, mmpll0, 2, 0, 0),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002560 F_END
2561};
2562
Vikram Mulukutla293c4692013-01-03 15:09:47 -08002563static struct clk_freq_tbl ftbl_mmss_axi_v2_clk[] = {
2564 F_MM( 19200000, cxo, 1, 0, 0),
2565 F_MM( 37500000, gpll0, 16, 0, 0),
2566 F_MM( 50000000, gpll0, 12, 0, 0),
2567 F_MM( 75000000, gpll0, 8, 0, 0),
2568 F_MM(100000000, gpll0, 6, 0, 0),
2569 F_MM(150000000, gpll0, 4, 0, 0),
2570 F_MM(333430000, mmpll1, 3.5, 0, 0),
2571 F_MM(400000000, mmpll0, 2, 0, 0),
2572 F_MM(466800000, mmpll1, 2.5, 0, 0),
2573 F_END
2574};
2575
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002576static struct rcg_clk axi_clk_src = {
2577 .cmd_rcgr_reg = 0x5040,
2578 .set_rate = set_rate_hid,
2579 .freq_tbl = ftbl_mmss_axi_clk,
2580 .current_freq = &rcg_dummy_freq,
2581 .base = &virt_bases[MMSS_BASE],
2582 .c = {
2583 .dbg_name = "axi_clk_src",
2584 .ops = &clk_ops_rcg,
Vikram Mulukutlad16a8f12012-07-20 13:33:45 -07002585 VDD_DIG_FMAX_MAP3(LOW, 150000000, NOMINAL, 282000000,
Vikram Mulukutla9f588e82012-08-31 20:46:30 -07002586 HIGH, 400000000),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002587 CLK_INIT(axi_clk_src.c),
2588 },
2589};
2590
Vikram Mulukutlad08a1522012-05-24 15:24:01 -07002591static struct clk_freq_tbl ftbl_ocmemnoc_clk[] = {
2592 F_MM( 19200000, cxo, 1, 0, 0),
Vikram Mulukutla694fafd2012-09-20 19:24:22 -07002593 F_MM( 37500000, gpll0, 16, 0, 0),
2594 F_MM( 50000000, gpll0, 12, 0, 0),
2595 F_MM( 75000000, gpll0, 8, 0, 0),
2596 F_MM(100000000, gpll0, 6, 0, 0),
Vikram Mulukutlad08a1522012-05-24 15:24:01 -07002597 F_MM(150000000, gpll0, 4, 0, 0),
Vikram Mulukutlad16a8f12012-07-20 13:33:45 -07002598 F_MM(282000000, mmpll1, 3, 0, 0),
Vikram Mulukutlad08a1522012-05-24 15:24:01 -07002599 F_MM(400000000, mmpll0, 2, 0, 0),
2600 F_END
2601};
2602
Vikram Mulukutla293c4692013-01-03 15:09:47 -08002603static struct clk_freq_tbl ftbl_ocmemnoc_v2_clk[] = {
2604 F_MM( 19200000, cxo, 1, 0, 0),
2605 F_MM( 37500000, gpll0, 16, 0, 0),
2606 F_MM( 50000000, gpll0, 12, 0, 0),
2607 F_MM( 75000000, gpll0, 8, 0, 0),
2608 F_MM(100000000, gpll0, 6, 0, 0),
2609 F_MM(150000000, gpll0, 4, 0, 0),
2610 F_MM(333430000, mmpll1, 3.5, 0, 0),
2611 F_MM(400000000, mmpll0, 2, 0, 0),
2612 F_END
2613};
2614
Vikram Mulukutlad08a1522012-05-24 15:24:01 -07002615struct rcg_clk ocmemnoc_clk_src = {
2616 .cmd_rcgr_reg = OCMEMNOC_CMD_RCGR,
2617 .set_rate = set_rate_hid,
2618 .freq_tbl = ftbl_ocmemnoc_clk,
2619 .current_freq = &rcg_dummy_freq,
2620 .base = &virt_bases[MMSS_BASE],
2621 .c = {
2622 .dbg_name = "ocmemnoc_clk_src",
2623 .ops = &clk_ops_rcg,
Vikram Mulukutlad16a8f12012-07-20 13:33:45 -07002624 VDD_DIG_FMAX_MAP3(LOW, 150000000, NOMINAL, 282000000,
Vikram Mulukutlad08a1522012-05-24 15:24:01 -07002625 HIGH, 400000000),
2626 CLK_INIT(ocmemnoc_clk_src.c),
2627 },
2628};
2629
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002630static struct clk_freq_tbl ftbl_camss_csi0_3_clk[] = {
2631 F_MM(100000000, gpll0, 6, 0, 0),
2632 F_MM(200000000, mmpll0, 4, 0, 0),
2633 F_END
2634};
2635
2636static struct rcg_clk csi0_clk_src = {
2637 .cmd_rcgr_reg = CSI0_CMD_RCGR,
2638 .set_rate = set_rate_hid,
2639 .freq_tbl = ftbl_camss_csi0_3_clk,
2640 .current_freq = &rcg_dummy_freq,
2641 .base = &virt_bases[MMSS_BASE],
2642 .c = {
2643 .dbg_name = "csi0_clk_src",
2644 .ops = &clk_ops_rcg,
2645 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
2646 CLK_INIT(csi0_clk_src.c),
2647 },
2648};
2649
2650static struct rcg_clk csi1_clk_src = {
2651 .cmd_rcgr_reg = CSI1_CMD_RCGR,
2652 .set_rate = set_rate_hid,
2653 .freq_tbl = ftbl_camss_csi0_3_clk,
2654 .current_freq = &rcg_dummy_freq,
2655 .base = &virt_bases[MMSS_BASE],
2656 .c = {
2657 .dbg_name = "csi1_clk_src",
2658 .ops = &clk_ops_rcg,
2659 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
2660 CLK_INIT(csi1_clk_src.c),
2661 },
2662};
2663
2664static struct rcg_clk csi2_clk_src = {
2665 .cmd_rcgr_reg = CSI2_CMD_RCGR,
2666 .set_rate = set_rate_hid,
2667 .freq_tbl = ftbl_camss_csi0_3_clk,
2668 .current_freq = &rcg_dummy_freq,
2669 .base = &virt_bases[MMSS_BASE],
2670 .c = {
2671 .dbg_name = "csi2_clk_src",
2672 .ops = &clk_ops_rcg,
2673 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
2674 CLK_INIT(csi2_clk_src.c),
2675 },
2676};
2677
2678static struct rcg_clk csi3_clk_src = {
2679 .cmd_rcgr_reg = CSI3_CMD_RCGR,
2680 .set_rate = set_rate_hid,
2681 .freq_tbl = ftbl_camss_csi0_3_clk,
2682 .current_freq = &rcg_dummy_freq,
2683 .base = &virt_bases[MMSS_BASE],
2684 .c = {
2685 .dbg_name = "csi3_clk_src",
2686 .ops = &clk_ops_rcg,
2687 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
2688 CLK_INIT(csi3_clk_src.c),
2689 },
2690};
2691
2692static struct clk_freq_tbl ftbl_camss_vfe_vfe0_1_clk[] = {
2693 F_MM( 37500000, gpll0, 16, 0, 0),
2694 F_MM( 50000000, gpll0, 12, 0, 0),
2695 F_MM( 60000000, gpll0, 10, 0, 0),
2696 F_MM( 80000000, gpll0, 7.5, 0, 0),
2697 F_MM(100000000, gpll0, 6, 0, 0),
2698 F_MM(109090000, gpll0, 5.5, 0, 0),
2699 F_MM(150000000, gpll0, 4, 0, 0),
2700 F_MM(200000000, gpll0, 3, 0, 0),
2701 F_MM(228570000, mmpll0, 3.5, 0, 0),
2702 F_MM(266670000, mmpll0, 3, 0, 0),
2703 F_MM(320000000, mmpll0, 2.5, 0, 0),
2704 F_END
2705};
2706
2707static struct rcg_clk vfe0_clk_src = {
2708 .cmd_rcgr_reg = VFE0_CMD_RCGR,
2709 .set_rate = set_rate_hid,
2710 .freq_tbl = ftbl_camss_vfe_vfe0_1_clk,
2711 .current_freq = &rcg_dummy_freq,
2712 .base = &virt_bases[MMSS_BASE],
2713 .c = {
2714 .dbg_name = "vfe0_clk_src",
2715 .ops = &clk_ops_rcg,
2716 VDD_DIG_FMAX_MAP3(LOW, 133330000, NOMINAL, 266670000,
2717 HIGH, 320000000),
2718 CLK_INIT(vfe0_clk_src.c),
2719 },
2720};
2721
2722static struct rcg_clk vfe1_clk_src = {
2723 .cmd_rcgr_reg = VFE1_CMD_RCGR,
2724 .set_rate = set_rate_hid,
2725 .freq_tbl = ftbl_camss_vfe_vfe0_1_clk,
2726 .current_freq = &rcg_dummy_freq,
2727 .base = &virt_bases[MMSS_BASE],
2728 .c = {
2729 .dbg_name = "vfe1_clk_src",
2730 .ops = &clk_ops_rcg,
2731 VDD_DIG_FMAX_MAP3(LOW, 133330000, NOMINAL, 266670000,
2732 HIGH, 320000000),
2733 CLK_INIT(vfe1_clk_src.c),
2734 },
2735};
2736
2737static struct clk_freq_tbl ftbl_mdss_mdp_clk[] = {
2738 F_MM( 37500000, gpll0, 16, 0, 0),
2739 F_MM( 60000000, gpll0, 10, 0, 0),
2740 F_MM( 75000000, gpll0, 8, 0, 0),
2741 F_MM( 85710000, gpll0, 7, 0, 0),
2742 F_MM(100000000, gpll0, 6, 0, 0),
2743 F_MM(133330000, mmpll0, 6, 0, 0),
2744 F_MM(160000000, mmpll0, 5, 0, 0),
2745 F_MM(200000000, mmpll0, 4, 0, 0),
Vikram Mulukutla0c6143b2012-12-11 12:16:32 -08002746 F_MM(240000000, gpll0, 2.5, 0, 0),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002747 F_MM(266670000, mmpll0, 3, 0, 0),
2748 F_MM(320000000, mmpll0, 2.5, 0, 0),
2749 F_END
2750};
2751
2752static struct rcg_clk mdp_clk_src = {
2753 .cmd_rcgr_reg = MDP_CMD_RCGR,
2754 .set_rate = set_rate_hid,
2755 .freq_tbl = ftbl_mdss_mdp_clk,
2756 .current_freq = &rcg_dummy_freq,
2757 .base = &virt_bases[MMSS_BASE],
2758 .c = {
2759 .dbg_name = "mdp_clk_src",
2760 .ops = &clk_ops_rcg,
2761 VDD_DIG_FMAX_MAP3(LOW, 133330000, NOMINAL, 266670000,
2762 HIGH, 320000000),
2763 CLK_INIT(mdp_clk_src.c),
2764 },
2765};
2766
2767static struct clk_freq_tbl ftbl_camss_cci_cci_clk[] = {
2768 F_MM(19200000, cxo, 1, 0, 0),
2769 F_END
2770};
2771
2772static struct rcg_clk cci_clk_src = {
2773 .cmd_rcgr_reg = CCI_CMD_RCGR,
2774 .set_rate = set_rate_hid,
2775 .freq_tbl = ftbl_camss_cci_cci_clk,
2776 .current_freq = &rcg_dummy_freq,
2777 .base = &virt_bases[MMSS_BASE],
2778 .c = {
2779 .dbg_name = "cci_clk_src",
2780 .ops = &clk_ops_rcg,
2781 VDD_DIG_FMAX_MAP2(LOW, 20000000, NOMINAL, 40000000),
2782 CLK_INIT(cci_clk_src.c),
2783 },
2784};
2785
2786static struct clk_freq_tbl ftbl_camss_gp0_1_clk[] = {
2787 F_MM( 10000, cxo, 16, 1, 120),
2788 F_MM( 20000, cxo, 16, 1, 50),
2789 F_MM( 6000000, gpll0, 10, 1, 10),
2790 F_MM(12000000, gpll0, 10, 1, 5),
2791 F_MM(13000000, gpll0, 10, 13, 60),
2792 F_MM(24000000, gpll0, 5, 1, 5),
2793 F_END
2794};
2795
2796static struct rcg_clk mmss_gp0_clk_src = {
2797 .cmd_rcgr_reg = MMSS_GP0_CMD_RCGR,
2798 .set_rate = set_rate_mnd,
2799 .freq_tbl = ftbl_camss_gp0_1_clk,
2800 .current_freq = &rcg_dummy_freq,
2801 .base = &virt_bases[MMSS_BASE],
2802 .c = {
2803 .dbg_name = "mmss_gp0_clk_src",
2804 .ops = &clk_ops_rcg_mnd,
2805 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
2806 CLK_INIT(mmss_gp0_clk_src.c),
2807 },
2808};
2809
2810static struct rcg_clk mmss_gp1_clk_src = {
2811 .cmd_rcgr_reg = MMSS_GP1_CMD_RCGR,
2812 .set_rate = set_rate_mnd,
2813 .freq_tbl = ftbl_camss_gp0_1_clk,
2814 .current_freq = &rcg_dummy_freq,
2815 .base = &virt_bases[MMSS_BASE],
2816 .c = {
2817 .dbg_name = "mmss_gp1_clk_src",
2818 .ops = &clk_ops_rcg_mnd,
2819 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
2820 CLK_INIT(mmss_gp1_clk_src.c),
2821 },
2822};
2823
2824static struct clk_freq_tbl ftbl_camss_jpeg_jpeg0_2_clk[] = {
2825 F_MM( 75000000, gpll0, 8, 0, 0),
2826 F_MM(150000000, gpll0, 4, 0, 0),
2827 F_MM(200000000, gpll0, 3, 0, 0),
2828 F_MM(228570000, mmpll0, 3.5, 0, 0),
2829 F_MM(266670000, mmpll0, 3, 0, 0),
2830 F_MM(320000000, mmpll0, 2.5, 0, 0),
2831 F_END
2832};
2833
2834static struct rcg_clk jpeg0_clk_src = {
2835 .cmd_rcgr_reg = JPEG0_CMD_RCGR,
2836 .set_rate = set_rate_hid,
2837 .freq_tbl = ftbl_camss_jpeg_jpeg0_2_clk,
2838 .current_freq = &rcg_dummy_freq,
2839 .base = &virt_bases[MMSS_BASE],
2840 .c = {
2841 .dbg_name = "jpeg0_clk_src",
2842 .ops = &clk_ops_rcg,
2843 VDD_DIG_FMAX_MAP3(LOW, 133330000, NOMINAL, 266670000,
2844 HIGH, 320000000),
2845 CLK_INIT(jpeg0_clk_src.c),
2846 },
2847};
2848
2849static struct rcg_clk jpeg1_clk_src = {
2850 .cmd_rcgr_reg = JPEG1_CMD_RCGR,
2851 .set_rate = set_rate_hid,
2852 .freq_tbl = ftbl_camss_jpeg_jpeg0_2_clk,
2853 .current_freq = &rcg_dummy_freq,
2854 .base = &virt_bases[MMSS_BASE],
2855 .c = {
2856 .dbg_name = "jpeg1_clk_src",
2857 .ops = &clk_ops_rcg,
2858 VDD_DIG_FMAX_MAP3(LOW, 133330000, NOMINAL, 266670000,
2859 HIGH, 320000000),
2860 CLK_INIT(jpeg1_clk_src.c),
2861 },
2862};
2863
2864static struct rcg_clk jpeg2_clk_src = {
2865 .cmd_rcgr_reg = JPEG2_CMD_RCGR,
2866 .set_rate = set_rate_hid,
2867 .freq_tbl = ftbl_camss_jpeg_jpeg0_2_clk,
2868 .current_freq = &rcg_dummy_freq,
2869 .base = &virt_bases[MMSS_BASE],
2870 .c = {
2871 .dbg_name = "jpeg2_clk_src",
2872 .ops = &clk_ops_rcg,
2873 VDD_DIG_FMAX_MAP3(LOW, 133330000, NOMINAL, 266670000,
2874 HIGH, 320000000),
2875 CLK_INIT(jpeg2_clk_src.c),
2876 },
2877};
2878
2879static struct clk_freq_tbl ftbl_camss_mclk0_3_clk[] = {
Vikram Mulukutla7dc75022012-08-23 16:50:56 -07002880 F_MM(19200000, cxo, 1, 0, 0),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002881 F_MM(66670000, gpll0, 9, 0, 0),
2882 F_END
2883};
2884
2885static struct rcg_clk mclk0_clk_src = {
2886 .cmd_rcgr_reg = MCLK0_CMD_RCGR,
2887 .set_rate = set_rate_hid,
2888 .freq_tbl = ftbl_camss_mclk0_3_clk,
2889 .current_freq = &rcg_dummy_freq,
2890 .base = &virt_bases[MMSS_BASE],
2891 .c = {
2892 .dbg_name = "mclk0_clk_src",
2893 .ops = &clk_ops_rcg,
2894 VDD_DIG_FMAX_MAP1(LOW, 66670000),
2895 CLK_INIT(mclk0_clk_src.c),
2896 },
2897};
2898
2899static struct rcg_clk mclk1_clk_src = {
2900 .cmd_rcgr_reg = MCLK1_CMD_RCGR,
2901 .set_rate = set_rate_hid,
2902 .freq_tbl = ftbl_camss_mclk0_3_clk,
2903 .current_freq = &rcg_dummy_freq,
2904 .base = &virt_bases[MMSS_BASE],
2905 .c = {
2906 .dbg_name = "mclk1_clk_src",
2907 .ops = &clk_ops_rcg,
2908 VDD_DIG_FMAX_MAP1(LOW, 66670000),
2909 CLK_INIT(mclk1_clk_src.c),
2910 },
2911};
2912
2913static struct rcg_clk mclk2_clk_src = {
2914 .cmd_rcgr_reg = MCLK2_CMD_RCGR,
2915 .set_rate = set_rate_hid,
2916 .freq_tbl = ftbl_camss_mclk0_3_clk,
2917 .current_freq = &rcg_dummy_freq,
2918 .base = &virt_bases[MMSS_BASE],
2919 .c = {
2920 .dbg_name = "mclk2_clk_src",
2921 .ops = &clk_ops_rcg,
2922 VDD_DIG_FMAX_MAP1(LOW, 66670000),
2923 CLK_INIT(mclk2_clk_src.c),
2924 },
2925};
2926
2927static struct rcg_clk mclk3_clk_src = {
2928 .cmd_rcgr_reg = MCLK3_CMD_RCGR,
2929 .set_rate = set_rate_hid,
2930 .freq_tbl = ftbl_camss_mclk0_3_clk,
2931 .current_freq = &rcg_dummy_freq,
2932 .base = &virt_bases[MMSS_BASE],
2933 .c = {
2934 .dbg_name = "mclk3_clk_src",
2935 .ops = &clk_ops_rcg,
2936 VDD_DIG_FMAX_MAP1(LOW, 66670000),
2937 CLK_INIT(mclk3_clk_src.c),
2938 },
2939};
2940
2941static struct clk_freq_tbl ftbl_camss_phy0_2_csi0_2phytimer_clk[] = {
2942 F_MM(100000000, gpll0, 6, 0, 0),
2943 F_MM(200000000, mmpll0, 4, 0, 0),
2944 F_END
2945};
2946
2947static struct rcg_clk csi0phytimer_clk_src = {
2948 .cmd_rcgr_reg = CSI0PHYTIMER_CMD_RCGR,
2949 .set_rate = set_rate_hid,
2950 .freq_tbl = ftbl_camss_phy0_2_csi0_2phytimer_clk,
2951 .current_freq = &rcg_dummy_freq,
2952 .base = &virt_bases[MMSS_BASE],
2953 .c = {
2954 .dbg_name = "csi0phytimer_clk_src",
2955 .ops = &clk_ops_rcg,
2956 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
2957 CLK_INIT(csi0phytimer_clk_src.c),
2958 },
2959};
2960
2961static struct rcg_clk csi1phytimer_clk_src = {
2962 .cmd_rcgr_reg = CSI1PHYTIMER_CMD_RCGR,
2963 .set_rate = set_rate_hid,
2964 .freq_tbl = ftbl_camss_phy0_2_csi0_2phytimer_clk,
2965 .current_freq = &rcg_dummy_freq,
2966 .base = &virt_bases[MMSS_BASE],
2967 .c = {
2968 .dbg_name = "csi1phytimer_clk_src",
2969 .ops = &clk_ops_rcg,
2970 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
2971 CLK_INIT(csi1phytimer_clk_src.c),
2972 },
2973};
2974
2975static struct rcg_clk csi2phytimer_clk_src = {
2976 .cmd_rcgr_reg = CSI2PHYTIMER_CMD_RCGR,
2977 .set_rate = set_rate_hid,
2978 .freq_tbl = ftbl_camss_phy0_2_csi0_2phytimer_clk,
2979 .current_freq = &rcg_dummy_freq,
2980 .base = &virt_bases[MMSS_BASE],
2981 .c = {
2982 .dbg_name = "csi2phytimer_clk_src",
2983 .ops = &clk_ops_rcg,
2984 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
2985 CLK_INIT(csi2phytimer_clk_src.c),
2986 },
2987};
2988
2989static struct clk_freq_tbl ftbl_camss_vfe_cpp_clk[] = {
2990 F_MM(150000000, gpll0, 4, 0, 0),
2991 F_MM(266670000, mmpll0, 3, 0, 0),
2992 F_MM(320000000, mmpll0, 2.5, 0, 0),
2993 F_END
2994};
2995
2996static struct rcg_clk cpp_clk_src = {
2997 .cmd_rcgr_reg = CPP_CMD_RCGR,
2998 .set_rate = set_rate_hid,
2999 .freq_tbl = ftbl_camss_vfe_cpp_clk,
3000 .current_freq = &rcg_dummy_freq,
3001 .base = &virt_bases[MMSS_BASE],
3002 .c = {
3003 .dbg_name = "cpp_clk_src",
3004 .ops = &clk_ops_rcg,
3005 VDD_DIG_FMAX_MAP3(LOW, 133330000, NOMINAL, 266670000,
3006 HIGH, 320000000),
3007 CLK_INIT(cpp_clk_src.c),
3008 },
3009};
3010
Siddhartha Agrawal4b0d5a62013-02-25 23:23:41 -08003011static struct branch_clk mdss_ahb_clk;
Vikram Mulukutlafe0f5a52012-08-16 16:51:08 -07003012static struct clk dsipll0_byte_clk_src = {
Siddhartha Agrawal4b0d5a62013-02-25 23:23:41 -08003013 .depends = &mdss_ahb_clk.c,
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003014 .parent = &cxo_clk_src.c,
Vikram Mulukutlafe0f5a52012-08-16 16:51:08 -07003015 .dbg_name = "dsipll0_byte_clk_src",
3016 .ops = &clk_ops_dsi_byte_pll,
3017 CLK_INIT(dsipll0_byte_clk_src),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003018};
3019
Vikram Mulukutlafe0f5a52012-08-16 16:51:08 -07003020static struct clk dsipll0_pixel_clk_src = {
Siddhartha Agrawal4b0d5a62013-02-25 23:23:41 -08003021 .depends = &mdss_ahb_clk.c,
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003022 .parent = &cxo_clk_src.c,
Vikram Mulukutlafe0f5a52012-08-16 16:51:08 -07003023 .dbg_name = "dsipll0_pixel_clk_src",
3024 .ops = &clk_ops_dsi_pixel_pll,
3025 CLK_INIT(dsipll0_pixel_clk_src),
3026};
3027
3028static struct clk_freq_tbl byte_freq = {
3029 .src_clk = &dsipll0_byte_clk_src,
3030 .div_src_val = BVAL(10, 8, dsipll0_byte_mm_source_val),
3031};
3032static struct clk_freq_tbl pixel_freq = {
Vikram Mulukutla95714a52012-10-30 20:47:56 -07003033 .src_clk = &dsipll0_pixel_clk_src,
3034 .div_src_val = BVAL(10, 8, dsipll0_pixel_mm_source_val),
Vikram Mulukutlafe0f5a52012-08-16 16:51:08 -07003035};
3036static struct clk_ops clk_ops_byte;
3037static struct clk_ops clk_ops_pixel;
3038
3039#define CFG_RCGR_DIV_MASK BM(4, 0)
Siddhartha Agrawal4b0d5a62013-02-25 23:23:41 -08003040#define CFG_RCGR_REG(x) (*(x)->base + (x)->cmd_rcgr_reg + 0x4)
3041#define M_REG(x) (*(x)->base + (x)->cmd_rcgr_reg + 0x8)
3042#define N_REG(x) (*(x)->base + (x)->cmd_rcgr_reg + 0xC)
3043#define MND_MODE_MASK BM(13, 12)
3044#define MND_DUAL_EDGE_MODE_BVAL BVAL(13, 12, 0x2)
3045#define CFG_RCGR_SRC_SEL_MASK BM(10, 8)
3046
3047static struct clk *get_parent_byte(struct clk *clk)
3048{
3049 struct rcg_clk *rcg = to_rcg_clk(clk);
3050
3051 /* The byte clock has only one known parent. */
3052 if ((readl_relaxed(CFG_RCGR_REG(rcg)) & CFG_RCGR_SRC_SEL_MASK)
3053 == BVAL(10, 8, dsipll0_byte_mm_source_val))
3054 return &dsipll0_byte_clk_src;
3055
3056 return NULL;
3057}
3058
3059static enum handoff byte_rcg_handoff(struct clk *clk)
3060{
3061 struct rcg_clk *rcg = to_rcg_clk(clk);
3062 u32 div_val;
3063 unsigned long pre_div_rate, parent_rate = clk_get_rate(clk->parent);
3064
3065 /* If the pre-divider is used, find the rate after the division */
3066 div_val = readl_relaxed(CFG_RCGR_REG(rcg)) & CFG_RCGR_DIV_MASK;
3067 if (div_val > 1)
3068 pre_div_rate = parent_rate / ((div_val + 1) >> 1);
3069 else
3070 pre_div_rate = parent_rate;
3071
3072 clk->rate = pre_div_rate;
3073
3074 return HANDOFF_ENABLED_CLK;
3075}
Vikram Mulukutlafe0f5a52012-08-16 16:51:08 -07003076
3077static int set_rate_byte(struct clk *clk, unsigned long rate)
3078{
3079 struct rcg_clk *rcg = to_rcg_clk(clk);
Siddhartha Agrawal4b0d5a62013-02-25 23:23:41 -08003080 struct clk *pll = clk->parent;
Vikram Mulukutlafe0f5a52012-08-16 16:51:08 -07003081 unsigned long source_rate, div;
3082 int rc;
3083
3084 if (rate == 0)
3085 return -EINVAL;
3086
3087 rc = clk_set_rate(pll, rate);
3088 if (rc)
3089 return rc;
3090
3091 source_rate = clk_round_rate(pll, rate);
3092 if ((2 * source_rate) % rate)
3093 return -EINVAL;
3094
3095 div = ((2 * source_rate)/rate) - 1;
3096 if (div > CFG_RCGR_DIV_MASK)
3097 return -EINVAL;
3098
3099 byte_freq.div_src_val &= ~CFG_RCGR_DIV_MASK;
3100 byte_freq.div_src_val |= BVAL(4, 0, div);
Vikram Mulukutlaa42d7c22013-02-22 18:38:04 -08003101 set_rate_hid(rcg, &byte_freq);
Vikram Mulukutlafe0f5a52012-08-16 16:51:08 -07003102
3103 return 0;
3104}
3105
Siddhartha Agrawal4b0d5a62013-02-25 23:23:41 -08003106static struct clk *get_parent_pixel(struct clk *clk)
3107{
3108 struct rcg_clk *rcg = to_rcg_clk(clk);
3109
3110 /* The pixel clock has one known parent. */
3111 if ((readl_relaxed(CFG_RCGR_REG(rcg)) & CFG_RCGR_SRC_SEL_MASK)
3112 == BVAL(10, 8, dsipll0_pixel_mm_source_val))
3113 return &dsipll0_pixel_clk_src;
3114
3115 return NULL;
3116}
3117
3118static enum handoff pixel_rcg_handoff(struct clk *clk)
3119{
3120 struct rcg_clk *rcg = to_rcg_clk(clk);
3121 u32 div_val, mval, nval, cfg_regval;
3122 unsigned long pre_div_rate, parent_rate = clk_get_rate(clk->parent);
3123
3124 cfg_regval = readl_relaxed(CFG_RCGR_REG(rcg));
3125
3126 /* If the pre-divider is used, find the rate after the division */
3127 div_val = cfg_regval & CFG_RCGR_DIV_MASK;
3128 if (div_val > 1)
3129 pre_div_rate = parent_rate / ((div_val + 1) >> 1);
3130 else
3131 pre_div_rate = parent_rate;
3132
3133 clk->rate = pre_div_rate;
3134
3135 /* If MND is used, find the rate after the MND division */
3136 if ((cfg_regval & MND_MODE_MASK) == MND_DUAL_EDGE_MODE_BVAL) {
3137 mval = readl_relaxed(M_REG(rcg));
3138 nval = readl_relaxed(N_REG(rcg));
3139 if (!nval)
3140 return HANDOFF_DISABLED_CLK;
3141 nval = (~nval) + mval;
3142 clk->rate = (pre_div_rate * mval) / nval;
3143 }
3144
3145 return HANDOFF_ENABLED_CLK;
3146}
3147
Vikram Mulukutlafe0f5a52012-08-16 16:51:08 -07003148static int set_rate_pixel(struct clk *clk, unsigned long rate)
3149{
3150 struct rcg_clk *rcg = to_rcg_clk(clk);
Siddhartha Agrawal4b0d5a62013-02-25 23:23:41 -08003151 struct clk *pll = clk->parent;
Vikram Mulukutlafe0f5a52012-08-16 16:51:08 -07003152 unsigned long source_rate, div;
3153 int rc;
3154
3155 if (rate == 0)
3156 return -EINVAL;
3157
3158 rc = clk_set_rate(pll, rate);
3159 if (rc)
3160 return rc;
3161
3162 source_rate = clk_round_rate(pll, rate);
3163 if ((2 * source_rate) % rate)
3164 return -EINVAL;
3165
3166 div = ((2 * source_rate)/rate) - 1;
3167 if (div > CFG_RCGR_DIV_MASK)
3168 return -EINVAL;
3169
3170 pixel_freq.div_src_val &= ~CFG_RCGR_DIV_MASK;
3171 pixel_freq.div_src_val |= BVAL(4, 0, div);
Vikram Mulukutlaa42d7c22013-02-22 18:38:04 -08003172 set_rate_mnd(rcg, &pixel_freq);
Vikram Mulukutlafe0f5a52012-08-16 16:51:08 -07003173
3174 return 0;
3175}
3176
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003177static struct rcg_clk byte0_clk_src = {
3178 .cmd_rcgr_reg = BYTE0_CMD_RCGR,
Vikram Mulukutlafe0f5a52012-08-16 16:51:08 -07003179 .current_freq = &byte_freq,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003180 .base = &virt_bases[MMSS_BASE],
3181 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003182 .parent = &dsipll0_byte_clk_src,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003183 .dbg_name = "byte0_clk_src",
Vikram Mulukutlafe0f5a52012-08-16 16:51:08 -07003184 .ops = &clk_ops_byte,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003185 VDD_DIG_FMAX_MAP3(LOW, 93800000, NOMINAL, 187500000,
3186 HIGH, 188000000),
3187 CLK_INIT(byte0_clk_src.c),
3188 },
3189};
3190
3191static struct rcg_clk byte1_clk_src = {
3192 .cmd_rcgr_reg = BYTE1_CMD_RCGR,
Vikram Mulukutlafe0f5a52012-08-16 16:51:08 -07003193 .current_freq = &byte_freq,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003194 .base = &virt_bases[MMSS_BASE],
3195 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003196 .parent = &dsipll0_byte_clk_src,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003197 .dbg_name = "byte1_clk_src",
Vikram Mulukutlafe0f5a52012-08-16 16:51:08 -07003198 .ops = &clk_ops_byte,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003199 VDD_DIG_FMAX_MAP3(LOW, 93800000, NOMINAL, 187500000,
3200 HIGH, 188000000),
3201 CLK_INIT(byte1_clk_src.c),
3202 },
3203};
3204
3205static struct clk_freq_tbl ftbl_mdss_edpaux_clk[] = {
3206 F_MM(19200000, cxo, 1, 0, 0),
3207 F_END
3208};
3209
3210static struct rcg_clk edpaux_clk_src = {
3211 .cmd_rcgr_reg = EDPAUX_CMD_RCGR,
3212 .set_rate = set_rate_hid,
3213 .freq_tbl = ftbl_mdss_edpaux_clk,
3214 .current_freq = &rcg_dummy_freq,
3215 .base = &virt_bases[MMSS_BASE],
3216 .c = {
3217 .dbg_name = "edpaux_clk_src",
3218 .ops = &clk_ops_rcg,
3219 VDD_DIG_FMAX_MAP2(LOW, 20000000, NOMINAL, 40000000),
3220 CLK_INIT(edpaux_clk_src.c),
3221 },
3222};
3223
3224static struct clk_freq_tbl ftbl_mdss_edplink_clk[] = {
Asaf Penso6b5251b2012-10-11 12:27:03 -07003225 F_MDSS(162000000, edppll_270, 2, 0, 0),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003226 F_MDSS(270000000, edppll_270, 11, 0, 0),
3227 F_END
3228};
3229
3230static struct rcg_clk edplink_clk_src = {
3231 .cmd_rcgr_reg = EDPLINK_CMD_RCGR,
3232 .set_rate = set_rate_hid,
3233 .freq_tbl = ftbl_mdss_edplink_clk,
3234 .current_freq = &rcg_dummy_freq,
3235 .base = &virt_bases[MMSS_BASE],
3236 .c = {
3237 .dbg_name = "edplink_clk_src",
3238 .ops = &clk_ops_rcg,
3239 VDD_DIG_FMAX_MAP2(LOW, 135000000, NOMINAL, 270000000),
3240 CLK_INIT(edplink_clk_src.c),
3241 },
3242};
3243
3244static struct clk_freq_tbl ftbl_mdss_edppixel_clk[] = {
Asaf Penso56084db2012-11-15 20:14:54 +02003245 F_MDSS(138500000, edppll_350, 2, 0, 0),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003246 F_MDSS(350000000, edppll_350, 11, 0, 0),
3247 F_END
3248};
3249
3250static struct rcg_clk edppixel_clk_src = {
3251 .cmd_rcgr_reg = EDPPIXEL_CMD_RCGR,
3252 .set_rate = set_rate_mnd,
3253 .freq_tbl = ftbl_mdss_edppixel_clk,
3254 .current_freq = &rcg_dummy_freq,
3255 .base = &virt_bases[MMSS_BASE],
3256 .c = {
3257 .dbg_name = "edppixel_clk_src",
3258 .ops = &clk_ops_rcg_mnd,
3259 VDD_DIG_FMAX_MAP2(LOW, 175000000, NOMINAL, 350000000),
3260 CLK_INIT(edppixel_clk_src.c),
3261 },
3262};
3263
3264static struct clk_freq_tbl ftbl_mdss_esc0_1_clk[] = {
3265 F_MM(19200000, cxo, 1, 0, 0),
3266 F_END
3267};
3268
3269static struct rcg_clk esc0_clk_src = {
3270 .cmd_rcgr_reg = ESC0_CMD_RCGR,
3271 .set_rate = set_rate_hid,
3272 .freq_tbl = ftbl_mdss_esc0_1_clk,
3273 .current_freq = &rcg_dummy_freq,
3274 .base = &virt_bases[MMSS_BASE],
3275 .c = {
3276 .dbg_name = "esc0_clk_src",
3277 .ops = &clk_ops_rcg,
3278 VDD_DIG_FMAX_MAP2(LOW, 20000000, NOMINAL, 40000000),
3279 CLK_INIT(esc0_clk_src.c),
3280 },
3281};
3282
3283static struct rcg_clk esc1_clk_src = {
3284 .cmd_rcgr_reg = ESC1_CMD_RCGR,
3285 .set_rate = set_rate_hid,
3286 .freq_tbl = ftbl_mdss_esc0_1_clk,
3287 .current_freq = &rcg_dummy_freq,
3288 .base = &virt_bases[MMSS_BASE],
3289 .c = {
3290 .dbg_name = "esc1_clk_src",
3291 .ops = &clk_ops_rcg,
3292 VDD_DIG_FMAX_MAP2(LOW, 20000000, NOMINAL, 40000000),
3293 CLK_INIT(esc1_clk_src.c),
3294 },
3295};
3296
Vikram Mulukutla86b76342012-08-15 16:22:09 -07003297static int hdmi_pll_clk_enable(struct clk *c)
3298{
Vikram Mulukutla5acd7932012-11-29 14:20:34 -08003299 return hdmi_pll_enable();
Vikram Mulukutla86b76342012-08-15 16:22:09 -07003300}
3301
3302static void hdmi_pll_clk_disable(struct clk *c)
3303{
Vikram Mulukutla86b76342012-08-15 16:22:09 -07003304 hdmi_pll_disable();
Vikram Mulukutla86b76342012-08-15 16:22:09 -07003305}
3306
3307static int hdmi_pll_clk_set_rate(struct clk *c, unsigned long rate)
3308{
Vikram Mulukutla5acd7932012-11-29 14:20:34 -08003309 return hdmi_pll_set_rate(rate);
Vikram Mulukutla86b76342012-08-15 16:22:09 -07003310}
3311
Vikram Mulukutla86b76342012-08-15 16:22:09 -07003312static struct clk_ops clk_ops_hdmi_pll = {
3313 .enable = hdmi_pll_clk_enable,
3314 .disable = hdmi_pll_clk_disable,
3315 .set_rate = hdmi_pll_clk_set_rate,
Vikram Mulukutla86b76342012-08-15 16:22:09 -07003316};
3317
3318static struct clk hdmipll_clk_src = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003319 .parent = &cxo_clk_src.c,
Vikram Mulukutla86b76342012-08-15 16:22:09 -07003320 .dbg_name = "hdmipll_clk_src",
3321 .ops = &clk_ops_hdmi_pll,
3322 CLK_INIT(hdmipll_clk_src),
Vikram Mulukutla86b76342012-08-15 16:22:09 -07003323};
3324
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003325static struct clk_freq_tbl ftbl_mdss_extpclk_clk[] = {
Vikram Mulukutla86b76342012-08-15 16:22:09 -07003326 /*
3327 * The zero rate is required since suspend/resume wipes out the HDMI PHY
3328 * registers. This entry allows the HDMI driver to switch the cached
3329 * rate to zero before suspend and back to the real rate after resume.
3330 */
3331 F_HDMI( 0, hdmipll, 1, 0, 0),
3332 F_HDMI( 25200000, hdmipll, 1, 0, 0),
Ujwal Patele698fae2012-11-29 14:04:33 -08003333 F_HDMI( 27000000, hdmipll, 1, 0, 0),
Vikram Mulukutla86b76342012-08-15 16:22:09 -07003334 F_HDMI( 27030000, hdmipll, 1, 0, 0),
3335 F_HDMI( 74250000, hdmipll, 1, 0, 0),
3336 F_HDMI(148500000, hdmipll, 1, 0, 0),
Ujwal Patele698fae2012-11-29 14:04:33 -08003337 F_HDMI(268500000, hdmipll, 1, 0, 0),
Vikram Mulukutla86b76342012-08-15 16:22:09 -07003338 F_HDMI(297000000, hdmipll, 1, 0, 0),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003339 F_END
3340};
3341
Vikram Mulukutla86b76342012-08-15 16:22:09 -07003342/*
3343 * Unlike other clocks, the HDMI rate is adjusted through PLL
3344 * re-programming. It is also routed through an HID divider.
3345 */
Vikram Mulukutla5acd7932012-11-29 14:20:34 -08003346static int rcg_clk_set_rate_hdmi(struct clk *c, unsigned long rate)
Vikram Mulukutla86b76342012-08-15 16:22:09 -07003347{
Vikram Mulukutla5acd7932012-11-29 14:20:34 -08003348 struct clk_freq_tbl *nf;
3349 struct rcg_clk *rcg = to_rcg_clk(c);
3350 int rc;
3351
3352 for (nf = rcg->freq_tbl; nf->freq_hz != rate; nf++)
3353 if (nf->freq_hz == FREQ_END) {
3354 rc = -EINVAL;
3355 goto out;
3356 }
3357
3358 rc = clk_set_rate(nf->src_clk, rate);
3359 if (rc < 0)
3360 goto out;
Vikram Mulukutla86b76342012-08-15 16:22:09 -07003361 set_rate_hid(rcg, nf);
Vikram Mulukutla5acd7932012-11-29 14:20:34 -08003362
3363 rcg->current_freq = nf;
3364 c->parent = nf->src_clk;
3365out:
3366 return rc;
Vikram Mulukutla86b76342012-08-15 16:22:09 -07003367}
3368
Vikram Mulukutla5acd7932012-11-29 14:20:34 -08003369static struct clk_ops clk_ops_rcg_hdmi;
3370
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003371static struct rcg_clk extpclk_clk_src = {
3372 .cmd_rcgr_reg = EXTPCLK_CMD_RCGR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003373 .freq_tbl = ftbl_mdss_extpclk_clk,
3374 .current_freq = &rcg_dummy_freq,
3375 .base = &virt_bases[MMSS_BASE],
3376 .c = {
3377 .dbg_name = "extpclk_clk_src",
Vikram Mulukutla5acd7932012-11-29 14:20:34 -08003378 .ops = &clk_ops_rcg_hdmi,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003379 VDD_DIG_FMAX_MAP2(LOW, 148500000, NOMINAL, 297000000),
3380 CLK_INIT(extpclk_clk_src.c),
3381 },
3382};
3383
3384static struct clk_freq_tbl ftbl_mdss_hdmi_clk[] = {
3385 F_MDSS(19200000, cxo, 1, 0, 0),
3386 F_END
3387};
3388
3389static struct rcg_clk hdmi_clk_src = {
3390 .cmd_rcgr_reg = HDMI_CMD_RCGR,
3391 .set_rate = set_rate_hid,
3392 .freq_tbl = ftbl_mdss_hdmi_clk,
3393 .current_freq = &rcg_dummy_freq,
3394 .base = &virt_bases[MMSS_BASE],
3395 .c = {
3396 .dbg_name = "hdmi_clk_src",
3397 .ops = &clk_ops_rcg,
3398 VDD_DIG_FMAX_MAP2(LOW, 20000000, NOMINAL, 40000000),
3399 CLK_INIT(hdmi_clk_src.c),
3400 },
3401};
3402
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003403
3404static struct rcg_clk pclk0_clk_src = {
3405 .cmd_rcgr_reg = PCLK0_CMD_RCGR,
Vikram Mulukutlafe0f5a52012-08-16 16:51:08 -07003406 .current_freq = &pixel_freq,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003407 .base = &virt_bases[MMSS_BASE],
3408 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003409 .parent = &dsipll0_pixel_clk_src,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003410 .dbg_name = "pclk0_clk_src",
Vikram Mulukutlafe0f5a52012-08-16 16:51:08 -07003411 .ops = &clk_ops_pixel,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003412 VDD_DIG_FMAX_MAP2(LOW, 125000000, NOMINAL, 250000000),
3413 CLK_INIT(pclk0_clk_src.c),
3414 },
3415};
3416
3417static struct rcg_clk pclk1_clk_src = {
3418 .cmd_rcgr_reg = PCLK1_CMD_RCGR,
Vikram Mulukutlafe0f5a52012-08-16 16:51:08 -07003419 .current_freq = &pixel_freq,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003420 .base = &virt_bases[MMSS_BASE],
3421 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003422 .parent = &dsipll0_pixel_clk_src,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003423 .dbg_name = "pclk1_clk_src",
Vikram Mulukutlafe0f5a52012-08-16 16:51:08 -07003424 .ops = &clk_ops_pixel,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003425 VDD_DIG_FMAX_MAP2(LOW, 125000000, NOMINAL, 250000000),
3426 CLK_INIT(pclk1_clk_src.c),
3427 },
3428};
3429
3430static struct clk_freq_tbl ftbl_mdss_vsync_clk[] = {
3431 F_MDSS(19200000, cxo, 1, 0, 0),
3432 F_END
3433};
3434
3435static struct rcg_clk vsync_clk_src = {
3436 .cmd_rcgr_reg = VSYNC_CMD_RCGR,
3437 .set_rate = set_rate_hid,
3438 .freq_tbl = ftbl_mdss_vsync_clk,
3439 .current_freq = &rcg_dummy_freq,
3440 .base = &virt_bases[MMSS_BASE],
3441 .c = {
3442 .dbg_name = "vsync_clk_src",
3443 .ops = &clk_ops_rcg,
3444 VDD_DIG_FMAX_MAP2(LOW, 20000000, NOMINAL, 40000000),
3445 CLK_INIT(vsync_clk_src.c),
3446 },
3447};
3448
3449static struct clk_freq_tbl ftbl_venus0_vcodec0_clk[] = {
3450 F_MM( 50000000, gpll0, 12, 0, 0),
3451 F_MM(100000000, gpll0, 6, 0, 0),
3452 F_MM(133330000, mmpll0, 6, 0, 0),
3453 F_MM(200000000, mmpll0, 4, 0, 0),
3454 F_MM(266670000, mmpll0, 3, 0, 0),
3455 F_MM(410000000, mmpll3, 2, 0, 0),
3456 F_END
3457};
3458
Vikram Mulukutla293c4692013-01-03 15:09:47 -08003459static struct clk_freq_tbl ftbl_venus0_vcodec0_v2_clk[] = {
3460 F_MM( 50000000, gpll0, 12, 0, 0),
3461 F_MM(100000000, gpll0, 6, 0, 0),
3462 F_MM(133330000, mmpll0, 6, 0, 0),
3463 F_MM(200000000, mmpll0, 4, 0, 0),
3464 F_MM(266670000, mmpll0, 3, 0, 0),
3465 F_MM(465000000, mmpll3, 2, 0, 0),
3466 F_END
3467};
3468
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003469static struct rcg_clk vcodec0_clk_src = {
3470 .cmd_rcgr_reg = VCODEC0_CMD_RCGR,
3471 .set_rate = set_rate_mnd,
3472 .freq_tbl = ftbl_venus0_vcodec0_clk,
3473 .current_freq = &rcg_dummy_freq,
3474 .base = &virt_bases[MMSS_BASE],
3475 .c = {
3476 .dbg_name = "vcodec0_clk_src",
3477 .ops = &clk_ops_rcg_mnd,
3478 VDD_DIG_FMAX_MAP3(LOW, 133330000, NOMINAL, 266670000,
3479 HIGH, 410000000),
3480 CLK_INIT(vcodec0_clk_src.c),
3481 },
3482};
3483
3484static struct branch_clk camss_cci_cci_ahb_clk = {
3485 .cbcr_reg = CAMSS_CCI_CCI_AHB_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003486 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003487 .base = &virt_bases[MMSS_BASE],
3488 .c = {
3489 .dbg_name = "camss_cci_cci_ahb_clk",
3490 .ops = &clk_ops_branch,
3491 CLK_INIT(camss_cci_cci_ahb_clk.c),
3492 },
3493};
3494
3495static struct branch_clk camss_cci_cci_clk = {
3496 .cbcr_reg = CAMSS_CCI_CCI_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003497 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003498 .base = &virt_bases[MMSS_BASE],
3499 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003500 .parent = &cci_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003501 .dbg_name = "camss_cci_cci_clk",
3502 .ops = &clk_ops_branch,
3503 CLK_INIT(camss_cci_cci_clk.c),
3504 },
3505};
3506
3507static struct branch_clk camss_csi0_ahb_clk = {
3508 .cbcr_reg = CAMSS_CSI0_AHB_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003509 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003510 .base = &virt_bases[MMSS_BASE],
3511 .c = {
3512 .dbg_name = "camss_csi0_ahb_clk",
3513 .ops = &clk_ops_branch,
3514 CLK_INIT(camss_csi0_ahb_clk.c),
3515 },
3516};
3517
3518static struct branch_clk camss_csi0_clk = {
3519 .cbcr_reg = CAMSS_CSI0_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003520 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003521 .base = &virt_bases[MMSS_BASE],
3522 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003523 .parent = &csi0_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003524 .dbg_name = "camss_csi0_clk",
3525 .ops = &clk_ops_branch,
3526 CLK_INIT(camss_csi0_clk.c),
3527 },
3528};
3529
3530static struct branch_clk camss_csi0phy_clk = {
3531 .cbcr_reg = CAMSS_CSI0PHY_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003532 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003533 .base = &virt_bases[MMSS_BASE],
3534 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003535 .parent = &csi0_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003536 .dbg_name = "camss_csi0phy_clk",
3537 .ops = &clk_ops_branch,
3538 CLK_INIT(camss_csi0phy_clk.c),
3539 },
3540};
3541
3542static struct branch_clk camss_csi0pix_clk = {
3543 .cbcr_reg = CAMSS_CSI0PIX_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003544 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003545 .base = &virt_bases[MMSS_BASE],
3546 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003547 .parent = &csi0_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003548 .dbg_name = "camss_csi0pix_clk",
3549 .ops = &clk_ops_branch,
3550 CLK_INIT(camss_csi0pix_clk.c),
3551 },
3552};
3553
3554static struct branch_clk camss_csi0rdi_clk = {
3555 .cbcr_reg = CAMSS_CSI0RDI_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003556 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003557 .base = &virt_bases[MMSS_BASE],
3558 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003559 .parent = &csi0_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003560 .dbg_name = "camss_csi0rdi_clk",
3561 .ops = &clk_ops_branch,
3562 CLK_INIT(camss_csi0rdi_clk.c),
3563 },
3564};
3565
3566static struct branch_clk camss_csi1_ahb_clk = {
3567 .cbcr_reg = CAMSS_CSI1_AHB_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003568 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003569 .base = &virt_bases[MMSS_BASE],
3570 .c = {
3571 .dbg_name = "camss_csi1_ahb_clk",
3572 .ops = &clk_ops_branch,
3573 CLK_INIT(camss_csi1_ahb_clk.c),
3574 },
3575};
3576
3577static struct branch_clk camss_csi1_clk = {
3578 .cbcr_reg = CAMSS_CSI1_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003579 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003580 .base = &virt_bases[MMSS_BASE],
3581 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003582 .parent = &csi1_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003583 .dbg_name = "camss_csi1_clk",
3584 .ops = &clk_ops_branch,
3585 CLK_INIT(camss_csi1_clk.c),
3586 },
3587};
3588
3589static struct branch_clk camss_csi1phy_clk = {
3590 .cbcr_reg = CAMSS_CSI1PHY_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003591 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003592 .base = &virt_bases[MMSS_BASE],
3593 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003594 .parent = &csi1_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003595 .dbg_name = "camss_csi1phy_clk",
3596 .ops = &clk_ops_branch,
3597 CLK_INIT(camss_csi1phy_clk.c),
3598 },
3599};
3600
3601static struct branch_clk camss_csi1pix_clk = {
3602 .cbcr_reg = CAMSS_CSI1PIX_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003603 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003604 .base = &virt_bases[MMSS_BASE],
3605 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003606 .parent = &csi1_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003607 .dbg_name = "camss_csi1pix_clk",
3608 .ops = &clk_ops_branch,
3609 CLK_INIT(camss_csi1pix_clk.c),
3610 },
3611};
3612
3613static struct branch_clk camss_csi1rdi_clk = {
3614 .cbcr_reg = CAMSS_CSI1RDI_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003615 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003616 .base = &virt_bases[MMSS_BASE],
3617 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003618 .parent = &csi1_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003619 .dbg_name = "camss_csi1rdi_clk",
3620 .ops = &clk_ops_branch,
3621 CLK_INIT(camss_csi1rdi_clk.c),
3622 },
3623};
3624
3625static struct branch_clk camss_csi2_ahb_clk = {
3626 .cbcr_reg = CAMSS_CSI2_AHB_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003627 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003628 .base = &virt_bases[MMSS_BASE],
3629 .c = {
3630 .dbg_name = "camss_csi2_ahb_clk",
3631 .ops = &clk_ops_branch,
3632 CLK_INIT(camss_csi2_ahb_clk.c),
3633 },
3634};
3635
3636static struct branch_clk camss_csi2_clk = {
3637 .cbcr_reg = CAMSS_CSI2_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003638 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003639 .base = &virt_bases[MMSS_BASE],
3640 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003641 .parent = &csi2_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003642 .dbg_name = "camss_csi2_clk",
3643 .ops = &clk_ops_branch,
3644 CLK_INIT(camss_csi2_clk.c),
3645 },
3646};
3647
3648static struct branch_clk camss_csi2phy_clk = {
3649 .cbcr_reg = CAMSS_CSI2PHY_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003650 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003651 .base = &virt_bases[MMSS_BASE],
3652 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003653 .parent = &csi2_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003654 .dbg_name = "camss_csi2phy_clk",
3655 .ops = &clk_ops_branch,
3656 CLK_INIT(camss_csi2phy_clk.c),
3657 },
3658};
3659
3660static struct branch_clk camss_csi2pix_clk = {
3661 .cbcr_reg = CAMSS_CSI2PIX_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003662 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003663 .base = &virt_bases[MMSS_BASE],
3664 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003665 .parent = &csi2_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003666 .dbg_name = "camss_csi2pix_clk",
3667 .ops = &clk_ops_branch,
3668 CLK_INIT(camss_csi2pix_clk.c),
3669 },
3670};
3671
3672static struct branch_clk camss_csi2rdi_clk = {
3673 .cbcr_reg = CAMSS_CSI2RDI_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003674 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003675 .base = &virt_bases[MMSS_BASE],
3676 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003677 .parent = &csi2_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003678 .dbg_name = "camss_csi2rdi_clk",
3679 .ops = &clk_ops_branch,
3680 CLK_INIT(camss_csi2rdi_clk.c),
3681 },
3682};
3683
3684static struct branch_clk camss_csi3_ahb_clk = {
3685 .cbcr_reg = CAMSS_CSI3_AHB_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003686 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003687 .base = &virt_bases[MMSS_BASE],
3688 .c = {
3689 .dbg_name = "camss_csi3_ahb_clk",
3690 .ops = &clk_ops_branch,
3691 CLK_INIT(camss_csi3_ahb_clk.c),
3692 },
3693};
3694
3695static struct branch_clk camss_csi3_clk = {
3696 .cbcr_reg = CAMSS_CSI3_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003697 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003698 .base = &virt_bases[MMSS_BASE],
3699 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003700 .parent = &csi3_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003701 .dbg_name = "camss_csi3_clk",
3702 .ops = &clk_ops_branch,
3703 CLK_INIT(camss_csi3_clk.c),
3704 },
3705};
3706
3707static struct branch_clk camss_csi3phy_clk = {
3708 .cbcr_reg = CAMSS_CSI3PHY_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003709 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003710 .base = &virt_bases[MMSS_BASE],
3711 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003712 .parent = &csi3_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003713 .dbg_name = "camss_csi3phy_clk",
3714 .ops = &clk_ops_branch,
3715 CLK_INIT(camss_csi3phy_clk.c),
3716 },
3717};
3718
3719static struct branch_clk camss_csi3pix_clk = {
3720 .cbcr_reg = CAMSS_CSI3PIX_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003721 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003722 .base = &virt_bases[MMSS_BASE],
3723 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003724 .parent = &csi3_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003725 .dbg_name = "camss_csi3pix_clk",
3726 .ops = &clk_ops_branch,
3727 CLK_INIT(camss_csi3pix_clk.c),
3728 },
3729};
3730
3731static struct branch_clk camss_csi3rdi_clk = {
3732 .cbcr_reg = CAMSS_CSI3RDI_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003733 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003734 .base = &virt_bases[MMSS_BASE],
3735 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003736 .parent = &csi3_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003737 .dbg_name = "camss_csi3rdi_clk",
3738 .ops = &clk_ops_branch,
3739 CLK_INIT(camss_csi3rdi_clk.c),
3740 },
3741};
3742
3743static struct branch_clk camss_csi_vfe0_clk = {
3744 .cbcr_reg = CAMSS_CSI_VFE0_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003745 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003746 .base = &virt_bases[MMSS_BASE],
3747 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003748 .parent = &vfe0_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003749 .dbg_name = "camss_csi_vfe0_clk",
3750 .ops = &clk_ops_branch,
3751 CLK_INIT(camss_csi_vfe0_clk.c),
3752 },
3753};
3754
3755static struct branch_clk camss_csi_vfe1_clk = {
3756 .cbcr_reg = CAMSS_CSI_VFE1_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003757 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003758 .base = &virt_bases[MMSS_BASE],
3759 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003760 .parent = &vfe1_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003761 .dbg_name = "camss_csi_vfe1_clk",
3762 .ops = &clk_ops_branch,
3763 CLK_INIT(camss_csi_vfe1_clk.c),
3764 },
3765};
3766
3767static struct branch_clk camss_gp0_clk = {
3768 .cbcr_reg = CAMSS_GP0_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003769 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003770 .base = &virt_bases[MMSS_BASE],
3771 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003772 .parent = &mmss_gp0_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003773 .dbg_name = "camss_gp0_clk",
3774 .ops = &clk_ops_branch,
3775 CLK_INIT(camss_gp0_clk.c),
3776 },
3777};
3778
3779static struct branch_clk camss_gp1_clk = {
3780 .cbcr_reg = CAMSS_GP1_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003781 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003782 .base = &virt_bases[MMSS_BASE],
3783 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003784 .parent = &mmss_gp1_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003785 .dbg_name = "camss_gp1_clk",
3786 .ops = &clk_ops_branch,
3787 CLK_INIT(camss_gp1_clk.c),
3788 },
3789};
3790
3791static struct branch_clk camss_ispif_ahb_clk = {
3792 .cbcr_reg = CAMSS_ISPIF_AHB_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003793 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003794 .base = &virt_bases[MMSS_BASE],
3795 .c = {
3796 .dbg_name = "camss_ispif_ahb_clk",
3797 .ops = &clk_ops_branch,
3798 CLK_INIT(camss_ispif_ahb_clk.c),
3799 },
3800};
3801
3802static struct branch_clk camss_jpeg_jpeg0_clk = {
3803 .cbcr_reg = CAMSS_JPEG_JPEG0_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003804 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003805 .base = &virt_bases[MMSS_BASE],
3806 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003807 .parent = &jpeg0_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003808 .dbg_name = "camss_jpeg_jpeg0_clk",
3809 .ops = &clk_ops_branch,
3810 CLK_INIT(camss_jpeg_jpeg0_clk.c),
3811 },
3812};
3813
3814static struct branch_clk camss_jpeg_jpeg1_clk = {
3815 .cbcr_reg = CAMSS_JPEG_JPEG1_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003816 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003817 .base = &virt_bases[MMSS_BASE],
3818 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003819 .parent = &jpeg1_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003820 .dbg_name = "camss_jpeg_jpeg1_clk",
3821 .ops = &clk_ops_branch,
3822 CLK_INIT(camss_jpeg_jpeg1_clk.c),
3823 },
3824};
3825
3826static struct branch_clk camss_jpeg_jpeg2_clk = {
3827 .cbcr_reg = CAMSS_JPEG_JPEG2_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003828 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003829 .base = &virt_bases[MMSS_BASE],
3830 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003831 .parent = &jpeg2_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003832 .dbg_name = "camss_jpeg_jpeg2_clk",
3833 .ops = &clk_ops_branch,
3834 CLK_INIT(camss_jpeg_jpeg2_clk.c),
3835 },
3836};
3837
3838static struct branch_clk camss_jpeg_jpeg_ahb_clk = {
3839 .cbcr_reg = CAMSS_JPEG_JPEG_AHB_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003840 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003841 .base = &virt_bases[MMSS_BASE],
3842 .c = {
3843 .dbg_name = "camss_jpeg_jpeg_ahb_clk",
3844 .ops = &clk_ops_branch,
3845 CLK_INIT(camss_jpeg_jpeg_ahb_clk.c),
3846 },
3847};
3848
3849static struct branch_clk camss_jpeg_jpeg_axi_clk = {
3850 .cbcr_reg = CAMSS_JPEG_JPEG_AXI_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003851 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003852 .base = &virt_bases[MMSS_BASE],
3853 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003854 .parent = &axi_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003855 .dbg_name = "camss_jpeg_jpeg_axi_clk",
3856 .ops = &clk_ops_branch,
3857 CLK_INIT(camss_jpeg_jpeg_axi_clk.c),
3858 },
3859};
3860
3861static struct branch_clk camss_jpeg_jpeg_ocmemnoc_clk = {
3862 .cbcr_reg = CAMSS_JPEG_JPEG_OCMEMNOC_CBCR,
3863 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003864 .base = &virt_bases[MMSS_BASE],
3865 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003866 .parent = &ocmemnoc_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003867 .dbg_name = "camss_jpeg_jpeg_ocmemnoc_clk",
3868 .ops = &clk_ops_branch,
3869 CLK_INIT(camss_jpeg_jpeg_ocmemnoc_clk.c),
3870 },
3871};
3872
3873static struct branch_clk camss_mclk0_clk = {
3874 .cbcr_reg = CAMSS_MCLK0_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003875 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003876 .base = &virt_bases[MMSS_BASE],
3877 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003878 .parent = &mclk0_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003879 .dbg_name = "camss_mclk0_clk",
3880 .ops = &clk_ops_branch,
3881 CLK_INIT(camss_mclk0_clk.c),
3882 },
3883};
3884
3885static struct branch_clk camss_mclk1_clk = {
3886 .cbcr_reg = CAMSS_MCLK1_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003887 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003888 .base = &virt_bases[MMSS_BASE],
3889 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003890 .parent = &mclk1_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003891 .dbg_name = "camss_mclk1_clk",
3892 .ops = &clk_ops_branch,
3893 CLK_INIT(camss_mclk1_clk.c),
3894 },
3895};
3896
3897static struct branch_clk camss_mclk2_clk = {
3898 .cbcr_reg = CAMSS_MCLK2_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003899 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003900 .base = &virt_bases[MMSS_BASE],
3901 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003902 .parent = &mclk2_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003903 .dbg_name = "camss_mclk2_clk",
3904 .ops = &clk_ops_branch,
3905 CLK_INIT(camss_mclk2_clk.c),
3906 },
3907};
3908
3909static struct branch_clk camss_mclk3_clk = {
3910 .cbcr_reg = CAMSS_MCLK3_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003911 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003912 .base = &virt_bases[MMSS_BASE],
3913 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003914 .parent = &mclk3_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003915 .dbg_name = "camss_mclk3_clk",
3916 .ops = &clk_ops_branch,
3917 CLK_INIT(camss_mclk3_clk.c),
3918 },
3919};
3920
3921static struct branch_clk camss_micro_ahb_clk = {
3922 .cbcr_reg = CAMSS_MICRO_AHB_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003923 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003924 .base = &virt_bases[MMSS_BASE],
3925 .c = {
3926 .dbg_name = "camss_micro_ahb_clk",
3927 .ops = &clk_ops_branch,
3928 CLK_INIT(camss_micro_ahb_clk.c),
3929 },
3930};
3931
3932static struct branch_clk camss_phy0_csi0phytimer_clk = {
3933 .cbcr_reg = CAMSS_PHY0_CSI0PHYTIMER_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003934 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003935 .base = &virt_bases[MMSS_BASE],
3936 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003937 .parent = &csi0phytimer_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003938 .dbg_name = "camss_phy0_csi0phytimer_clk",
3939 .ops = &clk_ops_branch,
3940 CLK_INIT(camss_phy0_csi0phytimer_clk.c),
3941 },
3942};
3943
3944static struct branch_clk camss_phy1_csi1phytimer_clk = {
3945 .cbcr_reg = CAMSS_PHY1_CSI1PHYTIMER_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003946 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003947 .base = &virt_bases[MMSS_BASE],
3948 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003949 .parent = &csi1phytimer_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003950 .dbg_name = "camss_phy1_csi1phytimer_clk",
3951 .ops = &clk_ops_branch,
3952 CLK_INIT(camss_phy1_csi1phytimer_clk.c),
3953 },
3954};
3955
3956static struct branch_clk camss_phy2_csi2phytimer_clk = {
3957 .cbcr_reg = CAMSS_PHY2_CSI2PHYTIMER_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003958 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003959 .base = &virt_bases[MMSS_BASE],
3960 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003961 .parent = &csi2phytimer_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003962 .dbg_name = "camss_phy2_csi2phytimer_clk",
3963 .ops = &clk_ops_branch,
3964 CLK_INIT(camss_phy2_csi2phytimer_clk.c),
3965 },
3966};
3967
3968static struct branch_clk camss_top_ahb_clk = {
3969 .cbcr_reg = CAMSS_TOP_AHB_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003970 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003971 .base = &virt_bases[MMSS_BASE],
3972 .c = {
3973 .dbg_name = "camss_top_ahb_clk",
3974 .ops = &clk_ops_branch,
3975 CLK_INIT(camss_top_ahb_clk.c),
3976 },
3977};
3978
3979static struct branch_clk camss_vfe_cpp_ahb_clk = {
3980 .cbcr_reg = CAMSS_VFE_CPP_AHB_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003981 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003982 .base = &virt_bases[MMSS_BASE],
3983 .c = {
3984 .dbg_name = "camss_vfe_cpp_ahb_clk",
3985 .ops = &clk_ops_branch,
3986 CLK_INIT(camss_vfe_cpp_ahb_clk.c),
3987 },
3988};
3989
3990static struct branch_clk camss_vfe_cpp_clk = {
3991 .cbcr_reg = CAMSS_VFE_CPP_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003992 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003993 .base = &virt_bases[MMSS_BASE],
3994 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07003995 .parent = &cpp_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003996 .dbg_name = "camss_vfe_cpp_clk",
3997 .ops = &clk_ops_branch,
3998 CLK_INIT(camss_vfe_cpp_clk.c),
3999 },
4000};
4001
4002static struct branch_clk camss_vfe_vfe0_clk = {
4003 .cbcr_reg = CAMSS_VFE_VFE0_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004004 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004005 .base = &virt_bases[MMSS_BASE],
4006 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004007 .parent = &vfe0_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004008 .dbg_name = "camss_vfe_vfe0_clk",
4009 .ops = &clk_ops_branch,
4010 CLK_INIT(camss_vfe_vfe0_clk.c),
4011 },
4012};
4013
4014static struct branch_clk camss_vfe_vfe1_clk = {
4015 .cbcr_reg = CAMSS_VFE_VFE1_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004016 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004017 .base = &virt_bases[MMSS_BASE],
4018 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004019 .parent = &vfe1_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004020 .dbg_name = "camss_vfe_vfe1_clk",
4021 .ops = &clk_ops_branch,
4022 CLK_INIT(camss_vfe_vfe1_clk.c),
4023 },
4024};
4025
4026static struct branch_clk camss_vfe_vfe_ahb_clk = {
4027 .cbcr_reg = CAMSS_VFE_VFE_AHB_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004028 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004029 .base = &virt_bases[MMSS_BASE],
4030 .c = {
4031 .dbg_name = "camss_vfe_vfe_ahb_clk",
4032 .ops = &clk_ops_branch,
4033 CLK_INIT(camss_vfe_vfe_ahb_clk.c),
4034 },
4035};
4036
4037static struct branch_clk camss_vfe_vfe_axi_clk = {
4038 .cbcr_reg = CAMSS_VFE_VFE_AXI_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004039 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004040 .base = &virt_bases[MMSS_BASE],
4041 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004042 .parent = &axi_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004043 .dbg_name = "camss_vfe_vfe_axi_clk",
4044 .ops = &clk_ops_branch,
4045 CLK_INIT(camss_vfe_vfe_axi_clk.c),
4046 },
4047};
4048
4049static struct branch_clk camss_vfe_vfe_ocmemnoc_clk = {
4050 .cbcr_reg = CAMSS_VFE_VFE_OCMEMNOC_CBCR,
4051 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004052 .base = &virt_bases[MMSS_BASE],
4053 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004054 .parent = &ocmemnoc_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004055 .dbg_name = "camss_vfe_vfe_ocmemnoc_clk",
4056 .ops = &clk_ops_branch,
4057 CLK_INIT(camss_vfe_vfe_ocmemnoc_clk.c),
4058 },
4059};
4060
4061static struct branch_clk mdss_ahb_clk = {
4062 .cbcr_reg = MDSS_AHB_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004063 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004064 .base = &virt_bases[MMSS_BASE],
4065 .c = {
4066 .dbg_name = "mdss_ahb_clk",
4067 .ops = &clk_ops_branch,
4068 CLK_INIT(mdss_ahb_clk.c),
4069 },
4070};
4071
4072static struct branch_clk mdss_axi_clk = {
4073 .cbcr_reg = MDSS_AXI_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004074 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004075 .base = &virt_bases[MMSS_BASE],
4076 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004077 .parent = &axi_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004078 .dbg_name = "mdss_axi_clk",
4079 .ops = &clk_ops_branch,
4080 CLK_INIT(mdss_axi_clk.c),
4081 },
4082};
4083
4084static struct branch_clk mdss_byte0_clk = {
4085 .cbcr_reg = MDSS_BYTE0_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004086 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004087 .base = &virt_bases[MMSS_BASE],
4088 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004089 .parent = &byte0_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004090 .dbg_name = "mdss_byte0_clk",
4091 .ops = &clk_ops_branch,
4092 CLK_INIT(mdss_byte0_clk.c),
4093 },
4094};
4095
4096static struct branch_clk mdss_byte1_clk = {
4097 .cbcr_reg = MDSS_BYTE1_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004098 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004099 .base = &virt_bases[MMSS_BASE],
4100 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004101 .parent = &byte1_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004102 .dbg_name = "mdss_byte1_clk",
4103 .ops = &clk_ops_branch,
4104 CLK_INIT(mdss_byte1_clk.c),
4105 },
4106};
4107
4108static struct branch_clk mdss_edpaux_clk = {
4109 .cbcr_reg = MDSS_EDPAUX_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004110 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004111 .base = &virt_bases[MMSS_BASE],
4112 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004113 .parent = &edpaux_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004114 .dbg_name = "mdss_edpaux_clk",
4115 .ops = &clk_ops_branch,
4116 CLK_INIT(mdss_edpaux_clk.c),
4117 },
4118};
4119
4120static struct branch_clk mdss_edplink_clk = {
4121 .cbcr_reg = MDSS_EDPLINK_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004122 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004123 .base = &virt_bases[MMSS_BASE],
4124 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004125 .parent = &edplink_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004126 .dbg_name = "mdss_edplink_clk",
4127 .ops = &clk_ops_branch,
4128 CLK_INIT(mdss_edplink_clk.c),
4129 },
4130};
4131
4132static struct branch_clk mdss_edppixel_clk = {
4133 .cbcr_reg = MDSS_EDPPIXEL_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004134 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004135 .base = &virt_bases[MMSS_BASE],
4136 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004137 .parent = &edppixel_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004138 .dbg_name = "mdss_edppixel_clk",
4139 .ops = &clk_ops_branch,
4140 CLK_INIT(mdss_edppixel_clk.c),
4141 },
4142};
4143
4144static struct branch_clk mdss_esc0_clk = {
4145 .cbcr_reg = MDSS_ESC0_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004146 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004147 .base = &virt_bases[MMSS_BASE],
4148 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004149 .parent = &esc0_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004150 .dbg_name = "mdss_esc0_clk",
4151 .ops = &clk_ops_branch,
4152 CLK_INIT(mdss_esc0_clk.c),
4153 },
4154};
4155
4156static struct branch_clk mdss_esc1_clk = {
4157 .cbcr_reg = MDSS_ESC1_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004158 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004159 .base = &virt_bases[MMSS_BASE],
4160 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004161 .parent = &esc1_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004162 .dbg_name = "mdss_esc1_clk",
4163 .ops = &clk_ops_branch,
4164 CLK_INIT(mdss_esc1_clk.c),
4165 },
4166};
4167
4168static struct branch_clk mdss_extpclk_clk = {
4169 .cbcr_reg = MDSS_EXTPCLK_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004170 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004171 .base = &virt_bases[MMSS_BASE],
4172 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004173 .parent = &extpclk_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004174 .dbg_name = "mdss_extpclk_clk",
4175 .ops = &clk_ops_branch,
4176 CLK_INIT(mdss_extpclk_clk.c),
4177 },
4178};
4179
4180static struct branch_clk mdss_hdmi_ahb_clk = {
4181 .cbcr_reg = MDSS_HDMI_AHB_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004182 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004183 .base = &virt_bases[MMSS_BASE],
4184 .c = {
4185 .dbg_name = "mdss_hdmi_ahb_clk",
4186 .ops = &clk_ops_branch,
4187 CLK_INIT(mdss_hdmi_ahb_clk.c),
4188 },
4189};
4190
4191static struct branch_clk mdss_hdmi_clk = {
4192 .cbcr_reg = MDSS_HDMI_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004193 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004194 .base = &virt_bases[MMSS_BASE],
4195 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004196 .parent = &hdmi_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004197 .dbg_name = "mdss_hdmi_clk",
4198 .ops = &clk_ops_branch,
4199 CLK_INIT(mdss_hdmi_clk.c),
4200 },
4201};
4202
4203static struct branch_clk mdss_mdp_clk = {
4204 .cbcr_reg = MDSS_MDP_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004205 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004206 .base = &virt_bases[MMSS_BASE],
4207 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004208 .parent = &mdp_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004209 .dbg_name = "mdss_mdp_clk",
4210 .ops = &clk_ops_branch,
4211 CLK_INIT(mdss_mdp_clk.c),
4212 },
4213};
4214
4215static struct branch_clk mdss_mdp_lut_clk = {
4216 .cbcr_reg = MDSS_MDP_LUT_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004217 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004218 .base = &virt_bases[MMSS_BASE],
4219 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004220 .parent = &mdp_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004221 .dbg_name = "mdss_mdp_lut_clk",
4222 .ops = &clk_ops_branch,
4223 CLK_INIT(mdss_mdp_lut_clk.c),
4224 },
4225};
4226
4227static struct branch_clk mdss_pclk0_clk = {
4228 .cbcr_reg = MDSS_PCLK0_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004229 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004230 .base = &virt_bases[MMSS_BASE],
4231 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004232 .parent = &pclk0_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004233 .dbg_name = "mdss_pclk0_clk",
4234 .ops = &clk_ops_branch,
4235 CLK_INIT(mdss_pclk0_clk.c),
4236 },
4237};
4238
4239static struct branch_clk mdss_pclk1_clk = {
4240 .cbcr_reg = MDSS_PCLK1_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004241 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004242 .base = &virt_bases[MMSS_BASE],
4243 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004244 .parent = &pclk1_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004245 .dbg_name = "mdss_pclk1_clk",
4246 .ops = &clk_ops_branch,
4247 CLK_INIT(mdss_pclk1_clk.c),
4248 },
4249};
4250
4251static struct branch_clk mdss_vsync_clk = {
4252 .cbcr_reg = MDSS_VSYNC_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004253 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004254 .base = &virt_bases[MMSS_BASE],
4255 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004256 .parent = &vsync_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004257 .dbg_name = "mdss_vsync_clk",
4258 .ops = &clk_ops_branch,
4259 CLK_INIT(mdss_vsync_clk.c),
4260 },
4261};
4262
4263static struct branch_clk mmss_misc_ahb_clk = {
4264 .cbcr_reg = MMSS_MISC_AHB_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004265 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004266 .base = &virt_bases[MMSS_BASE],
4267 .c = {
4268 .dbg_name = "mmss_misc_ahb_clk",
4269 .ops = &clk_ops_branch,
4270 CLK_INIT(mmss_misc_ahb_clk.c),
4271 },
4272};
4273
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004274static struct branch_clk mmss_mmssnoc_bto_ahb_clk = {
4275 .cbcr_reg = MMSS_MMSSNOC_BTO_AHB_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004276 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004277 .base = &virt_bases[MMSS_BASE],
4278 .c = {
4279 .dbg_name = "mmss_mmssnoc_bto_ahb_clk",
4280 .ops = &clk_ops_branch,
4281 CLK_INIT(mmss_mmssnoc_bto_ahb_clk.c),
4282 },
4283};
4284
4285static struct branch_clk mmss_mmssnoc_axi_clk = {
4286 .cbcr_reg = MMSS_MMSSNOC_AXI_CBCR,
Vikram Mulukutlac15dac02012-08-09 13:31:08 -07004287 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004288 .base = &virt_bases[MMSS_BASE],
4289 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004290 .parent = &axi_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004291 .dbg_name = "mmss_mmssnoc_axi_clk",
4292 .ops = &clk_ops_branch,
4293 CLK_INIT(mmss_mmssnoc_axi_clk.c),
4294 },
4295};
4296
4297static struct branch_clk mmss_s0_axi_clk = {
4298 .cbcr_reg = MMSS_S0_AXI_CBCR,
Vikram Mulukutlac15dac02012-08-09 13:31:08 -07004299 /* The bus driver needs set_rate to go through to the parent */
4300 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004301 .base = &virt_bases[MMSS_BASE],
4302 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004303 .parent = &axi_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004304 .dbg_name = "mmss_s0_axi_clk",
4305 .ops = &clk_ops_branch,
4306 CLK_INIT(mmss_s0_axi_clk.c),
Vikram Mulukutlac15dac02012-08-09 13:31:08 -07004307 .depends = &mmss_mmssnoc_axi_clk.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004308 },
4309};
4310
Vikram Mulukutlad08a1522012-05-24 15:24:01 -07004311struct branch_clk ocmemnoc_clk = {
4312 .cbcr_reg = OCMEMNOC_CBCR,
Vikram Mulukutlad08a1522012-05-24 15:24:01 -07004313 .has_sibling = 0,
4314 .bcr_reg = 0x50b0,
4315 .base = &virt_bases[MMSS_BASE],
4316 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004317 .parent = &ocmemnoc_clk_src.c,
Vikram Mulukutlad08a1522012-05-24 15:24:01 -07004318 .dbg_name = "ocmemnoc_clk",
4319 .ops = &clk_ops_branch,
4320 CLK_INIT(ocmemnoc_clk.c),
4321 },
4322};
4323
Vikram Mulukutla274b2d92012-07-13 15:53:04 -07004324struct branch_clk ocmemcx_ocmemnoc_clk = {
4325 .cbcr_reg = OCMEMCX_OCMEMNOC_CBCR,
Vikram Mulukutla274b2d92012-07-13 15:53:04 -07004326 .has_sibling = 1,
4327 .base = &virt_bases[MMSS_BASE],
4328 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004329 .parent = &ocmemnoc_clk_src.c,
Vikram Mulukutla274b2d92012-07-13 15:53:04 -07004330 .dbg_name = "ocmemcx_ocmemnoc_clk",
4331 .ops = &clk_ops_branch,
4332 CLK_INIT(ocmemcx_ocmemnoc_clk.c),
4333 },
4334};
4335
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004336static struct branch_clk venus0_ahb_clk = {
4337 .cbcr_reg = VENUS0_AHB_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004338 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004339 .base = &virt_bases[MMSS_BASE],
4340 .c = {
4341 .dbg_name = "venus0_ahb_clk",
4342 .ops = &clk_ops_branch,
4343 CLK_INIT(venus0_ahb_clk.c),
4344 },
4345};
4346
4347static struct branch_clk venus0_axi_clk = {
4348 .cbcr_reg = VENUS0_AXI_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 = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004352 .parent = &axi_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004353 .dbg_name = "venus0_axi_clk",
4354 .ops = &clk_ops_branch,
4355 CLK_INIT(venus0_axi_clk.c),
4356 },
4357};
4358
4359static struct branch_clk venus0_ocmemnoc_clk = {
4360 .cbcr_reg = VENUS0_OCMEMNOC_CBCR,
4361 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004362 .base = &virt_bases[MMSS_BASE],
4363 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004364 .parent = &ocmemnoc_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004365 .dbg_name = "venus0_ocmemnoc_clk",
4366 .ops = &clk_ops_branch,
4367 CLK_INIT(venus0_ocmemnoc_clk.c),
4368 },
4369};
4370
4371static struct branch_clk venus0_vcodec0_clk = {
4372 .cbcr_reg = VENUS0_VCODEC0_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004373 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004374 .base = &virt_bases[MMSS_BASE],
4375 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004376 .parent = &vcodec0_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004377 .dbg_name = "venus0_vcodec0_clk",
4378 .ops = &clk_ops_branch,
4379 CLK_INIT(venus0_vcodec0_clk.c),
4380 },
4381};
4382
Vikram Mulukutlae3b03062012-05-16 12:07:08 -07004383static struct branch_clk oxilicx_axi_clk = {
4384 .cbcr_reg = OXILICX_AXI_CBCR,
Vikram Mulukutlae3b03062012-05-16 12:07:08 -07004385 .has_sibling = 1,
4386 .base = &virt_bases[MMSS_BASE],
4387 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004388 .parent = &axi_clk_src.c,
Vikram Mulukutlae3b03062012-05-16 12:07:08 -07004389 .dbg_name = "oxilicx_axi_clk",
4390 .ops = &clk_ops_branch,
4391 CLK_INIT(oxilicx_axi_clk.c),
4392 },
4393};
4394
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004395static struct branch_clk oxili_gfx3d_clk = {
4396 .cbcr_reg = OXILI_GFX3D_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004397 .base = &virt_bases[MMSS_BASE],
4398 .c = {
Saravana Kannan7a6532e2012-10-18 20:51:13 -07004399 .parent = &oxili_gfx3d_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004400 .dbg_name = "oxili_gfx3d_clk",
4401 .ops = &clk_ops_branch,
4402 CLK_INIT(oxili_gfx3d_clk.c),
Vikram Mulukutlae3b03062012-05-16 12:07:08 -07004403 .depends = &oxilicx_axi_clk.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004404 },
4405};
4406
4407static struct branch_clk oxilicx_ahb_clk = {
4408 .cbcr_reg = OXILICX_AHB_CBCR,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004409 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004410 .base = &virt_bases[MMSS_BASE],
4411 .c = {
4412 .dbg_name = "oxilicx_ahb_clk",
4413 .ops = &clk_ops_branch,
4414 CLK_INIT(oxilicx_ahb_clk.c),
4415 },
4416};
4417
Vikram Mulukutlaa967db42012-05-10 16:20:40 -07004418static struct branch_clk q6ss_ahb_lfabif_clk = {
4419 .cbcr_reg = LPASS_Q6SS_AHB_LFABIF_CBCR,
4420 .has_sibling = 1,
4421 .base = &virt_bases[LPASS_BASE],
4422 .c = {
4423 .dbg_name = "q6ss_ahb_lfabif_clk",
4424 .ops = &clk_ops_branch,
4425 CLK_INIT(q6ss_ahb_lfabif_clk.c),
4426 },
4427};
4428
Vikram Mulukutla6c0f1a72012-08-10 01:59:28 -07004429
Vikram Mulukutla3454e9e2012-08-11 20:18:42 -07004430static struct branch_clk gcc_lpass_q6_axi_clk = {
4431 .cbcr_reg = LPASS_Q6_AXI_CBCR,
4432 .has_sibling = 1,
4433 .base = &virt_bases[GCC_BASE],
4434 .c = {
4435 .dbg_name = "gcc_lpass_q6_axi_clk",
4436 .ops = &clk_ops_branch,
4437 CLK_INIT(gcc_lpass_q6_axi_clk.c),
4438 },
4439};
4440
Vikram Mulukutlaa967db42012-05-10 16:20:40 -07004441static struct branch_clk q6ss_xo_clk = {
4442 .cbcr_reg = LPASS_Q6SS_XO_CBCR,
4443 .bcr_reg = LPASS_Q6SS_BCR,
4444 .has_sibling = 1,
4445 .base = &virt_bases[LPASS_BASE],
4446 .c = {
4447 .dbg_name = "q6ss_xo_clk",
4448 .ops = &clk_ops_branch,
4449 CLK_INIT(q6ss_xo_clk.c),
4450 },
4451};
4452
Vikram Mulukutlab5b311e2012-08-09 14:58:48 -07004453static struct branch_clk q6ss_ahbm_clk = {
4454 .cbcr_reg = Q6SS_AHBM_CBCR,
4455 .has_sibling = 1,
4456 .base = &virt_bases[LPASS_BASE],
4457 .c = {
4458 .dbg_name = "q6ss_ahbm_clk",
4459 .ops = &clk_ops_branch,
4460 CLK_INIT(q6ss_ahbm_clk.c),
4461 },
4462};
4463
Matt Wagantalledf2fad2012-08-06 16:11:46 -07004464static DEFINE_CLK_MEASURE(l2_m_clk);
4465static DEFINE_CLK_MEASURE(krait0_m_clk);
4466static DEFINE_CLK_MEASURE(krait1_m_clk);
4467static DEFINE_CLK_MEASURE(krait2_m_clk);
4468static DEFINE_CLK_MEASURE(krait3_m_clk);
4469
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004470#ifdef CONFIG_DEBUG_FS
4471
4472struct measure_mux_entry {
4473 struct clk *c;
4474 int base;
4475 u32 debug_mux;
4476};
4477
Matt Wagantall0976c4c2013-02-07 17:12:43 -08004478enum {
4479 M_ACPU0 = 0,
4480 M_ACPU1,
4481 M_ACPU2,
4482 M_ACPU3,
4483 M_L2,
4484};
4485
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004486struct measure_mux_entry measure_mux[] = {
Vikram Mulukutla9cd8f0f2012-07-27 14:15:24 -07004487 {&gcc_pdm_ahb_clk.c, GCC_BASE, 0x00d0},
4488 {&gcc_blsp2_qup1_i2c_apps_clk.c, GCC_BASE, 0x00ab},
4489 {&gcc_blsp2_qup3_spi_apps_clk.c, GCC_BASE, 0x00b3},
4490 {&gcc_blsp2_uart5_apps_clk.c, GCC_BASE, 0x00be},
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004491 {&gcc_usb30_master_clk.c, GCC_BASE, 0x0050},
Vikram Mulukutla9cd8f0f2012-07-27 14:15:24 -07004492 {&gcc_blsp2_qup3_i2c_apps_clk.c, GCC_BASE, 0x00b4},
4493 {&gcc_usb_hsic_system_clk.c, GCC_BASE, 0x0059},
4494 {&gcc_blsp2_uart3_apps_clk.c, GCC_BASE, 0x00b5},
4495 {&gcc_usb_hsic_io_cal_clk.c, GCC_BASE, 0x005b},
4496 {&gcc_ce2_axi_clk.c, GCC_BASE, 0x0141},
4497 {&gcc_sdcc3_ahb_clk.c, GCC_BASE, 0x0079},
4498 {&gcc_blsp1_qup5_i2c_apps_clk.c, GCC_BASE, 0x009d},
4499 {&gcc_blsp1_qup1_spi_apps_clk.c, GCC_BASE, 0x008a},
4500 {&gcc_blsp2_uart4_apps_clk.c, GCC_BASE, 0x00ba},
4501 {&gcc_ce2_clk.c, GCC_BASE, 0x0140},
4502 {&gcc_blsp1_uart2_apps_clk.c, GCC_BASE, 0x0091},
4503 {&gcc_sdcc1_ahb_clk.c, GCC_BASE, 0x0069},
4504 {&gcc_mss_cfg_ahb_clk.c, GCC_BASE, 0x0030},
4505 {&gcc_tsif_ahb_clk.c, GCC_BASE, 0x00e8},
4506 {&gcc_sdcc4_ahb_clk.c, GCC_BASE, 0x0081},
4507 {&gcc_blsp1_qup4_spi_apps_clk.c, GCC_BASE, 0x0098},
4508 {&gcc_blsp2_qup4_spi_apps_clk.c, GCC_BASE, 0x00b8},
4509 {&gcc_blsp1_qup3_spi_apps_clk.c, GCC_BASE, 0x0093},
4510 {&gcc_blsp1_qup6_i2c_apps_clk.c, GCC_BASE, 0x00a2},
4511 {&gcc_blsp2_qup6_i2c_apps_clk.c, GCC_BASE, 0x00c2},
4512 {&gcc_bam_dma_ahb_clk.c, GCC_BASE, 0x00e0},
4513 {&gcc_sdcc3_apps_clk.c, GCC_BASE, 0x0078},
4514 {&gcc_usb_hs_system_clk.c, GCC_BASE, 0x0060},
4515 {&gcc_blsp1_ahb_clk.c, GCC_BASE, 0x0088},
4516 {&gcc_sdcc1_apps_clk.c, GCC_BASE, 0x0068},
4517 {&gcc_blsp2_qup5_i2c_apps_clk.c, GCC_BASE, 0x00bd},
4518 {&gcc_blsp1_uart4_apps_clk.c, GCC_BASE, 0x009a},
4519 {&gcc_blsp2_qup2_spi_apps_clk.c, GCC_BASE, 0x00ae},
4520 {&gcc_blsp2_qup6_spi_apps_clk.c, GCC_BASE, 0x00c1},
4521 {&gcc_blsp2_uart2_apps_clk.c, GCC_BASE, 0x00b1},
4522 {&gcc_blsp1_qup2_spi_apps_clk.c, GCC_BASE, 0x008e},
4523 {&gcc_usb_hsic_ahb_clk.c, GCC_BASE, 0x0058},
4524 {&gcc_blsp1_uart3_apps_clk.c, GCC_BASE, 0x0095},
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004525 {&gcc_usb30_mock_utmi_clk.c, GCC_BASE, 0x0052},
Vikram Mulukutla9cd8f0f2012-07-27 14:15:24 -07004526 {&gcc_ce1_axi_clk.c, GCC_BASE, 0x0139},
4527 {&gcc_sdcc4_apps_clk.c, GCC_BASE, 0x0080},
4528 {&gcc_blsp1_qup5_spi_apps_clk.c, GCC_BASE, 0x009c},
4529 {&gcc_usb_hs_ahb_clk.c, GCC_BASE, 0x0061},
4530 {&gcc_blsp1_qup6_spi_apps_clk.c, GCC_BASE, 0x00a1},
4531 {&gcc_blsp2_qup2_i2c_apps_clk.c, GCC_BASE, 0x00b0},
4532 {&gcc_prng_ahb_clk.c, GCC_BASE, 0x00d8},
4533 {&gcc_blsp1_qup3_i2c_apps_clk.c, GCC_BASE, 0x0094},
4534 {&gcc_usb_hsic_clk.c, GCC_BASE, 0x005a},
4535 {&gcc_blsp1_uart6_apps_clk.c, GCC_BASE, 0x00a3},
4536 {&gcc_sdcc2_apps_clk.c, GCC_BASE, 0x0070},
4537 {&gcc_tsif_ref_clk.c, GCC_BASE, 0x00e9},
4538 {&gcc_blsp1_uart1_apps_clk.c, GCC_BASE, 0x008c},
4539 {&gcc_blsp2_qup5_spi_apps_clk.c, GCC_BASE, 0x00bc},
4540 {&gcc_blsp1_qup4_i2c_apps_clk.c, GCC_BASE, 0x0099},
4541 {&gcc_mmss_noc_cfg_ahb_clk.c, GCC_BASE, 0x002a},
4542 {&gcc_blsp2_ahb_clk.c, GCC_BASE, 0x00a8},
4543 {&gcc_boot_rom_ahb_clk.c, GCC_BASE, 0x00f8},
4544 {&gcc_ce1_ahb_clk.c, GCC_BASE, 0x013a},
4545 {&gcc_pdm2_clk.c, GCC_BASE, 0x00d2},
4546 {&gcc_blsp2_qup4_i2c_apps_clk.c, GCC_BASE, 0x00b9},
4547 {&gcc_ce2_ahb_clk.c, GCC_BASE, 0x0142},
4548 {&gcc_blsp1_uart5_apps_clk.c, GCC_BASE, 0x009e},
4549 {&gcc_blsp2_qup1_spi_apps_clk.c, GCC_BASE, 0x00aa},
4550 {&gcc_blsp1_qup2_i2c_apps_clk.c, GCC_BASE, 0x0090},
4551 {&gcc_blsp2_uart1_apps_clk.c, GCC_BASE, 0x00ac},
4552 {&gcc_blsp1_qup1_i2c_apps_clk.c, GCC_BASE, 0x008b},
4553 {&gcc_blsp2_uart6_apps_clk.c, GCC_BASE, 0x00c3},
4554 {&gcc_sdcc2_ahb_clk.c, GCC_BASE, 0x0071},
Vikram Mulukutla3b98a6d2012-08-15 20:35:25 -07004555 {&gcc_usb30_sleep_clk.c, GCC_BASE, 0x0051},
4556 {&gcc_usb2a_phy_sleep_clk.c, GCC_BASE, 0x0063},
4557 {&gcc_usb2b_phy_sleep_clk.c, GCC_BASE, 0x0064},
4558 {&gcc_sys_noc_usb3_axi_clk.c, GCC_BASE, 0x0001},
Vikram Mulukutla9cd8f0f2012-07-27 14:15:24 -07004559 {&gcc_ocmem_noc_cfg_ahb_clk.c, GCC_BASE, 0x0029},
4560 {&gcc_ce1_clk.c, GCC_BASE, 0x0138},
Vikram Mulukutla3454e9e2012-08-11 20:18:42 -07004561 {&gcc_lpass_q6_axi_clk.c, GCC_BASE, 0x0160},
Vikram Mulukutla31926eb2012-08-12 19:58:08 -07004562 {&gcc_mss_q6_bimc_axi_clk.c, GCC_BASE, 0x0031},
Vikram Mulukutlab5294732012-10-15 14:21:47 -07004563 {&cnoc_clk.c, GCC_BASE, 0x0008},
4564 {&pnoc_clk.c, GCC_BASE, 0x0010},
4565 {&snoc_clk.c, GCC_BASE, 0x0000},
4566 {&bimc_clk.c, GCC_BASE, 0x0155},
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004567 {&mmss_mmssnoc_axi_clk.c, MMSS_BASE, 0x0004},
Vikram Mulukutlad08a1522012-05-24 15:24:01 -07004568 {&ocmemnoc_clk.c, MMSS_BASE, 0x0007},
Vikram Mulukutla274b2d92012-07-13 15:53:04 -07004569 {&ocmemcx_ocmemnoc_clk.c, MMSS_BASE, 0x0009},
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004570 {&camss_cci_cci_ahb_clk.c, MMSS_BASE, 0x002e},
4571 {&camss_cci_cci_clk.c, MMSS_BASE, 0x002d},
4572 {&camss_csi0_ahb_clk.c, MMSS_BASE, 0x0042},
4573 {&camss_csi0_clk.c, MMSS_BASE, 0x0041},
4574 {&camss_csi0phy_clk.c, MMSS_BASE, 0x0043},
4575 {&camss_csi0pix_clk.c, MMSS_BASE, 0x0045},
4576 {&camss_csi0rdi_clk.c, MMSS_BASE, 0x0044},
4577 {&camss_csi1_ahb_clk.c, MMSS_BASE, 0x0047},
4578 {&camss_csi1_clk.c, MMSS_BASE, 0x0046},
4579 {&camss_csi1phy_clk.c, MMSS_BASE, 0x0048},
4580 {&camss_csi1pix_clk.c, MMSS_BASE, 0x004a},
4581 {&camss_csi1rdi_clk.c, MMSS_BASE, 0x0049},
4582 {&camss_csi2_ahb_clk.c, MMSS_BASE, 0x004c},
4583 {&camss_csi2_clk.c, MMSS_BASE, 0x004b},
4584 {&camss_csi2phy_clk.c, MMSS_BASE, 0x004d},
4585 {&camss_csi2pix_clk.c, MMSS_BASE, 0x004f},
4586 {&camss_csi2rdi_clk.c, MMSS_BASE, 0x004e},
4587 {&camss_csi3_ahb_clk.c, MMSS_BASE, 0x0051},
4588 {&camss_csi3_clk.c, MMSS_BASE, 0x0050},
4589 {&camss_csi3phy_clk.c, MMSS_BASE, 0x0052},
4590 {&camss_csi3pix_clk.c, MMSS_BASE, 0x0054},
4591 {&camss_csi3rdi_clk.c, MMSS_BASE, 0x0053},
4592 {&camss_csi_vfe0_clk.c, MMSS_BASE, 0x003f},
4593 {&camss_csi_vfe1_clk.c, MMSS_BASE, 0x0040},
4594 {&camss_gp0_clk.c, MMSS_BASE, 0x0027},
4595 {&camss_gp1_clk.c, MMSS_BASE, 0x0028},
4596 {&camss_ispif_ahb_clk.c, MMSS_BASE, 0x0055},
4597 {&camss_jpeg_jpeg0_clk.c, MMSS_BASE, 0x0032},
4598 {&camss_jpeg_jpeg1_clk.c, MMSS_BASE, 0x0033},
4599 {&camss_jpeg_jpeg2_clk.c, MMSS_BASE, 0x0034},
4600 {&camss_jpeg_jpeg_ahb_clk.c, MMSS_BASE, 0x0035},
4601 {&camss_jpeg_jpeg_axi_clk.c, MMSS_BASE, 0x0036},
4602 {&camss_jpeg_jpeg_ocmemnoc_clk.c, MMSS_BASE, 0x0037},
4603 {&camss_mclk0_clk.c, MMSS_BASE, 0x0029},
4604 {&camss_mclk1_clk.c, MMSS_BASE, 0x002a},
4605 {&camss_mclk2_clk.c, MMSS_BASE, 0x002b},
4606 {&camss_mclk3_clk.c, MMSS_BASE, 0x002c},
4607 {&camss_micro_ahb_clk.c, MMSS_BASE, 0x0026},
4608 {&camss_phy0_csi0phytimer_clk.c, MMSS_BASE, 0x002f},
4609 {&camss_phy1_csi1phytimer_clk.c, MMSS_BASE, 0x0030},
4610 {&camss_phy2_csi2phytimer_clk.c, MMSS_BASE, 0x0031},
4611 {&camss_top_ahb_clk.c, MMSS_BASE, 0x0025},
4612 {&camss_vfe_cpp_ahb_clk.c, MMSS_BASE, 0x003b},
4613 {&camss_vfe_cpp_clk.c, MMSS_BASE, 0x003a},
4614 {&camss_vfe_vfe0_clk.c, MMSS_BASE, 0x0038},
4615 {&camss_vfe_vfe1_clk.c, MMSS_BASE, 0x0039},
4616 {&camss_vfe_vfe_ahb_clk.c, MMSS_BASE, 0x003c},
4617 {&camss_vfe_vfe_axi_clk.c, MMSS_BASE, 0x003d},
4618 {&camss_vfe_vfe_ocmemnoc_clk.c, MMSS_BASE, 0x003e},
Vikram Mulukutladf04d532012-08-10 21:01:00 -07004619 {&oxilicx_axi_clk.c, MMSS_BASE, 0x000b},
4620 {&oxilicx_ahb_clk.c, MMSS_BASE, 0x000c},
4621 {&ocmemcx_ocmemnoc_clk.c, MMSS_BASE, 0x0009},
4622 {&oxili_gfx3d_clk.c, MMSS_BASE, 0x000d},
4623 {&venus0_axi_clk.c, MMSS_BASE, 0x000f},
4624 {&venus0_ocmemnoc_clk.c, MMSS_BASE, 0x0010},
4625 {&venus0_ahb_clk.c, MMSS_BASE, 0x0011},
4626 {&venus0_vcodec0_clk.c, MMSS_BASE, 0x000e},
4627 {&mmss_s0_axi_clk.c, MMSS_BASE, 0x0005},
4628 {&mmssnoc_ahb_clk.c, MMSS_BASE, 0x0001},
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004629 {&mdss_ahb_clk.c, MMSS_BASE, 0x0022},
4630 {&mdss_hdmi_clk.c, MMSS_BASE, 0x001d},
4631 {&mdss_mdp_clk.c, MMSS_BASE, 0x0014},
4632 {&mdss_mdp_lut_clk.c, MMSS_BASE, 0x0015},
4633 {&mdss_axi_clk.c, MMSS_BASE, 0x0024},
4634 {&mdss_vsync_clk.c, MMSS_BASE, 0x001c},
4635 {&mdss_esc0_clk.c, MMSS_BASE, 0x0020},
4636 {&mdss_esc1_clk.c, MMSS_BASE, 0x0021},
4637 {&mdss_edpaux_clk.c, MMSS_BASE, 0x001b},
4638 {&mdss_byte0_clk.c, MMSS_BASE, 0x001e},
4639 {&mdss_byte1_clk.c, MMSS_BASE, 0x001f},
4640 {&mdss_edplink_clk.c, MMSS_BASE, 0x001a},
4641 {&mdss_edppixel_clk.c, MMSS_BASE, 0x0019},
4642 {&mdss_extpclk_clk.c, MMSS_BASE, 0x0018},
4643 {&mdss_hdmi_ahb_clk.c, MMSS_BASE, 0x0023},
4644 {&mdss_pclk0_clk.c, MMSS_BASE, 0x0016},
4645 {&mdss_pclk1_clk.c, MMSS_BASE, 0x0017},
Vikram Mulukutlaa967db42012-05-10 16:20:40 -07004646 {&q6ss_xo_clk.c, LPASS_BASE, 0x002b},
4647 {&q6ss_ahb_lfabif_clk.c, LPASS_BASE, 0x001e},
Vikram Mulukutlab5b311e2012-08-09 14:58:48 -07004648 {&q6ss_ahbm_clk.c, LPASS_BASE, 0x001d},
Vikram Mulukutlaa967db42012-05-10 16:20:40 -07004649
Matt Wagantall0976c4c2013-02-07 17:12:43 -08004650 {&krait0_m_clk, APCS_BASE, M_ACPU0},
4651 {&krait1_m_clk, APCS_BASE, M_ACPU1},
4652 {&krait2_m_clk, APCS_BASE, M_ACPU2},
4653 {&krait3_m_clk, APCS_BASE, M_ACPU3},
4654 {&l2_m_clk, APCS_BASE, M_L2},
Matt Wagantalledf2fad2012-08-06 16:11:46 -07004655
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004656 {&dummy_clk, N_BASES, 0x0000},
4657};
4658
4659static int measure_clk_set_parent(struct clk *c, struct clk *parent)
4660{
4661 struct measure_clk *clk = to_measure_clk(c);
4662 unsigned long flags;
4663 u32 regval, clk_sel, i;
4664
4665 if (!parent)
4666 return -EINVAL;
4667
4668 for (i = 0; i < (ARRAY_SIZE(measure_mux) - 1); i++)
4669 if (measure_mux[i].c == parent)
4670 break;
4671
4672 if (measure_mux[i].c == &dummy_clk)
4673 return -EINVAL;
4674
4675 spin_lock_irqsave(&local_clock_reg_lock, flags);
4676 /*
4677 * Program the test vector, measurement period (sample_ticks)
4678 * and scaling multiplier.
4679 */
4680 clk->sample_ticks = 0x10000;
4681 clk->multiplier = 1;
4682
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004683 switch (measure_mux[i].base) {
4684
4685 case GCC_BASE:
Vikram Mulukutlaae7cfdb2012-08-10 15:30:21 -07004686 writel_relaxed(0, GCC_REG_BASE(GCC_DEBUG_CLK_CTL_REG));
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004687 clk_sel = measure_mux[i].debug_mux;
4688 break;
4689
4690 case MMSS_BASE:
Vikram Mulukutlaae7cfdb2012-08-10 15:30:21 -07004691 writel_relaxed(0, MMSS_REG_BASE(MMSS_DEBUG_CLK_CTL_REG));
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004692 clk_sel = 0x02C;
4693 regval = BVAL(11, 0, measure_mux[i].debug_mux);
4694 writel_relaxed(regval, MMSS_REG_BASE(MMSS_DEBUG_CLK_CTL_REG));
4695
4696 /* Activate debug clock output */
4697 regval |= BIT(16);
4698 writel_relaxed(regval, MMSS_REG_BASE(MMSS_DEBUG_CLK_CTL_REG));
4699 break;
4700
4701 case LPASS_BASE:
Vikram Mulukutlaae7cfdb2012-08-10 15:30:21 -07004702 writel_relaxed(0, LPASS_REG_BASE(LPASS_DEBUG_CLK_CTL_REG));
Vikram Mulukutla93537012012-08-08 14:44:33 -07004703 clk_sel = 0x161;
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004704 regval = BVAL(11, 0, measure_mux[i].debug_mux);
4705 writel_relaxed(regval, LPASS_REG_BASE(LPASS_DEBUG_CLK_CTL_REG));
4706
4707 /* Activate debug clock output */
Vikram Mulukutla93537012012-08-08 14:44:33 -07004708 regval |= BIT(20);
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004709 writel_relaxed(regval, LPASS_REG_BASE(LPASS_DEBUG_CLK_CTL_REG));
4710 break;
4711
Matt Wagantalledf2fad2012-08-06 16:11:46 -07004712 case APCS_BASE:
4713 clk->multiplier = 4;
4714 clk_sel = 0x16A;
Matt Wagantall0976c4c2013-02-07 17:12:43 -08004715
4716 if (SOCINFO_VERSION_MAJOR(socinfo_get_version()) == 1) {
4717 if (measure_mux[i].debug_mux == M_L2)
4718 regval = BIT(7)|BIT(0);
4719 else
4720 regval = BIT(7)|(measure_mux[i].debug_mux << 3);
4721 } else {
4722 if (measure_mux[i].debug_mux == M_L2)
4723 regval = BIT(12);
4724 else
4725 regval = measure_mux[i].debug_mux << 8;
4726 writel_relaxed(BIT(0), APCS_REG_BASE(L2_CBCR_REG));
4727 }
Matt Wagantalledf2fad2012-08-06 16:11:46 -07004728 writel_relaxed(regval, APCS_REG_BASE(GLB_CLK_DIAG_REG));
4729 break;
4730
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004731 default:
4732 return -EINVAL;
4733 }
4734
4735 /* Set debug mux clock index */
4736 regval = BVAL(8, 0, clk_sel);
4737 writel_relaxed(regval, GCC_REG_BASE(GCC_DEBUG_CLK_CTL_REG));
4738
4739 /* Activate debug clock output */
4740 regval |= BIT(16);
4741 writel_relaxed(regval, GCC_REG_BASE(GCC_DEBUG_CLK_CTL_REG));
4742
4743 /* Make sure test vector is set before starting measurements. */
4744 mb();
4745 spin_unlock_irqrestore(&local_clock_reg_lock, flags);
4746
4747 return 0;
4748}
4749
4750/* Sample clock for 'ticks' reference clock ticks. */
4751static u32 run_measurement(unsigned ticks)
4752{
4753 /* Stop counters and set the XO4 counter start value. */
4754 writel_relaxed(ticks, GCC_REG_BASE(CLOCK_FRQ_MEASURE_CTL_REG));
4755
4756 /* Wait for timer to become ready. */
4757 while ((readl_relaxed(GCC_REG_BASE(CLOCK_FRQ_MEASURE_STATUS_REG)) &
4758 BIT(25)) != 0)
4759 cpu_relax();
4760
4761 /* Run measurement and wait for completion. */
4762 writel_relaxed(BIT(20)|ticks, GCC_REG_BASE(CLOCK_FRQ_MEASURE_CTL_REG));
4763 while ((readl_relaxed(GCC_REG_BASE(CLOCK_FRQ_MEASURE_STATUS_REG)) &
4764 BIT(25)) == 0)
4765 cpu_relax();
4766
4767 /* Return measured ticks. */
4768 return readl_relaxed(GCC_REG_BASE(CLOCK_FRQ_MEASURE_STATUS_REG)) &
4769 BM(24, 0);
4770}
4771
4772/*
4773 * Perform a hardware rate measurement for a given clock.
4774 * FOR DEBUG USE ONLY: Measurements take ~15 ms!
4775 */
4776static unsigned long measure_clk_get_rate(struct clk *c)
4777{
4778 unsigned long flags;
4779 u32 gcc_xo4_reg_backup;
4780 u64 raw_count_short, raw_count_full;
4781 struct measure_clk *clk = to_measure_clk(c);
4782 unsigned ret;
4783
4784 ret = clk_prepare_enable(&cxo_clk_src.c);
4785 if (ret) {
4786 pr_warning("CXO clock failed to enable. Can't measure\n");
4787 return 0;
4788 }
4789
4790 spin_lock_irqsave(&local_clock_reg_lock, flags);
4791
4792 /* Enable CXO/4 and RINGOSC branch. */
4793 gcc_xo4_reg_backup = readl_relaxed(GCC_REG_BASE(GCC_XO_DIV4_CBCR_REG));
4794 writel_relaxed(0x1, GCC_REG_BASE(GCC_XO_DIV4_CBCR_REG));
4795
4796 /*
4797 * The ring oscillator counter will not reset if the measured clock
4798 * is not running. To detect this, run a short measurement before
4799 * the full measurement. If the raw results of the two are the same
4800 * then the clock must be off.
4801 */
4802
4803 /* Run a short measurement. (~1 ms) */
4804 raw_count_short = run_measurement(0x1000);
4805 /* Run a full measurement. (~14 ms) */
4806 raw_count_full = run_measurement(clk->sample_ticks);
4807
4808 writel_relaxed(gcc_xo4_reg_backup, GCC_REG_BASE(GCC_XO_DIV4_CBCR_REG));
4809
4810 /* Return 0 if the clock is off. */
4811 if (raw_count_full == raw_count_short) {
4812 ret = 0;
4813 } else {
4814 /* Compute rate in Hz. */
4815 raw_count_full = ((raw_count_full * 10) + 15) * 4800000;
4816 do_div(raw_count_full, ((clk->sample_ticks * 10) + 35));
4817 ret = (raw_count_full * clk->multiplier);
4818 }
4819
Matt Wagantall9a9b6f02012-08-07 23:12:26 -07004820 writel_relaxed(0x51A00, GCC_REG_BASE(GCC_PLLTEST_PAD_CFG_REG));
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004821 spin_unlock_irqrestore(&local_clock_reg_lock, flags);
4822
4823 clk_disable_unprepare(&cxo_clk_src.c);
4824
4825 return ret;
4826}
4827#else /* !CONFIG_DEBUG_FS */
4828static int measure_clk_set_parent(struct clk *clk, struct clk *parent)
4829{
4830 return -EINVAL;
4831}
4832
4833static unsigned long measure_clk_get_rate(struct clk *clk)
4834{
4835 return 0;
4836}
4837#endif /* CONFIG_DEBUG_FS */
4838
Matt Wagantallae053222012-05-14 19:42:07 -07004839static struct clk_ops clk_ops_measure = {
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004840 .set_parent = measure_clk_set_parent,
4841 .get_rate = measure_clk_get_rate,
4842};
4843
4844static struct measure_clk measure_clk = {
4845 .c = {
4846 .dbg_name = "measure_clk",
Matt Wagantallae053222012-05-14 19:42:07 -07004847 .ops = &clk_ops_measure,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004848 CLK_INIT(measure_clk.c),
4849 },
4850 .multiplier = 1,
4851};
4852
Vikram Mulukutla19245e02012-07-23 15:58:04 -07004853
4854static struct clk_lookup msm_clocks_8974_rumi[] = {
4855 CLK_LOOKUP("iface_clk", gcc_sdcc1_ahb_clk.c, "msm_sdcc.1"),
4856 CLK_LOOKUP("core_clk", gcc_sdcc1_apps_clk.c, "msm_sdcc.1"),
Vikram Mulukutla19245e02012-07-23 15:58:04 -07004857 CLK_LOOKUP("iface_clk", gcc_sdcc2_ahb_clk.c, "msm_sdcc.2"),
4858 CLK_LOOKUP("core_clk", gcc_sdcc2_apps_clk.c, "msm_sdcc.2"),
Vikram Mulukutla19245e02012-07-23 15:58:04 -07004859 CLK_LOOKUP("iface_clk", gcc_sdcc3_ahb_clk.c, "msm_sdcc.3"),
4860 CLK_LOOKUP("core_clk", gcc_sdcc3_apps_clk.c, "msm_sdcc.3"),
Vikram Mulukutla19245e02012-07-23 15:58:04 -07004861 CLK_LOOKUP("iface_clk", gcc_sdcc4_ahb_clk.c, "msm_sdcc.4"),
4862 CLK_LOOKUP("core_clk", gcc_sdcc4_apps_clk.c, "msm_sdcc.4"),
Vikram Mulukutla19245e02012-07-23 15:58:04 -07004863 CLK_DUMMY("xo", XO_CLK, NULL, OFF),
Tianyi Gou7fea5da2012-12-06 15:56:31 -08004864 CLK_DUMMY("xo", XO_CLK, "fb21b000.qcom,pronto", OFF),
Stepan Moskovchenkof97dede72012-08-08 17:40:44 -07004865 CLK_DUMMY("core_clk", BLSP2_UART_CLK, "f991f000.serial", OFF),
4866 CLK_DUMMY("iface_clk", BLSP2_UART_CLK, "f991f000.serial", OFF),
Vikram Mulukutla19245e02012-07-23 15:58:04 -07004867 CLK_DUMMY("core_clk", SDC1_CLK, NULL, OFF),
4868 CLK_DUMMY("iface_clk", SDC1_P_CLK, NULL, OFF),
4869 CLK_DUMMY("core_clk", SDC3_CLK, NULL, OFF),
4870 CLK_DUMMY("iface_clk", SDC3_P_CLK, NULL, OFF),
4871 CLK_DUMMY("phy_clk", NULL, "msm_otg", OFF),
4872 CLK_DUMMY("core_clk", NULL, "msm_otg", OFF),
4873 CLK_DUMMY("iface_clk", NULL, "msm_otg", OFF),
4874 CLK_DUMMY("xo", NULL, "msm_otg", OFF),
4875 CLK_DUMMY("dfab_clk", DFAB_CLK, NULL, 0),
4876 CLK_DUMMY("dma_bam_pclk", DMA_BAM_P_CLK, NULL, 0),
4877 CLK_DUMMY("mem_clk", NULL, NULL, 0),
4878 CLK_DUMMY("core_clk", SPI_CLK, "spi_qsd.1", OFF),
4879 CLK_DUMMY("iface_clk", SPI_P_CLK, "spi_qsd.1", OFF),
4880 CLK_DUMMY("core_clk", NULL, "f9966000.i2c", 0),
4881 CLK_DUMMY("iface_clk", NULL, "f9966000.i2c", 0),
4882 CLK_DUMMY("core_clk", NULL, "fe12f000.slim", OFF),
4883 CLK_DUMMY("core_clk", "mdp.0", NULL, 0),
4884 CLK_DUMMY("core_clk_src", "mdp.0", NULL, 0),
4885 CLK_DUMMY("lut_clk", "mdp.0", NULL, 0),
4886 CLK_DUMMY("vsync_clk", "mdp.0", NULL, 0),
4887 CLK_DUMMY("iface_clk", "mdp.0", NULL, 0),
4888 CLK_DUMMY("bus_clk", "mdp.0", NULL, 0),
Olav Haugan5bec5192013-01-21 17:59:17 -08004889 CLK_DUMMY("iface_clk", NULL, "fda64000.qcom,iommu", OFF),
4890 CLK_DUMMY("core_clk", NULL, "fda64000.qcom,iommu", OFF),
4891 CLK_DUMMY("alt_core_clk", NULL, "fda64000.qcom,iommu", OFF),
4892 CLK_DUMMY("iface_clk", NULL, "fda44000.qcom,iommu", OFF),
4893 CLK_DUMMY("core_clk", NULL, "fda44000.qcom,iommu", OFF),
4894 CLK_DUMMY("alt_core_clk", NULL, "fda44000.qcom,iommu", OFF),
4895 CLK_DUMMY("iface_clk", NULL, "fd928000.qcom,iommu", OFF),
4896 CLK_DUMMY("core_clk", NULL, "fd928000.qcom,iommu", oFF),
4897 CLK_DUMMY("core_clk", NULL, "fdb10000.qcom,iommu", OFF),
4898 CLK_DUMMY("iface_clk", NULL, "fdb10000.qcom,iommu", OFF),
4899 CLK_DUMMY("alt_core_clk", NULL, "fdb10000.qcom,iommu", OFF),
4900 CLK_DUMMY("iface_clk", NULL, "fdc84000.qcom,iommu", OFF),
4901 CLK_DUMMY("alt_core_clk", NULL, "fdc84000.qcom,iommu", oFF),
4902 CLK_DUMMY("core_clk", NULL, "fdc84000.qcom,iommu", oFF),
Vikram Mulukutla19245e02012-07-23 15:58:04 -07004903};
4904
Abhimanyu Kapur90ced6e2012-06-26 17:41:25 -07004905static struct clk_lookup msm_clocks_8974[] = {
Vikram Mulukutla510f7492013-02-04 11:59:52 -08004906 CLK_LOOKUP("xo", cxo_otg_clk.c, "msm_otg"),
4907 CLK_LOOKUP("xo", cxo_pil_lpass_clk.c, "fe200000.qcom,lpass"),
4908 CLK_LOOKUP("xo", cxo_pil_mss_clk.c, "fc880000.qcom,mss"),
4909 CLK_LOOKUP("xo", cxo_wlan_clk.c, "fb000000.qcom,wcnss-wlan"),
4910 CLK_LOOKUP("xo", cxo_pil_pronto_clk.c, "fb21b000.qcom,pronto"),
Vijayavardhan Vennapusadec1fe62013-02-12 16:05:14 +05304911 CLK_LOOKUP("xo", cxo_dwc3_clk.c, "msm_dwc3"),
Vikram Mulukutla510f7492013-02-04 11:59:52 -08004912
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004913 CLK_LOOKUP("measure", measure_clk.c, "debug"),
4914
4915 CLK_LOOKUP("dma_bam_pclk", gcc_bam_dma_ahb_clk.c, "msm_sps"),
Stepan Moskovchenkof97dede72012-08-08 17:40:44 -07004916 CLK_LOOKUP("iface_clk", gcc_blsp1_ahb_clk.c, "f991f000.serial"),
Amy Malochebc7e9672012-08-15 10:30:40 -07004917 CLK_LOOKUP("iface_clk", gcc_blsp1_ahb_clk.c, "f9924000.i2c"),
Stepan Moskovchenko5269b602012-08-08 17:57:09 -07004918 CLK_LOOKUP("iface_clk", gcc_blsp1_ahb_clk.c, "f991e000.serial"),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004919 CLK_LOOKUP("core_clk", gcc_blsp1_qup1_i2c_apps_clk.c, ""),
Amy Malochebc7e9672012-08-15 10:30:40 -07004920 CLK_LOOKUP("core_clk", gcc_blsp1_qup2_i2c_apps_clk.c, "f9924000.i2c"),
4921 CLK_LOOKUP("core_clk", gcc_blsp1_qup2_spi_apps_clk.c, ""),
Subbaraman Narayanamurthy3f93ab12012-08-17 19:39:47 -07004922 CLK_LOOKUP("core_clk", gcc_blsp1_qup1_spi_apps_clk.c, "f9923000.spi"),
4923 CLK_LOOKUP("iface_clk", gcc_blsp1_ahb_clk.c, "f9923000.spi"),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004924 CLK_LOOKUP("core_clk", gcc_blsp1_qup3_i2c_apps_clk.c, ""),
4925 CLK_LOOKUP("core_clk", gcc_blsp1_qup3_spi_apps_clk.c, ""),
4926 CLK_LOOKUP("core_clk", gcc_blsp1_qup4_i2c_apps_clk.c, ""),
4927 CLK_LOOKUP("core_clk", gcc_blsp1_qup4_spi_apps_clk.c, ""),
4928 CLK_LOOKUP("core_clk", gcc_blsp1_qup5_i2c_apps_clk.c, ""),
4929 CLK_LOOKUP("core_clk", gcc_blsp1_qup5_spi_apps_clk.c, ""),
4930 CLK_LOOKUP("core_clk", gcc_blsp1_qup6_i2c_apps_clk.c, ""),
4931 CLK_LOOKUP("core_clk", gcc_blsp1_qup6_spi_apps_clk.c, ""),
4932 CLK_LOOKUP("core_clk", gcc_blsp1_uart1_apps_clk.c, ""),
Stepan Moskovchenko5269b602012-08-08 17:57:09 -07004933 CLK_LOOKUP("core_clk", gcc_blsp1_uart2_apps_clk.c, "f991e000.serial"),
Stepan Moskovchenkof97dede72012-08-08 17:40:44 -07004934 CLK_LOOKUP("core_clk", gcc_blsp1_uart3_apps_clk.c, "f991f000.serial"),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004935 CLK_LOOKUP("core_clk", gcc_blsp1_uart4_apps_clk.c, ""),
4936 CLK_LOOKUP("core_clk", gcc_blsp1_uart5_apps_clk.c, ""),
4937 CLK_LOOKUP("core_clk", gcc_blsp1_uart6_apps_clk.c, ""),
4938
Sagar Dharia8a73da92012-08-11 16:41:25 -06004939 CLK_LOOKUP("iface_clk", gcc_blsp2_ahb_clk.c, "f9967000.i2c"),
Sagar Dhariae0bb6502012-08-10 20:25:51 -06004940 CLK_LOOKUP("iface_clk", gcc_blsp2_ahb_clk.c, "f9966000.spi"),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004941 CLK_LOOKUP("iface_clk", gcc_blsp2_ahb_clk.c, "f995e000.serial"),
Saket Saurabhf34322b2013-01-15 11:57:25 +05304942 CLK_LOOKUP("iface_clk", gcc_blsp2_ahb_clk.c, "f995d000.uart"),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004943 CLK_LOOKUP("core_clk", gcc_blsp2_qup1_i2c_apps_clk.c, ""),
4944 CLK_LOOKUP("core_clk", gcc_blsp2_qup1_spi_apps_clk.c, ""),
4945 CLK_LOOKUP("core_clk", gcc_blsp2_qup2_i2c_apps_clk.c, ""),
4946 CLK_LOOKUP("core_clk", gcc_blsp2_qup2_spi_apps_clk.c, ""),
Vikram Mulukutla82da88d2012-05-04 11:24:03 -07004947 CLK_LOOKUP("core_clk", gcc_blsp2_qup3_i2c_apps_clk.c, ""),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004948 CLK_LOOKUP("core_clk", gcc_blsp2_qup3_spi_apps_clk.c, ""),
Sagar Dharia8a73da92012-08-11 16:41:25 -06004949 CLK_LOOKUP("core_clk", gcc_blsp2_qup4_i2c_apps_clk.c, ""),
Sagar Dharia8a73da92012-08-11 16:41:25 -06004950 CLK_LOOKUP("core_clk", gcc_blsp2_qup5_i2c_apps_clk.c, "f9967000.i2c"),
Sagar Dhariae0bb6502012-08-10 20:25:51 -06004951 CLK_LOOKUP("core_clk", gcc_blsp2_qup4_spi_apps_clk.c, "f9966000.spi"),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004952 CLK_LOOKUP("core_clk", gcc_blsp2_qup5_spi_apps_clk.c, ""),
4953 CLK_LOOKUP("core_clk", gcc_blsp2_qup6_i2c_apps_clk.c, ""),
4954 CLK_LOOKUP("core_clk", gcc_blsp2_qup6_spi_apps_clk.c, ""),
Saket Saurabhf34322b2013-01-15 11:57:25 +05304955 CLK_LOOKUP("core_clk", gcc_blsp2_uart1_apps_clk.c, "f995d000.uart"),
Vikram Mulukutla82da88d2012-05-04 11:24:03 -07004956 CLK_LOOKUP("core_clk", gcc_blsp2_uart2_apps_clk.c, "f995e000.serial"),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004957 CLK_LOOKUP("core_clk", gcc_blsp2_uart3_apps_clk.c, ""),
4958 CLK_LOOKUP("core_clk", gcc_blsp2_uart4_apps_clk.c, ""),
4959 CLK_LOOKUP("core_clk", gcc_blsp2_uart5_apps_clk.c, ""),
4960 CLK_LOOKUP("core_clk", gcc_blsp2_uart6_apps_clk.c, ""),
4961
Vikram Mulukutla3f580f82012-09-04 15:22:42 -07004962 CLK_LOOKUP("core_clk_src", ce1_clk_src.c, ""),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004963 CLK_LOOKUP("core_clk", gcc_ce1_clk.c, ""),
4964 CLK_LOOKUP("core_clk", gcc_ce2_clk.c, ""),
4965 CLK_LOOKUP("iface_clk", gcc_ce1_ahb_clk.c, ""),
4966 CLK_LOOKUP("iface_clk", gcc_ce2_ahb_clk.c, ""),
4967 CLK_LOOKUP("bus_clk", gcc_ce1_axi_clk.c, ""),
4968 CLK_LOOKUP("bus_clk", gcc_ce2_axi_clk.c, ""),
4969
Mona Hossainb43e94b2012-05-07 08:52:06 -07004970 CLK_LOOKUP("core_clk", gcc_ce2_clk.c, "qcedev.0"),
4971 CLK_LOOKUP("iface_clk", gcc_ce2_ahb_clk.c, "qcedev.0"),
4972 CLK_LOOKUP("bus_clk", gcc_ce2_axi_clk.c, "qcedev.0"),
4973 CLK_LOOKUP("core_clk_src", ce2_clk_src.c, "qcedev.0"),
4974
4975 CLK_LOOKUP("core_clk", gcc_ce2_clk.c, "qcrypto.0"),
4976 CLK_LOOKUP("iface_clk", gcc_ce2_ahb_clk.c, "qcrypto.0"),
4977 CLK_LOOKUP("bus_clk", gcc_ce2_axi_clk.c, "qcrypto.0"),
4978 CLK_LOOKUP("core_clk_src", ce2_clk_src.c, "qcrypto.0"),
4979
Ramesh Masavarapuff377032012-09-14 12:11:32 -07004980 CLK_LOOKUP("core_clk", gcc_ce1_clk.c, "qseecom"),
4981 CLK_LOOKUP("iface_clk", gcc_ce1_ahb_clk.c, "qseecom"),
4982 CLK_LOOKUP("bus_clk", gcc_ce1_axi_clk.c, "qseecom"),
4983 CLK_LOOKUP("core_clk_src", ce1_clk_src.c, "qseecom"),
4984
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004985 CLK_LOOKUP("core_clk", gcc_gp1_clk.c, ""),
4986 CLK_LOOKUP("core_clk", gcc_gp2_clk.c, ""),
4987 CLK_LOOKUP("core_clk", gcc_gp3_clk.c, ""),
4988
4989 CLK_LOOKUP("core_clk", gcc_pdm2_clk.c, ""),
4990 CLK_LOOKUP("iface_clk", gcc_pdm_ahb_clk.c, ""),
4991 CLK_LOOKUP("iface_clk", gcc_prng_ahb_clk.c, ""),
4992
4993 CLK_LOOKUP("iface_clk", gcc_sdcc1_ahb_clk.c, "msm_sdcc.1"),
4994 CLK_LOOKUP("core_clk", gcc_sdcc1_apps_clk.c, "msm_sdcc.1"),
4995 CLK_LOOKUP("iface_clk", gcc_sdcc2_ahb_clk.c, "msm_sdcc.2"),
4996 CLK_LOOKUP("core_clk", gcc_sdcc2_apps_clk.c, "msm_sdcc.2"),
4997 CLK_LOOKUP("iface_clk", gcc_sdcc3_ahb_clk.c, "msm_sdcc.3"),
4998 CLK_LOOKUP("core_clk", gcc_sdcc3_apps_clk.c, "msm_sdcc.3"),
4999 CLK_LOOKUP("iface_clk", gcc_sdcc4_ahb_clk.c, "msm_sdcc.4"),
5000 CLK_LOOKUP("core_clk", gcc_sdcc4_apps_clk.c, "msm_sdcc.4"),
5001
Liron Kuch59339922013-01-01 18:29:47 +02005002 CLK_LOOKUP("iface_clk", gcc_tsif_ahb_clk.c, "f99d8000.msm_tspp"),
5003 CLK_LOOKUP("ref_clk", gcc_tsif_ref_clk.c, "f99d8000.msm_tspp"),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005004
Manu Gautam1fd82ac2012-08-22 10:27:36 -07005005 CLK_LOOKUP("mem_clk", gcc_usb30_master_clk.c, "usb_bam"),
5006 CLK_LOOKUP("mem_iface_clk", gcc_sys_noc_usb3_axi_clk.c, "usb_bam"),
Manu Gautam51be9712012-06-06 14:54:52 +05305007 CLK_LOOKUP("core_clk", gcc_usb30_master_clk.c, "msm_dwc3"),
5008 CLK_LOOKUP("utmi_clk", gcc_usb30_mock_utmi_clk.c, "msm_dwc3"),
Vikram Mulukutla3b98a6d2012-08-15 20:35:25 -07005009 CLK_LOOKUP("iface_clk", gcc_sys_noc_usb3_axi_clk.c, "msm_dwc3"),
Gagan Macf095ded2012-10-16 16:37:39 -06005010 CLK_LOOKUP("iface_clk", gcc_sys_noc_usb3_axi_clk.c, "msm_usb3"),
Vikram Mulukutla3b98a6d2012-08-15 20:35:25 -07005011 CLK_LOOKUP("sleep_clk", gcc_usb30_sleep_clk.c, "msm_dwc3"),
5012 CLK_LOOKUP("sleep_a_clk", gcc_usb2a_phy_sleep_clk.c, "msm_dwc3"),
5013 CLK_LOOKUP("sleep_b_clk", gcc_usb2b_phy_sleep_clk.c, "msm_dwc3"),
Vikram Mulukutla02ea7112012-08-29 12:06:11 -07005014 CLK_LOOKUP("ref_clk", diff_clk.c, "msm_dwc3"),
Manu Gautam51be9712012-06-06 14:54:52 +05305015 CLK_LOOKUP("iface_clk", gcc_usb_hs_ahb_clk.c, "msm_otg"),
5016 CLK_LOOKUP("core_clk", gcc_usb_hs_system_clk.c, "msm_otg"),
5017 CLK_LOOKUP("iface_clk", gcc_usb_hsic_ahb_clk.c, "msm_hsic_host"),
5018 CLK_LOOKUP("phy_clk", gcc_usb_hsic_clk.c, "msm_hsic_host"),
5019 CLK_LOOKUP("cal_clk", gcc_usb_hsic_io_cal_clk.c, "msm_hsic_host"),
5020 CLK_LOOKUP("core_clk", gcc_usb_hsic_system_clk.c, "msm_hsic_host"),
Vikram Mulukutla8cb2bb52012-11-14 11:23:49 -08005021 CLK_LOOKUP("ref_clk", div_clk2.c, "msm_smsc_hub"),
Vijayavardhan Vennapusa1f5da0b2013-01-08 20:03:57 +05305022 CLK_LOOKUP("iface_clk", gcc_usb_hs_ahb_clk.c, "msm_ehci_host"),
5023 CLK_LOOKUP("core_clk", gcc_usb_hs_system_clk.c, "msm_ehci_host"),
5024 CLK_LOOKUP("sleep_clk", gcc_usb2b_phy_sleep_clk.c, "msm_ehci_host"),
Amy Maloche527acc42012-12-07 18:40:54 -08005025 CLK_LOOKUP("pwm_clk", div_clk2.c, "0-0048"),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005026
5027 /* Multimedia clocks */
5028 CLK_LOOKUP("bus_clk_src", axi_clk_src.c, ""),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005029 CLK_LOOKUP("bus_clk", mmss_mmssnoc_axi_clk.c, ""),
Vikram Mulukutlabc59ee82012-11-07 18:22:36 -08005030 CLK_LOOKUP("bus_clk", mmssnoc_ahb_clk.c, ""),
Asaf Penso6b5251b2012-10-11 12:27:03 -07005031 CLK_LOOKUP("core_clk", mdss_edpaux_clk.c, "fd923400.qcom,mdss_edp"),
5032 CLK_LOOKUP("pixel_clk", mdss_edppixel_clk.c, "fd923400.qcom,mdss_edp"),
5033 CLK_LOOKUP("link_clk", mdss_edplink_clk.c, "fd923400.qcom,mdss_edp"),
Chandan Uddaraju19203fa2012-07-31 00:28:02 -07005034 CLK_LOOKUP("byte_clk", mdss_byte0_clk.c, "fd922800.qcom,mdss_dsi"),
Chandan Uddarajufcd5ef42012-12-11 10:36:39 -08005035 CLK_LOOKUP("byte_clk", mdss_byte1_clk.c, "fd922e00.qcom,mdss_dsi"),
Chandan Uddaraju19203fa2012-07-31 00:28:02 -07005036 CLK_LOOKUP("core_clk", mdss_esc0_clk.c, "fd922800.qcom,mdss_dsi"),
Chandan Uddarajufcd5ef42012-12-11 10:36:39 -08005037 CLK_LOOKUP("core_clk", mdss_esc1_clk.c, "fd922e00.qcom,mdss_dsi"),
Chandan Uddaraju09adf322012-08-16 02:55:23 -07005038 CLK_LOOKUP("pixel_clk", mdss_pclk0_clk.c, "fd922800.qcom,mdss_dsi"),
Chandan Uddarajufcd5ef42012-12-11 10:36:39 -08005039 CLK_LOOKUP("pixel_clk", mdss_pclk1_clk.c, "fd922e00.qcom,mdss_dsi"),
Ujwal Patel9faae9a2012-09-10 19:00:02 -07005040 CLK_LOOKUP("iface_clk", mdss_ahb_clk.c, "fd922100.qcom,hdmi_tx"),
5041 CLK_LOOKUP("alt_iface_clk", mdss_hdmi_ahb_clk.c,
5042 "fd922100.qcom,hdmi_tx"),
Ujwal Patel7232cde2012-08-13 22:50:13 -07005043 CLK_LOOKUP("core_clk", mdss_hdmi_clk.c, "fd922100.qcom,hdmi_tx"),
5044 CLK_LOOKUP("extp_clk", mdss_extpclk_clk.c, "fd922100.qcom,hdmi_tx"),
Adrian Salido-Moreno5ef3ac02012-05-14 18:40:47 -07005045 CLK_LOOKUP("core_clk", mdss_mdp_clk.c, "mdp.0"),
5046 CLK_LOOKUP("lut_clk", mdss_mdp_lut_clk.c, "mdp.0"),
5047 CLK_LOOKUP("core_clk_src", mdp_clk_src.c, "mdp.0"),
5048 CLK_LOOKUP("vsync_clk", mdss_vsync_clk.c, "mdp.0"),
Kevin Chanb4b5f862012-08-23 14:34:33 -07005049
5050 /* MM sensor clocks */
Sreesudhan Ramakrish Ramkumar9f2ea272012-08-28 18:31:25 -07005051 CLK_LOOKUP("cam_src_clk", mclk0_clk_src.c, "6e.qcom,camera"),
Sreesudhan Ramakrish Ramkumar39074612012-10-11 20:48:51 -07005052 CLK_LOOKUP("cam_src_clk", mclk2_clk_src.c, "6c.qcom,camera"),
Sreesudhan Ramakrish Ramkumar6be27812012-09-19 16:42:06 -07005053 CLK_LOOKUP("cam_src_clk", mclk1_clk_src.c, "90.qcom,camera"),
Sreesudhan Ramakrish Ramkumar9f2ea272012-08-28 18:31:25 -07005054 CLK_LOOKUP("cam_clk", camss_mclk0_clk.c, "6e.qcom,camera"),
Sreesudhan Ramakrish Ramkumar39074612012-10-11 20:48:51 -07005055 CLK_LOOKUP("cam_clk", camss_mclk2_clk.c, "6c.qcom,camera"),
Sreesudhan Ramakrish Ramkumar6be27812012-09-19 16:42:06 -07005056 CLK_LOOKUP("cam_clk", camss_mclk1_clk.c, "90.qcom,camera"),
Kevin Chanb4b5f862012-08-23 14:34:33 -07005057 CLK_LOOKUP("cam_clk", camss_mclk1_clk.c, ""),
5058 CLK_LOOKUP("cam_clk", camss_mclk2_clk.c, ""),
5059 CLK_LOOKUP("cam_clk", camss_mclk3_clk.c, ""),
5060 CLK_LOOKUP("cam_gp0_src_clk", mmss_gp0_clk_src.c, ""),
5061 CLK_LOOKUP("cam_gp1_src_clk", mmss_gp1_clk_src.c, ""),
5062 CLK_LOOKUP("cam_gp0_clk", camss_gp0_clk.c, ""),
5063 CLK_LOOKUP("cam_gp1_clk", camss_gp1_clk.c, ""),
5064 /* CCI clocks */
5065 CLK_LOOKUP("camss_top_ahb_clk", camss_top_ahb_clk.c,
5066 "fda0c000.qcom,cci"),
5067 CLK_LOOKUP("cci_ahb_clk", camss_cci_cci_ahb_clk.c, "fda0c000.qcom,cci"),
5068 CLK_LOOKUP("cci_src_clk", cci_clk_src.c, "fda0c000.qcom,cci"),
5069 CLK_LOOKUP("cci_clk", camss_cci_cci_clk.c, "fda0c000.qcom,cci"),
5070 /* CSIPHY clocks */
Shuzhen Wang65765c22013-01-08 14:37:15 -08005071 CLK_LOOKUP("camss_top_ahb_clk", camss_top_ahb_clk.c,
5072 "fda0ac00.qcom,csiphy"),
Kevin Chanb4b5f862012-08-23 14:34:33 -07005073 CLK_LOOKUP("ispif_ahb_clk", camss_ispif_ahb_clk.c,
5074 "fda0ac00.qcom,csiphy"),
5075 CLK_LOOKUP("csiphy_timer_src_clk", csi0phytimer_clk_src.c,
5076 "fda0ac00.qcom,csiphy"),
5077 CLK_LOOKUP("csiphy_timer_clk", camss_phy0_csi0phytimer_clk.c,
5078 "fda0ac00.qcom,csiphy"),
Shuzhen Wang65765c22013-01-08 14:37:15 -08005079 CLK_LOOKUP("camss_top_ahb_clk", camss_top_ahb_clk.c,
5080 "fda0b000.qcom,csiphy"),
Kevin Chanb4b5f862012-08-23 14:34:33 -07005081 CLK_LOOKUP("ispif_ahb_clk", camss_ispif_ahb_clk.c,
5082 "fda0b000.qcom,csiphy"),
5083 CLK_LOOKUP("csiphy_timer_src_clk", csi1phytimer_clk_src.c,
5084 "fda0b000.qcom,csiphy"),
5085 CLK_LOOKUP("csiphy_timer_clk", camss_phy1_csi1phytimer_clk.c,
5086 "fda0b000.qcom,csiphy"),
Shuzhen Wang65765c22013-01-08 14:37:15 -08005087 CLK_LOOKUP("camss_top_ahb_clk", camss_top_ahb_clk.c,
5088 "fda0b400.qcom,csiphy"),
Kevin Chanb4b5f862012-08-23 14:34:33 -07005089 CLK_LOOKUP("ispif_ahb_clk", camss_ispif_ahb_clk.c,
5090 "fda0b400.qcom,csiphy"),
5091 CLK_LOOKUP("csiphy_timer_src_clk", csi2phytimer_clk_src.c,
5092 "fda0b400.qcom,csiphy"),
5093 CLK_LOOKUP("csiphy_timer_clk", camss_phy2_csi2phytimer_clk.c,
5094 "fda0b400.qcom,csiphy"),
5095 /* CSID clocks */
Shuzhen Wang65765c22013-01-08 14:37:15 -08005096 CLK_LOOKUP("camss_top_ahb_clk", camss_top_ahb_clk.c,
5097 "fda08000.qcom,csid"),
5098 CLK_LOOKUP("ispif_ahb_clk", camss_ispif_ahb_clk.c,
5099 "fda08000.qcom,csid"),
Sreesudhan Ramakrish Ramkumar4f9d27f2012-08-28 23:51:38 -07005100 CLK_LOOKUP("csi0_ahb_clk", camss_csi0_ahb_clk.c, "fda08000.qcom,csid"),
5101 CLK_LOOKUP("csi0_src_clk", csi0_clk_src.c, "fda08000.qcom,csid"),
5102 CLK_LOOKUP("csi0_phy_clk", camss_csi0phy_clk.c, "fda08000.qcom,csid"),
5103 CLK_LOOKUP("csi0_clk", camss_csi0_clk.c, "fda08000.qcom,csid"),
5104 CLK_LOOKUP("csi0_pix_clk", camss_csi0pix_clk.c, "fda08000.qcom,csid"),
5105 CLK_LOOKUP("csi0_rdi_clk", camss_csi0rdi_clk.c, "fda08000.qcom,csid"),
5106
Shuzhen Wang65765c22013-01-08 14:37:15 -08005107 CLK_LOOKUP("camss_top_ahb_clk", camss_top_ahb_clk.c,
5108 "fda08400.qcom,csid"),
5109 CLK_LOOKUP("ispif_ahb_clk", camss_ispif_ahb_clk.c,
5110 "fda08400.qcom,csid"),
Sreesudhan Ramakrish Ramkumar4f9d27f2012-08-28 23:51:38 -07005111 CLK_LOOKUP("csi0_ahb_clk", camss_csi0_ahb_clk.c, "fda08400.qcom,csid"),
5112 CLK_LOOKUP("csi1_ahb_clk", camss_csi1_ahb_clk.c, "fda08400.qcom,csid"),
5113 CLK_LOOKUP("csi0_src_clk", csi0_clk_src.c, "fda08400.qcom,csid"),
5114 CLK_LOOKUP("csi1_src_clk", csi1_clk_src.c, "fda08400.qcom,csid"),
5115 CLK_LOOKUP("csi0_phy_clk", camss_csi0phy_clk.c, "fda08400.qcom,csid"),
5116 CLK_LOOKUP("csi1_phy_clk", camss_csi1phy_clk.c, "fda08400.qcom,csid"),
5117 CLK_LOOKUP("csi0_clk", camss_csi0_clk.c, "fda08400.qcom,csid"),
5118 CLK_LOOKUP("csi1_clk", camss_csi1_clk.c, "fda08400.qcom,csid"),
5119 CLK_LOOKUP("csi0_pix_clk", camss_csi0pix_clk.c, "fda08400.qcom,csid"),
5120 CLK_LOOKUP("csi1_pix_clk", camss_csi1pix_clk.c, "fda08400.qcom,csid"),
5121 CLK_LOOKUP("csi0_rdi_clk", camss_csi0rdi_clk.c, "fda08400.qcom,csid"),
5122 CLK_LOOKUP("csi1_rdi_clk", camss_csi1rdi_clk.c, "fda08400.qcom,csid"),
5123
Shuzhen Wang65765c22013-01-08 14:37:15 -08005124 CLK_LOOKUP("camss_top_ahb_clk", camss_top_ahb_clk.c,
5125 "fda08800.qcom,csid"),
5126 CLK_LOOKUP("ispif_ahb_clk", camss_ispif_ahb_clk.c,
5127 "fda08800.qcom,csid"),
Sreesudhan Ramakrish Ramkumar4f9d27f2012-08-28 23:51:38 -07005128 CLK_LOOKUP("csi0_ahb_clk", camss_csi0_ahb_clk.c, "fda08800.qcom,csid"),
5129 CLK_LOOKUP("csi2_ahb_clk", camss_csi2_ahb_clk.c, "fda08800.qcom,csid"),
5130 CLK_LOOKUP("csi0_src_clk", csi0_clk_src.c, "fda08800.qcom,csid"),
5131 CLK_LOOKUP("csi2_src_clk", csi2_clk_src.c, "fda08800.qcom,csid"),
5132 CLK_LOOKUP("csi0_phy_clk", camss_csi0phy_clk.c, "fda08800.qcom,csid"),
5133 CLK_LOOKUP("csi2_phy_clk", camss_csi2phy_clk.c, "fda08800.qcom,csid"),
5134 CLK_LOOKUP("csi0_clk", camss_csi0_clk.c, "fda08800.qcom,csid"),
5135 CLK_LOOKUP("csi2_clk", camss_csi2_clk.c, "fda08800.qcom,csid"),
5136 CLK_LOOKUP("csi0_pix_clk", camss_csi0pix_clk.c, "fda08800.qcom,csid"),
5137 CLK_LOOKUP("csi2_pix_clk", camss_csi2pix_clk.c, "fda08800.qcom,csid"),
5138 CLK_LOOKUP("csi0_rdi_clk", camss_csi0rdi_clk.c, "fda08800.qcom,csid"),
5139 CLK_LOOKUP("csi2_rdi_clk", camss_csi2rdi_clk.c, "fda08800.qcom,csid"),
5140
Shuzhen Wang65765c22013-01-08 14:37:15 -08005141 CLK_LOOKUP("camss_top_ahb_clk", camss_top_ahb_clk.c,
5142 "fda08c00.qcom,csid"),
5143 CLK_LOOKUP("ispif_ahb_clk", camss_ispif_ahb_clk.c,
5144 "fda08c00.qcom,csid"),
Sreesudhan Ramakrish Ramkumar4f9d27f2012-08-28 23:51:38 -07005145 CLK_LOOKUP("csi0_ahb_clk", camss_csi0_ahb_clk.c, "fda08c00.qcom,csid"),
5146 CLK_LOOKUP("csi3_ahb_clk", camss_csi3_ahb_clk.c, "fda08c00.qcom,csid"),
5147 CLK_LOOKUP("csi0_src_clk", csi0_clk_src.c, "fda08c00.qcom,csid"),
5148 CLK_LOOKUP("csi3_src_clk", csi3_clk_src.c, "fda08c00.qcom,csid"),
5149 CLK_LOOKUP("csi0_phy_clk", camss_csi0phy_clk.c, "fda08c00.qcom,csid"),
5150 CLK_LOOKUP("csi3_phy_clk", camss_csi3phy_clk.c, "fda08c00.qcom,csid"),
5151 CLK_LOOKUP("csi0_clk", camss_csi0_clk.c, "fda08c00.qcom,csid"),
5152 CLK_LOOKUP("csi3_clk", camss_csi3_clk.c, "fda08c00.qcom,csid"),
5153 CLK_LOOKUP("csi0_pix_clk", camss_csi0pix_clk.c, "fda08c00.qcom,csid"),
5154 CLK_LOOKUP("csi3_pix_clk", camss_csi3pix_clk.c, "fda08c00.qcom,csid"),
5155 CLK_LOOKUP("csi0_rdi_clk", camss_csi0rdi_clk.c, "fda08c00.qcom,csid"),
5156 CLK_LOOKUP("csi3_rdi_clk", camss_csi3rdi_clk.c, "fda08c00.qcom,csid"),
5157
Kevin Chan1d5fd4a2013-01-11 14:08:14 -08005158 /* ISPIF clocks */
5159 CLK_LOOKUP("camss_vfe_vfe_clk", camss_vfe_vfe0_clk.c,
5160 "fda0a000.qcom,ispif"),
5161 CLK_LOOKUP("camss_csi_vfe_clk", camss_csi_vfe0_clk.c,
5162 "fda0a000.qcom,ispif"),
5163 CLK_LOOKUP("camss_vfe_vfe_clk1", camss_vfe_vfe1_clk.c,
5164 "fda0a000.qcom,ispif"),
5165 CLK_LOOKUP("camss_csi_vfe_clk1", camss_csi_vfe1_clk.c,
5166 "fda0a000.qcom,ispif"),
5167
Kevin Chanb4b5f862012-08-23 14:34:33 -07005168 /*VFE clocks*/
5169 CLK_LOOKUP("camss_top_ahb_clk", camss_top_ahb_clk.c,
5170 "fda10000.qcom,vfe"),
5171 CLK_LOOKUP("vfe_clk_src", vfe0_clk_src.c, "fda10000.qcom,vfe"),
5172 CLK_LOOKUP("camss_vfe_vfe_clk", camss_vfe_vfe0_clk.c,
5173 "fda10000.qcom,vfe"),
5174 CLK_LOOKUP("camss_csi_vfe_clk", camss_csi_vfe0_clk.c,
5175 "fda10000.qcom,vfe"),
5176 CLK_LOOKUP("iface_clk", camss_vfe_vfe_ahb_clk.c, "fda10000.qcom,vfe"),
5177 CLK_LOOKUP("bus_clk", camss_vfe_vfe_axi_clk.c, "fda10000.qcom,vfe"),
5178 CLK_LOOKUP("alt_bus_clk", camss_vfe_vfe_ocmemnoc_clk.c,
5179 "fda10000.qcom,vfe"),
5180 CLK_LOOKUP("camss_top_ahb_clk", camss_top_ahb_clk.c,
5181 "fda14000.qcom,vfe"),
5182 CLK_LOOKUP("vfe_clk_src", vfe1_clk_src.c, "fda14000.qcom,vfe"),
5183 CLK_LOOKUP("camss_vfe_vfe_clk", camss_vfe_vfe1_clk.c,
5184 "fda14000.qcom,vfe"),
5185 CLK_LOOKUP("camss_csi_vfe_clk", camss_csi_vfe1_clk.c,
5186 "fda14000.qcom,vfe"),
5187 CLK_LOOKUP("iface_clk", camss_vfe_vfe_ahb_clk.c, "fda14000.qcom,vfe"),
5188 CLK_LOOKUP("bus_clk", camss_vfe_vfe_axi_clk.c, "fda14000.qcom,vfe"),
5189 CLK_LOOKUP("alt_bus_clk", camss_vfe_vfe_ocmemnoc_clk.c,
5190 "fda14000.qcom,vfe"),
Ashwini Raoef0ff762012-08-28 16:36:45 -07005191 /*Jpeg Clocks*/
5192 CLK_LOOKUP("core_clk", camss_jpeg_jpeg0_clk.c, "fda1c000.qcom,jpeg"),
5193 CLK_LOOKUP("core_clk", camss_jpeg_jpeg1_clk.c, "fda20000.qcom,jpeg"),
5194 CLK_LOOKUP("core_clk", camss_jpeg_jpeg2_clk.c, "fda24000.qcom,jpeg"),
5195 CLK_LOOKUP("iface_clk", camss_jpeg_jpeg_ahb_clk.c,
5196 "fda1c000.qcom,jpeg"),
5197 CLK_LOOKUP("iface_clk", camss_jpeg_jpeg_ahb_clk.c,
5198 "fda20000.qcom,jpeg"),
5199 CLK_LOOKUP("iface_clk", camss_jpeg_jpeg_ahb_clk.c,
5200 "fda24000.qcom,jpeg"),
Sathish Ambleyd1b89ed2012-02-07 21:47:47 -08005201 CLK_LOOKUP("iface_clk", camss_jpeg_jpeg_ahb_clk.c,
5202 "fda64000.qcom,iommu"),
5203 CLK_LOOKUP("core_clk", camss_jpeg_jpeg_axi_clk.c,
5204 "fda64000.qcom,iommu"),
Olav Haugana2eee312012-12-04 12:52:02 -08005205 CLK_LOOKUP("alt_core_clk", camss_top_ahb_clk.c, "fda64000.qcom,iommu"),
Ashwini Raoef0ff762012-08-28 16:36:45 -07005206 CLK_LOOKUP("bus_clk0", camss_jpeg_jpeg_axi_clk.c, "fda1c000.qcom,jpeg"),
5207 CLK_LOOKUP("bus_clk0", camss_jpeg_jpeg_axi_clk.c, "fda20000.qcom,jpeg"),
5208 CLK_LOOKUP("bus_clk0", camss_jpeg_jpeg_axi_clk.c, "fda24000.qcom,jpeg"),
5209 CLK_LOOKUP("alt_bus_clk", camss_jpeg_jpeg_ocmemnoc_clk.c,
5210 "fda1c000.qcom,jpeg"),
5211 CLK_LOOKUP("alt_bus_clk", camss_jpeg_jpeg_ocmemnoc_clk.c,
5212 "fda20000.qcom,jpeg"),
5213 CLK_LOOKUP("alt_bus_clk", camss_jpeg_jpeg_ocmemnoc_clk.c,
5214 "fda24000.qcom,jpeg"),
5215 CLK_LOOKUP("camss_top_ahb_clk", camss_top_ahb_clk.c,
5216 "fda1c000.qcom,jpeg"),
5217 CLK_LOOKUP("camss_top_ahb_clk", camss_top_ahb_clk.c,
5218 "fda20000.qcom,jpeg"),
5219 CLK_LOOKUP("camss_top_ahb_clk", camss_top_ahb_clk.c,
5220 "fda24000.qcom,jpeg"),
Sreesudhan Ramakrish Ramkumar9f79f602012-11-21 18:26:40 -08005221 CLK_LOOKUP("micro_iface_clk", camss_micro_ahb_clk.c,
5222 "fda04000.qcom,cpp"),
5223 CLK_LOOKUP("camss_top_ahb_clk", camss_top_ahb_clk.c,
5224 "fda04000.qcom,cpp"),
5225 CLK_LOOKUP("cpp_iface_clk", camss_vfe_cpp_ahb_clk.c,
5226 "fda04000.qcom,cpp"),
5227 CLK_LOOKUP("cpp_core_clk", camss_vfe_cpp_clk.c, "fda04000.qcom,cpp"),
5228 CLK_LOOKUP("cpp_bus_clk", camss_vfe_vfe_axi_clk.c, "fda04000.qcom,cpp"),
5229 CLK_LOOKUP("vfe_clk_src", vfe0_clk_src.c, "fda04000.qcom,cpp"),
5230 CLK_LOOKUP("camss_vfe_vfe_clk", camss_vfe_vfe0_clk.c,
5231 "fda04000.qcom,cpp"),
5232 CLK_LOOKUP("iface_clk", camss_vfe_vfe_ahb_clk.c, "fda04000.qcom,cpp"),
5233
5234
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005235 CLK_LOOKUP("iface_clk", camss_micro_ahb_clk.c, ""),
Olav Haugana2eee312012-12-04 12:52:02 -08005236 CLK_LOOKUP("iface_clk", camss_vfe_vfe_ahb_clk.c, "fda44000.qcom,iommu"),
5237 CLK_LOOKUP("core_clk", camss_vfe_vfe_axi_clk.c, "fda44000.qcom,iommu"),
5238 CLK_LOOKUP("alt_core_clk", camss_top_ahb_clk.c, "fda44000.qcom,iommu"),
Adrian Salido-Moreno5ef3ac02012-05-14 18:40:47 -07005239 CLK_LOOKUP("iface_clk", mdss_ahb_clk.c, "mdp.0"),
Chandan Uddaraju09adf322012-08-16 02:55:23 -07005240 CLK_LOOKUP("iface_clk", mdss_ahb_clk.c, "mdss_dsi_clk_ctrl"),
Asaf Penso6b5251b2012-10-11 12:27:03 -07005241 CLK_LOOKUP("iface_clk", mdss_ahb_clk.c, "fd923400.qcom,mdss_edp"),
Sathish Ambleyd1b89ed2012-02-07 21:47:47 -08005242 CLK_LOOKUP("iface_clk", mdss_ahb_clk.c, "fd928000.qcom,iommu"),
5243 CLK_LOOKUP("core_clk", mdss_axi_clk.c, "fd928000.qcom,iommu"),
Adrian Salido-Moreno5ef3ac02012-05-14 18:40:47 -07005244 CLK_LOOKUP("bus_clk", mdss_axi_clk.c, "mdp.0"),
Vikram Mulukutlae3b03062012-05-16 12:07:08 -07005245 CLK_LOOKUP("core_clk", oxili_gfx3d_clk.c, "fdb00000.qcom,kgsl-3d0"),
5246 CLK_LOOKUP("iface_clk", oxilicx_ahb_clk.c, "fdb00000.qcom,kgsl-3d0"),
Vikram Mulukutla274b2d92012-07-13 15:53:04 -07005247 CLK_LOOKUP("mem_iface_clk", ocmemcx_ocmemnoc_clk.c,
5248 "fdb00000.qcom,kgsl-3d0"),
Vikram Mulukutlae3b03062012-05-16 12:07:08 -07005249 CLK_LOOKUP("core_clk", oxilicx_axi_clk.c, "fdb10000.qcom,iommu"),
5250 CLK_LOOKUP("iface_clk", oxilicx_ahb_clk.c, "fdb10000.qcom,iommu"),
Stepan Moskovchenkob26b8ca2012-07-24 19:42:44 -07005251 CLK_LOOKUP("alt_core_clk", oxili_gfx3d_clk.c, "fdb10000.qcom,iommu"),
Naveen Ramarajbea2d5d2012-08-15 17:26:43 -07005252 CLK_LOOKUP("core_clk", ocmemgx_core_clk.c, "fdd00000.qcom,ocmem"),
5253 CLK_LOOKUP("iface_clk", ocmemcx_ocmemnoc_clk.c, "fdd00000.qcom,ocmem"),
Sathish Ambleyd1b89ed2012-02-07 21:47:47 -08005254 CLK_LOOKUP("iface_clk", venus0_ahb_clk.c, "fdc84000.qcom,iommu"),
Stepan Moskovchenkob26b8ca2012-07-24 19:42:44 -07005255 CLK_LOOKUP("alt_core_clk", venus0_vcodec0_clk.c, "fdc84000.qcom,iommu"),
Sathish Ambleyd1b89ed2012-02-07 21:47:47 -08005256 CLK_LOOKUP("core_clk", venus0_axi_clk.c, "fdc84000.qcom,iommu"),
5257 CLK_LOOKUP("bus_clk", venus0_axi_clk.c, ""),
Tianyi Gou828798d2012-05-02 21:12:38 -07005258 CLK_LOOKUP("src_clk", vcodec0_clk_src.c, "fdce0000.qcom,venus"),
5259 CLK_LOOKUP("core_clk", venus0_vcodec0_clk.c, "fdce0000.qcom,venus"),
5260 CLK_LOOKUP("iface_clk", venus0_ahb_clk.c, "fdce0000.qcom,venus"),
5261 CLK_LOOKUP("bus_clk", venus0_axi_clk.c, "fdce0000.qcom,venus"),
5262 CLK_LOOKUP("mem_clk", venus0_ocmemnoc_clk.c, "fdce0000.qcom,venus"),
Vinay Kalia40680aa2012-07-23 12:45:39 -07005263 CLK_LOOKUP("core_clk", venus0_vcodec0_clk.c, "fdc00000.qcom,vidc"),
5264 CLK_LOOKUP("iface_clk", venus0_ahb_clk.c, "fdc00000.qcom,vidc"),
5265 CLK_LOOKUP("bus_clk", venus0_axi_clk.c, "fdc00000.qcom,vidc"),
5266 CLK_LOOKUP("mem_clk", venus0_ocmemnoc_clk.c, "fdc00000.qcom,vidc"),
Tianyi Gou828798d2012-05-02 21:12:38 -07005267
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005268
5269 /* LPASS clocks */
Tianyi Gou7fea5da2012-12-06 15:56:31 -08005270 CLK_LOOKUP("bus_clk", gcc_mss_q6_bimc_axi_clk.c, "fc880000.qcom,mss"),
5271 CLK_LOOKUP("iface_clk", gcc_mss_cfg_ahb_clk.c, "fc880000.qcom,mss"),
5272 CLK_LOOKUP("mem_clk", gcc_boot_rom_ahb_clk.c, "fc880000.qcom,mss"),
Vikram Mulukutla31926eb2012-08-12 19:58:08 -07005273
Tianyi Gou7fea5da2012-12-06 15:56:31 -08005274 CLK_LOOKUP("core_clk", q6ss_xo_clk.c, "fe200000.qcom,lpass"),
5275 CLK_LOOKUP("bus_clk", gcc_lpass_q6_axi_clk.c, "fe200000.qcom,lpass"),
5276 CLK_LOOKUP("iface_clk", q6ss_ahb_lfabif_clk.c, "fe200000.qcom,lpass"),
5277 CLK_LOOKUP("reg_clk", q6ss_ahbm_clk.c, "fe200000.qcom,lpass"),
Hariprasad Dhalinarasimhade991f02012-05-31 13:15:51 -07005278 CLK_LOOKUP("core_clk", gcc_prng_ahb_clk.c, "msm_rng"),
Vikram Mulukutlaa967db42012-05-10 16:20:40 -07005279
Vikram Mulukutlab0ad9f32012-07-03 12:57:24 -07005280 CLK_LOOKUP("dfab_clk", pnoc_sps_clk.c, "msm_sps"),
Vikram Mulukutlad08a1522012-05-24 15:24:01 -07005281
5282 CLK_LOOKUP("bus_clk", snoc_clk.c, ""),
5283 CLK_LOOKUP("bus_clk", pnoc_clk.c, ""),
5284 CLK_LOOKUP("bus_clk", cnoc_clk.c, ""),
5285 CLK_LOOKUP("mem_clk", bimc_clk.c, ""),
5286 CLK_LOOKUP("mem_clk", ocmemgx_clk.c, ""),
5287 CLK_LOOKUP("bus_clk", snoc_a_clk.c, ""),
5288 CLK_LOOKUP("bus_clk", pnoc_a_clk.c, ""),
5289 CLK_LOOKUP("bus_clk", cnoc_a_clk.c, ""),
5290 CLK_LOOKUP("mem_clk", bimc_a_clk.c, ""),
5291 CLK_LOOKUP("mem_clk", ocmemgx_a_clk.c, ""),
5292
5293 CLK_LOOKUP("bus_clk", cnoc_msmbus_clk.c, "msm_config_noc"),
5294 CLK_LOOKUP("bus_a_clk", cnoc_msmbus_a_clk.c, "msm_config_noc"),
5295 CLK_LOOKUP("bus_clk", snoc_msmbus_clk.c, "msm_sys_noc"),
5296 CLK_LOOKUP("bus_a_clk", snoc_msmbus_a_clk.c, "msm_sys_noc"),
5297 CLK_LOOKUP("bus_clk", pnoc_msmbus_clk.c, "msm_periph_noc"),
5298 CLK_LOOKUP("bus_a_clk", pnoc_msmbus_a_clk.c, "msm_periph_noc"),
5299 CLK_LOOKUP("mem_clk", bimc_msmbus_clk.c, "msm_bimc"),
5300 CLK_LOOKUP("mem_a_clk", bimc_msmbus_a_clk.c, "msm_bimc"),
5301 CLK_LOOKUP("mem_clk", bimc_acpu_a_clk.c, ""),
5302 CLK_LOOKUP("ocmem_clk", ocmemgx_msmbus_clk.c, "msm_bus"),
5303 CLK_LOOKUP("ocmem_a_clk", ocmemgx_msmbus_a_clk.c, "msm_bus"),
5304 CLK_LOOKUP("bus_clk", ocmemnoc_clk.c, "msm_ocmem_noc"),
5305 CLK_LOOKUP("bus_a_clk", ocmemnoc_clk.c, "msm_ocmem_noc"),
Vikram Mulukutlac15dac02012-08-09 13:31:08 -07005306 CLK_LOOKUP("bus_clk", mmss_s0_axi_clk.c, "msm_mmss_noc"),
5307 CLK_LOOKUP("bus_a_clk", mmss_s0_axi_clk.c, "msm_mmss_noc"),
Vikram Mulukutla274b2d92012-07-13 15:53:04 -07005308 CLK_LOOKUP("iface_clk", gcc_mmss_noc_cfg_ahb_clk.c, ""),
5309 CLK_LOOKUP("iface_clk", gcc_ocmem_noc_cfg_ahb_clk.c, ""),
Vikram Mulukutla0f63e002012-06-28 14:29:44 -07005310
Pratik Pateld8204a12013-02-07 18:36:55 -08005311 /* CoreSight clocks */
5312 CLK_LOOKUP("core_clk", qdss_clk.c, "fc322000.tmc"),
5313 CLK_LOOKUP("core_clk", qdss_clk.c, "fc318000.tpiu"),
5314 CLK_LOOKUP("core_clk", qdss_clk.c, "fc31c000.replicator"),
5315 CLK_LOOKUP("core_clk", qdss_clk.c, "fc307000.tmc"),
5316 CLK_LOOKUP("core_clk", qdss_clk.c, "fc31b000.funnel"),
5317 CLK_LOOKUP("core_clk", qdss_clk.c, "fc319000.funnel"),
5318 CLK_LOOKUP("core_clk", qdss_clk.c, "fc31a000.funnel"),
5319 CLK_LOOKUP("core_clk", qdss_clk.c, "fc345000.funnel"),
5320 CLK_LOOKUP("core_clk", qdss_clk.c, "fc364000.funnel"),
5321 CLK_LOOKUP("core_clk", qdss_clk.c, "fc321000.stm"),
5322 CLK_LOOKUP("core_clk", qdss_clk.c, "fc33c000.etm"),
5323 CLK_LOOKUP("core_clk", qdss_clk.c, "fc33d000.etm"),
5324 CLK_LOOKUP("core_clk", qdss_clk.c, "fc33e000.etm"),
5325 CLK_LOOKUP("core_clk", qdss_clk.c, "fc33f000.etm"),
Pratik Patel6bcbe7b2013-02-08 11:54:28 -08005326 CLK_LOOKUP("core_clk", qdss_clk.c, "fc308000.cti"),
5327 CLK_LOOKUP("core_clk", qdss_clk.c, "fc309000.cti"),
5328 CLK_LOOKUP("core_clk", qdss_clk.c, "fc30a000.cti"),
5329 CLK_LOOKUP("core_clk", qdss_clk.c, "fc30b000.cti"),
5330 CLK_LOOKUP("core_clk", qdss_clk.c, "fc30c000.cti"),
5331 CLK_LOOKUP("core_clk", qdss_clk.c, "fc30d000.cti"),
5332 CLK_LOOKUP("core_clk", qdss_clk.c, "fc30e000.cti"),
5333 CLK_LOOKUP("core_clk", qdss_clk.c, "fc30f000.cti"),
5334 CLK_LOOKUP("core_clk", qdss_clk.c, "fc310000.cti"),
5335 CLK_LOOKUP("core_clk", qdss_clk.c, "fc340000.cti"),
5336 CLK_LOOKUP("core_clk", qdss_clk.c, "fc341000.cti"),
5337 CLK_LOOKUP("core_clk", qdss_clk.c, "fc342000.cti"),
5338 CLK_LOOKUP("core_clk", qdss_clk.c, "fc343000.cti"),
5339 CLK_LOOKUP("core_clk", qdss_clk.c, "fc344000.cti"),
Vikram Mulukutla0f63e002012-06-28 14:29:44 -07005340
Pratik Pateld8204a12013-02-07 18:36:55 -08005341 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc322000.tmc"),
5342 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc318000.tpiu"),
5343 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc31c000.replicator"),
5344 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc307000.tmc"),
5345 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc31b000.funnel"),
5346 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc319000.funnel"),
5347 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc31a000.funnel"),
5348 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc345000.funnel"),
5349 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc364000.funnel"),
5350 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc321000.stm"),
5351 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc33c000.etm"),
5352 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc33d000.etm"),
5353 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc33e000.etm"),
5354 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc33f000.etm"),
Pratik Patel6bcbe7b2013-02-08 11:54:28 -08005355 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc308000.cti"),
5356 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc309000.cti"),
5357 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc30a000.cti"),
5358 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc30b000.cti"),
5359 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc30c000.cti"),
5360 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc30d000.cti"),
5361 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc30e000.cti"),
5362 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc30f000.cti"),
5363 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc310000.cti"),
5364 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc340000.cti"),
5365 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc341000.cti"),
5366 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc342000.cti"),
5367 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc343000.cti"),
5368 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc344000.cti"),
Matt Wagantalledf2fad2012-08-06 16:11:46 -07005369
5370 CLK_LOOKUP("l2_m_clk", l2_m_clk, ""),
5371 CLK_LOOKUP("krait0_m_clk", krait0_m_clk, ""),
5372 CLK_LOOKUP("krait1_m_clk", krait1_m_clk, ""),
5373 CLK_LOOKUP("krait2_m_clk", krait2_m_clk, ""),
5374 CLK_LOOKUP("krait3_m_clk", krait3_m_clk, ""),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005375};
5376
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005377static struct pll_config_regs mmpll0_regs __initdata = {
5378 .l_reg = (void __iomem *)MMPLL0_L_REG,
5379 .m_reg = (void __iomem *)MMPLL0_M_REG,
5380 .n_reg = (void __iomem *)MMPLL0_N_REG,
5381 .config_reg = (void __iomem *)MMPLL0_USER_CTL_REG,
5382 .mode_reg = (void __iomem *)MMPLL0_MODE_REG,
5383 .base = &virt_bases[MMSS_BASE],
5384};
5385
5386/* MMPLL0 at 800 MHz, main output enabled. */
5387static struct pll_config mmpll0_config __initdata = {
5388 .l = 0x29,
5389 .m = 0x2,
5390 .n = 0x3,
5391 .vco_val = 0x0,
5392 .vco_mask = BM(21, 20),
5393 .pre_div_val = 0x0,
5394 .pre_div_mask = BM(14, 12),
5395 .post_div_val = 0x0,
5396 .post_div_mask = BM(9, 8),
5397 .mn_ena_val = BIT(24),
5398 .mn_ena_mask = BIT(24),
5399 .main_output_val = BIT(0),
5400 .main_output_mask = BIT(0),
5401};
5402
5403static struct pll_config_regs mmpll1_regs __initdata = {
5404 .l_reg = (void __iomem *)MMPLL1_L_REG,
5405 .m_reg = (void __iomem *)MMPLL1_M_REG,
5406 .n_reg = (void __iomem *)MMPLL1_N_REG,
5407 .config_reg = (void __iomem *)MMPLL1_USER_CTL_REG,
5408 .mode_reg = (void __iomem *)MMPLL1_MODE_REG,
5409 .base = &virt_bases[MMSS_BASE],
5410};
5411
Vikram Mulukutla293c4692013-01-03 15:09:47 -08005412/* MMPLL1 at 846 MHz, main output enabled. */
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005413static struct pll_config mmpll1_config __initdata = {
Vikram Mulukutlad16a8f12012-07-20 13:33:45 -07005414 .l = 0x2C,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005415 .m = 0x1,
Vikram Mulukutlad16a8f12012-07-20 13:33:45 -07005416 .n = 0x10,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005417 .vco_val = 0x0,
5418 .vco_mask = BM(21, 20),
5419 .pre_div_val = 0x0,
5420 .pre_div_mask = BM(14, 12),
5421 .post_div_val = 0x0,
5422 .post_div_mask = BM(9, 8),
5423 .mn_ena_val = BIT(24),
5424 .mn_ena_mask = BIT(24),
5425 .main_output_val = BIT(0),
5426 .main_output_mask = BIT(0),
5427};
5428
Vikram Mulukutla293c4692013-01-03 15:09:47 -08005429/* MMPLL1 at 1167 MHz, main output enabled. */
5430static struct pll_config mmpll1_v2_config __initdata = {
5431 .l = 60,
5432 .m = 25,
5433 .n = 32,
5434 .vco_val = 0x0,
5435 .vco_mask = BM(21, 20),
5436 .pre_div_val = 0x0,
5437 .pre_div_mask = BM(14, 12),
5438 .post_div_val = 0x0,
5439 .post_div_mask = BM(9, 8),
5440 .mn_ena_val = BIT(24),
5441 .mn_ena_mask = BIT(24),
5442 .main_output_val = BIT(0),
5443 .main_output_mask = BIT(0),
5444};
5445
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005446static struct pll_config_regs mmpll3_regs __initdata = {
5447 .l_reg = (void __iomem *)MMPLL3_L_REG,
5448 .m_reg = (void __iomem *)MMPLL3_M_REG,
5449 .n_reg = (void __iomem *)MMPLL3_N_REG,
5450 .config_reg = (void __iomem *)MMPLL3_USER_CTL_REG,
5451 .mode_reg = (void __iomem *)MMPLL3_MODE_REG,
5452 .base = &virt_bases[MMSS_BASE],
5453};
5454
5455/* MMPLL3 at 820 MHz, main output enabled. */
5456static struct pll_config mmpll3_config __initdata = {
5457 .l = 0x2A,
5458 .m = 0x11,
5459 .n = 0x18,
5460 .vco_val = 0x0,
5461 .vco_mask = BM(21, 20),
5462 .pre_div_val = 0x0,
5463 .pre_div_mask = BM(14, 12),
5464 .post_div_val = 0x0,
5465 .post_div_mask = BM(9, 8),
5466 .mn_ena_val = BIT(24),
5467 .mn_ena_mask = BIT(24),
5468 .main_output_val = BIT(0),
5469 .main_output_mask = BIT(0),
5470};
5471
Vikram Mulukutla293c4692013-01-03 15:09:47 -08005472/* MMPLL3 at 930 MHz, main output enabled. */
5473static struct pll_config mmpll3_v2_config __initdata = {
5474 .l = 48,
5475 .m = 7,
5476 .n = 16,
5477 .vco_val = 0x0,
5478 .vco_mask = BM(21, 20),
5479 .pre_div_val = 0x0,
5480 .pre_div_mask = BM(14, 12),
5481 .post_div_val = 0x0,
5482 .post_div_mask = BM(9, 8),
5483 .mn_ena_val = BIT(24),
5484 .mn_ena_mask = BIT(24),
5485 .main_output_val = BIT(0),
5486 .main_output_mask = BIT(0),
5487};
5488
Vikram Mulukutla14ee37d2012-08-08 15:18:09 -07005489#define PWR_ON_MASK BIT(31)
5490#define EN_REST_WAIT_MASK (0xF << 20)
5491#define EN_FEW_WAIT_MASK (0xF << 16)
5492#define CLK_DIS_WAIT_MASK (0xF << 12)
5493#define SW_OVERRIDE_MASK BIT(2)
5494#define HW_CONTROL_MASK BIT(1)
5495#define SW_COLLAPSE_MASK BIT(0)
5496
5497/* Wait 2^n CXO cycles between all states. Here, n=2 (4 cycles). */
5498#define EN_REST_WAIT_VAL (0x2 << 20)
5499#define EN_FEW_WAIT_VAL (0x2 << 16)
5500#define CLK_DIS_WAIT_VAL (0x2 << 12)
5501#define GDSC_TIMEOUT_US 50000
5502
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005503static void __init reg_init(void)
5504{
Vikram Mulukutla6cce1552013-02-12 19:08:59 -08005505 u32 regval;
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005506
Vikram Mulukutla6da35d32012-07-18 13:55:31 -07005507 configure_sr_hpm_lp_pll(&mmpll0_config, &mmpll0_regs, 1);
Vikram Mulukutla293c4692013-01-03 15:09:47 -08005508
5509 if (SOCINFO_VERSION_MAJOR(socinfo_get_version()) == 2) {
5510 configure_sr_hpm_lp_pll(&mmpll1_v2_config, &mmpll1_regs, 1);
5511 configure_sr_hpm_lp_pll(&mmpll3_v2_config, &mmpll3_regs, 0);
5512 } else {
5513 configure_sr_hpm_lp_pll(&mmpll1_config, &mmpll1_regs, 1);
5514 configure_sr_hpm_lp_pll(&mmpll3_config, &mmpll3_regs, 0);
5515 }
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005516
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005517 /* Vote for GPLL0 to turn on. Needed by acpuclock. */
5518 regval = readl_relaxed(GCC_REG_BASE(APCS_GPLL_ENA_VOTE_REG));
5519 regval |= BIT(0);
5520 writel_relaxed(regval, GCC_REG_BASE(APCS_GPLL_ENA_VOTE_REG));
5521
5522 /*
Vikram Mulukutla4e2a89c2013-02-06 22:39:38 -08005523 * V2 requires additional votes to allow the LPASS and MMSS
5524 * controllers to use GPLL0.
5525 */
5526 if (SOCINFO_VERSION_MAJOR(socinfo_get_version()) == 2) {
5527 regval = readl_relaxed(
5528 GCC_REG_BASE(APCS_CLOCK_BRANCH_ENA_VOTE));
5529 writel_relaxed(regval | BIT(26) | BIT(25),
5530 GCC_REG_BASE(APCS_CLOCK_BRANCH_ENA_VOTE));
5531 }
5532
5533 /*
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005534 * TODO: Confirm that no clocks need to be voted on in this sleep vote
5535 * register.
5536 */
5537 writel_relaxed(0x0, GCC_REG_BASE(APCS_CLOCK_SLEEP_ENA_VOTE));
5538}
5539
Vikram Mulukutlafe0f5a52012-08-16 16:51:08 -07005540static void __init mdss_clock_setup(void)
5541{
Vikram Mulukutlaa42d7c22013-02-22 18:38:04 -08005542 clk_ops_byte = clk_ops_rcg;
Vikram Mulukutlafe0f5a52012-08-16 16:51:08 -07005543 clk_ops_byte.set_rate = set_rate_byte;
Siddhartha Agrawal4b0d5a62013-02-25 23:23:41 -08005544 clk_ops_byte.get_parent = get_parent_byte;
5545 clk_ops_byte.handoff = byte_rcg_handoff;
Vikram Mulukutlafe0f5a52012-08-16 16:51:08 -07005546
Vikram Mulukutlaa42d7c22013-02-22 18:38:04 -08005547 clk_ops_pixel = clk_ops_rcg_mnd;
Vikram Mulukutlafe0f5a52012-08-16 16:51:08 -07005548 clk_ops_pixel.set_rate = set_rate_pixel;
Siddhartha Agrawal4b0d5a62013-02-25 23:23:41 -08005549 clk_ops_pixel.get_parent = get_parent_pixel;
5550 clk_ops_pixel.handoff = pixel_rcg_handoff;
Vikram Mulukutlafe0f5a52012-08-16 16:51:08 -07005551
Vikram Mulukutla5acd7932012-11-29 14:20:34 -08005552 clk_ops_rcg_hdmi = clk_ops_rcg;
5553 clk_ops_rcg_hdmi.set_rate = rcg_clk_set_rate_hdmi;
5554
Siddhartha Agrawal4b0d5a62013-02-25 23:23:41 -08005555 /*
5556 * MDSS needs the ahb clock and needs to init before we register the
5557 * lookup table.
5558 */
5559 mdss_clk_ctrl_pre_init(&mdss_ahb_clk.c);
Vikram Mulukutlafe0f5a52012-08-16 16:51:08 -07005560}
5561
Abhimanyu Kapur90ced6e2012-06-26 17:41:25 -07005562static void __init msm8974_clock_post_init(void)
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005563{
Vikram Mulukutla293c4692013-01-03 15:09:47 -08005564 if (SOCINFO_VERSION_MAJOR(socinfo_get_version()) == 2) {
5565 clk_set_rate(&axi_clk_src.c, 333430000);
5566 clk_set_rate(&ocmemnoc_clk_src.c, 333430000);
5567 } else {
5568 clk_set_rate(&axi_clk_src.c, 282000000);
5569 clk_set_rate(&ocmemnoc_clk_src.c, 282000000);
5570 }
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005571
Vikram Mulukutlaf8634bb2012-06-28 16:21:21 -07005572 /*
Vikram Mulukutla09e20812012-07-12 11:32:42 -07005573 * Hold an active set vote at a rate of 40MHz for the MMSS NOC AHB
5574 * source. Sleep set vote is 0.
5575 */
5576 clk_set_rate(&mmssnoc_ahb_a_clk.c, 40000000);
5577 clk_prepare_enable(&mmssnoc_ahb_a_clk.c);
5578
5579 /*
Vikram Mulukutlaf8634bb2012-06-28 16:21:21 -07005580 * Hold an active set vote for CXO; this is because CXO is expected
5581 * to remain on whenever CPUs aren't power collapsed.
5582 */
5583 clk_prepare_enable(&cxo_a_clk_src.c);
5584
Vikram Mulukutla274b2d92012-07-13 15:53:04 -07005585 /*
5586 * TODO: Temporarily enable NOC configuration AHB clocks. Remove when
5587 * the bus driver is ready.
5588 */
5589 clk_prepare_enable(&gcc_mmss_noc_cfg_ahb_clk.c);
5590 clk_prepare_enable(&gcc_ocmem_noc_cfg_ahb_clk.c);
5591
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005592 /* Set rates for single-rate clocks. */
5593 clk_set_rate(&usb30_master_clk_src.c,
5594 usb30_master_clk_src.freq_tbl[0].freq_hz);
5595 clk_set_rate(&tsif_ref_clk_src.c,
5596 tsif_ref_clk_src.freq_tbl[0].freq_hz);
5597 clk_set_rate(&usb_hs_system_clk_src.c,
5598 usb_hs_system_clk_src.freq_tbl[0].freq_hz);
5599 clk_set_rate(&usb_hsic_clk_src.c,
5600 usb_hsic_clk_src.freq_tbl[0].freq_hz);
5601 clk_set_rate(&usb_hsic_io_cal_clk_src.c,
5602 usb_hsic_io_cal_clk_src.freq_tbl[0].freq_hz);
5603 clk_set_rate(&usb_hsic_system_clk_src.c,
5604 usb_hsic_system_clk_src.freq_tbl[0].freq_hz);
5605 clk_set_rate(&usb30_mock_utmi_clk_src.c,
5606 usb30_mock_utmi_clk_src.freq_tbl[0].freq_hz);
5607 clk_set_rate(&pdm2_clk_src.c, pdm2_clk_src.freq_tbl[0].freq_hz);
5608 clk_set_rate(&cci_clk_src.c, cci_clk_src.freq_tbl[0].freq_hz);
5609 clk_set_rate(&mclk0_clk_src.c, mclk0_clk_src.freq_tbl[0].freq_hz);
5610 clk_set_rate(&mclk1_clk_src.c, mclk1_clk_src.freq_tbl[0].freq_hz);
5611 clk_set_rate(&mclk2_clk_src.c, mclk2_clk_src.freq_tbl[0].freq_hz);
5612 clk_set_rate(&edpaux_clk_src.c, edpaux_clk_src.freq_tbl[0].freq_hz);
5613 clk_set_rate(&esc0_clk_src.c, esc0_clk_src.freq_tbl[0].freq_hz);
5614 clk_set_rate(&esc1_clk_src.c, esc1_clk_src.freq_tbl[0].freq_hz);
5615 clk_set_rate(&hdmi_clk_src.c, hdmi_clk_src.freq_tbl[0].freq_hz);
5616 clk_set_rate(&vsync_clk_src.c, vsync_clk_src.freq_tbl[0].freq_hz);
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005617}
5618
Matt Wagantalledf2fad2012-08-06 16:11:46 -07005619#define GCC_CC_PHYS 0xFC400000
5620#define GCC_CC_SIZE SZ_16K
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005621
Matt Wagantalledf2fad2012-08-06 16:11:46 -07005622#define MMSS_CC_PHYS 0xFD8C0000
5623#define MMSS_CC_SIZE SZ_256K
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005624
Matt Wagantalledf2fad2012-08-06 16:11:46 -07005625#define LPASS_CC_PHYS 0xFE000000
5626#define LPASS_CC_SIZE SZ_256K
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005627
Matt Wagantalledf2fad2012-08-06 16:11:46 -07005628#define APCS_GCC_CC_PHYS 0xF9011000
5629#define APCS_GCC_CC_SIZE SZ_4K
Vikram Mulukutlaa967db42012-05-10 16:20:40 -07005630
Vikram Mulukutlaa57e6e42013-01-23 16:58:08 -08005631static struct clk *qup_i2c_clks[][2] __initdata = {
5632 {&gcc_blsp1_qup1_i2c_apps_clk.c, &blsp1_qup1_i2c_apps_clk_src.c,},
5633 {&gcc_blsp1_qup2_i2c_apps_clk.c, &blsp1_qup2_i2c_apps_clk_src.c,},
5634 {&gcc_blsp1_qup3_i2c_apps_clk.c, &blsp1_qup3_i2c_apps_clk_src.c,},
5635 {&gcc_blsp1_qup4_i2c_apps_clk.c, &blsp1_qup4_i2c_apps_clk_src.c,},
5636 {&gcc_blsp1_qup5_i2c_apps_clk.c, &blsp1_qup5_i2c_apps_clk_src.c,},
5637 {&gcc_blsp1_qup6_i2c_apps_clk.c, &blsp1_qup6_i2c_apps_clk_src.c,},
5638 {&gcc_blsp2_qup1_i2c_apps_clk.c, &blsp2_qup1_i2c_apps_clk_src.c,},
5639 {&gcc_blsp2_qup2_i2c_apps_clk.c, &blsp2_qup2_i2c_apps_clk_src.c,},
5640 {&gcc_blsp2_qup3_i2c_apps_clk.c, &blsp2_qup3_i2c_apps_clk_src.c,},
5641 {&gcc_blsp2_qup4_i2c_apps_clk.c, &blsp2_qup4_i2c_apps_clk_src.c,},
5642 {&gcc_blsp2_qup5_i2c_apps_clk.c, &blsp2_qup5_i2c_apps_clk_src.c,},
5643 {&gcc_blsp2_qup6_i2c_apps_clk.c, &blsp2_qup6_i2c_apps_clk_src.c,},
5644};
5645
Abhimanyu Kapur90ced6e2012-06-26 17:41:25 -07005646static void __init msm8974_clock_pre_init(void)
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005647{
5648 virt_bases[GCC_BASE] = ioremap(GCC_CC_PHYS, GCC_CC_SIZE);
5649 if (!virt_bases[GCC_BASE])
Abhimanyu Kapur90ced6e2012-06-26 17:41:25 -07005650 panic("clock-8974: Unable to ioremap GCC memory!");
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005651
5652 virt_bases[MMSS_BASE] = ioremap(MMSS_CC_PHYS, MMSS_CC_SIZE);
5653 if (!virt_bases[MMSS_BASE])
Abhimanyu Kapur90ced6e2012-06-26 17:41:25 -07005654 panic("clock-8974: Unable to ioremap MMSS_CC memory!");
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005655
5656 virt_bases[LPASS_BASE] = ioremap(LPASS_CC_PHYS, LPASS_CC_SIZE);
5657 if (!virt_bases[LPASS_BASE])
Abhimanyu Kapur90ced6e2012-06-26 17:41:25 -07005658 panic("clock-8974: Unable to ioremap LPASS_CC memory!");
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005659
Matt Wagantalledf2fad2012-08-06 16:11:46 -07005660 virt_bases[APCS_BASE] = ioremap(APCS_GCC_CC_PHYS, APCS_GCC_CC_SIZE);
5661 if (!virt_bases[APCS_BASE])
5662 panic("clock-8974: Unable to ioremap APCS_GCC_CC memory!");
5663
Vikram Mulukutla6da35d32012-07-18 13:55:31 -07005664 clk_ops_local_pll.enable = sr_hpm_lp_pll_clk_enable;
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005665
Vikram Mulukutlab7a1a742012-05-30 17:24:33 -07005666 vdd_dig_reg = rpm_regulator_get(NULL, "vdd_dig");
5667 if (IS_ERR(vdd_dig_reg))
Vikram Mulukutla19245e02012-07-23 15:58:04 -07005668 panic("clock-8974: Unable to get the vdd_dig regulator!");
Vikram Mulukutlab7a1a742012-05-30 17:24:33 -07005669
5670 /*
5671 * TODO: Set a voltage and enable vdd_dig, leaving the voltage high
5672 * until late_init. This may not be necessary with clock handoff;
5673 * Investigate this code on a real non-simulator target to determine
5674 * its necessity.
5675 */
5676 vote_vdd_level(&vdd_dig, VDD_DIG_HIGH);
5677 rpm_regulator_enable(vdd_dig_reg);
5678
Vikram Mulukutla77140da2012-08-13 21:37:18 -07005679 enable_rpm_scaling();
5680
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005681 reg_init();
Vikram Mulukutla293c4692013-01-03 15:09:47 -08005682
5683 /* v2 specific changes */
5684 if (SOCINFO_VERSION_MAJOR(socinfo_get_version()) == 2) {
Vikram Mulukutlaa57e6e42013-01-23 16:58:08 -08005685 int i;
5686
Vikram Mulukutla293c4692013-01-03 15:09:47 -08005687 mmpll3_clk_src.c.rate = 930000000;
5688 mmpll1_clk_src.c.rate = 1167000000;
5689 mmpll1_clk_src.c.fmax[VDD_DIG_NOMINAL] = 1167000000;
5690
5691 ocmemnoc_clk_src.freq_tbl = ftbl_ocmemnoc_v2_clk;
5692 ocmemnoc_clk_src.c.fmax[VDD_DIG_NOMINAL] = 333430000;
5693
5694 axi_clk_src.freq_tbl = ftbl_mmss_axi_v2_clk;
5695 axi_clk_src.c.fmax[VDD_DIG_NOMINAL] = 333430000;
5696 axi_clk_src.c.fmax[VDD_DIG_HIGH] = 466800000;
5697
5698 vcodec0_clk_src.freq_tbl = ftbl_venus0_vcodec0_v2_clk;
5699 vcodec0_clk_src.c.fmax[VDD_DIG_HIGH] = 465000000;
5700
5701 mdp_clk_src.c.fmax[VDD_DIG_NOMINAL] = 240000000;
Vikram Mulukutlaa57e6e42013-01-23 16:58:08 -08005702
5703 /* The parent of each of the QUP I2C clocks is an RCG on V2 */
5704 for (i = 0; i < ARRAY_SIZE(qup_i2c_clks); i++)
5705 qup_i2c_clks[i][0]->parent = qup_i2c_clks[i][1];
Vikram Mulukutla293c4692013-01-03 15:09:47 -08005706 }
Siddhartha Agrawal4b0d5a62013-02-25 23:23:41 -08005707
5708 mdss_clock_setup();
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005709}
5710
Vikram Mulukutlab7a1a742012-05-30 17:24:33 -07005711static int __init msm8974_clock_late_init(void)
5712{
5713 return unvote_vdd_level(&vdd_dig, VDD_DIG_HIGH);
5714}
5715
Vikram Mulukutla19245e02012-07-23 15:58:04 -07005716static void __init msm8974_rumi_clock_pre_init(void)
5717{
5718 virt_bases[GCC_BASE] = ioremap(GCC_CC_PHYS, GCC_CC_SIZE);
5719 if (!virt_bases[GCC_BASE])
5720 panic("clock-8974: Unable to ioremap GCC memory!");
5721
5722 /* SDCC clocks are partially emulated in the RUMI */
5723 sdcc1_apps_clk_src.freq_tbl = ftbl_gcc_sdcc_apps_rumi_clk;
5724 sdcc2_apps_clk_src.freq_tbl = ftbl_gcc_sdcc_apps_rumi_clk;
5725 sdcc3_apps_clk_src.freq_tbl = ftbl_gcc_sdcc_apps_rumi_clk;
5726 sdcc4_apps_clk_src.freq_tbl = ftbl_gcc_sdcc_apps_rumi_clk;
5727
5728 vdd_dig_reg = rpm_regulator_get(NULL, "vdd_dig");
5729 if (IS_ERR(vdd_dig_reg))
5730 panic("clock-8974: Unable to get the vdd_dig regulator!");
5731
5732 /*
5733 * TODO: Set a voltage and enable vdd_dig, leaving the voltage high
5734 * until late_init. This may not be necessary with clock handoff;
5735 * Investigate this code on a real non-simulator target to determine
5736 * its necessity.
5737 */
5738 vote_vdd_level(&vdd_dig, VDD_DIG_HIGH);
5739 rpm_regulator_enable(vdd_dig_reg);
5740}
5741
Abhimanyu Kapur90ced6e2012-06-26 17:41:25 -07005742struct clock_init_data msm8974_clock_init_data __initdata = {
5743 .table = msm_clocks_8974,
5744 .size = ARRAY_SIZE(msm_clocks_8974),
5745 .pre_init = msm8974_clock_pre_init,
5746 .post_init = msm8974_clock_post_init,
Vikram Mulukutlab7a1a742012-05-30 17:24:33 -07005747 .late_init = msm8974_clock_late_init,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005748};
Vikram Mulukutla19245e02012-07-23 15:58:04 -07005749
5750struct clock_init_data msm8974_rumi_clock_init_data __initdata = {
5751 .table = msm_clocks_8974_rumi,
5752 .size = ARRAY_SIZE(msm_clocks_8974_rumi),
5753 .pre_init = msm8974_rumi_clock_pre_init,
5754};