fix(esp_security): Power up MPI memory registers when enabling MPI

Co-authored-by: Li HongXi <lihongxi@espressif.com>
This commit is contained in:
harshal.patil
2025-06-12 13:18:57 +05:30
parent 33d8c05d95
commit a7af364112
5 changed files with 10 additions and 16 deletions

View File

@@ -80,7 +80,10 @@ void esp_crypto_mpi_enable_periph_clk(bool enable)
MPI_RCC_ATOMIC() { MPI_RCC_ATOMIC() {
mpi_ll_enable_bus_clock(enable); mpi_ll_enable_bus_clock(enable);
if (enable) { if (enable) {
mpi_ll_power_up();
mpi_ll_reset_register(); mpi_ll_reset_register();
} else {
mpi_ll_power_down();
} }
} }
} }

View File

@@ -253,12 +253,14 @@ static void ds_acquire_enable(void)
// We also enable SHA and HMAC here. SHA is used by HMAC, HMAC is used by DS. // We also enable SHA and HMAC here. SHA is used by HMAC, HMAC is used by DS.
esp_crypto_hmac_enable_periph_clk(true); esp_crypto_hmac_enable_periph_clk(true);
esp_crypto_sha_enable_periph_clk(true); esp_crypto_sha_enable_periph_clk(true);
esp_crypto_mpi_enable_periph_clk(true);
esp_crypto_ds_enable_periph_clk(true); esp_crypto_ds_enable_periph_clk(true);
} }
static void ds_disable_release(void) static void ds_disable_release(void)
{ {
esp_crypto_ds_enable_periph_clk(false); esp_crypto_ds_enable_periph_clk(false);
esp_crypto_mpi_enable_periph_clk(false);
esp_crypto_sha_enable_periph_clk(false); esp_crypto_sha_enable_periph_clk(false);
esp_crypto_hmac_enable_periph_clk(false); esp_crypto_hmac_enable_periph_clk(false);

View File

@@ -15,7 +15,6 @@ size_t mpi_hal_calc_hardware_words(size_t words)
void mpi_hal_enable_hardware_hw_op(void) void mpi_hal_enable_hardware_hw_op(void)
{ {
mpi_ll_power_up();
while (mpi_ll_check_memory_init_complete()) { while (mpi_ll_check_memory_init_complete()) {
} }
// Note: from enabling RSA clock to here takes about 1.3us // Note: from enabling RSA clock to here takes about 1.3us
@@ -27,7 +26,7 @@ void mpi_hal_enable_hardware_hw_op(void)
void mpi_hal_disable_hardware_hw_op(void) void mpi_hal_disable_hardware_hw_op(void)
{ {
mpi_ll_power_down();
} }
void mpi_hal_interrupt_enable(bool enable) void mpi_hal_interrupt_enable(bool enable)

View File

@@ -1,5 +1,5 @@
/* /*
* SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD * SPDX-FileCopyrightText: 2023-2025 Espressif Systems (Shanghai) CO LTD
* *
* SPDX-License-Identifier: Unlicense OR CC0-1.0 * SPDX-License-Identifier: Unlicense OR CC0-1.0
*/ */
@@ -19,17 +19,13 @@
#include "hal/mpi_hal.h" #include "hal/mpi_hal.h"
#include "hal/mpi_ll.h" #include "hal/mpi_ll.h"
#include "mpi_params.h" #include "mpi_params.h"
#include "esp_crypto_periph_clk.h"
#define _DEBUG_ 0 #define _DEBUG_ 0
static void esp_mpi_enable_hardware_hw_op( void ) static void esp_mpi_enable_hardware_hw_op( void )
{ {
/* Enable RSA hardware */ esp_crypto_mpi_enable_periph_clk(true);
MPI_RCC_ATOMIC() {
mpi_ll_enable_bus_clock(true);
mpi_ll_reset_register();
}
mpi_hal_enable_hardware_hw_op(); mpi_hal_enable_hardware_hw_op();
} }
@@ -37,11 +33,7 @@ static void esp_mpi_enable_hardware_hw_op( void )
static void esp_mpi_disable_hardware_hw_op( void ) static void esp_mpi_disable_hardware_hw_op( void )
{ {
mpi_hal_disable_hardware_hw_op(); mpi_hal_disable_hardware_hw_op();
esp_crypto_mpi_enable_periph_clk(false);
/* Disable RSA hardware */
MPI_RCC_ATOMIC() {
mpi_ll_enable_bus_clock(false);
}
} }

View File

@@ -24,8 +24,6 @@ void esp_mpi_enable_hardware_hw_op( void )
void esp_mpi_disable_hardware_hw_op( void ) void esp_mpi_disable_hardware_hw_op( void )
{ {
mpi_hal_disable_hardware_hw_op();
/* Disable RSA hardware */ /* Disable RSA hardware */
esp_crypto_mpi_enable_periph_clk(false); esp_crypto_mpi_enable_periph_clk(false);