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