drivers: crypto: add it51xxx sha256 driver

Implement a crypto sha256 driver for it51xxx series.

Signed-off-by: Yunshao Chiang <Yunshao.Chiang@ite.com.tw>
This commit is contained in:
Yunshao Chiang 2025-04-11 13:23:39 +08:00 committed by Benjamin Cabé
commit 8f8b223ff2
9 changed files with 349 additions and 0 deletions

View file

@ -40,6 +40,19 @@ config SOC_IT51XXX_USE_ILM
predictable than executing from Flash directly, and some code (such as code
that writes to the internal Flash) must execute out of RAM.
config SOC_IT51XXX_SHA256_HW_ACCELERATE
bool "HW SHA256 calculation"
help
IT51XXX HW support sha256 calculation, and its calculation is faster than FW.
config SOC_IT515XX_SHA256_DLM_OFFSET
hex
default 0x03E000
depends on SOC_IT51XXX_SHA256_HW_ACCELERATE
help
Due to the hardware requirements of the IT515XX, the SHA-256 data must be
placed within the specific address range (0x83E000 to 0x83EFFF by default).
config ILM_MAX_SIZE
int "ILM Size in kB"
default 4

View file

@ -79,6 +79,12 @@
#define RAM_BASE CONFIG_SRAM_BASE_ADDRESS
#define RAM_SIZE KB(CONFIG_SRAM_SIZE)
/* The IT515XX series must use the address range 0x83E000 to 0x83EFFF to calculate SHA */
#ifdef CONFIG_SOC_IT51XXX_SHA256_HW_ACCELERATE
#define SHA256_DLM_BASE (RAM_BASE + CONFIG_SOC_IT515XX_SHA256_DLM_OFFSET)
#define SHA256_DLM_LENGTH KB(4)
#endif
#ifdef CONFIG_RISCV_PMP
#define MPU_MIN_SIZE CONFIG_PMP_GRANULARITY
#define MPU_MIN_SIZE_ALIGN . = ALIGN(MPU_MIN_SIZE);
@ -104,6 +110,10 @@ MEMORY
#endif
RAM (rwx) : ORIGIN = RAM_BASE, LENGTH = RAM_SIZE
#ifdef CONFIG_SOC_IT51XXX_SHA256_HW_ACCELERATE
SHA256_DLM (rw) : ORIGIN = SHA256_DLM_BASE, LENGTH = SHA256_DLM_LENGTH
#endif
#if defined(CONFIG_LINKER_DEVNULL_MEMORY)
DEVNULL_ROM (rx) : ORIGIN = DEVNULL_ADDR, LENGTH = DEVNULL_SIZE
#endif
@ -443,6 +453,21 @@ GROUP_END(DTCM)
GROUP_END(RAMABLE_REGION)
#ifdef CONFIG_SOC_IT51XXX_SHA256_HW_ACCELERATE
GROUP_START(SHA256_DLM)
SECTION_PROLOGUE(it515xx_sha256_ram, (NOLOAD),)
{
__sha256_ram_block_start = .;
KEEP(*(.__sha256_ram_block))
ASSERT((ABSOLUTE(__sha256_ram_block_start) & 0xfff) == 0, \
"SHA256 DLM block must be 4KB aligned");
} GROUP_LINK_IN(SHA256_DLM)
GROUP_END(SHA256_DLM)
#endif
#include <zephyr/linker/debug-sections.ld>
/DISCARD/ : { *(.note.GNU-stack) }