From 2b6f12ba51d14337ac9f85825755e92adb26d8ea Mon Sep 17 00:00:00 2001 From: "harshal.patil" Date: Tue, 5 Mar 2024 15:06:39 +0530 Subject: [PATCH] fix(hal/crypto): Do not reset parent crypto clk when resetting a crypto peripheral --- components/hal/esp32p4/include/hal/clk_gate_ll.h | 16 ++++++++-------- components/hal/esp32p4/include/hal/ds_ll.h | 2 -- components/hal/esp32p4/include/hal/ecc_ll.h | 2 -- components/hal/esp32p4/include/hal/ecdsa_ll.h | 2 -- components/hal/esp32p4/include/hal/hmac_ll.h | 2 -- components/hal/esp32p4/include/hal/key_mgr_ll.h | 2 -- components/hal/esp32p4/include/hal/mpi_ll.h | 2 -- 7 files changed, 8 insertions(+), 20 deletions(-) diff --git a/components/hal/esp32p4/include/hal/clk_gate_ll.h b/components/hal/esp32p4/include/hal/clk_gate_ll.h index 012b45cd0c..caf46ad96e 100644 --- a/components/hal/esp32p4/include/hal/clk_gate_ll.h +++ b/components/hal/esp32p4/include/hal/clk_gate_ll.h @@ -67,40 +67,40 @@ static inline uint32_t periph_ll_get_rst_en_mask(periph_module_t periph, bool en case PERIPH_SARADC_MODULE: return HP_SYS_CLKRST_REG_RST_EN_ADC; case PERIPH_AES_MODULE: - ret = HP_SYS_CLKRST_REG_RST_EN_CRYPTO | HP_SYS_CLKRST_REG_RST_EN_AES; + ret = HP_SYS_CLKRST_REG_RST_EN_AES; if (enable == true) { // Clear reset on digital signature, otherwise AES unit is held in reset ret |= HP_SYS_CLKRST_REG_RST_EN_DS; } return ret; case PERIPH_DS_MODULE: - return HP_SYS_CLKRST_REG_RST_EN_CRYPTO | HP_SYS_CLKRST_REG_RST_EN_DS; + return HP_SYS_CLKRST_REG_RST_EN_DS; case PERIPH_ECC_MODULE: - ret = HP_SYS_CLKRST_REG_RST_EN_CRYPTO | HP_SYS_CLKRST_REG_RST_EN_ECC; + ret = HP_SYS_CLKRST_REG_RST_EN_ECC; if (enable == true) { ret |= HP_SYS_CLKRST_REG_RST_EN_ECDSA; } return ret; case PERIPH_HMAC_MODULE: - return HP_SYS_CLKRST_REG_RST_EN_CRYPTO | HP_SYS_CLKRST_REG_RST_EN_HMAC; + return HP_SYS_CLKRST_REG_RST_EN_HMAC; case PERIPH_RSA_MODULE: - ret = HP_SYS_CLKRST_REG_RST_EN_CRYPTO | HP_SYS_CLKRST_REG_RST_EN_RSA; + ret = HP_SYS_CLKRST_REG_RST_EN_RSA; if (enable == true) { // Clear reset on digital signature, and ECDSA, otherwise RSA is held in reset ret |= HP_SYS_CLKRST_REG_RST_EN_DS | HP_SYS_CLKRST_REG_RST_EN_ECDSA; } return ret; case PERIPH_SEC_MODULE: - return HP_SYS_CLKRST_REG_RST_EN_CRYPTO | HP_SYS_CLKRST_REG_RST_EN_SEC; + return HP_SYS_CLKRST_REG_RST_EN_SEC; case PERIPH_SHA_MODULE: - ret = HP_SYS_CLKRST_REG_RST_EN_CRYPTO | HP_SYS_CLKRST_REG_RST_EN_SHA; + ret = HP_SYS_CLKRST_REG_RST_EN_SHA; if (enable == true) { // Clear reset on digital signature, HMAC and ECDSA, otherwise SHA is held in reset ret |= (HP_SYS_CLKRST_REG_RST_EN_HMAC | HP_SYS_CLKRST_REG_RST_EN_DS | HP_SYS_CLKRST_REG_RST_EN_ECDSA); } return ret; case PERIPH_ECDSA_MODULE: - return HP_SYS_CLKRST_REG_RST_EN_CRYPTO | HP_SYS_CLKRST_REG_RST_EN_ECDSA; + return HP_SYS_CLKRST_REG_RST_EN_ECDSA; case PERIPH_EMAC_MODULE: return LP_CLKRST_RST_EN_EMAC; default: diff --git a/components/hal/esp32p4/include/hal/ds_ll.h b/components/hal/esp32p4/include/hal/ds_ll.h index 64d556e040..3873a9311e 100644 --- a/components/hal/esp32p4/include/hal/ds_ll.h +++ b/components/hal/esp32p4/include/hal/ds_ll.h @@ -46,8 +46,6 @@ static inline void ds_ll_reset_register(void) { HP_SYS_CLKRST.hp_rst_en2.reg_rst_en_ds = 1; HP_SYS_CLKRST.hp_rst_en2.reg_rst_en_ds = 0; - HP_SYS_CLKRST.hp_rst_en2.reg_rst_en_crypto = 1; - HP_SYS_CLKRST.hp_rst_en2.reg_rst_en_crypto = 0; } /// use a macro to wrap the function, force the caller to use it in a critical section diff --git a/components/hal/esp32p4/include/hal/ecc_ll.h b/components/hal/esp32p4/include/hal/ecc_ll.h index be25321fe4..7320b4123c 100644 --- a/components/hal/esp32p4/include/hal/ecc_ll.h +++ b/components/hal/esp32p4/include/hal/ecc_ll.h @@ -46,8 +46,6 @@ static inline void ecc_ll_reset_register(void) { HP_SYS_CLKRST.hp_rst_en2.reg_rst_en_ecc = 1; HP_SYS_CLKRST.hp_rst_en2.reg_rst_en_ecc = 0; - HP_SYS_CLKRST.hp_rst_en2.reg_rst_en_crypto = 1; - HP_SYS_CLKRST.hp_rst_en2.reg_rst_en_crypto = 0; // Clear reset on ECDSA, otherwise ECC is held in reset HP_SYS_CLKRST.hp_rst_en2.reg_rst_en_ecdsa = 0; diff --git a/components/hal/esp32p4/include/hal/ecdsa_ll.h b/components/hal/esp32p4/include/hal/ecdsa_ll.h index b30b078b41..fe4123b9fc 100644 --- a/components/hal/esp32p4/include/hal/ecdsa_ll.h +++ b/components/hal/esp32p4/include/hal/ecdsa_ll.h @@ -91,8 +91,6 @@ static inline void ecdsa_ll_reset_register(void) { HP_SYS_CLKRST.hp_rst_en2.reg_rst_en_ecdsa = 1; HP_SYS_CLKRST.hp_rst_en2.reg_rst_en_ecdsa = 0; - HP_SYS_CLKRST.hp_rst_en2.reg_rst_en_crypto = 1; - HP_SYS_CLKRST.hp_rst_en2.reg_rst_en_crypto = 0; } /** diff --git a/components/hal/esp32p4/include/hal/hmac_ll.h b/components/hal/esp32p4/include/hal/hmac_ll.h index 8772385259..b2bc080045 100644 --- a/components/hal/esp32p4/include/hal/hmac_ll.h +++ b/components/hal/esp32p4/include/hal/hmac_ll.h @@ -53,8 +53,6 @@ static inline void hmac_ll_reset_register(void) { HP_SYS_CLKRST.hp_rst_en2.reg_rst_en_hmac = 1; HP_SYS_CLKRST.hp_rst_en2.reg_rst_en_hmac = 0; - HP_SYS_CLKRST.hp_rst_en2.reg_rst_en_crypto = 1; - HP_SYS_CLKRST.hp_rst_en2.reg_rst_en_crypto = 0; } /// use a macro to wrap the function, force the caller to use it in a critical section diff --git a/components/hal/esp32p4/include/hal/key_mgr_ll.h b/components/hal/esp32p4/include/hal/key_mgr_ll.h index bcf68a199f..04acb90c1e 100644 --- a/components/hal/esp32p4/include/hal/key_mgr_ll.h +++ b/components/hal/esp32p4/include/hal/key_mgr_ll.h @@ -59,8 +59,6 @@ static inline void key_mgr_ll_reset_register(void) { HP_SYS_CLKRST.hp_rst_en2.reg_rst_en_km = 1; HP_SYS_CLKRST.hp_rst_en2.reg_rst_en_km = 0; - HP_SYS_CLKRST.hp_rst_en2.reg_rst_en_crypto = 1; - HP_SYS_CLKRST.hp_rst_en2.reg_rst_en_crypto = 0; } /// use a macro to wrap the function, force the caller to use it in a critical section diff --git a/components/hal/esp32p4/include/hal/mpi_ll.h b/components/hal/esp32p4/include/hal/mpi_ll.h index 00360a8ddc..ebe4b55858 100644 --- a/components/hal/esp32p4/include/hal/mpi_ll.h +++ b/components/hal/esp32p4/include/hal/mpi_ll.h @@ -39,8 +39,6 @@ static inline void mpi_ll_reset_register(void) { HP_SYS_CLKRST.hp_rst_en2.reg_rst_en_rsa = 1; HP_SYS_CLKRST.hp_rst_en2.reg_rst_en_rsa = 0; - HP_SYS_CLKRST.hp_rst_en2.reg_rst_en_crypto = 1; - HP_SYS_CLKRST.hp_rst_en2.reg_rst_en_crypto = 0; // Clear reset on digital signature and ECDSA, otherwise RSA is held in reset HP_SYS_CLKRST.hp_rst_en2.reg_rst_en_ds = 0;