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