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     kFREQME_RST_SHIFT_RSTn    = (0U | (5U)),         /*!< FREQME    reset control */
45     kUTICK0_RST_SHIFT_RSTn    = (0U | (6U)),         /*!< UTICK0    reset control */
46     kDMA_RST_SHIFT_RSTn       = (0U | (8U)),         /*!< DMA       reset control */
47     kAOI0_RST_SHIFT_RSTn      = (0U | (9U)),         /*!< AOI0      reset control */
48     kCRC_RST_SHIFT_RSTn       = (0U | (10U)),        /*!< CRC       reset control */
49     kEIM_RST_SHIFT_RSTn       = (0U | (11U)),        /*!< EIM       reset control */
50     kERM_RST_SHIFT_RSTn       = (0U | (12U)),        /*!< ERM       reset control */
51     kLPI2C0_RST_SHIFT_RSTn    = (0U | (16U)),        /*!< LPI2C0    reset control */
52     kLPSPI0_RST_SHIFT_RSTn    = (0U | (17U)),        /*!< LPSPI0    reset control */
53     kLPSPI1_RST_SHIFT_RSTn    = (0U | (18U)),        /*!< LPSPI1    reset control */
54     kLPUART0_RST_SHIFT_RSTn   = (0U | (19U)),        /*!< LPUART0   reset control */
55     kLPUART1_RST_SHIFT_RSTn   = (0U | (20U)),        /*!< LPUART1   reset control */
56     kLPUART2_RST_SHIFT_RSTn   = (0U | (21U)),        /*!< LPUART2   reset control */
57     kUSB0_RST_SHIFT_RSTn      = (0U | (22U)),        /*!< USB0      reset control */
58     kQDC0_RST_SHIFT_RSTn      = (0U | (23U)),        /*!< QDC0      reset control */
59     kFLEXPWM0_RST_SHIFT_RSTn  = (0U | (24U)),        /*!< FLEXPWM0  reset control */
60     kOSTIMER0_RST_SHIFT_RSTn  = (0U | (25U)),        /*!< OSTIMER0  reset control */
61     kADC0_RST_SHIFT_RSTn      = (0U | (26U)),        /*!< ADC0      reset control */
62     kCMP1_RST_SHIFT_RSTn      = (0U | (28U)),        /*!< CMP1      reset control */
63     kPORT0_RST_SHIFT_RSTn     = (0U | (29U)),        /*!< PORT0     reset control */
64     kPORT1_RST_SHIFT_RSTn     = (0U | (30U)),        /*!< PORT1     reset control */
65     kPORT2_RST_SHIFT_RSTn     = (0U | (31U)),        /*!< PORT2     reset control */
66     kPORT3_RST_SHIFT_RSTn     = ((1U << 8U) | (0U)), /*!< PORT3     reset control */
67     kATX0_RST_SHIFT_RSTn      = ((1U << 8U) | (1U)), /*!< ATX0      reset control */
68     kGPIO0_RST_SHIFT_RSTn     = ((1U << 8U) | (5U)), /*!< GPIO0     reset control */
69     kGPIO1_RST_SHIFT_RSTn     = ((1U << 8U) | (6U)), /*!< GPIO1     reset control */
70     kGPIO2_RST_SHIFT_RSTn     = ((1U << 8U) | (7U)), /*!< GPIO2     reset control */
71     kGPIO3_RST_SHIFT_RSTn     = ((1U << 8U) | (8U)), /*!< GPIO3     reset control */
72     NotAvail_RSTn             = (0xFFFFU),           /*!< No        reset control */
73 } SYSCON_RSTn_t;
74 
75 /** Array initializers with peripheral reset bits **/
76 #define AOI_RSTS             \
77     {                        \
78         kAOI0_RST_SHIFT_RSTn \
79     } /* Reset bits for ADC peripheral */
80 #define ADC_RSTS             \
81     {                        \
82         kADC0_RST_SHIFT_RSTn \
83     } /* Reset bits for ADC peripheral */
84 #define CRC_RSTS            \
85     {                       \
86         kCRC_RST_SHIFT_RSTn \
87     } /* Reset bits for CRC peripheral */
88 #define CTIMER_RSTS                                                               \
89     {                                                                             \
90         kCTIMER0_RST_SHIFT_RSTn, kCTIMER1_RST_SHIFT_RSTn, kCTIMER2_RST_SHIFT_RSTn \
91     } /* Reset bits for CTIMER peripheral */
92 #define DMA_RSTS_N          \
93     {                       \
94         kDMA_RST_SHIFT_RSTn \
95     } /* Reset bits for DMA peripheral */
96 #define FLEXPWM_RSTS_N           \
97     {                            \
98         kFLEXPWM0_RST_SHIFT_RSTn \
99     } /* Reset bits for FLEXPWM peripheral */
100 #define FREQME_RSTS_N          \
101     {                          \
102         kFREQME_RST_SHIFT_RSTn \
103     } /* Reset bits for FREQME peripheral */
104 #define GPIO_RSTS_N                                                                                \
105     {                                                                                              \
106         kGPIO0_RST_SHIFT_RSTn, kGPIO1_RST_SHIFT_RSTn, kGPIO2_RST_SHIFT_RSTn, kGPIO3_RST_SHIFT_RSTn \
107     } /* Reset bits for GPIO peripheral */
108 #define I3C_RSTS             \
109     {                        \
110         kI3C0_RST_SHIFT_RSTn \
111     } /* Reset bits for I3C peripheral */
112 #define INPUTMUX_RSTS             \
113     {                             \
114         kINPUTMUX0_RST_SHIFT_RSTn \
115     } /* Reset bits for INPUTMUX peripheral */
116 #define LPUART_RSTS                                                               \
117     {                                                                             \
118         kLPUART0_RST_SHIFT_RSTn, kLPUART1_RST_SHIFT_RSTn, kLPUART2_RST_SHIFT_RSTn \
119     } /* Reset bits for LPUART peripheral */
120 #define LPSPI_RSTS                                     \
121     {                                                  \
122         kLPSPI0_RST_SHIFT_RSTn, kLPSPI1_RST_SHIFT_RSTn \
123     } /* Reset bits for LPSPI peripheral */
124 #define LPI2C_RSTS             \
125     {                          \
126         kLPI2C0_RST_SHIFT_RSTn \
127     } /* Reset bits for LPI2C peripheral */
128 #define LPCMP_RSTS                          \
129     {                                       \
130         NotAvail_RSTn, kCMP1_RST_SHIFT_RSTn \
131     } /* Reset bits for LPCMP peripheral */
132 #define OSTIMER_RSTS             \
133     {                            \
134         kOSTIMER0_RST_SHIFT_RSTn \
135     } /* Reset bits for OSTIMER peripheral */
136 #define PORT_RSTS_N                                                                                \
137     {                                                                                              \
138         kPORT0_RST_SHIFT_RSTn, kPORT1_RST_SHIFT_RSTn, kPORT2_RST_SHIFT_RSTn, kPORT3_RST_SHIFT_RSTn \
139     } /* Reset bits for PORT peripheral */
140 #define EQDC_RSTS            \
141     {                        \
142         kQDC0_RST_SHIFT_RSTn \
143     } /* Reset bits for EQDC peripheral */
144 #define UTICK_RSTS             \
145     {                          \
146         kUTICK0_RST_SHIFT_RSTn \
147     } /* Reset bits for UTICK peripheral */
148 
149 typedef SYSCON_RSTn_t reset_ip_name_t;
150 
151 /*******************************************************************************
152  * API
153  ******************************************************************************/
154 #if defined(__cplusplus)
155 extern "C" {
156 #endif
157 
158 /*!
159  * @brief Assert reset to peripheral.
160  *
161  * Asserts reset signal to specified peripheral module.
162  *
163  * @param peripheral Assert reset to this peripheral. The enum argument contains encoding of reset register
164  *                   and reset bit position in the reset register.
165  */
166 void RESET_SetPeripheralReset(reset_ip_name_t peripheral);
167 
168 /*!
169  * @brief Clear reset to peripheral.
170  *
171  * Clears reset signal to specified peripheral module, allows it to operate.
172  *
173  * @param peripheral Clear reset to this peripheral. The enum argument contains encoding of reset register
174  *                   and reset bit position in the reset register.
175  */
176 void RESET_ClearPeripheralReset(reset_ip_name_t peripheral);
177 
178 /*!
179  * @brief Reset peripheral module.
180  *
181  * Reset peripheral module.
182  *
183  * @param peripheral Peripheral to reset. The enum argument contains encoding of reset register
184  *                   and reset bit position in the reset register.
185  */
186 void RESET_PeripheralReset(reset_ip_name_t peripheral);
187 
188 /*!
189  * @brief Release peripheral module.
190  *
191  * Release peripheral module.
192  *
193  * @param peripheral Peripheral to release. The enum argument contains encoding of reset register
194  *                   and reset bit position in the reset register.
195  */
RESET_ReleasePeripheralReset(reset_ip_name_t peripheral)196 static inline void RESET_ReleasePeripheralReset(reset_ip_name_t peripheral)
197 {
198     RESET_SetPeripheralReset(peripheral);
199 }
200 
201 #if defined(__cplusplus)
202 }
203 #endif
204 
205 /*! @} */
206 
207 #endif /* _FSL_RESET_H_ */
208