mirror of
https://github.com/espressif/esp-idf.git
synced 2025-08-08 04:02:27 +00:00
mmu: driver framework, for vaddr maintenance
This commit gives basic mmu driver framework. Now it is able to maintain mmu virtual address usage on esp32, esp32s2 and esp32s3. Usage to external virtual address should rely on mmu functions to know which address range is available, instead of hardcoded. This commit also improves psram memory that is added to the heap allocator. Now it's added to the heap, according to the memory alignment. Closes https://github.com/espressif/esp-idf/issues/8295
This commit is contained in:
@@ -23,10 +23,7 @@ bool esp_ptr_dma_ext_capable(const void *p)
|
||||
return false;
|
||||
#endif //!SOC_PSRAM_DMA_CAPABLE
|
||||
#if CONFIG_SPIRAM
|
||||
intptr_t vaddr_start = 0;
|
||||
intptr_t vaddr_end = 0;
|
||||
esp_psram_extram_get_mapped_range(&vaddr_start, &vaddr_end);
|
||||
return (intptr_t)p >= vaddr_start && (intptr_t)p < vaddr_end;
|
||||
return esp_psram_check_ptr_addr(p);
|
||||
#else
|
||||
return false;
|
||||
#endif //CONFIG_SPIRAM
|
||||
@@ -44,10 +41,7 @@ bool esp_ptr_byte_accessible(const void *p)
|
||||
r |= (ip >= SOC_RTC_DRAM_LOW && ip < SOC_RTC_DRAM_HIGH);
|
||||
#endif
|
||||
#if CONFIG_SPIRAM
|
||||
intptr_t vaddr_start = 0;
|
||||
intptr_t vaddr_end = 0;
|
||||
esp_psram_extram_get_mapped_range(&vaddr_start, &vaddr_end);
|
||||
r |= (ip >= vaddr_start && ip < vaddr_end);
|
||||
r |= esp_psram_check_ptr_addr(p);
|
||||
#endif
|
||||
return r;
|
||||
}
|
||||
@@ -58,10 +52,7 @@ bool esp_ptr_external_ram(const void *p)
|
||||
return false;
|
||||
#endif //!SOC_SPIRAM_SUPPORTED
|
||||
#if CONFIG_SPIRAM
|
||||
intptr_t vaddr_start = 0;
|
||||
intptr_t vaddr_end = 0;
|
||||
esp_psram_extram_get_mapped_range(&vaddr_start, &vaddr_end);
|
||||
return (intptr_t)p >= vaddr_start && (intptr_t)p < vaddr_end;
|
||||
return esp_psram_check_ptr_addr(p);
|
||||
#else
|
||||
return false;
|
||||
#endif //CONFIG_SPIRAM
|
||||
@@ -70,10 +61,7 @@ bool esp_ptr_external_ram(const void *p)
|
||||
#if CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY
|
||||
bool esp_stack_ptr_in_extram(uint32_t sp)
|
||||
{
|
||||
intptr_t vaddr_start = 0;
|
||||
intptr_t vaddr_end = 0;
|
||||
esp_psram_extram_get_mapped_range(&vaddr_start, &vaddr_end);
|
||||
//Check if stack ptr is in between SOC_EXTRAM_DATA_LOW and SOC_EXTRAM_DATA_HIGH, and 16 byte aligned.
|
||||
return !(sp < vaddr_start + 0x10 || sp > vaddr_end - 0x10 || ((sp & 0xF) != 0));
|
||||
//Check if stack ptr is on PSRAM, and 16 byte aligned.
|
||||
return (esp_psram_check_ptr_addr((void *)sp) && ((sp & 0xF) == 0));
|
||||
}
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user