1 /*
2 * Copyright 2023-2024 NXP
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7 #ifndef FSL_RESET_H_
8 #define FSL_RESET_H_
9
10 #include <assert.h>
11 #include <stdbool.h>
12 #include <stdint.h>
13 #include <string.h>
14 #include "fsl_device_registers.h"
15
16 /*!
17 * @addtogroup reset
18 * @{
19 */
20
21 /*******************************************************************************
22 * Definitions
23 ******************************************************************************/
24
25 /*! @name Driver version */
26 /*@{*/
27 /*! @brief reset driver version 2.0.1. */
28 #define FSL_RESET_DRIVER_VERSION (MAKE_VERSION(2, 0, 1))
29 /*@}*/
30
31 #if defined(MIMXRT798S_hifi1_SERIES) || defined(MIMXRT798S_cm33_core1_SERIES) || \
32 defined(MIMXRT758S_cm33_core1_SERIES) || defined(MIMXRT735S_cm33_core1_SERIES)
33 #define FSL_RESET_DRIVER_SENSE
34 #elif defined(MIMXRT798S_hifi4_SERIES) || defined(MIMXRT798S_cm33_core0_SERIES) || \
35 defined(MIMXRT758S_cm33_core0_SERIES) || defined(MIMXRT735S_cm33_core0_SERIES)
36 #define FSL_RESET_DRIVER_COMPUTE
37 #elif defined(MIMXRT798S_ezhv_SERIES)
38 #define FSL_RESET_DRIVER_MEDIA
39 #else
40 #error "Unsupported core!"
41 #endif
42
43 /*!
44 * @brief Reset control registers index
45 */
46 /* RSTCTL0, RSTCTL_COM_VDD2 */
47 #define RST_CTL0_PSCCTL0 0
48 #define RST_CTL0_PSCCTL1 1
49 #define RST_CTL0_PSCCTL2 2
50 #define RST_CTL0_PSCCTL3 3
51 #define RST_CTL0_PSCCTL4 4
52 #define RST_CTL0_PSCCTL5 5
53 /* RSTCTL1, RSTCTL_VDD1_SENSE */
54 #define RST_CTL1_PSCCTL0 6
55 /* RSTCTL2, RSTCTL_COMN_VDDN */
56 #define RST_CTL2_PSCCTL0 7
57 /* RSTCTL3, RSTCTL_VDD1_COM */
58 #define RST_CTL3_PSCCTL0 8
59 #define RST_CTL3_PSCCTL1 9
60 /* RSTCTL4, RSTCTL_MED_VDD2 */
61 #define RST_CTL4_PSCCTL0 10
62 #define RST_CTL4_PSCCTL1 11
63
64 /*!
65 * @brief Enumeration for system reset status bits
66 *
67 * Defines the enumeration for system reset status bits in SYSRSTSTAT register
68 */
69 typedef enum _rstctl_reset_source
70 {
71 kRSTCTL_SourceVddPor = RSTCTL3_SYSRSTSTAT_VDD_POR_MASK, /*!< VDD Power-On Reset(POR) */
72 kRSTCTL_SourcePad = RSTCTL3_SYSRSTSTAT_RESETN_RESET_MASK, /*!< PPAD Reset */
73 kRSTCTL_SourceIspAp = RSTCTL3_SYSRSTSTAT_ISP_AP_RESET_MASK, /*!< ISP_AP reset Reset */
74 kRSTCTL_SourceItrcSw = RSTCTL3_SYSRSTSTAT_ITRC_SW_RESET_MASK, /*!< ITRC_SW (Intrusion and Tamper Response
75 Controller SW) Reset */
76 kRSTCTL_SourceCpu0 = RSTCTL3_SYSRSTSTAT_CPU0_RESET_MASK, /*!< VDD2_COMP Core Reset */
77 kRSTCTL_SourceCpu1 = RSTCTL3_SYSRSTSTAT_CPU1_RESET_MASK, /*!< VDD1_SENSE Core Reset */
78 kRSTCTL_SourceWwdt0 = RSTCTL3_SYSRSTSTAT_WWDT0_RESET_MASK, /*!< WatchDog Timer 0 Reset */
79 kRSTCTL_SourceWwdt1 = RSTCTL3_SYSRSTSTAT_WWDT1_RESET_MASK, /*!< WatchDog Timer 1 Reset*/
80 kRSTCTL_SourceWwdt2 = RSTCTL3_SYSRSTSTAT_WWDT2_RESET_MASK, /*!< WatchDog Timer 2 Reset */
81 kRSTCTL_SourceWwdt3 = RSTCTL3_SYSRSTSTAT_WWDT3_RESET_MASK, /*!< WatchDog Timer 3 Reset*/
82 kRSTCTL_SourceCdog0 = RSTCTL3_SYSRSTSTAT_CDOG0_RESET_MASK, /*!< Code WatchDog Timer 0 Reset */
83 kRSTCTL_SourceCdog1 = RSTCTL3_SYSRSTSTAT_CDOG1_RESET_MASK, /*!< Code WatchDog Timer 1 Reset */
84 kRSTCTL_SourceCdog2 = RSTCTL3_SYSRSTSTAT_CDOG2_RESET_MASK, /*!< Code WatchDog Timer 2 Reset */
85 kRSTCTL_SourceCdog3 = RSTCTL3_SYSRSTSTAT_CDOG3_RESET_MASK, /*!< Code WatchDog Timer 3 Reset */
86 kRSTCTL_SourceCdog4 = RSTCTL3_SYSRSTSTAT_CDOG4_RESET_MASK, /*!< Code WatchDog Timer 4 Reset */
87 kRSTCTL_SourceAll = (int)0xffffffffU,
88 } rstctl_reset_source_t;
89
90 /*!
91 * @brief Enumeration for peripheral reset control bits
92 *
93 * Defines the enumeration for peripheral reset control bits in RSTCLTx registers
94 */
95 typedef enum _RSTCTL_RSTn
96 {
97 kIOPCTL0_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL0 << 8) | 6U, /*!< IOPCTL0 reset control */
98
99 kELS_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL1 << 8) | 0U, /*!< ELS S50 reset control */
100
101 kDMA0_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL2 << 8) | 5U, /*!< eDMA0 reset control */
102 kDMA1_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL2 << 8) | 6U, /*!< eDMA1 reset control */
103 kPKC_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL2 << 8) | 8U, /*!< PKC reset control */
104 kXSPI0_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL2 << 8) | 10U, /*!< XSPI0 reset control */
105 kXSPI1_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL2 << 8) | 11U, /*!< XSPI1 reset control */
106 kGPIO0_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL2 << 8) | 18U, /*!< GPIO0 reset control */
107 kGPIO1_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL2 << 8) | 19U, /*!< GPIO1 reset control */
108 kGPIO2_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL2 << 8) | 20U, /*!< GPIO2 reset control */
109 kGPIO3_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL2 << 8) | 21U, /*!< GPIO3 reset control */
110 kGPIO4_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL2 << 8) | 22U, /*!< GPIO4 reset control */
111 kGPIO5_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL2 << 8) | 23U, /*!< GPIO5 reset control */
112 kGPIO6_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL2 << 8) | 24U, /*!< GPIO6 reset control */
113 kGPIO7_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL2 << 8) | 25U, /*!< GPIO7 reset control */
114 kSCT0_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL2 << 8) | 26U, /*!< SCT0 reset control */
115 kFC0_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL2 << 8) | 30U, /*!< LP_FLEXCOMM0 reset control */
116 kFC1_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL2 << 8) | 31U, /*!< LP_FLEXCOMM1 reset control */
117
118 kFC2_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL3 << 8) | 0U, /*!< LP_FLEXCOMM2 reset control */
119 kFC3_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL3 << 8) | 1U, /*!< LP_FLEXCOMM3 reset control */
120 kFC4_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL3 << 8) | 2U, /*!< LP_FLEXCOMM4 reset control */
121 kFC5_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL3 << 8) | 3U, /*!< LP_FLEXCOMM5 reset control */
122 kFC6_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL3 << 8) | 4U, /*!< LP_FLEXCOMM6 reset control */
123 kFC7_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL3 << 8) | 5U, /*!< LP_FLEXCOMM7 reset control */
124 kFC8_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL3 << 8) | 6U, /*!< LP_FLEXCOMM8 reset control */
125 kFC9_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL3 << 8) | 7U, /*!< LP_FLEXCOMM9 reset control */
126 kFC10_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL3 << 8) | 8U, /*!< LP_FLEXCOMM10 reset control */
127 kFC11_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL3 << 8) | 9U, /*!< LP_FLEXCOMM11 reset control */
128 kFC12_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL3 << 8) | 10U, /*!< LP_FLEXCOMM12 reset control */
129 kFC13_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL3 << 8) | 11U, /*!< LP_FLEXCOMM13 reset control */
130 kSAI0_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL3 << 8) | 13U, /*!< SAI0 reset control */
131 kSAI1_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL3 << 8) | 14U, /*!< SAI1 reset control */
132 kSAI2_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL3 << 8) | 15U, /*!< SAI2 reset control */
133 kI3C0_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL3 << 8) | 16U, /*!< I3C0 reset control */
134 kI3C1_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL3 << 8) | 17U, /*!< I3C1 reset control */
135 kCRC0_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL3 << 8) | 18U, /*!< CRC0 reset control */
136 kCTIMER0_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL3 << 8) | 21U, /*!< CTIMER0 reset control */
137 kCTIMER1_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL3 << 8) | 22U, /*!< CTIMER1 reset control */
138 kCTIMER2_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL3 << 8) | 23U, /*!< CTIMER2 reset control */
139 kCTIMER3_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL3 << 8) | 24U, /*!< CTIMER3 reset control */
140 kCTIMER4_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL3 << 8) | 25U, /*!< CTIMER4 reset control */
141 kMRT0_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL3 << 8) | 26U, /*!< MRT0 reset control */
142 kUTICK0_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL3 << 8) | 27U, /*!< UTICK0 reset control */
143 kSEMA424_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL3 << 8) | 30U, /*!< SEMA42_4 reset control */
144 kMU4_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL3 << 8) | 31U, /*!< MU4 reset control */
145
146 kSYSPM2_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL4 << 8) | 0U, /*!< SYSPM_XSPI0 reset control */
147 kSYSPM3_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL4 << 8) | 1U, /*!< SYSPM_XSPI1 reset control */
148 kSAFO_SGI_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL4 << 8) | 2U, /*!< SAFO_SGI reset control */
149 #if defined(FSL_RESET_DRIVER_COMPUTE)
150 kPINT_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL4 << 8) | 5U, /*!< PINT0 reset control */
151 #endif
152 kINPUTMUX0_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL4 << 8) | 7U, /*!< INPUTMUX0 reset control */
153 kFREQME0_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL4 << 8) | 8U, /*!< FREQME0 reset control */
154 kSYSPM0_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL4 << 8) | 10U, /*!< SYSPM_PC reset control */
155 kSYSPM1_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL4 << 8) | 11U, /*!< SYSPM_PS reset control */
156 kNPU0_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL4 << 8) | 12U, /*!< NPU0 reset control */
157
158 kHIFI4_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL5 << 8) | 0U, /*!< HiFi4 reset control */
159 kHIFI4_DEBUG_RST_SHIFT_RSTn = (RST_CTL0_PSCCTL5 << 8) | 2U, /*!< HiFi4 Debug reset control */
160
161 kHIFI1_RST_SHIFT_RSTn = (RST_CTL1_PSCCTL0 << 8) | 1U, /*!< HiFi1 reset control */
162 kHIFI1_DEBUG_RST_SHIFT_RSTn = (RST_CTL1_PSCCTL0 << 8) | 2U, /*!< HiFi1 Debug reset control */
163 kDMA2_RST_SHIFT_RSTn = (RST_CTL1_PSCCTL0 << 8) | 4U, /*!< eDMA2 reset control */
164 kDMA3_RST_SHIFT_RSTn = (RST_CTL1_PSCCTL0 << 8) | 5U, /*!< eDMA3 reset control */
165 kFC17_RST_SHIFT_RSTn = (RST_CTL1_PSCCTL0 << 8) | 6U, /*!< LP_FLEXCOMM17 reset control */
166 kFC18_RST_SHIFT_RSTn = (RST_CTL1_PSCCTL0 << 8) | 7U, /*!< LP_FLEXCOMM18 reset control */
167 kFC19_RST_SHIFT_RSTn = (RST_CTL1_PSCCTL0 << 8) | 8U, /*!< LP_FLEXCOMM19 reset control */
168 kFC20_RST_SHIFT_RSTn = (RST_CTL1_PSCCTL0 << 8) | 9U, /*!< LP_FLEXCOMM20 reset control */
169 kSAI3_RST_SHIFT_RSTn = (RST_CTL1_PSCCTL0 << 8) | 10U, /*!< SAI3 reset control */
170 kI3C2_RST_SHIFT_RSTn = (RST_CTL1_PSCCTL0 << 8) | 11U, /*!< I3C2 reset control */
171 kI3C3_RST_SHIFT_RSTn = (RST_CTL1_PSCCTL0 << 8) | 12U, /*!< I3C3 reset control */
172 kGPIO8_RST_SHIFT_RSTn = (RST_CTL1_PSCCTL0 << 8) | 13U, /*!< GPIO8 reset control */
173 kGPIO9_RST_SHIFT_RSTn = (RST_CTL1_PSCCTL0 << 8) | 14U, /*!< GPIO9 reset control */
174 kGPIO10_RST_SHIFT_RSTn = (RST_CTL1_PSCCTL0 << 8) | 15U, /*!< GPIO10 reset control */
175 #if defined(FSL_RESET_DRIVER_SENSE)
176 kPINT_RST_SHIFT_RSTn = (RST_CTL1_PSCCTL0 << 8) | 16U, /*!< PINT1 reset control */
177 #endif
178 kCTIMER5_RST_SHIFT_RSTn = (RST_CTL1_PSCCTL0 << 8) | 17U, /*!< CTIMER5 reset control */
179 kCTIMER6_RST_SHIFT_RSTn = (RST_CTL1_PSCCTL0 << 8) | 18U, /*!< CTIMER6 reset control */
180 kCTIMER7_RST_SHIFT_RSTn = (RST_CTL1_PSCCTL0 << 8) | 19U, /*!< CTIMER7 reset control */
181 kMRT1_RST_SHIFT_RSTn = (RST_CTL1_PSCCTL0 << 8) | 20U, /*!< MRT1 reset control */
182 kUTICK1_RST_SHIFT_RSTn = (RST_CTL1_PSCCTL0 << 8) | 21U, /*!< UTICK1 reset control */
183 kMU3_RST_SHIFT_RSTn = (RST_CTL1_PSCCTL0 << 8) | 24U, /*!< MU3 reset control */
184 kSEMA423_RST_SHIFT_RSTn = (RST_CTL1_PSCCTL0 << 8) | 25U, /*!< SEMA42_3 reset control */
185 kPVT1_RST_SHIFT_RSTn = (RST_CTL1_PSCCTL0 << 8) | 28U, /*!< PVT1 reset control */
186
187 kIOPCTL2_RST_SHIFT_RSTn = (RST_CTL2_PSCCTL0 << 8) | 1U, /*!< IOPCTL2 reset control */
188
189 kIOPCTL1_RST_SHIFT_RSTn = (RST_CTL3_PSCCTL0 << 8) | 0U, /*!< IOPCTL1 reset control */
190 kCPU1_RST_SHIFT_RSTn = (RST_CTL3_PSCCTL0 << 8) | 31U, /*!< CPU1 reset control */
191 kMU0_RST_SHIFT_RSTn = (RST_CTL3_PSCCTL1 << 8) | 1U, /*!< MU0 reset control */
192 kMU1_RST_SHIFT_RSTn = (RST_CTL3_PSCCTL1 << 8) | 2U, /*!< MU1 reset control */
193 kMU2_RST_SHIFT_RSTn = (RST_CTL3_PSCCTL1 << 8) | 3U, /*!< MU2 reset control */
194 kSEMA420_RST_SHIFT_RSTn = (RST_CTL3_PSCCTL1 << 8) | 5U, /*!< SEMA42_0 reset control */
195 kADC0_RST_SHIFT_RSTn = (RST_CTL3_PSCCTL1 << 8) | 6U, /*!< ADC0 reset control */
196 kSDADC0_RST_SHIFT_RSTn = (RST_CTL3_PSCCTL1 << 8) | 7U, /*!< SDADC0 reset control */
197 kACMP0_RST_SHIFT_RSTn = (RST_CTL3_PSCCTL1 << 8) | 8U, /*!< ACMP0 reset control */
198 kPDM_RST_SHIFT_RSTn = (RST_CTL3_PSCCTL1 << 8) | 9U, /*!< MICFIL/PDM reset control */
199 kINPUTMUX1_RST_SHIFT_RSTn = (RST_CTL3_PSCCTL1 << 8) | 14U, /*!< INPUTMUX1 reset control */
200 kLPI2C15_RST_SHIFT_RSTn = (RST_CTL3_PSCCTL1 << 8) | 18U, /*!< LPI2C15 reset control */
201
202 kVGPU_RST_SHIFT_RSTn = (RST_CTL4_PSCCTL0 << 8) | 2U, /*!< VGPU reset control */
203 kLCDIF_RST_SHIFT_RSTn = (RST_CTL4_PSCCTL0 << 8) | 3U, /*!< LCDIF reset control */
204 kMIPI_DSI_CTRL_RST_SHIFT_RSTn = (RST_CTL4_PSCCTL0 << 8) | 4U, /*!< MIPIDSI reset control */
205 kEZHV_RST_SHIFT_RSTn = (RST_CTL4_PSCCTL0 << 8) | 5U, /*!< EZHV reset control */
206 kJPEGDEC_RST_SHIFT_RSTn = (RST_CTL4_PSCCTL0 << 8) | 6U, /*!< JPEGDEC reset control */
207 kPNGDEC_RST_SHIFT_RSTn = (RST_CTL4_PSCCTL0 << 8) | 7U, /*!< PNGDEC reset control */
208 kXSPI2_RST_SHIFT_RSTn = (RST_CTL4_PSCCTL0 << 8) | 8U, /*!< XSPI2 and MMU2 reset control */
209 kLPSPI14_RST_SHIFT_RSTn = (RST_CTL4_PSCCTL0 << 8) | 13U, /*!< LPSPI14 reset control */
210 kLPSPI16_RST_SHIFT_RSTn = (RST_CTL4_PSCCTL0 << 8) | 14U, /*!< LPSPI16 reset control */
211 kFLEXIO0_RST_SHIFT_RSTn = (RST_CTL4_PSCCTL0 << 8) | 15U, /*!< FLEXIO0 reset control */
212
213 kUSB0_RST_SHIFT_RSTn = (RST_CTL4_PSCCTL1 << 8) | 0U, /*!< USB0 reset control */
214 kUSBPHY0_RST_SHIFT_RSTn = (RST_CTL4_PSCCTL1 << 8) | 1U, /*!< USBPHY0 reset control */
215 kUSB1_RST_SHIFT_RSTn = (RST_CTL4_PSCCTL1 << 8) | 2U, /*!< USB1 reset control */
216 kUSDHC0_RST_SHIFT_RSTn = (RST_CTL4_PSCCTL1 << 8) | 4U, /*!< USDHC0 reset control */
217 kUSDHC1_RST_SHIFT_RSTn = (RST_CTL4_PSCCTL1 << 8) | 5U, /*!< USDHC1 reset control */
218 } RSTCTL_RSTn_t;
219
220 /** Array initializers with peripheral reset bits **/
221 #define ADC_RSTS \
222 { \
223 kADC0_RST_SHIFT_RSTn \
224 } /* Reset bits for ADC peripheral */
225 #define SDADC_RSTS \
226 { \
227 kSDADC0_RST_SHIFT_RSTn \
228 } /* Reset bits for SDADC peripheral */
229 #define CRC_RSTS \
230 { \
231 kCRC0_RST_SHIFT_RSTn \
232 } /* Reset bits for CRC peripheral */
233 #define CTIMER_RSTS \
234 { \
235 kCTIMER0_RST_SHIFT_RSTn, kCTIMER1_RST_SHIFT_RSTn, kCTIMER2_RST_SHIFT_RSTn, kCTIMER3_RST_SHIFT_RSTn, \
236 kCTIMER4_RST_SHIFT_RSTn, kCTIMER5_RST_SHIFT_RSTn, kCTIMER6_RST_SHIFT_RSTn, kCTIMER7_RST_SHIFT_RSTn \
237 } /* Reset bits for TIMER peripheral */
238 #define MIPI_DSI_RSTS \
239 { \
240 kMIPI_DSI_CTRL_RST_SHIFT_RSTn \
241 } /* Reset bits for MIPI_DSI peripheral */
242 #define LCDIF_RSTS \
243 { \
244 kLCDIF_RST_SHIFT_RSTn \
245 } /* Reset bits for LCDIF peripheral */
246 #define LP_FLEXCOMM_RSTS \
247 { \
248 kFC0_RST_SHIFT_RSTn, kFC1_RST_SHIFT_RSTn, kFC2_RST_SHIFT_RSTn, kFC3_RST_SHIFT_RSTn, kFC4_RST_SHIFT_RSTn, \
249 kFC5_RST_SHIFT_RSTn, kFC6_RST_SHIFT_RSTn, kFC7_RST_SHIFT_RSTn, kFC8_RST_SHIFT_RSTn, kFC9_RST_SHIFT_RSTn, \
250 kFC10_RST_SHIFT_RSTn, kFC11_RST_SHIFT_RSTn, kFC12_RST_SHIFT_RSTn, kFC13_RST_SHIFT_RSTn, (RSTCTL_RSTn_t)0U, \
251 (RSTCTL_RSTn_t)0U, (RSTCTL_RSTn_t)0U, kFC17_RST_SHIFT_RSTn, kFC18_RST_SHIFT_RSTn, kFC19_RST_SHIFT_RSTn, \
252 kFC20_RST_SHIFT_RSTn \
253 } /* Reset bits for FLEXCOMM peripheral */
254 #define FLEXIO_RSTS \
255 { \
256 kFLEXIO0_RST_SHIFT_RSTn \
257 } /* Resets bits for FLEXIO peripheral */
258 #define XSPI_RSTS \
259 { \
260 kXSPI0_RST_SHIFT_RSTn, kXSPI1_RST_SHIFT_RSTn, kXSPI2_RST_SHIFT_RSTn \
261 } /* Resets bits for FLEXSPI peripheral */
262 #define GPIO_RSTS \
263 { \
264 kGPIO0_RST_SHIFT_RSTn, kGPIO1_RST_SHIFT_RSTn, kGPIO2_RST_SHIFT_RSTn, kGPIO3_RST_SHIFT_RSTn, \
265 kGPIO4_RST_SHIFT_RSTn, kGPIO5_RST_SHIFT_RSTn, kGPIO6_RST_SHIFT_RSTn, kGPIO7_RST_SHIFT_RSTn, \
266 kGPIO8_RST_SHIFT_RSTn, kGPIO9_RST_SHIFT_RSTn, kGPIO10_RST_SHIFT_RSTn, kGPIO0_RST_SHIFT_RSTn, \
267 kGPIO1_RST_SHIFT_RSTn, kGPIO2_RST_SHIFT_RSTn, kGPIO3_RST_SHIFT_RSTn, kGPIO4_RST_SHIFT_RSTn, \
268 kGPIO5_RST_SHIFT_RSTn, kGPIO6_RST_SHIFT_RSTn, kGPIO7_RST_SHIFT_RSTn, kGPIO8_RST_SHIFT_RSTn, \
269 kGPIO9_RST_SHIFT_RSTn, kGPIO10_RST_SHIFT_RSTn \
270 } /* Reset bits for GPIO peripheral */
271 #define I3C_RSTS \
272 { \
273 kI3C0_RST_SHIFT_RSTn, kI3C1_RST_SHIFT_RSTn, kI3C2_RST_SHIFT_RSTn, kI3C3_RST_SHIFT_RSTn \
274 } /* Reset bits for I3C peripheral */
275
276 #if defined(FSL_RESET_DRIVER_SENSE)
277 #define INPUTMUX_RSTS \
278 { \
279 kINPUTMUX1_RST_SHIFT_RSTn \
280 } /* Reset bits for INPUTMUX peripheral */
281 #define DMA_RSTS_N \
282 { \
283 kDMA2_RST_SHIFT_RSTn, kDMA3_RST_SHIFT_RSTn \
284 } /* Reset bits for DMA peripheral */
285 #endif
286 #if defined(FSL_RESET_DRIVER_COMPUTE)
287 #define INPUTMUX_RSTS \
288 { \
289 kINPUTMUX0_RST_SHIFT_RSTn \
290 } /* Reset bits for INPUTMUX peripheral */
291 #define DMA_RSTS_N \
292 { \
293 kDMA0_RST_SHIFT_RSTn, kDMA1_RST_SHIFT_RSTn \
294 } /* Reset bits for DMA peripheral */
295 #endif
296 #define MRT_RSTS \
297 { \
298 kMRT0_RST_SHIFT_RSTn, kMRT1_RST_SHIFT_RSTn \
299 } /* Reset bits for MRT peripheral */
300 #if (defined(MIMXRT798S_cm33_core0_SERIES) || defined(MIMXRT758S_cm33_core0_SERIES) || \
301 defined(MIMXRT735S_cm33_core0_SERIES))
302 #define MU_RSTS \
303 { \
304 kMU0_RST_SHIFT_RSTn, kMU1_RST_SHIFT_RSTn, kMU4_RST_SHIFT_RSTn \
305 } /* Reset bits for MU peripheral */
306 #elif (defined(MIMXRT798S_cm33_core1_SERIES) || defined(MIMXRT758S_cm33_core1_SERIES) || \
307 defined(MIMXRT735S_cm33_core1_SERIES))
308 #define MU_RSTS \
309 { \
310 kMU1_RST_SHIFT_RSTn, kMU2_RST_SHIFT_RSTn, kMU3_RST_SHIFT_RSTn \
311 } /* Reset bits for MU peripheral */
312 #elif defined(MIMXRT798S_hifi4_SERIES)
313 #define MU_RSTS \
314 { \
315 kMU2_RST_SHIFT_RSTn, kMU4_RST_SHIFT_RSTn \
316 } /* Reset bits for MU peripheral */
317 #elif defined(MIMXRT798S_hifi1_SERIES)
318 #define MU_RSTS \
319 { \
320 kMU0_RST_SHIFT_RSTn, kMU3_RST_SHIFT_RSTn \
321 } /* Reset bits for MU peripheral */
322 #elif defined(MIMXRT798S_ezhv_SERIES)
323 #else
324 #error "Unsupported core!"
325 #endif
326
327 #define PINT_RSTS \
328 { \
329 kPINT_RST_SHIFT_RSTn \
330 } /* Reset bits for PINT peripheral */
331
332 #define PNGDEC_RSTS \
333 { \
334 kPNGDEC_RST_SHIFT_RSTn \
335 } /* Reset bits for PNGDEC peripheral */
336
337 #define JPEGDEC_RSTS \
338 { \
339 kJPEGDEC_RST_SHIFT_RSTn \
340 } /* Reset bits for JPEGDEC peripheral */
341
342 #define SCT_RSTS \
343 { \
344 kSCT0_RST_SHIFT_RSTn \
345 } /* Reset bits for SCT peripheral */
346 #define SEMA42_RSTS \
347 { \
348 kSEMA420_RST_SHIFT_RSTn, (RSTCTL_RSTn_t)0U, (RSTCTL_RSTn_t)0U, kSEMA423_RST_SHIFT_RSTn, \
349 kSEMA424_RST_SHIFT_RSTn \
350 } /* Reset bits for SEMA42 peripheral */
351 #define SAI_RSTS \
352 { \
353 kSAI0_RST_SHIFT_RSTn, kSAI1_RST_SHIFT_RSTn, kSAI2_RST_SHIFT_RSTn, kSAI3_RST_SHIFT_RSTn \
354 } /* Reset bits for SAI peripheral */
355 #define USDHC_RSTS \
356 { \
357 kUSDHC0_RST_SHIFT_RSTn, kUSDHC1_RST_SHIFT_RSTn \
358 } /* Reset bits for USDHC peripheral */
359 #define UTICK_RSTS \
360 { \
361 kUTICK0_RST_SHIFT_RSTn, kUTICK1_RST_SHIFT_RSTn \
362 } /* Reset bits for UTICK peripheral */
363
364 /*!
365 * @brief IP reset handle
366 */
367 typedef RSTCTL_RSTn_t reset_ip_name_t;
368
369 /*******************************************************************************
370 * API
371 ******************************************************************************/
372 #if defined(__cplusplus)
373 extern "C" {
374 #endif
375
376 /*!
377 * @brief Assert reset to peripheral.
378 *
379 * Asserts reset signal to specified peripheral module.
380 *
381 * @param peripheral Assert reset to this peripheral. The enum argument contains encoding of reset register
382 * and reset bit position in the reset register.
383 */
384 void RESET_SetPeripheralReset(reset_ip_name_t peripheral);
385
386 /*!
387 * @brief Clear reset to peripheral.
388 *
389 * Clears reset signal to specified peripheral module, allows it to operate.
390 *
391 * @param peripheral Clear reset to this peripheral. The enum argument contains encoding of reset register
392 * and reset bit position in the reset register.
393 */
394 void RESET_ClearPeripheralReset(reset_ip_name_t peripheral);
395
396 /*!
397 * @brief Reset peripheral module.
398 *
399 * Reset peripheral module.
400 *
401 * @param peripheral Peripheral to reset. The enum argument contains encoding of reset register
402 * and reset bit position in the reset register.
403 */
404 void RESET_PeripheralReset(reset_ip_name_t peripheral);
405
406 /*!
407 * @brief Release peripheral module.
408 *
409 * Release peripheral module.
410 *
411 * @param peripheral Peripheral to release. The enum argument contains encoding of reset register
412 * and reset bit position in the reset register.
413 */
RESET_ReleasePeripheralReset(reset_ip_name_t peripheral)414 static inline void RESET_ReleasePeripheralReset(reset_ip_name_t peripheral)
415 {
416 RESET_ClearPeripheralReset(peripheral);
417 }
418
419 /*!
420 * @brief Gets the reset source status which caused a previous reset.
421 *
422 * This function gets the status of the latest reset event. Use source masks
423 * defined in the rstctl_reset_source_t to get the desired source status.
424 *
425 * @return All reset source status bit map.
426 */
RESET_GetPreviousResetSources(void)427 static inline uint32_t RESET_GetPreviousResetSources(void)
428 {
429 return RSTCTL3->SYSRSTSTAT;
430 }
431
432 /*!
433 * @brief Clears the reset source status.
434 *
435 * This function clears the system reset flags indicated by source masks.
436 *
437 * @param sourceMasks reset source status bit map
438 */
RESET_ClearResetSources(uint32_t sourceMasks)439 static inline void RESET_ClearResetSources(uint32_t sourceMasks)
440 {
441 RSTCTL3->SYSRSTSTAT = sourceMasks;
442 }
443
444 /*!
445 * @brief Gets the reset status of domains.
446 *
447 * This function gets the reset status of domains.
448 *
449 * @return All reset source status bit map.
450 */
RESET_GetDomainResetStatus(void)451 static inline uint32_t RESET_GetDomainResetStatus(void)
452 {
453 return RSTCTL3->DOMRSTSTAT;
454 }
455
456 #if defined(__cplusplus)
457 }
458 #endif
459
460 /*! @} */
461
462 #endif /* FSL_RESET_H_ */
463