11/*
2- * SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
2+ * SPDX-FileCopyrightText: 2024-2025 Espressif Systems (Shanghai) CO LTD
33 *
44 * SPDX-License-Identifier: Apache-2.0
55 */
@@ -16,7 +16,59 @@ static __attribute__((unused)) const char *TAG = "secure_boot";
1616
1717esp_err_t esp_secure_boot_enable_secure_features (void )
1818{
19- //TODO: [ESP32H21] IDF-11500
20- abort ();
19+ esp_efuse_write_field_bit (ESP_EFUSE_DIS_DIRECT_BOOT );
20+
21+ #ifdef CONFIG_SECURE_ENABLE_SECURE_ROM_DL_MODE
22+ ESP_LOGI (TAG , "Enabling Security download mode..." );
23+ esp_err_t err = esp_efuse_enable_rom_secure_download_mode ();
24+ if (err != ESP_OK ) {
25+ ESP_LOGE (TAG , "Could not enable Security download mode..." );
26+ return err ;
27+ }
28+ #elif CONFIG_SECURE_DISABLE_ROM_DL_MODE
29+ ESP_LOGI (TAG , "Disable ROM Download mode..." );
30+ esp_err_t err = esp_efuse_disable_rom_download_mode ();
31+ if (err != ESP_OK ) {
32+ ESP_LOGE (TAG , "Could not disable ROM Download mode..." );
33+ return err ;
34+ }
35+ #else
36+ ESP_LOGW (TAG , "UART ROM Download mode kept enabled - SECURITY COMPROMISED" );
37+ #endif
38+
39+ #ifdef SOC_ECDSA_P192_CURVE_DEFAULT_DISABLED
40+ esp_efuse_write_field_bit (ESP_EFUSE_WR_DIS_ECDSA_CURVE_MODE );
41+ #endif
42+
43+ #ifndef CONFIG_SECURE_BOOT_ALLOW_JTAG
44+ ESP_LOGI (TAG , "Disable hardware & software JTAG..." );
45+ esp_efuse_write_field_bit (ESP_EFUSE_DIS_PAD_JTAG );
46+ esp_efuse_write_field_bit (ESP_EFUSE_DIS_USB_JTAG );
47+ esp_efuse_write_field_cnt (ESP_EFUSE_SOFT_DIS_JTAG , ESP_EFUSE_SOFT_DIS_JTAG [0 ]-> bit_count );
48+ #else
49+ ESP_LOGW (TAG , "Not disabling JTAG - SECURITY COMPROMISED" );
50+ #endif
51+
52+ #ifdef CONFIG_SECURE_BOOT_ENABLE_AGGRESSIVE_KEY_REVOKE
53+ esp_efuse_write_field_bit (ESP_EFUSE_SECURE_BOOT_AGGRESSIVE_REVOKE );
54+ #endif
55+
56+ esp_efuse_write_field_bit (ESP_EFUSE_SECURE_BOOT_EN );
57+
58+ #ifndef CONFIG_SECURE_BOOT_V2_ALLOW_EFUSE_RD_DIS
59+ bool rd_dis_now = true;
60+ #ifdef CONFIG_SECURE_FLASH_ENC_ENABLED
61+ /* If flash encryption is not enabled yet then don't read-disable efuses yet, do it later in the boot
62+ when Flash Encryption is being enabled */
63+ rd_dis_now = esp_flash_encryption_enabled ();
64+ #endif
65+ if (rd_dis_now ) {
66+ ESP_LOGI (TAG , "Prevent read disabling of additional efuses..." );
67+ esp_efuse_write_field_bit (ESP_EFUSE_WR_DIS_RD_DIS );
68+ }
69+ #else
70+ ESP_LOGW (TAG , "Allowing read disabling of additional efuses - SECURITY COMPROMISED" );
71+ #endif
72+
2173 return ESP_OK ;
2274}
0 commit comments