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