|
1 | 1 | /* |
2 | | - * SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD |
| 2 | + * SPDX-FileCopyrightText: 2021-2025 Espressif Systems (Shanghai) CO LTD |
3 | 3 | * |
4 | 4 | * SPDX-License-Identifier: Apache-2.0 |
5 | 5 | */ |
|
10 | 10 | #include "../ext_mem_layout.h" |
11 | 11 | #include "hal/mmu_types.h" |
12 | 12 |
|
| 13 | +/* NOTE: With ESP-TEE enabled: |
| 14 | + * - The start address is moved by the size of TEE IDROM segments since these |
| 15 | + * segments are placed at the start of the linear address space |
| 16 | + * - TEE IROM and DROM segments are both 64KB (CONFIG_SECURE_TEE_IROM_SIZE, |
| 17 | + * CONFIG_SECURE_TEE_DROM_SIZE) for now. Thus, the number of reserved entries |
| 18 | + * from the start would be (64KB + 64KB)/MMU_PAGE_SIZE |
| 19 | + * - The last few MMU entries are reserved for TEE flash operations. The number |
| 20 | + * of reserved entries matches the size of TEE IDROM segments (IROM + DROM) |
| 21 | + * plus one additional entry, i.e. (64KB + 64KB)/MMU_PAGE_SIZE + 1 |
| 22 | + */ |
| 23 | +#if CONFIG_SECURE_ENABLE_TEE |
| 24 | +#define TEE_MMU_MEM_REG_START_OFFS (CONFIG_SECURE_TEE_IROM_SIZE + CONFIG_SECURE_TEE_DROM_SIZE) |
| 25 | +#define TEE_MMU_RESV_PAGES ((CONFIG_SECURE_TEE_IROM_SIZE + CONFIG_SECURE_TEE_DROM_SIZE) / CONFIG_MMU_PAGE_SIZE) |
| 26 | +#define TEE_MMU_MEM_REG_END_OFFS ((TEE_MMU_RESV_PAGES + 1) * CONFIG_MMU_PAGE_SIZE) |
| 27 | + |
| 28 | +#define MMU_MEM_REG_START_ADDR_W_TEE (SOC_MMU_IRAM0_LINEAR_ADDRESS_LOW + TEE_MMU_MEM_REG_START_OFFS) |
| 29 | +#define MMU_MEM_REG_END_ADDR_W_TEE (SOC_MMU_IRAM0_LINEAR_ADDRESS_HIGH - TEE_MMU_MEM_REG_END_OFFS) |
| 30 | + |
| 31 | +#define MMU_IRAM0_LINEAR_ADDRESS_LOW MMU_MEM_REG_START_ADDR_W_TEE |
| 32 | +#define MMU_IRAM0_LINEAR_ADDRESS_HIGH MMU_MEM_REG_END_ADDR_W_TEE |
| 33 | +#else |
| 34 | +#define MMU_IRAM0_LINEAR_ADDRESS_LOW SOC_MMU_IRAM0_LINEAR_ADDRESS_LOW |
| 35 | +#define MMU_IRAM0_LINEAR_ADDRESS_HIGH SOC_MMU_IRAM0_LINEAR_ADDRESS_HIGH |
| 36 | +#endif |
| 37 | + |
13 | 38 | /** |
14 | 39 | * The start addresses in this list should always be sorted from low to high, as MMU driver will need to |
15 | 40 | * coalesce adjacent regions |
16 | 41 | */ |
17 | 42 | const mmu_mem_region_t g_mmu_mem_regions[SOC_MMU_LINEAR_ADDRESS_REGION_NUM] = { |
18 | 43 | [0] = { |
19 | | - .start = SOC_MMU_IRAM0_LINEAR_ADDRESS_LOW, |
20 | | - .end = SOC_MMU_IRAM0_LINEAR_ADDRESS_HIGH, |
21 | | - .size = SOC_BUS_SIZE(SOC_MMU_IRAM0_LINEAR), |
| 44 | + .start = MMU_IRAM0_LINEAR_ADDRESS_LOW, |
| 45 | + .end = MMU_IRAM0_LINEAR_ADDRESS_HIGH, |
| 46 | + .size = MMU_IRAM0_LINEAR_ADDRESS_HIGH - MMU_IRAM0_LINEAR_ADDRESS_LOW, |
22 | 47 | .bus_id = CACHE_BUS_IBUS0 | CACHE_BUS_DBUS0, |
23 | 48 | .targets = MMU_TARGET_FLASH0, |
24 | 49 | .caps = MMU_MEM_CAP_EXEC | MMU_MEM_CAP_READ | MMU_MEM_CAP_32BIT | MMU_MEM_CAP_8BIT, |
|
0 commit comments