Fix S3-PSRAM mapping with later bootloaders (#3637)

* Fix S3-PSRAM mapping with later bootloaders

* CHANGELOG.md

* Panic if `cache_dbus_mmu_set` fails
This commit is contained in:
Björn Quentin 2025-06-16 14:00:37 +02:00 committed by GitHub
parent 0579805d12
commit 57dede24e1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 12 additions and 6 deletions

View File

@ -21,6 +21,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Fixed a typo in the ESP32-C3 memory linker script, causing ICACHE to not be defined (#3613)
- Prevent bootloops when DRAM is close to being full. (#3635)
- Fix PSRAM mapping on ESP32-S3 when the bootloader used the last page to access flash (#3637)
### Removed

View File

@ -179,7 +179,10 @@ pub(crate) fn init_psram(config: PsramConfig) {
// https://docs.espressif.com/projects/esp-idf/en/stable/esp32s3/api-reference/system/mm.html#introduction
let mmu_table_ptr = DR_REG_MMU_TABLE as *const u32;
let mut mapped_pages = 0;
for i in (0..FLASH_MMU_TABLE_SIZE).rev() {
// the bootloader is using the last page to access flash internally
// (e.g. to read the app descriptor) so we just skip that
for i in (0..(FLASH_MMU_TABLE_SIZE - 1)).rev() {
if mmu_table_ptr.add(i).read_volatile() != MMU_INVALID {
mapped_pages = (i + 1) as u32;
break;
@ -205,17 +208,14 @@ pub(crate) fn init_psram(config: PsramConfig) {
CONFIG_ESP32S3_DATA_CACHE_LINE_SIZE,
);
if cache_dbus_mmu_set(
let cache_dbus_mmu_set_res = cache_dbus_mmu_set(
MMU_ACCESS_SPIRAM,
start,
START_PAGE << 16,
64,
config.size.get() as u32 / 1024 / 64, // number of pages to map
0,
) != 0
{
panic!("cache_dbus_mmu_set failed");
}
);
EXTMEM::regs().dcache_ctrl1().modify(|_, w| {
w.dcache_shut_core0_bus()
@ -226,6 +226,11 @@ pub(crate) fn init_psram(config: PsramConfig) {
Cache_Resume_DCache(0);
// panic AFTER resuming the cache
if cache_dbus_mmu_set_res != 0 {
panic!("cache_dbus_mmu_set failed");
}
start
};