System: fix RTCFAST section alignment

This bugfix contains 3 fixes:
1. .rtc_dummy section is removed (not needed for C3)
2. .rtc_text section is padded with 16B for possible CPU prefetch
3. .rtc_text section is aligned to 4B boundary to comply with PMS Memprot requirements
This commit is contained in:
Martin Vychodil
2021-12-22 21:58:20 +01:00
parent ba50a4e25e
commit 60386410ae

View File

@@ -16,25 +16,19 @@ SECTIONS
.rtc.text : .rtc.text :
{ {
. = ALIGN(4); . = ALIGN(4);
_rtc_fast_start = ABSOLUTE(.);
mapping[rtc_text] mapping[rtc_text]
*rtc_wake_stub*.*(.literal .text .literal.* .text.*) *rtc_wake_stub*.*(.literal .text .literal.* .text.*)
/* 16B padding for possible CPU prefetch and 4B alignment for PMS split lines */
. += _esp_memprot_prefetch_pad_size;
. = ALIGN(4);
_rtc_text_end = ABSOLUTE(.); _rtc_text_end = ABSOLUTE(.);
} > rtc_iram_seg } > rtc_iram_seg
/**
* This section is required to skip rtc.text area because rtc_iram_seg and
* rtc_data_seg are reflect the same address space on different buses.
*/
.rtc.dummy :
{
_rtc_dummy_start = ABSOLUTE(.);
_rtc_fast_start = ABSOLUTE(.);
. = SIZEOF(.rtc.text);
_rtc_dummy_end = ABSOLUTE(.);
} > rtc_data_seg
/** /**
* This section located in RTC FAST Memory area. * This section located in RTC FAST Memory area.
* It holds data marked with RTC_FAST_ATTR attribute. * It holds data marked with RTC_FAST_ATTR attribute.
@@ -374,11 +368,11 @@ SECTIONS
/* Marks the end of IRAM code segment */ /* Marks the end of IRAM code segment */
.iram0.text_end (NOLOAD) : .iram0.text_end (NOLOAD) :
{ {
/* iram_end_test section exists for use by memprot unit tests only */
*(.iram_end_test)
/* ESP32-C3 memprot requires 16B padding for possible CPU prefetch and 512B alignment for PMS split lines */ /* ESP32-C3 memprot requires 16B padding for possible CPU prefetch and 512B alignment for PMS split lines */
. += _esp_memprot_prefetch_pad_size; . += _esp_memprot_prefetch_pad_size;
. = ALIGN(_esp_memprot_align_size); . = ALIGN(_esp_memprot_align_size);
/* iram_end_test section exists for use by memprot unit tests only */
*(.iram_end_test)
_iram_text_end = ABSOLUTE(.); _iram_text_end = ABSOLUTE(.);
} > iram0_0_seg } > iram0_0_seg