1 /*
2  * Copyright 2020-2023 NXP
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 /**
7 *   @file       Power_Ip_FLASH.c
8 *   @version    3.0.0
9 *
10 *   @brief   POWER driver implementations.
11 *   @details POWER driver implementations.
12 *
13 *   @addtogroup POWER_DRIVER Power Ip Driver
14 *   @{
15 */
16 
17 #ifdef __cplusplus
18 extern "C"
19 {
20 #endif
21 
22 
23 
24 
25 /*==================================================================================================
26                                          INCLUDE FILES
27  1) system and project includes
28  2) needed interfaces from external units
29  3) internal and external interfaces from this unit
30 ==================================================================================================*/
31 #include "Power_Ip_FLASH.h"
32 
33 #if (defined(POWER_IP_ENABLE_USER_MODE_SUPPORT) && (STD_ON == POWER_IP_ENABLE_USER_MODE_SUPPORT))
34   #if (defined(MCAL_PMC_REG_PROT_AVAILABLE))
35     #if (STD_ON == MCAL_PMC_REG_PROT_AVAILABLE)
36       #define USER_MODE_REG_PROT_ENABLED      (STD_ON)
37       #include "RegLockMacros.h"
38     #endif /* (STD_ON == MCAL_PMC_REG_PROT_AVAILABLE) */
39   #endif
40 #endif /* (STD_ON == POWER_IP_ENABLE_USER_MODE_SUPPORT) */
41 /*==================================================================================================
42 *                              SOURCE FILE VERSION INFORMATION
43 ==================================================================================================*/
44 #define POWER_IP_FLASH_VENDOR_ID_C                      43
45 #define POWER_IP_FLASH_AR_RELEASE_MAJOR_VERSION_C       4
46 #define POWER_IP_FLASH_AR_RELEASE_MINOR_VERSION_C       7
47 #define POWER_IP_FLASH_AR_RELEASE_REVISION_VERSION_C    0
48 #define POWER_IP_FLASH_SW_MAJOR_VERSION_C               3
49 #define POWER_IP_FLASH_SW_MINOR_VERSION_C               0
50 #define POWER_IP_FLASH_SW_PATCH_VERSION_C               0
51 
52 /*==================================================================================================
53                                      FILE VERSION CHECKS
54 =================================================================================================*/
55 /* Check if current file and Power_Ip_FLASH header file are of the same vendor */
56 #if (POWER_IP_FLASH_VENDOR_ID_C != POWER_IP_FLASH_VENDOR_ID)
57     #error "Power_Ip_FLASH.c and Power_Ip_FLASH.h have different vendor ids"
58 #endif
59 /* Check if current file and Power_Ip_FLASH header file are of the same Autosar version */
60 #if ((POWER_IP_FLASH_AR_RELEASE_MAJOR_VERSION_C    != POWER_IP_FLASH_AR_RELEASE_MAJOR_VERSION) || \
61      (POWER_IP_FLASH_AR_RELEASE_MINOR_VERSION_C    != POWER_IP_FLASH_AR_RELEASE_MINOR_VERSION) || \
62      (POWER_IP_FLASH_AR_RELEASE_REVISION_VERSION_C != POWER_IP_FLASH_AR_RELEASE_REVISION_VERSION) \
63     )
64     #error "AutoSar Version Numbers of Power_Ip_FLASH.c and Power_Ip_FLASH.h are different"
65 #endif
66 /* Check if current file and Power_Ip_FLASH header file are of the same Software version */
67 #if ((POWER_IP_FLASH_SW_MAJOR_VERSION_C != POWER_IP_FLASH_SW_MAJOR_VERSION) || \
68      (POWER_IP_FLASH_SW_MINOR_VERSION_C != POWER_IP_FLASH_SW_MINOR_VERSION) || \
69      (POWER_IP_FLASH_SW_PATCH_VERSION_C != POWER_IP_FLASH_SW_PATCH_VERSION) \
70     )
71     #error "Software Version Numbers of Power_Ip_FLASH.c and Power_Ip_FLASH.h are different"
72 #endif
73 
74 #if (defined(POWER_IP_ENABLE_USER_MODE_SUPPORT) && (STD_ON == POWER_IP_ENABLE_USER_MODE_SUPPORT))
75   #if (defined(MCAL_PMC_REG_PROT_AVAILABLE))
76     #if (STD_ON == MCAL_PMC_REG_PROT_AVAILABLE)
77         #ifndef DISABLE_MCAL_INTERMODULE_ASR_CHECK
78         /* Check if Power_Ip_FLASH.c file and RegLockMacros.h file are of the same Autosar version */
79             #if ((POWER_IP_FLASH_AR_RELEASE_MAJOR_VERSION_C    != REGLOCKMACROS_AR_RELEASE_MAJOR_VERSION) || \
80                 (POWER_IP_FLASH_AR_RELEASE_MINOR_VERSION_C    != REGLOCKMACROS_AR_RELEASE_MINOR_VERSION))
81                 #error "AutoSar Version Numbers of Power_Ip_FLASH.c and RegLockMacros.h are different"
82             #endif
83         #endif
84     #endif /* (STD_ON == MCAL_PMC_REG_PROT_AVAILABLE) */
85   #endif
86 #endif /* (STD_ON == POWER_IP_ENABLE_USER_MODE_SUPPORT) */
87 /*==================================================================================================
88 *                                        LOCAL MACROS
89 ==================================================================================================*/
90 
91 
92 /*==================================================================================================
93                           LOCAL TYPEDEFS (STRUCTURES, UNIONS, ENUMS)
94 ==================================================================================================*/
95 
96 
97 /*==================================================================================================
98                                        LOCAL CONSTANTS
99 ==================================================================================================*/
100 
101 
102 /*==================================================================================================
103                                        LOCAL VARIABLES
104 ==================================================================================================*/
105 
106 
107 /*==================================================================================================
108                                        GLOBAL CONSTANTS
109 ==================================================================================================*/
110 
111 
112 /*==================================================================================================
113                                        GLOBAL VARIABLES
114 ==================================================================================================*/
115 
116 
117 /*==================================================================================================
118                                    LOCAL FUNCTION PROTOTYPES
119 ==================================================================================================*/
120 
121 /*==================================================================================================
122                                        LOCAL FUNCTIONS
123 ==================================================================================================*/
124 
125 /*==================================================================================================
126                                        GLOBAL FUNCTIONS
127 ==================================================================================================*/
128 #define MCU_START_SEC_CODE
129 
130 #include "Mcu_MemMap.h"
131 
132 #if (defined(POWER_IP_ENTER_LOW_POWER_MODE) && (POWER_IP_ENTER_LOW_POWER_MODE == STD_ON))
133 
134 #if (defined(POWER_IP_ENABLE_USER_MODE_SUPPORT) && (STD_ON == POWER_IP_ENABLE_USER_MODE_SUPPORT))
135   #if (defined(MCAL_C40ASF_REG_PROT_AVAILABLE))
136     #if(STD_ON == MCAL_C40ASF_REG_PROT_AVAILABLE)
137 /**
138 * @brief            This function will enable writing in User mode by configuring REG_PROT
139 */
Power_Ip_FLASH_C40ASF_SetUserAccessAllowed(void)140 void Power_Ip_FLASH_C40ASF_SetUserAccessAllowed(void)
141 {
142 #if (defined(IP_FLASH_BASE))
143     SET_USER_ACCESS_ALLOWED(IP_FLASH_BASE, C40ASF_PROT_MEM_U32);
144 #endif
145 }
146     #endif /* (STD_ON == MCAL_C40ASF_REG_PROT_AVAILABLE) */
147   #endif /* (MCAL_C40ASF_REG_PROT_AVAILABLE) */
148 #endif /* (STD_ON == POWER_IP_ENABLE_USER_MODE_SUPPORT) */
149 
150 /**
151 * @brief            This function checks if there is an ongoing Flash high voltage operation.
152 * @details          Checks whether the embedded flash array is idle or not.
153 *                   Called by:
154 *                       - Power_Ip_SetMode() from IPW.
155 *
156 * @param[in]        void
157 *
158 * @return           boolean
159 * @retval           TRUE        The embedded flash array is executing a high-voltage operation.
160 * @retval           FALSE       The embedded flash array is idle.
161 *
162 */
Power_Ip_FLASH_HighVoltageOperationOngoing(void)163 boolean Power_Ip_FLASH_HighVoltageOperationOngoing(void)
164 {
165     boolean FlashBusy = FALSE;
166     uint32 McrReg;
167 
168     /* Read value of Flash Module Configuration */
169     McrReg = IP_FLASH->MCR;
170 
171     if ( 0U != (McrReg & FLASH_MCR_EHV_MASK) )
172     {
173         FlashBusy = TRUE;
174     }
175 
176     return FlashBusy;
177 }
178 #endif /* (POWER_IP_ENTER_LOW_POWER_MODE == STD_ON) */
179 
180 #define MCU_STOP_SEC_CODE
181 
182 #include "Mcu_MemMap.h"
183 
184 #ifdef __cplusplus
185 }
186 #endif
187 
188 /** @} */
189 
190