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