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)34void 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)56void 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)86void 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