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