xref: /utopia/UTPA2-700.0.x/modules/dmx/hal/M7621/tsp/halTSP.c (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi //<MStar Software>
2*53ee8cc1Swenshuai.xi //******************************************************************************
3*53ee8cc1Swenshuai.xi // MStar Software
4*53ee8cc1Swenshuai.xi // Copyright (c) 2010 - 2012 MStar Semiconductor, Inc. All rights reserved.
5*53ee8cc1Swenshuai.xi // All software, firmware and related documentation herein ("MStar Software") are
6*53ee8cc1Swenshuai.xi // intellectual property of MStar Semiconductor, Inc. ("MStar") and protected by
7*53ee8cc1Swenshuai.xi // law, including, but not limited to, copyright law and international treaties.
8*53ee8cc1Swenshuai.xi // Any use, modification, reproduction, retransmission, or republication of all
9*53ee8cc1Swenshuai.xi // or part of MStar Software is expressly prohibited, unless prior written
10*53ee8cc1Swenshuai.xi // permission has been granted by MStar.
11*53ee8cc1Swenshuai.xi //
12*53ee8cc1Swenshuai.xi // By accessing, browsing and/or using MStar Software, you acknowledge that you
13*53ee8cc1Swenshuai.xi // have read, understood, and agree, to be bound by below terms ("Terms") and to
14*53ee8cc1Swenshuai.xi // comply with all applicable laws and regulations:
15*53ee8cc1Swenshuai.xi //
16*53ee8cc1Swenshuai.xi // 1. MStar shall retain any and all right, ownership and interest to MStar
17*53ee8cc1Swenshuai.xi //    Software and any modification/derivatives thereof.
18*53ee8cc1Swenshuai.xi //    No right, ownership, or interest to MStar Software and any
19*53ee8cc1Swenshuai.xi //    modification/derivatives thereof is transferred to you under Terms.
20*53ee8cc1Swenshuai.xi //
21*53ee8cc1Swenshuai.xi // 2. You understand that MStar Software might include, incorporate or be
22*53ee8cc1Swenshuai.xi //    supplied together with third party`s software and the use of MStar
23*53ee8cc1Swenshuai.xi //    Software may require additional licenses from third parties.
24*53ee8cc1Swenshuai.xi //    Therefore, you hereby agree it is your sole responsibility to separately
25*53ee8cc1Swenshuai.xi //    obtain any and all third party right and license necessary for your use of
26*53ee8cc1Swenshuai.xi //    such third party`s software.
27*53ee8cc1Swenshuai.xi //
28*53ee8cc1Swenshuai.xi // 3. MStar Software and any modification/derivatives thereof shall be deemed as
29*53ee8cc1Swenshuai.xi //    MStar`s confidential information and you agree to keep MStar`s
30*53ee8cc1Swenshuai.xi //    confidential information in strictest confidence and not disclose to any
31*53ee8cc1Swenshuai.xi //    third party.
32*53ee8cc1Swenshuai.xi //
33*53ee8cc1Swenshuai.xi // 4. MStar Software is provided on an "AS IS" basis without warranties of any
34*53ee8cc1Swenshuai.xi //    kind. Any warranties are hereby expressly disclaimed by MStar, including
35*53ee8cc1Swenshuai.xi //    without limitation, any warranties of merchantability, non-infringement of
36*53ee8cc1Swenshuai.xi //    intellectual property rights, fitness for a particular purpose, error free
37*53ee8cc1Swenshuai.xi //    and in conformity with any international standard.  You agree to waive any
38*53ee8cc1Swenshuai.xi //    claim against MStar for any loss, damage, cost or expense that you may
39*53ee8cc1Swenshuai.xi //    incur related to your use of MStar Software.
40*53ee8cc1Swenshuai.xi //    In no event shall MStar be liable for any direct, indirect, incidental or
41*53ee8cc1Swenshuai.xi //    consequential damages, including without limitation, lost of profit or
42*53ee8cc1Swenshuai.xi //    revenues, lost or damage of data, and unauthorized system use.
43*53ee8cc1Swenshuai.xi //    You agree that this Section 4 shall still apply without being affected
44*53ee8cc1Swenshuai.xi //    even if MStar Software has been modified by MStar in accordance with your
45*53ee8cc1Swenshuai.xi //    request or instruction for your use, except otherwise agreed by both
46*53ee8cc1Swenshuai.xi //    parties in writing.
47*53ee8cc1Swenshuai.xi //
48*53ee8cc1Swenshuai.xi // 5. If requested, MStar may from time to time provide technical supports or
49*53ee8cc1Swenshuai.xi //    services in relation with MStar Software to you for your use of
50*53ee8cc1Swenshuai.xi //    MStar Software in conjunction with your or your customer`s product
51*53ee8cc1Swenshuai.xi //    ("Services").
52*53ee8cc1Swenshuai.xi //    You understand and agree that, except otherwise agreed by both parties in
53*53ee8cc1Swenshuai.xi //    writing, Services are provided on an "AS IS" basis and the warranty
54*53ee8cc1Swenshuai.xi //    disclaimer set forth in Section 4 above shall apply.
55*53ee8cc1Swenshuai.xi //
56*53ee8cc1Swenshuai.xi // 6. Nothing contained herein shall be construed as by implication, estoppels
57*53ee8cc1Swenshuai.xi //    or otherwise:
58*53ee8cc1Swenshuai.xi //    (a) conferring any license or right to use MStar name, trademark, service
59*53ee8cc1Swenshuai.xi //        mark, symbol or any other identification;
60*53ee8cc1Swenshuai.xi //    (b) obligating MStar or any of its affiliates to furnish any person,
61*53ee8cc1Swenshuai.xi //        including without limitation, you and your customers, any assistance
62*53ee8cc1Swenshuai.xi //        of any kind whatsoever, or any information; or
63*53ee8cc1Swenshuai.xi //    (c) conferring any license or right under any intellectual property right.
64*53ee8cc1Swenshuai.xi //
65*53ee8cc1Swenshuai.xi // 7. These terms shall be governed by and construed in accordance with the laws
66*53ee8cc1Swenshuai.xi //    of Taiwan, R.O.C., excluding its conflict of law rules.
67*53ee8cc1Swenshuai.xi //    Any and all dispute arising out hereof or related hereto shall be finally
68*53ee8cc1Swenshuai.xi //    settled by arbitration referred to the Chinese Arbitration Association,
69*53ee8cc1Swenshuai.xi //    Taipei in accordance with the ROC Arbitration Law and the Arbitration
70*53ee8cc1Swenshuai.xi //    Rules of the Association by three (3) arbitrators appointed in accordance
71*53ee8cc1Swenshuai.xi //    with the said Rules.
72*53ee8cc1Swenshuai.xi //    The place of arbitration shall be in Taipei, Taiwan and the language shall
73*53ee8cc1Swenshuai.xi //    be English.
74*53ee8cc1Swenshuai.xi //    The arbitration award shall be final and binding to both parties.
75*53ee8cc1Swenshuai.xi //
76*53ee8cc1Swenshuai.xi //******************************************************************************
77*53ee8cc1Swenshuai.xi //<MStar Software>
78*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
79*53ee8cc1Swenshuai.xi //
80*53ee8cc1Swenshuai.xi // Copyright (c) 2011-2013 MStar Semiconductor, Inc.
81*53ee8cc1Swenshuai.xi // All rights reserved.
82*53ee8cc1Swenshuai.xi //
83*53ee8cc1Swenshuai.xi // Unless otherwise stipulated in writing, any and all information contained
84*53ee8cc1Swenshuai.xi // herein regardless in any format shall remain the sole proprietary of
85*53ee8cc1Swenshuai.xi // MStar Semiconductor Inc. and be kept in strict confidence
86*53ee8cc1Swenshuai.xi // ("MStar Confidential Information") by the recipient.
87*53ee8cc1Swenshuai.xi // Any unauthorized act including without limitation unauthorized disclosure,
88*53ee8cc1Swenshuai.xi // copying, use, reproduction, sale, distribution, modification, disassembling,
89*53ee8cc1Swenshuai.xi // reverse engineering and compiling of the contents of MStar Confidential
90*53ee8cc1Swenshuai.xi // Information is unlawful and strictly prohibited. MStar hereby reserves the
91*53ee8cc1Swenshuai.xi // rights to any and all damages, losses, costs and expenses resulting therefrom.
92*53ee8cc1Swenshuai.xi //
93*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
94*53ee8cc1Swenshuai.xi 
95*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////////////////////////
96*53ee8cc1Swenshuai.xi // file   halTSP.c
97*53ee8cc1Swenshuai.xi // @brief  Transport Stream Processer (TSP) HAL
98*53ee8cc1Swenshuai.xi // @author MStar Semiconductor,Inc.
99*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////////////////////////
100*53ee8cc1Swenshuai.xi #include "halTSP.h"
101*53ee8cc1Swenshuai.xi #include "halCHIP.h"
102*53ee8cc1Swenshuai.xi 
103*53ee8cc1Swenshuai.xi #ifdef  CONFIG_MSTAR_CLKM
104*53ee8cc1Swenshuai.xi #include "drvCLKM.h"
105*53ee8cc1Swenshuai.xi #endif //CONFIG_MSTAR_CLKM
106*53ee8cc1Swenshuai.xi 
107*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
108*53ee8cc1Swenshuai.xi //  Driver Compiler Option
109*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
110*53ee8cc1Swenshuai.xi #define TSP_HAL_REG_SAFE_MODE       1UL                                 // Register protection access between 1 task and 1+ ISR
111*53ee8cc1Swenshuai.xi 
112*53ee8cc1Swenshuai.xi //[HWBUG]
113*53ee8cc1Swenshuai.xi #define MULTI_ACCESS_SW_PATCH       1UL                                 // It's still risk becuase some registers like readaddr will
114*53ee8cc1Swenshuai.xi 
115*53ee8cc1Swenshuai.xi // @FIXME: remove the test later
116*53ee8cc1Swenshuai.xi #define LINUX_TEST                  0UL
117*53ee8cc1Swenshuai.xi                                                                         // cause overflow before patching to correct value.
118*53ee8cc1Swenshuai.xi #define MIU_BUS                     4UL
119*53ee8cc1Swenshuai.xi 
120*53ee8cc1Swenshuai.xi #define VQ_PACKET_UNIT_LEN          208UL
121*53ee8cc1Swenshuai.xi 
122*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
123*53ee8cc1Swenshuai.xi //  TSP Hardware Abstraction Layer
124*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
125*53ee8cc1Swenshuai.xi static REG_Ctrl*       _TspCtrl   = NULL;
126*53ee8cc1Swenshuai.xi static REG_Ctrl2*      _TspCtrl2  = NULL;
127*53ee8cc1Swenshuai.xi static REG_Ctrl3*      _TspCtrl3  = NULL;
128*53ee8cc1Swenshuai.xi static REG_Ctrl4*      _TspCtrl4  = NULL;
129*53ee8cc1Swenshuai.xi static REG_Ctrl5*      _TspCtrl5  = NULL;
130*53ee8cc1Swenshuai.xi static REG_Ctrl6*      _TspCtrl6  = NULL;
131*53ee8cc1Swenshuai.xi 
132*53ee8cc1Swenshuai.xi static REG_TS_Sample*  _TspSample = NULL;
133*53ee8cc1Swenshuai.xi 
134*53ee8cc1Swenshuai.xi static MS_VIRT       _virtRegBase   = 0;
135*53ee8cc1Swenshuai.xi static MS_VIRT       _virtPMRegBase = 0;
136*53ee8cc1Swenshuai.xi 
137*53ee8cc1Swenshuai.xi static MS_U32        _u32KernelSTRMode = 0;
138*53ee8cc1Swenshuai.xi static MS_U32        _u32LibMode = 0;
139*53ee8cc1Swenshuai.xi 
140*53ee8cc1Swenshuai.xi extern MS_BOOL      _bIsHK;
141*53ee8cc1Swenshuai.xi static MS_S32       _s32HALTSPMutexId = -1;
142*53ee8cc1Swenshuai.xi 
143*53ee8cc1Swenshuai.xi static MS_BOOL      _bTsPadUsed[4] = {FALSE, FALSE, FALSE, FALSE};
144*53ee8cc1Swenshuai.xi static MS_U16       _u16TsPadPE[4] = {0,0,0,0};
145*53ee8cc1Swenshuai.xi 
146*53ee8cc1Swenshuai.xi static MS_PHY       _phyOrLoadMiuOffset = 0;
147*53ee8cc1Swenshuai.xi static MS_PHY       _phySecBufMiuOffset = 0;
148*53ee8cc1Swenshuai.xi static MS_PHY       _phyFIBufMiuOffset  = 0;
149*53ee8cc1Swenshuai.xi static MS_PHY       _phyPVRBufMiuOffset[TSP_PVR_IF_NUM] = {[0 ... (TSP_PVR_IF_NUM-1)] = 0UL};
150*53ee8cc1Swenshuai.xi static MS_U16       _16MobfKey = 0;
151*53ee8cc1Swenshuai.xi 
152*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
153*53ee8cc1Swenshuai.xi static MS_U16       _u16ChipRegArray[128] = {[0 ... 127] = 0UL};
154*53ee8cc1Swenshuai.xi static MS_U16       _u16ClkgenRegArray[128] = {[0 ... 127] = 0UL};
155*53ee8cc1Swenshuai.xi static MS_U16       _u16Clkgen2RegArray[128] = {[0 ... 127] = 0UL};
156*53ee8cc1Swenshuai.xi static MS_U16       _u16TSP0RegArray[128] = {[0 ... 127] = 0UL};
157*53ee8cc1Swenshuai.xi static MS_U16       _u16TSP1RegArray[128] = {[0 ... 127] = 0UL};
158*53ee8cc1Swenshuai.xi static MS_U16       _u16TSP3RegArray[128] = {[0 ... 127] = 0UL};
159*53ee8cc1Swenshuai.xi static MS_U16       _u16TSP5RegArray[128] = {[0 ... 127] = 0UL};
160*53ee8cc1Swenshuai.xi #endif //MSOS_TYPE_LINUX_KERNEL
161*53ee8cc1Swenshuai.xi 
162*53ee8cc1Swenshuai.xi //[NOTE] Jerry
163*53ee8cc1Swenshuai.xi // Some register has write order, for example, writing PCR_L will disable PCR counter
164*53ee8cc1Swenshuai.xi // writing PCR_M trigger nothing, writing PCR_H will enable PCR counter
165*53ee8cc1Swenshuai.xi #define _HAL_REG32_W(reg, value)    do { (reg)->L = ((value) & 0x0000FFFFUL);                          \
166*53ee8cc1Swenshuai.xi                                     (reg)->H = ((value) >> 16UL); } while(0)
167*53ee8cc1Swenshuai.xi 
168*53ee8cc1Swenshuai.xi #define _HAL_REG32L_W(reg, value)   (reg)->data = ((value) & 0x0000FFFFUL);
169*53ee8cc1Swenshuai.xi 
170*53ee8cc1Swenshuai.xi #define _HAL_REG16_W(reg, value)    (reg)->u16data = (value);
171*53ee8cc1Swenshuai.xi 
172*53ee8cc1Swenshuai.xi #define _HAL_HALTSP_ENTRY()         if((_u32KernelSTRMode == 0) && (_s32HALTSPMutexId == -1)){         \
173*53ee8cc1Swenshuai.xi                                             _s32HALTSPMutexId = MsOS_CreateMutex(E_MSOS_FIFO, "HALTSP_Mutex", MSOS_PROCESS_SHARED); }
174*53ee8cc1Swenshuai.xi 
175*53ee8cc1Swenshuai.xi #define _HAL_HALTSP_EXIT()          if((_u32KernelSTRMode == 0) && (_s32HALTSPMutexId != -1)){ \
176*53ee8cc1Swenshuai.xi                                             MsOS_DeleteMutex(_s32HALTSPMutexId);    _s32HALTSPMutexId = -1; }
177*53ee8cc1Swenshuai.xi 
178*53ee8cc1Swenshuai.xi #define _HAL_HALTSP_LOCK()              if(_u32KernelSTRMode == 0) {  MsOS_ObtainMutex(_s32HALTSPMutexId, MSOS_WAIT_FOREVER);}
179*53ee8cc1Swenshuai.xi #define _HAL_HALTSP_UNLOCK()            if(_u32KernelSTRMode == 0) {  MsOS_ReleaseMutex(_s32HALTSPMutexId); }
180*53ee8cc1Swenshuai.xi 
181*53ee8cc1Swenshuai.xi #define _HAL_TSP_PIDFLT(EngId, FltId)     ((FltId < TSP_PIDFLT_NUM) ? &(_TspPid[EngId].Flt[FltId]) : &(_TspPid_Ext[EngId].Flt[FltId-TSP_PIDFLT_NUM]))
182*53ee8cc1Swenshuai.xi #define _HAL_TSP_PIDFLT_H(EngId, FltId)   ((FltId < TSP_PIDFLT_NUM) ? &(_TspPid_H[EngId].Flt[FltId]) : &(_TspPid_Ext_H[EngId].Flt[FltId-TSP_PIDFLT_NUM]))
183*53ee8cc1Swenshuai.xi 
184*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
185*53ee8cc1Swenshuai.xi //  Macro of bit operations
186*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
187*53ee8cc1Swenshuai.xi #define HAS_FLAG(flag, bit)        ((flag) & (bit))
188*53ee8cc1Swenshuai.xi #define SET_FLAG(flag, bit)        ((flag)|= (bit))
189*53ee8cc1Swenshuai.xi #define RESET_FLAG(flag, bit)      ((flag)&= (~(bit)))
190*53ee8cc1Swenshuai.xi #define SET_FLAG1(flag, bit)       ((flag)|  (bit))
191*53ee8cc1Swenshuai.xi #define RESET_FLAG1(flag, bit)     ((flag)&  (~(bit)))
192*53ee8cc1Swenshuai.xi 
193*53ee8cc1Swenshuai.xi //#define MASK(x)                    (((1<<(x##_BITS))-1) << x##_SHIFT)
194*53ee8cc1Swenshuai.xi //#define BIT(x)                     (1<<(x))
195*53ee8cc1Swenshuai.xi //#define BMASK(bits)                (BIT(((1)?bits)+1)-BIT(((0)?bits)))
196*53ee8cc1Swenshuai.xi //#define BMASK_L(bits)              (BMASK(bits)&0xFFFF)
197*53ee8cc1Swenshuai.xi //#define BMASK_H(bits)              (BMASK(bits)>>16)
198*53ee8cc1Swenshuai.xi //#define BITS(bits,value)           ((BIT(((1)?bits)+1)-BIT(((0)?bits))) & (value<<((0)?bits)))
199*53ee8cc1Swenshuai.xi 
200*53ee8cc1Swenshuai.xi #define TSP_TSP0_REG(addr)          (*((volatile MS_U16*)(_virtRegBase + REG_CTRL_BASE + ((addr)<<2UL))))
201*53ee8cc1Swenshuai.xi #define TSP_TSP1_REG(addr)          (*((volatile MS_U16*)(_virtRegBase + 0x2C00UL + ((addr)<<2UL))))
202*53ee8cc1Swenshuai.xi #define TSP_TSP3_REG(addr)          (*((volatile MS_U16*)(_virtRegBase + REG_CTRL_TSP3 + ((addr)<<2UL))))
203*53ee8cc1Swenshuai.xi #define TSP_TSP5_REG(addr)          (*((volatile MS_U16*)(_virtRegBase + REG_CTRL_TSP5 + ((addr)<<2UL))))
204*53ee8cc1Swenshuai.xi 
205*53ee8cc1Swenshuai.xi 
206*53ee8cc1Swenshuai.xi #define PMTOP_REG(addr)             (*((volatile MS_U16*)(_virtPMRegBase + 0x3c00UL + ((addr)<<2UL))))
207*53ee8cc1Swenshuai.xi     #define REG_PMTOP_CHIPID                            0x00UL
208*53ee8cc1Swenshuai.xi         #define REG_PMTOP_CHIPID_MASK                   0xFFFFUL
209*53ee8cc1Swenshuai.xi     #define REG_PMTOP_CHIPVERSION                       0x01UL
210*53ee8cc1Swenshuai.xi         #define REG_PMTOP_CHIP_VERSION_MASK             0x00FFUL
211*53ee8cc1Swenshuai.xi         #define REG_PMTOP_CHIP_REVISION_MASK            0xFF00UL
212*53ee8cc1Swenshuai.xi         #define REG_PMTOP_CHIP_REVISION_SHIFT           8UL
213*53ee8cc1Swenshuai.xi 
214*53ee8cc1Swenshuai.xi #define TSP_INT_REG(addr)           (*((volatile MS_U16*)(_virtRegBase + 0x3200UL + ((addr)<<2UL))))
215*53ee8cc1Swenshuai.xi 
216*53ee8cc1Swenshuai.xi #define TSP_CLKGEN0_REG(addr)       (*((volatile MS_U16*)(_virtRegBase + 0x1600UL + ((addr)<<2UL))))
217*53ee8cc1Swenshuai.xi     #define REG_CLKGEN0_DC0_SYTNTH              0x04UL
218*53ee8cc1Swenshuai.xi         #define REG_CLKGEN0_STC_CW_SEL          0x0002UL
219*53ee8cc1Swenshuai.xi         #define REG_CLKGEN0_STC_CW_EN           0x0004UL
220*53ee8cc1Swenshuai.xi         #define REG_CLKGEN0_STC1_CW_SEL         0x0200UL
221*53ee8cc1Swenshuai.xi         #define REG_CLKGEN0_STC1_CW_EN          0x0400UL
222*53ee8cc1Swenshuai.xi     #define REG_CLKGEN0_DC0_STC_CW_L            0x05UL
223*53ee8cc1Swenshuai.xi     #define REG_CLKGEN0_DC0_STC_CW_H            0x06UL
224*53ee8cc1Swenshuai.xi     #define REG_CLKGEN0_DC0_STC1_CW_L           0x07UL
225*53ee8cc1Swenshuai.xi     #define REG_CLKGEN0_DC0_STC1_CW_H           0x08UL
226*53ee8cc1Swenshuai.xi 
227*53ee8cc1Swenshuai.xi     #define REG_CLKGEN0_TSN_CLK                 0x28UL
228*53ee8cc1Swenshuai.xi         #define REG_CLKGEN0_TSN_CLK_MASK        0x1FUL
229*53ee8cc1Swenshuai.xi         #define REG_CLKGEN0_TSN_CLK_DEMOD       0x1CUL
230*53ee8cc1Swenshuai.xi         #define REG_CLKGEN0_TSN_CLK_TS0_SHIFT   0UL
231*53ee8cc1Swenshuai.xi         #define REG_CLKGEN0_TSN_CLK_TS1_SHIFT   8UL
232*53ee8cc1Swenshuai.xi         //#define TSP_CLK_TS0                        0
233*53ee8cc1Swenshuai.xi         //#define TSP_CLK_TS1                        1
234*53ee8cc1Swenshuai.xi         //#define TSP_CLK_TS2                        2
235*53ee8cc1Swenshuai.xi         //#define TSP_CLK_TS3                        3
236*53ee8cc1Swenshuai.xi         //#define TSP_CLK_TS4                        4
237*53ee8cc1Swenshuai.xi         //#define TSP_CLK_TSO_OUT                6
238*53ee8cc1Swenshuai.xi         //#define TSP_CLK_INDEMOD                7
239*53ee8cc1Swenshuai.xi         // bit[4:0] -> ts0  -> 0: disable clock
240*53ee8cc1Swenshuai.xi         //                     1: invert clock
241*53ee8cc1Swenshuai.xi         //                     bit [4:2] -> 0: TS0
242*53ee8cc1Swenshuai.xi         //                                  1: TS1
243*53ee8cc1Swenshuai.xi         //                                  2: TS2
244*53ee8cc1Swenshuai.xi         //                                  3: TS3
245*53ee8cc1Swenshuai.xi         //                                  4: TS4
246*53ee8cc1Swenshuai.xi         //                                  6: TSOOUT
247*53ee8cc1Swenshuai.xi         //                                  7: Internal Demmod
248*53ee8cc1Swenshuai.xi         // bit[12:8] -> ts1 -> 0: disable clock
249*53ee8cc1Swenshuai.xi         //                     1: invert clock
250*53ee8cc1Swenshuai.xi         //                     bit [4:2] -> 0: TS0
251*53ee8cc1Swenshuai.xi         //                                  1: TS1
252*53ee8cc1Swenshuai.xi         //                                  2: TS2
253*53ee8cc1Swenshuai.xi         //                                  3: TS3
254*53ee8cc1Swenshuai.xi         //                                  4: TS4
255*53ee8cc1Swenshuai.xi         //                                  6: TSOOUT
256*53ee8cc1Swenshuai.xi         //                                  7: Internal Demmod
257*53ee8cc1Swenshuai.xi     #define REG_CLKGEN0_TSN_CLK2                0x29UL
258*53ee8cc1Swenshuai.xi         #define REG_CLKGEN0_TSN_CLK_TS2_SHIFT   0UL
259*53ee8cc1Swenshuai.xi         // bit[4:0] -> ts2  -> 0: disable clock
260*53ee8cc1Swenshuai.xi         //                     1: invert clock
261*53ee8cc1Swenshuai.xi         //                     bit [4:2] -> 0: TS0
262*53ee8cc1Swenshuai.xi         //                                  1: TS1
263*53ee8cc1Swenshuai.xi         //                                  2: TS2
264*53ee8cc1Swenshuai.xi         //                                  3: TS3
265*53ee8cc1Swenshuai.xi         //                                  4: TS4
266*53ee8cc1Swenshuai.xi         //                                  6: TSOOUT
267*53ee8cc1Swenshuai.xi         //                                  7: Internal Demmod
268*53ee8cc1Swenshuai.xi #define TSP_CLKGEN2_REG(addr)       (*((volatile MS_U16*)(_virtRegBase + 0x1400UL + ((addr)<<2UL))))
269*53ee8cc1Swenshuai.xi     #define REG_CLKGEN2_TSN_CLKFI               0x0DUL
270*53ee8cc1Swenshuai.xi         #define REG_CLKGEN2_TSN_CLK_TSFI_SHIFT  8UL
271*53ee8cc1Swenshuai.xi         // bit[12:8] -> tsfi  -> 0: disable clock
272*53ee8cc1Swenshuai.xi         //                     1: invert clock
273*53ee8cc1Swenshuai.xi         //                     bit [4:2] -> 0: TS0
274*53ee8cc1Swenshuai.xi         //                                     1: TS1
275*53ee8cc1Swenshuai.xi         //                                     2: TS2
276*53ee8cc1Swenshuai.xi         //                                     3: TS3
277*53ee8cc1Swenshuai.xi         //                                     4: TS4
278*53ee8cc1Swenshuai.xi         //                                     6: TSOOUT
279*53ee8cc1Swenshuai.xi         //                                     7: Internal Demmod
280*53ee8cc1Swenshuai.xi     #define REG_CLKGEN2_TSN_CLKTS3              0x11UL       //Not use
281*53ee8cc1Swenshuai.xi         #define REG_CLKGEN2_TSN_CLKTS3_SHIFT    0
282*53ee8cc1Swenshuai.xi         #define REG_CLKGEN2_TSN_CLKTS3_MASK     0x1FUL
283*53ee8cc1Swenshuai.xi         // bit[4:0] ->       0: disable clock
284*53ee8cc1Swenshuai.xi         //                      1: invert clock
285*53ee8cc1Swenshuai.xi         //                      bit [4:2] -> 0: TS0
286*53ee8cc1Swenshuai.xi         //                                      1: TS1
287*53ee8cc1Swenshuai.xi         //                                      2: TS2
288*53ee8cc1Swenshuai.xi         //                                      3: TS3
289*53ee8cc1Swenshuai.xi         //                                      4: TS4
290*53ee8cc1Swenshuai.xi         //                                      6: TSOOUT
291*53ee8cc1Swenshuai.xi     #define REG_CLKGEN2_TSN_TS4                 0x18UL      //s2p0, ts4 mux clk
292*53ee8cc1Swenshuai.xi         #define REG_CLKGEN2_TSN_TS4_SHIFT       0UL         //s2p1, ts5 mux clk
293*53ee8cc1Swenshuai.xi         // bit[4:0] ->       0: disable clock
294*53ee8cc1Swenshuai.xi         //                      1: invert clock
295*53ee8cc1Swenshuai.xi         //                      bit [4:2] -> 0: TS0
296*53ee8cc1Swenshuai.xi         //                                      1: TS1
297*53ee8cc1Swenshuai.xi         //                                      2: TS2
298*53ee8cc1Swenshuai.xi         //                                      3: TS3
299*53ee8cc1Swenshuai.xi         //                                      4: TS4
300*53ee8cc1Swenshuai.xi         #define REG_CLKGEN2_TSN_TS5_SHIFT       8UL
301*53ee8cc1Swenshuai.xi         // bit[12:8] ->       0: disable clock
302*53ee8cc1Swenshuai.xi         //                      1: invert clock
303*53ee8cc1Swenshuai.xi         //                      bit [4:2] -> 0: TS0
304*53ee8cc1Swenshuai.xi         //                                      1: TS1
305*53ee8cc1Swenshuai.xi         //                                      2: TS2
306*53ee8cc1Swenshuai.xi         //                                      3: TS3
307*53ee8cc1Swenshuai.xi         //                                      4: TS4
308*53ee8cc1Swenshuai.xi     #define REG_CLKGEN2_DC0_SYNTH               0x30UL
309*53ee8cc1Swenshuai.xi         #define REG_CLKGEN2_STC2_CW_SEL         0x0002UL
310*53ee8cc1Swenshuai.xi         #define REG_CLKGEN2_STC2_CW_EN          0x0004UL
311*53ee8cc1Swenshuai.xi         #define REG_CLKGEN2_STC3_CW_SEL         0x0200UL
312*53ee8cc1Swenshuai.xi         #define REG_CLKGEN2_STC3_CW_EN          0x0400UL
313*53ee8cc1Swenshuai.xi     #define REG_CLKGEN2_DC0_STC2_CW_L           0x31UL
314*53ee8cc1Swenshuai.xi     #define REG_CLKGEN2_DC0_STC2_CW_H           0x32UL
315*53ee8cc1Swenshuai.xi     #define REG_CLKGEN2_DC0_STC3_CW_L           0x33UL
316*53ee8cc1Swenshuai.xi     #define REG_CLKGEN2_DC0_STC3_CW_H           0x34UL
317*53ee8cc1Swenshuai.xi 
318*53ee8cc1Swenshuai.xi #define TSP_TOP_REG(addr)           (*((volatile MS_U16*)(_virtRegBase + 0x3c00UL + ((addr)<<2UL))))
319*53ee8cc1Swenshuai.xi     #define REG_TOP_TS0_PE                      0x0EUL
320*53ee8cc1Swenshuai.xi         #define REG_TOP_TS0_PE_MASK                         0x07FFUL
321*53ee8cc1Swenshuai.xi     #define REG_TOP_TS1_PE                      0x06UL
322*53ee8cc1Swenshuai.xi         #define REG_TOP_TS1_PE_MASK                         0x07FFUL
323*53ee8cc1Swenshuai.xi 
324*53ee8cc1Swenshuai.xi     #define REG_TOP_TSO_MUX                     0x10UL
325*53ee8cc1Swenshuai.xi         #define REG_TOP_TSO_EVDMODE_MASK                    0x0600UL
326*53ee8cc1Swenshuai.xi             #define REG_TOP_TS3_OUT_MODE_TSO                0x0400UL
327*53ee8cc1Swenshuai.xi     #define REG_TOP_TS2_PE                      0x36UL
328*53ee8cc1Swenshuai.xi         #define REG_TOP_TS2_PE_MASK                         0x07FFUL
329*53ee8cc1Swenshuai.xi     #define REG_TOP_TS3_PE                      0x37UL
330*53ee8cc1Swenshuai.xi         #define REG_TOP_TS3_PE_MASK                         0x07FFUL
331*53ee8cc1Swenshuai.xi 
332*53ee8cc1Swenshuai.xi     #define REG_TOP_TS4_CFG                     0x40UL
333*53ee8cc1Swenshuai.xi         #define REG_TOP_TS_OUT_MODE_MASK                    0x0070UL       //1: internal demod out
334*53ee8cc1Swenshuai.xi             #define REG_TOP_TS1_OUT_MODE_TSO                0x0030UL
335*53ee8cc1Swenshuai.xi             #define REG_TOP_TS1_OUT_MODE_Ser2Par            0x0040UL
336*53ee8cc1Swenshuai.xi             #define REG_TOP_TS1_OUT_MODE_Ser2Par1           0x0050UL
337*53ee8cc1Swenshuai.xi 
338*53ee8cc1Swenshuai.xi         #define REG_TOP_TS4_CFG_MASK                        0x0E00UL
339*53ee8cc1Swenshuai.xi         #define REG_TOP_TS4_CFG_SHIFT                       9UL
340*53ee8cc1Swenshuai.xi         //bit [11:9] -> 0: Disable
341*53ee8cc1Swenshuai.xi         //                    1: serial in ,
342*53ee8cc1Swenshuai.xi     #define REG_TOP_TSCONFIG                    0x57UL
343*53ee8cc1Swenshuai.xi         #define REG_TOP_TS0CFG_SHIFT                        8UL
344*53ee8cc1Swenshuai.xi         #define REG_TOP_TS_TS0_CFG_MASK                     0x0700UL
345*53ee8cc1Swenshuai.xi             #define REG_TOP_TS_TS0_PARALL_IN                1UL
346*53ee8cc1Swenshuai.xi             #define REG_TOP_TS_TS0_SERIAL_IN                2UL  //3: mspi, 4: 3wire
347*53ee8cc1Swenshuai.xi             #define REG_TOP_TS_TS0_3WIRE_IN                 4UL  //3: mspi, 4: 3wire
348*53ee8cc1Swenshuai.xi 
349*53ee8cc1Swenshuai.xi         #define REG_TOP_TS1CFG_SHIFT                        11UL
350*53ee8cc1Swenshuai.xi         #define REG_TOP_TS_TS1_CFG_MASK                     0x3800UL
351*53ee8cc1Swenshuai.xi             #define REG_TOP_TS_TS1_PARALL_IN                1UL
352*53ee8cc1Swenshuai.xi             #define REG_TOP_TS_TS1_PARALL_OUT               2UL
353*53ee8cc1Swenshuai.xi             #define REG_TOP_TS_TS1_SERIAL_IN                3UL  //4: 3wire, 5 mspi
354*53ee8cc1Swenshuai.xi             #define REG_TOP_TS_TS1_3WIRE_IN                 4UL
355*53ee8cc1Swenshuai.xi 
356*53ee8cc1Swenshuai.xi         #define REG_TOP_TSCFG_DISABLE_PAD                   0UL
357*53ee8cc1Swenshuai.xi         // bit[10:8] ->    0: Disable
358*53ee8cc1Swenshuai.xi         //                     1: use all PAD_TS0 pads
359*53ee8cc1Swenshuai.xi         //                     2: e PAD_TS0_VLD, PAD_TS0_SYNC, PAD_TS0_CLK and PAD_TS0_D0 pads
360*53ee8cc1Swenshuai.xi         //                     3: mspi mode
361*53ee8cc1Swenshuai.xi         //                     4: 3 wire mode
362*53ee8cc1Swenshuai.xi         // bit[13:11] ->  0: Disable
363*53ee8cc1Swenshuai.xi         //                     1: TS1 use all PAD_TS1 pads
364*53ee8cc1Swenshuai.xi         //                     2: TS1 out use all PAD_TS1 pads from demod
365*53ee8cc1Swenshuai.xi         //                     3: TS1 use all PAD_TS1_VLD, PAD_TS1_SYNC, PAD_TS1_CLK and PAD_TS1_D0 pads
366*53ee8cc1Swenshuai.xi         //                     4: 3 wire mode
367*53ee8cc1Swenshuai.xi         //                     5: mspi
368*53ee8cc1Swenshuai.xi     #define REG_TOP_TS2CONFIG                    0x5AUL
369*53ee8cc1Swenshuai.xi         #define REG_TOP_TS2CFG_SHIFT                        12UL
370*53ee8cc1Swenshuai.xi         #define REG_TOP_TS_TS2_CFG_MASK                     0x7000UL
371*53ee8cc1Swenshuai.xi             #define REG_TOP_TS_TS2_SERIAL_IN                1UL
372*53ee8cc1Swenshuai.xi             #define REG_TOP_TS_TS2_PARALL_IN                2UL
373*53ee8cc1Swenshuai.xi         // bit[14:12] ->    0: Disable
374*53ee8cc1Swenshuai.xi         //                     1: serial in
375*53ee8cc1Swenshuai.xi         //                     2: parallal
376*53ee8cc1Swenshuai.xi         //                     3: m_card_spi
377*53ee8cc1Swenshuai.xi         //                     4: serial in @ PAD_TS1_D4~D7, share with ts1 serial in mode
378*53ee8cc1Swenshuai.xi 
379*53ee8cc1Swenshuai.xi     #define REG_TOP_TS_TS3_CFG                  0x67UL
380*53ee8cc1Swenshuai.xi         #define REG_TOP_TS3CFG_MASK                         0xF000UL
381*53ee8cc1Swenshuai.xi         #define REG_TOP_TS3CFG_SHIFT                        12UL
382*53ee8cc1Swenshuai.xi         #define REG_TOP_TS3_OUT_MODE_DMD                    0x5000UL
383*53ee8cc1Swenshuai.xi         #define REG_TOP_TS3_OUT_MODE_Ser2Par                0x7000UL
384*53ee8cc1Swenshuai.xi         #define REG_TOP_TS3_OUT_MODE_Ser2Par1               0x8000UL
385*53ee8cc1Swenshuai.xi         #define REG_TOP_TS_TS3_3WIRE_IN                     6UL
386*53ee8cc1Swenshuai.xi         // bit[15:12] ->  0: Disable
387*53ee8cc1Swenshuai.xi         //                     1: TS3 Serial in
388*53ee8cc1Swenshuai.xi         //                     2: TS3 Parallel In
389*53ee8cc1Swenshuai.xi         //                     3: mspi out
390*53ee8cc1Swenshuai.xi         //                     5: TS3 Demod Out
391*53ee8cc1Swenshuai.xi         //                     6: TS33 wire mode
392*53ee8cc1Swenshuai.xi         //                     7: TS3 s2p Out
393*53ee8cc1Swenshuai.xi         //                     8: TS3 s2p1 Out
394*53ee8cc1Swenshuai.xi         //                     9: serial in @ PAD_TS2_D0/VLD/SYNC/CLK, use ts2 serial pad
395*53ee8cc1Swenshuai.xi #define TSP_TSO0_REG(addr)           (*((volatile MS_U16*)(_virtRegBase + 0x27400UL + ((addr)<<2UL))))
396*53ee8cc1Swenshuai.xi     #define REG_TSO0_CFG0                       0x1CUL
397*53ee8cc1Swenshuai.xi         #define REG_TSO0_CFG0_S2PCFG_MASK                   0x001FUL
398*53ee8cc1Swenshuai.xi         #define REG_TSO0_CFG0_S2PCFG_S2P_EN                 0x0001UL
399*53ee8cc1Swenshuai.xi         #define REG_TSO0_CFG0_S2PCFG_S2P_TSSIN_C0           0x0002UL
400*53ee8cc1Swenshuai.xi         #define REG_TSO0_CFG0_S2PCFG_S2P_TSSIN_C1           0x0004UL
401*53ee8cc1Swenshuai.xi         #define REG_TSO0_CFG0_S2PCFG_S2P_3WIRE_MODE         0x0008UL
402*53ee8cc1Swenshuai.xi         #define REG_TSO0_CFG0_S2PCFG_S2P_BYPASS             0x0010UL
403*53ee8cc1Swenshuai.xi         #define REG_TSO0_CFG0_S2P0_CFG_SHIFT                0UL
404*53ee8cc1Swenshuai.xi         #define REG_TSO0_CFG0_S2P1_CFG_SHIFT                8UL
405*53ee8cc1Swenshuai.xi 
406*53ee8cc1Swenshuai.xi #define TSP_TS_SAMPLE_REG(addr)       (*((volatile MS_U16*)(_virtRegBase + 0x21400 + ((addr)<<2))))
407*53ee8cc1Swenshuai.xi     #define REG_TSO_OUT_CLK_SEL                 0x30UL
408*53ee8cc1Swenshuai.xi     #define REG_TSO_OUT_CLK_SEL_MASK                        3UL
409*53ee8cc1Swenshuai.xi     #define REG_TSO1_OUT_CLK_SEL_SHIFT                      4UL
410*53ee8cc1Swenshuai.xi         #define REG_TSO_OUT_TSO                             0x0000UL
411*53ee8cc1Swenshuai.xi         #define REG_TSO_OUT_S2P0                            0x0001UL
412*53ee8cc1Swenshuai.xi         #define REG_TSO_OUT_S2P1                            0x0002UL
413*53ee8cc1Swenshuai.xi 
414*53ee8cc1Swenshuai.xi 
415*53ee8cc1Swenshuai.xi #define ABS_DIFF(x1, x2)            (((x1) > (x2))? ((x1) - (x2)) : ((x2) - (x1)))
416*53ee8cc1Swenshuai.xi #define IsCover(_start1, _end1, _start2, _end2) (ABS_DIFF(_end1, _end2) < (((_end1) > (_end2))?((_end1)-(_start1)):((_end2)-(_start2))) )?TRUE:FALSE
417*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
418*53ee8cc1Swenshuai.xi //  Forward declaration
419*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
420*53ee8cc1Swenshuai.xi static void _HAL_TSP_FW_load(
421*53ee8cc1Swenshuai.xi     MS_PHY                   phyFwAddrPhys,
422*53ee8cc1Swenshuai.xi     MS_U32                     u32FwSize,
423*53ee8cc1Swenshuai.xi     MS_BOOL                    bFwDMA,
424*53ee8cc1Swenshuai.xi     MS_BOOL                    bIQmem,
425*53ee8cc1Swenshuai.xi     MS_BOOL                    bDQmem);
426*53ee8cc1Swenshuai.xi 
427*53ee8cc1Swenshuai.xi static void _HAL_TSP_tsif_select(MS_U8 u8_tsif);
428*53ee8cc1Swenshuai.xi // static void _HAL_TSP_SelPad(MS_U32 u32EngId, MS_U32 PadId);
429*53ee8cc1Swenshuai.xi 
430*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
431*53ee8cc1Swenshuai.xi //  Implementation
432*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
_delay(void)433*53ee8cc1Swenshuai.xi static void _delay(void)
434*53ee8cc1Swenshuai.xi {
435*53ee8cc1Swenshuai.xi     volatile MS_U32 i;
436*53ee8cc1Swenshuai.xi     for (i = 0; i< 0xFFFFUL; i++);
437*53ee8cc1Swenshuai.xi }
438*53ee8cc1Swenshuai.xi 
_HAL_REG32_R(REG32 * reg)439*53ee8cc1Swenshuai.xi static MS_U32 _HAL_REG32_R(REG32 *reg)
440*53ee8cc1Swenshuai.xi {
441*53ee8cc1Swenshuai.xi     MS_U32     value = 0UL;
442*53ee8cc1Swenshuai.xi     value  = (reg)->H << 16UL;
443*53ee8cc1Swenshuai.xi     value |= (reg)->L;
444*53ee8cc1Swenshuai.xi     return value;
445*53ee8cc1Swenshuai.xi }
446*53ee8cc1Swenshuai.xi 
_HAL_REG32L_R(REG32_L * reg)447*53ee8cc1Swenshuai.xi static MS_U16 _HAL_REG32L_R(REG32_L *reg)
448*53ee8cc1Swenshuai.xi {
449*53ee8cc1Swenshuai.xi     MS_U16     value;
450*53ee8cc1Swenshuai.xi     value = (reg)->data;
451*53ee8cc1Swenshuai.xi     return value;
452*53ee8cc1Swenshuai.xi }
453*53ee8cc1Swenshuai.xi 
_HAL_REG16_R(REG16 * reg)454*53ee8cc1Swenshuai.xi static MS_U16 _HAL_REG16_R(REG16 *reg)
455*53ee8cc1Swenshuai.xi {
456*53ee8cc1Swenshuai.xi     MS_U16     value;
457*53ee8cc1Swenshuai.xi     value = (reg)->u16data;
458*53ee8cc1Swenshuai.xi     return value;
459*53ee8cc1Swenshuai.xi }
460*53ee8cc1Swenshuai.xi 
_HAL_TSP_SECFLT(MS_U32 u32EngId,MS_U32 u32FltId)461*53ee8cc1Swenshuai.xi static REG_SecFlt* _HAL_TSP_SECFLT(MS_U32 u32EngId, MS_U32 u32FltId)
462*53ee8cc1Swenshuai.xi {
463*53ee8cc1Swenshuai.xi     if(u32FltId & 0x40UL)
464*53ee8cc1Swenshuai.xi         return (&(_TspSec2[u32EngId].Flt[u32FltId & 0x3FUL]));
465*53ee8cc1Swenshuai.xi     else
466*53ee8cc1Swenshuai.xi         return (&(_TspSec1[u32EngId].Flt[u32FltId]));
467*53ee8cc1Swenshuai.xi }
468*53ee8cc1Swenshuai.xi 
_HAL_TSP_MIU_OFFSET(MS_PHY Phyaddr)469*53ee8cc1Swenshuai.xi static MS_PHY _HAL_TSP_MIU_OFFSET(MS_PHY Phyaddr)
470*53ee8cc1Swenshuai.xi {
471*53ee8cc1Swenshuai.xi     #ifdef HAL_MIU2_BASE
472*53ee8cc1Swenshuai.xi     if(Phyaddr >= (MS_PHY)HAL_MIU2_BASE)
473*53ee8cc1Swenshuai.xi         return ((MS_PHY)HAL_MIU2_BASE & 0xFFFFFFFFUL);
474*53ee8cc1Swenshuai.xi     else
475*53ee8cc1Swenshuai.xi     #endif  //HAL_MIU2_BASE
476*53ee8cc1Swenshuai.xi     #ifdef HAL_MIU1_BASE
477*53ee8cc1Swenshuai.xi     if(Phyaddr >= (MS_PHY)HAL_MIU1_BASE)
478*53ee8cc1Swenshuai.xi         return ((MS_PHY)HAL_MIU1_BASE & 0xFFFFFFFFUL);
479*53ee8cc1Swenshuai.xi     else
480*53ee8cc1Swenshuai.xi     #endif //HAL_MIU1_BUS_BASE
481*53ee8cc1Swenshuai.xi         return ((MS_PHY)HAL_MIU0_BASE & 0xFFFFFFFFUL);
482*53ee8cc1Swenshuai.xi }
483*53ee8cc1Swenshuai.xi 
_HAL_TSP_tsif_select(MS_U8 u8_tsif)484*53ee8cc1Swenshuai.xi static void _HAL_TSP_tsif_select(MS_U8 u8_tsif)
485*53ee8cc1Swenshuai.xi {
486*53ee8cc1Swenshuai.xi     switch(u8_tsif)
487*53ee8cc1Swenshuai.xi     {
488*53ee8cc1Swenshuai.xi         default:
489*53ee8cc1Swenshuai.xi         case 0:
490*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
491*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_HW_CFG4_TSIF0_ENABLE));
492*53ee8cc1Swenshuai.xi             break;
493*53ee8cc1Swenshuai.xi         case 1:
494*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
495*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_HW_CFG4_TSIF1_ENABLE));
496*53ee8cc1Swenshuai.xi             break;
497*53ee8cc1Swenshuai.xi         case 2:
498*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].PVR2_Config,
499*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].PVR2_Config), TSP_TSIF2_ENABLE));
500*53ee8cc1Swenshuai.xi             break;
501*53ee8cc1Swenshuai.xi         case 3: //TS_FI
502*53ee8cc1Swenshuai.xi             _HAL_REG16_W(&_TspCtrl5[0].Ts_If_Fi_Cfg,
503*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG16_R(&_TspCtrl5[0].Ts_If_Fi_Cfg), TSP_FIIF_EN|TSP_FIIF_MUX_LIVE_PATH));
504*53ee8cc1Swenshuai.xi             break;
505*53ee8cc1Swenshuai.xi     }
506*53ee8cc1Swenshuai.xi }
507*53ee8cc1Swenshuai.xi 
508*53ee8cc1Swenshuai.xi #define REG16_T(addr)           (*((volatile MS_U16*)(addr)))
509*53ee8cc1Swenshuai.xi #define ADDR_INDR_CTRL          (_virtRegBase+ 0x2b20UL)
510*53ee8cc1Swenshuai.xi #define ADDR_INDR_ADDR0         (_virtRegBase+ 0x2b24UL)
511*53ee8cc1Swenshuai.xi #define ADDR_INDR_ADDR1         (_virtRegBase+ 0x2b28UL)
512*53ee8cc1Swenshuai.xi #define ADDR_INDR_WRITE0        (_virtRegBase+ 0x2b2cUL)
513*53ee8cc1Swenshuai.xi #define ADDR_INDR_WRITE1        (_virtRegBase+ 0x2b30UL)
514*53ee8cc1Swenshuai.xi #define ADDR_INDR_READ0         (_virtRegBase+ 0x2b34UL)
515*53ee8cc1Swenshuai.xi #define ADDR_INDR_READ1         (_virtRegBase+ 0x2b38UL)
516*53ee8cc1Swenshuai.xi 
517*53ee8cc1Swenshuai.xi #define ADDR_MOBF_FILEIN        (_virtRegBase+ 0x2a2cUL)
518*53ee8cc1Swenshuai.xi 
519*53ee8cc1Swenshuai.xi #if 0
520*53ee8cc1Swenshuai.xi #define XBYTE_1591              (_virtRegBase+ 0x2a0cUL)  // TsRec_Head21_Mid20
521*53ee8cc1Swenshuai.xi #define XBYTE_15A4              (_virtRegBase+ 0x2a10UL)  // TsRec_Mid21_Tail20
522*53ee8cc1Swenshuai.xi #define XBYTE_15A6              (_virtRegBase+ 0x2b48UL)  // TsRec_Mid
523*53ee8cc1Swenshuai.xi 
524*53ee8cc1Swenshuai.xi void HAL_TSP_HW_Lock_Init(void)
525*53ee8cc1Swenshuai.xi {
526*53ee8cc1Swenshuai.xi     REG16_T(XBYTE_1591) = 0;
527*53ee8cc1Swenshuai.xi     REG16_T(XBYTE_15A4) = 0;
528*53ee8cc1Swenshuai.xi     REG16_T(XBYTE_15A6) = 0;
529*53ee8cc1Swenshuai.xi }
530*53ee8cc1Swenshuai.xi 
531*53ee8cc1Swenshuai.xi void _HAL_TSP_HW_Lock(void)
532*53ee8cc1Swenshuai.xi {
533*53ee8cc1Swenshuai.xi #ifdef MCU_HK
534*53ee8cc1Swenshuai.xi     REG16_T(XBYTE_1591) = 0xFF;
535*53ee8cc1Swenshuai.xi     REG16_T(XBYTE_15A4) = 0xFF;
536*53ee8cc1Swenshuai.xi     while (REG16_T(XBYTE_15A4) && REG16_T(XBYTE_15A6));
537*53ee8cc1Swenshuai.xi     REG16_T(XBYTE_1591) = 0xFF;
538*53ee8cc1Swenshuai.xi #else // MIPS HK
539*53ee8cc1Swenshuai.xi     REG16_T(XBYTE_15A6) = 0xFF;
540*53ee8cc1Swenshuai.xi     REG16_T(XBYTE_15A4) = 0x00;
541*53ee8cc1Swenshuai.xi     while (REG16_T(XBYTE_1591) && (REG16_T(XBYTE_15A4)==0));
542*53ee8cc1Swenshuai.xi #endif
543*53ee8cc1Swenshuai.xi }
544*53ee8cc1Swenshuai.xi 
545*53ee8cc1Swenshuai.xi void _HAL_TSP_HW_Unlock(void)
546*53ee8cc1Swenshuai.xi {
547*53ee8cc1Swenshuai.xi #ifdef MCU_HK
548*53ee8cc1Swenshuai.xi     REG16_T(XBYTE_1591) = 0x00;
549*53ee8cc1Swenshuai.xi #else
550*53ee8cc1Swenshuai.xi     REG16_T(XBYTE_15A6) = 0x00;
551*53ee8cc1Swenshuai.xi #endif
552*53ee8cc1Swenshuai.xi }
553*53ee8cc1Swenshuai.xi 
554*53ee8cc1Swenshuai.xi #undef XBYTE_1591
555*53ee8cc1Swenshuai.xi #undef XBYTE_15A4
556*53ee8cc1Swenshuai.xi #undef XBYTE_15A6
557*53ee8cc1Swenshuai.xi 
558*53ee8cc1Swenshuai.xi #else
559*53ee8cc1Swenshuai.xi 
560*53ee8cc1Swenshuai.xi #define TSP_SEM_AEON              (_virtRegBase+ 0x2a34UL)  //sw_mail_box0
561*53ee8cc1Swenshuai.xi #define TSP_SEM_ORDER             (_virtRegBase+ 0x2b58UL)  // sw_mail_box1
562*53ee8cc1Swenshuai.xi #define TSP_SEM_MIPS              (_virtRegBase+ 0x2b5cUL)  // sw_mail_box2
563*53ee8cc1Swenshuai.xi 
HAL_TSP_HW_Lock_Init(void)564*53ee8cc1Swenshuai.xi void HAL_TSP_HW_Lock_Init(void)
565*53ee8cc1Swenshuai.xi {
566*53ee8cc1Swenshuai.xi     REG16_T(TSP_SEM_AEON) = 0;
567*53ee8cc1Swenshuai.xi     REG16_T(TSP_SEM_MIPS) = 0;
568*53ee8cc1Swenshuai.xi     REG16_T(TSP_SEM_ORDER) = 0;
569*53ee8cc1Swenshuai.xi 
570*53ee8cc1Swenshuai.xi     _HAL_HALTSP_ENTRY();
571*53ee8cc1Swenshuai.xi }
572*53ee8cc1Swenshuai.xi 
_HAL_TSP_HW_TryLock(MS_BOOL bInit)573*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_TSP_HW_TryLock(MS_BOOL bInit)
574*53ee8cc1Swenshuai.xi {
575*53ee8cc1Swenshuai.xi     if (_bIsHK)
576*53ee8cc1Swenshuai.xi     {
577*53ee8cc1Swenshuai.xi         if (bInit)
578*53ee8cc1Swenshuai.xi         {
579*53ee8cc1Swenshuai.xi             REG16_T(TSP_SEM_AEON) = 0xFFFF;
580*53ee8cc1Swenshuai.xi             REG16_T(TSP_SEM_ORDER) = 0xFFFF;
581*53ee8cc1Swenshuai.xi         }
582*53ee8cc1Swenshuai.xi         if (REG16_T(TSP_SEM_ORDER) && REG16_T(TSP_SEM_MIPS))
583*53ee8cc1Swenshuai.xi         {
584*53ee8cc1Swenshuai.xi             // REG16_T(TSP_SEM_AEON) = 0x0000;
585*53ee8cc1Swenshuai.xi             return FALSE;
586*53ee8cc1Swenshuai.xi         }
587*53ee8cc1Swenshuai.xi         return TRUE;
588*53ee8cc1Swenshuai.xi     }
589*53ee8cc1Swenshuai.xi     else
590*53ee8cc1Swenshuai.xi     {
591*53ee8cc1Swenshuai.xi         if (bInit)
592*53ee8cc1Swenshuai.xi         {
593*53ee8cc1Swenshuai.xi             REG16_T(TSP_SEM_MIPS) = 0xFFFF;
594*53ee8cc1Swenshuai.xi             REG16_T(TSP_SEM_ORDER) = 0x00;
595*53ee8cc1Swenshuai.xi         }
596*53ee8cc1Swenshuai.xi         if ((REG16_T(TSP_SEM_ORDER) ==0) && (REG16_T(TSP_SEM_AEON)))
597*53ee8cc1Swenshuai.xi         {
598*53ee8cc1Swenshuai.xi             // REG16_T(TSP_SEM_MIPS) = 0x0000;
599*53ee8cc1Swenshuai.xi             return FALSE;
600*53ee8cc1Swenshuai.xi         }
601*53ee8cc1Swenshuai.xi         return TRUE;
602*53ee8cc1Swenshuai.xi     }
603*53ee8cc1Swenshuai.xi }
604*53ee8cc1Swenshuai.xi 
_HAL_TSP_HW_Lock(void)605*53ee8cc1Swenshuai.xi static void _HAL_TSP_HW_Lock(void)
606*53ee8cc1Swenshuai.xi {
607*53ee8cc1Swenshuai.xi     if (FALSE == _HAL_TSP_HW_TryLock(TRUE))
608*53ee8cc1Swenshuai.xi     {
609*53ee8cc1Swenshuai.xi         while (FALSE == _HAL_TSP_HW_TryLock(FALSE));
610*53ee8cc1Swenshuai.xi     }
611*53ee8cc1Swenshuai.xi }
612*53ee8cc1Swenshuai.xi 
_HAL_TSP_HW_Unlock(void)613*53ee8cc1Swenshuai.xi static void _HAL_TSP_HW_Unlock(void)
614*53ee8cc1Swenshuai.xi {
615*53ee8cc1Swenshuai.xi     if (_bIsHK)
616*53ee8cc1Swenshuai.xi     {
617*53ee8cc1Swenshuai.xi         REG16_T(TSP_SEM_AEON) = 0x00;
618*53ee8cc1Swenshuai.xi     }
619*53ee8cc1Swenshuai.xi     else
620*53ee8cc1Swenshuai.xi     {
621*53ee8cc1Swenshuai.xi         REG16_T(TSP_SEM_MIPS) = 0x00;
622*53ee8cc1Swenshuai.xi     }
623*53ee8cc1Swenshuai.xi }
624*53ee8cc1Swenshuai.xi 
HAL_TSP_HW_Lock_Release(void)625*53ee8cc1Swenshuai.xi void HAL_TSP_HW_Lock_Release(void)
626*53ee8cc1Swenshuai.xi {
627*53ee8cc1Swenshuai.xi     REG16_T(TSP_SEM_AEON) = 0x00;
628*53ee8cc1Swenshuai.xi     REG16_T(TSP_SEM_MIPS) = 0x00;
629*53ee8cc1Swenshuai.xi 
630*53ee8cc1Swenshuai.xi     _HAL_HALTSP_EXIT();
631*53ee8cc1Swenshuai.xi 
632*53ee8cc1Swenshuai.xi 
633*53ee8cc1Swenshuai.xi }
634*53ee8cc1Swenshuai.xi 
HAL_TSP_TTX_IsAccess(MS_U32 u32Try)635*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_TTX_IsAccess(MS_U32 u32Try)
636*53ee8cc1Swenshuai.xi {
637*53ee8cc1Swenshuai.xi     if(u32Try == 0)
638*53ee8cc1Swenshuai.xi         return FALSE;
639*53ee8cc1Swenshuai.xi 
640*53ee8cc1Swenshuai.xi     if (_bIsHK)
641*53ee8cc1Swenshuai.xi     {
642*53ee8cc1Swenshuai.xi         if ( REG16_T(TSP_SEM_AEON))
643*53ee8cc1Swenshuai.xi         {
644*53ee8cc1Swenshuai.xi             return FALSE;
645*53ee8cc1Swenshuai.xi         }
646*53ee8cc1Swenshuai.xi     }
647*53ee8cc1Swenshuai.xi     else
648*53ee8cc1Swenshuai.xi     {
649*53ee8cc1Swenshuai.xi         if (REG16_T(TSP_SEM_MIPS))
650*53ee8cc1Swenshuai.xi         {
651*53ee8cc1Swenshuai.xi             return FALSE;
652*53ee8cc1Swenshuai.xi         }
653*53ee8cc1Swenshuai.xi     }
654*53ee8cc1Swenshuai.xi 
655*53ee8cc1Swenshuai.xi     if (_HAL_TSP_HW_TryLock(TRUE))
656*53ee8cc1Swenshuai.xi     {
657*53ee8cc1Swenshuai.xi         return TRUE;
658*53ee8cc1Swenshuai.xi     }
659*53ee8cc1Swenshuai.xi 
660*53ee8cc1Swenshuai.xi     _HAL_TSP_HW_Unlock();
661*53ee8cc1Swenshuai.xi     return FALSE;
662*53ee8cc1Swenshuai.xi }
663*53ee8cc1Swenshuai.xi 
HAL_TSP_TTX_UnlockAccess(void)664*53ee8cc1Swenshuai.xi void HAL_TSP_TTX_UnlockAccess(void)
665*53ee8cc1Swenshuai.xi {
666*53ee8cc1Swenshuai.xi     _HAL_TSP_HW_Unlock();
667*53ee8cc1Swenshuai.xi }
668*53ee8cc1Swenshuai.xi 
669*53ee8cc1Swenshuai.xi #undef TSP_SEM_AEON
670*53ee8cc1Swenshuai.xi #undef TSP_SEM_MIPS
671*53ee8cc1Swenshuai.xi #undef TSP_SEM_ORDER
672*53ee8cc1Swenshuai.xi 
673*53ee8cc1Swenshuai.xi #endif
674*53ee8cc1Swenshuai.xi 
HAL_REG32_IndR(REG32 * reg)675*53ee8cc1Swenshuai.xi MS_U32 HAL_REG32_IndR(REG32 *reg)
676*53ee8cc1Swenshuai.xi {
677*53ee8cc1Swenshuai.xi     MS_VIRT virtReg = (MS_VIRT)reg;
678*53ee8cc1Swenshuai.xi     MS_U32 u32Ret;
679*53ee8cc1Swenshuai.xi 
680*53ee8cc1Swenshuai.xi     _HAL_TSP_HW_Lock();
681*53ee8cc1Swenshuai.xi 
682*53ee8cc1Swenshuai.xi     _HAL_HALTSP_LOCK();
683*53ee8cc1Swenshuai.xi 
684*53ee8cc1Swenshuai.xi     // set address
685*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_ADDR0)=   (MS_U16)(virtReg>> 1UL);
686*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_ADDR1)=   (MS_U16)(virtReg>> 17UL);
687*53ee8cc1Swenshuai.xi 
688*53ee8cc1Swenshuai.xi     // set command
689*53ee8cc1Swenshuai.xi     // REG16_T(ADDR_INDR_CTRL)=    (TSP_IDR_MCUWAIT | TSP_IDR_READ | TSP_IDR_START);
690*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_CTRL)=    REG16_T(ADDR_INDR_CTRL) & 0xFF00;
691*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_CTRL)=    REG16_T(ADDR_INDR_CTRL) | (TSP_IDR_MCUWAIT | TSP_IDR_READ | TSP_IDR_START);
692*53ee8cc1Swenshuai.xi 
693*53ee8cc1Swenshuai.xi     // get read value
694*53ee8cc1Swenshuai.xi     u32Ret = ((MS_U32)(REG16_T(ADDR_INDR_READ0))| ((MS_U32)(REG16_T(ADDR_INDR_READ1)<< 16)));
695*53ee8cc1Swenshuai.xi 
696*53ee8cc1Swenshuai.xi     _HAL_HALTSP_UNLOCK();
697*53ee8cc1Swenshuai.xi     _HAL_TSP_HW_Unlock();
698*53ee8cc1Swenshuai.xi 
699*53ee8cc1Swenshuai.xi     return u32Ret;
700*53ee8cc1Swenshuai.xi }
701*53ee8cc1Swenshuai.xi 
HAL_REG32_IndR_tmp(REG32 * reg)702*53ee8cc1Swenshuai.xi MS_U32 HAL_REG32_IndR_tmp(REG32 *reg)
703*53ee8cc1Swenshuai.xi {
704*53ee8cc1Swenshuai.xi     MS_VIRT virtReg = (MS_VIRT)reg;
705*53ee8cc1Swenshuai.xi     MS_U32 u32Ret;
706*53ee8cc1Swenshuai.xi 
707*53ee8cc1Swenshuai.xi     _HAL_HALTSP_LOCK();
708*53ee8cc1Swenshuai.xi 
709*53ee8cc1Swenshuai.xi     // set address
710*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_ADDR0)=   (MS_U16)(virtReg>> 1UL);
711*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_ADDR1)=   (MS_U16)(virtReg>> 17UL);
712*53ee8cc1Swenshuai.xi 
713*53ee8cc1Swenshuai.xi     // set command
714*53ee8cc1Swenshuai.xi     // REG16_T(ADDR_INDR_CTRL)=    (TSP_IDR_MCUWAIT | TSP_IDR_READ | TSP_IDR_START);
715*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_CTRL)=    REG16_T(ADDR_INDR_CTRL) & 0xFF00;
716*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_CTRL)=    REG16_T(ADDR_INDR_CTRL) | (TSP_IDR_MCUWAIT | TSP_IDR_READ | TSP_IDR_START);
717*53ee8cc1Swenshuai.xi 
718*53ee8cc1Swenshuai.xi     // get read value
719*53ee8cc1Swenshuai.xi     u32Ret = ((MS_U32)(REG16_T(ADDR_INDR_READ0))| ((MS_U32)(REG16_T(ADDR_INDR_READ1)<< 16)));
720*53ee8cc1Swenshuai.xi 
721*53ee8cc1Swenshuai.xi     _HAL_HALTSP_UNLOCK();
722*53ee8cc1Swenshuai.xi 
723*53ee8cc1Swenshuai.xi     return u32Ret;
724*53ee8cc1Swenshuai.xi }
HAL_REG32_IndW_tmp(REG32 * reg,MS_U32 value)725*53ee8cc1Swenshuai.xi void HAL_REG32_IndW_tmp(REG32 *reg, MS_U32 value)
726*53ee8cc1Swenshuai.xi {
727*53ee8cc1Swenshuai.xi     MS_VIRT virtReg = (MS_VIRT)reg;
728*53ee8cc1Swenshuai.xi 
729*53ee8cc1Swenshuai.xi     _HAL_HALTSP_LOCK();
730*53ee8cc1Swenshuai.xi 
731*53ee8cc1Swenshuai.xi     // set address
732*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_ADDR0)=   (MS_U16)(virtReg>> 1UL);
733*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_ADDR1)=   (MS_U16)(virtReg>> 17UL);
734*53ee8cc1Swenshuai.xi 
735*53ee8cc1Swenshuai.xi     // set write value
736*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_WRITE0)=  (MS_U16)value;
737*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_WRITE1)=  (MS_U16)(value >> 16UL);
738*53ee8cc1Swenshuai.xi 
739*53ee8cc1Swenshuai.xi     // set command
740*53ee8cc1Swenshuai.xi     // REG16_T(ADDR_INDR_CTRL)=    (TSP_IDR_MCUWAIT | TSP_IDR_WRITE | TSP_IDR_START);
741*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_CTRL)=    REG16_T(ADDR_INDR_CTRL) & 0xFF00;
742*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_CTRL)=    REG16_T(ADDR_INDR_CTRL) | (TSP_IDR_MCUWAIT | TSP_IDR_WRITE | TSP_IDR_START);
743*53ee8cc1Swenshuai.xi 
744*53ee8cc1Swenshuai.xi     _HAL_HALTSP_UNLOCK();
745*53ee8cc1Swenshuai.xi }
746*53ee8cc1Swenshuai.xi 
HAL_REG32_IndW(REG32 * reg,MS_U32 value)747*53ee8cc1Swenshuai.xi void HAL_REG32_IndW(REG32 *reg, MS_U32 value)
748*53ee8cc1Swenshuai.xi {
749*53ee8cc1Swenshuai.xi     MS_VIRT virtReg = (MS_VIRT)reg;
750*53ee8cc1Swenshuai.xi 
751*53ee8cc1Swenshuai.xi     _HAL_TSP_HW_Lock();
752*53ee8cc1Swenshuai.xi 
753*53ee8cc1Swenshuai.xi     _HAL_HALTSP_LOCK();
754*53ee8cc1Swenshuai.xi 
755*53ee8cc1Swenshuai.xi     // set address
756*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_ADDR0)=   (MS_U16)(virtReg>> 1UL);
757*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_ADDR1)=   (MS_U16)(virtReg>> 17UL);
758*53ee8cc1Swenshuai.xi 
759*53ee8cc1Swenshuai.xi     // set write value
760*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_WRITE0)=  (MS_U16)value;
761*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_WRITE1)=  (MS_U16)(value >> 16UL);
762*53ee8cc1Swenshuai.xi 
763*53ee8cc1Swenshuai.xi     // set command
764*53ee8cc1Swenshuai.xi     // REG16_T(ADDR_INDR_CTRL)=    (TSP_IDR_MCUWAIT | TSP_IDR_WRITE | TSP_IDR_START);
765*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_CTRL)=    REG16_T(ADDR_INDR_CTRL) & 0xFF00;
766*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_CTRL)=    REG16_T(ADDR_INDR_CTRL) | (TSP_IDR_MCUWAIT | TSP_IDR_WRITE | TSP_IDR_START);
767*53ee8cc1Swenshuai.xi 
768*53ee8cc1Swenshuai.xi     _HAL_HALTSP_UNLOCK();
769*53ee8cc1Swenshuai.xi 
770*53ee8cc1Swenshuai.xi     _HAL_TSP_HW_Unlock();
771*53ee8cc1Swenshuai.xi }
772*53ee8cc1Swenshuai.xi 
773*53ee8cc1Swenshuai.xi #define ADDR_HWINT2         (_virtRegBase+ 0x2db0UL)
_HAL_TSP_HwInt2_BitClr(MS_U16 u16ClrBit)774*53ee8cc1Swenshuai.xi static void _HAL_TSP_HwInt2_BitClr(MS_U16 u16ClrBit)
775*53ee8cc1Swenshuai.xi {
776*53ee8cc1Swenshuai.xi     REG16_T(ADDR_HWINT2) = (REG16_T(ADDR_HWINT2) | 0xFF00) & ~u16ClrBit;
777*53ee8cc1Swenshuai.xi }
778*53ee8cc1Swenshuai.xi 
_HAL_TSP_HwInt2_BitSet(MS_U16 u16Bit)779*53ee8cc1Swenshuai.xi static void _HAL_TSP_HwInt2_BitSet(MS_U16 u16Bit)
780*53ee8cc1Swenshuai.xi {
781*53ee8cc1Swenshuai.xi     REG16_T(ADDR_HWINT2) = (REG16_T(ADDR_HWINT2) | 0xFF00) | u16Bit;
782*53ee8cc1Swenshuai.xi }
783*53ee8cc1Swenshuai.xi #undef ADDR_HWINT2
784*53ee8cc1Swenshuai.xi 
785*53ee8cc1Swenshuai.xi #if (TSP_HWPCR_BY_HK == 0 && defined(HWPCR_ENABLE))
_HAL_TSP_CMD_Write_HWPCR_Reg(MS_U32 u32mask,MS_U32 u32data)786*53ee8cc1Swenshuai.xi static void _HAL_TSP_CMD_Write_HWPCR_Reg(MS_U32 u32mask, MS_U32 u32data)
787*53ee8cc1Swenshuai.xi {
788*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Data0, u32mask);
789*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Data1, u32data);
790*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, TSP_MCU_CMD_HWPCR_REG_SET);
791*53ee8cc1Swenshuai.xi 
792*53ee8cc1Swenshuai.xi     while (0 != _HAL_REG32_R(&_TspCtrl[0].MCU_Cmd))
793*53ee8cc1Swenshuai.xi     {
794*53ee8cc1Swenshuai.xi         _delay();
795*53ee8cc1Swenshuai.xi     }
796*53ee8cc1Swenshuai.xi }
797*53ee8cc1Swenshuai.xi #endif
798*53ee8cc1Swenshuai.xi 
799*53ee8cc1Swenshuai.xi static MS_U16 u16LastAddr0, u16LastAddr1, u16LastWrite0, u16LastWrite1, u16LastRead0, u16LastRead1;
800*53ee8cc1Swenshuai.xi 
801*53ee8cc1Swenshuai.xi static MS_U32                       _u32PidFltBuf[(TSP_PIDFLT_NUM_ALL * 2UL * sizeof(REG_PidFlt))>> 3UL];
802*53ee8cc1Swenshuai.xi static MS_U32                       _u32SecFltBuf[TSP_SECFLT_NUM*((sizeof(REG_SecFlt)-sizeof((((REG_SecFlt*)0)->_x50)))>> 3UL)];
803*53ee8cc1Swenshuai.xi 
804*53ee8cc1Swenshuai.xi #ifdef HWPCR_ENABLE
805*53ee8cc1Swenshuai.xi static MS_U32                       _u32PcrFltBuf[2];
806*53ee8cc1Swenshuai.xi #endif
807*53ee8cc1Swenshuai.xi 
808*53ee8cc1Swenshuai.xi //[LEGACY] //[OBSOLETE]
809*53ee8cc1Swenshuai.xi MS_BOOL                             _bIsHK = TRUE;
810*53ee8cc1Swenshuai.xi //[LEGACY] //[OBSOLETE]
811*53ee8cc1Swenshuai.xi 
HAL_TSP_SaveFltState(void)812*53ee8cc1Swenshuai.xi void HAL_TSP_SaveFltState(void)
813*53ee8cc1Swenshuai.xi {
814*53ee8cc1Swenshuai.xi     MS_U32 u32EngId;
815*53ee8cc1Swenshuai.xi     MS_U32 i, j;
816*53ee8cc1Swenshuai.xi     MS_U32 u32SecEnd = ((size_t)&(((REG_SecFlt*)0)->_x50))/sizeof(REG32);
817*53ee8cc1Swenshuai.xi     REG_PidFlt *pPidFilter;
818*53ee8cc1Swenshuai.xi 
819*53ee8cc1Swenshuai.xi     for (u32EngId = 0; u32EngId < TSP_ENGINE_NUM; u32EngId++)
820*53ee8cc1Swenshuai.xi     {
821*53ee8cc1Swenshuai.xi         for (i = 0; i < TSP_PIDFLT_NUM_ALL; i++)
822*53ee8cc1Swenshuai.xi         {
823*53ee8cc1Swenshuai.xi             j = i << 1UL;
824*53ee8cc1Swenshuai.xi             pPidFilter = _HAL_TSP_PIDFLT(u32EngId, i);
825*53ee8cc1Swenshuai.xi             _u32PidFltBuf[j] = HAL_REG32_IndR(pPidFilter);
826*53ee8cc1Swenshuai.xi             pPidFilter = _HAL_TSP_PIDFLT_H(u32EngId, i);
827*53ee8cc1Swenshuai.xi             _u32PidFltBuf[j + 1] = HAL_REG32_IndR(pPidFilter);
828*53ee8cc1Swenshuai.xi         }
829*53ee8cc1Swenshuai.xi #ifdef HWPCR_ENABLE
830*53ee8cc1Swenshuai.xi         _u32PcrFltBuf[0] = _HAL_REG32_R(&(_TspCtrl3[0].PIDFLR_PCR[0]));
831*53ee8cc1Swenshuai.xi         _u32PcrFltBuf[1] = _HAL_REG32_R(&(_TspCtrl3[0].PIDFLR_PCR[1]));
832*53ee8cc1Swenshuai.xi #endif
833*53ee8cc1Swenshuai.xi         j = 0UL;
834*53ee8cc1Swenshuai.xi         for (i = 0; i < TSP_SECFLT_NUM; i++)
835*53ee8cc1Swenshuai.xi         {
836*53ee8cc1Swenshuai.xi             REG32* pRegStart = (REG32*)_HAL_TSP_SECFLT(u32EngId, i);
837*53ee8cc1Swenshuai.xi             REG32* pRegEnd = pRegStart + u32SecEnd;
838*53ee8cc1Swenshuai.xi             REG32* pReg = pRegStart;
839*53ee8cc1Swenshuai.xi             while (pReg < pRegEnd)
840*53ee8cc1Swenshuai.xi             {
841*53ee8cc1Swenshuai.xi                 _u32SecFltBuf[j] = HAL_REG32_IndR(pReg);
842*53ee8cc1Swenshuai.xi                 j++;
843*53ee8cc1Swenshuai.xi                 pReg++;
844*53ee8cc1Swenshuai.xi             }
845*53ee8cc1Swenshuai.xi         }
846*53ee8cc1Swenshuai.xi     }
847*53ee8cc1Swenshuai.xi }
848*53ee8cc1Swenshuai.xi 
HAL_TSP_RestoreFltState(void)849*53ee8cc1Swenshuai.xi void HAL_TSP_RestoreFltState(void)
850*53ee8cc1Swenshuai.xi {
851*53ee8cc1Swenshuai.xi     MS_U32 u32EngId;
852*53ee8cc1Swenshuai.xi     MS_U32 i, j;
853*53ee8cc1Swenshuai.xi     MS_U32 u32SecEnd = ((size_t)&(((REG_SecFlt*)0)->_x50))/sizeof(REG32);
854*53ee8cc1Swenshuai.xi     REG_PidFlt *pPidFilter;
855*53ee8cc1Swenshuai.xi 
856*53ee8cc1Swenshuai.xi     for (u32EngId = 0UL; u32EngId < TSP_ENGINE_NUM; u32EngId++)
857*53ee8cc1Swenshuai.xi     {
858*53ee8cc1Swenshuai.xi         for (i = 0UL; i < TSP_PIDFLT_NUM; i++)
859*53ee8cc1Swenshuai.xi         {
860*53ee8cc1Swenshuai.xi             j = i << 1UL;
861*53ee8cc1Swenshuai.xi             pPidFilter = _HAL_TSP_PIDFLT(u32EngId, i);
862*53ee8cc1Swenshuai.xi             HAL_REG32_IndW(pPidFilter, _u32PidFltBuf[j]);
863*53ee8cc1Swenshuai.xi             pPidFilter = _HAL_TSP_PIDFLT_H(u32EngId, i);
864*53ee8cc1Swenshuai.xi             HAL_REG32_IndW(pPidFilter, _u32PidFltBuf[j + 1]);
865*53ee8cc1Swenshuai.xi         }
866*53ee8cc1Swenshuai.xi #ifdef HWPCR_ENABLE
867*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&(_TspCtrl3[0].PIDFLR_PCR[0]), _u32PcrFltBuf[0]);
868*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&(_TspCtrl3[0].PIDFLR_PCR[1]), _u32PcrFltBuf[1]);
869*53ee8cc1Swenshuai.xi #endif
870*53ee8cc1Swenshuai.xi         j = 0UL;
871*53ee8cc1Swenshuai.xi         for (i = 0; i < TSP_SECFLT_NUM; i++)
872*53ee8cc1Swenshuai.xi         {
873*53ee8cc1Swenshuai.xi             REG32* pRegStart = (REG32*) _HAL_TSP_SECFLT(u32EngId, i);
874*53ee8cc1Swenshuai.xi             REG32* pRegEnd = pRegStart + u32SecEnd;
875*53ee8cc1Swenshuai.xi             REG32* pReg = pRegStart;
876*53ee8cc1Swenshuai.xi             while (pReg < pRegEnd)
877*53ee8cc1Swenshuai.xi             {
878*53ee8cc1Swenshuai.xi                 HAL_REG32_IndW(pReg, _u32SecFltBuf[j]);
879*53ee8cc1Swenshuai.xi                 j++;
880*53ee8cc1Swenshuai.xi                 pReg++;
881*53ee8cc1Swenshuai.xi             }
882*53ee8cc1Swenshuai.xi         }
883*53ee8cc1Swenshuai.xi     }
884*53ee8cc1Swenshuai.xi }
885*53ee8cc1Swenshuai.xi 
HAL_TSP_ISR_SAVE_ALL(void)886*53ee8cc1Swenshuai.xi void HAL_TSP_ISR_SAVE_ALL(void)
887*53ee8cc1Swenshuai.xi {
888*53ee8cc1Swenshuai.xi     // save address
889*53ee8cc1Swenshuai.xi     u16LastAddr0=               (MS_U16)REG16_T(ADDR_INDR_ADDR0);
890*53ee8cc1Swenshuai.xi     u16LastAddr1=               (MS_U16)REG16_T(ADDR_INDR_ADDR1);
891*53ee8cc1Swenshuai.xi 
892*53ee8cc1Swenshuai.xi     // save write
893*53ee8cc1Swenshuai.xi     u16LastWrite0=              (MS_U16)REG16_T(ADDR_INDR_WRITE0);
894*53ee8cc1Swenshuai.xi     u16LastWrite1=              (MS_U16)REG16_T(ADDR_INDR_WRITE1);
895*53ee8cc1Swenshuai.xi 
896*53ee8cc1Swenshuai.xi     // save read
897*53ee8cc1Swenshuai.xi     u16LastRead0=               (MS_U16)REG16_T(ADDR_INDR_READ0);
898*53ee8cc1Swenshuai.xi     u16LastRead1=               (MS_U16)REG16_T(ADDR_INDR_READ1);
899*53ee8cc1Swenshuai.xi }
900*53ee8cc1Swenshuai.xi 
HAL_TSP_ISR_RESTORE_ALL(void)901*53ee8cc1Swenshuai.xi void HAL_TSP_ISR_RESTORE_ALL(void)
902*53ee8cc1Swenshuai.xi {
903*53ee8cc1Swenshuai.xi     // restore read
904*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_READ0)=   u16LastRead0;
905*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_READ1)=   u16LastRead1;
906*53ee8cc1Swenshuai.xi 
907*53ee8cc1Swenshuai.xi     // restore write
908*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_WRITE0)=  u16LastWrite0;
909*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_WRITE1)=  u16LastWrite1;
910*53ee8cc1Swenshuai.xi 
911*53ee8cc1Swenshuai.xi     // restore addr
912*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_ADDR0)=   u16LastAddr0;
913*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_ADDR1)=   u16LastAddr1;
914*53ee8cc1Swenshuai.xi }
915*53ee8cc1Swenshuai.xi #undef ADDR_INDR_CTRL
916*53ee8cc1Swenshuai.xi #undef ADDR_INDR_ADDR0
917*53ee8cc1Swenshuai.xi #undef ADDR_INDR_ADDR1
918*53ee8cc1Swenshuai.xi #undef ADDR_INDR_WRITE0
919*53ee8cc1Swenshuai.xi #undef ADDR_INDR_WRITE1
920*53ee8cc1Swenshuai.xi #undef ADDR_INDR_READ0
921*53ee8cc1Swenshuai.xi #undef ADDR_INDR_READ1
922*53ee8cc1Swenshuai.xi 
923*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
924*53ee8cc1Swenshuai.xi // For MISC part
925*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
HAL_TSP_ORAcess_Optimize(MS_BOOL bEnable)926*53ee8cc1Swenshuai.xi void HAL_TSP_ORAcess_Optimize(MS_BOOL bEnable)
927*53ee8cc1Swenshuai.xi {
928*53ee8cc1Swenshuai.xi     if (bEnable)
929*53ee8cc1Swenshuai.xi     {
930*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].reg160C,
931*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), TSP_OPT_ORACESS_TIMING));
932*53ee8cc1Swenshuai.xi     }
933*53ee8cc1Swenshuai.xi     else
934*53ee8cc1Swenshuai.xi     {
935*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].reg160C,
936*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), TSP_OPT_ORACESS_TIMING));
937*53ee8cc1Swenshuai.xi     }
938*53ee8cc1Swenshuai.xi }
939*53ee8cc1Swenshuai.xi 
HAL_TSP_CSA_Set_ScrmPath(MS_U8 u8EngId,MS_U32 u32ScrmPath)940*53ee8cc1Swenshuai.xi void HAL_TSP_CSA_Set_ScrmPath(MS_U8 u8EngId, MS_U32 u32ScrmPath)
941*53ee8cc1Swenshuai.xi {
942*53ee8cc1Swenshuai.xi     //printf("[%s] u8EngId %d, u32ScrmPath %lx\n", __FUNCTION__, (int)u8EngId, u32ScrmPath);
943*53ee8cc1Swenshuai.xi     switch(u8EngId)
944*53ee8cc1Swenshuai.xi     {
945*53ee8cc1Swenshuai.xi         case 0:
946*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].CA_CTRL, (_HAL_REG32_R(&_TspCtrl[0].CA_CTRL) & ~TSP_CA0_CTRL_MASK) | (u32ScrmPath & TSP_CA0_CTRL_MASK));
947*53ee8cc1Swenshuai.xi             break;
948*53ee8cc1Swenshuai.xi         case 1:
949*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].CA_CTRL, (_HAL_REG32_R(&_TspCtrl[0].CA_CTRL) & ~TSP_CA1_CTRL_MASK) | (u32ScrmPath & TSP_CA1_CTRL_MASK));
950*53ee8cc1Swenshuai.xi             break;
951*53ee8cc1Swenshuai.xi         case 2:
952*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].CA_CTRL, (_HAL_REG32_R(&_TspCtrl[0].CA_CTRL) & ~TSP_CA2_CTRL_MASK_L) | (u32ScrmPath & TSP_CA2_CTRL_MASK_L));
953*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].REG_ONEWAY,
954*53ee8cc1Swenshuai.xi                 (_HAL_REG32_R(&_TspCtrl[0].REG_ONEWAY) & ~TSP_CA2_CTRL_MASK_H) | ((u32ScrmPath & ~TSP_CA2_CTRL_MASK_L) << TSP_CA2_CTRL_SHIFT_H));
955*53ee8cc1Swenshuai.xi             break;
956*53ee8cc1Swenshuai.xi         case 3:
957*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].REG_ONEWAY, (_HAL_REG32_R(&_TspCtrl[0].REG_ONEWAY) & ~TSP_CA3_CTRL_MASK) | (u32ScrmPath & TSP_CA3_CTRL_MASK));
958*53ee8cc1Swenshuai.xi             break;
959*53ee8cc1Swenshuai.xi         default:
960*53ee8cc1Swenshuai.xi             break;
961*53ee8cc1Swenshuai.xi     }
962*53ee8cc1Swenshuai.xi }
963*53ee8cc1Swenshuai.xi 
HAL_TSP_CSA_Get_ScrmPath(MS_U8 u8EngId)964*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_CSA_Get_ScrmPath(MS_U8 u8EngId)
965*53ee8cc1Swenshuai.xi {
966*53ee8cc1Swenshuai.xi     MS_U32 u32Value = 0;
967*53ee8cc1Swenshuai.xi     switch(u8EngId)
968*53ee8cc1Swenshuai.xi     {
969*53ee8cc1Swenshuai.xi         case 0:
970*53ee8cc1Swenshuai.xi             return (_HAL_REG32_R(&_TspCtrl[0].CA_CTRL) & TSP_CA0_CTRL_MASK);
971*53ee8cc1Swenshuai.xi         case 1:
972*53ee8cc1Swenshuai.xi             return (_HAL_REG32_R(&_TspCtrl[0].CA_CTRL) & TSP_CA1_CTRL_MASK);
973*53ee8cc1Swenshuai.xi             break;
974*53ee8cc1Swenshuai.xi         case 2:
975*53ee8cc1Swenshuai.xi             u32Value = _HAL_REG32_R(&_TspCtrl[0].CA_CTRL) & TSP_CA2_CTRL_MASK_L;
976*53ee8cc1Swenshuai.xi             u32Value |= ((_HAL_REG32_R(&_TspCtrl[0].REG_ONEWAY) & TSP_CA2_CTRL_MASK_H) >> TSP_CA2_CTRL_SHIFT_H);
977*53ee8cc1Swenshuai.xi             return u32Value;
978*53ee8cc1Swenshuai.xi         case 3:
979*53ee8cc1Swenshuai.xi             return (_HAL_REG32_R(&_TspCtrl[0].REG_ONEWAY) & TSP_CA3_CTRL_MASK);
980*53ee8cc1Swenshuai.xi         default:
981*53ee8cc1Swenshuai.xi             break;
982*53ee8cc1Swenshuai.xi     }
983*53ee8cc1Swenshuai.xi 
984*53ee8cc1Swenshuai.xi     return 0;
985*53ee8cc1Swenshuai.xi }
986*53ee8cc1Swenshuai.xi 
HAL_TSP_CSA_Set_CACtrl(MS_U8 u8EngId,MS_U8 u8SrcTSIF,MS_U32 u32Dst)987*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_CSA_Set_CACtrl(MS_U8 u8EngId, MS_U8 u8SrcTSIF, MS_U32 u32Dst)
988*53ee8cc1Swenshuai.xi {
989*53ee8cc1Swenshuai.xi     MS_U32 u32CAInTS0Live[4]    = {TSP_CA0_INPUT_TSIF0_LIVEIN, TSP_CA1_INPUT_TSIF0_LIVEIN, TSP_CA2_INPUT_TSIF0_LIVEIN, TSP_CA3_INPUT_TSIF0_LIVEIN};
990*53ee8cc1Swenshuai.xi     MS_U32 u32CAInTS0file[4]    = {TSP_CA0_INPUT_TSIF0_FILEIN, TSP_CA1_INPUT_TSIF0_FILEIN, TSP_CA2_INPUT_TSIF0_FILEIN, TSP_CA3_INPUT_TSIF0_FILEIN};
991*53ee8cc1Swenshuai.xi     MS_U32 u32CAInTS1[4]        = {TSP_CA0_INPUT_TSIF1, TSP_CA1_INPUT_TSIF1, TSP_CA2_INPUT_TSIF1, TSP_CA3_INPUT_TSIF1};
992*53ee8cc1Swenshuai.xi     MS_U32 u32CAInTS2[4]        = {TSP_CA0_INPUT_TSIF2, TSP_CA1_INPUT_TSIF2, TSP_CA2_INPUT_TSIF2, TSP_CA3_INPUT_TSIF2};
993*53ee8cc1Swenshuai.xi     MS_U32 u32CAOutPktDmx0L[4]  = {TSP_CA0_OUTPUT_PKTDMX0_LIVE, TSP_CA1_OUTPUT_PKTDMX0_LIVE, TSP_CA2_OUTPUT_PKTDMX0_LIVE, TSP_CA3_OUTPUT_PKTDMX0_LIVE};
994*53ee8cc1Swenshuai.xi     MS_U32 u32CAOutPktDmx0F[4]  = {TSP_CA0_OUTPUT_PKTDMX0_FILE, TSP_CA1_OUTPUT_PKTDMX0_FILE, TSP_CA2_OUTPUT_PKTDMX0_FILE, TSP_CA3_OUTPUT_PKTDMX0_FILE};
995*53ee8cc1Swenshuai.xi     MS_U32 u32CAOutPktDmx1[4]   = {TSP_CA0_OUTPUT_PKTDMX1, TSP_CA1_OUTPUT_PKTDMX1, TSP_CA2_OUTPUT_PKTDMX1, TSP_CA3_OUTPUT_PKTDMX1};
996*53ee8cc1Swenshuai.xi     MS_U32 u32CAOutPktDmx2[4]   = {TSP_CA0_OUTPUT_PKTDMX2, TSP_CA1_OUTPUT_PKTDMX2, TSP_CA2_OUTPUT_PKTDMX2, TSP_CA3_OUTPUT_PKTDMX2};
997*53ee8cc1Swenshuai.xi     MS_U32 u32CACtrl = 0UL;
998*53ee8cc1Swenshuai.xi 
999*53ee8cc1Swenshuai.xi     if(u8EngId >= TSP_CA_ENGINE_NUM)
1000*53ee8cc1Swenshuai.xi     {
1001*53ee8cc1Swenshuai.xi         return FALSE;
1002*53ee8cc1Swenshuai.xi     }
1003*53ee8cc1Swenshuai.xi 
1004*53ee8cc1Swenshuai.xi     switch(u8SrcTSIF)
1005*53ee8cc1Swenshuai.xi     {
1006*53ee8cc1Swenshuai.xi         case TSP_SRC_FROM_TSIF0_LIVE:
1007*53ee8cc1Swenshuai.xi             u32CACtrl = u32CAInTS0Live[u8EngId];
1008*53ee8cc1Swenshuai.xi             break;
1009*53ee8cc1Swenshuai.xi         case TSP_SRC_FROM_TSIF0_FILE:
1010*53ee8cc1Swenshuai.xi             u32CACtrl = u32CAInTS0file[u8EngId];
1011*53ee8cc1Swenshuai.xi             break;
1012*53ee8cc1Swenshuai.xi         case TSP_SRC_FROM_TSIF1:
1013*53ee8cc1Swenshuai.xi             u32CACtrl = u32CAInTS1[u8EngId];
1014*53ee8cc1Swenshuai.xi             break;
1015*53ee8cc1Swenshuai.xi         case TSP_SRC_FROM_TSIF2:
1016*53ee8cc1Swenshuai.xi             u32CACtrl = u32CAInTS2[u8EngId];
1017*53ee8cc1Swenshuai.xi             break;
1018*53ee8cc1Swenshuai.xi         default:
1019*53ee8cc1Swenshuai.xi             return FALSE;
1020*53ee8cc1Swenshuai.xi     }
1021*53ee8cc1Swenshuai.xi     switch(u32Dst)
1022*53ee8cc1Swenshuai.xi     {
1023*53ee8cc1Swenshuai.xi         case TSP_PKTDMX0_LIVE:
1024*53ee8cc1Swenshuai.xi             u32CACtrl |= u32CAOutPktDmx0L[u8EngId];
1025*53ee8cc1Swenshuai.xi             break;
1026*53ee8cc1Swenshuai.xi         case TSP_PKTDMX0_FILE:
1027*53ee8cc1Swenshuai.xi             u32CACtrl |= u32CAOutPktDmx0F[u8EngId];
1028*53ee8cc1Swenshuai.xi             break;
1029*53ee8cc1Swenshuai.xi         case TSP_PKTDMX1:
1030*53ee8cc1Swenshuai.xi             u32CACtrl |= u32CAOutPktDmx1[u8EngId];
1031*53ee8cc1Swenshuai.xi             break;
1032*53ee8cc1Swenshuai.xi         case TSP_PKTDMX2:
1033*53ee8cc1Swenshuai.xi             u32CACtrl |= u32CAOutPktDmx2[u8EngId];
1034*53ee8cc1Swenshuai.xi             break;
1035*53ee8cc1Swenshuai.xi         default:
1036*53ee8cc1Swenshuai.xi             return FALSE;
1037*53ee8cc1Swenshuai.xi     }
1038*53ee8cc1Swenshuai.xi 
1039*53ee8cc1Swenshuai.xi     HAL_TSP_CSA_Set_ScrmPath(u8EngId, u32CACtrl);
1040*53ee8cc1Swenshuai.xi 
1041*53ee8cc1Swenshuai.xi     return TRUE;
1042*53ee8cc1Swenshuai.xi }
1043*53ee8cc1Swenshuai.xi 
HAL_TSP_CSA_Get_CACtrl(MS_U8 u8EngId,MS_U8 * pu8SrcTSIF,MS_U32 * pu32Dst)1044*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_CSA_Get_CACtrl(MS_U8 u8EngId, MS_U8* pu8SrcTSIF, MS_U32* pu32Dst)
1045*53ee8cc1Swenshuai.xi {
1046*53ee8cc1Swenshuai.xi     MS_U32 u32CAInTS0Live[4]    = {TSP_CA0_INPUT_TSIF0_LIVEIN, TSP_CA1_INPUT_TSIF0_LIVEIN, TSP_CA2_INPUT_TSIF0_LIVEIN, TSP_CA3_INPUT_TSIF0_LIVEIN};
1047*53ee8cc1Swenshuai.xi     MS_U32 u32CAInTS0file[4]    = {TSP_CA0_INPUT_TSIF0_FILEIN, TSP_CA1_INPUT_TSIF0_FILEIN, TSP_CA2_INPUT_TSIF0_FILEIN, TSP_CA3_INPUT_TSIF0_FILEIN};
1048*53ee8cc1Swenshuai.xi     MS_U32 u32CAInTS1[4]        = {TSP_CA0_INPUT_TSIF1, TSP_CA1_INPUT_TSIF1, TSP_CA2_INPUT_TSIF1, TSP_CA3_INPUT_TSIF1};
1049*53ee8cc1Swenshuai.xi     MS_U32 u32CAInTS2[4]        = {TSP_CA0_INPUT_TSIF2, TSP_CA1_INPUT_TSIF2, TSP_CA2_INPUT_TSIF2, TSP_CA3_INPUT_TSIF2};
1050*53ee8cc1Swenshuai.xi     MS_U32 u32CAOutPktDmx0L[4]  = {TSP_CA0_OUTPUT_PKTDMX0_LIVE, TSP_CA1_OUTPUT_PKTDMX0_LIVE, TSP_CA2_OUTPUT_PKTDMX0_LIVE, TSP_CA3_OUTPUT_PKTDMX0_LIVE};
1051*53ee8cc1Swenshuai.xi     MS_U32 u32CAOutPktDmx0F[4]  = {TSP_CA0_OUTPUT_PKTDMX0_FILE, TSP_CA1_OUTPUT_PKTDMX0_FILE, TSP_CA2_OUTPUT_PKTDMX0_FILE, TSP_CA3_OUTPUT_PKTDMX0_FILE};
1052*53ee8cc1Swenshuai.xi     MS_U32 u32CAOutPktDmx1[4]   = {TSP_CA0_OUTPUT_PKTDMX1, TSP_CA1_OUTPUT_PKTDMX1, TSP_CA2_OUTPUT_PKTDMX1, TSP_CA3_OUTPUT_PKTDMX1};
1053*53ee8cc1Swenshuai.xi     MS_U32 u32CAOutPktDmx2[4]   = {TSP_CA0_OUTPUT_PKTDMX2, TSP_CA1_OUTPUT_PKTDMX2, TSP_CA2_OUTPUT_PKTDMX2, TSP_CA3_OUTPUT_PKTDMX2};
1054*53ee8cc1Swenshuai.xi     MS_U32 u32ScmbPath = 0UL;
1055*53ee8cc1Swenshuai.xi 
1056*53ee8cc1Swenshuai.xi 
1057*53ee8cc1Swenshuai.xi     *pu8SrcTSIF = 0UL;
1058*53ee8cc1Swenshuai.xi     *pu32Dst = 0UL;
1059*53ee8cc1Swenshuai.xi 
1060*53ee8cc1Swenshuai.xi     if(u8EngId >= TSP_CA_ENGINE_NUM)
1061*53ee8cc1Swenshuai.xi     {
1062*53ee8cc1Swenshuai.xi         return FALSE;
1063*53ee8cc1Swenshuai.xi     }
1064*53ee8cc1Swenshuai.xi 
1065*53ee8cc1Swenshuai.xi     u32ScmbPath = HAL_TSP_CSA_Get_ScrmPath(u8EngId);
1066*53ee8cc1Swenshuai.xi 
1067*53ee8cc1Swenshuai.xi     if(u32ScmbPath & u32CAInTS0Live[u8EngId])
1068*53ee8cc1Swenshuai.xi     {
1069*53ee8cc1Swenshuai.xi         *pu8SrcTSIF = TSP_SRC_FROM_TSIF0_LIVE;
1070*53ee8cc1Swenshuai.xi     }
1071*53ee8cc1Swenshuai.xi     else if(u32ScmbPath & u32CAInTS0file[u8EngId])
1072*53ee8cc1Swenshuai.xi     {
1073*53ee8cc1Swenshuai.xi         *pu8SrcTSIF = TSP_SRC_FROM_TSIF0_FILE;
1074*53ee8cc1Swenshuai.xi     }
1075*53ee8cc1Swenshuai.xi     else if(u32ScmbPath & u32CAInTS1[u8EngId])
1076*53ee8cc1Swenshuai.xi     {
1077*53ee8cc1Swenshuai.xi         *pu8SrcTSIF = TSP_SRC_FROM_TSIF1;
1078*53ee8cc1Swenshuai.xi     }
1079*53ee8cc1Swenshuai.xi     else if(u32ScmbPath & u32CAInTS2[u8EngId])
1080*53ee8cc1Swenshuai.xi     {
1081*53ee8cc1Swenshuai.xi         *pu8SrcTSIF = TSP_SRC_FROM_TSIF2;
1082*53ee8cc1Swenshuai.xi     }
1083*53ee8cc1Swenshuai.xi 
1084*53ee8cc1Swenshuai.xi     if(u32ScmbPath & u32CAOutPktDmx0L[u8EngId])
1085*53ee8cc1Swenshuai.xi     {
1086*53ee8cc1Swenshuai.xi         *pu32Dst = TSP_PKTDMX0_LIVE;
1087*53ee8cc1Swenshuai.xi     }
1088*53ee8cc1Swenshuai.xi     else if(u32ScmbPath & u32CAOutPktDmx0F[u8EngId])
1089*53ee8cc1Swenshuai.xi     {
1090*53ee8cc1Swenshuai.xi         *pu32Dst = TSP_PKTDMX0_FILE;
1091*53ee8cc1Swenshuai.xi     }
1092*53ee8cc1Swenshuai.xi     else if(u32ScmbPath & u32CAOutPktDmx1[u8EngId])
1093*53ee8cc1Swenshuai.xi     {
1094*53ee8cc1Swenshuai.xi         *pu32Dst = TSP_PKTDMX1;
1095*53ee8cc1Swenshuai.xi     }
1096*53ee8cc1Swenshuai.xi     else if(u32ScmbPath & u32CAOutPktDmx2[u8EngId])
1097*53ee8cc1Swenshuai.xi     {
1098*53ee8cc1Swenshuai.xi         *pu32Dst = TSP_PKTDMX2;
1099*53ee8cc1Swenshuai.xi     }
1100*53ee8cc1Swenshuai.xi 
1101*53ee8cc1Swenshuai.xi     return TRUE;
1102*53ee8cc1Swenshuai.xi }
1103*53ee8cc1Swenshuai.xi 
1104*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1105*53ee8cc1Swenshuai.xi // For PID filter part
1106*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
HAL_TSP_PidFlt_GetFltOutput(MS_U32 u32EngId,MS_U32 u32PidFltId)1107*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_PidFlt_GetFltOutput(MS_U32 u32EngId, MS_U32 u32PidFltId)
1108*53ee8cc1Swenshuai.xi {
1109*53ee8cc1Swenshuai.xi     REG_PidFlt* pPidFilter = _HAL_TSP_PIDFLT(u32EngId, u32PidFltId);
1110*53ee8cc1Swenshuai.xi     return (HAL_REG32_IndR((REG32 *)pPidFilter) & TSP_PIDFLT_OUT_MASK);
1111*53ee8cc1Swenshuai.xi }
1112*53ee8cc1Swenshuai.xi 
HAL_TSP_PidFlt_GetPid(MS_U32 u32EngId,MS_U32 u32PidFltId)1113*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_PidFlt_GetPid(MS_U32 u32EngId, MS_U32 u32PidFltId)
1114*53ee8cc1Swenshuai.xi {
1115*53ee8cc1Swenshuai.xi     MS_U32 u32PID;
1116*53ee8cc1Swenshuai.xi     REG_PidFlt* pPidFilter = _HAL_TSP_PIDFLT(u32EngId, u32PidFltId);
1117*53ee8cc1Swenshuai.xi 
1118*53ee8cc1Swenshuai.xi     u32PID = (HAL_REG32_IndR((REG32 *)pPidFilter) & TSP_PIDFLT_PID_MASK) >> TSP_PIDFLT_PID_SHFT;
1119*53ee8cc1Swenshuai.xi 
1120*53ee8cc1Swenshuai.xi     return u32PID;
1121*53ee8cc1Swenshuai.xi }
1122*53ee8cc1Swenshuai.xi 
HAL_TSP_PidFlt_SetPid(MS_U32 u32EngId,MS_U32 u32PidFltId,MS_U32 u32PID)1123*53ee8cc1Swenshuai.xi void HAL_TSP_PidFlt_SetPid(MS_U32 u32EngId, MS_U32 u32PidFltId, MS_U32 u32PID)
1124*53ee8cc1Swenshuai.xi {
1125*53ee8cc1Swenshuai.xi     REG_PidFlt* pPidFilter = _HAL_TSP_PIDFLT(u32EngId, u32PidFltId);
1126*53ee8cc1Swenshuai.xi     HAL_REG32_IndW((REG32 *)pPidFilter, (HAL_REG32_IndR((REG32 *)pPidFilter) & ~TSP_PIDFLT_PID_MASK) | ((u32PID << TSP_PIDFLT_PID_SHFT) & TSP_PIDFLT_PID_MASK));
1127*53ee8cc1Swenshuai.xi }
1128*53ee8cc1Swenshuai.xi 
HAL_TSP_PidFlt_SelFltOutput(MS_U32 u32EngId,MS_U32 u32PidFltId,MS_U32 u32FltOutput)1129*53ee8cc1Swenshuai.xi void HAL_TSP_PidFlt_SelFltOutput(MS_U32 u32EngId, MS_U32 u32PidFltId, MS_U32 u32FltOutput)
1130*53ee8cc1Swenshuai.xi {
1131*53ee8cc1Swenshuai.xi     REG_PidFlt* pPidFilter = _HAL_TSP_PIDFLT(u32EngId, u32PidFltId);
1132*53ee8cc1Swenshuai.xi     HAL_REG32_IndW((REG32 *)pPidFilter, (HAL_REG32_IndR((REG32 *)pPidFilter) & ~TSP_PIDFLT_OUT_MASK) | (u32FltOutput & TSP_PIDFLT_OUT_MASK));
1133*53ee8cc1Swenshuai.xi }
1134*53ee8cc1Swenshuai.xi 
HAL_TSP_PidFlt_SelSecFlt(MS_U32 u32EngId,MS_U32 u32PidFltId,MS_U32 u32SecFltId)1135*53ee8cc1Swenshuai.xi void HAL_TSP_PidFlt_SelSecFlt(MS_U32 u32EngId, MS_U32 u32PidFltId, MS_U32 u32SecFltId)
1136*53ee8cc1Swenshuai.xi {
1137*53ee8cc1Swenshuai.xi     REG_PidFlt* pPidFilter = _HAL_TSP_PIDFLT_H(u32EngId, u32PidFltId);
1138*53ee8cc1Swenshuai.xi     HAL_REG32_IndW((REG32 *)pPidFilter,
1139*53ee8cc1Swenshuai.xi         (HAL_REG32_IndR((REG32 *)pPidFilter) & ~TSP_PIDFLT_SECFLT_MASK) | ((u32SecFltId << TSP_PIDFLT_SECFLT_SHFT) & TSP_PIDFLT_SECFLT_MASK));
1140*53ee8cc1Swenshuai.xi }
1141*53ee8cc1Swenshuai.xi 
HAL_TSP_PidFlt_GetSecFlt(MS_U32 u32EngId,MS_U32 u32PidFltId)1142*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_PidFlt_GetSecFlt(MS_U32 u32EngId, MS_U32 u32PidFltId)
1143*53ee8cc1Swenshuai.xi {
1144*53ee8cc1Swenshuai.xi     REG_PidFlt* pPidFilter = _HAL_TSP_PIDFLT_H(u32EngId, u32PidFltId);
1145*53ee8cc1Swenshuai.xi     return ((HAL_REG32_IndR((REG32 *)pPidFilter) & TSP_PIDFLT_SECFLT_MASK) >> TSP_PIDFLT_SECFLT_SHFT);
1146*53ee8cc1Swenshuai.xi }
1147*53ee8cc1Swenshuai.xi 
HAL_TSP_PidFlt_SelFltSource(MS_U32 u32EngId,MS_U32 u32PidFltId,MS_U32 u32FltSource)1148*53ee8cc1Swenshuai.xi void HAL_TSP_PidFlt_SelFltSource(MS_U32 u32EngId, MS_U32 u32PidFltId, MS_U32 u32FltSource)
1149*53ee8cc1Swenshuai.xi {
1150*53ee8cc1Swenshuai.xi     REG_PidFlt* pPidFilter = _HAL_TSP_PIDFLT(u32EngId, u32PidFltId);
1151*53ee8cc1Swenshuai.xi     HAL_REG32_IndW((REG32 *)pPidFilter, (HAL_REG32_IndR((REG32 *)pPidFilter) & ~TSP_PIDFLT_IN_MASK) | (u32FltSource & TSP_PIDFLT_IN_MASK));
1152*53ee8cc1Swenshuai.xi }
1153*53ee8cc1Swenshuai.xi 
HAL_TSP_PidFlt_SetFltSrcStreamID(MS_U32 u32EngId,MS_U32 u32PidFltId,MS_U32 u32SrcStrId)1154*53ee8cc1Swenshuai.xi void HAL_TSP_PidFlt_SetFltSrcStreamID(MS_U32 u32EngId, MS_U32 u32PidFltId, MS_U32 u32SrcStrId)
1155*53ee8cc1Swenshuai.xi {
1156*53ee8cc1Swenshuai.xi     REG_PidFlt* pPidFilter = _HAL_TSP_PIDFLT_H(u32EngId, u32PidFltId);
1157*53ee8cc1Swenshuai.xi     HAL_REG32_IndW((REG32 *)pPidFilter, (HAL_REG32_IndR((REG32 *)pPidFilter) & ~TSP_PIDFLT_IN_SRC_MASK) | ((u32SrcStrId << TSP_PIDFLT_IN_SRC_SHFT) & TSP_PIDFLT_IN_SRC_MASK));
1158*53ee8cc1Swenshuai.xi }
1159*53ee8cc1Swenshuai.xi 
HAL_TSP_PidFlt_SetHWPcrPid(MS_U32 u32EngId,MS_U32 u32PID)1160*53ee8cc1Swenshuai.xi void HAL_TSP_PidFlt_SetHWPcrPid(MS_U32 u32EngId, MS_U32 u32PID)
1161*53ee8cc1Swenshuai.xi {
1162*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&(_TspCtrl3[0].PIDFLR_PCR[u32EngId]), (_HAL_REG32_R(&(_TspCtrl3[0].PIDFLR_PCR[u32EngId])) & ~TSP_PIDFLT_PCR_PID_MASK) | u32PID);
1163*53ee8cc1Swenshuai.xi }
1164*53ee8cc1Swenshuai.xi 
HAL_TSP_PidFlt_GetHWPcrPid(MS_U32 u32EngId)1165*53ee8cc1Swenshuai.xi MS_U32  HAL_TSP_PidFlt_GetHWPcrPid(MS_U32 u32EngId)
1166*53ee8cc1Swenshuai.xi {
1167*53ee8cc1Swenshuai.xi     return (_HAL_REG32_R(&_TspCtrl3[0].PIDFLR_PCR[u32EngId]) & TSP_PIDFLT_PCR_PID_MASK);
1168*53ee8cc1Swenshuai.xi }
1169*53ee8cc1Swenshuai.xi 
HAL_TSP_PidFlt_HWPcrFlt_Enable(MS_U32 u32EngId,MS_BOOL bEnable)1170*53ee8cc1Swenshuai.xi void HAL_TSP_PidFlt_HWPcrFlt_Enable(MS_U32 u32EngId, MS_BOOL bEnable)
1171*53ee8cc1Swenshuai.xi {
1172*53ee8cc1Swenshuai.xi     if(bEnable)
1173*53ee8cc1Swenshuai.xi     {
1174*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&(_TspCtrl3[0].PIDFLR_PCR[u32EngId]),
1175*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl3[0].PIDFLR_PCR[u32EngId]), TSP_PIDFLT_PCR_EN));
1176*53ee8cc1Swenshuai.xi     }
1177*53ee8cc1Swenshuai.xi     else
1178*53ee8cc1Swenshuai.xi     {
1179*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&(_TspCtrl3[0].PIDFLR_PCR[u32EngId]),
1180*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG32_R(&(_TspCtrl3[0].PIDFLR_PCR[u32EngId])), TSP_PIDFLT_PCR_EN));
1181*53ee8cc1Swenshuai.xi     }
1182*53ee8cc1Swenshuai.xi }
1183*53ee8cc1Swenshuai.xi 
1184*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1185*53ee8cc1Swenshuai.xi // For section filter part
1186*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
HAL_TSP_SecFlt_SetType(MS_U32 u32EngId,MS_U32 u32SecFltId,MS_U32 u32FltType)1187*53ee8cc1Swenshuai.xi void HAL_TSP_SecFlt_SetType(MS_U32 u32EngId, MS_U32 u32SecFltId, MS_U32 u32FltType)
1188*53ee8cc1Swenshuai.xi {
1189*53ee8cc1Swenshuai.xi     REG_SecFlt* pSecFilter = _HAL_TSP_SECFLT(u32EngId, u32SecFltId);
1190*53ee8cc1Swenshuai.xi     HAL_REG32_IndW((REG32 *)&pSecFilter->Ctrl, (HAL_REG32_IndR((REG32 *)&pSecFilter->Ctrl) & ~TSP_SECFLT_TYPE_MASK) | (u32FltType << TSP_SECFLT_TYPE_SHFT));
1191*53ee8cc1Swenshuai.xi }
1192*53ee8cc1Swenshuai.xi 
HAL_TSP_SecFlt_ResetState(MS_U32 u32EngId,MS_U32 u32SecFltId)1193*53ee8cc1Swenshuai.xi void HAL_TSP_SecFlt_ResetState(MS_U32 u32EngId, MS_U32 u32SecFltId)
1194*53ee8cc1Swenshuai.xi {
1195*53ee8cc1Swenshuai.xi     REG_SecFlt* pSecFilter = _HAL_TSP_SECFLT(u32EngId, u32SecFltId);
1196*53ee8cc1Swenshuai.xi     HAL_REG32_IndW((REG32 *)&pSecFilter->Ctrl, HAL_REG32_IndR((REG32 *)&pSecFilter->Ctrl) & ~(TSP_SECFLT_STATE_MASK));
1197*53ee8cc1Swenshuai.xi }
1198*53ee8cc1Swenshuai.xi 
HAL_TSP_SecFlt_SetRmnCount(MS_U32 u32EngId,MS_U32 u32SecFltId,MS_U32 u32RmnCount)1199*53ee8cc1Swenshuai.xi void HAL_TSP_SecFlt_SetRmnCount(MS_U32 u32EngId, MS_U32 u32SecFltId, MS_U32 u32RmnCount)
1200*53ee8cc1Swenshuai.xi {
1201*53ee8cc1Swenshuai.xi     REG_SecFlt* pSecFilter = (REG_SecFlt *)_HAL_TSP_SECFLT(u32EngId, u32SecFltId);
1202*53ee8cc1Swenshuai.xi     HAL_REG32_IndW((REG32 *)&pSecFilter->RmnReqCnt, (HAL_REG32_IndR((REG32 *)&pSecFilter->RmnReqCnt) & ~TSP_SECFLT_RMNCNT_MASK) |
1203*53ee8cc1Swenshuai.xi                                     ((u32RmnCount << TSP_SECFLT_RMNCNT_SHFT) & TSP_SECFLT_RMNCNT_MASK));
1204*53ee8cc1Swenshuai.xi }
1205*53ee8cc1Swenshuai.xi 
HAL_TSP_SecFlt_ClrCtrl(MS_U32 u32EngId,MS_U32 u32SecFltId)1206*53ee8cc1Swenshuai.xi void HAL_TSP_SecFlt_ClrCtrl(MS_U32 u32EngId, MS_U32 u32SecFltId)
1207*53ee8cc1Swenshuai.xi {
1208*53ee8cc1Swenshuai.xi     REG_SecFlt* pSecFilter = _HAL_TSP_SECFLT(u32EngId, u32SecFltId);
1209*53ee8cc1Swenshuai.xi     HAL_REG32_IndW((REG32 *)&pSecFilter->Ctrl, 0);
1210*53ee8cc1Swenshuai.xi }
1211*53ee8cc1Swenshuai.xi 
1212*53ee8cc1Swenshuai.xi #define ADDR_SWINT2_L           (_virtRegBase+ 0x2db4UL)
1213*53ee8cc1Swenshuai.xi #define ADDR_SWINT2_H           (_virtRegBase+ 0x2db8UL)
HAL_TSP_SW_INT_STATUS(void)1214*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_SW_INT_STATUS(void)
1215*53ee8cc1Swenshuai.xi {
1216*53ee8cc1Swenshuai.xi     if (_bIsHK)
1217*53ee8cc1Swenshuai.xi     {
1218*53ee8cc1Swenshuai.xi         return _HAL_REG32_R(&_TspCtrl[0].SwInt_Stat);
1219*53ee8cc1Swenshuai.xi     }
1220*53ee8cc1Swenshuai.xi     else
1221*53ee8cc1Swenshuai.xi     {
1222*53ee8cc1Swenshuai.xi         MS_U32 u32SwIntStatus = (MS_U32)(REG16_T(ADDR_SWINT2_L) & 0xFFFFUL);
1223*53ee8cc1Swenshuai.xi         u32SwIntStatus |= (((MS_U32)(REG16_T(ADDR_SWINT2_H) & 0xFFFFUL)) << 16UL);
1224*53ee8cc1Swenshuai.xi         return u32SwIntStatus;
1225*53ee8cc1Swenshuai.xi     }
1226*53ee8cc1Swenshuai.xi }
1227*53ee8cc1Swenshuai.xi #undef ADDR_SWINT2_L
1228*53ee8cc1Swenshuai.xi #undef ADDR_SWINT2_H
1229*53ee8cc1Swenshuai.xi 
1230*53ee8cc1Swenshuai.xi // match mask --> 0 will compare
HAL_TSP_SecFlt_SetMask(MS_U32 u32EngId,MS_U32 u32SecFltId,MS_U8 * pu8Mask)1231*53ee8cc1Swenshuai.xi void HAL_TSP_SecFlt_SetMask(MS_U32 u32EngId, MS_U32 u32SecFltId, MS_U8 *pu8Mask)
1232*53ee8cc1Swenshuai.xi {
1233*53ee8cc1Swenshuai.xi     MS_U32 i;
1234*53ee8cc1Swenshuai.xi     MS_U32 u32Temp;
1235*53ee8cc1Swenshuai.xi     MS_U32 j;
1236*53ee8cc1Swenshuai.xi     REG_SecFlt* pSecFilter = (REG_SecFlt *)_HAL_TSP_SECFLT(u32EngId, u32SecFltId);
1237*53ee8cc1Swenshuai.xi     for (i = 0; i < (TSP_FILTER_DEPTH/sizeof(MS_U32)); i++)
1238*53ee8cc1Swenshuai.xi     {
1239*53ee8cc1Swenshuai.xi         j = (i<< 2UL);
1240*53ee8cc1Swenshuai.xi         u32Temp =  (pu8Mask[j]) | (pu8Mask[j+ 1] << 8UL) | (pu8Mask[j+ 2] << 16UL)| (pu8Mask[j+ 3] << 24UL);
1241*53ee8cc1Swenshuai.xi         HAL_REG32_IndW((REG32 *)&pSecFilter->Mask[i], u32Temp);
1242*53ee8cc1Swenshuai.xi     }
1243*53ee8cc1Swenshuai.xi }
1244*53ee8cc1Swenshuai.xi 
1245*53ee8cc1Swenshuai.xi // not match mask --> 1 will compare
HAL_TSP_SecFlt_SetNMask(MS_U32 u32EngId,MS_U32 u32SecFltId,MS_U8 * pu8NMask)1246*53ee8cc1Swenshuai.xi void HAL_TSP_SecFlt_SetNMask(MS_U32 u32EngId, MS_U32 u32SecFltId, MS_U8 *pu8NMask)
1247*53ee8cc1Swenshuai.xi {
1248*53ee8cc1Swenshuai.xi     MS_U32 u32Temp;
1249*53ee8cc1Swenshuai.xi 
1250*53ee8cc1Swenshuai.xi     // fix using #17 section filter, fw als using filter #17 for NMask pattern writing
1251*53ee8cc1Swenshuai.xi     REG_SecFlt* ptempSecFlt = _HAL_TSP_SECFLT(u32EngId, TSP_NMATCH_FLTID);
1252*53ee8cc1Swenshuai.xi 
1253*53ee8cc1Swenshuai.xi     u32Temp =  (pu8NMask[0x0]) | (pu8NMask[0x1] << 8UL) | (pu8NMask[0x2] << 16UL)| (pu8NMask[0x3] << 24UL);
1254*53ee8cc1Swenshuai.xi     HAL_REG32_IndW(&(ptempSecFlt->Match[0]), u32Temp);
1255*53ee8cc1Swenshuai.xi 
1256*53ee8cc1Swenshuai.xi     u32Temp =  (pu8NMask[0x4]) | (pu8NMask[0x5] << 8UL) | (pu8NMask[0x6] << 16UL)| (pu8NMask[0x7] << 24UL);
1257*53ee8cc1Swenshuai.xi     HAL_REG32_IndW(&(ptempSecFlt->Match[1]), u32Temp);
1258*53ee8cc1Swenshuai.xi 
1259*53ee8cc1Swenshuai.xi     u32Temp =  (pu8NMask[0x8]) | (pu8NMask[0x9] << 8UL) | (pu8NMask[0xa] << 16UL)| (pu8NMask[0xb] << 24UL);
1260*53ee8cc1Swenshuai.xi     HAL_REG32_IndW(&(ptempSecFlt->Match[2]), u32Temp);
1261*53ee8cc1Swenshuai.xi 
1262*53ee8cc1Swenshuai.xi     u32Temp =  (pu8NMask[0xc]) | (pu8NMask[0xd] << 8UL) | (pu8NMask[0xe] << 16UL)| (pu8NMask[0xf] << 24UL);
1263*53ee8cc1Swenshuai.xi     HAL_REG32_IndW(&(ptempSecFlt->Match[3]), u32Temp);
1264*53ee8cc1Swenshuai.xi 
1265*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, TSP_MCU_CMD_NMATCH | u32SecFltId);
1266*53ee8cc1Swenshuai.xi 
1267*53ee8cc1Swenshuai.xi     while (0UL != _HAL_REG32_R(&_TspCtrl[0].MCU_Cmd));
1268*53ee8cc1Swenshuai.xi }
1269*53ee8cc1Swenshuai.xi 
HAL_TSP_SecFlt_SetMatch(MS_U32 u32EngId,MS_U32 u32SecFltId,MS_U8 * pu8Match)1270*53ee8cc1Swenshuai.xi void HAL_TSP_SecFlt_SetMatch(MS_U32 u32EngId, MS_U32 u32SecFltId, MS_U8 *pu8Match)
1271*53ee8cc1Swenshuai.xi {
1272*53ee8cc1Swenshuai.xi     MS_U32 i;
1273*53ee8cc1Swenshuai.xi     MS_U32 u32Temp;
1274*53ee8cc1Swenshuai.xi     MS_U32 j;
1275*53ee8cc1Swenshuai.xi 
1276*53ee8cc1Swenshuai.xi     REG_SecFlt* pSecFilter = _HAL_TSP_SECFLT(u32EngId, u32SecFltId);
1277*53ee8cc1Swenshuai.xi     for (i = 0; i < (TSP_FILTER_DEPTH/sizeof(MS_U32)); i++)
1278*53ee8cc1Swenshuai.xi     {
1279*53ee8cc1Swenshuai.xi         j = (i<< 2UL);
1280*53ee8cc1Swenshuai.xi         u32Temp =  (pu8Match[j]) | (pu8Match[j+ 1] << 8UL) | (pu8Match[j+ 2] << 16UL)| (pu8Match[j+ 3] << 24UL);
1281*53ee8cc1Swenshuai.xi         HAL_REG32_IndW((REG32 *)&pSecFilter->Match[i], u32Temp);
1282*53ee8cc1Swenshuai.xi     }
1283*53ee8cc1Swenshuai.xi }
1284*53ee8cc1Swenshuai.xi 
HAL_TSP_SecFlt_SetReqCount(MS_U32 u32EngId,MS_U32 u32SecFltId,MS_U32 u32ReqCount)1285*53ee8cc1Swenshuai.xi void HAL_TSP_SecFlt_SetReqCount(MS_U32 u32EngId, MS_U32 u32SecFltId, MS_U32 u32ReqCount)
1286*53ee8cc1Swenshuai.xi {
1287*53ee8cc1Swenshuai.xi     REG_SecFlt* pSecFilter = _HAL_TSP_SECFLT(u32EngId, u32SecFltId);
1288*53ee8cc1Swenshuai.xi 
1289*53ee8cc1Swenshuai.xi     HAL_REG32_IndW((REG32 *)&pSecFilter->RmnReqCnt, (HAL_REG32_IndR((REG32 *)&pSecFilter->RmnReqCnt) & ~TSP_SECFLT_REQCNT_MASK) |
1290*53ee8cc1Swenshuai.xi                                     ((u32ReqCount << TSP_SECFLT_REQCNT_SHFT) & TSP_SECFLT_REQCNT_MASK));
1291*53ee8cc1Swenshuai.xi }
1292*53ee8cc1Swenshuai.xi 
HAL_TSP_SecFlt_SetMode(MS_U32 u32EngId,MS_U32 u32SecFltId,MS_U32 u32SecFltMode)1293*53ee8cc1Swenshuai.xi void HAL_TSP_SecFlt_SetMode(MS_U32 u32EngId, MS_U32 u32SecFltId, MS_U32 u32SecFltMode)
1294*53ee8cc1Swenshuai.xi {
1295*53ee8cc1Swenshuai.xi     REG_SecFlt* pSecFilter = _HAL_TSP_SECFLT(u32EngId, u32SecFltId);
1296*53ee8cc1Swenshuai.xi     HAL_REG32_IndW((REG32 *)&pSecFilter->Ctrl, (HAL_REG32_IndR((REG32 *)&pSecFilter->Ctrl) & ~TSP_SECFLT_MODE_MASK) | ((u32SecFltMode << TSP_SECFLT_MODE_SHFT) & TSP_SECFLT_MODE_MASK));
1297*53ee8cc1Swenshuai.xi }
1298*53ee8cc1Swenshuai.xi 
HAL_TSP_SecFlt_GetCRC32(MS_U32 u32EngId,MS_U32 u32SecFltId)1299*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_SecFlt_GetCRC32(MS_U32 u32EngId, MS_U32 u32SecFltId)
1300*53ee8cc1Swenshuai.xi {
1301*53ee8cc1Swenshuai.xi     REG_SecFlt* pSecFilter = _HAL_TSP_SECFLT(u32EngId, u32SecFltId);
1302*53ee8cc1Swenshuai.xi     return HAL_REG32_IndR((REG32 *)&pSecFilter->CRC32);
1303*53ee8cc1Swenshuai.xi }
1304*53ee8cc1Swenshuai.xi 
HAL_TSP_SecFlt_GetState(MS_U32 u32EngId,MS_U32 u32SecFltId)1305*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_SecFlt_GetState(MS_U32 u32EngId, MS_U32 u32SecFltId)
1306*53ee8cc1Swenshuai.xi {
1307*53ee8cc1Swenshuai.xi     REG_SecFlt* pSecFilter = _HAL_TSP_SECFLT(u32EngId, u32SecFltId);
1308*53ee8cc1Swenshuai.xi     return ((HAL_REG32_IndR((REG32 *)&pSecFilter->Ctrl) & TSP_SECFLT_STATE_MASK) >> TSP_SECFLT_STATE_SHFT);
1309*53ee8cc1Swenshuai.xi }
1310*53ee8cc1Swenshuai.xi 
HAL_TSP_SecFlt_GetMode(MS_U32 u32EngId,MS_U32 u32SecFltId)1311*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_SecFlt_GetMode(MS_U32 u32EngId, MS_U32 u32SecFltId)
1312*53ee8cc1Swenshuai.xi {
1313*53ee8cc1Swenshuai.xi     REG_SecFlt* pSecFilter = _HAL_TSP_SECFLT(u32EngId, u32SecFltId);
1314*53ee8cc1Swenshuai.xi     return ((HAL_REG32_IndR((REG32 *)&pSecFilter->Ctrl) & TSP_SECFLT_MODE_MASK) >> TSP_SECFLT_MODE_SHFT);
1315*53ee8cc1Swenshuai.xi }
1316*53ee8cc1Swenshuai.xi 
HAL_TSP_SecFlt_PcrReset(MS_U32 u32EngId,MS_U32 u32SecFltId)1317*53ee8cc1Swenshuai.xi void HAL_TSP_SecFlt_PcrReset(MS_U32 u32EngId, MS_U32 u32SecFltId)
1318*53ee8cc1Swenshuai.xi {
1319*53ee8cc1Swenshuai.xi     REG_SecFlt* pSecFilter = _HAL_TSP_SECFLT(u32EngId, u32SecFltId);
1320*53ee8cc1Swenshuai.xi     HAL_REG32_IndW((REG32 *)&pSecFilter->Ctrl, HAL_REG32_IndR((REG32 *)&pSecFilter->Ctrl) | TSP_SECFLT_PCRRST);
1321*53ee8cc1Swenshuai.xi }
1322*53ee8cc1Swenshuai.xi 
HAL_TSP_SecFlt_VerReset(MS_U32 u32SecFltId)1323*53ee8cc1Swenshuai.xi void HAL_TSP_SecFlt_VerReset(MS_U32 u32SecFltId)
1324*53ee8cc1Swenshuai.xi {
1325*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, TSP_MCU_CMD_VER_RESET | u32SecFltId);
1326*53ee8cc1Swenshuai.xi     while (0UL != _HAL_REG32_R(&_TspCtrl[0].MCU_Cmd));
1327*53ee8cc1Swenshuai.xi }
1328*53ee8cc1Swenshuai.xi 
HAL_TSP_SecFlt_SetDataAddr(MS_PHY phyDataAddr)1329*53ee8cc1Swenshuai.xi void HAL_TSP_SecFlt_SetDataAddr(MS_PHY phyDataAddr)
1330*53ee8cc1Swenshuai.xi {
1331*53ee8cc1Swenshuai.xi     MS_PHY phyAddr = phyDataAddr - _HAL_TSP_MIU_OFFSET(phyDataAddr);
1332*53ee8cc1Swenshuai.xi     MS_U32 u32cmd = TSP_MCU_CMD_MEM_HIGH_ADDR | ((((MS_U32)phyAddr) & 0xFFFF0000UL) >> 16);
1333*53ee8cc1Swenshuai.xi 
1334*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, u32cmd);
1335*53ee8cc1Swenshuai.xi     while (0 != _HAL_REG32_R(&_TspCtrl[0].MCU_Cmd));
1336*53ee8cc1Swenshuai.xi 
1337*53ee8cc1Swenshuai.xi     u32cmd = TSP_MCU_CMD_MEM_LOW_ADDR | (((MS_U32)phyAddr) & 0xFFFFUL);
1338*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, u32cmd);
1339*53ee8cc1Swenshuai.xi     while (0 != _HAL_REG32_R(&_TspCtrl[0].MCU_Cmd));
1340*53ee8cc1Swenshuai.xi }
1341*53ee8cc1Swenshuai.xi 
1342*53ee8cc1Swenshuai.xi 
1343*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1344*53ee8cc1Swenshuai.xi //  For section buffer part
1345*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1346*53ee8cc1Swenshuai.xi // To avoid SW read hidden HW byte enable information.
1347*53ee8cc1Swenshuai.xi #define _TSP_SEC_BUF_ADDR_START(pSecFilter)     (TSP_SECFLT_BUFSTART_MASK & HAL_REG32_IndR((REG32 *)&((pSecFilter)->BufStart)))
1348*53ee8cc1Swenshuai.xi 
HAL_TSP_SecBuf_SetBuffer(MS_U32 u32EngId,MS_U32 u32SecBufId,MS_PHY phyStartAddr,MS_U32 u32BufSize)1349*53ee8cc1Swenshuai.xi void HAL_TSP_SecBuf_SetBuffer(MS_U32 u32EngId, MS_U32 u32SecBufId, MS_PHY phyStartAddr, MS_U32 u32BufSize)
1350*53ee8cc1Swenshuai.xi {
1351*53ee8cc1Swenshuai.xi     MS_PHY phyAddr = 0UL;
1352*53ee8cc1Swenshuai.xi 
1353*53ee8cc1Swenshuai.xi     _phySecBufMiuOffset = _HAL_TSP_MIU_OFFSET(phyStartAddr);
1354*53ee8cc1Swenshuai.xi 
1355*53ee8cc1Swenshuai.xi     phyAddr = phyStartAddr - _phySecBufMiuOffset;
1356*53ee8cc1Swenshuai.xi 
1357*53ee8cc1Swenshuai.xi     REG_SecFlt* pSecBuf = _HAL_TSP_SECFLT(u32EngId, u32SecBufId);
1358*53ee8cc1Swenshuai.xi     HAL_REG32_IndW((REG32 *)&pSecBuf->BufStart, (MS_U32)phyAddr);
1359*53ee8cc1Swenshuai.xi     HAL_REG32_IndW((REG32 *)&pSecBuf->BufEnd, ((MS_U32)phyAddr) + u32BufSize);
1360*53ee8cc1Swenshuai.xi }
1361*53ee8cc1Swenshuai.xi 
HAL_TSP_SecBuf_SetBufRead(MS_U32 u32EngId,MS_U32 u32SecBufId,MS_PHY phyReadAddr)1362*53ee8cc1Swenshuai.xi void HAL_TSP_SecBuf_SetBufRead(MS_U32 u32EngId, MS_U32 u32SecBufId, MS_PHY phyReadAddr)
1363*53ee8cc1Swenshuai.xi {
1364*53ee8cc1Swenshuai.xi     REG_SecFlt* pSecBuf = _HAL_TSP_SECFLT(u32EngId, u32SecBufId);
1365*53ee8cc1Swenshuai.xi 
1366*53ee8cc1Swenshuai.xi     _phySecBufMiuOffset = _HAL_TSP_MIU_OFFSET(phyReadAddr);
1367*53ee8cc1Swenshuai.xi     HAL_REG32_IndW((REG32 *)&pSecBuf->BufRead, (MS_U32)(phyReadAddr-_phySecBufMiuOffset));
1368*53ee8cc1Swenshuai.xi }
1369*53ee8cc1Swenshuai.xi 
HAL_TSP_SecBuf_GetBufStart(MS_U32 u32EngId,MS_U32 u32SecBufId)1370*53ee8cc1Swenshuai.xi MS_PHY HAL_TSP_SecBuf_GetBufStart(MS_U32 u32EngId, MS_U32 u32SecBufId)
1371*53ee8cc1Swenshuai.xi {
1372*53ee8cc1Swenshuai.xi     REG_SecFlt* pSecBuf = _HAL_TSP_SECFLT(u32EngId, u32SecBufId);
1373*53ee8cc1Swenshuai.xi     return (((MS_PHY)_TSP_SEC_BUF_ADDR_START(pSecBuf) & 0xFFFFFFFFUL) + _phySecBufMiuOffset);
1374*53ee8cc1Swenshuai.xi }
1375*53ee8cc1Swenshuai.xi 
HAL_TSP_SecBuf_GetBufEnd(MS_U32 u32EngId,MS_U32 u32SecBufId)1376*53ee8cc1Swenshuai.xi MS_PHY HAL_TSP_SecBuf_GetBufEnd(MS_U32 u32EngId, MS_U32 u32SecBufId)
1377*53ee8cc1Swenshuai.xi {
1378*53ee8cc1Swenshuai.xi     REG_SecFlt* pSecBuf = _HAL_TSP_SECFLT(u32EngId, u32SecBufId);
1379*53ee8cc1Swenshuai.xi     return (((MS_PHY)HAL_REG32_IndR((REG32 *)&pSecBuf->BufEnd) & 0xFFFFFFFFUL) + _phySecBufMiuOffset);
1380*53ee8cc1Swenshuai.xi }
1381*53ee8cc1Swenshuai.xi 
HAL_TSP_SecBuf_GetBufCur(MS_U32 u32EngId,MS_U32 u32SecBufId)1382*53ee8cc1Swenshuai.xi MS_PHY HAL_TSP_SecBuf_GetBufCur(MS_U32 u32EngId, MS_U32 u32SecBufId)
1383*53ee8cc1Swenshuai.xi {
1384*53ee8cc1Swenshuai.xi     REG_SecFlt* pSecBuf = _HAL_TSP_SECFLT(u32EngId, u32SecBufId);
1385*53ee8cc1Swenshuai.xi     return (((MS_PHY)HAL_REG32_IndR((REG32 *)&pSecBuf->BufCur) & 0xFFFFFFFFUL) + _phySecBufMiuOffset);
1386*53ee8cc1Swenshuai.xi }
1387*53ee8cc1Swenshuai.xi 
HAL_TSP_SecBuf_ResetBuffer(MS_U32 u32EngId,MS_U32 u32SecBufId)1388*53ee8cc1Swenshuai.xi void HAL_TSP_SecBuf_ResetBuffer(MS_U32 u32EngId, MS_U32 u32SecBufId)
1389*53ee8cc1Swenshuai.xi {
1390*53ee8cc1Swenshuai.xi     REG_SecFlt* pSecBuf = _HAL_TSP_SECFLT(u32EngId, u32SecBufId);
1391*53ee8cc1Swenshuai.xi 
1392*53ee8cc1Swenshuai.xi     HAL_REG32_IndW((REG32 *)&pSecBuf->BufCur, _TSP_SEC_BUF_ADDR_START(pSecBuf));
1393*53ee8cc1Swenshuai.xi     HAL_REG32_IndW((REG32 *)&pSecBuf->BufRead, _TSP_SEC_BUF_ADDR_START(pSecBuf));
1394*53ee8cc1Swenshuai.xi     HAL_REG32_IndW((REG32 *)&pSecBuf->BufWrite, _TSP_SEC_BUF_ADDR_START(pSecBuf));
1395*53ee8cc1Swenshuai.xi }
1396*53ee8cc1Swenshuai.xi 
HAL_TSP_SecBuf_GetBufRead(MS_U32 u32EngId,MS_U32 u32SecBufId)1397*53ee8cc1Swenshuai.xi MS_PHY HAL_TSP_SecBuf_GetBufRead(MS_U32 u32EngId, MS_U32 u32SecBufId)
1398*53ee8cc1Swenshuai.xi {
1399*53ee8cc1Swenshuai.xi     REG_SecFlt* pSecBuf = _HAL_TSP_SECFLT(u32EngId, u32SecBufId);
1400*53ee8cc1Swenshuai.xi     return (((MS_PHY)HAL_REG32_IndR((REG32 *)&pSecBuf->BufRead) & 0xFFFFFFFFUL) + _phySecBufMiuOffset);
1401*53ee8cc1Swenshuai.xi }
1402*53ee8cc1Swenshuai.xi 
HAL_TSP_SecBuf_GetBufWrite(MS_U32 u32EngId,MS_U32 u32SecBufId)1403*53ee8cc1Swenshuai.xi MS_PHY HAL_TSP_SecBuf_GetBufWrite(MS_U32 u32EngId, MS_U32 u32SecBufId)
1404*53ee8cc1Swenshuai.xi {
1405*53ee8cc1Swenshuai.xi     REG_SecFlt* pSecBuf = _HAL_TSP_SECFLT(u32EngId, u32SecBufId);
1406*53ee8cc1Swenshuai.xi     return (((MS_PHY)HAL_REG32_IndR((REG32 *)&pSecBuf->BufWrite) & 0xFFFFFFFFUL) + _phySecBufMiuOffset);
1407*53ee8cc1Swenshuai.xi }
1408*53ee8cc1Swenshuai.xi 
1409*53ee8cc1Swenshuai.xi #undef _TSP_SEC_BUF_ADDR_START
1410*53ee8cc1Swenshuai.xi 
HAL_TSP_SecBuf_SetBufRead_tmp(MS_U32 u32EngId,MS_U32 u32SecBufId,MS_PHY phyReadAddr)1411*53ee8cc1Swenshuai.xi void HAL_TSP_SecBuf_SetBufRead_tmp(MS_U32 u32EngId, MS_U32 u32SecBufId, MS_PHY phyReadAddr)
1412*53ee8cc1Swenshuai.xi {
1413*53ee8cc1Swenshuai.xi     REG_SecFlt* pSecBuf = _HAL_TSP_SECFLT(u32EngId, u32SecBufId);
1414*53ee8cc1Swenshuai.xi 
1415*53ee8cc1Swenshuai.xi     _phySecBufMiuOffset = _HAL_TSP_MIU_OFFSET(phyReadAddr);
1416*53ee8cc1Swenshuai.xi     HAL_REG32_IndW_tmp((REG32 *)&pSecBuf->BufRead, (MS_U32)(phyReadAddr-_phySecBufMiuOffset));
1417*53ee8cc1Swenshuai.xi }
1418*53ee8cc1Swenshuai.xi 
HAL_TSP_SecBuf_GetBufWrite_tmp(MS_U32 u32EngId,MS_U32 u32SecBufId)1419*53ee8cc1Swenshuai.xi MS_PHY HAL_TSP_SecBuf_GetBufWrite_tmp(MS_U32 u32EngId, MS_U32 u32SecBufId)
1420*53ee8cc1Swenshuai.xi {
1421*53ee8cc1Swenshuai.xi     REG_SecFlt* pSecBuf = _HAL_TSP_SECFLT(u32EngId, u32SecBufId);
1422*53ee8cc1Swenshuai.xi     return (((MS_PHY)HAL_REG32_IndR_tmp((REG32 *)&pSecBuf->BufWrite) & 0xFFFFFFFFUL) + _phySecBufMiuOffset);
1423*53ee8cc1Swenshuai.xi }
1424*53ee8cc1Swenshuai.xi 
1425*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1426*53ee8cc1Swenshuai.xi // For DMA part
1427*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1428*53ee8cc1Swenshuai.xi //[HW LIMIT][HW TODO] TsDma pause can not be access by TSP CPU
1429*53ee8cc1Swenshuai.xi //[HW LIMIT][HW TODO] TsDma pause it hard to control because read/write in different register
1430*53ee8cc1Swenshuai.xi //[HW LIMIT][HW TODO] When setting TsDma it should be disable interrupt
HAL_TSP_TsDma_SetDelay(MS_U32 u32Delay)1431*53ee8cc1Swenshuai.xi void HAL_TSP_TsDma_SetDelay(MS_U32 u32Delay)
1432*53ee8cc1Swenshuai.xi {
1433*53ee8cc1Swenshuai.xi     // Richard: the file in timer in Uranus is 24 bits.
1434*53ee8cc1Swenshuai.xi     //          to simplify the process, writing 32 bits directly.
1435*53ee8cc1Swenshuai.xi     //          HW will truncate the high 8 bits out, and use low 24 bits only (from Albert Lin)
1436*53ee8cc1Swenshuai.xi     if(u32Delay == 0UL)
1437*53ee8cc1Swenshuai.xi     {
1438*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].reg15b4,
1439*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg15b4), TSP_FILEIN_BYTETIMER_ENABLE));
1440*53ee8cc1Swenshuai.xi     }
1441*53ee8cc1Swenshuai.xi     else
1442*53ee8cc1Swenshuai.xi     {
1443*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].TsFileIn_Timer, (u32Delay & TSP_FILE_TIMER_MASK));
1444*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].reg15b4,
1445*53ee8cc1Swenshuai.xi             SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg15b4), TSP_FILEIN_BYTETIMER_ENABLE));
1446*53ee8cc1Swenshuai.xi     }
1447*53ee8cc1Swenshuai.xi 
1448*53ee8cc1Swenshuai.xi }
1449*53ee8cc1Swenshuai.xi 
HAL_TSP_CmdQ_TsDma_SetAddr(MS_PHY phyStreamAddr)1450*53ee8cc1Swenshuai.xi void HAL_TSP_CmdQ_TsDma_SetAddr(MS_PHY phyStreamAddr)
1451*53ee8cc1Swenshuai.xi {
1452*53ee8cc1Swenshuai.xi     _phyFIBufMiuOffset = _HAL_TSP_MIU_OFFSET(phyStreamAddr);
1453*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].TsDma_Addr, (MS_U32)(phyStreamAddr-_phyFIBufMiuOffset));
1454*53ee8cc1Swenshuai.xi }
1455*53ee8cc1Swenshuai.xi 
HAL_TSP_CmdQ_TsDma_SetSize(MS_U32 u32StreamSize)1456*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_CmdQ_TsDma_SetSize(MS_U32 u32StreamSize)
1457*53ee8cc1Swenshuai.xi {
1458*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].TsDma_Size, u32StreamSize);
1459*53ee8cc1Swenshuai.xi     return TRUE;
1460*53ee8cc1Swenshuai.xi }
1461*53ee8cc1Swenshuai.xi 
HAL_TSP_CmdQ_TsDma_Start(MS_U32 u32TsDmaCtrl)1462*53ee8cc1Swenshuai.xi void HAL_TSP_CmdQ_TsDma_Start(MS_U32 u32TsDmaCtrl)
1463*53ee8cc1Swenshuai.xi {
1464*53ee8cc1Swenshuai.xi     // enable filein byte timer
1465*53ee8cc1Swenshuai.xi     //_HAL_REG32_W(&_TspCtrl[0].reg15b4,
1466*53ee8cc1Swenshuai.xi     //        SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg15b4), TSP_FILEIN_BYTETIMER_ENABLE));
1467*53ee8cc1Swenshuai.xi     REG16_T(ADDR_MOBF_FILEIN) = _16MobfKey;
1468*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].TsDma_Ctrl_CmdQ, TSP_TSDMA_CTRL_START);
1469*53ee8cc1Swenshuai.xi }
1470*53ee8cc1Swenshuai.xi 
HAL_TSP_TsDma_Pause(void)1471*53ee8cc1Swenshuai.xi void HAL_TSP_TsDma_Pause(void)
1472*53ee8cc1Swenshuai.xi {
1473*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&_TspCtrl[0].TSP_Ctrl1,
1474*53ee8cc1Swenshuai.xi             SET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].TSP_Ctrl1), TSP_CTRL1_FILEIN_PAUSE));
1475*53ee8cc1Swenshuai.xi }
1476*53ee8cc1Swenshuai.xi 
HAL_TSP_TsDma_Resume(void)1477*53ee8cc1Swenshuai.xi void HAL_TSP_TsDma_Resume(void)
1478*53ee8cc1Swenshuai.xi {
1479*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&_TspCtrl[0].TSP_Ctrl1,
1480*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].TSP_Ctrl1), TSP_CTRL1_FILEIN_PAUSE));
1481*53ee8cc1Swenshuai.xi }
1482*53ee8cc1Swenshuai.xi 
HAL_TSP_CmdQ_TsDma_GetState(void)1483*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_CmdQ_TsDma_GetState(void)
1484*53ee8cc1Swenshuai.xi {
1485*53ee8cc1Swenshuai.xi     return (HAS_FLAG(_HAL_REG32_R(&_TspCtrl[0].TsDma_Ctrl_CmdQ), TSP_TSDMA_CTRL_START) |
1486*53ee8cc1Swenshuai.xi             (MS_U32)HAS_FLAG(_HAL_REG16_R(&_TspCtrl[0].TSP_Ctrl1), TSP_CTRL1_FILEIN_PAUSE));
1487*53ee8cc1Swenshuai.xi }
1488*53ee8cc1Swenshuai.xi 
HAL_TSP_CmdQ_EmptyCount(void)1489*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_CmdQ_EmptyCount(void)
1490*53ee8cc1Swenshuai.xi {
1491*53ee8cc1Swenshuai.xi     return (TSP_CMDQ_SIZE - ((_HAL_REG32_R(&_TspCtrl[0].TsDma_Ctrl_CmdQ) & TSP_CMDQ_CNT_MASK)>>TSP_CMDQ_CNT_SHFT));
1492*53ee8cc1Swenshuai.xi }
1493*53ee8cc1Swenshuai.xi 
HAL_TSP_SetCtrlMode(MS_U32 u32EngId,MS_U32 u32Mode,MS_U32 u32TsIfId)1494*53ee8cc1Swenshuai.xi void HAL_TSP_SetCtrlMode(MS_U32 u32EngId, MS_U32 u32Mode, MS_U32 u32TsIfId)
1495*53ee8cc1Swenshuai.xi {
1496*53ee8cc1Swenshuai.xi     // Control bits:
1497*53ee8cc1Swenshuai.xi     // TSP_CTRL_CPU_EN
1498*53ee8cc1Swenshuai.xi     // TSP_CTRL_SW_RST
1499*53ee8cc1Swenshuai.xi     // TSP_CTRL_MEM_DMA_EN
1500*53ee8cc1Swenshuai.xi 
1501*53ee8cc1Swenshuai.xi     // for file in related setting
1502*53ee8cc1Swenshuai.xi     if(u32Mode == 0UL)
1503*53ee8cc1Swenshuai.xi     {
1504*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[u32EngId].TSP_Ctrl,
1505*53ee8cc1Swenshuai.xi                 (_HAL_REG32_R(&_TspCtrl[u32EngId].TSP_Ctrl) & ~(TSP_CTRL_CPU_EN   |
1506*53ee8cc1Swenshuai.xi                                                                 TSP_CTRL_SW_RST   |
1507*53ee8cc1Swenshuai.xi                                                                 TSP_CTRL_TSFILE_EN)));
1508*53ee8cc1Swenshuai.xi         HAL_TSP_filein_enable(FALSE);
1509*53ee8cc1Swenshuai.xi     }
1510*53ee8cc1Swenshuai.xi     else
1511*53ee8cc1Swenshuai.xi     {
1512*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[u32EngId].TSP_Ctrl,
1513*53ee8cc1Swenshuai.xi                 (_HAL_REG32_R(&_TspCtrl[u32EngId].TSP_Ctrl) & ~(TSP_CTRL_CPU_EN   |
1514*53ee8cc1Swenshuai.xi                                                                 TSP_CTRL_SW_RST   |
1515*53ee8cc1Swenshuai.xi                                                                 //TSP_CTRL_TSFILE_EN |
1516*53ee8cc1Swenshuai.xi //[URANUS]                                                      TSP_CTRL_CLK_GATING_DISABLE |
1517*53ee8cc1Swenshuai.xi // @FIXME: Richard ignore this at this stage
1518*53ee8cc1Swenshuai.xi                                                                 0UL                  )) | u32Mode);
1519*53ee8cc1Swenshuai.xi         if(HAS_FLAG(u32Mode, TSP_CTRL_TSFILE_EN))
1520*53ee8cc1Swenshuai.xi             HAL_TSP_filein_enable(TRUE);
1521*53ee8cc1Swenshuai.xi     }
1522*53ee8cc1Swenshuai.xi 
1523*53ee8cc1Swenshuai.xi     if (TSP_IF_NUM > u32TsIfId)
1524*53ee8cc1Swenshuai.xi     {
1525*53ee8cc1Swenshuai.xi         _HAL_TSP_tsif_select(HAS_FLAG(u32Mode, (MS_U8)(u32TsIfId & 0xFFUL)));
1526*53ee8cc1Swenshuai.xi     }
1527*53ee8cc1Swenshuai.xi }
1528*53ee8cc1Swenshuai.xi 
1529*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1530*53ee8cc1Swenshuai.xi //  For PVR part
1531*53ee8cc1Swenshuai.xi //  0: PVR1      1: PVR2      2: PVR_CB
1532*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
HAL_TSP_PVR_SetBuffer(MS_U8 u8PVRId,MS_PHY phyBufStart0,MS_PHY phyBufStart1,MS_U32 u32BufSize0,MS_U32 u32BufSize1)1533*53ee8cc1Swenshuai.xi void HAL_TSP_PVR_SetBuffer(MS_U8 u8PVRId, MS_PHY phyBufStart0, MS_PHY phyBufStart1, MS_U32 u32BufSize0, MS_U32 u32BufSize1)
1534*53ee8cc1Swenshuai.xi {
1535*53ee8cc1Swenshuai.xi     #ifndef SECURE_PVR_ENABLE
1536*53ee8cc1Swenshuai.xi     MS_PHY  phyBufEnd = phyBufStart0 + u32BufSize0;
1537*53ee8cc1Swenshuai.xi     #endif   //SECURE_PVR_ENABLE
1538*53ee8cc1Swenshuai.xi 
1539*53ee8cc1Swenshuai.xi     switch(u8PVRId)
1540*53ee8cc1Swenshuai.xi     {
1541*53ee8cc1Swenshuai.xi         case 0:
1542*53ee8cc1Swenshuai.xi         default:
1543*53ee8cc1Swenshuai.xi             _phyPVRBufMiuOffset[0] = _HAL_TSP_MIU_OFFSET(phyBufStart0);
1544*53ee8cc1Swenshuai.xi 
1545*53ee8cc1Swenshuai.xi             #ifndef SECURE_PVR_ENABLE
1546*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].TsRec_Head, ((MS_U32)((phyBufStart0-_phyPVRBufMiuOffset[0])>> MIU_BUS)) & TSP_STR2MI2_ADDR_MASK);
1547*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].TsRec_Tail, ((MS_U32)((phyBufEnd-_phyPVRBufMiuOffset[0])>> MIU_BUS)) & TSP_STR2MI2_ADDR_MASK);
1548*53ee8cc1Swenshuai.xi 
1549*53ee8cc1Swenshuai.xi             phyBufEnd = phyBufStart1+ u32BufSize1;
1550*53ee8cc1Swenshuai.xi 
1551*53ee8cc1Swenshuai.xi #define ADDR_PVR_HEAD20         (_virtRegBase+ 0x2a04UL)
1552*53ee8cc1Swenshuai.xi #define ADDR_PVR_HEAD21         (_virtRegBase+ 0x2a08UL)
1553*53ee8cc1Swenshuai.xi #define ADDR_PVR_MID20          (_virtRegBase+ 0x2a0cUL)
1554*53ee8cc1Swenshuai.xi #define ADDR_PVR_MID21          (_virtRegBase+ 0x2a10UL)
1555*53ee8cc1Swenshuai.xi #define ADDR_PVR_TAIL20         (_virtRegBase+ 0x2a14UL)
1556*53ee8cc1Swenshuai.xi #define ADDR_PVR_TAIL21         (_virtRegBase+ 0x2a18UL)
1557*53ee8cc1Swenshuai.xi     REG16_T(ADDR_PVR_HEAD20)=   (MS_U16)(((phyBufStart1-_phyPVRBufMiuOffset[0])>> MIU_BUS) & (TSP_HW_PVR_BUF_HEAD20_MASK >> TSP_HW_PVR_BUF_HEAD20_SHFT));
1558*53ee8cc1Swenshuai.xi     REG16_T(ADDR_PVR_HEAD21)=   (MS_U16)(((phyBufStart1-_phyPVRBufMiuOffset[0])>> (MIU_BUS+ 16UL)) & TSP_HW_PVR_BUF_HEAD21_MASK);
1559*53ee8cc1Swenshuai.xi     REG16_T(ADDR_PVR_TAIL20)=   (MS_U16)(((phyBufEnd-_phyPVRBufMiuOffset[0])>> MIU_BUS) & (TSP_HW_PVR_BUF_TAIL20_MASK >> TSP_HW_PVR_BUF_TAIL20_SHFT));
1560*53ee8cc1Swenshuai.xi     REG16_T(ADDR_PVR_TAIL21)=   (MS_U16)(((phyBufEnd-_phyPVRBufMiuOffset[0])>> (MIU_BUS+ 16UL)) & TSP_HW_PVR_BUF_TAIL21_MASK);
1561*53ee8cc1Swenshuai.xi #undef ADDR_PVR_HEAD20
1562*53ee8cc1Swenshuai.xi #undef ADDR_PVR_HEAD21
1563*53ee8cc1Swenshuai.xi #undef ADDR_PVR_MID20
1564*53ee8cc1Swenshuai.xi #undef ADDR_PVR_MID21
1565*53ee8cc1Swenshuai.xi #undef ADDR_PVR_TAIL20
1566*53ee8cc1Swenshuai.xi #undef ADDR_PVR_TAIL21
1567*53ee8cc1Swenshuai.xi 
1568*53ee8cc1Swenshuai.xi             #endif //SECURE_PVR_ENABLE
1569*53ee8cc1Swenshuai.xi 
1570*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].reg15b4,
1571*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg15b4), TSP_PVR1_PINGPONG));
1572*53ee8cc1Swenshuai.xi             break;
1573*53ee8cc1Swenshuai.xi         case 1:
1574*53ee8cc1Swenshuai.xi             _phyPVRBufMiuOffset[1] = _HAL_TSP_MIU_OFFSET(phyBufStart0);
1575*53ee8cc1Swenshuai.xi 
1576*53ee8cc1Swenshuai.xi             #ifndef SECURE_PVR_ENABLE
1577*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].Str2mi_head1_pvr2, (MS_U32)(((phyBufStart0-_phyPVRBufMiuOffset[1])>> MIU_BUS) & TSP_STR2MI2_ADDR_MASK));
1578*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].Str2mi_tail1_pvr2, (MS_U32)(((phyBufEnd-_phyPVRBufMiuOffset[1])>> MIU_BUS) & TSP_STR2MI2_ADDR_MASK));
1579*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].Str2mi_head2_pvr2, (MS_U32)(((phyBufStart1-_phyPVRBufMiuOffset[1])>> MIU_BUS) & TSP_STR2MI2_ADDR_MASK));
1580*53ee8cc1Swenshuai.xi             phyBufEnd = phyBufStart1+ u32BufSize1;
1581*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].Str2mi_tail2_pvr2, (MS_U32)(((phyBufEnd-_phyPVRBufMiuOffset[1])>> MIU_BUS) & TSP_STR2MI2_ADDR_MASK));
1582*53ee8cc1Swenshuai.xi             #endif  //SECURE_PVR_ENABLE
1583*53ee8cc1Swenshuai.xi 
1584*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].PVR2_Config,
1585*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].PVR2_Config), TSP_PVR2_REG_PINGPONG_EN));
1586*53ee8cc1Swenshuai.xi             break;
1587*53ee8cc1Swenshuai.xi 
1588*53ee8cc1Swenshuai.xi     }
1589*53ee8cc1Swenshuai.xi 
1590*53ee8cc1Swenshuai.xi     // flush PVR buffer
1591*53ee8cc1Swenshuai.xi     HAL_TSP_PVR_WaitFlush(u8PVRId);
1592*53ee8cc1Swenshuai.xi }
1593*53ee8cc1Swenshuai.xi 
HAL_TSP_PVR_Enable(MS_U8 u8PVRId,MS_BOOL bEnable)1594*53ee8cc1Swenshuai.xi void HAL_TSP_PVR_Enable(MS_U8 u8PVRId, MS_BOOL bEnable)
1595*53ee8cc1Swenshuai.xi {
1596*53ee8cc1Swenshuai.xi     REG32 *pRegPVREn = 0;
1597*53ee8cc1Swenshuai.xi     REG32 *pRegTSIFEn = 0;
1598*53ee8cc1Swenshuai.xi     REG32 *pRegBurstLen = 0;
1599*53ee8cc1Swenshuai.xi     MS_U32 u32PVRFlag = 0, u32TSIFFlag = 0, u32BurstLen = 0, u32BurstMask = 0;
1600*53ee8cc1Swenshuai.xi 
1601*53ee8cc1Swenshuai.xi     //set burst len = 1
1602*53ee8cc1Swenshuai.xi     switch(u8PVRId)
1603*53ee8cc1Swenshuai.xi     {
1604*53ee8cc1Swenshuai.xi         case 0:
1605*53ee8cc1Swenshuai.xi         default:
1606*53ee8cc1Swenshuai.xi             pRegBurstLen = &_TspCtrl[0].reg15b4;
1607*53ee8cc1Swenshuai.xi             u32BurstLen  = TSP_BURST_LEN_4;
1608*53ee8cc1Swenshuai.xi             u32BurstMask = TSP_BURST_LEN_MASK;
1609*53ee8cc1Swenshuai.xi             pRegPVREn    = &_TspCtrl[0].Hw_Config4;
1610*53ee8cc1Swenshuai.xi             u32PVRFlag   = TSP_HW_CFG4_PVR_ENABLE;
1611*53ee8cc1Swenshuai.xi             pRegTSIFEn   = &_TspCtrl[0].Hw_Config4;
1612*53ee8cc1Swenshuai.xi             u32TSIFFlag  = TSP_HW_CFG4_TSIF1_ENABLE;
1613*53ee8cc1Swenshuai.xi             break;
1614*53ee8cc1Swenshuai.xi         case 1:
1615*53ee8cc1Swenshuai.xi             pRegBurstLen = &_TspCtrl[0].PVR2_Config;
1616*53ee8cc1Swenshuai.xi             u32BurstLen  = TSP_PVR2_BURST_LEN_4;
1617*53ee8cc1Swenshuai.xi             u32BurstMask = TSP_PVR2_BURST_LEN_MASK;
1618*53ee8cc1Swenshuai.xi             pRegPVREn    = &_TspCtrl[0].PVR2_Config;
1619*53ee8cc1Swenshuai.xi             u32PVRFlag   = TSP_PVR2_STR2MIU_EN;
1620*53ee8cc1Swenshuai.xi             pRegTSIFEn   = &_TspCtrl[0].PVR2_Config;
1621*53ee8cc1Swenshuai.xi             u32TSIFFlag  = TSP_TSIF2_ENABLE;
1622*53ee8cc1Swenshuai.xi             break;
1623*53ee8cc1Swenshuai.xi     }
1624*53ee8cc1Swenshuai.xi 
1625*53ee8cc1Swenshuai.xi     if (bEnable)
1626*53ee8cc1Swenshuai.xi     {
1627*53ee8cc1Swenshuai.xi         _HAL_REG32_W(pRegBurstLen, (_HAL_REG32_R(pRegBurstLen) & ~u32BurstMask) | u32BurstLen);
1628*53ee8cc1Swenshuai.xi         _HAL_REG32_W(pRegPVREn, SET_FLAG1(_HAL_REG32_R(pRegPVREn), u32PVRFlag));
1629*53ee8cc1Swenshuai.xi         _HAL_REG32_W(pRegTSIFEn, SET_FLAG1(_HAL_REG32_R(pRegTSIFEn), u32TSIFFlag));
1630*53ee8cc1Swenshuai.xi     }
1631*53ee8cc1Swenshuai.xi     else
1632*53ee8cc1Swenshuai.xi     {
1633*53ee8cc1Swenshuai.xi         _HAL_REG32_W(pRegPVREn, RESET_FLAG1(_HAL_REG32_R(pRegPVREn), u32PVRFlag));
1634*53ee8cc1Swenshuai.xi         //_HAL_REG32_W(pRegTSIFEn, RESET_FLAG1(_HAL_REG32_R(pRegTSIFEn), u32TSIFFlag));
1635*53ee8cc1Swenshuai.xi     }
1636*53ee8cc1Swenshuai.xi }
1637*53ee8cc1Swenshuai.xi 
1638*53ee8cc1Swenshuai.xi 
HAL_TSP_PVR_Reset(MS_U8 u8PVRIndex)1639*53ee8cc1Swenshuai.xi void HAL_TSP_PVR_Reset(MS_U8 u8PVRIndex)
1640*53ee8cc1Swenshuai.xi {
1641*53ee8cc1Swenshuai.xi     // Richard: @FIXME:
1642*53ee8cc1Swenshuai.xi     // Don't know PVR "reset" definition. call flush instead.
1643*53ee8cc1Swenshuai.xi     HAL_TSP_PVR_WaitFlush(u8PVRIndex);
1644*53ee8cc1Swenshuai.xi }
1645*53ee8cc1Swenshuai.xi 
1646*53ee8cc1Swenshuai.xi //Only PVR1 support Old record all mode, and must disable remove packet demux bit
1647*53ee8cc1Swenshuai.xi //0: PVR1   1: PVR2     3: PVRCB
HAL_TSP_PVR_All(MS_U8 u8PVRId,MS_BOOL bPvrAll,MS_BOOL bWithNull,MS_BOOL bOldMode)1648*53ee8cc1Swenshuai.xi void HAL_TSP_PVR_All(MS_U8 u8PVRId, MS_BOOL bPvrAll, MS_BOOL bWithNull, MS_BOOL bOldMode)
1649*53ee8cc1Swenshuai.xi {
1650*53ee8cc1Swenshuai.xi     REG32 *pReg = 0;
1651*53ee8cc1Swenshuai.xi     MS_U32 u32flag = 0;
1652*53ee8cc1Swenshuai.xi     REG32 *pRegPidBypass = 0;
1653*53ee8cc1Swenshuai.xi     MS_U32 u32PidBypassFlag = 0;
1654*53ee8cc1Swenshuai.xi 
1655*53ee8cc1Swenshuai.xi     switch(u8PVRId)
1656*53ee8cc1Swenshuai.xi     {
1657*53ee8cc1Swenshuai.xi         case 0:
1658*53ee8cc1Swenshuai.xi         default:
1659*53ee8cc1Swenshuai.xi             pRegPidBypass = &_TspCtrl[0].reg15b4;
1660*53ee8cc1Swenshuai.xi             u32PidBypassFlag = TSP_PVR_PID_BYPASS;
1661*53ee8cc1Swenshuai.xi             pReg = &_TspCtrl[0].HW2_Config3;
1662*53ee8cc1Swenshuai.xi             if(bOldMode)
1663*53ee8cc1Swenshuai.xi                 u32flag = TSP_REC_ALL_OLD;
1664*53ee8cc1Swenshuai.xi             else
1665*53ee8cc1Swenshuai.xi             {
1666*53ee8cc1Swenshuai.xi                 u32flag = TSP_PVR1_REC_ALL_EN;
1667*53ee8cc1Swenshuai.xi                 if(bWithNull)
1668*53ee8cc1Swenshuai.xi                     u32flag |= TSP_REC_NULL;
1669*53ee8cc1Swenshuai.xi             }
1670*53ee8cc1Swenshuai.xi             break;
1671*53ee8cc1Swenshuai.xi         case 1:
1672*53ee8cc1Swenshuai.xi             pRegPidBypass = &_TspCtrl[0].reg15b4;
1673*53ee8cc1Swenshuai.xi             u32PidBypassFlag = TSP_PVR_PID_BYPASS2;
1674*53ee8cc1Swenshuai.xi             pReg = &_TspCtrl[0].HW2_Config3;
1675*53ee8cc1Swenshuai.xi             u32flag = TSP_PVR2_REC_ALL_EN;
1676*53ee8cc1Swenshuai.xi             if(bWithNull)
1677*53ee8cc1Swenshuai.xi                 u32flag |= TSP_REC_NULL;
1678*53ee8cc1Swenshuai.xi             break;
1679*53ee8cc1Swenshuai.xi     }
1680*53ee8cc1Swenshuai.xi 
1681*53ee8cc1Swenshuai.xi     _HAL_REG32_W(pRegPidBypass, SET_FLAG1(_HAL_REG32_R(pRegPidBypass), u32PidBypassFlag));
1682*53ee8cc1Swenshuai.xi 
1683*53ee8cc1Swenshuai.xi     if (bPvrAll)
1684*53ee8cc1Swenshuai.xi     {
1685*53ee8cc1Swenshuai.xi         _HAL_REG32_W(pReg, SET_FLAG1(_HAL_REG32_R(pReg), u32flag));
1686*53ee8cc1Swenshuai.xi     }
1687*53ee8cc1Swenshuai.xi     else
1688*53ee8cc1Swenshuai.xi     {
1689*53ee8cc1Swenshuai.xi         _HAL_REG32_W(pReg, RESET_FLAG1(_HAL_REG32_R(pReg), u32flag));
1690*53ee8cc1Swenshuai.xi     }
1691*53ee8cc1Swenshuai.xi }
1692*53ee8cc1Swenshuai.xi 
HAL_TSP_PVR_BypassHeader_En(MS_U8 u8PVRId,MS_BOOL bBypassHD)1693*53ee8cc1Swenshuai.xi void HAL_TSP_PVR_BypassHeader_En(MS_U8 u8PVRId, MS_BOOL bBypassHD)
1694*53ee8cc1Swenshuai.xi {
1695*53ee8cc1Swenshuai.xi     MS_U32 u32flag = 0;
1696*53ee8cc1Swenshuai.xi 
1697*53ee8cc1Swenshuai.xi     switch(u8PVRId)
1698*53ee8cc1Swenshuai.xi     {
1699*53ee8cc1Swenshuai.xi         case 0:
1700*53ee8cc1Swenshuai.xi             u32flag = TSP_PVR_PID_BYPASS;
1701*53ee8cc1Swenshuai.xi             break;
1702*53ee8cc1Swenshuai.xi         case 1:
1703*53ee8cc1Swenshuai.xi             u32flag = TSP_PVR_PID_BYPASS2;
1704*53ee8cc1Swenshuai.xi             break;
1705*53ee8cc1Swenshuai.xi         default:
1706*53ee8cc1Swenshuai.xi             return;
1707*53ee8cc1Swenshuai.xi     }
1708*53ee8cc1Swenshuai.xi 
1709*53ee8cc1Swenshuai.xi     if(bBypassHD)
1710*53ee8cc1Swenshuai.xi     {
1711*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].reg15b4, SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg15b4), u32flag));
1712*53ee8cc1Swenshuai.xi     }
1713*53ee8cc1Swenshuai.xi     else
1714*53ee8cc1Swenshuai.xi     {
1715*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].reg15b4, RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg15b4), u32flag));
1716*53ee8cc1Swenshuai.xi     }
1717*53ee8cc1Swenshuai.xi }
1718*53ee8cc1Swenshuai.xi 
HAL_TSP_SetPKTSize(MS_U32 u32PKTSize)1719*53ee8cc1Swenshuai.xi void HAL_TSP_SetPKTSize(MS_U32 u32PKTSize)
1720*53ee8cc1Swenshuai.xi {
1721*53ee8cc1Swenshuai.xi     if(u32PKTSize == 0x82UL) // RVU
1722*53ee8cc1Swenshuai.xi     {
1723*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].reg163C,
1724*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg163C), (TSP_PKT130_EN | TSP_PKT130_TEI_EN)));
1725*53ee8cc1Swenshuai.xi 
1726*53ee8cc1Swenshuai.xi     }
1727*53ee8cc1Swenshuai.xi     else if(u32PKTSize == 0x86UL) // RVU with timestamp
1728*53ee8cc1Swenshuai.xi     {
1729*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].reg163C,
1730*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg163C), (TSP_PKT130_EN | TSP_PKT130_TEI_EN)));
1731*53ee8cc1Swenshuai.xi 
1732*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].reg160C,
1733*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), TSP_FILEIN192_EN));
1734*53ee8cc1Swenshuai.xi     }
1735*53ee8cc1Swenshuai.xi     else
1736*53ee8cc1Swenshuai.xi     {
1737*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].Hw_Config4, SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_HW_CFG4_ALT_TS_SIZE));
1738*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].PktChkSizeFilein, (_HAL_REG32_R(&_TspCtrl[0].PktChkSizeFilein)&~TSP_PKT_SIZE_MASK)|(TSP_PKT_SIZE_MASK&u32PKTSize));
1739*53ee8cc1Swenshuai.xi     }
1740*53ee8cc1Swenshuai.xi }
1741*53ee8cc1Swenshuai.xi 
1742*53ee8cc1Swenshuai.xi // Set 1 to disable file-in timestamp block scheme, bypass timestamp
HAL_TSP_FileIn_192BlockScheme_En(MS_BOOL bEnable)1743*53ee8cc1Swenshuai.xi void HAL_TSP_FileIn_192BlockScheme_En(MS_BOOL bEnable)
1744*53ee8cc1Swenshuai.xi {
1745*53ee8cc1Swenshuai.xi     if (!bEnable)
1746*53ee8cc1Swenshuai.xi     {
1747*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].PktChkSizeFilein, _HAL_REG32_R(&_TspCtrl[0].PktChkSizeFilein) | TSP_PKT192_BLK_DIS_FIN);
1748*53ee8cc1Swenshuai.xi     }
1749*53ee8cc1Swenshuai.xi     else
1750*53ee8cc1Swenshuai.xi     {
1751*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].PktChkSizeFilein, _HAL_REG32_R(&_TspCtrl[0].PktChkSizeFilein) & ~TSP_PKT192_BLK_DIS_FIN);
1752*53ee8cc1Swenshuai.xi     }
1753*53ee8cc1Swenshuai.xi }
1754*53ee8cc1Swenshuai.xi 
HAL_TSP_STC64_Mode_En(MS_BOOL bEnable)1755*53ee8cc1Swenshuai.xi void HAL_TSP_STC64_Mode_En(MS_BOOL bEnable)
1756*53ee8cc1Swenshuai.xi {
1757*53ee8cc1Swenshuai.xi     if (bEnable)
1758*53ee8cc1Swenshuai.xi     {
1759*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].PktChkSizeFilein, _HAL_REG32_R(&_TspCtrl[0].PktChkSizeFilein) | TSP_SYSTIME_MODE_STC64);
1760*53ee8cc1Swenshuai.xi     }
1761*53ee8cc1Swenshuai.xi     else
1762*53ee8cc1Swenshuai.xi     {
1763*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].PktChkSizeFilein, _HAL_REG32_R(&_TspCtrl[0].PktChkSizeFilein) & ~TSP_SYSTIME_MODE_STC64);
1764*53ee8cc1Swenshuai.xi     }
1765*53ee8cc1Swenshuai.xi }
1766*53ee8cc1Swenshuai.xi 
1767*53ee8cc1Swenshuai.xi // For MIPS highway issue (last_done_Z), HW update PVR write pointer only when DMA done,
1768*53ee8cc1Swenshuai.xi // So buffer start address will not update to write pointer at first time.
HAL_TSP_PVR_GetBufWrite(MS_U8 u8PVRId)1769*53ee8cc1Swenshuai.xi MS_PHY HAL_TSP_PVR_GetBufWrite(MS_U8 u8PVRId)
1770*53ee8cc1Swenshuai.xi {
1771*53ee8cc1Swenshuai.xi     MS_U32 u32value = 0;
1772*53ee8cc1Swenshuai.xi 
1773*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].CH_BW_CTRL,
1774*53ee8cc1Swenshuai.xi         RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].CH_BW_CTRL), TSP_CH_BW_WP_LD));
1775*53ee8cc1Swenshuai.xi     switch(u8PVRId)
1776*53ee8cc1Swenshuai.xi     {
1777*53ee8cc1Swenshuai.xi         case 0:
1778*53ee8cc1Swenshuai.xi             u32value = _HAL_REG32_R(&_TspCtrl[0].TsRec_Mid_PVR1_WPTR);
1779*53ee8cc1Swenshuai.xi             break;
1780*53ee8cc1Swenshuai.xi         case 1:
1781*53ee8cc1Swenshuai.xi             u32value = _HAL_REG32_R(&_TspCtrl[0].Str2mi_mid1_wptr_pvr2);
1782*53ee8cc1Swenshuai.xi             break;
1783*53ee8cc1Swenshuai.xi         default:
1784*53ee8cc1Swenshuai.xi             return 0;
1785*53ee8cc1Swenshuai.xi     }
1786*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].CH_BW_CTRL,
1787*53ee8cc1Swenshuai.xi         SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].CH_BW_CTRL), TSP_CH_BW_WP_LD));
1788*53ee8cc1Swenshuai.xi 
1789*53ee8cc1Swenshuai.xi     return ((((MS_PHY)u32value) << MIU_BUS) + _phyPVRBufMiuOffset[u8PVRId]);
1790*53ee8cc1Swenshuai.xi 
1791*53ee8cc1Swenshuai.xi }
1792*53ee8cc1Swenshuai.xi 
HAL_TSP_PVR_WaitFlush(MS_U8 u8PVRId)1793*53ee8cc1Swenshuai.xi void HAL_TSP_PVR_WaitFlush(MS_U8 u8PVRId)
1794*53ee8cc1Swenshuai.xi {
1795*53ee8cc1Swenshuai.xi     REG32 *pReg    = 0;
1796*53ee8cc1Swenshuai.xi     MS_U16 u16data = 0;
1797*53ee8cc1Swenshuai.xi     MS_U32 u32flag = 0;
1798*53ee8cc1Swenshuai.xi 
1799*53ee8cc1Swenshuai.xi     switch(u8PVRId)
1800*53ee8cc1Swenshuai.xi     {
1801*53ee8cc1Swenshuai.xi         default:
1802*53ee8cc1Swenshuai.xi         case 0:
1803*53ee8cc1Swenshuai.xi             pReg    = &_TspCtrl[0].Hw_Config4;
1804*53ee8cc1Swenshuai.xi             u32flag = TSP_HW_CFG4_PVR_FLUSH;
1805*53ee8cc1Swenshuai.xi             u16data = TSP_FLUSH_PVR1_DATA;
1806*53ee8cc1Swenshuai.xi             break;
1807*53ee8cc1Swenshuai.xi         case 1:
1808*53ee8cc1Swenshuai.xi             pReg    = &_TspCtrl[0].PVR2_Config;
1809*53ee8cc1Swenshuai.xi             u32flag = TSP_PVR2_STR2MIU_RST_WADR;
1810*53ee8cc1Swenshuai.xi             u16data = TSP_FLUSH_PVR2_DATA;
1811*53ee8cc1Swenshuai.xi             break;
1812*53ee8cc1Swenshuai.xi     }
1813*53ee8cc1Swenshuai.xi 
1814*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&_TspCtrl5[0].HwCfg0, SET_FLAG1(_HAL_REG16_R(&_TspCtrl5[0].HwCfg0), u16data));
1815*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&_TspCtrl5[0].HwCfg0, RESET_FLAG1(_HAL_REG16_R(&_TspCtrl5[0].HwCfg0), u16data));
1816*53ee8cc1Swenshuai.xi     _HAL_REG32_W(pReg, SET_FLAG1(_HAL_REG32_R(pReg), u32flag));
1817*53ee8cc1Swenshuai.xi     _HAL_REG32_W(pReg, RESET_FLAG1(_HAL_REG32_R(pReg), u32flag));
1818*53ee8cc1Swenshuai.xi }
1819*53ee8cc1Swenshuai.xi 
HAL_TSP_PVR_Src_Select(MS_U8 u8PVRId,MS_U32 u32Src)1820*53ee8cc1Swenshuai.xi void HAL_TSP_PVR_Src_Select(MS_U8 u8PVRId, MS_U32 u32Src)
1821*53ee8cc1Swenshuai.xi {
1822*53ee8cc1Swenshuai.xi #if (TSP_HWPCR_BY_HK == 1 || !defined(HWPCR_ENABLE))
1823*53ee8cc1Swenshuai.xi         switch(u8PVRId)
1824*53ee8cc1Swenshuai.xi         {
1825*53ee8cc1Swenshuai.xi             case 0:
1826*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].FIFO_Src, (_HAL_REG32_R(&_TspCtrl[0].FIFO_Src) & ~TSP_PVR1_SRC_MASK)| (u32Src << TSP_PVR1_SRC_SHIFT));
1827*53ee8cc1Swenshuai.xi                 break;
1828*53ee8cc1Swenshuai.xi             case 1:
1829*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].STC_DIFF_BUF_H, (_HAL_REG32_R(&_TspCtrl[0].STC_DIFF_BUF_H) & ~TSP_PVR2_SRC_MASK)| (u32Src << TSP_PVR2_SRC_SHIFT));
1830*53ee8cc1Swenshuai.xi                 break;
1831*53ee8cc1Swenshuai.xi             default:
1832*53ee8cc1Swenshuai.xi                 return;
1833*53ee8cc1Swenshuai.xi         }
1834*53ee8cc1Swenshuai.xi #else
1835*53ee8cc1Swenshuai.xi         switch(u8PVRId)
1836*53ee8cc1Swenshuai.xi         {
1837*53ee8cc1Swenshuai.xi             case 0:
1838*53ee8cc1Swenshuai.xi                 _HAL_TSP_CMD_Write_HWPCR_Reg(TSP_PVR1_SRC_MASK, (u32Src << TSP_PVR1_SRC_SHIFT));
1839*53ee8cc1Swenshuai.xi                 break;
1840*53ee8cc1Swenshuai.xi             case 1:
1841*53ee8cc1Swenshuai.xi                 _HAL_TSP_CMD_Write_HWPCR_Reg(TSP_PVR2_SRC_MASK, (u32Src << TSP_PVR2_SRC_SHIFT));
1842*53ee8cc1Swenshuai.xi                 break;
1843*53ee8cc1Swenshuai.xi             default:
1844*53ee8cc1Swenshuai.xi                 return;
1845*53ee8cc1Swenshuai.xi         }
1846*53ee8cc1Swenshuai.xi #endif
1847*53ee8cc1Swenshuai.xi 
1848*53ee8cc1Swenshuai.xi }
1849*53ee8cc1Swenshuai.xi 
HAL_TSP_PVR_StartingEngs_Get(MS_U32 u32PktDmxSrc)1850*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_PVR_StartingEngs_Get(MS_U32 u32PktDmxSrc)
1851*53ee8cc1Swenshuai.xi {
1852*53ee8cc1Swenshuai.xi     MS_U32 u32Flag = 0UL;
1853*53ee8cc1Swenshuai.xi     MS_U32 u32Src;
1854*53ee8cc1Swenshuai.xi 
1855*53ee8cc1Swenshuai.xi     u32Src = 1UL << ((_HAL_REG32_R(&_TspCtrl[0].FIFO_Src) & TSP_PVR1_SRC_MASK) >> TSP_PVR1_SRC_SHIFT);
1856*53ee8cc1Swenshuai.xi     if(u32PktDmxSrc & u32Src)
1857*53ee8cc1Swenshuai.xi     {
1858*53ee8cc1Swenshuai.xi         if(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4) & TSP_HW_CFG4_PVR_ENABLE)
1859*53ee8cc1Swenshuai.xi             u32Flag = 1UL;
1860*53ee8cc1Swenshuai.xi     }
1861*53ee8cc1Swenshuai.xi     u32Src = 1UL << ((_HAL_REG32_R(&_TspCtrl[0].STC_DIFF_BUF_H) & TSP_PVR2_SRC_MASK) >> TSP_PVR2_SRC_SHIFT);
1862*53ee8cc1Swenshuai.xi     if(u32PktDmxSrc & u32Src)
1863*53ee8cc1Swenshuai.xi     {
1864*53ee8cc1Swenshuai.xi         if(_HAL_REG32_R(&_TspCtrl[0].PVR2_Config) & TSP_PVR2_STR2MIU_EN)
1865*53ee8cc1Swenshuai.xi             u32Flag |= 2UL;
1866*53ee8cc1Swenshuai.xi     }
1867*53ee8cc1Swenshuai.xi 
1868*53ee8cc1Swenshuai.xi     return u32Flag;
1869*53ee8cc1Swenshuai.xi }
1870*53ee8cc1Swenshuai.xi 
HAL_TSP_PVR_IsEnabled(MS_U32 u32EngId)1871*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_PVR_IsEnabled(MS_U32 u32EngId)
1872*53ee8cc1Swenshuai.xi {
1873*53ee8cc1Swenshuai.xi     if(u32EngId == 0UL)
1874*53ee8cc1Swenshuai.xi     {
1875*53ee8cc1Swenshuai.xi         return ((_HAL_REG32_R(&_TspCtrl[0].Hw_Config4) & TSP_HW_CFG4_PVR_ENABLE) > 0);
1876*53ee8cc1Swenshuai.xi     }
1877*53ee8cc1Swenshuai.xi     else if(u32EngId == 1UL)
1878*53ee8cc1Swenshuai.xi     {
1879*53ee8cc1Swenshuai.xi         return ((_HAL_REG32_R(&_TspCtrl[0].PVR2_Config) & TSP_PVR2_STR2MIU_EN) > 0);
1880*53ee8cc1Swenshuai.xi     }
1881*53ee8cc1Swenshuai.xi     else
1882*53ee8cc1Swenshuai.xi     {
1883*53ee8cc1Swenshuai.xi         return FALSE;
1884*53ee8cc1Swenshuai.xi     }
1885*53ee8cc1Swenshuai.xi 
1886*53ee8cc1Swenshuai.xi }
1887*53ee8cc1Swenshuai.xi 
1888*53ee8cc1Swenshuai.xi static MS_U32 _u32FlowPadMap[4] = { 0x0UL, 0x0UL, 0x0UL, 0x0UL}; //TS0, TS1, TS2, TSFI
1889*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1890*53ee8cc1Swenshuai.xi // For pad select part
1891*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1892*53ee8cc1Swenshuai.xi // For 2 output pads and 2 S2p modes, fix the paths to be S2p0 for TS1_PAD output, and S2P1 for TS3_Pad output
HAL_TSP_TsOutPadCfg(MS_U32 u32OutPad,MS_U32 u32OutPadMode,MS_U32 u32InPad,MS_BOOL bInParallel)1893*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_TsOutPadCfg(MS_U32 u32OutPad, MS_U32 u32OutPadMode, MS_U32 u32InPad, MS_BOOL bInParallel)
1894*53ee8cc1Swenshuai.xi {
1895*53ee8cc1Swenshuai.xi     MS_U16 u16S2pCfg = 0, u16clk = 0;
1896*53ee8cc1Swenshuai.xi     MS_U16 u16S2pRegShift = 0, u16Data = 0;
1897*53ee8cc1Swenshuai.xi 
1898*53ee8cc1Swenshuai.xi     if((u32OutPad != TSP_MUX_TS1) && (u32OutPad != TSP_MUX_TS3))
1899*53ee8cc1Swenshuai.xi     {
1900*53ee8cc1Swenshuai.xi         return FALSE;
1901*53ee8cc1Swenshuai.xi     }
1902*53ee8cc1Swenshuai.xi     if(u32OutPad == u32InPad)
1903*53ee8cc1Swenshuai.xi     {
1904*53ee8cc1Swenshuai.xi         return FALSE;
1905*53ee8cc1Swenshuai.xi     }
1906*53ee8cc1Swenshuai.xi 
1907*53ee8cc1Swenshuai.xi     // S2P setting
1908*53ee8cc1Swenshuai.xi     // fix the paths to be S2p0 for TS1_PAD output, and S2P1 for TS3_Pad output
1909*53ee8cc1Swenshuai.xi     if((u32OutPadMode == HAL_TSP_OUTPAD_S2P) || (u32OutPadMode == HAL_TSP_OUTPAD_S2P1))
1910*53ee8cc1Swenshuai.xi     {
1911*53ee8cc1Swenshuai.xi         //fix s2p1 mode with output pad #3
1912*53ee8cc1Swenshuai.xi         if(u32OutPad == TSP_MUX_TS3)
1913*53ee8cc1Swenshuai.xi         {
1914*53ee8cc1Swenshuai.xi             u32OutPadMode = HAL_TSP_OUTPAD_S2P1;
1915*53ee8cc1Swenshuai.xi         }
1916*53ee8cc1Swenshuai.xi 
1917*53ee8cc1Swenshuai.xi         u16S2pRegShift = ((u32OutPadMode == HAL_TSP_OUTPAD_S2P) ? REG_TSO0_CFG0_S2P0_CFG_SHIFT : REG_TSO0_CFG0_S2P1_CFG_SHIFT);
1918*53ee8cc1Swenshuai.xi 
1919*53ee8cc1Swenshuai.xi         if(u32InPad == TSP_MUX_NONE)
1920*53ee8cc1Swenshuai.xi         {
1921*53ee8cc1Swenshuai.xi             TSP_TSO0_REG(REG_TSO0_CFG0) &= ~(REG_TSO0_CFG0_S2PCFG_S2P_EN << u16S2pRegShift);
1922*53ee8cc1Swenshuai.xi             return TRUE;
1923*53ee8cc1Swenshuai.xi         }
1924*53ee8cc1Swenshuai.xi 
1925*53ee8cc1Swenshuai.xi         u16S2pCfg = (TSP_TSO0_REG(REG_TSO0_CFG0) & ~(REG_TSO0_CFG0_S2PCFG_MASK << u16S2pRegShift))
1926*53ee8cc1Swenshuai.xi                         | ((REG_TSO0_CFG0_S2PCFG_S2P_EN|REG_TSO0_CFG0_S2PCFG_S2P_TSSIN_C0) << u16S2pRegShift);
1927*53ee8cc1Swenshuai.xi 
1928*53ee8cc1Swenshuai.xi         //BYPASS_S2P setting select
1929*53ee8cc1Swenshuai.xi         if(bInParallel)
1930*53ee8cc1Swenshuai.xi         {
1931*53ee8cc1Swenshuai.xi             if(u32InPad == TSP_MUX_TS4)
1932*53ee8cc1Swenshuai.xi             {
1933*53ee8cc1Swenshuai.xi                 return FALSE;
1934*53ee8cc1Swenshuai.xi             }
1935*53ee8cc1Swenshuai.xi             else
1936*53ee8cc1Swenshuai.xi             {
1937*53ee8cc1Swenshuai.xi                 u16S2pCfg |= (REG_TSO0_CFG0_S2PCFG_S2P_BYPASS << u16S2pRegShift);
1938*53ee8cc1Swenshuai.xi             }
1939*53ee8cc1Swenshuai.xi         }
1940*53ee8cc1Swenshuai.xi         else
1941*53ee8cc1Swenshuai.xi         {
1942*53ee8cc1Swenshuai.xi             u16S2pCfg &= ~REG_TSO0_CFG0_S2PCFG_S2P_BYPASS;
1943*53ee8cc1Swenshuai.xi         }
1944*53ee8cc1Swenshuai.xi 
1945*53ee8cc1Swenshuai.xi         //S2p input pad select
1946*53ee8cc1Swenshuai.xi         switch(u32InPad)
1947*53ee8cc1Swenshuai.xi         {
1948*53ee8cc1Swenshuai.xi             case TSP_MUX_TS0:
1949*53ee8cc1Swenshuai.xi                 u16Data = TSP_MUX_TS0;
1950*53ee8cc1Swenshuai.xi                 u16clk  = TSP_CLK_TS0;
1951*53ee8cc1Swenshuai.xi                 break;
1952*53ee8cc1Swenshuai.xi             case TSP_MUX_TS1:
1953*53ee8cc1Swenshuai.xi                 u16Data = TSP_MUX_TS1;
1954*53ee8cc1Swenshuai.xi                 u16clk  = TSP_CLK_TS1;
1955*53ee8cc1Swenshuai.xi                 break;
1956*53ee8cc1Swenshuai.xi             case TSP_MUX_TS2:
1957*53ee8cc1Swenshuai.xi                 u16Data = TSP_MUX_TS2;
1958*53ee8cc1Swenshuai.xi                 u16clk  = TSP_CLK_TS2;
1959*53ee8cc1Swenshuai.xi                 break;
1960*53ee8cc1Swenshuai.xi             case TSP_MUX_TS3:
1961*53ee8cc1Swenshuai.xi                 u16Data = TSP_MUX_TS3;
1962*53ee8cc1Swenshuai.xi                 u16clk  = TSP_CLK_TS3;
1963*53ee8cc1Swenshuai.xi                 break;
1964*53ee8cc1Swenshuai.xi             case TSP_MUX_TS4:
1965*53ee8cc1Swenshuai.xi                 u16Data = TSP_MUX_TS4;
1966*53ee8cc1Swenshuai.xi                 u16clk  = TSP_CLK_TS4;
1967*53ee8cc1Swenshuai.xi                 break;
1968*53ee8cc1Swenshuai.xi             default:
1969*53ee8cc1Swenshuai.xi                 return FALSE;
1970*53ee8cc1Swenshuai.xi         }
1971*53ee8cc1Swenshuai.xi         // S2P clk
1972*53ee8cc1Swenshuai.xi         TSP_CLKGEN2_REG(REG_CLKGEN2_TSN_TS4) = (TSP_CLKGEN2_REG(REG_CLKGEN2_TSN_TS4) & ~(REG_CLKGEN0_TSN_CLK_MASK << u16S2pRegShift)) | (u16clk << u16S2pRegShift);
1973*53ee8cc1Swenshuai.xi 
1974*53ee8cc1Swenshuai.xi         // S2P mux
1975*53ee8cc1Swenshuai.xi         u16S2pRegShift = ((u32OutPadMode == HAL_TSP_OUTPAD_S2P) ? TS_MUX_CFG_S2P0_MUX_SHIFT : TS_MUX_CFG_S2P1_MUX_SHIFT);
1976*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&(_TspCtrl5[0].TS_MUX_CFG_S2P),
1977*53ee8cc1Swenshuai.xi                         (_HAL_REG16_R(&(_TspCtrl5[0].TS_MUX_CFG_S2P)) & ~(TS_MUX_CFG_S2P0_MUX_MASK << u16S2pRegShift)) | (u16Data << u16S2pRegShift));
1978*53ee8cc1Swenshuai.xi         TSP_TSO0_REG(REG_TSO0_CFG0) |= u16S2pCfg;
1979*53ee8cc1Swenshuai.xi 
1980*53ee8cc1Swenshuai.xi         // TSO out clk
1981*53ee8cc1Swenshuai.xi         u16S2pCfg = ((u32OutPadMode == HAL_TSP_OUTPAD_S2P) ? REG_TSO_OUT_S2P0 : REG_TSO_OUT_S2P1);
1982*53ee8cc1Swenshuai.xi         u16S2pRegShift = ((u32OutPadMode == HAL_TSP_OUTPAD_S2P) ? 0 : REG_TSO1_OUT_CLK_SEL_SHIFT);
1983*53ee8cc1Swenshuai.xi         TSP_TS_SAMPLE_REG(REG_TSO_OUT_CLK_SEL) = ((TSP_TS_SAMPLE_REG(REG_TSO_OUT_CLK_SEL) & ~(REG_TSO_OUT_CLK_SEL_MASK<<u16S2pRegShift)) | (u16S2pCfg<<u16S2pRegShift));  //TSO out (S2P)
1984*53ee8cc1Swenshuai.xi 
1985*53ee8cc1Swenshuai.xi     }
1986*53ee8cc1Swenshuai.xi 
1987*53ee8cc1Swenshuai.xi     if(u32OutPad == TSP_MUX_TS1)
1988*53ee8cc1Swenshuai.xi     {
1989*53ee8cc1Swenshuai.xi         if(u32InPad == TSP_MUX_INDEMOD)
1990*53ee8cc1Swenshuai.xi         { // Internal Demod out
1991*53ee8cc1Swenshuai.xi             TSP_TOP_REG(REG_TOP_TSCONFIG) = (TSP_TOP_REG(REG_TOP_TSCONFIG) & ~(REG_TOP_TS_TS1_CFG_MASK << REG_TOP_TS1CFG_SHIFT)) | (REG_TOP_TS_TS1_PARALL_OUT << REG_TOP_TS1CFG_SHIFT);
1992*53ee8cc1Swenshuai.xi         }
1993*53ee8cc1Swenshuai.xi         else
1994*53ee8cc1Swenshuai.xi         {
1995*53ee8cc1Swenshuai.xi             TSP_TOP_REG(REG_TOP_TSCONFIG) = (TSP_TOP_REG(REG_TOP_TSCONFIG) & ~(REG_TOP_TS_TS1_CFG_MASK << REG_TOP_TS1CFG_SHIFT));
1996*53ee8cc1Swenshuai.xi         }
1997*53ee8cc1Swenshuai.xi 
1998*53ee8cc1Swenshuai.xi         if(u32InPad == TSP_MUX_TSO)
1999*53ee8cc1Swenshuai.xi         {
2000*53ee8cc1Swenshuai.xi             u16Data = REG_TOP_TS1_OUT_MODE_TSO;
2001*53ee8cc1Swenshuai.xi         }
2002*53ee8cc1Swenshuai.xi         else if(u32OutPadMode == HAL_TSP_OUTPAD_S2P)
2003*53ee8cc1Swenshuai.xi         {
2004*53ee8cc1Swenshuai.xi             u16Data = REG_TOP_TS1_OUT_MODE_Ser2Par;
2005*53ee8cc1Swenshuai.xi         }
2006*53ee8cc1Swenshuai.xi         else if(u32OutPadMode == HAL_TSP_OUTPAD_S2P1)
2007*53ee8cc1Swenshuai.xi         {
2008*53ee8cc1Swenshuai.xi             u16Data = REG_TOP_TS1_OUT_MODE_Ser2Par1;
2009*53ee8cc1Swenshuai.xi         }
2010*53ee8cc1Swenshuai.xi         else
2011*53ee8cc1Swenshuai.xi         {
2012*53ee8cc1Swenshuai.xi             u16Data = 0;
2013*53ee8cc1Swenshuai.xi         }
2014*53ee8cc1Swenshuai.xi         TSP_TOP_REG(REG_TOP_TS4_CFG) = (TSP_TOP_REG(REG_TOP_TS4_CFG) & ~REG_TOP_TS_OUT_MODE_MASK) | u16Data;
2015*53ee8cc1Swenshuai.xi     }
2016*53ee8cc1Swenshuai.xi     else if(u32OutPad == TSP_MUX_TS3)
2017*53ee8cc1Swenshuai.xi     {
2018*53ee8cc1Swenshuai.xi         if(u32InPad == TSP_MUX_TSO)
2019*53ee8cc1Swenshuai.xi         { // TSO
2020*53ee8cc1Swenshuai.xi             TSP_TOP_REG(REG_TOP_TSO_MUX) = (TSP_TOP_REG(REG_TOP_TSO_MUX) & ~REG_TOP_TSO_EVDMODE_MASK) | REG_TOP_TS3_OUT_MODE_TSO;
2021*53ee8cc1Swenshuai.xi         }
2022*53ee8cc1Swenshuai.xi         else
2023*53ee8cc1Swenshuai.xi         {
2024*53ee8cc1Swenshuai.xi             TSP_TOP_REG(REG_TOP_TSO_MUX) = TSP_TOP_REG(REG_TOP_TSO_MUX) & ~REG_TOP_TSO_EVDMODE_MASK;
2025*53ee8cc1Swenshuai.xi         }
2026*53ee8cc1Swenshuai.xi         u16Data = 0;
2027*53ee8cc1Swenshuai.xi         if(u32InPad == TSP_MUX_INDEMOD)
2028*53ee8cc1Swenshuai.xi         {
2029*53ee8cc1Swenshuai.xi             u16Data = REG_TOP_TS3_OUT_MODE_DMD;
2030*53ee8cc1Swenshuai.xi         }
2031*53ee8cc1Swenshuai.xi         else if(u32OutPadMode == HAL_TSP_OUTPAD_S2P)
2032*53ee8cc1Swenshuai.xi         {
2033*53ee8cc1Swenshuai.xi             u16Data = REG_TOP_TS3_OUT_MODE_Ser2Par;
2034*53ee8cc1Swenshuai.xi         }
2035*53ee8cc1Swenshuai.xi         else if(u32OutPadMode == HAL_TSP_OUTPAD_S2P1)
2036*53ee8cc1Swenshuai.xi         {
2037*53ee8cc1Swenshuai.xi             u16Data = REG_TOP_TS3_OUT_MODE_Ser2Par1;
2038*53ee8cc1Swenshuai.xi         }
2039*53ee8cc1Swenshuai.xi         else
2040*53ee8cc1Swenshuai.xi         {
2041*53ee8cc1Swenshuai.xi             u16Data = 0;
2042*53ee8cc1Swenshuai.xi         }
2043*53ee8cc1Swenshuai.xi         TSP_TOP_REG(REG_TOP_TS_TS3_CFG) = (TSP_TOP_REG(REG_TOP_TS_TS3_CFG) & ~REG_TOP_TS3CFG_MASK) | u16Data;
2044*53ee8cc1Swenshuai.xi     }
2045*53ee8cc1Swenshuai.xi 
2046*53ee8cc1Swenshuai.xi     return TRUE;
2047*53ee8cc1Swenshuai.xi }
2048*53ee8cc1Swenshuai.xi 
2049*53ee8cc1Swenshuai.xi //-----------------------------
2050*53ee8cc1Swenshuai.xi //TSIF0 = 0x0
2051*53ee8cc1Swenshuai.xi //TSIF1 = 0x1
2052*53ee8cc1Swenshuai.xi //TSIF2 = 0x2
2053*53ee8cc1Swenshuai.xi //TSIF3 = 0x3
2054*53ee8cc1Swenshuai.xi //TSFI   = 0x80 (version 3.0 New)
2055*53ee8cc1Swenshuai.xi //-----------------------------
HAL_TSP_SelPad(MS_U32 u32EngId,MS_U32 u32Flow,MS_U32 u32Pad,MS_BOOL bParl)2056*53ee8cc1Swenshuai.xi void HAL_TSP_SelPad(MS_U32 u32EngId, MS_U32 u32Flow, MS_U32 u32Pad, MS_BOOL bParl)
2057*53ee8cc1Swenshuai.xi {
2058*53ee8cc1Swenshuai.xi     MS_U16 u16data   = 0;
2059*53ee8cc1Swenshuai.xi     MS_U16 u16Shift  = 0;
2060*53ee8cc1Swenshuai.xi     MS_U16 u16padsel = 0;
2061*53ee8cc1Swenshuai.xi     MS_U16 u16Reg    = 0;
2062*53ee8cc1Swenshuai.xi     MS_U16 u16Mask   = 0;
2063*53ee8cc1Swenshuai.xi     MS_U16 u16ShiftSet[TSP_IF_NUM] = {TS_MUX_CFG_TS0_MUX_SHIFT, TS_MUX_CFG_TS1_MUX_SHIFT, TS_MUX_CFG_TS2_MUX_SHIFT, TS_MUX_CFG_TSFI_MUX_SHIFT};
2064*53ee8cc1Swenshuai.xi     MS_U16 u323WireEn[TSP_IF_NUM] = {TSP_3WIRE_SERIAL_TSIF0, TSP_3WIRE_SERIAL_TSIF1, TSP_3WIRE_SERIAL_TSIF2, TSP_3WIRE_SERIAL_TSIFFI};
2065*53ee8cc1Swenshuai.xi     MS_BOOL bIs3WireMode = FALSE;
2066*53ee8cc1Swenshuai.xi 
2067*53ee8cc1Swenshuai.xi     //printf("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
2068*53ee8cc1Swenshuai.xi     //printf("[%s\[%d] u32Flow %ld u32Pad %ld bParl %d\n", __FUNCTION__, __LINE__, u32Flow, u32Pad, (int)bParl);
2069*53ee8cc1Swenshuai.xi 
2070*53ee8cc1Swenshuai.xi     if(u32Flow == 0x80UL) //E_DRVTSP_IF_FI
2071*53ee8cc1Swenshuai.xi     {
2072*53ee8cc1Swenshuai.xi         u32Flow = TSP_IF_NUM - 1UL;
2073*53ee8cc1Swenshuai.xi     }
2074*53ee8cc1Swenshuai.xi     else if(u32Flow >= TSP_IF_NUM)
2075*53ee8cc1Swenshuai.xi     {
2076*53ee8cc1Swenshuai.xi         return;
2077*53ee8cc1Swenshuai.xi     }
2078*53ee8cc1Swenshuai.xi 
2079*53ee8cc1Swenshuai.xi     if(u32Pad & TSP_MUX_3WIRE_MASK) // 3wire mod
2080*53ee8cc1Swenshuai.xi     {
2081*53ee8cc1Swenshuai.xi         u32Pad &= 0x0F;
2082*53ee8cc1Swenshuai.xi         bIs3WireMode = TRUE;
2083*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&(_TspCtrl3[0].ModeCfg),
2084*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG16_R(&(_TspCtrl3[0].ModeCfg)), u323WireEn[u32Flow]));
2085*53ee8cc1Swenshuai.xi     }
2086*53ee8cc1Swenshuai.xi 
2087*53ee8cc1Swenshuai.xi     if((u32Pad == TSP_MUX_TS0) && (_bTsPadUsed[0] == FALSE))
2088*53ee8cc1Swenshuai.xi     {
2089*53ee8cc1Swenshuai.xi         _u16TsPadPE[0] = TSP_TOP_REG(REG_TOP_TS0_PE) & REG_TOP_TS0_PE_MASK;
2090*53ee8cc1Swenshuai.xi         TSP_TOP_REG(REG_TOP_TS0_PE) = TSP_TOP_REG(REG_TOP_TS0_PE)| REG_TOP_TS0_PE_MASK;
2091*53ee8cc1Swenshuai.xi         _bTsPadUsed[0] = TRUE;
2092*53ee8cc1Swenshuai.xi     }
2093*53ee8cc1Swenshuai.xi     if((u32Pad == TSP_MUX_TS1) && (_bTsPadUsed[1] == FALSE))
2094*53ee8cc1Swenshuai.xi     {
2095*53ee8cc1Swenshuai.xi         _u16TsPadPE[1] = TSP_TOP_REG(REG_TOP_TS1_PE) & REG_TOP_TS1_PE_MASK;
2096*53ee8cc1Swenshuai.xi         TSP_TOP_REG(REG_TOP_TS1_PE) = TSP_TOP_REG(REG_TOP_TS1_PE) | REG_TOP_TS1_PE_MASK;
2097*53ee8cc1Swenshuai.xi         _bTsPadUsed[1] = TRUE;
2098*53ee8cc1Swenshuai.xi     }
2099*53ee8cc1Swenshuai.xi     if((u32Pad == TSP_MUX_TS2) && (_bTsPadUsed[2] == FALSE))
2100*53ee8cc1Swenshuai.xi     {
2101*53ee8cc1Swenshuai.xi         _u16TsPadPE[2] = TSP_TOP_REG(REG_TOP_TS2_PE) & REG_TOP_TS2_PE_MASK;
2102*53ee8cc1Swenshuai.xi         TSP_TOP_REG(REG_TOP_TS2_PE) = TSP_TOP_REG(REG_TOP_TS2_PE)| REG_TOP_TS2_PE_MASK;
2103*53ee8cc1Swenshuai.xi         _bTsPadUsed[2] = TRUE;
2104*53ee8cc1Swenshuai.xi     }
2105*53ee8cc1Swenshuai.xi 
2106*53ee8cc1Swenshuai.xi     if((u32Pad == TSP_MUX_TS3) && (_bTsPadUsed[3] == FALSE))
2107*53ee8cc1Swenshuai.xi     {
2108*53ee8cc1Swenshuai.xi         _u16TsPadPE[3] = TSP_TOP_REG(REG_TOP_TS3_PE) & REG_TOP_TS3_PE_MASK;
2109*53ee8cc1Swenshuai.xi         TSP_TOP_REG(REG_TOP_TS3_PE) = TSP_TOP_REG(REG_TOP_TS3_PE)| REG_TOP_TS3_PE_MASK;
2110*53ee8cc1Swenshuai.xi         _bTsPadUsed[3] = TRUE;
2111*53ee8cc1Swenshuai.xi     }
2112*53ee8cc1Swenshuai.xi 
2113*53ee8cc1Swenshuai.xi     _u32FlowPadMap[u32Flow] = u32Pad;
2114*53ee8cc1Swenshuai.xi     u16padsel = (MS_U16)u32Pad;
2115*53ee8cc1Swenshuai.xi     u16Shift = u16ShiftSet[u32Flow];
2116*53ee8cc1Swenshuai.xi 
2117*53ee8cc1Swenshuai.xi     u16data = (_HAL_REG16_R(&(_TspCtrl5[0].TS_MUX_CFG0)) & ~(TS_MUX_CFG_TS0_MUX_MASK << u16Shift)) | (u16padsel << u16Shift);
2118*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TspCtrl5[0].TS_MUX_CFG0), u16data);
2119*53ee8cc1Swenshuai.xi 
2120*53ee8cc1Swenshuai.xi     // set FIQ source as TS0
2121*53ee8cc1Swenshuai.xi     //_HAL_REG16_W(&(_TspCtrl5[0].FIQ_MUX_CFG),
2122*53ee8cc1Swenshuai.xi     //    (_HAL_REG16_R(&(_TspCtrl5[0].FIQ_MUX_CFG)) & ~(FIQ_MUX_CFG_MASK << FIQ_MUX_CFG_SHFT)) | (FIQ_MUX_CFG_TS0 << FIQ_MUX_CFG_SHFT));
2123*53ee8cc1Swenshuai.xi 
2124*53ee8cc1Swenshuai.xi     u16Shift = 0;
2125*53ee8cc1Swenshuai.xi     switch(u16padsel)
2126*53ee8cc1Swenshuai.xi     {
2127*53ee8cc1Swenshuai.xi         case TSP_MUX_TS0:
2128*53ee8cc1Swenshuai.xi             u16Reg   = REG_TOP_TSCONFIG;
2129*53ee8cc1Swenshuai.xi             u16Shift = REG_TOP_TS0CFG_SHIFT;
2130*53ee8cc1Swenshuai.xi             u16Mask  = REG_TOP_TS_TS0_CFG_MASK;
2131*53ee8cc1Swenshuai.xi             break;
2132*53ee8cc1Swenshuai.xi         case TSP_MUX_TS1:
2133*53ee8cc1Swenshuai.xi             TSP_TOP_REG(REG_TOP_TS4_CFG) = TSP_TOP_REG(REG_TOP_TS4_CFG) & ~REG_TOP_TS_OUT_MODE_MASK; //disable ts1 out mode
2134*53ee8cc1Swenshuai.xi             u16Reg   = REG_TOP_TSCONFIG;
2135*53ee8cc1Swenshuai.xi             u16Shift = REG_TOP_TS1CFG_SHIFT;
2136*53ee8cc1Swenshuai.xi             u16Mask  = REG_TOP_TS_TS1_CFG_MASK;
2137*53ee8cc1Swenshuai.xi             break;
2138*53ee8cc1Swenshuai.xi         case TSP_MUX_TS2:
2139*53ee8cc1Swenshuai.xi             u16Reg   = REG_TOP_TS2CONFIG;
2140*53ee8cc1Swenshuai.xi             u16Shift = REG_TOP_TS2CFG_SHIFT;
2141*53ee8cc1Swenshuai.xi             u16Mask  = REG_TOP_TS_TS2_CFG_MASK;
2142*53ee8cc1Swenshuai.xi             break;
2143*53ee8cc1Swenshuai.xi         case TSP_MUX_TS3:
2144*53ee8cc1Swenshuai.xi             TSP_TOP_REG(REG_TOP_TSO_MUX) = TSP_TOP_REG(REG_TOP_TSO_MUX) & ~REG_TOP_TSO_EVDMODE_MASK;  //disable ts3 out mode
2145*53ee8cc1Swenshuai.xi             u16Reg   = REG_TOP_TS_TS3_CFG;
2146*53ee8cc1Swenshuai.xi             u16Shift = REG_TOP_TS3CFG_SHIFT;
2147*53ee8cc1Swenshuai.xi             u16Mask  = REG_TOP_TS3CFG_MASK;
2148*53ee8cc1Swenshuai.xi             break;
2149*53ee8cc1Swenshuai.xi         case TSP_MUX_TS4:
2150*53ee8cc1Swenshuai.xi             if(bParl == TRUE)
2151*53ee8cc1Swenshuai.xi             {
2152*53ee8cc1Swenshuai.xi                 return; //only serial mode
2153*53ee8cc1Swenshuai.xi             }
2154*53ee8cc1Swenshuai.xi             u16Reg   = REG_TOP_TS4_CFG;
2155*53ee8cc1Swenshuai.xi             u16Shift = REG_TOP_TS4_CFG_SHIFT;
2156*53ee8cc1Swenshuai.xi             u16Mask  = REG_TOP_TS4_CFG_MASK;
2157*53ee8cc1Swenshuai.xi             break;
2158*53ee8cc1Swenshuai.xi         default:
2159*53ee8cc1Swenshuai.xi             return;
2160*53ee8cc1Swenshuai.xi     }
2161*53ee8cc1Swenshuai.xi 
2162*53ee8cc1Swenshuai.xi     if(bIs3WireMode)
2163*53ee8cc1Swenshuai.xi     {
2164*53ee8cc1Swenshuai.xi         switch(u16padsel)
2165*53ee8cc1Swenshuai.xi         {
2166*53ee8cc1Swenshuai.xi             case TSP_MUX_TS0:
2167*53ee8cc1Swenshuai.xi                 u16data = REG_TOP_TS_TS0_3WIRE_IN;
2168*53ee8cc1Swenshuai.xi                 break;
2169*53ee8cc1Swenshuai.xi             case TSP_MUX_TS1:
2170*53ee8cc1Swenshuai.xi                 u16data = REG_TOP_TS_TS1_3WIRE_IN;
2171*53ee8cc1Swenshuai.xi                 break;
2172*53ee8cc1Swenshuai.xi             case TSP_MUX_TS3:
2173*53ee8cc1Swenshuai.xi                 u16data = REG_TOP_TS_TS3_3WIRE_IN;
2174*53ee8cc1Swenshuai.xi             case TSP_MUX_TS2:
2175*53ee8cc1Swenshuai.xi             case TSP_MUX_TS4:
2176*53ee8cc1Swenshuai.xi                 u16data = 1;
2177*53ee8cc1Swenshuai.xi             default:
2178*53ee8cc1Swenshuai.xi                 break;
2179*53ee8cc1Swenshuai.xi         }
2180*53ee8cc1Swenshuai.xi     }
2181*53ee8cc1Swenshuai.xi     else if(bParl == FALSE)
2182*53ee8cc1Swenshuai.xi     {// serial in
2183*53ee8cc1Swenshuai.xi         switch(u16padsel)
2184*53ee8cc1Swenshuai.xi         {
2185*53ee8cc1Swenshuai.xi             case TSP_MUX_TS0:
2186*53ee8cc1Swenshuai.xi                 u16data = REG_TOP_TS_TS0_SERIAL_IN;
2187*53ee8cc1Swenshuai.xi                 break;
2188*53ee8cc1Swenshuai.xi             case TSP_MUX_TS1:
2189*53ee8cc1Swenshuai.xi                 u16data = REG_TOP_TS_TS1_SERIAL_IN;
2190*53ee8cc1Swenshuai.xi                 break;
2191*53ee8cc1Swenshuai.xi             case TSP_MUX_TS2:
2192*53ee8cc1Swenshuai.xi             case TSP_MUX_TS3:
2193*53ee8cc1Swenshuai.xi             case TSP_MUX_TS4:
2194*53ee8cc1Swenshuai.xi                 u16data = 1;
2195*53ee8cc1Swenshuai.xi                 break;
2196*53ee8cc1Swenshuai.xi             default:
2197*53ee8cc1Swenshuai.xi                 break;
2198*53ee8cc1Swenshuai.xi         }
2199*53ee8cc1Swenshuai.xi     }
2200*53ee8cc1Swenshuai.xi     else
2201*53ee8cc1Swenshuai.xi     {// parallel in
2202*53ee8cc1Swenshuai.xi         switch(u16padsel)
2203*53ee8cc1Swenshuai.xi         {
2204*53ee8cc1Swenshuai.xi             case TSP_MUX_TS0:
2205*53ee8cc1Swenshuai.xi             case TSP_MUX_TS1:
2206*53ee8cc1Swenshuai.xi                 u16data = 1;
2207*53ee8cc1Swenshuai.xi                 break;
2208*53ee8cc1Swenshuai.xi             case TSP_MUX_TS2:
2209*53ee8cc1Swenshuai.xi             case TSP_MUX_TS3:
2210*53ee8cc1Swenshuai.xi             case TSP_MUX_TS4:
2211*53ee8cc1Swenshuai.xi                 u16data = 2;
2212*53ee8cc1Swenshuai.xi                 break;
2213*53ee8cc1Swenshuai.xi             default:
2214*53ee8cc1Swenshuai.xi                 break;
2215*53ee8cc1Swenshuai.xi         }
2216*53ee8cc1Swenshuai.xi     }
2217*53ee8cc1Swenshuai.xi 
2218*53ee8cc1Swenshuai.xi     //printf("[%s\[%d] u16Reg %x u16Mask %x u16Shift %x\n", __FUNCTION__, __LINE__, u16Reg, u16Mask, u16Shift);
2219*53ee8cc1Swenshuai.xi     TSP_TOP_REG(u16Reg) = (TSP_TOP_REG(u16Reg) & ~(u16Mask)) | (u16data << u16Shift);
2220*53ee8cc1Swenshuai.xi }
2221*53ee8cc1Swenshuai.xi 
HAL_TSP_SelPad_ClkInv(MS_U32 u32EngId,MS_U32 u32Flow,MS_BOOL bClkInv)2222*53ee8cc1Swenshuai.xi void HAL_TSP_SelPad_ClkInv(MS_U32 u32EngId, MS_U32 u32Flow, MS_BOOL bClkInv)
2223*53ee8cc1Swenshuai.xi {
2224*53ee8cc1Swenshuai.xi     MS_U32 u32Clk  = 0UL;
2225*53ee8cc1Swenshuai.xi     MS_U32 u32data = 0UL;
2226*53ee8cc1Swenshuai.xi 
2227*53ee8cc1Swenshuai.xi     if(u32Flow == 0x80UL) //E_DRVTSP_IF_FI
2228*53ee8cc1Swenshuai.xi     {
2229*53ee8cc1Swenshuai.xi         u32Flow = 3UL;
2230*53ee8cc1Swenshuai.xi     }
2231*53ee8cc1Swenshuai.xi     else if(u32Flow >= TSP_IF_NUM)
2232*53ee8cc1Swenshuai.xi     {
2233*53ee8cc1Swenshuai.xi         return;
2234*53ee8cc1Swenshuai.xi     }
2235*53ee8cc1Swenshuai.xi 
2236*53ee8cc1Swenshuai.xi     switch(_u32FlowPadMap[u32Flow])
2237*53ee8cc1Swenshuai.xi     {
2238*53ee8cc1Swenshuai.xi         case TSP_MUX_INDEMOD:
2239*53ee8cc1Swenshuai.xi             u32Clk = TSP_CLK_INDEMOD;
2240*53ee8cc1Swenshuai.xi             break;
2241*53ee8cc1Swenshuai.xi         case TSP_MUX_TS0:
2242*53ee8cc1Swenshuai.xi             u32Clk = TSP_CLK_TS0;
2243*53ee8cc1Swenshuai.xi             break;
2244*53ee8cc1Swenshuai.xi         case TSP_MUX_TS1:
2245*53ee8cc1Swenshuai.xi             u32Clk = TSP_CLK_TS1;
2246*53ee8cc1Swenshuai.xi             break;
2247*53ee8cc1Swenshuai.xi         case TSP_MUX_TS2:
2248*53ee8cc1Swenshuai.xi             u32Clk = TSP_CLK_TS2;
2249*53ee8cc1Swenshuai.xi             break;
2250*53ee8cc1Swenshuai.xi         case TSP_MUX_TS3:
2251*53ee8cc1Swenshuai.xi             u32Clk = TSP_CLK_TS3;
2252*53ee8cc1Swenshuai.xi             break;
2253*53ee8cc1Swenshuai.xi         case TSP_MUX_TS4:
2254*53ee8cc1Swenshuai.xi             u32Clk = TSP_CLK_TS4;
2255*53ee8cc1Swenshuai.xi             break;
2256*53ee8cc1Swenshuai.xi         case TSP_MUX_TSO:
2257*53ee8cc1Swenshuai.xi             u32Clk = TSP_CLK_TSOOUT;
2258*53ee8cc1Swenshuai.xi             break;
2259*53ee8cc1Swenshuai.xi         default:
2260*53ee8cc1Swenshuai.xi             return;
2261*53ee8cc1Swenshuai.xi     }
2262*53ee8cc1Swenshuai.xi 
2263*53ee8cc1Swenshuai.xi     if (bClkInv)
2264*53ee8cc1Swenshuai.xi         u32Clk |= TSP_CLK_INVERSE;
2265*53ee8cc1Swenshuai.xi 
2266*53ee8cc1Swenshuai.xi     switch(u32Flow)
2267*53ee8cc1Swenshuai.xi     {
2268*53ee8cc1Swenshuai.xi         case 0:
2269*53ee8cc1Swenshuai.xi             u32data = TSP_CLKGEN0_REG(REG_CLKGEN0_TSN_CLK) & ~(REG_CLKGEN0_TSN_CLK_MASK<< REG_CLKGEN0_TSN_CLK_TS0_SHIFT);
2270*53ee8cc1Swenshuai.xi             u32data |= (u32Clk<< REG_CLKGEN0_TSN_CLK_TS0_SHIFT);
2271*53ee8cc1Swenshuai.xi             TSP_CLKGEN0_REG(REG_CLKGEN0_TSN_CLK) = u32data;
2272*53ee8cc1Swenshuai.xi             break;
2273*53ee8cc1Swenshuai.xi         case 1:
2274*53ee8cc1Swenshuai.xi             u32data = TSP_CLKGEN0_REG(REG_CLKGEN0_TSN_CLK) & ~(REG_CLKGEN0_TSN_CLK_MASK<< REG_CLKGEN0_TSN_CLK_TS1_SHIFT);
2275*53ee8cc1Swenshuai.xi             u32data |= (u32Clk<< REG_CLKGEN0_TSN_CLK_TS1_SHIFT);
2276*53ee8cc1Swenshuai.xi             TSP_CLKGEN0_REG(REG_CLKGEN0_TSN_CLK) = u32data;
2277*53ee8cc1Swenshuai.xi             break;
2278*53ee8cc1Swenshuai.xi         case 2:
2279*53ee8cc1Swenshuai.xi             u32data = TSP_CLKGEN0_REG(REG_CLKGEN0_TSN_CLK2) & ~(REG_CLKGEN0_TSN_CLK_MASK<< REG_CLKGEN0_TSN_CLK_TS2_SHIFT);
2280*53ee8cc1Swenshuai.xi             u32data |= (u32Clk<< REG_CLKGEN0_TSN_CLK_TS2_SHIFT);
2281*53ee8cc1Swenshuai.xi             TSP_CLKGEN0_REG(REG_CLKGEN0_TSN_CLK2) = u32data;
2282*53ee8cc1Swenshuai.xi             break;
2283*53ee8cc1Swenshuai.xi         case 3:
2284*53ee8cc1Swenshuai.xi             u32data = TSP_CLKGEN2_REG(REG_CLKGEN2_TSN_CLKFI) & ~(REG_CLKGEN0_TSN_CLK_MASK<< REG_CLKGEN2_TSN_CLK_TSFI_SHIFT);
2285*53ee8cc1Swenshuai.xi             u32data |= (u32Clk<< REG_CLKGEN2_TSN_CLK_TSFI_SHIFT);
2286*53ee8cc1Swenshuai.xi             TSP_CLKGEN2_REG(REG_CLKGEN2_TSN_CLKFI) = u32data;
2287*53ee8cc1Swenshuai.xi             break;
2288*53ee8cc1Swenshuai.xi         default:
2289*53ee8cc1Swenshuai.xi             return;
2290*53ee8cc1Swenshuai.xi     }
2291*53ee8cc1Swenshuai.xi 
2292*53ee8cc1Swenshuai.xi }
2293*53ee8cc1Swenshuai.xi 
HAL_INT_Force(MS_U16 u16value)2294*53ee8cc1Swenshuai.xi void HAL_INT_Force(MS_U16 u16value)
2295*53ee8cc1Swenshuai.xi {
2296*53ee8cc1Swenshuai.xi     TSP_INT_REG(0x31) = TSP_INT_REG(0x31) | u16value;
2297*53ee8cc1Swenshuai.xi     printf("HAL_INT_Force 0x%x\n", (int)(TSP_INT_REG(0x31)))  ;
2298*53ee8cc1Swenshuai.xi 
2299*53ee8cc1Swenshuai.xi }
2300*53ee8cc1Swenshuai.xi 
HAL_TSP_SelPad_ExtSync(MS_U32 u32EngId,MS_BOOL bExtSync,MS_U32 u32Flow)2301*53ee8cc1Swenshuai.xi void HAL_TSP_SelPad_ExtSync(MS_U32 u32EngId, MS_BOOL bExtSync, MS_U32 u32Flow)
2302*53ee8cc1Swenshuai.xi {
2303*53ee8cc1Swenshuai.xi     REG32* pReg = NULL;
2304*53ee8cc1Swenshuai.xi     MS_U32 u32ExtSync = 0;
2305*53ee8cc1Swenshuai.xi 
2306*53ee8cc1Swenshuai.xi     if(u32Flow == 0x80UL) //E_DRVTSP_IF_FI
2307*53ee8cc1Swenshuai.xi     {
2308*53ee8cc1Swenshuai.xi         u32Flow = 3UL;
2309*53ee8cc1Swenshuai.xi     }
2310*53ee8cc1Swenshuai.xi     else if(u32Flow >= TSP_IF_NUM)
2311*53ee8cc1Swenshuai.xi     {
2312*53ee8cc1Swenshuai.xi         return;
2313*53ee8cc1Swenshuai.xi     }
2314*53ee8cc1Swenshuai.xi 
2315*53ee8cc1Swenshuai.xi     switch(u32Flow)
2316*53ee8cc1Swenshuai.xi     {
2317*53ee8cc1Swenshuai.xi         case 0:
2318*53ee8cc1Swenshuai.xi             pReg = &(_TspCtrl[0].Hw_Config0);
2319*53ee8cc1Swenshuai.xi             u32ExtSync = TSP_HW_CFG0_TSIF0_EXTSYNC;
2320*53ee8cc1Swenshuai.xi             break;
2321*53ee8cc1Swenshuai.xi         case 1:
2322*53ee8cc1Swenshuai.xi             pReg = &(_TspCtrl[0].Hw_Config2);
2323*53ee8cc1Swenshuai.xi             u32ExtSync = TSP_HW_CFG2_TSIF1_EXTSYNC;
2324*53ee8cc1Swenshuai.xi             break;
2325*53ee8cc1Swenshuai.xi         case 2:
2326*53ee8cc1Swenshuai.xi             pReg = &(_TspCtrl[0].PVR2_Config);
2327*53ee8cc1Swenshuai.xi             u32ExtSync = TSP_TSIF2_EXTSYNC;
2328*53ee8cc1Swenshuai.xi             break;
2329*53ee8cc1Swenshuai.xi         case 3:
2330*53ee8cc1Swenshuai.xi             if (bExtSync)
2331*53ee8cc1Swenshuai.xi             {
2332*53ee8cc1Swenshuai.xi                 _HAL_REG16_W(&(_TspCtrl5[0].Ts_If_Fi_Cfg), SET_FLAG1(_HAL_REG16_R(&(_TspCtrl5[0].Ts_If_Fi_Cfg)), TSP_FIIF_EXT_SYNC_SEL));
2333*53ee8cc1Swenshuai.xi             }
2334*53ee8cc1Swenshuai.xi             else
2335*53ee8cc1Swenshuai.xi             {
2336*53ee8cc1Swenshuai.xi                 _HAL_REG16_W(&(_TspCtrl5[0].Ts_If_Fi_Cfg), RESET_FLAG1(_HAL_REG16_R(&(_TspCtrl5[0].Ts_If_Fi_Cfg)), TSP_FIIF_EXT_SYNC_SEL));
2337*53ee8cc1Swenshuai.xi             }
2338*53ee8cc1Swenshuai.xi             return;
2339*53ee8cc1Swenshuai.xi         default:
2340*53ee8cc1Swenshuai.xi             return;
2341*53ee8cc1Swenshuai.xi     }
2342*53ee8cc1Swenshuai.xi 
2343*53ee8cc1Swenshuai.xi     if (bExtSync)
2344*53ee8cc1Swenshuai.xi     {
2345*53ee8cc1Swenshuai.xi         _HAL_REG32_W(pReg, SET_FLAG1(_HAL_REG32_R(pReg), u32ExtSync));
2346*53ee8cc1Swenshuai.xi     }
2347*53ee8cc1Swenshuai.xi     else
2348*53ee8cc1Swenshuai.xi     {
2349*53ee8cc1Swenshuai.xi         _HAL_REG32_W(pReg, RESET_FLAG1(_HAL_REG32_R(pReg), u32ExtSync));
2350*53ee8cc1Swenshuai.xi     }
2351*53ee8cc1Swenshuai.xi }
2352*53ee8cc1Swenshuai.xi 
HAL_TSP_SelPad_Parl(MS_U32 u32EngId,MS_BOOL bParl,MS_U32 u32Flow)2353*53ee8cc1Swenshuai.xi void HAL_TSP_SelPad_Parl(MS_U32 u32EngId, MS_BOOL bParl, MS_U32 u32Flow)
2354*53ee8cc1Swenshuai.xi {
2355*53ee8cc1Swenshuai.xi     REG32* pReg = NULL;
2356*53ee8cc1Swenshuai.xi     MS_U32 u32Parl = 0UL;
2357*53ee8cc1Swenshuai.xi 
2358*53ee8cc1Swenshuai.xi     if(u32Flow == 0x80UL) //E_DRVTSP_IF_FI
2359*53ee8cc1Swenshuai.xi     {
2360*53ee8cc1Swenshuai.xi         u32Flow = 3UL;
2361*53ee8cc1Swenshuai.xi     }
2362*53ee8cc1Swenshuai.xi     else if(u32Flow >= TSP_IF_NUM)
2363*53ee8cc1Swenshuai.xi     {
2364*53ee8cc1Swenshuai.xi         return;
2365*53ee8cc1Swenshuai.xi     }
2366*53ee8cc1Swenshuai.xi 
2367*53ee8cc1Swenshuai.xi     switch(u32Flow)
2368*53ee8cc1Swenshuai.xi     {
2369*53ee8cc1Swenshuai.xi         case 0:
2370*53ee8cc1Swenshuai.xi             pReg = &(_TspCtrl[0].Hw_Config0);
2371*53ee8cc1Swenshuai.xi             u32Parl = TSP_HW_CFG0_TSIF0_PARL;
2372*53ee8cc1Swenshuai.xi             break;
2373*53ee8cc1Swenshuai.xi         case 1:
2374*53ee8cc1Swenshuai.xi             pReg = &(_TspCtrl[0].Hw_Config2);
2375*53ee8cc1Swenshuai.xi             u32Parl = TSP_HW_CFG2_TSIF1_PARL;
2376*53ee8cc1Swenshuai.xi             break;
2377*53ee8cc1Swenshuai.xi         case 2:
2378*53ee8cc1Swenshuai.xi             pReg = &(_TspCtrl[0].PVR2_Config);
2379*53ee8cc1Swenshuai.xi             u32Parl = TSP_TSIF2_PARL;
2380*53ee8cc1Swenshuai.xi             break;
2381*53ee8cc1Swenshuai.xi         case 3:
2382*53ee8cc1Swenshuai.xi             if (bParl)
2383*53ee8cc1Swenshuai.xi             {
2384*53ee8cc1Swenshuai.xi                 _HAL_REG16_W(&(_TspCtrl5[0].Ts_If_Fi_Cfg), SET_FLAG1(_HAL_REG16_R(&(_TspCtrl5[0].Ts_If_Fi_Cfg)), TSP_FIIF_P_SEL));
2385*53ee8cc1Swenshuai.xi             }
2386*53ee8cc1Swenshuai.xi             else
2387*53ee8cc1Swenshuai.xi             {
2388*53ee8cc1Swenshuai.xi                 _HAL_REG16_W(&(_TspCtrl5[0].Ts_If_Fi_Cfg), RESET_FLAG1(_HAL_REG16_R(&(_TspCtrl5[0].Ts_If_Fi_Cfg)), TSP_FIIF_P_SEL));
2389*53ee8cc1Swenshuai.xi             }
2390*53ee8cc1Swenshuai.xi             return;
2391*53ee8cc1Swenshuai.xi         default:
2392*53ee8cc1Swenshuai.xi             return;
2393*53ee8cc1Swenshuai.xi     }
2394*53ee8cc1Swenshuai.xi 
2395*53ee8cc1Swenshuai.xi     if (bParl)  // parallel
2396*53ee8cc1Swenshuai.xi     {
2397*53ee8cc1Swenshuai.xi         _HAL_REG32_W(pReg, SET_FLAG1(_HAL_REG32_R(pReg), u32Parl));
2398*53ee8cc1Swenshuai.xi     }
2399*53ee8cc1Swenshuai.xi     else        // serial
2400*53ee8cc1Swenshuai.xi     {
2401*53ee8cc1Swenshuai.xi         _HAL_REG32_W(pReg, RESET_FLAG1(_HAL_REG32_R(pReg), u32Parl));
2402*53ee8cc1Swenshuai.xi     }
2403*53ee8cc1Swenshuai.xi }
2404*53ee8cc1Swenshuai.xi 
HAL_TSP_BlockTSOIn_En(MS_U32 u32EngId,MS_U32 u32TSIf,MS_BOOL bBlockMode)2405*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_BlockTSOIn_En(MS_U32 u32EngId, MS_U32 u32TSIf, MS_BOOL bBlockMode)
2406*53ee8cc1Swenshuai.xi {
2407*53ee8cc1Swenshuai.xi     MS_U16 u16data = 0;
2408*53ee8cc1Swenshuai.xi 
2409*53ee8cc1Swenshuai.xi     switch(u32TSIf)
2410*53ee8cc1Swenshuai.xi     {
2411*53ee8cc1Swenshuai.xi         case 0:
2412*53ee8cc1Swenshuai.xi             u16data = TSP_TSIFCFG_TSIF0_TSOBLK_EN;
2413*53ee8cc1Swenshuai.xi             break;
2414*53ee8cc1Swenshuai.xi         case 1:
2415*53ee8cc1Swenshuai.xi             u16data = TSP_TSIFCFG_TSIF1_TSOBLK_EN;
2416*53ee8cc1Swenshuai.xi             break;
2417*53ee8cc1Swenshuai.xi         case 2:
2418*53ee8cc1Swenshuai.xi             u16data = TSP_TSIFCFG_TSIF2_TSOBLK_EN;
2419*53ee8cc1Swenshuai.xi             break;
2420*53ee8cc1Swenshuai.xi         default:
2421*53ee8cc1Swenshuai.xi             u16data = TSP_TSIFCFG_TSIFFI_TSOBLK_EN;
2422*53ee8cc1Swenshuai.xi             break;
2423*53ee8cc1Swenshuai.xi     }
2424*53ee8cc1Swenshuai.xi 
2425*53ee8cc1Swenshuai.xi     if(bBlockMode == TRUE)
2426*53ee8cc1Swenshuai.xi     {
2427*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&_TspCtrl5[u32EngId].TsifCfg,
2428*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG16_R(&_TspCtrl5[u32EngId].TsifCfg), u16data));
2429*53ee8cc1Swenshuai.xi     }
2430*53ee8cc1Swenshuai.xi     else
2431*53ee8cc1Swenshuai.xi     {
2432*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&_TspCtrl5[u32EngId].TsifCfg,
2433*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG16_R(&_TspCtrl5[u32EngId].TsifCfg), u16data));
2434*53ee8cc1Swenshuai.xi     }
2435*53ee8cc1Swenshuai.xi 
2436*53ee8cc1Swenshuai.xi     return TRUE;
2437*53ee8cc1Swenshuai.xi 
2438*53ee8cc1Swenshuai.xi }
2439*53ee8cc1Swenshuai.xi 
HAL_TSP_TsOuOutClockPhase(MS_U16 u16OutPad,MS_U16 u16Val,MS_BOOL bEnable,MS_U32 u32S2pOpt)2440*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_TsOuOutClockPhase(MS_U16 u16OutPad, MS_U16 u16Val, MS_BOOL bEnable, MS_U32 u32S2pOpt)
2441*53ee8cc1Swenshuai.xi {
2442*53ee8cc1Swenshuai.xi     if(bEnable == FALSE)
2443*53ee8cc1Swenshuai.xi     {
2444*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&_TspSample[0].S2P_Out_Clk_Sample,
2445*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG16_R(&_TspSample[0].S2P_Out_Clk_Sample), S2P_PHASE_ADJUST_EN));
2446*53ee8cc1Swenshuai.xi     }
2447*53ee8cc1Swenshuai.xi     else
2448*53ee8cc1Swenshuai.xi     {
2449*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&_TspSample[0].S2P_Out_Clk_Sample,
2450*53ee8cc1Swenshuai.xi             (_HAL_REG16_R(&_TspSample[0].S2P_Out_Clk_Sample) & ~S2P_PHASE_ADJUST_COUNT_MASK) | (u16Val & S2P_PHASE_ADJUST_COUNT_MASK) | S2P_PHASE_ADJUST_EN);
2451*53ee8cc1Swenshuai.xi     }
2452*53ee8cc1Swenshuai.xi 
2453*53ee8cc1Swenshuai.xi     // Set S2P clk invert config
2454*53ee8cc1Swenshuai.xi     if(u32S2pOpt & HAL_S2P_CLK_OPT_INVERT)
2455*53ee8cc1Swenshuai.xi     {
2456*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&_TspSample[0].S2P_Out_Clk_Sample,
2457*53ee8cc1Swenshuai.xi             SET_FLAG1(_HAL_REG16_R(&_TspSample[0].S2P_Out_Clk_Sample), S2P_CLK_INVERT));
2458*53ee8cc1Swenshuai.xi     }
2459*53ee8cc1Swenshuai.xi     if(u32S2pOpt & HAL_S2P_CLK_OPT_NON_INVERT)
2460*53ee8cc1Swenshuai.xi     {
2461*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&_TspSample[0].S2P_Out_Clk_Sample,
2462*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG16_R(&_TspSample[0].S2P_Out_Clk_Sample), S2P_CLK_INVERT));
2463*53ee8cc1Swenshuai.xi     }
2464*53ee8cc1Swenshuai.xi 
2465*53ee8cc1Swenshuai.xi     return TRUE;
2466*53ee8cc1Swenshuai.xi }
2467*53ee8cc1Swenshuai.xi 
HAL_TSP_TSOut_En(MS_BOOL bEnable)2468*53ee8cc1Swenshuai.xi void HAL_TSP_TSOut_En(MS_BOOL bEnable)
2469*53ee8cc1Swenshuai.xi {
2470*53ee8cc1Swenshuai.xi     return;
2471*53ee8cc1Swenshuai.xi }
2472*53ee8cc1Swenshuai.xi 
HAL_TSP_Parl_BitOrderSwap(MS_U32 u32EngId,MS_U32 u32Flow,MS_BOOL bInvert)2473*53ee8cc1Swenshuai.xi void HAL_TSP_Parl_BitOrderSwap(MS_U32 u32EngId, MS_U32 u32Flow, MS_BOOL bInvert)
2474*53ee8cc1Swenshuai.xi {
2475*53ee8cc1Swenshuai.xi     REG32* pReg = &(_TspCtrl[0].Hw_Config4);
2476*53ee8cc1Swenshuai.xi     MS_U32 u32Invert = 0;
2477*53ee8cc1Swenshuai.xi 
2478*53ee8cc1Swenshuai.xi     if(u32Flow == 0x80UL) //E_DRVTSP_IF_FI
2479*53ee8cc1Swenshuai.xi     {
2480*53ee8cc1Swenshuai.xi         u32Flow = 3UL;
2481*53ee8cc1Swenshuai.xi     }
2482*53ee8cc1Swenshuai.xi     else if(u32Flow >= TSP_IF_NUM)
2483*53ee8cc1Swenshuai.xi     {
2484*53ee8cc1Swenshuai.xi         return;
2485*53ee8cc1Swenshuai.xi     }
2486*53ee8cc1Swenshuai.xi 
2487*53ee8cc1Swenshuai.xi     switch(u32Flow)
2488*53ee8cc1Swenshuai.xi     {
2489*53ee8cc1Swenshuai.xi         case 0:
2490*53ee8cc1Swenshuai.xi             pReg = &(_TspCtrl[0].Hw_Config4);
2491*53ee8cc1Swenshuai.xi             u32Invert = TSP_HW_CFG4_TS_DATA0_SWAP;
2492*53ee8cc1Swenshuai.xi             break;
2493*53ee8cc1Swenshuai.xi         case 1:
2494*53ee8cc1Swenshuai.xi             pReg = &(_TspCtrl[0].Hw_Config4);
2495*53ee8cc1Swenshuai.xi             u32Invert = TSP_HW_CFG4_TS_DATA1_SWAP;
2496*53ee8cc1Swenshuai.xi             break;
2497*53ee8cc1Swenshuai.xi         case 2:
2498*53ee8cc1Swenshuai.xi             pReg = &(_TspCtrl[0].PVR2_Config);
2499*53ee8cc1Swenshuai.xi             u32Invert = TSP_PVR2_STR2MIU_DSWAP;
2500*53ee8cc1Swenshuai.xi             break;
2501*53ee8cc1Swenshuai.xi         case 3:
2502*53ee8cc1Swenshuai.xi             if (bInvert)
2503*53ee8cc1Swenshuai.xi             {
2504*53ee8cc1Swenshuai.xi                 _HAL_REG16_W(&(_TspCtrl5[0].Ts_If_Fi_Cfg), SET_FLAG1(_HAL_REG16_R(&(_TspCtrl5[0].Ts_If_Fi_Cfg)), TSP_FIIF_DATA_SWAP));
2505*53ee8cc1Swenshuai.xi             }
2506*53ee8cc1Swenshuai.xi             else
2507*53ee8cc1Swenshuai.xi             {
2508*53ee8cc1Swenshuai.xi                 _HAL_REG16_W(&(_TspCtrl5[0].Ts_If_Fi_Cfg), RESET_FLAG1(_HAL_REG16_R(&(_TspCtrl5[0].Ts_If_Fi_Cfg)), TSP_FIIF_DATA_SWAP));
2509*53ee8cc1Swenshuai.xi             }
2510*53ee8cc1Swenshuai.xi             return;
2511*53ee8cc1Swenshuai.xi         default:
2512*53ee8cc1Swenshuai.xi             return;
2513*53ee8cc1Swenshuai.xi     }
2514*53ee8cc1Swenshuai.xi 
2515*53ee8cc1Swenshuai.xi     if(bInvert)
2516*53ee8cc1Swenshuai.xi     {
2517*53ee8cc1Swenshuai.xi         _HAL_REG32_W(pReg, SET_FLAG1(_HAL_REG32_R(pReg), u32Invert));
2518*53ee8cc1Swenshuai.xi     }
2519*53ee8cc1Swenshuai.xi     else
2520*53ee8cc1Swenshuai.xi     {
2521*53ee8cc1Swenshuai.xi         _HAL_REG32_W(pReg, RESET_FLAG1(_HAL_REG32_R(pReg), u32Invert));
2522*53ee8cc1Swenshuai.xi     }
2523*53ee8cc1Swenshuai.xi }
2524*53ee8cc1Swenshuai.xi 
HAL_TSP_GetCap(MS_U32 u32Cap,void * pData)2525*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_GetCap(MS_U32 u32Cap, void* pData)
2526*53ee8cc1Swenshuai.xi {
2527*53ee8cc1Swenshuai.xi     MS_BOOL bRet = TRUE;
2528*53ee8cc1Swenshuai.xi 
2529*53ee8cc1Swenshuai.xi     switch (u32Cap)
2530*53ee8cc1Swenshuai.xi     {
2531*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_PID_FILTER_NUM:
2532*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = TSP_PIDFLT_NUM_ALL;
2533*53ee8cc1Swenshuai.xi         break;
2534*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_PVR_FILTER_NUM:
2535*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_PVR1_FILTER_NUM:
2536*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = TSP_PIDFLT_NUM_ALL;
2537*53ee8cc1Swenshuai.xi         break;
2538*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_SEC_FILTER_NUM:
2539*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = TSP_SECFLT_NUM;
2540*53ee8cc1Swenshuai.xi         break;
2541*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_SEC_BUF_NUM:
2542*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = TSP_SECBUF_NUM;
2543*53ee8cc1Swenshuai.xi         break;
2544*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_PVR_ENG_NUM:
2545*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = TSP_PVR_IF_NUM;
2546*53ee8cc1Swenshuai.xi         break;
2547*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_MMFI0_FILTER_NUM:
2548*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = TSP_MMFI0_FILTER_NUM;
2549*53ee8cc1Swenshuai.xi         break;
2550*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_MMFI1_FILTER_NUM:
2551*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = TSP_MMFI1_FILTER_NUM;
2552*53ee8cc1Swenshuai.xi         break;
2553*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_TSIF_NUM:
2554*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = TSP_IF_NUM;
2555*53ee8cc1Swenshuai.xi         break;
2556*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_DEMOD_NUM:
2557*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = TSP_DEMOD_NUM;
2558*53ee8cc1Swenshuai.xi         break;
2559*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_VFIFO_NUM:
2560*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = TSP_VFIFO_NUM;
2561*53ee8cc1Swenshuai.xi         break;
2562*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_AFIFO_NUM:
2563*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = TSP_AFIFO_NUM;
2564*53ee8cc1Swenshuai.xi         break;
2565*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_TS_PAD_NUM:
2566*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = TSP_TS_PAD_NUM;
2567*53ee8cc1Swenshuai.xi         break;
2568*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_VQ_NUM:
2569*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = TSP_VQ_NUM;
2570*53ee8cc1Swenshuai.xi         break;
2571*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_CA_FLT_NUM:
2572*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = TSP_CA_FLT_NUM;
2573*53ee8cc1Swenshuai.xi         break;
2574*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_CA_KEY_NUM:
2575*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = TSP_CA_KEY_NUM;
2576*53ee8cc1Swenshuai.xi         break;
2577*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_FW_ALIGN:
2578*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = (1L << (MIU_BUS+TSP_DNLD_ADDR_ALI_SHIFT));
2579*53ee8cc1Swenshuai.xi         break;
2580*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_VQ_ALIGN:
2581*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_SEC_BUF_ALIGN:
2582*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_PVR_ALIGN:
2583*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = (1L << MIU_BUS);
2584*53ee8cc1Swenshuai.xi         break;
2585*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_VQ_PITCH:
2586*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = VQ_PACKET_UNIT_LEN;
2587*53ee8cc1Swenshuai.xi         break;
2588*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_PVRCA_PATH_NUM:
2589*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = TSP_CA_ENGINE_NUM;
2590*53ee8cc1Swenshuai.xi         break;
2591*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_SHAREKEY_FLT_RANGE:
2592*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = DSCMB_FLT_SHAREKEY_START_ID;
2593*53ee8cc1Swenshuai.xi         *((MS_U32*)pData + 1) = DSCMB_FLT_SHAREKEY_END_ID;
2594*53ee8cc1Swenshuai.xi         break;
2595*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_CA0_FLT_RANGE:
2596*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = DSCMB_FLT_START_ID;
2597*53ee8cc1Swenshuai.xi         *((MS_U32*)pData + 1) = DSCMB_FLT_END_ID;
2598*53ee8cc1Swenshuai.xi         break;
2599*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_CA1_FLT_RANGE:
2600*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = DSCMB1_FLT_START_ID;
2601*53ee8cc1Swenshuai.xi         *((MS_U32*)pData + 1) = DSCMB1_FLT_END_ID;
2602*53ee8cc1Swenshuai.xi         break;
2603*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_SHAREKEY_FLT1_RANGE:
2604*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = DSCMB_FLT_SHAREKEY1_START_ID;
2605*53ee8cc1Swenshuai.xi         *(((MS_U32*)pData) + 1) = DSCMB_FLT_SHAREKEY1_END_ID;
2606*53ee8cc1Swenshuai.xi         break;
2607*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_HW_TYPE:
2608*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = 0x00001006UL;
2609*53ee8cc1Swenshuai.xi         break;
2610*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_HWPCR_SUPPORT:
2611*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = TSP_HWPCR_BY_HK;
2612*53ee8cc1Swenshuai.xi         break;
2613*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_PCRFLT_START_IDX:
2614*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = TSP_PIDFLT_NUM;
2615*53ee8cc1Swenshuai.xi         break;
2616*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_HWWP_SET_NUM:
2617*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = TSP_WP_SET_NUM;
2618*53ee8cc1Swenshuai.xi         break;
2619*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_DSCMB_ENG_NUM:
2620*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = TSP_CA_ENGINE_NUM;
2621*53ee8cc1Swenshuai.xi         break;
2622*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_MERGESTR_NUM:
2623*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = TSP_MERGESTR_MUM;
2624*53ee8cc1Swenshuai.xi         break;
2625*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_MAX_SEC_FLT_DEPTH:
2626*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = TSP_SEC_FLT_DEPTH;
2627*53ee8cc1Swenshuai.xi         break;
2628*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_FW_BUF_SIZE:
2629*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = TSP_FW_BUF_SIZE;
2630*53ee8cc1Swenshuai.xi         break;
2631*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_FW_BUF_RANGE:
2632*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = TSP_FW_BUF_LOW_BUD;
2633*53ee8cc1Swenshuai.xi         *((MS_U32*)pData+1) = TSP_FW_BUF_UP_BUD;
2634*53ee8cc1Swenshuai.xi         break;
2635*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_VQ_BUF_RANGE:
2636*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = TSP_VQ_BUF_LOW_BUD;
2637*53ee8cc1Swenshuai.xi         *((MS_U32*)pData+1) = TSP_VQ_BUF_UP_BUD;
2638*53ee8cc1Swenshuai.xi         break;
2639*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_SEC_BUF_RANGE:
2640*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = TSP_SEC_BUF_LOW_BUD;
2641*53ee8cc1Swenshuai.xi         *((MS_U32*)pData+1) = TSP_SEC_BUF_UP_BUD;
2642*53ee8cc1Swenshuai.xi         break;
2643*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_FIQ_NUM:
2644*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = TSP_FIQ_NUM;
2645*53ee8cc1Swenshuai.xi         break;
2646*53ee8cc1Swenshuai.xi     default:
2647*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = 0xFFFFFFFFUL;
2648*53ee8cc1Swenshuai.xi         bRet = FALSE;
2649*53ee8cc1Swenshuai.xi         break;
2650*53ee8cc1Swenshuai.xi     }
2651*53ee8cc1Swenshuai.xi     return bRet;
2652*53ee8cc1Swenshuai.xi }
2653*53ee8cc1Swenshuai.xi 
2654*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2655*53ee8cc1Swenshuai.xi // Macro function
2656*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
_HAL_TSP_FW_load(MS_PHY phyFwAddrPhys,MS_U32 u32FwSize,MS_BOOL bFwDMA,MS_BOOL bIQmem,MS_BOOL bDQmem)2657*53ee8cc1Swenshuai.xi static void _HAL_TSP_FW_load(
2658*53ee8cc1Swenshuai.xi     MS_PHY                   phyFwAddrPhys,
2659*53ee8cc1Swenshuai.xi     MS_U32                     u32FwSize,
2660*53ee8cc1Swenshuai.xi     MS_BOOL                    bFwDMA,
2661*53ee8cc1Swenshuai.xi     MS_BOOL                    bIQmem,
2662*53ee8cc1Swenshuai.xi     MS_BOOL                    bDQmem)
2663*53ee8cc1Swenshuai.xi {
2664*53ee8cc1Swenshuai.xi     // bDQmem is always true
2665*53ee8cc1Swenshuai.xi     MS_ASSERT(bDQmem);
2666*53ee8cc1Swenshuai.xi 
2667*53ee8cc1Swenshuai.xi     _phyOrLoadMiuOffset = _HAL_TSP_MIU_OFFSET(phyFwAddrPhys);
2668*53ee8cc1Swenshuai.xi 
2669*53ee8cc1Swenshuai.xi     // @FIXME: Richard: Only allow TSP FW running in DRAM at this first stage.
2670*53ee8cc1Swenshuai.xi     // improve this afterward.
2671*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].Cpu_Base, 0UL/*u32FwAddrPhys >> 3*/); // 16 bytes address unit
2672*53ee8cc1Swenshuai.xi 
2673*53ee8cc1Swenshuai.xi     if (bFwDMA)
2674*53ee8cc1Swenshuai.xi     {
2675*53ee8cc1Swenshuai.xi         MS_U32              u32DnldCtrl  = 0UL;
2676*53ee8cc1Swenshuai.xi         MS_U32              u32DnldCtrl1 = 0UL;
2677*53ee8cc1Swenshuai.xi         u32DnldCtrl  =      (MS_U32)((((phyFwAddrPhys-_phyOrLoadMiuOffset) >> MIU_BUS) >> TSP_DNLD_ADDR_ALI_SHIFT) & TSP_DNLD_ADDR_MASK);
2678*53ee8cc1Swenshuai.xi         u32DnldCtrl1 =      (MS_U32)(((((phyFwAddrPhys-_phyOrLoadMiuOffset) >> MIU_BUS) >> TSP_DNLD_ADDR_ALI_SHIFT) >> 16UL) & TSP_DMA_RADDR_MSB_MASK);
2679*53ee8cc1Swenshuai.xi         printf("firmware 111 0x%08x 0x%08x 0x%08x\n", (unsigned int)phyFwAddrPhys, (unsigned int)u32DnldCtrl1, (unsigned int)u32DnldCtrl);
2680*53ee8cc1Swenshuai.xi 
2681*53ee8cc1Swenshuai.xi         u32DnldCtrl |=      (_TSP_QMEM_SIZE << TSP_DNLD_NUM_SHFT);
2682*53ee8cc1Swenshuai.xi 
2683*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].Dnld_Ctrl, u32DnldCtrl);
2684*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].Dnld_Ctrl2, (_HAL_REG32_R(&_TspCtrl[0].Dnld_Ctrl2) & ~TSP_DMA_RADDR_MSB_MASK) | u32DnldCtrl1);
2685*53ee8cc1Swenshuai.xi 
2686*53ee8cc1Swenshuai.xi         //enable oneway lock for tee
2687*53ee8cc1Swenshuai.xi         #ifdef SECURE_PVR_ENABLE
2688*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&_TspCtrl5[0].CPU_Secure_Cfg, SET_FLAG1(_HAL_REG16_R(&_TspCtrl5[0].CPU_Secure_Cfg), FW_LOAD_ONCE_BY_TEE | FW_FIX_DMX_RST_ONEWAY));
2689*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].REG_ONEWAY, SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].REG_ONEWAY), TSP_ONEWAY_LOAD_FW_PORT));
2690*53ee8cc1Swenshuai.xi         REG16_T(ADDR_MOBF_FILEIN) = 0;
2691*53ee8cc1Swenshuai.xi         #endif
2692*53ee8cc1Swenshuai.xi 
2693*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].TSP_Ctrl,
2694*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].TSP_Ctrl), TSP_CTRL_DNLD_START| TSP_CTRL_DNLD_DONE));
2695*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].TSP_Ctrl,
2696*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].TSP_Ctrl), TSP_CTRL_DNLD_START));
2697*53ee8cc1Swenshuai.xi         while (!HAS_FLAG(_HAL_REG32_R(&_TspCtrl[0].TSP_Ctrl), TSP_CTRL_DNLD_DONE));//printf(".");
2698*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].TSP_Ctrl,
2699*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].TSP_Ctrl), TSP_CTRL_DNLD_START| TSP_CTRL_DNLD_DONE));
2700*53ee8cc1Swenshuai.xi     }
2701*53ee8cc1Swenshuai.xi 
2702*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].Qmem_Imask,
2703*53ee8cc1Swenshuai.xi             SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Qmem_Imask), _TSP_QMEM_I_MASK));
2704*53ee8cc1Swenshuai.xi     if (bIQmem)
2705*53ee8cc1Swenshuai.xi     {
2706*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].Qmem_Ibase,
2707*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Qmem_Ibase), _TSP_QMEM_I_ADDR_HIT));
2708*53ee8cc1Swenshuai.xi     }
2709*53ee8cc1Swenshuai.xi     else
2710*53ee8cc1Swenshuai.xi     {
2711*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].Qmem_Ibase, _TSP_QMEM_I_ADDR_MISS);
2712*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].TSP_Ctrl,
2713*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].TSP_Ctrl), TSP_CTRL_ICACHE_EN));
2714*53ee8cc1Swenshuai.xi     }
2715*53ee8cc1Swenshuai.xi 
2716*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].Qmem_Dmask,
2717*53ee8cc1Swenshuai.xi             SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Qmem_Dmask), _TSP_QMEM_D_MASK));
2718*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].Qmem_Dbase,
2719*53ee8cc1Swenshuai.xi             SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Qmem_Dbase), _TSP_QMEM_D_ADDR_HIT));
2720*53ee8cc1Swenshuai.xi 
2721*53ee8cc1Swenshuai.xi }
2722*53ee8cc1Swenshuai.xi 
HAL_TSP_filein_enable(MS_BOOL b_enable)2723*53ee8cc1Swenshuai.xi void HAL_TSP_filein_enable(MS_BOOL b_enable)
2724*53ee8cc1Swenshuai.xi {
2725*53ee8cc1Swenshuai.xi     // Richard: enable/disable file in timer as well
2726*53ee8cc1Swenshuai.xi     //          file in could only walk through pid filter set 0.
2727*53ee8cc1Swenshuai.xi     if (b_enable)
2728*53ee8cc1Swenshuai.xi     {
2729*53ee8cc1Swenshuai.xi         // Set Data port enable for audio bypass
2730*53ee8cc1Swenshuai.xi         //_HAL_REG32_W(&_TspCtrl[0].Hw_Config0,
2731*53ee8cc1Swenshuai.xi         //        SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config0), TSP_HW_CFG0_DATA_PORT_EN));
2732*53ee8cc1Swenshuai.xi         //_HAL_REG16_W(&_TspCtrl[0].TSP_Ctrl1,
2733*53ee8cc1Swenshuai.xi         //        SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].TSP_Ctrl1), TSP_CTRL1_FILEIN_ENABLE| TSP_CTRL1_FILEIN_TIMER_ENABLE));
2734*53ee8cc1Swenshuai.xi 
2735*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&_TspCtrl5[0].Ts_If_Fi_Cfg,
2736*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG16_R(&_TspCtrl5[0].Ts_If_Fi_Cfg), TSP_FIIF_MUX_LIVE_PATH));
2737*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&_TspCtrl[0].TSP_Ctrl1,
2738*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].TSP_Ctrl1), TSP_CTRL1_PVR_CMD_QUEUE_ENABLE));
2739*53ee8cc1Swenshuai.xi     }
2740*53ee8cc1Swenshuai.xi     else
2741*53ee8cc1Swenshuai.xi     {
2742*53ee8cc1Swenshuai.xi         //_HAL_REG32_W(&_TspCtrl[0].Hw_Config0,
2743*53ee8cc1Swenshuai.xi         //        RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config0), TSP_HW_CFG0_DATA_PORT_EN));
2744*53ee8cc1Swenshuai.xi         //_HAL_REG16_W(&_TspCtrl[0].TSP_Ctrl1,
2745*53ee8cc1Swenshuai.xi         //        RESET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].TSP_Ctrl1), TSP_CTRL1_FILEIN_ENABLE| TSP_CTRL1_FILEIN_TIMER_ENABLE));
2746*53ee8cc1Swenshuai.xi 
2747*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&_TspCtrl[0].TSP_Ctrl1,
2748*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].TSP_Ctrl1), TSP_CTRL1_PVR_CMD_QUEUE_ENABLE));
2749*53ee8cc1Swenshuai.xi     }
2750*53ee8cc1Swenshuai.xi     //_HAL_REG32_W(&_TspCtrl[0].Hw_Config0,
2751*53ee8cc1Swenshuai.xi                 //RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config0), TSP_HW_CFG0_DATA_PORT_EN));
2752*53ee8cc1Swenshuai.xi }
2753*53ee8cc1Swenshuai.xi 
HAL_TSP_PS_Path_Disable(void)2754*53ee8cc1Swenshuai.xi void HAL_TSP_PS_Path_Disable(void)
2755*53ee8cc1Swenshuai.xi {
2756*53ee8cc1Swenshuai.xi     // set PS VID/AUD enable while video/audio/audio2 bypass mode
2757*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
2758*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), (TSP_HW_CFG4_PS_VID_EN|TSP_HW_CFG4_PS_AUD_EN|TSP_HW_CFG4_PS_AUD2_EN)));
2759*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].Dnld_Ctrl2,
2760*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Dnld_Ctrl2), TSP_PS_VID3D_EN));
2761*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].HW2_Config3,
2762*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].HW2_Config3), TSP_HW_CFG3_PS_AUDC_EN|TSP_HW_CFG3_PS_AUDD_EN));
2763*53ee8cc1Swenshuai.xi 
2764*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].Hw_Config0,
2765*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config0), TSP_HW_CFG0_DATA_PORT_EN));
2766*53ee8cc1Swenshuai.xi }
2767*53ee8cc1Swenshuai.xi 
HAL_TSP_PS_Path_Enable(MS_U32 u32TsDmaCtrl)2768*53ee8cc1Swenshuai.xi void HAL_TSP_PS_Path_Enable(MS_U32 u32TsDmaCtrl)
2769*53ee8cc1Swenshuai.xi {
2770*53ee8cc1Swenshuai.xi     switch (u32TsDmaCtrl)
2771*53ee8cc1Swenshuai.xi     {
2772*53ee8cc1Swenshuai.xi         case TSP_TSDMA_CTRL_VPES0:
2773*53ee8cc1Swenshuai.xi             if((_HAL_REG32_R(&_TspCtrl[0].Hw_Config4) & TSP_HW_CFG4_PS_VID_EN) == 0)
2774*53ee8cc1Swenshuai.xi             {
2775*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
2776*53ee8cc1Swenshuai.xi                     RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), (TSP_HW_CFG4_PS_AUD_EN|TSP_HW_CFG4_PS_AUD2_EN)));
2777*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].Dnld_Ctrl2,
2778*53ee8cc1Swenshuai.xi                     RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Dnld_Ctrl2), TSP_PS_VID3D_EN));
2779*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].HW2_Config3,
2780*53ee8cc1Swenshuai.xi                     RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].HW2_Config3), TSP_HW_CFG3_PS_AUDC_EN|TSP_HW_CFG3_PS_AUDD_EN));
2781*53ee8cc1Swenshuai.xi 
2782*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
2783*53ee8cc1Swenshuai.xi                     SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_HW_CFG4_PS_VID_EN));
2784*53ee8cc1Swenshuai.xi 
2785*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].FIFO_Src, (_HAL_REG32_R(&_TspCtrl[0].FIFO_Src) & ~TSP_VID_SRC_MASK)| (TSP_SRC_FROM_PKTDMXFL << TSP_VID_SRC_SHIFT));
2786*53ee8cc1Swenshuai.xi 
2787*53ee8cc1Swenshuai.xi                 // File in PS mode, fifo block mode enable
2788*53ee8cc1Swenshuai.xi                 HAL_TSP_AVFIFO_Block_Disable(TSP_FIFO_VD, FALSE);
2789*53ee8cc1Swenshuai.xi             }
2790*53ee8cc1Swenshuai.xi 
2791*53ee8cc1Swenshuai.xi             break;
2792*53ee8cc1Swenshuai.xi         case TSP_TSDMA_CTRL_APES0:
2793*53ee8cc1Swenshuai.xi             if((_HAL_REG32_R(&_TspCtrl[0].Hw_Config4) & TSP_HW_CFG4_PS_AUD_EN) == 0)
2794*53ee8cc1Swenshuai.xi             {
2795*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
2796*53ee8cc1Swenshuai.xi                     RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), (TSP_HW_CFG4_PS_VID_EN|TSP_HW_CFG4_PS_AUD2_EN)));
2797*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].Dnld_Ctrl2,
2798*53ee8cc1Swenshuai.xi                     RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Dnld_Ctrl2), TSP_PS_VID3D_EN));
2799*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].HW2_Config3,
2800*53ee8cc1Swenshuai.xi                     RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].HW2_Config3), TSP_HW_CFG3_PS_AUDC_EN|TSP_HW_CFG3_PS_AUDD_EN));
2801*53ee8cc1Swenshuai.xi 
2802*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
2803*53ee8cc1Swenshuai.xi                     SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_HW_CFG4_PS_AUD_EN));
2804*53ee8cc1Swenshuai.xi 
2805*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].FIFO_Src, (_HAL_REG32_R(&_TspCtrl[0].FIFO_Src) & ~TSP_AUD_SRC_MASK)| (TSP_SRC_FROM_PKTDMXFL << TSP_AUD_SRC_SHIFT));
2806*53ee8cc1Swenshuai.xi 
2807*53ee8cc1Swenshuai.xi                 // File in PS mode, fifo block mode enable
2808*53ee8cc1Swenshuai.xi                 HAL_TSP_AVFIFO_Block_Disable(TSP_FIFO_AU, FALSE);
2809*53ee8cc1Swenshuai.xi             }
2810*53ee8cc1Swenshuai.xi 
2811*53ee8cc1Swenshuai.xi             break;
2812*53ee8cc1Swenshuai.xi         case TSP_TSDMA_CTRL_A2PES0:
2813*53ee8cc1Swenshuai.xi             if((_HAL_REG32_R(&_TspCtrl[0].Hw_Config4) & TSP_HW_CFG4_PS_AUD2_EN) == 0)
2814*53ee8cc1Swenshuai.xi             {
2815*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
2816*53ee8cc1Swenshuai.xi                     RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), (TSP_HW_CFG4_PS_VID_EN|TSP_HW_CFG4_PS_AUD_EN)));
2817*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].Dnld_Ctrl2,
2818*53ee8cc1Swenshuai.xi                     RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Dnld_Ctrl2), TSP_PS_VID3D_EN));
2819*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].HW2_Config3,
2820*53ee8cc1Swenshuai.xi                     RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].HW2_Config3), TSP_HW_CFG3_PS_AUDC_EN|TSP_HW_CFG3_PS_AUDD_EN));
2821*53ee8cc1Swenshuai.xi 
2822*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
2823*53ee8cc1Swenshuai.xi                     SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_HW_CFG4_PS_AUD2_EN));
2824*53ee8cc1Swenshuai.xi 
2825*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].FIFO_Src, (_HAL_REG32_R(&_TspCtrl[0].FIFO_Src) & ~TSP_AUDB_SRC_MASK)| (TSP_SRC_FROM_PKTDMXFL << TSP_AUDB_SRC_SHIFT));
2826*53ee8cc1Swenshuai.xi 
2827*53ee8cc1Swenshuai.xi                 // File in PS mode, fifo block mode enable
2828*53ee8cc1Swenshuai.xi                 HAL_TSP_AVFIFO_Block_Disable(TSP_FIFO_AUB, FALSE);
2829*53ee8cc1Swenshuai.xi             }
2830*53ee8cc1Swenshuai.xi 
2831*53ee8cc1Swenshuai.xi             break;
2832*53ee8cc1Swenshuai.xi         case TSP_TSDMA_CTRL_V3DPES0:
2833*53ee8cc1Swenshuai.xi             if((_HAL_REG32_R(&_TspCtrl[0].Dnld_Ctrl2) & TSP_PS_VID3D_EN) == 0)
2834*53ee8cc1Swenshuai.xi             {
2835*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
2836*53ee8cc1Swenshuai.xi                     RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), (TSP_HW_CFG4_PS_VID_EN|TSP_HW_CFG4_PS_AUD_EN|TSP_HW_CFG4_PS_AUD2_EN)));
2837*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].HW2_Config3,
2838*53ee8cc1Swenshuai.xi                     RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].HW2_Config3), TSP_HW_CFG3_PS_AUDC_EN|TSP_HW_CFG3_PS_AUDD_EN));
2839*53ee8cc1Swenshuai.xi 
2840*53ee8cc1Swenshuai.xi 
2841*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].Dnld_Ctrl2,
2842*53ee8cc1Swenshuai.xi                     SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Dnld_Ctrl2), TSP_PS_VID3D_EN));
2843*53ee8cc1Swenshuai.xi 
2844*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].FIFO_Src, (_HAL_REG32_R(&_TspCtrl[0].FIFO_Src) & ~TSP_VID3D_SRC_MASK)| (TSP_SRC_FROM_PKTDMXFL << TSP_VID3D_SRC_SHIFT));
2845*53ee8cc1Swenshuai.xi 
2846*53ee8cc1Swenshuai.xi                 // File in PS mode, fifo block mode enable
2847*53ee8cc1Swenshuai.xi                 HAL_TSP_AVFIFO_Block_Disable(TSP_FIFO_V3D, FALSE);
2848*53ee8cc1Swenshuai.xi             }
2849*53ee8cc1Swenshuai.xi 
2850*53ee8cc1Swenshuai.xi             break;
2851*53ee8cc1Swenshuai.xi         case TSP_TSDMA_CTRL_A3PES0:
2852*53ee8cc1Swenshuai.xi             if((_HAL_REG32_R(&_TspCtrl[0].HW2_Config3) & TSP_HW_CFG3_PS_AUDC_EN) == 0)
2853*53ee8cc1Swenshuai.xi             {
2854*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
2855*53ee8cc1Swenshuai.xi                     RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), (TSP_HW_CFG4_PS_VID_EN|TSP_HW_CFG4_PS_AUD_EN|TSP_HW_CFG4_PS_AUD2_EN)));
2856*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].Dnld_Ctrl2,
2857*53ee8cc1Swenshuai.xi                     RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Dnld_Ctrl2), TSP_PS_VID3D_EN));
2858*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].HW2_Config3,
2859*53ee8cc1Swenshuai.xi                     RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].HW2_Config3), TSP_HW_CFG3_PS_AUDD_EN));
2860*53ee8cc1Swenshuai.xi 
2861*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].HW2_Config3,
2862*53ee8cc1Swenshuai.xi                     SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].HW2_Config3), TSP_HW_CFG3_PS_AUDC_EN));
2863*53ee8cc1Swenshuai.xi 
2864*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].reg163C, (_HAL_REG32_R(&_TspCtrl[0].reg163C) & ~TSP_AUDC_SRC_MASK)| (TSP_SRC_FROM_PKTDMXFL << TSP_AUDC_SRC_SHIFT));
2865*53ee8cc1Swenshuai.xi 
2866*53ee8cc1Swenshuai.xi                 // File in PS mode, fifo block mode enable
2867*53ee8cc1Swenshuai.xi                 HAL_TSP_AVFIFO_Block_Disable(TSP_FIFO_AUC, FALSE);
2868*53ee8cc1Swenshuai.xi             }
2869*53ee8cc1Swenshuai.xi 
2870*53ee8cc1Swenshuai.xi             break;
2871*53ee8cc1Swenshuai.xi 
2872*53ee8cc1Swenshuai.xi         case TSP_TSDMA_CTRL_A4PES0:
2873*53ee8cc1Swenshuai.xi             if((_HAL_REG32_R(&_TspCtrl[0].HW2_Config3) & TSP_HW_CFG3_PS_AUDD_EN) == 0)
2874*53ee8cc1Swenshuai.xi             {
2875*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
2876*53ee8cc1Swenshuai.xi                     RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), (TSP_HW_CFG4_PS_VID_EN|TSP_HW_CFG4_PS_AUD_EN|TSP_HW_CFG4_PS_AUD2_EN)));
2877*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].Dnld_Ctrl2,
2878*53ee8cc1Swenshuai.xi                     RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Dnld_Ctrl2), TSP_PS_VID3D_EN));
2879*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].HW2_Config3,
2880*53ee8cc1Swenshuai.xi                     RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].HW2_Config3), TSP_HW_CFG3_PS_AUDC_EN));
2881*53ee8cc1Swenshuai.xi 
2882*53ee8cc1Swenshuai.xi 
2883*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].HW2_Config3,
2884*53ee8cc1Swenshuai.xi                     SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].HW2_Config3), TSP_HW_CFG3_PS_AUDD_EN));
2885*53ee8cc1Swenshuai.xi 
2886*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].reg163C, (_HAL_REG32_R(&_TspCtrl[0].reg163C) & ~TSP_AUDD_SRC_MASK)| (TSP_SRC_FROM_PKTDMXFL << TSP_AUDD_SRC_SHIFT));
2887*53ee8cc1Swenshuai.xi 
2888*53ee8cc1Swenshuai.xi                 // File in PS mode, fifo block mode enable
2889*53ee8cc1Swenshuai.xi                 HAL_TSP_AVFIFO_Block_Disable(TSP_FIFO_AUD, FALSE);
2890*53ee8cc1Swenshuai.xi             }
2891*53ee8cc1Swenshuai.xi 
2892*53ee8cc1Swenshuai.xi             break;
2893*53ee8cc1Swenshuai.xi         default:
2894*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
2895*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), (TSP_HW_CFG4_PS_VID_EN|TSP_HW_CFG4_PS_AUD_EN|TSP_HW_CFG4_PS_AUD2_EN)));
2896*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].Dnld_Ctrl2,
2897*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Dnld_Ctrl2), TSP_PS_VID3D_EN));
2898*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].HW2_Config3,
2899*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].HW2_Config3), TSP_HW_CFG3_PS_AUDC_EN|TSP_HW_CFG3_PS_AUDD_EN));
2900*53ee8cc1Swenshuai.xi 
2901*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].Hw_Config0,
2902*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config0), TSP_HW_CFG0_DATA_PORT_EN));
2903*53ee8cc1Swenshuai.xi             break;
2904*53ee8cc1Swenshuai.xi     }
2905*53ee8cc1Swenshuai.xi }
2906*53ee8cc1Swenshuai.xi 
HAL_TSP_GetCtrlMode(MS_U32 u32EngId)2907*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_GetCtrlMode(MS_U32 u32EngId)
2908*53ee8cc1Swenshuai.xi {
2909*53ee8cc1Swenshuai.xi     return (_HAL_REG32_R(&_TspCtrl[u32EngId].TSP_Ctrl));
2910*53ee8cc1Swenshuai.xi }
2911*53ee8cc1Swenshuai.xi 
HAL_TSP_Flush_AV_FIFO(MS_U32 u32StreamId,MS_BOOL bFlush)2912*53ee8cc1Swenshuai.xi void HAL_TSP_Flush_AV_FIFO(MS_U32 u32StreamId, MS_BOOL bFlush)
2913*53ee8cc1Swenshuai.xi {
2914*53ee8cc1Swenshuai.xi     MS_U32 u32Flag;
2915*53ee8cc1Swenshuai.xi     REG32* pReg = NULL;
2916*53ee8cc1Swenshuai.xi 
2917*53ee8cc1Swenshuai.xi     switch(u32StreamId)
2918*53ee8cc1Swenshuai.xi     {
2919*53ee8cc1Swenshuai.xi         default:
2920*53ee8cc1Swenshuai.xi         case 0:
2921*53ee8cc1Swenshuai.xi             pReg = &_TspCtrl[0].reg160C;
2922*53ee8cc1Swenshuai.xi             u32Flag = TSP_RESET_VFIFO;
2923*53ee8cc1Swenshuai.xi             break;
2924*53ee8cc1Swenshuai.xi         case 1:
2925*53ee8cc1Swenshuai.xi             pReg = &_TspCtrl[0].reg160C;
2926*53ee8cc1Swenshuai.xi             u32Flag = TSP_RESET_AFIFO;
2927*53ee8cc1Swenshuai.xi             break;
2928*53ee8cc1Swenshuai.xi         case 2:
2929*53ee8cc1Swenshuai.xi             pReg = &_TspCtrl[0].reg160C;
2930*53ee8cc1Swenshuai.xi             u32Flag = TSP_RESET_AFIFO2;
2931*53ee8cc1Swenshuai.xi             break;
2932*53ee8cc1Swenshuai.xi         case 3:
2933*53ee8cc1Swenshuai.xi             pReg = &_TspCtrl[0].reg160C;
2934*53ee8cc1Swenshuai.xi             u32Flag = TSP_RESET_VFIFO3D;
2935*53ee8cc1Swenshuai.xi             break;
2936*53ee8cc1Swenshuai.xi         case 4:
2937*53ee8cc1Swenshuai.xi             pReg = &_TspCtrl[0].HW2_Config3;
2938*53ee8cc1Swenshuai.xi             u32Flag = TSP_RESET_AFIFO3;
2939*53ee8cc1Swenshuai.xi             break;
2940*53ee8cc1Swenshuai.xi         case 5:
2941*53ee8cc1Swenshuai.xi             pReg = &_TspCtrl[0].HW2_Config3;
2942*53ee8cc1Swenshuai.xi             u32Flag = TSP_RESET_AFIFO4;
2943*53ee8cc1Swenshuai.xi             break;
2944*53ee8cc1Swenshuai.xi     }
2945*53ee8cc1Swenshuai.xi 
2946*53ee8cc1Swenshuai.xi     if (bFlush)
2947*53ee8cc1Swenshuai.xi     {
2948*53ee8cc1Swenshuai.xi         _HAL_REG32_W(pReg,
2949*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(pReg), u32Flag));
2950*53ee8cc1Swenshuai.xi     }
2951*53ee8cc1Swenshuai.xi     else
2952*53ee8cc1Swenshuai.xi     {
2953*53ee8cc1Swenshuai.xi         _HAL_REG32_W(pReg,
2954*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG32_R(pReg), u32Flag));
2955*53ee8cc1Swenshuai.xi     }
2956*53ee8cc1Swenshuai.xi }
2957*53ee8cc1Swenshuai.xi 
HAL_TSP_Get_AVFifoLevel(MS_U32 u32StreamId)2958*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_Get_AVFifoLevel(MS_U32 u32StreamId)
2959*53ee8cc1Swenshuai.xi {
2960*53ee8cc1Swenshuai.xi     switch (u32StreamId)
2961*53ee8cc1Swenshuai.xi     {
2962*53ee8cc1Swenshuai.xi         case 0: // return VFifo status
2963*53ee8cc1Swenshuai.xi             return ((_HAL_REG32_R(&_TspCtrl[0].Pkt_Info2) & TSP_VFIFO_STATUS) >> TSP_VFIFO_STATUS_SHFT);
2964*53ee8cc1Swenshuai.xi         case 1: // return AFifo 0 status
2965*53ee8cc1Swenshuai.xi             return ((_HAL_REG32_R(&_TspCtrl[0].Pkt_Info2) & TSP_AFIFO_STATUS) >> TSP_AFIFO_STATUS_SHFT);
2966*53ee8cc1Swenshuai.xi         case 2: // return AFifo 1 status
2967*53ee8cc1Swenshuai.xi             return ((_HAL_REG32_R(&_TspCtrl[0].Pkt_Info2) & TSP_AFIFOB_STATUS) >> TSP_AFIFOB_STATUS_SHFT);
2968*53ee8cc1Swenshuai.xi         case 3: // return V3D Fifo status
2969*53ee8cc1Swenshuai.xi             return ((_HAL_REG32_R(&_TspCtrl[0].Pkt_Info2) & TSP_VFIFO3D_STATUS) >> TSP_VFIFO3D_STATUS_SHFT);
2970*53ee8cc1Swenshuai.xi         case 4: // return AFIFO 2 status
2971*53ee8cc1Swenshuai.xi             return ((_HAL_REG32_R(&_TspCtrl[0].Pkt_Info3) & TSP_AFIFOC_STATUS) >> TSP_AFIFOC_STATUS_SHFT);
2972*53ee8cc1Swenshuai.xi         case 5: // return AFIFO 3 status
2973*53ee8cc1Swenshuai.xi             return ((_HAL_REG32_R(&_TspCtrl[0].Pkt_Info3) & TSP_AFIFOD_STATUS) >> TSP_AFIFOD_STATUS_SHFT);
2974*53ee8cc1Swenshuai.xi         default:
2975*53ee8cc1Swenshuai.xi             return -1;
2976*53ee8cc1Swenshuai.xi     }
2977*53ee8cc1Swenshuai.xi }
2978*53ee8cc1Swenshuai.xi 
HAL_TSP_AVFIFO_Src_Select(MS_U32 u32Fifo,MS_U32 u32Src)2979*53ee8cc1Swenshuai.xi void HAL_TSP_AVFIFO_Src_Select(MS_U32 u32Fifo, MS_U32 u32Src)
2980*53ee8cc1Swenshuai.xi {
2981*53ee8cc1Swenshuai.xi #if (TSP_HWPCR_BY_HK == 1 || !defined(HWPCR_ENABLE))
2982*53ee8cc1Swenshuai.xi 
2983*53ee8cc1Swenshuai.xi         switch(u32Fifo)
2984*53ee8cc1Swenshuai.xi         {
2985*53ee8cc1Swenshuai.xi             case TSP_FIFO_AU:
2986*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].FIFO_Src, (_HAL_REG32_R(&_TspCtrl[0].FIFO_Src) & ~TSP_AUD_SRC_MASK)| (u32Src << TSP_AUD_SRC_SHIFT));
2987*53ee8cc1Swenshuai.xi                 break;
2988*53ee8cc1Swenshuai.xi             case TSP_FIFO_AUB:
2989*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].FIFO_Src, (_HAL_REG32_R(&_TspCtrl[0].FIFO_Src) & ~TSP_AUDB_SRC_MASK)| (u32Src << TSP_AUDB_SRC_SHIFT));
2990*53ee8cc1Swenshuai.xi                 break;
2991*53ee8cc1Swenshuai.xi             case TSP_FIFO_VD:
2992*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].FIFO_Src, (_HAL_REG32_R(&_TspCtrl[0].FIFO_Src) & ~TSP_VID_SRC_MASK)| (u32Src << TSP_VID_SRC_SHIFT));
2993*53ee8cc1Swenshuai.xi                 break;
2994*53ee8cc1Swenshuai.xi             case TSP_FIFO_V3D:
2995*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].FIFO_Src, (_HAL_REG32_R(&_TspCtrl[0].FIFO_Src) & ~TSP_VID3D_SRC_MASK)| (u32Src << TSP_VID3D_SRC_SHIFT));
2996*53ee8cc1Swenshuai.xi                 break;
2997*53ee8cc1Swenshuai.xi             case TSP_FIFO_AUC:
2998*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].reg163C, (_HAL_REG32_R(&_TspCtrl[0].reg163C) & ~TSP_AUDC_SRC_MASK)| (u32Src << TSP_AUDC_SRC_SHIFT));
2999*53ee8cc1Swenshuai.xi                 break;
3000*53ee8cc1Swenshuai.xi             case TSP_FIFO_AUD:
3001*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].reg163C, (_HAL_REG32_R(&_TspCtrl[0].reg163C) & ~TSP_AUDD_SRC_MASK)| (u32Src << TSP_AUDD_SRC_SHIFT));
3002*53ee8cc1Swenshuai.xi                 break;
3003*53ee8cc1Swenshuai.xi             default:
3004*53ee8cc1Swenshuai.xi                 return;
3005*53ee8cc1Swenshuai.xi         }
3006*53ee8cc1Swenshuai.xi 
3007*53ee8cc1Swenshuai.xi #else
3008*53ee8cc1Swenshuai.xi         switch(u32Fifo)
3009*53ee8cc1Swenshuai.xi         {
3010*53ee8cc1Swenshuai.xi             case TSP_FIFO_AU:
3011*53ee8cc1Swenshuai.xi                 _HAL_TSP_CMD_Write_HWPCR_Reg(TSP_AUD_SRC_MASK, (u32Src << TSP_AUD_SRC_SHIFT));
3012*53ee8cc1Swenshuai.xi                 break;
3013*53ee8cc1Swenshuai.xi             case TSP_FIFO_AUB:
3014*53ee8cc1Swenshuai.xi                 _HAL_TSP_CMD_Write_HWPCR_Reg(TSP_AUDB_SRC_MASK, (u32Src << TSP_AUDB_SRC_SHIFT));
3015*53ee8cc1Swenshuai.xi                 break;
3016*53ee8cc1Swenshuai.xi             case TSP_FIFO_VD:
3017*53ee8cc1Swenshuai.xi                 _HAL_TSP_CMD_Write_HWPCR_Reg(TSP_VID_SRC_MASK, (u32Src << TSP_VID_SRC_SHIFT));
3018*53ee8cc1Swenshuai.xi                 break;
3019*53ee8cc1Swenshuai.xi             case TSP_FIFO_V3D:
3020*53ee8cc1Swenshuai.xi                 _HAL_TSP_CMD_Write_HWPCR_Reg(TSP_VID3D_SRC_MASK, (u32Src << TSP_VID3D_SRC_SHIFT));
3021*53ee8cc1Swenshuai.xi                 break;
3022*53ee8cc1Swenshuai.xi             case TSP_FIFO_AUC:
3023*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].reg163C, (_HAL_REG32_R(&_TspCtrl[0].reg163C) & ~TSP_AUDC_SRC_MASK)| (u32Src << TSP_AUDC_SRC_SHIFT));
3024*53ee8cc1Swenshuai.xi                 break;
3025*53ee8cc1Swenshuai.xi             case TSP_FIFO_AUD:
3026*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].reg163C, (_HAL_REG32_R(&_TspCtrl[0].reg163C) & ~TSP_AUDD_SRC_MASK)| (u32Src << TSP_AUDD_SRC_SHIFT));
3027*53ee8cc1Swenshuai.xi                 break;
3028*53ee8cc1Swenshuai.xi             default:
3029*53ee8cc1Swenshuai.xi                 return;
3030*53ee8cc1Swenshuai.xi         }
3031*53ee8cc1Swenshuai.xi #endif
3032*53ee8cc1Swenshuai.xi 
3033*53ee8cc1Swenshuai.xi }
3034*53ee8cc1Swenshuai.xi 
HAL_TSP_AVFIFO_Block_Disable(MS_U32 u32Fifo,MS_BOOL bDisable)3035*53ee8cc1Swenshuai.xi void HAL_TSP_AVFIFO_Block_Disable(MS_U32 u32Fifo, MS_BOOL bDisable)
3036*53ee8cc1Swenshuai.xi {
3037*53ee8cc1Swenshuai.xi     if(bDisable)
3038*53ee8cc1Swenshuai.xi     {
3039*53ee8cc1Swenshuai.xi         switch(u32Fifo)
3040*53ee8cc1Swenshuai.xi         {
3041*53ee8cc1Swenshuai.xi             case TSP_FIFO_AU:
3042*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].PVR2_Config, SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].PVR2_Config), TSP_AUD_BLOCK_DIS));
3043*53ee8cc1Swenshuai.xi                 break;
3044*53ee8cc1Swenshuai.xi             case TSP_FIFO_AUB:
3045*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].PVR2_Config, SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].PVR2_Config), TSP_AUDB_BLOCK_DIS));
3046*53ee8cc1Swenshuai.xi                 break;
3047*53ee8cc1Swenshuai.xi             case TSP_FIFO_VD:
3048*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].PVR2_Config, SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].PVR2_Config), TSP_V_BLOCK_DIS));
3049*53ee8cc1Swenshuai.xi                 break;
3050*53ee8cc1Swenshuai.xi             case TSP_FIFO_V3D:
3051*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].PVR2_Config, SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].PVR2_Config), TSP_V3D_BLOCK_DIS));
3052*53ee8cc1Swenshuai.xi                 break;
3053*53ee8cc1Swenshuai.xi             case TSP_FIFO_AUC:
3054*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].PVR2_Config, SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].PVR2_Config), TSP_AUDC_BLOCK_DIS));
3055*53ee8cc1Swenshuai.xi                 break;
3056*53ee8cc1Swenshuai.xi             case TSP_FIFO_AUD:
3057*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].PVR2_Config, SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].PVR2_Config), TSP_AUDD_BLOCK_DIS));
3058*53ee8cc1Swenshuai.xi                 break;
3059*53ee8cc1Swenshuai.xi         }
3060*53ee8cc1Swenshuai.xi         return;
3061*53ee8cc1Swenshuai.xi     }
3062*53ee8cc1Swenshuai.xi 
3063*53ee8cc1Swenshuai.xi     switch(u32Fifo)
3064*53ee8cc1Swenshuai.xi     {
3065*53ee8cc1Swenshuai.xi         case TSP_FIFO_AU:
3066*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].PVR2_Config, RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].PVR2_Config), TSP_AUD_BLOCK_DIS));
3067*53ee8cc1Swenshuai.xi             break;
3068*53ee8cc1Swenshuai.xi         case TSP_FIFO_AUB:
3069*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].PVR2_Config, RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].PVR2_Config), TSP_AUDB_BLOCK_DIS));
3070*53ee8cc1Swenshuai.xi             break;
3071*53ee8cc1Swenshuai.xi         case TSP_FIFO_VD:
3072*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].PVR2_Config, RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].PVR2_Config), TSP_V_BLOCK_DIS));
3073*53ee8cc1Swenshuai.xi             break;
3074*53ee8cc1Swenshuai.xi         case TSP_FIFO_V3D:
3075*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].PVR2_Config, RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].PVR2_Config), TSP_V3D_BLOCK_DIS));
3076*53ee8cc1Swenshuai.xi             break;
3077*53ee8cc1Swenshuai.xi         case TSP_FIFO_AUC:
3078*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].PVR2_Config, RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].PVR2_Config), TSP_AUDC_BLOCK_DIS));
3079*53ee8cc1Swenshuai.xi             break;
3080*53ee8cc1Swenshuai.xi         case TSP_FIFO_AUD:
3081*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].PVR2_Config, RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].PVR2_Config), TSP_AUDD_BLOCK_DIS));
3082*53ee8cc1Swenshuai.xi             break;
3083*53ee8cc1Swenshuai.xi     }
3084*53ee8cc1Swenshuai.xi }
3085*53ee8cc1Swenshuai.xi 
HAL_TSP_TSIF_Enable(MS_U8 u8_tsif,MS_BOOL bEnable)3086*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_TSIF_Enable(MS_U8 u8_tsif, MS_BOOL bEnable)
3087*53ee8cc1Swenshuai.xi {
3088*53ee8cc1Swenshuai.xi     if(bEnable)
3089*53ee8cc1Swenshuai.xi         _HAL_TSP_tsif_select(u8_tsif);
3090*53ee8cc1Swenshuai.xi     else
3091*53ee8cc1Swenshuai.xi     {
3092*53ee8cc1Swenshuai.xi         switch(u8_tsif)
3093*53ee8cc1Swenshuai.xi         {
3094*53ee8cc1Swenshuai.xi             default:
3095*53ee8cc1Swenshuai.xi             case 0:
3096*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
3097*53ee8cc1Swenshuai.xi                     RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_HW_CFG4_TSIF0_ENABLE));
3098*53ee8cc1Swenshuai.xi                 break;
3099*53ee8cc1Swenshuai.xi             case 1:
3100*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
3101*53ee8cc1Swenshuai.xi                     RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_HW_CFG4_TSIF1_ENABLE));
3102*53ee8cc1Swenshuai.xi                 break;
3103*53ee8cc1Swenshuai.xi             case 2:
3104*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].PVR2_Config,
3105*53ee8cc1Swenshuai.xi                     RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].PVR2_Config), TSP_TSIF2_ENABLE));
3106*53ee8cc1Swenshuai.xi                 break;
3107*53ee8cc1Swenshuai.xi             case 3: //file_FI
3108*53ee8cc1Swenshuai.xi                 _HAL_REG16_W(&_TspCtrl5[0].Ts_If_Fi_Cfg,
3109*53ee8cc1Swenshuai.xi                     RESET_FLAG1(_HAL_REG16_R(&_TspCtrl5[0].Ts_If_Fi_Cfg), TSP_FIIF_EN));
3110*53ee8cc1Swenshuai.xi                 break;
3111*53ee8cc1Swenshuai.xi         }
3112*53ee8cc1Swenshuai.xi     }
3113*53ee8cc1Swenshuai.xi 
3114*53ee8cc1Swenshuai.xi     return TRUE;
3115*53ee8cc1Swenshuai.xi }
3116*53ee8cc1Swenshuai.xi 
HAL_TSP_SelMatchPidSrc(MS_U32 u32Src)3117*53ee8cc1Swenshuai.xi void HAL_TSP_SelMatchPidSrc(MS_U32 u32Src)
3118*53ee8cc1Swenshuai.xi {
3119*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].reg15b4, (_HAL_REG32_R(&_TspCtrl[0].reg15b4) & ~TSP_MATCH_PID_SRC_MASK)| (u32Src << TSP_MATCH_PID_SRC_SHIFT));
3120*53ee8cc1Swenshuai.xi }
3121*53ee8cc1Swenshuai.xi 
3122*53ee8cc1Swenshuai.xi //Select TS1/TS2 PID filter source from TS1/TS2 or MMFI0/MMFI1
HAL_TSP_PidFlt_Src_Select(MS_U32 u32Src)3123*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_PidFlt_Src_Select(MS_U32 u32Src)
3124*53ee8cc1Swenshuai.xi {
3125*53ee8cc1Swenshuai.xi     switch(u32Src)
3126*53ee8cc1Swenshuai.xi     {
3127*53ee8cc1Swenshuai.xi         case TSP_PIDFLT1_USE_TSIF1:
3128*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].Hw_Config2, (_HAL_REG32_R(&_TspCtrl[0].Hw_Config2) & ~(TSP_HW_CFG2_PIDFLT1_SOURCE_TSIF_MMFI0)));
3129*53ee8cc1Swenshuai.xi             break;
3130*53ee8cc1Swenshuai.xi         case TSP_PIDFLT2_USE_TSIF2:
3131*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].Hw_Config2, (_HAL_REG32_R(&_TspCtrl[0].Hw_Config2) & ~(TSP_HW_CFG2_PIDFLT2_SOURCE_TSIF_MMFI1)));
3132*53ee8cc1Swenshuai.xi             break;
3133*53ee8cc1Swenshuai.xi         case TSP_PIDFLT1_USE_TSIF_MMFI0:
3134*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].Hw_Config2, (_HAL_REG32_R(&_TspCtrl[0].Hw_Config2) | (TSP_HW_CFG2_PIDFLT1_SOURCE_TSIF_MMFI0)));
3135*53ee8cc1Swenshuai.xi             break;
3136*53ee8cc1Swenshuai.xi         case TSP_PIDFLT2_USE_TSIF_MMFI1:
3137*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].Hw_Config2, (_HAL_REG32_R(&_TspCtrl[0].Hw_Config2) | (TSP_HW_CFG2_PIDFLT2_SOURCE_TSIF_MMFI1)));
3138*53ee8cc1Swenshuai.xi             break;
3139*53ee8cc1Swenshuai.xi         default:
3140*53ee8cc1Swenshuai.xi             break;
3141*53ee8cc1Swenshuai.xi     }
3142*53ee8cc1Swenshuai.xi     return TRUE;
3143*53ee8cc1Swenshuai.xi }
3144*53ee8cc1Swenshuai.xi 
HAL_TSP_PidFlt_SetFltRushPass(MS_U32 u32EngId,MS_U32 u32PidFltId,MS_BOOL bEnable)3145*53ee8cc1Swenshuai.xi void HAL_TSP_PidFlt_SetFltRushPass(MS_U32 u32EngId, MS_U32 u32PidFltId, MS_BOOL bEnable)
3146*53ee8cc1Swenshuai.xi {
3147*53ee8cc1Swenshuai.xi     REG_PidFlt* pPidFilter = _HAL_TSP_PIDFLT(u32EngId, u32PidFltId);
3148*53ee8cc1Swenshuai.xi 
3149*53ee8cc1Swenshuai.xi     if(bEnable)
3150*53ee8cc1Swenshuai.xi         HAL_REG32_IndW((REG32 *)pPidFilter,(HAL_REG32_IndR((REG32 *)pPidFilter) | TSP_PIDFLT_RUSH_PASS));
3151*53ee8cc1Swenshuai.xi     else
3152*53ee8cc1Swenshuai.xi         HAL_REG32_IndW((REG32 *)pPidFilter,(HAL_REG32_IndR((REG32 *)pPidFilter) & ~TSP_PIDFLT_RUSH_PASS));
3153*53ee8cc1Swenshuai.xi }
3154*53ee8cc1Swenshuai.xi 
3155*53ee8cc1Swenshuai.xi 
HAL_TSP_Ind_Enable(void)3156*53ee8cc1Swenshuai.xi void HAL_TSP_Ind_Enable(void)
3157*53ee8cc1Swenshuai.xi {
3158*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].TSP_Ctrl,
3159*53ee8cc1Swenshuai.xi             SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].TSP_Ctrl), TSP_CTRL_SW_RST));
3160*53ee8cc1Swenshuai.xi }
3161*53ee8cc1Swenshuai.xi 
HAL_TSP_HW_INT_STATUS(void)3162*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_HW_INT_STATUS(void)
3163*53ee8cc1Swenshuai.xi {
3164*53ee8cc1Swenshuai.xi     return (MS_U32)(_HAL_REG16_R(&_TspCtrl[0].HwInt_Stat) & TSP_HWINT_STATUS_MASK);
3165*53ee8cc1Swenshuai.xi }
3166*53ee8cc1Swenshuai.xi 
HAL_TSP_HW_INT2_STATUS(void)3167*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_HW_INT2_STATUS(void)
3168*53ee8cc1Swenshuai.xi {
3169*53ee8cc1Swenshuai.xi     return (MS_U32)(_HAL_REG16_R(&_TspCtrl[0].SwInt_Stat1_L) & TSP_HWINT2_STATUS_MASK);
3170*53ee8cc1Swenshuai.xi }
3171*53ee8cc1Swenshuai.xi 
HAL_TSP_SetBank(MS_VIRT virtBankAddr,MS_VIRT virtPMBankAddr)3172*53ee8cc1Swenshuai.xi void HAL_TSP_SetBank(MS_VIRT virtBankAddr, MS_VIRT virtPMBankAddr)
3173*53ee8cc1Swenshuai.xi {
3174*53ee8cc1Swenshuai.xi     _virtRegBase   = virtBankAddr;
3175*53ee8cc1Swenshuai.xi     _virtPMRegBase = virtPMBankAddr;
3176*53ee8cc1Swenshuai.xi     _TspCtrl   = (REG_Ctrl*)(_virtRegBase  + REG_CTRL_BASE);
3177*53ee8cc1Swenshuai.xi     _TspCtrl2  = (REG_Ctrl2*)(_virtRegBase + REG_CTRL_MMFIBASE);
3178*53ee8cc1Swenshuai.xi     _TspCtrl3  = (REG_Ctrl3*)(_virtRegBase + REG_CTRL_TSP3);
3179*53ee8cc1Swenshuai.xi     _TspCtrl4  = (REG_Ctrl4*)(_virtRegBase + REG_CTRL_TSP4);
3180*53ee8cc1Swenshuai.xi     _TspCtrl5  = (REG_Ctrl5*)(_virtRegBase + REG_CTRL_TSP5);
3181*53ee8cc1Swenshuai.xi     _TspCtrl6  = (REG_Ctrl6*)(_virtRegBase + REG_CTRL_TSP6);
3182*53ee8cc1Swenshuai.xi     _TspSample = (REG_TS_Sample*)(_virtRegBase + REG_CTRL_TS_SAMPLE);
3183*53ee8cc1Swenshuai.xi 
3184*53ee8cc1Swenshuai.xi }
3185*53ee8cc1Swenshuai.xi 
HAL_TSP_Reset(MS_U32 u32EngId)3186*53ee8cc1Swenshuai.xi void HAL_TSP_Reset(MS_U32 u32EngId)
3187*53ee8cc1Swenshuai.xi {
3188*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[u32EngId].TSP_Ctrl, 0);
3189*53ee8cc1Swenshuai.xi }
3190*53ee8cc1Swenshuai.xi 
HAL_TSP_HwPatch(void)3191*53ee8cc1Swenshuai.xi void HAL_TSP_HwPatch(void)
3192*53ee8cc1Swenshuai.xi {
3193*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&_TspCtrl3[0].HWeco0,
3194*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG16_R(&_TspCtrl3[0].HWeco0),
3195*53ee8cc1Swenshuai.xi                             HW_ECO_RVU |
3196*53ee8cc1Swenshuai.xi                             HW_ECO_NEW_SYNCP_IN_ECO |
3197*53ee8cc1Swenshuai.xi                             HW_ECO_FIX_SEC_NULLPKT_ERR |
3198*53ee8cc1Swenshuai.xi                             HW_ECO_FIQ_REVERSE_DEADLOCK |
3199*53ee8cc1Swenshuai.xi                             HW_ECO_INIT_TIMESTAMP));
3200*53ee8cc1Swenshuai.xi 
3201*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&_TspCtrl5[0].HWeco2,
3202*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG16_R(&_TspCtrl5[0].HWeco2),
3203*53ee8cc1Swenshuai.xi                             NMATCH_DISABLE |
3204*53ee8cc1Swenshuai.xi                             SCRAMB_BIT_AFTER_CA |
3205*53ee8cc1Swenshuai.xi                             HW_ECO_TS_SYNC_OUT_DELAY |
3206*53ee8cc1Swenshuai.xi                             HW_ECO_TS_SYNC_OUT_REVERSE_BLK |
3207*53ee8cc1Swenshuai.xi                             HW_ECO_FIQ_INPUT |
3208*53ee8cc1Swenshuai.xi                             SECFLT_CTRL_DMA_DISABLE |
3209*53ee8cc1Swenshuai.xi                             PKT_CONVERTER_FIRST_SYNC_VLD_MASK));
3210*53ee8cc1Swenshuai.xi 
3211*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
3212*53ee8cc1Swenshuai.xi             SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_HW_CFG4_BYTE_ADDR_DMA|TSP_HW_CFG4_ALT_TS_SIZE|TSP_HW_CFG4_ISYNC_PATCH_EN));
3213*53ee8cc1Swenshuai.xi 
3214*53ee8cc1Swenshuai.xi     // Bad initial value of TSP_CTRL1
3215*53ee8cc1Swenshuai.xi     // Suppose Standby mode for TSP should NOT be enabled.
3216*53ee8cc1Swenshuai.xi     // Enabling TSP standby mode cause TSP section registers (SRAM in AEON) malfunction.
3217*53ee8cc1Swenshuai.xi     // Disable it by SW at this stage.
3218*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&_TspCtrl[0].TSP_Ctrl1,
3219*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].TSP_Ctrl1), TSP_CTRL1_STANDBY));
3220*53ee8cc1Swenshuai.xi 
3221*53ee8cc1Swenshuai.xi     //enable PVR record to bypass header
3222*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].reg15b4,
3223*53ee8cc1Swenshuai.xi             _HAL_REG32_R(&_TspCtrl[0].reg15b4)|(TSP_PVR_PID_BYPASS|TSP_PVR_PID_BYPASS2));
3224*53ee8cc1Swenshuai.xi 
3225*53ee8cc1Swenshuai.xi     //_HAL_REG32_W(&_TspCtrl[0].reg163C,
3226*53ee8cc1Swenshuai.xi     //        SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg163C), TSP_ALL_VALID_EN));
3227*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].HW2_Config3,
3228*53ee8cc1Swenshuai.xi             SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].HW2_Config3),
3229*53ee8cc1Swenshuai.xi                 (/*TSP_VQ2PINGPONG_EN |*/ TSP_PVR1_ALIGN_EN|TSP_RM_PKT_DEMUX_PIPE)));
3230*53ee8cc1Swenshuai.xi 
3231*53ee8cc1Swenshuai.xi     //Disable all live pathes block mechanism
3232*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].reg160C, _HAL_REG32_R(&_TspCtrl[0].reg160C)|(TSP_RM_DMA_GLITCH));
3233*53ee8cc1Swenshuai.xi 
3234*53ee8cc1Swenshuai.xi     //enable ECO bit for section DMA burst mode
3235*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].PktChkSizeFilein,
3236*53ee8cc1Swenshuai.xi         _HAL_REG32_R(&_TspCtrl[0].PktChkSizeFilein) | TSP_SEC_DMA_BURST_EN | TSP_REMOVE_DUP_AV_PKT | TSP_HW_STANDBY_MODE);
3237*53ee8cc1Swenshuai.xi 
3238*53ee8cc1Swenshuai.xi     //Disable pvr1 & pvr2 block mechanism
3239*53ee8cc1Swenshuai.xi     //DisableAV FIFO block mechanism for live path
3240*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].PVR2_Config, _HAL_REG32_R(&_TspCtrl[0].PVR2_Config)|TSP_PVR2_PVR_ALIGN_EN);
3241*53ee8cc1Swenshuai.xi 
3242*53ee8cc1Swenshuai.xi     // Set filein segment bit to 0
3243*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&_TspCtrl[0].TSP_Ctrl1,
3244*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].TSP_Ctrl1), TSP_CTRL1_PVR_CMD_QUEUE_ENABLE));
3245*53ee8cc1Swenshuai.xi 
3246*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].PktChkSizeFilein, _HAL_REG32_R(&_TspCtrl[0].PktChkSizeFilein) | (TSP_SYSTIME_MODE_STC64));
3247*53ee8cc1Swenshuai.xi 
3248*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&_TspCtrl3[0].HW3_Cfg0, _HAL_REG16_R(&_TspCtrl3[0].HW3_Cfg0) | (PREVENT_SRAM_COLLISION | PUSI_THREE_BYTE_MODE));
3249*53ee8cc1Swenshuai.xi 
3250*53ee8cc1Swenshuai.xi     //sync byte
3251*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TspCtrl3[0].SyncByte_tsif0[0]), 0x4747);
3252*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TspCtrl3[0].SyncByte_tsif0[1]), 0x4747);
3253*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TspCtrl3[0].SyncByte_tsif0[2]), 0x4747);
3254*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TspCtrl3[0].SyncByte_tsif0[3]), 0x4747);
3255*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TspCtrl3[0].SyncByte_file[0]),  0x4747);
3256*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TspCtrl3[0].SyncByte_file[1]),  0x4747);
3257*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TspCtrl3[0].SyncByte_file[2]),  0x4747);
3258*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TspCtrl3[0].SyncByte_file[3]),  0x4747);
3259*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TspCtrl3[0].SyncByte_tsif1[0]), 0x4747);
3260*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TspCtrl3[0].SyncByte_tsif1[1]), 0x4747);
3261*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TspCtrl3[0].SyncByte_tsif1[2]), 0x4747);
3262*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TspCtrl3[0].SyncByte_tsif1[3]), 0x4747);
3263*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TspCtrl3[0].SyncByte_tsif2[0]), 0x4747);
3264*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TspCtrl3[0].SyncByte_tsif2[1]), 0x4747);
3265*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TspCtrl3[0].SyncByte_tsif2[2]), 0x4747);
3266*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TspCtrl3[0].SyncByte_tsif2[3]), 0x4747);
3267*53ee8cc1Swenshuai.xi 
3268*53ee8cc1Swenshuai.xi     //source id
3269*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TspCtrl3[0].SourceId_tsif0[0]), 0x3210);
3270*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TspCtrl3[0].SourceId_tsif0[1]), 0x7654);
3271*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TspCtrl3[0].SourceId_file[0]),  0x3210);
3272*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TspCtrl3[0].SourceId_file[1]),  0x7654);
3273*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TspCtrl3[0].SourceId_tsif1[0]), 0x3210);
3274*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TspCtrl3[0].SourceId_tsif1[1]), 0x7654);
3275*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TspCtrl3[0].SourceId_tsif2[0]), 0x3210);
3276*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TspCtrl3[0].SourceId_tsif2[1]), 0x7654);
3277*53ee8cc1Swenshuai.xi 
3278*53ee8cc1Swenshuai.xi     //drop scmb packet
3279*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&_TspCtrl3[0].HW3_Cfg1, _HAL_REG16_R(&_TspCtrl3[0].HW3_Cfg1) | (MASK_SCR_VID_EN|MASK_SCR_VID_3D_EN|MASK_SCR_AUD_EN|MASK_SCR_AUD_B_EN|MASK_SCR_AUD_C_EN|MASK_SCR_AUD_D_EN));
3280*53ee8cc1Swenshuai.xi 
3281*53ee8cc1Swenshuai.xi     //ENBLE to not check
3282*53ee8cc1Swenshuai.xi      _HAL_REG32_W(&_TspCtrl[0].DMAW_ERR_WADDR_SRC_SEL, _HAL_REG32_R(&_TspCtrl[0].DMAW_ERR_WADDR_SRC_SEL) | (TSP_BLK_AF_SCRMB_BIT));
3283*53ee8cc1Swenshuai.xi 
3284*53ee8cc1Swenshuai.xi     //enable TSIF TSO blocking
3285*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&_TspCtrl5[0].TsifCfg,
3286*53ee8cc1Swenshuai.xi         SET_FLAG1(_HAL_REG16_R(&_TspCtrl5[0].TsifCfg), TSP_TSIFCFG_TSIF0_TSOBLK_EN | TSP_TSIFCFG_TSIF1_TSOBLK_EN | TSP_TSIFCFG_TSIF2_TSOBLK_EN | TSP_TSIFCFG_TSIFFI_TSOBLK_EN));
3287*53ee8cc1Swenshuai.xi 
3288*53ee8cc1Swenshuai.xi     //Fix 192 mode timer equal to 0 issue
3289*53ee8cc1Swenshuai.xi      _HAL_REG16_W(&_TspCtrl5[0].HwCfg0, _HAL_REG16_R(&_TspCtrl5[0].HwCfg0) | (TSP_FIX_192_TIMER_0_EN));
3290*53ee8cc1Swenshuai.xi 
3291*53ee8cc1Swenshuai.xi     //VQ parameters
3292*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].VQ0_CTRL,   (_HAL_REG32_R(&_TspCtrl[0].VQ0_CTRL)  & ~TSP_VQ0_FORCE_FIRE_CNT_1K_MASK) | (0x0C << TSP_VQ0_FORCE_FIRE_CNT_1K_SHIFT));
3293*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].VQ1_Config, (_HAL_REG32_R(&_TspCtrl[0].VQ1_Config) & ~TSP_VQ1_FORCEFIRE_CNT_1K_MASK) | (0x0C << TSP_VQ1_FORCEFIRE_CNT_1K_SHIFT));
3294*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].VQ2_Config, (_HAL_REG32_R(&_TspCtrl[0].VQ2_Config) & ~TSP_VQ2_FORCEFIRE_CNT_1K_MASK) | (0x0C << TSP_VQ2_FORCEFIRE_CNT_1K_SHIFT));
3295*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].VQ3_Config, (_HAL_REG32_R(&_TspCtrl[0].VQ3_Config) & ~TSP_VQ3_FORCEFIRE_CNT_1K_MASK) | (0x0C << TSP_VQ3_FORCEFIRE_CNT_1K_SHIFT));
3296*53ee8cc1Swenshuai.xi 
3297*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&_TspCtrl5[0].CPU_Secure_Cfg, SET_FLAG1(_HAL_REG16_R(&_TspCtrl5[0].CPU_Secure_Cfg), LEAF_DROP_ENABLE));
3298*53ee8cc1Swenshuai.xi 
3299*53ee8cc1Swenshuai.xi     //file-in match_cnt function
3300*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&_TspCtrl5[0].InitTimestamp, SET_FLAG1(_HAL_REG16_R(&_TspCtrl5[0].InitTimestamp), TSP_MATCH_CNT_FILEIN));
3301*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&_TspCtrl5[0].InitTimestamp,   (_HAL_REG16_R(&_TspCtrl5[0].InitTimestamp)  & ~TSP_MATCH_CNT_THRESHOLD_MASK) | (0xF << TSP_MATCH_CNT_THRESHOLD_SHFT));
3302*53ee8cc1Swenshuai.xi 
3303*53ee8cc1Swenshuai.xi }
3304*53ee8cc1Swenshuai.xi 
3305*53ee8cc1Swenshuai.xi //  Default value of low bound is 0, default value of up bound is 0xFFFFFFFF, means no protection
3306*53ee8cc1Swenshuai.xi //  If set both low bound and up bound to be 0, means protection all
3307*53ee8cc1Swenshuai.xi //  The range can be written:  phyStartAddr <= x < phyEndAddr
3308*53ee8cc1Swenshuai.xi //  Protection range: x >= phyEndAddr && x < phyStartAddr
HAL_TSP_OrzWriteProtect_Enable(MS_BOOL bEnable,MS_PHY phyStartAddr,MS_PHY phyEndAddr)3309*53ee8cc1Swenshuai.xi void HAL_TSP_OrzWriteProtect_Enable(MS_BOOL bEnable, MS_PHY phyStartAddr, MS_PHY phyEndAddr)
3310*53ee8cc1Swenshuai.xi {
3311*53ee8cc1Swenshuai.xi     MS_U32  lbnd, ubnd;
3312*53ee8cc1Swenshuai.xi     MS_PHY  phyMiuOffset = _HAL_TSP_MIU_OFFSET(phyStartAddr);
3313*53ee8cc1Swenshuai.xi 
3314*53ee8cc1Swenshuai.xi     if (bEnable)
3315*53ee8cc1Swenshuai.xi     {
3316*53ee8cc1Swenshuai.xi         if(phyStartAddr == phyEndAddr)
3317*53ee8cc1Swenshuai.xi             phyStartAddr += (1UL << MIU_BUS);
3318*53ee8cc1Swenshuai.xi 
3319*53ee8cc1Swenshuai.xi         lbnd  = (MS_U32)(((phyStartAddr-phyMiuOffset) >>  MIU_BUS) & TSP_ORZ_DMAW_LBND_MASK);
3320*53ee8cc1Swenshuai.xi         ubnd  = (MS_U32)(((phyEndAddr-phyMiuOffset) >>  MIU_BUS) & TSP_ORZ_DMAW_UBND_MASK);
3321*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].ORZ_DMAW_LBND, lbnd);
3322*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].ORZ_DMAW_UBND, ubnd);
3323*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].reg160C, _HAL_REG32_R(&_TspCtrl[0].reg160C) | TSP_ORZ_DMAW_PROT_EN);
3324*53ee8cc1Swenshuai.xi     }
3325*53ee8cc1Swenshuai.xi     else
3326*53ee8cc1Swenshuai.xi     {
3327*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].reg160C, _HAL_REG32_R(&_TspCtrl[0].reg160C) & ~TSP_ORZ_DMAW_PROT_EN);
3328*53ee8cc1Swenshuai.xi     }
3329*53ee8cc1Swenshuai.xi }
3330*53ee8cc1Swenshuai.xi 
HAL_TSP_RemoveDupAVPkt(MS_BOOL bEnable)3331*53ee8cc1Swenshuai.xi void HAL_TSP_RemoveDupAVPkt(MS_BOOL bEnable)
3332*53ee8cc1Swenshuai.xi {
3333*53ee8cc1Swenshuai.xi     if(bEnable)
3334*53ee8cc1Swenshuai.xi     {
3335*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].PktChkSizeFilein, _HAL_REG32_R(&_TspCtrl[0].PktChkSizeFilein) | TSP_REMOVE_DUP_AV_PKT);
3336*53ee8cc1Swenshuai.xi     }
3337*53ee8cc1Swenshuai.xi     else
3338*53ee8cc1Swenshuai.xi     {
3339*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].PktChkSizeFilein, _HAL_REG32_R(&_TspCtrl[0].PktChkSizeFilein) & ~TSP_REMOVE_DUP_AV_PKT);
3340*53ee8cc1Swenshuai.xi     }
3341*53ee8cc1Swenshuai.xi }
3342*53ee8cc1Swenshuai.xi 
HAL_TSP_RemoveDupAVFifoPkt(MS_U32 u32StreamId,MS_BOOL bEnable)3343*53ee8cc1Swenshuai.xi void HAL_TSP_RemoveDupAVFifoPkt(MS_U32 u32StreamId, MS_BOOL bEnable)
3344*53ee8cc1Swenshuai.xi {
3345*53ee8cc1Swenshuai.xi     MS_U32 u32Flag[6] = {TSP_REMOVE_DUP_VIDEO_PKT, TSP_REMOVE_DUP_AUDIO_PKT, TSP_REMOVE_DUP_AUDIOB_PKT, TSP_REMOVE_DUP_VIDEO3D_PKT, TSP_REMOVE_DUP_AUDIOC_PKT, TSP_REMOVE_DUP_AUDIOD_PKT};
3346*53ee8cc1Swenshuai.xi 
3347*53ee8cc1Swenshuai.xi     if(bEnable)
3348*53ee8cc1Swenshuai.xi     {
3349*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].PktChkSizeFilein,
3350*53ee8cc1Swenshuai.xi             _HAL_REG32_R(&_TspCtrl[0].PktChkSizeFilein) | u32Flag[u32StreamId]);
3351*53ee8cc1Swenshuai.xi     }
3352*53ee8cc1Swenshuai.xi     else
3353*53ee8cc1Swenshuai.xi     {
3354*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].PktChkSizeFilein,
3355*53ee8cc1Swenshuai.xi             _HAL_REG32_R(&_TspCtrl[0].PktChkSizeFilein) & ~u32Flag[u32StreamId]);
3356*53ee8cc1Swenshuai.xi     }
3357*53ee8cc1Swenshuai.xi }
3358*53ee8cc1Swenshuai.xi 
HAL_TSP_TEI_RemoveErrorPkt(MS_U32 u32PktType,MS_BOOL bEnable)3359*53ee8cc1Swenshuai.xi void HAL_TSP_TEI_RemoveErrorPkt(MS_U32 u32PktType, MS_BOOL bEnable)
3360*53ee8cc1Swenshuai.xi {
3361*53ee8cc1Swenshuai.xi     REG32* pReg = NULL;
3362*53ee8cc1Swenshuai.xi     MS_U32 u32Flag;
3363*53ee8cc1Swenshuai.xi 
3364*53ee8cc1Swenshuai.xi     switch(u32PktType)
3365*53ee8cc1Swenshuai.xi     {
3366*53ee8cc1Swenshuai.xi         case TSP_PKTDMX0_LIVE:
3367*53ee8cc1Swenshuai.xi             pReg = &_TspCtrl[0].reg15b4;
3368*53ee8cc1Swenshuai.xi             u32Flag = TSP_TEI_SKIPE_PKT_PID0;
3369*53ee8cc1Swenshuai.xi             break;
3370*53ee8cc1Swenshuai.xi         case TSP_PKTDMX0_FILE:
3371*53ee8cc1Swenshuai.xi             pReg = &_TspCtrl[0].reg15b4;
3372*53ee8cc1Swenshuai.xi             u32Flag = TSP_TEI_SKIPE_PKT_FILE;
3373*53ee8cc1Swenshuai.xi             break;
3374*53ee8cc1Swenshuai.xi         case TSP_PKTDMX1:
3375*53ee8cc1Swenshuai.xi             pReg = &_TspCtrl[0].reg15b4;
3376*53ee8cc1Swenshuai.xi             u32Flag = TSP_TEI_SKIPE_PKT_PID1;
3377*53ee8cc1Swenshuai.xi             break;
3378*53ee8cc1Swenshuai.xi         case TSP_PKTDMX2:
3379*53ee8cc1Swenshuai.xi             pReg = &_TspCtrl[0].PVR2_Config;
3380*53ee8cc1Swenshuai.xi             u32Flag = TSP_TEI_SKIP_PKT2;
3381*53ee8cc1Swenshuai.xi             break;
3382*53ee8cc1Swenshuai.xi         default:
3383*53ee8cc1Swenshuai.xi             return;
3384*53ee8cc1Swenshuai.xi     }
3385*53ee8cc1Swenshuai.xi 
3386*53ee8cc1Swenshuai.xi     if(bEnable)
3387*53ee8cc1Swenshuai.xi         _HAL_REG32_W(pReg,SET_FLAG1(_HAL_REG32_R(pReg), u32Flag));
3388*53ee8cc1Swenshuai.xi     else
3389*53ee8cc1Swenshuai.xi         _HAL_REG32_W(pReg,RESET_FLAG1(_HAL_REG32_R(pReg), u32Flag));
3390*53ee8cc1Swenshuai.xi }
3391*53ee8cc1Swenshuai.xi 
HAL_TSP_GetTSIF_Status(MS_U8 u8TsIfId,MS_U16 * pu16Pad,MS_U16 * pu16Clk,MS_BOOL * pbExtSync,MS_BOOL * pbParl)3392*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_GetTSIF_Status(MS_U8 u8TsIfId, MS_U16* pu16Pad, MS_U16* pu16Clk, MS_BOOL* pbExtSync, MS_BOOL* pbParl)
3393*53ee8cc1Swenshuai.xi {
3394*53ee8cc1Swenshuai.xi     MS_U16 u16dta;
3395*53ee8cc1Swenshuai.xi     MS_U32 u32data;
3396*53ee8cc1Swenshuai.xi     MS_BOOL bRes = FALSE;
3397*53ee8cc1Swenshuai.xi 
3398*53ee8cc1Swenshuai.xi     *pu16Pad   = 0xFFFF;
3399*53ee8cc1Swenshuai.xi     *pu16Clk   = TSP_CLK_DISABLE;
3400*53ee8cc1Swenshuai.xi     *pbExtSync = FALSE;
3401*53ee8cc1Swenshuai.xi     *pbParl    = FALSE;
3402*53ee8cc1Swenshuai.xi 
3403*53ee8cc1Swenshuai.xi     if(u8TsIfId == 0x80UL)  //TSFI
3404*53ee8cc1Swenshuai.xi     {
3405*53ee8cc1Swenshuai.xi         *pu16Pad   = (_HAL_REG16_R(&(_TspCtrl5[0].TS_MUX_CFG0)) >> TS_MUX_CFG_TSFI_MUX_SHIFT) & TS_MUX_CFG_TS0_MUX_MASK;
3406*53ee8cc1Swenshuai.xi         *pu16Clk   = (TSP_CLKGEN2_REG(REG_CLKGEN2_TSN_CLKFI) >> REG_CLKGEN2_TSN_CLK_TSFI_SHIFT) & REG_CLKGEN0_TSN_CLK_MASK;
3407*53ee8cc1Swenshuai.xi         u16dta     = _HAL_REG16_R(&_TspCtrl5[0].Ts_If_Fi_Cfg);
3408*53ee8cc1Swenshuai.xi         *pbExtSync = (MS_BOOL)(u16dta & TSP_FIIF_EXT_SYNC_SEL);
3409*53ee8cc1Swenshuai.xi         *pbParl    = (MS_BOOL)(u16dta & TSP_FIIF_P_SEL);
3410*53ee8cc1Swenshuai.xi         bRes       = TRUE;
3411*53ee8cc1Swenshuai.xi     }
3412*53ee8cc1Swenshuai.xi     else if(u8TsIfId >= TSP_IF_NUM)
3413*53ee8cc1Swenshuai.xi     {
3414*53ee8cc1Swenshuai.xi         bRes = FALSE;
3415*53ee8cc1Swenshuai.xi     }
3416*53ee8cc1Swenshuai.xi     else
3417*53ee8cc1Swenshuai.xi     {
3418*53ee8cc1Swenshuai.xi         u16dta = _HAL_REG16_R(&(_TspCtrl5[0].TS_MUX_CFG0));
3419*53ee8cc1Swenshuai.xi 
3420*53ee8cc1Swenshuai.xi         switch(u8TsIfId)
3421*53ee8cc1Swenshuai.xi         {
3422*53ee8cc1Swenshuai.xi             case 0:  //TSIF0 and else
3423*53ee8cc1Swenshuai.xi             default:
3424*53ee8cc1Swenshuai.xi                 u16dta   >>= TS_MUX_CFG_TS0_MUX_SHIFT;
3425*53ee8cc1Swenshuai.xi                 *pu16Clk   = (TSP_CLKGEN0_REG(REG_CLKGEN0_TSN_CLK) >> REG_CLKGEN0_TSN_CLK_TS0_SHIFT) & REG_CLKGEN0_TSN_CLK_MASK;
3426*53ee8cc1Swenshuai.xi                 u32data    = _HAL_REG32_R(&_TspCtrl[0].Hw_Config0);
3427*53ee8cc1Swenshuai.xi                 *pbExtSync = (MS_BOOL)((u32data & TSP_HW_CFG0_TSIF0_EXTSYNC) == TSP_HW_CFG0_TSIF0_EXTSYNC);
3428*53ee8cc1Swenshuai.xi                 *pbParl    = (MS_BOOL)((u32data & TSP_HW_CFG0_TSIF0_PARL) == TSP_HW_CFG0_TSIF0_PARL);
3429*53ee8cc1Swenshuai.xi                 break;
3430*53ee8cc1Swenshuai.xi             case 1:  //TSIF1
3431*53ee8cc1Swenshuai.xi                 u16dta   >>= TS_MUX_CFG_TS1_MUX_SHIFT;
3432*53ee8cc1Swenshuai.xi                 *pu16Clk   = (TSP_CLKGEN0_REG(REG_CLKGEN0_TSN_CLK) >> REG_CLKGEN0_TSN_CLK_TS1_SHIFT) & REG_CLKGEN0_TSN_CLK_MASK;
3433*53ee8cc1Swenshuai.xi                 u32data    = _HAL_REG32_R(&_TspCtrl[0].Hw_Config2);
3434*53ee8cc1Swenshuai.xi                 *pbExtSync = (MS_BOOL)((u32data & TSP_HW_CFG2_TSIF1_EXTSYNC) == TSP_HW_CFG2_TSIF1_EXTSYNC);
3435*53ee8cc1Swenshuai.xi                 *pbParl    = (MS_BOOL)((u32data & TSP_HW_CFG2_TSIF1_PARL) == TSP_HW_CFG2_TSIF1_PARL);
3436*53ee8cc1Swenshuai.xi                 break;
3437*53ee8cc1Swenshuai.xi             case 2:  //TSIF2
3438*53ee8cc1Swenshuai.xi                 u16dta   >>= TS_MUX_CFG_TS2_MUX_SHIFT;
3439*53ee8cc1Swenshuai.xi                 *pu16Clk   = (TSP_CLKGEN0_REG(REG_CLKGEN0_TSN_CLK2) >> REG_CLKGEN0_TSN_CLK_TS2_SHIFT) & REG_CLKGEN0_TSN_CLK_MASK;
3440*53ee8cc1Swenshuai.xi                 u32data    = _HAL_REG32_R(&_TspCtrl[0].PVR2_Config);
3441*53ee8cc1Swenshuai.xi                 *pbExtSync = (MS_BOOL)((u32data & TSP_TSIF2_EXTSYNC) == TSP_TSIF2_EXTSYNC);
3442*53ee8cc1Swenshuai.xi                 *pbParl    = (MS_BOOL)((u32data & TSP_TSIF2_PARL) == TSP_TSIF2_PARL);
3443*53ee8cc1Swenshuai.xi                 break;
3444*53ee8cc1Swenshuai.xi         }
3445*53ee8cc1Swenshuai.xi         *pu16Pad = u16dta & TS_MUX_CFG_TS0_MUX_MASK;
3446*53ee8cc1Swenshuai.xi         bRes = TRUE;
3447*53ee8cc1Swenshuai.xi     }
3448*53ee8cc1Swenshuai.xi     return bRes;
3449*53ee8cc1Swenshuai.xi }
3450*53ee8cc1Swenshuai.xi 
HAL_TSP_Check_FIFO_Overflow(MS_U32 u32StreamId)3451*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_Check_FIFO_Overflow(MS_U32 u32StreamId)
3452*53ee8cc1Swenshuai.xi {
3453*53ee8cc1Swenshuai.xi     MS_U32 u32data = _HAL_REG32_R(&_TspCtrl[0].Idr_Read1);
3454*53ee8cc1Swenshuai.xi 
3455*53ee8cc1Swenshuai.xi     switch (u32StreamId)
3456*53ee8cc1Swenshuai.xi     {
3457*53ee8cc1Swenshuai.xi         case 0: // return VFifo status
3458*53ee8cc1Swenshuai.xi             return ((u32data & TSP_VD_FIFO_OVERFLOW) == TSP_VD_FIFO_OVERFLOW);
3459*53ee8cc1Swenshuai.xi         case 1: // return AFifo 0 status
3460*53ee8cc1Swenshuai.xi             return ((u32data & TSP_AU_FIFO_OVERFLOW) == TSP_AU_FIFO_OVERFLOW);
3461*53ee8cc1Swenshuai.xi         case 2: // return AFifo 1 status
3462*53ee8cc1Swenshuai.xi             return ((u32data & TSP_AUB_FIFO_OVERFLOW) == TSP_AUB_FIFO_OVERFLOW);
3463*53ee8cc1Swenshuai.xi         case 3: // return V3D Fifo status
3464*53ee8cc1Swenshuai.xi             return ((u32data & TSP_V3D_FIFO_OVERFLOW) == TSP_V3D_FIFO_OVERFLOW);
3465*53ee8cc1Swenshuai.xi         case 4: // return AFifo 2 Fifo status
3466*53ee8cc1Swenshuai.xi             return ((u32data & TSP_AUC_FIFO_OVERFLOW) == TSP_AUC_FIFO_OVERFLOW);
3467*53ee8cc1Swenshuai.xi         case 5: // return AFifo 3 Fifo status
3468*53ee8cc1Swenshuai.xi             return ((u32data & TSP_AUD_FIFO_OVERFLOW) == TSP_AUD_FIFO_OVERFLOW);
3469*53ee8cc1Swenshuai.xi         default:
3470*53ee8cc1Swenshuai.xi             return FALSE;
3471*53ee8cc1Swenshuai.xi     }
3472*53ee8cc1Swenshuai.xi }
3473*53ee8cc1Swenshuai.xi 
HAL_TSP_HWPcr_SetSrcId(MS_U32 u32EngId,MS_U32 u32SrcId)3474*53ee8cc1Swenshuai.xi void HAL_TSP_HWPcr_SetSrcId(MS_U32 u32EngId, MS_U32 u32SrcId)
3475*53ee8cc1Swenshuai.xi {
3476*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl3[0].PIDFLR_PCR[u32EngId],
3477*53ee8cc1Swenshuai.xi                 (_HAL_REG32_R(&_TspCtrl3[0].PIDFLR_PCR[u32EngId]) & ~TSP_PIDFLT_PCR_SOURCE_MASK) | (u32SrcId << TSP_PIDFLT_PCR_SOURCE_SHIFT));
3478*53ee8cc1Swenshuai.xi }
3479*53ee8cc1Swenshuai.xi 
HAL_TSP_HWPcr_SelSrc(MS_U32 u32EngId,MS_U32 u32Src)3480*53ee8cc1Swenshuai.xi void HAL_TSP_HWPcr_SelSrc(MS_U32 u32EngId, MS_U32 u32Src)
3481*53ee8cc1Swenshuai.xi {
3482*53ee8cc1Swenshuai.xi #if (TSP_HWPCR_BY_HK == 1 || !defined(HWPCR_ENABLE))
3483*53ee8cc1Swenshuai.xi 
3484*53ee8cc1Swenshuai.xi         if(u32EngId == 0)
3485*53ee8cc1Swenshuai.xi         {
3486*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].FIFO_Src,
3487*53ee8cc1Swenshuai.xi                 (_HAL_REG32_R(&_TspCtrl[0].FIFO_Src) & ~TSP_PCR0_SRC_MASK) | (u32Src << TSP_PCR0_SRC_SHIFT));
3488*53ee8cc1Swenshuai.xi         }
3489*53ee8cc1Swenshuai.xi         else if(u32EngId == 1)
3490*53ee8cc1Swenshuai.xi         {
3491*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].FIFO_Src,
3492*53ee8cc1Swenshuai.xi                 (_HAL_REG32_R(&_TspCtrl[0].FIFO_Src) & ~TSP_PCR1_SRC_MASK) | (u32Src << TSP_PCR1_SRC_SHIFT));
3493*53ee8cc1Swenshuai.xi         }
3494*53ee8cc1Swenshuai.xi 
3495*53ee8cc1Swenshuai.xi #else
3496*53ee8cc1Swenshuai.xi         if(u32EngId == 0)
3497*53ee8cc1Swenshuai.xi         {
3498*53ee8cc1Swenshuai.xi             _HAL_TSP_CMD_Write_HWPCR_Reg(TSP_PCR0_SRC_MASK, (u32Src << TSP_PCR0_SRC_SHIFT));
3499*53ee8cc1Swenshuai.xi         }
3500*53ee8cc1Swenshuai.xi         else
3501*53ee8cc1Swenshuai.xi         {
3502*53ee8cc1Swenshuai.xi             _HAL_TSP_CMD_Write_HWPCR_Reg(TSP_PCR1_SRC_MASK, (u32Src << TSP_PCR1_SRC_SHIFT));
3503*53ee8cc1Swenshuai.xi         }
3504*53ee8cc1Swenshuai.xi #endif
3505*53ee8cc1Swenshuai.xi 
3506*53ee8cc1Swenshuai.xi }
3507*53ee8cc1Swenshuai.xi 
HAL_TSP_HWPcr_Reset(MS_U32 u32EngId,MS_BOOL bReset)3508*53ee8cc1Swenshuai.xi void HAL_TSP_HWPcr_Reset(MS_U32 u32EngId, MS_BOOL bReset)
3509*53ee8cc1Swenshuai.xi {
3510*53ee8cc1Swenshuai.xi         MS_U32 u32value = ((u32EngId == 0)? TSP_PCR0_RESET: TSP_PCR1_RESET);
3511*53ee8cc1Swenshuai.xi 
3512*53ee8cc1Swenshuai.xi #if (TSP_HWPCR_BY_HK == 1 || !defined(HWPCR_ENABLE))
3513*53ee8cc1Swenshuai.xi 
3514*53ee8cc1Swenshuai.xi         if(bReset)
3515*53ee8cc1Swenshuai.xi         {
3516*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].FIFO_Src,
3517*53ee8cc1Swenshuai.xi                     RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].FIFO_Src), u32value));
3518*53ee8cc1Swenshuai.xi         }
3519*53ee8cc1Swenshuai.xi         else
3520*53ee8cc1Swenshuai.xi         {
3521*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].FIFO_Src,
3522*53ee8cc1Swenshuai.xi                     SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].FIFO_Src), u32value));
3523*53ee8cc1Swenshuai.xi         }
3524*53ee8cc1Swenshuai.xi 
3525*53ee8cc1Swenshuai.xi #else
3526*53ee8cc1Swenshuai.xi         if(bReset)
3527*53ee8cc1Swenshuai.xi         {
3528*53ee8cc1Swenshuai.xi             _HAL_TSP_CMD_Write_HWPCR_Reg(u32value, 0);
3529*53ee8cc1Swenshuai.xi         }
3530*53ee8cc1Swenshuai.xi         else
3531*53ee8cc1Swenshuai.xi         {
3532*53ee8cc1Swenshuai.xi             _HAL_TSP_CMD_Write_HWPCR_Reg(u32value, 1);
3533*53ee8cc1Swenshuai.xi         }
3534*53ee8cc1Swenshuai.xi #endif
3535*53ee8cc1Swenshuai.xi 
3536*53ee8cc1Swenshuai.xi }
3537*53ee8cc1Swenshuai.xi 
HAL_TSP_HWPcr_Read(MS_U32 u32EngId,MS_U32 * pu32Pcr,MS_U32 * pu32Pcr_32)3538*53ee8cc1Swenshuai.xi void HAL_TSP_HWPcr_Read(MS_U32 u32EngId, MS_U32 *pu32Pcr, MS_U32 *pu32Pcr_32)
3539*53ee8cc1Swenshuai.xi {
3540*53ee8cc1Swenshuai.xi     MS_U32 u32Mask = ((u32EngId == 0) ? TSP_PCR0_READ : TSP_PCR1_READ);
3541*53ee8cc1Swenshuai.xi     MS_U16 u16value = (MS_U16)((u32EngId == 0) ? TSP_HWINT2_PCR0_UPDATE_END : TSP_HWINT2_PCR1_UPDATE_END);
3542*53ee8cc1Swenshuai.xi 
3543*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].FIFO_Src,
3544*53ee8cc1Swenshuai.xi             SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].FIFO_Src), u32Mask));
3545*53ee8cc1Swenshuai.xi 
3546*53ee8cc1Swenshuai.xi     if(u32EngId == 0)
3547*53ee8cc1Swenshuai.xi     {
3548*53ee8cc1Swenshuai.xi         *pu32Pcr = _HAL_REG32_R(&_TspCtrl[0].HWPCR0_L);
3549*53ee8cc1Swenshuai.xi         *pu32Pcr_32 = _HAL_REG32_R(&_TspCtrl[0].HWPCR0_H) & 0x00000001UL;
3550*53ee8cc1Swenshuai.xi     }
3551*53ee8cc1Swenshuai.xi     else if(u32EngId == 1)
3552*53ee8cc1Swenshuai.xi     {
3553*53ee8cc1Swenshuai.xi         *pu32Pcr = _HAL_REG32_R(&_TspCtrl[0].HWPCR1_L);
3554*53ee8cc1Swenshuai.xi         *pu32Pcr_32 = _HAL_REG32_R(&_TspCtrl[0].HWPCR1_H) & 0x00000001UL;
3555*53ee8cc1Swenshuai.xi     }
3556*53ee8cc1Swenshuai.xi 
3557*53ee8cc1Swenshuai.xi     _HAL_TSP_HwInt2_BitClr(u16value);
3558*53ee8cc1Swenshuai.xi 
3559*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].FIFO_Src,
3560*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].FIFO_Src), u32Mask));
3561*53ee8cc1Swenshuai.xi }
3562*53ee8cc1Swenshuai.xi 
HAL_TSP_HWPcr_Int_Enable(MS_U32 u32EngId,MS_BOOL bEnable)3563*53ee8cc1Swenshuai.xi void HAL_TSP_HWPcr_Int_Enable(MS_U32 u32EngId, MS_BOOL bEnable)
3564*53ee8cc1Swenshuai.xi {
3565*53ee8cc1Swenshuai.xi     MS_U16 u16Mask = (MS_U16)(((u32EngId == 0) ? TSP_HWINT2_PCR0_UPDATE_END : TSP_HWINT2_PCR1_UPDATE_END) >> 8);
3566*53ee8cc1Swenshuai.xi 
3567*53ee8cc1Swenshuai.xi     if(bEnable)
3568*53ee8cc1Swenshuai.xi     {
3569*53ee8cc1Swenshuai.xi         _HAL_TSP_HwInt2_BitSet(u16Mask);
3570*53ee8cc1Swenshuai.xi     }
3571*53ee8cc1Swenshuai.xi     else
3572*53ee8cc1Swenshuai.xi     {
3573*53ee8cc1Swenshuai.xi         _HAL_TSP_HwInt2_BitClr(u16Mask);
3574*53ee8cc1Swenshuai.xi     }
3575*53ee8cc1Swenshuai.xi }
3576*53ee8cc1Swenshuai.xi 
3577*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
3578*53ee8cc1Swenshuai.xi // For STC part
3579*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
HAL_TSP_Stc_ctrl(MS_U32 u32EngId,MS_U32 u32Sync)3580*53ee8cc1Swenshuai.xi void HAL_TSP_Stc_ctrl(MS_U32 u32EngId, MS_U32 u32Sync)
3581*53ee8cc1Swenshuai.xi {
3582*53ee8cc1Swenshuai.xi     MS_U32 u32value = 0UL;
3583*53ee8cc1Swenshuai.xi     MS_VIRT virtReg = 0;
3584*53ee8cc1Swenshuai.xi 
3585*53ee8cc1Swenshuai.xi     HAL_TSP_SetSTCSynth(u32EngId, u32Sync);
3586*53ee8cc1Swenshuai.xi 
3587*53ee8cc1Swenshuai.xi     // set TSP STC synth CW
3588*53ee8cc1Swenshuai.xi     //if CLK_MPLL_SYN is 432MHz, set 0x28000000;if CLK_MPLL_SYN is 216MHz, set 0x14000000
3589*53ee8cc1Swenshuai.xi     virtReg =  (u32EngId == 0) ? 0x0021024c :
3590*53ee8cc1Swenshuai.xi                (u32EngId == 1) ? 0x00210280 :
3591*53ee8cc1Swenshuai.xi                (u32EngId == 2) ? 0x002102bc :
3592*53ee8cc1Swenshuai.xi                (u32EngId == 3) ? 0x002102c8 : 0;
3593*53ee8cc1Swenshuai.xi 
3594*53ee8cc1Swenshuai.xi     HAL_REG32_IndW((REG32 *)(virtReg<<1UL), u32Sync);
3595*53ee8cc1Swenshuai.xi 
3596*53ee8cc1Swenshuai.xi     // t2 , t3 had no 0x0021025c, it was add after t4, eanble synthesizer
3597*53ee8cc1Swenshuai.xi     u32value = (0x1UL << u32EngId);
3598*53ee8cc1Swenshuai.xi     HAL_REG32_IndW((REG32 *)(0x0021025cUL<<1UL), HAL_REG32_IndR((REG32 *)(0x0021025cUL<<1UL))|u32value);
3599*53ee8cc1Swenshuai.xi     HAL_REG32_IndW((REG32 *)(0x0021025cUL<<1UL), HAL_REG32_IndR((REG32 *)(0x0021025cUL<<1UL))& ~u32value);
3600*53ee8cc1Swenshuai.xi }
3601*53ee8cc1Swenshuai.xi 
3602*53ee8cc1Swenshuai.xi // GET MCU STC synth CW
HAL_TSP_GetSTCSynth(MS_U32 u32EngId)3603*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_GetSTCSynth(MS_U32 u32EngId)
3604*53ee8cc1Swenshuai.xi {
3605*53ee8cc1Swenshuai.xi     switch (u32EngId)
3606*53ee8cc1Swenshuai.xi     {
3607*53ee8cc1Swenshuai.xi         case 0:
3608*53ee8cc1Swenshuai.xi             return (TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_STC_CW_L) | TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_STC_CW_H));
3609*53ee8cc1Swenshuai.xi         case 1:
3610*53ee8cc1Swenshuai.xi             return (TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_STC1_CW_L) | TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_STC1_CW_H));
3611*53ee8cc1Swenshuai.xi         case 2:
3612*53ee8cc1Swenshuai.xi             return (TSP_CLKGEN2_REG(REG_CLKGEN2_DC0_STC2_CW_L) | TSP_CLKGEN2_REG(REG_CLKGEN2_DC0_STC2_CW_H));
3613*53ee8cc1Swenshuai.xi         case 3:
3614*53ee8cc1Swenshuai.xi             return (TSP_CLKGEN2_REG(REG_CLKGEN2_DC0_STC3_CW_L) | TSP_CLKGEN2_REG(REG_CLKGEN2_DC0_STC3_CW_H));
3615*53ee8cc1Swenshuai.xi         default:
3616*53ee8cc1Swenshuai.xi             return 0;
3617*53ee8cc1Swenshuai.xi     }
3618*53ee8cc1Swenshuai.xi }
3619*53ee8cc1Swenshuai.xi 
HAL_TSP_SetSTCSynth(MS_U32 u32EngId,MS_U32 u32Sync)3620*53ee8cc1Swenshuai.xi void HAL_TSP_SetSTCSynth(MS_U32 u32EngId, MS_U32 u32Sync)
3621*53ee8cc1Swenshuai.xi {
3622*53ee8cc1Swenshuai.xi     switch (u32EngId)
3623*53ee8cc1Swenshuai.xi     {
3624*53ee8cc1Swenshuai.xi         case 0:
3625*53ee8cc1Swenshuai.xi             /////////////Set STC control by HK////////////////
3626*53ee8cc1Swenshuai.xi             // select synth from chip top : bit 1 -> 0 -> controlled by HK
3627*53ee8cc1Swenshuai.xi             TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_SYTNTH) &= ~REG_CLKGEN0_STC_CW_SEL;
3628*53ee8cc1Swenshuai.xi 
3629*53ee8cc1Swenshuai.xi             // set HK STC synth CW
3630*53ee8cc1Swenshuai.xi             //if CLK_MPLL_SYN is 432MHz, set 0x28000000;if CLK_MPLL_SYN is 216MHz, set 0x14000000
3631*53ee8cc1Swenshuai.xi             TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_STC_CW_L) = (MS_U16)(u32Sync & 0xFFFF);
3632*53ee8cc1Swenshuai.xi             TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_STC_CW_H) = (MS_U16)((u32Sync >> 16UL) & 0xFFFF);
3633*53ee8cc1Swenshuai.xi 
3634*53ee8cc1Swenshuai.xi             // set STC synth
3635*53ee8cc1Swenshuai.xi             TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_SYTNTH) &= ~REG_CLKGEN0_STC_CW_EN;
3636*53ee8cc1Swenshuai.xi             TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_SYTNTH) |= REG_CLKGEN0_STC_CW_EN;
3637*53ee8cc1Swenshuai.xi             TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_SYTNTH) &= ~REG_CLKGEN0_STC_CW_EN;
3638*53ee8cc1Swenshuai.xi 
3639*53ee8cc1Swenshuai.xi             /////////////Set STC control by TSP////////////////
3640*53ee8cc1Swenshuai.xi             // select synth from TSP      : bit 1 -> 1 -> controlled by TSP
3641*53ee8cc1Swenshuai.xi             TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_SYTNTH) |= REG_CLKGEN0_STC_CW_SEL;
3642*53ee8cc1Swenshuai.xi             break;
3643*53ee8cc1Swenshuai.xi         case 1:
3644*53ee8cc1Swenshuai.xi             TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_SYTNTH) &= ~REG_CLKGEN0_STC1_CW_SEL;
3645*53ee8cc1Swenshuai.xi             TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_STC1_CW_L) = (MS_U16)(u32Sync & 0xFFFF);
3646*53ee8cc1Swenshuai.xi             TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_STC1_CW_H) = (MS_U16)((u32Sync >> 16UL) & 0xFFFF);
3647*53ee8cc1Swenshuai.xi             TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_SYTNTH) &= ~REG_CLKGEN0_STC1_CW_EN;
3648*53ee8cc1Swenshuai.xi             TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_SYTNTH) |= REG_CLKGEN0_STC1_CW_EN;
3649*53ee8cc1Swenshuai.xi             TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_SYTNTH) &= ~REG_CLKGEN0_STC1_CW_EN;
3650*53ee8cc1Swenshuai.xi             TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_SYTNTH) |= REG_CLKGEN0_STC1_CW_SEL;
3651*53ee8cc1Swenshuai.xi             break;
3652*53ee8cc1Swenshuai.xi         case 2:
3653*53ee8cc1Swenshuai.xi             TSP_CLKGEN2_REG(REG_CLKGEN2_DC0_SYNTH) &= ~REG_CLKGEN2_STC2_CW_SEL;
3654*53ee8cc1Swenshuai.xi             TSP_CLKGEN2_REG(REG_CLKGEN2_DC0_STC2_CW_L) = (MS_U16)(u32Sync & 0xFFFF);
3655*53ee8cc1Swenshuai.xi             TSP_CLKGEN2_REG(REG_CLKGEN2_DC0_STC2_CW_H) = (MS_U16)((u32Sync >> 16UL) & 0xFFFF);
3656*53ee8cc1Swenshuai.xi             TSP_CLKGEN2_REG(REG_CLKGEN2_DC0_SYNTH) &= ~REG_CLKGEN2_STC2_CW_EN;
3657*53ee8cc1Swenshuai.xi             TSP_CLKGEN2_REG(REG_CLKGEN2_DC0_SYNTH) |= REG_CLKGEN2_STC2_CW_EN;
3658*53ee8cc1Swenshuai.xi             TSP_CLKGEN2_REG(REG_CLKGEN2_DC0_SYNTH) &= ~REG_CLKGEN2_STC2_CW_EN;
3659*53ee8cc1Swenshuai.xi             TSP_CLKGEN2_REG(REG_CLKGEN2_DC0_SYNTH) |= REG_CLKGEN2_STC2_CW_SEL;
3660*53ee8cc1Swenshuai.xi             break;
3661*53ee8cc1Swenshuai.xi         case 3:
3662*53ee8cc1Swenshuai.xi             TSP_CLKGEN2_REG(REG_CLKGEN2_DC0_SYNTH) &= ~REG_CLKGEN2_STC3_CW_SEL;
3663*53ee8cc1Swenshuai.xi             TSP_CLKGEN2_REG(REG_CLKGEN2_DC0_STC3_CW_L) = (MS_U16)(u32Sync & 0xFFFF);
3664*53ee8cc1Swenshuai.xi             TSP_CLKGEN2_REG(REG_CLKGEN2_DC0_STC3_CW_H) = (MS_U16)((u32Sync >> 16UL) & 0xFFFF);
3665*53ee8cc1Swenshuai.xi             TSP_CLKGEN2_REG(REG_CLKGEN2_DC0_SYNTH) &= ~REG_CLKGEN2_STC3_CW_EN;
3666*53ee8cc1Swenshuai.xi             TSP_CLKGEN2_REG(REG_CLKGEN2_DC0_SYNTH) |= REG_CLKGEN2_STC3_CW_EN;
3667*53ee8cc1Swenshuai.xi             TSP_CLKGEN2_REG(REG_CLKGEN2_DC0_SYNTH) &= ~REG_CLKGEN2_STC3_CW_EN;
3668*53ee8cc1Swenshuai.xi             TSP_CLKGEN2_REG(REG_CLKGEN2_DC0_SYNTH) |= REG_CLKGEN2_STC3_CW_SEL;
3669*53ee8cc1Swenshuai.xi             break;
3670*53ee8cc1Swenshuai.xi         default:
3671*53ee8cc1Swenshuai.xi             break;
3672*53ee8cc1Swenshuai.xi     }
3673*53ee8cc1Swenshuai.xi }
3674*53ee8cc1Swenshuai.xi 
HAL_TSP_STC_Update_Disable(MS_U32 u32EngId,MS_BOOL bDisable)3675*53ee8cc1Swenshuai.xi void HAL_TSP_STC_Update_Disable(MS_U32 u32EngId, MS_BOOL bDisable)
3676*53ee8cc1Swenshuai.xi {
3677*53ee8cc1Swenshuai.xi     if(bDisable)
3678*53ee8cc1Swenshuai.xi     {
3679*53ee8cc1Swenshuai.xi         if(u32EngId == 1)
3680*53ee8cc1Swenshuai.xi         {
3681*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].reg15b4,
3682*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg15b4), TSP_64bit_PCR2_ld));
3683*53ee8cc1Swenshuai.xi         }
3684*53ee8cc1Swenshuai.xi         else if(u32EngId == 2)
3685*53ee8cc1Swenshuai.xi         {
3686*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].TSP_DBG_PORT,
3687*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].TSP_DBG_PORT), TSP_PCR64_3_LD));
3688*53ee8cc1Swenshuai.xi         }
3689*53ee8cc1Swenshuai.xi         else if(u32EngId == 3)
3690*53ee8cc1Swenshuai.xi         {
3691*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].TSP_DBG_PORT,
3692*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].TSP_DBG_PORT), TSP_PCR64_4_LD));
3693*53ee8cc1Swenshuai.xi         }
3694*53ee8cc1Swenshuai.xi         else
3695*53ee8cc1Swenshuai.xi         {
3696*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].reg15b4,
3697*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg15b4), TSP_cnt_33b_ld));
3698*53ee8cc1Swenshuai.xi         }
3699*53ee8cc1Swenshuai.xi     }
3700*53ee8cc1Swenshuai.xi     else
3701*53ee8cc1Swenshuai.xi     {
3702*53ee8cc1Swenshuai.xi         if(u32EngId == 1)
3703*53ee8cc1Swenshuai.xi         {
3704*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].reg15b4,
3705*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg15b4), TSP_64bit_PCR2_ld));
3706*53ee8cc1Swenshuai.xi         }
3707*53ee8cc1Swenshuai.xi         else if(u32EngId == 2)
3708*53ee8cc1Swenshuai.xi         {
3709*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].TSP_DBG_PORT,
3710*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].TSP_DBG_PORT), TSP_PCR64_3_LD));
3711*53ee8cc1Swenshuai.xi         }
3712*53ee8cc1Swenshuai.xi         else if(u32EngId == 3)
3713*53ee8cc1Swenshuai.xi         {
3714*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].TSP_DBG_PORT,
3715*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].TSP_DBG_PORT), TSP_PCR64_4_LD));
3716*53ee8cc1Swenshuai.xi         }
3717*53ee8cc1Swenshuai.xi         else
3718*53ee8cc1Swenshuai.xi         {
3719*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].reg15b4,
3720*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg15b4), TSP_cnt_33b_ld));
3721*53ee8cc1Swenshuai.xi         }
3722*53ee8cc1Swenshuai.xi     }
3723*53ee8cc1Swenshuai.xi }
3724*53ee8cc1Swenshuai.xi 
HAL_TSP_GetSTC(MS_U32 u32EngId)3725*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_GetSTC(MS_U32 u32EngId)
3726*53ee8cc1Swenshuai.xi {
3727*53ee8cc1Swenshuai.xi     if(u32EngId == 1)
3728*53ee8cc1Swenshuai.xi     {
3729*53ee8cc1Swenshuai.xi         return (_HAL_REG32_R(&_TspCtrl[0].PCR64_2_L));
3730*53ee8cc1Swenshuai.xi     }
3731*53ee8cc1Swenshuai.xi     else if(u32EngId == 2)
3732*53ee8cc1Swenshuai.xi     {
3733*53ee8cc1Swenshuai.xi         return (_HAL_REG32_R(&_TspCtrl6[0].PCR64_3_L));
3734*53ee8cc1Swenshuai.xi     }
3735*53ee8cc1Swenshuai.xi     else if(u32EngId == 3)
3736*53ee8cc1Swenshuai.xi     {
3737*53ee8cc1Swenshuai.xi         return (_HAL_REG32_R(&_TspCtrl6[0].PCR64_4_L));
3738*53ee8cc1Swenshuai.xi     }
3739*53ee8cc1Swenshuai.xi 
3740*53ee8cc1Swenshuai.xi     if(HAS_FLAG(_HAL_REG32_R(&_TspCtrl[0].PktChkSizeFilein), TSP_SYSTIME_MODE_STC64))
3741*53ee8cc1Swenshuai.xi     {
3742*53ee8cc1Swenshuai.xi         MS_U32 u32temp = 0UL;
3743*53ee8cc1Swenshuai.xi 
3744*53ee8cc1Swenshuai.xi         u32temp = (_HAL_REG32_R(&_TspCtrl[0].TsRec_Tail2_Pcr1) & TSP_PCR64_L16_MASK) >> TSP_PCR64_L16_SHFT;
3745*53ee8cc1Swenshuai.xi         u32temp |= ((_HAL_REG32_R(&_TspCtrl[0].Pcr1) & 0xFFFFUL) << 16UL);
3746*53ee8cc1Swenshuai.xi         return u32temp ;
3747*53ee8cc1Swenshuai.xi     }
3748*53ee8cc1Swenshuai.xi     else
3749*53ee8cc1Swenshuai.xi     {
3750*53ee8cc1Swenshuai.xi         return HAL_REG32_IndR((REG32 *)(0x00210244UL<< 1UL));
3751*53ee8cc1Swenshuai.xi     }
3752*53ee8cc1Swenshuai.xi 
3753*53ee8cc1Swenshuai.xi     return 0;
3754*53ee8cc1Swenshuai.xi }
3755*53ee8cc1Swenshuai.xi 
HAL_TSP_GetSTC_32(MS_U32 u32EngId)3756*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_GetSTC_32(MS_U32 u32EngId)
3757*53ee8cc1Swenshuai.xi {
3758*53ee8cc1Swenshuai.xi     if(u32EngId == 1)
3759*53ee8cc1Swenshuai.xi     {
3760*53ee8cc1Swenshuai.xi         return (_HAL_REG32_R(&_TspCtrl[0].PCR64_2_H));
3761*53ee8cc1Swenshuai.xi     }
3762*53ee8cc1Swenshuai.xi     else if(u32EngId == 2)
3763*53ee8cc1Swenshuai.xi     {
3764*53ee8cc1Swenshuai.xi         return (_HAL_REG32_R(&_TspCtrl6[0].PCR64_3_H));
3765*53ee8cc1Swenshuai.xi     }
3766*53ee8cc1Swenshuai.xi     else if(u32EngId == 3)
3767*53ee8cc1Swenshuai.xi     {
3768*53ee8cc1Swenshuai.xi         return (_HAL_REG32_R(&_TspCtrl6[0].PCR64_4_H));
3769*53ee8cc1Swenshuai.xi     }
3770*53ee8cc1Swenshuai.xi 
3771*53ee8cc1Swenshuai.xi     if(HAS_FLAG(_HAL_REG32_R(&_TspCtrl[0].PktChkSizeFilein), TSP_SYSTIME_MODE_STC64))
3772*53ee8cc1Swenshuai.xi     {
3773*53ee8cc1Swenshuai.xi         MS_U32 u32temp;
3774*53ee8cc1Swenshuai.xi 
3775*53ee8cc1Swenshuai.xi         u32temp = (_HAL_REG32_R(&_TspCtrl[0].Pcr1) >> 16UL)& 0xFFFFUL;
3776*53ee8cc1Swenshuai.xi         u32temp |= (((_HAL_REG32_R(&_TspCtrl[0].Pcr64_H) & TSP_PCR64_H16_MASK) & 0xFFFFUL) << 16UL);
3777*53ee8cc1Swenshuai.xi         return u32temp ;
3778*53ee8cc1Swenshuai.xi     }
3779*53ee8cc1Swenshuai.xi     else
3780*53ee8cc1Swenshuai.xi     {
3781*53ee8cc1Swenshuai.xi         return (HAL_REG32_IndR((REG32 *)(0x00210248UL<< 1UL)) & 0x01UL);
3782*53ee8cc1Swenshuai.xi     }
3783*53ee8cc1Swenshuai.xi }
3784*53ee8cc1Swenshuai.xi 
HAL_TSP_SetSTC(MS_U32 u32EngId,MS_U32 u32STC,MS_U32 u32STC_32)3785*53ee8cc1Swenshuai.xi void HAL_TSP_SetSTC(MS_U32 u32EngId, MS_U32 u32STC, MS_U32 u32STC_32)
3786*53ee8cc1Swenshuai.xi {
3787*53ee8cc1Swenshuai.xi     if(u32EngId == 1)
3788*53ee8cc1Swenshuai.xi     {
3789*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].PCR64_2_L, u32STC);
3790*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].PCR64_2_H, u32STC_32);
3791*53ee8cc1Swenshuai.xi         return;
3792*53ee8cc1Swenshuai.xi     }
3793*53ee8cc1Swenshuai.xi     else if(u32EngId == 2)
3794*53ee8cc1Swenshuai.xi     {
3795*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl6[0].PCR64_3_L, u32STC);
3796*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl6[0].PCR64_3_H, u32STC_32);
3797*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].TSP_DBG_PORT, _HAL_REG32_R(&_TspCtrl[0].TSP_DBG_PORT) | TSP_PCR64_3_SET);
3798*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].TSP_DBG_PORT, _HAL_REG32_R(&_TspCtrl[0].TSP_DBG_PORT) & ~TSP_PCR64_3_SET);
3799*53ee8cc1Swenshuai.xi         return;
3800*53ee8cc1Swenshuai.xi     }
3801*53ee8cc1Swenshuai.xi     else if(u32EngId == 3)
3802*53ee8cc1Swenshuai.xi     {
3803*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl6[0].PCR64_4_L, u32STC);
3804*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl6[0].PCR64_4_H, u32STC_32);
3805*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].TSP_DBG_PORT, _HAL_REG32_R(&_TspCtrl[0].TSP_DBG_PORT) | TSP_PCR64_4_SET);
3806*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].TSP_DBG_PORT, _HAL_REG32_R(&_TspCtrl[0].TSP_DBG_PORT) & ~TSP_PCR64_4_SET);
3807*53ee8cc1Swenshuai.xi         return;
3808*53ee8cc1Swenshuai.xi     }
3809*53ee8cc1Swenshuai.xi 
3810*53ee8cc1Swenshuai.xi     if(HAS_FLAG(_HAL_REG32_R(&_TspCtrl[0].PktChkSizeFilein), TSP_SYSTIME_MODE_STC64))
3811*53ee8cc1Swenshuai.xi     {
3812*53ee8cc1Swenshuai.xi         MS_U32 u32temp;
3813*53ee8cc1Swenshuai.xi 
3814*53ee8cc1Swenshuai.xi         u32temp = ((u32STC & 0xFFFFUL) << TSP_PCR64_L16_SHFT) |
3815*53ee8cc1Swenshuai.xi                 (_HAL_REG32_R(&_TspCtrl[0].TsRec_Tail2_Pcr1) & ~TSP_PCR64_L16_MASK);
3816*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].TsRec_Tail2_Pcr1, u32temp);
3817*53ee8cc1Swenshuai.xi 
3818*53ee8cc1Swenshuai.xi         u32temp = ((u32STC >> 16UL) & 0xFFFFUL) | ((u32STC_32 & 0xFFFFUL) << 16UL);
3819*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].Pcr1, u32temp);
3820*53ee8cc1Swenshuai.xi 
3821*53ee8cc1Swenshuai.xi         u32temp = (_HAL_REG32_R(&_TspCtrl[0].Pcr64_H) & ~TSP_PCR64_H16_MASK) | ((u32STC_32 >> 16UL) & TSP_PCR64_H16_MASK);
3822*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].Pcr64_H, u32temp);
3823*53ee8cc1Swenshuai.xi     }
3824*53ee8cc1Swenshuai.xi     else
3825*53ee8cc1Swenshuai.xi     {
3826*53ee8cc1Swenshuai.xi         HAL_REG32_IndW((REG32 *)(0x00210244UL<< 1UL), u32STC);
3827*53ee8cc1Swenshuai.xi         HAL_REG32_IndW((REG32 *)(0x00210248UL<< 1UL), u32STC_32  & 0x01UL);
3828*53ee8cc1Swenshuai.xi     }
3829*53ee8cc1Swenshuai.xi }
3830*53ee8cc1Swenshuai.xi 
HAL_TSP_SelectSTCEng(MS_U32 u32FltSrc,MS_U32 u32Eng)3831*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_SelectSTCEng(MS_U32 u32FltSrc, MS_U32 u32Eng)
3832*53ee8cc1Swenshuai.xi {
3833*53ee8cc1Swenshuai.xi     MS_U32 u32cmd = TSP_MCU_CMD_SEL_STC_ENG|((u32FltSrc >> TSP_PIDFLT_IN_SHIFT) << TSP_MCU_CMD_SEL_STC_ENG_FLTSRC_SHIFT)|u32Eng;
3834*53ee8cc1Swenshuai.xi 
3835*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, u32cmd);
3836*53ee8cc1Swenshuai.xi 
3837*53ee8cc1Swenshuai.xi     while(_HAL_REG32_R(&_TspCtrl[0].MCU_Cmd) != 0UL);
3838*53ee8cc1Swenshuai.xi 
3839*53ee8cc1Swenshuai.xi     return TRUE;
3840*53ee8cc1Swenshuai.xi }
3841*53ee8cc1Swenshuai.xi 
3842*53ee8cc1Swenshuai.xi #if 0
3843*53ee8cc1Swenshuai.xi void HAL_TSP_SetSTC_32(MS_U32 u32EngId, MS_U32 u32STC_32)
3844*53ee8cc1Swenshuai.xi {
3845*53ee8cc1Swenshuai.xi     if(u32EngId == 1)
3846*53ee8cc1Swenshuai.xi     {
3847*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].PCR64_2_H, u32STC_32);
3848*53ee8cc1Swenshuai.xi         return;
3849*53ee8cc1Swenshuai.xi     }
3850*53ee8cc1Swenshuai.xi 
3851*53ee8cc1Swenshuai.xi     if(HAS_FLAG(_HAL_REG32_R(&_TspCtrl[0].PktChkSizeFilein), TSP_SYSTIME_MODE_STC64))
3852*53ee8cc1Swenshuai.xi     {
3853*53ee8cc1Swenshuai.xi         MS_U32 u32temp;
3854*53ee8cc1Swenshuai.xi 
3855*53ee8cc1Swenshuai.xi         u32temp = (_HAL_REG32_R(&_TspCtrl[0].Pcr1) & ~ 0xFFFF0000UL) | ((u32STC_32 & 0xFFFFUL) << 16UL);
3856*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].Pcr1, u32temp);
3857*53ee8cc1Swenshuai.xi         u32temp = (_HAL_REG32_R(&_TspCtrl[0].Pcr64_H) & ~TSP_PCR64_H16_MASK) | ((u32STC_32 >> 16UL) & TSP_PCR64_H16_MASK);
3858*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].Pcr64_H, u32temp);
3859*53ee8cc1Swenshuai.xi     }
3860*53ee8cc1Swenshuai.xi     else
3861*53ee8cc1Swenshuai.xi     {
3862*53ee8cc1Swenshuai.xi         HAL_REG32_IndW((REG32 *)(0x00210248UL<< 1UL), u32STC_32  & 0x01UL);
3863*53ee8cc1Swenshuai.xi     }
3864*53ee8cc1Swenshuai.xi }
3865*53ee8cc1Swenshuai.xi #endif
3866*53ee8cc1Swenshuai.xi 
HAL_TSP_CmdQ_SetSTC(MS_U32 u32EngId,MS_U32 u32STC)3867*53ee8cc1Swenshuai.xi void HAL_TSP_CmdQ_SetSTC(MS_U32 u32EngId, MS_U32 u32STC)
3868*53ee8cc1Swenshuai.xi {
3869*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].Pcr.ML, u32STC);
3870*53ee8cc1Swenshuai.xi }
3871*53ee8cc1Swenshuai.xi 
HAL_TSP_CmdQ_SetSTC_32(MS_U32 u32EngId,MS_U32 u32STC_32)3872*53ee8cc1Swenshuai.xi void HAL_TSP_CmdQ_SetSTC_32(MS_U32 u32EngId, MS_U32 u32STC_32)
3873*53ee8cc1Swenshuai.xi {
3874*53ee8cc1Swenshuai.xi     _HAL_REG32L_W(&_TspCtrl[0].Pcr.H32, u32STC_32 & 0x01UL);
3875*53ee8cc1Swenshuai.xi }
3876*53ee8cc1Swenshuai.xi 
HAL_TSP_CmdQ_GetSTC(MS_U32 u32EngId)3877*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_CmdQ_GetSTC(MS_U32 u32EngId)
3878*53ee8cc1Swenshuai.xi {
3879*53ee8cc1Swenshuai.xi     return (_HAL_REG32_R(&_TspCtrl[0].Pcr.ML));
3880*53ee8cc1Swenshuai.xi }
3881*53ee8cc1Swenshuai.xi 
HAL_TSP_CmdQ_GetSTC_32(MS_U32 u32EngId)3882*53ee8cc1Swenshuai.xi MS_U32  HAL_TSP_CmdQ_GetSTC_32(MS_U32 u32EngId)
3883*53ee8cc1Swenshuai.xi {
3884*53ee8cc1Swenshuai.xi     return (_HAL_REG32L_R(&_TspCtrl[0].Pcr.H32) & 0x01UL);
3885*53ee8cc1Swenshuai.xi }
3886*53ee8cc1Swenshuai.xi 
HAL_TSP_STC_UpdateCtrl(MS_U8 u8Eng,MS_U8 u8Opt)3887*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_STC_UpdateCtrl(MS_U8 u8Eng, MS_U8 u8Opt)
3888*53ee8cc1Swenshuai.xi {
3889*53ee8cc1Swenshuai.xi     MS_U32 i = 0;
3890*53ee8cc1Swenshuai.xi     MS_U32 u32Enable = 0;
3891*53ee8cc1Swenshuai.xi     MS_U32 u32Cmd = 0;
3892*53ee8cc1Swenshuai.xi 
3893*53ee8cc1Swenshuai.xi     if(u8Opt & HAL_TSP_STC_UPDATE_HK)
3894*53ee8cc1Swenshuai.xi     {
3895*53ee8cc1Swenshuai.xi         u32Enable = 1;
3896*53ee8cc1Swenshuai.xi     }
3897*53ee8cc1Swenshuai.xi     if(u8Opt & HAL_TSP_STC_UPDATE_UPDATEONCE)
3898*53ee8cc1Swenshuai.xi     {
3899*53ee8cc1Swenshuai.xi         u32Cmd = TSP_MCU_CMD_CTRL_STC_UPDATE_ONCE;
3900*53ee8cc1Swenshuai.xi     }
3901*53ee8cc1Swenshuai.xi 
3902*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Data0, u32Enable);
3903*53ee8cc1Swenshuai.xi 
3904*53ee8cc1Swenshuai.xi     if (u8Eng == 0)
3905*53ee8cc1Swenshuai.xi     {
3906*53ee8cc1Swenshuai.xi         u32Cmd |= TSP_MCU_CMD_CTRL_STC_UPDATE;
3907*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, u32Cmd);
3908*53ee8cc1Swenshuai.xi     }
3909*53ee8cc1Swenshuai.xi     else
3910*53ee8cc1Swenshuai.xi     {
3911*53ee8cc1Swenshuai.xi         u32Cmd |= TSP_MCU_CMD_CTRL_STC1_UPDATE;
3912*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, u32Cmd);
3913*53ee8cc1Swenshuai.xi     }
3914*53ee8cc1Swenshuai.xi 
3915*53ee8cc1Swenshuai.xi     while (i< 4UL)
3916*53ee8cc1Swenshuai.xi     {
3917*53ee8cc1Swenshuai.xi         if (0 == _HAL_REG32_R(&_TspCtrl[0].MCU_Cmd))
3918*53ee8cc1Swenshuai.xi         {
3919*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].MCU_Data0, 0);
3920*53ee8cc1Swenshuai.xi             return TRUE;
3921*53ee8cc1Swenshuai.xi         }
3922*53ee8cc1Swenshuai.xi         i++;
3923*53ee8cc1Swenshuai.xi         _delay();
3924*53ee8cc1Swenshuai.xi     }
3925*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, 0);
3926*53ee8cc1Swenshuai.xi     return FALSE;
3927*53ee8cc1Swenshuai.xi }
3928*53ee8cc1Swenshuai.xi 
HAL_TSP_SetSTCOffset(MS_U32 u32EngId,MS_U32 u32Offset,MS_BOOL bAdd)3929*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_SetSTCOffset(MS_U32 u32EngId, MS_U32 u32Offset, MS_BOOL bAdd)
3930*53ee8cc1Swenshuai.xi {
3931*53ee8cc1Swenshuai.xi     //MS_U32 u32opt = ((MS_U32)bAdd & 0xFF) << TSP_MCU_CMD_SET_STC_OFFSET_OPTION_SHIFT;
3932*53ee8cc1Swenshuai.xi 
3933*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Data0, u32Offset);
3934*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, TSP_MCU_CMD_SET_STC_OFFSET | u32EngId /*| u32opt*/);
3935*53ee8cc1Swenshuai.xi 
3936*53ee8cc1Swenshuai.xi     while(_HAL_REG32_R(&_TspCtrl[0].MCU_Cmd) != 0);
3937*53ee8cc1Swenshuai.xi 
3938*53ee8cc1Swenshuai.xi     return TRUE;
3939*53ee8cc1Swenshuai.xi }
3940*53ee8cc1Swenshuai.xi 
HAL_TSP_GetPcr(MS_U32 u32EngId,MS_U32 * pu32Pcr_32,MS_U32 * pu32Pcr)3941*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_GetPcr(MS_U32 u32EngId, MS_U32 *pu32Pcr_32, MS_U32 *pu32Pcr)
3942*53ee8cc1Swenshuai.xi {
3943*53ee8cc1Swenshuai.xi     MS_U32 i = 0UL;
3944*53ee8cc1Swenshuai.xi 
3945*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Data0, 0);
3946*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Data1, 0);
3947*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, TSP_MCU_CMD_PCR_GET | (u32EngId << TSP_MCU_CMD_NMATCH_FLT_SHFT));
3948*53ee8cc1Swenshuai.xi     while (i< 4UL)
3949*53ee8cc1Swenshuai.xi     {
3950*53ee8cc1Swenshuai.xi         if (0 == _HAL_REG32_R(&_TspCtrl[0].MCU_Cmd))
3951*53ee8cc1Swenshuai.xi         {
3952*53ee8cc1Swenshuai.xi             *pu32Pcr = _HAL_REG32_R(&_TspCtrl[0].MCU_Data0);
3953*53ee8cc1Swenshuai.xi             *pu32Pcr_32 = _HAL_REG32_R(&_TspCtrl[0].MCU_Data1);
3954*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].MCU_Data0, 0);
3955*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].MCU_Data1, 0);
3956*53ee8cc1Swenshuai.xi             return ((0!= *pu32Pcr) || (0!= *pu32Pcr_32))? TRUE: FALSE;
3957*53ee8cc1Swenshuai.xi         }
3958*53ee8cc1Swenshuai.xi         i++;
3959*53ee8cc1Swenshuai.xi         _delay();
3960*53ee8cc1Swenshuai.xi     }
3961*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, 0);
3962*53ee8cc1Swenshuai.xi     return FALSE;
3963*53ee8cc1Swenshuai.xi }
3964*53ee8cc1Swenshuai.xi 
HAL_TSP_CmdQ_IsEmpty(void)3965*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_CmdQ_IsEmpty(void)
3966*53ee8cc1Swenshuai.xi {
3967*53ee8cc1Swenshuai.xi     if (_HAL_REG32_R(&_TspCtrl[0].TsDma_Ctrl_CmdQ) & TSP_CMDQ_EMPTY)
3968*53ee8cc1Swenshuai.xi     {
3969*53ee8cc1Swenshuai.xi         return TRUE;
3970*53ee8cc1Swenshuai.xi     }
3971*53ee8cc1Swenshuai.xi     return FALSE;
3972*53ee8cc1Swenshuai.xi }
3973*53ee8cc1Swenshuai.xi 
HAL_TSP_Int_Disable(MS_U32 u32Mask)3974*53ee8cc1Swenshuai.xi void HAL_TSP_Int_Disable(MS_U32 u32Mask)
3975*53ee8cc1Swenshuai.xi {
3976*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&_TspCtrl[0].HwInt_Stat,
3977*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].HwInt_Stat)|0xFF00, (MS_U16)(u32Mask>>8UL)));
3978*53ee8cc1Swenshuai.xi }
3979*53ee8cc1Swenshuai.xi 
HAL_TSP_Int2_Disable(MS_U32 u32Mask)3980*53ee8cc1Swenshuai.xi void HAL_TSP_Int2_Disable(MS_U32 u32Mask)
3981*53ee8cc1Swenshuai.xi {
3982*53ee8cc1Swenshuai.xi     _HAL_TSP_HwInt2_BitClr((MS_U16)(u32Mask >> 8UL));
3983*53ee8cc1Swenshuai.xi }
3984*53ee8cc1Swenshuai.xi 
HAL_TSP_Int_Enable(MS_U32 u32Mask)3985*53ee8cc1Swenshuai.xi void HAL_TSP_Int_Enable(MS_U32 u32Mask)
3986*53ee8cc1Swenshuai.xi {
3987*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&_TspCtrl[0].HwInt_Stat,
3988*53ee8cc1Swenshuai.xi             SET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].HwInt_Stat)|0xFF00UL, (MS_U16)(u32Mask>>8UL)));
3989*53ee8cc1Swenshuai.xi }
3990*53ee8cc1Swenshuai.xi 
HAL_TSP_Int2_Enable(MS_U32 u32Mask)3991*53ee8cc1Swenshuai.xi void HAL_TSP_Int2_Enable(MS_U32 u32Mask)
3992*53ee8cc1Swenshuai.xi {
3993*53ee8cc1Swenshuai.xi     _HAL_TSP_HwInt2_BitSet((MS_U16)(u32Mask>>8UL));
3994*53ee8cc1Swenshuai.xi }
3995*53ee8cc1Swenshuai.xi 
3996*53ee8cc1Swenshuai.xi #define ADDR_SWINT2_L           (_virtRegBase+ 0x2db4UL)
3997*53ee8cc1Swenshuai.xi #define ADDR_SWINT2_H           (_virtRegBase+ 0x2db8UL)
HAL_TSP_Int_ClearSw(void)3998*53ee8cc1Swenshuai.xi void HAL_TSP_Int_ClearSw(void)
3999*53ee8cc1Swenshuai.xi {
4000*53ee8cc1Swenshuai.xi     if (_bIsHK)
4001*53ee8cc1Swenshuai.xi     {
4002*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].SwInt_Stat, 0);
4003*53ee8cc1Swenshuai.xi     }
4004*53ee8cc1Swenshuai.xi     else
4005*53ee8cc1Swenshuai.xi     {
4006*53ee8cc1Swenshuai.xi         REG16_T(ADDR_SWINT2_L) = 0;
4007*53ee8cc1Swenshuai.xi         REG16_T(ADDR_SWINT2_H) = 0;
4008*53ee8cc1Swenshuai.xi     }
4009*53ee8cc1Swenshuai.xi }
4010*53ee8cc1Swenshuai.xi #undef ADDR_SWINT2_L
4011*53ee8cc1Swenshuai.xi #undef ADDR_SWINT2_H
4012*53ee8cc1Swenshuai.xi 
HAL_TSP_Int_ClearHw(MS_U32 u32Mask)4013*53ee8cc1Swenshuai.xi void HAL_TSP_Int_ClearHw(MS_U32 u32Mask)
4014*53ee8cc1Swenshuai.xi {
4015*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&_TspCtrl[0].HwInt_Stat,
4016*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].HwInt_Stat)|0xff00, (MS_U16)u32Mask));
4017*53ee8cc1Swenshuai.xi }
4018*53ee8cc1Swenshuai.xi 
HAL_TSP_Int_ClearHw2(MS_U32 u32Mask)4019*53ee8cc1Swenshuai.xi void HAL_TSP_Int_ClearHw2(MS_U32 u32Mask)
4020*53ee8cc1Swenshuai.xi {
4021*53ee8cc1Swenshuai.xi     _HAL_TSP_HwInt2_BitClr((MS_U16)u32Mask);
4022*53ee8cc1Swenshuai.xi }
4023*53ee8cc1Swenshuai.xi 
HAL_TSP_CmdQ_CmdCount(void)4024*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_CmdQ_CmdCount(void)
4025*53ee8cc1Swenshuai.xi {
4026*53ee8cc1Swenshuai.xi     return (((_HAL_REG32_R(&_TspCtrl[0].TsDma_Ctrl_CmdQ) & TSP_CMDQ_CNT_MASK)>>TSP_CMDQ_CNT_SHFT));
4027*53ee8cc1Swenshuai.xi }
4028*53ee8cc1Swenshuai.xi 
HAL_TSP_CmdQ_TsDma_Reset(void)4029*53ee8cc1Swenshuai.xi void HAL_TSP_CmdQ_TsDma_Reset(void)
4030*53ee8cc1Swenshuai.xi {
4031*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].TsDma_Ctrl_CmdQ, 0);
4032*53ee8cc1Swenshuai.xi }
4033*53ee8cc1Swenshuai.xi 
HAL_TSP_CmdQ_Reset(void)4034*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_CmdQ_Reset(void)
4035*53ee8cc1Swenshuai.xi {
4036*53ee8cc1Swenshuai.xi     MS_U16 ii = 0;
4037*53ee8cc1Swenshuai.xi 
4038*53ee8cc1Swenshuai.xi     _HAL_TSP_HW_Lock();
4039*53ee8cc1Swenshuai.xi     _HAL_HALTSP_LOCK();
4040*53ee8cc1Swenshuai.xi     //_HAL_REG16_W(&_TspCtrl[0].TSP_Ctrl1,
4041*53ee8cc1Swenshuai.xi     //    SET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].TSP_Ctrl1), TSP_CTRL1_FORCE_XIU_WRDY));
4042*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&_TspCtrl[0].TSP_Ctrl1,
4043*53ee8cc1Swenshuai.xi             SET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].TSP_Ctrl1), TSP_CTRL1_CMDQ_RESET));
4044*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&_TspCtrl[0].TSP_Ctrl1,
4045*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].TSP_Ctrl1), TSP_CTRL1_CMDQ_RESET));
4046*53ee8cc1Swenshuai.xi     //_HAL_REG16_W(&_TspCtrl[0].TSP_Ctrl1,
4047*53ee8cc1Swenshuai.xi     //    RESET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].TSP_Ctrl1), TSP_CTRL1_FORCE_XIU_WRDY));
4048*53ee8cc1Swenshuai.xi 
4049*53ee8cc1Swenshuai.xi     _HAL_TSP_HW_Unlock();
4050*53ee8cc1Swenshuai.xi     _HAL_HALTSP_UNLOCK();
4051*53ee8cc1Swenshuai.xi 
4052*53ee8cc1Swenshuai.xi     //reset the last data that hw is excuting --> HW new design
4053*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&_TspCtrl5[0].TsifCfg,
4054*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG16_R(&_TspCtrl5[0].TsifCfg), TSP_TSIFCFG_WB_FSM_RESET));
4055*53ee8cc1Swenshuai.xi 
4056*53ee8cc1Swenshuai.xi     for(ii = 0; ii < 100; ii++)
4057*53ee8cc1Swenshuai.xi     {
4058*53ee8cc1Swenshuai.xi         //printf("%s, cmdQreset check %d\n", __FUNCTION__, ii);
4059*53ee8cc1Swenshuai.xi         if(_HAL_REG32_R(&_TspCtrl[0].TsDma_Ctrl_CmdQ) & TSP_TSDMA_CTRL_DONE)
4060*53ee8cc1Swenshuai.xi         {
4061*53ee8cc1Swenshuai.xi             break;
4062*53ee8cc1Swenshuai.xi         }
4063*53ee8cc1Swenshuai.xi         MsOS_DelayTask(1);
4064*53ee8cc1Swenshuai.xi     }
4065*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&_TspCtrl5[0].TsifCfg,
4066*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG16_R(&_TspCtrl5[0].TsifCfg), TSP_TSIFCFG_WB_FSM_RESET));
4067*53ee8cc1Swenshuai.xi 
4068*53ee8cc1Swenshuai.xi     if(ii == 100)
4069*53ee8cc1Swenshuai.xi     {
4070*53ee8cc1Swenshuai.xi         printf("%s, wait fine in reset timeout\n", __FUNCTION__);
4071*53ee8cc1Swenshuai.xi         return FALSE;
4072*53ee8cc1Swenshuai.xi     }
4073*53ee8cc1Swenshuai.xi 
4074*53ee8cc1Swenshuai.xi     //rst_ts_fin
4075*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].reg160C, SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), TSP_TIMESTAMP_RESET));
4076*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].reg160C, RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), TSP_TIMESTAMP_RESET));
4077*53ee8cc1Swenshuai.xi 
4078*53ee8cc1Swenshuai.xi     // init file-in time-stamp
4079*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl5[0].INIT_TIMESTAMP_FILE, 0);
4080*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&_TspCtrl5[0].InitTimestamp, SET_FLAG1(_HAL_REG16_R(&_TspCtrl5[0].InitTimestamp), TSP_INIT_TIMESTAMP_FILEIN));
4081*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&_TspCtrl5[0].InitTimestamp, RESET_FLAG1(_HAL_REG16_R(&_TspCtrl5[0].InitTimestamp), TSP_INIT_TIMESTAMP_FILEIN));
4082*53ee8cc1Swenshuai.xi 
4083*53ee8cc1Swenshuai.xi     return TRUE;
4084*53ee8cc1Swenshuai.xi }
4085*53ee8cc1Swenshuai.xi 
HAL_TSP_Get_CmdQFifoLevel(void)4086*53ee8cc1Swenshuai.xi MS_U8 HAL_TSP_Get_CmdQFifoLevel(void)
4087*53ee8cc1Swenshuai.xi {
4088*53ee8cc1Swenshuai.xi     return (MS_U8)((_HAL_REG32_R(&_TspCtrl[0].TsDma_Ctrl_CmdQ) & TSP_CMDQ_WR_LEVEL_MASK) >> TSP_CMDQ_WR_LEVEL_SHFT);
4089*53ee8cc1Swenshuai.xi }
4090*53ee8cc1Swenshuai.xi 
HAL_TSP_WbDmaEnable(MS_BOOL bEnable)4091*53ee8cc1Swenshuai.xi void HAL_TSP_WbDmaEnable(MS_BOOL bEnable)
4092*53ee8cc1Swenshuai.xi {
4093*53ee8cc1Swenshuai.xi     if (bEnable)
4094*53ee8cc1Swenshuai.xi     {
4095*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].Hw_Config0,
4096*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config0), TSP_HW_CFG0_WB_DMA_RESET));
4097*53ee8cc1Swenshuai.xi     }
4098*53ee8cc1Swenshuai.xi     else
4099*53ee8cc1Swenshuai.xi     {
4100*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].Hw_Config0,
4101*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config0), TSP_HW_CFG0_WB_DMA_RESET));
4102*53ee8cc1Swenshuai.xi     }
4103*53ee8cc1Swenshuai.xi }
4104*53ee8cc1Swenshuai.xi 
4105*53ee8cc1Swenshuai.xi // u32TSSrc: 0 -> TS0, 1 -> File, 2 -> TS1, 3 -> TS2
4106*53ee8cc1Swenshuai.xi // u32GroupId: 0 -> filter0~filter31, 1 -> filter32~filter63, 2 -> filter64~filter95, 3 -> filter96~filter127
HAL_TSP_Scmb_Status(MS_U32 u32TSSrc,MS_U32 u32GroupId,MS_U32 u32PidFltId)4107*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_Scmb_Status(MS_U32 u32TSSrc, MS_U32 u32GroupId, MS_U32 u32PidFltId)
4108*53ee8cc1Swenshuai.xi {
4109*53ee8cc1Swenshuai.xi     MS_U32              u32PIDFltMask = u32PidFltId;
4110*53ee8cc1Swenshuai.xi     MS_U32              u32ScmbSts = 0UL;
4111*53ee8cc1Swenshuai.xi 
4112*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].reg15b4,
4113*53ee8cc1Swenshuai.xi         (_HAL_REG32_R(&_TspCtrl[0].reg15b4) & ~TSP_MATCH_PID_SRC_MASK) | (u32TSSrc << TSP_MATCH_PID_SRC_SHIFT));
4114*53ee8cc1Swenshuai.xi 
4115*53ee8cc1Swenshuai.xi     if(u32PidFltId != 0xFFFFFFFFUL)
4116*53ee8cc1Swenshuai.xi     {
4117*53ee8cc1Swenshuai.xi         u32PIDFltMask = (1UL << (u32PidFltId & 0x1FUL));
4118*53ee8cc1Swenshuai.xi     }
4119*53ee8cc1Swenshuai.xi 
4120*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&_TspCtrl5[0].MatchPidSel,
4121*53ee8cc1Swenshuai.xi         (_HAL_REG16_R(&_TspCtrl5[0].MatchPidSel) & ~TSP_MATCH_PID_SEL_MASK) | ((MS_U16)u32GroupId << TSP_MATCH_PID_SEL_SHIFT));
4122*53ee8cc1Swenshuai.xi 
4123*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].reg15b4,
4124*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg15b4), TSP_MATCH_PID_LD));
4125*53ee8cc1Swenshuai.xi 
4126*53ee8cc1Swenshuai.xi     u32ScmbSts = HAS_FLAG(_HAL_REG32_R(&_TspCtrl[0].TsPidScmbStatTsin), u32PIDFltMask);
4127*53ee8cc1Swenshuai.xi 
4128*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].reg15b4,
4129*53ee8cc1Swenshuai.xi             SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg15b4), TSP_MATCH_PID_LD));
4130*53ee8cc1Swenshuai.xi 
4131*53ee8cc1Swenshuai.xi     if(u32PIDFltMask != 0xFFFFFFFFUL)
4132*53ee8cc1Swenshuai.xi     {
4133*53ee8cc1Swenshuai.xi         u32ScmbSts = ((u32ScmbSts > 0UL) ? 1UL: 0UL);
4134*53ee8cc1Swenshuai.xi     }
4135*53ee8cc1Swenshuai.xi 
4136*53ee8cc1Swenshuai.xi     return u32ScmbSts;
4137*53ee8cc1Swenshuai.xi }
4138*53ee8cc1Swenshuai.xi 
4139*53ee8cc1Swenshuai.xi 
4140*53ee8cc1Swenshuai.xi #if 0
4141*53ee8cc1Swenshuai.xi void HAL_TSP_CPU_SetBase(MS_PHY phyAddr, MS_U32 u32Size)
4142*53ee8cc1Swenshuai.xi {
4143*53ee8cc1Swenshuai.xi #if (!LINUX_TEST)
4144*53ee8cc1Swenshuai.xi     // TSP FW running in QMEM
4145*53ee8cc1Swenshuai.xi     _HAL_TSP_FW_load(u32Addr, u32Size, TRUE, TRUE, TRUE);
4146*53ee8cc1Swenshuai.xi #else
4147*53ee8cc1Swenshuai.xi     // only for linux
4148*53ee8cc1Swenshuai.xi     // @FIXME: abstract this later
4149*53ee8cc1Swenshuai.xi     void* pBuf = NULL;
4150*53ee8cc1Swenshuai.xi     MS_U32 u32PhysAddr = 0UL;
4151*53ee8cc1Swenshuai.xi 
4152*53ee8cc1Swenshuai.xi #if 0
4153*53ee8cc1Swenshuai.xi     if (NULL == (pBuf = MsOS_AllocateMemory (u32Size, gs32NonCachedPoolID)))
4154*53ee8cc1Swenshuai.xi     {
4155*53ee8cc1Swenshuai.xi         MS_ASSERT(0);
4156*53ee8cc1Swenshuai.xi     }
4157*53ee8cc1Swenshuai.xi 
4158*53ee8cc1Swenshuai.xi     memcpy(pBuf, (void*)u32Addr, u32Size);
4159*53ee8cc1Swenshuai.xi     u32PhysAddr = (MS_U32)VA2PA(pBuf);
4160*53ee8cc1Swenshuai.xi     printf("firmware 0x%08x 0x%08x\n", (MS_U32)pBuf, u32Addr);
4161*53ee8cc1Swenshuai.xi     _HAL_TSP_FW_load(u32PhysAddr, u32Size, TRUE, TRUE, TRUE);
4162*53ee8cc1Swenshuai.xi     MsOS_FreeMemory(pBuf, gs32NonCachedPoolID);
4163*53ee8cc1Swenshuai.xi #else
4164*53ee8cc1Swenshuai.xi     if (NULL == (pBuf = MsOS_AllocateMemory (72*1024*1024, gs32NonCachedPoolID)))
4165*53ee8cc1Swenshuai.xi     {
4166*53ee8cc1Swenshuai.xi         MS_ASSERT(0);
4167*53ee8cc1Swenshuai.xi     }
4168*53ee8cc1Swenshuai.xi     u32PhysAddr = 60*1024*1024;
4169*53ee8cc1Swenshuai.xi     memcpy(PA2KSEG1(u32PhysAddr), (void*)u32Addr, u32Size);
4170*53ee8cc1Swenshuai.xi     printf("firmware 0x%08x 0x%08x\n", (MS_U32)PA2KSEG1(u32PhysAddr), u32PhysAddr);
4171*53ee8cc1Swenshuai.xi     _HAL_TSP_FW_load(u32PhysAddr, u32Size, TRUE, TRUE, TRUE);
4172*53ee8cc1Swenshuai.xi     MsOS_FreeMemory(pBuf, gs32NonCachedPoolID);
4173*53ee8cc1Swenshuai.xi #endif
4174*53ee8cc1Swenshuai.xi #endif
4175*53ee8cc1Swenshuai.xi }
4176*53ee8cc1Swenshuai.xi #else
HAL_TSP_CPU_SetBase(MS_PHY phyAddr,MS_U32 u32Size)4177*53ee8cc1Swenshuai.xi void HAL_TSP_CPU_SetBase(MS_PHY phyAddr, MS_U32 u32Size)
4178*53ee8cc1Swenshuai.xi {
4179*53ee8cc1Swenshuai.xi     printf("[%s][%d] load firmware (address, size) = (0x%08lx, 0x%08x)\n", __FUNCTION__, __LINE__, (unsigned long)phyAddr, (unsigned int)u32Size);
4180*53ee8cc1Swenshuai.xi     _HAL_TSP_FW_load(phyAddr, u32Size, TRUE, TRUE, TRUE);
4181*53ee8cc1Swenshuai.xi }
4182*53ee8cc1Swenshuai.xi 
4183*53ee8cc1Swenshuai.xi #endif // #if 0
4184*53ee8cc1Swenshuai.xi 
HAL_TSP_Alive(void)4185*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_Alive(void)
4186*53ee8cc1Swenshuai.xi {
4187*53ee8cc1Swenshuai.xi     MS_U32 i = 0;
4188*53ee8cc1Swenshuai.xi     MS_U32 u32Data;
4189*53ee8cc1Swenshuai.xi 
4190*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Data0, 0);
4191*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, TSP_MCU_CMD_ALIVE);
4192*53ee8cc1Swenshuai.xi     while (i< 4)
4193*53ee8cc1Swenshuai.xi     {
4194*53ee8cc1Swenshuai.xi         if (0 == _HAL_REG32_R(&_TspCtrl[0].MCU_Cmd))
4195*53ee8cc1Swenshuai.xi         {
4196*53ee8cc1Swenshuai.xi             u32Data = _HAL_REG32_R(&_TspCtrl[0].MCU_Data0);
4197*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].MCU_Data0, 0);
4198*53ee8cc1Swenshuai.xi             return (TSP_MCU_DATA_ALIVE == u32Data)? TRUE: FALSE;
4199*53ee8cc1Swenshuai.xi         }
4200*53ee8cc1Swenshuai.xi         i++;
4201*53ee8cc1Swenshuai.xi         _delay();
4202*53ee8cc1Swenshuai.xi     }
4203*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, 0);
4204*53ee8cc1Swenshuai.xi     return FALSE;
4205*53ee8cc1Swenshuai.xi }
4206*53ee8cc1Swenshuai.xi 
HAL_TSP_SetOwner(MS_U32 u32EngId,MS_U32 u32SecFltId,MS_BOOL bOwner)4207*53ee8cc1Swenshuai.xi void HAL_TSP_SetOwner(MS_U32 u32EngId, MS_U32 u32SecFltId, MS_BOOL bOwner)
4208*53ee8cc1Swenshuai.xi {
4209*53ee8cc1Swenshuai.xi     MS_U32 u32HkId;
4210*53ee8cc1Swenshuai.xi     REG_SecFlt* pSecFilter = _HAL_TSP_SECFLT(u32EngId, u32SecFltId);
4211*53ee8cc1Swenshuai.xi 
4212*53ee8cc1Swenshuai.xi     if (_bIsHK)
4213*53ee8cc1Swenshuai.xi     {
4214*53ee8cc1Swenshuai.xi         u32HkId = (bOwner)? 0: 1;
4215*53ee8cc1Swenshuai.xi     }
4216*53ee8cc1Swenshuai.xi     else
4217*53ee8cc1Swenshuai.xi     {
4218*53ee8cc1Swenshuai.xi         u32HkId = (bOwner)? 1: 0;
4219*53ee8cc1Swenshuai.xi     }
4220*53ee8cc1Swenshuai.xi     HAL_REG32_IndW((REG32 *)&pSecFilter->RmnReqCnt, (HAL_REG32_IndR((REG32 *)&pSecFilter->RmnReqCnt) & ~TSP_SECFLT_OWNER_MASK) |
4221*53ee8cc1Swenshuai.xi                                     ((u32HkId << TSP_SECFLT_OWNER_SHFT) & TSP_SECFLT_OWNER_MASK));
4222*53ee8cc1Swenshuai.xi }
4223*53ee8cc1Swenshuai.xi 
HAL_TSP_FileIn_Set(MS_BOOL bset)4224*53ee8cc1Swenshuai.xi void HAL_TSP_FileIn_Set(MS_BOOL bset)
4225*53ee8cc1Swenshuai.xi {
4226*53ee8cc1Swenshuai.xi     if (bset)
4227*53ee8cc1Swenshuai.xi     {
4228*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].reg160C,
4229*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), TSP_FILEIN192_EN));
4230*53ee8cc1Swenshuai.xi     }
4231*53ee8cc1Swenshuai.xi     else
4232*53ee8cc1Swenshuai.xi     {
4233*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].reg160C,
4234*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), TSP_FILEIN192_EN));
4235*53ee8cc1Swenshuai.xi     }
4236*53ee8cc1Swenshuai.xi }
4237*53ee8cc1Swenshuai.xi 
4238*53ee8cc1Swenshuai.xi //Reset file-in timestamp
HAL_TSP_ResetTimeStamp(void)4239*53ee8cc1Swenshuai.xi void HAL_TSP_ResetTimeStamp(void)
4240*53ee8cc1Swenshuai.xi {
4241*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].reg160C,
4242*53ee8cc1Swenshuai.xi         SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), TSP_TIMESTAMP_RESET));
4243*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].reg160C,
4244*53ee8cc1Swenshuai.xi         RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), TSP_TIMESTAMP_RESET));
4245*53ee8cc1Swenshuai.xi }
4246*53ee8cc1Swenshuai.xi 
HAL_TSP_GetPVRTimeStamp(MS_U8 u8PVRId)4247*53ee8cc1Swenshuai.xi MS_U32  HAL_TSP_GetPVRTimeStamp(MS_U8 u8PVRId)
4248*53ee8cc1Swenshuai.xi {
4249*53ee8cc1Swenshuai.xi     MS_U32 u32lpcr = 0;
4250*53ee8cc1Swenshuai.xi 
4251*53ee8cc1Swenshuai.xi     switch(u8PVRId)
4252*53ee8cc1Swenshuai.xi     {
4253*53ee8cc1Swenshuai.xi         case 0:
4254*53ee8cc1Swenshuai.xi         default:
4255*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].reg160C,
4256*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), TSP_PVR1_LPCR1_RLD));
4257*53ee8cc1Swenshuai.xi             u32lpcr = _HAL_REG32_R(&_TspCtrl[0].PVR1_LPcr1);
4258*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].reg160C,
4259*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), TSP_PVR1_LPCR1_RLD));
4260*53ee8cc1Swenshuai.xi             break;
4261*53ee8cc1Swenshuai.xi         case 1:
4262*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].PVR2_Config,
4263*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].PVR2_Config), TSP_PVR2_LPCR1_RLD));
4264*53ee8cc1Swenshuai.xi             u32lpcr = _HAL_REG32_R(&_TspCtrl[0].PVR2_LPCR1);
4265*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].PVR2_Config,
4266*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].PVR2_Config), TSP_PVR2_LPCR1_RLD));
4267*53ee8cc1Swenshuai.xi             break;
4268*53ee8cc1Swenshuai.xi     }
4269*53ee8cc1Swenshuai.xi 
4270*53ee8cc1Swenshuai.xi     return u32lpcr;
4271*53ee8cc1Swenshuai.xi }
4272*53ee8cc1Swenshuai.xi 
HAL_TSP_SetPVRTimeStamp(MS_U8 u8PVRId,MS_U32 u32Stamp)4273*53ee8cc1Swenshuai.xi void HAL_TSP_SetPVRTimeStamp(MS_U8 u8PVRId, MS_U32 u32Stamp)
4274*53ee8cc1Swenshuai.xi {
4275*53ee8cc1Swenshuai.xi     switch(u8PVRId)
4276*53ee8cc1Swenshuai.xi     {
4277*53ee8cc1Swenshuai.xi         case 0:
4278*53ee8cc1Swenshuai.xi         default:
4279*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].reg160C,
4280*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), TSP_PVR1_LPCR1_WLD));
4281*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].PVR1_LPcr1,u32Stamp);
4282*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].reg160C,
4283*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), TSP_PVR1_LPCR1_WLD));
4284*53ee8cc1Swenshuai.xi             break;
4285*53ee8cc1Swenshuai.xi         case 1:
4286*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].PVR2_Config,
4287*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].PVR2_Config), TSP_PVR2_LPCR1_WLD));
4288*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].PVR2_LPCR1,u32Stamp);
4289*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].PVR2_Config,
4290*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].PVR2_Config), TSP_PVR2_LPCR1_WLD));
4291*53ee8cc1Swenshuai.xi             break;
4292*53ee8cc1Swenshuai.xi     }
4293*53ee8cc1Swenshuai.xi }
4294*53ee8cc1Swenshuai.xi 
4295*53ee8cc1Swenshuai.xi 
4296*53ee8cc1Swenshuai.xi #define CKG_TSO_SRC        0x169CUL  //0x27
4297*53ee8cc1Swenshuai.xi     #define CKG_TSO_TRACE_DISABLE    0x0001UL
4298*53ee8cc1Swenshuai.xi     #define CKG_TSO_TRACE_INVERT     0x0002UL
4299*53ee8cc1Swenshuai.xi     #define CKG_TSO_TRACE_CLK_MASK   0x000CUL
4300*53ee8cc1Swenshuai.xi     #define CKG_TSO0_IN_DIABLE       0x0100UL
4301*53ee8cc1Swenshuai.xi     #define CKG_TSO0_IN_INVERT       0x0200UL
4302*53ee8cc1Swenshuai.xi     #define CKG_TSO0_IN_CLK_MASK     0x1C00UL
4303*53ee8cc1Swenshuai.xi #define CKG_TS0_TS1        0x16A0UL  //0x28
4304*53ee8cc1Swenshuai.xi     #define CLK_TS0_DISABLE          0x0001UL
4305*53ee8cc1Swenshuai.xi     #define CLK_TS0_INVERT           0x0002UL
4306*53ee8cc1Swenshuai.xi     #define CLK_TS0_CLK_MASK         0x001CUL
4307*53ee8cc1Swenshuai.xi     #define CLK_TS1_DISABLE          0x0100UL
4308*53ee8cc1Swenshuai.xi     #define CLK_TS1_INVERT           0x0200UL
4309*53ee8cc1Swenshuai.xi     #define CLK_TS1_CLK_MASK         0x1C00UL
4310*53ee8cc1Swenshuai.xi #define CKG_TS2_TSGP       0x16A4UL  //0x29
4311*53ee8cc1Swenshuai.xi     #define CLK_TS2_DISABLE          0x0001UL
4312*53ee8cc1Swenshuai.xi     #define CLK_TS2_INVERT           0x0002UL
4313*53ee8cc1Swenshuai.xi     #define CLK_TS2_CLK_MASK         0x001CUL
4314*53ee8cc1Swenshuai.xi #define CKG_TSP_STC0       0x16A8UL  //0x2A
4315*53ee8cc1Swenshuai.xi     #define CLK_TSP_DISABLE          0x0001UL
4316*53ee8cc1Swenshuai.xi     #define CLK_TSP_INVERT           0x0002UL
4317*53ee8cc1Swenshuai.xi     #define CLK_TSP_CLK_MASK         0x000CUL
4318*53ee8cc1Swenshuai.xi     #define CLK_PAR_DISABLE          0x0010UL
4319*53ee8cc1Swenshuai.xi     #define CLK_PAR_INVERT           0x0020UL
4320*53ee8cc1Swenshuai.xi     #define CLK_PAR_CLK_MASK         0x0040UL
4321*53ee8cc1Swenshuai.xi     #define CLK_PAR_CLK_192M         0x0040UL
4322*53ee8cc1Swenshuai.xi     #define CLK_STC_DISABLE          0x0100UL
4323*53ee8cc1Swenshuai.xi     #define CLK_STC_INVERT           0x0200UL
4324*53ee8cc1Swenshuai.xi     #define CLK_STC_CLK_MASK         0x1C00UL
4325*53ee8cc1Swenshuai.xi     #define CLK_STC_SYC_STC0         0x0000UL   //STC0 select for AV
4326*53ee8cc1Swenshuai.xi 
4327*53ee8cc1Swenshuai.xi #define CKG_TSP_STAMP      0x16ACUL  //0x2B
4328*53ee8cc1Swenshuai.xi     #define CLK_SYN_STC0_MASK        0x0007UL
4329*53ee8cc1Swenshuai.xi     #define CLK_SYN_STC0_432M        0x0001UL
4330*53ee8cc1Swenshuai.xi     #define CLK_SYN_STC1_MASK        0x0070UL
4331*53ee8cc1Swenshuai.xi     #define CLK_SYN_STC1_432M        0x0010UL
4332*53ee8cc1Swenshuai.xi     #define CLK_STAM_DISABLE         0x0100UL
4333*53ee8cc1Swenshuai.xi     #define CLK_STAM_INVERT          0x0200UL
4334*53ee8cc1Swenshuai.xi     #define CLK_STAM_CLK_MASK        0x0C00UL
4335*53ee8cc1Swenshuai.xi 
4336*53ee8cc1Swenshuai.xi #define CKG_TSP_STC1       0x16B0UL  //0x2C
4337*53ee8cc1Swenshuai.xi     #define CLK_STC1_DISABLE         0x0001UL
4338*53ee8cc1Swenshuai.xi     #define CLK_STC1_INVERT          0x0002UL
4339*53ee8cc1Swenshuai.xi     #define CLK_STC1_SYN_STC1        0x0004UL  //STC1 select for AV
4340*53ee8cc1Swenshuai.xi     #define CLK_STC1_CLK_MASK        0x001CUL
4341*53ee8cc1Swenshuai.xi     #define CLK_SYN_STC2_MASK        0x0700UL
4342*53ee8cc1Swenshuai.xi     #define CLK_SYN_STC2_432M        0x0100UL
4343*53ee8cc1Swenshuai.xi     #define CLK_SYN_STC3_MASK        0x7000UL
4344*53ee8cc1Swenshuai.xi     #define CLK_SYN_STC3_432M        0x1000UL
4345*53ee8cc1Swenshuai.xi 
4346*53ee8cc1Swenshuai.xi #define CKG_TSP_STC_TSIF0_MM0   0x16B4UL  //0x2D
4347*53ee8cc1Swenshuai.xi     #define CLK_STC_TSIF0_DISABLE    0x0001UL
4348*53ee8cc1Swenshuai.xi     #define CLK_STC_TSIF0_INVERT     0x0002UL
4349*53ee8cc1Swenshuai.xi     #define CLK_STC_TSIF0_MASK       0x001CUL
4350*53ee8cc1Swenshuai.xi     #define CLK_STC_TSIF0_27M        0x001CUL
4351*53ee8cc1Swenshuai.xi     #define CLK_STC_MM0_DISABLE      0x0100UL
4352*53ee8cc1Swenshuai.xi     #define CLK_STC_MM0_INVERT       0x0200UL
4353*53ee8cc1Swenshuai.xi     #define CLK_STC_MM0_MASK         0x1C00UL
4354*53ee8cc1Swenshuai.xi     #define CLK_STC_MM0_27M          0x1C00UL
4355*53ee8cc1Swenshuai.xi 
4356*53ee8cc1Swenshuai.xi #define CKG_TSP_STC_MM1_PVR1   0x16B8UL  //0x2E
4357*53ee8cc1Swenshuai.xi     #define CLK_STC_MM1_DISABLE      0x0001UL
4358*53ee8cc1Swenshuai.xi     #define CLK_STC_MM1_INVERT       0x0002UL
4359*53ee8cc1Swenshuai.xi     #define CLK_STC_MM1_MASK         0x001CUL
4360*53ee8cc1Swenshuai.xi     #define CLK_STC_MM1_27M          0x001CUL
4361*53ee8cc1Swenshuai.xi     #define CLK_STC_PVR1_DISABLE     0x0100UL
4362*53ee8cc1Swenshuai.xi     #define CLK_STC_PVR1_INVERT      0x0200UL
4363*53ee8cc1Swenshuai.xi     #define CLK_STC_PVR1_MASK        0x1C00UL
4364*53ee8cc1Swenshuai.xi     #define CLK_STC_PVR1_27M         0x1C00UL
4365*53ee8cc1Swenshuai.xi     #define CLK_STC_PVR1_CLK_SHIFT   10
4366*53ee8cc1Swenshuai.xi 
4367*53ee8cc1Swenshuai.xi #define CKG_TSP_STC_PVR2_FIQ0   0x16BCUL  //0x2F
4368*53ee8cc1Swenshuai.xi     #define CLK_STC_PVR2_DISABLE      0x0001UL
4369*53ee8cc1Swenshuai.xi     #define CLK_STC_PVR2_INVERT       0x0002UL
4370*53ee8cc1Swenshuai.xi     #define CLK_STC_PVR2_MASK         0x001CUL
4371*53ee8cc1Swenshuai.xi     #define CLK_STC_PVR2_27M          0x001CUL
4372*53ee8cc1Swenshuai.xi     #define CLK_STC_PVR2_CLK_SHIFT    2
4373*53ee8cc1Swenshuai.xi     #define CLK_STC_FIQ0_DISABLE      0x0100UL
4374*53ee8cc1Swenshuai.xi     #define CLK_STC_FIQ0_INVERT       0x0200UL
4375*53ee8cc1Swenshuai.xi     #define CLK_STC_FIQ0_MASK         0x1C00UL
4376*53ee8cc1Swenshuai.xi     #define CLK_STC_FIQ0_27M          0x1C00UL
4377*53ee8cc1Swenshuai.xi 
4378*53ee8cc1Swenshuai.xi #define CKG2_TSP_TSFI      0x1434UL  //0x0D    //0x100A bank
4379*53ee8cc1Swenshuai.xi     #define CKG2_TSP_TSFI_DISABKE    0x0100UL
4380*53ee8cc1Swenshuai.xi     #define CKG2_TSP_TSFI_INVERT     0x0200UL
4381*53ee8cc1Swenshuai.xi     #define CKG2_TSP_TSFI_CLK_MASK   0x1C00UL
4382*53ee8cc1Swenshuai.xi #define CKG2_TSO1_IN       0x1440    //0x10
4383*53ee8cc1Swenshuai.xi     #define CKG2_TSO1_IN_DIABLE      0x0001UL
4384*53ee8cc1Swenshuai.xi     #define CKG2_TSO1_IN_INVERT      0x0002UL
4385*53ee8cc1Swenshuai.xi     #define CKG2_TSO1_IN_CLK_MASK    0x001CUL
4386*53ee8cc1Swenshuai.xi     #define CKG2_TSO2_IN_DIABLE      0x0100UL
4387*53ee8cc1Swenshuai.xi     #define CKG2_TSO2_IN_INVERT      0x0200UL
4388*53ee8cc1Swenshuai.xi     #define CKG2_TSO2_IN_CLK_MASK    0x1C00UL
4389*53ee8cc1Swenshuai.xi #define CKG2_TS4_TS5       0x1460    //0x18
4390*53ee8cc1Swenshuai.xi     #define CKG2_TS4_DISABLE         0x0001UL
4391*53ee8cc1Swenshuai.xi     #define CKG2_TS4_INVERT          0x0002UL
4392*53ee8cc1Swenshuai.xi     #define CKG2_TS4_MASK            0x001CUL
4393*53ee8cc1Swenshuai.xi     #define CKG2_TS5_DISABLE         0x0100UL
4394*53ee8cc1Swenshuai.xi     #define CKG2_TS5_INVERT          0x0200UL
4395*53ee8cc1Swenshuai.xi     #define CKG2_TS5_MASK            0x1C00UL
4396*53ee8cc1Swenshuai.xi #define CKG2_TSP_TS_SAMPLE 0x1464UL  //0x19
4397*53ee8cc1Swenshuai.xi     #define CKG2_TSP_TS_SAMPLE_DISABLE       0x0010UL
4398*53ee8cc1Swenshuai.xi     #define CKG2_TSP_TS_SAMPLE_INVERT        0x0020UL
4399*53ee8cc1Swenshuai.xi     #define CKG2_TSP_TS_SAMPLE_CLK_MASK      0x00C0UL
4400*53ee8cc1Swenshuai.xi     #define CKG2_TSP_TS_MMT_DISABLE          0x0100UL
4401*53ee8cc1Swenshuai.xi     #define CKG2_TSP_TS_MMT_INVERT           0x0200UL
4402*53ee8cc1Swenshuai.xi     #define CKG2_TSP_TS_MMT_MASK             0x1C00UL
4403*53ee8cc1Swenshuai.xi 
4404*53ee8cc1Swenshuai.xi #define CHIP_TSP_BOOT_CLK_SEL   0x3D68UL //0x5A
4405*53ee8cc1Swenshuai.xi     #define CHIP_TSP_BOOT_CLK_SEL_MASK  0x0020UL
4406*53ee8cc1Swenshuai.xi 
HAL_TSP_SetPVRTimeStampClk(MS_U8 u8PVRId,MS_U32 u32ClkSrc)4407*53ee8cc1Swenshuai.xi void HAL_TSP_SetPVRTimeStampClk(MS_U8 u8PVRId, MS_U32 u32ClkSrc)
4408*53ee8cc1Swenshuai.xi {
4409*53ee8cc1Swenshuai.xi     MS_U32 u32Flag = 0;
4410*53ee8cc1Swenshuai.xi     MS_U32 u32Clk = 0;
4411*53ee8cc1Swenshuai.xi     MS_U32 u32RegClkSrc = 0;
4412*53ee8cc1Swenshuai.xi     MS_U32 u32RegClkMask = 0;
4413*53ee8cc1Swenshuai.xi     MS_U32 u32RegShift = 0;
4414*53ee8cc1Swenshuai.xi     MS_BOOL b27M = (MS_BOOL)(u32ClkSrc & 0xFFUL);
4415*53ee8cc1Swenshuai.xi 
4416*53ee8cc1Swenshuai.xi     if((u32ClkSrc & 0xFF00UL) == 0)
4417*53ee8cc1Swenshuai.xi     {
4418*53ee8cc1Swenshuai.xi         u32Clk = 0x7UL;  //original clock
4419*53ee8cc1Swenshuai.xi     }
4420*53ee8cc1Swenshuai.xi     else
4421*53ee8cc1Swenshuai.xi     {
4422*53ee8cc1Swenshuai.xi         u32Clk = ((u32ClkSrc & 0xFF00UL) >> 8) - 1; //clock engine select
4423*53ee8cc1Swenshuai.xi     }
4424*53ee8cc1Swenshuai.xi 
4425*53ee8cc1Swenshuai.xi     switch (u8PVRId)
4426*53ee8cc1Swenshuai.xi     {
4427*53ee8cc1Swenshuai.xi         case 0:
4428*53ee8cc1Swenshuai.xi             u32Flag = TSP_PVR1_CLK_STAMP_27_EN;
4429*53ee8cc1Swenshuai.xi             u32RegClkSrc = CKG_TSP_STC_MM1_PVR1;
4430*53ee8cc1Swenshuai.xi             u32RegClkMask = CLK_STC_PVR1_MASK|CLK_STC_PVR1_DISABLE|CLK_STC_PVR1_INVERT;
4431*53ee8cc1Swenshuai.xi             u32RegShift = CLK_STC_PVR1_CLK_SHIFT;
4432*53ee8cc1Swenshuai.xi             break;
4433*53ee8cc1Swenshuai.xi         case 1:
4434*53ee8cc1Swenshuai.xi             u32Flag = TSP_PVR2_CLK_STAMP_27_EN;
4435*53ee8cc1Swenshuai.xi             u32RegClkSrc = CKG_TSP_STC_PVR2_FIQ0;
4436*53ee8cc1Swenshuai.xi             u32RegClkMask = CLK_STC_PVR2_MASK|CLK_STC_PVR2_DISABLE|CLK_STC_PVR2_INVERT;
4437*53ee8cc1Swenshuai.xi             u32RegShift = CLK_STC_PVR2_CLK_SHIFT;
4438*53ee8cc1Swenshuai.xi             break;
4439*53ee8cc1Swenshuai.xi         default:
4440*53ee8cc1Swenshuai.xi             break;
4441*53ee8cc1Swenshuai.xi     }
4442*53ee8cc1Swenshuai.xi 
4443*53ee8cc1Swenshuai.xi     if(b27M == TRUE)
4444*53ee8cc1Swenshuai.xi     {
4445*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].HW2_Config3,
4446*53ee8cc1Swenshuai.xi             SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].HW2_Config3), u32Flag));
4447*53ee8cc1Swenshuai.xi     }
4448*53ee8cc1Swenshuai.xi     else
4449*53ee8cc1Swenshuai.xi     {
4450*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].HW2_Config3,
4451*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].HW2_Config3), u32Flag));
4452*53ee8cc1Swenshuai.xi     }
4453*53ee8cc1Swenshuai.xi 
4454*53ee8cc1Swenshuai.xi     // Select PVR STC clock source
4455*53ee8cc1Swenshuai.xi     _HAL_REG32L_W((REG32_L *)(_virtRegBase+u32RegClkSrc),
4456*53ee8cc1Swenshuai.xi             (_HAL_REG32L_R((REG32_L *)(_virtRegBase+u32RegClkSrc)) & ~u32RegClkMask) | (u32Clk << u32RegShift));
4457*53ee8cc1Swenshuai.xi 
4458*53ee8cc1Swenshuai.xi }
4459*53ee8cc1Swenshuai.xi 
HAL_TSP_GetPlayBackTimeStamp(void)4460*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_GetPlayBackTimeStamp(void)
4461*53ee8cc1Swenshuai.xi {
4462*53ee8cc1Swenshuai.xi     MS_U32 u32value = 0;
4463*53ee8cc1Swenshuai.xi 
4464*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].reg160C,
4465*53ee8cc1Swenshuai.xi         RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), TSP_LPCR2_RLD));
4466*53ee8cc1Swenshuai.xi 
4467*53ee8cc1Swenshuai.xi     u32value = _HAL_REG32_R(&_TspCtrl[0].LPcr2);
4468*53ee8cc1Swenshuai.xi 
4469*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].reg160C,
4470*53ee8cc1Swenshuai.xi         SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), TSP_LPCR2_RLD));
4471*53ee8cc1Swenshuai.xi 
4472*53ee8cc1Swenshuai.xi 
4473*53ee8cc1Swenshuai.xi     return u32value;
4474*53ee8cc1Swenshuai.xi }
4475*53ee8cc1Swenshuai.xi 
HAL_TSP_SetPlayBackTimeStamp(MS_U32 u32Stamp)4476*53ee8cc1Swenshuai.xi void HAL_TSP_SetPlayBackTimeStamp(MS_U32 u32Stamp)
4477*53ee8cc1Swenshuai.xi {
4478*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].reg160C,
4479*53ee8cc1Swenshuai.xi         SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), TSP_LPCR2_WLD));
4480*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].LPcr2,u32Stamp);
4481*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].reg160C,
4482*53ee8cc1Swenshuai.xi         RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), TSP_LPCR2_WLD));
4483*53ee8cc1Swenshuai.xi }
4484*53ee8cc1Swenshuai.xi 
HAL_TSP_SetPlayBackTimeStampClk(MS_U8 u8Id,MS_U32 u32ClkSrc)4485*53ee8cc1Swenshuai.xi void HAL_TSP_SetPlayBackTimeStampClk(MS_U8 u8Id, MS_U32 u32ClkSrc)
4486*53ee8cc1Swenshuai.xi {
4487*53ee8cc1Swenshuai.xi     if(u32ClkSrc == 0x0) // 90K
4488*53ee8cc1Swenshuai.xi     {
4489*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].HW2_Config3,
4490*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].HW2_Config3), TSP_TSIF0_CLK_STAMP_27_EN));
4491*53ee8cc1Swenshuai.xi     }
4492*53ee8cc1Swenshuai.xi     else // 27M
4493*53ee8cc1Swenshuai.xi     {
4494*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].HW2_Config3,
4495*53ee8cc1Swenshuai.xi             SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].HW2_Config3), TSP_TSIF0_CLK_STAMP_27_EN));
4496*53ee8cc1Swenshuai.xi     }
4497*53ee8cc1Swenshuai.xi }
4498*53ee8cc1Swenshuai.xi 
HAL_TSP_GetFileInTimeStamp(void)4499*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_GetFileInTimeStamp(void)
4500*53ee8cc1Swenshuai.xi {
4501*53ee8cc1Swenshuai.xi     return _HAL_REG32_R(&_TspCtrl[0].TimeStamp_FileIn);
4502*53ee8cc1Swenshuai.xi }
4503*53ee8cc1Swenshuai.xi 
HAL_TSP_GetFilinReadAddr(MS_PHY * pphyReadAddr)4504*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_GetFilinReadAddr(MS_PHY* pphyReadAddr)
4505*53ee8cc1Swenshuai.xi {
4506*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].HW2_Config3,
4507*53ee8cc1Swenshuai.xi         RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].HW2_Config3), TSP_FILEIN_RADDR_READ));
4508*53ee8cc1Swenshuai.xi 
4509*53ee8cc1Swenshuai.xi     *pphyReadAddr = ((MS_PHY)_HAL_REG32_R(&_TspCtrl[0].TsFileIn_RPtr) << MIU_BUS) + _phyFIBufMiuOffset;
4510*53ee8cc1Swenshuai.xi 
4511*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].HW2_Config3,
4512*53ee8cc1Swenshuai.xi         SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].HW2_Config3), TSP_FILEIN_RADDR_READ));
4513*53ee8cc1Swenshuai.xi 
4514*53ee8cc1Swenshuai.xi     return TRUE;
4515*53ee8cc1Swenshuai.xi }
4516*53ee8cc1Swenshuai.xi 
HAL_TSP_SetDMABurstLen(MS_U32 u32Len)4517*53ee8cc1Swenshuai.xi void HAL_TSP_SetDMABurstLen(MS_U32 u32Len)
4518*53ee8cc1Swenshuai.xi {
4519*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].PktChkSizeFilein,
4520*53ee8cc1Swenshuai.xi             SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].PktChkSizeFilein), TSP_SEC_DMA_BURST_EN));
4521*53ee8cc1Swenshuai.xi 
4522*53ee8cc1Swenshuai.xi     if(u32Len == 0)
4523*53ee8cc1Swenshuai.xi     {
4524*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&_TspCtrl3[0].HWeco0,
4525*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG16_R(&_TspCtrl3[0].HWeco0), HW_ECO_SEC_DMA_BURST_NEWMODE));
4526*53ee8cc1Swenshuai.xi     }
4527*53ee8cc1Swenshuai.xi     else
4528*53ee8cc1Swenshuai.xi     {
4529*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&_TspCtrl3[0].HWeco0,
4530*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG16_R(&_TspCtrl3[0].HWeco0), HW_ECO_SEC_DMA_BURST_NEWMODE));
4531*53ee8cc1Swenshuai.xi     }
4532*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
4533*53ee8cc1Swenshuai.xi         _HAL_REG32_R(&_TspCtrl[0].Hw_Config4) | ((u32Len<<TSP_HW_DMA_MODE_SHIFT)&TSP_HW_DMA_MODE_MASK));
4534*53ee8cc1Swenshuai.xi }
4535*53ee8cc1Swenshuai.xi 
HAL_TSP_PVR_PacketMode(MS_U8 u8PVRId,MS_BOOL bSet)4536*53ee8cc1Swenshuai.xi void HAL_TSP_PVR_PacketMode(MS_U8 u8PVRId, MS_BOOL bSet)
4537*53ee8cc1Swenshuai.xi {
4538*53ee8cc1Swenshuai.xi     REG32 *pReg = 0;
4539*53ee8cc1Swenshuai.xi     MS_U32 u32Flag = 0UL;
4540*53ee8cc1Swenshuai.xi 
4541*53ee8cc1Swenshuai.xi     switch(u8PVRId)
4542*53ee8cc1Swenshuai.xi     {
4543*53ee8cc1Swenshuai.xi         case 0:
4544*53ee8cc1Swenshuai.xi         default:
4545*53ee8cc1Swenshuai.xi             pReg = &_TspCtrl[0].reg160C;
4546*53ee8cc1Swenshuai.xi             u32Flag = TSP_RECORD192_EN;
4547*53ee8cc1Swenshuai.xi             break;
4548*53ee8cc1Swenshuai.xi         case 1:
4549*53ee8cc1Swenshuai.xi             pReg = &_TspCtrl[0].PVR2_Config;
4550*53ee8cc1Swenshuai.xi             u32Flag = TSP_PVR2_PKT192_EN;
4551*53ee8cc1Swenshuai.xi             break;
4552*53ee8cc1Swenshuai.xi     }
4553*53ee8cc1Swenshuai.xi 
4554*53ee8cc1Swenshuai.xi     if (bSet)
4555*53ee8cc1Swenshuai.xi     {
4556*53ee8cc1Swenshuai.xi         _HAL_REG32_W(pReg, SET_FLAG1(_HAL_REG32_R(pReg), u32Flag));
4557*53ee8cc1Swenshuai.xi     }
4558*53ee8cc1Swenshuai.xi     else
4559*53ee8cc1Swenshuai.xi     {
4560*53ee8cc1Swenshuai.xi         _HAL_REG32_W(pReg, RESET_FLAG1(_HAL_REG32_R(pReg), u32Flag));
4561*53ee8cc1Swenshuai.xi     }
4562*53ee8cc1Swenshuai.xi }
4563*53ee8cc1Swenshuai.xi 
HAL_TSP_PVR_Fifo_Block_Disable(MS_U8 u8PVRId,MS_BOOL bDisable)4564*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_PVR_Fifo_Block_Disable(MS_U8 u8PVRId, MS_BOOL bDisable)
4565*53ee8cc1Swenshuai.xi {
4566*53ee8cc1Swenshuai.xi     if(bDisable == TRUE)
4567*53ee8cc1Swenshuai.xi     {
4568*53ee8cc1Swenshuai.xi         switch(u8PVRId)
4569*53ee8cc1Swenshuai.xi         {
4570*53ee8cc1Swenshuai.xi             case 0:
4571*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].PVR2_Config, SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].PVR2_Config), TSP_PVR1_BLOCK_DIS));
4572*53ee8cc1Swenshuai.xi                 break;
4573*53ee8cc1Swenshuai.xi             case 1:
4574*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].PVR2_Config, SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].PVR2_Config), TSP_PVR2_BLOCK_DIS));
4575*53ee8cc1Swenshuai.xi                 break;
4576*53ee8cc1Swenshuai.xi             default:
4577*53ee8cc1Swenshuai.xi                 return FALSE;
4578*53ee8cc1Swenshuai.xi         }
4579*53ee8cc1Swenshuai.xi     }
4580*53ee8cc1Swenshuai.xi     else
4581*53ee8cc1Swenshuai.xi     {
4582*53ee8cc1Swenshuai.xi         switch(u8PVRId)
4583*53ee8cc1Swenshuai.xi         {
4584*53ee8cc1Swenshuai.xi             case 0:
4585*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].PVR2_Config, RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].PVR2_Config), TSP_PVR1_BLOCK_DIS));
4586*53ee8cc1Swenshuai.xi                 break;
4587*53ee8cc1Swenshuai.xi             case 1:
4588*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].PVR2_Config, RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].PVR2_Config), TSP_PVR2_BLOCK_DIS));
4589*53ee8cc1Swenshuai.xi                 break;
4590*53ee8cc1Swenshuai.xi             default:
4591*53ee8cc1Swenshuai.xi                 return FALSE;
4592*53ee8cc1Swenshuai.xi         }
4593*53ee8cc1Swenshuai.xi     }
4594*53ee8cc1Swenshuai.xi 
4595*53ee8cc1Swenshuai.xi     return TRUE;
4596*53ee8cc1Swenshuai.xi }
4597*53ee8cc1Swenshuai.xi 
HAL_ResetAll(void)4598*53ee8cc1Swenshuai.xi void HAL_ResetAll(void)
4599*53ee8cc1Swenshuai.xi {
4600*53ee8cc1Swenshuai.xi     printf("Reset ALL registers\n");
4601*53ee8cc1Swenshuai.xi     //_HAL_REG32_W(&_TspCtrl[0].TSP_Ctrl,
4602*53ee8cc1Swenshuai.xi     //    SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].TSP_Ctrl), TSP_CTRL_CPU_EN));
4603*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&_TspCtrl[0].TSP_Ctrl1,
4604*53ee8cc1Swenshuai.xi         SET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].TSP_Ctrl1), TSP_CTRL1_DMA_RST));
4605*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].Hw_Config0,
4606*53ee8cc1Swenshuai.xi         SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config0), TSP_HW_CFG0_WB_DMA_RESET));
4607*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].TSP_Ctrl,
4608*53ee8cc1Swenshuai.xi         SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].TSP_Ctrl), TSP_CTRL_SW_RST));
4609*53ee8cc1Swenshuai.xi 
4610*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&_TspCtrl[0].TSP_Ctrl1,
4611*53ee8cc1Swenshuai.xi         RESET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].TSP_Ctrl1), TSP_CTRL1_DMA_RST));
4612*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].Hw_Config0,
4613*53ee8cc1Swenshuai.xi         RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config0), TSP_HW_CFG0_WB_DMA_RESET));
4614*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].TSP_Ctrl,
4615*53ee8cc1Swenshuai.xi         RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].TSP_Ctrl), TSP_CTRL_SW_RST));
4616*53ee8cc1Swenshuai.xi }
4617*53ee8cc1Swenshuai.xi 
4618*53ee8cc1Swenshuai.xi #ifdef  CONFIG_MSTAR_CLKM
HAL_TSP_PowerCtrl(MS_BOOL bOn)4619*53ee8cc1Swenshuai.xi void HAL_TSP_PowerCtrl(MS_BOOL bOn)
4620*53ee8cc1Swenshuai.xi {
4621*53ee8cc1Swenshuai.xi     MS_S32 s32ClkHandle;
4622*53ee8cc1Swenshuai.xi 
4623*53ee8cc1Swenshuai.xi     if (bOn)
4624*53ee8cc1Swenshuai.xi     {
4625*53ee8cc1Swenshuai.xi 
4626*53ee8cc1Swenshuai.xi         // Turn off MCM
4627*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&_TspCtrl5[0].Miu_MCM_Cfg,_HAL_REG16_R(&_TspCtrl5[0].Miu_MCM_Cfg) | MCM_TURN_OFF_ALL);
4628*53ee8cc1Swenshuai.xi 
4629*53ee8cc1Swenshuai.xi         // Enable TSP Clock
4630*53ee8cc1Swenshuai.xi         s32ClkHandle = Drv_Clkm_Get_Handle("g_clk_tsp");
4631*53ee8cc1Swenshuai.xi         Drv_Clkm_Set_Clk_Source(s32ClkHandle , "CLK_TSP_FAST");
4632*53ee8cc1Swenshuai.xi 
4633*53ee8cc1Swenshuai.xi         //TSP select SRAM
4634*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CHIP_TSP_BOOT_CLK_SEL), RESET_FLAG1(_HAL_REG32L_R((REG32_L *)(_virtRegBase+CHIP_TSP_BOOT_CLK_SEL)), CHIP_TSP_BOOT_CLK_SEL_MASK));
4635*53ee8cc1Swenshuai.xi 
4636*53ee8cc1Swenshuai.xi         //Select SRAM
4637*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&(_TspCtrl2[0].Qmem_Dbg), SET_FLAG1(_HAL_REG16_R(&(_TspCtrl2[0].Qmem_Dbg)), QMEM_DBG_TSP_SEL_SRAM));
4638*53ee8cc1Swenshuai.xi 
4639*53ee8cc1Swenshuai.xi         // Enable CLK_PARSER clock
4640*53ee8cc1Swenshuai.xi         s32ClkHandle = Drv_Clkm_Get_Handle("g_clk_parser");
4641*53ee8cc1Swenshuai.xi         Drv_Clkm_Set_Clk_Source(s32ClkHandle , "CLK_PARSER_FAST"); //parser clock 192M
4642*53ee8cc1Swenshuai.xi 
4643*53ee8cc1Swenshuai.xi         // Enable TS0 clock
4644*53ee8cc1Swenshuai.xi         s32ClkHandle = Drv_Clkm_Get_Handle("g_clk_ts1");
4645*53ee8cc1Swenshuai.xi         Drv_Clkm_Set_Clk_Source(s32ClkHandle , "CLK_TS1_PAD0");
4646*53ee8cc1Swenshuai.xi 
4647*53ee8cc1Swenshuai.xi         // Enable TS1 clock
4648*53ee8cc1Swenshuai.xi         s32ClkHandle = Drv_Clkm_Get_Handle("g_clk_ts2");
4649*53ee8cc1Swenshuai.xi         Drv_Clkm_Set_Clk_Source(s32ClkHandle , "CLK_TS2_PAD0");
4650*53ee8cc1Swenshuai.xi 
4651*53ee8cc1Swenshuai.xi         // Enable TS2 clock
4652*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TS2_TSGP),
4653*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TS2_TSGP)), (CLK_TS2_DISABLE|CLK_TS2_INVERT|CLK_TS2_CLK_MASK)));
4654*53ee8cc1Swenshuai.xi 
4655*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG2_TSP_TS_SAMPLE),
4656*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG2_TSP_TS_SAMPLE)), (CKG2_TSP_TS_SAMPLE_DISABLE|CKG2_TSP_TS_SAMPLE_INVERT|CKG2_TSP_TS_SAMPLE_CLK_MASK)));
4657*53ee8cc1Swenshuai.xi 
4658*53ee8cc1Swenshuai.xi         // Enable TSFI clock
4659*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG2_TSP_TSFI),
4660*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG2_TSP_TSFI)), (CKG2_TSP_TSFI_DISABKE|CKG2_TSP_TSFI_INVERT|CKG2_TSP_TSFI_CLK_MASK)));
4661*53ee8cc1Swenshuai.xi 
4662*53ee8cc1Swenshuai.xi         // Enable TS4 clock, s2p0 clock
4663*53ee8cc1Swenshuai.xi         s32ClkHandle = Drv_Clkm_Get_Handle("g_clk_ts4");
4664*53ee8cc1Swenshuai.xi         Drv_Clkm_Set_Clk_Source(s32ClkHandle , "CLK_TS4_PAD0");
4665*53ee8cc1Swenshuai.xi 
4666*53ee8cc1Swenshuai.xi         //Enable TS5 clock, s2p1 clock
4667*53ee8cc1Swenshuai.xi         s32ClkHandle = Drv_Clkm_Get_Handle("g_clk_ts5");
4668*53ee8cc1Swenshuai.xi         Drv_Clkm_Set_Clk_Source(s32ClkHandle , "CLK_TS5_PAD0");
4669*53ee8cc1Swenshuai.xi 
4670*53ee8cc1Swenshuai.xi         // Set SYN_STC to be 432MHz
4671*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TSP_STAMP),
4672*53ee8cc1Swenshuai.xi             ( _HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TSP_STAMP)) & ~CLK_SYN_STC0_MASK)| CLK_SYN_STC0_432M);
4673*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TSP_STAMP),
4674*53ee8cc1Swenshuai.xi             ( _HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TSP_STAMP)) & ~CLK_SYN_STC1_MASK)| CLK_SYN_STC1_432M);
4675*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TSP_STC1),
4676*53ee8cc1Swenshuai.xi             ( _HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TSP_STC1)) & ~CLK_SYN_STC2_MASK) | CLK_SYN_STC2_432M);
4677*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TSP_STC1),
4678*53ee8cc1Swenshuai.xi             ( _HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TSP_STC1)) & ~CLK_SYN_STC3_MASK) | CLK_SYN_STC3_432M);
4679*53ee8cc1Swenshuai.xi 
4680*53ee8cc1Swenshuai.xi         // Enable STC0 clock
4681*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TSP_STC0),
4682*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TSP_STC0)), (CLK_STC_DISABLE|CLK_STC_INVERT|CLK_STC_CLK_MASK)));
4683*53ee8cc1Swenshuai.xi 
4684*53ee8cc1Swenshuai.xi         // Enable STC1 clock
4685*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TSP_STC1),
4686*53ee8cc1Swenshuai.xi                 (_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TSP_STC1)) & ~(CLK_STC1_DISABLE|CLK_STC1_INVERT|CLK_STC1_CLK_MASK)) | CLK_STC1_SYN_STC1);
4687*53ee8cc1Swenshuai.xi 
4688*53ee8cc1Swenshuai.xi         // Enable TIMESTAMP clock
4689*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TSP_STAMP),
4690*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TSP_STAMP)), (CLK_STAM_DISABLE|CLK_STAM_INVERT|CLK_STAM_CLK_MASK)));
4691*53ee8cc1Swenshuai.xi 
4692*53ee8cc1Swenshuai.xi         // Enable Sample & MMT clock
4693*53ee8cc1Swenshuai.xi         s32ClkHandle = Drv_Clkm_Get_Handle("g_clk_ts_mmt");
4694*53ee8cc1Swenshuai.xi         Drv_Clkm_Set_Clk_Source(s32ClkHandle , "CLK_TSMMT_PAD0");
4695*53ee8cc1Swenshuai.xi 
4696*53ee8cc1Swenshuai.xi         // Enable STC_TSIF0 & STC_MM0 clock
4697*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TSP_STC_TSIF0_MM0),
4698*53ee8cc1Swenshuai.xi                 (_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TSP_STC_TSIF0_MM0)) & ~(CLK_STC_TSIF0_DISABLE|CLK_STC_TSIF0_INVERT|CLK_STC_TSIF0_MASK))|CLK_STC_TSIF0_27M);
4699*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TSP_STC_TSIF0_MM0),
4700*53ee8cc1Swenshuai.xi                 (_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TSP_STC_TSIF0_MM0)) & ~(CLK_STC_MM0_DISABLE|CLK_STC_MM0_INVERT|CLK_STC_MM0_MASK))|CLK_STC_MM0_27M);
4701*53ee8cc1Swenshuai.xi 
4702*53ee8cc1Swenshuai.xi         // Enable STC_MM1 & STC_PVR1 clock
4703*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TSP_STC_MM1_PVR1),
4704*53ee8cc1Swenshuai.xi                 (_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TSP_STC_MM1_PVR1)) & ~(CLK_STC_MM1_DISABLE|CLK_STC_MM1_INVERT|CLK_STC_MM1_MASK))|CLK_STC_MM1_27M);
4705*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TSP_STC_MM1_PVR1),
4706*53ee8cc1Swenshuai.xi                 (_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TSP_STC_MM1_PVR1)) & ~(CLK_STC_PVR1_DISABLE|CLK_STC_PVR1_INVERT|CLK_STC_PVR1_MASK))|CLK_STC_PVR1_27M);
4707*53ee8cc1Swenshuai.xi 
4708*53ee8cc1Swenshuai.xi         // Enable STC_PVR2 & STC_FIQ0 clock
4709*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TSP_STC_PVR2_FIQ0),
4710*53ee8cc1Swenshuai.xi                 (_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TSP_STC_PVR2_FIQ0)) & ~(CLK_STC_PVR2_DISABLE|CLK_STC_PVR2_INVERT|CLK_STC_PVR2_MASK))|CLK_STC_PVR2_27M);
4711*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TSP_STC_PVR2_FIQ0),
4712*53ee8cc1Swenshuai.xi                 (_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TSP_STC_PVR2_FIQ0)) & ~(CLK_STC_FIQ0_DISABLE|CLK_STC_FIQ0_INVERT|CLK_STC_FIQ0_MASK))|CLK_STC_FIQ0_27M);
4713*53ee8cc1Swenshuai.xi     }
4714*53ee8cc1Swenshuai.xi     else
4715*53ee8cc1Swenshuai.xi     {
4716*53ee8cc1Swenshuai.xi         // Disable TSP clock
4717*53ee8cc1Swenshuai.xi         s32ClkHandle = Drv_Clkm_Get_Handle("g_clk_tsp");
4718*53ee8cc1Swenshuai.xi         Drv_Clkm_Clk_Gate_Disable(s32ClkHandle);
4719*53ee8cc1Swenshuai.xi 
4720*53ee8cc1Swenshuai.xi         // Disable TS0 clock
4721*53ee8cc1Swenshuai.xi         s32ClkHandle = Drv_Clkm_Get_Handle("g_clk_ts1");
4722*53ee8cc1Swenshuai.xi         Drv_Clkm_Clk_Gate_Disable(s32ClkHandle);
4723*53ee8cc1Swenshuai.xi 
4724*53ee8cc1Swenshuai.xi         // Disable TS1 clock
4725*53ee8cc1Swenshuai.xi         s32ClkHandle = Drv_Clkm_Get_Handle("g_clk_ts2");
4726*53ee8cc1Swenshuai.xi         Drv_Clkm_Clk_Gate_Disable(s32ClkHandle);
4727*53ee8cc1Swenshuai.xi 
4728*53ee8cc1Swenshuai.xi         // Disable TS2 clock
4729*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TS2_TSGP), SET_FLAG1(_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TS2_TSGP)), CLK_TS2_DISABLE));
4730*53ee8cc1Swenshuai.xi 
4731*53ee8cc1Swenshuai.xi         // Disable TSFI clock
4732*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG2_TSP_TSFI), SET_FLAG1(_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG2_TSP_TSFI)), CKG2_TSP_TSFI_DISABKE));
4733*53ee8cc1Swenshuai.xi 
4734*53ee8cc1Swenshuai.xi         // Disable TS4 clock
4735*53ee8cc1Swenshuai.xi         s32ClkHandle = Drv_Clkm_Get_Handle("g_clk_ts4");
4736*53ee8cc1Swenshuai.xi         Drv_Clkm_Clk_Gate_Disable(s32ClkHandle);
4737*53ee8cc1Swenshuai.xi 
4738*53ee8cc1Swenshuai.xi         // Disable TS5 clock
4739*53ee8cc1Swenshuai.xi         s32ClkHandle = Drv_Clkm_Get_Handle("g_clk_ts5");
4740*53ee8cc1Swenshuai.xi         Drv_Clkm_Clk_Gate_Disable(s32ClkHandle);
4741*53ee8cc1Swenshuai.xi 
4742*53ee8cc1Swenshuai.xi         // Disable STC clock
4743*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TSP_STC0), SET_FLAG1(_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TSP_STC0)), CLK_STC_DISABLE));
4744*53ee8cc1Swenshuai.xi 
4745*53ee8cc1Swenshuai.xi         // Disable STC1 clock
4746*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TSP_STC1), SET_FLAG1(_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TSP_STC1)), CLK_STC1_DISABLE));
4747*53ee8cc1Swenshuai.xi 
4748*53ee8cc1Swenshuai.xi         // Disable CLK_PARSER clock
4749*53ee8cc1Swenshuai.xi         s32ClkHandle = Drv_Clkm_Get_Handle("g_clk_parser");
4750*53ee8cc1Swenshuai.xi         Drv_Clkm_Clk_Gate_Disable(s32ClkHandle);
4751*53ee8cc1Swenshuai.xi 
4752*53ee8cc1Swenshuai.xi         // Disable TIMESTAMP clock
4753*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TSP_STAMP), SET_FLAG1(_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TSP_STAMP)), CLK_STAM_DISABLE));
4754*53ee8cc1Swenshuai.xi 
4755*53ee8cc1Swenshuai.xi         // Disable Sample & MMT clock
4756*53ee8cc1Swenshuai.xi         s32ClkHandle = Drv_Clkm_Get_Handle("g_clk_ts_mmt");
4757*53ee8cc1Swenshuai.xi         Drv_Clkm_Clk_Gate_Disable(s32ClkHandle);
4758*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG2_TSP_TS_SAMPLE), SET_FLAG1(_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG2_TSP_TS_SAMPLE)), CKG2_TSP_TS_SAMPLE_DISABLE));
4759*53ee8cc1Swenshuai.xi 
4760*53ee8cc1Swenshuai.xi         // Disable STC_TSIF0 & STC_MM0 clock
4761*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TSP_STC_TSIF0_MM0),
4762*53ee8cc1Swenshuai.xi             SET_FLAG1(_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TSP_STC_TSIF0_MM0)), (CLK_STC_TSIF0_DISABLE|CLK_STC_MM0_DISABLE)));
4763*53ee8cc1Swenshuai.xi 
4764*53ee8cc1Swenshuai.xi         // Disable STC_MM1 & STC_PVR1 clock
4765*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TSP_STC_MM1_PVR1),
4766*53ee8cc1Swenshuai.xi             SET_FLAG1(_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TSP_STC_MM1_PVR1)), (CLK_STC_MM1_DISABLE|CLK_STC_PVR1_DISABLE)));
4767*53ee8cc1Swenshuai.xi 
4768*53ee8cc1Swenshuai.xi         // Disable STC_PVR2 & STC_FIQ0 clock
4769*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TSP_STC_PVR2_FIQ0),
4770*53ee8cc1Swenshuai.xi             SET_FLAG1(_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TSP_STC_PVR2_FIQ0)), (CLK_STC_PVR2_DISABLE|CLK_STC_FIQ0_DISABLE)));
4771*53ee8cc1Swenshuai.xi 
4772*53ee8cc1Swenshuai.xi         //Reset PE Pad
4773*53ee8cc1Swenshuai.xi         if(_bTsPadUsed[0] == TRUE)
4774*53ee8cc1Swenshuai.xi         {
4775*53ee8cc1Swenshuai.xi             TSP_TOP_REG(REG_TOP_TS0_PE) = (TSP_TOP_REG(REG_TOP_TS0_PE) & ~REG_TOP_TS0_PE_MASK) | _u16TsPadPE[0];
4776*53ee8cc1Swenshuai.xi             _bTsPadUsed[0] = FALSE;
4777*53ee8cc1Swenshuai.xi         }
4778*53ee8cc1Swenshuai.xi         if(_bTsPadUsed[1] == TRUE)
4779*53ee8cc1Swenshuai.xi         {
4780*53ee8cc1Swenshuai.xi             TSP_TOP_REG(REG_TOP_TS1_PE) = (TSP_TOP_REG(REG_TOP_TS1_PE) & ~REG_TOP_TS1_PE_MASK) | _u16TsPadPE[1];
4781*53ee8cc1Swenshuai.xi             _bTsPadUsed[1] = FALSE;
4782*53ee8cc1Swenshuai.xi         }
4783*53ee8cc1Swenshuai.xi         if(_bTsPadUsed[2] == TRUE)
4784*53ee8cc1Swenshuai.xi         {
4785*53ee8cc1Swenshuai.xi             TSP_TOP_REG(REG_TOP_TS2_PE) = (TSP_TOP_REG(REG_TOP_TS2_PE) & ~REG_TOP_TS2_PE_MASK) | _u16TsPadPE[2];
4786*53ee8cc1Swenshuai.xi             _bTsPadUsed[2] = FALSE;
4787*53ee8cc1Swenshuai.xi         }
4788*53ee8cc1Swenshuai.xi         if(_bTsPadUsed[3] == TRUE)
4789*53ee8cc1Swenshuai.xi         {
4790*53ee8cc1Swenshuai.xi             TSP_TOP_REG(REG_TOP_TS3_PE) = (TSP_TOP_REG(REG_TOP_TS3_PE) & ~REG_TOP_TS3_PE_MASK) | _u16TsPadPE[3];
4791*53ee8cc1Swenshuai.xi             _bTsPadUsed[3] = FALSE;
4792*53ee8cc1Swenshuai.xi         }
4793*53ee8cc1Swenshuai.xi 
4794*53ee8cc1Swenshuai.xi         // Turn on MCM
4795*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&_TspCtrl5[0].Miu_MCM_Cfg,_HAL_REG16_R(&_TspCtrl5[0].Miu_MCM_Cfg) & ~MCM_TURN_OFF_ALL);
4796*53ee8cc1Swenshuai.xi     }
4797*53ee8cc1Swenshuai.xi }
4798*53ee8cc1Swenshuai.xi 
4799*53ee8cc1Swenshuai.xi #else
HAL_TSP_PowerCtrl(MS_BOOL bOn)4800*53ee8cc1Swenshuai.xi void HAL_TSP_PowerCtrl(MS_BOOL bOn)
4801*53ee8cc1Swenshuai.xi {
4802*53ee8cc1Swenshuai.xi     if (bOn)
4803*53ee8cc1Swenshuai.xi     {
4804*53ee8cc1Swenshuai.xi         // Turn off MCM
4805*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&_TspCtrl5[0].Miu_MCM_Cfg,_HAL_REG16_R(&_TspCtrl5[0].Miu_MCM_Cfg) | MCM_TURN_OFF_ALL);
4806*53ee8cc1Swenshuai.xi 
4807*53ee8cc1Swenshuai.xi         //Set PE Pad
4808*53ee8cc1Swenshuai.xi         //TSP_TOP_REG(REG_TOP_TS0_PE) |= REG_TOP_TS0_PE_MASK;
4809*53ee8cc1Swenshuai.xi         //TSP_TOP_REG(REG_TOP_TS1_PE) |= REG_TOP_TS1_PE_MASK;
4810*53ee8cc1Swenshuai.xi 
4811*53ee8cc1Swenshuai.xi         // Enable TSP Clock
4812*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TSP_STC0),
4813*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TSP_STC0)), (CLK_TSP_DISABLE|CLK_TSP_INVERT|CLK_TSP_CLK_MASK)));
4814*53ee8cc1Swenshuai.xi 
4815*53ee8cc1Swenshuai.xi         //TSP select SRAM
4816*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CHIP_TSP_BOOT_CLK_SEL), RESET_FLAG1(_HAL_REG32L_R((REG32_L *)(_virtRegBase+CHIP_TSP_BOOT_CLK_SEL)), CHIP_TSP_BOOT_CLK_SEL_MASK));
4817*53ee8cc1Swenshuai.xi 
4818*53ee8cc1Swenshuai.xi         //Select SRAM
4819*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&(_TspCtrl2[0].Qmem_Dbg), SET_FLAG1(_HAL_REG16_R(&(_TspCtrl2[0].Qmem_Dbg)), QMEM_DBG_TSP_SEL_SRAM));
4820*53ee8cc1Swenshuai.xi 
4821*53ee8cc1Swenshuai.xi         // Enable CLK_PARSER clock
4822*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TSP_STC0),
4823*53ee8cc1Swenshuai.xi                 (_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TSP_STC0)) & ~(CLK_PAR_DISABLE|CLK_PAR_INVERT|CLK_PAR_CLK_MASK)) | CLK_PAR_CLK_192M); //parser clock 192M
4824*53ee8cc1Swenshuai.xi 
4825*53ee8cc1Swenshuai.xi         // Enable TS0 clock
4826*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TS0_TS1),
4827*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TS0_TS1)), (CLK_TS0_DISABLE|CLK_TS0_INVERT|CLK_TS0_CLK_MASK)));
4828*53ee8cc1Swenshuai.xi 
4829*53ee8cc1Swenshuai.xi         // Enable TS1 clock
4830*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TS0_TS1),
4831*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TS0_TS1)), (CLK_TS1_DISABLE|CLK_TS1_INVERT|CLK_TS1_CLK_MASK)));
4832*53ee8cc1Swenshuai.xi 
4833*53ee8cc1Swenshuai.xi         // Enable TS2 clock
4834*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TS2_TSGP),
4835*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TS2_TSGP)), (CLK_TS2_DISABLE|CLK_TS2_INVERT|CLK_TS2_CLK_MASK)));
4836*53ee8cc1Swenshuai.xi 
4837*53ee8cc1Swenshuai.xi         // Enable TSFI clock
4838*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG2_TSP_TSFI),
4839*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG2_TSP_TSFI)), (CKG2_TSP_TSFI_DISABKE|CKG2_TSP_TSFI_INVERT|CKG2_TSP_TSFI_CLK_MASK)));
4840*53ee8cc1Swenshuai.xi 
4841*53ee8cc1Swenshuai.xi         // Enable TS4 clock, s2p0 clock
4842*53ee8cc1Swenshuai.xi         //_HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG2_TS4_TS5),
4843*53ee8cc1Swenshuai.xi         //    RESET_FLAG1(_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG2_TS4_TS5)), (CKG2_TS4_DISABLE|CKG2_TS4_INVERT|CKG2_TS4_MASK)));
4844*53ee8cc1Swenshuai.xi 
4845*53ee8cc1Swenshuai.xi         //Enable TS5 clock, s2p1 clock
4846*53ee8cc1Swenshuai.xi         //_HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG2_TS4_TS5),
4847*53ee8cc1Swenshuai.xi         //    RESET_FLAG1(_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG2_TS4_TS5)), (CKG2_TS5_DISABLE|CKG2_TS5_INVERT|CKG2_TS5_MASK)));
4848*53ee8cc1Swenshuai.xi 
4849*53ee8cc1Swenshuai.xi         // Set SYN_STC to be 432MHz
4850*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TSP_STAMP),
4851*53ee8cc1Swenshuai.xi             ( _HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TSP_STAMP)) & ~CLK_SYN_STC0_MASK) | CLK_SYN_STC0_432M);
4852*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TSP_STAMP),
4853*53ee8cc1Swenshuai.xi             ( _HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TSP_STAMP)) & ~CLK_SYN_STC1_MASK) | CLK_SYN_STC1_432M);
4854*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TSP_STC1),
4855*53ee8cc1Swenshuai.xi             ( _HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TSP_STC1)) & ~CLK_SYN_STC2_MASK) | CLK_SYN_STC2_432M);
4856*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TSP_STC1),
4857*53ee8cc1Swenshuai.xi             ( _HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TSP_STC1)) & ~CLK_SYN_STC3_MASK) | CLK_SYN_STC3_432M);
4858*53ee8cc1Swenshuai.xi 
4859*53ee8cc1Swenshuai.xi         // Enable STC0 clock
4860*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TSP_STC0),
4861*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TSP_STC0)), (CLK_STC_DISABLE|CLK_STC_INVERT|CLK_STC_CLK_MASK)));
4862*53ee8cc1Swenshuai.xi 
4863*53ee8cc1Swenshuai.xi         // Enable STC1 clock
4864*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TSP_STC1),
4865*53ee8cc1Swenshuai.xi                 (_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TSP_STC1)) & ~(CLK_STC1_DISABLE|CLK_STC1_INVERT|CLK_STC1_CLK_MASK)) | CLK_STC1_SYN_STC1);
4866*53ee8cc1Swenshuai.xi 
4867*53ee8cc1Swenshuai.xi         // Enable TIMESTAMP clock
4868*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TSP_STAMP),
4869*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TSP_STAMP)), (CLK_STAM_DISABLE|CLK_STAM_INVERT|CLK_STAM_CLK_MASK)));
4870*53ee8cc1Swenshuai.xi 
4871*53ee8cc1Swenshuai.xi         // Enable Sample & MMT clock
4872*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG2_TSP_TS_SAMPLE),
4873*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG2_TSP_TS_SAMPLE)),
4874*53ee8cc1Swenshuai.xi             (CKG2_TSP_TS_SAMPLE_DISABLE|CKG2_TSP_TS_SAMPLE_INVERT|CKG2_TSP_TS_SAMPLE_CLK_MASK|CKG2_TSP_TS_MMT_DISABLE|CKG2_TSP_TS_MMT_INVERT|CKG2_TSP_TS_MMT_MASK)));
4875*53ee8cc1Swenshuai.xi 
4876*53ee8cc1Swenshuai.xi         // Enable STC_TSIF0 & STC_MM0 clock
4877*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TSP_STC_TSIF0_MM0),
4878*53ee8cc1Swenshuai.xi                 (_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TSP_STC_TSIF0_MM0)) & ~(CLK_STC_TSIF0_DISABLE|CLK_STC_TSIF0_INVERT|CLK_STC_TSIF0_MASK))|CLK_STC_TSIF0_27M);
4879*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TSP_STC_TSIF0_MM0),
4880*53ee8cc1Swenshuai.xi                 (_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TSP_STC_TSIF0_MM0)) & ~(CLK_STC_MM0_DISABLE|CLK_STC_MM0_INVERT|CLK_STC_MM0_MASK))|CLK_STC_MM0_27M);
4881*53ee8cc1Swenshuai.xi 
4882*53ee8cc1Swenshuai.xi         // Enable STC_MM1 & STC_PVR1 clock
4883*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TSP_STC_MM1_PVR1),
4884*53ee8cc1Swenshuai.xi                 (_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TSP_STC_MM1_PVR1)) & ~(CLK_STC_MM1_DISABLE|CLK_STC_MM1_INVERT|CLK_STC_MM1_MASK))|CLK_STC_MM1_27M);
4885*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TSP_STC_MM1_PVR1),
4886*53ee8cc1Swenshuai.xi                 (_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TSP_STC_MM1_PVR1)) & ~(CLK_STC_PVR1_DISABLE|CLK_STC_PVR1_INVERT|CLK_STC_PVR1_MASK))|CLK_STC_PVR1_27M);
4887*53ee8cc1Swenshuai.xi 
4888*53ee8cc1Swenshuai.xi         // Enable STC_PVR2 & STC_FIQ0 clock
4889*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TSP_STC_PVR2_FIQ0),
4890*53ee8cc1Swenshuai.xi                 (_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TSP_STC_PVR2_FIQ0)) & ~(CLK_STC_PVR2_DISABLE|CLK_STC_PVR2_INVERT|CLK_STC_PVR2_MASK))|CLK_STC_PVR2_27M);
4891*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TSP_STC_PVR2_FIQ0),
4892*53ee8cc1Swenshuai.xi                 (_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TSP_STC_PVR2_FIQ0)) & ~(CLK_STC_FIQ0_DISABLE|CLK_STC_FIQ0_INVERT|CLK_STC_FIQ0_MASK))|CLK_STC_FIQ0_27M);
4893*53ee8cc1Swenshuai.xi 
4894*53ee8cc1Swenshuai.xi     }
4895*53ee8cc1Swenshuai.xi     else
4896*53ee8cc1Swenshuai.xi     {
4897*53ee8cc1Swenshuai.xi         // Disable TSP clock
4898*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TSP_STC0), SET_FLAG1(_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TSP_STC0)), CLK_TSP_DISABLE));
4899*53ee8cc1Swenshuai.xi 
4900*53ee8cc1Swenshuai.xi         // Disable TS0 clock
4901*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TS0_TS1), SET_FLAG1(_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TS0_TS1)), CLK_TS0_DISABLE));
4902*53ee8cc1Swenshuai.xi 
4903*53ee8cc1Swenshuai.xi         // Disable TS1 clock
4904*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TS0_TS1), SET_FLAG1(_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TS0_TS1)), CLK_TS1_DISABLE));
4905*53ee8cc1Swenshuai.xi 
4906*53ee8cc1Swenshuai.xi         // Disable TS2 clock
4907*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TS2_TSGP), SET_FLAG1(_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TS2_TSGP)), CLK_TS2_DISABLE));
4908*53ee8cc1Swenshuai.xi 
4909*53ee8cc1Swenshuai.xi         // Disable TSFI clock
4910*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG2_TSP_TSFI), SET_FLAG1(_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG2_TSP_TSFI)), CKG2_TSP_TSFI_DISABKE));
4911*53ee8cc1Swenshuai.xi 
4912*53ee8cc1Swenshuai.xi         // Disable TS4 clock
4913*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG2_TS4_TS5), SET_FLAG1(_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG2_TS4_TS5)), CKG2_TS4_DISABLE));
4914*53ee8cc1Swenshuai.xi 
4915*53ee8cc1Swenshuai.xi         // Disable TS5 clock
4916*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG2_TS4_TS5), SET_FLAG1(_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG2_TS4_TS5)), CKG2_TS5_DISABLE));
4917*53ee8cc1Swenshuai.xi 
4918*53ee8cc1Swenshuai.xi         // Disable STC clock
4919*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TSP_STC0), SET_FLAG1(_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TSP_STC0)), CLK_STC_DISABLE));
4920*53ee8cc1Swenshuai.xi 
4921*53ee8cc1Swenshuai.xi         // Disable STC1 clock
4922*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TSP_STC1), SET_FLAG1(_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TSP_STC1)), CLK_STC1_DISABLE));
4923*53ee8cc1Swenshuai.xi 
4924*53ee8cc1Swenshuai.xi         // Disable CLK_PARSER clock
4925*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TSP_STC0), SET_FLAG1(_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TSP_STC0)), CLK_PAR_DISABLE));
4926*53ee8cc1Swenshuai.xi 
4927*53ee8cc1Swenshuai.xi         // Disable TIMESTAMP clock
4928*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TSP_STAMP), SET_FLAG1(_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TSP_STAMP)), CLK_STAM_DISABLE));
4929*53ee8cc1Swenshuai.xi 
4930*53ee8cc1Swenshuai.xi         // Disable Sample & MMT clock
4931*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG2_TSP_TS_SAMPLE), SET_FLAG1(_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG2_TSP_TS_SAMPLE)), (CKG2_TSP_TS_SAMPLE_DISABLE|CKG2_TSP_TS_MMT_DISABLE)));
4932*53ee8cc1Swenshuai.xi 
4933*53ee8cc1Swenshuai.xi         // Disable STC_TSIF0 & STC_MM0 clock
4934*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TSP_STC_TSIF0_MM0),
4935*53ee8cc1Swenshuai.xi             SET_FLAG1(_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TSP_STC_TSIF0_MM0)), (CLK_STC_TSIF0_DISABLE|CLK_STC_MM0_DISABLE)));
4936*53ee8cc1Swenshuai.xi 
4937*53ee8cc1Swenshuai.xi         // Disable STC_MM1 & STC_PVR1 clock
4938*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TSP_STC_MM1_PVR1),
4939*53ee8cc1Swenshuai.xi             SET_FLAG1(_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TSP_STC_MM1_PVR1)), (CLK_STC_MM1_DISABLE|CLK_STC_PVR1_DISABLE)));
4940*53ee8cc1Swenshuai.xi 
4941*53ee8cc1Swenshuai.xi         // Disable STC_PVR2 & STC_FIQ0 clock
4942*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TSP_STC_PVR2_FIQ0),
4943*53ee8cc1Swenshuai.xi             SET_FLAG1(_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TSP_STC_PVR2_FIQ0)), (CLK_STC_PVR2_DISABLE|CLK_STC_FIQ0_DISABLE)));
4944*53ee8cc1Swenshuai.xi 
4945*53ee8cc1Swenshuai.xi         // Turn on MCM
4946*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&_TspCtrl5[0].Miu_MCM_Cfg,_HAL_REG16_R(&_TspCtrl5[0].Miu_MCM_Cfg) & ~MCM_TURN_OFF_ALL);
4947*53ee8cc1Swenshuai.xi 
4948*53ee8cc1Swenshuai.xi         //Reset PE Pad
4949*53ee8cc1Swenshuai.xi         if(_bTsPadUsed[0] == TRUE)
4950*53ee8cc1Swenshuai.xi         {
4951*53ee8cc1Swenshuai.xi             TSP_TOP_REG(REG_TOP_TS0_PE) = (TSP_TOP_REG(REG_TOP_TS0_PE) & ~REG_TOP_TS0_PE_MASK) | _u16TsPadPE[0];
4952*53ee8cc1Swenshuai.xi             _bTsPadUsed[0] = FALSE;
4953*53ee8cc1Swenshuai.xi         }
4954*53ee8cc1Swenshuai.xi         if(_bTsPadUsed[1] == TRUE)
4955*53ee8cc1Swenshuai.xi         {
4956*53ee8cc1Swenshuai.xi             TSP_TOP_REG(REG_TOP_TS1_PE) = (TSP_TOP_REG(REG_TOP_TS1_PE) & ~REG_TOP_TS1_PE_MASK) | _u16TsPadPE[1];
4957*53ee8cc1Swenshuai.xi             _bTsPadUsed[1] = FALSE;
4958*53ee8cc1Swenshuai.xi         }
4959*53ee8cc1Swenshuai.xi         if(_bTsPadUsed[2] == TRUE)
4960*53ee8cc1Swenshuai.xi         {
4961*53ee8cc1Swenshuai.xi             TSP_TOP_REG(REG_TOP_TS2_PE) = (TSP_TOP_REG(REG_TOP_TS2_PE) & ~REG_TOP_TS2_PE_MASK) | _u16TsPadPE[2];
4962*53ee8cc1Swenshuai.xi             _bTsPadUsed[2] = FALSE;
4963*53ee8cc1Swenshuai.xi         }
4964*53ee8cc1Swenshuai.xi         if(_bTsPadUsed[3] == TRUE)
4965*53ee8cc1Swenshuai.xi         {
4966*53ee8cc1Swenshuai.xi             TSP_TOP_REG(REG_TOP_TS3_PE) = (TSP_TOP_REG(REG_TOP_TS3_PE) & ~REG_TOP_TS3_PE_MASK) | _u16TsPadPE[3];
4967*53ee8cc1Swenshuai.xi             _bTsPadUsed[3] = FALSE;
4968*53ee8cc1Swenshuai.xi         }
4969*53ee8cc1Swenshuai.xi     }
4970*53ee8cc1Swenshuai.xi }
4971*53ee8cc1Swenshuai.xi #endif  //CONFIG_MSTAR_CLKM
4972*53ee8cc1Swenshuai.xi 
4973*53ee8cc1Swenshuai.xi #undef CKG_TSO_SRC
4974*53ee8cc1Swenshuai.xi     #undef CKG_TSO_TRACE_DISABLE
4975*53ee8cc1Swenshuai.xi     #undef CKG_TSO_TRACE_INVERT
4976*53ee8cc1Swenshuai.xi     #undef CKG_TSO_TRACE_CLK_MASK
4977*53ee8cc1Swenshuai.xi     #undef CKG_TSO0_IN_DIABLE
4978*53ee8cc1Swenshuai.xi     #undef CKG_TSO0_IN_INVERT
4979*53ee8cc1Swenshuai.xi     #undef CKG_TSO0_IN_CLK_MASK
4980*53ee8cc1Swenshuai.xi #undef CKG_TS0_TS1
4981*53ee8cc1Swenshuai.xi     #undef CLK_TS0_DISABLE
4982*53ee8cc1Swenshuai.xi     #undef CLK_TS0_INVERT
4983*53ee8cc1Swenshuai.xi     #undef CLK_TS0_CLK_MASK
4984*53ee8cc1Swenshuai.xi     #undef CLK_TS1_DISABLE
4985*53ee8cc1Swenshuai.xi     #undef CLK_TS1_INVERT
4986*53ee8cc1Swenshuai.xi     #undef CLK_TS1_CLK_MASK
4987*53ee8cc1Swenshuai.xi #undef CKG_TS2_TSGP
4988*53ee8cc1Swenshuai.xi     #undef CLK_TS2_DISABLE
4989*53ee8cc1Swenshuai.xi     #undef CLK_TS2_INVERT
4990*53ee8cc1Swenshuai.xi     #undef CLK_TS2_CLK_MASK
4991*53ee8cc1Swenshuai.xi #undef CKG_TSP_STC0
4992*53ee8cc1Swenshuai.xi     #undef CLK_TSP_DISABLE
4993*53ee8cc1Swenshuai.xi     #undef CLK_TSP_INVERT
4994*53ee8cc1Swenshuai.xi     #undef CLK_TSP_CLK_MASK
4995*53ee8cc1Swenshuai.xi     #undef CLK_PAR_DISABLE
4996*53ee8cc1Swenshuai.xi     #undef CLK_PAR_INVERT
4997*53ee8cc1Swenshuai.xi     #undef CLK_PAR_CLK_MASK
4998*53ee8cc1Swenshuai.xi     #undef CLK_PAR_CLK_192M
4999*53ee8cc1Swenshuai.xi     #undef CLK_STC_DISABLE
5000*53ee8cc1Swenshuai.xi     #undef CLK_STC_INVERT
5001*53ee8cc1Swenshuai.xi     #undef CLK_STC_CLK_MASK
5002*53ee8cc1Swenshuai.xi #undef CKG_TSP_STAMP
5003*53ee8cc1Swenshuai.xi     #undef CLK_SYN_STC0_MASK
5004*53ee8cc1Swenshuai.xi     #undef CLK_SYN_STC0_432M
5005*53ee8cc1Swenshuai.xi     #undef CLK_SYN_STC1_MASK
5006*53ee8cc1Swenshuai.xi     #undef CLK_SYN_STC1_432M
5007*53ee8cc1Swenshuai.xi     #undef CLK_STAM_DISABLE
5008*53ee8cc1Swenshuai.xi     #undef CLK_STAM_INVERT
5009*53ee8cc1Swenshuai.xi     #undef CLK_STAM_CLK_MASK
5010*53ee8cc1Swenshuai.xi #undef CKG_TSP_STC1
5011*53ee8cc1Swenshuai.xi     #undef CLK_STC1_DISABLE
5012*53ee8cc1Swenshuai.xi     #undef CLK_STC1_INVERT
5013*53ee8cc1Swenshuai.xi     #undef CLK_STC1_SYN_STC1
5014*53ee8cc1Swenshuai.xi     #undef CLK_STC1_CLK_MASK
5015*53ee8cc1Swenshuai.xi     #undef CLK_SYN_STC2_MASK
5016*53ee8cc1Swenshuai.xi     #undef CLK_SYN_STC2_432M
5017*53ee8cc1Swenshuai.xi     #undef CLK_SYN_STC3_MASK
5018*53ee8cc1Swenshuai.xi     #undef CLK_SYN_STC3_432M
5019*53ee8cc1Swenshuai.xi #undef CKG_TSP_STC_TSIF0_MM0
5020*53ee8cc1Swenshuai.xi     #undef CLK_STC_TSIF0_DISABLE
5021*53ee8cc1Swenshuai.xi     #undef CLK_STC_TSIF0_INVERT
5022*53ee8cc1Swenshuai.xi     #undef CLK_STC_TSIF0_MASK
5023*53ee8cc1Swenshuai.xi     #undef CLK_STC_TSIF0_27M
5024*53ee8cc1Swenshuai.xi     #undef CLK_STC_MM0_DISABLE
5025*53ee8cc1Swenshuai.xi     #undef CLK_STC_MM0_INVERT
5026*53ee8cc1Swenshuai.xi     #undef CLK_STC_MM0_MASK
5027*53ee8cc1Swenshuai.xi     #undef CLK_STC_MM0_27M
5028*53ee8cc1Swenshuai.xi #undef CKG_TSP_STC_MM1_PVR1
5029*53ee8cc1Swenshuai.xi     #undef CLK_STC_MM1_DISABLE
5030*53ee8cc1Swenshuai.xi     #undef CLK_STC_MM1_INVERT
5031*53ee8cc1Swenshuai.xi     #undef CLK_STC_MM1_MASK
5032*53ee8cc1Swenshuai.xi     #undef CLK_STC_MM1_27M
5033*53ee8cc1Swenshuai.xi     #undef CLK_STC_PVR1_DISABLE
5034*53ee8cc1Swenshuai.xi     #undef CLK_STC_PVR1_INVERT
5035*53ee8cc1Swenshuai.xi     #undef CLK_STC_PVR1_MASK
5036*53ee8cc1Swenshuai.xi     #undef CLK_STC_PVR1_27M
5037*53ee8cc1Swenshuai.xi #undef CKG_TSP_STC_PVR2_FIQ0
5038*53ee8cc1Swenshuai.xi     #undef CLK_STC_PVR2_DISABLE
5039*53ee8cc1Swenshuai.xi     #undef CLK_STC_PVR2_INVERT
5040*53ee8cc1Swenshuai.xi     #undef CLK_STC_PVR2_MASK
5041*53ee8cc1Swenshuai.xi     #undef CLK_STC_PVR2_27M
5042*53ee8cc1Swenshuai.xi     #undef CLK_STC_FIQ0_DISABLE
5043*53ee8cc1Swenshuai.xi     #undef CLK_STC_FIQ0_INVERT
5044*53ee8cc1Swenshuai.xi     #undef CLK_STC_FIQ0_MASK
5045*53ee8cc1Swenshuai.xi     #undef CLK_STC_FIQ0_27M
5046*53ee8cc1Swenshuai.xi #undef CKG2_TSP_TSFI
5047*53ee8cc1Swenshuai.xi     #undef CKG2_TSP_TSFI_DISABKE
5048*53ee8cc1Swenshuai.xi     #undef CKG2_TSP_TSFI_INVERT
5049*53ee8cc1Swenshuai.xi     #undef CKG2_TSP_TSFI_CLK_MASK
5050*53ee8cc1Swenshuai.xi #undef CKG2_TSO1_IN
5051*53ee8cc1Swenshuai.xi     #undef CKG2_TSO1_IN_DIABLE
5052*53ee8cc1Swenshuai.xi     #undef CKG2_TSO1_IN_INVERT
5053*53ee8cc1Swenshuai.xi     #undef CKG2_TSO1_IN_CLK_MASK
5054*53ee8cc1Swenshuai.xi     #undef CKG2_TSO2_IN_DIABLE
5055*53ee8cc1Swenshuai.xi     #undef CKG2_TSO2_IN_INVERT
5056*53ee8cc1Swenshuai.xi     #undef CKG2_TSO2_IN_CLK_MASK
5057*53ee8cc1Swenshuai.xi #undef CKG2_TS4_TS5
5058*53ee8cc1Swenshuai.xi     #undef CKG2_TS4_DISABLE
5059*53ee8cc1Swenshuai.xi     #undef CKG2_TS4_INVERT
5060*53ee8cc1Swenshuai.xi     #undef CKG2_TS4_MASK
5061*53ee8cc1Swenshuai.xi     #undef CKG2_TS5_DISABLE
5062*53ee8cc1Swenshuai.xi     #undef CKG2_TS5_INVERT
5063*53ee8cc1Swenshuai.xi     #undef CKG2_TS5_MASK
5064*53ee8cc1Swenshuai.xi #undef CKG2_TSP_TS_SAMPLE
5065*53ee8cc1Swenshuai.xi     #undef CKG2_TSP_TS_SAMPLE_DISABLE
5066*53ee8cc1Swenshuai.xi     #undef CKG2_TSP_TS_SAMPLE_INVERT
5067*53ee8cc1Swenshuai.xi     #undef CKG2_TSP_TS_SAMPLE_CLK_MASK
5068*53ee8cc1Swenshuai.xi     #undef CKG2_TSP_TS_MMT_DISABLE
5069*53ee8cc1Swenshuai.xi     #undef CKG2_TSP_TS_MMT_INVERT
5070*53ee8cc1Swenshuai.xi     #undef CKG2_TSP_TS_MMT_MASK
5071*53ee8cc1Swenshuai.xi #undef CHIP_TSP_BOOT_CLK_SEL
5072*53ee8cc1Swenshuai.xi     #undef CHIP_TSP_BOOT_CLK_SEL_MASK
5073*53ee8cc1Swenshuai.xi 
HAL_TSP_GetDBGPortInfo(MS_U32 u32dbgsel)5074*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_GetDBGPortInfo(MS_U32 u32dbgsel)
5075*53ee8cc1Swenshuai.xi {
5076*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].PKT_CNT, (TSP_DBG_SEL_MASK&(u32dbgsel<<TSP_DBG_SEL_SHIFT)));
5077*53ee8cc1Swenshuai.xi     return (_HAL_REG32_R(&_TspCtrl[0].TSP_Debug)&TSP_DEBUG_MASK);
5078*53ee8cc1Swenshuai.xi }
5079*53ee8cc1Swenshuai.xi 
HAL_TSP_Enable_ValidSync_Dectect(void)5080*53ee8cc1Swenshuai.xi void HAL_TSP_Enable_ValidSync_Dectect(void)
5081*53ee8cc1Swenshuai.xi {
5082*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
5083*53ee8cc1Swenshuai.xi         SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_VALID_FALLING_DETECT));
5084*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
5085*53ee8cc1Swenshuai.xi         SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_SYNC_RISING_DETECT));
5086*53ee8cc1Swenshuai.xi }
5087*53ee8cc1Swenshuai.xi 
HAL_Reset_WB(void)5088*53ee8cc1Swenshuai.xi void HAL_Reset_WB(void)
5089*53ee8cc1Swenshuai.xi {
5090*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].Hw_Config0,
5091*53ee8cc1Swenshuai.xi         SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config0), TSP_HW_CFG0_WB_DMA_RESET));
5092*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].Hw_Config0,
5093*53ee8cc1Swenshuai.xi         RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config0), TSP_HW_CFG0_WB_DMA_RESET));
5094*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&_TspCtrl[0].TSP_Ctrl1,
5095*53ee8cc1Swenshuai.xi         SET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].TSP_Ctrl1), TSP_CTRL1_DMA_RST));
5096*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&_TspCtrl[0].TSP_Ctrl1,
5097*53ee8cc1Swenshuai.xi         RESET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].TSP_Ctrl1), TSP_CTRL1_DMA_RST));
5098*53ee8cc1Swenshuai.xi }
5099*53ee8cc1Swenshuai.xi 
5100*53ee8cc1Swenshuai.xi //0: VQ0, 1: VQ_file, 2: VQ1, 3: VQ_2
HAL_TSP_SetVQBuffer(MS_U8 u8VQId,MS_PHY phyBaseAddr,MS_U32 u32BufLen)5101*53ee8cc1Swenshuai.xi void HAL_TSP_SetVQBuffer(MS_U8 u8VQId, MS_PHY phyBaseAddr, MS_U32 u32BufLen)
5102*53ee8cc1Swenshuai.xi {
5103*53ee8cc1Swenshuai.xi     REG32 *pReg = 0;
5104*53ee8cc1Swenshuai.xi     MS_PHY phyVqBufOffset = _HAL_TSP_MIU_OFFSET(phyBaseAddr);
5105*53ee8cc1Swenshuai.xi 
5106*53ee8cc1Swenshuai.xi     switch(u8VQId)
5107*53ee8cc1Swenshuai.xi     {
5108*53ee8cc1Swenshuai.xi         case 0:
5109*53ee8cc1Swenshuai.xi         default:
5110*53ee8cc1Swenshuai.xi             pReg = &(_TspCtrl[0].VQ0_BASE);
5111*53ee8cc1Swenshuai.xi             break;
5112*53ee8cc1Swenshuai.xi         case 1:
5113*53ee8cc1Swenshuai.xi             pReg = &(_TspCtrl[0].VQ1_Base);
5114*53ee8cc1Swenshuai.xi             break;
5115*53ee8cc1Swenshuai.xi         case 2:
5116*53ee8cc1Swenshuai.xi             pReg = &(_TspCtrl[0].VQ2_Base);
5117*53ee8cc1Swenshuai.xi             break;
5118*53ee8cc1Swenshuai.xi         case 3:
5119*53ee8cc1Swenshuai.xi             pReg = &(_TspCtrl[0].VQ3_BASE);
5120*53ee8cc1Swenshuai.xi             break;
5121*53ee8cc1Swenshuai.xi     }
5122*53ee8cc1Swenshuai.xi     _HAL_REG32_W(pReg, (MS_U32)((phyBaseAddr-phyVqBufOffset) >> MIU_BUS));
5123*53ee8cc1Swenshuai.xi 
5124*53ee8cc1Swenshuai.xi     switch(u8VQId)
5125*53ee8cc1Swenshuai.xi     {
5126*53ee8cc1Swenshuai.xi         case 0:
5127*53ee8cc1Swenshuai.xi         default:
5128*53ee8cc1Swenshuai.xi             pReg = &(_TspCtrl[0].VQ0_CTRL);
5129*53ee8cc1Swenshuai.xi             break;
5130*53ee8cc1Swenshuai.xi         case 1:
5131*53ee8cc1Swenshuai.xi             pReg = &(_TspCtrl[0].VQ1_Config);
5132*53ee8cc1Swenshuai.xi             break;
5133*53ee8cc1Swenshuai.xi         case 2:
5134*53ee8cc1Swenshuai.xi             pReg = &(_TspCtrl[0].VQ2_Config);
5135*53ee8cc1Swenshuai.xi             break;
5136*53ee8cc1Swenshuai.xi         case 3:
5137*53ee8cc1Swenshuai.xi             pReg = &(_TspCtrl[0].VQ3_Config);
5138*53ee8cc1Swenshuai.xi             break;
5139*53ee8cc1Swenshuai.xi     }
5140*53ee8cc1Swenshuai.xi 
5141*53ee8cc1Swenshuai.xi     _HAL_REG32_W(pReg, (_HAL_REG32_R(pReg) & ~TSP_VQ0_SIZE_208PK_MASK)
5142*53ee8cc1Swenshuai.xi         | ((u32BufLen/VQ_PACKET_UNIT_LEN) << TSP_VQ0_SIZE_208PK_SHIFT));
5143*53ee8cc1Swenshuai.xi 
5144*53ee8cc1Swenshuai.xi }
5145*53ee8cc1Swenshuai.xi 
HAL_TSP_VQueue_Enable(MS_BOOL bEnable)5146*53ee8cc1Swenshuai.xi void HAL_TSP_VQueue_Enable(MS_BOOL bEnable)
5147*53ee8cc1Swenshuai.xi {
5148*53ee8cc1Swenshuai.xi     if (bEnable)
5149*53ee8cc1Swenshuai.xi     {
5150*53ee8cc1Swenshuai.xi         // Reset VQ before VQ enable.
5151*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].VQ0_CTRL, SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].VQ0_CTRL), TSP_VQ0_RESET));
5152*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].VQ0_CTRL, RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].VQ0_CTRL), TSP_VQ0_RESET));
5153*53ee8cc1Swenshuai.xi 
5154*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].VQ1_Config, SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].VQ1_Config), TSP_VQ1_RESET));
5155*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].VQ1_Config, RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].VQ1_Config), TSP_VQ1_RESET));
5156*53ee8cc1Swenshuai.xi 
5157*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].VQ2_Config, SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].VQ2_Config), TSP_VQ2_RESET));
5158*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].VQ2_Config, RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].VQ2_Config), TSP_VQ2_RESET));
5159*53ee8cc1Swenshuai.xi 
5160*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].VQ3_Config, SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].VQ3_Config), TSP_VQ3_RESET));
5161*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].VQ3_Config, RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].VQ3_Config), TSP_VQ3_RESET));
5162*53ee8cc1Swenshuai.xi 
5163*53ee8cc1Swenshuai.xi         //_HAL_REG32_W(&_TspCtrl[0].reg163C,
5164*53ee8cc1Swenshuai.xi         //  SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg163C), TSP_ALL_VALID_EN));
5165*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].HW2_Config3,
5166*53ee8cc1Swenshuai.xi           SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].HW2_Config3), (TSP_VQ_EN/*|TSP_VQ2PINGPONG_EN*/)));
5167*53ee8cc1Swenshuai.xi     }
5168*53ee8cc1Swenshuai.xi     else
5169*53ee8cc1Swenshuai.xi     {
5170*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].HW2_Config3,
5171*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].HW2_Config3), TSP_VQ_EN));
5172*53ee8cc1Swenshuai.xi     }
5173*53ee8cc1Swenshuai.xi }
5174*53ee8cc1Swenshuai.xi 
HAL_TSP_VQueue_Reset(MS_U8 u8VQId)5175*53ee8cc1Swenshuai.xi void HAL_TSP_VQueue_Reset(MS_U8 u8VQId)
5176*53ee8cc1Swenshuai.xi {
5177*53ee8cc1Swenshuai.xi     REG32 *pReg = &_TspCtrl[0].VQ0_BASE;
5178*53ee8cc1Swenshuai.xi     MS_U32 u32flag = 0;
5179*53ee8cc1Swenshuai.xi 
5180*53ee8cc1Swenshuai.xi     switch(u8VQId)
5181*53ee8cc1Swenshuai.xi     {
5182*53ee8cc1Swenshuai.xi         case 0:
5183*53ee8cc1Swenshuai.xi         default:
5184*53ee8cc1Swenshuai.xi             pReg = &_TspCtrl[0].VQ0_CTRL;
5185*53ee8cc1Swenshuai.xi             u32flag = TSP_VQ0_RESET;
5186*53ee8cc1Swenshuai.xi             break;
5187*53ee8cc1Swenshuai.xi         case 1:
5188*53ee8cc1Swenshuai.xi             pReg = &_TspCtrl[0].VQ1_Config;
5189*53ee8cc1Swenshuai.xi             u32flag = TSP_VQ1_RESET;
5190*53ee8cc1Swenshuai.xi             break;
5191*53ee8cc1Swenshuai.xi         case 2:
5192*53ee8cc1Swenshuai.xi             pReg = &_TspCtrl[0].VQ2_Config;
5193*53ee8cc1Swenshuai.xi             u32flag = TSP_VQ2_RESET;
5194*53ee8cc1Swenshuai.xi             break;
5195*53ee8cc1Swenshuai.xi         case 3:
5196*53ee8cc1Swenshuai.xi             pReg = &_TspCtrl[0].VQ3_Config;
5197*53ee8cc1Swenshuai.xi             u32flag = TSP_VQ3_RESET;
5198*53ee8cc1Swenshuai.xi             break;
5199*53ee8cc1Swenshuai.xi     }
5200*53ee8cc1Swenshuai.xi 
5201*53ee8cc1Swenshuai.xi     _HAL_REG32_W(pReg, SET_FLAG1(_HAL_REG32_R(pReg), u32flag));
5202*53ee8cc1Swenshuai.xi     _HAL_REG32_W(pReg, RESET_FLAG1(_HAL_REG32_R(pReg), u32flag));
5203*53ee8cc1Swenshuai.xi }
5204*53ee8cc1Swenshuai.xi 
HAL_TSP_VQueue_OverflowInt_En(MS_U8 u8VQId,MS_BOOL bEnable)5205*53ee8cc1Swenshuai.xi void HAL_TSP_VQueue_OverflowInt_En(MS_U8 u8VQId, MS_BOOL bEnable)
5206*53ee8cc1Swenshuai.xi {
5207*53ee8cc1Swenshuai.xi     REG32 *pReg = &_TspCtrl[0].VQ0_BASE;
5208*53ee8cc1Swenshuai.xi     MS_U32 u32flag = 0;
5209*53ee8cc1Swenshuai.xi 
5210*53ee8cc1Swenshuai.xi     switch(u8VQId)
5211*53ee8cc1Swenshuai.xi     {
5212*53ee8cc1Swenshuai.xi         case 0:
5213*53ee8cc1Swenshuai.xi         default:
5214*53ee8cc1Swenshuai.xi             pReg = &_TspCtrl[0].VQ0_CTRL;
5215*53ee8cc1Swenshuai.xi             u32flag = TSP_VQ0_OVERFLOW_INT_EN;
5216*53ee8cc1Swenshuai.xi             break;
5217*53ee8cc1Swenshuai.xi         case 1:
5218*53ee8cc1Swenshuai.xi             pReg = &_TspCtrl[0].VQ1_Config;
5219*53ee8cc1Swenshuai.xi             u32flag = TSP_VQ1_OVF_INT_EN;
5220*53ee8cc1Swenshuai.xi             break;
5221*53ee8cc1Swenshuai.xi         case 2:
5222*53ee8cc1Swenshuai.xi             pReg = &_TspCtrl[0].VQ2_Config;
5223*53ee8cc1Swenshuai.xi             u32flag = TSP_VQ2_OVF_INT_EN;
5224*53ee8cc1Swenshuai.xi             break;
5225*53ee8cc1Swenshuai.xi         case 3:
5226*53ee8cc1Swenshuai.xi             pReg = &_TspCtrl[0].VQ3_Config;
5227*53ee8cc1Swenshuai.xi             u32flag = TSP_VQ3_OVF_INT_EN;
5228*53ee8cc1Swenshuai.xi             break;
5229*53ee8cc1Swenshuai.xi     }
5230*53ee8cc1Swenshuai.xi 
5231*53ee8cc1Swenshuai.xi     if (bEnable)
5232*53ee8cc1Swenshuai.xi     {
5233*53ee8cc1Swenshuai.xi         _HAL_REG32_W(pReg, SET_FLAG1(_HAL_REG32_R(pReg), u32flag));
5234*53ee8cc1Swenshuai.xi         _HAL_TSP_HwInt2_BitSet(TSP_HWINT2_VQ0_VQ1_VQ2_VQ3_OVERFLOW >> TSP_HWINT2_STATUS_SHIFT);
5235*53ee8cc1Swenshuai.xi     }
5236*53ee8cc1Swenshuai.xi     else
5237*53ee8cc1Swenshuai.xi     {
5238*53ee8cc1Swenshuai.xi         _HAL_REG32_W(pReg, RESET_FLAG1(_HAL_REG32_R(pReg), u32flag));
5239*53ee8cc1Swenshuai.xi         _HAL_TSP_HwInt2_BitClr(TSP_HWINT2_VQ0_VQ1_VQ2_VQ3_OVERFLOW >> TSP_HWINT2_STATUS_SHIFT);
5240*53ee8cc1Swenshuai.xi     }
5241*53ee8cc1Swenshuai.xi }
5242*53ee8cc1Swenshuai.xi 
HAL_TSP_VQueue_Clr_OverflowInt(MS_U8 u8VQId)5243*53ee8cc1Swenshuai.xi void HAL_TSP_VQueue_Clr_OverflowInt(MS_U8 u8VQId)
5244*53ee8cc1Swenshuai.xi {
5245*53ee8cc1Swenshuai.xi     REG32 *pReg = 0;
5246*53ee8cc1Swenshuai.xi     MS_U32 u32flag = 0;
5247*53ee8cc1Swenshuai.xi     MS_U32 u32data = 0;
5248*53ee8cc1Swenshuai.xi 
5249*53ee8cc1Swenshuai.xi     switch(u8VQId)
5250*53ee8cc1Swenshuai.xi     {
5251*53ee8cc1Swenshuai.xi         case 0:
5252*53ee8cc1Swenshuai.xi         default:
5253*53ee8cc1Swenshuai.xi             pReg = &_TspCtrl[0].VQ0_CTRL;
5254*53ee8cc1Swenshuai.xi             u32flag = TSP_VQ0_CLR_OVERFLOW_INT;
5255*53ee8cc1Swenshuai.xi             break;
5256*53ee8cc1Swenshuai.xi         case 1:
5257*53ee8cc1Swenshuai.xi             pReg = &_TspCtrl[0].VQ1_Config;
5258*53ee8cc1Swenshuai.xi             u32flag = TSP_VQ1_CLR_OVF_INT;
5259*53ee8cc1Swenshuai.xi             break;
5260*53ee8cc1Swenshuai.xi         case 2:
5261*53ee8cc1Swenshuai.xi             pReg = &_TspCtrl[0].VQ2_Config;
5262*53ee8cc1Swenshuai.xi             u32flag = TSP_VQ2_CLR_OVF_INT;
5263*53ee8cc1Swenshuai.xi             break;
5264*53ee8cc1Swenshuai.xi         case 3:
5265*53ee8cc1Swenshuai.xi             pReg = &_TspCtrl[0].VQ3_Config;
5266*53ee8cc1Swenshuai.xi             u32flag = TSP_VQ3_CLR_OVF_INT;
5267*53ee8cc1Swenshuai.xi             break;
5268*53ee8cc1Swenshuai.xi     }
5269*53ee8cc1Swenshuai.xi     u32data = _HAL_REG32_R(pReg);
5270*53ee8cc1Swenshuai.xi 
5271*53ee8cc1Swenshuai.xi     _HAL_REG32_W(pReg, u32data | u32flag);
5272*53ee8cc1Swenshuai.xi     _HAL_REG32_W(pReg, u32data & ~u32flag);
5273*53ee8cc1Swenshuai.xi 
5274*53ee8cc1Swenshuai.xi     _HAL_TSP_HwInt2_BitClr(TSP_HWINT2_VQ0_VQ1_VQ2_VQ3_OVERFLOW);
5275*53ee8cc1Swenshuai.xi 
5276*53ee8cc1Swenshuai.xi }
5277*53ee8cc1Swenshuai.xi 
HAL_TSP_Set_Req_VQ_RX_Threshold(MS_U8 u8req_len)5278*53ee8cc1Swenshuai.xi void HAL_TSP_Set_Req_VQ_RX_Threshold(MS_U8 u8req_len)
5279*53ee8cc1Swenshuai.xi {
5280*53ee8cc1Swenshuai.xi     MS_U32 u32Value = TSP_REQ_VQ_RX_THRESHOLD_LEN1;
5281*53ee8cc1Swenshuai.xi 
5282*53ee8cc1Swenshuai.xi     switch(u8req_len)
5283*53ee8cc1Swenshuai.xi     {
5284*53ee8cc1Swenshuai.xi         case 1:
5285*53ee8cc1Swenshuai.xi             u32Value = TSP_REQ_VQ_RX_THRESHOLD_LEN1;
5286*53ee8cc1Swenshuai.xi             break;
5287*53ee8cc1Swenshuai.xi         case 2:
5288*53ee8cc1Swenshuai.xi             u32Value = TSP_REQ_VQ_RX_THRESHOLD_LEN2;
5289*53ee8cc1Swenshuai.xi             break;
5290*53ee8cc1Swenshuai.xi         case 4:
5291*53ee8cc1Swenshuai.xi             u32Value = TSP_REQ_VQ_RX_THRESHOLD_LEN4;
5292*53ee8cc1Swenshuai.xi             break;
5293*53ee8cc1Swenshuai.xi         case 8:
5294*53ee8cc1Swenshuai.xi             u32Value = TSP_REQ_VQ_RX_THRESHOLD_LEN8;
5295*53ee8cc1Swenshuai.xi             break;
5296*53ee8cc1Swenshuai.xi         default:
5297*53ee8cc1Swenshuai.xi             break;
5298*53ee8cc1Swenshuai.xi     }
5299*53ee8cc1Swenshuai.xi 
5300*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].VQ_PIDFLT_CTRL,
5301*53ee8cc1Swenshuai.xi         (_HAL_REG32_R(&_TspCtrl[0].VQ_PIDFLT_CTRL) & ~TSP_REQ_VQ_RX_THRESHOLD_MASKE) | u32Value);
5302*53ee8cc1Swenshuai.xi }
5303*53ee8cc1Swenshuai.xi 
HAL_TSP_Get_VQStatus(void)5304*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_Get_VQStatus(void)
5305*53ee8cc1Swenshuai.xi {
5306*53ee8cc1Swenshuai.xi     return (_HAL_REG32_R(&_TspCtrl[0].VQ_STATUS) & TSP_VQ_STATUS_MASK);
5307*53ee8cc1Swenshuai.xi }
5308*53ee8cc1Swenshuai.xi 
HAL_TSP_VQBlock_Disable(MS_U8 u8VQId,MS_BOOL bDisable)5309*53ee8cc1Swenshuai.xi void HAL_TSP_VQBlock_Disable(MS_U8 u8VQId, MS_BOOL bDisable)
5310*53ee8cc1Swenshuai.xi {
5311*53ee8cc1Swenshuai.xi     MS_U32 u32Value = 0;
5312*53ee8cc1Swenshuai.xi 
5313*53ee8cc1Swenshuai.xi     switch(u8VQId)
5314*53ee8cc1Swenshuai.xi     {
5315*53ee8cc1Swenshuai.xi         case 1: u32Value = TSP_VQTX0_BLOCK_DIS;
5316*53ee8cc1Swenshuai.xi             break;
5317*53ee8cc1Swenshuai.xi         case 2: u32Value = TSP_VQTX1_BLOCK_DIS;
5318*53ee8cc1Swenshuai.xi             break;
5319*53ee8cc1Swenshuai.xi         case 4: u32Value = TSP_VQTX2_BLOCK_DIS;
5320*53ee8cc1Swenshuai.xi             break;
5321*53ee8cc1Swenshuai.xi         case 8: u32Value = TSP_VQTX3_BLOCK_DIS;
5322*53ee8cc1Swenshuai.xi             break;
5323*53ee8cc1Swenshuai.xi     }
5324*53ee8cc1Swenshuai.xi 
5325*53ee8cc1Swenshuai.xi     if(bDisable)
5326*53ee8cc1Swenshuai.xi     {
5327*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].reg160C,
5328*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), u32Value));
5329*53ee8cc1Swenshuai.xi     }
5330*53ee8cc1Swenshuai.xi     else
5331*53ee8cc1Swenshuai.xi     {
5332*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].reg160C,
5333*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), u32Value));
5334*53ee8cc1Swenshuai.xi     }
5335*53ee8cc1Swenshuai.xi }
5336*53ee8cc1Swenshuai.xi 
5337*53ee8cc1Swenshuai.xi // Addr[0]                         -----> PVr1
5338*53ee8cc1Swenshuai.xi // Addr[1]                         -----> Section
5339*53ee8cc1Swenshuai.xi // Addr[2]                         -----> Section
5340*53ee8cc1Swenshuai.xi // Addr[3]                         -----> PVR2
5341*53ee8cc1Swenshuai.xi // The range can be written:  pphyStartAddr <= x < pphyEndAddr
5342*53ee8cc1Swenshuai.xi // Protection range: x >= pphyEndAddr && x < pphyStartAddr
HAL_TSP_WriteProtect_Enable(MS_BOOL bEnable,MS_PHY * pphyStartAddr,MS_PHY * pphyEndAddr)5343*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_WriteProtect_Enable(MS_BOOL bEnable, MS_PHY* pphyStartAddr, MS_PHY* pphyEndAddr)
5344*53ee8cc1Swenshuai.xi {
5345*53ee8cc1Swenshuai.xi     MS_U8 u8ii;
5346*53ee8cc1Swenshuai.xi 
5347*53ee8cc1Swenshuai.xi     if (bEnable)
5348*53ee8cc1Swenshuai.xi     {
5349*53ee8cc1Swenshuai.xi         for(u8ii = 0; u8ii < 4; u8ii++)
5350*53ee8cc1Swenshuai.xi         {
5351*53ee8cc1Swenshuai.xi             if(pphyStartAddr[u8ii] == pphyEndAddr[u8ii])
5352*53ee8cc1Swenshuai.xi                 pphyStartAddr[u8ii] += (1UL << MIU_BUS);
5353*53ee8cc1Swenshuai.xi         }
5354*53ee8cc1Swenshuai.xi 
5355*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].DMAW_LBND0, ((MS_U32)(pphyStartAddr[0]-_HAL_TSP_MIU_OFFSET(pphyStartAddr[0]))) >> MIU_BUS);
5356*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].DMAW_UBND0, ((MS_U32)(pphyEndAddr[0]-_HAL_TSP_MIU_OFFSET(pphyEndAddr[0]))) >> MIU_BUS);
5357*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].DMAW_LBND1, ((MS_U32)(pphyStartAddr[1]-_HAL_TSP_MIU_OFFSET(pphyStartAddr[1]))) >> MIU_BUS);
5358*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].DMAW_UBND1, ((MS_U32)(pphyEndAddr[1]-_HAL_TSP_MIU_OFFSET(pphyEndAddr[1]))) >> MIU_BUS);
5359*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].DMAW_LBND2, ((MS_U32)(pphyStartAddr[2]-_HAL_TSP_MIU_OFFSET(pphyStartAddr[2]))) >> MIU_BUS);
5360*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].DMAW_UBND2, ((MS_U32)(pphyEndAddr[2]-_HAL_TSP_MIU_OFFSET(pphyEndAddr[2]))) >> MIU_BUS);
5361*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].DMAW_LBND4, ((MS_U32)(pphyStartAddr[4]-_HAL_TSP_MIU_OFFSET(pphyStartAddr[4]))) >> MIU_BUS);
5362*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].DMAW_UBND4, ((MS_U32)(pphyEndAddr[4]-_HAL_TSP_MIU_OFFSET(pphyEndAddr[4]))) >> MIU_BUS);
5363*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].reg15b4,
5364*53ee8cc1Swenshuai.xi             SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg15b4), (TSP_SEC_DMAW_PROTECT_EN | TSP_PVR1_DAMW_PROTECT_EN | TSP_PVR2_DAMW_PROTECT_EN)));
5365*53ee8cc1Swenshuai.xi     }
5366*53ee8cc1Swenshuai.xi     else
5367*53ee8cc1Swenshuai.xi     {
5368*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].reg15b4,
5369*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg15b4), (TSP_SEC_DMAW_PROTECT_EN | TSP_PVR1_DAMW_PROTECT_EN | TSP_PVR2_DAMW_PROTECT_EN)));
5370*53ee8cc1Swenshuai.xi     }
5371*53ee8cc1Swenshuai.xi 
5372*53ee8cc1Swenshuai.xi     return TRUE;
5373*53ee8cc1Swenshuai.xi 
5374*53ee8cc1Swenshuai.xi }
5375*53ee8cc1Swenshuai.xi 
HAL_TSP_Get_FW_VER(void)5376*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_Get_FW_VER(void)
5377*53ee8cc1Swenshuai.xi {
5378*53ee8cc1Swenshuai.xi     MS_U32 i = 0;
5379*53ee8cc1Swenshuai.xi     MS_U32 u32Data = 0;
5380*53ee8cc1Swenshuai.xi 
5381*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Data0, 0);
5382*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, TSP_MCU_CMD_VERSION_GET);
5383*53ee8cc1Swenshuai.xi     while (i< 4)
5384*53ee8cc1Swenshuai.xi     {
5385*53ee8cc1Swenshuai.xi         if (0 == _HAL_REG32_R(&_TspCtrl[0].MCU_Cmd))
5386*53ee8cc1Swenshuai.xi         {
5387*53ee8cc1Swenshuai.xi             u32Data = _HAL_REG32_R(&_TspCtrl[0].MCU_Data0);
5388*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].MCU_Data0, 0);
5389*53ee8cc1Swenshuai.xi             return u32Data;
5390*53ee8cc1Swenshuai.xi         }
5391*53ee8cc1Swenshuai.xi         i++;
5392*53ee8cc1Swenshuai.xi         _delay();
5393*53ee8cc1Swenshuai.xi     }
5394*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, 0);
5395*53ee8cc1Swenshuai.xi     return u32Data;
5396*53ee8cc1Swenshuai.xi }
5397*53ee8cc1Swenshuai.xi 
HAL_TSP_Check_FW_VER(void)5398*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_Check_FW_VER(void)
5399*53ee8cc1Swenshuai.xi {
5400*53ee8cc1Swenshuai.xi     MS_U32  u32FWVer;
5401*53ee8cc1Swenshuai.xi 
5402*53ee8cc1Swenshuai.xi     u32FWVer = HAL_TSP_Get_FW_VER();
5403*53ee8cc1Swenshuai.xi     if((u32FWVer >> 16UL) != TSP_FW_DEVICE_ID)
5404*53ee8cc1Swenshuai.xi     {
5405*53ee8cc1Swenshuai.xi         printf("\nWarning: TSP FW not match!! FW version: 0x%08x\n\n", (unsigned int)u32FWVer);
5406*53ee8cc1Swenshuai.xi         return FALSE;
5407*53ee8cc1Swenshuai.xi     }
5408*53ee8cc1Swenshuai.xi 
5409*53ee8cc1Swenshuai.xi     return TRUE;
5410*53ee8cc1Swenshuai.xi }
5411*53ee8cc1Swenshuai.xi 
HAL_TSP_SetFwDbgMem(MS_PHY phyAddr,MS_U32 u32Size)5412*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_SetFwDbgMem(MS_PHY phyAddr, MS_U32 u32Size)
5413*53ee8cc1Swenshuai.xi {
5414*53ee8cc1Swenshuai.xi     MS_U32 i = 0;
5415*53ee8cc1Swenshuai.xi     MS_PHY phyMiuOffset = _HAL_TSP_MIU_OFFSET(phyAddr);
5416*53ee8cc1Swenshuai.xi     MS_PHY phyhwaddr = phyAddr - phyMiuOffset;
5417*53ee8cc1Swenshuai.xi 
5418*53ee8cc1Swenshuai.xi     if(IsCover(phyhwaddr, phyhwaddr + u32Size, OPENRISC_IP_1_ADDR, OPENRISC_IP_1_ADDR + OPENRISC_IP_1_SIZE) ||
5419*53ee8cc1Swenshuai.xi     IsCover(phyhwaddr, phyhwaddr+ u32Size, OPENRISC_IP_2_ADDR, OPENRISC_IP_2_ADDR + OPENRISC_IP_2_SIZE) ||
5420*53ee8cc1Swenshuai.xi     IsCover(phyhwaddr, phyhwaddr + u32Size, OPENRISC_IP_3_ADDR, OPENRISC_IP_3_ADDR + OPENRISC_IP_3_SIZE) ||
5421*53ee8cc1Swenshuai.xi     IsCover(phyhwaddr, phyhwaddr+ u32Size, OPENRISC_QMEM_ADDR, OPENRISC_QMEM_ADDR + OPENRISC_QMEM_SIZE))
5422*53ee8cc1Swenshuai.xi     {
5423*53ee8cc1Swenshuai.xi         printf("[%s][%d] invalid physical address 0x%x\n", __FUNCTION__, __LINE__, (unsigned int)phyAddr);
5424*53ee8cc1Swenshuai.xi         return FALSE;
5425*53ee8cc1Swenshuai.xi     }
5426*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Data0, (MS_U32)phyhwaddr);
5427*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Data1, u32Size);
5428*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, TSP_MCU_CMD_DBG_MEM);
5429*53ee8cc1Swenshuai.xi     while(i<4)
5430*53ee8cc1Swenshuai.xi     {
5431*53ee8cc1Swenshuai.xi         if(0 == _HAL_REG32_R(&_TspCtrl[0].MCU_Cmd))
5432*53ee8cc1Swenshuai.xi         {
5433*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].MCU_Data0, 0);
5434*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].MCU_Data1, 0);
5435*53ee8cc1Swenshuai.xi             return TRUE;
5436*53ee8cc1Swenshuai.xi         }
5437*53ee8cc1Swenshuai.xi         i++;
5438*53ee8cc1Swenshuai.xi         _delay();
5439*53ee8cc1Swenshuai.xi     }
5440*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, 0);
5441*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Data0, 0);
5442*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Data1, 0);
5443*53ee8cc1Swenshuai.xi 
5444*53ee8cc1Swenshuai.xi     return FALSE;
5445*53ee8cc1Swenshuai.xi }
5446*53ee8cc1Swenshuai.xi 
HAL_TSP_SetFwDbgWord(MS_U32 u32Word)5447*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_SetFwDbgWord(MS_U32 u32Word)
5448*53ee8cc1Swenshuai.xi {
5449*53ee8cc1Swenshuai.xi     MS_U32 i = 0;
5450*53ee8cc1Swenshuai.xi 
5451*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Data0, u32Word);
5452*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, TSP_MCU_CMD_DBG_WORD);
5453*53ee8cc1Swenshuai.xi     while(i<4)
5454*53ee8cc1Swenshuai.xi     {
5455*53ee8cc1Swenshuai.xi         if(0 == _HAL_REG32_R(&_TspCtrl[0].MCU_Cmd))
5456*53ee8cc1Swenshuai.xi         {
5457*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].MCU_Data0, 0);
5458*53ee8cc1Swenshuai.xi             return TRUE;
5459*53ee8cc1Swenshuai.xi         }
5460*53ee8cc1Swenshuai.xi         i++;
5461*53ee8cc1Swenshuai.xi         _delay();
5462*53ee8cc1Swenshuai.xi     }
5463*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Data0, 0);
5464*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, 0);
5465*53ee8cc1Swenshuai.xi     return FALSE;
5466*53ee8cc1Swenshuai.xi }
5467*53ee8cc1Swenshuai.xi 
5468*53ee8cc1Swenshuai.xi // Model : 0 -> File, 1 -> PVR1, 2 -> PVR2
5469*53ee8cc1Swenshuai.xi // u8MobfIndex0: 0 -> Disable, 1~31
5470*53ee8cc1Swenshuai.xi // u8MobfIndex1: 0 -> Disable, 1~31
HAL_TSP_MOBF_Select(MS_U8 u8Model,MS_U8 u8MobfIndex0,MS_U8 u8MobfIndex1)5471*53ee8cc1Swenshuai.xi void HAL_TSP_MOBF_Select(MS_U8 u8Model, MS_U8 u8MobfIndex0, MS_U8 u8MobfIndex1)
5472*53ee8cc1Swenshuai.xi {
5473*53ee8cc1Swenshuai.xi     REG32 *pReg = 0;
5474*53ee8cc1Swenshuai.xi     MS_U32 u32value = 0;
5475*53ee8cc1Swenshuai.xi 
5476*53ee8cc1Swenshuai.xi     switch(u8Model)
5477*53ee8cc1Swenshuai.xi     {
5478*53ee8cc1Swenshuai.xi         case 0:
5479*53ee8cc1Swenshuai.xi             _16MobfKey = (MS_U16)u8MobfIndex0;  //set mobf key with filein Start
5480*53ee8cc1Swenshuai.xi             break;
5481*53ee8cc1Swenshuai.xi         case 1:
5482*53ee8cc1Swenshuai.xi             pReg = &_TspCtrl[0].MOBF_PVR1_Index;
5483*53ee8cc1Swenshuai.xi             u32value = (_HAL_REG32_R(pReg) & ~TSP_MOBF_PVR1_INDEX0_MASK) |
5484*53ee8cc1Swenshuai.xi                          (((MS_U32)u8MobfIndex0 & 0xFFUL) << TSP_MOBF_PVR1_INDEX0_SHIFT);
5485*53ee8cc1Swenshuai.xi             break;
5486*53ee8cc1Swenshuai.xi         case 2:
5487*53ee8cc1Swenshuai.xi             pReg = &_TspCtrl[0].MOBF_PVR2_Index;
5488*53ee8cc1Swenshuai.xi             u32value = (_HAL_REG32_R(pReg) & ~TSP_MOBF_PVR2_INDEX0_MASK) |
5489*53ee8cc1Swenshuai.xi                          (((MS_U32)u8MobfIndex0 & 0xFFUL) << TSP_MOBF_PVR2_INDEX0_SHIFT);
5490*53ee8cc1Swenshuai.xi             break;
5491*53ee8cc1Swenshuai.xi         default:
5492*53ee8cc1Swenshuai.xi             break;;
5493*53ee8cc1Swenshuai.xi     }
5494*53ee8cc1Swenshuai.xi 
5495*53ee8cc1Swenshuai.xi     switch(u8Model)
5496*53ee8cc1Swenshuai.xi     {
5497*53ee8cc1Swenshuai.xi         case 0:
5498*53ee8cc1Swenshuai.xi             break;
5499*53ee8cc1Swenshuai.xi         case 1:
5500*53ee8cc1Swenshuai.xi             u32value &= ~TSP_MOBF_PVR1_INDEX1_MASK;
5501*53ee8cc1Swenshuai.xi             u32value |= (((MS_U32)u8MobfIndex1 & 0xFFUL) << TSP_MOBF_PVR1_INDEX1_SHIFT);
5502*53ee8cc1Swenshuai.xi             break;
5503*53ee8cc1Swenshuai.xi         case 2:
5504*53ee8cc1Swenshuai.xi             u32value &= ~TSP_MOBF_PVR2_INDEX1_MASK;
5505*53ee8cc1Swenshuai.xi             u32value |= (((MS_U32)u8MobfIndex1 & 0xFFUL) << TSP_MOBF_PVR2_INDEX1_SHIFT);
5506*53ee8cc1Swenshuai.xi             break;
5507*53ee8cc1Swenshuai.xi         default:
5508*53ee8cc1Swenshuai.xi             return;
5509*53ee8cc1Swenshuai.xi     }
5510*53ee8cc1Swenshuai.xi 
5511*53ee8cc1Swenshuai.xi     if(u8Model != 0)
5512*53ee8cc1Swenshuai.xi         _HAL_REG32_W(pReg, u32value);
5513*53ee8cc1Swenshuai.xi 
5514*53ee8cc1Swenshuai.xi }
5515*53ee8cc1Swenshuai.xi //---------------------------------------------------------
5516*53ee8cc1Swenshuai.xi 
HAL_TSP_PVR_Alignment_Enable(MS_U8 u8PVRId,MS_BOOL bEnable)5517*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_PVR_Alignment_Enable(MS_U8 u8PVRId, MS_BOOL bEnable)
5518*53ee8cc1Swenshuai.xi {
5519*53ee8cc1Swenshuai.xi     REG32 *pReg = 0;
5520*53ee8cc1Swenshuai.xi     MS_U32 u32flag = 0;
5521*53ee8cc1Swenshuai.xi 
5522*53ee8cc1Swenshuai.xi     switch(u8PVRId)
5523*53ee8cc1Swenshuai.xi     {
5524*53ee8cc1Swenshuai.xi         case 0:
5525*53ee8cc1Swenshuai.xi             pReg = &_TspCtrl[0].HW2_Config3;
5526*53ee8cc1Swenshuai.xi             u32flag = TSP_PVR1_ALIGN_EN;
5527*53ee8cc1Swenshuai.xi             break;
5528*53ee8cc1Swenshuai.xi         case 1:
5529*53ee8cc1Swenshuai.xi             pReg = &_TspCtrl[0].PVR2_Config;
5530*53ee8cc1Swenshuai.xi             u32flag = TSP_PVR2_PVR_ALIGN_EN;
5531*53ee8cc1Swenshuai.xi             break;
5532*53ee8cc1Swenshuai.xi         default:
5533*53ee8cc1Swenshuai.xi             return FALSE;
5534*53ee8cc1Swenshuai.xi     }
5535*53ee8cc1Swenshuai.xi 
5536*53ee8cc1Swenshuai.xi     if(bEnable)
5537*53ee8cc1Swenshuai.xi     {
5538*53ee8cc1Swenshuai.xi         _HAL_REG32_W(pReg, SET_FLAG1(_HAL_REG32_R(pReg), u32flag));
5539*53ee8cc1Swenshuai.xi     }
5540*53ee8cc1Swenshuai.xi     else
5541*53ee8cc1Swenshuai.xi     {
5542*53ee8cc1Swenshuai.xi         _HAL_REG32_W(pReg, RESET_FLAG1(_HAL_REG32_R(pReg), u32flag));
5543*53ee8cc1Swenshuai.xi     }
5544*53ee8cc1Swenshuai.xi     return TRUE;
5545*53ee8cc1Swenshuai.xi }
5546*53ee8cc1Swenshuai.xi 
HAL_TSP_PVR_ForceSync_Enable(MS_U8 u8PVRId,MS_BOOL bEnable)5547*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_PVR_ForceSync_Enable(MS_U8 u8PVRId, MS_BOOL bEnable)
5548*53ee8cc1Swenshuai.xi {
5549*53ee8cc1Swenshuai.xi     REG32 *pReg = 0;
5550*53ee8cc1Swenshuai.xi     MS_U32 u32flag = 0;
5551*53ee8cc1Swenshuai.xi 
5552*53ee8cc1Swenshuai.xi     switch(u8PVRId)
5553*53ee8cc1Swenshuai.xi     {
5554*53ee8cc1Swenshuai.xi         case 0:
5555*53ee8cc1Swenshuai.xi         case 1:
5556*53ee8cc1Swenshuai.xi             pReg = &_TspCtrl[0].HW2_Config3;
5557*53ee8cc1Swenshuai.xi             u32flag = TSP_REC_AT_SYNC_DIS;
5558*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].HW2_Config3,
5559*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].HW2_Config3), TSP_REC_AT_SYNC_DIS));
5560*53ee8cc1Swenshuai.xi             break;
5561*53ee8cc1Swenshuai.xi         default:
5562*53ee8cc1Swenshuai.xi             return FALSE;
5563*53ee8cc1Swenshuai.xi     }
5564*53ee8cc1Swenshuai.xi 
5565*53ee8cc1Swenshuai.xi     if(bEnable)
5566*53ee8cc1Swenshuai.xi     {
5567*53ee8cc1Swenshuai.xi         _HAL_REG32_W(pReg, RESET_FLAG1(_HAL_REG32_R(pReg), u32flag));
5568*53ee8cc1Swenshuai.xi     }
5569*53ee8cc1Swenshuai.xi     else
5570*53ee8cc1Swenshuai.xi     {
5571*53ee8cc1Swenshuai.xi         _HAL_REG32_W(pReg, SET_FLAG1(_HAL_REG32_R(pReg), u32flag));
5572*53ee8cc1Swenshuai.xi     }
5573*53ee8cc1Swenshuai.xi     return TRUE;
5574*53ee8cc1Swenshuai.xi }
5575*53ee8cc1Swenshuai.xi 
HAL_TSP_DupPktCnt_Clear(void)5576*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_DupPktCnt_Clear(void)
5577*53ee8cc1Swenshuai.xi {
5578*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].HW2_Config3,
5579*53ee8cc1Swenshuai.xi         SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].HW2_Config3), TSP_DUP_PKT_CNT_CLR));
5580*53ee8cc1Swenshuai.xi 
5581*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].HW2_Config3,
5582*53ee8cc1Swenshuai.xi         RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].HW2_Config3), TSP_DUP_PKT_CNT_CLR));
5583*53ee8cc1Swenshuai.xi 
5584*53ee8cc1Swenshuai.xi     return TRUE;
5585*53ee8cc1Swenshuai.xi }
5586*53ee8cc1Swenshuai.xi 
HAL_TSP_Read_DropPktCnt(MS_U16 * pu16ADropCnt,MS_U16 * pu16VDropCnt)5587*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_Read_DropPktCnt(MS_U16* pu16ADropCnt, MS_U16* pu16VDropCnt)
5588*53ee8cc1Swenshuai.xi {
5589*53ee8cc1Swenshuai.xi     return FALSE;
5590*53ee8cc1Swenshuai.xi }
5591*53ee8cc1Swenshuai.xi 
HAL_TSP_TSIF0_Enable(MS_BOOL bEnable)5592*53ee8cc1Swenshuai.xi void HAL_TSP_TSIF0_Enable(MS_BOOL bEnable)
5593*53ee8cc1Swenshuai.xi {
5594*53ee8cc1Swenshuai.xi     if (bEnable)
5595*53ee8cc1Swenshuai.xi     {
5596*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
5597*53ee8cc1Swenshuai.xi                      SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_HW_CFG4_TSIF0_ENABLE));
5598*53ee8cc1Swenshuai.xi     }
5599*53ee8cc1Swenshuai.xi     else
5600*53ee8cc1Swenshuai.xi     {
5601*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
5602*53ee8cc1Swenshuai.xi                      RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_HW_CFG4_TSIF0_ENABLE));
5603*53ee8cc1Swenshuai.xi     }
5604*53ee8cc1Swenshuai.xi }
5605*53ee8cc1Swenshuai.xi 
HAL_TSP_TSIF1_Enable(MS_BOOL bEnable)5606*53ee8cc1Swenshuai.xi void HAL_TSP_TSIF1_Enable(MS_BOOL bEnable)
5607*53ee8cc1Swenshuai.xi {
5608*53ee8cc1Swenshuai.xi     if (bEnable)
5609*53ee8cc1Swenshuai.xi     {
5610*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
5611*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_HW_CFG4_TSIF1_ENABLE));
5612*53ee8cc1Swenshuai.xi     }
5613*53ee8cc1Swenshuai.xi     else
5614*53ee8cc1Swenshuai.xi     {
5615*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
5616*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_HW_CFG4_TSIF1_ENABLE));
5617*53ee8cc1Swenshuai.xi     }
5618*53ee8cc1Swenshuai.xi }
5619*53ee8cc1Swenshuai.xi 
HAL_TSP_TSIFFI_SrcSelect(MS_BOOL bFileMode)5620*53ee8cc1Swenshuai.xi void HAL_TSP_TSIFFI_SrcSelect(MS_BOOL bFileMode)
5621*53ee8cc1Swenshuai.xi {
5622*53ee8cc1Swenshuai.xi     if(bFileMode == TRUE)
5623*53ee8cc1Swenshuai.xi     {
5624*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&_TspCtrl5[0].Ts_If_Fi_Cfg,
5625*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG16_R(&_TspCtrl5[0].Ts_If_Fi_Cfg), TSP_FIIF_MUX_LIVE_PATH));
5626*53ee8cc1Swenshuai.xi     }
5627*53ee8cc1Swenshuai.xi     else
5628*53ee8cc1Swenshuai.xi     {
5629*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&_TspCtrl5[0].Ts_If_Fi_Cfg,
5630*53ee8cc1Swenshuai.xi             SET_FLAG1(_HAL_REG16_R(&_TspCtrl5[0].Ts_If_Fi_Cfg), TSP_FIIF_MUX_LIVE_PATH));
5631*53ee8cc1Swenshuai.xi     }
5632*53ee8cc1Swenshuai.xi }
5633*53ee8cc1Swenshuai.xi 
HAL_TSP_AU_BD_Mode_Enable(MS_BOOL bEnable)5634*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_AU_BD_Mode_Enable(MS_BOOL bEnable)
5635*53ee8cc1Swenshuai.xi {
5636*53ee8cc1Swenshuai.xi     if (bEnable) {
5637*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].reg15b4,
5638*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg15b4), (TSP_BD_AUD_EN | TSP_BD_AUD_EN2)));
5639*53ee8cc1Swenshuai.xi     }
5640*53ee8cc1Swenshuai.xi     else {
5641*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].reg15b4,
5642*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg15b4), (TSP_BD_AUD_EN | TSP_BD_AUD_EN2)));
5643*53ee8cc1Swenshuai.xi     }
5644*53ee8cc1Swenshuai.xi 
5645*53ee8cc1Swenshuai.xi     return TRUE;
5646*53ee8cc1Swenshuai.xi }
5647*53ee8cc1Swenshuai.xi 
HAL_TSP_CMD_Run(MS_U32 u32Cmd,MS_U32 u32Config0,MS_U32 u32Config1,MS_U32 * pData)5648*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_CMD_Run(MS_U32 u32Cmd, MS_U32 u32Config0, MS_U32 u32Config1, MS_U32* pData)
5649*53ee8cc1Swenshuai.xi {
5650*53ee8cc1Swenshuai.xi     MS_BOOL bPesMode = FALSE;
5651*53ee8cc1Swenshuai.xi 
5652*53ee8cc1Swenshuai.xi     switch (u32Cmd)
5653*53ee8cc1Swenshuai.xi     {
5654*53ee8cc1Swenshuai.xi         case HAL_CMD_ONEWAY:
5655*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].REG_ONEWAY,
5656*53ee8cc1Swenshuai.xi                     SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].REG_ONEWAY), u32Config0));
5657*53ee8cc1Swenshuai.xi             break;
5658*53ee8cc1Swenshuai.xi         case HAL_CMD_SET_KRSTR_MODE:
5659*53ee8cc1Swenshuai.xi             _u32KernelSTRMode = u32Config0;
5660*53ee8cc1Swenshuai.xi             break;
5661*53ee8cc1Swenshuai.xi         case HAL_CMD_SET_LIB_MODE:
5662*53ee8cc1Swenshuai.xi             _u32LibMode = u32Config0;
5663*53ee8cc1Swenshuai.xi             break;
5664*53ee8cc1Swenshuai.xi         case HAL_CMD_PVR_PES_MODE:
5665*53ee8cc1Swenshuai.xi             bPesMode = (MS_BOOL)(*pData);
5666*53ee8cc1Swenshuai.xi             HAL_TSP_PVR_BypassHeader_En(u32Config0, !bPesMode);
5667*53ee8cc1Swenshuai.xi             break;
5668*53ee8cc1Swenshuai.xi         default:
5669*53ee8cc1Swenshuai.xi             return FALSE;
5670*53ee8cc1Swenshuai.xi     }
5671*53ee8cc1Swenshuai.xi 
5672*53ee8cc1Swenshuai.xi     return TRUE;
5673*53ee8cc1Swenshuai.xi }
5674*53ee8cc1Swenshuai.xi 
HAL_TSP_Get_PesScmb_Sts(MS_U8 u8FltId)5675*53ee8cc1Swenshuai.xi MS_U8 HAL_TSP_Get_PesScmb_Sts(MS_U8 u8FltId)
5676*53ee8cc1Swenshuai.xi {
5677*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, (TSP_MCU_CMD_SCMSTS_GET | ((MS_U32)u8FltId & 0xFFUL)));
5678*53ee8cc1Swenshuai.xi     while (0 != _HAL_REG32_R(&_TspCtrl[0].MCU_Cmd));
5679*53ee8cc1Swenshuai.xi     return (MS_U8)(_HAL_REG32_R(&_TspCtrl[0].MCU_Data0));
5680*53ee8cc1Swenshuai.xi }
5681*53ee8cc1Swenshuai.xi 
HAL_TSP_Get_TsScmb_Sts(MS_U8 u8FltId)5682*53ee8cc1Swenshuai.xi MS_U8 HAL_TSP_Get_TsScmb_Sts(MS_U8 u8FltId)
5683*53ee8cc1Swenshuai.xi {
5684*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, (TSP_MCU_CMD_SCMSTS_GET | ((MS_U32)u8FltId & 0xFFUL)));
5685*53ee8cc1Swenshuai.xi     while (0 != _HAL_REG32_R(&_TspCtrl[0].MCU_Cmd));
5686*53ee8cc1Swenshuai.xi     return (MS_U8)(_HAL_REG32_R(&_TspCtrl[0].MCU_Data0) >> 8UL);
5687*53ee8cc1Swenshuai.xi }
5688*53ee8cc1Swenshuai.xi 
5689*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------
5690*53ee8cc1Swenshuai.xi // @u16Mode : TSP_DEBUG_MODE_DIS_CONT     => discontinuous packet count
5691*53ee8cc1Swenshuai.xi //                   TSP_DEBUG_MODE_DROP_COUNT => drop packet count
5692*53ee8cc1Swenshuai.xi // @u16Src  : TBD
5693*53ee8cc1Swenshuai.xi // @u16Fifo  : TBD
5694*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------
_HAL_TSP_Get_PktCnt(TSP_DEBUG_MODE u16Mode,TSP_DEBUG_SRC TspSrc,TSP_DEBUG_FIFO TspFifo)5695*53ee8cc1Swenshuai.xi static MS_U32 _HAL_TSP_Get_PktCnt(TSP_DEBUG_MODE u16Mode, TSP_DEBUG_SRC TspSrc, TSP_DEBUG_FIFO TspFifo)
5696*53ee8cc1Swenshuai.xi {
5697*53ee8cc1Swenshuai.xi     MS_U16 u16Cfg  = 0;
5698*53ee8cc1Swenshuai.xi     MS_U16 u16DropPktmode  = 0;
5699*53ee8cc1Swenshuai.xi     REG16 *pReg = 0;
5700*53ee8cc1Swenshuai.xi 
5701*53ee8cc1Swenshuai.xi     switch (TspFifo)
5702*53ee8cc1Swenshuai.xi     {
5703*53ee8cc1Swenshuai.xi         case TSP_DEBUG_FIFO_VIDEO:
5704*53ee8cc1Swenshuai.xi             pReg = &_TspCtrl4[0].PktCnt_video;
5705*53ee8cc1Swenshuai.xi             u16Cfg = ((u16Mode==TSP_DEBUG_MODE_DIS_CONT)?V_DIS_CNTR_PKT_CNT_LOAD:V_DROP_PKT_CNT_LOAD);
5706*53ee8cc1Swenshuai.xi             break;
5707*53ee8cc1Swenshuai.xi         case TSP_DEBUG_FIFO_AUDIO:
5708*53ee8cc1Swenshuai.xi             pReg = &_TspCtrl4[0].PktCnt_aud;
5709*53ee8cc1Swenshuai.xi             u16Cfg = ((u16Mode==TSP_DEBUG_MODE_DIS_CONT)?AUD_DIS_CNTR_PKT_CNT_LOAD:AUD_DROP_PKT_CNT_LOAD);
5710*53ee8cc1Swenshuai.xi             break;
5711*53ee8cc1Swenshuai.xi         case TSP_DEBUG_FIFO_VIDEO3D:
5712*53ee8cc1Swenshuai.xi             pReg = &_TspCtrl4[0].PktCnt_v3d;
5713*53ee8cc1Swenshuai.xi             u16Cfg = ((u16Mode==TSP_DEBUG_MODE_DIS_CONT)?V3D_DIS_CNTR_PKT_CNT_LOAD:V3D_DROP_PKT_CNT_LOAD);
5714*53ee8cc1Swenshuai.xi             break;
5715*53ee8cc1Swenshuai.xi         case TSP_DEBUG_FIFO_AUDIOB:
5716*53ee8cc1Swenshuai.xi             pReg = &_TspCtrl4[0].PktCnt_audB;
5717*53ee8cc1Swenshuai.xi             u16Cfg = ((u16Mode==TSP_DEBUG_MODE_DIS_CONT)?AUDB_DIS_CNTR_PKT_CNT_LOAD:AUDB_DROP_PKT_CNT_LOAD);
5718*53ee8cc1Swenshuai.xi             break;
5719*53ee8cc1Swenshuai.xi         case TSP_DEBUG_FIFO_AUDIOC:
5720*53ee8cc1Swenshuai.xi             pReg = &_TspCtrl4[0].PktCnt_audC;
5721*53ee8cc1Swenshuai.xi             u16Cfg = ((u16Mode==TSP_DEBUG_MODE_DIS_CONT)?AUDC_DIS_CNTR_PKT_CNT_LOAD:AUDC_DROP_PKT_CNT_LOAD);
5722*53ee8cc1Swenshuai.xi             break;
5723*53ee8cc1Swenshuai.xi         case TSP_DEBUG_FIFO_AUDIOD:
5724*53ee8cc1Swenshuai.xi             pReg = &_TspCtrl4[0].PktCnt_audD;
5725*53ee8cc1Swenshuai.xi             u16Cfg = ((u16Mode==TSP_DEBUG_MODE_DIS_CONT)?AUDD_DIS_CNTR_PKT_CNT_LOAD:AUDD_DROP_PKT_CNT_LOAD);
5726*53ee8cc1Swenshuai.xi             break;
5727*53ee8cc1Swenshuai.xi     }
5728*53ee8cc1Swenshuai.xi 
5729*53ee8cc1Swenshuai.xi     if(u16Mode == TSP_DEBUG_MODE_DIS_CONT)
5730*53ee8cc1Swenshuai.xi         u16DropPktmode = 0;
5731*53ee8cc1Swenshuai.xi     else
5732*53ee8cc1Swenshuai.xi         u16DropPktmode = 1;
5733*53ee8cc1Swenshuai.xi 
5734*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TspCtrl4[0].PktCntLoad1),
5735*53ee8cc1Swenshuai.xi             (_HAL_REG16_R(&(_TspCtrl4[0].PktCntLoad1)) | u16Cfg ));
5736*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TspCtrl4[0].DebugSrcSel),
5737*53ee8cc1Swenshuai.xi             (_HAL_REG16_R(&(_TspCtrl4[0].DebugSrcSel)) & (~DROP_PKT_MODE_MASK) ) |  u16DropPktmode << 1 );
5738*53ee8cc1Swenshuai.xi 
5739*53ee8cc1Swenshuai.xi     return (MS_U32)(_HAL_REG16_R(pReg));
5740*53ee8cc1Swenshuai.xi }
5741*53ee8cc1Swenshuai.xi 
5742*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------
5743*53ee8cc1Swenshuai.xi // @ u16Src : TBD
5744*53ee8cc1Swenshuai.xi // @ u16Fifo : TBD
5745*53ee8cc1Swenshuai.xi // @ return value : 0 ~ 15
5746*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------
HAL_TSP_Get_DisContiCnt(TSP_DisconPktCnt_Info * TspDisconPktCntInfo)5747*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_Get_DisContiCnt(TSP_DisconPktCnt_Info* TspDisconPktCntInfo)
5748*53ee8cc1Swenshuai.xi {
5749*53ee8cc1Swenshuai.xi     if(TspDisconPktCntInfo->TspCmd == TSP_DEBUG_CMD_CLEAR)
5750*53ee8cc1Swenshuai.xi     {
5751*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&(_TspCtrl4[0].PktCntClr1),
5752*53ee8cc1Swenshuai.xi             _HAL_REG16_R(&(_TspCtrl4[0].PktCntClr1)) | (V_DROP_PKT_CNT_CLR | V3D_DROP_PKT_CNT_CLR | AUD_DROP_PKT_CNT_CLR | AUDB_DROP_PKT_CNT_CLR | AUDC_DROP_PKT_CNT_CLR | AUDD_DROP_PKT_CNT_CLR));
5753*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&(_TspCtrl4[0].PktCntClr1),
5754*53ee8cc1Swenshuai.xi             _HAL_REG16_R(&(_TspCtrl4[0].PktCntClr1)) & ~(V_DROP_PKT_CNT_CLR | V3D_DROP_PKT_CNT_CLR | AUD_DROP_PKT_CNT_CLR | AUDB_DROP_PKT_CNT_CLR | AUDC_DROP_PKT_CNT_CLR | AUDD_DROP_PKT_CNT_CLR));
5755*53ee8cc1Swenshuai.xi     }
5756*53ee8cc1Swenshuai.xi     return _HAL_TSP_Get_PktCnt(TSP_DEBUG_MODE_DIS_CONT, TspDisconPktCntInfo->TspSrc, TspDisconPktCntInfo->TspFifo);
5757*53ee8cc1Swenshuai.xi }
5758*53ee8cc1Swenshuai.xi 
5759*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------
5760*53ee8cc1Swenshuai.xi // @ u16Src : TBD
5761*53ee8cc1Swenshuai.xi // @ u16Fifo : TBD
5762*53ee8cc1Swenshuai.xi // @ return value : 0 ~ 15
5763*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------
HAL_TSP_Get_DropPktCnt(TSP_DropPktCnt_Info * TspDropCntInfo)5764*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_Get_DropPktCnt(TSP_DropPktCnt_Info* TspDropCntInfo)
5765*53ee8cc1Swenshuai.xi {
5766*53ee8cc1Swenshuai.xi     if(TspDropCntInfo->TspCmd == TSP_DEBUG_CMD_CLEAR)
5767*53ee8cc1Swenshuai.xi     {
5768*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&(_TspCtrl4[0].PktCntClr1),
5769*53ee8cc1Swenshuai.xi             _HAL_REG16_R(&(_TspCtrl4[0].PktCntClr1)) | (V_DROP_PKT_CNT_CLR | V3D_DROP_PKT_CNT_CLR | AUD_DROP_PKT_CNT_CLR | AUDB_DROP_PKT_CNT_CLR | AUDC_DROP_PKT_CNT_CLR | AUDD_DROP_PKT_CNT_CLR));
5770*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&(_TspCtrl4[0].PktCntClr1),
5771*53ee8cc1Swenshuai.xi             _HAL_REG16_R(&(_TspCtrl4[0].PktCntClr1)) & ~(V_DROP_PKT_CNT_CLR | V3D_DROP_PKT_CNT_CLR | AUD_DROP_PKT_CNT_CLR | AUDB_DROP_PKT_CNT_CLR | AUDC_DROP_PKT_CNT_CLR | AUDD_DROP_PKT_CNT_CLR));
5772*53ee8cc1Swenshuai.xi     }
5773*53ee8cc1Swenshuai.xi     return _HAL_TSP_Get_PktCnt(TSP_DEBUG_MODE_DROP_CONT, TspDropCntInfo->TspSrc, TspDropCntInfo->TspFifo);
5774*53ee8cc1Swenshuai.xi }
5775*53ee8cc1Swenshuai.xi 
5776*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------
5777*53ee8cc1Swenshuai.xi // @u16Tsif : TBD
5778*53ee8cc1Swenshuai.xi // @ return value : 0 ~ 15
5779*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------
HAL_TSP_Get_LockPktCnt(TSP_LockPktCnt_info * TspLockCntInfo)5780*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_Get_LockPktCnt(TSP_LockPktCnt_info* TspLockCntInfo)
5781*53ee8cc1Swenshuai.xi {
5782*53ee8cc1Swenshuai.xi     MS_U16 u16Clr=0,u16Load=0,u16Src=0;
5783*53ee8cc1Swenshuai.xi     switch (TspLockCntInfo->TspTsif)
5784*53ee8cc1Swenshuai.xi     {
5785*53ee8cc1Swenshuai.xi         case TSP_DEBUG_TSIF0: // TS0
5786*53ee8cc1Swenshuai.xi             u16Clr = LOCK_PKT_CNT_0_CLR;
5787*53ee8cc1Swenshuai.xi             u16Load = LOCK_PKT_CNT_0_LOAD;
5788*53ee8cc1Swenshuai.xi             u16Src = TSIF_SRC_SEL_TSIF0;
5789*53ee8cc1Swenshuai.xi             break;
5790*53ee8cc1Swenshuai.xi         case TSP_DEBUG_TSIF1: // TS1
5791*53ee8cc1Swenshuai.xi             u16Clr = LOCK_PKT_CNT_1_CLR;
5792*53ee8cc1Swenshuai.xi             u16Load = LOCK_PKT_CNT_1_LOAD;
5793*53ee8cc1Swenshuai.xi             u16Src = TSIF_SRC_SEL_TSIF1;
5794*53ee8cc1Swenshuai.xi             break;
5795*53ee8cc1Swenshuai.xi         case TSP_DEBUG_TSIF2: // TS2
5796*53ee8cc1Swenshuai.xi             u16Clr = LOCK_PKT_CNT_2_CLR;
5797*53ee8cc1Swenshuai.xi             u16Load = LOCK_PKT_CNT_2_LOAD;
5798*53ee8cc1Swenshuai.xi             u16Src = TSIF_SRC_SEL_TSIF2;
5799*53ee8cc1Swenshuai.xi             break;
5800*53ee8cc1Swenshuai.xi         case TSP_DEBUG_TSIFFI: // TSFI
5801*53ee8cc1Swenshuai.xi             u16Clr = LOCK_PKT_CNT_FI_CLR;
5802*53ee8cc1Swenshuai.xi             u16Load = LOCK_PKT_CNT_FI_LOAD;
5803*53ee8cc1Swenshuai.xi             u16Src = TSIF_SRC_SEL_TSIF_FI;
5804*53ee8cc1Swenshuai.xi             break;
5805*53ee8cc1Swenshuai.xi         default:
5806*53ee8cc1Swenshuai.xi             break;
5807*53ee8cc1Swenshuai.xi     }
5808*53ee8cc1Swenshuai.xi 
5809*53ee8cc1Swenshuai.xi     if(TspLockCntInfo->TspCmd == TSP_DEBUG_CMD_CLEAR)
5810*53ee8cc1Swenshuai.xi     {
5811*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&(_TspCtrl4[0].PktCntClr),
5812*53ee8cc1Swenshuai.xi             _HAL_REG16_R(&(_TspCtrl4[0].PktCntClr)) | u16Clr);
5813*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&(_TspCtrl4[0].PktCntClr),
5814*53ee8cc1Swenshuai.xi             _HAL_REG16_R(&(_TspCtrl4[0].PktCntClr)) & (~u16Clr));
5815*53ee8cc1Swenshuai.xi     }
5816*53ee8cc1Swenshuai.xi     else if(TspLockCntInfo->TspCmd == TSP_DEBUG_CMD_ENABLE)
5817*53ee8cc1Swenshuai.xi     {
5818*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&(_TspCtrl4[0].PktCntLoad),
5819*53ee8cc1Swenshuai.xi             _HAL_REG16_R(&(_TspCtrl4[0].PktCntLoad)) | u16Load);
5820*53ee8cc1Swenshuai.xi     }
5821*53ee8cc1Swenshuai.xi     else if(TspLockCntInfo->TspCmd == TSP_DEBUG_CMD_DISABLE)
5822*53ee8cc1Swenshuai.xi     {
5823*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&(_TspCtrl4[0].PktCntLoad),
5824*53ee8cc1Swenshuai.xi             _HAL_REG16_R(&(_TspCtrl4[0].PktCntLoad)) & (~u16Load));
5825*53ee8cc1Swenshuai.xi     }
5826*53ee8cc1Swenshuai.xi 
5827*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TspCtrl4[0].DebugSrcSel),
5828*53ee8cc1Swenshuai.xi             (_HAL_REG16_R(&(_TspCtrl4[0].DebugSrcSel)) & (~TSIF_SRC_SEL_MASK)) | (u16Src << TSIF_SRC_SEL_SHIFT));
5829*53ee8cc1Swenshuai.xi 
5830*53ee8cc1Swenshuai.xi     return (MS_U32)(_HAL_REG16_R(&(_TspCtrl4[0].LockedPktCnt)));
5831*53ee8cc1Swenshuai.xi }
5832*53ee8cc1Swenshuai.xi 
5833*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------
5834*53ee8cc1Swenshuai.xi // @ u16Fifo : TBD
5835*53ee8cc1Swenshuai.xi // @ return value : 0 ~ 15
5836*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------
HAL_TSP_GetAVPktCnt(TSP_AVPktCnt_info * TspAVCntInfo)5837*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_GetAVPktCnt(TSP_AVPktCnt_info* TspAVCntInfo)
5838*53ee8cc1Swenshuai.xi {
5839*53ee8cc1Swenshuai.xi     if(TspAVCntInfo->TspCmd == TSP_DEBUG_CMD_CLEAR)
5840*53ee8cc1Swenshuai.xi     {
5841*53ee8cc1Swenshuai.xi         switch (TspAVCntInfo->TspFifo)
5842*53ee8cc1Swenshuai.xi         {
5843*53ee8cc1Swenshuai.xi             case TSP_DEBUG_FIFO_VIDEO: // VIDEO
5844*53ee8cc1Swenshuai.xi                 _HAL_REG16_W(&(_TspCtrl4[0].PktCntClr),
5845*53ee8cc1Swenshuai.xi                     _HAL_REG16_R(&(_TspCtrl4[0].PktCntClr)) | (V_PKT_CNT_CLR));
5846*53ee8cc1Swenshuai.xi                 _HAL_REG16_W(&(_TspCtrl4[0].PktCntClr),
5847*53ee8cc1Swenshuai.xi                     _HAL_REG16_R(&(_TspCtrl4[0].PktCntClr)) & (~V_PKT_CNT_CLR));
5848*53ee8cc1Swenshuai.xi 
5849*53ee8cc1Swenshuai.xi                 break;
5850*53ee8cc1Swenshuai.xi             case TSP_DEBUG_FIFO_AUDIO:
5851*53ee8cc1Swenshuai.xi                 _HAL_REG16_W(&(_TspCtrl4[0].PktCntClr),
5852*53ee8cc1Swenshuai.xi                     _HAL_REG16_R(&(_TspCtrl4[0].PktCntClr)) | (AUD_PKT_CNT_CLR));
5853*53ee8cc1Swenshuai.xi                 _HAL_REG16_W(&(_TspCtrl4[0].PktCntClr),
5854*53ee8cc1Swenshuai.xi                     _HAL_REG16_R(&(_TspCtrl4[0].PktCntClr)) & (~AUD_PKT_CNT_CLR));
5855*53ee8cc1Swenshuai.xi                 break;
5856*53ee8cc1Swenshuai.xi             case TSP_DEBUG_FIFO_VIDEO3D:
5857*53ee8cc1Swenshuai.xi                 _HAL_REG16_W(&(_TspCtrl4[0].PktCntClr),
5858*53ee8cc1Swenshuai.xi                     _HAL_REG16_R(&(_TspCtrl4[0].PktCntClr)) | (V3D_PKT_CNT_CLR));
5859*53ee8cc1Swenshuai.xi                 _HAL_REG16_W(&(_TspCtrl4[0].PktCntClr),
5860*53ee8cc1Swenshuai.xi                     _HAL_REG16_R(&(_TspCtrl4[0].PktCntClr)) & (~V3D_PKT_CNT_CLR));
5861*53ee8cc1Swenshuai.xi                 break;
5862*53ee8cc1Swenshuai.xi             case TSP_DEBUG_FIFO_AUDIOB:
5863*53ee8cc1Swenshuai.xi                 _HAL_REG16_W(&(_TspCtrl4[0].PktCntClr),
5864*53ee8cc1Swenshuai.xi                     _HAL_REG16_R(&(_TspCtrl4[0].PktCntClr)) | (AUDB_PKT_CNT_CLR));
5865*53ee8cc1Swenshuai.xi                 _HAL_REG16_W(&(_TspCtrl4[0].PktCntClr),
5866*53ee8cc1Swenshuai.xi                     _HAL_REG16_R(&(_TspCtrl4[0].PktCntClr)) & (~AUDB_PKT_CNT_CLR));
5867*53ee8cc1Swenshuai.xi                 break;
5868*53ee8cc1Swenshuai.xi             case TSP_DEBUG_FIFO_AUDIOC:
5869*53ee8cc1Swenshuai.xi                 _HAL_REG16_W(&(_TspCtrl4[0].PktCntClr),
5870*53ee8cc1Swenshuai.xi                     _HAL_REG16_R(&(_TspCtrl4[0].PktCntClr)) | (AUDC_PKT_CNT_CLR));
5871*53ee8cc1Swenshuai.xi                 _HAL_REG16_W(&(_TspCtrl4[0].PktCntClr),
5872*53ee8cc1Swenshuai.xi                     _HAL_REG16_R(&(_TspCtrl4[0].PktCntClr)) & (~AUDC_PKT_CNT_CLR));
5873*53ee8cc1Swenshuai.xi                 break;
5874*53ee8cc1Swenshuai.xi             case TSP_DEBUG_FIFO_AUDIOD:
5875*53ee8cc1Swenshuai.xi                 _HAL_REG16_W(&(_TspCtrl4[0].PktCntClr),
5876*53ee8cc1Swenshuai.xi                     _HAL_REG16_R(&(_TspCtrl4[0].PktCntClr)) | (AUDD_PKT_CNT_CLR));
5877*53ee8cc1Swenshuai.xi                 _HAL_REG16_W(&(_TspCtrl4[0].PktCntClr),
5878*53ee8cc1Swenshuai.xi                     _HAL_REG16_R(&(_TspCtrl4[0].PktCntClr)) & (~AUDD_PKT_CNT_CLR));
5879*53ee8cc1Swenshuai.xi                 break;
5880*53ee8cc1Swenshuai.xi             default:
5881*53ee8cc1Swenshuai.xi                 break;
5882*53ee8cc1Swenshuai.xi         }
5883*53ee8cc1Swenshuai.xi 
5884*53ee8cc1Swenshuai.xi     }
5885*53ee8cc1Swenshuai.xi 
5886*53ee8cc1Swenshuai.xi 
5887*53ee8cc1Swenshuai.xi     switch (TspAVCntInfo->TspFifo)
5888*53ee8cc1Swenshuai.xi     {
5889*53ee8cc1Swenshuai.xi         case TSP_DEBUG_FIFO_VIDEO: // VIDEO
5890*53ee8cc1Swenshuai.xi             _HAL_REG16_W(&(_TspCtrl4[0].DebugSrcSel),
5891*53ee8cc1Swenshuai.xi                 (_HAL_REG16_R(&(_TspCtrl4[0].DebugSrcSel)) & (~AV_PKT_SRC_SEL_MASK)) | (AV_PKT_SRC_VID << AV_PKT_SRC_SEL_SHIFT));
5892*53ee8cc1Swenshuai.xi             _HAL_REG16_W(&(_TspCtrl4[0].PktCntLoad),
5893*53ee8cc1Swenshuai.xi                 (_HAL_REG16_R(&(_TspCtrl4[0].PktCntLoad))) | V_PKT_CNT_LOAD);
5894*53ee8cc1Swenshuai.xi 
5895*53ee8cc1Swenshuai.xi             return (MS_U32)(_HAL_REG16_R(&(_TspCtrl4[0].AVPktCnt)));
5896*53ee8cc1Swenshuai.xi         case TSP_DEBUG_FIFO_AUDIO: // AUDIO
5897*53ee8cc1Swenshuai.xi             _HAL_REG16_W(&(_TspCtrl4[0].DebugSrcSel),
5898*53ee8cc1Swenshuai.xi                 (_HAL_REG16_R(&(_TspCtrl4[0].DebugSrcSel)) & (~AV_PKT_SRC_SEL_MASK)) | (AV_PKT_SRC_AUD << AV_PKT_SRC_SEL_SHIFT));
5899*53ee8cc1Swenshuai.xi             _HAL_REG16_W(&(_TspCtrl4[0].PktCntLoad),
5900*53ee8cc1Swenshuai.xi                 _HAL_REG16_R(&(_TspCtrl4[0].PktCntLoad)) | AUD_PKT_CNT_LOAD);
5901*53ee8cc1Swenshuai.xi 
5902*53ee8cc1Swenshuai.xi 
5903*53ee8cc1Swenshuai.xi             return (MS_U32)(_HAL_REG16_R(&(_TspCtrl4[0].AVPktCnt)));
5904*53ee8cc1Swenshuai.xi         case TSP_DEBUG_FIFO_VIDEO3D: // V3D
5905*53ee8cc1Swenshuai.xi             _HAL_REG16_W(&(_TspCtrl4[0].DebugSrcSel),
5906*53ee8cc1Swenshuai.xi                 (_HAL_REG16_R(&(_TspCtrl4[0].DebugSrcSel)) & (~AV_PKT_SRC_SEL_MASK)) | (AV_PKT_SRC_V3D << AV_PKT_SRC_SEL_SHIFT));
5907*53ee8cc1Swenshuai.xi             _HAL_REG16_W(&(_TspCtrl4[0].PktCntLoad),
5908*53ee8cc1Swenshuai.xi                 _HAL_REG16_R(&(_TspCtrl4[0].PktCntLoad)) | V3D_PKT_CNT_LOAD);
5909*53ee8cc1Swenshuai.xi 
5910*53ee8cc1Swenshuai.xi             return (MS_U32)(_HAL_REG16_R(&(_TspCtrl4[0].AVPktCnt1)));
5911*53ee8cc1Swenshuai.xi         case TSP_DEBUG_FIFO_AUDIOB: // AUDIOB
5912*53ee8cc1Swenshuai.xi             _HAL_REG16_W(&(_TspCtrl4[0].DebugSrcSel),
5913*53ee8cc1Swenshuai.xi                 (_HAL_REG16_R(&(_TspCtrl4[0].DebugSrcSel)) & (~AV_PKT_SRC_SEL_MASK)) | (AV_PKT_SRC_AUDB << AV_PKT_SRC_SEL_SHIFT));
5914*53ee8cc1Swenshuai.xi             _HAL_REG16_W(&(_TspCtrl4[0].PktCntLoad),
5915*53ee8cc1Swenshuai.xi                 _HAL_REG16_R(&(_TspCtrl4[0].PktCntLoad)) | AUDB_PKT_CNT_LOAD);
5916*53ee8cc1Swenshuai.xi             return (MS_U32)(_HAL_REG16_R(&(_TspCtrl4[0].AVPktCnt1)));
5917*53ee8cc1Swenshuai.xi 
5918*53ee8cc1Swenshuai.xi 
5919*53ee8cc1Swenshuai.xi         case TSP_DEBUG_FIFO_AUDIOC: // AUDIOC
5920*53ee8cc1Swenshuai.xi             _HAL_REG16_W(&(_TspCtrl4[0].DebugSrcSel),
5921*53ee8cc1Swenshuai.xi                 (_HAL_REG16_R(&(_TspCtrl4[0].DebugSrcSel)) & (~AV_PKT_SRC_SEL_MASK)) | (AV_PKT_SRC_AUDC << AV_PKT_SRC_SEL_SHIFT));
5922*53ee8cc1Swenshuai.xi             _HAL_REG16_W(&(_TspCtrl4[0].PktCntLoad),
5923*53ee8cc1Swenshuai.xi                 _HAL_REG16_R(&(_TspCtrl4[0].PktCntLoad)) | AUDC_PKT_CNT_LOAD);
5924*53ee8cc1Swenshuai.xi             return (MS_U32)(_HAL_REG16_R(&(_TspCtrl4[0].AVPktCnt2)));
5925*53ee8cc1Swenshuai.xi 
5926*53ee8cc1Swenshuai.xi         case TSP_DEBUG_FIFO_AUDIOD: // AUDIOD
5927*53ee8cc1Swenshuai.xi             _HAL_REG16_W(&(_TspCtrl4[0].DebugSrcSel),
5928*53ee8cc1Swenshuai.xi                 (_HAL_REG16_R(&(_TspCtrl4[0].DebugSrcSel)) & (~AV_PKT_SRC_SEL_MASK)) | (AV_PKT_SRC_AUDD << AV_PKT_SRC_SEL_SHIFT));
5929*53ee8cc1Swenshuai.xi             _HAL_REG16_W(&(_TspCtrl4[0].PktCntLoad),
5930*53ee8cc1Swenshuai.xi                 _HAL_REG16_R(&(_TspCtrl4[0].PktCntLoad)) | AUDD_PKT_CNT_LOAD);
5931*53ee8cc1Swenshuai.xi             return (MS_U32)(_HAL_REG16_R(&(_TspCtrl4[0].AVPktCnt2)));
5932*53ee8cc1Swenshuai.xi 
5933*53ee8cc1Swenshuai.xi         default:
5934*53ee8cc1Swenshuai.xi             return 0;
5935*53ee8cc1Swenshuai.xi     }
5936*53ee8cc1Swenshuai.xi }
5937*53ee8cc1Swenshuai.xi 
HAL_TSP_Get_SecTEI_PktCount(MS_U32 u32PktSrc)5938*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_Get_SecTEI_PktCount(MS_U32 u32PktSrc)
5939*53ee8cc1Swenshuai.xi {
5940*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, TSP_MCU_CMD_TEI_COUNT_GET | u32PktSrc);
5941*53ee8cc1Swenshuai.xi     while (0 != _HAL_REG32_R(&_TspCtrl[0].MCU_Cmd));
5942*53ee8cc1Swenshuai.xi     return (_HAL_REG32_R(&_TspCtrl[0].MCU_Data0));
5943*53ee8cc1Swenshuai.xi }
5944*53ee8cc1Swenshuai.xi 
HAL_TSP_Reset_SecTEI_PktCount(MS_U32 u32PktSrc)5945*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_Reset_SecTEI_PktCount(MS_U32 u32PktSrc)
5946*53ee8cc1Swenshuai.xi {
5947*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, TSP_MCU_CMD_TEI_COUNT_GET | TSP_MCU_CMD_TEI_COUNT_OPTION_RESET | u32PktSrc);
5948*53ee8cc1Swenshuai.xi     while (0 != _HAL_REG32_R(&_TspCtrl[0].MCU_Cmd));
5949*53ee8cc1Swenshuai.xi     return TRUE;
5950*53ee8cc1Swenshuai.xi }
5951*53ee8cc1Swenshuai.xi 
HAL_TSP_Get_SecDisCont_PktCount(MS_U32 u32FltId)5952*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_Get_SecDisCont_PktCount(MS_U32 u32FltId)
5953*53ee8cc1Swenshuai.xi {
5954*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, TSP_MCU_CMD_DISCONT_COUNT_GET | u32FltId);
5955*53ee8cc1Swenshuai.xi     while (0 != _HAL_REG32_R(&_TspCtrl[0].MCU_Cmd));
5956*53ee8cc1Swenshuai.xi     return (_HAL_REG32_R(&_TspCtrl[0].MCU_Data0));
5957*53ee8cc1Swenshuai.xi }
5958*53ee8cc1Swenshuai.xi 
HAL_TSP_Reset_SecDisCont_PktCount(MS_U32 u32FltId)5959*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_Reset_SecDisCont_PktCount(MS_U32 u32FltId)
5960*53ee8cc1Swenshuai.xi {
5961*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, TSP_MCU_CMD_DISCONT_COUNT_GET | TSP_MCU_CMD_DISCONT_COUNT_OPTION_RESET | u32FltId);
5962*53ee8cc1Swenshuai.xi     while (0 != _HAL_REG32_R(&_TspCtrl[0].MCU_Cmd));
5963*53ee8cc1Swenshuai.xi     return TRUE;
5964*53ee8cc1Swenshuai.xi }
5965*53ee8cc1Swenshuai.xi 
HAL_TSP_DropScmbPkt(MS_U32 u32StreamId,MS_BOOL bEnable)5966*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_DropScmbPkt(MS_U32 u32StreamId,MS_BOOL bEnable)
5967*53ee8cc1Swenshuai.xi {
5968*53ee8cc1Swenshuai.xi     MS_U16 u32Flag;
5969*53ee8cc1Swenshuai.xi 
5970*53ee8cc1Swenshuai.xi     switch(u32StreamId)
5971*53ee8cc1Swenshuai.xi     {
5972*53ee8cc1Swenshuai.xi         case 0:
5973*53ee8cc1Swenshuai.xi             u32Flag = MASK_SCR_VID_EN;
5974*53ee8cc1Swenshuai.xi             break;
5975*53ee8cc1Swenshuai.xi         case 1:
5976*53ee8cc1Swenshuai.xi             u32Flag = MASK_SCR_AUD_EN;
5977*53ee8cc1Swenshuai.xi             break;
5978*53ee8cc1Swenshuai.xi         case 2:
5979*53ee8cc1Swenshuai.xi             u32Flag = MASK_SCR_AUD_B_EN;
5980*53ee8cc1Swenshuai.xi             break;
5981*53ee8cc1Swenshuai.xi         case 3:
5982*53ee8cc1Swenshuai.xi             u32Flag = MASK_SCR_VID_3D_EN;
5983*53ee8cc1Swenshuai.xi             break;
5984*53ee8cc1Swenshuai.xi         case 4:
5985*53ee8cc1Swenshuai.xi             u32Flag = MASK_SCR_AUD_C_EN;
5986*53ee8cc1Swenshuai.xi             break;
5987*53ee8cc1Swenshuai.xi         case 5:
5988*53ee8cc1Swenshuai.xi             u32Flag = MASK_SCR_AUD_D_EN;
5989*53ee8cc1Swenshuai.xi             break;
5990*53ee8cc1Swenshuai.xi         case 6:
5991*53ee8cc1Swenshuai.xi             u32Flag = MASK_SCR_PVR1_EN;
5992*53ee8cc1Swenshuai.xi             break;
5993*53ee8cc1Swenshuai.xi         case 7:
5994*53ee8cc1Swenshuai.xi             u32Flag = MASK_SCR_PVR2_EN;
5995*53ee8cc1Swenshuai.xi             break;
5996*53ee8cc1Swenshuai.xi         default:
5997*53ee8cc1Swenshuai.xi             return FALSE;
5998*53ee8cc1Swenshuai.xi     }
5999*53ee8cc1Swenshuai.xi 
6000*53ee8cc1Swenshuai.xi     if (bEnable)
6001*53ee8cc1Swenshuai.xi     {
6002*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&_TspCtrl3[0].HW3_Cfg1,
6003*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG16_R(&_TspCtrl3[0].HW3_Cfg1), u32Flag));
6004*53ee8cc1Swenshuai.xi     }
6005*53ee8cc1Swenshuai.xi     else
6006*53ee8cc1Swenshuai.xi     {
6007*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&_TspCtrl3[0].HW3_Cfg1,
6008*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG16_R(&_TspCtrl3[0].HW3_Cfg1), u32Flag));
6009*53ee8cc1Swenshuai.xi     }
6010*53ee8cc1Swenshuai.xi     return TRUE;
6011*53ee8cc1Swenshuai.xi }
6012*53ee8cc1Swenshuai.xi 
6013*53ee8cc1Swenshuai.xi 
6014*53ee8cc1Swenshuai.xi // -------------------------------------------------------------
6015*53ee8cc1Swenshuai.xi // Merge Stream
6016*53ee8cc1Swenshuai.xi // -------------------------------------------------------------
HAL_TSP_Set_Sync_Byte(MS_U8 u8Path,MS_U8 u8Id,MS_U8 * pu8SyncByte,MS_BOOL bSet)6017*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_Set_Sync_Byte(MS_U8 u8Path, MS_U8 u8Id, MS_U8 *pu8SyncByte, MS_BOOL bSet)
6018*53ee8cc1Swenshuai.xi {
6019*53ee8cc1Swenshuai.xi     REG16 *SynReg=0;
6020*53ee8cc1Swenshuai.xi     MS_U16 u16Mask = 0x00FF, u16Sync = 0, u16Shift = 0;
6021*53ee8cc1Swenshuai.xi 
6022*53ee8cc1Swenshuai.xi     switch(u8Path)
6023*53ee8cc1Swenshuai.xi     {
6024*53ee8cc1Swenshuai.xi         case TSP_SRC_FROM_TSIF0_LIVE:
6025*53ee8cc1Swenshuai.xi             SynReg = &(_TspCtrl3[0].SyncByte_tsif0[u8Id>>1]);
6026*53ee8cc1Swenshuai.xi             break;
6027*53ee8cc1Swenshuai.xi         case TSP_SRC_FROM_TSIF0_FILE:
6028*53ee8cc1Swenshuai.xi             SynReg = &(_TspCtrl3[0].SyncByte_file[u8Id>>1]);
6029*53ee8cc1Swenshuai.xi             break;
6030*53ee8cc1Swenshuai.xi         case TSP_SRC_FROM_TSIF1:
6031*53ee8cc1Swenshuai.xi             SynReg = &(_TspCtrl3[0].SyncByte_tsif1[u8Id>>1]);
6032*53ee8cc1Swenshuai.xi             break;
6033*53ee8cc1Swenshuai.xi         case TSP_SRC_FROM_TSIF2:
6034*53ee8cc1Swenshuai.xi             SynReg = &(_TspCtrl3[0].SyncByte_tsif2[u8Id>>1]);
6035*53ee8cc1Swenshuai.xi             break;
6036*53ee8cc1Swenshuai.xi         default:
6037*53ee8cc1Swenshuai.xi             return FALSE;
6038*53ee8cc1Swenshuai.xi     }
6039*53ee8cc1Swenshuai.xi 
6040*53ee8cc1Swenshuai.xi     if(u8Id & 0x1)
6041*53ee8cc1Swenshuai.xi     {
6042*53ee8cc1Swenshuai.xi         u16Shift = 8;
6043*53ee8cc1Swenshuai.xi     }
6044*53ee8cc1Swenshuai.xi 
6045*53ee8cc1Swenshuai.xi     if(bSet == TRUE)
6046*53ee8cc1Swenshuai.xi     {
6047*53ee8cc1Swenshuai.xi         u16Sync = ((MS_U16)(*pu8SyncByte)) & 0xFF;
6048*53ee8cc1Swenshuai.xi         _HAL_REG16_W(SynReg,((_HAL_REG16_R(SynReg) & ~(u16Mask << u16Shift)) | (u16Sync << u16Shift)));
6049*53ee8cc1Swenshuai.xi     }
6050*53ee8cc1Swenshuai.xi     else
6051*53ee8cc1Swenshuai.xi     {
6052*53ee8cc1Swenshuai.xi         u16Sync = (_HAL_REG16_R(SynReg) & (u16Mask << u16Shift)) >> u16Shift;
6053*53ee8cc1Swenshuai.xi         *pu8SyncByte = (MS_U8)u16Sync;
6054*53ee8cc1Swenshuai.xi     }
6055*53ee8cc1Swenshuai.xi 
6056*53ee8cc1Swenshuai.xi     return TRUE;
6057*53ee8cc1Swenshuai.xi 
6058*53ee8cc1Swenshuai.xi }
6059*53ee8cc1Swenshuai.xi 
HAL_TSP_Set_Src_Id(MS_U8 u8Path,MS_U8 u8Id,MS_U8 * pu8SrcId,MS_BOOL bSet)6060*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_Set_Src_Id(MS_U8 u8Path, MS_U8 u8Id, MS_U8 *pu8SrcId, MS_BOOL bSet)
6061*53ee8cc1Swenshuai.xi {
6062*53ee8cc1Swenshuai.xi     REG16 *SrcIdReg =0;
6063*53ee8cc1Swenshuai.xi     MS_U16 u16SrcId = 0, u16Mask = 0x000F, u16Shift = 0;
6064*53ee8cc1Swenshuai.xi 
6065*53ee8cc1Swenshuai.xi     switch(u8Path)
6066*53ee8cc1Swenshuai.xi     {
6067*53ee8cc1Swenshuai.xi         case TSP_SRC_FROM_TSIF0_LIVE:
6068*53ee8cc1Swenshuai.xi             SrcIdReg = &(_TspCtrl3[0].SourceId_tsif0[u8Id>>2]);
6069*53ee8cc1Swenshuai.xi             break;
6070*53ee8cc1Swenshuai.xi         case TSP_SRC_FROM_TSIF0_FILE:
6071*53ee8cc1Swenshuai.xi             SrcIdReg = &(_TspCtrl3[0].SourceId_file[u8Id>>2]);
6072*53ee8cc1Swenshuai.xi             break;
6073*53ee8cc1Swenshuai.xi         case TSP_SRC_FROM_TSIF1:
6074*53ee8cc1Swenshuai.xi             SrcIdReg = &(_TspCtrl3[0].SourceId_tsif1[u8Id>>2]);
6075*53ee8cc1Swenshuai.xi             break;
6076*53ee8cc1Swenshuai.xi         case TSP_SRC_FROM_TSIF2:
6077*53ee8cc1Swenshuai.xi             SrcIdReg = &(_TspCtrl3[0].SourceId_tsif2[u8Id>>2]);
6078*53ee8cc1Swenshuai.xi             break;
6079*53ee8cc1Swenshuai.xi         default:
6080*53ee8cc1Swenshuai.xi             return FALSE;
6081*53ee8cc1Swenshuai.xi     }
6082*53ee8cc1Swenshuai.xi 
6083*53ee8cc1Swenshuai.xi     switch(u8Id & 0x3)
6084*53ee8cc1Swenshuai.xi     {
6085*53ee8cc1Swenshuai.xi         case 0x1:
6086*53ee8cc1Swenshuai.xi             u16Shift = 4;
6087*53ee8cc1Swenshuai.xi             u16SrcId <<= 4;
6088*53ee8cc1Swenshuai.xi             u16Mask <<= 4;
6089*53ee8cc1Swenshuai.xi             break;
6090*53ee8cc1Swenshuai.xi         case 0x2:
6091*53ee8cc1Swenshuai.xi             u16Shift = 8;
6092*53ee8cc1Swenshuai.xi             u16SrcId <<= 8;
6093*53ee8cc1Swenshuai.xi             u16Mask <<= 8;
6094*53ee8cc1Swenshuai.xi             break;
6095*53ee8cc1Swenshuai.xi         case 0x3:
6096*53ee8cc1Swenshuai.xi             u16Shift = 12;
6097*53ee8cc1Swenshuai.xi             u16SrcId <<= 12;
6098*53ee8cc1Swenshuai.xi             u16Mask <<= 12;
6099*53ee8cc1Swenshuai.xi             break;
6100*53ee8cc1Swenshuai.xi     }
6101*53ee8cc1Swenshuai.xi 
6102*53ee8cc1Swenshuai.xi     if(bSet == TRUE)
6103*53ee8cc1Swenshuai.xi     {
6104*53ee8cc1Swenshuai.xi         u16SrcId = ((MS_U16)(*pu8SrcId)) & 0xFF;
6105*53ee8cc1Swenshuai.xi         _HAL_REG16_W(SrcIdReg,((_HAL_REG16_R(SrcIdReg) & ~(u16Mask << u16Shift)) | (u16SrcId << u16Shift)));
6106*53ee8cc1Swenshuai.xi     }
6107*53ee8cc1Swenshuai.xi     else
6108*53ee8cc1Swenshuai.xi     {
6109*53ee8cc1Swenshuai.xi         u16SrcId = (_HAL_REG16_R(SrcIdReg) & (u16Mask << u16Shift)) >> u16Shift;
6110*53ee8cc1Swenshuai.xi         *pu8SrcId = (MS_U8)u16SrcId;
6111*53ee8cc1Swenshuai.xi     }
6112*53ee8cc1Swenshuai.xi 
6113*53ee8cc1Swenshuai.xi     return TRUE;
6114*53ee8cc1Swenshuai.xi }
6115*53ee8cc1Swenshuai.xi 
HAL_TSP_Set_ATS_AdjPeriod(MS_U16 u16Value)6116*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_Set_ATS_AdjPeriod(MS_U16 u16Value)
6117*53ee8cc1Swenshuai.xi {
6118*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TspCtrl5[0].ATS_Adj_Period),
6119*53ee8cc1Swenshuai.xi                 (_HAL_REG16_R(&(_TspCtrl5[0].ATS_Adj_Period)) & (~TSP_ATS_ADJ_PERIOD_MASK)) | u16Value);
6120*53ee8cc1Swenshuai.xi 
6121*53ee8cc1Swenshuai.xi     return TRUE;
6122*53ee8cc1Swenshuai.xi }
6123*53ee8cc1Swenshuai.xi 
HAL_TSP_Set_ATS_AdjEnable(MS_BOOL bEnable)6124*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_Set_ATS_AdjEnable(MS_BOOL bEnable)
6125*53ee8cc1Swenshuai.xi {
6126*53ee8cc1Swenshuai.xi     if(bEnable == TRUE)
6127*53ee8cc1Swenshuai.xi     {
6128*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&(_TspCtrl5[0].AtsCfg),
6129*53ee8cc1Swenshuai.xi                 _HAL_REG16_R(&(_TspCtrl5[0].AtsCfg)) | TSP_ATS_MODE_FI_ENABLE);
6130*53ee8cc1Swenshuai.xi     }
6131*53ee8cc1Swenshuai.xi     else
6132*53ee8cc1Swenshuai.xi     {
6133*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&(_TspCtrl5[0].AtsCfg),
6134*53ee8cc1Swenshuai.xi                 (_HAL_REG16_R(&(_TspCtrl5[0].AtsCfg)) & (~TSP_ATS_MODE_FI_ENABLE)));
6135*53ee8cc1Swenshuai.xi     }
6136*53ee8cc1Swenshuai.xi     return TRUE;
6137*53ee8cc1Swenshuai.xi }
6138*53ee8cc1Swenshuai.xi 
HAL_TSP_Set_ATS_AdjOffset(MS_BOOL bIncreased,MS_U16 u16Offset)6139*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_Set_ATS_AdjOffset(MS_BOOL bIncreased, MS_U16 u16Offset)
6140*53ee8cc1Swenshuai.xi {
6141*53ee8cc1Swenshuai.xi     if(bIncreased == TRUE)
6142*53ee8cc1Swenshuai.xi     {
6143*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&(_TspCtrl5[0].AtsCfg),
6144*53ee8cc1Swenshuai.xi                 (_HAL_REG16_R(&(_TspCtrl5[0].AtsCfg)) & (~TSP_ATS_OFFSET_FI_NEGATIVE)));
6145*53ee8cc1Swenshuai.xi     }
6146*53ee8cc1Swenshuai.xi     else
6147*53ee8cc1Swenshuai.xi     {
6148*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&(_TspCtrl5[0].AtsCfg),
6149*53ee8cc1Swenshuai.xi                 _HAL_REG16_R(&(_TspCtrl5[0].AtsCfg)) | TSP_ATS_OFFSET_FI_NEGATIVE);
6150*53ee8cc1Swenshuai.xi     }
6151*53ee8cc1Swenshuai.xi 
6152*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TspCtrl5[0].AtsCfg),
6153*53ee8cc1Swenshuai.xi                 (_HAL_REG16_R(&(_TspCtrl5[0].AtsCfg)) & (~TSP_ATS_OFFSET_FI_MASK)) | ((u16Offset << TSP_ATS_OFFSET_FI_SHIFT) & TSP_ATS_OFFSET_FI_MASK));
6154*53ee8cc1Swenshuai.xi 
6155*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TspCtrl5[0].AtsCfg),
6156*53ee8cc1Swenshuai.xi                 _HAL_REG16_R(&(_TspCtrl5[0].AtsCfg)) | TSP_ATS_OFFSET_FI_ENABLE);
6157*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TspCtrl5[0].AtsCfg),
6158*53ee8cc1Swenshuai.xi                 (_HAL_REG16_R(&(_TspCtrl5[0].AtsCfg)) & (~TSP_ATS_OFFSET_FI_ENABLE)));
6159*53ee8cc1Swenshuai.xi 
6160*53ee8cc1Swenshuai.xi     return FALSE;
6161*53ee8cc1Swenshuai.xi }
6162*53ee8cc1Swenshuai.xi 
6163*53ee8cc1Swenshuai.xi 
HAL_FQ_SetMuxSwitch(MS_U32 u32FQEng,MS_U32 u32FQSrc)6164*53ee8cc1Swenshuai.xi MS_BOOL HAL_FQ_SetMuxSwitch(MS_U32 u32FQEng, MS_U32 u32FQSrc)
6165*53ee8cc1Swenshuai.xi {
6166*53ee8cc1Swenshuai.xi     MS_U16 u16Src;
6167*53ee8cc1Swenshuai.xi 
6168*53ee8cc1Swenshuai.xi     if(u32FQEng != 0)
6169*53ee8cc1Swenshuai.xi         return FALSE;
6170*53ee8cc1Swenshuai.xi 
6171*53ee8cc1Swenshuai.xi     switch(u32FQSrc)
6172*53ee8cc1Swenshuai.xi     {
6173*53ee8cc1Swenshuai.xi         case 0:
6174*53ee8cc1Swenshuai.xi             u16Src = FIQ_MUX_CFG_TS0;
6175*53ee8cc1Swenshuai.xi             break;
6176*53ee8cc1Swenshuai.xi         case 1:
6177*53ee8cc1Swenshuai.xi             u16Src = FIQ_MUX_CFG_TS1;
6178*53ee8cc1Swenshuai.xi             break;
6179*53ee8cc1Swenshuai.xi         case 2:
6180*53ee8cc1Swenshuai.xi             u16Src = FIQ_MUX_CFG_TS2;
6181*53ee8cc1Swenshuai.xi             break;
6182*53ee8cc1Swenshuai.xi         case 7:
6183*53ee8cc1Swenshuai.xi             u16Src = FIQ_MUX_CFG_FILE;
6184*53ee8cc1Swenshuai.xi             break;
6185*53ee8cc1Swenshuai.xi         default:
6186*53ee8cc1Swenshuai.xi             return FALSE;
6187*53ee8cc1Swenshuai.xi     }
6188*53ee8cc1Swenshuai.xi 
6189*53ee8cc1Swenshuai.xi     //TSP5_REG(REG_TSP5_FIQ_MUX) = (TSP5_REG(REG_TSP5_FIQ_MUX) & ~REG_TSP5_FIQ_MUX_MASK) | u16Src;
6190*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TspCtrl5[0].FIQ_MUX_CFG), (_HAL_REG16_R(&(_TspCtrl5[0].FIQ_MUX_CFG)) & (~FIQ_MUX_CFG_MASK)) | u16Src);
6191*53ee8cc1Swenshuai.xi 
6192*53ee8cc1Swenshuai.xi     return TRUE;
6193*53ee8cc1Swenshuai.xi }
6194*53ee8cc1Swenshuai.xi 
HAL_FQ_GetMuxSwitch(MS_U32 u32FQEng)6195*53ee8cc1Swenshuai.xi MS_U32 HAL_FQ_GetMuxSwitch(MS_U32 u32FQEng)
6196*53ee8cc1Swenshuai.xi {
6197*53ee8cc1Swenshuai.xi     MS_U16 u16Src;
6198*53ee8cc1Swenshuai.xi     MS_U32 u32Ret;
6199*53ee8cc1Swenshuai.xi 
6200*53ee8cc1Swenshuai.xi     if(u32FQEng != 0)
6201*53ee8cc1Swenshuai.xi         return 0xFFUL;
6202*53ee8cc1Swenshuai.xi 
6203*53ee8cc1Swenshuai.xi     u16Src = _HAL_REG16_R(&(_TspCtrl5[0].FIQ_MUX_CFG));
6204*53ee8cc1Swenshuai.xi 
6205*53ee8cc1Swenshuai.xi     switch(u16Src)
6206*53ee8cc1Swenshuai.xi     {
6207*53ee8cc1Swenshuai.xi         case FIQ_MUX_CFG_TS0:
6208*53ee8cc1Swenshuai.xi             u32Ret = 0;
6209*53ee8cc1Swenshuai.xi             break;
6210*53ee8cc1Swenshuai.xi         case FIQ_MUX_CFG_TS1:
6211*53ee8cc1Swenshuai.xi             u32Ret = 1;
6212*53ee8cc1Swenshuai.xi             break;
6213*53ee8cc1Swenshuai.xi         case FIQ_MUX_CFG_TS2:
6214*53ee8cc1Swenshuai.xi             u32Ret = 2;
6215*53ee8cc1Swenshuai.xi             break;
6216*53ee8cc1Swenshuai.xi         case FIQ_MUX_CFG_FILE:
6217*53ee8cc1Swenshuai.xi             u32Ret = 7;
6218*53ee8cc1Swenshuai.xi             break;
6219*53ee8cc1Swenshuai.xi         default:
6220*53ee8cc1Swenshuai.xi             u32Ret = 0xFF;
6221*53ee8cc1Swenshuai.xi             break;
6222*53ee8cc1Swenshuai.xi     }
6223*53ee8cc1Swenshuai.xi     return u32Ret;
6224*53ee8cc1Swenshuai.xi }
6225*53ee8cc1Swenshuai.xi 
6226*53ee8cc1Swenshuai.xi 
6227*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
HAL_TSP_SaveRegs(void)6228*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_SaveRegs(void)
6229*53ee8cc1Swenshuai.xi {
6230*53ee8cc1Swenshuai.xi     MS_U32 u32ii = 0;
6231*53ee8cc1Swenshuai.xi 
6232*53ee8cc1Swenshuai.xi     _u16ChipRegArray[0x05] = TSP_TOP_REG(0x05);
6233*53ee8cc1Swenshuai.xi     _u16ChipRegArray[0x06] = TSP_TOP_REG(0x06);
6234*53ee8cc1Swenshuai.xi     _u16ChipRegArray[0x0e] = TSP_TOP_REG(0x0e);
6235*53ee8cc1Swenshuai.xi     //_u16ChipRegArray[0x10] = TSP_TOP_REG(0x10);
6236*53ee8cc1Swenshuai.xi     //_u16ChipRegArray[0x11] = TSP_TOP_REG(0x11);
6237*53ee8cc1Swenshuai.xi     //_u16ChipRegArray[0x13] = TSP_TOP_REG(0x13);
6238*53ee8cc1Swenshuai.xi     //_u16ChipRegArray[0x14] = TSP_TOP_REG(0x14);
6239*53ee8cc1Swenshuai.xi     _u16ChipRegArray[0x36] = TSP_TOP_REG(0x36);
6240*53ee8cc1Swenshuai.xi     _u16ChipRegArray[0x37] = TSP_TOP_REG(0x37);
6241*53ee8cc1Swenshuai.xi     _u16ChipRegArray[0x40] = TSP_TOP_REG(0x40);
6242*53ee8cc1Swenshuai.xi     _u16ChipRegArray[0x57] = TSP_TOP_REG(0x57);
6243*53ee8cc1Swenshuai.xi     _u16ChipRegArray[0x5a] = TSP_TOP_REG(0x5a);
6244*53ee8cc1Swenshuai.xi     _u16ChipRegArray[0x67] = TSP_TOP_REG(0x67);
6245*53ee8cc1Swenshuai.xi 
6246*53ee8cc1Swenshuai.xi     for(u32ii = 0x27; u32ii <= 0x2b; u32ii++)
6247*53ee8cc1Swenshuai.xi     {
6248*53ee8cc1Swenshuai.xi         _u16ClkgenRegArray[u32ii] = TSP_CLKGEN0_REG(u32ii);
6249*53ee8cc1Swenshuai.xi     }
6250*53ee8cc1Swenshuai.xi     _u16ClkgenRegArray[0x7c] = TSP_CLKGEN0_REG(0x7c);
6251*53ee8cc1Swenshuai.xi     _u16ClkgenRegArray[0x7d] = TSP_CLKGEN0_REG(0x7d);
6252*53ee8cc1Swenshuai.xi     _u16ClkgenRegArray[0x7e] = TSP_CLKGEN0_REG(0x7e);
6253*53ee8cc1Swenshuai.xi 
6254*53ee8cc1Swenshuai.xi     _u16Clkgen2RegArray[0x0d] = TSP_CLKGEN2_REG(0x0d);
6255*53ee8cc1Swenshuai.xi     _u16Clkgen2RegArray[0x10] = TSP_CLKGEN2_REG(0x10);
6256*53ee8cc1Swenshuai.xi     _u16Clkgen2RegArray[0x11] = TSP_CLKGEN2_REG(0x11);
6257*53ee8cc1Swenshuai.xi     _u16Clkgen2RegArray[0x18] = TSP_CLKGEN2_REG(0x18);
6258*53ee8cc1Swenshuai.xi     _u16Clkgen2RegArray[0x19] = TSP_CLKGEN2_REG(0x19);
6259*53ee8cc1Swenshuai.xi 
6260*53ee8cc1Swenshuai.xi     for(u32ii = 0x01; u32ii <= 0x7f; u32ii++)
6261*53ee8cc1Swenshuai.xi     {
6262*53ee8cc1Swenshuai.xi         _u16TSP0RegArray[u32ii] = TSP_TSP0_REG(u32ii);
6263*53ee8cc1Swenshuai.xi     }
6264*53ee8cc1Swenshuai.xi     for(u32ii = 0x00; u32ii <= 0x7d; u32ii++)
6265*53ee8cc1Swenshuai.xi     {
6266*53ee8cc1Swenshuai.xi         _u16TSP1RegArray[u32ii] = TSP_TSP1_REG(u32ii);
6267*53ee8cc1Swenshuai.xi     }
6268*53ee8cc1Swenshuai.xi     for(u32ii = 0x10; u32ii <= 0x3f; u32ii++)
6269*53ee8cc1Swenshuai.xi     {
6270*53ee8cc1Swenshuai.xi         _u16TSP3RegArray[u32ii] = TSP_TSP3_REG(u32ii);
6271*53ee8cc1Swenshuai.xi     }
6272*53ee8cc1Swenshuai.xi     for(u32ii = 0x00; u32ii <= 0x62; u32ii++)
6273*53ee8cc1Swenshuai.xi     {
6274*53ee8cc1Swenshuai.xi         _u16TSP5RegArray[u32ii] = TSP_TSP5_REG(u32ii);
6275*53ee8cc1Swenshuai.xi     }
6276*53ee8cc1Swenshuai.xi 
6277*53ee8cc1Swenshuai.xi     return TRUE;
6278*53ee8cc1Swenshuai.xi }
6279*53ee8cc1Swenshuai.xi 
HAL_TSP_RestoreRegs(void)6280*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_RestoreRegs(void)
6281*53ee8cc1Swenshuai.xi {
6282*53ee8cc1Swenshuai.xi     MS_U32 u32ii = 0, u32temp = 0;
6283*53ee8cc1Swenshuai.xi 
6284*53ee8cc1Swenshuai.xi     TSP_TOP_REG(0x05) = _u16ChipRegArray[0x05];
6285*53ee8cc1Swenshuai.xi     TSP_TOP_REG(0x06) = _u16ChipRegArray[0x06];
6286*53ee8cc1Swenshuai.xi     TSP_TOP_REG(0x0e) = _u16ChipRegArray[0x0e];
6287*53ee8cc1Swenshuai.xi     //TSP_TOP_REG(0x10) = _u16ChipRegArray[0x10];
6288*53ee8cc1Swenshuai.xi     //TSP_TOP_REG(0x11) = _u16ChipRegArray[0x11];
6289*53ee8cc1Swenshuai.xi     //TSP_TOP_REG(0x13) = _u16ChipRegArray[0x13];
6290*53ee8cc1Swenshuai.xi     //TSP_TOP_REG(0x14) = _u16ChipRegArray[0x14];
6291*53ee8cc1Swenshuai.xi     TSP_TOP_REG(0x36) = _u16ChipRegArray[0x36];
6292*53ee8cc1Swenshuai.xi     TSP_TOP_REG(0x37) = _u16ChipRegArray[0x37];
6293*53ee8cc1Swenshuai.xi     TSP_TOP_REG(0x40) = _u16ChipRegArray[0x40];
6294*53ee8cc1Swenshuai.xi     TSP_TOP_REG(0x57) = _u16ChipRegArray[0x57];
6295*53ee8cc1Swenshuai.xi     TSP_TOP_REG(0x5a) = _u16ChipRegArray[0x5a];
6296*53ee8cc1Swenshuai.xi     TSP_TOP_REG(0x67) = _u16ChipRegArray[0x67];
6297*53ee8cc1Swenshuai.xi 
6298*53ee8cc1Swenshuai.xi     for(u32ii = 0x27; u32ii <= 0x2b; u32ii++)
6299*53ee8cc1Swenshuai.xi     {
6300*53ee8cc1Swenshuai.xi         TSP_CLKGEN0_REG(u32ii) = _u16ClkgenRegArray[u32ii];
6301*53ee8cc1Swenshuai.xi     }
6302*53ee8cc1Swenshuai.xi     TSP_CLKGEN0_REG(0x7c) = _u16ClkgenRegArray[0x7c];
6303*53ee8cc1Swenshuai.xi     TSP_CLKGEN0_REG(0x7d) = _u16ClkgenRegArray[0x7d];
6304*53ee8cc1Swenshuai.xi     TSP_CLKGEN0_REG(0x7e) = _u16ClkgenRegArray[0x7e];
6305*53ee8cc1Swenshuai.xi 
6306*53ee8cc1Swenshuai.xi     TSP_CLKGEN2_REG(0x0d) = _u16Clkgen2RegArray[0x0d];
6307*53ee8cc1Swenshuai.xi     TSP_CLKGEN2_REG(0x10) = _u16Clkgen2RegArray[0x10];
6308*53ee8cc1Swenshuai.xi     TSP_CLKGEN2_REG(0x11) = _u16Clkgen2RegArray[0x11];
6309*53ee8cc1Swenshuai.xi     TSP_CLKGEN2_REG(0x18) = _u16Clkgen2RegArray[0x18];
6310*53ee8cc1Swenshuai.xi     TSP_CLKGEN2_REG(0x19) = _u16Clkgen2RegArray[0x19];
6311*53ee8cc1Swenshuai.xi 
6312*53ee8cc1Swenshuai.xi     TSP_TSP0_REG(0x01) = _u16TSP0RegArray[0x01];
6313*53ee8cc1Swenshuai.xi     TSP_TSP0_REG(0x02) = _u16TSP0RegArray[0x02];
6314*53ee8cc1Swenshuai.xi     TSP_TSP0_REG(0x05) = _u16TSP0RegArray[0x05];
6315*53ee8cc1Swenshuai.xi     TSP_TSP0_REG(0x06) = _u16TSP0RegArray[0x06];
6316*53ee8cc1Swenshuai.xi     TSP_TSP0_REG(0x0e) |= (_u16TSP0RegArray[0x0e] & ~0x0058); //disable pvr2 record
6317*53ee8cc1Swenshuai.xi     TSP_TSP0_REG(0x0f) |= (_u16TSP0RegArray[0x0f] & ~0xC000);
6318*53ee8cc1Swenshuai.xi     TSP_TSP0_REG(0x12) = _u16TSP0RegArray[0x12];
6319*53ee8cc1Swenshuai.xi     TSP_TSP0_REG(0x13) = _u16TSP0RegArray[0x13];
6320*53ee8cc1Swenshuai.xi     TSP_TSP0_REG(0x16) = _u16TSP0RegArray[0x16];
6321*53ee8cc1Swenshuai.xi     TSP_TSP0_REG(0x17) = _u16TSP0RegArray[0x17];
6322*53ee8cc1Swenshuai.xi     TSP_TSP0_REG(0x18) = _u16TSP0RegArray[0x18];
6323*53ee8cc1Swenshuai.xi     TSP_TSP0_REG(0x19) = _u16TSP0RegArray[0x19];
6324*53ee8cc1Swenshuai.xi     TSP_TSP0_REG(0x1c) = _u16TSP0RegArray[0x1c];
6325*53ee8cc1Swenshuai.xi     TSP_TSP0_REG(0x1d) = _u16TSP0RegArray[0x1d];
6326*53ee8cc1Swenshuai.xi     TSP_TSP0_REG(0x1e) = _u16TSP0RegArray[0x1e];
6327*53ee8cc1Swenshuai.xi     TSP_TSP0_REG(0x1f) = _u16TSP0RegArray[0x1f];
6328*53ee8cc1Swenshuai.xi     TSP_TSP0_REG(0x2c) = _u16TSP0RegArray[0x2c];
6329*53ee8cc1Swenshuai.xi     TSP_TSP0_REG(0x2d) = _u16TSP0RegArray[0x2d];
6330*53ee8cc1Swenshuai.xi     for(u32ii = 0x38; u32ii <= 0x3d; u32ii++)
6331*53ee8cc1Swenshuai.xi     {
6332*53ee8cc1Swenshuai.xi         TSP_TSP0_REG(u32ii) = _u16TSP0RegArray[u32ii];
6333*53ee8cc1Swenshuai.xi     }
6334*53ee8cc1Swenshuai.xi     TSP_TSP0_REG(0x42) = _u16TSP0RegArray[0x42];
6335*53ee8cc1Swenshuai.xi     TSP_TSP0_REG(0x43) = _u16TSP0RegArray[0x43];
6336*53ee8cc1Swenshuai.xi     TSP_TSP0_REG(0x44) |= (_u16TSP0RegArray[0x44] & ~0x0052); //disable pvr1 record
6337*53ee8cc1Swenshuai.xi     TSP_TSP0_REG(0x45) = _u16TSP0RegArray[0x45];
6338*53ee8cc1Swenshuai.xi     TSP_TSP0_REG(0x50) = _u16TSP0RegArray[0x50];
6339*53ee8cc1Swenshuai.xi     TSP_TSP0_REG(0x51) = _u16TSP0RegArray[0x51];
6340*53ee8cc1Swenshuai.xi     TSP_TSP0_REG(0x54) = _u16TSP0RegArray[0x54];
6341*53ee8cc1Swenshuai.xi     TSP_TSP0_REG(0x55) = _u16TSP0RegArray[0x55];
6342*53ee8cc1Swenshuai.xi     TSP_TSP0_REG(0x5a) = _u16TSP0RegArray[0x5a];
6343*53ee8cc1Swenshuai.xi     TSP_TSP0_REG(0x5b) |= (_u16TSP0RegArray[0x5b] & ~0x0180);
6344*53ee8cc1Swenshuai.xi     for(u32ii = 0x70; u32ii <= 0x77; u32ii++)
6345*53ee8cc1Swenshuai.xi     {
6346*53ee8cc1Swenshuai.xi         TSP_TSP0_REG(u32ii) = _u16TSP0RegArray[u32ii];
6347*53ee8cc1Swenshuai.xi     }
6348*53ee8cc1Swenshuai.xi     TSP_TSP0_REG(0x7a) |= (_u16TSP0RegArray[0x7a] & 0x0070);
6349*53ee8cc1Swenshuai.xi     TSP_TSP0_REG(0x7b) = _u16TSP0RegArray[0x7b];
6350*53ee8cc1Swenshuai.xi     TSP_TSP0_REG(0x7e) = _u16TSP0RegArray[0x7e];
6351*53ee8cc1Swenshuai.xi     TSP_TSP0_REG(0x7f) |= (_u16TSP0RegArray[0x7f] & ~0x8000);
6352*53ee8cc1Swenshuai.xi 
6353*53ee8cc1Swenshuai.xi     TSP_TSP1_REG(0x06) |= (_u16TSP1RegArray[0x06] & ~0x800F);
6354*53ee8cc1Swenshuai.xi     TSP_TSP1_REG(0x07) |= (_u16TSP1RegArray[0x07] & ~0x0C00);
6355*53ee8cc1Swenshuai.xi     TSP_TSP1_REG(0x08) |= (_u16TSP1RegArray[0x08] & ~0x0200);
6356*53ee8cc1Swenshuai.xi     TSP_TSP1_REG(0x09) = _u16TSP1RegArray[0x09];
6357*53ee8cc1Swenshuai.xi     TSP_TSP1_REG(0x0b) = _u16TSP1RegArray[0x0b];
6358*53ee8cc1Swenshuai.xi     for(u32ii = 0x14; u32ii <= 0x1b; u32ii++)
6359*53ee8cc1Swenshuai.xi     {
6360*53ee8cc1Swenshuai.xi         TSP_TSP1_REG(u32ii) = _u16TSP1RegArray[u32ii];
6361*53ee8cc1Swenshuai.xi     }
6362*53ee8cc1Swenshuai.xi     TSP_TSP1_REG(0x1c) |= _u16TSP1RegArray[0x1c] & ~0x0040;
6363*53ee8cc1Swenshuai.xi     TSP_TSP1_REG(0x1e) = _u16TSP1RegArray[0x1e];
6364*53ee8cc1Swenshuai.xi     for(u32ii = 0x2a; u32ii <= 0x39; u32ii++)
6365*53ee8cc1Swenshuai.xi     {
6366*53ee8cc1Swenshuai.xi         TSP_TSP1_REG(u32ii) = _u16TSP1RegArray[u32ii];
6367*53ee8cc1Swenshuai.xi     }
6368*53ee8cc1Swenshuai.xi     TSP_TSP1_REG(0x40) = _u16TSP1RegArray[0x40];
6369*53ee8cc1Swenshuai.xi     TSP_TSP1_REG(0x41) = _u16TSP1RegArray[0x41];
6370*53ee8cc1Swenshuai.xi     TSP_TSP1_REG(0x42) = _u16TSP1RegArray[0x42];
6371*53ee8cc1Swenshuai.xi     TSP_TSP1_REG(0x43) = _u16TSP1RegArray[0x43];
6372*53ee8cc1Swenshuai.xi     TSP_TSP1_REG(0x4a) = _u16TSP1RegArray[0x4a];
6373*53ee8cc1Swenshuai.xi     TSP_TSP1_REG(0x4b) = _u16TSP1RegArray[0x4b];
6374*53ee8cc1Swenshuai.xi     TSP_TSP1_REG(0x4e) = _u16TSP1RegArray[0x4e];
6375*53ee8cc1Swenshuai.xi     TSP_TSP1_REG(0x4f) = _u16TSP1RegArray[0x4f];
6376*53ee8cc1Swenshuai.xi     TSP_TSP1_REG(0x50) = _u16TSP1RegArray[0x50];
6377*53ee8cc1Swenshuai.xi     TSP_TSP1_REG(0x51) |= (_u16TSP1RegArray[0x51] & 0x000F);
6378*53ee8cc1Swenshuai.xi     TSP_TSP1_REG(0x58) = _u16TSP1RegArray[0x58];
6379*53ee8cc1Swenshuai.xi     TSP_TSP1_REG(0x59) = _u16TSP1RegArray[0x59];
6380*53ee8cc1Swenshuai.xi     TSP_TSP1_REG(0x5a) |= (_u16TSP1RegArray[0x5a] & ~0x00d3);
6381*53ee8cc1Swenshuai.xi     TSP_TSP1_REG(0x6c) = _u16TSP1RegArray[0x6c];
6382*53ee8cc1Swenshuai.xi     TSP_TSP1_REG(0x6d) = _u16TSP1RegArray[0x6d];
6383*53ee8cc1Swenshuai.xi     TSP_TSP1_REG(0x6e) = _u16TSP1RegArray[0x6e];
6384*53ee8cc1Swenshuai.xi     TSP_TSP1_REG(0x72) |= (_u16TSP1RegArray[0x72] & ~0x4050);
6385*53ee8cc1Swenshuai.xi     TSP_TSP1_REG(0x73) = _u16TSP1RegArray[0x73];
6386*53ee8cc1Swenshuai.xi     for(u32ii = 0x10; u32ii <= 0x3f; u32ii++)
6387*53ee8cc1Swenshuai.xi     {
6388*53ee8cc1Swenshuai.xi         TSP_TSP3_REG(u32ii) = _u16TSP3RegArray[u32ii];
6389*53ee8cc1Swenshuai.xi     }
6390*53ee8cc1Swenshuai.xi     for(u32ii = 0x00; u32ii <= 0x62; u32ii++)
6391*53ee8cc1Swenshuai.xi     {
6392*53ee8cc1Swenshuai.xi         TSP_TSP5_REG(u32ii) = _u16TSP5RegArray[u32ii];
6393*53ee8cc1Swenshuai.xi     }
6394*53ee8cc1Swenshuai.xi 
6395*53ee8cc1Swenshuai.xi     //file in start
6396*53ee8cc1Swenshuai.xi     if(_u16TSP0RegArray[0x3e] & 0x0081)
6397*53ee8cc1Swenshuai.xi     {
6398*53ee8cc1Swenshuai.xi         u32temp = ((MS_U32)_u16TSP1RegArray[0x04]) + ((MS_U32)_u16TSP1RegArray[0x05] >>16);
6399*53ee8cc1Swenshuai.xi         HAL_TSP_SetPlayBackTimeStamp(u32temp);
6400*53ee8cc1Swenshuai.xi         TSP_TSP0_REG(0x3e) = _u16TSP0RegArray[0x3e];
6401*53ee8cc1Swenshuai.xi     }
6402*53ee8cc1Swenshuai.xi 
6403*53ee8cc1Swenshuai.xi     return TRUE;
6404*53ee8cc1Swenshuai.xi }
6405*53ee8cc1Swenshuai.xi #endif  //MSOS_TYPE_LINUX_KERNEL
6406