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-2009 MStar Semiconductor, Inc.
81*53ee8cc1Swenshuai.xi // All rights reserved.
82*53ee8cc1Swenshuai.xi //
83*53ee8cc1Swenshuai.xi // Unless otherwise stipulated in writing, any and all information contained
84*53ee8cc1Swenshuai.xi // herein regardless in any format shall remain the sole proprietary of
85*53ee8cc1Swenshuai.xi // MStar Semiconductor Inc. and be kept in strict confidence
86*53ee8cc1Swenshuai.xi // ("MStar Confidential Information") by the recipient.
87*53ee8cc1Swenshuai.xi // Any unauthorized act including without limitation unauthorized disclosure,
88*53ee8cc1Swenshuai.xi // copying, use, reproduction, sale, distribution, modification, disassembling,
89*53ee8cc1Swenshuai.xi // reverse engineering and compiling of the contents of MStar Confidential
90*53ee8cc1Swenshuai.xi // Information is unlawful and strictly prohibited. MStar hereby reserves the
91*53ee8cc1Swenshuai.xi // rights to any and all damages, losses, costs and expenses resulting therefrom.
92*53ee8cc1Swenshuai.xi //
93*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
94*53ee8cc1Swenshuai.xi
95*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////////////////////////
96*53ee8cc1Swenshuai.xi // file halCA.c
97*53ee8cc1Swenshuai.xi // @brief CA HAL
98*53ee8cc1Swenshuai.xi // @author MStar Semiconductor,Inc.
99*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////////////////////////
100*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
101*53ee8cc1Swenshuai.xi #include <linux/string.h>
102*53ee8cc1Swenshuai.xi #else
103*53ee8cc1Swenshuai.xi #include "string.h"
104*53ee8cc1Swenshuai.xi #endif
105*53ee8cc1Swenshuai.xi
106*53ee8cc1Swenshuai.xi #include "MsCommon.h"
107*53ee8cc1Swenshuai.xi #include "regCA.h"
108*53ee8cc1Swenshuai.xi #include "drvCA.h"
109*53ee8cc1Swenshuai.xi #include "halCA.h"
110*53ee8cc1Swenshuai.xi
111*53ee8cc1Swenshuai.xi #include <drvSYS.h>
112*53ee8cc1Swenshuai.xi
113*53ee8cc1Swenshuai.xi // #undef MS_DEBUG_MSG
114*53ee8cc1Swenshuai.xi // #define MS_DEBUG_MSG(x) x
115*53ee8cc1Swenshuai.xi
116*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
117*53ee8cc1Swenshuai.xi // Driver Compiler Option
118*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
119*53ee8cc1Swenshuai.xi
120*53ee8cc1Swenshuai.xi
121*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
122*53ee8cc1Swenshuai.xi // Global Definition
123*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
124*53ee8cc1Swenshuai.xi #define MAX_RESERVED_SIZE 64
125*53ee8cc1Swenshuai.xi
126*53ee8cc1Swenshuai.xi
127*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
128*53ee8cc1Swenshuai.xi // CA Hardware Abstraction Layer
129*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
130*53ee8cc1Swenshuai.xi static MS_VIRT _u32REGBase = 0;
131*53ee8cc1Swenshuai.xi static MS_VIRT _u32REGPMBase = 0;
132*53ee8cc1Swenshuai.xi static MS_VIRT _u32REG_OTP_Base = 0;
133*53ee8cc1Swenshuai.xi static MS_VIRT _u32REG_RSA_Base = 0;
134*53ee8cc1Swenshuai.xi
135*53ee8cc1Swenshuai.xi #define REG16(addr) (*(volatile unsigned short *)(_u32REGBase + (addr)))
136*53ee8cc1Swenshuai.xi #define REG16_WRITE(addr, value, mask) do { REG16(addr) = (REG16(addr) & ~(mask)) | ((value) & (mask)); } while(0)
137*53ee8cc1Swenshuai.xi
138*53ee8cc1Swenshuai.xi #define REG32(addr) (*(volatile unsigned *)(_u32REGBase + (addr)))
139*53ee8cc1Swenshuai.xi #define REG32_WRITE(addr, value, mask) do { REG32(addr) = (REG32(addr) & ~(mask)) | ((value) & (mask)); } while(0)
140*53ee8cc1Swenshuai.xi
141*53ee8cc1Swenshuai.xi #define REG32_PM(addr) (*(volatile unsigned *)(_u32REGPMBase + (addr)))
142*53ee8cc1Swenshuai.xi #define REG16_PM(addr) (*(volatile unsigned short *)(_u32REGPMBase + (addr)))
143*53ee8cc1Swenshuai.xi
144*53ee8cc1Swenshuai.xi #ifdef CA_NO_PRINTF
145*53ee8cc1Swenshuai.xi #define HAL_CA_DEBUG(fmt, args...)
146*53ee8cc1Swenshuai.xi #else
147*53ee8cc1Swenshuai.xi #define HAL_CA_DEBUG(fmt, args...) do{ \
148*53ee8cc1Swenshuai.xi printf("[%s][%d]"fmt"\n", __FUNCTION__, __LINE__, ## args);}\
149*53ee8cc1Swenshuai.xi while(0)
150*53ee8cc1Swenshuai.xi #endif
bitmask(unsigned hi,unsigned lo)151*53ee8cc1Swenshuai.xi static unsigned bitmask(unsigned hi, unsigned lo)
152*53ee8cc1Swenshuai.xi {
153*53ee8cc1Swenshuai.xi unsigned x, s = hi - lo + 1;
154*53ee8cc1Swenshuai.xi // printf("hi=%d lo=%d size=%d\n", hi, lo, s);
155*53ee8cc1Swenshuai.xi
156*53ee8cc1Swenshuai.xi if(s >= sizeof(unsigned) * 8)
157*53ee8cc1Swenshuai.xi x = (unsigned)-1;
158*53ee8cc1Swenshuai.xi else
159*53ee8cc1Swenshuai.xi x = (1U << s) - 1;
160*53ee8cc1Swenshuai.xi return x << lo;
161*53ee8cc1Swenshuai.xi }
162*53ee8cc1Swenshuai.xi
163*53ee8cc1Swenshuai.xi struct {
164*53ee8cc1Swenshuai.xi MS_U32 u32Addr;
165*53ee8cc1Swenshuai.xi MS_U32 u32Hi;
166*53ee8cc1Swenshuai.xi MS_U32 u32Lo;
167*53ee8cc1Swenshuai.xi } _HAL_CA_OTP_Addr[] = {
168*53ee8cc1Swenshuai.xi //Parse from otp mapping
169*53ee8cc1Swenshuai.xi [U_OTP_CA_reserved0] = {0x003500, 255, 0},
170*53ee8cc1Swenshuai.xi [U_OTP_CA_reserved1] = {0x003520, 255, 0},
171*53ee8cc1Swenshuai.xi [U_OTP_CA_reserved2] = {0x003540, 255, 0},
172*53ee8cc1Swenshuai.xi [U_OTP_CA_reserved3] = {0x003560, 255, 0},
173*53ee8cc1Swenshuai.xi [U_OTP_CA_reserved4] = {0x003580, 255, 0},
174*53ee8cc1Swenshuai.xi [U_OTP_CA_reserved5] = {0x0035A0, 255, 0},
175*53ee8cc1Swenshuai.xi [U_OTP_CA_reserved6] = {0x0035C0, 255, 0},
176*53ee8cc1Swenshuai.xi [U_OTP_CA_reserved7] = {0x0035E0, 255, 0},
177*53ee8cc1Swenshuai.xi [U_OTP_CA_reserved8] = {0x003600, 255, 0},
178*53ee8cc1Swenshuai.xi [U_OTP_CA_reserved9] = {0x003620, 255, 0},
179*53ee8cc1Swenshuai.xi [U_OTP_CA_reserved10] = {0x003640, 255, 0},
180*53ee8cc1Swenshuai.xi [U_OTP_CA_reserved11] = {0x003660, 255, 0},
181*53ee8cc1Swenshuai.xi [U_OTP_CA_reserved12] = {0x003680, 255, 0},
182*53ee8cc1Swenshuai.xi [U_OTP_CA_reserved13] = {0x0036A0, 255, 0},
183*53ee8cc1Swenshuai.xi [U_OTP_CA_reserved14] = {0x0036C0, 255, 0},
184*53ee8cc1Swenshuai.xi [U_OTP_CA_reserved15] = {0x0036E0, 255, 0},
185*53ee8cc1Swenshuai.xi [U_OTP_Chip_Extension_ID] = {0x003700, 127, 0},
186*53ee8cc1Swenshuai.xi [U_OTP_PVConfiguration] = {0x003710, 23, 0},
187*53ee8cc1Swenshuai.xi [U_OTP_EncryptLoader_Key_sel] = {0x003710, 27, 24},
188*53ee8cc1Swenshuai.xi [U_OTP_EncryptLoader_KL_level] = {0x003710, 29, 28},
189*53ee8cc1Swenshuai.xi [U_OTP_SW_Reserved0] = {0x003710, 31, 30},
190*53ee8cc1Swenshuai.xi [U_OTP_EncryptLoader_ForceEnc] = {0x003714, 1, 0},
191*53ee8cc1Swenshuai.xi [U_OTP_SW_Reserved1] = {0x003714, 31, 2},
192*53ee8cc1Swenshuai.xi [U_OTP_SW_Reserved2] = {0x003724, 31, 0},
193*53ee8cc1Swenshuai.xi [U_OTP_Versioning] = {0x003728, 511, 0},
194*53ee8cc1Swenshuai.xi [U_OTP_Preenablement_0] = {0x003768, 31, 0},
195*53ee8cc1Swenshuai.xi [U_OTP_Preenablement_1] = {0x00376C, 31, 0},
196*53ee8cc1Swenshuai.xi [U_OTP_Preenablement_2] = {0x003770, 31, 0},
197*53ee8cc1Swenshuai.xi [U_OTP_Preenablement_3] = {0x003774, 31, 0},
198*53ee8cc1Swenshuai.xi [U_OTP_Preenablement_4] = {0x003778, 31, 0},
199*53ee8cc1Swenshuai.xi [U_OTP_Preenablement_5] = {0x00377C, 31, 0},
200*53ee8cc1Swenshuai.xi [U_OTP_Preenablement_6] = {0x003780, 31, 0},
201*53ee8cc1Swenshuai.xi [U_OTP_Preenablement_7] = {0x003784, 31, 0},
202*53ee8cc1Swenshuai.xi [U_OTP_CAdata_0] = {0x003788, 31, 0},
203*53ee8cc1Swenshuai.xi [U_OTP_CAdata_1] = {0x00378C, 31, 0},
204*53ee8cc1Swenshuai.xi [U_OTP_CAdata_2] = {0x003790, 31, 0},
205*53ee8cc1Swenshuai.xi [U_OTP_CAdata_3] = {0x003794, 31, 0},
206*53ee8cc1Swenshuai.xi [U_OTP_CAdata_4] = {0x003798, 31, 0},
207*53ee8cc1Swenshuai.xi [U_OTP_CAdata_5] = {0x00379C, 31, 0},
208*53ee8cc1Swenshuai.xi [U_OTP_CAdata_6] = {0x0037A0, 31, 0},
209*53ee8cc1Swenshuai.xi [U_OTP_CAdata_7] = {0x0037A4, 31, 0},
210*53ee8cc1Swenshuai.xi [U_OTP_CAdata_8] = {0x0037A8, 31, 0},
211*53ee8cc1Swenshuai.xi [U_OTP_CAdata_9] = {0x0037AC, 31, 0},
212*53ee8cc1Swenshuai.xi [U_OTP_CAdata_10] = {0x0037B0, 31, 0},
213*53ee8cc1Swenshuai.xi [U_OTP_CAdata_11] = {0x0037B4, 31, 0},
214*53ee8cc1Swenshuai.xi [U_OTP_CAdata_12] = {0x0037B8, 31, 0},
215*53ee8cc1Swenshuai.xi [U_OTP_CAdata_13] = {0x0037BC, 31, 0},
216*53ee8cc1Swenshuai.xi [U_OTP_CAdata_14] = {0x0037C0, 31, 0},
217*53ee8cc1Swenshuai.xi [U_OTP_CAdata_15] = {0x0037C4, 31, 0},
218*53ee8cc1Swenshuai.xi [U_OTP_CAdata_16] = {0x0037C8, 31, 0},
219*53ee8cc1Swenshuai.xi [U_OTP_CAdata_17] = {0x0037CC, 31, 0},
220*53ee8cc1Swenshuai.xi [U_OTP_CAdata_18] = {0x0037D0, 31, 0},
221*53ee8cc1Swenshuai.xi [U_OTP_CAdata_19] = {0x0037D4, 31, 0},
222*53ee8cc1Swenshuai.xi [U_OTP_CAdata_20] = {0x0037D8, 31, 0},
223*53ee8cc1Swenshuai.xi [U_OTP_CAdata_21] = {0x0037DC, 31, 0},
224*53ee8cc1Swenshuai.xi [U_OTP_CAdata_22] = {0x0037E0, 31, 0},
225*53ee8cc1Swenshuai.xi [U_OTP_CAdata_23] = {0x0037E4, 31, 0},
226*53ee8cc1Swenshuai.xi [U_OTP_CAdata_24] = {0x0037E8, 31, 0},
227*53ee8cc1Swenshuai.xi [U_OTP_CAdata_25] = {0x0037EC, 31, 0},
228*53ee8cc1Swenshuai.xi [U_OTP_CAdata_26] = {0x0037F0, 31, 0},
229*53ee8cc1Swenshuai.xi [U_OTP_CAdata_27] = {0x0037F4, 31, 0},
230*53ee8cc1Swenshuai.xi [U_OTP_CAdata_28] = {0x0037F8, 31, 0},
231*53ee8cc1Swenshuai.xi [U_OTP_CAdata_29] = {0x0037FC, 31, 0},
232*53ee8cc1Swenshuai.xi [U_OTP_CAdata_30] = {0x003800, 31, 0},
233*53ee8cc1Swenshuai.xi [U_OTP_CAdata_31] = {0x003804, 31, 0},
234*53ee8cc1Swenshuai.xi [U_OTP_CAdata_32] = {0x003808, 31, 0},
235*53ee8cc1Swenshuai.xi [U_OTP_CAdata_33] = {0x00380C, 31, 0},
236*53ee8cc1Swenshuai.xi [U_OTP_CAdata_34] = {0x003810, 31, 0},
237*53ee8cc1Swenshuai.xi [U_OTP_CAdata_35] = {0x003814, 31, 0},
238*53ee8cc1Swenshuai.xi [U_OTP_CAdata_36] = {0x003818, 31, 0},
239*53ee8cc1Swenshuai.xi [U_OTP_CAdata_37] = {0x00381C, 31, 0},
240*53ee8cc1Swenshuai.xi [U_OTP_forbid_SCPU2DRAM] = {0x003820, 3, 0},
241*53ee8cc1Swenshuai.xi [U_OTP_forbid_SCPUQMEM_to_DRAM] = {0x003820, 7, 4},
242*53ee8cc1Swenshuai.xi [U_OTP_forbid_CryptoDMA_keyslot_QMEM] = {0x003820, 11, 8},
243*53ee8cc1Swenshuai.xi [U_OTP_forbid_SCPU2UART] = {0x003820, 15, 12},
244*53ee8cc1Swenshuai.xi [U_OTP_IXSC_config1] = {0x003820, 19, 16},
245*53ee8cc1Swenshuai.xi [U_OTP_IXSC_config2] = {0x003820, 23, 20},
246*53ee8cc1Swenshuai.xi [U_OTP_IXSC_config3] = {0x003820, 27, 24},
247*53ee8cc1Swenshuai.xi [U_OTP_IXSC_config4] = {0x003820, 31, 28},
248*53ee8cc1Swenshuai.xi [U_OTP_LockWord_Preenablement_0_W] = {0x003824, 1, 0},
249*53ee8cc1Swenshuai.xi [U_OTP_LockWord_Preenablement_1_W] = {0x003824, 3, 2},
250*53ee8cc1Swenshuai.xi [U_OTP_LockWord_Preenablement_2_W] = {0x003824, 5, 4},
251*53ee8cc1Swenshuai.xi [U_OTP_LockWord_Preenablement_3_W] = {0x003824, 7, 6},
252*53ee8cc1Swenshuai.xi [U_OTP_LockWord_Preenablement_4_W] = {0x003824, 9, 8},
253*53ee8cc1Swenshuai.xi [U_OTP_LockWord_Preenablement_5_W] = {0x003824, 11, 10},
254*53ee8cc1Swenshuai.xi [U_OTP_LockWord_Preenablement_6_W] = {0x003824, 13, 12},
255*53ee8cc1Swenshuai.xi [U_OTP_LockWord_Preenablement_7_W] = {0x003824, 15, 14},
256*53ee8cc1Swenshuai.xi [U_OTP_Test_Switch] = {0x003824, 23, 16},
257*53ee8cc1Swenshuai.xi [U_OTP_IXSC_Reserved0] = {0x003824, 31, 24},
258*53ee8cc1Swenshuai.xi [U_OTP_NOCS3_00] = {0x003828, 383, 0},
259*53ee8cc1Swenshuai.xi [U_OTP_NOCS3_01] = {0x003858, 383, 0},
260*53ee8cc1Swenshuai.xi [U_OTP_NOCS3_02] = {0x003888, 127, 0},
261*53ee8cc1Swenshuai.xi [U_OTP_NOCS3_03] = {0x003898, 127, 0},
262*53ee8cc1Swenshuai.xi [U_OTP_MSID] = {0x0038A8, 31, 0},
263*53ee8cc1Swenshuai.xi [U_OTP_CFG_STB_CA_SN] = {0x0038AC, 31, 0},
264*53ee8cc1Swenshuai.xi [U_OTP_HASH0_VER_REF] = {0x0038c8, 31, 0},
265*53ee8cc1Swenshuai.xi [U_OTP_HASH1_VER_REF] = {0x0038cc, 31, 0},
266*53ee8cc1Swenshuai.xi [U_OTP_HASH2_VER_REF] = {0x0038d0, 31, 0},
267*53ee8cc1Swenshuai.xi [U_OTP_RSA_0] = {0x0039B0, 2047, 0},
268*53ee8cc1Swenshuai.xi [U_OTP_RSA_1] = {0x003628, 2047, 0},
269*53ee8cc1Swenshuai.xi [U_OTP_RSA_0_integrity_chk] = {0x003AB0, 1, 0},
270*53ee8cc1Swenshuai.xi [U_OTP_RSA_1_integrity_chk] = {0x003AB0, 3, 2},
271*53ee8cc1Swenshuai.xi [U_OTP_ena_ACPUUseHWRSAKey] = {0x003AB0, 7, 4},
272*53ee8cc1Swenshuai.xi [U_OTP_forbid_ACPUReadRSAKey0] = {0x003AB0, 10, 8},
273*53ee8cc1Swenshuai.xi [U_OTP_forbid_ACPUReadRSAKey1] = {0x003AB0, 13, 11},
274*53ee8cc1Swenshuai.xi [U_OTP_forbid_ACPUWrite_Versioning] = {0x003AB0, 15, 14},
275*53ee8cc1Swenshuai.xi [U_OTP_forbid_ACPURead_Versioning] = {0x003AB0, 17, 16},
276*53ee8cc1Swenshuai.xi [U_OTP_RSA_Reserved0] = {0x003AB0, 31, 18},
277*53ee8cc1Swenshuai.xi [U_OTP_RSA_0_CRC] = {0x003AB4, 15, 0},
278*53ee8cc1Swenshuai.xi [U_OTP_RSA_1_CRC] = {0x003AB4, 31, 16},
279*53ee8cc1Swenshuai.xi [U_OTP_PGMask0] = {0x003AB8, 31, 0},
280*53ee8cc1Swenshuai.xi [U_OTP_PGMask1] = {0x003ABC, 31, 0},
281*53ee8cc1Swenshuai.xi [U_OTP_PGMask2] = {0x003AC0, 31, 0},
282*53ee8cc1Swenshuai.xi [U_OTP_PGMask3] = {0x003AC4, 31, 0},
283*53ee8cc1Swenshuai.xi [U_OTP_PGMask4] = {0x003AC8, 31, 0},
284*53ee8cc1Swenshuai.xi [U_OTP_PGMask5] = {0x003ACC, 31, 0},
285*53ee8cc1Swenshuai.xi [U_OTP_PGMask6] = {0x003AD0, 31, 0},
286*53ee8cc1Swenshuai.xi [U_OTP_PGMask7] = {0x003AD4, 31, 0},
287*53ee8cc1Swenshuai.xi [U_OTP_PGMask8] = {0x003AD8, 31, 0},
288*53ee8cc1Swenshuai.xi [U_OTP_PGMask9] = {0x003ADC, 31, 0},
289*53ee8cc1Swenshuai.xi [U_OTP_PGMask10] = {0x003AE0, 31, 0},
290*53ee8cc1Swenshuai.xi [U_OTP_PGMask11] = {0x003AE4, 31, 0},
291*53ee8cc1Swenshuai.xi [U_OTP_PGMask12] = {0x003AE8, 31, 0},
292*53ee8cc1Swenshuai.xi [U_OTP_PGMask13] = {0x003AEC, 31, 0},
293*53ee8cc1Swenshuai.xi [U_OTP_PGMask14] = {0x003AF0, 31, 0},
294*53ee8cc1Swenshuai.xi [U_OTP_PGMask15] = {0x003AF4, 31, 0},
295*53ee8cc1Swenshuai.xi [U_OTP_PGMask16] = {0x003AF8, 31, 0},
296*53ee8cc1Swenshuai.xi [U_OTP_PGMask17] = {0x003AFC, 31, 0},
297*53ee8cc1Swenshuai.xi [U_OTP_v_PubOtpOID] = {0x003B00, 15, 0},
298*53ee8cc1Swenshuai.xi [U_OTP_NDS_Reserved0] = {0x003B00, 31, 16},
299*53ee8cc1Swenshuai.xi [U_OTP_v_PubOtpVID] = {0x003B04, 15, 0},
300*53ee8cc1Swenshuai.xi [U_OTP_NDS_Reserved1] = {0x003B04, 31, 16},
301*53ee8cc1Swenshuai.xi [U_OTP_v_PubOtpGP] = {0x003B08, 15, 0},
302*53ee8cc1Swenshuai.xi [U_OTP_LockWord_GP_group_W] = {0x003B08, 31, 16},
303*53ee8cc1Swenshuai.xi [U_OTP_v_PubOtpBID] = {0x003B0C, 3, 0},
304*53ee8cc1Swenshuai.xi [U_OTP_NDS_Reserved2] = {0x003B0C, 31, 4},
305*53ee8cc1Swenshuai.xi [U_OTP_v_PubOtpRsaIndex] = {0x003B10, 3, 0},
306*53ee8cc1Swenshuai.xi [U_OTP_NDS_Reserved3] = {0x003B10, 31, 4},
307*53ee8cc1Swenshuai.xi [U_OTP_v_PubOtpMinConfVer] = {0x003B14, 7, 0},
308*53ee8cc1Swenshuai.xi [U_OTP_NDS_Reserved4] = {0x003B14, 31, 8},
309*53ee8cc1Swenshuai.xi [U_OTP_VenderConstSel] = {0x003B18, 2, 0},
310*53ee8cc1Swenshuai.xi [U_OTP_NDS_Reserved5] = {0x003B18, 31, 3},
311*53ee8cc1Swenshuai.xi [U_OTP_LockWord_NDS_Key1] = {0x003B1C, 2, 0},
312*53ee8cc1Swenshuai.xi [U_OTP_LockWord_NDS_Key2] = {0x003B1C, 5, 3},
313*53ee8cc1Swenshuai.xi [U_OTP_LockWord_NDS_Key3] = {0x003B1C, 8, 6},
314*53ee8cc1Swenshuai.xi [U_OTP_LockWord_NDS_Key4] = {0x003B1C, 11, 9},
315*53ee8cc1Swenshuai.xi [U_OTP_LockWord_NDS_Key5] = {0x003B1C, 14, 12},
316*53ee8cc1Swenshuai.xi [U_OTP_LockWord_NDS_Key6] = {0x003B1C, 17, 15},
317*53ee8cc1Swenshuai.xi [U_OTP_LockWord_NDS_Key7] = {0x003B1C, 20, 18},
318*53ee8cc1Swenshuai.xi [U_OTP_LockWord_NDS_Key8] = {0x003B1C, 23, 21},
319*53ee8cc1Swenshuai.xi [U_OTP_NDSKeyValid] = {0x003B1C, 31, 24},
320*53ee8cc1Swenshuai.xi [U_OTP_forbid_NSK_wr_sck] = {0x003B20, 7, 0},
321*53ee8cc1Swenshuai.xi [U_OTP_UseCheckSum] = {0x003B20, 15, 8},
322*53ee8cc1Swenshuai.xi [U_OTP_allow_NDSKey_BlankChk] = {0x003B20, 17, 16},
323*53ee8cc1Swenshuai.xi [U_OTP_allow_ProgFail_RuinNDSKey] = {0x003B20, 19, 18},
324*53ee8cc1Swenshuai.xi [U_OTP_allow_NDSReadKeyWait200ms] = {0x003B20, 21, 20},
325*53ee8cc1Swenshuai.xi [U_OTP_allow_ReadErrorRstOtp] = {0x003B20, 23, 22},
326*53ee8cc1Swenshuai.xi [U_OTP_allow_illegalNDSFlagChk] = {0x003B20, 27, 24},
327*53ee8cc1Swenshuai.xi [U_OTP_allow_Rst_NDS_SCFlag_ParityFail] = {0x003B20, 31, 28},
328*53ee8cc1Swenshuai.xi [U_OTP_ena_ACPUUseNSK2] = {0x003B24, 3, 0},
329*53ee8cc1Swenshuai.xi [U_OTP_ena_DBUSUseNSK2] = {0x003B24, 7, 4},
330*53ee8cc1Swenshuai.xi [U_OTP_ena_ForceOneMilSec] = {0x003B24, 11, 8},
331*53ee8cc1Swenshuai.xi [U_OTP_allow_SCCheck] = {0x003B24, 15, 12},
332*53ee8cc1Swenshuai.xi [U_OTP_ena_TestRCFreq] = {0x003B24, 19, 16},
333*53ee8cc1Swenshuai.xi [U_OTP_ena_SWRN] = {0x003B24, 23, 20},
334*53ee8cc1Swenshuai.xi [U_OTP_ena_NSKSeedPRNG] = {0x003B24, 27, 24},
335*53ee8cc1Swenshuai.xi [U_OTP_OTPWritePWDProtect] = {0x003B24, 31, 28},
336*53ee8cc1Swenshuai.xi [U_OTP_NDS_keysel] = {0x003B28, 5, 0},
337*53ee8cc1Swenshuai.xi [U_OTP_allow_NSK2_PWD_Mode] = {0x003B28, 7, 6},
338*53ee8cc1Swenshuai.xi [U_OTP_ena_EMMFilter] = {0x003B28, 11, 8},
339*53ee8cc1Swenshuai.xi [U_OTP_ena_TestGenIN] = {0x003B28, 15, 12},
340*53ee8cc1Swenshuai.xi [U_OTP_RCFreq_map] = {0x003B28, 20, 16},
341*53ee8cc1Swenshuai.xi [U_OTP_NDS_Reserved6] = {0x003B28, 31, 21},
342*53ee8cc1Swenshuai.xi [U_OTP_allow_SkipBadNVBit] = {0x003B2C, 1, 0},
343*53ee8cc1Swenshuai.xi [U_OTP_allow_NDSSC_ReadFail_BadPkt] = {0x003B2C, 3, 2},
344*53ee8cc1Swenshuai.xi [U_OTP_allow_RANDOM_keybus] = {0x003B2C, 5, 4},
345*53ee8cc1Swenshuai.xi [U_OTP_allow_RANDOM_byteacc] = {0x003B2C, 7, 6},
346*53ee8cc1Swenshuai.xi [U_OTP_allow_NDS_Rd55AA] = {0x003B2C, 9, 8},
347*53ee8cc1Swenshuai.xi [U_OTP_allow_NDS_Parity_chk] = {0x003B2C, 11, 10},
348*53ee8cc1Swenshuai.xi [U_OTP_allow_NDS_KeyRd55AA] = {0x003B2C, 13, 12},
349*53ee8cc1Swenshuai.xi [U_OTP_forbid_OTPBuiltInTest] = {0x003B2C, 15, 14},
350*53ee8cc1Swenshuai.xi [U_OTP_forbid_Kilo_ProgRepair] = {0x003B2C, 17, 16},
351*53ee8cc1Swenshuai.xi [U_OTP_NDS_Reserved7] = {0x003B2C, 31, 18},
352*53ee8cc1Swenshuai.xi [U_OTP_NVCOUNT] = {0x003B30, 1023, 0},
353*53ee8cc1Swenshuai.xi [U_OTP_NDS_SecretKey1] = {0x003BB0, 127, 0},
354*53ee8cc1Swenshuai.xi [U_OTP_NDS_SecretKey2] = {0x003BC0, 127, 0},
355*53ee8cc1Swenshuai.xi [U_OTP_NDS_SecretKey3] = {0x003BD0, 127, 0},
356*53ee8cc1Swenshuai.xi [U_OTP_NDS_SecretKey4] = {0x003BE0, 127, 0},
357*53ee8cc1Swenshuai.xi [U_OTP_NDS_SecretKey5] = {0x003BF0, 127, 0},
358*53ee8cc1Swenshuai.xi [U_OTP_NDS_SecretKey6] = {0x003C00, 127, 0},
359*53ee8cc1Swenshuai.xi [U_OTP_NDS_SecretKey7] = {0x003C10, 127, 0},
360*53ee8cc1Swenshuai.xi [U_OTP_NDS_SecretKey8] = {0x003C20, 127, 0},
361*53ee8cc1Swenshuai.xi [U_OTP_NDSKey1Chksum] = {0x003C30, 7, 0},
362*53ee8cc1Swenshuai.xi [U_OTP_NDSKey1Tag] = {0x003C30, 15, 8},
363*53ee8cc1Swenshuai.xi [U_OTP_NDSKey2Chksum] = {0x003C30, 23, 16},
364*53ee8cc1Swenshuai.xi [U_OTP_NDSKey2Tag] = {0x003C30, 31, 24},
365*53ee8cc1Swenshuai.xi [U_OTP_NDSKey3Chksum] = {0x003C34, 7, 0},
366*53ee8cc1Swenshuai.xi [U_OTP_NDSKey3Tag] = {0x003C34, 15, 8},
367*53ee8cc1Swenshuai.xi [U_OTP_NDSKey4Chksum] = {0x003C34, 23, 16},
368*53ee8cc1Swenshuai.xi [U_OTP_NDSKey4Tag] = {0x003C34, 31, 24},
369*53ee8cc1Swenshuai.xi [U_OTP_NDSKey5Chksum] = {0x003C38, 7, 0},
370*53ee8cc1Swenshuai.xi [U_OTP_NDSKey5Tag] = {0x003C38, 15, 8},
371*53ee8cc1Swenshuai.xi [U_OTP_NDSKey6Chksum] = {0x003C38, 23, 16},
372*53ee8cc1Swenshuai.xi [U_OTP_NDSKey6Tag] = {0x003C38, 31, 24},
373*53ee8cc1Swenshuai.xi [U_OTP_NDSKey7Chksum] = {0x003C3C, 7, 0},
374*53ee8cc1Swenshuai.xi [U_OTP_NDSKey7Tag] = {0x003C3C, 15, 8},
375*53ee8cc1Swenshuai.xi [U_OTP_NDSKey8Chksum] = {0x003C3C, 23, 16},
376*53ee8cc1Swenshuai.xi [U_OTP_NDSKey8Tag] = {0x003C3C, 31, 24},
377*53ee8cc1Swenshuai.xi [U_OTP_NDS_Key1_CRC] = {0x003C40, 15, 0},
378*53ee8cc1Swenshuai.xi [U_OTP_NDS_Key2_CRC] = {0x003C40, 31, 16},
379*53ee8cc1Swenshuai.xi [U_OTP_NDS_Key3_CRC] = {0x003C44, 15, 0},
380*53ee8cc1Swenshuai.xi [U_OTP_NDS_Key4_CRC] = {0x003C44, 31, 16},
381*53ee8cc1Swenshuai.xi [U_OTP_NDS_Key5_CRC] = {0x003C48, 15, 0},
382*53ee8cc1Swenshuai.xi [U_OTP_NDS_Key6_CRC] = {0x003C48, 31, 16},
383*53ee8cc1Swenshuai.xi [U_OTP_NDS_Key7_CRC] = {0x003C4C, 15, 0},
384*53ee8cc1Swenshuai.xi [U_OTP_NDS_Key8_CRC] = {0x003C4C, 31, 16},
385*53ee8cc1Swenshuai.xi [U_OTP_NDS_ESCK_Key1_obfuscation] = {0x003C50, 1, 0},
386*53ee8cc1Swenshuai.xi [U_OTP_NDS_Key1_integrity_chk] = {0x003C50, 3, 2},
387*53ee8cc1Swenshuai.xi [U_OTP_NDS_ESCK_Key2_obfuscation] = {0x003C50, 5, 4},
388*53ee8cc1Swenshuai.xi [U_OTP_NDS_Key2_integrity_chk] = {0x003C50, 7, 6},
389*53ee8cc1Swenshuai.xi [U_OTP_NDS_ESCK_Key3_obfuscation] = {0x003C50, 9, 8},
390*53ee8cc1Swenshuai.xi [U_OTP_NDS_Key3_integrity_chk] = {0x003C50, 11, 10},
391*53ee8cc1Swenshuai.xi [U_OTP_NDS_ESCK_Key4_obfuscation] = {0x003C50, 13, 12},
392*53ee8cc1Swenshuai.xi [U_OTP_NDS_Key4_integrity_chk] = {0x003C50, 15, 14},
393*53ee8cc1Swenshuai.xi [U_OTP_NDS_ESCK_Key5_obfuscation] = {0x003C50, 17, 16},
394*53ee8cc1Swenshuai.xi [U_OTP_NDS_Key5_integrity_chk] = {0x003C50, 19, 18},
395*53ee8cc1Swenshuai.xi [U_OTP_NDS_ESCK_Key6_obfuscation] = {0x003C50, 21, 20},
396*53ee8cc1Swenshuai.xi [U_OTP_NDS_Key6_integrity_chk] = {0x003C50, 23, 22},
397*53ee8cc1Swenshuai.xi [U_OTP_NDS_ESCK_Key7_obfuscation] = {0x003C50, 25, 24},
398*53ee8cc1Swenshuai.xi [U_OTP_NDS_Key7_integrity_chk] = {0x003C50, 27, 26},
399*53ee8cc1Swenshuai.xi [U_OTP_NDS_ESCK_Key8_obfuscation] = {0x003C50, 29, 28},
400*53ee8cc1Swenshuai.xi [U_OTP_NDS_Key8_integrity_chk] = {0x003C50, 31, 30},
401*53ee8cc1Swenshuai.xi [U_OTP_EJTAG_MODE_Parity_bit] = {0x003C54, 0, 0},
402*53ee8cc1Swenshuai.xi [U_OTP_I2C_MODE_Parity_bit] = {0x003C54, 1, 1},
403*53ee8cc1Swenshuai.xi [U_OTP_SCAN_MODE_Parity_bit] = {0x003C54, 2, 2},
404*53ee8cc1Swenshuai.xi [U_OTP_VenderConstSel_Parity_bit] = {0x003C54, 3, 3},
405*53ee8cc1Swenshuai.xi [U_OTP_v_PubOtpRsaIndex_Parity_bit] = {0x003C54, 4, 4},
406*53ee8cc1Swenshuai.xi [U_OTP_NDS_ESCK_Key1_obfuscation_Parity_bit] = {0x003C54, 5, 5},
407*53ee8cc1Swenshuai.xi [U_OTP_NDS_ESCK_Key2_obfuscation_Parity_bit] = {0x003C54, 6, 6},
408*53ee8cc1Swenshuai.xi [U_OTP_NDS_ESCK_Key3_obfuscation_Parity_bit] = {0x003C54, 7, 7},
409*53ee8cc1Swenshuai.xi [U_OTP_NDS_ESCK_Key4_obfuscation_Parity_bit] = {0x003C54, 8, 8},
410*53ee8cc1Swenshuai.xi [U_OTP_NDS_ESCK_Key5_obfuscation_Parity_bit] = {0x003C54, 9, 9},
411*53ee8cc1Swenshuai.xi [U_OTP_NDS_ESCK_Key6_obfuscation_Parity_bit] = {0x003C54, 10, 10},
412*53ee8cc1Swenshuai.xi [U_OTP_NDS_ESCK_Key7_obfuscation_Parity_bit] = {0x003C54, 11, 11},
413*53ee8cc1Swenshuai.xi [U_OTP_NDS_ESCK_Key8_obfuscation_Parity_bit] = {0x003C54, 12, 12},
414*53ee8cc1Swenshuai.xi [U_OTP_allow_ReadErrorRstOtp_Parity_bit] = {0x003C54, 13, 13},
415*53ee8cc1Swenshuai.xi [U_OTP_ena_ACPUUseNSK2_Parity_bit] = {0x003C54, 14, 14},
416*53ee8cc1Swenshuai.xi [U_OTP_BootMode_Parity_bit] = {0x003C54, 15, 15},
417*53ee8cc1Swenshuai.xi [U_OTP_ena_ACPU2KT_Parity_bit] = {0x003C54, 16, 16},
418*53ee8cc1Swenshuai.xi [U_OTP_ena_EMMFilter_Parity_bit] = {0x003C54, 17, 17},
419*53ee8cc1Swenshuai.xi [U_OTP_allow_NDS_Rd55AA_Parity_bit] = {0x003C54, 18, 18},
420*53ee8cc1Swenshuai.xi [U_OTP_forbid_OTPBuiltInTest_Parity_bit] = {0x003C54, 19, 19},
421*53ee8cc1Swenshuai.xi [U_OTP_allow_NSK_RNG_ROSC_Parity_bit] = {0x003C54, 20, 20},
422*53ee8cc1Swenshuai.xi [U_OTP_SecretAreaEnable_Parity_bit] = {0x003C54, 21, 21},
423*53ee8cc1Swenshuai.xi [U_OTP_forbid_SW_SPSD_Key_Parity_bit] = {0x003C54, 22, 22},
424*53ee8cc1Swenshuai.xi [U_OTP_allow_OTP_BgCRC_Parity_bit] = {0x003C54, 23, 23},
425*53ee8cc1Swenshuai.xi [U_OTP_forbid_USBSlaveMode_Parity_bit] = {0x003C54, 24, 24},
426*53ee8cc1Swenshuai.xi [U_OTP_OTPWritePWDProtect_Parity_bit] = {0x003C54, 25, 25},
427*53ee8cc1Swenshuai.xi [U_OTP_ena_NSK2_Parity_bit] = {0x003C54, 26, 26},
428*53ee8cc1Swenshuai.xi [U_OTP_NDS_Reserved8] = {0x003C54, 31, 27},
429*53ee8cc1Swenshuai.xi [U_OTP_ena_ESAAlgo_invalidate] = {0x003C58, 3, 0},
430*53ee8cc1Swenshuai.xi [U_OTP_ena_LocalAlgo_Invalidate] = {0x003C58, 7, 4},
431*53ee8cc1Swenshuai.xi [U_OTP_ContentProtEn] = {0x003C58, 11, 8},
432*53ee8cc1Swenshuai.xi [U_OTP_concurrency_configuration] = {0x003C58, 13, 12},
433*53ee8cc1Swenshuai.xi [U_OTP_allow_NSK_RNG_ROSC] = {0x003C58, 15, 14},
434*53ee8cc1Swenshuai.xi [U_OTP_nds_fc_disable] = {0x003C58, 16, 16},
435*53ee8cc1Swenshuai.xi [U_OTP_NDS_CPNR0_sel] = {0x003C58, 17, 17},
436*53ee8cc1Swenshuai.xi [U_OTP_NDS_CPNR_off] = {0x003C58, 18, 18},
437*53ee8cc1Swenshuai.xi [U_OTP_NDS_Reserved9] = {0x003C58, 31, 19},
438*53ee8cc1Swenshuai.xi [U_OTP_PM51_ST_ADDR] = {0x003C5C, 11, 0},
439*53ee8cc1Swenshuai.xi [U_OTP_PM51_ED_ADDR] = {0x003C5C, 23, 12},
440*53ee8cc1Swenshuai.xi [U_OTP_forbid_PM51ReadOTP] = {0x003C5C, 25, 24},
441*53ee8cc1Swenshuai.xi [U_OTP_forbid_PM51WriteOTP] = {0x003C5C, 27, 26},
442*53ee8cc1Swenshuai.xi [U_OTP_allow_PM51] = {0x003C5C, 29, 28},
443*53ee8cc1Swenshuai.xi [U_OTP_PM51_SW_R2] = {0x003C5C, 31, 30},
444*53ee8cc1Swenshuai.xi [U_OTP_forbid_CLK_SEED_TEST] = {0x003C60, 0, 0},
445*53ee8cc1Swenshuai.xi [U_OTP_MOBF_TOP_use_DES] = {0x003C60, 1, 1},
446*53ee8cc1Swenshuai.xi [U_OTP_OBFUSCATEVideoStream] = {0x003C60, 3, 2},
447*53ee8cc1Swenshuai.xi [U_OTP_forbid_EJTAG_Pinshare] = {0x003C60, 5, 4},
448*53ee8cc1Swenshuai.xi [U_OTP_allow_clear_sram] = {0x003C60, 6, 6},
449*53ee8cc1Swenshuai.xi [U_OTP_forbid_dft_md_sram] = {0x003C60, 7, 7},
450*53ee8cc1Swenshuai.xi [U_OTP_LINK_ISOEN2GPIO4] = {0x003C60, 8, 8},
451*53ee8cc1Swenshuai.xi [U_OTP_PM_SLEEP_WR_PROT_EN] = {0x003C60, 9, 9},
452*53ee8cc1Swenshuai.xi [U_OTP_PWR_HW_RST_MODE_EN] = {0x003C60, 10, 10},
453*53ee8cc1Swenshuai.xi [U_OTP_ISOC_TST_DIG_EN_GATE] = {0x003C60, 11, 11},
454*53ee8cc1Swenshuai.xi [U_OTP_OTHERS_Reserved0] = {0x003C60, 15, 12},
455*53ee8cc1Swenshuai.xi [U_OTP_Rsv_Feature] = {0x003C60, 31, 16},
456*53ee8cc1Swenshuai.xi [U_OTP_forbid_CA_MCM] = {0x003C64, 2, 0},
457*53ee8cc1Swenshuai.xi [U_OTP_forbid_DIAMOND_PMU] = {0x003C64, 5, 3},
458*53ee8cc1Swenshuai.xi [U_OTP_allow_force_dual_core] = {0x003C64, 6, 6},
459*53ee8cc1Swenshuai.xi [U_OTP_disable_jpi] = {0x003C64, 7, 7},
460*53ee8cc1Swenshuai.xi [U_OTP_forbid_DIG_PMU] = {0x003C64, 10, 8},
461*53ee8cc1Swenshuai.xi [U_OTP_forbid_WHOLECHIP_alive_when_NOCORE_alive] = {0x003C64, 13, 11},
462*53ee8cc1Swenshuai.xi [U_OTP_OTHERS_Reserved2] = {0x003C64, 15, 14},
463*53ee8cc1Swenshuai.xi [U_OTP_allow_CORE0_always_alive] = {0x003C64, 18, 16},
464*53ee8cc1Swenshuai.xi [U_OTP_allow_NONCORE0_default_reset] = {0x003C64, 21, 19},
465*53ee8cc1Swenshuai.xi [U_OTP_pwrgd_int_en] = {0x003C64, 22, 22},
466*53ee8cc1Swenshuai.xi [U_OTP_OTHERS_Reserved3] = {0x003C64, 31, 23},
467*53ee8cc1Swenshuai.xi [U_OTP_LOGICBIST_SCAN_OUT_CRC32] = {0x003C68, 31, 0},
468*53ee8cc1Swenshuai.xi [U_OTP_OTHERS_Reserved4] = {0x003C6C, 31, 0},
469*53ee8cc1Swenshuai.xi [U_OTP_RC_OPTION] = {0x003C70, 7, 0},
470*53ee8cc1Swenshuai.xi [U_OTP_RC_OPTION_EN] = {0x003C70, 8, 8},
471*53ee8cc1Swenshuai.xi [U_OTP_GCR_TRVBG] = {0x003C70, 14, 9},
472*53ee8cc1Swenshuai.xi [U_OTP_OTHERS_Reserved5] = {0x003C70, 15, 15},
473*53ee8cc1Swenshuai.xi [U_OTP_TEST_Status_TE] = {0x003C70, 23, 16},
474*53ee8cc1Swenshuai.xi [U_OTP_TEST_Status] = {0x003C70, 31, 24},
475*53ee8cc1Swenshuai.xi [U_OTP_ena_PVRNS2S] = {0x003C74, 3, 0},
476*53ee8cc1Swenshuai.xi [U_OTP_ena_PVRS2NS] = {0x003C74, 7, 4},
477*53ee8cc1Swenshuai.xi [U_OTP_ena_PlayBackRec0] = {0x003C74, 11, 8},
478*53ee8cc1Swenshuai.xi [U_OTP_ena_PlayBackRec1] = {0x003C74, 15, 12},
479*53ee8cc1Swenshuai.xi [U_OTP_ena_PlayBackRec2] = {0x003C74, 19, 16},
480*53ee8cc1Swenshuai.xi [U_OTP_ena_PlayBackRec3] = {0x003C74, 23, 20},
481*53ee8cc1Swenshuai.xi [U_OTP_ena_PlayBackRec4] = {0x003C74, 27, 24},
482*53ee8cc1Swenshuai.xi [U_OTP_ena_PlayBackRec5] = {0x003C74, 31, 28},
483*53ee8cc1Swenshuai.xi [U_OTP_ena_PVR_secure_protect_0] = {0x003C78, 3, 0},
484*53ee8cc1Swenshuai.xi [U_OTP_ena_PVR_secure_protect_1] = {0x003C78, 7, 4},
485*53ee8cc1Swenshuai.xi [U_OTP_ena_VQ_secure_protect_0] = {0x003C78, 11, 8},
486*53ee8cc1Swenshuai.xi [U_OTP_TSP_Reserved0] = {0x003C78, 15, 12},
487*53ee8cc1Swenshuai.xi [U_OTP_dis_TSO] = {0x003C78, 19, 16},
488*53ee8cc1Swenshuai.xi [U_OTP_ena_TS2TSO_0] = {0x003C78, 23, 20},
489*53ee8cc1Swenshuai.xi [U_OTP_ena_TS2TSO_1] = {0x003C78, 27, 24},
490*53ee8cc1Swenshuai.xi [U_OTP_ena_TSO_SecRange] = {0x003C78, 31, 28},
491*53ee8cc1Swenshuai.xi [U_OTP_CAVIDEnforcedTS0] = {0x003C7C, 5, 0},
492*53ee8cc1Swenshuai.xi [U_OTP_CAVIDEnforcedTS1] = {0x003C7C, 11, 6},
493*53ee8cc1Swenshuai.xi [U_OTP_CAVIDEnforcedTS2] = {0x003C7C, 17, 12},
494*53ee8cc1Swenshuai.xi [U_OTP_CAVIDEnforcedTS3] = {0x003C7C, 23, 18},
495*53ee8cc1Swenshuai.xi [U_OTP_CAVIDEnforcedTS4] = {0x003C7C, 29, 24},
496*53ee8cc1Swenshuai.xi [U_OTP_TSP_Reserved1] = {0x003C7C, 31, 30},
497*53ee8cc1Swenshuai.xi [U_OTP_CAVIDEnforcedTS5] = {0x003C80, 5, 0},
498*53ee8cc1Swenshuai.xi [U_OTP_ForbidAVtoSec] = {0x003C80, 6, 6},
499*53ee8cc1Swenshuai.xi [U_OTP_TSP_Reserved2] = {0x003C80, 7, 7},
500*53ee8cc1Swenshuai.xi [U_OTP_dis_clear_stream_to_PVR] = {0x003C80, 11, 8},
501*53ee8cc1Swenshuai.xi [U_OTP_forbid_SW_SPSD_Key] = {0x003C80, 13, 12},
502*53ee8cc1Swenshuai.xi [U_OTP_forbid_KL_SPSD_Key] = {0x003C80, 15, 14},
503*53ee8cc1Swenshuai.xi [U_OTP_allow_TSPCPUCodeProt] = {0x003C80, 17, 16},
504*53ee8cc1Swenshuai.xi [U_OTP_TSP_Reserved3] = {0x003C80, 31, 18},
505*53ee8cc1Swenshuai.xi [U_OTP_ena_KeyLadder_0_lock] = {0x003C84, 3, 0},
506*53ee8cc1Swenshuai.xi [U_OTP_ena_KeyLadder_1_lock] = {0x003C84, 7, 4},
507*53ee8cc1Swenshuai.xi [U_OTP_ena_NSK2_lock] = {0x003C84, 11, 8},
508*53ee8cc1Swenshuai.xi [U_OTP_ena_CERT_IP_lock] = {0x003C84, 15, 12},
509*53ee8cc1Swenshuai.xi [U_OTP_ena_DMA_lock] = {0x003C84, 19, 16},
510*53ee8cc1Swenshuai.xi [U_OTP_ena_SCPU_lock] = {0x003C84, 23, 20},
511*53ee8cc1Swenshuai.xi [U_OTP_Dlock_Reserved0] = {0x003C84, 31, 24},
512*53ee8cc1Swenshuai.xi [U_OTP_ena_ACPU2KT_lock] = {0x003C88, 3, 0},
513*53ee8cc1Swenshuai.xi [U_OTP_ena_NSK2KT_lock] = {0x003C88, 7, 4},
514*53ee8cc1Swenshuai.xi [U_OTP_ena_KL2KT_lock] = {0x003C88, 11, 8},
515*53ee8cc1Swenshuai.xi [U_OTP_ena_SCPU2KT_lock] = {0x003C88, 15, 12},
516*53ee8cc1Swenshuai.xi [U_OTP_ena_ACPU2DMA_lock] = {0x003C88, 19, 16},
517*53ee8cc1Swenshuai.xi [U_OTP_ena_DMA_DESBasedCipher_lock] = {0x003C88, 23, 20},
518*53ee8cc1Swenshuai.xi [U_OTP_Dlock_Reserved1] = {0x003C88, 31, 24},
519*53ee8cc1Swenshuai.xi [U_OTP_ena_LSACPCM_lock] = {0x003C8C, 3, 0},
520*53ee8cc1Swenshuai.xi [U_OTP_ena_AESBasedCipher_lock] = {0x003C8C, 7, 4},
521*53ee8cc1Swenshuai.xi [U_OTP_ena_DESBasedCipher_lock] = {0x003C8C, 11, 8},
522*53ee8cc1Swenshuai.xi [U_OTP_ena_3DESBasedCipher_lock] = {0x003C8C, 15, 12},
523*53ee8cc1Swenshuai.xi [U_OTP_ena_Multi2BasedCipher_lock] = {0x003C8C, 19, 16},
524*53ee8cc1Swenshuai.xi [U_OTP_ena_DVBCSA2ConfCipher_lock] = {0x003C8C, 23, 20},
525*53ee8cc1Swenshuai.xi [U_OTP_ena_DVBCSA2Cipher_lock] = {0x003C8C, 27, 24},
526*53ee8cc1Swenshuai.xi [U_OTP_ena_DVBCSA3BasedCipher_lock] = {0x003C8C, 31, 28},
527*53ee8cc1Swenshuai.xi [U_OTP_dis_kl0_hostkey_lock] = {0x003C90, 3, 0},
528*53ee8cc1Swenshuai.xi [U_OTP_dis_kl1_hostkey_lock] = {0x003C90, 7, 4},
529*53ee8cc1Swenshuai.xi [U_OTP_NDSKeyValid_lock] = {0x003C90, 11, 8},
530*53ee8cc1Swenshuai.xi [U_OTP_RC_OPTION_lock] = {0x003C90, 15, 12},
531*53ee8cc1Swenshuai.xi [U_OTP_Dlock_Reserved2] = {0x003C90, 31, 16},
532*53ee8cc1Swenshuai.xi [U_OTP_Dlock_Reserved3] = {0x003C94, 31, 0},
533*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CA_reserved0_W] = {0x003C98, 1, 0},
534*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CA_reserved1_W] = {0x003C98, 3, 2},
535*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CA_reserved2_W] = {0x003C98, 5, 4},
536*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CA_reserved3_W] = {0x003C98, 7, 6},
537*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CA_reserved4_W] = {0x003C98, 9, 8},
538*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CA_reserved5_W] = {0x003C98, 11, 10},
539*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CA_reserved6_W] = {0x003C98, 13, 12},
540*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CA_reserved7_W] = {0x003C98, 15, 14},
541*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CA_reserved8_W] = {0x003C98, 17, 16},
542*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CA_reserved9_W] = {0x003C98, 19, 18},
543*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CA_reserved10_W] = {0x003C98, 21, 20},
544*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CA_reserved11_W] = {0x003C98, 23, 22},
545*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CA_reserved12_W] = {0x003C98, 25, 24},
546*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CA_reserved13_W] = {0x003C98, 27, 26},
547*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CA_reserved14_W] = {0x003C98, 29, 28},
548*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CA_reserved15_W] = {0x003C98, 31, 30},
549*53ee8cc1Swenshuai.xi [U_OTP_LockWord_RSA_0_W] = {0x003C9C, 1, 0},
550*53ee8cc1Swenshuai.xi [U_OTP_LockWord_RSA_1_W] = {0x003C9C, 3, 2},
551*53ee8cc1Swenshuai.xi [U_OTP_LockWord_RSA_CTRL_W] = {0x003C9C, 5, 4},
552*53ee8cc1Swenshuai.xi [U_OTP_LockWord_IXSC_Config_W] = {0x003C9C, 7, 6},
553*53ee8cc1Swenshuai.xi [U_OTP_LockWord_v_PubOtpOID_W] = {0x003C9C, 9, 8},
554*53ee8cc1Swenshuai.xi [U_OTP_LockWord_v_PubOtpVID_W] = {0x003C9C, 11, 10},
555*53ee8cc1Swenshuai.xi [U_OTP_LockWord_v_PubOtpBID_W] = {0x003C9C, 13, 12},
556*53ee8cc1Swenshuai.xi [U_OTP_LockWord_v_PubOtpRsaIndex_W] = {0x003C9C, 15, 14},
557*53ee8cc1Swenshuai.xi [U_OTP_LockWord_v_PubOtpMinConfVer_W] = {0x003C9C, 17, 16},
558*53ee8cc1Swenshuai.xi [U_OTP_LockWord_VenderConstSel_W] = {0x003C9C, 19, 18},
559*53ee8cc1Swenshuai.xi [U_OTP_LockWord_NDS_info_W] = {0x003C9C, 21, 20},
560*53ee8cc1Swenshuai.xi [U_OTP_LockWord_PM51_W] = {0x003C9C, 23, 22},
561*53ee8cc1Swenshuai.xi [U_OTP_LockWord_OTHERS_W] = {0x003C9C, 25, 24},
562*53ee8cc1Swenshuai.xi [U_OTP_LockWord_Reserved0] = {0x003C9C, 31, 26},
563*53ee8cc1Swenshuai.xi [U_OTP_LockWord_NOCS3_MEM0_W] = {0x003CA0, 1, 0},
564*53ee8cc1Swenshuai.xi [U_OTP_LockWord_NOCS3_MEM1_W] = {0x003CA0, 3, 2},
565*53ee8cc1Swenshuai.xi [U_OTP_LockWord_NOCS3_MEM2_W] = {0x003CA0, 5, 4},
566*53ee8cc1Swenshuai.xi [U_OTP_LockWord_NOCS3_MEM3_W] = {0x003CA0, 7, 6},
567*53ee8cc1Swenshuai.xi [U_OTP_LockWord_MSID_W] = {0x003CA0, 9, 8},
568*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CFG_STB_CA_SN_W] = {0x003CA0, 11, 10},
569*53ee8cc1Swenshuai.xi [U_OTP_LockWord_TSP_W] = {0x003CA0, 13, 12},
570*53ee8cc1Swenshuai.xi [U_OTP_LockWord_PGMask_W] = {0x003CA0, 15, 14},
571*53ee8cc1Swenshuai.xi [U_OTP_LockWord_ClkDet_Para_W] = {0x003CA0, 17, 16},
572*53ee8cc1Swenshuai.xi [U_OTP_LockWord_OTP_CTRL_W] = {0x003CA0, 19, 18},
573*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CPU_bank_W] = {0x003CA0, 21, 20},
574*53ee8cc1Swenshuai.xi [U_OTP_LockWord_trimming_W] = {0x003CA0, 23, 22},
575*53ee8cc1Swenshuai.xi [U_OTP_LockWord_BOND0_W] = {0x003CA0, 25, 24},
576*53ee8cc1Swenshuai.xi [U_OTP_LockWord_BOND_Reserved_W] = {0x003CA0, 27, 26},
577*53ee8cc1Swenshuai.xi [U_OTP_LockWord_Reserved1] = {0x003CA0, 31, 28},
578*53ee8cc1Swenshuai.xi [U_OTP_LockWord_LOT_INFO_W] = {0x003CA4, 1, 0},
579*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CA_Enable_W] = {0x003CA4, 3, 2},
580*53ee8cc1Swenshuai.xi [U_OTP_LockWord_KL_bank_W] = {0x003CA4, 5, 4},
581*53ee8cc1Swenshuai.xi [U_OTP_LockWord_KT_bank_W] = {0x003CA4, 7, 6},
582*53ee8cc1Swenshuai.xi [U_OTP_LockWord_DMA_bank_W] = {0x003CA4, 9, 8},
583*53ee8cc1Swenshuai.xi [U_OTP_LockWord_TSCE_W] = {0x003CA4, 11, 10},
584*53ee8cc1Swenshuai.xi [U_OTP_LockWord_HDCP_KEY_W] = {0x003CA4, 13, 12},
585*53ee8cc1Swenshuai.xi [U_OTP_LockWord_Multi2SysKey_W] = {0x003CA4, 15, 14},
586*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CAV_Key1_W] = {0x003CA4, 17, 16},
587*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CAV_Key2_W] = {0x003CA4, 19, 18},
588*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CAV_Key3_W] = {0x003CA4, 21, 20},
589*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CAV_Key4_W] = {0x003CA4, 23, 22},
590*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CAV_Key5_W] = {0x003CA4, 25, 24},
591*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CAV_Key6_W] = {0x003CA4, 27, 26},
592*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CAV_Key7_W] = {0x003CA4, 29, 28},
593*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CAV_Key8_W] = {0x003CA4, 31, 30},
594*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CAVID_W] = {0x003CA8, 1, 0},
595*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CAV_KP1_W] = {0x003CA8, 3, 2},
596*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CAV_KP2_W] = {0x003CA8, 5, 4},
597*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CAV_KP3_W] = {0x003CA8, 7, 6},
598*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CAV_KP4_W] = {0x003CA8, 9, 8},
599*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CAV_KP5_W] = {0x003CA8, 11, 10},
600*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CAV_KP6_W] = {0x003CA8, 13, 12},
601*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CAV_KP7_W] = {0x003CA8, 15, 14},
602*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CAV_KP8_W] = {0x003CA8, 17, 16},
603*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CAV_KP9_W] = {0x003CA8, 19, 18},
604*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CAV_KP10_W] = {0x003CA8, 21, 20},
605*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CAV_KP11_W] = {0x003CA8, 23, 22},
606*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CAV_KP12_W] = {0x003CA8, 25, 24},
607*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CAV_KP13_W] = {0x003CA8, 27, 26},
608*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CAV_KP14_W] = {0x003CA8, 29, 28},
609*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CAV_KP15_W] = {0x003CA8, 31, 30},
610*53ee8cc1Swenshuai.xi [U_OTP_LockWord_PubOTPUniqueID1_W] = {0x003CAC, 1, 0},
611*53ee8cc1Swenshuai.xi [U_OTP_LockWord_PubOTPUniqueID2_W] = {0x003CAC, 3, 2},
612*53ee8cc1Swenshuai.xi [U_OTP_LockWord_PubOTPUniqueID3_W] = {0x003CAC, 5, 4},
613*53ee8cc1Swenshuai.xi [U_OTP_LockWord_PubOTPUniqueID4_W] = {0x003CAC, 7, 6},
614*53ee8cc1Swenshuai.xi [U_OTP_LockWord_AES_MOD_MASK_W] = {0x003CAC, 9, 8},
615*53ee8cc1Swenshuai.xi [U_OTP_LockWord_ACPU_Property_W] = {0x003CAC, 11, 10},
616*53ee8cc1Swenshuai.xi [U_OTP_LockWord_SCPU_Property_W] = {0x003CAC, 13, 12},
617*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CA_PWD_W] = {0x003CAC, 15, 14},
618*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CA_PWD_CTRL_W] = {0x003CAC, 17, 16},
619*53ee8cc1Swenshuai.xi [U_OTP_LockWord_VtrackData_W] = {0x003CAC, 19, 18},
620*53ee8cc1Swenshuai.xi [U_OTP_LockWord_FAKE_W] = {0x003CAC, 21, 20},
621*53ee8cc1Swenshuai.xi [U_OTP_LockWord_SW0_W] = {0x003CAC, 23, 22},
622*53ee8cc1Swenshuai.xi [U_OTP_LockWord_Reserved2] = {0x003CAC, 31, 26},
623*53ee8cc1Swenshuai.xi [U_OTP_LockWord_0000_0511_W] = {0x003CB0, 1, 0},
624*53ee8cc1Swenshuai.xi [U_OTP_LockWord_0512_1023_W] = {0x003CB0, 3, 2},
625*53ee8cc1Swenshuai.xi [U_OTP_LockWord_1024_1535_W] = {0x003CB0, 5, 4},
626*53ee8cc1Swenshuai.xi [U_OTP_LockWord_1536_2047_W] = {0x003CB0, 7, 6},
627*53ee8cc1Swenshuai.xi [U_OTP_LockWord_2048_2559_W] = {0x003CB0, 9, 8},
628*53ee8cc1Swenshuai.xi [U_OTP_LockWord_2560_3071_W] = {0x003CB0, 11, 10},
629*53ee8cc1Swenshuai.xi [U_OTP_LockWord_3072_3391_W] = {0x003CB0, 13, 12},
630*53ee8cc1Swenshuai.xi [U_OTP_LockWord_Chip_Extension_ID] = {0x003CB0, 15, 14},
631*53ee8cc1Swenshuai.xi [U_OTP_LockWord_Reserved3] = {0x003CB0, 31, 16},
632*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CAV_Key1_R] = {0x003CB4, 1, 0},
633*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CAV_Key2_R] = {0x003CB4, 3, 2},
634*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CAV_Key3_R] = {0x003CB4, 5, 4},
635*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CAV_Key4_R] = {0x003CB4, 7, 6},
636*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CAV_Key5_R] = {0x003CB4, 9, 8},
637*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CAV_Key6_R] = {0x003CB4, 11, 10},
638*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CAV_Key7_R] = {0x003CB4, 13, 12},
639*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CAV_Key8_R] = {0x003CB4, 15, 14},
640*53ee8cc1Swenshuai.xi [U_OTP_LockWord_RSA_0_R] = {0x003CB4, 17, 16},
641*53ee8cc1Swenshuai.xi [U_OTP_LockWord_RSA_1_R] = {0x003CB4, 19, 18},
642*53ee8cc1Swenshuai.xi [U_OTP_LockWord_HDCP_KEY_R] = {0x003CB4, 21, 20},
643*53ee8cc1Swenshuai.xi [U_OTP_LockWord_Multi2SysKey_R] = {0x003CB4, 23, 22},
644*53ee8cc1Swenshuai.xi [U_OTP_LockWord_AES_MOD_MASK_R] = {0x003CB4, 25, 24},
645*53ee8cc1Swenshuai.xi [U_OTP_LockWord_VtrackData_R] = {0x003CB4, 27, 26},
646*53ee8cc1Swenshuai.xi [U_OTP_LockWord_CA_PWD_R] = {0x003CB4, 29, 28},
647*53ee8cc1Swenshuai.xi [U_OTP_LockWord_Reserved4] = {0x003CB4, 31, 30},
648*53ee8cc1Swenshuai.xi [U_OTP_ClkDet_Para] = {0x003CB8, 63, 0},
649*53ee8cc1Swenshuai.xi [U_OTP_forbid_ACPUWriteOTP] = {0x003CC0, 1, 0},
650*53ee8cc1Swenshuai.xi [U_OTP_forbid_ACPUReadOTP] = {0x003CC0, 3, 2},
651*53ee8cc1Swenshuai.xi [U_OTP_forbid_SCPUWriteOTP] = {0x003CC0, 5, 4},
652*53ee8cc1Swenshuai.xi [U_OTP_forbid_SCPUReadOTP] = {0x003CC0, 7, 6},
653*53ee8cc1Swenshuai.xi [U_OTP_forbid_DBBUSWriteOTP] = {0x003CC0, 9, 8},
654*53ee8cc1Swenshuai.xi [U_OTP_forbid_DBBUSReadOTP] = {0x003CC0, 11, 10},
655*53ee8cc1Swenshuai.xi [U_OTP_allow_RANDOM] = {0x003CC0, 13, 12},
656*53ee8cc1Swenshuai.xi [U_OTP_allow_NOISE_Rd] = {0x003CC0, 15, 14},
657*53ee8cc1Swenshuai.xi [U_OTP_allow_OTP_BgCRC] = {0x003CC0, 17, 16},
658*53ee8cc1Swenshuai.xi [U_OTP_allow_SKIP_0] = {0x003CC0, 19, 18},
659*53ee8cc1Swenshuai.xi [U_OTP_allow_SKIP_1] = {0x003CC0, 21, 20},
660*53ee8cc1Swenshuai.xi [U_OTP_allow_Mask_AES] = {0x003CC0, 23, 22},
661*53ee8cc1Swenshuai.xi [U_OTP_ena_Mstar_Wrapper] = {0x003CC0, 25, 24},
662*53ee8cc1Swenshuai.xi [U_OTP_CTRL_Reserved0] = {0x003CC0, 31, 26},
663*53ee8cc1Swenshuai.xi [U_OTP_allow_XOR_ROMCODE] = {0x003CC4, 6, 0},
664*53ee8cc1Swenshuai.xi [U_OTP_allow_XOR_FIX] = {0x003CC4, 7, 7},
665*53ee8cc1Swenshuai.xi [U_OTP_allow_PWD_OTP_prog] = {0x003CC4, 9, 8},
666*53ee8cc1Swenshuai.xi [U_OTP_CTRL_Reserved1] = {0x003CC4, 31, 10},
667*53ee8cc1Swenshuai.xi [U_OTP_SBoot] = {0x003CC8, 3, 0},
668*53ee8cc1Swenshuai.xi [U_OTP_SecretAreaEnable] = {0x003CC8, 7, 4},
669*53ee8cc1Swenshuai.xi [U_OTP_forbid_TestInOut] = {0x003CC8, 9, 8},
670*53ee8cc1Swenshuai.xi [U_OTP_allow_FlashProtect] = {0x003CC8, 11, 10},
671*53ee8cc1Swenshuai.xi [U_OTP_PERSO_done] = {0x003CC8, 13, 12},
672*53ee8cc1Swenshuai.xi [U_OTP_CERT_PERSO_done] = {0x003CC8, 15, 14},
673*53ee8cc1Swenshuai.xi [U_OTP_DBUG_Reserved0] = {0x003CC8, 31, 16},
674*53ee8cc1Swenshuai.xi [U_OTP_SCAN_MODE] = {0x003CCC, 8, 0},
675*53ee8cc1Swenshuai.xi [U_OTP_DBUG_Reserved1] = {0x003CCC, 9, 9},
676*53ee8cc1Swenshuai.xi [U_OTP_MBIST_MODE] = {0x003CCC, 15, 10},
677*53ee8cc1Swenshuai.xi [U_OTP_I2C_MODE] = {0x003CCC, 21, 16},
678*53ee8cc1Swenshuai.xi [U_OTP_DBUG_Reserved2] = {0x003CCC, 25, 22},
679*53ee8cc1Swenshuai.xi [U_OTP_EJTAG_MODE] = {0x003CCC, 31, 26},
680*53ee8cc1Swenshuai.xi [U_OTP_RMA_MODE] = {0x003CD0, 5, 0},
681*53ee8cc1Swenshuai.xi [U_OTP_LicRework] = {0x003CD0, 7, 6},
682*53ee8cc1Swenshuai.xi [U_OTP_forbid_USBSlaveMode] = {0x003CD0, 11, 8},
683*53ee8cc1Swenshuai.xi [U_OTP_allow_DRAM_MOBF] = {0x003CD0, 13, 12},
684*53ee8cc1Swenshuai.xi [U_OTP_allow_DRAMOBF_4ROUND] = {0x003CD0, 15, 14},
685*53ee8cc1Swenshuai.xi [U_OTP_ena_DRAMOBF_NS_MASK_ADDR] = {0x003CD0, 17, 16},
686*53ee8cc1Swenshuai.xi [U_OTP_forbid_clk_otp_sel] = {0x003CD0, 20, 18},
687*53ee8cc1Swenshuai.xi [U_OTP_forbid_acpu_access_sec_bridge] = {0x003CD0, 23, 21},
688*53ee8cc1Swenshuai.xi [U_OTP_forbid_dbbus_access_sec_bridge] = {0x003CD0, 26, 24},
689*53ee8cc1Swenshuai.xi [U_OTP_XPM_State] = {0x003CD0, 29, 27},
690*53ee8cc1Swenshuai.xi [U_OTP_DBUG_Reserved3] = {0x003CD0, 31, 30},
691*53ee8cc1Swenshuai.xi [U_OTP_DeactiveDRAMBoot] = {0x003CD4, 3, 0},
692*53ee8cc1Swenshuai.xi [U_OTP_ACPU_Reserved0] = {0x003CD4, 7, 4},
693*53ee8cc1Swenshuai.xi [U_OTP_BootMode] = {0x003CD4, 13, 8},
694*53ee8cc1Swenshuai.xi [U_OTP_forbid_BCKGND_CHK] = {0x003CD4, 15, 14},
695*53ee8cc1Swenshuai.xi [U_OTP_SCPUBootMode] = {0x003CD4, 21, 16},
696*53ee8cc1Swenshuai.xi [U_OTP_ACPU_Reserved1] = {0x003CD4, 23, 22},
697*53ee8cc1Swenshuai.xi [U_OTP_PM_MCU_RST_MOD] = {0x003CD4, 26, 24},
698*53ee8cc1Swenshuai.xi [U_OTP_boot_host_sel] = {0x003CD4, 29, 27},
699*53ee8cc1Swenshuai.xi [U_OTP_ACPU_Reserved2] = {0x003CD4, 31, 30},
700*53ee8cc1Swenshuai.xi [U_OTP_ACPU_Reserved3] = {0x003CD8, 11, 0},
701*53ee8cc1Swenshuai.xi [U_OTP_PostMskAreaRangeU] = {0x003CD8, 23, 12},
702*53ee8cc1Swenshuai.xi [U_OTP_ACPUasHost] = {0x003CD8, 26, 24},
703*53ee8cc1Swenshuai.xi [U_OTP_BONDING] = {0x003CD8, 28, 27},
704*53ee8cc1Swenshuai.xi [U_OTP_NON_BLANK] = {0x003CD8, 29, 29},
705*53ee8cc1Swenshuai.xi [U_OTP_ACPU_Reserved4] = {0x003CD8, 31, 30},
706*53ee8cc1Swenshuai.xi [U_OTP_PE_LOT_INFO] = {0x003CDC, 47, 0},
707*53ee8cc1Swenshuai.xi [U_OTP_BootDevice] = {0x003CDC, 55, 48},
708*53ee8cc1Swenshuai.xi [U_OTP_MAX_RDNTBLK] = {0x003CDC, 61, 56},
709*53ee8cc1Swenshuai.xi [U_OTP_forbid_STR] = {0x003CDC, 63, 62},
710*53ee8cc1Swenshuai.xi [U_OTP_Bootcode_project] = {0x003CE4, 7, 0},
711*53ee8cc1Swenshuai.xi [U_OTP_Bootcode_subversion] = {0x003CE4, 15, 8},
712*53ee8cc1Swenshuai.xi [U_OTP_Bootcode_version] = {0x003CE4, 31, 16},
713*53ee8cc1Swenshuai.xi [U_OTP_Analog_Usage] = {0x003CE8, 63, 0},
714*53ee8cc1Swenshuai.xi [U_OTP_Analog_Usage2] = {0x003CF0, 95, 0},
715*53ee8cc1Swenshuai.xi [U_OTP_trim_dac] = {0x003CFC, 125, 0},
716*53ee8cc1Swenshuai.xi [U_OTP_Trim_Reserved0] = {0x003CFC, 127, 126},
717*53ee8cc1Swenshuai.xi [U_OTP_BOND0] = {0x003D0C, 95, 0},
718*53ee8cc1Swenshuai.xi [U_OTP_BOND_Reserved] = {0x003D18, 95, 0},
719*53ee8cc1Swenshuai.xi [U_OTP_ena_KeyLadder_0] = {0x003D24, 3, 0},
720*53ee8cc1Swenshuai.xi [U_OTP_ena_KeyLadder_1] = {0x003D24, 7, 4},
721*53ee8cc1Swenshuai.xi [U_OTP_ena_NSK2] = {0x003D24, 11, 8},
722*53ee8cc1Swenshuai.xi [U_OTP_ena_CERT_IP] = {0x003D24, 13, 12},
723*53ee8cc1Swenshuai.xi [U_OTP_ena_DMA] = {0x003D24, 15, 14},
724*53ee8cc1Swenshuai.xi [U_OTP_ena_SCPU] = {0x003D24, 19, 16},
725*53ee8cc1Swenshuai.xi [U_OTP_CA_EN_Reserved0] = {0x003D24, 31, 20},
726*53ee8cc1Swenshuai.xi [U_OTP_allow_IXSC] = {0x003D28, 3, 0},
727*53ee8cc1Swenshuai.xi [U_OTP_forbid_IXSC] = {0x003D28, 7, 4},
728*53ee8cc1Swenshuai.xi [U_OTP_forbid_PAVOSC] = {0x003D28, 9, 8},
729*53ee8cc1Swenshuai.xi [U_OTP_cfDeactiveFuse] = {0x003D28, 10, 10},
730*53ee8cc1Swenshuai.xi [U_OTP_SOC_UID_SEL] = {0x003D28, 12, 11},
731*53ee8cc1Swenshuai.xi [U_OTP_CA_EN_Reserved2] = {0x003D28, 31, 13},
732*53ee8cc1Swenshuai.xi [U_OTP_dis_kl0_hostkey] = {0x003D2C, 1, 0},
733*53ee8cc1Swenshuai.xi [U_OTP_dis_kl1_hostkey] = {0x003D2C, 3, 2},
734*53ee8cc1Swenshuai.xi [U_OTP_dis_kl0_hostkey_property] = {0x003D2C, 5, 4},
735*53ee8cc1Swenshuai.xi [U_OTP_dis_kl1_hostkey_property] = {0x003D2C, 7, 6},
736*53ee8cc1Swenshuai.xi [U_OTP_kl_protect0_mode] = {0x003D2C, 9, 8},
737*53ee8cc1Swenshuai.xi [U_OTP_kl_protect1_mode] = {0x003D2C, 11, 10},
738*53ee8cc1Swenshuai.xi [U_OTP_kl_protect2_mode] = {0x003D2C, 13, 12},
739*53ee8cc1Swenshuai.xi [U_OTP_kl_protect3_mode] = {0x003D2C, 15, 14},
740*53ee8cc1Swenshuai.xi [U_OTP_dis_kl_protect0] = {0x003D2C, 17, 16},
741*53ee8cc1Swenshuai.xi [U_OTP_dis_kl_protect1] = {0x003D2C, 19, 18},
742*53ee8cc1Swenshuai.xi [U_OTP_dis_kl_protect2] = {0x003D2C, 21, 20},
743*53ee8cc1Swenshuai.xi [U_OTP_dis_kl_protect3] = {0x003D2C, 23, 22},
744*53ee8cc1Swenshuai.xi [U_OTP_dis_kl_protect4] = {0x003D2C, 25, 24},
745*53ee8cc1Swenshuai.xi [U_OTP_kl_TA_LUT0_mode] = {0x003D2C, 27, 26},
746*53ee8cc1Swenshuai.xi [U_OTP_kl_TA_LUT1_mode] = {0x003D2C, 29, 28},
747*53ee8cc1Swenshuai.xi [U_OTP_ena_kl_StopClkChk] = {0x003D2C, 31, 30},
748*53ee8cc1Swenshuai.xi [U_OTP_KDF_secret_mask] = {0x003D30, 127, 0},
749*53ee8cc1Swenshuai.xi [U_OTP_IMLB_ROTATION] = {0x003D40, 15, 0},
750*53ee8cc1Swenshuai.xi [U_OTP_IrdetoTweakedCSAv3] = {0x003D40, 17, 16},
751*53ee8cc1Swenshuai.xi [U_OTP_allow_SPSSPDKeyShuffle] = {0x003D40, 21, 18},
752*53ee8cc1Swenshuai.xi [U_OTP_kl_BISS_MODE] = {0x003D40, 23, 22},
753*53ee8cc1Swenshuai.xi [U_OTP_ena_kl_xor_func] = {0x003D40, 25, 24},
754*53ee8cc1Swenshuai.xi [U_OTP_KL_Reserved2] = {0x003D40, 31, 26},
755*53ee8cc1Swenshuai.xi [U_OTP_ena_ACPU2KT] = {0x003D44, 3, 0},
756*53ee8cc1Swenshuai.xi [U_OTP_ena_NSK2KT] = {0x003D44, 7, 4},
757*53ee8cc1Swenshuai.xi [U_OTP_ena_KL2KT] = {0x003D44, 11, 8},
758*53ee8cc1Swenshuai.xi [U_OTP_ena_SCPU2KT] = {0x003D44, 15, 12},
759*53ee8cc1Swenshuai.xi [U_OTP_ena_ACPUWrNSKKey2KT] = {0x003D44, 19, 16},
760*53ee8cc1Swenshuai.xi [U_OTP_ena_ACPUWrCFBKey2KT] = {0x003D44, 23, 20},
761*53ee8cc1Swenshuai.xi [U_OTP_ena_NSKCW2CryptoDMA] = {0x003D44, 27, 24},
762*53ee8cc1Swenshuai.xi [U_OTP_ena_ACPU2LSA] = {0x003D44, 31, 28},
763*53ee8cc1Swenshuai.xi [U_OTP_BISS_MODE] = {0x003D48, 3, 0},
764*53ee8cc1Swenshuai.xi [U_OTP_BISS_SUBMODE] = {0x003D48, 5, 4},
765*53ee8cc1Swenshuai.xi [U_OTP_KT_Reserved0] = {0x003D48, 31, 6},
766*53ee8cc1Swenshuai.xi [U_OTP_ena_ACPU2DMA] = {0x003D4C, 3, 0},
767*53ee8cc1Swenshuai.xi [U_OTP_ena_DMA_DESBasedCipher] = {0x003D4C, 7, 4},
768*53ee8cc1Swenshuai.xi [U_OTP_ena_AESMAC_MaxRate] = {0x003D4C, 9, 8},
769*53ee8cc1Swenshuai.xi [U_OTP_allow_DMAtDES2KeyEQChk] = {0x003D4C, 12, 10},
770*53ee8cc1Swenshuai.xi [U_OTP_DMA_Reserved0] = {0x003D4C, 13, 13},
771*53ee8cc1Swenshuai.xi [U_OTP_ena_DMA_ClearKeySlot ] = {0x003D4C, 15, 14},
772*53ee8cc1Swenshuai.xi [U_OTP_dis_DMA_mask_engine] = {0x003D4C, 17, 16},
773*53ee8cc1Swenshuai.xi [U_OTP_DMA_Reserved1] = {0x003D4C, 31, 18},
774*53ee8cc1Swenshuai.xi [U_OTP_ena_LSACPCM] = {0x003D50, 3, 0},
775*53ee8cc1Swenshuai.xi [U_OTP_ena_AESBasedCipher] = {0x003D50, 7, 4},
776*53ee8cc1Swenshuai.xi [U_OTP_ena_DESBasedCipher] = {0x003D50, 11, 8},
777*53ee8cc1Swenshuai.xi [U_OTP_ena_3DESBasedCipher] = {0x003D50, 15, 12},
778*53ee8cc1Swenshuai.xi [U_OTP_ena_Multi2BasedCipher] = {0x003D50, 19, 16},
779*53ee8cc1Swenshuai.xi [U_OTP_ena_DVBCSA2ConfCipher] = {0x003D50, 23, 20},
780*53ee8cc1Swenshuai.xi [U_OTP_ena_DVBCSA2Cipher] = {0x003D50, 27, 24},
781*53ee8cc1Swenshuai.xi [U_OTP_ena_DVBCSA3BasedCipher] = {0x003D50, 31, 28},
782*53ee8cc1Swenshuai.xi [U_OTP_Ch_SwitchComb] = {0x003D54, 63, 0},
783*53ee8cc1Swenshuai.xi [U_OTP_ena_LSAD_MDI] = {0x003D5C, 3, 0},
784*53ee8cc1Swenshuai.xi [U_OTP_ena_LSAD_MDD] = {0x003D5C, 7, 4},
785*53ee8cc1Swenshuai.xi [U_OTP_ena_LSAD_CIPLUS_AES] = {0x003D5C, 11, 8},
786*53ee8cc1Swenshuai.xi [U_OTP_ena_LSAD_AES_ECB_CLEAR] = {0x003D5C, 15, 12},
787*53ee8cc1Swenshuai.xi [U_OTP_ena_LSAD_SCTE41_SCTE52_DES] = {0x003D5C, 19, 16},
788*53ee8cc1Swenshuai.xi [U_OTP_TSCE_Reserved0] = {0x003D5C, 31, 20},
789*53ee8cc1Swenshuai.xi [U_OTP_ena_ESA_CIPLUS_AES] = {0x003D60, 3, 0},
790*53ee8cc1Swenshuai.xi [U_OTP_ena_ESA_CIPLUS_DES] = {0x003D60, 7, 4},
791*53ee8cc1Swenshuai.xi [U_OTP_ena_ESA_SCTE52_DES] = {0x003D60, 11, 8},
792*53ee8cc1Swenshuai.xi [U_OTP_ena_ESA_tDES_CBC_CLEAR] = {0x003D60, 15, 12},
793*53ee8cc1Swenshuai.xi [U_OTP_TSCE_Reserved1] = {0x003D60, 31, 16},
794*53ee8cc1Swenshuai.xi [U_OTP_ena_LSAS_MDI] = {0x003D64, 3, 0},
795*53ee8cc1Swenshuai.xi [U_OTP_ena_LSAS_MDD] = {0x003D64, 7, 4},
796*53ee8cc1Swenshuai.xi [U_OTP_ena_LSAS_CIPLUS_AES] = {0x003D64, 11, 8},
797*53ee8cc1Swenshuai.xi [U_OTP_ena_LSAS_AES_ECB_CLEAR] = {0x003D64, 15, 12},
798*53ee8cc1Swenshuai.xi [U_OTP_ena_LSAS_SCTE41_SCTE52_DES] = {0x003D64, 19, 16},
799*53ee8cc1Swenshuai.xi [U_OTP_TSCE_Reserved2] = {0x003D64, 31, 20},
800*53ee8cc1Swenshuai.xi [U_OTP_ena_DRMAreaEncrypt] = {0x003D68, 3, 0},
801*53ee8cc1Swenshuai.xi [U_OTP_ena_ReviewFailPkt] = {0x003D68, 7, 4},
802*53ee8cc1Swenshuai.xi [U_OTP_dis_NonSecRangeEncrypt] = {0x003D68, 11, 8},
803*53ee8cc1Swenshuai.xi [U_OTP_TSCE_Reserved3] = {0x003D68, 31, 12},
804*53ee8cc1Swenshuai.xi [U_OTP_ena_CA_PVR_secure_protect_0] = {0x003D6C, 3, 0},
805*53ee8cc1Swenshuai.xi [U_OTP_ena_CA_PVR_secure_protect_1] = {0x003D6C, 7, 4},
806*53ee8cc1Swenshuai.xi [U_OTP_ena_CA_PVR_secure_protect_2] = {0x003D6C, 11, 8},
807*53ee8cc1Swenshuai.xi [U_OTP_ena_CA_PVR_secure_protect_3] = {0x003D6C, 15, 12},
808*53ee8cc1Swenshuai.xi [U_OTP_ena_LowerPathRec] = {0x003D6C, 19, 16},
809*53ee8cc1Swenshuai.xi [U_OTP_ena_SWMulti2SysKey] = {0x003D6C, 23, 20},
810*53ee8cc1Swenshuai.xi [U_OTP_TSCE_Reserved4] = {0x003D6C, 31, 24},
811*53ee8cc1Swenshuai.xi [U_OTP_HDCP_KEY] = {0x003D70, 55, 0},
812*53ee8cc1Swenshuai.xi [U_OTP_HDCP_Reserved0] = {0x003D70, 7, 0},
813*53ee8cc1Swenshuai.xi [U_OTP_Multi2SysKey] = {0x003D78, 255, 0},
814*53ee8cc1Swenshuai.xi [U_OTP_AES_MOD_MASK] = {0x003D98, 127, 0},
815*53ee8cc1Swenshuai.xi [U_OTP_v_pubOtpUniqueID1] = {0x003DA8, 63, 0},
816*53ee8cc1Swenshuai.xi [U_OTP_v_pubOtpUniqueID2] = {0x003DB0, 63, 0},
817*53ee8cc1Swenshuai.xi [U_OTP_v_pubOtpUniqueID3] = {0x003DB8, 63, 0},
818*53ee8cc1Swenshuai.xi [U_OTP_v_pubOtpUniqueID4] = {0x003DC0, 63, 0},
819*53ee8cc1Swenshuai.xi [U_OTP_CAV_ESCK_KeyValid] = {0x003DC8, 7, 0},
820*53ee8cc1Swenshuai.xi [U_OTP_CAV_Reserved0] = {0x003DC8, 15, 8},
821*53ee8cc1Swenshuai.xi [U_OTP_CAV_SCK_KeyValid] = {0x003DC8, 31, 16},
822*53ee8cc1Swenshuai.xi [U_OTP_CAV_Reserved1] = {0x003DCC, 31, 0},
823*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key1_SCK_mapping] = {0x003DD0, 15, 0},
824*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key1_integrity_chk] = {0x003DD0, 17, 16},
825*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key1_allow_ChkNum] = {0x003DD0, 19, 18},
826*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key1_obfuscation] = {0x003DD0, 21, 20},
827*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key1_IdSel] = {0x003DD0, 23, 22},
828*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key1_KeySel] = {0x003DD0, 29, 24},
829*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key1_reserved] = {0x003DD0, 31, 30},
830*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key1_ChkNum_Gold] = {0x003DD4, 31, 0},
831*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key2_SCK_mapping] = {0x003DD8, 15, 0},
832*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key2_integrity_chk] = {0x003DD8, 17, 16},
833*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key2_allow_ChkNum] = {0x003DD8, 19, 18},
834*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key2_obfuscation] = {0x003DD8, 21, 20},
835*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key2_IdSel] = {0x003DD8, 23, 22},
836*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key2_KeySel] = {0x003DD8, 29, 24},
837*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key2_reserved] = {0x003DD8, 31, 30},
838*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key2_ChkNum_Gold] = {0x003DDC, 31, 0},
839*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key3_SCK_mapping] = {0x003DE0, 15, 0},
840*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key3_integrity_chk] = {0x003DE0, 17, 16},
841*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key3_allow_ChkNum] = {0x003DE0, 19, 18},
842*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key3_obfuscation] = {0x003DE0, 21, 20},
843*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key3_IdSel] = {0x003DE0, 23, 22},
844*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key3_KeySel] = {0x003DE0, 29, 24},
845*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key3_reserved] = {0x003DE0, 31, 30},
846*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key3_ChkNum_Gold] = {0x003DE4, 31, 0},
847*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key4_SCK_mapping] = {0x003DE8, 15, 0},
848*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key4_integrity_chk] = {0x003DE8, 17, 16},
849*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key4_allow_ChkNum] = {0x003DE8, 19, 18},
850*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key4_obfuscation] = {0x003DE8, 21, 20},
851*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key4_IdSel] = {0x003DE8, 23, 22},
852*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key4_KeySel] = {0x003DE8, 29, 24},
853*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key4_reserved] = {0x003DE8, 31, 30},
854*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key4_ChkNum_Gold] = {0x003DEC, 31, 0},
855*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key5_SCK_mapping] = {0x003DF0, 15, 0},
856*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key5_integrity_chk] = {0x003DF0, 17, 16},
857*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key5_allow_ChkNum] = {0x003DF0, 19, 18},
858*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key5_obfuscation] = {0x003DF0, 21, 20},
859*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key5_IdSel] = {0x003DF0, 23, 22},
860*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key5_KeySel] = {0x003DF0, 29, 24},
861*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key5_reserved] = {0x003DF0, 31, 30},
862*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key5_ChkNum_Gold] = {0x003DF4, 31, 0},
863*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key6_SCK_mapping] = {0x003DF8, 15, 0},
864*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key6_integrity_chk] = {0x003DF8, 17, 16},
865*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key6_allow_ChkNum] = {0x003DF8, 19, 18},
866*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key6_obfuscation] = {0x003DF8, 21, 20},
867*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key6_IdSel] = {0x003DF8, 23, 22},
868*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key6_KeySel] = {0x003DF8, 29, 24},
869*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key6_reserved] = {0x003DF8, 31, 30},
870*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key6_ChkNum_Gold] = {0x003DFC, 31, 0},
871*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key7_SCK_mapping] = {0x003E00, 15, 0},
872*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key7_integrity_chk] = {0x003E00, 17, 16},
873*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key7_allow_ChkNum] = {0x003E00, 19, 18},
874*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key7_obfuscation] = {0x003E00, 21, 20},
875*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key7_IdSel] = {0x003E00, 23, 22},
876*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key7_KeySel] = {0x003E00, 29, 24},
877*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key7_reserved] = {0x003E00, 31, 30},
878*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key7_ChkNum_Gold] = {0x003E04, 31, 0},
879*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key8_SCK_mapping] = {0x003E08, 15, 0},
880*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key8_integrity_chk] = {0x003E08, 17, 16},
881*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key8_allow_ChkNum] = {0x003E08, 19, 18},
882*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key8_obfuscation] = {0x003E08, 21, 20},
883*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key8_IdSel] = {0x003E08, 23, 22},
884*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key8_KeySel] = {0x003E08, 29, 24},
885*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key8_reserved] = {0x003E08, 31, 30},
886*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key8_ChkNum_Gold] = {0x003E0C, 31, 0},
887*53ee8cc1Swenshuai.xi [U_OTP_ACPU_Property] = {0x003E10, 127, 0},
888*53ee8cc1Swenshuai.xi [U_OTP_SCPU_Property] = {0x003E20, 127, 0},
889*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key1_Property] = {0x003E30, 127, 0},
890*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key2_Property] = {0x003E40, 127, 0},
891*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key3_Property] = {0x003E50, 127, 0},
892*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key4_Property] = {0x003E60, 127, 0},
893*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key5_Property] = {0x003E70, 127, 0},
894*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key6_Property] = {0x003E80, 127, 0},
895*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key7_Property] = {0x003E90, 127, 0},
896*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key8_Property] = {0x003EA0, 127, 0},
897*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key9_Property] = {0x003EB0, 127, 0},
898*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key10_Property] = {0x003EC0, 127, 0},
899*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key11_Property] = {0x003ED0, 127, 0},
900*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key12_Property] = {0x003EE0, 127, 0},
901*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key13_Property] = {0x003EF0, 127, 0},
902*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key14_Property] = {0x003F00, 127, 0},
903*53ee8cc1Swenshuai.xi [U_OTP_CAV_Key15_Property] = {0x003F10, 127, 0},
904*53ee8cc1Swenshuai.xi [U_OTP_CAV_SecretKey1] = {0x003F20, 127, 0},
905*53ee8cc1Swenshuai.xi [U_OTP_CAV_SecretKey2] = {0x003F30, 127, 0},
906*53ee8cc1Swenshuai.xi [U_OTP_CAV_SecretKey3] = {0x003F40, 127, 0},
907*53ee8cc1Swenshuai.xi [U_OTP_CAV_SecretKey4] = {0x003F50, 127, 0},
908*53ee8cc1Swenshuai.xi [U_OTP_CAV_SecretKey5] = {0x003F60, 127, 0},
909*53ee8cc1Swenshuai.xi [U_OTP_CAV_SecretKey6] = {0x003F70, 127, 0},
910*53ee8cc1Swenshuai.xi [U_OTP_CAV_SecretKey7] = {0x003F80, 127, 0},
911*53ee8cc1Swenshuai.xi [U_OTP_CAV_SecretKey8] = {0x003F90, 127, 0},
912*53ee8cc1Swenshuai.xi [U_OTP_CA_PWD_integrity_chk] = {0x003FA0, 1, 0},
913*53ee8cc1Swenshuai.xi [U_OTP_Multi2SysKey_integrity_chk] = {0x003FA0, 3, 2},
914*53ee8cc1Swenshuai.xi [U_OTP_CA_PWD_Reserved0] = {0x003FA0, 7, 4},
915*53ee8cc1Swenshuai.xi [U_OTP_I2C_PWD_obfuscation] = {0x003FA0, 9, 8},
916*53ee8cc1Swenshuai.xi [U_OTP_EJTAG_PWD_obfuscation] = {0x003FA0, 11, 10},
917*53ee8cc1Swenshuai.xi [U_OTP_SCAN_PWD_obfuscation] = {0x003FA0, 13, 12},
918*53ee8cc1Swenshuai.xi [U_OTP_MBIST_PWD_obfuscation] = {0x003FA0, 15, 14},
919*53ee8cc1Swenshuai.xi [U_OTP_Multi2SysKey_CRC] = {0x003FA0, 31, 16},
920*53ee8cc1Swenshuai.xi [U_OTP_I2C_PWD_CRC] = {0x003FA4, 15, 0},
921*53ee8cc1Swenshuai.xi [U_OTP_EJTAG_PWD_CRC] = {0x003FA4, 31, 16},
922*53ee8cc1Swenshuai.xi [U_OTP_SCAN_PWD_CRC] = {0x003FA8, 15, 0},
923*53ee8cc1Swenshuai.xi [U_OTP_MBIST_PWD_CRC] = {0x003FA8, 31, 16},
924*53ee8cc1Swenshuai.xi [U_OTP_CA_PWD_Keysel] = {0x003FAC, 5, 0},
925*53ee8cc1Swenshuai.xi [U_OTP_ena_TP_PWD] = {0x003FAC, 7, 6},
926*53ee8cc1Swenshuai.xi [U_OTP_ena_KDF_I2C_PWD] = {0x003FAC, 9, 8},
927*53ee8cc1Swenshuai.xi [U_OTP_ena_KDF_EJTAG_PWD] = {0x003FAC, 11, 10},
928*53ee8cc1Swenshuai.xi [U_OTP_ena_KDF_SCAN_PWD] = {0x003FAC, 13, 12},
929*53ee8cc1Swenshuai.xi [U_OTP_ena_KDF_MBIST_PWD] = {0x003FAC, 15, 14},
930*53ee8cc1Swenshuai.xi [U_OTP_I2C_TP_ID] = {0x003FAC, 19, 16},
931*53ee8cc1Swenshuai.xi [U_OTP_EJTAG_TP_ID] = {0x003FAC, 23, 20},
932*53ee8cc1Swenshuai.xi [U_OTP_SCAN_TP_ID] = {0x003FAC, 27, 24},
933*53ee8cc1Swenshuai.xi [U_OTP_MBIST_TP_ID] = {0x003FAC, 31, 28},
934*53ee8cc1Swenshuai.xi [U_OTP_I2C_PWD] = {0x003FB0, 127, 0},
935*53ee8cc1Swenshuai.xi [U_OTP_EJTAG_PWD] = {0x003FC0, 127, 0},
936*53ee8cc1Swenshuai.xi [U_OTP_SCAN_PWD] = {0x003FD0, 127, 0},
937*53ee8cc1Swenshuai.xi [U_OTP_MBIST_PWD] = {0x003FE0, 127, 0},
938*53ee8cc1Swenshuai.xi [U_OTP_VtrackID] = {0x003FF0, 31, 0},
939*53ee8cc1Swenshuai.xi [U_OTP_VtrackKey] = {0x003FF4, 31, 0},
940*53ee8cc1Swenshuai.xi [U_OTP_VtrackID_select] = {0x003FF8, 0, 0},
941*53ee8cc1Swenshuai.xi [U_OTP_VtrackKey_select] = {0x003FF8, 1, 1},
942*53ee8cc1Swenshuai.xi [U_OTP_Vtrack_Reserved0] = {0x003FF8, 31, 2},
943*53ee8cc1Swenshuai.xi [U_OTP_FAKE] = {0x003FFC, 23, 0},
944*53ee8cc1Swenshuai.xi [U_OTP_allow_CPU_rst_release] = {0x003FFC, 31, 24},
945*53ee8cc1Swenshuai.xi [U_OTP_REGION31] = {0x007E00,1023,0}
946*53ee8cc1Swenshuai.xi
947*53ee8cc1Swenshuai.xi };
948*53ee8cc1Swenshuai.xi
949*53ee8cc1Swenshuai.xi
950*53ee8cc1Swenshuai.xi MS_BOOL _HAL_CA_OTP_GetConfig(MS_U32 u32Idx, MS_U32 *pu32Value);
951*53ee8cc1Swenshuai.xi MS_BOOL _HAL_CA_OTP_SetConfig(MS_U32 u32Idx, MS_U32 u32Value);
952*53ee8cc1Swenshuai.xi
953*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
954*53ee8cc1Swenshuai.xi // Macro of bit operations
955*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
956*53ee8cc1Swenshuai.xi
957*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
958*53ee8cc1Swenshuai.xi // Inline Function
959*53ee8cc1Swenshuai.xi //--------------------------------------------------------------------------------------------------
HAL_CA_SetBank(MS_U32 u32RegAddr)960*53ee8cc1Swenshuai.xi void HAL_CA_SetBank(MS_U32 u32RegAddr)
961*53ee8cc1Swenshuai.xi {
962*53ee8cc1Swenshuai.xi _u32REGBase = u32RegAddr;
963*53ee8cc1Swenshuai.xi _u32REGPMBase = u32RegAddr - 0x200000UL;
964*53ee8cc1Swenshuai.xi _u32REG_OTP_Base = u32RegAddr + REG_OTP_BASE;
965*53ee8cc1Swenshuai.xi _u32REG_RSA_Base = u32RegAddr + REG_RSA_BASE;
966*53ee8cc1Swenshuai.xi }
967*53ee8cc1Swenshuai.xi
HAL_CA_Init(void)968*53ee8cc1Swenshuai.xi MS_BOOL HAL_CA_Init(void)
969*53ee8cc1Swenshuai.xi {
970*53ee8cc1Swenshuai.xi return TRUE;
971*53ee8cc1Swenshuai.xi }
972*53ee8cc1Swenshuai.xi
HAL_CA_BGC_ISR(void)973*53ee8cc1Swenshuai.xi void HAL_CA_BGC_ISR(void)
974*53ee8cc1Swenshuai.xi {
975*53ee8cc1Swenshuai.xi MS_U32 u32Excp = REG32(BGC_RESP_FAIL);
976*53ee8cc1Swenshuai.xi // MS_U32 u32SecID = u32Excp & BGC_RESP_SECID;
977*53ee8cc1Swenshuai.xi
978*53ee8cc1Swenshuai.xi if((u32Excp & BGC_RESP_RESET_AV) == BGC_RESP_RESET_AV)
979*53ee8cc1Swenshuai.xi {
980*53ee8cc1Swenshuai.xi //AV reset
981*53ee8cc1Swenshuai.xi HAL_CA_DEBUG("BGC: unexpected modification of protected area detected. Reset AV.");
982*53ee8cc1Swenshuai.xi }
983*53ee8cc1Swenshuai.xi
984*53ee8cc1Swenshuai.xi if((u32Excp & BGC_RESP_RESET_ACPU) == BGC_RESP_RESET_ACPU)
985*53ee8cc1Swenshuai.xi {
986*53ee8cc1Swenshuai.xi //ACPU reset
987*53ee8cc1Swenshuai.xi HAL_CA_DEBUG("BGC: unexpected modification of protected area detected. Reset ACPU.");
988*53ee8cc1Swenshuai.xi }
989*53ee8cc1Swenshuai.xi
990*53ee8cc1Swenshuai.xi if((u32Excp & BGC_RESP_RESET_SCPU) == BGC_RESP_RESET_SCPU)
991*53ee8cc1Swenshuai.xi {
992*53ee8cc1Swenshuai.xi //SCPU reset
993*53ee8cc1Swenshuai.xi HAL_CA_DEBUG("BGC: unexpected modification of protected area detected. Reset SCPU.");
994*53ee8cc1Swenshuai.xi }
995*53ee8cc1Swenshuai.xi
996*53ee8cc1Swenshuai.xi if((u32Excp & BGC_RESP_RESET_SYSTEM) == BGC_RESP_RESET_SYSTEM)
997*53ee8cc1Swenshuai.xi {
998*53ee8cc1Swenshuai.xi //If error is reset system, run reset system(only in keres)
999*53ee8cc1Swenshuai.xi //System reset
1000*53ee8cc1Swenshuai.xi HAL_CA_DEBUG("BGC: unexpected modification of protected area detected. Reset system.");
1001*53ee8cc1Swenshuai.xi // REG32_PM(REG_TOP_SW_RST) = ((REG32_PM(REG_TOP_SW_RST) & ~REG_TOP_SW_RST_MSK) | REG_TOP_SW_RST_PASSWD);
1002*53ee8cc1Swenshuai.xi }
1003*53ee8cc1Swenshuai.xi
1004*53ee8cc1Swenshuai.xi
1005*53ee8cc1Swenshuai.xi }
1006*53ee8cc1Swenshuai.xi
HAL_CA_BGC_DisableINT(void)1007*53ee8cc1Swenshuai.xi void HAL_CA_BGC_DisableINT(void)
1008*53ee8cc1Swenshuai.xi {
1009*53ee8cc1Swenshuai.xi REG32(REG_INTR_CPUINIT_HST3) = REG32(REG_INTR_CPUINIT_HST3) & (~REG_HST3TO2_INT);
1010*53ee8cc1Swenshuai.xi }
1011*53ee8cc1Swenshuai.xi
HAL_CA_BGC_LoadFW(MS_U32 u32FwAddr,MS_U32 u32FwSize)1012*53ee8cc1Swenshuai.xi MS_BOOL HAL_CA_BGC_LoadFW(MS_U32 u32FwAddr, MS_U32 u32FwSize)
1013*53ee8cc1Swenshuai.xi {
1014*53ee8cc1Swenshuai.xi if(u32FwSize > 0x2000)
1015*53ee8cc1Swenshuai.xi { //max size is 8K
1016*53ee8cc1Swenshuai.xi return FALSE;
1017*53ee8cc1Swenshuai.xi }
1018*53ee8cc1Swenshuai.xi
1019*53ee8cc1Swenshuai.xi if((REG32(REG_ONEWAY_42) & SEC51_SW_RST) == 0x0)//bit0, reset sec51
1020*53ee8cc1Swenshuai.xi {
1021*53ee8cc1Swenshuai.xi return TRUE;//already enable sec51
1022*53ee8cc1Swenshuai.xi }
1023*53ee8cc1Swenshuai.xi
1024*53ee8cc1Swenshuai.xi REG32(REG_BDMA_STATUS) = REG32(REG_BDMA_STATUS) | 0x10; // triger bdma
1025*53ee8cc1Swenshuai.xi REG32(REG_BDMA_CTRL) = 0x0; //disable
1026*53ee8cc1Swenshuai.xi REG32(REG_BDMA_SRC_SEL) = 0x0940; //MIU0 to Sec_51
1027*53ee8cc1Swenshuai.xi REG32(REG_BDMA_SRC_ADDR_L) = u32FwAddr & 0xFFFF;
1028*53ee8cc1Swenshuai.xi REG32(REG_BDMA_SRC_ADDR_H) = (u32FwAddr >> 16) & 0xFFFF;
1029*53ee8cc1Swenshuai.xi REG32(REG_BDMA_DST_ADDR_L) = 0x0;
1030*53ee8cc1Swenshuai.xi REG32(REG_BDMA_DST_ADDR_H) = 0x0;
1031*53ee8cc1Swenshuai.xi REG32(REG_BDMA_SIZE_L) = u32FwSize & 0xFFFF; //size
1032*53ee8cc1Swenshuai.xi REG32(REG_BDMA_SIZE_H) = 0x0;
1033*53ee8cc1Swenshuai.xi REG32(REG_BDMA_CTRL) = 0x1; // triger bdma
1034*53ee8cc1Swenshuai.xi while((REG32(REG_BDMA_CTRL) & 0x1) != 0); //wait bdma done
1035*53ee8cc1Swenshuai.xi
1036*53ee8cc1Swenshuai.xi REG32(REG_BDMA_STATUS) = REG32(REG_BDMA_STATUS) | 0x10; // triger bdma
1037*53ee8cc1Swenshuai.xi
1038*53ee8cc1Swenshuai.xi REG32(REG_ONEWAY_42) = REG32(REG_ONEWAY_42) & (~SEC51_SW_RST);//bit 0, release sec51
1039*53ee8cc1Swenshuai.xi
1040*53ee8cc1Swenshuai.xi REG32(REG_ONEWAY_52) = REG32(REG_ONEWAY_52) | SEC51_SW_LOCK;//bit 0, oneway lock sec51
1041*53ee8cc1Swenshuai.xi
1042*53ee8cc1Swenshuai.xi //enable MIU cross bar
1043*53ee8cc1Swenshuai.xi REG32(REG_MIU_CROSSBAR_CTRL) = REG32(REG_MIU_CROSSBAR_CTRL) | REG_MIU_CROSSBAR_EN;
1044*53ee8cc1Swenshuai.xi return TRUE;
1045*53ee8cc1Swenshuai.xi }
1046*53ee8cc1Swenshuai.xi
HAL_CA_BGC_Ctrl(MS_U32 u32Cmd,MS_U32 u32Data)1047*53ee8cc1Swenshuai.xi MS_BOOL HAL_CA_BGC_Ctrl(MS_U32 u32Cmd, MS_U32 u32Data)
1048*53ee8cc1Swenshuai.xi {
1049*53ee8cc1Swenshuai.xi MS_U16 u16Cmd = ((u32Data << BGC_CMD_SEC_DATA_SHT) & BGC_CMD_SEC_DATA) |
1050*53ee8cc1Swenshuai.xi ((u32Cmd << BGC_CMD_SEC_TYPE_SHT) & BGC_CMD_SEC_TYPE);
1051*53ee8cc1Swenshuai.xi
1052*53ee8cc1Swenshuai.xi while((REG32(BGC_CMD_CTRL) & BGC_CMD_SEC_GO) == BGC_CMD_SEC_GO);
1053*53ee8cc1Swenshuai.xi
1054*53ee8cc1Swenshuai.xi REG32(BGC_CMD_CTRL) = u16Cmd;
1055*53ee8cc1Swenshuai.xi REG32(BGC_CMD_CTRL) = u16Cmd | BGC_CMD_SEC_GO;
1056*53ee8cc1Swenshuai.xi // printf("[BGC Cmd]:%04X\n", u16Cmd);
1057*53ee8cc1Swenshuai.xi
1058*53ee8cc1Swenshuai.xi while((REG32(BGC_CMD_CTRL) & BGC_CMD_SEC_GO) == BGC_CMD_SEC_GO);
1059*53ee8cc1Swenshuai.xi // printf("[BGC Cmd]:after write:%04X\n", REG32(BGC_CMD_CTRL));
1060*53ee8cc1Swenshuai.xi
1061*53ee8cc1Swenshuai.xi if((REG32(BGC_CMD_CTRL) & BGC_CMD_SEC_STATUS) == BGC_CMD_SEC_STATUS)
1062*53ee8cc1Swenshuai.xi {
1063*53ee8cc1Swenshuai.xi return FALSE;
1064*53ee8cc1Swenshuai.xi }
1065*53ee8cc1Swenshuai.xi return TRUE;
1066*53ee8cc1Swenshuai.xi }
1067*53ee8cc1Swenshuai.xi
HAL_CA_BGC_SetSec(MS_U32 u32SecId,const CA_BGC_SEC_CFG * pstSecCfg)1068*53ee8cc1Swenshuai.xi MS_BOOL HAL_CA_BGC_SetSec(MS_U32 u32SecId, const CA_BGC_SEC_CFG* pstSecCfg)
1069*53ee8cc1Swenshuai.xi {
1070*53ee8cc1Swenshuai.xi MS_U32 i = 0;
1071*53ee8cc1Swenshuai.xi MS_U32 u32Fail = 0;
1072*53ee8cc1Swenshuai.xi
1073*53ee8cc1Swenshuai.xi if(u32SecId >= BGC_SEC_MAX )
1074*53ee8cc1Swenshuai.xi {
1075*53ee8cc1Swenshuai.xi return FALSE;
1076*53ee8cc1Swenshuai.xi }
1077*53ee8cc1Swenshuai.xi
1078*53ee8cc1Swenshuai.xi //set section id
1079*53ee8cc1Swenshuai.xi if(HAL_CA_BGC_Ctrl(BGC_CMD_TYPE_SECID, u32SecId) == FALSE)
1080*53ee8cc1Swenshuai.xi {
1081*53ee8cc1Swenshuai.xi u32Fail = 1;
1082*53ee8cc1Swenshuai.xi goto BGC_CONFIG_FAIL;
1083*53ee8cc1Swenshuai.xi }
1084*53ee8cc1Swenshuai.xi
1085*53ee8cc1Swenshuai.xi //set BGC mode
1086*53ee8cc1Swenshuai.xi if(HAL_CA_BGC_Ctrl(BGC_CMD_TYPE_MODE, pstSecCfg->u32BGCMode == 1 ? BGC_SEC_MODE_STATIC : BGC_SEC_MODE_DYNAMIC) == FALSE)
1087*53ee8cc1Swenshuai.xi {
1088*53ee8cc1Swenshuai.xi u32Fail = 2;
1089*53ee8cc1Swenshuai.xi goto BGC_CONFIG_FAIL;
1090*53ee8cc1Swenshuai.xi }
1091*53ee8cc1Swenshuai.xi
1092*53ee8cc1Swenshuai.xi //set protect address and input cmd length
1093*53ee8cc1Swenshuai.xi if(HAL_CA_BGC_Ctrl(BGC_CMD_TYPE_LENGTH, 0x4) == FALSE)
1094*53ee8cc1Swenshuai.xi {
1095*53ee8cc1Swenshuai.xi u32Fail = 3;
1096*53ee8cc1Swenshuai.xi goto BGC_CONFIG_FAIL;
1097*53ee8cc1Swenshuai.xi }
1098*53ee8cc1Swenshuai.xi
1099*53ee8cc1Swenshuai.xi if((HAL_CA_BGC_Ctrl(BGC_CMD_TYPE_ADDR, (pstSecCfg->u32ProtectAddr & 0x000000FF)>>0) == FALSE) |
1100*53ee8cc1Swenshuai.xi (HAL_CA_BGC_Ctrl(BGC_CMD_TYPE_ADDR, (pstSecCfg->u32ProtectAddr & 0x0000FF00)>>8) == FALSE) |
1101*53ee8cc1Swenshuai.xi (HAL_CA_BGC_Ctrl(BGC_CMD_TYPE_ADDR, (pstSecCfg->u32ProtectAddr & 0x00FF0000)>>16) == FALSE) |
1102*53ee8cc1Swenshuai.xi (HAL_CA_BGC_Ctrl(BGC_CMD_TYPE_ADDR, (pstSecCfg->u32ProtectAddr & 0xFF000000)>>24) == FALSE))
1103*53ee8cc1Swenshuai.xi {
1104*53ee8cc1Swenshuai.xi u32Fail = 4;
1105*53ee8cc1Swenshuai.xi goto BGC_CONFIG_FAIL;
1106*53ee8cc1Swenshuai.xi }
1107*53ee8cc1Swenshuai.xi
1108*53ee8cc1Swenshuai.xi //set protect size and input cmd length
1109*53ee8cc1Swenshuai.xi if(HAL_CA_BGC_Ctrl(BGC_CMD_TYPE_LENGTH, 0x4) == FALSE)
1110*53ee8cc1Swenshuai.xi {
1111*53ee8cc1Swenshuai.xi u32Fail = 5;
1112*53ee8cc1Swenshuai.xi goto BGC_CONFIG_FAIL;
1113*53ee8cc1Swenshuai.xi }
1114*53ee8cc1Swenshuai.xi if((HAL_CA_BGC_Ctrl(BGC_CMD_TYPE_SIZE, (pstSecCfg->u32ProtectSize & 0x000000FF)>>0) == FALSE) |
1115*53ee8cc1Swenshuai.xi (HAL_CA_BGC_Ctrl(BGC_CMD_TYPE_SIZE, (pstSecCfg->u32ProtectSize & 0x0000FF00)>>8) == FALSE) |
1116*53ee8cc1Swenshuai.xi (HAL_CA_BGC_Ctrl(BGC_CMD_TYPE_SIZE, (pstSecCfg->u32ProtectSize & 0x00FF0000)>>16) == FALSE) |
1117*53ee8cc1Swenshuai.xi (HAL_CA_BGC_Ctrl(BGC_CMD_TYPE_SIZE, (pstSecCfg->u32ProtectSize & 0xFF000000)>>24) == FALSE))
1118*53ee8cc1Swenshuai.xi {
1119*53ee8cc1Swenshuai.xi u32Fail = 6;
1120*53ee8cc1Swenshuai.xi goto BGC_CONFIG_FAIL;
1121*53ee8cc1Swenshuai.xi }
1122*53ee8cc1Swenshuai.xi
1123*53ee8cc1Swenshuai.xi //set interval bwteen two BGC check and input cmd length
1124*53ee8cc1Swenshuai.xi if(HAL_CA_BGC_Ctrl(BGC_CMD_TYPE_LENGTH, 0x2) == FALSE)
1125*53ee8cc1Swenshuai.xi {
1126*53ee8cc1Swenshuai.xi u32Fail = 7;
1127*53ee8cc1Swenshuai.xi goto BGC_CONFIG_FAIL;
1128*53ee8cc1Swenshuai.xi }
1129*53ee8cc1Swenshuai.xi if((HAL_CA_BGC_Ctrl(BGC_CMD_TYPE_INTERVAL, (pstSecCfg->u16Interval & 0x00FF)>>0) == FALSE) |
1130*53ee8cc1Swenshuai.xi (HAL_CA_BGC_Ctrl(BGC_CMD_TYPE_INTERVAL, (pstSecCfg->u16Interval & 0xFF00)>>8) == FALSE))
1131*53ee8cc1Swenshuai.xi {
1132*53ee8cc1Swenshuai.xi u32Fail = 8;
1133*53ee8cc1Swenshuai.xi goto BGC_CONFIG_FAIL;
1134*53ee8cc1Swenshuai.xi }
1135*53ee8cc1Swenshuai.xi
1136*53ee8cc1Swenshuai.xi
1137*53ee8cc1Swenshuai.xi //set golden and incput golden length
1138*53ee8cc1Swenshuai.xi if(HAL_CA_BGC_Ctrl(BGC_CMD_TYPE_LENGTH, 0x20) == FALSE)
1139*53ee8cc1Swenshuai.xi {
1140*53ee8cc1Swenshuai.xi u32Fail = 9;
1141*53ee8cc1Swenshuai.xi goto BGC_CONFIG_FAIL;
1142*53ee8cc1Swenshuai.xi }
1143*53ee8cc1Swenshuai.xi
1144*53ee8cc1Swenshuai.xi for(i = 0 ; i < 0x20 ; i ++)
1145*53ee8cc1Swenshuai.xi {
1146*53ee8cc1Swenshuai.xi if(HAL_CA_BGC_Ctrl(BGC_CMD_TYPE_GOLDEN, pstSecCfg->u8Golden[i]) == FALSE)
1147*53ee8cc1Swenshuai.xi {
1148*53ee8cc1Swenshuai.xi u32Fail = 10;
1149*53ee8cc1Swenshuai.xi goto BGC_CONFIG_FAIL;
1150*53ee8cc1Swenshuai.xi }
1151*53ee8cc1Swenshuai.xi }
1152*53ee8cc1Swenshuai.xi
1153*53ee8cc1Swenshuai.xi //set password and incput length
1154*53ee8cc1Swenshuai.xi if(HAL_CA_BGC_Ctrl(BGC_CMD_TYPE_LENGTH, 0x4) == FALSE)
1155*53ee8cc1Swenshuai.xi {
1156*53ee8cc1Swenshuai.xi u32Fail = 11;
1157*53ee8cc1Swenshuai.xi goto BGC_CONFIG_FAIL;
1158*53ee8cc1Swenshuai.xi }
1159*53ee8cc1Swenshuai.xi
1160*53ee8cc1Swenshuai.xi for(i = 0 ; i < 0x4 ; i ++)
1161*53ee8cc1Swenshuai.xi {
1162*53ee8cc1Swenshuai.xi if(HAL_CA_BGC_Ctrl(BGC_CMD_TYPE_SET_PASSWD, pstSecCfg->u8ResetPassword[i]) == FALSE)
1163*53ee8cc1Swenshuai.xi {
1164*53ee8cc1Swenshuai.xi u32Fail = 12;
1165*53ee8cc1Swenshuai.xi goto BGC_CONFIG_FAIL;
1166*53ee8cc1Swenshuai.xi }
1167*53ee8cc1Swenshuai.xi }
1168*53ee8cc1Swenshuai.xi
1169*53ee8cc1Swenshuai.xi //set algorithm to sha256
1170*53ee8cc1Swenshuai.xi if(HAL_CA_BGC_Ctrl(BGC_CMD_TYPE_ALGO, BGC_SEC_ALGO_SHA256) == FALSE)
1171*53ee8cc1Swenshuai.xi {
1172*53ee8cc1Swenshuai.xi u32Fail = 13;
1173*53ee8cc1Swenshuai.xi goto BGC_CONFIG_FAIL;
1174*53ee8cc1Swenshuai.xi }
1175*53ee8cc1Swenshuai.xi
1176*53ee8cc1Swenshuai.xi //set the reset mode if BGC check fail
1177*53ee8cc1Swenshuai.xi if(HAL_CA_BGC_Ctrl(BGC_CMD_TYPE_RESET_MODE, BGC_SEC_RESET_INTERRUPT | BGC_SEC_RESET_SYSTEM) == FALSE)
1178*53ee8cc1Swenshuai.xi {
1179*53ee8cc1Swenshuai.xi u32Fail = 14;
1180*53ee8cc1Swenshuai.xi goto BGC_CONFIG_FAIL;
1181*53ee8cc1Swenshuai.xi }
1182*53ee8cc1Swenshuai.xi
1183*53ee8cc1Swenshuai.xi //enable section id
1184*53ee8cc1Swenshuai.xi if(HAL_CA_BGC_Ctrl(BGC_CMD_TYPE_ENABLE, TRUE) == FALSE)
1185*53ee8cc1Swenshuai.xi {
1186*53ee8cc1Swenshuai.xi u32Fail = 15;
1187*53ee8cc1Swenshuai.xi goto BGC_CONFIG_FAIL;
1188*53ee8cc1Swenshuai.xi }
1189*53ee8cc1Swenshuai.xi
1190*53ee8cc1Swenshuai.xi return TRUE;
1191*53ee8cc1Swenshuai.xi
1192*53ee8cc1Swenshuai.xi BGC_CONFIG_FAIL:
1193*53ee8cc1Swenshuai.xi HAL_CA_DEBUG("BGC config fail:%08X\n", u32Fail);
1194*53ee8cc1Swenshuai.xi return FALSE;
1195*53ee8cc1Swenshuai.xi }
1196*53ee8cc1Swenshuai.xi
HAL_CA_BGC_ResetSec(MS_U32 u32SecId,const MS_U8 * pu8RstPSWD)1197*53ee8cc1Swenshuai.xi MS_BOOL HAL_CA_BGC_ResetSec(MS_U32 u32SecId, const MS_U8* pu8RstPSWD)
1198*53ee8cc1Swenshuai.xi {
1199*53ee8cc1Swenshuai.xi MS_U32 i = 0;
1200*53ee8cc1Swenshuai.xi MS_U32 u32Fail = 0;
1201*53ee8cc1Swenshuai.xi
1202*53ee8cc1Swenshuai.xi if((u32SecId >= BGC_SEC_MAX) || (pu8RstPSWD == NULL))
1203*53ee8cc1Swenshuai.xi {
1204*53ee8cc1Swenshuai.xi return FALSE;
1205*53ee8cc1Swenshuai.xi }
1206*53ee8cc1Swenshuai.xi
1207*53ee8cc1Swenshuai.xi //check bgc mode, if mode = 1, return fail
1208*53ee8cc1Swenshuai.xi //set section id
1209*53ee8cc1Swenshuai.xi if(HAL_CA_BGC_Ctrl(BGC_CMD_TYPE_SECID, u32SecId) == FALSE)
1210*53ee8cc1Swenshuai.xi {
1211*53ee8cc1Swenshuai.xi u32Fail = 1;
1212*53ee8cc1Swenshuai.xi goto BGC_RESET_FAIL;
1213*53ee8cc1Swenshuai.xi }
1214*53ee8cc1Swenshuai.xi
1215*53ee8cc1Swenshuai.xi //set reset password and incput length
1216*53ee8cc1Swenshuai.xi if(HAL_CA_BGC_Ctrl(BGC_CMD_TYPE_LENGTH, 0x4) == FALSE)
1217*53ee8cc1Swenshuai.xi {
1218*53ee8cc1Swenshuai.xi u32Fail = 2;
1219*53ee8cc1Swenshuai.xi goto BGC_RESET_FAIL;
1220*53ee8cc1Swenshuai.xi }
1221*53ee8cc1Swenshuai.xi
1222*53ee8cc1Swenshuai.xi for(i = 0 ; i < 0x4 ; i ++)
1223*53ee8cc1Swenshuai.xi {
1224*53ee8cc1Swenshuai.xi if(HAL_CA_BGC_Ctrl(BGC_CMD_TYPE_RESET_PASSWD, pu8RstPSWD[i]) == FALSE)
1225*53ee8cc1Swenshuai.xi {
1226*53ee8cc1Swenshuai.xi u32Fail = 3;
1227*53ee8cc1Swenshuai.xi goto BGC_RESET_FAIL;
1228*53ee8cc1Swenshuai.xi }
1229*53ee8cc1Swenshuai.xi }
1230*53ee8cc1Swenshuai.xi return TRUE;
1231*53ee8cc1Swenshuai.xi
1232*53ee8cc1Swenshuai.xi BGC_RESET_FAIL:
1233*53ee8cc1Swenshuai.xi HAL_CA_DEBUG("BGC reset fail:%08X\n", u32Fail);
1234*53ee8cc1Swenshuai.xi return FALSE;
1235*53ee8cc1Swenshuai.xi
1236*53ee8cc1Swenshuai.xi }
1237*53ee8cc1Swenshuai.xi
HAL_CA_OTP_IsBlank(MS_U32 addr)1238*53ee8cc1Swenshuai.xi MS_BOOL HAL_CA_OTP_IsBlank(MS_U32 addr)
1239*53ee8cc1Swenshuai.xi {
1240*53ee8cc1Swenshuai.xi MS_U32 value;
1241*53ee8cc1Swenshuai.xi
1242*53ee8cc1Swenshuai.xi if(addr >= CA_OTP_SIZE)
1243*53ee8cc1Swenshuai.xi return 0;
1244*53ee8cc1Swenshuai.xi
1245*53ee8cc1Swenshuai.xi value = *(volatile MS_U32 *)(_u32REG_OTP_Base + addr);
1246*53ee8cc1Swenshuai.xi
1247*53ee8cc1Swenshuai.xi return value == 0;
1248*53ee8cc1Swenshuai.xi }
1249*53ee8cc1Swenshuai.xi
1250*53ee8cc1Swenshuai.xi
_HAL_CA_OTP_Read_Real(MS_U32 addr,MS_BOOL bXor)1251*53ee8cc1Swenshuai.xi MS_U32 _HAL_CA_OTP_Read_Real(MS_U32 addr, MS_BOOL bXor)
1252*53ee8cc1Swenshuai.xi {
1253*53ee8cc1Swenshuai.xi MS_U32 value;
1254*53ee8cc1Swenshuai.xi
1255*53ee8cc1Swenshuai.xi if(addr >= CA_OTP_SIZE)
1256*53ee8cc1Swenshuai.xi return 0;
1257*53ee8cc1Swenshuai.xi
1258*53ee8cc1Swenshuai.xi value = *(volatile MS_U32 *)(_u32REG_OTP_Base + addr);
1259*53ee8cc1Swenshuai.xi
1260*53ee8cc1Swenshuai.xi return value;
1261*53ee8cc1Swenshuai.xi }
1262*53ee8cc1Swenshuai.xi
1263*53ee8cc1Swenshuai.xi
HAL_CA_OTP_Read(MS_U32 addr)1264*53ee8cc1Swenshuai.xi MS_U32 HAL_CA_OTP_Read(MS_U32 addr)
1265*53ee8cc1Swenshuai.xi {
1266*53ee8cc1Swenshuai.xi return _HAL_CA_OTP_Read_Real(addr, FALSE);
1267*53ee8cc1Swenshuai.xi }
1268*53ee8cc1Swenshuai.xi
1269*53ee8cc1Swenshuai.xi
_HAL_CA_OTP_Write_Real(MS_U32 addr,MS_U8 value)1270*53ee8cc1Swenshuai.xi MS_BOOL _HAL_CA_OTP_Write_Real(MS_U32 addr, MS_U8 value)
1271*53ee8cc1Swenshuai.xi {
1272*53ee8cc1Swenshuai.xi MS_DEBUG_MSG(printf("[_HAL_CA_OTP_Write_Real] addr=0x%04lx value=0x%02lx\n", addr, (MS_U32)value);)
1273*53ee8cc1Swenshuai.xi #if 0
1274*53ee8cc1Swenshuai.xi printf("[_HAL_CA_OTP_Write_Real] NO REAL WRITE!!!\n");
1275*53ee8cc1Swenshuai.xi #else
1276*53ee8cc1Swenshuai.xi *(volatile MS_U8 *)(_u32REG_OTP_Base + addr) = value;
1277*53ee8cc1Swenshuai.xi #endif
1278*53ee8cc1Swenshuai.xi
1279*53ee8cc1Swenshuai.xi MS_U32 v;
1280*53ee8cc1Swenshuai.xi v = REG32(REG_OTP_CTRL_PV) & REG_OTP_CTRL_PG_VERIFY_FAIL_FLAG;
1281*53ee8cc1Swenshuai.xi if(v == 0) {
1282*53ee8cc1Swenshuai.xi return TRUE;
1283*53ee8cc1Swenshuai.xi }
1284*53ee8cc1Swenshuai.xi
1285*53ee8cc1Swenshuai.xi HAL_CA_DEBUG("[_HAL_CA_OTP_Write_Real] PV fail (0x%08x)\n", v);
1286*53ee8cc1Swenshuai.xi return FALSE;
1287*53ee8cc1Swenshuai.xi }
1288*53ee8cc1Swenshuai.xi
HAL_CA_OTP_Write(MS_U32 addr,MS_U32 value)1289*53ee8cc1Swenshuai.xi MS_BOOL HAL_CA_OTP_Write(MS_U32 addr, MS_U32 value)
1290*53ee8cc1Swenshuai.xi {
1291*53ee8cc1Swenshuai.xi int i;
1292*53ee8cc1Swenshuai.xi if(addr >= CA_OTP_SIZE)
1293*53ee8cc1Swenshuai.xi return FALSE;
1294*53ee8cc1Swenshuai.xi
1295*53ee8cc1Swenshuai.xi if(addr % 4 != 0)
1296*53ee8cc1Swenshuai.xi return FALSE;
1297*53ee8cc1Swenshuai.xi
1298*53ee8cc1Swenshuai.xi REG32(REG_OTP_CTRL_0) = REG_OTP_CTRL_0_VALUE;
1299*53ee8cc1Swenshuai.xi
1300*53ee8cc1Swenshuai.xi MS_U32 orig = _HAL_CA_OTP_Read_Real(addr, TRUE);
1301*53ee8cc1Swenshuai.xi MS_U32 write = value & (orig ^ value); // only write the bit from 0 to 1
1302*53ee8cc1Swenshuai.xi
1303*53ee8cc1Swenshuai.xi if(write == 0)
1304*53ee8cc1Swenshuai.xi return TRUE;
1305*53ee8cc1Swenshuai.xi
1306*53ee8cc1Swenshuai.xi for(i = 0; i < 4; i++) {
1307*53ee8cc1Swenshuai.xi if(_HAL_CA_OTP_Write_Real(addr + i, (value >> (i * 8)) & 0xff) == FALSE)
1308*53ee8cc1Swenshuai.xi return FALSE;
1309*53ee8cc1Swenshuai.xi }
1310*53ee8cc1Swenshuai.xi
1311*53ee8cc1Swenshuai.xi MS_U32 result = _HAL_CA_OTP_Read_Real(addr, TRUE);
1312*53ee8cc1Swenshuai.xi if((result & value) == value) // only check the bit 1
1313*53ee8cc1Swenshuai.xi {
1314*53ee8cc1Swenshuai.xi return TRUE;
1315*53ee8cc1Swenshuai.xi }
1316*53ee8cc1Swenshuai.xi
1317*53ee8cc1Swenshuai.xi return FALSE;
1318*53ee8cc1Swenshuai.xi }
1319*53ee8cc1Swenshuai.xi
_HAL_CA_OTP_GetConfig(MS_U32 u32Idx,MS_U32 * pu32Value)1320*53ee8cc1Swenshuai.xi MS_BOOL _HAL_CA_OTP_GetConfig(MS_U32 u32Idx, MS_U32 *pu32Value)
1321*53ee8cc1Swenshuai.xi {
1322*53ee8cc1Swenshuai.xi MS_U32 u32Addr = _HAL_CA_OTP_Addr[u32Idx].u32Addr;
1323*53ee8cc1Swenshuai.xi MS_U32 u32Shift = _HAL_CA_OTP_Addr[u32Idx].u32Lo;
1324*53ee8cc1Swenshuai.xi MS_U32 u32Len = _HAL_CA_OTP_Addr[u32Idx].u32Hi - _HAL_CA_OTP_Addr[u32Idx].u32Lo + 1;
1325*53ee8cc1Swenshuai.xi MS_U32 u32Mask = bitmask(_HAL_CA_OTP_Addr[u32Idx].u32Hi, _HAL_CA_OTP_Addr[u32Idx].u32Lo);
1326*53ee8cc1Swenshuai.xi
1327*53ee8cc1Swenshuai.xi if(pu32Value == NULL)
1328*53ee8cc1Swenshuai.xi return FALSE;
1329*53ee8cc1Swenshuai.xi
1330*53ee8cc1Swenshuai.xi if(u32Len > 32)
1331*53ee8cc1Swenshuai.xi return FALSE;
1332*53ee8cc1Swenshuai.xi
1333*53ee8cc1Swenshuai.xi *pu32Value = (HAL_CA_OTP_Read(u32Addr) & u32Mask) >> u32Shift;
1334*53ee8cc1Swenshuai.xi
1335*53ee8cc1Swenshuai.xi return TRUE;
1336*53ee8cc1Swenshuai.xi }
1337*53ee8cc1Swenshuai.xi
_HAL_CA_OTP_SetConfig(MS_U32 u32Idx,MS_U32 u32Value)1338*53ee8cc1Swenshuai.xi MS_BOOL _HAL_CA_OTP_SetConfig(MS_U32 u32Idx, MS_U32 u32Value)
1339*53ee8cc1Swenshuai.xi {
1340*53ee8cc1Swenshuai.xi //printf("[_HAL_CA_OTP_SetConfig] u32Idx=%ld u32Value=0x%08lx\n", u32Idx, u32Value);
1341*53ee8cc1Swenshuai.xi
1342*53ee8cc1Swenshuai.xi MS_U32 u32Addr = _HAL_CA_OTP_Addr[u32Idx].u32Addr;
1343*53ee8cc1Swenshuai.xi MS_U32 u32Shift = _HAL_CA_OTP_Addr[u32Idx].u32Lo;
1344*53ee8cc1Swenshuai.xi MS_U32 u32Len = _HAL_CA_OTP_Addr[u32Idx].u32Hi - _HAL_CA_OTP_Addr[u32Idx].u32Lo + 1;
1345*53ee8cc1Swenshuai.xi MS_U32 u32Mask = bitmask(_HAL_CA_OTP_Addr[u32Idx].u32Hi, _HAL_CA_OTP_Addr[u32Idx].u32Lo);
1346*53ee8cc1Swenshuai.xi
1347*53ee8cc1Swenshuai.xi if(u32Len > 32)
1348*53ee8cc1Swenshuai.xi return FALSE;
1349*53ee8cc1Swenshuai.xi
1350*53ee8cc1Swenshuai.xi u32Value = (u32Value << u32Shift) & u32Mask;
1351*53ee8cc1Swenshuai.xi
1352*53ee8cc1Swenshuai.xi return HAL_CA_OTP_Write(u32Addr, u32Value);
1353*53ee8cc1Swenshuai.xi }
1354*53ee8cc1Swenshuai.xi
HAL_CA_OTP_EnableSecureBoot(void)1355*53ee8cc1Swenshuai.xi MS_BOOL HAL_CA_OTP_EnableSecureBoot(void)
1356*53ee8cc1Swenshuai.xi {
1357*53ee8cc1Swenshuai.xi return _HAL_CA_OTP_SetConfig(U_OTP_SBoot, 0xf);
1358*53ee8cc1Swenshuai.xi }
1359*53ee8cc1Swenshuai.xi
HAL_CA_OTP_IsSecureBootEnabled(void)1360*53ee8cc1Swenshuai.xi MS_BOOL HAL_CA_OTP_IsSecureBootEnabled(void)
1361*53ee8cc1Swenshuai.xi {
1362*53ee8cc1Swenshuai.xi MS_U32 u32Value = 0;
1363*53ee8cc1Swenshuai.xi MS_BOOL ret = FALSE;
1364*53ee8cc1Swenshuai.xi
1365*53ee8cc1Swenshuai.xi ret = _HAL_CA_OTP_GetConfig(U_OTP_SBoot, &u32Value);
1366*53ee8cc1Swenshuai.xi
1367*53ee8cc1Swenshuai.xi if (ret == FALSE)
1368*53ee8cc1Swenshuai.xi {
1369*53ee8cc1Swenshuai.xi return FALSE;
1370*53ee8cc1Swenshuai.xi }
1371*53ee8cc1Swenshuai.xi return u32Value != 0;
1372*53ee8cc1Swenshuai.xi }
1373*53ee8cc1Swenshuai.xi
1374*53ee8cc1Swenshuai.xi
HAL_CA_OTP_SetBlockLock(MS_U32 u32Start,MS_U32 u32End,CA_LOCK_TYPE eLockType)1375*53ee8cc1Swenshuai.xi MS_BOOL HAL_CA_OTP_SetBlockLock(MS_U32 u32Start, MS_U32 u32End, CA_LOCK_TYPE eLockType)
1376*53ee8cc1Swenshuai.xi {
1377*53ee8cc1Swenshuai.xi //Not support
1378*53ee8cc1Swenshuai.xi MS_DEBUG_MSG(printf("[%s][%d] do not support\n", __FUNCTION__, __LINE__));
1379*53ee8cc1Swenshuai.xi return FALSE;
1380*53ee8cc1Swenshuai.xi }
1381*53ee8cc1Swenshuai.xi
HAL_CA_OTP_GetBlockLock(MS_U32 * pu32Start,MS_U32 * pu32End,CA_LOCK_TYPE * peLockType)1382*53ee8cc1Swenshuai.xi MS_BOOL HAL_CA_OTP_GetBlockLock(MS_U32 *pu32Start, MS_U32 *pu32End, CA_LOCK_TYPE *peLockType)
1383*53ee8cc1Swenshuai.xi {
1384*53ee8cc1Swenshuai.xi //Not support
1385*53ee8cc1Swenshuai.xi MS_DEBUG_MSG(printf("[%s][%d] do not support\n", __FUNCTION__, __LINE__));
1386*53ee8cc1Swenshuai.xi return FALSE;
1387*53ee8cc1Swenshuai.xi }
1388*53ee8cc1Swenshuai.xi
1389*53ee8cc1Swenshuai.xi
1390*53ee8cc1Swenshuai.xi //=======================================================
1391*53ee8cc1Swenshuai.xi // RSA bank for Secure Range
1392*53ee8cc1Swenshuai.xi //=======================================================
1393*53ee8cc1Swenshuai.xi
HAL_CA_RSA_SetSecureRange(MS_U32 u32SecSet,MS_U32 u32SecStart,MS_U32 u32SecEnd)1394*53ee8cc1Swenshuai.xi MS_BOOL HAL_CA_RSA_SetSecureRange(MS_U32 u32SecSet, MS_U32 u32SecStart, MS_U32 u32SecEnd)
1395*53ee8cc1Swenshuai.xi {
1396*53ee8cc1Swenshuai.xi if(u32SecSet > REG_RSA_SEC_RANGE_SET || u32SecEnd <= u32SecStart)
1397*53ee8cc1Swenshuai.xi return FALSE;
1398*53ee8cc1Swenshuai.xi
1399*53ee8cc1Swenshuai.xi *(volatile MS_U32*) (_u32REGBase + REG_RSA_SEC_RANGE_START(u32SecSet)) = REG_RSA_SEC_RANGE_ENABLE | ( u32SecStart & REG_RSA_SEC_RANGE_MASK);
1400*53ee8cc1Swenshuai.xi *(volatile MS_U32*) (_u32REGBase + REG_RSA_SEC_RANGE_END(u32SecSet)) = REG_RSA_SEC_RANGE_ENABLE | ( u32SecEnd & REG_RSA_SEC_RANGE_MASK);
1401*53ee8cc1Swenshuai.xi
1402*53ee8cc1Swenshuai.xi return TRUE;
1403*53ee8cc1Swenshuai.xi }
1404*53ee8cc1Swenshuai.xi
HAL_CA_OTP_Lock(CA_OTP_LOCK eLock)1405*53ee8cc1Swenshuai.xi MS_BOOL HAL_CA_OTP_Lock(CA_OTP_LOCK eLock)
1406*53ee8cc1Swenshuai.xi {
1407*53ee8cc1Swenshuai.xi switch(eLock)
1408*53ee8cc1Swenshuai.xi {
1409*53ee8cc1Swenshuai.xi // Boot Area
1410*53ee8cc1Swenshuai.xi case E_BOOT_LockWord_W0000_0511_Addr:
1411*53ee8cc1Swenshuai.xi return _HAL_CA_OTP_SetConfig(U_OTP_LockWord_0000_0511_W, 0x3);
1412*53ee8cc1Swenshuai.xi case E_BOOT_LockWord_W0512_1023_Addr:
1413*53ee8cc1Swenshuai.xi return _HAL_CA_OTP_SetConfig(U_OTP_LockWord_0512_1023_W, 0x3);
1414*53ee8cc1Swenshuai.xi case E_BOOT_LockWord_W1024_1535_Addr:
1415*53ee8cc1Swenshuai.xi return _HAL_CA_OTP_SetConfig(U_OTP_LockWord_1024_1535_W, 0x3);
1416*53ee8cc1Swenshuai.xi case E_BOOT_LockWord_W1536_2047_Addr:
1417*53ee8cc1Swenshuai.xi return _HAL_CA_OTP_SetConfig(U_OTP_LockWord_1536_2047_W, 0x3);
1418*53ee8cc1Swenshuai.xi case E_BOOT_LockWord_W2048_2559_Addr:
1419*53ee8cc1Swenshuai.xi return _HAL_CA_OTP_SetConfig(U_OTP_LockWord_2048_2559_W, 0x3);
1420*53ee8cc1Swenshuai.xi case E_BOOT_LockWord_W2560_3071_Addr:
1421*53ee8cc1Swenshuai.xi return _HAL_CA_OTP_SetConfig(U_OTP_LockWord_2560_3071_W, 0x3);
1422*53ee8cc1Swenshuai.xi case E_BOOT_LockWord_W3072_3391_Addr:
1423*53ee8cc1Swenshuai.xi return _HAL_CA_OTP_SetConfig(U_OTP_LockWord_3072_3391_W, 0x3);
1424*53ee8cc1Swenshuai.xi
1425*53ee8cc1Swenshuai.xi // IDs
1426*53ee8cc1Swenshuai.xi case E_LockWord_v_PubOtpOID:
1427*53ee8cc1Swenshuai.xi return _HAL_CA_OTP_SetConfig(U_OTP_LockWord_v_PubOtpOID_W, 0x3);
1428*53ee8cc1Swenshuai.xi case E_LockWord_v_PubOtpVID:
1429*53ee8cc1Swenshuai.xi return _HAL_CA_OTP_SetConfig(U_OTP_LockWord_v_PubOtpVID_W, 0x3);
1430*53ee8cc1Swenshuai.xi case E_LockWord_v_pubOtpUniqueID1:
1431*53ee8cc1Swenshuai.xi return _HAL_CA_OTP_SetConfig(U_OTP_LockWord_PubOTPUniqueID1_W, 0x3);
1432*53ee8cc1Swenshuai.xi case E_LockWord_v_pubOtpUniqueID2:
1433*53ee8cc1Swenshuai.xi return _HAL_CA_OTP_SetConfig(U_OTP_LockWord_PubOTPUniqueID2_W, 0x3);
1434*53ee8cc1Swenshuai.xi case E_LockWord_v_pubOtpUniqueID3:
1435*53ee8cc1Swenshuai.xi return _HAL_CA_OTP_SetConfig(U_OTP_LockWord_PubOTPUniqueID3_W, 0x3);
1436*53ee8cc1Swenshuai.xi case E_LockWord_v_pubOtpUniqueID4:
1437*53ee8cc1Swenshuai.xi return _HAL_CA_OTP_SetConfig(U_OTP_LockWord_PubOTPUniqueID4_W, 0x3);
1438*53ee8cc1Swenshuai.xi case E_LockWord_CA_MSID:
1439*53ee8cc1Swenshuai.xi return _HAL_CA_OTP_SetConfig(U_OTP_LockWord_MSID_W, 0x3);
1440*53ee8cc1Swenshuai.xi
1441*53ee8cc1Swenshuai.xi //CA_SecretKey
1442*53ee8cc1Swenshuai.xi case E_LockWord_CAV_SecretKey6_W:
1443*53ee8cc1Swenshuai.xi return _HAL_CA_OTP_SetConfig(U_OTP_LockWord_CAV_Key6_W, 0x3);
1444*53ee8cc1Swenshuai.xi case E_LockWord_CAV_SecretKey6_R:
1445*53ee8cc1Swenshuai.xi return _HAL_CA_OTP_SetConfig(U_OTP_LockWord_CAV_Key6_R, 0x3);
1446*53ee8cc1Swenshuai.xi
1447*53ee8cc1Swenshuai.xi case E_LockWord_RSA_1_W:
1448*53ee8cc1Swenshuai.xi return _HAL_CA_OTP_SetConfig(U_OTP_LockWord_RSA_1_W, 0x3);
1449*53ee8cc1Swenshuai.xi
1450*53ee8cc1Swenshuai.xi //Debug ports
1451*53ee8cc1Swenshuai.xi case E_LockWord_Debugport_PWD_W:
1452*53ee8cc1Swenshuai.xi return _HAL_CA_OTP_SetConfig(U_OTP_LockWord_CA_PWD_W, 0x3);
1453*53ee8cc1Swenshuai.xi case E_LockWord_Debugport_PWD_R:
1454*53ee8cc1Swenshuai.xi return _HAL_CA_OTP_SetConfig(U_OTP_LockWord_CA_PWD_R, 0x3);
1455*53ee8cc1Swenshuai.xi
1456*53ee8cc1Swenshuai.xi // Reserved
1457*53ee8cc1Swenshuai.xi case E_LockWord_CA_reserved0:
1458*53ee8cc1Swenshuai.xi return _HAL_CA_OTP_SetConfig(U_OTP_LockWord_CA_reserved0_W, 0x3);
1459*53ee8cc1Swenshuai.xi case E_LockWord_CA_reserved1:
1460*53ee8cc1Swenshuai.xi return _HAL_CA_OTP_SetConfig(U_OTP_LockWord_CA_reserved1_W, 0x3);
1461*53ee8cc1Swenshuai.xi case E_LockWord_CA_reserved2:
1462*53ee8cc1Swenshuai.xi return _HAL_CA_OTP_SetConfig(U_OTP_LockWord_CA_reserved2_W, 0x3);
1463*53ee8cc1Swenshuai.xi case E_LockWord_CA_reserved3:
1464*53ee8cc1Swenshuai.xi return _HAL_CA_OTP_SetConfig(U_OTP_LockWord_CA_reserved3_W, 0x3);
1465*53ee8cc1Swenshuai.xi
1466*53ee8cc1Swenshuai.xi default:
1467*53ee8cc1Swenshuai.xi return FALSE;
1468*53ee8cc1Swenshuai.xi }
1469*53ee8cc1Swenshuai.xi }
1470*53ee8cc1Swenshuai.xi
HAL_CA_Locked(CA_OTP_LOCK eLock)1471*53ee8cc1Swenshuai.xi MS_BOOL HAL_CA_Locked(CA_OTP_LOCK eLock)
1472*53ee8cc1Swenshuai.xi {
1473*53ee8cc1Swenshuai.xi MS_U32 u32Value = 0;
1474*53ee8cc1Swenshuai.xi MS_BOOL ret = FALSE;
1475*53ee8cc1Swenshuai.xi switch(eLock)
1476*53ee8cc1Swenshuai.xi {
1477*53ee8cc1Swenshuai.xi // Boot Area
1478*53ee8cc1Swenshuai.xi case E_BOOT_LockWord_W0000_0511_Addr:
1479*53ee8cc1Swenshuai.xi ret = _HAL_CA_OTP_GetConfig(U_OTP_LockWord_0000_0511_W, &u32Value);
1480*53ee8cc1Swenshuai.xi break;
1481*53ee8cc1Swenshuai.xi case E_BOOT_LockWord_W0512_1023_Addr:
1482*53ee8cc1Swenshuai.xi ret = _HAL_CA_OTP_GetConfig(U_OTP_LockWord_0512_1023_W, &u32Value);
1483*53ee8cc1Swenshuai.xi break;
1484*53ee8cc1Swenshuai.xi case E_BOOT_LockWord_W1024_1535_Addr:
1485*53ee8cc1Swenshuai.xi ret = _HAL_CA_OTP_GetConfig(U_OTP_LockWord_1024_1535_W, &u32Value);
1486*53ee8cc1Swenshuai.xi break;
1487*53ee8cc1Swenshuai.xi case E_BOOT_LockWord_W1536_2047_Addr:
1488*53ee8cc1Swenshuai.xi ret = _HAL_CA_OTP_GetConfig(U_OTP_LockWord_1536_2047_W, &u32Value);
1489*53ee8cc1Swenshuai.xi break;
1490*53ee8cc1Swenshuai.xi case E_BOOT_LockWord_W2048_2559_Addr:
1491*53ee8cc1Swenshuai.xi ret = _HAL_CA_OTP_GetConfig(U_OTP_LockWord_2048_2559_W, &u32Value);
1492*53ee8cc1Swenshuai.xi break;
1493*53ee8cc1Swenshuai.xi case E_BOOT_LockWord_W2560_3071_Addr:
1494*53ee8cc1Swenshuai.xi ret = _HAL_CA_OTP_GetConfig(U_OTP_LockWord_2560_3071_W, &u32Value);
1495*53ee8cc1Swenshuai.xi break;
1496*53ee8cc1Swenshuai.xi case E_BOOT_LockWord_W3072_3391_Addr:
1497*53ee8cc1Swenshuai.xi ret = _HAL_CA_OTP_GetConfig(U_OTP_LockWord_3072_3391_W, &u32Value);
1498*53ee8cc1Swenshuai.xi break;
1499*53ee8cc1Swenshuai.xi
1500*53ee8cc1Swenshuai.xi // IDs
1501*53ee8cc1Swenshuai.xi case E_LockWord_v_PubOtpOID:
1502*53ee8cc1Swenshuai.xi ret = _HAL_CA_OTP_GetConfig(U_OTP_LockWord_v_PubOtpOID_W, &u32Value);
1503*53ee8cc1Swenshuai.xi break;
1504*53ee8cc1Swenshuai.xi case E_LockWord_v_PubOtpVID:
1505*53ee8cc1Swenshuai.xi ret = _HAL_CA_OTP_GetConfig(U_OTP_LockWord_v_PubOtpVID_W, &u32Value);
1506*53ee8cc1Swenshuai.xi break;
1507*53ee8cc1Swenshuai.xi case E_LockWord_v_pubOtpUniqueID1:
1508*53ee8cc1Swenshuai.xi ret = _HAL_CA_OTP_GetConfig(U_OTP_LockWord_PubOTPUniqueID1_W, &u32Value);
1509*53ee8cc1Swenshuai.xi break;
1510*53ee8cc1Swenshuai.xi case E_LockWord_v_pubOtpUniqueID2:
1511*53ee8cc1Swenshuai.xi ret = _HAL_CA_OTP_GetConfig(U_OTP_LockWord_PubOTPUniqueID2_W, &u32Value);
1512*53ee8cc1Swenshuai.xi break;
1513*53ee8cc1Swenshuai.xi case E_LockWord_v_pubOtpUniqueID3:
1514*53ee8cc1Swenshuai.xi ret = _HAL_CA_OTP_GetConfig(U_OTP_LockWord_PubOTPUniqueID3_W, &u32Value);
1515*53ee8cc1Swenshuai.xi break;
1516*53ee8cc1Swenshuai.xi case E_LockWord_v_pubOtpUniqueID4:
1517*53ee8cc1Swenshuai.xi ret = _HAL_CA_OTP_GetConfig(U_OTP_LockWord_PubOTPUniqueID4_W, &u32Value);
1518*53ee8cc1Swenshuai.xi case E_LockWord_CA_MSID:
1519*53ee8cc1Swenshuai.xi ret = _HAL_CA_OTP_GetConfig(U_OTP_LockWord_MSID_W, &u32Value);
1520*53ee8cc1Swenshuai.xi break;
1521*53ee8cc1Swenshuai.xi
1522*53ee8cc1Swenshuai.xi //CA_SecretKey
1523*53ee8cc1Swenshuai.xi case E_LockWord_CAV_SecretKey6_W:
1524*53ee8cc1Swenshuai.xi ret = _HAL_CA_OTP_GetConfig(U_OTP_LockWord_CAV_Key6_W, &u32Value);
1525*53ee8cc1Swenshuai.xi break;
1526*53ee8cc1Swenshuai.xi case E_LockWord_CAV_SecretKey6_R:
1527*53ee8cc1Swenshuai.xi ret = _HAL_CA_OTP_GetConfig(U_OTP_LockWord_CAV_Key6_R, &u32Value);
1528*53ee8cc1Swenshuai.xi break;
1529*53ee8cc1Swenshuai.xi
1530*53ee8cc1Swenshuai.xi case E_LockWord_RSA_1_W:
1531*53ee8cc1Swenshuai.xi ret = _HAL_CA_OTP_GetConfig(U_OTP_LockWord_RSA_1_W, &u32Value);
1532*53ee8cc1Swenshuai.xi break;
1533*53ee8cc1Swenshuai.xi
1534*53ee8cc1Swenshuai.xi //Debug ports
1535*53ee8cc1Swenshuai.xi case E_LockWord_Debugport_PWD_W:
1536*53ee8cc1Swenshuai.xi ret = _HAL_CA_OTP_GetConfig(U_OTP_LockWord_CA_PWD_W, &u32Value);
1537*53ee8cc1Swenshuai.xi break;
1538*53ee8cc1Swenshuai.xi case E_LockWord_Debugport_PWD_R:
1539*53ee8cc1Swenshuai.xi ret = _HAL_CA_OTP_GetConfig(U_OTP_LockWord_CA_PWD_R, &u32Value);
1540*53ee8cc1Swenshuai.xi break;
1541*53ee8cc1Swenshuai.xi
1542*53ee8cc1Swenshuai.xi // Reserved
1543*53ee8cc1Swenshuai.xi break;
1544*53ee8cc1Swenshuai.xi case E_LockWord_CA_reserved0:
1545*53ee8cc1Swenshuai.xi ret = _HAL_CA_OTP_GetConfig(U_OTP_LockWord_CA_reserved0_W, &u32Value);
1546*53ee8cc1Swenshuai.xi break;
1547*53ee8cc1Swenshuai.xi case E_LockWord_CA_reserved1:
1548*53ee8cc1Swenshuai.xi ret = _HAL_CA_OTP_GetConfig(U_OTP_LockWord_CA_reserved1_W, &u32Value);
1549*53ee8cc1Swenshuai.xi break;
1550*53ee8cc1Swenshuai.xi case E_LockWord_CA_reserved2:
1551*53ee8cc1Swenshuai.xi ret = _HAL_CA_OTP_GetConfig(U_OTP_LockWord_CA_reserved2_W, &u32Value);
1552*53ee8cc1Swenshuai.xi break;
1553*53ee8cc1Swenshuai.xi case E_LockWord_CA_reserved3:
1554*53ee8cc1Swenshuai.xi ret = _HAL_CA_OTP_GetConfig(U_OTP_LockWord_CA_reserved3_W, &u32Value);
1555*53ee8cc1Swenshuai.xi break;
1556*53ee8cc1Swenshuai.xi break;
1557*53ee8cc1Swenshuai.xi default:
1558*53ee8cc1Swenshuai.xi ret = FALSE;
1559*53ee8cc1Swenshuai.xi }
1560*53ee8cc1Swenshuai.xi
1561*53ee8cc1Swenshuai.xi if(ret == FALSE)
1562*53ee8cc1Swenshuai.xi return FALSE;
1563*53ee8cc1Swenshuai.xi
1564*53ee8cc1Swenshuai.xi if(u32Value == 0x01) // 0x01 : unlock, xx : locked
1565*53ee8cc1Swenshuai.xi return FALSE;
1566*53ee8cc1Swenshuai.xi
1567*53ee8cc1Swenshuai.xi return TRUE;
1568*53ee8cc1Swenshuai.xi }
1569*53ee8cc1Swenshuai.xi
HAL_CA_OTP_SetRSAextID(MS_U32 u32Value)1570*53ee8cc1Swenshuai.xi MS_BOOL HAL_CA_OTP_SetRSAextID(MS_U32 u32Value)
1571*53ee8cc1Swenshuai.xi {
1572*53ee8cc1Swenshuai.xi return _HAL_CA_OTP_SetConfig(U_OTP_MSID, u32Value);
1573*53ee8cc1Swenshuai.xi }
1574*53ee8cc1Swenshuai.xi
HAL_CA_OTP_GetRSAextID(void)1575*53ee8cc1Swenshuai.xi MS_U32 HAL_CA_OTP_GetRSAextID(void)
1576*53ee8cc1Swenshuai.xi {
1577*53ee8cc1Swenshuai.xi
1578*53ee8cc1Swenshuai.xi MS_U32 u32Value = 0;
1579*53ee8cc1Swenshuai.xi MS_BOOL ret = FALSE;
1580*53ee8cc1Swenshuai.xi
1581*53ee8cc1Swenshuai.xi ret = _HAL_CA_OTP_GetConfig(U_OTP_MSID, &u32Value);
1582*53ee8cc1Swenshuai.xi
1583*53ee8cc1Swenshuai.xi if (ret == FALSE)
1584*53ee8cc1Swenshuai.xi {
1585*53ee8cc1Swenshuai.xi return FALSE;
1586*53ee8cc1Swenshuai.xi }
1587*53ee8cc1Swenshuai.xi return u32Value;
1588*53ee8cc1Swenshuai.xi }
1589*53ee8cc1Swenshuai.xi
1590*53ee8cc1Swenshuai.xi
HAL_CA_OTP_SetHASH_REF_VER_Ex(MS_U32 u32HASH0_REF_VER,MS_U32 u32HASH1_REF_VER,MS_U32 u32HASH2_REF_VER)1591*53ee8cc1Swenshuai.xi MS_BOOL HAL_CA_OTP_SetHASH_REF_VER_Ex(MS_U32 u32HASH0_REF_VER, MS_U32 u32HASH1_REF_VER, MS_U32 u32HASH2_REF_VER)
1592*53ee8cc1Swenshuai.xi {
1593*53ee8cc1Swenshuai.xi if(_HAL_CA_OTP_SetConfig(U_OTP_HASH0_VER_REF, u32HASH0_REF_VER) == FALSE)
1594*53ee8cc1Swenshuai.xi {
1595*53ee8cc1Swenshuai.xi return FALSE;
1596*53ee8cc1Swenshuai.xi }
1597*53ee8cc1Swenshuai.xi
1598*53ee8cc1Swenshuai.xi if(_HAL_CA_OTP_SetConfig(U_OTP_HASH1_VER_REF, u32HASH1_REF_VER) == FALSE)
1599*53ee8cc1Swenshuai.xi {
1600*53ee8cc1Swenshuai.xi return FALSE;
1601*53ee8cc1Swenshuai.xi }
1602*53ee8cc1Swenshuai.xi
1603*53ee8cc1Swenshuai.xi if(_HAL_CA_OTP_SetConfig(U_OTP_HASH2_VER_REF, u32HASH2_REF_VER) == FALSE)
1604*53ee8cc1Swenshuai.xi {
1605*53ee8cc1Swenshuai.xi return FALSE;
1606*53ee8cc1Swenshuai.xi }
1607*53ee8cc1Swenshuai.xi
1608*53ee8cc1Swenshuai.xi return TRUE;
1609*53ee8cc1Swenshuai.xi }
1610*53ee8cc1Swenshuai.xi
HAL_CA_OTP_GetHASH_REF_VER_Ex(MS_U32 * pu32HASH0_REF_VER,MS_U32 * pu32HASH1_REF_VER,MS_U32 * pu32HASH2_REF_VER)1611*53ee8cc1Swenshuai.xi MS_BOOL HAL_CA_OTP_GetHASH_REF_VER_Ex(MS_U32 *pu32HASH0_REF_VER, MS_U32 *pu32HASH1_REF_VER, MS_U32 *pu32HASH2_REF_VER)
1612*53ee8cc1Swenshuai.xi {
1613*53ee8cc1Swenshuai.xi MS_U32 u32Value = 0;
1614*53ee8cc1Swenshuai.xi
1615*53ee8cc1Swenshuai.xi if(pu32HASH0_REF_VER != NULL)
1616*53ee8cc1Swenshuai.xi {
1617*53ee8cc1Swenshuai.xi if(_HAL_CA_OTP_GetConfig(U_OTP_HASH0_VER_REF, &u32Value) == FALSE)
1618*53ee8cc1Swenshuai.xi {
1619*53ee8cc1Swenshuai.xi return FALSE;
1620*53ee8cc1Swenshuai.xi }
1621*53ee8cc1Swenshuai.xi
1622*53ee8cc1Swenshuai.xi *pu32HASH0_REF_VER = (u32Value);
1623*53ee8cc1Swenshuai.xi }
1624*53ee8cc1Swenshuai.xi
1625*53ee8cc1Swenshuai.xi if(pu32HASH1_REF_VER != NULL)
1626*53ee8cc1Swenshuai.xi {
1627*53ee8cc1Swenshuai.xi if(_HAL_CA_OTP_GetConfig(U_OTP_HASH1_VER_REF, &u32Value) == FALSE)
1628*53ee8cc1Swenshuai.xi {
1629*53ee8cc1Swenshuai.xi return FALSE;
1630*53ee8cc1Swenshuai.xi }
1631*53ee8cc1Swenshuai.xi *pu32HASH1_REF_VER = (u32Value);
1632*53ee8cc1Swenshuai.xi }
1633*53ee8cc1Swenshuai.xi
1634*53ee8cc1Swenshuai.xi if(pu32HASH2_REF_VER != NULL)
1635*53ee8cc1Swenshuai.xi {
1636*53ee8cc1Swenshuai.xi if(_HAL_CA_OTP_GetConfig(U_OTP_HASH2_VER_REF, &u32Value) == FALSE)
1637*53ee8cc1Swenshuai.xi {
1638*53ee8cc1Swenshuai.xi return FALSE;
1639*53ee8cc1Swenshuai.xi }
1640*53ee8cc1Swenshuai.xi
1641*53ee8cc1Swenshuai.xi *pu32HASH2_REF_VER = (u32Value);
1642*53ee8cc1Swenshuai.xi }
1643*53ee8cc1Swenshuai.xi
1644*53ee8cc1Swenshuai.xi return TRUE;
1645*53ee8cc1Swenshuai.xi }
1646*53ee8cc1Swenshuai.xi
HAL_CA_OTP_SetHASH1_REF_VER(MS_U32 u32HASH1_REF_VER)1647*53ee8cc1Swenshuai.xi MS_BOOL HAL_CA_OTP_SetHASH1_REF_VER(MS_U32 u32HASH1_REF_VER)
1648*53ee8cc1Swenshuai.xi {
1649*53ee8cc1Swenshuai.xi if(HAL_CA_OTP_SetHASH_REF_VER_Ex(0, u32HASH1_REF_VER, 0) == FALSE)
1650*53ee8cc1Swenshuai.xi {
1651*53ee8cc1Swenshuai.xi return FALSE;
1652*53ee8cc1Swenshuai.xi }
1653*53ee8cc1Swenshuai.xi
1654*53ee8cc1Swenshuai.xi return TRUE;
1655*53ee8cc1Swenshuai.xi }
1656*53ee8cc1Swenshuai.xi
HAL_CA_OTP_GetHASH1_REF_VER(MS_U32 * pu32HASH1_REF_VER)1657*53ee8cc1Swenshuai.xi MS_BOOL HAL_CA_OTP_GetHASH1_REF_VER(MS_U32 *pu32HASH1_REF_VER)
1658*53ee8cc1Swenshuai.xi {
1659*53ee8cc1Swenshuai.xi if(HAL_CA_OTP_GetHASH_REF_VER_Ex(NULL, pu32HASH1_REF_VER, NULL) == FALSE)
1660*53ee8cc1Swenshuai.xi {
1661*53ee8cc1Swenshuai.xi return FALSE;
1662*53ee8cc1Swenshuai.xi }
1663*53ee8cc1Swenshuai.xi
1664*53ee8cc1Swenshuai.xi return TRUE;
1665*53ee8cc1Swenshuai.xi }
1666*53ee8cc1Swenshuai.xi
1667*53ee8cc1Swenshuai.xi
HAL_CA_OTP_SetHASH_REF_VER(MS_U32 u32HASH0_REF_VER,MS_U32 u32HASH2_REF_VER)1668*53ee8cc1Swenshuai.xi MS_BOOL HAL_CA_OTP_SetHASH_REF_VER(MS_U32 u32HASH0_REF_VER, MS_U32 u32HASH2_REF_VER)
1669*53ee8cc1Swenshuai.xi {
1670*53ee8cc1Swenshuai.xi if(HAL_CA_OTP_SetHASH_REF_VER_Ex(u32HASH0_REF_VER, 0, u32HASH2_REF_VER) == FALSE)
1671*53ee8cc1Swenshuai.xi {
1672*53ee8cc1Swenshuai.xi return FALSE;
1673*53ee8cc1Swenshuai.xi }
1674*53ee8cc1Swenshuai.xi
1675*53ee8cc1Swenshuai.xi return TRUE;
1676*53ee8cc1Swenshuai.xi }
1677*53ee8cc1Swenshuai.xi
HAL_CA_OTP_GetHASH_REF_VER(MS_U32 * pu32HASH0_REF_VER,MS_U32 * pu32HASH2_REF_VER)1678*53ee8cc1Swenshuai.xi MS_BOOL HAL_CA_OTP_GetHASH_REF_VER(MS_U32 *pu32HASH0_REF_VER, MS_U32 *pu32HASH2_REF_VER)
1679*53ee8cc1Swenshuai.xi {
1680*53ee8cc1Swenshuai.xi if(HAL_CA_OTP_GetHASH_REF_VER_Ex(pu32HASH0_REF_VER, NULL, pu32HASH2_REF_VER) == FALSE)
1681*53ee8cc1Swenshuai.xi {
1682*53ee8cc1Swenshuai.xi return FALSE;
1683*53ee8cc1Swenshuai.xi }
1684*53ee8cc1Swenshuai.xi
1685*53ee8cc1Swenshuai.xi return TRUE;
1686*53ee8cc1Swenshuai.xi }
1687*53ee8cc1Swenshuai.xi
1688*53ee8cc1Swenshuai.xi
HAL_CA_MaxDeviceIdSize(void)1689*53ee8cc1Swenshuai.xi MS_U32 HAL_CA_MaxDeviceIdSize(void)
1690*53ee8cc1Swenshuai.xi {
1691*53ee8cc1Swenshuai.xi return MAX_DEVICEID_SIZE;
1692*53ee8cc1Swenshuai.xi }
1693*53ee8cc1Swenshuai.xi
HAL_CA_OTP_SetDeviceId(const MS_U8 * pu8Did,MS_U32 u32Size)1694*53ee8cc1Swenshuai.xi MS_BOOL HAL_CA_OTP_SetDeviceId(const MS_U8 *pu8Did, MS_U32 u32Size)
1695*53ee8cc1Swenshuai.xi {
1696*53ee8cc1Swenshuai.xi MS_U32 did[8] = {0};
1697*53ee8cc1Swenshuai.xi MS_U32 i, u32Addr;
1698*53ee8cc1Swenshuai.xi MS_U32 Did_Size = 2;
1699*53ee8cc1Swenshuai.xi MS_U8 *p = (MS_U8 *)did;
1700*53ee8cc1Swenshuai.xi
1701*53ee8cc1Swenshuai.xi for(i = 0; i < sizeof(did) && i < u32Size; i++)
1702*53ee8cc1Swenshuai.xi {
1703*53ee8cc1Swenshuai.xi p[i] = pu8Did[i];
1704*53ee8cc1Swenshuai.xi }
1705*53ee8cc1Swenshuai.xi
1706*53ee8cc1Swenshuai.xi u32Addr = _HAL_CA_OTP_Addr[U_OTP_v_pubOtpUniqueID1].u32Addr;
1707*53ee8cc1Swenshuai.xi for(i = 0; i < Did_Size; i++)
1708*53ee8cc1Swenshuai.xi {
1709*53ee8cc1Swenshuai.xi if(HAL_CA_OTP_Write(u32Addr,did[i]) == FALSE)
1710*53ee8cc1Swenshuai.xi {
1711*53ee8cc1Swenshuai.xi return FALSE;
1712*53ee8cc1Swenshuai.xi }
1713*53ee8cc1Swenshuai.xi u32Addr += 4;
1714*53ee8cc1Swenshuai.xi }
1715*53ee8cc1Swenshuai.xi u32Addr = _HAL_CA_OTP_Addr[U_OTP_v_pubOtpUniqueID2].u32Addr;
1716*53ee8cc1Swenshuai.xi for(i = Did_Size; i < (2*Did_Size); i++)
1717*53ee8cc1Swenshuai.xi {
1718*53ee8cc1Swenshuai.xi if(HAL_CA_OTP_Write(u32Addr,did[i]) == FALSE)
1719*53ee8cc1Swenshuai.xi {
1720*53ee8cc1Swenshuai.xi return FALSE;
1721*53ee8cc1Swenshuai.xi }
1722*53ee8cc1Swenshuai.xi u32Addr += 4;
1723*53ee8cc1Swenshuai.xi }
1724*53ee8cc1Swenshuai.xi u32Addr = _HAL_CA_OTP_Addr[U_OTP_v_pubOtpUniqueID3].u32Addr;
1725*53ee8cc1Swenshuai.xi for(i = (2*Did_Size); i < (3*Did_Size); i++)
1726*53ee8cc1Swenshuai.xi {
1727*53ee8cc1Swenshuai.xi if(HAL_CA_OTP_Write(u32Addr,did[i]) == FALSE)
1728*53ee8cc1Swenshuai.xi {
1729*53ee8cc1Swenshuai.xi return FALSE;
1730*53ee8cc1Swenshuai.xi }
1731*53ee8cc1Swenshuai.xi u32Addr += 4;
1732*53ee8cc1Swenshuai.xi }
1733*53ee8cc1Swenshuai.xi u32Addr = _HAL_CA_OTP_Addr[U_OTP_v_pubOtpUniqueID4].u32Addr;
1734*53ee8cc1Swenshuai.xi for(i = (3*Did_Size); i < (4*Did_Size); i++)
1735*53ee8cc1Swenshuai.xi {
1736*53ee8cc1Swenshuai.xi if(HAL_CA_OTP_Write(u32Addr,did[i]) == FALSE)
1737*53ee8cc1Swenshuai.xi {
1738*53ee8cc1Swenshuai.xi return FALSE;
1739*53ee8cc1Swenshuai.xi }
1740*53ee8cc1Swenshuai.xi u32Addr += 4;
1741*53ee8cc1Swenshuai.xi }
1742*53ee8cc1Swenshuai.xi
1743*53ee8cc1Swenshuai.xi return TRUE;
1744*53ee8cc1Swenshuai.xi }
1745*53ee8cc1Swenshuai.xi
HAL_CA_OTP_GetDeviceId(MS_U8 * pu8Did,MS_U32 u32Size)1746*53ee8cc1Swenshuai.xi MS_BOOL HAL_CA_OTP_GetDeviceId(MS_U8 *pu8Did, MS_U32 u32Size)
1747*53ee8cc1Swenshuai.xi {
1748*53ee8cc1Swenshuai.xi MS_U32 did[8] = {0};
1749*53ee8cc1Swenshuai.xi MS_U32 Did_Size = 2;
1750*53ee8cc1Swenshuai.xi MS_U32 i, u32Addr;
1751*53ee8cc1Swenshuai.xi MS_U8 *p = (MS_U8 *)did;
1752*53ee8cc1Swenshuai.xi
1753*53ee8cc1Swenshuai.xi u32Addr = _HAL_CA_OTP_Addr[U_OTP_v_pubOtpUniqueID1].u32Addr;
1754*53ee8cc1Swenshuai.xi for(i = 0; i < Did_Size; i++)
1755*53ee8cc1Swenshuai.xi {
1756*53ee8cc1Swenshuai.xi did[i] = HAL_CA_OTP_Read(u32Addr);
1757*53ee8cc1Swenshuai.xi u32Addr += 4;
1758*53ee8cc1Swenshuai.xi }
1759*53ee8cc1Swenshuai.xi u32Addr = _HAL_CA_OTP_Addr[U_OTP_v_pubOtpUniqueID2].u32Addr;
1760*53ee8cc1Swenshuai.xi for(i = Did_Size; i < (2*Did_Size) ; i++)
1761*53ee8cc1Swenshuai.xi {
1762*53ee8cc1Swenshuai.xi did[i] = HAL_CA_OTP_Read(u32Addr);
1763*53ee8cc1Swenshuai.xi u32Addr += 4;
1764*53ee8cc1Swenshuai.xi }
1765*53ee8cc1Swenshuai.xi u32Addr = _HAL_CA_OTP_Addr[U_OTP_v_pubOtpUniqueID3].u32Addr;
1766*53ee8cc1Swenshuai.xi for(i = (2*Did_Size) ; i < (3*Did_Size) ; i++)
1767*53ee8cc1Swenshuai.xi {
1768*53ee8cc1Swenshuai.xi did[i] = HAL_CA_OTP_Read(u32Addr);
1769*53ee8cc1Swenshuai.xi u32Addr += 4;
1770*53ee8cc1Swenshuai.xi }
1771*53ee8cc1Swenshuai.xi u32Addr = _HAL_CA_OTP_Addr[U_OTP_v_pubOtpUniqueID4].u32Addr;
1772*53ee8cc1Swenshuai.xi for(i = (3*Did_Size); i < (4*Did_Size) ; i++)
1773*53ee8cc1Swenshuai.xi {
1774*53ee8cc1Swenshuai.xi did[i] = HAL_CA_OTP_Read(u32Addr);
1775*53ee8cc1Swenshuai.xi u32Addr += 4;
1776*53ee8cc1Swenshuai.xi }
1777*53ee8cc1Swenshuai.xi
1778*53ee8cc1Swenshuai.xi for(i = 0; i < sizeof(did) && i < u32Size; i++)
1779*53ee8cc1Swenshuai.xi {
1780*53ee8cc1Swenshuai.xi pu8Did[i] = p[i];
1781*53ee8cc1Swenshuai.xi }
1782*53ee8cc1Swenshuai.xi
1783*53ee8cc1Swenshuai.xi return TRUE;
1784*53ee8cc1Swenshuai.xi }
1785*53ee8cc1Swenshuai.xi
HAL_CA_OTP_SetDebugPortMode(CA_DEBUG_PORT eDebugPort,CA_DEBUG_PORT_MODE eMode)1786*53ee8cc1Swenshuai.xi MS_BOOL HAL_CA_OTP_SetDebugPortMode(CA_DEBUG_PORT eDebugPort, CA_DEBUG_PORT_MODE eMode)
1787*53ee8cc1Swenshuai.xi {
1788*53ee8cc1Swenshuai.xi MS_U32 idx = 0;
1789*53ee8cc1Swenshuai.xi MS_U32 v = 0;
1790*53ee8cc1Swenshuai.xi
1791*53ee8cc1Swenshuai.xi switch(eDebugPort)
1792*53ee8cc1Swenshuai.xi {
1793*53ee8cc1Swenshuai.xi case E_CA_DEBUG_PORT_I2C:
1794*53ee8cc1Swenshuai.xi idx = U_OTP_I2C_MODE;
1795*53ee8cc1Swenshuai.xi break;
1796*53ee8cc1Swenshuai.xi case E_CA_DEBUG_PORT_JTAG:
1797*53ee8cc1Swenshuai.xi idx = U_OTP_EJTAG_MODE;
1798*53ee8cc1Swenshuai.xi break;
1799*53ee8cc1Swenshuai.xi case E_CA_DEBUG_PORT_SCAN:
1800*53ee8cc1Swenshuai.xi idx = U_OTP_SCAN_MODE;
1801*53ee8cc1Swenshuai.xi break;
1802*53ee8cc1Swenshuai.xi default:
1803*53ee8cc1Swenshuai.xi return FALSE;
1804*53ee8cc1Swenshuai.xi }
1805*53ee8cc1Swenshuai.xi
1806*53ee8cc1Swenshuai.xi switch(eMode)
1807*53ee8cc1Swenshuai.xi {
1808*53ee8cc1Swenshuai.xi case E_CA_DEBUG_PORT_OPEN:
1809*53ee8cc1Swenshuai.xi return TRUE;
1810*53ee8cc1Swenshuai.xi case E_CA_DEBUG_PORT_PASSWD:
1811*53ee8cc1Swenshuai.xi v = 0x7;
1812*53ee8cc1Swenshuai.xi break;
1813*53ee8cc1Swenshuai.xi case E_CA_DEBUG_PORT_CLOSE:
1814*53ee8cc1Swenshuai.xi v = 0x3f;
1815*53ee8cc1Swenshuai.xi break;
1816*53ee8cc1Swenshuai.xi default:
1817*53ee8cc1Swenshuai.xi return FALSE;
1818*53ee8cc1Swenshuai.xi }
1819*53ee8cc1Swenshuai.xi
1820*53ee8cc1Swenshuai.xi return _HAL_CA_OTP_SetConfig(idx, v);
1821*53ee8cc1Swenshuai.xi
1822*53ee8cc1Swenshuai.xi }
1823*53ee8cc1Swenshuai.xi
1824*53ee8cc1Swenshuai.xi
HAL_CA_OTP_GetDebugPortMode(CA_DEBUG_PORT eDebugPort,CA_DEBUG_PORT_MODE * eMode)1825*53ee8cc1Swenshuai.xi MS_BOOL HAL_CA_OTP_GetDebugPortMode(CA_DEBUG_PORT eDebugPort, CA_DEBUG_PORT_MODE *eMode)
1826*53ee8cc1Swenshuai.xi {
1827*53ee8cc1Swenshuai.xi MS_U32 v = 0;
1828*53ee8cc1Swenshuai.xi MS_BOOL ret = FALSE;
1829*53ee8cc1Swenshuai.xi
1830*53ee8cc1Swenshuai.xi if(eMode == NULL)
1831*53ee8cc1Swenshuai.xi {
1832*53ee8cc1Swenshuai.xi return FALSE;
1833*53ee8cc1Swenshuai.xi }
1834*53ee8cc1Swenshuai.xi
1835*53ee8cc1Swenshuai.xi switch(eDebugPort)
1836*53ee8cc1Swenshuai.xi {
1837*53ee8cc1Swenshuai.xi case E_CA_DEBUG_PORT_I2C:
1838*53ee8cc1Swenshuai.xi ret = _HAL_CA_OTP_GetConfig(U_OTP_I2C_MODE, &v);
1839*53ee8cc1Swenshuai.xi break;
1840*53ee8cc1Swenshuai.xi case E_CA_DEBUG_PORT_JTAG:
1841*53ee8cc1Swenshuai.xi ret = _HAL_CA_OTP_GetConfig(U_OTP_EJTAG_MODE, &v);
1842*53ee8cc1Swenshuai.xi break;
1843*53ee8cc1Swenshuai.xi case E_CA_DEBUG_PORT_SCAN:
1844*53ee8cc1Swenshuai.xi ret = _HAL_CA_OTP_GetConfig(U_OTP_SCAN_MODE, &v);
1845*53ee8cc1Swenshuai.xi break;
1846*53ee8cc1Swenshuai.xi default:
1847*53ee8cc1Swenshuai.xi return FALSE;
1848*53ee8cc1Swenshuai.xi }
1849*53ee8cc1Swenshuai.xi
1850*53ee8cc1Swenshuai.xi if (ret == FALSE)
1851*53ee8cc1Swenshuai.xi {
1852*53ee8cc1Swenshuai.xi return FALSE;
1853*53ee8cc1Swenshuai.xi }
1854*53ee8cc1Swenshuai.xi
1855*53ee8cc1Swenshuai.xi if(v & 0x38)
1856*53ee8cc1Swenshuai.xi {
1857*53ee8cc1Swenshuai.xi *eMode = E_CA_DEBUG_PORT_CLOSE;
1858*53ee8cc1Swenshuai.xi }
1859*53ee8cc1Swenshuai.xi else if(v)
1860*53ee8cc1Swenshuai.xi {
1861*53ee8cc1Swenshuai.xi *eMode = E_CA_DEBUG_PORT_PASSWD;
1862*53ee8cc1Swenshuai.xi }
1863*53ee8cc1Swenshuai.xi else
1864*53ee8cc1Swenshuai.xi {
1865*53ee8cc1Swenshuai.xi *eMode = E_CA_DEBUG_PORT_OPEN;
1866*53ee8cc1Swenshuai.xi }
1867*53ee8cc1Swenshuai.xi
1868*53ee8cc1Swenshuai.xi return TRUE;
1869*53ee8cc1Swenshuai.xi }
1870*53ee8cc1Swenshuai.xi
1871*53ee8cc1Swenshuai.xi
1872*53ee8cc1Swenshuai.xi // This function is created to used for another hal driver: NSK2
HAL_CA_OTP_GetCfg(MS_U32 u32Idx,MS_U32 * pu32Value)1873*53ee8cc1Swenshuai.xi MS_BOOL HAL_CA_OTP_GetCfg(MS_U32 u32Idx,MS_U32 * pu32Value)
1874*53ee8cc1Swenshuai.xi {
1875*53ee8cc1Swenshuai.xi return _HAL_CA_OTP_GetConfig(u32Idx, pu32Value);
1876*53ee8cc1Swenshuai.xi }
1877*53ee8cc1Swenshuai.xi
HAL_CA_OTP_EnableSecureCWMode(void)1878*53ee8cc1Swenshuai.xi MS_BOOL HAL_CA_OTP_EnableSecureCWMode(void)
1879*53ee8cc1Swenshuai.xi {
1880*53ee8cc1Swenshuai.xi return _HAL_CA_OTP_SetConfig(U_OTP_ena_ACPU2KT, 0xF);
1881*53ee8cc1Swenshuai.xi }
1882*53ee8cc1Swenshuai.xi
HAL_CA_OTP_IsSecureCWMode(void)1883*53ee8cc1Swenshuai.xi MS_BOOL HAL_CA_OTP_IsSecureCWMode(void)
1884*53ee8cc1Swenshuai.xi {
1885*53ee8cc1Swenshuai.xi MS_U32 u32Value = 0;
1886*53ee8cc1Swenshuai.xi MS_BOOL ret = FALSE;
1887*53ee8cc1Swenshuai.xi
1888*53ee8cc1Swenshuai.xi ret = _HAL_CA_OTP_GetConfig(U_OTP_ena_ACPU2KT, &u32Value);
1889*53ee8cc1Swenshuai.xi
1890*53ee8cc1Swenshuai.xi if (ret == FALSE)
1891*53ee8cc1Swenshuai.xi {
1892*53ee8cc1Swenshuai.xi return FALSE;
1893*53ee8cc1Swenshuai.xi }
1894*53ee8cc1Swenshuai.xi
1895*53ee8cc1Swenshuai.xi if(u32Value == 1)
1896*53ee8cc1Swenshuai.xi {
1897*53ee8cc1Swenshuai.xi return FALSE;
1898*53ee8cc1Swenshuai.xi }
1899*53ee8cc1Swenshuai.xi else
1900*53ee8cc1Swenshuai.xi {
1901*53ee8cc1Swenshuai.xi return TRUE;
1902*53ee8cc1Swenshuai.xi }
1903*53ee8cc1Swenshuai.xi }
1904*53ee8cc1Swenshuai.xi
_HAL_CA_Random(void)1905*53ee8cc1Swenshuai.xi MS_U16 _HAL_CA_Random(void)
1906*53ee8cc1Swenshuai.xi {
1907*53ee8cc1Swenshuai.xi MS_U32 n;
1908*53ee8cc1Swenshuai.xi
1909*53ee8cc1Swenshuai.xi do{
1910*53ee8cc1Swenshuai.xi n = REG32(REG_RNG_TRNG);
1911*53ee8cc1Swenshuai.xi if( n & REG_RNG_TRNG_VALID_MASK) //check valid
1912*53ee8cc1Swenshuai.xi {
1913*53ee8cc1Swenshuai.xi n &= REG_RNG_TRNG_OUT_MASK; // get random number
1914*53ee8cc1Swenshuai.xi REG32(REG_RNG_TRNG) = REG_RNG_TRNG_ACK; //ack
1915*53ee8cc1Swenshuai.xi break;
1916*53ee8cc1Swenshuai.xi }
1917*53ee8cc1Swenshuai.xi }while(1);
1918*53ee8cc1Swenshuai.xi
1919*53ee8cc1Swenshuai.xi return n;
1920*53ee8cc1Swenshuai.xi }
1921*53ee8cc1Swenshuai.xi
1922*53ee8cc1Swenshuai.xi
HAL_CA_Random(void)1923*53ee8cc1Swenshuai.xi MS_U32 HAL_CA_Random(void)
1924*53ee8cc1Swenshuai.xi {
1925*53ee8cc1Swenshuai.xi MS_U32 u32Val = 0;
1926*53ee8cc1Swenshuai.xi
1927*53ee8cc1Swenshuai.xi u32Val += _HAL_CA_Random()<<16;
1928*53ee8cc1Swenshuai.xi u32Val += _HAL_CA_Random();
1929*53ee8cc1Swenshuai.xi
1930*53ee8cc1Swenshuai.xi return u32Val;
1931*53ee8cc1Swenshuai.xi
1932*53ee8cc1Swenshuai.xi }
1933*53ee8cc1Swenshuai.xi
HAL_CA_OTP_ReadCAVendor(void)1934*53ee8cc1Swenshuai.xi MS_U32 HAL_CA_OTP_ReadCAVendor(void)
1935*53ee8cc1Swenshuai.xi {
1936*53ee8cc1Swenshuai.xi MS_U32 u32CAV_Key_VendorID[CA_SCK_NUM] = {0}; // Store all VendorID
1937*53ee8cc1Swenshuai.xi MS_U32 u32CAV_Key_VendorID_Hi = 24; //High bit of VendorID in Key property
1938*53ee8cc1Swenshuai.xi MS_U32 u32CAV_Key_VendorID_Lo = 20; //Low bit of VendorID in Key property
1939*53ee8cc1Swenshuai.xi
1940*53ee8cc1Swenshuai.xi MS_U32 u32CAV1_VendorID = 0;
1941*53ee8cc1Swenshuai.xi MS_U32 u32CAV2_VendorID = 0;
1942*53ee8cc1Swenshuai.xi MS_U32 u32CAV_Vendor = 0;
1943*53ee8cc1Swenshuai.xi MS_U32 u32CAV_Vendor_Shift = 16;
1944*53ee8cc1Swenshuai.xi MS_U32 u32CAV_Vendor_Num = 0; // Calculate how many different VendorID
1945*53ee8cc1Swenshuai.xi
1946*53ee8cc1Swenshuai.xi MS_U32 u32Idx = 0;
1947*53ee8cc1Swenshuai.xi MS_U32 u32Addr = 0;
1948*53ee8cc1Swenshuai.xi MS_U32 u32Shift = 0;
1949*53ee8cc1Swenshuai.xi MS_U32 u32Mask = 0;
1950*53ee8cc1Swenshuai.xi
1951*53ee8cc1Swenshuai.xi // Read VendorID of U_OTP_CAV_Keyn_Property
1952*53ee8cc1Swenshuai.xi for(u32Idx = 0; u32Idx < CA_SCK_NUM; u32Idx++)
1953*53ee8cc1Swenshuai.xi {
1954*53ee8cc1Swenshuai.xi u32Addr = _HAL_CA_OTP_Addr[u32Idx + U_OTP_CAV_Key1_Property].u32Addr;
1955*53ee8cc1Swenshuai.xi u32Shift = u32CAV_Key_VendorID_Lo;
1956*53ee8cc1Swenshuai.xi u32Mask = bitmask(u32CAV_Key_VendorID_Hi, u32CAV_Key_VendorID_Lo);
1957*53ee8cc1Swenshuai.xi
1958*53ee8cc1Swenshuai.xi u32CAV_Key_VendorID[u32Idx] = (HAL_CA_OTP_Read(u32Addr) & u32Mask) >> u32Shift;
1959*53ee8cc1Swenshuai.xi }
1960*53ee8cc1Swenshuai.xi
1961*53ee8cc1Swenshuai.xi // Assign VendorID
1962*53ee8cc1Swenshuai.xi for(u32Idx = 0; u32Idx < CA_SCK_NUM; u32Idx++)
1963*53ee8cc1Swenshuai.xi {
1964*53ee8cc1Swenshuai.xi // First non NULL VendorID assign to u32CAV1_VendorID
1965*53ee8cc1Swenshuai.xi if( (0 == u32CAV_Vendor_Num) && (CA_OTP_VENDOR_ID_NULL != u32CAV_Key_VendorID[u32Idx]) )
1966*53ee8cc1Swenshuai.xi {
1967*53ee8cc1Swenshuai.xi u32CAV1_VendorID = u32CAV_Key_VendorID[u32Idx];
1968*53ee8cc1Swenshuai.xi u32CAV_Vendor_Num++;
1969*53ee8cc1Swenshuai.xi }
1970*53ee8cc1Swenshuai.xi // Second non NULL and not u32CAV1_VendorID VendorID assign to u32CAV2_VendorID
1971*53ee8cc1Swenshuai.xi else if( (1 == u32CAV_Vendor_Num) && (CA_OTP_VENDOR_ID_NULL != u32CAV_Key_VendorID[u32Idx]) )
1972*53ee8cc1Swenshuai.xi {
1973*53ee8cc1Swenshuai.xi if(u32CAV1_VendorID != u32CAV_Key_VendorID[u32Idx])
1974*53ee8cc1Swenshuai.xi {
1975*53ee8cc1Swenshuai.xi u32CAV2_VendorID = u32CAV_Key_VendorID[u32Idx];
1976*53ee8cc1Swenshuai.xi u32CAV_Vendor_Num++;
1977*53ee8cc1Swenshuai.xi }
1978*53ee8cc1Swenshuai.xi }
1979*53ee8cc1Swenshuai.xi // If third non NULL, not u32CAV1_VendorID and not u32CAV2_VendorID VendorID
1980*53ee8cc1Swenshuai.xi else if( (2 <= u32CAV_Vendor_Num) && (CA_OTP_VENDOR_ID_NULL != u32CAV_Key_VendorID[u32Idx]) )
1981*53ee8cc1Swenshuai.xi {
1982*53ee8cc1Swenshuai.xi if( (u32CAV1_VendorID != u32CAV_Key_VendorID[u32Idx]) && (u32CAV2_VendorID != u32CAV_Key_VendorID[u32Idx]) )
1983*53ee8cc1Swenshuai.xi {
1984*53ee8cc1Swenshuai.xi u32CAV1_VendorID = CA_OTP_VENDOR_ID_UNKNOW;
1985*53ee8cc1Swenshuai.xi u32CAV2_VendorID = CA_OTP_VENDOR_ID_UNKNOW;
1986*53ee8cc1Swenshuai.xi u32CAV_Vendor_Num++;
1987*53ee8cc1Swenshuai.xi }
1988*53ee8cc1Swenshuai.xi
1989*53ee8cc1Swenshuai.xi }
1990*53ee8cc1Swenshuai.xi }
1991*53ee8cc1Swenshuai.xi
1992*53ee8cc1Swenshuai.xi // Transform VendorID to Vendor code
1993*53ee8cc1Swenshuai.xi switch(u32CAV1_VendorID)
1994*53ee8cc1Swenshuai.xi {
1995*53ee8cc1Swenshuai.xi case CA_OTP_VENDOR_ID_NULL:
1996*53ee8cc1Swenshuai.xi break;
1997*53ee8cc1Swenshuai.xi case CA_OTP_VENDOR_ID_NDS:
1998*53ee8cc1Swenshuai.xi u32CAV_Vendor = u32CAV_Vendor | E_CA_VENDOR_NDS;
1999*53ee8cc1Swenshuai.xi break;
2000*53ee8cc1Swenshuai.xi case CA_OTP_VENDOR_ID_NAGRA:
2001*53ee8cc1Swenshuai.xi u32CAV_Vendor = u32CAV_Vendor | E_CA_VENDOR_NAGRA;
2002*53ee8cc1Swenshuai.xi break;
2003*53ee8cc1Swenshuai.xi case CA_OTP_VENDOR_ID_VIACCESS:
2004*53ee8cc1Swenshuai.xi u32CAV_Vendor = u32CAV_Vendor | E_CA_VENDOR_VIACCESS;
2005*53ee8cc1Swenshuai.xi break;
2006*53ee8cc1Swenshuai.xi case CA_OTP_VENDOR_ID_IRDETO:
2007*53ee8cc1Swenshuai.xi u32CAV_Vendor = u32CAV_Vendor | E_CA_VENDOR_IRDETO;
2008*53ee8cc1Swenshuai.xi break;
2009*53ee8cc1Swenshuai.xi case CA_OTP_VENDOR_ID_VERIMATRIX:
2010*53ee8cc1Swenshuai.xi u32CAV_Vendor = u32CAV_Vendor | E_CA_VENDOR_VERIMATRIX;
2011*53ee8cc1Swenshuai.xi break;
2012*53ee8cc1Swenshuai.xi case CA_OTP_VENDOR_ID_SMI:
2013*53ee8cc1Swenshuai.xi u32CAV_Vendor = u32CAV_Vendor | E_CA_VENDOR_SMI;
2014*53ee8cc1Swenshuai.xi break;
2015*53ee8cc1Swenshuai.xi case CA_OTP_VENDOR_ID_CONAX:
2016*53ee8cc1Swenshuai.xi u32CAV_Vendor = u32CAV_Vendor | E_CA_VENDOR_CONAX;
2017*53ee8cc1Swenshuai.xi break;
2018*53ee8cc1Swenshuai.xi case CA_OTP_VENDOR_ID_LATENS:
2019*53ee8cc1Swenshuai.xi u32CAV_Vendor = u32CAV_Vendor | E_CA_VENDOR_LATENS;
2020*53ee8cc1Swenshuai.xi break;
2021*53ee8cc1Swenshuai.xi case CA_OTP_VENDOR_ID_ECHOSTAR:
2022*53ee8cc1Swenshuai.xi u32CAV_Vendor = u32CAV_Vendor | E_CA_VENDOR_ECHOSTAR;
2023*53ee8cc1Swenshuai.xi break;
2024*53ee8cc1Swenshuai.xi default:
2025*53ee8cc1Swenshuai.xi u32CAV_Vendor = u32CAV_Vendor | E_CA_VENDOR_UNKNOW;
2026*53ee8cc1Swenshuai.xi }
2027*53ee8cc1Swenshuai.xi
2028*53ee8cc1Swenshuai.xi switch(u32CAV2_VendorID)
2029*53ee8cc1Swenshuai.xi {
2030*53ee8cc1Swenshuai.xi case CA_OTP_VENDOR_ID_NULL:
2031*53ee8cc1Swenshuai.xi break;
2032*53ee8cc1Swenshuai.xi case CA_OTP_VENDOR_ID_NDS:
2033*53ee8cc1Swenshuai.xi u32CAV_Vendor = u32CAV_Vendor | E_CA_VENDOR_NDS << u32CAV_Vendor_Shift;
2034*53ee8cc1Swenshuai.xi break;
2035*53ee8cc1Swenshuai.xi case CA_OTP_VENDOR_ID_NAGRA:
2036*53ee8cc1Swenshuai.xi u32CAV_Vendor = u32CAV_Vendor | E_CA_VENDOR_NAGRA << u32CAV_Vendor_Shift;
2037*53ee8cc1Swenshuai.xi break;
2038*53ee8cc1Swenshuai.xi case CA_OTP_VENDOR_ID_VIACCESS:
2039*53ee8cc1Swenshuai.xi u32CAV_Vendor = u32CAV_Vendor | E_CA_VENDOR_VIACCESS << u32CAV_Vendor_Shift;
2040*53ee8cc1Swenshuai.xi break;
2041*53ee8cc1Swenshuai.xi case CA_OTP_VENDOR_ID_IRDETO:
2042*53ee8cc1Swenshuai.xi u32CAV_Vendor = u32CAV_Vendor | E_CA_VENDOR_IRDETO << u32CAV_Vendor_Shift;
2043*53ee8cc1Swenshuai.xi break;
2044*53ee8cc1Swenshuai.xi case CA_OTP_VENDOR_ID_VERIMATRIX:
2045*53ee8cc1Swenshuai.xi u32CAV_Vendor = u32CAV_Vendor | E_CA_VENDOR_VERIMATRIX << u32CAV_Vendor_Shift;
2046*53ee8cc1Swenshuai.xi break;
2047*53ee8cc1Swenshuai.xi case CA_OTP_VENDOR_ID_SMI:
2048*53ee8cc1Swenshuai.xi u32CAV_Vendor = u32CAV_Vendor | E_CA_VENDOR_SMI << u32CAV_Vendor_Shift;
2049*53ee8cc1Swenshuai.xi break;
2050*53ee8cc1Swenshuai.xi case CA_OTP_VENDOR_ID_CONAX:
2051*53ee8cc1Swenshuai.xi u32CAV_Vendor = u32CAV_Vendor | E_CA_VENDOR_CONAX << u32CAV_Vendor_Shift;
2052*53ee8cc1Swenshuai.xi break;
2053*53ee8cc1Swenshuai.xi case CA_OTP_VENDOR_ID_LATENS:
2054*53ee8cc1Swenshuai.xi u32CAV_Vendor = u32CAV_Vendor | E_CA_VENDOR_LATENS << u32CAV_Vendor_Shift;
2055*53ee8cc1Swenshuai.xi break;
2056*53ee8cc1Swenshuai.xi case CA_OTP_VENDOR_ID_ECHOSTAR:
2057*53ee8cc1Swenshuai.xi u32CAV_Vendor = u32CAV_Vendor | E_CA_VENDOR_ECHOSTAR << u32CAV_Vendor_Shift;
2058*53ee8cc1Swenshuai.xi break;
2059*53ee8cc1Swenshuai.xi default:
2060*53ee8cc1Swenshuai.xi u32CAV_Vendor = u32CAV_Vendor | E_CA_VENDOR_UNKNOW << u32CAV_Vendor_Shift;
2061*53ee8cc1Swenshuai.xi }
2062*53ee8cc1Swenshuai.xi
2063*53ee8cc1Swenshuai.xi return u32CAV_Vendor;
2064*53ee8cc1Swenshuai.xi }
2065*53ee8cc1Swenshuai.xi
2066*53ee8cc1Swenshuai.xi
HAL_CA_STR_SetBank(MS_U32 u32Bank)2067*53ee8cc1Swenshuai.xi void HAL_CA_STR_SetBank(MS_U32 u32Bank)
2068*53ee8cc1Swenshuai.xi {
2069*53ee8cc1Swenshuai.xi _u32REGPMBase = u32Bank;
2070*53ee8cc1Swenshuai.xi
2071*53ee8cc1Swenshuai.xi return;
2072*53ee8cc1Swenshuai.xi }
2073*53ee8cc1Swenshuai.xi
HAL_CA_STR_EnableKey(void)2074*53ee8cc1Swenshuai.xi void HAL_CA_STR_EnableKey(void)
2075*53ee8cc1Swenshuai.xi {
2076*53ee8cc1Swenshuai.xi MS_U16 u16Tmp = 0;
2077*53ee8cc1Swenshuai.xi u16Tmp = REG16_PM(REG_STR_KEY);
2078*53ee8cc1Swenshuai.xi u16Tmp |= REG_STR_DMA_KEY_VALID;
2079*53ee8cc1Swenshuai.xi REG16_PM(REG_STR_KEY) = u16Tmp;
2080*53ee8cc1Swenshuai.xi
2081*53ee8cc1Swenshuai.xi return;
2082*53ee8cc1Swenshuai.xi }
2083*53ee8cc1Swenshuai.xi
HAL_CA_STR_SetMAC(MS_U8 * pu8STRMAC,MS_U32 u32STRMACSize)2084*53ee8cc1Swenshuai.xi void HAL_CA_STR_SetMAC(MS_U8* pu8STRMAC, MS_U32 u32STRMACSize)
2085*53ee8cc1Swenshuai.xi {
2086*53ee8cc1Swenshuai.xi MS_U8 i = 0;
2087*53ee8cc1Swenshuai.xi
2088*53ee8cc1Swenshuai.xi for(i = 0; i < (u32STRMACSize/2); i++) {
2089*53ee8cc1Swenshuai.xi REG16_PM(REG_STR_AUTH_RESULT + i*4) = (pu8STRMAC[i*2 + 1]<<8 |pu8STRMAC[i*2]);
2090*53ee8cc1Swenshuai.xi }
2091*53ee8cc1Swenshuai.xi
2092*53ee8cc1Swenshuai.xi return;
2093*53ee8cc1Swenshuai.xi }
2094*53ee8cc1Swenshuai.xi
HAL_CA_STR_SetParamAddr(MS_U8 * pu8BAddr)2095*53ee8cc1Swenshuai.xi void HAL_CA_STR_SetParamAddr(MS_U8 *pu8BAddr)
2096*53ee8cc1Swenshuai.xi {
2097*53ee8cc1Swenshuai.xi MS_U16 u16Tmp = 0;
2098*53ee8cc1Swenshuai.xi
2099*53ee8cc1Swenshuai.xi u16Tmp = ((MS_VIRT)pu8BAddr & 0x0000FFFF);
2100*53ee8cc1Swenshuai.xi REG16_PM(REG_STR_PTR) = u16Tmp;
2101*53ee8cc1Swenshuai.xi
2102*53ee8cc1Swenshuai.xi u16Tmp = ((MS_VIRT)pu8BAddr & 0xFFFF0000)>>16;
2103*53ee8cc1Swenshuai.xi REG16_PM(REG_STR_PTR + 4) = u16Tmp;
2104*53ee8cc1Swenshuai.xi
2105*53ee8cc1Swenshuai.xi return;
2106*53ee8cc1Swenshuai.xi }
2107*53ee8cc1Swenshuai.xi
HAL_CA_STR_EnableWarmBoot(void)2108*53ee8cc1Swenshuai.xi void HAL_CA_STR_EnableWarmBoot(void)
2109*53ee8cc1Swenshuai.xi {
2110*53ee8cc1Swenshuai.xi //Oneway
2111*53ee8cc1Swenshuai.xi REG16_PM(REG_WARM_BOOT_IND) = REG_WARM_BOOT_IND_MAGIC;
2112*53ee8cc1Swenshuai.xi
2113*53ee8cc1Swenshuai.xi return;
2114*53ee8cc1Swenshuai.xi }
HAL_CA_OTP_SetSecretKey(CA_SECRET_KEY eKeySel,const MS_U8 * pu8SecretKey,MS_U32 u32Size)2115*53ee8cc1Swenshuai.xi MS_BOOL HAL_CA_OTP_SetSecretKey(CA_SECRET_KEY eKeySel, const MS_U8 *pu8SecretKey, MS_U32 u32Size)
2116*53ee8cc1Swenshuai.xi {
2117*53ee8cc1Swenshuai.xi
2118*53ee8cc1Swenshuai.xi MS_U32 secret_key[4] = {0};
2119*53ee8cc1Swenshuai.xi MS_U32 i, j, u32Addr;
2120*53ee8cc1Swenshuai.xi MS_U8 *p = (MS_U8 *)secret_key;
2121*53ee8cc1Swenshuai.xi switch(eKeySel)
2122*53ee8cc1Swenshuai.xi {
2123*53ee8cc1Swenshuai.xi case E_CA_SECRET_KEY1:
2124*53ee8cc1Swenshuai.xi u32Addr = _HAL_CA_OTP_Addr[U_OTP_CAV_SecretKey1].u32Addr;
2125*53ee8cc1Swenshuai.xi break;
2126*53ee8cc1Swenshuai.xi case E_CA_SECRET_KEY2:
2127*53ee8cc1Swenshuai.xi u32Addr = _HAL_CA_OTP_Addr[U_OTP_CAV_SecretKey2].u32Addr;
2128*53ee8cc1Swenshuai.xi break;
2129*53ee8cc1Swenshuai.xi case E_CA_SECRET_KEY3:
2130*53ee8cc1Swenshuai.xi u32Addr = _HAL_CA_OTP_Addr[U_OTP_CAV_SecretKey3].u32Addr;
2131*53ee8cc1Swenshuai.xi break;
2132*53ee8cc1Swenshuai.xi case E_CA_SECRET_KEY4:
2133*53ee8cc1Swenshuai.xi u32Addr = _HAL_CA_OTP_Addr[U_OTP_CAV_SecretKey4].u32Addr;
2134*53ee8cc1Swenshuai.xi break;
2135*53ee8cc1Swenshuai.xi case E_CA_SECRET_KEY5:
2136*53ee8cc1Swenshuai.xi u32Addr = _HAL_CA_OTP_Addr[U_OTP_CAV_SecretKey5].u32Addr;
2137*53ee8cc1Swenshuai.xi break;
2138*53ee8cc1Swenshuai.xi case E_CA_SECRET_KEY6:
2139*53ee8cc1Swenshuai.xi u32Addr = _HAL_CA_OTP_Addr[U_OTP_CAV_SecretKey6].u32Addr;
2140*53ee8cc1Swenshuai.xi break;
2141*53ee8cc1Swenshuai.xi case E_CA_SECRET_KEY7:
2142*53ee8cc1Swenshuai.xi u32Addr = _HAL_CA_OTP_Addr[U_OTP_CAV_SecretKey7].u32Addr;
2143*53ee8cc1Swenshuai.xi break;
2144*53ee8cc1Swenshuai.xi case E_CA_SECRET_KEY8:
2145*53ee8cc1Swenshuai.xi u32Addr = _HAL_CA_OTP_Addr[U_OTP_CAV_SecretKey8].u32Addr;
2146*53ee8cc1Swenshuai.xi break;
2147*53ee8cc1Swenshuai.xi default:
2148*53ee8cc1Swenshuai.xi return FALSE;
2149*53ee8cc1Swenshuai.xi }
2150*53ee8cc1Swenshuai.xi
2151*53ee8cc1Swenshuai.xi if(sizeof(secret_key)>u32Size)
2152*53ee8cc1Swenshuai.xi {
2153*53ee8cc1Swenshuai.xi j = u32Size;
2154*53ee8cc1Swenshuai.xi }
2155*53ee8cc1Swenshuai.xi else
2156*53ee8cc1Swenshuai.xi {
2157*53ee8cc1Swenshuai.xi j=sizeof(secret_key);
2158*53ee8cc1Swenshuai.xi }
2159*53ee8cc1Swenshuai.xi for(i = 0; i < sizeof(secret_key) && i < u32Size; i++)
2160*53ee8cc1Swenshuai.xi {
2161*53ee8cc1Swenshuai.xi p[i] = pu8SecretKey[(j-1)-i]; // Array reverse, for user easy viewing
2162*53ee8cc1Swenshuai.xi }
2163*53ee8cc1Swenshuai.xi
2164*53ee8cc1Swenshuai.xi for(i = 0; i < 4; i++)
2165*53ee8cc1Swenshuai.xi {
2166*53ee8cc1Swenshuai.xi if(HAL_CA_OTP_Write(u32Addr,secret_key[i]) == FALSE)
2167*53ee8cc1Swenshuai.xi {
2168*53ee8cc1Swenshuai.xi return FALSE;
2169*53ee8cc1Swenshuai.xi }
2170*53ee8cc1Swenshuai.xi u32Addr += 4;
2171*53ee8cc1Swenshuai.xi }
2172*53ee8cc1Swenshuai.xi return TRUE;
2173*53ee8cc1Swenshuai.xi }
2174*53ee8cc1Swenshuai.xi
HAL_CA_OTP_GetSecretKey(CA_SECRET_KEY eKeySel,MS_U8 * pu8SecretKey,MS_U32 u32Size)2175*53ee8cc1Swenshuai.xi MS_BOOL HAL_CA_OTP_GetSecretKey(CA_SECRET_KEY eKeySel, MS_U8 *pu8SecretKey, MS_U32 u32Size)
2176*53ee8cc1Swenshuai.xi {
2177*53ee8cc1Swenshuai.xi MS_U32 secret_key[4] = {0};
2178*53ee8cc1Swenshuai.xi MS_U32 i, j, u32Addr;
2179*53ee8cc1Swenshuai.xi MS_U8 *p = (MS_U8 *)secret_key;
2180*53ee8cc1Swenshuai.xi
2181*53ee8cc1Swenshuai.xi switch(eKeySel)
2182*53ee8cc1Swenshuai.xi {
2183*53ee8cc1Swenshuai.xi case E_CA_SECRET_KEY1:
2184*53ee8cc1Swenshuai.xi u32Addr = _HAL_CA_OTP_Addr[U_OTP_CAV_SecretKey1].u32Addr;
2185*53ee8cc1Swenshuai.xi break;
2186*53ee8cc1Swenshuai.xi case E_CA_SECRET_KEY2:
2187*53ee8cc1Swenshuai.xi u32Addr = _HAL_CA_OTP_Addr[U_OTP_CAV_SecretKey2].u32Addr;
2188*53ee8cc1Swenshuai.xi break;
2189*53ee8cc1Swenshuai.xi case E_CA_SECRET_KEY3:
2190*53ee8cc1Swenshuai.xi u32Addr = _HAL_CA_OTP_Addr[U_OTP_CAV_SecretKey3].u32Addr;
2191*53ee8cc1Swenshuai.xi break;
2192*53ee8cc1Swenshuai.xi case E_CA_SECRET_KEY4:
2193*53ee8cc1Swenshuai.xi u32Addr = _HAL_CA_OTP_Addr[U_OTP_CAV_SecretKey4].u32Addr;
2194*53ee8cc1Swenshuai.xi break;
2195*53ee8cc1Swenshuai.xi case E_CA_SECRET_KEY5:
2196*53ee8cc1Swenshuai.xi u32Addr = _HAL_CA_OTP_Addr[U_OTP_CAV_SecretKey5].u32Addr;
2197*53ee8cc1Swenshuai.xi break;
2198*53ee8cc1Swenshuai.xi case E_CA_SECRET_KEY6:
2199*53ee8cc1Swenshuai.xi u32Addr = _HAL_CA_OTP_Addr[U_OTP_CAV_SecretKey6].u32Addr;
2200*53ee8cc1Swenshuai.xi break;
2201*53ee8cc1Swenshuai.xi case E_CA_SECRET_KEY7:
2202*53ee8cc1Swenshuai.xi u32Addr = _HAL_CA_OTP_Addr[U_OTP_CAV_SecretKey7].u32Addr;
2203*53ee8cc1Swenshuai.xi break;
2204*53ee8cc1Swenshuai.xi case E_CA_SECRET_KEY8:
2205*53ee8cc1Swenshuai.xi u32Addr = _HAL_CA_OTP_Addr[U_OTP_CAV_SecretKey8].u32Addr;
2206*53ee8cc1Swenshuai.xi break;
2207*53ee8cc1Swenshuai.xi default:
2208*53ee8cc1Swenshuai.xi return FALSE;
2209*53ee8cc1Swenshuai.xi }
2210*53ee8cc1Swenshuai.xi for(i = 0; i < 4; i++)
2211*53ee8cc1Swenshuai.xi {
2212*53ee8cc1Swenshuai.xi secret_key[i] = HAL_CA_OTP_Read(u32Addr);
2213*53ee8cc1Swenshuai.xi u32Addr += 4;
2214*53ee8cc1Swenshuai.xi }
2215*53ee8cc1Swenshuai.xi
2216*53ee8cc1Swenshuai.xi if(sizeof(secret_key)>u32Size)
2217*53ee8cc1Swenshuai.xi {
2218*53ee8cc1Swenshuai.xi j = u32Size;
2219*53ee8cc1Swenshuai.xi }
2220*53ee8cc1Swenshuai.xi else
2221*53ee8cc1Swenshuai.xi {
2222*53ee8cc1Swenshuai.xi j=sizeof(secret_key);
2223*53ee8cc1Swenshuai.xi }
2224*53ee8cc1Swenshuai.xi
2225*53ee8cc1Swenshuai.xi for(i = 0; i < sizeof(secret_key) && i < u32Size; i++)
2226*53ee8cc1Swenshuai.xi {
2227*53ee8cc1Swenshuai.xi pu8SecretKey[i] = p[(j-1)-i]; // Array reverse, for user easy viewing
2228*53ee8cc1Swenshuai.xi }
2229*53ee8cc1Swenshuai.xi
2230*53ee8cc1Swenshuai.xi return TRUE;
2231*53ee8cc1Swenshuai.xi }
2232*53ee8cc1Swenshuai.xi
HAL_CA_OTP_SetRSAKey(CA_RSA_KEY eKeySel,const MS_U8 * pu8RSAKey,MS_U32 u32Size)2233*53ee8cc1Swenshuai.xi MS_BOOL HAL_CA_OTP_SetRSAKey(CA_RSA_KEY eKeySel, const MS_U8 *pu8RSAKey, MS_U32 u32Size)
2234*53ee8cc1Swenshuai.xi {
2235*53ee8cc1Swenshuai.xi MS_U32 RSA_key[64] = {0};
2236*53ee8cc1Swenshuai.xi MS_U32 i, u32Addr;
2237*53ee8cc1Swenshuai.xi MS_U8 *p = (MS_U8 *)RSA_key;
2238*53ee8cc1Swenshuai.xi
2239*53ee8cc1Swenshuai.xi switch(eKeySel)
2240*53ee8cc1Swenshuai.xi {
2241*53ee8cc1Swenshuai.xi case E_CA_RSA_KEY0:
2242*53ee8cc1Swenshuai.xi return FALSE;
2243*53ee8cc1Swenshuai.xi case E_CA_RSA_KEY1:
2244*53ee8cc1Swenshuai.xi u32Addr = _HAL_CA_OTP_Addr[U_OTP_RSA_1].u32Addr;
2245*53ee8cc1Swenshuai.xi break;
2246*53ee8cc1Swenshuai.xi default:
2247*53ee8cc1Swenshuai.xi return FALSE;
2248*53ee8cc1Swenshuai.xi }
2249*53ee8cc1Swenshuai.xi
2250*53ee8cc1Swenshuai.xi for(i = 0; i < sizeof(RSA_key) && i < u32Size; i++)
2251*53ee8cc1Swenshuai.xi {
2252*53ee8cc1Swenshuai.xi p[i] = pu8RSAKey[i];
2253*53ee8cc1Swenshuai.xi }
2254*53ee8cc1Swenshuai.xi for(i = 0; i < 64; i++)
2255*53ee8cc1Swenshuai.xi {
2256*53ee8cc1Swenshuai.xi if(HAL_CA_OTP_Write(u32Addr,RSA_key[i]) == FALSE)
2257*53ee8cc1Swenshuai.xi {
2258*53ee8cc1Swenshuai.xi return FALSE;
2259*53ee8cc1Swenshuai.xi }
2260*53ee8cc1Swenshuai.xi u32Addr += 4;
2261*53ee8cc1Swenshuai.xi }
2262*53ee8cc1Swenshuai.xi
2263*53ee8cc1Swenshuai.xi return TRUE;
2264*53ee8cc1Swenshuai.xi }
HAL_CA_OTP_GetRSAKey(CA_RSA_KEY eKeySel,MS_U8 * pu8RSAKey,MS_U32 u32Size)2265*53ee8cc1Swenshuai.xi MS_BOOL HAL_CA_OTP_GetRSAKey(CA_RSA_KEY eKeySel, MS_U8 *pu8RSAKey, MS_U32 u32Size)
2266*53ee8cc1Swenshuai.xi {
2267*53ee8cc1Swenshuai.xi MS_U32 RSA_key[64] = {0};
2268*53ee8cc1Swenshuai.xi MS_U32 i, u32Addr;
2269*53ee8cc1Swenshuai.xi MS_U8 *p = (MS_U8 *)RSA_key;
2270*53ee8cc1Swenshuai.xi
2271*53ee8cc1Swenshuai.xi switch(eKeySel)
2272*53ee8cc1Swenshuai.xi {
2273*53ee8cc1Swenshuai.xi case E_CA_RSA_KEY0:
2274*53ee8cc1Swenshuai.xi return FALSE;
2275*53ee8cc1Swenshuai.xi break;
2276*53ee8cc1Swenshuai.xi case E_CA_RSA_KEY1:
2277*53ee8cc1Swenshuai.xi u32Addr = _HAL_CA_OTP_Addr[U_OTP_RSA_1].u32Addr;
2278*53ee8cc1Swenshuai.xi break;
2279*53ee8cc1Swenshuai.xi default:
2280*53ee8cc1Swenshuai.xi return FALSE;
2281*53ee8cc1Swenshuai.xi }
2282*53ee8cc1Swenshuai.xi for(i = 0; i < 64; i++)
2283*53ee8cc1Swenshuai.xi {
2284*53ee8cc1Swenshuai.xi RSA_key[i] = HAL_CA_OTP_Read(u32Addr);
2285*53ee8cc1Swenshuai.xi u32Addr += 4;
2286*53ee8cc1Swenshuai.xi }
2287*53ee8cc1Swenshuai.xi for(i = 0; i < sizeof(RSA_key) && i < u32Size; i++)
2288*53ee8cc1Swenshuai.xi {
2289*53ee8cc1Swenshuai.xi pu8RSAKey[i] = p[i];
2290*53ee8cc1Swenshuai.xi }
2291*53ee8cc1Swenshuai.xi
2292*53ee8cc1Swenshuai.xi return TRUE;
2293*53ee8cc1Swenshuai.xi }
2294*53ee8cc1Swenshuai.xi
2295*53ee8cc1Swenshuai.xi
HAL_CA_OTP_SetDebugPortPassword(CA_DEBUG_PORT eDebugPort,const MS_U8 * pu8Password,MS_U32 u32Size)2296*53ee8cc1Swenshuai.xi MS_BOOL HAL_CA_OTP_SetDebugPortPassword(CA_DEBUG_PORT eDebugPort, const MS_U8 *pu8Password, MS_U32 u32Size)
2297*53ee8cc1Swenshuai.xi {
2298*53ee8cc1Swenshuai.xi
2299*53ee8cc1Swenshuai.xi MS_U32 pwd[4] = {0};
2300*53ee8cc1Swenshuai.xi MS_U32 i, j, u32Addr;
2301*53ee8cc1Swenshuai.xi MS_U8 *p = (MS_U8 *)pwd;
2302*53ee8cc1Swenshuai.xi
2303*53ee8cc1Swenshuai.xi switch(eDebugPort)
2304*53ee8cc1Swenshuai.xi {
2305*53ee8cc1Swenshuai.xi case E_CA_DEBUG_PORT_I2C:
2306*53ee8cc1Swenshuai.xi u32Addr = _HAL_CA_OTP_Addr[U_OTP_I2C_PWD].u32Addr;
2307*53ee8cc1Swenshuai.xi break;
2308*53ee8cc1Swenshuai.xi case E_CA_DEBUG_PORT_JTAG:
2309*53ee8cc1Swenshuai.xi u32Addr = _HAL_CA_OTP_Addr[U_OTP_EJTAG_PWD].u32Addr;
2310*53ee8cc1Swenshuai.xi break;
2311*53ee8cc1Swenshuai.xi case E_CA_DEBUG_PORT_SCAN:
2312*53ee8cc1Swenshuai.xi u32Addr = _HAL_CA_OTP_Addr[U_OTP_SCAN_PWD].u32Addr;
2313*53ee8cc1Swenshuai.xi break;
2314*53ee8cc1Swenshuai.xi default:
2315*53ee8cc1Swenshuai.xi return FALSE;
2316*53ee8cc1Swenshuai.xi }
2317*53ee8cc1Swenshuai.xi if(sizeof(pwd)>u32Size)
2318*53ee8cc1Swenshuai.xi {
2319*53ee8cc1Swenshuai.xi j = u32Size;
2320*53ee8cc1Swenshuai.xi }
2321*53ee8cc1Swenshuai.xi else
2322*53ee8cc1Swenshuai.xi {
2323*53ee8cc1Swenshuai.xi j=sizeof(pwd);
2324*53ee8cc1Swenshuai.xi }
2325*53ee8cc1Swenshuai.xi
2326*53ee8cc1Swenshuai.xi for(i = 0; i < sizeof(pwd) && i < u32Size; i++)
2327*53ee8cc1Swenshuai.xi {
2328*53ee8cc1Swenshuai.xi p[i] = pu8Password[(j-1)-i]; // Array reverse, for user easy viewing
2329*53ee8cc1Swenshuai.xi }
2330*53ee8cc1Swenshuai.xi
2331*53ee8cc1Swenshuai.xi
2332*53ee8cc1Swenshuai.xi for(i = 0; i < 4; i++)
2333*53ee8cc1Swenshuai.xi {
2334*53ee8cc1Swenshuai.xi if(HAL_CA_OTP_Write(u32Addr,pwd[i]) == FALSE)
2335*53ee8cc1Swenshuai.xi {
2336*53ee8cc1Swenshuai.xi return FALSE;
2337*53ee8cc1Swenshuai.xi }
2338*53ee8cc1Swenshuai.xi u32Addr += 4;
2339*53ee8cc1Swenshuai.xi }
2340*53ee8cc1Swenshuai.xi
2341*53ee8cc1Swenshuai.xi return TRUE;
2342*53ee8cc1Swenshuai.xi }
2343*53ee8cc1Swenshuai.xi
HAL_CA_OTP_GetDebugPortPassword(CA_DEBUG_PORT eDebugPort,MS_U8 * pu8Password,MS_U32 u32Size)2344*53ee8cc1Swenshuai.xi MS_BOOL HAL_CA_OTP_GetDebugPortPassword(CA_DEBUG_PORT eDebugPort, MS_U8 *pu8Password, MS_U32 u32Size)
2345*53ee8cc1Swenshuai.xi {
2346*53ee8cc1Swenshuai.xi MS_U32 pwd[4] = {0};
2347*53ee8cc1Swenshuai.xi MS_U32 i, j, u32Addr;
2348*53ee8cc1Swenshuai.xi MS_U8 *p = (MS_U8 *)pwd;
2349*53ee8cc1Swenshuai.xi
2350*53ee8cc1Swenshuai.xi switch(eDebugPort)
2351*53ee8cc1Swenshuai.xi {
2352*53ee8cc1Swenshuai.xi case E_CA_DEBUG_PORT_I2C:
2353*53ee8cc1Swenshuai.xi u32Addr = _HAL_CA_OTP_Addr[U_OTP_I2C_PWD].u32Addr;
2354*53ee8cc1Swenshuai.xi break;
2355*53ee8cc1Swenshuai.xi case E_CA_DEBUG_PORT_JTAG:
2356*53ee8cc1Swenshuai.xi u32Addr = _HAL_CA_OTP_Addr[U_OTP_EJTAG_PWD].u32Addr;
2357*53ee8cc1Swenshuai.xi break;
2358*53ee8cc1Swenshuai.xi case E_CA_DEBUG_PORT_SCAN:
2359*53ee8cc1Swenshuai.xi u32Addr = _HAL_CA_OTP_Addr[U_OTP_SCAN_PWD].u32Addr;
2360*53ee8cc1Swenshuai.xi break;
2361*53ee8cc1Swenshuai.xi default:
2362*53ee8cc1Swenshuai.xi return FALSE;
2363*53ee8cc1Swenshuai.xi }
2364*53ee8cc1Swenshuai.xi for(i = 0; i < 4; i++)
2365*53ee8cc1Swenshuai.xi {
2366*53ee8cc1Swenshuai.xi pwd[i] = HAL_CA_OTP_Read(u32Addr);
2367*53ee8cc1Swenshuai.xi u32Addr += 4;
2368*53ee8cc1Swenshuai.xi }
2369*53ee8cc1Swenshuai.xi if(sizeof(pwd)>u32Size)
2370*53ee8cc1Swenshuai.xi {
2371*53ee8cc1Swenshuai.xi j = u32Size;
2372*53ee8cc1Swenshuai.xi }
2373*53ee8cc1Swenshuai.xi else
2374*53ee8cc1Swenshuai.xi {
2375*53ee8cc1Swenshuai.xi j=sizeof(pwd);
2376*53ee8cc1Swenshuai.xi }
2377*53ee8cc1Swenshuai.xi for(i = 0; i < sizeof(pwd) &&i < u32Size; i++)
2378*53ee8cc1Swenshuai.xi {
2379*53ee8cc1Swenshuai.xi pu8Password[i] = p[(j-1)-i]; // Array reverse, for user easy viewing
2380*53ee8cc1Swenshuai.xi }
2381*53ee8cc1Swenshuai.xi return TRUE;
2382*53ee8cc1Swenshuai.xi }
2383*53ee8cc1Swenshuai.xi
HAL_CA_MaxReservedSize(void)2384*53ee8cc1Swenshuai.xi MS_U32 HAL_CA_MaxReservedSize(void)
2385*53ee8cc1Swenshuai.xi {
2386*53ee8cc1Swenshuai.xi HAL_CA_DEBUG("Not Implement\n");
2387*53ee8cc1Swenshuai.xi return FALSE;
2388*53ee8cc1Swenshuai.xi }
2389*53ee8cc1Swenshuai.xi
HAL_CA_OTP_WriteReserved(const MS_U8 * pu8RData,MS_U32 u32Size)2390*53ee8cc1Swenshuai.xi MS_BOOL HAL_CA_OTP_WriteReserved(const MS_U8 *pu8RData, MS_U32 u32Size)
2391*53ee8cc1Swenshuai.xi {
2392*53ee8cc1Swenshuai.xi MS_U32 u32rdata[32] = {0};
2393*53ee8cc1Swenshuai.xi MS_U32 i, u32Addr;
2394*53ee8cc1Swenshuai.xi MS_U32 u32ReservedSize = MAX_RESERVED_SIZE/4 ;
2395*53ee8cc1Swenshuai.xi MS_U8 *p = (MS_U8 *)u32rdata;
2396*53ee8cc1Swenshuai.xi
2397*53ee8cc1Swenshuai.xi for(i = 0; i < sizeof(u32rdata) && i < u32Size; i++)
2398*53ee8cc1Swenshuai.xi {
2399*53ee8cc1Swenshuai.xi p[i] = pu8RData[i];
2400*53ee8cc1Swenshuai.xi }
2401*53ee8cc1Swenshuai.xi
2402*53ee8cc1Swenshuai.xi u32Addr = _HAL_CA_OTP_Addr[U_OTP_REGION31].u32Addr;
2403*53ee8cc1Swenshuai.xi for(i = 0; i <u32ReservedSize; i++)
2404*53ee8cc1Swenshuai.xi {
2405*53ee8cc1Swenshuai.xi if(HAL_CA_OTP_Write(u32Addr,u32rdata[i]) == FALSE)
2406*53ee8cc1Swenshuai.xi {
2407*53ee8cc1Swenshuai.xi return FALSE;
2408*53ee8cc1Swenshuai.xi }
2409*53ee8cc1Swenshuai.xi u32Addr += 4;
2410*53ee8cc1Swenshuai.xi }
2411*53ee8cc1Swenshuai.xi
2412*53ee8cc1Swenshuai.xi return TRUE;
2413*53ee8cc1Swenshuai.xi }
2414*53ee8cc1Swenshuai.xi
HAL_CA_OTP_ReadReserved(MS_U8 * pu8RData,MS_U32 u32Size)2415*53ee8cc1Swenshuai.xi MS_BOOL HAL_CA_OTP_ReadReserved(MS_U8 *pu8RData, MS_U32 u32Size)
2416*53ee8cc1Swenshuai.xi {
2417*53ee8cc1Swenshuai.xi MS_U32 u32rdata[32] = {0};
2418*53ee8cc1Swenshuai.xi MS_U32 i, u32Addr;
2419*53ee8cc1Swenshuai.xi MS_U32 u32ReservedSize = MAX_RESERVED_SIZE/4 ;
2420*53ee8cc1Swenshuai.xi MS_U8 *p = (MS_U8 *)u32rdata;
2421*53ee8cc1Swenshuai.xi
2422*53ee8cc1Swenshuai.xi u32Addr = _HAL_CA_OTP_Addr[U_OTP_REGION31].u32Addr;
2423*53ee8cc1Swenshuai.xi for(i = 0; i < u32ReservedSize; i++)
2424*53ee8cc1Swenshuai.xi {
2425*53ee8cc1Swenshuai.xi u32rdata[i] = HAL_CA_OTP_Read(u32Addr);
2426*53ee8cc1Swenshuai.xi u32Addr += 4;
2427*53ee8cc1Swenshuai.xi }
2428*53ee8cc1Swenshuai.xi
2429*53ee8cc1Swenshuai.xi for(i = 0; i < sizeof(u32rdata) && i < u32Size; i++)
2430*53ee8cc1Swenshuai.xi {
2431*53ee8cc1Swenshuai.xi pu8RData[i] = p[i];
2432*53ee8cc1Swenshuai.xi }
2433*53ee8cc1Swenshuai.xi
2434*53ee8cc1Swenshuai.xi return TRUE;
2435*53ee8cc1Swenshuai.xi }
2436