esp-idf/components/hal/test/test_mpu.c
Michael (XIAO Xufeng) 6a8aed12ee ci: partially enable ut tests for esp32c2
Disabled test cases are tracked in:

 IDF-4465, IDF-5045, IDF-5057, IDF-5058, IDF-5059, IDF-5060, IDF-5061, IDF-5131

- test_fatfs: IDF-5136

- test_pm: IDF-5053

- test_cache_mmu: IDF-5138

- test_partitions: IDF-5137

- test_vfs: IDF-5139

- test_freertos: IDF-5140

- test_wpa_supplicant: IDF-5046

- test_mbedtls: IDF-5141

- test_pthread: IDF-5142

- test_protocomm: IDF-5143

- test_lightsleep: IDF-5053

- test_taskwdt: IDF-5055

- test_tcp_transport: IDF-5144

- test_app_update: IDF-5145

- test_timer: IDF-5052

- test_spi: IDF-5146

- test_rtc_clk: IDF-5060

- test_heap: IDF-5167

ci: fixed issues for tests of libgcc, ets_timer, newlib

test_pm: support on C2
2022-06-02 14:23:35 +08:00

54 lines
1.3 KiB
C

#include <stdio.h>
#include <stdbool.h>
#include "unity.h"
#include "esp_attr.h"
#include "hal/mpu_hal.h"
// TODO ESP32-C3 IDF-2375
// LL still not implemented
#if !TEMPORARY_DISABLED_FOR_TARGETS(ESP32C3)
#if !TEMPORARY_DISABLED_FOR_TARGETS(ESP32C2)
//IDF-5058
volatile static int RTC_NOINIT_ATTR access = 0;
static void trigger_illegal_access(void)
{
access = 0;
intptr_t addr = 0x80000000; // MPU region 4
volatile int __attribute__((unused)) val = 0;
// Marked as an illegal access region at startup in ESP32, ESP32S2.
// Make accessible temporarily.
mpu_hal_set_region_access(4, MPU_REGION_RW);
val = *((int*) addr);
++access;
TEST_ASSERT_EQUAL(1, access);
printf("Sucessfully accessed location %p\r\n", (void*)addr);
// Make access to region illegal again.
mpu_hal_set_region_access(4, MPU_REGION_ILLEGAL);
++access;
// Since access to region is illegal, this should fail (causing a reset), and the increment
// to access count is not performed.
val = *((int*) addr);
++access;
}
void check_access(void)
{
TEST_ASSERT_EQUAL(2, access);
}
TEST_CASE_MULTIPLE_STAGES("Can set illegal access regions", "[soc][mpu]",
trigger_illegal_access,
check_access);
#endif //!TEMPORARY_DISABLED_FOR_TARGETS(ESP32C2)
#endif //!TEMPORARY_DISABLED_FOR_TARGETS(ESP32C3)