1 /*
2  * Copyright 2017, NXP
3  * All rights reserved.
4  *
5  * SPDX-License-Identifier: BSD-3-Clause
6  */
7 
8 #include "fsl_common.h"
9 #include "fsl_reset.h"
10 
11 /*******************************************************************************
12  * Definitions
13  ******************************************************************************/
14 /* Component ID definition, used by tools. */
15 #ifndef FSL_COMPONENT_ID
16 #define FSL_COMPONENT_ID "platform.drivers.reset"
17 #endif
18 
19 /*******************************************************************************
20  * Variables
21  ******************************************************************************/
22 
23 /*******************************************************************************
24  * Prototypes
25  ******************************************************************************/
26 
27 /*******************************************************************************
28  * Code
29  ******************************************************************************/
30 
31 #if ((defined(FSL_FEATURE_SOC_SYSCON_COUNT) && (FSL_FEATURE_SOC_SYSCON_COUNT > 0)) || \
32      (defined(FSL_FEATURE_SOC_ASYNC_SYSCON_COUNT) && (FSL_FEATURE_SOC_ASYNC_SYSCON_COUNT > 0)))
33 
RESET_SetPeripheralReset(reset_ip_name_t peripheral)34 void RESET_SetPeripheralReset(reset_ip_name_t peripheral)
35 {
36     const uint32_t regIndex = ((uint32_t)peripheral & 0xFFFF0000u) >> 16;
37     const uint32_t bitPos   = ((uint32_t)peripheral & 0x0000FFFFu);
38     const uint32_t bitMask  = 1UL << bitPos;
39 
40     assert(bitPos < 32UL);
41 
42     /* reset register is in SYSCON */
43 
44     if (0u == regIndex)
45     {
46         /* set bit */
47         SYSCON->PRESETCTRL0 &= ~bitMask;
48     }
49     if (1u == regIndex)
50     {
51         /* set bit */
52         SYSCON->PRESETCTRL1 &= ~bitMask;
53     }
54 }
55 
RESET_ClearPeripheralReset(reset_ip_name_t peripheral)56 void RESET_ClearPeripheralReset(reset_ip_name_t peripheral)
57 {
58     const uint32_t regIndex = ((uint32_t)peripheral & 0xFFFF0000u) >> 16;
59     const uint32_t bitPos   = ((uint32_t)peripheral & 0x0000FFFFu);
60     const uint32_t bitMask  = 1UL << bitPos;
61 
62     assert(bitPos < 32UL);
63 
64     /* reset register is in SYSCON */
65 
66     if (0u == regIndex)
67     {
68         /* clear bit */
69         SYSCON->PRESETCTRL0 |= bitMask;
70     }
71     if (1u == regIndex)
72     {
73         /* clear bit */
74         SYSCON->PRESETCTRL1 |= bitMask;
75     }
76 }
77 
78 /*!
79  * brief Reset peripheral module.
80  *
81  * Reset peripheral module.
82  *
83  * param peripheral Peripheral to reset. The enum argument contains encoding of reset register
84  *                   and reset bit position in the reset register.
85  */
RESET_PeripheralReset(reset_ip_name_t peripheral)86 void RESET_PeripheralReset(reset_ip_name_t peripheral)
87 {
88     RESET_SetPeripheralReset(peripheral);
89     RESET_ClearPeripheralReset(peripheral);
90 }
91 
92 #endif /* FSL_FEATURE_SOC_SYSCON_COUNT || FSL_FEATURE_SOC_ASYNC_SYSCON_COUNT */
93