]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_MPU_M33F_NXP_LPC55S69_MCUXpresso/Projects/MCUXpresso/Secure/tzm_config.c
commit 9f316c246baafa15c542a5aea81a94f26e3d6507
[freertos] / FreeRTOS / Demo / CORTEX_MPU_M33F_NXP_LPC55S69_MCUXpresso / Projects / MCUXpresso / Secure / tzm_config.c
1 /*\r
2  * Copyright 2017-2019 NXP\r
3  * All rights reserved.\r
4  *\r
5  * SPDX-License-Identifier: BSD-3-Clause\r
6  */\r
7 \r
8 /***********************************************************************************************************************\r
9  * This file was generated by the MCUXpresso Config Tools. Any manual edits made to this file\r
10  * will be overwritten if the respective MCUXpresso Config Tools is used to update this file.\r
11  **********************************************************************************************************************/\r
12 \r
13 /* clang-format off */\r
14 /* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************\r
15 !!GlobalInfo\r
16 product: TEE v1.0\r
17 processor: LPC55S69\r
18 package_id: LPC55S69JBD100\r
19 mcu_data: ksdk2_0\r
20 processor_version: 0.2.6\r
21  * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/\r
22 /* clang-format on */\r
23 \r
24 #include "fsl_common.h"\r
25 #include "tzm_config.h"\r
26 \r
27 //********************************************************************\r
28 //*** Definitions ****************************************************\r
29 //********************************************************************\r
30 /* SAU region boundaries */\r
31 #define REGION_0_BASE 0\r
32 #define REGION_0_END 0x0FFFFFFFU\r
33 #define REGION_1_BASE 0x20000000U\r
34 #define REGION_1_END 0xFFFFFFFFU\r
35 #define REGION_2_BASE 0x1000FE00U\r
36 #define REGION_2_END 0x1000FFFFU\r
37 \r
38 /* clang-format off */\r
39 /* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************\r
40 tee:\r
41 - ahb:\r
42   - regions:\r
43     - relative_region: {memory: PROGRAM_FLASH, security: s_priv, start: '0x00000000', size: '0x00010000'}\r
44     - relative_region: {memory: PROGRAM_FLASH, security: ns_user, start: '0x00010000', size: '0x00090000'}\r
45     - relative_region: {memory: BootROM, security: ns_user, start: '0x00000000', size: '0x00020000'}\r
46     - relative_region: {memory: SRAMX, security: ns_user, start: '0x00000000', size: '0x00008000'}\r
47     - relative_region: {memory: SRAM0, security: s_priv, start: '0x00000000', size: '0x00008000'}\r
48     - relative_region: {memory: SRAM0, security: ns_user, start: '0x00008000', size: '0x00008000'}\r
49     - relative_region: {memory: SRAM1, security: ns_user, start: '0x00000000', size: '0x00010000'}\r
50     - relative_region: {memory: SRAM2, security: ns_user, start: '0x00000000', size: '0x00010000'}\r
51     - relative_region: {memory: SRAM3, security: ns_user, start: '0x00000000', size: '0x00010000'}\r
52     - relative_region: {memory: SRAM4, security: ns_user, start: '0x00000000', size: '0x00004000'}\r
53     - relative_region: {memory: USB_RAM, security: ns_user, start: '0x00000000', size: '0x00004000'}\r
54   - masters:\r
55     - ns_user: {id: HASH, id: MCM33C, id: MCM33S, id: PQ, id: SDIO, id: SDMA0, id: SDMA1, id: USBFSD, id: USBFSH}\r
56   - peripherals:\r
57     - ns_user: {id: ADC0, id: AHB_SECURE_CTRL, id: ANACTRL, id: CASPER, id: CRC_ENGINE, id: CTIMER0, id: CTIMER1, id: CTIMER2, id: CTIMER3, id: CTIMER4, id: DBGMAILBOX,\r
58       id: DMA0, id: DMA1, id: FLASH, id: FLEXCOMM1, id: FLEXCOMM2, id: FLEXCOMM3, id: FLEXCOMM4, id: FLEXCOMM5, id: FLEXCOMM6, id: FLEXCOMM7, id: GINT0, id: GINT1,\r
59       id: GPIO, id: HASHCRYPT, id: INPUTMUX, id: MAILBOX, id: MRT0, id: OSTIMER, id: PINT, id: PLU, id: PMC, id: POWERQUAD, id: PRINCE, id: PUF, id: RNG, id: RTC,\r
60       id: SCT0, id: SDIF, id: SECGPIO, id: SECPINT, id: SPI8, id: SYSCTL, id: USB0, id: USBFSH, id: USBHSD, id: USBHSH, id: USBPHY, id: UTICK0, id: WWDT}\r
61     - s_priv: {id: FLEXCOMM0, id: IOCON, id: SYSCON}\r
62   - interrupts:\r
63     - masking:\r
64       - Non-masked: {id: acmp_capt_irq, id: adc_irq, id: casper_irq, id: ctimer0_irq, id: ctimer1_irq, id: ctimer2_irq, id: ctimer3_irq, id: ctimer4_irq, id: flexcomm0_irq,\r
65         id: flexcomm1_irq, id: flexcomm2_irq, id: flexcomm3_irq, id: flexcomm4_irq, id: flexcomm5_irq, id: flexcomm6_irq, id: flexcomm7_irq, id: global_irq0, id: global_irq1,\r
66         id: lspi_hs_irq, id: mailbox_irq, id: mrt_irq, id: os_event_irq, id: pin_int4, id: pin_int5, id: pin_int6, id: pin_int7, id: pin_irq0, id: pin_irq1, id: pin_irq2,\r
67         id: pin_irq3, id: plu_irq, id: pq_irq, id: qddkey_irq, id: rtc_irq, id: sct_irq, id: sdio_irq, id: sdma0_irq, id: sdma1_irq, id: sec_hypervisor_call_irq,\r
68         id: sec_int0, id: sec_int1, id: sec_vio_irq, id: sha_irq, id: sys_irq, id: usb0_irq, id: usb0_needclk_irq, id: usb1_irq, id: usb1_needclk_irq, id: usb1_utmi_irq,\r
69         id: utick_irq}\r
70     - security:\r
71       - Secure: {id: acmp_capt_irq, id: adc_irq, id: casper_irq, id: ctimer0_irq, id: ctimer1_irq, id: ctimer2_irq, id: ctimer3_irq, id: ctimer4_irq, id: flexcomm0_irq,\r
72         id: flexcomm1_irq, id: flexcomm2_irq, id: flexcomm3_irq, id: flexcomm4_irq, id: flexcomm5_irq, id: flexcomm6_irq, id: flexcomm7_irq, id: global_irq0, id: global_irq1,\r
73         id: lspi_hs_irq, id: mailbox_irq, id: mrt_irq, id: os_event_irq, id: pin_int4, id: pin_int5, id: pin_int6, id: pin_int7, id: pin_irq0, id: pin_irq1, id: pin_irq2,\r
74         id: pin_irq3, id: plu_irq, id: pq_irq, id: qddkey_irq, id: rtc_irq, id: sct_irq, id: sdio_irq, id: sdma0_irq, id: sdma1_irq, id: sec_hypervisor_call_irq,\r
75         id: sec_int0, id: sec_int1, id: sec_vio_irq, id: sha_irq, id: sys_irq, id: usb0_irq, id: usb0_needclk_irq, id: usb1_irq, id: usb1_needclk_irq, id: usb1_utmi_irq,\r
76         id: utick_irq}\r
77   - pins_masks:\r
78     - pio0:\r
79       - Non-masked: {id: '0', id: '1', id: '10', id: '11', id: '12', id: '13', id: '14', id: '15', id: '16', id: '17', id: '18', id: '19', id: '2', id: '20', id: '21',\r
80         id: '22', id: '23', id: '24', id: '25', id: '26', id: '27', id: '28', id: '29', id: '3', id: '30', id: '31', id: '4', id: '5', id: '6', id: '7', id: '8',\r
81         id: '9'}\r
82     - pio1:\r
83       - Non-masked: {id: '0', id: '1', id: '10', id: '11', id: '12', id: '13', id: '14', id: '15', id: '16', id: '17', id: '18', id: '19', id: '2', id: '20', id: '21',\r
84         id: '22', id: '23', id: '24', id: '25', id: '26', id: '27', id: '28', id: '29', id: '3', id: '30', id: '31', id: '4', id: '5', id: '6', id: '7', id: '8',\r
85         id: '9'}\r
86 - sau:\r
87   - enabled: 'true'\r
88   - generate_code_for_disabled_regions: 'false'\r
89   - regions:\r
90     - region: {index: '0', enabled: 'true', security: ns, start: '0x00000000', size: '0x10000000'}\r
91     - region: {index: '1', enabled: 'true', security: ns, start: '0x20000000', size: '0xE0000000'}\r
92     - region: {index: '2', enabled: 'true', security: nsc, start: '0x1000FE00', size: '0x00000200'}\r
93     - region: {index: '3', enabled: 'false', security: ns, start: '0x00000000', size: '0x00000020'}\r
94     - region: {index: '4', enabled: 'false', security: ns, start: '0x00000000', size: '0x00000020'}\r
95     - region: {index: '5', enabled: 'false', security: ns, start: '0x00000000', size: '0x00000020'}\r
96     - region: {index: '6', enabled: 'false', security: ns, start: '0x00000000', size: '0x00000020'}\r
97     - region: {index: '7', enabled: 'false', security: ns, start: '0x00000000', size: '0x00000020'}\r
98 - global_options:\r
99   - no: {id: AIRCR_PRIS, id: AIRCR_BFHFNMINS, id: AIRCR_SYSRESETREQS, id: SCR_SLEEPDEEPS, id: SHCSR_SECUREFAULTENA, id: NSACR_CP2, id: NSACR_CP3, id: NSACR_CP4,\r
100     id: NSACR_CP5, id: NSACR_CP6, id: NSACR_CP7, id: CPPWR_SU0, id: CPPWR_SUS0, id: CPPWR_SU1, id: CPPWR_SUS1, id: CPPWR_SU2, id: CPPWR_SUS2, id: CPPWR_SU3, id: CPPWR_SUS3,\r
101     id: CPPWR_SU4, id: CPPWR_SUS4, id: CPPWR_SU5, id: CPPWR_SUS5, id: CPPWR_SU6, id: CPPWR_SUS6, id: CPPWR_SU7, id: CPPWR_SUS7, id: CPPWR_SU10, id: CPPWR_SUS10, id: CPPWR_SU11,\r
102     id: CPPWR_SUS11, id: SEC_GPIO_MASK0_LOCK, id: SEC_GPIO_MASK1_LOCK, id: SEC_CPU1_INT_MASK0_LOCK, id: SEC_CPU1_INT_MASK1_LOCK, id: MASTER_SEC_LEVEL_LOCK, id: CPU0_LOCK_NS_VTOR,\r
103     id: CPU0_LOCK_NS_MPU, id: CPU0_LOCK_S_VTAIRCR, id: CPU0_LOCK_S_MPU, id: CPU0_LOCK_SAU, id: CPU0_LOCK_REG_LOCK, id: CPU1_LOCK_NS_VTOR, id: CPU1_LOCK_NS_MPU, id: CPU1_LOCK_REG_LOCK,\r
104     id: AHB_MISC_CTRL_REG_ENABLE_S_PRIV_CHECK, id: AHB_MISC_CTRL_REG_ENABLE_NS_PRIV_CHECK, id: AHB_MISC_CTRL_REG_DISABLE_VIOLATION_ABORT, id: AHB_MISC_CTRL_REG_DISABLE_SIMPLE_MASTER_STRICT_MODE,\r
105     id: AHB_MISC_CTRL_REG_DISABLE_SMART_MASTER_STRICT_MODE, id: AHB_MISC_CTRL_REG_IDAU_ALL_NS}\r
106   - yes: {id: NSACR_CP0, id: NSACR_CP1, id: NSACR_CP10, id: NSACR_CP11, id: AHB_MISC_CTRL_REG_ENABLE_SECURE_CHECKING, id: AHB_MISC_CTRL_REG_WRITE_LOCK}\r
107 - user_memory_regions:\r
108   - user_memory_region: {id: Region_1, security: s_priv, name: Secure Code, start: '0x10000000', size: '0x0000FE00'}\r
109   - user_memory_region: {id: Region_2, security: nsc_priv, name: Veneer Table, start: '0x1000FE00', size: '0x00000200'}\r
110   - user_memory_region: {id: Region_3, security: s_priv, name: Secure Stack and Data, start: '0x30000000', size: '0x00008000'}\r
111   - user_memory_region: {id: Region_4, security: ns_user, name: Non-secure Code, description: Privilege check is disabled so reset value (NS-User) can be used,\r
112     start: '0x00010000', size: '0x00062000'}\r
113   - user_memory_region: {id: Region_5, security: ns_user, name: Non-secure Stack and Data, description: 'Privilege check is disabled so reset value (NS-User) can\r
114       be used. ', start: '0x20008000', size: '0x0002B000'}\r
115  * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/\r
116 /* clang-format on */\r
117 \r
118 /*!\r
119  * @brief TrustZone initialization\r
120  *\r
121  * The function configures SAU and AHB.\r
122  */\r
123 void BOARD_InitTrustZone()\r
124 {\r
125     //####################################################################\r
126     //### SAU configuration ##############################################\r
127     //####################################################################\r
128 \r
129     /* Set SAU Control register: Disable SAU and All Secure */\r
130     SAU->CTRL = 0;\r
131 \r
132     /* Set SAU region number */\r
133     SAU->RNR = 0;\r
134     /* Region base address */\r
135     SAU->RBAR = REGION_0_BASE & SAU_RBAR_BADDR_Msk;\r
136     /* Region end address */\r
137     SAU->RLAR = ((REGION_0_END & SAU_RLAR_LADDR_Msk) | ((0U << SAU_RLAR_NSC_Pos) & SAU_RLAR_NSC_Msk)) |\r
138                 ((1U << SAU_RLAR_ENABLE_Pos) & SAU_RLAR_ENABLE_Msk);\r
139 \r
140     /* Set SAU region number */\r
141     SAU->RNR = 0x00000001U;\r
142     /* Region base address */\r
143     SAU->RBAR = REGION_1_BASE & SAU_RBAR_BADDR_Msk;\r
144     /* Region end address */\r
145     SAU->RLAR = ((REGION_1_END & SAU_RLAR_LADDR_Msk) | ((0U << SAU_RLAR_NSC_Pos) & SAU_RLAR_NSC_Msk)) |\r
146                 ((1U << SAU_RLAR_ENABLE_Pos) & SAU_RLAR_ENABLE_Msk);\r
147 \r
148     /* Set SAU region number */\r
149     SAU->RNR = 0x00000002U;\r
150     /* Region base address */\r
151     SAU->RBAR = REGION_2_BASE & SAU_RBAR_BADDR_Msk;\r
152     /* Region end address */\r
153     SAU->RLAR = ((REGION_2_END & SAU_RLAR_LADDR_Msk) | ((1U << SAU_RLAR_NSC_Pos) & SAU_RLAR_NSC_Msk)) |\r
154                 ((1U << SAU_RLAR_ENABLE_Pos) & SAU_RLAR_ENABLE_Msk);\r
155 \r
156     /* Force memory writes before continuing */\r
157     __DSB();\r
158     /* Flush and refill pipeline with updated permissions */\r
159     __ISB();\r
160     /* Set SAU Control register: Enable SAU and All Secure (applied only if disabled) */\r
161     SAU->CTRL = 0x00000001U;\r
162 \r
163     //####################################################################\r
164     //### AHB Configurations #############################################\r
165     //####################################################################\r
166 \r
167     //--------------------------------------------------------------------\r
168     //--- AHB Security Level Configurations ------------------------------\r
169     //--------------------------------------------------------------------\r
170     /* Configuration of AHB Secure Controller\r
171      * Possible values for every memory sector or peripheral rule:\r
172      *  0    Non-secure, user access allowed.\r
173      *  1    Non-secure, privileged access allowed.\r
174      *  2    Secure, user access allowed.\r
175      *  3    Secure, privileged access allowed. */\r
176 \r
177     //--- Security level configuration of memories -----------------------\r
178     AHB_SECURE_CTRL->SEC_CTRL_FLASH_ROM[0].SEC_CTRL_FLASH_MEM_RULE[0] = 0x00000033U;\r
179     AHB_SECURE_CTRL->SEC_CTRL_FLASH_ROM[0].SEC_CTRL_FLASH_MEM_RULE[1] = 0;\r
180     AHB_SECURE_CTRL->SEC_CTRL_FLASH_ROM[0].SEC_CTRL_FLASH_MEM_RULE[2] = 0;\r
181     AHB_SECURE_CTRL->SEC_CTRL_FLASH_ROM[0].SEC_CTRL_ROM_MEM_RULE[0]   = 0;\r
182     AHB_SECURE_CTRL->SEC_CTRL_FLASH_ROM[0].SEC_CTRL_ROM_MEM_RULE[1]   = 0;\r
183     AHB_SECURE_CTRL->SEC_CTRL_FLASH_ROM[0].SEC_CTRL_ROM_MEM_RULE[2]   = 0;\r
184     AHB_SECURE_CTRL->SEC_CTRL_FLASH_ROM[0].SEC_CTRL_ROM_MEM_RULE[3]   = 0;\r
185     AHB_SECURE_CTRL->SEC_CTRL_RAMX[0].MEM_RULE[0]                     = 0;\r
186     AHB_SECURE_CTRL->SEC_CTRL_RAM0[0].MEM_RULE[0]                     = 0x33333333U;\r
187     AHB_SECURE_CTRL->SEC_CTRL_RAM0[0].MEM_RULE[1]                     = 0;\r
188     AHB_SECURE_CTRL->SEC_CTRL_RAM1[0].MEM_RULE[0]                     = 0;\r
189     AHB_SECURE_CTRL->SEC_CTRL_RAM1[0].MEM_RULE[1]                     = 0;\r
190     AHB_SECURE_CTRL->SEC_CTRL_RAM2[0].MEM_RULE[0]                     = 0;\r
191     AHB_SECURE_CTRL->SEC_CTRL_RAM2[0].MEM_RULE[1]                     = 0;\r
192     AHB_SECURE_CTRL->SEC_CTRL_RAM3[0].MEM_RULE[0]                     = 0;\r
193     AHB_SECURE_CTRL->SEC_CTRL_RAM3[0].MEM_RULE[1]                     = 0;\r
194     AHB_SECURE_CTRL->SEC_CTRL_RAM4[0].MEM_RULE[0]                     = 0;\r
195     AHB_SECURE_CTRL->SEC_CTRL_USB_HS[0].MEM_RULE[0]                   = 0;\r
196 \r
197     //--- Security level configuration of peripherals --------------------\r
198     AHB_SECURE_CTRL->SEC_CTRL_APB_BRIDGE[0].SEC_CTRL_APB_BRIDGE0_MEM_CTRL0 = 0x00000033U;\r
199     AHB_SECURE_CTRL->SEC_CTRL_APB_BRIDGE[0].SEC_CTRL_APB_BRIDGE0_MEM_CTRL1 = 0;\r
200     AHB_SECURE_CTRL->SEC_CTRL_APB_BRIDGE[0].SEC_CTRL_APB_BRIDGE0_MEM_CTRL2 = 0;\r
201     AHB_SECURE_CTRL->SEC_CTRL_APB_BRIDGE[0].SEC_CTRL_APB_BRIDGE1_MEM_CTRL0 = 0;\r
202     AHB_SECURE_CTRL->SEC_CTRL_APB_BRIDGE[0].SEC_CTRL_APB_BRIDGE1_MEM_CTRL1 = 0;\r
203     AHB_SECURE_CTRL->SEC_CTRL_APB_BRIDGE[0].SEC_CTRL_APB_BRIDGE1_MEM_CTRL2 = 0;\r
204     AHB_SECURE_CTRL->SEC_CTRL_APB_BRIDGE[0].SEC_CTRL_APB_BRIDGE1_MEM_CTRL3 = 0;\r
205     AHB_SECURE_CTRL->SEC_CTRL_AHB_PORT8_SLAVE0_RULE                        = 0x03000000U;\r
206     AHB_SECURE_CTRL->SEC_CTRL_AHB_PORT8_SLAVE1_RULE                        = 0;\r
207     AHB_SECURE_CTRL->SEC_CTRL_AHB_PORT9_SLAVE0_RULE                        = 0;\r
208     AHB_SECURE_CTRL->SEC_CTRL_AHB_PORT9_SLAVE1_RULE                        = 0;\r
209     AHB_SECURE_CTRL->SEC_CTRL_AHB_PORT10[0].SLAVE0_RULE                    = 0;\r
210     AHB_SECURE_CTRL->SEC_CTRL_AHB_PORT10[0].SLAVE1_RULE                    = 0;\r
211 \r
212     //--- Security level configuration of masters ------------------------\r
213     AHB_SECURE_CTRL->MASTER_SEC_LEVEL        = 0;\r
214     AHB_SECURE_CTRL->MASTER_SEC_ANTI_POL_REG = 0x3FFFFFFFU;\r
215 \r
216     //--------------------------------------------------------------------\r
217     //--- Pins: Reading GPIO state ---------------------------------------\r
218     //--------------------------------------------------------------------\r
219     // Possible values for every pin:\r
220     //  0b0    Deny\r
221     //  0b1    Allow\r
222     //--------------------------------------------------------------------\r
223     AHB_SECURE_CTRL->SEC_GPIO_MASK0 = 0xFFFFFFFFU;\r
224     AHB_SECURE_CTRL->SEC_GPIO_MASK1 = 0xFFFFFFFFU;\r
225 \r
226     //--------------------------------------------------------------------\r
227     //--- Interrupts: Interrupt handling by Core1 ------------------------\r
228     //--------------------------------------------------------------------\r
229     // Possible values for every interrupt:\r
230     //  0b0    Deny\r
231     //  0b1    Allow\r
232     //--------------------------------------------------------------------\r
233     AHB_SECURE_CTRL->SEC_CPU_INT_MASK0 = 0xFFFFFFFFU;\r
234     AHB_SECURE_CTRL->SEC_CPU_INT_MASK1 = 0xFFFFFFFFU;\r
235 \r
236     //--------------------------------------------------------------------\r
237     //--- Interrupts: Interrupt security configuration -------------------\r
238     //--------------------------------------------------------------------\r
239     // Possible values for every interrupt:\r
240     //  0b0    Secure\r
241     //  0b1    Non-secure\r
242     //--------------------------------------------------------------------\r
243     NVIC->ITNS[0] = 0;\r
244     NVIC->ITNS[1] = 0;\r
245 \r
246     //--------------------------------------------------------------------\r
247     //--- Global Options -------------------------------------------------\r
248     //--------------------------------------------------------------------\r
249     SCB->AIRCR = (SCB->AIRCR & 0x000009FF7U) | 0x005FA0000U;\r
250     SCB->SCR &= 0x0FFFFFFF7U;\r
251     SCB->SHCSR &= 0x0FFF7FFFFU;\r
252     SCB->NSACR                               = 0x00000C03U;\r
253     SCnSCB->CPPWR                            = 0;\r
254     AHB_SECURE_CTRL->SEC_MASK_LOCK           = 0x00000AAAU;\r
255     AHB_SECURE_CTRL->MASTER_SEC_LEVEL        = (AHB_SECURE_CTRL->MASTER_SEC_LEVEL & 0x03FFFFFFFU) | 0x080000000U;\r
256     AHB_SECURE_CTRL->MASTER_SEC_ANTI_POL_REG = (AHB_SECURE_CTRL->MASTER_SEC_ANTI_POL_REG & 0x03FFFFFFFU) | 0x080000000U;\r
257     AHB_SECURE_CTRL->CPU0_LOCK_REG           = 0x800002AAU;\r
258     AHB_SECURE_CTRL->CPU1_LOCK_REG           = 0x8000000AU;\r
259     AHB_SECURE_CTRL->MISC_CTRL_REG           = (AHB_SECURE_CTRL->MISC_CTRL_REG & 0x0FFFF0003U) | 0x00000AAA4U;\r
260     AHB_SECURE_CTRL->MISC_CTRL_DP_REG        = 0x0000AAA5U;\r
261 }\r