xref: /utopia/UTPA2-700.0.x/modules/miu/hal/M7821/miu/halMIU.c (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi //<MStar Software>
2*53ee8cc1Swenshuai.xi //******************************************************************************
3*53ee8cc1Swenshuai.xi // MStar Software
4*53ee8cc1Swenshuai.xi // Copyright (c) 2010 - 2012 MStar Semiconductor, Inc. All rights reserved.
5*53ee8cc1Swenshuai.xi // All software, firmware and related documentation herein ("MStar Software") are
6*53ee8cc1Swenshuai.xi // intellectual property of MStar Semiconductor, Inc. ("MStar") and protected by
7*53ee8cc1Swenshuai.xi // law, including, but not limited to, copyright law and international treaties.
8*53ee8cc1Swenshuai.xi // Any use, modification, reproduction, retransmission, or republication of all
9*53ee8cc1Swenshuai.xi // or part of MStar Software is expressly prohibited, unless prior written
10*53ee8cc1Swenshuai.xi // permission has been granted by MStar.
11*53ee8cc1Swenshuai.xi //
12*53ee8cc1Swenshuai.xi // By accessing, browsing and/or using MStar Software, you acknowledge that you
13*53ee8cc1Swenshuai.xi // have read, understood, and agree, to be bound by below terms ("Terms") and to
14*53ee8cc1Swenshuai.xi // comply with all applicable laws and regulations:
15*53ee8cc1Swenshuai.xi //
16*53ee8cc1Swenshuai.xi // 1. MStar shall retain any and all right, ownership and interest to MStar
17*53ee8cc1Swenshuai.xi //    Software and any modification/derivatives thereof.
18*53ee8cc1Swenshuai.xi //    No right, ownership, or interest to MStar Software and any
19*53ee8cc1Swenshuai.xi //    modification/derivatives thereof is transferred to you under Terms.
20*53ee8cc1Swenshuai.xi //
21*53ee8cc1Swenshuai.xi // 2. You understand that MStar Software might include, incorporate or be
22*53ee8cc1Swenshuai.xi //    supplied together with third party`s software and the use of MStar
23*53ee8cc1Swenshuai.xi //    Software may require additional licenses from third parties.
24*53ee8cc1Swenshuai.xi //    Therefore, you hereby agree it is your sole responsibility to separately
25*53ee8cc1Swenshuai.xi //    obtain any and all third party right and license necessary for your use of
26*53ee8cc1Swenshuai.xi //    such third party`s software.
27*53ee8cc1Swenshuai.xi //
28*53ee8cc1Swenshuai.xi // 3. MStar Software and any modification/derivatives thereof shall be deemed as
29*53ee8cc1Swenshuai.xi //    MStar`s confidential information and you agree to keep MStar`s
30*53ee8cc1Swenshuai.xi //    confidential information in strictest confidence and not disclose to any
31*53ee8cc1Swenshuai.xi //    third party.
32*53ee8cc1Swenshuai.xi //
33*53ee8cc1Swenshuai.xi // 4. MStar Software is provided on an "AS IS" basis without warranties of any
34*53ee8cc1Swenshuai.xi //    kind. Any warranties are hereby expressly disclaimed by MStar, including
35*53ee8cc1Swenshuai.xi //    without limitation, any warranties of merchantability, non-infringement of
36*53ee8cc1Swenshuai.xi //    intellectual property rights, fitness for a particular purpose, error free
37*53ee8cc1Swenshuai.xi //    and in conformity with any international standard.  You agree to waive any
38*53ee8cc1Swenshuai.xi //    claim against MStar for any loss, damage, cost or expense that you may
39*53ee8cc1Swenshuai.xi //    incur related to your use of MStar Software.
40*53ee8cc1Swenshuai.xi //    In no event shall MStar be liable for any direct, indirect, incidental or
41*53ee8cc1Swenshuai.xi //    consequential damages, including without limitation, lost of profit or
42*53ee8cc1Swenshuai.xi //    revenues, lost or damage of data, and unauthorized system use.
43*53ee8cc1Swenshuai.xi //    You agree that this Section 4 shall still apply without being affected
44*53ee8cc1Swenshuai.xi //    even if MStar Software has been modified by MStar in accordance with your
45*53ee8cc1Swenshuai.xi //    request or instruction for your use, except otherwise agreed by both
46*53ee8cc1Swenshuai.xi //    parties in writing.
47*53ee8cc1Swenshuai.xi //
48*53ee8cc1Swenshuai.xi // 5. If requested, MStar may from time to time provide technical supports or
49*53ee8cc1Swenshuai.xi //    services in relation with MStar Software to you for your use of
50*53ee8cc1Swenshuai.xi //    MStar Software in conjunction with your or your customer`s product
51*53ee8cc1Swenshuai.xi //    ("Services").
52*53ee8cc1Swenshuai.xi //    You understand and agree that, except otherwise agreed by both parties in
53*53ee8cc1Swenshuai.xi //    writing, Services are provided on an "AS IS" basis and the warranty
54*53ee8cc1Swenshuai.xi //    disclaimer set forth in Section 4 above shall apply.
55*53ee8cc1Swenshuai.xi //
56*53ee8cc1Swenshuai.xi // 6. Nothing contained herein shall be construed as by implication, estoppels
57*53ee8cc1Swenshuai.xi //    or otherwise:
58*53ee8cc1Swenshuai.xi //    (a) conferring any license or right to use MStar name, trademark, service
59*53ee8cc1Swenshuai.xi //        mark, symbol or any other identification;
60*53ee8cc1Swenshuai.xi //    (b) obligating MStar or any of its affiliates to furnish any person,
61*53ee8cc1Swenshuai.xi //        including without limitation, you and your customers, any assistance
62*53ee8cc1Swenshuai.xi //        of any kind whatsoever, or any information; or
63*53ee8cc1Swenshuai.xi //    (c) conferring any license or right under any intellectual property right.
64*53ee8cc1Swenshuai.xi //
65*53ee8cc1Swenshuai.xi // 7. These terms shall be governed by and construed in accordance with the laws
66*53ee8cc1Swenshuai.xi //    of Taiwan, R.O.C., excluding its conflict of law rules.
67*53ee8cc1Swenshuai.xi //    Any and all dispute arising out hereof or related hereto shall be finally
68*53ee8cc1Swenshuai.xi //    settled by arbitration referred to the Chinese Arbitration Association,
69*53ee8cc1Swenshuai.xi //    Taipei in accordance with the ROC Arbitration Law and the Arbitration
70*53ee8cc1Swenshuai.xi //    Rules of the Association by three (3) arbitrators appointed in accordance
71*53ee8cc1Swenshuai.xi //    with the said Rules.
72*53ee8cc1Swenshuai.xi //    The place of arbitration shall be in Taipei, Taiwan and the language shall
73*53ee8cc1Swenshuai.xi //    be English.
74*53ee8cc1Swenshuai.xi //    The arbitration award shall be final and binding to both parties.
75*53ee8cc1Swenshuai.xi //
76*53ee8cc1Swenshuai.xi //******************************************************************************
77*53ee8cc1Swenshuai.xi //<MStar Software>
78*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
79*53ee8cc1Swenshuai.xi //
80*53ee8cc1Swenshuai.xi // Copyright (c) 2006-2008 MStar Semiconductor, Inc.
81*53ee8cc1Swenshuai.xi // All rights reserved.
82*53ee8cc1Swenshuai.xi //
83*53ee8cc1Swenshuai.xi // Unless otherwise stipulated in writing, any and all information contained
84*53ee8cc1Swenshuai.xi // herein regardless in any format shall remain the sole proprietary of
85*53ee8cc1Swenshuai.xi // MStar Semiconductor Inc. and be kept in strict confidence
86*53ee8cc1Swenshuai.xi // (��MStar Confidential Information��) by the recipient.
87*53ee8cc1Swenshuai.xi // Any unauthorized act including without limitation unauthorized disclosure,
88*53ee8cc1Swenshuai.xi // copying, use, reproduction, sale, distribution, modification, disassembling,
89*53ee8cc1Swenshuai.xi // reverse engineering and compiling of the contents of MStar Confidential
90*53ee8cc1Swenshuai.xi // Information is unlawful and strictly prohibited. MStar hereby reserves the
91*53ee8cc1Swenshuai.xi // rights to any and all damages, losses, costs and expenses resulting therefrom.
92*53ee8cc1Swenshuai.xi //
93*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
94*53ee8cc1Swenshuai.xi 
95*53ee8cc1Swenshuai.xi 
96*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
97*53ee8cc1Swenshuai.xi //  Include Files
98*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
99*53ee8cc1Swenshuai.xi #include "MsCommon.h"
100*53ee8cc1Swenshuai.xi #include "MsTypes.h"
101*53ee8cc1Swenshuai.xi #include "drvMIU.h"
102*53ee8cc1Swenshuai.xi #include "regMIU.h"
103*53ee8cc1Swenshuai.xi #include "halMIU.h"
104*53ee8cc1Swenshuai.xi #include "halCHIP.h"
105*53ee8cc1Swenshuai.xi 
106*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
107*53ee8cc1Swenshuai.xi //  Driver Compiler Options
108*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
109*53ee8cc1Swenshuai.xi 
110*53ee8cc1Swenshuai.xi 
111*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
112*53ee8cc1Swenshuai.xi //  Local Defines
113*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
114*53ee8cc1Swenshuai.xi #define MIU_HAL_ERR(x, args...)        {printf(x, ##args);}
115*53ee8cc1Swenshuai.xi #define HAL_MIU_SSC_DBG(x)             // x
116*53ee8cc1Swenshuai.xi 
117*53ee8cc1Swenshuai.xi //[MIU][HAL][005] Update MIU Client Table [START]
118*53ee8cc1Swenshuai.xi #define MIU_CLIENT_GP0  \
119*53ee8cc1Swenshuai.xi /* 0 */    MIU_CLIENT_NONE, \
120*53ee8cc1Swenshuai.xi /* 1 */    MIU_CLIENT_VIVALDI9_DECODER_R, \
121*53ee8cc1Swenshuai.xi /* 2 */    MIU_CLIENT_SECAU_R2_RW, \
122*53ee8cc1Swenshuai.xi /* 3 */    MIU_CLIENT_USB3_RW,\
123*53ee8cc1Swenshuai.xi /* 4 */    MIU_CLIENT_SECURE_R2_RW,\
124*53ee8cc1Swenshuai.xi /* 5 */    MIU_CLIENT_AU_R2_RW, \
125*53ee8cc1Swenshuai.xi /* 6 */    MIU_CLIENT_VD_R2D_RW,\
126*53ee8cc1Swenshuai.xi /* 7 */    MIU_CLIENT_PM51_RW, \
127*53ee8cc1Swenshuai.xi /* 8 */    MIU_CLIENT_VD_R2I_R, \
128*53ee8cc1Swenshuai.xi /* 9 */    MIU_CLIENT_USB_UHC0_RW, \
129*53ee8cc1Swenshuai.xi /*10 */    MIU_CLIENT_USB_UHC1_RW, \
130*53ee8cc1Swenshuai.xi /*11 */    MIU_CLIENT_USB_UHC2_RW, \
131*53ee8cc1Swenshuai.xi /*12 */    MIU_CLIENT_MVD_BBU_RW, \
132*53ee8cc1Swenshuai.xi /*13 */    MIU_CLIENT_EMAC_RW, \
133*53ee8cc1Swenshuai.xi /*14 */    MIU_CLIENT_BDMA_RW, \
134*53ee8cc1Swenshuai.xi /*15 */    MIU_CLIENT_DUMMY
135*53ee8cc1Swenshuai.xi 
136*53ee8cc1Swenshuai.xi #define MIU_CLIENT_GP1  \
137*53ee8cc1Swenshuai.xi /* 0 */    MIU_CLIENT_VIVALDI9_MAD_RW, \
138*53ee8cc1Swenshuai.xi /* 1 */    MIU_CLIENT_DEMOD_W, \
139*53ee8cc1Swenshuai.xi /* 2 */    MIU_CLIENT_DUMMY, \
140*53ee8cc1Swenshuai.xi /* 3 */    MIU_CLIENT_JPD720P_RW, \
141*53ee8cc1Swenshuai.xi /* 4 */    MIU_CLIENT_FRC_R2, \
142*53ee8cc1Swenshuai.xi /* 5 */    MIU_CLIENT_MIIC0_RW,\
143*53ee8cc1Swenshuai.xi /* 6 */    MIU_CLIENT_UART_DMA_RW, \
144*53ee8cc1Swenshuai.xi /* 7 */    MIU_CLIENT_USB30_1_RW, \
145*53ee8cc1Swenshuai.xi /* 8 */    MIU_CLIENT_TSP_ORZ_W, \
146*53ee8cc1Swenshuai.xi /* 9 */    MIU_CLIENT_TSP_ORZ_R, \
147*53ee8cc1Swenshuai.xi /*10 */    MIU_CLIENT_DUMMY, \
148*53ee8cc1Swenshuai.xi /*11 */    MIU_CLIENT_VD_TTXSL_W, \
149*53ee8cc1Swenshuai.xi /*12 */    MIU_CLIENT_VD_COMB_W, \
150*53ee8cc1Swenshuai.xi /*13 */    MIU_CLIENT_VD_COMB_R,  \
151*53ee8cc1Swenshuai.xi /*14 */    MIU_CLIENT_USB_UHC3_RW, \
152*53ee8cc1Swenshuai.xi /*15 */    MIU_CLIENT_DUMMY
153*53ee8cc1Swenshuai.xi 
154*53ee8cc1Swenshuai.xi #define MIU_CLIENT_GP2  \
155*53ee8cc1Swenshuai.xi /* 0 */    MIU_CLIENT_CMD_QUEUE_RW, \
156*53ee8cc1Swenshuai.xi /* 1 */    MIU_CLIENT_CMD_QUEUE1_RW, \
157*53ee8cc1Swenshuai.xi /* 2 */    MIU_CLIENT_DUMMY, \
158*53ee8cc1Swenshuai.xi /* 3 */    MIU_CLIENT_DUMMY, \
159*53ee8cc1Swenshuai.xi /* 4 */    MIU_CLIENT_MVD_RW, \
160*53ee8cc1Swenshuai.xi /* 5 */    MIU_CLIENT_AESDMA_RW, \
161*53ee8cc1Swenshuai.xi /* 6 */    MIU_CLIENT_GPD_RW, \
162*53ee8cc1Swenshuai.xi /* 7 */    MIU_CLIENT_MFE0_W, \
163*53ee8cc1Swenshuai.xi /* 8 */    MIU_CLIENT_MFE1_R, \
164*53ee8cc1Swenshuai.xi /* 9 */    MIU_CLIENT_NAND_RW, \
165*53ee8cc1Swenshuai.xi /*10 */    MIU_CLIENT_SDIO_RW, \
166*53ee8cc1Swenshuai.xi /*11 */    MIU_CLIENT_DSCRMB_RW, \
167*53ee8cc1Swenshuai.xi /*12 */    MIU_CLIENT_TSP_FIQ_RW, \
168*53ee8cc1Swenshuai.xi /*13 */    MIU_CLIENT_TSP_ORZ_W, \
169*53ee8cc1Swenshuai.xi /*14 */    MIU_CLIENT_TSP_ORZ_R,\
170*53ee8cc1Swenshuai.xi /*15 */    MIU_CLIENT_TSO_RW
171*53ee8cc1Swenshuai.xi 
172*53ee8cc1Swenshuai.xi #define MIU_CLIENT_GP3  \
173*53ee8cc1Swenshuai.xi /* 0 */    MIU_CLIENT_DUMMY, \
174*53ee8cc1Swenshuai.xi /* 1 */    MIU_CLIENT_DUMMY, \
175*53ee8cc1Swenshuai.xi /* 2 */    MIU_CLIENT_DUMMY, \
176*53ee8cc1Swenshuai.xi /* 3 */    MIU_CLIENT_DUMMY, \
177*53ee8cc1Swenshuai.xi /* 4 */    MIU_CLIENT_DUMMY, \
178*53ee8cc1Swenshuai.xi /* 5 */    MIU_CLIENT_DUMMY, \
179*53ee8cc1Swenshuai.xi /* 6 */    MIU_CLIENT_DUMMY, \
180*53ee8cc1Swenshuai.xi /* 7 */    MIU_CLIENT_DUMMY, \
181*53ee8cc1Swenshuai.xi /* 8 */    MIU_CLIENT_DUMMY, \
182*53ee8cc1Swenshuai.xi /* 9 */    MIU_CLIENT_DUMMY, \
183*53ee8cc1Swenshuai.xi /*10 */    MIU_CLIENT_DUMMY, \
184*53ee8cc1Swenshuai.xi /*11 */    MIU_CLIENT_DUMMY, \
185*53ee8cc1Swenshuai.xi /*12 */    MIU_CLIENT_DUMMY, \
186*53ee8cc1Swenshuai.xi /*13 */    MIU_CLIENT_DUMMY, \
187*53ee8cc1Swenshuai.xi /*14 */    MIU_CLIENT_DUMMY, \
188*53ee8cc1Swenshuai.xi /*15 */    MIU_CLIENT_DUMMY
189*53ee8cc1Swenshuai.xi 
190*53ee8cc1Swenshuai.xi #define MIU_CLIENT_GP4  \
191*53ee8cc1Swenshuai.xi /* 0 */    MIU_CLIENT_HVD_BBU_R, \
192*53ee8cc1Swenshuai.xi /* 1 */    MIU_CLIENT_GE_RW, \
193*53ee8cc1Swenshuai.xi /* 2 */    MIU_CLIENT_HVD_RW, \
194*53ee8cc1Swenshuai.xi /* 3 */    MIU_CLIENT_SECHVD_RW, \
195*53ee8cc1Swenshuai.xi /* 4 */    MIU_CLIENT_EVD_RW,\
196*53ee8cc1Swenshuai.xi /* 5 */    MIU_CLIENT_DUMMY, \
197*53ee8cc1Swenshuai.xi /* 6 */    MIU_CLIENT_MVD_RTO_RW, \
198*53ee8cc1Swenshuai.xi /* 7 */    MIU_CLIENT_DUMMY, \
199*53ee8cc1Swenshuai.xi /* 8 */    MIU_CLIENT_DUMMY, \
200*53ee8cc1Swenshuai.xi /* 9 */    MIU_CLIENT_DUMMY, \
201*53ee8cc1Swenshuai.xi /*10 */    MIU_CLIENT_DUMMY, \
202*53ee8cc1Swenshuai.xi /*11 */    MIU_CLIENT_DUMMY, \
203*53ee8cc1Swenshuai.xi /*12 */    MIU_CLIENT_DUMMY, \
204*53ee8cc1Swenshuai.xi /*13 */    MIU_CLIENT_DUMMY, \
205*53ee8cc1Swenshuai.xi /*14 */    MIU_CLIENT_DUMMY, \
206*53ee8cc1Swenshuai.xi /*15 */    MIU_CLIENT_DUMMY
207*53ee8cc1Swenshuai.xi 
208*53ee8cc1Swenshuai.xi /* FRC Support MIU1,2 only */
209*53ee8cc1Swenshuai.xi #define MIU_CLIENT_GP5  \
210*53ee8cc1Swenshuai.xi /* 0 */    MIU_CLIENT_DUMMY, \
211*53ee8cc1Swenshuai.xi /* 1 */    MIU_CLIENT_DUMMY, \
212*53ee8cc1Swenshuai.xi /* 2 */    MIU_CLIENT_DUMMY, \
213*53ee8cc1Swenshuai.xi /* 3 */    MIU_CLIENT_DUMMY, \
214*53ee8cc1Swenshuai.xi /* 4 */    MIU_CLIENT_DUMMY, \
215*53ee8cc1Swenshuai.xi /* 5 */    MIU_CLIENT_DUMMY, \
216*53ee8cc1Swenshuai.xi /* 6 */    MIU_CLIENT_DUMMY, \
217*53ee8cc1Swenshuai.xi /* 7 */    MIU_CLIENT_DUMMY, \
218*53ee8cc1Swenshuai.xi /* 8 */    MIU_CLIENT_DUMMY, \
219*53ee8cc1Swenshuai.xi /* 9 */    MIU_CLIENT_DUMMY, \
220*53ee8cc1Swenshuai.xi /*10 */    MIU_CLIENT_DUMMY, \
221*53ee8cc1Swenshuai.xi /*11 */    MIU_CLIENT_DUMMY, \
222*53ee8cc1Swenshuai.xi /*12 */    MIU_CLIENT_DUMMY, \
223*53ee8cc1Swenshuai.xi /*13 */    MIU_CLIENT_DUMMY, \
224*53ee8cc1Swenshuai.xi /*14 */    MIU_CLIENT_DUMMY, \
225*53ee8cc1Swenshuai.xi /*15 */    MIU_CLIENT_DUMMY
226*53ee8cc1Swenshuai.xi 
227*53ee8cc1Swenshuai.xi #define MIU_CLIENT_GP6  \
228*53ee8cc1Swenshuai.xi /* 0 */    MIU_CLIENT_SC_IPMAIN_RW, \
229*53ee8cc1Swenshuai.xi /* 1 */    MIU_CLIENT_SC_OPMAIN_RW, \
230*53ee8cc1Swenshuai.xi /* 2 */    MIU_CLIENT_MVOP_128BIT_R, \
231*53ee8cc1Swenshuai.xi /* 3 */    MIU_CLIENT_MFDEC_R, \
232*53ee8cc1Swenshuai.xi /* 4 */    MIU_CLIENT_SECMFDEC_R, \
233*53ee8cc1Swenshuai.xi /* 5 */    MIU_CLIENT_GOP0_R, \
234*53ee8cc1Swenshuai.xi /* 6 */    MIU_CLIENT_GOP1_R, \
235*53ee8cc1Swenshuai.xi /* 7 */    MIU_CLIENT_GOP2_R, \
236*53ee8cc1Swenshuai.xi /* 8 */    MIU_CLIENT_GOP3_R, \
237*53ee8cc1Swenshuai.xi /* 9 */    MIU_CLIENT_MC2D_RW, \
238*53ee8cc1Swenshuai.xi /*10 */    MIU_CLIENT_T3D_RW, \
239*53ee8cc1Swenshuai.xi /*11 */    MIU_CLIENT_VE_W, \
240*53ee8cc1Swenshuai.xi /*12 */    MIU_CLIENT_SC1_OPMAIN_RW, \
241*53ee8cc1Swenshuai.xi /*13 */    MIU_CLIENT_SC_OD_RW, \
242*53ee8cc1Swenshuai.xi /*14 */    MIU_CLIENT_SC1_IPMAIN_RW, \
243*53ee8cc1Swenshuai.xi /*15 */    MIU_CLIENT_SC_IPMAIN2_RW
244*53ee8cc1Swenshuai.xi 
245*53ee8cc1Swenshuai.xi #define MIU_CLIENT_GP7  \
246*53ee8cc1Swenshuai.xi /* 0 */    MIU_CLIENT_MIPS_RW, \
247*53ee8cc1Swenshuai.xi /* 1 */    MIU_CLIENT_G3D_RW
248*53ee8cc1Swenshuai.xi 
249*53ee8cc1Swenshuai.xi #define MIU1_CLIENT_GP0  \
250*53ee8cc1Swenshuai.xi /* 0 */    MIU_CLIENT_NONE, \
251*53ee8cc1Swenshuai.xi /* 1 */    MIU_CLIENT_VIVALDI9_DECODER_R, \
252*53ee8cc1Swenshuai.xi /* 2 */    MIU_CLIENT_SECAU_R2_RW, \
253*53ee8cc1Swenshuai.xi /* 3 */    MIU_CLIENT_USB3_RW,\
254*53ee8cc1Swenshuai.xi /* 4 */    MIU_CLIENT_SECURE_R2_RW,\
255*53ee8cc1Swenshuai.xi /* 5 */    MIU_CLIENT_AU_R2_RW, \
256*53ee8cc1Swenshuai.xi /* 6 */    MIU_CLIENT_VD_R2D_RW,\
257*53ee8cc1Swenshuai.xi /* 7 */    MIU_CLIENT_PM51_RW, \
258*53ee8cc1Swenshuai.xi /* 8 */    MIU_CLIENT_VD_R2I_R, \
259*53ee8cc1Swenshuai.xi /* 9 */    MIU_CLIENT_USB_UHC0_RW, \
260*53ee8cc1Swenshuai.xi /*10 */    MIU_CLIENT_USB_UHC1_RW, \
261*53ee8cc1Swenshuai.xi /*11 */    MIU_CLIENT_USB_UHC2_RW, \
262*53ee8cc1Swenshuai.xi /*12 */    MIU_CLIENT_MVD_BBU_RW, \
263*53ee8cc1Swenshuai.xi /*13 */    MIU_CLIENT_EMAC_RW, \
264*53ee8cc1Swenshuai.xi /*14 */    MIU_CLIENT_BDMA_RW, \
265*53ee8cc1Swenshuai.xi /*15 */    MIU_CLIENT_DUMMY
266*53ee8cc1Swenshuai.xi 
267*53ee8cc1Swenshuai.xi #define MIU1_CLIENT_GP1  \
268*53ee8cc1Swenshuai.xi /* 0 */    MIU_CLIENT_VIVALDI9_MAD_RW, \
269*53ee8cc1Swenshuai.xi /* 1 */    MIU_CLIENT_DEMOD_W, \
270*53ee8cc1Swenshuai.xi /* 2 */    MIU_CLIENT_DUMMY, \
271*53ee8cc1Swenshuai.xi /* 3 */    MIU_CLIENT_JPD720P_RW, \
272*53ee8cc1Swenshuai.xi /* 4 */    MIU_CLIENT_FRC_R2, \
273*53ee8cc1Swenshuai.xi /* 5 */    MIU_CLIENT_MIIC0_RW,\
274*53ee8cc1Swenshuai.xi /* 6 */    MIU_CLIENT_UART_DMA_RW, \
275*53ee8cc1Swenshuai.xi /* 7 */    MIU_CLIENT_USB30_1_RW, \
276*53ee8cc1Swenshuai.xi /* 8 */    MIU_CLIENT_TSP_ORZ_W, \
277*53ee8cc1Swenshuai.xi /* 9 */    MIU_CLIENT_TSP_ORZ_R, \
278*53ee8cc1Swenshuai.xi /*10 */    MIU_CLIENT_DUMMY, \
279*53ee8cc1Swenshuai.xi /*11 */    MIU_CLIENT_VD_TTXSL_W, \
280*53ee8cc1Swenshuai.xi /*12 */    MIU_CLIENT_VD_COMB_W, \
281*53ee8cc1Swenshuai.xi /*13 */    MIU_CLIENT_VD_COMB_R,  \
282*53ee8cc1Swenshuai.xi /*14 */    MIU_CLIENT_USB_UHC3_RW, \
283*53ee8cc1Swenshuai.xi /*15 */    MIU_CLIENT_DUMMY
284*53ee8cc1Swenshuai.xi 
285*53ee8cc1Swenshuai.xi #define MIU1_CLIENT_GP2  \
286*53ee8cc1Swenshuai.xi /* 0 */    MIU_CLIENT_CMD_QUEUE_RW, \
287*53ee8cc1Swenshuai.xi /* 1 */    MIU_CLIENT_CMD_QUEUE1_RW, \
288*53ee8cc1Swenshuai.xi /* 2 */    MIU_CLIENT_DUMMY, \
289*53ee8cc1Swenshuai.xi /* 3 */    MIU_CLIENT_DUMMY, \
290*53ee8cc1Swenshuai.xi /* 4 */    MIU_CLIENT_MVD_RW, \
291*53ee8cc1Swenshuai.xi /* 5 */    MIU_CLIENT_AESDMA_RW, \
292*53ee8cc1Swenshuai.xi /* 6 */    MIU_CLIENT_GPD_RW, \
293*53ee8cc1Swenshuai.xi /* 7 */    MIU_CLIENT_MFE0_W, \
294*53ee8cc1Swenshuai.xi /* 8 */    MIU_CLIENT_MFE1_R, \
295*53ee8cc1Swenshuai.xi /* 9 */    MIU_CLIENT_NAND_RW, \
296*53ee8cc1Swenshuai.xi /*10 */    MIU_CLIENT_SDIO_RW, \
297*53ee8cc1Swenshuai.xi /*11 */    MIU_CLIENT_DSCRMB_RW, \
298*53ee8cc1Swenshuai.xi /*12 */    MIU_CLIENT_TSP_FIQ_RW, \
299*53ee8cc1Swenshuai.xi /*13 */    MIU_CLIENT_TSP_ORZ_W, \
300*53ee8cc1Swenshuai.xi /*14 */    MIU_CLIENT_TSP_ORZ_R,\
301*53ee8cc1Swenshuai.xi /*15 */    MIU_CLIENT_TSO_RW
302*53ee8cc1Swenshuai.xi 
303*53ee8cc1Swenshuai.xi #define MIU1_CLIENT_GP3  \
304*53ee8cc1Swenshuai.xi /* 0 */    MIU_CLIENT_DUMMY, \
305*53ee8cc1Swenshuai.xi /* 1 */    MIU_CLIENT_DUMMY, \
306*53ee8cc1Swenshuai.xi /* 2 */    MIU_CLIENT_DUMMY, \
307*53ee8cc1Swenshuai.xi /* 3 */    MIU_CLIENT_DUMMY, \
308*53ee8cc1Swenshuai.xi /* 4 */    MIU_CLIENT_DUMMY, \
309*53ee8cc1Swenshuai.xi /* 5 */    MIU_CLIENT_DUMMY, \
310*53ee8cc1Swenshuai.xi /* 6 */    MIU_CLIENT_DUMMY, \
311*53ee8cc1Swenshuai.xi /* 7 */    MIU_CLIENT_DUMMY, \
312*53ee8cc1Swenshuai.xi /* 8 */    MIU_CLIENT_DUMMY, \
313*53ee8cc1Swenshuai.xi /* 9 */    MIU_CLIENT_DUMMY, \
314*53ee8cc1Swenshuai.xi /*10 */    MIU_CLIENT_DUMMY, \
315*53ee8cc1Swenshuai.xi /*11 */    MIU_CLIENT_DUMMY, \
316*53ee8cc1Swenshuai.xi /*12 */    MIU_CLIENT_DUMMY, \
317*53ee8cc1Swenshuai.xi /*13 */    MIU_CLIENT_DUMMY, \
318*53ee8cc1Swenshuai.xi /*14 */    MIU_CLIENT_DUMMY, \
319*53ee8cc1Swenshuai.xi /*15 */    MIU_CLIENT_DUMMY
320*53ee8cc1Swenshuai.xi 
321*53ee8cc1Swenshuai.xi #define MIU1_CLIENT_GP4  \
322*53ee8cc1Swenshuai.xi /* 0 */    MIU_CLIENT_HVD_BBU_R, \
323*53ee8cc1Swenshuai.xi /* 1 */    MIU_CLIENT_GE_RW, \
324*53ee8cc1Swenshuai.xi /* 2 */    MIU_CLIENT_HVD_RW, \
325*53ee8cc1Swenshuai.xi /* 3 */    MIU_CLIENT_SECHVD_RW, \
326*53ee8cc1Swenshuai.xi /* 4 */    MIU_CLIENT_EVD_RW,\
327*53ee8cc1Swenshuai.xi /* 5 */    MIU_CLIENT_DUMMY, \
328*53ee8cc1Swenshuai.xi /* 6 */    MIU_CLIENT_MVD_RTO_RW, \
329*53ee8cc1Swenshuai.xi /* 7 */    MIU_CLIENT_DUMMY, \
330*53ee8cc1Swenshuai.xi /* 8 */    MIU_CLIENT_DUMMY, \
331*53ee8cc1Swenshuai.xi /* 9 */    MIU_CLIENT_DUMMY, \
332*53ee8cc1Swenshuai.xi /*10 */    MIU_CLIENT_DUMMY, \
333*53ee8cc1Swenshuai.xi /*11 */    MIU_CLIENT_DUMMY, \
334*53ee8cc1Swenshuai.xi /*12 */    MIU_CLIENT_DUMMY, \
335*53ee8cc1Swenshuai.xi /*13 */    MIU_CLIENT_DUMMY, \
336*53ee8cc1Swenshuai.xi /*14 */    MIU_CLIENT_DUMMY, \
337*53ee8cc1Swenshuai.xi /*15 */    MIU_CLIENT_DUMMY
338*53ee8cc1Swenshuai.xi 
339*53ee8cc1Swenshuai.xi #define MIU1_CLIENT_GP5  \
340*53ee8cc1Swenshuai.xi /* 0 */    MIU_CLIENT_FRC_FSCM2_RW, \
341*53ee8cc1Swenshuai.xi /* 1 */    MIU_CLIENT_FRC_FSCM3_RW, \
342*53ee8cc1Swenshuai.xi /* 2 */    MIU_CLIENT_FRC_IPM0_W, \
343*53ee8cc1Swenshuai.xi /* 3 */    MIU_CLIENT_FRC_IPM1_W, \
344*53ee8cc1Swenshuai.xi /* 4 */    MIU_CLIENT_FRC_OPM0_R, \
345*53ee8cc1Swenshuai.xi /* 5 */    MIU_CLIENT_FRC_OPM1_R, \
346*53ee8cc1Swenshuai.xi /* 6 */    MIU_CLIENT_FRC_OPME0_R, \
347*53ee8cc1Swenshuai.xi /* 7 */    MIU_CLIENT_FRC_OPME1_R, \
348*53ee8cc1Swenshuai.xi /* 8 */    MIU_CLIENT_FRC_OPMI0_R, \
349*53ee8cc1Swenshuai.xi /* 9 */    MIU_CLIENT_FRC_OPMI1_R, \
350*53ee8cc1Swenshuai.xi /*10 */    MIU_CLIENT_FRC_ME_W, \
351*53ee8cc1Swenshuai.xi /*11 */    MIU_CLIENT_FRC_ME_R, \
352*53ee8cc1Swenshuai.xi /*12 */    MIU_CLIENT_FRC_HR_W, \
353*53ee8cc1Swenshuai.xi /*13 */    MIU_CLIENT_FRC_HR_R, \
354*53ee8cc1Swenshuai.xi /*14 */    MIU_CLIENT_FRC_MI_MERGE_RW, \
355*53ee8cc1Swenshuai.xi /*15 */    MIU_CLIENT_DUMMY
356*53ee8cc1Swenshuai.xi 
357*53ee8cc1Swenshuai.xi #define MIU1_CLIENT_GP6  \
358*53ee8cc1Swenshuai.xi /* 0 */    MIU_CLIENT_SC_IPMAIN_RW, \
359*53ee8cc1Swenshuai.xi /* 1 */    MIU_CLIENT_SC_OPMAIN_RW, \
360*53ee8cc1Swenshuai.xi /* 2 */    MIU_CLIENT_MVOP_128BIT_R, \
361*53ee8cc1Swenshuai.xi /* 3 */    MIU_CLIENT_MFDEC_R, \
362*53ee8cc1Swenshuai.xi /* 4 */    MIU_CLIENT_SECMFDEC_R, \
363*53ee8cc1Swenshuai.xi /* 5 */    MIU_CLIENT_GOP0_R, \
364*53ee8cc1Swenshuai.xi /* 6 */    MIU_CLIENT_GOP1_R, \
365*53ee8cc1Swenshuai.xi /* 7 */    MIU_CLIENT_GOP2_R, \
366*53ee8cc1Swenshuai.xi /* 8 */    MIU_CLIENT_GOP3_R, \
367*53ee8cc1Swenshuai.xi /* 9 */    MIU_CLIENT_MC2D_RW, \
368*53ee8cc1Swenshuai.xi /*10 */    MIU_CLIENT_T3D_RW, \
369*53ee8cc1Swenshuai.xi /*11 */    MIU_CLIENT_VE_W, \
370*53ee8cc1Swenshuai.xi /*12 */    MIU_CLIENT_SC1_OPMAIN_RW, \
371*53ee8cc1Swenshuai.xi /*13 */    MIU_CLIENT_SC_OD_RW, \
372*53ee8cc1Swenshuai.xi /*14 */    MIU_CLIENT_SC1_IPMAIN_RW, \
373*53ee8cc1Swenshuai.xi /*15 */    MIU_CLIENT_SC_IPMAIN2_RW
374*53ee8cc1Swenshuai.xi 
375*53ee8cc1Swenshuai.xi #define MIU1_CLIENT_GP7  \
376*53ee8cc1Swenshuai.xi /* 0 */    MIU_CLIENT_MIPS_RW, \
377*53ee8cc1Swenshuai.xi /* 1 */    MIU_CLIENT_G3D_RW
378*53ee8cc1Swenshuai.xi 
379*53ee8cc1Swenshuai.xi #define MIU2_CLIENT_GP0  \
380*53ee8cc1Swenshuai.xi /* 0 */    MIU_CLIENT_NONE, \
381*53ee8cc1Swenshuai.xi /* 1 */    MIU_CLIENT_DUMMY, \
382*53ee8cc1Swenshuai.xi /* 2 */    MIU_CLIENT_DUMMY, \
383*53ee8cc1Swenshuai.xi /* 3 */    MIU_CLIENT_USB3_RW,\
384*53ee8cc1Swenshuai.xi /* 4 */    MIU_CLIENT_SECURE_R2_RW,\
385*53ee8cc1Swenshuai.xi /* 5 */    MIU_CLIENT_DUMMY, \
386*53ee8cc1Swenshuai.xi /* 6 */    MIU_CLIENT_VD_R2D_RW,\
387*53ee8cc1Swenshuai.xi /* 7 */    MIU_CLIENT_PM51_RW, \
388*53ee8cc1Swenshuai.xi /* 8 */    MIU_CLIENT_VD_R2I_R, \
389*53ee8cc1Swenshuai.xi /* 9 */    MIU_CLIENT_USB_UHC0_RW, \
390*53ee8cc1Swenshuai.xi /*10 */    MIU_CLIENT_USB_UHC1_RW, \
391*53ee8cc1Swenshuai.xi /*11 */    MIU_CLIENT_USB_UHC2_RW, \
392*53ee8cc1Swenshuai.xi /*12 */    MIU_CLIENT_MVD_BBU_RW, \
393*53ee8cc1Swenshuai.xi /*13 */    MIU_CLIENT_DUMMY, \
394*53ee8cc1Swenshuai.xi /*14 */    MIU_CLIENT_BDMA_RW, \
395*53ee8cc1Swenshuai.xi /*15 */    MIU_CLIENT_DUMMY
396*53ee8cc1Swenshuai.xi 
397*53ee8cc1Swenshuai.xi #define MIU2_CLIENT_GP1  \
398*53ee8cc1Swenshuai.xi /* 0 */    MIU_CLIENT_DUMMY, \
399*53ee8cc1Swenshuai.xi /* 1 */    MIU_CLIENT_DUMMY, \
400*53ee8cc1Swenshuai.xi /* 2 */    MIU_CLIENT_DUMMY, \
401*53ee8cc1Swenshuai.xi /* 3 */    MIU_CLIENT_JPD720P_RW, \
402*53ee8cc1Swenshuai.xi /* 4 */    MIU_CLIENT_FRC_R2, \
403*53ee8cc1Swenshuai.xi /* 5 */    MIU_CLIENT_MIIC0_RW,\
404*53ee8cc1Swenshuai.xi /* 6 */    MIU_CLIENT_UART_DMA_RW, \
405*53ee8cc1Swenshuai.xi /* 7 */    MIU_CLIENT_USB30_1_RW, \
406*53ee8cc1Swenshuai.xi /* 8 */    MIU_CLIENT_DUMMY, \
407*53ee8cc1Swenshuai.xi /* 9 */    MIU_CLIENT_DUMMY, \
408*53ee8cc1Swenshuai.xi /*10 */    MIU_CLIENT_DUMMY, \
409*53ee8cc1Swenshuai.xi /*11 */    MIU_CLIENT_DUMMY, \
410*53ee8cc1Swenshuai.xi /*12 */    MIU_CLIENT_DUMMY, \
411*53ee8cc1Swenshuai.xi /*13 */    MIU_CLIENT_DUMMY,  \
412*53ee8cc1Swenshuai.xi /*14 */    MIU_CLIENT_USB_UHC3_RW, \
413*53ee8cc1Swenshuai.xi /*15 */    MIU_CLIENT_DUMMY
414*53ee8cc1Swenshuai.xi 
415*53ee8cc1Swenshuai.xi #define MIU2_CLIENT_GP2  \
416*53ee8cc1Swenshuai.xi /* 0 */    MIU_CLIENT_CMD_QUEUE_RW, \
417*53ee8cc1Swenshuai.xi /* 1 */    MIU_CLIENT_CMD_QUEUE1_RW, \
418*53ee8cc1Swenshuai.xi /* 2 */    MIU_CLIENT_DUMMY, \
419*53ee8cc1Swenshuai.xi /* 3 */    MIU_CLIENT_DUMMY, \
420*53ee8cc1Swenshuai.xi /* 4 */    MIU_CLIENT_MVD_RW, \
421*53ee8cc1Swenshuai.xi /* 5 */    MIU_CLIENT_AESDMA_RW, \
422*53ee8cc1Swenshuai.xi /* 6 */    MIU_CLIENT_DUMMY, \
423*53ee8cc1Swenshuai.xi /* 7 */    MIU_CLIENT_MFE0_W, \
424*53ee8cc1Swenshuai.xi /* 8 */    MIU_CLIENT_MFE1_R, \
425*53ee8cc1Swenshuai.xi /* 9 */    MIU_CLIENT_NAND_RW, \
426*53ee8cc1Swenshuai.xi /*10 */    MIU_CLIENT_SDIO_RW, \
427*53ee8cc1Swenshuai.xi /*11 */    MIU_CLIENT_DSCRMB_RW, \
428*53ee8cc1Swenshuai.xi /*12 */    MIU_CLIENT_DUMMY, \
429*53ee8cc1Swenshuai.xi /*13 */    MIU_CLIENT_DUMMY, \
430*53ee8cc1Swenshuai.xi /*14 */    MIU_CLIENT_DUMMY,\
431*53ee8cc1Swenshuai.xi /*15 */    MIU_CLIENT_DUMMY
432*53ee8cc1Swenshuai.xi 
433*53ee8cc1Swenshuai.xi #define MIU2_CLIENT_GP3  \
434*53ee8cc1Swenshuai.xi /* 0 */    MIU_CLIENT_DUMMY, \
435*53ee8cc1Swenshuai.xi /* 1 */    MIU_CLIENT_DUMMY, \
436*53ee8cc1Swenshuai.xi /* 2 */    MIU_CLIENT_DUMMY, \
437*53ee8cc1Swenshuai.xi /* 3 */    MIU_CLIENT_DUMMY, \
438*53ee8cc1Swenshuai.xi /* 4 */    MIU_CLIENT_DUMMY, \
439*53ee8cc1Swenshuai.xi /* 5 */    MIU_CLIENT_DUMMY, \
440*53ee8cc1Swenshuai.xi /* 6 */    MIU_CLIENT_DUMMY, \
441*53ee8cc1Swenshuai.xi /* 7 */    MIU_CLIENT_DUMMY, \
442*53ee8cc1Swenshuai.xi /* 8 */    MIU_CLIENT_DUMMY, \
443*53ee8cc1Swenshuai.xi /* 9 */    MIU_CLIENT_DUMMY, \
444*53ee8cc1Swenshuai.xi /*10 */    MIU_CLIENT_DUMMY, \
445*53ee8cc1Swenshuai.xi /*11 */    MIU_CLIENT_DUMMY, \
446*53ee8cc1Swenshuai.xi /*12 */    MIU_CLIENT_DUMMY, \
447*53ee8cc1Swenshuai.xi /*13 */    MIU_CLIENT_DUMMY, \
448*53ee8cc1Swenshuai.xi /*14 */    MIU_CLIENT_DUMMY, \
449*53ee8cc1Swenshuai.xi /*15 */    MIU_CLIENT_DUMMY
450*53ee8cc1Swenshuai.xi 
451*53ee8cc1Swenshuai.xi #define MIU2_CLIENT_GP4  \
452*53ee8cc1Swenshuai.xi /* 0 */    MIU_CLIENT_DUMMY, \
453*53ee8cc1Swenshuai.xi /* 1 */    MIU_CLIENT_GE_RW, \
454*53ee8cc1Swenshuai.xi /* 2 */    MIU_CLIENT_DUMMY, \
455*53ee8cc1Swenshuai.xi /* 3 */    MIU_CLIENT_DUMMY, \
456*53ee8cc1Swenshuai.xi /* 4 */    MIU_CLIENT_DUMMY, \
457*53ee8cc1Swenshuai.xi /* 5 */    MIU_CLIENT_DUMMY, \
458*53ee8cc1Swenshuai.xi /* 6 */    MIU_CLIENT_MVD_RTO_RW, \
459*53ee8cc1Swenshuai.xi /* 7 */    MIU_CLIENT_DUMMY, \
460*53ee8cc1Swenshuai.xi /* 8 */    MIU_CLIENT_DUMMY, \
461*53ee8cc1Swenshuai.xi /* 9 */    MIU_CLIENT_DUMMY, \
462*53ee8cc1Swenshuai.xi /*10 */    MIU_CLIENT_DUMMY, \
463*53ee8cc1Swenshuai.xi /*11 */    MIU_CLIENT_DUMMY, \
464*53ee8cc1Swenshuai.xi /*12 */    MIU_CLIENT_DUMMY, \
465*53ee8cc1Swenshuai.xi /*13 */    MIU_CLIENT_DUMMY, \
466*53ee8cc1Swenshuai.xi /*14 */    MIU_CLIENT_DUMMY, \
467*53ee8cc1Swenshuai.xi /*15 */    MIU_CLIENT_DUMMY
468*53ee8cc1Swenshuai.xi 
469*53ee8cc1Swenshuai.xi #define MIU2_CLIENT_GP5  \
470*53ee8cc1Swenshuai.xi /* 0 */    MIU_CLIENT_FRC_FSCM2_RW, \
471*53ee8cc1Swenshuai.xi /* 1 */    MIU_CLIENT_FRC_FSCM3_RW, \
472*53ee8cc1Swenshuai.xi /* 2 */    MIU_CLIENT_FRC_IPM0_W, \
473*53ee8cc1Swenshuai.xi /* 3 */    MIU_CLIENT_FRC_IPM1_W, \
474*53ee8cc1Swenshuai.xi /* 4 */    MIU_CLIENT_FRC_OPM0_R, \
475*53ee8cc1Swenshuai.xi /* 5 */    MIU_CLIENT_FRC_OPM1_R, \
476*53ee8cc1Swenshuai.xi /* 6 */    MIU_CLIENT_FRC_OPME0_R, \
477*53ee8cc1Swenshuai.xi /* 7 */    MIU_CLIENT_FRC_OPME1_R, \
478*53ee8cc1Swenshuai.xi /* 8 */    MIU_CLIENT_FRC_OPMI0_R, \
479*53ee8cc1Swenshuai.xi /* 9 */    MIU_CLIENT_FRC_OPMI1_R, \
480*53ee8cc1Swenshuai.xi /*10 */    MIU_CLIENT_FRC_ME_W, \
481*53ee8cc1Swenshuai.xi /*11 */    MIU_CLIENT_FRC_ME_R, \
482*53ee8cc1Swenshuai.xi /*12 */    MIU_CLIENT_FRC_HR_W, \
483*53ee8cc1Swenshuai.xi /*13 */    MIU_CLIENT_FRC_HR_R, \
484*53ee8cc1Swenshuai.xi /*14 */    MIU_CLIENT_FRC_MI_MERGE_RW, \
485*53ee8cc1Swenshuai.xi /*15 */    MIU_CLIENT_DUMMY
486*53ee8cc1Swenshuai.xi 
487*53ee8cc1Swenshuai.xi #define MIU2_CLIENT_GP6  \
488*53ee8cc1Swenshuai.xi /* 0 */    MIU_CLIENT_SC_IPMAIN_RW, \
489*53ee8cc1Swenshuai.xi /* 1 */    MIU_CLIENT_SC_OPMAIN_RW, \
490*53ee8cc1Swenshuai.xi /* 2 */    MIU_CLIENT_MVOP_128BIT_R, \
491*53ee8cc1Swenshuai.xi /* 3 */    MIU_CLIENT_MFDEC_R, \
492*53ee8cc1Swenshuai.xi /* 4 */    MIU_CLIENT_SECMFDEC_R, \
493*53ee8cc1Swenshuai.xi /* 5 */    MIU_CLIENT_GOP0_R, \
494*53ee8cc1Swenshuai.xi /* 6 */    MIU_CLIENT_GOP1_R, \
495*53ee8cc1Swenshuai.xi /* 7 */    MIU_CLIENT_GOP2_R, \
496*53ee8cc1Swenshuai.xi /* 8 */    MIU_CLIENT_GOP3_R, \
497*53ee8cc1Swenshuai.xi /* 9 */    MIU_CLIENT_MC2D_RW, \
498*53ee8cc1Swenshuai.xi /*10 */    MIU_CLIENT_T3D_RW, \
499*53ee8cc1Swenshuai.xi /*11 */    MIU_CLIENT_VE_W, \
500*53ee8cc1Swenshuai.xi /*12 */    MIU_CLIENT_SC1_OPMAIN_RW, \
501*53ee8cc1Swenshuai.xi /*13 */    MIU_CLIENT_SC_OD_RW, \
502*53ee8cc1Swenshuai.xi /*14 */    MIU_CLIENT_SC1_IPMAIN_RW, \
503*53ee8cc1Swenshuai.xi /*15 */    MIU_CLIENT_SC_IPMAIN2_RW
504*53ee8cc1Swenshuai.xi 
505*53ee8cc1Swenshuai.xi #define MIU2_CLIENT_GP7  \
506*53ee8cc1Swenshuai.xi /* 0 */    MIU_CLIENT_MIPS_RW, \
507*53ee8cc1Swenshuai.xi /* 1 */    MIU_CLIENT_G3D_RW
508*53ee8cc1Swenshuai.xi //[MIU][HAL][005] Update MIU Client Table [END]
509*53ee8cc1Swenshuai.xi 
510*53ee8cc1Swenshuai.xi #define KHz                 (1000UL)
511*53ee8cc1Swenshuai.xi #define MHz                 (1000000UL)
512*53ee8cc1Swenshuai.xi #define MPPL                (432)
513*53ee8cc1Swenshuai.xi #define DDR_FACTOR          (524288)
514*53ee8cc1Swenshuai.xi #define DDFSPAN_FACTOR      (131072)
515*53ee8cc1Swenshuai.xi #define IDNUM_KERNELPROTECT (8)
516*53ee8cc1Swenshuai.xi 
517*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
518*53ee8cc1Swenshuai.xi //  Local Structures
519*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
520*53ee8cc1Swenshuai.xi //[MIU][HAL][006] Check data structure of MIU client table [START]
521*53ee8cc1Swenshuai.xi const eMIUClientID clientTbl[MIU_MAX_DEVICE][MIU_MAX_TBL_CLIENT] =
522*53ee8cc1Swenshuai.xi {
523*53ee8cc1Swenshuai.xi     {MIU_CLIENT_GP0, MIU_CLIENT_GP1, MIU_CLIENT_GP2, MIU_CLIENT_GP3, MIU_CLIENT_GP4, MIU_CLIENT_GP5, MIU_CLIENT_GP6, MIU_CLIENT_GP7}
524*53ee8cc1Swenshuai.xi     ,{MIU1_CLIENT_GP0, MIU1_CLIENT_GP1, MIU1_CLIENT_GP2, MIU1_CLIENT_GP3, MIU1_CLIENT_GP4, MIU1_CLIENT_GP5, MIU1_CLIENT_GP6, MIU1_CLIENT_GP7}
525*53ee8cc1Swenshuai.xi     ,{MIU2_CLIENT_GP0, MIU2_CLIENT_GP1, MIU2_CLIENT_GP2, MIU2_CLIENT_GP3, MIU2_CLIENT_GP4, MIU2_CLIENT_GP5, MIU2_CLIENT_GP6, MIU2_CLIENT_GP7}
526*53ee8cc1Swenshuai.xi };
527*53ee8cc1Swenshuai.xi //[MIU][HAL][006] Check data structure of MIU client table [END]
528*53ee8cc1Swenshuai.xi 
529*53ee8cc1Swenshuai.xi //[MIU][HAL][007] Check kernel protect table [START]
530*53ee8cc1Swenshuai.xi MS_U8 clientId_KernelProtect[IDNUM_KERNELPROTECT] =
531*53ee8cc1Swenshuai.xi {
532*53ee8cc1Swenshuai.xi     MIU_CLIENT_MIPS_RW, MIU_CLIENT_NAND_RW, MIU_CLIENT_USB_UHC0_RW, MIU_CLIENT_USB_UHC1_RW,
533*53ee8cc1Swenshuai.xi     MIU_CLIENT_USB_UHC2_RW, MIU_CLIENT_NONE, MIU_CLIENT_NONE, MIU_CLIENT_NONE
534*53ee8cc1Swenshuai.xi };
535*53ee8cc1Swenshuai.xi //[MIU][HAL][007] Check kernel protect table [END]
536*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
537*53ee8cc1Swenshuai.xi //  Global Variables
538*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
539*53ee8cc1Swenshuai.xi 
540*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
541*53ee8cc1Swenshuai.xi //  Local Variables
542*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
543*53ee8cc1Swenshuai.xi static MS_VIRT _gMIU_MapBase = 0xBF200000;      //default set to MIPS platfrom
544*53ee8cc1Swenshuai.xi static MS_VIRT _gPM_MapBase = 0xBF000000;      //default set to MIPS platfrom
545*53ee8cc1Swenshuai.xi 
546*53ee8cc1Swenshuai.xi MS_BOOL IDEnables[MIU_MAX_DEVICE][MIU_MAX_PROTECT_BLOCK][MIU_MAX_PROTECT_ID] = {{{0},{0},{0},{0}}, {{0},{0},{0},{0}}, {{0},{0},{0},{0}}}; //ID enable for protect block 0~3
547*53ee8cc1Swenshuai.xi MS_U32 IDs[MIU_MAX_DEVICE][MIU_MAX_PROTECT_ID] = {{0}, {0}, {0}}; //IDs for protection
548*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
549*53ee8cc1Swenshuai.xi //  Debug Functions
550*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
551*53ee8cc1Swenshuai.xi 
552*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
553*53ee8cc1Swenshuai.xi //  Local Functions
554*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
555*53ee8cc1Swenshuai.xi 
556*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
557*53ee8cc1Swenshuai.xi // Type and Structure Declaration
558*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
559*53ee8cc1Swenshuai.xi 
560*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
561*53ee8cc1Swenshuai.xi //  Global Functions
562*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
HAL_MIU_SetIOMapBase(MS_VIRT virtBase)563*53ee8cc1Swenshuai.xi void HAL_MIU_SetIOMapBase(MS_VIRT virtBase)
564*53ee8cc1Swenshuai.xi {
565*53ee8cc1Swenshuai.xi     _gMIU_MapBase = virtBase;
566*53ee8cc1Swenshuai.xi     HAL_MIU_SSC_DBG(printf("MIU _gMIU_MapBase= %lx\n", _gMIU_MapBase));
567*53ee8cc1Swenshuai.xi }
568*53ee8cc1Swenshuai.xi 
HAL_MIU_SetPMIOMapBase(MS_VIRT virtBase)569*53ee8cc1Swenshuai.xi void HAL_MIU_SetPMIOMapBase(MS_VIRT virtBase)
570*53ee8cc1Swenshuai.xi {
571*53ee8cc1Swenshuai.xi     _gPM_MapBase = virtBase;
572*53ee8cc1Swenshuai.xi     HAL_MIU_SSC_DBG(printf("MIU _gPM_MapBase= %lx\n", _gPM_MapBase));
573*53ee8cc1Swenshuai.xi }
574*53ee8cc1Swenshuai.xi 
HAL_MIU_GetClientInfo(MS_U8 u8MiuDev,eMIUClientID eClientID)575*53ee8cc1Swenshuai.xi MS_S16 HAL_MIU_GetClientInfo(MS_U8 u8MiuDev, eMIUClientID eClientID)
576*53ee8cc1Swenshuai.xi {
577*53ee8cc1Swenshuai.xi     MS_U8 idx;
578*53ee8cc1Swenshuai.xi 
579*53ee8cc1Swenshuai.xi     if (MIU_MAX_DEVICE <= u8MiuDev)
580*53ee8cc1Swenshuai.xi     {
581*53ee8cc1Swenshuai.xi         printf("Wrong MIU device:%u\n", u8MiuDev);
582*53ee8cc1Swenshuai.xi         return (-1);
583*53ee8cc1Swenshuai.xi     }
584*53ee8cc1Swenshuai.xi 
585*53ee8cc1Swenshuai.xi     for (idx = 0; idx < MIU_MAX_TBL_CLIENT; idx++)
586*53ee8cc1Swenshuai.xi         if (eClientID == clientTbl[u8MiuDev][idx])
587*53ee8cc1Swenshuai.xi             return idx;
588*53ee8cc1Swenshuai.xi     return (-1);
589*53ee8cc1Swenshuai.xi }
590*53ee8cc1Swenshuai.xi 
591*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
592*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_MIU_ReadByte
593*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description: read 1 Byte data
594*53ee8cc1Swenshuai.xi /// @param <IN>         \b u32RegAddr: register address
595*53ee8cc1Swenshuai.xi /// @param <OUT>        \b None :
596*53ee8cc1Swenshuai.xi /// @param <RET>        \b MS_U8
597*53ee8cc1Swenshuai.xi /// @param <GLOBAL>     \b None :
598*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MIU_ReadByte(MS_U32 u32RegAddr)599*53ee8cc1Swenshuai.xi MS_U8 HAL_MIU_ReadByte(MS_U32 u32RegAddr)
600*53ee8cc1Swenshuai.xi {
601*53ee8cc1Swenshuai.xi     return ((volatile MS_U8*)(_gMIU_MapBase))[(u32RegAddr << 1) - (u32RegAddr & 1)];
602*53ee8cc1Swenshuai.xi }
603*53ee8cc1Swenshuai.xi 
604*53ee8cc1Swenshuai.xi 
605*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
606*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_MIU_PM_ReadByte
607*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description: read 1 Byte data
608*53ee8cc1Swenshuai.xi /// @param <IN>         \b u32RegAddr: register address
609*53ee8cc1Swenshuai.xi /// @param <OUT>        \b None :
610*53ee8cc1Swenshuai.xi /// @param <RET>        \b MS_U8
611*53ee8cc1Swenshuai.xi /// @param <GLOBAL>     \b None :
612*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MIU_PM_ReadByte(MS_U32 u32RegAddr)613*53ee8cc1Swenshuai.xi MS_U8 HAL_MIU_PM_ReadByte(MS_U32 u32RegAddr)
614*53ee8cc1Swenshuai.xi {
615*53ee8cc1Swenshuai.xi     return ((volatile MS_U8*)(_gPM_MapBase))[(u32RegAddr << 1) - (u32RegAddr & 1)];
616*53ee8cc1Swenshuai.xi }
617*53ee8cc1Swenshuai.xi 
618*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
619*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_MIU_Read4Byte
620*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description: read 2 Byte data
621*53ee8cc1Swenshuai.xi /// @param <IN>         \b u32RegAddr: register address
622*53ee8cc1Swenshuai.xi /// @param <OUT>        \b None :
623*53ee8cc1Swenshuai.xi /// @param <RET>        \b MS_U16
624*53ee8cc1Swenshuai.xi /// @param <GLOBAL>     \b None :
625*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MIU_Read2Byte(MS_U32 u32RegAddr)626*53ee8cc1Swenshuai.xi MS_U16 HAL_MIU_Read2Byte(MS_U32 u32RegAddr)
627*53ee8cc1Swenshuai.xi {
628*53ee8cc1Swenshuai.xi     return ((volatile MS_U16*)(_gMIU_MapBase))[u32RegAddr];
629*53ee8cc1Swenshuai.xi }
630*53ee8cc1Swenshuai.xi 
631*53ee8cc1Swenshuai.xi 
632*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
633*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_MIU_Read4Byte
634*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description: read 4 Byte data
635*53ee8cc1Swenshuai.xi /// @param <IN>         \b u32RegAddr: register address
636*53ee8cc1Swenshuai.xi /// @param <OUT>        \b None :
637*53ee8cc1Swenshuai.xi /// @param <RET>        \b MS_U32
638*53ee8cc1Swenshuai.xi /// @param <GLOBAL>     \b None :
639*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MIU_Read4Byte(MS_U32 u32RegAddr)640*53ee8cc1Swenshuai.xi MS_U32 HAL_MIU_Read4Byte(MS_U32 u32RegAddr)
641*53ee8cc1Swenshuai.xi {
642*53ee8cc1Swenshuai.xi     return (HAL_MIU_Read2Byte(u32RegAddr) | HAL_MIU_Read2Byte(u32RegAddr+2) << 16);
643*53ee8cc1Swenshuai.xi }
644*53ee8cc1Swenshuai.xi 
645*53ee8cc1Swenshuai.xi 
646*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
647*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_MIU_WriteByte
648*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description: write 1 Byte data
649*53ee8cc1Swenshuai.xi /// @param <IN>         \b u32RegAddr: register address
650*53ee8cc1Swenshuai.xi /// @param <IN>         \b u8Val : 1 byte data
651*53ee8cc1Swenshuai.xi /// @param <OUT>        \b None :
652*53ee8cc1Swenshuai.xi /// @param <RET>        \b TRUE: Ok FALSE: Fail
653*53ee8cc1Swenshuai.xi /// @param <GLOBAL>     \b None :
654*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MIU_WriteByte(MS_U32 u32RegAddr,MS_U8 u8Val)655*53ee8cc1Swenshuai.xi MS_BOOL HAL_MIU_WriteByte(MS_U32 u32RegAddr, MS_U8 u8Val)
656*53ee8cc1Swenshuai.xi {
657*53ee8cc1Swenshuai.xi     if (!u32RegAddr)
658*53ee8cc1Swenshuai.xi     {
659*53ee8cc1Swenshuai.xi         MIU_HAL_ERR("%s reg error!\n", __FUNCTION__);
660*53ee8cc1Swenshuai.xi         return FALSE;
661*53ee8cc1Swenshuai.xi     }
662*53ee8cc1Swenshuai.xi 
663*53ee8cc1Swenshuai.xi     ((volatile MS_U8*)(_gMIU_MapBase))[(u32RegAddr << 1) - (u32RegAddr & 1)] = u8Val;
664*53ee8cc1Swenshuai.xi     return TRUE;
665*53ee8cc1Swenshuai.xi }
666*53ee8cc1Swenshuai.xi 
667*53ee8cc1Swenshuai.xi 
668*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
669*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_MIU_Write2Byte
670*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description: write 2 Byte data
671*53ee8cc1Swenshuai.xi /// @param <IN>         \b u32RegAddr: register address
672*53ee8cc1Swenshuai.xi /// @param <IN>         \b u16Val : 2 byte data
673*53ee8cc1Swenshuai.xi /// @param <OUT>        \b None :
674*53ee8cc1Swenshuai.xi /// @param <RET>        \b TRUE: Ok FALSE: Fail
675*53ee8cc1Swenshuai.xi /// @param <GLOBAL>     \b None :
676*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MIU_Write2Byte(MS_U32 u32RegAddr,MS_U16 u16Val)677*53ee8cc1Swenshuai.xi MS_BOOL HAL_MIU_Write2Byte(MS_U32 u32RegAddr, MS_U16 u16Val)
678*53ee8cc1Swenshuai.xi {
679*53ee8cc1Swenshuai.xi     if (!u32RegAddr)
680*53ee8cc1Swenshuai.xi     {
681*53ee8cc1Swenshuai.xi         MIU_HAL_ERR("%s reg error!\n", __FUNCTION__);
682*53ee8cc1Swenshuai.xi         return FALSE;
683*53ee8cc1Swenshuai.xi     }
684*53ee8cc1Swenshuai.xi 
685*53ee8cc1Swenshuai.xi     ((volatile MS_U16*)(_gMIU_MapBase))[u32RegAddr] = u16Val;
686*53ee8cc1Swenshuai.xi     return TRUE;
687*53ee8cc1Swenshuai.xi }
688*53ee8cc1Swenshuai.xi 
689*53ee8cc1Swenshuai.xi 
690*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
691*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_BDMA_Write4Byte
692*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description: write 4 Byte data
693*53ee8cc1Swenshuai.xi /// @param <IN>         \b u32RegAddr: register address
694*53ee8cc1Swenshuai.xi /// @param <IN>         \b u32Val : 4 byte data
695*53ee8cc1Swenshuai.xi /// @param <OUT>        \b None :
696*53ee8cc1Swenshuai.xi /// @param <RET>        \b TRUE: Ok FALSE: Fail
697*53ee8cc1Swenshuai.xi /// @param <GLOBAL>     \b None :
698*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MIU_Write4Byte(MS_U32 u32RegAddr,MS_U32 u32Val)699*53ee8cc1Swenshuai.xi MS_BOOL HAL_MIU_Write4Byte(MS_U32 u32RegAddr, MS_U32 u32Val)
700*53ee8cc1Swenshuai.xi {
701*53ee8cc1Swenshuai.xi     if (!u32RegAddr)
702*53ee8cc1Swenshuai.xi     {
703*53ee8cc1Swenshuai.xi         MIU_HAL_ERR("%s reg error!\n", __FUNCTION__);
704*53ee8cc1Swenshuai.xi         return FALSE;
705*53ee8cc1Swenshuai.xi     }
706*53ee8cc1Swenshuai.xi 
707*53ee8cc1Swenshuai.xi     HAL_MIU_Write2Byte(u32RegAddr, u32Val & 0x0000FFFF);
708*53ee8cc1Swenshuai.xi     HAL_MIU_Write2Byte(u32RegAddr+2, u32Val >> 16);
709*53ee8cc1Swenshuai.xi     return TRUE;
710*53ee8cc1Swenshuai.xi }
711*53ee8cc1Swenshuai.xi 
712*53ee8cc1Swenshuai.xi 
713*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
714*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_BDMA_WriteByte
715*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description: write 1 Byte data
716*53ee8cc1Swenshuai.xi /// @param <IN>         \b u32RegAddr: register address
717*53ee8cc1Swenshuai.xi /// @param <IN>         \b u8Val : 1 byte data
718*53ee8cc1Swenshuai.xi /// @param <OUT>        \b None :
719*53ee8cc1Swenshuai.xi /// @param <RET>        \b TRUE: Ok FALSE: Fail
720*53ee8cc1Swenshuai.xi /// @param <GLOBAL>     \b None :
721*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MIU_WriteRegBit(MS_U32 u32RegAddr,MS_U8 u8Mask,MS_BOOL bEnable)722*53ee8cc1Swenshuai.xi MS_BOOL HAL_MIU_WriteRegBit(MS_U32 u32RegAddr, MS_U8 u8Mask, MS_BOOL bEnable)
723*53ee8cc1Swenshuai.xi {
724*53ee8cc1Swenshuai.xi     MS_U8 u8Val = HAL_MIU_ReadByte(u32RegAddr);
725*53ee8cc1Swenshuai.xi     if (!u32RegAddr)
726*53ee8cc1Swenshuai.xi     {
727*53ee8cc1Swenshuai.xi         MIU_HAL_ERR("%s reg error!\n", __FUNCTION__);
728*53ee8cc1Swenshuai.xi         return FALSE;
729*53ee8cc1Swenshuai.xi     }
730*53ee8cc1Swenshuai.xi 
731*53ee8cc1Swenshuai.xi     u8Val = HAL_MIU_ReadByte(u32RegAddr);
732*53ee8cc1Swenshuai.xi     u8Val = (bEnable) ? (u8Val | u8Mask) : (u8Val & ~u8Mask);
733*53ee8cc1Swenshuai.xi     HAL_MIU_WriteByte(u32RegAddr, u8Val);
734*53ee8cc1Swenshuai.xi     return TRUE;
735*53ee8cc1Swenshuai.xi }
736*53ee8cc1Swenshuai.xi 
HAL_MIU_Write2BytesBit(MS_U32 u32RegOffset,MS_BOOL bEnable,MS_U16 u16Mask)737*53ee8cc1Swenshuai.xi void HAL_MIU_Write2BytesBit(MS_U32 u32RegOffset, MS_BOOL bEnable, MS_U16 u16Mask)
738*53ee8cc1Swenshuai.xi {
739*53ee8cc1Swenshuai.xi     MS_U16 val = HAL_MIU_Read2Byte(u32RegOffset);
740*53ee8cc1Swenshuai.xi     val = (bEnable) ? (val | u16Mask) : (val & ~u16Mask);
741*53ee8cc1Swenshuai.xi     HAL_MIU_Write2Byte(u32RegOffset, val);
742*53ee8cc1Swenshuai.xi }
743*53ee8cc1Swenshuai.xi 
HAL_MIU_SetProtectID(MS_U32 u32Reg,MS_U8 u8MiuDev,MS_U32 u32ClientID)744*53ee8cc1Swenshuai.xi void HAL_MIU_SetProtectID(MS_U32 u32Reg, MS_U8 u8MiuDev, MS_U32 u32ClientID)
745*53ee8cc1Swenshuai.xi {
746*53ee8cc1Swenshuai.xi     MS_S16 sVal = HAL_MIU_GetClientInfo(u8MiuDev, (eMIUClientID)u32ClientID);
747*53ee8cc1Swenshuai.xi     MS_S16 sIDVal;
748*53ee8cc1Swenshuai.xi 
749*53ee8cc1Swenshuai.xi     if (0 > sVal)
750*53ee8cc1Swenshuai.xi         sVal = 0;
751*53ee8cc1Swenshuai.xi 
752*53ee8cc1Swenshuai.xi     sIDVal = HAL_MIU_ReadByte(u32Reg);
753*53ee8cc1Swenshuai.xi     sIDVal &= 0x80;
754*53ee8cc1Swenshuai.xi     sIDVal |= sVal;
755*53ee8cc1Swenshuai.xi     HAL_MIU_WriteByte(u32Reg, sIDVal);
756*53ee8cc1Swenshuai.xi 
757*53ee8cc1Swenshuai.xi }
758*53ee8cc1Swenshuai.xi 
HAL_MIU_SetGroupID(MS_U8 u8MiuSel,MS_U8 u8Blockx,MS_U8 * pu8ProtectId,MS_U32 u32RegAddrID,MS_U32 u32RegAddrIDenable)759*53ee8cc1Swenshuai.xi MS_BOOL HAL_MIU_SetGroupID(MS_U8 u8MiuSel, MS_U8 u8Blockx, MS_U8 *pu8ProtectId, MS_U32 u32RegAddrID, MS_U32 u32RegAddrIDenable)
760*53ee8cc1Swenshuai.xi {
761*53ee8cc1Swenshuai.xi     MS_U32 u32index0, u32index1;
762*53ee8cc1Swenshuai.xi     MS_U8 u8ID;
763*53ee8cc1Swenshuai.xi     MS_U8 u8isfound0, u8isfound1;
764*53ee8cc1Swenshuai.xi     MS_U16 u16idenable;
765*53ee8cc1Swenshuai.xi 
766*53ee8cc1Swenshuai.xi     //reset IDenables for protect u8Blockx
767*53ee8cc1Swenshuai.xi     for(u32index0 = 0; u32index0 < MIU_MAX_PROTECT_ID; u32index0++)
768*53ee8cc1Swenshuai.xi     {
769*53ee8cc1Swenshuai.xi         IDEnables[u8MiuSel][u8Blockx][u32index0] = 0;
770*53ee8cc1Swenshuai.xi     }
771*53ee8cc1Swenshuai.xi 
772*53ee8cc1Swenshuai.xi     for(u32index0 = 0; u32index0 < MIU_MAX_PROTECT_ID; u32index0++)
773*53ee8cc1Swenshuai.xi     {
774*53ee8cc1Swenshuai.xi         u8ID = pu8ProtectId[u32index0];
775*53ee8cc1Swenshuai.xi 
776*53ee8cc1Swenshuai.xi         //Unused ID
777*53ee8cc1Swenshuai.xi         if(u8ID == 0)
778*53ee8cc1Swenshuai.xi            continue;
779*53ee8cc1Swenshuai.xi 
780*53ee8cc1Swenshuai.xi         u8isfound0 = FALSE;
781*53ee8cc1Swenshuai.xi 
782*53ee8cc1Swenshuai.xi         for(u32index1 = 0; u32index1 < MIU_MAX_PROTECT_ID; u32index1++)
783*53ee8cc1Swenshuai.xi         {
784*53ee8cc1Swenshuai.xi             if(IDs[u8MiuSel][u32index1] == u8ID)
785*53ee8cc1Swenshuai.xi             {
786*53ee8cc1Swenshuai.xi                 //ID reused former setting
787*53ee8cc1Swenshuai.xi                 IDEnables[u8MiuSel][u8Blockx][u32index1] = 1;
788*53ee8cc1Swenshuai.xi                 u8isfound0 = TRUE;
789*53ee8cc1Swenshuai.xi                 break;
790*53ee8cc1Swenshuai.xi             }
791*53ee8cc1Swenshuai.xi         }
792*53ee8cc1Swenshuai.xi 
793*53ee8cc1Swenshuai.xi 
794*53ee8cc1Swenshuai.xi         //Need to create new ID in IDs
795*53ee8cc1Swenshuai.xi         if(u8isfound0 != TRUE)
796*53ee8cc1Swenshuai.xi         {
797*53ee8cc1Swenshuai.xi             u8isfound1 = FALSE;
798*53ee8cc1Swenshuai.xi 
799*53ee8cc1Swenshuai.xi             for(u32index1 = 0; u32index1 < MIU_MAX_PROTECT_ID; u32index1++)
800*53ee8cc1Swenshuai.xi             {
801*53ee8cc1Swenshuai.xi                 if(IDs[u8MiuSel][u32index1] == 0)
802*53ee8cc1Swenshuai.xi                 {
803*53ee8cc1Swenshuai.xi                     IDs[u8MiuSel][u32index1] = u8ID;
804*53ee8cc1Swenshuai.xi                     IDEnables[u8MiuSel][u8Blockx][u32index1] = 1;
805*53ee8cc1Swenshuai.xi                     u8isfound1 = TRUE;
806*53ee8cc1Swenshuai.xi                     break;
807*53ee8cc1Swenshuai.xi                 }
808*53ee8cc1Swenshuai.xi             }
809*53ee8cc1Swenshuai.xi 
810*53ee8cc1Swenshuai.xi             //ID overflow
811*53ee8cc1Swenshuai.xi             if(u8isfound1 == FALSE)
812*53ee8cc1Swenshuai.xi                 return FALSE;
813*53ee8cc1Swenshuai.xi         }
814*53ee8cc1Swenshuai.xi     }
815*53ee8cc1Swenshuai.xi 
816*53ee8cc1Swenshuai.xi     u16idenable = 0;
817*53ee8cc1Swenshuai.xi 
818*53ee8cc1Swenshuai.xi     for(u32index0 = 0; u32index0 < MIU_MAX_PROTECT_ID; u32index0++)
819*53ee8cc1Swenshuai.xi     {
820*53ee8cc1Swenshuai.xi         if(IDEnables[u8MiuSel][u8Blockx][u32index0] == 1)
821*53ee8cc1Swenshuai.xi             u16idenable |= (1<<u32index0);
822*53ee8cc1Swenshuai.xi     }
823*53ee8cc1Swenshuai.xi 
824*53ee8cc1Swenshuai.xi     HAL_MIU_Write2Byte(u32RegAddrIDenable, u16idenable);
825*53ee8cc1Swenshuai.xi 
826*53ee8cc1Swenshuai.xi     for(u32index0 = 0; u32index0 < MIU_MAX_PROTECT_ID; u32index0++)
827*53ee8cc1Swenshuai.xi     {
828*53ee8cc1Swenshuai.xi          HAL_MIU_SetProtectID(u32RegAddrID + u32index0, u8MiuSel, IDs[u8MiuSel][u32index0]);
829*53ee8cc1Swenshuai.xi     }
830*53ee8cc1Swenshuai.xi 
831*53ee8cc1Swenshuai.xi     return TRUE;
832*53ee8cc1Swenshuai.xi }
833*53ee8cc1Swenshuai.xi 
HAL_MIU_SetGroupID2(MS_U8 u8MiuSel,MS_U8 u8Blockx,MS_U32 * pu32ProtectId,MS_U32 u32RegAddrID,MS_U32 u32RegAddrIDenable)834*53ee8cc1Swenshuai.xi MS_BOOL HAL_MIU_SetGroupID2(MS_U8 u8MiuSel, MS_U8 u8Blockx, MS_U32 *pu32ProtectId, MS_U32 u32RegAddrID, MS_U32 u32RegAddrIDenable)
835*53ee8cc1Swenshuai.xi {
836*53ee8cc1Swenshuai.xi     return TRUE;
837*53ee8cc1Swenshuai.xi }
838*53ee8cc1Swenshuai.xi 
839*53ee8cc1Swenshuai.xi 
HAL_MIU_ResetGroupID(MS_U8 u8MiuSel,MS_U8 u8Blockx,MS_U8 * pu8ProtectId,MS_U32 u32RegAddrID,MS_U32 u32RegAddrIDenable)840*53ee8cc1Swenshuai.xi MS_BOOL HAL_MIU_ResetGroupID(MS_U8 u8MiuSel, MS_U8 u8Blockx, MS_U8 *pu8ProtectId, MS_U32 u32RegAddrID, MS_U32 u32RegAddrIDenable)
841*53ee8cc1Swenshuai.xi {
842*53ee8cc1Swenshuai.xi     MS_U32 u32index0, u32index1;
843*53ee8cc1Swenshuai.xi     MS_U8 u8isIDNoUse;
844*53ee8cc1Swenshuai.xi     MS_U16 u16idenable;
845*53ee8cc1Swenshuai.xi 
846*53ee8cc1Swenshuai.xi     //reset IDenables for protect u8Blockx
847*53ee8cc1Swenshuai.xi     for(u32index0 = 0; u32index0 < MIU_MAX_PROTECT_ID; u32index0++)
848*53ee8cc1Swenshuai.xi     {
849*53ee8cc1Swenshuai.xi         IDEnables[u8MiuSel][u8Blockx][u32index0] = 0;
850*53ee8cc1Swenshuai.xi     }
851*53ee8cc1Swenshuai.xi 
852*53ee8cc1Swenshuai.xi     u16idenable = 0x0;
853*53ee8cc1Swenshuai.xi 
854*53ee8cc1Swenshuai.xi     HAL_MIU_Write2Byte(u32RegAddrIDenable, u16idenable);
855*53ee8cc1Swenshuai.xi 
856*53ee8cc1Swenshuai.xi     for(u32index0 = 0; u32index0 < MIU_MAX_PROTECT_ID; u32index0++)
857*53ee8cc1Swenshuai.xi     {
858*53ee8cc1Swenshuai.xi         u8isIDNoUse  = FALSE;
859*53ee8cc1Swenshuai.xi 
860*53ee8cc1Swenshuai.xi         for(u32index1 = 0; u32index1 < MIU_MAX_PROTECT_BLOCK; u32index1++)
861*53ee8cc1Swenshuai.xi         {
862*53ee8cc1Swenshuai.xi             if(IDEnables[u8MiuSel][u32index1][u32index0] == 1)
863*53ee8cc1Swenshuai.xi             {
864*53ee8cc1Swenshuai.xi                 //protect ID is still be used
865*53ee8cc1Swenshuai.xi                 u8isIDNoUse  = FALSE;
866*53ee8cc1Swenshuai.xi                 break;
867*53ee8cc1Swenshuai.xi             }
868*53ee8cc1Swenshuai.xi             u8isIDNoUse  = TRUE;
869*53ee8cc1Swenshuai.xi         }
870*53ee8cc1Swenshuai.xi 
871*53ee8cc1Swenshuai.xi         if(u8isIDNoUse == TRUE)
872*53ee8cc1Swenshuai.xi             IDs[u8MiuSel][u32index0] = 0;
873*53ee8cc1Swenshuai.xi     }
874*53ee8cc1Swenshuai.xi 
875*53ee8cc1Swenshuai.xi     for(u32index0 = 0; u32index0 < MIU_MAX_PROTECT_ID; u32index0++)
876*53ee8cc1Swenshuai.xi     {
877*53ee8cc1Swenshuai.xi          HAL_MIU_SetProtectID(u32RegAddrID + u32index0, u8MiuSel, IDs[u8MiuSel][u32index0]);
878*53ee8cc1Swenshuai.xi     }
879*53ee8cc1Swenshuai.xi 
880*53ee8cc1Swenshuai.xi     return TRUE;
881*53ee8cc1Swenshuai.xi }
882*53ee8cc1Swenshuai.xi 
883*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
884*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MIU_GetDefaultClientID_KernelProtect()
885*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description:  Get default client id array pointer for protect kernel
886*53ee8cc1Swenshuai.xi /// @param <RET>           \b     : The pointer of Array of client IDs
887*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MIU_GetDefaultClientID_KernelProtect()888*53ee8cc1Swenshuai.xi MS_U8* HAL_MIU_GetDefaultClientID_KernelProtect()
889*53ee8cc1Swenshuai.xi {
890*53ee8cc1Swenshuai.xi      if(IDNUM_KERNELPROTECT > 0)
891*53ee8cc1Swenshuai.xi          return  (MS_U8 *)&clientId_KernelProtect[0];
892*53ee8cc1Swenshuai.xi 
893*53ee8cc1Swenshuai.xi      return NULL;
894*53ee8cc1Swenshuai.xi }
895*53ee8cc1Swenshuai.xi 
896*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
897*53ee8cc1Swenshuai.xi /// @brief \b Function    \b Name: HAL_MIU_ProtectAlign()
898*53ee8cc1Swenshuai.xi /// @brief \b Function    \b Description:  Get the page shift for MIU protect
899*53ee8cc1Swenshuai.xi /// @param <*u32PageShift>\b IN: Page shift
900*53ee8cc1Swenshuai.xi /// @param <RET>          \b OUT: None
901*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MIU_ProtectAlign(void)902*53ee8cc1Swenshuai.xi MS_U32 HAL_MIU_ProtectAlign(void)
903*53ee8cc1Swenshuai.xi {
904*53ee8cc1Swenshuai.xi     MS_U32 u32PageShift;
905*53ee8cc1Swenshuai.xi 
906*53ee8cc1Swenshuai.xi     u32PageShift = MIU_PAGE_SHIFT;
907*53ee8cc1Swenshuai.xi     return u32PageShift;
908*53ee8cc1Swenshuai.xi }
909*53ee8cc1Swenshuai.xi 
910*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
911*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MIU_Dram_Size()
912*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: Set up Dram size for MIU protect
913*53ee8cc1Swenshuai.xi /// @param MiuID        \b IN     : MIU ID
914*53ee8cc1Swenshuai.xi /// @param DramSize     \b IN     : Specified Dram size for MIU protect
915*53ee8cc1Swenshuai.xi /// @param <OUT>           \b None    :
916*53ee8cc1Swenshuai.xi /// @param <RET>           \b None    :
917*53ee8cc1Swenshuai.xi /// @param <GLOBAL>        \b None    :
918*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MIU_Dram_Size(MS_U8 MiuID,MS_U8 DramSize)919*53ee8cc1Swenshuai.xi MS_BOOL HAL_MIU_Dram_Size(MS_U8 MiuID, MS_U8 DramSize)
920*53ee8cc1Swenshuai.xi {
921*53ee8cc1Swenshuai.xi     MS_U32 u32RegAddr;
922*53ee8cc1Swenshuai.xi 
923*53ee8cc1Swenshuai.xi 
924*53ee8cc1Swenshuai.xi     if(E_MIU_2 == (MIU_ID)MiuID)
925*53ee8cc1Swenshuai.xi     {
926*53ee8cc1Swenshuai.xi         u32RegAddr = MIU2_PROTECT_DDR_SIZE;
927*53ee8cc1Swenshuai.xi         switch (DramSize)
928*53ee8cc1Swenshuai.xi         {
929*53ee8cc1Swenshuai.xi             case E_MIU_DDR_32MB:
930*53ee8cc1Swenshuai.xi         HAL_MIU_WriteByte(u32RegAddr, MIU_PROTECT_DDR_32MB);
931*53ee8cc1Swenshuai.xi                 break;
932*53ee8cc1Swenshuai.xi             case E_MIU_DDR_64MB:
933*53ee8cc1Swenshuai.xi         HAL_MIU_WriteByte(u32RegAddr, MIU_PROTECT_DDR_64MB);
934*53ee8cc1Swenshuai.xi                 break;
935*53ee8cc1Swenshuai.xi             case E_MIU_DDR_128MB:
936*53ee8cc1Swenshuai.xi         HAL_MIU_WriteByte(u32RegAddr, MIU_PROTECT_DDR_128MB);
937*53ee8cc1Swenshuai.xi                 break;
938*53ee8cc1Swenshuai.xi             case E_MIU_DDR_256MB:
939*53ee8cc1Swenshuai.xi         HAL_MIU_WriteByte(u32RegAddr, MIU_PROTECT_DDR_256MB);
940*53ee8cc1Swenshuai.xi                 break;
941*53ee8cc1Swenshuai.xi             case E_MIU_DDR_512MB:
942*53ee8cc1Swenshuai.xi         HAL_MIU_WriteByte(u32RegAddr, MIU_PROTECT_DDR_512MB);
943*53ee8cc1Swenshuai.xi                 break;
944*53ee8cc1Swenshuai.xi             case E_MIU_DDR_1024MB:
945*53ee8cc1Swenshuai.xi         HAL_MIU_WriteByte(u32RegAddr, MIU_PROTECT_DDR_1024MB);
946*53ee8cc1Swenshuai.xi                 break;
947*53ee8cc1Swenshuai.xi             case E_MIU_DDR_2048MB:
948*53ee8cc1Swenshuai.xi                 HAL_MIU_WriteByte(u32RegAddr, MIU_PROTECT_DDR_2048MB);
949*53ee8cc1Swenshuai.xi                 break;
950*53ee8cc1Swenshuai.xi             case E_MIU_DDR_4096MB:
951*53ee8cc1Swenshuai.xi                 HAL_MIU_WriteByte(u32RegAddr, MIU_PROTECT_DDR_4096MB);
952*53ee8cc1Swenshuai.xi                 break;
953*53ee8cc1Swenshuai.xi             case E_MIU_DDR_8192MB:
954*53ee8cc1Swenshuai.xi                 HAL_MIU_WriteByte(u32RegAddr, MIU_PROTECT_DDR_8192MB);
955*53ee8cc1Swenshuai.xi                 break;
956*53ee8cc1Swenshuai.xi             default:
957*53ee8cc1Swenshuai.xi                 return false;
958*53ee8cc1Swenshuai.xi         }
959*53ee8cc1Swenshuai.xi     }
960*53ee8cc1Swenshuai.xi     else if(E_MIU_1 == (MIU_ID)MiuID)
961*53ee8cc1Swenshuai.xi     {
962*53ee8cc1Swenshuai.xi         u32RegAddr = MIU1_PROTECT_DDR_SIZE;
963*53ee8cc1Swenshuai.xi         switch (DramSize)
964*53ee8cc1Swenshuai.xi         {
965*53ee8cc1Swenshuai.xi             case E_MIU_DDR_32MB:
966*53ee8cc1Swenshuai.xi         HAL_MIU_WriteByte(u32RegAddr, MIU_PROTECT_DDR_32MB);
967*53ee8cc1Swenshuai.xi                 break;
968*53ee8cc1Swenshuai.xi             case E_MIU_DDR_64MB:
969*53ee8cc1Swenshuai.xi         HAL_MIU_WriteByte(u32RegAddr, MIU_PROTECT_DDR_64MB);
970*53ee8cc1Swenshuai.xi                 break;
971*53ee8cc1Swenshuai.xi             case E_MIU_DDR_128MB:
972*53ee8cc1Swenshuai.xi         HAL_MIU_WriteByte(u32RegAddr, MIU_PROTECT_DDR_128MB);
973*53ee8cc1Swenshuai.xi                 break;
974*53ee8cc1Swenshuai.xi             case E_MIU_DDR_256MB:
975*53ee8cc1Swenshuai.xi                 HAL_MIU_WriteByte(u32RegAddr, MIU_PROTECT_DDR_256MB);
976*53ee8cc1Swenshuai.xi                 break;
977*53ee8cc1Swenshuai.xi             case E_MIU_DDR_512MB:
978*53ee8cc1Swenshuai.xi         HAL_MIU_WriteByte(u32RegAddr, MIU_PROTECT_DDR_512MB);
979*53ee8cc1Swenshuai.xi                 break;
980*53ee8cc1Swenshuai.xi             case E_MIU_DDR_1024MB:
981*53ee8cc1Swenshuai.xi         HAL_MIU_WriteByte(u32RegAddr, MIU_PROTECT_DDR_1024MB);
982*53ee8cc1Swenshuai.xi                 break;
983*53ee8cc1Swenshuai.xi             case E_MIU_DDR_2048MB:
984*53ee8cc1Swenshuai.xi                 HAL_MIU_WriteByte(u32RegAddr, MIU_PROTECT_DDR_2048MB);
985*53ee8cc1Swenshuai.xi                 break;
986*53ee8cc1Swenshuai.xi             case E_MIU_DDR_4096MB:
987*53ee8cc1Swenshuai.xi                 HAL_MIU_WriteByte(u32RegAddr, MIU_PROTECT_DDR_4096MB);
988*53ee8cc1Swenshuai.xi                 break;
989*53ee8cc1Swenshuai.xi             case E_MIU_DDR_8192MB:
990*53ee8cc1Swenshuai.xi                 HAL_MIU_WriteByte(u32RegAddr, MIU_PROTECT_DDR_8192MB);
991*53ee8cc1Swenshuai.xi                 break;
992*53ee8cc1Swenshuai.xi             default:
993*53ee8cc1Swenshuai.xi                 return false;
994*53ee8cc1Swenshuai.xi         }
995*53ee8cc1Swenshuai.xi     }
996*53ee8cc1Swenshuai.xi     else if(E_MIU_0 == (MIU_ID)MiuID)
997*53ee8cc1Swenshuai.xi     {
998*53ee8cc1Swenshuai.xi         u32RegAddr = MIU_PROTECT_DDR_SIZE;
999*53ee8cc1Swenshuai.xi         switch (DramSize)
1000*53ee8cc1Swenshuai.xi         {
1001*53ee8cc1Swenshuai.xi             case E_MIU_DDR_32MB:
1002*53ee8cc1Swenshuai.xi             HAL_MIU_WriteByte(u32RegAddr, MIU_PROTECT_DDR_32MB);
1003*53ee8cc1Swenshuai.xi                 break;
1004*53ee8cc1Swenshuai.xi             case E_MIU_DDR_64MB:
1005*53ee8cc1Swenshuai.xi             HAL_MIU_WriteByte(u32RegAddr, MIU_PROTECT_DDR_64MB);
1006*53ee8cc1Swenshuai.xi                 break;
1007*53ee8cc1Swenshuai.xi             case E_MIU_DDR_128MB:
1008*53ee8cc1Swenshuai.xi             HAL_MIU_WriteByte(u32RegAddr, MIU_PROTECT_DDR_128MB);
1009*53ee8cc1Swenshuai.xi                 break;
1010*53ee8cc1Swenshuai.xi             case E_MIU_DDR_256MB:
1011*53ee8cc1Swenshuai.xi             HAL_MIU_WriteByte(u32RegAddr, MIU_PROTECT_DDR_256MB);
1012*53ee8cc1Swenshuai.xi                 break;
1013*53ee8cc1Swenshuai.xi             case E_MIU_DDR_512MB:
1014*53ee8cc1Swenshuai.xi             HAL_MIU_WriteByte(u32RegAddr, MIU_PROTECT_DDR_512MB);
1015*53ee8cc1Swenshuai.xi                 break;
1016*53ee8cc1Swenshuai.xi             case E_MIU_DDR_1024MB:
1017*53ee8cc1Swenshuai.xi             HAL_MIU_WriteByte(u32RegAddr, MIU_PROTECT_DDR_1024MB);
1018*53ee8cc1Swenshuai.xi                 break;
1019*53ee8cc1Swenshuai.xi             case E_MIU_DDR_2048MB:
1020*53ee8cc1Swenshuai.xi                 HAL_MIU_WriteByte(u32RegAddr, MIU_PROTECT_DDR_2048MB);
1021*53ee8cc1Swenshuai.xi                 break;
1022*53ee8cc1Swenshuai.xi             case E_MIU_DDR_4096MB:
1023*53ee8cc1Swenshuai.xi                 HAL_MIU_WriteByte(u32RegAddr, MIU_PROTECT_DDR_4096MB);
1024*53ee8cc1Swenshuai.xi                 break;
1025*53ee8cc1Swenshuai.xi             case E_MIU_DDR_8192MB:
1026*53ee8cc1Swenshuai.xi                 HAL_MIU_WriteByte(u32RegAddr, MIU_PROTECT_DDR_8192MB);
1027*53ee8cc1Swenshuai.xi                 break;
1028*53ee8cc1Swenshuai.xi             default:
1029*53ee8cc1Swenshuai.xi                 return false;
1030*53ee8cc1Swenshuai.xi         }
1031*53ee8cc1Swenshuai.xi      }
1032*53ee8cc1Swenshuai.xi      else
1033*53ee8cc1Swenshuai.xi      {
1034*53ee8cc1Swenshuai.xi          printf("%s not support MIU%u!\n", __FUNCTION__, MiuID );
1035*53ee8cc1Swenshuai.xi           return FALSE;
1036*53ee8cc1Swenshuai.xi      }
1037*53ee8cc1Swenshuai.xi 
1038*53ee8cc1Swenshuai.xi      return true;
1039*53ee8cc1Swenshuai.xi }
1040*53ee8cc1Swenshuai.xi 
1041*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1042*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MIU_Dram_ReadSize()
1043*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: Set up Dram size for MIU protect
1044*53ee8cc1Swenshuai.xi /// @param MiuID        \b IN     : MIU ID
1045*53ee8cc1Swenshuai.xi /// @param DramSize     \b IN     : Specified Dram size for MIU protect
1046*53ee8cc1Swenshuai.xi /// @param <OUT>           \b None    :
1047*53ee8cc1Swenshuai.xi /// @param <RET>           \b None    :
1048*53ee8cc1Swenshuai.xi /// @param <GLOBAL>        \b None    :
1049*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MIU_Dram_ReadSize(MS_U8 MiuID,MIU_DDR_SIZE * pDramSize)1050*53ee8cc1Swenshuai.xi MS_BOOL HAL_MIU_Dram_ReadSize(MS_U8 MiuID, MIU_DDR_SIZE *pDramSize)
1051*53ee8cc1Swenshuai.xi {
1052*53ee8cc1Swenshuai.xi     MS_U32 u32RegAddr;
1053*53ee8cc1Swenshuai.xi     MS_U8  DramSize;
1054*53ee8cc1Swenshuai.xi 
1055*53ee8cc1Swenshuai.xi     if (E_MIU_2 == (MIU_ID)MiuID)
1056*53ee8cc1Swenshuai.xi     {
1057*53ee8cc1Swenshuai.xi         u32RegAddr = MIU2_PROTECT_DDR_SIZE;
1058*53ee8cc1Swenshuai.xi     }
1059*53ee8cc1Swenshuai.xi     else if(E_MIU_1 == (MIU_ID)MiuID)
1060*53ee8cc1Swenshuai.xi     {
1061*53ee8cc1Swenshuai.xi         u32RegAddr = MIU1_PROTECT_DDR_SIZE;
1062*53ee8cc1Swenshuai.xi     }
1063*53ee8cc1Swenshuai.xi     else
1064*53ee8cc1Swenshuai.xi     {
1065*53ee8cc1Swenshuai.xi         u32RegAddr = MIU_PROTECT_DDR_SIZE;
1066*53ee8cc1Swenshuai.xi     }
1067*53ee8cc1Swenshuai.xi     DramSize = HAL_MIU_ReadByte(u32RegAddr);
1068*53ee8cc1Swenshuai.xi     DramSize &= 0xF0;
1069*53ee8cc1Swenshuai.xi     switch (DramSize)
1070*53ee8cc1Swenshuai.xi     {
1071*53ee8cc1Swenshuai.xi         case MIU_PROTECT_DDR_32MB:
1072*53ee8cc1Swenshuai.xi             *pDramSize = E_MIU_DDR_32MB;
1073*53ee8cc1Swenshuai.xi             break;
1074*53ee8cc1Swenshuai.xi         case MIU_PROTECT_DDR_64MB:
1075*53ee8cc1Swenshuai.xi             *pDramSize = E_MIU_DDR_64MB;
1076*53ee8cc1Swenshuai.xi             break;
1077*53ee8cc1Swenshuai.xi         case MIU_PROTECT_DDR_128MB:
1078*53ee8cc1Swenshuai.xi             *pDramSize = E_MIU_DDR_128MB;
1079*53ee8cc1Swenshuai.xi             break;
1080*53ee8cc1Swenshuai.xi         case MIU_PROTECT_DDR_256MB:
1081*53ee8cc1Swenshuai.xi             *pDramSize = E_MIU_DDR_256MB;
1082*53ee8cc1Swenshuai.xi             break;
1083*53ee8cc1Swenshuai.xi         case MIU_PROTECT_DDR_512MB:
1084*53ee8cc1Swenshuai.xi             *pDramSize = E_MIU_DDR_512MB;
1085*53ee8cc1Swenshuai.xi             break;
1086*53ee8cc1Swenshuai.xi         case MIU_PROTECT_DDR_1024MB:
1087*53ee8cc1Swenshuai.xi             *pDramSize = E_MIU_DDR_1024MB;
1088*53ee8cc1Swenshuai.xi             break;
1089*53ee8cc1Swenshuai.xi         case MIU_PROTECT_DDR_2048MB:
1090*53ee8cc1Swenshuai.xi             *pDramSize = E_MIU_DDR_2048MB;
1091*53ee8cc1Swenshuai.xi             break;
1092*53ee8cc1Swenshuai.xi         case MIU_PROTECT_DDR_4096MB:
1093*53ee8cc1Swenshuai.xi             *pDramSize = E_MIU_DDR_4096MB;
1094*53ee8cc1Swenshuai.xi             break;
1095*53ee8cc1Swenshuai.xi         case MIU_PROTECT_DDR_8192MB:
1096*53ee8cc1Swenshuai.xi             *pDramSize = E_MIU_DDR_8192MB;
1097*53ee8cc1Swenshuai.xi             break;
1098*53ee8cc1Swenshuai.xi         default:
1099*53ee8cc1Swenshuai.xi             return FALSE;
1100*53ee8cc1Swenshuai.xi     }
1101*53ee8cc1Swenshuai.xi      return TRUE;
1102*53ee8cc1Swenshuai.xi }
1103*53ee8cc1Swenshuai.xi 
1104*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1105*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: MDrv_MIU_GetClinetNumber()
1106*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description:  Get the number of clients for specific MIU block
1107*53ee8cc1Swenshuai.xi /// @param DramSize     \b IN     : MIU Block to protect (0 ~ 3)
1108*53ee8cc1Swenshuai.xi /// @param <OUT>           \b None    :
1109*53ee8cc1Swenshuai.xi /// @param <RET>           \b None    :
1110*53ee8cc1Swenshuai.xi /// @param <GLOBAL>        \b None    :
1111*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MIU_ClinetNumber(MS_U8 u8Blockx)1112*53ee8cc1Swenshuai.xi MS_U8 HAL_MIU_ClinetNumber(MS_U8 u8Blockx)
1113*53ee8cc1Swenshuai.xi {
1114*53ee8cc1Swenshuai.xi     MS_U8 u8ClientNumber;
1115*53ee8cc1Swenshuai.xi 
1116*53ee8cc1Swenshuai.xi     switch (u8Blockx)
1117*53ee8cc1Swenshuai.xi     {
1118*53ee8cc1Swenshuai.xi         case E_MIU_BLOCK_0:
1119*53ee8cc1Swenshuai.xi             u8ClientNumber = MIU_BLOCK0_CLIENT_NUMBER;
1120*53ee8cc1Swenshuai.xi             break;
1121*53ee8cc1Swenshuai.xi         case E_MIU_BLOCK_1:
1122*53ee8cc1Swenshuai.xi             u8ClientNumber = MIU_BLOCK1_CLIENT_NUMBER;
1123*53ee8cc1Swenshuai.xi             break;
1124*53ee8cc1Swenshuai.xi         case E_MIU_BLOCK_2:
1125*53ee8cc1Swenshuai.xi             u8ClientNumber = MIU_BLOCK2_CLIENT_NUMBER;
1126*53ee8cc1Swenshuai.xi             break;
1127*53ee8cc1Swenshuai.xi         case E_MIU_BLOCK_3:
1128*53ee8cc1Swenshuai.xi             u8ClientNumber = MIU_BLOCK3_CLIENT_NUMBER;
1129*53ee8cc1Swenshuai.xi             break;
1130*53ee8cc1Swenshuai.xi         default:
1131*53ee8cc1Swenshuai.xi             u8ClientNumber = 0;
1132*53ee8cc1Swenshuai.xi     }
1133*53ee8cc1Swenshuai.xi 
1134*53ee8cc1Swenshuai.xi     return u8ClientNumber;
1135*53ee8cc1Swenshuai.xi }
1136*53ee8cc1Swenshuai.xi 
1137*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1138*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MIU_Protect()
1139*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description:  Enable/Disable MIU Protection mode
1140*53ee8cc1Swenshuai.xi /// @param u8Blockx        \b IN     : MIU Block to protect (0 ~ 4)
1141*53ee8cc1Swenshuai.xi /// @param *pu8ProtectId   \b IN     : Allow specified client IDs to write
1142*53ee8cc1Swenshuai.xi /// @param u32Start        \b IN     : Starting address
1143*53ee8cc1Swenshuai.xi /// @param u32End          \b IN     : End address
1144*53ee8cc1Swenshuai.xi /// @param bSetFlag        \b IN     : Disable or Enable MIU protection
1145*53ee8cc1Swenshuai.xi ///                                      - -Disable(0)
1146*53ee8cc1Swenshuai.xi ///                                      - -Enable(1)
1147*53ee8cc1Swenshuai.xi /// @param <OUT>           \b None    :
1148*53ee8cc1Swenshuai.xi /// @param <RET>           \b None    :
1149*53ee8cc1Swenshuai.xi /// @param <GLOBAL>        \b None    :
1150*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MIU_Protect(MS_U8 u8Blockx,MS_U8 * pu8ProtectId,MS_PHY phy64Start,MS_PHY phy64End,MS_BOOL bSetFlag)1151*53ee8cc1Swenshuai.xi MS_BOOL HAL_MIU_Protect(
1152*53ee8cc1Swenshuai.xi                           MS_U8    u8Blockx,
1153*53ee8cc1Swenshuai.xi                           MS_U8    *pu8ProtectId,
1154*53ee8cc1Swenshuai.xi                           MS_PHY phy64Start,
1155*53ee8cc1Swenshuai.xi                           MS_PHY phy64End,
1156*53ee8cc1Swenshuai.xi                           MS_BOOL  bSetFlag
1157*53ee8cc1Swenshuai.xi                          )
1158*53ee8cc1Swenshuai.xi {
1159*53ee8cc1Swenshuai.xi     MS_U32 u32RegAddr;
1160*53ee8cc1Swenshuai.xi     MS_U32 u32Reg;
1161*53ee8cc1Swenshuai.xi     MS_U32 u32RegAddrStar;
1162*53ee8cc1Swenshuai.xi     MS_U32 u32RegAddrMSB;
1163*53ee8cc1Swenshuai.xi     MS_U32 u32RegAddrIDenable;
1164*53ee8cc1Swenshuai.xi     MS_U32 u32MiuProtectEn;
1165*53ee8cc1Swenshuai.xi     MS_PHY phy64StartOffset;
1166*53ee8cc1Swenshuai.xi     MS_PHY phy64EndOffset;
1167*53ee8cc1Swenshuai.xi     MS_U16 u16Data;
1168*53ee8cc1Swenshuai.xi     MS_U16 u16Data1;
1169*53ee8cc1Swenshuai.xi     MS_U16 u16Data2;
1170*53ee8cc1Swenshuai.xi     MS_U8  u8Data;
1171*53ee8cc1Swenshuai.xi     MS_U8  u8MiuSel;
1172*53ee8cc1Swenshuai.xi 
1173*53ee8cc1Swenshuai.xi     // Get MIU selection and offset
1174*53ee8cc1Swenshuai.xi     _phy_to_miu_offset(u8MiuSel, phy64EndOffset, phy64End - 1) // minus 1 to avoid end address boundary issue
1175*53ee8cc1Swenshuai.xi     _phy_to_miu_offset(u8MiuSel, phy64StartOffset, phy64Start)
1176*53ee8cc1Swenshuai.xi 
1177*53ee8cc1Swenshuai.xi     phy64Start = phy64StartOffset;
1178*53ee8cc1Swenshuai.xi     phy64End = phy64EndOffset + 1; // plus 1 back to get correct end offset
1179*53ee8cc1Swenshuai.xi 
1180*53ee8cc1Swenshuai.xi     // Incorrect Block ID
1181*53ee8cc1Swenshuai.xi     if(u8Blockx >= E_MIU_BLOCK_NUM)
1182*53ee8cc1Swenshuai.xi     {
1183*53ee8cc1Swenshuai.xi         MIU_HAL_ERR("Err: Out of the number of protect device\n")
1184*53ee8cc1Swenshuai.xi         return false;
1185*53ee8cc1Swenshuai.xi     }
1186*53ee8cc1Swenshuai.xi     else if(((phy64Start & ((1 << MIU_PAGE_SHIFT) -1)) != 0) || ((phy64End & ((1 << MIU_PAGE_SHIFT) -1)) != 0))
1187*53ee8cc1Swenshuai.xi     {
1188*53ee8cc1Swenshuai.xi         MIU_HAL_ERR("Err: Protected address should be aligned to 8KB\n")
1189*53ee8cc1Swenshuai.xi         return false;
1190*53ee8cc1Swenshuai.xi     }
1191*53ee8cc1Swenshuai.xi     else if(phy64Start >= phy64End)
1192*53ee8cc1Swenshuai.xi     {
1193*53ee8cc1Swenshuai.xi         MIU_HAL_ERR("Err: Start address is equal to or more than end address\n")
1194*53ee8cc1Swenshuai.xi         return false;
1195*53ee8cc1Swenshuai.xi     }
1196*53ee8cc1Swenshuai.xi 
1197*53ee8cc1Swenshuai.xi 
1198*53ee8cc1Swenshuai.xi     //write_enable
1199*53ee8cc1Swenshuai.xi     u8Data = 1 << u8Blockx;
1200*53ee8cc1Swenshuai.xi     if(u8MiuSel == E_CHIP_MIU_0)
1201*53ee8cc1Swenshuai.xi     {
1202*53ee8cc1Swenshuai.xi         u32RegAddrMSB = MIU_PROTECT0_MSB;
1203*53ee8cc1Swenshuai.xi         u16Data1 = HAL_MIU_Read2Byte(u32RegAddrMSB);
1204*53ee8cc1Swenshuai.xi 
1205*53ee8cc1Swenshuai.xi         u32RegAddr = MIU_PROTECT0_ID0;
1206*53ee8cc1Swenshuai.xi         u32MiuProtectEn=MIU_PROTECT_EN;
1207*53ee8cc1Swenshuai.xi         u32Reg = MIU_REG_BASE;
1208*53ee8cc1Swenshuai.xi 
1209*53ee8cc1Swenshuai.xi         switch (u8Blockx)
1210*53ee8cc1Swenshuai.xi         {
1211*53ee8cc1Swenshuai.xi             case E_MIU_BLOCK_0:
1212*53ee8cc1Swenshuai.xi                 u32RegAddrStar = MIU_PROTECT0_START;
1213*53ee8cc1Swenshuai.xi                 u32RegAddrIDenable = MIU_PROTECT0_ID_ENABLE;
1214*53ee8cc1Swenshuai.xi                 u16Data2 = (u16Data1 & 0xFFF0);
1215*53ee8cc1Swenshuai.xi                 break;
1216*53ee8cc1Swenshuai.xi             case E_MIU_BLOCK_1:
1217*53ee8cc1Swenshuai.xi                 u32RegAddrStar = MIU_PROTECT1_START;
1218*53ee8cc1Swenshuai.xi                 u32RegAddrIDenable = MIU_PROTECT1_ID_ENABLE;
1219*53ee8cc1Swenshuai.xi                 u16Data2 = (u16Data1 & 0xFF0F);
1220*53ee8cc1Swenshuai.xi                 break;
1221*53ee8cc1Swenshuai.xi             case E_MIU_BLOCK_2:
1222*53ee8cc1Swenshuai.xi                 u32RegAddrStar = MIU_PROTECT2_START;
1223*53ee8cc1Swenshuai.xi                 u32RegAddrIDenable = MIU_PROTECT2_ID_ENABLE;
1224*53ee8cc1Swenshuai.xi                 u16Data2 = (u16Data1 & 0xF0FF);
1225*53ee8cc1Swenshuai.xi                 break;
1226*53ee8cc1Swenshuai.xi             case E_MIU_BLOCK_3:
1227*53ee8cc1Swenshuai.xi                 u32RegAddrStar = MIU_PROTECT3_START;
1228*53ee8cc1Swenshuai.xi                 u32RegAddrIDenable = MIU_PROTECT3_ID_ENABLE;
1229*53ee8cc1Swenshuai.xi                 u16Data2 = (u16Data1 & 0x0FFF);
1230*53ee8cc1Swenshuai.xi                 break;
1231*53ee8cc1Swenshuai.xi             default:
1232*53ee8cc1Swenshuai.xi                 return false;
1233*53ee8cc1Swenshuai.xi         }
1234*53ee8cc1Swenshuai.xi     }
1235*53ee8cc1Swenshuai.xi     else if(u8MiuSel == E_CHIP_MIU_1)
1236*53ee8cc1Swenshuai.xi     {
1237*53ee8cc1Swenshuai.xi         u32RegAddrMSB = MIU1_PROTECT0_MSB;
1238*53ee8cc1Swenshuai.xi         u16Data1 = HAL_MIU_Read2Byte(u32RegAddrMSB);
1239*53ee8cc1Swenshuai.xi 
1240*53ee8cc1Swenshuai.xi         u32RegAddr = MIU1_PROTECT0_ID0;
1241*53ee8cc1Swenshuai.xi         u32MiuProtectEn=MIU1_PROTECT_EN;
1242*53ee8cc1Swenshuai.xi         u32Reg = MIU1_REG_BASE;
1243*53ee8cc1Swenshuai.xi 
1244*53ee8cc1Swenshuai.xi         switch (u8Blockx)
1245*53ee8cc1Swenshuai.xi         {
1246*53ee8cc1Swenshuai.xi             case E_MIU_BLOCK_0:
1247*53ee8cc1Swenshuai.xi                 u32RegAddrStar = MIU1_PROTECT0_START;
1248*53ee8cc1Swenshuai.xi                 u32RegAddrIDenable = MIU1_PROTECT0_ID_ENABLE;
1249*53ee8cc1Swenshuai.xi                 u16Data2 = (u16Data1 & 0xFFF0);
1250*53ee8cc1Swenshuai.xi                 break;
1251*53ee8cc1Swenshuai.xi             case E_MIU_BLOCK_1:
1252*53ee8cc1Swenshuai.xi                 u32RegAddrStar = MIU1_PROTECT1_START;
1253*53ee8cc1Swenshuai.xi                 u32RegAddrIDenable = MIU1_PROTECT1_ID_ENABLE;
1254*53ee8cc1Swenshuai.xi                 u16Data2 = (u16Data1 & 0xFF0F);
1255*53ee8cc1Swenshuai.xi                 break;
1256*53ee8cc1Swenshuai.xi             case E_MIU_BLOCK_2:
1257*53ee8cc1Swenshuai.xi                 u32RegAddrStar = MIU1_PROTECT2_START;
1258*53ee8cc1Swenshuai.xi                 u32RegAddrIDenable = MIU1_PROTECT2_ID_ENABLE;
1259*53ee8cc1Swenshuai.xi                 u16Data2 = (u16Data1 & 0xF0FF);
1260*53ee8cc1Swenshuai.xi                 break;
1261*53ee8cc1Swenshuai.xi             case E_MIU_BLOCK_3:
1262*53ee8cc1Swenshuai.xi                 u32RegAddrStar = MIU1_PROTECT3_START;
1263*53ee8cc1Swenshuai.xi                 u32RegAddrIDenable = MIU1_PROTECT3_ID_ENABLE;
1264*53ee8cc1Swenshuai.xi                 u16Data2 = (u16Data1 & 0x0FFF);
1265*53ee8cc1Swenshuai.xi                 break;
1266*53ee8cc1Swenshuai.xi             default:
1267*53ee8cc1Swenshuai.xi                 return false;
1268*53ee8cc1Swenshuai.xi         }
1269*53ee8cc1Swenshuai.xi      }
1270*53ee8cc1Swenshuai.xi     else if(u8MiuSel == E_CHIP_MIU_2)
1271*53ee8cc1Swenshuai.xi     {
1272*53ee8cc1Swenshuai.xi         u32RegAddrMSB = MIU2_PROTECT0_MSB;
1273*53ee8cc1Swenshuai.xi         u16Data1 = HAL_MIU_Read2Byte(u32RegAddrMSB);
1274*53ee8cc1Swenshuai.xi 
1275*53ee8cc1Swenshuai.xi         u32RegAddr = MIU2_PROTECT0_ID0;
1276*53ee8cc1Swenshuai.xi         u32MiuProtectEn=MIU2_PROTECT_EN;
1277*53ee8cc1Swenshuai.xi         u32Reg = MIU2_REG_BASE;
1278*53ee8cc1Swenshuai.xi 
1279*53ee8cc1Swenshuai.xi         switch (u8Blockx)
1280*53ee8cc1Swenshuai.xi         {
1281*53ee8cc1Swenshuai.xi             case E_MIU_BLOCK_0:
1282*53ee8cc1Swenshuai.xi                 u32RegAddrStar = MIU2_PROTECT0_START;
1283*53ee8cc1Swenshuai.xi                 u32RegAddrIDenable = MIU2_PROTECT0_ID_ENABLE;
1284*53ee8cc1Swenshuai.xi                 u16Data2 = (u16Data1 & 0xFFF0);
1285*53ee8cc1Swenshuai.xi                 break;
1286*53ee8cc1Swenshuai.xi             case E_MIU_BLOCK_1:
1287*53ee8cc1Swenshuai.xi                 u32RegAddrStar = MIU2_PROTECT1_START;
1288*53ee8cc1Swenshuai.xi                 u32RegAddrIDenable = MIU2_PROTECT1_ID_ENABLE;
1289*53ee8cc1Swenshuai.xi                 u16Data2 = (u16Data1 & 0xFF0F);
1290*53ee8cc1Swenshuai.xi                 break;
1291*53ee8cc1Swenshuai.xi             case E_MIU_BLOCK_2:
1292*53ee8cc1Swenshuai.xi                 u32RegAddrStar = MIU2_PROTECT2_START;
1293*53ee8cc1Swenshuai.xi                 u32RegAddrIDenable = MIU2_PROTECT2_ID_ENABLE;
1294*53ee8cc1Swenshuai.xi                 u16Data2 = (u16Data1 & 0xF0FF);
1295*53ee8cc1Swenshuai.xi                 break;
1296*53ee8cc1Swenshuai.xi             case E_MIU_BLOCK_3:
1297*53ee8cc1Swenshuai.xi                 u32RegAddrStar = MIU2_PROTECT3_START;
1298*53ee8cc1Swenshuai.xi                 u32RegAddrIDenable = MIU2_PROTECT3_ID_ENABLE;
1299*53ee8cc1Swenshuai.xi                 u16Data2 = (u16Data1 & 0x0FFF);
1300*53ee8cc1Swenshuai.xi                 break;
1301*53ee8cc1Swenshuai.xi             default:
1302*53ee8cc1Swenshuai.xi                 return false;
1303*53ee8cc1Swenshuai.xi         }
1304*53ee8cc1Swenshuai.xi     }
1305*53ee8cc1Swenshuai.xi     else if(u8MiuSel == E_CHIP_MIU_3)
1306*53ee8cc1Swenshuai.xi     {
1307*53ee8cc1Swenshuai.xi         u32RegAddrMSB = MIU3_PROTECT0_MSB;
1308*53ee8cc1Swenshuai.xi         u16Data1 = HAL_MIU_Read2Byte(u32RegAddrMSB);
1309*53ee8cc1Swenshuai.xi 
1310*53ee8cc1Swenshuai.xi         u32RegAddr = MIU3_PROTECT0_ID0;
1311*53ee8cc1Swenshuai.xi         u32MiuProtectEn=MIU3_PROTECT_EN;
1312*53ee8cc1Swenshuai.xi         u32Reg = MIU3_REG_BASE;
1313*53ee8cc1Swenshuai.xi 
1314*53ee8cc1Swenshuai.xi         switch (u8Blockx)
1315*53ee8cc1Swenshuai.xi         {
1316*53ee8cc1Swenshuai.xi             case E_MIU_BLOCK_0:
1317*53ee8cc1Swenshuai.xi                 u32RegAddrStar = MIU3_PROTECT0_START;
1318*53ee8cc1Swenshuai.xi                 u32RegAddrIDenable = MIU3_PROTECT0_ID_ENABLE;
1319*53ee8cc1Swenshuai.xi                 u16Data2 = (u16Data1 & 0xFFF0);
1320*53ee8cc1Swenshuai.xi                 break;
1321*53ee8cc1Swenshuai.xi             case E_MIU_BLOCK_1:
1322*53ee8cc1Swenshuai.xi                 u32RegAddrStar = MIU3_PROTECT1_START;
1323*53ee8cc1Swenshuai.xi                 u32RegAddrIDenable = MIU3_PROTECT1_ID_ENABLE;
1324*53ee8cc1Swenshuai.xi                 u16Data2 = (u16Data1 & 0xFF0F);
1325*53ee8cc1Swenshuai.xi                 break;
1326*53ee8cc1Swenshuai.xi             case E_MIU_BLOCK_2:
1327*53ee8cc1Swenshuai.xi                 u32RegAddrStar = MIU3_PROTECT2_START;
1328*53ee8cc1Swenshuai.xi                 u32RegAddrIDenable = MIU3_PROTECT2_ID_ENABLE;
1329*53ee8cc1Swenshuai.xi                 u16Data2 = (u16Data1 & 0xF0FF);
1330*53ee8cc1Swenshuai.xi                 break;
1331*53ee8cc1Swenshuai.xi             case E_MIU_BLOCK_3:
1332*53ee8cc1Swenshuai.xi                 u32RegAddrStar = MIU3_PROTECT3_START;
1333*53ee8cc1Swenshuai.xi                 u32RegAddrIDenable = MIU3_PROTECT3_ID_ENABLE;
1334*53ee8cc1Swenshuai.xi                 u16Data2 = (u16Data1 & 0x0FFF);
1335*53ee8cc1Swenshuai.xi                 break;
1336*53ee8cc1Swenshuai.xi             default:
1337*53ee8cc1Swenshuai.xi                 return false;
1338*53ee8cc1Swenshuai.xi         }
1339*53ee8cc1Swenshuai.xi     }
1340*53ee8cc1Swenshuai.xi     else
1341*53ee8cc1Swenshuai.xi     {
1342*53ee8cc1Swenshuai.xi        printf("%s not support MIU%u!\n", __FUNCTION__, u8MiuSel );
1343*53ee8cc1Swenshuai.xi        return FALSE;
1344*53ee8cc1Swenshuai.xi     }
1345*53ee8cc1Swenshuai.xi 
1346*53ee8cc1Swenshuai.xi     // Disable MIU protect
1347*53ee8cc1Swenshuai.xi     HAL_MIU_WriteRegBit(u32MiuProtectEn,u8Data,DISABLE);
1348*53ee8cc1Swenshuai.xi 
1349*53ee8cc1Swenshuai.xi     if ( bSetFlag )
1350*53ee8cc1Swenshuai.xi     {
1351*53ee8cc1Swenshuai.xi         // Set Protect IDs
1352*53ee8cc1Swenshuai.xi         if(HAL_MIU_SetGroupID(u8MiuSel, u8Blockx, pu8ProtectId, u32RegAddr, u32RegAddrIDenable) == FALSE)
1353*53ee8cc1Swenshuai.xi         {
1354*53ee8cc1Swenshuai.xi             return FALSE;
1355*53ee8cc1Swenshuai.xi         }
1356*53ee8cc1Swenshuai.xi 
1357*53ee8cc1Swenshuai.xi         // Set BIT29,30 of start/end address
1358*53ee8cc1Swenshuai.xi         u16Data2 = u16Data2 | (MS_U16)((phy64Start >> 29) << (u8Blockx*4));
1359*53ee8cc1Swenshuai.xi         u16Data1 = u16Data2 | (MS_U16)(((phy64End - 1) >> 29) << (u8Blockx*4+2));
1360*53ee8cc1Swenshuai.xi         HAL_MIU_Write2Byte(u32RegAddrMSB, u16Data1);
1361*53ee8cc1Swenshuai.xi 
1362*53ee8cc1Swenshuai.xi         // Start Address
1363*53ee8cc1Swenshuai.xi         u16Data = (MS_U16)(phy64Start >> MIU_PAGE_SHIFT);   //8k/unit
1364*53ee8cc1Swenshuai.xi         HAL_MIU_Write2Byte(u32RegAddrStar , u16Data);
1365*53ee8cc1Swenshuai.xi 
1366*53ee8cc1Swenshuai.xi         // End Address
1367*53ee8cc1Swenshuai.xi         u16Data = (MS_U16)((phy64End >> MIU_PAGE_SHIFT)-1);   //8k/unit;
1368*53ee8cc1Swenshuai.xi         HAL_MIU_Write2Byte(u32RegAddrStar + 2, u16Data);
1369*53ee8cc1Swenshuai.xi 
1370*53ee8cc1Swenshuai.xi         // Enable MIU protect
1371*53ee8cc1Swenshuai.xi         HAL_MIU_WriteRegBit(u32MiuProtectEn, u8Data, ENABLE);
1372*53ee8cc1Swenshuai.xi     }
1373*53ee8cc1Swenshuai.xi     else
1374*53ee8cc1Swenshuai.xi     {
1375*53ee8cc1Swenshuai.xi         // Reset Protect IDs
1376*53ee8cc1Swenshuai.xi         HAL_MIU_ResetGroupID(u8MiuSel, u8Blockx, pu8ProtectId, u32RegAddr, u32RegAddrIDenable);
1377*53ee8cc1Swenshuai.xi     }
1378*53ee8cc1Swenshuai.xi 
1379*53ee8cc1Swenshuai.xi     // clear log
1380*53ee8cc1Swenshuai.xi     HAL_MIU_Write2BytesBit(u32Reg+REG_MIU_PROTECT_STATUS, TRUE, REG_MIU_PROTECT_LOG_CLR);
1381*53ee8cc1Swenshuai.xi     HAL_MIU_Write2BytesBit(u32Reg+REG_MIU_PROTECT_STATUS, FALSE, REG_MIU_PROTECT_LOG_CLR);
1382*53ee8cc1Swenshuai.xi 
1383*53ee8cc1Swenshuai.xi     return TRUE;
1384*53ee8cc1Swenshuai.xi }
1385*53ee8cc1Swenshuai.xi 
1386*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1387*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MIU_ProtectEx()
1388*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description:  Enable/Disable MIU Protection mode
1389*53ee8cc1Swenshuai.xi /// @param u8Blockx        \b IN     : MIU Block to protect (0 ~ 4)
1390*53ee8cc1Swenshuai.xi /// @param *pu8ProtectId   \b IN     : Allow specified client IDs to write
1391*53ee8cc1Swenshuai.xi /// @param u32Start        \b IN     : Starting address
1392*53ee8cc1Swenshuai.xi /// @param u32End          \b IN     : End address
1393*53ee8cc1Swenshuai.xi /// @param bSetFlag        \b IN     : Disable or Enable MIU protection
1394*53ee8cc1Swenshuai.xi ///                                      - -Disable(0)
1395*53ee8cc1Swenshuai.xi ///                                      - -Enable(1)
1396*53ee8cc1Swenshuai.xi /// @param <OUT>           \b None    :
1397*53ee8cc1Swenshuai.xi /// @param <RET>           \b None    :
1398*53ee8cc1Swenshuai.xi /// @param <GLOBAL>        \b None    :
1399*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MIU_ProtectEx(MS_U8 u8Blockx,MS_U32 * pu32ProtectId,MS_PHY u32Start,MS_PHY u32End,MS_BOOL bSetFlag)1400*53ee8cc1Swenshuai.xi MS_BOOL HAL_MIU_ProtectEx(
1401*53ee8cc1Swenshuai.xi                           MS_U8    u8Blockx,
1402*53ee8cc1Swenshuai.xi                           MS_U32    *pu32ProtectId,
1403*53ee8cc1Swenshuai.xi                           MS_PHY   u32Start,
1404*53ee8cc1Swenshuai.xi                           MS_PHY   u32End,
1405*53ee8cc1Swenshuai.xi                           MS_BOOL  bSetFlag
1406*53ee8cc1Swenshuai.xi                          )
1407*53ee8cc1Swenshuai.xi {
1408*53ee8cc1Swenshuai.xi     return TRUE;
1409*53ee8cc1Swenshuai.xi }
1410*53ee8cc1Swenshuai.xi 
1411*53ee8cc1Swenshuai.xi 
1412*53ee8cc1Swenshuai.xi #define GET_HIT_BLOCK(regval)       BITS_RANGE_VAL(regval, REG_MIU_PROTECT_HIT_NO)
1413*53ee8cc1Swenshuai.xi #define GET_HIT_CLIENT(regval)      BITS_RANGE_VAL(regval, REG_MIU_PROTECT_HIT_ID)
1414*53ee8cc1Swenshuai.xi 
HAL_MIU_GetProtectInfo(MS_U8 u8MiuDev,MIU_PortectInfo * pInfo)1415*53ee8cc1Swenshuai.xi MS_BOOL HAL_MIU_GetProtectInfo(MS_U8 u8MiuDev, MIU_PortectInfo *pInfo)
1416*53ee8cc1Swenshuai.xi {
1417*53ee8cc1Swenshuai.xi     MS_U16 ret = 0;
1418*53ee8cc1Swenshuai.xi     MS_U16 loaddr = 0;
1419*53ee8cc1Swenshuai.xi     MS_U16 hiaddr = 0;
1420*53ee8cc1Swenshuai.xi     MS_U32 u32Address = 0;
1421*53ee8cc1Swenshuai.xi     MS_U32 u32Reg ;
1422*53ee8cc1Swenshuai.xi 
1423*53ee8cc1Swenshuai.xi     if(u8MiuDev == E_MIU_0)
1424*53ee8cc1Swenshuai.xi     {
1425*53ee8cc1Swenshuai.xi         u32Reg = MIU_REG_BASE;
1426*53ee8cc1Swenshuai.xi     }
1427*53ee8cc1Swenshuai.xi     else if(u8MiuDev == E_MIU_1)
1428*53ee8cc1Swenshuai.xi     {
1429*53ee8cc1Swenshuai.xi         u32Reg = MIU1_REG_BASE;
1430*53ee8cc1Swenshuai.xi     }
1431*53ee8cc1Swenshuai.xi     else if(u8MiuDev == E_MIU_2)
1432*53ee8cc1Swenshuai.xi     {
1433*53ee8cc1Swenshuai.xi         u32Reg = MIU2_REG_BASE;
1434*53ee8cc1Swenshuai.xi     }
1435*53ee8cc1Swenshuai.xi     else
1436*53ee8cc1Swenshuai.xi     {
1437*53ee8cc1Swenshuai.xi        printf("%s not support MIU%u!\n", __FUNCTION__, u8MiuDev );
1438*53ee8cc1Swenshuai.xi        return FALSE;
1439*53ee8cc1Swenshuai.xi     }
1440*53ee8cc1Swenshuai.xi 
1441*53ee8cc1Swenshuai.xi     if (!pInfo)
1442*53ee8cc1Swenshuai.xi         return FALSE;
1443*53ee8cc1Swenshuai.xi 
1444*53ee8cc1Swenshuai.xi     ret = HAL_MIU_Read2Byte(u32Reg+REG_MIU_PROTECT_STATUS);
1445*53ee8cc1Swenshuai.xi     loaddr = HAL_MIU_Read2Byte(u32Reg+REG_MIU_PROTECT_LOADDR);
1446*53ee8cc1Swenshuai.xi     hiaddr = HAL_MIU_Read2Byte(u32Reg+REG_MIU_PROTECT_HIADDR);
1447*53ee8cc1Swenshuai.xi 
1448*53ee8cc1Swenshuai.xi     pInfo->bHit = false;
1449*53ee8cc1Swenshuai.xi 
1450*53ee8cc1Swenshuai.xi     if (REG_MIU_PROTECT_HIT_FALG & ret)
1451*53ee8cc1Swenshuai.xi     {
1452*53ee8cc1Swenshuai.xi         pInfo->bHit = TRUE;
1453*53ee8cc1Swenshuai.xi 
1454*53ee8cc1Swenshuai.xi         pInfo->u8Block = (MS_U8)GET_HIT_BLOCK(ret);
1455*53ee8cc1Swenshuai.xi         pInfo->u8Group = (MS_U8)(GET_HIT_CLIENT(ret) >> 4);
1456*53ee8cc1Swenshuai.xi         pInfo->u8ClientID = (MS_U8)(GET_HIT_CLIENT(ret) & 0x0F);
1457*53ee8cc1Swenshuai.xi         u32Address = (MS_U32)((hiaddr << 16) | loaddr) ;
1458*53ee8cc1Swenshuai.xi         u32Address = u32Address * MIU_PROTECT_ADDRESS_UNIT;
1459*53ee8cc1Swenshuai.xi         printf("MIU%u Block:%u Group:%u ClientID:%u Hitted_Address:0x%tX<->0x%tX\n", u8MiuDev,
1460*53ee8cc1Swenshuai.xi         pInfo->u8Block, pInfo->u8Group, pInfo->u8ClientID, (ptrdiff_t)u32Address, (ptrdiff_t)(u32Address + MIU_PROTECT_ADDRESS_UNIT - 1));
1461*53ee8cc1Swenshuai.xi 
1462*53ee8cc1Swenshuai.xi         //clear log
1463*53ee8cc1Swenshuai.xi         HAL_MIU_Write2BytesBit(u32Reg+REG_MIU_PROTECT_STATUS, TRUE, REG_MIU_PROTECT_LOG_CLR);
1464*53ee8cc1Swenshuai.xi         HAL_MIU_Write2BytesBit(u32Reg+REG_MIU_PROTECT_STATUS, FALSE, REG_MIU_PROTECT_LOG_CLR);
1465*53ee8cc1Swenshuai.xi     }
1466*53ee8cc1Swenshuai.xi 
1467*53ee8cc1Swenshuai.xi     return TRUE;
1468*53ee8cc1Swenshuai.xi }
1469*53ee8cc1Swenshuai.xi 
1470*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1471*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MIU_SetSsc()
1472*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: MDrv_MIU_SetSsc, @Step & Span
1473*53ee8cc1Swenshuai.xi /// @param u16Fmodulation   \b IN : 20KHz ~ 40KHz (Input Value = 20 ~ 40)
1474*53ee8cc1Swenshuai.xi /// @param u16FDeviation    \b IN  : under 0.1% ~ 2% (Input Value = 1 ~ 20)
1475*53ee8cc1Swenshuai.xi /// @param bEnable          \b IN    :
1476*53ee8cc1Swenshuai.xi /// @param None             \b OUT  :
1477*53ee8cc1Swenshuai.xi /// @param None             \b RET  :
1478*53ee8cc1Swenshuai.xi /// @param None             \b GLOBAL :
1479*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MIU_SetSsc(MS_U8 u8MiuDev,MS_U16 u16Fmodulation,MS_U16 u16FDeviation,MS_BOOL bEnable)1480*53ee8cc1Swenshuai.xi MS_BOOL HAL_MIU_SetSsc(MS_U8 u8MiuDev, MS_U16 u16Fmodulation, MS_U16 u16FDeviation, MS_BOOL bEnable)
1481*53ee8cc1Swenshuai.xi {
1482*53ee8cc1Swenshuai.xi     MS_U32 uDDFSET, uDDR_MHz, uDDFStep, uRegBase = MIU_ATOP_BASE;
1483*53ee8cc1Swenshuai.xi     MS_U16 u16DDFSpan;
1484*53ee8cc1Swenshuai.xi     MS_U16 u16Input_DIV_First,u16Input_DIV_Second,u16Loop_DIV_First,u16Loop_DIV_Second;
1485*53ee8cc1Swenshuai.xi     MS_U8  u8Temp,i;
1486*53ee8cc1Swenshuai.xi 
1487*53ee8cc1Swenshuai.xi     //Pre check the input
1488*53ee8cc1Swenshuai.xi     if(u8MiuDev == E_MIU_0)
1489*53ee8cc1Swenshuai.xi     {
1490*53ee8cc1Swenshuai.xi         uRegBase = MIU_ATOP_BASE;
1491*53ee8cc1Swenshuai.xi     }
1492*53ee8cc1Swenshuai.xi     else if(u8MiuDev == E_MIU_1)
1493*53ee8cc1Swenshuai.xi     {
1494*53ee8cc1Swenshuai.xi         uRegBase = MIU1_ATOP_BASE;
1495*53ee8cc1Swenshuai.xi     }
1496*53ee8cc1Swenshuai.xi     else if(u8MiuDev == E_MIU_2)
1497*53ee8cc1Swenshuai.xi     {
1498*53ee8cc1Swenshuai.xi         uRegBase = MIU2_ATOP_BASE;
1499*53ee8cc1Swenshuai.xi     }
1500*53ee8cc1Swenshuai.xi     else
1501*53ee8cc1Swenshuai.xi     {
1502*53ee8cc1Swenshuai.xi        printf("%s not support MIU%u!\n", __FUNCTION__, u8MiuDev );
1503*53ee8cc1Swenshuai.xi        return FALSE;
1504*53ee8cc1Swenshuai.xi     }
1505*53ee8cc1Swenshuai.xi 
1506*53ee8cc1Swenshuai.xi     HAL_MIU_SSC_DBG(printf("MMIO base:%lx uRegBase:%lx\n", _gMIU_MapBase, uRegBase));
1507*53ee8cc1Swenshuai.xi 
1508*53ee8cc1Swenshuai.xi     if ((u16Fmodulation<20)||(u16Fmodulation>40))
1509*53ee8cc1Swenshuai.xi     {
1510*53ee8cc1Swenshuai.xi         MIU_HAL_ERR("SSC u16Fmodulation Error...(20KHz - 40KHz)\n");
1511*53ee8cc1Swenshuai.xi         return 0;
1512*53ee8cc1Swenshuai.xi     }
1513*53ee8cc1Swenshuai.xi 
1514*53ee8cc1Swenshuai.xi     if ((u16FDeviation<1)||(u16FDeviation>20))
1515*53ee8cc1Swenshuai.xi     {
1516*53ee8cc1Swenshuai.xi         MIU_HAL_ERR("SSC u16FDeviation Error...(0.1%% - 2%% ==> 1 ~20)\n");
1517*53ee8cc1Swenshuai.xi         return 0;
1518*53ee8cc1Swenshuai.xi     }
1519*53ee8cc1Swenshuai.xi 
1520*53ee8cc1Swenshuai.xi     HAL_MIU_SSC_DBG(printf("---> u16Fmodulation = %d u16FDeviation = %d \n",(int)u16Fmodulation,(int)u16FDeviation));
1521*53ee8cc1Swenshuai.xi     //<1>.Caculate DDFM = (Loop_DIV_First * Loop_DIV_Second)/(Input_DIV_First * Input_DIV_Second);
1522*53ee8cc1Swenshuai.xi     //Prepare Input_DIV_First
1523*53ee8cc1Swenshuai.xi     u8Temp = ((MS_U16)(HAL_MIU_Read2Byte(uRegBase+MIU_DDRPLL_DIV_FIRST)&0x3));       //Bit 9,8 (0x110D36)
1524*53ee8cc1Swenshuai.xi     u16Input_DIV_First = 0x01;
1525*53ee8cc1Swenshuai.xi     for (i=0;i<u8Temp;i++)
1526*53ee8cc1Swenshuai.xi         u16Input_DIV_First = u16Input_DIV_First << 1;
1527*53ee8cc1Swenshuai.xi     //Prepare Input_DIV_Second
1528*53ee8cc1Swenshuai.xi     u16Input_DIV_Second = 0;// no mapping in Einstein(HAL_MIU_ReadByte(uRegBase+MIU_PLL_INPUT_DIV_2ND));     //Bit 0~7 (0x101222)
1529*53ee8cc1Swenshuai.xi     if (u16Input_DIV_Second == 0)
1530*53ee8cc1Swenshuai.xi         u16Input_DIV_Second = 1;
1531*53ee8cc1Swenshuai.xi     //Prepare Loop_DIV_First
1532*53ee8cc1Swenshuai.xi     u8Temp = ((HAL_MIU_ReadByte(uRegBase+MIU_DDRPLL_DIV_FIRST)&0xC)>>2);         //Bit 11,10 (0x110D36)
1533*53ee8cc1Swenshuai.xi     u16Loop_DIV_First = 0x01;
1534*53ee8cc1Swenshuai.xi      for (i=0;i<u8Temp;i++)
1535*53ee8cc1Swenshuai.xi         u16Loop_DIV_First = u16Loop_DIV_First << 1;
1536*53ee8cc1Swenshuai.xi 
1537*53ee8cc1Swenshuai.xi     //Prepare Loop_DIV_Second
1538*53ee8cc1Swenshuai.xi     u16Loop_DIV_Second = (HAL_MIU_ReadByte(uRegBase+MIU_PLL_LOOP_DIV_2ND))&0x1F;      //Bit 0~4 (0x101223)
1539*53ee8cc1Swenshuai.xi     if (u16Loop_DIV_Second == 0)
1540*53ee8cc1Swenshuai.xi         u16Loop_DIV_Second = 1;
1541*53ee8cc1Swenshuai.xi 
1542*53ee8cc1Swenshuai.xi     //<2>.From DDFSET register to get DDRPLL
1543*53ee8cc1Swenshuai.xi     uDDFSET = HAL_MIU_Read4Byte(uRegBase+MIU_DDFSET) & 0x00ffffff;
1544*53ee8cc1Swenshuai.xi     //DDRPLL = MPPL * DDR_FACTOR * Loop_First * Loop_Second / DDFSET * Input_First * Input_Second
1545*53ee8cc1Swenshuai.xi     HAL_MIU_SSC_DBG(printf("---> Loop_First:%u Loop_Second:%u\n", u16Loop_DIV_First, u16Loop_DIV_Second));
1546*53ee8cc1Swenshuai.xi     HAL_MIU_SSC_DBG(printf("---> Input_first:%u Input_second:%u\n", u16Input_DIV_First, u16Input_DIV_Second));
1547*53ee8cc1Swenshuai.xi     uDDR_MHz = (MPPL * DDR_FACTOR * u16Loop_DIV_First * u16Loop_DIV_Second)/ (uDDFSET*u16Input_DIV_First*u16Input_DIV_Second);
1548*53ee8cc1Swenshuai.xi     HAL_MIU_SSC_DBG(printf("---> uDDFSET = 0x%lx\n",uDDFSET));
1549*53ee8cc1Swenshuai.xi     HAL_MIU_SSC_DBG(printf("---> DDR_MHZ = 0x%lx (%d MHz)\n",uDDR_MHz,(int)uDDR_MHz));
1550*53ee8cc1Swenshuai.xi 
1551*53ee8cc1Swenshuai.xi     //<3>.Caculate DDFSPAN = (MPLL * DDFSPAN_FACTOR * MHz) / (DDFSET * Fmodulation * KHz)
1552*53ee8cc1Swenshuai.xi     u16DDFSpan = (MS_U32)((DDFSPAN_FACTOR * MPPL/u16Fmodulation)* 1000/uDDFSET);
1553*53ee8cc1Swenshuai.xi     HAL_MIU_SSC_DBG(printf("---> DDFSPAN = 0x%x (%d)\n",u16DDFSpan,(int)u16DDFSpan));
1554*53ee8cc1Swenshuai.xi     if (u16DDFSpan > 0x3FFF)
1555*53ee8cc1Swenshuai.xi     {
1556*53ee8cc1Swenshuai.xi         u16DDFSpan = 0x3FFF;
1557*53ee8cc1Swenshuai.xi         HAL_MIU_SSC_DBG(printf("??? DDFSPAN overflow > 0x3FFF, Fource set to 0x03FF\n"));
1558*53ee8cc1Swenshuai.xi     }
1559*53ee8cc1Swenshuai.xi 
1560*53ee8cc1Swenshuai.xi     //Write to Register
1561*53ee8cc1Swenshuai.xi     HAL_MIU_Write2Byte(uRegBase+MIU_DDFSPAN,u16DDFSpan);
1562*53ee8cc1Swenshuai.xi     //<4>.Caculate DDFSTEP = (FDeviation*DDFSET/10)/(DDFSPAN*100)
1563*53ee8cc1Swenshuai.xi     uDDFStep = (MS_U32)((u16FDeviation * (uDDFSET/10))/(u16DDFSpan*100));
1564*53ee8cc1Swenshuai.xi     HAL_MIU_SSC_DBG(printf("---> DDFSTEP = 0x%lx (%lu)\n",uDDFStep,uDDFStep));
1565*53ee8cc1Swenshuai.xi     //Write to Register
1566*53ee8cc1Swenshuai.xi     uDDFStep &= (0x03FF);
1567*53ee8cc1Swenshuai.xi     HAL_MIU_Write2Byte(uRegBase+MIU_DDFSTEP,(HAL_MIU_Read2Byte(uRegBase+MIU_DDFSTEP) & (~0x03FF))|uDDFStep);
1568*53ee8cc1Swenshuai.xi 
1569*53ee8cc1Swenshuai.xi     //<5>.Set ENABLE
1570*53ee8cc1Swenshuai.xi     if(bEnable == ENABLE)
1571*53ee8cc1Swenshuai.xi         HAL_MIU_WriteByte(uRegBase+MIU_SSC_EN,(HAL_MIU_ReadByte(uRegBase+MIU_SSC_EN)|0xC0));
1572*53ee8cc1Swenshuai.xi     else
1573*53ee8cc1Swenshuai.xi         HAL_MIU_WriteByte(uRegBase+MIU_SSC_EN,(HAL_MIU_ReadByte(uRegBase+MIU_SSC_EN)&(~0xC0))|0x80);
1574*53ee8cc1Swenshuai.xi 
1575*53ee8cc1Swenshuai.xi     return 1;
1576*53ee8cc1Swenshuai.xi }
1577*53ee8cc1Swenshuai.xi 
1578*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1579*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MIU_MaskReq()
1580*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: Mask MIU request
1581*53ee8cc1Swenshuai.xi /// @param u8Miu  IN        \b  : miu0 or miu1
1582*53ee8cc1Swenshuai.xi /// @param eClientID IN     \b  : client ID
1583*53ee8cc1Swenshuai.xi /// @param None   OUT       \b  :
1584*53ee8cc1Swenshuai.xi /// @param None   RET       \b  :
1585*53ee8cc1Swenshuai.xi /// @param None   GLOBAL    \b  :
1586*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MIU_MaskReq(MS_U8 u8Miu,eMIUClientID eClientID)1587*53ee8cc1Swenshuai.xi void HAL_MIU_MaskReq(MS_U8 u8Miu, eMIUClientID eClientID)
1588*53ee8cc1Swenshuai.xi {
1589*53ee8cc1Swenshuai.xi     MS_S16 sVal = -1;
1590*53ee8cc1Swenshuai.xi     MS_U32 u32Reg = 0;
1591*53ee8cc1Swenshuai.xi     MS_U32 u32RegBase = 0;
1592*53ee8cc1Swenshuai.xi     MS_U32 u32Grp = 0;
1593*53ee8cc1Swenshuai.xi 
1594*53ee8cc1Swenshuai.xi     sVal = HAL_MIU_GetClientInfo(u8Miu, eClientID);
1595*53ee8cc1Swenshuai.xi     if (sVal < 0)
1596*53ee8cc1Swenshuai.xi     {
1597*53ee8cc1Swenshuai.xi         printf("%s not support client ID:%u!\n", __FUNCTION__, eClientID);
1598*53ee8cc1Swenshuai.xi         return;
1599*53ee8cc1Swenshuai.xi     }
1600*53ee8cc1Swenshuai.xi 
1601*53ee8cc1Swenshuai.xi     u32Grp = MIU_GET_CLIENT_GROUP(sVal);
1602*53ee8cc1Swenshuai.xi 
1603*53ee8cc1Swenshuai.xi     switch (u32Grp)
1604*53ee8cc1Swenshuai.xi     {
1605*53ee8cc1Swenshuai.xi     case 0:
1606*53ee8cc1Swenshuai.xi     case 1:
1607*53ee8cc1Swenshuai.xi     case 2:
1608*53ee8cc1Swenshuai.xi     case 3:
1609*53ee8cc1Swenshuai.xi         u32Reg = REG_MIU_RQX_MASK (u32Grp);
1610*53ee8cc1Swenshuai.xi         u32RegBase = (u8Miu == E_MIU_0 ? MIU_REG_BASE : (u8Miu == E_MIU_1 ? MIU1_REG_BASE : MIU2_REG_BASE));
1611*53ee8cc1Swenshuai.xi         break;
1612*53ee8cc1Swenshuai.xi     case 4:
1613*53ee8cc1Swenshuai.xi     case 5:
1614*53ee8cc1Swenshuai.xi         u32Reg = REG_MIU_ARB_RQX_MASK (u32Grp);
1615*53ee8cc1Swenshuai.xi         u32RegBase = (u8Miu == E_MIU_0 ? MIU_ARB_REG_BASE : (u8Miu == E_MIU_1 ? MIU1_ARB_REG_BASE : MIU2_ARB_REG_BASE));
1616*53ee8cc1Swenshuai.xi         break;
1617*53ee8cc1Swenshuai.xi     case 6:
1618*53ee8cc1Swenshuai.xi     case 7:
1619*53ee8cc1Swenshuai.xi         u32Reg = REG_MIU_ARBB_RQX_MASK (u32Grp);
1620*53ee8cc1Swenshuai.xi         u32RegBase = (u8Miu == E_MIU_0 ? MIU_ARBB_REG_BASE : (u8Miu == E_MIU_1 ? MIU1_ARBB_REG_BASE : MIU2_ARBB_REG_BASE));
1621*53ee8cc1Swenshuai.xi         break;
1622*53ee8cc1Swenshuai.xi     default:
1623*53ee8cc1Swenshuai.xi         return;
1624*53ee8cc1Swenshuai.xi     }
1625*53ee8cc1Swenshuai.xi     u32Reg += u32RegBase;
1626*53ee8cc1Swenshuai.xi 
1627*53ee8cc1Swenshuai.xi     HAL_MIU_Write2BytesBit(u32Reg, TRUE, BIT(MIU_GET_CLIENT_POS(sVal)));
1628*53ee8cc1Swenshuai.xi }
1629*53ee8cc1Swenshuai.xi 
1630*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1631*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MIU_UnMaskReq()
1632*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: Mask MIU request
1633*53ee8cc1Swenshuai.xi /// @param u8Miu  IN        \b  : miu0 or miu1
1634*53ee8cc1Swenshuai.xi /// @param eClientID IN      \b  : client ID
1635*53ee8cc1Swenshuai.xi /// @param None   OUT       \b  :
1636*53ee8cc1Swenshuai.xi /// @param None   RET       \b  :
1637*53ee8cc1Swenshuai.xi /// @param None   GLOBAL    \b  :
1638*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MIU_UnMaskReq(MS_U8 u8Miu,eMIUClientID eClientID)1639*53ee8cc1Swenshuai.xi void HAL_MIU_UnMaskReq(MS_U8 u8Miu, eMIUClientID eClientID)
1640*53ee8cc1Swenshuai.xi {
1641*53ee8cc1Swenshuai.xi     MS_S16 sVal = -1;
1642*53ee8cc1Swenshuai.xi     MS_U32 u32Reg = 0;
1643*53ee8cc1Swenshuai.xi     MS_U32 u32RegBase = 0;
1644*53ee8cc1Swenshuai.xi     MS_U32 u32Grp = 0;
1645*53ee8cc1Swenshuai.xi 
1646*53ee8cc1Swenshuai.xi     sVal = HAL_MIU_GetClientInfo(u8Miu, eClientID);
1647*53ee8cc1Swenshuai.xi     if (sVal < 0)
1648*53ee8cc1Swenshuai.xi     {
1649*53ee8cc1Swenshuai.xi         printf("%s not support client ID:%u!\n", __FUNCTION__, eClientID);
1650*53ee8cc1Swenshuai.xi         return;
1651*53ee8cc1Swenshuai.xi     }
1652*53ee8cc1Swenshuai.xi 
1653*53ee8cc1Swenshuai.xi     u32Grp = MIU_GET_CLIENT_GROUP(sVal);
1654*53ee8cc1Swenshuai.xi 
1655*53ee8cc1Swenshuai.xi     switch (u32Grp)
1656*53ee8cc1Swenshuai.xi     {
1657*53ee8cc1Swenshuai.xi     case 0:
1658*53ee8cc1Swenshuai.xi     case 1:
1659*53ee8cc1Swenshuai.xi     case 2:
1660*53ee8cc1Swenshuai.xi     case 3:
1661*53ee8cc1Swenshuai.xi         u32Reg = REG_MIU_RQX_MASK (u32Grp);
1662*53ee8cc1Swenshuai.xi         u32RegBase = (u8Miu == E_MIU_0 ? MIU_REG_BASE : (u8Miu == E_MIU_1 ? MIU1_REG_BASE : MIU2_REG_BASE));
1663*53ee8cc1Swenshuai.xi         break;
1664*53ee8cc1Swenshuai.xi     case 4:
1665*53ee8cc1Swenshuai.xi     case 5:
1666*53ee8cc1Swenshuai.xi         u32Reg = REG_MIU_ARB_RQX_MASK (u32Grp);
1667*53ee8cc1Swenshuai.xi         u32RegBase = (u8Miu == E_MIU_0 ? MIU_ARB_REG_BASE : (u8Miu == E_MIU_1 ? MIU1_ARB_REG_BASE : MIU2_ARB_REG_BASE));
1668*53ee8cc1Swenshuai.xi         break;
1669*53ee8cc1Swenshuai.xi     case 6:
1670*53ee8cc1Swenshuai.xi     case 7:
1671*53ee8cc1Swenshuai.xi         u32Reg = REG_MIU_ARBB_RQX_MASK (u32Grp);
1672*53ee8cc1Swenshuai.xi         u32RegBase = (u8Miu == E_MIU_0 ? MIU_ARBB_REG_BASE : (u8Miu == E_MIU_1 ? MIU1_ARBB_REG_BASE : MIU2_ARBB_REG_BASE));
1673*53ee8cc1Swenshuai.xi         break;
1674*53ee8cc1Swenshuai.xi     default:
1675*53ee8cc1Swenshuai.xi         return;
1676*53ee8cc1Swenshuai.xi     }
1677*53ee8cc1Swenshuai.xi     u32Reg += u32RegBase;
1678*53ee8cc1Swenshuai.xi 
1679*53ee8cc1Swenshuai.xi     HAL_MIU_Write2BytesBit(u32Reg, FALSE, BIT(MIU_GET_CLIENT_POS(sVal)));
1680*53ee8cc1Swenshuai.xi 
1681*53ee8cc1Swenshuai.xi }
1682*53ee8cc1Swenshuai.xi 
1683*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1684*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MIU_SelMIU()
1685*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: MIU selection
1686*53ee8cc1Swenshuai.xi /// @param u8MiuDev    IN   \b  : miu device
1687*53ee8cc1Swenshuai.xi /// @param u16ClientID IN   \b  : client ID
1688*53ee8cc1Swenshuai.xi /// @param None   OUT       \b  :
1689*53ee8cc1Swenshuai.xi /// @param None   RET       \b  :
1690*53ee8cc1Swenshuai.xi /// @param None   GLOBAL    \b  :
1691*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MIU_SelMIU(eMIU_SelType eType,eMIUClientID eClientID)1692*53ee8cc1Swenshuai.xi MS_BOOL HAL_MIU_SelMIU(eMIU_SelType eType, eMIUClientID eClientID)
1693*53ee8cc1Swenshuai.xi {
1694*53ee8cc1Swenshuai.xi     MS_S16 sVal =  -1;
1695*53ee8cc1Swenshuai.xi     MS_U32 u32IdGroup = 0;
1696*53ee8cc1Swenshuai.xi     MS_U32 u32Reg0 = 0;
1697*53ee8cc1Swenshuai.xi     MS_U32 u32Reg1 = 0;
1698*53ee8cc1Swenshuai.xi     MS_U32 u32Reg2 = 0;
1699*53ee8cc1Swenshuai.xi 
1700*53ee8cc1Swenshuai.xi     //
1701*53ee8cc1Swenshuai.xi     // 1. Get ID Position in Client Table
1702*53ee8cc1Swenshuai.xi     //
1703*53ee8cc1Swenshuai.xi     switch (eType)
1704*53ee8cc1Swenshuai.xi     {
1705*53ee8cc1Swenshuai.xi     case MIU_SELTYPE_MIU0:
1706*53ee8cc1Swenshuai.xi     case MIU_SELTYPE_MIU_ALL:
1707*53ee8cc1Swenshuai.xi         sVal = HAL_MIU_GetClientInfo(0, eClientID);
1708*53ee8cc1Swenshuai.xi         break;
1709*53ee8cc1Swenshuai.xi     case MIU_SELTYPE_MIU1:
1710*53ee8cc1Swenshuai.xi         sVal = HAL_MIU_GetClientInfo(1, eClientID);
1711*53ee8cc1Swenshuai.xi         break;
1712*53ee8cc1Swenshuai.xi     case MIU_SELTYPE_MIU2:
1713*53ee8cc1Swenshuai.xi         sVal = HAL_MIU_GetClientInfo(2, eClientID);
1714*53ee8cc1Swenshuai.xi         break;
1715*53ee8cc1Swenshuai.xi     default:
1716*53ee8cc1Swenshuai.xi         printf("%s Error Type: 0x%x!\n", __FUNCTION__, eType);
1717*53ee8cc1Swenshuai.xi         break;
1718*53ee8cc1Swenshuai.xi     }
1719*53ee8cc1Swenshuai.xi 
1720*53ee8cc1Swenshuai.xi     if (sVal < 0)
1721*53ee8cc1Swenshuai.xi     {
1722*53ee8cc1Swenshuai.xi         printf("%s not support client ID:%u!\n", __FUNCTION__, eClientID);
1723*53ee8cc1Swenshuai.xi         return FALSE;
1724*53ee8cc1Swenshuai.xi     }
1725*53ee8cc1Swenshuai.xi 
1726*53ee8cc1Swenshuai.xi     //
1727*53ee8cc1Swenshuai.xi     // 2. Set the base address of MIU Select
1728*53ee8cc1Swenshuai.xi     //
1729*53ee8cc1Swenshuai.xi     u32IdGroup = MIU_GET_CLIENT_GROUP(sVal);
1730*53ee8cc1Swenshuai.xi     switch (u32IdGroup)
1731*53ee8cc1Swenshuai.xi     {
1732*53ee8cc1Swenshuai.xi     case 0:
1733*53ee8cc1Swenshuai.xi     case 1:
1734*53ee8cc1Swenshuai.xi     case 2:
1735*53ee8cc1Swenshuai.xi     case 3:
1736*53ee8cc1Swenshuai.xi     case 4:
1737*53ee8cc1Swenshuai.xi     case 5:
1738*53ee8cc1Swenshuai.xi         u32Reg0 = MIU_REG_BASE + REG_MIU_SELX(u32IdGroup);
1739*53ee8cc1Swenshuai.xi         u32Reg1 = MIU1_REG_BASE + REG_MIU_SELX(u32IdGroup);
1740*53ee8cc1Swenshuai.xi         u32Reg2 = MIU2_REG_BASE + REG_MIU_SELX(u32IdGroup);
1741*53ee8cc1Swenshuai.xi         break;
1742*53ee8cc1Swenshuai.xi     case 6:
1743*53ee8cc1Swenshuai.xi         u32Reg0 = MIU_ARBB_REG_BASE + REG_MIU_SELX(0);
1744*53ee8cc1Swenshuai.xi         u32Reg1 = MIU1_ARBB_REG_BASE + REG_MIU_SELX(0);
1745*53ee8cc1Swenshuai.xi         u32Reg2 = MIU2_ARBB_REG_BASE + REG_MIU_SELX(0);
1746*53ee8cc1Swenshuai.xi         break;
1747*53ee8cc1Swenshuai.xi     default:
1748*53ee8cc1Swenshuai.xi         break;
1749*53ee8cc1Swenshuai.xi     }
1750*53ee8cc1Swenshuai.xi 
1751*53ee8cc1Swenshuai.xi     //
1752*53ee8cc1Swenshuai.xi     // 3. Set MIU Selection
1753*53ee8cc1Swenshuai.xi     //
1754*53ee8cc1Swenshuai.xi     switch (eType)
1755*53ee8cc1Swenshuai.xi     {
1756*53ee8cc1Swenshuai.xi     case MIU_SELTYPE_MIU0:
1757*53ee8cc1Swenshuai.xi         HAL_MIU_Write2BytesBit(u32Reg0, 0, BIT(MIU_GET_CLIENT_POS(sVal)));
1758*53ee8cc1Swenshuai.xi         HAL_MIU_Write2BytesBit(u32Reg1, 0, BIT(MIU_GET_CLIENT_POS(sVal)));
1759*53ee8cc1Swenshuai.xi         HAL_MIU_Write2BytesBit(u32Reg2, 0, BIT(MIU_GET_CLIENT_POS(sVal)));
1760*53ee8cc1Swenshuai.xi         break;
1761*53ee8cc1Swenshuai.xi     case MIU_SELTYPE_MIU1:
1762*53ee8cc1Swenshuai.xi         HAL_MIU_Write2BytesBit(u32Reg0, 1, BIT(MIU_GET_CLIENT_POS(sVal)));
1763*53ee8cc1Swenshuai.xi         HAL_MIU_Write2BytesBit(u32Reg1, 0, BIT(MIU_GET_CLIENT_POS(sVal)));
1764*53ee8cc1Swenshuai.xi         HAL_MIU_Write2BytesBit(u32Reg2, 0, BIT(MIU_GET_CLIENT_POS(sVal)));
1765*53ee8cc1Swenshuai.xi         break;
1766*53ee8cc1Swenshuai.xi     case MIU_SELTYPE_MIU2:
1767*53ee8cc1Swenshuai.xi         HAL_MIU_Write2BytesBit(u32Reg0, 0, BIT(MIU_GET_CLIENT_POS(sVal)));
1768*53ee8cc1Swenshuai.xi         HAL_MIU_Write2BytesBit(u32Reg1, 0, BIT(MIU_GET_CLIENT_POS(sVal)));
1769*53ee8cc1Swenshuai.xi         HAL_MIU_Write2BytesBit(u32Reg2, 1, BIT(MIU_GET_CLIENT_POS(sVal)));
1770*53ee8cc1Swenshuai.xi         break;
1771*53ee8cc1Swenshuai.xi     case MIU_SELTYPE_MIU_ALL:
1772*53ee8cc1Swenshuai.xi         HAL_MIU_Write2BytesBit(u32Reg0, 0, BIT(MIU_GET_CLIENT_POS(sVal)));
1773*53ee8cc1Swenshuai.xi         HAL_MIU_Write2BytesBit(u32Reg1, 1, BIT(MIU_GET_CLIENT_POS(sVal)));
1774*53ee8cc1Swenshuai.xi         HAL_MIU_Write2BytesBit(u32Reg2, 0, BIT(MIU_GET_CLIENT_POS(sVal)));
1775*53ee8cc1Swenshuai.xi         break;
1776*53ee8cc1Swenshuai.xi     default:
1777*53ee8cc1Swenshuai.xi         break;
1778*53ee8cc1Swenshuai.xi     }
1779*53ee8cc1Swenshuai.xi 
1780*53ee8cc1Swenshuai.xi     return TRUE;
1781*53ee8cc1Swenshuai.xi }
1782*53ee8cc1Swenshuai.xi 
1783*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1784*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: MDrv_MIU_Mask_Req_OPM_R()
1785*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: Set OPM MIU mask
1786*53ee8cc1Swenshuai.xi /// @param u8Mask IN        \b  : miu mask
1787*53ee8cc1Swenshuai.xi /// @param u8Miu  IN        \b  : miu0 or miu1
1788*53ee8cc1Swenshuai.xi /// @param None   OUT       \b  :
1789*53ee8cc1Swenshuai.xi /// @param None   RET       \b  :
1790*53ee8cc1Swenshuai.xi /// @param None   GLOBAL    \b  :
1791*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MIU_Mask_Req_OPM_R(MS_U8 u8Mask,MS_U8 u8Miu)1792*53ee8cc1Swenshuai.xi void HAL_MIU_Mask_Req_OPM_R(MS_U8 u8Mask, MS_U8 u8Miu)
1793*53ee8cc1Swenshuai.xi {
1794*53ee8cc1Swenshuai.xi     _FUNC_NOT_USED();
1795*53ee8cc1Swenshuai.xi }
1796*53ee8cc1Swenshuai.xi 
1797*53ee8cc1Swenshuai.xi 
1798*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1799*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MIU_Mask_Req_DNRB_R()
1800*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: Set OPM MIU mask
1801*53ee8cc1Swenshuai.xi /// @param u8Mask IN        \b  : miu mask
1802*53ee8cc1Swenshuai.xi /// @param u8Miu  IN        \b  : miu0 or miu1
1803*53ee8cc1Swenshuai.xi /// @param None   OUT       \b  :
1804*53ee8cc1Swenshuai.xi /// @param None   RET       \b  :
1805*53ee8cc1Swenshuai.xi /// @param None   GLOBAL    \b  :
1806*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MIU_Mask_Req_DNRB_R(MS_U8 u8Mask,MS_U8 u8Miu)1807*53ee8cc1Swenshuai.xi void HAL_MIU_Mask_Req_DNRB_R(MS_U8 u8Mask, MS_U8 u8Miu)
1808*53ee8cc1Swenshuai.xi {
1809*53ee8cc1Swenshuai.xi     _FUNC_NOT_USED();
1810*53ee8cc1Swenshuai.xi }
1811*53ee8cc1Swenshuai.xi 
1812*53ee8cc1Swenshuai.xi 
1813*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1814*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MIU_Mask_Req_DNRB_W()
1815*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: Set OPM MIU mask
1816*53ee8cc1Swenshuai.xi /// @param u8Mask IN        \b  : miu mask
1817*53ee8cc1Swenshuai.xi /// @param u8Miu  IN        \b  : miu0 or miu1
1818*53ee8cc1Swenshuai.xi /// @param None   OUT       \b  :
1819*53ee8cc1Swenshuai.xi /// @param None   RET       \b  :
1820*53ee8cc1Swenshuai.xi /// @param None   GLOBAL    \b  :
1821*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MIU_Mask_Req_DNRB_W(MS_U8 u8Mask,MS_U8 u8Miu)1822*53ee8cc1Swenshuai.xi void HAL_MIU_Mask_Req_DNRB_W(MS_U8 u8Mask, MS_U8 u8Miu)
1823*53ee8cc1Swenshuai.xi {
1824*53ee8cc1Swenshuai.xi     _FUNC_NOT_USED();
1825*53ee8cc1Swenshuai.xi }
1826*53ee8cc1Swenshuai.xi 
1827*53ee8cc1Swenshuai.xi 
1828*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1829*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MIU_Mask_Req_DNRB_RW()
1830*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: Set OPM MIU mask
1831*53ee8cc1Swenshuai.xi /// @param u8Mask IN        \b  : miu mask
1832*53ee8cc1Swenshuai.xi /// @param u8Miu  IN        \b  : miu0 or miu1
1833*53ee8cc1Swenshuai.xi /// @param None   OUT       \b  :
1834*53ee8cc1Swenshuai.xi /// @param None   RET       \b  :
1835*53ee8cc1Swenshuai.xi /// @param None   GLOBAL    \b  :
1836*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MIU_Mask_Req_DNRB_RW(MS_U8 u8Mask,MS_U8 u8Miu)1837*53ee8cc1Swenshuai.xi void HAL_MIU_Mask_Req_DNRB_RW(MS_U8 u8Mask, MS_U8 u8Miu)
1838*53ee8cc1Swenshuai.xi {
1839*53ee8cc1Swenshuai.xi     _FUNC_NOT_USED();
1840*53ee8cc1Swenshuai.xi }
1841*53ee8cc1Swenshuai.xi 
1842*53ee8cc1Swenshuai.xi 
1843*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1844*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MIU_Mask_Req_SC_RW()
1845*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: Set OPM MIU mask
1846*53ee8cc1Swenshuai.xi /// @param u8Mask IN        \b  : miu mask
1847*53ee8cc1Swenshuai.xi /// @param u8Miu  IN        \b  : miu0 or miu1
1848*53ee8cc1Swenshuai.xi /// @param None   OUT       \b  :
1849*53ee8cc1Swenshuai.xi /// @param None   RET       \b  :
1850*53ee8cc1Swenshuai.xi /// @param None   GLOBAL    \b  :
1851*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MIU_Mask_Req_SC_RW(MS_U8 u8Mask,MS_U8 u8Miu)1852*53ee8cc1Swenshuai.xi void HAL_MIU_Mask_Req_SC_RW(MS_U8 u8Mask, MS_U8 u8Miu)
1853*53ee8cc1Swenshuai.xi {
1854*53ee8cc1Swenshuai.xi     _FUNC_NOT_USED();
1855*53ee8cc1Swenshuai.xi }
1856*53ee8cc1Swenshuai.xi 
1857*53ee8cc1Swenshuai.xi 
1858*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1859*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MIU_Mask_Req_MVOP_R()
1860*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: Set OPM MIU mask
1861*53ee8cc1Swenshuai.xi /// @param u8Mask IN        \b  : miu mask
1862*53ee8cc1Swenshuai.xi /// @param u8Miu  IN        \b  : miu0 or miu1
1863*53ee8cc1Swenshuai.xi /// @param None   OUT       \b  :
1864*53ee8cc1Swenshuai.xi /// @param None   RET       \b  :
1865*53ee8cc1Swenshuai.xi /// @param None   GLOBAL    \b  :
1866*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MIU_Mask_Req_MVOP_R(MS_U8 u8Mask,MS_U8 u8Miu)1867*53ee8cc1Swenshuai.xi void HAL_MIU_Mask_Req_MVOP_R(MS_U8 u8Mask, MS_U8 u8Miu)
1868*53ee8cc1Swenshuai.xi {
1869*53ee8cc1Swenshuai.xi     _FUNC_NOT_USED();
1870*53ee8cc1Swenshuai.xi }
1871*53ee8cc1Swenshuai.xi 
1872*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1873*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MIU_Mask_Req_MVD_R()
1874*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: Set OPM MIU mask
1875*53ee8cc1Swenshuai.xi /// @param u8Mask IN        \b  : miu mask
1876*53ee8cc1Swenshuai.xi /// @param u8Miu  IN        \b  : miu0 or miu1
1877*53ee8cc1Swenshuai.xi /// @param None   OUT       \b  :
1878*53ee8cc1Swenshuai.xi /// @param None   RET       \b  :
1879*53ee8cc1Swenshuai.xi /// @param None   GLOBAL    \b  :
1880*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MIU_Mask_Req_MVD_R(MS_U8 u8Mask,MS_U8 u8Miu)1881*53ee8cc1Swenshuai.xi void HAL_MIU_Mask_Req_MVD_R(MS_U8 u8Mask, MS_U8 u8Miu)
1882*53ee8cc1Swenshuai.xi {
1883*53ee8cc1Swenshuai.xi     _FUNC_NOT_USED();
1884*53ee8cc1Swenshuai.xi }
1885*53ee8cc1Swenshuai.xi 
1886*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1887*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MIU_Mask_Req_MVD_W()
1888*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: Set OPM MIU mask
1889*53ee8cc1Swenshuai.xi /// @param u8Mask IN        \b  : miu mask
1890*53ee8cc1Swenshuai.xi /// @param u8Miu  IN        \b  : miu0 or miu1
1891*53ee8cc1Swenshuai.xi /// @param None   OUT       \b  :
1892*53ee8cc1Swenshuai.xi /// @param None   RET       \b  :
1893*53ee8cc1Swenshuai.xi /// @param None   GLOBAL    \b  :
1894*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MIU_Mask_Req_MVD_W(MS_U8 u8Mask,MS_U8 u8Miu)1895*53ee8cc1Swenshuai.xi void HAL_MIU_Mask_Req_MVD_W(MS_U8 u8Mask, MS_U8 u8Miu)
1896*53ee8cc1Swenshuai.xi {
1897*53ee8cc1Swenshuai.xi     _FUNC_NOT_USED();
1898*53ee8cc1Swenshuai.xi }
1899*53ee8cc1Swenshuai.xi 
1900*53ee8cc1Swenshuai.xi 
1901*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1902*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MIU_Mask_Req_MVD_RW()
1903*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: Set OPM MIU mask
1904*53ee8cc1Swenshuai.xi /// @param u8Mask IN        \b  : miu mask
1905*53ee8cc1Swenshuai.xi /// @param u8Miu  IN        \b  : miu0 or miu1
1906*53ee8cc1Swenshuai.xi /// @param None   OUT       \b  :
1907*53ee8cc1Swenshuai.xi /// @param None   RET       \b  :
1908*53ee8cc1Swenshuai.xi /// @param None   GLOBAL    \b  :
1909*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MIU_Mask_Req_MVD_RW(MS_U8 u8Mask,MS_U8 u8Miu)1910*53ee8cc1Swenshuai.xi void HAL_MIU_Mask_Req_MVD_RW(MS_U8 u8Mask, MS_U8 u8Miu)
1911*53ee8cc1Swenshuai.xi {
1912*53ee8cc1Swenshuai.xi     _FUNC_NOT_USED();
1913*53ee8cc1Swenshuai.xi }
1914*53ee8cc1Swenshuai.xi 
1915*53ee8cc1Swenshuai.xi 
1916*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1917*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MIU_Mask_Req_AUDIO_RW()
1918*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description: Set OPM MIU mask
1919*53ee8cc1Swenshuai.xi /// @param u8Mask IN        \b  : miu mask
1920*53ee8cc1Swenshuai.xi /// @param u8Miu  IN        \b  : miu0 or miu1
1921*53ee8cc1Swenshuai.xi /// @param None   OUT       \b  :
1922*53ee8cc1Swenshuai.xi /// @param None   RET       \b  :
1923*53ee8cc1Swenshuai.xi /// @param None   GLOBAL    \b  :
1924*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MIU_Mask_Req_AUDIO_RW(MS_U8 u8Mask,MS_U8 u8Miu)1925*53ee8cc1Swenshuai.xi void HAL_MIU_Mask_Req_AUDIO_RW(MS_U8 u8Mask, MS_U8 u8Miu)
1926*53ee8cc1Swenshuai.xi {
1927*53ee8cc1Swenshuai.xi     _FUNC_NOT_USED();
1928*53ee8cc1Swenshuai.xi }
1929*53ee8cc1Swenshuai.xi 
1930*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1931*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MIU_GET_MUX()
1932*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description:
1933*53ee8cc1Swenshuai.xi /// @param None IN        \b  :
1934*53ee8cc1Swenshuai.xi /// @param None IN        \b  :
1935*53ee8cc1Swenshuai.xi /// @param None OUT       \b  :
1936*53ee8cc1Swenshuai.xi /// @param None RET       \b  :
1937*53ee8cc1Swenshuai.xi /// @param None GLOBAL    \b  :
1938*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MIU_GET_MUX(void)1939*53ee8cc1Swenshuai.xi MS_U16 HAL_MIU_GET_MUX(void)
1940*53ee8cc1Swenshuai.xi {
1941*53ee8cc1Swenshuai.xi     return 0x0000;
1942*53ee8cc1Swenshuai.xi }
1943*53ee8cc1Swenshuai.xi 
1944*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1945*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MIU_SwitchMIU()
1946*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description:
1947*53ee8cc1Swenshuai.xi /// @param u8MiuID        \b IN     : select MIU0 or MIU1
1948*53ee8cc1Swenshuai.xi /// @param None \b RET:
1949*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MIU_VOP_SwitchMIU(MS_U8 u8MiuID)1950*53ee8cc1Swenshuai.xi void HAL_MIU_VOP_SwitchMIU(MS_U8 u8MiuID)
1951*53ee8cc1Swenshuai.xi {
1952*53ee8cc1Swenshuai.xi     _FUNC_NOT_USED();
1953*53ee8cc1Swenshuai.xi }
1954*53ee8cc1Swenshuai.xi 
1955*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1956*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MIU_IsI64Mode()
1957*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description:
1958*53ee8cc1Swenshuai.xi /// @param None \b RET: 0: not support, 64 or 128 bits
1959*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MIU_IsI64Mode(void)1960*53ee8cc1Swenshuai.xi MS_U16 HAL_MIU_IsI64Mode(void)
1961*53ee8cc1Swenshuai.xi {
1962*53ee8cc1Swenshuai.xi     _FUNC_NOT_USED();
1963*53ee8cc1Swenshuai.xi     return 0x0000;
1964*53ee8cc1Swenshuai.xi }
1965*53ee8cc1Swenshuai.xi 
1966*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1967*53ee8cc1Swenshuai.xi /// @brief \b Function \b Name: HAL_MIU_IsInitMiu1()
1968*53ee8cc1Swenshuai.xi /// @brief \b Function \b Description:
1969*53ee8cc1Swenshuai.xi /// @param None \b RET:
1970*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MIU_IsInitMiu1(void)1971*53ee8cc1Swenshuai.xi MS_BOOL HAL_MIU_IsInitMiu1(void)
1972*53ee8cc1Swenshuai.xi {
1973*53ee8cc1Swenshuai.xi     return TRUE;
1974*53ee8cc1Swenshuai.xi }
1975*53ee8cc1Swenshuai.xi 
1976*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1977*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_MIU_SetGroupPriority()
1978*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description:  This function for set each group priority
1979*53ee8cc1Swenshuai.xi /// @param u8MiuDev     \b IN   : select MIU0 or MIU1
1980*53ee8cc1Swenshuai.xi /// @param sPriority    \b IN   : gropu priority
1981*53ee8cc1Swenshuai.xi /// @param None \b RET:   0: Fail 1: Ok
1982*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MIU_SetGroupPriority(MS_U8 u8MiuDev,MIU_GroupPriority sPriority)1983*53ee8cc1Swenshuai.xi MS_BOOL HAL_MIU_SetGroupPriority(MS_U8 u8MiuDev, MIU_GroupPriority sPriority)
1984*53ee8cc1Swenshuai.xi {
1985*53ee8cc1Swenshuai.xi     MS_U8 u8Val = 0;
1986*53ee8cc1Swenshuai.xi     MS_U32 u32RegAddr = REG_MIU_GROUP_PRIORITY;
1987*53ee8cc1Swenshuai.xi 
1988*53ee8cc1Swenshuai.xi     u8Val = (sPriority.u84th << 6 | sPriority.u83rd << 4 | sPriority.u82nd << 2 | sPriority.u81st);
1989*53ee8cc1Swenshuai.xi     printf("Change miu%u group priority:%x\n", u8MiuDev, u8Val);
1990*53ee8cc1Swenshuai.xi 
1991*53ee8cc1Swenshuai.xi     if(u8MiuDev == E_MIU_0)
1992*53ee8cc1Swenshuai.xi     {
1993*53ee8cc1Swenshuai.xi         u32RegAddr += MIU_REG_BASE;
1994*53ee8cc1Swenshuai.xi     }
1995*53ee8cc1Swenshuai.xi     else if(u8MiuDev == E_MIU_1)
1996*53ee8cc1Swenshuai.xi     {
1997*53ee8cc1Swenshuai.xi         u32RegAddr += MIU1_REG_BASE;
1998*53ee8cc1Swenshuai.xi     }
1999*53ee8cc1Swenshuai.xi     else if(u8MiuDev == E_MIU_2)
2000*53ee8cc1Swenshuai.xi     {
2001*53ee8cc1Swenshuai.xi         u32RegAddr += MIU2_REG_BASE;
2002*53ee8cc1Swenshuai.xi     }
2003*53ee8cc1Swenshuai.xi     else
2004*53ee8cc1Swenshuai.xi     {
2005*53ee8cc1Swenshuai.xi         printf("%s not support MIU%u!\n", __FUNCTION__, u8MiuDev );
2006*53ee8cc1Swenshuai.xi     }
2007*53ee8cc1Swenshuai.xi 
2008*53ee8cc1Swenshuai.xi     HAL_MIU_Write2BytesBit(u32RegAddr,DISABLE, BIT8);
2009*53ee8cc1Swenshuai.xi     HAL_MIU_WriteByte(u32RegAddr, u8Val);
2010*53ee8cc1Swenshuai.xi     HAL_MIU_Write2BytesBit(u32RegAddr,ENABLE, BIT8);
2011*53ee8cc1Swenshuai.xi     return TRUE;
2012*53ee8cc1Swenshuai.xi }
2013*53ee8cc1Swenshuai.xi 
2014*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
2015*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_MIU_SetGroupPriority()
2016*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description:  This function for set each group priority
2017*53ee8cc1Swenshuai.xi /// @param u8MiuDev     \b IN   : select MIU0 or MIU1
2018*53ee8cc1Swenshuai.xi /// @param eClientID    \b IN   : client ID
2019*53ee8cc1Swenshuai.xi /// @param bMask        \b IN   : TRUE: Mask high priority FALSE: Unmask hih priority
2020*53ee8cc1Swenshuai.xi /// @param None \b RET:   0: Fail 1: Ok
2021*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MIU_SetHPriorityMask(MS_U8 u8MiuDev,eMIUClientID eClientID,MS_BOOL bMask)2022*53ee8cc1Swenshuai.xi MS_BOOL HAL_MIU_SetHPriorityMask(MS_U8 u8MiuDev, eMIUClientID eClientID, MS_BOOL bMask)
2023*53ee8cc1Swenshuai.xi {
2024*53ee8cc1Swenshuai.xi     MS_S16 sVal;
2025*53ee8cc1Swenshuai.xi 
2026*53ee8cc1Swenshuai.xi     sVal = HAL_MIU_GetClientInfo(u8MiuDev, eClientID);
2027*53ee8cc1Swenshuai.xi     if (sVal < 0)
2028*53ee8cc1Swenshuai.xi     {
2029*53ee8cc1Swenshuai.xi         printf("%s not support client ID:%u!\n", __FUNCTION__, eClientID);
2030*53ee8cc1Swenshuai.xi         return FALSE;
2031*53ee8cc1Swenshuai.xi     }
2032*53ee8cc1Swenshuai.xi     else
2033*53ee8cc1Swenshuai.xi     {
2034*53ee8cc1Swenshuai.xi         MS_U32 u32Reg = REG_MIU_RQX_HPMASK(MIU_GET_CLIENT_GROUP(sVal));
2035*53ee8cc1Swenshuai.xi 
2036*53ee8cc1Swenshuai.xi         if(u8MiuDev == E_MIU_0)
2037*53ee8cc1Swenshuai.xi         {
2038*53ee8cc1Swenshuai.xi             u32Reg += MIU_REG_BASE;
2039*53ee8cc1Swenshuai.xi         }
2040*53ee8cc1Swenshuai.xi         else if(u8MiuDev == E_MIU_1)
2041*53ee8cc1Swenshuai.xi         {
2042*53ee8cc1Swenshuai.xi             u32Reg += MIU1_REG_BASE;
2043*53ee8cc1Swenshuai.xi         }
2044*53ee8cc1Swenshuai.xi         else if(u8MiuDev == E_MIU_2)
2045*53ee8cc1Swenshuai.xi         {
2046*53ee8cc1Swenshuai.xi             u32Reg += MIU2_REG_BASE;
2047*53ee8cc1Swenshuai.xi         }
2048*53ee8cc1Swenshuai.xi         else
2049*53ee8cc1Swenshuai.xi         {
2050*53ee8cc1Swenshuai.xi             printf("%s not support MIU%u!\n", __FUNCTION__, u8MiuDev );
2051*53ee8cc1Swenshuai.xi             return FALSE;
2052*53ee8cc1Swenshuai.xi         }
2053*53ee8cc1Swenshuai.xi 
2054*53ee8cc1Swenshuai.xi         HAL_MIU_Write2BytesBit(u32Reg, bMask, BIT(MIU_GET_CLIENT_POS(sVal)));
2055*53ee8cc1Swenshuai.xi     }
2056*53ee8cc1Swenshuai.xi     return TRUE;
2057*53ee8cc1Swenshuai.xi }
2058*53ee8cc1Swenshuai.xi 
HAL_MIU_GetAutoPhaseResult(MS_U32 * miu0,MS_U32 * miu1)2059*53ee8cc1Swenshuai.xi MS_BOOL HAL_MIU_GetAutoPhaseResult(MS_U32 *miu0, MS_U32 *miu1)
2060*53ee8cc1Swenshuai.xi {
2061*53ee8cc1Swenshuai.xi     static MS_U32 u32Miu0 = 0, u32Miu1 = 0;
2062*53ee8cc1Swenshuai.xi 
2063*53ee8cc1Swenshuai.xi     *miu0 = u32Miu0;
2064*53ee8cc1Swenshuai.xi     *miu1 = u32Miu1;
2065*53ee8cc1Swenshuai.xi 
2066*53ee8cc1Swenshuai.xi     return FALSE;
2067*53ee8cc1Swenshuai.xi }
2068*53ee8cc1Swenshuai.xi 
HAL_MIU_EnableScramble(MS_BOOL bEnable)2069*53ee8cc1Swenshuai.xi MS_BOOL HAL_MIU_EnableScramble(MS_BOOL bEnable)
2070*53ee8cc1Swenshuai.xi {
2071*53ee8cc1Swenshuai.xi     return FALSE; // not implemented yet
2072*53ee8cc1Swenshuai.xi }
2073*53ee8cc1Swenshuai.xi 
HAL_MIU_IsScrambleEnabled(void)2074*53ee8cc1Swenshuai.xi MS_BOOL HAL_MIU_IsScrambleEnabled(void)
2075*53ee8cc1Swenshuai.xi {
2076*53ee8cc1Swenshuai.xi     return FALSE; // not implemented yet
2077*53ee8cc1Swenshuai.xi }
2078*53ee8cc1Swenshuai.xi 
2079*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
2080*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_MIU_SetLoadingRequest
2081*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description: Set loading request
2082*53ee8cc1Swenshuai.xi /// @param u8MiuDev     \b IN   : select MIU0 or MIU1
2083*53ee8cc1Swenshuai.xi /// @return             \b 0: Fail 1: OK
2084*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MIU_SetLoadingRequest(MS_U8 u8MiuDev)2085*53ee8cc1Swenshuai.xi MS_BOOL HAL_MIU_SetLoadingRequest(MS_U8 u8MiuDev)
2086*53ee8cc1Swenshuai.xi {
2087*53ee8cc1Swenshuai.xi     MS_U32 u32RegAddr;
2088*53ee8cc1Swenshuai.xi 
2089*53ee8cc1Swenshuai.xi     if (u8MiuDev == 1)
2090*53ee8cc1Swenshuai.xi     {
2091*53ee8cc1Swenshuai.xi         u32RegAddr = MIU1_BW_REQUEST;
2092*53ee8cc1Swenshuai.xi     }
2093*53ee8cc1Swenshuai.xi     else
2094*53ee8cc1Swenshuai.xi     {
2095*53ee8cc1Swenshuai.xi         u32RegAddr = MIU_BW_REQUEST;
2096*53ee8cc1Swenshuai.xi     }
2097*53ee8cc1Swenshuai.xi 
2098*53ee8cc1Swenshuai.xi     HAL_MIU_Write2Byte(u32RegAddr, 0x0050);
2099*53ee8cc1Swenshuai.xi     HAL_MIU_Write2Byte(u32RegAddr, 0x0051);
2100*53ee8cc1Swenshuai.xi 
2101*53ee8cc1Swenshuai.xi     return TRUE;
2102*53ee8cc1Swenshuai.xi }
2103*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
2104*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_MIU_GetLoadingRequest
2105*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description: Get loading request
2106*53ee8cc1Swenshuai.xi /// @param u8MiuDev     \b IN   : select MIU0 or MIU1
2107*53ee8cc1Swenshuai.xi /// @param *u32Loading  \b IN   : percentage of MIU loading
2108*53ee8cc1Swenshuai.xi /// @return             \b 0: Fail 1: OK
2109*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MIU_GetLoadingRequest(MS_U8 u8MiuDev,MS_U32 * u32Loading)2110*53ee8cc1Swenshuai.xi MS_BOOL HAL_MIU_GetLoadingRequest(MS_U8 u8MiuDev, MS_U32 *u32Loading)
2111*53ee8cc1Swenshuai.xi {
2112*53ee8cc1Swenshuai.xi     return FALSE;
2113*53ee8cc1Swenshuai.xi }
2114*53ee8cc1Swenshuai.xi 
2115*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
2116*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_MIU_ParseOccupiedResource
2117*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description: Parse occupied resource to software structure
2118*53ee8cc1Swenshuai.xi /// @return             \b 0: Fail 1: OK
2119*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MIU_ParseOccupiedResource(void)2120*53ee8cc1Swenshuai.xi MS_BOOL HAL_MIU_ParseOccupiedResource(void)
2121*53ee8cc1Swenshuai.xi {
2122*53ee8cc1Swenshuai.xi     MS_U8  u8MiuSel;
2123*53ee8cc1Swenshuai.xi     MS_U8  u8Blockx;
2124*53ee8cc1Swenshuai.xi     MS_U8  u8ClientID;
2125*53ee8cc1Swenshuai.xi     MS_U16 u16idenable;
2126*53ee8cc1Swenshuai.xi     MS_U32 u32index;
2127*53ee8cc1Swenshuai.xi     MS_U32 u32RegAddr;
2128*53ee8cc1Swenshuai.xi     MS_U32 u32RegAddrIDenable;
2129*53ee8cc1Swenshuai.xi 
2130*53ee8cc1Swenshuai.xi     for(u8MiuSel = E_MIU_0; u8MiuSel < MIU_MAX_DEVICE; u8MiuSel++)
2131*53ee8cc1Swenshuai.xi     {
2132*53ee8cc1Swenshuai.xi         for(u8Blockx = E_MIU_BLOCK_0; u8Blockx < E_MIU_BLOCK_NUM; u8Blockx++)
2133*53ee8cc1Swenshuai.xi         {
2134*53ee8cc1Swenshuai.xi             if(u8MiuSel == E_MIU_0)
2135*53ee8cc1Swenshuai.xi             {
2136*53ee8cc1Swenshuai.xi                 u32RegAddr = MIU_PROTECT0_ID0;
2137*53ee8cc1Swenshuai.xi 
2138*53ee8cc1Swenshuai.xi                 switch (u8Blockx)
2139*53ee8cc1Swenshuai.xi                 {
2140*53ee8cc1Swenshuai.xi                     case E_MIU_BLOCK_0:
2141*53ee8cc1Swenshuai.xi                         u32RegAddrIDenable = MIU_PROTECT0_ID_ENABLE;
2142*53ee8cc1Swenshuai.xi                         break;
2143*53ee8cc1Swenshuai.xi                     case E_MIU_BLOCK_1:
2144*53ee8cc1Swenshuai.xi                         u32RegAddrIDenable = MIU_PROTECT1_ID_ENABLE;
2145*53ee8cc1Swenshuai.xi                         break;
2146*53ee8cc1Swenshuai.xi                     case E_MIU_BLOCK_2:
2147*53ee8cc1Swenshuai.xi                         u32RegAddrIDenable = MIU_PROTECT2_ID_ENABLE;
2148*53ee8cc1Swenshuai.xi                         break;
2149*53ee8cc1Swenshuai.xi                     case E_MIU_BLOCK_3:
2150*53ee8cc1Swenshuai.xi                         u32RegAddrIDenable = MIU_PROTECT3_ID_ENABLE;
2151*53ee8cc1Swenshuai.xi                         break;
2152*53ee8cc1Swenshuai.xi                     default:
2153*53ee8cc1Swenshuai.xi                         return false;
2154*53ee8cc1Swenshuai.xi                 }
2155*53ee8cc1Swenshuai.xi             }
2156*53ee8cc1Swenshuai.xi             else if(u8MiuSel == E_MIU_1)
2157*53ee8cc1Swenshuai.xi             {
2158*53ee8cc1Swenshuai.xi                 u32RegAddr = MIU1_PROTECT0_ID0;
2159*53ee8cc1Swenshuai.xi 
2160*53ee8cc1Swenshuai.xi                 switch (u8Blockx)
2161*53ee8cc1Swenshuai.xi                 {
2162*53ee8cc1Swenshuai.xi                 case E_MIU_BLOCK_0:
2163*53ee8cc1Swenshuai.xi                      u32RegAddrIDenable = MIU1_PROTECT0_ID_ENABLE;
2164*53ee8cc1Swenshuai.xi                      break;
2165*53ee8cc1Swenshuai.xi                  case E_MIU_BLOCK_1:
2166*53ee8cc1Swenshuai.xi                      u32RegAddrIDenable = MIU1_PROTECT1_ID_ENABLE;
2167*53ee8cc1Swenshuai.xi                      break;
2168*53ee8cc1Swenshuai.xi                  case E_MIU_BLOCK_2:
2169*53ee8cc1Swenshuai.xi                      u32RegAddrIDenable = MIU1_PROTECT2_ID_ENABLE;
2170*53ee8cc1Swenshuai.xi                      break;
2171*53ee8cc1Swenshuai.xi                  case E_MIU_BLOCK_3:
2172*53ee8cc1Swenshuai.xi                      u32RegAddrIDenable = MIU1_PROTECT3_ID_ENABLE;
2173*53ee8cc1Swenshuai.xi                      break;
2174*53ee8cc1Swenshuai.xi                  default:
2175*53ee8cc1Swenshuai.xi                      return false;
2176*53ee8cc1Swenshuai.xi                 }
2177*53ee8cc1Swenshuai.xi             }
2178*53ee8cc1Swenshuai.xi             else if(u8MiuSel == E_MIU_2)
2179*53ee8cc1Swenshuai.xi             {
2180*53ee8cc1Swenshuai.xi                 u32RegAddr = MIU2_PROTECT0_ID0;
2181*53ee8cc1Swenshuai.xi 
2182*53ee8cc1Swenshuai.xi                 switch (u8Blockx)
2183*53ee8cc1Swenshuai.xi                 {
2184*53ee8cc1Swenshuai.xi                 case E_MIU_BLOCK_0:
2185*53ee8cc1Swenshuai.xi                      u32RegAddrIDenable = MIU2_PROTECT0_ID_ENABLE;
2186*53ee8cc1Swenshuai.xi                      break;
2187*53ee8cc1Swenshuai.xi                  case E_MIU_BLOCK_1:
2188*53ee8cc1Swenshuai.xi                      u32RegAddrIDenable = MIU2_PROTECT1_ID_ENABLE;
2189*53ee8cc1Swenshuai.xi                      break;
2190*53ee8cc1Swenshuai.xi                  case E_MIU_BLOCK_2:
2191*53ee8cc1Swenshuai.xi                      u32RegAddrIDenable = MIU2_PROTECT2_ID_ENABLE;
2192*53ee8cc1Swenshuai.xi                      break;
2193*53ee8cc1Swenshuai.xi                  case E_MIU_BLOCK_3:
2194*53ee8cc1Swenshuai.xi                      u32RegAddrIDenable = MIU2_PROTECT3_ID_ENABLE;
2195*53ee8cc1Swenshuai.xi                      break;
2196*53ee8cc1Swenshuai.xi                  default:
2197*53ee8cc1Swenshuai.xi                      return false;
2198*53ee8cc1Swenshuai.xi                 }
2199*53ee8cc1Swenshuai.xi             }
2200*53ee8cc1Swenshuai.xi             else
2201*53ee8cc1Swenshuai.xi             {
2202*53ee8cc1Swenshuai.xi                 printf("%s not support MIU%u!\n", __FUNCTION__, u8MiuSel );
2203*53ee8cc1Swenshuai.xi                 return FALSE;
2204*53ee8cc1Swenshuai.xi             }
2205*53ee8cc1Swenshuai.xi 
2206*53ee8cc1Swenshuai.xi             u16idenable = HAL_MIU_Read2Byte(u32RegAddrIDenable);
2207*53ee8cc1Swenshuai.xi             for(u32index = 0; u32index < MIU_MAX_PROTECT_ID; u32index++)
2208*53ee8cc1Swenshuai.xi             {
2209*53ee8cc1Swenshuai.xi                 IDEnables[u8MiuSel][u8Blockx][u32index] = ((u16idenable >> u32index) & 0x1)? 1: 0;
2210*53ee8cc1Swenshuai.xi             }
2211*53ee8cc1Swenshuai.xi         }//for(u8Blockx = E_MIU_BLOCK_0; u8Blockx < E_MIU_BLOCK_NUM; u8Blockx++)
2212*53ee8cc1Swenshuai.xi 
2213*53ee8cc1Swenshuai.xi         for(u32index = 0; u32index < MIU_MAX_PROTECT_ID; u32index++)
2214*53ee8cc1Swenshuai.xi         {
2215*53ee8cc1Swenshuai.xi             u8ClientID = HAL_MIU_ReadByte(u32RegAddr + u32index);
2216*53ee8cc1Swenshuai.xi             IDs[u8MiuSel][u32index] = clientTbl[u8MiuSel][u8ClientID];
2217*53ee8cc1Swenshuai.xi         }
2218*53ee8cc1Swenshuai.xi     }//for(u8MiuSel = E_MIU_0; u8MiuSel < E_MIU_NUM; u8MiuSel++)
2219*53ee8cc1Swenshuai.xi 
2220*53ee8cc1Swenshuai.xi     return TRUE;
2221*53ee8cc1Swenshuai.xi }
2222*53ee8cc1Swenshuai.xi 
2223*53ee8cc1Swenshuai.xi 
HAL_MIU_PrintMIUProtectArea(MS_U8 u8Blockx,MS_U8 miu_dev)2224*53ee8cc1Swenshuai.xi void HAL_MIU_PrintMIUProtectArea(MS_U8 u8Blockx,MS_U8 miu_dev)
2225*53ee8cc1Swenshuai.xi {
2226*53ee8cc1Swenshuai.xi 
2227*53ee8cc1Swenshuai.xi     MS_U16 val_16,val1_16,val2_16;
2228*53ee8cc1Swenshuai.xi     MS_U32 val_32;
2229*53ee8cc1Swenshuai.xi     MS_U32 u32RegAddrMSB;
2230*53ee8cc1Swenshuai.xi     MS_U32 u32RegAddrStar;
2231*53ee8cc1Swenshuai.xi 
2232*53ee8cc1Swenshuai.xi 
2233*53ee8cc1Swenshuai.xi     if( miu_dev == E_MIU_0 )
2234*53ee8cc1Swenshuai.xi     {
2235*53ee8cc1Swenshuai.xi         u32RegAddrMSB =  MIU_PROTECT0_MSB;
2236*53ee8cc1Swenshuai.xi         switch (u8Blockx)
2237*53ee8cc1Swenshuai.xi         {
2238*53ee8cc1Swenshuai.xi             case 0:
2239*53ee8cc1Swenshuai.xi                 u32RegAddrStar = MIU_PROTECT0_START;
2240*53ee8cc1Swenshuai.xi                 val1_16 = HAL_MIU_Read2Byte(u32RegAddrMSB);
2241*53ee8cc1Swenshuai.xi                 val1_16 = ( val1_16 & 0x1 );
2242*53ee8cc1Swenshuai.xi                 val2_16 = ( val1_16 & 0xC );
2243*53ee8cc1Swenshuai.xi                 break;
2244*53ee8cc1Swenshuai.xi 
2245*53ee8cc1Swenshuai.xi             case 1:
2246*53ee8cc1Swenshuai.xi                 u32RegAddrStar = MIU_PROTECT1_START;
2247*53ee8cc1Swenshuai.xi                 val1_16 = HAL_MIU_Read2Byte(u32RegAddrMSB);
2248*53ee8cc1Swenshuai.xi                 val1_16 = ( val1_16 & 0x10 );
2249*53ee8cc1Swenshuai.xi                 val2_16 = ( val1_16 & 0xC0 );
2250*53ee8cc1Swenshuai.xi                 break;
2251*53ee8cc1Swenshuai.xi 
2252*53ee8cc1Swenshuai.xi             case 2:
2253*53ee8cc1Swenshuai.xi                 u32RegAddrStar = MIU_PROTECT2_START;
2254*53ee8cc1Swenshuai.xi                 val1_16 = HAL_MIU_Read2Byte(u32RegAddrMSB);
2255*53ee8cc1Swenshuai.xi                 val1_16 = ( val1_16 & 0x100 );
2256*53ee8cc1Swenshuai.xi                 val2_16 = ( val1_16 & 0xC00 );
2257*53ee8cc1Swenshuai.xi                 break;
2258*53ee8cc1Swenshuai.xi 
2259*53ee8cc1Swenshuai.xi             case 3:
2260*53ee8cc1Swenshuai.xi                 u32RegAddrStar = MIU_PROTECT3_START;
2261*53ee8cc1Swenshuai.xi                 val1_16 = HAL_MIU_Read2Byte(u32RegAddrMSB);
2262*53ee8cc1Swenshuai.xi                 val1_16 = ( val1_16 & 0x1000 );
2263*53ee8cc1Swenshuai.xi                 val2_16 = ( val1_16 & 0xC000 );
2264*53ee8cc1Swenshuai.xi                 break;
2265*53ee8cc1Swenshuai.xi 
2266*53ee8cc1Swenshuai.xi             default:
2267*53ee8cc1Swenshuai.xi                 printf("error miu protect block number\n");
2268*53ee8cc1Swenshuai.xi                 return ;
2269*53ee8cc1Swenshuai.xi         }
2270*53ee8cc1Swenshuai.xi     }
2271*53ee8cc1Swenshuai.xi     else if( miu_dev == E_MIU_1 )
2272*53ee8cc1Swenshuai.xi     {
2273*53ee8cc1Swenshuai.xi         u32RegAddrMSB =  MIU1_PROTECT0_MSB;
2274*53ee8cc1Swenshuai.xi         switch (u8Blockx)
2275*53ee8cc1Swenshuai.xi         {
2276*53ee8cc1Swenshuai.xi             case 0:
2277*53ee8cc1Swenshuai.xi                 u32RegAddrStar = MIU1_PROTECT0_START;
2278*53ee8cc1Swenshuai.xi                 val1_16 = HAL_MIU_Read2Byte(u32RegAddrMSB);
2279*53ee8cc1Swenshuai.xi                 val1_16 = ( val1_16 & 0x1 );
2280*53ee8cc1Swenshuai.xi                 val2_16 = ( val1_16 & 0xC );
2281*53ee8cc1Swenshuai.xi                 break;
2282*53ee8cc1Swenshuai.xi 
2283*53ee8cc1Swenshuai.xi             case 1:
2284*53ee8cc1Swenshuai.xi                 u32RegAddrStar = MIU1_PROTECT1_START;
2285*53ee8cc1Swenshuai.xi                 val1_16 = HAL_MIU_Read2Byte(u32RegAddrMSB);
2286*53ee8cc1Swenshuai.xi                 val1_16 = ( val1_16 & 0x10 );
2287*53ee8cc1Swenshuai.xi                 val2_16 = ( val1_16 & 0xC0 );
2288*53ee8cc1Swenshuai.xi                 break;
2289*53ee8cc1Swenshuai.xi 
2290*53ee8cc1Swenshuai.xi             case 2:
2291*53ee8cc1Swenshuai.xi                 u32RegAddrStar = MIU1_PROTECT2_START;
2292*53ee8cc1Swenshuai.xi                 val1_16 = HAL_MIU_Read2Byte(u32RegAddrMSB);
2293*53ee8cc1Swenshuai.xi                 val1_16 = ( val1_16 & 0x100 );
2294*53ee8cc1Swenshuai.xi                 val2_16 = ( val1_16 & 0xC00 );
2295*53ee8cc1Swenshuai.xi                 break;
2296*53ee8cc1Swenshuai.xi 
2297*53ee8cc1Swenshuai.xi             case 3:
2298*53ee8cc1Swenshuai.xi                 u32RegAddrStar = MIU1_PROTECT3_START;
2299*53ee8cc1Swenshuai.xi                 val1_16 = HAL_MIU_Read2Byte(u32RegAddrMSB);
2300*53ee8cc1Swenshuai.xi                 val1_16 = ( val1_16 & 0x1000 );
2301*53ee8cc1Swenshuai.xi                 val2_16 = ( val1_16 & 0xC000 );
2302*53ee8cc1Swenshuai.xi                 break;
2303*53ee8cc1Swenshuai.xi 
2304*53ee8cc1Swenshuai.xi             default:
2305*53ee8cc1Swenshuai.xi                 printf("error miu protect block number\n");
2306*53ee8cc1Swenshuai.xi                 return ;
2307*53ee8cc1Swenshuai.xi         }
2308*53ee8cc1Swenshuai.xi 
2309*53ee8cc1Swenshuai.xi     }
2310*53ee8cc1Swenshuai.xi     else if( miu_dev == E_MIU_2 )
2311*53ee8cc1Swenshuai.xi     {
2312*53ee8cc1Swenshuai.xi         u32RegAddrMSB =  MIU2_PROTECT0_MSB;
2313*53ee8cc1Swenshuai.xi         switch (u8Blockx)
2314*53ee8cc1Swenshuai.xi         {
2315*53ee8cc1Swenshuai.xi             case 0:
2316*53ee8cc1Swenshuai.xi                 u32RegAddrStar = MIU2_PROTECT0_START;
2317*53ee8cc1Swenshuai.xi                 val1_16 = HAL_MIU_Read2Byte(u32RegAddrMSB);
2318*53ee8cc1Swenshuai.xi                 val1_16 = ( val1_16 & 0x1 );
2319*53ee8cc1Swenshuai.xi                 val2_16 = ( val1_16 & 0xC );
2320*53ee8cc1Swenshuai.xi                 break;
2321*53ee8cc1Swenshuai.xi 
2322*53ee8cc1Swenshuai.xi             case 1:
2323*53ee8cc1Swenshuai.xi                 u32RegAddrStar = MIU2_PROTECT1_START;
2324*53ee8cc1Swenshuai.xi                 val1_16 = HAL_MIU_Read2Byte(u32RegAddrMSB);
2325*53ee8cc1Swenshuai.xi                 val1_16 = ( val1_16 & 0x10 );
2326*53ee8cc1Swenshuai.xi                 val2_16 = ( val1_16 & 0xC0 );
2327*53ee8cc1Swenshuai.xi                 break;
2328*53ee8cc1Swenshuai.xi 
2329*53ee8cc1Swenshuai.xi             case 2:
2330*53ee8cc1Swenshuai.xi                 u32RegAddrStar = MIU2_PROTECT2_START;
2331*53ee8cc1Swenshuai.xi                 val1_16 = HAL_MIU_Read2Byte(u32RegAddrMSB);
2332*53ee8cc1Swenshuai.xi                 val1_16 = ( val1_16 & 0x100 );
2333*53ee8cc1Swenshuai.xi                 val2_16 = ( val1_16 & 0xC00 );
2334*53ee8cc1Swenshuai.xi                 break;
2335*53ee8cc1Swenshuai.xi 
2336*53ee8cc1Swenshuai.xi             case 3:
2337*53ee8cc1Swenshuai.xi                 u32RegAddrStar = MIU2_PROTECT3_START;
2338*53ee8cc1Swenshuai.xi                 val1_16 = HAL_MIU_Read2Byte(u32RegAddrMSB);
2339*53ee8cc1Swenshuai.xi                 val1_16 = ( val1_16 & 0x1000 );
2340*53ee8cc1Swenshuai.xi                 val2_16 = ( val1_16 & 0xC000 );
2341*53ee8cc1Swenshuai.xi                 break;
2342*53ee8cc1Swenshuai.xi 
2343*53ee8cc1Swenshuai.xi             default:
2344*53ee8cc1Swenshuai.xi                 printf("error miu protect block number\n");
2345*53ee8cc1Swenshuai.xi                 return ;
2346*53ee8cc1Swenshuai.xi         }
2347*53ee8cc1Swenshuai.xi 
2348*53ee8cc1Swenshuai.xi     }
2349*53ee8cc1Swenshuai.xi     else
2350*53ee8cc1Swenshuai.xi     {
2351*53ee8cc1Swenshuai.xi         printf("%s not support MIU%u!\n", __FUNCTION__, miu_dev );
2352*53ee8cc1Swenshuai.xi         return;
2353*53ee8cc1Swenshuai.xi     }
2354*53ee8cc1Swenshuai.xi 
2355*53ee8cc1Swenshuai.xi     //protect start address
2356*53ee8cc1Swenshuai.xi     val_16 = HAL_MIU_Read2Byte(u32RegAddrStar);
2357*53ee8cc1Swenshuai.xi     val_32 = (( val_16 ) | (( val1_16  ) << 4 )) << MIU_PAGE_SHIFT;
2358*53ee8cc1Swenshuai.xi     printf("miu%d protect%d startaddr is 0x%tX\n", miu_dev, u8Blockx, (ptrdiff_t)val_32);
2359*53ee8cc1Swenshuai.xi 
2360*53ee8cc1Swenshuai.xi     //protect end address
2361*53ee8cc1Swenshuai.xi     val_16 = HAL_MIU_Read2Byte(u32RegAddrStar+0x2);
2362*53ee8cc1Swenshuai.xi     val_32 = ((( val_16 + 1 ) | (( val1_16  ) << 4 ) ) << MIU_PAGE_SHIFT ) - 1;
2363*53ee8cc1Swenshuai.xi 
2364*53ee8cc1Swenshuai.xi     printf("miu%d protect%d endaddr   is 0x%tX\n", miu_dev, u8Blockx, (ptrdiff_t)val_32);
2365*53ee8cc1Swenshuai.xi }
2366*53ee8cc1Swenshuai.xi 
HAL_MIU_PrintMIUProtectInfo(void)2367*53ee8cc1Swenshuai.xi void HAL_MIU_PrintMIUProtectInfo(void)
2368*53ee8cc1Swenshuai.xi {
2369*53ee8cc1Swenshuai.xi     MS_U32 u32MiuProtectEn;
2370*53ee8cc1Swenshuai.xi     MS_U32 u32MiuProtectIdEn;
2371*53ee8cc1Swenshuai.xi 
2372*53ee8cc1Swenshuai.xi     MS_U8 val_8;
2373*53ee8cc1Swenshuai.xi     MS_U16 val_16;
2374*53ee8cc1Swenshuai.xi 
2375*53ee8cc1Swenshuai.xi     u32MiuProtectEn = MIU_PROTECT_EN;
2376*53ee8cc1Swenshuai.xi 
2377*53ee8cc1Swenshuai.xi     u32MiuProtectIdEn= MIU_PROTECT0_ID_ENABLE;
2378*53ee8cc1Swenshuai.xi     val_8 = HAL_MIU_ReadByte(u32MiuProtectEn);
2379*53ee8cc1Swenshuai.xi 
2380*53ee8cc1Swenshuai.xi     //printf("val=%d\n",val);
2381*53ee8cc1Swenshuai.xi 
2382*53ee8cc1Swenshuai.xi     if ( (val_8 & 0xf) != 0 )
2383*53ee8cc1Swenshuai.xi     {
2384*53ee8cc1Swenshuai.xi         printf("miu0 protect is enabled\n");
2385*53ee8cc1Swenshuai.xi 
2386*53ee8cc1Swenshuai.xi         //protect_ID_enable information
2387*53ee8cc1Swenshuai.xi         val_16 =HAL_MIU_Read2Byte(u32MiuProtectIdEn);
2388*53ee8cc1Swenshuai.xi         if ( val_16 != 0 )
2389*53ee8cc1Swenshuai.xi         {
2390*53ee8cc1Swenshuai.xi             printf("miu0 protect0_ID_enable is 0x%x\n",val_16);
2391*53ee8cc1Swenshuai.xi             HAL_MIU_PrintMIUProtectArea(0,0);
2392*53ee8cc1Swenshuai.xi         }
2393*53ee8cc1Swenshuai.xi 
2394*53ee8cc1Swenshuai.xi         u32MiuProtectIdEn= MIU_PROTECT1_ID_ENABLE;
2395*53ee8cc1Swenshuai.xi         val_16 =HAL_MIU_Read2Byte(u32MiuProtectIdEn);
2396*53ee8cc1Swenshuai.xi         if ( val_16 != 0 )
2397*53ee8cc1Swenshuai.xi         {
2398*53ee8cc1Swenshuai.xi             printf("miu0 protect1_ID_enable is 0x%x\n",val_16);
2399*53ee8cc1Swenshuai.xi             HAL_MIU_PrintMIUProtectArea(1,0);
2400*53ee8cc1Swenshuai.xi         }
2401*53ee8cc1Swenshuai.xi 
2402*53ee8cc1Swenshuai.xi         u32MiuProtectIdEn= MIU_PROTECT2_ID_ENABLE;
2403*53ee8cc1Swenshuai.xi         val_16 =HAL_MIU_Read2Byte(u32MiuProtectIdEn);
2404*53ee8cc1Swenshuai.xi         if ( val_16 != 0 )
2405*53ee8cc1Swenshuai.xi         {
2406*53ee8cc1Swenshuai.xi             printf("miu0 protect2_ID_enable is 0x%x\n",val_16);
2407*53ee8cc1Swenshuai.xi             HAL_MIU_PrintMIUProtectArea(2,0);
2408*53ee8cc1Swenshuai.xi         }
2409*53ee8cc1Swenshuai.xi 
2410*53ee8cc1Swenshuai.xi         u32MiuProtectIdEn= MIU_PROTECT3_ID_ENABLE;
2411*53ee8cc1Swenshuai.xi         val_16 =HAL_MIU_Read2Byte(u32MiuProtectIdEn);
2412*53ee8cc1Swenshuai.xi         if ( val_16 != 0 )
2413*53ee8cc1Swenshuai.xi         {
2414*53ee8cc1Swenshuai.xi             printf("miu0 protect3_ID_enable is 0x%x\n",val_16);
2415*53ee8cc1Swenshuai.xi             HAL_MIU_PrintMIUProtectArea(3,0);
2416*53ee8cc1Swenshuai.xi         }
2417*53ee8cc1Swenshuai.xi 
2418*53ee8cc1Swenshuai.xi     }
2419*53ee8cc1Swenshuai.xi     else
2420*53ee8cc1Swenshuai.xi     {
2421*53ee8cc1Swenshuai.xi         printf("miu0 protect is not enabled\n");
2422*53ee8cc1Swenshuai.xi     }
2423*53ee8cc1Swenshuai.xi 
2424*53ee8cc1Swenshuai.xi     u32MiuProtectEn=MIU1_PROTECT_EN;
2425*53ee8cc1Swenshuai.xi     val_8 = HAL_MIU_ReadByte(u32MiuProtectEn);
2426*53ee8cc1Swenshuai.xi 
2427*53ee8cc1Swenshuai.xi     //printf("val=%d\n",val);
2428*53ee8cc1Swenshuai.xi 
2429*53ee8cc1Swenshuai.xi     if ( (val_8 & 0xf) != 0x0 )
2430*53ee8cc1Swenshuai.xi     {
2431*53ee8cc1Swenshuai.xi         printf("miu1 protect is enabled\n");
2432*53ee8cc1Swenshuai.xi 
2433*53ee8cc1Swenshuai.xi         //protect_ID_enable information
2434*53ee8cc1Swenshuai.xi         u32MiuProtectIdEn= MIU1_PROTECT0_ID_ENABLE;
2435*53ee8cc1Swenshuai.xi         val_16 =HAL_MIU_Read2Byte(u32MiuProtectIdEn);
2436*53ee8cc1Swenshuai.xi         if ( val_16 != 0 )
2437*53ee8cc1Swenshuai.xi         {
2438*53ee8cc1Swenshuai.xi             printf("miu1 protect0_ID_enable is 0x%x\n",val_16);
2439*53ee8cc1Swenshuai.xi             HAL_MIU_PrintMIUProtectArea(0,1);
2440*53ee8cc1Swenshuai.xi         }
2441*53ee8cc1Swenshuai.xi 
2442*53ee8cc1Swenshuai.xi         u32MiuProtectIdEn= MIU1_PROTECT1_ID_ENABLE;
2443*53ee8cc1Swenshuai.xi         val_16 =HAL_MIU_Read2Byte(u32MiuProtectIdEn);
2444*53ee8cc1Swenshuai.xi         if ( val_16 != 0 )
2445*53ee8cc1Swenshuai.xi         {
2446*53ee8cc1Swenshuai.xi             printf("miu1 protect1_ID_enable is 0x%x\n",val_16);
2447*53ee8cc1Swenshuai.xi             HAL_MIU_PrintMIUProtectArea(1,1);
2448*53ee8cc1Swenshuai.xi         }
2449*53ee8cc1Swenshuai.xi 
2450*53ee8cc1Swenshuai.xi         u32MiuProtectIdEn= MIU1_PROTECT2_ID_ENABLE;
2451*53ee8cc1Swenshuai.xi         val_16 =HAL_MIU_Read2Byte(u32MiuProtectIdEn);
2452*53ee8cc1Swenshuai.xi         if ( val_16 != 0 )
2453*53ee8cc1Swenshuai.xi         {
2454*53ee8cc1Swenshuai.xi             printf("miu1 protect2_ID_enable is 0x%x\n",val_16);
2455*53ee8cc1Swenshuai.xi             HAL_MIU_PrintMIUProtectArea(2,1);
2456*53ee8cc1Swenshuai.xi         }
2457*53ee8cc1Swenshuai.xi 
2458*53ee8cc1Swenshuai.xi         u32MiuProtectIdEn= MIU1_PROTECT3_ID_ENABLE;
2459*53ee8cc1Swenshuai.xi         val_16 =HAL_MIU_Read2Byte(u32MiuProtectIdEn);
2460*53ee8cc1Swenshuai.xi         if ( val_16 != 0 )
2461*53ee8cc1Swenshuai.xi         {
2462*53ee8cc1Swenshuai.xi             printf("miu1 protect3_ID_enable is 0x%x\n",val_16);
2463*53ee8cc1Swenshuai.xi             HAL_MIU_PrintMIUProtectArea(3,1);
2464*53ee8cc1Swenshuai.xi         }
2465*53ee8cc1Swenshuai.xi 
2466*53ee8cc1Swenshuai.xi 
2467*53ee8cc1Swenshuai.xi     }
2468*53ee8cc1Swenshuai.xi     else
2469*53ee8cc1Swenshuai.xi     {
2470*53ee8cc1Swenshuai.xi         printf("miu1 protect is not enabled\n");
2471*53ee8cc1Swenshuai.xi 
2472*53ee8cc1Swenshuai.xi     }
2473*53ee8cc1Swenshuai.xi 
2474*53ee8cc1Swenshuai.xi     u32MiuProtectEn=MIU2_PROTECT_EN;
2475*53ee8cc1Swenshuai.xi     val_8 = HAL_MIU_ReadByte(u32MiuProtectEn);
2476*53ee8cc1Swenshuai.xi 
2477*53ee8cc1Swenshuai.xi     //printf("val=%d\n",val);
2478*53ee8cc1Swenshuai.xi 
2479*53ee8cc1Swenshuai.xi     if ( (val_8 & 0xf) != 0x0 )
2480*53ee8cc1Swenshuai.xi     {
2481*53ee8cc1Swenshuai.xi         printf("miu2 protect is enabled\n");
2482*53ee8cc1Swenshuai.xi 
2483*53ee8cc1Swenshuai.xi         //protect_ID_enable information
2484*53ee8cc1Swenshuai.xi         u32MiuProtectIdEn= MIU2_PROTECT0_ID_ENABLE;
2485*53ee8cc1Swenshuai.xi         val_16 =HAL_MIU_Read2Byte(u32MiuProtectIdEn);
2486*53ee8cc1Swenshuai.xi         if ( val_16 != 0 )
2487*53ee8cc1Swenshuai.xi         {
2488*53ee8cc1Swenshuai.xi             printf("miu2 protect0_ID_enable is 0x%x\n",val_16);
2489*53ee8cc1Swenshuai.xi             HAL_MIU_PrintMIUProtectArea(0,2);
2490*53ee8cc1Swenshuai.xi         }
2491*53ee8cc1Swenshuai.xi 
2492*53ee8cc1Swenshuai.xi         u32MiuProtectIdEn= MIU2_PROTECT1_ID_ENABLE;
2493*53ee8cc1Swenshuai.xi         val_16 =HAL_MIU_Read2Byte(u32MiuProtectIdEn);
2494*53ee8cc1Swenshuai.xi         if ( val_16 != 0 )
2495*53ee8cc1Swenshuai.xi         {
2496*53ee8cc1Swenshuai.xi             printf("miu2 protect1_ID_enable is 0x%x\n",val_16);
2497*53ee8cc1Swenshuai.xi             HAL_MIU_PrintMIUProtectArea(1,2);
2498*53ee8cc1Swenshuai.xi         }
2499*53ee8cc1Swenshuai.xi 
2500*53ee8cc1Swenshuai.xi         u32MiuProtectIdEn= MIU2_PROTECT2_ID_ENABLE;
2501*53ee8cc1Swenshuai.xi         val_16 =HAL_MIU_Read2Byte(u32MiuProtectIdEn);
2502*53ee8cc1Swenshuai.xi         if ( val_16 != 0 )
2503*53ee8cc1Swenshuai.xi         {
2504*53ee8cc1Swenshuai.xi             printf("miu2 protect2_ID_enable is 0x%x\n",val_16);
2505*53ee8cc1Swenshuai.xi             HAL_MIU_PrintMIUProtectArea(2,2);
2506*53ee8cc1Swenshuai.xi         }
2507*53ee8cc1Swenshuai.xi 
2508*53ee8cc1Swenshuai.xi         u32MiuProtectIdEn= MIU2_PROTECT3_ID_ENABLE;
2509*53ee8cc1Swenshuai.xi         val_16 =HAL_MIU_Read2Byte(u32MiuProtectIdEn);
2510*53ee8cc1Swenshuai.xi         if ( val_16 != 0 )
2511*53ee8cc1Swenshuai.xi         {
2512*53ee8cc1Swenshuai.xi             printf("miu2 protect3_ID_enable is 0x%x\n",val_16);
2513*53ee8cc1Swenshuai.xi             HAL_MIU_PrintMIUProtectArea(3,2);
2514*53ee8cc1Swenshuai.xi         }
2515*53ee8cc1Swenshuai.xi 
2516*53ee8cc1Swenshuai.xi 
2517*53ee8cc1Swenshuai.xi     }
2518*53ee8cc1Swenshuai.xi     else
2519*53ee8cc1Swenshuai.xi     {
2520*53ee8cc1Swenshuai.xi         printf("miu2 protect is not enabled\n");
2521*53ee8cc1Swenshuai.xi 
2522*53ee8cc1Swenshuai.xi     }
2523*53ee8cc1Swenshuai.xi 
2524*53ee8cc1Swenshuai.xi     u32MiuProtectEn=MIU3_PROTECT_EN;
2525*53ee8cc1Swenshuai.xi     val_8 = HAL_MIU_ReadByte(u32MiuProtectEn);
2526*53ee8cc1Swenshuai.xi 
2527*53ee8cc1Swenshuai.xi     //printf("val=%d\n",val);
2528*53ee8cc1Swenshuai.xi 
2529*53ee8cc1Swenshuai.xi     if ( (val_8 & 0xf) != 0x0 )
2530*53ee8cc1Swenshuai.xi     {
2531*53ee8cc1Swenshuai.xi         printf("miu3 protect is enabled\n");
2532*53ee8cc1Swenshuai.xi 
2533*53ee8cc1Swenshuai.xi         //protect_ID_enable information
2534*53ee8cc1Swenshuai.xi         u32MiuProtectIdEn= MIU3_PROTECT0_ID_ENABLE;
2535*53ee8cc1Swenshuai.xi         val_16 =HAL_MIU_Read2Byte(u32MiuProtectIdEn);
2536*53ee8cc1Swenshuai.xi         if ( val_16 != 0 )
2537*53ee8cc1Swenshuai.xi         {
2538*53ee8cc1Swenshuai.xi             printf("miu3 protect0_ID_enable is 0x%x\n",val_16);
2539*53ee8cc1Swenshuai.xi             HAL_MIU_PrintMIUProtectArea(0,3);
2540*53ee8cc1Swenshuai.xi         }
2541*53ee8cc1Swenshuai.xi 
2542*53ee8cc1Swenshuai.xi         u32MiuProtectIdEn= MIU3_PROTECT1_ID_ENABLE;
2543*53ee8cc1Swenshuai.xi         val_16 =HAL_MIU_Read2Byte(u32MiuProtectIdEn);
2544*53ee8cc1Swenshuai.xi         if ( val_16 != 0 )
2545*53ee8cc1Swenshuai.xi         {
2546*53ee8cc1Swenshuai.xi             printf("miu3 protect1_ID_enable is 0x%x\n",val_16);
2547*53ee8cc1Swenshuai.xi             HAL_MIU_PrintMIUProtectArea(1,3);
2548*53ee8cc1Swenshuai.xi         }
2549*53ee8cc1Swenshuai.xi 
2550*53ee8cc1Swenshuai.xi         u32MiuProtectIdEn= MIU3_PROTECT2_ID_ENABLE;
2551*53ee8cc1Swenshuai.xi         val_16 =HAL_MIU_Read2Byte(u32MiuProtectIdEn);
2552*53ee8cc1Swenshuai.xi         if ( val_16 != 0 )
2553*53ee8cc1Swenshuai.xi         {
2554*53ee8cc1Swenshuai.xi             printf("miu3 protect2_ID_enable is 0x%x\n",val_16);
2555*53ee8cc1Swenshuai.xi             HAL_MIU_PrintMIUProtectArea(2,3);
2556*53ee8cc1Swenshuai.xi         }
2557*53ee8cc1Swenshuai.xi 
2558*53ee8cc1Swenshuai.xi         u32MiuProtectIdEn= MIU3_PROTECT3_ID_ENABLE;
2559*53ee8cc1Swenshuai.xi         val_16 =HAL_MIU_Read2Byte(u32MiuProtectIdEn);
2560*53ee8cc1Swenshuai.xi         if ( val_16 != 0 )
2561*53ee8cc1Swenshuai.xi         {
2562*53ee8cc1Swenshuai.xi             printf("miu3 protect3_ID_enable is 0x%x\n",val_16);
2563*53ee8cc1Swenshuai.xi             HAL_MIU_PrintMIUProtectArea(3,3);
2564*53ee8cc1Swenshuai.xi         }
2565*53ee8cc1Swenshuai.xi 
2566*53ee8cc1Swenshuai.xi 
2567*53ee8cc1Swenshuai.xi     }
2568*53ee8cc1Swenshuai.xi     else
2569*53ee8cc1Swenshuai.xi     {
2570*53ee8cc1Swenshuai.xi         printf("miu3 protect is not enabled\n");
2571*53ee8cc1Swenshuai.xi 
2572*53ee8cc1Swenshuai.xi     }
2573*53ee8cc1Swenshuai.xi }
2574*53ee8cc1Swenshuai.xi 
2575*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
2576*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_MIU_GetClientWidth
2577*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description: Get MIU client bus width
2578*53ee8cc1Swenshuai.xi /// @param u8MiuDev     \b IN   : select MIU0 or MIU1
2579*53ee8cc1Swenshuai.xi /// @param eClientID    \b IN   : client ID
2580*53ee8cc1Swenshuai.xi /// @param pClientWidth \b IN   : client bus width
2581*53ee8cc1Swenshuai.xi /// @return             \b 0 : Fail  1: OK
2582*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_MIU_GetClientWidth(MS_U8 u8MiuDevi,eMIUClientID eClientID,eMIU_ClientWidth * pClientWidth)2583*53ee8cc1Swenshuai.xi MS_BOOL HAL_MIU_GetClientWidth(MS_U8 u8MiuDevi, eMIUClientID eClientID, eMIU_ClientWidth *pClientWidth)
2584*53ee8cc1Swenshuai.xi {
2585*53ee8cc1Swenshuai.xi     MS_U32 u32Reg;
2586*53ee8cc1Swenshuai.xi     MS_S16 sVal;
2587*53ee8cc1Swenshuai.xi     MS_U16 u16Group;
2588*53ee8cc1Swenshuai.xi     MS_U16 u16Client;
2589*53ee8cc1Swenshuai.xi     MS_U16 u16RegVal;
2590*53ee8cc1Swenshuai.xi 
2591*53ee8cc1Swenshuai.xi     sVal = HAL_MIU_GetClientInfo(u8MiuDevi, eClientID);
2592*53ee8cc1Swenshuai.xi 
2593*53ee8cc1Swenshuai.xi     if (sVal < 0)
2594*53ee8cc1Swenshuai.xi     {
2595*53ee8cc1Swenshuai.xi         printf("%s not support client ID:%u!\n", __FUNCTION__, eClientID);
2596*53ee8cc1Swenshuai.xi         return FALSE;
2597*53ee8cc1Swenshuai.xi     }
2598*53ee8cc1Swenshuai.xi     else
2599*53ee8cc1Swenshuai.xi     {
2600*53ee8cc1Swenshuai.xi         u16Group = MIU_GET_CLIENT_GROUP(sVal);
2601*53ee8cc1Swenshuai.xi         u16Client = MIU_GET_CLIENT_POS(sVal);
2602*53ee8cc1Swenshuai.xi 
2603*53ee8cc1Swenshuai.xi         if(u16Group >= 4)
2604*53ee8cc1Swenshuai.xi         {
2605*53ee8cc1Swenshuai.xi             *pClientWidth = E_MIU_CLIENT_256BIT;
2606*53ee8cc1Swenshuai.xi             return TRUE;
2607*53ee8cc1Swenshuai.xi         }
2608*53ee8cc1Swenshuai.xi 
2609*53ee8cc1Swenshuai.xi         u32Reg = REG_MI64_FORCE + (MIU_GET_CLIENT_GROUP(sVal) << 1);
2610*53ee8cc1Swenshuai.xi         u16RegVal = HAL_MIU_Read2Byte(u32Reg);
2611*53ee8cc1Swenshuai.xi 
2612*53ee8cc1Swenshuai.xi         if(u16RegVal & (1 << u16Client))
2613*53ee8cc1Swenshuai.xi             *pClientWidth = E_MIU_CLIENT_64BIT;
2614*53ee8cc1Swenshuai.xi         else
2615*53ee8cc1Swenshuai.xi             *pClientWidth = E_MIU_CLIENT_128BIT;
2616*53ee8cc1Swenshuai.xi 
2617*53ee8cc1Swenshuai.xi         return TRUE;
2618*53ee8cc1Swenshuai.xi     }
2619*53ee8cc1Swenshuai.xi }
2620*53ee8cc1Swenshuai.xi 
2621*53ee8cc1Swenshuai.xi 
HAL_MIU_GetDramType(MS_U32 eMiu,MIU_DDR_TYPE * pType)2622*53ee8cc1Swenshuai.xi MS_BOOL HAL_MIU_GetDramType(MS_U32 eMiu, MIU_DDR_TYPE* pType)
2623*53ee8cc1Swenshuai.xi {
2624*53ee8cc1Swenshuai.xi     MS_U32 u32Reg;
2625*53ee8cc1Swenshuai.xi 
2626*53ee8cc1Swenshuai.xi     if (eMiu >= MIU_MAX_DEVICE)
2627*53ee8cc1Swenshuai.xi         return FALSE;
2628*53ee8cc1Swenshuai.xi 
2629*53ee8cc1Swenshuai.xi     switch (eMiu)
2630*53ee8cc1Swenshuai.xi     {
2631*53ee8cc1Swenshuai.xi         case 0:
2632*53ee8cc1Swenshuai.xi             u32Reg = REG_MIU_DDR_STATUS;
2633*53ee8cc1Swenshuai.xi             break;
2634*53ee8cc1Swenshuai.xi         case 1:
2635*53ee8cc1Swenshuai.xi             u32Reg = REG_MIU1_DDR_STATUS;
2636*53ee8cc1Swenshuai.xi             break;
2637*53ee8cc1Swenshuai.xi         case 2:
2638*53ee8cc1Swenshuai.xi             u32Reg = REG_MIU2_DDR_STATUS;
2639*53ee8cc1Swenshuai.xi             break;
2640*53ee8cc1Swenshuai.xi         default:
2641*53ee8cc1Swenshuai.xi             return FALSE;
2642*53ee8cc1Swenshuai.xi     }
2643*53ee8cc1Swenshuai.xi 
2644*53ee8cc1Swenshuai.xi     if (HAL_MIU_Read2Byte(u32Reg)& REG_MIU_DDR4)
2645*53ee8cc1Swenshuai.xi     {
2646*53ee8cc1Swenshuai.xi         *pType = E_MIU_DDR4;
2647*53ee8cc1Swenshuai.xi     }
2648*53ee8cc1Swenshuai.xi     else
2649*53ee8cc1Swenshuai.xi     {
2650*53ee8cc1Swenshuai.xi         *pType = E_MIU_DDR3;
2651*53ee8cc1Swenshuai.xi     }
2652*53ee8cc1Swenshuai.xi 
2653*53ee8cc1Swenshuai.xi     return TRUE;
2654*53ee8cc1Swenshuai.xi }
2655