xref: /utopia/UTPA2-700.0.x/modules/dmx/hal/mooney/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) 2008-2009 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 //--------------------------------------------------------------------------------------------------
104*53ee8cc1Swenshuai.xi //  Driver Compiler Option
105*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
106*53ee8cc1Swenshuai.xi #define TSP_HAL_REG_SAFE_MODE       1UL                                   // Register protection access between 1 task and 1+ ISR
107*53ee8cc1Swenshuai.xi 
108*53ee8cc1Swenshuai.xi //[HWBUG]
109*53ee8cc1Swenshuai.xi #define MULTI_ACCESS_SW_PATCH       1UL                                   // It's still risk becuase some registers like readaddr will
110*53ee8cc1Swenshuai.xi 
111*53ee8cc1Swenshuai.xi // @FIXME: remove the test later
112*53ee8cc1Swenshuai.xi #define LINUX_TEST                  0UL
113*53ee8cc1Swenshuai.xi                                                                         // cause overflow before patching to correct value.
114*53ee8cc1Swenshuai.xi #define MIU_BUS                     4UL
115*53ee8cc1Swenshuai.xi 
116*53ee8cc1Swenshuai.xi #define VQ_PACKET_UNIT_LEN          192UL  //192 bytes
117*53ee8cc1Swenshuai.xi 
118*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
119*53ee8cc1Swenshuai.xi //  TSP Hardware Abstraction Layer
120*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
121*53ee8cc1Swenshuai.xi static REG_Ctrl*   _TspCtrl  = NULL;  // TSP0 & TSP1
122*53ee8cc1Swenshuai.xi static REG_Ctrl2*  _TspCtrl2 = NULL;  // TSP2
123*53ee8cc1Swenshuai.xi static REG_Ctrl3*  _TspCtrl3 = NULL;  // TSP3
124*53ee8cc1Swenshuai.xi 
125*53ee8cc1Swenshuai.xi static MS_VIRT _virtRegBase = 0;
126*53ee8cc1Swenshuai.xi 
127*53ee8cc1Swenshuai.xi extern MS_BOOL _bIsHK;
128*53ee8cc1Swenshuai.xi static MS_S32 _s32HALTSPMutexId = -1;
129*53ee8cc1Swenshuai.xi static MS_BOOL _b64STCMode = FALSE;
130*53ee8cc1Swenshuai.xi 
131*53ee8cc1Swenshuai.xi static MS_PHY       _phyOrLoadMiuOffset = 0;
132*53ee8cc1Swenshuai.xi static MS_PHY       _phySecBufMiuOffset = 0;
133*53ee8cc1Swenshuai.xi static MS_PHY       _phyFIBufMiuOffset = 0;
134*53ee8cc1Swenshuai.xi static MS_PHY       _phyPVRBufMiuOffset[TSP_PVR_IF_NUM] = {[0 ... (TSP_PVR_IF_NUM-1)] = 0UL};
135*53ee8cc1Swenshuai.xi 
136*53ee8cc1Swenshuai.xi static MS_BOOL _bTsPadUsed[TSP_TS_PAD_NUM] = {FALSE};
137*53ee8cc1Swenshuai.xi 
138*53ee8cc1Swenshuai.xi //[NOTE] Jerry
139*53ee8cc1Swenshuai.xi // Some register has write order, for example, writing PCR_L will disable PCR counter
140*53ee8cc1Swenshuai.xi // writing PCR_M trigger nothing, writing PCR_H will enable PCR counter
141*53ee8cc1Swenshuai.xi #define _HAL_REG32_W(reg, value)    do { (reg)->L = ((value) & 0x0000FFFFUL);                          \
142*53ee8cc1Swenshuai.xi                                     (reg)->H = ((value) >> 16UL); } while(0)
143*53ee8cc1Swenshuai.xi 
144*53ee8cc1Swenshuai.xi #define _HAL_REG32L_W(reg, value)   (reg)->data = ((value) & 0x0000FFFFUL);
145*53ee8cc1Swenshuai.xi 
146*53ee8cc1Swenshuai.xi #define _HAL_REG16_W(reg, value)    (reg)->u16data = (value);
147*53ee8cc1Swenshuai.xi 
148*53ee8cc1Swenshuai.xi 
149*53ee8cc1Swenshuai.xi #define _HAL_HALTSP_ENTRY()         do{ \
150*53ee8cc1Swenshuai.xi                                         if(_s32HALTSPMutexId == -1)         \
151*53ee8cc1Swenshuai.xi                                             _s32HALTSPMutexId = MsOS_CreateMutex(E_MSOS_FIFO, "HALTSP_Mutex", MSOS_PROCESS_SHARED); \
152*53ee8cc1Swenshuai.xi                                     }while(0)
153*53ee8cc1Swenshuai.xi #define _HAL_HALTSP_EXIT()          do{  \
154*53ee8cc1Swenshuai.xi                                         if(_s32HALTSPMutexId != -1)                                     \
155*53ee8cc1Swenshuai.xi                                         {   \
156*53ee8cc1Swenshuai.xi                                             MsOS_DeleteMutex(_s32HALTSPMutexId);    _s32HALTSPMutexId = -1; \
157*53ee8cc1Swenshuai.xi                                         }   \
158*53ee8cc1Swenshuai.xi                                     }while(0)
159*53ee8cc1Swenshuai.xi 
160*53ee8cc1Swenshuai.xi #define _HAL_HALTSP_LOCK()          (MsOS_ObtainMutex(_s32HALTSPMutexId, MSOS_WAIT_FOREVER))
161*53ee8cc1Swenshuai.xi #define _HAL_HALTSP_UNLOCK()        (MsOS_ReleaseMutex(_s32HALTSPMutexId))
162*53ee8cc1Swenshuai.xi 
163*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
164*53ee8cc1Swenshuai.xi //  Macro of bit operations
165*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
166*53ee8cc1Swenshuai.xi #define HAS_FLAG(flag, bit)        ((flag) & (bit))
167*53ee8cc1Swenshuai.xi #define SET_FLAG(flag, bit)        ((flag)|= (bit))
168*53ee8cc1Swenshuai.xi #define RESET_FLAG(flag, bit)      ((flag)&= (~(bit)))
169*53ee8cc1Swenshuai.xi #define SET_FLAG1(flag, bit)       ((flag)|  (bit))
170*53ee8cc1Swenshuai.xi #define RESET_FLAG1(flag, bit)     ((flag)&  (~(bit)))
171*53ee8cc1Swenshuai.xi 
172*53ee8cc1Swenshuai.xi //#define MASK(x)                 (((1<<(x##_BITS))-1) << x##_SHIFT)
173*53ee8cc1Swenshuai.xi //#define BIT(x)                  (1<<(x))
174*53ee8cc1Swenshuai.xi //#define BMASK(bits)                 (BIT(((1)?bits)+1)-BIT(((0)?bits)))
175*53ee8cc1Swenshuai.xi // #define BMASK_L(bits)               (BMASK(bits)&0xFFFF)
176*53ee8cc1Swenshuai.xi // #define BMASK_H(bits)               (BMASK(bits)>>16)
177*53ee8cc1Swenshuai.xi //#define BITS(bits,value)            ((BIT(((1)?bits)+1)-BIT(((0)?bits))) & (value<<((0)?bits)))
178*53ee8cc1Swenshuai.xi 
179*53ee8cc1Swenshuai.xi #define TSP_INT_REG(addr)       (*((volatile MS_U16*)(_virtRegBase + 0x3200UL + ((addr)<<2UL))))
180*53ee8cc1Swenshuai.xi 
181*53ee8cc1Swenshuai.xi #define TSP_CLKGEN0_REG(addr)       (*((volatile MS_U16*)(_virtRegBase + 0x1600UL + ((addr)<<2UL))))
182*53ee8cc1Swenshuai.xi     #define REG_CLKGEN0_DC0_SYTNTH              0x04UL
183*53ee8cc1Swenshuai.xi         #define REG_CLKGEN0_STC_CW_SEL          0x0002UL
184*53ee8cc1Swenshuai.xi         #define REG_CLKGEN0_STC_CW_EN           0x0004UL
185*53ee8cc1Swenshuai.xi         #define REG_CLKGEN0_STC_REF_DIV2_EN     0x0008UL
186*53ee8cc1Swenshuai.xi     #define REG_CLKGEN0_DC0_STC_CW_L            0x05UL
187*53ee8cc1Swenshuai.xi     #define REG_CLKGEN0_DC0_STC_CW_H            0x06UL
188*53ee8cc1Swenshuai.xi 
189*53ee8cc1Swenshuai.xi     #define REG_CLKGEN0_TSN_CLK                 0x28UL
190*53ee8cc1Swenshuai.xi         #define REG_CLKGEN0_TSN_CLK_MASK        0x1FUL
191*53ee8cc1Swenshuai.xi         #define REG_CLKGEN0_TSN_CLK_DEMOD       0x1CUL
192*53ee8cc1Swenshuai.xi         #define REG_CLKGEN0_TSN_CLK_TS0_SHIFT   0UL
193*53ee8cc1Swenshuai.xi         #define REG_CLKGEN0_TSN_CLK_TS1_SHIFT   8UL
194*53ee8cc1Swenshuai.xi         //#define TSP_CLK_TS0                        0
195*53ee8cc1Swenshuai.xi         //#define TSP_CLK_INDEMOD                 7
196*53ee8cc1Swenshuai.xi         // bit[4:0] -> ts0  -> 0: disable clock
197*53ee8cc1Swenshuai.xi         //                     1: invert clock
198*53ee8cc1Swenshuai.xi         //                     bit [4:2] -> 0: TS0
199*53ee8cc1Swenshuai.xi         //                                      7: Internal Demmod
200*53ee8cc1Swenshuai.xi         // bit[12:8] -> ts1 -> 0: disable clock
201*53ee8cc1Swenshuai.xi         //                     1: invert clock
202*53ee8cc1Swenshuai.xi         //                     bit [4:2] -> 0: TS0
203*53ee8cc1Swenshuai.xi         //                                      7: Internal Demmod
204*53ee8cc1Swenshuai.xi #define TSP_TOP_REG(addr)           (*((volatile MS_U16*)(_virtRegBase + 0x3c00UL + ((addr)<<2UL))))
205*53ee8cc1Swenshuai.xi     #define REG_TOP_TS0_PE                  0x0EUL
206*53ee8cc1Swenshuai.xi     #define REG_TOP_TS1_PE                  0x06UL
207*53ee8cc1Swenshuai.xi     #define REG_TOP_TS2_PE                  0x36UL
208*53ee8cc1Swenshuai.xi     #define REG_TOP_TS_PE_MASK                      0x07FFUL
209*53ee8cc1Swenshuai.xi 
210*53ee8cc1Swenshuai.xi     #define REG_TOP_TSN_MUX                 0x11UL
211*53ee8cc1Swenshuai.xi         #define REG_TOP_TSN_MUX_MASK                    0x0FUL
212*53ee8cc1Swenshuai.xi         #define REG_TOP_TSN_MUX_TS0_SHIFT               0UL
213*53ee8cc1Swenshuai.xi         #define REG_TOP_TSN_MUX_TS1_SHIFT               8UL
214*53ee8cc1Swenshuai.xi         // bit[3:0] -> ts0  ->   0: TS0
215*53ee8cc1Swenshuai.xi         //                             7: Demod
216*53ee8cc1Swenshuai.xi         // bit[10:8] -> ts1  -> 0: TS0
217*53ee8cc1Swenshuai.xi         //                             7: Demod
218*53ee8cc1Swenshuai.xi     #define REG_TOP_TSCONFIG                    0x57UL
219*53ee8cc1Swenshuai.xi         #define REG_TOP_TS_TS1_CFG_MASK                     0x07UL
220*53ee8cc1Swenshuai.xi         #define REG_TOP_TS1CFG_SHIFT                        11UL
221*53ee8cc1Swenshuai.xi         #define REG_TOP_TSCFG_DISABLE_PAD                   0UL
222*53ee8cc1Swenshuai.xi         #define REG_TOP_TS1_PARALLEL_IN                     1UL
223*53ee8cc1Swenshuai.xi         #define REG_TOP_TS1_SERIAL_IN                       3UL
224*53ee8cc1Swenshuai.xi 
225*53ee8cc1Swenshuai.xi         #define REG_TOP_TS_TS2_CFG_MASK                     0x03UL
226*53ee8cc1Swenshuai.xi         #define REG_TOP_TS2CFG_SHIFT                        14UL
227*53ee8cc1Swenshuai.xi         #define REG_TOP_TSCFG_DISABLE_PAD                   0UL
228*53ee8cc1Swenshuai.xi         #define REG_TOP_TS2_SERIAL_IN                       1UL
229*53ee8cc1Swenshuai.xi 
230*53ee8cc1Swenshuai.xi 
231*53ee8cc1Swenshuai.xi         // bit[10:8] ->    0: Disable
232*53ee8cc1Swenshuai.xi         //                     1: use all PAD_TS0 pads
233*53ee8cc1Swenshuai.xi         //                     2: e PAD_TS0_VLD, PAD_TS0_SYNC, PAD_TS0_CLK and PAD_TS0_D0 pads
234*53ee8cc1Swenshuai.xi         //                     3: mspi mode
235*53ee8cc1Swenshuai.xi         //                     4: 3 wire mode
236*53ee8cc1Swenshuai.xi 
237*53ee8cc1Swenshuai.xi #define ABS_DIFF(x1, x2)            (((x1) > (x2))? ((x1) - (x2)) : ((x2) - (x1)))
238*53ee8cc1Swenshuai.xi #define IsCover(_start1, _end1, _start2, _end2) (ABS_DIFF(_end1, _end2) < (((_end1) > (_end2))?((_end1)-(_start1)):((_end2)-(_start2))) )?TRUE:FALSE
239*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
240*53ee8cc1Swenshuai.xi //  Forward declaration
241*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
242*53ee8cc1Swenshuai.xi static void _HAL_TSP_FW_load(
243*53ee8cc1Swenshuai.xi     MS_PHY                     phyFwAddrPhys,
244*53ee8cc1Swenshuai.xi     MS_U32                     u32FwSize,
245*53ee8cc1Swenshuai.xi     MS_BOOL                    bFwDMA,
246*53ee8cc1Swenshuai.xi     MS_BOOL                    bIQmem,
247*53ee8cc1Swenshuai.xi     MS_BOOL                    bDQmem);
248*53ee8cc1Swenshuai.xi 
249*53ee8cc1Swenshuai.xi static void _HAL_TSP_tsif_select(MS_U8 u8_tsif);
250*53ee8cc1Swenshuai.xi // static void _HAL_TSP_SelPad(MS_U32 u32EngId, MS_U32 PadId);
251*53ee8cc1Swenshuai.xi 
252*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
253*53ee8cc1Swenshuai.xi //  Implementation
254*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
_delay(void)255*53ee8cc1Swenshuai.xi static void _delay(void)
256*53ee8cc1Swenshuai.xi {
257*53ee8cc1Swenshuai.xi     volatile MS_U32 i;
258*53ee8cc1Swenshuai.xi     for (i = 0; i< 0xFFFFUL; i++);
259*53ee8cc1Swenshuai.xi }
260*53ee8cc1Swenshuai.xi 
_HAL_REG32_R(REG32 * reg)261*53ee8cc1Swenshuai.xi static MS_U32 _HAL_REG32_R(REG32 *reg)
262*53ee8cc1Swenshuai.xi {
263*53ee8cc1Swenshuai.xi     MS_U32     value = 0UL;
264*53ee8cc1Swenshuai.xi     value  = (reg)->H << 16UL;
265*53ee8cc1Swenshuai.xi     value |= (reg)->L;
266*53ee8cc1Swenshuai.xi     return value;
267*53ee8cc1Swenshuai.xi }
268*53ee8cc1Swenshuai.xi 
_HAL_REG32L_R(REG32_L * reg)269*53ee8cc1Swenshuai.xi static MS_U16 _HAL_REG32L_R(REG32_L *reg)
270*53ee8cc1Swenshuai.xi {
271*53ee8cc1Swenshuai.xi     MS_U16     value;
272*53ee8cc1Swenshuai.xi     value = (reg)->data;
273*53ee8cc1Swenshuai.xi     return value;
274*53ee8cc1Swenshuai.xi }
275*53ee8cc1Swenshuai.xi 
_HAL_REG16_R(REG16 * reg)276*53ee8cc1Swenshuai.xi static MS_U16 _HAL_REG16_R(REG16 *reg)
277*53ee8cc1Swenshuai.xi {
278*53ee8cc1Swenshuai.xi     MS_U16              value = 0;
279*53ee8cc1Swenshuai.xi     value = (reg)->u16data;
280*53ee8cc1Swenshuai.xi     return value;
281*53ee8cc1Swenshuai.xi }
282*53ee8cc1Swenshuai.xi 
_HAL_TSP_MIU_OFFSET(MS_PHY Phyaddr)283*53ee8cc1Swenshuai.xi static MS_PHY _HAL_TSP_MIU_OFFSET(MS_PHY Phyaddr)
284*53ee8cc1Swenshuai.xi {
285*53ee8cc1Swenshuai.xi     #ifdef HAL_MIU2_BASE
286*53ee8cc1Swenshuai.xi     if(Phyaddr >= (MS_PHY)HAL_MIU2_BASE)
287*53ee8cc1Swenshuai.xi         return (MS_PHY)HAL_MIU2_BASE;
288*53ee8cc1Swenshuai.xi     else
289*53ee8cc1Swenshuai.xi     #endif  //HAL_MIU2_BUS_BASE
290*53ee8cc1Swenshuai.xi     #ifdef HAL_MIU1_BASE
291*53ee8cc1Swenshuai.xi     if(Phyaddr >= (MS_PHY)HAL_MIU1_BASE)
292*53ee8cc1Swenshuai.xi         return (MS_PHY)HAL_MIU1_BASE;
293*53ee8cc1Swenshuai.xi     else
294*53ee8cc1Swenshuai.xi     #endif //HAL_MIU1_BUS_BASE
295*53ee8cc1Swenshuai.xi         return (MS_PHY)HAL_MIU0_BASE;
296*53ee8cc1Swenshuai.xi }
297*53ee8cc1Swenshuai.xi 
298*53ee8cc1Swenshuai.xi #define REG16_T(addr)           (*((volatile MS_U16*)(addr)))
299*53ee8cc1Swenshuai.xi #define ADDR_INDR_CTRL          (_virtRegBase+ 0x2b20UL)
300*53ee8cc1Swenshuai.xi #define ADDR_INDR_ADDR0         (_virtRegBase+ 0x2b24UL)
301*53ee8cc1Swenshuai.xi #define ADDR_INDR_ADDR1         (_virtRegBase+ 0x2b28UL)
302*53ee8cc1Swenshuai.xi #define ADDR_INDR_WRITE0        (_virtRegBase+ 0x2b2cUL)
303*53ee8cc1Swenshuai.xi #define ADDR_INDR_WRITE1        (_virtRegBase+ 0x2b30UL)
304*53ee8cc1Swenshuai.xi #define ADDR_INDR_READ0         (_virtRegBase+ 0x2b34UL)
305*53ee8cc1Swenshuai.xi #define ADDR_INDR_READ1         (_virtRegBase+ 0x2b38UL)
306*53ee8cc1Swenshuai.xi 
307*53ee8cc1Swenshuai.xi #if 0
308*53ee8cc1Swenshuai.xi #define XBYTE_1591              (_virtRegBase+ 0x2a0cUL)  // TsRec_Head21_Mid20
309*53ee8cc1Swenshuai.xi #define XBYTE_15A4              (_virtRegBase+ 0x2a10UL)  // TsRec_Mid21_Tail20
310*53ee8cc1Swenshuai.xi #define XBYTE_15A6              (_virtRegBase+ 0x2b48UL)  // TsRec_Mid
311*53ee8cc1Swenshuai.xi 
312*53ee8cc1Swenshuai.xi void HAL_TSP_HW_Lock_Init(void)
313*53ee8cc1Swenshuai.xi {
314*53ee8cc1Swenshuai.xi     REG16_T(XBYTE_1591) = 0;
315*53ee8cc1Swenshuai.xi     REG16_T(XBYTE_15A4) = 0;
316*53ee8cc1Swenshuai.xi     REG16_T(XBYTE_15A6) = 0;
317*53ee8cc1Swenshuai.xi }
318*53ee8cc1Swenshuai.xi 
319*53ee8cc1Swenshuai.xi void _HAL_TSP_HW_Lock(void)
320*53ee8cc1Swenshuai.xi {
321*53ee8cc1Swenshuai.xi #ifdef MCU_HK
322*53ee8cc1Swenshuai.xi     REG16_T(XBYTE_1591) = 0xFF;
323*53ee8cc1Swenshuai.xi     REG16_T(XBYTE_15A4) = 0xFF;
324*53ee8cc1Swenshuai.xi     while (REG16_T(XBYTE_15A4) && REG16_T(XBYTE_15A6));
325*53ee8cc1Swenshuai.xi     REG16_T(XBYTE_1591) = 0xFF;
326*53ee8cc1Swenshuai.xi #else // MIPS HK
327*53ee8cc1Swenshuai.xi     REG16_T(XBYTE_15A6) = 0xFF;
328*53ee8cc1Swenshuai.xi     REG16_T(XBYTE_15A4) = 0x00;
329*53ee8cc1Swenshuai.xi     while (REG16_T(XBYTE_1591) && (REG16_T(XBYTE_15A4)==0));
330*53ee8cc1Swenshuai.xi #endif
331*53ee8cc1Swenshuai.xi }
332*53ee8cc1Swenshuai.xi 
333*53ee8cc1Swenshuai.xi void _HAL_TSP_HW_Unlock(void)
334*53ee8cc1Swenshuai.xi {
335*53ee8cc1Swenshuai.xi #ifdef MCU_HK
336*53ee8cc1Swenshuai.xi     REG16_T(XBYTE_1591) = 0x00;
337*53ee8cc1Swenshuai.xi #else
338*53ee8cc1Swenshuai.xi     REG16_T(XBYTE_15A6) = 0x00;
339*53ee8cc1Swenshuai.xi #endif
340*53ee8cc1Swenshuai.xi }
341*53ee8cc1Swenshuai.xi 
342*53ee8cc1Swenshuai.xi #undef XBYTE_1591
343*53ee8cc1Swenshuai.xi #undef XBYTE_15A4
344*53ee8cc1Swenshuai.xi #undef XBYTE_15A6
345*53ee8cc1Swenshuai.xi 
346*53ee8cc1Swenshuai.xi #else
347*53ee8cc1Swenshuai.xi 
348*53ee8cc1Swenshuai.xi #define TSP_SEM_AEON              (_virtRegBase+ 0xC1480UL)   //TSP_HW_SEMAPHORE0, TS3 0x20
349*53ee8cc1Swenshuai.xi #define TSP_SEM_ORDER             (_virtRegBase+ 0xC1484UL)  // TSP_HW_SEMAPHORE1, TS3 0x21
350*53ee8cc1Swenshuai.xi #define TSP_SEM_MIPS              (_virtRegBase+ 0xC1488UL)  // TSP_HW_SEMAPHORE2, TS3 0x22
351*53ee8cc1Swenshuai.xi 
HAL_TSP_HW_Lock_Init(void)352*53ee8cc1Swenshuai.xi void HAL_TSP_HW_Lock_Init(void)
353*53ee8cc1Swenshuai.xi {
354*53ee8cc1Swenshuai.xi     REG16_T(TSP_SEM_AEON) = 0;
355*53ee8cc1Swenshuai.xi     REG16_T(TSP_SEM_MIPS) = 0;
356*53ee8cc1Swenshuai.xi     REG16_T(TSP_SEM_ORDER) = 0;
357*53ee8cc1Swenshuai.xi 
358*53ee8cc1Swenshuai.xi     _HAL_HALTSP_ENTRY();
359*53ee8cc1Swenshuai.xi }
360*53ee8cc1Swenshuai.xi 
_HAL_TSP_HW_TryLock(MS_BOOL bInit)361*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_TSP_HW_TryLock(MS_BOOL bInit)
362*53ee8cc1Swenshuai.xi {
363*53ee8cc1Swenshuai.xi     if (_bIsHK)
364*53ee8cc1Swenshuai.xi     {
365*53ee8cc1Swenshuai.xi         if (bInit)
366*53ee8cc1Swenshuai.xi         {
367*53ee8cc1Swenshuai.xi             REG16_T(TSP_SEM_AEON) = 0xFFFF;
368*53ee8cc1Swenshuai.xi             REG16_T(TSP_SEM_ORDER) = 0xFFFF;
369*53ee8cc1Swenshuai.xi         }
370*53ee8cc1Swenshuai.xi         if (REG16_T(TSP_SEM_ORDER) && REG16_T(TSP_SEM_MIPS))
371*53ee8cc1Swenshuai.xi         {
372*53ee8cc1Swenshuai.xi             // REG16_T(TSP_SEM_AEON) = 0x0000;
373*53ee8cc1Swenshuai.xi             return FALSE;
374*53ee8cc1Swenshuai.xi         }
375*53ee8cc1Swenshuai.xi         return TRUE;
376*53ee8cc1Swenshuai.xi     }
377*53ee8cc1Swenshuai.xi     else
378*53ee8cc1Swenshuai.xi     {
379*53ee8cc1Swenshuai.xi         if (bInit)
380*53ee8cc1Swenshuai.xi         {
381*53ee8cc1Swenshuai.xi             REG16_T(TSP_SEM_MIPS) = 0xFFFF;
382*53ee8cc1Swenshuai.xi             REG16_T(TSP_SEM_ORDER) = 0x00;
383*53ee8cc1Swenshuai.xi         }
384*53ee8cc1Swenshuai.xi         if ((REG16_T(TSP_SEM_ORDER) ==0) && (REG16_T(TSP_SEM_AEON)))
385*53ee8cc1Swenshuai.xi         {
386*53ee8cc1Swenshuai.xi             // REG16_T(TSP_SEM_MIPS) = 0x0000;
387*53ee8cc1Swenshuai.xi             return FALSE;
388*53ee8cc1Swenshuai.xi         }
389*53ee8cc1Swenshuai.xi         return TRUE;
390*53ee8cc1Swenshuai.xi     }
391*53ee8cc1Swenshuai.xi }
392*53ee8cc1Swenshuai.xi 
_HAL_TSP_HW_Lock(void)393*53ee8cc1Swenshuai.xi static void _HAL_TSP_HW_Lock(void)
394*53ee8cc1Swenshuai.xi {
395*53ee8cc1Swenshuai.xi     if (FALSE == _HAL_TSP_HW_TryLock(TRUE))
396*53ee8cc1Swenshuai.xi     {
397*53ee8cc1Swenshuai.xi         while (FALSE == _HAL_TSP_HW_TryLock(FALSE));
398*53ee8cc1Swenshuai.xi     }
399*53ee8cc1Swenshuai.xi }
400*53ee8cc1Swenshuai.xi 
_HAL_TSP_HW_Unlock(void)401*53ee8cc1Swenshuai.xi static void _HAL_TSP_HW_Unlock(void)
402*53ee8cc1Swenshuai.xi {
403*53ee8cc1Swenshuai.xi     if (_bIsHK)
404*53ee8cc1Swenshuai.xi     {
405*53ee8cc1Swenshuai.xi         REG16_T(TSP_SEM_AEON) = 0x00;
406*53ee8cc1Swenshuai.xi     }
407*53ee8cc1Swenshuai.xi     else
408*53ee8cc1Swenshuai.xi     {
409*53ee8cc1Swenshuai.xi         REG16_T(TSP_SEM_MIPS) = 0x00;
410*53ee8cc1Swenshuai.xi     }
411*53ee8cc1Swenshuai.xi }
412*53ee8cc1Swenshuai.xi 
HAL_TSP_HW_Lock_Release(void)413*53ee8cc1Swenshuai.xi void HAL_TSP_HW_Lock_Release(void)
414*53ee8cc1Swenshuai.xi {
415*53ee8cc1Swenshuai.xi     REG16_T(TSP_SEM_AEON) = 0x00;
416*53ee8cc1Swenshuai.xi     REG16_T(TSP_SEM_MIPS) = 0x00;
417*53ee8cc1Swenshuai.xi 
418*53ee8cc1Swenshuai.xi     _HAL_HALTSP_EXIT();
419*53ee8cc1Swenshuai.xi 
420*53ee8cc1Swenshuai.xi 
421*53ee8cc1Swenshuai.xi }
422*53ee8cc1Swenshuai.xi 
HAL_TSP_TTX_IsAccess(MS_U32 u32Try)423*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_TTX_IsAccess(MS_U32 u32Try)
424*53ee8cc1Swenshuai.xi {
425*53ee8cc1Swenshuai.xi     if(u32Try == 0)
426*53ee8cc1Swenshuai.xi         return FALSE;
427*53ee8cc1Swenshuai.xi 
428*53ee8cc1Swenshuai.xi     if (_bIsHK)
429*53ee8cc1Swenshuai.xi     {
430*53ee8cc1Swenshuai.xi         if ( REG16_T(TSP_SEM_AEON))
431*53ee8cc1Swenshuai.xi         {
432*53ee8cc1Swenshuai.xi             return FALSE;
433*53ee8cc1Swenshuai.xi         }
434*53ee8cc1Swenshuai.xi     }
435*53ee8cc1Swenshuai.xi     else
436*53ee8cc1Swenshuai.xi     {
437*53ee8cc1Swenshuai.xi         if (REG16_T(TSP_SEM_MIPS))
438*53ee8cc1Swenshuai.xi         {
439*53ee8cc1Swenshuai.xi             return FALSE;
440*53ee8cc1Swenshuai.xi         }
441*53ee8cc1Swenshuai.xi     }
442*53ee8cc1Swenshuai.xi 
443*53ee8cc1Swenshuai.xi     if (_HAL_TSP_HW_TryLock(TRUE))
444*53ee8cc1Swenshuai.xi     {
445*53ee8cc1Swenshuai.xi         return TRUE;
446*53ee8cc1Swenshuai.xi     }
447*53ee8cc1Swenshuai.xi 
448*53ee8cc1Swenshuai.xi     _HAL_TSP_HW_Unlock();
449*53ee8cc1Swenshuai.xi     return FALSE;
450*53ee8cc1Swenshuai.xi }
451*53ee8cc1Swenshuai.xi 
HAL_TSP_TTX_UnlockAccess(void)452*53ee8cc1Swenshuai.xi void HAL_TSP_TTX_UnlockAccess(void)
453*53ee8cc1Swenshuai.xi {
454*53ee8cc1Swenshuai.xi     _HAL_TSP_HW_Unlock();
455*53ee8cc1Swenshuai.xi }
456*53ee8cc1Swenshuai.xi 
457*53ee8cc1Swenshuai.xi #undef TSP_SEM_AEON
458*53ee8cc1Swenshuai.xi #undef TSP_SEM_MIPS
459*53ee8cc1Swenshuai.xi #undef TSP_SEM_ORDER
460*53ee8cc1Swenshuai.xi 
461*53ee8cc1Swenshuai.xi #endif
462*53ee8cc1Swenshuai.xi 
HAL_REG32_IndR(REG32 * reg)463*53ee8cc1Swenshuai.xi MS_U32 HAL_REG32_IndR(REG32 *reg)
464*53ee8cc1Swenshuai.xi {
465*53ee8cc1Swenshuai.xi     MS_VIRT virtReg = (MS_VIRT)reg;
466*53ee8cc1Swenshuai.xi     MS_U32 u32Ret;
467*53ee8cc1Swenshuai.xi 
468*53ee8cc1Swenshuai.xi     _HAL_TSP_HW_Lock();
469*53ee8cc1Swenshuai.xi 
470*53ee8cc1Swenshuai.xi     _HAL_HALTSP_LOCK();
471*53ee8cc1Swenshuai.xi 
472*53ee8cc1Swenshuai.xi     // set address
473*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_ADDR0)=   (MS_U16)(virtReg>> 1UL);
474*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_ADDR1)=   (MS_U16)(virtReg>> 17UL);
475*53ee8cc1Swenshuai.xi 
476*53ee8cc1Swenshuai.xi     // set command
477*53ee8cc1Swenshuai.xi     // REG16_T(ADDR_INDR_CTRL)=    (TSP_IDR_MCUWAIT | TSP_IDR_READ | TSP_IDR_START);
478*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_CTRL)=    REG16_T(ADDR_INDR_CTRL) & 0xFF00;
479*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_CTRL)=    REG16_T(ADDR_INDR_CTRL) | (TSP_IDR_MCUWAIT | TSP_IDR_READ | TSP_IDR_START);
480*53ee8cc1Swenshuai.xi 
481*53ee8cc1Swenshuai.xi     // get read value
482*53ee8cc1Swenshuai.xi     u32Ret = ((MS_U32)(REG16_T(ADDR_INDR_READ0))| ((MS_U32)(REG16_T(ADDR_INDR_READ1)<< 16UL)));
483*53ee8cc1Swenshuai.xi 
484*53ee8cc1Swenshuai.xi     _HAL_HALTSP_UNLOCK();
485*53ee8cc1Swenshuai.xi     _HAL_TSP_HW_Unlock();
486*53ee8cc1Swenshuai.xi     return u32Ret;
487*53ee8cc1Swenshuai.xi }
488*53ee8cc1Swenshuai.xi 
HAL_REG32_IndR_tmp(REG32 * reg)489*53ee8cc1Swenshuai.xi static MS_U32 HAL_REG32_IndR_tmp(REG32 *reg)
490*53ee8cc1Swenshuai.xi {
491*53ee8cc1Swenshuai.xi     MS_VIRT virtReg = (MS_VIRT)reg;
492*53ee8cc1Swenshuai.xi     MS_U32 u32Ret;
493*53ee8cc1Swenshuai.xi 
494*53ee8cc1Swenshuai.xi     _HAL_HALTSP_LOCK();
495*53ee8cc1Swenshuai.xi 
496*53ee8cc1Swenshuai.xi     // set address
497*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_ADDR0)=   (MS_U16)(virtReg>> 1UL);
498*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_ADDR1)=   (MS_U16)(virtReg>> 17UL);
499*53ee8cc1Swenshuai.xi 
500*53ee8cc1Swenshuai.xi     // set command
501*53ee8cc1Swenshuai.xi     // REG16_T(ADDR_INDR_CTRL)=    (TSP_IDR_MCUWAIT | TSP_IDR_READ | TSP_IDR_START);
502*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_CTRL)=    REG16_T(ADDR_INDR_CTRL) & 0xFF00;
503*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_CTRL)=    REG16_T(ADDR_INDR_CTRL) | (TSP_IDR_MCUWAIT | TSP_IDR_READ | TSP_IDR_START);
504*53ee8cc1Swenshuai.xi 
505*53ee8cc1Swenshuai.xi     // get read value
506*53ee8cc1Swenshuai.xi     u32Ret = ((MS_U32)(REG16_T(ADDR_INDR_READ0))| ((MS_U32)(REG16_T(ADDR_INDR_READ1)<< 16)));
507*53ee8cc1Swenshuai.xi 
508*53ee8cc1Swenshuai.xi     _HAL_HALTSP_UNLOCK();
509*53ee8cc1Swenshuai.xi 
510*53ee8cc1Swenshuai.xi     return u32Ret;
511*53ee8cc1Swenshuai.xi }
HAL_REG32_IndW_tmp(REG32 * reg,MS_U32 value)512*53ee8cc1Swenshuai.xi static void HAL_REG32_IndW_tmp(REG32 *reg, MS_U32 value)
513*53ee8cc1Swenshuai.xi {
514*53ee8cc1Swenshuai.xi     MS_VIRT virtReg = (MS_VIRT)reg;
515*53ee8cc1Swenshuai.xi     _HAL_HALTSP_LOCK();
516*53ee8cc1Swenshuai.xi 
517*53ee8cc1Swenshuai.xi     // set address
518*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_ADDR0)=   (MS_U16)(virtReg>> 1UL);
519*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_ADDR1)=   (MS_U16)(virtReg>> 17UL);
520*53ee8cc1Swenshuai.xi 
521*53ee8cc1Swenshuai.xi     // set write value
522*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_WRITE0)=  (MS_U16)value;
523*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_WRITE1)=  (MS_U16)(value >> 16UL);
524*53ee8cc1Swenshuai.xi 
525*53ee8cc1Swenshuai.xi     // set command
526*53ee8cc1Swenshuai.xi     // REG16_T(ADDR_INDR_CTRL)=    (TSP_IDR_MCUWAIT | TSP_IDR_WRITE | TSP_IDR_START);
527*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_CTRL)=    REG16_T(ADDR_INDR_CTRL) & 0xFF00;
528*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_CTRL)=    REG16_T(ADDR_INDR_CTRL) | (TSP_IDR_MCUWAIT | TSP_IDR_WRITE | TSP_IDR_START);
529*53ee8cc1Swenshuai.xi 
530*53ee8cc1Swenshuai.xi     _HAL_HALTSP_UNLOCK();
531*53ee8cc1Swenshuai.xi }
532*53ee8cc1Swenshuai.xi 
HAL_REG32_IndW(REG32 * reg,MS_U32 value)533*53ee8cc1Swenshuai.xi void HAL_REG32_IndW(REG32 *reg, MS_U32 value)
534*53ee8cc1Swenshuai.xi {
535*53ee8cc1Swenshuai.xi     MS_VIRT virtReg = (MS_VIRT)reg;
536*53ee8cc1Swenshuai.xi     _HAL_TSP_HW_Lock();
537*53ee8cc1Swenshuai.xi 
538*53ee8cc1Swenshuai.xi     _HAL_HALTSP_LOCK();
539*53ee8cc1Swenshuai.xi 
540*53ee8cc1Swenshuai.xi     // set address
541*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_ADDR0)=   (MS_U16)(virtReg>> 1UL);
542*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_ADDR1)=   (MS_U16)(virtReg>> 17UL);
543*53ee8cc1Swenshuai.xi 
544*53ee8cc1Swenshuai.xi     // set write value
545*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_WRITE0)=  (MS_U16)value;
546*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_WRITE1)=  (MS_U16)(value >> 16UL);
547*53ee8cc1Swenshuai.xi 
548*53ee8cc1Swenshuai.xi     // set command
549*53ee8cc1Swenshuai.xi     // REG16_T(ADDR_INDR_CTRL)=    (TSP_IDR_MCUWAIT | TSP_IDR_WRITE | TSP_IDR_START);
550*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_CTRL)=    REG16_T(ADDR_INDR_CTRL) & 0xFF00;
551*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_CTRL)=    REG16_T(ADDR_INDR_CTRL) | (TSP_IDR_MCUWAIT | TSP_IDR_WRITE | TSP_IDR_START);
552*53ee8cc1Swenshuai.xi 
553*53ee8cc1Swenshuai.xi     _HAL_HALTSP_UNLOCK();
554*53ee8cc1Swenshuai.xi 
555*53ee8cc1Swenshuai.xi     _HAL_TSP_HW_Unlock();
556*53ee8cc1Swenshuai.xi }
557*53ee8cc1Swenshuai.xi 
558*53ee8cc1Swenshuai.xi static MS_U16 u16LastAddr0, u16LastAddr1, u16LastWrite0, u16LastWrite1, u16LastRead0, u16LastRead1;
559*53ee8cc1Swenshuai.xi 
560*53ee8cc1Swenshuai.xi static MS_U32                       _u32PidFltBuf[(TSP_PIDFLT_NUM_ALL*sizeof(REG_PidFlt))>> 3];
561*53ee8cc1Swenshuai.xi static MS_U32                       _u32SecFltBuf[TSP_SECFLT_NUM*((sizeof(REG_SecFlt)-sizeof((((REG_SecFlt*)0)->_x50)))>> 3)];
562*53ee8cc1Swenshuai.xi //[LEGACY] //[OBSOLETE]
563*53ee8cc1Swenshuai.xi MS_BOOL                             _bIsHK = TRUE;
564*53ee8cc1Swenshuai.xi //[LEGACY] //[OBSOLETE]
HAL_TSP_SaveFltState(void)565*53ee8cc1Swenshuai.xi void HAL_TSP_SaveFltState(void)
566*53ee8cc1Swenshuai.xi {
567*53ee8cc1Swenshuai.xi     MS_U32 u32EngId;
568*53ee8cc1Swenshuai.xi     MS_U32 i, j;
569*53ee8cc1Swenshuai.xi     MS_U32 u32SecEnd = ((size_t)&(((REG_SecFlt*)0)->_x50))/sizeof(REG32);
570*53ee8cc1Swenshuai.xi 
571*53ee8cc1Swenshuai.xi     for (u32EngId = 0; u32EngId < TSP_ENGINE_NUM; u32EngId++)
572*53ee8cc1Swenshuai.xi     {
573*53ee8cc1Swenshuai.xi        for (i = 0; i < TSP_PIDFLT_NUM_ALL; i++)
574*53ee8cc1Swenshuai.xi        {
575*53ee8cc1Swenshuai.xi             REG_PidFlt *pPidFilter = &(_TspPid[u32EngId].Flt[i]);
576*53ee8cc1Swenshuai.xi             _u32PidFltBuf[i] = HAL_REG32_IndR(pPidFilter);
577*53ee8cc1Swenshuai.xi        }
578*53ee8cc1Swenshuai.xi        j = 0;
579*53ee8cc1Swenshuai.xi        for (i = 0; i < TSP_SECFLT_NUM; i++)
580*53ee8cc1Swenshuai.xi        {
581*53ee8cc1Swenshuai.xi             REG32* pRegStart = (REG32*) &(_TspSec[u32EngId].Flt[i]);
582*53ee8cc1Swenshuai.xi             // REG32* pRegEnd = (REG32*)&(_TspSec[u32EngId].Flt[i + 1]);
583*53ee8cc1Swenshuai.xi             REG32* pRegEnd = pRegStart + u32SecEnd;
584*53ee8cc1Swenshuai.xi             REG32* pReg = pRegStart;
585*53ee8cc1Swenshuai.xi             while (pReg < pRegEnd)
586*53ee8cc1Swenshuai.xi             {
587*53ee8cc1Swenshuai.xi                 _u32SecFltBuf[j] = HAL_REG32_IndR(pReg);
588*53ee8cc1Swenshuai.xi                 j++;
589*53ee8cc1Swenshuai.xi                 pReg++;
590*53ee8cc1Swenshuai.xi             }
591*53ee8cc1Swenshuai.xi         }
592*53ee8cc1Swenshuai.xi     }
593*53ee8cc1Swenshuai.xi }
HAL_TSP_RestoreFltState(void)594*53ee8cc1Swenshuai.xi void HAL_TSP_RestoreFltState(void)
595*53ee8cc1Swenshuai.xi {
596*53ee8cc1Swenshuai.xi     MS_U32 u32EngId;
597*53ee8cc1Swenshuai.xi     MS_U32 i, j;
598*53ee8cc1Swenshuai.xi     MS_U32 u32SecEnd = ((size_t)&(((REG_SecFlt*)0)->_x50))/sizeof(REG32);
599*53ee8cc1Swenshuai.xi 
600*53ee8cc1Swenshuai.xi     for (u32EngId = 0; u32EngId < TSP_ENGINE_NUM; u32EngId++)
601*53ee8cc1Swenshuai.xi     {
602*53ee8cc1Swenshuai.xi        for (i = 0; i < TSP_PIDFLT_NUM_ALL; i++)
603*53ee8cc1Swenshuai.xi        {
604*53ee8cc1Swenshuai.xi             REG_PidFlt *pPidFilter = &(_TspPid[u32EngId].Flt[i]);
605*53ee8cc1Swenshuai.xi             HAL_REG32_IndW(pPidFilter, _u32PidFltBuf[i]);
606*53ee8cc1Swenshuai.xi        }
607*53ee8cc1Swenshuai.xi        j = 0;
608*53ee8cc1Swenshuai.xi        for (i = 0; i < TSP_SECFLT_NUM; i++)
609*53ee8cc1Swenshuai.xi        {
610*53ee8cc1Swenshuai.xi             REG32* pRegStart = (REG32*) &(_TspSec[u32EngId].Flt[i]);
611*53ee8cc1Swenshuai.xi             REG32* pRegEnd = pRegStart + u32SecEnd;
612*53ee8cc1Swenshuai.xi             REG32* pReg = pRegStart;
613*53ee8cc1Swenshuai.xi             while (pReg < pRegEnd)
614*53ee8cc1Swenshuai.xi             {
615*53ee8cc1Swenshuai.xi                 HAL_REG32_IndW(pReg, _u32SecFltBuf[j]);
616*53ee8cc1Swenshuai.xi                 j++;
617*53ee8cc1Swenshuai.xi                 pReg++;
618*53ee8cc1Swenshuai.xi             }
619*53ee8cc1Swenshuai.xi         }
620*53ee8cc1Swenshuai.xi     }
621*53ee8cc1Swenshuai.xi }
622*53ee8cc1Swenshuai.xi 
623*53ee8cc1Swenshuai.xi 
HAL_TSP_ISR_SAVE_ALL(void)624*53ee8cc1Swenshuai.xi void HAL_TSP_ISR_SAVE_ALL(void)
625*53ee8cc1Swenshuai.xi {
626*53ee8cc1Swenshuai.xi     // save address
627*53ee8cc1Swenshuai.xi     u16LastAddr0=               (MS_U16)REG16_T(ADDR_INDR_ADDR0);
628*53ee8cc1Swenshuai.xi     u16LastAddr1=               (MS_U16)REG16_T(ADDR_INDR_ADDR1);
629*53ee8cc1Swenshuai.xi 
630*53ee8cc1Swenshuai.xi     // save write
631*53ee8cc1Swenshuai.xi     u16LastWrite0=              (MS_U16)REG16_T(ADDR_INDR_WRITE0);
632*53ee8cc1Swenshuai.xi     u16LastWrite1=              (MS_U16)REG16_T(ADDR_INDR_WRITE1);
633*53ee8cc1Swenshuai.xi 
634*53ee8cc1Swenshuai.xi     // save read
635*53ee8cc1Swenshuai.xi     u16LastRead0=               (MS_U16)REG16_T(ADDR_INDR_READ0);
636*53ee8cc1Swenshuai.xi     u16LastRead1=               (MS_U16)REG16_T(ADDR_INDR_READ1);
637*53ee8cc1Swenshuai.xi }
638*53ee8cc1Swenshuai.xi 
HAL_TSP_ISR_RESTORE_ALL(void)639*53ee8cc1Swenshuai.xi void HAL_TSP_ISR_RESTORE_ALL(void)
640*53ee8cc1Swenshuai.xi {
641*53ee8cc1Swenshuai.xi     // restore read
642*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_READ0)=   u16LastRead0;
643*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_READ1)=   u16LastRead1;
644*53ee8cc1Swenshuai.xi 
645*53ee8cc1Swenshuai.xi     // restore write
646*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_WRITE0)=  u16LastWrite0;
647*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_WRITE1)=  u16LastWrite1;
648*53ee8cc1Swenshuai.xi 
649*53ee8cc1Swenshuai.xi     // restore addr
650*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_ADDR0)=   u16LastAddr0;
651*53ee8cc1Swenshuai.xi     REG16_T(ADDR_INDR_ADDR1)=   u16LastAddr1;
652*53ee8cc1Swenshuai.xi }
653*53ee8cc1Swenshuai.xi #undef ADDR_INDR_CTRL
654*53ee8cc1Swenshuai.xi #undef ADDR_INDR_ADDR0
655*53ee8cc1Swenshuai.xi #undef ADDR_INDR_ADDR1
656*53ee8cc1Swenshuai.xi #undef ADDR_INDR_WRITE0
657*53ee8cc1Swenshuai.xi #undef ADDR_INDR_WRITE1
658*53ee8cc1Swenshuai.xi #undef ADDR_INDR_READ0
659*53ee8cc1Swenshuai.xi #undef ADDR_INDR_READ1
660*53ee8cc1Swenshuai.xi 
661*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
662*53ee8cc1Swenshuai.xi // For MISC part
663*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
HAL_TSP_Scmb_Detect(MS_BOOL bEnable)664*53ee8cc1Swenshuai.xi void HAL_TSP_Scmb_Detect(MS_BOOL bEnable)
665*53ee8cc1Swenshuai.xi {
666*53ee8cc1Swenshuai.xi     if (bEnable)
667*53ee8cc1Swenshuai.xi     {
668*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].reg15b4,
669*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg15b4), TSP_match_pid_scr_ts_ld| TSP_match_pid_scr_fi_ld));
670*53ee8cc1Swenshuai.xi     }
671*53ee8cc1Swenshuai.xi     else
672*53ee8cc1Swenshuai.xi     {
673*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].reg15b4,
674*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg15b4), TSP_match_pid_scr_ts_ld| TSP_match_pid_scr_fi_ld));
675*53ee8cc1Swenshuai.xi     }
676*53ee8cc1Swenshuai.xi }
677*53ee8cc1Swenshuai.xi 
HAL_TSP_CSA_Set_ScrmPath(MS_U32 u32ScrmPath)678*53ee8cc1Swenshuai.xi void HAL_TSP_CSA_Set_ScrmPath(MS_U32 u32ScrmPath)
679*53ee8cc1Swenshuai.xi {
680*53ee8cc1Swenshuai.xi     _HAL_REG32L_W(&_TspCtrl[0].CA_CTRL, u32ScrmPath);
681*53ee8cc1Swenshuai.xi }
682*53ee8cc1Swenshuai.xi 
HAL_TSP_Set_AVPAUSE(MS_BOOL bSet)683*53ee8cc1Swenshuai.xi void HAL_TSP_Set_AVPAUSE(MS_BOOL bSet)
684*53ee8cc1Swenshuai.xi {
685*53ee8cc1Swenshuai.xi     if (bSet)
686*53ee8cc1Swenshuai.xi     {
687*53ee8cc1Swenshuai.xi         _HAL_REG32L_W(&_TspCtrl[0].CA_CTRL,
688*53ee8cc1Swenshuai.xi             SET_FLAG1(_HAL_REG32L_R(&_TspCtrl[0].CA_CTRL), TSP_CA_AVPAUSE));
689*53ee8cc1Swenshuai.xi     }
690*53ee8cc1Swenshuai.xi     else
691*53ee8cc1Swenshuai.xi     {
692*53ee8cc1Swenshuai.xi         _HAL_REG32L_W(&_TspCtrl[0].CA_CTRL,
693*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG32L_R(&_TspCtrl[0].CA_CTRL), TSP_CA_AVPAUSE));
694*53ee8cc1Swenshuai.xi     }
695*53ee8cc1Swenshuai.xi }
696*53ee8cc1Swenshuai.xi 
HAL_TSP_CSA_Get_ScrmPath(void)697*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_CSA_Get_ScrmPath(void)
698*53ee8cc1Swenshuai.xi {
699*53ee8cc1Swenshuai.xi     return (MS_U32)(_HAL_REG32L_R(&_TspCtrl[0].CA_CTRL) & TSP_CA_CTRL_MASK);
700*53ee8cc1Swenshuai.xi }
701*53ee8cc1Swenshuai.xi 
702*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
703*53ee8cc1Swenshuai.xi // For PID filter part
704*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
HAL_TSP_PidFlt_GetFltOutput(REG_PidFlt * pPidFilter)705*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_PidFlt_GetFltOutput(REG_PidFlt *pPidFilter)
706*53ee8cc1Swenshuai.xi {
707*53ee8cc1Swenshuai.xi     return (HAL_REG32_IndR((REG32 *)pPidFilter) & TSP_PIDFLT_OUT_MASK);
708*53ee8cc1Swenshuai.xi }
709*53ee8cc1Swenshuai.xi 
HAL_TSP_PidFlt_GetPid(REG_PidFlt * pPidFilter)710*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_PidFlt_GetPid(REG_PidFlt* pPidFilter)
711*53ee8cc1Swenshuai.xi {
712*53ee8cc1Swenshuai.xi     return (HAS_FLAG(HAL_REG32_IndR((REG32 *)pPidFilter), TSP_PIDFLT_PID_MASK)>> TSP_PIDFLT_PID_SHFT);
713*53ee8cc1Swenshuai.xi }
714*53ee8cc1Swenshuai.xi 
HAL_TSP_PidFlt_SetPid(REG_PidFlt * pPidFilter,MS_U32 u32PID)715*53ee8cc1Swenshuai.xi void HAL_TSP_PidFlt_SetPid(REG_PidFlt *pPidFilter, MS_U32 u32PID)
716*53ee8cc1Swenshuai.xi {
717*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));
718*53ee8cc1Swenshuai.xi }
719*53ee8cc1Swenshuai.xi 
HAL_TSP_PidFlt_SelFltOutput(REG_PidFlt * pPidFilter,MS_U32 u32FltOutput)720*53ee8cc1Swenshuai.xi void HAL_TSP_PidFlt_SelFltOutput(REG_PidFlt *pPidFilter, MS_U32 u32FltOutput)
721*53ee8cc1Swenshuai.xi {
722*53ee8cc1Swenshuai.xi     HAL_REG32_IndW((REG32 *)pPidFilter, (HAL_REG32_IndR((REG32 *)pPidFilter) & ~TSP_PIDFLT_OUT_MASK) | (u32FltOutput & TSP_PIDFLT_OUT_MASK));
723*53ee8cc1Swenshuai.xi }
724*53ee8cc1Swenshuai.xi 
HAL_TSP_PidFlt_SelSecFlt(REG_PidFlt * pPidFilter,MS_U32 u32SecFltId)725*53ee8cc1Swenshuai.xi void HAL_TSP_PidFlt_SelSecFlt(REG_PidFlt *pPidFilter, MS_U32 u32SecFltId)
726*53ee8cc1Swenshuai.xi {
727*53ee8cc1Swenshuai.xi     HAL_REG32_IndW((REG32 *)pPidFilter, (HAL_REG32_IndR((REG32 *)pPidFilter) & ~TSP_PIDFLT_SECFLT_MASK) | ((u32SecFltId << TSP_PIDFLT_SECFLT_SHFT) & TSP_PIDFLT_SECFLT_MASK));
728*53ee8cc1Swenshuai.xi }
729*53ee8cc1Swenshuai.xi 
HAL_TSP_PidFlt_PVREnable(REG_PidFlt * pPidFilter)730*53ee8cc1Swenshuai.xi void HAL_TSP_PidFlt_PVREnable(REG_PidFlt *pPidFilter)
731*53ee8cc1Swenshuai.xi {
732*53ee8cc1Swenshuai.xi     HAL_REG32_IndW((REG32 *)pPidFilter, (HAL_REG32_IndR((REG32 *)pPidFilter) | TSP_PIDFLT_PVR_ENABLE));
733*53ee8cc1Swenshuai.xi }
734*53ee8cc1Swenshuai.xi 
735*53ee8cc1Swenshuai.xi 
HAL_TSP_SecFlt_SetType(REG_SecFlt * pSecFilter,MS_U32 u32FltType)736*53ee8cc1Swenshuai.xi void HAL_TSP_SecFlt_SetType(REG_SecFlt *pSecFilter, MS_U32 u32FltType)
737*53ee8cc1Swenshuai.xi {
738*53ee8cc1Swenshuai.xi     HAL_REG32_IndW((REG32 *)&pSecFilter->Ctrl, (HAL_REG32_IndR((REG32 *)&pSecFilter->Ctrl) & ~TSP_SECFLT_TYPE_MASK) | (u32FltType << TSP_SECFLT_TYPE_SHFT));
739*53ee8cc1Swenshuai.xi }
740*53ee8cc1Swenshuai.xi 
HAL_TSP_PidFlt_GetSecFlt(REG_PidFlt * pPidFilter)741*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_PidFlt_GetSecFlt(REG_PidFlt *pPidFilter)
742*53ee8cc1Swenshuai.xi {
743*53ee8cc1Swenshuai.xi     return ((HAL_REG32_IndR((REG32 *)pPidFilter) & TSP_PIDFLT_SECFLT_MASK) >> TSP_PIDFLT_SECFLT_SHFT);
744*53ee8cc1Swenshuai.xi }
745*53ee8cc1Swenshuai.xi 
HAL_TSP_PidFlt_SelFltSource(REG_PidFlt * pPidFilter,MS_U32 u32FltSource)746*53ee8cc1Swenshuai.xi void HAL_TSP_PidFlt_SelFltSource(REG_PidFlt *pPidFilter, MS_U32 u32FltSource)
747*53ee8cc1Swenshuai.xi {
748*53ee8cc1Swenshuai.xi     HAL_REG32_IndW((REG32 *)pPidFilter, (HAL_REG32_IndR((REG32 *)pPidFilter) & ~TSP_PIDFLT_IN_MASK) | (u32FltSource & TSP_PIDFLT_IN_MASK));
749*53ee8cc1Swenshuai.xi }
750*53ee8cc1Swenshuai.xi 
751*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
752*53ee8cc1Swenshuai.xi // For section filter part
753*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
HAL_TSP_SecFlt_GetSecBuf(REG_SecFlt * pSecFilter)754*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_SecFlt_GetSecBuf(REG_SecFlt *pSecFilter)
755*53ee8cc1Swenshuai.xi {
756*53ee8cc1Swenshuai.xi     return (pSecFilter - (REG_SecFlt*)REG_SECFLT_BASE)>> 8; // div 0x100
757*53ee8cc1Swenshuai.xi }
758*53ee8cc1Swenshuai.xi 
HAL_TSP_SecFlt_ResetState(REG_SecFlt * pSecFilter)759*53ee8cc1Swenshuai.xi void HAL_TSP_SecFlt_ResetState(REG_SecFlt* pSecFilter)
760*53ee8cc1Swenshuai.xi {
761*53ee8cc1Swenshuai.xi     HAL_REG32_IndW((REG32 *)&pSecFilter->Ctrl, HAL_REG32_IndR((REG32 *)&pSecFilter->Ctrl) & ~(TSP_SECFLT_STATE_MASK));
762*53ee8cc1Swenshuai.xi }
763*53ee8cc1Swenshuai.xi 
HAL_TSP_SecFlt_SetRmnCount(REG_SecFlt * pSecFilter,MS_U32 u32RmnCount)764*53ee8cc1Swenshuai.xi void HAL_TSP_SecFlt_SetRmnCount(REG_SecFlt *pSecFilter, MS_U32 u32RmnCount)
765*53ee8cc1Swenshuai.xi {
766*53ee8cc1Swenshuai.xi     HAL_REG32_IndW((REG32 *)&pSecFilter->RmnReqCnt, (HAL_REG32_IndR((REG32 *)&pSecFilter->RmnReqCnt) & ~TSP_SECFLT_RMNCNT_MASK) |
767*53ee8cc1Swenshuai.xi                                     ((u32RmnCount << TSP_SECFLT_RMNCNT_SHFT) & TSP_SECFLT_RMNCNT_MASK));
768*53ee8cc1Swenshuai.xi }
769*53ee8cc1Swenshuai.xi 
HAL_TSP_SecFlt_ClrCtrl(REG_SecFlt * pSecFilter)770*53ee8cc1Swenshuai.xi void HAL_TSP_SecFlt_ClrCtrl(REG_SecFlt *pSecFilter)
771*53ee8cc1Swenshuai.xi {
772*53ee8cc1Swenshuai.xi     HAL_REG32_IndW((REG32 *)&pSecFilter->Ctrl, 0);
773*53ee8cc1Swenshuai.xi }
774*53ee8cc1Swenshuai.xi 
775*53ee8cc1Swenshuai.xi 
HAL_TSP_SW_INT_STATUS(void)776*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_SW_INT_STATUS(void)
777*53ee8cc1Swenshuai.xi {
778*53ee8cc1Swenshuai.xi     if (_bIsHK)
779*53ee8cc1Swenshuai.xi     {
780*53ee8cc1Swenshuai.xi         return _HAL_REG32_R(&_TspCtrl[0].SwInt_Stat);
781*53ee8cc1Swenshuai.xi     }
782*53ee8cc1Swenshuai.xi     else
783*53ee8cc1Swenshuai.xi     {
784*53ee8cc1Swenshuai.xi         MS_U32 u32SwIntStatus = (MS_U32)_HAL_REG16_R(&_TspCtrl[0].SwInt_Stat1_M);
785*53ee8cc1Swenshuai.xi         u32SwIntStatus |= ((_HAL_REG32_R(&_TspCtrl[0].SwInt_Stat1_H) & TSP_SWINT1_H_MASK) >> TSP_SWINT1_H_SHFT)<< 16;
786*53ee8cc1Swenshuai.xi         return u32SwIntStatus;
787*53ee8cc1Swenshuai.xi     }
788*53ee8cc1Swenshuai.xi }
789*53ee8cc1Swenshuai.xi 
790*53ee8cc1Swenshuai.xi // match mask --> 0 will compare
HAL_TSP_SecFlt_SetMask(REG_SecFlt * pSecFilter,MS_U8 * pu8Mask)791*53ee8cc1Swenshuai.xi void HAL_TSP_SecFlt_SetMask(REG_SecFlt *pSecFilter, MS_U8 *pu8Mask)
792*53ee8cc1Swenshuai.xi {
793*53ee8cc1Swenshuai.xi     MS_U32 i;
794*53ee8cc1Swenshuai.xi     MS_U32 u32Temp;
795*53ee8cc1Swenshuai.xi     MS_U32 j;
796*53ee8cc1Swenshuai.xi 
797*53ee8cc1Swenshuai.xi     for (i = 0; i < (TSP_FILTER_DEPTH/sizeof(MS_U32)); i++)
798*53ee8cc1Swenshuai.xi     {
799*53ee8cc1Swenshuai.xi         j = (i<< 2);
800*53ee8cc1Swenshuai.xi         u32Temp =  (pu8Mask[j]) | (pu8Mask[j+ 1] << 8  ) | (pu8Mask[j+ 2] << 16  )| (pu8Mask[j+ 3] << 24);
801*53ee8cc1Swenshuai.xi         HAL_REG32_IndW((REG32 *)&pSecFilter->Mask[i], u32Temp);
802*53ee8cc1Swenshuai.xi     }
803*53ee8cc1Swenshuai.xi }
804*53ee8cc1Swenshuai.xi 
805*53ee8cc1Swenshuai.xi // not match mask --> 1 will compare
HAL_TSP_SecFlt_SetNMask(REG_SecFlt * pSecFilter,MS_U8 * pu8NMask)806*53ee8cc1Swenshuai.xi void HAL_TSP_SecFlt_SetNMask(REG_SecFlt *pSecFilter, MS_U8 *pu8NMask)
807*53ee8cc1Swenshuai.xi {
808*53ee8cc1Swenshuai.xi     MS_U32 u32FltId;
809*53ee8cc1Swenshuai.xi     MS_U32 u32Temp;
810*53ee8cc1Swenshuai.xi     REG_SecFlt* ptempSecFlt = &(_TspSec[0].Flt[31]);
811*53ee8cc1Swenshuai.xi 
812*53ee8cc1Swenshuai.xi     u32Temp =  (pu8NMask[0x0]) | (pu8NMask[0x1] << 8  ) | (pu8NMask[0x2] << 16  )| (pu8NMask[0x3] << 24);
813*53ee8cc1Swenshuai.xi     HAL_REG32_IndW(&(ptempSecFlt->Match[0]), u32Temp);
814*53ee8cc1Swenshuai.xi 
815*53ee8cc1Swenshuai.xi     u32Temp =  (pu8NMask[0x4]) | (pu8NMask[0x5] << 8  ) | (pu8NMask[0x6] << 16  )| (pu8NMask[0x7] << 24);
816*53ee8cc1Swenshuai.xi     HAL_REG32_IndW(&(ptempSecFlt->Match[1]), u32Temp);
817*53ee8cc1Swenshuai.xi 
818*53ee8cc1Swenshuai.xi     u32Temp =  (pu8NMask[0x8]) | (pu8NMask[0x9] << 8  ) | (pu8NMask[0xa] << 16  )| (pu8NMask[0xb] << 24);
819*53ee8cc1Swenshuai.xi     HAL_REG32_IndW(&(ptempSecFlt->Match[2]), u32Temp);
820*53ee8cc1Swenshuai.xi 
821*53ee8cc1Swenshuai.xi     u32Temp =  (pu8NMask[0xc]) | (pu8NMask[0xd] << 8  ) | (pu8NMask[0xe] << 16  )| (pu8NMask[0xf] << 24);
822*53ee8cc1Swenshuai.xi     HAL_REG32_IndW(&(ptempSecFlt->Match[3]), u32Temp);
823*53ee8cc1Swenshuai.xi 
824*53ee8cc1Swenshuai.xi     u32FltId = (MS_U32)(pSecFilter - (REG_SecFlt*)REG_SECFLT_BASE);
825*53ee8cc1Swenshuai.xi 
826*53ee8cc1Swenshuai.xi     //printf("[%s][%d] u32FltId %d\n", __FUNCTION__, __LINE__, (unsigned int)u32FltId);
827*53ee8cc1Swenshuai.xi 
828*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, TSP_MCU_CMD_NMATCH | u32FltId);
829*53ee8cc1Swenshuai.xi 
830*53ee8cc1Swenshuai.xi     while (0 != _HAL_REG32_R(&_TspCtrl[0].MCU_Cmd));
831*53ee8cc1Swenshuai.xi }
832*53ee8cc1Swenshuai.xi 
HAL_TSP_SecFlt_SetMatch(REG_SecFlt * pSecFilter,MS_U8 * pu8Match)833*53ee8cc1Swenshuai.xi void HAL_TSP_SecFlt_SetMatch(REG_SecFlt *pSecFilter, MS_U8 *pu8Match)
834*53ee8cc1Swenshuai.xi {
835*53ee8cc1Swenshuai.xi     MS_U32 i;
836*53ee8cc1Swenshuai.xi     MS_U32 u32Temp;
837*53ee8cc1Swenshuai.xi     MS_U32 j;
838*53ee8cc1Swenshuai.xi 
839*53ee8cc1Swenshuai.xi     for (i = 0; i < (TSP_FILTER_DEPTH/sizeof(MS_U32)); i++)
840*53ee8cc1Swenshuai.xi     {
841*53ee8cc1Swenshuai.xi         j = (i<< 2);
842*53ee8cc1Swenshuai.xi         u32Temp =  (pu8Match[j]) | (pu8Match[j+ 1] << 8  ) | (pu8Match[j+ 2] << 16  )| (pu8Match[j+ 3] << 24);
843*53ee8cc1Swenshuai.xi         HAL_REG32_IndW((REG32 *)&pSecFilter->Match[i], u32Temp);
844*53ee8cc1Swenshuai.xi     }
845*53ee8cc1Swenshuai.xi }
846*53ee8cc1Swenshuai.xi 
HAL_TSP_SecFlt_SetReqCount(REG_SecFlt * pSecFilter,MS_U32 u32ReqCount)847*53ee8cc1Swenshuai.xi void HAL_TSP_SecFlt_SetReqCount(REG_SecFlt *pSecFilter, MS_U32 u32ReqCount)
848*53ee8cc1Swenshuai.xi {
849*53ee8cc1Swenshuai.xi     HAL_REG32_IndW((REG32 *)&pSecFilter->RmnReqCnt, (HAL_REG32_IndR((REG32 *)&pSecFilter->RmnReqCnt) & ~TSP_SECFLT_REQCNT_MASK) |
850*53ee8cc1Swenshuai.xi                                     ((u32ReqCount << TSP_SECFLT_REQCNT_SHFT) & TSP_SECFLT_REQCNT_MASK));
851*53ee8cc1Swenshuai.xi }
852*53ee8cc1Swenshuai.xi 
HAL_TSP_SecFlt_SetMode(REG_SecFlt * pSecFilter,MS_U32 u32SecFltMode)853*53ee8cc1Swenshuai.xi void HAL_TSP_SecFlt_SetMode(REG_SecFlt *pSecFilter, MS_U32 u32SecFltMode)
854*53ee8cc1Swenshuai.xi {
855*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));
856*53ee8cc1Swenshuai.xi }
857*53ee8cc1Swenshuai.xi 
HAL_TSP_SecFlt_GetCRC32(REG_SecFlt * pSecFilter)858*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_SecFlt_GetCRC32(REG_SecFlt *pSecFilter)
859*53ee8cc1Swenshuai.xi {
860*53ee8cc1Swenshuai.xi     return HAL_REG32_IndR((REG32 *)&pSecFilter->CRC32);
861*53ee8cc1Swenshuai.xi }
862*53ee8cc1Swenshuai.xi 
HAL_TSP_SecFlt_GetState(REG_SecFlt * pSecFilter)863*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_SecFlt_GetState(REG_SecFlt *pSecFilter)
864*53ee8cc1Swenshuai.xi {
865*53ee8cc1Swenshuai.xi     return ((HAL_REG32_IndR((REG32 *)&pSecFilter->Ctrl) & TSP_SECFLT_STATE_MASK) >> TSP_SECFLT_STATE_SHFT);
866*53ee8cc1Swenshuai.xi }
867*53ee8cc1Swenshuai.xi 
HAL_TSP_SecFlt_GetMode(REG_SecFlt * pSecFilter)868*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_SecFlt_GetMode(REG_SecFlt *pSecFilter)
869*53ee8cc1Swenshuai.xi {
870*53ee8cc1Swenshuai.xi     return ((HAL_REG32_IndR((REG32 *)&pSecFilter->Ctrl) & TSP_SECFLT_MODE_MASK) >> TSP_SECFLT_MODE_SHFT);
871*53ee8cc1Swenshuai.xi }
872*53ee8cc1Swenshuai.xi 
HAL_TSP_SecFlt_PcrReset(REG_SecFlt * pSecFilter)873*53ee8cc1Swenshuai.xi void HAL_TSP_SecFlt_PcrReset(REG_SecFlt *pSecFilter)
874*53ee8cc1Swenshuai.xi {
875*53ee8cc1Swenshuai.xi     HAL_REG32_IndW((REG32 *)&pSecFilter->Ctrl, HAL_REG32_IndR((REG32 *)&pSecFilter->Ctrl) | TSP_SECFLT_PCRRST);
876*53ee8cc1Swenshuai.xi }
877*53ee8cc1Swenshuai.xi 
HAL_TSP_SecFlt_VerReset(MS_U32 u32SecFltId)878*53ee8cc1Swenshuai.xi void HAL_TSP_SecFlt_VerReset(MS_U32 u32SecFltId)
879*53ee8cc1Swenshuai.xi {
880*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, TSP_MCU_CMD_VER_RESET | u32SecFltId);
881*53ee8cc1Swenshuai.xi     while (0 != _HAL_REG32_R(&_TspCtrl[0].MCU_Cmd));
882*53ee8cc1Swenshuai.xi }
883*53ee8cc1Swenshuai.xi 
HAL_TSP_SecFlt_SetDataAddr(MS_PHY phyDataAddr)884*53ee8cc1Swenshuai.xi void HAL_TSP_SecFlt_SetDataAddr(MS_PHY phyDataAddr)
885*53ee8cc1Swenshuai.xi {
886*53ee8cc1Swenshuai.xi     MS_PHY phyAddr = phyDataAddr - _HAL_TSP_MIU_OFFSET(phyDataAddr);
887*53ee8cc1Swenshuai.xi     MS_U32 u32cmd = TSP_MCU_CMD_MEM_HIGH_ADDR | ((MS_U32)(phyAddr & 0xFFFF0000UL) >> 16UL);
888*53ee8cc1Swenshuai.xi 
889*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, u32cmd);
890*53ee8cc1Swenshuai.xi     while (0 != _HAL_REG32_R(&_TspCtrl[0].MCU_Cmd));
891*53ee8cc1Swenshuai.xi 
892*53ee8cc1Swenshuai.xi     u32cmd = TSP_MCU_CMD_MEM_LOW_ADDR | ((MS_U32)(phyAddr & 0xFFFFUL));
893*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, u32cmd);
894*53ee8cc1Swenshuai.xi     while (0 != _HAL_REG32_R(&_TspCtrl[0].MCU_Cmd));
895*53ee8cc1Swenshuai.xi }
896*53ee8cc1Swenshuai.xi 
897*53ee8cc1Swenshuai.xi 
898*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
899*53ee8cc1Swenshuai.xi //  For section buffer part
900*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
901*53ee8cc1Swenshuai.xi // To avoid SW read hidden HW byte enable information.
902*53ee8cc1Swenshuai.xi #define _TSP_SEC_BUF_ADDR_START(pSecFilter)     (TSP_SECFLT_BUFSTART_MASK & HAL_REG32_IndR((REG32 *)&((pSecFilter)->BufStart)))
903*53ee8cc1Swenshuai.xi 
HAL_TSP_SecBuf_SetBuffer(REG_SecFlt * pSecBuf,MS_PHY phyStartAddr,MS_U32 u32BufSize)904*53ee8cc1Swenshuai.xi void HAL_TSP_SecBuf_SetBuffer(REG_SecFlt *pSecBuf, MS_PHY phyStartAddr, MS_U32 u32BufSize)
905*53ee8cc1Swenshuai.xi {
906*53ee8cc1Swenshuai.xi     MS_PHY phyAddr = 0UL;
907*53ee8cc1Swenshuai.xi 
908*53ee8cc1Swenshuai.xi     _phySecBufMiuOffset = _HAL_TSP_MIU_OFFSET(phyStartAddr);
909*53ee8cc1Swenshuai.xi     phyAddr = phyStartAddr - _phySecBufMiuOffset;
910*53ee8cc1Swenshuai.xi 
911*53ee8cc1Swenshuai.xi     HAL_REG32_IndW((REG32 *)&pSecBuf->BufStart, (MS_U32)phyAddr);
912*53ee8cc1Swenshuai.xi     HAL_REG32_IndW((REG32 *)&pSecBuf->BufEnd, ((MS_U32)phyAddr + u32BufSize));
913*53ee8cc1Swenshuai.xi }
914*53ee8cc1Swenshuai.xi 
HAL_TSP_SecBuf_SetBufRead(REG_SecFlt * pSecBuf,MS_PHY phyReadAddr)915*53ee8cc1Swenshuai.xi void HAL_TSP_SecBuf_SetBufRead(REG_SecFlt *pSecBuf, MS_PHY phyReadAddr)
916*53ee8cc1Swenshuai.xi {
917*53ee8cc1Swenshuai.xi     _phySecBufMiuOffset = _HAL_TSP_MIU_OFFSET(phyReadAddr);
918*53ee8cc1Swenshuai.xi 
919*53ee8cc1Swenshuai.xi     HAL_REG32_IndW((REG32 *)&pSecBuf->BufRead, (MS_U32)(phyReadAddr-_phySecBufMiuOffset));
920*53ee8cc1Swenshuai.xi }
921*53ee8cc1Swenshuai.xi 
HAL_TSP_SecBuf_GetBufStart(REG_SecFlt * pSecBuf)922*53ee8cc1Swenshuai.xi MS_PHY HAL_TSP_SecBuf_GetBufStart(REG_SecFlt *pSecBuf)
923*53ee8cc1Swenshuai.xi {
924*53ee8cc1Swenshuai.xi     return (((MS_PHY)_TSP_SEC_BUF_ADDR_START(pSecBuf) & 0xFFFFFFFFUL) + _phySecBufMiuOffset);
925*53ee8cc1Swenshuai.xi }
926*53ee8cc1Swenshuai.xi 
HAL_TSP_SecBuf_GetBufEnd(REG_SecFlt * pSecBuf)927*53ee8cc1Swenshuai.xi MS_PHY HAL_TSP_SecBuf_GetBufEnd(REG_SecFlt *pSecBuf)
928*53ee8cc1Swenshuai.xi {
929*53ee8cc1Swenshuai.xi     return (((MS_PHY)HAL_REG32_IndR((REG32 *)&pSecBuf->BufEnd) & 0xFFFFFFFFUL) + _phySecBufMiuOffset);
930*53ee8cc1Swenshuai.xi }
931*53ee8cc1Swenshuai.xi 
HAL_TSP_SecBuf_GetBufCur(REG_SecFlt * pSecBuf)932*53ee8cc1Swenshuai.xi MS_PHY HAL_TSP_SecBuf_GetBufCur(REG_SecFlt *pSecBuf)
933*53ee8cc1Swenshuai.xi {
934*53ee8cc1Swenshuai.xi     return (((MS_PHY)HAL_REG32_IndR((REG32 *)&pSecBuf->BufCur) & 0xFFFFFFFFUL) + _phySecBufMiuOffset);
935*53ee8cc1Swenshuai.xi }
936*53ee8cc1Swenshuai.xi 
HAL_TSP_SecBuf_ResetBuffer(REG_SecFlt * pSecBuf)937*53ee8cc1Swenshuai.xi void HAL_TSP_SecBuf_ResetBuffer(REG_SecFlt *pSecBuf)
938*53ee8cc1Swenshuai.xi {
939*53ee8cc1Swenshuai.xi     HAL_REG32_IndW((REG32 *)&pSecBuf->BufCur, _TSP_SEC_BUF_ADDR_START(pSecBuf));
940*53ee8cc1Swenshuai.xi     HAL_REG32_IndW((REG32 *)&pSecBuf->BufRead, _TSP_SEC_BUF_ADDR_START(pSecBuf));
941*53ee8cc1Swenshuai.xi     HAL_REG32_IndW((REG32 *)&pSecBuf->BufWrite, _TSP_SEC_BUF_ADDR_START(pSecBuf));
942*53ee8cc1Swenshuai.xi }
943*53ee8cc1Swenshuai.xi 
HAL_TSP_SecBuf_GetBufRead(REG_SecFlt * pSecBuf)944*53ee8cc1Swenshuai.xi MS_PHY HAL_TSP_SecBuf_GetBufRead(REG_SecFlt *pSecBuf)
945*53ee8cc1Swenshuai.xi {
946*53ee8cc1Swenshuai.xi     return (((MS_PHY)HAL_REG32_IndR((REG32 *)&pSecBuf->BufRead)  & 0xFFFFFFFFUL) + _phySecBufMiuOffset);
947*53ee8cc1Swenshuai.xi }
948*53ee8cc1Swenshuai.xi 
HAL_TSP_SecBuf_GetBufWrite(REG_SecFlt * pSecBuf)949*53ee8cc1Swenshuai.xi MS_PHY HAL_TSP_SecBuf_GetBufWrite(REG_SecFlt *pSecBuf)
950*53ee8cc1Swenshuai.xi {
951*53ee8cc1Swenshuai.xi     return (((MS_PHY)HAL_REG32_IndR((REG32 *)&pSecBuf->BufWrite) & 0xFFFFFFFFUL) + _phySecBufMiuOffset);
952*53ee8cc1Swenshuai.xi }
953*53ee8cc1Swenshuai.xi 
954*53ee8cc1Swenshuai.xi #undef _TSP_SEC_BUF_ADDR_START
955*53ee8cc1Swenshuai.xi 
HAL_TSP_SecBuf_SetBufRead_tmp(REG_SecFlt * pSecBuf,MS_PHY phyReadAddr)956*53ee8cc1Swenshuai.xi void HAL_TSP_SecBuf_SetBufRead_tmp(REG_SecFlt *pSecBuf, MS_PHY phyReadAddr)
957*53ee8cc1Swenshuai.xi {
958*53ee8cc1Swenshuai.xi     _phySecBufMiuOffset = _HAL_TSP_MIU_OFFSET(phyReadAddr);
959*53ee8cc1Swenshuai.xi     HAL_REG32_IndW_tmp((REG32 *)&pSecBuf->BufRead, (MS_U32)(phyReadAddr-_phySecBufMiuOffset));
960*53ee8cc1Swenshuai.xi }
961*53ee8cc1Swenshuai.xi 
HAL_TSP_SecBuf_GetBufWrite_tmp(REG_SecFlt * pSecBuf)962*53ee8cc1Swenshuai.xi MS_PHY HAL_TSP_SecBuf_GetBufWrite_tmp(REG_SecFlt *pSecBuf)
963*53ee8cc1Swenshuai.xi {
964*53ee8cc1Swenshuai.xi     return (((MS_PHY)HAL_REG32_IndR_tmp((REG32 *)&pSecBuf->BufWrite) & 0xFFFFFFFFUL) + _phySecBufMiuOffset);
965*53ee8cc1Swenshuai.xi }
966*53ee8cc1Swenshuai.xi 
967*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
968*53ee8cc1Swenshuai.xi // For DMA part
969*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
970*53ee8cc1Swenshuai.xi //[HW LIMIT][HW TODO] TsDma pause can not be access by TSP CPU
971*53ee8cc1Swenshuai.xi //[HW LIMIT][HW TODO] TsDma pause it hard to control because read/write in different register
972*53ee8cc1Swenshuai.xi //[HW LIMIT][HW TODO] When setting TsDma it should be disable interrupt
HAL_TSP_TsDma_SetDelay(MS_U32 u32Delay)973*53ee8cc1Swenshuai.xi void HAL_TSP_TsDma_SetDelay(MS_U32 u32Delay)
974*53ee8cc1Swenshuai.xi {
975*53ee8cc1Swenshuai.xi     // Richard: the file in timer in Uranus is 24 bits.
976*53ee8cc1Swenshuai.xi     //          to simplify the process, writing 32 bits directly.
977*53ee8cc1Swenshuai.xi     //          HW will truncate the high 8 bits out, and use low 24 bits only (from Albert Lin)
978*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].TsFileIn_Timer, u32Delay);
979*53ee8cc1Swenshuai.xi }
980*53ee8cc1Swenshuai.xi 
HAL_TSP_CmdQ_TsDma_SetAddr(MS_PHY phyStreamAddr)981*53ee8cc1Swenshuai.xi void HAL_TSP_CmdQ_TsDma_SetAddr(MS_PHY phyStreamAddr)
982*53ee8cc1Swenshuai.xi {
983*53ee8cc1Swenshuai.xi     _phyFIBufMiuOffset = _HAL_TSP_MIU_OFFSET(phyStreamAddr);
984*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].TsDma_Addr, (MS_U32)(phyStreamAddr-_phyFIBufMiuOffset));
985*53ee8cc1Swenshuai.xi }
986*53ee8cc1Swenshuai.xi 
HAL_TSP_CmdQ_TsDma_SetSize(MS_U32 u32StreamSize)987*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_CmdQ_TsDma_SetSize(MS_U32 u32StreamSize)
988*53ee8cc1Swenshuai.xi {
989*53ee8cc1Swenshuai.xi     if (u32StreamSize < 16) // t2 HW limite, CMQ had some problem while bufsize < 16
990*53ee8cc1Swenshuai.xi     {
991*53ee8cc1Swenshuai.xi         return FALSE;
992*53ee8cc1Swenshuai.xi     }
993*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].TsDma_Size, u32StreamSize);
994*53ee8cc1Swenshuai.xi     return TRUE;
995*53ee8cc1Swenshuai.xi }
996*53ee8cc1Swenshuai.xi 
HAL_TSP_CmdQ_TsDma_Start(MS_U32 u32TsDmaCtrl)997*53ee8cc1Swenshuai.xi void HAL_TSP_CmdQ_TsDma_Start(MS_U32 u32TsDmaCtrl)
998*53ee8cc1Swenshuai.xi {
999*53ee8cc1Swenshuai.xi     // enable filein byte timer
1000*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].reg15b4,
1001*53ee8cc1Swenshuai.xi             SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg15b4), TSP_BYTE_TIMER_EN));
1002*53ee8cc1Swenshuai.xi 
1003*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].TsDma_Ctrl_CmdQ, TSP_TSDMA_CTRL_START | (u32TsDmaCtrl & TSP_TSDMA_CTRL_PESMODE_MASK));
1004*53ee8cc1Swenshuai.xi }
1005*53ee8cc1Swenshuai.xi 
HAL_TSP_TsDma_Pause(void)1006*53ee8cc1Swenshuai.xi void HAL_TSP_TsDma_Pause(void)
1007*53ee8cc1Swenshuai.xi {
1008*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&_TspCtrl[0].TSP_Ctrl1,
1009*53ee8cc1Swenshuai.xi             SET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].TSP_Ctrl1), TSP_CTRL1_FILEIN_PAUSE));
1010*53ee8cc1Swenshuai.xi }
1011*53ee8cc1Swenshuai.xi 
HAL_TSP_TsDma_Resume(void)1012*53ee8cc1Swenshuai.xi void HAL_TSP_TsDma_Resume(void)
1013*53ee8cc1Swenshuai.xi {
1014*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&_TspCtrl[0].TSP_Ctrl1,
1015*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].TSP_Ctrl1), TSP_CTRL1_FILEIN_PAUSE));
1016*53ee8cc1Swenshuai.xi }
1017*53ee8cc1Swenshuai.xi 
HAL_TSP_CmdQ_TsDma_GetState(void)1018*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_CmdQ_TsDma_GetState(void)
1019*53ee8cc1Swenshuai.xi {
1020*53ee8cc1Swenshuai.xi     return (HAS_FLAG(_HAL_REG32_R(&_TspCtrl[0].TsDma_Ctrl_CmdQ), TSP_TSDMA_CTRL_START) |
1021*53ee8cc1Swenshuai.xi             (MS_U32)(HAS_FLAG(_HAL_REG16_R(&_TspCtrl[0].TSP_Ctrl1), TSP_CTRL1_FILEIN_PAUSE)));
1022*53ee8cc1Swenshuai.xi }
1023*53ee8cc1Swenshuai.xi 
HAL_TSP_CmdQ_EmptyCount(void)1024*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_CmdQ_EmptyCount(void)
1025*53ee8cc1Swenshuai.xi {
1026*53ee8cc1Swenshuai.xi     return (TSP_CMDQ_SIZE - ((_HAL_REG32_R(&_TspCtrl[0].TsDma_Ctrl_CmdQ) & TSP_CMDQ_CNT_MASK)>>TSP_CMDQ_CNT_SHFT));
1027*53ee8cc1Swenshuai.xi }
1028*53ee8cc1Swenshuai.xi 
HAL_TSP_Get_CmdQFifoLevel(void)1029*53ee8cc1Swenshuai.xi MS_U8 HAL_TSP_Get_CmdQFifoLevel(void)
1030*53ee8cc1Swenshuai.xi {
1031*53ee8cc1Swenshuai.xi     return (MS_U8)((_HAL_REG32_R(&_TspCtrl[0].TsDma_Ctrl_CmdQ) & TSP_CMDQ_WR_LEVEL_MASK) >> TSP_CMDQ_WR_LEVEL_SHFT);
1032*53ee8cc1Swenshuai.xi }
1033*53ee8cc1Swenshuai.xi 
HAL_TSP_SetCtrlMode(MS_U32 u32EngId,MS_U32 u32Mode,MS_U32 u32TsIfId)1034*53ee8cc1Swenshuai.xi void HAL_TSP_SetCtrlMode(MS_U32 u32EngId, MS_U32 u32Mode, MS_U32 u32TsIfId)
1035*53ee8cc1Swenshuai.xi {
1036*53ee8cc1Swenshuai.xi     // Control bits:
1037*53ee8cc1Swenshuai.xi     // TSP_CTRL_CPU_EN
1038*53ee8cc1Swenshuai.xi     // TSP_CTRL_SW_RST
1039*53ee8cc1Swenshuai.xi     // TSP_CTRL_MEM_DMA_EN
1040*53ee8cc1Swenshuai.xi 
1041*53ee8cc1Swenshuai.xi     // for file in related setting
1042*53ee8cc1Swenshuai.xi     if(u32Mode == 0)
1043*53ee8cc1Swenshuai.xi     {
1044*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[u32EngId].TSP_Ctrl,
1045*53ee8cc1Swenshuai.xi                 (_HAL_REG32_R(&_TspCtrl[u32EngId].TSP_Ctrl) & ~(TSP_CTRL_CPU_EN   |
1046*53ee8cc1Swenshuai.xi                                                                 TSP_CTRL_SW_RST   |
1047*53ee8cc1Swenshuai.xi                                                                 TSP_CTRL_TSFILE_EN)));
1048*53ee8cc1Swenshuai.xi         HAL_TSP_filein_enable(FALSE);
1049*53ee8cc1Swenshuai.xi     }
1050*53ee8cc1Swenshuai.xi     else
1051*53ee8cc1Swenshuai.xi     {
1052*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[u32EngId].TSP_Ctrl,
1053*53ee8cc1Swenshuai.xi                 (_HAL_REG32_R(&_TspCtrl[u32EngId].TSP_Ctrl) & ~(TSP_CTRL_CPU_EN   |
1054*53ee8cc1Swenshuai.xi                                                                 TSP_CTRL_SW_RST   |
1055*53ee8cc1Swenshuai.xi                                                                 //TSP_CTRL_TSFILE_EN |
1056*53ee8cc1Swenshuai.xi //[URANUS]                                                      TSP_CTRL_CLK_GATING_DISABLE |
1057*53ee8cc1Swenshuai.xi // @FIXME: Richard ignore this at this stage
1058*53ee8cc1Swenshuai.xi                                                                 0                  )) | u32Mode);
1059*53ee8cc1Swenshuai.xi 
1060*53ee8cc1Swenshuai.xi         if(HAS_FLAG(u32Mode, TSP_CTRL_TSFILE_EN))
1061*53ee8cc1Swenshuai.xi             HAL_TSP_filein_enable(TRUE);
1062*53ee8cc1Swenshuai.xi     }
1063*53ee8cc1Swenshuai.xi 
1064*53ee8cc1Swenshuai.xi     if (TSP_IF_NUM > u32TsIfId)
1065*53ee8cc1Swenshuai.xi     {
1066*53ee8cc1Swenshuai.xi         _HAL_TSP_tsif_select(HAS_FLAG(u32Mode, (MS_U8)(u32TsIfId & 0xFF)));
1067*53ee8cc1Swenshuai.xi     }
1068*53ee8cc1Swenshuai.xi }
1069*53ee8cc1Swenshuai.xi 
1070*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1071*53ee8cc1Swenshuai.xi //  For PVR part
1072*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
HAL_TSP_PVR_SetBuffer(MS_PHY phyBufStart0,MS_PHY phyBufStart1,MS_U32 u32BufSize0,MS_U32 u32BufSize1)1073*53ee8cc1Swenshuai.xi void HAL_TSP_PVR_SetBuffer(MS_PHY phyBufStart0, MS_PHY phyBufStart1, MS_U32 u32BufSize0, MS_U32 u32BufSize1)
1074*53ee8cc1Swenshuai.xi {
1075*53ee8cc1Swenshuai.xi     MS_PHY                     phyBufEnd;
1076*53ee8cc1Swenshuai.xi 
1077*53ee8cc1Swenshuai.xi     _phyPVRBufMiuOffset[0] = _HAL_TSP_MIU_OFFSET(phyBufStart0);
1078*53ee8cc1Swenshuai.xi 
1079*53ee8cc1Swenshuai.xi     // for buffer 0
1080*53ee8cc1Swenshuai.xi     phyBufEnd=              phyBufStart0+ u32BufSize0;
1081*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].TsRec_Head, ((MS_U32)(phyBufStart0-_phyPVRBufMiuOffset[0])>> MIU_BUS));                // 8 bytes unit
1082*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].TsRec_Tail, ((MS_U32)(phyBufEnd-_phyPVRBufMiuOffset[0])>> MIU_BUS));                   // 8 bytes unit
1083*53ee8cc1Swenshuai.xi 
1084*53ee8cc1Swenshuai.xi     // for buffer 1
1085*53ee8cc1Swenshuai.xi     phyBufEnd=              phyBufStart1+ u32BufSize1;
1086*53ee8cc1Swenshuai.xi #define ADDR_PVR_HEAD20         (_virtRegBase+ 0x2a04)
1087*53ee8cc1Swenshuai.xi #define ADDR_PVR_HEAD21         (_virtRegBase+ 0x2a08)
1088*53ee8cc1Swenshuai.xi #define ADDR_PVR_MID20          (_virtRegBase+ 0x2a0c)
1089*53ee8cc1Swenshuai.xi #define ADDR_PVR_MID21          (_virtRegBase+ 0x2a10)
1090*53ee8cc1Swenshuai.xi #define ADDR_PVR_TAIL20         (_virtRegBase+ 0x2a14)
1091*53ee8cc1Swenshuai.xi #define ADDR_PVR_TAIL21         (_virtRegBase+ 0x2a18)
1092*53ee8cc1Swenshuai.xi     REG16_T(ADDR_PVR_HEAD20)=   (MS_U16)((phyBufStart1-_phyPVRBufMiuOffset[0])>> MIU_BUS) & 0xFFFF;
1093*53ee8cc1Swenshuai.xi     REG16_T(ADDR_PVR_HEAD21)=   (MS_U16)((phyBufStart1-_phyPVRBufMiuOffset[0])>> (MIU_BUS+ 16)) & 0xFFFF;
1094*53ee8cc1Swenshuai.xi     REG16_T(ADDR_PVR_TAIL20)=   (MS_U16)((phyBufEnd-_phyPVRBufMiuOffset[0])>> MIU_BUS) & 0xFFFF;
1095*53ee8cc1Swenshuai.xi     REG16_T(ADDR_PVR_TAIL21)=   (MS_U16)((phyBufEnd-_phyPVRBufMiuOffset[0])>> (MIU_BUS+ 16)) & 0xFFFF;
1096*53ee8cc1Swenshuai.xi #undef ADDR_PVR_HEAD20
1097*53ee8cc1Swenshuai.xi #undef ADDR_PVR_HEAD21
1098*53ee8cc1Swenshuai.xi #undef ADDR_PVR_MID20
1099*53ee8cc1Swenshuai.xi #undef ADDR_PVR_MID21
1100*53ee8cc1Swenshuai.xi #undef ADDR_PVR_TAIL20
1101*53ee8cc1Swenshuai.xi #undef ADDR_PVR_TAIL21
1102*53ee8cc1Swenshuai.xi 
1103*53ee8cc1Swenshuai.xi     // enable PVR ping pong buffer
1104*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].reg15b4,
1105*53ee8cc1Swenshuai.xi             SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg15b4), TSP_STR2MI_MIU_PINPON_EN));
1106*53ee8cc1Swenshuai.xi 
1107*53ee8cc1Swenshuai.xi     // flush PVR buffer
1108*53ee8cc1Swenshuai.xi     HAL_TSP_PVR_WaitFlush();
1109*53ee8cc1Swenshuai.xi }
1110*53ee8cc1Swenshuai.xi 
HAL_TSP_PVR_Enable(MS_BOOL bEnable)1111*53ee8cc1Swenshuai.xi void HAL_TSP_PVR_Enable(MS_BOOL bEnable)
1112*53ee8cc1Swenshuai.xi {
1113*53ee8cc1Swenshuai.xi     //set burst len = 1
1114*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].reg15b4,
1115*53ee8cc1Swenshuai.xi             SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg15b4), TSP_burst_len_MASK));
1116*53ee8cc1Swenshuai.xi 
1117*53ee8cc1Swenshuai.xi     // disable timeshift write protect -- it must enable while record/playback use the same buffer
1118*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&_TspCtrl[0].TSP_Ctrl1,
1119*53ee8cc1Swenshuai.xi         RESET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].TSP_Ctrl1), TSP_CTRL1_FILE_CHECK_WP));
1120*53ee8cc1Swenshuai.xi 
1121*53ee8cc1Swenshuai.xi     if (bEnable)
1122*53ee8cc1Swenshuai.xi     {
1123*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
1124*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_HW_CFG4_PVR_ENABLE));
1125*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
1126*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_HW_CFG4_TSIF1_ENABLE));
1127*53ee8cc1Swenshuai.xi     }
1128*53ee8cc1Swenshuai.xi     else
1129*53ee8cc1Swenshuai.xi     {
1130*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
1131*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_HW_CFG4_PVR_ENABLE));
1132*53ee8cc1Swenshuai.xi         //_HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
1133*53ee8cc1Swenshuai.xi         //        RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_HW_CFG4_TSIF1_ENABLE));
1134*53ee8cc1Swenshuai.xi     }
1135*53ee8cc1Swenshuai.xi }
1136*53ee8cc1Swenshuai.xi 
HAL_TSP_PVR_Reset(void)1137*53ee8cc1Swenshuai.xi void HAL_TSP_PVR_Reset(void)
1138*53ee8cc1Swenshuai.xi {
1139*53ee8cc1Swenshuai.xi     // Richard: @FIXME:
1140*53ee8cc1Swenshuai.xi     // Don't know PVR "reset" definition. call flush instead.
1141*53ee8cc1Swenshuai.xi     HAL_TSP_PVR_WaitFlush();
1142*53ee8cc1Swenshuai.xi }
1143*53ee8cc1Swenshuai.xi 
HAL_TSP_PVR_All(MS_BOOL bPvrAll)1144*53ee8cc1Swenshuai.xi void HAL_TSP_PVR_All(MS_BOOL bPvrAll)
1145*53ee8cc1Swenshuai.xi {
1146*53ee8cc1Swenshuai.xi     if (bPvrAll)
1147*53ee8cc1Swenshuai.xi     {
1148*53ee8cc1Swenshuai.xi         // bypass mode
1149*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
1150*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_HW_CFG4_PVR_PIDFLT_SEC));
1151*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].reg15b4,
1152*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg15b4), TSP_REG_REC_PID_EN));
1153*53ee8cc1Swenshuai.xi     }
1154*53ee8cc1Swenshuai.xi     else
1155*53ee8cc1Swenshuai.xi     {
1156*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
1157*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_HW_CFG4_PVR_PIDFLT_SEC));
1158*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].reg15b4,
1159*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg15b4), TSP_REG_REC_PID_EN));
1160*53ee8cc1Swenshuai.xi     }
1161*53ee8cc1Swenshuai.xi }
1162*53ee8cc1Swenshuai.xi 
HAL_TSP_PVR_Filein_Enable(MS_BOOL bBypassHD,MS_BOOL bEnable,MS_BOOL bRecAll)1163*53ee8cc1Swenshuai.xi void HAL_TSP_PVR_Filein_Enable(MS_BOOL bBypassHD, MS_BOOL bEnable, MS_BOOL bRecAll)
1164*53ee8cc1Swenshuai.xi {
1165*53ee8cc1Swenshuai.xi     MS_U32 u32data = _HAL_REG32_R(&_TspCtrl[0].reg15b4);
1166*53ee8cc1Swenshuai.xi 
1167*53ee8cc1Swenshuai.xi     if(bBypassHD)
1168*53ee8cc1Swenshuai.xi         u32data |= TSP_PVR_TS_HEADER;
1169*53ee8cc1Swenshuai.xi     else
1170*53ee8cc1Swenshuai.xi         u32data &= ~TSP_PVR_TS_HEADER;
1171*53ee8cc1Swenshuai.xi 
1172*53ee8cc1Swenshuai.xi     if(bRecAll)
1173*53ee8cc1Swenshuai.xi     {
1174*53ee8cc1Swenshuai.xi         u32data |= TSP_REC_ALL_FILE;
1175*53ee8cc1Swenshuai.xi     }
1176*53ee8cc1Swenshuai.xi     else
1177*53ee8cc1Swenshuai.xi     {
1178*53ee8cc1Swenshuai.xi         u32data &= ~TSP_REC_ALL_FILE;
1179*53ee8cc1Swenshuai.xi     }
1180*53ee8cc1Swenshuai.xi 
1181*53ee8cc1Swenshuai.xi     if(bEnable)
1182*53ee8cc1Swenshuai.xi         u32data |= TSP_PVR_FILEIN;
1183*53ee8cc1Swenshuai.xi     else
1184*53ee8cc1Swenshuai.xi         u32data &= ~TSP_PVR_FILEIN;
1185*53ee8cc1Swenshuai.xi 
1186*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].reg15b4, u32data);
1187*53ee8cc1Swenshuai.xi }
1188*53ee8cc1Swenshuai.xi 
HAL_TSP_PVR_Eng_IsEnabled(MS_U32 u32EngId)1189*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_PVR_Eng_IsEnabled(MS_U32 u32EngId)
1190*53ee8cc1Swenshuai.xi {
1191*53ee8cc1Swenshuai.xi     if(u32EngId == 0)
1192*53ee8cc1Swenshuai.xi     {
1193*53ee8cc1Swenshuai.xi         return ((_HAL_REG32_R(&_TspCtrl[0].Hw_Config4) & TSP_HW_CFG4_PVR_ENABLE) > 0);
1194*53ee8cc1Swenshuai.xi     }
1195*53ee8cc1Swenshuai.xi     else
1196*53ee8cc1Swenshuai.xi     {
1197*53ee8cc1Swenshuai.xi         return FALSE;
1198*53ee8cc1Swenshuai.xi     }
1199*53ee8cc1Swenshuai.xi }
1200*53ee8cc1Swenshuai.xi 
HAL_TSP_LiveAB_En(MS_BOOL bPF_EN)1201*53ee8cc1Swenshuai.xi void HAL_TSP_LiveAB_En(MS_BOOL bPF_EN)
1202*53ee8cc1Swenshuai.xi {
1203*53ee8cc1Swenshuai.xi     if (bPF_EN)
1204*53ee8cc1Swenshuai.xi     {
1205*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].PktChkSizeFilein, _HAL_REG32_R(&_TspCtrl[0].PktChkSizeFilein) | TSP_LIVEAB_SEL);
1206*53ee8cc1Swenshuai.xi     }
1207*53ee8cc1Swenshuai.xi     else
1208*53ee8cc1Swenshuai.xi     {
1209*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].PktChkSizeFilein, _HAL_REG32_R(&_TspCtrl[0].PktChkSizeFilein) & ~TSP_LIVEAB_SEL);
1210*53ee8cc1Swenshuai.xi     }
1211*53ee8cc1Swenshuai.xi }
1212*53ee8cc1Swenshuai.xi 
HAL_TSP_IsLiveAB_Enable(void)1213*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_IsLiveAB_Enable(void)
1214*53ee8cc1Swenshuai.xi {
1215*53ee8cc1Swenshuai.xi     return ((_HAL_REG32_R(&_TspCtrl[0].PktChkSizeFilein) & TSP_LIVEAB_SEL) != 0);
1216*53ee8cc1Swenshuai.xi }
1217*53ee8cc1Swenshuai.xi 
HAL_TSP_SetPKTSize(MS_U32 u32PKTSize)1218*53ee8cc1Swenshuai.xi void HAL_TSP_SetPKTSize(MS_U32 u32PKTSize)
1219*53ee8cc1Swenshuai.xi {
1220*53ee8cc1Swenshuai.xi     if((u32PKTSize == 0x82) || (u32PKTSize == 0x86)) // RVU
1221*53ee8cc1Swenshuai.xi     {
1222*53ee8cc1Swenshuai.xi          printf("HAL_TSP_SetPKTSize: This chip not support RVU!\n");  // not support
1223*53ee8cc1Swenshuai.xi     }
1224*53ee8cc1Swenshuai.xi     else
1225*53ee8cc1Swenshuai.xi     {
1226*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].Hw_Config4, SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_HW_CFG4_ALT_TS_SIZE));
1227*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].PktChkSizeFilein, (_HAL_REG32_R(&_TspCtrl[0].PktChkSizeFilein)&~TSP_PKT_SIZE_MASK)|(TSP_PKT_SIZE_MASK&u32PKTSize));
1228*53ee8cc1Swenshuai.xi     }
1229*53ee8cc1Swenshuai.xi }
1230*53ee8cc1Swenshuai.xi 
1231*53ee8cc1Swenshuai.xi // Set 1 to disable file-in timestamp block scheme, bypass timestamp
HAL_TSP_FileIn_192BlockScheme_En(MS_BOOL bEnable)1232*53ee8cc1Swenshuai.xi void HAL_TSP_FileIn_192BlockScheme_En(MS_BOOL bEnable)
1233*53ee8cc1Swenshuai.xi {
1234*53ee8cc1Swenshuai.xi     if (!bEnable)
1235*53ee8cc1Swenshuai.xi     {
1236*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].PktChkSizeFilein, _HAL_REG32_R(&_TspCtrl[0].PktChkSizeFilein) | TSP_PKT192_BLK_DIS_FIN);
1237*53ee8cc1Swenshuai.xi     }
1238*53ee8cc1Swenshuai.xi     else
1239*53ee8cc1Swenshuai.xi     {
1240*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].PktChkSizeFilein, _HAL_REG32_R(&_TspCtrl[0].PktChkSizeFilein) & ~TSP_PKT192_BLK_DIS_FIN);
1241*53ee8cc1Swenshuai.xi     }
1242*53ee8cc1Swenshuai.xi }
1243*53ee8cc1Swenshuai.xi 
1244*53ee8cc1Swenshuai.xi 
HAL_TSP_PVR_GetBufWrite(void)1245*53ee8cc1Swenshuai.xi MS_PHY HAL_TSP_PVR_GetBufWrite(void)
1246*53ee8cc1Swenshuai.xi {
1247*53ee8cc1Swenshuai.xi     MS_PHY phyvalue;
1248*53ee8cc1Swenshuai.xi 
1249*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].HW2_Config3,
1250*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].HW2_Config3), TSP_STR2MI_WP_LD));
1251*53ee8cc1Swenshuai.xi     phyvalue = (MS_PHY)(_HAL_REG32_R(&_TspCtrl[0].TsRec_WPtr)<< MIU_BUS) + _phyPVRBufMiuOffset[0];
1252*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].HW2_Config3,
1253*53ee8cc1Swenshuai.xi             SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].HW2_Config3), TSP_STR2MI_WP_LD));
1254*53ee8cc1Swenshuai.xi 
1255*53ee8cc1Swenshuai.xi     return phyvalue;
1256*53ee8cc1Swenshuai.xi 
1257*53ee8cc1Swenshuai.xi }
1258*53ee8cc1Swenshuai.xi 
HAL_TSP_PVR_WaitFlush(void)1259*53ee8cc1Swenshuai.xi void HAL_TSP_PVR_WaitFlush(void)
1260*53ee8cc1Swenshuai.xi {
1261*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
1262*53ee8cc1Swenshuai.xi             SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_HW_CFG4_PVR_FLUSH));
1263*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
1264*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_HW_CFG4_PVR_FLUSH));
1265*53ee8cc1Swenshuai.xi }
1266*53ee8cc1Swenshuai.xi 
HAL_TSP_PVR_REC_FLT_Enable(MS_BOOL bEnable)1267*53ee8cc1Swenshuai.xi void HAL_TSP_PVR_REC_FLT_Enable(MS_BOOL bEnable)
1268*53ee8cc1Swenshuai.xi {
1269*53ee8cc1Swenshuai.xi     if(bEnable)
1270*53ee8cc1Swenshuai.xi     {
1271*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
1272*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_HW_CFG4_PVR_PIDFLT_SEC));
1273*53ee8cc1Swenshuai.xi     }
1274*53ee8cc1Swenshuai.xi     else
1275*53ee8cc1Swenshuai.xi     {
1276*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
1277*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_HW_CFG4_PVR_PIDFLT_SEC));
1278*53ee8cc1Swenshuai.xi     }
1279*53ee8cc1Swenshuai.xi }
1280*53ee8cc1Swenshuai.xi 
1281*53ee8cc1Swenshuai.xi 
1282*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1283*53ee8cc1Swenshuai.xi // For FW part
1284*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1285*53ee8cc1Swenshuai.xi /*
1286*53ee8cc1Swenshuai.xi void HAL_TSP_SetFwMsg(MS_U32 u32Mode)
1287*53ee8cc1Swenshuai.xi {
1288*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].Mcu_Msg, u32Mode);
1289*53ee8cc1Swenshuai.xi }
1290*53ee8cc1Swenshuai.xi 
1291*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_GetFwMsg(void)
1292*53ee8cc1Swenshuai.xi {
1293*53ee8cc1Swenshuai.xi     return (_HAL_REG32_R(&_TspCtrl[0].Mcu_Msg));
1294*53ee8cc1Swenshuai.xi }
1295*53ee8cc1Swenshuai.xi */
1296*53ee8cc1Swenshuai.xi 
1297*53ee8cc1Swenshuai.xi static MS_U32 _u32FlowPadMap[2] = { 0x0, 0x0};
1298*53ee8cc1Swenshuai.xi 
1299*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
1300*53ee8cc1Swenshuai.xi // For pad select part
1301*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
HAL_TSP_SelPad(MS_U32 u32EngId,MS_U32 u32Flow,MS_U32 u32Pad)1302*53ee8cc1Swenshuai.xi void HAL_TSP_SelPad(MS_U32 u32EngId, MS_U32 u32Flow, MS_U32 u32Pad)
1303*53ee8cc1Swenshuai.xi {
1304*53ee8cc1Swenshuai.xi 
1305*53ee8cc1Swenshuai.xi     MS_U32 u32Shft = 0;
1306*53ee8cc1Swenshuai.xi 
1307*53ee8cc1Swenshuai.xi     MS_ASSERT(4 >= u32Pad);
1308*53ee8cc1Swenshuai.xi 
1309*53ee8cc1Swenshuai.xi     if(u32Flow >= TSP_IF_NUM)
1310*53ee8cc1Swenshuai.xi     {
1311*53ee8cc1Swenshuai.xi         return;
1312*53ee8cc1Swenshuai.xi     }
1313*53ee8cc1Swenshuai.xi 
1314*53ee8cc1Swenshuai.xi     switch (u32Pad)
1315*53ee8cc1Swenshuai.xi     {
1316*53ee8cc1Swenshuai.xi         case 0: // internal demod
1317*53ee8cc1Swenshuai.xi             u32Pad = TSP_MUX_INDEMOD;
1318*53ee8cc1Swenshuai.xi             break;
1319*53ee8cc1Swenshuai.xi         //ts0 pad is null
1320*53ee8cc1Swenshuai.xi         case 2: // TS1 pad
1321*53ee8cc1Swenshuai.xi             u32Pad = TSP_MUX_TS1;
1322*53ee8cc1Swenshuai.xi             if(_bTsPadUsed[1] == FALSE)
1323*53ee8cc1Swenshuai.xi             {
1324*53ee8cc1Swenshuai.xi                 TSP_TOP_REG(REG_TOP_TS1_PE) = TSP_TOP_REG(REG_TOP_TS1_PE)| REG_TOP_TS_PE_MASK;
1325*53ee8cc1Swenshuai.xi                 _bTsPadUsed[1] = TRUE;
1326*53ee8cc1Swenshuai.xi             }
1327*53ee8cc1Swenshuai.xi             break;
1328*53ee8cc1Swenshuai.xi         case 4: // TS2 pad
1329*53ee8cc1Swenshuai.xi             u32Pad = TSP_MUX_TS2;
1330*53ee8cc1Swenshuai.xi             if(_bTsPadUsed[2] == FALSE)
1331*53ee8cc1Swenshuai.xi             {
1332*53ee8cc1Swenshuai.xi                 TSP_TOP_REG(REG_TOP_TS2_PE) = TSP_TOP_REG(REG_TOP_TS2_PE)| REG_TOP_TS_PE_MASK;
1333*53ee8cc1Swenshuai.xi                 _bTsPadUsed[2] = TRUE;
1334*53ee8cc1Swenshuai.xi             }
1335*53ee8cc1Swenshuai.xi             break;
1336*53ee8cc1Swenshuai.xi         default:
1337*53ee8cc1Swenshuai.xi             return ;
1338*53ee8cc1Swenshuai.xi     }
1339*53ee8cc1Swenshuai.xi 
1340*53ee8cc1Swenshuai.xi     _u32FlowPadMap[u32Flow] = u32Pad;
1341*53ee8cc1Swenshuai.xi 
1342*53ee8cc1Swenshuai.xi     if(u32Flow == 0)
1343*53ee8cc1Swenshuai.xi         u32Shft= REG_TOP_TSN_MUX_TS0_SHIFT;
1344*53ee8cc1Swenshuai.xi     else
1345*53ee8cc1Swenshuai.xi         u32Shft = REG_TOP_TSN_MUX_TS1_SHIFT;
1346*53ee8cc1Swenshuai.xi 
1347*53ee8cc1Swenshuai.xi     TSP_TOP_REG(REG_TOP_TSN_MUX) = (TSP_TOP_REG(REG_TOP_TSN_MUX) & ~(REG_TOP_TSN_MUX_MASK<< u32Shft)) | (u32Pad<< u32Shft);
1348*53ee8cc1Swenshuai.xi 
1349*53ee8cc1Swenshuai.xi }
1350*53ee8cc1Swenshuai.xi 
HAL_TSP_SelPad_ClkInv(MS_U32 u32EngId,MS_U32 u32Flow,MS_BOOL bClkInv)1351*53ee8cc1Swenshuai.xi void HAL_TSP_SelPad_ClkInv(MS_U32 u32EngId, MS_U32 u32Flow, MS_BOOL bClkInv)
1352*53ee8cc1Swenshuai.xi {
1353*53ee8cc1Swenshuai.xi     MS_U32 u32Clk = 0;
1354*53ee8cc1Swenshuai.xi     MS_U32 u32Shft = 0;
1355*53ee8cc1Swenshuai.xi 
1356*53ee8cc1Swenshuai.xi     if(u32Flow >= TSP_IF_NUM)
1357*53ee8cc1Swenshuai.xi     {
1358*53ee8cc1Swenshuai.xi         return;
1359*53ee8cc1Swenshuai.xi     }
1360*53ee8cc1Swenshuai.xi 
1361*53ee8cc1Swenshuai.xi     if(_u32FlowPadMap[u32Flow] == TSP_MUX_INDEMOD)
1362*53ee8cc1Swenshuai.xi         u32Clk = TSP_CLK_INDEMOD;
1363*53ee8cc1Swenshuai.xi     else if(_u32FlowPadMap[u32Flow] == TSP_MUX_TS1)
1364*53ee8cc1Swenshuai.xi         u32Clk = TSP_CLK_TS1;
1365*53ee8cc1Swenshuai.xi     else if(_u32FlowPadMap[u32Flow] == TSP_MUX_TS2)
1366*53ee8cc1Swenshuai.xi         u32Clk = TSP_CLK_TS2;
1367*53ee8cc1Swenshuai.xi 
1368*53ee8cc1Swenshuai.xi     if (bClkInv)
1369*53ee8cc1Swenshuai.xi     {
1370*53ee8cc1Swenshuai.xi         u32Clk |= TSP_CLK_INVERSE;
1371*53ee8cc1Swenshuai.xi     }
1372*53ee8cc1Swenshuai.xi 
1373*53ee8cc1Swenshuai.xi     u32Shft = (0 == u32Flow)? 0: 8;
1374*53ee8cc1Swenshuai.xi     TSP_CLKGEN0_REG(REG_CLKGEN0_TSN_CLK) = (TSP_CLKGEN0_REG(REG_CLKGEN0_TSN_CLK) & ~(REG_CLKGEN0_TSN_CLK_MASK<< u32Shft)) | (u32Clk<< u32Shft);
1375*53ee8cc1Swenshuai.xi }
1376*53ee8cc1Swenshuai.xi 
HAL_TSP_SelPad_ExtSync(MS_U32 u32EngId,MS_BOOL bExtSync,MS_U32 u32Flow)1377*53ee8cc1Swenshuai.xi void HAL_TSP_SelPad_ExtSync(MS_U32 u32EngId, MS_BOOL bExtSync, MS_U32 u32Flow)
1378*53ee8cc1Swenshuai.xi {
1379*53ee8cc1Swenshuai.xi     REG32* pReg = NULL;
1380*53ee8cc1Swenshuai.xi     MS_U32 u32ExtSync = 0;
1381*53ee8cc1Swenshuai.xi 
1382*53ee8cc1Swenshuai.xi     if (0 == u32Flow)
1383*53ee8cc1Swenshuai.xi     {
1384*53ee8cc1Swenshuai.xi         pReg = &(_TspCtrl[0].Hw_Config0);
1385*53ee8cc1Swenshuai.xi         u32ExtSync = TSP_HW_CFG0_TSIF0_EXTSYNC;
1386*53ee8cc1Swenshuai.xi     }
1387*53ee8cc1Swenshuai.xi     else if (1 == u32Flow)
1388*53ee8cc1Swenshuai.xi     {
1389*53ee8cc1Swenshuai.xi         pReg = &(_TspCtrl[0].Hw_Config2);
1390*53ee8cc1Swenshuai.xi         u32ExtSync = TSP_HW_CFG2_TSIF1_EXTSYNC;
1391*53ee8cc1Swenshuai.xi     }
1392*53ee8cc1Swenshuai.xi     else
1393*53ee8cc1Swenshuai.xi     {
1394*53ee8cc1Swenshuai.xi         //ASSERT(0);
1395*53ee8cc1Swenshuai.xi         return;
1396*53ee8cc1Swenshuai.xi     }
1397*53ee8cc1Swenshuai.xi 
1398*53ee8cc1Swenshuai.xi     if (bExtSync)
1399*53ee8cc1Swenshuai.xi     {
1400*53ee8cc1Swenshuai.xi         _HAL_REG32_W(pReg, SET_FLAG1(_HAL_REG32_R(pReg), u32ExtSync));
1401*53ee8cc1Swenshuai.xi     }
1402*53ee8cc1Swenshuai.xi     else
1403*53ee8cc1Swenshuai.xi     {
1404*53ee8cc1Swenshuai.xi         _HAL_REG32_W(pReg, RESET_FLAG1(_HAL_REG32_R(pReg), u32ExtSync));
1405*53ee8cc1Swenshuai.xi     }
1406*53ee8cc1Swenshuai.xi }
1407*53ee8cc1Swenshuai.xi 
HAL_TSP_SelPad_Parl(MS_U32 u32EngId,MS_BOOL bParl,MS_U32 u32Flow)1408*53ee8cc1Swenshuai.xi void HAL_TSP_SelPad_Parl(MS_U32 u32EngId, MS_BOOL bParl, MS_U32 u32Flow)
1409*53ee8cc1Swenshuai.xi {
1410*53ee8cc1Swenshuai.xi     REG32* pReg = NULL;
1411*53ee8cc1Swenshuai.xi     MS_U32 u32Parl = 0;
1412*53ee8cc1Swenshuai.xi     MS_U32 u32Pad = _u32FlowPadMap[u32Flow];
1413*53ee8cc1Swenshuai.xi 
1414*53ee8cc1Swenshuai.xi     if (0 == u32Flow)       // TS_IF0
1415*53ee8cc1Swenshuai.xi     {
1416*53ee8cc1Swenshuai.xi         pReg = &(_TspCtrl[0].Hw_Config0);
1417*53ee8cc1Swenshuai.xi         u32Parl = TSP_HW_CFG0_TSIF0_PARL;
1418*53ee8cc1Swenshuai.xi     }
1419*53ee8cc1Swenshuai.xi     else if (1 == u32Flow)  // TS_IF1
1420*53ee8cc1Swenshuai.xi     {
1421*53ee8cc1Swenshuai.xi         pReg = &(_TspCtrl[0].Hw_Config2);
1422*53ee8cc1Swenshuai.xi         u32Parl = TSP_HW_CFG2_TSIF1_PARL;
1423*53ee8cc1Swenshuai.xi     }
1424*53ee8cc1Swenshuai.xi     else
1425*53ee8cc1Swenshuai.xi     {
1426*53ee8cc1Swenshuai.xi         //ASSERT(0);
1427*53ee8cc1Swenshuai.xi         return;
1428*53ee8cc1Swenshuai.xi     }
1429*53ee8cc1Swenshuai.xi 
1430*53ee8cc1Swenshuai.xi     if(u32Pad == TSP_MUX_TS1)
1431*53ee8cc1Swenshuai.xi     {
1432*53ee8cc1Swenshuai.xi         if(bParl)
1433*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_TS1_PARALLEL_IN<< REG_TOP_TS1CFG_SHIFT);
1434*53ee8cc1Swenshuai.xi         else
1435*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_TS1_SERIAL_IN<< REG_TOP_TS1CFG_SHIFT);
1436*53ee8cc1Swenshuai.xi     }
1437*53ee8cc1Swenshuai.xi     else if(u32Pad == TSP_MUX_TS2)
1438*53ee8cc1Swenshuai.xi     {
1439*53ee8cc1Swenshuai.xi         TSP_TOP_REG(REG_TOP_TSCONFIG) = (TSP_TOP_REG(REG_TOP_TSCONFIG) & ~(REG_TOP_TS_TS2_CFG_MASK<< REG_TOP_TS2CFG_SHIFT)) | (REG_TOP_TS2_SERIAL_IN<< REG_TOP_TS2CFG_SHIFT);
1440*53ee8cc1Swenshuai.xi     }
1441*53ee8cc1Swenshuai.xi 
1442*53ee8cc1Swenshuai.xi     if (bParl)  // parallel
1443*53ee8cc1Swenshuai.xi     {
1444*53ee8cc1Swenshuai.xi         _HAL_REG32_W(pReg, SET_FLAG1(_HAL_REG32_R(pReg), u32Parl));
1445*53ee8cc1Swenshuai.xi     }
1446*53ee8cc1Swenshuai.xi     else        // serial
1447*53ee8cc1Swenshuai.xi     {
1448*53ee8cc1Swenshuai.xi         _HAL_REG32_W(pReg, RESET_FLAG1(_HAL_REG32_R(pReg), u32Parl));
1449*53ee8cc1Swenshuai.xi     }
1450*53ee8cc1Swenshuai.xi }
1451*53ee8cc1Swenshuai.xi 
HAL_TSP_Parl_BitOrderSwap(MS_U32 u32EngId,MS_U32 u32Flow,MS_BOOL bInvert)1452*53ee8cc1Swenshuai.xi void HAL_TSP_Parl_BitOrderSwap(MS_U32 u32EngId, MS_U32 u32Flow, MS_BOOL bInvert)
1453*53ee8cc1Swenshuai.xi {
1454*53ee8cc1Swenshuai.xi     REG32* pReg = &(_TspCtrl[0].Hw_Config4);
1455*53ee8cc1Swenshuai.xi     MS_U32 u32Invert = 0;
1456*53ee8cc1Swenshuai.xi 
1457*53ee8cc1Swenshuai.xi     if(0 == u32Flow)
1458*53ee8cc1Swenshuai.xi     {
1459*53ee8cc1Swenshuai.xi         u32Invert = TSP_HW_CFG4_TS_DATA0_SWAP;
1460*53ee8cc1Swenshuai.xi     }
1461*53ee8cc1Swenshuai.xi     else if(1 == u32Flow)
1462*53ee8cc1Swenshuai.xi     {
1463*53ee8cc1Swenshuai.xi         u32Invert = TSP_HW_CFG4_TS_DATA1_SWAP;
1464*53ee8cc1Swenshuai.xi     }
1465*53ee8cc1Swenshuai.xi     else
1466*53ee8cc1Swenshuai.xi     {
1467*53ee8cc1Swenshuai.xi         return;
1468*53ee8cc1Swenshuai.xi     }
1469*53ee8cc1Swenshuai.xi 
1470*53ee8cc1Swenshuai.xi     if(bInvert)
1471*53ee8cc1Swenshuai.xi     {
1472*53ee8cc1Swenshuai.xi         _HAL_REG32_W(pReg, SET_FLAG1(_HAL_REG32_R(pReg), u32Invert));
1473*53ee8cc1Swenshuai.xi     }
1474*53ee8cc1Swenshuai.xi     else
1475*53ee8cc1Swenshuai.xi     {
1476*53ee8cc1Swenshuai.xi         _HAL_REG32_W(pReg, RESET_FLAG1(_HAL_REG32_R(pReg), u32Invert));
1477*53ee8cc1Swenshuai.xi     }
1478*53ee8cc1Swenshuai.xi }
1479*53ee8cc1Swenshuai.xi 
HAL_TSP_GetCap(MS_U32 u32Cap,void * pData)1480*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_GetCap(MS_U32 u32Cap, void* pData)
1481*53ee8cc1Swenshuai.xi {
1482*53ee8cc1Swenshuai.xi     MS_BOOL bRet = TRUE;
1483*53ee8cc1Swenshuai.xi 
1484*53ee8cc1Swenshuai.xi     switch (u32Cap)
1485*53ee8cc1Swenshuai.xi     {
1486*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_PID_FILTER_NUM:
1487*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = TSP_PIDFLT_NUM_ALL;
1488*53ee8cc1Swenshuai.xi         break;
1489*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_SEC_FILTER_NUM:
1490*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = TSP_SECFLT_NUM;
1491*53ee8cc1Swenshuai.xi         break;
1492*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_SEC_BUF_NUM:
1493*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = TSP_SECBUF_NUM;
1494*53ee8cc1Swenshuai.xi         break;
1495*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_PVR_ENG_NUM:
1496*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = TSP_PVR_IF_NUM;
1497*53ee8cc1Swenshuai.xi         break;
1498*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_PVR_FILTER_NUM:
1499*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = TSP_PIDFLT1_NUM;
1500*53ee8cc1Swenshuai.xi         break;
1501*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_MMFI_AUDIO_FILTER_NUM:
1502*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = TSP_MMFI_AUDIO_FILTER_NUM;
1503*53ee8cc1Swenshuai.xi         break;
1504*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_MMFI_V3D_FILTER_NUM:
1505*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = TSP_MMFI_V3D_FILTER_NUM;
1506*53ee8cc1Swenshuai.xi         break;
1507*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_TSIF_NUM:
1508*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = TSP_IF_NUM;
1509*53ee8cc1Swenshuai.xi         break;
1510*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_DEMOD_NUM:
1511*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = TSP_DEMOD_NUM;
1512*53ee8cc1Swenshuai.xi         break;
1513*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_VFIFO_NUM:
1514*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = TSP_VFIFO_NUM;
1515*53ee8cc1Swenshuai.xi         break;
1516*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_AFIFO_NUM:
1517*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = TSP_AFIFO_NUM;
1518*53ee8cc1Swenshuai.xi         break;
1519*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_TS_PAD_NUM:
1520*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = TSP_TS_PAD_NUM;
1521*53ee8cc1Swenshuai.xi         break;
1522*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_VQ_NUM:
1523*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = TSP_VQ_NUM;
1524*53ee8cc1Swenshuai.xi         break;
1525*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_CA_FLT_NUM:
1526*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = TSP_CA_FLT_NUM;
1527*53ee8cc1Swenshuai.xi         break;
1528*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_CA_KEY_NUM:
1529*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = TSP_CA_KEY_NUM;
1530*53ee8cc1Swenshuai.xi         break;
1531*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_FW_ALIGN:
1532*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = (1L << (MIU_BUS+TSP_DNLD_ADDR_ALI_SHIFT));
1533*53ee8cc1Swenshuai.xi         break;
1534*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_VQ_ALIGN:
1535*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_SEC_BUF_ALIGN:
1536*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_PVR_ALIGN:
1537*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = (1L << MIU_BUS);
1538*53ee8cc1Swenshuai.xi         break;
1539*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_VQ_PITCH:
1540*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = VQ_PACKET_UNIT_LEN;
1541*53ee8cc1Swenshuai.xi         break;
1542*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_PVRCA_PATH_NUM:
1543*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = 1;
1544*53ee8cc1Swenshuai.xi         break;
1545*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_PVRCA0_FLT_RANGE:
1546*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = TSP_SECFLT_NUM;
1547*53ee8cc1Swenshuai.xi         *((MS_U32*)pData + 1) = TSP_SECFLT_NUM + TSP_PIDFLT1_NUM - 1;
1548*53ee8cc1Swenshuai.xi         break;
1549*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_PVRCA1_FLT_RANGE:
1550*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_PVR1_FILTER_NUM:
1551*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_SHAREKEY_FLT_RANGE:
1552*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = 0;
1553*53ee8cc1Swenshuai.xi         break;
1554*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_HW_TYPE:
1555*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = 0x00001001;
1556*53ee8cc1Swenshuai.xi         break;
1557*53ee8cc1Swenshuai.xi 
1558*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_HWPCR_SUPPORT:
1559*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = 0;
1560*53ee8cc1Swenshuai.xi         break;
1561*53ee8cc1Swenshuai.xi 
1562*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_HWWP_SET_NUM:
1563*53ee8cc1Swenshuai.xi 		*((MS_U32*)pData) = TSP_WP_SET_NUM;
1564*53ee8cc1Swenshuai.xi         break;
1565*53ee8cc1Swenshuai.xi 
1566*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_DSCMB_ENG_NUM:
1567*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = 1;
1568*53ee8cc1Swenshuai.xi         break;
1569*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_MAX_SEC_FLT_DEPTH:
1570*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = TSP_SEC_FLT_DEPTH;
1571*53ee8cc1Swenshuai.xi         break;
1572*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_FW_BUF_SIZE:
1573*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = TSP_FW_BUF_SIZE;
1574*53ee8cc1Swenshuai.xi         break;
1575*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_FW_BUF_RANGE:
1576*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = TSP_FW_BUF_LOW_BUD;
1577*53ee8cc1Swenshuai.xi         *((MS_U32*)pData+1) = TSP_FW_BUF_UP_BUD;
1578*53ee8cc1Swenshuai.xi         break;
1579*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_VQ_BUF_RANGE:
1580*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = TSP_VQ_BUF_LOW_BUD;
1581*53ee8cc1Swenshuai.xi         *((MS_U32*)pData+1) = TSP_VQ_BUF_UP_BUD;
1582*53ee8cc1Swenshuai.xi         break;
1583*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_SEC_BUF_RANGE:
1584*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = TSP_SEC_BUF_LOW_BUD;
1585*53ee8cc1Swenshuai.xi         *((MS_U32*)pData+1) = TSP_SEC_BUF_UP_BUD;
1586*53ee8cc1Swenshuai.xi         break;
1587*53ee8cc1Swenshuai.xi     case HAL_TSP_CAP_FIQ_NUM:
1588*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = TSP_FIQ_NUM;
1589*53ee8cc1Swenshuai.xi         break;
1590*53ee8cc1Swenshuai.xi     default:
1591*53ee8cc1Swenshuai.xi         *((MS_U32*)pData) = 0xFFFFFFFF;
1592*53ee8cc1Swenshuai.xi         bRet = FALSE;
1593*53ee8cc1Swenshuai.xi         break;
1594*53ee8cc1Swenshuai.xi     }
1595*53ee8cc1Swenshuai.xi     return bRet;
1596*53ee8cc1Swenshuai.xi 
1597*53ee8cc1Swenshuai.xi }
1598*53ee8cc1Swenshuai.xi 
HAL_TSP_RemoveDupAVPkt(MS_BOOL bEnable)1599*53ee8cc1Swenshuai.xi void HAL_TSP_RemoveDupAVPkt(MS_BOOL bEnable)
1600*53ee8cc1Swenshuai.xi {
1601*53ee8cc1Swenshuai.xi     if(bEnable)
1602*53ee8cc1Swenshuai.xi     {
1603*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].PktChkSizeFilein,
1604*53ee8cc1Swenshuai.xi             _HAL_REG32_R(&_TspCtrl[0].PktChkSizeFilein) | (TSP_DUP_PKT_SKIP_VD|TSP_DUP_PKT_SKIP_V3D|TSP_DUP_PKT_SKIP_AV|TSP_DUP_PKT_SKIP_AD));
1605*53ee8cc1Swenshuai.xi     }
1606*53ee8cc1Swenshuai.xi     else
1607*53ee8cc1Swenshuai.xi     {
1608*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].PktChkSizeFilein,
1609*53ee8cc1Swenshuai.xi             _HAL_REG32_R(&_TspCtrl[0].PktChkSizeFilein) & ~(TSP_DUP_PKT_SKIP_VD|TSP_DUP_PKT_SKIP_V3D|TSP_DUP_PKT_SKIP_AV|TSP_DUP_PKT_SKIP_AD));
1610*53ee8cc1Swenshuai.xi     }
1611*53ee8cc1Swenshuai.xi }
1612*53ee8cc1Swenshuai.xi 
HAL_TSP_RemoveDupAVFifoPkt(MS_U32 u32StreamId,MS_BOOL bEnable)1613*53ee8cc1Swenshuai.xi void HAL_TSP_RemoveDupAVFifoPkt(MS_U32 u32StreamId, MS_BOOL bEnable)
1614*53ee8cc1Swenshuai.xi {
1615*53ee8cc1Swenshuai.xi     MS_U32 u32Flag[4] = {TSP_DUP_PKT_SKIP_VD, TSP_DUP_PKT_SKIP_AV, TSP_DUP_PKT_SKIP_AD, TSP_DUP_PKT_SKIP_V3D};
1616*53ee8cc1Swenshuai.xi 
1617*53ee8cc1Swenshuai.xi     if(bEnable)
1618*53ee8cc1Swenshuai.xi     {
1619*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].PktChkSizeFilein,
1620*53ee8cc1Swenshuai.xi             _HAL_REG32_R(&_TspCtrl[0].PktChkSizeFilein) | u32Flag[u32StreamId]);
1621*53ee8cc1Swenshuai.xi     }
1622*53ee8cc1Swenshuai.xi     else
1623*53ee8cc1Swenshuai.xi     {
1624*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].PktChkSizeFilein,
1625*53ee8cc1Swenshuai.xi             _HAL_REG32_R(&_TspCtrl[0].PktChkSizeFilein) & ~u32Flag[u32StreamId]);
1626*53ee8cc1Swenshuai.xi     }
1627*53ee8cc1Swenshuai.xi }
1628*53ee8cc1Swenshuai.xi 
HAL_TSP_GetTSIF_Status(MS_U8 u8TsIfId,MS_U16 * pu16Pad,MS_U16 * pu16Clk,MS_BOOL * pbExtSync,MS_BOOL * pbParl)1629*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_GetTSIF_Status(MS_U8 u8TsIfId, MS_U16* pu16Pad, MS_U16* pu16Clk, MS_BOOL* pbExtSync, MS_BOOL* pbParl)
1630*53ee8cc1Swenshuai.xi {
1631*53ee8cc1Swenshuai.xi     MS_U16 u16pad;
1632*53ee8cc1Swenshuai.xi     MS_U32 u32data;
1633*53ee8cc1Swenshuai.xi 
1634*53ee8cc1Swenshuai.xi     *pu16Pad = 0xFFFF;
1635*53ee8cc1Swenshuai.xi     *pu16Clk = TSP_CLK_DISABLE;
1636*53ee8cc1Swenshuai.xi     *pbExtSync = FALSE;
1637*53ee8cc1Swenshuai.xi     *pbParl = FALSE;
1638*53ee8cc1Swenshuai.xi 
1639*53ee8cc1Swenshuai.xi     u16pad = TSP_TOP_REG(REG_TOP_TSN_MUX);
1640*53ee8cc1Swenshuai.xi 
1641*53ee8cc1Swenshuai.xi     switch(u8TsIfId)
1642*53ee8cc1Swenshuai.xi     {
1643*53ee8cc1Swenshuai.xi         case 0:
1644*53ee8cc1Swenshuai.xi             u16pad >>= REG_TOP_TSN_MUX_TS0_SHIFT;
1645*53ee8cc1Swenshuai.xi             *pu16Clk = (TSP_CLKGEN0_REG(REG_CLKGEN0_TSN_CLK) >> REG_CLKGEN0_TSN_CLK_TS0_SHIFT) & REG_CLKGEN0_TSN_CLK_MASK;
1646*53ee8cc1Swenshuai.xi             u32data = _HAL_REG32_R(&_TspCtrl[0].Hw_Config0);
1647*53ee8cc1Swenshuai.xi             *pbExtSync = ((u32data & TSP_HW_CFG0_TSIF0_EXTSYNC) == TSP_HW_CFG0_TSIF0_EXTSYNC);
1648*53ee8cc1Swenshuai.xi             *pbParl = ((u32data & TSP_HW_CFG0_TSIF0_PARL) == TSP_HW_CFG0_TSIF0_PARL);
1649*53ee8cc1Swenshuai.xi             break;
1650*53ee8cc1Swenshuai.xi         case 1:
1651*53ee8cc1Swenshuai.xi             u16pad >>= REG_TOP_TSN_MUX_TS1_SHIFT;
1652*53ee8cc1Swenshuai.xi             *pu16Clk = (TSP_CLKGEN0_REG(REG_CLKGEN0_TSN_CLK) >> REG_CLKGEN0_TSN_CLK_TS1_SHIFT) & REG_CLKGEN0_TSN_CLK_MASK;
1653*53ee8cc1Swenshuai.xi             u32data = _HAL_REG32_R(&_TspCtrl[0].Hw_Config2);
1654*53ee8cc1Swenshuai.xi             *pbExtSync = ((u32data & TSP_HW_CFG2_TSIF1_EXTSYNC) == TSP_HW_CFG2_TSIF1_EXTSYNC);
1655*53ee8cc1Swenshuai.xi             *pbParl = ((u32data & TSP_HW_CFG2_TSIF1_PARL) == TSP_HW_CFG2_TSIF1_PARL);
1656*53ee8cc1Swenshuai.xi             break;
1657*53ee8cc1Swenshuai.xi         default:
1658*53ee8cc1Swenshuai.xi             return FALSE;
1659*53ee8cc1Swenshuai.xi     }
1660*53ee8cc1Swenshuai.xi 
1661*53ee8cc1Swenshuai.xi     *pu16Pad = u16pad & REG_TOP_TSN_MUX_MASK;
1662*53ee8cc1Swenshuai.xi 
1663*53ee8cc1Swenshuai.xi     return TRUE;
1664*53ee8cc1Swenshuai.xi }
1665*53ee8cc1Swenshuai.xi 
HAL_TSP_Check_FIFO_Overflow(MS_U32 u32StreamId)1666*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_Check_FIFO_Overflow(MS_U32 u32StreamId)
1667*53ee8cc1Swenshuai.xi {
1668*53ee8cc1Swenshuai.xi     MS_U32 u32data = _HAL_REG32_R(&_TspCtrl[0].Idr_Read1);
1669*53ee8cc1Swenshuai.xi 
1670*53ee8cc1Swenshuai.xi     switch (u32StreamId)
1671*53ee8cc1Swenshuai.xi     {
1672*53ee8cc1Swenshuai.xi         case 0: // return VFifo status
1673*53ee8cc1Swenshuai.xi             return ((u32data & TSP_VD_FIFO_OVERFLOW) == TSP_VD_FIFO_OVERFLOW);
1674*53ee8cc1Swenshuai.xi         case 1: // return AFifo 0 status
1675*53ee8cc1Swenshuai.xi             return ((u32data & TSP_AU_FIFO_OVERFLOW) == TSP_AU_FIFO_OVERFLOW);
1676*53ee8cc1Swenshuai.xi         case 2: // return AFifo 1 status
1677*53ee8cc1Swenshuai.xi             return ((u32data & TSP_AUB_FIFO_OVERFLOW) == TSP_AUB_FIFO_OVERFLOW);
1678*53ee8cc1Swenshuai.xi         case 3: // return V3D Fifo status
1679*53ee8cc1Swenshuai.xi             return ((u32data & TSP_V3D_FIFO_OVERFLOW) == TSP_V3D_FIFO_OVERFLOW);
1680*53ee8cc1Swenshuai.xi         default:
1681*53ee8cc1Swenshuai.xi             return FALSE;
1682*53ee8cc1Swenshuai.xi     }
1683*53ee8cc1Swenshuai.xi }
1684*53ee8cc1Swenshuai.xi 
1685*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1686*53ee8cc1Swenshuai.xi // Macro function
1687*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
_HAL_TSP_FW_load(MS_PHY phyFwAddrPhys,MS_U32 u32FwSize,MS_BOOL bFwDMA,MS_BOOL bIQmem,MS_BOOL bDQmem)1688*53ee8cc1Swenshuai.xi static void _HAL_TSP_FW_load(
1689*53ee8cc1Swenshuai.xi     MS_PHY                     phyFwAddrPhys,
1690*53ee8cc1Swenshuai.xi     MS_U32                     u32FwSize,
1691*53ee8cc1Swenshuai.xi     MS_BOOL                    bFwDMA,
1692*53ee8cc1Swenshuai.xi     MS_BOOL                    bIQmem,
1693*53ee8cc1Swenshuai.xi     MS_BOOL                    bDQmem)
1694*53ee8cc1Swenshuai.xi {
1695*53ee8cc1Swenshuai.xi #define _TSP_QMEM_I_MASK            0xffff8000UL //total: 0x4000
1696*53ee8cc1Swenshuai.xi #define _TSP_QMEM_I_ADDR_HIT        0x00000000UL
1697*53ee8cc1Swenshuai.xi #define _TSP_QMEM_I_ADDR_MISS       0xffffffffUL
1698*53ee8cc1Swenshuai.xi #define _TSP_QMEM_D_MASK            0xffff8000UL
1699*53ee8cc1Swenshuai.xi #define _TSP_QMEM_D_ADDR_HIT        0x00000000UL
1700*53ee8cc1Swenshuai.xi #define _TSP_QMEM_D_ADDR_MISS       0xffffffffUL
1701*53ee8cc1Swenshuai.xi #define _TSP_QMEM_SIZE              0x1000UL // 16K bytes, 32bit aligment  //0x4000
1702*53ee8cc1Swenshuai.xi 
1703*53ee8cc1Swenshuai.xi     // bDQmem is always true
1704*53ee8cc1Swenshuai.xi     MS_ASSERT(bDQmem);
1705*53ee8cc1Swenshuai.xi 
1706*53ee8cc1Swenshuai.xi     _phyOrLoadMiuOffset = _HAL_TSP_MIU_OFFSET(phyFwAddrPhys);
1707*53ee8cc1Swenshuai.xi 
1708*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl2[0].Qmem_Config,
1709*53ee8cc1Swenshuai.xi         SET_FLAG1(_HAL_REG32_R(&_TspCtrl2[0].Qmem_Config), TSP_TSP_SEL_SRAM));
1710*53ee8cc1Swenshuai.xi 
1711*53ee8cc1Swenshuai.xi     // @FIXME: Richard: Only allow TSP FW running in DRAM at this first stage.
1712*53ee8cc1Swenshuai.xi     // improve this afterward.
1713*53ee8cc1Swenshuai.xi     MS_ASSERT(phyFwAddrPhys & TSP_CPU_BASE_ADDR_MASK);
1714*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].Cpu_Base, 0/*u32FwAddrPhys >> 3*/); // 16 bytes address unit
1715*53ee8cc1Swenshuai.xi 
1716*53ee8cc1Swenshuai.xi     if (bFwDMA)
1717*53ee8cc1Swenshuai.xi     {
1718*53ee8cc1Swenshuai.xi         MS_U32              u32DnldCtrl  = 0;
1719*53ee8cc1Swenshuai.xi         MS_U32              u32DnldCtrl1 = 0;
1720*53ee8cc1Swenshuai.xi         u32DnldCtrl  =      (MS_U32)(((phyFwAddrPhys-_phyOrLoadMiuOffset) >> MIU_BUS) >> TSP_DNLD_ADDR_ALI_SHIFT) & TSP_DNLD_ADDR_MASK;
1721*53ee8cc1Swenshuai.xi         u32DnldCtrl1 =      (MS_U32)((((phyFwAddrPhys-_phyOrLoadMiuOffset) >> MIU_BUS) >> TSP_DNLD_ADDR_ALI_SHIFT) & TSP_DNLD_ADDR_MASK1) >> TSP_DNLD_ADDR_SHFT1;
1722*53ee8cc1Swenshuai.xi         printf("firmware 111 0x%08lx 0x%08lx 0x%08lx\n", (unsigned long)phyFwAddrPhys, (unsigned long)u32DnldCtrl1, (unsigned long)u32DnldCtrl);
1723*53ee8cc1Swenshuai.xi 
1724*53ee8cc1Swenshuai.xi         u32DnldCtrl |=      (_TSP_QMEM_SIZE << TSP_DNLD_NUM_SHFT);
1725*53ee8cc1Swenshuai.xi 
1726*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].Dnld_Ctrl, u32DnldCtrl);
1727*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].Dnld_Ctrl2, (_HAL_REG32_R(&_TspCtrl[0].Dnld_Ctrl2) & ~(TSP_DNLD_ADDR_MASK1 >> TSP_DNLD_ADDR_SHFT1)) | u32DnldCtrl1);
1728*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].TSP_Ctrl,
1729*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].TSP_Ctrl), TSP_CTRL_DNLD_START| TSP_CTRL_DNLD_DONE));
1730*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].TSP_Ctrl,
1731*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].TSP_Ctrl), TSP_CTRL_DNLD_START));
1732*53ee8cc1Swenshuai.xi         while (!HAS_FLAG(_HAL_REG32_R(&_TspCtrl[0].TSP_Ctrl), TSP_CTRL_DNLD_DONE));//printf(".");
1733*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].TSP_Ctrl,
1734*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].TSP_Ctrl), TSP_CTRL_DNLD_START| TSP_CTRL_DNLD_DONE));
1735*53ee8cc1Swenshuai.xi     }
1736*53ee8cc1Swenshuai.xi 
1737*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].Qmem_Imask, _TSP_QMEM_I_MASK);
1738*53ee8cc1Swenshuai.xi 
1739*53ee8cc1Swenshuai.xi     if (bIQmem)
1740*53ee8cc1Swenshuai.xi     {
1741*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].Qmem_Ibase,
1742*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Qmem_Ibase), _TSP_QMEM_I_ADDR_HIT));
1743*53ee8cc1Swenshuai.xi     }
1744*53ee8cc1Swenshuai.xi     else
1745*53ee8cc1Swenshuai.xi     {
1746*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].Qmem_Ibase, _TSP_QMEM_I_ADDR_MISS);
1747*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].TSP_Ctrl,
1748*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].TSP_Ctrl), TSP_CTRL_ICACHE_EN));
1749*53ee8cc1Swenshuai.xi     }
1750*53ee8cc1Swenshuai.xi 
1751*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].Qmem_Dmask,
1752*53ee8cc1Swenshuai.xi             SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Qmem_Dmask), _TSP_QMEM_D_MASK));
1753*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].Qmem_Dbase,
1754*53ee8cc1Swenshuai.xi             SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Qmem_Dbase), _TSP_QMEM_D_ADDR_HIT));
1755*53ee8cc1Swenshuai.xi 
1756*53ee8cc1Swenshuai.xi #undef _TSP_QMEM_I_MASK
1757*53ee8cc1Swenshuai.xi #undef _TSP_QMEM_I_ADDR_HIT
1758*53ee8cc1Swenshuai.xi #undef _TSP_QMEM_I_ADDR_MISS
1759*53ee8cc1Swenshuai.xi #undef _TSP_QMEM_D_MASK
1760*53ee8cc1Swenshuai.xi #undef _TSP_QMEM_D_ADDR_HIT
1761*53ee8cc1Swenshuai.xi #undef _TSP_QMEM_D_ADDR_MISS
1762*53ee8cc1Swenshuai.xi #undef _TSP_QMEM_SIZE
1763*53ee8cc1Swenshuai.xi }
1764*53ee8cc1Swenshuai.xi 
HAL_TSP_filein_enable(MS_BOOL b_enable)1765*53ee8cc1Swenshuai.xi void HAL_TSP_filein_enable(MS_BOOL b_enable)
1766*53ee8cc1Swenshuai.xi {
1767*53ee8cc1Swenshuai.xi     // disable timeshift write protect -- it must enable while record/playback use the same buffer
1768*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&_TspCtrl[0].TSP_Ctrl1,
1769*53ee8cc1Swenshuai.xi                   RESET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].TSP_Ctrl1), TSP_CTRL1_FILE_CHECK_WP));
1770*53ee8cc1Swenshuai.xi 
1771*53ee8cc1Swenshuai.xi     // Richard: enable/disable file in timer as well
1772*53ee8cc1Swenshuai.xi     //          file in could only walk through pid filter set 0.
1773*53ee8cc1Swenshuai.xi     if (b_enable)
1774*53ee8cc1Swenshuai.xi     {
1775*53ee8cc1Swenshuai.xi         // Set Data port enable for audio bypass
1776*53ee8cc1Swenshuai.xi         //_HAL_REG32_W(&_TspCtrl[0].Hw_Config0,
1777*53ee8cc1Swenshuai.xi         //        SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config0), TSP_HW_CFG0_DATA_PORT_EN));
1778*53ee8cc1Swenshuai.xi         //_HAL_REG16_W(&_TspCtrl[0].TSP_Ctrl1,
1779*53ee8cc1Swenshuai.xi         //        SET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].TSP_Ctrl1), TSP_CTRL1_FILEIN_ENABLE| TSP_CTRL1_FILEIN_TIMER_ENABLE));
1780*53ee8cc1Swenshuai.xi 
1781*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&_TspCtrl[0].TSP_Ctrl1,
1782*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].TSP_Ctrl1), TSP_CTRL1_PVR_CMD_QUEUE_ENABLE));
1783*53ee8cc1Swenshuai.xi     }
1784*53ee8cc1Swenshuai.xi     else
1785*53ee8cc1Swenshuai.xi     {
1786*53ee8cc1Swenshuai.xi         //_HAL_REG32_W(&_TspCtrl[0].Hw_Config0,
1787*53ee8cc1Swenshuai.xi         //        RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config0), TSP_HW_CFG0_DATA_PORT_EN));
1788*53ee8cc1Swenshuai.xi         //_HAL_REG16_W(&_TspCtrl[0].TSP_Ctrl1,
1789*53ee8cc1Swenshuai.xi         //        RESET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].TSP_Ctrl1), TSP_CTRL1_FILEIN_ENABLE| TSP_CTRL1_FILEIN_TIMER_ENABLE));
1790*53ee8cc1Swenshuai.xi 
1791*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&_TspCtrl[0].TSP_Ctrl1,
1792*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].TSP_Ctrl1), TSP_CTRL1_PVR_CMD_QUEUE_ENABLE));
1793*53ee8cc1Swenshuai.xi     }
1794*53ee8cc1Swenshuai.xi     //_HAL_REG32_W(&_TspCtrl[0].Hw_Config0,
1795*53ee8cc1Swenshuai.xi                 //RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config0), TSP_HW_CFG0_DATA_PORT_EN));
1796*53ee8cc1Swenshuai.xi }
1797*53ee8cc1Swenshuai.xi 
_HAL_TSP_tsif_select(MS_U8 u8_tsif)1798*53ee8cc1Swenshuai.xi static void _HAL_TSP_tsif_select(MS_U8 u8_tsif)
1799*53ee8cc1Swenshuai.xi {
1800*53ee8cc1Swenshuai.xi     if (u8_tsif == 1)
1801*53ee8cc1Swenshuai.xi     {
1802*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
1803*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_HW_CFG4_TSIF1_ENABLE));
1804*53ee8cc1Swenshuai.xi     }
1805*53ee8cc1Swenshuai.xi     else
1806*53ee8cc1Swenshuai.xi     {
1807*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
1808*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_HW_CFG4_TSIF0_ENABLE));
1809*53ee8cc1Swenshuai.xi     }
1810*53ee8cc1Swenshuai.xi }
1811*53ee8cc1Swenshuai.xi 
1812*53ee8cc1Swenshuai.xi /*
1813*53ee8cc1Swenshuai.xi static void _HAL_TSP_SelPad(MS_U32 u32EngId, MS_U32 PadId)
1814*53ee8cc1Swenshuai.xi {
1815*53ee8cc1Swenshuai.xi     if (PadId)  // TS1
1816*53ee8cc1Swenshuai.xi     {
1817*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[u32EngId].TSP_Ctrl,
1818*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].TSP_Ctrl), TSP_CTRL_PAD1_SEL));
1819*53ee8cc1Swenshuai.xi     }
1820*53ee8cc1Swenshuai.xi     else        // TS0
1821*53ee8cc1Swenshuai.xi     {
1822*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[u32EngId].TSP_Ctrl,
1823*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].TSP_Ctrl), TSP_CTRL_PAD1_SEL));
1824*53ee8cc1Swenshuai.xi     }
1825*53ee8cc1Swenshuai.xi }
1826*53ee8cc1Swenshuai.xi */
1827*53ee8cc1Swenshuai.xi 
HAL_TSP_PS_Path_Disable(void)1828*53ee8cc1Swenshuai.xi void HAL_TSP_PS_Path_Disable(void)
1829*53ee8cc1Swenshuai.xi {
1830*53ee8cc1Swenshuai.xi     // set PS VID/AUD enable while video/audio/audio2 bypass mode
1831*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
1832*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)));
1833*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].Dnld_Ctrl2,
1834*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Dnld_Ctrl2), TSP_PS_VID3D_EN));
1835*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].Hw_Config0,
1836*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config0), TSP_HW_CFG0_DATA_PORT_EN));
1837*53ee8cc1Swenshuai.xi }
1838*53ee8cc1Swenshuai.xi 
HAL_TSP_PS_Path_Enable(MS_U32 u32TsDmaCtrl)1839*53ee8cc1Swenshuai.xi void HAL_TSP_PS_Path_Enable(MS_U32 u32TsDmaCtrl)
1840*53ee8cc1Swenshuai.xi {
1841*53ee8cc1Swenshuai.xi     switch (u32TsDmaCtrl)
1842*53ee8cc1Swenshuai.xi     {
1843*53ee8cc1Swenshuai.xi         case TSP_TSDMA_CTRL_VPES0:
1844*53ee8cc1Swenshuai.xi             if((_HAL_REG32_R(&_TspCtrl[0].Hw_Config4) & TSP_HW_CFG4_PS_VID_EN) == 0)
1845*53ee8cc1Swenshuai.xi             {
1846*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
1847*53ee8cc1Swenshuai.xi                     RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_HW_CFG4_PS_AUD_EN|TSP_HW_CFG4_PS_AUD2_EN));
1848*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].Dnld_Ctrl2,
1849*53ee8cc1Swenshuai.xi                     RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Dnld_Ctrl2), TSP_PS_VID3D_EN));
1850*53ee8cc1Swenshuai.xi 
1851*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].Hw_Config0,
1852*53ee8cc1Swenshuai.xi                     SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config0), TSP_HW_CFG0_DATA_PORT_EN));
1853*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
1854*53ee8cc1Swenshuai.xi                     SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_HW_CFG4_PS_VID_EN));
1855*53ee8cc1Swenshuai.xi             }
1856*53ee8cc1Swenshuai.xi             break;
1857*53ee8cc1Swenshuai.xi         case TSP_TSDMA_CTRL_APES0:
1858*53ee8cc1Swenshuai.xi             if((_HAL_REG32_R(&_TspCtrl[0].Hw_Config4) & TSP_HW_CFG4_PS_AUD_EN) == 0)
1859*53ee8cc1Swenshuai.xi             {
1860*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
1861*53ee8cc1Swenshuai.xi                     RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_HW_CFG4_PS_VID_EN|TSP_HW_CFG4_PS_AUD2_EN));
1862*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].Dnld_Ctrl2,
1863*53ee8cc1Swenshuai.xi                     RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Dnld_Ctrl2), TSP_PS_VID3D_EN));
1864*53ee8cc1Swenshuai.xi 
1865*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].Hw_Config0,
1866*53ee8cc1Swenshuai.xi                     SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config0), TSP_HW_CFG0_DATA_PORT_EN));
1867*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
1868*53ee8cc1Swenshuai.xi                     SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_HW_CFG4_PS_AUD_EN));
1869*53ee8cc1Swenshuai.xi             }
1870*53ee8cc1Swenshuai.xi             break;
1871*53ee8cc1Swenshuai.xi         case TSP_TSDMA_CTRL_A2PES0:
1872*53ee8cc1Swenshuai.xi             if((_HAL_REG32_R(&_TspCtrl[0].Hw_Config4) & TSP_HW_CFG4_PS_AUD2_EN) == 0)
1873*53ee8cc1Swenshuai.xi             {
1874*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
1875*53ee8cc1Swenshuai.xi                     RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), (TSP_HW_CFG4_PS_VID_EN|TSP_HW_CFG4_PS_AUD_EN)));
1876*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].Dnld_Ctrl2,
1877*53ee8cc1Swenshuai.xi                     RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Dnld_Ctrl2), TSP_PS_VID3D_EN));
1878*53ee8cc1Swenshuai.xi 
1879*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].Hw_Config0,
1880*53ee8cc1Swenshuai.xi                     SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config0), TSP_HW_CFG0_DATA_PORT_EN));
1881*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
1882*53ee8cc1Swenshuai.xi                     SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_HW_CFG4_PS_AUD2_EN));
1883*53ee8cc1Swenshuai.xi             }
1884*53ee8cc1Swenshuai.xi             break;
1885*53ee8cc1Swenshuai.xi         case TSP_TSDMA_CTRL_V3DPES0:
1886*53ee8cc1Swenshuai.xi             if((_HAL_REG32_R(&_TspCtrl[0].Dnld_Ctrl2) & TSP_PS_VID3D_EN) == 0)
1887*53ee8cc1Swenshuai.xi             {
1888*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
1889*53ee8cc1Swenshuai.xi                     RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), (TSP_HW_CFG4_PS_VID_EN|TSP_HW_CFG4_PS_AUD_EN)));
1890*53ee8cc1Swenshuai.xi 
1891*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].Hw_Config0,
1892*53ee8cc1Swenshuai.xi                     SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config0), TSP_HW_CFG0_DATA_PORT_EN));
1893*53ee8cc1Swenshuai.xi                 _HAL_REG32_W(&_TspCtrl[0].Dnld_Ctrl2,
1894*53ee8cc1Swenshuai.xi                     SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Dnld_Ctrl2), TSP_PS_VID3D_EN));
1895*53ee8cc1Swenshuai.xi             }
1896*53ee8cc1Swenshuai.xi             break;
1897*53ee8cc1Swenshuai.xi         default:
1898*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
1899*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)));
1900*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].Dnld_Ctrl2,
1901*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Dnld_Ctrl2), TSP_PS_VID3D_EN));
1902*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].Hw_Config0,
1903*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config0), TSP_HW_CFG0_DATA_PORT_EN));
1904*53ee8cc1Swenshuai.xi             break;
1905*53ee8cc1Swenshuai.xi     }
1906*53ee8cc1Swenshuai.xi }
1907*53ee8cc1Swenshuai.xi 
HAL_TSP_GetCtrlMode(MS_U32 u32EngId)1908*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_GetCtrlMode(MS_U32 u32EngId)
1909*53ee8cc1Swenshuai.xi {
1910*53ee8cc1Swenshuai.xi     return (_HAL_REG32_R(&_TspCtrl[u32EngId].TSP_Ctrl));
1911*53ee8cc1Swenshuai.xi }
1912*53ee8cc1Swenshuai.xi 
HAL_TSP_DoubleBuf_En(MS_BOOL bBuf_Sel)1913*53ee8cc1Swenshuai.xi void HAL_TSP_DoubleBuf_En(MS_BOOL bBuf_Sel)
1914*53ee8cc1Swenshuai.xi {
1915*53ee8cc1Swenshuai.xi     if (bBuf_Sel)
1916*53ee8cc1Swenshuai.xi     {
1917*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].reg160C, _HAL_REG32_R(&_TspCtrl[0].reg160C) | (TSP_DOUBLE_BUF_EN|TSP_BLK_DISABLE|TSP_DOUBLE_BUF_DESC));
1918*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].reg160C, _HAL_REG32_R(&_TspCtrl[0].reg160C) & ~TSP_DOUBLE_BUF_SWITCH);
1919*53ee8cc1Swenshuai.xi     }
1920*53ee8cc1Swenshuai.xi     else
1921*53ee8cc1Swenshuai.xi     {
1922*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].reg160C, _HAL_REG32_R(&_TspCtrl[0].reg160C) & ~(TSP_DOUBLE_BUF_EN|TSP_BLK_DISABLE));
1923*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].reg160C, _HAL_REG32_R(&_TspCtrl[0].reg160C) | (TSP_DOUBLE_BUF_SWITCH|TSP_DOUBLE_BUF_DESC));
1924*53ee8cc1Swenshuai.xi     }
1925*53ee8cc1Swenshuai.xi     //_HAL_REG32_W(&_TspCtrl[0].reg160C, _HAL_REG32_R(&_TspCtrl[0].reg160C) | TSP_DOUBLE_BUF_DESC);
1926*53ee8cc1Swenshuai.xi }
1927*53ee8cc1Swenshuai.xi 
HAL_TSP_Flush_AV_FIFO(MS_U32 u32StreamId,MS_BOOL bFlush)1928*53ee8cc1Swenshuai.xi void HAL_TSP_Flush_AV_FIFO(MS_U32 u32StreamId, MS_BOOL bFlush)
1929*53ee8cc1Swenshuai.xi {
1930*53ee8cc1Swenshuai.xi     MS_U32 u32Flag;
1931*53ee8cc1Swenshuai.xi 
1932*53ee8cc1Swenshuai.xi     switch(u32StreamId)
1933*53ee8cc1Swenshuai.xi     {
1934*53ee8cc1Swenshuai.xi         case 0:
1935*53ee8cc1Swenshuai.xi             u32Flag = TSP_RESET_VFIFO;
1936*53ee8cc1Swenshuai.xi             break;
1937*53ee8cc1Swenshuai.xi         case 1:
1938*53ee8cc1Swenshuai.xi             u32Flag = TSP_RESET_AFIFO;
1939*53ee8cc1Swenshuai.xi             break;
1940*53ee8cc1Swenshuai.xi         case 2:
1941*53ee8cc1Swenshuai.xi             u32Flag = TSP_RESET_AFIFO2;
1942*53ee8cc1Swenshuai.xi             break;
1943*53ee8cc1Swenshuai.xi         case 3:
1944*53ee8cc1Swenshuai.xi             u32Flag = TSP_RESET_VFIFO3D;
1945*53ee8cc1Swenshuai.xi             break;
1946*53ee8cc1Swenshuai.xi         default:
1947*53ee8cc1Swenshuai.xi             return;
1948*53ee8cc1Swenshuai.xi     }
1949*53ee8cc1Swenshuai.xi     if (bFlush)
1950*53ee8cc1Swenshuai.xi     {
1951*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].reg160C,
1952*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), u32Flag));
1953*53ee8cc1Swenshuai.xi     }
1954*53ee8cc1Swenshuai.xi     else
1955*53ee8cc1Swenshuai.xi     {
1956*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].reg160C,
1957*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), u32Flag));
1958*53ee8cc1Swenshuai.xi     }
1959*53ee8cc1Swenshuai.xi }
1960*53ee8cc1Swenshuai.xi 
1961*53ee8cc1Swenshuai.xi #define ADDR_AVFIFO_STATUS         (_virtRegBase+ 0x2adc)
HAL_TSP_Get_AVFifoLevel(MS_U32 u32StreamId)1962*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_Get_AVFifoLevel(MS_U32 u32StreamId)
1963*53ee8cc1Swenshuai.xi {
1964*53ee8cc1Swenshuai.xi     switch (u32StreamId)
1965*53ee8cc1Swenshuai.xi     {
1966*53ee8cc1Swenshuai.xi         case 0: // return VFifo status
1967*53ee8cc1Swenshuai.xi             return (((REG16_T(ADDR_AVFIFO_STATUS))>>4)&0x0f);
1968*53ee8cc1Swenshuai.xi         case 1: // return AFifo 0 status
1969*53ee8cc1Swenshuai.xi             return (((REG16_T(ADDR_AVFIFO_STATUS))>>8)&0x0f);
1970*53ee8cc1Swenshuai.xi         case 2: // return AFifo 1 status
1971*53ee8cc1Swenshuai.xi             return (((REG16_T(ADDR_AVFIFO_STATUS))>>12)&0x0f);
1972*53ee8cc1Swenshuai.xi         case 3: // return V3D Fifo status
1973*53ee8cc1Swenshuai.xi             return (REG16_T(ADDR_AVFIFO_STATUS)&0x0f);
1974*53ee8cc1Swenshuai.xi         default:
1975*53ee8cc1Swenshuai.xi             return -1;
1976*53ee8cc1Swenshuai.xi     }
1977*53ee8cc1Swenshuai.xi }
1978*53ee8cc1Swenshuai.xi #undef ADDR_AVFIFO_STATUS
1979*53ee8cc1Swenshuai.xi 
HAL_TSP_Ind_Enable(void)1980*53ee8cc1Swenshuai.xi void HAL_TSP_Ind_Enable(void)
1981*53ee8cc1Swenshuai.xi {
1982*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].TSP_Ctrl,
1983*53ee8cc1Swenshuai.xi             SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].TSP_Ctrl), TSP_CTRL_SW_RST));
1984*53ee8cc1Swenshuai.xi }
1985*53ee8cc1Swenshuai.xi 
HAL_TSP_HW_INT_STATUS(void)1986*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_HW_INT_STATUS(void)
1987*53ee8cc1Swenshuai.xi {
1988*53ee8cc1Swenshuai.xi     return (MS_U32)(_HAL_REG16_R(&_TspCtrl[0].HwInt_Stat) & TSP_HWINT_STATUS_MASK);
1989*53ee8cc1Swenshuai.xi }
1990*53ee8cc1Swenshuai.xi 
HAL_TSP_SetBank(MS_VIRT u32NonPmBankAddr,MS_VIRT u32PmBankAddr)1991*53ee8cc1Swenshuai.xi void HAL_TSP_SetBank(MS_VIRT u32NonPmBankAddr, MS_VIRT u32PmBankAddr)
1992*53ee8cc1Swenshuai.xi {
1993*53ee8cc1Swenshuai.xi     _virtRegBase = u32NonPmBankAddr;
1994*53ee8cc1Swenshuai.xi     _TspCtrl  = (REG_Ctrl*)(_virtRegBase  + REG_CTRL_BASE);
1995*53ee8cc1Swenshuai.xi     _TspCtrl2 = (REG_Ctrl2*)(_virtRegBase + REG_CTRL_MMFIBASE);
1996*53ee8cc1Swenshuai.xi     _TspCtrl3 = (REG_Ctrl3*)(_virtRegBase + REG_CTRL_BASE_TS3);
1997*53ee8cc1Swenshuai.xi }
1998*53ee8cc1Swenshuai.xi 
HAL_TSP_Reset(MS_U32 u32EngId)1999*53ee8cc1Swenshuai.xi void HAL_TSP_Reset(MS_U32 u32EngId)
2000*53ee8cc1Swenshuai.xi {
2001*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[u32EngId].TSP_Ctrl, 0);
2002*53ee8cc1Swenshuai.xi }
2003*53ee8cc1Swenshuai.xi 
HAL_TSP_HwPatch(void)2004*53ee8cc1Swenshuai.xi void HAL_TSP_HwPatch(void)
2005*53ee8cc1Swenshuai.xi {
2006*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl2[0].Qmem_Config,
2007*53ee8cc1Swenshuai.xi         SET_FLAG1(_HAL_REG32_R(&_TspCtrl2[0].Qmem_Config), TSP_TSP_SEL_SRAM));
2008*53ee8cc1Swenshuai.xi 
2009*53ee8cc1Swenshuai.xi     // To prevent the race condition of accessing section filter registers from HW/CPU.
2010*53ee8cc1Swenshuai.xi     // It's a HW bug.
2011*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
2012*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));
2013*53ee8cc1Swenshuai.xi 
2014*53ee8cc1Swenshuai.xi     // Bad initial value of TSP_CTRL1
2015*53ee8cc1Swenshuai.xi     // Suppose Standby mode for TSP should NOT be enabled.
2016*53ee8cc1Swenshuai.xi     // Enabling TSP standby mode cause TSP section registers (SRAM in AEON) malfunction.
2017*53ee8cc1Swenshuai.xi     // Disable it by SW at this stage.
2018*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&_TspCtrl[0].TSP_Ctrl1,
2019*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].TSP_Ctrl1), TSP_CTRL1_STANDBY));
2020*53ee8cc1Swenshuai.xi 
2021*53ee8cc1Swenshuai.xi     // @FIXME: disable not match mask
2022*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].reg15b4,
2023*53ee8cc1Swenshuai.xi             _HAL_REG32_R(&_TspCtrl[0].reg15b4)|TSP_NMATCH_DIS);
2024*53ee8cc1Swenshuai.xi 
2025*53ee8cc1Swenshuai.xi     // Jericho helps
2026*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].Hw_Config0,
2027*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config0), 0xFFFF0000));
2028*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].Hw_Config0,
2029*53ee8cc1Swenshuai.xi             SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config0), 0xBBBB0000));
2030*53ee8cc1Swenshuai.xi 
2031*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].reg160C,
2032*53ee8cc1Swenshuai.xi #ifdef VQ_ENABLE
2033*53ee8cc1Swenshuai.xi         _HAL_REG32_R(&_TspCtrl[0].reg160C)| (TSP_RM_DMA_GLITCH|TSP_DOUBLE_BUF_DESC));
2034*53ee8cc1Swenshuai.xi #else
2035*53ee8cc1Swenshuai.xi         SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), TSP_RM_DMA_GLITCH));
2036*53ee8cc1Swenshuai.xi #endif
2037*53ee8cc1Swenshuai.xi 
2038*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].PktChkSizeFilein,
2039*53ee8cc1Swenshuai.xi         _HAL_REG32_R(&_TspCtrl[0].PktChkSizeFilein) |
2040*53ee8cc1Swenshuai.xi         (TSP_SYSTIME_MODE_STC64|TSP_DUP_PKT_SKIP_VD|TSP_DUP_PKT_SKIP_V3D|TSP_DUP_PKT_SKIP_AV));
2041*53ee8cc1Swenshuai.xi 
2042*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].Dnld_Ctrl2,
2043*53ee8cc1Swenshuai.xi             SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Dnld_Ctrl2), TSP_PREVENT_OVF_META));
2044*53ee8cc1Swenshuai.xi 
2045*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].HW2_Config3,
2046*53ee8cc1Swenshuai.xi             SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].HW2_Config3), (TSP_STR2MI_WP_LD|TSP_RM_OVERFLOW_GLITCH))); //improve pvr performance
2047*53ee8cc1Swenshuai.xi 
2048*53ee8cc1Swenshuai.xi 
2049*53ee8cc1Swenshuai.xi     // Set match PID, default is AV FIFO
2050*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].Dnld_Ctrl2,
2051*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Dnld_Ctrl2), TSP_AVPID_ST_AV));
2052*53ee8cc1Swenshuai.xi 
2053*53ee8cc1Swenshuai.xi     // Set PUSI 3 byte mode for Audio
2054*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].HW2_Config3,
2055*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].HW2_Config3), TSP_PUSI_3BYTE_MODE));
2056*53ee8cc1Swenshuai.xi 
2057*53ee8cc1Swenshuai.xi     // 2p sram setting
2058*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].PktChkSizeFilein,
2059*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].PktChkSizeFilein), TSP_HW_STANDBY_MODE));
2060*53ee8cc1Swenshuai.xi 
2061*53ee8cc1Swenshuai.xi     // Set filein segment bit to 0
2062*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&_TspCtrl[0].TSP_Ctrl1,
2063*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].TSP_Ctrl1), TSP_CTRL1_PVR_CMD_QUEUE_ENABLE));
2064*53ee8cc1Swenshuai.xi 
2065*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&_TspCtrl2[0].HwCfg1,
2066*53ee8cc1Swenshuai.xi             SET_FLAG1(_HAL_REG16_R(&_TspCtrl2[0].HwCfg1), (AF_PKT_LOSS_BYTE_ECO|UPDATE_SCRAMBLE_PID_PUSI|NEW_OVERFLOW_MODE|FIX_PINPON_SYNC_IN_ECO)));
2067*53ee8cc1Swenshuai.xi 
2068*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&_TspCtrl2[0].HwCfg0, _HAL_REG16_R(&_TspCtrl2[0].HwCfg0) | (PREVENT_SRAM_COLLISION|MASK_SCR_VID_EN|MASK_SCR_VID_3D_EN|MASK_SCR_AUD_EN|MASK_SCR_AUDB_EN));
2069*53ee8cc1Swenshuai.xi 
2070*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&_TspCtrl2[0].HwCfg2, _HAL_REG16_R(&_TspCtrl2[0].HwCfg2) | REG_RST_CC_MODE);
2071*53ee8cc1Swenshuai.xi 
2072*53ee8cc1Swenshuai.xi     _b64STCMode = TRUE;
2073*53ee8cc1Swenshuai.xi 
2074*53ee8cc1Swenshuai.xi     //VQ parameters
2075*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&_TspCtrl3[0].Hw_Eco0, SET_FLAG1(_HAL_REG16_R(&_TspCtrl3[0].Hw_Eco0), TSP_FIXED_MIU_FLUSH));
2076*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));
2077*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));
2078*53ee8cc1Swenshuai.xi }
2079*53ee8cc1Swenshuai.xi 
HAL_TSP_DoubleBuf_Disable(void)2080*53ee8cc1Swenshuai.xi void HAL_TSP_DoubleBuf_Disable(void)
2081*53ee8cc1Swenshuai.xi {
2082*53ee8cc1Swenshuai.xi 
2083*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].reg160C,
2084*53ee8cc1Swenshuai.xi #ifdef VQ_ENABLE
2085*53ee8cc1Swenshuai.xi         _HAL_REG32_R(&_TspCtrl[0].reg160C) & ~(TSP_DOUBLE_BUF_EN|TSP_BLK_DISABLE|TSP_DOUBLE_BUF_SWITCH));
2086*53ee8cc1Swenshuai.xi #else
2087*53ee8cc1Swenshuai.xi         _HAL_REG32_R(&_TspCtrl[0].reg160C) & ~(TSP_DOUBLE_BUF_EN|TSP_BLK_DISABLE|TSP_DOUBLE_BUF_SWITCH|TSP_DOUBLE_BUF_DESC));
2088*53ee8cc1Swenshuai.xi #endif
2089*53ee8cc1Swenshuai.xi }
2090*53ee8cc1Swenshuai.xi 
2091*53ee8cc1Swenshuai.xi //  Default value of low bound is 0, default value of up bound is 0xFFFFFFFF, means no protection
2092*53ee8cc1Swenshuai.xi //  If set both low bound and up bound to be 0, means protection all
2093*53ee8cc1Swenshuai.xi //  The range can be written:  phyStartAddr <= x <= phyEndAddr
2094*53ee8cc1Swenshuai.xi //  Protection range: x > phyEndAddr && x < phyStartAddr
HAL_TSP_OrzWriteProtect_Enable(MS_BOOL bEnable,MS_PHY phyStartAddr,MS_PHY phyEndAddr)2095*53ee8cc1Swenshuai.xi void HAL_TSP_OrzWriteProtect_Enable(MS_BOOL bEnable, MS_PHY phyStartAddr, MS_PHY phyEndAddr)
2096*53ee8cc1Swenshuai.xi {
2097*53ee8cc1Swenshuai.xi     MS_U32  lbnd1_8;
2098*53ee8cc1Swenshuai.xi     MS_U32  ubnd1_8;
2099*53ee8cc1Swenshuai.xi     MS_U32 lbnd9_24;
2100*53ee8cc1Swenshuai.xi     MS_U32 ubnd9_24;
2101*53ee8cc1Swenshuai.xi     MS_PHY  phyMiuOffset = _HAL_TSP_MIU_OFFSET(phyStartAddr);
2102*53ee8cc1Swenshuai.xi 
2103*53ee8cc1Swenshuai.xi     if (bEnable)
2104*53ee8cc1Swenshuai.xi     {
2105*53ee8cc1Swenshuai.xi         if(phyStartAddr == phyEndAddr)
2106*53ee8cc1Swenshuai.xi             phyStartAddr += (1UL << MIU_BUS);
2107*53ee8cc1Swenshuai.xi         else
2108*53ee8cc1Swenshuai.xi             phyEndAddr -= (1UL << MIU_BUS);
2109*53ee8cc1Swenshuai.xi 
2110*53ee8cc1Swenshuai.xi         phyStartAddr -= phyMiuOffset;
2111*53ee8cc1Swenshuai.xi         phyEndAddr -= phyMiuOffset;
2112*53ee8cc1Swenshuai.xi 
2113*53ee8cc1Swenshuai.xi         lbnd1_8  = (MS_U32)((phyStartAddr >> MIU_BUS) >> TSP_ORZ_DMAW_BND_ALT_SHIFT) & 0x00FFUL;
2114*53ee8cc1Swenshuai.xi         lbnd9_24 = (MS_U32)(((phyStartAddr >> MIU_BUS) >> TSP_ORZ_DMAW_BND_ALT_SHIFT) >> 8UL) & 0xFFFFUL;
2115*53ee8cc1Swenshuai.xi         ubnd1_8  = (MS_U32)((phyEndAddr >> MIU_BUS) >> TSP_ORZ_DMAW_BND_ALT_SHIFT) & 0x00FFUL;
2116*53ee8cc1Swenshuai.xi         ubnd9_24 = (MS_U32)(((phyEndAddr >> MIU_BUS) >> TSP_ORZ_DMAW_BND_ALT_SHIFT) >> 8UL) & 0xFFFFUL;
2117*53ee8cc1Swenshuai.xi 
2118*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].reg16C0, (_HAL_REG32_R(&_TspCtrl[0].reg16C0) & ~(TSP_ORZ_DMAW_LBND_LSB8)) | lbnd1_8);
2119*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].ORZ_DMAW, (_HAL_REG32_R(&_TspCtrl[0].ORZ_DMAW) & ~(TSP_ORZ_DMAW_LBND)) | lbnd9_24);
2120*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].reg16C0, (_HAL_REG32_R(&_TspCtrl[0].reg16C0) & ~(TSP_ORZ_DMAW_UBND_LSB8)) | (ubnd1_8 << TSP_ORZ_DMAW_UBND_LSB8_SHIFT));
2121*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].ORZ_DMAW, (_HAL_REG32_R(&_TspCtrl[0].ORZ_DMAW) & ~(TSP_ORZ_DMAW_UBND)) | (ubnd9_24 << TSP_ORZ_DMAW_UBND_SHIFT));
2122*53ee8cc1Swenshuai.xi 
2123*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].reg160C, _HAL_REG32_R(&_TspCtrl[0].reg160C) | TSP_ORZ_DMAW_PROT_EN);
2124*53ee8cc1Swenshuai.xi     }
2125*53ee8cc1Swenshuai.xi     else
2126*53ee8cc1Swenshuai.xi     {
2127*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].reg160C, _HAL_REG32_R(&_TspCtrl[0].reg160C) & ~TSP_ORZ_DMAW_PROT_EN);
2128*53ee8cc1Swenshuai.xi     }
2129*53ee8cc1Swenshuai.xi }
2130*53ee8cc1Swenshuai.xi 
2131*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
2132*53ee8cc1Swenshuai.xi // For STC part
2133*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
HAL_TSP_Stc_ctrl(MS_U32 u32EngId,MS_U32 u32Sync)2134*53ee8cc1Swenshuai.xi void HAL_TSP_Stc_ctrl(MS_U32 u32EngId, MS_U32 u32Sync)
2135*53ee8cc1Swenshuai.xi {
2136*53ee8cc1Swenshuai.xi     /////////////Set STC control by HK////////////////
2137*53ee8cc1Swenshuai.xi     // select synth from chip top : bit 1 -> 0 -> controlled by HK
2138*53ee8cc1Swenshuai.xi     TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_SYTNTH) &= ~REG_CLKGEN0_STC_CW_SEL;
2139*53ee8cc1Swenshuai.xi 
2140*53ee8cc1Swenshuai.xi     // set HK STC synth CW
2141*53ee8cc1Swenshuai.xi     //if CLK_MPLL_SYN is 432MHz, set 0x28000000;if CLK_MPLL_SYN is 216MHz, set 0x14000000
2142*53ee8cc1Swenshuai.xi     TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_STC_CW_L) = (u32Sync & 0xFFFF);
2143*53ee8cc1Swenshuai.xi     TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_STC_CW_H) = (u32Sync >> 16) & 0xFFFF;
2144*53ee8cc1Swenshuai.xi 
2145*53ee8cc1Swenshuai.xi     // set STC synth
2146*53ee8cc1Swenshuai.xi     TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_SYTNTH) &= ~(REG_CLKGEN0_STC_CW_EN);
2147*53ee8cc1Swenshuai.xi     TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_SYTNTH) |= REG_CLKGEN0_STC_CW_EN;
2148*53ee8cc1Swenshuai.xi     TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_SYTNTH) &= ~(REG_CLKGEN0_STC_CW_EN);
2149*53ee8cc1Swenshuai.xi 
2150*53ee8cc1Swenshuai.xi     /////////////Set STC control by TSP////////////////
2151*53ee8cc1Swenshuai.xi     // select synth from TSP      : bit 1 -> 1 -> controlled by TSP
2152*53ee8cc1Swenshuai.xi     TSP_CLKGEN0_REG(REG_CLKGEN0_DC0_SYTNTH) |= REG_CLKGEN0_STC_CW_SEL;
2153*53ee8cc1Swenshuai.xi 
2154*53ee8cc1Swenshuai.xi     // set TSP STC synth CW
2155*53ee8cc1Swenshuai.xi     //if CLK_MPLL_SYN is 432MHz, set 0x28000000;if CLK_MPLL_SYN is 216MHz, set 0x14000000
2156*53ee8cc1Swenshuai.xi     HAL_REG32_IndW((REG32 *)(0x0021024c<<1), u32Sync);
2157*53ee8cc1Swenshuai.xi 
2158*53ee8cc1Swenshuai.xi     // t2 , t3 had no 0x0021025c, it was add after t4, synthesizer enable
2159*53ee8cc1Swenshuai.xi     HAL_REG32_IndW((REG32 *)(0x0021025c<<1), HAL_REG32_IndR((REG32 *)(0x0021025c<<1))| 0x01);
2160*53ee8cc1Swenshuai.xi     HAL_REG32_IndW((REG32 *)(0x0021025c<<1), HAL_REG32_IndR((REG32 *)(0x0021025c<<1))& ~0x01);
2161*53ee8cc1Swenshuai.xi }
2162*53ee8cc1Swenshuai.xi 
HAL_TSP_STC_Update_Disable(MS_U32 u32EngId,MS_BOOL bDisable)2163*53ee8cc1Swenshuai.xi void HAL_TSP_STC_Update_Disable(MS_U32 u32EngId, MS_BOOL bDisable)
2164*53ee8cc1Swenshuai.xi {
2165*53ee8cc1Swenshuai.xi     if(bDisable)
2166*53ee8cc1Swenshuai.xi     {
2167*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].reg15b4,
2168*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg15b4), TSP_cnt_33b_ld));
2169*53ee8cc1Swenshuai.xi     }
2170*53ee8cc1Swenshuai.xi     else
2171*53ee8cc1Swenshuai.xi     {
2172*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].reg15b4,
2173*53ee8cc1Swenshuai.xi             SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg15b4), TSP_cnt_33b_ld));
2174*53ee8cc1Swenshuai.xi     }
2175*53ee8cc1Swenshuai.xi }
2176*53ee8cc1Swenshuai.xi 
HAL_TSP_GetSTC(MS_U32 u32EngId)2177*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_GetSTC(MS_U32 u32EngId)
2178*53ee8cc1Swenshuai.xi {
2179*53ee8cc1Swenshuai.xi     if(_b64STCMode)
2180*53ee8cc1Swenshuai.xi     {
2181*53ee8cc1Swenshuai.xi         MS_U32 u32temp;
2182*53ee8cc1Swenshuai.xi 
2183*53ee8cc1Swenshuai.xi         u32temp = (_HAL_REG32_R(&_TspCtrl[0].TsRec_Tail2_Pcr1) & TSP_PCR1_L16_MASK) >> TSP_PCR1_L16_SHFT;
2184*53ee8cc1Swenshuai.xi         u32temp |= ((_HAL_REG32_R(&_TspCtrl[0].Pcr1) & 0xFFFF) << 16);
2185*53ee8cc1Swenshuai.xi         return u32temp ;
2186*53ee8cc1Swenshuai.xi     }
2187*53ee8cc1Swenshuai.xi     else
2188*53ee8cc1Swenshuai.xi     {
2189*53ee8cc1Swenshuai.xi         return HAL_REG32_IndR((REG32 *)(0x00210244<< 1));
2190*53ee8cc1Swenshuai.xi     }
2191*53ee8cc1Swenshuai.xi }
2192*53ee8cc1Swenshuai.xi 
HAL_TSP_GetSTC_32(MS_U32 u32EngId)2193*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_GetSTC_32(MS_U32 u32EngId)
2194*53ee8cc1Swenshuai.xi {
2195*53ee8cc1Swenshuai.xi     if(_b64STCMode)
2196*53ee8cc1Swenshuai.xi     {
2197*53ee8cc1Swenshuai.xi         MS_U32 u32temp;
2198*53ee8cc1Swenshuai.xi 
2199*53ee8cc1Swenshuai.xi         u32temp = (_HAL_REG32_R(&_TspCtrl[0].Pcr1) >> 16)& 0xFFFF;
2200*53ee8cc1Swenshuai.xi         u32temp |= (((_HAL_REG32_R(&_TspCtrl[0].Pcr64_H) & TSP_PCR64_H16_MASK) & 0xFFFF) << 16);
2201*53ee8cc1Swenshuai.xi         return u32temp ;
2202*53ee8cc1Swenshuai.xi     }
2203*53ee8cc1Swenshuai.xi     else
2204*53ee8cc1Swenshuai.xi     {
2205*53ee8cc1Swenshuai.xi         return (HAL_REG32_IndR((REG32 *)(0x00210248<< 1)) & 0x01);
2206*53ee8cc1Swenshuai.xi     }
2207*53ee8cc1Swenshuai.xi }
2208*53ee8cc1Swenshuai.xi 
HAL_TSP_STC64_Mode_En(MS_BOOL bEnable)2209*53ee8cc1Swenshuai.xi void HAL_TSP_STC64_Mode_En(MS_BOOL bEnable)
2210*53ee8cc1Swenshuai.xi {
2211*53ee8cc1Swenshuai.xi     if (bEnable)
2212*53ee8cc1Swenshuai.xi     {
2213*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].PktChkSizeFilein, _HAL_REG32_R(&_TspCtrl[0].PktChkSizeFilein) | TSP_SYSTIME_MODE_STC64);
2214*53ee8cc1Swenshuai.xi     }
2215*53ee8cc1Swenshuai.xi     else
2216*53ee8cc1Swenshuai.xi     {
2217*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].PktChkSizeFilein, _HAL_REG32_R(&_TspCtrl[0].PktChkSizeFilein) & ~TSP_SYSTIME_MODE_STC64);
2218*53ee8cc1Swenshuai.xi     }
2219*53ee8cc1Swenshuai.xi 
2220*53ee8cc1Swenshuai.xi     _b64STCMode = bEnable;
2221*53ee8cc1Swenshuai.xi }
2222*53ee8cc1Swenshuai.xi 
HAL_TSP_SetSTC(MS_U32 u32EngId,MS_U32 u32STC,MS_U32 u32STC_32)2223*53ee8cc1Swenshuai.xi void HAL_TSP_SetSTC(MS_U32 u32EngId, MS_U32 u32STC, MS_U32 u32STC_32)
2224*53ee8cc1Swenshuai.xi {
2225*53ee8cc1Swenshuai.xi     if(_b64STCMode)
2226*53ee8cc1Swenshuai.xi     {
2227*53ee8cc1Swenshuai.xi         MS_U32 u32temp;
2228*53ee8cc1Swenshuai.xi 
2229*53ee8cc1Swenshuai.xi         u32temp = ((u32STC & 0xFFFF) << TSP_PCR1_L16_SHFT) |
2230*53ee8cc1Swenshuai.xi                 (_HAL_REG32_R(&_TspCtrl[0].TsRec_Tail2_Pcr1) & ~TSP_PCR1_L16_MASK);
2231*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].TsRec_Tail2_Pcr1, u32temp);
2232*53ee8cc1Swenshuai.xi 
2233*53ee8cc1Swenshuai.xi         u32temp = ((u32STC >> 16) & 0xFFFF) | ((u32STC_32 & 0xFFFF) << 16);
2234*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].Pcr1, u32temp);
2235*53ee8cc1Swenshuai.xi 
2236*53ee8cc1Swenshuai.xi         u32temp = (_HAL_REG32_R(&_TspCtrl[0].Pcr64_H) & ~TSP_PCR64_H16_MASK) | ((u32STC_32 >> 16) & TSP_PCR64_H16_MASK);
2237*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].Pcr64_H, u32temp);
2238*53ee8cc1Swenshuai.xi     }
2239*53ee8cc1Swenshuai.xi     else
2240*53ee8cc1Swenshuai.xi     {
2241*53ee8cc1Swenshuai.xi         HAL_REG32_IndW((REG32 *)(0x00210244<< 1), u32STC);
2242*53ee8cc1Swenshuai.xi         HAL_REG32_IndW((REG32 *)(0x00210248<< 1), u32STC_32 & 0x01);
2243*53ee8cc1Swenshuai.xi     }
2244*53ee8cc1Swenshuai.xi }
2245*53ee8cc1Swenshuai.xi 
HAL_TSP_SetSTCOffset(MS_U32 u32EngId,MS_U32 u32Offset,MS_BOOL bAdd)2246*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_SetSTCOffset(MS_U32 u32EngId, MS_U32 u32Offset, MS_BOOL bAdd)
2247*53ee8cc1Swenshuai.xi {
2248*53ee8cc1Swenshuai.xi     #if 0
2249*53ee8cc1Swenshuai.xi     MS_U32 u32opt = ((MS_U32)bAdd & 0xFF) << TSP_MCU_CMD_SET_STC_OFFSET_OPTION_SHIFT;
2250*53ee8cc1Swenshuai.xi 
2251*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Data0, u32Offset);
2252*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, TSP_MCU_CMD_SET_STC_OFFSET | u32opt | u32EngId);
2253*53ee8cc1Swenshuai.xi 
2254*53ee8cc1Swenshuai.xi     while(_HAL_REG32_R(&_TspCtrl[0].MCU_Cmd) != 0);
2255*53ee8cc1Swenshuai.xi 
2256*53ee8cc1Swenshuai.xi     return TRUE;
2257*53ee8cc1Swenshuai.xi 
2258*53ee8cc1Swenshuai.xi     #endif
2259*53ee8cc1Swenshuai.xi 
2260*53ee8cc1Swenshuai.xi     return FALSE;
2261*53ee8cc1Swenshuai.xi }
2262*53ee8cc1Swenshuai.xi 
2263*53ee8cc1Swenshuai.xi 
2264*53ee8cc1Swenshuai.xi #if 0
2265*53ee8cc1Swenshuai.xi void HAL_TSP_SetSTC_32(MS_U32 u32EngId, MS_U32 u32STC_32)
2266*53ee8cc1Swenshuai.xi {
2267*53ee8cc1Swenshuai.xi     if(_b64STCMode)
2268*53ee8cc1Swenshuai.xi     {
2269*53ee8cc1Swenshuai.xi         MS_U32 u32temp;
2270*53ee8cc1Swenshuai.xi 
2271*53ee8cc1Swenshuai.xi         u32temp = (_HAL_REG32_R(&_TspCtrl[0].Pcr1) & ~ 0xFFFF0000) | ((u32STC_32 & 0xFFFF) << 16);
2272*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].Pcr1, u32temp);
2273*53ee8cc1Swenshuai.xi         u32temp = (_HAL_REG32_R(&_TspCtrl[0].Pcr64_H) & ~TSP_PCR64_H16_MASK) | ((u32STC_32 >> 16) & TSP_PCR64_H16_MASK);
2274*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].Pcr64_H, u32temp);
2275*53ee8cc1Swenshuai.xi     }
2276*53ee8cc1Swenshuai.xi     else
2277*53ee8cc1Swenshuai.xi     {
2278*53ee8cc1Swenshuai.xi         HAL_REG32_IndW((REG32 *)(0x00210248<< 1), u32STC_32 & 0x01);
2279*53ee8cc1Swenshuai.xi     }
2280*53ee8cc1Swenshuai.xi }
2281*53ee8cc1Swenshuai.xi #endif
2282*53ee8cc1Swenshuai.xi 
HAL_TSP_CmdQ_SetSTC(MS_U32 u32EngId,MS_U32 u32STC)2283*53ee8cc1Swenshuai.xi void HAL_TSP_CmdQ_SetSTC(MS_U32 u32EngId, MS_U32 u32STC)
2284*53ee8cc1Swenshuai.xi {
2285*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].Pcr.ML, u32STC);
2286*53ee8cc1Swenshuai.xi }
2287*53ee8cc1Swenshuai.xi 
HAL_TSP_CmdQ_SetSTC_32(MS_U32 u32EngId,MS_U32 u32STC_32)2288*53ee8cc1Swenshuai.xi void HAL_TSP_CmdQ_SetSTC_32(MS_U32 u32EngId, MS_U32 u32STC_32)
2289*53ee8cc1Swenshuai.xi {
2290*53ee8cc1Swenshuai.xi     _HAL_REG32L_W(&_TspCtrl[0].Pcr.H32, u32STC_32 & 0x01);
2291*53ee8cc1Swenshuai.xi }
2292*53ee8cc1Swenshuai.xi 
HAL_TSP_CmdQ_GetSTC(MS_U32 u32EngId)2293*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_CmdQ_GetSTC(MS_U32 u32EngId)
2294*53ee8cc1Swenshuai.xi {
2295*53ee8cc1Swenshuai.xi     return (_HAL_REG32_R(&_TspCtrl[0].Pcr.ML));
2296*53ee8cc1Swenshuai.xi }
2297*53ee8cc1Swenshuai.xi 
HAL_TSP_CmdQ_GetSTC_32(MS_U32 u32EngId)2298*53ee8cc1Swenshuai.xi MS_U32  HAL_TSP_CmdQ_GetSTC_32(MS_U32 u32EngId)
2299*53ee8cc1Swenshuai.xi {
2300*53ee8cc1Swenshuai.xi     return (_HAL_REG32L_R(&_TspCtrl[0].Pcr.H32) & 0x01);
2301*53ee8cc1Swenshuai.xi }
2302*53ee8cc1Swenshuai.xi 
HAL_TSP_STC_UpdateCtrl(MS_U8 u8Eng,MS_U8 u8Opt)2303*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_STC_UpdateCtrl(MS_U8 u8Eng, MS_U8 u8Opt)
2304*53ee8cc1Swenshuai.xi {
2305*53ee8cc1Swenshuai.xi     MS_U32 i = 0;
2306*53ee8cc1Swenshuai.xi     MS_U32 u32Enable = 0;
2307*53ee8cc1Swenshuai.xi     MS_U32 u32Cmd = 0;
2308*53ee8cc1Swenshuai.xi 
2309*53ee8cc1Swenshuai.xi     if(u8Opt & HAL_TSP_STC_UPDATE_HK)
2310*53ee8cc1Swenshuai.xi     {
2311*53ee8cc1Swenshuai.xi         u32Enable = 1;
2312*53ee8cc1Swenshuai.xi     }
2313*53ee8cc1Swenshuai.xi     if(u8Opt & HAL_TSP_STC_UPDATE_UPDATEONCE)
2314*53ee8cc1Swenshuai.xi     {
2315*53ee8cc1Swenshuai.xi         u32Cmd = TSP_MCU_CMD_CTRL_STC_UPDATE_ONCE;
2316*53ee8cc1Swenshuai.xi     }
2317*53ee8cc1Swenshuai.xi 
2318*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Data0, u32Enable);
2319*53ee8cc1Swenshuai.xi 
2320*53ee8cc1Swenshuai.xi     if (u8Eng == 0)
2321*53ee8cc1Swenshuai.xi     {
2322*53ee8cc1Swenshuai.xi         u32Cmd |= TSP_MCU_CMD_CTRL_STC_UPDATE;
2323*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, u32Cmd);
2324*53ee8cc1Swenshuai.xi     }
2325*53ee8cc1Swenshuai.xi     else
2326*53ee8cc1Swenshuai.xi     {
2327*53ee8cc1Swenshuai.xi         return FALSE;
2328*53ee8cc1Swenshuai.xi     }
2329*53ee8cc1Swenshuai.xi 
2330*53ee8cc1Swenshuai.xi     while (i< 4)
2331*53ee8cc1Swenshuai.xi     {
2332*53ee8cc1Swenshuai.xi         if (0 == _HAL_REG32_R(&_TspCtrl[0].MCU_Cmd))
2333*53ee8cc1Swenshuai.xi         {
2334*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].MCU_Data0, 0);
2335*53ee8cc1Swenshuai.xi             return TRUE;
2336*53ee8cc1Swenshuai.xi         }
2337*53ee8cc1Swenshuai.xi         i++;
2338*53ee8cc1Swenshuai.xi         _delay();
2339*53ee8cc1Swenshuai.xi     }
2340*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, 0);
2341*53ee8cc1Swenshuai.xi     return FALSE;
2342*53ee8cc1Swenshuai.xi }
HAL_TSP_GetPcr(MS_U32 u32EngId,MS_U32 * pu32Pcr_32,MS_U32 * pu32Pcr)2343*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_GetPcr(MS_U32 u32EngId, MS_U32 *pu32Pcr_32, MS_U32 *pu32Pcr)
2344*53ee8cc1Swenshuai.xi {
2345*53ee8cc1Swenshuai.xi     MS_U32 i = 0;
2346*53ee8cc1Swenshuai.xi 
2347*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Data0, 0);
2348*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Data1, 0);
2349*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, TSP_MCU_CMD_PCR_GET);
2350*53ee8cc1Swenshuai.xi     while (i< 4)
2351*53ee8cc1Swenshuai.xi     {
2352*53ee8cc1Swenshuai.xi         if (0 == _HAL_REG32_R(&_TspCtrl[0].MCU_Cmd))
2353*53ee8cc1Swenshuai.xi         {
2354*53ee8cc1Swenshuai.xi             *pu32Pcr = _HAL_REG32_R(&_TspCtrl[0].MCU_Data0);
2355*53ee8cc1Swenshuai.xi             *pu32Pcr_32 = _HAL_REG32_R(&_TspCtrl[0].MCU_Data1);
2356*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].MCU_Data0, 0);
2357*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].MCU_Data1, 0);
2358*53ee8cc1Swenshuai.xi             return ((0!= *pu32Pcr) || (0!= *pu32Pcr_32))? TRUE: FALSE;
2359*53ee8cc1Swenshuai.xi         }
2360*53ee8cc1Swenshuai.xi         i++;
2361*53ee8cc1Swenshuai.xi         _delay();
2362*53ee8cc1Swenshuai.xi     }
2363*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, 0);
2364*53ee8cc1Swenshuai.xi     return FALSE;
2365*53ee8cc1Swenshuai.xi }
2366*53ee8cc1Swenshuai.xi 
HAL_TSP_CmdQ_IsEmpty(void)2367*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_CmdQ_IsEmpty(void)
2368*53ee8cc1Swenshuai.xi {
2369*53ee8cc1Swenshuai.xi     if (_HAL_REG32_R(&_TspCtrl[0].TsDma_Ctrl_CmdQ) & TSP_CMDQ_EMPTY)
2370*53ee8cc1Swenshuai.xi     {
2371*53ee8cc1Swenshuai.xi         return TRUE;
2372*53ee8cc1Swenshuai.xi     }
2373*53ee8cc1Swenshuai.xi     return FALSE;
2374*53ee8cc1Swenshuai.xi }
2375*53ee8cc1Swenshuai.xi 
HAL_TSP_Int_Disable(MS_U32 u32Mask)2376*53ee8cc1Swenshuai.xi void HAL_TSP_Int_Disable(MS_U32 u32Mask)
2377*53ee8cc1Swenshuai.xi {
2378*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&_TspCtrl[0].HwInt_Stat,
2379*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].HwInt_Stat)|0xFF00, (MS_U16)(u32Mask>>8)));
2380*53ee8cc1Swenshuai.xi }
2381*53ee8cc1Swenshuai.xi 
HAL_TSP_Int_Enable(MS_U32 u32Mask)2382*53ee8cc1Swenshuai.xi void HAL_TSP_Int_Enable(MS_U32 u32Mask)
2383*53ee8cc1Swenshuai.xi {
2384*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&_TspCtrl[0].HwInt_Stat,
2385*53ee8cc1Swenshuai.xi             SET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].HwInt_Stat)|0xFF00, (MS_U16)(u32Mask>>8)));
2386*53ee8cc1Swenshuai.xi }
2387*53ee8cc1Swenshuai.xi 
HAL_TSP_Int_ClearSw(void)2388*53ee8cc1Swenshuai.xi void HAL_TSP_Int_ClearSw(void)
2389*53ee8cc1Swenshuai.xi {
2390*53ee8cc1Swenshuai.xi     if (_bIsHK)
2391*53ee8cc1Swenshuai.xi     {
2392*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].SwInt_Stat, 0);
2393*53ee8cc1Swenshuai.xi     }
2394*53ee8cc1Swenshuai.xi     else
2395*53ee8cc1Swenshuai.xi     {
2396*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&_TspCtrl[0].SwInt_Stat1_M, 0);
2397*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].SwInt_Stat1_H,
2398*53ee8cc1Swenshuai.xi                      RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].SwInt_Stat1_H), TSP_SWINT1_H_MASK));
2399*53ee8cc1Swenshuai.xi     }
2400*53ee8cc1Swenshuai.xi }
2401*53ee8cc1Swenshuai.xi 
HAL_TSP_Int_ClearHw(MS_U32 u32Mask)2402*53ee8cc1Swenshuai.xi void HAL_TSP_Int_ClearHw(MS_U32 u32Mask)
2403*53ee8cc1Swenshuai.xi {
2404*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&_TspCtrl[0].HwInt_Stat,
2405*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].HwInt_Stat)|0xFF00, (MS_U16)u32Mask));
2406*53ee8cc1Swenshuai.xi }
2407*53ee8cc1Swenshuai.xi 
HAL_TSP_CmdQ_CmdCount(void)2408*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_CmdQ_CmdCount(void)
2409*53ee8cc1Swenshuai.xi {
2410*53ee8cc1Swenshuai.xi     return (((_HAL_REG32_R(&_TspCtrl[0].TsDma_Ctrl_CmdQ) & TSP_CMDQ_CNT_MASK)>>TSP_CMDQ_CNT_SHFT));
2411*53ee8cc1Swenshuai.xi }
2412*53ee8cc1Swenshuai.xi 
HAL_TSP_CmdQ_TsDma_Reset(void)2413*53ee8cc1Swenshuai.xi void HAL_TSP_CmdQ_TsDma_Reset(void)
2414*53ee8cc1Swenshuai.xi {
2415*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].TsDma_Ctrl_CmdQ, 0);
2416*53ee8cc1Swenshuai.xi }
2417*53ee8cc1Swenshuai.xi 
HAL_TSP_CmdQ_Reset(void)2418*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_CmdQ_Reset(void)
2419*53ee8cc1Swenshuai.xi {
2420*53ee8cc1Swenshuai.xi     int ii = 0;
2421*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&_TspCtrl[0].TSP_Ctrl1,
2422*53ee8cc1Swenshuai.xi             SET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].TSP_Ctrl1), TSP_CTRL1_CMDQ_RESET));
2423*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&_TspCtrl[0].TSP_Ctrl1,
2424*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].TSP_Ctrl1), TSP_CTRL1_CMDQ_RESET));
2425*53ee8cc1Swenshuai.xi 
2426*53ee8cc1Swenshuai.xi     //reset the last data that hw is excuting --> HW new design
2427*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&_TspCtrl2[0].HwCfg0,
2428*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG16_R(&_TspCtrl2[0].HwCfg0), TSP_TSIFCFG_WB_FSM_RESET));
2429*53ee8cc1Swenshuai.xi 
2430*53ee8cc1Swenshuai.xi     //check R done
2431*53ee8cc1Swenshuai.xi     for(ii = 0; ii < 100; ii++)
2432*53ee8cc1Swenshuai.xi     {
2433*53ee8cc1Swenshuai.xi         if(_HAL_REG32_R(&_TspCtrl[0].TsDma_Ctrl_CmdQ) & TSP_TSDMA_RDONE)
2434*53ee8cc1Swenshuai.xi         {
2435*53ee8cc1Swenshuai.xi             break;
2436*53ee8cc1Swenshuai.xi         }
2437*53ee8cc1Swenshuai.xi         MsOS_DelayTask(1);
2438*53ee8cc1Swenshuai.xi     }
2439*53ee8cc1Swenshuai.xi 
2440*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&_TspCtrl2[0].HwCfg0,
2441*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG16_R(&_TspCtrl2[0].HwCfg0), TSP_TSIFCFG_WB_FSM_RESET));
2442*53ee8cc1Swenshuai.xi 
2443*53ee8cc1Swenshuai.xi     if(ii == 100)
2444*53ee8cc1Swenshuai.xi     {
2445*53ee8cc1Swenshuai.xi         printf("%s, wait fine in reset timeout\n", __FUNCTION__);
2446*53ee8cc1Swenshuai.xi         return FALSE;
2447*53ee8cc1Swenshuai.xi     }
2448*53ee8cc1Swenshuai.xi 
2449*53ee8cc1Swenshuai.xi     return TRUE;
2450*53ee8cc1Swenshuai.xi }
2451*53ee8cc1Swenshuai.xi 
HAL_TSP_WbDmaEnable(MS_BOOL bEnable)2452*53ee8cc1Swenshuai.xi void HAL_TSP_WbDmaEnable(MS_BOOL bEnable)
2453*53ee8cc1Swenshuai.xi {
2454*53ee8cc1Swenshuai.xi     if (bEnable)
2455*53ee8cc1Swenshuai.xi     {
2456*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].Hw_Config0,
2457*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config0), TSP_HW_CFG0_WB_DMA_RESET));
2458*53ee8cc1Swenshuai.xi     }
2459*53ee8cc1Swenshuai.xi     else
2460*53ee8cc1Swenshuai.xi     {
2461*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].Hw_Config0,
2462*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config0), TSP_HW_CFG0_WB_DMA_RESET));
2463*53ee8cc1Swenshuai.xi     }
2464*53ee8cc1Swenshuai.xi }
2465*53ee8cc1Swenshuai.xi 
2466*53ee8cc1Swenshuai.xi // u32TSSrc: 0 -> TS0, 1 -> File
2467*53ee8cc1Swenshuai.xi // u32GroupId: 0 -> filter0~filter31
HAL_TSP_Scmb_Status(MS_U32 u32TSSrc,MS_U32 u32GroupId,MS_U32 u32PidFltId)2468*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_Scmb_Status(MS_U32 u32TSSrc, MS_U32 u32GroupId, MS_U32 u32PidFltId)
2469*53ee8cc1Swenshuai.xi {
2470*53ee8cc1Swenshuai.xi     MS_U32              u32PIDFltMask = u32PidFltId;
2471*53ee8cc1Swenshuai.xi     MS_U32              u32ScmbSts = 0;
2472*53ee8cc1Swenshuai.xi 
2473*53ee8cc1Swenshuai.xi     if(u32PidFltId != 0xFFFFFFFF)
2474*53ee8cc1Swenshuai.xi     {
2475*53ee8cc1Swenshuai.xi         u32PIDFltMask = (1 << (u32PidFltId & 0x1F));
2476*53ee8cc1Swenshuai.xi     }
2477*53ee8cc1Swenshuai.xi 
2478*53ee8cc1Swenshuai.xi     if (u32TSSrc == 0)
2479*53ee8cc1Swenshuai.xi     {
2480*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].reg15b4,
2481*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg15b4), TSP_match_pid_scr_ts_ld));
2482*53ee8cc1Swenshuai.xi 
2483*53ee8cc1Swenshuai.xi         u32ScmbSts = HAS_FLAG(_HAL_REG32_R(&_TspCtrl[0].TsPidScmbStatTsin), u32PIDFltMask);
2484*53ee8cc1Swenshuai.xi 
2485*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].reg15b4,
2486*53ee8cc1Swenshuai.xi             SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg15b4), TSP_match_pid_scr_ts_ld));
2487*53ee8cc1Swenshuai.xi     }
2488*53ee8cc1Swenshuai.xi     else
2489*53ee8cc1Swenshuai.xi     {
2490*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].reg15b4,
2491*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg15b4), TSP_match_pid_scr_fi_ld));
2492*53ee8cc1Swenshuai.xi 
2493*53ee8cc1Swenshuai.xi         u32ScmbSts = HAS_FLAG(_HAL_REG32_R(&_TspCtrl[0].TsPidScmbStatFile), u32PIDFltMask);
2494*53ee8cc1Swenshuai.xi 
2495*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].reg15b4,
2496*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg15b4), TSP_match_pid_scr_fi_ld));
2497*53ee8cc1Swenshuai.xi     }
2498*53ee8cc1Swenshuai.xi 
2499*53ee8cc1Swenshuai.xi     if(u32PIDFltMask != 0xFFFFFFFF)
2500*53ee8cc1Swenshuai.xi     {
2501*53ee8cc1Swenshuai.xi         u32ScmbSts = ((u32ScmbSts > 0) ? 1: 0);
2502*53ee8cc1Swenshuai.xi     }
2503*53ee8cc1Swenshuai.xi 
2504*53ee8cc1Swenshuai.xi     return u32ScmbSts;
2505*53ee8cc1Swenshuai.xi 
2506*53ee8cc1Swenshuai.xi }
2507*53ee8cc1Swenshuai.xi #if 0
2508*53ee8cc1Swenshuai.xi void HAL_TSP_CPU_SetBase(MS_U32 u32Addr, MS_U32 u32Size)
2509*53ee8cc1Swenshuai.xi {
2510*53ee8cc1Swenshuai.xi #if (!LINUX_TEST)
2511*53ee8cc1Swenshuai.xi     // TSP FW running in QMEM
2512*53ee8cc1Swenshuai.xi     _HAL_TSP_FW_load(u32Addr, u32Size, TRUE, TRUE, TRUE);
2513*53ee8cc1Swenshuai.xi #else
2514*53ee8cc1Swenshuai.xi     // only for linux
2515*53ee8cc1Swenshuai.xi     // @FIXME: abstract this later
2516*53ee8cc1Swenshuai.xi     void* pBuf = NULL;
2517*53ee8cc1Swenshuai.xi     MS_U32 u32PhysAddr = 0;
2518*53ee8cc1Swenshuai.xi 
2519*53ee8cc1Swenshuai.xi #if 0
2520*53ee8cc1Swenshuai.xi     if (NULL == (pBuf = MsOS_AllocateMemory (u32Size, gs32NonCachedPoolID)))
2521*53ee8cc1Swenshuai.xi     {
2522*53ee8cc1Swenshuai.xi         MS_ASSERT(0);
2523*53ee8cc1Swenshuai.xi     }
2524*53ee8cc1Swenshuai.xi 
2525*53ee8cc1Swenshuai.xi     memcpy(pBuf, (void*)u32Addr, u32Size);
2526*53ee8cc1Swenshuai.xi     u32PhysAddr = (MS_U32)VA2PA(pBuf);
2527*53ee8cc1Swenshuai.xi     printf("firmware 0x%08x 0x%08x\n", (MS_U32)pBuf, u32Addr);
2528*53ee8cc1Swenshuai.xi     _HAL_TSP_FW_load(u32PhysAddr, u32Size, TRUE, TRUE, TRUE);
2529*53ee8cc1Swenshuai.xi     MsOS_FreeMemory(pBuf, gs32NonCachedPoolID);
2530*53ee8cc1Swenshuai.xi #else
2531*53ee8cc1Swenshuai.xi     if (NULL == (pBuf = MsOS_AllocateMemory (72*1024*1024, gs32NonCachedPoolID)))
2532*53ee8cc1Swenshuai.xi     {
2533*53ee8cc1Swenshuai.xi         MS_ASSERT(0);
2534*53ee8cc1Swenshuai.xi     }
2535*53ee8cc1Swenshuai.xi     u32PhysAddr = 60*1024*1024;
2536*53ee8cc1Swenshuai.xi     memcpy(PA2KSEG1(u32PhysAddr), (void*)u32Addr, u32Size);
2537*53ee8cc1Swenshuai.xi     printf("firmware 0x%08x 0x%08x\n", (MS_U32)PA2KSEG1(u32PhysAddr), u32PhysAddr);
2538*53ee8cc1Swenshuai.xi     _HAL_TSP_FW_load(u32PhysAddr, u32Size, TRUE, TRUE, TRUE);
2539*53ee8cc1Swenshuai.xi     MsOS_FreeMemory(pBuf, gs32NonCachedPoolID);
2540*53ee8cc1Swenshuai.xi #endif
2541*53ee8cc1Swenshuai.xi #endif
2542*53ee8cc1Swenshuai.xi }
2543*53ee8cc1Swenshuai.xi #else
HAL_TSP_CPU_SetBase(MS_PHY phyAddr,MS_U32 u32Size)2544*53ee8cc1Swenshuai.xi void HAL_TSP_CPU_SetBase(MS_PHY phyAddr, MS_U32 u32Size)
2545*53ee8cc1Swenshuai.xi {
2546*53ee8cc1Swenshuai.xi     printf("[%s][%d] load firmware (address, size) = (0x%08lx, 0x%08lx)\n", __FUNCTION__, __LINE__, (unsigned long)phyAddr, (unsigned long)u32Size);
2547*53ee8cc1Swenshuai.xi     _HAL_TSP_FW_load(phyAddr, u32Size, TRUE, TRUE, TRUE);
2548*53ee8cc1Swenshuai.xi }
2549*53ee8cc1Swenshuai.xi 
2550*53ee8cc1Swenshuai.xi #endif // #if 0
2551*53ee8cc1Swenshuai.xi 
HAL_TSP_Alive(void)2552*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_Alive(void)
2553*53ee8cc1Swenshuai.xi {
2554*53ee8cc1Swenshuai.xi     MS_U32 i = 0;
2555*53ee8cc1Swenshuai.xi     MS_U32 u32Data;
2556*53ee8cc1Swenshuai.xi 
2557*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Data0, 0);
2558*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, TSP_MCU_CMD_ALIVE);
2559*53ee8cc1Swenshuai.xi     while (i< 4)
2560*53ee8cc1Swenshuai.xi     {
2561*53ee8cc1Swenshuai.xi         if (0 == _HAL_REG32_R(&_TspCtrl[0].MCU_Cmd))
2562*53ee8cc1Swenshuai.xi         {
2563*53ee8cc1Swenshuai.xi             u32Data = _HAL_REG32_R(&_TspCtrl[0].MCU_Data0);
2564*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].MCU_Data0, 0);
2565*53ee8cc1Swenshuai.xi             return (TSP_MCU_DATA_ALIVE == u32Data)? TRUE: FALSE;
2566*53ee8cc1Swenshuai.xi         }
2567*53ee8cc1Swenshuai.xi         i++;
2568*53ee8cc1Swenshuai.xi         _delay();
2569*53ee8cc1Swenshuai.xi     }
2570*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, 0);
2571*53ee8cc1Swenshuai.xi     return FALSE;
2572*53ee8cc1Swenshuai.xi }
2573*53ee8cc1Swenshuai.xi 
HAL_TSP_SetOwner(REG_SecFlt * pSecFilter,MS_BOOL bOwner)2574*53ee8cc1Swenshuai.xi void HAL_TSP_SetOwner(REG_SecFlt* pSecFilter, MS_BOOL bOwner)
2575*53ee8cc1Swenshuai.xi {
2576*53ee8cc1Swenshuai.xi     MS_U32 u32HkId;
2577*53ee8cc1Swenshuai.xi 
2578*53ee8cc1Swenshuai.xi     if (_bIsHK)
2579*53ee8cc1Swenshuai.xi     {
2580*53ee8cc1Swenshuai.xi         u32HkId = (bOwner)? 0: 1;
2581*53ee8cc1Swenshuai.xi     }
2582*53ee8cc1Swenshuai.xi     else
2583*53ee8cc1Swenshuai.xi     {
2584*53ee8cc1Swenshuai.xi         u32HkId = (bOwner)? 1: 0;
2585*53ee8cc1Swenshuai.xi     }
2586*53ee8cc1Swenshuai.xi     HAL_REG32_IndW((REG32 *)&pSecFilter->RmnReqCnt, (HAL_REG32_IndR((REG32 *)&pSecFilter->RmnReqCnt) & ~TSP_SECFLT_OWNER_MASK) |
2587*53ee8cc1Swenshuai.xi                                     ((u32HkId << TSP_SECFLT_OWNER_SHFT) & TSP_SECFLT_OWNER_MASK));
2588*53ee8cc1Swenshuai.xi }
2589*53ee8cc1Swenshuai.xi 
HAL_TSP_FileIn_Set(MS_BOOL bset)2590*53ee8cc1Swenshuai.xi void HAL_TSP_FileIn_Set(MS_BOOL bset)
2591*53ee8cc1Swenshuai.xi {
2592*53ee8cc1Swenshuai.xi     if (bset)
2593*53ee8cc1Swenshuai.xi     {
2594*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].reg160C,
2595*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), TSP_FILEIN192_EN));
2596*53ee8cc1Swenshuai.xi     }
2597*53ee8cc1Swenshuai.xi     else
2598*53ee8cc1Swenshuai.xi     {
2599*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].reg160C,
2600*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), TSP_FILEIN192_EN));
2601*53ee8cc1Swenshuai.xi     }
2602*53ee8cc1Swenshuai.xi }
2603*53ee8cc1Swenshuai.xi 
HAL_TSP_ResetTimeStamp(void)2604*53ee8cc1Swenshuai.xi void HAL_TSP_ResetTimeStamp(void)
2605*53ee8cc1Swenshuai.xi {
2606*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].reg160C,
2607*53ee8cc1Swenshuai.xi         SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), TSP_TIMESTAMP_RESET));
2608*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].reg160C,
2609*53ee8cc1Swenshuai.xi         RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), TSP_TIMESTAMP_RESET));
2610*53ee8cc1Swenshuai.xi }
2611*53ee8cc1Swenshuai.xi 
HAL_TSP_GetPVRTimeStamp(void)2612*53ee8cc1Swenshuai.xi MS_U32  HAL_TSP_GetPVRTimeStamp(void)
2613*53ee8cc1Swenshuai.xi {
2614*53ee8cc1Swenshuai.xi     MS_U32 u32lpcr;
2615*53ee8cc1Swenshuai.xi 
2616*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].reg160C,
2617*53ee8cc1Swenshuai.xi         RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), TSP_LPCR1_RLD));
2618*53ee8cc1Swenshuai.xi     u32lpcr = _HAL_REG32_R(&_TspCtrl[0].LPcr1);
2619*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].reg160C,
2620*53ee8cc1Swenshuai.xi         SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), TSP_LPCR1_RLD));
2621*53ee8cc1Swenshuai.xi 
2622*53ee8cc1Swenshuai.xi     return u32lpcr;
2623*53ee8cc1Swenshuai.xi }
2624*53ee8cc1Swenshuai.xi 
HAL_TSP_SetPVRTimeStamp(MS_U32 u32Stamp)2625*53ee8cc1Swenshuai.xi void HAL_TSP_SetPVRTimeStamp(MS_U32 u32Stamp)
2626*53ee8cc1Swenshuai.xi {
2627*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].reg160C,
2628*53ee8cc1Swenshuai.xi         SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), TSP_LPCR1_WLD));
2629*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].LPcr1,u32Stamp);
2630*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].reg160C,
2631*53ee8cc1Swenshuai.xi         RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), TSP_LPCR1_WLD));
2632*53ee8cc1Swenshuai.xi }
2633*53ee8cc1Swenshuai.xi 
HAL_TSP_SetPVRTimeStampClk(MS_U8 u8PVRId,MS_U32 u32ClkSrc)2634*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_SetPVRTimeStampClk(MS_U8 u8PVRId, MS_U32 u32ClkSrc)
2635*53ee8cc1Swenshuai.xi {
2636*53ee8cc1Swenshuai.xi     if(u32ClkSrc == 0x0) // 90K
2637*53ee8cc1Swenshuai.xi     {
2638*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].Dnld_Ctrl2,
2639*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Dnld_Ctrl2), TSP_PVR1_CLK_STAMP_27_EN));
2640*53ee8cc1Swenshuai.xi     }
2641*53ee8cc1Swenshuai.xi     else // 27M
2642*53ee8cc1Swenshuai.xi     {
2643*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].Dnld_Ctrl2,
2644*53ee8cc1Swenshuai.xi             SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Dnld_Ctrl2), TSP_PVR1_CLK_STAMP_27_EN));
2645*53ee8cc1Swenshuai.xi     }
2646*53ee8cc1Swenshuai.xi     return TRUE;
2647*53ee8cc1Swenshuai.xi }
2648*53ee8cc1Swenshuai.xi 
HAL_TSP_GetPlayBackTimeStamp(void)2649*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_GetPlayBackTimeStamp(void)
2650*53ee8cc1Swenshuai.xi {
2651*53ee8cc1Swenshuai.xi     MS_U32 u32lpcr;
2652*53ee8cc1Swenshuai.xi 
2653*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].reg160C,
2654*53ee8cc1Swenshuai.xi         RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), TSP_LPCR2_RLD));
2655*53ee8cc1Swenshuai.xi     u32lpcr = _HAL_REG32_R(&_TspCtrl[0].LPcr2);
2656*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].reg160C,
2657*53ee8cc1Swenshuai.xi         SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), TSP_LPCR2_RLD));
2658*53ee8cc1Swenshuai.xi 
2659*53ee8cc1Swenshuai.xi     return u32lpcr;
2660*53ee8cc1Swenshuai.xi }
2661*53ee8cc1Swenshuai.xi 
HAL_TSP_SetPlayBackTimeStamp(MS_U32 u32Stamp)2662*53ee8cc1Swenshuai.xi void HAL_TSP_SetPlayBackTimeStamp(MS_U32 u32Stamp)
2663*53ee8cc1Swenshuai.xi {
2664*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].reg160C,
2665*53ee8cc1Swenshuai.xi         SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), TSP_LPCR2_WLD));
2666*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].LPcr2,u32Stamp);
2667*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].reg160C,
2668*53ee8cc1Swenshuai.xi         RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), TSP_LPCR2_WLD));
2669*53ee8cc1Swenshuai.xi }
2670*53ee8cc1Swenshuai.xi 
HAL_TSP_SetPlayBackTimeStampClk(MS_U8 u8Id,MS_U32 u32ClkSrc)2671*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_SetPlayBackTimeStampClk(MS_U8 u8Id, MS_U32 u32ClkSrc)
2672*53ee8cc1Swenshuai.xi {
2673*53ee8cc1Swenshuai.xi     if(u32ClkSrc == 0x0) // 90K
2674*53ee8cc1Swenshuai.xi     {
2675*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].Dnld_Ctrl2,
2676*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Dnld_Ctrl2), TSP_TSIF0_CLK_STAMP_27_EN));
2677*53ee8cc1Swenshuai.xi     }
2678*53ee8cc1Swenshuai.xi     else // 27M
2679*53ee8cc1Swenshuai.xi     {
2680*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].Dnld_Ctrl2,
2681*53ee8cc1Swenshuai.xi             SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Dnld_Ctrl2), TSP_TSIF0_CLK_STAMP_27_EN));
2682*53ee8cc1Swenshuai.xi     }
2683*53ee8cc1Swenshuai.xi     return TRUE;
2684*53ee8cc1Swenshuai.xi }
2685*53ee8cc1Swenshuai.xi 
HAL_TSP_GetFileInTimeStamp(void)2686*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_GetFileInTimeStamp(void)
2687*53ee8cc1Swenshuai.xi {
2688*53ee8cc1Swenshuai.xi     return _HAL_REG32_R(&_TspCtrl[0].TimeStamp_FileIn);
2689*53ee8cc1Swenshuai.xi }
2690*53ee8cc1Swenshuai.xi 
HAL_TSP_GetFilinReadAddr(MS_PHY * pphyReadAddr)2691*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_GetFilinReadAddr(MS_PHY* pphyReadAddr)
2692*53ee8cc1Swenshuai.xi {
2693*53ee8cc1Swenshuai.xi     *pphyReadAddr = ((MS_PHY)_HAL_REG32_R(&_TspCtrl[0].TsFileIn_RPtr) << MIU_BUS) + _phyFIBufMiuOffset;
2694*53ee8cc1Swenshuai.xi 
2695*53ee8cc1Swenshuai.xi     return TRUE;
2696*53ee8cc1Swenshuai.xi }
2697*53ee8cc1Swenshuai.xi 
HAL_TSP_SetDMABurstLen(MS_U32 u32Len)2698*53ee8cc1Swenshuai.xi void HAL_TSP_SetDMABurstLen(MS_U32 u32Len)
2699*53ee8cc1Swenshuai.xi {
2700*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
2701*53ee8cc1Swenshuai.xi         _HAL_REG32_R(&_TspCtrl[0].Hw_Config4) | ((u32Len<<TSP_HW_DMA_MODE_SHIFT)&TSP_HW_DMA_MODE_MASK));
2702*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].PktChkSizeFilein,
2703*53ee8cc1Swenshuai.xi             SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].PktChkSizeFilein), TSP_SEC_DMA_BURST_EN));
2704*53ee8cc1Swenshuai.xi }
2705*53ee8cc1Swenshuai.xi 
HAL_TSP_PVR_PacketMode(MS_BOOL bSet)2706*53ee8cc1Swenshuai.xi void HAL_TSP_PVR_PacketMode(MS_BOOL bSet)
2707*53ee8cc1Swenshuai.xi {
2708*53ee8cc1Swenshuai.xi     if (bSet)
2709*53ee8cc1Swenshuai.xi     {
2710*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].reg160C,
2711*53ee8cc1Swenshuai.xi             SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), TSP_RECORD192_EN));
2712*53ee8cc1Swenshuai.xi     }
2713*53ee8cc1Swenshuai.xi     else
2714*53ee8cc1Swenshuai.xi     {
2715*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].reg160C,
2716*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].reg160C), TSP_RECORD192_EN));
2717*53ee8cc1Swenshuai.xi     }
2718*53ee8cc1Swenshuai.xi }
2719*53ee8cc1Swenshuai.xi 
HAL_ResetAll(void)2720*53ee8cc1Swenshuai.xi void HAL_ResetAll(void)
2721*53ee8cc1Swenshuai.xi {
2722*53ee8cc1Swenshuai.xi     printf("Reset ALL registers\n");
2723*53ee8cc1Swenshuai.xi     //_HAL_REG32_W(&_TspCtrl[0].TSP_Ctrl,
2724*53ee8cc1Swenshuai.xi     //    SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].TSP_Ctrl), TSP_CTRL_CPU_EN));
2725*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&_TspCtrl[0].TSP_Ctrl1,
2726*53ee8cc1Swenshuai.xi         SET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].TSP_Ctrl1), TSP_CTRL1_DMA_RST));
2727*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].Hw_Config0,
2728*53ee8cc1Swenshuai.xi         SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config0), TSP_HW_CFG0_WB_DMA_RESET));
2729*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].TSP_Ctrl,
2730*53ee8cc1Swenshuai.xi         SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].TSP_Ctrl), TSP_CTRL_SW_RST));
2731*53ee8cc1Swenshuai.xi 
2732*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&_TspCtrl[0].TSP_Ctrl1,
2733*53ee8cc1Swenshuai.xi         RESET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].TSP_Ctrl1), TSP_CTRL1_DMA_RST));
2734*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].Hw_Config0,
2735*53ee8cc1Swenshuai.xi         RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config0), TSP_HW_CFG0_WB_DMA_RESET));
2736*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].TSP_Ctrl,
2737*53ee8cc1Swenshuai.xi         RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].TSP_Ctrl), TSP_CTRL_SW_RST));
2738*53ee8cc1Swenshuai.xi }
2739*53ee8cc1Swenshuai.xi 
2740*53ee8cc1Swenshuai.xi 
2741*53ee8cc1Swenshuai.xi  #define CKG_TS0_TS1        0x16A0UL  //0x28
2742*53ee8cc1Swenshuai.xi     #define CLK_TS0_DISABLE          0x0001UL
2743*53ee8cc1Swenshuai.xi     #define CLK_TS0_INVERT           0x0002UL
2744*53ee8cc1Swenshuai.xi     #define CLK_TS0_CLK_MASK         0x001CUL
2745*53ee8cc1Swenshuai.xi     #define CLK_TS1_DISABLE          0x0100UL
2746*53ee8cc1Swenshuai.xi     #define CLK_TS1_INVERT           0x0200UL
2747*53ee8cc1Swenshuai.xi     #define CLK_TS1_CLK_MASK         0x1C00UL
2748*53ee8cc1Swenshuai.xi  #define CKG_TSP_STC0       0x16A8UL  //0x2a
2749*53ee8cc1Swenshuai.xi     #define CLK_TSP_DISABLE          0x0001UL
2750*53ee8cc1Swenshuai.xi     #define CLK_TSP_INVERT           0x0002UL
2751*53ee8cc1Swenshuai.xi     #define CLK_TSP_CLK_MASK         0x000CUL
2752*53ee8cc1Swenshuai.xi     #define CLK_PAR_DISABLE          0x0010UL
2753*53ee8cc1Swenshuai.xi     #define CLK_PAR_INVERT           0x0020UL
2754*53ee8cc1Swenshuai.xi     #define CLK_PAR_CLK_MASK         0x0040UL
2755*53ee8cc1Swenshuai.xi     #define CLK_STC_DISABLE          0x0100UL
2756*53ee8cc1Swenshuai.xi     #define CLK_STC_INVERT           0x0200UL
2757*53ee8cc1Swenshuai.xi     #define CLK_STC_CLK_MASK         0x0C00UL
2758*53ee8cc1Swenshuai.xi #define CKG_TSP_STAMP      0x16ACUL  //0x2b
2759*53ee8cc1Swenshuai.xi     #define CLK_SYN_STC0_MASK        0x0007UL
2760*53ee8cc1Swenshuai.xi     #define CLK_SYN_STC0_432M        0x0001UL
2761*53ee8cc1Swenshuai.xi     #define CLK_STAM_DISABLE         0x0100UL
2762*53ee8cc1Swenshuai.xi     #define CLK_STAM_INVERT          0x0200UL
2763*53ee8cc1Swenshuai.xi     #define CLK_STAM_CLK_MASK        0x0C00UL
2764*53ee8cc1Swenshuai.xi #define CKG2_TSP_TS_SAMPLE 0x1464UL  //0x019
2765*53ee8cc1Swenshuai.xi     #define CKG2_TSP_TS_SAMPLE_DISABLE       0x0010UL
2766*53ee8cc1Swenshuai.xi     #define CKG2_TSP_TS_SAMPLE_INVERT        0x0020UL
2767*53ee8cc1Swenshuai.xi     #define CKG2_TSP_TS_SAMPLE_CLK_MASK      0x00C0UL
2768*53ee8cc1Swenshuai.xi #define CHIP_TSP_BOOT_CLK_SEL   0x3D68 //0x5a
2769*53ee8cc1Swenshuai.xi     #define CHIP_TSP_BOOT_CLK_SEL_MASK  0x0020
2770*53ee8cc1Swenshuai.xi 
HAL_TSP_PowerCtrl(MS_BOOL bOn)2771*53ee8cc1Swenshuai.xi void HAL_TSP_PowerCtrl(MS_BOOL bOn)
2772*53ee8cc1Swenshuai.xi {
2773*53ee8cc1Swenshuai.xi     if (bOn)
2774*53ee8cc1Swenshuai.xi     {
2775*53ee8cc1Swenshuai.xi         //Set PE Pad
2776*53ee8cc1Swenshuai.xi         //TSP_TOP_REG(REG_TOP_TS0_PE) |= REG_TOP_TS0_PE_MASK;
2777*53ee8cc1Swenshuai.xi 
2778*53ee8cc1Swenshuai.xi         // Enable TSP Clock
2779*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TSP_STC0),
2780*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TSP_STC0)), (CLK_TSP_DISABLE|CLK_TSP_INVERT|CLK_TSP_CLK_MASK)));
2781*53ee8cc1Swenshuai.xi 
2782*53ee8cc1Swenshuai.xi         // Enable CLK_PARSER clock
2783*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TSP_STC0),
2784*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TSP_STC0)), (CLK_PAR_DISABLE|CLK_PAR_INVERT|CLK_PAR_CLK_MASK)));
2785*53ee8cc1Swenshuai.xi 
2786*53ee8cc1Swenshuai.xi         //TSP select SRAM
2787*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));
2788*53ee8cc1Swenshuai.xi 
2789*53ee8cc1Swenshuai.xi         //Select SRAM
2790*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&(_TspCtrl2[0].Qmem_Config), SET_FLAG1(_HAL_REG32_R(&(_TspCtrl2[0].Qmem_Config)), TSP_TSP_SEL_SRAM));
2791*53ee8cc1Swenshuai.xi 
2792*53ee8cc1Swenshuai.xi         // Enable TS0 clock
2793*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TS0_TS1),
2794*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TS0_TS1)), (CLK_TS0_DISABLE|CLK_TS0_INVERT|CLK_TS0_CLK_MASK)));
2795*53ee8cc1Swenshuai.xi 
2796*53ee8cc1Swenshuai.xi         // Enable TS1 clock
2797*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TS0_TS1),
2798*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TS0_TS1)), (CLK_TS1_DISABLE|CLK_TS1_INVERT|CLK_TS1_CLK_MASK)));
2799*53ee8cc1Swenshuai.xi 
2800*53ee8cc1Swenshuai.xi          // Set SYN_STC to be 432MHz
2801*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TSP_STAMP),
2802*53ee8cc1Swenshuai.xi             SET_FLAG1(_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TSP_STAMP)), CLK_SYN_STC0_432M));
2803*53ee8cc1Swenshuai.xi 
2804*53ee8cc1Swenshuai.xi         // Enable STC clock
2805*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TSP_STC0),
2806*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TSP_STC0)), (CLK_STC_DISABLE|CLK_STC_INVERT|CLK_STC_CLK_MASK)));
2807*53ee8cc1Swenshuai.xi 
2808*53ee8cc1Swenshuai.xi         // Enable TIMESTAMP clock
2809*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG_TSP_STAMP),
2810*53ee8cc1Swenshuai.xi             RESET_FLAG1(_HAL_REG32L_R((REG32_L *)(_virtRegBase+CKG_TSP_STAMP)), (CLK_STAM_DISABLE|CLK_STAM_INVERT|CLK_STAM_CLK_MASK)));
2811*53ee8cc1Swenshuai.xi 
2812*53ee8cc1Swenshuai.xi         // Enable Sample clock
2813*53ee8cc1Swenshuai.xi         _HAL_REG32L_W((REG32_L *)(_virtRegBase+CKG2_TSP_TS_SAMPLE),
2814*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)));
2815*53ee8cc1Swenshuai.xi 
2816*53ee8cc1Swenshuai.xi     }
2817*53ee8cc1Swenshuai.xi     else
2818*53ee8cc1Swenshuai.xi     {
2819*53ee8cc1Swenshuai.xi         // Disable TSP clock
2820*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));
2821*53ee8cc1Swenshuai.xi 
2822*53ee8cc1Swenshuai.xi         // Disable TS0 clock
2823*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));
2824*53ee8cc1Swenshuai.xi 
2825*53ee8cc1Swenshuai.xi         // Disable TS1 clock
2826*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));
2827*53ee8cc1Swenshuai.xi 
2828*53ee8cc1Swenshuai.xi         // Disable STC clock
2829*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));
2830*53ee8cc1Swenshuai.xi 
2831*53ee8cc1Swenshuai.xi         // Disable CLK_PARSER clock
2832*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));
2833*53ee8cc1Swenshuai.xi 
2834*53ee8cc1Swenshuai.xi         // Disable TIMESTAMP clock
2835*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));
2836*53ee8cc1Swenshuai.xi 
2837*53ee8cc1Swenshuai.xi         // Disable Sample clock
2838*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));
2839*53ee8cc1Swenshuai.xi 
2840*53ee8cc1Swenshuai.xi         //Reset PE Pad
2841*53ee8cc1Swenshuai.xi         // ts0 pad is null
2842*53ee8cc1Swenshuai.xi         if(_bTsPadUsed[1] == TRUE)
2843*53ee8cc1Swenshuai.xi         {
2844*53ee8cc1Swenshuai.xi             TSP_TOP_REG(REG_TOP_TS1_PE) &= ~REG_TOP_TS_PE_MASK;
2845*53ee8cc1Swenshuai.xi             _bTsPadUsed[1] = FALSE;
2846*53ee8cc1Swenshuai.xi         }
2847*53ee8cc1Swenshuai.xi         if(_bTsPadUsed[2] == TRUE)
2848*53ee8cc1Swenshuai.xi         {
2849*53ee8cc1Swenshuai.xi             TSP_TOP_REG(REG_TOP_TS2_PE) &= ~REG_TOP_TS_PE_MASK;
2850*53ee8cc1Swenshuai.xi             _bTsPadUsed[2] = FALSE;
2851*53ee8cc1Swenshuai.xi         }
2852*53ee8cc1Swenshuai.xi 
2853*53ee8cc1Swenshuai.xi     }
2854*53ee8cc1Swenshuai.xi }
2855*53ee8cc1Swenshuai.xi 
2856*53ee8cc1Swenshuai.xi #undef CKG_TS0_TS1
2857*53ee8cc1Swenshuai.xi     #undef CLK_TS0_DISABLE
2858*53ee8cc1Swenshuai.xi     #undef CLK_TS0_INVERT
2859*53ee8cc1Swenshuai.xi     #undef CLK_TS0_CLK_MASK
2860*53ee8cc1Swenshuai.xi  #undef CKG_TSP_STC0
2861*53ee8cc1Swenshuai.xi     #undef CLK_TSP_DISABLE
2862*53ee8cc1Swenshuai.xi     #undef CLK_TSP_INVERT
2863*53ee8cc1Swenshuai.xi     #undef CLK_TSP_CLK_MASK
2864*53ee8cc1Swenshuai.xi     #undef CLK_PAR_DISABLE
2865*53ee8cc1Swenshuai.xi     #undef CLK_PAR_INVERT
2866*53ee8cc1Swenshuai.xi     #undef CLK_PAR_CLK_MASK
2867*53ee8cc1Swenshuai.xi     #undef CLK_STC_DISABLE
2868*53ee8cc1Swenshuai.xi     #undef CLK_STC_INVERT
2869*53ee8cc1Swenshuai.xi     #undef CLK_STC_CLK_MASK
2870*53ee8cc1Swenshuai.xi #undef CKG_TSP_STAMP
2871*53ee8cc1Swenshuai.xi     #undef CLK_SYN_STC0_MASK
2872*53ee8cc1Swenshuai.xi     #undef CLK_SYN_STC0_432M
2873*53ee8cc1Swenshuai.xi     #undef CLK_STAM_DISABLE
2874*53ee8cc1Swenshuai.xi     #undef CLK_STAM_INVERT
2875*53ee8cc1Swenshuai.xi     #undef CLK_STAM_CLK_MASK
2876*53ee8cc1Swenshuai.xi  #undef CKG2_TSP_TS_SAMPLE
2877*53ee8cc1Swenshuai.xi     #undef CKG2_TSP_TS_SAMPLE_DISABLE
2878*53ee8cc1Swenshuai.xi     #undef CKG2_TSP_TS_SAMPLE_INVERT
2879*53ee8cc1Swenshuai.xi     #undef CKG2_TSP_TS_SAMPLE_CLK_MASK
2880*53ee8cc1Swenshuai.xi #undef CHIP_TSP_BOOT_CLK_SEL
2881*53ee8cc1Swenshuai.xi     #undef CHIP_TSP_BOOT_CLK_SEL_MASK
2882*53ee8cc1Swenshuai.xi 
2883*53ee8cc1Swenshuai.xi 
HAL_TSP_GetDBGPortInfo(MS_U32 u32dbgsel)2884*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_GetDBGPortInfo(MS_U32 u32dbgsel)
2885*53ee8cc1Swenshuai.xi {
2886*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].PKT_CNT, TSP_DBG_SEL_MASK&(u32dbgsel<<TSP_DBG_SEL_SHIFT));
2887*53ee8cc1Swenshuai.xi     return (_HAL_REG32_R(&_TspCtrl[0].TSP_Debug)&TSP_DEBUG_MASK);
2888*53ee8cc1Swenshuai.xi }
2889*53ee8cc1Swenshuai.xi 
HAL_TSP_Enable_ValidSync_Dectect(void)2890*53ee8cc1Swenshuai.xi void HAL_TSP_Enable_ValidSync_Dectect(void)
2891*53ee8cc1Swenshuai.xi {
2892*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
2893*53ee8cc1Swenshuai.xi         SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_VALID_FALLING_DETECT));
2894*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
2895*53ee8cc1Swenshuai.xi         SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_SYNC_RISING_DETECT));
2896*53ee8cc1Swenshuai.xi }
2897*53ee8cc1Swenshuai.xi 
HAL_Reset_WB(void)2898*53ee8cc1Swenshuai.xi void HAL_Reset_WB(void)
2899*53ee8cc1Swenshuai.xi {
2900*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].Hw_Config0,
2901*53ee8cc1Swenshuai.xi         SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config0), TSP_HW_CFG0_WB_DMA_RESET));
2902*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].Hw_Config0,
2903*53ee8cc1Swenshuai.xi         RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config0), TSP_HW_CFG0_WB_DMA_RESET));
2904*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&_TspCtrl[0].TSP_Ctrl1,
2905*53ee8cc1Swenshuai.xi         SET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].TSP_Ctrl1), TSP_CTRL1_DMA_RST));
2906*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&_TspCtrl[0].TSP_Ctrl1,
2907*53ee8cc1Swenshuai.xi         RESET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].TSP_Ctrl1), TSP_CTRL1_DMA_RST));
2908*53ee8cc1Swenshuai.xi }
2909*53ee8cc1Swenshuai.xi 
HAL_TSP_Get_FW_VER(void)2910*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_Get_FW_VER(void)
2911*53ee8cc1Swenshuai.xi {
2912*53ee8cc1Swenshuai.xi     MS_U32 i = 0;
2913*53ee8cc1Swenshuai.xi     MS_U32 u32Data = 0;
2914*53ee8cc1Swenshuai.xi 
2915*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Data0, 0);
2916*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, TSP_MCU_CMD_VERSION_GET);
2917*53ee8cc1Swenshuai.xi     while (i< 4)
2918*53ee8cc1Swenshuai.xi     {
2919*53ee8cc1Swenshuai.xi         if (0 == _HAL_REG32_R(&_TspCtrl[0].MCU_Cmd))
2920*53ee8cc1Swenshuai.xi         {
2921*53ee8cc1Swenshuai.xi             u32Data = _HAL_REG32_R(&_TspCtrl[0].MCU_Data0);
2922*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].MCU_Data0, 0);
2923*53ee8cc1Swenshuai.xi             return u32Data;
2924*53ee8cc1Swenshuai.xi         }
2925*53ee8cc1Swenshuai.xi         i++;
2926*53ee8cc1Swenshuai.xi         _delay();
2927*53ee8cc1Swenshuai.xi     }
2928*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, 0);
2929*53ee8cc1Swenshuai.xi     return u32Data;
2930*53ee8cc1Swenshuai.xi }
2931*53ee8cc1Swenshuai.xi 
HAL_TSP_Check_FW_VER(void)2932*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_Check_FW_VER(void)
2933*53ee8cc1Swenshuai.xi {
2934*53ee8cc1Swenshuai.xi     MS_U32  u32FWVer;
2935*53ee8cc1Swenshuai.xi 
2936*53ee8cc1Swenshuai.xi     u32FWVer = HAL_TSP_Get_FW_VER();
2937*53ee8cc1Swenshuai.xi     if((u32FWVer >> 16) != TSP_FW_DEVICE_ID)
2938*53ee8cc1Swenshuai.xi     {
2939*53ee8cc1Swenshuai.xi         printf("\nWarning: TSP FW not match!! FW version: 0x%08x\n\n", (unsigned int)u32FWVer);
2940*53ee8cc1Swenshuai.xi         return FALSE;
2941*53ee8cc1Swenshuai.xi     }
2942*53ee8cc1Swenshuai.xi 
2943*53ee8cc1Swenshuai.xi     return TRUE;
2944*53ee8cc1Swenshuai.xi }
2945*53ee8cc1Swenshuai.xi 
HAL_TSP_SetFwDbgMem(MS_PHY phyAddr,MS_U32 u32Size)2946*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_SetFwDbgMem(MS_PHY phyAddr, MS_U32 u32Size)
2947*53ee8cc1Swenshuai.xi {
2948*53ee8cc1Swenshuai.xi     MS_U32 i = 0;
2949*53ee8cc1Swenshuai.xi 
2950*53ee8cc1Swenshuai.xi     if(IsCover(phyAddr, phyAddr + u32Size, OPENRISC_IP_1_ADDR, OPENRISC_IP_1_ADDR + OPENRISC_IP_1_SIZE) ||
2951*53ee8cc1Swenshuai.xi     IsCover(phyAddr, phyAddr + u32Size, OPENRISC_IP_2_ADDR, OPENRISC_IP_2_ADDR + OPENRISC_IP_2_SIZE) ||
2952*53ee8cc1Swenshuai.xi     IsCover(phyAddr, phyAddr + u32Size, OPENRISC_IP_3_ADDR, OPENRISC_IP_3_ADDR + OPENRISC_IP_3_SIZE) ||
2953*53ee8cc1Swenshuai.xi     IsCover(phyAddr, phyAddr + u32Size, OPENRISC_QMEM_ADDR, OPENRISC_QMEM_ADDR + OPENRISC_QMEM_SIZE))
2954*53ee8cc1Swenshuai.xi     {
2955*53ee8cc1Swenshuai.xi         printf("[%s][%d] invalid physical address 0x%x\n", __FUNCTION__, __LINE__, (unsigned int)phyAddr);
2956*53ee8cc1Swenshuai.xi         return FALSE;
2957*53ee8cc1Swenshuai.xi     }
2958*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Data0, phyAddr);
2959*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Data1, u32Size);
2960*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, TSP_MCU_CMD_DBG_MEM);
2961*53ee8cc1Swenshuai.xi     while(i<4)
2962*53ee8cc1Swenshuai.xi     {
2963*53ee8cc1Swenshuai.xi         if(0 == _HAL_REG32_R(&_TspCtrl[0].MCU_Cmd))
2964*53ee8cc1Swenshuai.xi         {
2965*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].MCU_Data0, 0);
2966*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].MCU_Data1, 0);
2967*53ee8cc1Swenshuai.xi             return TRUE;
2968*53ee8cc1Swenshuai.xi         }
2969*53ee8cc1Swenshuai.xi         i++;
2970*53ee8cc1Swenshuai.xi         _delay();
2971*53ee8cc1Swenshuai.xi     }
2972*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, 0);
2973*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Data0, 0);
2974*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Data1, 0);
2975*53ee8cc1Swenshuai.xi 
2976*53ee8cc1Swenshuai.xi     return FALSE;
2977*53ee8cc1Swenshuai.xi }
2978*53ee8cc1Swenshuai.xi 
HAL_TSP_SetFwDbgWord(MS_U32 u32Word)2979*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_SetFwDbgWord(MS_U32 u32Word)
2980*53ee8cc1Swenshuai.xi {
2981*53ee8cc1Swenshuai.xi     MS_U32 i = 0;
2982*53ee8cc1Swenshuai.xi 
2983*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Data0, u32Word);
2984*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, TSP_MCU_CMD_DBG_WORD);
2985*53ee8cc1Swenshuai.xi     while(i<4)
2986*53ee8cc1Swenshuai.xi     {
2987*53ee8cc1Swenshuai.xi         if(0 == _HAL_REG32_R(&_TspCtrl[0].MCU_Cmd))
2988*53ee8cc1Swenshuai.xi         {
2989*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&_TspCtrl[0].MCU_Data0, 0);
2990*53ee8cc1Swenshuai.xi             return TRUE;
2991*53ee8cc1Swenshuai.xi         }
2992*53ee8cc1Swenshuai.xi         i++;
2993*53ee8cc1Swenshuai.xi         _delay();
2994*53ee8cc1Swenshuai.xi     }
2995*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Data0, 0);
2996*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, 0);
2997*53ee8cc1Swenshuai.xi     return FALSE;
2998*53ee8cc1Swenshuai.xi }
2999*53ee8cc1Swenshuai.xi 
3000*53ee8cc1Swenshuai.xi //0: VQ0, 1: VQ_file
HAL_TSP_SetVQBuffer(MS_PHY phyBaseAddr,MS_U32 u32BufLen)3001*53ee8cc1Swenshuai.xi void HAL_TSP_SetVQBuffer(MS_PHY phyBaseAddr, MS_U32 u32BufLen)
3002*53ee8cc1Swenshuai.xi {
3003*53ee8cc1Swenshuai.xi     MS_PHY phyAddr = phyBaseAddr;
3004*53ee8cc1Swenshuai.xi     MS_U32 u32Size = 0, u32OneBufSize = 0, u32temp = 0;
3005*53ee8cc1Swenshuai.xi     MS_PHY phyVqBufOffset = _HAL_TSP_MIU_OFFSET(phyBaseAddr);
3006*53ee8cc1Swenshuai.xi 
3007*53ee8cc1Swenshuai.xi     u32OneBufSize = ((u32BufLen >> MIU_BUS) / TSP_VQ_NUM) << MIU_BUS; //miu alignment
3008*53ee8cc1Swenshuai.xi     u32Size = u32OneBufSize / TSP_VQ_PITCH;
3009*53ee8cc1Swenshuai.xi 
3010*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&(_TspCtrl[0].VQ0_BASE), (MS_U32)((phyAddr-phyVqBufOffset) >> MIU_BUS));
3011*53ee8cc1Swenshuai.xi     u32temp = (u32Size << TSP_VQ0_SIZE_192PK_SHIFT) | (_HAL_REG32_R(&_TspCtrl[0].VQ0_CTRL) & ~TSP_VQ0_SIZE_192PK_MASK);
3012*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&(_TspCtrl[0].VQ0_CTRL), u32temp);
3013*53ee8cc1Swenshuai.xi 
3014*53ee8cc1Swenshuai.xi     phyAddr += u32OneBufSize;
3015*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&(_TspCtrl[0].VQ1_Base), (MS_U32)((phyAddr-phyVqBufOffset) >> MIU_BUS));
3016*53ee8cc1Swenshuai.xi     u32temp = (u32Size << TSP_VQ1_SIZE_192BYTE_SHIFT) | (_HAL_REG32_R(&_TspCtrl[0].VQ1_Size) & ~TSP_VQ1_SIZE_192BYTE_MASK);
3017*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&(_TspCtrl[0].VQ1_Size), u32temp);
3018*53ee8cc1Swenshuai.xi }
3019*53ee8cc1Swenshuai.xi 
HAL_TSP_VQueue_Enable(MS_BOOL bEnable)3020*53ee8cc1Swenshuai.xi void HAL_TSP_VQueue_Enable(MS_BOOL bEnable)
3021*53ee8cc1Swenshuai.xi {
3022*53ee8cc1Swenshuai.xi     if (bEnable)
3023*53ee8cc1Swenshuai.xi     {
3024*53ee8cc1Swenshuai.xi         // Reset VQ before VQ enable.
3025*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].VQ0_CTRL, SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].VQ0_CTRL), TSP_VQ0_RESET));
3026*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].VQ0_CTRL, RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].VQ0_CTRL), TSP_VQ0_RESET));
3027*53ee8cc1Swenshuai.xi 
3028*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].VQ1_Config, SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].VQ1_Config), TSP_VQ1_RESET));
3029*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].VQ1_Config, RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].VQ1_Config), TSP_VQ1_RESET));
3030*53ee8cc1Swenshuai.xi 
3031*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].VQ0_STATUS,
3032*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].VQ0_STATUS), (TSP_VQ0_EN|TSP_VQ_FILE_EN|TSP_VQ_PINGPONG_EN)));
3033*53ee8cc1Swenshuai.xi     }
3034*53ee8cc1Swenshuai.xi     else
3035*53ee8cc1Swenshuai.xi     {
3036*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].VQ0_STATUS,
3037*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].VQ0_STATUS), (TSP_VQ0_EN|TSP_VQ_FILE_EN|TSP_VQ_PINGPONG_EN)));
3038*53ee8cc1Swenshuai.xi     }
3039*53ee8cc1Swenshuai.xi 
3040*53ee8cc1Swenshuai.xi }
3041*53ee8cc1Swenshuai.xi 
HAL_TSP_VQueue_Reset(void)3042*53ee8cc1Swenshuai.xi void HAL_TSP_VQueue_Reset(void)
3043*53ee8cc1Swenshuai.xi {
3044*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].VQ0_CTRL,
3045*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].VQ0_CTRL), TSP_VQ0_RESET));
3046*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].VQ0_CTRL,
3047*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].VQ0_CTRL), TSP_VQ0_RESET));
3048*53ee8cc1Swenshuai.xi 
3049*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].VQ1_Config,
3050*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].VQ1_Config), TSP_VQ1_RESET));
3051*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].VQ1_Config,
3052*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].VQ1_Config), TSP_VQ1_RESET));
3053*53ee8cc1Swenshuai.xi }
3054*53ee8cc1Swenshuai.xi 
HAL_TSP_VQueue_OverflowInt_En(MS_BOOL bEnable)3055*53ee8cc1Swenshuai.xi void HAL_TSP_VQueue_OverflowInt_En(MS_BOOL bEnable)
3056*53ee8cc1Swenshuai.xi {
3057*53ee8cc1Swenshuai.xi     if (bEnable)
3058*53ee8cc1Swenshuai.xi     {
3059*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].VQ0_CTRL,
3060*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].VQ0_CTRL), TSP_VQ0_OVERFLOW_INT_EN));
3061*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].VQ1_Config,
3062*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].VQ1_Config), TSP_VQ1_OVF_INT_EN));
3063*53ee8cc1Swenshuai.xi 
3064*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&_TspCtrl[0].SwInt_Stat1_L,
3065*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].SwInt_Stat1_L)|0xFF00 , TSP_HWINT2_VQ_OVERFLOW_STATUS >> 8));
3066*53ee8cc1Swenshuai.xi     }
3067*53ee8cc1Swenshuai.xi     else
3068*53ee8cc1Swenshuai.xi     {
3069*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].VQ0_CTRL,
3070*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].VQ0_CTRL), TSP_VQ0_OVERFLOW_INT_EN));
3071*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].VQ1_Config,
3072*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].VQ1_Config), TSP_VQ1_OVF_INT_EN));
3073*53ee8cc1Swenshuai.xi 
3074*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&_TspCtrl[0].SwInt_Stat1_L,
3075*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].SwInt_Stat1_L) , TSP_HWINT2_VQ_OVERFLOW_STATUS >> 8));
3076*53ee8cc1Swenshuai.xi     }
3077*53ee8cc1Swenshuai.xi }
3078*53ee8cc1Swenshuai.xi 
HAL_TSP_VQueue_Clr_OverflowInt(void)3079*53ee8cc1Swenshuai.xi void HAL_TSP_VQueue_Clr_OverflowInt(void)
3080*53ee8cc1Swenshuai.xi {
3081*53ee8cc1Swenshuai.xi     MS_U32 u32data = _HAL_REG32_R(&_TspCtrl[0].VQ0_CTRL);
3082*53ee8cc1Swenshuai.xi 
3083*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].VQ0_CTRL, u32data | TSP_VQ0_CLR_OVERFLOW_INT);
3084*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].VQ0_CTRL, u32data & ~TSP_VQ0_CLR_OVERFLOW_INT);
3085*53ee8cc1Swenshuai.xi 
3086*53ee8cc1Swenshuai.xi     u32data = _HAL_REG32_R(&_TspCtrl[0].VQ1_Config);
3087*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].VQ1_Config, u32data | TSP_VQ1_CLR_OVF_INT);
3088*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].VQ1_Config, u32data & ~TSP_VQ1_CLR_OVF_INT);
3089*53ee8cc1Swenshuai.xi 
3090*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&_TspCtrl[0].SwInt_Stat1_L,
3091*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG16_R(&_TspCtrl[0].SwInt_Stat1_L), TSP_HWINT2_VQ_OVERFLOW_STATUS));
3092*53ee8cc1Swenshuai.xi }
3093*53ee8cc1Swenshuai.xi 
HAL_TSP_Set_Req_VQ_RX_Threshold(MS_U8 u8req_len)3094*53ee8cc1Swenshuai.xi void HAL_TSP_Set_Req_VQ_RX_Threshold(MS_U8 u8req_len)
3095*53ee8cc1Swenshuai.xi {
3096*53ee8cc1Swenshuai.xi     MS_U32 u32Value = TSP_REQ_VQ_RX_THRESHOLD_LEN1;
3097*53ee8cc1Swenshuai.xi 
3098*53ee8cc1Swenshuai.xi     switch(u8req_len)
3099*53ee8cc1Swenshuai.xi     {
3100*53ee8cc1Swenshuai.xi         case 1:
3101*53ee8cc1Swenshuai.xi             u32Value = TSP_REQ_VQ_RX_THRESHOLD_LEN1;
3102*53ee8cc1Swenshuai.xi             break;
3103*53ee8cc1Swenshuai.xi         case 2:
3104*53ee8cc1Swenshuai.xi             u32Value = TSP_REQ_VQ_RX_THRESHOLD_LEN2;
3105*53ee8cc1Swenshuai.xi             break;
3106*53ee8cc1Swenshuai.xi         case 4:
3107*53ee8cc1Swenshuai.xi             u32Value = TSP_REQ_VQ_RX_THRESHOLD_LEN4;
3108*53ee8cc1Swenshuai.xi             break;
3109*53ee8cc1Swenshuai.xi         case 8:
3110*53ee8cc1Swenshuai.xi             u32Value = TSP_REQ_VQ_RX_THRESHOLD_LEN8;
3111*53ee8cc1Swenshuai.xi             break;
3112*53ee8cc1Swenshuai.xi         default:
3113*53ee8cc1Swenshuai.xi             break;
3114*53ee8cc1Swenshuai.xi     }
3115*53ee8cc1Swenshuai.xi 
3116*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].VQ0_STATUS,
3117*53ee8cc1Swenshuai.xi         (_HAL_REG32_R(&_TspCtrl[0].VQ0_STATUS) & ~TSP_REQ_VQ_RX_THRESHOLD_MASKE) | u32Value);
3118*53ee8cc1Swenshuai.xi 
3119*53ee8cc1Swenshuai.xi 
3120*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].VQ1_Config,
3121*53ee8cc1Swenshuai.xi         (_HAL_REG32_R(&_TspCtrl[0].VQ1_Config) & ~TSP_VQ1_WR_THRESHOLD_MASK) | u32Value);
3122*53ee8cc1Swenshuai.xi }
3123*53ee8cc1Swenshuai.xi 
HAL_TSP_VQ_INT_STATUS(void)3124*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_VQ_INT_STATUS(void)
3125*53ee8cc1Swenshuai.xi {
3126*53ee8cc1Swenshuai.xi     return (MS_U32)(_HAL_REG16_R(&_TspCtrl[0].SwInt_Stat1_L) & TSP_HWINT2_VQ_OVERFLOW_STATUS);
3127*53ee8cc1Swenshuai.xi }
3128*53ee8cc1Swenshuai.xi 
HAL_TSP_Get_VQStatus(void)3129*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_Get_VQStatus(void)
3130*53ee8cc1Swenshuai.xi {
3131*53ee8cc1Swenshuai.xi     return (_HAL_REG32_R(&_TspCtrl[0].VQ0_STATUS) & TSP_VQ0_STATUS_MASK);
3132*53ee8cc1Swenshuai.xi }
3133*53ee8cc1Swenshuai.xi 
HAL_TSP_GetPidFltReg(MS_U32 u32EngId,MS_U32 u32PidFltId)3134*53ee8cc1Swenshuai.xi REG_PidFlt* HAL_TSP_GetPidFltReg(MS_U32 u32EngId, MS_U32 u32PidFltId)
3135*53ee8cc1Swenshuai.xi {
3136*53ee8cc1Swenshuai.xi     return (&(_TspPid[u32EngId].Flt[u32PidFltId]));
3137*53ee8cc1Swenshuai.xi }
3138*53ee8cc1Swenshuai.xi 
HAL_TSP_Read_DropPktCnt(MS_U16 * pu16ADropCnt,MS_U16 * pu16VDropCnt)3139*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_Read_DropPktCnt(MS_U16* pu16ADropCnt, MS_U16* pu16VDropCnt)
3140*53ee8cc1Swenshuai.xi {
3141*53ee8cc1Swenshuai.xi     return FALSE;
3142*53ee8cc1Swenshuai.xi }
3143*53ee8cc1Swenshuai.xi 
HAL_TSP_TSIF0_Enable(MS_BOOL bEnable)3144*53ee8cc1Swenshuai.xi void HAL_TSP_TSIF0_Enable(MS_BOOL bEnable)
3145*53ee8cc1Swenshuai.xi {
3146*53ee8cc1Swenshuai.xi     if (bEnable)
3147*53ee8cc1Swenshuai.xi     {
3148*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
3149*53ee8cc1Swenshuai.xi                      SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_HW_CFG4_TSIF0_ENABLE));
3150*53ee8cc1Swenshuai.xi     }
3151*53ee8cc1Swenshuai.xi     else
3152*53ee8cc1Swenshuai.xi     {
3153*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
3154*53ee8cc1Swenshuai.xi                      RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_HW_CFG4_TSIF0_ENABLE));
3155*53ee8cc1Swenshuai.xi     }
3156*53ee8cc1Swenshuai.xi }
3157*53ee8cc1Swenshuai.xi 
HAL_TSP_TSIF1_Enable(MS_BOOL bEnable)3158*53ee8cc1Swenshuai.xi void HAL_TSP_TSIF1_Enable(MS_BOOL bEnable)
3159*53ee8cc1Swenshuai.xi {
3160*53ee8cc1Swenshuai.xi     if (bEnable)
3161*53ee8cc1Swenshuai.xi     {
3162*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
3163*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_HW_CFG4_TSIF1_ENABLE));
3164*53ee8cc1Swenshuai.xi     }
3165*53ee8cc1Swenshuai.xi     else
3166*53ee8cc1Swenshuai.xi     {
3167*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
3168*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_HW_CFG4_TSIF1_ENABLE));
3169*53ee8cc1Swenshuai.xi     }
3170*53ee8cc1Swenshuai.xi }
3171*53ee8cc1Swenshuai.xi 
3172*53ee8cc1Swenshuai.xi //  (Section DMA + PVR) , total 5 set
3173*53ee8cc1Swenshuai.xi //  Default value of low bound is 0, default value of up bound is 0xFFFFFFFF, means no protection
3174*53ee8cc1Swenshuai.xi //  If set both low bound and up bound to be 0, means protection all
3175*53ee8cc1Swenshuai.xi //  MIU bus is 4, Max MIU address is 512MB, should append 1 zero
3176*53ee8cc1Swenshuai.xi //  The range can be written:  u32StartAddr <= x < u32EndAddr
3177*53ee8cc1Swenshuai.xi //  Protection range: x >= u32EndAddr && x < u32StartAddr
HAL_TSP_WriteProtect_Enable(MS_BOOL bEnable,MS_PHY * pphyStartAddr,MS_PHY * pphyEndAddr)3178*53ee8cc1Swenshuai.xi void HAL_TSP_WriteProtect_Enable(MS_BOOL bEnable, MS_PHY* pphyStartAddr, MS_PHY* pphyEndAddr)
3179*53ee8cc1Swenshuai.xi {
3180*53ee8cc1Swenshuai.xi     MS_U32  u32value;
3181*53ee8cc1Swenshuai.xi     MS_U32  u32lbnd, u32ubnd;
3182*53ee8cc1Swenshuai.xi 
3183*53ee8cc1Swenshuai.xi     if (bEnable)
3184*53ee8cc1Swenshuai.xi     {
3185*53ee8cc1Swenshuai.xi         if(pphyStartAddr[0] == pphyEndAddr[0])
3186*53ee8cc1Swenshuai.xi             pphyEndAddr[0] += (1UL << MIU_BUS);
3187*53ee8cc1Swenshuai.xi 
3188*53ee8cc1Swenshuai.xi         u32lbnd = (MS_U32)(((pphyStartAddr[0]-_HAL_TSP_MIU_OFFSET(pphyStartAddr[0])) >> MIU_BUS) >> TSP_DMAW_BND_ALI_SHIFT) & TSP_DMAW_LBND_LSB8;
3189*53ee8cc1Swenshuai.xi         u32ubnd = (MS_U32)((((pphyEndAddr[0]-_HAL_TSP_MIU_OFFSET(pphyEndAddr[0])) >> MIU_BUS) >> TSP_DMAW_BND_ALI_SHIFT) & TSP_DMAW_LBND_LSB8) << TSP_DMAW_UBND_LSB8_SHIFT;
3190*53ee8cc1Swenshuai.xi         u32value = u32lbnd + u32ubnd+ (_HAL_REG32_R(&_TspCtrl[0].reg16C4) & ~(TSP_DMAW_LBND_LSB8|TSP_DMAW_UBND_LSB8));
3191*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].reg16C4, u32value);
3192*53ee8cc1Swenshuai.xi         u32lbnd = (MS_U32)(((pphyStartAddr[0]-_HAL_TSP_MIU_OFFSET(pphyStartAddr[0])) >> MIU_BUS) >> TSP_DMAWP_BND_ALI_SHIFT) & TSP_DMAWP_LBND_MASK;
3193*53ee8cc1Swenshuai.xi         u32ubnd = (MS_U32)((((pphyEndAddr[0]-_HAL_TSP_MIU_OFFSET(pphyEndAddr[0])) >> MIU_BUS) >> TSP_DMAWP_BND_ALI_SHIFT) & TSP_DMAWP_HBND_MASK) << TSP_DMAWP_HBND_SHFT;
3194*53ee8cc1Swenshuai.xi         u32value = u32lbnd + u32ubnd;
3195*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].TSP_DMAWP_BND, u32value);
3196*53ee8cc1Swenshuai.xi 
3197*53ee8cc1Swenshuai.xi         if(pphyStartAddr[1] == pphyEndAddr[1])
3198*53ee8cc1Swenshuai.xi             pphyStartAddr[1] += (1UL << MIU_BUS);
3199*53ee8cc1Swenshuai.xi 
3200*53ee8cc1Swenshuai.xi         u32lbnd = (MS_U32)(((pphyStartAddr[1]-_HAL_TSP_MIU_OFFSET(pphyStartAddr[1])) >> MIU_BUS) >> TSP_DMAW1_BND_ALI_SHIFT) & TSP_DMAW1_LBND_LSB8;
3201*53ee8cc1Swenshuai.xi         u32ubnd = (MS_U32)((((pphyEndAddr[1]-_HAL_TSP_MIU_OFFSET(pphyEndAddr[1])) >> MIU_BUS) >> TSP_DMAW1_BND_ALI_SHIFT) & TSP_DMAW1_LBND_LSB8) << TSP_DMAW1_UBND_LSB8_SHIFT;
3202*53ee8cc1Swenshuai.xi         u32value = u32lbnd + u32ubnd+ (_HAL_REG32_R(&_TspCtrl[0].reg16C8) & ~(TSP_DMAW1_LBND_LSB8|TSP_DMAW1_UBND_LSB8));
3203*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].reg16C8, u32value);
3204*53ee8cc1Swenshuai.xi         u32lbnd = (MS_U32)(((pphyStartAddr[1]-_HAL_TSP_MIU_OFFSET(pphyStartAddr[1])) >> MIU_BUS) >> TSP_DMAW1_ALI_SHIFT) & TSP_DMAW1_LBND_MASK1;
3205*53ee8cc1Swenshuai.xi         u32ubnd = (MS_U32)((((pphyEndAddr[1]-_HAL_TSP_MIU_OFFSET(pphyEndAddr[1])) >> MIU_BUS) >> TSP_DMAW1_ALI_SHIFT) & TSP_DMAW1_UBND_MASK1) << TSP_DMAW1_UBND_SHIFT1;
3206*53ee8cc1Swenshuai.xi         u32value = u32lbnd + u32ubnd;
3207*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].DMAW1_1, u32value);
3208*53ee8cc1Swenshuai.xi 
3209*53ee8cc1Swenshuai.xi         if(pphyStartAddr[2] == pphyEndAddr[2])
3210*53ee8cc1Swenshuai.xi             pphyStartAddr[2] += (1UL << MIU_BUS);
3211*53ee8cc1Swenshuai.xi 
3212*53ee8cc1Swenshuai.xi         u32lbnd = (MS_U32)(((pphyStartAddr[2]-_HAL_TSP_MIU_OFFSET(pphyStartAddr[2])) >> MIU_BUS) >> TSP_DMAW2_BND_ALI_SHIFT) & TSP_DMAW2_LBND_LSB8;
3213*53ee8cc1Swenshuai.xi         u32ubnd = (MS_U32)((((pphyEndAddr[2]-_HAL_TSP_MIU_OFFSET(pphyEndAddr[2])) >> MIU_BUS) >> TSP_DMAW2_BND_ALI_SHIFT) & TSP_DMAW2_LBND_LSB8) << TSP_DMAW2_UBND_LSB8_SHIFT;
3214*53ee8cc1Swenshuai.xi         u32value = u32lbnd + u32ubnd+ (_HAL_REG32_R(&_TspCtrl[0].reg16CC) & ~(TSP_DMAW2_LBND_LSB8|TSP_DMAW2_UBND_LSB8));
3215*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].reg16CC, u32value);
3216*53ee8cc1Swenshuai.xi         u32lbnd = (MS_U32)(((pphyStartAddr[2]-_HAL_TSP_MIU_OFFSET(pphyStartAddr[2])) >> MIU_BUS) >> TSP_DMAW2_ALI_SHIFT) & TSP_DMAW2_LBND_MASK1;
3217*53ee8cc1Swenshuai.xi         u32ubnd = (MS_U32)((((pphyEndAddr[2]-_HAL_TSP_MIU_OFFSET(pphyEndAddr[2])) >> MIU_BUS) >> TSP_DMAW2_ALI_SHIFT) & TSP_DMAW2_UBND_MASK1) << TSP_DMAW2_UBND_SHIFT1;
3218*53ee8cc1Swenshuai.xi         u32value = u32lbnd + u32ubnd;
3219*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].DMAW2_1, u32value);
3220*53ee8cc1Swenshuai.xi 
3221*53ee8cc1Swenshuai.xi         if(pphyStartAddr[3] == pphyEndAddr[3])
3222*53ee8cc1Swenshuai.xi             pphyStartAddr[3] += (1UL << MIU_BUS);
3223*53ee8cc1Swenshuai.xi 
3224*53ee8cc1Swenshuai.xi         u32lbnd = (MS_U32)(((pphyStartAddr[3]-_HAL_TSP_MIU_OFFSET(pphyStartAddr[3])) >> MIU_BUS) >> TSP_DMAW3_BND_ALI_SHIFT) & TSP_DMAW3_LBND_MASK;
3225*53ee8cc1Swenshuai.xi         u32ubnd = (MS_U32)(((pphyEndAddr[3]-_HAL_TSP_MIU_OFFSET(pphyEndAddr[3])) >> MIU_BUS) >> TSP_DMAW3_BND_ALI_SHIFT) & TSP_DMAW3_UBND_MASK;
3226*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].DMAW3_LBND, (_HAL_REG32_R(&_TspCtrl[0].DMAW3_LBND) & ~TSP_DMAW3_LBND_MASK) | u32lbnd);
3227*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].DMAW3_UBND, (_HAL_REG32_R(&_TspCtrl[0].DMAW3_UBND) & ~TSP_DMAW3_UBND_MASK) | u32ubnd);
3228*53ee8cc1Swenshuai.xi 
3229*53ee8cc1Swenshuai.xi         if(pphyStartAddr[4] == pphyEndAddr[4])
3230*53ee8cc1Swenshuai.xi             pphyStartAddr[4] += (1UL << MIU_BUS);
3231*53ee8cc1Swenshuai.xi 
3232*53ee8cc1Swenshuai.xi         u32lbnd = (MS_U32)(((pphyStartAddr[4]-_HAL_TSP_MIU_OFFSET(pphyStartAddr[4])) >> MIU_BUS) >> TSP_DMAW4_BND_ALI_SHIFT) & TSP_DMAW4_LBND_MASK;
3233*53ee8cc1Swenshuai.xi         u32ubnd = (MS_U32)(((pphyEndAddr[4]-_HAL_TSP_MIU_OFFSET(pphyEndAddr[4])) >> MIU_BUS) >> TSP_DMAW4_BND_ALI_SHIFT) & TSP_DMAW4_UBND_MASK;
3234*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].DMAW4_LBND, (_HAL_REG32_R(&_TspCtrl[0].DMAW4_LBND) & ~TSP_DMAW4_LBND_MASK) | u32lbnd);
3235*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].DMAW4_UBND, (_HAL_REG32_R(&_TspCtrl[0].DMAW4_UBND) & ~TSP_DMAW4_UBND_MASK) | u32ubnd);
3236*53ee8cc1Swenshuai.xi 
3237*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].reg15b4, _HAL_REG32_R(&_TspCtrl[0].reg15b4) | TSP_DMAW_PROTECT_EN);
3238*53ee8cc1Swenshuai.xi     }
3239*53ee8cc1Swenshuai.xi     else
3240*53ee8cc1Swenshuai.xi     {
3241*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].reg15b4, _HAL_REG32_R(&_TspCtrl[0].reg15b4) & ~TSP_DMAW_PROTECT_EN);
3242*53ee8cc1Swenshuai.xi     }
3243*53ee8cc1Swenshuai.xi }
3244*53ee8cc1Swenshuai.xi 
HAL_TSP_MOBF_Set_PVRKey(MS_U32 u32Key0,MS_U32 u32Key1)3245*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_MOBF_Set_PVRKey(MS_U32 u32Key0, MS_U32 u32Key1)
3246*53ee8cc1Swenshuai.xi {
3247*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MOBF_PVR_KEY, (_HAL_REG32_R(&_TspCtrl[0].reg15b4) & ~TSP_MOBF_PVR_KEY0_MASK) | ((u32Key0 << TSP_MOBF_PVR_KEY0_SHIFT) & TSP_MOBF_PVR_KEY0_MASK));
3248*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MOBF_PVR_KEY, (_HAL_REG32_R(&_TspCtrl[0].reg15b4) & ~TSP_MOBF_PVR_KEY1_MASK) | ((u32Key0 << TSP_MOBF_PVR_KEY1_SHIFT) & TSP_MOBF_PVR_KEY1_MASK));
3249*53ee8cc1Swenshuai.xi     return TRUE;
3250*53ee8cc1Swenshuai.xi }
3251*53ee8cc1Swenshuai.xi 
HAL_TSP_MOBF_Set_FileinKey(MS_U32 u32Key)3252*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_MOBF_Set_FileinKey(MS_U32 u32Key)
3253*53ee8cc1Swenshuai.xi {
3254*53ee8cc1Swenshuai.xi     MS_U32 u32Data = 0;
3255*53ee8cc1Swenshuai.xi 
3256*53ee8cc1Swenshuai.xi     u32Data = (_HAL_REG32_R(&_TspCtrl[0].Pcr64_H) & ~TSP_MOBF_FILE_KEY0_L_MASK) |
3257*53ee8cc1Swenshuai.xi                 ((u32Key << TSP_MOBF_FILE_KEY0_L_SHIFT) & TSP_MOBF_FILE_KEY0_L_MASK);
3258*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].Pcr64_H, u32Data);
3259*53ee8cc1Swenshuai.xi     return TRUE;
3260*53ee8cc1Swenshuai.xi }
3261*53ee8cc1Swenshuai.xi 
HAL_TSP_MOBF_Filein_Enable(MS_BOOL bEnable)3262*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_MOBF_Filein_Enable(MS_BOOL bEnable)
3263*53ee8cc1Swenshuai.xi {
3264*53ee8cc1Swenshuai.xi     return FALSE;
3265*53ee8cc1Swenshuai.xi }
3266*53ee8cc1Swenshuai.xi 
HAL_TSP_MOBF_PVR_Enable(MS_BOOL bEnable)3267*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_MOBF_PVR_Enable(MS_BOOL bEnable)
3268*53ee8cc1Swenshuai.xi {
3269*53ee8cc1Swenshuai.xi     return FALSE;
3270*53ee8cc1Swenshuai.xi }
3271*53ee8cc1Swenshuai.xi 
HAL_TSP_AU_BD_Mode_Enable(MS_BOOL bEnable)3272*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_AU_BD_Mode_Enable(MS_BOOL bEnable)
3273*53ee8cc1Swenshuai.xi {
3274*53ee8cc1Swenshuai.xi     if (bEnable)
3275*53ee8cc1Swenshuai.xi     {
3276*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
3277*53ee8cc1Swenshuai.xi                 SET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_HW_BD_AUDIO_EN));
3278*53ee8cc1Swenshuai.xi     }
3279*53ee8cc1Swenshuai.xi     else
3280*53ee8cc1Swenshuai.xi     {
3281*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&_TspCtrl[0].Hw_Config4,
3282*53ee8cc1Swenshuai.xi                 RESET_FLAG1(_HAL_REG32_R(&_TspCtrl[0].Hw_Config4), TSP_HW_BD_AUDIO_EN));
3283*53ee8cc1Swenshuai.xi     }
3284*53ee8cc1Swenshuai.xi 
3285*53ee8cc1Swenshuai.xi     return TRUE;
3286*53ee8cc1Swenshuai.xi }
3287*53ee8cc1Swenshuai.xi 
HAL_TSP_CMD_Run(MS_U32 u32Cmd,MS_U32 u32Config0,MS_U32 u32Config1,MS_U32 * pData)3288*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_CMD_Run(MS_U32 u32Cmd, MS_U32 u32Config0, MS_U32 u32Config1, MS_U32* pData)
3289*53ee8cc1Swenshuai.xi {
3290*53ee8cc1Swenshuai.xi     switch (u32Cmd)
3291*53ee8cc1Swenshuai.xi     {
3292*53ee8cc1Swenshuai.xi         default:
3293*53ee8cc1Swenshuai.xi             return FALSE;
3294*53ee8cc1Swenshuai.xi     }
3295*53ee8cc1Swenshuai.xi 
3296*53ee8cc1Swenshuai.xi     return TRUE;
3297*53ee8cc1Swenshuai.xi }
3298*53ee8cc1Swenshuai.xi 
HAL_TSP_Get_PesScmb_Sts(MS_U8 u8FltId)3299*53ee8cc1Swenshuai.xi MS_U8 HAL_TSP_Get_PesScmb_Sts(MS_U8 u8FltId)
3300*53ee8cc1Swenshuai.xi {
3301*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, TSP_MCU_CMD_SCMSTS_GET | (MS_U32)(u8FltId & 0xFF));
3302*53ee8cc1Swenshuai.xi     while (0 != _HAL_REG32_R(&_TspCtrl[0].MCU_Cmd));
3303*53ee8cc1Swenshuai.xi     return (MS_U8)(_HAL_REG32_R(&_TspCtrl[0].MCU_Data0));
3304*53ee8cc1Swenshuai.xi }
3305*53ee8cc1Swenshuai.xi 
HAL_TSP_Get_TsScmb_Sts(MS_U8 u8FltId)3306*53ee8cc1Swenshuai.xi MS_U8 HAL_TSP_Get_TsScmb_Sts(MS_U8 u8FltId)
3307*53ee8cc1Swenshuai.xi {
3308*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, TSP_MCU_CMD_SCMSTS_GET | (MS_U32)(u8FltId & 0xFF));
3309*53ee8cc1Swenshuai.xi     while (0 != _HAL_REG32_R(&_TspCtrl[0].MCU_Cmd));
3310*53ee8cc1Swenshuai.xi     return (MS_U8)(_HAL_REG32_R(&_TspCtrl[0].MCU_Data0) >> 8);
3311*53ee8cc1Swenshuai.xi }
3312*53ee8cc1Swenshuai.xi 
3313*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------
3314*53ee8cc1Swenshuai.xi // @u16Mode : TSP_DEBUG_MODE_DIS_CONT     => discontinuous packet count
3315*53ee8cc1Swenshuai.xi //                   TSP_DEBUG_MODE_DROP_COUNT => drop packet count
3316*53ee8cc1Swenshuai.xi // @u16Src  : TBD
3317*53ee8cc1Swenshuai.xi // @u16Fifo  : TBD
3318*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------
_HAL_TSP_Get_PktCnt(TSP_DEBUG_MODE u16Mode,TSP_DEBUG_SRC TspSrc,TSP_DEBUG_FIFO TspFifo)3319*53ee8cc1Swenshuai.xi static MS_U32 _HAL_TSP_Get_PktCnt(TSP_DEBUG_MODE u16Mode, TSP_DEBUG_SRC TspSrc, TSP_DEBUG_FIFO TspFifo)
3320*53ee8cc1Swenshuai.xi {
3321*53ee8cc1Swenshuai.xi     REG16* pReg = NULL;
3322*53ee8cc1Swenshuai.xi     MS_U16 u16Mask = 0;
3323*53ee8cc1Swenshuai.xi     MS_U16 u16Shft = 0;
3324*53ee8cc1Swenshuai.xi     MS_U16 u16Cfg  = 0;
3325*53ee8cc1Swenshuai.xi 
3326*53ee8cc1Swenshuai.xi     switch (TspSrc)
3327*53ee8cc1Swenshuai.xi     {
3328*53ee8cc1Swenshuai.xi         case TSP_DEBUG_SRC_TS0: // TS0
3329*53ee8cc1Swenshuai.xi             pReg = &(_TspCtrl2[0].PktCnt_TS0);
3330*53ee8cc1Swenshuai.xi             break;
3331*53ee8cc1Swenshuai.xi         case TSP_DEBUG_SRC_TS1: // TS1
3332*53ee8cc1Swenshuai.xi             pReg = &(_TspCtrl2[0].PktCnt_TS1);
3333*53ee8cc1Swenshuai.xi             break;
3334*53ee8cc1Swenshuai.xi         case TSP_DEBUG_SRC_FILE: // FILE
3335*53ee8cc1Swenshuai.xi             pReg = &(_TspCtrl2[0].PktCnt_File);
3336*53ee8cc1Swenshuai.xi             break;
3337*53ee8cc1Swenshuai.xi         default:
3338*53ee8cc1Swenshuai.xi             return 0;
3339*53ee8cc1Swenshuai.xi     }
3340*53ee8cc1Swenshuai.xi 
3341*53ee8cc1Swenshuai.xi     switch (TspFifo)
3342*53ee8cc1Swenshuai.xi     {
3343*53ee8cc1Swenshuai.xi         case TSP_DEBUG_FIFO_VIDEO: // VIDEO
3344*53ee8cc1Swenshuai.xi             u16Mask = DISCONTI_CNT_VIDEO_MASK;
3345*53ee8cc1Swenshuai.xi             u16Shft = DISCONTI_CNT_VIDEO_SHFT;
3346*53ee8cc1Swenshuai.xi             u16Cfg = (u16Mode == TSP_DEBUG_MODE_DIS_CONT) ? TSP_HW_CFG_0 : TSP_HW_CFG_2;  // discontinuous packet count : drop packet count
3347*53ee8cc1Swenshuai.xi             break;
3348*53ee8cc1Swenshuai.xi         case TSP_DEBUG_FIFO_AUDIO: // AUDIO
3349*53ee8cc1Swenshuai.xi             u16Mask = DISCONTI_CNT_AUDIO_MASK;
3350*53ee8cc1Swenshuai.xi             u16Shft = DISCONTI_CNT_AUDIO_SHFT;
3351*53ee8cc1Swenshuai.xi             u16Cfg = (u16Mode == TSP_DEBUG_MODE_DIS_CONT) ? TSP_HW_CFG_0 : TSP_HW_CFG_2;
3352*53ee8cc1Swenshuai.xi             break;
3353*53ee8cc1Swenshuai.xi         case TSP_DEBUG_FIFO_VIDEO3D: // VIDEO3D
3354*53ee8cc1Swenshuai.xi             u16Mask = DISCONTI_CNT_V3D_MASK;
3355*53ee8cc1Swenshuai.xi             u16Shft = DISCONTI_CNT_V3D_SHFT;
3356*53ee8cc1Swenshuai.xi             u16Cfg = (u16Mode == TSP_DEBUG_MODE_DIS_CONT) ? TSP_HW_CFG_0 : TSP_HW_CFG_2;
3357*53ee8cc1Swenshuai.xi             break;
3358*53ee8cc1Swenshuai.xi         default:
3359*53ee8cc1Swenshuai.xi             return 0;
3360*53ee8cc1Swenshuai.xi     }
3361*53ee8cc1Swenshuai.xi 
3362*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TspCtrl2[0].HwCfg1),
3363*53ee8cc1Swenshuai.xi         (_HAL_REG16_R(&(_TspCtrl2[0].HwCfg1)) & ~HW_INFO_SRC_MODE_MASK) | u16Cfg);
3364*53ee8cc1Swenshuai.xi 
3365*53ee8cc1Swenshuai.xi     return (MS_U32)(_HAL_REG16_R(pReg) & u16Mask) >> u16Shft;
3366*53ee8cc1Swenshuai.xi }
3367*53ee8cc1Swenshuai.xi 
3368*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------
3369*53ee8cc1Swenshuai.xi // @ u16Src : TBD
3370*53ee8cc1Swenshuai.xi // @ u16Fifo : TBD
3371*53ee8cc1Swenshuai.xi // @ return value : 0 ~ 15
3372*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------
HAL_TSP_Get_DisContiCnt(TSP_DisconPktCnt_Info * TspDisconPktCntInfo)3373*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_Get_DisContiCnt(TSP_DisconPktCnt_Info* TspDisconPktCntInfo)
3374*53ee8cc1Swenshuai.xi {
3375*53ee8cc1Swenshuai.xi     if(TspDisconPktCntInfo->TspCmd == TSP_DEBUG_CMD_CLEAR)
3376*53ee8cc1Swenshuai.xi     {
3377*53ee8cc1Swenshuai.xi         // Set the clear source
3378*53ee8cc1Swenshuai.xi         if(TspDisconPktCntInfo->TspSrc == TSP_DEBUG_SRC_TS0)
3379*53ee8cc1Swenshuai.xi         {
3380*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&(_TspCtrl[0].DbgInfo_Ctrl1),
3381*53ee8cc1Swenshuai.xi                 (_HAL_REG32_R(&(_TspCtrl[0].DbgInfo_Ctrl1)) & ~TSP_CLR_SRC_MASK) | (TSP_CLR_SRC_PIDFLT_0<<TSP_CLR_SRC_SHIFT));
3382*53ee8cc1Swenshuai.xi         }
3383*53ee8cc1Swenshuai.xi         else if(TspDisconPktCntInfo->TspSrc == TSP_DEBUG_SRC_FILE)
3384*53ee8cc1Swenshuai.xi         {
3385*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&(_TspCtrl[0].DbgInfo_Ctrl1),
3386*53ee8cc1Swenshuai.xi                 (_HAL_REG32_R(&(_TspCtrl[0].DbgInfo_Ctrl1)) & ~TSP_CLR_SRC_MASK) | (TSP_CLR_SRC_PIDFLT_FILE<<TSP_CLR_SRC_SHIFT));
3387*53ee8cc1Swenshuai.xi         }
3388*53ee8cc1Swenshuai.xi 
3389*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&(_TspCtrl[0].DbgInfo_Ctrl1),
3390*53ee8cc1Swenshuai.xi             _HAL_REG32_R(&(_TspCtrl[0].DbgInfo_Ctrl1)) | (TSP_DISCONTI_VD_CLR | TSP_DISCONTI_V3D_CLR | TSP_DISCONTI_AUD_CLR|TSP_DISCONTI_AUDB_CLR));
3391*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&(_TspCtrl[0].DbgInfo_Ctrl1),
3392*53ee8cc1Swenshuai.xi             _HAL_REG32_R(&(_TspCtrl[0].DbgInfo_Ctrl1)) & ~(TSP_DISCONTI_VD_CLR | TSP_DISCONTI_V3D_CLR | TSP_DISCONTI_AUD_CLR|TSP_DISCONTI_AUDB_CLR));
3393*53ee8cc1Swenshuai.xi     }
3394*53ee8cc1Swenshuai.xi     return _HAL_TSP_Get_PktCnt(TSP_DEBUG_MODE_DIS_CONT, TspDisconPktCntInfo->TspSrc, TspDisconPktCntInfo->TspFifo);
3395*53ee8cc1Swenshuai.xi }
3396*53ee8cc1Swenshuai.xi 
3397*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------
3398*53ee8cc1Swenshuai.xi // @ u16Src : TBD
3399*53ee8cc1Swenshuai.xi // @ u16Fifo : TBD
3400*53ee8cc1Swenshuai.xi // @ return value : 0 ~ 15
3401*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------
HAL_TSP_Get_DropPktCnt(TSP_DropPktCnt_Info * TspDropCntInfo)3402*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_Get_DropPktCnt(TSP_DropPktCnt_Info* TspDropCntInfo)
3403*53ee8cc1Swenshuai.xi {
3404*53ee8cc1Swenshuai.xi     if(TspDropCntInfo->TspCmd == TSP_DEBUG_CMD_CLEAR)
3405*53ee8cc1Swenshuai.xi     {
3406*53ee8cc1Swenshuai.xi         // Set the clear source
3407*53ee8cc1Swenshuai.xi         if(TspDropCntInfo->TspSrc == TSP_DEBUG_SRC_TS0)
3408*53ee8cc1Swenshuai.xi         {
3409*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&(_TspCtrl[0].DbgInfo_Ctrl1),
3410*53ee8cc1Swenshuai.xi                 (_HAL_REG32_R(&(_TspCtrl[0].DbgInfo_Ctrl1)) & ~TSP_CLR_SRC_MASK) | (TSP_CLR_SRC_PIDFLT_0<<TSP_CLR_SRC_SHIFT));
3411*53ee8cc1Swenshuai.xi         }
3412*53ee8cc1Swenshuai.xi         else if(TspDropCntInfo->TspSrc == TSP_DEBUG_SRC_FILE)
3413*53ee8cc1Swenshuai.xi         {
3414*53ee8cc1Swenshuai.xi             _HAL_REG32_W(&(_TspCtrl[0].DbgInfo_Ctrl1),
3415*53ee8cc1Swenshuai.xi                 (_HAL_REG32_R(&(_TspCtrl[0].DbgInfo_Ctrl1)) & ~TSP_CLR_SRC_MASK) | (TSP_CLR_SRC_PIDFLT_FILE<<TSP_CLR_SRC_SHIFT));
3416*53ee8cc1Swenshuai.xi         }
3417*53ee8cc1Swenshuai.xi 
3418*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&(_TspCtrl[0].DbgInfo_Ctrl1),
3419*53ee8cc1Swenshuai.xi             _HAL_REG32_R(&(_TspCtrl[0].DbgInfo_Ctrl1)) | (TSP_DUP_PKT_CNT_CLR));
3420*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&(_TspCtrl[0].DbgInfo_Ctrl1),
3421*53ee8cc1Swenshuai.xi             _HAL_REG32_R(&(_TspCtrl[0].DbgInfo_Ctrl1)) & ~(TSP_DUP_PKT_CNT_CLR));
3422*53ee8cc1Swenshuai.xi     }
3423*53ee8cc1Swenshuai.xi     return _HAL_TSP_Get_PktCnt(TSP_DEBUG_MODE_DROP_CONT, TspDropCntInfo->TspSrc, TspDropCntInfo->TspFifo);
3424*53ee8cc1Swenshuai.xi }
3425*53ee8cc1Swenshuai.xi 
3426*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------
3427*53ee8cc1Swenshuai.xi // @u16Tsif : TBD
3428*53ee8cc1Swenshuai.xi // @ return value : 0 ~ 15
3429*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------
HAL_TSP_Get_LockPktCnt(TSP_LockPktCnt_info * TspLockCntInfo)3430*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_Get_LockPktCnt(TSP_LockPktCnt_info* TspLockCntInfo)
3431*53ee8cc1Swenshuai.xi {
3432*53ee8cc1Swenshuai.xi     if(TspLockCntInfo->TspCmd == TSP_DEBUG_CMD_CLEAR)
3433*53ee8cc1Swenshuai.xi     {
3434*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&(_TspCtrl[0].DbgInfo_Ctrl),
3435*53ee8cc1Swenshuai.xi             _HAL_REG32_R(&(_TspCtrl[0].DbgInfo_Ctrl)) | (TSP_CLR_LOCKED_PKT_CNT));
3436*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&(_TspCtrl[0].DbgInfo_Ctrl),
3437*53ee8cc1Swenshuai.xi             _HAL_REG32_R(&(_TspCtrl[0].DbgInfo_Ctrl)) & ~(TSP_CLR_LOCKED_PKT_CNT));
3438*53ee8cc1Swenshuai.xi     }
3439*53ee8cc1Swenshuai.xi     else if(TspLockCntInfo->TspCmd == TSP_DEBUG_CMD_ENABLE)
3440*53ee8cc1Swenshuai.xi     {
3441*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&(_TspCtrl[0].DbgInfo_Ctrl),
3442*53ee8cc1Swenshuai.xi             _HAL_REG32_R(&(_TspCtrl[0].DbgInfo_Ctrl)) & ~(TSP_DIS_LOCKED_PKT_CNT));
3443*53ee8cc1Swenshuai.xi     }
3444*53ee8cc1Swenshuai.xi     else if(TspLockCntInfo->TspCmd == TSP_DEBUG_CMD_DISABLE)
3445*53ee8cc1Swenshuai.xi     {
3446*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&(_TspCtrl[0].DbgInfo_Ctrl),
3447*53ee8cc1Swenshuai.xi             _HAL_REG32_R(&(_TspCtrl[0].DbgInfo_Ctrl)) | (TSP_DIS_LOCKED_PKT_CNT));
3448*53ee8cc1Swenshuai.xi     }
3449*53ee8cc1Swenshuai.xi 
3450*53ee8cc1Swenshuai.xi     switch (TspLockCntInfo->TspTsif)
3451*53ee8cc1Swenshuai.xi     {
3452*53ee8cc1Swenshuai.xi         case TSP_DEBUG_TSIF0: // TS0
3453*53ee8cc1Swenshuai.xi             return (MS_U32)(_HAL_REG16_R(&(_TspCtrl2[0].LockPktCnt)) & TS0_LOCK_CNT_MASK) >> TS0_LOCK_CNT_SHFT;
3454*53ee8cc1Swenshuai.xi         case TSP_DEBUG_TSIF1: // TS1
3455*53ee8cc1Swenshuai.xi             return (MS_U32)(_HAL_REG16_R(&(_TspCtrl2[0].LockPktCnt)) & TS1_LOCK_CNT_MASK) >> TS1_LOCK_CNT_SHFT;
3456*53ee8cc1Swenshuai.xi         default:
3457*53ee8cc1Swenshuai.xi             return 0;
3458*53ee8cc1Swenshuai.xi     }
3459*53ee8cc1Swenshuai.xi }
3460*53ee8cc1Swenshuai.xi 
3461*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------
3462*53ee8cc1Swenshuai.xi // @ u16Fifo : TBD
3463*53ee8cc1Swenshuai.xi // @ return value : 0 ~ 15
3464*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------
HAL_TSP_GetAVPktCnt(TSP_AVPktCnt_info * TspAVCntInfo)3465*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_GetAVPktCnt(TSP_AVPktCnt_info* TspAVCntInfo)
3466*53ee8cc1Swenshuai.xi {
3467*53ee8cc1Swenshuai.xi     if(TspAVCntInfo->TspCmd == TSP_DEBUG_CMD_CLEAR)
3468*53ee8cc1Swenshuai.xi     {
3469*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&(_TspCtrl[0].DbgInfo_Ctrl),
3470*53ee8cc1Swenshuai.xi             _HAL_REG32_R(&(_TspCtrl[0].DbgInfo_Ctrl)) | (TSP_CLR_AV_PKT_CNT));
3471*53ee8cc1Swenshuai.xi         _HAL_REG32_W(&(_TspCtrl[0].DbgInfo_Ctrl),
3472*53ee8cc1Swenshuai.xi             _HAL_REG32_R(&(_TspCtrl[0].DbgInfo_Ctrl)) & ~(TSP_CLR_AV_PKT_CNT));
3473*53ee8cc1Swenshuai.xi     }
3474*53ee8cc1Swenshuai.xi 
3475*53ee8cc1Swenshuai.xi     switch (TspAVCntInfo->TspFifo)
3476*53ee8cc1Swenshuai.xi     {
3477*53ee8cc1Swenshuai.xi         case TSP_DEBUG_FIFO_VIDEO: // VIDEO
3478*53ee8cc1Swenshuai.xi             return (MS_U32)(_HAL_REG16_R(&(_TspCtrl2[0].AVPktCnt)) & VIDEO_PKT_CNT_MASK) >> VIDEO_PKT_CNT_SHFT;
3479*53ee8cc1Swenshuai.xi         case TSP_DEBUG_FIFO_AUDIO: // AUDIO
3480*53ee8cc1Swenshuai.xi             return (MS_U32)(_HAL_REG16_R(&(_TspCtrl2[0].AVPktCnt)) & AUDIO_PKT_CNT_MASK) >> AUDIO_PKT_CNT_SHFT;
3481*53ee8cc1Swenshuai.xi         default:
3482*53ee8cc1Swenshuai.xi             return 0;
3483*53ee8cc1Swenshuai.xi     }
3484*53ee8cc1Swenshuai.xi }
3485*53ee8cc1Swenshuai.xi 
3486*53ee8cc1Swenshuai.xi 
HAL_TSP_Get_SecTEI_PktCount(MS_U32 u32PktSrc)3487*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_Get_SecTEI_PktCount(MS_U32 u32PktSrc)
3488*53ee8cc1Swenshuai.xi {
3489*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, TSP_MCU_CMD_TEI_COUNT_GET | u32PktSrc);
3490*53ee8cc1Swenshuai.xi     while (0 != _HAL_REG32_R(&_TspCtrl[0].MCU_Cmd));
3491*53ee8cc1Swenshuai.xi     return (_HAL_REG32_R(&_TspCtrl[0].MCU_Data0));
3492*53ee8cc1Swenshuai.xi }
3493*53ee8cc1Swenshuai.xi 
HAL_TSP_Reset_SecTEI_PktCount(MS_U32 u32PktSrc)3494*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_Reset_SecTEI_PktCount(MS_U32 u32PktSrc)
3495*53ee8cc1Swenshuai.xi {
3496*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, TSP_MCU_CMD_TEI_COUNT_GET | TSP_MCU_CMD_TEI_COUNT_OPTION_RESET | u32PktSrc);
3497*53ee8cc1Swenshuai.xi     while (0 != _HAL_REG32_R(&_TspCtrl[0].MCU_Cmd));
3498*53ee8cc1Swenshuai.xi     return TRUE;
3499*53ee8cc1Swenshuai.xi }
3500*53ee8cc1Swenshuai.xi 
HAL_TSP_Get_SecDisCont_PktCount(MS_U32 u32FltId)3501*53ee8cc1Swenshuai.xi MS_U32 HAL_TSP_Get_SecDisCont_PktCount(MS_U32 u32FltId)
3502*53ee8cc1Swenshuai.xi {
3503*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, TSP_MCU_CMD_DISCONT_COUNT_GET | u32FltId);
3504*53ee8cc1Swenshuai.xi     while (0 != _HAL_REG32_R(&_TspCtrl[0].MCU_Cmd));
3505*53ee8cc1Swenshuai.xi     return (_HAL_REG32_R(&_TspCtrl[0].MCU_Data0));
3506*53ee8cc1Swenshuai.xi }
3507*53ee8cc1Swenshuai.xi 
HAL_TSP_Reset_SecDisCont_PktCount(MS_U32 u32FltId)3508*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_Reset_SecDisCont_PktCount(MS_U32 u32FltId)
3509*53ee8cc1Swenshuai.xi {
3510*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&_TspCtrl[0].MCU_Cmd, TSP_MCU_CMD_DISCONT_COUNT_GET | TSP_MCU_CMD_DISCONT_COUNT_OPTION_RESET | u32FltId);
3511*53ee8cc1Swenshuai.xi     while (0 != _HAL_REG32_R(&_TspCtrl[0].MCU_Cmd));
3512*53ee8cc1Swenshuai.xi     return TRUE;
3513*53ee8cc1Swenshuai.xi }
3514*53ee8cc1Swenshuai.xi 
HAL_TSP_SetPacketMode(MS_U32 u32TSIf,MS_U32 u32PktMode)3515*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_SetPacketMode(MS_U32 u32TSIf, MS_U32 u32PktMode)
3516*53ee8cc1Swenshuai.xi {
3517*53ee8cc1Swenshuai.xi     return FALSE;
3518*53ee8cc1Swenshuai.xi }
3519*53ee8cc1Swenshuai.xi 
HAL_TSP_SetMergeStrSyncByte(MS_U32 u32SrcID,MS_U8 u8SyncByte)3520*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSP_SetMergeStrSyncByte(MS_U32 u32SrcID, MS_U8 u8SyncByte)
3521*53ee8cc1Swenshuai.xi {
3522*53ee8cc1Swenshuai.xi     return FALSE;
3523*53ee8cc1Swenshuai.xi }
3524*53ee8cc1Swenshuai.xi 
HAL_TSP_MOBF_Set_PVRKey_EX(MS_U32 u32PvrEng,MS_U32 u32Key0,MS_U32 u32Key1)3525*53ee8cc1Swenshuai.xi void HAL_TSP_MOBF_Set_PVRKey_EX(MS_U32 u32PvrEng, MS_U32 u32Key0, MS_U32 u32Key1)
3526*53ee8cc1Swenshuai.xi {
3527*53ee8cc1Swenshuai.xi     return;
3528*53ee8cc1Swenshuai.xi }
3529*53ee8cc1Swenshuai.xi 
3530