Add mmu pages available check in non-secure image hash check path.

Made MMU pages available check in `esp_image_format.c`
This now makes it possible to map and process bootoader image as well in chunks when image doesn't fit completely into available free pages.

Signed-off-by: Vikram Dattu <vikram.dattu@espressif.com>
This commit is contained in:
Vikram Dattu 2019-06-19 17:23:44 +05:30
parent 13069ecb26
commit e155cd7a78

View file

@ -368,24 +368,22 @@ static esp_err_t process_segment(int index, uint32_t flash_addr, esp_image_segme
} }
#endif // BOOTLOADER_BUILD #endif // BOOTLOADER_BUILD
#ifndef BOOTLOADER_BUILD uint32_t free_page_count = bootloader_mmap_get_free_pages();
uint32_t free_page_count = spi_flash_mmap_get_free_pages(SPI_FLASH_MMAP_DATA); ESP_LOGD(TAG, "free data page_count 0x%08x", free_page_count);
ESP_LOGD(TAG, "free data page_count 0x%08x",free_page_count);
uint32_t offset_page = 0; int32_t data_len_remain = data_len;
while (data_len >= free_page_count * SPI_FLASH_MMU_PAGE_SIZE) { while (data_len_remain > 0) {
offset_page = ((data_addr & MMAP_ALIGNED_MASK) != 0)?1:0; uint32_t offset_page = ((data_addr & MMAP_ALIGNED_MASK) != 0) ? 1 : 0;
err = process_segment_data(load_addr, data_addr, (free_page_count - offset_page) * SPI_FLASH_MMU_PAGE_SIZE, do_load, sha_handle, checksum); /* Data we could map in case we are not aligned to PAGE boundary is one page size lesser. */
if (err != ESP_OK) { data_len = MIN(data_len_remain, ((free_page_count - offset_page) * SPI_FLASH_MMU_PAGE_SIZE));
return err;
}
data_addr += (free_page_count - offset_page) * SPI_FLASH_MMU_PAGE_SIZE;
data_len -= (free_page_count - offset_page) * SPI_FLASH_MMU_PAGE_SIZE;
}
#endif
err = process_segment_data(load_addr, data_addr, data_len, do_load, sha_handle, checksum); err = process_segment_data(load_addr, data_addr, data_len, do_load, sha_handle, checksum);
if (err != ESP_OK) { if (err != ESP_OK) {
return err; return err;
} }
data_addr += data_len;
data_len_remain -= data_len;
}
return ESP_OK; return ESP_OK;
err: err: