/*************************************************************************** * * Copyright 2015-2020 BES. * All rights reserved. All unpublished rights reserved. * * No part of this work may be used or reproduced in any form or by any * means, or stored in a database or retrieval system, without prior written * permission of BES. * * Use of this work is governed by a license granted by BES. * This work contains confidential and proprietary information of * BES. which is protected by copyright, trade secret, * trademark and other intellectual property rights. * ****************************************************************************/ #ifndef __REG_SEC_ENG_H__ #define __REG_SEC_ENG_H__ #include "plat_types.h" #include "plat_addr_map.h" #define SE_ADEC_BASE (SEC_ENG_BASE + 0x0400) #define SE_DMACFG_BASE (SEC_ENG_BASE + 0x0800) #define SE_ACB_BASE (SEC_ENG_BASE + 0x0C00) #define SE_CRYPT_BASE (SEC_ENG_BASE + 0x1000) #define SE_ECP_BASE (SEC_ENG_BASE + 0x1400) #define SE_HASH_BASE (SEC_ENG_BASE + 0x1800) #define SE_SCRATCH_BASE (SEC_ENG_BASE + 0x1C00) #define SE_ZMODP_BASE (SEC_ENG_BASE + 0x2000) #define SE_MCT_BASE (SEC_ENG_BASE + 0x2400) #define SE_OTP_BASE (SEC_ENG_BASE + 0x2800) #define SE_EBG_BASE (SEC_ENG_BASE + 0x2C00) #define SE_DMA_RX_FIFO_DEPTH 32 #define SE_DMA_TX_FIFO_DEPTH 16 struct SE_ADEC_T { __IO uint32_t ADEC_CTRL; // 0x000 __IO uint32_t ADEC_CTRL2; // 0x004 __IO uint32_t RESERVED_00C; // 0x008 __IO uint32_t ADEC_INT; // 0x00C __IO uint32_t ADEC_INT_MSK; // 0x010 __IO uint32_t ADEC_ERR_ADR; // 0x014 __IO uint32_t RESERVED_018; // 0x018 }; struct SE_DMACFG_T { __IO uint32_t DMA_CTRL; // 0x000 __IO uint32_t DMA_TDL; // 0x004 __IO uint32_t DMA_RDL; // 0x008 __IO uint32_t DMA_STATUS; // 0x00C __IO uint32_t DMA_TXFIFO; // 0x010 __IO uint32_t DMA_RXFIFO; // 0x014 __IO uint32_t DMA_FIFOCLR; // 0x018 }; struct SE_ACB_T { __IO uint32_t ACB_CTRL; // 0x000 }; struct SE_CRYPT_T { __IO uint32_t AES_CFG; // 0x000 __IO uint32_t AES_CTRL; // 0x004 __IO uint32_t AES_CMD; // 0x008 __IO uint32_t AES_STATUS; // 0x00C __IO uint32_t AES_INTRPT; // 0x010 __IO uint32_t AES_INTRPT_SRC_EN; // 0x014 __IO uint32_t AES_STREAM_SIZE; // 0x018 __IO uint32_t DES_CFG; // 0x01C __IO uint32_t DES_CTRL; // 0x020 __IO uint32_t DES_CMD; // 0x024 __IO uint32_t DES_STATUS; // 0x028 __IO uint32_t DES_INTRPT; // 0x02C __IO uint32_t DES_INTRPT_SRC_EN; // 0x030 __IO uint32_t DES_STREAM_SIZE; // 0x034 __IO uint32_t RC4_CFG; // 0x038 __IO uint32_t RC4_CTRL; // 0x03C __IO uint32_t RC4_CMD; // 0x040 __IO uint32_t RC4_STATUS; // 0x044 __IO uint32_t RC4_INTRPT; // 0x048 __IO uint32_t RC4_INTRPT_SRC_EN; // 0x04C __IO uint32_t RC4_STREAM_SIZE; // 0x050 __IO uint32_t RC4_INDEX; // 0x054 __IO uint32_t KEY2[8]; // 0x058 __IO uint32_t KEY1[8]; // 0x078 __IO uint32_t IV[4]; // 0x098 __IO uint32_t ENGINE_SELECT; // 0x0A8 }; struct SE_ECP_T { __IO uint32_t ECP_CFG; // 0x000 __IO uint32_t ECP_CTRL; // 0x004 __IO uint32_t ECP_CMD; // 0x008 __IO uint32_t ECP_INTRPT; // 0x00C __IO uint32_t ECP_STATUS; // 0x010 __IO uint32_t ECP_INTRPT_MASK; // 0x014 __IO uint32_t ECP_SRAM[136]; // 0x018 }; struct SE_HASH_T { __IO uint32_t HASH_CFG; // 0x000 __IO uint32_t HASH_CTRL; // 0x004 __IO uint32_t HASH_CMD; // 0x008 __IO uint32_t HASH_STATUS; // 0x00C __IO uint32_t HASH_SEG_SIZE; // 0x010 __IO uint32_t RESERVED_014; // 0x014 __IO uint32_t HASH_MSG_SIZE_L; // 0x018 __IO uint32_t HASH_MSG_SIZE_H; // 0x01C __IO uint32_t HASH_CTX[8]; // 0x020 __IO uint32_t HASH_CTX_H[8]; // 0x040 __IO uint32_t HMAC_CTX[8]; // 0x060 __IO uint32_t HMAC_CTX_H[8]; // 0x080 __IO uint32_t HMAC_KEY_LEN; // 0x0A0 __IO uint32_t HMAC_KEY[32]; // 0x0A4 }; struct SE_SCRATCH_T { __IO uint32_t SP_CTRL; // 0x000 __IO uint32_t SP_STATUS; // 0x004 __IO uint32_t SP_CPU_WR_ADDR; // 0x008 __IO uint32_t SP_CPU_WR_DATA; // 0x00C __IO uint32_t SP_CPU_RD_ADDR; // 0x010 __IO uint32_t SP_CPU_RD_DATA; // 0x014 __IO uint32_t SP_SET_WR_ADDR; // 0x018 __IO uint32_t SP_SET_RD_ADDR; // 0x01C }; struct SE_ZMODP_T { __IO uint32_t ZMODP_CFG; // 0x000 __IO uint32_t ZMODP_CTRL; // 0x004 __IO uint32_t ZMODP_CMD; // 0x008 __IO uint32_t ZMODP_STATUS; // 0x00C __IO uint32_t ZMODP_INTRPT_SRC; // 0x010 __IO uint32_t ZMODP_INTRPT_SRC_EN; // 0x014 __IO uint32_t ZMODP_MEM[196]; // 0x018 }; struct SE_MCT_T { __IO uint32_t MCT_CTRL; // 0x000 __IO uint32_t MCT_CMD; // 0x004 __IO uint32_t MCT_STATUS; // 0x008 __IO uint32_t MCT_INTRPT; // 0x00C __IO uint32_t MCT_INTRPT_MASK; // 0x010 __IO uint32_t MCT_VAL[5]; // 0x014 }; struct SE_OTP_T { __IO uint32_t OTP[16]; // 0x000 __IO uint32_t RESERVED_040[18]; // 0x040 __IO uint32_t CRYPT_KEY_CNTR; // 0x088 __IO uint32_t EBG_RNG_CTRL; // 0x08C }; struct SE_EBG_T { __IO uint32_t EBG_CTRL; // 0x000 __IO uint32_t EBG_ENTROPY; // 0x004 }; // ADEC_CTRL #define ADEC_CTRL_CLK_EN_15_0_SHIFT 16 #define ADEC_CTRL_CLK_EN_15_0_MASK (0xFFFF << ADEC_CTRL_CLK_EN_15_0_SHIFT) #define ADEC_CTRL_CLK_EN_15_0(n) BITFIELD_VAL(ADEC_CTRL_CLK_EN_15_0, n) #define ADEC_CTRL_RST_15_0_SHIFT 0 #define ADEC_CTRL_RST_15_0_MASK (0xFFFF << ADEC_CTRL_RST_15_0_SHIFT) #define ADEC_CTRL_RST_15_0(n) BITFIELD_VAL(ADEC_CTRL_RST_15_0, n) // ADEC_CTRL2 #define ADEC_CTRL2_CLK_EN_20_16_SHIFT 16 #define ADEC_CTRL2_CLK_EN_20_16_MASK (0x1F << ADEC_CTRL2_CLK_EN_20_16_SHIFT) #define ADEC_CTRL2_CLK_EN_20_16(n) BITFIELD_VAL(ADEC_CTRL2_CLK_EN_20_16, n) #define ADEC_CTRL2_RST_20_16_SHIFT 0 #define ADEC_CTRL2_RST_20_16_MASK (0x1F << ADEC_CTRL2_RST_20_16_SHIFT) #define ADEC_CTRL2_RST_20_16(n) BITFIELD_VAL(ADEC_CTRL2_RST_20_16, n) // DMA_CTRL #define DMA_CTRL_RX_DMA_SINGLE_DIS (1 << 3) #define DMA_CTRL_TX_DMA_SINGLE_DIS (1 << 2) #define DMA_CTRL_RX_DMA_EN (1 << 1) #define DMA_CTRL_TX_DMA_EN (1 << 0) // DMA_FIFOCLR #define DMA_FIFOCLR_RXFIFO_CLR (1 << 1) #define DMA_FIFOCLR_TXFIFO_CLR (1 << 0) // DMA_STATUS #define DMA_STATUS_RX_VALID_CNT_SHIFT 10 #define DMA_STATUS_RX_VALID_CNT_MASK (0x1F << DMA_STATUS_RX_VALID_CNT_SHIFT) #define DMA_STATUS_RX_VALID_CNT(n) BITFIELD_VAL(DMA_STATUS_RX_VALID_CNT, n) #define DMA_STATUS_RX_FULL (1 << 9) #define DMA_STATUS_RX_EMPTY (1 << 7) #define DMA_STATUS_TX_VALID_CNT_SHIFT 2 #define DMA_STATUS_TX_VALID_CNT_MASK (0x1F << DMA_STATUS_TX_VALID_CNT_SHIFT) #define DMA_STATUS_TX_VALID_CNT(n) BITFIELD_VAL(DMA_STATUS_TX_VALID_CNT, n) #define DMA_STATUS_TX_FULL (1 << 1) #define DMA_STATUS_TX_EMPTY (1 << 0) // ACB_CTRL #define ACB_CTRL_RSVD_31_11_SHIFT 11 #define ACB_CTRL_RSVD_31_11_MASK (0x1FFFFF << ACB_CTRL_RSVD_31_11_SHIFT) #define ACB_CTRL_RSVD_31_11(n) BITFIELD_VAL(ACB_CTRL_RSVD_31_11, n) #define ACB_CTRL_GROUPB_SELECT_SHIFT 8 #define ACB_CTRL_GROUPB_SELECT_MASK (0x7 << ACB_CTRL_GROUPB_SELECT_SHIFT) #define ACB_CTRL_GROUPB_SELECT(n) BITFIELD_VAL(ACB_CTRL_GROUPB_SELECT, n) #define ACB_CTRL_RSVD_7 (1 << 7) #define ACB_CTRL_GROUPA_SELECT_SHIFT 4 #define ACB_CTRL_GROUPA_SELECT_MASK (0x7 << ACB_CTRL_GROUPA_SELECT_SHIFT) #define ACB_CTRL_GROUPA_SELECT(n) BITFIELD_VAL(ACB_CTRL_GROUPA_SELECT, n) #define ACB_CTRL_RSVD_3 (1 << 3) #define ACB_CTRL_WR_CB_CTRL (1 << 2) #define ACB_CTRL_RSVD_1 (1 << 1) #define ACB_CTRL_RD_CB_CTRL (1 << 0) // AES_CFG #define AES_CFG_RSVD_31_17_SHIFT 17 #define AES_CFG_RSVD_31_17_MASK (0x7FFF << AES_CFG_RSVD_31_17_SHIFT) #define AES_CFG_RSVD_31_17(n) BITFIELD_VAL(AES_CFG_RSVD_31_17, n) #define AES_CFG_CTS_MODE (1 << 16) #define AES_CFG_RSVD (1 << 15) #define AES_CFG_MODULAR_SHIFT 8 #define AES_CFG_MODULAR_MASK (0x7F << AES_CFG_MODULAR_SHIFT) #define AES_CFG_MODULAR(n) BITFIELD_VAL(AES_CFG_MODULAR, n) #define AES_CFG_RSVD_7 (1 << 7) #define AES_CFG_RKEY (1 << 6) #define AES_CFG_MODE_SHIFT 3 #define AES_CFG_MODE_MASK (0x7 << AES_CFG_MODE_SHIFT) #define AES_CFG_MODE(n) BITFIELD_VAL(AES_CFG_MODE, n) #define AES_CFG_KEYLEN_SHIFT 1 #define AES_CFG_KEYLEN_MASK (0x3 << AES_CFG_KEYLEN_SHIFT) #define AES_CFG_KEYLEN(n) BITFIELD_VAL(AES_CFG_KEYLEN, n) #define AES_CFG_DECRYPT (1 << 0) // AES_CTRL #define AES_CTRL_RSVD_31_3_SHIFT 3 #define AES_CTRL_RSVD_31_3_MASK (0x1FFFFFFF << AES_CTRL_RSVD_31_3_SHIFT) #define AES_CTRL_RSVD_31_3(n) BITFIELD_VAL(AES_CTRL_RSVD_31_3, n) #define AES_CTRL_OUTPUTBLOCK (1 << 2) #define AES_CTRL_RESUME (1 << 1) #define AES_CTRL_RESET (1 << 0) // AES_CMD #define AES_CMD_RSVD_31_1_SHIFT 1 #define AES_CMD_RSVD_31_1_MASK (0x7FFFFFFF << AES_CMD_RSVD_31_1_SHIFT) #define AES_CMD_RSVD_31_1(n) BITFIELD_VAL(AES_CMD_RSVD_31_1, n) #define AES_CMD_START (1 << 0) // AES_STATUS #define AES_STATUS_RSVD_31_5_SHIFT 5 #define AES_STATUS_RSVD_31_5_MASK (0x7FFFFFF << AES_STATUS_RSVD_31_5_SHIFT) #define AES_STATUS_RSVD_31_5(n) BITFIELD_VAL(AES_STATUS_RSVD_31_5, n) #define AES_STATUS_STATE_SHIFT 1 #define AES_STATUS_STATE_MASK (0xF << AES_STATUS_STATE_SHIFT) #define AES_STATUS_STATE(n) BITFIELD_VAL(AES_STATUS_STATE, n) #define AES_STATUS_BUSY (1 << 0) // AES_INTRPT #define AES_INTRPT_RSVD_31_3_SHIFT 3 #define AES_INTRPT_RSVD_31_3_MASK (0x1FFFFFFF << AES_INTRPT_RSVD_31_3_SHIFT) #define AES_INTRPT_RSVD_31_3(n) BITFIELD_VAL(AES_INTRPT_RSVD_31_3, n) #define AES_INTRPT_ERROR2 (1 << 2) #define AES_INTRPT_ERROR1 (1 << 1) #define AES_INTRPT_DONE (1 << 0) // AES_INTRPT_SRC_EN #define AES_INTRPT_SRC_EN_RSVD_31_3_SHIFT 3 #define AES_INTRPT_SRC_EN_RSVD_31_3_MASK (0x1FFFFFFF << AES_INTRPT_SRC_EN_RSVD_31_3_SHIFT) #define AES_INTRPT_SRC_EN_RSVD_31_3(n) BITFIELD_VAL(AES_INTRPT_SRC_EN_RSVD_31_3, n) #define AES_INTRPT_SRC_EN_ERROR2 (1 << 2) #define AES_INTRPT_SRC_EN_ERROR1 (1 << 1) #define AES_INTRPT_SRC_EN_DONE (1 << 0) // ENGINE_SELECT #define ENGINE_SELECT_RSVD_31_2_SHIFT 2 #define ENGINE_SELECT_RSVD_31_2_MASK (0x3FFFFFFF << ENGINE_SELECT_RSVD_31_2_SHIFT) #define ENGINE_SELECT_RSVD_31_2(n) BITFIELD_VAL(ENGINE_SELECT_RSVD_31_2, n) #define ENGINE_SELECT_SELECT_SHIFT 0 #define ENGINE_SELECT_SELECT_MASK (0x3 << ENGINE_SELECT_SELECT_SHIFT) #define ENGINE_SELECT_SELECT(n) BITFIELD_VAL(ENGINE_SELECT_SELECT, n) // HASH_CFG #define HASH_CFG_RSVD_31_5_SHIFT 5 #define HASH_CFG_RSVD_31_5_MASK (0x7FFFFFF << HASH_CFG_RSVD_31_5_SHIFT) #define HASH_CFG_RSVD_31_5(n) BITFIELD_VAL(HASH_CFG_RSVD_31_5, n) #define HASH_CFG_OUTPUT_DATA_MODE (1 << 4) #define HASH_CFG_HASH_MODE (1 << 3) #define HASH_CFG_ALG_SELECT_SHIFT 0 #define HASH_CFG_ALG_SELECT_MASK (0x7 << HASH_CFG_ALG_SELECT_SHIFT) #define HASH_CFG_ALG_SELECT(n) BITFIELD_VAL(HASH_CFG_ALG_SELECT, n) // HASH_CTRL #define HASH_CTRL_RSVD_31_4_SHIFT 4 #define HASH_CTRL_RSVD_31_4_MASK (0xFFFFFFF << HASH_CTRL_RSVD_31_4_SHIFT) #define HASH_CTRL_RSVD_31_4(n) BITFIELD_VAL(HASH_CTRL_RSVD_31_4, n) #define HASH_CTRL_RESET (1 << 3) #define HASH_CTRL_HW_PADDING (1 << 2) #define HASH_CTRL_HASH_OP_MODE_SHIFT 0 #define HASH_CTRL_HASH_OP_MODE_MASK (0x3 << HASH_CTRL_HASH_OP_MODE_SHIFT) #define HASH_CTRL_HASH_OP_MODE(n) BITFIELD_VAL(HASH_CTRL_HASH_OP_MODE, n) // HASH_CMD #define HASH_CMD_RSVD_31_1_SHIFT 1 #define HASH_CMD_RSVD_31_1_MASK (0x7FFFFFFF << HASH_CMD_RSVD_31_1_SHIFT) #define HASH_CMD_RSVD_31_1(n) BITFIELD_VAL(HASH_CMD_RSVD_31_1, n) #define HASH_CMD_START (1 << 0) // HASH_STATUS #define HASH_STATUS_RSVD_31_4_SHIFT 4 #define HASH_STATUS_RSVD_31_4_MASK (0xFFFFFFF << HASH_STATUS_RSVD_31_4_SHIFT) #define HASH_STATUS_RSVD_31_4(n) BITFIELD_VAL(HASH_STATUS_RSVD_31_4, n) #define HASH_STATUS_HMAC_SM_BUSY (1 << 3) #define HASH_STATUS_XFER_SM_BUSY (1 << 2) #define HASH_STATUS_HASH_BUSY (1 << 1) #define HASH_STATUS_HASH_DONE (1 << 0) // HMAC_KEY_LEN #define HMAC_KEY_LEN_RSVD_31_8_SHIFT 8 #define HMAC_KEY_LEN_RSVD_31_8_MASK (0xFFFFFF << HMAC_KEY_LEN_RSVD_31_8_SHIFT) #define HMAC_KEY_LEN_RSVD_31_8(n) BITFIELD_VAL(HMAC_KEY_LEN_RSVD_31_8, n) #define HMAC_KEY_LEN_LEN_SHIFT 0 #define HMAC_KEY_LEN_LEN_MASK (0xFF << HMAC_KEY_LEN_LEN_SHIFT) #define HMAC_KEY_LEN_LEN(n) BITFIELD_VAL(HMAC_KEY_LEN_LEN, n) // CRYPT_KEY_CNTR #define CRYPT_KEY_CNTR_KEY_SEL (1 << 2) #define CRYPT_KEY_CNTR_DEV1_ENCRYPT (1 << 1) #define CRYPT_KEY_CNTR_DEV0_ENCRYPT (1 << 0) // EBG_RNG_CTRL #define EBG_RNG_CTRL_RNG_SEL (1 << 16) #define EBG_RNG_CTRL_SEED_SHIFT 0 #define EBG_RNG_CTRL_SEED_MASK (0xFFFF << EBG_RNG_CTRL_SEED_SHIFT) #define EBG_RNG_CTRL_SEED(n) BITFIELD_VAL(EBG_RNG_CTRL_SEED, n) #endif