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