| #ifndef _GEU_INTERFACE_H_ | |
| #define _GEU_INTERFACE_H_ | |
| /****************************************************************************** | |
| * | |
| * (C)Copyright 2022 ASR. All Rights Reserved. | |
| * | |
| ******************************************************************************/ | |
| // FUSE life cycles | |
| #define K_LIFECYCLE_STATE_VIRGIN 0 | |
| #define K_LIFECYCLE_STATE_CM 1 | |
| #define K_LIFECYCLE_STATE_DM 2 | |
| #define K_LIFECYCLE_STATE_DD 3 | |
| #define K_LIFECYCLE_STATE_FA 4 | |
| #define K_MRB_JTAG_PERM_DIS 5 | |
| #define LIFECYCLE_CM (K_LIFECYCLE_STATE_CM) | |
| #define LIFECYCLE_DM (K_LIFECYCLE_STATE_DM) | |
| #define LIFECYCLE_DD (K_LIFECYCLE_STATE_DD) | |
| #define LIFECYCLE_FA (K_LIFECYCLE_STATE_FA) | |
| #define LIFECYCLE_JPD (K_MRB_JTAG_PERM_DIS) | |
| // Fuse field sizes in bytes | |
| //FB0 | |
| #define K_AP_CONFIG_FUSE_SIZE 10 | |
| #define K_CP_CONFIG_FUSE_SIZE 2 | |
| #define K_LCS_FUSE_SIZE 2 | |
| #define K_APCP_CONFIG_FUSE_SIZE 12 | |
| #define K_MP1_FUSE_SIZE 8 | |
| #define K_USBID_FUSE_SIZE 4 | |
| #define K_OEM_UNIQUE_ID_FUSE_SIZE 8 /* MP1 */ | |
| #define K_PLAT_VERSION_FUSE_SIZE 4 | |
| //FB1 | |
| #define K_RKEK_FUSE_SIZE 32 | |
| //FB2 | |
| #define K_OEM_HASH_FUSE_SIZE 32 | |
| //FB3 | |
| #define K_MP0_FUSE_SIZE 8 | |
| //misc | |
| #define K_FUSEBLOCK_SIZE 32 | |
| #define K_SHA1_SIZE 20 | |
| #define K_SHA256_SIZE 32 | |
| #define K_SHA512_SIZE 64 | |
| // Fuse field buffer sizes in bytes | |
| // Data is always returned as a multiple of 4 bytes | |
| #define K_AP_CONFIG_BUFFER_SIZE 12 | |
| #define K_CP_CONFIG_BUFFER_SIZE 4 | |
| #define K_MP0_BUFFER_SIZE 8 | |
| #define K_USBID_BUFFER_SIZE 4 | |
| #define K_OEM_HASH_BUFFER_SIZE 32 | |
| #define K_RKEK_BUFFER_SIZE 32 | |
| #define K_FUSEBLOCK_BUFFER_SIZE 32 | |
| #define K_OEM_UNIQUE_ID_BUFFER_SIZE 8 | |
| // Fuse field sizes in bytes | |
| #define K_OEM_UID_FUSE_SIZE 8 | |
| // Fuse Block Numbers | |
| #define K_AP_CONFIG_FUSEBLOCK 0 | |
| #define K_CP_CONFIG_FUSEBLOCK 0 | |
| #define K_APCPMP0_FUSEBLOCK 0 | |
| #define K_LIFECYCLE_FUSEBLOCK 0 | |
| #define K_SOC_CONFIG_FUSEBLOCK 0 | |
| #define K_PLAT_VERSION_FUSEBLOCK 0 | |
| #define K_RKEK_FUSEBLOCK 1 | |
| #define K_OEM_FUSEBLOCK 2 | |
| #define K_USBID_FUSEBLOCK 0 //NZAS | |
| //several security related bits are in Block0 | |
| #define K_OEM_UID_FUSEBLOCK 0 | |
| #define K_NO_FUSEBLOCK 0xF | |
| #define K_UNDEFINED_FUSEBLOCK K_NO_FUSEBLOCK | |
| // Burn/Status Bit Masks/bits - This is an arbitrary internal | |
| // status array that we use to determine which set we're burning | |
| // and pass status internally. | |
| #define K_AP_CONFIG_STATUS_BIT_MASK 0x00000001 | |
| #define K_CP_CONFIG_STATUS_BIT_MASK 0x00000002 | |
| #define K_MP0_STATUS_BIT_MASK 0x00000004 | |
| #define K_APCPMP0_ECC_STATUS_BIT_MASK 0x00000008 | |
| #define K_SOFTWARE_VERSION_STATUS_BIT_MASK 0x00000010 // Reserved | |
| #define K_RKEK_STATUS_BIT_MASK 0x00000020 | |
| #define K_OEM_KEY0_STATUS_BIT_MASK 0x00000040 | |
| #define K_OEM_UID_STATUS_BIT_MASK 0x00000800 | |
| #define K_USBID_STATUS_BIT_MASK 0x00004000 | |
| #define K_LIFECYCLE_CM_STATUS_BIT_MASK 0x00010000 | |
| #define K_LIFECYCLE_DM_STATUS_BIT_MASK 0x00020000 | |
| #define K_LIFECYCLE_DD_STATUS_BIT_MASK 0x00040000 | |
| #define K_LIFECYCLE_FA_STATUS_BIT_MASK 0x00080000 | |
| #define K_LIFECYCLE_STATUS_BIT_MASK 0x00100000 | |
| // DebugStatus bits | |
| #define K_FUSE_READY_TIMEOUT 0x10000000 | |
| #define K_MULTIPLE_BURN_COUNT 0x20000000 | |
| #define K_FUSE_BURN_TIMEOUT 0x40000000 | |
| #define K_FUSE_BURN_DONE_CLR_TIMEOUT 0x80000000 | |
| // LifeCycle/Software Version | |
| #define K_PHYSICAL_BITS_PER_LOGICAL_BIT 3 | |
| #define K_LIFECYCLE_BITSIZE 16 | |
| #define K_MAX_LIFECYCLE_LOGICAL_BITS K_LIFECYCLE_BITSIZE/K_PHYSICAL_BITS_PER_LOGICAL_BIT | |
| #define K_SOFTWARE_VERSION_BITSIZE 32 | |
| #define K_MAX_SOFTWARE_VERSION_LOGICAL_BITS K_SOFTWARE_VERSION_BITSIZE/K_PHYSICAL_BITS_PER_LOGICAL_BIT | |
| // Fuse Burn Status | |
| typedef struct GEU_FuseBurnStatus | |
| { | |
| UINT_T FinalBurnStatus; | |
| UINT_T CorrectedBurnStatus; | |
| UINT_T RawBurnStatus; | |
| UINT_T SavedBurnRequest; | |
| UINT_T DebugStatus; | |
| }GEU_FuseBurnStatus_t; | |
| #define TRUSTBOOT_BURN_EN 0x00000001 | |
| #define DISROMLOG_BURN_EN 0x00000002 | |
| #define CLOSEJTAG_BURN_EN 0x00000004 | |
| #define DISESCAPE_BURN_EN 0x00000008 | |
| #define CLOSEUSBD_BURN_EN 0x00000010 | |
| #define LIFECYLE_CM_BURN_EN 0x00001000 | |
| #define LIFECYLE_DM_BURN_EN 0x00002000 | |
| #define LIFECYLE_DD_BURN_EN 0x00004000 | |
| #define LIFECYLE_FA_BURN_EN 0x00008000 | |
| #define LIFECYLE_JPD_BURN_EN 0x00010000 | |
| #define RKEK_DEBUG_EN 0x00200000 | |
| #define RKEK_BURN_EN 0x00400000 | |
| #define RKEK_ACCESS_DIS_BURN_EN 0x00800000 | |
| UINT_T GEU_SetActiveFuseBlock(UINT_T n); | |
| UINT_T GEU_ReadActiveFuseBlockNumber(void); | |
| UINT_T GEU_GenerateRandomNumber (UINT_T Seed); | |
| UINT_T GEU_ReadApConfigFuseBits(UINT_T* pBuffer, UINT_T Size); | |
| UINT_T GEU_ReadCpConfigFuseBits(UINT_T* pBuffer, UINT_T Size); | |
| UINT_T GEU_ReadUsbIdFuseBits(UINT_T* pBuffer, UINT_T Size); | |
| UINT_T GEU_ReadOemHashKeyFuseBits(UINT_T* pBuffer, UINT_T Size); | |
| UINT_T GEU_ReadLifeCycle(void); | |
| UINT_T GEU_SetupApConfigFuseBits(UINT_T* pBuffer, UINT_T Size); | |
| UINT_T GEU_SetupCpConfigFuseBits(UINT_T* pBuffer, UINT_T Size); | |
| UINT_T GEU_SetupUsbIdFuseBits(UINT_T* pBuffer, UINT_T Size); | |
| UINT_T GEU_SetupOemHashKeyFuseBits(UINT_T* pBuffer, UINT_T Size); | |
| UINT_T GEU_SetupRkekFuseBits(UINT_T* pBuffer, UINT_T Size); | |
| UINT_T GEU_SetupSoftwareVersionFuseBits(UINT_T value); | |
| UINT_T GEU_SetupLifeCycleFuseBits(UINT_T* pBuffer, UINT_T Size); | |
| UINT_T GEU_BurnFuseBlock_SocConfig(struct GEU_FuseBurnStatus * pFuseBurnStatus); | |
| UINT_T GEU_BurnFuseBlock_OemHashKey(struct GEU_FuseBurnStatus * pUserFuseBurnStatus); | |
| UINT_T GEU_BurnFuseBlock_Rkek(struct GEU_FuseBurnStatus * pUserFuseBurnStatus); | |
| UINT_T GEU_BurnFuseBlock_SoftwareVersion(struct GEU_FuseBurnStatus * pUserFuseBurnStatus); | |
| UINT_T GEU_ReadFuseBlockLockState(UINT_T* pBuffer); | |
| UINT_T GEU_ReadRegister(UINT_T registerAddress, UINT_T * pBuffer); | |
| UINT_T GEU_WriteRegister(UINT_T registerAddress, UINT_T value); | |
| UINT_T GEU_EnableFuseBurnPower(void); | |
| UINT_T GEU_ReadOemUidFuseBits(UINT_T* pBuffer, UINT_T Size); | |
| UINT_T GEU_SetupUidFuseBits(UINT_T* pBuffer, UINT_T Size); | |
| UINT_T GEU_BurnFuseBlock_OemUid (struct GEU_FuseBurnStatus* pUserFuseBurnStatus); | |
| UINT_T GEU_ReadFuseBank(UINT_T *pBuffer, UINT_T BankNum); | |
| #if ENABLE_BITS_BURN | |
| UINT_T GEU_FuseBankBitBurn(UINT_T BankNum, UINT_T StartBit, UINT_T BitCouts); | |
| #endif | |
| #endif //_GEU_INTERFACE_H_ |