blob: 29844843e4e4dbf499dd6fc2e7b10556e20a0350 [file] [log] [blame]
Amol Jadic52c8a32011-07-12 11:27:04 -07001/*
Shashank Mittal30262902012-02-21 15:37:24 -08002 * * Copyright (c) 2011-2012, Code Aurora Forum. All rights reserved.
Shashank Mittalc69512e2010-09-22 16:40:48 -07003 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are
6 * met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above
10 * copyright notice, this list of conditions and the following
11 * disclaimer in the documentation and/or other materials provided
12 * with the distribution.
13 * * Neither the name of Code Aurora Forum, Inc. nor the names of its
14 * contributors may be used to endorse or promote products derived
15 * from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
18 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
20 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
21 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
24 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
25 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
26 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
27 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 */
Amol Jadic52c8a32011-07-12 11:27:04 -070029#ifndef __PLATFORM_MSM8960_CLOCK_H
30#define __PLATFORM_MSM8960_CLOCK_H
Shashank Mittalc69512e2010-09-22 16:40:48 -070031
Amol Jadic52c8a32011-07-12 11:27:04 -070032#define UART_DM_CLK_RX_TX_BIT_RATE 0xFF
33
Shashank Mittal30262902012-02-21 15:37:24 -080034#define REG(off) (MSM_CLK_CTL_BASE + (off))
Kinson Chike5c93432011-06-17 09:10:29 -070035#define REG_MM(off) (MSM_MMSS_CLK_CTL_BASE + (off))
Shashank Mittal30262902012-02-21 15:37:24 -080036#define REG_LPA(off) (MSM_LPASS_CLK_CTL_BASE + (off))
Kinson Chike5c93432011-06-17 09:10:29 -070037
Shashank Mittal30262902012-02-21 15:37:24 -080038/* Peripheral clock registers. */
39#define CE1_HCLK_CTL_REG REG(0x2720)
40#define CE1_CORE_CLK_CTL_REG REG(0x2724)
41#define CE3_CLK_SRC_NS_REG REG(0x36C0)
42#define CE3_HCLK_CTL_REG REG(0x36C4)
43#define CE3_CORE_CLK_CTL_REG REG(0x36CC)
44#define DMA_BAM_HCLK_CTL REG(0x25C0)
45#define CLK_HALT_AFAB_SFAB_STATEB_REG REG(0x2FC4)
46#define CLK_HALT_CFPB_STATEA_REG REG(0x2FCC)
47#define CLK_HALT_CFPB_STATEB_REG REG(0x2FD0)
48#define CLK_HALT_CFPB_STATEC_REG REG(0x2FD4)
49#define CLK_HALT_GSS_KPSS_MISC_STATE_REG REG(0x2FDC)
50#define CLK_HALT_DFAB_STATE_REG REG(0x2FC8)
51#define CLK_HALT_MSS_SMPSS_MISC_STATE_REG REG(0x2FDC)
52#define CLK_HALT_SFPB_MISC_STATE_REG REG(0x2FD8)
53#define CLK_TEST_REG REG(0x2FA0)
54#define GSBIn_HCLK_CTL_REG(n) REG(0x29C0+(0x20*((n)-1)))
55#define GSBIn_QUP_APPS_MD_REG(n) REG(0x29C8+(0x20*((n)-1)))
56#define GSBIn_QUP_APPS_NS_REG(n) REG(0x29CC+(0x20*((n)-1)))
57#define GSBIn_RESET_REG(n) REG(0x29DC+(0x20*((n)-1)))
58#define GSBIn_UART_APPS_MD_REG(n) REG(0x29D0+(0x20*((n)-1)))
59#define GSBIn_UART_APPS_NS_REG(n) REG(0x29D4+(0x20*((n)-1)))
60#define LPASS_XO_SRC_CLK_CTL_REG REG(0x2EC0)
61#define PDM_CLK_NS_REG REG(0x2CC0)
62#define BB_PLL_ENA_Q6_SW_REG REG(0x3500)
63#define BB_PLL_ENA_SC0_REG REG(0x34C0)
64#define BB_PLL0_STATUS_REG REG(0x30D8)
65#define BB_PLL5_STATUS_REG REG(0x30F8)
66#define BB_PLL6_STATUS_REG REG(0x3118)
67#define BB_PLL7_STATUS_REG REG(0x3138)
68#define BB_PLL8_L_VAL_REG REG(0x3144)
69#define BB_PLL8_M_VAL_REG REG(0x3148)
70#define BB_PLL8_MODE_REG REG(0x3140)
71#define BB_PLL8_N_VAL_REG REG(0x314C)
72#define BB_PLL8_STATUS_REG REG(0x3158)
73#define BB_PLL8_CONFIG_REG REG(0x3154)
74#define BB_PLL8_TEST_CTL_REG REG(0x3150)
75#define BB_PLL3_MODE_REG REG(0x3160)
76#define PLLTEST_PAD_CFG_REG REG(0x2FA4)
77#define PMEM_ACLK_CTL_REG REG(0x25A0)
78#define RINGOSC_NS_REG REG(0x2DC0)
79#define RINGOSC_STATUS_REG REG(0x2DCC)
80#define RINGOSC_TCXO_CTL_REG REG(0x2DC4)
81#define SC0_U_CLK_BRANCH_ENA_VOTE_REG REG(0x3080)
82#define SDCn_APPS_CLK_MD_REG(n) REG(0x2828+(0x20*((n)-1)))
83#define SDCn_APPS_CLK_NS_REG(n) REG(0x282C+(0x20*((n)-1)))
84#define SDCn_HCLK_CTL_REG(n) REG(0x2820+(0x20*((n)-1)))
85#define SDCn_RESET_REG(n) REG(0x2830+(0x20*((n)-1)))
86#define SLIMBUS_XO_SRC_CLK_CTL_REG REG(0x2628)
87#define TSIF_HCLK_CTL_REG REG(0x2700)
88#define TSIF_REF_CLK_MD_REG REG(0x270C)
89#define TSIF_REF_CLK_NS_REG REG(0x2710)
90#define TSSC_CLK_CTL_REG REG(0x2CA0)
91#define USB_FSn_HCLK_CTL_REG(n) REG(0x2960+(0x20*((n)-1)))
92#define USB_FSn_RESET_REG(n) REG(0x2974+(0x20*((n)-1)))
93#define USB_FSn_SYSTEM_CLK_CTL_REG(n) REG(0x296C+(0x20*((n)-1)))
94#define USB_FSn_XCVR_FS_CLK_MD_REG(n) REG(0x2964+(0x20*((n)-1)))
95#define USB_FSn_XCVR_FS_CLK_NS_REG(n) REG(0x2968+(0x20*((n)-1)))
96#define USB_HS1_HCLK_CTL_REG REG(0x2900)
97#define USB_HS1_RESET_REG REG(0x2910)
98#define USB_HS1_XCVR_FS_CLK_MD_REG REG(0x2908)
99#define USB_HS1_XCVR_FS_CLK_NS_REG REG(0x290C)
100#define USB_PHY0_RESET_REG REG(0x2E20)
Kinson Chike5c93432011-06-17 09:10:29 -0700101
Kinson Chike5c93432011-06-17 09:10:29 -0700102
Shashank Mittal30262902012-02-21 15:37:24 -0800103/* Multimedia clock registers. */
104#define AHB_EN_REG REG_MM(0x0008)
105#define AHB_EN2_REG REG_MM(0x0038)
106#define AHB_NS_REG REG_MM(0x0004)
107#define AXI_NS_REG REG_MM(0x0014)
108#define CAMCLKn_NS_REG(n) REG_MM(0x0148+(0x14*(n)))
109#define CAMCLKn_CC_REG(n) REG_MM(0x0140+(0x14*(n)))
110#define CAMCLKn_MD_REG(n) REG_MM(0x0144+(0x14*(n)))
111#define CSI0_NS_REG REG_MM(0x0048)
112#define CSI0_CC_REG REG_MM(0x0040)
113#define CSI0_MD_REG REG_MM(0x0044)
114#define CSI1_NS_REG REG_MM(0x0010)
115#define CSI1_CC_REG REG_MM(0x0024)
116#define CSI1_MD_REG REG_MM(0x0028)
117#define CSIPHYTIMER_CC_REG REG_MM(0x0160)
118#define CSIPHYTIMER_MD_REG REG_MM(0x0164)
119#define CSIPHYTIMER_NS_REG REG_MM(0x0168)
120#define DSI1_BYTE_NS_REG REG_MM(0x00B0)
121#define DSI1_BYTE_CC_REG REG_MM(0x0090)
122#define DSI2_BYTE_NS_REG REG_MM(0x00BC)
123#define DSI2_BYTE_CC_REG REG_MM(0x00B4)
124#define DSI1_ESC_NS_REG REG_MM(0x011C)
125#define DSI1_ESC_CC_REG REG_MM(0x00CC)
126#define DSI2_ESC_NS_REG REG_MM(0x0150)
127#define DSI2_ESC_CC_REG REG_MM(0x013C)
128#define DSI_PIXEL_CC_REG REG_MM(0x0130)
129#define DSI_PIXEL_MD_REG REG_MM(0x0134)
130#define DSI_PIXEL_NS_REG REG_MM(0x0138)
131#define DSI2_PIXEL_CC_REG REG_MM(0x0094)
132#define DSI_NS_REG REG_MM(0x54)
133#define DSI_MD_REG REG_MM(0x50)
134#define DSI_CC_REG REG_MM(0x4C)
135#define DBG_BUS_VEC_A_REG REG_MM(0x01C8)
136#define DBG_BUS_VEC_B_REG REG_MM(0x01CC)
137#define DBG_BUS_VEC_C_REG REG_MM(0x01D0)
138#define DBG_BUS_VEC_D_REG REG_MM(0x01D4)
139#define DBG_BUS_VEC_E_REG REG_MM(0x01D8)
140#define DBG_BUS_VEC_F_REG REG_MM(0x01DC)
141#define DBG_BUS_VEC_G_REG REG_MM(0x01E0)
142#define DBG_BUS_VEC_H_REG REG_MM(0x01E4)
143#define DBG_BUS_VEC_I_REG REG_MM(0x01E8)
144#define DBG_CFG_REG_HS_REG REG_MM(0x01B4)
145#define DBG_CFG_REG_LS_REG REG_MM(0x01B8)
146#define GFX2D0_CC_REG REG_MM(0x0060)
147#define GFX2D0_MD0_REG REG_MM(0x0064)
148#define GFX2D0_MD1_REG REG_MM(0x0068)
149#define GFX2D0_NS_REG REG_MM(0x0070)
150#define GFX2D1_CC_REG REG_MM(0x0074)
151#define GFX2D1_MD0_REG REG_MM(0x0078)
152#define GFX2D1_MD1_REG REG_MM(0x006C)
153#define GFX2D1_NS_REG REG_MM(0x007C)
154#define GFX3D_CC_REG REG_MM(0x0080)
155#define GFX3D_MD0_REG REG_MM(0x0084)
156#define GFX3D_MD1_REG REG_MM(0x0088)
157#define GFX3D_NS_REG REG_MM(0x008C)
158#define IJPEG_CC_REG REG_MM(0x0098)
159#define IJPEG_MD_REG REG_MM(0x009C)
160#define IJPEG_NS_REG REG_MM(0x00A0)
161#define JPEGD_CC_REG REG_MM(0x00A4)
162#define JPEGD_NS_REG REG_MM(0x00AC)
163#define MAXI_EN_REG REG_MM(0x0018)
164#define MAXI_EN2_REG REG_MM(0x0020)
165#define MAXI_EN3_REG REG_MM(0x002C)
166#define MAXI_EN4_REG REG_MM(0x0114)
167#define MDP_CC_REG REG_MM(0x00C0)
168#define MDP_LUT_CC_REG REG_MM(0x016C)
169#define MDP_MD0_REG REG_MM(0x00C4)
170#define MDP_MD1_REG REG_MM(0x00C8)
171#define MDP_NS_REG REG_MM(0x00D0)
172#define MISC_CC_REG REG_MM(0x0058)
173#define MISC_CC2_REG REG_MM(0x005C)
174#define MM_PLL1_MODE_REG REG_MM(0x031C)
175#define ROT_CC_REG REG_MM(0x00E0)
176#define ROT_NS_REG REG_MM(0x00E8)
177#define SAXI_EN_REG REG_MM(0x0030)
178#define SW_RESET_AHB_REG REG_MM(0x020C)
179#define SW_RESET_AHB2_REG REG_MM(0x0200)
180#define SW_RESET_ALL_REG REG_MM(0x0204)
181#define SW_RESET_AXI_REG REG_MM(0x0208)
182#define SW_RESET_CORE_REG REG_MM(0x0210)
183#define TV_CC_REG REG_MM(0x00EC)
184#define TV_CC2_REG REG_MM(0x0124)
185#define TV_MD_REG REG_MM(0x00F0)
186#define TV_NS_REG REG_MM(0x00F4)
187#define VCODEC_CC_REG REG_MM(0x00F8)
188#define VCODEC_MD0_REG REG_MM(0x00FC)
189#define VCODEC_MD1_REG REG_MM(0x0128)
190#define VCODEC_NS_REG REG_MM(0x0100)
191#define VFE_CC_REG REG_MM(0x0104)
192#define VFE_MD_REG REG_MM(0x0108)
193#define VFE_NS_REG REG_MM(0x010C)
194#define VPE_CC_REG REG_MM(0x0110)
195#define VPE_NS_REG REG_MM(0x0118)
196
197/* MUX source input identifiers. */
198#define pxo_to_bb_mux 0
199#define cxo_to_bb_mux pxo_to_bb_mux
200#define pll0_to_bb_mux 2
201#define pll8_to_bb_mux 3
202#define pll6_to_bb_mux 4
203#define gnd_to_bb_mux 5
204#define pll3_to_bb_mux 6
205#define pxo_to_mm_mux 0
206#define pll1_to_mm_mux 1
207#define pll2_to_mm_mux 1
208#define pll8_to_mm_mux 2
209#define pll0_to_mm_mux 3
210#define gnd_to_mm_mux 4
211#define hdmi_pll_to_mm_mux 3
212#define cxo_to_xo_mux 0
213#define pxo_to_xo_mux 1
214#define gnd_to_xo_mux 3
215#define pxo_to_lpa_mux 0
216#define cxo_to_lpa_mux 1
217#define pll4_to_lpa_mux 2
218#define gnd_to_lpa_mux 6
219
220/* Test Vector Macros */
221#define TEST_TYPE_PER_LS 1
222#define TEST_TYPE_PER_HS 2
223#define TEST_TYPE_MM_LS 3
224#define TEST_TYPE_MM_HS 4
225#define TEST_TYPE_LPA 5
226#define TEST_TYPE_CPUL2 6
227#define TEST_TYPE_LPA_HS 7
228#define TEST_TYPE_SHIFT 24
229#define TEST_CLK_SEL_MASK BM(23, 0)
230#define TEST_VECTOR(s, t) (((t) << TEST_TYPE_SHIFT) | BVAL(23, 0, (s)))
231#define TEST_PER_LS(s) TEST_VECTOR((s), TEST_TYPE_PER_LS)
232#define TEST_PER_HS(s) TEST_VECTOR((s), TEST_TYPE_PER_HS)
233#define TEST_MM_LS(s) TEST_VECTOR((s), TEST_TYPE_MM_LS)
234#define TEST_MM_HS(s) TEST_VECTOR((s), TEST_TYPE_MM_HS)
235#define TEST_LPA(s) TEST_VECTOR((s), TEST_TYPE_LPA)
236#define TEST_LPA_HS(s) TEST_VECTOR((s), TEST_TYPE_LPA_HS)
237#define TEST_CPUL2(s) TEST_VECTOR((s), TEST_TYPE_CPUL2)
238
239#define MN_MODE_DUAL_EDGE 0x2
240
241/* MD Registers */
242#define MD4(m_lsb, m, n_lsb, n) \
243 (BVAL((m_lsb+3), m_lsb, m) | BVAL((n_lsb+3), n_lsb, ~(n)))
244
245#define MD8(m_lsb, m, n_lsb, n) \
246 (BVAL((m_lsb+7), m_lsb, m) | BVAL((n_lsb+7), n_lsb, ~(n)))
247
248#define MD16(m, n) (BVAL(31, 16, m) | BVAL(15, 0, ~(n)))
249
250/* NS Registers */
251#define NS(n_msb, n_lsb, n, m, mde_lsb, d_msb, d_lsb, d, s_msb, s_lsb, s) \
252 (BVAL(n_msb, n_lsb, ~(n-m)) \
253 | (BVAL((mde_lsb+1), mde_lsb, MN_MODE_DUAL_EDGE) * !!(n)) \
254 | BVAL(d_msb, d_lsb, (d-1)) | BVAL(s_msb, s_lsb, s))
255
256#define NS_MM(n_msb, n_lsb, n, m, d_msb, d_lsb, d, s_msb, s_lsb, s) \
257 (BVAL(n_msb, n_lsb, ~(n-m)) | BVAL(d_msb, d_lsb, (d-1)) \
258 | BVAL(s_msb, s_lsb, s))
259
260#define NS_DIVSRC(d_msb , d_lsb, d, s_msb, s_lsb, s) \
261 (BVAL(d_msb, d_lsb, (d-1)) | BVAL(s_msb, s_lsb, s))
262
263#define NS_DIV(d_msb , d_lsb, d) \
264 BVAL(d_msb, d_lsb, (d-1))
265
266#define NS_SRC_SEL(s_msb, s_lsb, s) \
267 BVAL(s_msb, s_lsb, s)
268
269#define NS_MND_BANKED4(n0_lsb, n1_lsb, n, m, s0_lsb, s1_lsb, s) \
270 (BVAL((n0_lsb+3), n0_lsb, ~(n-m)) \
271 | BVAL((n1_lsb+3), n1_lsb, ~(n-m)) \
272 | BVAL((s0_lsb+2), s0_lsb, s) \
273 | BVAL((s1_lsb+2), s1_lsb, s))
274
275#define NS_MND_BANKED8(n0_lsb, n1_lsb, n, m, s0_lsb, s1_lsb, s) \
276 (BVAL((n0_lsb+7), n0_lsb, ~(n-m)) \
277 | BVAL((n1_lsb+7), n1_lsb, ~(n-m)) \
278 | BVAL((s0_lsb+2), s0_lsb, s) \
279 | BVAL((s1_lsb+2), s1_lsb, s))
280
281#define NS_DIVSRC_BANKED(d0_msb, d0_lsb, d1_msb, d1_lsb, d, \
282 s0_msb, s0_lsb, s1_msb, s1_lsb, s) \
283(BVAL(d0_msb, d0_lsb, (d-1)) | BVAL(d1_msb, d1_lsb, (d-1)) \
284 | BVAL(s0_msb, s0_lsb, s) \
285 | BVAL(s1_msb, s1_lsb, s))
286
287/* CC Registers */
288#define CC(mde_lsb, n) (BVAL((mde_lsb+1), mde_lsb, MN_MODE_DUAL_EDGE) * !!(n))
289#define CC_BANKED(mde0_lsb, mde1_lsb, n) \
290 ((BVAL((mde0_lsb+1), mde0_lsb, MN_MODE_DUAL_EDGE) \
291 | BVAL((mde1_lsb+1), mde1_lsb, MN_MODE_DUAL_EDGE)) \
292 * !!(n))
293
294struct pll_rate {
295 const uint32_t l_val;
296 const uint32_t m_val;
297 const uint32_t n_val;
298 const uint32_t vco;
299 const uint32_t post_div;
300 const uint32_t i_bits;
301};
302#define PLL_RATE(l, m, n, v, d, i) { l, m, n, v, (d>>1), i }
303
304/* DSI specific data */
Kinson Chike5c93432011-06-17 09:10:29 -0700305
306/* Configured at 13.5 MHz */
307#define ESC_NS_VAL 0x00001000
308#define ESC_CC_VAL 0x00000004
309
310#define BYTE_NS_VAL 0x00000001
311#define BYTE_CC_VAL 0x00000004
312
313#define PIXEL_NS_VAL 0x00F80003
314#define PIXEL_MD_VAL 0x000001FB
315#define PIXEL_CC_VAL 0x00000080
316
317#define DSI_NS_VAL 0xFA000003
318#define DSI_MD_VAL 0x000003FB
319#define DSI_CC_VAL 0x00000080
320
Ajay Dudanib01e5062011-12-03 23:23:42 -0800321void config_mmss_clk(uint32_t ns,
Shashank Mittal30262902012-02-21 15:37:24 -0800322 uint32_t md,
323 uint32_t cc,
324 uint32_t ns_addr, uint32_t md_addr, uint32_t cc_addr);
Kinson Chike5c93432011-06-17 09:10:29 -0700325void config_mdp_lut_clk(void);
326void mdp_clock_init(void);
327
Shashank Mittalc69512e2010-09-22 16:40:48 -0700328#endif