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