From caca62543be2b634c20a966b9fe80296e493f6e2 Mon Sep 17 00:00:00 2001 From: Armando Date: Mon, 10 Feb 2025 15:03:28 +0800 Subject: [PATCH 1/2] feat(mmu): supported find paddr caps by any paddr offset Closes https://github.com/espressif/esp-idf/issues/14988 --- components/esp_mm/esp_mmu_map.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/esp_mm/esp_mmu_map.c b/components/esp_mm/esp_mmu_map.c index 765813383e..735e81c605 100644 --- a/components/esp_mm/esp_mmu_map.c +++ b/components/esp_mm/esp_mmu_map.c @@ -351,7 +351,7 @@ IRAM_ATTR esp_err_t esp_mmu_paddr_find_caps(const esp_paddr_t paddr, mmu_mem_cap } //now we are only traversing the actual dynamically allocated blocks, dummy_head and dummy_tail are excluded already - if (mem_block->paddr_start == paddr) { + if (paddr >= mem_block->paddr_start && paddr < mem_block->paddr_end) { found = true; found_block = mem_block; break; From 771bbf2f6358f66eb82581ba18d90d010222f7f8 Mon Sep 17 00:00:00 2001 From: Armando Date: Mon, 10 Feb 2025 15:04:19 +0800 Subject: [PATCH 2/2] test(mmu): test can find paddr caps by any paddr offset --- .../esp_mm/test_apps/mm/main/test_mmap.c | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/components/esp_mm/test_apps/mm/main/test_mmap.c b/components/esp_mm/test_apps/mm/main/test_mmap.c index 3e52966a7e..2fd0f1a2c3 100644 --- a/components/esp_mm/test_apps/mm/main/test_mmap.c +++ b/components/esp_mm/test_apps/mm/main/test_mmap.c @@ -50,3 +50,23 @@ TEST_CASE("Can dump mapped block stats", "[mmu]") TEST_ESP_OK(esp_mmu_unmap(ptr1)); TEST_ESP_OK(esp_mmu_unmap(ptr2)); } + +TEST_CASE("Can find paddr caps by any paddr offset", "[mmu]") +{ + const esp_partition_t *part = s_get_partition(); + ESP_LOGI(TAG, "found partition '%s' at offset 0x%"PRIx32" with size 0x%"PRIx32, part->label, part->address, part->size); + + void *ptr0 = NULL; + TEST_ESP_OK(esp_mmu_map(part->address, TEST_BLOCK_SIZE, MMU_TARGET_FLASH0, MMU_MEM_CAP_READ, 0, &ptr0)); + + mmu_mem_caps_t caps = 0; + TEST_ESP_OK(esp_mmu_paddr_find_caps(part->address, &caps)); + ESP_LOGI(TAG, "caps: 0x%x", caps); + TEST_ASSERT(caps == MMU_MEM_CAP_READ); + + TEST_ESP_OK(esp_mmu_paddr_find_caps(part->address + 0x100, &caps)); + ESP_LOGI(TAG, "caps: 0x%x", caps); + TEST_ASSERT(caps == MMU_MEM_CAP_READ); + + TEST_ESP_OK(esp_mmu_unmap(ptr0)); +}