blob: 7fe3f97f34c75b3f4c9f8a3c0d91742b76cf3c4c [file] [log] [blame]
Patrick Dalyeb370ea2012-10-23 11:57:50 -07001/* Copyright (c) 2013, The Linux Foundation. All rights reserved.
2 *
3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License version 2 and
5 * only version 2 as published by the Free Software Foundation.
6 *
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
11 */
12
13#include <linux/kernel.h>
14#include <linux/init.h>
15#include <linux/err.h>
16#include <linux/ctype.h>
17#include <linux/io.h>
18#include <linux/spinlock.h>
19#include <linux/delay.h>
20#include <linux/clk.h>
21#include <linux/iopoll.h>
Patrick Daly48e00f32013-01-28 19:13:47 -080022#include <linux/regulator/consumer.h>
Patrick Dalyeb370ea2012-10-23 11:57:50 -070023
24#include <mach/rpm-regulator-smd.h>
25#include <mach/socinfo.h>
26#include <mach/rpm-smd.h>
27
28#include "clock-local2.h"
29#include "clock-pll.h"
30#include "clock-rpm.h"
31#include "clock-voter.h"
32#include "clock-mdss-8974.h"
33#include "clock.h"
34
35enum {
36 GCC_BASE,
37 MMSS_BASE,
38 LPASS_BASE,
39 APCS_BASE,
40 APCS_PLL_BASE,
41 N_BASES,
42};
43
44static void __iomem *virt_bases[N_BASES];
45
46#define GCC_REG_BASE(x) (void __iomem *)(virt_bases[GCC_BASE] + (x))
47#define MMSS_REG_BASE(x) (void __iomem *)(virt_bases[MMSS_BASE] + (x))
48#define LPASS_REG_BASE(x) (void __iomem *)(virt_bases[LPASS_BASE] + (x))
49#define APCS_REG_BASE(x) (void __iomem *)(virt_bases[APCS_BASE] + (x))
50
51/* Mux source select values */
52#define xo_source_val 0
53#define gpll0_source_val 1
54#define gpll1_source_val 2
55
56#define xo_mm_source_val 0
57#define mmpll0_pll_mm_source_val 1
58#define mmpll1_pll_mm_source_val 2
59#define mmpll2_pll_mm_source_val 3
60#define gpll0_mm_source_val 5
61#define dsipll_750_mm_source_val 1
62#define dsipll_667_mm_source_val 1
Patrick Daly5555c2c2013-03-06 21:25:26 -080063#define dsipll0_byte_mm_source_val 1
64#define dsipll0_pixel_mm_source_val 1
Patrick Dalyeb370ea2012-10-23 11:57:50 -070065
66#define gpll1_hsic_source_val 4
67
68#define xo_lpass_source_val 0
69#define lpaaudio_pll_lpass_source_val 1
70#define gpll0_lpass_source_val 5
71
72/* Prevent a divider of -1 */
73#define FIXDIV(div) (div ? (2 * (div) - 1) : (0))
74
75#define F_GCC(f, s, div, m, n) \
76 { \
77 .freq_hz = (f), \
78 .src_clk = &s.c, \
79 .m_val = (m), \
80 .n_val = ~((n)-(m)) * !!(n), \
81 .d_val = ~(n),\
82 .div_src_val = BVAL(4, 0, (int)(FIXDIV(div))) \
83 | BVAL(10, 8, s##_source_val), \
84 }
85
86#define F_MMSS(f, s, div, m, n) \
87 { \
88 .freq_hz = (f), \
89 .src_clk = &s.c, \
90 .m_val = (m), \
91 .n_val = ~((n)-(m)) * !!(n), \
92 .d_val = ~(n),\
93 .div_src_val = BVAL(4, 0, (int)(FIXDIV(div))) \
94 | BVAL(10, 8, s##_mm_source_val), \
95 }
96
97#define F_MDSS(f, s, div, m, n) \
98 { \
99 .freq_hz = (f), \
100 .m_val = (m), \
101 .n_val = ~((n)-(m)) * !!(n), \
102 .d_val = ~(n),\
103 .div_src_val = BVAL(4, 0, (int)(FIXDIV(div))) \
104 | BVAL(10, 8, s##_mm_source_val), \
105 }
106
107#define F_HSIC(f, s, div, m, n) \
108 { \
109 .freq_hz = (f), \
110 .src_clk = &s.c, \
111 .m_val = (m), \
112 .n_val = ~((n)-(m)) * !!(n), \
113 .d_val = ~(n),\
114 .div_src_val = BVAL(4, 0, (int)(FIXDIV(div))) \
115 | BVAL(10, 8, s##_hsic_source_val), \
116 }
117
118#define F_LPASS(f, s, div, m, n) \
119 { \
120 .freq_hz = (f), \
121 .src_clk = &s.c, \
122 .m_val = (m), \
123 .n_val = ~((n)-(m)) * !!(n), \
124 .d_val = ~(n),\
125 .div_src_val = BVAL(4, 0, (int)(FIXDIV(div))) \
126 | BVAL(10, 8, s##_lpass_source_val), \
127 }
128
129#define F_APCS_PLL(f, l, m, n, pre_div, post_div, vco) \
130 { \
131 .freq_hz = (f), \
132 .l_val = (l), \
133 .m_val = (m), \
134 .n_val = (n), \
135 .pre_div_val = BVAL(12, 12, (pre_div)), \
136 .post_div_val = BVAL(9, 8, (post_div)), \
137 .vco_val = BVAL(29, 28, (vco)), \
138 }
139
140#define VDD_DIG_FMAX_MAP1(l1, f1) \
141 .vdd_class = &vdd_dig, \
142 .fmax = (unsigned long[VDD_DIG_NUM]) { \
143 [VDD_DIG_##l1] = (f1), \
144 }, \
145 .num_fmax = VDD_DIG_NUM
146
147#define VDD_DIG_FMAX_MAP2(l1, f1, l2, f2) \
148 .vdd_class = &vdd_dig, \
149 .fmax = (unsigned long[VDD_DIG_NUM]) { \
150 [VDD_DIG_##l1] = (f1), \
151 [VDD_DIG_##l2] = (f2), \
152 }, \
153 .num_fmax = VDD_DIG_NUM
154
155#define VDD_DIG_FMAX_MAP3(l1, f1, l2, f2, l3, f3) \
156 .vdd_class = &vdd_dig, \
157 .fmax = (unsigned long[VDD_DIG_NUM]) { \
158 [VDD_DIG_##l1] = (f1), \
159 [VDD_DIG_##l2] = (f2), \
160 [VDD_DIG_##l3] = (f3), \
161 }, \
162 .num_fmax = VDD_DIG_NUM
163
164enum vdd_dig_levels {
165 VDD_DIG_NONE,
166 VDD_DIG_LOW,
167 VDD_DIG_NOMINAL,
168 VDD_DIG_HIGH,
169 VDD_DIG_NUM
170};
171
Patrick Dalycbdceb72013-04-16 17:02:34 -0700172static int *vdd_corner[] = {
Patrick Dalyebc26bc2013-02-05 11:49:07 -0800173 [VDD_DIG_NONE] = VDD_UV(RPM_REGULATOR_CORNER_NONE),
174 [VDD_DIG_LOW] = VDD_UV(RPM_REGULATOR_CORNER_SVS_SOC),
175 [VDD_DIG_NOMINAL] = VDD_UV(RPM_REGULATOR_CORNER_NORMAL),
176 [VDD_DIG_HIGH] = VDD_UV(RPM_REGULATOR_CORNER_SUPER_TURBO),
Patrick Dalyeb370ea2012-10-23 11:57:50 -0700177};
178
Patrick Daly653c0b52013-04-16 17:18:28 -0700179static DEFINE_VDD_REGULATORS(vdd_dig, VDD_DIG_NUM, 1, vdd_corner, NULL);
Patrick Dalyeb370ea2012-10-23 11:57:50 -0700180
181#define RPM_MISC_CLK_TYPE 0x306b6c63
182#define RPM_BUS_CLK_TYPE 0x316b6c63
183#define RPM_MEM_CLK_TYPE 0x326b6c63
184
185#define RPM_SMD_KEY_ENABLE 0x62616E45
186
187#define CXO_ID 0x0
188#define QDSS_ID 0x1
189
190#define PNOC_ID 0x0
191#define SNOC_ID 0x1
192#define CNOC_ID 0x2
193#define MMSSNOC_AHB_ID 0x3
194
195#define BIMC_ID 0x0
196#define OXILI_ID 0x1
197#define OCMEM_ID 0x2
198
199#define D0_ID 1
200#define D1_ID 2
201#define A0_ID 4
202#define A1_ID 5
203#define A2_ID 6
204#define DIFF_CLK_ID 7
205#define DIV_CLK1_ID 11
206#define DIV_CLK2_ID 12
207
208DEFINE_CLK_RPM_SMD(pnoc_clk, pnoc_a_clk, RPM_BUS_CLK_TYPE, PNOC_ID, NULL);
209DEFINE_CLK_RPM_SMD(snoc_clk, snoc_a_clk, RPM_BUS_CLK_TYPE, SNOC_ID, NULL);
210DEFINE_CLK_RPM_SMD(cnoc_clk, cnoc_a_clk, RPM_BUS_CLK_TYPE, CNOC_ID, NULL);
211DEFINE_CLK_RPM_SMD(mmssnoc_ahb_clk, mmssnoc_ahb_a_clk, RPM_BUS_CLK_TYPE,
212 MMSSNOC_AHB_ID, NULL);
213
214DEFINE_CLK_RPM_SMD(bimc_clk, bimc_a_clk, RPM_MEM_CLK_TYPE, BIMC_ID, NULL);
215DEFINE_CLK_RPM_SMD(ocmemgx_clk, ocmemgx_a_clk, RPM_MEM_CLK_TYPE, OCMEM_ID,
216 NULL);
217DEFINE_CLK_RPM_SMD(gfx3d_clk_src, gfx3d_a_clk_src, RPM_MEM_CLK_TYPE, OXILI_ID,
218 NULL);
219
220DEFINE_CLK_RPM_SMD_BRANCH(xo, xo_a_clk,
221 RPM_MISC_CLK_TYPE, CXO_ID, 19200000);
222DEFINE_CLK_RPM_SMD_QDSS(qdss_clk, qdss_a_clk, RPM_MISC_CLK_TYPE, QDSS_ID);
223
224DEFINE_CLK_RPM_SMD_XO_BUFFER(cxo_d0, cxo_d0_a, D0_ID);
225DEFINE_CLK_RPM_SMD_XO_BUFFER(cxo_d1, cxo_d1_a, D1_ID);
226DEFINE_CLK_RPM_SMD_XO_BUFFER(cxo_a0, cxo_a0_a, A0_ID);
227DEFINE_CLK_RPM_SMD_XO_BUFFER(cxo_a1, cxo_a1_a, A1_ID);
228DEFINE_CLK_RPM_SMD_XO_BUFFER(cxo_a2, cxo_a2_a, A2_ID);
229DEFINE_CLK_RPM_SMD_XO_BUFFER(div_clk1, div_a_clk1, DIV_CLK1_ID);
230DEFINE_CLK_RPM_SMD_XO_BUFFER(div_clk2, div_a_clk2, DIV_CLK2_ID);
231DEFINE_CLK_RPM_SMD_XO_BUFFER(diff_clk, diff_a_clk, DIFF_CLK_ID);
232
233DEFINE_CLK_RPM_SMD_XO_BUFFER_PINCTRL(cxo_d0_pin, cxo_d0_a_pin, D0_ID);
234DEFINE_CLK_RPM_SMD_XO_BUFFER_PINCTRL(cxo_d1_pin, cxo_d1_a_pin, D1_ID);
235DEFINE_CLK_RPM_SMD_XO_BUFFER_PINCTRL(cxo_a0_pin, cxo_a0_a_pin, A0_ID);
236DEFINE_CLK_RPM_SMD_XO_BUFFER_PINCTRL(cxo_a1_pin, cxo_a1_a_pin, A1_ID);
237DEFINE_CLK_RPM_SMD_XO_BUFFER_PINCTRL(cxo_a2_pin, cxo_a2_a_pin, A2_ID);
238
239struct measure_mux_entry {
240 struct clk *c;
241 int base;
242 u32 debug_mux;
243};
244
245static struct branch_clk oxilicx_axi_clk;
246
247#define MSS_DEBUG_CLOCK_CTL 0x0078
248#define LPASS_DEBUG_CLK_CTL 0x29000
249#define GLB_CLK_DIAG 0x01C
250#define GLB_TEST_BUS_SEL 0x020
251
252#define MMPLL0_PLL_MODE (0x0000)
253#define MMPLL0_PLL_L_VAL (0x0004)
254#define MMPLL0_PLL_M_VAL (0x0008)
255#define MMPLL0_PLL_N_VAL (0x000C)
256#define MMPLL0_PLL_USER_CTL (0x0010)
257#define MMPLL0_PLL_STATUS (0x001C)
258#define MMPLL1_PLL_MODE (0x0040)
259#define MMPLL1_PLL_L_VAL (0x0044)
260#define MMPLL1_PLL_M_VAL (0x0048)
261#define MMPLL1_PLL_N_VAL (0x004C)
262#define MMPLL1_PLL_USER_CTL (0x0050)
263#define MMPLL1_PLL_STATUS (0x005C)
264#define MMSS_PLL_VOTE_APCS (0x0100)
265#define VCODEC0_CMD_RCGR (0x1000)
266#define VENUS0_VCODEC0_CBCR (0x1028)
267#define VENUS0_AHB_CBCR (0x1030)
268#define VENUS0_AXI_CBCR (0x1034)
269#define PCLK0_CMD_RCGR (0x2000)
270#define MDP_CMD_RCGR (0x2040)
271#define VSYNC_CMD_RCGR (0x2080)
272#define BYTE0_CMD_RCGR (0x2120)
273#define ESC0_CMD_RCGR (0x2160)
274#define MDSS_AHB_CBCR (0x2308)
275#define MDSS_AXI_CBCR (0x2310)
276#define MDSS_PCLK0_CBCR (0x2314)
277#define MDSS_MDP_CBCR (0x231C)
278#define MDSS_MDP_LUT_CBCR (0x2320)
279#define MDSS_VSYNC_CBCR (0x2328)
280#define MDSS_BYTE0_CBCR (0x233C)
281#define MDSS_ESC0_CBCR (0x2344)
282#define CSI0PHYTIMER_CMD_RCGR (0x3000)
283#define CAMSS_PHY0_CSI0PHYTIMER_CBCR (0x3024)
284#define CSI1PHYTIMER_CMD_RCGR (0x3030)
285#define CAMSS_PHY1_CSI1PHYTIMER_CBCR (0x3054)
286#define CSI0_CMD_RCGR (0x3090)
287#define CAMSS_CSI0_CBCR (0x30B4)
288#define CAMSS_CSI0_AHB_CBCR (0x30BC)
289#define CAMSS_CSI0PHY_CBCR (0x30C4)
290#define CAMSS_CSI0RDI_CBCR (0x30D4)
291#define CAMSS_CSI0PIX_CBCR (0x30E4)
292#define CSI1_CMD_RCGR (0x3100)
293#define CAMSS_CSI1_CBCR (0x3124)
294#define CAMSS_CSI1_AHB_CBCR (0x3128)
295#define CAMSS_CSI1PHY_CBCR (0x3134)
296#define CAMSS_CSI1RDI_CBCR (0x3144)
297#define CAMSS_CSI1PIX_CBCR (0x3154)
298#define CAMSS_ISPIF_AHB_CBCR (0x3224)
299#define CCI_CMD_RCGR (0x3300)
300#define CAMSS_CCI_CCI_CBCR (0x3344)
301#define CAMSS_CCI_CCI_AHB_CBCR (0x3348)
302#define MCLK0_CMD_RCGR (0x3360)
303#define CAMSS_MCLK0_CBCR (0x3384)
304#define MCLK1_CMD_RCGR (0x3390)
305#define CAMSS_MCLK1_CBCR (0x33B4)
306#define MMSS_GP0_CMD_RCGR (0x3420)
307#define CAMSS_GP0_CBCR (0x3444)
308#define MMSS_GP1_CMD_RCGR (0x3450)
309#define CAMSS_GP1_CBCR (0x3474)
310#define CAMSS_TOP_AHB_CBCR (0x3484)
311#define CAMSS_MICRO_AHB_CBCR (0x3494)
312#define JPEG0_CMD_RCGR (0x3500)
313#define CAMSS_JPEG_JPEG0_CBCR (0x35A8)
314#define CAMSS_JPEG_JPEG_AHB_CBCR (0x35B4)
315#define CAMSS_JPEG_JPEG_AXI_CBCR (0x35B8)
316#define VFE0_CMD_RCGR (0x3600)
317#define CPP_CMD_RCGR (0x3640)
318#define CAMSS_VFE_VFE0_CBCR (0x36A8)
319#define CAMSS_VFE_CPP_CBCR (0x36B0)
320#define CAMSS_VFE_CPP_AHB_CBCR (0x36B4)
321#define CAMSS_VFE_VFE_AHB_CBCR (0x36B8)
322#define CAMSS_VFE_VFE_AXI_CBCR (0x36BC)
323#define CAMSS_CSI_VFE0_CBCR (0x3704)
324#define OXILI_GFX3D_CBCR (0x4028)
325#define OXILICX_AXI_CBCR (0x4038)
326#define OXILICX_AHB_CBCR (0x403C)
Patrick Dalyeb370ea2012-10-23 11:57:50 -0700327#define MMPLL2_PLL_MODE (0x4100)
328#define MMPLL2_PLL_STATUS (0x411C)
329#define MMSS_MMSSNOC_AHB_CBCR (0x5024)
330#define MMSS_MMSSNOC_BTO_AHB_CBCR (0x5028)
331#define MMSS_MISC_AHB_CBCR (0x502C)
332#define AXI_CMD_RCGR (0x5040)
333#define MMSS_S0_AXI_CBCR (0x5064)
334#define MMSS_MMSSNOC_AXI_CBCR (0x506C)
335#define MMSS_DEBUG_CLK_CTL (0x0900)
336#define GPLL0_MODE (0x0000)
337#define GPLL0_L_VAL (0x0004)
338#define GPLL0_M_VAL (0x0008)
339#define GPLL0_N_VAL (0x000C)
340#define GPLL0_USER_CTL (0x0010)
341#define GPLL0_STATUS (0x001C)
342#define GPLL1_MODE (0x0040)
343#define GPLL1_L_VAL (0x0044)
344#define GPLL1_M_VAL (0x0048)
345#define GPLL1_N_VAL (0x004C)
346#define GPLL1_USER_CTL (0x0050)
347#define GPLL1_STATUS (0x005C)
348#define PERIPH_NOC_AHB_CBCR (0x0184)
349#define NOC_CONF_XPU_AHB_CBCR (0x01C0)
350#define MMSS_NOC_CFG_AHB_CBCR (0x024C)
351#define MSS_CFG_AHB_CBCR (0x0280)
352#define MSS_Q6_BIMC_AXI_CBCR (0x0284)
353#define USB_HS_HSIC_BCR (0x0400)
354#define USB_HSIC_AHB_CBCR (0x0408)
355#define USB_HSIC_SYSTEM_CMD_RCGR (0x041C)
356#define USB_HSIC_SYSTEM_CBCR (0x040C)
357#define USB_HSIC_CMD_RCGR (0x0440)
358#define USB_HSIC_CBCR (0x0410)
359#define USB_HSIC_IO_CAL_CMD_RCGR (0x0458)
360#define USB_HSIC_IO_CAL_CBCR (0x0414)
361#define USB_HS_BCR (0x0480)
362#define USB_HS_SYSTEM_CBCR (0x0484)
363#define USB_HS_AHB_CBCR (0x0488)
364#define USB_HS_SYSTEM_CMD_RCGR (0x0490)
365#define USB2A_PHY_SLEEP_CBCR (0x04AC)
366#define SDCC1_APPS_CMD_RCGR (0x04D0)
367#define SDCC1_APPS_CBCR (0x04C4)
368#define SDCC1_AHB_CBCR (0x04C8)
369#define SDCC2_APPS_CMD_RCGR (0x0510)
370#define SDCC2_APPS_CBCR (0x0504)
371#define SDCC2_AHB_CBCR (0x0508)
372#define SDCC3_APPS_CMD_RCGR (0x0550)
373#define SDCC3_APPS_CBCR (0x0544)
374#define SDCC3_AHB_CBCR (0x0548)
375#define BLSP1_AHB_CBCR (0x05C4)
376#define BLSP1_QUP1_SPI_APPS_CBCR (0x0644)
377#define BLSP1_QUP1_I2C_APPS_CBCR (0x0648)
378#define BLSP1_QUP1_I2C_APPS_CMD_RCGR (0x0660)
379#define BLSP1_QUP2_I2C_APPS_CMD_RCGR (0x06E0)
380#define BLSP1_QUP3_I2C_APPS_CMD_RCGR (0x0760)
381#define BLSP1_QUP4_I2C_APPS_CMD_RCGR (0x07E0)
382#define BLSP1_QUP5_I2C_APPS_CMD_RCGR (0x0860)
383#define BLSP1_QUP6_I2C_APPS_CMD_RCGR (0x08E0)
384#define BLSP1_QUP1_SPI_APPS_CMD_RCGR (0x064C)
385#define BLSP1_UART1_APPS_CBCR (0x0684)
386#define BLSP1_UART1_APPS_CMD_RCGR (0x068C)
387#define BLSP1_QUP2_SPI_APPS_CBCR (0x06C4)
388#define BLSP1_QUP2_I2C_APPS_CBCR (0x06C8)
389#define BLSP1_QUP2_SPI_APPS_CMD_RCGR (0x06CC)
390#define BLSP1_UART2_APPS_CBCR (0x0704)
391#define BLSP1_UART2_APPS_CMD_RCGR (0x070C)
392#define BLSP1_QUP3_SPI_APPS_CBCR (0x0744)
393#define BLSP1_QUP3_I2C_APPS_CBCR (0x0748)
394#define BLSP1_QUP3_SPI_APPS_CMD_RCGR (0x074C)
395#define BLSP1_UART3_APPS_CBCR (0x0784)
396#define BLSP1_UART3_APPS_CMD_RCGR (0x078C)
397#define BLSP1_QUP4_SPI_APPS_CBCR (0x07C4)
398#define BLSP1_QUP4_I2C_APPS_CBCR (0x07C8)
399#define BLSP1_QUP4_SPI_APPS_CMD_RCGR (0x07CC)
400#define BLSP1_UART4_APPS_CBCR (0x0804)
401#define BLSP1_UART4_APPS_CMD_RCGR (0x080C)
402#define BLSP1_QUP5_SPI_APPS_CBCR (0x0844)
403#define BLSP1_QUP5_I2C_APPS_CBCR (0x0848)
404#define BLSP1_QUP5_SPI_APPS_CMD_RCGR (0x084C)
405#define BLSP1_UART5_APPS_CBCR (0x0884)
406#define BLSP1_UART5_APPS_CMD_RCGR (0x088C)
407#define BLSP1_QUP6_SPI_APPS_CBCR (0x08C4)
408#define BLSP1_QUP6_I2C_APPS_CBCR (0x08C8)
409#define BLSP1_QUP6_SPI_APPS_CMD_RCGR (0x08CC)
410#define BLSP1_UART6_APPS_CBCR (0x0904)
411#define BLSP1_UART6_APPS_CMD_RCGR (0x090C)
412#define PDM_AHB_CBCR (0x0CC4)
413#define PDM_XO4_CBCR (0x0CC8)
414#define PDM2_CBCR (0x0CCC)
415#define PDM2_CMD_RCGR (0x0CD0)
416#define PRNG_AHB_CBCR (0x0D04)
417#define BAM_DMA_AHB_CBCR (0x0D44)
418#define BOOT_ROM_AHB_CBCR (0x0E04)
419#define CE1_CMD_RCGR (0x1050)
420#define CE1_CBCR (0x1044)
421#define CE1_AXI_CBCR (0x1048)
422#define CE1_AHB_CBCR (0x104C)
423#define GCC_XO_DIV4_CBCR (0x10C8)
424#define LPASS_Q6_AXI_CBCR (0x11C0)
425#define APCS_GPLL_ENA_VOTE (0x1480)
426#define APCS_CLOCK_BRANCH_ENA_VOTE (0x1484)
427#define APCS_CLOCK_SLEEP_ENA_VOTE (0x1488)
428#define GCC_DEBUG_CLK_CTL (0x1880)
429#define CLOCK_FRQ_MEASURE_CTL (0x1884)
430#define CLOCK_FRQ_MEASURE_STATUS (0x1888)
431#define PLLTEST_PAD_CFG (0x188C)
432#define GP1_CBCR (0x1900)
433#define GP1_CMD_RCGR (0x1904)
434#define GP2_CBCR (0x1940)
435#define GP2_CMD_RCGR (0x1944)
436#define GP3_CBCR (0x1980)
437#define GP3_CMD_RCGR (0x1984)
Patrick Dalyeb370ea2012-10-23 11:57:50 -0700438#define Q6SS_BCR (0x6000)
Patrick Dalyeb370ea2012-10-23 11:57:50 -0700439#define Q6SS_AHB_LFABIF_CBCR (0x22000)
440#define Q6SS_AHBM_CBCR (0x22004)
Patrick Dalyeb370ea2012-10-23 11:57:50 -0700441#define Q6SS_XO_CBCR (0x26000)
442
443static unsigned int soft_vote_gpll0;
444
445static struct pll_vote_clk gpll0 = {
446 .en_reg = (void __iomem *)APCS_GPLL_ENA_VOTE,
447 .en_mask = BIT(0),
448 .status_reg = (void __iomem *)GPLL0_STATUS,
449 .status_mask = BIT(17),
450 .soft_vote = &soft_vote_gpll0,
451 .soft_vote_mask = PLL_SOFT_VOTE_PRIMARY,
452 .base = &virt_bases[GCC_BASE],
453 .c = {
454 .rate = 600000000,
455 .parent = &xo.c,
456 .dbg_name = "gpll0",
457 .ops = &clk_ops_pll_acpu_vote,
458 CLK_INIT(gpll0.c),
459 },
460};
461
462/*Don't vote for xo if using this clock to allow xo shutdown*/
463static struct pll_vote_clk gpll0_ao = {
464 .en_reg = (void __iomem *)APCS_GPLL_ENA_VOTE,
465 .en_mask = BIT(0),
466 .status_reg = (void __iomem *)GPLL0_STATUS,
467 .status_mask = BIT(17),
468 .soft_vote = &soft_vote_gpll0,
469 .soft_vote_mask = PLL_SOFT_VOTE_ACPU,
470 .base = &virt_bases[GCC_BASE],
471 .c = {
472 .rate = 600000000,
473 .dbg_name = "gpll0_ao",
474 .ops = &clk_ops_pll_acpu_vote,
475 CLK_INIT(gpll0_ao.c),
476 },
477};
478
479static struct pll_vote_clk gpll1 = {
480 .en_reg = (void __iomem *)APCS_GPLL_ENA_VOTE,
481 .en_mask = BIT(1),
482 .status_reg = (void __iomem *)GPLL1_STATUS,
483 .status_mask = BIT(17),
484 .base = &virt_bases[GCC_BASE],
485 .c = {
486 .rate = 480000000,
487 .parent = &xo.c,
488 .dbg_name = "gpll1",
489 .ops = &clk_ops_pll_vote,
490 CLK_INIT(gpll1.c),
491 },
492};
493
494static struct clk_freq_tbl ftbl_gcc_blsp1_qup1_6_i2c_apps_clk[] = {
Patrick Daly4f832432013-02-26 12:40:49 -0800495 F_GCC( 19200000, xo, 1, 0, 0),
496 F_GCC( 50000000, gpll0, 12, 0, 0),
Patrick Dalyeb370ea2012-10-23 11:57:50 -0700497 F_END
498};
499
500static struct rcg_clk blsp1_qup1_i2c_apps_clk_src = {
501 .cmd_rcgr_reg = BLSP1_QUP1_I2C_APPS_CMD_RCGR,
502 .set_rate = set_rate_hid,
503 .freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
504 .current_freq = &rcg_dummy_freq,
505 .base = &virt_bases[GCC_BASE],
506 .c = {
507 .dbg_name = "blsp1_qup1_i2c_apps_clk_src",
508 .ops = &clk_ops_rcg,
509 VDD_DIG_FMAX_MAP1(LOW, 50000000),
510 CLK_INIT(blsp1_qup1_i2c_apps_clk_src.c),
511 },
512};
513
514static struct clk_freq_tbl ftbl_gcc_blsp1_qup1_6_spi_apps_clk[] = {
515 F_GCC( 960000, xo, 10, 1, 2),
516 F_GCC( 4800000, xo, 4, 0, 0),
517 F_GCC( 9600000, xo, 2, 0, 0),
518 F_GCC( 15000000, gpll0, 10, 1, 4),
519 F_GCC( 19200000, xo, 1, 0, 0),
520 F_GCC( 25000000, gpll0, 12, 1, 2),
521 F_GCC( 50000000, gpll0, 12, 0, 0),
522 F_END
523};
524
525static struct rcg_clk blsp1_qup1_spi_apps_clk_src = {
526 .cmd_rcgr_reg = BLSP1_QUP1_SPI_APPS_CMD_RCGR,
527 .set_rate = set_rate_mnd,
528 .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
529 .current_freq = &rcg_dummy_freq,
530 .base = &virt_bases[GCC_BASE],
531 .c = {
532 .dbg_name = "blsp1_qup1_spi_apps_clk_src",
533 .ops = &clk_ops_rcg_mnd,
534 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
535 CLK_INIT(blsp1_qup1_spi_apps_clk_src.c),
536 },
537};
538
539static struct rcg_clk blsp1_qup2_i2c_apps_clk_src = {
540 .cmd_rcgr_reg = BLSP1_QUP2_I2C_APPS_CMD_RCGR,
541 .set_rate = set_rate_hid,
542 .freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
543 .current_freq = &rcg_dummy_freq,
544 .base = &virt_bases[GCC_BASE],
545 .c = {
546 .dbg_name = "blsp1_qup2_i2c_apps_clk_src",
547 .ops = &clk_ops_rcg,
548 VDD_DIG_FMAX_MAP1(LOW, 50000000),
549 CLK_INIT(blsp1_qup2_i2c_apps_clk_src.c),
550 },
551};
552
553static struct rcg_clk blsp1_qup2_spi_apps_clk_src = {
554 .cmd_rcgr_reg = BLSP1_QUP2_SPI_APPS_CMD_RCGR,
555 .set_rate = set_rate_mnd,
556 .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
557 .current_freq = &rcg_dummy_freq,
558 .base = &virt_bases[GCC_BASE],
559 .c = {
560 .dbg_name = "blsp1_qup2_spi_apps_clk_src",
561 .ops = &clk_ops_rcg_mnd,
562 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
563 CLK_INIT(blsp1_qup2_spi_apps_clk_src.c),
564 },
565};
566
567static struct rcg_clk blsp1_qup3_i2c_apps_clk_src = {
568 .cmd_rcgr_reg = BLSP1_QUP3_I2C_APPS_CMD_RCGR,
569 .set_rate = set_rate_hid,
570 .freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
571 .current_freq = &rcg_dummy_freq,
572 .base = &virt_bases[GCC_BASE],
573 .c = {
574 .dbg_name = "blsp1_qup3_i2c_apps_clk_src",
575 .ops = &clk_ops_rcg,
576 VDD_DIG_FMAX_MAP1(LOW, 50000000),
577 CLK_INIT(blsp1_qup3_i2c_apps_clk_src.c),
578 },
579};
580
581static struct rcg_clk blsp1_qup3_spi_apps_clk_src = {
582 .cmd_rcgr_reg = BLSP1_QUP3_SPI_APPS_CMD_RCGR,
583 .set_rate = set_rate_mnd,
584 .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
585 .current_freq = &rcg_dummy_freq,
586 .base = &virt_bases[GCC_BASE],
587 .c = {
588 .dbg_name = "blsp1_qup3_spi_apps_clk_src",
589 .ops = &clk_ops_rcg_mnd,
590 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
591 CLK_INIT(blsp1_qup3_spi_apps_clk_src.c),
592 },
593};
594
595static struct rcg_clk blsp1_qup4_i2c_apps_clk_src = {
596 .cmd_rcgr_reg = BLSP1_QUP4_I2C_APPS_CMD_RCGR,
597 .set_rate = set_rate_hid,
598 .freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
599 .current_freq = &rcg_dummy_freq,
600 .base = &virt_bases[GCC_BASE],
601 .c = {
602 .dbg_name = "blsp1_qup4_i2c_apps_clk_src",
603 .ops = &clk_ops_rcg,
604 VDD_DIG_FMAX_MAP1(LOW, 50000000),
605 CLK_INIT(blsp1_qup4_i2c_apps_clk_src.c),
606 },
607};
608
609static struct rcg_clk blsp1_qup4_spi_apps_clk_src = {
610 .cmd_rcgr_reg = BLSP1_QUP4_SPI_APPS_CMD_RCGR,
611 .set_rate = set_rate_mnd,
612 .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
613 .current_freq = &rcg_dummy_freq,
614 .base = &virt_bases[GCC_BASE],
615 .c = {
616 .dbg_name = "blsp1_qup4_spi_apps_clk_src",
617 .ops = &clk_ops_rcg_mnd,
618 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
619 CLK_INIT(blsp1_qup4_spi_apps_clk_src.c),
620 },
621};
622
623static struct rcg_clk blsp1_qup5_i2c_apps_clk_src = {
624 .cmd_rcgr_reg = BLSP1_QUP5_I2C_APPS_CMD_RCGR,
625 .set_rate = set_rate_hid,
626 .freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
627 .current_freq = &rcg_dummy_freq,
628 .base = &virt_bases[GCC_BASE],
629 .c = {
630 .dbg_name = "blsp1_qup5_i2c_apps_clk_src",
631 .ops = &clk_ops_rcg,
632 VDD_DIG_FMAX_MAP1(LOW, 50000000),
633 CLK_INIT(blsp1_qup5_i2c_apps_clk_src.c),
634 },
635};
636
637static struct rcg_clk blsp1_qup5_spi_apps_clk_src = {
638 .cmd_rcgr_reg = BLSP1_QUP5_SPI_APPS_CMD_RCGR,
639 .set_rate = set_rate_mnd,
640 .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
641 .current_freq = &rcg_dummy_freq,
642 .base = &virt_bases[GCC_BASE],
643 .c = {
644 .dbg_name = "blsp1_qup5_spi_apps_clk_src",
645 .ops = &clk_ops_rcg_mnd,
646 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
647 CLK_INIT(blsp1_qup5_spi_apps_clk_src.c),
648 },
649};
650
651static struct rcg_clk blsp1_qup6_i2c_apps_clk_src = {
652 .cmd_rcgr_reg = BLSP1_QUP6_I2C_APPS_CMD_RCGR,
653 .set_rate = set_rate_hid,
654 .freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
655 .current_freq = &rcg_dummy_freq,
656 .base = &virt_bases[GCC_BASE],
657 .c = {
658 .dbg_name = "blsp1_qup6_i2c_apps_clk_src",
659 .ops = &clk_ops_rcg,
660 VDD_DIG_FMAX_MAP1(LOW, 50000000),
661 CLK_INIT(blsp1_qup6_i2c_apps_clk_src.c),
662 },
663};
664
665static struct rcg_clk blsp1_qup6_spi_apps_clk_src = {
666 .cmd_rcgr_reg = BLSP1_QUP6_SPI_APPS_CMD_RCGR,
667 .set_rate = set_rate_mnd,
668 .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
669 .current_freq = &rcg_dummy_freq,
670 .base = &virt_bases[GCC_BASE],
671 .c = {
672 .dbg_name = "blsp1_qup6_spi_apps_clk_src",
673 .ops = &clk_ops_rcg_mnd,
674 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
675 CLK_INIT(blsp1_qup6_spi_apps_clk_src.c),
676 },
677};
678
679static struct clk_freq_tbl ftbl_gcc_blsp1_uart1_6_apps_clk[] = {
680 F_GCC( 3686400, gpll0, 1, 96, 15625),
681 F_GCC( 7372800, gpll0, 1, 192, 15625),
682 F_GCC( 14745600, gpll0, 1, 384, 15625),
683 F_GCC( 16000000, gpll0, 5, 2, 15),
684 F_GCC( 19200000, xo, 1, 0, 0),
685 F_GCC( 24000000, gpll0, 5, 1, 5),
686 F_GCC( 32000000, gpll0, 1, 4, 75),
687 F_GCC( 40000000, gpll0, 15, 0, 0),
688 F_GCC( 46400000, gpll0, 1, 29, 375),
689 F_GCC( 48000000, gpll0, 12.5, 0, 0),
690 F_GCC( 51200000, gpll0, 1, 32, 375),
691 F_GCC( 56000000, gpll0, 1, 7, 75),
692 F_GCC( 58982400, gpll0, 1, 1536, 15625),
693 F_GCC( 60000000, gpll0, 10, 0, 0),
694 F_END
695};
696
697static struct rcg_clk blsp1_uart1_apps_clk_src = {
698 .cmd_rcgr_reg = BLSP1_UART1_APPS_CMD_RCGR,
699 .set_rate = set_rate_mnd,
700 .freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
701 .current_freq = &rcg_dummy_freq,
702 .base = &virt_bases[GCC_BASE],
703 .c = {
704 .dbg_name = "blsp1_uart1_apps_clk_src",
705 .ops = &clk_ops_rcg_mnd,
706 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
707 CLK_INIT(blsp1_uart1_apps_clk_src.c),
708 },
709};
710
711static struct rcg_clk blsp1_uart2_apps_clk_src = {
712 .cmd_rcgr_reg = BLSP1_UART2_APPS_CMD_RCGR,
713 .set_rate = set_rate_mnd,
714 .freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
715 .current_freq = &rcg_dummy_freq,
716 .base = &virt_bases[GCC_BASE],
717 .c = {
718 .dbg_name = "blsp1_uart2_apps_clk_src",
719 .ops = &clk_ops_rcg_mnd,
720 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
721 CLK_INIT(blsp1_uart2_apps_clk_src.c),
722 },
723};
724
725static struct rcg_clk blsp1_uart3_apps_clk_src = {
726 .cmd_rcgr_reg = BLSP1_UART3_APPS_CMD_RCGR,
727 .set_rate = set_rate_mnd,
728 .freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
729 .current_freq = &rcg_dummy_freq,
730 .base = &virt_bases[GCC_BASE],
731 .c = {
732 .dbg_name = "blsp1_uart3_apps_clk_src",
733 .ops = &clk_ops_rcg_mnd,
734 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
735 CLK_INIT(blsp1_uart3_apps_clk_src.c),
736 },
737};
738
739static struct rcg_clk blsp1_uart4_apps_clk_src = {
740 .cmd_rcgr_reg = BLSP1_UART4_APPS_CMD_RCGR,
741 .set_rate = set_rate_mnd,
742 .freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
743 .current_freq = &rcg_dummy_freq,
744 .base = &virt_bases[GCC_BASE],
745 .c = {
746 .dbg_name = "blsp1_uart4_apps_clk_src",
747 .ops = &clk_ops_rcg_mnd,
748 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
749 CLK_INIT(blsp1_uart4_apps_clk_src.c),
750 },
751};
752
753static struct rcg_clk blsp1_uart5_apps_clk_src = {
754 .cmd_rcgr_reg = BLSP1_UART5_APPS_CMD_RCGR,
755 .set_rate = set_rate_mnd,
756 .freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
757 .current_freq = &rcg_dummy_freq,
758 .base = &virt_bases[GCC_BASE],
759 .c = {
760 .dbg_name = "blsp1_uart5_apps_clk_src",
761 .ops = &clk_ops_rcg_mnd,
762 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
763 CLK_INIT(blsp1_uart5_apps_clk_src.c),
764 },
765};
766
767static struct rcg_clk blsp1_uart6_apps_clk_src = {
768 .cmd_rcgr_reg = BLSP1_UART6_APPS_CMD_RCGR,
769 .set_rate = set_rate_mnd,
770 .freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
771 .current_freq = &rcg_dummy_freq,
772 .base = &virt_bases[GCC_BASE],
773 .c = {
774 .dbg_name = "blsp1_uart6_apps_clk_src",
775 .ops = &clk_ops_rcg_mnd,
776 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
777 CLK_INIT(blsp1_uart6_apps_clk_src.c),
778 },
779};
780
781static struct clk_freq_tbl ftbl_gcc_ce1_clk[] = {
782 F_GCC( 50000000, gpll0, 12, 0, 0),
783 F_GCC( 100000000, gpll0, 6, 0, 0),
784 F_END
785};
786
787static struct rcg_clk ce1_clk_src = {
788 .cmd_rcgr_reg = CE1_CMD_RCGR,
789 .set_rate = set_rate_hid,
790 .freq_tbl = ftbl_gcc_ce1_clk,
791 .current_freq = &rcg_dummy_freq,
792 .base = &virt_bases[GCC_BASE],
793 .c = {
794 .dbg_name = "ce1_clk_src",
795 .ops = &clk_ops_rcg,
796 VDD_DIG_FMAX_MAP2(LOW, 50000000, NOMINAL, 100000000),
797 CLK_INIT(ce1_clk_src.c),
798 },
799};
800
801static struct clk_freq_tbl ftbl_gcc_gp1_3_clk[] = {
802 F_GCC( 19200000, xo, 1, 0, 0),
803 F_END
804};
805
806static struct rcg_clk gp1_clk_src = {
807 .cmd_rcgr_reg = GP1_CMD_RCGR,
808 .set_rate = set_rate_mnd,
809 .freq_tbl = ftbl_gcc_gp1_3_clk,
810 .current_freq = &rcg_dummy_freq,
811 .base = &virt_bases[GCC_BASE],
812 .c = {
813 .dbg_name = "gp1_clk_src",
814 .ops = &clk_ops_rcg_mnd,
815 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
816 CLK_INIT(gp1_clk_src.c),
817 },
818};
819
820static struct rcg_clk gp2_clk_src = {
821 .cmd_rcgr_reg = GP2_CMD_RCGR,
822 .set_rate = set_rate_mnd,
823 .freq_tbl = ftbl_gcc_gp1_3_clk,
824 .current_freq = &rcg_dummy_freq,
825 .base = &virt_bases[GCC_BASE],
826 .c = {
827 .dbg_name = "gp2_clk_src",
828 .ops = &clk_ops_rcg_mnd,
829 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
830 CLK_INIT(gp2_clk_src.c),
831 },
832};
833
834static struct rcg_clk gp3_clk_src = {
835 .cmd_rcgr_reg = GP3_CMD_RCGR,
836 .set_rate = set_rate_mnd,
837 .freq_tbl = ftbl_gcc_gp1_3_clk,
838 .current_freq = &rcg_dummy_freq,
839 .base = &virt_bases[GCC_BASE],
840 .c = {
841 .dbg_name = "gp3_clk_src",
842 .ops = &clk_ops_rcg_mnd,
843 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
844 CLK_INIT(gp3_clk_src.c),
845 },
846};
847
848static struct clk_freq_tbl ftbl_gcc_pdm2_clk[] = {
849 F_GCC( 60000000, gpll0, 10, 0, 0),
850 F_END
851};
852
853static struct rcg_clk pdm2_clk_src = {
854 .cmd_rcgr_reg = PDM2_CMD_RCGR,
855 .set_rate = set_rate_hid,
856 .freq_tbl = ftbl_gcc_pdm2_clk,
857 .current_freq = &rcg_dummy_freq,
858 .base = &virt_bases[GCC_BASE],
859 .c = {
860 .dbg_name = "pdm2_clk_src",
861 .ops = &clk_ops_rcg,
862 VDD_DIG_FMAX_MAP1(LOW, 60000000),
863 CLK_INIT(pdm2_clk_src.c),
864 },
865};
866
867static struct clk_freq_tbl ftbl_gcc_sdcc1_3_apps_clk[] = {
868 F_GCC( 144000, xo, 16, 3, 25),
869 F_GCC( 400000, xo, 12, 1, 4),
870 F_GCC( 20000000, gpll0, 15, 1, 2),
871 F_GCC( 25000000, gpll0, 12, 1, 2),
872 F_GCC( 50000000, gpll0, 12, 0, 0),
873 F_GCC( 100000000, gpll0, 6, 0, 0),
874 F_GCC( 200000000, gpll0, 3, 0, 0),
875 F_END
876};
877
878static struct rcg_clk sdcc1_apps_clk_src = {
879 .cmd_rcgr_reg = SDCC1_APPS_CMD_RCGR,
880 .set_rate = set_rate_mnd,
881 .freq_tbl = ftbl_gcc_sdcc1_3_apps_clk,
882 .current_freq = &rcg_dummy_freq,
883 .base = &virt_bases[GCC_BASE],
884 .c = {
885 .dbg_name = "sdcc1_apps_clk_src",
886 .ops = &clk_ops_rcg_mnd,
887 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
888 CLK_INIT(sdcc1_apps_clk_src.c),
889 },
890};
891
892static struct rcg_clk sdcc2_apps_clk_src = {
893 .cmd_rcgr_reg = SDCC2_APPS_CMD_RCGR,
894 .set_rate = set_rate_mnd,
895 .freq_tbl = ftbl_gcc_sdcc1_3_apps_clk,
896 .current_freq = &rcg_dummy_freq,
897 .base = &virt_bases[GCC_BASE],
898 .c = {
899 .dbg_name = "sdcc2_apps_clk_src",
900 .ops = &clk_ops_rcg_mnd,
901 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
902 CLK_INIT(sdcc2_apps_clk_src.c),
903 },
904};
905
906static struct rcg_clk sdcc3_apps_clk_src = {
907 .cmd_rcgr_reg = SDCC3_APPS_CMD_RCGR,
908 .set_rate = set_rate_mnd,
909 .freq_tbl = ftbl_gcc_sdcc1_3_apps_clk,
910 .current_freq = &rcg_dummy_freq,
911 .base = &virt_bases[GCC_BASE],
912 .c = {
913 .dbg_name = "sdcc3_apps_clk_src",
914 .ops = &clk_ops_rcg_mnd,
915 VDD_DIG_FMAX_MAP2(LOW, 50000000, NOMINAL, 100000000),
916 CLK_INIT(sdcc3_apps_clk_src.c),
917 },
918};
919
920static struct clk_freq_tbl ftbl_gcc_usb_hs_system_clk[] = {
921 F_GCC( 75000000, gpll0, 8, 0, 0),
922 F_END
923};
924
925static struct rcg_clk usb_hs_system_clk_src = {
926 .cmd_rcgr_reg = USB_HS_SYSTEM_CMD_RCGR,
927 .set_rate = set_rate_hid,
928 .freq_tbl = ftbl_gcc_usb_hs_system_clk,
929 .current_freq = &rcg_dummy_freq,
930 .base = &virt_bases[GCC_BASE],
931 .c = {
932 .dbg_name = "usb_hs_system_clk_src",
933 .ops = &clk_ops_rcg,
934 VDD_DIG_FMAX_MAP2(LOW, 37500000, NOMINAL, 75000000),
935 CLK_INIT(usb_hs_system_clk_src.c),
936 },
937};
938
939static struct clk_freq_tbl ftbl_gcc_usb_hsic_clk[] = {
940 F_HSIC( 480000000, gpll1, 0, 0, 0),
941 F_END
942};
943
944static struct rcg_clk usb_hsic_clk_src = {
945 .cmd_rcgr_reg = USB_HSIC_CMD_RCGR,
946 .set_rate = set_rate_hid,
947 .freq_tbl = ftbl_gcc_usb_hsic_clk,
948 .current_freq = &rcg_dummy_freq,
949 .base = &virt_bases[GCC_BASE],
950 .c = {
951 .dbg_name = "usb_hsic_clk_src",
952 .ops = &clk_ops_rcg,
953 VDD_DIG_FMAX_MAP1(LOW, 480000000),
954 CLK_INIT(usb_hsic_clk_src.c),
955 },
956};
957
958static struct clk_freq_tbl ftbl_gcc_usb_hsic_io_cal_clk[] = {
959 F_GCC( 9600000, xo, 2, 0, 0),
960 F_END
961};
962
963static struct rcg_clk usb_hsic_io_cal_clk_src = {
964 .cmd_rcgr_reg = USB_HSIC_IO_CAL_CMD_RCGR,
965 .set_rate = set_rate_hid,
966 .freq_tbl = ftbl_gcc_usb_hsic_io_cal_clk,
967 .current_freq = &rcg_dummy_freq,
968 .base = &virt_bases[GCC_BASE],
969 .c = {
970 .dbg_name = "usb_hsic_io_cal_clk_src",
971 .ops = &clk_ops_rcg,
972 VDD_DIG_FMAX_MAP1(LOW, 9600000),
973 CLK_INIT(usb_hsic_io_cal_clk_src.c),
974 },
975};
976
977static struct clk_freq_tbl ftbl_gcc_usb_hsic_system_clk[] = {
978 F_GCC( 75000000, gpll0, 8, 0, 0),
979 F_END
980};
981
982static struct rcg_clk usb_hsic_system_clk_src = {
983 .cmd_rcgr_reg = USB_HSIC_SYSTEM_CMD_RCGR,
984 .set_rate = set_rate_hid,
985 .freq_tbl = ftbl_gcc_usb_hsic_system_clk,
986 .current_freq = &rcg_dummy_freq,
987 .base = &virt_bases[GCC_BASE],
988 .c = {
989 .dbg_name = "usb_hsic_system_clk_src",
990 .ops = &clk_ops_rcg,
991 VDD_DIG_FMAX_MAP2(LOW, 37500000, NOMINAL, 75000000),
992 CLK_INIT(usb_hsic_system_clk_src.c),
993 },
994};
995
996static struct local_vote_clk gcc_bam_dma_ahb_clk = {
997 .cbcr_reg = BAM_DMA_AHB_CBCR,
998 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
999 .en_mask = BIT(12),
1000 .base = &virt_bases[GCC_BASE],
1001 .c = {
1002 .dbg_name = "gcc_bam_dma_ahb_clk",
1003 .ops = &clk_ops_vote,
1004 CLK_INIT(gcc_bam_dma_ahb_clk.c),
1005 },
1006};
1007
1008static struct local_vote_clk gcc_blsp1_ahb_clk = {
1009 .cbcr_reg = BLSP1_AHB_CBCR,
1010 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
1011 .en_mask = BIT(17),
1012 .base = &virt_bases[GCC_BASE],
1013 .c = {
1014 .dbg_name = "gcc_blsp1_ahb_clk",
1015 .ops = &clk_ops_vote,
1016 CLK_INIT(gcc_blsp1_ahb_clk.c),
1017 },
1018};
1019
1020static struct branch_clk gcc_blsp1_qup1_i2c_apps_clk = {
1021 .cbcr_reg = BLSP1_QUP1_I2C_APPS_CBCR,
1022 .has_sibling = 0,
1023 .base = &virt_bases[GCC_BASE],
1024 .c = {
1025 .dbg_name = "gcc_blsp1_qup1_i2c_apps_clk",
1026 .parent = &blsp1_qup1_i2c_apps_clk_src.c,
1027 .ops = &clk_ops_branch,
1028 CLK_INIT(gcc_blsp1_qup1_i2c_apps_clk.c),
1029 },
1030};
1031
1032static struct branch_clk gcc_blsp1_qup1_spi_apps_clk = {
1033 .cbcr_reg = BLSP1_QUP1_SPI_APPS_CBCR,
1034 .has_sibling = 0,
1035 .base = &virt_bases[GCC_BASE],
1036 .c = {
1037 .dbg_name = "gcc_blsp1_qup1_spi_apps_clk",
1038 .parent = &blsp1_qup1_spi_apps_clk_src.c,
1039 .ops = &clk_ops_branch,
1040 CLK_INIT(gcc_blsp1_qup1_spi_apps_clk.c),
1041 },
1042};
1043
1044static struct branch_clk gcc_blsp1_qup2_i2c_apps_clk = {
1045 .cbcr_reg = BLSP1_QUP2_I2C_APPS_CBCR,
1046 .has_sibling = 0,
1047 .base = &virt_bases[GCC_BASE],
1048 .c = {
1049 .dbg_name = "gcc_blsp1_qup2_i2c_apps_clk",
1050 .parent = &blsp1_qup2_i2c_apps_clk_src.c,
1051 .ops = &clk_ops_branch,
1052 CLK_INIT(gcc_blsp1_qup2_i2c_apps_clk.c),
1053 },
1054};
1055
1056static struct branch_clk gcc_blsp1_qup2_spi_apps_clk = {
1057 .cbcr_reg = BLSP1_QUP2_SPI_APPS_CBCR,
1058 .has_sibling = 0,
1059 .base = &virt_bases[GCC_BASE],
1060 .c = {
1061 .dbg_name = "gcc_blsp1_qup2_spi_apps_clk",
1062 .parent = &blsp1_qup2_spi_apps_clk_src.c,
1063 .ops = &clk_ops_branch,
1064 CLK_INIT(gcc_blsp1_qup2_spi_apps_clk.c),
1065 },
1066};
1067
1068static struct branch_clk gcc_blsp1_qup3_i2c_apps_clk = {
1069 .cbcr_reg = BLSP1_QUP3_I2C_APPS_CBCR,
1070 .has_sibling = 0,
1071 .base = &virt_bases[GCC_BASE],
1072 .c = {
1073 .dbg_name = "gcc_blsp1_qup3_i2c_apps_clk",
1074 .parent = &blsp1_qup3_i2c_apps_clk_src.c,
1075 .ops = &clk_ops_branch,
1076 CLK_INIT(gcc_blsp1_qup3_i2c_apps_clk.c),
1077 },
1078};
1079
1080static struct branch_clk gcc_blsp1_qup3_spi_apps_clk = {
1081 .cbcr_reg = BLSP1_QUP3_SPI_APPS_CBCR,
1082 .has_sibling = 0,
1083 .base = &virt_bases[GCC_BASE],
1084 .c = {
1085 .dbg_name = "gcc_blsp1_qup3_spi_apps_clk",
1086 .parent = &blsp1_qup3_spi_apps_clk_src.c,
1087 .ops = &clk_ops_branch,
1088 CLK_INIT(gcc_blsp1_qup3_spi_apps_clk.c),
1089 },
1090};
1091
1092static struct branch_clk gcc_blsp1_qup4_i2c_apps_clk = {
1093 .cbcr_reg = BLSP1_QUP4_I2C_APPS_CBCR,
1094 .has_sibling = 0,
1095 .base = &virt_bases[GCC_BASE],
1096 .c = {
1097 .dbg_name = "gcc_blsp1_qup4_i2c_apps_clk",
1098 .parent = &blsp1_qup4_i2c_apps_clk_src.c,
1099 .ops = &clk_ops_branch,
1100 CLK_INIT(gcc_blsp1_qup4_i2c_apps_clk.c),
1101 },
1102};
1103
1104static struct branch_clk gcc_blsp1_qup4_spi_apps_clk = {
1105 .cbcr_reg = BLSP1_QUP4_SPI_APPS_CBCR,
1106 .has_sibling = 0,
1107 .base = &virt_bases[GCC_BASE],
1108 .c = {
1109 .dbg_name = "gcc_blsp1_qup4_spi_apps_clk",
1110 .parent = &blsp1_qup4_spi_apps_clk_src.c,
1111 .ops = &clk_ops_branch,
1112 CLK_INIT(gcc_blsp1_qup4_spi_apps_clk.c),
1113 },
1114};
1115
1116static struct branch_clk gcc_blsp1_qup5_i2c_apps_clk = {
1117 .cbcr_reg = BLSP1_QUP5_I2C_APPS_CBCR,
1118 .has_sibling = 0,
1119 .base = &virt_bases[GCC_BASE],
1120 .c = {
1121 .dbg_name = "gcc_blsp1_qup5_i2c_apps_clk",
1122 .parent = &blsp1_qup5_i2c_apps_clk_src.c,
1123 .ops = &clk_ops_branch,
1124 CLK_INIT(gcc_blsp1_qup5_i2c_apps_clk.c),
1125 },
1126};
1127
1128static struct branch_clk gcc_blsp1_qup5_spi_apps_clk = {
1129 .cbcr_reg = BLSP1_QUP5_SPI_APPS_CBCR,
1130 .has_sibling = 0,
1131 .base = &virt_bases[GCC_BASE],
1132 .c = {
1133 .dbg_name = "gcc_blsp1_qup5_spi_apps_clk",
1134 .parent = &blsp1_qup5_spi_apps_clk_src.c,
1135 .ops = &clk_ops_branch,
1136 CLK_INIT(gcc_blsp1_qup5_spi_apps_clk.c),
1137 },
1138};
1139
1140static struct branch_clk gcc_blsp1_qup6_i2c_apps_clk = {
1141 .cbcr_reg = BLSP1_QUP6_I2C_APPS_CBCR,
1142 .has_sibling = 0,
1143 .base = &virt_bases[GCC_BASE],
1144 .c = {
1145 .dbg_name = "gcc_blsp1_qup6_i2c_apps_clk",
1146 .parent = &blsp1_qup6_i2c_apps_clk_src.c,
1147 .ops = &clk_ops_branch,
1148 CLK_INIT(gcc_blsp1_qup6_i2c_apps_clk.c),
1149 },
1150};
1151
1152static struct branch_clk gcc_blsp1_qup6_spi_apps_clk = {
1153 .cbcr_reg = BLSP1_QUP6_SPI_APPS_CBCR,
1154 .has_sibling = 0,
1155 .base = &virt_bases[GCC_BASE],
1156 .c = {
1157 .dbg_name = "gcc_blsp1_qup6_spi_apps_clk",
1158 .parent = &blsp1_qup6_spi_apps_clk_src.c,
1159 .ops = &clk_ops_branch,
1160 CLK_INIT(gcc_blsp1_qup6_spi_apps_clk.c),
1161 },
1162};
1163
1164static struct branch_clk gcc_blsp1_uart1_apps_clk = {
1165 .cbcr_reg = BLSP1_UART1_APPS_CBCR,
1166 .has_sibling = 0,
1167 .base = &virt_bases[GCC_BASE],
1168 .c = {
1169 .dbg_name = "gcc_blsp1_uart1_apps_clk",
1170 .parent = &blsp1_uart1_apps_clk_src.c,
1171 .ops = &clk_ops_branch,
1172 CLK_INIT(gcc_blsp1_uart1_apps_clk.c),
1173 },
1174};
1175
1176static struct branch_clk gcc_blsp1_uart2_apps_clk = {
1177 .cbcr_reg = BLSP1_UART2_APPS_CBCR,
1178 .has_sibling = 0,
1179 .base = &virt_bases[GCC_BASE],
1180 .c = {
1181 .dbg_name = "gcc_blsp1_uart2_apps_clk",
1182 .parent = &blsp1_uart2_apps_clk_src.c,
1183 .ops = &clk_ops_branch,
1184 CLK_INIT(gcc_blsp1_uart2_apps_clk.c),
1185 },
1186};
1187
1188static struct branch_clk gcc_blsp1_uart3_apps_clk = {
1189 .cbcr_reg = BLSP1_UART3_APPS_CBCR,
1190 .has_sibling = 0,
1191 .base = &virt_bases[GCC_BASE],
1192 .c = {
1193 .dbg_name = "gcc_blsp1_uart3_apps_clk",
1194 .parent = &blsp1_uart3_apps_clk_src.c,
1195 .ops = &clk_ops_branch,
1196 CLK_INIT(gcc_blsp1_uart3_apps_clk.c),
1197 },
1198};
1199
1200static struct branch_clk gcc_blsp1_uart4_apps_clk = {
1201 .cbcr_reg = BLSP1_UART4_APPS_CBCR,
1202 .has_sibling = 0,
1203 .base = &virt_bases[GCC_BASE],
1204 .c = {
1205 .dbg_name = "gcc_blsp1_uart4_apps_clk",
1206 .parent = &blsp1_uart4_apps_clk_src.c,
1207 .ops = &clk_ops_branch,
1208 CLK_INIT(gcc_blsp1_uart4_apps_clk.c),
1209 },
1210};
1211
1212static struct branch_clk gcc_blsp1_uart5_apps_clk = {
1213 .cbcr_reg = BLSP1_UART5_APPS_CBCR,
1214 .has_sibling = 0,
1215 .base = &virt_bases[GCC_BASE],
1216 .c = {
1217 .dbg_name = "gcc_blsp1_uart5_apps_clk",
1218 .parent = &blsp1_uart5_apps_clk_src.c,
1219 .ops = &clk_ops_branch,
1220 CLK_INIT(gcc_blsp1_uart5_apps_clk.c),
1221 },
1222};
1223
1224static struct branch_clk gcc_blsp1_uart6_apps_clk = {
1225 .cbcr_reg = BLSP1_UART6_APPS_CBCR,
1226 .has_sibling = 0,
1227 .base = &virt_bases[GCC_BASE],
1228 .c = {
1229 .dbg_name = "gcc_blsp1_uart6_apps_clk",
1230 .parent = &blsp1_uart6_apps_clk_src.c,
1231 .ops = &clk_ops_branch,
1232 CLK_INIT(gcc_blsp1_uart6_apps_clk.c),
1233 },
1234};
1235
1236static struct local_vote_clk gcc_boot_rom_ahb_clk = {
1237 .cbcr_reg = BOOT_ROM_AHB_CBCR,
1238 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
1239 .en_mask = BIT(10),
1240 .base = &virt_bases[GCC_BASE],
1241 .c = {
1242 .dbg_name = "gcc_boot_rom_ahb_clk",
1243 .ops = &clk_ops_vote,
1244 CLK_INIT(gcc_boot_rom_ahb_clk.c),
1245 },
1246};
1247
1248static struct local_vote_clk gcc_ce1_ahb_clk = {
1249 .cbcr_reg = CE1_AHB_CBCR,
1250 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
1251 .en_mask = BIT(3),
1252 .base = &virt_bases[GCC_BASE],
1253 .c = {
1254 .dbg_name = "gcc_ce1_ahb_clk",
1255 .ops = &clk_ops_vote,
1256 CLK_INIT(gcc_ce1_ahb_clk.c),
1257 },
1258};
1259
1260static struct local_vote_clk gcc_ce1_axi_clk = {
1261 .cbcr_reg = CE1_AXI_CBCR,
1262 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
1263 .en_mask = BIT(4),
1264 .base = &virt_bases[GCC_BASE],
1265 .c = {
1266 .dbg_name = "gcc_ce1_axi_clk",
1267 .ops = &clk_ops_vote,
1268 CLK_INIT(gcc_ce1_axi_clk.c),
1269 },
1270};
1271
1272static struct local_vote_clk gcc_ce1_clk = {
1273 .cbcr_reg = CE1_CBCR,
1274 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
1275 .en_mask = BIT(5),
1276 .base = &virt_bases[GCC_BASE],
1277 .c = {
1278 .dbg_name = "gcc_ce1_clk",
1279 .ops = &clk_ops_vote,
1280 CLK_INIT(gcc_ce1_clk.c),
1281 },
1282};
1283
1284static struct branch_clk gcc_gp1_clk = {
1285 .cbcr_reg = GP1_CBCR,
1286 .has_sibling = 0,
1287 .base = &virt_bases[GCC_BASE],
1288 .c = {
1289 .dbg_name = "gcc_gp1_clk",
1290 .parent = &gp1_clk_src.c,
1291 .ops = &clk_ops_branch,
1292 CLK_INIT(gcc_gp1_clk.c),
1293 },
1294};
1295
1296static struct branch_clk gcc_gp2_clk = {
1297 .cbcr_reg = GP2_CBCR,
1298 .has_sibling = 0,
1299 .base = &virt_bases[GCC_BASE],
1300 .c = {
1301 .dbg_name = "gcc_gp2_clk",
1302 .parent = &gp2_clk_src.c,
1303 .ops = &clk_ops_branch,
1304 CLK_INIT(gcc_gp2_clk.c),
1305 },
1306};
1307
1308static struct branch_clk gcc_gp3_clk = {
1309 .cbcr_reg = GP3_CBCR,
1310 .has_sibling = 0,
1311 .base = &virt_bases[GCC_BASE],
1312 .c = {
1313 .dbg_name = "gcc_gp3_clk",
1314 .parent = &gp3_clk_src.c,
1315 .ops = &clk_ops_branch,
1316 CLK_INIT(gcc_gp3_clk.c),
1317 },
1318};
1319
1320static struct branch_clk gcc_lpass_q6_axi_clk = {
1321 .cbcr_reg = LPASS_Q6_AXI_CBCR,
1322 .has_sibling = 1,
1323 .base = &virt_bases[GCC_BASE],
1324 .c = {
1325 .dbg_name = "gcc_lpass_q6_axi_clk",
1326 .ops = &clk_ops_branch,
1327 CLK_INIT(gcc_lpass_q6_axi_clk.c),
1328 },
1329};
1330
Patrick Dalyeb370ea2012-10-23 11:57:50 -07001331static struct branch_clk gcc_mss_cfg_ahb_clk = {
1332 .cbcr_reg = MSS_CFG_AHB_CBCR,
1333 .has_sibling = 1,
1334 .base = &virt_bases[GCC_BASE],
1335 .c = {
1336 .dbg_name = "gcc_mss_cfg_ahb_clk",
1337 .ops = &clk_ops_branch,
1338 CLK_INIT(gcc_mss_cfg_ahb_clk.c),
1339 },
1340};
1341
1342static struct branch_clk gcc_mss_q6_bimc_axi_clk = {
1343 .cbcr_reg = MSS_Q6_BIMC_AXI_CBCR,
1344 .has_sibling = 1,
1345 .base = &virt_bases[GCC_BASE],
1346 .c = {
1347 .dbg_name = "gcc_mss_q6_bimc_axi_clk",
1348 .ops = &clk_ops_branch,
1349 CLK_INIT(gcc_mss_q6_bimc_axi_clk.c),
1350 },
1351};
1352
Patrick Dalyeb370ea2012-10-23 11:57:50 -07001353static struct branch_clk gcc_pdm2_clk = {
1354 .cbcr_reg = PDM2_CBCR,
1355 .has_sibling = 0,
1356 .base = &virt_bases[GCC_BASE],
1357 .c = {
1358 .dbg_name = "gcc_pdm2_clk",
1359 .parent = &pdm2_clk_src.c,
1360 .ops = &clk_ops_branch,
1361 CLK_INIT(gcc_pdm2_clk.c),
1362 },
1363};
1364
1365static struct branch_clk gcc_pdm_ahb_clk = {
1366 .cbcr_reg = PDM_AHB_CBCR,
1367 .has_sibling = 1,
1368 .base = &virt_bases[GCC_BASE],
1369 .c = {
1370 .dbg_name = "gcc_pdm_ahb_clk",
1371 .ops = &clk_ops_branch,
1372 CLK_INIT(gcc_pdm_ahb_clk.c),
1373 },
1374};
1375
1376static struct branch_clk gcc_pdm_xo4_clk = {
1377 .cbcr_reg = PDM_XO4_CBCR,
1378 .has_sibling = 1,
1379 .base = &virt_bases[GCC_BASE],
1380 .c = {
1381 .dbg_name = "gcc_pdm_xo4_clk",
1382 .parent = &xo.c,
1383 .ops = &clk_ops_branch,
1384 CLK_INIT(gcc_pdm_xo4_clk.c),
1385 },
1386};
1387
1388static struct branch_clk gcc_periph_noc_ahb_clk = {
1389 .cbcr_reg = PERIPH_NOC_AHB_CBCR,
1390 .has_sibling = 1,
1391 .base = &virt_bases[GCC_BASE],
1392 .c = {
1393 .dbg_name = "gcc_periph_noc_ahb_clk",
1394 .ops = &clk_ops_branch,
1395 CLK_INIT(gcc_periph_noc_ahb_clk.c),
1396 },
1397};
1398
1399static struct local_vote_clk gcc_prng_ahb_clk = {
1400 .cbcr_reg = PRNG_AHB_CBCR,
1401 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
1402 .en_mask = BIT(13),
1403 .base = &virt_bases[GCC_BASE],
1404 .c = {
1405 .dbg_name = "gcc_prng_ahb_clk",
1406 .ops = &clk_ops_vote,
1407 CLK_INIT(gcc_prng_ahb_clk.c),
1408 },
1409};
1410
1411static struct branch_clk gcc_sdcc1_ahb_clk = {
1412 .cbcr_reg = SDCC1_AHB_CBCR,
1413 .has_sibling = 1,
1414 .base = &virt_bases[GCC_BASE],
1415 .c = {
1416 .dbg_name = "gcc_sdcc1_ahb_clk",
1417 .ops = &clk_ops_branch,
1418 CLK_INIT(gcc_sdcc1_ahb_clk.c),
1419 },
1420};
1421
1422static struct branch_clk gcc_sdcc1_apps_clk = {
1423 .cbcr_reg = SDCC1_APPS_CBCR,
1424 .has_sibling = 0,
1425 .base = &virt_bases[GCC_BASE],
1426 .c = {
1427 .dbg_name = "gcc_sdcc1_apps_clk",
1428 .parent = &sdcc1_apps_clk_src.c,
1429 .ops = &clk_ops_branch,
1430 CLK_INIT(gcc_sdcc1_apps_clk.c),
1431 },
1432};
1433
1434static struct branch_clk gcc_sdcc2_ahb_clk = {
1435 .cbcr_reg = SDCC2_AHB_CBCR,
1436 .has_sibling = 1,
1437 .base = &virt_bases[GCC_BASE],
1438 .c = {
1439 .dbg_name = "gcc_sdcc2_ahb_clk",
1440 .ops = &clk_ops_branch,
1441 CLK_INIT(gcc_sdcc2_ahb_clk.c),
1442 },
1443};
1444
1445static struct branch_clk gcc_sdcc2_apps_clk = {
1446 .cbcr_reg = SDCC2_APPS_CBCR,
1447 .has_sibling = 0,
1448 .base = &virt_bases[GCC_BASE],
1449 .c = {
1450 .dbg_name = "gcc_sdcc2_apps_clk",
1451 .parent = &sdcc2_apps_clk_src.c,
1452 .ops = &clk_ops_branch,
1453 CLK_INIT(gcc_sdcc2_apps_clk.c),
1454 },
1455};
1456
1457static struct branch_clk gcc_sdcc3_ahb_clk = {
1458 .cbcr_reg = SDCC3_AHB_CBCR,
1459 .has_sibling = 1,
1460 .base = &virt_bases[GCC_BASE],
1461 .c = {
1462 .dbg_name = "gcc_sdcc3_ahb_clk",
1463 .ops = &clk_ops_branch,
1464 CLK_INIT(gcc_sdcc3_ahb_clk.c),
1465 },
1466};
1467
1468static struct branch_clk gcc_sdcc3_apps_clk = {
1469 .cbcr_reg = SDCC3_APPS_CBCR,
1470 .has_sibling = 0,
1471 .base = &virt_bases[GCC_BASE],
1472 .c = {
1473 .dbg_name = "gcc_sdcc3_apps_clk",
1474 .parent = &sdcc3_apps_clk_src.c,
1475 .ops = &clk_ops_branch,
1476 CLK_INIT(gcc_sdcc3_apps_clk.c),
1477 },
1478};
1479
1480static struct branch_clk gcc_usb2a_phy_sleep_clk = {
1481 .cbcr_reg = USB2A_PHY_SLEEP_CBCR,
1482 .has_sibling = 1,
1483 .base = &virt_bases[GCC_BASE],
1484 .c = {
1485 .dbg_name = "gcc_usb2a_phy_sleep_clk",
1486 .ops = &clk_ops_branch,
1487 CLK_INIT(gcc_usb2a_phy_sleep_clk.c),
1488 },
1489};
1490
1491static struct branch_clk gcc_usb_hs_ahb_clk = {
1492 .cbcr_reg = USB_HS_AHB_CBCR,
1493 .has_sibling = 1,
1494 .base = &virt_bases[GCC_BASE],
1495 .c = {
1496 .dbg_name = "gcc_usb_hs_ahb_clk",
1497 .ops = &clk_ops_branch,
1498 CLK_INIT(gcc_usb_hs_ahb_clk.c),
1499 },
1500};
1501
1502static struct branch_clk gcc_usb_hs_system_clk = {
1503 .cbcr_reg = USB_HS_SYSTEM_CBCR,
1504 .has_sibling = 0,
1505 .bcr_reg = USB_HS_BCR,
1506 .base = &virt_bases[GCC_BASE],
1507 .c = {
1508 .dbg_name = "gcc_usb_hs_system_clk",
1509 .parent = &usb_hs_system_clk_src.c,
1510 .ops = &clk_ops_branch,
1511 CLK_INIT(gcc_usb_hs_system_clk.c),
1512 },
1513};
1514
1515static struct branch_clk gcc_usb_hsic_ahb_clk = {
1516 .cbcr_reg = USB_HSIC_AHB_CBCR,
1517 .has_sibling = 1,
1518 .base = &virt_bases[GCC_BASE],
1519 .c = {
1520 .dbg_name = "gcc_usb_hsic_ahb_clk",
1521 .ops = &clk_ops_branch,
1522 CLK_INIT(gcc_usb_hsic_ahb_clk.c),
1523 },
1524};
1525
1526static struct branch_clk gcc_usb_hsic_clk = {
1527 .cbcr_reg = USB_HSIC_CBCR,
1528 .has_sibling = 0,
1529 .bcr_reg = USB_HS_HSIC_BCR,
1530 .base = &virt_bases[GCC_BASE],
1531 .c = {
1532 .dbg_name = "gcc_usb_hsic_clk",
1533 .parent = &usb_hsic_clk_src.c,
1534 .ops = &clk_ops_branch,
1535 CLK_INIT(gcc_usb_hsic_clk.c),
1536 },
1537};
1538
1539static struct branch_clk gcc_usb_hsic_io_cal_clk = {
1540 .cbcr_reg = USB_HSIC_IO_CAL_CBCR,
1541 .has_sibling = 0,
1542 .base = &virt_bases[GCC_BASE],
1543 .c = {
1544 .dbg_name = "gcc_usb_hsic_io_cal_clk",
1545 .parent = &usb_hsic_io_cal_clk_src.c,
1546 .ops = &clk_ops_branch,
1547 CLK_INIT(gcc_usb_hsic_io_cal_clk.c),
1548 },
1549};
1550
1551static struct branch_clk gcc_usb_hsic_system_clk = {
1552 .cbcr_reg = USB_HSIC_SYSTEM_CBCR,
1553 .has_sibling = 0,
1554 .bcr_reg = USB_HS_HSIC_BCR,
1555 .base = &virt_bases[GCC_BASE],
1556 .c = {
1557 .dbg_name = "gcc_usb_hsic_system_clk",
1558 .parent = &usb_hsic_system_clk_src.c,
1559 .ops = &clk_ops_branch,
1560 CLK_INIT(gcc_usb_hsic_system_clk.c),
1561 },
1562};
1563
1564static struct measure_mux_entry measure_mux_GCC[] = {
1565 { &gcc_periph_noc_ahb_clk.c, GCC_BASE, 0x0010 },
Patrick Dalyeb370ea2012-10-23 11:57:50 -07001566 { &gcc_mss_cfg_ahb_clk.c, GCC_BASE, 0x0030 },
1567 { &gcc_mss_q6_bimc_axi_clk.c, GCC_BASE, 0x0031 },
1568 { &gcc_usb_hsic_ahb_clk.c, GCC_BASE, 0x0058 },
1569 { &gcc_usb_hsic_system_clk.c, GCC_BASE, 0x0059 },
1570 { &gcc_usb_hsic_clk.c, GCC_BASE, 0x005a },
1571 { &gcc_usb_hsic_io_cal_clk.c, GCC_BASE, 0x005b },
1572 { &gcc_usb_hs_system_clk.c, GCC_BASE, 0x0060 },
1573 { &gcc_usb_hs_ahb_clk.c, GCC_BASE, 0x0061 },
1574 { &gcc_usb2a_phy_sleep_clk.c, GCC_BASE, 0x0063 },
1575 { &gcc_sdcc1_apps_clk.c, GCC_BASE, 0x0068 },
1576 { &gcc_sdcc1_ahb_clk.c, GCC_BASE, 0x0069 },
1577 { &gcc_sdcc2_apps_clk.c, GCC_BASE, 0x0070 },
1578 { &gcc_sdcc2_ahb_clk.c, GCC_BASE, 0x0071 },
1579 { &gcc_sdcc3_apps_clk.c, GCC_BASE, 0x0078 },
1580 { &gcc_sdcc3_ahb_clk.c, GCC_BASE, 0x0079 },
1581 { &gcc_blsp1_ahb_clk.c, GCC_BASE, 0x0088 },
1582 { &gcc_blsp1_qup1_spi_apps_clk.c, GCC_BASE, 0x008a },
1583 { &gcc_blsp1_qup1_i2c_apps_clk.c, GCC_BASE, 0x008b },
1584 { &gcc_blsp1_uart1_apps_clk.c, GCC_BASE, 0x008c },
1585 { &gcc_blsp1_qup2_spi_apps_clk.c, GCC_BASE, 0x008e },
1586 { &gcc_blsp1_qup2_i2c_apps_clk.c, GCC_BASE, 0x0090 },
1587 { &gcc_blsp1_uart2_apps_clk.c, GCC_BASE, 0x0091 },
1588 { &gcc_blsp1_qup3_spi_apps_clk.c, GCC_BASE, 0x0093 },
1589 { &gcc_blsp1_qup3_i2c_apps_clk.c, GCC_BASE, 0x0094 },
1590 { &gcc_blsp1_uart3_apps_clk.c, GCC_BASE, 0x0095 },
1591 { &gcc_blsp1_qup4_spi_apps_clk.c, GCC_BASE, 0x0098 },
1592 { &gcc_blsp1_qup4_i2c_apps_clk.c, GCC_BASE, 0x0099 },
1593 { &gcc_blsp1_uart4_apps_clk.c, GCC_BASE, 0x009a },
1594 { &gcc_blsp1_qup5_spi_apps_clk.c, GCC_BASE, 0x009c },
1595 { &gcc_blsp1_qup5_i2c_apps_clk.c, GCC_BASE, 0x009d },
1596 { &gcc_blsp1_uart5_apps_clk.c, GCC_BASE, 0x009e },
1597 { &gcc_blsp1_qup6_spi_apps_clk.c, GCC_BASE, 0x00a1 },
1598 { &gcc_blsp1_qup6_i2c_apps_clk.c, GCC_BASE, 0x00a2 },
1599 { &gcc_blsp1_uart6_apps_clk.c, GCC_BASE, 0x00a3 },
1600 { &gcc_pdm_ahb_clk.c, GCC_BASE, 0x00d0 },
1601 { &gcc_pdm_xo4_clk.c, GCC_BASE, 0x00d1 },
1602 { &gcc_pdm2_clk.c, GCC_BASE, 0x00d2 },
1603 { &gcc_prng_ahb_clk.c, GCC_BASE, 0x00d8 },
1604 { &gcc_bam_dma_ahb_clk.c, GCC_BASE, 0x00e0 },
1605 { &gcc_boot_rom_ahb_clk.c, GCC_BASE, 0x00f8 },
1606 { &gcc_ce1_clk.c, GCC_BASE, 0x0138 },
1607 { &gcc_ce1_axi_clk.c, GCC_BASE, 0x0139 },
1608 { &gcc_ce1_ahb_clk.c, GCC_BASE, 0x013a },
1609 { &gcc_lpass_q6_axi_clk.c, GCC_BASE, 0x0160 },
1610 {&dummy_clk, N_BASES, 0x0000},
1611};
1612
1613static struct pll_vote_clk mmpll0_pll = {
1614 .en_reg = (void __iomem *)MMSS_PLL_VOTE_APCS,
1615 .en_mask = BIT(0),
1616 .status_reg = (void __iomem *)MMPLL0_PLL_STATUS,
1617 .status_mask = BIT(17),
1618 .base = &virt_bases[MMSS_BASE],
1619 .c = {
1620 .rate = 800000000,
1621 .parent = &xo.c,
1622 .dbg_name = "mmpll0_pll",
1623 .ops = &clk_ops_pll_vote,
1624 CLK_INIT(mmpll0_pll.c),
1625 },
1626};
1627
1628static struct pll_vote_clk mmpll1_pll = {
1629 .en_reg = (void __iomem *)MMSS_PLL_VOTE_APCS,
1630 .en_mask = BIT(1),
1631 .status_reg = (void __iomem *)MMPLL1_PLL_STATUS,
1632 .status_mask = BIT(17),
1633 .base = &virt_bases[MMSS_BASE],
1634 .c = {
1635 .rate = 1000000000,
1636 .parent = &xo.c,
1637 .dbg_name = "mmpll1_pll",
1638 .ops = &clk_ops_pll_vote,
1639 CLK_INIT(mmpll1_pll.c),
1640 },
1641};
1642
1643static struct clk_freq_tbl ftbl_mmss_mmssnoc_axi_clk[] = {
1644 F_MMSS( 19200000, xo, 1, 0, 0),
1645 F_MMSS( 37500000, gpll0, 16, 0, 0),
1646 F_MMSS( 50000000, gpll0, 12, 0, 0),
1647 F_MMSS( 75000000, gpll0, 8, 0, 0),
1648 F_MMSS( 100000000, gpll0, 6, 0, 0),
1649 F_MMSS( 150000000, gpll0, 4, 0, 0),
1650 F_MMSS( 200000000, mmpll0_pll, 4, 0, 0),
pfang948c93e2013-03-20 17:04:18 -07001651 F_MMSS( 266666666, mmpll0_pll, 3, 0, 0),
Patrick Dalyeb370ea2012-10-23 11:57:50 -07001652 F_END
1653};
1654
1655static struct rcg_clk axi_clk_src = {
1656 .cmd_rcgr_reg = AXI_CMD_RCGR,
1657 .set_rate = set_rate_hid,
1658 .freq_tbl = ftbl_mmss_mmssnoc_axi_clk,
1659 .current_freq = &rcg_dummy_freq,
1660 .base = &virt_bases[MMSS_BASE],
1661 .c = {
1662 .dbg_name = "axi_clk_src",
1663 .ops = &clk_ops_rcg,
1664 VDD_DIG_FMAX_MAP3(LOW, 100000000, NOMINAL, 200000000, HIGH,
Patrick Dalye02a5632013-02-12 20:23:35 -08001665 266670000),
Patrick Dalyeb370ea2012-10-23 11:57:50 -07001666 CLK_INIT(axi_clk_src.c),
1667 },
1668};
1669
Patrick Dalyeb370ea2012-10-23 11:57:50 -07001670static struct clk_freq_tbl ftbl_camss_csi0_1_clk[] = {
1671 F_MMSS( 100000000, gpll0, 6, 0, 0),
1672 F_MMSS( 200000000, mmpll0_pll, 4, 0, 0),
1673 F_END
1674};
1675
1676static struct rcg_clk csi0_clk_src = {
1677 .cmd_rcgr_reg = CSI0_CMD_RCGR,
1678 .set_rate = set_rate_hid,
1679 .freq_tbl = ftbl_camss_csi0_1_clk,
1680 .current_freq = &rcg_dummy_freq,
1681 .base = &virt_bases[MMSS_BASE],
1682 .c = {
1683 .dbg_name = "csi0_clk_src",
1684 .ops = &clk_ops_rcg,
1685 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
1686 CLK_INIT(csi0_clk_src.c),
1687 },
1688};
1689
1690static struct rcg_clk csi1_clk_src = {
1691 .cmd_rcgr_reg = CSI1_CMD_RCGR,
1692 .set_rate = set_rate_hid,
1693 .freq_tbl = ftbl_camss_csi0_1_clk,
1694 .current_freq = &rcg_dummy_freq,
1695 .base = &virt_bases[MMSS_BASE],
1696 .c = {
1697 .dbg_name = "csi1_clk_src",
1698 .ops = &clk_ops_rcg,
1699 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
1700 CLK_INIT(csi1_clk_src.c),
1701 },
1702};
1703
1704static struct clk_freq_tbl ftbl_camss_vfe_vfe0_clk[] = {
1705 F_MMSS( 37500000, gpll0, 16, 0, 0),
1706 F_MMSS( 50000000, gpll0, 12, 0, 0),
1707 F_MMSS( 60000000, gpll0, 10, 0, 0),
1708 F_MMSS( 80000000, gpll0, 7.5, 0, 0),
1709 F_MMSS( 100000000, gpll0, 6, 0, 0),
1710 F_MMSS( 109090000, gpll0, 5.5, 0, 0),
1711 F_MMSS( 133330000, gpll0, 4.5, 0, 0),
Patrick Dalyd3fd03f2013-03-08 19:01:18 -08001712 F_MMSS( 150000000, gpll0, 4, 0, 0),
Patrick Dalyeb370ea2012-10-23 11:57:50 -07001713 F_MMSS( 200000000, gpll0, 3, 0, 0),
1714 F_MMSS( 228570000, mmpll0_pll, 3.5, 0, 0),
1715 F_MMSS( 266670000, mmpll0_pll, 3, 0, 0),
1716 F_MMSS( 320000000, mmpll0_pll, 2.5, 0, 0),
Patrick Dalyd3fd03f2013-03-08 19:01:18 -08001717 F_MMSS( 400000000, mmpll0_pll, 2, 0, 0),
Patrick Dalyeb370ea2012-10-23 11:57:50 -07001718 F_END
1719};
1720
Patrick Dalyd3fd03f2013-03-08 19:01:18 -08001721static unsigned long camss_vfe_vfe0_fmax_v2[VDD_DIG_NUM] = {
1722 150000000, 320000000, 400000000,
1723};
1724
Patrick Dalyeb370ea2012-10-23 11:57:50 -07001725static struct rcg_clk vfe0_clk_src = {
1726 .cmd_rcgr_reg = VFE0_CMD_RCGR,
1727 .set_rate = set_rate_hid,
1728 .freq_tbl = ftbl_camss_vfe_vfe0_clk,
1729 .current_freq = &rcg_dummy_freq,
1730 .base = &virt_bases[MMSS_BASE],
1731 .c = {
1732 .dbg_name = "vfe0_clk_src",
1733 .ops = &clk_ops_rcg,
1734 VDD_DIG_FMAX_MAP3(LOW, 133330000, NOMINAL, 266670000, HIGH,
Patrick Dalye02a5632013-02-12 20:23:35 -08001735 320000000),
Patrick Dalyeb370ea2012-10-23 11:57:50 -07001736 CLK_INIT(vfe0_clk_src.c),
1737 },
1738};
1739
1740static struct clk_freq_tbl ftbl_mdss_mdp_clk[] = {
1741 F_MMSS( 37500000, gpll0, 16, 0, 0),
1742 F_MMSS( 60000000, gpll0, 10, 0, 0),
1743 F_MMSS( 75000000, gpll0, 8, 0, 0),
1744 F_MMSS( 92310000, gpll0, 6.5, 0, 0),
1745 F_MMSS( 100000000, gpll0, 6, 0, 0),
1746 F_MMSS( 133330000, mmpll0_pll, 6, 0, 0),
1747 F_MMSS( 177780000, mmpll0_pll, 4.5, 0, 0),
1748 F_MMSS( 200000000, mmpll0_pll, 4, 0, 0),
1749 F_END
1750};
1751
1752static struct rcg_clk mdp_clk_src = {
1753 .cmd_rcgr_reg = MDP_CMD_RCGR,
1754 .set_rate = set_rate_hid,
1755 .freq_tbl = ftbl_mdss_mdp_clk,
1756 .current_freq = &rcg_dummy_freq,
1757 .base = &virt_bases[MMSS_BASE],
1758 .c = {
1759 .dbg_name = "mdp_clk_src",
1760 .ops = &clk_ops_rcg,
1761 VDD_DIG_FMAX_MAP3(LOW, 92310000, NOMINAL, 177780000, HIGH,
Patrick Dalye02a5632013-02-12 20:23:35 -08001762 200000000),
Patrick Dalyeb370ea2012-10-23 11:57:50 -07001763 CLK_INIT(mdp_clk_src.c),
1764 },
1765};
1766
1767static struct clk_freq_tbl ftbl_camss_jpeg_jpeg0_clk[] = {
1768 F_MMSS( 75000000, gpll0, 8, 0, 0),
1769 F_MMSS( 133330000, gpll0, 4.5, 0, 0),
1770 F_MMSS( 200000000, gpll0, 3, 0, 0),
1771 F_MMSS( 228570000, mmpll0_pll, 3.5, 0, 0),
1772 F_MMSS( 266670000, mmpll0_pll, 3, 0, 0),
1773 F_MMSS( 320000000, mmpll0_pll, 2.5, 0, 0),
1774 F_END
1775};
1776
1777static struct rcg_clk jpeg0_clk_src = {
1778 .cmd_rcgr_reg = JPEG0_CMD_RCGR,
1779 .set_rate = set_rate_hid,
1780 .freq_tbl = ftbl_camss_jpeg_jpeg0_clk,
1781 .current_freq = &rcg_dummy_freq,
1782 .base = &virt_bases[MMSS_BASE],
1783 .c = {
1784 .dbg_name = "jpeg0_clk_src",
1785 .ops = &clk_ops_rcg,
1786 VDD_DIG_FMAX_MAP3(LOW, 133330000, NOMINAL, 266670000, HIGH,
Patrick Dalye02a5632013-02-12 20:23:35 -08001787 320000000),
Patrick Dalyeb370ea2012-10-23 11:57:50 -07001788 CLK_INIT(jpeg0_clk_src.c),
1789 },
1790};
1791
Patrick Daly5555c2c2013-03-06 21:25:26 -08001792static struct branch_clk mdss_ahb_clk;
1793static struct clk dsipll0_byte_clk_src = {
1794 .depends = &mdss_ahb_clk.c,
1795 .parent = &xo.c,
1796 .dbg_name = "dsipll0_byte_clk_src",
1797 .ops = &clk_ops_dsi_byte_pll,
1798 CLK_INIT(dsipll0_byte_clk_src),
1799};
1800
1801static struct clk dsipll0_pixel_clk_src = {
1802 .depends = &mdss_ahb_clk.c,
1803 .parent = &xo.c,
1804 .dbg_name = "dsipll0_pixel_clk_src",
1805 .ops = &clk_ops_dsi_pixel_pll,
1806 CLK_INIT(dsipll0_pixel_clk_src),
1807};
1808
Vikram Mulukutlaae13f3c2013-03-20 18:03:29 -07001809static struct clk_freq_tbl pixel_freq_tbl[] = {
1810 {
1811 .src_clk = &dsipll0_pixel_clk_src,
1812 .div_src_val = BVAL(10, 8, dsipll0_pixel_mm_source_val),
1813 },
1814 F_END
Patrick Dalyeb370ea2012-10-23 11:57:50 -07001815};
1816
1817static struct rcg_clk pclk0_clk_src = {
1818 .cmd_rcgr_reg = PCLK0_CMD_RCGR,
Vikram Mulukutlaae13f3c2013-03-20 18:03:29 -07001819 .current_freq = pixel_freq_tbl,
Patrick Dalyeb370ea2012-10-23 11:57:50 -07001820 .base = &virt_bases[MMSS_BASE],
1821 .c = {
Patrick Daly5555c2c2013-03-06 21:25:26 -08001822 .parent = &dsipll0_pixel_clk_src,
Patrick Dalyeb370ea2012-10-23 11:57:50 -07001823 .dbg_name = "pclk0_clk_src",
Patrick Daly5555c2c2013-03-06 21:25:26 -08001824 .ops = &clk_ops_pixel,
Patrick Dalyeb370ea2012-10-23 11:57:50 -07001825 VDD_DIG_FMAX_MAP2(LOW, 83330000, NOMINAL, 166670000),
1826 CLK_INIT(pclk0_clk_src.c),
1827 },
1828};
1829
1830static struct clk_freq_tbl ftbl_venus0_vcodec0_clk[] = {
1831 F_MMSS( 66700000, gpll0, 9, 0, 0),
1832 F_MMSS( 100000000, gpll0, 6, 0, 0),
1833 F_MMSS( 133330000, mmpll0_pll, 6, 0, 0),
Patrick Daly4f832432013-02-26 12:40:49 -08001834 F_MMSS( 160000000, mmpll0_pll, 5, 0, 0),
Patrick Dalyeb370ea2012-10-23 11:57:50 -07001835 F_END
1836};
1837
1838static struct rcg_clk vcodec0_clk_src = {
1839 .cmd_rcgr_reg = VCODEC0_CMD_RCGR,
1840 .set_rate = set_rate_mnd,
1841 .freq_tbl = ftbl_venus0_vcodec0_clk,
1842 .current_freq = &rcg_dummy_freq,
1843 .base = &virt_bases[MMSS_BASE],
1844 .c = {
1845 .dbg_name = "vcodec0_clk_src",
1846 .ops = &clk_ops_rcg_mnd,
1847 VDD_DIG_FMAX_MAP3(LOW, 66670000, NOMINAL, 133330000, HIGH,
Patrick Dalye02a5632013-02-12 20:23:35 -08001848 160000000),
Patrick Dalyeb370ea2012-10-23 11:57:50 -07001849 CLK_INIT(vcodec0_clk_src.c),
1850 },
1851};
1852
1853static struct clk_freq_tbl ftbl_camss_cci_cci_clk[] = {
1854 F_MMSS( 19200000, xo, 1, 0, 0),
1855 F_END
1856};
1857
1858static struct rcg_clk cci_clk_src = {
1859 .cmd_rcgr_reg = CCI_CMD_RCGR,
1860 .set_rate = set_rate_mnd,
1861 .freq_tbl = ftbl_camss_cci_cci_clk,
1862 .current_freq = &rcg_dummy_freq,
1863 .base = &virt_bases[MMSS_BASE],
1864 .c = {
1865 .dbg_name = "cci_clk_src",
1866 .ops = &clk_ops_rcg_mnd,
1867 VDD_DIG_FMAX_MAP2(LOW, 20000000, NOMINAL, 40000000),
1868 CLK_INIT(cci_clk_src.c),
1869 },
1870};
1871
1872static struct clk_freq_tbl ftbl_camss_gp0_1_clk[] = {
1873 F_MMSS( 10000, xo, 16, 1, 120),
1874 F_MMSS( 24000, xo, 16, 1, 50),
1875 F_MMSS( 6000000, gpll0, 10, 1, 10),
1876 F_MMSS( 12000000, gpll0, 10, 1, 5),
1877 F_MMSS( 13000000, gpll0, 4, 13, 150),
1878 F_MMSS( 24000000, gpll0, 5, 1, 5),
1879 F_END
1880};
1881
1882static struct rcg_clk mmss_gp0_clk_src = {
1883 .cmd_rcgr_reg = MMSS_GP0_CMD_RCGR,
1884 .set_rate = set_rate_mnd,
1885 .freq_tbl = ftbl_camss_gp0_1_clk,
1886 .current_freq = &rcg_dummy_freq,
1887 .base = &virt_bases[MMSS_BASE],
1888 .c = {
1889 .dbg_name = "mmss_gp0_clk_src",
1890 .ops = &clk_ops_rcg_mnd,
1891 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
1892 CLK_INIT(mmss_gp0_clk_src.c),
1893 },
1894};
1895
1896static struct rcg_clk mmss_gp1_clk_src = {
1897 .cmd_rcgr_reg = MMSS_GP1_CMD_RCGR,
1898 .set_rate = set_rate_mnd,
1899 .freq_tbl = ftbl_camss_gp0_1_clk,
1900 .current_freq = &rcg_dummy_freq,
1901 .base = &virt_bases[MMSS_BASE],
1902 .c = {
1903 .dbg_name = "mmss_gp1_clk_src",
1904 .ops = &clk_ops_rcg_mnd,
1905 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
1906 CLK_INIT(mmss_gp1_clk_src.c),
1907 },
1908};
1909
1910static struct clk_freq_tbl ftbl_camss_mclk0_1_clk[] = {
Patrick Daly42d2b7a2013-03-07 17:12:33 -08001911 F_MMSS( 19200000, xo, 1, 0, 0),
1912 F_MMSS( 24000000, gpll0, 5, 1, 5),
Patrick Dalyeb370ea2012-10-23 11:57:50 -07001913 F_MMSS( 66670000, gpll0, 9, 0, 0),
1914 F_END
1915};
1916
1917static struct rcg_clk mclk0_clk_src = {
1918 .cmd_rcgr_reg = MCLK0_CMD_RCGR,
1919 .set_rate = set_rate_mnd,
1920 .freq_tbl = ftbl_camss_mclk0_1_clk,
1921 .current_freq = &rcg_dummy_freq,
1922 .base = &virt_bases[MMSS_BASE],
1923 .c = {
1924 .dbg_name = "mclk0_clk_src",
1925 .ops = &clk_ops_rcg_mnd,
1926 VDD_DIG_FMAX_MAP1(LOW, 66670000),
1927 CLK_INIT(mclk0_clk_src.c),
1928 },
1929};
1930
1931static struct rcg_clk mclk1_clk_src = {
1932 .cmd_rcgr_reg = MCLK1_CMD_RCGR,
1933 .set_rate = set_rate_mnd,
1934 .freq_tbl = ftbl_camss_mclk0_1_clk,
1935 .current_freq = &rcg_dummy_freq,
1936 .base = &virt_bases[MMSS_BASE],
1937 .c = {
1938 .dbg_name = "mclk1_clk_src",
1939 .ops = &clk_ops_rcg_mnd,
1940 VDD_DIG_FMAX_MAP1(LOW, 66670000),
1941 CLK_INIT(mclk1_clk_src.c),
1942 },
1943};
1944
1945static struct clk_freq_tbl ftbl_camss_phy0_1_csi0_1phytimer_clk[] = {
1946 F_MMSS( 100000000, gpll0, 6, 0, 0),
1947 F_MMSS( 200000000, mmpll0_pll, 4, 0, 0),
1948 F_END
1949};
1950
1951static struct rcg_clk csi0phytimer_clk_src = {
1952 .cmd_rcgr_reg = CSI0PHYTIMER_CMD_RCGR,
1953 .set_rate = set_rate_hid,
1954 .freq_tbl = ftbl_camss_phy0_1_csi0_1phytimer_clk,
1955 .current_freq = &rcg_dummy_freq,
1956 .base = &virt_bases[MMSS_BASE],
1957 .c = {
1958 .dbg_name = "csi0phytimer_clk_src",
1959 .ops = &clk_ops_rcg,
1960 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
1961 CLK_INIT(csi0phytimer_clk_src.c),
1962 },
1963};
1964
1965static struct rcg_clk csi1phytimer_clk_src = {
1966 .cmd_rcgr_reg = CSI1PHYTIMER_CMD_RCGR,
1967 .set_rate = set_rate_hid,
1968 .freq_tbl = ftbl_camss_phy0_1_csi0_1phytimer_clk,
1969 .current_freq = &rcg_dummy_freq,
1970 .base = &virt_bases[MMSS_BASE],
1971 .c = {
1972 .dbg_name = "csi1phytimer_clk_src",
1973 .ops = &clk_ops_rcg,
1974 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
1975 CLK_INIT(csi1phytimer_clk_src.c),
1976 },
1977};
1978
1979static struct clk_freq_tbl ftbl_camss_vfe_cpp_clk[] = {
1980 F_MMSS( 133330000, gpll0, 4.5, 0, 0),
Patrick Dalyd3fd03f2013-03-08 19:01:18 -08001981 F_MMSS( 150000000, gpll0, 4, 0, 0),
Patrick Dalyeb370ea2012-10-23 11:57:50 -07001982 F_MMSS( 266670000, mmpll0_pll, 3, 0, 0),
1983 F_MMSS( 320000000, mmpll0_pll, 2.5, 0, 0),
Patrick Dalyd3fd03f2013-03-08 19:01:18 -08001984 F_MMSS( 400000000, mmpll0_pll, 2, 0, 0),
Patrick Dalyeb370ea2012-10-23 11:57:50 -07001985 F_END
1986};
1987
Patrick Dalyd3fd03f2013-03-08 19:01:18 -08001988static unsigned long camss_vfe_cpp_fmax_v2[VDD_DIG_NUM] = {
1989 150000000, 320000000, 400000000,
1990};
1991
Patrick Dalyeb370ea2012-10-23 11:57:50 -07001992static struct rcg_clk cpp_clk_src = {
1993 .cmd_rcgr_reg = CPP_CMD_RCGR,
1994 .set_rate = set_rate_hid,
1995 .freq_tbl = ftbl_camss_vfe_cpp_clk,
1996 .current_freq = &rcg_dummy_freq,
1997 .base = &virt_bases[MMSS_BASE],
1998 .c = {
1999 .dbg_name = "cpp_clk_src",
2000 .ops = &clk_ops_rcg,
2001 VDD_DIG_FMAX_MAP3(LOW, 133330000, NOMINAL, 266670000, HIGH,
Patrick Dalye02a5632013-02-12 20:23:35 -08002002 320000000),
Patrick Dalyeb370ea2012-10-23 11:57:50 -07002003 CLK_INIT(cpp_clk_src.c),
2004 },
2005};
2006
Vikram Mulukutlaae13f3c2013-03-20 18:03:29 -07002007static struct clk_freq_tbl byte_freq_tbl[] = {
2008 {
2009 .src_clk = &dsipll0_byte_clk_src,
2010 .div_src_val = BVAL(10, 8, dsipll0_byte_mm_source_val),
2011 },
2012 F_END
Patrick Dalyeb370ea2012-10-23 11:57:50 -07002013};
2014
2015static struct rcg_clk byte0_clk_src = {
2016 .cmd_rcgr_reg = BYTE0_CMD_RCGR,
Vikram Mulukutlaae13f3c2013-03-20 18:03:29 -07002017 .current_freq = byte_freq_tbl,
Patrick Dalyeb370ea2012-10-23 11:57:50 -07002018 .base = &virt_bases[MMSS_BASE],
2019 .c = {
Patrick Daly5555c2c2013-03-06 21:25:26 -08002020 .parent = &dsipll0_byte_clk_src,
Patrick Dalyeb370ea2012-10-23 11:57:50 -07002021 .dbg_name = "byte0_clk_src",
Patrick Daly5555c2c2013-03-06 21:25:26 -08002022 .ops = &clk_ops_byte,
Patrick Dalyeb370ea2012-10-23 11:57:50 -07002023 VDD_DIG_FMAX_MAP2(LOW, 62500000, NOMINAL, 125000000),
2024 CLK_INIT(byte0_clk_src.c),
2025 },
2026};
2027
2028static struct clk_freq_tbl ftbl_mdss_esc0_clk[] = {
2029 F_MDSS( 19200000, xo, 1, 0, 0),
2030 F_END
2031};
2032
2033static struct rcg_clk esc0_clk_src = {
2034 .cmd_rcgr_reg = ESC0_CMD_RCGR,
2035 .set_rate = set_rate_hid,
2036 .freq_tbl = ftbl_mdss_esc0_clk,
2037 .current_freq = &rcg_dummy_freq,
2038 .base = &virt_bases[MMSS_BASE],
2039 .c = {
2040 .dbg_name = "esc0_clk_src",
2041 .ops = &clk_ops_rcg,
2042 VDD_DIG_FMAX_MAP2(LOW, 20000000, NOMINAL, 40000000),
2043 CLK_INIT(esc0_clk_src.c),
2044 },
2045};
2046
2047static struct clk_freq_tbl ftbl_mdss_vsync_clk[] = {
2048 F_MDSS( 19200000, xo, 1, 0, 0),
2049 F_END
2050};
2051
2052static struct rcg_clk vsync_clk_src = {
2053 .cmd_rcgr_reg = VSYNC_CMD_RCGR,
2054 .set_rate = set_rate_hid,
2055 .freq_tbl = ftbl_mdss_vsync_clk,
2056 .current_freq = &rcg_dummy_freq,
2057 .base = &virt_bases[MMSS_BASE],
2058 .c = {
2059 .dbg_name = "vsync_clk_src",
2060 .ops = &clk_ops_rcg,
2061 VDD_DIG_FMAX_MAP2(LOW, 20000000, NOMINAL, 40000000),
2062 CLK_INIT(vsync_clk_src.c),
2063 },
2064};
2065
2066static struct branch_clk camss_cci_cci_ahb_clk = {
2067 .cbcr_reg = CAMSS_CCI_CCI_AHB_CBCR,
2068 .has_sibling = 1,
2069 .base = &virt_bases[MMSS_BASE],
2070 .c = {
2071 .dbg_name = "camss_cci_cci_ahb_clk",
2072 .ops = &clk_ops_branch,
2073 CLK_INIT(camss_cci_cci_ahb_clk.c),
2074 },
2075};
2076
2077static struct branch_clk camss_cci_cci_clk = {
2078 .cbcr_reg = CAMSS_CCI_CCI_CBCR,
2079 .has_sibling = 0,
2080 .base = &virt_bases[MMSS_BASE],
2081 .c = {
2082 .dbg_name = "camss_cci_cci_clk",
2083 .parent = &cci_clk_src.c,
2084 .ops = &clk_ops_branch,
2085 CLK_INIT(camss_cci_cci_clk.c),
2086 },
2087};
2088
2089static struct branch_clk camss_csi0_ahb_clk = {
2090 .cbcr_reg = CAMSS_CSI0_AHB_CBCR,
2091 .has_sibling = 1,
2092 .base = &virt_bases[MMSS_BASE],
2093 .c = {
2094 .dbg_name = "camss_csi0_ahb_clk",
2095 .ops = &clk_ops_branch,
2096 CLK_INIT(camss_csi0_ahb_clk.c),
2097 },
2098};
2099
2100static struct branch_clk camss_csi0_clk = {
2101 .cbcr_reg = CAMSS_CSI0_CBCR,
2102 .has_sibling = 1,
2103 .base = &virt_bases[MMSS_BASE],
2104 .c = {
2105 .dbg_name = "camss_csi0_clk",
2106 .parent = &csi0_clk_src.c,
2107 .ops = &clk_ops_branch,
2108 CLK_INIT(camss_csi0_clk.c),
2109 },
2110};
2111
2112static struct branch_clk camss_csi0phy_clk = {
2113 .cbcr_reg = CAMSS_CSI0PHY_CBCR,
2114 .has_sibling = 1,
2115 .base = &virt_bases[MMSS_BASE],
2116 .c = {
2117 .dbg_name = "camss_csi0phy_clk",
2118 .parent = &csi0_clk_src.c,
2119 .ops = &clk_ops_branch,
2120 CLK_INIT(camss_csi0phy_clk.c),
2121 },
2122};
2123
2124static struct branch_clk camss_csi0pix_clk = {
2125 .cbcr_reg = CAMSS_CSI0PIX_CBCR,
2126 .has_sibling = 1,
2127 .base = &virt_bases[MMSS_BASE],
2128 .c = {
2129 .dbg_name = "camss_csi0pix_clk",
2130 .parent = &csi0_clk_src.c,
2131 .ops = &clk_ops_branch,
2132 CLK_INIT(camss_csi0pix_clk.c),
2133 },
2134};
2135
2136static struct branch_clk camss_csi0rdi_clk = {
2137 .cbcr_reg = CAMSS_CSI0RDI_CBCR,
2138 .has_sibling = 1,
2139 .base = &virt_bases[MMSS_BASE],
2140 .c = {
2141 .dbg_name = "camss_csi0rdi_clk",
2142 .parent = &csi0_clk_src.c,
2143 .ops = &clk_ops_branch,
2144 CLK_INIT(camss_csi0rdi_clk.c),
2145 },
2146};
2147
2148static struct branch_clk camss_csi1_ahb_clk = {
2149 .cbcr_reg = CAMSS_CSI1_AHB_CBCR,
2150 .has_sibling = 1,
2151 .base = &virt_bases[MMSS_BASE],
2152 .c = {
2153 .dbg_name = "camss_csi1_ahb_clk",
2154 .ops = &clk_ops_branch,
2155 CLK_INIT(camss_csi1_ahb_clk.c),
2156 },
2157};
2158
2159static struct branch_clk camss_csi1_clk = {
2160 .cbcr_reg = CAMSS_CSI1_CBCR,
2161 .has_sibling = 1,
2162 .base = &virt_bases[MMSS_BASE],
2163 .c = {
2164 .dbg_name = "camss_csi1_clk",
2165 .parent = &csi1_clk_src.c,
2166 .ops = &clk_ops_branch,
2167 CLK_INIT(camss_csi1_clk.c),
2168 },
2169};
2170
2171static struct branch_clk camss_csi1phy_clk = {
2172 .cbcr_reg = CAMSS_CSI1PHY_CBCR,
2173 .has_sibling = 1,
2174 .base = &virt_bases[MMSS_BASE],
2175 .c = {
2176 .dbg_name = "camss_csi1phy_clk",
2177 .parent = &csi1_clk_src.c,
2178 .ops = &clk_ops_branch,
2179 CLK_INIT(camss_csi1phy_clk.c),
2180 },
2181};
2182
2183static struct branch_clk camss_csi1pix_clk = {
2184 .cbcr_reg = CAMSS_CSI1PIX_CBCR,
2185 .has_sibling = 1,
2186 .base = &virt_bases[MMSS_BASE],
2187 .c = {
2188 .dbg_name = "camss_csi1pix_clk",
2189 .parent = &csi1_clk_src.c,
2190 .ops = &clk_ops_branch,
2191 CLK_INIT(camss_csi1pix_clk.c),
2192 },
2193};
2194
2195static struct branch_clk camss_csi1rdi_clk = {
2196 .cbcr_reg = CAMSS_CSI1RDI_CBCR,
2197 .has_sibling = 1,
2198 .base = &virt_bases[MMSS_BASE],
2199 .c = {
2200 .dbg_name = "camss_csi1rdi_clk",
2201 .parent = &csi1_clk_src.c,
2202 .ops = &clk_ops_branch,
2203 CLK_INIT(camss_csi1rdi_clk.c),
2204 },
2205};
2206
2207static struct branch_clk camss_csi_vfe0_clk = {
2208 .cbcr_reg = CAMSS_CSI_VFE0_CBCR,
2209 .has_sibling = 1,
2210 .base = &virt_bases[MMSS_BASE],
2211 .c = {
2212 .dbg_name = "camss_csi_vfe0_clk",
2213 .parent = &vfe0_clk_src.c,
2214 .ops = &clk_ops_branch,
2215 CLK_INIT(camss_csi_vfe0_clk.c),
2216 },
2217};
2218
2219static struct branch_clk camss_gp0_clk = {
2220 .cbcr_reg = CAMSS_GP0_CBCR,
2221 .has_sibling = 0,
2222 .base = &virt_bases[MMSS_BASE],
2223 .c = {
2224 .dbg_name = "camss_gp0_clk",
2225 .parent = &mmss_gp0_clk_src.c,
2226 .ops = &clk_ops_branch,
2227 CLK_INIT(camss_gp0_clk.c),
2228 },
2229};
2230
2231static struct branch_clk camss_gp1_clk = {
2232 .cbcr_reg = CAMSS_GP1_CBCR,
2233 .has_sibling = 0,
2234 .base = &virt_bases[MMSS_BASE],
2235 .c = {
2236 .dbg_name = "camss_gp1_clk",
2237 .parent = &mmss_gp1_clk_src.c,
2238 .ops = &clk_ops_branch,
2239 CLK_INIT(camss_gp1_clk.c),
2240 },
2241};
2242
2243static struct branch_clk camss_ispif_ahb_clk = {
2244 .cbcr_reg = CAMSS_ISPIF_AHB_CBCR,
2245 .has_sibling = 1,
2246 .base = &virt_bases[MMSS_BASE],
2247 .c = {
2248 .dbg_name = "camss_ispif_ahb_clk",
2249 .ops = &clk_ops_branch,
2250 CLK_INIT(camss_ispif_ahb_clk.c),
2251 },
2252};
2253
2254static struct branch_clk camss_jpeg_jpeg0_clk = {
2255 .cbcr_reg = CAMSS_JPEG_JPEG0_CBCR,
2256 .has_sibling = 0,
2257 .base = &virt_bases[MMSS_BASE],
2258 .c = {
2259 .dbg_name = "camss_jpeg_jpeg0_clk",
2260 .parent = &jpeg0_clk_src.c,
2261 .ops = &clk_ops_branch,
2262 CLK_INIT(camss_jpeg_jpeg0_clk.c),
2263 },
2264};
2265
2266static struct branch_clk camss_jpeg_jpeg_ahb_clk = {
2267 .cbcr_reg = CAMSS_JPEG_JPEG_AHB_CBCR,
2268 .has_sibling = 1,
2269 .base = &virt_bases[MMSS_BASE],
2270 .c = {
2271 .dbg_name = "camss_jpeg_jpeg_ahb_clk",
2272 .ops = &clk_ops_branch,
2273 CLK_INIT(camss_jpeg_jpeg_ahb_clk.c),
2274 },
2275};
2276
2277static struct branch_clk camss_jpeg_jpeg_axi_clk = {
2278 .cbcr_reg = CAMSS_JPEG_JPEG_AXI_CBCR,
2279 .has_sibling = 1,
2280 .base = &virt_bases[MMSS_BASE],
2281 .c = {
2282 .dbg_name = "camss_jpeg_jpeg_axi_clk",
2283 .parent = &axi_clk_src.c,
2284 .ops = &clk_ops_branch,
2285 CLK_INIT(camss_jpeg_jpeg_axi_clk.c),
2286 },
2287};
2288
2289static struct branch_clk camss_mclk0_clk = {
2290 .cbcr_reg = CAMSS_MCLK0_CBCR,
2291 .has_sibling = 0,
2292 .base = &virt_bases[MMSS_BASE],
2293 .c = {
2294 .dbg_name = "camss_mclk0_clk",
2295 .parent = &mclk0_clk_src.c,
2296 .ops = &clk_ops_branch,
2297 CLK_INIT(camss_mclk0_clk.c),
2298 },
2299};
2300
2301static struct branch_clk camss_mclk1_clk = {
2302 .cbcr_reg = CAMSS_MCLK1_CBCR,
2303 .has_sibling = 0,
2304 .base = &virt_bases[MMSS_BASE],
2305 .c = {
2306 .dbg_name = "camss_mclk1_clk",
2307 .parent = &mclk1_clk_src.c,
2308 .ops = &clk_ops_branch,
2309 CLK_INIT(camss_mclk1_clk.c),
2310 },
2311};
2312
2313static struct branch_clk camss_micro_ahb_clk = {
2314 .cbcr_reg = CAMSS_MICRO_AHB_CBCR,
2315 .has_sibling = 1,
2316 .base = &virt_bases[MMSS_BASE],
2317 .c = {
2318 .dbg_name = "camss_micro_ahb_clk",
2319 .ops = &clk_ops_branch,
2320 CLK_INIT(camss_micro_ahb_clk.c),
2321 },
2322};
2323
2324static struct branch_clk camss_phy0_csi0phytimer_clk = {
2325 .cbcr_reg = CAMSS_PHY0_CSI0PHYTIMER_CBCR,
2326 .has_sibling = 0,
2327 .base = &virt_bases[MMSS_BASE],
2328 .c = {
2329 .dbg_name = "camss_phy0_csi0phytimer_clk",
2330 .parent = &csi0phytimer_clk_src.c,
2331 .ops = &clk_ops_branch,
2332 CLK_INIT(camss_phy0_csi0phytimer_clk.c),
2333 },
2334};
2335
2336static struct branch_clk camss_phy1_csi1phytimer_clk = {
2337 .cbcr_reg = CAMSS_PHY1_CSI1PHYTIMER_CBCR,
2338 .has_sibling = 0,
2339 .base = &virt_bases[MMSS_BASE],
2340 .c = {
2341 .dbg_name = "camss_phy1_csi1phytimer_clk",
2342 .parent = &csi1phytimer_clk_src.c,
2343 .ops = &clk_ops_branch,
2344 CLK_INIT(camss_phy1_csi1phytimer_clk.c),
2345 },
2346};
2347
2348static struct branch_clk camss_top_ahb_clk = {
2349 .cbcr_reg = CAMSS_TOP_AHB_CBCR,
2350 .has_sibling = 1,
2351 .base = &virt_bases[MMSS_BASE],
2352 .c = {
2353 .dbg_name = "camss_top_ahb_clk",
2354 .ops = &clk_ops_branch,
2355 CLK_INIT(camss_top_ahb_clk.c),
2356 },
2357};
2358
2359static struct branch_clk camss_vfe_cpp_ahb_clk = {
2360 .cbcr_reg = CAMSS_VFE_CPP_AHB_CBCR,
2361 .has_sibling = 1,
2362 .base = &virt_bases[MMSS_BASE],
2363 .c = {
2364 .dbg_name = "camss_vfe_cpp_ahb_clk",
2365 .ops = &clk_ops_branch,
2366 CLK_INIT(camss_vfe_cpp_ahb_clk.c),
2367 },
2368};
2369
2370static struct branch_clk camss_vfe_cpp_clk = {
2371 .cbcr_reg = CAMSS_VFE_CPP_CBCR,
2372 .has_sibling = 0,
2373 .base = &virt_bases[MMSS_BASE],
2374 .c = {
2375 .dbg_name = "camss_vfe_cpp_clk",
2376 .parent = &cpp_clk_src.c,
2377 .ops = &clk_ops_branch,
2378 CLK_INIT(camss_vfe_cpp_clk.c),
2379 },
2380};
2381
2382static struct branch_clk camss_vfe_vfe0_clk = {
2383 .cbcr_reg = CAMSS_VFE_VFE0_CBCR,
2384 .has_sibling = 1,
2385 .base = &virt_bases[MMSS_BASE],
2386 .c = {
2387 .dbg_name = "camss_vfe_vfe0_clk",
2388 .parent = &vfe0_clk_src.c,
2389 .ops = &clk_ops_branch,
2390 CLK_INIT(camss_vfe_vfe0_clk.c),
2391 },
2392};
2393
2394static struct branch_clk camss_vfe_vfe_ahb_clk = {
2395 .cbcr_reg = CAMSS_VFE_VFE_AHB_CBCR,
2396 .has_sibling = 1,
2397 .base = &virt_bases[MMSS_BASE],
2398 .c = {
2399 .dbg_name = "camss_vfe_vfe_ahb_clk",
2400 .ops = &clk_ops_branch,
2401 CLK_INIT(camss_vfe_vfe_ahb_clk.c),
2402 },
2403};
2404
2405static struct branch_clk camss_vfe_vfe_axi_clk = {
2406 .cbcr_reg = CAMSS_VFE_VFE_AXI_CBCR,
2407 .has_sibling = 1,
2408 .base = &virt_bases[MMSS_BASE],
2409 .c = {
2410 .dbg_name = "camss_vfe_vfe_axi_clk",
2411 .parent = &axi_clk_src.c,
2412 .ops = &clk_ops_branch,
2413 CLK_INIT(camss_vfe_vfe_axi_clk.c),
2414 },
2415};
2416
2417static struct branch_clk mdss_ahb_clk = {
2418 .cbcr_reg = MDSS_AHB_CBCR,
2419 .has_sibling = 1,
2420 .base = &virt_bases[MMSS_BASE],
2421 .c = {
2422 .dbg_name = "mdss_ahb_clk",
2423 .ops = &clk_ops_branch,
2424 CLK_INIT(mdss_ahb_clk.c),
2425 },
2426};
2427
2428static struct branch_clk mdss_axi_clk = {
2429 .cbcr_reg = MDSS_AXI_CBCR,
2430 .has_sibling = 1,
2431 .base = &virt_bases[MMSS_BASE],
2432 .c = {
2433 .dbg_name = "mdss_axi_clk",
2434 .parent = &axi_clk_src.c,
2435 .ops = &clk_ops_branch,
2436 CLK_INIT(mdss_axi_clk.c),
2437 },
2438};
2439
2440static struct branch_clk mdss_byte0_clk = {
2441 .cbcr_reg = MDSS_BYTE0_CBCR,
2442 .has_sibling = 0,
2443 .base = &virt_bases[MMSS_BASE],
2444 .c = {
2445 .dbg_name = "mdss_byte0_clk",
2446 .parent = &byte0_clk_src.c,
2447 .ops = &clk_ops_branch,
2448 CLK_INIT(mdss_byte0_clk.c),
2449 },
2450};
2451
2452static struct branch_clk mdss_esc0_clk = {
2453 .cbcr_reg = MDSS_ESC0_CBCR,
2454 .has_sibling = 0,
2455 .base = &virt_bases[MMSS_BASE],
2456 .c = {
2457 .dbg_name = "mdss_esc0_clk",
2458 .parent = &esc0_clk_src.c,
2459 .ops = &clk_ops_branch,
2460 CLK_INIT(mdss_esc0_clk.c),
2461 },
2462};
2463
2464static struct branch_clk mdss_mdp_clk = {
2465 .cbcr_reg = MDSS_MDP_CBCR,
2466 .has_sibling = 1,
2467 .base = &virt_bases[MMSS_BASE],
2468 .c = {
2469 .dbg_name = "mdss_mdp_clk",
2470 .parent = &mdp_clk_src.c,
2471 .ops = &clk_ops_branch,
2472 CLK_INIT(mdss_mdp_clk.c),
2473 },
2474};
2475
2476static struct branch_clk mdss_mdp_lut_clk = {
2477 .cbcr_reg = MDSS_MDP_LUT_CBCR,
2478 .has_sibling = 1,
2479 .base = &virt_bases[MMSS_BASE],
2480 .c = {
2481 .dbg_name = "mdss_mdp_lut_clk",
2482 .parent = &mdp_clk_src.c,
2483 .ops = &clk_ops_branch,
2484 CLK_INIT(mdss_mdp_lut_clk.c),
2485 },
2486};
2487
2488static struct branch_clk mdss_pclk0_clk = {
2489 .cbcr_reg = MDSS_PCLK0_CBCR,
2490 .has_sibling = 0,
2491 .base = &virt_bases[MMSS_BASE],
2492 .c = {
2493 .dbg_name = "mdss_pclk0_clk",
2494 .parent = &pclk0_clk_src.c,
2495 .ops = &clk_ops_branch,
2496 CLK_INIT(mdss_pclk0_clk.c),
2497 },
2498};
2499
2500static struct branch_clk mdss_vsync_clk = {
2501 .cbcr_reg = MDSS_VSYNC_CBCR,
2502 .has_sibling = 0,
2503 .base = &virt_bases[MMSS_BASE],
2504 .c = {
2505 .dbg_name = "mdss_vsync_clk",
2506 .parent = &vsync_clk_src.c,
2507 .ops = &clk_ops_branch,
2508 CLK_INIT(mdss_vsync_clk.c),
2509 },
2510};
2511
2512static struct branch_clk mmss_misc_ahb_clk = {
2513 .cbcr_reg = MMSS_MISC_AHB_CBCR,
2514 .has_sibling = 1,
2515 .base = &virt_bases[MMSS_BASE],
2516 .c = {
2517 .dbg_name = "mmss_misc_ahb_clk",
2518 .ops = &clk_ops_branch,
2519 CLK_INIT(mmss_misc_ahb_clk.c),
2520 },
2521};
2522
Patrick Dalyeb370ea2012-10-23 11:57:50 -07002523static struct branch_clk mmss_mmssnoc_bto_ahb_clk = {
2524 .cbcr_reg = MMSS_MMSSNOC_BTO_AHB_CBCR,
2525 .has_sibling = 1,
2526 .base = &virt_bases[MMSS_BASE],
2527 .c = {
2528 .dbg_name = "mmss_mmssnoc_bto_ahb_clk",
2529 .ops = &clk_ops_branch,
2530 CLK_INIT(mmss_mmssnoc_bto_ahb_clk.c),
2531 },
2532};
2533
2534static struct branch_clk mmss_mmssnoc_axi_clk = {
2535 .cbcr_reg = MMSS_MMSSNOC_AXI_CBCR,
2536 .has_sibling = 1,
2537 .base = &virt_bases[MMSS_BASE],
2538 .c = {
2539 .dbg_name = "mmss_mmssnoc_axi_clk",
2540 .parent = &axi_clk_src.c,
2541 .ops = &clk_ops_branch,
2542 CLK_INIT(mmss_mmssnoc_axi_clk.c),
2543 },
2544};
2545
2546static struct branch_clk mmss_s0_axi_clk = {
2547 .cbcr_reg = MMSS_S0_AXI_CBCR,
2548 .has_sibling = 0,
2549 .max_div = 0,
2550 .base = &virt_bases[MMSS_BASE],
2551 .c = {
2552 .dbg_name = "mmss_s0_axi_clk",
2553 .parent = &axi_clk_src.c,
2554 .ops = &clk_ops_branch,
2555 CLK_INIT(mmss_s0_axi_clk.c),
2556 .depends = &mmss_mmssnoc_axi_clk.c,
2557 },
2558};
2559
Patrick Dalyeb370ea2012-10-23 11:57:50 -07002560static struct branch_clk oxili_gfx3d_clk = {
2561 .cbcr_reg = OXILI_GFX3D_CBCR,
Patrick Daly295173b2013-03-11 13:35:40 -07002562 .has_sibling = 0,
Patrick Dalyeb370ea2012-10-23 11:57:50 -07002563 .max_div = 0,
2564 .base = &virt_bases[MMSS_BASE],
2565 .c = {
2566 .dbg_name = "oxili_gfx3d_clk",
2567 .parent = &gfx3d_clk_src.c,
2568 .ops = &clk_ops_branch,
2569 CLK_INIT(oxili_gfx3d_clk.c),
Patrick Dalyeb370ea2012-10-23 11:57:50 -07002570 },
2571};
2572
2573static struct branch_clk oxilicx_ahb_clk = {
2574 .cbcr_reg = OXILICX_AHB_CBCR,
2575 .has_sibling = 1,
2576 .base = &virt_bases[MMSS_BASE],
2577 .c = {
2578 .dbg_name = "oxilicx_ahb_clk",
2579 .ops = &clk_ops_branch,
2580 CLK_INIT(oxilicx_ahb_clk.c),
2581 },
2582};
2583
2584static struct branch_clk oxilicx_axi_clk = {
2585 .cbcr_reg = OXILICX_AXI_CBCR,
2586 .has_sibling = 1,
2587 .base = &virt_bases[MMSS_BASE],
2588 .c = {
2589 .dbg_name = "oxilicx_axi_clk",
2590 .parent = &axi_clk_src.c,
2591 .ops = &clk_ops_branch,
2592 CLK_INIT(oxilicx_axi_clk.c),
2593 },
2594};
2595
2596static struct branch_clk venus0_ahb_clk = {
2597 .cbcr_reg = VENUS0_AHB_CBCR,
2598 .has_sibling = 1,
2599 .base = &virt_bases[MMSS_BASE],
2600 .c = {
2601 .dbg_name = "venus0_ahb_clk",
2602 .ops = &clk_ops_branch,
2603 CLK_INIT(venus0_ahb_clk.c),
2604 },
2605};
2606
2607static struct branch_clk venus0_axi_clk = {
2608 .cbcr_reg = VENUS0_AXI_CBCR,
2609 .has_sibling = 1,
2610 .base = &virt_bases[MMSS_BASE],
2611 .c = {
2612 .dbg_name = "venus0_axi_clk",
2613 .parent = &axi_clk_src.c,
2614 .ops = &clk_ops_branch,
2615 CLK_INIT(venus0_axi_clk.c),
2616 },
2617};
2618
2619static struct branch_clk venus0_vcodec0_clk = {
2620 .cbcr_reg = VENUS0_VCODEC0_CBCR,
2621 .has_sibling = 0,
2622 .base = &virt_bases[MMSS_BASE],
2623 .c = {
2624 .dbg_name = "venus0_vcodec0_clk",
2625 .parent = &vcodec0_clk_src.c,
2626 .ops = &clk_ops_branch,
2627 CLK_INIT(venus0_vcodec0_clk.c),
2628 },
2629};
2630
2631static struct measure_mux_entry measure_mux_MMSS[] = {
Patrick Dalyeb370ea2012-10-23 11:57:50 -07002632 { &mmss_mmssnoc_bto_ahb_clk.c, MMSS_BASE, 0x0002 },
2633 { &mmss_misc_ahb_clk.c, MMSS_BASE, 0x0003 },
2634 { &mmss_mmssnoc_axi_clk.c, MMSS_BASE, 0x0004 },
2635 { &mmss_s0_axi_clk.c, MMSS_BASE, 0x0005 },
Patrick Dalyeb370ea2012-10-23 11:57:50 -07002636 { &oxilicx_axi_clk.c, MMSS_BASE, 0x000b },
2637 { &oxilicx_ahb_clk.c, MMSS_BASE, 0x000c },
2638 { &oxili_gfx3d_clk.c, MMSS_BASE, 0x000d },
2639 { &venus0_vcodec0_clk.c, MMSS_BASE, 0x000e },
2640 { &venus0_axi_clk.c, MMSS_BASE, 0x000f },
2641 { &venus0_ahb_clk.c, MMSS_BASE, 0x0011 },
2642 { &mdss_mdp_clk.c, MMSS_BASE, 0x0014 },
2643 { &mdss_mdp_lut_clk.c, MMSS_BASE, 0x0015 },
2644 { &mdss_pclk0_clk.c, MMSS_BASE, 0x0016 },
2645 { &mdss_vsync_clk.c, MMSS_BASE, 0x001c },
2646 { &mdss_byte0_clk.c, MMSS_BASE, 0x001e },
2647 { &mdss_esc0_clk.c, MMSS_BASE, 0x0020 },
2648 { &mdss_ahb_clk.c, MMSS_BASE, 0x0022 },
2649 { &mdss_axi_clk.c, MMSS_BASE, 0x0024 },
2650 { &camss_top_ahb_clk.c, MMSS_BASE, 0x0025 },
2651 { &camss_micro_ahb_clk.c, MMSS_BASE, 0x0026 },
2652 { &camss_gp0_clk.c, MMSS_BASE, 0x0027 },
2653 { &camss_gp1_clk.c, MMSS_BASE, 0x0028 },
2654 { &camss_mclk0_clk.c, MMSS_BASE, 0x0029 },
2655 { &camss_mclk1_clk.c, MMSS_BASE, 0x002a },
2656 { &camss_cci_cci_clk.c, MMSS_BASE, 0x002d },
2657 { &camss_cci_cci_ahb_clk.c, MMSS_BASE, 0x002e },
2658 { &camss_phy0_csi0phytimer_clk.c, MMSS_BASE, 0x002f },
2659 { &camss_phy1_csi1phytimer_clk.c, MMSS_BASE, 0x0030 },
2660 { &camss_jpeg_jpeg0_clk.c, MMSS_BASE, 0x0032 },
2661 { &camss_jpeg_jpeg_ahb_clk.c, MMSS_BASE, 0x0035 },
2662 { &camss_jpeg_jpeg_axi_clk.c, MMSS_BASE, 0x0036 },
2663 { &camss_vfe_vfe0_clk.c, MMSS_BASE, 0x0038 },
2664 { &camss_vfe_cpp_clk.c, MMSS_BASE, 0x003a },
2665 { &camss_vfe_cpp_ahb_clk.c, MMSS_BASE, 0x003b },
2666 { &camss_vfe_vfe_ahb_clk.c, MMSS_BASE, 0x003c },
2667 { &camss_vfe_vfe_axi_clk.c, MMSS_BASE, 0x003d },
2668 { &camss_csi_vfe0_clk.c, MMSS_BASE, 0x003f },
2669 { &camss_csi0_clk.c, MMSS_BASE, 0x0041 },
2670 { &camss_csi0_ahb_clk.c, MMSS_BASE, 0x0042 },
2671 { &camss_csi0phy_clk.c, MMSS_BASE, 0x0043 },
2672 { &camss_csi0rdi_clk.c, MMSS_BASE, 0x0044 },
2673 { &camss_csi0pix_clk.c, MMSS_BASE, 0x0045 },
2674 { &camss_csi1_clk.c, MMSS_BASE, 0x0046 },
2675 { &camss_csi1_ahb_clk.c, MMSS_BASE, 0x0047 },
2676 { &camss_csi1phy_clk.c, MMSS_BASE, 0x0048 },
2677 { &camss_csi1rdi_clk.c, MMSS_BASE, 0x0049 },
2678 { &camss_csi1pix_clk.c, MMSS_BASE, 0x004a },
2679 { &camss_ispif_ahb_clk.c, MMSS_BASE, 0x0055 },
2680 {&dummy_clk, N_BASES, 0x0000},
2681};
2682
Patrick Dalyeb370ea2012-10-23 11:57:50 -07002683static struct branch_clk q6ss_ahb_lfabif_clk = {
2684 .cbcr_reg = Q6SS_AHB_LFABIF_CBCR,
2685 .has_sibling = 1,
2686 .base = &virt_bases[LPASS_BASE],
2687 .c = {
2688 .dbg_name = "q6ss_ahb_lfabif_clk",
2689 .ops = &clk_ops_branch,
2690 CLK_INIT(q6ss_ahb_lfabif_clk.c),
2691 },
2692};
2693
2694static struct branch_clk q6ss_ahbm_clk = {
2695 .cbcr_reg = Q6SS_AHBM_CBCR,
2696 .has_sibling = 1,
2697 .base = &virt_bases[LPASS_BASE],
2698 .c = {
2699 .dbg_name = "q6ss_ahbm_clk",
2700 .ops = &clk_ops_branch,
2701 CLK_INIT(q6ss_ahbm_clk.c),
2702 },
2703};
2704
Patrick Dalyeb370ea2012-10-23 11:57:50 -07002705static struct branch_clk q6ss_xo_clk = {
2706 .cbcr_reg = Q6SS_XO_CBCR,
2707 .has_sibling = 1,
2708 .bcr_reg = Q6SS_BCR,
2709 .base = &virt_bases[LPASS_BASE],
2710 .c = {
2711 .dbg_name = "q6ss_xo_clk",
Patrick Dalyeb370ea2012-10-23 11:57:50 -07002712 .ops = &clk_ops_branch,
2713 CLK_INIT(q6ss_xo_clk.c),
2714 },
2715};
2716
Patrick Dalyeb370ea2012-10-23 11:57:50 -07002717static struct measure_mux_entry measure_mux_LPASS[] = {
Patrick Dalyeb370ea2012-10-23 11:57:50 -07002718 { &q6ss_ahbm_clk.c, LPASS_BASE, 0x001d },
2719 { &q6ss_ahb_lfabif_clk.c, LPASS_BASE, 0x001e },
Patrick Dalyeb370ea2012-10-23 11:57:50 -07002720 { &q6ss_xo_clk.c, LPASS_BASE, 0x002b },
Patrick Dalyeb370ea2012-10-23 11:57:50 -07002721 {&dummy_clk, N_BASES, 0x0000},
2722};
2723
2724
2725static DEFINE_CLK_MEASURE(apc0_m_clk);
2726static DEFINE_CLK_MEASURE(apc1_m_clk);
2727static DEFINE_CLK_MEASURE(apc2_m_clk);
2728static DEFINE_CLK_MEASURE(apc3_m_clk);
2729static DEFINE_CLK_MEASURE(l2_m_clk);
2730
2731static struct measure_mux_entry measure_mux_APSS[] = {
2732 {&apc0_m_clk, APCS_BASE, 0x00010},
2733 {&apc1_m_clk, APCS_BASE, 0x00114},
2734 {&apc2_m_clk, APCS_BASE, 0x00220},
2735 {&apc3_m_clk, APCS_BASE, 0x00324},
2736 {&l2_m_clk, APCS_BASE, 0x01000},
2737 {&dummy_clk, N_BASES, 0x0000}
2738};
2739
2740#define APCS_SH_PLL_MODE (0x000)
2741#define APCS_SH_PLL_L_VAL (0x004)
2742#define APCS_SH_PLL_M_VAL (0x008)
2743#define APCS_SH_PLL_N_VAL (0x00C)
2744#define APCS_SH_PLL_USER_CTL (0x010)
2745#define APCS_SH_PLL_CONFIG_CTL (0x014)
2746#define APCS_SH_PLL_STATUS (0x01C)
2747
2748enum vdd_sr2_pll_levels {
2749 VDD_SR2_PLL_OFF,
Patrick Daly6fb589a2013-03-29 17:55:55 -07002750 VDD_SR2_PLL_SVS,
2751 VDD_SR2_PLL_NOM,
2752 VDD_SR2_PLL_TUR,
Patrick Dalyeb370ea2012-10-23 11:57:50 -07002753 VDD_SR2_PLL_NUM
2754};
2755
Patrick Dalycbdceb72013-04-16 17:02:34 -07002756static int *vdd_sr2_levels[] = {
Patrick Daly6fb589a2013-03-29 17:55:55 -07002757 [VDD_SR2_PLL_OFF] = VDD_UV(0, RPM_REGULATOR_CORNER_NONE),
2758 [VDD_SR2_PLL_SVS] = VDD_UV(1800000, RPM_REGULATOR_CORNER_SVS_SOC),
2759 [VDD_SR2_PLL_NOM] = VDD_UV(1800000, RPM_REGULATOR_CORNER_NORMAL),
2760 [VDD_SR2_PLL_TUR] = VDD_UV(1800000, RPM_REGULATOR_CORNER_SUPER_TURBO),
Patrick Dalyebc26bc2013-02-05 11:49:07 -08002761};
Patrick Dalyeb370ea2012-10-23 11:57:50 -07002762
Patrick Daly653c0b52013-04-16 17:18:28 -07002763static DEFINE_VDD_REGULATORS(vdd_sr2_pll, VDD_SR2_PLL_NUM, 2,
2764 vdd_sr2_levels, NULL);
Patrick Dalyeb370ea2012-10-23 11:57:50 -07002765
2766static struct pll_freq_tbl apcs_pll_freq[] = {
2767 F_APCS_PLL( 384000000, 20, 0x0, 0x1, 0x0, 0x0, 0x0),
2768 F_APCS_PLL( 787200000, 41, 0x0, 0x1, 0x0, 0x0, 0x0),
2769 F_APCS_PLL( 998400000, 52, 0x0, 0x1, 0x0, 0x0, 0x0),
Patrick Dalyf363c252013-03-21 12:08:37 -07002770 F_APCS_PLL(1094400000, 57, 0x0, 0x1, 0x0, 0x0, 0x0),
Patrick Dalyeb370ea2012-10-23 11:57:50 -07002771 F_APCS_PLL(1190400000, 62, 0x0, 0x1, 0x0, 0x0, 0x0),
2772 PLL_F_END
2773};
2774
2775static struct pll_clk a7sspll = {
2776 .mode_reg = (void __iomem *)APCS_SH_PLL_MODE,
2777 .l_reg = (void __iomem *)APCS_SH_PLL_L_VAL,
2778 .m_reg = (void __iomem *)APCS_SH_PLL_M_VAL,
2779 .n_reg = (void __iomem *)APCS_SH_PLL_N_VAL,
2780 .config_reg = (void __iomem *)APCS_SH_PLL_USER_CTL,
2781 .status_reg = (void __iomem *)APCS_SH_PLL_STATUS,
2782 .freq_tbl = apcs_pll_freq,
2783 .masks = {
2784 .vco_mask = BM(29, 28),
2785 .pre_div_mask = BIT(12),
2786 .post_div_mask = BM(9, 8),
2787 .mn_en_mask = BIT(24),
2788 .main_output_mask = BIT(0),
2789 },
2790 .base = &virt_bases[APCS_PLL_BASE],
2791 .c = {
Patrick Daly9bdc8a52013-03-21 19:12:40 -07002792 .parent = &xo_a_clk.c,
Patrick Dalyeb370ea2012-10-23 11:57:50 -07002793 .dbg_name = "a7sspll",
2794 .ops = &clk_ops_sr2_pll,
2795 .vdd_class = &vdd_sr2_pll,
2796 .fmax = (unsigned long [VDD_SR2_PLL_NUM]) {
Patrick Daly6fb589a2013-03-29 17:55:55 -07002797 [VDD_SR2_PLL_SVS] = 1000000000,
2798 [VDD_SR2_PLL_NOM] = 1900000000,
Patrick Dalyeb370ea2012-10-23 11:57:50 -07002799 },
2800 .num_fmax = VDD_SR2_PLL_NUM,
2801 CLK_INIT(a7sspll.c),
2802 /*
2803 * Need to skip handoff of the acpu pll to avoid
2804 * turning off the pll when the cpu is using it
2805 */
2806 .flags = CLKFLAG_SKIP_HANDOFF,
2807 },
2808};
2809
2810static DEFINE_CLK_VOTER(pnoc_msmbus_clk, &pnoc_clk.c, LONG_MAX);
2811static DEFINE_CLK_VOTER(snoc_msmbus_clk, &snoc_clk.c, LONG_MAX);
2812static DEFINE_CLK_VOTER(cnoc_msmbus_clk, &cnoc_clk.c, LONG_MAX);
2813static DEFINE_CLK_VOTER(pnoc_msmbus_a_clk, &pnoc_a_clk.c, LONG_MAX);
2814static DEFINE_CLK_VOTER(snoc_msmbus_a_clk, &snoc_a_clk.c, LONG_MAX);
2815static DEFINE_CLK_VOTER(cnoc_msmbus_a_clk, &cnoc_a_clk.c, LONG_MAX);
2816
2817static DEFINE_CLK_VOTER(bimc_msmbus_clk, &bimc_clk.c, LONG_MAX);
2818static DEFINE_CLK_VOTER(bimc_msmbus_a_clk, &bimc_a_clk.c, LONG_MAX);
2819static DEFINE_CLK_VOTER(bimc_acpu_a_clk, &bimc_a_clk.c, LONG_MAX);
2820static DEFINE_CLK_VOTER(oxili_gfx3d_clk_src, &gfx3d_clk_src.c, LONG_MAX);
2821static DEFINE_CLK_VOTER(ocmemgx_msmbus_clk, &ocmemgx_clk.c, LONG_MAX);
2822static DEFINE_CLK_VOTER(ocmemgx_msmbus_a_clk, &ocmemgx_a_clk.c, LONG_MAX);
2823static DEFINE_CLK_VOTER(ocmemgx_core_clk, &ocmemgx_clk.c, LONG_MAX);
2824
2825static DEFINE_CLK_VOTER(pnoc_sps_clk, &pnoc_clk.c, LONG_MAX);
2826
Patrick Daly4aef16c2013-04-17 15:44:12 -07002827static DEFINE_CLK_VOTER(qseecom_ce1_clk_src, &ce1_clk_src.c, 100000000);
2828static DEFINE_CLK_VOTER(scm_ce1_clk_src, &ce1_clk_src.c, 100000000);
Patrick Dalye07324c2013-03-27 18:02:49 -07002829
Patrick Dalya5296072013-03-19 12:18:04 -07002830static DEFINE_CLK_BRANCH_VOTER(cxo_otg_clk, &xo.c);
2831static DEFINE_CLK_BRANCH_VOTER(cxo_pil_lpass_clk, &xo.c);
2832static DEFINE_CLK_BRANCH_VOTER(cxo_pil_mss_clk, &xo.c);
2833static DEFINE_CLK_BRANCH_VOTER(cxo_wlan_clk, &xo.c);
2834static DEFINE_CLK_BRANCH_VOTER(cxo_pil_pronto_clk, &xo.c);
2835
2836
Patrick Dalyeb370ea2012-10-23 11:57:50 -07002837#ifdef CONFIG_DEBUG_FS
2838static int measure_clk_set_parent(struct clk *c, struct clk *parent)
2839{
2840 struct measure_clk *clk = to_measure_clk(c);
2841 unsigned long flags;
Patrick Dalyb4997982013-01-31 11:45:28 -08002842 u32 regval, clk_sel, found = 0;
Patrick Dalyeb370ea2012-10-23 11:57:50 -07002843 int i;
Patrick Dalyb4997982013-01-31 11:45:28 -08002844 static const struct measure_mux_entry *array[] = {
Patrick Dalyeb370ea2012-10-23 11:57:50 -07002845 measure_mux_GCC,
2846 measure_mux_MMSS,
2847 measure_mux_LPASS,
2848 measure_mux_APSS,
2849 NULL
2850 };
Patrick Dalyb4997982013-01-31 11:45:28 -08002851 const struct measure_mux_entry *mux = array[0];
Patrick Dalyeb370ea2012-10-23 11:57:50 -07002852
2853 if (!parent)
2854 return -EINVAL;
2855
Patrick Dalyb4997982013-01-31 11:45:28 -08002856 for (i = 0; array[i] && !found; i++) {
Patrick Dalyeb370ea2012-10-23 11:57:50 -07002857 for (mux = array[i]; mux->c != &dummy_clk; mux++)
Patrick Dalyb4997982013-01-31 11:45:28 -08002858 if (mux->c == parent) {
2859 found = 1;
Patrick Dalyeb370ea2012-10-23 11:57:50 -07002860 break;
Patrick Dalyb4997982013-01-31 11:45:28 -08002861 }
Patrick Dalyeb370ea2012-10-23 11:57:50 -07002862 }
2863
2864 if (mux->c == &dummy_clk)
2865 return -EINVAL;
2866
2867 spin_lock_irqsave(&local_clock_reg_lock, flags);
2868 /*
2869 * Program the test vector, measurement period (sample_ticks)
2870 * and scaling multiplier.
2871 */
2872 clk->sample_ticks = 0x10000;
2873 clk->multiplier = 1;
2874
2875 switch (mux->base) {
2876
2877 case GCC_BASE:
2878 writel_relaxed(0, GCC_REG_BASE(GCC_DEBUG_CLK_CTL));
2879 clk_sel = mux->debug_mux;
2880 break;
2881
2882 case MMSS_BASE:
2883 writel_relaxed(0, MMSS_REG_BASE(MMSS_DEBUG_CLK_CTL));
2884 clk_sel = 0x02C;
2885 regval = BVAL(11, 0, mux->debug_mux);
2886 writel_relaxed(regval, MMSS_REG_BASE(MMSS_DEBUG_CLK_CTL));
2887
2888 /* Activate debug clock output */
2889 regval |= BIT(16);
2890 writel_relaxed(regval, MMSS_REG_BASE(MMSS_DEBUG_CLK_CTL));
2891 break;
2892
2893 case LPASS_BASE:
2894 writel_relaxed(0, LPASS_REG_BASE(LPASS_DEBUG_CLK_CTL));
2895 clk_sel = 0x161;
2896 regval = BVAL(11, 0, mux->debug_mux);
2897 writel_relaxed(regval, LPASS_REG_BASE(LPASS_DEBUG_CLK_CTL));
2898
2899 /* Activate debug clock output */
2900 regval |= BIT(20);
2901 writel_relaxed(regval, LPASS_REG_BASE(LPASS_DEBUG_CLK_CTL));
2902 break;
2903
2904 case APCS_BASE:
2905 clk->multiplier = 4;
2906 clk_sel = 362;
2907 regval = readl_relaxed(APCS_REG_BASE(GLB_CLK_DIAG));
2908 regval &= ~0xC0037335;
2909 /* configure a divider of 4 */
2910 regval = BVAL(31, 30, 0x3) | mux->debug_mux;
2911 writel_relaxed(regval, APCS_REG_BASE(GLB_CLK_DIAG));
2912 break;
2913
2914 default:
2915 return -EINVAL;
2916 }
2917
2918 /* Set debug mux clock index */
2919 regval = BVAL(8, 0, clk_sel);
2920 writel_relaxed(regval, GCC_REG_BASE(GCC_DEBUG_CLK_CTL));
2921
2922 /* Activate debug clock output */
2923 regval |= BIT(16);
2924 writel_relaxed(regval, GCC_REG_BASE(GCC_DEBUG_CLK_CTL));
2925
2926 /* Make sure test vector is set before starting measurements. */
2927 mb();
2928 spin_unlock_irqrestore(&local_clock_reg_lock, flags);
2929
2930 return 0;
2931}
2932
2933/* Sample clock for 'ticks' reference clock ticks. */
2934static u32 run_measurement(unsigned ticks)
2935{
2936 /* Stop counters and set the XO4 counter start value. */
2937 writel_relaxed(ticks, GCC_REG_BASE(CLOCK_FRQ_MEASURE_CTL));
2938
2939 /* Wait for timer to become ready. */
2940 while ((readl_relaxed(GCC_REG_BASE(CLOCK_FRQ_MEASURE_STATUS)) &
2941 BIT(25)) != 0)
2942 cpu_relax();
2943
2944 /* Run measurement and wait for completion. */
2945 writel_relaxed(BIT(20)|ticks, GCC_REG_BASE(CLOCK_FRQ_MEASURE_CTL));
2946 while ((readl_relaxed(GCC_REG_BASE(CLOCK_FRQ_MEASURE_STATUS)) &
2947 BIT(25)) == 0)
2948 cpu_relax();
2949
2950 /* Return measured ticks. */
2951 return readl_relaxed(GCC_REG_BASE(CLOCK_FRQ_MEASURE_STATUS)) &
2952 BM(24, 0);
2953}
2954
2955/*
2956 * Perform a hardware rate measurement for a given clock.
2957 * FOR DEBUG USE ONLY: Measurements take ~15 ms!
2958 */
2959static unsigned long measure_clk_get_rate(struct clk *c)
2960{
2961 unsigned long flags;
2962 u32 gcc_xo4_reg_backup;
2963 u64 raw_count_short, raw_count_full;
2964 struct measure_clk *clk = to_measure_clk(c);
2965 unsigned ret;
2966
2967 ret = clk_prepare_enable(&xo.c);
2968 if (ret) {
2969 pr_warn("CXO clock failed to enable. Can't measure\n");
2970 return 0;
2971 }
2972
2973 spin_lock_irqsave(&local_clock_reg_lock, flags);
2974
2975 /* Enable CXO/4 and RINGOSC branch. */
2976 gcc_xo4_reg_backup = readl_relaxed(GCC_REG_BASE(GCC_XO_DIV4_CBCR));
2977 writel_relaxed(0x1, GCC_REG_BASE(GCC_XO_DIV4_CBCR));
2978
2979 /*
2980 * The ring oscillator counter will not reset if the measured clock
2981 * is not running. To detect this, run a short measurement before
2982 * the full measurement. If the raw results of the two are the same
2983 * then the clock must be off.
2984 */
2985
2986 /* Run a short measurement. (~1 ms) */
2987 raw_count_short = run_measurement(0x1000);
2988 /* Run a full measurement. (~14 ms) */
2989 raw_count_full = run_measurement(clk->sample_ticks);
2990
2991 writel_relaxed(gcc_xo4_reg_backup, GCC_REG_BASE(GCC_XO_DIV4_CBCR));
2992
2993 /* Return 0 if the clock is off. */
2994 if (raw_count_full == raw_count_short) {
2995 ret = 0;
2996 } else {
2997 /* Compute rate in Hz. */
2998 raw_count_full = ((raw_count_full * 10) + 15) * 4800000;
2999 do_div(raw_count_full, ((clk->sample_ticks * 10) + 35));
3000 ret = (raw_count_full * clk->multiplier);
3001 }
3002
3003 writel_relaxed(0x51A00, GCC_REG_BASE(PLLTEST_PAD_CFG));
3004 spin_unlock_irqrestore(&local_clock_reg_lock, flags);
3005
3006 clk_disable_unprepare(&xo.c);
3007
3008 return ret;
3009}
3010
3011#else /* !CONFIG_DEBUG_FS */
3012static int measure_clk_set_parent(struct clk *clk, struct clk *parent)
3013{
3014 return -EINVAL;
3015}
3016
3017static unsigned long measure_clk_get_rate(struct clk *clk)
3018{
3019 return 0;
3020}
3021#endif /* CONFIG_DEBUG_FS */
3022
3023static struct clk_ops clk_ops_measure = {
3024 .set_parent = measure_clk_set_parent,
3025 .get_rate = measure_clk_get_rate,
3026};
3027
3028static struct measure_clk measure_clk = {
3029 .c = {
3030 .dbg_name = "measure_clk",
3031 .ops = &clk_ops_measure,
3032 CLK_INIT(measure_clk.c),
3033 },
3034 .multiplier = 1,
3035};
3036
3037static struct clk_lookup msm_clocks_8226[] = {
3038 /* Debug Clocks */
3039 CLK_LOOKUP("measure", measure_clk.c, "debug"),
3040 CLK_LOOKUP("apc0_m_clk", apc0_m_clk, ""),
3041 CLK_LOOKUP("apc1_m_clk", apc1_m_clk, ""),
3042 CLK_LOOKUP("apc2_m_clk", apc2_m_clk, ""),
3043 CLK_LOOKUP("apc3_m_clk", apc3_m_clk, ""),
3044 CLK_LOOKUP("l2_m_clk", l2_m_clk, ""),
3045
3046 /* PIL-LPASS */
Patrick Dalya5296072013-03-19 12:18:04 -07003047 CLK_LOOKUP("xo", cxo_pil_lpass_clk.c, "fe200000.qcom,lpass"),
Patrick Dalyeb370ea2012-10-23 11:57:50 -07003048 CLK_LOOKUP("core_clk", q6ss_xo_clk.c, "fe200000.qcom,lpass"),
3049 CLK_LOOKUP("bus_clk", gcc_lpass_q6_axi_clk.c, "fe200000.qcom,lpass"),
3050 CLK_LOOKUP("iface_clk", q6ss_ahb_lfabif_clk.c, "fe200000.qcom,lpass"),
3051 CLK_LOOKUP("reg_clk", q6ss_ahbm_clk.c, "fe200000.qcom,lpass"),
3052
3053 /* PIL-MODEM */
Patrick Dalya5296072013-03-19 12:18:04 -07003054 CLK_LOOKUP("xo", cxo_pil_mss_clk.c, "fc880000.qcom,mss"),
Patrick Dalyeb370ea2012-10-23 11:57:50 -07003055 CLK_LOOKUP("bus_clk", gcc_mss_q6_bimc_axi_clk.c, "fc880000.qcom,mss"),
3056 CLK_LOOKUP("iface_clk", gcc_mss_cfg_ahb_clk.c, "fc880000.qcom,mss"),
3057 CLK_LOOKUP("mem_clk", gcc_boot_rom_ahb_clk.c, "fc880000.qcom,mss"),
3058
3059 /* PIL-PRONTO */
Patrick Dalya5296072013-03-19 12:18:04 -07003060 CLK_LOOKUP("xo", cxo_pil_pronto_clk.c, "fb21b000.qcom,pronto"),
Patrick Dalyeb370ea2012-10-23 11:57:50 -07003061
3062 /* PIL-VENUS */
3063 CLK_LOOKUP("src_clk", vcodec0_clk_src.c, "fdce0000.qcom,venus"),
3064 CLK_LOOKUP("core_clk", venus0_vcodec0_clk.c, "fdce0000.qcom,venus"),
3065 CLK_LOOKUP("iface_clk", venus0_ahb_clk.c, "fdce0000.qcom,venus"),
3066 CLK_LOOKUP("bus_clk", venus0_axi_clk.c, "fdce0000.qcom,venus"),
3067 CLK_LOOKUP("mem_clk", venus0_ahb_clk.c, "fdce0000.qcom,venus"),
3068
3069 /* ACPUCLOCK */
3070 CLK_LOOKUP("xo", xo_a_clk.c, "f9011050.qcom,acpuclk"),
3071 CLK_LOOKUP("gpll0", gpll0_ao.c, "f9011050.qcom,acpuclk"),
3072 CLK_LOOKUP("a7sspll", a7sspll.c, "f9011050.qcom,acpuclk"),
3073
3074 /* WCNSS CLOCKS */
Patrick Dalya5296072013-03-19 12:18:04 -07003075 CLK_LOOKUP("xo", cxo_wlan_clk.c, "fb000000.qcom,wcnss-wlan"),
Vikram Mulukutla7e5b3112013-04-15 16:32:40 -07003076 CLK_LOOKUP("rf_clk", cxo_a1.c, "fb000000.qcom,wcnss-wlan"),
Patrick Dalyeb370ea2012-10-23 11:57:50 -07003077
3078 /* BUS DRIVER */
3079 CLK_LOOKUP("bus_clk", cnoc_msmbus_clk.c, "msm_config_noc"),
3080 CLK_LOOKUP("bus_a_clk", cnoc_msmbus_a_clk.c, "msm_config_noc"),
3081 CLK_LOOKUP("bus_clk", snoc_msmbus_clk.c, "msm_sys_noc"),
3082 CLK_LOOKUP("bus_a_clk", snoc_msmbus_a_clk.c, "msm_sys_noc"),
3083 CLK_LOOKUP("bus_clk", pnoc_msmbus_clk.c, "msm_periph_noc"),
3084 CLK_LOOKUP("bus_a_clk", pnoc_msmbus_a_clk.c, "msm_periph_noc"),
3085 CLK_LOOKUP("mem_clk", bimc_msmbus_clk.c, "msm_bimc"),
3086 CLK_LOOKUP("mem_a_clk", bimc_msmbus_a_clk.c, "msm_bimc"),
3087 CLK_LOOKUP("mem_clk", bimc_acpu_a_clk.c, ""),
3088 CLK_LOOKUP("ocmem_clk", ocmemgx_msmbus_clk.c, "msm_bus"),
3089 CLK_LOOKUP("ocmem_a_clk", ocmemgx_msmbus_a_clk.c, "msm_bus"),
3090 CLK_LOOKUP("bus_clk", mmss_s0_axi_clk.c, "msm_mmss_noc"),
3091 CLK_LOOKUP("bus_a_clk", mmss_s0_axi_clk.c, "msm_mmss_noc"),
Patrick Dalyeb370ea2012-10-23 11:57:50 -07003092
Aparna Das8c8e9752013-02-28 21:23:24 -08003093 /* CoreSight clocks */
3094 CLK_LOOKUP("core_clk", qdss_clk.c, "fc322000.tmc"),
3095 CLK_LOOKUP("core_clk", qdss_clk.c, "fc318000.tpiu"),
3096 CLK_LOOKUP("core_clk", qdss_clk.c, "fc31c000.replicator"),
3097 CLK_LOOKUP("core_clk", qdss_clk.c, "fc307000.tmc"),
3098 CLK_LOOKUP("core_clk", qdss_clk.c, "fc31b000.funnel"),
3099 CLK_LOOKUP("core_clk", qdss_clk.c, "fc319000.funnel"),
3100 CLK_LOOKUP("core_clk", qdss_clk.c, "fc31a000.funnel"),
3101 CLK_LOOKUP("core_clk", qdss_clk.c, "fc345000.funnel"),
3102 CLK_LOOKUP("core_clk", qdss_clk.c, "fc364000.funnel"),
3103 CLK_LOOKUP("core_clk", qdss_clk.c, "fc321000.stm"),
3104 CLK_LOOKUP("core_clk", qdss_clk.c, "fc33c000.etm"),
3105 CLK_LOOKUP("core_clk", qdss_clk.c, "fc33d000.etm"),
3106 CLK_LOOKUP("core_clk", qdss_clk.c, "fc33e000.etm"),
3107 CLK_LOOKUP("core_clk", qdss_clk.c, "fc33f000.etm"),
Pushkar Joshi14676cc2013-03-11 14:53:53 -07003108 CLK_LOOKUP("core_clk", qdss_clk.c, "fc33c000.jtagmm"),
3109 CLK_LOOKUP("core_clk", qdss_clk.c, "fc33d000.jtagmm"),
3110 CLK_LOOKUP("core_clk", qdss_clk.c, "fc33e000.jtagmm"),
3111 CLK_LOOKUP("core_clk", qdss_clk.c, "fc33f000.jtagmm"),
Aparna Dasbb65be42013-03-07 12:39:45 -08003112 CLK_LOOKUP("core_clk", qdss_clk.c, "fc308000.cti"),
3113 CLK_LOOKUP("core_clk", qdss_clk.c, "fc309000.cti"),
3114 CLK_LOOKUP("core_clk", qdss_clk.c, "fc30a000.cti"),
3115 CLK_LOOKUP("core_clk", qdss_clk.c, "fc30b000.cti"),
3116 CLK_LOOKUP("core_clk", qdss_clk.c, "fc30c000.cti"),
3117 CLK_LOOKUP("core_clk", qdss_clk.c, "fc30d000.cti"),
3118 CLK_LOOKUP("core_clk", qdss_clk.c, "fc30e000.cti"),
3119 CLK_LOOKUP("core_clk", qdss_clk.c, "fc30f000.cti"),
3120 CLK_LOOKUP("core_clk", qdss_clk.c, "fc310000.cti"),
3121 CLK_LOOKUP("core_clk", qdss_clk.c, "fc340000.cti"),
3122 CLK_LOOKUP("core_clk", qdss_clk.c, "fc341000.cti"),
3123 CLK_LOOKUP("core_clk", qdss_clk.c, "fc342000.cti"),
3124 CLK_LOOKUP("core_clk", qdss_clk.c, "fc343000.cti"),
3125 CLK_LOOKUP("core_clk", qdss_clk.c, "fc344000.cti"),
Aparna Dasca6aa3a2013-04-02 16:25:27 -07003126 CLK_LOOKUP("core_clk", qdss_clk.c, "fd828018.hwevent"),
Patrick Dalyeb370ea2012-10-23 11:57:50 -07003127
Aparna Das8c8e9752013-02-28 21:23:24 -08003128 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc322000.tmc"),
3129 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc318000.tpiu"),
3130 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc31c000.replicator"),
3131 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc307000.tmc"),
3132 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc31b000.funnel"),
3133 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc319000.funnel"),
3134 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc31a000.funnel"),
3135 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc345000.funnel"),
3136 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc364000.funnel"),
3137 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc321000.stm"),
3138 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc33c000.etm"),
3139 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc33d000.etm"),
3140 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc33e000.etm"),
3141 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc33f000.etm"),
Aparna Das664239c2013-05-03 20:13:50 -07003142 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc33c000.jtagmm"),
3143 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc33d000.jtagmm"),
3144 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc33e000.jtagmm"),
3145 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc33f000.jtagmm"),
Aparna Dasbb65be42013-03-07 12:39:45 -08003146 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc308000.cti"),
3147 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc309000.cti"),
3148 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc30a000.cti"),
3149 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc30b000.cti"),
3150 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc30c000.cti"),
3151 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc30d000.cti"),
3152 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc30e000.cti"),
3153 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc30f000.cti"),
3154 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc310000.cti"),
3155 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc340000.cti"),
3156 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc341000.cti"),
3157 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc342000.cti"),
3158 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc343000.cti"),
3159 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fc344000.cti"),
Aparna Dasca6aa3a2013-04-02 16:25:27 -07003160 CLK_LOOKUP("core_a_clk", qdss_a_clk.c, "fd828018.hwevent"),
3161
3162 CLK_LOOKUP("core_mmss_clk", mmss_misc_ahb_clk.c, "fd828018.hwevent"),
Patrick Dalyeb370ea2012-10-23 11:57:50 -07003163
3164 /* HSUSB-OTG Clocks */
Patrick Dalya5296072013-03-19 12:18:04 -07003165 CLK_LOOKUP("xo", cxo_otg_clk.c, "f9a55000.usb"),
Patrick Dalyeb370ea2012-10-23 11:57:50 -07003166 CLK_LOOKUP("iface_clk", gcc_usb_hs_ahb_clk.c, "f9a55000.usb"),
3167 CLK_LOOKUP("core_clk", gcc_usb_hs_system_clk.c, "f9a55000.usb"),
3168
3169 /* SPS CLOCKS */
3170 CLK_LOOKUP("dfab_clk", pnoc_sps_clk.c, "f9984000.qcom,sps"),
3171 CLK_LOOKUP("dma_bam_pclk", gcc_bam_dma_ahb_clk.c, "f9884000.qcom,sps"),
3172 CLK_LOOKUP("dfab_clk", pnoc_sps_clk.c, "msm_sps"),
3173 CLK_LOOKUP("dma_bam_pclk", gcc_bam_dma_ahb_clk.c, "msm_sps"),
3174
3175 /* I2C Clocks */
3176 CLK_LOOKUP("iface_clk", gcc_blsp1_ahb_clk.c, "f9926000.i2c"),
3177 CLK_LOOKUP("core_clk", gcc_blsp1_qup4_i2c_apps_clk.c, "f9926000.i2c"),
3178
Amy Maloche41708ba2013-03-03 15:19:27 -08003179 CLK_LOOKUP("iface_clk", gcc_blsp1_ahb_clk.c, "f9927000.i2c"),
3180 CLK_LOOKUP("core_clk", gcc_blsp1_qup5_i2c_apps_clk.c, "f9927000.i2c"),
3181
Patrick Dalyeb370ea2012-10-23 11:57:50 -07003182 /* lsuart-v14 Clocks */
3183 CLK_LOOKUP("iface_clk", gcc_blsp1_ahb_clk.c, "f991f000.serial"),
3184 CLK_LOOKUP("core_clk", gcc_blsp1_uart3_apps_clk.c, "f991f000.serial"),
3185
3186 CLK_LOOKUP("iface_clk", gcc_blsp1_ahb_clk.c, "f995e000.serial"),
3187 CLK_LOOKUP("core_clk", gcc_blsp1_uart2_apps_clk.c, "f995e000.serial"),
3188
Gilad Avidovd59217c2013-02-01 13:45:59 -07003189 CLK_LOOKUP("iface_clk", gcc_blsp1_ahb_clk.c, "f9923000.spi"),
3190 CLK_LOOKUP("core_clk", gcc_blsp1_qup1_spi_apps_clk.c, "f9923000.spi"),
Patrick Dalyeb370ea2012-10-23 11:57:50 -07003191
3192 CLK_LOOKUP("core_clk", gcc_ce1_clk.c, "qseecom"),
3193 CLK_LOOKUP("iface_clk", gcc_ce1_ahb_clk.c, "qseecom"),
3194 CLK_LOOKUP("bus_clk", gcc_ce1_axi_clk.c, "qseecom"),
Patrick Dalye07324c2013-03-27 18:02:49 -07003195 CLK_LOOKUP("core_clk_src", qseecom_ce1_clk_src.c, "qseecom"),
Patrick Dalyeb370ea2012-10-23 11:57:50 -07003196
Patrick Dalyd5234252013-03-07 16:35:08 -08003197 CLK_LOOKUP("core_clk", gcc_ce1_clk.c, "scm"),
3198 CLK_LOOKUP("iface_clk", gcc_ce1_ahb_clk.c, "scm"),
3199 CLK_LOOKUP("bus_clk", gcc_ce1_axi_clk.c, "scm"),
Patrick Dalye07324c2013-03-27 18:02:49 -07003200 CLK_LOOKUP("core_clk_src", scm_ce1_clk_src.c, "scm"),
3201
3202 CLK_LOOKUP("core_clk_src", ce1_clk_src.c, ""),
Patrick Dalyd5234252013-03-07 16:35:08 -08003203
Patrick Dalyeb370ea2012-10-23 11:57:50 -07003204 /* SDCC */
3205 CLK_LOOKUP("iface_clk", gcc_sdcc1_ahb_clk.c, "f9824000.qcom,sdcc"),
3206 CLK_LOOKUP("core_clk", gcc_sdcc1_apps_clk.c, "f9824000.qcom,sdcc"),
3207 CLK_LOOKUP("iface_clk", gcc_sdcc1_ahb_clk.c, "msm_sdcc.1"),
3208 CLK_LOOKUP("core_clk", gcc_sdcc1_apps_clk.c, "msm_sdcc.1"),
3209
3210 CLK_LOOKUP("iface_clk", gcc_sdcc2_ahb_clk.c, "f98a4000.qcom,sdcc"),
3211 CLK_LOOKUP("core_clk", gcc_sdcc2_apps_clk.c, "f98a4000.qcom,sdcc"),
3212 CLK_LOOKUP("iface_clk", gcc_sdcc2_ahb_clk.c, "msm_sdcc.2"),
3213 CLK_LOOKUP("core_clk", gcc_sdcc2_apps_clk.c, "msm_sdcc.2"),
3214
3215 CLK_LOOKUP("iface_clk", gcc_sdcc3_ahb_clk.c, "msm_sdcc.3"),
3216 CLK_LOOKUP("core_clk", gcc_sdcc3_apps_clk.c, "msm_sdcc.3"),
3217
3218 CLK_LOOKUP("sleep_a_clk", gcc_usb2a_phy_sleep_clk.c, "msm_dwc3"),
3219 CLK_LOOKUP("ref_clk", diff_clk.c, "msm_dwc3"),
3220
3221
3222 CLK_LOOKUP("bus_clk", pnoc_clk.c, ""),
3223 CLK_LOOKUP("bus_clk", pnoc_a_clk.c, ""),
3224 CLK_LOOKUP("bus_clk", snoc_clk.c, ""),
3225 CLK_LOOKUP("bus_clk", snoc_a_clk.c, ""),
3226 CLK_LOOKUP("bus_clk", cnoc_clk.c, ""),
3227 CLK_LOOKUP("bus_clk", cnoc_a_clk.c, ""),
3228 CLK_LOOKUP("bus_clk", mmssnoc_ahb_clk.c, ""),
3229 CLK_LOOKUP("bus_clk", mmssnoc_ahb_a_clk.c, ""),
3230 CLK_LOOKUP("bus_clk", bimc_clk.c, ""),
3231 CLK_LOOKUP("bus_clk", bimc_a_clk.c, ""),
3232 CLK_LOOKUP("bus_clk_src", axi_clk_src.c, ""),
3233
3234 CLK_LOOKUP("gpll0", gpll0.c, ""),
3235 CLK_LOOKUP("gpll1", gpll1.c, ""),
3236 CLK_LOOKUP("mmpll0", mmpll0_pll.c, ""),
3237 CLK_LOOKUP("mmpll1", mmpll1_pll.c, ""),
Patrick Dalyeb370ea2012-10-23 11:57:50 -07003238
3239 CLK_LOOKUP("core_clk", gcc_blsp1_qup1_i2c_apps_clk.c, ""),
3240 CLK_LOOKUP("core_clk", gcc_blsp1_qup2_i2c_apps_clk.c, ""),
3241 CLK_LOOKUP("core_clk", gcc_blsp1_qup2_spi_apps_clk.c, ""),
3242 CLK_LOOKUP("core_clk", gcc_blsp1_qup3_i2c_apps_clk.c, ""),
3243 CLK_LOOKUP("core_clk", gcc_blsp1_qup3_spi_apps_clk.c, ""),
3244 CLK_LOOKUP("core_clk", gcc_blsp1_qup4_i2c_apps_clk.c, ""),
3245 CLK_LOOKUP("core_clk", gcc_blsp1_qup4_spi_apps_clk.c, ""),
3246 CLK_LOOKUP("core_clk", gcc_blsp1_qup5_i2c_apps_clk.c, ""),
3247 CLK_LOOKUP("core_clk", gcc_blsp1_qup5_spi_apps_clk.c, ""),
3248 CLK_LOOKUP("core_clk", gcc_blsp1_qup6_i2c_apps_clk.c, ""),
3249 CLK_LOOKUP("core_clk", gcc_blsp1_qup6_spi_apps_clk.c, ""),
3250 CLK_LOOKUP("core_clk", gcc_blsp1_uart1_apps_clk.c, ""),
3251 CLK_LOOKUP("core_clk", gcc_blsp1_uart4_apps_clk.c, ""),
3252 CLK_LOOKUP("core_clk", gcc_blsp1_uart5_apps_clk.c, ""),
3253 CLK_LOOKUP("core_clk", gcc_blsp1_uart6_apps_clk.c, ""),
3254 CLK_LOOKUP("core_clk", gcc_pdm2_clk.c, ""),
3255 CLK_LOOKUP("iface_clk", gcc_pdm_ahb_clk.c, ""),
3256 CLK_LOOKUP("iface_clk", gcc_prng_ahb_clk.c, ""),
3257 CLK_LOOKUP("core_clk", gcc_gp1_clk.c, ""),
3258 CLK_LOOKUP("core_clk", gcc_gp2_clk.c, ""),
3259 CLK_LOOKUP("core_clk", gcc_gp3_clk.c, ""),
3260
3261 CLK_LOOKUP("iface_clk", gcc_usb_hsic_ahb_clk.c, "msm_hsic_host"),
3262 CLK_LOOKUP("phy_clk", gcc_usb_hsic_clk.c, "msm_hsic_host"),
3263 CLK_LOOKUP("cal_clk", gcc_usb_hsic_io_cal_clk.c, "msm_hsic_host"),
3264 CLK_LOOKUP("core_clk", gcc_usb_hsic_system_clk.c, "msm_hsic_host"),
3265 CLK_LOOKUP("ref_clk", div_clk2.c, "msm_smsc_hub"),
3266 CLK_LOOKUP("iface_clk", gcc_usb_hs_ahb_clk.c, "msm_ehci_host"),
3267 CLK_LOOKUP("core_clk", gcc_usb_hs_system_clk.c, "msm_ehci_host"),
3268 CLK_LOOKUP("pwm_clk", div_clk2.c, "0-0048"),
3269
3270 /* Multimedia clocks */
3271 CLK_LOOKUP("byte_clk", mdss_byte0_clk.c, "fd922800.qcom,mdss_dsi"),
3272 CLK_LOOKUP("core_clk", mdss_esc0_clk.c, "fd922800.qcom,mdss_dsi"),
3273 CLK_LOOKUP("pixel_clk", mdss_pclk0_clk.c, "fd922800.qcom,mdss_dsi"),
3274 CLK_LOOKUP("iface_clk", mdss_ahb_clk.c, "mdss_dsi_clk_ctrl"),
3275
Adrian Salido-Morenof840a032013-03-01 23:10:03 -08003276 CLK_LOOKUP("core_clk", mdss_mdp_clk.c, "fd900000.qcom,mdss_mdp"),
3277 CLK_LOOKUP("lut_clk", mdss_mdp_lut_clk.c, "fd900000.qcom,mdss_mdp"),
3278 CLK_LOOKUP("core_clk_src", mdp_clk_src.c, "fd900000.qcom,mdss_mdp"),
3279 CLK_LOOKUP("vsync_clk", mdss_vsync_clk.c, "fd900000.qcom,mdss_mdp"),
3280 CLK_LOOKUP("iface_clk", mdss_ahb_clk.c, "fd900000.qcom,mdss_mdp"),
3281 CLK_LOOKUP("bus_clk", mdss_axi_clk.c, "fd900000.qcom,mdss_mdp"),
Patrick Dalyeb370ea2012-10-23 11:57:50 -07003282
3283 CLK_LOOKUP("iface_clk", mdss_ahb_clk.c, "fd928000.qcom,iommu"),
3284 CLK_LOOKUP("core_clk", mdss_axi_clk.c, "fd928000.qcom,iommu"),
3285
Matt Wagantallb8cba292013-04-11 15:45:17 -07003286 CLK_LOOKUP("core_clk", venus0_vcodec0_clk.c, "fd8c1024.qcom,gdsc"),
3287 CLK_LOOKUP("core_clk", mdss_mdp_clk.c, "fd8c2304.qcom,gdsc"),
3288 CLK_LOOKUP("lut_clk", mdss_mdp_lut_clk.c, "fd8c2304.qcom,gdsc"),
3289 CLK_LOOKUP("core_clk", camss_jpeg_jpeg0_clk.c, "fd8c35a4.qcom,gdsc"),
3290 CLK_LOOKUP("core_clk", camss_vfe_vfe0_clk.c, "fd8c36a4.qcom,gdsc"),
3291 CLK_LOOKUP("csi_clk", camss_csi_vfe0_clk.c, "fd8c36a4.qcom,gdsc"),
3292 CLK_LOOKUP("cpp_clk", camss_vfe_cpp_clk.c, "fd8c36a4.qcom,gdsc"),
3293 CLK_LOOKUP("core_clk", oxili_gfx3d_clk.c, "fd8c4034.qcom,gdsc"),
3294
Patrick Dalyeb370ea2012-10-23 11:57:50 -07003295 /* MM sensor clocks */
Su Liud1c66ee2013-03-22 15:29:48 -07003296 CLK_LOOKUP("cam_src_clk", mclk0_clk_src.c, "6f.qcom,camera"),
Patrick Dalyeb370ea2012-10-23 11:57:50 -07003297 CLK_LOOKUP("cam_src_clk", mclk1_clk_src.c, "90.qcom,camera"),
Su Liud1c66ee2013-03-22 15:29:48 -07003298 CLK_LOOKUP("cam_src_clk", mclk0_clk_src.c, "6d.qcom,camera"),
3299 CLK_LOOKUP("cam_clk", camss_mclk0_clk.c, "6f.qcom,camera"),
Patrick Dalyeb370ea2012-10-23 11:57:50 -07003300 CLK_LOOKUP("cam_clk", camss_mclk1_clk.c, "90.qcom,camera"),
Su Liud1c66ee2013-03-22 15:29:48 -07003301 CLK_LOOKUP("cam_clk", camss_mclk0_clk.c, "6d.qcom,camera"),
Patrick Dalyeb370ea2012-10-23 11:57:50 -07003302
3303 /* CCI clocks */
3304 CLK_LOOKUP("camss_top_ahb_clk", camss_top_ahb_clk.c,
3305 "fda0c000.qcom,cci"),
3306 CLK_LOOKUP("cci_ahb_clk", camss_cci_cci_ahb_clk.c,
3307 "fda0c000.qcom,cci"),
3308 CLK_LOOKUP("cci_src_clk", cci_clk_src.c, "fda0c000.qcom,cci"),
3309 CLK_LOOKUP("cci_clk", camss_cci_cci_clk.c, "fda0c000.qcom,cci"),
3310
3311 /* CSIPHY clocks */
3312 CLK_LOOKUP("camss_top_ahb_clk", camss_top_ahb_clk.c,
3313 "fda0ac00.qcom,csiphy"),
3314 CLK_LOOKUP("ispif_ahb_clk", camss_ispif_ahb_clk.c,
3315 "fda0ac00.qcom,csiphy"),
3316 CLK_LOOKUP("csiphy_timer_src_clk", csi0phytimer_clk_src.c,
3317 "fda0ac00.qcom,csiphy"),
3318 CLK_LOOKUP("csiphy_timer_clk", camss_phy0_csi0phytimer_clk.c,
3319 "fda0ac00.qcom,csiphy"),
3320 CLK_LOOKUP("camss_top_ahb_clk", camss_top_ahb_clk.c,
3321 "fda0b000.qcom,csiphy"),
3322 CLK_LOOKUP("ispif_ahb_clk", camss_ispif_ahb_clk.c,
3323 "fda0b000.qcom,csiphy"),
3324 CLK_LOOKUP("csiphy_timer_src_clk", csi1phytimer_clk_src.c,
3325 "fda0b000.qcom,csiphy"),
3326 CLK_LOOKUP("csiphy_timer_clk", camss_phy1_csi1phytimer_clk.c,
3327 "fda0b000.qcom,csiphy"),
3328
3329 /* CSID clocks */
Patrick Dalyeb370ea2012-10-23 11:57:50 -07003330 CLK_LOOKUP("ispif_ahb_clk", camss_ispif_ahb_clk.c,
Su Liu2d73d772013-04-24 23:55:32 -07003331 "fda08000.qcom,csid"),
3332 CLK_LOOKUP("camss_top_ahb_clk", camss_top_ahb_clk.c,
3333 "fda08000.qcom,csid"),
3334 CLK_LOOKUP("csi_ahb_clk", camss_csi0_ahb_clk.c,
3335 "fda08000.qcom,csid"),
3336 CLK_LOOKUP("csi_src_clk", csi0_clk_src.c,
3337 "fda08000.qcom,csid"),
3338 CLK_LOOKUP("csi_phy_clk", camss_csi0phy_clk.c,
3339 "fda08000.qcom,csid"),
3340 CLK_LOOKUP("csi_clk", camss_csi0_clk.c,
3341 "fda08000.qcom,csid"),
3342 CLK_LOOKUP("csi_pix_clk", camss_csi0pix_clk.c,
3343 "fda08000.qcom,csid"),
3344 CLK_LOOKUP("csi_rdi_clk", camss_csi0rdi_clk.c,
3345 "fda08000.qcom,csid"),
Patrick Dalyeb370ea2012-10-23 11:57:50 -07003346
Su Liu2d73d772013-04-24 23:55:32 -07003347
Patrick Dalyeb370ea2012-10-23 11:57:50 -07003348 CLK_LOOKUP("ispif_ahb_clk", camss_ispif_ahb_clk.c,
Su Liu2d73d772013-04-24 23:55:32 -07003349 "fda08400.qcom,csid"),
3350 CLK_LOOKUP("camss_top_ahb_clk", camss_top_ahb_clk.c,
3351 "fda08400.qcom,csid"),
3352 CLK_LOOKUP("csi_ahb_clk", camss_csi1_ahb_clk.c,
3353 "fda08400.qcom,csid"),
3354 CLK_LOOKUP("csi_src_clk", csi1_clk_src.c,
3355 "fda08400.qcom,csid"),
3356 CLK_LOOKUP("csi_phy_clk", camss_csi1phy_clk.c,
3357 "fda08400.qcom,csid"),
3358 CLK_LOOKUP("csi_clk", camss_csi1_clk.c,
3359 "fda08400.qcom,csid"),
3360 CLK_LOOKUP("csi_pix_clk", camss_csi1pix_clk.c,
3361 "fda08400.qcom,csid"),
3362 CLK_LOOKUP("csi_rdi_clk", camss_csi1rdi_clk.c,
3363 "fda08400.qcom,csid"),
Patrick Dalyeb370ea2012-10-23 11:57:50 -07003364
3365 /* ISPIF clocks */
Sreesudhan Ramakrish Ramkumarecdcfce2013-04-17 12:58:26 -07003366 CLK_LOOKUP("ispif_ahb_clk", camss_ispif_ahb_clk.c,
3367 "fda0a000.qcom,ispif"),
Patrick Dalyeb370ea2012-10-23 11:57:50 -07003368 CLK_LOOKUP("camss_vfe_vfe_clk", camss_vfe_vfe0_clk.c,
3369 "fda0a000.qcom,ispif"),
3370 CLK_LOOKUP("camss_csi_vfe_clk", camss_csi_vfe0_clk.c,
3371 "fda0a000.qcom,ispif"),
3372
3373 /* VFE clocks */
3374 CLK_LOOKUP("camss_top_ahb_clk", camss_top_ahb_clk.c,
3375 "fda10000.qcom,vfe"),
3376 CLK_LOOKUP("vfe_clk_src", vfe0_clk_src.c, "fda10000.qcom,vfe"),
3377 CLK_LOOKUP("camss_vfe_vfe_clk", camss_vfe_vfe0_clk.c,
3378 "fda10000.qcom,vfe"),
3379 CLK_LOOKUP("camss_csi_vfe_clk", camss_csi_vfe0_clk.c,
3380 "fda10000.qcom,vfe"),
3381 CLK_LOOKUP("iface_clk", camss_vfe_vfe_ahb_clk.c, "fda10000.qcom,vfe"),
3382 CLK_LOOKUP("bus_clk", camss_vfe_vfe_axi_clk.c, "fda10000.qcom,vfe"),
3383
3384 CLK_LOOKUP("iface_clk", camss_vfe_vfe_ahb_clk.c,
3385 "fda44000.qcom,iommu"),
3386 CLK_LOOKUP("core_clk", camss_vfe_vfe_axi_clk.c, "fda44000.qcom,iommu"),
3387 CLK_LOOKUP("alt_core_clk", camss_top_ahb_clk.c, "fda44000.qcom,iommu"),
3388
3389 /* Jpeg Clocks */
3390 CLK_LOOKUP("core_clk", camss_jpeg_jpeg0_clk.c, "fda1c000.qcom,jpeg"),
3391 CLK_LOOKUP("iface_clk", camss_jpeg_jpeg_ahb_clk.c,
3392 "fda1c000.qcom,jpeg"),
3393 CLK_LOOKUP("bus_clk0", camss_jpeg_jpeg_axi_clk.c,
3394 "fda1c000.qcom,jpeg"),
3395 CLK_LOOKUP("camss_top_ahb_clk", camss_top_ahb_clk.c,
3396 "fda1c000.qcom,jpeg"),
3397
3398 CLK_LOOKUP("alt_core_clk", camss_top_ahb_clk.c, "fda64000.qcom,iommu"),
3399 CLK_LOOKUP("iface_clk", camss_jpeg_jpeg_ahb_clk.c,
3400 "fda64000.qcom,iommu"),
3401 CLK_LOOKUP("core_clk", camss_jpeg_jpeg_axi_clk.c,
3402 "fda64000.qcom,iommu"),
3403
Su Liudb7b2062013-03-14 20:57:15 -07003404 CLK_LOOKUP("micro_iface_clk", camss_micro_ahb_clk.c,
3405 "fda04000.qcom,cpp"),
3406 CLK_LOOKUP("camss_top_ahb_clk", camss_top_ahb_clk.c,
3407 "fda04000.qcom,cpp"),
3408 CLK_LOOKUP("cpp_iface_clk", camss_vfe_cpp_ahb_clk.c,
3409 "fda04000.qcom,cpp"),
3410 CLK_LOOKUP("cpp_core_clk", camss_vfe_cpp_clk.c, "fda04000.qcom,cpp"),
3411 CLK_LOOKUP("cpp_bus_clk", camss_vfe_vfe_axi_clk.c, "fda04000.qcom,cpp"),
3412 CLK_LOOKUP("vfe_clk_src", vfe0_clk_src.c, "fda04000.qcom,cpp"),
3413 CLK_LOOKUP("camss_vfe_vfe_clk", camss_vfe_vfe0_clk.c,
3414 "fda04000.qcom,cpp"),
3415 CLK_LOOKUP("iface_clk", camss_vfe_vfe_ahb_clk.c, "fda04000.qcom,cpp"),
3416
Patrick Dalyeb370ea2012-10-23 11:57:50 -07003417 /* KGSL Clocks */
3418 CLK_LOOKUP("core_clk", oxili_gfx3d_clk.c, "fdb00000.qcom,kgsl-3d0"),
3419 CLK_LOOKUP("iface_clk", oxilicx_ahb_clk.c, "fdb00000.qcom,kgsl-3d0"),
liu zhongc45eb8b2013-02-21 11:50:24 -08003420 CLK_LOOKUP("mem_iface_clk", oxilicx_axi_clk.c,
3421 "fdb00000.qcom,kgsl-3d0"),
Patrick Dalyeb370ea2012-10-23 11:57:50 -07003422
3423 CLK_LOOKUP("alt_core_clk", oxili_gfx3d_clk.c, "fdb10000.qcom,iommu"),
3424 CLK_LOOKUP("iface_clk", oxilicx_ahb_clk.c, "fdb10000.qcom,iommu"),
3425 CLK_LOOKUP("core_clk", oxilicx_axi_clk.c, "fdb10000.qcom,iommu"),
3426
3427 CLK_LOOKUP("core_clk", ocmemgx_core_clk.c, "fdd00000.qcom,ocmem"),
Patrick Dalyeb370ea2012-10-23 11:57:50 -07003428
3429 /* Venus Clocks */
3430 CLK_LOOKUP("core_clk", venus0_vcodec0_clk.c, "fdc00000.qcom,vidc"),
3431 CLK_LOOKUP("iface_clk", venus0_ahb_clk.c, "fdc00000.qcom,vidc"),
3432 CLK_LOOKUP("bus_clk", venus0_axi_clk.c, "fdc00000.qcom,vidc"),
3433
3434 CLK_LOOKUP("alt_core_clk", venus0_vcodec0_clk.c,
3435 "fdc84000.qcom,iommu"),
3436 CLK_LOOKUP("iface_clk", venus0_ahb_clk.c, "fdc84000.qcom,iommu"),
3437 CLK_LOOKUP("core_clk", venus0_axi_clk.c, "fdc84000.qcom,iommu"),
Hariprasad Dhalinarasimha92a13222013-03-12 11:59:28 -07003438 CLK_LOOKUP("iface_clk", gcc_prng_ahb_clk.c, "f9bff000.qcom,msm-rng"),
Patrick Dalyeb370ea2012-10-23 11:57:50 -07003439 CLK_LOOKUP("cam_gp0_clk", camss_gp0_clk.c, ""),
3440 CLK_LOOKUP("cam_gp1_clk", camss_gp1_clk.c, ""),
3441 CLK_LOOKUP("iface_clk", camss_micro_ahb_clk.c, ""),
3442
Patrick Dalyeb370ea2012-10-23 11:57:50 -07003443 CLK_LOOKUP("", mmss_mmssnoc_bto_ahb_clk.c, ""),
3444 CLK_LOOKUP("", mmss_mmssnoc_axi_clk.c, ""),
3445 CLK_LOOKUP("", mmss_s0_axi_clk.c, ""),
Bhalchandra Gajared5a4ba72013-03-11 16:15:13 -07003446
3447 /* Audio clocks */
3448 CLK_LOOKUP("osr_clk", div_clk1.c, "msm-dai-q6-dev.224"),
3449 CLK_LOOKUP("osr_clk", div_clk1.c, "msm-dai-q6-dev.4106"),
3450 CLK_LOOKUP("osr_clk", div_clk1.c, "msm-dai-q6-dev.16384"),
3451 CLK_LOOKUP("osr_clk", div_clk1.c, "msm-dai-q6-dev.16386"),
3452 CLK_LOOKUP("osr_clk", div_clk1.c, "msm-dai-q6-dev.16390"),
3453 CLK_LOOKUP("osr_clk", div_clk1.c, "msm-dai-q6-dev.16391"),
3454
Hariprasad Dhalinarasimha1fa54392013-03-21 15:57:51 -07003455 /* Add QCEDEV clocks */
3456 CLK_LOOKUP("core_clk", gcc_ce1_clk.c, "fd400000.qcom,qcedev"),
3457 CLK_LOOKUP("iface_clk", gcc_ce1_ahb_clk.c, "fd400000.qcom,qcedev"),
3458 CLK_LOOKUP("bus_clk", gcc_ce1_axi_clk.c, "fd400000.qcom,qcedev"),
3459 CLK_LOOKUP("core_clk_src", ce1_clk_src.c, "fd400000.qcom,qcedev"),
3460
3461 /* Add QCRYPTO clocks */
3462 CLK_LOOKUP("core_clk", gcc_ce1_clk.c, "fd404000.qcom,qcrypto"),
3463 CLK_LOOKUP("iface_clk", gcc_ce1_ahb_clk.c, "fd404000.qcom,qcrypto"),
3464 CLK_LOOKUP("bus_clk", gcc_ce1_axi_clk.c, "fd404000.qcom,qcrypto"),
3465 CLK_LOOKUP("core_clk_src", ce1_clk_src.c, "fd404000.qcom,qcrypto"),
3466
Patrick Dalyeb370ea2012-10-23 11:57:50 -07003467};
3468
3469static struct clk_lookup msm_clocks_8226_rumi[] = {
3470 CLK_DUMMY("core_clk", BLSP1_UART_CLK, "f991f000.serial", OFF),
3471 CLK_DUMMY("iface_clk", BLSP1_UART_CLK, "f991f000.serial", OFF),
3472 CLK_DUMMY("iface_clk", HSUSB_IFACE_CLK, "f9a55000.usb", OFF),
3473 CLK_DUMMY("core_clk", HSUSB_CORE_CLK, "f9a55000.usb", OFF),
3474 CLK_DUMMY("iface_clk", NULL, "msm_sdcc.1", OFF),
3475 CLK_DUMMY("core_clk", NULL, "msm_sdcc.1", OFF),
3476 CLK_DUMMY("bus_clk", NULL, "msm_sdcc.1", OFF),
3477 CLK_DUMMY("iface_clk", NULL, "msm_sdcc.2", OFF),
3478 CLK_DUMMY("core_clk", NULL, "msm_sdcc.2", OFF),
3479 CLK_DUMMY("bus_clk", NULL, "msm_sdcc.2", OFF),
3480};
3481
3482struct clock_init_data msm8226_rumi_clock_init_data __initdata = {
3483 .table = msm_clocks_8226_rumi,
3484 .size = ARRAY_SIZE(msm_clocks_8226_rumi),
3485};
3486
Patrick Dalyeb370ea2012-10-23 11:57:50 -07003487static void __init reg_init(void)
3488{
Patrick Dalye02a5632013-02-12 20:23:35 -08003489 u32 regval;
Patrick Dalyeb370ea2012-10-23 11:57:50 -07003490
Patrick Dalyeb370ea2012-10-23 11:57:50 -07003491 /* Vote for GPLL0 to turn on. Needed by acpuclock. */
3492 regval = readl_relaxed(GCC_REG_BASE(APCS_GPLL_ENA_VOTE));
3493 regval |= BIT(0);
3494 writel_relaxed(regval, GCC_REG_BASE(APCS_GPLL_ENA_VOTE));
3495
3496 /*
Patrick Daly3668dd62013-03-04 20:27:55 -08003497 * No clocks need to be enabled during sleep.
Patrick Dalyeb370ea2012-10-23 11:57:50 -07003498 */
3499 writel_relaxed(0x0, GCC_REG_BASE(APCS_CLOCK_SLEEP_ENA_VOTE));
Patrick Dalyeb370ea2012-10-23 11:57:50 -07003500}
Patrick Dalye02a5632013-02-12 20:23:35 -08003501
Patrick Dalyeb370ea2012-10-23 11:57:50 -07003502static void __init msm8226_clock_post_init(void)
3503{
Vikram Mulukutla441db7a2013-03-15 13:56:33 -07003504 /*
3505 * Hold an active set vote for CXO; this is because CXO is expected
3506 * to remain on whenever CPUs aren't power collapsed.
3507 */
3508 clk_prepare_enable(&xo_a_clk.c);
3509
Patrick Dalyeb370ea2012-10-23 11:57:50 -07003510 /* Set rates for single-rate clocks. */
3511 clk_set_rate(&usb_hs_system_clk_src.c,
3512 usb_hs_system_clk_src.freq_tbl[0].freq_hz);
3513 clk_set_rate(&usb_hsic_clk_src.c,
3514 usb_hsic_clk_src.freq_tbl[0].freq_hz);
3515 clk_set_rate(&usb_hsic_io_cal_clk_src.c,
3516 usb_hsic_io_cal_clk_src.freq_tbl[0].freq_hz);
3517 clk_set_rate(&usb_hsic_system_clk_src.c,
3518 usb_hsic_system_clk_src.freq_tbl[0].freq_hz);
3519 clk_set_rate(&pdm2_clk_src.c, pdm2_clk_src.freq_tbl[0].freq_hz);
3520 clk_set_rate(&cci_clk_src.c, cci_clk_src.freq_tbl[0].freq_hz);
3521 clk_set_rate(&mclk0_clk_src.c, mclk0_clk_src.freq_tbl[0].freq_hz);
3522 clk_set_rate(&mclk1_clk_src.c, mclk1_clk_src.freq_tbl[0].freq_hz);
3523 clk_set_rate(&esc0_clk_src.c, esc0_clk_src.freq_tbl[0].freq_hz);
3524 clk_set_rate(&vsync_clk_src.c, vsync_clk_src.freq_tbl[0].freq_hz);
Patrick Dalyeb370ea2012-10-23 11:57:50 -07003525}
3526
3527#define GCC_CC_PHYS 0xFC400000
3528#define GCC_CC_SIZE SZ_16K
3529
3530#define MMSS_CC_PHYS 0xFD8C0000
3531#define MMSS_CC_SIZE SZ_256K
3532
3533#define LPASS_CC_PHYS 0xFE000000
3534#define LPASS_CC_SIZE SZ_256K
3535
3536#define APCS_KPSS_SH_PLL_PHYS 0xF9016000
3537#define APCS_KPSS_SH_PLL_SIZE SZ_64
3538
3539#define APCS_KPSS_GLB_PHYS 0xF9011000
3540#define APCS_KPSS_GLB_SIZE SZ_4K
3541
3542
3543static void __init msm8226_clock_pre_init(void)
3544{
3545 virt_bases[GCC_BASE] = ioremap(GCC_CC_PHYS, GCC_CC_SIZE);
3546 if (!virt_bases[GCC_BASE])
3547 panic("clock-8226: Unable to ioremap GCC memory!");
3548
3549 virt_bases[MMSS_BASE] = ioremap(MMSS_CC_PHYS, MMSS_CC_SIZE);
3550 if (!virt_bases[MMSS_BASE])
3551 panic("clock-8226: Unable to ioremap MMSS_CC memory!");
3552
3553 virt_bases[LPASS_BASE] = ioremap(LPASS_CC_PHYS, LPASS_CC_SIZE);
3554 if (!virt_bases[LPASS_BASE])
3555 panic("clock-8226: Unable to ioremap LPASS_CC memory!");
3556
3557 virt_bases[APCS_BASE] = ioremap(APCS_KPSS_GLB_PHYS,
3558 APCS_KPSS_GLB_SIZE);
3559 if (!virt_bases[APCS_BASE])
3560 panic("clock-8226: Unable to ioremap APCS_GCC_CC memory!");
3561
3562 virt_bases[APCS_PLL_BASE] = ioremap(APCS_KPSS_SH_PLL_PHYS,
3563 APCS_KPSS_SH_PLL_SIZE);
3564 if (!virt_bases[APCS_PLL_BASE])
3565 panic("clock-8226: Unable to ioremap APCS_GCC_CC memory!");
3566
3567 clk_ops_local_pll.enable = sr_hpm_lp_pll_clk_enable;
3568
Patrick Dalyebc26bc2013-02-05 11:49:07 -08003569 vdd_dig.regulator[0] = regulator_get(NULL, "vdd_dig");
3570 if (IS_ERR(vdd_dig.regulator[0]))
Patrick Dalyeb370ea2012-10-23 11:57:50 -07003571 panic("clock-8226: Unable to get the vdd_dig regulator!");
3572
Patrick Dalyebc26bc2013-02-05 11:49:07 -08003573 vdd_sr2_pll.regulator[0] = regulator_get(NULL, "vdd_sr2_pll");
3574 if (IS_ERR(vdd_sr2_pll.regulator[0]))
Patrick Daly48e00f32013-01-28 19:13:47 -08003575 panic("clock-8226: Unable to get the sr2_pll regulator!");
3576
Patrick Daly6fb589a2013-03-29 17:55:55 -07003577 vdd_sr2_pll.regulator[1] = regulator_get(NULL, "vdd_sr2_dig");
3578 if (IS_ERR(vdd_sr2_pll.regulator[1]))
3579 panic("clock-8226: Unable to get the vdd_sr2_dig regulator!");
3580
Patrick Daly48e00f32013-01-28 19:13:47 -08003581 /*
Patrick Dalyeb370ea2012-10-23 11:57:50 -07003582 * Hold an active set vote at a rate of 40MHz for the MMSS NOC AHB
3583 * source. Sleep set vote is 0.
3584 * RPM will also turn on gcc_mmss_noc_cfg_ahb_clk, which is needed to
3585 * access mmss clock controller registers.
3586 */
3587 clk_set_rate(&mmssnoc_ahb_a_clk.c, 40000000);
Patrick Dalyeb370ea2012-10-23 11:57:50 -07003588
Vikram Mulukutla29a06a32013-03-14 10:54:02 -07003589 /* Set an initial rate (fmax at nominal) on the MMSSNOC AXI clock */
3590 clk_set_rate(&axi_clk_src.c, 200000000);
3591
Patrick Dalyeb370ea2012-10-23 11:57:50 -07003592 enable_rpm_scaling();
3593
3594 reg_init();
Patrick Daly5555c2c2013-03-06 21:25:26 -08003595
Patrick Dalyd3fd03f2013-03-08 19:01:18 -08003596 /* v2 specific changes */
3597 if (SOCINFO_VERSION_MAJOR(socinfo_get_version()) == 2) {
3598 cpp_clk_src.c.fmax = camss_vfe_cpp_fmax_v2;
3599 vfe0_clk_src.c.fmax = camss_vfe_vfe0_fmax_v2;
3600 }
3601
Patrick Daly5555c2c2013-03-06 21:25:26 -08003602 /*
3603 * MDSS needs the ahb clock and needs to init before we register the
3604 * lookup table.
3605 */
3606 mdss_clk_ctrl_pre_init(&mdss_ahb_clk.c);
Patrick Dalyeb370ea2012-10-23 11:57:50 -07003607}
3608
Patrick Dalyeb370ea2012-10-23 11:57:50 -07003609struct clock_init_data msm8226_clock_init_data __initdata = {
3610 .table = msm_clocks_8226,
3611 .size = ARRAY_SIZE(msm_clocks_8226),
3612 .pre_init = msm8226_clock_pre_init,
3613 .post_init = msm8226_clock_post_init,
Patrick Dalyeb370ea2012-10-23 11:57:50 -07003614};