blob: f04ed05eaed9bd394e80ce51875d50cce30bc82a [file] [log] [blame]
b.liue9582032025-04-17 19:18:16 +08001#ifndef _GEU_INTERFACE_H_
2#define _GEU_INTERFACE_H_
3/******************************************************************************
4 *
5 * (C)Copyright 2022 ASR. All Rights Reserved.
6 *
7
8 ******************************************************************************/
9
10// FUSE life cycles
11#define K_LIFECYCLE_STATE_VIRGIN 0
12#define K_LIFECYCLE_STATE_CM 1
13#define K_LIFECYCLE_STATE_DM 2
14#define K_LIFECYCLE_STATE_DD 3
15#define K_LIFECYCLE_STATE_FA 4
16#define K_MRB_JTAG_PERM_DIS 5
17
18#define LIFECYCLE_CM (K_LIFECYCLE_STATE_CM)
19#define LIFECYCLE_DM (K_LIFECYCLE_STATE_DM)
20#define LIFECYCLE_DD (K_LIFECYCLE_STATE_DD)
21#define LIFECYCLE_FA (K_LIFECYCLE_STATE_FA)
22#define LIFECYCLE_JPD (K_MRB_JTAG_PERM_DIS)
23
24// Fuse field sizes in bytes
25//FB0
26#define K_AP_CONFIG_FUSE_SIZE 10
27#define K_CP_CONFIG_FUSE_SIZE 2
28#define K_LCS_FUSE_SIZE 2
29#define K_APCP_CONFIG_FUSE_SIZE 12
30#define K_MP1_FUSE_SIZE 8
31#define K_USBID_FUSE_SIZE 4
32#define K_OEM_UNIQUE_ID_FUSE_SIZE 8 /* MP1 */
33#define K_PLAT_VERSION_FUSE_SIZE 4
34//FB1
35#define K_RKEK_FUSE_SIZE 32
36//FB2
37#define K_OEM_HASH_FUSE_SIZE 32
38//FB3
39#define K_MP0_FUSE_SIZE 8
40
41//misc
42#define K_FUSEBLOCK_SIZE 32
43#define K_SHA1_SIZE 20
44#define K_SHA256_SIZE 32
45#define K_SHA512_SIZE 64
46
47// Fuse field buffer sizes in bytes
48// Data is always returned as a multiple of 4 bytes
49#define K_AP_CONFIG_BUFFER_SIZE 12
50#define K_CP_CONFIG_BUFFER_SIZE 4
51#define K_MP0_BUFFER_SIZE 8
52#define K_USBID_BUFFER_SIZE 4
53#define K_OEM_HASH_BUFFER_SIZE 32
54#define K_RKEK_BUFFER_SIZE 32
55#define K_FUSEBLOCK_BUFFER_SIZE 32
56#define K_OEM_UNIQUE_ID_BUFFER_SIZE 8
57
58// Fuse field sizes in bytes
59#define K_OEM_UID_FUSE_SIZE 8
60
61// Fuse Block Numbers
62#define K_AP_CONFIG_FUSEBLOCK 0
63#define K_CP_CONFIG_FUSEBLOCK 0
64#define K_APCPMP0_FUSEBLOCK 0
65#define K_LIFECYCLE_FUSEBLOCK 0
66#define K_SOC_CONFIG_FUSEBLOCK 0
67#define K_PLAT_VERSION_FUSEBLOCK 0
68#define K_RKEK_FUSEBLOCK 1
69#define K_OEM_FUSEBLOCK 2
70
71#define K_USBID_FUSEBLOCK 0 //NZAS
72//several security related bits are in Block0
73#define K_OEM_UID_FUSEBLOCK 0
74#define K_NO_FUSEBLOCK 0xF
75#define K_UNDEFINED_FUSEBLOCK K_NO_FUSEBLOCK
76
77// Burn/Status Bit Masks/bits - This is an arbitrary internal
78// status array that we use to determine which set we're burning
79// and pass status internally.
80#define K_AP_CONFIG_STATUS_BIT_MASK 0x00000001
81#define K_CP_CONFIG_STATUS_BIT_MASK 0x00000002
82#define K_MP0_STATUS_BIT_MASK 0x00000004
83#define K_APCPMP0_ECC_STATUS_BIT_MASK 0x00000008
84#define K_SOFTWARE_VERSION_STATUS_BIT_MASK 0x00000010 // Reserved
85#define K_RKEK_STATUS_BIT_MASK 0x00000020
86#define K_OEM_KEY0_STATUS_BIT_MASK 0x00000040
87#define K_OEM_UID_STATUS_BIT_MASK 0x00000800
88#define K_USBID_STATUS_BIT_MASK 0x00004000
89#define K_LIFECYCLE_CM_STATUS_BIT_MASK 0x00010000
90#define K_LIFECYCLE_DM_STATUS_BIT_MASK 0x00020000
91#define K_LIFECYCLE_DD_STATUS_BIT_MASK 0x00040000
92#define K_LIFECYCLE_FA_STATUS_BIT_MASK 0x00080000
93#define K_LIFECYCLE_STATUS_BIT_MASK 0x00100000
94
95// DebugStatus bits
96#define K_FUSE_READY_TIMEOUT 0x10000000
97#define K_MULTIPLE_BURN_COUNT 0x20000000
98#define K_FUSE_BURN_TIMEOUT 0x40000000
99#define K_FUSE_BURN_DONE_CLR_TIMEOUT 0x80000000
100
101
102// LifeCycle/Software Version
103#define K_PHYSICAL_BITS_PER_LOGICAL_BIT 3
104
105#define K_LIFECYCLE_BITSIZE 16
106#define K_MAX_LIFECYCLE_LOGICAL_BITS K_LIFECYCLE_BITSIZE/K_PHYSICAL_BITS_PER_LOGICAL_BIT
107
108#define K_SOFTWARE_VERSION_BITSIZE 32
109#define K_MAX_SOFTWARE_VERSION_LOGICAL_BITS K_SOFTWARE_VERSION_BITSIZE/K_PHYSICAL_BITS_PER_LOGICAL_BIT
110
111// Fuse Burn Status
112typedef struct GEU_FuseBurnStatus
113{
114 UINT_T FinalBurnStatus;
115 UINT_T CorrectedBurnStatus;
116 UINT_T RawBurnStatus;
117 UINT_T SavedBurnRequest;
118 UINT_T DebugStatus;
119}GEU_FuseBurnStatus_t;
120
121#define TRUSTBOOT_BURN_EN 0x00000001
122#define DISROMLOG_BURN_EN 0x00000002
123#define CLOSEJTAG_BURN_EN 0x00000004
124#define DISESCAPE_BURN_EN 0x00000008
125#define CLOSEUSBD_BURN_EN 0x00000010
126#define LIFECYLE_CM_BURN_EN 0x00001000
127#define LIFECYLE_DM_BURN_EN 0x00002000
128#define LIFECYLE_DD_BURN_EN 0x00004000
129#define LIFECYLE_FA_BURN_EN 0x00008000
130#define LIFECYLE_JPD_BURN_EN 0x00010000
131#define RKEK_DEBUG_EN 0x00200000
132#define RKEK_BURN_EN 0x00400000
133#define RKEK_ACCESS_DIS_BURN_EN 0x00800000
134
135UINT_T GEU_SetActiveFuseBlock(UINT_T n);
136UINT_T GEU_ReadActiveFuseBlockNumber(void);
137UINT_T GEU_GenerateRandomNumber (UINT_T Seed);
138UINT_T GEU_ReadApConfigFuseBits(UINT_T* pBuffer, UINT_T Size);
139UINT_T GEU_ReadCpConfigFuseBits(UINT_T* pBuffer, UINT_T Size);
140UINT_T GEU_ReadUsbIdFuseBits(UINT_T* pBuffer, UINT_T Size);
141UINT_T GEU_ReadOemHashKeyFuseBits(UINT_T* pBuffer, UINT_T Size);
142UINT_T GEU_ReadLifeCycle(void);
143UINT_T GEU_SetupApConfigFuseBits(UINT_T* pBuffer, UINT_T Size);
144UINT_T GEU_SetupCpConfigFuseBits(UINT_T* pBuffer, UINT_T Size);
145UINT_T GEU_SetupUsbIdFuseBits(UINT_T* pBuffer, UINT_T Size);
146UINT_T GEU_SetupOemHashKeyFuseBits(UINT_T* pBuffer, UINT_T Size);
147UINT_T GEU_SetupRkekFuseBits(UINT_T* pBuffer, UINT_T Size);
148UINT_T GEU_SetupSoftwareVersionFuseBits(UINT_T value);
149UINT_T GEU_SetupLifeCycleFuseBits(UINT_T* pBuffer, UINT_T Size);
150UINT_T GEU_BurnFuseBlock_SocConfig(struct GEU_FuseBurnStatus * pFuseBurnStatus);
151UINT_T GEU_BurnFuseBlock_OemHashKey(struct GEU_FuseBurnStatus * pUserFuseBurnStatus);
152UINT_T GEU_BurnFuseBlock_Rkek(struct GEU_FuseBurnStatus * pUserFuseBurnStatus);
153UINT_T GEU_BurnFuseBlock_SoftwareVersion(struct GEU_FuseBurnStatus * pUserFuseBurnStatus);
154UINT_T GEU_ReadFuseBlockLockState(UINT_T* pBuffer);
155UINT_T GEU_ReadRegister(UINT_T registerAddress, UINT_T * pBuffer);
156UINT_T GEU_WriteRegister(UINT_T registerAddress, UINT_T value);
157UINT_T GEU_EnableFuseBurnPower(void);
158UINT_T GEU_ReadOemUidFuseBits(UINT_T* pBuffer, UINT_T Size);
159UINT_T GEU_SetupUidFuseBits(UINT_T* pBuffer, UINT_T Size);
160UINT_T GEU_BurnFuseBlock_OemUid (struct GEU_FuseBurnStatus* pUserFuseBurnStatus);
161UINT_T GEU_ReadFuseBank(UINT_T *pBuffer, UINT_T BankNum);
162#if ENABLE_BITS_BURN
163UINT_T GEU_FuseBankBitBurn(UINT_T BankNum, UINT_T StartBit, UINT_T BitCouts);
164#endif
165#endif //_GEU_INTERFACE_H_