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