blob: 4d5f77382e9a45a2487d7b32cb609493cdb3adf6 [file] [log] [blame]
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001/* Copyright (c) 2012, Code Aurora Forum. 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
22#include <mach/clk.h>
23
24#include "clock-local2.h"
25#include "clock-pll.h"
26
27enum {
28 GCC_BASE,
29 MMSS_BASE,
30 LPASS_BASE,
31 MSS_BASE,
32 N_BASES,
33};
34
35static void __iomem *virt_bases[N_BASES];
36
37#define GCC_REG_BASE(x) (void __iomem *)(virt_bases[GCC_BASE] + (x))
38#define MMSS_REG_BASE(x) (void __iomem *)(virt_bases[MMSS_BASE] + (x))
39#define LPASS_REG_BASE(x) (void __iomem *)(virt_bases[LPASS_BASE] + (x))
40#define MSS_REG_BASE(x) (void __iomem *)(virt_bases[MSS_BASE] + (x))
41
42#define GPLL0_MODE_REG 0x0000
43#define GPLL0_L_REG 0x0004
44#define GPLL0_M_REG 0x0008
45#define GPLL0_N_REG 0x000C
46#define GPLL0_USER_CTL_REG 0x0010
47#define GPLL0_CONFIG_CTL_REG 0x0014
48#define GPLL0_TEST_CTL_REG 0x0018
49#define GPLL0_STATUS_REG 0x001C
50
51#define GPLL1_MODE_REG 0x0040
52#define GPLL1_L_REG 0x0044
53#define GPLL1_M_REG 0x0048
54#define GPLL1_N_REG 0x004C
55#define GPLL1_USER_CTL_REG 0x0050
56#define GPLL1_CONFIG_CTL_REG 0x0054
57#define GPLL1_TEST_CTL_REG 0x0058
58#define GPLL1_STATUS_REG 0x005C
59
60#define MMPLL0_MODE_REG 0x0000
61#define MMPLL0_L_REG 0x0004
62#define MMPLL0_M_REG 0x0008
63#define MMPLL0_N_REG 0x000C
64#define MMPLL0_USER_CTL_REG 0x0010
65#define MMPLL0_CONFIG_CTL_REG 0x0014
66#define MMPLL0_TEST_CTL_REG 0x0018
67#define MMPLL0_STATUS_REG 0x001C
68
69#define MMPLL1_MODE_REG 0x0040
70#define MMPLL1_L_REG 0x0044
71#define MMPLL1_M_REG 0x0048
72#define MMPLL1_N_REG 0x004C
73#define MMPLL1_USER_CTL_REG 0x0050
74#define MMPLL1_CONFIG_CTL_REG 0x0054
75#define MMPLL1_TEST_CTL_REG 0x0058
76#define MMPLL1_STATUS_REG 0x005C
77
78#define MMPLL3_MODE_REG 0x0080
79#define MMPLL3_L_REG 0x0084
80#define MMPLL3_M_REG 0x0088
81#define MMPLL3_N_REG 0x008C
82#define MMPLL3_USER_CTL_REG 0x0090
83#define MMPLL3_CONFIG_CTL_REG 0x0094
84#define MMPLL3_TEST_CTL_REG 0x0098
85#define MMPLL3_STATUS_REG 0x009C
86
87#define LPAPLL_MODE_REG 0x0000
88#define LPAPLL_L_REG 0x0004
89#define LPAPLL_M_REG 0x0008
90#define LPAPLL_N_REG 0x000C
91#define LPAPLL_USER_CTL_REG 0x0010
92#define LPAPLL_CONFIG_CTL_REG 0x0014
93#define LPAPLL_TEST_CTL_REG 0x0018
94#define LPAPLL_STATUS_REG 0x001C
95
96#define GCC_DEBUG_CLK_CTL_REG 0x1880
97#define CLOCK_FRQ_MEASURE_CTL_REG 0x1884
98#define CLOCK_FRQ_MEASURE_STATUS_REG 0x1888
99#define GCC_XO_DIV4_CBCR_REG 0x10C8
100#define APCS_GPLL_ENA_VOTE_REG 0x1480
101#define MMSS_PLL_VOTE_APCS_REG 0x0100
102#define MMSS_DEBUG_CLK_CTL_REG 0x0900
103#define LPASS_DEBUG_CLK_CTL_REG 0x29000
104#define LPASS_LPA_PLL_VOTE_APPS_REG 0x2000
Vikram Mulukutlaa967db42012-05-10 16:20:40 -0700105#define MSS_DEBUG_CLK_CTL_REG 0x0078
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700106
107#define USB30_MASTER_CMD_RCGR 0x03D4
108#define USB30_MOCK_UTMI_CMD_RCGR 0x03E8
109#define USB_HSIC_SYSTEM_CMD_RCGR 0x041C
110#define USB_HSIC_CMD_RCGR 0x0440
111#define USB_HSIC_IO_CAL_CMD_RCGR 0x0458
112#define USB_HS_SYSTEM_CMD_RCGR 0x0490
113#define SDCC1_APPS_CMD_RCGR 0x04D0
114#define SDCC2_APPS_CMD_RCGR 0x0510
115#define SDCC3_APPS_CMD_RCGR 0x0550
116#define SDCC4_APPS_CMD_RCGR 0x0590
117#define BLSP1_QUP1_SPI_APPS_CMD_RCGR 0x064C
118#define BLSP1_UART1_APPS_CMD_RCGR 0x068C
119#define BLSP1_QUP2_SPI_APPS_CMD_RCGR 0x06CC
120#define BLSP1_UART2_APPS_CMD_RCGR 0x070C
121#define BLSP1_QUP3_SPI_APPS_CMD_RCGR 0x074C
122#define BLSP1_UART3_APPS_CMD_RCGR 0x078C
123#define BLSP1_QUP4_SPI_APPS_CMD_RCGR 0x07CC
124#define BLSP1_UART4_APPS_CMD_RCGR 0x080C
125#define BLSP1_QUP5_SPI_APPS_CMD_RCGR 0x084C
126#define BLSP1_UART5_APPS_CMD_RCGR 0x088C
127#define BLSP1_QUP6_SPI_APPS_CMD_RCGR 0x08CC
128#define BLSP1_UART6_APPS_CMD_RCGR 0x090C
129#define BLSP2_QUP1_SPI_APPS_CMD_RCGR 0x098C
130#define BLSP2_UART1_APPS_CMD_RCGR 0x09CC
131#define BLSP2_QUP2_SPI_APPS_CMD_RCGR 0x0A0C
132#define BLSP2_UART2_APPS_CMD_RCGR 0x0A4C
133#define BLSP2_QUP3_SPI_APPS_CMD_RCGR 0x0A8C
134#define BLSP2_UART3_APPS_CMD_RCGR 0x0ACC
135#define BLSP2_QUP4_SPI_APPS_CMD_RCGR 0x0B0C
136#define BLSP2_UART4_APPS_CMD_RCGR 0x0B4C
137#define BLSP2_QUP5_SPI_APPS_CMD_RCGR 0x0B8C
138#define BLSP2_UART5_APPS_CMD_RCGR 0x0BCC
139#define BLSP2_QUP6_SPI_APPS_CMD_RCGR 0x0C0C
140#define BLSP2_UART6_APPS_CMD_RCGR 0x0C4C
141#define PDM2_CMD_RCGR 0x0CD0
142#define TSIF_REF_CMD_RCGR 0x0D90
143#define CE1_CMD_RCGR 0x1050
144#define CE2_CMD_RCGR 0x1090
145#define GP1_CMD_RCGR 0x1904
146#define GP2_CMD_RCGR 0x1944
147#define GP3_CMD_RCGR 0x1984
148#define LPAIF_SPKR_CMD_RCGR 0xA000
149#define LPAIF_PRI_CMD_RCGR 0xB000
150#define LPAIF_SEC_CMD_RCGR 0xC000
151#define LPAIF_TER_CMD_RCGR 0xD000
152#define LPAIF_QUAD_CMD_RCGR 0xE000
153#define LPAIF_PCM0_CMD_RCGR 0xF000
154#define LPAIF_PCM1_CMD_RCGR 0x10000
155#define RESAMPLER_CMD_RCGR 0x11000
156#define SLIMBUS_CMD_RCGR 0x12000
157#define LPAIF_PCMOE_CMD_RCGR 0x13000
158#define AHBFABRIC_CMD_RCGR 0x18000
159#define VCODEC0_CMD_RCGR 0x1000
160#define PCLK0_CMD_RCGR 0x2000
161#define PCLK1_CMD_RCGR 0x2020
162#define MDP_CMD_RCGR 0x2040
163#define EXTPCLK_CMD_RCGR 0x2060
164#define VSYNC_CMD_RCGR 0x2080
165#define EDPPIXEL_CMD_RCGR 0x20A0
166#define EDPLINK_CMD_RCGR 0x20C0
167#define EDPAUX_CMD_RCGR 0x20E0
168#define HDMI_CMD_RCGR 0x2100
169#define BYTE0_CMD_RCGR 0x2120
170#define BYTE1_CMD_RCGR 0x2140
171#define ESC0_CMD_RCGR 0x2160
172#define ESC1_CMD_RCGR 0x2180
173#define CSI0PHYTIMER_CMD_RCGR 0x3000
174#define CSI1PHYTIMER_CMD_RCGR 0x3030
175#define CSI2PHYTIMER_CMD_RCGR 0x3060
176#define CSI0_CMD_RCGR 0x3090
177#define CSI1_CMD_RCGR 0x3100
178#define CSI2_CMD_RCGR 0x3160
179#define CSI3_CMD_RCGR 0x31C0
180#define CCI_CMD_RCGR 0x3300
181#define MCLK0_CMD_RCGR 0x3360
182#define MCLK1_CMD_RCGR 0x3390
183#define MCLK2_CMD_RCGR 0x33C0
184#define MCLK3_CMD_RCGR 0x33F0
185#define MMSS_GP0_CMD_RCGR 0x3420
186#define MMSS_GP1_CMD_RCGR 0x3450
187#define JPEG0_CMD_RCGR 0x3500
188#define JPEG1_CMD_RCGR 0x3520
189#define JPEG2_CMD_RCGR 0x3540
190#define VFE0_CMD_RCGR 0x3600
191#define VFE1_CMD_RCGR 0x3620
192#define CPP_CMD_RCGR 0x3640
193#define GFX3D_CMD_RCGR 0x4000
194#define RBCPR_CMD_RCGR 0x4060
195#define AHB_CMD_RCGR 0x5000
196#define AXI_CMD_RCGR 0x5040
197#define OCMEMNOC_CMD_RCGR 0x5090
198
199#define MMSS_BCR 0x0240
200#define USB_30_BCR 0x03C0
201#define USB3_PHY_BCR 0x03FC
202#define USB_HS_HSIC_BCR 0x0400
203#define USB_HS_BCR 0x0480
204#define SDCC1_BCR 0x04C0
205#define SDCC2_BCR 0x0500
206#define SDCC3_BCR 0x0540
207#define SDCC4_BCR 0x0580
208#define BLSP1_BCR 0x05C0
209#define BLSP1_QUP1_BCR 0x0640
210#define BLSP1_UART1_BCR 0x0680
211#define BLSP1_QUP2_BCR 0x06C0
212#define BLSP1_UART2_BCR 0x0700
213#define BLSP1_QUP3_BCR 0x0740
214#define BLSP1_UART3_BCR 0x0780
215#define BLSP1_QUP4_BCR 0x07C0
216#define BLSP1_UART4_BCR 0x0800
217#define BLSP1_QUP5_BCR 0x0840
218#define BLSP1_UART5_BCR 0x0880
219#define BLSP1_QUP6_BCR 0x08C0
220#define BLSP1_UART6_BCR 0x0900
221#define BLSP2_BCR 0x0940
222#define BLSP2_QUP1_BCR 0x0980
223#define BLSP2_UART1_BCR 0x09C0
224#define BLSP2_QUP2_BCR 0x0A00
225#define BLSP2_UART2_BCR 0x0A40
226#define BLSP2_QUP3_BCR 0x0A80
227#define BLSP2_UART3_BCR 0x0AC0
228#define BLSP2_QUP4_BCR 0x0B00
229#define BLSP2_UART4_BCR 0x0B40
230#define BLSP2_QUP5_BCR 0x0B80
231#define BLSP2_UART5_BCR 0x0BC0
232#define BLSP2_QUP6_BCR 0x0C00
233#define BLSP2_UART6_BCR 0x0C40
Vikram Mulukutlaa967db42012-05-10 16:20:40 -0700234#define BOOT_ROM_BCR 0x0E00
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700235#define PDM_BCR 0x0CC0
236#define PRNG_BCR 0x0D00
237#define BAM_DMA_BCR 0x0D40
238#define TSIF_BCR 0x0D80
239#define CE1_BCR 0x1040
240#define CE2_BCR 0x1080
241#define AUDIO_CORE_BCR 0x4000
242#define VENUS0_BCR 0x1020
243#define MDSS_BCR 0x2300
244#define CAMSS_PHY0_BCR 0x3020
245#define CAMSS_PHY1_BCR 0x3050
246#define CAMSS_PHY2_BCR 0x3080
247#define CAMSS_CSI0_BCR 0x30B0
248#define CAMSS_CSI0PHY_BCR 0x30C0
249#define CAMSS_CSI0RDI_BCR 0x30D0
250#define CAMSS_CSI0PIX_BCR 0x30E0
251#define CAMSS_CSI1_BCR 0x3120
252#define CAMSS_CSI1PHY_BCR 0x3130
253#define CAMSS_CSI1RDI_BCR 0x3140
254#define CAMSS_CSI1PIX_BCR 0x3150
255#define CAMSS_CSI2_BCR 0x3180
256#define CAMSS_CSI2PHY_BCR 0x3190
257#define CAMSS_CSI2RDI_BCR 0x31A0
258#define CAMSS_CSI2PIX_BCR 0x31B0
259#define CAMSS_CSI3_BCR 0x31E0
260#define CAMSS_CSI3PHY_BCR 0x31F0
261#define CAMSS_CSI3RDI_BCR 0x3200
262#define CAMSS_CSI3PIX_BCR 0x3210
263#define CAMSS_ISPIF_BCR 0x3220
264#define CAMSS_CCI_BCR 0x3340
265#define CAMSS_MCLK0_BCR 0x3380
266#define CAMSS_MCLK1_BCR 0x33B0
267#define CAMSS_MCLK2_BCR 0x33E0
268#define CAMSS_MCLK3_BCR 0x3410
269#define CAMSS_GP0_BCR 0x3440
270#define CAMSS_GP1_BCR 0x3470
271#define CAMSS_TOP_BCR 0x3480
272#define CAMSS_MICRO_BCR 0x3490
273#define CAMSS_JPEG_BCR 0x35A0
274#define CAMSS_VFE_BCR 0x36A0
275#define CAMSS_CSI_VFE0_BCR 0x3700
276#define CAMSS_CSI_VFE1_BCR 0x3710
277#define OCMEMNOC_BCR 0x50B0
278#define MMSSNOCAHB_BCR 0x5020
279#define MMSSNOCAXI_BCR 0x5060
280#define OXILI_GFX3D_CBCR 0x4028
281#define OXILICX_AHB_CBCR 0x403C
282#define OXILICX_AXI_CBCR 0x4038
283#define OXILI_BCR 0x4020
284#define OXILICX_BCR 0x4030
Vikram Mulukutlaa967db42012-05-10 16:20:40 -0700285#define LPASS_Q6SS_BCR 0x6000
286#define MSS_Q6SS_BCR 0x1068
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700287
288#define OCMEM_SYS_NOC_AXI_CBCR 0x0244
289#define OCMEM_NOC_CFG_AHB_CBCR 0x0248
290#define MMSS_NOC_CFG_AHB_CBCR 0x024C
291
292#define USB30_MASTER_CBCR 0x03C8
293#define USB30_MOCK_UTMI_CBCR 0x03D0
294#define USB_HSIC_AHB_CBCR 0x0408
295#define USB_HSIC_SYSTEM_CBCR 0x040C
296#define USB_HSIC_CBCR 0x0410
297#define USB_HSIC_IO_CAL_CBCR 0x0414
298#define USB_HS_SYSTEM_CBCR 0x0484
299#define USB_HS_AHB_CBCR 0x0488
300#define SDCC1_APPS_CBCR 0x04C4
301#define SDCC1_AHB_CBCR 0x04C8
302#define SDCC2_APPS_CBCR 0x0504
303#define SDCC2_AHB_CBCR 0x0508
304#define SDCC3_APPS_CBCR 0x0544
305#define SDCC3_AHB_CBCR 0x0548
306#define SDCC4_APPS_CBCR 0x0584
307#define SDCC4_AHB_CBCR 0x0588
308#define BLSP1_AHB_CBCR 0x05C4
309#define BLSP1_QUP1_SPI_APPS_CBCR 0x0644
310#define BLSP1_QUP1_I2C_APPS_CBCR 0x0648
311#define BLSP1_UART1_APPS_CBCR 0x0684
312#define BLSP1_UART1_SIM_CBCR 0x0688
313#define BLSP1_QUP2_SPI_APPS_CBCR 0x06C4
314#define BLSP1_QUP2_I2C_APPS_CBCR 0x06C8
315#define BLSP1_UART2_APPS_CBCR 0x0704
316#define BLSP1_UART2_SIM_CBCR 0x0708
317#define BLSP1_QUP3_SPI_APPS_CBCR 0x0744
318#define BLSP1_QUP3_I2C_APPS_CBCR 0x0748
319#define BLSP1_UART3_APPS_CBCR 0x0784
320#define BLSP1_UART3_SIM_CBCR 0x0788
321#define BLSP1_QUP4_SPI_APPS_CBCR 0x07C4
322#define BLSP1_QUP4_I2C_APPS_CBCR 0x07C8
323#define BLSP1_UART4_APPS_CBCR 0x0804
324#define BLSP1_UART4_SIM_CBCR 0x0808
325#define BLSP1_QUP5_SPI_APPS_CBCR 0x0844
326#define BLSP1_QUP5_I2C_APPS_CBCR 0x0848
327#define BLSP1_UART5_APPS_CBCR 0x0884
328#define BLSP1_UART5_SIM_CBCR 0x0888
329#define BLSP1_QUP6_SPI_APPS_CBCR 0x08C4
330#define BLSP1_QUP6_I2C_APPS_CBCR 0x08C8
331#define BLSP1_UART6_APPS_CBCR 0x0904
332#define BLSP1_UART6_SIM_CBCR 0x0908
333#define BLSP2_AHB_CBCR 0x0944
Vikram Mulukutlaa967db42012-05-10 16:20:40 -0700334#define BOOT_ROM_AHB_CBCR 0x0E04
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700335#define BLSP2_QUP1_SPI_APPS_CBCR 0x0984
336#define BLSP2_QUP1_I2C_APPS_CBCR 0x0988
337#define BLSP2_UART1_APPS_CBCR 0x09C4
338#define BLSP2_UART1_SIM_CBCR 0x09C8
339#define BLSP2_QUP2_SPI_APPS_CBCR 0x0A04
340#define BLSP2_QUP2_I2C_APPS_CBCR 0x0A08
341#define BLSP2_UART2_APPS_CBCR 0x0A44
342#define BLSP2_UART2_SIM_CBCR 0x0A48
343#define BLSP2_QUP3_SPI_APPS_CBCR 0x0A84
344#define BLSP2_QUP3_I2C_APPS_CBCR 0x0A88
345#define BLSP2_UART3_APPS_CBCR 0x0AC4
346#define BLSP2_UART3_SIM_CBCR 0x0AC8
347#define BLSP2_QUP4_SPI_APPS_CBCR 0x0B04
348#define BLSP2_QUP4_I2C_APPS_CBCR 0x0B08
349#define BLSP2_UART4_APPS_CBCR 0x0B44
350#define BLSP2_UART4_SIM_CBCR 0x0B48
351#define BLSP2_QUP5_SPI_APPS_CBCR 0x0B84
352#define BLSP2_QUP5_I2C_APPS_CBCR 0x0B88
353#define BLSP2_UART5_APPS_CBCR 0x0BC4
354#define BLSP2_UART5_SIM_CBCR 0x0BC8
355#define BLSP2_QUP6_SPI_APPS_CBCR 0x0C04
356#define BLSP2_QUP6_I2C_APPS_CBCR 0x0C08
357#define BLSP2_UART6_APPS_CBCR 0x0C44
358#define BLSP2_UART6_SIM_CBCR 0x0C48
359#define PDM_AHB_CBCR 0x0CC4
360#define PDM_XO4_CBCR 0x0CC8
361#define PDM2_CBCR 0x0CCC
362#define PRNG_AHB_CBCR 0x0D04
363#define BAM_DMA_AHB_CBCR 0x0D44
364#define TSIF_AHB_CBCR 0x0D84
365#define TSIF_REF_CBCR 0x0D88
366#define MSG_RAM_AHB_CBCR 0x0E44
367#define CE1_CBCR 0x1044
368#define CE1_AXI_CBCR 0x1048
369#define CE1_AHB_CBCR 0x104C
370#define CE2_CBCR 0x1084
371#define CE2_AXI_CBCR 0x1088
372#define CE2_AHB_CBCR 0x108C
373#define GCC_AHB_CBCR 0x10C0
374#define GP1_CBCR 0x1900
375#define GP2_CBCR 0x1940
376#define GP3_CBCR 0x1980
377#define AUDIO_CORE_LPAIF_CODEC_SPKR_OSR_CBCR 0xA014
378#define AUDIO_CORE_LPAIF_CODEC_SPKR_IBIT_CBCR 0xA018
379#define AUDIO_CORE_LPAIF_CODEC_SPKR_EBIT_CBCR 0xA01C
380#define AUDIO_CORE_LPAIF_PRI_OSR_CBCR 0xB014
381#define AUDIO_CORE_LPAIF_PRI_IBIT_CBCR 0xB018
382#define AUDIO_CORE_LPAIF_PRI_EBIT_CBCR 0xB01C
383#define AUDIO_CORE_LPAIF_SEC_OSR_CBCR 0xC014
384#define AUDIO_CORE_LPAIF_SEC_IBIT_CBCR 0xC018
385#define AUDIO_CORE_LPAIF_SEC_EBIT_CBCR 0xC01C
386#define AUDIO_CORE_LPAIF_TER_OSR_CBCR 0xD014
387#define AUDIO_CORE_LPAIF_TER_IBIT_CBCR 0xD018
388#define AUDIO_CORE_LPAIF_TER_EBIT_CBCR 0xD01C
389#define AUDIO_CORE_LPAIF_QUAD_OSR_CBCR 0xE014
390#define AUDIO_CORE_LPAIF_QUAD_IBIT_CBCR 0xE018
391#define AUDIO_CORE_LPAIF_QUAD_EBIT_CBCR 0xE01C
392#define AUDIO_CORE_LPAIF_PCM0_IBIT_CBCR 0xF014
393#define AUDIO_CORE_LPAIF_PCM0_EBIT_CBCR 0xF018
394#define AUDIO_CORE_LPAIF_PCM1_IBIT_CBCR 0x10014
395#define AUDIO_CORE_LPAIF_PCM1_EBIT_CBCR 0x10018
396#define AUDIO_CORE_RESAMPLER_CORE_CBCR 0x11014
397#define AUDIO_CORE_RESAMPLER_LFABIF_CBCR 0x11018
398#define AUDIO_CORE_SLIMBUS_CORE_CBCR 0x12014
399#define AUDIO_CORE_SLIMBUS_LFABIF_CBCR 0x12018
400#define AUDIO_CORE_LPAIF_PCM_DATA_OE_CBCR 0x13014
401#define VENUS0_VCODEC0_CBCR 0x1028
402#define VENUS0_AHB_CBCR 0x1030
403#define VENUS0_AXI_CBCR 0x1034
404#define VENUS0_OCMEMNOC_CBCR 0x1038
405#define MDSS_AHB_CBCR 0x2308
406#define MDSS_HDMI_AHB_CBCR 0x230C
407#define MDSS_AXI_CBCR 0x2310
408#define MDSS_PCLK0_CBCR 0x2314
409#define MDSS_PCLK1_CBCR 0x2318
410#define MDSS_MDP_CBCR 0x231C
411#define MDSS_MDP_LUT_CBCR 0x2320
412#define MDSS_EXTPCLK_CBCR 0x2324
413#define MDSS_VSYNC_CBCR 0x2328
414#define MDSS_EDPPIXEL_CBCR 0x232C
415#define MDSS_EDPLINK_CBCR 0x2330
416#define MDSS_EDPAUX_CBCR 0x2334
417#define MDSS_HDMI_CBCR 0x2338
418#define MDSS_BYTE0_CBCR 0x233C
419#define MDSS_BYTE1_CBCR 0x2340
420#define MDSS_ESC0_CBCR 0x2344
421#define MDSS_ESC1_CBCR 0x2348
422#define CAMSS_PHY0_CSI0PHYTIMER_CBCR 0x3024
423#define CAMSS_PHY1_CSI1PHYTIMER_CBCR 0x3054
424#define CAMSS_PHY2_CSI2PHYTIMER_CBCR 0x3084
425#define CAMSS_CSI0_CBCR 0x30B4
426#define CAMSS_CSI0_AHB_CBCR 0x30BC
427#define CAMSS_CSI0PHY_CBCR 0x30C4
428#define CAMSS_CSI0RDI_CBCR 0x30D4
429#define CAMSS_CSI0PIX_CBCR 0x30E4
430#define CAMSS_CSI1_CBCR 0x3124
431#define CAMSS_CSI1_AHB_CBCR 0x3128
432#define CAMSS_CSI1PHY_CBCR 0x3134
433#define CAMSS_CSI1RDI_CBCR 0x3144
434#define CAMSS_CSI1PIX_CBCR 0x3154
435#define CAMSS_CSI2_CBCR 0x3184
436#define CAMSS_CSI2_AHB_CBCR 0x3188
437#define CAMSS_CSI2PHY_CBCR 0x3194
438#define CAMSS_CSI2RDI_CBCR 0x31A4
439#define CAMSS_CSI2PIX_CBCR 0x31B4
440#define CAMSS_CSI3_CBCR 0x31E4
441#define CAMSS_CSI3_AHB_CBCR 0x31E8
442#define CAMSS_CSI3PHY_CBCR 0x31F4
443#define CAMSS_CSI3RDI_CBCR 0x3204
444#define CAMSS_CSI3PIX_CBCR 0x3214
445#define CAMSS_ISPIF_AHB_CBCR 0x3224
446#define CAMSS_CCI_CCI_CBCR 0x3344
447#define CAMSS_CCI_CCI_AHB_CBCR 0x3348
448#define CAMSS_MCLK0_CBCR 0x3384
449#define CAMSS_MCLK1_CBCR 0x33B4
450#define CAMSS_MCLK2_CBCR 0x33E4
451#define CAMSS_MCLK3_CBCR 0x3414
452#define CAMSS_GP0_CBCR 0x3444
453#define CAMSS_GP1_CBCR 0x3474
454#define CAMSS_TOP_AHB_CBCR 0x3484
455#define CAMSS_MICRO_AHB_CBCR 0x3494
456#define CAMSS_JPEG_JPEG0_CBCR 0x35A8
457#define CAMSS_JPEG_JPEG1_CBCR 0x35AC
458#define CAMSS_JPEG_JPEG2_CBCR 0x35B0
459#define CAMSS_JPEG_JPEG_AHB_CBCR 0x35B4
460#define CAMSS_JPEG_JPEG_AXI_CBCR 0x35B8
461#define CAMSS_JPEG_JPEG_OCMEMNOC_CBCR 0x35BC
462#define CAMSS_VFE_VFE0_CBCR 0x36A8
463#define CAMSS_VFE_VFE1_CBCR 0x36AC
464#define CAMSS_VFE_CPP_CBCR 0x36B0
465#define CAMSS_VFE_CPP_AHB_CBCR 0x36B4
466#define CAMSS_VFE_VFE_AHB_CBCR 0x36B8
467#define CAMSS_VFE_VFE_AXI_CBCR 0x36BC
468#define CAMSS_VFE_VFE_OCMEMNOC_CBCR 0x36C0
469#define CAMSS_CSI_VFE0_CBCR 0x3704
470#define CAMSS_CSI_VFE1_CBCR 0x3714
471#define MMSS_MMSSNOC_AXI_CBCR 0x506C
472#define MMSS_MMSSNOC_AHB_CBCR 0x5024
473#define MMSS_MMSSNOC_BTO_AHB_CBCR 0x5028
474#define MMSS_MISC_AHB_CBCR 0x502C
475#define MMSS_S0_AXI_CBCR 0x5064
476#define OCMEMNOC_CBCR 0x50B4
Vikram Mulukutlaa967db42012-05-10 16:20:40 -0700477#define LPASS_Q6SS_AHB_LFABIF_CBCR 0x22000
478#define LPASS_Q6SS_XO_CBCR 0x26000
479#define MSS_XO_Q6_CBCR 0x108C
480#define MSS_BUS_Q6_CBCR 0x10A4
481#define MSS_CFG_AHB_CBCR 0x0280
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700482
483#define APCS_CLOCK_BRANCH_ENA_VOTE 0x1484
484#define APCS_CLOCK_SLEEP_ENA_VOTE 0x1488
485
486/* Mux source select values */
487#define cxo_source_val 0
488#define gpll0_source_val 1
489#define gpll1_source_val 2
490#define gnd_source_val 5
491#define mmpll0_mm_source_val 1
492#define mmpll1_mm_source_val 2
493#define mmpll3_mm_source_val 3
494#define gpll0_mm_source_val 5
495#define cxo_mm_source_val 0
496#define mm_gnd_source_val 6
497#define gpll1_hsic_source_val 4
498#define cxo_lpass_source_val 0
499#define lpapll0_lpass_source_val 1
500#define gpll0_lpass_source_val 5
501#define edppll_270_mm_source_val 4
502#define edppll_350_mm_source_val 4
503#define dsipll_750_mm_source_val 1
504#define dsipll_250_mm_source_val 2
505#define hdmipll_297_mm_source_val 3
506
507#define F(f, s, div, m, n) \
508 { \
509 .freq_hz = (f), \
510 .src_clk = &s##_clk_src.c, \
511 .m_val = (m), \
512 .n_val = ~((n)-(m)), \
513 .d_val = ~(n),\
514 .div_src_val = BVAL(4, 0, (int)(2*(div) - 1)) \
515 | BVAL(10, 8, s##_source_val), \
516 }
517
518#define F_MM(f, s, div, m, n) \
519 { \
520 .freq_hz = (f), \
521 .src_clk = &s##_clk_src.c, \
522 .m_val = (m), \
523 .n_val = ~((n)-(m)), \
524 .d_val = ~(n),\
525 .div_src_val = BVAL(4, 0, (int)(2*(div) - 1)) \
526 | BVAL(10, 8, s##_mm_source_val), \
527 }
528
529#define F_MDSS(f, s, div, m, n) \
530 { \
531 .freq_hz = (f), \
532 .m_val = (m), \
533 .n_val = ~((n)-(m)), \
534 .d_val = ~(n),\
535 .div_src_val = BVAL(4, 0, (int)(2*(div) - 1)) \
536 | BVAL(10, 8, s##_mm_source_val), \
537 }
538
539#define F_HSIC(f, s, div, m, n) \
540 { \
541 .freq_hz = (f), \
542 .src_clk = &s##_clk_src.c, \
543 .m_val = (m), \
544 .n_val = ~((n)-(m)), \
545 .d_val = ~(n),\
546 .div_src_val = BVAL(4, 0, (int)(2*(div) - 1)) \
547 | BVAL(10, 8, s##_hsic_source_val), \
548 }
549
550#define F_LPASS(f, s, div, m, n) \
551 { \
552 .freq_hz = (f), \
553 .src_clk = &s##_clk_src.c, \
554 .m_val = (m), \
555 .n_val = ~((n)-(m)), \
556 .d_val = ~(n),\
557 .div_src_val = BVAL(4, 0, (int)(2*(div) - 1)) \
558 | BVAL(10, 8, s##_lpass_source_val), \
559 }
560
561#define VDD_DIG_FMAX_MAP1(l1, f1) \
562 .vdd_class = &vdd_dig, \
563 .fmax[VDD_DIG_##l1] = (f1)
564#define VDD_DIG_FMAX_MAP2(l1, f1, l2, f2) \
565 .vdd_class = &vdd_dig, \
566 .fmax[VDD_DIG_##l1] = (f1), \
567 .fmax[VDD_DIG_##l2] = (f2)
568#define VDD_DIG_FMAX_MAP3(l1, f1, l2, f2, l3, f3) \
569 .vdd_class = &vdd_dig, \
570 .fmax[VDD_DIG_##l1] = (f1), \
571 .fmax[VDD_DIG_##l2] = (f2), \
572 .fmax[VDD_DIG_##l3] = (f3)
573
574enum vdd_dig_levels {
575 VDD_DIG_NONE,
576 VDD_DIG_LOW,
577 VDD_DIG_NOMINAL,
578 VDD_DIG_HIGH
579};
580
581static int set_vdd_dig(struct clk_vdd_class *vdd_class, int level)
582{
583 /* TODO: Actually call into regulator APIs to set VDD_DIG here. */
584 return 0;
585}
586
587static DEFINE_VDD_CLASS(vdd_dig, set_vdd_dig);
588
589static int cxo_clk_enable(struct clk *clk)
590{
591 /* TODO: Remove from here once the rpm xo clock is ready. */
592 return 0;
593}
594
595static void cxo_clk_disable(struct clk *clk)
596{
597 /* TODO: Remove from here once the rpm xo clock is ready. */
598 return;
599}
600
Matt Wagantallc4388bf2012-05-14 23:03:00 -0700601static enum handoff cxo_clk_handoff(struct clk *clk)
602{
603 /* TODO: Remove from here once the rpm xo clock is ready. */
604 return HANDOFF_ENABLED_CLK;
605}
606
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700607static struct clk_ops clk_ops_cxo = {
608 .enable = cxo_clk_enable,
609 .disable = cxo_clk_disable,
Matt Wagantallc4388bf2012-05-14 23:03:00 -0700610 .handoff = cxo_clk_handoff,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700611};
612
613static struct fixed_clk cxo_clk_src = {
614 .c = {
615 .rate = 19200000,
616 .dbg_name = "cxo_clk_src",
617 .ops = &clk_ops_cxo,
618 .warned = true,
619 CLK_INIT(cxo_clk_src.c),
620 },
621};
622
623static struct pll_vote_clk gpll0_clk_src = {
624 .en_reg = (void __iomem *)APCS_GPLL_ENA_VOTE_REG,
625 .en_mask = BIT(0),
626 .status_reg = (void __iomem *)GPLL0_STATUS_REG,
627 .status_mask = BIT(17),
628 .parent = &cxo_clk_src.c,
629 .base = &virt_bases[GCC_BASE],
630 .c = {
631 .rate = 600000000,
632 .dbg_name = "gpll0_clk_src",
633 .ops = &clk_ops_pll_vote,
634 .warned = true,
635 CLK_INIT(gpll0_clk_src.c),
636 },
637};
638
639static struct pll_vote_clk gpll1_clk_src = {
640 .en_reg = (void __iomem *)APCS_GPLL_ENA_VOTE_REG,
641 .en_mask = BIT(1),
642 .status_reg = (void __iomem *)GPLL1_STATUS_REG,
643 .status_mask = BIT(17),
644 .parent = &cxo_clk_src.c,
645 .base = &virt_bases[GCC_BASE],
646 .c = {
647 .rate = 480000000,
648 .dbg_name = "gpll1_clk_src",
649 .ops = &clk_ops_pll_vote,
650 .warned = true,
651 CLK_INIT(gpll1_clk_src.c),
652 },
653};
654
655static struct pll_vote_clk lpapll0_clk_src = {
656 .en_reg = (void __iomem *)LPASS_LPA_PLL_VOTE_APPS_REG,
657 .en_mask = BIT(0),
658 .status_reg = (void __iomem *)LPAPLL_STATUS_REG,
659 .status_mask = BIT(17),
660 .parent = &cxo_clk_src.c,
661 .base = &virt_bases[LPASS_BASE],
662 .c = {
663 .rate = 491520000,
664 .dbg_name = "lpapll0_clk_src",
665 .ops = &clk_ops_pll_vote,
666 .warned = true,
667 CLK_INIT(lpapll0_clk_src.c),
668 },
669};
670
671static struct pll_vote_clk mmpll0_clk_src = {
672 .en_reg = (void __iomem *)MMSS_PLL_VOTE_APCS_REG,
673 .en_mask = BIT(0),
674 .status_reg = (void __iomem *)MMPLL0_STATUS_REG,
675 .status_mask = BIT(17),
676 .parent = &cxo_clk_src.c,
677 .base = &virt_bases[MMSS_BASE],
678 .c = {
679 .dbg_name = "mmpll0_clk_src",
680 .rate = 800000000,
681 .ops = &clk_ops_pll_vote,
682 .warned = true,
683 CLK_INIT(mmpll0_clk_src.c),
684 },
685};
686
687static struct pll_vote_clk mmpll1_clk_src = {
688 .en_reg = (void __iomem *)MMSS_PLL_VOTE_APCS_REG,
689 .en_mask = BIT(1),
690 .status_reg = (void __iomem *)MMPLL1_STATUS_REG,
691 .status_mask = BIT(17),
692 .parent = &cxo_clk_src.c,
693 .base = &virt_bases[MMSS_BASE],
694 .c = {
695 .dbg_name = "mmpll1_clk_src",
696 .rate = 1000000000,
697 .ops = &clk_ops_pll_vote,
698 .warned = true,
699 CLK_INIT(mmpll1_clk_src.c),
700 },
701};
702
703static struct pll_clk mmpll3_clk_src = {
704 .mode_reg = (void __iomem *)MMPLL3_MODE_REG,
705 .status_reg = (void __iomem *)MMPLL3_STATUS_REG,
706 .parent = &cxo_clk_src.c,
707 .base = &virt_bases[MMSS_BASE],
708 .c = {
709 .dbg_name = "mmpll3_clk_src",
710 .rate = 1000000000,
711 .ops = &clk_ops_local_pll,
712 CLK_INIT(mmpll3_clk_src.c),
713 },
714};
715
716static struct clk_freq_tbl ftbl_gcc_usb30_master_clk[] = {
717 F(125000000, gpll0, 1, 5, 24),
718 F_END
719};
720
721static struct rcg_clk usb30_master_clk_src = {
722 .cmd_rcgr_reg = USB30_MASTER_CMD_RCGR,
723 .set_rate = set_rate_mnd,
724 .freq_tbl = ftbl_gcc_usb30_master_clk,
725 .current_freq = &rcg_dummy_freq,
726 .base = &virt_bases[GCC_BASE],
727 .c = {
728 .dbg_name = "usb30_master_clk_src",
729 .ops = &clk_ops_rcg_mnd,
730 VDD_DIG_FMAX_MAP1(NOMINAL, 125000000),
731 CLK_INIT(usb30_master_clk_src.c),
732 },
733};
734
735static struct clk_freq_tbl ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk[] = {
736 F( 960000, cxo, 10, 1, 2),
737 F( 4800000, cxo, 4, 0, 0),
738 F( 9600000, cxo, 2, 0, 0),
739 F(15000000, gpll0, 10, 1, 4),
740 F(19200000, cxo, 1, 0, 0),
741 F(25000000, gpll0, 12, 1, 2),
742 F(50000000, gpll0, 12, 0, 0),
743 F_END
744};
745
746static struct rcg_clk blsp1_qup1_spi_apps_clk_src = {
747 .cmd_rcgr_reg = BLSP1_QUP1_SPI_APPS_CMD_RCGR,
748 .set_rate = set_rate_mnd,
749 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
750 .current_freq = &rcg_dummy_freq,
751 .base = &virt_bases[GCC_BASE],
752 .c = {
753 .dbg_name = "blsp1_qup1_spi_apps_clk_src",
754 .ops = &clk_ops_rcg_mnd,
755 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
756 CLK_INIT(blsp1_qup1_spi_apps_clk_src.c),
757 },
758};
759
760static struct rcg_clk blsp1_qup2_spi_apps_clk_src = {
761 .cmd_rcgr_reg = BLSP1_QUP2_SPI_APPS_CMD_RCGR,
762 .set_rate = set_rate_mnd,
763 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
764 .current_freq = &rcg_dummy_freq,
765 .base = &virt_bases[GCC_BASE],
766 .c = {
767 .dbg_name = "blsp1_qup2_spi_apps_clk_src",
768 .ops = &clk_ops_rcg_mnd,
769 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
770 CLK_INIT(blsp1_qup2_spi_apps_clk_src.c),
771 },
772};
773
774static struct rcg_clk blsp1_qup3_spi_apps_clk_src = {
775 .cmd_rcgr_reg = BLSP1_QUP3_SPI_APPS_CMD_RCGR,
776 .set_rate = set_rate_mnd,
777 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
778 .current_freq = &rcg_dummy_freq,
779 .base = &virt_bases[GCC_BASE],
780 .c = {
781 .dbg_name = "blsp1_qup3_spi_apps_clk_src",
782 .ops = &clk_ops_rcg_mnd,
783 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
784 CLK_INIT(blsp1_qup3_spi_apps_clk_src.c),
785 },
786};
787
788static struct rcg_clk blsp1_qup4_spi_apps_clk_src = {
789 .cmd_rcgr_reg = BLSP1_QUP4_SPI_APPS_CMD_RCGR,
790 .set_rate = set_rate_mnd,
791 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
792 .current_freq = &rcg_dummy_freq,
793 .base = &virt_bases[GCC_BASE],
794 .c = {
795 .dbg_name = "blsp1_qup4_spi_apps_clk_src",
796 .ops = &clk_ops_rcg_mnd,
797 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
798 CLK_INIT(blsp1_qup4_spi_apps_clk_src.c),
799 },
800};
801
802static struct rcg_clk blsp1_qup5_spi_apps_clk_src = {
803 .cmd_rcgr_reg = BLSP1_QUP5_SPI_APPS_CMD_RCGR,
804 .set_rate = set_rate_mnd,
805 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
806 .current_freq = &rcg_dummy_freq,
807 .base = &virt_bases[GCC_BASE],
808 .c = {
809 .dbg_name = "blsp1_qup5_spi_apps_clk_src",
810 .ops = &clk_ops_rcg_mnd,
811 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
812 CLK_INIT(blsp1_qup5_spi_apps_clk_src.c),
813 },
814};
815
816static struct rcg_clk blsp1_qup6_spi_apps_clk_src = {
817 .cmd_rcgr_reg = BLSP1_QUP6_SPI_APPS_CMD_RCGR,
818 .set_rate = set_rate_mnd,
819 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
820 .current_freq = &rcg_dummy_freq,
821 .base = &virt_bases[GCC_BASE],
822 .c = {
823 .dbg_name = "blsp1_qup6_spi_apps_clk_src",
824 .ops = &clk_ops_rcg_mnd,
825 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
826 CLK_INIT(blsp1_qup6_spi_apps_clk_src.c),
827 },
828};
829
830static struct clk_freq_tbl ftbl_gcc_blsp1_2_uart1_6_apps_clk[] = {
831 F( 3686400, gpll0, 1, 96, 15625),
832 F( 7372800, gpll0, 1, 192, 15625),
833 F(14745600, gpll0, 1, 384, 15625),
834 F(16000000, gpll0, 5, 2, 15),
835 F(19200000, cxo, 1, 0, 0),
836 F(24000000, gpll0, 5, 1, 5),
837 F(32000000, gpll0, 1, 4, 75),
838 F(40000000, gpll0, 15, 0, 0),
839 F(46400000, gpll0, 1, 29, 375),
840 F(48000000, gpll0, 12.5, 0, 0),
841 F(51200000, gpll0, 1, 32, 375),
842 F(56000000, gpll0, 1, 7, 75),
843 F(58982400, gpll0, 1, 1536, 15625),
844 F(60000000, gpll0, 10, 0, 0),
845 F_END
846};
847
848static struct rcg_clk blsp1_uart1_apps_clk_src = {
849 .cmd_rcgr_reg = BLSP1_UART1_APPS_CMD_RCGR,
850 .set_rate = set_rate_mnd,
851 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
852 .current_freq = &rcg_dummy_freq,
853 .base = &virt_bases[GCC_BASE],
854 .c = {
855 .dbg_name = "blsp1_uart1_apps_clk_src",
856 .ops = &clk_ops_rcg_mnd,
857 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
858 CLK_INIT(blsp1_uart1_apps_clk_src.c),
859 },
860};
861
862static struct rcg_clk blsp1_uart2_apps_clk_src = {
863 .cmd_rcgr_reg = BLSP1_UART2_APPS_CMD_RCGR,
864 .set_rate = set_rate_mnd,
865 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
866 .current_freq = &rcg_dummy_freq,
867 .base = &virt_bases[GCC_BASE],
868 .c = {
869 .dbg_name = "blsp1_uart2_apps_clk_src",
870 .ops = &clk_ops_rcg_mnd,
871 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
872 CLK_INIT(blsp1_uart2_apps_clk_src.c),
873 },
874};
875
876static struct rcg_clk blsp1_uart3_apps_clk_src = {
877 .cmd_rcgr_reg = BLSP1_UART3_APPS_CMD_RCGR,
878 .set_rate = set_rate_mnd,
879 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
880 .current_freq = &rcg_dummy_freq,
881 .base = &virt_bases[GCC_BASE],
882 .c = {
883 .dbg_name = "blsp1_uart3_apps_clk_src",
884 .ops = &clk_ops_rcg_mnd,
885 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
886 CLK_INIT(blsp1_uart3_apps_clk_src.c),
887 },
888};
889
890static struct rcg_clk blsp1_uart4_apps_clk_src = {
891 .cmd_rcgr_reg = BLSP1_UART4_APPS_CMD_RCGR,
892 .set_rate = set_rate_mnd,
893 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
894 .current_freq = &rcg_dummy_freq,
895 .base = &virt_bases[GCC_BASE],
896 .c = {
897 .dbg_name = "blsp1_uart4_apps_clk_src",
898 .ops = &clk_ops_rcg_mnd,
899 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
900 CLK_INIT(blsp1_uart4_apps_clk_src.c),
901 },
902};
903
904static struct rcg_clk blsp1_uart5_apps_clk_src = {
905 .cmd_rcgr_reg = BLSP1_UART5_APPS_CMD_RCGR,
906 .set_rate = set_rate_mnd,
907 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
908 .current_freq = &rcg_dummy_freq,
909 .base = &virt_bases[GCC_BASE],
910 .c = {
911 .dbg_name = "blsp1_uart5_apps_clk_src",
912 .ops = &clk_ops_rcg_mnd,
913 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
914 CLK_INIT(blsp1_uart5_apps_clk_src.c),
915 },
916};
917
918static struct rcg_clk blsp1_uart6_apps_clk_src = {
919 .cmd_rcgr_reg = BLSP1_UART6_APPS_CMD_RCGR,
920 .set_rate = set_rate_mnd,
921 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
922 .current_freq = &rcg_dummy_freq,
923 .base = &virt_bases[GCC_BASE],
924 .c = {
925 .dbg_name = "blsp1_uart6_apps_clk_src",
926 .ops = &clk_ops_rcg_mnd,
927 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
928 CLK_INIT(blsp1_uart6_apps_clk_src.c),
929 },
930};
931
932static struct rcg_clk blsp2_qup1_spi_apps_clk_src = {
933 .cmd_rcgr_reg = BLSP2_QUP1_SPI_APPS_CMD_RCGR,
934 .set_rate = set_rate_mnd,
935 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
936 .current_freq = &rcg_dummy_freq,
937 .base = &virt_bases[GCC_BASE],
938 .c = {
939 .dbg_name = "blsp2_qup1_spi_apps_clk_src",
940 .ops = &clk_ops_rcg_mnd,
941 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
942 CLK_INIT(blsp2_qup1_spi_apps_clk_src.c),
943 },
944};
945
946static struct rcg_clk blsp2_qup2_spi_apps_clk_src = {
947 .cmd_rcgr_reg = BLSP2_QUP2_SPI_APPS_CMD_RCGR,
948 .set_rate = set_rate_mnd,
949 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
950 .current_freq = &rcg_dummy_freq,
951 .base = &virt_bases[GCC_BASE],
952 .c = {
953 .dbg_name = "blsp2_qup2_spi_apps_clk_src",
954 .ops = &clk_ops_rcg_mnd,
955 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
956 CLK_INIT(blsp2_qup2_spi_apps_clk_src.c),
957 },
958};
959
960static struct rcg_clk blsp2_qup3_spi_apps_clk_src = {
961 .cmd_rcgr_reg = BLSP2_QUP3_SPI_APPS_CMD_RCGR,
962 .set_rate = set_rate_mnd,
963 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
964 .current_freq = &rcg_dummy_freq,
965 .base = &virt_bases[GCC_BASE],
966 .c = {
967 .dbg_name = "blsp2_qup3_spi_apps_clk_src",
968 .ops = &clk_ops_rcg_mnd,
969 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
970 CLK_INIT(blsp2_qup3_spi_apps_clk_src.c),
971 },
972};
973
974static struct rcg_clk blsp2_qup4_spi_apps_clk_src = {
975 .cmd_rcgr_reg = BLSP2_QUP4_SPI_APPS_CMD_RCGR,
976 .set_rate = set_rate_mnd,
977 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
978 .current_freq = &rcg_dummy_freq,
979 .base = &virt_bases[GCC_BASE],
980 .c = {
981 .dbg_name = "blsp2_qup4_spi_apps_clk_src",
982 .ops = &clk_ops_rcg_mnd,
983 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
984 CLK_INIT(blsp2_qup4_spi_apps_clk_src.c),
985 },
986};
987
988static struct rcg_clk blsp2_qup5_spi_apps_clk_src = {
989 .cmd_rcgr_reg = BLSP2_QUP5_SPI_APPS_CMD_RCGR,
990 .set_rate = set_rate_mnd,
991 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
992 .current_freq = &rcg_dummy_freq,
993 .base = &virt_bases[GCC_BASE],
994 .c = {
995 .dbg_name = "blsp2_qup5_spi_apps_clk_src",
996 .ops = &clk_ops_rcg_mnd,
997 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
998 CLK_INIT(blsp2_qup5_spi_apps_clk_src.c),
999 },
1000};
1001
1002static struct rcg_clk blsp2_qup6_spi_apps_clk_src = {
1003 .cmd_rcgr_reg = BLSP2_QUP6_SPI_APPS_CMD_RCGR,
1004 .set_rate = set_rate_mnd,
1005 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
1006 .current_freq = &rcg_dummy_freq,
1007 .base = &virt_bases[GCC_BASE],
1008 .c = {
1009 .dbg_name = "blsp2_qup6_spi_apps_clk_src",
1010 .ops = &clk_ops_rcg_mnd,
1011 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
1012 CLK_INIT(blsp2_qup6_spi_apps_clk_src.c),
1013 },
1014};
1015
1016static struct rcg_clk blsp2_uart1_apps_clk_src = {
1017 .cmd_rcgr_reg = BLSP2_UART1_APPS_CMD_RCGR,
1018 .set_rate = set_rate_mnd,
1019 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
1020 .current_freq = &rcg_dummy_freq,
1021 .base = &virt_bases[GCC_BASE],
1022 .c = {
1023 .dbg_name = "blsp2_uart1_apps_clk_src",
1024 .ops = &clk_ops_rcg_mnd,
1025 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
1026 CLK_INIT(blsp2_uart1_apps_clk_src.c),
1027 },
1028};
1029
1030static struct rcg_clk blsp2_uart2_apps_clk_src = {
1031 .cmd_rcgr_reg = BLSP2_UART2_APPS_CMD_RCGR,
1032 .set_rate = set_rate_mnd,
1033 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
1034 .current_freq = &rcg_dummy_freq,
1035 .base = &virt_bases[GCC_BASE],
1036 .c = {
1037 .dbg_name = "blsp2_uart2_apps_clk_src",
1038 .ops = &clk_ops_rcg_mnd,
1039 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
1040 CLK_INIT(blsp2_uart2_apps_clk_src.c),
1041 },
1042};
1043
1044static struct rcg_clk blsp2_uart3_apps_clk_src = {
1045 .cmd_rcgr_reg = BLSP2_UART3_APPS_CMD_RCGR,
1046 .set_rate = set_rate_mnd,
1047 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
1048 .current_freq = &rcg_dummy_freq,
1049 .base = &virt_bases[GCC_BASE],
1050 .c = {
1051 .dbg_name = "blsp2_uart3_apps_clk_src",
1052 .ops = &clk_ops_rcg_mnd,
1053 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
1054 CLK_INIT(blsp2_uart3_apps_clk_src.c),
1055 },
1056};
1057
1058static struct rcg_clk blsp2_uart4_apps_clk_src = {
1059 .cmd_rcgr_reg = BLSP2_UART4_APPS_CMD_RCGR,
1060 .set_rate = set_rate_mnd,
1061 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
1062 .current_freq = &rcg_dummy_freq,
1063 .base = &virt_bases[GCC_BASE],
1064 .c = {
1065 .dbg_name = "blsp2_uart4_apps_clk_src",
1066 .ops = &clk_ops_rcg_mnd,
1067 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
1068 CLK_INIT(blsp2_uart4_apps_clk_src.c),
1069 },
1070};
1071
1072static struct rcg_clk blsp2_uart5_apps_clk_src = {
1073 .cmd_rcgr_reg = BLSP2_UART5_APPS_CMD_RCGR,
1074 .set_rate = set_rate_mnd,
1075 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
1076 .current_freq = &rcg_dummy_freq,
1077 .base = &virt_bases[GCC_BASE],
1078 .c = {
1079 .dbg_name = "blsp2_uart5_apps_clk_src",
1080 .ops = &clk_ops_rcg_mnd,
1081 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
1082 CLK_INIT(blsp2_uart5_apps_clk_src.c),
1083 },
1084};
1085
1086static struct rcg_clk blsp2_uart6_apps_clk_src = {
1087 .cmd_rcgr_reg = BLSP2_UART6_APPS_CMD_RCGR,
1088 .set_rate = set_rate_mnd,
1089 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
1090 .current_freq = &rcg_dummy_freq,
1091 .base = &virt_bases[GCC_BASE],
1092 .c = {
1093 .dbg_name = "blsp2_uart6_apps_clk_src",
1094 .ops = &clk_ops_rcg_mnd,
1095 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
1096 CLK_INIT(blsp2_uart6_apps_clk_src.c),
1097 },
1098};
1099
1100static struct clk_freq_tbl ftbl_gcc_ce1_clk[] = {
1101 F( 50000000, gpll0, 12, 0, 0),
1102 F(100000000, gpll0, 6, 0, 0),
1103 F_END
1104};
1105
1106static struct rcg_clk ce1_clk_src = {
1107 .cmd_rcgr_reg = CE1_CMD_RCGR,
1108 .set_rate = set_rate_hid,
1109 .freq_tbl = ftbl_gcc_ce1_clk,
1110 .current_freq = &rcg_dummy_freq,
1111 .base = &virt_bases[GCC_BASE],
1112 .c = {
1113 .dbg_name = "ce1_clk_src",
1114 .ops = &clk_ops_rcg,
1115 VDD_DIG_FMAX_MAP2(LOW, 50000000, NOMINAL, 100000000),
1116 CLK_INIT(ce1_clk_src.c),
1117 },
1118};
1119
1120static struct clk_freq_tbl ftbl_gcc_ce2_clk[] = {
1121 F( 50000000, gpll0, 12, 0, 0),
1122 F(100000000, gpll0, 6, 0, 0),
1123 F_END
1124};
1125
1126static struct rcg_clk ce2_clk_src = {
1127 .cmd_rcgr_reg = CE2_CMD_RCGR,
1128 .set_rate = set_rate_hid,
1129 .freq_tbl = ftbl_gcc_ce2_clk,
1130 .current_freq = &rcg_dummy_freq,
1131 .base = &virt_bases[GCC_BASE],
1132 .c = {
1133 .dbg_name = "ce2_clk_src",
1134 .ops = &clk_ops_rcg,
1135 VDD_DIG_FMAX_MAP2(LOW, 50000000, NOMINAL, 100000000),
1136 CLK_INIT(ce2_clk_src.c),
1137 },
1138};
1139
1140static struct clk_freq_tbl ftbl_gcc_gp_clk[] = {
1141 F(19200000, cxo, 1, 0, 0),
1142 F_END
1143};
1144
1145static struct rcg_clk gp1_clk_src = {
1146 .cmd_rcgr_reg = GP1_CMD_RCGR,
1147 .set_rate = set_rate_mnd,
1148 .freq_tbl = ftbl_gcc_gp_clk,
1149 .current_freq = &rcg_dummy_freq,
1150 .base = &virt_bases[GCC_BASE],
1151 .c = {
1152 .dbg_name = "gp1_clk_src",
1153 .ops = &clk_ops_rcg_mnd,
1154 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
1155 CLK_INIT(gp1_clk_src.c),
1156 },
1157};
1158
1159static struct rcg_clk gp2_clk_src = {
1160 .cmd_rcgr_reg = GP2_CMD_RCGR,
1161 .set_rate = set_rate_mnd,
1162 .freq_tbl = ftbl_gcc_gp_clk,
1163 .current_freq = &rcg_dummy_freq,
1164 .base = &virt_bases[GCC_BASE],
1165 .c = {
1166 .dbg_name = "gp2_clk_src",
1167 .ops = &clk_ops_rcg_mnd,
1168 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
1169 CLK_INIT(gp2_clk_src.c),
1170 },
1171};
1172
1173static struct rcg_clk gp3_clk_src = {
1174 .cmd_rcgr_reg = GP3_CMD_RCGR,
1175 .set_rate = set_rate_mnd,
1176 .freq_tbl = ftbl_gcc_gp_clk,
1177 .current_freq = &rcg_dummy_freq,
1178 .base = &virt_bases[GCC_BASE],
1179 .c = {
1180 .dbg_name = "gp3_clk_src",
1181 .ops = &clk_ops_rcg_mnd,
1182 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
1183 CLK_INIT(gp3_clk_src.c),
1184 },
1185};
1186
1187static struct clk_freq_tbl ftbl_gcc_pdm2_clk[] = {
1188 F(60000000, gpll0, 10, 0, 0),
1189 F_END
1190};
1191
1192static struct rcg_clk pdm2_clk_src = {
1193 .cmd_rcgr_reg = PDM2_CMD_RCGR,
1194 .set_rate = set_rate_hid,
1195 .freq_tbl = ftbl_gcc_pdm2_clk,
1196 .current_freq = &rcg_dummy_freq,
1197 .base = &virt_bases[GCC_BASE],
1198 .c = {
1199 .dbg_name = "pdm2_clk_src",
1200 .ops = &clk_ops_rcg,
1201 VDD_DIG_FMAX_MAP1(LOW, 60000000),
1202 CLK_INIT(pdm2_clk_src.c),
1203 },
1204};
1205
1206static struct clk_freq_tbl ftbl_gcc_sdcc1_2_apps_clk[] = {
1207 F( 144000, cxo, 16, 3, 25),
1208 F( 400000, cxo, 12, 1, 4),
1209 F( 20000000, gpll0, 15, 1, 2),
1210 F( 25000000, gpll0, 12, 1, 2),
1211 F( 50000000, gpll0, 12, 0, 0),
1212 F(100000000, gpll0, 6, 0, 0),
1213 F(200000000, gpll0, 3, 0, 0),
1214 F_END
1215};
1216
1217static struct clk_freq_tbl ftbl_gcc_sdcc3_4_apps_clk[] = {
1218 F( 144000, cxo, 16, 3, 25),
1219 F( 400000, cxo, 12, 1, 4),
1220 F( 20000000, gpll0, 15, 1, 2),
1221 F( 25000000, gpll0, 12, 1, 2),
1222 F( 50000000, gpll0, 12, 0, 0),
1223 F(100000000, gpll0, 6, 0, 0),
1224 F_END
1225};
1226
1227static struct rcg_clk sdcc1_apps_clk_src = {
1228 .cmd_rcgr_reg = SDCC1_APPS_CMD_RCGR,
1229 .set_rate = set_rate_mnd,
1230 .freq_tbl = ftbl_gcc_sdcc1_2_apps_clk,
1231 .current_freq = &rcg_dummy_freq,
1232 .base = &virt_bases[GCC_BASE],
1233 .c = {
1234 .dbg_name = "sdcc1_apps_clk_src",
1235 .ops = &clk_ops_rcg_mnd,
1236 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
1237 CLK_INIT(sdcc1_apps_clk_src.c),
1238 },
1239};
1240
1241static struct rcg_clk sdcc2_apps_clk_src = {
1242 .cmd_rcgr_reg = SDCC2_APPS_CMD_RCGR,
1243 .set_rate = set_rate_mnd,
1244 .freq_tbl = ftbl_gcc_sdcc1_2_apps_clk,
1245 .current_freq = &rcg_dummy_freq,
1246 .base = &virt_bases[GCC_BASE],
1247 .c = {
1248 .dbg_name = "sdcc2_apps_clk_src",
1249 .ops = &clk_ops_rcg_mnd,
1250 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
1251 CLK_INIT(sdcc2_apps_clk_src.c),
1252 },
1253};
1254
1255static struct rcg_clk sdcc3_apps_clk_src = {
1256 .cmd_rcgr_reg = SDCC3_APPS_CMD_RCGR,
1257 .set_rate = set_rate_mnd,
1258 .freq_tbl = ftbl_gcc_sdcc3_4_apps_clk,
1259 .current_freq = &rcg_dummy_freq,
1260 .base = &virt_bases[GCC_BASE],
1261 .c = {
1262 .dbg_name = "sdcc3_apps_clk_src",
1263 .ops = &clk_ops_rcg_mnd,
1264 VDD_DIG_FMAX_MAP2(LOW, 50000000, NOMINAL, 100000000),
1265 CLK_INIT(sdcc3_apps_clk_src.c),
1266 },
1267};
1268
1269static struct rcg_clk sdcc4_apps_clk_src = {
1270 .cmd_rcgr_reg = SDCC4_APPS_CMD_RCGR,
1271 .set_rate = set_rate_mnd,
1272 .freq_tbl = ftbl_gcc_sdcc3_4_apps_clk,
1273 .current_freq = &rcg_dummy_freq,
1274 .base = &virt_bases[GCC_BASE],
1275 .c = {
1276 .dbg_name = "sdcc4_apps_clk_src",
1277 .ops = &clk_ops_rcg_mnd,
1278 VDD_DIG_FMAX_MAP2(LOW, 50000000, NOMINAL, 100000000),
1279 CLK_INIT(sdcc4_apps_clk_src.c),
1280 },
1281};
1282
1283static struct clk_freq_tbl ftbl_gcc_tsif_ref_clk[] = {
1284 F(105000, cxo, 2, 1, 91),
1285 F_END
1286};
1287
1288static struct rcg_clk tsif_ref_clk_src = {
1289 .cmd_rcgr_reg = TSIF_REF_CMD_RCGR,
1290 .set_rate = set_rate_mnd,
1291 .freq_tbl = ftbl_gcc_tsif_ref_clk,
1292 .current_freq = &rcg_dummy_freq,
1293 .base = &virt_bases[GCC_BASE],
1294 .c = {
1295 .dbg_name = "tsif_ref_clk_src",
1296 .ops = &clk_ops_rcg_mnd,
1297 VDD_DIG_FMAX_MAP1(LOW, 105500),
1298 CLK_INIT(tsif_ref_clk_src.c),
1299 },
1300};
1301
1302static struct clk_freq_tbl ftbl_gcc_usb30_mock_utmi_clk[] = {
1303 F(60000000, gpll0, 10, 0, 0),
1304 F_END
1305};
1306
1307static struct rcg_clk usb30_mock_utmi_clk_src = {
1308 .cmd_rcgr_reg = USB30_MOCK_UTMI_CMD_RCGR,
1309 .set_rate = set_rate_hid,
1310 .freq_tbl = ftbl_gcc_usb30_mock_utmi_clk,
1311 .current_freq = &rcg_dummy_freq,
1312 .base = &virt_bases[GCC_BASE],
1313 .c = {
1314 .dbg_name = "usb30_mock_utmi_clk_src",
1315 .ops = &clk_ops_rcg,
1316 VDD_DIG_FMAX_MAP1(NOMINAL, 60000000),
1317 CLK_INIT(usb30_mock_utmi_clk_src.c),
1318 },
1319};
1320
1321static struct clk_freq_tbl ftbl_gcc_usb_hs_system_clk[] = {
1322 F(75000000, gpll0, 8, 0, 0),
1323 F_END
1324};
1325
1326static struct rcg_clk usb_hs_system_clk_src = {
1327 .cmd_rcgr_reg = USB_HS_SYSTEM_CMD_RCGR,
1328 .set_rate = set_rate_hid,
1329 .freq_tbl = ftbl_gcc_usb_hs_system_clk,
1330 .current_freq = &rcg_dummy_freq,
1331 .base = &virt_bases[GCC_BASE],
1332 .c = {
1333 .dbg_name = "usb_hs_system_clk_src",
1334 .ops = &clk_ops_rcg,
1335 VDD_DIG_FMAX_MAP2(LOW, 37500000, NOMINAL, 75000000),
1336 CLK_INIT(usb_hs_system_clk_src.c),
1337 },
1338};
1339
1340static struct clk_freq_tbl ftbl_gcc_usb_hsic_clk[] = {
1341 F_HSIC(480000000, gpll1, 1, 0, 0),
1342 F_END
1343};
1344
1345static struct rcg_clk usb_hsic_clk_src = {
1346 .cmd_rcgr_reg = USB_HSIC_CMD_RCGR,
1347 .set_rate = set_rate_hid,
1348 .freq_tbl = ftbl_gcc_usb_hsic_clk,
1349 .current_freq = &rcg_dummy_freq,
1350 .base = &virt_bases[GCC_BASE],
1351 .c = {
1352 .dbg_name = "usb_hsic_clk_src",
1353 .ops = &clk_ops_rcg,
1354 VDD_DIG_FMAX_MAP1(LOW, 480000000),
1355 CLK_INIT(usb_hsic_clk_src.c),
1356 },
1357};
1358
1359static struct clk_freq_tbl ftbl_gcc_usb_hsic_io_cal_clk[] = {
1360 F(9600000, cxo, 2, 0, 0),
1361 F_END
1362};
1363
1364static struct rcg_clk usb_hsic_io_cal_clk_src = {
1365 .cmd_rcgr_reg = USB_HSIC_IO_CAL_CMD_RCGR,
1366 .set_rate = set_rate_hid,
1367 .freq_tbl = ftbl_gcc_usb_hsic_io_cal_clk,
1368 .current_freq = &rcg_dummy_freq,
1369 .base = &virt_bases[GCC_BASE],
1370 .c = {
1371 .dbg_name = "usb_hsic_io_cal_clk_src",
1372 .ops = &clk_ops_rcg,
1373 VDD_DIG_FMAX_MAP1(LOW, 9600000),
1374 CLK_INIT(usb_hsic_io_cal_clk_src.c),
1375 },
1376};
1377
1378static struct clk_freq_tbl ftbl_gcc_usb_hsic_system_clk[] = {
1379 F(75000000, gpll0, 8, 0, 0),
1380 F_END
1381};
1382
1383static struct rcg_clk usb_hsic_system_clk_src = {
1384 .cmd_rcgr_reg = USB_HSIC_SYSTEM_CMD_RCGR,
1385 .set_rate = set_rate_hid,
1386 .freq_tbl = ftbl_gcc_usb_hsic_system_clk,
1387 .current_freq = &rcg_dummy_freq,
1388 .base = &virt_bases[GCC_BASE],
1389 .c = {
1390 .dbg_name = "usb_hsic_system_clk_src",
1391 .ops = &clk_ops_rcg,
1392 VDD_DIG_FMAX_MAP2(LOW, 37500000, NOMINAL, 75000000),
1393 CLK_INIT(usb_hsic_system_clk_src.c),
1394 },
1395};
1396
1397static struct local_vote_clk gcc_bam_dma_ahb_clk = {
1398 .cbcr_reg = BAM_DMA_AHB_CBCR,
1399 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
1400 .en_mask = BIT(12),
1401 .bcr_reg = BAM_DMA_BCR,
1402 .base = &virt_bases[GCC_BASE],
1403 .c = {
1404 .dbg_name = "gcc_bam_dma_ahb_clk",
1405 .ops = &clk_ops_vote,
1406 CLK_INIT(gcc_bam_dma_ahb_clk.c),
1407 },
1408};
1409
1410static struct local_vote_clk gcc_blsp1_ahb_clk = {
1411 .cbcr_reg = BLSP1_AHB_CBCR,
1412 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
1413 .en_mask = BIT(17),
1414 .bcr_reg = BLSP1_BCR,
1415 .base = &virt_bases[GCC_BASE],
1416 .c = {
1417 .dbg_name = "gcc_blsp1_ahb_clk",
1418 .ops = &clk_ops_vote,
1419 CLK_INIT(gcc_blsp1_ahb_clk.c),
1420 },
1421};
1422
1423static struct branch_clk gcc_blsp1_qup1_i2c_apps_clk = {
1424 .cbcr_reg = BLSP1_QUP1_I2C_APPS_CBCR,
1425 .parent = &cxo_clk_src.c,
1426 .has_sibling = 1,
1427 .bcr_reg = BLSP1_QUP1_BCR,
1428 .base = &virt_bases[GCC_BASE],
1429 .c = {
1430 .dbg_name = "gcc_blsp1_qup1_i2c_apps_clk",
1431 .ops = &clk_ops_branch,
1432 CLK_INIT(gcc_blsp1_qup1_i2c_apps_clk.c),
1433 },
1434};
1435
1436static struct branch_clk gcc_blsp1_qup1_spi_apps_clk = {
1437 .cbcr_reg = BLSP1_QUP1_SPI_APPS_CBCR,
1438 .parent = &blsp1_qup1_spi_apps_clk_src.c,
1439 .bcr_reg = BLSP1_QUP1_BCR,
1440 .base = &virt_bases[GCC_BASE],
1441 .c = {
1442 .dbg_name = "gcc_blsp1_qup1_spi_apps_clk",
1443 .ops = &clk_ops_branch,
1444 CLK_INIT(gcc_blsp1_qup1_spi_apps_clk.c),
1445 },
1446};
1447
1448static struct branch_clk gcc_blsp1_qup2_i2c_apps_clk = {
1449 .cbcr_reg = BLSP1_QUP2_I2C_APPS_CBCR,
1450 .parent = &cxo_clk_src.c,
1451 .has_sibling = 1,
1452 .bcr_reg = BLSP1_QUP2_BCR,
1453 .base = &virt_bases[GCC_BASE],
1454 .c = {
1455 .dbg_name = "gcc_blsp1_qup2_i2c_apps_clk",
1456 .ops = &clk_ops_branch,
1457 CLK_INIT(gcc_blsp1_qup2_i2c_apps_clk.c),
1458 },
1459};
1460
1461static struct branch_clk gcc_blsp1_qup2_spi_apps_clk = {
1462 .cbcr_reg = BLSP1_QUP2_SPI_APPS_CBCR,
1463 .parent = &blsp1_qup2_spi_apps_clk_src.c,
1464 .bcr_reg = BLSP1_QUP2_BCR,
1465 .base = &virt_bases[GCC_BASE],
1466 .c = {
1467 .dbg_name = "gcc_blsp1_qup2_spi_apps_clk",
1468 .ops = &clk_ops_branch,
1469 CLK_INIT(gcc_blsp1_qup2_spi_apps_clk.c),
1470 },
1471};
1472
1473static struct branch_clk gcc_blsp1_qup3_i2c_apps_clk = {
1474 .cbcr_reg = BLSP1_QUP3_I2C_APPS_CBCR,
1475 .parent = &cxo_clk_src.c,
1476 .has_sibling = 1,
1477 .bcr_reg = BLSP1_QUP3_BCR,
1478 .base = &virt_bases[GCC_BASE],
1479 .c = {
1480 .dbg_name = "gcc_blsp1_qup3_i2c_apps_clk",
1481 .ops = &clk_ops_branch,
1482 CLK_INIT(gcc_blsp1_qup3_i2c_apps_clk.c),
1483 },
1484};
1485
1486static struct branch_clk gcc_blsp1_qup3_spi_apps_clk = {
1487 .cbcr_reg = BLSP1_QUP3_SPI_APPS_CBCR,
1488 .parent = &blsp1_qup3_spi_apps_clk_src.c,
1489 .bcr_reg = BLSP1_QUP3_BCR,
1490 .base = &virt_bases[GCC_BASE],
1491 .c = {
1492 .dbg_name = "gcc_blsp1_qup3_spi_apps_clk",
1493 .ops = &clk_ops_branch,
1494 CLK_INIT(gcc_blsp1_qup3_spi_apps_clk.c),
1495 },
1496};
1497
1498static struct branch_clk gcc_blsp1_qup4_i2c_apps_clk = {
1499 .cbcr_reg = BLSP1_QUP4_I2C_APPS_CBCR,
1500 .parent = &cxo_clk_src.c,
1501 .has_sibling = 1,
1502 .bcr_reg = BLSP1_QUP4_BCR,
1503 .base = &virt_bases[GCC_BASE],
1504 .c = {
1505 .dbg_name = "gcc_blsp1_qup4_i2c_apps_clk",
1506 .ops = &clk_ops_branch,
1507 CLK_INIT(gcc_blsp1_qup4_i2c_apps_clk.c),
1508 },
1509};
1510
1511static struct branch_clk gcc_blsp1_qup4_spi_apps_clk = {
1512 .cbcr_reg = BLSP1_QUP4_SPI_APPS_CBCR,
1513 .parent = &blsp1_qup4_spi_apps_clk_src.c,
1514 .bcr_reg = BLSP1_QUP4_BCR,
1515 .base = &virt_bases[GCC_BASE],
1516 .c = {
1517 .dbg_name = "gcc_blsp1_qup4_spi_apps_clk",
1518 .ops = &clk_ops_branch,
1519 CLK_INIT(gcc_blsp1_qup4_spi_apps_clk.c),
1520 },
1521};
1522
1523static struct branch_clk gcc_blsp1_qup5_i2c_apps_clk = {
1524 .cbcr_reg = BLSP1_QUP5_I2C_APPS_CBCR,
1525 .parent = &cxo_clk_src.c,
1526 .has_sibling = 1,
1527 .bcr_reg = BLSP1_QUP5_BCR,
1528 .base = &virt_bases[GCC_BASE],
1529 .c = {
1530 .dbg_name = "gcc_blsp1_qup5_i2c_apps_clk",
1531 .ops = &clk_ops_branch,
1532 CLK_INIT(gcc_blsp1_qup5_i2c_apps_clk.c),
1533 },
1534};
1535
1536static struct branch_clk gcc_blsp1_qup5_spi_apps_clk = {
1537 .cbcr_reg = BLSP1_QUP5_SPI_APPS_CBCR,
1538 .parent = &blsp1_qup5_spi_apps_clk_src.c,
1539 .bcr_reg = BLSP1_QUP5_BCR,
1540 .base = &virt_bases[GCC_BASE],
1541 .c = {
1542 .dbg_name = "gcc_blsp1_qup5_spi_apps_clk",
1543 .ops = &clk_ops_branch,
1544 CLK_INIT(gcc_blsp1_qup5_spi_apps_clk.c),
1545 },
1546};
1547
1548static struct branch_clk gcc_blsp1_qup6_i2c_apps_clk = {
1549 .cbcr_reg = BLSP1_QUP6_I2C_APPS_CBCR,
1550 .parent = &cxo_clk_src.c,
1551 .has_sibling = 1,
1552 .bcr_reg = BLSP1_QUP6_BCR,
1553 .base = &virt_bases[GCC_BASE],
1554 .c = {
1555 .dbg_name = "gcc_blsp1_qup6_i2c_apps_clk",
1556 .ops = &clk_ops_branch,
1557 CLK_INIT(gcc_blsp1_qup6_i2c_apps_clk.c),
1558 },
1559};
1560
1561static struct branch_clk gcc_blsp1_qup6_spi_apps_clk = {
1562 .cbcr_reg = BLSP1_QUP6_SPI_APPS_CBCR,
1563 .parent = &blsp1_qup6_spi_apps_clk_src.c,
1564 .bcr_reg = BLSP1_QUP6_BCR,
1565 .base = &virt_bases[GCC_BASE],
1566 .c = {
1567 .dbg_name = "gcc_blsp1_qup6_spi_apps_clk",
1568 .ops = &clk_ops_branch,
1569 CLK_INIT(gcc_blsp1_qup6_spi_apps_clk.c),
1570 },
1571};
1572
1573static struct branch_clk gcc_blsp1_uart1_apps_clk = {
1574 .cbcr_reg = BLSP1_UART1_APPS_CBCR,
1575 .parent = &blsp1_uart1_apps_clk_src.c,
1576 .bcr_reg = BLSP1_UART1_BCR,
1577 .base = &virt_bases[GCC_BASE],
1578 .c = {
1579 .dbg_name = "gcc_blsp1_uart1_apps_clk",
1580 .ops = &clk_ops_branch,
1581 CLK_INIT(gcc_blsp1_uart1_apps_clk.c),
1582 },
1583};
1584
1585static struct branch_clk gcc_blsp1_uart2_apps_clk = {
1586 .cbcr_reg = BLSP1_UART2_APPS_CBCR,
1587 .parent = &blsp1_uart2_apps_clk_src.c,
1588 .bcr_reg = BLSP1_UART2_BCR,
1589 .base = &virt_bases[GCC_BASE],
1590 .c = {
1591 .dbg_name = "gcc_blsp1_uart2_apps_clk",
1592 .ops = &clk_ops_branch,
1593 CLK_INIT(gcc_blsp1_uart2_apps_clk.c),
1594 },
1595};
1596
1597static struct branch_clk gcc_blsp1_uart3_apps_clk = {
1598 .cbcr_reg = BLSP1_UART3_APPS_CBCR,
1599 .parent = &blsp1_uart3_apps_clk_src.c,
1600 .bcr_reg = BLSP1_UART3_BCR,
1601 .base = &virt_bases[GCC_BASE],
1602 .c = {
1603 .dbg_name = "gcc_blsp1_uart3_apps_clk",
1604 .ops = &clk_ops_branch,
1605 CLK_INIT(gcc_blsp1_uart3_apps_clk.c),
1606 },
1607};
1608
1609static struct branch_clk gcc_blsp1_uart4_apps_clk = {
1610 .cbcr_reg = BLSP1_UART4_APPS_CBCR,
1611 .parent = &blsp1_uart4_apps_clk_src.c,
1612 .bcr_reg = BLSP1_UART4_BCR,
1613 .base = &virt_bases[GCC_BASE],
1614 .c = {
1615 .dbg_name = "gcc_blsp1_uart4_apps_clk",
1616 .ops = &clk_ops_branch,
1617 CLK_INIT(gcc_blsp1_uart4_apps_clk.c),
1618 },
1619};
1620
1621static struct branch_clk gcc_blsp1_uart5_apps_clk = {
1622 .cbcr_reg = BLSP1_UART5_APPS_CBCR,
1623 .parent = &blsp1_uart5_apps_clk_src.c,
1624 .bcr_reg = BLSP1_UART5_BCR,
1625 .base = &virt_bases[GCC_BASE],
1626 .c = {
1627 .dbg_name = "gcc_blsp1_uart5_apps_clk",
1628 .ops = &clk_ops_branch,
1629 CLK_INIT(gcc_blsp1_uart5_apps_clk.c),
1630 },
1631};
1632
1633static struct branch_clk gcc_blsp1_uart6_apps_clk = {
1634 .cbcr_reg = BLSP1_UART6_APPS_CBCR,
1635 .parent = &blsp1_uart6_apps_clk_src.c,
1636 .bcr_reg = BLSP1_UART6_BCR,
1637 .base = &virt_bases[GCC_BASE],
1638 .c = {
1639 .dbg_name = "gcc_blsp1_uart6_apps_clk",
1640 .ops = &clk_ops_branch,
1641 CLK_INIT(gcc_blsp1_uart6_apps_clk.c),
1642 },
1643};
1644
Vikram Mulukutlaa967db42012-05-10 16:20:40 -07001645static struct local_vote_clk gcc_boot_rom_ahb_clk = {
1646 .cbcr_reg = BOOT_ROM_AHB_CBCR,
1647 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
1648 .en_mask = BIT(10),
1649 .bcr_reg = BOOT_ROM_BCR,
1650 .base = &virt_bases[GCC_BASE],
1651 .c = {
1652 .dbg_name = "gcc_boot_rom_ahb_clk",
1653 .ops = &clk_ops_vote,
1654 CLK_INIT(gcc_boot_rom_ahb_clk.c),
1655 },
1656};
1657
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001658static struct local_vote_clk gcc_blsp2_ahb_clk = {
1659 .cbcr_reg = BLSP2_AHB_CBCR,
1660 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
1661 .en_mask = BIT(15),
1662 .bcr_reg = BLSP2_BCR,
1663 .base = &virt_bases[GCC_BASE],
1664 .c = {
1665 .dbg_name = "gcc_blsp2_ahb_clk",
1666 .ops = &clk_ops_vote,
1667 CLK_INIT(gcc_blsp2_ahb_clk.c),
1668 },
1669};
1670
1671static struct branch_clk gcc_blsp2_qup1_i2c_apps_clk = {
1672 .cbcr_reg = BLSP2_QUP1_I2C_APPS_CBCR,
1673 .parent = &cxo_clk_src.c,
1674 .has_sibling = 1,
1675 .bcr_reg = BLSP2_QUP1_BCR,
1676 .base = &virt_bases[GCC_BASE],
1677 .c = {
1678 .dbg_name = "gcc_blsp2_qup1_i2c_apps_clk",
1679 .ops = &clk_ops_branch,
1680 CLK_INIT(gcc_blsp2_qup1_i2c_apps_clk.c),
1681 },
1682};
1683
1684static struct branch_clk gcc_blsp2_qup1_spi_apps_clk = {
1685 .cbcr_reg = BLSP2_QUP1_SPI_APPS_CBCR,
1686 .parent = &blsp2_qup1_spi_apps_clk_src.c,
1687 .bcr_reg = BLSP2_QUP1_BCR,
1688 .base = &virt_bases[GCC_BASE],
1689 .c = {
1690 .dbg_name = "gcc_blsp2_qup1_spi_apps_clk",
1691 .ops = &clk_ops_branch,
1692 CLK_INIT(gcc_blsp2_qup1_spi_apps_clk.c),
1693 },
1694};
1695
1696static struct branch_clk gcc_blsp2_qup2_i2c_apps_clk = {
1697 .cbcr_reg = BLSP2_QUP2_I2C_APPS_CBCR,
1698 .parent = &cxo_clk_src.c,
1699 .has_sibling = 1,
1700 .bcr_reg = BLSP2_QUP2_BCR,
1701 .base = &virt_bases[GCC_BASE],
1702 .c = {
1703 .dbg_name = "gcc_blsp2_qup2_i2c_apps_clk",
1704 .ops = &clk_ops_branch,
1705 CLK_INIT(gcc_blsp2_qup2_i2c_apps_clk.c),
1706 },
1707};
1708
1709static struct branch_clk gcc_blsp2_qup2_spi_apps_clk = {
1710 .cbcr_reg = BLSP2_QUP2_SPI_APPS_CBCR,
1711 .parent = &blsp2_qup2_spi_apps_clk_src.c,
1712 .bcr_reg = BLSP2_QUP2_BCR,
1713 .base = &virt_bases[GCC_BASE],
1714 .c = {
1715 .dbg_name = "gcc_blsp2_qup2_spi_apps_clk",
1716 .ops = &clk_ops_branch,
1717 CLK_INIT(gcc_blsp2_qup2_spi_apps_clk.c),
1718 },
1719};
1720
1721static struct branch_clk gcc_blsp2_qup3_i2c_apps_clk = {
1722 .cbcr_reg = BLSP2_QUP3_I2C_APPS_CBCR,
1723 .parent = &cxo_clk_src.c,
1724 .has_sibling = 1,
1725 .bcr_reg = BLSP2_QUP3_BCR,
1726 .base = &virt_bases[GCC_BASE],
1727 .c = {
1728 .dbg_name = "gcc_blsp2_qup3_i2c_apps_clk",
1729 .ops = &clk_ops_branch,
1730 CLK_INIT(gcc_blsp2_qup3_i2c_apps_clk.c),
1731 },
1732};
1733
1734static struct branch_clk gcc_blsp2_qup3_spi_apps_clk = {
1735 .cbcr_reg = BLSP2_QUP3_SPI_APPS_CBCR,
1736 .parent = &blsp2_qup3_spi_apps_clk_src.c,
1737 .bcr_reg = BLSP2_QUP3_BCR,
1738 .base = &virt_bases[GCC_BASE],
1739 .c = {
1740 .dbg_name = "gcc_blsp2_qup3_spi_apps_clk",
1741 .ops = &clk_ops_branch,
1742 CLK_INIT(gcc_blsp2_qup3_spi_apps_clk.c),
1743 },
1744};
1745
1746static struct branch_clk gcc_blsp2_qup4_i2c_apps_clk = {
1747 .cbcr_reg = BLSP2_QUP4_I2C_APPS_CBCR,
1748 .parent = &cxo_clk_src.c,
1749 .has_sibling = 1,
1750 .bcr_reg = BLSP2_QUP4_BCR,
1751 .base = &virt_bases[GCC_BASE],
1752 .c = {
1753 .dbg_name = "gcc_blsp2_qup4_i2c_apps_clk",
1754 .ops = &clk_ops_branch,
1755 CLK_INIT(gcc_blsp2_qup4_i2c_apps_clk.c),
1756 },
1757};
1758
1759static struct branch_clk gcc_blsp2_qup4_spi_apps_clk = {
1760 .cbcr_reg = BLSP2_QUP4_SPI_APPS_CBCR,
1761 .parent = &blsp2_qup4_spi_apps_clk_src.c,
1762 .bcr_reg = BLSP2_QUP4_BCR,
1763 .base = &virt_bases[GCC_BASE],
1764 .c = {
1765 .dbg_name = "gcc_blsp2_qup4_spi_apps_clk",
1766 .ops = &clk_ops_branch,
1767 CLK_INIT(gcc_blsp2_qup4_spi_apps_clk.c),
1768 },
1769};
1770
1771static struct branch_clk gcc_blsp2_qup5_i2c_apps_clk = {
1772 .cbcr_reg = BLSP2_QUP5_I2C_APPS_CBCR,
1773 .parent = &cxo_clk_src.c,
1774 .has_sibling = 1,
1775 .bcr_reg = BLSP2_QUP5_BCR,
1776 .base = &virt_bases[GCC_BASE],
1777 .c = {
1778 .dbg_name = "gcc_blsp2_qup5_i2c_apps_clk",
1779 .ops = &clk_ops_branch,
1780 CLK_INIT(gcc_blsp2_qup5_i2c_apps_clk.c),
1781 },
1782};
1783
1784static struct branch_clk gcc_blsp2_qup5_spi_apps_clk = {
1785 .cbcr_reg = BLSP2_QUP5_SPI_APPS_CBCR,
1786 .parent = &blsp2_qup5_spi_apps_clk_src.c,
1787 .bcr_reg = BLSP2_QUP5_BCR,
1788 .base = &virt_bases[GCC_BASE],
1789 .c = {
1790 .dbg_name = "gcc_blsp2_qup5_spi_apps_clk",
1791 .ops = &clk_ops_branch,
1792 CLK_INIT(gcc_blsp2_qup5_spi_apps_clk.c),
1793 },
1794};
1795
1796static struct branch_clk gcc_blsp2_qup6_i2c_apps_clk = {
1797 .cbcr_reg = BLSP2_QUP6_I2C_APPS_CBCR,
1798 .parent = &cxo_clk_src.c,
1799 .has_sibling = 1,
1800 .bcr_reg = BLSP2_QUP6_BCR,
1801 .base = &virt_bases[GCC_BASE],
1802 .c = {
1803 .dbg_name = "gcc_blsp2_qup6_i2c_apps_clk",
1804 .ops = &clk_ops_branch,
1805 CLK_INIT(gcc_blsp2_qup6_i2c_apps_clk.c),
1806 },
1807};
1808
1809static struct branch_clk gcc_blsp2_qup6_spi_apps_clk = {
1810 .cbcr_reg = BLSP2_QUP6_SPI_APPS_CBCR,
1811 .parent = &blsp2_qup6_spi_apps_clk_src.c,
1812 .bcr_reg = BLSP2_QUP6_BCR,
1813 .base = &virt_bases[GCC_BASE],
1814 .c = {
1815 .dbg_name = "gcc_blsp2_qup6_spi_apps_clk",
1816 .ops = &clk_ops_branch,
1817 CLK_INIT(gcc_blsp2_qup6_spi_apps_clk.c),
1818 },
1819};
1820
1821static struct branch_clk gcc_blsp2_uart1_apps_clk = {
1822 .cbcr_reg = BLSP2_UART1_APPS_CBCR,
1823 .parent = &blsp2_uart1_apps_clk_src.c,
1824 .bcr_reg = BLSP2_UART1_BCR,
1825 .base = &virt_bases[GCC_BASE],
1826 .c = {
1827 .dbg_name = "gcc_blsp2_uart1_apps_clk",
1828 .ops = &clk_ops_branch,
1829 CLK_INIT(gcc_blsp2_uart1_apps_clk.c),
1830 },
1831};
1832
1833static struct branch_clk gcc_blsp2_uart2_apps_clk = {
1834 .cbcr_reg = BLSP2_UART2_APPS_CBCR,
1835 .parent = &blsp2_uart2_apps_clk_src.c,
1836 .bcr_reg = BLSP2_UART2_BCR,
1837 .base = &virt_bases[GCC_BASE],
1838 .c = {
1839 .dbg_name = "gcc_blsp2_uart2_apps_clk",
1840 .ops = &clk_ops_branch,
1841 CLK_INIT(gcc_blsp2_uart2_apps_clk.c),
1842 },
1843};
1844
1845static struct branch_clk gcc_blsp2_uart3_apps_clk = {
1846 .cbcr_reg = BLSP2_UART3_APPS_CBCR,
1847 .parent = &blsp2_uart3_apps_clk_src.c,
1848 .bcr_reg = BLSP2_UART3_BCR,
1849 .base = &virt_bases[GCC_BASE],
1850 .c = {
1851 .dbg_name = "gcc_blsp2_uart3_apps_clk",
1852 .ops = &clk_ops_branch,
1853 CLK_INIT(gcc_blsp2_uart3_apps_clk.c),
1854 },
1855};
1856
1857static struct branch_clk gcc_blsp2_uart4_apps_clk = {
1858 .cbcr_reg = BLSP2_UART4_APPS_CBCR,
1859 .parent = &blsp2_uart4_apps_clk_src.c,
1860 .bcr_reg = BLSP2_UART4_BCR,
1861 .base = &virt_bases[GCC_BASE],
1862 .c = {
1863 .dbg_name = "gcc_blsp2_uart4_apps_clk",
1864 .ops = &clk_ops_branch,
1865 CLK_INIT(gcc_blsp2_uart4_apps_clk.c),
1866 },
1867};
1868
1869static struct branch_clk gcc_blsp2_uart5_apps_clk = {
1870 .cbcr_reg = BLSP2_UART5_APPS_CBCR,
1871 .parent = &blsp2_uart5_apps_clk_src.c,
1872 .bcr_reg = BLSP2_UART5_BCR,
1873 .base = &virt_bases[GCC_BASE],
1874 .c = {
1875 .dbg_name = "gcc_blsp2_uart5_apps_clk",
1876 .ops = &clk_ops_branch,
1877 CLK_INIT(gcc_blsp2_uart5_apps_clk.c),
1878 },
1879};
1880
1881static struct branch_clk gcc_blsp2_uart6_apps_clk = {
1882 .cbcr_reg = BLSP2_UART6_APPS_CBCR,
1883 .parent = &blsp2_uart6_apps_clk_src.c,
1884 .bcr_reg = BLSP2_UART6_BCR,
1885 .base = &virt_bases[GCC_BASE],
1886 .c = {
1887 .dbg_name = "gcc_blsp2_uart6_apps_clk",
1888 .ops = &clk_ops_branch,
1889 CLK_INIT(gcc_blsp2_uart6_apps_clk.c),
1890 },
1891};
1892
1893static struct local_vote_clk gcc_ce1_clk = {
1894 .cbcr_reg = CE1_CBCR,
1895 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
1896 .en_mask = BIT(5),
1897 .bcr_reg = CE1_BCR,
1898 .base = &virt_bases[GCC_BASE],
1899 .c = {
1900 .dbg_name = "gcc_ce1_clk",
1901 .ops = &clk_ops_vote,
1902 CLK_INIT(gcc_ce1_clk.c),
1903 },
1904};
1905
1906static struct local_vote_clk gcc_ce1_ahb_clk = {
1907 .cbcr_reg = CE1_AHB_CBCR,
1908 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
1909 .en_mask = BIT(3),
1910 .bcr_reg = CE1_BCR,
1911 .base = &virt_bases[GCC_BASE],
1912 .c = {
1913 .dbg_name = "gcc_ce1_ahb_clk",
1914 .ops = &clk_ops_vote,
1915 CLK_INIT(gcc_ce1_ahb_clk.c),
1916 },
1917};
1918
1919static struct local_vote_clk gcc_ce1_axi_clk = {
1920 .cbcr_reg = CE1_AXI_CBCR,
1921 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
1922 .en_mask = BIT(4),
1923 .bcr_reg = CE1_BCR,
1924 .base = &virt_bases[GCC_BASE],
1925 .c = {
1926 .dbg_name = "gcc_ce1_axi_clk",
1927 .ops = &clk_ops_vote,
1928 CLK_INIT(gcc_ce1_axi_clk.c),
1929 },
1930};
1931
1932static struct local_vote_clk gcc_ce2_clk = {
1933 .cbcr_reg = CE2_CBCR,
1934 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
1935 .en_mask = BIT(2),
1936 .bcr_reg = CE2_BCR,
1937 .base = &virt_bases[GCC_BASE],
1938 .c = {
1939 .dbg_name = "gcc_ce2_clk",
1940 .ops = &clk_ops_vote,
1941 CLK_INIT(gcc_ce2_clk.c),
1942 },
1943};
1944
1945static struct local_vote_clk gcc_ce2_ahb_clk = {
1946 .cbcr_reg = CE2_AHB_CBCR,
1947 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
1948 .en_mask = BIT(0),
1949 .bcr_reg = CE2_BCR,
1950 .base = &virt_bases[GCC_BASE],
1951 .c = {
1952 .dbg_name = "gcc_ce1_ahb_clk",
1953 .ops = &clk_ops_vote,
1954 CLK_INIT(gcc_ce1_ahb_clk.c),
1955 },
1956};
1957
1958static struct local_vote_clk gcc_ce2_axi_clk = {
1959 .cbcr_reg = CE2_AXI_CBCR,
1960 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
1961 .en_mask = BIT(1),
1962 .bcr_reg = CE2_BCR,
1963 .base = &virt_bases[GCC_BASE],
1964 .c = {
1965 .dbg_name = "gcc_ce1_axi_clk",
1966 .ops = &clk_ops_vote,
1967 CLK_INIT(gcc_ce2_axi_clk.c),
1968 },
1969};
1970
1971static struct branch_clk gcc_gp1_clk = {
1972 .cbcr_reg = GP1_CBCR,
1973 .parent = &gp1_clk_src.c,
1974 .base = &virt_bases[GCC_BASE],
1975 .c = {
1976 .dbg_name = "gcc_gp1_clk",
1977 .ops = &clk_ops_branch,
1978 CLK_INIT(gcc_gp1_clk.c),
1979 },
1980};
1981
1982static struct branch_clk gcc_gp2_clk = {
1983 .cbcr_reg = GP2_CBCR,
1984 .parent = &gp2_clk_src.c,
1985 .base = &virt_bases[GCC_BASE],
1986 .c = {
1987 .dbg_name = "gcc_gp2_clk",
1988 .ops = &clk_ops_branch,
1989 CLK_INIT(gcc_gp2_clk.c),
1990 },
1991};
1992
1993static struct branch_clk gcc_gp3_clk = {
1994 .cbcr_reg = GP3_CBCR,
1995 .parent = &gp3_clk_src.c,
1996 .base = &virt_bases[GCC_BASE],
1997 .c = {
1998 .dbg_name = "gcc_gp3_clk",
1999 .ops = &clk_ops_branch,
2000 CLK_INIT(gcc_gp3_clk.c),
2001 },
2002};
2003
2004static struct branch_clk gcc_pdm2_clk = {
2005 .cbcr_reg = PDM2_CBCR,
2006 .parent = &pdm2_clk_src.c,
2007 .bcr_reg = PDM_BCR,
2008 .base = &virt_bases[GCC_BASE],
2009 .c = {
2010 .dbg_name = "gcc_pdm2_clk",
2011 .ops = &clk_ops_branch,
2012 CLK_INIT(gcc_pdm2_clk.c),
2013 },
2014};
2015
2016static struct branch_clk gcc_pdm_ahb_clk = {
2017 .cbcr_reg = PDM_AHB_CBCR,
2018 .has_sibling = 1,
2019 .bcr_reg = PDM_BCR,
2020 .base = &virt_bases[GCC_BASE],
2021 .c = {
2022 .dbg_name = "gcc_pdm_ahb_clk",
2023 .ops = &clk_ops_branch,
2024 CLK_INIT(gcc_pdm_ahb_clk.c),
2025 },
2026};
2027
2028static struct local_vote_clk gcc_prng_ahb_clk = {
2029 .cbcr_reg = PRNG_AHB_CBCR,
2030 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
2031 .en_mask = BIT(13),
2032 .bcr_reg = PRNG_BCR,
2033 .base = &virt_bases[GCC_BASE],
2034 .c = {
2035 .dbg_name = "gcc_prng_ahb_clk",
2036 .ops = &clk_ops_vote,
2037 CLK_INIT(gcc_prng_ahb_clk.c),
2038 },
2039};
2040
2041static struct branch_clk gcc_sdcc1_ahb_clk = {
2042 .cbcr_reg = SDCC1_AHB_CBCR,
2043 .has_sibling = 1,
2044 .bcr_reg = SDCC1_BCR,
2045 .base = &virt_bases[GCC_BASE],
2046 .c = {
2047 .dbg_name = "gcc_sdcc1_ahb_clk",
2048 .ops = &clk_ops_branch,
2049 CLK_INIT(gcc_sdcc1_ahb_clk.c),
2050 },
2051};
2052
2053static struct branch_clk gcc_sdcc1_apps_clk = {
2054 .cbcr_reg = SDCC1_APPS_CBCR,
2055 .parent = &sdcc1_apps_clk_src.c,
2056 .bcr_reg = SDCC1_BCR,
2057 .base = &virt_bases[GCC_BASE],
2058 .c = {
2059 .dbg_name = "gcc_sdcc1_apps_clk",
2060 .ops = &clk_ops_branch,
2061 CLK_INIT(gcc_sdcc1_apps_clk.c),
2062 },
2063};
2064
2065static struct branch_clk gcc_sdcc2_ahb_clk = {
2066 .cbcr_reg = SDCC2_AHB_CBCR,
2067 .has_sibling = 1,
2068 .bcr_reg = SDCC2_BCR,
2069 .base = &virt_bases[GCC_BASE],
2070 .c = {
2071 .dbg_name = "gcc_sdcc2_ahb_clk",
2072 .ops = &clk_ops_branch,
2073 CLK_INIT(gcc_sdcc2_ahb_clk.c),
2074 },
2075};
2076
2077static struct branch_clk gcc_sdcc2_apps_clk = {
2078 .cbcr_reg = SDCC2_APPS_CBCR,
2079 .parent = &sdcc2_apps_clk_src.c,
2080 .bcr_reg = SDCC2_BCR,
2081 .base = &virt_bases[GCC_BASE],
2082 .c = {
2083 .dbg_name = "gcc_sdcc2_apps_clk",
2084 .ops = &clk_ops_branch,
2085 CLK_INIT(gcc_sdcc2_apps_clk.c),
2086 },
2087};
2088
2089static struct branch_clk gcc_sdcc3_ahb_clk = {
2090 .cbcr_reg = SDCC3_AHB_CBCR,
2091 .has_sibling = 1,
2092 .bcr_reg = SDCC3_BCR,
2093 .base = &virt_bases[GCC_BASE],
2094 .c = {
2095 .dbg_name = "gcc_sdcc3_ahb_clk",
2096 .ops = &clk_ops_branch,
2097 CLK_INIT(gcc_sdcc3_ahb_clk.c),
2098 },
2099};
2100
2101static struct branch_clk gcc_sdcc3_apps_clk = {
2102 .cbcr_reg = SDCC3_APPS_CBCR,
2103 .parent = &sdcc3_apps_clk_src.c,
2104 .bcr_reg = SDCC3_BCR,
2105 .base = &virt_bases[GCC_BASE],
2106 .c = {
2107 .dbg_name = "gcc_sdcc3_apps_clk",
2108 .ops = &clk_ops_branch,
2109 CLK_INIT(gcc_sdcc3_apps_clk.c),
2110 },
2111};
2112
2113static struct branch_clk gcc_sdcc4_ahb_clk = {
2114 .cbcr_reg = SDCC4_AHB_CBCR,
2115 .has_sibling = 1,
2116 .bcr_reg = SDCC4_BCR,
2117 .base = &virt_bases[GCC_BASE],
2118 .c = {
2119 .dbg_name = "gcc_sdcc4_ahb_clk",
2120 .ops = &clk_ops_branch,
2121 CLK_INIT(gcc_sdcc4_ahb_clk.c),
2122 },
2123};
2124
2125static struct branch_clk gcc_sdcc4_apps_clk = {
2126 .cbcr_reg = SDCC4_APPS_CBCR,
2127 .parent = &sdcc4_apps_clk_src.c,
2128 .bcr_reg = SDCC4_BCR,
2129 .base = &virt_bases[GCC_BASE],
2130 .c = {
2131 .dbg_name = "gcc_sdcc4_apps_clk",
2132 .ops = &clk_ops_branch,
2133 CLK_INIT(gcc_sdcc4_apps_clk.c),
2134 },
2135};
2136
2137static struct branch_clk gcc_tsif_ahb_clk = {
2138 .cbcr_reg = TSIF_AHB_CBCR,
2139 .has_sibling = 1,
2140 .bcr_reg = TSIF_BCR,
2141 .base = &virt_bases[GCC_BASE],
2142 .c = {
2143 .dbg_name = "gcc_tsif_ahb_clk",
2144 .ops = &clk_ops_branch,
2145 CLK_INIT(gcc_tsif_ahb_clk.c),
2146 },
2147};
2148
2149static struct branch_clk gcc_tsif_ref_clk = {
2150 .cbcr_reg = TSIF_REF_CBCR,
2151 .parent = &tsif_ref_clk_src.c,
2152 .bcr_reg = TSIF_BCR,
2153 .base = &virt_bases[GCC_BASE],
2154 .c = {
2155 .dbg_name = "gcc_tsif_ref_clk",
2156 .ops = &clk_ops_branch,
2157 CLK_INIT(gcc_tsif_ref_clk.c),
2158 },
2159};
2160
2161static struct branch_clk gcc_usb30_master_clk = {
2162 .cbcr_reg = USB30_MASTER_CBCR,
2163 .parent = &usb30_master_clk_src.c,
2164 .has_sibling = 1,
2165 .bcr_reg = USB_30_BCR,
2166 .base = &virt_bases[GCC_BASE],
2167 .c = {
2168 .dbg_name = "gcc_usb30_master_clk",
2169 .ops = &clk_ops_branch,
2170 CLK_INIT(gcc_usb30_master_clk.c),
2171 },
2172};
2173
2174static struct branch_clk gcc_usb30_mock_utmi_clk = {
2175 .cbcr_reg = USB30_MOCK_UTMI_CBCR,
2176 .parent = &usb30_mock_utmi_clk_src.c,
2177 .bcr_reg = USB_30_BCR,
2178 .base = &virt_bases[GCC_BASE],
2179 .c = {
2180 .dbg_name = "gcc_usb30_mock_utmi_clk",
2181 .ops = &clk_ops_branch,
2182 CLK_INIT(gcc_usb30_mock_utmi_clk.c),
2183 },
2184};
2185
2186static struct branch_clk gcc_usb_hs_ahb_clk = {
2187 .cbcr_reg = USB_HS_AHB_CBCR,
2188 .has_sibling = 1,
2189 .bcr_reg = USB_HS_BCR,
2190 .base = &virt_bases[GCC_BASE],
2191 .c = {
2192 .dbg_name = "gcc_usb_hs_ahb_clk",
2193 .ops = &clk_ops_branch,
2194 CLK_INIT(gcc_usb_hs_ahb_clk.c),
2195 },
2196};
2197
2198static struct branch_clk gcc_usb_hs_system_clk = {
2199 .cbcr_reg = USB_HS_SYSTEM_CBCR,
2200 .parent = &usb_hs_system_clk_src.c,
2201 .bcr_reg = USB_HS_BCR,
2202 .base = &virt_bases[GCC_BASE],
2203 .c = {
2204 .dbg_name = "gcc_usb_hs_system_clk",
2205 .ops = &clk_ops_branch,
2206 CLK_INIT(gcc_usb_hs_system_clk.c),
2207 },
2208};
2209
2210static struct branch_clk gcc_usb_hsic_ahb_clk = {
2211 .cbcr_reg = USB_HSIC_AHB_CBCR,
2212 .has_sibling = 1,
2213 .bcr_reg = USB_HS_HSIC_BCR,
2214 .base = &virt_bases[GCC_BASE],
2215 .c = {
2216 .dbg_name = "gcc_usb_hsic_ahb_clk",
2217 .ops = &clk_ops_branch,
2218 CLK_INIT(gcc_usb_hsic_ahb_clk.c),
2219 },
2220};
2221
2222static struct branch_clk gcc_usb_hsic_clk = {
2223 .cbcr_reg = USB_HSIC_CBCR,
2224 .parent = &usb_hsic_clk_src.c,
2225 .bcr_reg = USB_HS_HSIC_BCR,
2226 .base = &virt_bases[GCC_BASE],
2227 .c = {
2228 .dbg_name = "gcc_usb_hsic_clk",
2229 .ops = &clk_ops_branch,
2230 CLK_INIT(gcc_usb_hsic_clk.c),
2231 },
2232};
2233
2234static struct branch_clk gcc_usb_hsic_io_cal_clk = {
2235 .cbcr_reg = USB_HSIC_IO_CAL_CBCR,
2236 .parent = &usb_hsic_io_cal_clk_src.c,
2237 .bcr_reg = USB_HS_HSIC_BCR,
2238 .base = &virt_bases[GCC_BASE],
2239 .c = {
2240 .dbg_name = "gcc_usb_hsic_io_cal_clk",
2241 .ops = &clk_ops_branch,
2242 CLK_INIT(gcc_usb_hsic_io_cal_clk.c),
2243 },
2244};
2245
2246static struct branch_clk gcc_usb_hsic_system_clk = {
2247 .cbcr_reg = USB_HSIC_SYSTEM_CBCR,
2248 .parent = &usb_hsic_system_clk_src.c,
2249 .bcr_reg = USB_HS_HSIC_BCR,
2250 .base = &virt_bases[GCC_BASE],
2251 .c = {
2252 .dbg_name = "gcc_usb_hsic_system_clk",
2253 .ops = &clk_ops_branch,
2254 CLK_INIT(gcc_usb_hsic_system_clk.c),
2255 },
2256};
2257
Vikram Mulukutlaa967db42012-05-10 16:20:40 -07002258static struct branch_clk gcc_mss_cfg_ahb_clk = {
2259 .cbcr_reg = MSS_CFG_AHB_CBCR,
2260 .has_sibling = 1,
2261 .base = &virt_bases[GCC_BASE],
2262 .c = {
2263 .dbg_name = "gcc_mss_cfg_ahb_clk",
2264 .ops = &clk_ops_branch,
2265 CLK_INIT(gcc_mss_cfg_ahb_clk.c),
2266 },
2267};
2268
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002269static struct clk_freq_tbl ftbl_mmss_ahb_clk[] = {
2270 F_MM(19200000, cxo, 1, 0, 0),
2271 F_MM(40000000, gpll0, 15, 0, 0),
2272 F_MM(80000000, mmpll0, 10, 0, 0),
2273 F_END,
2274};
2275
2276/* TODO: This may go away (may be controlled by the RPM). */
2277static struct rcg_clk ahb_clk_src = {
2278 .cmd_rcgr_reg = 0x5000,
2279 .set_rate = set_rate_hid,
2280 .freq_tbl = ftbl_mmss_ahb_clk,
2281 .current_freq = &rcg_dummy_freq,
2282 .base = &virt_bases[MMSS_BASE],
2283 .c = {
2284 .dbg_name = "ahb_clk_src",
2285 .ops = &clk_ops_rcg,
2286 VDD_DIG_FMAX_MAP2(LOW, 40000000, NOMINAL, 80000000),
2287 CLK_INIT(ahb_clk_src.c),
2288 },
2289};
2290
2291static struct clk_freq_tbl ftbl_mmss_axi_clk[] = {
2292 F_MM( 19200000, cxo, 1, 0, 0),
2293 F_MM(150000000, gpll0, 4, 0, 0),
2294 F_MM(333330000, mmpll1, 3, 0, 0),
2295 F_MM(400000000, mmpll0, 2, 0, 0),
2296 F_END
2297};
2298
2299static struct rcg_clk axi_clk_src = {
2300 .cmd_rcgr_reg = 0x5040,
2301 .set_rate = set_rate_hid,
2302 .freq_tbl = ftbl_mmss_axi_clk,
2303 .current_freq = &rcg_dummy_freq,
2304 .base = &virt_bases[MMSS_BASE],
2305 .c = {
2306 .dbg_name = "axi_clk_src",
2307 .ops = &clk_ops_rcg,
2308 VDD_DIG_FMAX_MAP3(LOW, 150000000, NOMINAL, 333330000,
2309 HIGH, 400000000),
2310 CLK_INIT(axi_clk_src.c),
2311 },
2312};
2313
2314static struct clk_freq_tbl ftbl_camss_csi0_3_clk[] = {
2315 F_MM(100000000, gpll0, 6, 0, 0),
2316 F_MM(200000000, mmpll0, 4, 0, 0),
2317 F_END
2318};
2319
2320static struct rcg_clk csi0_clk_src = {
2321 .cmd_rcgr_reg = CSI0_CMD_RCGR,
2322 .set_rate = set_rate_hid,
2323 .freq_tbl = ftbl_camss_csi0_3_clk,
2324 .current_freq = &rcg_dummy_freq,
2325 .base = &virt_bases[MMSS_BASE],
2326 .c = {
2327 .dbg_name = "csi0_clk_src",
2328 .ops = &clk_ops_rcg,
2329 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
2330 CLK_INIT(csi0_clk_src.c),
2331 },
2332};
2333
2334static struct rcg_clk csi1_clk_src = {
2335 .cmd_rcgr_reg = CSI1_CMD_RCGR,
2336 .set_rate = set_rate_hid,
2337 .freq_tbl = ftbl_camss_csi0_3_clk,
2338 .current_freq = &rcg_dummy_freq,
2339 .base = &virt_bases[MMSS_BASE],
2340 .c = {
2341 .dbg_name = "csi1_clk_src",
2342 .ops = &clk_ops_rcg,
2343 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
2344 CLK_INIT(csi1_clk_src.c),
2345 },
2346};
2347
2348static struct rcg_clk csi2_clk_src = {
2349 .cmd_rcgr_reg = CSI2_CMD_RCGR,
2350 .set_rate = set_rate_hid,
2351 .freq_tbl = ftbl_camss_csi0_3_clk,
2352 .current_freq = &rcg_dummy_freq,
2353 .base = &virt_bases[MMSS_BASE],
2354 .c = {
2355 .dbg_name = "csi2_clk_src",
2356 .ops = &clk_ops_rcg,
2357 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
2358 CLK_INIT(csi2_clk_src.c),
2359 },
2360};
2361
2362static struct rcg_clk csi3_clk_src = {
2363 .cmd_rcgr_reg = CSI3_CMD_RCGR,
2364 .set_rate = set_rate_hid,
2365 .freq_tbl = ftbl_camss_csi0_3_clk,
2366 .current_freq = &rcg_dummy_freq,
2367 .base = &virt_bases[MMSS_BASE],
2368 .c = {
2369 .dbg_name = "csi3_clk_src",
2370 .ops = &clk_ops_rcg,
2371 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
2372 CLK_INIT(csi3_clk_src.c),
2373 },
2374};
2375
2376static struct clk_freq_tbl ftbl_camss_vfe_vfe0_1_clk[] = {
2377 F_MM( 37500000, gpll0, 16, 0, 0),
2378 F_MM( 50000000, gpll0, 12, 0, 0),
2379 F_MM( 60000000, gpll0, 10, 0, 0),
2380 F_MM( 80000000, gpll0, 7.5, 0, 0),
2381 F_MM(100000000, gpll0, 6, 0, 0),
2382 F_MM(109090000, gpll0, 5.5, 0, 0),
2383 F_MM(150000000, gpll0, 4, 0, 0),
2384 F_MM(200000000, gpll0, 3, 0, 0),
2385 F_MM(228570000, mmpll0, 3.5, 0, 0),
2386 F_MM(266670000, mmpll0, 3, 0, 0),
2387 F_MM(320000000, mmpll0, 2.5, 0, 0),
2388 F_END
2389};
2390
2391static struct rcg_clk vfe0_clk_src = {
2392 .cmd_rcgr_reg = VFE0_CMD_RCGR,
2393 .set_rate = set_rate_hid,
2394 .freq_tbl = ftbl_camss_vfe_vfe0_1_clk,
2395 .current_freq = &rcg_dummy_freq,
2396 .base = &virt_bases[MMSS_BASE],
2397 .c = {
2398 .dbg_name = "vfe0_clk_src",
2399 .ops = &clk_ops_rcg,
2400 VDD_DIG_FMAX_MAP3(LOW, 133330000, NOMINAL, 266670000,
2401 HIGH, 320000000),
2402 CLK_INIT(vfe0_clk_src.c),
2403 },
2404};
2405
2406static struct rcg_clk vfe1_clk_src = {
2407 .cmd_rcgr_reg = VFE1_CMD_RCGR,
2408 .set_rate = set_rate_hid,
2409 .freq_tbl = ftbl_camss_vfe_vfe0_1_clk,
2410 .current_freq = &rcg_dummy_freq,
2411 .base = &virt_bases[MMSS_BASE],
2412 .c = {
2413 .dbg_name = "vfe1_clk_src",
2414 .ops = &clk_ops_rcg,
2415 VDD_DIG_FMAX_MAP3(LOW, 133330000, NOMINAL, 266670000,
2416 HIGH, 320000000),
2417 CLK_INIT(vfe1_clk_src.c),
2418 },
2419};
2420
2421static struct clk_freq_tbl ftbl_mdss_mdp_clk[] = {
2422 F_MM( 37500000, gpll0, 16, 0, 0),
2423 F_MM( 60000000, gpll0, 10, 0, 0),
2424 F_MM( 75000000, gpll0, 8, 0, 0),
2425 F_MM( 85710000, gpll0, 7, 0, 0),
2426 F_MM(100000000, gpll0, 6, 0, 0),
2427 F_MM(133330000, mmpll0, 6, 0, 0),
2428 F_MM(160000000, mmpll0, 5, 0, 0),
2429 F_MM(200000000, mmpll0, 4, 0, 0),
2430 F_MM(266670000, mmpll0, 3, 0, 0),
2431 F_MM(320000000, mmpll0, 2.5, 0, 0),
2432 F_END
2433};
2434
2435static struct rcg_clk mdp_clk_src = {
2436 .cmd_rcgr_reg = MDP_CMD_RCGR,
2437 .set_rate = set_rate_hid,
2438 .freq_tbl = ftbl_mdss_mdp_clk,
2439 .current_freq = &rcg_dummy_freq,
2440 .base = &virt_bases[MMSS_BASE],
2441 .c = {
2442 .dbg_name = "mdp_clk_src",
2443 .ops = &clk_ops_rcg,
2444 VDD_DIG_FMAX_MAP3(LOW, 133330000, NOMINAL, 266670000,
2445 HIGH, 320000000),
2446 CLK_INIT(mdp_clk_src.c),
2447 },
2448};
2449
2450static struct clk_freq_tbl ftbl_camss_cci_cci_clk[] = {
2451 F_MM(19200000, cxo, 1, 0, 0),
2452 F_END
2453};
2454
2455static struct rcg_clk cci_clk_src = {
2456 .cmd_rcgr_reg = CCI_CMD_RCGR,
2457 .set_rate = set_rate_hid,
2458 .freq_tbl = ftbl_camss_cci_cci_clk,
2459 .current_freq = &rcg_dummy_freq,
2460 .base = &virt_bases[MMSS_BASE],
2461 .c = {
2462 .dbg_name = "cci_clk_src",
2463 .ops = &clk_ops_rcg,
2464 VDD_DIG_FMAX_MAP2(LOW, 20000000, NOMINAL, 40000000),
2465 CLK_INIT(cci_clk_src.c),
2466 },
2467};
2468
2469static struct clk_freq_tbl ftbl_camss_gp0_1_clk[] = {
2470 F_MM( 10000, cxo, 16, 1, 120),
2471 F_MM( 20000, cxo, 16, 1, 50),
2472 F_MM( 6000000, gpll0, 10, 1, 10),
2473 F_MM(12000000, gpll0, 10, 1, 5),
2474 F_MM(13000000, gpll0, 10, 13, 60),
2475 F_MM(24000000, gpll0, 5, 1, 5),
2476 F_END
2477};
2478
2479static struct rcg_clk mmss_gp0_clk_src = {
2480 .cmd_rcgr_reg = MMSS_GP0_CMD_RCGR,
2481 .set_rate = set_rate_mnd,
2482 .freq_tbl = ftbl_camss_gp0_1_clk,
2483 .current_freq = &rcg_dummy_freq,
2484 .base = &virt_bases[MMSS_BASE],
2485 .c = {
2486 .dbg_name = "mmss_gp0_clk_src",
2487 .ops = &clk_ops_rcg_mnd,
2488 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
2489 CLK_INIT(mmss_gp0_clk_src.c),
2490 },
2491};
2492
2493static struct rcg_clk mmss_gp1_clk_src = {
2494 .cmd_rcgr_reg = MMSS_GP1_CMD_RCGR,
2495 .set_rate = set_rate_mnd,
2496 .freq_tbl = ftbl_camss_gp0_1_clk,
2497 .current_freq = &rcg_dummy_freq,
2498 .base = &virt_bases[MMSS_BASE],
2499 .c = {
2500 .dbg_name = "mmss_gp1_clk_src",
2501 .ops = &clk_ops_rcg_mnd,
2502 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
2503 CLK_INIT(mmss_gp1_clk_src.c),
2504 },
2505};
2506
2507static struct clk_freq_tbl ftbl_camss_jpeg_jpeg0_2_clk[] = {
2508 F_MM( 75000000, gpll0, 8, 0, 0),
2509 F_MM(150000000, gpll0, 4, 0, 0),
2510 F_MM(200000000, gpll0, 3, 0, 0),
2511 F_MM(228570000, mmpll0, 3.5, 0, 0),
2512 F_MM(266670000, mmpll0, 3, 0, 0),
2513 F_MM(320000000, mmpll0, 2.5, 0, 0),
2514 F_END
2515};
2516
2517static struct rcg_clk jpeg0_clk_src = {
2518 .cmd_rcgr_reg = JPEG0_CMD_RCGR,
2519 .set_rate = set_rate_hid,
2520 .freq_tbl = ftbl_camss_jpeg_jpeg0_2_clk,
2521 .current_freq = &rcg_dummy_freq,
2522 .base = &virt_bases[MMSS_BASE],
2523 .c = {
2524 .dbg_name = "jpeg0_clk_src",
2525 .ops = &clk_ops_rcg,
2526 VDD_DIG_FMAX_MAP3(LOW, 133330000, NOMINAL, 266670000,
2527 HIGH, 320000000),
2528 CLK_INIT(jpeg0_clk_src.c),
2529 },
2530};
2531
2532static struct rcg_clk jpeg1_clk_src = {
2533 .cmd_rcgr_reg = JPEG1_CMD_RCGR,
2534 .set_rate = set_rate_hid,
2535 .freq_tbl = ftbl_camss_jpeg_jpeg0_2_clk,
2536 .current_freq = &rcg_dummy_freq,
2537 .base = &virt_bases[MMSS_BASE],
2538 .c = {
2539 .dbg_name = "jpeg1_clk_src",
2540 .ops = &clk_ops_rcg,
2541 VDD_DIG_FMAX_MAP3(LOW, 133330000, NOMINAL, 266670000,
2542 HIGH, 320000000),
2543 CLK_INIT(jpeg1_clk_src.c),
2544 },
2545};
2546
2547static struct rcg_clk jpeg2_clk_src = {
2548 .cmd_rcgr_reg = JPEG2_CMD_RCGR,
2549 .set_rate = set_rate_hid,
2550 .freq_tbl = ftbl_camss_jpeg_jpeg0_2_clk,
2551 .current_freq = &rcg_dummy_freq,
2552 .base = &virt_bases[MMSS_BASE],
2553 .c = {
2554 .dbg_name = "jpeg2_clk_src",
2555 .ops = &clk_ops_rcg,
2556 VDD_DIG_FMAX_MAP3(LOW, 133330000, NOMINAL, 266670000,
2557 HIGH, 320000000),
2558 CLK_INIT(jpeg2_clk_src.c),
2559 },
2560};
2561
2562static struct clk_freq_tbl ftbl_camss_mclk0_3_clk[] = {
2563 F_MM(66670000, gpll0, 9, 0, 0),
2564 F_END
2565};
2566
2567static struct rcg_clk mclk0_clk_src = {
2568 .cmd_rcgr_reg = MCLK0_CMD_RCGR,
2569 .set_rate = set_rate_hid,
2570 .freq_tbl = ftbl_camss_mclk0_3_clk,
2571 .current_freq = &rcg_dummy_freq,
2572 .base = &virt_bases[MMSS_BASE],
2573 .c = {
2574 .dbg_name = "mclk0_clk_src",
2575 .ops = &clk_ops_rcg,
2576 VDD_DIG_FMAX_MAP1(LOW, 66670000),
2577 CLK_INIT(mclk0_clk_src.c),
2578 },
2579};
2580
2581static struct rcg_clk mclk1_clk_src = {
2582 .cmd_rcgr_reg = MCLK1_CMD_RCGR,
2583 .set_rate = set_rate_hid,
2584 .freq_tbl = ftbl_camss_mclk0_3_clk,
2585 .current_freq = &rcg_dummy_freq,
2586 .base = &virt_bases[MMSS_BASE],
2587 .c = {
2588 .dbg_name = "mclk1_clk_src",
2589 .ops = &clk_ops_rcg,
2590 VDD_DIG_FMAX_MAP1(LOW, 66670000),
2591 CLK_INIT(mclk1_clk_src.c),
2592 },
2593};
2594
2595static struct rcg_clk mclk2_clk_src = {
2596 .cmd_rcgr_reg = MCLK2_CMD_RCGR,
2597 .set_rate = set_rate_hid,
2598 .freq_tbl = ftbl_camss_mclk0_3_clk,
2599 .current_freq = &rcg_dummy_freq,
2600 .base = &virt_bases[MMSS_BASE],
2601 .c = {
2602 .dbg_name = "mclk2_clk_src",
2603 .ops = &clk_ops_rcg,
2604 VDD_DIG_FMAX_MAP1(LOW, 66670000),
2605 CLK_INIT(mclk2_clk_src.c),
2606 },
2607};
2608
2609static struct rcg_clk mclk3_clk_src = {
2610 .cmd_rcgr_reg = MCLK3_CMD_RCGR,
2611 .set_rate = set_rate_hid,
2612 .freq_tbl = ftbl_camss_mclk0_3_clk,
2613 .current_freq = &rcg_dummy_freq,
2614 .base = &virt_bases[MMSS_BASE],
2615 .c = {
2616 .dbg_name = "mclk3_clk_src",
2617 .ops = &clk_ops_rcg,
2618 VDD_DIG_FMAX_MAP1(LOW, 66670000),
2619 CLK_INIT(mclk3_clk_src.c),
2620 },
2621};
2622
2623static struct clk_freq_tbl ftbl_camss_phy0_2_csi0_2phytimer_clk[] = {
2624 F_MM(100000000, gpll0, 6, 0, 0),
2625 F_MM(200000000, mmpll0, 4, 0, 0),
2626 F_END
2627};
2628
2629static struct rcg_clk csi0phytimer_clk_src = {
2630 .cmd_rcgr_reg = CSI0PHYTIMER_CMD_RCGR,
2631 .set_rate = set_rate_hid,
2632 .freq_tbl = ftbl_camss_phy0_2_csi0_2phytimer_clk,
2633 .current_freq = &rcg_dummy_freq,
2634 .base = &virt_bases[MMSS_BASE],
2635 .c = {
2636 .dbg_name = "csi0phytimer_clk_src",
2637 .ops = &clk_ops_rcg,
2638 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
2639 CLK_INIT(csi0phytimer_clk_src.c),
2640 },
2641};
2642
2643static struct rcg_clk csi1phytimer_clk_src = {
2644 .cmd_rcgr_reg = CSI1PHYTIMER_CMD_RCGR,
2645 .set_rate = set_rate_hid,
2646 .freq_tbl = ftbl_camss_phy0_2_csi0_2phytimer_clk,
2647 .current_freq = &rcg_dummy_freq,
2648 .base = &virt_bases[MMSS_BASE],
2649 .c = {
2650 .dbg_name = "csi1phytimer_clk_src",
2651 .ops = &clk_ops_rcg,
2652 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
2653 CLK_INIT(csi1phytimer_clk_src.c),
2654 },
2655};
2656
2657static struct rcg_clk csi2phytimer_clk_src = {
2658 .cmd_rcgr_reg = CSI2PHYTIMER_CMD_RCGR,
2659 .set_rate = set_rate_hid,
2660 .freq_tbl = ftbl_camss_phy0_2_csi0_2phytimer_clk,
2661 .current_freq = &rcg_dummy_freq,
2662 .base = &virt_bases[MMSS_BASE],
2663 .c = {
2664 .dbg_name = "csi2phytimer_clk_src",
2665 .ops = &clk_ops_rcg,
2666 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
2667 CLK_INIT(csi2phytimer_clk_src.c),
2668 },
2669};
2670
2671static struct clk_freq_tbl ftbl_camss_vfe_cpp_clk[] = {
2672 F_MM(150000000, gpll0, 4, 0, 0),
2673 F_MM(266670000, mmpll0, 3, 0, 0),
2674 F_MM(320000000, mmpll0, 2.5, 0, 0),
2675 F_END
2676};
2677
2678static struct rcg_clk cpp_clk_src = {
2679 .cmd_rcgr_reg = CPP_CMD_RCGR,
2680 .set_rate = set_rate_hid,
2681 .freq_tbl = ftbl_camss_vfe_cpp_clk,
2682 .current_freq = &rcg_dummy_freq,
2683 .base = &virt_bases[MMSS_BASE],
2684 .c = {
2685 .dbg_name = "cpp_clk_src",
2686 .ops = &clk_ops_rcg,
2687 VDD_DIG_FMAX_MAP3(LOW, 133330000, NOMINAL, 266670000,
2688 HIGH, 320000000),
2689 CLK_INIT(cpp_clk_src.c),
2690 },
2691};
2692
2693static struct clk_freq_tbl ftbl_mdss_byte0_1_clk[] = {
2694 F_MDSS( 93750000, dsipll_750, 8, 0, 0),
2695 F_MDSS(187500000, dsipll_750, 4, 0, 0),
2696 F_END
2697};
2698
2699static struct rcg_clk byte0_clk_src = {
2700 .cmd_rcgr_reg = BYTE0_CMD_RCGR,
2701 .set_rate = set_rate_hid,
2702 .freq_tbl = ftbl_mdss_byte0_1_clk,
2703 .current_freq = &rcg_dummy_freq,
2704 .base = &virt_bases[MMSS_BASE],
2705 .c = {
2706 .dbg_name = "byte0_clk_src",
2707 .ops = &clk_ops_rcg,
2708 VDD_DIG_FMAX_MAP3(LOW, 93800000, NOMINAL, 187500000,
2709 HIGH, 188000000),
2710 CLK_INIT(byte0_clk_src.c),
2711 },
2712};
2713
2714static struct rcg_clk byte1_clk_src = {
2715 .cmd_rcgr_reg = BYTE1_CMD_RCGR,
2716 .set_rate = set_rate_hid,
2717 .freq_tbl = ftbl_mdss_byte0_1_clk,
2718 .current_freq = &rcg_dummy_freq,
2719 .base = &virt_bases[MMSS_BASE],
2720 .c = {
2721 .dbg_name = "byte1_clk_src",
2722 .ops = &clk_ops_rcg,
2723 VDD_DIG_FMAX_MAP3(LOW, 93800000, NOMINAL, 187500000,
2724 HIGH, 188000000),
2725 CLK_INIT(byte1_clk_src.c),
2726 },
2727};
2728
2729static struct clk_freq_tbl ftbl_mdss_edpaux_clk[] = {
2730 F_MM(19200000, cxo, 1, 0, 0),
2731 F_END
2732};
2733
2734static struct rcg_clk edpaux_clk_src = {
2735 .cmd_rcgr_reg = EDPAUX_CMD_RCGR,
2736 .set_rate = set_rate_hid,
2737 .freq_tbl = ftbl_mdss_edpaux_clk,
2738 .current_freq = &rcg_dummy_freq,
2739 .base = &virt_bases[MMSS_BASE],
2740 .c = {
2741 .dbg_name = "edpaux_clk_src",
2742 .ops = &clk_ops_rcg,
2743 VDD_DIG_FMAX_MAP2(LOW, 20000000, NOMINAL, 40000000),
2744 CLK_INIT(edpaux_clk_src.c),
2745 },
2746};
2747
2748static struct clk_freq_tbl ftbl_mdss_edplink_clk[] = {
2749 F_MDSS(135000000, edppll_270, 2, 0, 0),
2750 F_MDSS(270000000, edppll_270, 11, 0, 0),
2751 F_END
2752};
2753
2754static struct rcg_clk edplink_clk_src = {
2755 .cmd_rcgr_reg = EDPLINK_CMD_RCGR,
2756 .set_rate = set_rate_hid,
2757 .freq_tbl = ftbl_mdss_edplink_clk,
2758 .current_freq = &rcg_dummy_freq,
2759 .base = &virt_bases[MMSS_BASE],
2760 .c = {
2761 .dbg_name = "edplink_clk_src",
2762 .ops = &clk_ops_rcg,
2763 VDD_DIG_FMAX_MAP2(LOW, 135000000, NOMINAL, 270000000),
2764 CLK_INIT(edplink_clk_src.c),
2765 },
2766};
2767
2768static struct clk_freq_tbl ftbl_mdss_edppixel_clk[] = {
2769 F_MDSS(175000000, edppll_350, 2, 0, 0),
2770 F_MDSS(350000000, edppll_350, 11, 0, 0),
2771 F_END
2772};
2773
2774static struct rcg_clk edppixel_clk_src = {
2775 .cmd_rcgr_reg = EDPPIXEL_CMD_RCGR,
2776 .set_rate = set_rate_mnd,
2777 .freq_tbl = ftbl_mdss_edppixel_clk,
2778 .current_freq = &rcg_dummy_freq,
2779 .base = &virt_bases[MMSS_BASE],
2780 .c = {
2781 .dbg_name = "edppixel_clk_src",
2782 .ops = &clk_ops_rcg_mnd,
2783 VDD_DIG_FMAX_MAP2(LOW, 175000000, NOMINAL, 350000000),
2784 CLK_INIT(edppixel_clk_src.c),
2785 },
2786};
2787
2788static struct clk_freq_tbl ftbl_mdss_esc0_1_clk[] = {
2789 F_MM(19200000, cxo, 1, 0, 0),
2790 F_END
2791};
2792
2793static struct rcg_clk esc0_clk_src = {
2794 .cmd_rcgr_reg = ESC0_CMD_RCGR,
2795 .set_rate = set_rate_hid,
2796 .freq_tbl = ftbl_mdss_esc0_1_clk,
2797 .current_freq = &rcg_dummy_freq,
2798 .base = &virt_bases[MMSS_BASE],
2799 .c = {
2800 .dbg_name = "esc0_clk_src",
2801 .ops = &clk_ops_rcg,
2802 VDD_DIG_FMAX_MAP2(LOW, 20000000, NOMINAL, 40000000),
2803 CLK_INIT(esc0_clk_src.c),
2804 },
2805};
2806
2807static struct rcg_clk esc1_clk_src = {
2808 .cmd_rcgr_reg = ESC1_CMD_RCGR,
2809 .set_rate = set_rate_hid,
2810 .freq_tbl = ftbl_mdss_esc0_1_clk,
2811 .current_freq = &rcg_dummy_freq,
2812 .base = &virt_bases[MMSS_BASE],
2813 .c = {
2814 .dbg_name = "esc1_clk_src",
2815 .ops = &clk_ops_rcg,
2816 VDD_DIG_FMAX_MAP2(LOW, 20000000, NOMINAL, 40000000),
2817 CLK_INIT(esc1_clk_src.c),
2818 },
2819};
2820
2821static struct clk_freq_tbl ftbl_mdss_extpclk_clk[] = {
2822 F_MDSS(148500000, hdmipll_297, 2, 0, 0),
2823 F_END
2824};
2825
2826static struct rcg_clk extpclk_clk_src = {
2827 .cmd_rcgr_reg = EXTPCLK_CMD_RCGR,
2828 .set_rate = set_rate_hid,
2829 .freq_tbl = ftbl_mdss_extpclk_clk,
2830 .current_freq = &rcg_dummy_freq,
2831 .base = &virt_bases[MMSS_BASE],
2832 .c = {
2833 .dbg_name = "extpclk_clk_src",
2834 .ops = &clk_ops_rcg,
2835 VDD_DIG_FMAX_MAP2(LOW, 148500000, NOMINAL, 297000000),
2836 CLK_INIT(extpclk_clk_src.c),
2837 },
2838};
2839
2840static struct clk_freq_tbl ftbl_mdss_hdmi_clk[] = {
2841 F_MDSS(19200000, cxo, 1, 0, 0),
2842 F_END
2843};
2844
2845static struct rcg_clk hdmi_clk_src = {
2846 .cmd_rcgr_reg = HDMI_CMD_RCGR,
2847 .set_rate = set_rate_hid,
2848 .freq_tbl = ftbl_mdss_hdmi_clk,
2849 .current_freq = &rcg_dummy_freq,
2850 .base = &virt_bases[MMSS_BASE],
2851 .c = {
2852 .dbg_name = "hdmi_clk_src",
2853 .ops = &clk_ops_rcg,
2854 VDD_DIG_FMAX_MAP2(LOW, 20000000, NOMINAL, 40000000),
2855 CLK_INIT(hdmi_clk_src.c),
2856 },
2857};
2858
2859static struct clk_freq_tbl ftbl_mdss_pclk0_1_clk[] = {
2860 F_MDSS(125000000, dsipll_250, 2, 0, 0),
2861 F_MDSS(250000000, dsipll_250, 1, 0, 0),
2862 F_END
2863};
2864
2865static struct rcg_clk pclk0_clk_src = {
2866 .cmd_rcgr_reg = PCLK0_CMD_RCGR,
2867 .set_rate = set_rate_mnd,
2868 .freq_tbl = ftbl_mdss_pclk0_1_clk,
2869 .current_freq = &rcg_dummy_freq,
2870 .base = &virt_bases[MMSS_BASE],
2871 .c = {
2872 .dbg_name = "pclk0_clk_src",
2873 .ops = &clk_ops_rcg_mnd,
2874 VDD_DIG_FMAX_MAP2(LOW, 125000000, NOMINAL, 250000000),
2875 CLK_INIT(pclk0_clk_src.c),
2876 },
2877};
2878
2879static struct rcg_clk pclk1_clk_src = {
2880 .cmd_rcgr_reg = PCLK1_CMD_RCGR,
2881 .set_rate = set_rate_mnd,
2882 .freq_tbl = ftbl_mdss_pclk0_1_clk,
2883 .current_freq = &rcg_dummy_freq,
2884 .base = &virt_bases[MMSS_BASE],
2885 .c = {
2886 .dbg_name = "pclk1_clk_src",
2887 .ops = &clk_ops_rcg_mnd,
2888 VDD_DIG_FMAX_MAP2(LOW, 125000000, NOMINAL, 250000000),
2889 CLK_INIT(pclk1_clk_src.c),
2890 },
2891};
2892
2893static struct clk_freq_tbl ftbl_mdss_vsync_clk[] = {
2894 F_MDSS(19200000, cxo, 1, 0, 0),
2895 F_END
2896};
2897
2898static struct rcg_clk vsync_clk_src = {
2899 .cmd_rcgr_reg = VSYNC_CMD_RCGR,
2900 .set_rate = set_rate_hid,
2901 .freq_tbl = ftbl_mdss_vsync_clk,
2902 .current_freq = &rcg_dummy_freq,
2903 .base = &virt_bases[MMSS_BASE],
2904 .c = {
2905 .dbg_name = "vsync_clk_src",
2906 .ops = &clk_ops_rcg,
2907 VDD_DIG_FMAX_MAP2(LOW, 20000000, NOMINAL, 40000000),
2908 CLK_INIT(vsync_clk_src.c),
2909 },
2910};
2911
2912static struct clk_freq_tbl ftbl_venus0_vcodec0_clk[] = {
2913 F_MM( 50000000, gpll0, 12, 0, 0),
2914 F_MM(100000000, gpll0, 6, 0, 0),
2915 F_MM(133330000, mmpll0, 6, 0, 0),
2916 F_MM(200000000, mmpll0, 4, 0, 0),
2917 F_MM(266670000, mmpll0, 3, 0, 0),
2918 F_MM(410000000, mmpll3, 2, 0, 0),
2919 F_END
2920};
2921
2922static struct rcg_clk vcodec0_clk_src = {
2923 .cmd_rcgr_reg = VCODEC0_CMD_RCGR,
2924 .set_rate = set_rate_mnd,
2925 .freq_tbl = ftbl_venus0_vcodec0_clk,
2926 .current_freq = &rcg_dummy_freq,
2927 .base = &virt_bases[MMSS_BASE],
2928 .c = {
2929 .dbg_name = "vcodec0_clk_src",
2930 .ops = &clk_ops_rcg_mnd,
2931 VDD_DIG_FMAX_MAP3(LOW, 133330000, NOMINAL, 266670000,
2932 HIGH, 410000000),
2933 CLK_INIT(vcodec0_clk_src.c),
2934 },
2935};
2936
2937static struct branch_clk camss_cci_cci_ahb_clk = {
2938 .cbcr_reg = CAMSS_CCI_CCI_AHB_CBCR,
2939 .parent = &ahb_clk_src.c,
2940 .has_sibling = 1,
2941 .bcr_reg = CAMSS_CCI_BCR,
2942 .base = &virt_bases[MMSS_BASE],
2943 .c = {
2944 .dbg_name = "camss_cci_cci_ahb_clk",
2945 .ops = &clk_ops_branch,
2946 CLK_INIT(camss_cci_cci_ahb_clk.c),
2947 },
2948};
2949
2950static struct branch_clk camss_cci_cci_clk = {
2951 .cbcr_reg = CAMSS_CCI_CCI_CBCR,
2952 .parent = &cci_clk_src.c,
2953 .has_sibling = 0,
2954 .bcr_reg = CAMSS_CCI_BCR,
2955 .base = &virt_bases[MMSS_BASE],
2956 .c = {
2957 .dbg_name = "camss_cci_cci_clk",
2958 .ops = &clk_ops_branch,
2959 CLK_INIT(camss_cci_cci_clk.c),
2960 },
2961};
2962
2963static struct branch_clk camss_csi0_ahb_clk = {
2964 .cbcr_reg = CAMSS_CSI0_AHB_CBCR,
2965 .parent = &ahb_clk_src.c,
2966 .has_sibling = 1,
2967 .bcr_reg = CAMSS_CSI0_BCR,
2968 .base = &virt_bases[MMSS_BASE],
2969 .c = {
2970 .dbg_name = "camss_csi0_ahb_clk",
2971 .ops = &clk_ops_branch,
2972 CLK_INIT(camss_csi0_ahb_clk.c),
2973 },
2974};
2975
2976static struct branch_clk camss_csi0_clk = {
2977 .cbcr_reg = CAMSS_CSI0_CBCR,
2978 .parent = &csi0_clk_src.c,
2979 .has_sibling = 1,
2980 .bcr_reg = CAMSS_CSI0_BCR,
2981 .base = &virt_bases[MMSS_BASE],
2982 .c = {
2983 .dbg_name = "camss_csi0_clk",
2984 .ops = &clk_ops_branch,
2985 CLK_INIT(camss_csi0_clk.c),
2986 },
2987};
2988
2989static struct branch_clk camss_csi0phy_clk = {
2990 .cbcr_reg = CAMSS_CSI0PHY_CBCR,
2991 .parent = &csi0_clk_src.c,
2992 .has_sibling = 1,
2993 .bcr_reg = CAMSS_CSI0PHY_BCR,
2994 .base = &virt_bases[MMSS_BASE],
2995 .c = {
2996 .dbg_name = "camss_csi0phy_clk",
2997 .ops = &clk_ops_branch,
2998 CLK_INIT(camss_csi0phy_clk.c),
2999 },
3000};
3001
3002static struct branch_clk camss_csi0pix_clk = {
3003 .cbcr_reg = CAMSS_CSI0PIX_CBCR,
3004 .parent = &csi0_clk_src.c,
3005 .has_sibling = 1,
3006 .bcr_reg = CAMSS_CSI0PIX_BCR,
3007 .base = &virt_bases[MMSS_BASE],
3008 .c = {
3009 .dbg_name = "camss_csi0pix_clk",
3010 .ops = &clk_ops_branch,
3011 CLK_INIT(camss_csi0pix_clk.c),
3012 },
3013};
3014
3015static struct branch_clk camss_csi0rdi_clk = {
3016 .cbcr_reg = CAMSS_CSI0RDI_CBCR,
3017 .parent = &csi0_clk_src.c,
3018 .has_sibling = 1,
3019 .bcr_reg = CAMSS_CSI0RDI_BCR,
3020 .base = &virt_bases[MMSS_BASE],
3021 .c = {
3022 .dbg_name = "camss_csi0rdi_clk",
3023 .ops = &clk_ops_branch,
3024 CLK_INIT(camss_csi0rdi_clk.c),
3025 },
3026};
3027
3028static struct branch_clk camss_csi1_ahb_clk = {
3029 .cbcr_reg = CAMSS_CSI1_AHB_CBCR,
3030 .parent = &ahb_clk_src.c,
3031 .has_sibling = 1,
3032 .bcr_reg = CAMSS_CSI1_BCR,
3033 .base = &virt_bases[MMSS_BASE],
3034 .c = {
3035 .dbg_name = "camss_csi1_ahb_clk",
3036 .ops = &clk_ops_branch,
3037 CLK_INIT(camss_csi1_ahb_clk.c),
3038 },
3039};
3040
3041static struct branch_clk camss_csi1_clk = {
3042 .cbcr_reg = CAMSS_CSI1_CBCR,
3043 .parent = &csi1_clk_src.c,
3044 .has_sibling = 1,
3045 .bcr_reg = CAMSS_CSI1_BCR,
3046 .base = &virt_bases[MMSS_BASE],
3047 .c = {
3048 .dbg_name = "camss_csi1_clk",
3049 .ops = &clk_ops_branch,
3050 CLK_INIT(camss_csi1_clk.c),
3051 },
3052};
3053
3054static struct branch_clk camss_csi1phy_clk = {
3055 .cbcr_reg = CAMSS_CSI1PHY_CBCR,
3056 .parent = &csi1_clk_src.c,
3057 .has_sibling = 1,
3058 .bcr_reg = CAMSS_CSI1PHY_BCR,
3059 .base = &virt_bases[MMSS_BASE],
3060 .c = {
3061 .dbg_name = "camss_csi1phy_clk",
3062 .ops = &clk_ops_branch,
3063 CLK_INIT(camss_csi1phy_clk.c),
3064 },
3065};
3066
3067static struct branch_clk camss_csi1pix_clk = {
3068 .cbcr_reg = CAMSS_CSI1PIX_CBCR,
3069 .parent = &csi1_clk_src.c,
3070 .has_sibling = 1,
3071 .bcr_reg = CAMSS_CSI1PIX_BCR,
3072 .base = &virt_bases[MMSS_BASE],
3073 .c = {
3074 .dbg_name = "camss_csi1pix_clk",
3075 .ops = &clk_ops_branch,
3076 CLK_INIT(camss_csi1pix_clk.c),
3077 },
3078};
3079
3080static struct branch_clk camss_csi1rdi_clk = {
3081 .cbcr_reg = CAMSS_CSI1RDI_CBCR,
3082 .parent = &csi1_clk_src.c,
3083 .has_sibling = 1,
3084 .bcr_reg = CAMSS_CSI1RDI_BCR,
3085 .base = &virt_bases[MMSS_BASE],
3086 .c = {
3087 .dbg_name = "camss_csi1rdi_clk",
3088 .ops = &clk_ops_branch,
3089 CLK_INIT(camss_csi1rdi_clk.c),
3090 },
3091};
3092
3093static struct branch_clk camss_csi2_ahb_clk = {
3094 .cbcr_reg = CAMSS_CSI2_AHB_CBCR,
3095 .parent = &ahb_clk_src.c,
3096 .has_sibling = 1,
3097 .bcr_reg = CAMSS_CSI2_BCR,
3098 .base = &virt_bases[MMSS_BASE],
3099 .c = {
3100 .dbg_name = "camss_csi2_ahb_clk",
3101 .ops = &clk_ops_branch,
3102 CLK_INIT(camss_csi2_ahb_clk.c),
3103 },
3104};
3105
3106static struct branch_clk camss_csi2_clk = {
3107 .cbcr_reg = CAMSS_CSI2_CBCR,
3108 .parent = &csi2_clk_src.c,
3109 .has_sibling = 1,
3110 .bcr_reg = CAMSS_CSI2_BCR,
3111 .base = &virt_bases[MMSS_BASE],
3112 .c = {
3113 .dbg_name = "camss_csi2_clk",
3114 .ops = &clk_ops_branch,
3115 CLK_INIT(camss_csi2_clk.c),
3116 },
3117};
3118
3119static struct branch_clk camss_csi2phy_clk = {
3120 .cbcr_reg = CAMSS_CSI2PHY_CBCR,
3121 .parent = &csi2_clk_src.c,
3122 .has_sibling = 1,
3123 .bcr_reg = CAMSS_CSI2PHY_BCR,
3124 .base = &virt_bases[MMSS_BASE],
3125 .c = {
3126 .dbg_name = "camss_csi2phy_clk",
3127 .ops = &clk_ops_branch,
3128 CLK_INIT(camss_csi2phy_clk.c),
3129 },
3130};
3131
3132static struct branch_clk camss_csi2pix_clk = {
3133 .cbcr_reg = CAMSS_CSI2PIX_CBCR,
3134 .parent = &csi2_clk_src.c,
3135 .has_sibling = 1,
3136 .bcr_reg = CAMSS_CSI2PIX_BCR,
3137 .base = &virt_bases[MMSS_BASE],
3138 .c = {
3139 .dbg_name = "camss_csi2pix_clk",
3140 .ops = &clk_ops_branch,
3141 CLK_INIT(camss_csi2pix_clk.c),
3142 },
3143};
3144
3145static struct branch_clk camss_csi2rdi_clk = {
3146 .cbcr_reg = CAMSS_CSI2RDI_CBCR,
3147 .parent = &csi2_clk_src.c,
3148 .has_sibling = 1,
3149 .bcr_reg = CAMSS_CSI2RDI_BCR,
3150 .base = &virt_bases[MMSS_BASE],
3151 .c = {
3152 .dbg_name = "camss_csi2rdi_clk",
3153 .ops = &clk_ops_branch,
3154 CLK_INIT(camss_csi2rdi_clk.c),
3155 },
3156};
3157
3158static struct branch_clk camss_csi3_ahb_clk = {
3159 .cbcr_reg = CAMSS_CSI3_AHB_CBCR,
3160 .parent = &ahb_clk_src.c,
3161 .has_sibling = 1,
3162 .bcr_reg = CAMSS_CSI3_BCR,
3163 .base = &virt_bases[MMSS_BASE],
3164 .c = {
3165 .dbg_name = "camss_csi3_ahb_clk",
3166 .ops = &clk_ops_branch,
3167 CLK_INIT(camss_csi3_ahb_clk.c),
3168 },
3169};
3170
3171static struct branch_clk camss_csi3_clk = {
3172 .cbcr_reg = CAMSS_CSI3_CBCR,
3173 .parent = &csi3_clk_src.c,
3174 .has_sibling = 1,
3175 .bcr_reg = CAMSS_CSI3_BCR,
3176 .base = &virt_bases[MMSS_BASE],
3177 .c = {
3178 .dbg_name = "camss_csi3_clk",
3179 .ops = &clk_ops_branch,
3180 CLK_INIT(camss_csi3_clk.c),
3181 },
3182};
3183
3184static struct branch_clk camss_csi3phy_clk = {
3185 .cbcr_reg = CAMSS_CSI3PHY_CBCR,
3186 .parent = &csi3_clk_src.c,
3187 .has_sibling = 1,
3188 .bcr_reg = CAMSS_CSI3PHY_BCR,
3189 .base = &virt_bases[MMSS_BASE],
3190 .c = {
3191 .dbg_name = "camss_csi3phy_clk",
3192 .ops = &clk_ops_branch,
3193 CLK_INIT(camss_csi3phy_clk.c),
3194 },
3195};
3196
3197static struct branch_clk camss_csi3pix_clk = {
3198 .cbcr_reg = CAMSS_CSI3PIX_CBCR,
3199 .parent = &csi3_clk_src.c,
3200 .has_sibling = 1,
3201 .bcr_reg = CAMSS_CSI3PIX_BCR,
3202 .base = &virt_bases[MMSS_BASE],
3203 .c = {
3204 .dbg_name = "camss_csi3pix_clk",
3205 .ops = &clk_ops_branch,
3206 CLK_INIT(camss_csi3pix_clk.c),
3207 },
3208};
3209
3210static struct branch_clk camss_csi3rdi_clk = {
3211 .cbcr_reg = CAMSS_CSI3RDI_CBCR,
3212 .parent = &csi3_clk_src.c,
3213 .has_sibling = 1,
3214 .bcr_reg = CAMSS_CSI3RDI_BCR,
3215 .base = &virt_bases[MMSS_BASE],
3216 .c = {
3217 .dbg_name = "camss_csi3rdi_clk",
3218 .ops = &clk_ops_branch,
3219 CLK_INIT(camss_csi3rdi_clk.c),
3220 },
3221};
3222
3223static struct branch_clk camss_csi_vfe0_clk = {
3224 .cbcr_reg = CAMSS_CSI_VFE0_CBCR,
3225 .parent = &vfe0_clk_src.c,
3226 .has_sibling = 1,
3227 .bcr_reg = CAMSS_CSI_VFE0_BCR,
3228 .base = &virt_bases[MMSS_BASE],
3229 .c = {
3230 .dbg_name = "camss_csi_vfe0_clk",
3231 .ops = &clk_ops_branch,
3232 CLK_INIT(camss_csi_vfe0_clk.c),
3233 },
3234};
3235
3236static struct branch_clk camss_csi_vfe1_clk = {
3237 .cbcr_reg = CAMSS_CSI_VFE1_CBCR,
3238 .parent = &vfe1_clk_src.c,
3239 .has_sibling = 1,
3240 .bcr_reg = CAMSS_CSI_VFE1_BCR,
3241 .base = &virt_bases[MMSS_BASE],
3242 .c = {
3243 .dbg_name = "camss_csi_vfe1_clk",
3244 .ops = &clk_ops_branch,
3245 CLK_INIT(camss_csi_vfe1_clk.c),
3246 },
3247};
3248
3249static struct branch_clk camss_gp0_clk = {
3250 .cbcr_reg = CAMSS_GP0_CBCR,
3251 .parent = &mmss_gp0_clk_src.c,
3252 .has_sibling = 0,
3253 .bcr_reg = CAMSS_GP0_BCR,
3254 .base = &virt_bases[MMSS_BASE],
3255 .c = {
3256 .dbg_name = "camss_gp0_clk",
3257 .ops = &clk_ops_branch,
3258 CLK_INIT(camss_gp0_clk.c),
3259 },
3260};
3261
3262static struct branch_clk camss_gp1_clk = {
3263 .cbcr_reg = CAMSS_GP1_CBCR,
3264 .parent = &mmss_gp1_clk_src.c,
3265 .has_sibling = 0,
3266 .bcr_reg = CAMSS_GP1_BCR,
3267 .base = &virt_bases[MMSS_BASE],
3268 .c = {
3269 .dbg_name = "camss_gp1_clk",
3270 .ops = &clk_ops_branch,
3271 CLK_INIT(camss_gp1_clk.c),
3272 },
3273};
3274
3275static struct branch_clk camss_ispif_ahb_clk = {
3276 .cbcr_reg = CAMSS_ISPIF_AHB_CBCR,
3277 .parent = &ahb_clk_src.c,
3278 .has_sibling = 1,
3279 .bcr_reg = CAMSS_ISPIF_BCR,
3280 .base = &virt_bases[MMSS_BASE],
3281 .c = {
3282 .dbg_name = "camss_ispif_ahb_clk",
3283 .ops = &clk_ops_branch,
3284 CLK_INIT(camss_ispif_ahb_clk.c),
3285 },
3286};
3287
3288static struct branch_clk camss_jpeg_jpeg0_clk = {
3289 .cbcr_reg = CAMSS_JPEG_JPEG0_CBCR,
3290 .parent = &jpeg0_clk_src.c,
3291 .has_sibling = 0,
3292 .bcr_reg = CAMSS_JPEG_BCR,
3293 .base = &virt_bases[MMSS_BASE],
3294 .c = {
3295 .dbg_name = "camss_jpeg_jpeg0_clk",
3296 .ops = &clk_ops_branch,
3297 CLK_INIT(camss_jpeg_jpeg0_clk.c),
3298 },
3299};
3300
3301static struct branch_clk camss_jpeg_jpeg1_clk = {
3302 .cbcr_reg = CAMSS_JPEG_JPEG1_CBCR,
3303 .parent = &jpeg1_clk_src.c,
3304 .has_sibling = 0,
3305 .bcr_reg = CAMSS_JPEG_BCR,
3306 .base = &virt_bases[MMSS_BASE],
3307 .c = {
3308 .dbg_name = "camss_jpeg_jpeg1_clk",
3309 .ops = &clk_ops_branch,
3310 CLK_INIT(camss_jpeg_jpeg1_clk.c),
3311 },
3312};
3313
3314static struct branch_clk camss_jpeg_jpeg2_clk = {
3315 .cbcr_reg = CAMSS_JPEG_JPEG2_CBCR,
3316 .parent = &jpeg2_clk_src.c,
3317 .has_sibling = 0,
3318 .bcr_reg = CAMSS_JPEG_BCR,
3319 .base = &virt_bases[MMSS_BASE],
3320 .c = {
3321 .dbg_name = "camss_jpeg_jpeg2_clk",
3322 .ops = &clk_ops_branch,
3323 CLK_INIT(camss_jpeg_jpeg2_clk.c),
3324 },
3325};
3326
3327static struct branch_clk camss_jpeg_jpeg_ahb_clk = {
3328 .cbcr_reg = CAMSS_JPEG_JPEG_AHB_CBCR,
3329 .parent = &ahb_clk_src.c,
3330 .has_sibling = 1,
3331 .bcr_reg = CAMSS_JPEG_BCR,
3332 .base = &virt_bases[MMSS_BASE],
3333 .c = {
3334 .dbg_name = "camss_jpeg_jpeg_ahb_clk",
3335 .ops = &clk_ops_branch,
3336 CLK_INIT(camss_jpeg_jpeg_ahb_clk.c),
3337 },
3338};
3339
3340static struct branch_clk camss_jpeg_jpeg_axi_clk = {
3341 .cbcr_reg = CAMSS_JPEG_JPEG_AXI_CBCR,
3342 .parent = &axi_clk_src.c,
3343 .has_sibling = 1,
3344 .bcr_reg = CAMSS_JPEG_BCR,
3345 .base = &virt_bases[MMSS_BASE],
3346 .c = {
3347 .dbg_name = "camss_jpeg_jpeg_axi_clk",
3348 .ops = &clk_ops_branch,
3349 CLK_INIT(camss_jpeg_jpeg_axi_clk.c),
3350 },
3351};
3352
3353static struct branch_clk camss_jpeg_jpeg_ocmemnoc_clk = {
3354 .cbcr_reg = CAMSS_JPEG_JPEG_OCMEMNOC_CBCR,
3355 .has_sibling = 1,
3356 .bcr_reg = CAMSS_JPEG_BCR,
3357 .base = &virt_bases[MMSS_BASE],
3358 .c = {
3359 .dbg_name = "camss_jpeg_jpeg_ocmemnoc_clk",
3360 .ops = &clk_ops_branch,
3361 CLK_INIT(camss_jpeg_jpeg_ocmemnoc_clk.c),
3362 },
3363};
3364
3365static struct branch_clk camss_mclk0_clk = {
3366 .cbcr_reg = CAMSS_MCLK0_CBCR,
3367 .parent = &mclk0_clk_src.c,
3368 .has_sibling = 0,
3369 .bcr_reg = CAMSS_MCLK0_BCR,
3370 .base = &virt_bases[MMSS_BASE],
3371 .c = {
3372 .dbg_name = "camss_mclk0_clk",
3373 .ops = &clk_ops_branch,
3374 CLK_INIT(camss_mclk0_clk.c),
3375 },
3376};
3377
3378static struct branch_clk camss_mclk1_clk = {
3379 .cbcr_reg = CAMSS_MCLK1_CBCR,
3380 .parent = &mclk1_clk_src.c,
3381 .has_sibling = 0,
3382 .bcr_reg = CAMSS_MCLK1_BCR,
3383 .base = &virt_bases[MMSS_BASE],
3384 .c = {
3385 .dbg_name = "camss_mclk1_clk",
3386 .ops = &clk_ops_branch,
3387 CLK_INIT(camss_mclk1_clk.c),
3388 },
3389};
3390
3391static struct branch_clk camss_mclk2_clk = {
3392 .cbcr_reg = CAMSS_MCLK2_CBCR,
3393 .parent = &mclk2_clk_src.c,
3394 .has_sibling = 0,
3395 .bcr_reg = CAMSS_MCLK2_BCR,
3396 .base = &virt_bases[MMSS_BASE],
3397 .c = {
3398 .dbg_name = "camss_mclk2_clk",
3399 .ops = &clk_ops_branch,
3400 CLK_INIT(camss_mclk2_clk.c),
3401 },
3402};
3403
3404static struct branch_clk camss_mclk3_clk = {
3405 .cbcr_reg = CAMSS_MCLK3_CBCR,
3406 .parent = &mclk3_clk_src.c,
3407 .has_sibling = 0,
3408 .bcr_reg = CAMSS_MCLK3_BCR,
3409 .base = &virt_bases[MMSS_BASE],
3410 .c = {
3411 .dbg_name = "camss_mclk3_clk",
3412 .ops = &clk_ops_branch,
3413 CLK_INIT(camss_mclk3_clk.c),
3414 },
3415};
3416
3417static struct branch_clk camss_micro_ahb_clk = {
3418 .cbcr_reg = CAMSS_MICRO_AHB_CBCR,
3419 .parent = &ahb_clk_src.c,
3420 .has_sibling = 1,
3421 .bcr_reg = CAMSS_MICRO_BCR,
3422 .base = &virt_bases[MMSS_BASE],
3423 .c = {
3424 .dbg_name = "camss_micro_ahb_clk",
3425 .ops = &clk_ops_branch,
3426 CLK_INIT(camss_micro_ahb_clk.c),
3427 },
3428};
3429
3430static struct branch_clk camss_phy0_csi0phytimer_clk = {
3431 .cbcr_reg = CAMSS_PHY0_CSI0PHYTIMER_CBCR,
3432 .parent = &csi0phytimer_clk_src.c,
3433 .has_sibling = 0,
3434 .bcr_reg = CAMSS_PHY0_BCR,
3435 .base = &virt_bases[MMSS_BASE],
3436 .c = {
3437 .dbg_name = "camss_phy0_csi0phytimer_clk",
3438 .ops = &clk_ops_branch,
3439 CLK_INIT(camss_phy0_csi0phytimer_clk.c),
3440 },
3441};
3442
3443static struct branch_clk camss_phy1_csi1phytimer_clk = {
3444 .cbcr_reg = CAMSS_PHY1_CSI1PHYTIMER_CBCR,
3445 .parent = &csi1phytimer_clk_src.c,
3446 .has_sibling = 0,
3447 .bcr_reg = CAMSS_PHY1_BCR,
3448 .base = &virt_bases[MMSS_BASE],
3449 .c = {
3450 .dbg_name = "camss_phy1_csi1phytimer_clk",
3451 .ops = &clk_ops_branch,
3452 CLK_INIT(camss_phy1_csi1phytimer_clk.c),
3453 },
3454};
3455
3456static struct branch_clk camss_phy2_csi2phytimer_clk = {
3457 .cbcr_reg = CAMSS_PHY2_CSI2PHYTIMER_CBCR,
3458 .parent = &csi2phytimer_clk_src.c,
3459 .has_sibling = 0,
3460 .bcr_reg = CAMSS_PHY2_BCR,
3461 .base = &virt_bases[MMSS_BASE],
3462 .c = {
3463 .dbg_name = "camss_phy2_csi2phytimer_clk",
3464 .ops = &clk_ops_branch,
3465 CLK_INIT(camss_phy2_csi2phytimer_clk.c),
3466 },
3467};
3468
3469static struct branch_clk camss_top_ahb_clk = {
3470 .cbcr_reg = CAMSS_TOP_AHB_CBCR,
3471 .parent = &ahb_clk_src.c,
3472 .has_sibling = 1,
3473 .bcr_reg = CAMSS_TOP_BCR,
3474 .base = &virt_bases[MMSS_BASE],
3475 .c = {
3476 .dbg_name = "camss_top_ahb_clk",
3477 .ops = &clk_ops_branch,
3478 CLK_INIT(camss_top_ahb_clk.c),
3479 },
3480};
3481
3482static struct branch_clk camss_vfe_cpp_ahb_clk = {
3483 .cbcr_reg = CAMSS_VFE_CPP_AHB_CBCR,
3484 .parent = &ahb_clk_src.c,
3485 .has_sibling = 1,
3486 .bcr_reg = CAMSS_VFE_BCR,
3487 .base = &virt_bases[MMSS_BASE],
3488 .c = {
3489 .dbg_name = "camss_vfe_cpp_ahb_clk",
3490 .ops = &clk_ops_branch,
3491 CLK_INIT(camss_vfe_cpp_ahb_clk.c),
3492 },
3493};
3494
3495static struct branch_clk camss_vfe_cpp_clk = {
3496 .cbcr_reg = CAMSS_VFE_CPP_CBCR,
3497 .parent = &cpp_clk_src.c,
3498 .has_sibling = 0,
3499 .bcr_reg = CAMSS_VFE_BCR,
3500 .base = &virt_bases[MMSS_BASE],
3501 .c = {
3502 .dbg_name = "camss_vfe_cpp_clk",
3503 .ops = &clk_ops_branch,
3504 CLK_INIT(camss_vfe_cpp_clk.c),
3505 },
3506};
3507
3508static struct branch_clk camss_vfe_vfe0_clk = {
3509 .cbcr_reg = CAMSS_VFE_VFE0_CBCR,
3510 .parent = &vfe0_clk_src.c,
3511 .has_sibling = 1,
3512 .bcr_reg = CAMSS_VFE_BCR,
3513 .base = &virt_bases[MMSS_BASE],
3514 .c = {
3515 .dbg_name = "camss_vfe_vfe0_clk",
3516 .ops = &clk_ops_branch,
3517 CLK_INIT(camss_vfe_vfe0_clk.c),
3518 },
3519};
3520
3521static struct branch_clk camss_vfe_vfe1_clk = {
3522 .cbcr_reg = CAMSS_VFE_VFE1_CBCR,
3523 .parent = &vfe1_clk_src.c,
3524 .has_sibling = 1,
3525 .bcr_reg = CAMSS_VFE_BCR,
3526 .base = &virt_bases[MMSS_BASE],
3527 .c = {
3528 .dbg_name = "camss_vfe_vfe1_clk",
3529 .ops = &clk_ops_branch,
3530 CLK_INIT(camss_vfe_vfe1_clk.c),
3531 },
3532};
3533
3534static struct branch_clk camss_vfe_vfe_ahb_clk = {
3535 .cbcr_reg = CAMSS_VFE_VFE_AHB_CBCR,
3536 .parent = &ahb_clk_src.c,
3537 .has_sibling = 1,
3538 .bcr_reg = CAMSS_VFE_BCR,
3539 .base = &virt_bases[MMSS_BASE],
3540 .c = {
3541 .dbg_name = "camss_vfe_vfe_ahb_clk",
3542 .ops = &clk_ops_branch,
3543 CLK_INIT(camss_vfe_vfe_ahb_clk.c),
3544 },
3545};
3546
3547static struct branch_clk camss_vfe_vfe_axi_clk = {
3548 .cbcr_reg = CAMSS_VFE_VFE_AXI_CBCR,
3549 .parent = &axi_clk_src.c,
3550 .has_sibling = 1,
3551 .bcr_reg = CAMSS_VFE_BCR,
3552 .base = &virt_bases[MMSS_BASE],
3553 .c = {
3554 .dbg_name = "camss_vfe_vfe_axi_clk",
3555 .ops = &clk_ops_branch,
3556 CLK_INIT(camss_vfe_vfe_axi_clk.c),
3557 },
3558};
3559
3560static struct branch_clk camss_vfe_vfe_ocmemnoc_clk = {
3561 .cbcr_reg = CAMSS_VFE_VFE_OCMEMNOC_CBCR,
3562 .has_sibling = 1,
3563 .bcr_reg = CAMSS_VFE_BCR,
3564 .base = &virt_bases[MMSS_BASE],
3565 .c = {
3566 .dbg_name = "camss_vfe_vfe_ocmemnoc_clk",
3567 .ops = &clk_ops_branch,
3568 CLK_INIT(camss_vfe_vfe_ocmemnoc_clk.c),
3569 },
3570};
3571
3572static struct branch_clk mdss_ahb_clk = {
3573 .cbcr_reg = MDSS_AHB_CBCR,
3574 .parent = &ahb_clk_src.c,
3575 .has_sibling = 1,
3576 .bcr_reg = MDSS_BCR,
3577 .base = &virt_bases[MMSS_BASE],
3578 .c = {
3579 .dbg_name = "mdss_ahb_clk",
3580 .ops = &clk_ops_branch,
3581 CLK_INIT(mdss_ahb_clk.c),
3582 },
3583};
3584
3585static struct branch_clk mdss_axi_clk = {
3586 .cbcr_reg = MDSS_AXI_CBCR,
3587 .parent = &axi_clk_src.c,
3588 .has_sibling = 1,
3589 .bcr_reg = MDSS_BCR,
3590 .base = &virt_bases[MMSS_BASE],
3591 .c = {
3592 .dbg_name = "mdss_axi_clk",
3593 .ops = &clk_ops_branch,
3594 CLK_INIT(mdss_axi_clk.c),
3595 },
3596};
3597
3598static struct branch_clk mdss_byte0_clk = {
3599 .cbcr_reg = MDSS_BYTE0_CBCR,
3600 .parent = &byte0_clk_src.c,
3601 .has_sibling = 0,
3602 .bcr_reg = MDSS_BCR,
3603 .base = &virt_bases[MMSS_BASE],
3604 .c = {
3605 .dbg_name = "mdss_byte0_clk",
3606 .ops = &clk_ops_branch,
3607 CLK_INIT(mdss_byte0_clk.c),
3608 },
3609};
3610
3611static struct branch_clk mdss_byte1_clk = {
3612 .cbcr_reg = MDSS_BYTE1_CBCR,
3613 .parent = &byte1_clk_src.c,
3614 .has_sibling = 0,
3615 .bcr_reg = MDSS_BCR,
3616 .base = &virt_bases[MMSS_BASE],
3617 .c = {
3618 .dbg_name = "mdss_byte1_clk",
3619 .ops = &clk_ops_branch,
3620 CLK_INIT(mdss_byte1_clk.c),
3621 },
3622};
3623
3624static struct branch_clk mdss_edpaux_clk = {
3625 .cbcr_reg = MDSS_EDPAUX_CBCR,
3626 .parent = &edpaux_clk_src.c,
3627 .has_sibling = 0,
3628 .bcr_reg = MDSS_BCR,
3629 .base = &virt_bases[MMSS_BASE],
3630 .c = {
3631 .dbg_name = "mdss_edpaux_clk",
3632 .ops = &clk_ops_branch,
3633 CLK_INIT(mdss_edpaux_clk.c),
3634 },
3635};
3636
3637static struct branch_clk mdss_edplink_clk = {
3638 .cbcr_reg = MDSS_EDPLINK_CBCR,
3639 .parent = &edplink_clk_src.c,
3640 .has_sibling = 0,
3641 .bcr_reg = MDSS_BCR,
3642 .base = &virt_bases[MMSS_BASE],
3643 .c = {
3644 .dbg_name = "mdss_edplink_clk",
3645 .ops = &clk_ops_branch,
3646 CLK_INIT(mdss_edplink_clk.c),
3647 },
3648};
3649
3650static struct branch_clk mdss_edppixel_clk = {
3651 .cbcr_reg = MDSS_EDPPIXEL_CBCR,
3652 .parent = &edppixel_clk_src.c,
3653 .has_sibling = 0,
3654 .bcr_reg = MDSS_BCR,
3655 .base = &virt_bases[MMSS_BASE],
3656 .c = {
3657 .dbg_name = "mdss_edppixel_clk",
3658 .ops = &clk_ops_branch,
3659 CLK_INIT(mdss_edppixel_clk.c),
3660 },
3661};
3662
3663static struct branch_clk mdss_esc0_clk = {
3664 .cbcr_reg = MDSS_ESC0_CBCR,
3665 .parent = &esc0_clk_src.c,
3666 .has_sibling = 0,
3667 .bcr_reg = MDSS_BCR,
3668 .base = &virt_bases[MMSS_BASE],
3669 .c = {
3670 .dbg_name = "mdss_esc0_clk",
3671 .ops = &clk_ops_branch,
3672 CLK_INIT(mdss_esc0_clk.c),
3673 },
3674};
3675
3676static struct branch_clk mdss_esc1_clk = {
3677 .cbcr_reg = MDSS_ESC1_CBCR,
3678 .parent = &esc1_clk_src.c,
3679 .has_sibling = 0,
3680 .bcr_reg = MDSS_BCR,
3681 .base = &virt_bases[MMSS_BASE],
3682 .c = {
3683 .dbg_name = "mdss_esc1_clk",
3684 .ops = &clk_ops_branch,
3685 CLK_INIT(mdss_esc1_clk.c),
3686 },
3687};
3688
3689static struct branch_clk mdss_extpclk_clk = {
3690 .cbcr_reg = MDSS_EXTPCLK_CBCR,
3691 .parent = &extpclk_clk_src.c,
3692 .has_sibling = 0,
3693 .bcr_reg = MDSS_BCR,
3694 .base = &virt_bases[MMSS_BASE],
3695 .c = {
3696 .dbg_name = "mdss_extpclk_clk",
3697 .ops = &clk_ops_branch,
3698 CLK_INIT(mdss_extpclk_clk.c),
3699 },
3700};
3701
3702static struct branch_clk mdss_hdmi_ahb_clk = {
3703 .cbcr_reg = MDSS_HDMI_AHB_CBCR,
3704 .parent = &ahb_clk_src.c,
3705 .has_sibling = 1,
3706 .bcr_reg = MDSS_BCR,
3707 .base = &virt_bases[MMSS_BASE],
3708 .c = {
3709 .dbg_name = "mdss_hdmi_ahb_clk",
3710 .ops = &clk_ops_branch,
3711 CLK_INIT(mdss_hdmi_ahb_clk.c),
3712 },
3713};
3714
3715static struct branch_clk mdss_hdmi_clk = {
3716 .cbcr_reg = MDSS_HDMI_CBCR,
3717 .parent = &hdmi_clk_src.c,
3718 .has_sibling = 0,
3719 .bcr_reg = MDSS_BCR,
3720 .base = &virt_bases[MMSS_BASE],
3721 .c = {
3722 .dbg_name = "mdss_hdmi_clk",
3723 .ops = &clk_ops_branch,
3724 CLK_INIT(mdss_hdmi_clk.c),
3725 },
3726};
3727
3728static struct branch_clk mdss_mdp_clk = {
3729 .cbcr_reg = MDSS_MDP_CBCR,
3730 .parent = &mdp_clk_src.c,
3731 .has_sibling = 1,
3732 .bcr_reg = MDSS_BCR,
3733 .base = &virt_bases[MMSS_BASE],
3734 .c = {
3735 .dbg_name = "mdss_mdp_clk",
3736 .ops = &clk_ops_branch,
3737 CLK_INIT(mdss_mdp_clk.c),
3738 },
3739};
3740
3741static struct branch_clk mdss_mdp_lut_clk = {
3742 .cbcr_reg = MDSS_MDP_LUT_CBCR,
3743 .parent = &mdp_clk_src.c,
3744 .has_sibling = 1,
3745 .bcr_reg = MDSS_BCR,
3746 .base = &virt_bases[MMSS_BASE],
3747 .c = {
3748 .dbg_name = "mdss_mdp_lut_clk",
3749 .ops = &clk_ops_branch,
3750 CLK_INIT(mdss_mdp_lut_clk.c),
3751 },
3752};
3753
3754static struct branch_clk mdss_pclk0_clk = {
3755 .cbcr_reg = MDSS_PCLK0_CBCR,
3756 .parent = &pclk0_clk_src.c,
3757 .has_sibling = 0,
3758 .bcr_reg = MDSS_BCR,
3759 .base = &virt_bases[MMSS_BASE],
3760 .c = {
3761 .dbg_name = "mdss_pclk0_clk",
3762 .ops = &clk_ops_branch,
3763 CLK_INIT(mdss_pclk0_clk.c),
3764 },
3765};
3766
3767static struct branch_clk mdss_pclk1_clk = {
3768 .cbcr_reg = MDSS_PCLK1_CBCR,
3769 .parent = &pclk1_clk_src.c,
3770 .has_sibling = 0,
3771 .bcr_reg = MDSS_BCR,
3772 .base = &virt_bases[MMSS_BASE],
3773 .c = {
3774 .dbg_name = "mdss_pclk1_clk",
3775 .ops = &clk_ops_branch,
3776 CLK_INIT(mdss_pclk1_clk.c),
3777 },
3778};
3779
3780static struct branch_clk mdss_vsync_clk = {
3781 .cbcr_reg = MDSS_VSYNC_CBCR,
3782 .parent = &vsync_clk_src.c,
3783 .has_sibling = 0,
3784 .bcr_reg = MDSS_BCR,
3785 .base = &virt_bases[MMSS_BASE],
3786 .c = {
3787 .dbg_name = "mdss_vsync_clk",
3788 .ops = &clk_ops_branch,
3789 CLK_INIT(mdss_vsync_clk.c),
3790 },
3791};
3792
3793static struct branch_clk mmss_misc_ahb_clk = {
3794 .cbcr_reg = MMSS_MISC_AHB_CBCR,
3795 .parent = &ahb_clk_src.c,
3796 .has_sibling = 1,
3797 .bcr_reg = MMSSNOCAHB_BCR,
3798 .base = &virt_bases[MMSS_BASE],
3799 .c = {
3800 .dbg_name = "mmss_misc_ahb_clk",
3801 .ops = &clk_ops_branch,
3802 CLK_INIT(mmss_misc_ahb_clk.c),
3803 },
3804};
3805
3806static struct branch_clk mmss_mmssnoc_ahb_clk = {
3807 .cbcr_reg = MMSS_MMSSNOC_AHB_CBCR,
3808 .parent = &ahb_clk_src.c,
3809 .has_sibling = 1,
3810 .bcr_reg = MMSSNOCAHB_BCR,
3811 .base = &virt_bases[MMSS_BASE],
3812 .c = {
3813 .dbg_name = "mmss_mmssnoc_ahb_clk",
3814 .ops = &clk_ops_branch,
3815 CLK_INIT(mmss_mmssnoc_ahb_clk.c),
3816 },
3817};
3818
3819static struct branch_clk mmss_mmssnoc_bto_ahb_clk = {
3820 .cbcr_reg = MMSS_MMSSNOC_BTO_AHB_CBCR,
3821 .parent = &ahb_clk_src.c,
3822 .has_sibling = 1,
3823 .bcr_reg = MMSSNOCAHB_BCR,
3824 .base = &virt_bases[MMSS_BASE],
3825 .c = {
3826 .dbg_name = "mmss_mmssnoc_bto_ahb_clk",
3827 .ops = &clk_ops_branch,
3828 CLK_INIT(mmss_mmssnoc_bto_ahb_clk.c),
3829 },
3830};
3831
3832static struct branch_clk mmss_mmssnoc_axi_clk = {
3833 .cbcr_reg = MMSS_MMSSNOC_AXI_CBCR,
3834 .parent = &axi_clk_src.c,
3835 .has_sibling = 1,
3836 .bcr_reg = MMSSNOCAXI_BCR,
3837 .base = &virt_bases[MMSS_BASE],
3838 .c = {
3839 .dbg_name = "mmss_mmssnoc_axi_clk",
3840 .ops = &clk_ops_branch,
3841 CLK_INIT(mmss_mmssnoc_axi_clk.c),
3842 },
3843};
3844
3845static struct branch_clk mmss_s0_axi_clk = {
3846 .cbcr_reg = MMSS_S0_AXI_CBCR,
3847 .parent = &axi_clk_src.c,
3848 .has_sibling = 1,
3849 .bcr_reg = MMSSNOCAXI_BCR,
3850 .base = &virt_bases[MMSS_BASE],
3851 .c = {
3852 .dbg_name = "mmss_s0_axi_clk",
3853 .ops = &clk_ops_branch,
3854 CLK_INIT(mmss_s0_axi_clk.c),
3855 },
3856};
3857
3858static struct branch_clk venus0_ahb_clk = {
3859 .cbcr_reg = VENUS0_AHB_CBCR,
3860 .parent = &ahb_clk_src.c,
3861 .has_sibling = 1,
3862 .bcr_reg = VENUS0_BCR,
3863 .base = &virt_bases[MMSS_BASE],
3864 .c = {
3865 .dbg_name = "venus0_ahb_clk",
3866 .ops = &clk_ops_branch,
3867 CLK_INIT(venus0_ahb_clk.c),
3868 },
3869};
3870
3871static struct branch_clk venus0_axi_clk = {
3872 .cbcr_reg = VENUS0_AXI_CBCR,
3873 .parent = &axi_clk_src.c,
3874 .has_sibling = 1,
3875 .bcr_reg = VENUS0_BCR,
3876 .base = &virt_bases[MMSS_BASE],
3877 .c = {
3878 .dbg_name = "venus0_axi_clk",
3879 .ops = &clk_ops_branch,
3880 CLK_INIT(venus0_axi_clk.c),
3881 },
3882};
3883
3884static struct branch_clk venus0_ocmemnoc_clk = {
3885 .cbcr_reg = VENUS0_OCMEMNOC_CBCR,
3886 .has_sibling = 1,
3887 .bcr_reg = VENUS0_BCR,
3888 .base = &virt_bases[MMSS_BASE],
3889 .c = {
3890 .dbg_name = "venus0_ocmemnoc_clk",
3891 .ops = &clk_ops_branch,
3892 CLK_INIT(venus0_ocmemnoc_clk.c),
3893 },
3894};
3895
3896static struct branch_clk venus0_vcodec0_clk = {
3897 .cbcr_reg = VENUS0_VCODEC0_CBCR,
3898 .parent = &vcodec0_clk_src.c,
3899 .has_sibling = 0,
3900 .bcr_reg = VENUS0_BCR,
3901 .base = &virt_bases[MMSS_BASE],
3902 .c = {
3903 .dbg_name = "venus0_vcodec0_clk",
3904 .ops = &clk_ops_branch,
3905 CLK_INIT(venus0_vcodec0_clk.c),
3906 },
3907};
3908
3909static struct branch_clk oxili_gfx3d_clk = {
3910 .cbcr_reg = OXILI_GFX3D_CBCR,
3911 .has_sibling = 1,
3912 .bcr_reg = OXILI_BCR,
3913 .base = &virt_bases[MMSS_BASE],
3914 .c = {
3915 .dbg_name = "oxili_gfx3d_clk",
3916 .ops = &clk_ops_branch,
3917 CLK_INIT(oxili_gfx3d_clk.c),
3918 },
3919};
3920
3921static struct branch_clk oxilicx_ahb_clk = {
3922 .cbcr_reg = OXILICX_AHB_CBCR,
3923 .parent = &ahb_clk_src.c,
3924 .has_sibling = 1,
3925 .bcr_reg = OXILICX_BCR,
3926 .base = &virt_bases[MMSS_BASE],
3927 .c = {
3928 .dbg_name = "oxilicx_ahb_clk",
3929 .ops = &clk_ops_branch,
3930 CLK_INIT(oxilicx_ahb_clk.c),
3931 },
3932};
3933
3934static struct branch_clk oxilicx_axi_clk = {
3935 .cbcr_reg = OXILICX_AXI_CBCR,
3936 .parent = &axi_clk_src.c,
3937 .has_sibling = 1,
3938 .bcr_reg = OXILICX_BCR,
3939 .base = &virt_bases[MMSS_BASE],
3940 .c = {
3941 .dbg_name = "oxilicx_axi_clk",
3942 .ops = &clk_ops_branch,
3943 CLK_INIT(oxilicx_axi_clk.c),
3944 },
3945};
3946
3947static struct clk_freq_tbl ftbl_audio_core_slimbus_core_clock[] = {
3948 F_LPASS(28800000, lpapll0, 1, 15, 256),
3949 F_END
3950};
3951
3952static struct rcg_clk audio_core_slimbus_core_clk_src = {
3953 .cmd_rcgr_reg = SLIMBUS_CMD_RCGR,
3954 .set_rate = set_rate_mnd,
3955 .freq_tbl = ftbl_audio_core_slimbus_core_clock,
3956 .current_freq = &rcg_dummy_freq,
3957 .base = &virt_bases[LPASS_BASE],
3958 .c = {
3959 .dbg_name = "audio_core_slimbus_core_clk_src",
3960 .ops = &clk_ops_rcg_mnd,
3961 VDD_DIG_FMAX_MAP2(LOW, 70000000, NOMINAL, 140000000),
3962 CLK_INIT(audio_core_slimbus_core_clk_src.c),
3963 },
3964};
3965
3966static struct branch_clk audio_core_slimbus_core_clk = {
3967 .cbcr_reg = AUDIO_CORE_SLIMBUS_CORE_CBCR,
3968 .parent = &audio_core_slimbus_core_clk_src.c,
3969 .base = &virt_bases[LPASS_BASE],
3970 .c = {
3971 .dbg_name = "audio_core_slimbus_core_clk",
3972 .ops = &clk_ops_branch,
3973 CLK_INIT(audio_core_slimbus_core_clk.c),
3974 },
3975};
3976
3977static struct branch_clk audio_core_slimbus_lfabif_clk = {
3978 .cbcr_reg = AUDIO_CORE_SLIMBUS_LFABIF_CBCR,
3979 .has_sibling = 1,
3980 .base = &virt_bases[LPASS_BASE],
3981 .c = {
3982 .dbg_name = "audio_core_slimbus_lfabif_clk",
3983 .ops = &clk_ops_branch,
3984 CLK_INIT(audio_core_slimbus_lfabif_clk.c),
3985 },
3986};
3987
3988static struct clk_freq_tbl ftbl_audio_core_lpaif_clock[] = {
3989 F_LPASS( 512000, lpapll0, 16, 1, 60),
3990 F_LPASS( 768000, lpapll0, 16, 1, 40),
3991 F_LPASS( 1024000, lpapll0, 16, 1, 30),
3992 F_LPASS( 1536000, lpapll0, 16, 1, 10),
3993 F_LPASS( 2048000, lpapll0, 16, 1, 15),
3994 F_LPASS( 3072000, lpapll0, 16, 1, 10),
3995 F_LPASS( 4096000, lpapll0, 15, 1, 8),
3996 F_LPASS( 6144000, lpapll0, 10, 1, 8),
3997 F_LPASS( 8192000, lpapll0, 15, 1, 4),
3998 F_LPASS(12288000, lpapll0, 10, 1, 4),
3999 F_END
4000};
4001
4002static struct rcg_clk audio_core_lpaif_codec_spkr_clk_src = {
4003 .cmd_rcgr_reg = LPAIF_SPKR_CMD_RCGR,
4004 .set_rate = set_rate_mnd,
4005 .freq_tbl = ftbl_audio_core_lpaif_clock,
4006 .current_freq = &rcg_dummy_freq,
4007 .base = &virt_bases[LPASS_BASE],
4008 .c = {
4009 .dbg_name = "audio_core_lpaif_codec_spkr_clk_src",
4010 .ops = &clk_ops_rcg_mnd,
4011 VDD_DIG_FMAX_MAP2(LOW, 12000000, NOMINAL, 25000000),
4012 CLK_INIT(audio_core_lpaif_codec_spkr_clk_src.c),
4013 },
4014};
4015
4016static struct rcg_clk audio_core_lpaif_pri_clk_src = {
4017 .cmd_rcgr_reg = LPAIF_PRI_CMD_RCGR,
4018 .set_rate = set_rate_mnd,
4019 .freq_tbl = ftbl_audio_core_lpaif_clock,
4020 .current_freq = &rcg_dummy_freq,
4021 .base = &virt_bases[LPASS_BASE],
4022 .c = {
4023 .dbg_name = "audio_core_lpaif_pri_clk_src",
4024 .ops = &clk_ops_rcg_mnd,
4025 VDD_DIG_FMAX_MAP2(LOW, 12000000, NOMINAL, 25000000),
4026 CLK_INIT(audio_core_lpaif_pri_clk_src.c),
4027 },
4028};
4029
4030static struct rcg_clk audio_core_lpaif_sec_clk_src = {
4031 .cmd_rcgr_reg = LPAIF_SEC_CMD_RCGR,
4032 .set_rate = set_rate_mnd,
4033 .freq_tbl = ftbl_audio_core_lpaif_clock,
4034 .current_freq = &rcg_dummy_freq,
4035 .base = &virt_bases[LPASS_BASE],
4036 .c = {
4037 .dbg_name = "audio_core_lpaif_sec_clk_src",
4038 .ops = &clk_ops_rcg_mnd,
4039 VDD_DIG_FMAX_MAP2(LOW, 12000000, NOMINAL, 25000000),
4040 CLK_INIT(audio_core_lpaif_sec_clk_src.c),
4041 },
4042};
4043
4044static struct rcg_clk audio_core_lpaif_ter_clk_src = {
4045 .cmd_rcgr_reg = LPAIF_TER_CMD_RCGR,
4046 .set_rate = set_rate_mnd,
4047 .freq_tbl = ftbl_audio_core_lpaif_clock,
4048 .current_freq = &rcg_dummy_freq,
4049 .base = &virt_bases[LPASS_BASE],
4050 .c = {
4051 .dbg_name = "audio_core_lpaif_ter_clk_src",
4052 .ops = &clk_ops_rcg_mnd,
4053 VDD_DIG_FMAX_MAP2(LOW, 12000000, NOMINAL, 25000000),
4054 CLK_INIT(audio_core_lpaif_ter_clk_src.c),
4055 },
4056};
4057
4058static struct rcg_clk audio_core_lpaif_quad_clk_src = {
4059 .cmd_rcgr_reg = LPAIF_QUAD_CMD_RCGR,
4060 .set_rate = set_rate_mnd,
4061 .freq_tbl = ftbl_audio_core_lpaif_clock,
4062 .current_freq = &rcg_dummy_freq,
4063 .base = &virt_bases[LPASS_BASE],
4064 .c = {
4065 .dbg_name = "audio_core_lpaif_quad_clk_src",
4066 .ops = &clk_ops_rcg_mnd,
4067 VDD_DIG_FMAX_MAP2(LOW, 12000000, NOMINAL, 25000000),
4068 CLK_INIT(audio_core_lpaif_quad_clk_src.c),
4069 },
4070};
4071
4072static struct rcg_clk audio_core_lpaif_pcm0_clk_src = {
4073 .cmd_rcgr_reg = LPAIF_PCM0_CMD_RCGR,
4074 .set_rate = set_rate_mnd,
4075 .freq_tbl = ftbl_audio_core_lpaif_clock,
4076 .current_freq = &rcg_dummy_freq,
4077 .base = &virt_bases[LPASS_BASE],
4078 .c = {
4079 .dbg_name = "audio_core_lpaif_pcm0_clk_src",
4080 .ops = &clk_ops_rcg_mnd,
4081 VDD_DIG_FMAX_MAP2(LOW, 12000000, NOMINAL, 25000000),
4082 CLK_INIT(audio_core_lpaif_pcm0_clk_src.c),
4083 },
4084};
4085
4086static struct rcg_clk audio_core_lpaif_pcm1_clk_src = {
4087 .cmd_rcgr_reg = LPAIF_PCM1_CMD_RCGR,
4088 .set_rate = set_rate_mnd,
4089 .freq_tbl = ftbl_audio_core_lpaif_clock,
4090 .current_freq = &rcg_dummy_freq,
4091 .base = &virt_bases[LPASS_BASE],
4092 .c = {
4093 .dbg_name = "audio_core_lpaif_pcm1_clk_src",
4094 .ops = &clk_ops_rcg_mnd,
4095 VDD_DIG_FMAX_MAP2(LOW, 12000000, NOMINAL, 25000000),
4096 CLK_INIT(audio_core_lpaif_pcm1_clk_src.c),
4097 },
4098};
4099
4100static struct branch_clk audio_core_lpaif_codec_spkr_osr_clk = {
4101 .cbcr_reg = AUDIO_CORE_LPAIF_CODEC_SPKR_OSR_CBCR,
4102 .parent = &audio_core_lpaif_codec_spkr_clk_src.c,
4103 .has_sibling = 1,
4104 .base = &virt_bases[LPASS_BASE],
4105 .c = {
4106 .dbg_name = "audio_core_lpaif_codec_spkr_clk_src",
4107 .ops = &clk_ops_branch,
4108 CLK_INIT(audio_core_lpaif_codec_spkr_clk_src.c),
4109 },
4110};
4111
4112static struct branch_clk audio_core_lpaif_codec_spkr_ebit_clk = {
4113 .cbcr_reg = AUDIO_CORE_LPAIF_CODEC_SPKR_EBIT_CBCR,
4114 .parent = &audio_core_lpaif_codec_spkr_clk_src.c,
4115 .has_sibling = 1,
4116 .base = &virt_bases[LPASS_BASE],
4117 .c = {
4118 .dbg_name = "audio_core_lpaif_codec_spkr_clk_src",
4119 .ops = &clk_ops_branch,
4120 CLK_INIT(audio_core_lpaif_codec_spkr_clk_src.c),
4121 },
4122};
4123
4124static struct branch_clk audio_core_lpaif_codec_spkr_ibit_clk = {
4125 .cbcr_reg = AUDIO_CORE_LPAIF_CODEC_SPKR_IBIT_CBCR,
4126 .parent = &audio_core_lpaif_codec_spkr_clk_src.c,
4127 .has_sibling = 1,
4128 .max_div = 16,
4129 .base = &virt_bases[LPASS_BASE],
4130 .c = {
4131 .dbg_name = "audio_core_lpaif_codec_spkr_clk_src",
4132 .ops = &clk_ops_branch,
4133 CLK_INIT(audio_core_lpaif_codec_spkr_clk_src.c),
4134 },
4135};
4136
4137static struct branch_clk audio_core_lpaif_pri_osr_clk = {
4138 .cbcr_reg = AUDIO_CORE_LPAIF_PRI_OSR_CBCR,
4139 .parent = &audio_core_lpaif_pri_clk_src.c,
4140 .has_sibling = 1,
4141 .base = &virt_bases[LPASS_BASE],
4142 .c = {
4143 .dbg_name = "audio_core_lpaif_pri_osr_clk",
4144 .ops = &clk_ops_branch,
4145 CLK_INIT(audio_core_lpaif_pri_osr_clk.c),
4146 },
4147};
4148
4149static struct branch_clk audio_core_lpaif_pri_ebit_clk = {
4150 .cbcr_reg = AUDIO_CORE_LPAIF_PRI_EBIT_CBCR,
4151 .parent = &audio_core_lpaif_pri_clk_src.c,
4152 .has_sibling = 1,
4153 .base = &virt_bases[LPASS_BASE],
4154 .c = {
4155 .dbg_name = "audio_core_lpaif_pri_ebit_clk",
4156 .ops = &clk_ops_branch,
4157 CLK_INIT(audio_core_lpaif_pri_ebit_clk.c),
4158 },
4159};
4160
4161static struct branch_clk audio_core_lpaif_pri_ibit_clk = {
4162 .cbcr_reg = AUDIO_CORE_LPAIF_PRI_IBIT_CBCR,
4163 .parent = &audio_core_lpaif_pri_clk_src.c,
4164 .has_sibling = 1,
4165 .max_div = 16,
4166 .base = &virt_bases[LPASS_BASE],
4167 .c = {
4168 .dbg_name = "audio_core_lpaif_pri_ibit_clk",
4169 .ops = &clk_ops_branch,
4170 CLK_INIT(audio_core_lpaif_pri_ibit_clk.c),
4171 },
4172};
4173
4174static struct branch_clk audio_core_lpaif_sec_osr_clk = {
4175 .cbcr_reg = AUDIO_CORE_LPAIF_SEC_OSR_CBCR,
4176 .parent = &audio_core_lpaif_sec_clk_src.c,
4177 .has_sibling = 1,
4178 .base = &virt_bases[LPASS_BASE],
4179 .c = {
4180 .dbg_name = "audio_core_lpaif_sec_osr_clk",
4181 .ops = &clk_ops_branch,
4182 CLK_INIT(audio_core_lpaif_sec_osr_clk.c),
4183 },
4184};
4185
4186static struct branch_clk audio_core_lpaif_sec_ebit_clk = {
4187 .cbcr_reg = AUDIO_CORE_LPAIF_SEC_EBIT_CBCR,
4188 .parent = &audio_core_lpaif_sec_clk_src.c,
4189 .has_sibling = 1,
4190 .base = &virt_bases[LPASS_BASE],
4191 .c = {
4192 .dbg_name = "audio_core_lpaif_sec_ebit_clk",
4193 .ops = &clk_ops_branch,
4194 CLK_INIT(audio_core_lpaif_sec_ebit_clk.c),
4195 },
4196};
4197
4198static struct branch_clk audio_core_lpaif_sec_ibit_clk = {
4199 .cbcr_reg = AUDIO_CORE_LPAIF_SEC_IBIT_CBCR,
4200 .parent = &audio_core_lpaif_sec_clk_src.c,
4201 .has_sibling = 1,
4202 .max_div = 16,
4203 .base = &virt_bases[LPASS_BASE],
4204 .c = {
4205 .dbg_name = "audio_core_lpaif_sec_ibit_clk",
4206 .ops = &clk_ops_branch,
4207 CLK_INIT(audio_core_lpaif_sec_ibit_clk.c),
4208 },
4209};
4210
4211static struct branch_clk audio_core_lpaif_ter_osr_clk = {
4212 .cbcr_reg = AUDIO_CORE_LPAIF_TER_OSR_CBCR,
4213 .parent = &audio_core_lpaif_ter_clk_src.c,
4214 .has_sibling = 1,
4215 .base = &virt_bases[LPASS_BASE],
4216 .c = {
4217 .dbg_name = "audio_core_lpaif_ter_osr_clk",
4218 .ops = &clk_ops_branch,
4219 CLK_INIT(audio_core_lpaif_ter_osr_clk.c),
4220 },
4221};
4222
4223static struct branch_clk audio_core_lpaif_ter_ebit_clk = {
4224 .cbcr_reg = AUDIO_CORE_LPAIF_TER_EBIT_CBCR,
4225 .parent = &audio_core_lpaif_ter_clk_src.c,
4226 .has_sibling = 1,
4227 .base = &virt_bases[LPASS_BASE],
4228 .c = {
4229 .dbg_name = "audio_core_lpaif_ter_ebit_clk",
4230 .ops = &clk_ops_branch,
4231 CLK_INIT(audio_core_lpaif_ter_ebit_clk.c),
4232 },
4233};
4234
4235static struct branch_clk audio_core_lpaif_ter_ibit_clk = {
4236 .cbcr_reg = AUDIO_CORE_LPAIF_TER_IBIT_CBCR,
4237 .parent = &audio_core_lpaif_ter_clk_src.c,
4238 .has_sibling = 1,
4239 .max_div = 16,
4240 .base = &virt_bases[LPASS_BASE],
4241 .c = {
4242 .dbg_name = "audio_core_lpaif_ter_ibit_clk",
4243 .ops = &clk_ops_branch,
4244 CLK_INIT(audio_core_lpaif_ter_ibit_clk.c),
4245 },
4246};
4247
4248static struct branch_clk audio_core_lpaif_quad_osr_clk = {
4249 .cbcr_reg = AUDIO_CORE_LPAIF_QUAD_OSR_CBCR,
4250 .parent = &audio_core_lpaif_quad_clk_src.c,
4251 .has_sibling = 1,
4252 .base = &virt_bases[LPASS_BASE],
4253 .c = {
4254 .dbg_name = "audio_core_lpaif_quad_osr_clk",
4255 .ops = &clk_ops_branch,
4256 CLK_INIT(audio_core_lpaif_quad_osr_clk.c),
4257 },
4258};
4259
4260static struct branch_clk audio_core_lpaif_quad_ebit_clk = {
4261 .cbcr_reg = AUDIO_CORE_LPAIF_QUAD_EBIT_CBCR,
4262 .parent = &audio_core_lpaif_quad_clk_src.c,
4263 .has_sibling = 1,
4264 .base = &virt_bases[LPASS_BASE],
4265 .c = {
4266 .dbg_name = "audio_core_lpaif_quad_ebit_clk",
4267 .ops = &clk_ops_branch,
4268 CLK_INIT(audio_core_lpaif_quad_ebit_clk.c),
4269 },
4270};
4271
4272static struct branch_clk audio_core_lpaif_quad_ibit_clk = {
4273 .cbcr_reg = AUDIO_CORE_LPAIF_QUAD_IBIT_CBCR,
4274 .parent = &audio_core_lpaif_quad_clk_src.c,
4275 .has_sibling = 1,
4276 .max_div = 16,
4277 .base = &virt_bases[LPASS_BASE],
4278 .c = {
4279 .dbg_name = "audio_core_lpaif_quad_ibit_clk",
4280 .ops = &clk_ops_branch,
4281 CLK_INIT(audio_core_lpaif_quad_ibit_clk.c),
4282 },
4283};
4284
4285static struct branch_clk audio_core_lpaif_pcm0_ebit_clk = {
4286 .cbcr_reg = AUDIO_CORE_LPAIF_PCM0_EBIT_CBCR,
4287 .parent = &audio_core_lpaif_pcm0_clk_src.c,
4288 .has_sibling = 1,
4289 .base = &virt_bases[LPASS_BASE],
4290 .c = {
4291 .dbg_name = "audio_core_lpaif_pcm0_ebit_clk",
4292 .ops = &clk_ops_branch,
4293 CLK_INIT(audio_core_lpaif_pcm0_ebit_clk.c),
4294 },
4295};
4296
4297static struct branch_clk audio_core_lpaif_pcm0_ibit_clk = {
4298 .cbcr_reg = AUDIO_CORE_LPAIF_PCM0_IBIT_CBCR,
4299 .parent = &audio_core_lpaif_pcm0_clk_src.c,
4300 .has_sibling = 1,
4301 .max_div = 16,
4302 .base = &virt_bases[LPASS_BASE],
4303 .c = {
4304 .dbg_name = "audio_core_lpaif_pcm0_ibit_clk",
4305 .ops = &clk_ops_branch,
4306 CLK_INIT(audio_core_lpaif_pcm0_ibit_clk.c),
4307 },
4308};
4309
4310static struct branch_clk audio_core_lpaif_pcm1_ebit_clk = {
4311 .cbcr_reg = AUDIO_CORE_LPAIF_PCM1_EBIT_CBCR,
4312 .parent = &audio_core_lpaif_pcm1_clk_src.c,
4313 .has_sibling = 1,
4314 .base = &virt_bases[LPASS_BASE],
4315 .c = {
4316 .dbg_name = "audio_core_lpaif_pcm1_ebit_clk",
4317 .ops = &clk_ops_branch,
4318 CLK_INIT(audio_core_lpaif_pcm1_ebit_clk.c),
4319 },
4320};
4321
4322static struct branch_clk audio_core_lpaif_pcm1_ibit_clk = {
4323 .cbcr_reg = AUDIO_CORE_LPAIF_PCM1_IBIT_CBCR,
4324 .parent = &audio_core_lpaif_pcm1_clk_src.c,
4325 .has_sibling = 1,
4326 .max_div = 16,
4327 .base = &virt_bases[LPASS_BASE],
4328 .c = {
4329 .dbg_name = "audio_core_lpaif_pcm1_ibit_clk",
4330 .ops = &clk_ops_branch,
4331 CLK_INIT(audio_core_lpaif_pcm1_ibit_clk.c),
4332 },
4333};
4334
Vikram Mulukutlaa967db42012-05-10 16:20:40 -07004335static struct branch_clk q6ss_ahb_lfabif_clk = {
4336 .cbcr_reg = LPASS_Q6SS_AHB_LFABIF_CBCR,
4337 .has_sibling = 1,
4338 .base = &virt_bases[LPASS_BASE],
4339 .c = {
4340 .dbg_name = "q6ss_ahb_lfabif_clk",
4341 .ops = &clk_ops_branch,
4342 CLK_INIT(q6ss_ahb_lfabif_clk.c),
4343 },
4344};
4345
4346static struct branch_clk q6ss_xo_clk = {
4347 .cbcr_reg = LPASS_Q6SS_XO_CBCR,
4348 .bcr_reg = LPASS_Q6SS_BCR,
4349 .has_sibling = 1,
4350 .base = &virt_bases[LPASS_BASE],
4351 .c = {
4352 .dbg_name = "q6ss_xo_clk",
4353 .ops = &clk_ops_branch,
4354 CLK_INIT(q6ss_xo_clk.c),
4355 },
4356};
4357
4358static struct branch_clk mss_xo_q6_clk = {
4359 .cbcr_reg = MSS_XO_Q6_CBCR,
4360 .bcr_reg = MSS_Q6SS_BCR,
4361 .has_sibling = 1,
4362 .base = &virt_bases[MSS_BASE],
4363 .c = {
4364 .dbg_name = "mss_xo_q6_clk",
4365 .ops = &clk_ops_branch,
4366 CLK_INIT(mss_xo_q6_clk.c),
4367 .depends = &gcc_mss_cfg_ahb_clk.c,
4368 },
4369};
4370
4371static struct branch_clk mss_bus_q6_clk = {
4372 .cbcr_reg = MSS_BUS_Q6_CBCR,
4373 .bcr_reg = MSS_Q6SS_BCR,
4374 .has_sibling = 1,
4375 .base = &virt_bases[MSS_BASE],
4376 .c = {
4377 .dbg_name = "mss_bus_q6_clk",
4378 .ops = &clk_ops_branch,
4379 CLK_INIT(mss_bus_q6_clk.c),
4380 .depends = &gcc_mss_cfg_ahb_clk.c,
4381 },
4382};
4383
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004384#ifdef CONFIG_DEBUG_FS
4385
4386struct measure_mux_entry {
4387 struct clk *c;
4388 int base;
4389 u32 debug_mux;
4390};
4391
4392struct measure_mux_entry measure_mux[] = {
4393 {&gcc_bam_dma_ahb_clk.c, GCC_BASE, 0x00e8},
4394 {&gcc_blsp1_ahb_clk.c, GCC_BASE, 0x0090},
4395 {&gcc_blsp1_qup1_i2c_apps_clk.c, GCC_BASE, 0x0093},
4396 {&gcc_blsp1_qup1_spi_apps_clk.c, GCC_BASE, 0x0092},
4397 {&gcc_blsp1_qup2_i2c_apps_clk.c, GCC_BASE, 0x0098},
4398 {&gcc_blsp1_qup2_spi_apps_clk.c, GCC_BASE, 0x0096},
4399 {&gcc_blsp1_qup3_i2c_apps_clk.c, GCC_BASE, 0x009c},
4400 {&gcc_blsp1_qup3_spi_apps_clk.c, GCC_BASE, 0x009b},
4401 {&gcc_blsp1_qup4_i2c_apps_clk.c, GCC_BASE, 0x00a1},
4402 {&gcc_blsp1_qup4_spi_apps_clk.c, GCC_BASE, 0x00a0},
4403 {&gcc_blsp1_qup5_i2c_apps_clk.c, GCC_BASE, 0x00a5},
4404 {&gcc_blsp1_qup5_spi_apps_clk.c, GCC_BASE, 0x00a4},
4405 {&gcc_blsp1_qup6_i2c_apps_clk.c, GCC_BASE, 0x00aa},
4406 {&gcc_blsp1_qup6_spi_apps_clk.c, GCC_BASE, 0x00a9},
4407 {&gcc_blsp1_uart1_apps_clk.c, GCC_BASE, 0x0094},
4408 {&gcc_blsp1_uart2_apps_clk.c, GCC_BASE, 0x0099},
4409 {&gcc_blsp1_uart3_apps_clk.c, GCC_BASE, 0x009d},
4410 {&gcc_blsp1_uart4_apps_clk.c, GCC_BASE, 0x00a2},
4411 {&gcc_blsp1_uart5_apps_clk.c, GCC_BASE, 0x00a6},
4412 {&gcc_blsp1_uart6_apps_clk.c, GCC_BASE, 0x00ab},
4413 {&gcc_blsp2_ahb_clk.c, GCC_BASE, 0x00b0},
4414 {&gcc_blsp2_qup1_i2c_apps_clk.c, GCC_BASE, 0x00b3},
4415 {&gcc_blsp2_qup1_spi_apps_clk.c, GCC_BASE, 0x00b2},
4416 {&gcc_blsp2_qup2_i2c_apps_clk.c, GCC_BASE, 0x00b8},
4417 {&gcc_blsp2_qup2_spi_apps_clk.c, GCC_BASE, 0x00b6},
4418 {&gcc_blsp2_qup3_i2c_apps_clk.c, GCC_BASE, 0x00bc},
4419 {&gcc_blsp2_qup3_spi_apps_clk.c, GCC_BASE, 0x00bb},
4420 {&gcc_blsp2_qup4_i2c_apps_clk.c, GCC_BASE, 0x00c1},
4421 {&gcc_blsp2_qup4_spi_apps_clk.c, GCC_BASE, 0x00c0},
4422 {&gcc_blsp2_qup5_i2c_apps_clk.c, GCC_BASE, 0x00c5},
4423 {&gcc_blsp2_qup5_spi_apps_clk.c, GCC_BASE, 0x00c4},
4424 {&gcc_blsp2_qup6_i2c_apps_clk.c, GCC_BASE, 0x00ca},
4425 {&gcc_blsp2_qup6_spi_apps_clk.c, GCC_BASE, 0x00c9},
4426 {&gcc_blsp2_uart1_apps_clk.c, GCC_BASE, 0x00b4},
4427 {&gcc_blsp2_uart2_apps_clk.c, GCC_BASE, 0x00b9},
4428 {&gcc_blsp2_uart3_apps_clk.c, GCC_BASE, 0x00bd},
4429 {&gcc_blsp2_uart4_apps_clk.c, GCC_BASE, 0x00c2},
4430 {&gcc_blsp2_uart5_apps_clk.c, GCC_BASE, 0x00c6},
4431 {&gcc_blsp2_uart6_apps_clk.c, GCC_BASE, 0x00cb},
Vikram Mulukutlaa967db42012-05-10 16:20:40 -07004432 {&gcc_boot_rom_ahb_clk.c, GCC_BASE, 0x0100},
4433 {&gcc_mss_cfg_ahb_clk.c, GCC_BASE, 0x0030},
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004434 {&gcc_ce1_clk.c, GCC_BASE, 0x0140},
4435 {&gcc_ce2_clk.c, GCC_BASE, 0x0148},
4436 {&gcc_pdm2_clk.c, GCC_BASE, 0x00da},
4437 {&gcc_pdm_ahb_clk.c, GCC_BASE, 0x00d8},
4438 {&gcc_prng_ahb_clk.c, GCC_BASE, 0x00e0},
4439 {&gcc_sdcc1_ahb_clk.c, GCC_BASE, 0x0071},
4440 {&gcc_sdcc1_apps_clk.c, GCC_BASE, 0x0070},
4441 {&gcc_sdcc2_ahb_clk.c, GCC_BASE, 0x0079},
4442 {&gcc_sdcc2_apps_clk.c, GCC_BASE, 0x0078},
4443 {&gcc_sdcc3_ahb_clk.c, GCC_BASE, 0x0081},
4444 {&gcc_sdcc3_apps_clk.c, GCC_BASE, 0x0080},
4445 {&gcc_sdcc4_ahb_clk.c, GCC_BASE, 0x0089},
4446 {&gcc_sdcc4_apps_clk.c, GCC_BASE, 0x0088},
4447 {&gcc_tsif_ahb_clk.c, GCC_BASE, 0x00f0},
4448 {&gcc_tsif_ref_clk.c, GCC_BASE, 0x00f1},
4449 {&gcc_usb30_master_clk.c, GCC_BASE, 0x0050},
4450 {&gcc_usb30_mock_utmi_clk.c, GCC_BASE, 0x0052},
4451 {&gcc_usb_hs_ahb_clk.c, GCC_BASE, 0x0069},
4452 {&gcc_usb_hs_system_clk.c, GCC_BASE, 0x0068},
4453 {&gcc_usb_hsic_ahb_clk.c, GCC_BASE, 0x0060},
4454 {&gcc_usb_hsic_clk.c, GCC_BASE, 0x0062},
4455 {&gcc_usb_hsic_io_cal_clk.c, GCC_BASE, 0x0063},
4456 {&gcc_usb_hsic_system_clk.c, GCC_BASE, 0x0061},
4457 {&mmss_mmssnoc_ahb_clk.c, MMSS_BASE, 0x0001},
4458 {&mmss_mmssnoc_axi_clk.c, MMSS_BASE, 0x0004},
4459 {&camss_cci_cci_ahb_clk.c, MMSS_BASE, 0x002e},
4460 {&camss_cci_cci_clk.c, MMSS_BASE, 0x002d},
4461 {&camss_csi0_ahb_clk.c, MMSS_BASE, 0x0042},
4462 {&camss_csi0_clk.c, MMSS_BASE, 0x0041},
4463 {&camss_csi0phy_clk.c, MMSS_BASE, 0x0043},
4464 {&camss_csi0pix_clk.c, MMSS_BASE, 0x0045},
4465 {&camss_csi0rdi_clk.c, MMSS_BASE, 0x0044},
4466 {&camss_csi1_ahb_clk.c, MMSS_BASE, 0x0047},
4467 {&camss_csi1_clk.c, MMSS_BASE, 0x0046},
4468 {&camss_csi1phy_clk.c, MMSS_BASE, 0x0048},
4469 {&camss_csi1pix_clk.c, MMSS_BASE, 0x004a},
4470 {&camss_csi1rdi_clk.c, MMSS_BASE, 0x0049},
4471 {&camss_csi2_ahb_clk.c, MMSS_BASE, 0x004c},
4472 {&camss_csi2_clk.c, MMSS_BASE, 0x004b},
4473 {&camss_csi2phy_clk.c, MMSS_BASE, 0x004d},
4474 {&camss_csi2pix_clk.c, MMSS_BASE, 0x004f},
4475 {&camss_csi2rdi_clk.c, MMSS_BASE, 0x004e},
4476 {&camss_csi3_ahb_clk.c, MMSS_BASE, 0x0051},
4477 {&camss_csi3_clk.c, MMSS_BASE, 0x0050},
4478 {&camss_csi3phy_clk.c, MMSS_BASE, 0x0052},
4479 {&camss_csi3pix_clk.c, MMSS_BASE, 0x0054},
4480 {&camss_csi3rdi_clk.c, MMSS_BASE, 0x0053},
4481 {&camss_csi_vfe0_clk.c, MMSS_BASE, 0x003f},
4482 {&camss_csi_vfe1_clk.c, MMSS_BASE, 0x0040},
4483 {&camss_gp0_clk.c, MMSS_BASE, 0x0027},
4484 {&camss_gp1_clk.c, MMSS_BASE, 0x0028},
4485 {&camss_ispif_ahb_clk.c, MMSS_BASE, 0x0055},
4486 {&camss_jpeg_jpeg0_clk.c, MMSS_BASE, 0x0032},
4487 {&camss_jpeg_jpeg1_clk.c, MMSS_BASE, 0x0033},
4488 {&camss_jpeg_jpeg2_clk.c, MMSS_BASE, 0x0034},
4489 {&camss_jpeg_jpeg_ahb_clk.c, MMSS_BASE, 0x0035},
4490 {&camss_jpeg_jpeg_axi_clk.c, MMSS_BASE, 0x0036},
4491 {&camss_jpeg_jpeg_ocmemnoc_clk.c, MMSS_BASE, 0x0037},
4492 {&camss_mclk0_clk.c, MMSS_BASE, 0x0029},
4493 {&camss_mclk1_clk.c, MMSS_BASE, 0x002a},
4494 {&camss_mclk2_clk.c, MMSS_BASE, 0x002b},
4495 {&camss_mclk3_clk.c, MMSS_BASE, 0x002c},
4496 {&camss_micro_ahb_clk.c, MMSS_BASE, 0x0026},
4497 {&camss_phy0_csi0phytimer_clk.c, MMSS_BASE, 0x002f},
4498 {&camss_phy1_csi1phytimer_clk.c, MMSS_BASE, 0x0030},
4499 {&camss_phy2_csi2phytimer_clk.c, MMSS_BASE, 0x0031},
4500 {&camss_top_ahb_clk.c, MMSS_BASE, 0x0025},
4501 {&camss_vfe_cpp_ahb_clk.c, MMSS_BASE, 0x003b},
4502 {&camss_vfe_cpp_clk.c, MMSS_BASE, 0x003a},
4503 {&camss_vfe_vfe0_clk.c, MMSS_BASE, 0x0038},
4504 {&camss_vfe_vfe1_clk.c, MMSS_BASE, 0x0039},
4505 {&camss_vfe_vfe_ahb_clk.c, MMSS_BASE, 0x003c},
4506 {&camss_vfe_vfe_axi_clk.c, MMSS_BASE, 0x003d},
4507 {&camss_vfe_vfe_ocmemnoc_clk.c, MMSS_BASE, 0x003e},
4508 {&mdss_ahb_clk.c, MMSS_BASE, 0x0022},
4509 {&mdss_hdmi_clk.c, MMSS_BASE, 0x001d},
4510 {&mdss_mdp_clk.c, MMSS_BASE, 0x0014},
4511 {&mdss_mdp_lut_clk.c, MMSS_BASE, 0x0015},
4512 {&mdss_axi_clk.c, MMSS_BASE, 0x0024},
4513 {&mdss_vsync_clk.c, MMSS_BASE, 0x001c},
4514 {&mdss_esc0_clk.c, MMSS_BASE, 0x0020},
4515 {&mdss_esc1_clk.c, MMSS_BASE, 0x0021},
4516 {&mdss_edpaux_clk.c, MMSS_BASE, 0x001b},
4517 {&mdss_byte0_clk.c, MMSS_BASE, 0x001e},
4518 {&mdss_byte1_clk.c, MMSS_BASE, 0x001f},
4519 {&mdss_edplink_clk.c, MMSS_BASE, 0x001a},
4520 {&mdss_edppixel_clk.c, MMSS_BASE, 0x0019},
4521 {&mdss_extpclk_clk.c, MMSS_BASE, 0x0018},
4522 {&mdss_hdmi_ahb_clk.c, MMSS_BASE, 0x0023},
4523 {&mdss_pclk0_clk.c, MMSS_BASE, 0x0016},
4524 {&mdss_pclk1_clk.c, MMSS_BASE, 0x0017},
4525 {&audio_core_lpaif_pri_clk_src.c, LPASS_BASE, 0x0017},
4526 {&audio_core_lpaif_sec_clk_src.c, LPASS_BASE, 0x0016},
4527 {&audio_core_lpaif_ter_clk_src.c, LPASS_BASE, 0x0015},
4528 {&audio_core_lpaif_quad_clk_src.c, LPASS_BASE, 0x0014},
4529 {&audio_core_lpaif_pcm0_clk_src.c, LPASS_BASE, 0x0013},
4530 {&audio_core_lpaif_pcm1_clk_src.c, LPASS_BASE, 0x0012},
4531 {&audio_core_slimbus_core_clk.c, LPASS_BASE, 0x003d},
4532 {&audio_core_slimbus_lfabif_clk.c, LPASS_BASE, 0x003e},
Vikram Mulukutlaa967db42012-05-10 16:20:40 -07004533 {&q6ss_xo_clk.c, LPASS_BASE, 0x002b},
4534 {&q6ss_ahb_lfabif_clk.c, LPASS_BASE, 0x001e},
4535 {&mss_bus_q6_clk.c, MSS_BASE, 0x003c},
4536 {&mss_xo_q6_clk.c, MSS_BASE, 0x0007},
4537
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004538 {&dummy_clk, N_BASES, 0x0000},
4539};
4540
4541static int measure_clk_set_parent(struct clk *c, struct clk *parent)
4542{
4543 struct measure_clk *clk = to_measure_clk(c);
4544 unsigned long flags;
4545 u32 regval, clk_sel, i;
4546
4547 if (!parent)
4548 return -EINVAL;
4549
4550 for (i = 0; i < (ARRAY_SIZE(measure_mux) - 1); i++)
4551 if (measure_mux[i].c == parent)
4552 break;
4553
4554 if (measure_mux[i].c == &dummy_clk)
4555 return -EINVAL;
4556
4557 spin_lock_irqsave(&local_clock_reg_lock, flags);
4558 /*
4559 * Program the test vector, measurement period (sample_ticks)
4560 * and scaling multiplier.
4561 */
4562 clk->sample_ticks = 0x10000;
4563 clk->multiplier = 1;
4564
Vikram Mulukutlaa967db42012-05-10 16:20:40 -07004565 writel_relaxed(0, MSS_REG_BASE(MSS_DEBUG_CLK_CTL_REG));
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004566 writel_relaxed(0, LPASS_REG_BASE(LPASS_DEBUG_CLK_CTL_REG));
4567 writel_relaxed(0, MMSS_REG_BASE(MMSS_DEBUG_CLK_CTL_REG));
4568 writel_relaxed(0, GCC_REG_BASE(GCC_DEBUG_CLK_CTL_REG));
4569
4570 switch (measure_mux[i].base) {
4571
4572 case GCC_BASE:
4573 clk_sel = measure_mux[i].debug_mux;
4574 break;
4575
4576 case MMSS_BASE:
4577 clk_sel = 0x02C;
4578 regval = BVAL(11, 0, measure_mux[i].debug_mux);
4579 writel_relaxed(regval, MMSS_REG_BASE(MMSS_DEBUG_CLK_CTL_REG));
4580
4581 /* Activate debug clock output */
4582 regval |= BIT(16);
4583 writel_relaxed(regval, MMSS_REG_BASE(MMSS_DEBUG_CLK_CTL_REG));
4584 break;
4585
4586 case LPASS_BASE:
4587 clk_sel = 0x169;
4588 regval = BVAL(11, 0, measure_mux[i].debug_mux);
4589 writel_relaxed(regval, LPASS_REG_BASE(LPASS_DEBUG_CLK_CTL_REG));
4590
4591 /* Activate debug clock output */
4592 regval |= BIT(16);
4593 writel_relaxed(regval, LPASS_REG_BASE(LPASS_DEBUG_CLK_CTL_REG));
4594 break;
4595
Vikram Mulukutlaa967db42012-05-10 16:20:40 -07004596 case MSS_BASE:
4597 clk_sel = 0x32;
4598 regval = BVAL(5, 0, measure_mux[i].debug_mux);
4599 writel_relaxed(regval, MSS_REG_BASE(MSS_DEBUG_CLK_CTL_REG));
4600 break;
4601
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004602 default:
4603 return -EINVAL;
4604 }
4605
4606 /* Set debug mux clock index */
4607 regval = BVAL(8, 0, clk_sel);
4608 writel_relaxed(regval, GCC_REG_BASE(GCC_DEBUG_CLK_CTL_REG));
4609
4610 /* Activate debug clock output */
4611 regval |= BIT(16);
4612 writel_relaxed(regval, GCC_REG_BASE(GCC_DEBUG_CLK_CTL_REG));
4613
4614 /* Make sure test vector is set before starting measurements. */
4615 mb();
4616 spin_unlock_irqrestore(&local_clock_reg_lock, flags);
4617
4618 return 0;
4619}
4620
4621/* Sample clock for 'ticks' reference clock ticks. */
4622static u32 run_measurement(unsigned ticks)
4623{
4624 /* Stop counters and set the XO4 counter start value. */
4625 writel_relaxed(ticks, GCC_REG_BASE(CLOCK_FRQ_MEASURE_CTL_REG));
4626
4627 /* Wait for timer to become ready. */
4628 while ((readl_relaxed(GCC_REG_BASE(CLOCK_FRQ_MEASURE_STATUS_REG)) &
4629 BIT(25)) != 0)
4630 cpu_relax();
4631
4632 /* Run measurement and wait for completion. */
4633 writel_relaxed(BIT(20)|ticks, GCC_REG_BASE(CLOCK_FRQ_MEASURE_CTL_REG));
4634 while ((readl_relaxed(GCC_REG_BASE(CLOCK_FRQ_MEASURE_STATUS_REG)) &
4635 BIT(25)) == 0)
4636 cpu_relax();
4637
4638 /* Return measured ticks. */
4639 return readl_relaxed(GCC_REG_BASE(CLOCK_FRQ_MEASURE_STATUS_REG)) &
4640 BM(24, 0);
4641}
4642
4643/*
4644 * Perform a hardware rate measurement for a given clock.
4645 * FOR DEBUG USE ONLY: Measurements take ~15 ms!
4646 */
4647static unsigned long measure_clk_get_rate(struct clk *c)
4648{
4649 unsigned long flags;
4650 u32 gcc_xo4_reg_backup;
4651 u64 raw_count_short, raw_count_full;
4652 struct measure_clk *clk = to_measure_clk(c);
4653 unsigned ret;
4654
4655 ret = clk_prepare_enable(&cxo_clk_src.c);
4656 if (ret) {
4657 pr_warning("CXO clock failed to enable. Can't measure\n");
4658 return 0;
4659 }
4660
4661 spin_lock_irqsave(&local_clock_reg_lock, flags);
4662
4663 /* Enable CXO/4 and RINGOSC branch. */
4664 gcc_xo4_reg_backup = readl_relaxed(GCC_REG_BASE(GCC_XO_DIV4_CBCR_REG));
4665 writel_relaxed(0x1, GCC_REG_BASE(GCC_XO_DIV4_CBCR_REG));
4666
4667 /*
4668 * The ring oscillator counter will not reset if the measured clock
4669 * is not running. To detect this, run a short measurement before
4670 * the full measurement. If the raw results of the two are the same
4671 * then the clock must be off.
4672 */
4673
4674 /* Run a short measurement. (~1 ms) */
4675 raw_count_short = run_measurement(0x1000);
4676 /* Run a full measurement. (~14 ms) */
4677 raw_count_full = run_measurement(clk->sample_ticks);
4678
4679 writel_relaxed(gcc_xo4_reg_backup, GCC_REG_BASE(GCC_XO_DIV4_CBCR_REG));
4680
4681 /* Return 0 if the clock is off. */
4682 if (raw_count_full == raw_count_short) {
4683 ret = 0;
4684 } else {
4685 /* Compute rate in Hz. */
4686 raw_count_full = ((raw_count_full * 10) + 15) * 4800000;
4687 do_div(raw_count_full, ((clk->sample_ticks * 10) + 35));
4688 ret = (raw_count_full * clk->multiplier);
4689 }
4690
4691 spin_unlock_irqrestore(&local_clock_reg_lock, flags);
4692
4693 clk_disable_unprepare(&cxo_clk_src.c);
4694
4695 return ret;
4696}
4697#else /* !CONFIG_DEBUG_FS */
4698static int measure_clk_set_parent(struct clk *clk, struct clk *parent)
4699{
4700 return -EINVAL;
4701}
4702
4703static unsigned long measure_clk_get_rate(struct clk *clk)
4704{
4705 return 0;
4706}
4707#endif /* CONFIG_DEBUG_FS */
4708
Matt Wagantallae053222012-05-14 19:42:07 -07004709static struct clk_ops clk_ops_measure = {
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004710 .set_parent = measure_clk_set_parent,
4711 .get_rate = measure_clk_get_rate,
4712};
4713
4714static struct measure_clk measure_clk = {
4715 .c = {
4716 .dbg_name = "measure_clk",
Matt Wagantallae053222012-05-14 19:42:07 -07004717 .ops = &clk_ops_measure,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004718 CLK_INIT(measure_clk.c),
4719 },
4720 .multiplier = 1,
4721};
4722
4723static struct clk_lookup msm_clocks_copper[] = {
4724 CLK_LOOKUP("xo", cxo_clk_src.c, "msm_otg"),
4725 CLK_LOOKUP("xo", cxo_clk_src.c, "pil-q6v5-lpass"),
Tianyi Gou4307d6c2012-05-31 18:36:07 -07004726 CLK_LOOKUP("xo", cxo_clk_src.c, "pil_pronto"),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004727 CLK_LOOKUP("measure", measure_clk.c, "debug"),
4728
4729 CLK_LOOKUP("dma_bam_pclk", gcc_bam_dma_ahb_clk.c, "msm_sps"),
4730 CLK_LOOKUP("iface_clk", gcc_blsp1_ahb_clk.c, "msm_serial_hsl.0"),
4731 CLK_LOOKUP("iface_clk", gcc_blsp1_ahb_clk.c, "spi_qsd.1"),
4732 CLK_LOOKUP("core_clk", gcc_blsp1_qup1_i2c_apps_clk.c, ""),
Vikram Mulukutla82da88d2012-05-04 11:24:03 -07004733 CLK_LOOKUP("core_clk", gcc_blsp1_qup1_spi_apps_clk.c, ""),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004734 CLK_LOOKUP("core_clk", gcc_blsp1_qup2_i2c_apps_clk.c, ""),
Vikram Mulukutla82da88d2012-05-04 11:24:03 -07004735 CLK_LOOKUP("core_clk", gcc_blsp1_qup2_spi_apps_clk.c, "spi_qsd.1"),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004736 CLK_LOOKUP("core_clk", gcc_blsp1_qup3_i2c_apps_clk.c, ""),
4737 CLK_LOOKUP("core_clk", gcc_blsp1_qup3_spi_apps_clk.c, ""),
4738 CLK_LOOKUP("core_clk", gcc_blsp1_qup4_i2c_apps_clk.c, ""),
4739 CLK_LOOKUP("core_clk", gcc_blsp1_qup4_spi_apps_clk.c, ""),
4740 CLK_LOOKUP("core_clk", gcc_blsp1_qup5_i2c_apps_clk.c, ""),
4741 CLK_LOOKUP("core_clk", gcc_blsp1_qup5_spi_apps_clk.c, ""),
4742 CLK_LOOKUP("core_clk", gcc_blsp1_qup6_i2c_apps_clk.c, ""),
4743 CLK_LOOKUP("core_clk", gcc_blsp1_qup6_spi_apps_clk.c, ""),
4744 CLK_LOOKUP("core_clk", gcc_blsp1_uart1_apps_clk.c, ""),
Vikram Mulukutla82da88d2012-05-04 11:24:03 -07004745 CLK_LOOKUP("core_clk", gcc_blsp1_uart2_apps_clk.c, ""),
4746 CLK_LOOKUP("core_clk", gcc_blsp1_uart3_apps_clk.c, "msm_serial_hsl.0"),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004747 CLK_LOOKUP("core_clk", gcc_blsp1_uart4_apps_clk.c, ""),
4748 CLK_LOOKUP("core_clk", gcc_blsp1_uart5_apps_clk.c, ""),
4749 CLK_LOOKUP("core_clk", gcc_blsp1_uart6_apps_clk.c, ""),
4750
4751 CLK_LOOKUP("iface_clk", gcc_blsp2_ahb_clk.c, "f9966000.i2c"),
4752 CLK_LOOKUP("iface_clk", gcc_blsp2_ahb_clk.c, "f995e000.serial"),
4753 CLK_LOOKUP("core_clk", gcc_blsp2_qup1_i2c_apps_clk.c, ""),
4754 CLK_LOOKUP("core_clk", gcc_blsp2_qup1_spi_apps_clk.c, ""),
4755 CLK_LOOKUP("core_clk", gcc_blsp2_qup2_i2c_apps_clk.c, ""),
4756 CLK_LOOKUP("core_clk", gcc_blsp2_qup2_spi_apps_clk.c, ""),
Vikram Mulukutla82da88d2012-05-04 11:24:03 -07004757 CLK_LOOKUP("core_clk", gcc_blsp2_qup3_i2c_apps_clk.c, ""),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004758 CLK_LOOKUP("core_clk", gcc_blsp2_qup3_spi_apps_clk.c, ""),
Vikram Mulukutla82da88d2012-05-04 11:24:03 -07004759 CLK_LOOKUP("core_clk", gcc_blsp2_qup4_i2c_apps_clk.c, "f9966000.i2c"),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004760 CLK_LOOKUP("core_clk", gcc_blsp2_qup4_spi_apps_clk.c, ""),
4761 CLK_LOOKUP("core_clk", gcc_blsp2_qup5_i2c_apps_clk.c, ""),
4762 CLK_LOOKUP("core_clk", gcc_blsp2_qup5_spi_apps_clk.c, ""),
4763 CLK_LOOKUP("core_clk", gcc_blsp2_qup6_i2c_apps_clk.c, ""),
4764 CLK_LOOKUP("core_clk", gcc_blsp2_qup6_spi_apps_clk.c, ""),
Vikram Mulukutla82da88d2012-05-04 11:24:03 -07004765 CLK_LOOKUP("core_clk", gcc_blsp2_uart1_apps_clk.c, ""),
4766 CLK_LOOKUP("core_clk", gcc_blsp2_uart2_apps_clk.c, "f995e000.serial"),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004767 CLK_LOOKUP("core_clk", gcc_blsp2_uart3_apps_clk.c, ""),
4768 CLK_LOOKUP("core_clk", gcc_blsp2_uart4_apps_clk.c, ""),
4769 CLK_LOOKUP("core_clk", gcc_blsp2_uart5_apps_clk.c, ""),
4770 CLK_LOOKUP("core_clk", gcc_blsp2_uart6_apps_clk.c, ""),
4771
4772 CLK_LOOKUP("core_clk", gcc_ce1_clk.c, ""),
4773 CLK_LOOKUP("core_clk", gcc_ce2_clk.c, ""),
4774 CLK_LOOKUP("iface_clk", gcc_ce1_ahb_clk.c, ""),
4775 CLK_LOOKUP("iface_clk", gcc_ce2_ahb_clk.c, ""),
4776 CLK_LOOKUP("bus_clk", gcc_ce1_axi_clk.c, ""),
4777 CLK_LOOKUP("bus_clk", gcc_ce2_axi_clk.c, ""),
4778
4779 CLK_LOOKUP("core_clk", gcc_gp1_clk.c, ""),
4780 CLK_LOOKUP("core_clk", gcc_gp2_clk.c, ""),
4781 CLK_LOOKUP("core_clk", gcc_gp3_clk.c, ""),
4782
4783 CLK_LOOKUP("core_clk", gcc_pdm2_clk.c, ""),
4784 CLK_LOOKUP("iface_clk", gcc_pdm_ahb_clk.c, ""),
4785 CLK_LOOKUP("iface_clk", gcc_prng_ahb_clk.c, ""),
4786
4787 CLK_LOOKUP("iface_clk", gcc_sdcc1_ahb_clk.c, "msm_sdcc.1"),
4788 CLK_LOOKUP("core_clk", gcc_sdcc1_apps_clk.c, "msm_sdcc.1"),
4789 CLK_LOOKUP("iface_clk", gcc_sdcc2_ahb_clk.c, "msm_sdcc.2"),
4790 CLK_LOOKUP("core_clk", gcc_sdcc2_apps_clk.c, "msm_sdcc.2"),
4791 CLK_LOOKUP("iface_clk", gcc_sdcc3_ahb_clk.c, "msm_sdcc.3"),
4792 CLK_LOOKUP("core_clk", gcc_sdcc3_apps_clk.c, "msm_sdcc.3"),
4793 CLK_LOOKUP("iface_clk", gcc_sdcc4_ahb_clk.c, "msm_sdcc.4"),
4794 CLK_LOOKUP("core_clk", gcc_sdcc4_apps_clk.c, "msm_sdcc.4"),
4795
4796 CLK_LOOKUP("iface_clk", gcc_tsif_ahb_clk.c, ""),
4797 CLK_LOOKUP("ref_clk", gcc_tsif_ref_clk.c, ""),
4798
4799 CLK_LOOKUP("core_clk", gcc_usb30_master_clk.c, ""),
4800 CLK_LOOKUP("core_clk", gcc_usb30_mock_utmi_clk.c, ""),
4801 CLK_LOOKUP("iface_clk", gcc_usb_hs_ahb_clk.c, "msm_otg"),
4802 CLK_LOOKUP("core_clk", gcc_usb_hs_system_clk.c, ""),
4803 CLK_LOOKUP("iface_clk", gcc_usb_hsic_ahb_clk.c, ""),
4804 CLK_LOOKUP("core_clk", gcc_usb_hsic_clk.c, ""),
4805 CLK_LOOKUP("core_clk", gcc_usb_hsic_io_cal_clk.c, ""),
4806 CLK_LOOKUP("core_clk", gcc_usb_hsic_system_clk.c, ""),
4807
4808 /* Multimedia clocks */
4809 CLK_LOOKUP("bus_clk_src", axi_clk_src.c, ""),
4810 CLK_LOOKUP("bus_clk_src", ahb_clk_src.c, ""),
4811 CLK_LOOKUP("bus_clk", mmss_mmssnoc_ahb_clk.c, ""),
4812 CLK_LOOKUP("bus_clk", mmss_mmssnoc_axi_clk.c, ""),
4813 CLK_LOOKUP("core_clk", mdss_edpaux_clk.c, ""),
4814 CLK_LOOKUP("core_clk", mdss_edppixel_clk.c, ""),
4815 CLK_LOOKUP("core_clk", mdss_esc0_clk.c, ""),
4816 CLK_LOOKUP("core_clk", mdss_esc1_clk.c, ""),
4817 CLK_LOOKUP("iface_clk", mdss_hdmi_ahb_clk.c, ""),
4818 CLK_LOOKUP("core_clk", mdss_hdmi_clk.c, ""),
4819 CLK_LOOKUP("core_clk", mdss_mdp_clk.c, ""),
4820 CLK_LOOKUP("core_clk", mdss_mdp_lut_clk.c, ""),
4821 CLK_LOOKUP("core_clk", mdp_clk_src.c, ""),
4822 CLK_LOOKUP("core_clk", mdss_vsync_clk.c, ""),
4823 CLK_LOOKUP("iface_clk", camss_cci_cci_ahb_clk.c, ""),
4824 CLK_LOOKUP("core_clk", camss_cci_cci_clk.c, ""),
4825 CLK_LOOKUP("iface_clk", camss_csi0_ahb_clk.c, ""),
4826 CLK_LOOKUP("camss_csi0_clk", camss_csi0_clk.c, ""),
4827 CLK_LOOKUP("camss_csi0phy_clk", camss_csi0phy_clk.c, ""),
4828 CLK_LOOKUP("camss_csi0pix_clk", camss_csi0pix_clk.c, ""),
4829 CLK_LOOKUP("camss_csi0rdi_clk", camss_csi0rdi_clk.c, ""),
4830 CLK_LOOKUP("iface_clk", camss_csi1_ahb_clk.c, ""),
4831 CLK_LOOKUP("camss_csi1_clk", camss_csi1_clk.c, ""),
4832 CLK_LOOKUP("camss_csi1phy_clk", camss_csi1phy_clk.c, ""),
4833 CLK_LOOKUP("camss_csi1pix_clk", camss_csi1pix_clk.c, ""),
4834 CLK_LOOKUP("camss_csi1rdi_clk", camss_csi1rdi_clk.c, ""),
4835 CLK_LOOKUP("iface_clk", camss_csi2_ahb_clk.c, ""),
4836 CLK_LOOKUP("camss_csi2_clk", camss_csi2_clk.c, ""),
4837 CLK_LOOKUP("camss_csi2phy_clk", camss_csi2phy_clk.c, ""),
4838 CLK_LOOKUP("camss_csi2pix_clk", camss_csi2pix_clk.c, ""),
4839 CLK_LOOKUP("camss_csi2rdi_clk", camss_csi2rdi_clk.c, ""),
4840 CLK_LOOKUP("iface_clk", camss_csi3_ahb_clk.c, ""),
4841 CLK_LOOKUP("camss_csi3_clk", camss_csi3_clk.c, ""),
4842 CLK_LOOKUP("camss_csi3phy_clk", camss_csi3phy_clk.c, ""),
4843 CLK_LOOKUP("camss_csi3pix_clk", camss_csi3pix_clk.c, ""),
4844 CLK_LOOKUP("camss_csi3rdi_clk", camss_csi3rdi_clk.c, ""),
4845 CLK_LOOKUP("camss_csi0_clk_src", csi0_clk_src.c, ""),
4846 CLK_LOOKUP("camss_csi1_clk_src", csi1_clk_src.c, ""),
4847 CLK_LOOKUP("camss_csi2_clk_src", csi2_clk_src.c, ""),
4848 CLK_LOOKUP("camss_csi3_clk_src", csi3_clk_src.c, ""),
4849 CLK_LOOKUP("camss_csi_vfe0_clk", camss_csi_vfe0_clk.c, ""),
4850 CLK_LOOKUP("camss_csi_vfe1_clk", camss_csi_vfe1_clk.c, ""),
4851 CLK_LOOKUP("core_clk", camss_gp0_clk.c, ""),
4852 CLK_LOOKUP("core_clk", camss_gp1_clk.c, ""),
4853 CLK_LOOKUP("iface_clk", camss_ispif_ahb_clk.c, ""),
4854 CLK_LOOKUP("core_clk", camss_jpeg_jpeg0_clk.c, ""),
4855 CLK_LOOKUP("core_clk", camss_jpeg_jpeg1_clk.c, ""),
4856 CLK_LOOKUP("core_clk", camss_jpeg_jpeg2_clk.c, ""),
Sathish Ambleyd1b89ed2012-02-07 21:47:47 -08004857 CLK_LOOKUP("iface_clk", camss_jpeg_jpeg_ahb_clk.c,
4858 "fda64000.qcom,iommu"),
4859 CLK_LOOKUP("core_clk", camss_jpeg_jpeg_axi_clk.c,
4860 "fda64000.qcom,iommu"),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004861 CLK_LOOKUP("bus_clk", camss_jpeg_jpeg_axi_clk.c, ""),
4862 CLK_LOOKUP("bus_clk", camss_jpeg_jpeg_ocmemnoc_clk.c, ""),
4863 CLK_LOOKUP("core_clk", camss_mclk0_clk.c, ""),
4864 CLK_LOOKUP("core_clk", camss_mclk1_clk.c, ""),
4865 CLK_LOOKUP("core_clk", camss_mclk2_clk.c, ""),
4866 CLK_LOOKUP("core_clk", camss_mclk3_clk.c, ""),
4867 CLK_LOOKUP("iface_clk", camss_micro_ahb_clk.c, ""),
4868 CLK_LOOKUP("core_clk", camss_phy0_csi0phytimer_clk.c, ""),
4869 CLK_LOOKUP("core_clk", camss_phy1_csi1phytimer_clk.c, ""),
4870 CLK_LOOKUP("core_clk", camss_phy2_csi2phytimer_clk.c, ""),
4871 CLK_LOOKUP("iface_clk", camss_top_ahb_clk.c, ""),
4872 CLK_LOOKUP("iface_clk", camss_vfe_cpp_ahb_clk.c, ""),
4873 CLK_LOOKUP("core_clk", camss_vfe_cpp_clk.c, ""),
4874 CLK_LOOKUP("camss_vfe_vfe0_clk", camss_vfe_vfe0_clk.c, ""),
4875 CLK_LOOKUP("camss_vfe_vfe1_clk", camss_vfe_vfe1_clk.c, ""),
4876 CLK_LOOKUP("vfe0_clk_src", vfe0_clk_src.c, ""),
4877 CLK_LOOKUP("vfe1_clk_src", vfe1_clk_src.c, ""),
4878 CLK_LOOKUP("iface_clk", camss_vfe_vfe_ahb_clk.c, ""),
4879 CLK_LOOKUP("bus_clk", camss_vfe_vfe_axi_clk.c, ""),
4880 CLK_LOOKUP("bus_clk", camss_vfe_vfe_ocmemnoc_clk.c, ""),
Sathish Ambleyd1b89ed2012-02-07 21:47:47 -08004881 CLK_LOOKUP("iface_clk", mdss_ahb_clk.c, "fd928000.qcom,iommu"),
4882 CLK_LOOKUP("core_clk", mdss_axi_clk.c, "fd928000.qcom,iommu"),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004883 CLK_LOOKUP("bus_clk", mdss_axi_clk.c, ""),
4884 CLK_LOOKUP("core_clk", oxili_gfx3d_clk.c, ""),
4885 CLK_LOOKUP("iface_clk", oxilicx_ahb_clk.c, ""),
4886 CLK_LOOKUP("bus_clk", oxilicx_axi_clk.c, ""),
Sathish Ambleyd1b89ed2012-02-07 21:47:47 -08004887 CLK_LOOKUP("iface_clk", venus0_ahb_clk.c, "fdc84000.qcom,iommu"),
4888 CLK_LOOKUP("core_clk", venus0_axi_clk.c, "fdc84000.qcom,iommu"),
4889 CLK_LOOKUP("bus_clk", venus0_axi_clk.c, ""),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004890
4891 /* LPASS clocks */
4892 CLK_LOOKUP("core_clk", audio_core_slimbus_core_clk.c, "fe12f000.slim"),
4893 CLK_LOOKUP("iface_clk", audio_core_slimbus_lfabif_clk.c,
4894 "fe12f000.slim"),
4895 CLK_LOOKUP("core_clk", audio_core_lpaif_codec_spkr_clk_src.c, ""),
4896 CLK_LOOKUP("osr_clk", audio_core_lpaif_codec_spkr_osr_clk.c, ""),
4897 CLK_LOOKUP("ebit_clk", audio_core_lpaif_codec_spkr_ebit_clk.c, ""),
4898 CLK_LOOKUP("ibit_clk", audio_core_lpaif_codec_spkr_ibit_clk.c, ""),
4899 CLK_LOOKUP("core_clk", audio_core_lpaif_pri_clk_src.c, ""),
4900 CLK_LOOKUP("osr_clk", audio_core_lpaif_pri_osr_clk.c, ""),
4901 CLK_LOOKUP("ebit_clk", audio_core_lpaif_pri_ebit_clk.c, ""),
4902 CLK_LOOKUP("ibit_clk", audio_core_lpaif_pri_ibit_clk.c, ""),
4903 CLK_LOOKUP("core_clk", audio_core_lpaif_sec_clk_src.c, ""),
4904 CLK_LOOKUP("osr_clk", audio_core_lpaif_sec_osr_clk.c, ""),
4905 CLK_LOOKUP("ebit_clk", audio_core_lpaif_sec_ebit_clk.c, ""),
4906 CLK_LOOKUP("ibit_clk", audio_core_lpaif_sec_ibit_clk.c, ""),
4907 CLK_LOOKUP("core_clk", audio_core_lpaif_ter_clk_src.c, ""),
4908 CLK_LOOKUP("osr_clk", audio_core_lpaif_ter_osr_clk.c, ""),
4909 CLK_LOOKUP("ebit_clk", audio_core_lpaif_ter_ebit_clk.c, ""),
4910 CLK_LOOKUP("ibit_clk", audio_core_lpaif_ter_ibit_clk.c, ""),
4911 CLK_LOOKUP("core_clk", audio_core_lpaif_quad_clk_src.c, ""),
4912 CLK_LOOKUP("osr_clk", audio_core_lpaif_quad_osr_clk.c, ""),
4913 CLK_LOOKUP("ebit_clk", audio_core_lpaif_quad_ebit_clk.c, ""),
4914 CLK_LOOKUP("ibit_clk", audio_core_lpaif_quad_ibit_clk.c, ""),
4915 CLK_LOOKUP("core_clk", audio_core_lpaif_pcm0_clk_src.c, ""),
4916 CLK_LOOKUP("ebit_clk", audio_core_lpaif_pcm0_ebit_clk.c, ""),
4917 CLK_LOOKUP("ibit_clk", audio_core_lpaif_pcm0_ibit_clk.c, ""),
4918 CLK_LOOKUP("core_clk", audio_core_lpaif_pcm1_clk_src.c, ""),
4919 CLK_LOOKUP("ebit_clk", audio_core_lpaif_pcm1_ebit_clk.c, ""),
4920 CLK_LOOKUP("ibit_clk", audio_core_lpaif_pcm1_ibit_clk.c, ""),
4921
Vikram Mulukutlaa967db42012-05-10 16:20:40 -07004922 CLK_LOOKUP("core_clk", mss_xo_q6_clk.c, ""),
4923 CLK_LOOKUP("bus_clk", mss_bus_q6_clk.c, ""),
Matt Wagantalld41ce772012-05-10 23:16:41 -07004924 CLK_LOOKUP("core_clk", q6ss_xo_clk.c, "pil-q6v5-lpass"),
4925 CLK_LOOKUP("bus_clk", q6ss_ahb_lfabif_clk.c, "pil-q6v5-lpass"),
Vikram Mulukutlaa967db42012-05-10 16:20:40 -07004926 CLK_LOOKUP("mem_clk", gcc_boot_rom_ahb_clk.c, ""),
4927 CLK_LOOKUP("bus_clk", gcc_mss_cfg_ahb_clk.c, ""),
Hariprasad Dhalinarasimhade991f02012-05-31 13:15:51 -07004928 CLK_LOOKUP("core_clk", gcc_prng_ahb_clk.c, "msm_rng"),
Vikram Mulukutlaa967db42012-05-10 16:20:40 -07004929
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004930 /* TODO: Remove dummy clocks as soon as they become unnecessary */
4931 CLK_DUMMY("phy_clk", NULL, "msm_otg", OFF),
4932 CLK_DUMMY("core_clk", NULL, "msm_otg", OFF),
4933 CLK_DUMMY("dfab_clk", DFAB_CLK, "msm_sps", OFF),
4934 CLK_DUMMY("mem_clk", NULL, "msm_sps", OFF),
4935 CLK_DUMMY("bus_clk", NULL, "scm", OFF),
4936};
4937
4938static struct pll_config_regs gpll0_regs __initdata = {
4939 .l_reg = (void __iomem *)GPLL0_L_REG,
4940 .m_reg = (void __iomem *)GPLL0_M_REG,
4941 .n_reg = (void __iomem *)GPLL0_N_REG,
4942 .config_reg = (void __iomem *)GPLL0_USER_CTL_REG,
4943 .mode_reg = (void __iomem *)GPLL0_MODE_REG,
4944 .base = &virt_bases[GCC_BASE],
4945};
4946
4947/* GPLL0 at 600 MHz, main output enabled. */
4948static struct pll_config gpll0_config __initdata = {
4949 .l = 0x1f,
4950 .m = 0x1,
4951 .n = 0x4,
4952 .vco_val = 0x0,
4953 .vco_mask = BM(21, 20),
4954 .pre_div_val = 0x0,
4955 .pre_div_mask = BM(14, 12),
4956 .post_div_val = 0x0,
4957 .post_div_mask = BM(9, 8),
4958 .mn_ena_val = BIT(24),
4959 .mn_ena_mask = BIT(24),
4960 .main_output_val = BIT(0),
4961 .main_output_mask = BIT(0),
4962};
4963
4964static struct pll_config_regs gpll1_regs __initdata = {
4965 .l_reg = (void __iomem *)GPLL1_L_REG,
4966 .m_reg = (void __iomem *)GPLL1_M_REG,
4967 .n_reg = (void __iomem *)GPLL1_N_REG,
4968 .config_reg = (void __iomem *)GPLL1_USER_CTL_REG,
4969 .mode_reg = (void __iomem *)GPLL1_MODE_REG,
4970 .base = &virt_bases[GCC_BASE],
4971};
4972
4973/* GPLL1 at 480 MHz, main output enabled. */
4974static struct pll_config gpll1_config __initdata = {
4975 .l = 0x19,
4976 .m = 0x0,
4977 .n = 0x1,
4978 .vco_val = 0x0,
4979 .vco_mask = BM(21, 20),
4980 .pre_div_val = 0x0,
4981 .pre_div_mask = BM(14, 12),
4982 .post_div_val = 0x0,
4983 .post_div_mask = BM(9, 8),
4984 .main_output_val = BIT(0),
4985 .main_output_mask = BIT(0),
4986};
4987
4988static struct pll_config_regs mmpll0_regs __initdata = {
4989 .l_reg = (void __iomem *)MMPLL0_L_REG,
4990 .m_reg = (void __iomem *)MMPLL0_M_REG,
4991 .n_reg = (void __iomem *)MMPLL0_N_REG,
4992 .config_reg = (void __iomem *)MMPLL0_USER_CTL_REG,
4993 .mode_reg = (void __iomem *)MMPLL0_MODE_REG,
4994 .base = &virt_bases[MMSS_BASE],
4995};
4996
4997/* MMPLL0 at 800 MHz, main output enabled. */
4998static struct pll_config mmpll0_config __initdata = {
4999 .l = 0x29,
5000 .m = 0x2,
5001 .n = 0x3,
5002 .vco_val = 0x0,
5003 .vco_mask = BM(21, 20),
5004 .pre_div_val = 0x0,
5005 .pre_div_mask = BM(14, 12),
5006 .post_div_val = 0x0,
5007 .post_div_mask = BM(9, 8),
5008 .mn_ena_val = BIT(24),
5009 .mn_ena_mask = BIT(24),
5010 .main_output_val = BIT(0),
5011 .main_output_mask = BIT(0),
5012};
5013
5014static struct pll_config_regs mmpll1_regs __initdata = {
5015 .l_reg = (void __iomem *)MMPLL1_L_REG,
5016 .m_reg = (void __iomem *)MMPLL1_M_REG,
5017 .n_reg = (void __iomem *)MMPLL1_N_REG,
5018 .config_reg = (void __iomem *)MMPLL1_USER_CTL_REG,
5019 .mode_reg = (void __iomem *)MMPLL1_MODE_REG,
5020 .base = &virt_bases[MMSS_BASE],
5021};
5022
5023/* MMPLL1 at 1000 MHz, main output enabled. */
5024static struct pll_config mmpll1_config __initdata = {
5025 .l = 0x34,
5026 .m = 0x1,
5027 .n = 0xC,
5028 .vco_val = 0x0,
5029 .vco_mask = BM(21, 20),
5030 .pre_div_val = 0x0,
5031 .pre_div_mask = BM(14, 12),
5032 .post_div_val = 0x0,
5033 .post_div_mask = BM(9, 8),
5034 .mn_ena_val = BIT(24),
5035 .mn_ena_mask = BIT(24),
5036 .main_output_val = BIT(0),
5037 .main_output_mask = BIT(0),
5038};
5039
5040static struct pll_config_regs mmpll3_regs __initdata = {
5041 .l_reg = (void __iomem *)MMPLL3_L_REG,
5042 .m_reg = (void __iomem *)MMPLL3_M_REG,
5043 .n_reg = (void __iomem *)MMPLL3_N_REG,
5044 .config_reg = (void __iomem *)MMPLL3_USER_CTL_REG,
5045 .mode_reg = (void __iomem *)MMPLL3_MODE_REG,
5046 .base = &virt_bases[MMSS_BASE],
5047};
5048
5049/* MMPLL3 at 820 MHz, main output enabled. */
5050static struct pll_config mmpll3_config __initdata = {
5051 .l = 0x2A,
5052 .m = 0x11,
5053 .n = 0x18,
5054 .vco_val = 0x0,
5055 .vco_mask = BM(21, 20),
5056 .pre_div_val = 0x0,
5057 .pre_div_mask = BM(14, 12),
5058 .post_div_val = 0x0,
5059 .post_div_mask = BM(9, 8),
5060 .mn_ena_val = BIT(24),
5061 .mn_ena_mask = BIT(24),
5062 .main_output_val = BIT(0),
5063 .main_output_mask = BIT(0),
5064};
5065
5066static struct pll_config_regs lpapll0_regs __initdata = {
5067 .l_reg = (void __iomem *)LPAPLL_L_REG,
5068 .m_reg = (void __iomem *)LPAPLL_M_REG,
5069 .n_reg = (void __iomem *)LPAPLL_N_REG,
5070 .config_reg = (void __iomem *)LPAPLL_USER_CTL_REG,
5071 .mode_reg = (void __iomem *)LPAPLL_MODE_REG,
5072 .base = &virt_bases[LPASS_BASE],
5073};
5074
5075/* LPAPLL0 at 491.52 MHz, main output enabled. */
5076static struct pll_config lpapll0_config __initdata = {
5077 .l = 0x33,
5078 .m = 0x1,
5079 .n = 0x5,
5080 .vco_val = 0x0,
5081 .vco_mask = BM(21, 20),
5082 .pre_div_val = BVAL(14, 12, 0x1),
5083 .pre_div_mask = BM(14, 12),
5084 .post_div_val = 0x0,
5085 .post_div_mask = BM(9, 8),
5086 .mn_ena_val = BIT(24),
5087 .mn_ena_mask = BIT(24),
5088 .main_output_val = BIT(0),
5089 .main_output_mask = BIT(0),
5090};
5091
5092#define PLL_AUX_OUTPUT BIT(1)
5093
5094static void __init reg_init(void)
5095{
5096 u32 regval;
5097
5098 if (!(readl_relaxed(GCC_REG_BASE(GPLL0_STATUS_REG))
5099 & gpll0_clk_src.status_mask))
5100 configure_pll(&gpll0_config, &gpll0_regs, 1);
5101
5102 if (!(readl_relaxed(GCC_REG_BASE(GPLL1_STATUS_REG))
5103 & gpll1_clk_src.status_mask))
5104 configure_pll(&gpll1_config, &gpll1_regs, 1);
5105
5106 configure_pll(&mmpll0_config, &mmpll0_regs, 1);
5107 configure_pll(&mmpll1_config, &mmpll1_regs, 1);
5108 configure_pll(&mmpll3_config, &mmpll3_regs, 0);
5109 configure_pll(&lpapll0_config, &lpapll0_regs, 1);
5110
5111 /* Active GPLL0's aux output. This is needed by acpuclock. */
5112 regval = readl_relaxed(GCC_REG_BASE(GPLL0_USER_CTL_REG));
5113 regval |= BIT(PLL_AUX_OUTPUT);
5114 writel_relaxed(regval, GCC_REG_BASE(GPLL0_USER_CTL_REG));
5115
5116 /* Vote for GPLL0 to turn on. Needed by acpuclock. */
5117 regval = readl_relaxed(GCC_REG_BASE(APCS_GPLL_ENA_VOTE_REG));
5118 regval |= BIT(0);
5119 writel_relaxed(regval, GCC_REG_BASE(APCS_GPLL_ENA_VOTE_REG));
5120
5121 /*
5122 * TODO: Confirm that no clocks need to be voted on in this sleep vote
5123 * register.
5124 */
5125 writel_relaxed(0x0, GCC_REG_BASE(APCS_CLOCK_SLEEP_ENA_VOTE));
5126}
5127
5128static void __init msmcopper_clock_post_init(void)
5129{
5130 clk_set_rate(&ahb_clk_src.c, 80000000);
5131 clk_set_rate(&axi_clk_src.c, 333330000);
5132
5133 /* Set rates for single-rate clocks. */
5134 clk_set_rate(&usb30_master_clk_src.c,
5135 usb30_master_clk_src.freq_tbl[0].freq_hz);
5136 clk_set_rate(&tsif_ref_clk_src.c,
5137 tsif_ref_clk_src.freq_tbl[0].freq_hz);
5138 clk_set_rate(&usb_hs_system_clk_src.c,
5139 usb_hs_system_clk_src.freq_tbl[0].freq_hz);
5140 clk_set_rate(&usb_hsic_clk_src.c,
5141 usb_hsic_clk_src.freq_tbl[0].freq_hz);
5142 clk_set_rate(&usb_hsic_io_cal_clk_src.c,
5143 usb_hsic_io_cal_clk_src.freq_tbl[0].freq_hz);
5144 clk_set_rate(&usb_hsic_system_clk_src.c,
5145 usb_hsic_system_clk_src.freq_tbl[0].freq_hz);
5146 clk_set_rate(&usb30_mock_utmi_clk_src.c,
5147 usb30_mock_utmi_clk_src.freq_tbl[0].freq_hz);
5148 clk_set_rate(&pdm2_clk_src.c, pdm2_clk_src.freq_tbl[0].freq_hz);
5149 clk_set_rate(&cci_clk_src.c, cci_clk_src.freq_tbl[0].freq_hz);
5150 clk_set_rate(&mclk0_clk_src.c, mclk0_clk_src.freq_tbl[0].freq_hz);
5151 clk_set_rate(&mclk1_clk_src.c, mclk1_clk_src.freq_tbl[0].freq_hz);
5152 clk_set_rate(&mclk2_clk_src.c, mclk2_clk_src.freq_tbl[0].freq_hz);
5153 clk_set_rate(&edpaux_clk_src.c, edpaux_clk_src.freq_tbl[0].freq_hz);
5154 clk_set_rate(&esc0_clk_src.c, esc0_clk_src.freq_tbl[0].freq_hz);
5155 clk_set_rate(&esc1_clk_src.c, esc1_clk_src.freq_tbl[0].freq_hz);
5156 clk_set_rate(&hdmi_clk_src.c, hdmi_clk_src.freq_tbl[0].freq_hz);
5157 clk_set_rate(&vsync_clk_src.c, vsync_clk_src.freq_tbl[0].freq_hz);
5158 clk_set_rate(&audio_core_slimbus_core_clk_src.c,
5159 audio_core_slimbus_core_clk_src.freq_tbl[0].freq_hz);
5160}
5161
5162#define GCC_CC_PHYS 0xFC400000
5163#define GCC_CC_SIZE SZ_16K
5164
5165#define MMSS_CC_PHYS 0xFD8C0000
5166#define MMSS_CC_SIZE SZ_256K
5167
5168#define LPASS_CC_PHYS 0xFE000000
5169#define LPASS_CC_SIZE SZ_256K
5170
Vikram Mulukutlaa967db42012-05-10 16:20:40 -07005171#define MSS_CC_PHYS 0xFC980000
5172#define MSS_CC_SIZE SZ_16K
5173
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005174static void __init msmcopper_clock_pre_init(void)
5175{
5176 virt_bases[GCC_BASE] = ioremap(GCC_CC_PHYS, GCC_CC_SIZE);
5177 if (!virt_bases[GCC_BASE])
5178 panic("clock-copper: Unable to ioremap GCC memory!");
5179
5180 virt_bases[MMSS_BASE] = ioremap(MMSS_CC_PHYS, MMSS_CC_SIZE);
5181 if (!virt_bases[MMSS_BASE])
5182 panic("clock-copper: Unable to ioremap MMSS_CC memory!");
5183
5184 virt_bases[LPASS_BASE] = ioremap(LPASS_CC_PHYS, LPASS_CC_SIZE);
5185 if (!virt_bases[LPASS_BASE])
5186 panic("clock-copper: Unable to ioremap LPASS_CC memory!");
5187
Vikram Mulukutlaa967db42012-05-10 16:20:40 -07005188 virt_bases[MSS_BASE] = ioremap(MSS_CC_PHYS, MSS_CC_SIZE);
5189 if (!virt_bases[MSS_BASE])
5190 panic("clock-copper: Unable to ioremap MSS_CC memory!");
5191
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005192 clk_ops_local_pll.enable = copper_pll_clk_enable;
5193
5194 reg_init();
5195}
5196
5197struct clock_init_data msmcopper_clock_init_data __initdata = {
5198 .table = msm_clocks_copper,
5199 .size = ARRAY_SIZE(msm_clocks_copper),
5200 .pre_init = msmcopper_clock_pre_init,
5201 .post_init = msmcopper_clock_post_init,
5202};