1 /* 2 * Copyright 2022 NXP 3 * All rights reserved. 4 * 5 * SPDX-License-Identifier: BSD-3-Clause 6 */ 7 #ifndef FSL_ITRC_H_ 8 #define FSL_ITRC_H_ 9 10 #include "fsl_common.h" 11 12 /*! 13 * @addtogroup ITRC 14 * @{ 15 */ 16 17 /*! @file */ 18 19 /******************************************************************************* 20 * Definitions 21 *******************************************************************************/ 22 23 /*! @name Driver version */ 24 /*! @{ */ 25 /*! @brief Defines ITRC driver version 2.3.0. 26 * 27 * Change log: 28 * - Version 2.3.0 29 * - Update names of kITRC_SwEvent1/2 to kITRC_SwEvent0/1 to align with RM 30 * - Version 2.2.0 31 * - Update driver to new version and input events 32 * - Version 2.1.0 33 * - Make SYSCON glitch platform dependent 34 * - Version 2.0.0 35 * - initial version 36 */ 37 #define FSL_ITRC_DRIVER_VERSION (MAKE_VERSION(2, 3, 0)) 38 /*! @} */ 39 40 typedef enum _itrc_input_signals 41 { 42 kITRC_Glitch = 0U, 43 kITRC_Tamper = 1U, 44 kITRC_Cdog = 2U, 45 kITRC_BodVbat = 3u, 46 kITRC_BodVdd = 4u, 47 kITRC_Watchdog = 5u, 48 kITRC_FlashEcc = 6u, 49 kITRC_Ahb = 7u, 50 kITRC_ElsErr = 8u, 51 #if defined(FSL_FEATURE_ITRC_HAS_SYSCON_GLITCH) && (FSL_FEATURE_ITRC_HAS_SYSCON_GLITCH > 0) 52 kITRC_SysconGlitch = 9u, 53 #endif 54 kITRC_Pkc = 10u, 55 #if defined(ITRC_OUTX_SEL_OUTX_SELY_OUT_SEL_IN11_SELn_MASK) 56 kITRC_Cdog1 = 11u, 57 #endif /* ITRC_OUTX_SEL_OUTX_SELY_OUT_SEL_IN11_SELn_MASK */ 58 #if defined(ITRC_OUTX_SEL_OUTX_SELY_OUT_SEL_IN12_SELn_MASK) 59 kITRC_Watchdog1 = 12u, 60 #endif /* ITRC_OUTX_SEL_OUTX_SELY_OUT_SEL_IN12_SELn_MASK*/ 61 #if defined(ITRC_OUTX_SEL_OUTX_SELY_OUT_SEL_IN13_SELn_MASK) 62 kITRC_Freqme = 13u, 63 #endif /* ITRC_OUTX_SEL_OUTX_SELY_OUT_SEL_IN13_SELn_MASK */ 64 kITRC_SwEvent0 = 14u, 65 kITRC_SwEvent1 = 15u, 66 #if defined(ITRC_OUTX_SEL_1_OUTX_SELY_OUT_SEL_1_IN16_SELn_MASK) 67 kITRC_VddSysLow = 16u, 68 #endif /* ITRC_OUTX_SEL_1_OUTX_SELY_OUT_SEL_1_IN16_SELn_MASK */ 69 #if defined(ITRC_OUTX_SEL_1_OUTX_SELY_OUT_SEL_1_IN17_SELn_MASK) 70 kITRC_VddIoLow = 17u, 71 #endif /* ITRC_OUTX_SEL_1_OUTX_SELY_OUT_SEL_1_IN17_SELn_MASK */ 72 #if defined(ITRC_OUTX_SEL_1_OUTX_SELY_OUT_SEL_1_IN19_SELn_MASK) 73 kITRC_VddTemp = 19u, 74 #endif /* ITRC_OUTX_SEL_1_OUTX_SELY_OUT_SEL_1_IN19_SELn_MASK */ 75 #if defined(ITRC_OUTX_SEL_1_OUTX_SELY_OUT_SEL_1_IN20_SELn_MASK) 76 kITRC_VddClock = 20u, 77 #endif /* ITRC_OUTX_SEL_1_OUTX_SELY_OUT_SEL_1_IN20_SELn_MASK */ 78 #if defined(ITRC_OUTX_SEL_1_OUTX_SELY_OUT_SEL_1_IN21_SELn_MASK) 79 kITRC_INTM0 = 21u, 80 #endif /* ITRC_OUTX_SEL_1_OUTX_SELY_OUT_SEL_1_IN21_SELn_MASK */ 81 #if defined(ITRC_OUTX_SEL_1_OUTX_SELY_OUT_SEL_1_IN22_SELn_MASK) 82 kITRC_INTM1 = 22u, 83 #endif /* ITRC_OUTX_SEL_1_OUTX_SELY_OUT_SEL_1_IN22_SELn_MASK */ 84 #if defined(ITRC_OUTX_SEL_1_OUTX_SELY_OUT_SEL_1_IN23_SELn_MASK) 85 kITRC_INTM2 = 23u, 86 #endif /* ITRC_OUTX_SEL_1_OUTX_SELY_OUT_SEL_1_IN23_SELn_MASK */ 87 #if defined(ITRC_OUTX_SEL_1_OUTX_SELY_OUT_SEL_1_IN24_SELn_MASK) 88 kITRC_INTM3 = 24u, 89 #endif /* ITRC_OUTX_SEL_1_OUTX_SELY_OUT_SEL_1_IN24_SELn_MASK */ 90 #if defined(ITRC_OUTX_SEL_1_OUTX_SELY_OUT_SEL_1_IN25_SELn_MASK) && \ 91 defined(ITRC_OUTX_SEL_2_OUTX_SELY_OUT_SEL_2_IN32_SELn_MASK) 92 kITRC_SoCTrim0 = 25u, 93 kITRC_SoCTrim1 = 26u, 94 kITRC_SoCTrim2 = 27u, 95 kITRC_SoCTrim3 = 28u, 96 kITRC_SoCTrim4 = 29u, 97 kITRC_SoCTrim5 = 30u, 98 kITRC_SoCTrim6 = 31u, 99 kITRC_SoCTrim7 = 32u, 100 #endif /* ITRC_OUTX_SEL_x_OUTX_SELY_OUT_SEL_INxx_SELn_MASK */ 101 #if defined(ITRC_OUTX_SEL_2_OUTX_SELY_OUT_SEL_2_IN33_SELn_MASK) 102 kITRC_GdetSfr = 33u, 103 #endif /* ITRC_OUTX_SEL_x_OUTX_SELY_OUT_SEL_INxx_SELn_MASK */ 104 #if defined(ITRC_OUTX_SEL_2_OUTX_SELY_OUT_SEL_2_IN34_SELn_MASK) 105 kITRC_VddCore = 34u, 106 #endif /* ITRC_OUTX_SEL_2_OUTX_SELY_OUT_SEL_2_IN34_SELn_MASK */ 107 #if defined(ITRC_OUTX_SEL_2_OUTX_SELY_OUT_SEL_2_IN35_SELn_MASK) 108 kITRC_VddSys = 35u, 109 #endif /* ITRC_OUTX_SEL_2_OUTX_SELY_OUT_SEL_2_IN35_SELn_MASK */ 110 #if defined(ITRC_OUTX_SEL_2_OUTX_SELY_OUT_SEL_2_IN36_SELn_MASK) 111 kITRC_VddIo = 36u, 112 #endif /* ITRC_OUTX_SEL_2_OUTX_SELY_OUT_SEL_2_IN36_SELn_MASK */ 113 #if defined(ITRC_OUTX_SEL_2_OUTX_SELY_OUT_SEL_2_IN37_SELn_MASK) 114 kITRC_FlexspiGcm = 37u, 115 #endif /* ITRC_OUTX_SEL_2_OUTX_SELY_OUT_SEL_2_IN37_SELn_MASK */ 116 #if defined(ITRC_OUTX_SEL_2_OUTX_SELY_OUT_SEL_2_IN46_SELn_MASK) 117 kITRC_Sm3Err = 46u, 118 #endif /* ITRC_OUTX_SEL_2_OUTX_SELY_OUT_SEL_2_IN46_SELn_MASK */ 119 #if defined(ITRC_OUTX_SEL_2_OUTX_SELY_OUT_SEL_2_IN47_SELn_MASK) 120 kITRC_TrngErr = 47u, 121 #endif /* */ 122 } itrc_input_signals_t; 123 124 typedef enum _itrc_lock 125 { 126 kITRC_Unlock = 0U, 127 kITRC_Lock = 1U, 128 } itrc_lock_t; 129 130 typedef enum _itrc_enable 131 { 132 kITRC_Enable = 0U, 133 kITRC_Disable = 1U, 134 } itrc_enable_t; 135 136 typedef enum _itrc_out_signals 137 { 138 kITRC_Irq = 0U, 139 kITRC_ElsReset = 1U, 140 kITRC_PufZeroize = 2U, 141 kITRC_RamZeroize = 3u, 142 kITRC_ChipReset = 4u, 143 kITRC_TamperOut = 5u, 144 kITRC_TamperOut1 = 6u, 145 } itrc_out_signals_t; 146 147 /* Inputs 0 to 15 events mask */ 148 #if defined(FSL_FEATURE_ITRC_HAS_SYSCON_GLITCH) && (FSL_FEATURE_ITRC_HAS_SYSCON_GLITCH > 0) 149 #define IN_0_15_EVENTS_MASK \ 150 (ITRC_STATUS_IN0_STATUS_MASK | ITRC_STATUS_IN1_STATUS_MASK | ITRC_STATUS_IN2_STATUS_MASK | \ 151 ITRC_STATUS_IN3_STATUS_MASK | ITRC_STATUS_IN4_STATUS_MASK | ITRC_STATUS_IN5_STATUS_MASK | \ 152 ITRC_STATUS_IN6_STATUS_MASK | ITRC_STATUS_IN7_STATUS_MASK | ITRC_STATUS_IN8_STATUS_MASK | \ 153 ITRC_STATUS_IN9_STATUS_MASK | ITRC_STATUS_IN10_STATUS_MASK | ITRC_STATUS_IN14_STATUS_MASK | \ 154 ITRC_STATUS_IN15_STATUS_MASK) 155 #else 156 #define IN_0_15_EVENTS_MASK \ 157 (ITRC_STATUS_IN0_STATUS_MASK | ITRC_STATUS_IN1_STATUS_MASK | ITRC_STATUS_IN2_STATUS_MASK | \ 158 ITRC_STATUS_IN3_STATUS_MASK | ITRC_STATUS_IN4_STATUS_MASK | ITRC_STATUS_IN5_STATUS_MASK | \ 159 ITRC_STATUS_IN6_STATUS_MASK | ITRC_STATUS_IN7_STATUS_MASK | ITRC_STATUS_IN8_STATUS_MASK | \ 160 ITRC_STATUS_IN10_STATUS_MASK | ITRC_STATUS_IN14_STATUS_MASK | ITRC_STATUS_IN15_STATUS_MASK) 161 #endif /* FSL_FEATURE_ITRC_HAS_SYSCON_GLITCH */ 162 163 /* Inputs 15 to 47 events mask */ 164 #if defined(ITRC_STATUS1_IN16_STATUS_MASK) && defined(ITRC_STATUS1_IN47_STATUS) 165 #define IN_16_47_EVENTS_MASK \ 166 (ITRC_STATUS1_IN16_STATUS_MASK | ITRC_STATUS1_IN17_STATUS_MASK | ITRC_STATUS1_IN18_STATUS_MASK | \ 167 ITRC_STATUS1_IN19_STATUS_MASK | ITRC_STATUS1_IN20_STATUS_MASK | ITRC_STATUS1_IN24_21_STATUS_MASK | \ 168 ITRC_STATUS1_IN24_21_STATUS_MASK | ITRC_STATUS1_IN32_25_STATUS_MASK | ITRC_STATUS1_IN33_STATUS_MASK | \ 169 ITRC_STATUS1_IN34_STATUS_MASK | ITRC_STATUS1_IN35_STATUS_MASK | ITRC_STATUS1_IN36_STATUS_MASK | \ 170 ITRC_STATUS1_IN37_STATUS_MASK | ITRC_STATUS1_IN46_STATUS_MASK | ITRC_STATUS1_IN47_STATUS_MASK) 171 #endif /* ITRC_STATUS1_IN16_STATUS_MASK && ITRC_STATUS1_IN47_STATUS */ 172 173 /* Output actions mask */ 174 #if defined(ITRC_STATUS_OUT6_STATUS) 175 #define OUT_ACTIONS_MASK \ 176 (ITRC_STATUS_OUT0_STATUS_MASK | ITRC_STATUS_OUT1_STATUS_MASK | ITRC_STATUS_OUT2_STATUS_MASK | \ 177 ITRC_STATUS_OUT3_STATUS_MASK | ITRC_STATUS_OUT4_STATUS_MASK | ITRC_STATUS_OUT5_STATUS_MASK | \ 178 ITRC_STATUS_OUT6_STATUS_MASK) 179 #else 180 #define OUT_ACTIONS_MASK \ 181 (ITRC_STATUS_OUT0_STATUS_MASK | ITRC_STATUS_OUT1_STATUS_MASK | ITRC_STATUS_OUT2_STATUS_MASK | \ 182 ITRC_STATUS_OUT3_STATUS_MASK | ITRC_STATUS_OUT4_STATUS_MASK | ITRC_STATUS_OUT5_STATUS_MASK) 183 #endif /* ITRC_STATUS_OUT6_STATUS */ 184 185 #define ITRC_OUT_COUNT (7u) 186 #ifndef ITRC 187 #define ITRC ITRC0 188 #endif 189 190 /******************************************************************************* 191 * API 192 *******************************************************************************/ 193 194 extern void ITRC0_DriverIRQHandler(void); 195 196 #if defined(__cplusplus) 197 extern "C" { 198 #endif /* __cplusplus */ 199 200 /*! 201 * @name ITRC Functional Operation 202 * @{ 203 */ 204 205 /*! 206 * @brief Set ITRC Action to Event 207 * 208 * This function sets input Event signal to corresponding output Action response signal. 209 * 210 * @param base ITRC peripheral base address 211 * @param out ITRC OUT signal action 212 * @param in ITRC IN signal event 213 * @param lock if set locks INx_SEL configuration. This can be cleared only by PMC Core reset. 214 * @param enable if set input Event will be selected for output Action, otherwise disable (if not already locked). 215 * @return kStatus_Success if success, kStatus_InvalidArgument otherwise 216 */ 217 status_t ITRC_SetActionToEvent( 218 ITRC_Type *base, itrc_out_signals_t out, itrc_input_signals_t in, itrc_lock_t lock, itrc_enable_t enable); 219 220 /*! 221 * @brief Trigger ITRC SW Event 0 222 * 223 * This funciton set SW_EVENT0 register with value !=0 which triggers ITRC SW Event 0. 224 * 225 * @param base ITRC peripheral base address 226 */ 227 void ITRC_SetSWEvent0(ITRC_Type *base); 228 229 /*! 230 * @brief Trigger ITRC SW Event 1 231 * 232 * This funciton set SW_EVENT1 register with value !=0 which triggers ITRC SW Event 1. 233 * 234 * @param base ITRC peripheral base address 235 */ 236 void ITRC_SetSWEvent1(ITRC_Type *base); 237 238 /*! 239 * @brief Get ITRC Status 240 * 241 * This function returns ITRC register status. 242 * 243 * @param base ITRC peripheral base address 244 * @return Value of ITRC STATUS register 245 */ 246 uint32_t ITRC_GetStatus(ITRC_Type *base); 247 248 /*! 249 * @brief Clear ITRC status 250 * 251 * This function clears corresponding ITRC event or action in STATUS register. 252 * 253 * @param base ITRC peripheral base address 254 * @param word 32bit word represent corresponding event/action in STATUS register to be cleared (see 255 * ITRC_STATUS_INx/OUTx_STATUS) 256 * @return kStatus_Success if success, kStatus_InvalidArgument otherwise 257 */ 258 status_t ITRC_ClearStatus(ITRC_Type *base, uint32_t word); 259 260 #if defined(ITRC_STATUS1_IN16_STATUS_MASK) 261 /*! 262 * @brief Get ITRC Status 1 263 * 264 * This function returns ITRC STATUS1 register value. 265 * 266 * @param base ITRC peripheral base address 267 * @return Value of ITRC STATUS1 register 268 */ 269 uint32_t ITRC_GetStatus1(ITRC_Type *base); 270 271 /*! 272 * brief Clear ITRC status 1 273 * 274 * This function clears corresponding ITRC event or action in STATUS1 register. 275 * 276 * param base ITRC peripheral base address 277 * param word 32bit word represent corresponding event/action in STATUS1 register to be cleared (see 278 * ITRC_STATUS_INx/OUTx_STATUS) 279 * return kStatus_Success if success, kStatus_InvalidArgument otherwise 280 */ 281 status_t ITRC_ClearStatus1(ITRC_Type *base, uint32_t word); 282 #endif /* defined(ITRC_STATUS1_IN16_STATUS_MASK) */ 283 284 /*! 285 * @brief Clear All ITRC status 286 * 287 * This function clears all event and action status. 288 * 289 * @param base ITRC peripheral base address 290 * @return kStatus_Success if success 291 */ 292 status_t ITRC_ClearAllStatus(ITRC_Type *base); 293 294 /*! 295 * @brief Initialize ITRC 296 * 297 * This function initializes ITRC by enabling IRQ. 298 * 299 * @param base ITRC peripheral base address 300 * @param conf ITRC configuration structure 301 * @return Status of the init operation 302 */ 303 status_t ITRC_Init(ITRC_Type *base); 304 305 /*! 306 * @brief Deinitialize ITRC 307 * 308 * This function deinitializes ITRC by disabling IRQ. 309 * 310 * @param base ITRC peripheral base address 311 */ 312 void ITRC_Deinit(ITRC_Type *base); 313 314 /*! @}*/ 315 316 #if defined(__cplusplus) 317 } 318 #endif /* __cplusplus */ 319 320 /*! @}*/ /* end of group itrc */ 321 322 #endif /* FSL_ITRC_H_ */ 323