Explorar el Código

esp_hw_support: allow writing in IRAM when CONFIG_ESP_SYSTEM_PMP_IDRAM_SPLIT is not set for esp32C2

when CONFIG_ESP_SYSTEM_PMP_IDRAM_SPLIT is not set, the PMP rule for esp32c2 shoud allow write access.
Fix esp_cpu_configure_region_protection() in cpu.c accordingly.
Guillaume Souchere hace 3 años
padre
commit
b5bacffbd3

+ 7 - 0
components/esp_hw_support/cpu.c

@@ -454,11 +454,13 @@ extern int _data_start;
 #define CONDITIONAL_NONE        0x0
 #define CONDITIONAL_NONE        0x0
 #define CONDITIONAL_RX          PMP_R | PMP_X
 #define CONDITIONAL_RX          PMP_R | PMP_X
 #define CONDITIONAL_RW          PMP_R | PMP_W
 #define CONDITIONAL_RW          PMP_R | PMP_W
+#define CONDITIONAL_RWX         PMP_R | PMP_W | PMP_X
 #else
 #else
 // With L bit set
 // With L bit set
 #define CONDITIONAL_NONE        NONE
 #define CONDITIONAL_NONE        NONE
 #define CONDITIONAL_RX          RX
 #define CONDITIONAL_RX          RX
 #define CONDITIONAL_RW          RW
 #define CONDITIONAL_RW          RW
+#define CONDITIONAL_RWX         RWX
 #endif
 #endif
 
 
 void esp_cpu_configure_region_protection(void)
 void esp_cpu_configure_region_protection(void)
@@ -525,7 +527,12 @@ void esp_cpu_configure_region_protection(void)
     } else {
     } else {
         // 1. IRAM
         // 1. IRAM
         PMP_ENTRY_SET(0, SOC_DIRAM_IRAM_LOW, CONDITIONAL_NONE);
         PMP_ENTRY_SET(0, SOC_DIRAM_IRAM_LOW, CONDITIONAL_NONE);
+
+#if CONFIG_ESP_SYSTEM_PMP_IDRAM_SPLIT
         PMP_ENTRY_SET(1, IRAM_END, PMP_TOR | CONDITIONAL_RX);
         PMP_ENTRY_SET(1, IRAM_END, PMP_TOR | CONDITIONAL_RX);
+#else
+        PMP_ENTRY_SET(1, IRAM_END, PMP_TOR | CONDITIONAL_RWX);
+#endif
 
 
         // 2. DRAM
         // 2. DRAM
         PMP_ENTRY_SET(2, DRAM_START, CONDITIONAL_NONE);
         PMP_ENTRY_SET(2, DRAM_START, CONDITIONAL_NONE);

+ 1 - 0
components/heap/test_apps/sdkconfig.defaults

@@ -1,6 +1,7 @@
 CONFIG_COMPILER_DUMP_RTL_FILES=y
 CONFIG_COMPILER_DUMP_RTL_FILES=y
 CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0=n
 CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0=n
 CONFIG_ESP_SYSTEM_MEMPROT_FEATURE=n # memory protection needs to be disabled for certain tests
 CONFIG_ESP_SYSTEM_MEMPROT_FEATURE=n # memory protection needs to be disabled for certain tests
+CONFIG_ESP_SYSTEM_PMP_IDRAM_SPLIT=n # for c2 and c6 this config must be disabled for certain tests
 
 
 CONFIG_COMPILER_STACK_CHECK_MODE_ALL=y
 CONFIG_COMPILER_STACK_CHECK_MODE_ALL=y
 CONFIG_COMPILER_STACK_CHECK=y
 CONFIG_COMPILER_STACK_CHECK=y