1 /**
2   ******************************************************************************
3   * @file    stm32u5xx_hal_gtzc.h
4   * @author  MCD Application Team
5   * @brief   Header file of GTZC HAL module.
6   ******************************************************************************
7   * @attention
8   *
9   * Copyright (c) 2021 STMicroelectronics.
10   * All rights reserved.
11   *
12   * This software component is licensed by ST under BSD 3-Clause license,
13   * the "License"; You may not use this file except in compliance with the
14   * License. You may obtain a copy of the License at:
15   *                        opensource.org/licenses/BSD-3-Clause
16   *
17   ******************************************************************************
18   */
19 /* Define to prevent recursive inclusion -------------------------------------*/
20 #ifndef STM32U5xx_HAL_GTZC_H
21 #define STM32U5xx_HAL_GTZC_H
22 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
27 /* Includes ------------------------------------------------------------------*/
28 #include "stm32u5xx_hal_def.h"
29 
30 /** @addtogroup STM32U5xx_HAL_Driver
31   * @{
32   */
33 
34 /** @addtogroup GTZC
35   * @{
36   */
37 
38 /* Exported types ------------------------------------------------------------*/
39 
40 /** @defgroup GTZC_Exported_Types GTZC Exported Types
41   * @{
42   */
43 
44 /*!< Values needed for MPCBB_Attribute_ConfigTypeDef structure sizing */
45 #define GTZC_MCPBB_NB_VCTR_REG_MAX      (32U)
46 #define GTZC_MCPBB_NB_LCK_VCTR_REG_MAX  (1U)
47 typedef struct
48 {
49   uint32_t MPCBB_SecConfig_array[GTZC_MCPBB_NB_VCTR_REG_MAX];  /*!< Each element specifies secure access mode for
50                                                                     a super-block. Each bit corresponds to a block
51                                                                     inside the super-block. 0 means non-secure,
52                                                                     1 means secure */
53   uint32_t MPCBB_PrivConfig_array[GTZC_MCPBB_NB_VCTR_REG_MAX]; /*!< Each element specifies privilege access mode for
54                                                                     a super-block. Each bit corresponds to a block
55                                                                     inside the super-block. 0 means non-privilege,
56                                                                     1 means privilege */
57   uint32_t MPCBB_LockConfig_array[GTZC_MCPBB_NB_LCK_VCTR_REG_MAX]; /*!< Each bit specifies the lock configuration of
58                                                                         a super-block (32 blocks). 0 means unlocked,
59                                                                         1 means locked */
60 } MPCBB_Attribute_ConfigTypeDef;
61 
62 typedef struct
63 {
64   uint32_t SecureRWIllegalMode; /*!< Secure read/write illegal access
65                                      field. It can be a value of @ref GTZC_MPCBB_SecureRWIllegalMode */
66   uint32_t InvertSecureState;   /*!< Default security state field (can be inverted or not).
67                                      It can be a value of @ref GTZC_MPCBB_InvertSecureState */
68   MPCBB_Attribute_ConfigTypeDef AttributeConfig; /*!< MPCBB attribute configuration sub-structure */
69 } MPCBB_ConfigTypeDef;
70 
71 typedef struct
72 {
73   uint32_t AreaId;     /*!< Area identifier field. It can be a value of @ref
74                             GTZC_MPCWM_AreaId */
75   uint32_t Offset;     /*!< Offset of the watermark area, starting from the selected
76                             memory base address. It must aligned on 128KB for FMC
77                             and OCTOSPI memories, and on 32-byte for BKPSRAM */
78   uint32_t Length;     /*!< Length of the watermark area, starting from the selected
79                             Offset. It must aligned on 128KB for FMC and OCTOSPI
80                             memories, and on 32-byte for BKPSRAM */
81   uint32_t Attribute;  /*!< Attributes of the watermark area. It can be a value
82                             of @ref GTZC_MPCWM_Attribute */
83   uint32_t Lock;       /*!< Lock of the watermark area. It can be a value
84                             of @ref GTZC_MPCWM_Lock */
85   uint32_t AreaStatus; /*!< Status of the watermark area. It can be set to
86                             ENABLE or DISABLE */
87 } MPCWM_ConfigTypeDef;
88 
89 /**
90   * @}
91   */
92 
93 /* Private constants ---------------------------------------------------------*/
94 
95 /** @defgroup GTZC_Private_Constants GTZC Private Constants
96   * @{
97   */
98 
99 /** @defgroup GTZC_Private_PeriphId_composition GTZC Peripheral identifier composition
100   * @{
101   */
102 
103 /* composition definition for Peripheral identifier parameter (PeriphId) used in
104  * HAL_GTZC_TZSC_ConfigPeriphAttributes() and HAL_GTZC_TZSC_GetConfigPeriphAttributes()
105  * functions and also in all HAL_GTZC_TZIC relative functions.
106  * Bitmap Definition
107  *   bits[31:28] Field "register". Define the register index a peripheral belongs to.
108  *               Each bit is dedicated to a single register.
109  *   bit[5]      Field "all peripherals". If this bit is set then the PeriphId targets
110  *               all peripherals within all registers.
111  *   bits[4:0]   Field "bit position". Define the bit position within the
112  *               register dedicated to the peripheral, value from 0 to 31.
113  */
114 #define GTZC_PERIPH_REG_SHIFT     (28U)
115 #define GTZC_PERIPH_REG           (0xF0000000U)
116 #define GTZC1_PERIPH_REG1         (0x00000000U)
117 #define GTZC1_PERIPH_REG2         (0x10000000U)
118 #define GTZC1_PERIPH_REG3         (0x20000000U)
119 #define GTZC1_PERIPH_REG4         (0x30000000U)
120 #define GTZC2_PERIPH_REG1         (0x40000000U)
121 #define GTZC2_PERIPH_REG2         (0x50000000U)
122 #define GTZC_PERIPH_BIT_POSITION  (0x0000001FU)
123 
124 /**
125   * @}
126   */
127 
128 /** @defgroup GTZC_Private_Attributes_Msk GTZC Attributes Masks
129   * @{
130   */
131 #define GTZC_ATTR_SEC_MASK         0x100U
132 #define GTZC_ATTR_PRIV_MASK        0x200U
133 
134 /**
135   * @}
136   */
137 
138 /**
139   * @}
140   */
141 
142 /* Exported constants --------------------------------------------------------*/
143 
144 /** @defgroup GTZC_Exported_Constants GTZC Exported Constants
145   * @{
146   */
147 
148 /** @defgroup GTZC_MPCBB_SecureRWIllegalMode GTZC MPCBB SRWILADIS values
149   * @{
150   */
151 
152 #define GTZC_MPCBB_SRWILADIS_ENABLE  (0U)
153 #define GTZC_MPCBB_SRWILADIS_DISABLE (GTZC_MPCBB_CR_SRWILADIS_Msk)
154 
155 /**
156   * @}
157   */
158 
159 /** @defgroup GTZC_MPCBB_InvertSecureState GTZC MPCBB INVSECSTATE values
160   * @{
161   */
162 
163 #define GTZC_MPCBB_INVSECSTATE_NOT_INVERTED  (0U)
164 #define GTZC_MPCBB_INVSECSTATE_INVERTED      (GTZC_MPCBB_CR_INVSECSTATE_Msk)
165 
166 /**
167   * @}
168   */
169 
170 /** @defgroup GTZC_MPCWM_AreaId GTZC MPCWM area identifier values
171   * @{
172   */
173 
174 #define GTZC_TZSC_MPCWM_ID1  (0U)
175 #define GTZC_TZSC_MPCWM_ID2  (1U)
176 
177 /**
178   * @}
179   */
180 
181 /** @defgroup GTZC_TZSC_TZIC_PeriphId GTZC TZSC and TZIC Peripheral identifier values
182   * @{
183   */
184 /* GTZC1 */
185 #define GTZC_PERIPH_TIM2          (GTZC1_PERIPH_REG1 | GTZC_CFGR1_TIM2_Pos)
186 #define GTZC_PERIPH_TIM3          (GTZC1_PERIPH_REG1 | GTZC_CFGR1_TIM3_Pos)
187 #define GTZC_PERIPH_TIM4          (GTZC1_PERIPH_REG1 | GTZC_CFGR1_TIM4_Pos)
188 #define GTZC_PERIPH_TIM5          (GTZC1_PERIPH_REG1 | GTZC_CFGR1_TIM5_Pos)
189 #define GTZC_PERIPH_TIM6          (GTZC1_PERIPH_REG1 | GTZC_CFGR1_TIM6_Pos)
190 #define GTZC_PERIPH_TIM7          (GTZC1_PERIPH_REG1 | GTZC_CFGR1_TIM7_Pos)
191 #define GTZC_PERIPH_WWDG          (GTZC1_PERIPH_REG1 | GTZC_CFGR1_WWDG_Pos)
192 #define GTZC_PERIPH_IWDG          (GTZC1_PERIPH_REG1 | GTZC_CFGR1_IWDG_Pos)
193 #define GTZC_PERIPH_SPI2          (GTZC1_PERIPH_REG1 | GTZC_CFGR1_SPI2_Pos)
194 #define GTZC_PERIPH_USART2        (GTZC1_PERIPH_REG1 | GTZC_CFGR1_USART2_Pos)
195 #define GTZC_PERIPH_USART3        (GTZC1_PERIPH_REG1 | GTZC_CFGR1_USART3_Pos)
196 #define GTZC_PERIPH_UART4         (GTZC1_PERIPH_REG1 | GTZC_CFGR1_UART4_Pos)
197 #define GTZC_PERIPH_UART5         (GTZC1_PERIPH_REG1 | GTZC_CFGR1_UART5_Pos)
198 #define GTZC_PERIPH_I2C1          (GTZC1_PERIPH_REG1 | GTZC_CFGR1_I2C1_Pos)
199 #define GTZC_PERIPH_I2C2          (GTZC1_PERIPH_REG1 | GTZC_CFGR1_I2C2_Pos)
200 #define GTZC_PERIPH_CRS           (GTZC1_PERIPH_REG1 | GTZC_CFGR1_CRS_Pos)
201 #define GTZC_PERIPH_I2C4          (GTZC1_PERIPH_REG1 | GTZC_CFGR1_I2C4_Pos)
202 #define GTZC_PERIPH_LPTIM2        (GTZC1_PERIPH_REG1 | GTZC_CFGR1_LPTIM2_Pos)
203 #define GTZC_PERIPH_FDCAN1        (GTZC1_PERIPH_REG1 | GTZC_CFGR1_FDCAN1_Pos)
204 #define GTZC_PERIPH_UCPD1         (GTZC1_PERIPH_REG1 | GTZC_CFGR1_UCPD1_Pos)
205 #define GTZC_PERIPH_TIM1          (GTZC1_PERIPH_REG2 | GTZC_CFGR2_TIM1_Pos)
206 #define GTZC_PERIPH_SPI1          (GTZC1_PERIPH_REG2 | GTZC_CFGR2_SPI1_Pos)
207 #define GTZC_PERIPH_TIM8          (GTZC1_PERIPH_REG2 | GTZC_CFGR2_TIM8_Pos)
208 #define GTZC_PERIPH_USART1        (GTZC1_PERIPH_REG2 | GTZC_CFGR2_USART1_Pos)
209 #define GTZC_PERIPH_TIM15         (GTZC1_PERIPH_REG2 | GTZC_CFGR2_TIM15_Pos)
210 #define GTZC_PERIPH_TIM16         (GTZC1_PERIPH_REG2 | GTZC_CFGR2_TIM16_Pos)
211 #define GTZC_PERIPH_TIM17         (GTZC1_PERIPH_REG2 | GTZC_CFGR2_TIM17_Pos)
212 #define GTZC_PERIPH_SAI1          (GTZC1_PERIPH_REG2 | GTZC_CFGR2_SAI1_Pos)
213 #define GTZC_PERIPH_SAI2          (GTZC1_PERIPH_REG2 | GTZC_CFGR2_SAI2_Pos)
214 #define GTZC_PERIPH_MDF1          (GTZC1_PERIPH_REG3 | GTZC_CFGR3_MDF1_Pos)
215 #define GTZC_PERIPH_CORDIC        (GTZC1_PERIPH_REG3 | GTZC_CFGR3_CORDIC_Pos)
216 #define GTZC_PERIPH_FMAC          (GTZC1_PERIPH_REG3 | GTZC_CFGR3_FMAC_Pos)
217 #define GTZC_PERIPH_CRC           (GTZC1_PERIPH_REG3 | GTZC_CFGR3_CRC_Pos)
218 #define GTZC_PERIPH_TSC           (GTZC1_PERIPH_REG3 | GTZC_CFGR3_TSC_Pos)
219 #define GTZC_PERIPH_DMA2D         (GTZC1_PERIPH_REG3 | GTZC_CFGR3_DMA2D_Pos)
220 #define GTZC_PERIPH_ICACHE_REG    (GTZC1_PERIPH_REG3 | GTZC_CFGR3_ICACHE_REG_Pos)
221 #define GTZC_PERIPH_DCACHE1_REG   (GTZC1_PERIPH_REG3 | GTZC_CFGR3_DCACHE1_REG_Pos)
222 #define GTZC_PERIPH_ADC12         (GTZC1_PERIPH_REG3 | GTZC_CFGR3_ADC12_Pos)
223 #define GTZC_PERIPH_DCMI          (GTZC1_PERIPH_REG3 | GTZC_CFGR3_DCMI_Pos)
224 #define GTZC_PERIPH_OTG           (GTZC1_PERIPH_REG3 | GTZC_CFGR3_OTG_Pos)
225 #define GTZC_PERIPH_AES           (GTZC1_PERIPH_REG3 | GTZC_CFGR3_AES_Pos)
226 #define GTZC_PERIPH_HASH          (GTZC1_PERIPH_REG3 | GTZC_CFGR3_HASH_Pos)
227 #define GTZC_PERIPH_RNG           (GTZC1_PERIPH_REG3 | GTZC_CFGR3_RNG_Pos)
228 #define GTZC_PERIPH_PKA           (GTZC1_PERIPH_REG3 | GTZC_CFGR3_PKA_Pos)
229 #define GTZC_PERIPH_SAES          (GTZC1_PERIPH_REG3 | GTZC_CFGR3_SAES_Pos)
230 #define GTZC_PERIPH_OCTOSPIM      (GTZC1_PERIPH_REG3 | GTZC_CFGR3_OCTOSPIM_Pos)
231 #define GTZC_PERIPH_SDMMC1        (GTZC1_PERIPH_REG3 | GTZC_CFGR3_SDMMC1_Pos)
232 #define GTZC_PERIPH_SDMMC2        (GTZC1_PERIPH_REG3 | GTZC_CFGR3_SDMMC2_Pos)
233 #define GTZC_PERIPH_FSMC_REG      (GTZC1_PERIPH_REG3 | GTZC_CFGR3_FSMC_REG_Pos)
234 #define GTZC_PERIPH_OCTOSPI1_REG  (GTZC1_PERIPH_REG3 | GTZC_CFGR3_OCTOSPI1_REG_Pos)
235 #define GTZC_PERIPH_OCTOSPI2_REG  (GTZC1_PERIPH_REG3 | GTZC_CFGR3_OCTOSPI2_REG_Pos)
236 #define GTZC_PERIPH_RAMCFG        (GTZC1_PERIPH_REG3 | GTZC_CFGR3_RAMCFG_Pos)
237 #define GTZC_PERIPH_GPDMA1        (GTZC1_PERIPH_REG4 | GTZC_CFGR4_GPDMA1_Pos)
238 #define GTZC_PERIPH_FLASH_REG     (GTZC1_PERIPH_REG4 | GTZC_CFGR4_FLASH_REG_Pos)
239 #define GTZC_PERIPH_FLASH         (GTZC1_PERIPH_REG4 | GTZC_CFGR4_FLASH_Pos)
240 #define GTZC_PERIPH_OTFDEC2       (GTZC1_PERIPH_REG4 | GTZC_CFGR4_OTFDEC2_Pos)
241 #define GTZC_PERIPH_OTFDEC1       (GTZC1_PERIPH_REG4 | GTZC_CFGR4_OTFDEC1_Pos)
242 #define GTZC_PERIPH_TZSC1         (GTZC1_PERIPH_REG4 | GTZC_CFGR4_TZSC1_Pos)
243 #define GTZC_PERIPH_TZIC1         (GTZC1_PERIPH_REG4 | GTZC_CFGR4_TZIC1_Pos)
244 #define GTZC_PERIPH_OCTOSPI1_MEM  (GTZC1_PERIPH_REG4 | GTZC_CFGR4_OCTOSPI1_MEM_Pos)
245 #define GTZC_PERIPH_FSMC_MEM      (GTZC1_PERIPH_REG4 | GTZC_CFGR4_FSMC_MEM_Pos)
246 #define GTZC_PERIPH_BKPSRAM       (GTZC1_PERIPH_REG4 | GTZC_CFGR4_BKPSRAM_Pos)
247 #define GTZC_PERIPH_OCTOSPI2_MEM  (GTZC1_PERIPH_REG4 | GTZC_CFGR4_OCTOSPI2_MEM_Pos)
248 #define GTZC_PERIPH_SRAM1         (GTZC1_PERIPH_REG4 | GTZC_CFGR4_SRAM1_Pos)
249 #define GTZC_PERIPH_MPCBB1_REG    (GTZC1_PERIPH_REG4 | GTZC_CFGR4_MPCBB1_REG_Pos)
250 #define GTZC_PERIPH_SRAM2         (GTZC1_PERIPH_REG4 | GTZC_CFGR4_SRAM2_Pos)
251 #define GTZC_PERIPH_MPCBB2_REG    (GTZC1_PERIPH_REG4 | GTZC_CFGR4_MPCBB2_REG_Pos)
252 #define GTZC_PERIPH_SRAM3         (GTZC1_PERIPH_REG4 | GTZC_CFGR4_SRAM3_Pos)
253 #define GTZC_PERIPH_MPCBB3_REG    (GTZC1_PERIPH_REG4 | GTZC_CFGR4_MPCBB3_REG_Pos)
254 
255 /* GTZC2 */
256 #define GTZC_PERIPH_SPI3          (GTZC2_PERIPH_REG1 | GTZC_CFGR1_SPI3_Pos)
257 #define GTZC_PERIPH_LPUART1       (GTZC2_PERIPH_REG1 | GTZC_CFGR1_LPUART1_Pos)
258 #define GTZC_PERIPH_I2C3          (GTZC2_PERIPH_REG1 | GTZC_CFGR1_I2C3_Pos)
259 #define GTZC_PERIPH_LPTIM1        (GTZC2_PERIPH_REG1 | GTZC_CFGR1_LPTIM1_Pos)
260 #define GTZC_PERIPH_LPTIM3        (GTZC2_PERIPH_REG1 | GTZC_CFGR1_LPTIM3_Pos)
261 #define GTZC_PERIPH_LPTIM4        (GTZC2_PERIPH_REG1 | GTZC_CFGR1_LPTIM4_Pos)
262 #define GTZC_PERIPH_OPAMP         (GTZC2_PERIPH_REG1 | GTZC_CFGR1_OPAMP_Pos)
263 #define GTZC_PERIPH_COMP          (GTZC2_PERIPH_REG1 | GTZC_CFGR1_COMP_Pos)
264 #define GTZC_PERIPH_ADC4          (GTZC2_PERIPH_REG1 | GTZC_CFGR1_ADC4_Pos)
265 #define GTZC_PERIPH_VREFBUF       (GTZC2_PERIPH_REG1 | GTZC_CFGR1_VREFBUF_Pos)
266 #define GTZC_PERIPH_DAC1          (GTZC2_PERIPH_REG1 | GTZC_CFGR1_DAC1_Pos)
267 #define GTZC_PERIPH_ADF1          (GTZC2_PERIPH_REG1 | GTZC_CFGR1_ADF1_Pos)
268 #define GTZC_PERIPH_SYSCFG        (GTZC2_PERIPH_REG2 | GTZC_CFGR2_SYSCFG_Pos)
269 #define GTZC_PERIPH_RTC           (GTZC2_PERIPH_REG2 | GTZC_CFGR2_RTC_Pos)
270 #define GTZC_PERIPH_TAMP          (GTZC2_PERIPH_REG2 | GTZC_CFGR2_TAMP_Pos)
271 #define GTZC_PERIPH_PWR           (GTZC2_PERIPH_REG2 | GTZC_CFGR2_PWR_Pos)
272 #define GTZC_PERIPH_RCC           (GTZC2_PERIPH_REG2 | GTZC_CFGR2_RCC_Pos)
273 #define GTZC_PERIPH_LPDMA1        (GTZC2_PERIPH_REG2 | GTZC_CFGR2_LPDMA1_Pos)
274 #define GTZC_PERIPH_EXTI          (GTZC2_PERIPH_REG2 | GTZC_CFGR2_EXTI_Pos)
275 #define GTZC_PERIPH_TZSC2         (GTZC2_PERIPH_REG2 | GTZC_CFGR2_TZSC2_Pos)
276 #define GTZC_PERIPH_TZIC2         (GTZC2_PERIPH_REG2 | GTZC_CFGR2_TZIC2_Pos)
277 #define GTZC_PERIPH_SRAM4         (GTZC2_PERIPH_REG2 | GTZC_CFGR2_SRAM4_Pos)
278 #define GTZC_PERIPH_MPCBB4_REG    (GTZC2_PERIPH_REG2 | GTZC_CFGR2_MPCBB4_REG_Pos)
279 
280 #define GTZC_PERIPH_ALL           (0x00000020U)
281 
282 /* Note that two maximum values are also defined here:
283  * - max number of securable AHB/APB peripherals or masters
284  *   (used in TZSC sub-block)
285  * - max number of securable and TrustZone-aware AHB/APB peripherals or masters
286  *   (used in TZIC sub-block)
287  */
288 #define GTZC_TZSC_PERIPH_NUMBER   (HAL_GTZC_TZSC_GET_ARRAY_INDEX(GTZC_PERIPH_ADF1 + 1U))
289 #define GTZC_TZIC_PERIPH_NUMBER   (HAL_GTZC_TZIC_GET_ARRAY_INDEX(GTZC_PERIPH_MPCBB4_REG + 1U))
290 
291 /**
292   * @}
293   */
294 
295 /** @defgroup GTZC_TZSC_PeriphAttributes GTZC TZSC peripheral attribute values
296   * @{
297   */
298 
299 /* user-oriented definitions for attribute parameter (PeriphAttributes) used in
300  * HAL_GTZC_TZSC_ConfigPeriphAttributes() and HAL_GTZC_TZSC_GetConfigPeriphAttributes()
301  * functions
302  */
303 #define GTZC_TZSC_PERIPH_SEC    (GTZC_ATTR_SEC_MASK | 0x00000001U)  /*!< Secure attribute        */
304 #define GTZC_TZSC_PERIPH_NSEC   (GTZC_ATTR_SEC_MASK | 0x00000000U)  /*!< Non-secure attribute    */
305 #define GTZC_TZSC_PERIPH_PRIV   (GTZC_ATTR_PRIV_MASK | 0x00000002U) /*!< Privilege attribute     */
306 #define GTZC_TZSC_PERIPH_NPRIV  (GTZC_ATTR_PRIV_MASK | 0x00000000U) /*!< Non-privilege attribute */
307 
308 /**
309   * @}
310   */
311 
312 /** @defgroup GTZC_TZSC_Lock GTZC TZSC lock values
313   * @{
314   */
315 
316 /* user-oriented definitions for HAL_GTZC_TZSC_GetLock() returned value */
317 #define GTZC_TZSC_LOCK_OFF  (0U)
318 #define GTZC_TZSC_LOCK_ON   GTZC_TZSC_CR_LCK_Msk
319 
320 /**
321   * @}
322   */
323 
324 /** @defgroup GTZC_MPCWM_Group GTZC MPCWM values
325   * @{
326   */
327 
328 /* user-oriented definitions for TZSC_MPCWM */
329 #define GTZC_TZSC_MPCWM_GRANULARITY_1    0x00020000U /* OCTOSPI & FMC granularity: 128 kbytes */
330 #define GTZC_TZSC_MPCWM_GRANULARITY_2    0x00000020U /* BKPSRAM granularity: 32 bytes         */
331 
332 /**
333   * @}
334   */
335 
336 /** @defgroup GTZC_MPCWM_Lock GTZC MPCWM Lock values
337   * @{
338   */
339 
340 /* user-oriented definitions for TZSC_MPCWM */
341 #define GTZC_TZSC_MPCWM_LOCK_OFF  (0U)
342 #define GTZC_TZSC_MPCWM_LOCK_ON   GTZC_TZSC_MPCWM_CFGR_SRLOCK_Msk
343 
344 /**
345   * @}
346   */
347 
348 /** @defgroup GTZC_MPCWM_Attribute GTZC MPCWM Attribute values
349   * @{
350   */
351 
352 /* user-oriented definitions for TZSC_MPCWM */
353 #define GTZC_TZSC_MPCWM_REGION_NSEC  (0U)
354 #define GTZC_TZSC_MPCWM_REGION_SEC   (1U)
355 #define GTZC_TZSC_MPCWM_REGION_NPRIV (0U)
356 #define GTZC_TZSC_MPCWM_REGION_PRIV  (2U)
357 
358 /**
359   * @}
360   */
361 
362 /** @defgroup GTZC_MPCBB_Group GTZC MPCBB values
363   * @{
364   */
365 
366 /* user-oriented definitions for MPCBB */
367 #define GTZC_MPCBB_BLOCK_SIZE           0x200U                        /* 512 Bytes */
368 #define GTZC_MPCBB_SUPERBLOCK_SIZE      (GTZC_MPCBB_BLOCK_SIZE * 32U) /* 16 KBytes */
369 #define GTZC_MCPBB_SUPERBLOCK_UNLOCKED  (0U)
370 #define GTZC_MCPBB_SUPERBLOCK_LOCKED    (1U)
371 
372 #define GTZC_MCPBB_BLOCK_NSEC           (GTZC_ATTR_SEC_MASK  | 0U)
373 #define GTZC_MCPBB_BLOCK_SEC            (GTZC_ATTR_SEC_MASK  | 1U)
374 #define GTZC_MCPBB_BLOCK_NPRIV          (GTZC_ATTR_PRIV_MASK | 0U)
375 #define GTZC_MCPBB_BLOCK_PRIV           (GTZC_ATTR_PRIV_MASK | 2U)
376 
377 /* user-oriented definitions for HAL_GTZC_MPCBB_GetLock() returned value */
378 #define GTZC_MCPBB_LOCK_OFF  (0U)
379 #define GTZC_MCPBB_LOCK_ON   (1U)
380 
381 /**
382   * @}
383   */
384 
385 /** @defgroup GTZC_TZIC_Flag GTZC TZIC flag values
386   * @{
387   */
388 
389 /* user-oriented definitions for HAL_GTZC_TZIC_GetFlag() flag parameter */
390 #define GTZC_TZIC_NO_ILA_EVENT       (0U)
391 #define GTZC_TZIC_ILA_EVENT_PENDING  (1U)
392 
393 /**
394   * @}
395   */
396 
397 /**
398   * @}
399   */
400 
401 /* Private macros ------------------------------------------------------------*/
402 
403 /** @defgroup GTZC_Private_Macros GTZC Private Macros
404   * @{
405   */
406 
407 /* retrieve information to access register for a specific PeriphId */
408 #define GTZC_GET_REG_INDEX(periph_id)\
409   (((periph_id) & GTZC_PERIPH_REG) >> GTZC_PERIPH_REG_SHIFT)
410 #define GTZC_GET_REG_INDEX_IN_INSTANCE(periph_id)\
411   ((((periph_id) & GTZC_PERIPH_REG) <= GTZC1_PERIPH_REG4) ? \
412    (((periph_id) & GTZC_PERIPH_REG) >> GTZC_PERIPH_REG_SHIFT) : \
413    ((((periph_id) & GTZC_PERIPH_REG) >> GTZC_PERIPH_REG_SHIFT) - 4U))
414 #define GTZC_GET_PERIPH_POS(periph_id)     ((periph_id) & GTZC_PERIPH_BIT_POSITION)
415 
416 #define IS_GTZC_BASE_ADDRESS(mem, address)\
417   ( ( (uint32_t)(address) == (uint32_t)GTZC_BASE_ADDRESS_NS(mem) ) || \
418     ( (uint32_t)(address) == (uint32_t)GTZC_BASE_ADDRESS_S(mem) ) )
419 
420 #define GTZC_MEM_SIZE(mem)\
421   ( mem ## _SIZE )
422 
423 #define GTZC_BASE_ADDRESS_S(mem)\
424   ( mem ## _BASE_S )
425 
426 #define GTZC_BASE_ADDRESS_NS(mem)\
427   ( mem ## _BASE_NS )
428 
429 /**
430   * @}
431   */
432 
433 /* Exported macros -----------------------------------------------------------*/
434 
435 /** @defgroup GTZC_Exported_Macros GTZC Exported Macros
436   * @{
437   */
438 
439 /* user-oriented macro to get array index of a specific PeriphId
440   * in case of GTZC_PERIPH_ALL usage in the two following functions:
441   * HAL_GTZC_TZSC_ConfigPeriphAttributes() and HAL_GTZC_TZSC_GetConfigPeriphAttributes()
442   */
443 #define HAL_GTZC_TZSC_GET_ARRAY_INDEX(periph_id) \
444   (uint32_t)((HAL_GTZC_TZSC_GET_INSTANCE(periph_id) == GTZC_TZSC1)? \
445              ((GTZC_GET_REG_INDEX(periph_id) * 32U) + GTZC_GET_PERIPH_POS(periph_id)) : \
446              (((GTZC_GET_REG_INDEX(periph_id) - 1U) * 32U) + GTZC_GET_PERIPH_POS(periph_id) ))
447 
448 #define HAL_GTZC_TZIC_GET_ARRAY_INDEX(periph_id) \
449   ( (GTZC_GET_REG_INDEX((periph_id)) * 32U) + GTZC_GET_PERIPH_POS((periph_id)) )
450 
451 /* user-oriented macro to get TZSC instance of a specific PeriphId */
452 #define HAL_GTZC_TZSC_GET_INSTANCE(periph_id) \
453   ((GTZC_GET_REG_INDEX(periph_id) <= (GTZC1_PERIPH_REG4 >> GTZC_PERIPH_REG_SHIFT))? \
454    GTZC_TZSC1 : GTZC_TZSC2)
455 
456 /* user-oriented macro to get TZIC instance of a specific PeriphId */
457 #define HAL_GTZC_TZIC_GET_INSTANCE(periph_id) \
458   ((GTZC_GET_REG_INDEX(periph_id) <= (GTZC1_PERIPH_REG4>> GTZC_PERIPH_REG_SHIFT))? \
459    GTZC_TZIC1 : GTZC_TZIC2)
460 
461 /**
462   * @}
463   */
464 
465 /* Exported functions --------------------------------------------------------*/
466 
467 /** @addtogroup GTZC_Exported_Functions
468   * @{
469   */
470 
471 /** @addtogroup GTZC_Exported_Functions_Group1
472   * @brief    TZSC Initialization and Configuration functions
473   * @{
474   */
475 
476 HAL_StatusTypeDef HAL_GTZC_TZSC_ConfigPeriphAttributes(uint32_t PeriphId,
477                                                        uint32_t PeriphAttributes);
478 HAL_StatusTypeDef HAL_GTZC_TZSC_GetConfigPeriphAttributes(uint32_t PeriphId,
479                                                           uint32_t *PeriphAttributes);
480 
481 /**
482   * @}
483   */
484 
485 #if defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
486 
487 /** @addtogroup GTZC_Exported_Functions_Group2
488   * @brief    MPCWM Initialization and Configuration functions
489   * @{
490   */
491 
492 HAL_StatusTypeDef HAL_GTZC_TZSC_MPCWM_ConfigMemAttributes(uint32_t MemBaseAddress,
493                                                           MPCWM_ConfigTypeDef *pMPCWM_Desc);
494 HAL_StatusTypeDef HAL_GTZC_TZSC_MPCWM_GetConfigMemAttributes(uint32_t MemBaseAddress,
495                                                              MPCWM_ConfigTypeDef *pMPCWM_Desc);
496 /**
497   * @}
498   */
499 
500 /** @addtogroup GTZC_Exported_Functions_Group3
501   * @brief    TZSC and TZSC-MPCWM Lock functions
502   * @{
503   */
504 
505 void     HAL_GTZC_TZSC_Lock(GTZC_TZSC_TypeDef *TZSC_Instance);
506 uint32_t HAL_GTZC_TZSC_GetLock(GTZC_TZSC_TypeDef *TZSC_Instance);
507 
508 /**
509   * @}
510   */
511 #endif /* defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */
512 /** @addtogroup GTZC_Exported_Functions_Group4
513   * @brief    MPCBB Initialization and Configuration functions
514   * @{
515   */
516 
517 HAL_StatusTypeDef HAL_GTZC_MPCBB_ConfigMem(uint32_t MemBaseAddress,
518                                            MPCBB_ConfigTypeDef *pMPCBB_desc);
519 HAL_StatusTypeDef HAL_GTZC_MPCBB_GetConfigMem(uint32_t MemBaseAddress,
520                                               MPCBB_ConfigTypeDef *pMPCBB_desc);
521 HAL_StatusTypeDef HAL_GTZC_MPCBB_ConfigMemAttributes(uint32_t MemAddress,
522                                                      uint32_t NbBlocks,
523                                                      uint32_t *pMemAttributes);
524 HAL_StatusTypeDef HAL_GTZC_MPCBB_GetConfigMemAttributes(uint32_t MemAddress,
525                                                         uint32_t NbBlocks,
526                                                         uint32_t *pMemAttributes);
527 
528 #if defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
529 HAL_StatusTypeDef HAL_GTZC_MPCBB_LockConfig(uint32_t MemAddress,
530                                             uint32_t NbSuperBlocks,
531                                             uint32_t *pLockAttributes);
532 HAL_StatusTypeDef HAL_GTZC_MPCBB_GetLockConfig(uint32_t MemAddress,
533                                                uint32_t NbSuperBlocks,
534                                                uint32_t *pLockAttributes);
535 HAL_StatusTypeDef HAL_GTZC_MPCBB_Lock(uint32_t MemBaseAddress);
536 HAL_StatusTypeDef HAL_GTZC_MPCBB_GetLock(uint32_t MemBaseAddress,
537                                          uint32_t *pLockState);
538 #endif /* defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */
539 
540 /**
541   * @}
542   */
543 
544 #if defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
545 
546 /** @addtogroup GTZC_Exported_Functions_Group5
547   * @brief    TZIC functions
548   * @{
549   */
550 
551 HAL_StatusTypeDef HAL_GTZC_TZIC_DisableIT(uint32_t PeriphId);
552 HAL_StatusTypeDef HAL_GTZC_TZIC_EnableIT(uint32_t PeriphId);
553 HAL_StatusTypeDef HAL_GTZC_TZIC_GetFlag(uint32_t PeriphId, uint32_t *pFlag);
554 HAL_StatusTypeDef HAL_GTZC_TZIC_ClearFlag(uint32_t PeriphId);
555 
556 /**
557   * @}
558   */
559 
560 /** @addtogroup GTZC_Exported_Functions_Group6
561   * @brief    IRQ related Functions
562   * @{
563   */
564 
565 void HAL_GTZC_IRQHandler(void);
566 void HAL_GTZC_TZIC_Callback(uint32_t PeriphId);
567 
568 /**
569   * @}
570   */
571 
572 #endif /* defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */
573 
574 /**
575   * @}
576   */
577 
578 /**
579   * @}
580   */
581 
582 /**
583   * @}
584   */
585 
586 #ifdef __cplusplus
587 }
588 #endif
589 
590 #endif /* STM32U5xx_HAL_GTZC_H */
591 
592