mirror of
https://github.com/espressif/esp-idf.git
synced 2026-04-29 03:44:59 +00:00
162 lines
4.2 KiB
Markdown
162 lines
4.2 KiB
Markdown
| Supported Targets | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-H2 |
|
|
| ----------------- | -------- | -------- | --------- | -------- |
|
|
|
|
# TEE (Trusted Execution Environment) Test Application
|
|
|
|
This application is designed to validate the key components of the **ESP-TEE** framework, with a focus on:
|
|
|
|
1. **Permission Management (PMS: TEE controller + APM module)**
|
|
- Region-based memory and peripheral access control using the TEE controller and the Access Permission Management (APM) module
|
|
|
|
2. **Interrupts**
|
|
- Interrupt handling in Machine mode (M), User mode (U), and cross-mode contexts
|
|
|
|
It is primarily intended for early bring-up and SoC-level functional validation.
|
|
|
|
---
|
|
|
|
## Test Coverage: PMS (TEE + APM module)
|
|
|
|
### TEE mode default access behavior
|
|
|
|
- **TEE Mode Default Access**
|
|
|
|
Validates whether TEE mode has unrestricted access to regions not covered by APM entries. Confirms filtering issues on ESP32-C6 and ESP32-H2.
|
|
|
|
### HP_CPU Access
|
|
|
|
- **HP_CPU → CPU_PERI**
|
|
- **HP_CPU → HP_PERI**
|
|
- **HP_CPU → LP_PERI**
|
|
- **HP_CPU → HP_MEM** (if `SOC_APM_CPU_APM_SUPPORTED`)
|
|
- **HP_CPU → LP_MEM** (if `SOC_RTC_MEM_SUPPORTED`)
|
|
|
|
Each scenario checks access permission enforcement for read-only and write-only settings across security modes.
|
|
|
|
### GDMA Access
|
|
|
|
- **GDMA → HP_MEM**
|
|
- **GDMA → EXT_MEM** (if `CONFIG_SPIRAM`)
|
|
|
|
Validates region-based restrictions across modes using DMA transfers.
|
|
|
|
### LP_CPU Access (if `CONFIG_ULP_COPROC_ENABLED`)
|
|
|
|
- **LP_CPU → LP_PERI**
|
|
- **LP_CPU → LP_MEM**
|
|
- **LP_CPU → HP_MEM**
|
|
|
|
### PERI_APM Tests (if `SOC_APM_SUPPORT_TEE_PERI_ACCESS_CTRL`)
|
|
|
|
- **HP_CPU → HP_PERI**
|
|
- **HP_CPU → LP_PERI**
|
|
- **LP_CPU → HP_PERI**
|
|
- **LP_CPU → LP_PERI**
|
|
|
|
Validates the per-peripheral access permissions for all security modes.
|
|
|
|
---
|
|
|
|
## Test Coverage: Interrupts
|
|
|
|
- **M-mode interrupts in M-mode**
|
|
- **U-mode interrupts in U-mode**
|
|
- **M-mode interrupts in U-mode**
|
|
- **U-mode interrupts in M-mode**
|
|
|
|
## Target Extension Guide
|
|
|
|
To add support for a new SoC target, create a test configuration header at:
|
|
|
|
```
|
|
components/pms/priv_include/<target>/test_pms_params.h
|
|
```
|
|
|
|
This header must define:
|
|
|
|
### 1. GDMA APM Master ID
|
|
|
|
Defined based on GDMA version:
|
|
|
|
```c
|
|
#define TEST_GDMA_APM_MASTER_ID APM_MASTER_GDMA_GPSPI // For SOC_AHB_GDMA_VERSION == 1
|
|
```
|
|
|
|
- `SOC_AHB_GDMA_VERSION == 1` → `GPSPI`
|
|
- `SOC_AHB_GDMA_VERSION == 2` → `26` (e.g., `GDMA_DUMMY10`)
|
|
|
|
Refer to `hal/apm_types.h` or the SoC TRM.
|
|
|
|
### 2. APM Controller and Path Definitions
|
|
|
|
Specify APM controller and access path for each initiator-target pair:
|
|
|
|
```c
|
|
#define HP_CPU_CPUPERI_APM_CTRL APM_CTRL_HP_APM
|
|
#define HP_CPU_CPUPERI_APM_PATH APM_CTRL_ACCESS_PATH_M0
|
|
#define TEST_HP_CPU_CPUPERI_REGN_NUM 4
|
|
```
|
|
|
|
Use the TRM to determine path-controller mappings.
|
|
|
|
### 3. Peripheral Test Region Definitions
|
|
|
|
Split the peripheral address space into testable regions:
|
|
|
|
- Use `soc/reg_base.h` to get base addresses of peripherals.
|
|
- Align non-contiguous region boundaries to 4 KB using:
|
|
|
|
```c
|
|
#define ALIGN_TO_NEXT_4KB(addr) (((addr) + 0x1000) & ~0xFFF)
|
|
```
|
|
|
|
#### CPU_PERI
|
|
|
|
- Typically monitored by `HP_APM`.
|
|
- Includes blocks like `TRACE`, `ASSIST_DEBUG`, `INTPRI`, `CACHE`.
|
|
- `CPU_PERI` typically includes ~4 peripherals, and thus, 4 APM regions are sufficient for test coverage.
|
|
|
|
#### LP_PERI
|
|
|
|
- Monitored by `LP_APM`.
|
|
- Covers domains like `PMU`, `LP_IO`, `LP_AON`.
|
|
- For SoCs with `LP_CPU`, reserve the regions containing `PMU`, `LP_AON`, `LP_PERI`. These are reserved to allow test-case control and avoid undesired APM violations.
|
|
|
|
```c
|
|
#define TEST_LP_PERI_RESV_MASK BIT(0) | BIT(2) | BIT(6)
|
|
```
|
|
|
|
#### HP_PERI
|
|
|
|
- Monitored by `HP_APM`.
|
|
- Split into: `HP_PERI0`, `HP_PERI1`, and `HP_PERI2`.
|
|
Test APM regions should be proportionally allocated to these segments based on address space size.
|
|
- Reserve the region containing `UART0`, since it is often used by the log console.
|
|
- If `PERI_APM` is supported, reserve the regions with `TEE`, `LP_TEE`, `HP_APM`, `LP_APM`, `LP_APM0`, and `CPU_APM`, as these are inaccessible to the REE modes.
|
|
|
|
```c
|
|
#define TEST_HP_PERI_RESV_MASK BIT(0)
|
|
```
|
|
|
|
---
|
|
|
|
## Building
|
|
|
|
```bash
|
|
idf.py set-target <TARGET>
|
|
idf.py build
|
|
```
|
|
|
|
## Running the App
|
|
|
|
```bash
|
|
idf.py flash monitor
|
|
```
|
|
|
|
## Running Tests
|
|
|
|
```bash
|
|
pytest --target <TARGET>
|
|
```
|
|
|
|
--- |