1 /*
2 * Copyright (c) 2016, Freescale Semiconductor, Inc.
3 * Copyright 2016, NXP
4 * All rights reserved.
5 *
6 * SPDX-License-Identifier: BSD-3-Clause
7 */
8
9 #ifndef _FSL_RESET_H_
10 #define _FSL_RESET_H_
11
12 #include <assert.h>
13 #include <stdbool.h>
14 #include <stdint.h>
15 #include <string.h>
16 #include "fsl_device_registers.h"
17
18 /*!
19 * @addtogroup reset
20 * @{
21 */
22
23 /*******************************************************************************
24 * Definitions
25 ******************************************************************************/
26
27 /*! @name Driver version */
28 /*@{*/
29 /*! @brief reset driver version 2.4.0 */
30 #define FSL_RESET_DRIVER_VERSION (MAKE_VERSION(2, 4, 0))
31 /*@}*/
32
33 /*!
34 * @brief Enumeration for peripheral reset control bits
35 *
36 * Defines the enumeration for peripheral reset control bits in PRESETCTRL/ASYNCPRESETCTRL registers
37 */
38 typedef enum _SYSCON_RSTn
39 {
40 kROM_RST_SHIFT_RSTn = (0 | (1U)), /**< ROM reset control .*/
41 kSRAM_CTRL1_RST_SHIFT_RSTn = (0 | (3U)), /**< SRAM Controller 1 reset control .*/
42 kSRAM_CTRL2_RST_SHIFT_RSTn = (0 | (4U)), /**< SRAM Controller 2 reset control .*/
43 kSRAM_CTRL3_RST_SHIFT_RSTn = (0 | (5U)), /**< SRAM Controller 3 reset control .*/
44 kSRAM_CTRL4_RST_SHIFT_RSTn = (0 | (6U)), /**< SRAM Controller 4 reset control .*/
45 kFLASH_RST_SHIFT_RSTn = (0 | (7U)), /**< FLASH reset control .*/
46 kFMC_RST_SHIFT_RSTn = (0 | (8U)), /**< FMC reset control .*/
47 kFLEXSPI_RST_SHIFT_RSTn = (0 | (10U)), /**< FLEXSPI reset control .*/
48 kMUX_RST_SHIFT_RSTn = (0 | (11U)), /**< MUX reset control .*/
49 kIOCON_RST_SHIFT_RSTn = (0 | (13U)), /**< IOCON reset control .*/
50 kGPIO0_RST_SHIFT_RSTn = (0 | (14U)), /**< GPIO0 reset control .*/
51 kGPIO1_RST_SHIFT_RSTn = (0 | (15U)), /**< GPIO1 reset control .*/
52 kGPIO2_RST_SHIFT_RSTn = (0 | (16U)), /**< GPIO2 reset control .*/
53 kGPIO3_RST_SHIFT_RSTn = (0 | (17U)), /**< GPIO3 reset control .*/
54 kPINT_RST_SHIFT_RSTn = (0 | (18U)), /**< PINT reset control .*/
55 kGINT_RST_SHIFT_RSTn = (0 | (19U)), /**< GINT reset control .*/
56 kDMA0_RST_SHIFT_RSTn = (0 | (20U)), /**< DMA0 reset control .*/
57 kCRC_RST_SHIFT_RSTn = (0 | (21U)), /**< CRC reset control .*/
58 kWWDT_RST_SHIFT_RSTn = (0 | (22U)), /**< WWDT reset control .*/
59 kRTC_RST_SHIFT_RSTn = (0 | (23U)), /**< RTC reset control .*/
60 kMAILBOX_RST_SHIFT_RSTn = (0 | (26U)), /**< MAILBOX reset control .*/
61 kADC0_RST_SHIFT_RSTn = (0 | (27U)), /**< ADC0 reset control .*/
62 kADC1_RST_SHIFT_RSTn = (0 | (28U)), /**< ADC1 reset control .*/
63 kDAC0_RST_SHIFT_RSTn = (0 | (29U)), /**< DAC0 reset control .*/
64
65 kMRT_RST_SHIFT_RSTn = (0x10000 | (0U)), /**< MRT reset control .*/
66 kOSTIMER_RST_SHIFT_RSTn = (0x10000 | (1U)), /**< OSTIMER reset control .*/
67 kSCT_RST_SHIFT_RSTn = (0x10000 | (2U)), /**< SCT reset control .*/
68 kMCAN_RST_SHIFT_RSTn = (0x10000 | (7U)), /**< MCAN reset control .*/
69 kUTICK_RST_SHIFT_RSTn = (0x10000 | (10U)), /**< UTICK reset control .*/
70 kFC0_RST_SHIFT_RSTn = (0x10000 | (11U)), /**< FC0 reset control .*/
71 kFC1_RST_SHIFT_RSTn = (0x10000 | (12U)), /**< FC1 reset control .*/
72 kFC2_RST_SHIFT_RSTn = (0x10000 | (13U)), /**< FC2 reset control .*/
73 kFC3_RST_SHIFT_RSTn = (0x10000 | (14U)), /**< FC3 reset control .*/
74 kFC4_RST_SHIFT_RSTn = (0x10000 | (15U)), /**< FC4 reset control .*/
75 kFC5_RST_SHIFT_RSTn = (0x10000 | (16U)), /**< FC5 reset control .*/
76 kFC6_RST_SHIFT_RSTn = (0x10000 | (17U)), /**< FC6 reset control .*/
77 kFC7_RST_SHIFT_RSTn = (0x10000 | (18U)), /**< FC7 reset control .*/
78 kDMIC_RST_SHIFT_RSTn = (0x10000 | (19U)), /**< DMIC reset control .*/
79 kCTIMER2_RST_SHIFT_RSTn = (0x10000 | (22U)), /**< TIMER2 reset control .*/
80 kUSB0_DEV_RST_SHIFT_RSTn = (0x10000 | (25U)), /**< USB0_DEV reset control .*/
81 kCTIMER0_RST_SHIFT_RSTn = (0x10000 | (26U)), /**< TIMER0 reset control .*/
82 kCTIMER1_RST_SHIFT_RSTn = (0x10000 | (27U)), /**< TIMER1 reset control .*/
83
84 kDMA1_RST_SHIFT_RSTn = (0x20000 | (1U)), /**< DMA1 reset control .*/
85 kCMP_RST_SHIFT_RSTn = (0x20000 | (2U)), /**< CMP reset control .*/
86 kFREQME_RST_SHIFT_RSTn = (0x20000 | (8U)), /**< FREQME reset control .*/
87 kCDOG_RST_SHIFT_RSTn = (0x20000 | (11U)), /**< Code Watchdog reset control */
88 kRNG_RST_SHIFT_RSTn = (0x20000 | (13U)), /**< RNG reset control .*/
89 kSYSCTL_RST_SHIFT_RSTn = (0x20000 | (15U)), /**< SYSCTL reset control .*/
90 kUSB0HMR_RST_SHIFT_RSTn = (0x20000 | (16U)), /**< USB0HMR reset control */
91 kUSB0HSL_RST_SHIFT_RSTn = (0x20000 | (17U)), /**< USB0HSL reset control */
92 kCSS_RST_SHIFT_RSTn = (0x20000 | (18U)), /**< CSS reset control .*/
93 kPOWERQUAD_RST_SHIFT_RSTn = (0x20000 | (19U)), /**< PowerQuad reset control .*/
94 kCTIMER3_RST_SHIFT_RSTn = (0x20000 | (21U)), /**< TIMER3 reset control .*/
95 kCTIMER4_RST_SHIFT_RSTn = (0x20000 | (22U)), /**< TIMER4 reset control .*/
96 kPUF_RST_SHIFT_RSTn = (0x20000 | (23U)), /**< PUF reset control */
97 kPKC_RST_SHIFT_RSTn = (0x20000 | (24U)), /**< PKC reset control .*/
98 kANACTRL_RST_SHIFT_RSTn = (0x20000 | (27U)), /**< ANACTRL reset control .*/
99 kHSLSPI_RST_SHIFT_RSTn = (0x20000 | (28U)), /**< HS LSPI reset control */
100 kGPIOSEC_RST_SHIFT_RSTn = (0x20000 | (29U)), /**< GPIO_SEC reset control .*/
101 kGPIO_SEC_INT_RST_SHIFT_RSTn = (0x20000 | (30U)), /**< GPIO secure int reset control .*/
102
103 kI3C0_RST_SHIFT_RSTn = (0x30000 | (0U)), /**< I3C0 reset control .*/
104 kENC0_RST_SHIFT_RSTn = (0x30000 | (3U)), /**< ENC0 reset control .*/
105 kENC1_RST_SHIFT_RSTn = (0x30000 | (4U)), /**< ENC1 reset control .*/
106 kPWM0_RST_SHIFT_RSTn = (0x30000 | (5U)), /**< PWM0 reset control .*/
107 kPWM1_RST_SHIFT_RSTn = (0x30000 | (6U)), /**< PWM1 reset control .*/
108 kAOI0_RST_SHIFT_RSTn = (0x30000 | (7U)), /**< AOI0 reset control .*/
109 kAOI1_RST_SHIFT_RSTn = (0x30000 | (8U)), /**< AOI1 reset control .*/
110 kFTM0_RST_SHIFT_RSTn = (0x30000 | (9U)), /**< FTM0 reset control .*/
111 kDAC1_RST_SHIFT_RSTn = (0x30000 | (10U)), /**< DAC1 reset control .*/
112 kDAC2_RST_SHIFT_RSTn = (0x30000 | (11U)), /**< DAC2 reset control .*/
113 kOPAMP0_RST_SHIFT_RSTn = (0x30000 | (12U)), /**< OPAMP0 reset control .*/
114 kOPAMP1_RST_SHIFT_RSTn = (0x30000 | (13U)), /**< OPAMP1 reset control .*/
115 kOPAMP2_RST_SHIFT_RSTn = (0x30000 | (14U)), /**< OPAMP2 reset control .*/
116 kHSCMP0_RST_SHIFT_RSTn = (0x30000 | (15U)), /**< HSCMP0 reset control .*/
117 kHSCMP1_RST_SHIFT_RSTn = (0x30000 | (16U)), /**< HSCMP1 reset control .*/
118 kHSCMP2_RST_SHIFT_RSTn = (0x30000 | (17U)), /**< HSCMP2 reset control .*/
119 kVREF_RST_SHIFT_RSTn = (0x30000 | (18U)), /**< VREF reset control .*/
120 } SYSCON_RSTn_t;
121
122 /** Array initializers with peripheral reset bits **/
123 #define ADC_RSTS \
124 { \
125 kADC0_RST_SHIFT_RSTn, kADC1_RST_SHIFT_RSTn \
126 } /* Reset bits for ADC peripheral */
127 #define MCAN_RSTS \
128 { \
129 kMCAN_RST_SHIFT_RSTn \
130 } /* Reset bits for CAN peripheral */
131 #define CRC_RSTS \
132 { \
133 kCRC_RST_SHIFT_RSTn \
134 } /* Reset bits for CRC peripheral */
135 #define CTIMER_RSTS \
136 { \
137 kCTIMER0_RST_SHIFT_RSTn, kCTIMER1_RST_SHIFT_RSTn, kCTIMER2_RST_SHIFT_RSTn, kCTIMER3_RST_SHIFT_RSTn, \
138 kCTIMER4_RST_SHIFT_RSTn \
139 } /* Reset bits for CTIMER peripheral */
140 #define DMA_RSTS_N \
141 { \
142 kDMA0_RST_SHIFT_RSTn, kDMA1_RST_SHIFT_RSTn \
143 } /* Reset bits for DMA peripheral */
144
145 #define FLEXCOMM_RSTS \
146 { \
147 kFC0_RST_SHIFT_RSTn, kFC1_RST_SHIFT_RSTn, kFC2_RST_SHIFT_RSTn, kFC3_RST_SHIFT_RSTn, kFC4_RST_SHIFT_RSTn, \
148 kFC5_RST_SHIFT_RSTn, kFC6_RST_SHIFT_RSTn, kFC7_RST_SHIFT_RSTn, kHSLSPI_RST_SHIFT_RSTn \
149 } /* Reset bits for FLEXCOMM peripheral */
150 #define GINT_RSTS \
151 { \
152 kGINT_RST_SHIFT_RSTn, kGINT_RST_SHIFT_RSTn \
153 } /* Reset bits for GINT peripheral. GINT0 & GINT1 share same slot */
154 #define GPIO_RSTS_N \
155 { \
156 kGPIO0_RST_SHIFT_RSTn, kGPIO1_RST_SHIFT_RSTn, kGPIO2_RST_SHIFT_RSTn, kGPIO3_RST_SHIFT_RSTn \
157 } /* Reset bits for GPIO peripheral */
158 #define INPUTMUX_RSTS \
159 { \
160 kMUX_RST_SHIFT_RSTn \
161 } /* Reset bits for INPUTMUX peripheral */
162 #define IOCON_RSTS \
163 { \
164 kIOCON_RST_SHIFT_RSTn \
165 } /* Reset bits for IOCON peripheral */
166 #define FLASH_RSTS \
167 { \
168 kFLASH_RST_SHIFT_RSTn, kFMC_RST_SHIFT_RSTn \
169 } /* Reset bits for Flash peripheral */
170 #define MRT_RSTS \
171 { \
172 kMRT_RST_SHIFT_RSTn \
173 } /* Reset bits for MRT peripheral */
174 #define PINT_RSTS \
175 { \
176 kPINT_RST_SHIFT_RSTn, kGPIO_SEC_INT_RST_SHIFT_RSTn \
177 } /* Reset bits for PINT peripheral */
178 #define CDOG_RSTS \
179 { \
180 kCDOG_RST_SHIFT_RSTn \
181 } /* Reset bits for CDOG peripheral */
182 #define RNG_RSTS \
183 { \
184 kRNG_RST_SHIFT_RSTn \
185 } /* Reset bits for RNG peripheral */
186 #define SCT_RSTS \
187 { \
188 kSCT_RST_SHIFT_RSTn \
189 } /* Reset bits for SCT peripheral */
190 #define USB0D_RST \
191 { \
192 kUSB0_DEV_RST_SHIFT_RSTn \
193 } /* Reset bits for USB0D peripheral */
194 #define USB0HMR_RST \
195 { \
196 kUSB0HMR_RST_SHIFT_RSTn \
197 } /* Reset bits for USB0HMR peripheral */
198 #define USB0HSL_RST \
199 { \
200 kUSB0HSL_RST_SHIFT_RSTn \
201 } /* Reset bits for USB0HSL peripheral */
202 #define UTICK_RSTS \
203 { \
204 kUTICK_RST_SHIFT_RSTn \
205 } /* Reset bits for UTICK peripheral */
206 #define WWDT_RSTS \
207 { \
208 kWWDT_RST_SHIFT_RSTn \
209 } /* Reset bits for WWDT peripheral */
210 #define OSTIMER_RSTS \
211 { \
212 kOSTIMER_RST_SHIFT_RSTn \
213 } /* Reset bits for OSTIMER peripheral */
214 #define I3C_RSTS \
215 { \
216 kI3C0_RST_SHIFT_RSTn \
217 } /* Reset bits for I3C peripheral */
218 #define ENC_RSTS \
219 { \
220 kENC0_RST_SHIFT_RSTn, kENC1_RST_SHIFT_RSTn \
221 } /* Reset bits for ENC peripheral */
222 #define PWM_RSTS \
223 { \
224 kPWM0_RST_SHIFT_RSTn, kPWM1_RST_SHIFT_RSTn \
225 } /* Reset bits for PWM peripheral */
226 #define AOI_RSTS \
227 { \
228 kAOI0_RST_SHIFT_RSTn, kAOI1_RST_SHIFT_RSTn \
229 } /* Reset bits for AOI peripheral */
230 #define DAC_RSTS \
231 { \
232 kDAC0_RST_SHIFT_RSTn, kDAC1_RST_SHIFT_RSTn, kDAC2_RST_SHIFT_RSTn \
233 } /* Reset bits for DAC peripheral */
234 #define OPAMP_RSTS \
235 { \
236 kOPAMP0_RST_SHIFT_RSTn, kOPAMP1_RST_SHIFT_RSTn, kOPAMP2_RST_SHIFT_RSTn \
237 } /* Reset bits for OPAMP peripheral */
238 #define HSCMP_RSTS \
239 { \
240 kHSCMP0_RST_SHIFT_RSTn, kHSCMP1_RST_SHIFT_RSTn, kHSCMP2_RST_SHIFT_RSTn \
241 } /* Reset bits for HSCMP peripheral */
242 #define POWERQUAD_RSTS \
243 { \
244 kPOWERQUAD_RST_SHIFT_RSTn \
245 } /* Reset bits for Powerquad peripheral */
246 #define PUF_RSTS \
247 { \
248 kPUF_RST_SHIFT_RSTn \
249 } /* Reset bits for PUF peripheral */
250 #define RTC_RSTS \
251 { \
252 kRTC_RST_SHIFT_RSTn \
253 } /* Reset bits for PUF peripheral */
254 typedef SYSCON_RSTn_t reset_ip_name_t;
255 #define USB0HSL_RSTS USB0HSL_RST
256 #define USB0HMR_RSTS USB0HMR_RST
257 #define USB0D_RSTS USB0D_RST
258
259 /*******************************************************************************
260 * API
261 ******************************************************************************/
262 #if defined(__cplusplus)
263 extern "C" {
264 #endif
265
266 /*!
267 * @brief Assert reset to peripheral.
268 *
269 * Asserts reset signal to specified peripheral module.
270 *
271 * @param peripheral Assert reset to this peripheral. The enum argument contains encoding of reset register
272 * and reset bit position in the reset register.
273 */
274 void RESET_SetPeripheralReset(reset_ip_name_t peripheral);
275
276 /*!
277 * @brief Clear reset to peripheral.
278 *
279 * Clears reset signal to specified peripheral module, allows it to operate.
280 *
281 * @param peripheral Clear reset to this peripheral. The enum argument contains encoding of reset register
282 * and reset bit position in the reset register.
283 */
284 void RESET_ClearPeripheralReset(reset_ip_name_t peripheral);
285
286 /*!
287 * @brief Reset peripheral module.
288 *
289 * Reset peripheral module.
290 *
291 * @param peripheral Peripheral to reset. The enum argument contains encoding of reset register
292 * and reset bit position in the reset register.
293 */
294 void RESET_PeripheralReset(reset_ip_name_t peripheral);
295
296 /*!
297 * @brief Release peripheral module.
298 *
299 * Release peripheral module.
300 *
301 * @param peripheral Peripheral to release. The enum argument contains encoding of reset register
302 * and reset bit position in the reset register.
303 */
RESET_ReleasePeripheralReset(reset_ip_name_t peripheral)304 static inline void RESET_ReleasePeripheralReset(reset_ip_name_t peripheral)
305 {
306 RESET_ClearPeripheralReset(peripheral);
307 }
308
309 #if defined(__cplusplus)
310 }
311 #endif
312
313 /*! @} */
314
315 #endif /* _FSL_RESET_H_ */
316