blob: a1c271a0d507645a0234cef74d33d3fc873b5c32 [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) 2005
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 *
38 * Filename:
39 * ---------
40 * sleepdrv_common.h
41 *
42 * Project:
43 * --------
44 * Maui_Software
45 *
46 * Description:
47 * ------------
48 * This file is a common include file for l1core & pcore dual-core
49 *
50 * Author:
51 * -------
52 * -------
53 *
54 *============================================================================
55 * HISTORY
56 * Below this line, this part is controlled by ClearCase. DO NOT MODIFY!!
57 *------------------------------------------------------------------------------
58 * $Log$
59 *
60 * 02 01 2021 pj.chen
61 * [MOLY00622176] [Colgin][MT6880][MD_Sanity][MCD][core0,vpe0,tc0(vpe0)] Assert fail: pll_gen97.c 525 0x1 0x1a 0x2222 - 0IDLE
62 *
63 * Increase 26M settle time
64 *
65 * 01 22 2021 pj.chen
66 * [MOLY00620543] [Colgin][MT6880][MD_Sanity][MCD][core0,vpe0,tc0(vpe0)] Assert fail: MD_TOPSM.c 1923 0x6 0x0 0x0 - 0IDLE
67 *
68 * Increase EMI settle time (MD700)
69 *
70 * 11 11 2020 pj.chen
71 * [MOLY00554988] [Colgin] Sync code from T700.MP for sleep_drv
72 * Code sync from T700.MP to MD700.MP
73 *
74 * 04 15 2020 guo-huei.chang
75 * [MOLY00509323] [Gen97] Power Model
76 * Power model (Sleep Driver Part)
77 * global variable from UnCache to Cache
78 *
79 * 04 06 2020 guo-huei.chang
80 * [MOLY00509323] [Gen97] Power Model
81 *
82 * Power model (Sleep Driver Part)
83 *
84 * 02 04 2020 owen.ho
85 * [MOLY00476151] [HCR][MT6873][Margux][Q0][MP2][SQC][MTBF][ErrorTimes:4]Externel (EE),0,0,99,/data/vendor/core/,1,modem,Trigger time:[2020-01-17 18:21:13.978100] md1:(MCU_core0.vpe0.tc0(VPE0)) [ASSERT] file:mcu/driver/devdrv/pll/src/pll_gen97.c line:494
86 *
87 * Rollback 26m settle time due to SPMFW bug fixed
88 *
89 * 12 03 2019 owen.ho
90 * [MOLY00312416] [Gen97][Need Patch]Sleep driver development
91 * Update 26m settle for Margaux
92 *
93 * 09 25 2019 owen.ho
94 * [MOLY00312416] [Gen97][Need Patch]Sleep driver development
95 *
96 * 1.Update 26m and apsrc settle time
97 * 2.Check 26m ready by ack
98 *
99 * 09 23 2019 guo-huei.chang
100 * [MOLY00442253] 5G Feature �\��API �ݨD
101 *
102 * MDLPM for customer
103 *
104 * 09 02 2019 owen.ho
105 * [MOLY00312416] [Gen97][Need Patch]Sleep driver development
106 * Update low power related golden settings(26m/emi settle)
107 *
108 * 08 28 2019 owen.ho
109 * [MOLY00312416] [Gen97][Need Patch]Sleep driver development
110 * Update sleep mode golden settings
111 *
112 * 07 01 2019 ws.yan
113 * [MOLY00417187] Gen97 sleep mode development: add MD97P option amd update rf topsm golden setting
114 *
115 * .
116 * [EWSP0000021808]
117 *
118 * 06 24 2019 owen.ho
119 * [MOLY00312416] [Gen97][Need Patch]Sleep driver development
120 * Unify definition for 26m settle time
121 *
122 * 01 30 2019 leon.yeh
123 * [MOLY00381082] [Gen97] Modem Sleep UMOLYE merge back [ERS00028734]
124 * - add 2G slave (SW) trigger TXSYS power enum
125 * - TOPDM setting change based on DE spec for Lafite
126 * .
127 *
128 * 01 02 2019 owen.ho
129 * [MOLY00312416] [Gen97][Need Patch]Sleep driver development
130 * Drvtest environment
131 *
132 * 11 26 2018 owen.ho
133 * [MOLY00312416] [Gen97][Need Patch]Sleep driver development
134 * Merge from VMOLY
135 *
136 * 10 19 2018 owen.ho
137 * [MOLY00312416] [Gen97][Need Patch]Sleep driver development
138 * Update golden settings
139 *
140 * 08 17 2018 owen.ho
141 * [MOLY00312416] [Gen97][Need Patch]Sleep driver development
142 * Integrate Gen97 driver from UMOYE.Gen97.DEV
143 *
144 * 05 18 2018 owen.ho
145 * [MOLY00312416] [Gen97] Sleep driver development
146 * Gen97 sleep driver
147 *
148 * 03 09 2018 owen.ho
149 * [MOLY00312416] [Gen97] Sleep driver development
150 * Solve build error for Gen97
151 * 06 14 2018 che-wei.chang
152 * [MOLY00333397] [TOPSM/OST] remove legacy code and log reduction
153 *
154 * 05 16 2018 che-wei.chang
155 * [MOLY00318930] [Eiger] topsm/ost - update 26m settle time
156 *
157 * 05 09 2018 che-wei.chang
158 * [MOLY00318930] [Eiger] topsm/ost - modify 26m setle time to 154T
159 *
160 * 03 14 2018 che-wei.chang
161 * [MOLY00281049] [93/95 re-arch] MD topsm/ost - update 26m settle time to 143T+4T
162 *
163 * 03 09 2018 che-wei.chang
164 * [MOLY00281049] [93/95 re-arch] MD topsm/ost - modify 95 26m settle time
165 *
166 * 01 18 2018 leon.yeh
167 * [MOLY00283840] [93/95 re-arch][MT6295] code merge - modem topsm setting for pre antenna trigger modify according to Ver 2.0 (20180111) spec.
168 *
169 * 11 30 2017 owen.ho
170 * [MOLY00293253] [MT6771][Sylvia]DCXO_RDY_WO_ACK assert after Dormant
171 * Modify 26m settle time
172 *
173 * 03 03 2017 owen.ho
174 * [MOLY00171832] [UMOLYA]
175 *
176 * Update sys_clk settle time
177 *
178 * 01 20 2017 guo-huei.chang
179 * [MOLY00207227] [MT6293] Sleep Driver
180 * add flight mode support for C2K
181 *
182 * 11 02 2016 guo-huei.chang
183 * [MOLY00207227] [MT6293] Sleep Driver
184 *
185 * 1. move OSTD, MO_TOPSM, and Sleep_driver from L1 to PS trace
186 * 2. sync log with Gen92
187 *
188 * 03 30 2016 hsiao-hsien.chen
189 * [MOLY00171976] [GEN93] Fix sleep driver build error.
190 * Add 93 option.
191 *
192 * 08 20 2015 shengfu.tsai
193 * [MOLY00124310] [6291 plus][sleep mode] code merge from UMOLY to 91plus
194 * .submit the modem topsm initial function for Elbrus
195 *
196 * 08 04 2015 che-wei.chang
197 * [MOLY00120320] [TK6291/Jade] DVFS Code Submission
198 * update ccirq cmd enum for dvfs
199 *
200 * 07 23 2015 ethan.hsieh
201 * [MOLY00131103] Sleep Mode Debug Shared Memory Mechanism Improvement
202 *
203 * 07 10 2015 che-wei.chang
204 * [MOLY00127376] [MT6755][UMOLY]update md 26m settle time to 4ms
205 *
206 * 07 10 2015 che-wei.chang
207 * [MOLY00120320] [TK6291/Jade] DVFS Code Submission,add ccirq enum for DVFS
208 *
209 * 07 07 2015 che-wei.chang
210 * [MOLY00089700] [TK6291][UMOLY]
211 * sync low power Cbr
212 * 1.add stress test AT CMD (ps side)
213 * 2.add at_sleepcount AT CMD (ps side)
214 * 3.update setting for JADE
215 *
216 * 06 18 2015 hsiao-hsien.chen
217 * [MOLY00072109] [MT6291] Sleep mode code modification.
218 * Fix build error. Add CCIRQ enum for pcore stress test.
219 *
220 * 06 11 2015 che-wei.chang
221 * [MOLY00089700] [TK6291][UMOLY]
222 * update SleepDrv_CCIRQ_CMD_E for DVFS
223 *
224 * 05 28 2015 ethan.hsieh
225 * [MOLY00085137] [TK6291] Sleep Mode Modifications - Move infinite sleep compile option to sleepdrv_common.h for both Pcore and L1core
226 *
227 * 05 14 2015 ethan.hsieh
228 * [MOLY00085137] [TK6291] Sleep Mode Modifications - Infinite Sleep for Jade
229 *
230 *------------------------------------------------------------------------------
231 * Upper this line, this part is controlled by ClearCase. DO NOT MODIFY!!
232 *============================================================================
233 ****************************************************************************/
234
235
236
237#ifndef __SLEEPDRV_COMMON_H__
238#define __SLEEPDRV_COMMON_H__
239
240#ifndef MAX
241#define MAX(a,b) ( ( (a) > (b) ) ? (a) : (b) )
242#endif
243
244#ifndef MAX4
245#define MAX4(a,b,c,d) MAX( MAX((a),(b)) , MAX((c),(d)) )
246#endif
247
248#if defined(__MD93__)
249 #if defined(MT6763) || defined(MT6739)
250 #define RM_SYS_CLK_SETTLE 0x8C
251 #elif defined(MT6771)
252 #define RM_SYS_CLK_SETTLE 0x97
253 #else
254 #define RM_SYS_CLK_SETTLE 0x97
255 #endif
256#elif defined(__MD95__)
257 #if defined(MT6779) // Lafite
258 #define RM_SYS_CLK_SETTLE 0x93 // according to 2018/10/04 DE Wayne Liu's comment
259 #else
260 #define RM_SYS_CLK_SETTLE 0x9E // according to Ver 2.0 (20180111) spec
261 #endif
262#elif defined(__MD97__) || defined(__MD97P__)
263 #if defined(MT6297) || defined(MT6297_IA)
264 #define SYS_CLK_SETTLE 0x96
265 #define RM_SYS_CLK_SETTLE SYS_CLK_SETTLE+4
266 #define MD_MAS_TRIG_EMI_SETTLE (0x12)
267 #elif defined(MT6885)
268 #define SYS_CLK_SETTLE 0x51
269 #define RM_SYS_CLK_SETTLE SYS_CLK_SETTLE+4
270 #define MD_MAS_TRIG_EMI_SETTLE (0x15)
271 #elif defined(CHIP10992)
272 #define REAL_SYS_CLK_SETTLE 0x3B
273 #define TIA_SETTLE 0x5E
274 #define MD_MAS_TRIG_EMI_SETTLE (0x28)
275 #define PLL_PWR_MASTRIG_TIMER_SETTLE MAX4(MD_RM_PLL_SETTLE, MD_MAX_PWR_SETTLE, MD_MAS_TRIG_MAX_SETTLE, MD_TIMER_TRIG_SETTLE)
276 // 26M+EMI settle time need to cover TIA settle time
277 #define SYS_CLK_SETTLE (MAX(TIA_SETTLE, REAL_SYS_CLK_SETTLE+PLL_PWR_MASTRIG_TIMER_SETTLE) - PLL_PWR_MASTRIG_TIMER_SETTLE)
278 #define RM_SYS_CLK_SETTLE SYS_CLK_SETTLE+4
279 #else
280 #define SYS_CLK_SETTLE 0x53
281 #define RM_SYS_CLK_SETTLE SYS_CLK_SETTLE+4
282 #define MD_MAS_TRIG_EMI_SETTLE (0x16)
283 #endif
284 #define MD_MAS_TRIG_L1_COMM_SETTLE (0xE)
285 #define MD_MAS_TRIG_MAX_SETTLE MAX(MD_MAS_TRIG_EMI_SETTLE, MD_MAS_TRIG_L1_COMM_SETTLE)
286 #define MD_TIMER_TRIG_SETTLE (0x4)
287 #define MD_MAX_PWR_SETTLE (0x2)
288 #define MD_RM_PLL_SETTLE (0x2)
289#else
290 #error "no chip match"
291#endif
292
293typedef enum {
294 SLP_DBG_SHM_FIX_REG_PS_ISR_SM_SLV_REQ_STA,
295 SLP_DBG_SHM_FIX_REG_PS_NON_F32K_WKUP_STA,
296 SLP_DBG_SHM_FIX_REG_PS_F32K_WKUP_STA,
297 SLP_DBG_SHM_FIX_REG_PS_F32K2_WKUP_STA,
298 SLP_DBG_SHM_FIX_REG_PS_PRE_TIMESTAMP,
299 SLP_DBG_SHM_FIX_REG_PS_AFT_TIMESTAMP,
300 SLP_DBG_SHM_FIX_REG_PS_SW_LOCK,
301 SLP_DBG_SHM_FIX_REG_PS_RM_PWR_STA,
302 SLP_DBG_SHM_FIX_REG_PS_SW_PWR_CLK_FORCE_ON,
303 SLP_DBG_SHM_FIX_REG_PS_PWRPLL_OFF_REC,
304 SLP_DBG_SHM_FIX_REG_PS_MD_SYSCLK_GATING_STA,
305 SLP_DBG_SHM_FIX_REG_PS_RESERVED1,
306 SLP_DBG_SHM_FIX_REG_PS_END = SLP_DBG_SHM_FIX_REG_PS_RESERVED1,
307 SLP_DBG_SHM_FIX_REG_L1_ISR_SM_SLV_REQ_STA,
308 SLP_DBG_SHM_FIX_REG_L1_NON_F32K_WKUP_STA,
309 SLP_DBG_SHM_FIX_REG_L1_F32K_WKUP_STA,
310 SLP_DBG_SHM_FIX_REG_L1_PRE_TIMESTAMP,
311 SLP_DBG_SHM_FIX_REG_L1_AFT_TIMESTAMP,
312 SLP_DBG_SHM_FIX_REG_L1_SW_LOCK,
313 SLP_DBG_SHM_FIX_REG_L1_SM_PWR_RDY,
314 SLP_DBG_SHM_FIX_REG_L1_SM_PLL_STA,
315 SLP_DBG_SHM_FIX_REG_L1_SM_DBG_REQ_STA,
316 SLP_DBG_SHM_FIX_REG_L1_SM_MAS_REQ_STA,
317 SLP_DBG_SHM_FIX_REG_L1_SM_PWR_ON_SW_CTRL0,
318 SLP_DBG_SHM_FIX_REG_L1_SW_PLL_FORCE_ON,
319 SLP_DBG_SHM_FIX_REG_L1_END = SLP_DBG_SHM_FIX_REG_L1_SW_PLL_FORCE_ON,
320 SLP_DBG_SHM_FIX_REG_END
321} SLP_DBG_SHM_FIX_REG_INDEX;
322
323typedef struct {
324 kal_uint32 guard_pat;
325 // fix pattern of buffer selection for pscore
326 kal_uint32 buf_sel_ps;
327 // fix pattern of buffer selection for l1core
328 kal_uint32 buf_sel_l1;
329 kal_uint32 revision;
330 // double size for fix pattern
331 kal_uint32 fix_reg[SLP_DBG_SHM_FIX_REG_END<<1];
332} slp_dbg_shm_fix_pat_t;
333
334typedef enum {
335 //SLP_DBG_SHM_LockSleep = 0x1,
336 //SLP_DBG_SHM_UnLockSleep,
337 SLP_DBG_SHM_2G_Sleep = 0x1,
338 SLP_DBG_SHM_2G_Wakeup,
339 SLP_DBG_SHM_3G_Sleep,
340 SLP_DBG_SHM_3G_Wakeup,
341 SLP_DBG_SHM_4G_Sleep,
342 SLP_DBG_SHM_4G_Wakeup,
343 SLP_DBG_SHM_RAT_InfiniteSleep_Done,
344} SLP_DBG_SHM_RING_BUFFER_INDEX;
345
346typedef struct {
347 // index is for recording enumrate SLP_DBG_SHM_RING_BUFFER_INDEX
348 kal_uint32 index:4;
349 // Bi[0] = 1 if 2G RM_TMR_SSTA is not in pause state
350 // Bi[1] = 1 if 3G RM_TMR_SSTA is not in pause state
351 // Bi[2] = 1 if SM_SLV_REQ_STA shows TD is slave ready
352 // Bi[3] = 1 if 4G RM_TMR_SSTA is not in pause state
353 kal_uint32 status:4;
354 // record for FMA global timestamp, and unit is 256 us.
355 kal_uint32 timestamp:24;
356 // additional debug information for user.
357 kal_uint32 dbg_info;
358} slp_dbg_shm_ring_buf_t;
359
360// Now, AP only dumps 512 bytes although shared memory size is 1K bytes
361#define SLP_DBG_SHM_AP_DUMP_SIZE 512
362typedef struct {
363 kal_uint32 guard_pat1;
364 kal_uint32 guard_pat2;
365 kal_uint32 guard_pat3;
366 kal_uint32 revision;
367 slp_dbg_shm_ring_buf_t info[(SLP_DBG_SHM_AP_DUMP_SIZE-sizeof(slp_dbg_shm_fix_pat_t)-sizeof(kal_uint32)*4)/sizeof(slp_dbg_shm_ring_buf_t)];
368} slp_dbg_shm_ring_pat_t;
369
370typedef struct {
371 slp_dbg_shm_fix_pat_t fix_pat;
372 slp_dbg_shm_ring_pat_t ring_pat;
373} slp_dbg_shm_t;
374
375typedef enum _slp_lock_type_e {
376 SLP_IS_NO_LOCK,
377 SLP_IS_SW_LOCK,
378 SLP_IS_HW_LOCK
379} slp_lock_type_e;
380
381typedef enum _power_model_mdlpm_e {
382 POWER_MODEL_MDLPM_RESERVED_0 = 0, // Reserve 0 for speicial purpose
383 POWER_MODEL_MDLPM_UTC_0,
384 POWER_MODEL_MDLPM_UTC_1,
385 POWER_MODEL_MDLPM_FRC,
386 POWER_MODEL_MDLPM_WALL_CLK_0,
387 POWER_MODEL_MDLPM_WALL_CLK_1,
388 POWER_MODEL_MDLPM_MD_SLEEP_DUR,
389 POWER_MODEL_MDLPM_GL1_SLEEP_DUR,
390 POWER_MODEL_MDLPM_UL1_SLEEP_DUR,
391 POWER_MODEL_MDLPM_EL1_SLEEP_DUR,
392 POWER_MODEL_MDLPM_NL1_SLEEP_DUR = 10,
393 POWER_MODEL_MDLPM_GL1_CONNECT_DUR,
394 POWER_MODEL_MDLPM_GL1_CONNECT_DRX_DUR,
395 POWER_MODEL_MDLPM_GL1_RX_WINDOW_DUR,
396 POWER_MODEL_MDLPM_GL1_TX_WINDOW_DUR,
397 POWER_MODEL_MDLPM_GL1_TX_POWER_RATIO_0,
398 POWER_MODEL_MDLPM_GL1_TX_POWER_RATIO_1,
399 POWER_MODEL_MDLPM_RESERVED_20 = 20,
400 POWER_MODEL_MDLPM_UL1_CONNECT_DUR,
401 POWER_MODEL_MDLPM_UL1_CONNECT_DRX_DUR,
402 POWER_MODEL_MDLPM_UL1_RX_WINDOW_DUR,
403 POWER_MODEL_MDLPM_UL1_TX_WINDOW_DUR,
404 POWER_MODEL_MDLPM_UL1_TX_POWER_RATIO_0,
405 POWER_MODEL_MDLPM_UL1_TX_POWER_RATIO_1,
406 POWER_MODEL_MDLPM_RESERVED_30 = 30,
407 POWER_MODEL_MDLPM_EL1_CONNECT_DUR,
408 POWER_MODEL_MDLPM_EL1_CONNECT_DRX_DUR,
409 POWER_MODEL_MDLPM_EL1_RX_WINDOW_DUR,
410 POWER_MODEL_MDLPM_EL1_TX_WINDOW_DUR,
411 POWER_MODEL_MDLPM_EL1_TX_POWER_RATIO_0,
412 POWER_MODEL_MDLPM_EL1_TX_POWER_RATIO_1,
413 POWER_MODEL_MDLPM_EL1_CC_RATIO_0,
414 POWER_MODEL_MDLPM_EL1_CC_RATIO_1,
415 POWER_MODEL_MDLPM_EL1_RAS_RATIO,
416 POWER_MODEL_MDLPM_RESERVED_45 = 45,
417 POWER_MODEL_MDLPM_NL1_CONNECT_DUR,
418 POWER_MODEL_MDLPM_NL1_CONNECT_DRX_DUR,
419 POWER_MODEL_MDLPM_NL1_RX_WINDOW_DUR,
420 POWER_MODEL_MDLPM_NL1_TX_WINDOW_DUR,
421 POWER_MODEL_MDLPM_NL1_TX_POWER_RATIO_0,
422 POWER_MODEL_MDLPM_NL1_TX_POWER_RATIO_1,
423 POWER_MODEL_MDLPM_DVFS_GEAR_RATIO_0 = 61,
424 POWER_MODEL_MDLPM_DVFS_GEAR_RATIO_1 = 62,
425 POWER_MODEL_MDLPM_REC_INDEX = 63,
426 POWER_MODEL_MDLPM_MAX_ITEM = 64
427} power_model_mdlpm_e;
428
429#endif