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