blob: 02dd562f86086599791d61c8299d28c10e300e6e [file] [log] [blame]
Tianyi Gou389ba432012-10-01 13:58:38 -07001/* Copyright (c) 2012, The Linux Foundation. All rights reserved.
2 *
3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License version 2 and
5 * only version 2 as published by the Free Software Foundation.
6 *
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
11 */
12
13#include <linux/kernel.h>
14#include <linux/init.h>
15#include <linux/err.h>
16#include <linux/ctype.h>
17#include <linux/io.h>
18#include <linux/spinlock.h>
19#include <linux/delay.h>
20#include <linux/clk.h>
21#include <linux/regulator/consumer.h>
22#include <linux/iopoll.h>
23
24#include <mach/clk.h>
25#include <mach/rpm-regulator-smd.h>
26#include <mach/socinfo.h>
27
28#include "clock-local2.h"
29#include "clock-pll.h"
30#include "clock-rpm.h"
31#include "clock-voter.h"
32#include "clock.h"
33
34enum {
35 GCC_BASE,
36 LPASS_BASE,
37 APCS_BASE,
38 APCS_PLL_BASE,
39 N_BASES,
40};
41
42static void __iomem *virt_bases[N_BASES];
43
44#define GCC_REG_BASE(x) (void __iomem *)(virt_bases[GCC_BASE] + (x))
45#define LPASS_REG_BASE(x) (void __iomem *)(virt_bases[LPASS_BASE] + (x))
46#define APCS_REG_BASE(x) (void __iomem *)(virt_bases[APCS_BASE] + (x))
47#define APCS_PLL_REG_BASE(x) (void __iomem *)(virt_bases[APCS_PLL_BASE] + (x))
48
49/* GCC registers */
50#define GPLL0_MODE_REG 0x0000
51#define GPLL0_L_REG 0x0004
52#define GPLL0_M_REG 0x0008
53#define GPLL0_N_REG 0x000C
54#define GPLL0_USER_CTL_REG 0x0010
55#define GPLL0_CONFIG_CTL_REG 0x0014
56#define GPLL0_TEST_CTL_REG 0x0018
57#define GPLL0_STATUS_REG 0x001C
58
59#define GPLL1_MODE_REG 0x0040
60#define GPLL1_L_REG 0x0044
61#define GPLL1_M_REG 0x0048
62#define GPLL1_N_REG 0x004C
63#define GPLL1_USER_CTL_REG 0x0050
64#define GPLL1_CONFIG_CTL_REG 0x0054
65#define GPLL1_TEST_CTL_REG 0x0058
66#define GPLL1_STATUS_REG 0x005C
67
68#define GCC_DEBUG_CLK_CTL_REG 0x1880
69#define CLOCK_FRQ_MEASURE_CTL_REG 0x1884
70#define CLOCK_FRQ_MEASURE_STATUS_REG 0x1888
71#define GCC_PLLTEST_PAD_CFG_REG 0x188C
72#define GCC_XO_DIV4_CBCR_REG 0x10C8
73#define APCS_GPLL_ENA_VOTE_REG 0x1480
74#define APCS_CLOCK_BRANCH_ENA_VOTE 0x1484
75#define APCS_CLOCK_SLEEP_ENA_VOTE 0x1488
76
77#define APCS_CLK_DIAG_REG 0x001C
78
79#define APCS_CPU_PLL_MODE_REG 0x0000
80#define APCS_CPU_PLL_L_REG 0x0004
81#define APCS_CPU_PLL_M_REG 0x0008
82#define APCS_CPU_PLL_N_REG 0x000C
83#define APCS_CPU_PLL_USER_CTL_REG 0x0010
84#define APCS_CPU_PLL_CONFIG_CTL_REG 0x0014
85#define APCS_CPU_PLL_TEST_CTL_REG 0x0018
86#define APCS_CPU_PLL_STATUS_REG 0x001C
87
88#define USB_HSIC_SYSTEM_CMD_RCGR 0x041C
89#define USB_HSIC_XCVR_FS_CMD_RCGR 0x0424
90#define USB_HSIC_CMD_RCGR 0x0440
91#define USB_HSIC_IO_CAL_CMD_RCGR 0x0458
92#define USB_HS_SYSTEM_CMD_RCGR 0x0490
93#define SDCC2_APPS_CMD_RCGR 0x0510
94#define SDCC3_APPS_CMD_RCGR 0x0550
95#define BLSP1_QUP1_SPI_APPS_CMD_RCGR 0x064C
96#define BLSP1_UART1_APPS_CMD_RCGR 0x068C
97#define BLSP1_QUP2_SPI_APPS_CMD_RCGR 0x06CC
98#define BLSP1_UART2_APPS_CMD_RCGR 0x070C
99#define BLSP1_QUP3_SPI_APPS_CMD_RCGR 0x074C
100#define BLSP1_UART3_APPS_CMD_RCGR 0x078C
101#define BLSP1_QUP4_SPI_APPS_CMD_RCGR 0x07CC
102#define BLSP1_UART4_APPS_CMD_RCGR 0x080C
103#define BLSP1_QUP5_SPI_APPS_CMD_RCGR 0x084C
104#define BLSP1_UART5_APPS_CMD_RCGR 0x088C
105#define BLSP1_QUP6_SPI_APPS_CMD_RCGR 0x08CC
106#define BLSP1_UART6_APPS_CMD_RCGR 0x090C
107#define PDM2_CMD_RCGR 0x0CD0
108#define CE1_CMD_RCGR 0x1050
109#define GP1_CMD_RCGR 0x1904
110#define GP2_CMD_RCGR 0x1944
111#define GP3_CMD_RCGR 0x1984
112#define QPIC_CMD_RCGR 0x1A50
113#define IPA_CMD_RCGR 0x1A90
114
115#define USB_HS_HSIC_BCR 0x0400
116#define USB_HS_BCR 0x0480
117#define SDCC2_BCR 0x0500
118#define SDCC3_BCR 0x0540
119#define BLSP1_BCR 0x05C0
120#define BLSP1_QUP1_BCR 0x0640
121#define BLSP1_UART1_BCR 0x0680
122#define BLSP1_QUP2_BCR 0x06C0
123#define BLSP1_UART2_BCR 0x0700
124#define BLSP1_QUP3_BCR 0x0740
125#define BLSP1_UART3_BCR 0x0780
126#define BLSP1_QUP4_BCR 0x07C0
127#define BLSP1_UART4_BCR 0x0800
128#define BLSP1_QUP5_BCR 0x0840
129#define BLSP1_UART5_BCR 0x0880
130#define BLSP1_QUP6_BCR 0x08C0
131#define BLSP1_UART6_BCR 0x0900
132#define PDM_BCR 0x0CC0
133#define PRNG_BCR 0x0D00
134#define BAM_DMA_BCR 0x0D40
135#define BOOT_ROM_BCR 0x0E00
136#define CE1_BCR 0x1040
137#define QPIC_BCR 0x1040
138#define IPA_BCR 0x1A80
139
140
141#define SYS_NOC_IPA_AXI_CBCR 0x0128
142#define USB_HSIC_AHB_CBCR 0x0408
143#define USB_HSIC_SYSTEM_CBCR 0x040C
144#define USB_HSIC_CBCR 0x0410
145#define USB_HSIC_IO_CAL_CBCR 0x0414
146#define USB_HSIC_XCVR_FS_CBCR 0x042C
147#define USB_HS_SYSTEM_CBCR 0x0484
148#define USB_HS_AHB_CBCR 0x0488
149#define SDCC2_APPS_CBCR 0x0504
150#define SDCC2_AHB_CBCR 0x0508
151#define SDCC3_APPS_CBCR 0x0544
152#define SDCC3_AHB_CBCR 0x0548
153#define BLSP1_AHB_CBCR 0x05C4
154#define BLSP1_QUP1_SPI_APPS_CBCR 0x0644
155#define BLSP1_QUP1_I2C_APPS_CBCR 0x0648
156#define BLSP1_UART1_APPS_CBCR 0x0684
157#define BLSP1_UART1_SIM_CBCR 0x0688
158#define BLSP1_QUP2_SPI_APPS_CBCR 0x06C4
159#define BLSP1_QUP2_I2C_APPS_CBCR 0x06C8
160#define BLSP1_UART2_APPS_CBCR 0x0704
161#define BLSP1_UART2_SIM_CBCR 0x0708
162#define BLSP1_QUP3_SPI_APPS_CBCR 0x0744
163#define BLSP1_QUP3_I2C_APPS_CBCR 0x0748
164#define BLSP1_UART3_APPS_CBCR 0x0784
165#define BLSP1_UART3_SIM_CBCR 0x0788
166#define BLSP1_QUP4_SPI_APPS_CBCR 0x07C4
167#define BLSP1_QUP4_I2C_APPS_CBCR 0x07C8
168#define BLSP1_UART4_APPS_CBCR 0x0804
169#define BLSP1_UART4_SIM_CBCR 0x0808
170#define BLSP1_QUP5_SPI_APPS_CBCR 0x0844
171#define BLSP1_QUP5_I2C_APPS_CBCR 0x0848
172#define BLSP1_UART5_APPS_CBCR 0x0884
173#define BLSP1_UART5_SIM_CBCR 0x0888
174#define BLSP1_QUP6_SPI_APPS_CBCR 0x08C4
175#define BLSP1_QUP6_I2C_APPS_CBCR 0x08C8
176#define BLSP1_UART6_APPS_CBCR 0x0904
177#define BLSP1_UART6_SIM_CBCR 0x0908
178#define BOOT_ROM_AHB_CBCR 0x0E04
179#define PDM_AHB_CBCR 0x0CC4
180#define PDM_XO4_CBCR 0x0CC8
181#define PDM_AHB_CBCR 0x0CC4
182#define PDM_XO4_CBCR 0x0CC8
183#define PDM2_CBCR 0x0CCC
184#define PRNG_AHB_CBCR 0x0D04
185#define BAM_DMA_AHB_CBCR 0x0D44
186#define MSG_RAM_AHB_CBCR 0x0E44
187#define CE1_CBCR 0x1044
188#define CE1_AXI_CBCR 0x1048
189#define CE1_AHB_CBCR 0x104C
190#define GCC_AHB_CBCR 0x10C0
191#define GP1_CBCR 0x1900
192#define GP2_CBCR 0x1940
193#define GP3_CBCR 0x1980
194#define QPIC_CBCR 0x1A44
195#define QPIC_AHB_CBCR 0x1A48
196#define IPA_CBCR 0x1A84
197#define IPA_CNOC_CBCR 0x1A88
198#define IPA_SLEEP_CBCR 0x1A8C
199
200/* LPASS registers */
201/* TODO: Needs to double check lpass regiserts after get the SWI for hw */
202#define LPAPLL_MODE_REG 0x0000
203#define LPAPLL_L_REG 0x0004
204#define LPAPLL_M_REG 0x0008
205#define LPAPLL_N_REG 0x000C
206#define LPAPLL_USER_CTL_REG 0x0010
207#define LPAPLL_CONFIG_CTL_REG 0x0014
208#define LPAPLL_TEST_CTL_REG 0x0018
209#define LPAPLL_STATUS_REG 0x001C
210
211#define LPASS_DEBUG_CLK_CTL_REG 0x29000
212#define LPASS_LPA_PLL_VOTE_APPS_REG 0x2000
213
214#define LPAIF_PRI_CMD_RCGR 0xB000
215#define LPAIF_SEC_CMD_RCGR 0xC000
216#define LPAIF_PCM0_CMD_RCGR 0xF000
217#define LPAIF_PCM1_CMD_RCGR 0x10000
218#define SLIMBUS_CMD_RCGR 0x12000
219#define LPAIF_PCMOE_CMD_RCGR 0x13000
220
221#define AUDIO_CORE_BCR 0x4000
222
223#define AUDIO_CORE_GDSCR 0x7000
224#define AUDIO_CORE_LPAIF_PRI_OSR_CBCR 0xB014
225#define AUDIO_CORE_LPAIF_PRI_IBIT_CBCR 0xB018
226#define AUDIO_CORE_LPAIF_PRI_EBIT_CBCR 0xB01C
227#define AUDIO_CORE_LPAIF_SEC_OSR_CBCR 0xC014
228#define AUDIO_CORE_LPAIF_SEC_IBIT_CBCR 0xC018
229#define AUDIO_CORE_LPAIF_SEC_EBIT_CBCR 0xC01C
230#define AUDIO_CORE_LPAIF_PCM0_IBIT_CBCR 0xF014
231#define AUDIO_CORE_LPAIF_PCM0_EBIT_CBCR 0xF018
232#define AUDIO_CORE_LPAIF_PCM1_IBIT_CBCR 0x10014
233#define AUDIO_CORE_LPAIF_PCM1_EBIT_CBCR 0x10018
234#define AUDIO_CORE_RESAMPLER_CORE_CBCR 0x11014
235#define AUDIO_CORE_RESAMPLER_LFABIF_CBCR 0x11018
236#define AUDIO_CORE_SLIMBUS_CORE_CBCR 0x12014
237#define AUDIO_CORE_SLIMBUS_LFABIF_CBCR 0x12018
238#define AUDIO_CORE_LPAIF_PCM_DATA_OE_CBCR 0x13014
239
240/* Mux source select values */
241#define cxo_source_val 0
242#define gpll0_source_val 1
243#define gpll1_hsic_source_val 4
244#define gnd_source_val 5
245#define cxo_lpass_source_val 0
246#define lpapll0_lpass_source_val 1
247#define gpll0_lpass_source_val 5
248
249#define F(f, s, div, m, n) \
250 { \
251 .freq_hz = (f), \
252 .src_clk = &s##_clk_src.c, \
253 .m_val = (m), \
254 .n_val = ~((n)-(m)) * !!(n), \
255 .d_val = ~(n),\
256 .div_src_val = BVAL(4, 0, (int)(2*(div) - 1)) \
257 | BVAL(10, 8, s##_source_val), \
258 }
259
260#define F_HSIC(f, s, div, m, n) \
261 { \
262 .freq_hz = (f), \
263 .src_clk = &s##_clk_src.c, \
264 .m_val = (m), \
265 .n_val = ~((n)-(m)) * !!(n), \
266 .d_val = ~(n),\
267 .div_src_val = BVAL(4, 0, (int)(2*(div) - 1)) \
268 | BVAL(10, 8, s##_hsic_source_val), \
269 }
270
271#define F_LPASS(f, s, div, m, n) \
272 { \
273 .freq_hz = (f), \
274 .src_clk = &s##_clk_src.c, \
275 .m_val = (m), \
276 .n_val = ~((n)-(m)) * !!(n), \
277 .d_val = ~(n),\
278 .div_src_val = BVAL(4, 0, (int)(2*(div) - 1)) \
279 | BVAL(10, 8, s##_lpass_source_val), \
280 }
281
282
283#define VDD_DIG_FMAX_MAP1(l1, f1) \
284 .vdd_class = &vdd_dig, \
285 .fmax[VDD_DIG_##l1] = (f1)
286#define VDD_DIG_FMAX_MAP2(l1, f1, l2, f2) \
287 .vdd_class = &vdd_dig, \
288 .fmax[VDD_DIG_##l1] = (f1), \
289 .fmax[VDD_DIG_##l2] = (f2)
290#define VDD_DIG_FMAX_MAP3(l1, f1, l2, f2, l3, f3) \
291 .vdd_class = &vdd_dig, \
292 .fmax[VDD_DIG_##l1] = (f1), \
293 .fmax[VDD_DIG_##l2] = (f2), \
294 .fmax[VDD_DIG_##l3] = (f3)
295
296enum vdd_dig_levels {
297 VDD_DIG_NONE,
298 VDD_DIG_LOW,
299 VDD_DIG_NOMINAL,
300 VDD_DIG_HIGH
301};
302
303static const int vdd_corner[] = {
304 [VDD_DIG_NONE] = RPM_REGULATOR_CORNER_NONE,
305 [VDD_DIG_LOW] = RPM_REGULATOR_CORNER_SVS_SOC,
306 [VDD_DIG_NOMINAL] = RPM_REGULATOR_CORNER_NORMAL,
307 [VDD_DIG_HIGH] = RPM_REGULATOR_CORNER_SUPER_TURBO,
308};
309
310static struct regulator *vdd_dig_reg;
311
312int set_vdd_dig(struct clk_vdd_class *vdd_class, int level)
313{
314 return regulator_set_voltage(vdd_dig_reg, vdd_corner[level],
315 RPM_REGULATOR_CORNER_SUPER_TURBO);
316}
317
318static DEFINE_VDD_CLASS(vdd_dig, set_vdd_dig);
319
320/* TODO: Needs to confirm the below values */
321#define RPM_MISC_CLK_TYPE 0x306b6c63
322#define RPM_BUS_CLK_TYPE 0x316b6c63
323#define RPM_MEM_CLK_TYPE 0x326b6c63
324
325#define RPM_SMD_KEY_ENABLE 0x62616E45
326
327#define CXO_ID 0x0
328#define QDSS_ID 0x1
329
330#define PNOC_ID 0x0
331#define SNOC_ID 0x1
332#define CNOC_ID 0x2
333
334#define BIMC_ID 0x0
335
336#define D0_ID 1
337#define D1_ID 2
338#define A0_ID 3
339#define A1_ID 4
340#define A2_ID 5
341
342DEFINE_CLK_RPM_SMD_BRANCH(cxo_clk_src, cxo_a_clk_src,
343 RPM_MISC_CLK_TYPE, CXO_ID, 19200000);
344
345DEFINE_CLK_RPM_SMD(cnoc_clk, cnoc_a_clk, RPM_BUS_CLK_TYPE, CNOC_ID, NULL);
346DEFINE_CLK_RPM_SMD(pnoc_clk, pnoc_a_clk, RPM_BUS_CLK_TYPE, PNOC_ID, NULL);
347DEFINE_CLK_RPM_SMD(snoc_clk, snoc_a_clk, RPM_BUS_CLK_TYPE, SNOC_ID, NULL);
348
349DEFINE_CLK_RPM_SMD(bimc_clk, bimc_a_clk, RPM_MEM_CLK_TYPE, BIMC_ID, NULL);
350
351DEFINE_CLK_RPM_SMD_QDSS(qdss_clk, qdss_a_clk, RPM_MISC_CLK_TYPE, QDSS_ID);
352
353DEFINE_CLK_RPM_SMD_XO_BUFFER(cxo_d0, cxo_d0_a, D0_ID);
354DEFINE_CLK_RPM_SMD_XO_BUFFER(cxo_d1, cxo_d1_a, D1_ID);
355DEFINE_CLK_RPM_SMD_XO_BUFFER(cxo_a0, cxo_a0_a, A0_ID);
356DEFINE_CLK_RPM_SMD_XO_BUFFER(cxo_a1, cxo_a1_a, A1_ID);
357DEFINE_CLK_RPM_SMD_XO_BUFFER(cxo_a2, cxo_a2_a, A2_ID);
358
359DEFINE_CLK_RPM_SMD_XO_BUFFER_PINCTRL(cxo_d0_pin, cxo_d0_a_pin, D0_ID);
360DEFINE_CLK_RPM_SMD_XO_BUFFER_PINCTRL(cxo_d1_pin, cxo_d1_a_pin, D1_ID);
361DEFINE_CLK_RPM_SMD_XO_BUFFER_PINCTRL(cxo_a0_pin, cxo_a0_a_pin, A0_ID);
362DEFINE_CLK_RPM_SMD_XO_BUFFER_PINCTRL(cxo_a1_pin, cxo_a1_a_pin, A1_ID);
363DEFINE_CLK_RPM_SMD_XO_BUFFER_PINCTRL(cxo_a2_pin, cxo_a2_a_pin, A2_ID);
364
365static struct pll_vote_clk gpll0_clk_src = {
366 .en_reg = (void __iomem *)APCS_GPLL_ENA_VOTE_REG,
367 .status_reg = (void __iomem *)GPLL0_STATUS_REG,
368 .status_mask = BIT(17),
369 .parent = &cxo_clk_src.c,
370 .base = &virt_bases[GCC_BASE],
371 .c = {
372 .rate = 600000000,
373 .dbg_name = "gpll0_clk_src",
374 .ops = &clk_ops_pll_vote,
375 CLK_INIT(gpll0_clk_src.c),
376 },
377};
378
379static struct pll_vote_clk lpapll0_clk_src = {
380 .en_reg = (void __iomem *)LPASS_LPA_PLL_VOTE_APPS_REG,
381 .en_mask = BIT(0),
382 .status_reg = (void __iomem *)LPAPLL_STATUS_REG,
383 .status_mask = BIT(17),
384 .parent = &cxo_clk_src.c,
385 .base = &virt_bases[LPASS_BASE],
386 .c = {
387 .rate = 393216000,
388 .dbg_name = "lpapll0_clk_src",
389 .ops = &clk_ops_pll_vote,
390 CLK_INIT(lpapll0_clk_src.c),
391 },
392};
393
394static struct pll_vote_clk gpll1_clk_src = {
395 .en_reg = (void __iomem *)APCS_GPLL_ENA_VOTE_REG,
396 .en_mask = BIT(1),
397 .status_reg = (void __iomem *)GPLL1_STATUS_REG,
398 .status_mask = BIT(17),
399 .parent = &cxo_clk_src.c,
400 .base = &virt_bases[GCC_BASE],
401 .c = {
402 .rate = 480000000,
403 .dbg_name = "gpll1_clk_src",
404 .ops = &clk_ops_pll_vote,
405 CLK_INIT(gpll1_clk_src.c),
406 },
407};
408
409/*
410 * Need to skip handoff of the acpu pll to avoid handoff code
411 * to turn off the pll when the acpu is running off this pll.
412 */
413static struct pll_clk apcspll_clk_src = {
414 .mode_reg = (void __iomem *)APCS_CPU_PLL_MODE_REG,
415 .status_reg = (void __iomem *)APCS_CPU_PLL_STATUS_REG,
416 .parent = &cxo_clk_src.c,
417 .base = &virt_bases[APCS_PLL_BASE],
418 .c = {
419 .rate = 998400000,
420 .dbg_name = "apcspll_clk_src",
421 .ops = &clk_ops_local_pll,
422 CLK_INIT(apcspll_clk_src.c),
423 .flags = CLKFLAG_SKIP_HANDOFF,
424 },
425};
426
427static DEFINE_CLK_VOTER(pnoc_msmbus_clk, &pnoc_clk.c, LONG_MAX);
428static DEFINE_CLK_VOTER(snoc_msmbus_clk, &snoc_clk.c, LONG_MAX);
429static DEFINE_CLK_VOTER(cnoc_msmbus_clk, &cnoc_clk.c, LONG_MAX);
430static DEFINE_CLK_VOTER(pnoc_msmbus_a_clk, &pnoc_a_clk.c, LONG_MAX);
431static DEFINE_CLK_VOTER(snoc_msmbus_a_clk, &snoc_a_clk.c, LONG_MAX);
432static DEFINE_CLK_VOTER(cnoc_msmbus_a_clk, &cnoc_a_clk.c, LONG_MAX);
433
434static DEFINE_CLK_VOTER(bimc_msmbus_clk, &bimc_clk.c, LONG_MAX);
435static DEFINE_CLK_VOTER(bimc_msmbus_a_clk, &bimc_a_clk.c, LONG_MAX);
436
437static DEFINE_CLK_VOTER(pnoc_sdcc2_clk, &pnoc_clk.c, LONG_MAX);
438static DEFINE_CLK_VOTER(pnoc_sdcc3_clk, &pnoc_clk.c, LONG_MAX);
439
440static DEFINE_CLK_VOTER(pnoc_sps_clk, &pnoc_clk.c, LONG_MAX);
441
442static struct clk_freq_tbl ftbl_gcc_ipa_clk[] = {
443 F( 50000000, gpll0, 12, 0, 0),
444 F( 92310000, gpll0, 6.5, 0, 0),
445 F(100000000, gpll0, 6, 0, 0),
446 F_END
447};
448
449static struct rcg_clk ipa_clk_src = {
450 .cmd_rcgr_reg = IPA_CMD_RCGR,
451 .set_rate = set_rate_mnd,
452 .freq_tbl = ftbl_gcc_ipa_clk,
453 .current_freq = &rcg_dummy_freq,
454 .base = &virt_bases[GCC_BASE],
455 .c = {
456 .dbg_name = "ipa_clk_src",
457 .ops = &clk_ops_rcg_mnd,
458 VDD_DIG_FMAX_MAP2(LOW, 50000000, NOMINAL, 100000000),
459 CLK_INIT(ipa_clk_src.c)
460 },
461};
462
463static struct clk_freq_tbl ftbl_gcc_blsp1_qup1_6_spi_apps_clk[] = {
464 F( 960000, cxo, 10, 1, 2),
465 F( 4800000, cxo, 4, 0, 0),
466 F( 9600000, cxo, 2, 0, 0),
467 F(15000000, gpll0, 10, 1, 4),
468 F(19200000, cxo, 1, 0, 0),
469 F(25000000, gpll0, 12, 1, 2),
470 F(50000000, gpll0, 12, 0, 0),
471 F_END
472};
473
474static struct rcg_clk blsp1_qup1_spi_apps_clk_src = {
475 .cmd_rcgr_reg = BLSP1_QUP1_SPI_APPS_CMD_RCGR,
476 .set_rate = set_rate_mnd,
477 .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
478 .current_freq = &rcg_dummy_freq,
479 .base = &virt_bases[GCC_BASE],
480 .c = {
481 .dbg_name = "blsp1_qup1_spi_apps_clk_src",
482 .ops = &clk_ops_rcg_mnd,
483 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
484 CLK_INIT(blsp1_qup1_spi_apps_clk_src.c)
485 },
486};
487
488static struct rcg_clk blsp1_qup2_spi_apps_clk_src = {
489 .cmd_rcgr_reg = BLSP1_QUP2_SPI_APPS_CMD_RCGR,
490 .set_rate = set_rate_mnd,
491 .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
492 .current_freq = &rcg_dummy_freq,
493 .base = &virt_bases[GCC_BASE],
494 .c = {
495 .dbg_name = "blsp1_qup2_spi_apps_clk_src",
496 .ops = &clk_ops_rcg_mnd,
497 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
498 CLK_INIT(blsp1_qup2_spi_apps_clk_src.c)
499 },
500};
501
502static struct rcg_clk blsp1_qup3_spi_apps_clk_src = {
503 .cmd_rcgr_reg = BLSP1_QUP3_SPI_APPS_CMD_RCGR,
504 .set_rate = set_rate_mnd,
505 .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
506 .current_freq = &rcg_dummy_freq,
507 .base = &virt_bases[GCC_BASE],
508 .c = {
509 .dbg_name = "blsp1_qup3_spi_apps_clk_src",
510 .ops = &clk_ops_rcg_mnd,
511 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
512 CLK_INIT(blsp1_qup3_spi_apps_clk_src.c)
513 },
514};
515
516static struct rcg_clk blsp1_qup4_spi_apps_clk_src = {
517 .cmd_rcgr_reg = BLSP1_QUP4_SPI_APPS_CMD_RCGR,
518 .set_rate = set_rate_mnd,
519 .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
520 .current_freq = &rcg_dummy_freq,
521 .base = &virt_bases[GCC_BASE],
522 .c = {
523 .dbg_name = "blsp1_qup4_spi_apps_clk_src",
524 .ops = &clk_ops_rcg_mnd,
525 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
526 CLK_INIT(blsp1_qup4_spi_apps_clk_src.c)
527 },
528};
529
530static struct rcg_clk blsp1_qup5_spi_apps_clk_src = {
531 .cmd_rcgr_reg = BLSP1_QUP5_SPI_APPS_CMD_RCGR,
532 .set_rate = set_rate_mnd,
533 .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
534 .current_freq = &rcg_dummy_freq,
535 .base = &virt_bases[GCC_BASE],
536 .c = {
537 .dbg_name = "blsp1_qup5_spi_apps_clk_src",
538 .ops = &clk_ops_rcg_mnd,
539 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
540 CLK_INIT(blsp1_qup5_spi_apps_clk_src.c)
541 },
542};
543
544static struct rcg_clk blsp1_qup6_spi_apps_clk_src = {
545 .cmd_rcgr_reg = BLSP1_QUP6_SPI_APPS_CMD_RCGR,
546 .set_rate = set_rate_mnd,
547 .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
548 .current_freq = &rcg_dummy_freq,
549 .base = &virt_bases[GCC_BASE],
550 .c = {
551 .dbg_name = "blsp1_qup6_spi_apps_clk_src",
552 .ops = &clk_ops_rcg_mnd,
553 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
554 CLK_INIT(blsp1_qup6_spi_apps_clk_src.c)
555 },
556};
557
558static struct clk_freq_tbl ftbl_gcc_blsp1_uart1_6_apps_clk[] = {
559 F( 3686400, gpll0, 1, 96, 15625),
560 F( 7372800, gpll0, 1, 192, 15625),
561 F(14745600, gpll0, 1, 384, 15625),
562 F(16000000, gpll0, 5, 2, 15),
563 F(19200000, cxo, 1, 0, 0),
564 F(24000000, gpll0, 5, 1, 5),
565 F(32000000, gpll0, 1, 4, 75),
566 F(40000000, gpll0, 15, 0, 0),
567 F(46400000, gpll0, 1, 29, 375),
568 F(48000000, gpll0, 12.5, 0, 0),
569 F(51200000, gpll0, 1, 32, 375),
570 F(56000000, gpll0, 1, 7, 75),
571 F(58982400, gpll0, 1, 1536, 15625),
572 F(60000000, gpll0, 10, 0, 0),
573 F_END
574};
575
576static struct rcg_clk blsp1_uart1_apps_clk_src = {
577 .cmd_rcgr_reg = BLSP1_UART1_APPS_CMD_RCGR,
578 .set_rate = set_rate_mnd,
579 .freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
580 .current_freq = &rcg_dummy_freq,
581 .base = &virt_bases[GCC_BASE],
582 .c = {
583 .dbg_name = "blsp1_uart1_apps_clk_src",
584 .ops = &clk_ops_rcg_mnd,
585 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
586 CLK_INIT(blsp1_uart1_apps_clk_src.c)
587 },
588};
589
590static struct rcg_clk blsp1_uart2_apps_clk_src = {
591 .cmd_rcgr_reg = BLSP1_UART2_APPS_CMD_RCGR,
592 .set_rate = set_rate_mnd,
593 .freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
594 .current_freq = &rcg_dummy_freq,
595 .base = &virt_bases[GCC_BASE],
596 .c = {
597 .dbg_name = "blsp1_uart2_apps_clk_src",
598 .ops = &clk_ops_rcg_mnd,
599 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
600 CLK_INIT(blsp1_uart2_apps_clk_src.c)
601 },
602};
603
604static struct rcg_clk blsp1_uart3_apps_clk_src = {
605 .cmd_rcgr_reg = BLSP1_UART3_APPS_CMD_RCGR,
606 .set_rate = set_rate_mnd,
607 .freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
608 .current_freq = &rcg_dummy_freq,
609 .base = &virt_bases[GCC_BASE],
610 .c = {
611 .dbg_name = "blsp1_uart3_apps_clk_src",
612 .ops = &clk_ops_rcg_mnd,
613 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
614 CLK_INIT(blsp1_uart3_apps_clk_src.c)
615 },
616};
617
618static struct rcg_clk blsp1_uart4_apps_clk_src = {
619 .cmd_rcgr_reg = BLSP1_UART4_APPS_CMD_RCGR,
620 .set_rate = set_rate_mnd,
621 .freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
622 .current_freq = &rcg_dummy_freq,
623 .base = &virt_bases[GCC_BASE],
624 .c = {
625 .dbg_name = "blsp1_uart4_apps_clk_src",
626 .ops = &clk_ops_rcg_mnd,
627 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
628 CLK_INIT(blsp1_uart4_apps_clk_src.c)
629 },
630};
631
632static struct rcg_clk blsp1_uart5_apps_clk_src = {
633 .cmd_rcgr_reg = BLSP1_UART5_APPS_CMD_RCGR,
634 .set_rate = set_rate_mnd,
635 .freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
636 .current_freq = &rcg_dummy_freq,
637 .base = &virt_bases[GCC_BASE],
638 .c = {
639 .dbg_name = "blsp1_uart5_apps_clk_src",
640 .ops = &clk_ops_rcg_mnd,
641 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
642 CLK_INIT(blsp1_uart5_apps_clk_src.c)
643 },
644};
645
646static struct rcg_clk blsp1_uart6_apps_clk_src = {
647 .cmd_rcgr_reg = BLSP1_UART6_APPS_CMD_RCGR,
648 .set_rate = set_rate_mnd,
649 .freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
650 .current_freq = &rcg_dummy_freq,
651 .base = &virt_bases[GCC_BASE],
652 .c = {
653 .dbg_name = "blsp1_uart6_apps_clk_src",
654 .ops = &clk_ops_rcg_mnd,
655 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
656 CLK_INIT(blsp1_uart6_apps_clk_src.c)
657 },
658};
659
660static struct clk_freq_tbl ftbl_gcc_ce1_clk[] = {
661 F( 50000000, gpll0, 12, 0, 0),
662 F(100000000, gpll0, 6, 0, 0),
663 F_END
664};
665
666static struct rcg_clk ce1_clk_src = {
667 .cmd_rcgr_reg = CE1_CMD_RCGR,
668 .set_rate = set_rate_hid,
669 .freq_tbl = ftbl_gcc_ce1_clk,
670 .current_freq = &rcg_dummy_freq,
671 .base = &virt_bases[GCC_BASE],
672 .c = {
673 .dbg_name = "ce1_clk_src",
674 .ops = &clk_ops_rcg,
675 VDD_DIG_FMAX_MAP2(LOW, 50000000, NOMINAL, 100000000),
676 CLK_INIT(ce1_clk_src.c),
677 },
678};
679
680static struct clk_freq_tbl ftbl_gcc_gp_clk[] = {
681 F(19200000, cxo, 1, 0, 0),
682 F_END
683};
684
685static struct rcg_clk gp1_clk_src = {
686 .cmd_rcgr_reg = GP1_CMD_RCGR,
687 .set_rate = set_rate_mnd,
688 .freq_tbl = ftbl_gcc_gp_clk,
689 .current_freq = &rcg_dummy_freq,
690 .base = &virt_bases[GCC_BASE],
691 .c = {
692 .dbg_name = "gp1_clk_src",
693 .ops = &clk_ops_rcg_mnd,
694 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
695 CLK_INIT(gp1_clk_src.c)
696 },
697};
698
699static struct rcg_clk gp2_clk_src = {
700 .cmd_rcgr_reg = GP2_CMD_RCGR,
701 .set_rate = set_rate_mnd,
702 .freq_tbl = ftbl_gcc_gp_clk,
703 .current_freq = &rcg_dummy_freq,
704 .base = &virt_bases[GCC_BASE],
705 .c = {
706 .dbg_name = "gp2_clk_src",
707 .ops = &clk_ops_rcg_mnd,
708 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
709 CLK_INIT(gp2_clk_src.c)
710 },
711};
712
713static struct rcg_clk gp3_clk_src = {
714 .cmd_rcgr_reg = GP3_CMD_RCGR,
715 .set_rate = set_rate_mnd,
716 .freq_tbl = ftbl_gcc_gp_clk,
717 .current_freq = &rcg_dummy_freq,
718 .base = &virt_bases[GCC_BASE],
719 .c = {
720 .dbg_name = "gp3_clk_src",
721 .ops = &clk_ops_rcg_mnd,
722 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
723 CLK_INIT(gp3_clk_src.c)
724 },
725};
726
727static struct clk_freq_tbl ftbl_gcc_pdm2_clk[] = {
728 F(60000000, gpll0, 10, 0, 0),
729 F_END
730};
731
732static struct rcg_clk pdm2_clk_src = {
733 .cmd_rcgr_reg = PDM2_CMD_RCGR,
734 .set_rate = set_rate_hid,
735 .freq_tbl = ftbl_gcc_pdm2_clk,
736 .current_freq = &rcg_dummy_freq,
737 .base = &virt_bases[GCC_BASE],
738 .c = {
739 .dbg_name = "pdm2_clk_src",
740 .ops = &clk_ops_rcg,
741 VDD_DIG_FMAX_MAP1(LOW, 60000000),
742 CLK_INIT(pdm2_clk_src.c),
743 },
744};
745
746static struct clk_freq_tbl ftbl_gcc_qpic_clk[] = {
747 F( 50000000, gpll0, 12, 0, 0),
748 F(100000000, gpll0, 6, 0, 0),
749 F_END
750};
751
752static struct rcg_clk qpic_clk_src = {
753 .cmd_rcgr_reg = QPIC_CMD_RCGR,
754 .set_rate = set_rate_mnd,
755 .freq_tbl = ftbl_gcc_qpic_clk,
756 .current_freq = &rcg_dummy_freq,
757 .base = &virt_bases[GCC_BASE],
758 .c = {
759 .dbg_name = "qpic_clk_src",
760 .ops = &clk_ops_rcg_mnd,
761 VDD_DIG_FMAX_MAP2(LOW, 50000000, NOMINAL, 100000000),
762 CLK_INIT(qpic_clk_src.c)
763 },
764};
765
766static struct clk_freq_tbl ftbl_gcc_sdcc2_apps_clk[] = {
767 F( 144000, cxo, 16, 3, 25),
768 F( 400000, cxo, 12, 1, 4),
769 F( 20000000, gpll0, 15, 1, 2),
770 F( 25000000, gpll0, 12, 1, 2),
771 F( 50000000, gpll0, 12, 0, 0),
772 F(100000000, gpll0, 6, 0, 0),
773 F(200000000, gpll0, 3, 0, 0),
774 F_END
775};
776
777static struct clk_freq_tbl ftbl_gcc_sdcc3_apps_clk[] = {
778 F( 144000, cxo, 16, 3, 25),
779 F( 400000, cxo, 12, 1, 4),
780 F( 20000000, gpll0, 15, 1, 2),
781 F( 25000000, gpll0, 12, 1, 2),
782 F( 50000000, gpll0, 12, 0, 0),
783 F(100000000, gpll0, 6, 0, 0),
784 F_END
785};
786
787static struct rcg_clk sdcc2_apps_clk_src = {
788 .cmd_rcgr_reg = SDCC2_APPS_CMD_RCGR,
789 .set_rate = set_rate_mnd,
790 .freq_tbl = ftbl_gcc_sdcc2_apps_clk,
791 .current_freq = &rcg_dummy_freq,
792 .base = &virt_bases[GCC_BASE],
793 .c = {
794 .dbg_name = "sdcc2_apps_clk_src",
795 .ops = &clk_ops_rcg_mnd,
796 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
797 CLK_INIT(sdcc2_apps_clk_src.c)
798 },
799};
800
801static struct rcg_clk sdcc3_apps_clk_src = {
802 .cmd_rcgr_reg = SDCC3_APPS_CMD_RCGR,
803 .set_rate = set_rate_mnd,
804 .freq_tbl = ftbl_gcc_sdcc3_apps_clk,
805 .current_freq = &rcg_dummy_freq,
806 .base = &virt_bases[GCC_BASE],
807 .c = {
808 .dbg_name = "sdcc3_apps_clk_src",
809 .ops = &clk_ops_rcg_mnd,
810 VDD_DIG_FMAX_MAP2(LOW, 50000000, NOMINAL, 100000000),
811 CLK_INIT(sdcc3_apps_clk_src.c)
812 },
813};
814
815static struct clk_freq_tbl ftbl_gcc_usb_hs_system_clk[] = {
816 F(75000000, gpll0, 8, 0, 0),
817 F_END
818};
819
820static struct rcg_clk usb_hs_system_clk_src = {
821 .cmd_rcgr_reg = USB_HS_SYSTEM_CMD_RCGR,
822 .set_rate = set_rate_hid,
823 .freq_tbl = ftbl_gcc_usb_hs_system_clk,
824 .current_freq = &rcg_dummy_freq,
825 .base = &virt_bases[GCC_BASE],
826 .c = {
827 .dbg_name = "usb_hs_system_clk_src",
828 .ops = &clk_ops_rcg,
829 VDD_DIG_FMAX_MAP2(LOW, 37500000, NOMINAL, 75000000),
830 CLK_INIT(usb_hs_system_clk_src.c),
831 },
832};
833
834static struct clk_freq_tbl ftbl_gcc_usb_hsic_clk[] = {
835 F_HSIC(480000000, gpll1, 1, 0, 0),
836 F_END
837};
838
839static struct rcg_clk usb_hsic_clk_src = {
840 .cmd_rcgr_reg = USB_HSIC_CMD_RCGR,
841 .set_rate = set_rate_hid,
842 .freq_tbl = ftbl_gcc_usb_hsic_clk,
843 .current_freq = &rcg_dummy_freq,
844 .base = &virt_bases[GCC_BASE],
845 .c = {
846 .dbg_name = "usb_hsic_clk_src",
847 .ops = &clk_ops_rcg,
848 VDD_DIG_FMAX_MAP1(LOW, 480000000),
849 CLK_INIT(usb_hsic_clk_src.c),
850 },
851};
852
853static struct clk_freq_tbl ftbl_gcc_usb_hsic_io_cal_clk[] = {
854 F(9600000, cxo, 2, 0, 0),
855 F_END
856};
857
858static struct rcg_clk usb_hsic_io_cal_clk_src = {
859 .cmd_rcgr_reg = USB_HSIC_IO_CAL_CMD_RCGR,
860 .set_rate = set_rate_hid,
861 .freq_tbl = ftbl_gcc_usb_hsic_io_cal_clk,
862 .current_freq = &rcg_dummy_freq,
863 .base = &virt_bases[GCC_BASE],
864 .c = {
865 .dbg_name = "usb_hsic_io_cal_clk_src",
866 .ops = &clk_ops_rcg,
867 VDD_DIG_FMAX_MAP1(LOW, 9600000),
868 CLK_INIT(usb_hsic_io_cal_clk_src.c),
869 },
870};
871
872static struct clk_freq_tbl ftbl_gcc_usb_hsic_system_clk[] = {
873 F(75000000, gpll0, 8, 0, 0),
874 F_END
875};
876
877static struct rcg_clk usb_hsic_system_clk_src = {
878 .cmd_rcgr_reg = USB_HSIC_SYSTEM_CMD_RCGR,
879 .set_rate = set_rate_hid,
880 .freq_tbl = ftbl_gcc_usb_hsic_system_clk,
881 .current_freq = &rcg_dummy_freq,
882 .base = &virt_bases[GCC_BASE],
883 .c = {
884 .dbg_name = "usb_hsic_system_clk_src",
885 .ops = &clk_ops_rcg,
886 VDD_DIG_FMAX_MAP2(LOW, 60000000, NOMINAL, 75000000),
887 CLK_INIT(usb_hsic_system_clk_src.c),
888 },
889};
890
891static struct clk_freq_tbl ftbl_gcc_usb_hsic_xcvr_fs_clk[] = {
892 F(60000000, gpll0, 10, 0, 0),
893 F_END
894};
895
896static struct rcg_clk usb_hsic_xcvr_fs_clk_src = {
897 .cmd_rcgr_reg = USB_HSIC_XCVR_FS_CMD_RCGR,
898 .set_rate = set_rate_hid,
899 .freq_tbl = ftbl_gcc_usb_hsic_xcvr_fs_clk,
900 .current_freq = &rcg_dummy_freq,
901 .base = &virt_bases[GCC_BASE],
902 .c = {
903 .dbg_name = "usb_hsic_xcvr_fs_clk_src",
904 .ops = &clk_ops_rcg,
905 VDD_DIG_FMAX_MAP1(LOW, 60000000),
906 CLK_INIT(usb_hsic_xcvr_fs_clk_src.c),
907 },
908};
909
910static struct local_vote_clk gcc_bam_dma_ahb_clk = {
911 .cbcr_reg = BAM_DMA_AHB_CBCR,
912 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
913 .en_mask = BIT(12),
914 .base = &virt_bases[GCC_BASE],
915 .c = {
916 .dbg_name = "gcc_bam_dma_ahb_clk",
917 .ops = &clk_ops_vote,
918 CLK_INIT(gcc_bam_dma_ahb_clk.c),
919 },
920};
921
922static struct local_vote_clk gcc_blsp1_ahb_clk = {
923 .cbcr_reg = BLSP1_AHB_CBCR,
924 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
925 .en_mask = BIT(17),
926 .base = &virt_bases[GCC_BASE],
927 .c = {
928 .dbg_name = "gcc_blsp1_ahb_clk",
929 .ops = &clk_ops_vote,
930 CLK_INIT(gcc_blsp1_ahb_clk.c),
931 },
932};
933
934static struct branch_clk gcc_blsp1_qup1_i2c_apps_clk = {
935 .cbcr_reg = BLSP1_QUP1_I2C_APPS_CBCR,
936 .parent = &cxo_clk_src.c,
937 .has_sibling = 1,
938 .base = &virt_bases[GCC_BASE],
939 .c = {
940 .dbg_name = "gcc_blsp1_qup1_i2c_apps_clk",
941 .ops = &clk_ops_branch,
942 CLK_INIT(gcc_blsp1_qup1_i2c_apps_clk.c),
943 },
944};
945
946static struct branch_clk gcc_blsp1_qup1_spi_apps_clk = {
947 .cbcr_reg = BLSP1_QUP1_SPI_APPS_CBCR,
948 .parent = &blsp1_qup1_spi_apps_clk_src.c,
949 .has_sibling = 0,
950 .base = &virt_bases[GCC_BASE],
951 .c = {
952 .dbg_name = "gcc_blsp1_qup1_spi_apps_clk",
953 .ops = &clk_ops_branch,
954 CLK_INIT(gcc_blsp1_qup1_spi_apps_clk.c),
955 },
956};
957
958static struct branch_clk gcc_blsp1_qup2_i2c_apps_clk = {
959 .cbcr_reg = BLSP1_QUP2_I2C_APPS_CBCR,
960 .parent = &cxo_clk_src.c,
961 .has_sibling = 1,
962 .base = &virt_bases[GCC_BASE],
963 .c = {
964 .dbg_name = "gcc_blsp1_qup2_i2c_apps_clk",
965 .ops = &clk_ops_branch,
966 CLK_INIT(gcc_blsp1_qup2_i2c_apps_clk.c),
967 },
968};
969
970static struct branch_clk gcc_blsp1_qup2_spi_apps_clk = {
971 .cbcr_reg = BLSP1_QUP2_SPI_APPS_CBCR,
972 .parent = &blsp1_qup2_spi_apps_clk_src.c,
973 .has_sibling = 0,
974 .base = &virt_bases[GCC_BASE],
975 .c = {
976 .dbg_name = "gcc_blsp1_qup2_spi_apps_clk",
977 .ops = &clk_ops_branch,
978 CLK_INIT(gcc_blsp1_qup2_spi_apps_clk.c),
979 },
980};
981
982static struct branch_clk gcc_blsp1_qup3_i2c_apps_clk = {
983 .cbcr_reg = BLSP1_QUP3_I2C_APPS_CBCR,
984 .parent = &cxo_clk_src.c,
985 .has_sibling = 1,
986 .base = &virt_bases[GCC_BASE],
987 .c = {
988 .dbg_name = "gcc_blsp1_qup3_i2c_apps_clk",
989 .ops = &clk_ops_branch,
990 CLK_INIT(gcc_blsp1_qup3_i2c_apps_clk.c),
991 },
992};
993
994static struct branch_clk gcc_blsp1_qup3_spi_apps_clk = {
995 .cbcr_reg = BLSP1_QUP3_SPI_APPS_CBCR,
996 .parent = &blsp1_qup3_spi_apps_clk_src.c,
997 .has_sibling = 0,
998 .base = &virt_bases[GCC_BASE],
999 .c = {
1000 .dbg_name = "gcc_blsp1_qup3_spi_apps_clk",
1001 .ops = &clk_ops_branch,
1002 CLK_INIT(gcc_blsp1_qup3_spi_apps_clk.c),
1003 },
1004};
1005
1006static struct branch_clk gcc_blsp1_qup4_i2c_apps_clk = {
1007 .cbcr_reg = BLSP1_QUP4_I2C_APPS_CBCR,
1008 .parent = &cxo_clk_src.c,
1009 .has_sibling = 1,
1010 .base = &virt_bases[GCC_BASE],
1011 .c = {
1012 .dbg_name = "gcc_blsp1_qup4_i2c_apps_clk",
1013 .ops = &clk_ops_branch,
1014 CLK_INIT(gcc_blsp1_qup4_i2c_apps_clk.c),
1015 },
1016};
1017
1018static struct branch_clk gcc_blsp1_qup4_spi_apps_clk = {
1019 .cbcr_reg = BLSP1_QUP4_SPI_APPS_CBCR,
1020 .parent = &blsp1_qup4_spi_apps_clk_src.c,
1021 .has_sibling = 0,
1022 .base = &virt_bases[GCC_BASE],
1023 .c = {
1024 .dbg_name = "gcc_blsp1_qup4_spi_apps_clk",
1025 .ops = &clk_ops_branch,
1026 CLK_INIT(gcc_blsp1_qup4_spi_apps_clk.c),
1027 },
1028};
1029
1030static struct branch_clk gcc_blsp1_qup5_i2c_apps_clk = {
1031 .cbcr_reg = BLSP1_QUP5_I2C_APPS_CBCR,
1032 .parent = &cxo_clk_src.c,
1033 .has_sibling = 1,
1034 .base = &virt_bases[GCC_BASE],
1035 .c = {
1036 .dbg_name = "gcc_blsp1_qup5_i2c_apps_clk",
1037 .ops = &clk_ops_branch,
1038 CLK_INIT(gcc_blsp1_qup5_i2c_apps_clk.c),
1039 },
1040};
1041
1042static struct branch_clk gcc_blsp1_qup5_spi_apps_clk = {
1043 .cbcr_reg = BLSP1_QUP5_SPI_APPS_CBCR,
1044 .parent = &blsp1_qup5_spi_apps_clk_src.c,
1045 .has_sibling = 0,
1046 .base = &virt_bases[GCC_BASE],
1047 .c = {
1048 .dbg_name = "gcc_blsp1_qup5_spi_apps_clk",
1049 .ops = &clk_ops_branch,
1050 CLK_INIT(gcc_blsp1_qup5_spi_apps_clk.c),
1051 },
1052};
1053
1054static struct branch_clk gcc_blsp1_qup6_i2c_apps_clk = {
1055 .cbcr_reg = BLSP1_QUP6_I2C_APPS_CBCR,
1056 .parent = &cxo_clk_src.c,
1057 .has_sibling = 1,
1058 .base = &virt_bases[GCC_BASE],
1059 .c = {
1060 .dbg_name = "gcc_blsp1_qup6_i2c_apps_clk",
1061 .ops = &clk_ops_branch,
1062 CLK_INIT(gcc_blsp1_qup6_i2c_apps_clk.c),
1063 },
1064};
1065
1066static struct branch_clk gcc_blsp1_qup6_spi_apps_clk = {
1067 .cbcr_reg = BLSP1_QUP6_SPI_APPS_CBCR,
1068 .parent = &blsp1_qup6_spi_apps_clk_src.c,
1069 .has_sibling = 0,
1070 .base = &virt_bases[GCC_BASE],
1071 .c = {
1072 .dbg_name = "gcc_blsp1_qup6_spi_apps_clk",
1073 .ops = &clk_ops_branch,
1074 CLK_INIT(gcc_blsp1_qup6_spi_apps_clk.c),
1075 },
1076};
1077
1078static struct branch_clk gcc_blsp1_uart1_apps_clk = {
1079 .cbcr_reg = BLSP1_UART1_APPS_CBCR,
1080 .parent = &blsp1_uart1_apps_clk_src.c,
1081 .has_sibling = 0,
1082 .base = &virt_bases[GCC_BASE],
1083 .c = {
1084 .dbg_name = "gcc_blsp1_uart1_apps_clk",
1085 .ops = &clk_ops_branch,
1086 CLK_INIT(gcc_blsp1_uart1_apps_clk.c),
1087 },
1088};
1089
1090static struct branch_clk gcc_blsp1_uart2_apps_clk = {
1091 .cbcr_reg = BLSP1_UART2_APPS_CBCR,
1092 .parent = &blsp1_uart2_apps_clk_src.c,
1093 .has_sibling = 0,
1094 .base = &virt_bases[GCC_BASE],
1095 .c = {
1096 .dbg_name = "gcc_blsp1_uart2_apps_clk",
1097 .ops = &clk_ops_branch,
1098 CLK_INIT(gcc_blsp1_uart2_apps_clk.c),
1099 },
1100};
1101
1102static struct branch_clk gcc_blsp1_uart3_apps_clk = {
1103 .cbcr_reg = BLSP1_UART3_APPS_CBCR,
1104 .parent = &blsp1_uart3_apps_clk_src.c,
1105 .has_sibling = 0,
1106 .base = &virt_bases[GCC_BASE],
1107 .c = {
1108 .dbg_name = "gcc_blsp1_uart3_apps_clk",
1109 .ops = &clk_ops_branch,
1110 CLK_INIT(gcc_blsp1_uart3_apps_clk.c),
1111 },
1112};
1113
1114static struct branch_clk gcc_blsp1_uart4_apps_clk = {
1115 .cbcr_reg = BLSP1_UART4_APPS_CBCR,
1116 .parent = &blsp1_uart4_apps_clk_src.c,
1117 .has_sibling = 0,
1118 .base = &virt_bases[GCC_BASE],
1119 .c = {
1120 .dbg_name = "gcc_blsp1_uart4_apps_clk",
1121 .ops = &clk_ops_branch,
1122 CLK_INIT(gcc_blsp1_uart4_apps_clk.c),
1123 },
1124};
1125
1126static struct branch_clk gcc_blsp1_uart5_apps_clk = {
1127 .cbcr_reg = BLSP1_UART5_APPS_CBCR,
1128 .parent = &blsp1_uart5_apps_clk_src.c,
1129 .has_sibling = 0,
1130 .base = &virt_bases[GCC_BASE],
1131 .c = {
1132 .dbg_name = "gcc_blsp1_uart5_apps_clk",
1133 .ops = &clk_ops_branch,
1134 CLK_INIT(gcc_blsp1_uart5_apps_clk.c),
1135 },
1136};
1137
1138static struct branch_clk gcc_blsp1_uart6_apps_clk = {
1139 .cbcr_reg = BLSP1_UART6_APPS_CBCR,
1140 .parent = &blsp1_uart6_apps_clk_src.c,
1141 .has_sibling = 0,
1142 .base = &virt_bases[GCC_BASE],
1143 .c = {
1144 .dbg_name = "gcc_blsp1_uart6_apps_clk",
1145 .ops = &clk_ops_branch,
1146 CLK_INIT(gcc_blsp1_uart6_apps_clk.c),
1147 },
1148};
1149
1150static struct local_vote_clk gcc_boot_rom_ahb_clk = {
1151 .cbcr_reg = BOOT_ROM_AHB_CBCR,
1152 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
1153 .en_mask = BIT(10),
1154 .base = &virt_bases[GCC_BASE],
1155 .c = {
1156 .dbg_name = "gcc_boot_rom_ahb_clk",
1157 .ops = &clk_ops_vote,
1158 CLK_INIT(gcc_boot_rom_ahb_clk.c),
1159 },
1160};
1161
1162static struct local_vote_clk gcc_ce1_ahb_clk = {
1163 .cbcr_reg = CE1_AHB_CBCR,
1164 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
1165 .en_mask = BIT(3),
1166 .base = &virt_bases[GCC_BASE],
1167 .c = {
1168 .dbg_name = "gcc_ce1_ahb_clk",
1169 .ops = &clk_ops_vote,
1170 CLK_INIT(gcc_ce1_ahb_clk.c),
1171 },
1172};
1173
1174static struct local_vote_clk gcc_ce1_axi_clk = {
1175 .cbcr_reg = CE1_AXI_CBCR,
1176 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
1177 .en_mask = BIT(4),
1178 .base = &virt_bases[GCC_BASE],
1179 .c = {
1180 .dbg_name = "gcc_ce1_axi_clk",
1181 .ops = &clk_ops_vote,
1182 CLK_INIT(gcc_ce1_axi_clk.c),
1183 },
1184};
1185
1186static struct local_vote_clk gcc_ce1_clk = {
1187 .cbcr_reg = CE1_CBCR,
1188 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
1189 .en_mask = BIT(5),
1190 .base = &virt_bases[GCC_BASE],
1191 .c = {
1192 .dbg_name = "gcc_ce1_clk",
1193 .ops = &clk_ops_vote,
1194 CLK_INIT(gcc_ce1_clk.c),
1195 },
1196};
1197
1198static struct branch_clk gcc_gp1_clk = {
1199 .cbcr_reg = GP1_CBCR,
1200 .parent = &gp1_clk_src.c,
1201 .has_sibling = 0,
1202 .base = &virt_bases[GCC_BASE],
1203 .c = {
1204 .dbg_name = "gcc_gp1_clk",
1205 .ops = &clk_ops_branch,
1206 CLK_INIT(gcc_gp1_clk.c),
1207 },
1208};
1209
1210static struct branch_clk gcc_gp2_clk = {
1211 .cbcr_reg = GP2_CBCR,
1212 .parent = &gp2_clk_src.c,
1213 .has_sibling = 0,
1214 .base = &virt_bases[GCC_BASE],
1215 .c = {
1216 .dbg_name = "gcc_gp2_clk",
1217 .ops = &clk_ops_branch,
1218 CLK_INIT(gcc_gp2_clk.c),
1219 },
1220};
1221
1222static struct branch_clk gcc_gp3_clk = {
1223 .cbcr_reg = GP3_CBCR,
1224 .parent = &gp3_clk_src.c,
1225 .has_sibling = 0,
1226 .base = &virt_bases[GCC_BASE],
1227 .c = {
1228 .dbg_name = "gcc_gp3_clk",
1229 .ops = &clk_ops_branch,
1230 CLK_INIT(gcc_gp3_clk.c),
1231 },
1232};
1233
1234static struct branch_clk gcc_ipa_clk = {
1235 .cbcr_reg = IPA_CBCR,
1236 .parent = &ipa_clk_src.c,
1237 .has_sibling = 1,
1238 .base = &virt_bases[GCC_BASE],
1239 .c = {
1240 .dbg_name = "gcc_ipa_clk",
1241 .ops = &clk_ops_branch,
1242 CLK_INIT(gcc_ipa_clk.c),
1243 },
1244};
1245
1246static struct branch_clk gcc_ipa_cnoc_clk = {
1247 .cbcr_reg = IPA_CNOC_CBCR,
1248 .has_sibling = 1,
1249 .base = &virt_bases[GCC_BASE],
1250 .c = {
1251 .dbg_name = "gcc_ipa_cnoc_clk",
1252 .ops = &clk_ops_branch,
1253 CLK_INIT(gcc_ipa_cnoc_clk.c),
1254 },
1255};
1256
1257static struct branch_clk gcc_pdm2_clk = {
1258 .cbcr_reg = PDM2_CBCR,
1259 .parent = &pdm2_clk_src.c,
1260 .has_sibling = 0,
1261 .base = &virt_bases[GCC_BASE],
1262 .c = {
1263 .dbg_name = "gcc_pdm2_clk",
1264 .ops = &clk_ops_branch,
1265 CLK_INIT(gcc_pdm2_clk.c),
1266 },
1267};
1268
1269static struct branch_clk gcc_pdm_ahb_clk = {
1270 .cbcr_reg = PDM_AHB_CBCR,
1271 .has_sibling = 1,
1272 .base = &virt_bases[GCC_BASE],
1273 .c = {
1274 .dbg_name = "gcc_pdm_ahb_clk",
1275 .ops = &clk_ops_branch,
1276 CLK_INIT(gcc_pdm_ahb_clk.c),
1277 },
1278};
1279
1280static struct local_vote_clk gcc_prng_ahb_clk = {
1281 .cbcr_reg = PRNG_AHB_CBCR,
1282 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
1283 .en_mask = BIT(13),
1284 .base = &virt_bases[GCC_BASE],
1285 .c = {
1286 .dbg_name = "gcc_prng_ahb_clk",
1287 .ops = &clk_ops_vote,
1288 CLK_INIT(gcc_prng_ahb_clk.c),
1289 },
1290};
1291
1292static struct branch_clk gcc_qpic_ahb_clk = {
1293 .cbcr_reg = QPIC_AHB_CBCR,
1294 .has_sibling = 1,
1295 .base = &virt_bases[GCC_BASE],
1296 .c = {
1297 .dbg_name = "gcc_qpic_ahb_clk",
1298 .ops = &clk_ops_branch,
1299 CLK_INIT(gcc_qpic_ahb_clk.c),
1300 },
1301};
1302
1303static struct branch_clk gcc_qpic_clk = {
1304 .cbcr_reg = QPIC_CBCR,
1305 .parent = &qpic_clk_src.c,
1306 .has_sibling = 0,
1307 .base = &virt_bases[GCC_BASE],
1308 .c = {
1309 .dbg_name = "gcc_qpic_clk",
1310 .ops = &clk_ops_branch,
1311 CLK_INIT(gcc_qpic_clk.c),
1312 },
1313};
1314
1315static struct branch_clk gcc_sdcc2_ahb_clk = {
1316 .cbcr_reg = SDCC2_AHB_CBCR,
1317 .has_sibling = 1,
1318 .base = &virt_bases[GCC_BASE],
1319 .c = {
1320 .dbg_name = "gcc_sdcc2_ahb_clk",
1321 .ops = &clk_ops_branch,
1322 CLK_INIT(gcc_sdcc2_ahb_clk.c),
1323 },
1324};
1325
1326static struct branch_clk gcc_sdcc2_apps_clk = {
1327 .cbcr_reg = SDCC2_APPS_CBCR,
1328 .parent = &sdcc2_apps_clk_src.c,
1329 .has_sibling = 0,
1330 .base = &virt_bases[GCC_BASE],
1331 .c = {
1332 .dbg_name = "gcc_sdcc2_apps_clk",
1333 .ops = &clk_ops_branch,
1334 CLK_INIT(gcc_sdcc2_apps_clk.c),
1335 },
1336};
1337
1338static struct branch_clk gcc_sdcc3_ahb_clk = {
1339 .cbcr_reg = SDCC3_AHB_CBCR,
1340 .has_sibling = 1,
1341 .base = &virt_bases[GCC_BASE],
1342 .c = {
1343 .dbg_name = "gcc_sdcc3_ahb_clk",
1344 .ops = &clk_ops_branch,
1345 CLK_INIT(gcc_sdcc3_ahb_clk.c),
1346 },
1347};
1348
1349static struct branch_clk gcc_sdcc3_apps_clk = {
1350 .cbcr_reg = SDCC3_APPS_CBCR,
1351 .parent = &sdcc3_apps_clk_src.c,
1352 .has_sibling = 0,
1353 .base = &virt_bases[GCC_BASE],
1354 .c = {
1355 .dbg_name = "gcc_sdcc3_apps_clk",
1356 .ops = &clk_ops_branch,
1357 CLK_INIT(gcc_sdcc3_apps_clk.c),
1358 },
1359};
1360
1361static struct branch_clk gcc_sys_noc_ipa_axi_clk = {
1362 .cbcr_reg = SYS_NOC_IPA_AXI_CBCR,
1363 .parent = &ipa_clk_src.c,
1364 .has_sibling = 1,
1365 .base = &virt_bases[GCC_BASE],
1366 .c = {
1367 .dbg_name = "gcc_sys_noc_ipa_axi_clk",
1368 .ops = &clk_ops_branch,
1369 CLK_INIT(gcc_sys_noc_ipa_axi_clk.c),
1370 },
1371};
1372
1373static struct branch_clk gcc_usb_hs_ahb_clk = {
1374 .cbcr_reg = USB_HS_AHB_CBCR,
1375 .has_sibling = 1,
1376 .base = &virt_bases[GCC_BASE],
1377 .c = {
1378 .dbg_name = "gcc_usb_hs_ahb_clk",
1379 .ops = &clk_ops_branch,
1380 CLK_INIT(gcc_usb_hs_ahb_clk.c),
1381 },
1382};
1383
1384static struct branch_clk gcc_usb_hs_system_clk = {
1385 .cbcr_reg = USB_HS_SYSTEM_CBCR,
1386 .bcr_reg = USB_HS_BCR,
1387 .parent = &usb_hs_system_clk_src.c,
1388 .has_sibling = 0,
1389 .base = &virt_bases[GCC_BASE],
1390 .c = {
1391 .dbg_name = "gcc_usb_hs_system_clk",
1392 .ops = &clk_ops_branch,
1393 CLK_INIT(gcc_usb_hs_system_clk.c),
1394 },
1395};
1396
1397static struct branch_clk gcc_usb_hsic_ahb_clk = {
1398 .cbcr_reg = USB_HSIC_AHB_CBCR,
1399 .has_sibling = 1,
1400 .base = &virt_bases[GCC_BASE],
1401 .c = {
1402 .dbg_name = "gcc_usb_hsic_ahb_clk",
1403 .ops = &clk_ops_branch,
1404 CLK_INIT(gcc_usb_hsic_ahb_clk.c),
1405 },
1406};
1407
1408static struct branch_clk gcc_usb_hsic_clk = {
1409 .cbcr_reg = USB_HSIC_CBCR,
1410 .parent = &usb_hsic_clk_src.c,
1411 .has_sibling = 0,
1412 .base = &virt_bases[GCC_BASE],
1413 .c = {
1414 .dbg_name = "gcc_usb_hsic_clk",
1415 .ops = &clk_ops_branch,
1416 CLK_INIT(gcc_usb_hsic_clk.c),
1417 },
1418};
1419
1420static struct branch_clk gcc_usb_hsic_io_cal_clk = {
1421 .cbcr_reg = USB_HSIC_IO_CAL_CBCR,
1422 .parent = &usb_hsic_io_cal_clk_src.c,
1423 .has_sibling = 0,
1424 .base = &virt_bases[GCC_BASE],
1425 .c = {
1426 .dbg_name = "gcc_usb_hsic_io_cal_clk",
1427 .ops = &clk_ops_branch,
1428 CLK_INIT(gcc_usb_hsic_io_cal_clk.c),
1429 },
1430};
1431
1432static struct branch_clk gcc_usb_hsic_system_clk = {
1433 .cbcr_reg = USB_HSIC_SYSTEM_CBCR,
1434 .bcr_reg = USB_HS_HSIC_BCR,
1435 .parent = &usb_hsic_system_clk_src.c,
1436 .has_sibling = 0,
1437 .base = &virt_bases[GCC_BASE],
1438 .c = {
1439 .dbg_name = "gcc_usb_hsic_system_clk",
1440 .ops = &clk_ops_branch,
1441 CLK_INIT(gcc_usb_hsic_system_clk.c),
1442 },
1443};
1444
1445static struct branch_clk gcc_usb_hsic_xcvr_fs_clk = {
1446 .cbcr_reg = USB_HSIC_XCVR_FS_CBCR,
1447 .parent = &usb_hsic_xcvr_fs_clk_src.c,
1448 .has_sibling = 0,
1449 .base = &virt_bases[GCC_BASE],
1450 .c = {
1451 .dbg_name = "gcc_usb_hsic_xcvr_fs_clk",
1452 .ops = &clk_ops_branch,
1453 CLK_INIT(gcc_usb_hsic_xcvr_fs_clk.c),
1454 },
1455};
1456
1457/* LPASS clock data */
1458static struct clk_freq_tbl ftbl_audio_core_lpaif_clock[] = {
1459 F_LPASS( 512000, lpapll0, 16, 1, 48),
1460 F_LPASS( 768000, lpapll0, 16, 1, 32),
1461 F_LPASS( 1024000, lpapll0, 16, 1, 24),
1462 F_LPASS( 1536000, lpapll0, 16, 1, 16),
1463 F_LPASS( 2048000, lpapll0, 16, 1, 12),
1464 F_LPASS( 3072000, lpapll0, 16, 1, 8),
1465 F_LPASS( 4096000, lpapll0, 16, 1, 6),
1466 F_LPASS( 6144000, lpapll0, 16, 1, 4),
1467 F_LPASS( 8192000, lpapll0, 16, 1, 3),
1468 F_LPASS(12288000, lpapll0, 16, 1, 2),
1469 F_END
1470};
1471
1472static struct clk_freq_tbl ftbl_audio_core_lpaif_pcm_clock[] = {
1473 F_LPASS( 512000, lpapll0, 16, 1, 48),
1474 F_LPASS( 768000, lpapll0, 16, 1, 32),
1475 F_LPASS( 1024000, lpapll0, 16, 1, 24),
1476 F_LPASS( 1536000, lpapll0, 16, 1, 16),
1477 F_LPASS( 2048000, lpapll0, 16, 1, 12),
1478 F_LPASS( 3072000, lpapll0, 16, 1, 8),
1479 F_LPASS( 4096000, lpapll0, 16, 1, 6),
1480 F_LPASS( 6144000, lpapll0, 16, 1, 4),
1481 F_LPASS( 8192000, lpapll0, 16, 1, 3),
1482 F_END
1483};
1484
1485static struct rcg_clk audio_core_lpaif_pcmoe_clk_src = {
1486 .cmd_rcgr_reg = LPAIF_PCMOE_CMD_RCGR,
1487 .set_rate = set_rate_mnd,
1488 .freq_tbl = ftbl_audio_core_lpaif_clock,
1489 .current_freq = &rcg_dummy_freq,
1490 .base = &virt_bases[LPASS_BASE],
1491 .c = {
1492 .dbg_name = "audio_core_lpaif_pcmoe_clk_src",
1493 .ops = &clk_ops_rcg_mnd,
1494 VDD_DIG_FMAX_MAP1(LOW, 12288000),
1495 CLK_INIT(audio_core_lpaif_pcmoe_clk_src.c)
1496 },
1497};
1498
1499static struct rcg_clk audio_core_lpaif_pri_clk_src = {
1500 .cmd_rcgr_reg = LPAIF_PRI_CMD_RCGR,
1501 .set_rate = set_rate_mnd,
1502 .freq_tbl = ftbl_audio_core_lpaif_clock,
1503 .current_freq = &rcg_dummy_freq,
1504 .base = &virt_bases[LPASS_BASE],
1505 .c = {
1506 .dbg_name = "audio_core_lpaif_pri_clk_src",
1507 .ops = &clk_ops_rcg_mnd,
1508 VDD_DIG_FMAX_MAP2(LOW, 12288000, NOMINAL, 24576000),
1509 CLK_INIT(audio_core_lpaif_pri_clk_src.c)
1510 },
1511};
1512
1513static struct rcg_clk audio_core_lpaif_sec_clk_src = {
1514 .cmd_rcgr_reg = LPAIF_SEC_CMD_RCGR,
1515 .set_rate = set_rate_mnd,
1516 .freq_tbl = ftbl_audio_core_lpaif_clock,
1517 .current_freq = &rcg_dummy_freq,
1518 .base = &virt_bases[LPASS_BASE],
1519 .c = {
1520 .dbg_name = "audio_core_lpaif_sec_clk_src",
1521 .ops = &clk_ops_rcg_mnd,
1522 VDD_DIG_FMAX_MAP2(LOW, 12288000, NOMINAL, 24576000),
1523 CLK_INIT(audio_core_lpaif_sec_clk_src.c)
1524 },
1525};
1526
1527static struct clk_freq_tbl ftbl_audio_core_slimbus_core_clock[] = {
1528 F_LPASS(26041000, lpapll0, 1, 10, 151),
1529 F_END
1530};
1531
1532static struct rcg_clk audio_core_slimbus_core_clk_src = {
1533 .cmd_rcgr_reg = SLIMBUS_CMD_RCGR,
1534 .set_rate = set_rate_mnd,
1535 .freq_tbl = ftbl_audio_core_slimbus_core_clock,
1536 .current_freq = &rcg_dummy_freq,
1537 .base = &virt_bases[LPASS_BASE],
1538 .c = {
1539 .dbg_name = "audio_core_slimbus_core_clk_src",
1540 .ops = &clk_ops_rcg_mnd,
1541 VDD_DIG_FMAX_MAP2(LOW, 13107000, NOMINAL, 26214000),
1542 CLK_INIT(audio_core_slimbus_core_clk_src.c)
1543 },
1544};
1545
1546static struct rcg_clk audio_core_lpaif_pcm0_clk_src = {
1547 .cmd_rcgr_reg = LPAIF_PCM0_CMD_RCGR,
1548 .set_rate = set_rate_mnd,
1549 .freq_tbl = ftbl_audio_core_lpaif_pcm_clock,
1550 .current_freq = &rcg_dummy_freq,
1551 .base = &virt_bases[LPASS_BASE],
1552 .c = {
1553 .dbg_name = "audio_core_lpaif_pcm0_clk_src",
1554 .ops = &clk_ops_rcg_mnd,
1555 VDD_DIG_FMAX_MAP2(LOW, 4096000, NOMINAL, 8192000),
1556 CLK_INIT(audio_core_lpaif_pcm0_clk_src.c)
1557 },
1558};
1559
1560static struct rcg_clk audio_core_lpaif_pcm1_clk_src = {
1561 .cmd_rcgr_reg = LPAIF_PCM1_CMD_RCGR,
1562 .set_rate = set_rate_mnd,
1563 .freq_tbl = ftbl_audio_core_lpaif_pcm_clock,
1564 .current_freq = &rcg_dummy_freq,
1565 .base = &virt_bases[LPASS_BASE],
1566 .c = {
1567 .dbg_name = "audio_core_lpaif_pcm1_clk_src",
1568 .ops = &clk_ops_rcg_mnd,
1569 VDD_DIG_FMAX_MAP2(LOW, 4096000, NOMINAL, 8192000),
1570 CLK_INIT(audio_core_lpaif_pcm1_clk_src.c)
1571 },
1572};
1573
1574static struct branch_clk audio_core_slimbus_lfabif_clk = {
1575 .cbcr_reg = AUDIO_CORE_SLIMBUS_LFABIF_CBCR,
1576 .has_sibling = 1,
1577 .base = &virt_bases[LPASS_BASE],
1578 .c = {
1579 .dbg_name = "audio_core_slimbus_lfabif_clk",
1580 .ops = &clk_ops_branch,
1581 CLK_INIT(audio_core_slimbus_lfabif_clk.c),
1582 },
1583};
1584
1585static struct branch_clk audio_core_lpaif_pcm_data_oe_clk = {
1586 .cbcr_reg = AUDIO_CORE_LPAIF_PCM_DATA_OE_CBCR,
1587 .parent = &audio_core_lpaif_pcmoe_clk_src.c,
1588 .base = &virt_bases[LPASS_BASE],
1589 .c = {
1590 .dbg_name = "audio_core_lpaif_pcm_data_oe_clk",
1591 .ops = &clk_ops_branch,
1592 CLK_INIT(audio_core_lpaif_pcm_data_oe_clk.c),
1593 },
1594};
1595
1596static struct branch_clk audio_core_slimbus_core_clk = {
1597 .cbcr_reg = AUDIO_CORE_SLIMBUS_CORE_CBCR,
1598 .parent = &audio_core_slimbus_core_clk_src.c,
1599 .base = &virt_bases[LPASS_BASE],
1600 .c = {
1601 .dbg_name = "audio_core_slimbus_core_clk",
1602 .ops = &clk_ops_branch,
1603 CLK_INIT(audio_core_slimbus_core_clk.c),
1604 },
1605};
1606
1607static struct branch_clk audio_core_lpaif_pri_ebit_clk = {
1608 .cbcr_reg = AUDIO_CORE_LPAIF_PRI_EBIT_CBCR,
1609 .has_sibling = 0,
1610 .base = &virt_bases[LPASS_BASE],
1611 .c = {
1612 .dbg_name = "audio_core_lpaif_pri_ebit_clk",
1613 .ops = &clk_ops_branch,
1614 CLK_INIT(audio_core_lpaif_pri_ebit_clk.c),
1615 },
1616};
1617
1618static struct branch_clk audio_core_lpaif_pri_ibit_clk = {
1619 .cbcr_reg = AUDIO_CORE_LPAIF_PRI_IBIT_CBCR,
1620 .parent = &audio_core_lpaif_pri_clk_src.c,
1621 .has_sibling = 1,
1622 .max_div = 15,
1623 .base = &virt_bases[LPASS_BASE],
1624 .c = {
1625 .dbg_name = "audio_core_lpaif_pri_ibit_clk",
1626 .ops = &clk_ops_branch,
1627 CLK_INIT(audio_core_lpaif_pri_ibit_clk.c),
1628 },
1629};
1630
1631static struct branch_clk audio_core_lpaif_pri_osr_clk = {
1632 .cbcr_reg = AUDIO_CORE_LPAIF_PRI_OSR_CBCR,
1633 .parent = &audio_core_lpaif_pri_clk_src.c,
1634 .has_sibling = 1,
1635 .base = &virt_bases[LPASS_BASE],
1636 .c = {
1637 .dbg_name = "audio_core_lpaif_pri_osr_clk",
1638 .ops = &clk_ops_branch,
1639 CLK_INIT(audio_core_lpaif_pri_osr_clk.c),
1640 },
1641};
1642
1643static struct branch_clk audio_core_lpaif_pcm0_ebit_clk = {
1644 .cbcr_reg = AUDIO_CORE_LPAIF_PCM0_EBIT_CBCR,
1645 .has_sibling = 0,
1646 .base = &virt_bases[LPASS_BASE],
1647 .c = {
1648 .dbg_name = "audio_core_lpaif_pcm0_ebit_clk",
1649 .ops = &clk_ops_branch,
1650 CLK_INIT(audio_core_lpaif_pcm0_ebit_clk.c),
1651 },
1652};
1653
1654static struct branch_clk audio_core_lpaif_pcm0_ibit_clk = {
1655 .cbcr_reg = AUDIO_CORE_LPAIF_PCM0_IBIT_CBCR,
1656 .parent = &audio_core_lpaif_pcm0_clk_src.c,
1657 .has_sibling = 0,
1658 .base = &virt_bases[LPASS_BASE],
1659 .c = {
1660 .dbg_name = "audio_core_lpaif_pcm0_ibit_clk",
1661 .ops = &clk_ops_branch,
1662 CLK_INIT(audio_core_lpaif_pcm0_ibit_clk.c),
1663 },
1664};
1665
1666static struct branch_clk audio_core_lpaif_sec_ebit_clk = {
1667 .cbcr_reg = AUDIO_CORE_LPAIF_SEC_EBIT_CBCR,
1668 .has_sibling = 0,
1669 .base = &virt_bases[LPASS_BASE],
1670 .c = {
1671 .dbg_name = "audio_core_lpaif_sec_ebit_clk",
1672 .ops = &clk_ops_branch,
1673 CLK_INIT(audio_core_lpaif_sec_ebit_clk.c),
1674 },
1675};
1676
1677static struct branch_clk audio_core_lpaif_sec_ibit_clk = {
1678 .cbcr_reg = AUDIO_CORE_LPAIF_SEC_IBIT_CBCR,
1679 .parent = &audio_core_lpaif_sec_clk_src.c,
1680 .has_sibling = 1,
1681 .max_div = 15,
1682 .base = &virt_bases[LPASS_BASE],
1683 .c = {
1684 .dbg_name = "audio_core_lpaif_sec_ibit_clk",
1685 .ops = &clk_ops_branch,
1686 CLK_INIT(audio_core_lpaif_sec_ibit_clk.c),
1687 },
1688};
1689
1690static struct branch_clk audio_core_lpaif_sec_osr_clk = {
1691 .cbcr_reg = AUDIO_CORE_LPAIF_SEC_OSR_CBCR,
1692 .parent = &audio_core_lpaif_sec_clk_src.c,
1693 .has_sibling = 1,
1694 .base = &virt_bases[LPASS_BASE],
1695 .c = {
1696 .dbg_name = "audio_core_lpaif_sec_osr_clk",
1697 .ops = &clk_ops_branch,
1698 CLK_INIT(audio_core_lpaif_sec_osr_clk.c),
1699 },
1700};
1701
1702static struct branch_clk audio_core_lpaif_pcm1_ebit_clk = {
1703 .cbcr_reg = AUDIO_CORE_LPAIF_PCM1_EBIT_CBCR,
1704 .has_sibling = 0,
1705 .base = &virt_bases[LPASS_BASE],
1706 .c = {
1707 .dbg_name = "audio_core_lpaif_pcm1_ebit_clk",
1708 .ops = &clk_ops_branch,
1709 CLK_INIT(audio_core_lpaif_pcm1_ebit_clk.c),
1710 },
1711};
1712
1713static struct branch_clk audio_core_lpaif_pcm1_ibit_clk = {
1714 .cbcr_reg = AUDIO_CORE_LPAIF_PCM1_IBIT_CBCR,
1715 .parent = &audio_core_lpaif_pcm1_clk_src.c,
1716 .has_sibling = 0,
1717 .base = &virt_bases[LPASS_BASE],
1718 .c = {
1719 .dbg_name = "audio_core_lpaif_pcm1_ibit_clk",
1720 .ops = &clk_ops_branch,
1721 CLK_INIT(audio_core_lpaif_pcm1_ibit_clk.c),
1722 },
1723};
1724
1725static DEFINE_CLK_MEASURE(a5_m_clk);
1726
1727#ifdef CONFIG_DEBUG_FS
1728
1729struct measure_mux_entry {
1730 struct clk *c;
1731 int base;
1732 u32 debug_mux;
1733};
1734
1735struct measure_mux_entry measure_mux[] = {
1736 {&gcc_pdm_ahb_clk.c, GCC_BASE, 0x00d0},
1737 {&gcc_usb_hsic_xcvr_fs_clk.c, GCC_BASE, 0x005d},
1738 {&gcc_usb_hsic_system_clk.c, GCC_BASE, 0x0059},
1739 {&gcc_usb_hsic_io_cal_clk.c, GCC_BASE, 0x005b},
1740 {&gcc_sdcc3_ahb_clk.c, GCC_BASE, 0x0079},
1741 {&gcc_blsp1_qup5_i2c_apps_clk.c, GCC_BASE, 0x009d},
1742 {&gcc_blsp1_qup1_spi_apps_clk.c, GCC_BASE, 0x008a},
1743 {&gcc_blsp1_uart2_apps_clk.c, GCC_BASE, 0x0091},
1744 {&gcc_blsp1_qup4_spi_apps_clk.c, GCC_BASE, 0x0098},
1745 {&gcc_blsp1_qup3_spi_apps_clk.c, GCC_BASE, 0x0093},
1746 {&gcc_blsp1_qup6_i2c_apps_clk.c, GCC_BASE, 0x00a2},
1747 {&gcc_bam_dma_ahb_clk.c, GCC_BASE, 0x00e0},
1748 {&gcc_sdcc3_apps_clk.c, GCC_BASE, 0x0078},
1749 {&gcc_usb_hs_system_clk.c, GCC_BASE, 0x0060},
1750 {&gcc_blsp1_ahb_clk.c, GCC_BASE, 0x0088},
1751 {&gcc_blsp1_uart4_apps_clk.c, GCC_BASE, 0x009a},
1752 {&gcc_blsp1_qup2_spi_apps_clk.c, GCC_BASE, 0x008e},
1753 {&gcc_usb_hsic_ahb_clk.c, GCC_BASE, 0x0058},
1754 {&gcc_blsp1_uart3_apps_clk.c, GCC_BASE, 0x0095},
1755 {&gcc_ce1_axi_clk.c, GCC_BASE, 0x0139},
1756 {&gcc_blsp1_qup5_spi_apps_clk.c, GCC_BASE, 0x009c},
1757 {&gcc_usb_hs_ahb_clk.c, GCC_BASE, 0x0061},
1758 {&gcc_blsp1_qup6_spi_apps_clk.c, GCC_BASE, 0x00a1},
1759 {&gcc_prng_ahb_clk.c, GCC_BASE, 0x00d8},
1760 {&gcc_blsp1_qup3_i2c_apps_clk.c, GCC_BASE, 0x0094},
1761 {&gcc_usb_hsic_clk.c, GCC_BASE, 0x005a},
1762 {&gcc_blsp1_uart6_apps_clk.c, GCC_BASE, 0x00a3},
1763 {&gcc_sdcc2_apps_clk.c, GCC_BASE, 0x0070},
1764 {&gcc_blsp1_uart1_apps_clk.c, GCC_BASE, 0x008c},
1765 {&gcc_blsp1_qup4_i2c_apps_clk.c, GCC_BASE, 0x0099},
1766 {&gcc_boot_rom_ahb_clk.c, GCC_BASE, 0x00f8},
1767 {&gcc_ce1_ahb_clk.c, GCC_BASE, 0x013a},
1768 {&gcc_pdm2_clk.c, GCC_BASE, 0x00d2},
1769 {&gcc_blsp1_uart5_apps_clk.c, GCC_BASE, 0x009e},
1770 {&gcc_blsp1_qup2_i2c_apps_clk.c, GCC_BASE, 0x0090},
1771 {&gcc_blsp1_qup1_i2c_apps_clk.c, GCC_BASE, 0x008b},
1772 {&gcc_sdcc2_ahb_clk.c, GCC_BASE, 0x0071},
1773 {&gcc_ce1_clk.c, GCC_BASE, 0x0138},
1774 {&gcc_sys_noc_ipa_axi_clk.c, GCC_BASE, 0x0007},
1775
1776 {&audio_core_lpaif_pcm_data_oe_clk.c, LPASS_BASE, 0x0030},
1777 {&audio_core_slimbus_core_clk.c, LPASS_BASE, 0x003d},
1778 {&audio_core_lpaif_pri_clk_src.c, LPASS_BASE, 0x0017},
1779 {&audio_core_lpaif_sec_clk_src.c, LPASS_BASE, 0x0016},
1780 {&audio_core_slimbus_core_clk_src.c, LPASS_BASE, 0x0011},
1781 {&audio_core_lpaif_pcm1_clk_src.c, LPASS_BASE, 0x0012},
1782 {&audio_core_lpaif_pcm0_clk_src.c, LPASS_BASE, 0x0013},
1783 {&audio_core_lpaif_pcmoe_clk_src.c, LPASS_BASE, 0x000f},
1784 {&audio_core_slimbus_lfabif_clk.c, LPASS_BASE, 0x003e},
1785
1786 {&a5_m_clk, APCS_BASE, 0x3},
1787
1788 {&dummy_clk, N_BASES, 0x0000},
1789};
1790
1791static int measure_clk_set_parent(struct clk *c, struct clk *parent)
1792{
1793 struct measure_clk *clk = to_measure_clk(c);
1794 unsigned long flags;
1795 u32 regval, clk_sel, i;
1796
1797 if (!parent)
1798 return -EINVAL;
1799
1800 for (i = 0; i < (ARRAY_SIZE(measure_mux) - 1); i++)
1801 if (measure_mux[i].c == parent)
1802 break;
1803
1804 if (measure_mux[i].c == &dummy_clk)
1805 return -EINVAL;
1806
1807 spin_lock_irqsave(&local_clock_reg_lock, flags);
1808 /*
1809 * Program the test vector, measurement period (sample_ticks)
1810 * and scaling multiplier.
1811 */
1812 clk->sample_ticks = 0x10000;
1813 clk->multiplier = 1;
1814
1815 writel_relaxed(0, LPASS_REG_BASE(LPASS_DEBUG_CLK_CTL_REG));
1816 writel_relaxed(0, GCC_REG_BASE(GCC_DEBUG_CLK_CTL_REG));
1817
1818 switch (measure_mux[i].base) {
1819
1820 case GCC_BASE:
1821 clk_sel = measure_mux[i].debug_mux;
1822 break;
1823
1824 case LPASS_BASE:
1825 clk_sel = 0x161;
1826 regval = BVAL(15, 0, measure_mux[i].debug_mux);
1827 writel_relaxed(regval, LPASS_REG_BASE(LPASS_DEBUG_CLK_CTL_REG));
1828
1829 /* Activate debug clock output */
1830 regval |= BIT(20);
1831 writel_relaxed(regval, LPASS_REG_BASE(LPASS_DEBUG_CLK_CTL_REG));
1832 break;
1833
1834 case APCS_BASE:
1835 clk_sel = 0x16A;
1836 regval = BVAL(5, 3, measure_mux[i].debug_mux);
1837 writel_relaxed(regval, APCS_REG_BASE(APCS_CLK_DIAG_REG));
1838
1839 /* Activate debug clock output */
1840 regval |= BIT(7);
1841 writel_relaxed(regval, APCS_REG_BASE(APCS_CLK_DIAG_REG));
1842 break;
1843
1844 default:
1845 return -EINVAL;
1846 }
1847
1848 /* Set debug mux clock index */
1849 regval = BVAL(8, 0, clk_sel);
1850 writel_relaxed(regval, GCC_REG_BASE(GCC_DEBUG_CLK_CTL_REG));
1851
1852 /* Activate debug clock output */
1853 regval |= BIT(16);
1854 writel_relaxed(regval, GCC_REG_BASE(GCC_DEBUG_CLK_CTL_REG));
1855
1856 /* Make sure test vector is set before starting measurements. */
1857 mb();
1858 spin_unlock_irqrestore(&local_clock_reg_lock, flags);
1859
1860 return 0;
1861}
1862
1863/* Sample clock for 'ticks' reference clock ticks. */
1864static u32 run_measurement(unsigned ticks)
1865{
1866 /* Stop counters and set the XO4 counter start value. */
1867 writel_relaxed(ticks, GCC_REG_BASE(CLOCK_FRQ_MEASURE_CTL_REG));
1868
1869 /* Wait for timer to become ready. */
1870 while ((readl_relaxed(GCC_REG_BASE(CLOCK_FRQ_MEASURE_STATUS_REG)) &
1871 BIT(25)) != 0)
1872 cpu_relax();
1873
1874 /* Run measurement and wait for completion. */
1875 writel_relaxed(BIT(20)|ticks, GCC_REG_BASE(CLOCK_FRQ_MEASURE_CTL_REG));
1876 while ((readl_relaxed(GCC_REG_BASE(CLOCK_FRQ_MEASURE_STATUS_REG)) &
1877 BIT(25)) == 0)
1878 cpu_relax();
1879
1880 /* Return measured ticks. */
1881 return readl_relaxed(GCC_REG_BASE(CLOCK_FRQ_MEASURE_STATUS_REG)) &
1882 BM(24, 0);
1883}
1884
1885/*
1886 * Perform a hardware rate measurement for a given clock.
1887 * FOR DEBUG USE ONLY: Measurements take ~15 ms!
1888 */
1889static unsigned long measure_clk_get_rate(struct clk *c)
1890{
1891 unsigned long flags;
1892 u32 gcc_xo4_reg_backup;
1893 u64 raw_count_short, raw_count_full;
1894 struct measure_clk *clk = to_measure_clk(c);
1895 unsigned ret;
1896
1897 ret = clk_prepare_enable(&cxo_clk_src.c);
1898 if (ret) {
1899 pr_warning("CXO clock failed to enable. Can't measure\n");
1900 return 0;
1901 }
1902
1903 spin_lock_irqsave(&local_clock_reg_lock, flags);
1904
1905 /* Enable CXO/4 and RINGOSC branch. */
1906 gcc_xo4_reg_backup = readl_relaxed(GCC_REG_BASE(GCC_XO_DIV4_CBCR_REG));
1907 writel_relaxed(0x1, GCC_REG_BASE(GCC_XO_DIV4_CBCR_REG));
1908
1909 /*
1910 * The ring oscillator counter will not reset if the measured clock
1911 * is not running. To detect this, run a short measurement before
1912 * the full measurement. If the raw results of the two are the same
1913 * then the clock must be off.
1914 */
1915
1916 /* Run a short measurement. (~1 ms) */
1917 raw_count_short = run_measurement(0x1000);
1918 /* Run a full measurement. (~14 ms) */
1919 raw_count_full = run_measurement(clk->sample_ticks);
1920
1921 writel_relaxed(gcc_xo4_reg_backup, GCC_REG_BASE(GCC_XO_DIV4_CBCR_REG));
1922
1923 /* Return 0 if the clock is off. */
1924 if (raw_count_full == raw_count_short) {
1925 ret = 0;
1926 } else {
1927 /* Compute rate in Hz. */
1928 raw_count_full = ((raw_count_full * 10) + 15) * 4800000;
1929 do_div(raw_count_full, ((clk->sample_ticks * 10) + 35));
1930 ret = (raw_count_full * clk->multiplier);
1931 }
1932
1933 writel_relaxed(0x51A00, GCC_REG_BASE(GCC_PLLTEST_PAD_CFG_REG));
1934 spin_unlock_irqrestore(&local_clock_reg_lock, flags);
1935
1936 clk_disable_unprepare(&cxo_clk_src.c);
1937
1938 return ret;
1939}
1940#else /* !CONFIG_DEBUG_FS */
1941static int measure_clk_set_parent(struct clk *clk, struct clk *parent)
1942{
1943 return -EINVAL;
1944}
1945
1946static unsigned long measure_clk_get_rate(struct clk *clk)
1947{
1948 return 0;
1949}
1950#endif /* CONFIG_DEBUG_FS */
1951
1952static struct clk_ops clk_ops_measure = {
1953 .set_parent = measure_clk_set_parent,
1954 .get_rate = measure_clk_get_rate,
1955};
1956
1957static struct measure_clk measure_clk = {
1958 .c = {
1959 .dbg_name = "measure_clk",
1960 .ops = &clk_ops_measure,
1961 CLK_INIT(measure_clk.c),
1962 },
1963 .multiplier = 1,
1964};
1965
1966static struct clk_lookup msm_clocks_9625[] = {
1967 CLK_LOOKUP("xo", cxo_clk_src.c, ""),
1968 CLK_LOOKUP("measure", measure_clk.c, "debug"),
1969
1970 CLK_LOOKUP("pll0", gpll0_clk_src.c, "f9010008.qcom,acpuclk"),
1971 CLK_LOOKUP("pll14", apcspll_clk_src.c, "f9010008.qcom,acpuclk"),
1972
1973 CLK_LOOKUP("dma_bam_pclk", gcc_bam_dma_ahb_clk.c, "msm_sps"),
1974 CLK_LOOKUP("iface_clk", gcc_blsp1_ahb_clk.c, "msm_serial_hsl.0"),
1975 CLK_LOOKUP("iface_clk", gcc_blsp1_ahb_clk.c, "spi_qsd.1"),
1976 CLK_LOOKUP("iface_clk", gcc_blsp1_ahb_clk.c, "f9925000.i2c"),
1977 CLK_LOOKUP("iface_clk", gcc_blsp1_ahb_clk.c, ""),
1978 CLK_LOOKUP("core_clk", gcc_blsp1_qup1_i2c_apps_clk.c, ""),
1979 CLK_LOOKUP("core_clk", gcc_blsp1_qup1_spi_apps_clk.c, "spi_qsd.1"),
1980 CLK_LOOKUP("core_clk", gcc_blsp1_qup2_i2c_apps_clk.c, ""),
1981 CLK_LOOKUP("core_clk", gcc_blsp1_qup2_spi_apps_clk.c, ""),
1982 CLK_LOOKUP("core_clk", gcc_blsp1_qup3_i2c_apps_clk.c, "f9925000.i2c"),
1983 CLK_LOOKUP("core_clk", gcc_blsp1_qup3_spi_apps_clk.c, ""),
1984 CLK_LOOKUP("core_clk", gcc_blsp1_qup4_i2c_apps_clk.c, ""),
1985 CLK_LOOKUP("core_clk", gcc_blsp1_qup4_spi_apps_clk.c, ""),
1986 CLK_LOOKUP("core_clk", gcc_blsp1_qup5_i2c_apps_clk.c, ""),
1987 CLK_LOOKUP("core_clk", gcc_blsp1_qup5_spi_apps_clk.c, ""),
1988 CLK_LOOKUP("core_clk", gcc_blsp1_qup6_i2c_apps_clk.c, ""),
1989 CLK_LOOKUP("core_clk", gcc_blsp1_qup6_spi_apps_clk.c, ""),
1990 CLK_LOOKUP("core_clk", gcc_blsp1_uart1_apps_clk.c, ""),
1991 CLK_LOOKUP("core_clk", gcc_blsp1_uart2_apps_clk.c, ""),
1992 CLK_LOOKUP("core_clk", gcc_blsp1_uart3_apps_clk.c, "msm_serial_hsl.0"),
1993 CLK_LOOKUP("core_clk", gcc_blsp1_uart4_apps_clk.c, ""),
1994 CLK_LOOKUP("core_clk", gcc_blsp1_uart5_apps_clk.c, ""),
1995 CLK_LOOKUP("core_clk", gcc_blsp1_uart6_apps_clk.c, ""),
1996
1997 CLK_LOOKUP("core_clk_src", ce1_clk_src.c, ""),
1998 CLK_LOOKUP("core_clk", gcc_ce1_clk.c, ""),
1999 CLK_LOOKUP("iface_clk", gcc_ce1_ahb_clk.c, ""),
2000 CLK_LOOKUP("bus_clk", gcc_ce1_axi_clk.c, ""),
2001
2002 CLK_LOOKUP("core_clk", gcc_gp1_clk.c, ""),
2003 CLK_LOOKUP("core_clk", gcc_gp2_clk.c, ""),
2004 CLK_LOOKUP("core_clk", gcc_gp3_clk.c, ""),
2005
2006 CLK_LOOKUP("core_src_clk", ipa_clk_src.c, "fd4c0000.qcom,ipa"),
2007 CLK_LOOKUP("core_clk", gcc_ipa_clk.c, "fd4c0000.qcom,ipa"),
2008 CLK_LOOKUP("bus_clk", gcc_sys_noc_ipa_axi_clk.c, "fd4c0000.qcom,ipa"),
2009 CLK_LOOKUP("iface_clk", gcc_ipa_cnoc_clk.c, "fd4c0000.qcom,ipa"),
2010
2011 CLK_LOOKUP("core_clk", gcc_pdm2_clk.c, ""),
2012 CLK_LOOKUP("iface_clk", gcc_pdm_ahb_clk.c, ""),
2013
Tianyi Gou389ba432012-10-01 13:58:38 -07002014 CLK_LOOKUP("iface_clk", gcc_sdcc2_ahb_clk.c, "f98a4000.qcom,sdcc"),
2015 CLK_LOOKUP("core_clk", gcc_sdcc2_apps_clk.c, "f98a4000.qcom,sdcc"),
2016 CLK_LOOKUP("bus_clk", pnoc_sdcc2_clk.c, "f98a4000.qcom,sdcc"),
2017 CLK_LOOKUP("iface_clk", gcc_sdcc3_ahb_clk.c, ""),
2018 CLK_LOOKUP("core_clk", gcc_sdcc3_apps_clk.c, ""),
2019 CLK_LOOKUP("bus_clk", pnoc_sdcc3_clk.c, ""),
2020
2021 CLK_LOOKUP("iface_clk", gcc_usb_hs_ahb_clk.c, "f9a55000.usb"),
2022 CLK_LOOKUP("core_clk", gcc_usb_hs_system_clk.c, "f9a55000.usb"),
2023 CLK_LOOKUP("iface_clk", gcc_usb_hsic_ahb_clk.c, "f9a15000.hsic"),
2024 CLK_LOOKUP("phy_clk", gcc_usb_hsic_clk.c, "f9a15000.hsic"),
2025 CLK_LOOKUP("cal_clk", gcc_usb_hsic_io_cal_clk.c, "f9a15000.hsic"),
2026 CLK_LOOKUP("core_clk", gcc_usb_hsic_system_clk.c, "f9a15000.hsic"),
2027 CLK_LOOKUP("alt_core_clk", gcc_usb_hsic_xcvr_fs_clk.c,
2028 "f9a15000.hsic"),
2029
2030 /* LPASS clocks */
2031 CLK_LOOKUP("core_clk", audio_core_slimbus_core_clk.c, "fe12f000.slim"),
2032 CLK_LOOKUP("iface_clk", audio_core_slimbus_lfabif_clk.c, ""),
2033 CLK_LOOKUP("core_clk", audio_core_lpaif_pri_clk_src.c, ""),
2034 CLK_LOOKUP("osr_clk", audio_core_lpaif_pri_osr_clk.c, ""),
2035 CLK_LOOKUP("ebit_clk", audio_core_lpaif_pri_ebit_clk.c, ""),
2036 CLK_LOOKUP("ibit_clk", audio_core_lpaif_pri_ibit_clk.c, ""),
2037 CLK_LOOKUP("core_clk", audio_core_lpaif_sec_clk_src.c, ""),
2038 CLK_LOOKUP("osr_clk", audio_core_lpaif_sec_osr_clk.c, ""),
2039 CLK_LOOKUP("ebit_clk", audio_core_lpaif_sec_ebit_clk.c, ""),
2040 CLK_LOOKUP("ibit_clk", audio_core_lpaif_sec_ibit_clk.c, ""),
2041 CLK_LOOKUP("core_clk", audio_core_lpaif_pcm0_clk_src.c, ""),
2042 CLK_LOOKUP("ebit_clk", audio_core_lpaif_pcm0_ebit_clk.c, ""),
2043 CLK_LOOKUP("ibit_clk", audio_core_lpaif_pcm0_ibit_clk.c, ""),
2044 CLK_LOOKUP("core_clk", audio_core_lpaif_pcm1_clk_src.c, ""),
2045 CLK_LOOKUP("ebit_clk", audio_core_lpaif_pcm1_ebit_clk.c, ""),
2046 CLK_LOOKUP("ibit_clk", audio_core_lpaif_pcm1_ibit_clk.c, ""),
2047 CLK_LOOKUP("core_oe_src_clk", audio_core_lpaif_pcmoe_clk_src.c, ""),
2048 CLK_LOOKUP("core_oe_clk", audio_core_lpaif_pcm_data_oe_clk.c, ""),
2049
2050 /* RPM and voter clocks */
2051 CLK_LOOKUP("bus_clk", snoc_clk.c, ""),
2052 CLK_LOOKUP("bus_clk", pnoc_clk.c, ""),
2053 CLK_LOOKUP("bus_clk", cnoc_clk.c, ""),
2054 CLK_LOOKUP("mem_clk", bimc_clk.c, ""),
2055 CLK_LOOKUP("bus_clk", snoc_a_clk.c, ""),
2056 CLK_LOOKUP("bus_clk", pnoc_a_clk.c, ""),
2057 CLK_LOOKUP("bus_clk", cnoc_a_clk.c, ""),
2058 CLK_LOOKUP("mem_clk", bimc_a_clk.c, ""),
2059
2060 CLK_LOOKUP("bus_clk", cnoc_msmbus_clk.c, "msm_config_noc"),
2061 CLK_LOOKUP("bus_a_clk", cnoc_msmbus_a_clk.c, "msm_config_noc"),
2062 CLK_LOOKUP("bus_clk", snoc_msmbus_clk.c, "msm_sys_noc"),
2063 CLK_LOOKUP("bus_a_clk", snoc_msmbus_a_clk.c, "msm_sys_noc"),
2064 CLK_LOOKUP("bus_clk", pnoc_msmbus_clk.c, "msm_periph_noc"),
2065 CLK_LOOKUP("bus_a_clk", pnoc_msmbus_a_clk.c, "msm_periph_noc"),
2066 CLK_LOOKUP("mem_clk", bimc_msmbus_clk.c, "msm_bimc"),
2067 CLK_LOOKUP("mem_a_clk", bimc_msmbus_a_clk.c, "msm_bimc"),
2068
2069 CLK_LOOKUP("dfab_clk", pnoc_sps_clk.c, "msm_sps"),
2070
2071 CLK_LOOKUP("a5_m_clk", a5_m_clk, ""),
2072};
2073
2074static struct pll_config_regs gpll0_regs __initdata = {
2075 .l_reg = (void __iomem *)GPLL0_L_REG,
2076 .m_reg = (void __iomem *)GPLL0_M_REG,
2077 .n_reg = (void __iomem *)GPLL0_N_REG,
2078 .config_reg = (void __iomem *)GPLL0_USER_CTL_REG,
2079 .mode_reg = (void __iomem *)GPLL0_MODE_REG,
2080 .base = &virt_bases[GCC_BASE],
2081};
2082
2083/* GPLL0 at 600 MHz, main output enabled. */
2084static struct pll_config gpll0_config __initdata = {
2085 .l = 0x1f,
2086 .m = 0x1,
2087 .n = 0x4,
2088 .vco_val = 0x0,
2089 .vco_mask = BM(21, 20),
2090 .pre_div_val = 0x0,
2091 .pre_div_mask = BM(14, 12),
2092 .post_div_val = 0x0,
2093 .post_div_mask = BM(9, 8),
2094 .mn_ena_val = BIT(24),
2095 .mn_ena_mask = BIT(24),
2096 .main_output_val = BIT(0),
2097 .main_output_mask = BIT(0),
2098};
2099
2100static struct pll_config_regs gpll1_regs __initdata = {
2101 .l_reg = (void __iomem *)GPLL1_L_REG,
2102 .m_reg = (void __iomem *)GPLL1_M_REG,
2103 .n_reg = (void __iomem *)GPLL1_N_REG,
2104 .config_reg = (void __iomem *)GPLL1_USER_CTL_REG,
2105 .mode_reg = (void __iomem *)GPLL1_MODE_REG,
2106 .base = &virt_bases[GCC_BASE],
2107};
2108
2109/* GPLL1 at 480 MHz, main output enabled. */
2110static struct pll_config gpll1_config __initdata = {
2111 .l = 0x19,
2112 .m = 0x0,
2113 .n = 0x1,
2114 .vco_val = 0x0,
2115 .vco_mask = BM(21, 20),
2116 .pre_div_val = 0x0,
2117 .pre_div_mask = BM(14, 12),
2118 .post_div_val = 0x0,
2119 .post_div_mask = BM(9, 8),
2120 .main_output_val = BIT(0),
2121 .main_output_mask = BIT(0),
2122};
2123
2124static struct pll_config_regs lpapll0_regs __initdata = {
2125 .l_reg = (void __iomem *)LPAPLL_L_REG,
2126 .m_reg = (void __iomem *)LPAPLL_M_REG,
2127 .n_reg = (void __iomem *)LPAPLL_N_REG,
2128 .config_reg = (void __iomem *)LPAPLL_USER_CTL_REG,
2129 .mode_reg = (void __iomem *)LPAPLL_MODE_REG,
2130 .base = &virt_bases[LPASS_BASE],
2131};
2132
2133/* LPAPLL0 at 393.216 MHz, main output enabled. */
2134static struct pll_config lpapll0_config __initdata = {
2135 .l = 0x28,
2136 .m = 0x18,
2137 .n = 0x19,
2138 .vco_val = 0x0,
2139 .vco_mask = BM(21, 20),
2140 .pre_div_val = 0x0,
2141 .pre_div_mask = BM(14, 12),
2142 .post_div_val = BVAL(9, 8, 0x1),
2143 .post_div_mask = BM(9, 8),
2144 .mn_ena_val = BIT(24),
2145 .mn_ena_mask = BIT(24),
2146 .main_output_val = BIT(0),
2147 .main_output_mask = BIT(0),
2148};
2149
2150static struct pll_config_regs apcspll_regs __initdata = {
2151 .l_reg = (void __iomem *)APCS_CPU_PLL_L_REG,
2152 .m_reg = (void __iomem *)APCS_CPU_PLL_M_REG,
2153 .n_reg = (void __iomem *)APCS_CPU_PLL_N_REG,
2154 .config_reg = (void __iomem *)APCS_CPU_PLL_USER_CTL_REG,
2155 .mode_reg = (void __iomem *)APCS_CPU_PLL_MODE_REG,
2156 .base = &virt_bases[APCS_PLL_BASE],
2157};
2158
2159/* A5PLL with 998.4MHz */
2160static struct pll_config apcspll_config __initdata = {
2161 .l = 0x34,
2162 .m = 0x0,
2163 .n = 0x1,
2164 .vco_val = 0x0,
2165 .vco_mask = BM(21, 20),
2166 .pre_div_val = 0x0,
2167 .pre_div_mask = BM(14, 12),
2168 .post_div_val = BVAL(9, 8, 0x0),
2169 .post_div_mask = BM(9, 8),
2170 .mn_ena_val = BIT(24),
2171 .mn_ena_mask = BIT(24),
2172 .main_output_val = BIT(0),
2173 .main_output_mask = BIT(0),
2174};
2175
2176#define PLL_AUX_OUTPUT_BIT 1
2177#define PLL_AUX2_OUTPUT_BIT 2
2178
2179/*
2180 * TODO: Need to remove this function when the v2 hardware
2181 * fix the broken lock status bit.
2182 */
2183#define PLL_OUTCTRL BIT(0)
2184#define PLL_BYPASSNL BIT(1)
2185#define PLL_RESET_N BIT(2)
2186
2187static DEFINE_SPINLOCK(sr_pll_reg_lock);
2188
2189static int sr_pll_clk_enable_9625(struct clk *c)
2190{
2191 unsigned long flags;
2192 struct pll_clk *pll = to_pll_clk(c);
2193 u32 mode;
2194 void __iomem *mode_reg = *pll->base + (u32)pll->mode_reg;
2195
2196 spin_lock_irqsave(&sr_pll_reg_lock, flags);
2197
2198 /* Disable PLL bypass mode and de-assert reset. */
2199 mode = readl_relaxed(mode_reg);
2200 mode |= PLL_BYPASSNL | PLL_RESET_N;
2201 writel_relaxed(mode, mode_reg);
2202
2203 /* Wait for pll to lock. */
2204 udelay(100);
2205
2206 /* Enable PLL output. */
2207 mode |= PLL_OUTCTRL;
2208 writel_relaxed(mode, mode_reg);
2209
2210 /* Ensure the write above goes through before returning. */
2211 mb();
2212
2213 spin_unlock_irqrestore(&sr_pll_reg_lock, flags);
2214 return 0;
2215}
2216
2217static void __init configure_apcs_pll(void)
2218{
2219 u32 regval;
2220
2221 configure_sr_hpm_lp_pll(&apcspll_config, &apcspll_regs, 0);
2222 writel_relaxed(0x00141200,
2223 APCS_PLL_REG_BASE(APCS_CPU_PLL_CONFIG_CTL_REG));
2224 regval = readl_relaxed(APCS_PLL_REG_BASE(APCS_CPU_PLL_USER_CTL_REG));
2225 regval |= BIT(PLL_AUX_OUTPUT_BIT) | BIT(PLL_AUX2_OUTPUT_BIT);
2226 writel_relaxed(regval, APCS_PLL_REG_BASE(APCS_CPU_PLL_USER_CTL_REG));
2227}
2228
2229#define PWR_ON_MASK BIT(31)
2230#define EN_REST_WAIT_MASK (0xF << 20)
2231#define EN_FEW_WAIT_MASK (0xF << 16)
2232#define CLK_DIS_WAIT_MASK (0xF << 12)
2233#define SW_OVERRIDE_MASK BIT(2)
2234#define HW_CONTROL_MASK BIT(1)
2235#define SW_COLLAPSE_MASK BIT(0)
2236
2237/* Wait 2^n CXO cycles between all states. Here, n=2 (4 cycles). */
2238#define EN_REST_WAIT_VAL (0x2 << 20)
2239#define EN_FEW_WAIT_VAL (0x2 << 16)
2240#define CLK_DIS_WAIT_VAL (0x2 << 12)
2241#define GDSC_TIMEOUT_US 50000
2242
2243static void __init reg_init(void)
2244{
2245 u32 regval, status;
2246 int ret;
2247
2248 if (!(readl_relaxed(GCC_REG_BASE(GPLL0_STATUS_REG))
2249 & gpll0_clk_src.status_mask))
2250 configure_sr_hpm_lp_pll(&gpll0_config, &gpll0_regs, 1);
2251
2252 if (!(readl_relaxed(GCC_REG_BASE(GPLL1_STATUS_REG))
2253 & gpll1_clk_src.status_mask))
2254 configure_sr_hpm_lp_pll(&gpll1_config, &gpll1_regs, 1);
2255
2256 configure_sr_hpm_lp_pll(&lpapll0_config, &lpapll0_regs, 1);
2257
2258 /* TODO: Remove A5 pll configuration once the bootloader is avaiable */
2259 regval = readl_relaxed(APCS_PLL_REG_BASE(APCS_CPU_PLL_MODE_REG));
2260 if ((regval & BM(2, 0)) != 0x7)
2261 configure_apcs_pll();
2262
2263 /* TODO:
2264 * 1) do we need to turn on AUX2 output too?
2265 * 2) if need to vote off all sleep clocks
2266 */
2267
2268 /* Enable GPLL0's aux outputs. */
2269 regval = readl_relaxed(GCC_REG_BASE(GPLL0_USER_CTL_REG));
2270 regval |= BIT(PLL_AUX_OUTPUT_BIT) | BIT(PLL_AUX2_OUTPUT_BIT);
2271 writel_relaxed(regval, GCC_REG_BASE(GPLL0_USER_CTL_REG));
2272
2273 /* Vote for GPLL0 to turn on. Needed by acpuclock. */
2274 regval = readl_relaxed(GCC_REG_BASE(APCS_GPLL_ENA_VOTE_REG));
2275 regval |= BIT(0);
2276 writel_relaxed(regval, GCC_REG_BASE(APCS_GPLL_ENA_VOTE_REG));
2277
2278 /*
2279 * TODO: Confirm that no clocks need to be voted on in this sleep vote
2280 * register.
2281 */
2282 writel_relaxed(0x0, GCC_REG_BASE(APCS_CLOCK_SLEEP_ENA_VOTE));
2283
2284 /*
2285 * TODO: The following sequence enables the LPASS audio core GDSC.
2286 * Remove when this becomes unnecessary.
2287 */
2288
2289 /*
2290 * Disable HW trigger: collapse/restore occur based on registers writes.
2291 * Disable SW override: Use hardware state-machine for sequencing.
2292 */
2293 regval = readl_relaxed(LPASS_REG_BASE(AUDIO_CORE_GDSCR));
2294 regval &= ~(HW_CONTROL_MASK | SW_OVERRIDE_MASK);
2295
2296 /* Configure wait time between states. */
2297 regval &= ~(EN_REST_WAIT_MASK | EN_FEW_WAIT_MASK | CLK_DIS_WAIT_MASK);
2298 regval |= EN_REST_WAIT_VAL | EN_FEW_WAIT_VAL | CLK_DIS_WAIT_VAL;
2299 writel_relaxed(regval, LPASS_REG_BASE(AUDIO_CORE_GDSCR));
2300
2301 regval = readl_relaxed(LPASS_REG_BASE(AUDIO_CORE_GDSCR));
2302 regval &= ~BIT(0);
2303 writel_relaxed(regval, LPASS_REG_BASE(AUDIO_CORE_GDSCR));
2304
2305 ret = readl_poll_timeout(LPASS_REG_BASE(AUDIO_CORE_GDSCR), status,
2306 status & PWR_ON_MASK, 50, GDSC_TIMEOUT_US);
2307 WARN(ret, "LPASS Audio Core GDSC did not power on.\n");
2308}
2309
2310static void __init msm9625_clock_post_init(void)
2311{
2312 /*
2313 * Hold an active set vote for CXO; this is because CXO is expected
2314 * to remain on whenever CPUs aren't power collapsed.
2315 */
2316 clk_prepare_enable(&cxo_a_clk_src.c);
2317
2318 /*
2319 * TODO: This call is to prevent sending 0Hz to rpm to turn off pnoc.
2320 * Needs to remove this after vote of pnoc from sdcc driver is ready.
2321 */
2322 clk_prepare_enable(&pnoc_msmbus_a_clk.c);
2323
2324 /* Set rates for single-rate clocks. */
2325 clk_set_rate(&usb_hs_system_clk_src.c,
2326 usb_hs_system_clk_src.freq_tbl[0].freq_hz);
2327 clk_set_rate(&usb_hsic_clk_src.c,
2328 usb_hsic_clk_src.freq_tbl[0].freq_hz);
2329 clk_set_rate(&usb_hsic_io_cal_clk_src.c,
2330 usb_hsic_io_cal_clk_src.freq_tbl[0].freq_hz);
2331 clk_set_rate(&usb_hsic_system_clk_src.c,
2332 usb_hsic_system_clk_src.freq_tbl[0].freq_hz);
2333 clk_set_rate(&usb_hsic_xcvr_fs_clk_src.c,
2334 usb_hsic_xcvr_fs_clk_src.freq_tbl[0].freq_hz);
2335 clk_set_rate(&pdm2_clk_src.c, pdm2_clk_src.freq_tbl[0].freq_hz);
2336 clk_set_rate(&audio_core_slimbus_core_clk_src.c,
2337 audio_core_slimbus_core_clk_src.freq_tbl[0].freq_hz);
2338}
2339
2340#define GCC_CC_PHYS 0xFC400000
2341#define GCC_CC_SIZE SZ_16K
2342
2343#define LPASS_CC_PHYS 0xFE000000
2344#define LPASS_CC_SIZE SZ_256K
2345
2346#define APCS_GCC_CC_PHYS 0xF9011000
2347#define APCS_GCC_CC_SIZE SZ_4K
2348
2349#define APCS_PLL_PHYS 0xF9008018
2350#define APCS_PLL_SIZE 0x18
2351
2352static void __init msm9625_clock_pre_init(void)
2353{
2354 virt_bases[GCC_BASE] = ioremap(GCC_CC_PHYS, GCC_CC_SIZE);
2355 if (!virt_bases[GCC_BASE])
2356 panic("clock-9625: Unable to ioremap GCC memory!");
2357
2358 virt_bases[LPASS_BASE] = ioremap(LPASS_CC_PHYS, LPASS_CC_SIZE);
2359 if (!virt_bases[LPASS_BASE])
2360 panic("clock-9625: Unable to ioremap LPASS_CC memory!");
2361
2362 virt_bases[APCS_BASE] = ioremap(APCS_GCC_CC_PHYS, APCS_GCC_CC_SIZE);
2363 if (!virt_bases[APCS_BASE])
2364 panic("clock-9625: Unable to ioremap APCS_GCC_CC memory!");
2365
2366 virt_bases[APCS_PLL_BASE] = ioremap(APCS_PLL_PHYS, APCS_PLL_SIZE);
2367 if (!virt_bases[APCS_PLL_BASE])
2368 panic("clock-9625: Unable to ioremap APCS_PLL memory!");
2369
2370 clk_ops_local_pll.enable = sr_pll_clk_enable_9625;
2371
2372 vdd_dig_reg = regulator_get(NULL, "vdd_dig");
2373 if (IS_ERR(vdd_dig_reg))
2374 panic("clock-9625: Unable to get the vdd_dig regulator!");
2375
2376 vote_vdd_level(&vdd_dig, VDD_DIG_HIGH);
2377 regulator_enable(vdd_dig_reg);
2378
2379 enable_rpm_scaling();
2380
2381 reg_init();
2382}
2383
2384static int __init msm9625_clock_late_init(void)
2385{
2386 return unvote_vdd_level(&vdd_dig, VDD_DIG_HIGH);
2387}
2388
2389struct clock_init_data msm9625_clock_init_data __initdata = {
2390 .table = msm_clocks_9625,
2391 .size = ARRAY_SIZE(msm_clocks_9625),
2392 .pre_init = msm9625_clock_pre_init,
2393 .post_init = msm9625_clock_post_init,
2394 .late_init = msm9625_clock_late_init,
2395};