blob: d5016051d33a46cccfc789896ab22aab83693572 [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 * ect.h
41 *
42 * Project:
43 * --------
44 * Maui_Software
45 *
46 * Description:
47 * ------------
48 * This Module defines the HW initialization.
49 *
50 * Author:
51 * -------
52 * -------
53 *
54 *============================================================================
55 * HISTORY
56 * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
57 *------------------------------------------------------------------------------
58 *
59 *
60 *
61 * removed!
62 * removed!
63 *------------------------------------------------------------------------------
64 * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
65 *============================================================================
66 ****************************************************************************/
67/*******************************************************************************
68 * Include header files.
69 *******************************************************************************/
70#include "ect.h"
71#include "init.h"
72#include "intrCtrl.h"
73#include "reg_base.h"
74#include "sleepdrv_interface.h"
75#include "ex_public.h"
76#include "kal_iram_section_defs.h"
77#include "cpu_info.h"
78
79
80
81//#ifdef __L1CORE__
82//#include "RM_public.h"
83//#include "us_timer.h"
84//#endif /* __L1CORE__ */
85
86
87/*******************************************************************************
88 * Macro
89 *******************************************************************************/
90/* ECT register offsets */
91#define CTIREGSZ (0x1000)
92#define CTICONTROL (0x00)
93#define CTIINTACK (0x10)
94#define CTIINEN0 (0x20)
95#define CTIINEN1 (0x24)
96#define CTIINEN2 (0x28)
97#define CTIINEN3 (0x2C)
98#define CTIINEN4 (0x30)
99#define CTIINEN5 (0x34)
100#define CTIINEN6 (0x38)
101#define CTIINEN7 (0x3C)
102
103#define CTIOUTEN0 (0xA0)
104#define CTIOUTEN1 (0xA4)
105#define CTIOUTEN2 (0xA8)
106#define CTIOUTEN3 (0xAC)
107#define CTIOUTEN4 (0xb0)
108#define CTIOUTEN5 (0xB4)
109#define CTIOUTEN6 (0xB8)
110#define CTIOUTEN7 (0xBC)
111
112#define CTITRIGINSTATUS (0x130)
113#define CTITRIGOUTSTATUS (0x134)
114#define LAR (0xFB0)
115#define LSR (0xFB4)
116#define DEVID (0xFC8)
117
118#define USIP_CTI_STA (0x14)
119#define DSP_CTI_STA (0x0C)
120#define MCORE_CTI_STA (0x34)
121#define VCORE_CTI_STA (0x44)
122
123/*USIP CTI Status*/
124#define USIP0_0_CTI_EVENT (16)
125#define USIP0_1_CTI_EVENT (17)
126#define USIP1_0_CTI_EVENT (18)
127#define USIP1_1_CTI_EVENT (19)
128
129#define USIP0_0_CTI_EVENT_MASK (1 << USIP0_0_CTI_EVENT)
130#define USIP0_1_CTI_EVENT_MASK (1 << USIP0_1_CTI_EVENT)
131#define USIP1_0_CTI_EVENT_MASK (1 << USIP1_0_CTI_EVENT)
132#define USIP1_1_CTI_EVENT_MASK (1 << USIP1_1_CTI_EVENT)
133
134/*DSP CTI Status*/
135#define SCQ0_CTI_EVENT (16)
136#define SCQ1_CTI_EVENT (17)
137#define RAKE_CTI_EVENT (18)
138
139#define RAKE_CTI_EVENT_MASK (1 << RAKE_CTI_EVENT)
140#define SCQ0_CTI_EVENT_MASK (1 << SCQ0_CTI_EVENT)
141#define SCQ1_CTI_EVENT_MASK (1 << SCQ1_CTI_EVENT)
142
143#define MCORE0_CTI_EVENT (16)
144#define MCORE1_CTI_EVENT (17)
145
146#define MCORE0_CTI_EVENT_MASK (1 << MCORE0_CTI_EVENT)
147#define MCORE1_CTI_EVENT_MASK (1 << MCORE1_CTI_EVENT)
148
149#define VCORE0_CTI_EVENT (16)
150
151#define VCORE0_CTI_EVENT_MASK (1 << VCORE0_CTI_EVENT)
152
153/*the following registers should be 0x06, 0xB9, 0x4B, 0x0*/
154/*#define CTIPERIPHID0 (0xFE0)*/
155/*#define CTIPERIPHID1 (0xFE4)*/
156/*#define CTIPERIPHID2 (0xFE8)*/
157/*#define CTIPERIPHID3 (0xFEC)*/
158
159#define CTI_MAGIC (0xC5ACCE55)
160
161/* Platform dependent setting */
162/* CTI events */
163#define IA_TRIGGER_CTI_EVENT (0xA00601F4)
164
165#if (defined (__MD97__) || defined (__MD97P__) )
166#define USIP0_TRIGGER_CTI_EVENT (0xA0E30800)
167#define USIP1_TRIGGER_CTI_EVENT (0xA0E30804)
168#define USIP2_TRIGGER_CTI_EVENT (0xA0E30808)
169#define USIP3_TRIGGER_CTI_EVENT (0xA0E3080C)
170
171//#define RAKE_TRIGGER_CTI_EVENT (0xAC358008)
172#define SCQ0_TRIGGER_CTI_EVENT (0xABE09008)
173#define SCQ1_TRIGGER_CTI_EVENT (0xABF09008)
174#define SCQ2_TRIGGER_CTI_EVENT (0xAC009008)
175#define SCQ3_TRIGGER_CTI_EVENT (0xAC109008)
176
177
178#define MCORE0_TRIGGER_CTI_EVENT (0xA40C6C00)
179#define MCORE1_TRIGGER_CTI_EVENT (0xA44C6C00)
180#define VCORE0_TRIGGER_CTI_EVENT (0xA50C6C00)
181
182#else //Gen93/Gen95
183#define USIP0_TRIGGER_CTI_EVENT (0xA1630800)
184#define USIP1_TRIGGER_CTI_EVENT (0xA1630804)
185#define USIP2_TRIGGER_CTI_EVENT (0xA1630808)
186#define USIP3_TRIGGER_CTI_EVENT (0xA163080C)
187
188#define RAKE_TRIGGER_CTI_EVENT (0xAC358008)
189#define SCQ0_TRIGGER_CTI_EVENT (0xABA10008)
190#define SCQ1_TRIGGER_CTI_EVENT (0xABB10008)
191
192#endif //if Gen97
193
194#define ECT_VPE_NUMS SYS_MCU_NUM_VPE
195
196#if defined (__MD93__)
197
198#define ECT_SW_IRQ_CODE IRQ_SW_LISR30_CODE
199
200#elif defined (__MD95__)
201
202#define ECT_SW_IRQ_CODE SW_TRIGGER_CODE21
203
204#elif (defined (__MD97__) || defined (__MD97P__) )
205
206#define ECT_SW_IRQ_CODE MD_IRQID_SW_TRIGGER_RESERVED_26
207
208#else
209 #error ¡§unsupported Generation¡¨
210#endif //if defined (__MD93__)
211
212
213/* REG RW */
214#define REG_WRITE32(addr, val) do{ *(volatile kal_uint32 *)(addr) = (val); }while(0)
215#define REG_READ32(var, addr) do{ (var) = *(volatile kal_uint32 *)(addr); }while(0)
216/*******************************************************************************
217 * Instance
218 *******************************************************************************/
219/* control variables */
220/* g_ect_dbg_en is used to control if DSPs shoudl break when CR4s break */
221/* default value is 0x1, which means DSPs dose not break if CR4s break */
222/* it could be changed by CVD button */
223/* 0x1 --> do not break DSPs when CR4s break (default) */
224/* 0x2 --> break DSPs when CR4s break (configured by .cmm) */
225__attribute__ ((section ("DRAM_EX_ROCODE"))) volatile const kal_uint32 g_ect_dbg_en = 0;
226typedef enum
227{
228 IA_USIP_ECT = 0,
229 DSP_ECT,
230 USIP_CTI_STA_ERG,
231 DSP_CTI_STA_REG,
232#if (defined (__MD97__) || defined (__MD97P__) )
233 MCORE_CTI_STA_REG,
234 VCORE_CTI_STA_REG,
235#endif // ifdef __MD97__
236
237 ECT_DUMP_NUMS
238}ECT_DUMP_INDEX;
239
240#define IA_DBG_EN (1 << 0)
241#define USIP_DBG_EN (1 << 1)
242#define DSP_DBG_EN (1 << 2)
243
244
245EX_BBREG_DUMP cti_dump;
246EX_BBREG_DUMP csyspwrupreq_dump;
247
248/* pointer to an array: base_1, len_1, type_1, base_2, len_2, type_2, ... */
249const kal_uint32 cti_dump_regions[ECT_DUMP_NUMS][3] = {
250 {IA_USIP_CTI, CTIREGSZ, 4,}, // IA_USIP CTI
251 {DSP_CTI, CTIREGSZ, 4,}, // DSP CTI
252 {DBG_AO_MISC + USIP_CTI_STA, 4, 4,}, // USIP CTI STA
253 {DBG_AO_MISC + DSP_CTI_STA, 4, 4,}, // DSP CTI STA
254#if (defined (__MD97__) || defined (__MD97P__) )
255 {DBG_AO_MISC + MCORE_CTI_STA, 4, 4,}, // DSP CTI STA
256 {DBG_AO_MISC + VCORE_CTI_STA, 4, 4,}, // DSP CTI STA
257#endif // ifdef __MD97__
258
259};
260
261const kal_uint32 csyspwrupreq_dump_regions[3] = {DEM_BASE+0x08,4,4};
262
263volatile kal_uint32 ECT_VPE_Trigger_Status[ECT_VPE_NUMS] = {0};
264
265
266/*******************************************************************************
267 * Foward declaration
268 *******************************************************************************/
269kal_bool ECT_DumpCallback(void);
270kal_uint32 ECT_Query_TriggerIn_Status(void);
271void ECT_Register_SW_IRQ(void);
272void ECT_SW_IRQ_Hdlr(kal_uint32 vector);
273
274#if (defined (__MD93__) || defined (__MD95__) )
275extern void MD_TOPSM_PLL_SW_Control(PS_PLL_FORCEON_USER USER, PS_TOPSM_PLL PLL, kal_bool fOn);
276#endif //ifndef __MD97__
277/*******************************************************************************
278 * Functions
279 *******************************************************************************/
280/*************************************************************************
281* FUNCTION
282* ECT_Enable_DbgSys_Clock
283*
284* DESCRIPTION
285* ECT enable dbgsys clock
286*
287* PARAMETERS
288*
289*
290* RETURNS
291*
292*
293*************************************************************************/
294void ECT_Enable_DbgSys_Clock(void)
295{
296/*
297 volatile kal_uint32 pll;
298 REG_READ32(pll,0xA00D0a04);
299 REG_WRITE32(0xA00D0a04, pll | (1 << 3));
300*/
301#if (defined (__MD93__) || defined (__MD95__) )
302 MD_TOPSM_PLL_SW_Control(PS_PLL_FORCEON_USER_CTI, PS_TOPSM_DBG_PLL, KAL_TRUE);
303#endif //ifndef __MD97__
304}
305
306
307/*************************************************************************
308* FUNCTION
309* ECT_Disable_DbgSys_Clock
310*
311* DESCRIPTION
312* ECT enable dbgsys clock
313*
314* PARAMETERS
315*
316*
317* RETURNS
318*
319*
320*************************************************************************/
321void ECT_Disable_DbgSys_Clock(void)
322{
323/*
324 volatile kal_uint32 pll;
325 REG_READ32(pll,0xA00D0a04);
326 REG_WRITE32(0xA00D0a04, pll & (~(1 << 3)));
327*/
328#if (defined (__MD93__) || defined (__MD95__) )
329 MD_TOPSM_PLL_SW_Control(PS_PLL_FORCEON_USER_CTI, PS_TOPSM_DBG_PLL, KAL_FALSE);
330#endif //ifndef __MD97__
331
332}
333
334
335/*************************************************************************
336* FUNCTION
337* ECT_Register_GIC_IRQ
338*
339* DESCRIPTION
340* ECT register gic lisr
341*
342* PARAMETERS
343*
344*
345* RETURNS
346*
347*
348*************************************************************************/
349void ECT_Register_SW_IRQ(void)
350{
351//mips SW IRQ
352 //IRQ_Register_LISR(ECT_SW_IRQ_CODE, ECT_SW_IRQ_Hdlr,"ECT SW IRQ");
353 //IRQSensitivity(ECT_SW_IRQ_CODE, LEVEL_SENSITIVE);
354 IRQUnmask(ECT_SW_IRQ_CODE);
355
356}
357
358
359/*************************************************************************
360* FUNCTION
361* ECT_Init
362*
363* DESCRIPTION
364* ECT initialization
365*
366* PARAMETERS
367*
368*
369* RETURNS
370*
371*
372*************************************************************************/
373void ECT_Init(void)
374{
375 /* enable DBG APB clock */
376 ECT_Enable_DbgSys_Clock();
377
378 REG_WRITE32(0xA060111C, 0x8001E848);
379
380 /* enter magic key */
381 REG_WRITE32(IA_USIP_CTI + LAR, CTI_MAGIC);
382 REG_WRITE32(DSP_CTI + LAR, CTI_MAGIC);
383
384 /* setting exception propagation */
385 /* MD&uSip CTI part */
386 /*********************IA_USIP_CTI**********************
387 I O
388 7 mdmcu_assert_trigger 7 usip_fiq
389 6 1'b1 6 usip_restart
390 5 usip_cti_event 5 usip_dbgrq
391 4 usip_dbgack 4
392 3 3 mdmcu_ect_irq
393 2 2
394 1 1
395 0 IA_DebugM 0 EJ_DINT
396 **************************************************/
397
398
399
400 REG_WRITE32(IA_USIP_CTI + CTIINEN5, CH_EXP);
401 REG_WRITE32(IA_USIP_CTI + CTIINEN7, CH_EXP);
402
403 REG_WRITE32(IA_USIP_CTI + CTIOUTEN3, CH_EXP);
404 REG_WRITE32(IA_USIP_CTI + CTIOUTEN7, CH_EXP);
405
406 //Default g_ect_dbg_en = 0 so IA debug channel is disalbe.
407 if(g_ect_dbg_en&IA_DBG_EN)
408 {
409 REG_WRITE32(IA_USIP_CTI + CTIINEN0, CH_DBG);
410 REG_WRITE32(IA_USIP_CTI + CTIOUTEN0, CH_DBG);
411 }
412
413 //Default g_ect_dbg_en = 0 so usip debug channel is disalbe.
414 if(g_ect_dbg_en&USIP_DBG_EN)
415 {
416 REG_WRITE32(IA_USIP_CTI + CTIINEN4, CH_DBG);
417 REG_WRITE32(IA_USIP_CTI + CTIOUTEN5, CH_DBG);
418 }
419
420 /* restart */
421 //REG_WRITE32(IA_USIP_CTI + CTIINEN6, CH_RST);
422 // Note: to resume PSCORE, write 0xF00A80BC to 0x1
423
424
425 //Gen95
426 /* DSP CTI part */
427 /*********************IA_USIP_CTI**********************
428 I O
429 7 7
430 6 1'b1 6
431 5 5 rake_fiq
432 4 4 scq_fiq
433 3 rake_md32_cti_event 3 rake_restart
434 2 scq_cti_event 2 scq_restart
435 1 rake_md32_dbgack 1 rake_dbgrq
436 0 scq_dbgack 0 scq_dbgrq
437 **************************************************/
438
439
440 //Gen97
441 /* DSP CTI part */
442 /*********************IA_USIP_CTI**********************
443 I O
444 7 mcore_cti_event 7 mcore_fiq
445 6 mcore_cti_dbgack 6 vcore_fiq
446 5 vcore_cti_event 5 rake_fiq
447 4 vcore_cti_dbgack 4 vdsp_fiq
448 3 rake_md32_cti_event 3 mcore_dbgrq
449 2 vdsp_cti_event 2 vcore_dbgrq
450 1 rake_md32_dbgack 1 rake_dbgrq
451 0 scq_dbgack 0 vdsp_dbgrq
452 **************************************************/
453 REG_WRITE32(DSP_CTI + CTIINEN2, CH_EXP);
454 REG_WRITE32(DSP_CTI + CTIINEN3, CH_EXP);
455 REG_WRITE32(DSP_CTI + CTIOUTEN4, CH_EXP);
456 REG_WRITE32(DSP_CTI + CTIOUTEN5, CH_EXP);
457
458#if (defined (__MD97__) || defined (__MD97P__) )
459 REG_WRITE32(DSP_CTI + CTIINEN5, CH_EXP);
460 REG_WRITE32(DSP_CTI + CTIINEN7, CH_EXP);
461 REG_WRITE32(DSP_CTI + CTIOUTEN7, CH_EXP);
462 REG_WRITE32(DSP_CTI + CTIOUTEN6, CH_EXP);
463#endif // if defined (__MD97__)
464
465 //Default g_ect_dbg_en = 0 so DSP debug channel is disalbe.
466 if(g_ect_dbg_en&DSP_DBG_EN)
467 {
468 REG_WRITE32(DSP_CTI + CTIINEN0, CH_DBG);
469 REG_WRITE32(DSP_CTI + CTIINEN1, CH_DBG);
470 REG_WRITE32(DSP_CTI + CTIOUTEN0, CH_DBG);
471 REG_WRITE32(DSP_CTI + CTIOUTEN1, CH_DBG);
472
473#if (defined (__MD97__) || defined (__MD97P__) )
474 REG_WRITE32(DSP_CTI + CTIINEN4, CH_DBG);
475 REG_WRITE32(DSP_CTI + CTIINEN6, CH_DBG);
476 REG_WRITE32(DSP_CTI + CTIOUTEN3, CH_DBG);
477 REG_WRITE32(DSP_CTI + CTIOUTEN2, CH_DBG);
478#endif // if defined (__MD97__)
479
480
481 }
482
483 /* restart */
484 //REG_WRITE32(DSP_CTI + CTIINEN6, CH_RST);
485 // Note: to resume CS, write 0xF009C0AC to 0x1
486 // Note: to resume MD32, write 0xF009C0A8 to 0x1
487
488
489
490 /* enabling CTI */
491 REG_WRITE32(IA_USIP_CTI + CTICONTROL, 0x1);
492 REG_WRITE32(DSP_CTI + CTICONTROL, 0x1);
493
494 /* turn off debug sys clock */
495 ECT_Disable_DbgSys_Clock();
496
497 /* LISR registration */
498 //IRQ_Register_LISR((IRQ_ECT_CODE), ECT_Hdlr, "Embedded Cross Trigger");
499 //IRQSensitivity(IRQ_ECT_CODE, LEVEL_SENSITIVE);
500 IRQClearInt(IRQ_ECT_CODE);
501 IRQUnmask(IRQ_ECT_CODE);
502
503 /* bbreg dump setting */
504 cti_dump.regions = (kal_uint32 *)cti_dump_regions;
505 cti_dump.num = ECT_DUMP_NUMS;
506 cti_dump.bbreg_dump_callback = NULL;
507 EX_REGISTER_BBREG_DUMP(&cti_dump);
508
509 csyspwrupreq_dump.regions = (kal_uint32 *)csyspwrupreq_dump_regions;
510 csyspwrupreq_dump.num = 1;
511 csyspwrupreq_dump.bbreg_dump_callback = NULL;
512 EX_REGISTER_BBREG_DUMP(&csyspwrupreq_dump);
513
514
515// ECT_Register_SW_IRQ();
516
517}
518
519/*************************************************************************
520* FUNCTION
521* ECT_SW_IRQ_Hdlr
522*
523* DESCRIPTION
524* ECT SW ISRs
525*
526* PARAMETERS
527*
528*
529* RETURNS
530*
531*
532*************************************************************************/
533void ECT_SW_IRQ_Hdlr(kal_uint32 vector)
534{
535 kal_uint32 vpe_num = kal_get_current_vpe_id();
536 ECT_VPE_Trigger_Status[vpe_num] |= ECT_SRC_IA;
537
538}
539
540
541/*************************************************************************
542* FUNCTION
543* ECT_Hdlr
544*
545* DESCRIPTION
546* ECT ISRs
547*
548* PARAMETERS
549*
550*
551* RETURNS
552*
553*
554*************************************************************************/
555void ECT_Hdlr(kal_uint32 vector)
556{
557
558kal_uint32 vpe_num = kal_get_current_vpe_id();
559#ifdef ATEST_DRV_ECT
560ECT_VPE_Trigger_Status[vpe_num] += (vpe_num+1);
561dbg_print("ECT Trigger, VPE: %d ",vpe_num);
562IRQMask(IRQ_ECT_CODE);
563
564
565
566#else
567
568ECT_VPE_Trigger_Status[vpe_num] = ECT_Query_TriggerIn_Status();
569
570#endif // ATEST_DRV_ECT
571}
572
573
574/*************************************************************************
575* FUNCTION
576* ECT_TrgExcp
577*
578* DESCRIPTION
579* Exception propagation
580*
581* PARAMETERS
582*
583*
584* RETURNS
585*
586*
587*************************************************************************/
588void ECT_TrgExcp(void)
589{
590
591 //Activate_LISR(ECT_SW_IRQ_CODE);
592 REG_WRITE32(IA_TRIGGER_CTI_EVENT, 1);
593 MO_Sync();
594}
595
596
597/*************************************************************************
598* FUNCTION
599* ECT_Query_TriggerIn_Status
600*
601* DESCRIPTION
602*
603*
604* PARAMETERS
605*
606*
607* RETURNS
608*
609*
610*************************************************************************/
611kal_uint32 ECT_Query_TriggerIn_Status(void)
612{
613 kal_uint32 ect_st = ECT_SRC_NONE;
614 kal_uint32 ia_usip_cti;
615 kal_uint32 dsp_cti;
616 kal_uint32 usip_cti;
617 kal_uint32 scq_cti;
618
619 /* enable DBG APB clock */
620
621 ECT_Enable_DbgSys_Clock();
622
623 REG_READ32(ia_usip_cti, IA_USIP_CTI + CTITRIGINSTATUS);
624 REG_READ32(dsp_cti, DSP_CTI + CTITRIGINSTATUS);
625
626 if(ia_usip_cti&IA_TRIGGERIN_MASK)
627 ect_st |= ECT_SRC_IA;
628
629 if(ia_usip_cti&USIP_TRIGGERIN_MASK)
630 {
631 ect_st |= ECT_SRC_USIP;
632 usip_cti = ECT_Get_Usip_CTI_Status();
633 ect_st |= usip_cti;
634 }
635
636
637
638 if(dsp_cti&RAKE_TRIGGERIN_MASK)
639 {
640 ect_st |= ECT_SRC_RAKE;
641 }
642
643 if(dsp_cti&SCQ_TRIGGERIN_MASK)
644 {
645 ect_st |= ECT_SRC_SCQ;
646 scq_cti = ECT_Get_Scq16_CTI_Status();
647 ect_st |= scq_cti;
648 }
649#if (defined (__MD97__) || defined (__MD97P__) )
650
651 kal_uint32 mcore_cti;
652 kal_uint32 vcore_cti;
653
654 if(dsp_cti&MCORE_TRIGGERIN_MASK)
655 {
656 ect_st |= ECT_SRC_MCORE;
657 mcore_cti = ECT_Get_MCORE_CTI_Status();
658 ect_st |= mcore_cti;
659 }
660
661 if(dsp_cti&VCORE_TRIGGERIN_MASK)
662 {
663 ect_st |= ECT_SRC_VCORE;
664 vcore_cti = ECT_Get_VCORE_CTI_Status();
665 ect_st |= vcore_cti;
666 }
667#endif // if Gen97
668
669
670 return ect_st;
671}
672
673
674/*************************************************************************
675* FUNCTION
676* ECT_Query
677*
678* DESCRIPTION
679*
680*
681* PARAMETERS
682*
683*
684* RETURNS
685*
686*
687*************************************************************************/
688kal_uint32 ECT_Query(void)
689{
690 kal_uint32 vpe_num = kal_get_current_vpe_id();
691 return ECT_VPE_Trigger_Status[vpe_num];
692
693}
694
695
696/*************************************************************************
697* FUNCTION
698* ECT_QueryByVPE
699*
700* DESCRIPTION
701*
702* Query ECT status value by input VPE
703*
704* PARAMETERS
705*
706* vpe_num: vep number
707*
708* RETURNS
709*
710* ECT status
711*
712*************************************************************************/
713kal_uint32 ECT_QueryByVPE(kal_uint32 vpe_num)
714{
715 if(vpe_num < ECT_VPE_NUMS)
716 return ECT_VPE_Trigger_Status[vpe_num];
717 else
718 return ECT_SRC_INVALID_VPE;
719}
720
721
722/*************************************************************************
723* FUNCTION
724* ECT_IsEnabled
725*
726* DESCRIPTION
727*
728*
729* PARAMETERS
730*
731*
732* RETURNS
733*
734*
735*************************************************************************/
736kal_uint32 ECT_IsEnabled(void)
737{
738 kal_uint32 ia_usip_cti_sta, dsp_cti_sta;
739
740 REG_READ32(ia_usip_cti_sta, IA_USIP_CTI + CTICONTROL);
741 REG_READ32(dsp_cti_sta, DSP_CTI + CTICONTROL);
742
743 return ia_usip_cti_sta && dsp_cti_sta;
744}
745
746
747/*************************************************************************
748* FUNCTION
749* ECT_DumpCallback
750*
751* DESCRIPTION
752* ECT callback for register dump, it turns on the dbg apb clock
753*
754* PARAMETERS
755*
756*
757* RETURNS
758*
759*
760*************************************************************************/
761kal_bool ECT_DumpCallback(void)
762{
763 // todo: uncomment the following code once ELBRUS TOPSM API is ready
764 ECT_Enable_DbgSys_Clock();
765
766 return KAL_TRUE;
767}
768
769
770
771
772/*************************************************************************
773* FUNCTION
774* ECT_GetMDTriggerOut
775*
776* DESCRIPTION
777*
778*
779* PARAMETERS
780*
781*
782* RETURNS
783*
784*
785*************************************************************************/
786kal_uint32 ECT_GetMDTriggerOut(void)
787{
788 kal_uint32 trigger_out;
789
790 REG_READ32(trigger_out, IA_USIP_CTI + CTITRIGOUTSTATUS);
791
792 return trigger_out;
793}
794
795/*************************************************************************
796* FUNCTION
797* ECT_GetDSPTriggerOut
798*
799* DESCRIPTION
800*
801*
802* PARAMETERS
803*
804*
805* RETURNS
806*
807*
808*************************************************************************/
809kal_uint32 ECT_GetDSPTriggerOut(void)
810{
811 kal_uint32 trigger_out;
812
813 REG_READ32(trigger_out, DSP_CTI + CTITRIGOUTSTATUS);
814
815 return trigger_out;
816}
817
818
819/*************************************************************************
820* FUNCTION
821* ECT_GetMDTriggerIn
822*
823* DESCRIPTION
824*
825*
826* PARAMETERS
827*
828*
829* RETURNS
830*
831*
832*************************************************************************/
833kal_uint32 ECT_GetMDTriggerIn(void)
834{
835 kal_uint32 trigger_in;
836
837 REG_READ32(trigger_in, IA_USIP_CTI + CTITRIGINSTATUS);
838
839 return trigger_in;
840}
841
842/*************************************************************************
843* FUNCTION
844* ECT_GetDSPTriggerIn
845*
846* DESCRIPTION
847*
848*
849* PARAMETERS
850*
851*
852* RETURNS
853*
854*
855*************************************************************************/
856kal_uint32 ECT_GetDSPTriggerIn(void)
857{
858 kal_uint32 trigger_in;
859
860 REG_READ32(trigger_in, DSP_CTI + CTITRIGINSTATUS);
861
862 return trigger_in;
863}
864
865/*************************************************************************
866* FUNCTION
867* ECT_TrgAck
868*
869* DESCRIPTION
870* ECT Trigger Ack
871*
872* PARAMETERS
873* kal_uint32 src: trigger in status
874*
875* RETURNS
876*
877*
878*************************************************************************/
879void ECT_TrgAck(kal_uint32 src)
880{
881 volatile kal_uint32 event_addr;
882
883 if((src & ECT_SRC_IA) == ECT_SRC_IA)
884 {
885 event_addr = IA_TRIGGER_CTI_EVENT;
886 REG_WRITE32(event_addr, 0);
887 }
888 if((src & ECT_SRC_USIP0_0) == ECT_SRC_USIP0_0)
889 {
890 event_addr = USIP0_TRIGGER_CTI_EVENT;
891 REG_WRITE32(event_addr, 0);
892 }
893 if((src & ECT_SRC_USIP0_1) == ECT_SRC_USIP0_1)
894 {
895 event_addr = USIP1_TRIGGER_CTI_EVENT;
896 REG_WRITE32(event_addr, 0);
897 }
898 if((src & ECT_SRC_USIP1_0) == ECT_SRC_USIP1_0)
899 {
900 event_addr = USIP2_TRIGGER_CTI_EVENT;
901 REG_WRITE32(event_addr, 0);
902 }
903 if((src & ECT_SRC_USIP1_1) == ECT_SRC_USIP1_1)
904 {
905 event_addr = USIP3_TRIGGER_CTI_EVENT;
906 REG_WRITE32(event_addr, 0);
907 }
908
909
910#if (defined (__MD97__) || defined (__MD97P__) )
911
912 if((src & ECT_SRC_SCQ0_0) == ECT_SRC_SCQ0_0)
913 {
914 event_addr = SCQ0_TRIGGER_CTI_EVENT;
915 REG_WRITE32(event_addr, 0);
916 }
917
918 if((src & ECT_SRC_SCQ0_1) == ECT_SRC_SCQ0_1)
919 {
920 event_addr = SCQ1_TRIGGER_CTI_EVENT;
921 REG_WRITE32(event_addr, 0);
922 }
923
924 if((src & ECT_SRC_SCQ1_0) == ECT_SRC_SCQ1_0)
925 {
926 event_addr = SCQ2_TRIGGER_CTI_EVENT;
927 REG_WRITE32(event_addr, 0);
928 }
929
930 if((src & ECT_SRC_SCQ1_1) == ECT_SRC_SCQ1_1)
931 {
932 event_addr = SCQ3_TRIGGER_CTI_EVENT;
933 REG_WRITE32(event_addr, 0);
934 }
935
936 if((src & ECT_SRC_MCORE0) != 0)
937 {
938 event_addr = MCORE0_TRIGGER_CTI_EVENT;
939 REG_WRITE32(event_addr, 0);
940 }
941
942 if((src & ECT_SRC_MCORE1) != 0)
943 {
944 event_addr = MCORE1_TRIGGER_CTI_EVENT;
945 REG_WRITE32(event_addr, 0);
946 }
947
948 if((src & ECT_SRC_VCORE0) != 0)
949 {
950 event_addr = VCORE0_TRIGGER_CTI_EVENT;
951 REG_WRITE32(event_addr, 0);
952 }
953
954
955#else
956
957
958 if((src & ECT_SRC_SCQ0) == ECT_SRC_SCQ0)
959 {
960 event_addr = SCQ0_TRIGGER_CTI_EVENT;
961 REG_WRITE32(event_addr, 0);
962 }
963 if((src & ECT_SRC_SCQ1) == ECT_SRC_SCQ1)
964 {
965 event_addr = SCQ1_TRIGGER_CTI_EVENT;
966 REG_WRITE32(event_addr, 0);
967 }
968
969#endif // if defined (__MD97__)
970
971
972 REG_WRITE32(event_addr, 0);
973 MO_Sync();
974 REG_WRITE32(IA_USIP_CTI+CTIINTACK, (IA_TRIGGEROUT_MASK+USIP_TRIGGEROUT_MASK));
975 REG_WRITE32(DSP_CTI+CTIINTACK, (RAKE_TRIGGEROUT_MASK+SCQ_TRIGGEROUT_MASK));
976 MO_Sync();
977}
978
979/*************************************************************************
980* FUNCTION
981* ECT_DisableRMPUTriggerOut
982*
983* DESCRIPTION
984* Disable RMPU channel trigger out
985*
986* PARAMETERS
987*
988*
989* RETURNS
990*
991*
992*************************************************************************/
993void ECT_DisableRMPUTriggerOut(void)
994{
995 REG_WRITE32(IA_USIP_CTI + CTIOUTEN3, CH_EXP);
996 REG_WRITE32(IA_USIP_CTI + CTIOUTEN7, CH_EXP);
997 MO_Sync();
998
999 REG_WRITE32(IA_USIP_CTI+CTIINTACK, (IA_TRIGGEROUT_MASK+USIP_TRIGGEROUT_MASK));
1000 REG_WRITE32(DSP_CTI+CTIINTACK, (RAKE_TRIGGEROUT_MASK+SCQ_TRIGGEROUT_MASK));
1001 MO_Sync();
1002}
1003