| b.liu | e958203 | 2025-04-17 19:18:16 +0800 | [diff] [blame] | 1 | #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
|
| 112 | typedef 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 |
|
| 135 | UINT_T GEU_SetActiveFuseBlock(UINT_T n);
|
| 136 | UINT_T GEU_ReadActiveFuseBlockNumber(void);
|
| 137 | UINT_T GEU_GenerateRandomNumber (UINT_T Seed);
|
| 138 | UINT_T GEU_ReadApConfigFuseBits(UINT_T* pBuffer, UINT_T Size);
|
| 139 | UINT_T GEU_ReadCpConfigFuseBits(UINT_T* pBuffer, UINT_T Size);
|
| 140 | UINT_T GEU_ReadUsbIdFuseBits(UINT_T* pBuffer, UINT_T Size);
|
| 141 | UINT_T GEU_ReadOemHashKeyFuseBits(UINT_T* pBuffer, UINT_T Size);
|
| 142 | UINT_T GEU_ReadLifeCycle(void);
|
| 143 | UINT_T GEU_SetupApConfigFuseBits(UINT_T* pBuffer, UINT_T Size);
|
| 144 | UINT_T GEU_SetupCpConfigFuseBits(UINT_T* pBuffer, UINT_T Size);
|
| 145 | UINT_T GEU_SetupUsbIdFuseBits(UINT_T* pBuffer, UINT_T Size);
|
| 146 | UINT_T GEU_SetupOemHashKeyFuseBits(UINT_T* pBuffer, UINT_T Size);
|
| 147 | UINT_T GEU_SetupRkekFuseBits(UINT_T* pBuffer, UINT_T Size);
|
| 148 | UINT_T GEU_SetupSoftwareVersionFuseBits(UINT_T value);
|
| 149 | UINT_T GEU_SetupLifeCycleFuseBits(UINT_T* pBuffer, UINT_T Size);
|
| 150 | UINT_T GEU_BurnFuseBlock_SocConfig(struct GEU_FuseBurnStatus * pFuseBurnStatus);
|
| 151 | UINT_T GEU_BurnFuseBlock_OemHashKey(struct GEU_FuseBurnStatus * pUserFuseBurnStatus);
|
| 152 | UINT_T GEU_BurnFuseBlock_Rkek(struct GEU_FuseBurnStatus * pUserFuseBurnStatus);
|
| 153 | UINT_T GEU_BurnFuseBlock_SoftwareVersion(struct GEU_FuseBurnStatus * pUserFuseBurnStatus);
|
| 154 | UINT_T GEU_ReadFuseBlockLockState(UINT_T* pBuffer);
|
| 155 | UINT_T GEU_ReadRegister(UINT_T registerAddress, UINT_T * pBuffer);
|
| 156 | UINT_T GEU_WriteRegister(UINT_T registerAddress, UINT_T value);
|
| 157 | UINT_T GEU_EnableFuseBurnPower(void);
|
| 158 | UINT_T GEU_ReadOemUidFuseBits(UINT_T* pBuffer, UINT_T Size);
|
| 159 | UINT_T GEU_SetupUidFuseBits(UINT_T* pBuffer, UINT_T Size);
|
| 160 | UINT_T GEU_BurnFuseBlock_OemUid (struct GEU_FuseBurnStatus* pUserFuseBurnStatus);
|
| 161 | UINT_T GEU_ReadFuseBank(UINT_T *pBuffer, UINT_T BankNum);
|
| 162 | #if ENABLE_BITS_BURN
|
| 163 | UINT_T GEU_FuseBankBitBurn(UINT_T BankNum, UINT_T StartBit, UINT_T BitCouts);
|
| 164 | #endif
|
| 165 | #endif //_GEU_INTERFACE_H_
|