xref: /utopia/UTPA2-700.0.x/modules/dmx/hal/k6/tsio/halTSIO.c (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
2*53ee8cc1Swenshuai.xi //
3*53ee8cc1Swenshuai.xi // Copyright (c) 2011-2013 MStar Semiconductor, Inc.
4*53ee8cc1Swenshuai.xi // All rights reserved.
5*53ee8cc1Swenshuai.xi //
6*53ee8cc1Swenshuai.xi // Unless otherwise stipulated in writing, any and all information contained
7*53ee8cc1Swenshuai.xi // herein regardless in any format shall remain the sole proprietary of
8*53ee8cc1Swenshuai.xi // MStar Semiconductor Inc. and be kept in strict confidence
9*53ee8cc1Swenshuai.xi // ("MStar Confidential Information") by the recipient.
10*53ee8cc1Swenshuai.xi // Any unauthorized act including without limitation unauthorized disclosure,
11*53ee8cc1Swenshuai.xi // copying, use, reproduction, sale, distribution, modification, disassembling,
12*53ee8cc1Swenshuai.xi // reverse engineering and compiling of the contents of MStar Confidential
13*53ee8cc1Swenshuai.xi // Information is unlawful and strictly prohibited. MStar hereby reserves the
14*53ee8cc1Swenshuai.xi // rights to any and all damages, losses, costs and expenses resulting therefrom.
15*53ee8cc1Swenshuai.xi //
16*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
17*53ee8cc1Swenshuai.xi 
18*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////////////////////////
19*53ee8cc1Swenshuai.xi // file   halTSIO.c
20*53ee8cc1Swenshuai.xi // @brief  TS I/O HAL
21*53ee8cc1Swenshuai.xi // @author MStar Semiconductor,Inc.
22*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////////////////////////
23*53ee8cc1Swenshuai.xi #include "MsCommon.h"
24*53ee8cc1Swenshuai.xi #include "regTSIO.h"
25*53ee8cc1Swenshuai.xi #include "halTSIO.h"
26*53ee8cc1Swenshuai.xi 
27*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
28*53ee8cc1Swenshuai.xi //  Driver Compiler Option
29*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
30*53ee8cc1Swenshuai.xi 
31*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
32*53ee8cc1Swenshuai.xi //  TSP Hardware Abstraction Layer
33*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
34*53ee8cc1Swenshuai.xi static REG_Ctrl_TSIO0* _TSIOCtrl0 = NULL;
35*53ee8cc1Swenshuai.xi static REG_Ctrl_TSIO1* _TSIOCtrl1 = NULL;
36*53ee8cc1Swenshuai.xi static REG_Ctrl_TSIO2* _TSIOCtrl2 = NULL;
37*53ee8cc1Swenshuai.xi static REG_Ctrl_TSIO3* _TSIOCtrl3 = NULL;
38*53ee8cc1Swenshuai.xi static REG_Ctrl_TSIO_LOCDEC* _TSIOCtrlLOCDEC = NULL;
39*53ee8cc1Swenshuai.xi static REG_Ctrl_TSO0* _TSOCtrl0 = NULL;
40*53ee8cc1Swenshuai.xi static REG_Ctrl_TSO2* _TSOCtrl2 = NULL;
41*53ee8cc1Swenshuai.xi static REG_Ctrl_TSO3* _TSOCtrl3 = NULL;
42*53ee8cc1Swenshuai.xi static REG_Ctrl_CHIPTOP* _TSIOCHIPTOP = NULL;
43*53ee8cc1Swenshuai.xi static REG_Ctrl_CLOCKGEN0* _TSIO_CLKGEN0 = NULL;
44*53ee8cc1Swenshuai.xi static REG_Ctrl_TSIO_PHY* _TSIOCtrlPHY = NULL;
45*53ee8cc1Swenshuai.xi static REG_Ctrl_TSP8* _TSPCtrl8 = NULL;
46*53ee8cc1Swenshuai.xi static REG_Ctrl_STRLD* _TSIO_STRLD = NULL;
47*53ee8cc1Swenshuai.xi 
48*53ee8cc1Swenshuai.xi static MS_VIRT   _u32TSIORegBase = 0;
49*53ee8cc1Swenshuai.xi 
50*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
51*53ee8cc1Swenshuai.xi //  Debug Message
52*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
53*53ee8cc1Swenshuai.xi #define HAL_TSIO_DBGMSG(_level,_f) do {if(_u32TSIODbgLevel >= (_level)) (_f);} while(0)
54*53ee8cc1Swenshuai.xi static MS_U32  _u32TSIODbgLevel = E_HAL_TSIO_DBG_LEVEL_WARN;
55*53ee8cc1Swenshuai.xi 
56*53ee8cc1Swenshuai.xi 
57*53ee8cc1Swenshuai.xi #define _HAL_REG32_W(reg, value)    do { (reg)->L = ((value) & 0x0000FFFF);             \
58*53ee8cc1Swenshuai.xi                                          (reg)->H = ((value) >> 16); } while(0)
59*53ee8cc1Swenshuai.xi 
60*53ee8cc1Swenshuai.xi #define _HAL_REG16_W(reg, value)    { (reg)->data = (MS_U16)((value) & 0xFFFF); }
61*53ee8cc1Swenshuai.xi 
62*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
63*53ee8cc1Swenshuai.xi //  Macro of bit operations
64*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
65*53ee8cc1Swenshuai.xi #define HAS_FLAG(flag, bit)        ((flag) & (bit))
66*53ee8cc1Swenshuai.xi #define SET_FLAG(flag, bit)        ((flag)|= (bit))
67*53ee8cc1Swenshuai.xi #define RESET_FLAG(flag, bit)      ((flag)&= (~(bit)))
68*53ee8cc1Swenshuai.xi #define SET_FLAG1(flag, bit)       ((flag)|  (bit))
69*53ee8cc1Swenshuai.xi #define RESET_FLAG1(flag, bit)     ((flag)&  (~(bit)))
70*53ee8cc1Swenshuai.xi 
71*53ee8cc1Swenshuai.xi 
72*53ee8cc1Swenshuai.xi #define _REG16_SET(reg, value);    _HAL_REG16_W(reg, SET_FLAG1(_HAL_REG16_R(reg), value));
73*53ee8cc1Swenshuai.xi #define _REG32_SET(reg, value);    _HAL_REG32_W(reg, SET_FLAG1(_HAL_REG32_R(reg), value));
74*53ee8cc1Swenshuai.xi #define _REG16_CLR(reg, value);    _HAL_REG16_W(reg, RESET_FLAG1(_HAL_REG16_R(reg), value));
75*53ee8cc1Swenshuai.xi #define _REG32_CLR(reg, value);    _HAL_REG32_W(reg, RESET_FLAG1(_HAL_REG32_R(reg), value));
76*53ee8cc1Swenshuai.xi #define _REG16_SET_MASK(reg, value, mask, shift); _HAL_REG16_W(reg, (_HAL_REG16_R(reg)& ~mask) | ((value << shift) & mask));
77*53ee8cc1Swenshuai.xi #define _REG32_SET_MASK(reg, value, mask, shift); _HAL_REG32_W(reg, (_HAL_REG32_R(reg)& ~mask) | ((value << shift) & mask));
78*53ee8cc1Swenshuai.xi #define _TSIO_SGDMAIN_PIDFLT_ADDR(FltId)  (REG_SGDMAIN_PIDFLT_BASE + ((FltId) << 2))
79*53ee8cc1Swenshuai.xi 
80*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
81*53ee8cc1Swenshuai.xi //  Analog phase table
82*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
83*53ee8cc1Swenshuai.xi typedef struct
84*53ee8cc1Swenshuai.xi {
85*53ee8cc1Swenshuai.xi     MS_U8 u8Phase_Digital;
86*53ee8cc1Swenshuai.xi     MS_U8 u8Delay1T;
87*53ee8cc1Swenshuai.xi     MS_U8 u8Corse;
88*53ee8cc1Swenshuai.xi     MS_U8 u8Fine;
89*53ee8cc1Swenshuai.xi }ANALOG_PHASE_SETTING;
90*53ee8cc1Swenshuai.xi 
91*53ee8cc1Swenshuai.xi static MS_U8 u8Phasetable = 0;
92*53ee8cc1Swenshuai.xi 
93*53ee8cc1Swenshuai.xi #if 1 //new
94*53ee8cc1Swenshuai.xi ANALOG_PHASE_SETTING SETTING[ANALOG_PHASE_TABLE][ANALOG_PHASE_NUM] =
95*53ee8cc1Swenshuai.xi {
96*53ee8cc1Swenshuai.xi     //200M
97*53ee8cc1Swenshuai.xi     {
98*53ee8cc1Swenshuai.xi     { 0, 0, 0, 0},
99*53ee8cc1Swenshuai.xi     { 1, 0, 0, 4},
100*53ee8cc1Swenshuai.xi     { 2, 0, 0, 4},
101*53ee8cc1Swenshuai.xi     { 3, 0, 0, 4},
102*53ee8cc1Swenshuai.xi     { 4, 0, 1, 0},
103*53ee8cc1Swenshuai.xi     { 5, 0, 1, 0},
104*53ee8cc1Swenshuai.xi     { 6, 0, 1, 4},
105*53ee8cc1Swenshuai.xi     { 7, 0, 1, 4},
106*53ee8cc1Swenshuai.xi     { 8, 0, 1, 4},
107*53ee8cc1Swenshuai.xi     { 9, 0, 2, 0},
108*53ee8cc1Swenshuai.xi     {10, 0, 2, 0},
109*53ee8cc1Swenshuai.xi     {11, 0, 2, 4},
110*53ee8cc1Swenshuai.xi     {12, 0, 2, 4},
111*53ee8cc1Swenshuai.xi     {13, 0, 2, 4},
112*53ee8cc1Swenshuai.xi     {14, 0, 3, 0},
113*53ee8cc1Swenshuai.xi     {15, 0, 3, 0},
114*53ee8cc1Swenshuai.xi     {16, 0, 3, 4},
115*53ee8cc1Swenshuai.xi     {17, 0, 3, 4},
116*53ee8cc1Swenshuai.xi     {18, 0, 3, 4},
117*53ee8cc1Swenshuai.xi     {19, 1, 0, 0},
118*53ee8cc1Swenshuai.xi     {20, 1, 0, 0},
119*53ee8cc1Swenshuai.xi     {21, 1, 0, 4},
120*53ee8cc1Swenshuai.xi     {22, 1, 0, 4},
121*53ee8cc1Swenshuai.xi     {23, 1, 0, 4},
122*53ee8cc1Swenshuai.xi     {24, 1, 1, 0},
123*53ee8cc1Swenshuai.xi     {25, 1, 1, 0},
124*53ee8cc1Swenshuai.xi     {26, 1, 1, 4},
125*53ee8cc1Swenshuai.xi     {27, 1, 1, 4},
126*53ee8cc1Swenshuai.xi     {28, 1, 1, 4},
127*53ee8cc1Swenshuai.xi     {29, 1, 2, 0},
128*53ee8cc1Swenshuai.xi     {30, 1, 2, 0},
129*53ee8cc1Swenshuai.xi     {31, 1, 2, 4},
130*53ee8cc1Swenshuai.xi     {32, 1, 2, 4},
131*53ee8cc1Swenshuai.xi     {33, 1, 2, 4},
132*53ee8cc1Swenshuai.xi     {34, 1, 3, 0},
133*53ee8cc1Swenshuai.xi     {35, 1, 3, 0},
134*53ee8cc1Swenshuai.xi     {36, 1, 3, 4},
135*53ee8cc1Swenshuai.xi     {37, 1, 3, 4},
136*53ee8cc1Swenshuai.xi     {38, 1, 3, 4},
137*53ee8cc1Swenshuai.xi     {39, 0, 0, 0},
138*53ee8cc1Swenshuai.xi     },
139*53ee8cc1Swenshuai.xi 
140*53ee8cc1Swenshuai.xi     //100M
141*53ee8cc1Swenshuai.xi     {
142*53ee8cc1Swenshuai.xi     { 0, 0, 0, 0},
143*53ee8cc1Swenshuai.xi     { 1, 0, 0, 4},
144*53ee8cc1Swenshuai.xi     { 2, 0, 0, 4},
145*53ee8cc1Swenshuai.xi     { 3, 0, 1, 4},
146*53ee8cc1Swenshuai.xi     { 4, 0, 2, 0},
147*53ee8cc1Swenshuai.xi     { 5, 0, 2, 0},
148*53ee8cc1Swenshuai.xi     { 6, 0, 2, 4},
149*53ee8cc1Swenshuai.xi     { 7, 0, 2, 4},
150*53ee8cc1Swenshuai.xi     { 8, 0, 3, 4},
151*53ee8cc1Swenshuai.xi     { 9, 0, 4, 0},
152*53ee8cc1Swenshuai.xi     {10, 0, 4, 0},
153*53ee8cc1Swenshuai.xi     {11, 0, 4, 4},
154*53ee8cc1Swenshuai.xi     {12, 0, 4, 4},
155*53ee8cc1Swenshuai.xi     {13, 0, 5, 4},
156*53ee8cc1Swenshuai.xi     {14, 0, 6, 0},
157*53ee8cc1Swenshuai.xi     {15, 0, 6, 0},
158*53ee8cc1Swenshuai.xi     {16, 0, 6, 4},
159*53ee8cc1Swenshuai.xi     {17, 0, 6, 4},
160*53ee8cc1Swenshuai.xi     {18, 0, 7, 4},
161*53ee8cc1Swenshuai.xi     {19, 1, 0, 0},
162*53ee8cc1Swenshuai.xi     {20, 1, 0, 0},
163*53ee8cc1Swenshuai.xi     {21, 1, 0, 4},
164*53ee8cc1Swenshuai.xi     {22, 1, 0, 4},
165*53ee8cc1Swenshuai.xi     {23, 1, 1, 4},
166*53ee8cc1Swenshuai.xi     {24, 1, 2, 0},
167*53ee8cc1Swenshuai.xi     {25, 1, 2, 0},
168*53ee8cc1Swenshuai.xi     {26, 1, 2, 4},
169*53ee8cc1Swenshuai.xi     {27, 1, 2, 4},
170*53ee8cc1Swenshuai.xi     {28, 1, 3, 4},
171*53ee8cc1Swenshuai.xi     {29, 1, 4, 0},
172*53ee8cc1Swenshuai.xi     {30, 1, 4, 0},
173*53ee8cc1Swenshuai.xi     {31, 1, 4, 4},
174*53ee8cc1Swenshuai.xi     {32, 1, 4, 4},
175*53ee8cc1Swenshuai.xi     {33, 1, 5, 4},
176*53ee8cc1Swenshuai.xi     {34, 1, 6, 0},
177*53ee8cc1Swenshuai.xi     {35, 1, 6, 0},
178*53ee8cc1Swenshuai.xi     {36, 1, 6, 4},
179*53ee8cc1Swenshuai.xi     {37, 1, 6, 4},
180*53ee8cc1Swenshuai.xi     {38, 1, 7, 4},
181*53ee8cc1Swenshuai.xi     {39, 0, 0, 0},
182*53ee8cc1Swenshuai.xi     },
183*53ee8cc1Swenshuai.xi     //50M
184*53ee8cc1Swenshuai.xi     {
185*53ee8cc1Swenshuai.xi     { 0, 0, 0, 0},
186*53ee8cc1Swenshuai.xi     { 1, 0, 1, 4},
187*53ee8cc1Swenshuai.xi     { 2, 0, 2, 4},
188*53ee8cc1Swenshuai.xi     { 3, 0, 3, 4},
189*53ee8cc1Swenshuai.xi     { 4, 0, 4, 0},
190*53ee8cc1Swenshuai.xi     { 5, 0, 4, 0},
191*53ee8cc1Swenshuai.xi     { 6, 0, 5, 4},
192*53ee8cc1Swenshuai.xi     { 7, 0, 6, 4},
193*53ee8cc1Swenshuai.xi     { 8, 0, 7, 4},
194*53ee8cc1Swenshuai.xi     { 9, 0, 8, 0},
195*53ee8cc1Swenshuai.xi     {10, 0, 8, 0},
196*53ee8cc1Swenshuai.xi     {11, 0, 9, 4},
197*53ee8cc1Swenshuai.xi     {12, 0, 10, 4},
198*53ee8cc1Swenshuai.xi     {13, 0, 11, 4},
199*53ee8cc1Swenshuai.xi     {14, 0, 12, 0},
200*53ee8cc1Swenshuai.xi     {15, 0, 12, 0},
201*53ee8cc1Swenshuai.xi     {16, 0, 13, 4},
202*53ee8cc1Swenshuai.xi     {17, 0, 14, 4},
203*53ee8cc1Swenshuai.xi     {18, 0, 15, 4},
204*53ee8cc1Swenshuai.xi     {19, 1, 0, 0},
205*53ee8cc1Swenshuai.xi     {20, 1, 0, 0},
206*53ee8cc1Swenshuai.xi     {21, 1, 1, 4},
207*53ee8cc1Swenshuai.xi     {22, 1, 2, 4},
208*53ee8cc1Swenshuai.xi     {23, 1, 3, 4},
209*53ee8cc1Swenshuai.xi     {24, 1, 4, 0},
210*53ee8cc1Swenshuai.xi     {25, 1, 4, 0},
211*53ee8cc1Swenshuai.xi     {26, 1, 5, 4},
212*53ee8cc1Swenshuai.xi     {27, 1, 6, 4},
213*53ee8cc1Swenshuai.xi     {28, 1, 7, 4},
214*53ee8cc1Swenshuai.xi     {29, 1, 8, 0},
215*53ee8cc1Swenshuai.xi     {30, 1, 8, 0},
216*53ee8cc1Swenshuai.xi     {31, 1, 9, 4},
217*53ee8cc1Swenshuai.xi     {32, 1, 10, 4},
218*53ee8cc1Swenshuai.xi     {33, 1, 11, 4},
219*53ee8cc1Swenshuai.xi     {34, 1, 12, 0},
220*53ee8cc1Swenshuai.xi     {35, 1, 12, 0},
221*53ee8cc1Swenshuai.xi     {36, 1, 13, 4},
222*53ee8cc1Swenshuai.xi     {37, 1, 14, 4},
223*53ee8cc1Swenshuai.xi     {38, 1, 15, 4},
224*53ee8cc1Swenshuai.xi     {39, 0, 0, 0},
225*53ee8cc1Swenshuai.xi     },
226*53ee8cc1Swenshuai.xi     //25M
227*53ee8cc1Swenshuai.xi     {
228*53ee8cc1Swenshuai.xi     { 0, 0, 0, 0},
229*53ee8cc1Swenshuai.xi     { 1, 0, 1, 4},
230*53ee8cc1Swenshuai.xi     { 2, 0, 3, 4},
231*53ee8cc1Swenshuai.xi     { 3, 0, 5, 4},
232*53ee8cc1Swenshuai.xi     { 4, 0, 8, 0},
233*53ee8cc1Swenshuai.xi     { 5, 0, 8, 0},
234*53ee8cc1Swenshuai.xi     { 6, 0, 9, 4},
235*53ee8cc1Swenshuai.xi     { 7, 0, 11, 4},
236*53ee8cc1Swenshuai.xi     { 8, 0, 13, 4},
237*53ee8cc1Swenshuai.xi     { 9, 0, 16, 0},
238*53ee8cc1Swenshuai.xi     {10, 0, 16, 0},
239*53ee8cc1Swenshuai.xi     {11, 0, 17, 4},
240*53ee8cc1Swenshuai.xi     {12, 0, 19, 4},
241*53ee8cc1Swenshuai.xi     {13, 0, 21, 4},
242*53ee8cc1Swenshuai.xi     {14, 0, 24, 0},
243*53ee8cc1Swenshuai.xi     {15, 0, 24, 0},
244*53ee8cc1Swenshuai.xi     {16, 0, 25, 4},
245*53ee8cc1Swenshuai.xi     {17, 0, 27, 4},
246*53ee8cc1Swenshuai.xi     {18, 0, 29, 4},
247*53ee8cc1Swenshuai.xi     {19, 1, 0, 0},
248*53ee8cc1Swenshuai.xi     {20, 1, 0, 0},
249*53ee8cc1Swenshuai.xi     {21, 1, 1, 4},
250*53ee8cc1Swenshuai.xi     {22, 1, 3, 4},
251*53ee8cc1Swenshuai.xi     {23, 1, 5, 4},
252*53ee8cc1Swenshuai.xi     {24, 1, 8, 0},
253*53ee8cc1Swenshuai.xi     {25, 1, 8, 0},
254*53ee8cc1Swenshuai.xi     {26, 1, 9, 4},
255*53ee8cc1Swenshuai.xi     {27, 1, 11, 4},
256*53ee8cc1Swenshuai.xi     {28, 1, 13, 4},
257*53ee8cc1Swenshuai.xi     {29, 1, 16, 0},
258*53ee8cc1Swenshuai.xi     {30, 1, 16, 0},
259*53ee8cc1Swenshuai.xi     {31, 1, 17, 4},
260*53ee8cc1Swenshuai.xi     {32, 1, 19, 4},
261*53ee8cc1Swenshuai.xi     {33, 1, 21, 4},
262*53ee8cc1Swenshuai.xi     {34, 1, 24, 0},
263*53ee8cc1Swenshuai.xi     {35, 1, 24, 0},
264*53ee8cc1Swenshuai.xi     {36, 1, 25, 4},
265*53ee8cc1Swenshuai.xi     {37, 1, 27, 4},
266*53ee8cc1Swenshuai.xi     {38, 1, 29, 4},
267*53ee8cc1Swenshuai.xi     {39, 0, 0, 0},
268*53ee8cc1Swenshuai.xi     },
269*53ee8cc1Swenshuai.xi };
270*53ee8cc1Swenshuai.xi #else
271*53ee8cc1Swenshuai.xi //old phase table
272*53ee8cc1Swenshuai.xi ANALOG_PHASE_SETTING SETTING[ANALOG_PHASE_TABLE][ANALOG_PHASE_NUM] =
273*53ee8cc1Swenshuai.xi {
274*53ee8cc1Swenshuai.xi     //200M
275*53ee8cc1Swenshuai.xi     {
276*53ee8cc1Swenshuai.xi     { 0, 0, 0, 0},
277*53ee8cc1Swenshuai.xi     { 1, 0, 0, 0},
278*53ee8cc1Swenshuai.xi     { 2, 0, 0, 5},
279*53ee8cc1Swenshuai.xi     { 3, 0, 0, 5},
280*53ee8cc1Swenshuai.xi     { 4, 0, 0, 7},
281*53ee8cc1Swenshuai.xi     { 5, 0, 1, 0},
282*53ee8cc1Swenshuai.xi     { 6, 0, 1, 0},
283*53ee8cc1Swenshuai.xi     { 7, 0, 1, 5},
284*53ee8cc1Swenshuai.xi     { 8, 0, 1, 5},
285*53ee8cc1Swenshuai.xi     { 9, 0, 1, 7},
286*53ee8cc1Swenshuai.xi     {10, 0, 2, 0},
287*53ee8cc1Swenshuai.xi     {11, 0, 2, 0},
288*53ee8cc1Swenshuai.xi     {12, 0, 2, 5},
289*53ee8cc1Swenshuai.xi     {13, 0, 2, 5},
290*53ee8cc1Swenshuai.xi     {14, 0, 2, 7},
291*53ee8cc1Swenshuai.xi     {15, 0, 3, 0},
292*53ee8cc1Swenshuai.xi     {16, 0, 3, 0},
293*53ee8cc1Swenshuai.xi     {17, 0, 3, 5},
294*53ee8cc1Swenshuai.xi     {18, 0, 3, 5},
295*53ee8cc1Swenshuai.xi     {19, 0, 3, 7},
296*53ee8cc1Swenshuai.xi     {20, 1, 0, 0},
297*53ee8cc1Swenshuai.xi     {21, 1, 0, 0},
298*53ee8cc1Swenshuai.xi     {22, 1, 0, 5},
299*53ee8cc1Swenshuai.xi     {23, 1, 0, 5},
300*53ee8cc1Swenshuai.xi     {24, 1, 0, 7},
301*53ee8cc1Swenshuai.xi     {25, 1, 1, 0},
302*53ee8cc1Swenshuai.xi     {26, 1, 1, 0},
303*53ee8cc1Swenshuai.xi     {27, 1, 1, 5},
304*53ee8cc1Swenshuai.xi     {28, 1, 1, 5},
305*53ee8cc1Swenshuai.xi     {29, 1, 1, 7},
306*53ee8cc1Swenshuai.xi     {30, 1, 2, 0},
307*53ee8cc1Swenshuai.xi     {31, 1, 2, 0},
308*53ee8cc1Swenshuai.xi     {32, 1, 2, 5},
309*53ee8cc1Swenshuai.xi     {33, 1, 2, 5},
310*53ee8cc1Swenshuai.xi     {34, 1, 2, 7},
311*53ee8cc1Swenshuai.xi     {35, 1, 3, 0},
312*53ee8cc1Swenshuai.xi     {36, 1, 3, 0},
313*53ee8cc1Swenshuai.xi     {37, 1, 3, 5},
314*53ee8cc1Swenshuai.xi     {38, 1, 3, 5},
315*53ee8cc1Swenshuai.xi     {39, 1, 3, 7},
316*53ee8cc1Swenshuai.xi     },
317*53ee8cc1Swenshuai.xi 
318*53ee8cc1Swenshuai.xi     //100M
319*53ee8cc1Swenshuai.xi     {
320*53ee8cc1Swenshuai.xi     { 0, 0, 0, 0},
321*53ee8cc1Swenshuai.xi     { 1, 0, 0, 5},
322*53ee8cc1Swenshuai.xi     { 2, 0, 0, 7},
323*53ee8cc1Swenshuai.xi     { 3, 0, 1, 0},
324*53ee8cc1Swenshuai.xi     { 4, 0, 1, 5},
325*53ee8cc1Swenshuai.xi     { 5, 0, 2, 0},
326*53ee8cc1Swenshuai.xi     { 6, 0, 2, 5},
327*53ee8cc1Swenshuai.xi     { 7, 0, 2, 7},
328*53ee8cc1Swenshuai.xi     { 8, 0, 3, 0},
329*53ee8cc1Swenshuai.xi     { 9, 0, 3, 5},
330*53ee8cc1Swenshuai.xi     {10, 0, 4, 0},
331*53ee8cc1Swenshuai.xi     {11, 0, 4, 5},
332*53ee8cc1Swenshuai.xi     {12, 0, 4, 7},
333*53ee8cc1Swenshuai.xi     {13, 0, 5, 0},
334*53ee8cc1Swenshuai.xi     {14, 0, 5, 5},
335*53ee8cc1Swenshuai.xi     {15, 0, 6, 0},
336*53ee8cc1Swenshuai.xi     {16, 0, 6, 5},
337*53ee8cc1Swenshuai.xi     {17, 0, 6, 7},
338*53ee8cc1Swenshuai.xi     {18, 0, 7, 0},
339*53ee8cc1Swenshuai.xi     {19, 0, 7, 5},
340*53ee8cc1Swenshuai.xi     {20, 1, 0, 0},
341*53ee8cc1Swenshuai.xi     {21, 1, 0, 5},
342*53ee8cc1Swenshuai.xi     {22, 1, 0, 7},
343*53ee8cc1Swenshuai.xi     {23, 1, 1, 0},
344*53ee8cc1Swenshuai.xi     {24, 1, 1, 5},
345*53ee8cc1Swenshuai.xi     {25, 1, 2, 0},
346*53ee8cc1Swenshuai.xi     {26, 1, 2, 5},
347*53ee8cc1Swenshuai.xi     {27, 1, 2, 7},
348*53ee8cc1Swenshuai.xi     {28, 1, 3, 0},
349*53ee8cc1Swenshuai.xi     {29, 1, 3, 5},
350*53ee8cc1Swenshuai.xi     {30, 1, 4, 0},
351*53ee8cc1Swenshuai.xi     {31, 1, 4, 5},
352*53ee8cc1Swenshuai.xi     {32, 1, 4, 7},
353*53ee8cc1Swenshuai.xi     {33, 1, 5, 0},
354*53ee8cc1Swenshuai.xi     {34, 1, 5, 5},
355*53ee8cc1Swenshuai.xi     {35, 1, 6, 0},
356*53ee8cc1Swenshuai.xi     {36, 1, 6, 5},
357*53ee8cc1Swenshuai.xi     {37, 1, 6, 7},
358*53ee8cc1Swenshuai.xi     {38, 1, 7, 0},
359*53ee8cc1Swenshuai.xi     {39, 1, 7, 5},
360*53ee8cc1Swenshuai.xi     },
361*53ee8cc1Swenshuai.xi     //50M
362*53ee8cc1Swenshuai.xi     {
363*53ee8cc1Swenshuai.xi     { 0, 0, 0, 0},
364*53ee8cc1Swenshuai.xi     { 1, 0, 0, 7},
365*53ee8cc1Swenshuai.xi     { 2, 0, 1, 5},
366*53ee8cc1Swenshuai.xi     { 3, 0, 2, 5},
367*53ee8cc1Swenshuai.xi     { 4, 0, 3, 5},
368*53ee8cc1Swenshuai.xi     { 5, 0, 4, 0},
369*53ee8cc1Swenshuai.xi     { 6, 0, 4, 7},
370*53ee8cc1Swenshuai.xi     { 7, 0, 5, 5},
371*53ee8cc1Swenshuai.xi     { 8, 0, 6, 5},
372*53ee8cc1Swenshuai.xi     { 9, 0, 7, 5},
373*53ee8cc1Swenshuai.xi     {10, 0, 8, 0},
374*53ee8cc1Swenshuai.xi     {11, 0, 8, 7},
375*53ee8cc1Swenshuai.xi     {12, 0, 9, 5},
376*53ee8cc1Swenshuai.xi     {13, 0, 10, 5},
377*53ee8cc1Swenshuai.xi     {14, 0, 11, 5},
378*53ee8cc1Swenshuai.xi     {15, 0, 12, 0},
379*53ee8cc1Swenshuai.xi     {16, 0, 12, 7},
380*53ee8cc1Swenshuai.xi     {17, 0, 13, 5},
381*53ee8cc1Swenshuai.xi     {18, 0, 14, 5},
382*53ee8cc1Swenshuai.xi     {19, 0, 15, 5},
383*53ee8cc1Swenshuai.xi     {20, 1, 0, 0},
384*53ee8cc1Swenshuai.xi     {21, 1, 0, 7},
385*53ee8cc1Swenshuai.xi     {22, 1, 1, 5},
386*53ee8cc1Swenshuai.xi     {23, 1, 2, 5},
387*53ee8cc1Swenshuai.xi     {24, 1, 3, 5},
388*53ee8cc1Swenshuai.xi     {25, 1, 4, 0},
389*53ee8cc1Swenshuai.xi     {26, 1, 4, 7},
390*53ee8cc1Swenshuai.xi     {27, 1, 5, 5},
391*53ee8cc1Swenshuai.xi     {28, 1, 6, 5},
392*53ee8cc1Swenshuai.xi     {29, 1, 7, 5},
393*53ee8cc1Swenshuai.xi     {30, 1, 8, 0},
394*53ee8cc1Swenshuai.xi     {31, 1, 8, 7},
395*53ee8cc1Swenshuai.xi     {32, 1, 9, 5},
396*53ee8cc1Swenshuai.xi     {33, 1, 10, 5},
397*53ee8cc1Swenshuai.xi     {34, 1, 11, 5},
398*53ee8cc1Swenshuai.xi     {35, 1, 12, 0},
399*53ee8cc1Swenshuai.xi     {36, 1, 12, 7},
400*53ee8cc1Swenshuai.xi     {37, 1, 13, 5},
401*53ee8cc1Swenshuai.xi     {38, 1, 14, 5},
402*53ee8cc1Swenshuai.xi     {39, 1, 15, 5},
403*53ee8cc1Swenshuai.xi     },
404*53ee8cc1Swenshuai.xi     //25M
405*53ee8cc1Swenshuai.xi     {
406*53ee8cc1Swenshuai.xi     { 0, 0, 0, 0},
407*53ee8cc1Swenshuai.xi     { 1, 0, 1, 7},
408*53ee8cc1Swenshuai.xi     { 2, 0, 3, 5},
409*53ee8cc1Swenshuai.xi     { 3, 0, 5, 0},
410*53ee8cc1Swenshuai.xi     { 4, 0, 6, 5},
411*53ee8cc1Swenshuai.xi     { 5, 0, 8, 0},
412*53ee8cc1Swenshuai.xi     { 6, 0, 9, 7},
413*53ee8cc1Swenshuai.xi     { 7, 0, 11, 5},
414*53ee8cc1Swenshuai.xi     { 8, 0, 13, 0},
415*53ee8cc1Swenshuai.xi     { 9, 0, 14, 5},
416*53ee8cc1Swenshuai.xi     {10, 0, 16, 0},
417*53ee8cc1Swenshuai.xi     {11, 0, 17, 7},
418*53ee8cc1Swenshuai.xi     {12, 0, 19, 5},
419*53ee8cc1Swenshuai.xi     {13, 0, 21, 0},
420*53ee8cc1Swenshuai.xi     {14, 0, 22, 5},
421*53ee8cc1Swenshuai.xi     {15, 0, 24, 0},
422*53ee8cc1Swenshuai.xi     {16, 0, 25, 7},
423*53ee8cc1Swenshuai.xi     {17, 0, 27, 5},
424*53ee8cc1Swenshuai.xi     {18, 0, 29, 0},
425*53ee8cc1Swenshuai.xi     {19, 0, 30, 5},
426*53ee8cc1Swenshuai.xi     {20, 1, 0, 0},
427*53ee8cc1Swenshuai.xi     {21, 1, 1, 7},
428*53ee8cc1Swenshuai.xi     {22, 1, 3, 5},
429*53ee8cc1Swenshuai.xi     {23, 1, 5, 0},
430*53ee8cc1Swenshuai.xi     {24, 1, 6, 5},
431*53ee8cc1Swenshuai.xi     {25, 1, 8, 0},
432*53ee8cc1Swenshuai.xi     {26, 1, 9, 7},
433*53ee8cc1Swenshuai.xi     {27, 1, 11, 5},
434*53ee8cc1Swenshuai.xi     {28, 1, 13, 0},
435*53ee8cc1Swenshuai.xi     {29, 1, 14, 5},
436*53ee8cc1Swenshuai.xi     {30, 1, 16, 0},
437*53ee8cc1Swenshuai.xi     {31, 1, 17, 7},
438*53ee8cc1Swenshuai.xi     {32, 1, 19, 5},
439*53ee8cc1Swenshuai.xi     {33, 1, 21, 0},
440*53ee8cc1Swenshuai.xi     {34, 1, 22, 5},
441*53ee8cc1Swenshuai.xi     {35, 1, 24, 0},
442*53ee8cc1Swenshuai.xi     {36, 1, 25, 7},
443*53ee8cc1Swenshuai.xi     {37, 1, 27, 5},
444*53ee8cc1Swenshuai.xi     {38, 1, 29, 0},
445*53ee8cc1Swenshuai.xi     {39, 1, 30, 5},
446*53ee8cc1Swenshuai.xi     },
447*53ee8cc1Swenshuai.xi };
448*53ee8cc1Swenshuai.xi #endif
449*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
450*53ee8cc1Swenshuai.xi //  Implementation
451*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
_HAL_REG32_R(REG32_TSIO * reg)452*53ee8cc1Swenshuai.xi static MS_U32 _HAL_REG32_R(REG32_TSIO *reg)
453*53ee8cc1Swenshuai.xi {
454*53ee8cc1Swenshuai.xi     MS_U32     value = 0;
455*53ee8cc1Swenshuai.xi     value  = (reg)->H << 16;
456*53ee8cc1Swenshuai.xi     value |= (reg)->L;
457*53ee8cc1Swenshuai.xi     return value;
458*53ee8cc1Swenshuai.xi }
459*53ee8cc1Swenshuai.xi 
_HAL_REG16_R(REG16_TSIO * reg)460*53ee8cc1Swenshuai.xi static MS_U16 _HAL_REG16_R(REG16_TSIO *reg)
461*53ee8cc1Swenshuai.xi {
462*53ee8cc1Swenshuai.xi     MS_U16              value = 0;
463*53ee8cc1Swenshuai.xi     value = (reg)->data;
464*53ee8cc1Swenshuai.xi     return value;
465*53ee8cc1Swenshuai.xi }
466*53ee8cc1Swenshuai.xi 
467*53ee8cc1Swenshuai.xi //=======================================================
468*53ee8cc1Swenshuai.xi // General API
469*53ee8cc1Swenshuai.xi //=======================================================
HAL_TSIO_SetBank(MS_VIRT u32BankAddr)470*53ee8cc1Swenshuai.xi void HAL_TSIO_SetBank(MS_VIRT u32BankAddr)
471*53ee8cc1Swenshuai.xi {
472*53ee8cc1Swenshuai.xi     _u32TSIORegBase = u32BankAddr;
473*53ee8cc1Swenshuai.xi     _TSIOCtrl0 = (REG_Ctrl_TSIO0*)(_u32TSIORegBase+ REG_CTRL_BASE_TSIO0);   // 0x171A
474*53ee8cc1Swenshuai.xi     _TSIOCtrl1 = (REG_Ctrl_TSIO1*)(_u32TSIORegBase+ REG_CTRL_BASE_TSIO1);   // 0x171B
475*53ee8cc1Swenshuai.xi     _TSIOCtrl2 = (REG_Ctrl_TSIO2*)(_u32TSIORegBase+ REG_CTRL_BASE_TSIO2);   // 0x171C
476*53ee8cc1Swenshuai.xi     _TSIOCtrl3 = (REG_Ctrl_TSIO3*)(_u32TSIORegBase+ REG_CTRL_BASE_TSIO3);   // 0x1739
477*53ee8cc1Swenshuai.xi     _TSIOCtrlLOCDEC = (REG_Ctrl_TSIO_LOCDEC*)(_u32TSIORegBase+ REG_CTRL_BASE_TSIO_LOCDEC);  // 0x171E
478*53ee8cc1Swenshuai.xi     _TSOCtrl0 = (REG_Ctrl_TSO0*)(_u32TSIORegBase+ REG_CTRL_BASE_TSO0);   //0x1706
479*53ee8cc1Swenshuai.xi     _TSOCtrl2 = (REG_Ctrl_TSO2*)(_u32TSIORegBase+ REG_CTRL_BASE_TSO2);   // 0x1539
480*53ee8cc1Swenshuai.xi     _TSOCtrl3 = (REG_Ctrl_TSO3*)(_u32TSIORegBase+ REG_CTRL_BASE_TSO3);   // 0x171D
481*53ee8cc1Swenshuai.xi     _TSIOCHIPTOP = (REG_Ctrl_CHIPTOP*)(_u32TSIORegBase+ REG_CTRL_BASE_CHIPTOP);   // 0x101E
482*53ee8cc1Swenshuai.xi     _TSIO_CLKGEN0 = (REG_Ctrl_CLOCKGEN0*)(_u32TSIORegBase+ REG_CTRL_BASE_CLOCKGEN0);   // 0x100B
483*53ee8cc1Swenshuai.xi     _TSIOCtrlPHY = (REG_Ctrl_TSIO_PHY*)(_u32TSIORegBase+ REG_CTRL_BASE_TSIO_PHY);   // 0x171F
484*53ee8cc1Swenshuai.xi     _TSPCtrl8 = (REG_Ctrl_TSP8 *)(_u32TSIORegBase+ 0xC4E00UL);     // TSP8  0x1627
485*53ee8cc1Swenshuai.xi     _TSIO_STRLD = (REG_Ctrl_STRLD*)(_u32TSIORegBase+ REG_CTRL_BASE_STRLD); //STRLD 0x1029
486*53ee8cc1Swenshuai.xi }
487*53ee8cc1Swenshuai.xi 
HAL_TSIO_DbgLevel(EN_HAL_TSIO_DBGMSG_LEVEL eLevel)488*53ee8cc1Swenshuai.xi void HAL_TSIO_DbgLevel(EN_HAL_TSIO_DBGMSG_LEVEL eLevel)
489*53ee8cc1Swenshuai.xi {
490*53ee8cc1Swenshuai.xi     _u32TSIODbgLevel = eLevel;
491*53ee8cc1Swenshuai.xi }
492*53ee8cc1Swenshuai.xi 
HAL_TSIO_ClkOpen(MS_BOOL bEnable)493*53ee8cc1Swenshuai.xi void HAL_TSIO_ClkOpen(MS_BOOL bEnable)
494*53ee8cc1Swenshuai.xi {
495*53ee8cc1Swenshuai.xi     if (bEnable)
496*53ee8cc1Swenshuai.xi     {
497*53ee8cc1Swenshuai.xi         //tsp clk
498*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSIO_CLKGEN0->REG_CLKGEN0_TSP), REG_CLKGEN0_TSP_DISABLE_CLOCK);
499*53ee8cc1Swenshuai.xi         _REG16_SET_MASK(&(_TSIO_CLKGEN0->REG_CLKGEN0_TSP), 0, REG_CLKGEN0_TSP_CLKSOURCE_MASK, REG_CLKGEN0_TSP_CLKSOURCE_SHIFT);
500*53ee8cc1Swenshuai.xi 
501*53ee8cc1Swenshuai.xi         //TSP boot clk set
502*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSIOCHIPTOP->REG_TOP_TSIO), REG_TOP_TSIO_TSP_BOOT_CLK_SEL);
503*53ee8cc1Swenshuai.xi 
504*53ee8cc1Swenshuai.xi         //ckg tsp tsio
505*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSIOCtrl0->CKG_TSP_TSIO), TSIO0_CKG_TSP_TSIO);
506*53ee8cc1Swenshuai.xi 
507*53ee8cc1Swenshuai.xi         //tsio clk
508*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSIO_CLKGEN0->REG_CLKGEN0_TSIO), REG_CLKGEN0_TSIO_DISABLE_CLOCK);
509*53ee8cc1Swenshuai.xi         _REG16_SET_MASK(&(_TSIO_CLKGEN0->REG_CLKGEN0_TSIO), 0, REG_CLKGEN0_TSIO_CLKSOURCE_MASK, REG_CLKGEN0_TSIO_CLKSOURCE_SHIFT);
510*53ee8cc1Swenshuai.xi     }
511*53ee8cc1Swenshuai.xi     else
512*53ee8cc1Swenshuai.xi     {
513*53ee8cc1Swenshuai.xi         //tsio clk
514*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSIO_CLKGEN0->REG_CLKGEN0_TSIO), REG_CLKGEN0_TSIO_DISABLE_CLOCK);
515*53ee8cc1Swenshuai.xi     }
516*53ee8cc1Swenshuai.xi }
HAL_TSIO_PowerInit(void)517*53ee8cc1Swenshuai.xi void HAL_TSIO_PowerInit(void)
518*53ee8cc1Swenshuai.xi {
519*53ee8cc1Swenshuai.xi     //_HAL_REG16_W(&(_TSIOCtrl0->AD_TX_CONFIG0),0x0000); // fpga default value
520*53ee8cc1Swenshuai.xi     //_HAL_REG16_W(&(_TSIOCtrl0->AD_RX_CONFIG0),0x0000); // fpga default value
521*53ee8cc1Swenshuai.xi     //_REG16_SET(&(_TSIOCtrl0->AD_TX_CONFIG0),TSIO0_PD_SMC_LDO_FPGA); // fpga setting
522*53ee8cc1Swenshuai.xi     //_HAL_REG16_W(&(_TSIOCtrl0->MAX_PERIOD_OF_PKT_SYNC),0x0000); // for test
523*53ee8cc1Swenshuai.xi }
524*53ee8cc1Swenshuai.xi 
HAL_TSIO_Reset(void)525*53ee8cc1Swenshuai.xi void HAL_TSIO_Reset(void)
526*53ee8cc1Swenshuai.xi {
527*53ee8cc1Swenshuai.xi     _REG16_CLR(&(_TSIOCtrl0->SW_RSTZ), TSIO0_SW_RSTZ);//low active
528*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrl0->SW_RSTZ), TSIO0_SW_RSTZ);
529*53ee8cc1Swenshuai.xi }
530*53ee8cc1Swenshuai.xi 
HAL_TSIO_Tx2Rx_InsertCTS(MS_BOOL bEnable)531*53ee8cc1Swenshuai.xi void HAL_TSIO_Tx2Rx_InsertCTS(MS_BOOL bEnable)
532*53ee8cc1Swenshuai.xi {
533*53ee8cc1Swenshuai.xi     if (bEnable)
534*53ee8cc1Swenshuai.xi     {
535*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSIOCtrl0->TX_CONFIG0), TSIO0_INSERT_CTS_IN_TX);
536*53ee8cc1Swenshuai.xi     }
537*53ee8cc1Swenshuai.xi     else
538*53ee8cc1Swenshuai.xi     {
539*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSIOCtrl0->TX_CONFIG0), TSIO0_INSERT_CTS_IN_TX);
540*53ee8cc1Swenshuai.xi     }
541*53ee8cc1Swenshuai.xi }
542*53ee8cc1Swenshuai.xi 
HAL_TSIO_Tx2Rx_Direct8(MS_BOOL bEnable)543*53ee8cc1Swenshuai.xi void HAL_TSIO_Tx2Rx_Direct8(MS_BOOL bEnable)
544*53ee8cc1Swenshuai.xi {
545*53ee8cc1Swenshuai.xi     if (bEnable)
546*53ee8cc1Swenshuai.xi     {
547*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSIOCtrl0->TX_CONFIG0), TSIO0_TX_DIRECT_RX_8);
548*53ee8cc1Swenshuai.xi     }
549*53ee8cc1Swenshuai.xi     else
550*53ee8cc1Swenshuai.xi     {
551*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSIOCtrl0->TX_CONFIG0), TSIO0_TX_DIRECT_RX_8);
552*53ee8cc1Swenshuai.xi     }
553*53ee8cc1Swenshuai.xi }
554*53ee8cc1Swenshuai.xi 
HAL_TSIO_Tx2Rx_Direct16(MS_BOOL bEnable)555*53ee8cc1Swenshuai.xi void HAL_TSIO_Tx2Rx_Direct16(MS_BOOL bEnable)
556*53ee8cc1Swenshuai.xi {
557*53ee8cc1Swenshuai.xi     if (bEnable)
558*53ee8cc1Swenshuai.xi     {
559*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSIOCtrl1->RX_CONFIG0), TSIO1_TX_DIRECT_RX_16);
560*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSIOCtrl0->PUH_CONFIG1), TSIO0_PUH_CONFIG1_VCC_POWER_GOOD_SET_HIGHT);
561*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSIOCtrl0->PUH_CONFIG1), TSIO0_PUH_CONFIG1_TSIO_RX_DATA_VALID_SET_HIGH);
562*53ee8cc1Swenshuai.xi     }
563*53ee8cc1Swenshuai.xi     else
564*53ee8cc1Swenshuai.xi     {
565*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSIOCtrl1->RX_CONFIG0), TSIO1_TX_DIRECT_RX_16);
566*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSIOCtrl0->PUH_CONFIG1), TSIO0_PUH_CONFIG1_VCC_POWER_GOOD_SET_HIGHT);
567*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSIOCtrl0->PUH_CONFIG1), TSIO0_PUH_CONFIG1_TSIO_RX_DATA_VALID_SET_HIGH);
568*53ee8cc1Swenshuai.xi     }
569*53ee8cc1Swenshuai.xi }
570*53ee8cc1Swenshuai.xi 
HAL_TSIO_Tx2Rx_Loopback(MS_BOOL bEnable)571*53ee8cc1Swenshuai.xi void HAL_TSIO_Tx2Rx_Loopback(MS_BOOL bEnable)
572*53ee8cc1Swenshuai.xi {
573*53ee8cc1Swenshuai.xi     if (bEnable)
574*53ee8cc1Swenshuai.xi     {
575*53ee8cc1Swenshuai.xi         _REG16_SET_MASK(&(_TSIOCtrlPHY->TSIO_PHY_18), 0x20,TSIO_PHY_18_TEST_TSIO_MASK, TSIO_PHY_18_TEST_TSIO_SHIFT); // loopback
576*53ee8cc1Swenshuai.xi 
577*53ee8cc1Swenshuai.xi     }
578*53ee8cc1Swenshuai.xi     else
579*53ee8cc1Swenshuai.xi     {
580*53ee8cc1Swenshuai.xi         _REG16_SET_MASK(&(_TSIOCtrlPHY->TSIO_PHY_18), 0,TSIO_PHY_18_TEST_TSIO_MASK, TSIO_PHY_18_TEST_TSIO_SHIFT);
581*53ee8cc1Swenshuai.xi     }
582*53ee8cc1Swenshuai.xi }
583*53ee8cc1Swenshuai.xi 
HAL_TSIO_StuffingSID_Set(MS_U8 u8Stuffing_sid)584*53ee8cc1Swenshuai.xi void HAL_TSIO_StuffingSID_Set(MS_U8 u8Stuffing_sid)
585*53ee8cc1Swenshuai.xi {
586*53ee8cc1Swenshuai.xi     _REG16_SET_MASK(&(_TSIOCtrl0->TX_CONFIG0), u8Stuffing_sid, TSIO0_STUFF_SVID_MASK, TSIO0_STUFF_SVID_SHIFT);
587*53ee8cc1Swenshuai.xi }
588*53ee8cc1Swenshuai.xi 
HAL_TSIO_Decrypt_Set(MS_BOOL bEnable)589*53ee8cc1Swenshuai.xi void HAL_TSIO_Decrypt_Set(MS_BOOL bEnable)
590*53ee8cc1Swenshuai.xi {
591*53ee8cc1Swenshuai.xi     if (bEnable)
592*53ee8cc1Swenshuai.xi     {
593*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSIOCtrl1->RX_CONFIG0), TSIO1_DECRYPT_DISABLE);
594*53ee8cc1Swenshuai.xi     }
595*53ee8cc1Swenshuai.xi     else
596*53ee8cc1Swenshuai.xi     {
597*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSIOCtrl1->RX_CONFIG0), TSIO1_DECRYPT_DISABLE);
598*53ee8cc1Swenshuai.xi     }
599*53ee8cc1Swenshuai.xi 
600*53ee8cc1Swenshuai.xi     //_REG16_SET(&(_TSIOCtrl1->RX_CONFIG0), TSIO1_BIT_TRAINING_BYPASS);
601*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrl1->PKT_SYNC_CTRL),TSIO1_PKT_SYNC_EN);
602*53ee8cc1Swenshuai.xi }
603*53ee8cc1Swenshuai.xi 
HAL_TSIO_Threshold_Set(MS_U8 u8Threshold)604*53ee8cc1Swenshuai.xi void HAL_TSIO_Threshold_Set(MS_U8 u8Threshold)
605*53ee8cc1Swenshuai.xi {
606*53ee8cc1Swenshuai.xi     _REG16_SET_MASK(&(_TSIOCtrl1->TSIO_SYNC_THRESHOLD), (u8Threshold-1), TSIO1_TSIO_N_SYNC_MASK, TSIO1_TSIO_N_SYNC_SHIFT);
607*53ee8cc1Swenshuai.xi     _REG16_SET_MASK(&(_TSIOCtrl1->TSIO_SYNC_THRESHOLD), (u8Threshold-1), TSIO1_TSIO_SYNC_CNT_MASK, TSIO1_TSIO_SYNC_CNT_SHIFT);
608*53ee8cc1Swenshuai.xi }
609*53ee8cc1Swenshuai.xi 
HAL_TSIO_BypassMerge_Set(MS_BOOL bEnable)610*53ee8cc1Swenshuai.xi void HAL_TSIO_BypassMerge_Set(MS_BOOL bEnable)
611*53ee8cc1Swenshuai.xi {
612*53ee8cc1Swenshuai.xi     if(bEnable)
613*53ee8cc1Swenshuai.xi     {
614*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSIOCtrl3->TSIO_PKT_MERGE_CONFIG), TSIO3_NO_NEED_MERGE_BYPASS_SM);
615*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSIOCtrl3->TSIO_BYPASS_MERGE_DISABLE), TSIO3_BYPASS_MERGE_DIABLE);
616*53ee8cc1Swenshuai.xi     }
617*53ee8cc1Swenshuai.xi     else
618*53ee8cc1Swenshuai.xi     {
619*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSIOCtrl3->TSIO_PKT_MERGE_CONFIG), TSIO3_NO_NEED_MERGE_BYPASS_SM);
620*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSIOCtrl3->TSIO_BYPASS_MERGE_DISABLE), TSIO3_BYPASS_MERGE_DIABLE);
621*53ee8cc1Swenshuai.xi     }
622*53ee8cc1Swenshuai.xi }
623*53ee8cc1Swenshuai.xi 
HAL_TSIO_SIDBypassSMCMergeEnable(MS_U8 u8Sid,MS_BOOL bEnable)624*53ee8cc1Swenshuai.xi void HAL_TSIO_SIDBypassSMCMergeEnable(MS_U8 u8Sid, MS_BOOL bEnable)
625*53ee8cc1Swenshuai.xi {
626*53ee8cc1Swenshuai.xi     MS_U16 u16SvidBypassSMCEnableBit[4];
627*53ee8cc1Swenshuai.xi 
628*53ee8cc1Swenshuai.xi     u16SvidBypassSMCEnableBit[0] = _HAL_REG16_R(&(_TSIOCtrl3->TSIO_SVID_BYPASS_SMC_EN[0]));
629*53ee8cc1Swenshuai.xi     u16SvidBypassSMCEnableBit[1] = _HAL_REG16_R(&(_TSIOCtrl3->TSIO_SVID_BYPASS_SMC_EN[1]));
630*53ee8cc1Swenshuai.xi     u16SvidBypassSMCEnableBit[2] = _HAL_REG16_R(&(_TSIOCtrl3->TSIO_SVID_BYPASS_SMC_EN[2]));
631*53ee8cc1Swenshuai.xi     u16SvidBypassSMCEnableBit[3] = _HAL_REG16_R(&(_TSIOCtrl3->TSIO_SVID_BYPASS_SMC_EN[3]));
632*53ee8cc1Swenshuai.xi 
633*53ee8cc1Swenshuai.xi     MS_U64 u64Mask = 0;
634*53ee8cc1Swenshuai.xi     MS_U64 u64Data = u16SvidBypassSMCEnableBit[0] + ((MS_U64)u16SvidBypassSMCEnableBit[1] << 16)
635*53ee8cc1Swenshuai.xi         + ((MS_U64)u16SvidBypassSMCEnableBit[2] << 32) + ((MS_U64)u16SvidBypassSMCEnableBit[3] << 48);
636*53ee8cc1Swenshuai.xi 
637*53ee8cc1Swenshuai.xi     if (bEnable)
638*53ee8cc1Swenshuai.xi     {
639*53ee8cc1Swenshuai.xi         u64Mask = (MS_U64)(0x1) << u8Sid;
640*53ee8cc1Swenshuai.xi         u64Data |= u64Mask;
641*53ee8cc1Swenshuai.xi     }
642*53ee8cc1Swenshuai.xi     else
643*53ee8cc1Swenshuai.xi     {
644*53ee8cc1Swenshuai.xi         u64Mask = ~((MS_U64)(0x1) << u8Sid);
645*53ee8cc1Swenshuai.xi         u64Data &= u64Mask;
646*53ee8cc1Swenshuai.xi     }
647*53ee8cc1Swenshuai.xi 
648*53ee8cc1Swenshuai.xi     u16SvidBypassSMCEnableBit[0] = (u64Data & 0x000000000000FFFF);
649*53ee8cc1Swenshuai.xi     u16SvidBypassSMCEnableBit[1] = (u64Data & 0x00000000FFFF0000)>>16;
650*53ee8cc1Swenshuai.xi     u16SvidBypassSMCEnableBit[2] = (u64Data & 0x0000FFFF00000000)>>32;
651*53ee8cc1Swenshuai.xi     u16SvidBypassSMCEnableBit[3] = (u64Data & 0xFFFF000000000000)>>48;
652*53ee8cc1Swenshuai.xi 
653*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSIOCtrl3->TSIO_SVID_BYPASS_SMC_EN[0]), u16SvidBypassSMCEnableBit[0]);
654*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSIOCtrl3->TSIO_SVID_BYPASS_SMC_EN[1]), u16SvidBypassSMCEnableBit[1]);
655*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSIOCtrl3->TSIO_SVID_BYPASS_SMC_EN[2]), u16SvidBypassSMCEnableBit[2]);
656*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSIOCtrl3->TSIO_SVID_BYPASS_SMC_EN[3]), u16SvidBypassSMCEnableBit[3]);
657*53ee8cc1Swenshuai.xi }
658*53ee8cc1Swenshuai.xi 
HAL_TSIO_CTS_En(MS_BOOL bEnable)659*53ee8cc1Swenshuai.xi void HAL_TSIO_CTS_En(MS_BOOL bEnable)
660*53ee8cc1Swenshuai.xi {
661*53ee8cc1Swenshuai.xi     if(bEnable)
662*53ee8cc1Swenshuai.xi     {
663*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSIOCtrl0->TX_CONFIG0), TSIO0_CTS_DISABLE);
664*53ee8cc1Swenshuai.xi     }
665*53ee8cc1Swenshuai.xi     else
666*53ee8cc1Swenshuai.xi     {
667*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSIOCtrl0->TX_CONFIG0), TSIO0_CTS_DISABLE);
668*53ee8cc1Swenshuai.xi     }
669*53ee8cc1Swenshuai.xi }
670*53ee8cc1Swenshuai.xi 
671*53ee8cc1Swenshuai.xi //=======================================================
672*53ee8cc1Swenshuai.xi // SGDMA_IN API
673*53ee8cc1Swenshuai.xi //=======================================================
HAL_TSIO_SGDMAIN_Reset(void)674*53ee8cc1Swenshuai.xi void HAL_TSIO_SGDMAIN_Reset(void)
675*53ee8cc1Swenshuai.xi {
676*53ee8cc1Swenshuai.xi     _REG16_CLR(&(_TSOCtrl3->SW_RSTZ),TSO3_SW_RSTZ); //low active
677*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSOCtrl3->SW_RSTZ),TSO3_SW_RSTZ);
678*53ee8cc1Swenshuai.xi }
679*53ee8cc1Swenshuai.xi 
HAL_TSIO_SGDMAIN_LastPktBuf_Set(MS_U32 u32Head,MS_U32 u32Tail)680*53ee8cc1Swenshuai.xi void HAL_TSIO_SGDMAIN_LastPktBuf_Set(MS_U32 u32Head, MS_U32 u32Tail)
681*53ee8cc1Swenshuai.xi {
682*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&(_TSOCtrl3->LAST_PKT_STR2MI_HEAD), (u32Head >> TSIO_MIU_BUS)&0xFFFFFFFF);
683*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&(_TSOCtrl3->LAST_PKT_STR2MI_TAIL), (u32Tail >> TSIO_MIU_BUS)&0xFFFFFFFF);
684*53ee8cc1Swenshuai.xi 
685*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSOCtrl3->LAST_PKT),TSO3_LAST_PKT_STR2MI_RST_WADR);
686*53ee8cc1Swenshuai.xi     _REG16_CLR(&(_TSOCtrl3->LAST_PKT),TSO3_LAST_PKT_STR2MI_RST_WADR);
687*53ee8cc1Swenshuai.xi 
688*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSOCtrl3->LAST_PKT),TSO3_LAST_PKT_STR2MI_EN);
689*53ee8cc1Swenshuai.xi }
690*53ee8cc1Swenshuai.xi 
HAL_TSIO_SGDMAIN_SGVQBuf_Set(MS_U32 u32BufAddr,MS_U32 u32BufSize)691*53ee8cc1Swenshuai.xi void HAL_TSIO_SGDMAIN_SGVQBuf_Set(MS_U32 u32BufAddr, MS_U32 u32BufSize)
692*53ee8cc1Swenshuai.xi {
693*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&(_TSOCtrl3->SGVQ1_BASE), (u32BufAddr >> TSIO_MIU_BUS)&0xFFFFFFFF);
694*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSOCtrl3->SGVQ1_SIZE_200BYTE), (u32BufSize / TSIO_SVQ_UNIT_SIZE));
695*53ee8cc1Swenshuai.xi 
696*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSOCtrl3->SGVQ1_TX_CONFIG), TSO3_TX_CONFIG_TX_RESET);
697*53ee8cc1Swenshuai.xi     _REG16_CLR(&(_TSOCtrl3->SGVQ1_TX_CONFIG), TSO3_TX_CONFIG_TX_RESET);
698*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSOCtrl3->SGVQ1_TX_CONFIG), TSO3_TX_CONFIG_SVQ_TX_ENABLE);
699*53ee8cc1Swenshuai.xi }
700*53ee8cc1Swenshuai.xi 
HAL_TSIO_SGDMAIN_VC_Open(MS_U32 u32Addr,MS_U8 u8Chid,MS_U8 u8Sid,MS_BOOL bTSmode,MS_BOOL bPriority,MS_BOOL bFlush,MS_BOOL bNewPkt)701*53ee8cc1Swenshuai.xi void HAL_TSIO_SGDMAIN_VC_Open(MS_U32 u32Addr, MS_U8 u8Chid, MS_U8 u8Sid, MS_BOOL bTSmode,
702*53ee8cc1Swenshuai.xi     MS_BOOL bPriority, MS_BOOL bFlush, MS_BOOL bNewPkt)
703*53ee8cc1Swenshuai.xi {
704*53ee8cc1Swenshuai.xi     //Set CMD
705*53ee8cc1Swenshuai.xi     _REG16_SET_MASK(&(_TSOCtrl3->ACPU_CMD), u8Chid, TSO3_ACPU_CMD_ACPU_VC_ID_MASK, TSO3_ACPU_CMD_ACPU_VC_ID_SHIFT);
706*53ee8cc1Swenshuai.xi     if (bNewPkt)
707*53ee8cc1Swenshuai.xi     {
708*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSOCtrl3->ACPU_CMD), TSO3_ACPU_CMD_START_A_NEW_PACKAGE);
709*53ee8cc1Swenshuai.xi     }
710*53ee8cc1Swenshuai.xi     else
711*53ee8cc1Swenshuai.xi     {
712*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSOCtrl3->ACPU_CMD), TSO3_ACPU_CMD_START_A_NEW_PACKAGE);
713*53ee8cc1Swenshuai.xi     }
714*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSOCtrl3->ACPU_CMD), TSO3_ACPU_CMD_ACPU_RW);
715*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSOCtrl3->ACPU_CMD), TSO3_ACPU_CMD_ACPU_ACTIVE);
716*53ee8cc1Swenshuai.xi     if (bPriority)
717*53ee8cc1Swenshuai.xi     {
718*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSOCtrl3->ACPU_CMD), TSO3_ACPU_CMD_M_PRIORITY);
719*53ee8cc1Swenshuai.xi     }
720*53ee8cc1Swenshuai.xi     else
721*53ee8cc1Swenshuai.xi     {
722*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSOCtrl3->ACPU_CMD), TSO3_ACPU_CMD_M_PRIORITY);
723*53ee8cc1Swenshuai.xi     }
724*53ee8cc1Swenshuai.xi 
725*53ee8cc1Swenshuai.xi     //Set FLAG
726*53ee8cc1Swenshuai.xi     if (bTSmode)
727*53ee8cc1Swenshuai.xi     {
728*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSOCtrl3->ACPU_FLAG), TSO3_ACPU_FLAG_PKT_MODE_188);
729*53ee8cc1Swenshuai.xi     }
730*53ee8cc1Swenshuai.xi     else
731*53ee8cc1Swenshuai.xi     {
732*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSOCtrl3->ACPU_FLAG), TSO3_ACPU_FLAG_PKT_MODE_188);
733*53ee8cc1Swenshuai.xi     }
734*53ee8cc1Swenshuai.xi     if (bFlush)
735*53ee8cc1Swenshuai.xi     {
736*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSOCtrl3->ACPU_FLAG), TSO3_ACPU_FLAG_LAST_NODE_FLUSH);
737*53ee8cc1Swenshuai.xi     }
738*53ee8cc1Swenshuai.xi     else
739*53ee8cc1Swenshuai.xi     {
740*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSOCtrl3->ACPU_FLAG), TSO3_ACPU_FLAG_LAST_NODE_FLUSH);
741*53ee8cc1Swenshuai.xi     }
742*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSOCtrl3->ACPU_FLAG), TSO3_ACPU_FLAG_INTERRUPT_ENABLE);
743*53ee8cc1Swenshuai.xi     _REG16_SET_MASK(&(_TSOCtrl3->ACPU_FLAG), u8Sid, TSO3_ACPU_FLAG_SERVICE_ID_MASK, TSO3_ACPU_FLAG_SERVICE_ID_SHIFT);
744*53ee8cc1Swenshuai.xi 
745*53ee8cc1Swenshuai.xi     //Write Addr
746*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&(_TSOCtrl3->ACPU_WDATA), u32Addr);
747*53ee8cc1Swenshuai.xi 
748*53ee8cc1Swenshuai.xi     //Trigger
749*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSOCtrl3->ACPU_ACTIVE), TSO3_ACPU_ACTIVE);
750*53ee8cc1Swenshuai.xi }
751*53ee8cc1Swenshuai.xi 
HAL_TSIO_SGDMAIN_VC_Close(MS_U8 u8Chid)752*53ee8cc1Swenshuai.xi void HAL_TSIO_SGDMAIN_VC_Close(MS_U8 u8Chid)
753*53ee8cc1Swenshuai.xi {
754*53ee8cc1Swenshuai.xi     //Set CMD
755*53ee8cc1Swenshuai.xi     _REG16_SET_MASK(&(_TSOCtrl3->ACPU_CMD), u8Chid, TSO3_ACPU_CMD_ACPU_VC_ID_MASK, TSO3_ACPU_CMD_ACPU_VC_ID_SHIFT);
756*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSOCtrl3->ACPU_CMD), TSO3_ACPU_CMD_ACPU_RW);
757*53ee8cc1Swenshuai.xi     _REG16_CLR(&(_TSOCtrl3->ACPU_CMD), TSO3_ACPU_CMD_ACPU_ACTIVE);
758*53ee8cc1Swenshuai.xi 
759*53ee8cc1Swenshuai.xi     //Trigger
760*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSOCtrl3->ACPU_ACTIVE), TSO3_ACPU_ACTIVE);
761*53ee8cc1Swenshuai.xi }
762*53ee8cc1Swenshuai.xi 
HAL_TSIO_SGDMAIN_Global_Pacing(void)763*53ee8cc1Swenshuai.xi void HAL_TSIO_SGDMAIN_Global_Pacing(void)
764*53ee8cc1Swenshuai.xi {
765*53ee8cc1Swenshuai.xi     //golobal tick unit, 192 = 1us
766*53ee8cc1Swenshuai.xi     _REG16_SET_MASK(&(_TSOCtrl3->GLOBAL_TICK_COUNT_SET), 192, TSO3_GLOBAL_TICK_COUNT_SET_MASK, TSO3_GLOBAL_TICK_COUNT_SET_SHIFT);
767*53ee8cc1Swenshuai.xi }
768*53ee8cc1Swenshuai.xi 
HAL_TSIO_SGDMAIN_VC_Pacing(MS_U8 u8Chid,MS_BOOL bTSmode,MS_U32 Pacing)769*53ee8cc1Swenshuai.xi void HAL_TSIO_SGDMAIN_VC_Pacing(MS_U8 u8Chid, MS_BOOL bTSmode, MS_U32 Pacing)
770*53ee8cc1Swenshuai.xi {
771*53ee8cc1Swenshuai.xi     if (Pacing == 0 || u8Chid >= TSIO_SERVICE_NUM)
772*53ee8cc1Swenshuai.xi     {
773*53ee8cc1Swenshuai.xi         return;
774*53ee8cc1Swenshuai.xi     }
775*53ee8cc1Swenshuai.xi 
776*53ee8cc1Swenshuai.xi     MS_U16 u16Wdata = 0;
777*53ee8cc1Swenshuai.xi     if (bTSmode)
778*53ee8cc1Swenshuai.xi     {
779*53ee8cc1Swenshuai.xi         u16Wdata = (1000000/(Pacing /188 /8));
780*53ee8cc1Swenshuai.xi     }
781*53ee8cc1Swenshuai.xi     else
782*53ee8cc1Swenshuai.xi     {
783*53ee8cc1Swenshuai.xi         u16Wdata = (1000000/(Pacing /192 /8));
784*53ee8cc1Swenshuai.xi     }
785*53ee8cc1Swenshuai.xi 
786*53ee8cc1Swenshuai.xi     _REG16_SET_MASK(&(_TSOCtrl3->TICK_COUNT_SET[u8Chid]), u16Wdata, TSO3_TICK_COUNT_SET_MASK, TSO3_TICK_COUNT_SET_SHIFT);
787*53ee8cc1Swenshuai.xi }
788*53ee8cc1Swenshuai.xi 
HAL_TSIO_SGDMAIN_Start(void)789*53ee8cc1Swenshuai.xi void HAL_TSIO_SGDMAIN_Start(void)
790*53ee8cc1Swenshuai.xi {
791*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSOCtrl3->SGCTRL_START), TSO3_SGCTRL_START);
792*53ee8cc1Swenshuai.xi }
793*53ee8cc1Swenshuai.xi 
HAL_TSIO_SGDMAIN_IntRead(MS_U8 u8Chid,MS_U16 * u16Status)794*53ee8cc1Swenshuai.xi void HAL_TSIO_SGDMAIN_IntRead(MS_U8 u8Chid, MS_U16 *u16Status)
795*53ee8cc1Swenshuai.xi {
796*53ee8cc1Swenshuai.xi     MS_BOOL bINT = false;
797*53ee8cc1Swenshuai.xi     MS_U64 VC_INT = (MS_U64)_HAL_REG16_R(&(_TSOCtrl3->SGDMA_IN_VC_INT[0]))+
798*53ee8cc1Swenshuai.xi         ((MS_U64)_HAL_REG16_R(&(_TSOCtrl3->SGDMA_IN_VC_INT[1])) << 16)+
799*53ee8cc1Swenshuai.xi         ((MS_U64)_HAL_REG16_R(&(_TSOCtrl3->SGDMA_IN_VC_INT[2])) << 32)+
800*53ee8cc1Swenshuai.xi         ((MS_U64)_HAL_REG16_R(&(_TSOCtrl3->SGDMA_IN_VC_INT[3])) << 48);
801*53ee8cc1Swenshuai.xi 
802*53ee8cc1Swenshuai.xi     bINT = (VC_INT & ((MS_U64)(0x1) << u8Chid)) >> u8Chid;
803*53ee8cc1Swenshuai.xi     *u16Status = bINT;
804*53ee8cc1Swenshuai.xi }
805*53ee8cc1Swenshuai.xi 
HAL_TSIO_SGDMAIN_IntClr(MS_U8 u8Chid)806*53ee8cc1Swenshuai.xi void HAL_TSIO_SGDMAIN_IntClr(MS_U8 u8Chid)
807*53ee8cc1Swenshuai.xi {
808*53ee8cc1Swenshuai.xi     _REG16_SET_MASK(&(_TSOCtrl3->PACE_DBG), u8Chid, TSO3_SGDMA_IN_VC_INT_VC_ID_MASK, TSO3_SGDMA_IN_VC_INT_VC_ID_SHIFT);
809*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSOCtrl3->PACE_DBG), TSO3_SGDMA_IN_VC_INT_CLR);
810*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSOCtrl3->SGDMA_IN), TSO3_SGDMA_IN_VC_INT_TRIGGER);
811*53ee8cc1Swenshuai.xi }
812*53ee8cc1Swenshuai.xi 
HAL_TSIO_SGDMAIN_IntAll(void)813*53ee8cc1Swenshuai.xi MS_U64 HAL_TSIO_SGDMAIN_IntAll(void)
814*53ee8cc1Swenshuai.xi {
815*53ee8cc1Swenshuai.xi     MS_U64 VC_INT = (MS_U64)_HAL_REG16_R(&(_TSOCtrl3->SGDMA_IN_VC_INT[0]))+
816*53ee8cc1Swenshuai.xi         ((MS_U64)_HAL_REG16_R(&(_TSOCtrl3->SGDMA_IN_VC_INT[1])) << 16)+
817*53ee8cc1Swenshuai.xi         ((MS_U64)_HAL_REG16_R(&(_TSOCtrl3->SGDMA_IN_VC_INT[2])) << 32)+
818*53ee8cc1Swenshuai.xi         ((MS_U64)_HAL_REG16_R(&(_TSOCtrl3->SGDMA_IN_VC_INT[3])) << 48);
819*53ee8cc1Swenshuai.xi 
820*53ee8cc1Swenshuai.xi     return VC_INT;
821*53ee8cc1Swenshuai.xi }
822*53ee8cc1Swenshuai.xi 
HAL_TSIO_SGDMAIN_IntClrAll(void)823*53ee8cc1Swenshuai.xi void HAL_TSIO_SGDMAIN_IntClrAll(void)
824*53ee8cc1Swenshuai.xi {
825*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSOCtrl3->SGDMA_IN), TSO3_SGDMA_IN_INT_CLR);
826*53ee8cc1Swenshuai.xi     _REG16_CLR(&(_TSOCtrl3->SGDMA_IN), TSO3_SGDMA_IN_INT_CLR);
827*53ee8cc1Swenshuai.xi }
828*53ee8cc1Swenshuai.xi 
HAL_TSIO_SGDMAIN_ReadSram(MS_U8 u8Chid,HAL_SGDMA_SRAM eSram)829*53ee8cc1Swenshuai.xi MS_U32 HAL_TSIO_SGDMAIN_ReadSram(MS_U8 u8Chid, HAL_SGDMA_SRAM eSram)
830*53ee8cc1Swenshuai.xi {
831*53ee8cc1Swenshuai.xi     MS_U32 u32Data = 0;
832*53ee8cc1Swenshuai.xi     if (eSram >= HAL_SGDMA_SRAM_MAX)
833*53ee8cc1Swenshuai.xi     {
834*53ee8cc1Swenshuai.xi         return 0;
835*53ee8cc1Swenshuai.xi     }
836*53ee8cc1Swenshuai.xi 
837*53ee8cc1Swenshuai.xi     //Set cmd
838*53ee8cc1Swenshuai.xi     _REG16_SET_MASK(&(_TSOCtrl3->ACPU_CMD), u8Chid, TSO3_ACPU_CMD_ACPU_VC_ID_MASK, TSO3_ACPU_CMD_ACPU_VC_ID_SHIFT);
839*53ee8cc1Swenshuai.xi     _REG16_SET_MASK(&(_TSOCtrl3->ACPU_CMD), eSram, TSO3_ACPU_CMD_ACPU_POSITION_MASK, TSO3_ACPU_CMD_ACPU_POSITION_SHIFT);
840*53ee8cc1Swenshuai.xi     _REG16_CLR(&(_TSOCtrl3->ACPU_CMD), TSO3_ACPU_CMD_ACPU_RW);
841*53ee8cc1Swenshuai.xi     _REG16_CLR(&(_TSOCtrl3->ACPU_CMD), TSO3_ACPU_CMD_ACPU_ACTIVE);
842*53ee8cc1Swenshuai.xi 
843*53ee8cc1Swenshuai.xi      //Trigger
844*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSOCtrl3->ACPU_ACTIVE), TSO3_ACPU_ACTIVE);
845*53ee8cc1Swenshuai.xi 
846*53ee8cc1Swenshuai.xi     u32Data = _HAL_REG32_R(&(_TSOCtrl3->ACPU_RDATA));
847*53ee8cc1Swenshuai.xi     return u32Data;
848*53ee8cc1Swenshuai.xi }
849*53ee8cc1Swenshuai.xi 
HAL_TSIO_SGDMAIN_ReadDbg(HAL_SGDMAIN_DBG eDbg)850*53ee8cc1Swenshuai.xi MS_U16 HAL_TSIO_SGDMAIN_ReadDbg(HAL_SGDMAIN_DBG eDbg)
851*53ee8cc1Swenshuai.xi {
852*53ee8cc1Swenshuai.xi     MS_U16 u16Data = 0;
853*53ee8cc1Swenshuai.xi 
854*53ee8cc1Swenshuai.xi     if (eDbg >= HAL_SGDMAIN_DBG_MAX)
855*53ee8cc1Swenshuai.xi     {
856*53ee8cc1Swenshuai.xi         return 0;
857*53ee8cc1Swenshuai.xi     }
858*53ee8cc1Swenshuai.xi 
859*53ee8cc1Swenshuai.xi     _REG16_SET_MASK(&(_TSOCtrl3->SGDMA_IN), eDbg, TSO3_SGDMA_IN_DBG_SEL_MASK, TSO3_SGDMA_IN_DBG_SEL_SHIFT);
860*53ee8cc1Swenshuai.xi     u16Data = _HAL_REG16_R(&(_TSOCtrl3->SGDMA_IN_DBG));
861*53ee8cc1Swenshuai.xi     return u16Data;
862*53ee8cc1Swenshuai.xi }
863*53ee8cc1Swenshuai.xi 
HAL_TSIO_SGDMAIN_PidFltEnable(MS_U8 u8Sid,MS_BOOL bEnable)864*53ee8cc1Swenshuai.xi void HAL_TSIO_SGDMAIN_PidFltEnable(MS_U8 u8Sid, MS_BOOL bEnable)
865*53ee8cc1Swenshuai.xi {
866*53ee8cc1Swenshuai.xi     MS_U16 u16PidFltEnableBit[4];
867*53ee8cc1Swenshuai.xi 
868*53ee8cc1Swenshuai.xi     u16PidFltEnableBit[0] = _HAL_REG16_R(&(_TSOCtrl2->SG_PDFLT_SVID_EN[0]));
869*53ee8cc1Swenshuai.xi     u16PidFltEnableBit[1] = _HAL_REG16_R(&(_TSOCtrl2->SG_PDFLT_SVID_EN[1]));
870*53ee8cc1Swenshuai.xi     u16PidFltEnableBit[2] = _HAL_REG16_R(&(_TSOCtrl2->SG_PDFLT_SVID_EN[2]));
871*53ee8cc1Swenshuai.xi     u16PidFltEnableBit[3] = _HAL_REG16_R(&(_TSOCtrl2->SG_PDFLT_SVID_EN[3]));
872*53ee8cc1Swenshuai.xi 
873*53ee8cc1Swenshuai.xi     MS_U64 u64Mask = 0;
874*53ee8cc1Swenshuai.xi     MS_U64 u64Data = u16PidFltEnableBit[0] + ((MS_U64)u16PidFltEnableBit[1] << 16)
875*53ee8cc1Swenshuai.xi         + ((MS_U64)u16PidFltEnableBit[2] << 32) + ((MS_U64)u16PidFltEnableBit[3] << 48);
876*53ee8cc1Swenshuai.xi 
877*53ee8cc1Swenshuai.xi     if (bEnable)
878*53ee8cc1Swenshuai.xi     {
879*53ee8cc1Swenshuai.xi         u64Mask = (MS_U64)(0x1) << u8Sid;
880*53ee8cc1Swenshuai.xi         u64Data |= u64Mask;
881*53ee8cc1Swenshuai.xi     }
882*53ee8cc1Swenshuai.xi     else
883*53ee8cc1Swenshuai.xi     {
884*53ee8cc1Swenshuai.xi         u64Mask = ~((MS_U64)(0x1) << u8Sid);
885*53ee8cc1Swenshuai.xi         u64Data &= u64Mask;
886*53ee8cc1Swenshuai.xi     }
887*53ee8cc1Swenshuai.xi 
888*53ee8cc1Swenshuai.xi     u16PidFltEnableBit[0] = (u64Data & 0x000000000000FFFF);
889*53ee8cc1Swenshuai.xi     u16PidFltEnableBit[1] = (u64Data & 0x00000000FFFF0000)>>16;
890*53ee8cc1Swenshuai.xi     u16PidFltEnableBit[2] = (u64Data & 0x0000FFFF00000000)>>32;
891*53ee8cc1Swenshuai.xi     u16PidFltEnableBit[3] = (u64Data & 0xFFFF000000000000)>>48;
892*53ee8cc1Swenshuai.xi 
893*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSOCtrl2->SG_PDFLT_SVID_EN[0]), u16PidFltEnableBit[0]);
894*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSOCtrl2->SG_PDFLT_SVID_EN[1]), u16PidFltEnableBit[1]);
895*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSOCtrl2->SG_PDFLT_SVID_EN[2]), u16PidFltEnableBit[2]);
896*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSOCtrl2->SG_PDFLT_SVID_EN[3]), u16PidFltEnableBit[3]);
897*53ee8cc1Swenshuai.xi }
898*53ee8cc1Swenshuai.xi 
_HAL_TSIO_SGDMAIN_PageTableIndW(MS_U32 u32Addr,MS_U32 u32Wdata)899*53ee8cc1Swenshuai.xi static void _HAL_TSIO_SGDMAIN_PageTableIndW(MS_U32 u32Addr, MS_U32 u32Wdata)
900*53ee8cc1Swenshuai.xi {
901*53ee8cc1Swenshuai.xi     // addr
902*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSOCtrl0->PDTABLE_ADDR_L), (u32Addr & 0x0000FFFF));
903*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSOCtrl0->PDTABLE_ADDR_H), (u32Addr >> 16));
904*53ee8cc1Swenshuai.xi 
905*53ee8cc1Swenshuai.xi     // Wdata
906*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSOCtrl0->PDTABLE_WDATA_L), (u32Wdata & 0x0000FFFF));
907*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSOCtrl0->PDTABLE_WDATA_H), (u32Wdata >> 16));
908*53ee8cc1Swenshuai.xi 
909*53ee8cc1Swenshuai.xi     // Wen
910*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSOCtrl0->PDTABLE_EN), TSO0_PDTABLE_W_EN);
911*53ee8cc1Swenshuai.xi }
912*53ee8cc1Swenshuai.xi 
_HAL_TSIO_SGDMAIN_PageTableIndR_H(MS_U32 u32Addr)913*53ee8cc1Swenshuai.xi static MS_U16 _HAL_TSIO_SGDMAIN_PageTableIndR_H(MS_U32 u32Addr)
914*53ee8cc1Swenshuai.xi {
915*53ee8cc1Swenshuai.xi     // addr
916*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSOCtrl0->PDTABLE_ADDR_L), (u32Addr & 0x0000FFFF));
917*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSOCtrl0->PDTABLE_ADDR_H), (u32Addr >> 16));
918*53ee8cc1Swenshuai.xi 
919*53ee8cc1Swenshuai.xi     // Ren
920*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSOCtrl0->PDTABLE_EN), TSO0_PDTABLE_R_EN);
921*53ee8cc1Swenshuai.xi 
922*53ee8cc1Swenshuai.xi     // Rdata
923*53ee8cc1Swenshuai.xi     return _HAL_REG16_R(&(_TSOCtrl2->SG_PDTABLE_RDATA_H));
924*53ee8cc1Swenshuai.xi }
925*53ee8cc1Swenshuai.xi 
_HAL_TSIO_SGDMAIN_PageTableIndR(MS_U32 u32Addr)926*53ee8cc1Swenshuai.xi static MS_U16 _HAL_TSIO_SGDMAIN_PageTableIndR(MS_U32 u32Addr)
927*53ee8cc1Swenshuai.xi {
928*53ee8cc1Swenshuai.xi     // addr
929*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSOCtrl0->PDTABLE_ADDR_L), (u32Addr & 0x0000FFFF));
930*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSOCtrl0->PDTABLE_ADDR_H), (u32Addr >> 16));
931*53ee8cc1Swenshuai.xi 
932*53ee8cc1Swenshuai.xi     // Ren
933*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSOCtrl0->PDTABLE_EN), TSO0_PDTABLE_R_EN);
934*53ee8cc1Swenshuai.xi 
935*53ee8cc1Swenshuai.xi     // Rdata
936*53ee8cc1Swenshuai.xi     return _HAL_REG16_R(&(_TSOCtrl2->SG_PDTABLE_RDATA));
937*53ee8cc1Swenshuai.xi }
938*53ee8cc1Swenshuai.xi 
HAL_TSIO_SGDMAIN_Flt_SetPid(MS_U16 u16FltId,MS_U16 u16PID)939*53ee8cc1Swenshuai.xi void HAL_TSIO_SGDMAIN_Flt_SetPid(MS_U16 u16FltId, MS_U16 u16PID)
940*53ee8cc1Swenshuai.xi {
941*53ee8cc1Swenshuai.xi     MS_U32 u32Temp = 0;
942*53ee8cc1Swenshuai.xi 
943*53ee8cc1Swenshuai.xi     u32Temp = TSO0_ONE_MASK + (MS_U32)(u16PID & TSO0_PID_MASK);
944*53ee8cc1Swenshuai.xi     u32Temp |= (MS_U32)((_HAL_TSIO_SGDMAIN_PageTableIndR_H(_TSIO_SGDMAIN_PIDFLT_ADDR(u16FltId))&TSO2_PDTABLE_RDATA_H_MASK)<<16);
945*53ee8cc1Swenshuai.xi     _HAL_TSIO_SGDMAIN_PageTableIndW(_TSIO_SGDMAIN_PIDFLT_ADDR(u16FltId), u32Temp);
946*53ee8cc1Swenshuai.xi }
947*53ee8cc1Swenshuai.xi 
HAL_TSIO_SGDMAIN_Flt_SetSid(MS_U16 u16FltId,MS_U8 u8Sid)948*53ee8cc1Swenshuai.xi void HAL_TSIO_SGDMAIN_Flt_SetSid(MS_U16 u16FltId, MS_U8 u8Sid)
949*53ee8cc1Swenshuai.xi {
950*53ee8cc1Swenshuai.xi     MS_U32 u32Temp = 0;
951*53ee8cc1Swenshuai.xi 
952*53ee8cc1Swenshuai.xi     u32Temp = (((MS_U32)u8Sid<<TSO0_SVID_SHIFT) & TSO0_SVID_MASK);
953*53ee8cc1Swenshuai.xi     u32Temp |= (MS_U32)_HAL_TSIO_SGDMAIN_PageTableIndR(_TSIO_SGDMAIN_PIDFLT_ADDR(u16FltId));
954*53ee8cc1Swenshuai.xi     _HAL_TSIO_SGDMAIN_PageTableIndW(_TSIO_SGDMAIN_PIDFLT_ADDR(u16FltId), u32Temp);
955*53ee8cc1Swenshuai.xi }
956*53ee8cc1Swenshuai.xi 
HAL_TSIO_SGDMAIN_Pause(MS_BOOL bEnable)957*53ee8cc1Swenshuai.xi void HAL_TSIO_SGDMAIN_Pause(MS_BOOL bEnable)
958*53ee8cc1Swenshuai.xi {
959*53ee8cc1Swenshuai.xi     if (bEnable)
960*53ee8cc1Swenshuai.xi     {
961*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSOCtrl3->SGDMA_IN), TSO3_SGDMA_IN_PAUSE);
962*53ee8cc1Swenshuai.xi     }
963*53ee8cc1Swenshuai.xi     else
964*53ee8cc1Swenshuai.xi     {
965*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSOCtrl3->SGDMA_IN), TSO3_SGDMA_IN_PAUSE);
966*53ee8cc1Swenshuai.xi     }
967*53ee8cc1Swenshuai.xi }
968*53ee8cc1Swenshuai.xi 
969*53ee8cc1Swenshuai.xi //=======================================================
970*53ee8cc1Swenshuai.xi // SGDMA_OUT API
971*53ee8cc1Swenshuai.xi //=======================================================
HAL_TSIO_SGDMAOUT_Init(void)972*53ee8cc1Swenshuai.xi void HAL_TSIO_SGDMAOUT_Init(void)
973*53ee8cc1Swenshuai.xi {
974*53ee8cc1Swenshuai.xi     _REG16_CLR(&(_TSIOCtrl2->TSIO_PVR_CONFIG), TSIO2_PVR_STR2MI_EN);
975*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrl2->TSIO_PVR_CONFIG), TSIO2_PVR_STR2MI_RST_WADR);
976*53ee8cc1Swenshuai.xi     _REG16_CLR(&(_TSIOCtrl2->TSIO_PVR_CONFIG), TSIO2_PVR_STR2MI_RST_WADR);
977*53ee8cc1Swenshuai.xi     _REG16_SET_MASK(&(_TSIOCtrl2->TSIO_PVR_CONFIG), 1, TSIO2_PVR_BURST_LEN_MASK, TSIO2_PVR_BURST_LEN_SHIFT); // for fixed ccp error
978*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrl2->TSIO_PVR_CONFIG), TSIO2_PVR_DMA_FLUSH_EN); // for fixed ccp error
979*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrl2->TSIO_PVR_CONFIG), TSIO2_PVR_STR2MI_EN);
980*53ee8cc1Swenshuai.xi }
981*53ee8cc1Swenshuai.xi 
HAL_TSIO_SGDMAOUT_VC_Open(MS_U32 u32Addr,MS_U8 u8Chid,MS_BOOL bSecurity)982*53ee8cc1Swenshuai.xi void HAL_TSIO_SGDMAOUT_VC_Open(MS_U32 u32Addr, MS_U8 u8Chid, MS_BOOL bSecurity)
983*53ee8cc1Swenshuai.xi {
984*53ee8cc1Swenshuai.xi     //Set cmd
985*53ee8cc1Swenshuai.xi     _REG16_SET_MASK(&(_TSIOCtrl2->ACPU_CMD), u8Chid, TSIO2_ACPU_CMD_VC_ID_MASK, TSIO2_ACPU_CMD_VC_ID_SHIFT);
986*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrl2->ACPU_CMD), TSIO2_ACPU_CMD_CLR);
987*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrl2->ACPU_CMD), TSIO2_ACPU_CMD_RW);
988*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrl2->ACPU_CMD), TSIO2_ACPU_CMD_ACTIVE);
989*53ee8cc1Swenshuai.xi 
990*53ee8cc1Swenshuai.xi     //Set flag
991*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrl2->ACPU_FLAG), TSIO2_ACPU_FLAG_INTERRUPT_ENABLE);
992*53ee8cc1Swenshuai.xi     _REG16_SET_MASK(&(_TSIOCtrl2->ACPU_FLAG), 0x18, TSIO2_ACPU_FLAG_MOBF_MASK, TSIO2_ACPU_FLAG_MOBF_SHIFT);
993*53ee8cc1Swenshuai.xi     if (bSecurity)
994*53ee8cc1Swenshuai.xi     {
995*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSIOCtrl2->ACPU_FLAG), TSIO2_ACPU_FLAG_SECURE_FLAG);
996*53ee8cc1Swenshuai.xi     }
997*53ee8cc1Swenshuai.xi     else
998*53ee8cc1Swenshuai.xi     {
999*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSIOCtrl2->ACPU_FLAG), TSIO2_ACPU_FLAG_SECURE_FLAG);
1000*53ee8cc1Swenshuai.xi     }
1001*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrl2->ACPU_FLAG), TSIO2_ACPU_FLAG_DMA_END_CONTINUE_DMA);
1002*53ee8cc1Swenshuai.xi 
1003*53ee8cc1Swenshuai.xi     //Write Addr
1004*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&(_TSIOCtrl2->ACPU_WDATA), u32Addr);
1005*53ee8cc1Swenshuai.xi 
1006*53ee8cc1Swenshuai.xi     //Trigger
1007*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrl2->ACPU_ACTIVE), TSIO2_ACPU_ACTIVE);
1008*53ee8cc1Swenshuai.xi }
1009*53ee8cc1Swenshuai.xi 
HAL_TSIO_SGDMAOUT_VC_Close(MS_U8 u8Chid)1010*53ee8cc1Swenshuai.xi void HAL_TSIO_SGDMAOUT_VC_Close(MS_U8 u8Chid)
1011*53ee8cc1Swenshuai.xi {
1012*53ee8cc1Swenshuai.xi     //Set cmd
1013*53ee8cc1Swenshuai.xi     _REG16_SET_MASK(&(_TSIOCtrl2->ACPU_CMD), u8Chid, TSIO2_ACPU_CMD_VC_ID_MASK, TSIO2_ACPU_CMD_VC_ID_SHIFT);
1014*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrl2->ACPU_CMD), TSIO2_ACPU_CMD_RW);
1015*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrl2->ACPU_CMD), TSIO2_ACPU_CMD_CLR);
1016*53ee8cc1Swenshuai.xi     _REG16_CLR(&(_TSIOCtrl2->ACPU_CMD), TSIO2_ACPU_CMD_ACTIVE);
1017*53ee8cc1Swenshuai.xi 
1018*53ee8cc1Swenshuai.xi      //Trigger
1019*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrl2->ACPU_ACTIVE), TSIO2_ACPU_ACTIVE);
1020*53ee8cc1Swenshuai.xi }
1021*53ee8cc1Swenshuai.xi 
HAL_TSIO_SGDMAOUT_Start(void)1022*53ee8cc1Swenshuai.xi void HAL_TSIO_SGDMAOUT_Start(void)
1023*53ee8cc1Swenshuai.xi {
1024*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrl2->VCFSM_START), TSIO2_VCFSM_START);
1025*53ee8cc1Swenshuai.xi }
1026*53ee8cc1Swenshuai.xi 
HAL_TSIO_SGDMAOUT_IntRead(MS_U8 u8Chid,MS_U16 * u16Status)1027*53ee8cc1Swenshuai.xi void HAL_TSIO_SGDMAOUT_IntRead(MS_U8 u8Chid, MS_U16 *u16Status)
1028*53ee8cc1Swenshuai.xi {
1029*53ee8cc1Swenshuai.xi     MS_BOOL bINT = false;
1030*53ee8cc1Swenshuai.xi     MS_U64 VC_INT = (MS_U64)_HAL_REG16_R(&(_TSIOCtrl2->SGDMA_OUT_VC_INT[0]))+
1031*53ee8cc1Swenshuai.xi         ((MS_U64)_HAL_REG16_R(&(_TSIOCtrl2->SGDMA_OUT_VC_INT[1])) << 16)+
1032*53ee8cc1Swenshuai.xi         ((MS_U64)_HAL_REG16_R(&(_TSIOCtrl2->SGDMA_OUT_VC_INT[2])) << 32)+
1033*53ee8cc1Swenshuai.xi         ((MS_U64)_HAL_REG16_R(&(_TSIOCtrl2->SGDMA_OUT_VC_INT[3])) << 48);
1034*53ee8cc1Swenshuai.xi 
1035*53ee8cc1Swenshuai.xi     bINT = (VC_INT & ((MS_U64)(0x1) << u8Chid)) >> u8Chid;
1036*53ee8cc1Swenshuai.xi     if (bINT)
1037*53ee8cc1Swenshuai.xi     {
1038*53ee8cc1Swenshuai.xi         _REG16_SET_MASK(&(_TSIOCtrl2->SGDMA_OUT_VC_STATUS_SEL), u8Chid, TSIO2_SGDMA_OUT_VC_STATUS_SEL_MASK, TSIO2_SGDMA_OUT_VC_STATUS_SEL_SHIFT);
1039*53ee8cc1Swenshuai.xi         *u16Status = _HAL_REG16_R(&(_TSIOCtrl2->SGDMA_OUT_VC_STATUS));
1040*53ee8cc1Swenshuai.xi     }
1041*53ee8cc1Swenshuai.xi     else
1042*53ee8cc1Swenshuai.xi     {
1043*53ee8cc1Swenshuai.xi         *u16Status = 0;
1044*53ee8cc1Swenshuai.xi     }
1045*53ee8cc1Swenshuai.xi }
1046*53ee8cc1Swenshuai.xi 
HAL_TSIO_SGDMAOUT_IntRead_2(MS_U8 u8Chid,MS_U16 * u16Status)1047*53ee8cc1Swenshuai.xi void HAL_TSIO_SGDMAOUT_IntRead_2(MS_U8 u8Chid, MS_U16 *u16Status)
1048*53ee8cc1Swenshuai.xi {
1049*53ee8cc1Swenshuai.xi     _REG16_SET_MASK(&(_TSIOCtrl2->SGDMA_OUT_VC_STATUS_SEL), u8Chid, TSIO2_SGDMA_OUT_VC_STATUS_SEL_MASK, TSIO2_SGDMA_OUT_VC_STATUS_SEL_SHIFT);
1050*53ee8cc1Swenshuai.xi     *u16Status = _HAL_REG16_R(&(_TSIOCtrl2->SGDMA_OUT_VC_STATUS));
1051*53ee8cc1Swenshuai.xi }
1052*53ee8cc1Swenshuai.xi 
HAL_TSIO_SGDMAOUT_IntClr(MS_U8 u8Chid)1053*53ee8cc1Swenshuai.xi void HAL_TSIO_SGDMAOUT_IntClr(MS_U8 u8Chid)
1054*53ee8cc1Swenshuai.xi {
1055*53ee8cc1Swenshuai.xi     _REG16_SET_MASK(&(_TSIOCtrl2->SGDMA_OUT_INFO), u8Chid, TSIO2_SGDMA_OUT_VC_INT_VC_ID_MASK, TSIO2_SGDMA_OUT_VC_INT_VC_ID_SHIFT);
1056*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrl2->SGDMA_OUT_INFO), TSIO2_SGDMA_OUT_VC_INT_CLR);
1057*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrl2->SGDMA_OUT_CTRL), TSIO2_SGDMA_OUT_VC_INT_TRIGGER);
1058*53ee8cc1Swenshuai.xi }
1059*53ee8cc1Swenshuai.xi 
HAL_TSIO_SGDMAOUT_IntAll(void)1060*53ee8cc1Swenshuai.xi MS_U64 HAL_TSIO_SGDMAOUT_IntAll(void)
1061*53ee8cc1Swenshuai.xi {
1062*53ee8cc1Swenshuai.xi     MS_U64 VC_INT = (MS_U64)_HAL_REG16_R(&(_TSIOCtrl2->SGDMA_OUT_VC_INT[0]))+
1063*53ee8cc1Swenshuai.xi         ((MS_U64)_HAL_REG16_R(&(_TSIOCtrl2->SGDMA_OUT_VC_INT[1])) << 16)+
1064*53ee8cc1Swenshuai.xi         ((MS_U64)_HAL_REG16_R(&(_TSIOCtrl2->SGDMA_OUT_VC_INT[2])) << 32)+
1065*53ee8cc1Swenshuai.xi         ((MS_U64)_HAL_REG16_R(&(_TSIOCtrl2->SGDMA_OUT_VC_INT[3])) << 48);
1066*53ee8cc1Swenshuai.xi 
1067*53ee8cc1Swenshuai.xi     return VC_INT;
1068*53ee8cc1Swenshuai.xi }
1069*53ee8cc1Swenshuai.xi 
HAL_TSIO_SGDMAOUT_IntClrAll(void)1070*53ee8cc1Swenshuai.xi void HAL_TSIO_SGDMAOUT_IntClrAll(void)
1071*53ee8cc1Swenshuai.xi {
1072*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrl2->SGDMA_OUT_CTRL), TSIO2_SGDMA_OUT_INT_CLR);
1073*53ee8cc1Swenshuai.xi     _REG16_CLR(&(_TSIOCtrl2->SGDMA_OUT_CTRL), TSIO2_SGDMA_OUT_INT_CLR);
1074*53ee8cc1Swenshuai.xi }
1075*53ee8cc1Swenshuai.xi 
HAL_TSIO_SGDMAOUT_ReadSram(MS_U8 u8Chid,HAL_SGDMA_SRAM eSram,MS_BOOL bLSB)1076*53ee8cc1Swenshuai.xi MS_U32 HAL_TSIO_SGDMAOUT_ReadSram(MS_U8 u8Chid, HAL_SGDMA_SRAM eSram, MS_BOOL bLSB)
1077*53ee8cc1Swenshuai.xi {
1078*53ee8cc1Swenshuai.xi     MS_U32 u32Data = 0;
1079*53ee8cc1Swenshuai.xi     if (eSram >= HAL_SGDMA_SRAM_MAX)
1080*53ee8cc1Swenshuai.xi     {
1081*53ee8cc1Swenshuai.xi         return 0;
1082*53ee8cc1Swenshuai.xi     }
1083*53ee8cc1Swenshuai.xi 
1084*53ee8cc1Swenshuai.xi     //Set cmd
1085*53ee8cc1Swenshuai.xi     _REG16_SET_MASK(&(_TSIOCtrl2->ACPU_CMD), u8Chid, TSIO2_ACPU_CMD_VC_ID_MASK, TSIO2_ACPU_CMD_VC_ID_SHIFT);
1086*53ee8cc1Swenshuai.xi     _REG16_SET_MASK(&(_TSIOCtrl2->ACPU_CMD), eSram, TSIO2_ACPU_CMD_RD_POSITION_MASK, TSIO2_ACPU_CMD_RD_POSITION_SHIFT);
1087*53ee8cc1Swenshuai.xi     _REG16_CLR(&(_TSIOCtrl2->ACPU_CMD), TSIO2_ACPU_CMD_RW);
1088*53ee8cc1Swenshuai.xi     _REG16_CLR(&(_TSIOCtrl2->ACPU_CMD), TSIO2_ACPU_CMD_ACTIVE);
1089*53ee8cc1Swenshuai.xi     if (bLSB)
1090*53ee8cc1Swenshuai.xi     {
1091*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSIOCtrl2->ACPU_CMD), TSIO2_ACPU_CMD_RD_ADDR_LSB);
1092*53ee8cc1Swenshuai.xi     }
1093*53ee8cc1Swenshuai.xi     else
1094*53ee8cc1Swenshuai.xi     {
1095*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSIOCtrl2->ACPU_CMD), TSIO2_ACPU_CMD_RD_ADDR_LSB);
1096*53ee8cc1Swenshuai.xi     }
1097*53ee8cc1Swenshuai.xi 
1098*53ee8cc1Swenshuai.xi      //Trigger
1099*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrl2->ACPU_ACTIVE), TSIO2_ACPU_ACTIVE);
1100*53ee8cc1Swenshuai.xi 
1101*53ee8cc1Swenshuai.xi     u32Data = _HAL_REG32_R(&(_TSIOCtrl2->ACPU_RDATA));
1102*53ee8cc1Swenshuai.xi     return u32Data;
1103*53ee8cc1Swenshuai.xi }
1104*53ee8cc1Swenshuai.xi 
HAL_TSIO_SGDMAOUT_ReadDbg(HAL_SGDMAOUT_DBG eDbg)1105*53ee8cc1Swenshuai.xi MS_U16 HAL_TSIO_SGDMAOUT_ReadDbg(HAL_SGDMAOUT_DBG eDbg)
1106*53ee8cc1Swenshuai.xi {
1107*53ee8cc1Swenshuai.xi     MS_U16 u16Data = 0;
1108*53ee8cc1Swenshuai.xi 
1109*53ee8cc1Swenshuai.xi     if (eDbg >= HAL_SGDMAOUT_DBG_MAX)
1110*53ee8cc1Swenshuai.xi     {
1111*53ee8cc1Swenshuai.xi         return 0;
1112*53ee8cc1Swenshuai.xi     }
1113*53ee8cc1Swenshuai.xi 
1114*53ee8cc1Swenshuai.xi     _REG16_SET_MASK(&(_TSIOCtrl2->SGDMA_OUT_CTRL), eDbg, TSIO2_SGDMA_OUT_DBG_SEL_MASK, TSIO2_SGDMA_OUT_DBG_SEL_SHIFT);
1115*53ee8cc1Swenshuai.xi     u16Data = _HAL_REG16_R(&(_TSIOCtrl2->SGDMA_OUT_DBG));
1116*53ee8cc1Swenshuai.xi     return u16Data;
1117*53ee8cc1Swenshuai.xi }
1118*53ee8cc1Swenshuai.xi 
HAL_TSIO_SGDMAOUT_Pause(MS_BOOL bEnable)1119*53ee8cc1Swenshuai.xi void HAL_TSIO_SGDMAOUT_Pause(MS_BOOL bEnable)
1120*53ee8cc1Swenshuai.xi {
1121*53ee8cc1Swenshuai.xi     if (bEnable)
1122*53ee8cc1Swenshuai.xi     {
1123*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSIOCtrl2->SGDMA_OUT_CTRL), TSIO2_SGDMA_OUT_PAUSE);
1124*53ee8cc1Swenshuai.xi     }
1125*53ee8cc1Swenshuai.xi     else
1126*53ee8cc1Swenshuai.xi     {
1127*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSIOCtrl2->SGDMA_OUT_CTRL), TSIO2_SGDMA_OUT_PAUSE);
1128*53ee8cc1Swenshuai.xi     }
1129*53ee8cc1Swenshuai.xi }
1130*53ee8cc1Swenshuai.xi 
1131*53ee8cc1Swenshuai.xi //=======================================================
1132*53ee8cc1Swenshuai.xi // SVID table API
1133*53ee8cc1Swenshuai.xi //=======================================================
HAL_TSIO_SVIDTBL_Set(MS_U8 u8Tblid,MS_U8 u8Sid,MS_U8 u8Sourceid,MS_BOOL bLive)1134*53ee8cc1Swenshuai.xi void HAL_TSIO_SVIDTBL_Set(MS_U8 u8Tblid, MS_U8 u8Sid, MS_U8 u8Sourceid, MS_BOOL bLive)
1135*53ee8cc1Swenshuai.xi {
1136*53ee8cc1Swenshuai.xi     if (u8Tblid >= TSIO_SERVICE_NUM)
1137*53ee8cc1Swenshuai.xi     {
1138*53ee8cc1Swenshuai.xi         return;
1139*53ee8cc1Swenshuai.xi     }
1140*53ee8cc1Swenshuai.xi 
1141*53ee8cc1Swenshuai.xi     _REG16_SET_MASK(&(_TSIOCtrl1->SVID_SRCID[u8Tblid]), u8Sourceid, TSIO1_SOURCE_ID_MASK, TSIO1_SOURCE_ID_SHIFT);
1142*53ee8cc1Swenshuai.xi     _REG16_SET_MASK(&(_TSIOCtrl1->SVID_SRCID[u8Tblid]), u8Sid, TSIO1_SERVICE_ID_MASK, TSIO1_SERVICE_ID_SHIFT);
1143*53ee8cc1Swenshuai.xi 
1144*53ee8cc1Swenshuai.xi     MS_U8 u8Addr = u8Tblid / 8;
1145*53ee8cc1Swenshuai.xi     MS_U16 u16Shift = 0 ;
1146*53ee8cc1Swenshuai.xi     switch ((u8Tblid%8))
1147*53ee8cc1Swenshuai.xi     {
1148*53ee8cc1Swenshuai.xi         case 0:
1149*53ee8cc1Swenshuai.xi             u16Shift = TSIO1_LIVE_0_ENABLE;
1150*53ee8cc1Swenshuai.xi             break;
1151*53ee8cc1Swenshuai.xi         case 1:
1152*53ee8cc1Swenshuai.xi             u16Shift = TSIO1_LIVE_1_ENABLE;
1153*53ee8cc1Swenshuai.xi             break;
1154*53ee8cc1Swenshuai.xi         case 2:
1155*53ee8cc1Swenshuai.xi             u16Shift = TSIO1_LIVE_2_ENABLE;
1156*53ee8cc1Swenshuai.xi             break;
1157*53ee8cc1Swenshuai.xi         case 3:
1158*53ee8cc1Swenshuai.xi             u16Shift = TSIO1_LIVE_3_ENABLE;
1159*53ee8cc1Swenshuai.xi             break;
1160*53ee8cc1Swenshuai.xi         case 4:
1161*53ee8cc1Swenshuai.xi             u16Shift = TSIO1_LIVE_4_ENABLE;
1162*53ee8cc1Swenshuai.xi             break;
1163*53ee8cc1Swenshuai.xi         case 5:
1164*53ee8cc1Swenshuai.xi             u16Shift = TSIO1_LIVE_5_ENABLE;
1165*53ee8cc1Swenshuai.xi             break;
1166*53ee8cc1Swenshuai.xi         case 6:
1167*53ee8cc1Swenshuai.xi             u16Shift = TSIO1_LIVE_6_ENABLE;
1168*53ee8cc1Swenshuai.xi             break;
1169*53ee8cc1Swenshuai.xi         case 7:
1170*53ee8cc1Swenshuai.xi             u16Shift = TSIO1_LIVE_7_ENABLE;
1171*53ee8cc1Swenshuai.xi         default:
1172*53ee8cc1Swenshuai.xi             break;
1173*53ee8cc1Swenshuai.xi     }
1174*53ee8cc1Swenshuai.xi 
1175*53ee8cc1Swenshuai.xi     if (bLive)
1176*53ee8cc1Swenshuai.xi     {
1177*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSIOCtrl1->SVID_INFO[u8Addr]), u16Shift);
1178*53ee8cc1Swenshuai.xi     }
1179*53ee8cc1Swenshuai.xi     else
1180*53ee8cc1Swenshuai.xi     {
1181*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSIOCtrl1->SVID_INFO[u8Addr]), u16Shift);
1182*53ee8cc1Swenshuai.xi     }
1183*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrl1->SVID_SRCID[u8Tblid]), TSIO1_ENABLE);
1184*53ee8cc1Swenshuai.xi }
1185*53ee8cc1Swenshuai.xi 
1186*53ee8cc1Swenshuai.xi //=======================================================
1187*53ee8cc1Swenshuai.xi // CC API
1188*53ee8cc1Swenshuai.xi //=======================================================
1189*53ee8cc1Swenshuai.xi 
HAL_TSIO_CC_RxClr(void)1190*53ee8cc1Swenshuai.xi void HAL_TSIO_CC_RxClr(void)
1191*53ee8cc1Swenshuai.xi {
1192*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrl0->RX_CC_CNTRL), TSIO0_RX_CC_CLR);
1193*53ee8cc1Swenshuai.xi     _REG16_CLR(&(_TSIOCtrl0->RX_CC_CNTRL), TSIO0_RX_CC_CLR);
1194*53ee8cc1Swenshuai.xi }
1195*53ee8cc1Swenshuai.xi 
HAL_TSIO_CC_RxIntClr(void)1196*53ee8cc1Swenshuai.xi void HAL_TSIO_CC_RxIntClr(void)
1197*53ee8cc1Swenshuai.xi {
1198*53ee8cc1Swenshuai.xi     _REG16_CLR(&(_TSIOCtrl0->RX_CC_CNTRL), TSIO0_RX_CC_RECEIVE_EN);
1199*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrl0->RX_CC_CNTRL), TSIO0_RX_CC_INT_CLR);
1200*53ee8cc1Swenshuai.xi     _REG16_CLR(&(_TSIOCtrl0->RX_CC_CNTRL), TSIO0_RX_CC_INT_CLR);
1201*53ee8cc1Swenshuai.xi }
1202*53ee8cc1Swenshuai.xi 
HAL_TSIO_CC_RxEnable(MS_BOOL bEnable)1203*53ee8cc1Swenshuai.xi void HAL_TSIO_CC_RxEnable(MS_BOOL bEnable)
1204*53ee8cc1Swenshuai.xi {
1205*53ee8cc1Swenshuai.xi     if (bEnable)
1206*53ee8cc1Swenshuai.xi     {
1207*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSIOCtrl0->RX_CC_CNTRL), TSIO0_RX_CC_INT_EN);
1208*53ee8cc1Swenshuai.xi         _REG16_SET_MASK(&(_TSIOCtrl0->RX_CC_CNTRL),0xFF,TSIO0_RX_ERR_INT_EN_MASK,TSIO0_RX_ERR_INT_EN_SHIFT);
1209*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSIOCtrl0->RX_CC_CNTRL), TSIO0_RX_CC_RECEIVE_EN);
1210*53ee8cc1Swenshuai.xi     }
1211*53ee8cc1Swenshuai.xi     else
1212*53ee8cc1Swenshuai.xi     {
1213*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSIOCtrl0->RX_CC_CNTRL), TSIO0_RX_CC_CLR);
1214*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSIOCtrl0->RX_CC_CNTRL), TSIO0_RX_CC_CLR);
1215*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSIOCtrl0->RX_CC_CNTRL), TSIO0_RX_CC_RECEIVE_EN);
1216*53ee8cc1Swenshuai.xi     }
1217*53ee8cc1Swenshuai.xi }
1218*53ee8cc1Swenshuai.xi 
HAL_TSIO_CC_RxInt(void)1219*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSIO_CC_RxInt(void)
1220*53ee8cc1Swenshuai.xi {
1221*53ee8cc1Swenshuai.xi     MS_BOOL bRet = FALSE;
1222*53ee8cc1Swenshuai.xi     if ((_HAL_REG16_R(&(_TSIOCtrl0->RX_CC_STATUS)) & TSIO0_INT_RX_CC) == TSIO0_INT_RX_CC)
1223*53ee8cc1Swenshuai.xi     {
1224*53ee8cc1Swenshuai.xi         bRet = TRUE;
1225*53ee8cc1Swenshuai.xi     }
1226*53ee8cc1Swenshuai.xi     return bRet;
1227*53ee8cc1Swenshuai.xi }
1228*53ee8cc1Swenshuai.xi 
HAL_TSIO_CC_RxErrStatus(void)1229*53ee8cc1Swenshuai.xi MS_U16 HAL_TSIO_CC_RxErrStatus(void)
1230*53ee8cc1Swenshuai.xi {
1231*53ee8cc1Swenshuai.xi     return (_HAL_REG16_R(&(_TSIOCtrl0->RX_CC_STATUS)) & TSIO0_ERR_FLAG_MASK);
1232*53ee8cc1Swenshuai.xi }
1233*53ee8cc1Swenshuai.xi 
HAL_TSIO_CC_RxReadSize(void)1234*53ee8cc1Swenshuai.xi MS_U16 HAL_TSIO_CC_RxReadSize(void)
1235*53ee8cc1Swenshuai.xi {
1236*53ee8cc1Swenshuai.xi     return (_HAL_REG16_R(&(_TSIOCtrl0->RX_CC_SIZE)) & TSIO0_RX_CC_SIZE_MASK);
1237*53ee8cc1Swenshuai.xi }
1238*53ee8cc1Swenshuai.xi 
HAL_TSIO_CC_RxReadData(MS_U8 u8Addr)1239*53ee8cc1Swenshuai.xi MS_U32 HAL_TSIO_CC_RxReadData(MS_U8 u8Addr)
1240*53ee8cc1Swenshuai.xi {
1241*53ee8cc1Swenshuai.xi     _REG16_SET_MASK(&(_TSIOCtrl0->RX_CC_CNTRL2),u8Addr,TSIO0_RX_ACPU_ADDR_MASK,TSIO0_RX_ACPU_ADDR_SHIFT);
1242*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrl0->RX_CC_CNTRL2),TSIO0_RX_ACPU_ST);
1243*53ee8cc1Swenshuai.xi     _REG16_CLR(&(_TSIOCtrl0->RX_CC_CNTRL2),TSIO0_RX_ACPU_ST);
1244*53ee8cc1Swenshuai.xi 
1245*53ee8cc1Swenshuai.xi     return _HAL_REG32_R(&(_TSIOCtrl0->RX_CC_RDATA));
1246*53ee8cc1Swenshuai.xi }
1247*53ee8cc1Swenshuai.xi 
HAL_TSIO_CC_RxReadData_Fast(MS_U8 u8Addr)1248*53ee8cc1Swenshuai.xi MS_U32 HAL_TSIO_CC_RxReadData_Fast(MS_U8 u8Addr)
1249*53ee8cc1Swenshuai.xi {
1250*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrl0->RX_CC_CNTRL2),TSIO0_RX_ACPU_ADDR_CONT_TRI);
1251*53ee8cc1Swenshuai.xi     _REG16_SET_MASK(&(_TSIOCtrl0->RX_CC_CNTRL2),u8Addr,TSIO0_RX_ACPU_ADDR_MASK,TSIO0_RX_ACPU_ADDR_SHIFT);
1252*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrl0->RX_CC_CNTRL2),TSIO0_RX_ACPU_CONT);
1253*53ee8cc1Swenshuai.xi 
1254*53ee8cc1Swenshuai.xi     return _HAL_REG32_R(&(_TSIOCtrl0->RX_CC_RDATA));
1255*53ee8cc1Swenshuai.xi }
1256*53ee8cc1Swenshuai.xi 
HAL_TSIO_CC_RxReadData_FastEnable(MS_BOOL bEnable)1257*53ee8cc1Swenshuai.xi void HAL_TSIO_CC_RxReadData_FastEnable(MS_BOOL bEnable)
1258*53ee8cc1Swenshuai.xi {
1259*53ee8cc1Swenshuai.xi     if (bEnable)
1260*53ee8cc1Swenshuai.xi     {
1261*53ee8cc1Swenshuai.xi         _REG16_SET_MASK(&(_TSIOCtrl0->RX_CC_CNTRL2),0,TSIO0_RX_ACPU_ADDR_MASK,TSIO0_RX_ACPU_ADDR_SHIFT);
1262*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSIOCtrl0->RX_CC_CNTRL2),TSIO0_RX_ACPU_CONT);
1263*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSIOCtrl0->RX_CC_CNTRL2),TSIO0_RX_ACPU_ST);
1264*53ee8cc1Swenshuai.xi     }
1265*53ee8cc1Swenshuai.xi     else
1266*53ee8cc1Swenshuai.xi     {
1267*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSIOCtrl0->RX_CC_CNTRL2),TSIO0_RX_ACPU_CONT);
1268*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSIOCtrl0->RX_CC_CNTRL2),TSIO0_RX_ACPU_ST);
1269*53ee8cc1Swenshuai.xi     }
1270*53ee8cc1Swenshuai.xi }
1271*53ee8cc1Swenshuai.xi 
HAL_TSIO_CC_TxClr(void)1272*53ee8cc1Swenshuai.xi void HAL_TSIO_CC_TxClr(void)
1273*53ee8cc1Swenshuai.xi {
1274*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrl0->TX_CC_CNTRL), TSIO0_TX_CC_CLR);
1275*53ee8cc1Swenshuai.xi     _REG16_CLR(&(_TSIOCtrl0->TX_CC_CNTRL), TSIO0_TX_CC_CLR);
1276*53ee8cc1Swenshuai.xi }
1277*53ee8cc1Swenshuai.xi 
HAL_TSIO_CC_TxIntClr(void)1278*53ee8cc1Swenshuai.xi void HAL_TSIO_CC_TxIntClr(void)
1279*53ee8cc1Swenshuai.xi {
1280*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrl0->TX_CC_CNTRL), TSIO0_TX_CC_INT_CLR);
1281*53ee8cc1Swenshuai.xi     _REG16_CLR(&(_TSIOCtrl0->TX_CC_CNTRL), TSIO0_TX_CC_INT_CLR);
1282*53ee8cc1Swenshuai.xi }
1283*53ee8cc1Swenshuai.xi 
HAL_TSIO_CC_TxEnable(MS_BOOL bEnable)1284*53ee8cc1Swenshuai.xi void HAL_TSIO_CC_TxEnable(MS_BOOL bEnable)
1285*53ee8cc1Swenshuai.xi {
1286*53ee8cc1Swenshuai.xi     if (bEnable)
1287*53ee8cc1Swenshuai.xi     {
1288*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSIOCtrl0->TX_CC_CNTRL), TSIO0_TX_CC_INT_EN);
1289*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSIOCtrl0->TX_CC_CNTRL), TSIO0_TX_CC_START);
1290*53ee8cc1Swenshuai.xi     }
1291*53ee8cc1Swenshuai.xi     else
1292*53ee8cc1Swenshuai.xi     {
1293*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSIOCtrl0->TX_CC_CNTRL), TSIO0_TX_CC_CLR);
1294*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSIOCtrl0->TX_CC_CNTRL), TSIO0_TX_CC_CLR);
1295*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSIOCtrl0->TX_CC_CNTRL), TSIO0_TX_CC_START);
1296*53ee8cc1Swenshuai.xi     }
1297*53ee8cc1Swenshuai.xi }
1298*53ee8cc1Swenshuai.xi 
HAL_TSIO_CC_TxWriteData(MS_U8 u8Addr,MS_U32 u32Data)1299*53ee8cc1Swenshuai.xi void HAL_TSIO_CC_TxWriteData(MS_U8 u8Addr, MS_U32 u32Data)
1300*53ee8cc1Swenshuai.xi {
1301*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&(_TSIOCtrl0->TX_CC_WDATA), u32Data);
1302*53ee8cc1Swenshuai.xi     _REG16_SET_MASK(&(_TSIOCtrl0->TX_CC_CNTRL2),u8Addr,TSIO0_TX_ACPU_ADDR_MASK,TSIO0_TX_ACPU_ADDR_SHIFT);
1303*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrl0->TX_CC_CNTRL2),TSIO0_TX_ACPU_RW);
1304*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrl0->TX_CC_CNTRL2),TSIO0_TX_ACPU_ST);
1305*53ee8cc1Swenshuai.xi     _REG16_SET_MASK(&(_TSIOCtrl0->TX_CC_CNTRL2),0x00,TSIO0_TX_ACPU_ADDR_MASK,TSIO0_TX_ACPU_ADDR_SHIFT);
1306*53ee8cc1Swenshuai.xi     _REG16_CLR(&(_TSIOCtrl0->TX_CC_CNTRL2),TSIO0_TX_ACPU_ST);
1307*53ee8cc1Swenshuai.xi }
1308*53ee8cc1Swenshuai.xi 
HAL_TSIO_CC_TxWriteData_Fast(MS_U32 u32Data)1309*53ee8cc1Swenshuai.xi void HAL_TSIO_CC_TxWriteData_Fast(MS_U32 u32Data)
1310*53ee8cc1Swenshuai.xi {
1311*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&(_TSIOCtrl0->TX_CC_WDATA), u32Data);
1312*53ee8cc1Swenshuai.xi }
1313*53ee8cc1Swenshuai.xi 
HAL_TSIO_CC_TxWriteData_FastEnable(MS_BOOL bEnable)1314*53ee8cc1Swenshuai.xi void HAL_TSIO_CC_TxWriteData_FastEnable(MS_BOOL bEnable)
1315*53ee8cc1Swenshuai.xi {
1316*53ee8cc1Swenshuai.xi     if (bEnable)
1317*53ee8cc1Swenshuai.xi     {
1318*53ee8cc1Swenshuai.xi         _REG16_SET_MASK(&(_TSIOCtrl0->TX_CC_CNTRL2),0,TSIO0_TX_ACPU_ADDR_MASK,TSIO0_TX_ACPU_ADDR_SHIFT);
1319*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSIOCtrl0->TX_CC_CNTRL2),TSIO0_TX_ACPU_CONT);
1320*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSIOCtrl0->TX_CC_CNTRL2),TSIO0_TX_ACPU_RW);
1321*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSIOCtrl0->TX_CC_CNTRL2),TSIO0_TX_ACPU_ST);
1322*53ee8cc1Swenshuai.xi     }
1323*53ee8cc1Swenshuai.xi     else
1324*53ee8cc1Swenshuai.xi     {
1325*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSIOCtrl0->TX_CC_CNTRL2),TSIO0_TX_ACPU_CONT);
1326*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSIOCtrl0->TX_CC_CNTRL2),TSIO0_TX_ACPU_ST);
1327*53ee8cc1Swenshuai.xi     }
1328*53ee8cc1Swenshuai.xi }
1329*53ee8cc1Swenshuai.xi 
HAL_TSIO_CC_TxWriteSize(MS_U16 u16Size)1330*53ee8cc1Swenshuai.xi void HAL_TSIO_CC_TxWriteSize(MS_U16 u16Size)
1331*53ee8cc1Swenshuai.xi {
1332*53ee8cc1Swenshuai.xi     _REG16_SET_MASK(&(_TSIOCtrl0->TX_CC_SIZE),u16Size,TSIO0_CC_SIZE_MASK,TSIO0_CC_SIZE_SHIFT);
1333*53ee8cc1Swenshuai.xi }
1334*53ee8cc1Swenshuai.xi 
HAL_TSIO_CC_TxInt(void)1335*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSIO_CC_TxInt(void)
1336*53ee8cc1Swenshuai.xi {
1337*53ee8cc1Swenshuai.xi     MS_BOOL bRet = FALSE;
1338*53ee8cc1Swenshuai.xi     if ((_HAL_REG16_R(&(_TSIOCtrl0->TX_CC_STATUS)) & TSIO0_TX_CC_STATUS_INT_TX_CC) == TSIO0_TX_CC_STATUS_INT_TX_CC)
1339*53ee8cc1Swenshuai.xi     {
1340*53ee8cc1Swenshuai.xi         bRet = TRUE;
1341*53ee8cc1Swenshuai.xi     }
1342*53ee8cc1Swenshuai.xi     return bRet;
1343*53ee8cc1Swenshuai.xi }
1344*53ee8cc1Swenshuai.xi 
1345*53ee8cc1Swenshuai.xi //=======================================================
1346*53ee8cc1Swenshuai.xi // Loc Decrypt API
1347*53ee8cc1Swenshuai.xi //=======================================================
1348*53ee8cc1Swenshuai.xi 
HAL_TSIO_LOCDEC_Xiu_Lock(MS_U8 u8Xiu)1349*53ee8cc1Swenshuai.xi void HAL_TSIO_LOCDEC_Xiu_Lock(MS_U8 u8Xiu)
1350*53ee8cc1Swenshuai.xi {
1351*53ee8cc1Swenshuai.xi     _REG16_SET_MASK(&(_TSIOCtrlLOCDEC->XIU),u8Xiu,TSIO_LOCDEC_XIU_ID_MASK,TSIO_LOCDEC_XIU_ID_SHIFT);
1352*53ee8cc1Swenshuai.xi }
1353*53ee8cc1Swenshuai.xi 
HAL_TSIO_LOCDEC_Xiu_Unlock(void)1354*53ee8cc1Swenshuai.xi void HAL_TSIO_LOCDEC_Xiu_Unlock(void)
1355*53ee8cc1Swenshuai.xi {
1356*53ee8cc1Swenshuai.xi     _REG16_SET_MASK(&(_TSIOCtrlLOCDEC->XIU),0,TSIO_LOCDEC_XIU_ID_MASK,TSIO_LOCDEC_XIU_ID_SHIFT);
1357*53ee8cc1Swenshuai.xi }
1358*53ee8cc1Swenshuai.xi 
HAL_TSIO_LOCDEC_ScbFixRule(MS_BOOL bEnable)1359*53ee8cc1Swenshuai.xi void HAL_TSIO_LOCDEC_ScbFixRule(MS_BOOL bEnable)
1360*53ee8cc1Swenshuai.xi {
1361*53ee8cc1Swenshuai.xi     if (bEnable)
1362*53ee8cc1Swenshuai.xi     {
1363*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSIOCtrlLOCDEC->SCBFIXRULE),TSIO_LOCDEC_SCBFIXRULE);
1364*53ee8cc1Swenshuai.xi     }
1365*53ee8cc1Swenshuai.xi     else
1366*53ee8cc1Swenshuai.xi     {
1367*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSIOCtrlLOCDEC->SCBFIXRULE),TSIO_LOCDEC_SCBFIXRULE);
1368*53ee8cc1Swenshuai.xi     }
1369*53ee8cc1Swenshuai.xi }
1370*53ee8cc1Swenshuai.xi 
HAL_TSIO_LOCDEC_Key_Set(MS_U8 u8Sid,MS_U8 * pKey,MS_U16 u16KeySize,MS_BOOL bOddKey)1371*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSIO_LOCDEC_Key_Set( MS_U8 u8Sid, MS_U8 *pKey, MS_U16 u16KeySize, MS_BOOL bOddKey)
1372*53ee8cc1Swenshuai.xi {
1373*53ee8cc1Swenshuai.xi     MS_U16 u16Data = 0;
1374*53ee8cc1Swenshuai.xi     MS_S16 index = 0;
1375*53ee8cc1Swenshuai.xi     MS_U8 addr = 0;
1376*53ee8cc1Swenshuai.xi 
1377*53ee8cc1Swenshuai.xi     if (pKey == NULL || u16KeySize != TSIO_LOCDEC_KEY_LEN)
1378*53ee8cc1Swenshuai.xi     {
1379*53ee8cc1Swenshuai.xi         return FALSE;
1380*53ee8cc1Swenshuai.xi     }
1381*53ee8cc1Swenshuai.xi 
1382*53ee8cc1Swenshuai.xi     for (index = TSIO_LOCDEC_KEY_LEN-1; index >= 0; index-=2)
1383*53ee8cc1Swenshuai.xi     {
1384*53ee8cc1Swenshuai.xi         u16Data = (pKey[index-1]<<8) + pKey[index];
1385*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&(_TSIOCtrlLOCDEC->SW_KEY[addr]),u16Data);
1386*53ee8cc1Swenshuai.xi         addr++;
1387*53ee8cc1Swenshuai.xi     }
1388*53ee8cc1Swenshuai.xi 
1389*53ee8cc1Swenshuai.xi     _REG16_SET_MASK(&(_TSIOCtrlLOCDEC->CMD),u8Sid,TSIO_LOCDEC_CMD_SERVICE_ID_MASK,TSIO_LOCDEC_CMD_SERVICE_ID_SHIFT);
1390*53ee8cc1Swenshuai.xi 
1391*53ee8cc1Swenshuai.xi     if (bOddKey)
1392*53ee8cc1Swenshuai.xi     {
1393*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSIOCtrlLOCDEC->CMD), TSIO_LOCDEC_CMD_KEY_SEL);
1394*53ee8cc1Swenshuai.xi     }
1395*53ee8cc1Swenshuai.xi     else
1396*53ee8cc1Swenshuai.xi     {
1397*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSIOCtrlLOCDEC->CMD), TSIO_LOCDEC_CMD_KEY_SEL);
1398*53ee8cc1Swenshuai.xi     }
1399*53ee8cc1Swenshuai.xi 
1400*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrlLOCDEC->CMD), TSIO_LOCDEC_CMD_CMD);
1401*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrlLOCDEC->KT_GO), TSIO_LOCDEC_KT_GO);
1402*53ee8cc1Swenshuai.xi 
1403*53ee8cc1Swenshuai.xi     return TRUE;
1404*53ee8cc1Swenshuai.xi }
1405*53ee8cc1Swenshuai.xi 
HAL_TSIO_LOCDEC_KeySetDone(void)1406*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSIO_LOCDEC_KeySetDone(void)
1407*53ee8cc1Swenshuai.xi {
1408*53ee8cc1Swenshuai.xi     return (_HAL_REG16_R(&(_TSIOCtrlLOCDEC->KT_DONE)) & TSIO_LOCDEC_KT_DONE);
1409*53ee8cc1Swenshuai.xi }
1410*53ee8cc1Swenshuai.xi 
HAL_TSIO_LOCDEC_KeyEnable(MS_U8 u8Sid,MS_BOOL bEnable)1411*53ee8cc1Swenshuai.xi void HAL_TSIO_LOCDEC_KeyEnable(MS_U8 u8Sid, MS_BOOL bEnable)
1412*53ee8cc1Swenshuai.xi {
1413*53ee8cc1Swenshuai.xi     MS_U16 u16KeyEnableBit[4];
1414*53ee8cc1Swenshuai.xi 
1415*53ee8cc1Swenshuai.xi     u16KeyEnableBit[0] = _HAL_REG16_R(&(_TSIOCtrlLOCDEC->KEY_ENABLE_BIT[0]));
1416*53ee8cc1Swenshuai.xi     u16KeyEnableBit[1] = _HAL_REG16_R(&(_TSIOCtrlLOCDEC->KEY_ENABLE_BIT[1]));
1417*53ee8cc1Swenshuai.xi     u16KeyEnableBit[2] = _HAL_REG16_R(&(_TSIOCtrlLOCDEC->KEY_ENABLE_BIT[2]));
1418*53ee8cc1Swenshuai.xi     u16KeyEnableBit[3] = _HAL_REG16_R(&(_TSIOCtrlLOCDEC->KEY_ENABLE_BIT[3]));
1419*53ee8cc1Swenshuai.xi 
1420*53ee8cc1Swenshuai.xi     MS_U64 u64Mask = 0;
1421*53ee8cc1Swenshuai.xi     MS_U64 u64Data = u16KeyEnableBit[0] + ((MS_U64)u16KeyEnableBit[1] << 16)
1422*53ee8cc1Swenshuai.xi         + ((MS_U64)u16KeyEnableBit[2] << 32) + ((MS_U64)u16KeyEnableBit[3] << 48);
1423*53ee8cc1Swenshuai.xi 
1424*53ee8cc1Swenshuai.xi     if (bEnable)
1425*53ee8cc1Swenshuai.xi     {
1426*53ee8cc1Swenshuai.xi         u64Mask = (MS_U64)(0x1) << u8Sid;
1427*53ee8cc1Swenshuai.xi         u64Data |= u64Mask;
1428*53ee8cc1Swenshuai.xi     }
1429*53ee8cc1Swenshuai.xi     else
1430*53ee8cc1Swenshuai.xi     {
1431*53ee8cc1Swenshuai.xi         u64Mask = ~((MS_U64)(0x1) << u8Sid);
1432*53ee8cc1Swenshuai.xi         u64Data &= u64Mask;
1433*53ee8cc1Swenshuai.xi     }
1434*53ee8cc1Swenshuai.xi 
1435*53ee8cc1Swenshuai.xi     u16KeyEnableBit[0] = (u64Data & 0x000000000000FFFF);
1436*53ee8cc1Swenshuai.xi     u16KeyEnableBit[1] = (u64Data & 0x00000000FFFF0000)>>16;
1437*53ee8cc1Swenshuai.xi     u16KeyEnableBit[2] = (u64Data & 0x0000FFFF00000000)>>32;
1438*53ee8cc1Swenshuai.xi     u16KeyEnableBit[3] = (u64Data & 0xFFFF000000000000)>>48;
1439*53ee8cc1Swenshuai.xi 
1440*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSIOCtrlLOCDEC->KEY_ENABLE_BIT[0]), u16KeyEnableBit[0]);
1441*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSIOCtrlLOCDEC->KEY_ENABLE_BIT[1]), u16KeyEnableBit[1]);
1442*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSIOCtrlLOCDEC->KEY_ENABLE_BIT[2]), u16KeyEnableBit[2]);
1443*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSIOCtrlLOCDEC->KEY_ENABLE_BIT[3]), u16KeyEnableBit[3]);
1444*53ee8cc1Swenshuai.xi }
1445*53ee8cc1Swenshuai.xi 
HAL_TSIO_LOCDEC_PrivilegeSlotEnable(MS_U8 u8Sid,MS_BOOL bEnable)1446*53ee8cc1Swenshuai.xi void HAL_TSIO_LOCDEC_PrivilegeSlotEnable(MS_U8 u8Sid, MS_BOOL bEnable)
1447*53ee8cc1Swenshuai.xi {
1448*53ee8cc1Swenshuai.xi     MS_U16 u16PrivilegeBit[4];
1449*53ee8cc1Swenshuai.xi 
1450*53ee8cc1Swenshuai.xi     u16PrivilegeBit[0] = _HAL_REG16_R(&(_TSIOCtrlLOCDEC->SLOT_PRIVILEGE[0]));
1451*53ee8cc1Swenshuai.xi     u16PrivilegeBit[1] = _HAL_REG16_R(&(_TSIOCtrlLOCDEC->SLOT_PRIVILEGE[1]));
1452*53ee8cc1Swenshuai.xi     u16PrivilegeBit[2] = _HAL_REG16_R(&(_TSIOCtrlLOCDEC->SLOT_PRIVILEGE[2]));
1453*53ee8cc1Swenshuai.xi     u16PrivilegeBit[3] = _HAL_REG16_R(&(_TSIOCtrlLOCDEC->SLOT_PRIVILEGE[3]));
1454*53ee8cc1Swenshuai.xi 
1455*53ee8cc1Swenshuai.xi     MS_U64 u64Mask = 0;
1456*53ee8cc1Swenshuai.xi     MS_U64 u64Data = u16PrivilegeBit[0] + ((MS_U64)u16PrivilegeBit[1] << 16)
1457*53ee8cc1Swenshuai.xi         + ((MS_U64)u16PrivilegeBit[2] << 32) + ((MS_U64)u16PrivilegeBit[3] << 48);
1458*53ee8cc1Swenshuai.xi 
1459*53ee8cc1Swenshuai.xi     if (bEnable)
1460*53ee8cc1Swenshuai.xi     {
1461*53ee8cc1Swenshuai.xi         u64Mask = (MS_U64)(0x1) << u8Sid;
1462*53ee8cc1Swenshuai.xi         u64Data |= u64Mask;
1463*53ee8cc1Swenshuai.xi     }
1464*53ee8cc1Swenshuai.xi     else
1465*53ee8cc1Swenshuai.xi     {
1466*53ee8cc1Swenshuai.xi         u64Mask = ~((MS_U64)(0x1) << u8Sid);
1467*53ee8cc1Swenshuai.xi         u64Data &= u64Mask;
1468*53ee8cc1Swenshuai.xi     }
1469*53ee8cc1Swenshuai.xi 
1470*53ee8cc1Swenshuai.xi     u16PrivilegeBit[0] = (u64Data & 0x000000000000FFFF);
1471*53ee8cc1Swenshuai.xi     u16PrivilegeBit[1] = (u64Data & 0x00000000FFFF0000)>>16;
1472*53ee8cc1Swenshuai.xi     u16PrivilegeBit[2] = (u64Data & 0x0000FFFF00000000)>>32;
1473*53ee8cc1Swenshuai.xi     u16PrivilegeBit[3] = (u64Data & 0xFFFF000000000000)>>48;
1474*53ee8cc1Swenshuai.xi 
1475*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSIOCtrlLOCDEC->SLOT_PRIVILEGE[0]), u16PrivilegeBit[0]);
1476*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSIOCtrlLOCDEC->SLOT_PRIVILEGE[1]), u16PrivilegeBit[1]);
1477*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSIOCtrlLOCDEC->SLOT_PRIVILEGE[2]), u16PrivilegeBit[2]);
1478*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSIOCtrlLOCDEC->SLOT_PRIVILEGE[3]), u16PrivilegeBit[3]);
1479*53ee8cc1Swenshuai.xi }
1480*53ee8cc1Swenshuai.xi 
HAL_TSIO_LOCDEC_SecureSlotEnable(MS_U8 u8Sid,MS_BOOL bEnable)1481*53ee8cc1Swenshuai.xi void HAL_TSIO_LOCDEC_SecureSlotEnable(MS_U8 u8Sid, MS_BOOL bEnable)
1482*53ee8cc1Swenshuai.xi {
1483*53ee8cc1Swenshuai.xi     MS_U16 u16SecureBit[4];
1484*53ee8cc1Swenshuai.xi 
1485*53ee8cc1Swenshuai.xi     u16SecureBit[0] = _HAL_REG16_R(&(_TSIOCtrlLOCDEC->SLOT_SECURE[0]));
1486*53ee8cc1Swenshuai.xi     u16SecureBit[1] = _HAL_REG16_R(&(_TSIOCtrlLOCDEC->SLOT_SECURE[1]));
1487*53ee8cc1Swenshuai.xi     u16SecureBit[2] = _HAL_REG16_R(&(_TSIOCtrlLOCDEC->SLOT_SECURE[2]));
1488*53ee8cc1Swenshuai.xi     u16SecureBit[3] = _HAL_REG16_R(&(_TSIOCtrlLOCDEC->SLOT_SECURE[3]));
1489*53ee8cc1Swenshuai.xi 
1490*53ee8cc1Swenshuai.xi     MS_U64 u64Mask = 0;
1491*53ee8cc1Swenshuai.xi     MS_U64 u64Data = u16SecureBit[0] + ((MS_U64)u16SecureBit[1] << 16)
1492*53ee8cc1Swenshuai.xi         + ((MS_U64)u16SecureBit[2] << 32) + ((MS_U64)u16SecureBit[3] << 48);
1493*53ee8cc1Swenshuai.xi 
1494*53ee8cc1Swenshuai.xi     if (bEnable)
1495*53ee8cc1Swenshuai.xi     {
1496*53ee8cc1Swenshuai.xi         u64Mask = (MS_U64)(0x1) << u8Sid;
1497*53ee8cc1Swenshuai.xi         u64Data |= u64Mask;
1498*53ee8cc1Swenshuai.xi     }
1499*53ee8cc1Swenshuai.xi     else
1500*53ee8cc1Swenshuai.xi     {
1501*53ee8cc1Swenshuai.xi         u64Mask = ~((MS_U64)(0x1) << u8Sid);
1502*53ee8cc1Swenshuai.xi         u64Data &= u64Mask;
1503*53ee8cc1Swenshuai.xi     }
1504*53ee8cc1Swenshuai.xi 
1505*53ee8cc1Swenshuai.xi     u16SecureBit[0] = (u64Data & 0x000000000000FFFF);
1506*53ee8cc1Swenshuai.xi     u16SecureBit[1] = (u64Data & 0x00000000FFFF0000)>>16;
1507*53ee8cc1Swenshuai.xi     u16SecureBit[2] = (u64Data & 0x0000FFFF00000000)>>32;
1508*53ee8cc1Swenshuai.xi     u16SecureBit[3] = (u64Data & 0xFFFF000000000000)>>48;
1509*53ee8cc1Swenshuai.xi 
1510*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSIOCtrlLOCDEC->SLOT_SECURE[0]), u16SecureBit[0]);
1511*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSIOCtrlLOCDEC->SLOT_SECURE[1]), u16SecureBit[1]);
1512*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSIOCtrlLOCDEC->SLOT_SECURE[2]), u16SecureBit[2]);
1513*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSIOCtrlLOCDEC->SLOT_SECURE[3]), u16SecureBit[3]);
1514*53ee8cc1Swenshuai.xi }
1515*53ee8cc1Swenshuai.xi 
HAL_TSIO_LOCDEC_SetSWKeyProperty(MS_U32 keyProperty)1516*53ee8cc1Swenshuai.xi void HAL_TSIO_LOCDEC_SetSWKeyProperty(MS_U32 keyProperty)
1517*53ee8cc1Swenshuai.xi {
1518*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&(_TSIOCtrlLOCDEC->SW_KEY_PROPERTY), keyProperty);
1519*53ee8cc1Swenshuai.xi }
1520*53ee8cc1Swenshuai.xi 
1521*53ee8cc1Swenshuai.xi //=======================================================
1522*53ee8cc1Swenshuai.xi // Get Infomation API
1523*53ee8cc1Swenshuai.xi //=======================================================
HAL_TSIO_GetLoselockcnt(void)1524*53ee8cc1Swenshuai.xi MS_U16 HAL_TSIO_GetLoselockcnt(void)
1525*53ee8cc1Swenshuai.xi {
1526*53ee8cc1Swenshuai.xi     MS_U16 u16rdata = 0;
1527*53ee8cc1Swenshuai.xi     u16rdata = _HAL_REG16_R(&(_TSIOCtrl1->LOSE_LOCK_CNT));
1528*53ee8cc1Swenshuai.xi     return u16rdata;
1529*53ee8cc1Swenshuai.xi }
1530*53ee8cc1Swenshuai.xi 
1531*53ee8cc1Swenshuai.xi //=======================================================
1532*53ee8cc1Swenshuai.xi // Bit training API
1533*53ee8cc1Swenshuai.xi //=======================================================
HAL_TSIO_Bittraining_init(void)1534*53ee8cc1Swenshuai.xi void HAL_TSIO_Bittraining_init(void)
1535*53ee8cc1Swenshuai.xi {
1536*53ee8cc1Swenshuai.xi     ANALOG_PHASE_SETTING *Setting = &SETTING[u8Phasetable][0];
1537*53ee8cc1Swenshuai.xi     _REG16_SET_MASK(&(_TSIOCtrl1->CHG_PH_STABLE_TIME), ANALOG_PHASE_GAP, TSIO1_CHG_PH_STABLE_TIME_GUARD_PH_MASK, TSIO1_CHG_PH_STABLE_TIME_GUARD_PH_SHIFT);
1538*53ee8cc1Swenshuai.xi     MsOS_DelayTask(1);
1539*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrl1->CHG_PH_STABLE_TIME),TSIO1_CHG_PH_STABLE_TIME_GUARD_PH_LOAD);
1540*53ee8cc1Swenshuai.xi     MsOS_DelayTask(1);
1541*53ee8cc1Swenshuai.xi     _REG16_CLR(&(_TSIOCtrl1->CHG_PH_STABLE_TIME),TSIO1_CHG_PH_STABLE_TIME_GUARD_PH_LOAD);
1542*53ee8cc1Swenshuai.xi     MsOS_DelayTask(1);
1543*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSIOCtrl1->BTRAIN_CONFIG3), 0x8000);
1544*53ee8cc1Swenshuai.xi     MsOS_DelayTask(1);
1545*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSIOCtrl1->BTRAIN_CONFIG0), 0x8010);
1546*53ee8cc1Swenshuai.xi     MsOS_DelayTask(1);
1547*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSIOCtrl1->BTRAIN_CONFIG0), 0x0010);
1548*53ee8cc1Swenshuai.xi     MsOS_DelayTask(1);
1549*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSIOCtrl1->BTRAIN_CONFIG3), 0x8010);
1550*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrl1->BTRAIN_CONFIG3), TSIO1_PH_INFO_SEL);
1551*53ee8cc1Swenshuai.xi     MsOS_DelayTask(1);
1552*53ee8cc1Swenshuai.xi     //_REG16_SET(&(_TSIOCtrl1->BTRAIN_CONFIG4), TSIO1_BTRAIN_CONFIG4_DISABLE_BITTRAIN);
1553*53ee8cc1Swenshuai.xi     //====skew1====
1554*53ee8cc1Swenshuai.xi     //Coarse
1555*53ee8cc1Swenshuai.xi     _REG16_SET_MASK(&(_TSIOCtrlPHY->TSIO_PHY_24), Setting[11].u8Corse,
1556*53ee8cc1Swenshuai.xi                     TSIO_PHY_24_LPLL_SKEW1_COARSE_MASK, TSIO_PHY_24_LPLL_SKEW1_COARSE_SHIFT);
1557*53ee8cc1Swenshuai.xi     MsOS_DelayTask(1);
1558*53ee8cc1Swenshuai.xi     //Fine
1559*53ee8cc1Swenshuai.xi     _REG16_SET_MASK(&(_TSIOCtrlPHY->TSIO_PHY_23), Setting[11].u8Fine,
1560*53ee8cc1Swenshuai.xi                     TSIO_PHY_23_LPLL_SKEW1_FINE_MASK, TSIO_PHY_23_LPLL_SKEW1_FINE_SHIFT);
1561*53ee8cc1Swenshuai.xi     MsOS_DelayTask(1);
1562*53ee8cc1Swenshuai.xi     //Delay1t
1563*53ee8cc1Swenshuai.xi     if (Setting[11].u8Delay1T)
1564*53ee8cc1Swenshuai.xi     {
1565*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSIOCtrlPHY->TSIO_PHY_20), TSIO_PHY_20_LPLL_SEL_SKEW1_DELAYlt);
1566*53ee8cc1Swenshuai.xi     }
1567*53ee8cc1Swenshuai.xi     else
1568*53ee8cc1Swenshuai.xi     {
1569*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSIOCtrlPHY->TSIO_PHY_20), TSIO_PHY_20_LPLL_SEL_SKEW1_DELAYlt);
1570*53ee8cc1Swenshuai.xi     }
1571*53ee8cc1Swenshuai.xi     MsOS_DelayTask(1);
1572*53ee8cc1Swenshuai.xi }
1573*53ee8cc1Swenshuai.xi 
HAL_TSIO_Bittraining_init_dynamic(void)1574*53ee8cc1Swenshuai.xi void HAL_TSIO_Bittraining_init_dynamic(void)
1575*53ee8cc1Swenshuai.xi {
1576*53ee8cc1Swenshuai.xi     _REG16_SET_MASK(&(_TSIOCtrlPHY->TSIO_PHY_18), 0x20,TSIO_PHY_18_TEST_TSIO_MASK, TSIO_PHY_18_TEST_TSIO_SHIFT); // loopback
1577*53ee8cc1Swenshuai.xi     MsOS_DelayTask(1);
1578*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSIOCtrl0->AD_TX_CONFIG0), 0x0288);
1579*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSIOCtrl0->PRBS_CONFIG0), 0x1007);
1580*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSIOCtrl0->AD_RX_CONFIG0), 0x0000);
1581*53ee8cc1Swenshuai.xi     MsOS_DelayTask(1);
1582*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSIOCtrl1->BTRAIN_CONFIG0), 0x9010);
1583*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSIOCtrl1->BTRAIN_CONFIG0), 0x1010);
1584*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSIOCtrl1->BTRAIN_CONFIG3), 0x8010);
1585*53ee8cc1Swenshuai.xi     MsOS_DelayTask(1);
1586*53ee8cc1Swenshuai.xi }
1587*53ee8cc1Swenshuai.xi 
HAL_TSIO_Bittraining_Getremapstate(void)1588*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSIO_Bittraining_Getremapstate(void)
1589*53ee8cc1Swenshuai.xi {
1590*53ee8cc1Swenshuai.xi     MS_U16 u16Data = 0;
1591*53ee8cc1Swenshuai.xi     MS_BOOL bRet = 0;
1592*53ee8cc1Swenshuai.xi     u16Data = _HAL_REG16_R(&(_TSIOCtrl0->BTRAIN_ST_0));
1593*53ee8cc1Swenshuai.xi 
1594*53ee8cc1Swenshuai.xi     bRet = ((u16Data & TSIO0_BTRAIN_ST_0_CHG_PH_START_REMAP) >> TSIO0_BTRAIN_ST_0_CHG_PH_START_REMAP_SHIFT);
1595*53ee8cc1Swenshuai.xi     return bRet;
1596*53ee8cc1Swenshuai.xi }
1597*53ee8cc1Swenshuai.xi 
HAL_TSIO_Bittraining_Setvalue(MS_BOOL bEarly,MS_BOOL bLate)1598*53ee8cc1Swenshuai.xi void HAL_TSIO_Bittraining_Setvalue(MS_BOOL bEarly, MS_BOOL bLate)
1599*53ee8cc1Swenshuai.xi {
1600*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrl1->BTRAIN_CONFIG3), TSIO1_DEBUG_REG_LOAD);
1601*53ee8cc1Swenshuai.xi     //_REG16_SET(&(_TSIOCtrl1->BTRAIN_CONFIG3), TSIO1_SW_CH_PH_REMAP);
1602*53ee8cc1Swenshuai.xi     if (bEarly)
1603*53ee8cc1Swenshuai.xi     {
1604*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSIOCtrl1->BTRAIN_CONFIG3), TSIO1_SW_EARLY);
1605*53ee8cc1Swenshuai.xi     }
1606*53ee8cc1Swenshuai.xi     else
1607*53ee8cc1Swenshuai.xi     {
1608*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSIOCtrl1->BTRAIN_CONFIG3), TSIO1_SW_EARLY);
1609*53ee8cc1Swenshuai.xi     }
1610*53ee8cc1Swenshuai.xi     if (bLate)
1611*53ee8cc1Swenshuai.xi     {
1612*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSIOCtrl1->BTRAIN_CONFIG3), TSIO1_SW_LATE);
1613*53ee8cc1Swenshuai.xi     }
1614*53ee8cc1Swenshuai.xi     else
1615*53ee8cc1Swenshuai.xi     {
1616*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSIOCtrl1->BTRAIN_CONFIG3), TSIO1_SW_LATE);
1617*53ee8cc1Swenshuai.xi     }
1618*53ee8cc1Swenshuai.xi     MsOS_DelayTaskUs(1);
1619*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrl1->BTRAIN_CONFIG3), TSIO1_SW_CHG_PH_DONE);
1620*53ee8cc1Swenshuai.xi     MsOS_DelayTaskUs(1);
1621*53ee8cc1Swenshuai.xi     _REG16_CLR(&(_TSIOCtrl1->BTRAIN_CONFIG3), TSIO1_SW_CHG_PH_DONE);
1622*53ee8cc1Swenshuai.xi     MsOS_DelayTaskUs(1);
1623*53ee8cc1Swenshuai.xi }
1624*53ee8cc1Swenshuai.xi 
HAL_TSIO_Bittraining_GetPhase(MS_U8 u8Phase)1625*53ee8cc1Swenshuai.xi MS_U8 HAL_TSIO_Bittraining_GetPhase(MS_U8 u8Phase)
1626*53ee8cc1Swenshuai.xi {
1627*53ee8cc1Swenshuai.xi     MS_U16 u16Data = 0;
1628*53ee8cc1Swenshuai.xi     MS_U8 u8Ret = 0;
1629*53ee8cc1Swenshuai.xi 
1630*53ee8cc1Swenshuai.xi     //0: phase, 1: eraly, 2: late
1631*53ee8cc1Swenshuai.xi     _REG16_SET_MASK(&(_TSIOCtrl1->BTRAIN_CONFIG3), u8Phase, TSIO1_CHANNEL_SEL_MASK, TSIO1_CHANNEL_SEL_SHIFT);
1632*53ee8cc1Swenshuai.xi     MsOS_DelayTask(1);
1633*53ee8cc1Swenshuai.xi     u16Data = _HAL_REG16_R(&(_TSIOCtrl0->PH_INFO_2));
1634*53ee8cc1Swenshuai.xi     u8Ret = (u16Data & TSIO0_PH_INFO_2_REG_PHASE_MASK) >> TSIO0_PH_INFO_2_REG_PHASE_SHIFT;
1635*53ee8cc1Swenshuai.xi     return u8Ret;
1636*53ee8cc1Swenshuai.xi }
1637*53ee8cc1Swenshuai.xi 
HAL_TSIO_Bittraining_GetElinfo(MS_BOOL bEarly)1638*53ee8cc1Swenshuai.xi void HAL_TSIO_Bittraining_GetElinfo(MS_BOOL bEarly)
1639*53ee8cc1Swenshuai.xi {
1640*53ee8cc1Swenshuai.xi     MS_U16 u16Data[3] = {0};
1641*53ee8cc1Swenshuai.xi 
1642*53ee8cc1Swenshuai.xi     if (bEarly)
1643*53ee8cc1Swenshuai.xi     {
1644*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSIOCtrl1->BTRAIN_CONFIG3), TSIO1_EL_INFO_SEL);
1645*53ee8cc1Swenshuai.xi     }
1646*53ee8cc1Swenshuai.xi     else
1647*53ee8cc1Swenshuai.xi     {
1648*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSIOCtrl1->BTRAIN_CONFIG3), TSIO1_EL_INFO_SEL);
1649*53ee8cc1Swenshuai.xi     }
1650*53ee8cc1Swenshuai.xi     MsOS_DelayTask(1);
1651*53ee8cc1Swenshuai.xi 
1652*53ee8cc1Swenshuai.xi     u16Data[0] = _HAL_REG16_R(&(_TSIOCtrl0->EL_INFO[0]));
1653*53ee8cc1Swenshuai.xi     u16Data[1] = _HAL_REG16_R(&(_TSIOCtrl0->EL_INFO[1]));
1654*53ee8cc1Swenshuai.xi     u16Data[2] = _HAL_REG16_R(&(_TSIOCtrl0->EL_INFO[2]));
1655*53ee8cc1Swenshuai.xi 
1656*53ee8cc1Swenshuai.xi     HAL_TSIO_DBGMSG(E_HAL_TSIO_DBG_LEVEL_TRACE, printf("[0x75][0x74][0x73] = [%04X][%04X][%04X]\n",
1657*53ee8cc1Swenshuai.xi         u16Data[2], u16Data[1], u16Data[0]));
1658*53ee8cc1Swenshuai.xi }
1659*53ee8cc1Swenshuai.xi 
HAL_TSIO_Bittraining_GetPhaseinfo(void)1660*53ee8cc1Swenshuai.xi void HAL_TSIO_Bittraining_GetPhaseinfo(void)
1661*53ee8cc1Swenshuai.xi {
1662*53ee8cc1Swenshuai.xi     MS_U16 u16Data[4] = {0};
1663*53ee8cc1Swenshuai.xi 
1664*53ee8cc1Swenshuai.xi     MsOS_DelayTask(1);
1665*53ee8cc1Swenshuai.xi     u16Data[0] = _HAL_REG16_R(&(_TSIOCtrl0->PH_INFO_0));
1666*53ee8cc1Swenshuai.xi     u16Data[1] = _HAL_REG16_R(&(_TSIOCtrl0->PH_INFO_1));
1667*53ee8cc1Swenshuai.xi     u16Data[2] = _HAL_REG16_R(&(_TSIOCtrl0->PH_INFO_2));
1668*53ee8cc1Swenshuai.xi     u16Data[3] = _HAL_REG16_R(&(_TSIOCtrl0->BTRAIN_ST_0));
1669*53ee8cc1Swenshuai.xi 
1670*53ee8cc1Swenshuai.xi     HAL_TSIO_DBGMSG(E_HAL_TSIO_DBG_LEVEL_TRACE, printf("[0x70][0x71][0x72][0x79] = [%04X][%04X][%04X][%04X]\n",
1671*53ee8cc1Swenshuai.xi         u16Data[0], u16Data[1], u16Data[2], u16Data[3]));
1672*53ee8cc1Swenshuai.xi }
1673*53ee8cc1Swenshuai.xi 
HAL_TSIO_Bittraining_CheckPrbsErrcnt(void)1674*53ee8cc1Swenshuai.xi MS_U16 HAL_TSIO_Bittraining_CheckPrbsErrcnt(void)
1675*53ee8cc1Swenshuai.xi {
1676*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSIOCtrl0->PRBS_CONFIG0), 0x1000);
1677*53ee8cc1Swenshuai.xi     MsOS_DelayTask(1);
1678*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSIOCtrl0->PRBS_CONFIG0), 0x1007);
1679*53ee8cc1Swenshuai.xi     MsOS_DelayTask(1);
1680*53ee8cc1Swenshuai.xi 
1681*53ee8cc1Swenshuai.xi     return _HAL_REG16_R(&(_TSIOCtrl0->DP_PHY_PRBS_ERRCNT));
1682*53ee8cc1Swenshuai.xi }
1683*53ee8cc1Swenshuai.xi 
HAL_TSIO_Int_Bittraining_Enable(MS_BOOL bEnable)1684*53ee8cc1Swenshuai.xi void HAL_TSIO_Int_Bittraining_Enable(MS_BOOL bEnable)
1685*53ee8cc1Swenshuai.xi {
1686*53ee8cc1Swenshuai.xi     if (bEnable)
1687*53ee8cc1Swenshuai.xi     {
1688*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSIOCtrl1->BTRAIN_INT_EN), TSIO1_BTRAIN_INT_EN);
1689*53ee8cc1Swenshuai.xi     }
1690*53ee8cc1Swenshuai.xi     else
1691*53ee8cc1Swenshuai.xi     {
1692*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSIOCtrl1->BTRAIN_INT_EN), TSIO1_BTRAIN_INT_EN);
1693*53ee8cc1Swenshuai.xi     }
1694*53ee8cc1Swenshuai.xi }
1695*53ee8cc1Swenshuai.xi 
HAL_TSIO_Int_Bittraining_Clear(void)1696*53ee8cc1Swenshuai.xi void HAL_TSIO_Int_Bittraining_Clear(void)
1697*53ee8cc1Swenshuai.xi {
1698*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrl1->BTRAIN_CONFIG3), TSIO1_BTRAIN_INT_CLR);
1699*53ee8cc1Swenshuai.xi     MsOS_DelayTask(1);
1700*53ee8cc1Swenshuai.xi     _REG16_CLR(&(_TSIOCtrl1->BTRAIN_CONFIG3), TSIO1_BTRAIN_INT_CLR);
1701*53ee8cc1Swenshuai.xi     MsOS_DelayTask(1);
1702*53ee8cc1Swenshuai.xi }
1703*53ee8cc1Swenshuai.xi 
HAL_TSIO_Int_Bittraining_Read(void)1704*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSIO_Int_Bittraining_Read(void)
1705*53ee8cc1Swenshuai.xi {
1706*53ee8cc1Swenshuai.xi     MS_U16 u16Data = 0;
1707*53ee8cc1Swenshuai.xi     MS_BOOL bRet = FALSE;
1708*53ee8cc1Swenshuai.xi     u16Data = _HAL_REG16_R(&(_TSIOCtrl1->BTRAIN_INT_STATUS));
1709*53ee8cc1Swenshuai.xi 
1710*53ee8cc1Swenshuai.xi     if (u16Data & TSIO1_GUARD_REACH_MIN)
1711*53ee8cc1Swenshuai.xi     {
1712*53ee8cc1Swenshuai.xi         bRet = TRUE;
1713*53ee8cc1Swenshuai.xi     }
1714*53ee8cc1Swenshuai.xi 
1715*53ee8cc1Swenshuai.xi     return bRet;
1716*53ee8cc1Swenshuai.xi }
1717*53ee8cc1Swenshuai.xi 
HAL_TSIO_DBG_Read(MS_U16 u16Dbg)1718*53ee8cc1Swenshuai.xi MS_U32 HAL_TSIO_DBG_Read(MS_U16 u16Dbg)
1719*53ee8cc1Swenshuai.xi {
1720*53ee8cc1Swenshuai.xi     MS_U32 u32Data = 0;
1721*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSIOCtrl1->TSIO_DBG_SEL), u16Dbg);
1722*53ee8cc1Swenshuai.xi     u32Data = _HAL_REG32_R(&(_TSIOCtrl1->TSIO_DEBUG));
1723*53ee8cc1Swenshuai.xi     return u32Data;
1724*53ee8cc1Swenshuai.xi }
1725*53ee8cc1Swenshuai.xi 
1726*53ee8cc1Swenshuai.xi //=======================================================
1727*53ee8cc1Swenshuai.xi // Interrupt API
1728*53ee8cc1Swenshuai.xi //=======================================================
HAL_TSIO_Int_Operation_Read(void)1729*53ee8cc1Swenshuai.xi MS_BOOL HAL_TSIO_Int_Operation_Read(void)
1730*53ee8cc1Swenshuai.xi {
1731*53ee8cc1Swenshuai.xi     MS_U16 u16Data = 0;
1732*53ee8cc1Swenshuai.xi     MS_BOOL bRet = FALSE;
1733*53ee8cc1Swenshuai.xi     u16Data = _HAL_REG16_R(&(_TSIOCtrl0->PUH_STATUS0));
1734*53ee8cc1Swenshuai.xi 
1735*53ee8cc1Swenshuai.xi     if (u16Data & TSIO0_PUH_STATUS0_OPERATION)
1736*53ee8cc1Swenshuai.xi     {
1737*53ee8cc1Swenshuai.xi         bRet = TRUE;
1738*53ee8cc1Swenshuai.xi     }
1739*53ee8cc1Swenshuai.xi 
1740*53ee8cc1Swenshuai.xi     return TRUE;
1741*53ee8cc1Swenshuai.xi }
1742*53ee8cc1Swenshuai.xi 
HAL_TSIO_Int_Operation_Enable(MS_BOOL bEnable)1743*53ee8cc1Swenshuai.xi void HAL_TSIO_Int_Operation_Enable(MS_BOOL bEnable)
1744*53ee8cc1Swenshuai.xi {
1745*53ee8cc1Swenshuai.xi     if (bEnable)
1746*53ee8cc1Swenshuai.xi     {
1747*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSIOCtrl0->PUH_CONFIG2), TSIO0_PUH_CONFIG2_OPERATION_START_EN);
1748*53ee8cc1Swenshuai.xi     }
1749*53ee8cc1Swenshuai.xi     else
1750*53ee8cc1Swenshuai.xi     {
1751*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSIOCtrl0->PUH_CONFIG2), TSIO0_PUH_CONFIG2_OPERATION_START_EN);
1752*53ee8cc1Swenshuai.xi     }
1753*53ee8cc1Swenshuai.xi }
1754*53ee8cc1Swenshuai.xi 
HAL_TSIO_Int_Operation_Clear(void)1755*53ee8cc1Swenshuai.xi void HAL_TSIO_Int_Operation_Clear(void)
1756*53ee8cc1Swenshuai.xi {
1757*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrl0->PUH_CONFIG2), TSIO0_PUH_CONFIG2_OPERATION_START_CLR);
1758*53ee8cc1Swenshuai.xi     _REG16_CLR(&(_TSIOCtrl0->PUH_CONFIG2), TSIO0_PUH_CONFIG2_OPERATION_START_CLR);
1759*53ee8cc1Swenshuai.xi }
1760*53ee8cc1Swenshuai.xi 
1761*53ee8cc1Swenshuai.xi //=======================================================
1762*53ee8cc1Swenshuai.xi // Analog phase API
1763*53ee8cc1Swenshuai.xi //=======================================================
1764*53ee8cc1Swenshuai.xi 
HAL_TSIO_Analogphase_Pllreset(void)1765*53ee8cc1Swenshuai.xi void HAL_TSIO_Analogphase_Pllreset(void)
1766*53ee8cc1Swenshuai.xi {
1767*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrlPHY->TSIO_PHY_20), TSIO_PHY_20_LPLL_PD);
1768*53ee8cc1Swenshuai.xi     MsOS_DelayTask(1);
1769*53ee8cc1Swenshuai.xi     _REG16_CLR(&(_TSIOCtrlPHY->TSIO_PHY_20), TSIO_PHY_20_LPLL_PD);
1770*53ee8cc1Swenshuai.xi     MsOS_DelayTask(1);
1771*53ee8cc1Swenshuai.xi }
1772*53ee8cc1Swenshuai.xi 
_HAL_TSIO_Analogphase_Tableswitch(HAL_TSIO_CLK eClk)1773*53ee8cc1Swenshuai.xi static MS_U8 _HAL_TSIO_Analogphase_Tableswitch(HAL_TSIO_CLK eClk)
1774*53ee8cc1Swenshuai.xi {
1775*53ee8cc1Swenshuai.xi     MS_U8 u8Ret = 0;
1776*53ee8cc1Swenshuai.xi 
1777*53ee8cc1Swenshuai.xi     switch (eClk)
1778*53ee8cc1Swenshuai.xi     {
1779*53ee8cc1Swenshuai.xi         default:
1780*53ee8cc1Swenshuai.xi         case HAL_TSIO_CLK_200M:
1781*53ee8cc1Swenshuai.xi             u8Ret = 0;
1782*53ee8cc1Swenshuai.xi             break;
1783*53ee8cc1Swenshuai.xi 
1784*53ee8cc1Swenshuai.xi         case HAL_TSIO_CLK_100M:
1785*53ee8cc1Swenshuai.xi             u8Ret = 1;
1786*53ee8cc1Swenshuai.xi             break;
1787*53ee8cc1Swenshuai.xi 
1788*53ee8cc1Swenshuai.xi         case HAL_TSIO_CLK_50M:
1789*53ee8cc1Swenshuai.xi             u8Ret = 2;
1790*53ee8cc1Swenshuai.xi             break;
1791*53ee8cc1Swenshuai.xi 
1792*53ee8cc1Swenshuai.xi         case HAL_TSIO_CLK_25M:
1793*53ee8cc1Swenshuai.xi             u8Ret = 3;
1794*53ee8cc1Swenshuai.xi             break;
1795*53ee8cc1Swenshuai.xi     }
1796*53ee8cc1Swenshuai.xi     return u8Ret;
1797*53ee8cc1Swenshuai.xi }
1798*53ee8cc1Swenshuai.xi 
HAL_TSIO_Analogphase_Init(HAL_TSIO_CLK eClk,MS_BOOL bLoopback)1799*53ee8cc1Swenshuai.xi void HAL_TSIO_Analogphase_Init(HAL_TSIO_CLK eClk, MS_BOOL bLoopback)
1800*53ee8cc1Swenshuai.xi {
1801*53ee8cc1Swenshuai.xi     MS_BOOL bBit15 = FALSE;
1802*53ee8cc1Swenshuai.xi     MS_U8 u8DA_OV = 0;
1803*53ee8cc1Swenshuai.xi     MS_U8 u8DB_OV = 0;
1804*53ee8cc1Swenshuai.xi 
1805*53ee8cc1Swenshuai.xi     u8Phasetable = _HAL_TSIO_Analogphase_Tableswitch(eClk);
1806*53ee8cc1Swenshuai.xi 
1807*53ee8cc1Swenshuai.xi     _REG16_CLR(&(_TSIOCtrl0->SW_RSTZ), TSIO0_SW_RST_ANA_RX);
1808*53ee8cc1Swenshuai.xi 
1809*53ee8cc1Swenshuai.xi #if (BITTRAINING_SW_MODE_ENABLE == 1)
1810*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrlPHY->TSIO_PHY_22),TSIO_PHY_22_LPLL_SW_DEBUG_EN);
1811*53ee8cc1Swenshuai.xi #endif
1812*53ee8cc1Swenshuai.xi     MsOS_DelayTask(1);
1813*53ee8cc1Swenshuai.xi     //toggle to force phase jump, will not bit training done until SW exit
1814*53ee8cc1Swenshuai.xi     if (bLoopback)
1815*53ee8cc1Swenshuai.xi     {
1816*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&(_TSIOCtrl0->PUH_CONFIG1), 0x0869); //for loopback
1817*53ee8cc1Swenshuai.xi     }
1818*53ee8cc1Swenshuai.xi     else
1819*53ee8cc1Swenshuai.xi     {
1820*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&(_TSIOCtrl0->PUH_CONFIG1), 0x0809);
1821*53ee8cc1Swenshuai.xi     }
1822*53ee8cc1Swenshuai.xi     MsOS_DelayTask(1);
1823*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrl0->SW_RSTZ), TSIO0_SW_RSTZ);
1824*53ee8cc1Swenshuai.xi     MsOS_DelayTask(1);
1825*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrl1->BTRAIN_CONFIG3), TSIO1_BTRAIN_INT_CLR);
1826*53ee8cc1Swenshuai.xi     MsOS_DelayTask(1);
1827*53ee8cc1Swenshuai.xi     _REG16_CLR(&(_TSIOCtrl1->BTRAIN_CONFIG3), TSIO1_BTRAIN_INT_CLR);
1828*53ee8cc1Swenshuai.xi     MsOS_DelayTask(1);
1829*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrl1->BTRAIN_INT_EN), TSIO1_BTRAIN_INT_EN);
1830*53ee8cc1Swenshuai.xi #if (BITTRAINING_SW_MODE_ENABLE == 1)
1831*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrl1->BTRAIN_CONFIG0), TSIO1_SW_JUMP_PH_CH);
1832*53ee8cc1Swenshuai.xi     MsOS_DelayTask(1);
1833*53ee8cc1Swenshuai.xi     _REG16_CLR(&(_TSIOCtrl1->BTRAIN_CONFIG0), TSIO1_SW_JUMP_PH_CH);
1834*53ee8cc1Swenshuai.xi     MsOS_DelayTask(1);
1835*53ee8cc1Swenshuai.xi #endif
1836*53ee8cc1Swenshuai.xi     //_REG16_SET(&(_TSIOCtrl0->AD_TX_CONFIG0), TSIO0_CH_SWAP);
1837*53ee8cc1Swenshuai.xi     //MsOS_DelayTask(1);
1838*53ee8cc1Swenshuai.xi 
1839*53ee8cc1Swenshuai.xi     //TSIO_ATOP RX calibration
1840*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSIOCtrlPHY->TSIO_PHY_00), 0x807E);
1841*53ee8cc1Swenshuai.xi     MsOS_DelayTask(1);
1842*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSIOCtrlPHY->TSIO_PHY_00), 0x007E);
1843*53ee8cc1Swenshuai.xi     MsOS_DelayTask(1);
1844*53ee8cc1Swenshuai.xi     do
1845*53ee8cc1Swenshuai.xi     {
1846*53ee8cc1Swenshuai.xi         bBit15 = (_HAL_REG16_R(&(_TSIOCtrlPHY->TSIO_PHY_0B)) & TSIO_PHY_0B_RX_CAL_END) >> TSIO_PHY_0B_RX_CAL_END_SHIFT;
1847*53ee8cc1Swenshuai.xi         MsOS_DelayTask(1);
1848*53ee8cc1Swenshuai.xi     }while(!bBit15);
1849*53ee8cc1Swenshuai.xi     u8DA_OV = (_HAL_REG16_R(&(_TSIOCtrlPHY->TSIO_PHY_0B)) & TSIO_PHY_0B_RX_CAL_DATA_A_MASK) >> TSIO_PHY_0B_RX_CAL_DATA_A_SHIFT;
1850*53ee8cc1Swenshuai.xi     u8DB_OV = (_HAL_REG16_R(&(_TSIOCtrlPHY->TSIO_PHY_0B)) & TSIO_PHY_0B_RX_CAL_DATA_B_MASK) >> TSIO_PHY_0B_RX_CAL_DATA_B_SHIFT;
1851*53ee8cc1Swenshuai.xi     _REG16_SET_MASK(&(_TSIOCtrlPHY->TSIO_PHY_06), (0x40|u8DA_OV), TSIO_PHY_06_GCR_RX_CA_DA_OV_MASK, TSIO_PHY_06_GCR_RX_CA_DA_OV_SHIFT);
1852*53ee8cc1Swenshuai.xi     _REG16_SET_MASK(&(_TSIOCtrlPHY->TSIO_PHY_06), (0x40|u8DB_OV), TSIO_PHY_06_GCR_RX_CA_DB_OV_MASK, TSIO_PHY_06_GCR_RX_CA_DB_OV_SHIFT);
1853*53ee8cc1Swenshuai.xi 
1854*53ee8cc1Swenshuai.xi     //TSIO
1855*53ee8cc1Swenshuai.xi     //_HAL_REG16_W(&(_TSIOCtrlPHY->TSIO_PHY_00), 0x007E);
1856*53ee8cc1Swenshuai.xi     //MsOS_DelayTask(1);
1857*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSIOCtrlPHY->TSIO_PHY_0F), 0x0010);
1858*53ee8cc1Swenshuai.xi     MsOS_DelayTask(1);
1859*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSIOCtrl0->MAX_PERIOD_OF_PKT_SYNC), 0x0000); // for test
1860*53ee8cc1Swenshuai.xi     MsOS_DelayTask(1);
1861*53ee8cc1Swenshuai.xi 
1862*53ee8cc1Swenshuai.xi     //LPLL
1863*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSIOCtrlPHY->TSIO_PHY_20), 0x0000);
1864*53ee8cc1Swenshuai.xi     MsOS_DelayTask(1);
1865*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSIOCtrlPHY->TSIO_PHY_21), 0x0002);
1866*53ee8cc1Swenshuai.xi     MsOS_DelayTask(1);
1867*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSIOCtrlPHY->TSIO_PHY_22), 0x8138);
1868*53ee8cc1Swenshuai.xi     MsOS_DelayTask(1);
1869*53ee8cc1Swenshuai.xi     _REG16_SET_MASK(&(_TSIOCtrlPHY->TSIO_PHY_22), u8Phasetable, TSIO_PHY_22_LPLL_SKEW_DIV_MASK,TSIO_PHY_22_LPLL_SKEW_DIV_SHIFT);
1870*53ee8cc1Swenshuai.xi     MsOS_DelayTask(1);
1871*53ee8cc1Swenshuai.xi     _REG32_SET_MASK(&(_TSIOCtrlPHY->TSIO_PHY_30_31), 0x19EB85, TSIO_PHY_30_31_LPLL_SYNTH_SET_MASK, TSIO_PHY_30_31_LPLL_SYNTH_SET_SHIFT);
1872*53ee8cc1Swenshuai.xi     MsOS_DelayTask(1);
1873*53ee8cc1Swenshuai.xi 
1874*53ee8cc1Swenshuai.xi     //TSIO
1875*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSOCtrl0->TSO_CONFIG5), TSO0_TSIO_MODE);
1876*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrl0->TX_CONFIG0), TSIO0_INSERT_CTS_IN_TX);
1877*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrl0->TX_CONFIG0), TSIO0_TURN_OFF_MCM_TSIO);
1878*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSIOCtrl0->MAX_PERIOD_OF_SOC_TRAINING), 0x0000);
1879*53ee8cc1Swenshuai.xi 
1880*53ee8cc1Swenshuai.xi #if (BITTRAINING_SW_MODE_ENABLE == 1)
1881*53ee8cc1Swenshuai.xi     if (bLoopback)
1882*53ee8cc1Swenshuai.xi     {
1883*53ee8cc1Swenshuai.xi         _REG16_SET_MASK(&(_TSIOCtrlPHY->TSIO_PHY_18), 0x20,TSIO_PHY_18_TEST_TSIO_MASK, TSIO_PHY_18_TEST_TSIO_SHIFT); // loopback
1884*53ee8cc1Swenshuai.xi         MsOS_DelayTask(1);
1885*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&(_TSIOCtrl0->PUH_CONFIG1), 0x0859); //for loopback
1886*53ee8cc1Swenshuai.xi         MsOS_DelayTask(1);
1887*53ee8cc1Swenshuai.xi     }
1888*53ee8cc1Swenshuai.xi #else
1889*53ee8cc1Swenshuai.xi     //====skew====
1890*53ee8cc1Swenshuai.xi     switch(eClk)
1891*53ee8cc1Swenshuai.xi     {
1892*53ee8cc1Swenshuai.xi         default:
1893*53ee8cc1Swenshuai.xi         case HAL_TSIO_CLK_200M:
1894*53ee8cc1Swenshuai.xi             //Coarse (200MHz)
1895*53ee8cc1Swenshuai.xi             _REG16_SET_MASK(&(_TSIOCtrlPHY->TSIO_PHY_24), 0x0002,
1896*53ee8cc1Swenshuai.xi                             TSIO_PHY_24_LPLL_SKEW1_COARSE_MASK, TSIO_PHY_24_LPLL_SKEW1_COARSE_SHIFT);
1897*53ee8cc1Swenshuai.xi             break;
1898*53ee8cc1Swenshuai.xi         case HAL_TSIO_CLK_100M:
1899*53ee8cc1Swenshuai.xi             //Coarse (100MHz)
1900*53ee8cc1Swenshuai.xi             _REG16_SET_MASK(&(_TSIOCtrlPHY->TSIO_PHY_24), 0x0004,
1901*53ee8cc1Swenshuai.xi                     TSIO_PHY_24_LPLL_SKEW1_COARSE_MASK, TSIO_PHY_24_LPLL_SKEW1_COARSE_SHIFT);
1902*53ee8cc1Swenshuai.xi             break;
1903*53ee8cc1Swenshuai.xi         case HAL_TSIO_CLK_50M:
1904*53ee8cc1Swenshuai.xi             //Coarse (50MHz)
1905*53ee8cc1Swenshuai.xi             _REG16_SET_MASK(&(_TSIOCtrlPHY->TSIO_PHY_24), 0x0008,
1906*53ee8cc1Swenshuai.xi                     TSIO_PHY_24_LPLL_SKEW1_COARSE_MASK, TSIO_PHY_24_LPLL_SKEW1_COARSE_SHIFT);
1907*53ee8cc1Swenshuai.xi             break;
1908*53ee8cc1Swenshuai.xi         case HAL_TSIO_CLK_25M:
1909*53ee8cc1Swenshuai.xi             //Coarse (25MHz)
1910*53ee8cc1Swenshuai.xi             _REG16_SET_MASK(&(_TSIOCtrlPHY->TSIO_PHY_24), 0x0010,
1911*53ee8cc1Swenshuai.xi                     TSIO_PHY_24_LPLL_SKEW1_COARSE_MASK, TSIO_PHY_24_LPLL_SKEW1_COARSE_SHIFT);
1912*53ee8cc1Swenshuai.xi             break;
1913*53ee8cc1Swenshuai.xi     }
1914*53ee8cc1Swenshuai.xi     MsOS_DelayTaskUs(1);
1915*53ee8cc1Swenshuai.xi #endif
1916*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrl1->RX_CONFIG0), TSIO1_DECRYPT_DISABLE);
1917*53ee8cc1Swenshuai.xi 
1918*53ee8cc1Swenshuai.xi     //enable operation start interrupt
1919*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrl0->PUH_CONFIG2), TSIO0_PUH_CONFIG2_OPERATION_START_EN);
1920*53ee8cc1Swenshuai.xi 
1921*53ee8cc1Swenshuai.xi     //phase DAC power up 10%
1922*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrlPHY->TSIO_PHY_00), TSIO_PHY_00_REG_REF_SEL);
1923*53ee8cc1Swenshuai.xi     MsOS_DelayTask(1);
1924*53ee8cc1Swenshuai.xi     _REG16_SET_MASK(&(_TSIOCtrlPHY->TSIO_PHY_02), 3, TSIO_PHY_02_TEST_REG_MASK, TSIO_PHY_02_TEST_REG_SHIFT);
1925*53ee8cc1Swenshuai.xi     MsOS_DelayTask(1);
1926*53ee8cc1Swenshuai.xi 
1927*53ee8cc1Swenshuai.xi }
1928*53ee8cc1Swenshuai.xi 
HAL_TSIO_Analogphase_Exit(void)1929*53ee8cc1Swenshuai.xi void HAL_TSIO_Analogphase_Exit(void)
1930*53ee8cc1Swenshuai.xi {
1931*53ee8cc1Swenshuai.xi     //_HAL_REG16_W(&(_TSIOCtrlPHY->TSIO_PHY_00), 0x107E);
1932*53ee8cc1Swenshuai.xi     //MsOS_DelayTask(1);
1933*53ee8cc1Swenshuai.xi 
1934*53ee8cc1Swenshuai.xi     _REG16_CLR(&(_TSIOCtrl0->SW_RSTZ), TSIO0_SW_RSTZ);//low active
1935*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrl0->SW_RSTZ), TSIO0_SW_RST_ANA_RX);
1936*53ee8cc1Swenshuai.xi     MsOS_DelayTask(1);
1937*53ee8cc1Swenshuai.xi }
1938*53ee8cc1Swenshuai.xi 
HAL_TSIO_Analogphase_Set(MS_BOOL bSelect,MS_U8 u8Phase,MS_U8 u8Gap)1939*53ee8cc1Swenshuai.xi void HAL_TSIO_Analogphase_Set(MS_BOOL bSelect, MS_U8 u8Phase, MS_U8 u8Gap)
1940*53ee8cc1Swenshuai.xi {
1941*53ee8cc1Swenshuai.xi     MS_U8 u8Phase_pre = 0;
1942*53ee8cc1Swenshuai.xi     MS_U8 u8Phase_next = 0;
1943*53ee8cc1Swenshuai.xi     ANALOG_PHASE_SETTING *Setting = &SETTING[u8Phasetable][0];
1944*53ee8cc1Swenshuai.xi     static MS_BOOL bReset = TRUE;
1945*53ee8cc1Swenshuai.xi     static MS_U32 u32Count = 0;
1946*53ee8cc1Swenshuai.xi 
1947*53ee8cc1Swenshuai.xi     if (u8Gap >= ANALOG_PHASE_GAP)
1948*53ee8cc1Swenshuai.xi     {
1949*53ee8cc1Swenshuai.xi         u8Gap = ANALOG_PHASE_GAP;
1950*53ee8cc1Swenshuai.xi     }
1951*53ee8cc1Swenshuai.xi 
1952*53ee8cc1Swenshuai.xi     if (u8Phase < u8Gap)
1953*53ee8cc1Swenshuai.xi     {
1954*53ee8cc1Swenshuai.xi         u8Phase_pre = ANALOG_PHASE_MAX + u8Phase - u8Gap + 1;
1955*53ee8cc1Swenshuai.xi     }
1956*53ee8cc1Swenshuai.xi     else
1957*53ee8cc1Swenshuai.xi     {
1958*53ee8cc1Swenshuai.xi         u8Phase_pre = u8Phase - u8Gap;
1959*53ee8cc1Swenshuai.xi     }
1960*53ee8cc1Swenshuai.xi 
1961*53ee8cc1Swenshuai.xi     u8Phase_next = u8Phase + u8Gap;
1962*53ee8cc1Swenshuai.xi     if (u8Phase_next > ANALOG_PHASE_MAX)
1963*53ee8cc1Swenshuai.xi     {
1964*53ee8cc1Swenshuai.xi         u8Phase_next = u8Phase_next - ANALOG_PHASE_MAX - 1;
1965*53ee8cc1Swenshuai.xi     }
1966*53ee8cc1Swenshuai.xi 
1967*53ee8cc1Swenshuai.xi     //phdac reset
1968*53ee8cc1Swenshuai.xi     if (bReset)
1969*53ee8cc1Swenshuai.xi     {
1970*53ee8cc1Swenshuai.xi         HAL_TSIO_DBGMSG(E_HAL_TSIO_DBG_LEVEL_TRACE, printf("phdac Reset\n"));
1971*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSIOCtrlPHY->TSIO_PHY_20), TSIO_PHY_20_LPLL_PHDAC_RST);
1972*53ee8cc1Swenshuai.xi         MsOS_DelayTaskUs(1);
1973*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSIOCtrlPHY->TSIO_PHY_20), TSIO_PHY_20_LPLL_PHDAC_RST);
1974*53ee8cc1Swenshuai.xi         MsOS_DelayTaskUs(1);
1975*53ee8cc1Swenshuai.xi         bReset = FALSE;
1976*53ee8cc1Swenshuai.xi     }
1977*53ee8cc1Swenshuai.xi 
1978*53ee8cc1Swenshuai.xi     MS_U8 u8Skew_phase = 11;
1979*53ee8cc1Swenshuai.xi     HAL_TSIO_DBGMSG(E_HAL_TSIO_DBG_LEVEL_TRACE,printf("Count   [%d]\n",u32Count++));
1980*53ee8cc1Swenshuai.xi     HAL_TSIO_DBGMSG(E_HAL_TSIO_DBG_LEVEL_TRACE,printf("Phase   [%d, %d, %d, %d]\n",u8Skew_phase, u8Phase_pre, u8Phase, u8Phase_next));
1981*53ee8cc1Swenshuai.xi     HAL_TSIO_DBGMSG(E_HAL_TSIO_DBG_LEVEL_TRACE,printf("Select  [%d, %d, %d, %d]\n",bSelect, bSelect, bSelect, bSelect));
1982*53ee8cc1Swenshuai.xi     HAL_TSIO_DBGMSG(E_HAL_TSIO_DBG_LEVEL_TRACE,printf("Delay1t [%d, %d, %d, %d]\n",Setting[u8Skew_phase].u8Delay1T,
1983*53ee8cc1Swenshuai.xi         Setting[u8Phase_pre].u8Delay1T, Setting[u8Phase].u8Delay1T, Setting[u8Phase_next].u8Delay1T));
1984*53ee8cc1Swenshuai.xi     HAL_TSIO_DBGMSG(E_HAL_TSIO_DBG_LEVEL_TRACE,printf("Coarse  [%d, %d, %d, %d]\n",Setting[u8Skew_phase].u8Corse,
1985*53ee8cc1Swenshuai.xi         Setting[u8Phase_pre].u8Corse, Setting[u8Phase].u8Corse, Setting[u8Phase_next].u8Corse));
1986*53ee8cc1Swenshuai.xi     HAL_TSIO_DBGMSG(E_HAL_TSIO_DBG_LEVEL_TRACE,printf("Fine    [%d, %d, %d, %d]\n",Setting[u8Skew_phase].u8Fine,
1987*53ee8cc1Swenshuai.xi         Setting[u8Phase_pre].u8Fine, Setting[u8Phase].u8Fine, Setting[u8Phase_next].u8Fine));
1988*53ee8cc1Swenshuai.xi #if 1
1989*53ee8cc1Swenshuai.xi     if (bSelect)
1990*53ee8cc1Swenshuai.xi     {
1991*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSIOCtrlPHY->TSIO_PHY_20), TSIO_PHY_20_LPLL_PHDAC_SELECT);
1992*53ee8cc1Swenshuai.xi     }
1993*53ee8cc1Swenshuai.xi     else
1994*53ee8cc1Swenshuai.xi     {
1995*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSIOCtrlPHY->TSIO_PHY_20), TSIO_PHY_20_LPLL_PHDAC_SELECT);
1996*53ee8cc1Swenshuai.xi     }
1997*53ee8cc1Swenshuai.xi #endif
1998*53ee8cc1Swenshuai.xi     //select sw patch
1999*53ee8cc1Swenshuai.xi     //_REG16_SET(&(_TSIOCtrlPHY->TSIO_PHY_20), TSIO_PHY_20_LPLL_PHDAC_SELECT);
2000*53ee8cc1Swenshuai.xi     MsOS_DelayTaskUs(1);
2001*53ee8cc1Swenshuai.xi 
2002*53ee8cc1Swenshuai.xi     //====skew1====
2003*53ee8cc1Swenshuai.xi     //Coarse
2004*53ee8cc1Swenshuai.xi     _REG16_SET_MASK(&(_TSIOCtrlPHY->TSIO_PHY_24), Setting[u8Skew_phase].u8Corse,
2005*53ee8cc1Swenshuai.xi                     TSIO_PHY_24_LPLL_SKEW1_COARSE_MASK, TSIO_PHY_24_LPLL_SKEW1_COARSE_SHIFT);
2006*53ee8cc1Swenshuai.xi     MsOS_DelayTaskUs(1);
2007*53ee8cc1Swenshuai.xi     //Fine
2008*53ee8cc1Swenshuai.xi     _REG16_SET_MASK(&(_TSIOCtrlPHY->TSIO_PHY_23), Setting[u8Skew_phase].u8Fine,
2009*53ee8cc1Swenshuai.xi                     TSIO_PHY_23_LPLL_SKEW1_FINE_MASK, TSIO_PHY_23_LPLL_SKEW1_FINE_SHIFT);
2010*53ee8cc1Swenshuai.xi     MsOS_DelayTaskUs(1);
2011*53ee8cc1Swenshuai.xi     //Delay1t
2012*53ee8cc1Swenshuai.xi     if (Setting[u8Skew_phase].u8Delay1T)
2013*53ee8cc1Swenshuai.xi     {
2014*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSIOCtrlPHY->TSIO_PHY_20), TSIO_PHY_20_LPLL_SEL_SKEW1_DELAYlt);
2015*53ee8cc1Swenshuai.xi     }
2016*53ee8cc1Swenshuai.xi     else
2017*53ee8cc1Swenshuai.xi     {
2018*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSIOCtrlPHY->TSIO_PHY_20), TSIO_PHY_20_LPLL_SEL_SKEW1_DELAYlt);
2019*53ee8cc1Swenshuai.xi     }
2020*53ee8cc1Swenshuai.xi     MsOS_DelayTaskUs(1);
2021*53ee8cc1Swenshuai.xi 
2022*53ee8cc1Swenshuai.xi     //====skew2====
2023*53ee8cc1Swenshuai.xi     //Coarse
2024*53ee8cc1Swenshuai.xi     _REG16_SET_MASK(&(_TSIOCtrlPHY->TSIO_PHY_24), Setting[u8Phase_pre].u8Corse,
2025*53ee8cc1Swenshuai.xi                     TSIO_PHY_24_LPLL_SKEW2_COARSE_MASK, TSIO_PHY_24_LPLL_SKEW2_COARSE_SHIFT);
2026*53ee8cc1Swenshuai.xi     MsOS_DelayTaskUs(1);
2027*53ee8cc1Swenshuai.xi     //Fine
2028*53ee8cc1Swenshuai.xi     _REG16_SET_MASK(&(_TSIOCtrlPHY->TSIO_PHY_23), Setting[u8Phase_pre].u8Fine,
2029*53ee8cc1Swenshuai.xi                     TSIO_PHY_23_LPLL_SKEW2_FINE_MASK, TSIO_PHY_23_LPLL_SKEW2_FINE_SHIFT);
2030*53ee8cc1Swenshuai.xi     MsOS_DelayTaskUs(1);
2031*53ee8cc1Swenshuai.xi     //Delay1t
2032*53ee8cc1Swenshuai.xi     if (Setting[u8Phase_pre].u8Delay1T)
2033*53ee8cc1Swenshuai.xi     {
2034*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSIOCtrlPHY->TSIO_PHY_20), TSIO_PHY_20_LPLL_SEL_SKEW2_DELAYlt);
2035*53ee8cc1Swenshuai.xi     }
2036*53ee8cc1Swenshuai.xi     else
2037*53ee8cc1Swenshuai.xi     {
2038*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSIOCtrlPHY->TSIO_PHY_20), TSIO_PHY_20_LPLL_SEL_SKEW2_DELAYlt);
2039*53ee8cc1Swenshuai.xi     }
2040*53ee8cc1Swenshuai.xi     MsOS_DelayTaskUs(1);
2041*53ee8cc1Swenshuai.xi 
2042*53ee8cc1Swenshuai.xi 
2043*53ee8cc1Swenshuai.xi     //====skew3====
2044*53ee8cc1Swenshuai.xi     //Coarse
2045*53ee8cc1Swenshuai.xi     _REG16_SET_MASK(&(_TSIOCtrlPHY->TSIO_PHY_25), Setting[u8Phase].u8Corse,
2046*53ee8cc1Swenshuai.xi                     TSIO_PHY_24_LPLL_SKEW3_COARSE_MASK, TSIO_PHY_24_LPLL_SKEW3_COARSE_SHIFT);
2047*53ee8cc1Swenshuai.xi     MsOS_DelayTaskUs(1);
2048*53ee8cc1Swenshuai.xi     //Fine
2049*53ee8cc1Swenshuai.xi     _REG16_SET_MASK(&(_TSIOCtrlPHY->TSIO_PHY_23), Setting[u8Phase].u8Fine,
2050*53ee8cc1Swenshuai.xi                     TSIO_PHY_23_LPLL_SKEW3_FINE_MASK, TSIO_PHY_23_LPLL_SKEW3_FINE_SHIFT);
2051*53ee8cc1Swenshuai.xi     MsOS_DelayTaskUs(1);
2052*53ee8cc1Swenshuai.xi     //Delay1t
2053*53ee8cc1Swenshuai.xi     if (Setting[u8Phase].u8Delay1T)
2054*53ee8cc1Swenshuai.xi     {
2055*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSIOCtrlPHY->TSIO_PHY_20), TSIO_PHY_20_LPLL_SEL_SKEW3_DELAYlt);
2056*53ee8cc1Swenshuai.xi     }
2057*53ee8cc1Swenshuai.xi     else
2058*53ee8cc1Swenshuai.xi     {
2059*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSIOCtrlPHY->TSIO_PHY_20), TSIO_PHY_20_LPLL_SEL_SKEW3_DELAYlt);
2060*53ee8cc1Swenshuai.xi     }
2061*53ee8cc1Swenshuai.xi     MsOS_DelayTaskUs(1);
2062*53ee8cc1Swenshuai.xi 
2063*53ee8cc1Swenshuai.xi     //====skew4====
2064*53ee8cc1Swenshuai.xi     //Coarse
2065*53ee8cc1Swenshuai.xi     _REG16_SET_MASK(&(_TSIOCtrlPHY->TSIO_PHY_25), Setting[u8Phase_next].u8Corse,
2066*53ee8cc1Swenshuai.xi                     TSIO_PHY_24_LPLL_SKEW4_COARSE_MASK, TSIO_PHY_24_LPLL_SKEW4_COARSE_SHIFT);
2067*53ee8cc1Swenshuai.xi     MsOS_DelayTaskUs(1);
2068*53ee8cc1Swenshuai.xi     //Fine
2069*53ee8cc1Swenshuai.xi     _REG16_SET_MASK(&(_TSIOCtrlPHY->TSIO_PHY_23), Setting[u8Phase_next].u8Fine,
2070*53ee8cc1Swenshuai.xi                     TSIO_PHY_23_LPLL_SKEW4_FINE_MASK, TSIO_PHY_23_LPLL_SKEW4_FINE_SHIFT);
2071*53ee8cc1Swenshuai.xi     MsOS_DelayTaskUs(1);
2072*53ee8cc1Swenshuai.xi     //Delay1t
2073*53ee8cc1Swenshuai.xi     if (Setting[u8Phase_next].u8Delay1T)
2074*53ee8cc1Swenshuai.xi     {
2075*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSIOCtrlPHY->TSIO_PHY_20), TSIO_PHY_20_LPLL_SEL_SKEW4_DELAYlt);
2076*53ee8cc1Swenshuai.xi     }
2077*53ee8cc1Swenshuai.xi     else
2078*53ee8cc1Swenshuai.xi     {
2079*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSIOCtrlPHY->TSIO_PHY_20), TSIO_PHY_20_LPLL_SEL_SKEW4_DELAYlt);
2080*53ee8cc1Swenshuai.xi     }
2081*53ee8cc1Swenshuai.xi     MsOS_DelayTaskUs(1);
2082*53ee8cc1Swenshuai.xi 
2083*53ee8cc1Swenshuai.xi     //select sw patch
2084*53ee8cc1Swenshuai.xi     //_REG16_CLR(&(_TSIOCtrlPHY->TSIO_PHY_20), TSIO_PHY_20_LPLL_PHDAC_SELECT);
2085*53ee8cc1Swenshuai.xi     //MsOS_DelayTask(1);
2086*53ee8cc1Swenshuai.xi 
2087*53ee8cc1Swenshuai.xi     //update
2088*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrlPHY->TSIO_PHY_20), TSIO_PHY_20_LPLL_PHDAC_UPDATE);
2089*53ee8cc1Swenshuai.xi     MsOS_DelayTaskUs(1);
2090*53ee8cc1Swenshuai.xi     _REG16_CLR(&(_TSIOCtrlPHY->TSIO_PHY_20), TSIO_PHY_20_LPLL_PHDAC_UPDATE);
2091*53ee8cc1Swenshuai.xi     MsOS_DelayTaskUs(1);
2092*53ee8cc1Swenshuai.xi }
2093*53ee8cc1Swenshuai.xi 
HAL_TSIO_Analogphase_Start(void)2094*53ee8cc1Swenshuai.xi void HAL_TSIO_Analogphase_Start(void)
2095*53ee8cc1Swenshuai.xi {
2096*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSIOCtrl0->PUH_CONFIG0), 0x0062);
2097*53ee8cc1Swenshuai.xi     MsOS_DelayTask(1);
2098*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSIOCtrl0->PUH_CONFIG0), 0x0066);
2099*53ee8cc1Swenshuai.xi     MsOS_DelayTask(1);
2100*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSIOCtrl0->PUH_CONFIG0), 0x0000);
2101*53ee8cc1Swenshuai.xi     MsOS_DelayTask(1);
2102*53ee8cc1Swenshuai.xi }
2103*53ee8cc1Swenshuai.xi 
HAL_TSIO_Analogphase_Read(MS_BOOL bEarly)2104*53ee8cc1Swenshuai.xi MS_U16 HAL_TSIO_Analogphase_Read(MS_BOOL bEarly)
2105*53ee8cc1Swenshuai.xi {
2106*53ee8cc1Swenshuai.xi     MS_U16 u16Data = 0;
2107*53ee8cc1Swenshuai.xi     MS_U16 u16ReadCount = 150;
2108*53ee8cc1Swenshuai.xi     MS_U16 u16index = 0;
2109*53ee8cc1Swenshuai.xi     MS_U16 u16Count = 0;
2110*53ee8cc1Swenshuai.xi     MS_U16 u16Temp = 0;
2111*53ee8cc1Swenshuai.xi 
2112*53ee8cc1Swenshuai.xi     for (u16index = 0; u16index < u16ReadCount; u16index++)
2113*53ee8cc1Swenshuai.xi     {
2114*53ee8cc1Swenshuai.xi         if (bEarly)
2115*53ee8cc1Swenshuai.xi         {
2116*53ee8cc1Swenshuai.xi             u16Temp = _HAL_REG16_R(&(_TSIOCtrlPHY->TSIO_PHY_12));
2117*53ee8cc1Swenshuai.xi             if (u16Temp)
2118*53ee8cc1Swenshuai.xi             {
2119*53ee8cc1Swenshuai.xi                 u16Count++;
2120*53ee8cc1Swenshuai.xi             }
2121*53ee8cc1Swenshuai.xi             u16Data |= u16Temp;
2122*53ee8cc1Swenshuai.xi         }
2123*53ee8cc1Swenshuai.xi         else
2124*53ee8cc1Swenshuai.xi         {
2125*53ee8cc1Swenshuai.xi             u16Temp = _HAL_REG16_R(&(_TSIOCtrlPHY->TSIO_PHY_13));
2126*53ee8cc1Swenshuai.xi             if (u16Temp)
2127*53ee8cc1Swenshuai.xi             {
2128*53ee8cc1Swenshuai.xi                 u16Count++;
2129*53ee8cc1Swenshuai.xi             }
2130*53ee8cc1Swenshuai.xi             u16Data |= u16Temp;
2131*53ee8cc1Swenshuai.xi         }
2132*53ee8cc1Swenshuai.xi     }
2133*53ee8cc1Swenshuai.xi 
2134*53ee8cc1Swenshuai.xi     if (u16Data)
2135*53ee8cc1Swenshuai.xi     {
2136*53ee8cc1Swenshuai.xi         if (bEarly)
2137*53ee8cc1Swenshuai.xi         {
2138*53ee8cc1Swenshuai.xi             HAL_TSIO_DBGMSG(E_HAL_TSIO_DBG_LEVEL_TRACE, printf("Early error count = %d \n", u16Count));
2139*53ee8cc1Swenshuai.xi         }
2140*53ee8cc1Swenshuai.xi         else
2141*53ee8cc1Swenshuai.xi         {
2142*53ee8cc1Swenshuai.xi             HAL_TSIO_DBGMSG(E_HAL_TSIO_DBG_LEVEL_TRACE, printf("Late error count = %d \n", u16Count));
2143*53ee8cc1Swenshuai.xi         }
2144*53ee8cc1Swenshuai.xi     }
2145*53ee8cc1Swenshuai.xi 
2146*53ee8cc1Swenshuai.xi     return u16Data;
2147*53ee8cc1Swenshuai.xi }
2148*53ee8cc1Swenshuai.xi 
HAL_TSIO_Analogphase_GetPuhstatus(void)2149*53ee8cc1Swenshuai.xi MS_U16 HAL_TSIO_Analogphase_GetPuhstatus(void)
2150*53ee8cc1Swenshuai.xi {
2151*53ee8cc1Swenshuai.xi     MS_U16 u16Data = 0;
2152*53ee8cc1Swenshuai.xi 
2153*53ee8cc1Swenshuai.xi     u16Data = (_HAL_REG16_R(&(_TSIOCtrl0->PUH_STATUS0)) & TSIO0_PUH_STATUS0_POWER_STATUS_MASK)
2154*53ee8cc1Swenshuai.xi         >> TSIO0_PUH_STATUS0_POWER_STATUS_SHIFT;
2155*53ee8cc1Swenshuai.xi 
2156*53ee8cc1Swenshuai.xi     return u16Data;
2157*53ee8cc1Swenshuai.xi }
2158*53ee8cc1Swenshuai.xi 
2159*53ee8cc1Swenshuai.xi 
HAL_TSIO_Analogphase_PrbsRead(void)2160*53ee8cc1Swenshuai.xi MS_U16 HAL_TSIO_Analogphase_PrbsRead(void)
2161*53ee8cc1Swenshuai.xi {
2162*53ee8cc1Swenshuai.xi     MS_U16 u16Data = 0;
2163*53ee8cc1Swenshuai.xi 
2164*53ee8cc1Swenshuai.xi     MsOS_DelayTask(1);
2165*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSIOCtrl0->PRBS_CONFIG0), 0x1000);
2166*53ee8cc1Swenshuai.xi     MsOS_DelayTask(1);
2167*53ee8cc1Swenshuai.xi     _HAL_REG16_W(&(_TSIOCtrl0->PRBS_CONFIG0), 0x1007);
2168*53ee8cc1Swenshuai.xi     MsOS_DelayTask(1);
2169*53ee8cc1Swenshuai.xi     u16Data = _HAL_REG16_R(&(_TSIOCtrl0->DP_PHY_PRBS_ERRCNT));
2170*53ee8cc1Swenshuai.xi 
2171*53ee8cc1Swenshuai.xi     return u16Data;
2172*53ee8cc1Swenshuai.xi }
2173*53ee8cc1Swenshuai.xi 
2174*53ee8cc1Swenshuai.xi //=======================================================
2175*53ee8cc1Swenshuai.xi // TSIO Filter API (use for bypass smc)
2176*53ee8cc1Swenshuai.xi //=======================================================
HAL_TSIO_Filter_Enable(MS_U16 u16FltId,MS_BOOL bEnable)2177*53ee8cc1Swenshuai.xi void HAL_TSIO_Filter_Enable(MS_U16 u16FltId, MS_BOOL bEnable)
2178*53ee8cc1Swenshuai.xi {
2179*53ee8cc1Swenshuai.xi     if (u16FltId >= TSIO_FILTER_NUM)
2180*53ee8cc1Swenshuai.xi         return;
2181*53ee8cc1Swenshuai.xi 
2182*53ee8cc1Swenshuai.xi     if (bEnable)
2183*53ee8cc1Swenshuai.xi     {
2184*53ee8cc1Swenshuai.xi         //_REG32_SET(&(_TSIOCtrl3->TSIO_FILTER[u16FltId]), TSIO3_FILTER_USE_PID_IN_FILTERING);
2185*53ee8cc1Swenshuai.xi         _REG32_SET(&(_TSIOCtrl3->TSIO_FILTER[u16FltId]), TSIO3_FILTER_USE_SERVICE_ID_IN_FILTERING);
2186*53ee8cc1Swenshuai.xi         _REG32_SET(&(_TSIOCtrl3->TSIO_FILTER[u16FltId]), TSIO3_FILTER_DATA_TO_TSIO_RX);
2187*53ee8cc1Swenshuai.xi         _REG32_SET(&(_TSIOCtrl3->TSIO_FILTER[u16FltId]), TSIO3_FILTER_ENABLE);
2188*53ee8cc1Swenshuai.xi     }
2189*53ee8cc1Swenshuai.xi     else
2190*53ee8cc1Swenshuai.xi     {
2191*53ee8cc1Swenshuai.xi         _REG32_CLR(&(_TSIOCtrl3->TSIO_FILTER[u16FltId]), TSIO3_FILTER_ENABLE);
2192*53ee8cc1Swenshuai.xi     }
2193*53ee8cc1Swenshuai.xi }
2194*53ee8cc1Swenshuai.xi 
HAL_TSIO_Filter_SetPid(MS_U16 u16FltId,MS_U16 u16Pid)2195*53ee8cc1Swenshuai.xi void HAL_TSIO_Filter_SetPid(MS_U16 u16FltId, MS_U16 u16Pid)
2196*53ee8cc1Swenshuai.xi {
2197*53ee8cc1Swenshuai.xi     if (u16FltId >= TSIO_FILTER_NUM)
2198*53ee8cc1Swenshuai.xi         return;
2199*53ee8cc1Swenshuai.xi 
2200*53ee8cc1Swenshuai.xi     _REG32_SET_MASK(&(_TSIOCtrl3->TSIO_FILTER[u16FltId]), u16Pid, TSIO3_FILTER_PID_MASK, TSIO3_FILTER_PID_SHIFT);
2201*53ee8cc1Swenshuai.xi }
2202*53ee8cc1Swenshuai.xi 
HAL_TSIO_Filter_SetSid(MS_U16 u16FltId,MS_U8 u8Sid)2203*53ee8cc1Swenshuai.xi void HAL_TSIO_Filter_SetSid(MS_U16 u16FltId, MS_U8 u8Sid)
2204*53ee8cc1Swenshuai.xi {
2205*53ee8cc1Swenshuai.xi     if (u16FltId >= TSIO_FILTER_NUM)
2206*53ee8cc1Swenshuai.xi         return;
2207*53ee8cc1Swenshuai.xi 
2208*53ee8cc1Swenshuai.xi     _REG32_SET_MASK(&(_TSIOCtrl3->TSIO_FILTER[u16FltId]), u8Sid, TSIO3_FILTER_SERVICE_ID_MASK, TSIO3_FILTER_SERVICE_ID_SHIFT);
2209*53ee8cc1Swenshuai.xi }
2210*53ee8cc1Swenshuai.xi 
2211*53ee8cc1Swenshuai.xi //=======================================================
2212*53ee8cc1Swenshuai.xi // Other API
2213*53ee8cc1Swenshuai.xi //=======================================================
HAL_TSIO_RxRecord_Start(MS_BOOL bEnable)2214*53ee8cc1Swenshuai.xi void HAL_TSIO_RxRecord_Start(MS_BOOL bEnable)
2215*53ee8cc1Swenshuai.xi {
2216*53ee8cc1Swenshuai.xi     if (bEnable)
2217*53ee8cc1Swenshuai.xi     {
2218*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&(_TSIOCtrl1->RXANA_TO_PVR), 0x2);
2219*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSIOCtrl2->TSIO_RXANA_TO_PVR_DEBUG), TSIO2_TSIO_RXANA_TO_PVR_DEBG);
2220*53ee8cc1Swenshuai.xi     }
2221*53ee8cc1Swenshuai.xi     else
2222*53ee8cc1Swenshuai.xi     {
2223*53ee8cc1Swenshuai.xi         _HAL_REG16_W(&(_TSIOCtrl1->RXANA_TO_PVR), 0x0);
2224*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSIOCtrl2->TSIO_RXANA_TO_PVR_DEBUG), TSIO2_TSIO_RXANA_TO_PVR_DEBG);
2225*53ee8cc1Swenshuai.xi     }
2226*53ee8cc1Swenshuai.xi }
2227*53ee8cc1Swenshuai.xi 
HAL_TSIO_RxRecord_Setbuf(MS_U32 u32Headaddr,MS_U32 u32Tailaddr)2228*53ee8cc1Swenshuai.xi void HAL_TSIO_RxRecord_Setbuf(MS_U32 u32Headaddr, MS_U32 u32Tailaddr)
2229*53ee8cc1Swenshuai.xi {
2230*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrl2->TSIO_PVR_CONFIG), TSIO2_PVR_STR2MI_EN);
2231*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&(_TSIOCtrl2->TSIO_PVR_STR2MI_HEAD_DEBUG), u32Headaddr);
2232*53ee8cc1Swenshuai.xi     _HAL_REG32_W(&(_TSIOCtrl2->TSIO_PVR_STR2MI_TAIL_DEBUG), u32Tailaddr);
2233*53ee8cc1Swenshuai.xi     _REG16_SET(&(_TSIOCtrl2->TSIO_PVR_CONFIG), TSIO2_PVR_STR2MI_RST_WADR);
2234*53ee8cc1Swenshuai.xi     _REG16_CLR(&(_TSIOCtrl2->TSIO_PVR_CONFIG), TSIO2_PVR_STR2MI_RST_WADR);
2235*53ee8cc1Swenshuai.xi }
2236*53ee8cc1Swenshuai.xi 
HAL_TSIO_TSP_BLK_Set(MS_BOOL bEnable)2237*53ee8cc1Swenshuai.xi void HAL_TSIO_TSP_BLK_Set(MS_BOOL bEnable)
2238*53ee8cc1Swenshuai.xi {
2239*53ee8cc1Swenshuai.xi     if(bEnable)
2240*53ee8cc1Swenshuai.xi     {
2241*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSPCtrl8->HW8_CONFIG3), TSP_TSIF0_TSIO0_BLK_EN);
2242*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSPCtrl8->HW8_CONFIG3), TSP_TSIF0_TSIO1_BLK_EN);
2243*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSPCtrl8->HW8_CONFIG3), TSP_TSIF0_TSIO2_BLK_EN);
2244*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSPCtrl8->HW8_CONFIG3), TSP_TSIF0_TSIO3_BLK_EN);
2245*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSPCtrl8->HW8_CONFIG3), TSP_TSIF0_TSIO4_BLK_EN);
2246*53ee8cc1Swenshuai.xi         _REG16_SET(&(_TSPCtrl8->HW8_CONFIG3), TSP_TSIF0_TSIO5_BLK_EN);
2247*53ee8cc1Swenshuai.xi     }
2248*53ee8cc1Swenshuai.xi     else
2249*53ee8cc1Swenshuai.xi     {
2250*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSPCtrl8->HW8_CONFIG3), TSP_TSIF0_TSIO0_BLK_EN);
2251*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSPCtrl8->HW8_CONFIG3), TSP_TSIF0_TSIO1_BLK_EN);
2252*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSPCtrl8->HW8_CONFIG3), TSP_TSIF0_TSIO2_BLK_EN);
2253*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSPCtrl8->HW8_CONFIG3), TSP_TSIF0_TSIO3_BLK_EN);
2254*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSPCtrl8->HW8_CONFIG3), TSP_TSIF0_TSIO4_BLK_EN);
2255*53ee8cc1Swenshuai.xi         _REG16_CLR(&(_TSPCtrl8->HW8_CONFIG3), TSP_TSIF0_TSIO5_BLK_EN);
2256*53ee8cc1Swenshuai.xi     }
2257*53ee8cc1Swenshuai.xi }
2258*53ee8cc1Swenshuai.xi 
HAL_TSIO_STRLD_SET(MS_U8 u8index)2259*53ee8cc1Swenshuai.xi void HAL_TSIO_STRLD_SET(MS_U8 u8index)
2260*53ee8cc1Swenshuai.xi {
2261*53ee8cc1Swenshuai.xi     MS_U8 u8Set = 0;
2262*53ee8cc1Swenshuai.xi 
2263*53ee8cc1Swenshuai.xi     switch (u8index)
2264*53ee8cc1Swenshuai.xi     {
2265*53ee8cc1Swenshuai.xi         case 0:
2266*53ee8cc1Swenshuai.xi             u8Set = 2; //1.75v
2267*53ee8cc1Swenshuai.xi             break;
2268*53ee8cc1Swenshuai.xi 
2269*53ee8cc1Swenshuai.xi         case 1:
2270*53ee8cc1Swenshuai.xi             u8Set = 0; //1.8v
2271*53ee8cc1Swenshuai.xi             break;
2272*53ee8cc1Swenshuai.xi 
2273*53ee8cc1Swenshuai.xi         case 2:
2274*53ee8cc1Swenshuai.xi             u8Set = 1; //1.85v
2275*53ee8cc1Swenshuai.xi             break;
2276*53ee8cc1Swenshuai.xi 
2277*53ee8cc1Swenshuai.xi         case 3:
2278*53ee8cc1Swenshuai.xi             u8Set = 3; //1.9v
2279*53ee8cc1Swenshuai.xi             break;
2280*53ee8cc1Swenshuai.xi 
2281*53ee8cc1Swenshuai.xi         default:
2282*53ee8cc1Swenshuai.xi             return;
2283*53ee8cc1Swenshuai.xi     }
2284*53ee8cc1Swenshuai.xi 
2285*53ee8cc1Swenshuai.xi     _REG16_SET_MASK(&(_TSIO_STRLD->REG_STRLD_32), u8Set, TEST_SDLDO_SEL_MASK, TEST_SDLDO_SEL_SHIFT);
2286*53ee8cc1Swenshuai.xi }
2287*53ee8cc1Swenshuai.xi 
2288