1 /*
2  * Copyright 2017-2020 NXP
3  * All rights reserved.
4  *
5  * SPDX-License-Identifier: BSD-3-Clause
6  *
7  */
8 
9 #ifndef FSL_FTFX_ADAPTER_H
10 #define FSL_FTFX_ADAPTER_H
11 
12 /*******************************************************************************
13  * Definitions
14  ******************************************************************************/
15 
16 #define INVALID_REG_MASK    (0)
17 #define INVALID_REG_SHIFT   (0)
18 #define INVALID_REG_ADDRESS (NULL)
19 #define INVALID_REG_VALUE   (0x00U)
20 
21 /* @brief Flash register access type defines */
22 #define FTFx_REG8_ACCESS_TYPE  volatile uint8_t *
23 #define FTFx_REG32_ACCESS_TYPE volatile uint32_t *
24 
25 /*!
26  * @name Common flash register info defines
27  * @{
28  */
29 #if defined(FTFA)
30 #define FTFx                     FTFA
31 #define FTFx_BASE                FTFA_BASE
32 #define FTFx_FSTAT_CCIF_MASK     FTFA_FSTAT_CCIF_MASK
33 #define FTFx_FSTAT_CCIF_SHIFT    FTFA_FSTAT_CCIF_SHIFT
34 #define FTFx_FSTAT_RDCOLERR_MASK FTFA_FSTAT_RDCOLERR_MASK
35 #define FTFx_FSTAT_ACCERR_MASK   FTFA_FSTAT_ACCERR_MASK
36 #define FTFx_FSTAT_FPVIOL_MASK   FTFA_FSTAT_FPVIOL_MASK
37 #define FTFx_FSTAT_MGSTAT0_MASK  FTFA_FSTAT_MGSTAT0_MASK
38 #define FTFx_FSEC_SEC_MASK       FTFA_FSEC_SEC_MASK
39 #define FTFx_FSEC_KEYEN_MASK     FTFA_FSEC_KEYEN_MASK
40 #if defined(FSL_FEATURE_FLASH_HAS_FLEX_RAM) && FSL_FEATURE_FLASH_HAS_FLEX_RAM
41 #define FTFx_FCNFG_RAMRDY_MASK FTFA_FCNFG_RAMRDY_MASK
42 #endif /* FSL_FEATURE_FLASH_HAS_FLEX_RAM */
43 #if defined(FSL_FEATURE_FLASH_HAS_FLEX_NVM) && FSL_FEATURE_FLASH_HAS_FLEX_NVM
44 #define FTFx_FCNFG_EEERDY_MASK FTFA_FCNFG_EEERDY_MASK
45 #endif /* FSL_FEATURE_FLASH_HAS_FLEX_NVM */
46 #elif defined(FTFE)
47 #define FTFx                     FTFE
48 #define FTFx_BASE                FTFE_BASE
49 #define FTFx_FSTAT_CCIF_MASK     FTFE_FSTAT_CCIF_MASK
50 #define FTFx_FSTAT_CCIF_SHIFT    FTFE_FSTAT_CCIF_SHIFT
51 #define FTFx_FSTAT_RDCOLERR_MASK FTFE_FSTAT_RDCOLERR_MASK
52 #define FTFx_FSTAT_ACCERR_MASK   FTFE_FSTAT_ACCERR_MASK
53 #define FTFx_FSTAT_FPVIOL_MASK   FTFE_FSTAT_FPVIOL_MASK
54 #define FTFx_FSTAT_MGSTAT0_MASK  FTFE_FSTAT_MGSTAT0_MASK
55 #define FTFx_FSEC_SEC_MASK       FTFE_FSEC_SEC_MASK
56 #define FTFx_FSEC_KEYEN_MASK     FTFE_FSEC_KEYEN_MASK
57 #if defined(FSL_FEATURE_FLASH_HAS_FLEX_RAM) && FSL_FEATURE_FLASH_HAS_FLEX_RAM
58 #define FTFx_FCNFG_RAMRDY_MASK FTFE_FCNFG_RAMRDY_MASK
59 #endif /* FSL_FEATURE_FLASH_HAS_FLEX_RAM */
60 #if defined(FSL_FEATURE_FLASH_HAS_FLEX_NVM) && FSL_FEATURE_FLASH_HAS_FLEX_NVM
61 #define FTFx_FCNFG_EEERDY_MASK FTFE_FCNFG_EEERDY_MASK
62 #endif /* FSL_FEATURE_FLASH_HAS_FLEX_NVM */
63 #elif defined(FTFL)
64 #define FTFx                     FTFL
65 #define FTFx_BASE                FTFL_BASE
66 #define FTFx_FSTAT_CCIF_MASK     FTFL_FSTAT_CCIF_MASK
67 #define FTFx_FSTAT_CCIF_SHIFT    FTFL_FSTAT_CCIF_SHIFT
68 #define FTFx_FSTAT_RDCOLERR_MASK FTFL_FSTAT_RDCOLERR_MASK
69 #define FTFx_FSTAT_ACCERR_MASK   FTFL_FSTAT_ACCERR_MASK
70 #define FTFx_FSTAT_FPVIOL_MASK   FTFL_FSTAT_FPVIOL_MASK
71 #define FTFx_FSTAT_MGSTAT0_MASK  FTFL_FSTAT_MGSTAT0_MASK
72 #define FTFx_FSEC_SEC_MASK       FTFL_FSEC_SEC_MASK
73 #define FTFx_FSEC_KEYEN_MASK     FTFL_FSEC_KEYEN_MASK
74 #if defined(FSL_FEATURE_FLASH_HAS_FLEX_RAM) && FSL_FEATURE_FLASH_HAS_FLEX_RAM
75 #define FTFx_FCNFG_RAMRDY_MASK FTFL_FCNFG_RAMRDY_MASK
76 #endif /* FSL_FEATURE_FLASH_HAS_FLEX_RAM */
77 #if defined(FSL_FEATURE_FLASH_HAS_FLEX_NVM) && FSL_FEATURE_FLASH_HAS_FLEX_NVM
78 #define FTFx_FCNFG_EEERDY_MASK FTFL_FCNFG_EEERDY_MASK
79 #endif /* FSL_FEATURE_FLASH_HAS_FLEX_NVM */
80 #else
81 #error "Unknown flash controller"
82 #endif
83 /*! @} */
84 
85 /*!
86  * @name Common flash register access info defines
87  * @{
88  */
89 #define FTFx_FCCOB3_REG (FTFx->FCCOB3)
90 #define FTFx_FCCOB5_REG (FTFx->FCCOB5)
91 #define FTFx_FCCOB6_REG (FTFx->FCCOB6)
92 #define FTFx_FCCOB7_REG (FTFx->FCCOB7)
93 
94 #if defined(FSL_FEATURE_FLASH_HAS_MULTIPLE_FLASH) || defined(FSL_FEATURE_FLASH_PFLASH_1_START_ADDRESS)
95 #if defined(FTFA_FPROTSL_PROTS_MASK) || defined(FTFE_FPROTSL_PROTS_MASK) || defined(FTFL_FPROTSL_PROTS_MASK)
96 #define FTFx_FLASH1_HAS_INT_PROT_REG (1)
97 #define FTFx_FPROTSH_REG             (FTFx->FPROTSH)
98 #define FTFx_FPROTSL_REG             (FTFx->FPROTSL)
99 #else
100 #define FTFx_FLASH1_HAS_INT_PROT_REG (0)
101 #endif
102 #endif
103 
104 #if defined(FTFA_FPROTH0_PROT_MASK) || defined(FTFE_FPROTH0_PROT_MASK) || defined(FTFL_FPROTH0_PROT_MASK)
105 #define FTFx_FLASH0_HAS_HIGH_PROT_REG (1)
106 #define FTFx_FPROT_HIGH_REG           (FTFx->FPROTH3)
107 #define FTFx_FPROTH3_REG              (FTFx->FPROTH3)
108 #define FTFx_FPROTH2_REG              (FTFx->FPROTH2)
109 #define FTFx_FPROTH1_REG              (FTFx->FPROTH1)
110 #define FTFx_FPROTH0_REG              (FTFx->FPROTH0)
111 #else
112 #define FTFx_FLASH0_HAS_HIGH_PROT_REG (0)
113 #endif
114 
115 #if defined(FTFA_FPROTL0_PROT_MASK) || defined(FTFE_FPROTL0_PROT_MASK) || defined(FTFL_FPROTL0_PROT_MASK)
116 #define FTFx_FPROT_LOW_REG (FTFx->FPROTL3)
117 #define FTFx_FPROTL3_REG   (FTFx->FPROTL3)
118 #define FTFx_FPROTL2_REG   (FTFx->FPROTL2)
119 #define FTFx_FPROTL1_REG   (FTFx->FPROTL1)
120 #define FTFx_FPROTL0_REG   (FTFx->FPROTL0)
121 #elif defined(FTFA_FPROT0_PROT_MASK) || defined(FTFE_FPROT0_PROT_MASK) || defined(FTFL_FPROT0_PROT_MASK)
122 #define FTFx_FPROT_LOW_REG (FTFx->FPROT3)
123 #define FTFx_FPROTL3_REG   (FTFx->FPROT3)
124 #define FTFx_FPROTL2_REG   (FTFx->FPROT2)
125 #define FTFx_FPROTL1_REG   (FTFx->FPROT1)
126 #define FTFx_FPROTL0_REG   (FTFx->FPROT0)
127 #endif
128 
129 #if defined(FSL_FEATURE_FLASH_HAS_MULTIPLE_FLASH) || defined(FSL_FEATURE_FLASH_PFLASH_1_START_ADDRESS)
130 #if defined(FTFA_FACSSS_SGSIZE_S_MASK) || defined(FTFE_FACSSS_SGSIZE_S_MASK) || defined(FTFL_FACSSS_SGSIZE_S_MASK)
131 #define FTFx_FLASH1_HAS_INT_XACC_REG (1)
132 #define FTFx_XACCSH_REG              (FTFx->XACCSH)
133 #define FTFx_XACCSL_REG              (FTFx->XACCSL)
134 #define FTFx_FACSSS_REG              (FTFx->FACSSS)
135 #define FTFx_FACSNS_REG              (FTFx->FACSNS)
136 #else
137 #define FTFx_FLASH1_HAS_INT_XACC_REG (0)
138 #endif
139 #endif
140 
141 #if (defined(FTFA_FACSS_SGSIZE_MASK) || defined(FTFE_FACSS_SGSIZE_MASK) || defined(FTFL_FACSS_SGSIZE_MASK) || \
142      defined(FTFA_FACSS_SGSIZE_S_MASK) || defined(FTFE_FACSS_SGSIZE_S_MASK) || defined(FTFL_FACSS_SGSIZE_S_MASK))
143 #define FTFx_FLASH0_HAS_INT_XACC_REG (1)
144 #define FTFx_XACCH3_REG              (FTFx->XACCH3)
145 #define FTFx_XACCL3_REG              (FTFx->XACCL3)
146 #define FTFx_FACSS_REG               (FTFx->FACSS)
147 #define FTFx_FACSN_REG               (FTFx->FACSN)
148 #else
149 #define FTFx_FLASH0_HAS_INT_XACC_REG (0)
150 #endif
151 /*! @} */
152 
153 /*!
154  * @brief MCM cache register access info defines.
155  */
156 #if defined(MCM_PLACR_CFCC_MASK)
157 	#define MCM_CACHE_CLEAR_MASK  MCM_PLACR_CFCC_MASK
158 	#define MCM_CACHE_CLEAR_SHIFT MCM_PLACR_CFCC_SHIFT
159 #else
160 	#define MCM_CACHE_CLEAR_MASK  INVALID_REG_MASK
161 	#define MCM_CACHE_CLEAR_SHIFT INVALID_REG_SHIFT
162 #endif
163 
164 #if defined(MCM0)
165 	#define MCM0_CACHE_REG MCM0->PLACR
166 #elif defined(MCM) && (!defined(MCM1))
167 	#define MCM0_CACHE_REG MCM->PLACR
168 #else
169 	#define MCM0_CACHE_REG        (INVALID_REG_ADDRESS)
170 #endif
171 
172 #if defined(MCM1)
173 	#define MCM1_CACHE_REG MCM1->PLACR
174 #elif defined(MCM) && (!defined(MCM0))
175 	#define MCM1_CACHE_REG MCM->PLACR
176 #else
177 	#define MCM1_CACHE_REG        (INVALID_REG_ADDRESS)
178 #endif
179 
180 /*!
181  * @brief FMC cache register access info defines.
182  */
183 #if defined(FMC_PFB01CR_S_INV_MASK)
184 #define FMC_SPECULATION_INVALIDATE_MASK  FMC_PFB01CR_S_INV_MASK
185 #define FMC_SPECULATION_INVALIDATE_SHIFT FMC_PFB01CR_S_INV_SHIFT
186 #define FMC_SPECULATION_INVALIDATE_REG   FMC->PFB01CR
187 #elif defined(FMC_PFB01CR_S_B_INV_MASK)
188 #define FMC_SPECULATION_INVALIDATE_MASK  FMC_PFB01CR_S_B_INV_MASK
189 #define FMC_SPECULATION_INVALIDATE_SHIFT FMC_PFB01CR_S_B_INV_SHIFT
190 #define FMC_SPECULATION_INVALIDATE_REG   FMC->PFB01CR
191 #elif defined(FMC_PFB0CR_S_INV_MASK)
192 #define FMC_SPECULATION_INVALIDATE_MASK  FMC_PFB0CR_S_INV_MASK
193 #define FMC_SPECULATION_INVALIDATE_SHIFT FMC_PFB0CR_S_INV_SHIFT
194 #define FMC_SPECULATION_INVALIDATE_REG   FMC->PFB0CR
195 #elif defined(FMC_PFB0CR_S_B_INV_MASK)
196 #define FMC_SPECULATION_INVALIDATE_MASK  FMC_PFB0CR_S_B_INV_MASK
197 #define FMC_SPECULATION_INVALIDATE_SHIFT FMC_PFB0CR_S_B_INV_SHIFT
198 #define FMC_SPECULATION_INVALIDATE_REG   FMC->PFB0CR
199 #else
200 #define FMC_SPECULATION_INVALIDATE_MASK  INVALID_REG_MASK
201 #define FMC_SPECULATION_INVALIDATE_SHIFT INVALID_REG_SHIFT
202 #define FMC_SPECULATION_INVALIDATE(x)    (((uint32_t)(((uint32_t)(x)) << INVALID_REG_SHIFT)) & INVALID_REG_MASK)
203 #define FMC_SPECULATION_INVALIDATE_REG   (INVALID_REG_ADDRESS)
204 #endif
205 
206 #if defined(FMC_PFB01CR_CINV_WAY_MASK)
207 #define FMC_CACHE_CLEAR_MASK  FMC_PFB01CR_CINV_WAY_MASK
208 #define FMC_CACHE_CLEAR_SHIFT FMC_PFB01CR_CINV_WAY_SHIFT
209 #define FMC_CACHE_CLEAR(x)    FMC_PFB01CR_CINV_WAY(x)
210 #elif defined(FMC_PFB0CR_CINV_WAY_MASK)
211 #define FMC_CACHE_CLEAR_MASK  FMC_PFB0CR_CINV_WAY_MASK
212 #define FMC_CACHE_CLEAR_SHIFT FMC_PFB0CR_CINV_WAY_SHIFT
213 #define FMC_CACHE_CLEAR(x)    FMC_PFB0CR_CINV_WAY(x)
214 #else
215 #define FMC_CACHE_CLEAR_MASK  INVALID_REG_MASK
216 #define FMC_CACHE_CLEAR_SHIFT INVALID_REG_SHIFT
217 #define FMC_CACHE_CLEAR(x)    (((uint32_t)(((uint32_t)(x)) << INVALID_REG_SHIFT)) & INVALID_REG_MASK)
218 #endif
219 
220 #if defined(FMC_PFB01CR_B0DPE_MASK)
221 #define FMC_CACHE_B0DPE_MASK FMC_PFB01CR_B0DPE_MASK
222 #define FMC_CACHE_B0IPE_MASK FMC_PFB01CR_B0IPE_MASK
223 #define FMC_CACHE_REG        FMC->PFB01CR
224 #elif defined(FMC_PFB0CR_B0DPE_MASK)
225 #define FMC_CACHE_B0DPE_MASK FMC_PFB0CR_B0DPE_MASK
226 #define FMC_CACHE_B0IPE_MASK FMC_PFB0CR_B0IPE_MASK
227 #define FMC_CACHE_REG        FMC->PFB0CR
228 #else
229 #define FMC_CACHE_B0DPE_MASK INVALID_REG_MASK
230 #define FMC_CACHE_B0IPE_MASK INVALID_REG_MASK
231 #define FMC_CACHE_REG        (INVALID_REG_ADDRESS)
232 #endif
233 
234 /*!
235  * @brief MSCM cache register access info defines.
236  */
237 #if defined(MSCM_OCMDR_OCM1_MASK)
238 #define MSCM_SPECULATION_SET_MASK  MSCM_OCMDR_OCM1_MASK
239 #define MSCM_SPECULATION_SET_SHIFT MSCM_OCMDR_OCM1_SHIFT
240 #define MSCM_SPECULATION_SET(x)    MSCM_OCMDR_OCM1(x)
241 #elif defined(MSCM_OCMDR0_OCM1_MASK) || defined(MSCM_OCMDR1_OCM1_MASK)
242 #define MSCM_SPECULATION_SET_MASK  MSCM_OCMDR0_OCM1_MASK
243 #define MSCM_SPECULATION_SET_SHIFT MSCM_OCMDR0_OCM1_SHIFT
244 #define MSCM_SPECULATION_SET(x)    MSCM_OCMDR0_OCM1(x)
245 #elif defined(MSCM_OCMDR_OCMC1_MASK)
246 #define MSCM_SPECULATION_SET_MASK  MSCM_OCMDR_OCMC1_MASK
247 #define MSCM_SPECULATION_SET_SHIFT MSCM_OCMDR_OCMC1_SHIFT
248 #define MSCM_SPECULATION_SET(x)    MSCM_OCMDR_OCMC1(x)
249 #else
250 #define MSCM_SPECULATION_SET_MASK  INVALID_REG_MASK
251 #define MSCM_SPECULATION_SET_SHIFT INVALID_REG_SHIFT
252 #define MSCM_SPECULATION_SET(x)    (((uint32_t)(((uint32_t)(x)) << INVALID_REG_SHIFT)) & INVALID_REG_MASK)
253 #endif
254 
255 #if defined(MSCM_OCMDR_OCM2_MASK)
256 #define MSCM_CACHE_CLEAR_MASK  MSCM_OCMDR_OCM2_MASK
257 #define MSCM_CACHE_CLEAR_SHIFT MSCM_OCMDR_OCM2_SHIFT
258 #define MSCM_CACHE_CLEAR(x)    MSCM_OCMDR_OCM2(x)
259 #else
260 #define MSCM_CACHE_CLEAR_MASK  INVALID_REG_MASK
261 #define MSCM_CACHE_CLEAR_SHIFT INVALID_REG_SHIFT
262 #define MSCM_CACHE_CLEAR(x)    (((uint32_t)(((uint32_t)(x)) << INVALID_REG_SHIFT)) & INVALID_REG_MASK)
263 #endif
264 
265 #if defined(MSCM_OCMDR_OCM1_MASK) || defined(MSCM_OCMDR_OCMC1_MASK)
266 #define MSCM_OCMDR0_REG MSCM->OCMDR[0]
267 #define MSCM_OCMDR1_REG MSCM->OCMDR[1]
268 #elif defined(MSCM_OCMDR0_OCM1_MASK) || defined(MSCM_OCMDR1_OCM1_MASK)
269 #define MSCM_OCMDR0_REG MSCM->OCMDR0
270 #define MSCM_OCMDR1_REG MSCM->OCMDR1
271 #else
272 #define MSCM_OCMDR0_REG (INVALID_REG_ADDRESS)
273 #define MSCM_OCMDR1_REG (INVALID_REG_ADDRESS)
274 #endif
275 
276 /*!
277  * @brief MSCM prefetch speculation defines.
278  */
279 #define MSCM_OCMDR_OCMC1_DFDS_MASK  (0x10U)
280 #define MSCM_OCMDR_OCMC1_DFCS_MASK  (0x20U)
281 #define MSCM_OCMDR_OCMC1_DFDS_SHIFT (4U)
282 #define MSCM_OCMDR_OCMC1_DFCS_SHIFT (5U)
283 
284 /*!
285  * @brief SIM PFSIZE register access info defines.
286  */
287 #if defined(SIM_FCFG1_CORE0_PFSIZE_MASK)
288 #define SIM_FLASH0_PFSIZE_MASK  SIM_FCFG1_CORE0_PFSIZE_MASK
289 #define SIM_FLASH0_PFSIZE_SHIFT SIM_FCFG1_CORE0_PFSIZE_SHIFT
290 #define SIM_FCFG1_REG           SIM->FCFG1
291 #elif defined(SIM_FCFG1_PFSIZE_MASK)
292 #define SIM_FLASH0_PFSIZE_MASK  SIM_FCFG1_PFSIZE_MASK
293 #define SIM_FLASH0_PFSIZE_SHIFT SIM_FCFG1_PFSIZE_SHIFT
294 #define SIM_FCFG1_REG           SIM->FCFG1
295 #else
296 #define SIM_FLASH0_PFSIZE_MASK  INVALID_REG_MASK
297 #define SIM_FLASH0_PFSIZE_SHIFT INVALID_REG_SHIFT
298 #define SIM_FCFG1_REG           INVALID_REG_VALUE
299 #endif
300 
301 #if defined(SIM_FCFG1_CORE1_PFSIZE_MASK)
302 #define SIM_FLASH1_PFSIZE_MASK  SIM_FCFG1_CORE1_PFSIZE_MASK
303 #define SIM_FLASH1_PFSIZE_SHIFT SIM_FCFG1_CORE1_PFSIZE_SHIFT
304 #else
305 #define SIM_FLASH1_PFSIZE_MASK  INVALID_REG_MASK
306 #define SIM_FLASH1_PFSIZE_SHIFT INVALID_REG_SHIFT
307 #endif
308 
309 /*!
310  * @name Dual core/flash configuration
311  * @{
312  */
313 /*! @brief Redefines some flash features. */
314 #if defined(FSL_FEATURE_FLASH_CURRENT_CORE_ID)
315 #if (FSL_FEATURE_FLASH_CURRENT_CORE_ID == 0u)
316 #define FLASH0_FEATURE_PFLASH_START_ADDRESS                FSL_FEATURE_FLASH_PFLASH_START_ADDRESS
317 #define FLASH0_FEATURE_PFLASH_BLOCK_COUNT                  FSL_FEATURE_FLASH_PFLASH_BLOCK_COUNT
318 #define FLASH0_FEATURE_PFLASH_BLOCK_SIZE                   FSL_FEATURE_FLASH_PFLASH_BLOCK_SIZE
319 #define FLASH0_FEATURE_PFLASH_BLOCK_SECTOR_SIZE            FSL_FEATURE_FLASH_PFLASH_BLOCK_SECTOR_SIZE
320 #define FLASH0_FEATURE_PFLASH_BLOCK_WRITE_UNIT_SIZE        FSL_FEATURE_FLASH_PFLASH_BLOCK_WRITE_UNIT_SIZE
321 #define FLASH0_FEATURE_PFLASH_SECTOR_CMD_ADDRESS_ALIGMENT  FSL_FEATURE_FLASH_PFLASH_SECTOR_CMD_ADDRESS_ALIGMENT
322 #define FLASH0_FEATURE_PFLASH_SECTION_CMD_ADDRESS_ALIGMENT FSL_FEATURE_FLASH_PFLASH_SECTION_CMD_ADDRESS_ALIGMENT
323 #define FLASH0_FEATURE_PFLASH_PROTECTION_REGION_COUNT      FSL_FEATURE_FLASH_PFLASH_PROTECTION_REGION_COUNT
324 #define FLASH1_FEATURE_PFLASH_START_ADDRESS                FSL_FEATURE_FLASH_PFLASH_1_START_ADDRESS
325 #define FLASH1_FEATURE_PFLASH_BLOCK_COUNT                  FSL_FEATURE_FLASH_PFLASH_1_BLOCK_COUNT
326 #define FLASH1_FEATURE_PFLASH_BLOCK_SIZE                   FSL_FEATURE_FLASH_PFLASH_1_BLOCK_SIZE
327 #define FLASH1_FEATURE_PFLASH_BLOCK_SECTOR_SIZE            FSL_FEATURE_FLASH_PFLASH_1_BLOCK_SECTOR_SIZE
328 #define FLASH1_FEATURE_PFLASH_BLOCK_WRITE_UNIT_SIZE        FSL_FEATURE_FLASH_PFLASH_1_BLOCK_WRITE_UNIT_SIZE
329 #if defined(FSL_FEATURE_FLASH_PFLASH_1_SECTOR_CMD_ADDRESS_ALIGMENT) && \
330     defined(FSL_FEATURE_FLASH_PFLASH_1_SECTION_CMD_ADDRESS_ALIGMENT)
331 #define FLASH1_FEATURE_PFLASH_SECTOR_CMD_ADDRESS_ALIGMENT  FSL_FEATURE_FLASH_PFLASH_1_SECTOR_CMD_ADDRESS_ALIGMENT
332 #define FLASH1_FEATURE_PFLASH_SECTION_CMD_ADDRESS_ALIGMENT FSL_FEATURE_FLASH_PFLASH_1_SECTION_CMD_ADDRESS_ALIGMENT
333 #else
334 #define FLASH1_FEATURE_PFLASH_SECTOR_CMD_ADDRESS_ALIGMENT  FSL_FEATURE_FLASH_PFLASH_SECTOR_CMD_ADDRESS_ALIGMENT
335 #define FLASH1_FEATURE_PFLASH_SECTION_CMD_ADDRESS_ALIGMENT FSL_FEATURE_FLASH_PFLASH_SECTION_CMD_ADDRESS_ALIGMENT
336 #endif
337 #define FLASH1_FEATURE_PFLASH_PROTECTION_REGION_COUNT FSL_FEATURE_FLASH_PFLASH_1_PROTECTION_REGION_COUNT
338 #elif (FSL_FEATURE_FLASH_CURRENT_CORE_ID == 1u)
339 #define FLASH0_FEATURE_PFLASH_START_ADDRESS         FSL_FEATURE_FLASH_PFLASH_1_START_ADDRESS
340 #define FLASH0_FEATURE_PFLASH_BLOCK_COUNT           FSL_FEATURE_FLASH_PFLASH_1_BLOCK_COUNT
341 #define FLASH0_FEATURE_PFLASH_BLOCK_SIZE            FSL_FEATURE_FLASH_PFLASH_1_BLOCK_SIZE
342 #define FLASH0_FEATURE_PFLASH_BLOCK_SECTOR_SIZE     FSL_FEATURE_FLASH_PFLASH_1_BLOCK_SECTOR_SIZE
343 #define FLASH0_FEATURE_PFLASH_BLOCK_WRITE_UNIT_SIZE FSL_FEATURE_FLASH_PFLASH_1_BLOCK_WRITE_UNIT_SIZE
344 #if defined(FSL_FEATURE_FLASH_PFLASH_1_SECTOR_CMD_ADDRESS_ALIGMENT) && \
345     defined(FSL_FEATURE_FLASH_PFLASH_1_SECTION_CMD_ADDRESS_ALIGMENT)
346 #define FLASH0_FEATURE_PFLASH_SECTOR_CMD_ADDRESS_ALIGMENT  FSL_FEATURE_FLASH_PFLASH_1_SECTOR_CMD_ADDRESS_ALIGMENT
347 #define FLASH0_FEATURE_PFLASH_SECTION_CMD_ADDRESS_ALIGMENT FSL_FEATURE_FLASH_PFLASH_1_SECTION_CMD_ADDRESS_ALIGMENT
348 #else
349 #define FLASH0_FEATURE_PFLASH_SECTOR_CMD_ADDRESS_ALIGMENT  FSL_FEATURE_FLASH_PFLASH_SECTOR_CMD_ADDRESS_ALIGMENT
350 #define FLASH0_FEATURE_PFLASH_SECTION_CMD_ADDRESS_ALIGMENT FSL_FEATURE_FLASH_PFLASH_SECTION_CMD_ADDRESS_ALIGMENT
351 #endif
352 #define FLASH0_FEATURE_PFLASH_PROTECTION_REGION_COUNT      FSL_FEATURE_FLASH_PFLASH_1_PROTECTION_REGION_COUNT
353 #define FLASH1_FEATURE_PFLASH_START_ADDRESS                FSL_FEATURE_FLASH_PFLASH_START_ADDRESS
354 #define FLASH1_FEATURE_PFLASH_BLOCK_COUNT                  FSL_FEATURE_FLASH_PFLASH_BLOCK_COUNT
355 #define FLASH1_FEATURE_PFLASH_BLOCK_SIZE                   FSL_FEATURE_FLASH_PFLASH_BLOCK_SIZE
356 #define FLASH1_FEATURE_PFLASH_BLOCK_SECTOR_SIZE            FSL_FEATURE_FLASH_PFLASH_BLOCK_SECTOR_SIZE
357 #define FLASH1_FEATURE_PFLASH_BLOCK_WRITE_UNIT_SIZE        FSL_FEATURE_FLASH_PFLASH_BLOCK_WRITE_UNIT_SIZE
358 #define FLASH1_FEATURE_PFLASH_SECTOR_CMD_ADDRESS_ALIGMENT  FSL_FEATURE_FLASH_PFLASH_SECTOR_CMD_ADDRESS_ALIGMENT
359 #define FLASH1_FEATURE_PFLASH_SECTION_CMD_ADDRESS_ALIGMENT FSL_FEATURE_FLASH_PFLASH_SECTION_CMD_ADDRESS_ALIGMENT
360 #define FLASH1_FEATURE_PFLASH_PROTECTION_REGION_COUNT      FSL_FEATURE_FLASH_PFLASH_PROTECTION_REGION_COUNT
361 #endif
362 #else /* undfine FSL_FEATURE_FLASH_CURRENT_CORE_ID */
363 #define FLASH0_FEATURE_PFLASH_START_ADDRESS                FSL_FEATURE_FLASH_PFLASH_START_ADDRESS
364 #define FLASH0_FEATURE_PFLASH_BLOCK_COUNT                  FSL_FEATURE_FLASH_PFLASH_BLOCK_COUNT
365 #define FLASH0_FEATURE_PFLASH_BLOCK_SIZE                   FSL_FEATURE_FLASH_PFLASH_BLOCK_SIZE
366 #define FLASH0_FEATURE_PFLASH_BLOCK_SECTOR_SIZE            FSL_FEATURE_FLASH_PFLASH_BLOCK_SECTOR_SIZE
367 #define FLASH0_FEATURE_PFLASH_BLOCK_WRITE_UNIT_SIZE        FSL_FEATURE_FLASH_PFLASH_BLOCK_WRITE_UNIT_SIZE
368 #define FLASH0_FEATURE_PFLASH_SECTOR_CMD_ADDRESS_ALIGMENT  FSL_FEATURE_FLASH_PFLASH_SECTOR_CMD_ADDRESS_ALIGMENT
369 #define FLASH0_FEATURE_PFLASH_SECTION_CMD_ADDRESS_ALIGMENT FSL_FEATURE_FLASH_PFLASH_SECTION_CMD_ADDRESS_ALIGMENT
370 #define FLASH0_FEATURE_PFLASH_PROTECTION_REGION_COUNT      FSL_FEATURE_FLASH_PFLASH_PROTECTION_REGION_COUNT
371 #if defined(FSL_FEATURE_FLASH_HAS_MULTIPLE_FLASH) || defined(FSL_FEATURE_FLASH_PFLASH_1_START_ADDRESS)
372 #define FLASH1_FEATURE_PFLASH_START_ADDRESS                FSL_FEATURE_FLASH_PFLASH_1_START_ADDRESS
373 #define FLASH1_FEATURE_PFLASH_BLOCK_COUNT                  FSL_FEATURE_FLASH_PFLASH_1_BLOCK_COUNT
374 #define FLASH1_FEATURE_PFLASH_BLOCK_SIZE                   FSL_FEATURE_FLASH_PFLASH_1_BLOCK_SIZE
375 #define FLASH1_FEATURE_PFLASH_BLOCK_SECTOR_SIZE            FSL_FEATURE_FLASH_PFLASH_1_BLOCK_SECTOR_SIZE
376 #define FLASH1_FEATURE_PFLASH_BLOCK_WRITE_UNIT_SIZE        FSL_FEATURE_FLASH_PFLASH_1_BLOCK_WRITE_UNIT_SIZE
377 #define FLASH1_FEATURE_PFLASH_SECTOR_CMD_ADDRESS_ALIGMENT  FSL_FEATURE_FLASH_PFLASH_SECTOR_CMD_ADDRESS_ALIGMENT
378 #define FLASH1_FEATURE_PFLASH_SECTION_CMD_ADDRESS_ALIGMENT FSL_FEATURE_FLASH_PFLASH_SECTION_CMD_ADDRESS_ALIGMENT
379 #define FLASH1_FEATURE_PFLASH_PROTECTION_REGION_COUNT      FSL_FEATURE_FLASH_PFLASH_PROTECTION_REGION_COUNT
380 #else /* undfine FSL_FEATURE_FLASH_HAS_MULTIPLE_FLASH or FSL_FEATURE_FLASH_PFLASH_1_START_ADDRESS */
381 #define FLASH1_FEATURE_PFLASH_START_ADDRESS                0
382 #define FLASH1_FEATURE_PFLASH_BLOCK_COUNT                  0
383 #define FLASH1_FEATURE_PFLASH_BLOCK_SIZE                   0
384 #define FLASH1_FEATURE_PFLASH_BLOCK_SECTOR_SIZE            0
385 #define FLASH1_FEATURE_PFLASH_BLOCK_WRITE_UNIT_SIZE        0
386 #define FLASH1_FEATURE_PFLASH_SECTOR_CMD_ADDRESS_ALIGMENT  0
387 #define FLASH1_FEATURE_PFLASH_SECTION_CMD_ADDRESS_ALIGMENT 0
388 #define FLASH1_FEATURE_PFLASH_PROTECTION_REGION_COUNT      0
389 #endif
390 #endif
391 
392 #if FLASH0_FEATURE_PFLASH_PROTECTION_REGION_COUNT > FLASH1_FEATURE_PFLASH_PROTECTION_REGION_COUNT
393 #define MAX_FLASH_PROT_REGION_COUNT FLASH0_FEATURE_PFLASH_PROTECTION_REGION_COUNT
394 #else
395 #define MAX_FLASH_PROT_REGION_COUNT FLASH1_FEATURE_PFLASH_PROTECTION_REGION_COUNT
396 #endif
397 
398 /*! @} */
399 
400 #endif /* FSL_FTFX_ADAPTER_H */
401