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