Merge branch 'refactor/shrink_bootloader_bin_size_3.1' into 'release/v3.1'

bootloader: shrink bin size (v3.1)

See merge request espressif/esp-idf!6305
This commit is contained in:
Ivan Grokhotkov 2019-10-18 13:40:15 +08:00
commit d91272f280
3 changed files with 43 additions and 8 deletions

View file

@ -70,6 +70,13 @@ bool bootloader_common_erase_part_type_data(const char *list_erase, bool ota_dat
*/ */
bool bootloader_common_label_search(const char *list, char *label); bool bootloader_common_label_search(const char *list, char *label);
/**
* @brief Get chip revision
*
* @return Chip revision number
*/
uint8_t bootloader_common_get_chip_revision(void);
/** /**
* @brief Check if the image (bootloader and application) has valid chip ID and revision * @brief Check if the image (bootloader and application) has valid chip ID and revision
* *

View file

@ -28,8 +28,9 @@
#include "bootloader_common.h" #include "bootloader_common.h"
#include "soc/gpio_periph.h" #include "soc/gpio_periph.h"
#include "soc/spi_reg.h" #include "soc/spi_reg.h"
#include "soc/efuse_reg.h"
#include "soc/apb_ctrl_reg.h"
#include "esp_image_format.h" #include "esp_image_format.h"
#include "esp_efuse.h"
static const char* TAG = "boot_comm"; static const char* TAG = "boot_comm";
@ -149,22 +150,49 @@ bool bootloader_common_erase_part_type_data(const char *list_erase, bool ota_dat
return ret; return ret;
} }
uint8_t bootloader_common_get_chip_revision(void)
{
uint8_t eco_bit0, eco_bit1, eco_bit2;
eco_bit0 = (REG_READ(EFUSE_BLK0_RDATA3_REG) & 0xF000) >> 15;
eco_bit1 = (REG_READ(EFUSE_BLK0_RDATA5_REG) & 0x100000) >> 20;
eco_bit2 = (REG_READ(APB_CTRL_DATE_REG) & 0x80000000) >> 31;
uint32_t combine_value = (eco_bit2 << 2) | (eco_bit1 << 1) | eco_bit0;
uint8_t chip_ver = 0;
switch (combine_value) {
case 0:
chip_ver = 0;
break;
case 1:
chip_ver = 1;
break;
case 3:
chip_ver = 2;
break;
case 7:
chip_ver = 3;
break;
default:
chip_ver = 0;
break;
}
return chip_ver;
}
esp_err_t bootloader_common_check_chip_validity(const esp_image_header_t* img_hdr) esp_err_t bootloader_common_check_chip_validity(const esp_image_header_t* img_hdr)
{ {
esp_err_t err = ESP_OK; esp_err_t err = ESP_OK;
esp_chip_id_t chip_id = CONFIG_IDF_FIRMWARE_CHIP_ID; esp_chip_id_t chip_id = CONFIG_IDF_FIRMWARE_CHIP_ID;
if (chip_id != img_hdr->chip_id) { if (chip_id != img_hdr->chip_id) {
ESP_LOGE(TAG, "image has invalid chip ID, expected at least %d, found %d", chip_id, img_hdr->chip_id); ESP_LOGE(TAG, "mismatch chip ID, expect %d, found %d", chip_id, img_hdr->chip_id);
err = ESP_FAIL; err = ESP_FAIL;
} }
uint8_t revision = esp_efuse_get_chip_ver(); uint8_t revision = bootloader_common_get_chip_revision();
if (revision < img_hdr->min_chip_rev) { if (revision < img_hdr->min_chip_rev) {
ESP_LOGE(TAG, "image has invalid chip revision, expected at least %d, found %d", revision, img_hdr->min_chip_rev); ESP_LOGE(TAG, "can't run on lower chip revision, expect %d, found %d", revision, img_hdr->min_chip_rev);
err = ESP_FAIL; err = ESP_FAIL;
} else if (revision != img_hdr->min_chip_rev) { } else if (revision != img_hdr->min_chip_rev) {
ESP_LOGI(TAG, "This chip is revision %d but project was configured for minimum revision %d. "\ ESP_LOGI(TAG, "mismatch chip revision, expect %d, found %d", revision, img_hdr->min_chip_rev);
"Suggest setting project minimum revision to %d if safe to do so.",
revision, img_hdr->min_chip_rev, revision);
} }
return err; return err;
} }

View file

@ -128,7 +128,7 @@ static esp_err_t bootloader_main()
return ESP_FAIL; return ESP_FAIL;
} }
/* Check chip ID and minimum chip revision that supported by this image */ /* Check chip ID and minimum chip revision that supported by this image */
uint8_t revision = esp_efuse_get_chip_ver(); uint8_t revision = bootloader_common_get_chip_revision();
ESP_LOGI(TAG, "Chip Revision: %d", revision); ESP_LOGI(TAG, "Chip Revision: %d", revision);
if (bootloader_common_check_chip_validity(&fhdr) != ESP_OK) { if (bootloader_common_check_chip_validity(&fhdr) != ESP_OK) {
return ESP_FAIL; return ESP_FAIL;