Skip to content

Commit 735610e

Browse files
committed
flasher_stub/esp32: Removes limitation for number of supported partitions
1 parent 87178c7 commit 735610e

File tree

5 files changed

+377
-393
lines changed

5 files changed

+377
-393
lines changed

contrib/loaders/flash/esp32/stub_flasher.c

Lines changed: 15 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -611,7 +611,7 @@ static int stub_flash_get_app_mappings(uint32_t off, struct esp32_flash_mapping
611611
static int stub_flash_get_map(uint32_t app_off, uint32_t maps_addr)
612612
{
613613
esp_rom_spiflash_result_t rc;
614-
esp_partition_info_t parts[ESP32_STUB_PARTITION_TABLE_MAX_ENTRIES];
614+
esp_partition_info_t part;
615615
struct esp32_flash_mapping *flash_map = (struct esp32_flash_mapping *)maps_addr;
616616
uint32_t flash_size = stub_flash_get_size();
617617

@@ -621,34 +621,25 @@ static int stub_flash_get_map(uint32_t app_off, uint32_t maps_addr)
621621
return stub_flash_get_app_mappings(app_off, flash_map);
622622
}
623623

624-
rc = esp_rom_spiflash_read(ESP_PARTITION_TABLE_OFFSET, (uint32_t *)parts, sizeof(parts));
625-
if (rc != ESP_ROM_SPIFLASH_RESULT_OK) {
626-
STUB_LOGE("Failed to read partitions table (%d)!\n", rc);
627-
return ESP32_STUB_ERR_FAIL;
628-
}
629-
for (int i = 0; i < ESP32_STUB_PARTITION_TABLE_MAX_ENTRIES; i++) {
630-
if (parts[i].magic == 0xFFFF && parts[i].type == PART_TYPE_END && parts[i].subtype == PART_SUBTYPE_END) {
631-
STUB_LOGI("Found %d partitions\n", i);
632-
break;
633-
}
634-
if (parts[i].magic != ESP_PARTITION_MAGIC) {
635-
STUB_LOGE("Partition %d invalid magic number 0x%x!\n", i, parts[i].magic);
624+
for(uint32_t i = 0;; i++) {
625+
rc = esp_rom_spiflash_read(ESP_PARTITION_TABLE_OFFSET+i*sizeof(esp_partition_info_t), (uint32_t *)&part, sizeof(part));
626+
if (rc != ESP_ROM_SPIFLASH_RESULT_OK) {
627+
STUB_LOGE("Failed to read partitions table entrt (%d)!\n", rc);
636628
return ESP32_STUB_ERR_FAIL;
637629
}
638-
const esp_partition_pos_t *pos = &parts[i].pos;
639-
if (pos->offset > flash_size || pos->offset + pos->size > flash_size) {
630+
if (part.magic != ESP_PARTITION_MAGIC) {
631+
STUB_LOGI("No app partition found\n");
632+
break;
633+
}
634+
if (part.pos.offset > flash_size || part.pos.offset + part.pos.size > flash_size) {
640635
STUB_LOGE("Partition %d invalid - offset 0x%x size 0x%x exceeds flash chip size 0x%x\n",
641-
i, pos->offset, pos->size, flash_size);
636+
i, part.pos.offset, part.pos.size, flash_size);
642637
return ESP32_STUB_ERR_FAIL;
643638
}
644-
STUB_LOGD("Found partition %d, m 0x%x, t 0x%x, st 0x%x, l '%s'\n", i, parts[i].magic, parts[i].type, parts[i].subtype, parts[i].label);
645-
if (parts[i].type == PART_TYPE_APP) {
646-
STUB_LOGI("Found app partition: '%s' %d KB @ 0x%x\n", parts[i].label, pos->size / 1024, pos->offset);
647-
int ret = stub_flash_get_app_mappings(pos->offset, flash_map);
648-
if (ret != ESP32_STUB_ERR_OK) {
649-
return ret;
650-
}
651-
break;
639+
STUB_LOGD("Found partition %d, m 0x%x, t 0x%x, st 0x%x, l '%s'\n", i, part.magic, part.type, part.subtype, part.label);
640+
if (part.type == PART_TYPE_APP) {
641+
STUB_LOGI("Found app partition: '%s' %d KB @ 0x%x\n", part.label, part.pos.size / 1024, part.pos.offset);
642+
return stub_flash_get_app_mappings(part.pos.offset, flash_map);
652643
}
653644
}
654645
return ESP32_STUB_ERR_OK;

contrib/loaders/flash/esp32/stub_flasher.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@
3737
#define ESP32_STUB_CMD_FLASH_TEST (ESP32_STUB_CMD_FLASH_MAX_ID+1)
3838
#define ESP32_STUB_CMD_TEST 8
3939

40-
#define ESP32_STUB_PARTITION_TABLE_MAX_ENTRIES 10
4140
#define ESP32_STUB_FLASH_MAPPINGS_MAX_NUM 2 // IROM, DROM
4241

4342
#define ESP32_FLASH_SECTOR_SIZE 4096

0 commit comments

Comments
 (0)