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