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