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