1 /*
2  * Copyright 2023, NXP
3  * All rights reserved.
4  *
5  * SPDX-License-Identifier: BSD-3-Clause
6  */
7 
8 #ifndef _FSL_RESET_H_
9 #define _FSL_RESET_H_
10 
11 #include <assert.h>
12 #include <stdbool.h>
13 #include <stdint.h>
14 #include <string.h>
15 #include "fsl_device_registers.h"
16 
17 /*!
18  * @addtogroup reset
19  * @{
20  */
21 
22 /*******************************************************************************
23  * Definitions
24  ******************************************************************************/
25 
26 /*! @name Driver version */
27 /*@{*/
28 /*! @brief reset driver version 2.4.0 */
29 #define FSL_RESET_DRIVER_VERSION (MAKE_VERSION(2, 4, 0))
30 /*@}*/
31 
32 /*!
33  * @brief Enumeration for peripheral reset control bits
34  *
35  * Defines the enumeration for peripheral reset control bits in PRESETCTRL/ASYNCPRESETCTRL registers
36  */
37 typedef enum _SYSCON_RSTn
38 {
39     kINPUTMUX0_RST_SHIFT_RSTn = (0U | (0U)),          /*!< INPUTMUX0 reset control */
40     kI3C0_RST_SHIFT_RSTn      = (0U | (1U)),          /*!< I3C0      reset control */
41     kCTIMER0_RST_SHIFT_RSTn   = (0U | (2U)),          /*!< CTIMER0   reset control */
42     kCTIMER1_RST_SHIFT_RSTn   = (0U | (3U)),          /*!< CTIMER1   reset control */
43     kCTIMER2_RST_SHIFT_RSTn   = (0U | (4U)),          /*!< CTIMER2   reset control */
44     kCTIMER3_RST_SHIFT_RSTn   = (0U | (5U)),          /*!< CTIMER3   reset control */
45     kCTIMER4_RST_SHIFT_RSTn   = (0U | (6U)),          /*!< CTIMER4   reset control */
46     kFREQME_RST_SHIFT_RSTn    = (0U | (7U)),          /*!< FREQME    reset control */
47     kUTICK0_RST_SHIFT_RSTn    = (0U | (8U)),          /*!< UTICK0    reset control */
48     kDMA_RST_SHIFT_RSTn       = (0U | (10U)),         /*!< DMA       reset control */
49     kAOI0_RST_SHIFT_RSTn      = (0U | (11U)),         /*!< AOI0      reset control */
50     kCRC0_RST_SHIFT_RSTn      = (0U | (12U)),         /*!< CRC0      reset control */
51     kEIM0_RST_SHIFT_RSTn      = (0U | (13U)),         /*!< EIM0      reset control */
52     kERM0_RST_SHIFT_RSTn      = (0U | (14U)),         /*!< ERM0      reset control */
53     kAOI1_RST_SHIFT_RSTn      = (0U | (16U)),         /*!< AOI1      reset control */
54     kFLEXIO0_RST_SHIFT_RSTn   = (0U | (17U)),         /*!< FLEXIO0   reset control */
55     kLPI2C0_RST_SHIFT_RSTn    = (0U | (18U)),         /*!< LPI2C0    reset control */
56     kLPI2C1_RST_SHIFT_RSTn    = (0U | (19U)),         /*!< LPI2C1    reset control */
57     kLPSPI0_RST_SHIFT_RSTn    = (0U | (20U)),         /*!< LPSPI0    reset control */
58     kLPSPI1_RST_SHIFT_RSTn    = (0U | (21U)),         /*!< LPSPI1    reset control */
59     kLPUART0_RST_SHIFT_RSTn   = (0U | (22U)),         /*!< LPUART0   reset control */
60     kLPUART1_RST_SHIFT_RSTn   = (0U | (23U)),         /*!< LPUART1   reset control */
61     kLPUART2_RST_SHIFT_RSTn   = (0U | (24U)),         /*!< LPUART2   reset control */
62     kLPUART3_RST_SHIFT_RSTn   = (0U | (25U)),         /*!< LPUART3   reset control */
63     kLPUART4_RST_SHIFT_RSTn   = (0U | (26U)),         /*!< LPUART4   reset control */
64     kUSB0_RST_SHIFT_RSTn      = (0U | (27U)),         /*!< USB0      reset control */
65     kQDC0_RST_SHIFT_RSTn      = (0U | (28U)),         /*!< QDC0      reset control */
66     kQDC1_RST_SHIFT_RSTn      = (0U | (29U)),         /*!< QDC1      reset control */
67     kFLEXPWM0_RST_SHIFT_RSTn  = (0U | (30U)),         /*!< FLEXPWM0  reset control */
68     kFLEXPWM1_RST_SHIFT_RSTn  = (0U | (31U)),         /*!< FLEXPWM1  reset control */
69     kOSTIMER0_RST_SHIFT_RSTn  = ((1U << 8U) | (0U)),  /*!< OSTIMER0  reset control */
70     kADC0_RST_SHIFT_RSTn      = ((1U << 8U) | (1U)),  /*!< ADC0      reset control */
71     kADC1_RST_SHIFT_RSTn      = ((1U << 8U) | (2U)),  /*!< ADC1      reset control */
72     kCMP1_RST_SHIFT_RSTn      = ((1U << 8U) | (4U)),  /*!< CMP1      reset control */
73     kDAC0_RST_SHIFT_RSTn      = ((1U << 8U) | (5U)),  /*!< DAC0      reset control */
74     kOPAMP0_RST_SHIFT_RSTn    = ((1U << 8U) | (6U)),  /*!< OPAMP0    reset control */
75     kPORT0_RST_SHIFT_RSTn     = ((1U << 8U) | (7U)),  /*!< PORT0     reset control */
76     kPORT1_RST_SHIFT_RSTn     = ((1U << 8U) | (8U)),  /*!< PORT1     reset control */
77     kPORT2_RST_SHIFT_RSTn     = ((1U << 8U) | (9U)),  /*!< PORT2     reset control */
78     kPORT3_RST_SHIFT_RSTn     = ((1U << 8U) | (10U)), /*!< PORT3     reset control */
79     kPORT4_RST_SHIFT_RSTn     = ((1U << 8U) | (11U)), /*!< PORT4     reset control */
80     kFLEXCAN0_RST_SHIFT_RSTn  = ((1U << 8U) | (12U)), /*!< FLEXCAN0  reset control */
81     kLPI2C2_RST_SHIFT_RSTn    = ((1U << 8U) | (13U)), /*!< LPI2C2    reset control */
82     kLPI2C3_RST_SHIFT_RSTn    = ((1U << 8U) | (14U)), /*!< LPI2C3    reset control */
83     kGPIO0_RST_SHIFT_RSTn     = ((1U << 8U) | (20U)), /*!< GPIO0     reset control */
84     kGPIO1_RST_SHIFT_RSTn     = ((1U << 8U) | (21U)), /*!< GPIO1     reset control */
85     kGPIO2_RST_SHIFT_RSTn     = ((1U << 8U) | (22U)), /*!< GPIO2     reset control */
86     kGPIO3_RST_SHIFT_RSTn     = ((1U << 8U) | (23U)), /*!< GPIO3     reset control */
87     kGPIO4_RST_SHIFT_RSTn     = ((1U << 8U) | (24U)), /*!< GPIO4     reset control */
88     NotAvail_RSTn             = (0xFFFFU),            /*!< No         reset control */
89 } SYSCON_RSTn_t;
90 
91 /** Array initializers with peripheral reset bits **/
92 #define AOI_RSTS                                   \
93     {                                              \
94         kAOI0_RST_SHIFT_RSTn, kAOI1_RST_SHIFT_RSTn \
95     } /* Reset bits for ADC peripheral */
96 #define ADC_RSTS                                   \
97     {                                              \
98         kADC0_RST_SHIFT_RSTn, kADC1_RST_SHIFT_RSTn \
99     } /* Reset bits for ADC peripheral */
100 #define CRC_RSTS             \
101     {                        \
102         kCRC0_RST_SHIFT_RSTn \
103     } /* Reset bits for CRC peripheral */
104 #define CTIMER_RSTS                                                                                         \
105     {                                                                                                       \
106         kCTIMER0_RST_SHIFT_RSTn, kCTIMER1_RST_SHIFT_RSTn, kCTIMER2_RST_SHIFT_RSTn, kCTIMER3_RST_SHIFT_RSTn, \
107             kCTIMER4_RST_SHIFT_RSTn                                                                         \
108     } /* Reset bits for CTIMER peripheral */
109 #define DAC_RSTS_N           \
110     {                        \
111         kDAC0_RST_SHIFT_RSTn \
112     } /* Reset bits for DAC peripheral */
113 #define DMA_RSTS_N          \
114     {                       \
115         kDMA_RST_SHIFT_RSTn \
116     } /* Reset bits for DMA peripheral */
117 #define EIM_RSTS_N           \
118     {                        \
119         kEIM0_RST_SHIFT_RSTn \
120     } /* Reset bits for EIM peripheral */
121 #define ERM_RSTS_N           \
122     {                        \
123         kERM0_RST_SHIFT_RSTn \
124     } /* Reset bits for ERM peripheral */
125 #define FLEXCAN_RSTS_N           \
126     {                            \
127         kFLEXCAN0_RST_SHIFT_RSTn \
128     } /* Reset bits for FLEXCAN peripheral */
129 #define FLEXIO_RSTS_N           \
130     {                           \
131         kFLEXIO0_RST_SHIFT_RSTn \
132     } /* Reset bits for FLEXIO peripheral */
133 #define FLEXPWM_RSTS_N                                     \
134     {                                                      \
135         kFLEXPWM0_RST_SHIFT_RSTn, kFLEXPWM1_RST_SHIFT_RSTn \
136     } /* Reset bits for FLEXPWM peripheral */
137 #define FREQME_RSTS_N          \
138     {                          \
139         kFREQME_RST_SHIFT_RSTn \
140     } /* Reset bits for FREQME peripheral */
141 #define GPIO_RSTS_N                                                                                 \
142     {                                                                                               \
143         kGPIO0_RST_SHIFT_RSTn, kGPIO1_RST_SHIFT_RSTn, kGPIO2_RST_SHIFT_RSTn, kGPIO3_RST_SHIFT_RSTn, \
144             kGPIO4_RST_SHIFT_RSTn                                                                   \
145     } /* Reset bits for GPIO peripheral */
146 #define I3C_RSTS             \
147     {                        \
148         kI3C0_RST_SHIFT_RSTn \
149     } /* Reset bits for I3C peripheral */
150 #define INPUTMUX_RSTS             \
151     {                             \
152         kINPUTMUX0_RST_SHIFT_RSTn \
153     } /* Reset bits for INPUTMUX peripheral */
154 #define LPUART_RSTS                                                                                         \
155     {                                                                                                       \
156         kLPUART0_RST_SHIFT_RSTn, kLPUART1_RST_SHIFT_RSTn, kLPUART2_RST_SHIFT_RSTn, kLPUART3_RST_SHIFT_RSTn, \
157             kLPUART4_RST_SHIFT_RSTn                                                                         \
158     } /* Reset bits for LPUART peripheral */
159 #define LPSPI_RSTS                                     \
160     {                                                  \
161         kLPSPI0_RST_SHIFT_RSTn, kLPSPI1_RST_SHIFT_RSTn \
162     } /* Reset bits for LPSPI peripheral */
163 #define LPI2C_RSTS                                                                                     \
164     {                                                                                                  \
165         kLPI2C0_RST_SHIFT_RSTn, kLPI2C1_RST_SHIFT_RSTn, kLPI2C2_RST_SHIFT_RSTn, kLPI2C3_RST_SHIFT_RSTn \
166     } /* Reset bits for LPI2C peripheral */
167 #define LPCMP_RSTS                          \
168     {                                       \
169         NotAvail_RSTn, kCMP1_RST_SHIFT_RSTn \
170     } /* Reset bits for LPCMP peripheral */
171 #define OPAMP_RSTS             \
172     {                          \
173         kOPAMP0_RST_SHIFT_RSTn \
174     } /* Reset bits for OPAMP peripheral */
175 #define OSTIMER_RSTS             \
176     {                            \
177         kOSTIMER0_RST_SHIFT_RSTn \
178     } /* Reset bits for OSTIMER peripheral */
179 #define PORT_RSTS_N                                                                                 \
180     {                                                                                               \
181         kPORT0_RST_SHIFT_RSTn, kPORT1_RST_SHIFT_RSTn, kPORT2_RST_SHIFT_RSTn, kPORT3_RST_SHIFT_RSTn, \
182             kPORT4_RST_SHIFT_RSTn                                                                   \
183     } /* Reset bits for PORT peripheral */
184 #define EQDC_RSTS                                  \
185     {                                              \
186         kQDC0_RST_SHIFT_RSTn, kQDC1_RST_SHIFT_RSTn \
187     } /* Reset bits for EQDC peripheral */
188 #define UTICK_RSTS             \
189     {                          \
190         kUTICK0_RST_SHIFT_RSTn \
191     } /* Reset bits for UTICK peripheral */
192 
193 typedef SYSCON_RSTn_t reset_ip_name_t;
194 
195 /*******************************************************************************
196  * API
197  ******************************************************************************/
198 #if defined(__cplusplus)
199 extern "C" {
200 #endif
201 
202 /*!
203  * @brief Assert reset to peripheral.
204  *
205  * Asserts reset signal to specified peripheral module.
206  *
207  * @param peripheral Assert reset to this peripheral. The enum argument contains encoding of reset register
208  *                   and reset bit position in the reset register.
209  */
210 void RESET_SetPeripheralReset(reset_ip_name_t peripheral);
211 
212 /*!
213  * @brief Clear reset to peripheral.
214  *
215  * Clears reset signal to specified peripheral module, allows it to operate.
216  *
217  * @param peripheral Clear reset to this peripheral. The enum argument contains encoding of reset register
218  *                   and reset bit position in the reset register.
219  */
220 void RESET_ClearPeripheralReset(reset_ip_name_t peripheral);
221 
222 /*!
223  * @brief Reset peripheral module.
224  *
225  * Reset peripheral module.
226  *
227  * @param peripheral Peripheral to reset. The enum argument contains encoding of reset register
228  *                   and reset bit position in the reset register.
229  */
230 void RESET_PeripheralReset(reset_ip_name_t peripheral);
231 
232 /*!
233  * @brief Release peripheral module.
234  *
235  * Release peripheral module.
236  *
237  * @param peripheral Peripheral to release. The enum argument contains encoding of reset register
238  *                   and reset bit position in the reset register.
239  */
RESET_ReleasePeripheralReset(reset_ip_name_t peripheral)240 static inline void RESET_ReleasePeripheralReset(reset_ip_name_t peripheral)
241 {
242     RESET_SetPeripheralReset(peripheral);
243 }
244 
245 #if defined(__cplusplus)
246 }
247 #endif
248 
249 /*! @} */
250 
251 #endif /* _FSL_RESET_H_ */
252