xref: /utopia/UTPA2-700.0.x/modules/seal/hal/mainz/seal/halSEAL.c (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi //<MStar Software>
2*53ee8cc1Swenshuai.xi //******************************************************************************
3*53ee8cc1Swenshuai.xi // MStar Software
4*53ee8cc1Swenshuai.xi // Copyright (c) 2010 - 2012 MStar Semiconductor, Inc. All rights reserved.
5*53ee8cc1Swenshuai.xi // All software, firmware and related documentation herein ("MStar Software") are
6*53ee8cc1Swenshuai.xi // intellectual property of MStar Semiconductor, Inc. ("MStar") and protected by
7*53ee8cc1Swenshuai.xi // law, including, but not limited to, copyright law and international treaties.
8*53ee8cc1Swenshuai.xi // Any use, modification, reproduction, retransmission, or republication of all
9*53ee8cc1Swenshuai.xi // or part of MStar Software is expressly prohibited, unless prior written
10*53ee8cc1Swenshuai.xi // permission has been granted by MStar.
11*53ee8cc1Swenshuai.xi //
12*53ee8cc1Swenshuai.xi // By accessing, browsing and/or using MStar Software, you acknowledge that you
13*53ee8cc1Swenshuai.xi // have read, understood, and agree, to be bound by below terms ("Terms") and to
14*53ee8cc1Swenshuai.xi // comply with all applicable laws and regulations:
15*53ee8cc1Swenshuai.xi //
16*53ee8cc1Swenshuai.xi // 1. MStar shall retain any and all right, ownership and interest to MStar
17*53ee8cc1Swenshuai.xi //    Software and any modification/derivatives thereof.
18*53ee8cc1Swenshuai.xi //    No right, ownership, or interest to MStar Software and any
19*53ee8cc1Swenshuai.xi //    modification/derivatives thereof is transferred to you under Terms.
20*53ee8cc1Swenshuai.xi //
21*53ee8cc1Swenshuai.xi // 2. You understand that MStar Software might include, incorporate or be
22*53ee8cc1Swenshuai.xi //    supplied together with third party`s software and the use of MStar
23*53ee8cc1Swenshuai.xi //    Software may require additional licenses from third parties.
24*53ee8cc1Swenshuai.xi //    Therefore, you hereby agree it is your sole responsibility to separately
25*53ee8cc1Swenshuai.xi //    obtain any and all third party right and license necessary for your use of
26*53ee8cc1Swenshuai.xi //    such third party`s software.
27*53ee8cc1Swenshuai.xi //
28*53ee8cc1Swenshuai.xi // 3. MStar Software and any modification/derivatives thereof shall be deemed as
29*53ee8cc1Swenshuai.xi //    MStar`s confidential information and you agree to keep MStar`s
30*53ee8cc1Swenshuai.xi //    confidential information in strictest confidence and not disclose to any
31*53ee8cc1Swenshuai.xi //    third party.
32*53ee8cc1Swenshuai.xi //
33*53ee8cc1Swenshuai.xi // 4. MStar Software is provided on an "AS IS" basis without warranties of any
34*53ee8cc1Swenshuai.xi //    kind. Any warranties are hereby expressly disclaimed by MStar, including
35*53ee8cc1Swenshuai.xi //    without limitation, any warranties of merchantability, non-infringement of
36*53ee8cc1Swenshuai.xi //    intellectual property rights, fitness for a particular purpose, error free
37*53ee8cc1Swenshuai.xi //    and in conformity with any international standard.  You agree to waive any
38*53ee8cc1Swenshuai.xi //    claim against MStar for any loss, damage, cost or expense that you may
39*53ee8cc1Swenshuai.xi //    incur related to your use of MStar Software.
40*53ee8cc1Swenshuai.xi //    In no event shall MStar be liable for any direct, indirect, incidental or
41*53ee8cc1Swenshuai.xi //    consequential damages, including without limitation, lost of profit or
42*53ee8cc1Swenshuai.xi //    revenues, lost or damage of data, and unauthorized system use.
43*53ee8cc1Swenshuai.xi //    You agree that this Section 4 shall still apply without being affected
44*53ee8cc1Swenshuai.xi //    even if MStar Software has been modified by MStar in accordance with your
45*53ee8cc1Swenshuai.xi //    request or instruction for your use, except otherwise agreed by both
46*53ee8cc1Swenshuai.xi //    parties in writing.
47*53ee8cc1Swenshuai.xi //
48*53ee8cc1Swenshuai.xi // 5. If requested, MStar may from time to time provide technical supports or
49*53ee8cc1Swenshuai.xi //    services in relation with MStar Software to you for your use of
50*53ee8cc1Swenshuai.xi //    MStar Software in conjunction with your or your customer`s product
51*53ee8cc1Swenshuai.xi //    ("Services").
52*53ee8cc1Swenshuai.xi //    You understand and agree that, except otherwise agreed by both parties in
53*53ee8cc1Swenshuai.xi //    writing, Services are provided on an "AS IS" basis and the warranty
54*53ee8cc1Swenshuai.xi //    disclaimer set forth in Section 4 above shall apply.
55*53ee8cc1Swenshuai.xi //
56*53ee8cc1Swenshuai.xi // 6. Nothing contained herein shall be construed as by implication, estoppels
57*53ee8cc1Swenshuai.xi //    or otherwise:
58*53ee8cc1Swenshuai.xi //    (a) conferring any license or right to use MStar name, trademark, service
59*53ee8cc1Swenshuai.xi //        mark, symbol or any other identification;
60*53ee8cc1Swenshuai.xi //    (b) obligating MStar or any of its affiliates to furnish any person,
61*53ee8cc1Swenshuai.xi //        including without limitation, you and your customers, any assistance
62*53ee8cc1Swenshuai.xi //        of any kind whatsoever, or any information; or
63*53ee8cc1Swenshuai.xi //    (c) conferring any license or right under any intellectual property right.
64*53ee8cc1Swenshuai.xi //
65*53ee8cc1Swenshuai.xi // 7. These terms shall be governed by and construed in accordance with the laws
66*53ee8cc1Swenshuai.xi //    of Taiwan, R.O.C., excluding its conflict of law rules.
67*53ee8cc1Swenshuai.xi //    Any and all dispute arising out hereof or related hereto shall be finally
68*53ee8cc1Swenshuai.xi //    settled by arbitration referred to the Chinese Arbitration Association,
69*53ee8cc1Swenshuai.xi //    Taipei in accordance with the ROC Arbitration Law and the Arbitration
70*53ee8cc1Swenshuai.xi //    Rules of the Association by three (3) arbitrators appointed in accordance
71*53ee8cc1Swenshuai.xi //    with the said Rules.
72*53ee8cc1Swenshuai.xi //    The place of arbitration shall be in Taipei, Taiwan and the language shall
73*53ee8cc1Swenshuai.xi //    be English.
74*53ee8cc1Swenshuai.xi //    The arbitration award shall be final and binding to both parties.
75*53ee8cc1Swenshuai.xi //
76*53ee8cc1Swenshuai.xi //******************************************************************************
77*53ee8cc1Swenshuai.xi //<MStar Software>
78*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
79*53ee8cc1Swenshuai.xi //
80*53ee8cc1Swenshuai.xi // Copyright (c) 2006-2008 MStar Semiconductor, Inc.
81*53ee8cc1Swenshuai.xi // All rights reserved.
82*53ee8cc1Swenshuai.xi //
83*53ee8cc1Swenshuai.xi // Unless otherwise stipulated in writing, any and all information contained
84*53ee8cc1Swenshuai.xi // herein regardless in any format shall remain the sole proprietary of
85*53ee8cc1Swenshuai.xi // MStar Semiconductor Inc. and be kept in strict confidence
86*53ee8cc1Swenshuai.xi // (¡§MStar Confidential Information¡¨) by the recipient.
87*53ee8cc1Swenshuai.xi // Any unauthorized act including without limitation unauthorized disclosure,
88*53ee8cc1Swenshuai.xi // copying, use, reproduction, sale, distribution, modification, disassembling,
89*53ee8cc1Swenshuai.xi // reverse engineering and compiling of the contents of MStar Confidential
90*53ee8cc1Swenshuai.xi // Information is unlawful and strictly prohibited. MStar hereby reserves the
91*53ee8cc1Swenshuai.xi // rights to any and all damages, losses, costs and expenses resulting therefrom.
92*53ee8cc1Swenshuai.xi //
93*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
94*53ee8cc1Swenshuai.xi 
95*53ee8cc1Swenshuai.xi 
96*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
97*53ee8cc1Swenshuai.xi //  Include Files
98*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
99*53ee8cc1Swenshuai.xi #include "MsCommon.h"
100*53ee8cc1Swenshuai.xi #include "MsTypes.h"
101*53ee8cc1Swenshuai.xi #include "regSEAL.h"
102*53ee8cc1Swenshuai.xi #include "halSEAL.h"
103*53ee8cc1Swenshuai.xi #include "drvSEAL.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 HAL_SEAL_DBG(x)                 //x
115*53ee8cc1Swenshuai.xi #define HAL_SEAL_ERR(x, args...)        {printf(x, ##args);}\
116*53ee8cc1Swenshuai.xi 
117*53ee8cc1Swenshuai.xi //Non PM IP group
118*53ee8cc1Swenshuai.xi #define SEAL_NON_PM_GROUP0 \
119*53ee8cc1Swenshuai.xi     E_SEAL_RIU_DBG_PROT_NONPM, \
120*53ee8cc1Swenshuai.xi     E_SEAL_FUART1_PROT_NONPM, \
121*53ee8cc1Swenshuai.xi     E_SEAL_URDMA1_PROT_NONPM, \
122*53ee8cc1Swenshuai.xi     E_SEAL_VD_MHEG5_PROT_NONPM, \
123*53ee8cc1Swenshuai.xi     E_SEAL_MAU1_PROT_NONPM, \
124*53ee8cc1Swenshuai.xi     E_SEAL_HIREG_PROT_NONPM, \
125*53ee8cc1Swenshuai.xi     E_SEAL_POR_STATUS_PROT_NONPM, \
126*53ee8cc1Swenshuai.xi     E_SEAL_INTR_CPUINT_PROT_NONPM, \
127*53ee8cc1Swenshuai.xi     E_SEAL_MIU2_PROT_NONPM, \
128*53ee8cc1Swenshuai.xi     E_SEAL_USB0_PROT_NONPM, \
129*53ee8cc1Swenshuai.xi     E_SEAL_USB1_PROT_NONPM, \
130*53ee8cc1Swenshuai.xi     E_SEAL_UPLL0_PROT_NONPM, \
131*53ee8cc1Swenshuai.xi     E_SEAL_BDMA_CH0_PROT_NONPM, \
132*53ee8cc1Swenshuai.xi     E_SEAL_BDMA_CH1_PROT_NONPM, \
133*53ee8cc1Swenshuai.xi     E_SEAL_UART0_PROT_NONPM, \
134*53ee8cc1Swenshuai.xi     E_SEAL_CLKGEN2_PROT_NONPM
135*53ee8cc1Swenshuai.xi 
136*53ee8cc1Swenshuai.xi #define SEAL_NON_PM_GROUP1 \
137*53ee8cc1Swenshuai.xi     E_SEAL_CLKGEN0_PROT_NONPM, \
138*53ee8cc1Swenshuai.xi     E_SEAL_DSCRMB_PROT_NONPM, \
139*53ee8cc1Swenshuai.xi     E_SEAL_UHC1_PROT_NONPM, \
140*53ee8cc1Swenshuai.xi     E_SEAL_MHEG5_PROT_NONPM, \
141*53ee8cc1Swenshuai.xi     E_SEAL_INTR_CTRL1_PROT_NONPM, \
142*53ee8cc1Swenshuai.xi     E_SEAL_MVD_PROT_NONPM, \
143*53ee8cc1Swenshuai.xi     E_SEAL_MIU_PROT_NONPM, \
144*53ee8cc1Swenshuai.xi     E_SEAL_MVOPSUB_PROT_NONPM, \
145*53ee8cc1Swenshuai.xi     E_SEAL_MVOP_PROT_NONPM, \
146*53ee8cc1Swenshuai.xi     E_SEAL_TSP0_PROT_NONPM, \
147*53ee8cc1Swenshuai.xi     E_SEAL_TSP1_PROT_NONPM, \
148*53ee8cc1Swenshuai.xi     E_SEAL_JPD_PROT_NONPM, \
149*53ee8cc1Swenshuai.xi     E_SEAL_SEMAPH_PROT_NONPM, \
150*53ee8cc1Swenshuai.xi     E_SEAL_MAU0_PROT_NONPM, \
151*53ee8cc1Swenshuai.xi     E_SEAL_L3_AXI_PROT_NONPM, \
152*53ee8cc1Swenshuai.xi     E_SEAL_INTR_CTRL_PROT_NONPM
153*53ee8cc1Swenshuai.xi 
154*53ee8cc1Swenshuai.xi #define SEAL_NON_PM_GROUP2 \
155*53ee8cc1Swenshuai.xi     E_SEAL_HVD_PROT_NONPM, \
156*53ee8cc1Swenshuai.xi     E_SEAL_TSP2_PROT_NONPM, \
157*53ee8cc1Swenshuai.xi     E_SEAL_MCU_ARM_PROT_NONPM, \
158*53ee8cc1Swenshuai.xi     E_SEAL_CHIP_PROT_NONPM, \
159*53ee8cc1Swenshuai.xi     E_SEAL_GOP_PROT_NONPM, \
160*53ee8cc1Swenshuai.xi     E_SEAL_EMAC0_PROT_NONPM, \
161*53ee8cc1Swenshuai.xi     E_SEAL_EMAC1_PROT_NONPM, \
162*53ee8cc1Swenshuai.xi     E_SEAL_EMAC2_PROT_NONPM, \
163*53ee8cc1Swenshuai.xi     E_SEAL_EMAC3_PROT_NONPM, \
164*53ee8cc1Swenshuai.xi     E_SEAL_UHC0_PROT_NONPM,  \
165*53ee8cc1Swenshuai.xi     E_SEAL_ADC_ATOP_PROT_NONPM, \
166*53ee8cc1Swenshuai.xi     E_SEAL_ADC_DTOP_PROT_NONPM, \
167*53ee8cc1Swenshuai.xi     E_SEAL_GE0_PROT_NONPM, \
168*53ee8cc1Swenshuai.xi     E_SEAL_SMART_PROT_NONPM, \
169*53ee8cc1Swenshuai.xi     E_SEAL_CI_PROT_NONPM, \
170*53ee8cc1Swenshuai.xi     E_SEAL_CHIPGPIO_PROT_NONPM
171*53ee8cc1Swenshuai.xi 
172*53ee8cc1Swenshuai.xi #define SEAL_NON_PM_GROUP3 \
173*53ee8cc1Swenshuai.xi     E_SEAL_VP6_PROT_NONPM, \
174*53ee8cc1Swenshuai.xi     E_SEAL_LDM_DMA0_PROT_NONPM, \
175*53ee8cc1Swenshuai.xi     E_SEAL_LDM_DMA1_PROT_NONPM, \
176*53ee8cc1Swenshuai.xi     E_SEAL_SC0_PROT_NONPM, \
177*53ee8cc1Swenshuai.xi     E_SEAL_SC1_PROT_NONPM, \
178*53ee8cc1Swenshuai.xi     E_SEAL_SC2_PROT_NONPM, \
179*53ee8cc1Swenshuai.xi     E_SEAL_SC3_PROT_NONPM, \
180*53ee8cc1Swenshuai.xi     E_SEAL_SC4_PROT_NONPM, \
181*53ee8cc1Swenshuai.xi     E_SEAL_CLKGEN1_PROT_NONPM,  \
182*53ee8cc1Swenshuai.xi     E_SEAL_MAILBOX_PROT_NONPM, \
183*53ee8cc1Swenshuai.xi     E_SEAL_MIIC_PROT_NONPM, \
184*53ee8cc1Swenshuai.xi     E_SEAL_PCM_PROT_NONPM, \
185*53ee8cc1Swenshuai.xi     E_SEAL_VDMCU51_IF_PROT_NONPM, \
186*53ee8cc1Swenshuai.xi     E_SEAL_DMDMCU51_IF_PROT_NONPM, \
187*53ee8cc1Swenshuai.xi     E_SEAL_VDMCU51_1_IF_PROT_NONPM, \
188*53ee8cc1Swenshuai.xi     E_SEAL_URDMA_PROT_NONPM
189*53ee8cc1Swenshuai.xi 
190*53ee8cc1Swenshuai.xi #define SEAL_NON_PM_GROUP4 \
191*53ee8cc1Swenshuai.xi     E_SEAL_AFEC_PROT_NONPM, \
192*53ee8cc1Swenshuai.xi     E_SEAL_COMB_PROT_NONPM, \
193*53ee8cc1Swenshuai.xi     E_SEAL_VBI_PROT_NONPM, \
194*53ee8cc1Swenshuai.xi     E_SEAL_SCM_PROT_NONPM, \
195*53ee8cc1Swenshuai.xi     E_SEAL_UTMI2_PROT_NONPM, \
196*53ee8cc1Swenshuai.xi     E_SEAL_PATGEN_PROT_NONPM, \
197*53ee8cc1Swenshuai.xi     E_SEAL_UTMI1_PROT_NONPM, \
198*53ee8cc1Swenshuai.xi     E_SEAL_UTMI_PROT_NONPM, \
199*53ee8cc1Swenshuai.xi     E_SEAL_VE_0_PROT_NONPM,  \
200*53ee8cc1Swenshuai.xi     E_SEAL_REG_PIU_NONPM_PROT_NONPM, \
201*53ee8cc1Swenshuai.xi     E_SEAL_ADC_ATOPB_PROT_NONPM, \
202*53ee8cc1Swenshuai.xi     E_SEAL_VE_1_PROT_NONPM, \
203*53ee8cc1Swenshuai.xi     E_SEAL_VE_2_PROT_NONPM, \
204*53ee8cc1Swenshuai.xi     E_SEAL_SC_GP1_NONPM, \
205*53ee8cc1Swenshuai.xi     E_SEAL_CHIPGPIO1_NONPM, \
206*53ee8cc1Swenshuai.xi     E_SEAL_MPIF_PROT_NONPM
207*53ee8cc1Swenshuai.xi 
208*53ee8cc1Swenshuai.xi #define SEAL_NON_PM_GROUP5 \
209*53ee8cc1Swenshuai.xi     E_SEAL_GPD_PROT_NONPM, \
210*53ee8cc1Swenshuai.xi     E_SEAL_UART1_PROT_NONPM, \
211*53ee8cc1Swenshuai.xi     E_SEAL_FUART_PROT_NONPM, \
212*53ee8cc1Swenshuai.xi     E_SEAL_GE1_PROT_NONPM, \
213*53ee8cc1Swenshuai.xi     E_SEAL_GPU_NONPM,  \
214*53ee8cc1Swenshuai.xi     E_SEAL_TS_SAMPLE_NONPM, \
215*53ee8cc1Swenshuai.xi     E_SEAL_NR_HSD_PROT_NONPM, \
216*53ee8cc1Swenshuai.xi     E_SEAL_ANA_MISC2_NONPM, \
217*53ee8cc1Swenshuai.xi     E_SEAL_ANA_MISC_PROT_NONPM, \
218*53ee8cc1Swenshuai.xi     E_SEAL_ANA_MISC_GMAC_PROT_NONPM, \
219*53ee8cc1Swenshuai.xi     E_SEAL_MIU_ATOP_PROT_NONPM, \
220*53ee8cc1Swenshuai.xi     E_SEAL_NR_PROT_NONPM, \
221*53ee8cc1Swenshuai.xi     E_SEAL_DI_PROT_NONPM, \
222*53ee8cc1Swenshuai.xi     E_SEAL_MFE0_PROT_NONPM, \
223*53ee8cc1Swenshuai.xi     E_SEAL_MFE1_PROT_NONPM, \
224*53ee8cc1Swenshuai.xi     E_SEAL_ADC_DTOPB_PROT_NONPM
225*53ee8cc1Swenshuai.xi 
226*53ee8cc1Swenshuai.xi #define SEAL_NON_PM_GROUP6 \
227*53ee8cc1Swenshuai.xi     E_SEAL_NFIE0_PROT_NONPM, \
228*53ee8cc1Swenshuai.xi     E_SEAL_NFIE1_PROT_NONPM, \
229*53ee8cc1Swenshuai.xi     E_SEAL_NFIE2_PROT_NONPM, \
230*53ee8cc1Swenshuai.xi     E_SEAL_VIVALDIc_PROT_NONPM, \
231*53ee8cc1Swenshuai.xi     E_SEAL_VIVALDId_PROT_NONPM, \
232*53ee8cc1Swenshuai.xi     E_SEAL_MIIC0_PROT_NONPM, \
233*53ee8cc1Swenshuai.xi     E_SEAL_MIIC1_PROT_NONPM, \
234*53ee8cc1Swenshuai.xi     E_SEAL_MIIC2_PROT_NONPM, \
235*53ee8cc1Swenshuai.xi     E_SEAL_MIIC3_PROT_NONPM, \
236*53ee8cc1Swenshuai.xi     E_SEAL_MOD2_PROT_NONPM, \
237*53ee8cc1Swenshuai.xi     E_SEAL_CLKGEN_DMD_PROT_NONPM, \
238*53ee8cc1Swenshuai.xi     E_SEAL_DEMOD_0_PROT_NONPM, \
239*53ee8cc1Swenshuai.xi     E_SEAL_DEMOD_1_PROT_NONPM, \
240*53ee8cc1Swenshuai.xi     E_SEAL_DEMOD_2_PROT_NONPM, \
241*53ee8cc1Swenshuai.xi     E_SEAL_DEMOD_3_PROT_NONPM, \
242*53ee8cc1Swenshuai.xi     E_SEAL_DEMOD_4_PROT_NONPM
243*53ee8cc1Swenshuai.xi 
244*53ee8cc1Swenshuai.xi #define SEAL_NON_PM_GROUP7 \
245*53ee8cc1Swenshuai.xi     E_SEAL_DEMOD_5_PROT_NONPM, \
246*53ee8cc1Swenshuai.xi     E_SEAL_DEMOD_6_PROT_NONPM, \
247*53ee8cc1Swenshuai.xi     E_SEAL_DEMOD_7_PROT_NONPM, \
248*53ee8cc1Swenshuai.xi     E_SEAL_DMD_ANA_MISC_PROT_NONPM, \
249*53ee8cc1Swenshuai.xi     E_SEAL_AUR20_PROT_NONPM, \
250*53ee8cc1Swenshuai.xi     E_SEAL_VIVALDI0_PROT_NONPM, \
251*53ee8cc1Swenshuai.xi     E_SEAL_VIVALDI1_PROT_NONPM, \
252*53ee8cc1Swenshuai.xi     E_SEAL_VIVALDI2_PROT_NONPM, \
253*53ee8cc1Swenshuai.xi     E_SEAL_VIVALDI3_PROT_NONPM, \
254*53ee8cc1Swenshuai.xi     E_SEAL_VIVALDI4_PROT_NONPM, \
255*53ee8cc1Swenshuai.xi     E_SEAL_VIVALDI5_PROT_NONPM, \
256*53ee8cc1Swenshuai.xi     E_SEAL_AU_MAU_NONPM, \
257*53ee8cc1Swenshuai.xi     E_SEAL_AU_GDMA_NONPM, \
258*53ee8cc1Swenshuai.xi     E_SEAL_CLKGEN_SC_FE, \
259*53ee8cc1Swenshuai.xi     E_SEAL_CLKGEN_SC_BE, \
260*53ee8cc1Swenshuai.xi     E_SEAL_CLKGEN_SC_GP2
261*53ee8cc1Swenshuai.xi 
262*53ee8cc1Swenshuai.xi #define SEAL_NON_PM_GROUP8 \
263*53ee8cc1Swenshuai.xi     E_SEAL_SC_GPLUS, \
264*53ee8cc1Swenshuai.xi     E_SEAL_USB2_PROT_NONPM, \
265*53ee8cc1Swenshuai.xi     E_SEAL_UHC2_PROT_NONPM, \
266*53ee8cc1Swenshuai.xi     E_SEAL_TSO_PROT_NONPM, \
267*53ee8cc1Swenshuai.xi     E_SEAL_DRM_SECURE_PROT_NONPM, \
268*53ee8cc1Swenshuai.xi     E_SEAL_DSCRMB2_PROT_NONPM, \
269*53ee8cc1Swenshuai.xi     E_SEAL_DSCRMB3_PROT_NONPM, \
270*53ee8cc1Swenshuai.xi     E_SEAL_GPD0_PROT_NONPM, \
271*53ee8cc1Swenshuai.xi     E_SEAL_GPD1_PROT_NONPM, \
272*53ee8cc1Swenshuai.xi     E_SEAL_GOP0G_0_PROT_NONPM, \
273*53ee8cc1Swenshuai.xi     E_SEAL_GOP0G_1_PROT_NONPM, \
274*53ee8cc1Swenshuai.xi     E_SEAL_GOP0G_ST_PROT_NONPM, \
275*53ee8cc1Swenshuai.xi     E_SEAL_GOP1G_0_PROT_NONPM, \
276*53ee8cc1Swenshuai.xi     E_SEAL_GOP1G_1_PROT_NONPM, \
277*53ee8cc1Swenshuai.xi     E_SEAL_GOP1G_ST_PROT_NONPM, \
278*53ee8cc1Swenshuai.xi     E_SEAL_GOP2G_0_PROT_NONPM
279*53ee8cc1Swenshuai.xi 
280*53ee8cc1Swenshuai.xi #define SEAL_NON_PM_GROUP9 \
281*53ee8cc1Swenshuai.xi     E_SEAL_GOP2G_1_PROT_NONPM, \
282*53ee8cc1Swenshuai.xi     E_SEAL_GOP2G_ST_PROT_NONPM, \
283*53ee8cc1Swenshuai.xi     E_SEAL_GOP3G_0_PROT_NONPM, \
284*53ee8cc1Swenshuai.xi     E_SEAL_GOP3G_1_PROT_NONPM, \
285*53ee8cc1Swenshuai.xi     E_SEAL_GOP3G_ST_PROT_NONPM, \
286*53ee8cc1Swenshuai.xi     E_SEAL_GOPD_PROT_NONPM, \
287*53ee8cc1Swenshuai.xi     E_SEAL_SDIO0_PROT_NONPM, \
288*53ee8cc1Swenshuai.xi     E_SEAL_SPARE1_PROT_NONPM, \
289*53ee8cc1Swenshuai.xi     E_SEAL_SPARE3_PROT_NONPM, \
290*53ee8cc1Swenshuai.xi     E_SEAL_MIU_ARB256_PROT_NONPM, \
291*53ee8cc1Swenshuai.xi     E_SEAL_TZPC_NONPM2_NONPM, \
292*53ee8cc1Swenshuai.xi     E_SEAL_GOP4G_0_PROT_NONPM, \
293*53ee8cc1Swenshuai.xi     E_SEAL_MIIC4_PROT_NONPM, \
294*53ee8cc1Swenshuai.xi     E_SEAL_MIIC5_PROT_NONPM, \
295*53ee8cc1Swenshuai.xi     E_SEAL_GOP4G_1_PROT_NONPM, \
296*53ee8cc1Swenshuai.xi     E_SEAL_GOP4G_ST_PROT_NONPM
297*53ee8cc1Swenshuai.xi 
298*53ee8cc1Swenshuai.xi #define SEAL_NON_PM_GROUP10 \
299*53ee8cc1Swenshuai.xi     E_SEAL_COMBO_PHY2_P0_PROT_NONPM, \
300*53ee8cc1Swenshuai.xi     E_SEAL_SDIO1_PROT_NONPM, \
301*53ee8cc1Swenshuai.xi     E_SEAL_SDIO2_PROT_NONPM, \
302*53ee8cc1Swenshuai.xi     E_SEAL_SEC_R2_PROT_NONPM, \
303*53ee8cc1Swenshuai.xi     E_SEAL_SEC_MAU0_PROT_NONPM, \
304*53ee8cc1Swenshuai.xi     E_SEAL_DSCRMB4_PROT_NONPM, \
305*53ee8cc1Swenshuai.xi     E_SEAL_MOBF_PROT_NONPM, \
306*53ee8cc1Swenshuai.xi     E_SEAL_DC_SCL_PROT_NONPM, \
307*53ee8cc1Swenshuai.xi     E_SEAL_JPD1_PROT_NONPM, \
308*53ee8cc1Swenshuai.xi     E_SEAL_JPD2_PROT_NONPM, \
309*53ee8cc1Swenshuai.xi     E_SEAL_JPD3_PROT_NONPM, \
310*53ee8cc1Swenshuai.xi     E_SEAL_CMDQ_PROT_NONPM, \
311*53ee8cc1Swenshuai.xi     E_SEAL_USBBC0_PROT_NONPM, \
312*53ee8cc1Swenshuai.xi     E_SEAL_USBBC1_PROT_NONPM, \
313*53ee8cc1Swenshuai.xi     E_SEAL_USBBC2_PROT_NONPM, \
314*53ee8cc1Swenshuai.xi     E_SEAL_SECURERANGE0_PROT_NONPM
315*53ee8cc1Swenshuai.xi 
316*53ee8cc1Swenshuai.xi #define SEAL_NON_PM_GROUP11 \
317*53ee8cc1Swenshuai.xi     E_SEAL_SECURERANGE1_PROT_NONPM, \
318*53ee8cc1Swenshuai.xi     E_SEAL_TZPC_NONPM_PROT_NONPM, \
319*53ee8cc1Swenshuai.xi     E_SEAL_NFIE3_PROT_NONPM, \
320*53ee8cc1Swenshuai.xi     E_SEAL_DSCRMB5_PROT_NONPM, \
321*53ee8cc1Swenshuai.xi     E_SEAL_TSO1_NONPM, \
322*53ee8cc1Swenshuai.xi     E_SEAL_EMMC_PLL_PROT_NONPM, \
323*53ee8cc1Swenshuai.xi     E_SEAL_MSC_PROT_NONPM, \
324*53ee8cc1Swenshuai.xi     E_SEAL_MSC1_NONPM, \
325*53ee8cc1Swenshuai.xi     E_SEAL_PATGEN_CODEC_PROT_NONPM, \
326*53ee8cc1Swenshuai.xi     E_SEAL_PATGEN_VIV_PROT_NONPM, \
327*53ee8cc1Swenshuai.xi     E_SEAL_PATGEN_CPU_PROT_NONPM, \
328*53ee8cc1Swenshuai.xi     E_SEAL_PATGEN_GPU_PROT_NONPM, \
329*53ee8cc1Swenshuai.xi     E_SEAL_PATGEN_DEMOD_PROT_NONPM, \
330*53ee8cc1Swenshuai.xi     E_SEAL_PATGEN_TSP_PROT_NONPM, \
331*53ee8cc1Swenshuai.xi     E_SEAL_PATGEN_DVI_PROT_NONPM, \
332*53ee8cc1Swenshuai.xi     E_SEAL_PATGEN_EVD_PROT_NONPM
333*53ee8cc1Swenshuai.xi 
334*53ee8cc1Swenshuai.xi #define SEAL_NON_PM_GROUP12 \
335*53ee8cc1Swenshuai.xi     E_SEAL_PATGEN_SC0_PROT_NONPM, \
336*53ee8cc1Swenshuai.xi     E_SEAL_PATGEN_SC1_PROT_NONPM, \
337*53ee8cc1Swenshuai.xi     E_SEAL_PATGEN_SC2_PROT_NONPM, \
338*53ee8cc1Swenshuai.xi     E_SEAL_PAD_MUX_NONPM, \
339*53ee8cc1Swenshuai.xi     E_SEAL_COMB1_PROT_NONPM, \
340*53ee8cc1Swenshuai.xi     E_SEAL_COMB2_PROT_NONPM, \
341*53ee8cc1Swenshuai.xi     E_SEAL_COMB3_PROT_NONPM, \
342*53ee8cc1Swenshuai.xi     E_SEAL_COMB4_PROT_NONPM, \
343*53ee8cc1Swenshuai.xi     E_SEAL_COMB5_PROT_NONPM, \
344*53ee8cc1Swenshuai.xi     E_SEAL_MSPI0_PROT_NONPM, \
345*53ee8cc1Swenshuai.xi     E_SEAL_MSPI1_PROT_NONPM, \
346*53ee8cc1Swenshuai.xi     E_SEAL_MSPI_MCARD_PROT_NONPM, \
347*53ee8cc1Swenshuai.xi     E_SEAL_DMD_MCU2_PROT_NONPM, \
348*53ee8cc1Swenshuai.xi     E_SEAL_VIVALDI6_PROT_NONPM, \
349*53ee8cc1Swenshuai.xi     E_SEAL_VIVALDI7_PROT_NONPM, \
350*53ee8cc1Swenshuai.xi     E_SEAL_GMAC0_PROT_NONPM
351*53ee8cc1Swenshuai.xi 
352*53ee8cc1Swenshuai.xi #define SEAL_NON_PM_GROUP13 \
353*53ee8cc1Swenshuai.xi     E_SEAL_GMAC1_PROT_NONPM, \
354*53ee8cc1Swenshuai.xi     E_SEAL_GMAC2_PROT_NONPM, \
355*53ee8cc1Swenshuai.xi     E_SEAL_GMAC3_PROT_NONPM, \
356*53ee8cc1Swenshuai.xi     E_SEAL_GMAC4_PROT_NONPM, \
357*53ee8cc1Swenshuai.xi     E_SEAL_PCM2_PROT_NONPM, \
358*53ee8cc1Swenshuai.xi     E_SEAL_TSP3_PROT_NONPM, \
359*53ee8cc1Swenshuai.xi     E_SEAL_EVD_NONPM, \
360*53ee8cc1Swenshuai.xi     E_SEAL_DYN_SCL_PROT_NONPM, \
361*53ee8cc1Swenshuai.xi     E_SEAL_VP9_TOP_PROT_NONPM, \
362*53ee8cc1Swenshuai.xi     E_SEAL_GPU_PLL_PROT_NONPM, \
363*53ee8cc1Swenshuai.xi     E_SEAL_MIU_ARB_SC_NONPM, \
364*53ee8cc1Swenshuai.xi     E_SEAL_MIU_ARB2_SC_NONPM, \
365*53ee8cc1Swenshuai.xi     E_SEAL_CODEC_MRQ_PROT_NONPM, \
366*53ee8cc1Swenshuai.xi     E_SEAL_MIU_ARB_NONPM, \
367*53ee8cc1Swenshuai.xi     E_SEAL_MIU_ATOP2_PROT_NONPM, \
368*53ee8cc1Swenshuai.xi     E_SEAL_MIU_ARB2_NONPM
369*53ee8cc1Swenshuai.xi 
370*53ee8cc1Swenshuai.xi #define SEAL_NON_PM_GROUP14 \
371*53ee8cc1Swenshuai.xi     E_SEAL_GE2_NONPM, \
372*53ee8cc1Swenshuai.xi     E_SEAL_GE3_NONPM, \
373*53ee8cc1Swenshuai.xi     E_SEAL_AU_R2_1_NONPM, \
374*53ee8cc1Swenshuai.xi     E_SEAL_AU_MAU_1_NONPM, \
375*53ee8cc1Swenshuai.xi     E_SEAL_AU_GDMA_1_NONPM, \
376*53ee8cc1Swenshuai.xi     E_SEAL_VD_EVD_R2_NONPM, \
377*53ee8cc1Swenshuai.xi     E_SEAL_MAU_EVD_NONPM, \
378*53ee8cc1Swenshuai.xi     E_SEAL_HIREG_EVD_PROT_NONPM, \
379*53ee8cc1Swenshuai.xi     E_SEAL_MAU1_LV2_0_NONPM, \
380*53ee8cc1Swenshuai.xi     E_SEAL_MAU1_LV2_1_NONPM, \
381*53ee8cc1Swenshuai.xi     E_SEAL_MAU_EVD_LV2_0_NONPM, \
382*53ee8cc1Swenshuai.xi     E_SEAL_MAU_EVD_LV2_1_NONPM, \
383*53ee8cc1Swenshuai.xi     E_SEAL_SEC_MAU_LV2_0_NONPM, \
384*53ee8cc1Swenshuai.xi     E_SEAL_SEC_MAU_LV2_1_NONPM, \
385*53ee8cc1Swenshuai.xi     E_SEAL_TSP5_NONPM, \
386*53ee8cc1Swenshuai.xi     E_SEAL_VIVALDI8_PROT_NONPM
387*53ee8cc1Swenshuai.xi 
388*53ee8cc1Swenshuai.xi #define SEAL_NON_PM_GROUP15 \
389*53ee8cc1Swenshuai.xi     E_SEAL_VIVALDI9_PROT_NONPM, \
390*53ee8cc1Swenshuai.xi     E_SEAL_VIVALDIa_0_PROT_NONPM, \
391*53ee8cc1Swenshuai.xi     E_SEAL_VIVALDIa_1_PROT_NONPM, \
392*53ee8cc1Swenshuai.xi     E_SEAL_VIVALDIa_2_PROT_NONPM, \
393*53ee8cc1Swenshuai.xi     E_SEAL_VIVALDIa_3_PROT_NONPM, \
394*53ee8cc1Swenshuai.xi     E_SEAL_VIVALDIb_0_PROT_NONPM, \
395*53ee8cc1Swenshuai.xi     E_SEAL_VIVALDIb_1_PROT_NONPM, \
396*53ee8cc1Swenshuai.xi     E_SEAL_VIVALDIb_2_PROT_NONPM, \
397*53ee8cc1Swenshuai.xi     E_SEAL_VIVALDIb_3_PROT_NONPM , \
398*53ee8cc1Swenshuai.xi     E_SEAL_COMBO_PHY0_P0_PROT_NONPM, \
399*53ee8cc1Swenshuai.xi     E_SEAL_COMBO_PHY1_P0_PROT_NONPM, \
400*53ee8cc1Swenshuai.xi     E_SEAL_DVI_DTOP_DUAL_P0_PROT_NONPM, \
401*53ee8cc1Swenshuai.xi     E_SEAL_DVI_RSV_DUAL_P0_PROT_NONPM, \
402*53ee8cc1Swenshuai.xi     E_SEAL_HDCP_DUAL_P0_PROT_NONPM, \
403*53ee8cc1Swenshuai.xi     E_SEAL_HDMI_DUAL_0_PROT_NONPM, \
404*53ee8cc1Swenshuai.xi     E_SEAL_HDMI2_DUAL_0_PROT_NONPM
405*53ee8cc1Swenshuai.xi 
406*53ee8cc1Swenshuai.xi #define SEAL_NON_PM_GROUP16 \
407*53ee8cc1Swenshuai.xi     E_SEAL_HDMI3_DUAL_0_PROT_NONPM, \
408*53ee8cc1Swenshuai.xi     E_SEAL_HDCPKEY_PROT_NONPM, \
409*53ee8cc1Swenshuai.xi     E_SEAL_COMBO_GP_TOP_PROT_NONPM, \
410*53ee8cc1Swenshuai.xi     E_SEAL_SECURE_TZPC_PROT_NONPM, \
411*53ee8cc1Swenshuai.xi     E_SEAL_X32_GPUAPB0_NONPM, \
412*53ee8cc1Swenshuai.xi     E_SEAL_X32_GPUAPB1_NONPM, \
413*53ee8cc1Swenshuai.xi     E_SEAL_X32_GPUAPB2_NONPM, \
414*53ee8cc1Swenshuai.xi     E_SEAL_X32_EMAC0_NONPM, \
415*53ee8cc1Swenshuai.xi     E_SEAL_X32_EMAC1_NONPM, \
416*53ee8cc1Swenshuai.xi     E_SEAL_X32_EMAC2_NONPM, \
417*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
418*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
419*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
420*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
421*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
422*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY
423*53ee8cc1Swenshuai.xi 
424*53ee8cc1Swenshuai.xi #define SEAL_NON_PM_GROUP17 \
425*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
426*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
427*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
428*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
429*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
430*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
431*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
432*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
433*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
434*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
435*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
436*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
437*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
438*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
439*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
440*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY
441*53ee8cc1Swenshuai.xi 
442*53ee8cc1Swenshuai.xi #define SEAL_NON_PM_GROUP18 \
443*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
444*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
445*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
446*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
447*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
448*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
449*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
450*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
451*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
452*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
453*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
454*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
455*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
456*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
457*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
458*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY
459*53ee8cc1Swenshuai.xi 
460*53ee8cc1Swenshuai.xi #define SEAL_NON_PM_GROUP19 \
461*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
462*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
463*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
464*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
465*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
466*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
467*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
468*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
469*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
470*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
471*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
472*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
473*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
474*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
475*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
476*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY
477*53ee8cc1Swenshuai.xi 
478*53ee8cc1Swenshuai.xi #define SEAL_NON_PM_GROUP20 \
479*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
480*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
481*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
482*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
483*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
484*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
485*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
486*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
487*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
488*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
489*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
490*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
491*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
492*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
493*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
494*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY
495*53ee8cc1Swenshuai.xi 
496*53ee8cc1Swenshuai.xi #define SEAL_NON_PM_GROUP21 \
497*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
498*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
499*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
500*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
501*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
502*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
503*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
504*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
505*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
506*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
507*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
508*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
509*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
510*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
511*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
512*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY
513*53ee8cc1Swenshuai.xi 
514*53ee8cc1Swenshuai.xi #define SEAL_NON_PM_GROUP22 \
515*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
516*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
517*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
518*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
519*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
520*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
521*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
522*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
523*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
524*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
525*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
526*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
527*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
528*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
529*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
530*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY
531*53ee8cc1Swenshuai.xi 
532*53ee8cc1Swenshuai.xi #define SEAL_NON_PM_GROUP23 \
533*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
534*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
535*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
536*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
537*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
538*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
539*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
540*53ee8cc1Swenshuai.xi     E_SEAL_DDI_1_PROT_NONPM, \
541*53ee8cc1Swenshuai.xi     E_SEAL_DDI_0_PROT_NONPM, \
542*53ee8cc1Swenshuai.xi     E_SEAL_DIP_1_PROT_NONPM, \
543*53ee8cc1Swenshuai.xi     E_SEAL_DIP_0_PROT_NONPM, \
544*53ee8cc1Swenshuai.xi     E_SEAL_PDW1_PROT_NONPM, \
545*53ee8cc1Swenshuai.xi     E_SEAL_PDW0_PROT_NONPM, \
546*53ee8cc1Swenshuai.xi     E_SEAL_DWIN1_PROT_NONPM, \
547*53ee8cc1Swenshuai.xi     E_SEAL_DWIN0_PROT_NONPM, \
548*53ee8cc1Swenshuai.xi     E_SEAL_DIP_PROT_NONPM
549*53ee8cc1Swenshuai.xi 
550*53ee8cc1Swenshuai.xi //PM IP group
551*53ee8cc1Swenshuai.xi #define SEAL_PM_GROUP0 \
552*53ee8cc1Swenshuai.xi     E_SEAL_RIU_DBG_PROT_PM, \
553*53ee8cc1Swenshuai.xi     E_SEAL_MENULOAD_PROT_PM, \
554*53ee8cc1Swenshuai.xi     E_SEAL_GDMA_PROT_PM, \
555*53ee8cc1Swenshuai.xi     E_SEAL_DDC_PROT_PM, \
556*53ee8cc1Swenshuai.xi     E_SEAL_PM_PATGEN_PROT_PM, \
557*53ee8cc1Swenshuai.xi     E_SEAL_PM_POR_PROT_PM, \
558*53ee8cc1Swenshuai.xi     E_SEAL_ISP_PROT_PM, \
559*53ee8cc1Swenshuai.xi     E_SEAL_FSP_PROT_PM, \
560*53ee8cc1Swenshuai.xi     E_SEAL_QSPI_PROT_PM, \
561*53ee8cc1Swenshuai.xi     E_SEAL_PM_SLEEP_PROT_PM, \
562*53ee8cc1Swenshuai.xi     E_SEAL_PM_GPIO_PROT_PM, \
563*53ee8cc1Swenshuai.xi     E_SEAL_MCU_PROT_PM, \
564*53ee8cc1Swenshuai.xi     E_SEAL_PM_CEC_PROT_PM, \
565*53ee8cc1Swenshuai.xi     E_SEAL_PM_RTC0_PROT_PM, \
566*53ee8cc1Swenshuai.xi     E_SEAL_PM_RTC1_PROT_PM, \
567*53ee8cc1Swenshuai.xi     E_SEAL_PM_SAR_PROT_PM
568*53ee8cc1Swenshuai.xi 
569*53ee8cc1Swenshuai.xi #define SEAL_PM_GROUP1 \
570*53ee8cc1Swenshuai.xi     E_SEAL_PM_AV_LINK_PROT_PM, \
571*53ee8cc1Swenshuai.xi     E_SEAL_PM_TOP_PROT_PM, \
572*53ee8cc1Swenshuai.xi     E_SEAL_MHL_CBUS_PROT_PM, \
573*53ee8cc1Swenshuai.xi     E_SEAL_EFUSE_PROT_PM, \
574*53ee8cc1Swenshuai.xi     E_SEAL_IRQ_PROT_PM, \
575*53ee8cc1Swenshuai.xi     E_SEAL_CACHE_PROT_PM, \
576*53ee8cc1Swenshuai.xi     E_SEAL_XDMIU_PROT_PM, \
577*53ee8cc1Swenshuai.xi     E_SEAL_PM_MISC_PROT_PM, \
578*53ee8cc1Swenshuai.xi     E_SEAL_PM_MHL_CBUS_PROT_PM, \
579*53ee8cc1Swenshuai.xi     E_SEAL_WDT_PROT_PM, \
580*53ee8cc1Swenshuai.xi     E_SEAL_TIMER0_PROT_PM, \
581*53ee8cc1Swenshuai.xi     E_SEAL_TIMER1_PROT_PM, \
582*53ee8cc1Swenshuai.xi     E_SEAL_TIMER2_PROT_PM, \
583*53ee8cc1Swenshuai.xi     E_SEAL_ALBANY0_PROT_PM, \
584*53ee8cc1Swenshuai.xi     E_SEAL_ALBANY1_PROT_PM, \
585*53ee8cc1Swenshuai.xi     E_SEAL_ALBANY2_PROT_PM
586*53ee8cc1Swenshuai.xi 
587*53ee8cc1Swenshuai.xi #define SEAL_PM_GROUP2 \
588*53ee8cc1Swenshuai.xi     E_SEAL_DID_KEY_PROT_PM, \
589*53ee8cc1Swenshuai.xi     E_SEAL_TZPC_PROT_PM, \
590*53ee8cc1Swenshuai.xi     E_SEAL_REG_PIU_MISC_0_PROT_PM, \
591*53ee8cc1Swenshuai.xi     E_SEAL_IR_PROT_PM, \
592*53ee8cc1Swenshuai.xi     E_SEAL_PM_SPARE0_PROT_PM, \
593*53ee8cc1Swenshuai.xi     E_SEAL_PM_SPARE1_PROT_PM, \
594*53ee8cc1Swenshuai.xi     E_SEAL_SCDC_0_PROT_PM, \
595*53ee8cc1Swenshuai.xi     E_SEAL_SCDC_1_PROT_PM, \
596*53ee8cc1Swenshuai.xi     E_SEAL_SCDC_2_PROT_PM, \
597*53ee8cc1Swenshuai.xi     E_SEAL_SCDC_3_PROT_PM, \
598*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
599*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
600*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
601*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
602*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY, \
603*53ee8cc1Swenshuai.xi     E_SEAL_DUMMY
604*53ee8cc1Swenshuai.xi 
605*53ee8cc1Swenshuai.xi //processor group
606*53ee8cc1Swenshuai.xi #define SEAL_PROCESSOR_GROUP0 \
607*53ee8cc1Swenshuai.xi     E_SEAL_DBBUS, \
608*53ee8cc1Swenshuai.xi     E_SEAL_MCU51, \
609*53ee8cc1Swenshuai.xi     E_SEAL_CPU2, \
610*53ee8cc1Swenshuai.xi     E_SEAL_VD_R2, \
611*53ee8cc1Swenshuai.xi     E_SEAL_SECURE_R2, \
612*53ee8cc1Swenshuai.xi     E_SEAL_SC, \
613*53ee8cc1Swenshuai.xi     E_SEAL_CMDQ, \
614*53ee8cc1Swenshuai.xi     E_SEAL_HEMCU ,\
615*53ee8cc1Swenshuai.xi     E_SEAL_PROCESSOR_NUM,\
616*53ee8cc1Swenshuai.xi 
617*53ee8cc1Swenshuai.xi //lock group
618*53ee8cc1Swenshuai.xi #define SEAL_LOCK_GROUP_DUMMY \
619*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
620*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
621*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
622*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
623*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
624*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
625*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
626*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
627*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
628*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
629*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
630*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
631*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
632*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
633*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
634*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY
635*53ee8cc1Swenshuai.xi 
636*53ee8cc1Swenshuai.xi #define SEAL_LOCK_GROUP0 \
637*53ee8cc1Swenshuai.xi     E_SEAL_SC_WP_DIPW, \
638*53ee8cc1Swenshuai.xi     E_SEAL_SC_RP_DIPW, \
639*53ee8cc1Swenshuai.xi     E_SEAL_SC_WP_DIPR, \
640*53ee8cc1Swenshuai.xi     E_SEAL_SC_RP_DIPR, \
641*53ee8cc1Swenshuai.xi     E_SEAL_AUDIO_LCL_R2_WR_PROTN_0, \
642*53ee8cc1Swenshuai.xi     E_SEAL_AUDIO_LCL_R2_WR_PROTN_1, \
643*53ee8cc1Swenshuai.xi     E_SEAL_AUDIO_LCL_R2_WR_PROTN_2, \
644*53ee8cc1Swenshuai.xi     E_SEAL_AUDIO_LCL_R2_WR_PROTN_3, \
645*53ee8cc1Swenshuai.xi     E_SEAL_AUDIO_SCL_R2_WR_PROTN_0, \
646*53ee8cc1Swenshuai.xi     E_SEAL_AUDIO_SCL_R2_WR_PROTN_1, \
647*53ee8cc1Swenshuai.xi     E_SEAL_AUDIO_SCL_R2_WR_PROTN_2, \
648*53ee8cc1Swenshuai.xi     E_SEAL_AUDIO_SCL_R2_WR_PROTN_3, \
649*53ee8cc1Swenshuai.xi     E_SEAL_SECURE_R2_WR_PROTN_0, \
650*53ee8cc1Swenshuai.xi     E_SEAL_SECURE_R2_WR_PROTN_1, \
651*53ee8cc1Swenshuai.xi     E_SEAL_SECURE_R2_WR_PROTN_2, \
652*53ee8cc1Swenshuai.xi     E_SEAL_SECURE_R2_WR_PROTN_3
653*53ee8cc1Swenshuai.xi 
654*53ee8cc1Swenshuai.xi #define SEAL_LOCK_GROUP1 \
655*53ee8cc1Swenshuai.xi     E_SEAL_CIPHERENG_WP_SYSKEY, \
656*53ee8cc1Swenshuai.xi     E_SEAL_CIPHERENG_RP_SYSKEY, \
657*53ee8cc1Swenshuai.xi     E_SEAL_DSCRMB_WP_RIV0, \
658*53ee8cc1Swenshuai.xi     E_SEAL_DSCRMB_RP_RIV0, \
659*53ee8cc1Swenshuai.xi     E_SEAL_DSCRMB_WP_RIV1, \
660*53ee8cc1Swenshuai.xi     E_SEAL_DSCRMB_RP_RIV1, \
661*53ee8cc1Swenshuai.xi     E_SEAL_DSCRMB_WP_WDATA, \
662*53ee8cc1Swenshuai.xi     E_SEAL_DSCRMB_RP_WDATA, \
663*53ee8cc1Swenshuai.xi     E_SEAL_DSCRMB_WP_RIV2, \
664*53ee8cc1Swenshuai.xi     E_SEAL_DSCRMB_RP_RIV2, \
665*53ee8cc1Swenshuai.xi     E_SEAL_DSCRMB_WP_RIV3, \
666*53ee8cc1Swenshuai.xi     E_SEAL_DSCRMB_RP_RIV3, \
667*53ee8cc1Swenshuai.xi     E_SEAL_SC2_WP_SCM_M, \
668*53ee8cc1Swenshuai.xi     E_SEAL_SC2_RP_SCM_M, \
669*53ee8cc1Swenshuai.xi     E_SEAL_MVOP_WP_TLB, \
670*53ee8cc1Swenshuai.xi     E_SEAL_AUDIO_PAS_PROTN
671*53ee8cc1Swenshuai.xi 
672*53ee8cc1Swenshuai.xi #define SEAL_LOCK_GROUP2 \
673*53ee8cc1Swenshuai.xi     E_SEAL_DSCRMB_RP_RDATA, \
674*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
675*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
676*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
677*53ee8cc1Swenshuai.xi     E_SEAL_RNG_PROTECT, \
678*53ee8cc1Swenshuai.xi     E_SEAL_RSA_PROTECT, \
679*53ee8cc1Swenshuai.xi     E_SEAL_SHA_PROTECT, \
680*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
681*53ee8cc1Swenshuai.xi     E_SEAL_EVD_R2_WR_PROTN_0, \
682*53ee8cc1Swenshuai.xi     E_SEAL_EVD_R2_WR_PROTN_1, \
683*53ee8cc1Swenshuai.xi     E_SEAL_EVD_R2_WR_PROTN_2, \
684*53ee8cc1Swenshuai.xi     E_SEAL_EVD_R2_WR_PROTN_3, \
685*53ee8cc1Swenshuai.xi     E_SEAL_HVD_R2_WR_PROTN_0, \
686*53ee8cc1Swenshuai.xi     E_SEAL_HVD_R2_WR_PROTN_1, \
687*53ee8cc1Swenshuai.xi     E_SEAL_HVD_R2_WR_PROTN_2, \
688*53ee8cc1Swenshuai.xi     E_SEAL_HVD_R2_WR_PROTN_3
689*53ee8cc1Swenshuai.xi 
690*53ee8cc1Swenshuai.xi #define SEAL_LOCK_GROUP3 \
691*53ee8cc1Swenshuai.xi     E_SEAL_HVD_ES0_BUF, \
692*53ee8cc1Swenshuai.xi     E_SEAL_HVD_ES1_BUF, \
693*53ee8cc1Swenshuai.xi     E_SEAL_HVD_ES2_BUF, \
694*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
695*53ee8cc1Swenshuai.xi     E_SEAL_MFE0_ES_BUF, \
696*53ee8cc1Swenshuai.xi     E_SEAL_MVD_WR_PROTN_0, \
697*53ee8cc1Swenshuai.xi     E_SEAL_MVD_WR_PROTN_1, \
698*53ee8cc1Swenshuai.xi     E_SEAL_MVD_WR_PROTN_2, \
699*53ee8cc1Swenshuai.xi     E_SEAL_EVD_0_WR_PROTN_0, \
700*53ee8cc1Swenshuai.xi     E_SEAL_EVD_1_WR_PROTN_0, \
701*53ee8cc1Swenshuai.xi     E_SEAL_MHEG5_WR_PROTN_0, \
702*53ee8cc1Swenshuai.xi     E_SEAL_AUDIO_DSP_ES_PROTN, \
703*53ee8cc1Swenshuai.xi     E_SEAL_AUDIO_DSP_CACHE_PROTN, \
704*53ee8cc1Swenshuai.xi     E_SEAL_EVD_0_WR_PROTN_1, \
705*53ee8cc1Swenshuai.xi     E_SEAL_EVD_1_WR_PROTN_1, \
706*53ee8cc1Swenshuai.xi     E_SEAL_VP9_TOP
707*53ee8cc1Swenshuai.xi 
708*53ee8cc1Swenshuai.xi #define SEAL_LOCK_GROUP4 \
709*53ee8cc1Swenshuai.xi     E_SEAL_TSO_WP_TSOFI, \
710*53ee8cc1Swenshuai.xi     E_SEAL_TSO_RP_TSOFI, \
711*53ee8cc1Swenshuai.xi     E_SEAL_MMFI_WP_MMFI0, \
712*53ee8cc1Swenshuai.xi     E_SEAL_MMFI_RP_MMFI0, \
713*53ee8cc1Swenshuai.xi     E_SEAL_MMFI_WP_MMFI1, \
714*53ee8cc1Swenshuai.xi     E_SEAL_MMFI_RP_MMFI1, \
715*53ee8cc1Swenshuai.xi     E_SEAL_TSP0_WP_PVR, \
716*53ee8cc1Swenshuai.xi     E_SEAL_TSP0_RP_PVR, \
717*53ee8cc1Swenshuai.xi     E_SEAL_TSP0_WP_PVR1, \
718*53ee8cc1Swenshuai.xi     E_SEAL_TSP0_RP_PVR1, \
719*53ee8cc1Swenshuai.xi     E_SEAL_TSP0_WP_FILEIN, \
720*53ee8cc1Swenshuai.xi     E_SEAL_TSP0_RP_FILEIN, \
721*53ee8cc1Swenshuai.xi     E_SEAL_TSP0_WP_QMEM, \
722*53ee8cc1Swenshuai.xi     E_SEAL_TSP0_RP_QMEM, \
723*53ee8cc1Swenshuai.xi     E_SEAL_TSP0_WP_FW, \
724*53ee8cc1Swenshuai.xi     E_SEAL_TSP0_RP_FW
725*53ee8cc1Swenshuai.xi 
726*53ee8cc1Swenshuai.xi #define SEAL_LOCK_GROUP5 \
727*53ee8cc1Swenshuai.xi     E_SEAL_VE_WP, \
728*53ee8cc1Swenshuai.xi     E_SEAL_VE_RP, \
729*53ee8cc1Swenshuai.xi     E_SEAL_SC_WP_OD, \
730*53ee8cc1Swenshuai.xi     E_SEAL_SC_RP_OD, \
731*53ee8cc1Swenshuai.xi     E_SEAL_SC_WP_SCM_M, \
732*53ee8cc1Swenshuai.xi     E_SEAL_SC_RP_SCM_M, \
733*53ee8cc1Swenshuai.xi     E_SEAL_SC_WP_SCM_S, \
734*53ee8cc1Swenshuai.xi     E_SEAL_SC_RP_SCM_S, \
735*53ee8cc1Swenshuai.xi     E_SEAL_SC_WP_PDW0, \
736*53ee8cc1Swenshuai.xi     E_SEAL_SC_RP_PDW0, \
737*53ee8cc1Swenshuai.xi     E_SEAL_SC_WP_PDW1, \
738*53ee8cc1Swenshuai.xi     E_SEAL_SC_RP_PDW1, \
739*53ee8cc1Swenshuai.xi     E_SEAL_SC_WP_OPW, \
740*53ee8cc1Swenshuai.xi     E_SEAL_SC_RP_OPW, \
741*53ee8cc1Swenshuai.xi     E_SEAL_GOPD_PROTN, \
742*53ee8cc1Swenshuai.xi     E_SEAL_AUDIO_AL_PROTN
743*53ee8cc1Swenshuai.xi 
744*53ee8cc1Swenshuai.xi #define SEAL_LOCK_GROUP6 \
745*53ee8cc1Swenshuai.xi     E_SEAL_GE0_SB_PROTN, \
746*53ee8cc1Swenshuai.xi     E_SEAL_GE0_DB_PROTN, \
747*53ee8cc1Swenshuai.xi     E_SEAL_GE1_SB_PROTN, \
748*53ee8cc1Swenshuai.xi     E_SEAL_GE1_DB_PROTN, \
749*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
750*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
751*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
752*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
753*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
754*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
755*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
756*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
757*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
758*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
759*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
760*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY
761*53ee8cc1Swenshuai.xi 
762*53ee8cc1Swenshuai.xi #define SEAL_LOCK_GROUP7 \
763*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
764*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
765*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
766*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
767*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
768*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
769*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
770*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
771*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
772*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
773*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
774*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
775*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
776*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
777*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
778*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY
779*53ee8cc1Swenshuai.xi 
780*53ee8cc1Swenshuai.xi #define SEAL_LOCK_GROUP8 \
781*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
782*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
783*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
784*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
785*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
786*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
787*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
788*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
789*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
790*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
791*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
792*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
793*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
794*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
795*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
796*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY
797*53ee8cc1Swenshuai.xi 
798*53ee8cc1Swenshuai.xi #define SEAL_LOCK_GROUP9 \
799*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
800*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
801*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
802*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
803*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
804*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
805*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
806*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
807*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
808*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
809*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
810*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
811*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
812*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
813*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
814*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY
815*53ee8cc1Swenshuai.xi 
816*53ee8cc1Swenshuai.xi #define SEAL_LOCK_GROUP10 \
817*53ee8cc1Swenshuai.xi     E_SEAL_FCIE_WR_PROT_ENABLE_0, \
818*53ee8cc1Swenshuai.xi     E_SEAL_FCIE_WR_PROT_ENABLE_1, \
819*53ee8cc1Swenshuai.xi     E_SEAL_FCIE_WR_PROT_ENABLE_2, \
820*53ee8cc1Swenshuai.xi     E_SEAL_FCIE_WR_PROT_ENABLE_3, \
821*53ee8cc1Swenshuai.xi     E_SEAL_HDCP_RIU_R_PROTN, \
822*53ee8cc1Swenshuai.xi     E_SEAL_HDCP_XIU_R_PROTN, \
823*53ee8cc1Swenshuai.xi     E_SEAL_HDCP_RIU_W_PROTN, \
824*53ee8cc1Swenshuai.xi     E_SEAL_HDCP_XIU_W_PROTN, \
825*53ee8cc1Swenshuai.xi     E_SEAL_FCIE_WR_PROT_0_LOCK, \
826*53ee8cc1Swenshuai.xi     E_SEAL_FCIE_WR_PROT_1_LOCK, \
827*53ee8cc1Swenshuai.xi     E_SEAL_FCIE_WR_PROT_2_LOCK, \
828*53ee8cc1Swenshuai.xi     E_SEAL_FCIE_WR_PROT_3_LOCK, \
829*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
830*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
831*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY, \
832*53ee8cc1Swenshuai.xi     E_SEAL_LOCK_DUMMY
833*53ee8cc1Swenshuai.xi 
834*53ee8cc1Swenshuai.xi 
835*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
836*53ee8cc1Swenshuai.xi //  Local Structures
837*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
838*53ee8cc1Swenshuai.xi const eSeal_IP NonPmIpTbl[SEAL_NONPM_TBL_IP_NUM] =
839*53ee8cc1Swenshuai.xi {
840*53ee8cc1Swenshuai.xi     SEAL_NON_PM_GROUP0, SEAL_NON_PM_GROUP1, SEAL_NON_PM_GROUP2,
841*53ee8cc1Swenshuai.xi     SEAL_NON_PM_GROUP3, SEAL_NON_PM_GROUP4, SEAL_NON_PM_GROUP5,
842*53ee8cc1Swenshuai.xi     SEAL_NON_PM_GROUP6, SEAL_NON_PM_GROUP7, SEAL_NON_PM_GROUP8,
843*53ee8cc1Swenshuai.xi     SEAL_NON_PM_GROUP9, SEAL_NON_PM_GROUP10, SEAL_NON_PM_GROUP11,
844*53ee8cc1Swenshuai.xi     SEAL_NON_PM_GROUP12, SEAL_NON_PM_GROUP13, SEAL_NON_PM_GROUP14,
845*53ee8cc1Swenshuai.xi     SEAL_NON_PM_GROUP15, SEAL_NON_PM_GROUP16, SEAL_NON_PM_GROUP17,
846*53ee8cc1Swenshuai.xi     SEAL_NON_PM_GROUP18, SEAL_NON_PM_GROUP19, SEAL_NON_PM_GROUP20,
847*53ee8cc1Swenshuai.xi     SEAL_NON_PM_GROUP21, SEAL_NON_PM_GROUP22, SEAL_NON_PM_GROUP23
848*53ee8cc1Swenshuai.xi };
849*53ee8cc1Swenshuai.xi 
850*53ee8cc1Swenshuai.xi const eSeal_IP PmIpTbl[SEAL_PM_TBL_IP_NUM] =
851*53ee8cc1Swenshuai.xi {
852*53ee8cc1Swenshuai.xi     SEAL_PM_GROUP0, SEAL_PM_GROUP1, SEAL_PM_GROUP2
853*53ee8cc1Swenshuai.xi };
854*53ee8cc1Swenshuai.xi 
855*53ee8cc1Swenshuai.xi const eSeal_ProcessorId ProcessorTbl[SEAL_TBL_PROCESSOR_NUM] =
856*53ee8cc1Swenshuai.xi {
857*53ee8cc1Swenshuai.xi     SEAL_PROCESSOR_GROUP0
858*53ee8cc1Swenshuai.xi };
859*53ee8cc1Swenshuai.xi 
860*53ee8cc1Swenshuai.xi const eSeal_Lock LockTbl[SEAL_TBL_LOCK_NUM] =
861*53ee8cc1Swenshuai.xi {
862*53ee8cc1Swenshuai.xi     SEAL_LOCK_GROUP10, /*0x64*/
863*53ee8cc1Swenshuai.xi     SEAL_LOCK_GROUP_DUMMY,
864*53ee8cc1Swenshuai.xi     SEAL_LOCK_GROUP_DUMMY,
865*53ee8cc1Swenshuai.xi     SEAL_LOCK_GROUP_DUMMY,
866*53ee8cc1Swenshuai.xi     SEAL_LOCK_GROUP_DUMMY,
867*53ee8cc1Swenshuai.xi     SEAL_LOCK_GROUP_DUMMY,
868*53ee8cc1Swenshuai.xi     SEAL_LOCK_GROUP_DUMMY,
869*53ee8cc1Swenshuai.xi     SEAL_LOCK_GROUP_DUMMY,
870*53ee8cc1Swenshuai.xi     SEAL_LOCK_GROUP_DUMMY,
871*53ee8cc1Swenshuai.xi     SEAL_LOCK_GROUP_DUMMY,
872*53ee8cc1Swenshuai.xi     SEAL_LOCK_GROUP_DUMMY,
873*53ee8cc1Swenshuai.xi     SEAL_LOCK_GROUP_DUMMY,
874*53ee8cc1Swenshuai.xi     SEAL_LOCK_GROUP_DUMMY,
875*53ee8cc1Swenshuai.xi     SEAL_LOCK_GROUP_DUMMY,
876*53ee8cc1Swenshuai.xi     SEAL_LOCK_GROUP_DUMMY,
877*53ee8cc1Swenshuai.xi     SEAL_LOCK_GROUP_DUMMY,
878*53ee8cc1Swenshuai.xi     SEAL_LOCK_GROUP0, /*0x74*/
879*53ee8cc1Swenshuai.xi     SEAL_LOCK_GROUP1,
880*53ee8cc1Swenshuai.xi     SEAL_LOCK_GROUP2,
881*53ee8cc1Swenshuai.xi     SEAL_LOCK_GROUP3,
882*53ee8cc1Swenshuai.xi     SEAL_LOCK_GROUP4,
883*53ee8cc1Swenshuai.xi     SEAL_LOCK_GROUP5,
884*53ee8cc1Swenshuai.xi     SEAL_LOCK_GROUP6,
885*53ee8cc1Swenshuai.xi     SEAL_LOCK_GROUP7,
886*53ee8cc1Swenshuai.xi     SEAL_LOCK_GROUP8,
887*53ee8cc1Swenshuai.xi     SEAL_LOCK_GROUP9
888*53ee8cc1Swenshuai.xi };
889*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
890*53ee8cc1Swenshuai.xi //  Global Variables
891*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
892*53ee8cc1Swenshuai.xi 
893*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
894*53ee8cc1Swenshuai.xi //  Local Variables
895*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
896*53ee8cc1Swenshuai.xi static MS_VIRT _gSEAL_NonPmMapBase = 0;
897*53ee8cc1Swenshuai.xi static MS_VIRT _gSEAL_PmMapBase = 0;
898*53ee8cc1Swenshuai.xi 
899*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
900*53ee8cc1Swenshuai.xi //  Debug Functions
901*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
902*53ee8cc1Swenshuai.xi 
903*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
904*53ee8cc1Swenshuai.xi //  Local Functions
905*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
906*53ee8cc1Swenshuai.xi 
907*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
908*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_SEAL_NonPmReadByte
909*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description: read 1 Byte data
910*53ee8cc1Swenshuai.xi /// @param <IN>         \b u32RegAddr: register address
911*53ee8cc1Swenshuai.xi /// @param <OUT>        \b None :
912*53ee8cc1Swenshuai.xi /// @param <RET>        \b MS_U8
913*53ee8cc1Swenshuai.xi /// @param <GLOBAL>     \b None :
914*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SEAL_NonPmReadByte(MS_U32 u32RegAddr)915*53ee8cc1Swenshuai.xi MS_U8 HAL_SEAL_NonPmReadByte(MS_U32 u32RegAddr)
916*53ee8cc1Swenshuai.xi {
917*53ee8cc1Swenshuai.xi     return ((volatile MS_U8*)(_gSEAL_NonPmMapBase))[(u32RegAddr << 1) - (u32RegAddr & 1)];
918*53ee8cc1Swenshuai.xi }
919*53ee8cc1Swenshuai.xi 
920*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
921*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_SEAL_PmReadByte
922*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description: read 1 Byte data
923*53ee8cc1Swenshuai.xi /// @param <IN>         \b u32RegAddr: register address
924*53ee8cc1Swenshuai.xi /// @param <OUT>        \b None :
925*53ee8cc1Swenshuai.xi /// @param <RET>        \b MS_U8
926*53ee8cc1Swenshuai.xi /// @param <GLOBAL>     \b None :
927*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SEAL_PmReadByte(MS_U32 u32RegAddr)928*53ee8cc1Swenshuai.xi MS_U8 HAL_SEAL_PmReadByte(MS_U32 u32RegAddr)
929*53ee8cc1Swenshuai.xi {
930*53ee8cc1Swenshuai.xi     return ((volatile MS_U8*)(_gSEAL_PmMapBase))[(u32RegAddr << 1) - (u32RegAddr & 1)];
931*53ee8cc1Swenshuai.xi }
932*53ee8cc1Swenshuai.xi 
933*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
934*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_SEAL_NonPmRead2Byte
935*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description: read 2 Byte data
936*53ee8cc1Swenshuai.xi /// @param <IN>         \b u32RegAddr: register address
937*53ee8cc1Swenshuai.xi /// @param <OUT>        \b None :
938*53ee8cc1Swenshuai.xi /// @param <RET>        \b MS_U16
939*53ee8cc1Swenshuai.xi /// @param <GLOBAL>     \b None :
940*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SEAL_NonPmRead2Byte(MS_U32 u32RegAddr)941*53ee8cc1Swenshuai.xi MS_U16 HAL_SEAL_NonPmRead2Byte(MS_U32 u32RegAddr)
942*53ee8cc1Swenshuai.xi {
943*53ee8cc1Swenshuai.xi     return ((volatile MS_U16*)(_gSEAL_NonPmMapBase))[u32RegAddr];
944*53ee8cc1Swenshuai.xi }
945*53ee8cc1Swenshuai.xi 
946*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
947*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_SEAL_PmRead2Byte
948*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description: read 2 Byte data
949*53ee8cc1Swenshuai.xi /// @param <IN>         \b u32RegAddr: register address
950*53ee8cc1Swenshuai.xi /// @param <OUT>        \b None :
951*53ee8cc1Swenshuai.xi /// @param <RET>        \b MS_U16
952*53ee8cc1Swenshuai.xi /// @param <GLOBAL>     \b None :
953*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SEAL_PmRead2Byte(MS_U32 u32RegAddr)954*53ee8cc1Swenshuai.xi MS_U16 HAL_SEAL_PmRead2Byte(MS_U32 u32RegAddr)
955*53ee8cc1Swenshuai.xi {
956*53ee8cc1Swenshuai.xi     return ((volatile MS_U16*)(_gSEAL_PmMapBase))[u32RegAddr];
957*53ee8cc1Swenshuai.xi }
958*53ee8cc1Swenshuai.xi 
959*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
960*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_SEAL_NonPmRead4Byte
961*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description: read 4 Byte data
962*53ee8cc1Swenshuai.xi /// @param <IN>         \b u32RegAddr: register address
963*53ee8cc1Swenshuai.xi /// @param <OUT>        \b None :
964*53ee8cc1Swenshuai.xi /// @param <RET>        \b MS_U32
965*53ee8cc1Swenshuai.xi /// @param <GLOBAL>     \b None :
966*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SEAL_NonPmRead4Byte(MS_U32 u32RegAddr)967*53ee8cc1Swenshuai.xi MS_U32 HAL_SEAL_NonPmRead4Byte(MS_U32 u32RegAddr)
968*53ee8cc1Swenshuai.xi {
969*53ee8cc1Swenshuai.xi     return (HAL_SEAL_NonPmRead2Byte(u32RegAddr) | HAL_SEAL_NonPmRead2Byte(u32RegAddr+2) << 16);
970*53ee8cc1Swenshuai.xi }
971*53ee8cc1Swenshuai.xi 
972*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
973*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_SEAL_NonPmRead6Byte
974*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description: read 6 Byte data
975*53ee8cc1Swenshuai.xi /// @param <IN>         \b u32RegAddr: register address
976*53ee8cc1Swenshuai.xi /// @param <OUT>        \b None :
977*53ee8cc1Swenshuai.xi /// @param <RET>        \b MS_U64
978*53ee8cc1Swenshuai.xi /// @param <GLOBAL>     \b None :
979*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SEAL_NonPmRead6Byte(MS_U32 u32RegAddr)980*53ee8cc1Swenshuai.xi MS_U64 HAL_SEAL_NonPmRead6Byte(MS_U32 u32RegAddr)
981*53ee8cc1Swenshuai.xi {
982*53ee8cc1Swenshuai.xi     MS_U64 u64HitAddr;
983*53ee8cc1Swenshuai.xi 
984*53ee8cc1Swenshuai.xi     u64HitAddr = 0;
985*53ee8cc1Swenshuai.xi     u64HitAddr |= (MS_U64)HAL_SEAL_NonPmRead2Byte(u32RegAddr);
986*53ee8cc1Swenshuai.xi     u64HitAddr |= (MS_U64)HAL_SEAL_NonPmRead2Byte(u32RegAddr + 2) << 16;
987*53ee8cc1Swenshuai.xi     u64HitAddr |= (MS_U64)(HAL_SEAL_NonPmRead2Byte(u32RegAddr + 4)) << 32;
988*53ee8cc1Swenshuai.xi 
989*53ee8cc1Swenshuai.xi     return u64HitAddr;
990*53ee8cc1Swenshuai.xi }
991*53ee8cc1Swenshuai.xi 
992*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
993*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_SEAL_NonPmWriteByte
994*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description: write 1 Byte data
995*53ee8cc1Swenshuai.xi /// @param <IN>         \b u32RegAddr: register address
996*53ee8cc1Swenshuai.xi /// @param <IN>         \b u8Val : 1 byte data
997*53ee8cc1Swenshuai.xi /// @param <OUT>        \b None :
998*53ee8cc1Swenshuai.xi /// @param <RET>        \b TRUE: Ok FALSE: Fail
999*53ee8cc1Swenshuai.xi /// @param <GLOBAL>     \b None :
1000*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SEAL_NonPmWriteByte(MS_U32 u32RegAddr,MS_U8 u8Val)1001*53ee8cc1Swenshuai.xi MS_BOOL HAL_SEAL_NonPmWriteByte(MS_U32 u32RegAddr, MS_U8 u8Val)
1002*53ee8cc1Swenshuai.xi {
1003*53ee8cc1Swenshuai.xi     if (!u32RegAddr)
1004*53ee8cc1Swenshuai.xi     {
1005*53ee8cc1Swenshuai.xi         HAL_SEAL_ERR("%s reg error!\n", __FUNCTION__);
1006*53ee8cc1Swenshuai.xi         return FALSE;
1007*53ee8cc1Swenshuai.xi     }
1008*53ee8cc1Swenshuai.xi 
1009*53ee8cc1Swenshuai.xi     ((volatile MS_U8*)(_gSEAL_NonPmMapBase))[(u32RegAddr << 1) - (u32RegAddr & 1)] = u8Val;
1010*53ee8cc1Swenshuai.xi     return TRUE;
1011*53ee8cc1Swenshuai.xi }
1012*53ee8cc1Swenshuai.xi 
1013*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1014*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_SEAL_PmWriteByte
1015*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description: write 1 Byte data
1016*53ee8cc1Swenshuai.xi /// @param <IN>         \b u32RegAddr: register address
1017*53ee8cc1Swenshuai.xi /// @param <IN>         \b u8Val : 1 byte data
1018*53ee8cc1Swenshuai.xi /// @param <OUT>        \b None :
1019*53ee8cc1Swenshuai.xi /// @param <RET>        \b TRUE: Ok FALSE: Fail
1020*53ee8cc1Swenshuai.xi /// @param <GLOBAL>     \b None :
1021*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SEAL_PmWriteByte(MS_U32 u32RegAddr,MS_U8 u8Val)1022*53ee8cc1Swenshuai.xi MS_BOOL HAL_SEAL_PmWriteByte(MS_U32 u32RegAddr, MS_U8 u8Val)
1023*53ee8cc1Swenshuai.xi {
1024*53ee8cc1Swenshuai.xi     if (!u32RegAddr)
1025*53ee8cc1Swenshuai.xi     {
1026*53ee8cc1Swenshuai.xi         HAL_SEAL_ERR("%s reg error!\n", __FUNCTION__);
1027*53ee8cc1Swenshuai.xi         return FALSE;
1028*53ee8cc1Swenshuai.xi     }
1029*53ee8cc1Swenshuai.xi 
1030*53ee8cc1Swenshuai.xi     ((volatile MS_U8*)(_gSEAL_PmMapBase))[(u32RegAddr << 1) - (u32RegAddr & 1)] = u8Val;
1031*53ee8cc1Swenshuai.xi     return TRUE;
1032*53ee8cc1Swenshuai.xi }
1033*53ee8cc1Swenshuai.xi 
1034*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1035*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_SEAL_NonPmWrite2Byte
1036*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description: write 2 Byte data
1037*53ee8cc1Swenshuai.xi /// @param <IN>         \b u32RegAddr: register address
1038*53ee8cc1Swenshuai.xi /// @param <IN>         \b u16Val : 2 byte data
1039*53ee8cc1Swenshuai.xi /// @param <OUT>        \b None :
1040*53ee8cc1Swenshuai.xi /// @param <RET>        \b TRUE: Ok FALSE: Fail
1041*53ee8cc1Swenshuai.xi /// @param <GLOBAL>     \b None :
1042*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SEAL_NonPmWrite2Byte(MS_U32 u32RegAddr,MS_U16 u16Val)1043*53ee8cc1Swenshuai.xi MS_BOOL HAL_SEAL_NonPmWrite2Byte(MS_U32 u32RegAddr, MS_U16 u16Val)
1044*53ee8cc1Swenshuai.xi {
1045*53ee8cc1Swenshuai.xi     if (!u32RegAddr)
1046*53ee8cc1Swenshuai.xi     {
1047*53ee8cc1Swenshuai.xi         HAL_SEAL_ERR("%s reg error!\n", __FUNCTION__);
1048*53ee8cc1Swenshuai.xi         return FALSE;
1049*53ee8cc1Swenshuai.xi     }
1050*53ee8cc1Swenshuai.xi 
1051*53ee8cc1Swenshuai.xi     ((volatile MS_U16*)(_gSEAL_NonPmMapBase))[u32RegAddr] = u16Val;
1052*53ee8cc1Swenshuai.xi     return TRUE;
1053*53ee8cc1Swenshuai.xi }
1054*53ee8cc1Swenshuai.xi 
1055*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1056*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_SEAL_PmWrite2Byte
1057*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description: write 2 Byte data
1058*53ee8cc1Swenshuai.xi /// @param <IN>         \b u32RegAddr: register address
1059*53ee8cc1Swenshuai.xi /// @param <IN>         \b u16Val : 2 byte data
1060*53ee8cc1Swenshuai.xi /// @param <OUT>        \b None :
1061*53ee8cc1Swenshuai.xi /// @param <RET>        \b TRUE: Ok FALSE: Fail
1062*53ee8cc1Swenshuai.xi /// @param <GLOBAL>     \b None :
1063*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SEAL_PmWrite2Byte(MS_U32 u32RegAddr,MS_U16 u16Val)1064*53ee8cc1Swenshuai.xi MS_BOOL HAL_SEAL_PmWrite2Byte(MS_U32 u32RegAddr, MS_U16 u16Val)
1065*53ee8cc1Swenshuai.xi {
1066*53ee8cc1Swenshuai.xi     if (!u32RegAddr)
1067*53ee8cc1Swenshuai.xi     {
1068*53ee8cc1Swenshuai.xi         HAL_SEAL_ERR("%s reg error!\n", __FUNCTION__);
1069*53ee8cc1Swenshuai.xi         return FALSE;
1070*53ee8cc1Swenshuai.xi     }
1071*53ee8cc1Swenshuai.xi 
1072*53ee8cc1Swenshuai.xi     ((volatile MS_U16*)(_gSEAL_PmMapBase))[u32RegAddr] = u16Val;
1073*53ee8cc1Swenshuai.xi     return TRUE;
1074*53ee8cc1Swenshuai.xi }
1075*53ee8cc1Swenshuai.xi 
1076*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1077*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_SEAL_NonPmWrite4Byte
1078*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description: write 4 Byte data
1079*53ee8cc1Swenshuai.xi /// @param <IN>         \b u32RegAddr: register address
1080*53ee8cc1Swenshuai.xi /// @param <IN>         \b u32Val : 4 byte data
1081*53ee8cc1Swenshuai.xi /// @param <OUT>        \b None :
1082*53ee8cc1Swenshuai.xi /// @param <RET>        \b TRUE: Ok FALSE: Fail
1083*53ee8cc1Swenshuai.xi /// @param <GLOBAL>     \b None :
1084*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SEAL_NonPmWrite4Byte(MS_U32 u32RegAddr,MS_U32 u32Val)1085*53ee8cc1Swenshuai.xi MS_BOOL HAL_SEAL_NonPmWrite4Byte(MS_U32 u32RegAddr, MS_U32 u32Val)
1086*53ee8cc1Swenshuai.xi {
1087*53ee8cc1Swenshuai.xi     if (!u32RegAddr)
1088*53ee8cc1Swenshuai.xi     {
1089*53ee8cc1Swenshuai.xi         HAL_SEAL_ERR("%s reg error!\n", __FUNCTION__);
1090*53ee8cc1Swenshuai.xi         return FALSE;
1091*53ee8cc1Swenshuai.xi     }
1092*53ee8cc1Swenshuai.xi 
1093*53ee8cc1Swenshuai.xi     HAL_SEAL_NonPmWrite2Byte(u32RegAddr, u32Val & 0x0000FFFF);
1094*53ee8cc1Swenshuai.xi     HAL_SEAL_NonPmWrite2Byte(u32RegAddr+2, u32Val >> 16);
1095*53ee8cc1Swenshuai.xi     return TRUE;
1096*53ee8cc1Swenshuai.xi }
1097*53ee8cc1Swenshuai.xi 
1098*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1099*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_SEAL_NonPmWrite6Byte
1100*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description: write 6 Byte data
1101*53ee8cc1Swenshuai.xi /// @param <IN>         \b u32RegAddr: register address
1102*53ee8cc1Swenshuai.xi /// @param <IN>         \b u64Val : 4 byte data
1103*53ee8cc1Swenshuai.xi /// @param <OUT>        \b None :
1104*53ee8cc1Swenshuai.xi /// @param <RET>        \b TRUE: Ok FALSE: Fail
1105*53ee8cc1Swenshuai.xi /// @param <GLOBAL>     \b None :
1106*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SEAL_NonPmWrite6Byte(MS_U32 u32RegAddr,MS_U64 u64Val)1107*53ee8cc1Swenshuai.xi MS_BOOL HAL_SEAL_NonPmWrite6Byte(MS_U32 u32RegAddr, MS_U64 u64Val)
1108*53ee8cc1Swenshuai.xi {
1109*53ee8cc1Swenshuai.xi     HAL_SEAL_NonPmWrite2Byte(u32RegAddr, u64Val & 0xFFFF);
1110*53ee8cc1Swenshuai.xi     HAL_SEAL_NonPmWrite2Byte(u32RegAddr + 2,(u64Val >> 16) & 0xFFFF);
1111*53ee8cc1Swenshuai.xi     HAL_SEAL_NonPmWrite2Byte(u32RegAddr + 4,(u64Val >> 32) & 0xFFFF);
1112*53ee8cc1Swenshuai.xi     return TRUE;
1113*53ee8cc1Swenshuai.xi }
1114*53ee8cc1Swenshuai.xi 
1115*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1116*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_SEAL_NonPmWriteRegBit
1117*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description: set or reset one bit in 1-byte data
1118*53ee8cc1Swenshuai.xi /// @param <IN>         \b u32RegAddr: register address
1119*53ee8cc1Swenshuai.xi /// @param <IN>         \b u8Mask: 1-byte mask
1120*53ee8cc1Swenshuai.xi /// @param <IN>         \b bEnabl: decide if set or reset bits
1121*53ee8cc1Swenshuai.xi /// @param <RET>        \b TRUE: Ok FALSE: Fail
1122*53ee8cc1Swenshuai.xi /// @param <GLOBAL>     \b None :
1123*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SEAL_NonPmWriteRegBit(MS_U32 u32RegAddr,MS_U8 u8Mask,MS_BOOL bEnable)1124*53ee8cc1Swenshuai.xi MS_BOOL HAL_SEAL_NonPmWriteRegBit(MS_U32 u32RegAddr, MS_U8 u8Mask, MS_BOOL bEnable)
1125*53ee8cc1Swenshuai.xi {
1126*53ee8cc1Swenshuai.xi     MS_U8 u8Val = HAL_SEAL_NonPmReadByte(u32RegAddr);
1127*53ee8cc1Swenshuai.xi     if (!u32RegAddr)
1128*53ee8cc1Swenshuai.xi     {
1129*53ee8cc1Swenshuai.xi         HAL_SEAL_ERR("%s reg error!\n", __FUNCTION__);
1130*53ee8cc1Swenshuai.xi         return FALSE;
1131*53ee8cc1Swenshuai.xi     }
1132*53ee8cc1Swenshuai.xi 
1133*53ee8cc1Swenshuai.xi     u8Val = HAL_SEAL_NonPmReadByte(u32RegAddr);
1134*53ee8cc1Swenshuai.xi     u8Val = (bEnable) ? (u8Val | u8Mask) : (u8Val & ~u8Mask);
1135*53ee8cc1Swenshuai.xi     HAL_SEAL_NonPmWriteByte(u32RegAddr, u8Val);
1136*53ee8cc1Swenshuai.xi     return TRUE;
1137*53ee8cc1Swenshuai.xi }
1138*53ee8cc1Swenshuai.xi 
1139*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1140*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_SEAL_NonPmWrite2BytesBit
1141*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description: set or reset one bit in 2-byte data
1142*53ee8cc1Swenshuai.xi /// @param <IN>         \b u32RegAddr: register address
1143*53ee8cc1Swenshuai.xi /// @param <IN>         \b u8Mask: 2-byte mask
1144*53ee8cc1Swenshuai.xi /// @param <IN>         \b bEnabl: decide if set or reset bits
1145*53ee8cc1Swenshuai.xi /// @param <RET>        \b TRUE: Ok FALSE: Fail
1146*53ee8cc1Swenshuai.xi /// @param <GLOBAL>     \b None :
1147*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SEAL_NonPmWrite2BytesBit(MS_U32 u32RegOffset,MS_BOOL bEnable,MS_U16 u16Mask)1148*53ee8cc1Swenshuai.xi void HAL_SEAL_NonPmWrite2BytesBit(MS_U32 u32RegOffset, MS_BOOL bEnable, MS_U16 u16Mask)
1149*53ee8cc1Swenshuai.xi {
1150*53ee8cc1Swenshuai.xi     MS_U16 val = HAL_SEAL_NonPmRead2Byte(u32RegOffset);
1151*53ee8cc1Swenshuai.xi     val = (bEnable) ? (val | u16Mask) : (val & ~u16Mask);
1152*53ee8cc1Swenshuai.xi     HAL_SEAL_NonPmWrite2Byte(u32RegOffset, val);
1153*53ee8cc1Swenshuai.xi }
1154*53ee8cc1Swenshuai.xi 
1155*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1156*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_SEAL_GetNonPmIpIdx
1157*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description: Get the Non-PM IP index with respect to HW wired
1158*53ee8cc1Swenshuai.xi /// @param <IN>         \b u32RegAddr: Non-PM IP index with respect to SW enum
1159*53ee8cc1Swenshuai.xi /// @param <OUT>        \b None :
1160*53ee8cc1Swenshuai.xi /// @param <RET>        \b MS_S32: Non-PM IP index with respect to HW wired
1161*53ee8cc1Swenshuai.xi /// @param <GLOBAL>     \b None :
1162*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SEAL_GetNonPmIpIdx(eSeal_IP eNonPmIP)1163*53ee8cc1Swenshuai.xi MS_S32 HAL_SEAL_GetNonPmIpIdx(eSeal_IP eNonPmIP)
1164*53ee8cc1Swenshuai.xi {
1165*53ee8cc1Swenshuai.xi     MS_S32 s32HwIdx;
1166*53ee8cc1Swenshuai.xi 
1167*53ee8cc1Swenshuai.xi     for (s32HwIdx = 0; s32HwIdx < SEAL_NONPM_TBL_IP_NUM; s32HwIdx++)
1168*53ee8cc1Swenshuai.xi     {
1169*53ee8cc1Swenshuai.xi         if(eNonPmIP == NonPmIpTbl[s32HwIdx])
1170*53ee8cc1Swenshuai.xi         {
1171*53ee8cc1Swenshuai.xi             return s32HwIdx;
1172*53ee8cc1Swenshuai.xi         }
1173*53ee8cc1Swenshuai.xi     }
1174*53ee8cc1Swenshuai.xi 
1175*53ee8cc1Swenshuai.xi     return (-1);
1176*53ee8cc1Swenshuai.xi }
1177*53ee8cc1Swenshuai.xi 
1178*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1179*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_SEAL_GetPmIpIdx
1180*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description: Get the PM IP index with respect to HW wired
1181*53ee8cc1Swenshuai.xi /// @param <IN>         \b u32RegAddr: PM IP index with respect to SW enum
1182*53ee8cc1Swenshuai.xi /// @param <OUT>        \b None :
1183*53ee8cc1Swenshuai.xi /// @param <RET>        \b MS_S32: PM IP index with respect to HW wired
1184*53ee8cc1Swenshuai.xi /// @param <GLOBAL>     \b None :
1185*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SEAL_GetPmIpIdx(eSeal_IP ePmIP)1186*53ee8cc1Swenshuai.xi MS_S32 HAL_SEAL_GetPmIpIdx(eSeal_IP ePmIP)
1187*53ee8cc1Swenshuai.xi {
1188*53ee8cc1Swenshuai.xi     MS_S32 s32HwIdx;
1189*53ee8cc1Swenshuai.xi 
1190*53ee8cc1Swenshuai.xi     for (s32HwIdx = 0; s32HwIdx < SEAL_PM_TBL_IP_NUM; s32HwIdx++)
1191*53ee8cc1Swenshuai.xi     {
1192*53ee8cc1Swenshuai.xi         if(ePmIP == PmIpTbl[s32HwIdx])
1193*53ee8cc1Swenshuai.xi         {
1194*53ee8cc1Swenshuai.xi             return s32HwIdx;
1195*53ee8cc1Swenshuai.xi         }
1196*53ee8cc1Swenshuai.xi     }
1197*53ee8cc1Swenshuai.xi 
1198*53ee8cc1Swenshuai.xi     return (-1);
1199*53ee8cc1Swenshuai.xi }
1200*53ee8cc1Swenshuai.xi 
1201*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1202*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_SEAL_GetProcessorIdx
1203*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description: Get the processor index with respect to HW wired
1204*53ee8cc1Swenshuai.xi /// @param <IN>         \b u32RegAddr: Processor index with respect to SW enum
1205*53ee8cc1Swenshuai.xi /// @param <OUT>        \b None :
1206*53ee8cc1Swenshuai.xi /// @param <RET>        \b MS_S32: Processor index with respect to HW wired
1207*53ee8cc1Swenshuai.xi /// @param <GLOBAL>     \b None :
1208*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SEAL_GetProcessorIdx(eSeal_ProcessorId eProcessorId)1209*53ee8cc1Swenshuai.xi MS_S32 HAL_SEAL_GetProcessorIdx(eSeal_ProcessorId eProcessorId)
1210*53ee8cc1Swenshuai.xi {
1211*53ee8cc1Swenshuai.xi     MS_S32 s32HwIdx;
1212*53ee8cc1Swenshuai.xi 
1213*53ee8cc1Swenshuai.xi     for (s32HwIdx = 0; s32HwIdx < SEAL_TBL_PROCESSOR_NUM; s32HwIdx++)
1214*53ee8cc1Swenshuai.xi     {
1215*53ee8cc1Swenshuai.xi         if(eProcessorId == ProcessorTbl[s32HwIdx])
1216*53ee8cc1Swenshuai.xi         {
1217*53ee8cc1Swenshuai.xi             return s32HwIdx;
1218*53ee8cc1Swenshuai.xi         }
1219*53ee8cc1Swenshuai.xi     }
1220*53ee8cc1Swenshuai.xi 
1221*53ee8cc1Swenshuai.xi     return (-1);
1222*53ee8cc1Swenshuai.xi }
1223*53ee8cc1Swenshuai.xi 
1224*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1225*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_SEAL_GetLockIdx
1226*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description: Get the lock index with respect to HW wired
1227*53ee8cc1Swenshuai.xi /// @param <IN>         \b u32RegAddr: Lock index with respect to SW enum
1228*53ee8cc1Swenshuai.xi /// @param <OUT>        \b None :
1229*53ee8cc1Swenshuai.xi /// @param <RET>        \b MS_S32: Lock index with respect to HW wired
1230*53ee8cc1Swenshuai.xi /// @param <GLOBAL>     \b None :
1231*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SEAL_GetLockIdx(eSeal_Lock eLockId)1232*53ee8cc1Swenshuai.xi MS_S32 HAL_SEAL_GetLockIdx(eSeal_Lock eLockId)
1233*53ee8cc1Swenshuai.xi {
1234*53ee8cc1Swenshuai.xi     MS_S32 s32HwIdx;
1235*53ee8cc1Swenshuai.xi 
1236*53ee8cc1Swenshuai.xi     for (s32HwIdx = 0; s32HwIdx < SEAL_TBL_LOCK_NUM; s32HwIdx++)
1237*53ee8cc1Swenshuai.xi     {
1238*53ee8cc1Swenshuai.xi         if(eLockId == LockTbl[s32HwIdx])
1239*53ee8cc1Swenshuai.xi         {
1240*53ee8cc1Swenshuai.xi             return s32HwIdx;
1241*53ee8cc1Swenshuai.xi         }
1242*53ee8cc1Swenshuai.xi     }
1243*53ee8cc1Swenshuai.xi 
1244*53ee8cc1Swenshuai.xi     return (-1);
1245*53ee8cc1Swenshuai.xi }
1246*53ee8cc1Swenshuai.xi 
1247*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1248*53ee8cc1Swenshuai.xi // Type and Structure Declaration
1249*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1250*53ee8cc1Swenshuai.xi 
1251*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1252*53ee8cc1Swenshuai.xi //  Global Functions
1253*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1254*53ee8cc1Swenshuai.xi 
1255*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1256*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_SEAL_SetIOMapBase
1257*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description: set io-base
1258*53ee8cc1Swenshuai.xi /// @param <IN>         \b u32NonPmBaseAddr: Non-PM io-base address
1259*53ee8cc1Swenshuai.xi /// @param <IN>         \b u32PmBaseAddr: PM io-base address
1260*53ee8cc1Swenshuai.xi /// @param <OUT>        \b None :
1261*53ee8cc1Swenshuai.xi /// @param <RET>        \b MS_U8
1262*53ee8cc1Swenshuai.xi /// @param <GLOBAL>     \b None :
1263*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_SEAL_SetIOMapBase(MS_VIRT u32NonPmBaseAddr,MS_VIRT u32PmBaseAddr)1264*53ee8cc1Swenshuai.xi void HAL_SEAL_SetIOMapBase(MS_VIRT u32NonPmBaseAddr, MS_VIRT u32PmBaseAddr)
1265*53ee8cc1Swenshuai.xi {
1266*53ee8cc1Swenshuai.xi     MS_U32 u32RegAddr;
1267*53ee8cc1Swenshuai.xi     MS_U8 u8Val;
1268*53ee8cc1Swenshuai.xi 
1269*53ee8cc1Swenshuai.xi     _gSEAL_NonPmMapBase = u32NonPmBaseAddr;
1270*53ee8cc1Swenshuai.xi     _gSEAL_PmMapBase = u32PmBaseAddr;
1271*53ee8cc1Swenshuai.xi     HAL_SEAL_DBG(printf("SEAL _gSEAL_NonPmMapBase= %x\n", _gSEAL_NonPmMapBase));
1272*53ee8cc1Swenshuai.xi     HAL_SEAL_DBG(printf("SEAL _gSEAL_PmMapBase= %x\n", _gSEAL_PmMapBase));
1273*53ee8cc1Swenshuai.xi 
1274*53ee8cc1Swenshuai.xi     // Force RIU bank be controled by TZPC
1275*53ee8cc1Swenshuai.xi     u32RegAddr = REG_TZPC_PROTECT_CTL;
1276*53ee8cc1Swenshuai.xi     u8Val = HAL_SEAL_NonPmReadByte(u32RegAddr);
1277*53ee8cc1Swenshuai.xi     u8Val = u8Val | (1 << 2);
1278*53ee8cc1Swenshuai.xi     HAL_SEAL_NonPmWriteByte(u32RegAddr, u8Val);
1279*53ee8cc1Swenshuai.xi }
1280*53ee8cc1Swenshuai.xi 
1281*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1282*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_Seal_SecureRangeSet
1283*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description: set the secure range on MIU
1284*53ee8cc1Swenshuai.xi /// @param <IN>         \b u8SecureRangeId : Secure range ID
1285*53ee8cc1Swenshuai.xi /// @param <IN>         \b u64StartAddr : Start address of secure range
1286*53ee8cc1Swenshuai.xi /// @param <IN>         \b u64EndAddr : End address of secure range
1287*53ee8cc1Swenshuai.xi /// @param <IN>         \b u32Attribute : Attribute of secure range
1288*53ee8cc1Swenshuai.xi /// @param <OUT>        \b OUT :
1289*53ee8cc1Swenshuai.xi /// @param <RET>        \b RET
1290*53ee8cc1Swenshuai.xi /// @param <GLOBAL>     \b GLOBAL :
1291*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_Seal_SecureRangeSet(MS_U8 u8SecureRangeId,MS_U64 u64StartAddr,MS_U64 u64EndAddr,MS_U32 u32Attribute)1292*53ee8cc1Swenshuai.xi MS_BOOL HAL_Seal_SecureRangeSet(
1293*53ee8cc1Swenshuai.xi     MS_U8 u8SecureRangeId,
1294*53ee8cc1Swenshuai.xi     MS_U64 u64StartAddr,
1295*53ee8cc1Swenshuai.xi     MS_U64 u64EndAddr,
1296*53ee8cc1Swenshuai.xi     MS_U32 u32Attribute
1297*53ee8cc1Swenshuai.xi )
1298*53ee8cc1Swenshuai.xi {
1299*53ee8cc1Swenshuai.xi     MS_U32 u32RegStartAddr = 0;
1300*53ee8cc1Swenshuai.xi     MS_U32 u32RegEndAddr = 0;
1301*53ee8cc1Swenshuai.xi     MS_U32 u32RegAttribute = 0;
1302*53ee8cc1Swenshuai.xi     MS_U32 u32RegDetEn = 0;
1303*53ee8cc1Swenshuai.xi     MS_U32 u32RegDetEnDummy = 0; // work-around for 0x76 not readable issue
1304*53ee8cc1Swenshuai.xi     MS_U64 u64StartOffset;
1305*53ee8cc1Swenshuai.xi     MS_U64 u64EndOffset;
1306*53ee8cc1Swenshuai.xi     MS_U8  u8MiuSel;
1307*53ee8cc1Swenshuai.xi     MS_U8  u8Val;
1308*53ee8cc1Swenshuai.xi 
1309*53ee8cc1Swenshuai.xi     _phy_to_miu_offset(u8MiuSel, u64StartOffset, u64StartAddr);
1310*53ee8cc1Swenshuai.xi     _phy_to_miu_offset(u8MiuSel, u64EndOffset, u64EndAddr);
1311*53ee8cc1Swenshuai.xi 
1312*53ee8cc1Swenshuai.xi     if(u8MiuSel == E_CHIP_MIU_0)
1313*53ee8cc1Swenshuai.xi     {
1314*53ee8cc1Swenshuai.xi         u32RegDetEn = REG_SECURE0_DETECT_ENABLE;
1315*53ee8cc1Swenshuai.xi         u32RegDetEnDummy = REG_SECURE0_DUMMY0;
1316*53ee8cc1Swenshuai.xi 
1317*53ee8cc1Swenshuai.xi         switch(u8SecureRangeId)
1318*53ee8cc1Swenshuai.xi         {
1319*53ee8cc1Swenshuai.xi             case E_HAL_SEAL_SECURE_RANGE_ID0:
1320*53ee8cc1Swenshuai.xi                 u32RegStartAddr = REG_SECURE0_RANGE0_START_ADDR;
1321*53ee8cc1Swenshuai.xi                 u32RegEndAddr = REG_SECURE0_RANGE0_END_ADDR;
1322*53ee8cc1Swenshuai.xi                 u32RegAttribute = REG_SECURE0_RANGE0_ATTRIBUTE;
1323*53ee8cc1Swenshuai.xi                 break;
1324*53ee8cc1Swenshuai.xi             case E_HAL_SEAL_SECURE_RANGE_ID1:
1325*53ee8cc1Swenshuai.xi                 u32RegStartAddr = REG_SECURE0_RANGE1_START_ADDR;
1326*53ee8cc1Swenshuai.xi                 u32RegEndAddr = REG_SECURE0_RANGE1_END_ADDR;
1327*53ee8cc1Swenshuai.xi                 u32RegAttribute = REG_SECURE0_RANGE1_ATTRIBUTE;
1328*53ee8cc1Swenshuai.xi                 break;
1329*53ee8cc1Swenshuai.xi             case E_HAL_SEAL_SECURE_RANGE_ID2:
1330*53ee8cc1Swenshuai.xi                 u32RegStartAddr = REG_SECURE0_RANGE2_START_ADDR;
1331*53ee8cc1Swenshuai.xi                 u32RegEndAddr = REG_SECURE0_RANGE2_END_ADDR;
1332*53ee8cc1Swenshuai.xi                 u32RegAttribute = REG_SECURE0_RANGE2_ATTRIBUTE;
1333*53ee8cc1Swenshuai.xi                 break;
1334*53ee8cc1Swenshuai.xi             case E_HAL_SEAL_SECURE_RANGE_ID3:
1335*53ee8cc1Swenshuai.xi                 u32RegStartAddr = REG_SECURE0_RANGE3_START_ADDR;
1336*53ee8cc1Swenshuai.xi                 u32RegEndAddr = REG_SECURE0_RANGE3_END_ADDR;
1337*53ee8cc1Swenshuai.xi                 u32RegAttribute = REG_SECURE0_RANGE3_ATTRIBUTE;
1338*53ee8cc1Swenshuai.xi                 break;
1339*53ee8cc1Swenshuai.xi             case E_HAL_SEAL_SECURE_RANGE_ID4:
1340*53ee8cc1Swenshuai.xi                 u32RegStartAddr = REG_SECURE0_RANGE4_START_ADDR;
1341*53ee8cc1Swenshuai.xi                 u32RegEndAddr = REG_SECURE0_RANGE4_END_ADDR;
1342*53ee8cc1Swenshuai.xi                 u32RegAttribute = REG_SECURE0_RANGE4_ATTRIBUTE;
1343*53ee8cc1Swenshuai.xi                 break;
1344*53ee8cc1Swenshuai.xi             case E_HAL_SEAL_SECURE_RANGE_ID5:
1345*53ee8cc1Swenshuai.xi                 u32RegStartAddr = REG_SECURE0_RANGE5_START_ADDR;
1346*53ee8cc1Swenshuai.xi                 u32RegEndAddr = REG_SECURE0_RANGE5_END_ADDR;
1347*53ee8cc1Swenshuai.xi                 u32RegAttribute = REG_SECURE0_RANGE5_ATTRIBUTE;
1348*53ee8cc1Swenshuai.xi                 break;
1349*53ee8cc1Swenshuai.xi             case E_HAL_SEAL_SECURE_RANGE_ID6:
1350*53ee8cc1Swenshuai.xi                 u32RegStartAddr = REG_SECURE0_RANGE6_START_ADDR;
1351*53ee8cc1Swenshuai.xi                 u32RegEndAddr = REG_SECURE0_RANGE6_END_ADDR;
1352*53ee8cc1Swenshuai.xi                 u32RegAttribute = REG_SECURE0_RANGE6_ATTRIBUTE;
1353*53ee8cc1Swenshuai.xi                 break;
1354*53ee8cc1Swenshuai.xi             case E_HAL_SEAL_SECURE_RANGE_ID7:
1355*53ee8cc1Swenshuai.xi                 u32RegStartAddr = REG_SECURE0_RANGE7_START_ADDR;
1356*53ee8cc1Swenshuai.xi                 u32RegEndAddr = REG_SECURE0_RANGE7_END_ADDR;
1357*53ee8cc1Swenshuai.xi                 u32RegAttribute = REG_SECURE0_RANGE7_ATTRIBUTE;
1358*53ee8cc1Swenshuai.xi                 break;
1359*53ee8cc1Swenshuai.xi             default:
1360*53ee8cc1Swenshuai.xi 		        return false;
1361*53ee8cc1Swenshuai.xi         }
1362*53ee8cc1Swenshuai.xi     }
1363*53ee8cc1Swenshuai.xi     else if(u8MiuSel == E_CHIP_MIU_1)
1364*53ee8cc1Swenshuai.xi     {
1365*53ee8cc1Swenshuai.xi         u32RegDetEn = REG_SECURE1_DETECT_ENABLE;
1366*53ee8cc1Swenshuai.xi         u32RegDetEnDummy = REG_SECURE1_DUMMY0;
1367*53ee8cc1Swenshuai.xi 
1368*53ee8cc1Swenshuai.xi         switch(u8SecureRangeId)
1369*53ee8cc1Swenshuai.xi         {
1370*53ee8cc1Swenshuai.xi             case E_HAL_SEAL_SECURE_RANGE_ID0:
1371*53ee8cc1Swenshuai.xi                 u32RegStartAddr = REG_SECURE1_RANGE0_START_ADDR;
1372*53ee8cc1Swenshuai.xi                 u32RegEndAddr = REG_SECURE1_RANGE0_END_ADDR;
1373*53ee8cc1Swenshuai.xi                 u32RegAttribute = REG_SECURE1_RANGE0_ATTRIBUTE;
1374*53ee8cc1Swenshuai.xi                 break;
1375*53ee8cc1Swenshuai.xi             case E_HAL_SEAL_SECURE_RANGE_ID1:
1376*53ee8cc1Swenshuai.xi                 u32RegStartAddr = REG_SECURE1_RANGE1_START_ADDR;
1377*53ee8cc1Swenshuai.xi                 u32RegEndAddr = REG_SECURE1_RANGE1_END_ADDR;
1378*53ee8cc1Swenshuai.xi                 u32RegAttribute = REG_SECURE1_RANGE1_ATTRIBUTE;
1379*53ee8cc1Swenshuai.xi                 break;
1380*53ee8cc1Swenshuai.xi             case E_HAL_SEAL_SECURE_RANGE_ID2:
1381*53ee8cc1Swenshuai.xi                 u32RegStartAddr = REG_SECURE1_RANGE2_START_ADDR;
1382*53ee8cc1Swenshuai.xi                 u32RegEndAddr = REG_SECURE1_RANGE2_END_ADDR;
1383*53ee8cc1Swenshuai.xi                 u32RegAttribute = REG_SECURE1_RANGE2_ATTRIBUTE;
1384*53ee8cc1Swenshuai.xi                 break;
1385*53ee8cc1Swenshuai.xi             case E_HAL_SEAL_SECURE_RANGE_ID3:
1386*53ee8cc1Swenshuai.xi                 u32RegStartAddr = REG_SECURE1_RANGE3_START_ADDR;
1387*53ee8cc1Swenshuai.xi                 u32RegEndAddr = REG_SECURE1_RANGE3_END_ADDR;
1388*53ee8cc1Swenshuai.xi                 u32RegAttribute = REG_SECURE1_RANGE3_ATTRIBUTE;
1389*53ee8cc1Swenshuai.xi                 break;
1390*53ee8cc1Swenshuai.xi             case E_HAL_SEAL_SECURE_RANGE_ID4:
1391*53ee8cc1Swenshuai.xi                 u32RegStartAddr = REG_SECURE1_RANGE4_START_ADDR;
1392*53ee8cc1Swenshuai.xi                 u32RegEndAddr = REG_SECURE1_RANGE4_END_ADDR;
1393*53ee8cc1Swenshuai.xi                 u32RegAttribute = REG_SECURE1_RANGE4_ATTRIBUTE;
1394*53ee8cc1Swenshuai.xi                 break;
1395*53ee8cc1Swenshuai.xi             case E_HAL_SEAL_SECURE_RANGE_ID5:
1396*53ee8cc1Swenshuai.xi                 u32RegStartAddr = REG_SECURE1_RANGE5_START_ADDR;
1397*53ee8cc1Swenshuai.xi                 u32RegEndAddr = REG_SECURE1_RANGE5_END_ADDR;
1398*53ee8cc1Swenshuai.xi                 u32RegAttribute = REG_SECURE1_RANGE5_ATTRIBUTE;
1399*53ee8cc1Swenshuai.xi                 break;
1400*53ee8cc1Swenshuai.xi             case E_HAL_SEAL_SECURE_RANGE_ID6:
1401*53ee8cc1Swenshuai.xi                 u32RegStartAddr = REG_SECURE1_RANGE6_START_ADDR;
1402*53ee8cc1Swenshuai.xi                 u32RegEndAddr = REG_SECURE1_RANGE6_END_ADDR;
1403*53ee8cc1Swenshuai.xi                 u32RegAttribute = REG_SECURE1_RANGE6_ATTRIBUTE;
1404*53ee8cc1Swenshuai.xi                 break;
1405*53ee8cc1Swenshuai.xi             case E_HAL_SEAL_SECURE_RANGE_ID7:
1406*53ee8cc1Swenshuai.xi                 u32RegStartAddr = REG_SECURE1_RANGE7_START_ADDR;
1407*53ee8cc1Swenshuai.xi                 u32RegEndAddr = REG_SECURE1_RANGE7_END_ADDR;
1408*53ee8cc1Swenshuai.xi                 u32RegAttribute = REG_SECURE1_RANGE7_ATTRIBUTE;
1409*53ee8cc1Swenshuai.xi                 break;
1410*53ee8cc1Swenshuai.xi             default:
1411*53ee8cc1Swenshuai.xi 		        return false;
1412*53ee8cc1Swenshuai.xi         }
1413*53ee8cc1Swenshuai.xi     }
1414*53ee8cc1Swenshuai.xi     else
1415*53ee8cc1Swenshuai.xi     {
1416*53ee8cc1Swenshuai.xi         HAL_SEAL_ERR("%s MIU%d is not support\n", __FUNCTION__, u8MiuSel);
1417*53ee8cc1Swenshuai.xi     }
1418*53ee8cc1Swenshuai.xi 
1419*53ee8cc1Swenshuai.xi     if ( (u32Attribute == 0x0)|| (u64StartOffset == 0 && u64EndOffset == 0) )
1420*53ee8cc1Swenshuai.xi     {
1421*53ee8cc1Swenshuai.xi         // Disable secure range detection
1422*53ee8cc1Swenshuai.xi         u8Val = HAL_SEAL_NonPmReadByte(u32RegDetEnDummy);
1423*53ee8cc1Swenshuai.xi         u8Val &= ~(1 << u8SecureRangeId);
1424*53ee8cc1Swenshuai.xi         HAL_SEAL_NonPmWriteByte(u32RegDetEn, u8Val);
1425*53ee8cc1Swenshuai.xi         HAL_SEAL_NonPmWriteByte(u32RegDetEnDummy, u8Val);
1426*53ee8cc1Swenshuai.xi 
1427*53ee8cc1Swenshuai.xi         // Reset secure range attribute
1428*53ee8cc1Swenshuai.xi         HAL_SEAL_NonPmWriteByte(u32RegAttribute, 0x0f);
1429*53ee8cc1Swenshuai.xi 
1430*53ee8cc1Swenshuai.xi         // Set start address
1431*53ee8cc1Swenshuai.xi         HAL_SEAL_NonPmWrite6Byte(u32RegStartAddr, 0x00);
1432*53ee8cc1Swenshuai.xi 
1433*53ee8cc1Swenshuai.xi         // Set end address
1434*53ee8cc1Swenshuai.xi         HAL_SEAL_NonPmWrite6Byte(u32RegEndAddr, 0x00);
1435*53ee8cc1Swenshuai.xi     }
1436*53ee8cc1Swenshuai.xi     else
1437*53ee8cc1Swenshuai.xi     {
1438*53ee8cc1Swenshuai.xi         // Disable secure range detection
1439*53ee8cc1Swenshuai.xi         u8Val = HAL_SEAL_NonPmReadByte(u32RegDetEnDummy);
1440*53ee8cc1Swenshuai.xi         u8Val &= ~(1 << u8SecureRangeId);
1441*53ee8cc1Swenshuai.xi         HAL_SEAL_NonPmWriteByte(u32RegDetEn, u8Val);
1442*53ee8cc1Swenshuai.xi         HAL_SEAL_NonPmWriteByte(u32RegDetEnDummy, u8Val);
1443*53ee8cc1Swenshuai.xi 
1444*53ee8cc1Swenshuai.xi         // Reset secure range attribute
1445*53ee8cc1Swenshuai.xi         HAL_SEAL_NonPmWriteByte(u32RegAttribute, 0x0f);
1446*53ee8cc1Swenshuai.xi 
1447*53ee8cc1Swenshuai.xi         // Set start address
1448*53ee8cc1Swenshuai.xi         HAL_SEAL_NonPmWrite6Byte(u32RegStartAddr, u64StartOffset);
1449*53ee8cc1Swenshuai.xi 
1450*53ee8cc1Swenshuai.xi         // Set end address
1451*53ee8cc1Swenshuai.xi         HAL_SEAL_NonPmWrite6Byte(u32RegEndAddr, u64EndOffset);
1452*53ee8cc1Swenshuai.xi 
1453*53ee8cc1Swenshuai.xi         // Set secure range attribute
1454*53ee8cc1Swenshuai.xi         HAL_SEAL_NonPmWriteByte(u32RegAttribute, u32Attribute);
1455*53ee8cc1Swenshuai.xi 
1456*53ee8cc1Swenshuai.xi         // Enable secure range detection
1457*53ee8cc1Swenshuai.xi         u8Val = HAL_SEAL_NonPmReadByte(u32RegDetEnDummy);
1458*53ee8cc1Swenshuai.xi         u8Val |= (1 << u8SecureRangeId);
1459*53ee8cc1Swenshuai.xi         HAL_SEAL_NonPmWriteByte(u32RegDetEn, u8Val);
1460*53ee8cc1Swenshuai.xi         HAL_SEAL_NonPmWriteByte(u32RegDetEnDummy, u8Val);
1461*53ee8cc1Swenshuai.xi     }
1462*53ee8cc1Swenshuai.xi 
1463*53ee8cc1Swenshuai.xi     return TRUE;
1464*53ee8cc1Swenshuai.xi }
1465*53ee8cc1Swenshuai.xi 
1466*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1467*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_Seal_SecureRangeQuery
1468*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description: Query the attribute of secure range
1469*53ee8cc1Swenshuai.xi /// @param <IN>         \b u8SecureRangeId : Secure range ID
1470*53ee8cc1Swenshuai.xi /// @param <OUT>        \b pAttribute : Attribute of secure range
1471*53ee8cc1Swenshuai.xi /// @param <OUT>        \b pStartAddr : Start address of secure range
1472*53ee8cc1Swenshuai.xi /// @param <OUT>        \b pEndAddr : End address of secure range
1473*53ee8cc1Swenshuai.xi /// @param <RET>        \b RET
1474*53ee8cc1Swenshuai.xi /// @param <GLOBAL>     \b GLOBAL :
1475*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_Seal_SecureRangeQuery(MS_U8 u8MiuDev,MS_U8 u8SecureRangeId,MS_U32 * pAttribute,MS_U64 * pStartAddr,MS_U64 * pEndAddr)1476*53ee8cc1Swenshuai.xi MS_BOOL HAL_Seal_SecureRangeQuery(
1477*53ee8cc1Swenshuai.xi     MS_U8 u8MiuDev,
1478*53ee8cc1Swenshuai.xi     MS_U8 u8SecureRangeId,
1479*53ee8cc1Swenshuai.xi     MS_U32 *pAttribute,
1480*53ee8cc1Swenshuai.xi     MS_U64 *pStartAddr,
1481*53ee8cc1Swenshuai.xi     MS_U64 *pEndAddr)
1482*53ee8cc1Swenshuai.xi {
1483*53ee8cc1Swenshuai.xi     MS_U32 u32RegStartAddr = 0;
1484*53ee8cc1Swenshuai.xi     MS_U32 u32RegEndAddr = 0;
1485*53ee8cc1Swenshuai.xi     MS_U32 u32RegAttribute = 0;
1486*53ee8cc1Swenshuai.xi 
1487*53ee8cc1Swenshuai.xi     if(u8MiuDev == E_HAL_MIU_DEV0)
1488*53ee8cc1Swenshuai.xi     {
1489*53ee8cc1Swenshuai.xi         switch(u8SecureRangeId)
1490*53ee8cc1Swenshuai.xi         {
1491*53ee8cc1Swenshuai.xi             case E_HAL_SEAL_SECURE_RANGE_ID0:
1492*53ee8cc1Swenshuai.xi                 u32RegStartAddr = REG_SECURE0_RANGE0_START_ADDR;
1493*53ee8cc1Swenshuai.xi                 u32RegEndAddr = REG_SECURE0_RANGE0_END_ADDR;
1494*53ee8cc1Swenshuai.xi                 u32RegAttribute = REG_SECURE0_RANGE0_ATTRIBUTE;
1495*53ee8cc1Swenshuai.xi                 break;
1496*53ee8cc1Swenshuai.xi             case E_HAL_SEAL_SECURE_RANGE_ID1:
1497*53ee8cc1Swenshuai.xi                 u32RegStartAddr = REG_SECURE0_RANGE1_START_ADDR;
1498*53ee8cc1Swenshuai.xi                 u32RegEndAddr = REG_SECURE0_RANGE1_END_ADDR;
1499*53ee8cc1Swenshuai.xi                 u32RegAttribute = REG_SECURE0_RANGE1_ATTRIBUTE;
1500*53ee8cc1Swenshuai.xi                 break;
1501*53ee8cc1Swenshuai.xi             case E_HAL_SEAL_SECURE_RANGE_ID2:
1502*53ee8cc1Swenshuai.xi                 u32RegStartAddr = REG_SECURE0_RANGE2_START_ADDR;
1503*53ee8cc1Swenshuai.xi                 u32RegEndAddr = REG_SECURE0_RANGE2_END_ADDR;
1504*53ee8cc1Swenshuai.xi                 u32RegAttribute = REG_SECURE0_RANGE2_ATTRIBUTE;
1505*53ee8cc1Swenshuai.xi                 break;
1506*53ee8cc1Swenshuai.xi             case E_HAL_SEAL_SECURE_RANGE_ID3:
1507*53ee8cc1Swenshuai.xi                 u32RegStartAddr = REG_SECURE0_RANGE3_START_ADDR;
1508*53ee8cc1Swenshuai.xi                 u32RegEndAddr = REG_SECURE0_RANGE3_END_ADDR;
1509*53ee8cc1Swenshuai.xi                 u32RegAttribute = REG_SECURE0_RANGE3_ATTRIBUTE;
1510*53ee8cc1Swenshuai.xi                 break;
1511*53ee8cc1Swenshuai.xi             case E_HAL_SEAL_SECURE_RANGE_ID4:
1512*53ee8cc1Swenshuai.xi                 u32RegStartAddr = REG_SECURE0_RANGE4_START_ADDR;
1513*53ee8cc1Swenshuai.xi                 u32RegEndAddr = REG_SECURE0_RANGE4_END_ADDR;
1514*53ee8cc1Swenshuai.xi                 u32RegAttribute = REG_SECURE0_RANGE4_ATTRIBUTE;
1515*53ee8cc1Swenshuai.xi                 break;
1516*53ee8cc1Swenshuai.xi             case E_HAL_SEAL_SECURE_RANGE_ID5:
1517*53ee8cc1Swenshuai.xi                 u32RegStartAddr = REG_SECURE0_RANGE5_START_ADDR;
1518*53ee8cc1Swenshuai.xi                 u32RegEndAddr = REG_SECURE0_RANGE5_END_ADDR;
1519*53ee8cc1Swenshuai.xi                 u32RegAttribute = REG_SECURE0_RANGE5_ATTRIBUTE;
1520*53ee8cc1Swenshuai.xi                 break;
1521*53ee8cc1Swenshuai.xi             case E_HAL_SEAL_SECURE_RANGE_ID6:
1522*53ee8cc1Swenshuai.xi                 u32RegStartAddr = REG_SECURE0_RANGE6_START_ADDR;
1523*53ee8cc1Swenshuai.xi                 u32RegEndAddr = REG_SECURE0_RANGE6_END_ADDR;
1524*53ee8cc1Swenshuai.xi                 u32RegAttribute = REG_SECURE0_RANGE6_ATTRIBUTE;
1525*53ee8cc1Swenshuai.xi                 break;
1526*53ee8cc1Swenshuai.xi             case E_HAL_SEAL_SECURE_RANGE_ID7:
1527*53ee8cc1Swenshuai.xi                 u32RegStartAddr = REG_SECURE0_RANGE7_START_ADDR;
1528*53ee8cc1Swenshuai.xi                 u32RegEndAddr = REG_SECURE0_RANGE7_END_ADDR;
1529*53ee8cc1Swenshuai.xi                 u32RegAttribute = REG_SECURE0_RANGE7_ATTRIBUTE;
1530*53ee8cc1Swenshuai.xi                 break;
1531*53ee8cc1Swenshuai.xi             default:
1532*53ee8cc1Swenshuai.xi 		        return false;
1533*53ee8cc1Swenshuai.xi         }
1534*53ee8cc1Swenshuai.xi 	}
1535*53ee8cc1Swenshuai.xi 	else if( u8MiuDev == E_HAL_MIU_DEV1 )
1536*53ee8cc1Swenshuai.xi 	{
1537*53ee8cc1Swenshuai.xi         switch(u8SecureRangeId)
1538*53ee8cc1Swenshuai.xi         {
1539*53ee8cc1Swenshuai.xi             case E_HAL_SEAL_SECURE_RANGE_ID0:
1540*53ee8cc1Swenshuai.xi                 u32RegStartAddr = REG_SECURE1_RANGE0_START_ADDR;
1541*53ee8cc1Swenshuai.xi                 u32RegEndAddr = REG_SECURE1_RANGE0_END_ADDR;
1542*53ee8cc1Swenshuai.xi                 u32RegAttribute = REG_SECURE1_RANGE0_ATTRIBUTE;
1543*53ee8cc1Swenshuai.xi                 break;
1544*53ee8cc1Swenshuai.xi             case E_HAL_SEAL_SECURE_RANGE_ID1:
1545*53ee8cc1Swenshuai.xi                 u32RegStartAddr = REG_SECURE1_RANGE1_START_ADDR;
1546*53ee8cc1Swenshuai.xi                 u32RegEndAddr = REG_SECURE1_RANGE1_END_ADDR;
1547*53ee8cc1Swenshuai.xi                 u32RegAttribute = REG_SECURE1_RANGE1_ATTRIBUTE;
1548*53ee8cc1Swenshuai.xi                 break;
1549*53ee8cc1Swenshuai.xi             case E_HAL_SEAL_SECURE_RANGE_ID2:
1550*53ee8cc1Swenshuai.xi                 u32RegStartAddr = REG_SECURE1_RANGE2_START_ADDR;
1551*53ee8cc1Swenshuai.xi                 u32RegEndAddr = REG_SECURE1_RANGE2_END_ADDR;
1552*53ee8cc1Swenshuai.xi                 u32RegAttribute = REG_SECURE1_RANGE2_ATTRIBUTE;
1553*53ee8cc1Swenshuai.xi                 break;
1554*53ee8cc1Swenshuai.xi             case E_HAL_SEAL_SECURE_RANGE_ID3:
1555*53ee8cc1Swenshuai.xi                 u32RegStartAddr = REG_SECURE1_RANGE3_START_ADDR;
1556*53ee8cc1Swenshuai.xi                 u32RegEndAddr = REG_SECURE1_RANGE3_END_ADDR;
1557*53ee8cc1Swenshuai.xi                 u32RegAttribute = REG_SECURE1_RANGE3_ATTRIBUTE;
1558*53ee8cc1Swenshuai.xi                 break;
1559*53ee8cc1Swenshuai.xi             case E_HAL_SEAL_SECURE_RANGE_ID4:
1560*53ee8cc1Swenshuai.xi                 u32RegStartAddr = REG_SECURE1_RANGE4_START_ADDR;
1561*53ee8cc1Swenshuai.xi                 u32RegEndAddr = REG_SECURE1_RANGE4_END_ADDR;
1562*53ee8cc1Swenshuai.xi                 u32RegAttribute = REG_SECURE1_RANGE4_ATTRIBUTE;
1563*53ee8cc1Swenshuai.xi                 break;
1564*53ee8cc1Swenshuai.xi             case E_HAL_SEAL_SECURE_RANGE_ID5:
1565*53ee8cc1Swenshuai.xi                 u32RegStartAddr = REG_SECURE1_RANGE5_START_ADDR;
1566*53ee8cc1Swenshuai.xi                 u32RegEndAddr = REG_SECURE1_RANGE5_END_ADDR;
1567*53ee8cc1Swenshuai.xi                 u32RegAttribute = REG_SECURE1_RANGE5_ATTRIBUTE;
1568*53ee8cc1Swenshuai.xi                 break;
1569*53ee8cc1Swenshuai.xi             case E_HAL_SEAL_SECURE_RANGE_ID6:
1570*53ee8cc1Swenshuai.xi                 u32RegStartAddr = REG_SECURE1_RANGE6_START_ADDR;
1571*53ee8cc1Swenshuai.xi                 u32RegEndAddr = REG_SECURE1_RANGE6_END_ADDR;
1572*53ee8cc1Swenshuai.xi                 u32RegAttribute = REG_SECURE1_RANGE6_ATTRIBUTE;
1573*53ee8cc1Swenshuai.xi                 break;
1574*53ee8cc1Swenshuai.xi             case E_HAL_SEAL_SECURE_RANGE_ID7:
1575*53ee8cc1Swenshuai.xi                 u32RegStartAddr = REG_SECURE1_RANGE7_START_ADDR;
1576*53ee8cc1Swenshuai.xi                 u32RegEndAddr = REG_SECURE1_RANGE7_END_ADDR;
1577*53ee8cc1Swenshuai.xi                 u32RegAttribute = REG_SECURE1_RANGE7_ATTRIBUTE;
1578*53ee8cc1Swenshuai.xi                 break;
1579*53ee8cc1Swenshuai.xi             default:
1580*53ee8cc1Swenshuai.xi 		        return false;
1581*53ee8cc1Swenshuai.xi         }
1582*53ee8cc1Swenshuai.xi 	}
1583*53ee8cc1Swenshuai.xi     else
1584*53ee8cc1Swenshuai.xi     {
1585*53ee8cc1Swenshuai.xi         HAL_SEAL_ERR("%s MIU%d is not support\n", __FUNCTION__, u8MiuDev);
1586*53ee8cc1Swenshuai.xi     }
1587*53ee8cc1Swenshuai.xi 
1588*53ee8cc1Swenshuai.xi     // Get secure range attribute
1589*53ee8cc1Swenshuai.xi     *pAttribute = (MS_U32)(HAL_SEAL_NonPmReadByte(u32RegAttribute));
1590*53ee8cc1Swenshuai.xi 
1591*53ee8cc1Swenshuai.xi     // Get start address
1592*53ee8cc1Swenshuai.xi     *pStartAddr = HAL_SEAL_NonPmRead6Byte(u32RegStartAddr);
1593*53ee8cc1Swenshuai.xi 
1594*53ee8cc1Swenshuai.xi     // Get end address
1595*53ee8cc1Swenshuai.xi     *pEndAddr = HAL_SEAL_NonPmRead6Byte(u32RegEndAddr);
1596*53ee8cc1Swenshuai.xi 
1597*53ee8cc1Swenshuai.xi     return TRUE;
1598*53ee8cc1Swenshuai.xi }
1599*53ee8cc1Swenshuai.xi 
1600*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1601*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_Seal_IMI_RangeSet
1602*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description: set the secure range on internel memory interface
1603*53ee8cc1Swenshuai.xi /// @param <IN>         \b u32StartAddr : Start address of secure range on IMI
1604*53ee8cc1Swenshuai.xi /// @param <IN>         \b u32EndAddr : End address of secure range on IMI
1605*53ee8cc1Swenshuai.xi /// @param <IN>         \b bEnable : Enable/Disable secure range on IMI
1606*53ee8cc1Swenshuai.xi /// @param <OUT>        \b OUT :
1607*53ee8cc1Swenshuai.xi /// @param <RET>        \b RET
1608*53ee8cc1Swenshuai.xi /// @param <GLOBAL>     \b GLOBAL :
1609*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_Seal_IMI_RangeSet(MS_U32 u32StartAddr,MS_U32 u32EndAddr,MS_BOOL bEnable)1610*53ee8cc1Swenshuai.xi MS_BOOL HAL_Seal_IMI_RangeSet(MS_U32 u32StartAddr, MS_U32 u32EndAddr, MS_BOOL bEnable)
1611*53ee8cc1Swenshuai.xi {
1612*53ee8cc1Swenshuai.xi     MS_U32 u32RegStartAddr = 0;
1613*53ee8cc1Swenshuai.xi     MS_U32 u32RegEndAddr = 0;
1614*53ee8cc1Swenshuai.xi 
1615*53ee8cc1Swenshuai.xi     u32RegStartAddr = REG_IMI_RANGE_START_ADDR;
1616*53ee8cc1Swenshuai.xi     u32RegEndAddr = REG_IMI_RANGE_END_ADDR;
1617*53ee8cc1Swenshuai.xi 
1618*53ee8cc1Swenshuai.xi     if(bEnable == 1)
1619*53ee8cc1Swenshuai.xi     {
1620*53ee8cc1Swenshuai.xi         // Set start address
1621*53ee8cc1Swenshuai.xi         HAL_SEAL_NonPmWrite4Byte(u32RegStartAddr, u32StartAddr);
1622*53ee8cc1Swenshuai.xi 
1623*53ee8cc1Swenshuai.xi         // Set end address
1624*53ee8cc1Swenshuai.xi         HAL_SEAL_NonPmWrite4Byte(u32RegEndAddr, u32EndAddr);
1625*53ee8cc1Swenshuai.xi     }
1626*53ee8cc1Swenshuai.xi     else
1627*53ee8cc1Swenshuai.xi     {
1628*53ee8cc1Swenshuai.xi         // Reset start address
1629*53ee8cc1Swenshuai.xi         HAL_SEAL_NonPmWrite4Byte(u32RegStartAddr, 0x0);
1630*53ee8cc1Swenshuai.xi 
1631*53ee8cc1Swenshuai.xi         // Reset end address
1632*53ee8cc1Swenshuai.xi         HAL_SEAL_NonPmWrite4Byte(u32RegEndAddr,0x0);
1633*53ee8cc1Swenshuai.xi     }
1634*53ee8cc1Swenshuai.xi 
1635*53ee8cc1Swenshuai.xi     return TRUE;
1636*53ee8cc1Swenshuai.xi }
1637*53ee8cc1Swenshuai.xi 
1638*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1639*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_Seal_GetMiuHitFlag
1640*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description: Get the information about hitted flag on MIU
1641*53ee8cc1Swenshuai.xi /// @param <IN>         \b u8MiuDev: 0:MIU0 1:MIU1 2:MIU2 3:MIU3
1642*53ee8cc1Swenshuai.xi /// @param <OUT>        \b None:
1643*53ee8cc1Swenshuai.xi /// @param <RET>        \b MS_BOOL: Hitted flag
1644*53ee8cc1Swenshuai.xi /// @param <GLOBAL>     \b None :
1645*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_Seal_GetMiuHitFlag(MS_U8 u8MiuDev)1646*53ee8cc1Swenshuai.xi MS_BOOL HAL_Seal_GetMiuHitFlag(MS_U8 u8MiuDev)
1647*53ee8cc1Swenshuai.xi {
1648*53ee8cc1Swenshuai.xi     MS_U32 u32RegLogAddr;
1649*53ee8cc1Swenshuai.xi     MS_U16 u16Val;
1650*53ee8cc1Swenshuai.xi 
1651*53ee8cc1Swenshuai.xi     switch(u8MiuDev)
1652*53ee8cc1Swenshuai.xi     {
1653*53ee8cc1Swenshuai.xi         case E_HAL_MIU_DEV0:
1654*53ee8cc1Swenshuai.xi             u32RegLogAddr = REG_SECURE0_HITTED_STATUS;
1655*53ee8cc1Swenshuai.xi             break;
1656*53ee8cc1Swenshuai.xi         case E_HAL_MIU_DEV1:
1657*53ee8cc1Swenshuai.xi             u32RegLogAddr = REG_SECURE1_HITTED_STATUS;
1658*53ee8cc1Swenshuai.xi             break;
1659*53ee8cc1Swenshuai.xi         default:
1660*53ee8cc1Swenshuai.xi             return FALSE;
1661*53ee8cc1Swenshuai.xi     }
1662*53ee8cc1Swenshuai.xi 
1663*53ee8cc1Swenshuai.xi     u16Val = HAL_SEAL_NonPmRead2Byte(u32RegLogAddr);
1664*53ee8cc1Swenshuai.xi 
1665*53ee8cc1Swenshuai.xi     if(REG_SECURE_HITTED_FALG & u16Val)
1666*53ee8cc1Swenshuai.xi     {
1667*53ee8cc1Swenshuai.xi         return TRUE;
1668*53ee8cc1Swenshuai.xi     }
1669*53ee8cc1Swenshuai.xi     else
1670*53ee8cc1Swenshuai.xi     {
1671*53ee8cc1Swenshuai.xi         return FALSE;
1672*53ee8cc1Swenshuai.xi     }
1673*53ee8cc1Swenshuai.xi }
1674*53ee8cc1Swenshuai.xi 
1675*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1676*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_Seal_GetHitRangeID
1677*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description: Get the information about the ID of hitted secure range on MIU
1678*53ee8cc1Swenshuai.xi /// @param <IN>         \b u8MiuDev: 0:MIU0 1:MIU1 2:MIU2 3:MIU3
1679*53ee8cc1Swenshuai.xi /// @param <OUT>        \b None:
1680*53ee8cc1Swenshuai.xi /// @param <RET>        \b MS_U8: ID of hitted secure range
1681*53ee8cc1Swenshuai.xi /// @param <GLOBAL>     \b None :
1682*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_Seal_GetMiuHitRangeID(MS_U8 u8MiuDev)1683*53ee8cc1Swenshuai.xi MS_U8 HAL_Seal_GetMiuHitRangeID(MS_U8 u8MiuDev)
1684*53ee8cc1Swenshuai.xi {
1685*53ee8cc1Swenshuai.xi     MS_U32 u32RegLogAddr;
1686*53ee8cc1Swenshuai.xi     MS_U16 u16Val;
1687*53ee8cc1Swenshuai.xi     MS_U16 u8ret;
1688*53ee8cc1Swenshuai.xi 
1689*53ee8cc1Swenshuai.xi     switch(u8MiuDev)
1690*53ee8cc1Swenshuai.xi     {
1691*53ee8cc1Swenshuai.xi         case E_HAL_MIU_DEV0:
1692*53ee8cc1Swenshuai.xi             u32RegLogAddr = REG_SECURE0_HITTED_STATUS;
1693*53ee8cc1Swenshuai.xi             break;
1694*53ee8cc1Swenshuai.xi         case E_HAL_MIU_DEV1:
1695*53ee8cc1Swenshuai.xi             u32RegLogAddr = REG_SECURE1_HITTED_STATUS;
1696*53ee8cc1Swenshuai.xi             break;
1697*53ee8cc1Swenshuai.xi         default:
1698*53ee8cc1Swenshuai.xi             return FALSE;
1699*53ee8cc1Swenshuai.xi     }
1700*53ee8cc1Swenshuai.xi 
1701*53ee8cc1Swenshuai.xi     u16Val = HAL_SEAL_NonPmRead2Byte(u32RegLogAddr);
1702*53ee8cc1Swenshuai.xi 
1703*53ee8cc1Swenshuai.xi     u8ret =(MS_U8)GET_HIT_RANGE_ID(u16Val);
1704*53ee8cc1Swenshuai.xi 
1705*53ee8cc1Swenshuai.xi     return u8ret;
1706*53ee8cc1Swenshuai.xi }
1707*53ee8cc1Swenshuai.xi 
1708*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1709*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_Seal_GetHitClientID
1710*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description: Get the information about the ID of hittd MIU client ID on MIU
1711*53ee8cc1Swenshuai.xi /// @param <IN>         \b u8MiuDev: 0:MIU0 1:MIU1 2:MIU2 3:MIU3
1712*53ee8cc1Swenshuai.xi /// @param <OUT>        \b None:
1713*53ee8cc1Swenshuai.xi /// @param <RET>        \b MS_U8: hittd MIU client ID
1714*53ee8cc1Swenshuai.xi /// @param <GLOBAL>     \b None :
1715*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_Seal_GetMiuHitClientID(MS_U8 u8MiuDev)1716*53ee8cc1Swenshuai.xi MS_U8 HAL_Seal_GetMiuHitClientID(MS_U8 u8MiuDev)
1717*53ee8cc1Swenshuai.xi {
1718*53ee8cc1Swenshuai.xi     MS_U32 u32RegLogAddr;
1719*53ee8cc1Swenshuai.xi     MS_U16 u16Val;
1720*53ee8cc1Swenshuai.xi     MS_U16 u8ret;
1721*53ee8cc1Swenshuai.xi 
1722*53ee8cc1Swenshuai.xi     switch(u8MiuDev)
1723*53ee8cc1Swenshuai.xi     {
1724*53ee8cc1Swenshuai.xi         case E_HAL_MIU_DEV0:
1725*53ee8cc1Swenshuai.xi             u32RegLogAddr = REG_SECURE0_HITTED_STATUS;
1726*53ee8cc1Swenshuai.xi             break;
1727*53ee8cc1Swenshuai.xi         case E_HAL_MIU_DEV1:
1728*53ee8cc1Swenshuai.xi             u32RegLogAddr = REG_SECURE1_HITTED_STATUS;
1729*53ee8cc1Swenshuai.xi             break;
1730*53ee8cc1Swenshuai.xi         default:
1731*53ee8cc1Swenshuai.xi             return FALSE;
1732*53ee8cc1Swenshuai.xi     }
1733*53ee8cc1Swenshuai.xi 
1734*53ee8cc1Swenshuai.xi     u16Val = HAL_SEAL_NonPmRead2Byte(u32RegLogAddr);
1735*53ee8cc1Swenshuai.xi     u8ret =(MS_U8)GET_HIT_CLIENT_ID(u16Val);
1736*53ee8cc1Swenshuai.xi 
1737*53ee8cc1Swenshuai.xi     return u8ret;
1738*53ee8cc1Swenshuai.xi }
1739*53ee8cc1Swenshuai.xi 
1740*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1741*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_Seal_GetSecureFlag
1742*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description: Get the information about the hitted client on MIU be secure or not
1743*53ee8cc1Swenshuai.xi /// @param <IN>         \b u8MiuDev: 0:MIU0 1:MIU1 2:MIU2 3:MIU3
1744*53ee8cc1Swenshuai.xi /// @param <OUT>        \b None:
1745*53ee8cc1Swenshuai.xi /// @param <RET>        \b MS_BOOL: Secure flag
1746*53ee8cc1Swenshuai.xi /// @param <GLOBAL>     \b None :
1747*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_Seal_GetMiuSecureFlag(MS_U8 u8MiuDev)1748*53ee8cc1Swenshuai.xi MS_BOOL HAL_Seal_GetMiuSecureFlag(MS_U8 u8MiuDev)
1749*53ee8cc1Swenshuai.xi {
1750*53ee8cc1Swenshuai.xi     return TRUE;
1751*53ee8cc1Swenshuai.xi }
1752*53ee8cc1Swenshuai.xi 
1753*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1754*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_Seal_GetWriteFlag
1755*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description: Get the information about the violation on MIU be write or read access
1756*53ee8cc1Swenshuai.xi /// @param <IN>         \b u8MiuDev: 0:MIU0 1:MIU1 2:MIU2 3:MIU3
1757*53ee8cc1Swenshuai.xi /// @param <OUT>        \b None:
1758*53ee8cc1Swenshuai.xi /// @param <RET>        \b MS_BOOL: Write flag
1759*53ee8cc1Swenshuai.xi /// @param <GLOBAL>     \b None :
1760*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_Seal_GetMiuWriteFlag(MS_U8 u8MiuDev)1761*53ee8cc1Swenshuai.xi MS_BOOL HAL_Seal_GetMiuWriteFlag(MS_U8 u8MiuDev)
1762*53ee8cc1Swenshuai.xi {
1763*53ee8cc1Swenshuai.xi     MS_U32 u32RegLogAddr;
1764*53ee8cc1Swenshuai.xi     MS_U16 u16Val;
1765*53ee8cc1Swenshuai.xi 
1766*53ee8cc1Swenshuai.xi     switch(u8MiuDev)
1767*53ee8cc1Swenshuai.xi     {
1768*53ee8cc1Swenshuai.xi         case E_HAL_MIU_DEV0:
1769*53ee8cc1Swenshuai.xi             u32RegLogAddr = REG_SECURE0_HITTED_STATUS;
1770*53ee8cc1Swenshuai.xi             break;
1771*53ee8cc1Swenshuai.xi         case E_HAL_MIU_DEV1:
1772*53ee8cc1Swenshuai.xi             u32RegLogAddr = REG_SECURE1_HITTED_STATUS;
1773*53ee8cc1Swenshuai.xi             break;
1774*53ee8cc1Swenshuai.xi         default:
1775*53ee8cc1Swenshuai.xi             return FALSE;
1776*53ee8cc1Swenshuai.xi     }
1777*53ee8cc1Swenshuai.xi 
1778*53ee8cc1Swenshuai.xi     u16Val = HAL_SEAL_NonPmRead2Byte(u32RegLogAddr);
1779*53ee8cc1Swenshuai.xi 
1780*53ee8cc1Swenshuai.xi     if(REG_SECURE_HITTED_IS_WRITE & u16Val)
1781*53ee8cc1Swenshuai.xi     {
1782*53ee8cc1Swenshuai.xi         return TRUE;
1783*53ee8cc1Swenshuai.xi     }
1784*53ee8cc1Swenshuai.xi     else
1785*53ee8cc1Swenshuai.xi     {
1786*53ee8cc1Swenshuai.xi         return FALSE;
1787*53ee8cc1Swenshuai.xi     }
1788*53ee8cc1Swenshuai.xi }
1789*53ee8cc1Swenshuai.xi 
1790*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1791*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_Seal_GetHitAddr
1792*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description: Get the information about the hitted address on MIU
1793*53ee8cc1Swenshuai.xi /// @param <IN>         \b u8MiuDev: 0:MIU0 1:MIU1 2:MIU2 3:MIU3
1794*53ee8cc1Swenshuai.xi /// @param <OUT>        \b None:
1795*53ee8cc1Swenshuai.xi /// @param <RET>        \b MS_U32: Hitted address
1796*53ee8cc1Swenshuai.xi /// @param <GLOBAL>     \b None :
1797*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_Seal_GetMiuHitAddr(MS_U8 u8MiuDev)1798*53ee8cc1Swenshuai.xi MS_U64 HAL_Seal_GetMiuHitAddr(MS_U8 u8MiuDev)
1799*53ee8cc1Swenshuai.xi {
1800*53ee8cc1Swenshuai.xi     MS_U32 u32RegAddr;
1801*53ee8cc1Swenshuai.xi     MS_U64 u64Val;
1802*53ee8cc1Swenshuai.xi 
1803*53ee8cc1Swenshuai.xi     switch(u8MiuDev)
1804*53ee8cc1Swenshuai.xi     {
1805*53ee8cc1Swenshuai.xi         case E_HAL_MIU_DEV0:
1806*53ee8cc1Swenshuai.xi             u32RegAddr = REG_SECURE0_HITTED_ADDR;
1807*53ee8cc1Swenshuai.xi             break;
1808*53ee8cc1Swenshuai.xi         case E_HAL_MIU_DEV1:
1809*53ee8cc1Swenshuai.xi             u32RegAddr = REG_SECURE1_HITTED_ADDR;
1810*53ee8cc1Swenshuai.xi             break;
1811*53ee8cc1Swenshuai.xi         default:
1812*53ee8cc1Swenshuai.xi             return FALSE;
1813*53ee8cc1Swenshuai.xi     }
1814*53ee8cc1Swenshuai.xi 
1815*53ee8cc1Swenshuai.xi     u64Val = HAL_SEAL_NonPmRead6Byte(u32RegAddr);
1816*53ee8cc1Swenshuai.xi     return u64Val;
1817*53ee8cc1Swenshuai.xi }
1818*53ee8cc1Swenshuai.xi 
1819*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1820*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_Seal_ClearMiuHitLog
1821*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description: Clear the hitted log on MIU
1822*53ee8cc1Swenshuai.xi /// @param <IN>         \b u8MiuDev: 0:MIU0 1:MIU1 2:MIU2 3:MIU3
1823*53ee8cc1Swenshuai.xi /// @param <OUT>        \b None:
1824*53ee8cc1Swenshuai.xi /// @param <RET>        \b RET:
1825*53ee8cc1Swenshuai.xi /// @param <GLOBAL>     \b None :
1826*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_Seal_ClearMiuHitLog(MS_U8 u8MiuDev)1827*53ee8cc1Swenshuai.xi MS_BOOL HAL_Seal_ClearMiuHitLog(MS_U8 u8MiuDev)
1828*53ee8cc1Swenshuai.xi {
1829*53ee8cc1Swenshuai.xi     MS_U32 u32RegLogAddr;
1830*53ee8cc1Swenshuai.xi 
1831*53ee8cc1Swenshuai.xi     switch(u8MiuDev)
1832*53ee8cc1Swenshuai.xi     {
1833*53ee8cc1Swenshuai.xi         case E_HAL_MIU_DEV0:
1834*53ee8cc1Swenshuai.xi             u32RegLogAddr = REG_SECURE0_HITTED_STATUS;
1835*53ee8cc1Swenshuai.xi             break;
1836*53ee8cc1Swenshuai.xi         case E_HAL_MIU_DEV1:
1837*53ee8cc1Swenshuai.xi             u32RegLogAddr = REG_SECURE1_HITTED_STATUS;
1838*53ee8cc1Swenshuai.xi             break;
1839*53ee8cc1Swenshuai.xi         default:
1840*53ee8cc1Swenshuai.xi             return FALSE;
1841*53ee8cc1Swenshuai.xi     }
1842*53ee8cc1Swenshuai.xi 
1843*53ee8cc1Swenshuai.xi     HAL_SEAL_NonPmWrite2BytesBit(u32RegLogAddr, TRUE, REG_SECURE_HITTED_LOG_CLR);
1844*53ee8cc1Swenshuai.xi     HAL_SEAL_NonPmWrite2BytesBit(u32RegLogAddr, FALSE, REG_SECURE_HITTED_LOG_CLR);
1845*53ee8cc1Swenshuai.xi     return TRUE;
1846*53ee8cc1Swenshuai.xi }
1847*53ee8cc1Swenshuai.xi 
1848*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1849*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_Seal_SecureRangeLock
1850*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description: One-way setting to lock the specific secure range
1851*53ee8cc1Swenshuai.xi /// @param <IN>         \b u8MiuDev: 0:MIU0 1:MIU1 2:MIU2 3:MIU3
1852*53ee8cc1Swenshuai.xi /// @param <IN>         \b u8SecureRangeId: Secure range ID
1853*53ee8cc1Swenshuai.xi /// @param <OUT>        \b None:
1854*53ee8cc1Swenshuai.xi /// @param <RET>        \b RET
1855*53ee8cc1Swenshuai.xi /// @param <GLOBAL>     \b None :
1856*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_Seal_SecureRangeLock(MS_U8 u8MiuDev,MS_U8 u8SecureRangeId)1857*53ee8cc1Swenshuai.xi MS_BOOL HAL_Seal_SecureRangeLock(MS_U8 u8MiuDev, MS_U8 u8SecureRangeId)
1858*53ee8cc1Swenshuai.xi {
1859*53ee8cc1Swenshuai.xi     MS_U32 u32RegAddr;
1860*53ee8cc1Swenshuai.xi     MS_U8 u8Val;
1861*53ee8cc1Swenshuai.xi 
1862*53ee8cc1Swenshuai.xi     switch(u8MiuDev)
1863*53ee8cc1Swenshuai.xi     {
1864*53ee8cc1Swenshuai.xi         case E_HAL_MIU_DEV0:
1865*53ee8cc1Swenshuai.xi             u32RegAddr = REG_SECURE0_LOCK;
1866*53ee8cc1Swenshuai.xi             break;
1867*53ee8cc1Swenshuai.xi         case E_HAL_MIU_DEV1:
1868*53ee8cc1Swenshuai.xi             u32RegAddr = REG_SECURE1_LOCK;
1869*53ee8cc1Swenshuai.xi             break;
1870*53ee8cc1Swenshuai.xi         default:
1871*53ee8cc1Swenshuai.xi             HAL_SEAL_ERR("%s MIU%d is not support\n", __FUNCTION__, u8MiuDev);
1872*53ee8cc1Swenshuai.xi             return false;
1873*53ee8cc1Swenshuai.xi     }
1874*53ee8cc1Swenshuai.xi 
1875*53ee8cc1Swenshuai.xi     u8Val = HAL_SEAL_NonPmReadByte(u32RegAddr);
1876*53ee8cc1Swenshuai.xi     u8Val = u8Val | (1 << u8SecureRangeId);
1877*53ee8cc1Swenshuai.xi     HAL_SEAL_NonPmWriteByte(u32RegAddr, u8Val);
1878*53ee8cc1Swenshuai.xi 
1879*53ee8cc1Swenshuai.xi     return TRUE;
1880*53ee8cc1Swenshuai.xi }
1881*53ee8cc1Swenshuai.xi 
1882*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1883*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_Seal_SecureProcessorSet
1884*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description: Define the specific processor be secure or not
1885*53ee8cc1Swenshuai.xi /// @param <IN>         \b u8ProcessorId: Processor ID
1886*53ee8cc1Swenshuai.xi /// @param <IN>         \b bSecure: 1: non-secure 0:secure
1887*53ee8cc1Swenshuai.xi /// @param <OUT>        \b None:
1888*53ee8cc1Swenshuai.xi /// @param <RET>        \b RET
1889*53ee8cc1Swenshuai.xi /// @param <GLOBAL>     \b None :
1890*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_Seal_NonSecureProcessorSet(MS_U8 u8ProcessorId,MS_BOOL bNonSecure)1891*53ee8cc1Swenshuai.xi MS_BOOL HAL_Seal_NonSecureProcessorSet(MS_U8 u8ProcessorId, MS_BOOL bNonSecure)
1892*53ee8cc1Swenshuai.xi {
1893*53ee8cc1Swenshuai.xi     MS_U32 u32RegAddr;
1894*53ee8cc1Swenshuai.xi     MS_U16 u16Val;
1895*53ee8cc1Swenshuai.xi     MS_S32 s32HwIdx;
1896*53ee8cc1Swenshuai.xi 
1897*53ee8cc1Swenshuai.xi     s32HwIdx = HAL_SEAL_GetProcessorIdx(u8ProcessorId);
1898*53ee8cc1Swenshuai.xi 
1899*53ee8cc1Swenshuai.xi     if(s32HwIdx == -1)
1900*53ee8cc1Swenshuai.xi     {
1901*53ee8cc1Swenshuai.xi        HAL_SEAL_ERR("Processor ID:%d doesn't exist !\n", u8ProcessorId);
1902*53ee8cc1Swenshuai.xi        return FALSE;
1903*53ee8cc1Swenshuai.xi     }
1904*53ee8cc1Swenshuai.xi 
1905*53ee8cc1Swenshuai.xi     // special case for HEMCU
1906*53ee8cc1Swenshuai.xi     if(u8ProcessorId == E_SEAL_HEMCU)
1907*53ee8cc1Swenshuai.xi     {
1908*53ee8cc1Swenshuai.xi         if(bNonSecure)
1909*53ee8cc1Swenshuai.xi             HAL_SEAL_NonPmWriteRegBit(REG_TZPC_NONSECURE_HEMCU, BIT3, ENABLE);
1910*53ee8cc1Swenshuai.xi         else
1911*53ee8cc1Swenshuai.xi             HAL_SEAL_NonPmWriteRegBit(REG_TZPC_NONSECURE_HEMCU, BIT3, DISABLE);
1912*53ee8cc1Swenshuai.xi 
1913*53ee8cc1Swenshuai.xi         return TRUE;
1914*53ee8cc1Swenshuai.xi     }
1915*53ee8cc1Swenshuai.xi 
1916*53ee8cc1Swenshuai.xi     u32RegAddr = REG_TZPC_NONSECURE_PROCESSOR;
1917*53ee8cc1Swenshuai.xi     u16Val = HAL_SEAL_NonPmRead2Byte(u32RegAddr);
1918*53ee8cc1Swenshuai.xi 
1919*53ee8cc1Swenshuai.xi     if(bNonSecure)
1920*53ee8cc1Swenshuai.xi     {
1921*53ee8cc1Swenshuai.xi         u16Val = u16Val | (1 << (s32HwIdx * 2));
1922*53ee8cc1Swenshuai.xi     }
1923*53ee8cc1Swenshuai.xi     else
1924*53ee8cc1Swenshuai.xi     {
1925*53ee8cc1Swenshuai.xi         u16Val = u16Val & ~(1 << (s32HwIdx * 2));
1926*53ee8cc1Swenshuai.xi     }
1927*53ee8cc1Swenshuai.xi 
1928*53ee8cc1Swenshuai.xi     HAL_SEAL_NonPmWrite2Byte(u32RegAddr, u16Val);
1929*53ee8cc1Swenshuai.xi 
1930*53ee8cc1Swenshuai.xi     return TRUE;
1931*53ee8cc1Swenshuai.xi }
1932*53ee8cc1Swenshuai.xi 
1933*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1934*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_Seal_SecureProcessorQuery
1935*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description: Query the specific processor be secure or not
1936*53ee8cc1Swenshuai.xi /// @param <IN>         \b u8ProcessorId: Processor ID
1937*53ee8cc1Swenshuai.xi /// @param <OUT>        \b pSecure: 1: non-secure 0:secure
1938*53ee8cc1Swenshuai.xi /// @param <RET>        \b RET
1939*53ee8cc1Swenshuai.xi /// @param <GLOBAL>     \b None :
1940*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_Seal_NonSecureProcessorQuery(MS_U8 u8ProcessorId,MS_BOOL * pNonSecure)1941*53ee8cc1Swenshuai.xi MS_BOOL HAL_Seal_NonSecureProcessorQuery(MS_U8 u8ProcessorId, MS_BOOL *pNonSecure)
1942*53ee8cc1Swenshuai.xi {
1943*53ee8cc1Swenshuai.xi     MS_U32 u32RegAddr;
1944*53ee8cc1Swenshuai.xi     MS_U16 u16Val;
1945*53ee8cc1Swenshuai.xi     MS_U16 s32HwIdx;
1946*53ee8cc1Swenshuai.xi 
1947*53ee8cc1Swenshuai.xi     s32HwIdx = HAL_SEAL_GetProcessorIdx(u8ProcessorId);
1948*53ee8cc1Swenshuai.xi 
1949*53ee8cc1Swenshuai.xi     if(s32HwIdx == -1)
1950*53ee8cc1Swenshuai.xi     {
1951*53ee8cc1Swenshuai.xi        HAL_SEAL_ERR("Processor ID:%d doesn't exist !\n", u8ProcessorId);
1952*53ee8cc1Swenshuai.xi        return FALSE;
1953*53ee8cc1Swenshuai.xi     }
1954*53ee8cc1Swenshuai.xi 
1955*53ee8cc1Swenshuai.xi     // special case for HEMCU
1956*53ee8cc1Swenshuai.xi     if(u8ProcessorId == E_SEAL_HEMCU)
1957*53ee8cc1Swenshuai.xi     {
1958*53ee8cc1Swenshuai.xi         u32RegAddr = REG_TZPC_NONSECURE_HEMCU;
1959*53ee8cc1Swenshuai.xi         u16Val = (MS_U8)HAL_SEAL_NonPmReadByte(u32RegAddr);
1960*53ee8cc1Swenshuai.xi 
1961*53ee8cc1Swenshuai.xi         if(u16Val & BIT3)
1962*53ee8cc1Swenshuai.xi         {
1963*53ee8cc1Swenshuai.xi             *pNonSecure = 1;
1964*53ee8cc1Swenshuai.xi         }
1965*53ee8cc1Swenshuai.xi         else
1966*53ee8cc1Swenshuai.xi         {
1967*53ee8cc1Swenshuai.xi             *pNonSecure = 0;
1968*53ee8cc1Swenshuai.xi         }
1969*53ee8cc1Swenshuai.xi         return TRUE;
1970*53ee8cc1Swenshuai.xi     }
1971*53ee8cc1Swenshuai.xi 
1972*53ee8cc1Swenshuai.xi     u32RegAddr = REG_TZPC_NONSECURE_PROCESSOR;
1973*53ee8cc1Swenshuai.xi     u16Val = HAL_SEAL_NonPmRead2Byte(u32RegAddr);
1974*53ee8cc1Swenshuai.xi 
1975*53ee8cc1Swenshuai.xi     if(u16Val & (1 << (s32HwIdx * 2)))
1976*53ee8cc1Swenshuai.xi     {
1977*53ee8cc1Swenshuai.xi         *pNonSecure = 1;
1978*53ee8cc1Swenshuai.xi     }
1979*53ee8cc1Swenshuai.xi     else
1980*53ee8cc1Swenshuai.xi     {
1981*53ee8cc1Swenshuai.xi         *pNonSecure = 0;
1982*53ee8cc1Swenshuai.xi     }
1983*53ee8cc1Swenshuai.xi 
1984*53ee8cc1Swenshuai.xi     return TRUE;
1985*53ee8cc1Swenshuai.xi }
1986*53ee8cc1Swenshuai.xi 
1987*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
1988*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_Seal_SecureSlaveSet
1989*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description: Define the specific slave IP be secure or not
1990*53ee8cc1Swenshuai.xi /// @param <IN>         \b u32SlaveId: Slave ID
1991*53ee8cc1Swenshuai.xi /// @param <IN>         \b bSecure: 0: non-secure 1:secure
1992*53ee8cc1Swenshuai.xi /// @param <OUT>        \b None:
1993*53ee8cc1Swenshuai.xi /// @param <RET>        \b RET
1994*53ee8cc1Swenshuai.xi /// @param <GLOBAL>     \b None :
1995*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_Seal_SecureSlaveSet(MS_U32 u32SlaveId,MS_BOOL bSecure)1996*53ee8cc1Swenshuai.xi MS_BOOL HAL_Seal_SecureSlaveSet(MS_U32 u32SlaveId, MS_BOOL bSecure)
1997*53ee8cc1Swenshuai.xi {
1998*53ee8cc1Swenshuai.xi     MS_U32 u32RegAddr;
1999*53ee8cc1Swenshuai.xi     MS_U16 u16Val;
2000*53ee8cc1Swenshuai.xi     MS_S32 s32HwIdx;
2001*53ee8cc1Swenshuai.xi     MS_U8 u8GroupId;
2002*53ee8cc1Swenshuai.xi     MS_U8 u8ClientId;
2003*53ee8cc1Swenshuai.xi     MS_BOOL bIsPm;
2004*53ee8cc1Swenshuai.xi 
2005*53ee8cc1Swenshuai.xi     bIsPm = 0;
2006*53ee8cc1Swenshuai.xi     s32HwIdx = HAL_SEAL_GetNonPmIpIdx(u32SlaveId);
2007*53ee8cc1Swenshuai.xi 
2008*53ee8cc1Swenshuai.xi     //Slave ID not in Non-PM group, check if u32SlaveId in PM group
2009*53ee8cc1Swenshuai.xi     if(s32HwIdx == -1)
2010*53ee8cc1Swenshuai.xi     {
2011*53ee8cc1Swenshuai.xi         s32HwIdx = HAL_SEAL_GetPmIpIdx(u32SlaveId);
2012*53ee8cc1Swenshuai.xi         bIsPm = 1;
2013*53ee8cc1Swenshuai.xi 
2014*53ee8cc1Swenshuai.xi         //Slave ID not in Non-PM nor PM group
2015*53ee8cc1Swenshuai.xi         if(s32HwIdx == -1)
2016*53ee8cc1Swenshuai.xi         {
2017*53ee8cc1Swenshuai.xi             HAL_SEAL_ERR("Slave ID:%d doesn't exist !\n", (unsigned int)u32SlaveId);
2018*53ee8cc1Swenshuai.xi             return FALSE;
2019*53ee8cc1Swenshuai.xi         }
2020*53ee8cc1Swenshuai.xi     }
2021*53ee8cc1Swenshuai.xi 
2022*53ee8cc1Swenshuai.xi     if(bIsPm == 0)
2023*53ee8cc1Swenshuai.xi     {
2024*53ee8cc1Swenshuai.xi         u8GroupId = (MS_U8)(s32HwIdx / SEAL_NONPM_GROUP_IP_NUM);
2025*53ee8cc1Swenshuai.xi         u8ClientId = (MS_U8)(s32HwIdx % SEAL_NONPM_GROUP_IP_NUM);
2026*53ee8cc1Swenshuai.xi         u32RegAddr = (MS_U32)(REG_TZPC_NONPM_SECURE_SLAVE + (u8GroupId * 2));
2027*53ee8cc1Swenshuai.xi 
2028*53ee8cc1Swenshuai.xi         if(bSecure == 1)
2029*53ee8cc1Swenshuai.xi         {
2030*53ee8cc1Swenshuai.xi             u16Val = HAL_SEAL_NonPmRead2Byte(u32RegAddr);
2031*53ee8cc1Swenshuai.xi             u16Val = u16Val & (~(1 << u8ClientId));
2032*53ee8cc1Swenshuai.xi             HAL_SEAL_NonPmWrite2Byte(u32RegAddr, u16Val);
2033*53ee8cc1Swenshuai.xi         }
2034*53ee8cc1Swenshuai.xi         else
2035*53ee8cc1Swenshuai.xi         {
2036*53ee8cc1Swenshuai.xi             u16Val = HAL_SEAL_NonPmRead2Byte(u32RegAddr);
2037*53ee8cc1Swenshuai.xi             u16Val = u16Val | (1 << u8ClientId);
2038*53ee8cc1Swenshuai.xi             HAL_SEAL_NonPmWrite2Byte(u32RegAddr, u16Val);
2039*53ee8cc1Swenshuai.xi         }
2040*53ee8cc1Swenshuai.xi     }
2041*53ee8cc1Swenshuai.xi     else
2042*53ee8cc1Swenshuai.xi     {
2043*53ee8cc1Swenshuai.xi         u8GroupId = (MS_U8)(s32HwIdx / SEAL_PM_GROUP_IP_NUM);
2044*53ee8cc1Swenshuai.xi         u8ClientId = (MS_U8)(s32HwIdx % SEAL_PM_GROUP_IP_NUM);
2045*53ee8cc1Swenshuai.xi         u32RegAddr = (MS_U32)(REG_TZPC_PM_SECURE_SLAVE + (u8GroupId * 2));
2046*53ee8cc1Swenshuai.xi 
2047*53ee8cc1Swenshuai.xi         if(bSecure == 1)
2048*53ee8cc1Swenshuai.xi         {
2049*53ee8cc1Swenshuai.xi             u16Val = HAL_SEAL_PmRead2Byte(u32RegAddr);
2050*53ee8cc1Swenshuai.xi             u16Val = u16Val & (~(1 << u8ClientId));
2051*53ee8cc1Swenshuai.xi             HAL_SEAL_PmWrite2Byte(u32RegAddr, u16Val);
2052*53ee8cc1Swenshuai.xi         }
2053*53ee8cc1Swenshuai.xi         else
2054*53ee8cc1Swenshuai.xi         {
2055*53ee8cc1Swenshuai.xi             u16Val = HAL_SEAL_PmRead2Byte(u32RegAddr);
2056*53ee8cc1Swenshuai.xi             u16Val = u16Val | (1 << u8ClientId);
2057*53ee8cc1Swenshuai.xi             HAL_SEAL_PmWrite2Byte(u32RegAddr, u16Val);
2058*53ee8cc1Swenshuai.xi         }
2059*53ee8cc1Swenshuai.xi     }
2060*53ee8cc1Swenshuai.xi     return TRUE;
2061*53ee8cc1Swenshuai.xi }
2062*53ee8cc1Swenshuai.xi 
2063*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
2064*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_Seal_SecureSlaveQuery
2065*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description: Query the specific slave IP be secure or not
2066*53ee8cc1Swenshuai.xi /// @param <IN>         \b u32SlaveId: Slave ID
2067*53ee8cc1Swenshuai.xi /// @param <IN>         \b pSecure: 0: non-secure 1:secure
2068*53ee8cc1Swenshuai.xi /// @param <OUT>        \b None:
2069*53ee8cc1Swenshuai.xi /// @param <RET>        \b RET
2070*53ee8cc1Swenshuai.xi /// @param <GLOBAL>     \b None :
2071*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_Seal_SecureSlaveQuery(MS_U32 u32SlaveId,MS_BOOL * pSecure)2072*53ee8cc1Swenshuai.xi MS_BOOL HAL_Seal_SecureSlaveQuery(MS_U32 u32SlaveId, MS_BOOL *pSecure)
2073*53ee8cc1Swenshuai.xi {
2074*53ee8cc1Swenshuai.xi     MS_U32 u32RegAddr;
2075*53ee8cc1Swenshuai.xi     MS_U16 u16Val;
2076*53ee8cc1Swenshuai.xi     MS_S32 s32HwIdx;
2077*53ee8cc1Swenshuai.xi     MS_U8 u8GroupId;
2078*53ee8cc1Swenshuai.xi     MS_U8 u8ClientId;
2079*53ee8cc1Swenshuai.xi     MS_BOOL bIsPm;
2080*53ee8cc1Swenshuai.xi 
2081*53ee8cc1Swenshuai.xi     bIsPm = 0;
2082*53ee8cc1Swenshuai.xi     s32HwIdx = HAL_SEAL_GetNonPmIpIdx(u32SlaveId);
2083*53ee8cc1Swenshuai.xi 
2084*53ee8cc1Swenshuai.xi     //Slave ID not in Non-PM group, check if u32SlaveId in PM group
2085*53ee8cc1Swenshuai.xi     if(s32HwIdx == -1)
2086*53ee8cc1Swenshuai.xi     {
2087*53ee8cc1Swenshuai.xi         s32HwIdx = HAL_SEAL_GetPmIpIdx(u32SlaveId);
2088*53ee8cc1Swenshuai.xi         bIsPm = 1;
2089*53ee8cc1Swenshuai.xi 
2090*53ee8cc1Swenshuai.xi         //Slave ID not in Non-PM nor PM group
2091*53ee8cc1Swenshuai.xi         if(s32HwIdx == -1)
2092*53ee8cc1Swenshuai.xi         {
2093*53ee8cc1Swenshuai.xi             HAL_SEAL_ERR("Slave ID:%d doesn't exist !\n", (unsigned int)u32SlaveId);
2094*53ee8cc1Swenshuai.xi             return FALSE;
2095*53ee8cc1Swenshuai.xi         }
2096*53ee8cc1Swenshuai.xi     }
2097*53ee8cc1Swenshuai.xi 
2098*53ee8cc1Swenshuai.xi     if(bIsPm == 0)
2099*53ee8cc1Swenshuai.xi     {
2100*53ee8cc1Swenshuai.xi         u8GroupId = (MS_U8)(s32HwIdx / SEAL_NONPM_GROUP_IP_NUM);
2101*53ee8cc1Swenshuai.xi         u8ClientId = (MS_U8)(s32HwIdx % SEAL_NONPM_GROUP_IP_NUM);
2102*53ee8cc1Swenshuai.xi         u32RegAddr = (MS_U32)(REG_TZPC_NONPM_SECURE_SLAVE + (u8GroupId * 2));
2103*53ee8cc1Swenshuai.xi 
2104*53ee8cc1Swenshuai.xi         u16Val = HAL_SEAL_NonPmRead2Byte(u32RegAddr);
2105*53ee8cc1Swenshuai.xi     }
2106*53ee8cc1Swenshuai.xi     else
2107*53ee8cc1Swenshuai.xi     {
2108*53ee8cc1Swenshuai.xi         u8GroupId = (MS_U8)(s32HwIdx / SEAL_PM_GROUP_IP_NUM);
2109*53ee8cc1Swenshuai.xi         u8ClientId = (MS_U8)(s32HwIdx % SEAL_PM_GROUP_IP_NUM);
2110*53ee8cc1Swenshuai.xi         u32RegAddr = (MS_U32)(REG_TZPC_PM_SECURE_SLAVE + (u8GroupId * 2));
2111*53ee8cc1Swenshuai.xi 
2112*53ee8cc1Swenshuai.xi         u16Val = HAL_SEAL_PmRead2Byte(u32RegAddr);
2113*53ee8cc1Swenshuai.xi     }
2114*53ee8cc1Swenshuai.xi 
2115*53ee8cc1Swenshuai.xi     if(u16Val & (1 << u8ClientId))
2116*53ee8cc1Swenshuai.xi     {
2117*53ee8cc1Swenshuai.xi         *pSecure = 0;
2118*53ee8cc1Swenshuai.xi     }
2119*53ee8cc1Swenshuai.xi     else
2120*53ee8cc1Swenshuai.xi     {
2121*53ee8cc1Swenshuai.xi         *pSecure = 1;
2122*53ee8cc1Swenshuai.xi     }
2123*53ee8cc1Swenshuai.xi 
2124*53ee8cc1Swenshuai.xi     return TRUE;
2125*53ee8cc1Swenshuai.xi }
2126*53ee8cc1Swenshuai.xi 
2127*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
2128*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_Seal_SecureMasterSet
2129*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description: Define the specific master IP be secure or not
2130*53ee8cc1Swenshuai.xi /// @param <IN>         \b u32SlaveId: Master ID
2131*53ee8cc1Swenshuai.xi /// @param <IN>         \b bSecure: 0: non-secure 1:secure
2132*53ee8cc1Swenshuai.xi /// @param <OUT>        \b None:
2133*53ee8cc1Swenshuai.xi /// @param <RET>        \b RET
2134*53ee8cc1Swenshuai.xi /// @param <GLOBAL>     \b None :
2135*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_Seal_SecureMasterSet(MS_U32 u32MasterId,MS_BOOL bSecure)2136*53ee8cc1Swenshuai.xi MS_BOOL HAL_Seal_SecureMasterSet(MS_U32 u32MasterId, MS_BOOL bSecure)
2137*53ee8cc1Swenshuai.xi {
2138*53ee8cc1Swenshuai.xi     MS_U32 u32RegAddr;
2139*53ee8cc1Swenshuai.xi     MS_U16 u16Val;
2140*53ee8cc1Swenshuai.xi     MS_S32 s32HwIdx;
2141*53ee8cc1Swenshuai.xi     MS_U8 u8GroupId;
2142*53ee8cc1Swenshuai.xi     MS_U8 u8ClientId;
2143*53ee8cc1Swenshuai.xi 
2144*53ee8cc1Swenshuai.xi     s32HwIdx = HAL_SEAL_GetNonPmIpIdx(u32MasterId);
2145*53ee8cc1Swenshuai.xi 
2146*53ee8cc1Swenshuai.xi     if(s32HwIdx == -1)
2147*53ee8cc1Swenshuai.xi     {
2148*53ee8cc1Swenshuai.xi         HAL_SEAL_ERR("Master ID:%u doesn't exist !\n", (unsigned int)u32MasterId);
2149*53ee8cc1Swenshuai.xi         return FALSE;
2150*53ee8cc1Swenshuai.xi     }
2151*53ee8cc1Swenshuai.xi 
2152*53ee8cc1Swenshuai.xi     u8GroupId = (MS_U8)(s32HwIdx / SEAL_NONPM_GROUP_IP_NUM);
2153*53ee8cc1Swenshuai.xi     u8ClientId = (MS_U8)(s32HwIdx % SEAL_NONPM_GROUP_IP_NUM);
2154*53ee8cc1Swenshuai.xi     u32RegAddr = (MS_U32)(REG_TZPC_NONPM_SECURE_MASTER + (u8GroupId * 2));
2155*53ee8cc1Swenshuai.xi 
2156*53ee8cc1Swenshuai.xi     if(bSecure == 1)
2157*53ee8cc1Swenshuai.xi     {
2158*53ee8cc1Swenshuai.xi         u16Val = HAL_SEAL_NonPmRead2Byte(u32RegAddr);
2159*53ee8cc1Swenshuai.xi         u16Val = u16Val & (~(1 << u8ClientId));
2160*53ee8cc1Swenshuai.xi         HAL_SEAL_NonPmWrite2Byte(u32RegAddr, u16Val);
2161*53ee8cc1Swenshuai.xi     }
2162*53ee8cc1Swenshuai.xi     else
2163*53ee8cc1Swenshuai.xi     {
2164*53ee8cc1Swenshuai.xi         u16Val = HAL_SEAL_NonPmRead2Byte(u32RegAddr);
2165*53ee8cc1Swenshuai.xi         u16Val = u16Val | (1 << u8ClientId);
2166*53ee8cc1Swenshuai.xi         HAL_SEAL_NonPmWrite2Byte(u32RegAddr, u16Val);
2167*53ee8cc1Swenshuai.xi     }
2168*53ee8cc1Swenshuai.xi 
2169*53ee8cc1Swenshuai.xi     return TRUE;
2170*53ee8cc1Swenshuai.xi }
2171*53ee8cc1Swenshuai.xi 
2172*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
2173*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_Seal_SecureMasterQuery
2174*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description: Query the specific master IP be secure or not
2175*53ee8cc1Swenshuai.xi /// @param <IN>         \b u32SlaveId: Master ID
2176*53ee8cc1Swenshuai.xi /// @param <IN>         \b pSecure: 0: non-secure 1:secure
2177*53ee8cc1Swenshuai.xi /// @param <OUT>        \b None:
2178*53ee8cc1Swenshuai.xi /// @param <RET>        \b RET
2179*53ee8cc1Swenshuai.xi /// @param <GLOBAL>     \b None :
2180*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_Seal_SecureMasterQuery(MS_U32 u32MasterId,MS_BOOL * pSecure)2181*53ee8cc1Swenshuai.xi MS_BOOL HAL_Seal_SecureMasterQuery(MS_U32 u32MasterId, MS_BOOL *pSecure)
2182*53ee8cc1Swenshuai.xi {
2183*53ee8cc1Swenshuai.xi     MS_U32 u32RegAddr;
2184*53ee8cc1Swenshuai.xi     MS_U16 u16Val;
2185*53ee8cc1Swenshuai.xi     MS_S32 s32HwIdx;
2186*53ee8cc1Swenshuai.xi     MS_U8 u8GroupId;
2187*53ee8cc1Swenshuai.xi     MS_U8 u8ClientId;
2188*53ee8cc1Swenshuai.xi 
2189*53ee8cc1Swenshuai.xi     s32HwIdx = HAL_SEAL_GetNonPmIpIdx(u32MasterId);
2190*53ee8cc1Swenshuai.xi 
2191*53ee8cc1Swenshuai.xi     if(s32HwIdx == -1)
2192*53ee8cc1Swenshuai.xi     {
2193*53ee8cc1Swenshuai.xi         HAL_SEAL_ERR("Master ID:%d doesn't exist !\n", (unsigned int)u32MasterId);
2194*53ee8cc1Swenshuai.xi         return FALSE;
2195*53ee8cc1Swenshuai.xi     }
2196*53ee8cc1Swenshuai.xi 
2197*53ee8cc1Swenshuai.xi     u8GroupId = (MS_U8)(s32HwIdx / SEAL_NONPM_GROUP_IP_NUM);
2198*53ee8cc1Swenshuai.xi     u8ClientId = (MS_U8)(s32HwIdx % SEAL_NONPM_GROUP_IP_NUM);
2199*53ee8cc1Swenshuai.xi     u32RegAddr = (MS_U32)(REG_TZPC_NONPM_SECURE_MASTER + (u8GroupId * 2));
2200*53ee8cc1Swenshuai.xi 
2201*53ee8cc1Swenshuai.xi     u16Val = HAL_SEAL_NonPmRead2Byte(u32RegAddr);
2202*53ee8cc1Swenshuai.xi 
2203*53ee8cc1Swenshuai.xi     if(u16Val & (1 << u8ClientId))
2204*53ee8cc1Swenshuai.xi     {
2205*53ee8cc1Swenshuai.xi         *pSecure = 0;
2206*53ee8cc1Swenshuai.xi     }
2207*53ee8cc1Swenshuai.xi     else
2208*53ee8cc1Swenshuai.xi     {
2209*53ee8cc1Swenshuai.xi         *pSecure = 1;
2210*53ee8cc1Swenshuai.xi     }
2211*53ee8cc1Swenshuai.xi 
2212*53ee8cc1Swenshuai.xi     return TRUE;
2213*53ee8cc1Swenshuai.xi }
2214*53ee8cc1Swenshuai.xi 
2215*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
2216*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_Seal_BufferLock
2217*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description: Lock the specific buffer
2218*53ee8cc1Swenshuai.xi /// @param <IN>         \b u8SecureRangeId: Secure buffer ID
2219*53ee8cc1Swenshuai.xi /// @param <IN>         \b bLock: 0: unlock 1:lock
2220*53ee8cc1Swenshuai.xi /// @param <OUT>        \b None:
2221*53ee8cc1Swenshuai.xi /// @param <RET>        \b RET
2222*53ee8cc1Swenshuai.xi /// @param <GLOBAL>     \b None :
2223*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_Seal_BufferLock(MS_U8 u8BufferLockId,MS_BOOL bLock)2224*53ee8cc1Swenshuai.xi MS_BOOL HAL_Seal_BufferLock(MS_U8 u8BufferLockId, MS_BOOL bLock)
2225*53ee8cc1Swenshuai.xi {
2226*53ee8cc1Swenshuai.xi     MS_U32 u32RegAddr;
2227*53ee8cc1Swenshuai.xi     MS_U16 u16Val;
2228*53ee8cc1Swenshuai.xi     MS_S32 s32HwIdx;
2229*53ee8cc1Swenshuai.xi     MS_U8 u8GroupId;
2230*53ee8cc1Swenshuai.xi     MS_U8 u8ClientId;
2231*53ee8cc1Swenshuai.xi 
2232*53ee8cc1Swenshuai.xi     s32HwIdx = HAL_SEAL_GetLockIdx(u8BufferLockId);
2233*53ee8cc1Swenshuai.xi 
2234*53ee8cc1Swenshuai.xi     //Check if u8SecureBufferId exist
2235*53ee8cc1Swenshuai.xi     if(s32HwIdx == -1)
2236*53ee8cc1Swenshuai.xi     {
2237*53ee8cc1Swenshuai.xi         HAL_SEAL_ERR("Secure buffer lock ID:%u doesn't exist !\n", u8BufferLockId);
2238*53ee8cc1Swenshuai.xi         return FALSE;
2239*53ee8cc1Swenshuai.xi     }
2240*53ee8cc1Swenshuai.xi 
2241*53ee8cc1Swenshuai.xi     u8GroupId = (MS_U8)(s32HwIdx / SEAL_LOCK_NUM_PERGROUP);
2242*53ee8cc1Swenshuai.xi     u8ClientId = (MS_U8)(s32HwIdx % SEAL_LOCK_NUM_PERGROUP);
2243*53ee8cc1Swenshuai.xi     u32RegAddr = (MS_U32)(REG_TZPC_BUFFER_LOCK + (u8GroupId * 2));
2244*53ee8cc1Swenshuai.xi 
2245*53ee8cc1Swenshuai.xi     if(bLock == 1)
2246*53ee8cc1Swenshuai.xi     {
2247*53ee8cc1Swenshuai.xi         u16Val = HAL_SEAL_NonPmRead2Byte(u32RegAddr);
2248*53ee8cc1Swenshuai.xi         u16Val = u16Val & (~(1 << u8ClientId));
2249*53ee8cc1Swenshuai.xi         HAL_SEAL_NonPmWrite2Byte(u32RegAddr, u16Val);
2250*53ee8cc1Swenshuai.xi     }
2251*53ee8cc1Swenshuai.xi     else
2252*53ee8cc1Swenshuai.xi     {
2253*53ee8cc1Swenshuai.xi         u16Val = HAL_SEAL_NonPmRead2Byte(u32RegAddr);
2254*53ee8cc1Swenshuai.xi         u16Val = u16Val | (1 << u8ClientId);
2255*53ee8cc1Swenshuai.xi         HAL_SEAL_NonPmWrite2Byte(u32RegAddr, u16Val);
2256*53ee8cc1Swenshuai.xi     }
2257*53ee8cc1Swenshuai.xi 
2258*53ee8cc1Swenshuai.xi     return TRUE;
2259*53ee8cc1Swenshuai.xi }
2260*53ee8cc1Swenshuai.xi 
2261*53ee8cc1Swenshuai.xi 
HAL_Seal_QueryBufferLocked(eSeal_Lock eLockId,MS_BOOL * bLocked)2262*53ee8cc1Swenshuai.xi MS_BOOL HAL_Seal_QueryBufferLocked(eSeal_Lock eLockId, MS_BOOL* bLocked)
2263*53ee8cc1Swenshuai.xi {
2264*53ee8cc1Swenshuai.xi     MS_U32 u32RegAddr;
2265*53ee8cc1Swenshuai.xi     MS_U16 u16Val;
2266*53ee8cc1Swenshuai.xi     MS_S32 s32HwIdx;
2267*53ee8cc1Swenshuai.xi     MS_U8 u8GroupId;
2268*53ee8cc1Swenshuai.xi     MS_U8 u8ClientId;
2269*53ee8cc1Swenshuai.xi 
2270*53ee8cc1Swenshuai.xi     s32HwIdx = HAL_SEAL_GetLockIdx(eLockId);
2271*53ee8cc1Swenshuai.xi 
2272*53ee8cc1Swenshuai.xi     //Check if u8SecureBufferId exist
2273*53ee8cc1Swenshuai.xi     if(s32HwIdx == -1)
2274*53ee8cc1Swenshuai.xi     {
2275*53ee8cc1Swenshuai.xi         HAL_SEAL_ERR("Secure buffer lock ID:%u doesn't exist !\n", (unsigned int)eLockId);
2276*53ee8cc1Swenshuai.xi         return FALSE;
2277*53ee8cc1Swenshuai.xi     }
2278*53ee8cc1Swenshuai.xi 
2279*53ee8cc1Swenshuai.xi     u8GroupId = (MS_U8)(s32HwIdx / SEAL_LOCK_NUM_PERGROUP);
2280*53ee8cc1Swenshuai.xi     u8ClientId = (MS_U8)(s32HwIdx % SEAL_LOCK_NUM_PERGROUP);
2281*53ee8cc1Swenshuai.xi     u32RegAddr = (MS_U32)(REG_TZPC_BUFFER_LOCK + (u8GroupId * 2));
2282*53ee8cc1Swenshuai.xi 
2283*53ee8cc1Swenshuai.xi     u16Val = HAL_SEAL_NonPmRead2Byte(u32RegAddr);
2284*53ee8cc1Swenshuai.xi     *bLocked = (u16Val & (1 << u8ClientId)) ? FALSE : TRUE;
2285*53ee8cc1Swenshuai.xi 
2286*53ee8cc1Swenshuai.xi     return TRUE;
2287*53ee8cc1Swenshuai.xi }
2288*53ee8cc1Swenshuai.xi 
2289*53ee8cc1Swenshuai.xi 
2290*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
2291*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_Seal_MaskInterruptFlag
2292*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description: mask/unmask irq mask bit
2293*53ee8cc1Swenshuai.xi /// @param <IN>         \b u8MiuDev: 0:MIU0 1:MIU1 2:MIU2 3:MIU3
2294*53ee8cc1Swenshuai.xi /// @param <IN>         \b bMask: FLASE: unmask ; TRUE: mask
2295*53ee8cc1Swenshuai.xi /// @param <OUT>        \b None:
2296*53ee8cc1Swenshuai.xi /// @param <RET>        \b RET:
2297*53ee8cc1Swenshuai.xi /// @param <GLOBAL>     \b None :
2298*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_Seal_MaskInterruptFlag(MS_U8 u8MiuDev,MS_BOOL bMask)2299*53ee8cc1Swenshuai.xi MS_BOOL HAL_Seal_MaskInterruptFlag(MS_U8 u8MiuDev, MS_BOOL bMask)
2300*53ee8cc1Swenshuai.xi {
2301*53ee8cc1Swenshuai.xi     MS_U32 u32RegLogAddr;
2302*53ee8cc1Swenshuai.xi 
2303*53ee8cc1Swenshuai.xi     switch(u8MiuDev)
2304*53ee8cc1Swenshuai.xi     {
2305*53ee8cc1Swenshuai.xi         case E_HAL_MIU_DEV0:
2306*53ee8cc1Swenshuai.xi             u32RegLogAddr = REG_SECURE0_HITTED_STATUS;
2307*53ee8cc1Swenshuai.xi             break;
2308*53ee8cc1Swenshuai.xi         case E_HAL_MIU_DEV1:
2309*53ee8cc1Swenshuai.xi             u32RegLogAddr = REG_SECURE1_HITTED_STATUS;
2310*53ee8cc1Swenshuai.xi             break;
2311*53ee8cc1Swenshuai.xi         default:
2312*53ee8cc1Swenshuai.xi             return FALSE;
2313*53ee8cc1Swenshuai.xi     }
2314*53ee8cc1Swenshuai.xi 
2315*53ee8cc1Swenshuai.xi     HAL_SEAL_NonPmWrite2BytesBit(u32RegLogAddr, bMask, REG_SECURE_HITTED_IRQ_MASK);
2316*53ee8cc1Swenshuai.xi 
2317*53ee8cc1Swenshuai.xi     return TRUE;
2318*53ee8cc1Swenshuai.xi }
2319*53ee8cc1Swenshuai.xi 
2320*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
2321*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Name: HAL_Seal_CheckSecureRange
2322*53ee8cc1Swenshuai.xi /// @brief \b Function  \b Description: Is Overlap Secure Range
2323*53ee8cc1Swenshuai.xi /// @param <IN>         \b phyStartAddr : start address
2324*53ee8cc1Swenshuai.xi /// @param <IN>         \b u32Length : protect length
2325*53ee8cc1Swenshuai.xi /// @param <IN>         \b eCheckSecureRangeType : check SecureRange type
2326*53ee8cc1Swenshuai.xi /// @param <OUT>        \b None:
2327*53ee8cc1Swenshuai.xi /// @param <RET>        \b RET:
2328*53ee8cc1Swenshuai.xi /// @param <GLOBAL>     \b None :
2329*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
HAL_Seal_CheckSecureRange(MS_PHY phyStartAddr,MS_U32 u32Length,eSeal_CheckSecureRangeType eCheckSecureRangeType)2330*53ee8cc1Swenshuai.xi MS_BOOL HAL_Seal_CheckSecureRange(MS_PHY phyStartAddr, MS_U32 u32Length, eSeal_CheckSecureRangeType eCheckSecureRangeType)
2331*53ee8cc1Swenshuai.xi {
2332*53ee8cc1Swenshuai.xi     MS_U8  u8MiuSel;
2333*53ee8cc1Swenshuai.xi     MS_U8  u8Val;
2334*53ee8cc1Swenshuai.xi     MS_U8  RangeNum;
2335*53ee8cc1Swenshuai.xi     MS_U64 u64Offset;
2336*53ee8cc1Swenshuai.xi     MS_U32 u32RegStartAddr;
2337*53ee8cc1Swenshuai.xi     MS_U32 u32RegEndAddr;
2338*53ee8cc1Swenshuai.xi     MS_U32 u32RegAttribute;
2339*53ee8cc1Swenshuai.xi     MS_U32 u32RegDetEnDummy; // work-around for 0x76 not readable issue
2340*53ee8cc1Swenshuai.xi     MS_U64 u64StartAddr;
2341*53ee8cc1Swenshuai.xi     MS_U64 u64EndAddr;
2342*53ee8cc1Swenshuai.xi 
2343*53ee8cc1Swenshuai.xi     _phy_to_miu_offset(u8MiuSel, u64Offset, phyStartAddr);
2344*53ee8cc1Swenshuai.xi 
2345*53ee8cc1Swenshuai.xi     switch(u8MiuSel)
2346*53ee8cc1Swenshuai.xi     {
2347*53ee8cc1Swenshuai.xi         case E_CHIP_MIU_0:
2348*53ee8cc1Swenshuai.xi             u32RegDetEnDummy = REG_SECURE0_DUMMY0;
2349*53ee8cc1Swenshuai.xi             u32RegStartAddr = REG_SECURE0_RANGE0_START_ADDR;
2350*53ee8cc1Swenshuai.xi             u32RegEndAddr = REG_SECURE0_RANGE0_END_ADDR;
2351*53ee8cc1Swenshuai.xi             u32RegAttribute = REG_SECURE0_RANGE0_ATTRIBUTE;
2352*53ee8cc1Swenshuai.xi             break;
2353*53ee8cc1Swenshuai.xi         case E_CHIP_MIU_1:
2354*53ee8cc1Swenshuai.xi             u32RegDetEnDummy = REG_SECURE1_DUMMY0;
2355*53ee8cc1Swenshuai.xi             u32RegStartAddr = REG_SECURE1_RANGE0_START_ADDR;
2356*53ee8cc1Swenshuai.xi             u32RegEndAddr = REG_SECURE1_RANGE0_END_ADDR;
2357*53ee8cc1Swenshuai.xi             u32RegAttribute = REG_SECURE1_RANGE0_ATTRIBUTE;
2358*53ee8cc1Swenshuai.xi             break;
2359*53ee8cc1Swenshuai.xi         default:
2360*53ee8cc1Swenshuai.xi             printf("%s: Wrong paramater-MiuSel %d \n", __FUNCTION__, u8MiuSel);
2361*53ee8cc1Swenshuai.xi             return TRUE;
2362*53ee8cc1Swenshuai.xi     }
2363*53ee8cc1Swenshuai.xi 
2364*53ee8cc1Swenshuai.xi     u8Val = HAL_SEAL_NonPmReadByte(u32RegDetEnDummy);
2365*53ee8cc1Swenshuai.xi 
2366*53ee8cc1Swenshuai.xi     for(RangeNum = E_HAL_SEAL_SECURE_RANGE_ID0; RangeNum < E_HAL_SEAL_SECURE_RANGE_NUM; RangeNum++, u32RegStartAddr+=RANGE_ADDR_OFFSET, u32RegEndAddr+=RANGE_ADDR_OFFSET, u32RegAttribute+=RANGE_ADDR_OFFSET)
2367*53ee8cc1Swenshuai.xi     {
2368*53ee8cc1Swenshuai.xi         if( HAL_SEAL_NonPmReadByte(u32RegAttribute) == (E_SEAL_SECURE_READ | E_SEAL_SECURE_WRITE) && (u8Val & (1<<RangeNum))) // Already set secure range
2369*53ee8cc1Swenshuai.xi         {
2370*53ee8cc1Swenshuai.xi             //check overlap
2371*53ee8cc1Swenshuai.xi             u64StartAddr = HAL_SEAL_NonPmRead6Byte(u32RegStartAddr);
2372*53ee8cc1Swenshuai.xi             u64EndAddr = HAL_SEAL_NonPmRead6Byte(u32RegEndAddr);
2373*53ee8cc1Swenshuai.xi             switch(eCheckSecureRangeType)
2374*53ee8cc1Swenshuai.xi             {
2375*53ee8cc1Swenshuai.xi                 case E_SEAL_OVERLAP:
2376*53ee8cc1Swenshuai.xi                     if ( u64StartAddr <= u64Offset && u64EndAddr > u64Offset )
2377*53ee8cc1Swenshuai.xi                         return TRUE;
2378*53ee8cc1Swenshuai.xi                     else if ( u64StartAddr > u64Offset && u64StartAddr < (u64Offset + u32Length))
2379*53ee8cc1Swenshuai.xi                         return TRUE;
2380*53ee8cc1Swenshuai.xi                     break;
2381*53ee8cc1Swenshuai.xi                 case E_SEAL_CONTAIN:
2382*53ee8cc1Swenshuai.xi                     if ( u64StartAddr <= u64Offset && u64EndAddr >= (u64Offset + u32Length) )
2383*53ee8cc1Swenshuai.xi                         return TRUE;
2384*53ee8cc1Swenshuai.xi                     break;
2385*53ee8cc1Swenshuai.xi                 default:
2386*53ee8cc1Swenshuai.xi                     printf("%s: Wrong paramater-eCheckSecureRangeType %d \n", __FUNCTION__, eCheckSecureRangeType);
2387*53ee8cc1Swenshuai.xi                     return TRUE;
2388*53ee8cc1Swenshuai.xi             }
2389*53ee8cc1Swenshuai.xi         }
2390*53ee8cc1Swenshuai.xi     }
2391*53ee8cc1Swenshuai.xi     return FALSE;
2392*53ee8cc1Swenshuai.xi }
2393*53ee8cc1Swenshuai.xi 
2394*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_OPTEE
HAL_Seal_ChangeIPSecureDMAAbillity(MS_U32 u32ModuleID,MS_U32 u32ModuleParameter,MS_U32 u32IsSecure)2395*53ee8cc1Swenshuai.xi MS_BOOL HAL_Seal_ChangeIPSecureDMAAbillity(MS_U32 u32ModuleID, MS_U32 u32ModuleParameter, MS_U32 u32IsSecure)
2396*53ee8cc1Swenshuai.xi {
2397*53ee8cc1Swenshuai.xi     switch(u32ModuleID)
2398*53ee8cc1Swenshuai.xi     {
2399*53ee8cc1Swenshuai.xi         case MODULE_XC:
2400*53ee8cc1Swenshuai.xi             HAL_Seal_SecureMasterSet(E_SEAL_MSC_PROT_NONPM, u32IsSecure);
2401*53ee8cc1Swenshuai.xi             HAL_Seal_SecureMasterSet(E_SEAL_SC0_PROT_NONPM, u32IsSecure);
2402*53ee8cc1Swenshuai.xi             HAL_Seal_SecureMasterSet(E_SEAL_SC1_PROT_NONPM, u32IsSecure);
2403*53ee8cc1Swenshuai.xi             HAL_Seal_SecureMasterSet(E_SEAL_SC2_PROT_NONPM, u32IsSecure);
2404*53ee8cc1Swenshuai.xi             HAL_Seal_SecureMasterSet(E_SEAL_SC3_PROT_NONPM, u32IsSecure);
2405*53ee8cc1Swenshuai.xi             HAL_Seal_SecureMasterSet(E_SEAL_SC4_PROT_NONPM, u32IsSecure);
2406*53ee8cc1Swenshuai.xi             break;
2407*53ee8cc1Swenshuai.xi         case MODULE_VDEC_EX:
2408*53ee8cc1Swenshuai.xi         case MODULE_VDEC:
2409*53ee8cc1Swenshuai.xi             switch(u32ModuleParameter)
2410*53ee8cc1Swenshuai.xi             {
2411*53ee8cc1Swenshuai.xi                 case E_SEAL_IPGROUP_VDEC_R2:
2412*53ee8cc1Swenshuai.xi                     HAL_Seal_SecureMasterSet(E_SEAL_VD_MHEG5_PROT_NONPM, u32IsSecure);
2413*53ee8cc1Swenshuai.xi                     HAL_Seal_SecureMasterSet(E_SEAL_VD_EVD_R2_NONPM, u32IsSecure);
2414*53ee8cc1Swenshuai.xi                     break;
2415*53ee8cc1Swenshuai.xi                 case E_SEAL_IPGROUP_VDEC_DECODER:
2416*53ee8cc1Swenshuai.xi                     HAL_Seal_SecureMasterSet(E_SEAL_MVD_PROT_NONPM, u32IsSecure);
2417*53ee8cc1Swenshuai.xi                     HAL_Seal_SecureMasterSet(E_SEAL_HVD_PROT_NONPM, u32IsSecure);
2418*53ee8cc1Swenshuai.xi                     HAL_Seal_SecureMasterSet(E_SEAL_EVD_NONPM, u32IsSecure);
2419*53ee8cc1Swenshuai.xi                     HAL_Seal_SecureMasterSet(E_SEAL_MAU_EVD_NONPM, u32IsSecure);
2420*53ee8cc1Swenshuai.xi                     HAL_Seal_SecureMasterSet(E_SEAL_HIREG_EVD_PROT_NONPM, u32IsSecure);
2421*53ee8cc1Swenshuai.xi                     HAL_Seal_SecureMasterSet(E_SEAL_MAU_EVD_LV2_0_NONPM, u32IsSecure);
2422*53ee8cc1Swenshuai.xi                     HAL_Seal_SecureMasterSet(E_SEAL_MFDEC_PROT_NONPM, u32IsSecure);
2423*53ee8cc1Swenshuai.xi                     break;
2424*53ee8cc1Swenshuai.xi                 default:
2425*53ee8cc1Swenshuai.xi                     printf("%s: Unknown module paramater\n", __FUNCTION__);
2426*53ee8cc1Swenshuai.xi                     break;
2427*53ee8cc1Swenshuai.xi             }
2428*53ee8cc1Swenshuai.xi             break;
2429*53ee8cc1Swenshuai.xi         case MODULE_MVOP:
2430*53ee8cc1Swenshuai.xi             HAL_Seal_SecureMasterSet(E_SEAL_MVOPSUB_PROT_NONPM, u32IsSecure);
2431*53ee8cc1Swenshuai.xi             HAL_Seal_SecureMasterSet(E_SEAL_MVOP_PROT_NONPM, u32IsSecure);
2432*53ee8cc1Swenshuai.xi             break;
2433*53ee8cc1Swenshuai.xi         case MODULE_AUDIO:
2434*53ee8cc1Swenshuai.xi             HAL_Seal_SecureMasterSet(E_SEAL_VIVALDI2_PROT_NONPM, u32IsSecure);
2435*53ee8cc1Swenshuai.xi             HAL_Seal_SecureMasterSet(E_SEAL_VIVALDI3_PROT_NONPM, u32IsSecure);
2436*53ee8cc1Swenshuai.xi             HAL_Seal_SecureMasterSet(E_SEAL_VIVALDI7_PROT_NONPM, u32IsSecure);
2437*53ee8cc1Swenshuai.xi             break;
2438*53ee8cc1Swenshuai.xi         case MODULE_TVENCODER:
2439*53ee8cc1Swenshuai.xi             HAL_Seal_SecureMasterSet(E_SEAL_VE_0_PROT_NONPM, u32IsSecure);
2440*53ee8cc1Swenshuai.xi             HAL_Seal_SecureMasterSet(E_SEAL_VE_1_PROT_NONPM, u32IsSecure);
2441*53ee8cc1Swenshuai.xi             HAL_Seal_SecureMasterSet(E_SEAL_VE_2_PROT_NONPM, u32IsSecure);
2442*53ee8cc1Swenshuai.xi             break;
2443*53ee8cc1Swenshuai.xi         case MODULE_DIP:
2444*53ee8cc1Swenshuai.xi             HAL_Seal_SecureMasterSet(E_SEAL_MSC_PROT_NONPM, u32IsSecure);
2445*53ee8cc1Swenshuai.xi             break;
2446*53ee8cc1Swenshuai.xi         case MODULE_DMX:
2447*53ee8cc1Swenshuai.xi             HAL_Seal_SecureMasterSet(E_SEAL_TSP0_PROT_NONPM, u32IsSecure);
2448*53ee8cc1Swenshuai.xi             HAL_Seal_SecureMasterSet(E_SEAL_TSP1_PROT_NONPM, u32IsSecure);
2449*53ee8cc1Swenshuai.xi             HAL_Seal_SecureMasterSet(E_SEAL_TSP_SPARE_PROT_NONPM, u32IsSecure);
2450*53ee8cc1Swenshuai.xi             HAL_Seal_SecureMasterSet(E_SEAL_TSP2_PROT_NONPM, u32IsSecure);
2451*53ee8cc1Swenshuai.xi             HAL_Seal_SecureMasterSet(E_SEAL_TSP3_PROT_NONPM, u32IsSecure);
2452*53ee8cc1Swenshuai.xi             HAL_Seal_SecureMasterSet(E_SEAL_TSP4_NONPM, u32IsSecure);
2453*53ee8cc1Swenshuai.xi             HAL_Seal_SecureMasterSet(E_SEAL_TSP6_PROT_NONPM, u32IsSecure);
2454*53ee8cc1Swenshuai.xi             HAL_Seal_SecureMasterSet(E_SEAL_TSP5_NONPM, u32IsSecure);
2455*53ee8cc1Swenshuai.xi             break;
2456*53ee8cc1Swenshuai.xi         default:
2457*53ee8cc1Swenshuai.xi             printf("%s, Unsupported ModuleID\n", __FUNCTION__);
2458*53ee8cc1Swenshuai.xi             break;
2459*53ee8cc1Swenshuai.xi     }
2460*53ee8cc1Swenshuai.xi     return TRUE;
2461*53ee8cc1Swenshuai.xi }
2462*53ee8cc1Swenshuai.xi 
HAL_Seal_SetSecureRange(MS_PHY u64phy,MS_U32 u32Length,MS_U32 u32IsSecure)2463*53ee8cc1Swenshuai.xi MS_BOOL HAL_Seal_SetSecureRange(MS_PHY u64phy, MS_U32 u32Length, MS_U32 u32IsSecure)
2464*53ee8cc1Swenshuai.xi {
2465*53ee8cc1Swenshuai.xi     MS_U8  u8MiuSel;
2466*53ee8cc1Swenshuai.xi     MS_U64 u64Offset;
2467*53ee8cc1Swenshuai.xi     MS_U32 u32RegDetEn;
2468*53ee8cc1Swenshuai.xi     MS_U8 i;
2469*53ee8cc1Swenshuai.xi     MS_U8 u8Val;
2470*53ee8cc1Swenshuai.xi     MS_U32 u32RegStartAddr;
2471*53ee8cc1Swenshuai.xi     MS_U64 u64StartAddr;
2472*53ee8cc1Swenshuai.xi 
2473*53ee8cc1Swenshuai.xi     _phy_to_miu_offset(u8MiuSel, u64Offset, u64phy);
2474*53ee8cc1Swenshuai.xi 
2475*53ee8cc1Swenshuai.xi     switch(u8MiuSel)
2476*53ee8cc1Swenshuai.xi     {
2477*53ee8cc1Swenshuai.xi         case E_CHIP_MIU_0:
2478*53ee8cc1Swenshuai.xi         {
2479*53ee8cc1Swenshuai.xi             u32RegDetEn = REG_SECURE0_DETECT_ENABLE;
2480*53ee8cc1Swenshuai.xi             break;
2481*53ee8cc1Swenshuai.xi         }
2482*53ee8cc1Swenshuai.xi         case E_CHIP_MIU_1:
2483*53ee8cc1Swenshuai.xi         {
2484*53ee8cc1Swenshuai.xi             u32RegDetEn = REG_SECURE1_DETECT_ENABLE;
2485*53ee8cc1Swenshuai.xi             break;
2486*53ee8cc1Swenshuai.xi         }
2487*53ee8cc1Swenshuai.xi         default:
2488*53ee8cc1Swenshuai.xi         {
2489*53ee8cc1Swenshuai.xi             return FALSE;
2490*53ee8cc1Swenshuai.xi         }
2491*53ee8cc1Swenshuai.xi     }
2492*53ee8cc1Swenshuai.xi 
2493*53ee8cc1Swenshuai.xi     u8Val = HAL_SEAL_NonPmReadByte(u32RegDetEn);
2494*53ee8cc1Swenshuai.xi 
2495*53ee8cc1Swenshuai.xi     if(u8MiuSel == E_CHIP_MIU_0)
2496*53ee8cc1Swenshuai.xi     {
2497*53ee8cc1Swenshuai.xi         u32RegStartAddr = REG_SECURE0_RANGE0_START_ADDR;
2498*53ee8cc1Swenshuai.xi     }
2499*53ee8cc1Swenshuai.xi     else if( u8MiuSel == E_CHIP_MIU_1 )
2500*53ee8cc1Swenshuai.xi     {
2501*53ee8cc1Swenshuai.xi         u32RegStartAddr = REG_SECURE1_RANGE0_START_ADDR;
2502*53ee8cc1Swenshuai.xi     }
2503*53ee8cc1Swenshuai.xi     else
2504*53ee8cc1Swenshuai.xi     {
2505*53ee8cc1Swenshuai.xi         return FALSE;
2506*53ee8cc1Swenshuai.xi     }
2507*53ee8cc1Swenshuai.xi 
2508*53ee8cc1Swenshuai.xi     if (u32IsSecure) // setup a new securerange
2509*53ee8cc1Swenshuai.xi     {
2510*53ee8cc1Swenshuai.xi         for (i=E_HAL_SEAL_SECURE_RANGE_ID0; i<E_HAL_SEAL_SECURE_RANGE_NUM; i++, u32RegStartAddr+=RANGE_ADDR_OFFSET)
2511*53ee8cc1Swenshuai.xi         {
2512*53ee8cc1Swenshuai.xi             u64StartAddr = HAL_SEAL_NonPmRead6Byte(u32RegStartAddr);
2513*53ee8cc1Swenshuai.xi             if (u64StartAddr == u64Offset && (u8Val & (1<<i)))
2514*53ee8cc1Swenshuai.xi             {
2515*53ee8cc1Swenshuai.xi                 printf("Secure range overlaps\n");
2516*53ee8cc1Swenshuai.xi                 return TRUE;
2517*53ee8cc1Swenshuai.xi             }
2518*53ee8cc1Swenshuai.xi         }
2519*53ee8cc1Swenshuai.xi 
2520*53ee8cc1Swenshuai.xi         for (i=E_HAL_SEAL_SECURE_RANGE_ID0; i<E_HAL_SEAL_SECURE_RANGE_NUM; i++)
2521*53ee8cc1Swenshuai.xi         {
2522*53ee8cc1Swenshuai.xi             if ( !(u8Val & (1<<i)) ) // got a free range
2523*53ee8cc1Swenshuai.xi             {
2524*53ee8cc1Swenshuai.xi                 return HAL_Seal_SecureRangeSet(i, u64phy, u64phy+u32Length, E_SEAL_SECURE_READ | E_SEAL_SECURE_WRITE);
2525*53ee8cc1Swenshuai.xi             }
2526*53ee8cc1Swenshuai.xi         }
2527*53ee8cc1Swenshuai.xi 
2528*53ee8cc1Swenshuai.xi         return FALSE; // no free range
2529*53ee8cc1Swenshuai.xi     }
2530*53ee8cc1Swenshuai.xi     else // disable existing securerange
2531*53ee8cc1Swenshuai.xi     {
2532*53ee8cc1Swenshuai.xi         for (i=E_HAL_SEAL_SECURE_RANGE_ID0; i<E_HAL_SEAL_SECURE_RANGE_NUM; i++, u32RegStartAddr+=RANGE_ADDR_OFFSET)
2533*53ee8cc1Swenshuai.xi         {
2534*53ee8cc1Swenshuai.xi             u64StartAddr = HAL_SEAL_NonPmRead6Byte(u32RegStartAddr);
2535*53ee8cc1Swenshuai.xi             if (u64StartAddr == u64Offset && (u8Val & (1<<i)))
2536*53ee8cc1Swenshuai.xi             {
2537*53ee8cc1Swenshuai.xi                 return HAL_Seal_SecureRangeSet(i, u64phy, u64phy+u32Length, 0x0);
2538*53ee8cc1Swenshuai.xi             }
2539*53ee8cc1Swenshuai.xi         }
2540*53ee8cc1Swenshuai.xi 
2541*53ee8cc1Swenshuai.xi         return FALSE; // no such range
2542*53ee8cc1Swenshuai.xi     }
2543*53ee8cc1Swenshuai.xi }
2544*53ee8cc1Swenshuai.xi #endif
2545