1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright (c) 2020, ARM Limited and Contributors. All rights reserved. 3*91f16700Schasinglulu * Copyright (c) 2019-2020, NVIDIA CORPORATION. All rights reserved. 4*91f16700Schasinglulu * 5*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 6*91f16700Schasinglulu */ 7*91f16700Schasinglulu 8*91f16700Schasinglulu #ifndef SE_PRIVATE_H 9*91f16700Schasinglulu #define SE_PRIVATE_H 10*91f16700Schasinglulu 11*91f16700Schasinglulu #include <lib/utils_def.h> 12*91f16700Schasinglulu #include <tegra_def.h> 13*91f16700Schasinglulu 14*91f16700Schasinglulu /* SE0 security register */ 15*91f16700Schasinglulu #define SE0_SECURITY U(0x18) 16*91f16700Schasinglulu #define SE0_SECURITY_SE_SOFT_SETTING (((uint32_t)1) << 16U) 17*91f16700Schasinglulu 18*91f16700Schasinglulu /* SE0 SHA GSCID register */ 19*91f16700Schasinglulu #define SE0_SHA_GSCID_0 U(0x100) 20*91f16700Schasinglulu 21*91f16700Schasinglulu /* SE0 config register */ 22*91f16700Schasinglulu #define SE0_SHA_CONFIG U(0x104) 23*91f16700Schasinglulu #define SE0_SHA_TASK_CONFIG U(0x108) 24*91f16700Schasinglulu #define SE0_SHA_CONFIG_HW_INIT_HASH (((uint32_t)1) << 0U) 25*91f16700Schasinglulu #define SE0_SHA_CONFIG_HW_INIT_HASH_DISABLE U(0) 26*91f16700Schasinglulu 27*91f16700Schasinglulu #define SE0_CONFIG_ENC_ALG_SHIFT U(12) 28*91f16700Schasinglulu #define SE0_CONFIG_ENC_ALG_SHA \ 29*91f16700Schasinglulu (((uint32_t)3) << SE0_CONFIG_ENC_ALG_SHIFT) 30*91f16700Schasinglulu #define SE0_CONFIG_DEC_ALG_SHIFT U(8) 31*91f16700Schasinglulu #define SE0_CONFIG_DEC_ALG_NOP \ 32*91f16700Schasinglulu (((uint32_t)0) << SE0_CONFIG_DEC_ALG_SHIFT) 33*91f16700Schasinglulu #define SE0_CONFIG_DST_SHIFT U(2) 34*91f16700Schasinglulu #define SE0_CONFIG_DST_HASHREG \ 35*91f16700Schasinglulu (((uint32_t)1) << SE0_CONFIG_DST_SHIFT) 36*91f16700Schasinglulu #define SHA256_HASH_SIZE_BYTES U(256) 37*91f16700Schasinglulu 38*91f16700Schasinglulu #define SE0_CONFIG_ENC_MODE_SHIFT U(24) 39*91f16700Schasinglulu #define SE0_CONFIG_ENC_MODE_SHA256 \ 40*91f16700Schasinglulu (((uint32_t)5) << SE0_CONFIG_ENC_MODE_SHIFT) 41*91f16700Schasinglulu 42*91f16700Schasinglulu /* SHA input message length */ 43*91f16700Schasinglulu #define SE0_IN_ADDR U(0x10c) 44*91f16700Schasinglulu #define SE0_IN_HI_ADDR_HI U(0x110) 45*91f16700Schasinglulu #define SE0_IN_HI_ADDR_HI_0_MSB_SHIFT U(24) 46*91f16700Schasinglulu 47*91f16700Schasinglulu /* SHA input message length */ 48*91f16700Schasinglulu #define SE0_SHA_MSG_LENGTH_0 U(0x11c) 49*91f16700Schasinglulu #define SE0_SHA_MSG_LENGTH_1 U(0x120) 50*91f16700Schasinglulu #define SE0_SHA_MSG_LENGTH_2 U(0x124) 51*91f16700Schasinglulu #define SE0_SHA_MSG_LENGTH_3 U(0x128) 52*91f16700Schasinglulu 53*91f16700Schasinglulu /* SHA input message left */ 54*91f16700Schasinglulu #define SE0_SHA_MSG_LEFT_0 U(0x12c) 55*91f16700Schasinglulu #define SE0_SHA_MSG_LEFT_1 U(0x130) 56*91f16700Schasinglulu #define SE0_SHA_MSG_LEFT_2 U(0x134) 57*91f16700Schasinglulu #define SE0_SHA_MSG_LEFT_3 U(0x138) 58*91f16700Schasinglulu 59*91f16700Schasinglulu /* SE HASH-RESULT */ 60*91f16700Schasinglulu #define SE0_SHA_HASH_RESULT_0 U(0x13c) 61*91f16700Schasinglulu 62*91f16700Schasinglulu /* SE OPERATION */ 63*91f16700Schasinglulu #define SE0_OPERATION_REG_OFFSET U(0x17c) 64*91f16700Schasinglulu #define SE0_UNIT_OPERATION_PKT_LASTBUF_SHIFT U(16) 65*91f16700Schasinglulu #define SE0_UNIT_OPERATION_PKT_LASTBUF_FIELD \ 66*91f16700Schasinglulu ((uint32_t)0x1 << SE0_UNIT_OPERATION_PKT_LASTBUF_SHIFT) 67*91f16700Schasinglulu #define SE0_OPERATION_SHIFT U(0) 68*91f16700Schasinglulu #define SE0_OP_START \ 69*91f16700Schasinglulu (((uint32_t)0x1) << SE0_OPERATION_SHIFT) 70*91f16700Schasinglulu 71*91f16700Schasinglulu /* SE Interrupt */ 72*91f16700Schasinglulu #define SE0_SHA_INT_ENABLE U(0x180) 73*91f16700Schasinglulu 74*91f16700Schasinglulu #define SE0_INT_STATUS_REG_OFFSET U(0x184) 75*91f16700Schasinglulu #define SE0_INT_OP_DONE_SHIFT U(4) 76*91f16700Schasinglulu #define SE0_INT_OP_DONE_CLEAR \ 77*91f16700Schasinglulu (((uint32_t)0U) << SE0_INT_OP_DONE_SHIFT) 78*91f16700Schasinglulu #define SE0_INT_OP_DONE(x) \ 79*91f16700Schasinglulu ((x) & (((uint32_t)0x1U) << SE0_INT_OP_DONE_SHIFT)) 80*91f16700Schasinglulu 81*91f16700Schasinglulu /* SE SHA Status */ 82*91f16700Schasinglulu #define SE0_SHA_STATUS_0 U(0x188) 83*91f16700Schasinglulu #define SE0_SHA_STATUS_IDLE U(0) 84*91f16700Schasinglulu 85*91f16700Schasinglulu /* SE error status */ 86*91f16700Schasinglulu #define SE0_ERR_STATUS_REG_OFFSET U(0x18c) 87*91f16700Schasinglulu #define SE0_ERR_STATUS_CLEAR U(0) 88*91f16700Schasinglulu 89*91f16700Schasinglulu /* SE error status */ 90*91f16700Schasinglulu #define SECURE_SCRATCH_TZDRAM_SHA256_HASH_START SECURE_SCRATCH_RSV68_LO 91*91f16700Schasinglulu #define SECURE_SCRATCH_TZDRAM_SHA256_HASH_END SECURE_SCRATCH_RSV71_HI 92*91f16700Schasinglulu 93*91f16700Schasinglulu /* SE0_INT_ENABLE_0 */ 94*91f16700Schasinglulu #define SE0_INT_ENABLE U(0x88) 95*91f16700Schasinglulu #define SE0_DISABLE_ALL_INT U(0x0) 96*91f16700Schasinglulu 97*91f16700Schasinglulu /* SE0_INT_STATUS_0 */ 98*91f16700Schasinglulu #define SE0_INT_STATUS U(0x8C) 99*91f16700Schasinglulu #define SE0_CLEAR_ALL_INT_STATUS U(0x3F) 100*91f16700Schasinglulu 101*91f16700Schasinglulu /* SE0_SHA_INT_STATUS_0 */ 102*91f16700Schasinglulu #define SHA_INT_STATUS U(0x184) 103*91f16700Schasinglulu #define SHA_SE_OP_DONE (U(1) << 4) 104*91f16700Schasinglulu 105*91f16700Schasinglulu /* SE0_SHA_ERR_STATUS_0 */ 106*91f16700Schasinglulu #define SHA_ERR_STATUS U(0x18C) 107*91f16700Schasinglulu 108*91f16700Schasinglulu /* SE0_AES0_INT_STATUS_0 */ 109*91f16700Schasinglulu #define AES0_INT_STATUS U(0x2F0) 110*91f16700Schasinglulu #define AES0_SE_OP_DONE (U(1) << 4) 111*91f16700Schasinglulu 112*91f16700Schasinglulu /* SE0_AES0_ERR_STATUS_0 */ 113*91f16700Schasinglulu #define AES0_ERR_STATUS U(0x2F8) 114*91f16700Schasinglulu 115*91f16700Schasinglulu /* SE0_AES1_INT_STATUS_0 */ 116*91f16700Schasinglulu #define AES1_INT_STATUS U(0x4F0) 117*91f16700Schasinglulu 118*91f16700Schasinglulu /* SE0_AES1_ERR_STATUS_0 */ 119*91f16700Schasinglulu #define AES1_ERR_STATUS U(0x4F8) 120*91f16700Schasinglulu 121*91f16700Schasinglulu /* SE0_RSA_INT_STATUS_0 */ 122*91f16700Schasinglulu #define RSA_INT_STATUS U(0x758) 123*91f16700Schasinglulu 124*91f16700Schasinglulu /* SE0_RSA_ERR_STATUS_0 */ 125*91f16700Schasinglulu #define RSA_ERR_STATUS U(0x760) 126*91f16700Schasinglulu 127*91f16700Schasinglulu /* SE0_AES0_OPERATION_0 */ 128*91f16700Schasinglulu #define AES0_OPERATION U(0x238) 129*91f16700Schasinglulu #define OP_MASK_BITS U(0x7) 130*91f16700Schasinglulu #define SE_OP_CTX_SAVE U(0x3) 131*91f16700Schasinglulu 132*91f16700Schasinglulu /* SE0_AES0_CTX_SAVE_CONFIG_0 */ 133*91f16700Schasinglulu #define CTX_SAVE_CONFIG U(0x2D4) 134*91f16700Schasinglulu 135*91f16700Schasinglulu /* SE0_AES0_CTX_SAVE_AUTO_STATUS_0 */ 136*91f16700Schasinglulu #define CTX_SAVE_AUTO_STATUS U(0x300) 137*91f16700Schasinglulu #define CTX_SAVE_AUTO_SE_READY U(0xFF) 138*91f16700Schasinglulu #define CTX_SAVE_AUTO_SE_BUSY (U(0x1) << 31) 139*91f16700Schasinglulu 140*91f16700Schasinglulu /* SE0_AES0_CTX_SAVE_AUTO_CTRL_0 */ 141*91f16700Schasinglulu #define CTX_SAVE_AUTO_CTRL U(0x304) 142*91f16700Schasinglulu #define SE_CTX_SAVE_AUTO_EN (U(0x1) << 0) 143*91f16700Schasinglulu #define SE_CTX_SAVE_AUTO_LOCK_EN (U(0x1) << 1) 144*91f16700Schasinglulu 145*91f16700Schasinglulu /* SE0_AES0_CTX_SAVE_AUTO_START_ADDR_0 */ 146*91f16700Schasinglulu #define CTX_SAVE_AUTO_START_ADDR U(0x308) 147*91f16700Schasinglulu 148*91f16700Schasinglulu /* SE0_AES0_CTX_SAVE_AUTO_START_ADDR_HI_0 */ 149*91f16700Schasinglulu #define CTX_SAVE_AUTO_START_ADDR_HI U(0x30C) 150*91f16700Schasinglulu 151*91f16700Schasinglulu /******************************************************************************* 152*91f16700Schasinglulu * Inline functions definition 153*91f16700Schasinglulu ******************************************************************************/ 154*91f16700Schasinglulu 155*91f16700Schasinglulu static inline uint32_t tegra_se_read_32(uint32_t offset) 156*91f16700Schasinglulu { 157*91f16700Schasinglulu return mmio_read_32((uint32_t)(TEGRA_SE0_BASE + offset)); 158*91f16700Schasinglulu } 159*91f16700Schasinglulu 160*91f16700Schasinglulu static inline void tegra_se_write_32(uint32_t offset, uint32_t val) 161*91f16700Schasinglulu { 162*91f16700Schasinglulu mmio_write_32((uint32_t)(TEGRA_SE0_BASE + offset), val); 163*91f16700Schasinglulu } 164*91f16700Schasinglulu 165*91f16700Schasinglulu #endif /* SE_PRIVATE_H */ 166