mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-11-03 22:08:28 +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