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