blob: 4d3ba1b69d1a47f3a7b75f52575515b2ae66a8ed [file] [log] [blame]
rjw6c1fd8f2022-11-30 14:33:01 +08001/*****************************************************************************
2* Copyright Statement:
3* --------------------
4* This software is protected by Copyright and the information contained
5* herein is confidential. The software may not be copied and the information
6* contained herein may not be used or disclosed except with the written
7* permission of MediaTek Inc. (C) 2005
8*
9* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
10* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
11* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
12* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
13* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
14* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
15* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
16* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
17* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
18* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
19* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
20* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
21*
22* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
23* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
24* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
25* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
26* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
27*
28* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
29* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
30* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
31* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
32* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
33*
34*****************************************************************************/
35
36/*****************************************************************************
37 *
38 * Filename:
39 * ---------
40 * SST_secure.h
41 *
42 * Project:
43 * --------
44 * Maui_Software
45 *
46 * Description:
47 * ------------
48 * This is header file for SST_secure.c
49 *
50 * Author:
51 * -------
52 * -------
53 *
54 *============================================================================
55 * HISTORY
56 * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
57 *------------------------------------------------------------------------------
58 * removed!
59 * removed!
60 * removed!
61 *
62 * removed!
63 * removed!
64 * removed!
65 *
66 * removed!
67 * removed!
68 * removed!
69 *
70 * removed!
71 * removed!
72 * removed!
73 *
74 * removed!
75 * removed!
76 * removed!
77 *
78 * removed!
79 * removed!
80 * removed!
81 *
82 * removed!
83 * removed!
84 * removed!
85 *
86 * removed!
87 * removed!
88 * removed!
89 *
90 * removed!
91 * removed!
92 * removed!
93 * removed!
94 *
95 * removed!
96 * removed!
97 * removed!
98 * removed!
99 *
100 * removed!
101 * removed!
102 * removed!
103 *
104 * removed!
105 * removed!
106 * removed!
107 *
108 * removed!
109 * removed!
110 * removed!
111 *
112 * removed!
113 * removed!
114 * removed!
115 *
116 * removed!
117 * removed!
118 * removed!
119 *
120 * removed!
121 * removed!
122 * removed!
123 *
124 * removed!
125 * removed!
126 * removed!
127 *
128 * removed!
129 * removed!
130 * removed!
131 *
132 * removed!
133 * removed!
134 * removed!
135 *
136 * removed!
137 * removed!
138 * removed!
139 *
140 * removed!
141 * removed!
142 * removed!
143 *
144 * removed!
145 * removed!
146 * removed!
147 *
148 * removed!
149 * removed!
150 *
151 * removed!
152 * removed!
153 *
154 * removed!
155 * removed!
156 *
157 * removed!
158 * removed!
159 * removed!
160 *
161 * removed!
162 * removed!
163 * removed!
164 *
165 * removed!
166 * removed!
167 * removed!
168 *
169 * removed!
170 * removed!
171 * removed!
172 *
173 * removed!
174 * removed!
175 * removed!
176 *
177 * removed!
178 * removed!
179 *
180 * removed!
181 * removed!
182 * removed!
183 *
184 * removed!
185 * removed!
186 * removed!
187 *
188 * removed!
189 * removed!
190 * removed!
191 *
192 * removed!
193 * removed!
194 * removed!
195 *
196 * removed!
197 * removed!
198 * removed!
199 *
200 * removed!
201 * removed!
202 * removed!
203 *
204 * removed!
205 * removed!
206 * removed!
207 *
208 * removed!
209 * removed!
210 * removed!
211 * removed!
212 *
213 * removed!
214 * removed!
215 * removed!
216 *
217 * removed!
218 * removed!
219 * removed!
220 *
221 * removed!
222 * removed!
223 * removed!
224 *
225 * removed!
226 * removed!
227 * removed!
228 *
229 * removed!
230 * removed!
231 *
232 * removed!
233 * removed!
234 * removed!
235 * removed!
236 * removed!
237 * removed!
238 *
239 * removed!
240 * removed!
241 * removed!
242 *
243 * removed!
244 * removed!
245 * removed!
246 *
247 * removed!
248 * removed!
249 * removed!
250 *
251 * removed!
252 * removed!
253 * removed!
254 *
255 * removed!
256 * removed!
257 * removed!
258 *
259 * removed!
260 * removed!
261 * removed!
262 *
263 * removed!
264 * removed!
265 * removed!
266 *
267 * removed!
268 * removed!
269 * removed!
270 *
271 * removed!
272 * removed!
273 * removed!
274 *
275 * removed!
276 * removed!
277 * removed!
278 *
279 * removed!
280 * removed!
281 * removed!
282 *
283 * removed!
284 * removed!
285 * removed!
286 *
287 * removed!
288 * removed!
289 * removed!
290 *
291 * removed!
292 * removed!
293 * removed!
294 *
295 * removed!
296 * removed!
297 * removed!
298 *
299 * removed!
300 * removed!
301 * removed!
302 *
303 * removed!
304 * removed!
305 * removed!
306 *
307 * removed!
308 * removed!
309 * removed!
310 *
311 * removed!
312 * removed!
313 * removed!
314 *
315 * removed!
316 * removed!
317 * removed!
318 *
319 *------------------------------------------------------------------------------
320 * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
321 *============================================================================
322 ****************************************************************************/
323
324
325#ifndef __SST_SECURE_H__
326#define __SST_SECURE_H__
327
328/*******************************************************************************
329 * Included header files
330 *******************************************************************************/
331
332#include "kal_general_types.h"
333#include "nvram_data_items.h"
334#include "l4_nvram_def.h"
335
336#include "sst_interface.h"
337#include "kal_public_defs.h"
338#include "reg_base.h"
339
340/*************************************************************************
341 * External global data declaration
342 *************************************************************************/
343
344/*************************************************************************
345 * External Function Declaration
346 *************************************************************************/
347
348/*************************************************************************
349 * Type definitions
350 *************************************************************************/
351
352/* max size of NVRAM secret key in bytes*/
353#define NVRAM_KEY_GEN_AES_LEN 32
354#define NVRAM_KEY_GEN_MAX_KEY_LEN 256
355
356/* Error types of get NVRAM key*/
357#define GET_NVRAM_KEY_ERROR_NONE 0
358#define GET_NVRAM_KEY_ERROR_KEY_BUFFER_INVALID -1 // input buffer pointer is NULL
359#define GET_NVRAM_KEY_ERROR_KEY_SEED_BUFFER_INVALID -2 // input seed buffer pointer is NULL
360#define GET_NVRAM_KEY_ERROR_KEY_LEN_EXCEED_MAX -3 // input len exceed NVRAM_KEY_MAX_LEN
361#define GET_NVRAM_KEY_ERROR_KEY_SEED_LEN_NOT_MATCH -4
362
363
364#define PROTECTED_LID_ERROR_NONE 0x0
365#define PROTECTED_LID_ERROR_SECURE_NOT_ALLOWED 0x1000
366#define PROTECTED_LID_ERROR_NORMAL_R_FORBID 0x1001
367#define PROTECTED_LID_ERROR_NORMAL_W_FORBID 0x1002
368
369/* NVRAM AES en/decrypt related */
370#define NVRAM_AES_KEY_LEN_128BIT 16
371#define NVRAM_AES_KEY_LEN_192BIT 24
372#define NVRAM_AES_KEY_LEN_256BIT 32
373
374#define NVRAM_AES_ERROR_NONE 0
375#define NVRAM_AES_ERROR_KEY_LEN_ERROR -1
376#define NVRAM_AES_ERROR_DATA_LEN_NOT_ALIGN -2
377#define NVRAM_AES_ERROR_DATA_LEN_ERROR -3
378#define NVRAM_AES_ERROR_BUF_PTR_ERROR -4
379
380//AP efuse offset definition
381#if defined(MT6885) || defined(MT6873) || defined(MT6853) || defined(MT6833) || defined(MT6893)
382#define OFFSET_EFUSE_C_CTRL0 0x4C4
383#define OFFSET_EFUSE_C_CTRL1 0x4C8
384#define OFFSET_EFUSE_C_DAT0 0x510
385#define OFFSET_EFUSE_C_DAT1 0x514
386#define OFFSET_EFUSE_C_DAT2 0x518
387#define OFFSET_EFUSE_C_DAT3 0x51C
388#define OFFSET_EFUSE_C_DAT4 0x520
389#define OFFSET_EFUSE_C_DAT5 0x524
390#elif defined(CHIP10992)
391#define OFFSET_EFUSE_C_CTRL0 0x4C4
392#define OFFSET_EFUSE_C_CTRL1 0x4C8
393#define OFFSET_EFUSE_C_DAT0 0x510
394#define OFFSET_EFUSE_C_DAT1 0x514
395#define OFFSET_EFUSE_C_DAT2 0x518
396#define OFFSET_EFUSE_C_DAT3 0x51C
397#define OFFSET_EFUSE_C_DAT4 0x520
398#define OFFSET_EFUSE_C_DAT5 0x524
399#define OFFSET_EFUSE_C_DAT6 0x528
400#define OFFSET_EFUSE_C_DAT7 0x52C
401#else
402#define OFFSET_EFUSE_C_CTRL0 0x0
403#define OFFSET_EFUSE_C_CTRL1 0x0
404#define OFFSET_EFUSE_C_DAT0 0x0
405#define OFFSET_EFUSE_C_DAT1 0x0
406#define OFFSET_EFUSE_C_DAT2 0x0
407#define OFFSET_EFUSE_C_DAT3 0x0
408#define OFFSET_EFUSE_C_DAT4 0x0
409#define OFFSET_EFUSE_C_DAT5 0x0
410#endif
411
412#define OFFSET_EFUSE_AP_SBC_EN 0x60
413#define OFFSET_BIT_AP_SBC_EN 0x2
414#define BASE_AP_EFUSE_ADDR EFUSE_base
415
416//AP efuse offset array
417extern kal_uint32 ap_efuse_offset_arr[];
418
419#if defined(__SV5_ENABLED__) || defined(__SV5X_ENABLED__)
420#if defined(__SMART_PHONE_MODEM__) && defined(__X_BOOTING__)
421#define SECURE_RO_SIZE_OVERHEAD 0 //SEC_RO has no GFH for external phone
422#else
423#define SECURE_RO_SIZE_OVERHEAD 404
424#endif /*defined(__SMART_PHONE_MODEM__) && defined(__X_BOOTING__)*/
425#else
426#define SECURE_RO_SIZE_OVERHEAD 0
427#endif
428
429
430// AP HRID location
431#if defined(MT6763) || defined(MT6739) || defined(MT6295M) || defined(MT3967) || defined(MT6297) || defined(MT6779) || defined(MT6885) || defined(MT6873) || defined(MERCURY) || defined(MT6853) || defined(MT6833) || defined(MT6893) || defined(CHIP10992)
432#define EFUSE_HRID0 ((volatile unsigned *)(g_SST_EFUSE_base+0x0140))
433#define EFUSE_HRID1 ((volatile unsigned *)(g_SST_EFUSE_base+0x0144))
434#define EFUSE_HRID2 ((volatile unsigned *)(g_SST_EFUSE_base+0x0148))
435#define EFUSE_HRID3 ((volatile unsigned *)(g_SST_EFUSE_base+0x014C))
436#define SIZE_HRID (16)
437#else
438
439#error "Not Supported Chips"
440
441#endif
442
443/* AP/MD gen common AES key, bit enum */
444typedef enum{
445 AES_128 = 0,
446 AES_256 = 1,
447}AES_MODE;
448
449#define HW_AES_ENCRYPT 1
450#define HW_AES_DECRYPT 0
451/*************************************************************************
452 * Export API of SSS and SST
453 *************************************************************************/
454extern kal_bool SST_Is_Secure_BB(void);
455
456
457
458extern void SST_Secure_Algo (kal_uint8 Direction, kal_uint32 ContentAddr,
459 kal_uint32 ContentLen, kal_uint8 *CustomSeed,
460 kal_uint8 *ResText);
461
462extern void SST_Secure_Algo_With_Level (kal_uint8 Direction, kal_uint32 ContentAddr,
463 kal_uint32 ContentLen, kal_uint8 *CustomSeed, kal_uint32 Level,
464 kal_uint8 *ResText);
465
466extern kal_bool SST_Get_NVRAM_Key(kal_uint32 *p_key, kal_uint32 *p_addr, kal_uint32 *p_len);
467
468extern void SSS_Init_Share_Crypto_Drv(void * cb_ts_record, void * cb_ts_info, kal_uint32 init_tbl);
469
470extern void SSS_Init_Crypto_Drv(void * cb_ts_record, void * cb_ts_info);
471
472/*****************************************************************************
473 * FUNCTION
474 * SST_NVRAM_Data_Access_Check
475 * DESCRIPTION
476 * This function is to check the access to sensive or secure NVRAM data item.
477 * It is for internal used for NVRAM and security.
478 * PARAMETERS
479 * LID: [IN] NVRAM LID
480 * rw: [IN] read or write access : 0 => read, 1 => write
481 * is_secure_data_access: [IN] Secure or normal access : 0 => normal, 1 => secure
482 * RETURNS
483 * unsigned 32 bits
484 * RETURN VALUES
485 * 0 : check pass
486 * otherwise : check failed, please must not allowed to read nvram if checking failed
487 *****************************************************************************/
488extern kal_uint32 SST_NVRAM_Data_Access_Check(nvram_lid_enum LID, kal_int32 rw, kal_bool is_secure_data_access, void * reserved_ptr);
489
490extern kal_int32 SST_Get_HRID(kal_uint32 * pRId, kal_uint32 check_buf_size);
491
492extern kal_int32 SST_Get_NVRAM_SW_Key(void * pNVKey, kal_uint32 nNVKeySize, void * pKeySeed, kal_uint32 nKeySeedSize);
493
494// SST "S"pecific "S"ecure "F"eature Initialiation
495extern void SST_SSF_Init(void);
496
497// SST "S"pecific "S"ecure "F"eature De-init
498extern void SST_SSF_Deinit(void);
499
500kal_int32 nvram_AES_cipher_encrypt(unsigned char const *_key, unsigned int key_len, unsigned char *src_buf, unsigned char *dst_buf, unsigned int data_len);
501
502kal_int32 nvram_AES_cipher_decrypt(unsigned char const *_key, unsigned int key_len, unsigned char *src_buf, unsigned char *dst_buf, unsigned int data_len);
503
504
505#endif //__SST_SECURE_H__