File indexing completed on 2025-05-11 08:22:59
0001
0002
0003
0004
0005
0006
0007
0008 #include "fsl_key_manager.h"
0009
0010
0011
0012
0013
0014
0015 #ifndef FSL_COMPONENT_ID
0016 #define FSL_COMPONENT_ID "platform.drivers.key_manager"
0017 #endif
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037 status_t KEYMGR_MasterKeyControll(KEY_MANAGER_Type *base, keymgr_select_t select, keymgr_lock_t lock)
0038 {
0039 if ((select != (uint8_t)(KEYMGR_SEL_UDF)) && (select != (uint8_t)(KEYMGR_SEL_PUF)))
0040 {
0041 return kStatus_InvalidArgument;
0042 }
0043
0044
0045 base->MASTER_KEY_CTRL &= ~KEY_MANAGER_MASTER_KEY_CTRL_SELECT_MASK;
0046
0047
0048 base->MASTER_KEY_CTRL |= KEY_MANAGER_MASTER_KEY_CTRL_SELECT(select) | KEY_MANAGER_MASTER_KEY_CTRL_LOCK(lock);
0049
0050 return kStatus_Success;
0051 }
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063 status_t KEYMGR_OTFAD1KeyControll(KEY_MANAGER_Type *base, keymgr_select_t select, keymgr_lock_t lock)
0064 {
0065 if ((select != (uint8_t)(KEYMGR_SEL_OCOTP)) && (select != (uint8_t)(KEYMGR_SEL_PUF)))
0066 {
0067 return kStatus_InvalidArgument;
0068 }
0069
0070
0071 base->OTFAD1_KEY_CTRL &= ~KEY_MANAGER_OTFAD1_KEY_CTRL_SELECT_MASK;
0072
0073
0074 base->OTFAD1_KEY_CTRL |= KEY_MANAGER_OTFAD1_KEY_CTRL_SELECT(select) | KEY_MANAGER_OTFAD1_KEY_CTRL_LOCK(lock);
0075
0076 return kStatus_Success;
0077 }
0078
0079
0080
0081
0082
0083
0084
0085
0086
0087
0088
0089 status_t KEYMGR_OTFAD2KeyControll(KEY_MANAGER_Type *base, keymgr_select_t select, keymgr_lock_t lock)
0090 {
0091 if ((select != (uint8_t)(KEYMGR_SEL_OCOTP)) && (select != (uint8_t)(KEYMGR_SEL_PUF)))
0092 {
0093 return kStatus_InvalidArgument;
0094 }
0095
0096
0097 base->OTFAD2_KEY_CTRL &= ~KEY_MANAGER_OTFAD2_KEY_CTRL_SELECT_MASK;
0098
0099
0100 base->OTFAD2_KEY_CTRL |= KEY_MANAGER_OTFAD2_KEY_CTRL_SELECT(select) | KEY_MANAGER_OTFAD2_KEY_CTRL_LOCK(lock);
0101
0102 return kStatus_Success;
0103 }
0104
0105
0106
0107
0108
0109
0110
0111
0112 void KEYMGR_IEEKeyReload(KEY_MANAGER_Type *base)
0113 {
0114 base->IEE_KEY_CTRL |= KEYMGR_IEE_RELOAD;
0115 }
0116
0117
0118
0119
0120
0121
0122
0123
0124 void KEYMGR_PUFKeyLock(KEY_MANAGER_Type *base, keymgr_lock_t lock)
0125 {
0126 base->PUF_KEY_CTRL |= KEY_MANAGER_PUF_KEY_CTRL_LOCK(lock);
0127 }
0128
0129
0130
0131
0132
0133
0134
0135
0136 status_t KEYMGR_GetDefaultConfig(domain_slot_config_t *config)
0137 {
0138 if (config == NULL)
0139 {
0140 return kStatus_InvalidArgument;
0141 }
0142
0143 config->lockControl = kKEYMGR_Unlock;
0144 config->allowUser = kKEYMGR_Allow;
0145 config->allowNonSecure = kKEYMGR_Allow;
0146 config->lockList = kKEYMGR_Unlock;
0147 config->whiteList = 0u;
0148
0149 return kStatus_Success;
0150 }
0151
0152
0153
0154
0155
0156
0157
0158
0159
0160
0161 status_t KEYMGR_SlotControl(KEY_MANAGER_Type *base, domain_slot_config_t *config, keymgr_slot_t slot)
0162 {
0163 if (slot == kKEYMGR_Slot0)
0164 {
0165 base->SLOT0_CTRL |=
0166 KEY_MANAGER_SLOT0_CTRL_WHITE_LIST(config->whiteList) | KEY_MANAGER_SLOT0_CTRL_LOCK_LIST(config->lockList) |
0167 KEY_MANAGER_SLOT0_CTRL_TZ_NS(config->allowNonSecure) | KEY_MANAGER_SLOT0_CTRL_TZ_USER(config->allowUser) |
0168 KEY_MANAGER_SLOT0_CTRL_LOCK_CONTROL(config->lockControl);
0169 }
0170 else if (slot == kKEYMGR_Slot1)
0171 {
0172 base->SLOT1_CTRL |=
0173 KEY_MANAGER_SLOT0_CTRL_WHITE_LIST(config->whiteList) | KEY_MANAGER_SLOT0_CTRL_LOCK_LIST(config->lockList) |
0174 KEY_MANAGER_SLOT0_CTRL_TZ_NS(config->allowNonSecure) | KEY_MANAGER_SLOT0_CTRL_TZ_USER(config->allowUser) |
0175 KEY_MANAGER_SLOT1_CTRL_LOCK_CONTROL(config->lockControl);
0176 }
0177 else if (slot == kKEYMGR_Slot2)
0178 {
0179 base->SLOT2_CTRL |=
0180 KEY_MANAGER_SLOT0_CTRL_WHITE_LIST(config->whiteList) | KEY_MANAGER_SLOT0_CTRL_LOCK_LIST(config->lockList) |
0181 KEY_MANAGER_SLOT0_CTRL_TZ_NS(config->allowNonSecure) | KEY_MANAGER_SLOT0_CTRL_TZ_USER(config->allowUser) |
0182 KEY_MANAGER_SLOT2_CTRL_LOCK_CONTROL(config->lockControl);
0183 }
0184 else if (slot == kKEYMGR_Slot3)
0185 {
0186 base->SLOT3_CTRL |=
0187 KEY_MANAGER_SLOT0_CTRL_WHITE_LIST(config->whiteList) | KEY_MANAGER_SLOT0_CTRL_LOCK_LIST(config->lockList) |
0188 KEY_MANAGER_SLOT0_CTRL_TZ_NS(config->allowNonSecure) | KEY_MANAGER_SLOT0_CTRL_TZ_USER(config->allowUser) |
0189 KEY_MANAGER_SLOT3_CTRL_LOCK_CONTROL(config->lockControl);
0190 }
0191 else if (slot == kKEYMGR_Slot4)
0192 {
0193 base->SLOT4_CTRL |=
0194 KEY_MANAGER_SLOT0_CTRL_WHITE_LIST(config->whiteList) | KEY_MANAGER_SLOT0_CTRL_LOCK_LIST(config->lockList) |
0195 KEY_MANAGER_SLOT0_CTRL_TZ_NS(config->allowNonSecure) | KEY_MANAGER_SLOT0_CTRL_TZ_USER(config->allowUser) |
0196 KEY_MANAGER_SLOT4_CTRL_LOCK_CONTROL(config->lockControl);
0197 }
0198 else
0199 {
0200 return kStatus_InvalidArgument;
0201 }
0202
0203 return kStatus_Success;
0204 }
0205
0206
0207
0208
0209
0210
0211
0212
0213 void KEYMGR_Init(KEY_MANAGER_Type *base)
0214 {
0215 #if !(defined(FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && FSL_SDK_DISABLE_DRIVER_CLOCK_CONTROL)
0216 CLOCK_EnableClock(kCLOCK_Key_Manager);
0217 #endif
0218 }