1 /*
2  * Copyright 2017, 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     kFLASH_RST_N_SHIFT_RSTn   = 0 | 4U,  /**< Flash controller reset control */
40     kI2C0_RST_N_SHIFT_RSTn    = 0 | 5U,  /**< I2C0 reset control */
41     kGPIO0_RST_N_SHIFT_RSTn   = 0 | 6U,  /**< GPIO0 reset control */
42     kSWM_RST_N_SHIFT_RSTn     = 0 | 7U,  /**< SWM reset control */
43     kWKT_RST_N_SHIFT_RSTn     = 0 | 9U,  /**< Self-wake-up timer(WKT) reset control */
44     kMRT_RST_N_SHIFT_RSTn     = 0 | 10U, /**< Multi-rate timer(MRT) reset control */
45     kSPI0_RST_N_SHIFT_RSTn    = 0 | 11U, /**< SPI0 reset control. */
46     kSPI1_RST_N_SHIFT_RSTn    = 0 | 12U, /**< SPI1 reset control */
47     kCRC_RST_SHIFT_RSTn       = 0 | 13U, /**< CRC reset control */
48     kUART0_RST_N_SHIFT_RSTn   = 0 | 14U, /**< UART0 reset control */
49     kUART1_RST_N_SHIFT_RSTn   = 0 | 15U, /**< UART1 reset control */
50     kUART2_RST_N_SHIFT_RSTn   = 0 | 16U, /**< UART2 reset control */
51     kIOCON_RST_N_SHIFT_RSTn   = 0 | 18U, /**< IOCON reset control */
52     kACMP_RST_N_SHIFT_RSTn    = 0 | 19U, /**< Analog comparator reset control */
53     kGPIO1_RST_N_SHIFT_RSTn   = 0 | 20U, /**< GPIO1 reset control */
54     kFTM0_RST_N_SHIFT_RSTn    = 0 | 21U, /**< FTM0 reset control */
55     kFTM1_RST_N_SHIFT_RSTn    = 0 | 22U, /**< FTM1 reset control */
56     kI3C_RST_N_SHIFT_RSTn     = 0 | 23U, /**< I3C reset control */
57     kADC_RST_N_SHIFT_RSTn     = 0 | 24U, /**< ADC reset control */
58     kGPIOINT_RST_N_SHIFT_RSTn = 0 | 28U, /**< GPIOINT reset control */
59     kDMA_RST_N_SHIFT_RSTn     = 0 | 29U, /**< DMA reset control */
60 
61     kFRG0_RST_N_SHIFT_RSTn = 65536 | 3U, /**< Fractional baud rate generator 0 reset control */
62     kFRG1_RST_N_SHIFT_RSTn = 65536 | 4U, /**< Fractional baud rate generator 1 reset control */
63 
64 } SYSCON_RSTn_t;
65 
66 /** Array initializers with peripheral reset bits **/
67 #define FLASH_RSTS_N            \
68     {                           \
69         kFLASH_RST_N_SHIFT_RSTn \
70     } /* Reset bits for Flash peripheral */
71 #define I2C_RSTS_N             \
72     {                          \
73         kI2C0_RST_N_SHIFT_RSTn \
74     } /* Reset bits for I2C peripheral */
75 #define GPIO_RSTS_N                                      \
76     {                                                    \
77         kGPIO0_RST_N_SHIFT_RSTn, kGPIO1_RST_N_SHIFT_RSTn \
78     } /* Reset bits for GPIO peripheral */
79 #define SWM_RSTS_N            \
80     {                         \
81         kSWM_RST_N_SHIFT_RSTn \
82     } /* Reset bits for SWM peripheral */
83 #define WKT_RSTS_N            \
84     {                         \
85         kWKT_RST_N_SHIFT_RSTn \
86     } /* Reset bits for WKT peripheral */
87 #define MRT_RSTS_N            \
88     {                         \
89         kMRT_RST_N_SHIFT_RSTn \
90     } /* Reset bits for MRT peripheral */
91 #define SPI_RSTS_N                                     \
92     {                                                  \
93         kSPI0_RST_N_SHIFT_RSTn, kSPI1_RST_N_SHIFT_RSTn \
94     } /* Reset bits for SPI peripheral */
95 #define CRC_RSTS_N          \
96     {                       \
97         kCRC_RST_SHIFT_RSTn \
98     } /* Reset bits for CRC peripheral */
99 #define UART_RSTS_N                                                               \
100     {                                                                             \
101         kUART0_RST_N_SHIFT_RSTn, kUART1_RST_N_SHIFT_RSTn, kUART2_RST_N_SHIFT_RSTn \
102     } /* Reset bits for UART peripheral */
103 #define IOCON_RSTS_N            \
104     {                           \
105         kIOCON_RST_N_SHIFT_RSTn \
106     } /* Reset bits for IOCON peripheral */
107 #define ACMP_RSTS_N            \
108     {                          \
109         kACMP_RST_N_SHIFT_RSTn \
110     } /* Reset bits for ACMP peripheral */
111 
112 #define FTM_RSTS_N                                     \
113     {                                                  \
114         kFTM0_RST_N_SHIFT_RSTn, kFTM1_RST_N_SHIFT_RSTn \
115     } /* Reset bits for FTM peripheral */
116 
117 #define I3C_RSTS              \
118     {                         \
119         kI3C_RST_N_SHIFT_RSTn \
120     } /* Reset bits for I3C peripheral */
121 #define ADC_RSTS_N            \
122     {                         \
123         kADC_RST_N_SHIFT_RSTn \
124     } /* Reset bits for ADC peripheral */
125 #define GPIOINT_RSTS_N            \
126     {                             \
127         kGPIOINT_RST_N_SHIFT_RSTn \
128     } /* Reset bits for GPIOINT peripheral */
129 #define DMA_RSTS_N            \
130     {                         \
131         kDMA_RST_N_SHIFT_RSTn \
132     } /* Reset bits for DMA peripheral */
133 #define FRG_RSTS_N                                     \
134     {                                                  \
135         kFRG0_RST_N_SHIFT_RSTn, kFRG1_RST_N_SHIFT_RSTn \
136     } /* Reset bits for FRG peripheral */
137 
138 typedef SYSCON_RSTn_t reset_ip_name_t;
139 
140 /*******************************************************************************
141  * API
142  ******************************************************************************/
143 #if defined(__cplusplus)
144 extern "C" {
145 #endif
146 
147 /*!
148  * @brief Assert reset to peripheral.
149  *
150  * Asserts reset signal to specified peripheral module.
151  *
152  * @param peripheral Assert reset to this peripheral. The enum argument contains encoding of reset register
153  *                   and reset bit position in the reset register.
154  */
155 void RESET_SetPeripheralReset(reset_ip_name_t peripheral);
156 
157 /*!
158  * @brief Clear reset to peripheral.
159  *
160  * Clears reset signal to specified peripheral module, allows it to operate.
161  *
162  * @param peripheral Clear reset to this peripheral. The enum argument contains encoding of reset register
163  *                   and reset bit position in the reset register.
164  */
165 void RESET_ClearPeripheralReset(reset_ip_name_t peripheral);
166 
167 /*!
168  * @brief Reset peripheral module.
169  *
170  * Reset peripheral module.
171  *
172  * @param peripheral Peripheral to reset. The enum argument contains encoding of reset register
173  *                   and reset bit position in the reset register.
174  */
175 void RESET_PeripheralReset(reset_ip_name_t peripheral);
176 
177 /*!
178  * @brief Release peripheral module.
179  *
180  * Release peripheral module.
181  *
182  * @param peripheral Peripheral to release. The enum argument contains encoding of reset register
183  *                   and reset bit position in the reset register.
184  */
RESET_ReleasePeripheralReset(reset_ip_name_t peripheral)185 static inline void RESET_ReleasePeripheralReset(reset_ip_name_t peripheral)
186 {
187     RESET_ClearPeripheralReset(peripheral);
188 }
189 
190 #if defined(__cplusplus)
191 }
192 #endif
193 
194 /*! @} */
195 
196 #endif /* _FSL_RESET_H_ */
197