182 lines
4.8 KiB
C
182 lines
4.8 KiB
C
/*
|
|
* Copyright 2020-2021, NXP
|
|
* All rights reserved.
|
|
*
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
*/
|
|
|
|
#ifndef _FSL_KEYMGR_H_
|
|
#define _FSL_KEYMGR_H_
|
|
|
|
#include "fsl_common.h"
|
|
|
|
/*!
|
|
* @addtogroup key_manager
|
|
* @{
|
|
*/
|
|
|
|
/*******************************************************************************
|
|
* Definitions
|
|
******************************************************************************/
|
|
|
|
/*! @name Driver version */
|
|
/*@{*/
|
|
/*! @brief Key Manager driver version. Version 2.0.2.
|
|
*
|
|
* Current version: 2.0.2
|
|
*
|
|
* Change log:
|
|
*
|
|
* - Version 2.0.2
|
|
* - Fix MISRA-2012 issues
|
|
*
|
|
* - Version 2.0.1
|
|
* - Fix MISRA-2012 issues
|
|
*
|
|
* - Version 2.0.0
|
|
* - Initial version
|
|
*/
|
|
#define FSL_KEYMGR_DRIVER_VERSION (MAKE_VERSION(2, 0, 2))
|
|
/*@}*/
|
|
|
|
typedef enum _keymgr_lock
|
|
{
|
|
kKEYMGR_Unlock = 0u,
|
|
kKEYMGR_Lock = 1u,
|
|
} keymgr_lock_t;
|
|
|
|
typedef enum _keymgr_allow
|
|
{
|
|
kKEYMGR_Disallow = 0u,
|
|
kKEYMGR_Allow = 1u,
|
|
} keymgr_allow_t;
|
|
|
|
typedef enum _keymgr_slot
|
|
{
|
|
kKEYMGR_Slot0 = 0u,
|
|
kKEYMGR_Slot1 = 1u,
|
|
kKEYMGR_Slot2 = 2u,
|
|
kKEYMGR_Slot3 = 3u,
|
|
kKEYMGR_Slot4 = 4u,
|
|
} keymgr_slot_t;
|
|
|
|
#define KEYMGR_IEE_RELOAD 1u
|
|
#define KEYMGR_SEL_OCOTP 0u
|
|
#define KEYMGR_SEL_UDF 0u
|
|
#define KEYMGR_SEL_PUF 1u
|
|
|
|
#define keymgr_select_t uint8_t
|
|
|
|
/*! @brief Key Manager slot configuration structure. */
|
|
typedef struct _domain_slot_config
|
|
{
|
|
keymgr_lock_t lockControl; /*!< Lock control register of slot. */
|
|
keymgr_allow_t allowUser; /*!< Allow user write access to domain control register or domain register. */
|
|
keymgr_allow_t allowNonSecure; /*!< Allow non-secure write access to domain control register or domain register. */
|
|
keymgr_lock_t lockList; /*!< Lock whitelist. SLOTx_CTRL[WHITE_LIST] cannot be changed. */
|
|
uint8_t whiteList; /*!< Domains that on the Whitelist can change given slot. */
|
|
/*!< Each field represents one domain. Bit0~Bit3 represent DOMAIN0~DOMAIN3 respectively. */
|
|
} domain_slot_config_t;
|
|
|
|
/*******************************************************************************
|
|
* API
|
|
******************************************************************************/
|
|
#if defined(__cplusplus)
|
|
extern "C" {
|
|
#endif
|
|
|
|
/*!
|
|
* @brief Configures Master key settings.
|
|
*
|
|
* This function configures Key Manager's setting for Master key.
|
|
*
|
|
* @param base Key Manager peripheral address.
|
|
* @param select select source for Master key.
|
|
* @param lock setting for lock Master key.
|
|
* @return status of Master key control operation
|
|
*/
|
|
status_t KEYMGR_MasterKeyControll(KEY_MANAGER_Type *base, keymgr_select_t select, keymgr_lock_t lock);
|
|
|
|
/*!
|
|
* @brief Configures OTFAD1 key settings.
|
|
*
|
|
* This function configures Key Manager's setting for OTFAD1 key.
|
|
*
|
|
* @param base Key Manager peripheral address.
|
|
* @param select select source for OTFAD1 key.
|
|
* @param lock setting for lock OTFAD1 key.
|
|
* @return status of OTFAD1 key control operation
|
|
*/
|
|
status_t KEYMGR_OTFAD1KeyControll(KEY_MANAGER_Type *base, keymgr_select_t select, keymgr_lock_t lock);
|
|
|
|
/*!
|
|
* @brief Configures OTFAD2 key settings.
|
|
*
|
|
* This function configures Key Manager's setting for OTFAD2 key.
|
|
*
|
|
* @param base Key Manager peripheral address.
|
|
* @param select select source for OTFAD2 key.
|
|
* @param lock setting for lock OTFAD2 key.
|
|
* @return status of OTFAD2 key control operation
|
|
*/
|
|
status_t KEYMGR_OTFAD2KeyControll(KEY_MANAGER_Type *base, keymgr_select_t select, keymgr_lock_t lock);
|
|
|
|
/*!
|
|
* @brief Restart load key signal for IEE.
|
|
*
|
|
* This function genrates Key Manager's restart signal for IEE key.
|
|
*
|
|
* @param base Key Manager peripheral address.
|
|
*/
|
|
void KEYMGR_IEEKeyReload(KEY_MANAGER_Type *base);
|
|
|
|
/*!
|
|
* @brief Lock the key select from PUF.
|
|
*
|
|
* This function locks selection of key for PUF.
|
|
*
|
|
* @param base Key Manager peripheral address.
|
|
* @param lock Setting for selection of key for PUF.
|
|
*/
|
|
void KEYMGR_PUFKeyLock(KEY_MANAGER_Type *base, keymgr_lock_t lock);
|
|
|
|
/*!
|
|
* @brief Configures Slot Domain control.
|
|
*
|
|
* This function configures domain slot control which locks and allows writes.
|
|
*
|
|
* @param base Key Manager peripheral address.
|
|
* @param config Pointer to slot configuration structure.
|
|
* @param slot Select slot to be configured.
|
|
* @return status of slot control operation
|
|
*/
|
|
status_t KEYMGR_SlotControl(KEY_MANAGER_Type *base, domain_slot_config_t *config, keymgr_slot_t slot);
|
|
|
|
/*!
|
|
* @brief Resets Key Manager module to factory default values.
|
|
*
|
|
* This function performs hardware reset of Key Manager module.
|
|
*
|
|
* @param base Key Manager peripheral address.
|
|
*/
|
|
void KEYMGR_Init(KEY_MANAGER_Type *base);
|
|
|
|
/*!
|
|
* @brief Sets the default configuration of Key manager slot.
|
|
*
|
|
* This function initialize Key Manager slot config structure to default values.
|
|
*
|
|
* @param config Pointer to slot configuration structure.
|
|
*/
|
|
status_t KEYMGR_GetDefaultConfig(domain_slot_config_t *config);
|
|
|
|
#if defined(__cplusplus)
|
|
}
|
|
#endif
|
|
|
|
/*!
|
|
*@}
|
|
*/
|
|
|
|
#endif /* _FSL_IEE_H_ */
|