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