blob: 1162dc6bcb6b3cf240c26883c921c2e5e16bd3b5 [file] [log] [blame]
rjw6c1fd8f2022-11-30 14:33:01 +08001/*******************************************************************************
2 * Copyright Statement:
3 * --------------------
4 * This software is protected by Copyright and the information contained
5 * herein is confidential. The software may not be copied and the information
6 * contained herein may not be used or disclosed except with the written
7 * permission of MediaTek Inc. (C) 2012
8 *
9 * BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
10 * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
11 * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
12 * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
13 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
14 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
15 * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
16 * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
17 * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
18 * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
19 * NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
20 * SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
21 *
22 * BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
23 * LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
24 * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
25 * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
26 * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
27 *
28 * THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
29 * WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
30 * LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
31 * RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
32 * THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
33 *
34 ******************************************************************************/
35
36/*******************************************************************************
37 * Filename:
38 * ---------
39 * pll_gen93m17.h
40 *
41 * Project:
42 * --------
43 * UMOLYA
44 *
45 * Description:
46 * ------------
47 * PLL Related Functions
48 *
49 * Author:
50 * -------
51 * -------
52 *
53 * ============================================================================
54 * $Log$
55 *
56 * 01 22 2018 jun-ying.huang
57 * [MOLY00303289] [Merlot call for check-in][PLL][DCM]Add Macro for MT6761(=Merlot)
58 * .
59 *
60 * 10 25 2017 jun-ying.huang
61 * [MOLY00285159] [PLL][DCM]Add Macro for MT6765(=Cervino)
62 * .
63 *
64 * 10 02 2017 jun-ying.huang
65 * [MOLY00281611] [93/95 re-arch]PLL co-branch for MT6293 & MT6295
66 * .
67 *
68 * 08 21 2017 jun-ying.huang
69 * [MOLY00272509] [Sylvia][PLL]Add MT6771 Macro for PLL due to Sylvia MT6771 Call for check in
70 * .
71 *
72 * 06 09 2017 jun-ying.huang
73 * [MOLY00244484] [Zion]Add compile option for ZION in PLL.
74 * Add compile option for ZION and Workaround for CIRQ APB sync issue- Let BUS2x clock use MDBPIPLL_0/6 = 101 MHz
75 *
76 * 12 16 2016 jun-ying.huang
77 * [MOLY00218782] [System service][PLL][6293]Add compile option for MT6763
78 * .
79 *
80 * 12 07 2016 jun-ying.huang
81 * [MOLY00217275] [System service][PLL][6293]Update PLL init flow and porting driver for user
82 * .
83 *
84 * 11 20 2016 jun-ying.huang
85 * [MOLY00214278] [System service][PLL][6293]Update PLL_FrequencyMeter_GetFreq() driver
86 * .
87 *
88 * 11 06 2016 jun-ying.huang
89 * [MOLY00211600] [System service][PLL]Add debug info in PLL driver
90 * .
91 *
92 * 10 14 2016 jun-ying.huang
93 * [MOLY00207095] [System service][PLL]Update PLL driver for DVFS users.
94 * Add PLL function for DVFS
95 *
96 * 09 19 2016 alan-tl.lin
97 * [MOLY00174466] [UMOLYA] PLL porting
98 * [PLL] Update register definition
99 *
100 * 08 02 2016 alan-tl.lin
101 * [MOLY00174466] [UMOLYA] PLL porting
102 * Fix build error
103 *
104 ****************************************************************************/
105
106#ifndef __PLL_MT6763_H__
107#define __PLL_MT6763_H__
108
109/*******************************************************************************
110 * Locally Used Options
111 ******************************************************************************/
112#define PLL_REG32(addr) *(volatile kal_uint32 *)(addr)
113#define PLL_TYPE (volatile kal_uint32 *)
114
115/*******************************************************************************
116 * Define macro for boot code
117 ******************************************************************************/
118#define __SECTION__(S) __attribute__((__section__(#S)))
119#define __PLL_CODE_IN_BOOT__ __SECTION__(NONCACHED_ROCODE)
120
121/*******************************************************************************
122 * Register Define
123 ******************************************************************************/
124
125///////////////////////////////////////////////////////////////////////////////
126/// PLLMIXED (0xA0140000)
127///////////////////////////////////////////////////////////////////////////////
128/* ==========PLL setting========== */
129#define REG_MDTOP_PLLMIXED_CODA_VERSION (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x0))
130#define REG_MDTOP_PLLMIXED_DCXO_PLL_SETTLE_CTL (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x4))
131#define REG_MDTOP_PLLMIXED_DCXO_RDY_WO_ACK (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x8))
132#define REG_MDTOP_PLLMIXED_DCXO_MODE_CTL (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0xC))
133#define REG_MDTOP_PLLMIXED_PLL_ON_CTL (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x10))
134#define REG_MDTOP_PLLMIXED_PLL_SW_CTL0 (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x14))
135#define REG_MDTOP_PLLMIXED_PLL_SW_CTL1 (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x18))
136#define REG_MDTOP_PLLMIXED_PLL_DLY_CTL0 (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x30))
137#define REG_MDTOP_PLLMIXED_PLL_DLY_CTL1 (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x34))
138#define REG_MDTOP_PLLMIXED_PLL_DLY_CTL2 (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x38))
139
140/* ==========PLL frequency control==> PCW & POSDIV========== */
141#define REG_MDTOP_PLLMIXED_MDMCUPLL_CTL0 (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x40))
142#define REG_MDTOP_PLLMIXED_MDMCUPLL_CTL1 (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x44))
143#define REG_MDTOP_PLLMIXED_MDVDSPPLL_CTL0 (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x48))
144#define REG_MDTOP_PLLMIXED_MDVDSPPLL_CTL1 (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x4C))
145#define REG_MDTOP_PLLMIXED_MDBRPPLL_CTL0 (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x50))
146#define REG_MDTOP_PLLMIXED_MDBRPPLL_CTL1 (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x54))
147#define REG_MDTOP_PLLMIXED_MDTXPLL_CTL0 (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x58))
148#define REG_MDTOP_PLLMIXED_MDTXPLL_CTL1 (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x5C))
149#define REG_MDTOP_PLLMIXED_MDBPIPLL_CTL0 (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x60))
150#define REG_MDTOP_PLLMIXED_MDBPIPLL_CTL1 (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x64))
151#define REG_MDTOP_PLLMIXED_MDPLL_CTL0 (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x100))
152#define REG_MDTOP_PLLMIXED_MDPLL_CTL1 (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x104))
153#define REG_MDTOP_PLLMIXED_MDPLL_CTL2 (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x108))
154
155#define REG_MDTOP_PLLMIXED_PLL_RESERVE (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x10C))
156#define REG_MDTOP_PLLMIXED_PLL_RESERVE2 (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x110))
157#define REG_MDTOP_PLLMIXED_PLL_DIV_RSTB (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x114))
158#define REG_MDTOP_PLLMIXED_PLL_FHCTL_RST (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x200))
159#define REG_MDTOP_PLLMIXED_CONN_DSNS_INTF (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x204))
160
161/* ==========PLL IRQ related========== */
162#define REG_MDTOP_PLLMIXED_PLL_ABNORM_GEARHP_IRQ (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x300))
163#define REG_MDTOP_PLLMIXED_PLL_ABNORM_GEARHP_MASK (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x304))
164#define REG_MDTOP_PLLMIXED_PLL_REQ_WO_DCXO_IRQ (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x308))
165#define REG_MDTOP_PLLMIXED_PLL_REQ_WO_DCXO_MASK (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x30C))
166#define REG_MDTOP_PLLMIXED_PLL_REQ_ABNORM_STS (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x310))
167#define REG_MDTOP_PLLMIXED_PLL_HP_RDY_IRQ (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x314))
168 #define PLLMIXED_MDMCUPLL_HP_RDY_IRQ_OFFSET (1)
169 #define PLLMIXED_MDVDSPPLL_HP_RDY_IRQ_OFFSET (2)
170 #define PLLMIXED_MDBRPPLL_HP_RDY_IRQ_OFFSET (4)
171 #define PLLMIXED_MDTXPLL_HP_RDY_IRQ_OFFSET (5)
172#define REG_MDTOP_PLLMIXED_PLL_HP_RDY_IRQ_MASK (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x318))
173
174/* PLL IRQ related macro */
175#define PLLMIXED_PLL_HP_RDY_IRQ_MASK (0x1)/* mask bit numbers for each IRQ */
176
177/* ==========PLL FHCTL========== */
178#define REG_MDTOP_PLLMIXED_MDMCUPLL_FHCTL (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x400))
179#define REG_MDTOP_PLLMIXED_MDMCUPLL_FRDDS_LMT (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x404))
180#define REG_MDTOP_PLLMIXED_MDMCUPLL_SW_GEAR (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x408))
181#define REG_MDTOP_PLLMIXED_MDVDSPPLL_FHCTL (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x410))
182#define REG_MDTOP_PLLMIXED_MDVDSPPLL_FRDDS_LMT (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x414))
183#define REG_MDTOP_PLLMIXED_MDVDSPPLL_SW_GEAR (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x418))
184#define REG_MDTOP_PLLMIXED_MDBRPPLL_FHCTL (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x430))
185#define REG_MDTOP_PLLMIXED_MDBRPPLL_FRDDS_LMT (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x434))
186#define REG_MDTOP_PLLMIXED_MDBRPPLL_SW_GEAR (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x438))
187#define REG_MDTOP_PLLMIXED_MDTXPLL_FHCTL (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x440))
188#define REG_MDTOP_PLLMIXED_MDTXPLL_FRDDS_LMT (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x444))
189#define REG_MDTOP_PLLMIXED_MDTXPLL_SW_GEAR (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x448))
190#define REG_MDTOP_PLLMIXED_MDBPIPLL_FHCTL (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x450))
191#define REG_MDTOP_PLLMIXED_MDBPIPLL_FRDDS_LMT (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x454))
192#define REG_MDTOP_PLLMIXED_MDBPIPLL_SW_GEAR (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x458))
193
194/* ==========PLL Gear Set========== */
195#define REG_MDTOP_PLLMIXED_MDMCUPLL_GEAR_SET0 (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x500))
196#define REG_MDTOP_PLLMIXED_MDMCUPLL_GEAR_SET1 (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x504))
197#define REG_MDTOP_PLLMIXED_MDMCUPLL_GEAR_SET2 (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x508))
198#define REG_MDTOP_PLLMIXED_MDMCUPLL_GEAR_SET3 (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x50C))
199#define REG_MDTOP_PLLMIXED_MDVDSPPLL_GEAR_SET0 (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x540))
200#define REG_MDTOP_PLLMIXED_MDVDSPPLL_GEAR_SET1 (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x544))
201#define REG_MDTOP_PLLMIXED_MDVDSPPLL_GEAR_SET2 (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x548))
202#define REG_MDTOP_PLLMIXED_MDVDSPPLL_GEAR_SET3 (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x54C))
203#define REG_MDTOP_PLLMIXED_MDBRPPLL_GEAR_SET0 (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x5C0))
204#define REG_MDTOP_PLLMIXED_MDBRPPLL_GEAR_SET1 (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x5C4))
205#define REG_MDTOP_PLLMIXED_MDBRPPLL_GEAR_SET2 (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x5C8))
206#define REG_MDTOP_PLLMIXED_MDBRPPLL_GEAR_SET3 (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x5CC))
207#define REG_MDTOP_PLLMIXED_MDTXPLL_GEAR_SET0 (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x600))
208#define REG_MDTOP_PLLMIXED_MDTXPLL_GEAR_SET1 (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x604))
209#define REG_MDTOP_PLLMIXED_MDTXPLL_GEAR_SET2 (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x608))
210#define REG_MDTOP_PLLMIXED_MDTXPLL_GEAR_SET3 (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0x60C))
211
212/* ==========PLL Status========== */
213#define REG_MDTOP_PLLMIXED_MDMCUPLL_STS (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0xC00))
214#define REG_MDTOP_PLLMIXED_MDVDSPPLL_STS (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0xC04))
215#define REG_MDTOP_PLLMIXED_MDBRPPLL_STS (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0xC08))
216#define REG_MDTOP_PLLMIXED_MDTXPLL_STS (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0xC0C))
217#define REG_MDTOP_PLLMIXED_MDBPIBPLL_STS (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0xC10))
218#define REG_MDTOP_PLLMIXED_MDPLL1_STS (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0xC40))
219#define REG_MDTOP_PLLMIXED_PLL_DUMMY (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0xF00))
220#define REG_MDTOP_PLLMIXED_PLL_DUMMY1 (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0xF04))
221#define REG_MDTOP_PLLMIXED_PLL_DUMMY2 (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0xF08))
222#define REG_MDTOP_PLLMIXED_PLL_STATUS (PLL_TYPE(BASE_MADDR_MDTOP_PLLMIXED+0xF0C))
223
224/* PLL Status related macro */
225#define PLLMIXED_PLL_SFSTR_PRD_OFFSET (14)
226#define PLLMIXED_PLL_SFSTR_PRD_MASK (0x1)/* mask bit numbers for each SFSTR_PRD */
227#define PLLMIXED_PLL_SDM_PCW_OFFSET (16)
228#define PLLMIXED_PLL_SDM_PCW_MASK (0x7FFF)/* mask bit numbers([30:16] = 14bits) for each SDM_PCW */
229
230
231///////////////////////////////////////////////////////////////////////////////
232/// CLKSW (0xA0150000)
233///////////////////////////////////////////////////////////////////////////////
234#define REG_MDTOP_CLKSW_CODA_VERSION (PLL_TYPE(BASE_MADDR_MDTOP_CLKSW+0x0))
235#define REG_MDTOP_CLKSW_MD_SLEEP_CNT (PLL_TYPE(BASE_MADDR_MDTOP_CLKSW+0x4))
236#define REG_MDTOP_CLKSW_MDTOPSM_SW_CTL (PLL_TYPE(BASE_MADDR_MDTOP_CLKSW+0x10))
237#define REG_MDTOP_CLKSW_L1TOPSM_SW_CTL (PLL_TYPE(BASE_MADDR_MDTOP_CLKSW+0x14))
238#define REG_MDTOP_CLKSW_CKOFF_CTL (PLL_TYPE(BASE_MADDR_MDTOP_CLKSW+0x1C))
239#define REG_MDTOP_CLKSW_CLKON_CTL (PLL_TYPE(BASE_MADDR_MDTOP_CLKSW+0x20))
240#define REG_MDTOP_CLKSW_CLKSEL_CTL (PLL_TYPE(BASE_MADDR_MDTOP_CLKSW+0x24))
241
242/* ==========SDF clock control related========== */
243#define REG_MDTOP_CLKSW_SDF_CK_CTL (PLL_TYPE(BASE_MADDR_MDTOP_CLKSW+0x28))
244#define REG_MDTOP_CLKSW_ATB_LOG_SDF_SW_CTL (PLL_TYPE(BASE_MADDR_MDTOP_CLKSW+0x2C))
245#define REG_MDTOP_CLKSW_LOG_ATB_CK_CTL0 (PLL_TYPE(BASE_MADDR_MDTOP_CLKSW+0x30))
246#define REG_MDTOP_CLKSW_LOG_ATB_CK_CTL1 (PLL_TYPE(BASE_MADDR_MDTOP_CLKSW+0x34))
247
248/* ==========FLEXCKGEN_SEL========== */
249#define REG_MDTOP_CLKSW_MDCORE_FLEXCKGEN_SEL (PLL_TYPE(BASE_MADDR_MDTOP_CLKSW+0x40))
250#define REG_MDTOP_CLKSW_MDSYS_BUS_FLEXCKGEN_SEL (PLL_TYPE(BASE_MADDR_MDTOP_CLKSW+0x44))
251#define REG_MDTOP_CLKSW_VDSP_FLEXCKGEN_SEL (PLL_TYPE(BASE_MADDR_MDTOP_CLKSW+0x48))
252#define REG_MDTOP_CLKSW_BRP_FLEXCKGEN_SEL (PLL_TYPE(BASE_MADDR_MDTOP_CLKSW+0x4C))
253#define REG_MDTOP_CLKSW_RAKE_FLEXCKGEN_SEL (PLL_TYPE(BASE_MADDR_MDTOP_CLKSW+0x50))
254#define REG_MDTOP_CLKSW_TXSYS_FLEXCKGEN_SEL (PLL_TYPE(BASE_MADDR_MDTOP_CLKSW+0x54))
255#define REG_MDTOP_CLKSW_CSSYS_FLEXCKGEN_SEL (PLL_TYPE(BASE_MADDR_MDTOP_CLKSW+0x58))
256#define REG_MDTOP_CLKSW_MD2G_FLEXCKGEN_SEL (PLL_TYPE(BASE_MADDR_MDTOP_CLKSW+0x5C))
257#define REG_MDTOP_CLKSW_BSI_FLEXCKGEN_SEL (PLL_TYPE(BASE_MADDR_MDTOP_CLKSW+0x60))
258#define REG_MDTOP_CLKSW_DBG_FLEXCKGEN_SEL (PLL_TYPE(BASE_MADDR_MDTOP_CLKSW+0x64))
259#define REG_MDTOP_CLKSW_LOG_ATB_FLEXCKGEN_SEL (PLL_TYPE(BASE_MADDR_MDTOP_CLKSW+0x68))
260
261/* ==========FLEXCKGEN_STS========== */
262#define REG_MDTOP_CLKSW_MDCORE_FLEXCKGEN_STS (PLL_TYPE(BASE_MADDR_MDTOP_CLKSW+0x80))
263#define REG_MDTOP_CLKSW_MDSYS_BUS_FLEXCKGEN_STS (PLL_TYPE(BASE_MADDR_MDTOP_CLKSW+0x84))
264#define REG_MDTOP_CLKSW_VDSP_FLEXCKGEN_STS (PLL_TYPE(BASE_MADDR_MDTOP_CLKSW+0x88))
265#define REG_MDTOP_CLKSW_BRP_FLEXCKGEN_STS (PLL_TYPE(BASE_MADDR_MDTOP_CLKSW+0x8C))
266#define REG_MDTOP_CLKSW_RAKE_FLEXCKGEN_STS (PLL_TYPE(BASE_MADDR_MDTOP_CLKSW+0x90))
267#define REG_MDTOP_CLKSW_TXSYS_FLEXCKGEN_STS (PLL_TYPE(BASE_MADDR_MDTOP_CLKSW+0x94))
268#define REG_MDTOP_CLKSW_CSSYS_FLEXCKGEN_STS (PLL_TYPE(BASE_MADDR_MDTOP_CLKSW+0x98))
269#define REG_MDTOP_CLKSW_MD2G_FLEXCKGEN_STS (PLL_TYPE(BASE_MADDR_MDTOP_CLKSW+0x9C))
270#define REG_MDTOP_CLKSW_BSI_FLEXCKGEN_STS (PLL_TYPE(BASE_MADDR_MDTOP_CLKSW+0xA0))
271#define REG_MDTOP_CLKSW_DBG_FLEXCKGEN_STS (PLL_TYPE(BASE_MADDR_MDTOP_CLKSW+0xA4))
272#define REG_MDTOP_CLKSW_LOG_ATB_FLEXCKGEN_STS (PLL_TYPE(BASE_MADDR_MDTOP_CLKSW+0xA8))
273
274#define REG_MDTOP_CLKSW_CKMUX_STS (PLL_TYPE(BASE_MADDR_MDTOP_CLKSW+0xC0))
275#define REG_MDTOP_CLKSW_PLL_STS (PLL_TYPE(BASE_MADDR_MDTOP_CLKSW+0xD0))
276
277/* ==========Frequency Meter========== */
278#define REG_MDTOP_CLKSW_CKMON_CTL (PLL_TYPE(BASE_MADDR_MDTOP_CLKSW+0x100))
279#define REG_MDTOP_CLKSW_FREQ_METER_CTL (PLL_TYPE(BASE_MADDR_MDTOP_CLKSW+0x104))
280#define REG_MDTOP_CLKSW_FREQ_METER_XTAL_CNT (PLL_TYPE(BASE_MADDR_MDTOP_CLKSW+0x108))
281#define REG_MDTOP_CLKSW_FREQ_METER_CKMON_CNT (PLL_TYPE(BASE_MADDR_MDTOP_CLKSW+0x10C))
282#define REG_MDTOP_CLKSW_FREQ_METER_H (PLL_TYPE(BASE_MADDR_MDTOP_CLKSW+0x110))
283#define REG_MDTOP_CLKSW_FREQ_METER_L (PLL_TYPE(BASE_MADDR_MDTOP_CLKSW+0x114))
284
285/* ==========DUMMY & STATUS========== */
286#define REG_MDTOP_CLKSW_CLK_DUMMY (PLL_TYPE(BASE_MADDR_MDTOP_CLKSW+0xF00))
287#define REG_MDTOP_CLKSW_CLK_STATUS (PLL_TYPE(BASE_MADDR_MDTOP_CLKSW+0xF04))
288
289
290/*******************************************************************************
291 * Define Macro
292 ******************************************************************************/
293#define MD_PLL_MAGIC_NUM 0x62930000
294
295/**
296 * PLL divider definition
297 */
298#if defined(MT6763) || defined(MT6771) || defined(MT6765) || defined(MT6761)/* BIANCO or SYLVIA or CERVINO or MERLOT */
299// #define MDBPIPLL_DIVIDER /4 /9 /7
300 #define MDTXPLL_DIVIDER (8)
301 #define MDBRPPLL_DIVIDER (9)
302 #define MDVDSPPLL_DIVIDER (5)
303 #define MDMCUPLL_DIVIDER (4)
304#elif defined(MT6739)/* ZION */
305 #define MDTXPLL_DIVIDER (4)
306 #define MDBRPPLL_DIVIDER (6)
307 #define MDVDSPPLL_DIVIDER (4)
308 #define MDMCUPLL_DIVIDER (2)
309#else
310 #error "Unsupported Chip Target in PLL Module"
311#endif
312
313 /*------------------------------------------------------------------------
314 * Purpose: Transfer PCW in xxxPLL_STS to Mhz. This macro is porting from md_dvfs_pll_freq_get(const PLL_SOURCE pll).
315 * Parameters:
316 * Input: pcw: The PCW value in xxxPLL_STS.
317 * divier: The divier for this PLL(EX: ICCPLL_DIVIDER, IMCPLL_DIVIDER...).
318 * Output: None.
319 * returns : Mhz.
320 * Note : This macr is only used to transfer pcw in xxxPLL_STS to Mhz.
321 * You should not used this macro to transfer pcw in xxxPLL_CTL0 to Mhz due to the meaning is different.
322 * (PCW in xxxPLL_STS is bit [21:7] of xxxPLL_CTL0.)
323 *------------------------------------------------------------------------
324 */
325#define PLLMIXED_PLL_STS_SDM_PCW_TO_MHZ(pcw, divier) ((((pcw) * 26) / (1 << 7)) / divier)
326
327/*******************************************************************************
328 * ENUM
329 ******************************************************************************/
330// frequency meter index list (debug only)
331typedef enum {
332 PLL_FM_SOURCE_START = 0xA,
333 PLL_FM_TRACE_MON_CLOCK = 0xA,
334 PLL_FM_MDSYS_208M_CLOCK = 0xB,
335 PLL_FM_MDRXSYS_RAKE_CLOCK = 0xC,
336 PLL_FM_MDRXSYS_BRP_CLOCK = 0xD,
337 PLL_FM_MDRXSYS_VDSP_CLOCK = 0xE,
338 PLL_FM_MDTOP_LOG_GTB_CLOCK = 0xF,
339 PLL_FM_FESYS_CSYS_CLOCK = 0x10,
340 PLL_FM_FESYS_TXSYS_CLOCK = 0x11,
341 PLL_FM_FESYS_BSI_CLOCK = 0x12,
342 PLL_FM_MDSYS_MDCORE_CLOCK = 0x13,
343 PLL_FM_MDSYS_BUS2X_NODCM_CLOCK = 0x14,
344 PLL_FM_MDSYS_BUS2X_CLOCK = 0x15,
345 PLL_FM_MDTOP_DBG_CLOCK = 0x16,
346 PLL_FM_MDTOP_F32K_CLOCK = 0x17,
347 PLL_FM_MDBPI_PLL_0_DIV2 = 0x18,
348 PLL_FM_MDBPI_PLL_2 = 0x19,
349 PLL_FM_MDBPI_PLL_1 = 0x1A,
350 PLL_FM_MDBPI_PLL_0 = 0x1B,
351 PLL_FM_MDTX_PLL = 0x1C,
352 PLL_FM_MDBRP_PLL = 0x1D,
353 PLL_FM_MDVDSP_PLL = 0x1E,
354 PLL_FM_MDMCU_PLL = 0x1F,
355 PLL_FM_SOURCE_END = 0x1F
356} PLL_FM_SOURCE;
357
358typedef enum {
359 PLL_MDPLL1 = 0,
360 PLL_MDMCU = 1,
361 PLL_MDVDSP = 2,
362 PLL_MDBRP = 3,
363 PLL_MDTX = 4,
364 PLL_MDBPI = 5,
365 PLL_END,
366} PLL_SOURCE;
367
368typedef enum {
369 CLKSW_FLEXCKGEN_START = 0,
370 MDCORE_FLEXCKGEN = 0,
371 MDSYS_BUS_FLEXCKGEN = 1,
372 VDSP_FLEXCKGEN = 2,
373 BRP_FLEXCKGEN = 3,
374 RAKE_FLEXCKGEN = 4,
375 TXSYS_FLEXCKGEN = 5,
376 CSSYS_FLEXCKGEN = 6,
377 MD2G_FLEXCKGEN = 7,
378 BSI_FLEXCKGEN = 8,
379 DBG_FLEXCKGEN = 9,
380 LOG_ATB_FLEXCKGEN = 10,
381 CLKSW_FLEXCKGEN_END
382} PLL_CLKSW_FLEXCKGEN;
383
384typedef enum {
385 CLKSW_FLEXCKGEN_DIV_1 = 0,
386 CLKSW_FLEXCKGEN_DIV_2 = 1,
387 CLKSW_FLEXCKGEN_DIV_3 = 2,
388 CLKSW_FLEXCKGEN_DIV_4 = 3,
389 CLKSW_FLEXCKGEN_DIV_5 = 4,
390 CLKSW_FLEXCKGEN_DIV_6 = 5,
391 CLKSW_FLEXCKGEN_DIV_7 = 6,
392 CLKSW_FLEXCKGEN_DIV_8 = 7
393} PLL_CLKSW_FLEXCKGEN_DIV;
394
395typedef enum {
396 CLKSW_FLEXCKGEN_PLL_SRC_0 = 0,
397 CLKSW_FLEXCKGEN_PLL_SRC_1 = 1,
398 CLKSW_FLEXCKGEN_PLL_SRC_2 = 2,
399 CLKSW_FLEXCKGEN_PLL_SRC_3 = 3
400} PLL_CLKSW_FLEXCKGEN_PLL_SRC;
401
402typedef enum {
403 CLKSW_MDTOPSM_DBG_CK = 3,
404} PLL_CLKSW_MDTOPSM_SW_CTL_SRC;
405
406typedef enum {
407 CLKSW_SDF_SRC_BPIPLL_DIV8 = 0,
408 CLKSW_SDF_SRC_BPIPLL_DIV4 = 1,
409 CLKSW_SDF_SRC_BPIPLL = 2,
410 CLKSW_SDF_SRC_BPIPLL_DIV2 = 3,
411 /*CLKSW_SDF_SRC_USB_PhyLink = 4,*/ /* HW didn't support. */
412 CLKSW_SDF_SRC_26M,
413 CLKSW_SDF_SRC_END
414} PLL_CLKSW_SDF_SRC;
415
416/* Below for debugging */
417
418#define PLL_FM_NUM 30 /* Note: This number should also sync to EE owner. */
419typedef struct {
420 kal_uint32 clock_trace_mon; /* 0 */
421 kal_uint32 clock_mdsys_208m;
422 kal_uint32 clock_mdrxsys_rake;
423 kal_uint32 clock_mdrxsys_brp;
424 kal_uint32 clock_mdrxsys_vdsp;
425 kal_uint32 clock_mdtop_log_gtb; /* 5 */
426 kal_uint32 clock_fesys_csys;
427 kal_uint32 clock_fesys_txsys;
428 kal_uint32 clock_fesys_bsi;
429 kal_uint32 clock_mdsys_mdcore;
430 kal_uint32 clock_mdsys_bus2x_nodcm; /* 10 */
431 kal_uint32 clock_mdsys_bus2x;
432 kal_uint32 clock_mdtop_dbg;
433 kal_uint32 clock_mdtop_f32k;
434 kal_uint32 pll_MDBPI0_div2;
435 kal_uint32 pll_MDBPI2; /* 15 */
436 kal_uint32 pll_MDBPI1;
437 kal_uint32 pll_MDBPI0;
438 kal_uint32 pll_MDTX;
439 kal_uint32 pll_MDBRP;
440 kal_uint32 pll_MDVDSP; /* 20 */
441 kal_uint32 pll_MDMCU;
442/* below no use */
443 kal_uint32 NULL_22;
444 kal_uint32 NULL_23;
445 kal_uint32 NULL_24;
446 kal_uint32 NULL_25;
447 kal_uint32 NULL_26;
448 kal_uint32 NULL_27;
449 kal_uint32 NULL_28;
450 kal_uint32 NULL_29;
451} PLL_CLK_INFO;
452
453extern PLL_CLK_INFO g_pll_info;
454extern const char PLL_FM_clock[PLL_FM_NUM][32];
455
456/* Above for debugging */
457
458/*******************************************************************************
459 * Include header files
460 ******************************************************************************/
461extern void PLL_exception_dump(void);
462
463extern kal_uint32 PLL_FrequencyMeter_GetFreq(PLL_FM_SOURCE index);
464
465extern kal_bool PLL_PLLMIXED_PLL_ON_CTL(PLL_SOURCE pll, kal_bool force_on);
466
467extern void PLL_CLKSW_FLEXCKGEN_SEL_PLLSEL_Set(PLL_CLKSW_FLEXCKGEN module, PLL_CLKSW_FLEXCKGEN_PLL_SRC pll_sel);
468extern void PLL_CLKSW_FLEXCKGEN_SEL_DIVSEL_Set(PLL_CLKSW_FLEXCKGEN module, PLL_CLKSW_FLEXCKGEN_DIV div_sel);
469extern void PLL_CLKSW_FLEXCKGEN_SEL_Get(PLL_CLKSW_FLEXCKGEN module, kal_uint32 *pll_sel, kal_uint32 *div_sel);
470extern void PLL_CLKSW_FLEXCKGEN_STS_Get(PLL_CLKSW_FLEXCKGEN module, kal_uint32 *ck_rdy, kal_uint32 *ckgen_state, kal_uint32 *pll_req);
471extern kal_bool PLL_CLKSW_MDTOPSM_SW_CTL(PLL_CLKSW_MDTOPSM_SW_CTL_SRC module, kal_bool force_on);
472
473extern kal_uint32 PLL_CLKSW_SDF_SRC_CKSEL_Get();
474extern kal_bool PLL_CLKSW_SDF_SRC_CKSEL_Set(PLL_CLKSW_SDF_SRC src_ck);
475extern void PLL_CLKSW_SDF_CK_Req(kal_bool clk_req);
476
477#endif /* !__PLL_MT6763_H__ */
478