mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-10-31 04:59:55 +00:00 
			
		
		
		
	feat(examples): Get offsets for efuses from espefuse.py
This commit is contained in:
		| @@ -1,9 +1,12 @@ | |||||||
| # SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD | # SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD | ||||||
| # SPDX-License-Identifier: Apache-2.0 | # SPDX-License-Identifier: Apache-2.0 | ||||||
|  | import json | ||||||
| import logging | import logging | ||||||
| import os | import os | ||||||
|  | import tempfile | ||||||
|  | from typing import Any | ||||||
|  |  | ||||||
|  | import espefuse | ||||||
| import pytest | import pytest | ||||||
| from _pytest.fixtures import FixtureRequest | from _pytest.fixtures import FixtureRequest | ||||||
| from _pytest.monkeypatch import MonkeyPatch | from _pytest.monkeypatch import MonkeyPatch | ||||||
| @@ -52,6 +55,12 @@ class EfuseFlashEncSerial(IdfSerial): | |||||||
|         # Restore self.app.flash files to original value |         # Restore self.app.flash files to original value | ||||||
|         self.app.flash_files = prev_flash_files |         self.app.flash_files = prev_flash_files | ||||||
|  |  | ||||||
|  |     def erase_field_on_emul_efuse_by_name(self, efuse_names: list) -> None: | ||||||
|  |         pos_of_bits = [] | ||||||
|  |         for name in efuse_names: | ||||||
|  |             pos_of_bits.append(self.get_efuse_offset(name)) | ||||||
|  |         self.erase_field_on_emul_efuse(pos_of_bits) | ||||||
|  |  | ||||||
|     def erase_field_on_emul_efuse(self, pos_of_bits: list) -> None: |     def erase_field_on_emul_efuse(self, pos_of_bits: list) -> None: | ||||||
|         emul_efuse_bin_path = os.path.join(self.app.binary_path, 'emul_efuse.bin') |         emul_efuse_bin_path = os.path.join(self.app.binary_path, 'emul_efuse.bin') | ||||||
|         self.dump_flash(output=emul_efuse_bin_path, partition='emul_efuse') |         self.dump_flash(output=emul_efuse_bin_path, partition='emul_efuse') | ||||||
| @@ -86,6 +95,20 @@ class EfuseFlashEncSerial(IdfSerial): | |||||||
|         self.flash() |         self.flash() | ||||||
|         self.app.flash_files = prev_flash_files |         self.app.flash_files = prev_flash_files | ||||||
|  |  | ||||||
|  |     def get_efuse_offset(self, efuse_name: str) -> Any: | ||||||
|  |         with tempfile.NamedTemporaryFile(suffix='.json') as temp_file: | ||||||
|  |             temp_file_path = temp_file.name | ||||||
|  |             espefuse.main(f'--virt -c {self.target} summary --format json --file {temp_file_path}'.split()) | ||||||
|  |             with open(temp_file_path, 'r') as file: | ||||||
|  |                 efuse_summary = json.load(file) | ||||||
|  |                 if efuse_name in efuse_summary: | ||||||
|  |                     data = efuse_summary[efuse_name] | ||||||
|  |                     offset = int(data['word'] * 32) + data['pos'] | ||||||
|  |                     print(f'{efuse_name} offset = {offset}') | ||||||
|  |                     return offset | ||||||
|  |                 else: | ||||||
|  |                     raise ValueError(f"eFuse '{efuse_name}' not found in the summary.") | ||||||
|  |  | ||||||
|  |  | ||||||
| @pytest.fixture(scope='module') | @pytest.fixture(scope='module') | ||||||
| def monkeypatch_module(request: FixtureRequest) -> MonkeyPatch: | def monkeypatch_module(request: FixtureRequest) -> MonkeyPatch: | ||||||
|   | |||||||
| @@ -1,7 +1,5 @@ | |||||||
| # SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD | # SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD | ||||||
| # SPDX-License-Identifier: Unlicense OR CC0-1.0 | # SPDX-License-Identifier: Unlicense OR CC0-1.0 | ||||||
| from __future__ import unicode_literals |  | ||||||
|  |  | ||||||
| import logging | import logging | ||||||
| import os | import os | ||||||
|  |  | ||||||
| @@ -162,23 +160,12 @@ def test_examples_efuse_with_virt_flash_enc_pre_loaded(dut: Dut) -> None: | |||||||
|     dut.expect('example: Done') |     dut.expect('example: Done') | ||||||
|  |  | ||||||
|     if dut.app.target == 'esp32': |     if dut.app.target == 'esp32': | ||||||
|         print(' - Flash emul_efuse with pre-loaded efuses (FLASH_CRYPT_CNT 1 -> 0)') |         CRYPT_CNT_EFUSE_NAME = 'FLASH_CRYPT_CNT' | ||||||
|         # offset of this eFuse is taken from components/efuse/esp32/esp_efuse_table.csv |  | ||||||
|         FLASH_CRYPT_CNT = 20 |  | ||||||
|         # Resets eFuse, which enables Flash encryption feature |  | ||||||
|         dut.serial.erase_field_on_emul_efuse([FLASH_CRYPT_CNT]) |  | ||||||
|     elif dut.app.target == 'esp32c2': |  | ||||||
|         FLASH_CRYPT_CNT = 39 |  | ||||||
|         dut.serial.erase_field_on_emul_efuse([FLASH_CRYPT_CNT]) |  | ||||||
|     else: |     else: | ||||||
|         # offset of this eFuse is taken from components/efuse/{target}/esp_efuse_table.csv |         CRYPT_CNT_EFUSE_NAME = 'SPI_BOOT_CRYPT_CNT' | ||||||
|         print(' - Flash emul_efuse with pre-loaded efuses (SPI_BOOT_CRYPT_CNT 1 -> 0)') |     print(f' - Flash emul_efuse with pre-loaded efuses ({CRYPT_CNT_EFUSE_NAME} 1 -> 0)') | ||||||
|         if dut.app.target == 'esp32c61': |     # Resets eFuse, which enables Flash encryption feature | ||||||
|             SPI_BOOT_CRYPT_CNT = 55 |     dut.serial.erase_field_on_emul_efuse_by_name([CRYPT_CNT_EFUSE_NAME]) | ||||||
|         else: |  | ||||||
|             SPI_BOOT_CRYPT_CNT = 82 |  | ||||||
|         # Resets eFuse, which enables Flash encryption feature |  | ||||||
|         dut.serial.erase_field_on_emul_efuse([SPI_BOOT_CRYPT_CNT]) |  | ||||||
|  |  | ||||||
|     print(' - Start app (flash partition_table and app)') |     print(' - Start app (flash partition_table and app)') | ||||||
|     dut.serial.write_flash_no_enc() |     dut.serial.write_flash_no_enc() | ||||||
| @@ -336,10 +323,8 @@ def test_examples_efuse_with_virt_secure_boot_v1_pre_loaded(dut: Dut) -> None: | |||||||
|     dut.expect('example: Done') |     dut.expect('example: Done') | ||||||
|  |  | ||||||
|     print(' - Flash emul_efuse with pre-loaded efuses (ABS_DONE_0 1 -> 0)') |     print(' - Flash emul_efuse with pre-loaded efuses (ABS_DONE_0 1 -> 0)') | ||||||
|     # offset of this eFuse is taken from components/efuse/esp32/esp_efuse_table.csv |  | ||||||
|     ABS_DONE_0 = 196 |  | ||||||
|     # Resets eFuse, which enables Secure boot (V1) feature |     # Resets eFuse, which enables Secure boot (V1) feature | ||||||
|     dut.serial.erase_field_on_emul_efuse([ABS_DONE_0]) |     dut.serial.erase_field_on_emul_efuse_by_name(['ABS_DONE_0']) | ||||||
|  |  | ||||||
|     print(' - Start app (flash partition_table and app)') |     print(' - Start app (flash partition_table and app)') | ||||||
|     dut.serial.flash() |     dut.serial.flash() | ||||||
| @@ -442,10 +427,8 @@ def test_examples_efuse_with_virt_secure_boot_v2(dut: Dut) -> None: | |||||||
|     dut.expect('example: Done') |     dut.expect('example: Done') | ||||||
|  |  | ||||||
|     print(' - Flash emul_efuse with pre-loaded efuses (ABS_DONE_1 1 -> 0)') |     print(' - Flash emul_efuse with pre-loaded efuses (ABS_DONE_1 1 -> 0)') | ||||||
|     # offset of this eFuse is taken from components/efuse/esp32/esp_efuse_table.csv |  | ||||||
|     ABS_DONE_1 = 197 |  | ||||||
|     # Resets eFuse, which enables Secure boot (V2) feature |     # Resets eFuse, which enables Secure boot (V2) feature | ||||||
|     dut.serial.erase_field_on_emul_efuse([ABS_DONE_1]) |     dut.serial.erase_field_on_emul_efuse_by_name(['ABS_DONE_1']) | ||||||
|  |  | ||||||
|     print(' - Start app (flash partition_table and app)') |     print(' - Start app (flash partition_table and app)') | ||||||
|     dut.serial.flash() |     dut.serial.flash() | ||||||
| @@ -507,10 +490,8 @@ def test_examples_efuse_with_virt_secure_boot_v2_pre_loaded(dut: Dut) -> None: | |||||||
|     dut.expect('example: Done') |     dut.expect('example: Done') | ||||||
|  |  | ||||||
|     print(' - Flash emul_efuse with pre-loaded efuses (ABS_DONE_1 1 -> 0)') |     print(' - Flash emul_efuse with pre-loaded efuses (ABS_DONE_1 1 -> 0)') | ||||||
|     # offset of this eFuse is taken from components/efuse/esp32/esp_efuse_table.csv |  | ||||||
|     ABS_DONE_1 = 197 |  | ||||||
|     # Resets eFuse, which enables Secure boot (V2) feature |     # Resets eFuse, which enables Secure boot (V2) feature | ||||||
|     dut.serial.erase_field_on_emul_efuse([ABS_DONE_1]) |     dut.serial.erase_field_on_emul_efuse_by_name(['ABS_DONE_1']) | ||||||
|  |  | ||||||
|     print(' - Start app (flash partition_table and app)') |     print(' - Start app (flash partition_table and app)') | ||||||
|     dut.serial.flash() |     dut.serial.flash() | ||||||
| @@ -651,17 +632,12 @@ def test_example_efuse_with_virt_secure_boot_v2_esp32xx_pre_loaded(dut: Dut) -> | |||||||
|  |  | ||||||
|     print(' - Flash emul_efuse with pre-loaded efuses (SECURE_BOOT_EN 1 -> 0, SECURE_BOOT_KEY_REVOKE[0..2] -> 0)') |     print(' - Flash emul_efuse with pre-loaded efuses (SECURE_BOOT_EN 1 -> 0, SECURE_BOOT_KEY_REVOKE[0..2] -> 0)') | ||||||
|     # offsets of eFuses are taken from components/efuse/{target}/esp_efuse_table.csv |     # offsets of eFuses are taken from components/efuse/{target}/esp_efuse_table.csv | ||||||
|     if dut.app.target == 'esp32c2': |     # Resets eFuse, which enables Secure boot feature | ||||||
|         SECURE_BOOT_EN = 53 |     # Resets eFuses, which control digest slots | ||||||
|         dut.serial.erase_field_on_emul_efuse([SECURE_BOOT_EN]) |     if dut.app.sdkconfig.get('SOC_EFUSE_REVOKE_BOOT_KEY_DIGESTS'): | ||||||
|  |         dut.serial.erase_field_on_emul_efuse_by_name(['SECURE_BOOT_EN', 'SECURE_BOOT_KEY_REVOKE0', 'SECURE_BOOT_KEY_REVOKE1', 'SECURE_BOOT_KEY_REVOKE2']) | ||||||
|     else: |     else: | ||||||
|         SECURE_BOOT_EN = 116 |         dut.serial.erase_field_on_emul_efuse_by_name(['SECURE_BOOT_EN']) | ||||||
|         SECURE_BOOT_KEY_REVOKE0 = 85 |  | ||||||
|         SECURE_BOOT_KEY_REVOKE1 = 86 |  | ||||||
|         SECURE_BOOT_KEY_REVOKE2 = 87 |  | ||||||
|         # Resets eFuse, which enables Secure boot feature |  | ||||||
|         # Resets eFuses, which control digest slots |  | ||||||
|         dut.serial.erase_field_on_emul_efuse([SECURE_BOOT_EN, SECURE_BOOT_KEY_REVOKE0, SECURE_BOOT_KEY_REVOKE1, SECURE_BOOT_KEY_REVOKE2]) |  | ||||||
|  |  | ||||||
|     print(' - Start app (flash partition_table and app)') |     print(' - Start app (flash partition_table and app)') | ||||||
|     dut.serial.flash() |     dut.serial.flash() | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Konstantin Kondrashov
					Konstantin Kondrashov