Skip to content

Commit

Permalink
esp_hw_support(esp32): If the MAC_FACTORY CRC check fails, then esp_e…
Browse files Browse the repository at this point in the history
…fuse_mac_get_default returns INVALID_CRC instead of abort

Closes #10401
  • Loading branch information
KonstantinKondrashov committed Jan 23, 2023
1 parent c41bb46 commit 7a23bf1
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 4 deletions.
9 changes: 9 additions & 0 deletions components/esp_hw_support/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,15 @@ menu "Hardware Settings"

# Insert chip-specific MAC config
rsource "./port/$IDF_TARGET/Kconfig.mac"

config ESP_MAC_IGNORE_MAC_CRC_ERROR
bool "Ignore MAC CRC error (not recommended)"
depends on IDF_TARGET_ESP32
default n
help
If you have an invalid MAC CRC (ESP_ERR_INVALID_CRC) problem
and you still want to use this chip, you can enable this option to bypass such an error.
This applies to both MAC_FACTORY and CUSTOM_MAC efuses.
endmenu

menu "Sleep Config"
Expand Down
10 changes: 9 additions & 1 deletion components/esp_hw_support/mac_addr.c
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,11 @@ esp_err_t esp_efuse_mac_get_custom(uint8_t *mac)

if (efuse_crc != calc_crc) {
ESP_LOGE(TAG, "Base MAC address from BLK3 of EFUSE CRC error, efuse_crc = 0x%02x; calc_crc = 0x%02x", efuse_crc, calc_crc);
#ifdef CONFIG_ESP_MAC_IGNORE_MAC_CRC_ERROR
ESP_LOGW(TAG, "Ignore MAC CRC error");
#else
return ESP_ERR_INVALID_CRC;
#endif
}
return ESP_OK;
#endif
Expand Down Expand Up @@ -134,7 +138,11 @@ esp_err_t esp_efuse_mac_get_default(uint8_t *mac)
return ESP_OK;
} else {
ESP_LOGE(TAG, "Base MAC address from BLK0 of EFUSE CRC error, efuse_crc = 0x%02x; calc_crc = 0x%02x", efuse_crc, calc_crc);
abort();
#ifdef CONFIG_ESP_MAC_IGNORE_MAC_CRC_ERROR
ESP_LOGW(TAG, "Ignore MAC CRC error");
#else
return ESP_ERR_INVALID_CRC;
#endif
}
}
#endif // CONFIG_IDF_TARGET_ESP32
Expand Down
6 changes: 3 additions & 3 deletions components/esp_phy/src/phy_init.c
Original file line number Diff line number Diff line change
Expand Up @@ -603,7 +603,7 @@ static esp_err_t load_cal_data_from_nvs_handle(nvs_handle_t handle,
return ESP_ERR_INVALID_SIZE;
}
uint8_t sta_mac[6];
esp_efuse_mac_get_default(sta_mac);
ESP_ERROR_CHECK(esp_efuse_mac_get_default(sta_mac));
if (memcmp(sta_mac, cal_data_mac, sizeof(sta_mac)) != 0) {
ESP_LOGE(TAG, "%s: calibration data MAC check failed: expected " \
MACSTR ", found " MACSTR,
Expand Down Expand Up @@ -635,7 +635,7 @@ static esp_err_t store_cal_data_to_nvs_handle(nvs_handle_t handle,
}

uint8_t sta_mac[6];
esp_efuse_mac_get_default(sta_mac);
ESP_ERROR_CHECK(esp_efuse_mac_get_default(sta_mac));
err = nvs_set_blob(handle, PHY_CAL_MAC_KEY, sta_mac, sizeof(sta_mac));
if (err != ESP_OK) {
ESP_LOGE(TAG, "%s: store calibration mac failed(0x%x)\n", __func__, err);
Expand Down Expand Up @@ -726,7 +726,7 @@ void esp_phy_load_cal_and_init(void)
calibration_mode = PHY_RF_CAL_FULL;
}

esp_efuse_mac_get_default(sta_mac);
ESP_ERROR_CHECK(esp_efuse_mac_get_default(sta_mac));
memcpy(cal_data->mac, sta_mac, 6);
esp_err_t ret = register_chipv7_phy(init_data, cal_data, calibration_mode);
if (ret == ESP_CAL_DATA_CHECK_FAIL) {
Expand Down

0 comments on commit 7a23bf1

Please sign in to comment.