mirror of
https://github.com/espressif/esp-idf.git
synced 2024-09-19 14:26:01 -04:00
fix(esp_hw_support): Use _iram_text_end instead of _iram_end for I/D-RAM split
This commit is contained in:
parent
dbcff0e941
commit
95f286555a
@ -94,7 +94,7 @@ void esp_cpu_configure_region_protection(void)
|
|||||||
*
|
*
|
||||||
* 2. Application build with CONFIG_ESP_SYSTEM_PMP_IDRAM_SPLIT enabled
|
* 2. Application build with CONFIG_ESP_SYSTEM_PMP_IDRAM_SPLIT enabled
|
||||||
* - We split the SRAM into IRAM and DRAM such that IRAM region cannot be written to
|
* - We split the SRAM into IRAM and DRAM such that IRAM region cannot be written to
|
||||||
* and DRAM region cannot be executed. We use _iram_end and _data_start markers to set the boundaries.
|
* and DRAM region cannot be executed. We use _iram_text_end and _data_start markers to set the boundaries.
|
||||||
* We also lock these entries so the R/W/X permissions are enforced even for machine mode
|
* We also lock these entries so the R/W/X permissions are enforced even for machine mode
|
||||||
*
|
*
|
||||||
* 3. Application build with CONFIG_ESP_SYSTEM_PMP_IDRAM_SPLIT disabled
|
* 3. Application build with CONFIG_ESP_SYSTEM_PMP_IDRAM_SPLIT disabled
|
||||||
@ -142,7 +142,7 @@ void esp_cpu_configure_region_protection(void)
|
|||||||
_Static_assert(SOC_IRAM_LOW < SOC_IRAM_HIGH, "Invalid RAM region");
|
_Static_assert(SOC_IRAM_LOW < SOC_IRAM_HIGH, "Invalid RAM region");
|
||||||
} else {
|
} else {
|
||||||
#if CONFIG_ESP_SYSTEM_PMP_IDRAM_SPLIT && !BOOTLOADER_BUILD
|
#if CONFIG_ESP_SYSTEM_PMP_IDRAM_SPLIT && !BOOTLOADER_BUILD
|
||||||
extern int _iram_end;
|
extern int _iram_text_end;
|
||||||
/* Reset the corresponding PMP config because PMP_ENTRY_SET only sets the given bits
|
/* Reset the corresponding PMP config because PMP_ENTRY_SET only sets the given bits
|
||||||
* Bootloader might have given extra permissions and those won't be cleared
|
* Bootloader might have given extra permissions and those won't be cleared
|
||||||
*/
|
*/
|
||||||
@ -150,7 +150,7 @@ void esp_cpu_configure_region_protection(void)
|
|||||||
PMP_ENTRY_CFG_RESET(6);
|
PMP_ENTRY_CFG_RESET(6);
|
||||||
PMP_ENTRY_CFG_RESET(7);
|
PMP_ENTRY_CFG_RESET(7);
|
||||||
PMP_ENTRY_SET(5, SOC_IRAM_LOW, NONE);
|
PMP_ENTRY_SET(5, SOC_IRAM_LOW, NONE);
|
||||||
PMP_ENTRY_SET(6, (int)&_iram_end, PMP_TOR | RX);
|
PMP_ENTRY_SET(6, (int)&_iram_text_end, PMP_TOR | RX);
|
||||||
PMP_ENTRY_SET(7, SOC_DRAM_HIGH, PMP_TOR | RW);
|
PMP_ENTRY_SET(7, SOC_DRAM_HIGH, PMP_TOR | RW);
|
||||||
#else
|
#else
|
||||||
PMP_ENTRY_SET(5, SOC_IRAM_LOW, CONDITIONAL_NONE);
|
PMP_ENTRY_SET(5, SOC_IRAM_LOW, CONDITIONAL_NONE);
|
||||||
|
@ -88,7 +88,7 @@ void esp_cpu_configure_region_protection(void)
|
|||||||
*
|
*
|
||||||
* 2. Application build with CONFIG_ESP_SYSTEM_PMP_IDRAM_SPLIT enabled
|
* 2. Application build with CONFIG_ESP_SYSTEM_PMP_IDRAM_SPLIT enabled
|
||||||
* - We split the SRAM into IRAM and DRAM such that IRAM region cannot be written to
|
* - We split the SRAM into IRAM and DRAM such that IRAM region cannot be written to
|
||||||
* and DRAM region cannot be executed. We use _iram_end and _data_start markers to set the boundaries.
|
* and DRAM region cannot be executed. We use _iram_text_end and _data_start markers to set the boundaries.
|
||||||
* We also lock these entries so the R/W/X permissions are enforced even for machine mode
|
* We also lock these entries so the R/W/X permissions are enforced even for machine mode
|
||||||
*
|
*
|
||||||
* 3. Application build with CONFIG_ESP_SYSTEM_PMP_IDRAM_SPLIT disabled
|
* 3. Application build with CONFIG_ESP_SYSTEM_PMP_IDRAM_SPLIT disabled
|
||||||
@ -136,7 +136,7 @@ void esp_cpu_configure_region_protection(void)
|
|||||||
_Static_assert(SOC_IRAM_LOW < SOC_IRAM_HIGH, "Invalid RAM region");
|
_Static_assert(SOC_IRAM_LOW < SOC_IRAM_HIGH, "Invalid RAM region");
|
||||||
} else {
|
} else {
|
||||||
#if CONFIG_ESP_SYSTEM_PMP_IDRAM_SPLIT && !BOOTLOADER_BUILD
|
#if CONFIG_ESP_SYSTEM_PMP_IDRAM_SPLIT && !BOOTLOADER_BUILD
|
||||||
extern int _iram_end;
|
extern int _iram_text_end;
|
||||||
// 5. IRAM and DRAM
|
// 5. IRAM and DRAM
|
||||||
/* Reset the corresponding PMP config because PMP_ENTRY_SET only sets the given bits
|
/* Reset the corresponding PMP config because PMP_ENTRY_SET only sets the given bits
|
||||||
* Bootloader might have given extra permissions and those won't be cleared
|
* Bootloader might have given extra permissions and those won't be cleared
|
||||||
@ -145,7 +145,7 @@ void esp_cpu_configure_region_protection(void)
|
|||||||
PMP_ENTRY_CFG_RESET(6);
|
PMP_ENTRY_CFG_RESET(6);
|
||||||
PMP_ENTRY_CFG_RESET(7);
|
PMP_ENTRY_CFG_RESET(7);
|
||||||
PMP_ENTRY_SET(5, SOC_IRAM_LOW, NONE);
|
PMP_ENTRY_SET(5, SOC_IRAM_LOW, NONE);
|
||||||
PMP_ENTRY_SET(6, (int)&_iram_end, PMP_TOR | RX);
|
PMP_ENTRY_SET(6, (int)&_iram_text_end, PMP_TOR | RX);
|
||||||
PMP_ENTRY_SET(7, SOC_DRAM_HIGH, PMP_TOR | RW);
|
PMP_ENTRY_SET(7, SOC_DRAM_HIGH, PMP_TOR | RW);
|
||||||
#else
|
#else
|
||||||
// 5. IRAM and DRAM
|
// 5. IRAM and DRAM
|
||||||
|
@ -88,7 +88,7 @@ void esp_cpu_configure_region_protection(void)
|
|||||||
*
|
*
|
||||||
* 2. Application build with CONFIG_ESP_SYSTEM_PMP_IDRAM_SPLIT enabled
|
* 2. Application build with CONFIG_ESP_SYSTEM_PMP_IDRAM_SPLIT enabled
|
||||||
* - We split the SRAM into IRAM and DRAM such that IRAM region cannot be written to
|
* - We split the SRAM into IRAM and DRAM such that IRAM region cannot be written to
|
||||||
* and DRAM region cannot be executed. We use _iram_end and _data_start markers to set the boundaries.
|
* and DRAM region cannot be executed. We use _iram_text_end and _data_start markers to set the boundaries.
|
||||||
* We also lock these entries so the R/W/X permissions are enforced even for machine mode
|
* We also lock these entries so the R/W/X permissions are enforced even for machine mode
|
||||||
*
|
*
|
||||||
* 3. Application build with CONFIG_ESP_SYSTEM_PMP_IDRAM_SPLIT disabled
|
* 3. Application build with CONFIG_ESP_SYSTEM_PMP_IDRAM_SPLIT disabled
|
||||||
@ -136,7 +136,7 @@ void esp_cpu_configure_region_protection(void)
|
|||||||
_Static_assert(SOC_IRAM_LOW < SOC_IRAM_HIGH, "Invalid RAM region");
|
_Static_assert(SOC_IRAM_LOW < SOC_IRAM_HIGH, "Invalid RAM region");
|
||||||
} else {
|
} else {
|
||||||
#if CONFIG_ESP_SYSTEM_PMP_IDRAM_SPLIT && !BOOTLOADER_BUILD
|
#if CONFIG_ESP_SYSTEM_PMP_IDRAM_SPLIT && !BOOTLOADER_BUILD
|
||||||
extern int _iram_end;
|
extern int _iram_text_end;
|
||||||
// 5. IRAM and DRAM
|
// 5. IRAM and DRAM
|
||||||
/* Reset the corresponding PMP config because PMP_ENTRY_SET only sets the given bits
|
/* Reset the corresponding PMP config because PMP_ENTRY_SET only sets the given bits
|
||||||
* Bootloader might have given extra permissions and those won't be cleared
|
* Bootloader might have given extra permissions and those won't be cleared
|
||||||
@ -145,7 +145,7 @@ void esp_cpu_configure_region_protection(void)
|
|||||||
PMP_ENTRY_CFG_RESET(6);
|
PMP_ENTRY_CFG_RESET(6);
|
||||||
PMP_ENTRY_CFG_RESET(7);
|
PMP_ENTRY_CFG_RESET(7);
|
||||||
PMP_ENTRY_SET(5, SOC_IRAM_LOW, NONE);
|
PMP_ENTRY_SET(5, SOC_IRAM_LOW, NONE);
|
||||||
PMP_ENTRY_SET(6, (int)&_iram_end, PMP_TOR | RX);
|
PMP_ENTRY_SET(6, (int)&_iram_text_end, PMP_TOR | RX);
|
||||||
PMP_ENTRY_SET(7, SOC_DRAM_HIGH, PMP_TOR | RW);
|
PMP_ENTRY_SET(7, SOC_DRAM_HIGH, PMP_TOR | RW);
|
||||||
#else
|
#else
|
||||||
// 5. IRAM and DRAM
|
// 5. IRAM and DRAM
|
||||||
|
@ -113,7 +113,7 @@ void esp_cpu_configure_region_protection(void)
|
|||||||
*
|
*
|
||||||
* 2. Application build with CONFIG_ESP_SYSTEM_PMP_IDRAM_SPLIT enabled
|
* 2. Application build with CONFIG_ESP_SYSTEM_PMP_IDRAM_SPLIT enabled
|
||||||
* - We split the SRAM into IRAM and DRAM such that IRAM region cannot be written to
|
* - We split the SRAM into IRAM and DRAM such that IRAM region cannot be written to
|
||||||
* and DRAM region cannot be executed. We use _iram_end and _data_start markers to set the boundaries.
|
* and DRAM region cannot be executed. We use _iram_text_end and _data_start markers to set the boundaries.
|
||||||
* We also lock these entries so the R/W/X permissions are enforced even for machine mode
|
* We also lock these entries so the R/W/X permissions are enforced even for machine mode
|
||||||
*
|
*
|
||||||
* 3. Application build with CONFIG_ESP_SYSTEM_PMP_IDRAM_SPLIT disabled
|
* 3. Application build with CONFIG_ESP_SYSTEM_PMP_IDRAM_SPLIT disabled
|
||||||
@ -166,7 +166,7 @@ void esp_cpu_configure_region_protection(void)
|
|||||||
_Static_assert(SOC_IRAM_LOW < SOC_IRAM_HIGH, "Invalid RAM region");
|
_Static_assert(SOC_IRAM_LOW < SOC_IRAM_HIGH, "Invalid RAM region");
|
||||||
} else {
|
} else {
|
||||||
#if CONFIG_ESP_SYSTEM_PMP_IDRAM_SPLIT && !BOOTLOADER_BUILD
|
#if CONFIG_ESP_SYSTEM_PMP_IDRAM_SPLIT && !BOOTLOADER_BUILD
|
||||||
extern int _iram_end;
|
extern int _iram_text_end;
|
||||||
// 4. IRAM and DRAM
|
// 4. IRAM and DRAM
|
||||||
/* Reset the corresponding PMP config because PMP_ENTRY_SET only sets the given bits
|
/* Reset the corresponding PMP config because PMP_ENTRY_SET only sets the given bits
|
||||||
* Bootloader might have given extra permissions and those won't be cleared
|
* Bootloader might have given extra permissions and those won't be cleared
|
||||||
@ -175,7 +175,7 @@ void esp_cpu_configure_region_protection(void)
|
|||||||
PMP_ENTRY_CFG_RESET(4);
|
PMP_ENTRY_CFG_RESET(4);
|
||||||
PMP_ENTRY_CFG_RESET(5);
|
PMP_ENTRY_CFG_RESET(5);
|
||||||
PMP_ENTRY_SET(3, SOC_IRAM_LOW, NONE);
|
PMP_ENTRY_SET(3, SOC_IRAM_LOW, NONE);
|
||||||
PMP_ENTRY_SET(4, (int)&_iram_end, PMP_TOR | RX);
|
PMP_ENTRY_SET(4, (int)&_iram_text_end, PMP_TOR | RX);
|
||||||
PMP_ENTRY_SET(5, SOC_DRAM_HIGH, PMP_TOR | RW);
|
PMP_ENTRY_SET(5, SOC_DRAM_HIGH, PMP_TOR | RW);
|
||||||
#else
|
#else
|
||||||
// 4. IRAM and DRAM
|
// 4. IRAM and DRAM
|
||||||
|
@ -173,6 +173,9 @@ SECTIONS
|
|||||||
/* Marks the end of IRAM code segment */
|
/* Marks the end of IRAM code segment */
|
||||||
.iram0.text_end (NOLOAD) :
|
.iram0.text_end (NOLOAD) :
|
||||||
{
|
{
|
||||||
|
/* Align the end of code region as per PMP region granularity */
|
||||||
|
. = ALIGN(_esp_pmp_align_size);
|
||||||
|
|
||||||
ALIGNED_SYMBOL(4, _iram_text_end)
|
ALIGNED_SYMBOL(4, _iram_text_end)
|
||||||
} > sram_seg
|
} > sram_seg
|
||||||
|
|
||||||
|
@ -173,6 +173,9 @@ SECTIONS
|
|||||||
/* Marks the end of IRAM code segment */
|
/* Marks the end of IRAM code segment */
|
||||||
.iram0.text_end (NOLOAD) :
|
.iram0.text_end (NOLOAD) :
|
||||||
{
|
{
|
||||||
|
/* Align the end of code region as per PMP region granularity */
|
||||||
|
. = ALIGN(_esp_pmp_align_size);
|
||||||
|
|
||||||
ALIGNED_SYMBOL(4, _iram_text_end)
|
ALIGNED_SYMBOL(4, _iram_text_end)
|
||||||
} > sram_seg
|
} > sram_seg
|
||||||
|
|
||||||
|
@ -173,6 +173,9 @@ SECTIONS
|
|||||||
/* Marks the end of IRAM code segment */
|
/* Marks the end of IRAM code segment */
|
||||||
.iram0.text_end (NOLOAD) :
|
.iram0.text_end (NOLOAD) :
|
||||||
{
|
{
|
||||||
|
/* Align the end of code region as per PMP region granularity */
|
||||||
|
. = ALIGN(_esp_pmp_align_size);
|
||||||
|
|
||||||
ALIGNED_SYMBOL(4, _iram_text_end)
|
ALIGNED_SYMBOL(4, _iram_text_end)
|
||||||
} > sram_seg
|
} > sram_seg
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user