HwA_Flagchip_FC7240/Inc/HwA_sec.h

860 lines
23 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* @file HwA_sec.h
* @author Flagchip
* @brief FC7xxx sec hardware access layer
* @version 0.2.0
* @date 2023-2-7
*
* @copyright Copyright (c) 2023 Flagchip Semiconductors Co., Ltd.
*
* @details
*/
/* ********************************************************************************
* Revision History:
*
* Version Date Initials CR# Descriptions
* --------- ---------- ------------ ---------- ---------------
* 0.2.0 2023-2-7 Flagchip076 N/A First version for FC7300
******************************************************************************** */
#ifndef HWA_INCLUDE_HWA_SEC_H_
#define HWA_INCLUDE_HWA_SEC_H_
#include "device_header.h"
/**
* @addtogroup HwA_SEC
* @{
*
*/
/* DEN Bit Fields */
/**
*@brief Enable the debug module
* */
LOCAL_INLINE void SEC_HWA_EnDebug(void)
{
SEC->DEN = SEC_DEN_DEN(0X5) ;
}
/* FSEC0 Bit Fields */
/**
* @brief Get the system security KEY0
* */
LOCAL_INLINE uint16_t SEC_HWA_GetSScontrol0(void)
{
return (uint16_t)((SEC->FSEC0) & (SEC_FSEC0_SSC0_MASK));
}
/* FSEC1 Bit Fields */
/**
* @brief Get the system security KEY1
* */
LOCAL_INLINE uint16_t SEC_HWA_GetSScontrol1(void)
{
return (uint16_t)((SEC->FSEC1) & (SEC_FSEC1_SSC1_MASK));
}
/* DCWOR Bit Fields */
/**
* @brief Re-enable the Debug mode.
* @note This register can only be write once. startup_fc4150.s has lock the register.
* */
LOCAL_INLINE void SEC_HWA_ReEnDebug(void)
{
SEC->DCWOR = ((SEC->DCWOR & (~SEC_DCWOR_DEA_MASK)) | SEC_DCWOR_DEA(0X5));
}
/**
* @brief Get the Re-enable Debug permission.
* */
LOCAL_INLINE bool SEC_HWA_GetReEnDebug(void)
{
bool ret = false;
uint8_t dea = (uint8_t)((SEC->DCWOR & (SEC_DCWOR_DEA_MASK)) >> SEC_DCWOR_DEA_SHIFT);
if (dea == 0x5U)
{
ret = true;
}
return ret;
}
/**
* @brief Enable the write operation for SEC register.
* @note This register can only be write once. startup_fc4150.s has lock the register.
* */
LOCAL_INLINE void SEC_HWA_WriteUnlock(void)
{
SEC->DCWOR = ((SEC->DCWOR & (~SEC_DCWOR_RWL_MASK)) | SEC_DCWOR_RWL(0X5));
}
/**
* @brief Get the sec write permission
* @return true means allow write. false means forbid write.
*/
LOCAL_INLINE bool SEC_HWA_GetWritePer(void)
{
bool ret = false;
uint8_t rwl = (uint8_t)((SEC->DCWOR & (SEC_DCWOR_RWL_MASK)) >> SEC_DCWOR_RWL_SHIFT);
if ((rwl == 0x5U) || (rwl == 0xFU))
{
ret = true;
}
return ret;
}
/* DEK Bit Fields */
/**
* @brief Enable the write operation for SEC register.
* */
LOCAL_INLINE void SEC_HWA_ChangeDBK(uint8_t count, uint32_t key)
{
SEC->DEK[count] = SEC_DEK_DEK(key) ;
}
/* TME Bit Fields */
/**
*@brief Enable the Test module
* */
LOCAL_INLINE void SEC_HWA_EnTest(void)
{
SEC->TME = SEC_TME_TME(0X5) ;
}
/* TMEA Bit Fields */
/**
* @brief Re-Enable Test mode
* */
LOCAL_INLINE void SEC_HWA_ReEnTest(void)
{
SEC->TMEA = SEC_TMEA_TMEA(0X5) ;
}
/**
* @brief Get the Re-enable Test permission.
* */
LOCAL_INLINE bool SEC_HWA_GetReEnTest(void)
{
bool ret = false;
uint8_t tmea = (uint8_t)((SEC->TMEA & (SEC_TMEA_TMEA_MASK)) >> SEC_TMEA_TMEA_SHIFT);
if ((tmea == 0x5U) || (tmea == 0xFU))
{
ret = true;
}
return ret;
}
/* TMEK Bit Fields */
/**
*@brief write Test re-enable mode key
*
*/
LOCAL_INLINE void SEC_HWA_ReEnTestKey(uint32_t testkey)
{
SEC->TMEK = SEC_TMEK_TMEK(testkey) ;
}
/* FCR0 Bit Fields */
/**
* @brief Enable the Mass Erase
*/
LOCAL_INLINE void SEC_HWA_EnME(void)
{
SEC->FCR0 = ((SEC->FCR0 & (~SEC_FCR0_MED_MASK)) | SEC_FCR0_MED(0x5));
}
/**
* @brief Enable the Block 0 NVR write .
*/
LOCAL_INLINE void SEC_HWA_EnWriteB0NVR(void)
{
SEC->FCR0 = ((SEC->FCR0 & (~SEC_FCR0_NWP_MASK)) | SEC_FCR0_NWP(0x5)) ;
}
/**
* @brief Disable the Block 0 NVR write .
*/
LOCAL_INLINE void SEC_HWA_DisWriteB0NVR(void)
{
SEC->FCR0 = ((SEC->FCR0 & (~SEC_FCR0_NWP_MASK)) | SEC_FCR0_NWP(0xA)) ;
}
/**
* @brief Enable the Block 0 NVR erase .
*/
LOCAL_INLINE void SEC_HWA_EnEraseB0NVR(void)
{
SEC->FCR0 = ((SEC->FCR0 & (~SEC_FCR0_NEP_MASK)) | SEC_FCR0_NEP(0x5)) ;
}
/**
* @brief Disable the Block 0 NVR erase .
*/
LOCAL_INLINE void SEC_HWA_DisEraseB0NVR(void)
{
SEC->FCR0 = ((SEC->FCR0 & (~SEC_FCR0_NEP_MASK)) | SEC_FCR0_NEP(0xA)) ;
}
/* NKRP Bit Fields */
/**
* @brief NVR Key Read Protection.
* @brief Enable the Block 0 NVR read.
*/
LOCAL_INLINE void SEC_HWA_EnReadB0NVR(void)
{
SEC->FCR0 = ((SEC->NKRP & (~SEC_NKRP_NKRP_MASK)) | SEC_NKRP_NKRP(0x5)) ;
}
/**
* @brief Disable the Block 0 NVR read .
*/
LOCAL_INLINE void SEC_HWA_DisReadB0NVR(void)
{
SEC->FCR0 = ((SEC->FCR0 & (~SEC_NKRP_NKRP_MASK)) | SEC_NKRP_NKRP(0xA)) ;
}
/* BCS Bit Fields */
/**
* @brief Get the Fast Boot Select.
* @return 0b - Select PLL0 as the core clock source; the core clock is 300MHz
* 1b - Select FIRC as the core clock source; the core clock is 96MHz.
* */
LOCAL_INLINE uint8_t SEC_HWA_GetFastBootClock(void)
{
return (uint8_t)((SEC->BCS & SEC_BCS_FBS_MASK) >> SEC_BCS_FBS_SHIFT);
}
/**
* @brief NMI Function Enable/Disable
* @return false - NMI pin function is disabled after reset.
* true - NMI pin function is enabled
* */
LOCAL_INLINE bool SEC_HWA_GetNmiPin(void)
{
return (bool)((SEC->BCS & SEC_BCS_NMIDIS_MASK) >> SEC_BCS_NMIDIS_SHIFT);
}
/**
* @brief ISP Function Enable/Disable ISP Mode Status
* @return false - ISP mode is inactive.
* true - ISP mode is active.
* */
LOCAL_INLINE bool SEC_HWA_GetIspStatus(void)
{
return (bool)((SEC->BCS & SEC_BCS_ISPMODE_MASK) >> SEC_BCS_ISPMODE_SHIFT);
}
/**
* @brief Boot Rom Configuration
* @return false - Boot from GPR defined address (except ROM).
* true - Boot from ROM.
* */
LOCAL_INLINE bool SEC_HWA_GetBootRom(void)
{
return (bool)((SEC->BCS & SEC_BCS_BOOTROM_MASK) >> SEC_BCS_BOOTROM_SHIFT);
}
/**
* @brief Get Chip Part Mode
* @return false - Chip is in FlexCore part mode.
* true - Chip is in HSM part mode.
* */
LOCAL_INLINE bool SEC_HWA_GetPartMode(void)
{
return (bool)((SEC->BCS & SEC_BCS_PART_MODE_MASK) >> SEC_BCS_PART_MODE_SHIFT);
}
/**
* @brief Get PF_128BIT_MODE
* @return false - Chip is in FlexCore part mode.
* true - Chip is in HSM part mode.
* */
LOCAL_INLINE bool SEC_HWA_GetPF128BitMode(void)
{
return (bool)((SEC->BCS & SEC_BCS_PF_128BIT_MODE_MASK) >> SEC_BCS_PF_128BIT_MODE_SHIFT);
}
/* UKAC Bit Fields */
/**
* @brief User Key Access Enable. Only valid under non-secure boot
* @return true means User key can be read/programmed/erased by host CPU ,false means User key is not available for host cpu
* */
LOCAL_INLINE bool SEC_HWA_GetUKAS(void)
{
bool ret = false;
uint8_t uake =(uint8_t)((SEC->UKAC & SEC_UKAC_UKAE_MASK) >> SEC_UKAC_UKAE_SHIFT);
if ((uake == 0x5U) || (uake == 0xFU))
{
ret = true;
}
return ret;
}
/* BRC0 Bit Fields */
/**
* @brief Secure Boot Disable (Value loaded from NVR sector)
* @return true means Secure boot mode , false means Non secure boot mode.
*/
LOCAL_INLINE bool SEC_HWA_GetSB(void)
{
bool ret = false;
uint8_t sbdis = (uint8_t)((SEC->BRC0 & SEC_BRC0_SECURE_BOOT_DIS_MASK) >> SEC_BRC0_SECURE_BOOT_DIS_SHIFT);
if (sbdis == 0x0u)
{
ret = true;
}
return ret;
}
/**
* @brief Host Debug Auth Enable. Only valid in secure boot. (Value loaded from NVR sector)
* @return true means Host debug authentication enable. false means Host debug authentication disable.
*/
LOCAL_INLINE bool SEC_HWA_GetDEAUEn(void)
{
bool ret = false;
uint8_t dean = (uint8_t)((SEC->BRC0 & SEC_BRC0_DEBUG_AUTH_EN_MASK) >> SEC_BRC0_DEBUG_AUTH_EN_SHIFT);
if ((dean == 0x5u) || (dean == 0xFu))
{
ret = true;
}
return ret;
}
/**
* @brief ISP Auth Enable. Only valid in secure boot. (Value loaded from NVR sector)
* @return true means ISP authentication enable, false means ISP authentication disable.
*/
LOCAL_INLINE bool SEC_HWA_GetISPAU(void)
{
bool ret = false;
uint8_t isp = (uint8_t)((SEC->BRC0 & SEC_BRC0_ISP_AUTH_EN_MASK) >> SEC_BRC0_ISP_AUTH_EN_SHIFT);
if ((isp == 0x5u) || (isp == 0xFu))
{
ret = true;
}
return ret;
}
/* BRC1 Bit Fields */
/**
* @brief Get the FCUART Baud Rate for ISP
* @return FCUART Baud Rate for ISP
* */
LOCAL_INLINE uint8_t SEC_HWA_GetUartBR(void)
{
return (uint8_t)((SEC->BRC1 & SEC_BRC1_UARTBR_MASK) >> SEC_BRC1_UARTBR_SHIFT);
}
/**
* @brief Get CAN Baud Rate for ISP
* @return CAN Baud Rate for ISP
* */
LOCAL_INLINE uint8_t SEC_HWA_GetCanBR(void)
{
return (uint8_t)((SEC->BRC1 & SEC_BRC1_CANBR_MASK) >> SEC_BRC1_CANBR_SHIFT);
}
/**
* @brief Get OSC Frequency
* @return OSC Frequency
* */
LOCAL_INLINE uint8_t SEC_HWA_GetOSCFre(void)
{
return (uint8_t)((SEC->BRC1 & SEC_BRC1_OSCFREQ_MASK) >> SEC_BRC1_OSCFREQ_SHIFT);
}
/**
* @brief Get whether OSC Available.
* @return true means OSC is available. false means -OSC is not available
* */
LOCAL_INLINE bool SEC_HWA_GetOSCAvail(void)
{
bool ret = false;
uint8_t osc = (uint8_t)((SEC->BRC1 & SEC_BRC1_OSCA_MASK) >> SEC_BRC1_OSCA_SHIFT);
if (osc == 0x0U)
{
ret = true;
}
return ret;
}
/**
* @brief Get Debug Backdoor Key Input Enable.
* @return
* 0011b - User can input DBK through debug mailbox, ISP is not valid
* 1100b - User can input DBK through ISP, debug mailbox is not valid.
* 1111b - User can input DBK through both debug mailbox and ISP.
* Other Values - User cannot input DBK through both debug mailbox andISP
* */
LOCAL_INLINE uint32_t SEC_HWA_GetMBBKEN(void)
{
return (uint32_t)((SEC->BRC1 & SEC_BRC1_DBK_IN_EN_MASK) >> SEC_BRC1_DBK_IN_EN_SHIFT);
}
/**
* @brief Get Debug Backdoor Key Encryption Algorithm
* @return false-User code verification enable in non-secure boot mode
true- User code verification disable in non-secure boot mode.
* */
LOCAL_INLINE bool SEC_HWA_GetNonSecVerifEN(void)
{
bool ret = false;
uint8_t dean = (uint8_t)((SEC->BRC0 & SEC_BRC1_NON_SEC_VERIF_EN_MASK) >> SEC_BRC1_NON_SEC_VERIF_EN_SHIFT);
if (dean == 1u)
{
ret = true;
}
return ret;
}
/**
* @brief Get User Code Verification Enable under Non-secure Boot Mode
* @return Bootloader Verification Algorithm
* 000b - AES256-CBC
* 111b - SM4-CBC.
* */
LOCAL_INLINE uint8_t SEC_HWA_GetDBDkeyEncrypAlg(void)
{
return (uint8_t)((SEC->BRC1 & SEC_BRC1_DBKEA_MASK) >> SEC_BRC1_DBKEA_SHIFT);
}
/**
* @brief ISP Function Enable/DisableOnly valid in non-secure mode
* @return false - ISP pin function is disabled after reset.
* true - ISP pin function is enabled.
* */
LOCAL_INLINE bool SEC_HWA_GetIspEn(void)
{
return (bool)((SEC->BRC1 & SEC_BRC1_ISP_PIN_EN_MASK) >> SEC_BRC1_ISP_PIN_EN_SHIFT);
}
/**
* @brief GET ISP Mode whether Allowed in Recovery Mode
* @return false - ISP mode is not allowed in recovery mode
* true - ISP mode is allowed in recovery mode.
* */
LOCAL_INLINE bool SEC_HWA_GetIspIsAllowedInRec(void)
{
return (bool)((SEC->BRC1 & SEC_BRC1_ISPAIRM_MASK) >> SEC_BRC1_ISPAIRM_SHIFT);
}
/**
* @brief GET Enable the Output of Plaintext Decrypted ROOT Key
* @return false - The output of plaintext decrypted ROOT key is enabled
* true - The output of plaintext decrypted ROOT key is disabled.
* */
LOCAL_INLINE bool SEC_HWA_GetKeyPlaRoot(void)
{
return (bool)((SEC->BRC1 & SEC_BRC1_KEY_PROT_MASK) >> SEC_BRC1_KEY_PROT_SHIFT);
}
/**
* @brief Get ROM Loop Control Flag
* @return false - ROM executes normal run under VIRGIN and FT state.
* true - ROM enters debug loop under VIRGIN and FT state.
* */
LOCAL_INLINE bool SEC_HWA_GetLoopCtrFlag(void)
{
return (bool)((SEC->BRC1 & SEC_BRC1_ROM_LOOP_CTRL_MASK) >> SEC_BRC1_ROM_LOOP_CTRL_SHIFT);
}
/**
* @brief Get Enable Software Configuration to Enter ISP
* @return false - Software configuration to enter ISP is enabled.
* true - Software configuration to enter ISP is disabled.
* */
LOCAL_INLINE bool SEC_HWA_GetIspSoftConfig(void)
{
return (bool)((SEC->BRC1 & SEC_BRC1_SW_CFG_ISP_EN_MASK) >> SEC_BRC1_SW_CFG_ISP_EN_SHIFT);
}
/* SW_CFG_ISP_FLG Bit Fields */
/**
* @brief Software Configuration to Enter ISP Flag
* @return ISP Flag.
* */
LOCAL_INLINE uint8_t SEC_HWA_GetSwCfgIspFlg(void)
{
return (uint8_t)((SEC->SW_CFG_ISP_FLG & SEC_SW_CFG_ISP_FLG_SW_CFG_ISP_FLG_MASK) >> SEC_SW_CFG_ISP_FLG_SW_CFG_ISP_FLG_SHIFT);
}
/* BRC2 Bit Fields */
/**
* @brief Get USERCODE_VERIFY_MASK_MASK
* @return USERCODE_VERIFY_MASK_MASK.
* */
LOCAL_INLINE uint32_t SEC_HWA_GetBLMask(void)
{
return (uint32_t)((SEC->BRC2 & SEC_BRC2_USERCODE_VERIFY_MASK_MASK) >> SEC_BRC2_USERCODE_VERIFY_MASK_SHIFT);
}
/**
* @brief Get the ISP Instance Select.
* @return ISP Instance Select
* */
LOCAL_INLINE uint8_t SEC_HWA_GetIspIns(void)
{
return (uint8_t)((SEC->BRC2 & SEC_BRC2_ISP_INST_SEL_MASK) >> SEC_BRC2_ISP_INST_SEL_SHIFT);
}
/**
* @brief Get Bootloader Verification Algorithm
* @return Bootloader Verification Algorithm
* */
LOCAL_INLINE uint8_t SEC_HWA_GetBLVer(void)
{
return (uint8_t)((SEC->BRC2 & SEC_BRC2_USERCODE_VERIFICATION_ALG_MASK) >> SEC_BRC2_USERCODE_VERIFICATION_ALG_SHIFT);
}
/**
* @brief Get Debug/ISP/PREFA Authentication and USRK decryption algorithm
* @return 1b - SM2, 0b - ECC256
* */
LOCAL_INLINE uint8_t SEC_HWA_GetDecrypt(void)
{
return (uint8_t)((SEC->BRC2 & SEC_BRC2_DECRP_ALG_MASK) >> SEC_BRC2_DECRP_ALG_SHIFT);
}
/* IMAGEA Bit Fields */
/**
* @brief Get the bootloader address.
* @return Bootloader Address.
* */
LOCAL_INLINE uint32_t SEC_HWA_GetBLAddr(void)
{
return (uint32_t)((SEC->IMGEA & SEC_IMGEA_IMAGE_ADDR_MASK) >> SEC_IMGEA_IMAGE_ADDR_SHIFT);
}
/* NVR VER Bit Fields */
/**
* @brief Get C version.
* @return C version.
* */
LOCAL_INLINE uint32_t SEC_HWA_GetCVer(void)
{
return (uint32_t)((SEC->NVR_VER & SEC_NVR_VER_C_VER_MASK) >> SEC_NVR_VER_C_VER_SHIFT);
}
/**
* @brief Set C version.
* @return C version.
* */
LOCAL_INLINE void SEC_HWA_SetCVer(uint32_t C_Ver)
{
SEC->NVR_VER=((SEC->NVR_VER & (~SEC_NVR_VER_C_VER_MASK)) | SEC_NVR_VER_C_VER(C_Ver));
}
/**
* @brief Get R version.
* @return R version.
* */
LOCAL_INLINE uint32_t SEC_HWA_GetRVer(void)
{
return (uint32_t)((SEC->NVR_VER & SEC_NVR_VER_R_VER_MASK) >> SEC_NVR_VER_R_VER_SHIFT);
}
/**
* @brief Set R version.
* */
LOCAL_INLINE void SEC_HWA_SetRVer(uint32_t R_Ver)
{
SEC->NVR_VER=((SEC->NVR_VER & (~SEC_NVR_VER_R_VER_MASK)) | SEC_NVR_VER_R_VER(R_Ver));
}
/**
* @brief Get V version.
* @return V version.
* */
LOCAL_INLINE uint32_t SEC_HWA_GetVVer(void)
{
return (uint32_t)((SEC->NVR_VER & SEC_NVR_VER_V_VER_MASK) >> SEC_NVR_VER_V_VER_SHIFT);
}
/**
* @brief Set V version.
* */
LOCAL_INLINE void SEC_HWA_SetVVer(uint32_t V_Ver)
{
SEC->NVR_VER=((SEC->NVR_VER & (~SEC_NVR_VER_V_VER_MASK)) | SEC_NVR_VER_V_VER(V_Ver));
}
/**
* @brief Get CHIP version.
* @return CHIP version.
* */
LOCAL_INLINE uint32_t SEC_HWA_GetChipVer(void)
{
return (uint32_t)((SEC->NVR_VER & SEC_NVR_VER_CHIP_VER_MASK) >> SEC_NVR_VER_CHIP_VER_SHIFT);
}
/**
* @brief Set CHIP version.
* */
LOCAL_INLINE void SEC_HWA_SetChipVer(uint32_t CHIP_Ver)
{
SEC->NVR_VER=((SEC->NVR_VER & (~SEC_NVR_VER_CHIP_VER_MASK)) | SEC_NVR_VER_V_VER(CHIP_Ver));
}
/* LCSTAT Bit Fields */
/**
* @brief Get the life cycle status of the chip.
* @return The lifecycle status
* */
LOCAL_INLINE uint8_t SEC_HWA_GetLCStaus(void)
{
return (uint8_t)(SEC->LCSTAT & 0XFFU);
}
/**
* @brief Get Lifecycle OEM Development
* @return 0b - Chip is not in this lifecycle
* 1b - Chip is in this lifecycle
* */
LOCAL_INLINE bool SEC_HWA_GetLCOemDev(void)
{
return (bool)((SEC->LCSTAT & SEC_LCSTAT_LIFECYCLE_OEM_DEV_MASK) >> SEC_LCSTAT_LIFECYCLE_OEM_DEV_SHIFT);
}
/**
* @brief Get Lifecycle OEM Production
* @return false - Chip is not in this lifecycle
* true - Chip is in this lifecycle
* */
LOCAL_INLINE bool SEC_HWA_GetLCOemPdt(void)
{
return (bool)((SEC->LCSTAT & SEC_LCSTAT_LIFECYCLE_OEM_PDT_MASK) >> SEC_LCSTAT_LIFECYCLE_OEM_PDT_SHIFT);
}
/**
* @brief Get Lifecycle In Field
* @return false - Chip is not in this lifecycle
* true - Chip is in this lifecycle
* */
LOCAL_INLINE bool SEC_HWA_GetLCInField(void)
{
return (bool)((SEC->LCSTAT & SEC_LCSTAT_LIFECYCLE_IN_FIELD_MASK) >> SEC_LCSTAT_LIFECYCLE_IN_FIELD_SHIFT);
}
/**
* @brief Get Lifecycle Software Fault Analysis
* @return false - Chip is not in this lifecycle
* true - Chip is in this lifecycle
* */
LOCAL_INLINE bool SEC_HWA_GetLCSwFa(void)
{
return (bool)((SEC->LCSTAT & SEC_LCSTAT_LIFECYCLE_SWFA_MASK) >> SEC_LCSTAT_LIFECYCLE_SWFA_SHIFT);
}
/**
* @brief Get Lifecycle Hardware Fault Analysis
* @return false - Chip is not in this lifecycle
* true - Chip is in this lifecycle
* */
LOCAL_INLINE bool SEC_HWA_GetLCHwFa(void)
{
return (bool)((SEC->LCSTAT & SEC_LCSTAT_LIFECYCLE_HWFA_MASK) >> SEC_LCSTAT_LIFECYCLE_HWFA_SHIFT);
}
/* FAC Bit Fields */
/**
* @brief Get the Host User Key Read Protection
* @return true - Host read access to User Key region is enabled
* false - Host read access to User Key region is disabled
* */
LOCAL_INLINE bool SEC_HWA_GetHUKRead(void)
{
return (bool)(~(((SEC->FAC) & SEC_FAC_HOST_UKEY_RPROT_MASK) >> SEC_FAC_HOST_UKEY_RPROT_SHIFT));
}
/**
* @brief Get the Host User Key write Protection
* @return true - Host write access to User Key region is enabled
* false - Host write access to User Key region is disabled
* */
LOCAL_INLINE bool SEC_HWA_GetHUKWrite(void)
{
return (bool)(~(((SEC->FAC) & SEC_FAC_HOST_UKEY_WPROT_MASK) >> SEC_FAC_HOST_UKEY_WPROT_SHIFT));
}
/**
* @brief Get the Host User Key erase Protection
* @return true - Host erase access to User Key region is enabled
* false - Host erase access to User Key region is disabled
* */
LOCAL_INLINE bool SEC_HWA_GetHUKErase(void)
{
return (bool)(~(((SEC->FAC) & SEC_FAC_HOST_UKEY_EPROT_MASK) >> SEC_FAC_HOST_UKEY_EPROT_SHIFT));
}
/**
* @brief Get the Host NVR Read Protection
* @return true - Host read access to NVR region is enabled
* false - Host read access to NVR region is disabled
* */
LOCAL_INLINE bool SEC_HWA_GetHostNvrRead(void)
{
return (bool)(~(((SEC->FAC) & SEC_FAC_HOST_NVR_RPROT_MASK) >> SEC_FAC_HOST_NVR_RPROT_SHIFT));
}
/**
* @brief Get the Host NVR write Protection
* @return true - Host write access to NVR region is enabled
* false - Host write access to NVR region is disabled
* */
LOCAL_INLINE bool SEC_HWA_GetHostNvrWrite(void)
{
return (bool)(~(((SEC->FAC) & SEC_FAC_HOST_NVR_WPROT_MASK) >> SEC_FAC_HOST_NVR_WPROT_SHIFT));
}
/**
* @brief Get the Host NVR erase Protection
* @return true - Host erase access to NVR region is enabled
* false - Host erase access to NVR region is disabled-
* */
LOCAL_INLINE bool SEC_HWA_GetHostNvrErase(void)
{
return (bool)(~(((SEC->FAC) & SEC_FAC_HOST_NVR_EPROT_MASK) >> SEC_FAC_HOST_NVR_EPROT_SHIFT));
}
/**
* @brief Get HSM User Key Read Protection
* @return true - HSM Read access to User Key region is disabled
* false - HSM Read access to User Key region is enabled
* */
LOCAL_INLINE bool SEC_HWA_GetHsmUKRead(void)
{
return (bool)(~(((SEC->FAC) & SEC_FAC_HSM_UKEY_RPROT_MASK) >> SEC_FAC_HSM_UKEY_RPROT_SHIFT));
}
/**
* @brief Get HSM User Key Program Protection
* @return true - HSM Program access to User Key region is disabled
* false - HSM Program access to User Key region is enabled
* */
LOCAL_INLINE bool SEC_HWA_GetHsmUKProg(void)
{
return (bool)(~(((SEC->FAC) & SEC_FAC_HSM_UKEY_WPROT_MASK) >> SEC_FAC_HSM_UKEY_WPROT_SHIFT));
}
/**
* @brief Get the HSM User Key Erase Protection
* @return true - HSM erase access to User Key region is enabled
* false -HSM erase access to User Key region is disabled
* */
LOCAL_INLINE bool SEC_HWA_GetHsmUKErase(void)
{
return (bool)(~(((SEC->FAC) & SEC_FAC_HSM_UKEY_EPROT_MASK) >> SEC_FAC_HSM_UKEY_EPROT_SHIFT));
}
/**
* @brief Get HSM NVR Key Read Protection
* @return true - HSM Read access to NVR key region is disabled
* false - HSM Read access to NVR key region is enabled
* */
LOCAL_INLINE bool SEC_HWA_GetHsmNvrKRead(void)
{
return (bool)(~(((SEC->FAC) & SEC_FAC_HSM_NVR_RPROT_MASK) >> SEC_FAC_HSM_NVR_RPROT_SHIFT));
}
/**
* @brief Get HSM NVR Program Protection
* @return true - HSM Program access to NVR region is disabled
* false - HSM Program access to NVR region is enabled
* */
LOCAL_INLINE bool SEC_HWA_GetHsmNvrProg(void)
{
return (bool)(~(((SEC->FAC) & SEC_FAC_HSM_NVR_WPROT_MASK) >> SEC_FAC_HSM_NVR_WPROT_SHIFT));
}
/**
* @brief Get the HSM NVR Erase Protection
* @return true - HSM erase access to NVR region is enabled
* false -HSM erase access to NVR region is disabled
* */
LOCAL_INLINE bool SEC_HWA_GetHsmNvrErase(void)
{
return (bool)(~(((SEC->FAC) & SEC_FAC_HSM_NVR_EPROT_MASK) >> SEC_FAC_HSM_NVR_EPROT_SHIFT));
}
/* FLEXCORE_EN Bit Fields */
/**
* @brief Get the FlexCore Enable.
* @return true means enable ,false means disable.
* */
LOCAL_INLINE bool SEC_HWA_GetFlexCoreEn(void)//?
{
bool ret = false;
uint8_t srk = (uint8_t)((SEC->FLEXCORE_EN & SEC_FLEXCORE_EN_FLEXCORE_EN_MASK) >> SEC_FLEXCORE_EN_FLEXCORE_EN_SHIFT);
if (srk == 0xFU||srk == 0x5U)
{
ret = true;
}
return ret;
}
/**
* @brief Set the FlexCore Enable.
* @return true means set sucess ,false means set fail,0x5 and 0xf is enable,others is disable.
* */
LOCAL_INLINE bool SEC_HWA_SetFlexCoreEn(uint8_t CoreEn)
{
if(CoreEn>0xF)
return false;
SEC->FLEXCORE_EN = ((SEC->FLEXCORE_EN & (~SEC_FLEXCORE_EN_FLEXCORE_EN_MASK)) | SEC_FLEXCORE_EN_FLEXCORE_EN(CoreEn));
return true;
}
/**
* @brief Get SEC_FLEXCORE_EN FLEXCORE_DBG.
* @return true means enable ,false means disable.
* */
LOCAL_INLINE bool SEC_HWA_GetFlexCoreDbgEn(void)
{
return (bool)((SEC->FLEXCORE_EN & SEC_FLEXCORE_EN_FLEXCORE_DBG_EN_MASK) >> SEC_FLEXCORE_EN_FLEXCORE_DBG_EN_SHIFT);
}
/**
* @brief Set SEC_FLEXCORE_EN FLEXCORE_DBG.
* */
LOCAL_INLINE void SEC_HWA_SetFlexCoreDbgEn(uint8_t DbgEn)
{
SEC->FLEXCORE_EN=((SEC->FLEXCORE_EN & (~SEC_FLEXCORE_EN_FLEXCORE_DBG_EN_MASK)) | SEC_FLEXCORE_EN_FLEXCORE_DBG_EN(DbgEn));
}
/* FLEX_CODE_ADDR Bit Fields */
/**
* @brief Get Code Header Address for FlexCore Always 4-byte aligned
* @return FLEX Code Header Address.
* */
LOCAL_INLINE uint32_t SEC_HWA_GetFlexCodeHeadAddr(void)
{
return (uint32_t)((SEC->FLEX_CODE_ADDR & SEC_FLEX_CODE_ADDR_FLEX_CODE_ADDR_MASK) >> SEC_FLEX_CODE_ADDR_FLEX_CODE_ADDR_SHIFT);
}
/* PFLASH_PRLLL_EN Bit Fields */
/**
* @brief Get PFLASH Parallel Enable
* @return
* 0101b - Disable
* Others - Enable
* */
LOCAL_INLINE bool SEC_HWA_GetPflashPrlllEn(void)
{
bool ret = false;
uint32_t srk=(uint32_t)((SEC->PFLASH_PRLLL_EN & SEC_PFLASH_PRLLL_EN_PFLASH_PRLLL_EN_MASK) >> SEC_PFLASH_PRLLL_EN_PFLASH_PRLLL_EN_SHIFT);
if (srk !=0x5U)
{
ret =true ;
}
return ret;
}
/** @}*/ /* HwA_SEC */
#endif /* HWA_INCLUDE_HWA_SEC_H_ */