156 lines
3.3 KiB
C
156 lines
3.3 KiB
C
/*
|
|
* SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
#include "soc/soc_caps.h"
|
|
#include "esp_private/esp_crypto_lock_internal.h"
|
|
#include "sdkconfig.h"
|
|
|
|
#if SOC_AES_SUPPORTED
|
|
#include "hal/aes_ll.h"
|
|
#endif
|
|
#if SOC_SHA_SUPPORTED
|
|
#include "hal/sha_ll.h"
|
|
#endif
|
|
#if SOC_MPI_SUPPORTED
|
|
#include "hal/mpi_ll.h"
|
|
#endif
|
|
#if SOC_ECC_SUPPORTED
|
|
#include "hal/ecc_ll.h"
|
|
#endif
|
|
/* NOTE: For ESP32-S2, the HMAC and DS are implemented in the ROM */
|
|
#if SOC_HMAC_SUPPORTED && !CONFIG_IDF_TARGET_ESP32S2
|
|
#include "hal/hmac_ll.h"
|
|
#endif
|
|
#if SOC_DIG_SIGN_SUPPORTED && !CONFIG_IDF_TARGET_ESP32S2
|
|
#include "hal/ds_ll.h"
|
|
#endif
|
|
#if SOC_ECDSA_SUPPORTED
|
|
#include "hal/ecdsa_ll.h"
|
|
#endif
|
|
#if SOC_KEY_MANAGER_SUPPORTED
|
|
#include "hal/key_mgr_ll.h"
|
|
#endif
|
|
/* Crypto DMA, shared between AES and SHA */
|
|
#if SOC_AES_CRYPTO_DMA && SOC_SHA_CRYPTO_DMA
|
|
#include "hal/crypto_dma_ll.h"
|
|
#endif
|
|
|
|
#if SOC_AES_SUPPORTED
|
|
void esp_crypto_aes_enable_periph_clk(bool enable)
|
|
{
|
|
AES_RCC_ATOMIC() {
|
|
aes_ll_enable_bus_clock(enable);
|
|
if (enable) {
|
|
aes_ll_reset_register();
|
|
}
|
|
#if SOC_AES_CRYPTO_DMA
|
|
crypto_dma_ll_enable_bus_clock(enable);
|
|
if (enable) {
|
|
crypto_dma_ll_reset_register();
|
|
}
|
|
#endif
|
|
}
|
|
}
|
|
#endif
|
|
|
|
#if SOC_SHA_SUPPORTED
|
|
void esp_crypto_sha_enable_periph_clk(bool enable)
|
|
{
|
|
SHA_RCC_ATOMIC() {
|
|
sha_ll_enable_bus_clock(enable);
|
|
if (enable) {
|
|
sha_ll_reset_register();
|
|
}
|
|
#if SOC_SHA_CRYPTO_DMA
|
|
crypto_dma_ll_enable_bus_clock(enable);
|
|
if (enable) {
|
|
crypto_dma_ll_reset_register();
|
|
}
|
|
#endif
|
|
}
|
|
}
|
|
#endif
|
|
|
|
#if SOC_MPI_SUPPORTED
|
|
void esp_crypto_mpi_enable_periph_clk(bool enable)
|
|
{
|
|
MPI_RCC_ATOMIC() {
|
|
mpi_ll_enable_bus_clock(enable);
|
|
if (enable) {
|
|
mpi_ll_power_up();
|
|
mpi_ll_reset_register();
|
|
} else {
|
|
mpi_ll_power_down();
|
|
}
|
|
}
|
|
}
|
|
#endif
|
|
|
|
#if SOC_ECC_SUPPORTED
|
|
void esp_crypto_ecc_enable_periph_clk(bool enable)
|
|
{
|
|
ECC_RCC_ATOMIC() {
|
|
ecc_ll_enable_bus_clock(enable);
|
|
if (enable) {
|
|
ecc_ll_power_up();
|
|
ecc_ll_reset_register();
|
|
} else {
|
|
ecc_ll_power_down();
|
|
}
|
|
}
|
|
}
|
|
#endif
|
|
|
|
#if SOC_HMAC_SUPPORTED && !CONFIG_IDF_TARGET_ESP32S2
|
|
void esp_crypto_hmac_enable_periph_clk(bool enable)
|
|
{
|
|
HMAC_RCC_ATOMIC() {
|
|
hmac_ll_enable_bus_clock(enable);
|
|
if (enable) {
|
|
hmac_ll_reset_register();
|
|
}
|
|
}
|
|
}
|
|
#endif
|
|
|
|
#if SOC_DIG_SIGN_SUPPORTED && !CONFIG_IDF_TARGET_ESP32S2
|
|
void esp_crypto_ds_enable_periph_clk(bool enable)
|
|
{
|
|
DS_RCC_ATOMIC() {
|
|
ds_ll_enable_bus_clock(enable);
|
|
if (enable) {
|
|
ds_ll_reset_register();
|
|
}
|
|
}
|
|
}
|
|
#endif
|
|
|
|
#if SOC_ECDSA_SUPPORTED
|
|
void esp_crypto_ecdsa_enable_periph_clk(bool enable)
|
|
{
|
|
ECDSA_RCC_ATOMIC() {
|
|
ecdsa_ll_enable_bus_clock(enable);
|
|
if (enable) {
|
|
ecdsa_ll_reset_register();
|
|
}
|
|
}
|
|
}
|
|
#endif
|
|
|
|
#if SOC_KEY_MANAGER_SUPPORTED
|
|
void esp_crypto_key_mgr_enable_periph_clk(bool enable)
|
|
{
|
|
KEY_MANAGER_RCC_ATOMIC() {
|
|
key_mgr_ll_power_up();
|
|
key_mgr_ll_enable_bus_clock(enable);
|
|
key_mgr_ll_enable_peripheral_clock(enable);
|
|
if (enable) {
|
|
key_mgr_ll_reset_register();
|
|
}
|
|
}
|
|
}
|
|
#endif
|