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