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