diff --git a/drivers/crypto/tegra-hv-vse-safety.c b/drivers/crypto/tegra-hv-vse-safety.c index 7b1b3f00..da1d0d9b 100644 --- a/drivers/crypto/tegra-hv-vse-safety.c +++ b/drivers/crypto/tegra-hv-vse-safety.c @@ -70,37 +70,169 @@ #define TEGRA_VIRTUAL_SE_AES_GCM_IV_SIZE 12 #define TEGRA_VIRTUAL_SE_AES_MAX_IV_SIZE TEGRA_VIRTUAL_SE_AES_IV_SIZE +/* Virtual Security Engines */ +#define TEGRA_VIRTUAL_SE_CMD_ENG_AES 0x01000000U +#define TEGRA_VIRTUAL_SE_CMD_ENG_SHA 0x02000000U +#define TEGRA_VIRTUAL_SE_CMD_ENG_TSEC 0x03000000U + +/* Command categories for AES Engine */ +#define TEGRA_VIRTUAL_SE_CMD_CATEGORY_ENC_DEC 0x00010000U +#define TEGRA_VIRTUAL_SE_CMD_CATEGORY_AUTH 0x00020000U +#define TEGRA_VIRTUAL_SE_CMD_CATEGORY_RNG 0x00030000U + +/* Command categories for SHA Engine */ +#define TEGRA_VIRTUAL_SE_CMD_CATEGORY_SHA 0x00010000U + +/* Command categories for TSEC Engine */ +#define TEGRA_VIRTUAL_SE_CMD_CATEGORY_TSEC_KEYS 0x00010000U +#define TEGRA_VIRTUAL_SE_CMD_CATEGORY_TSEC_AUTH 0x00020000U + +/* Command sets for Encryption/Decryption with AES Engine */ +#define TEGRA_VIRTUAL_SE_CMD_SET_AES_ENC_DEC 0x00001000U +#define TEGRA_VIRTUAL_SE_CMD_SET_GCM_ENC_DEC 0x00002000U + +/* Command sets for Authentication using AES engine */ +#define TEGRA_VIRTUAL_SE_CMD_SET_CMAC 0x00001000U +#define TEGRA_VIRTUAL_SE_CMD_SET_GMAC 0x00002000U + +/* Commands in the AES Encryption/Decryption set */ +#define TEGRA_VIRTUAL_SE_CMD_OP_AES_ENC_INIT 0x00000001U +#define TEGRA_VIRTUAL_SE_CMD_OP_AES_ENC 0x00000002U +#define TEGRA_VIRTUAL_SE_CMD_OP_AES_DEC 0x00000003U + +/* Commands in the GCM Encryption/Decryption set */ +#define TEGRA_VIRTUAL_SE_CMD_OP_GCM_ENC 0x00000001U +#define TEGRA_VIRTUAL_SE_CMD_OP_GCM_DEC 0x00000002U +#define TEGRA_VIRTUAL_SE_CMD_OP_GCM_GET_DEC 0x00000003U + +/* Commands in the CMAC Authentication set*/ +#define TEGRA_VIRTUAL_SE_CMD_OP_CMAC_SIGN 0x00000001U +#define TEGRA_VIRTUAL_SE_CMD_OP_CMAC_VERIFY 0x00000002U +#define TEGRA_VIRTUAL_SE_CMD_OP_CMAC_GET_SIGN 0x00000003U +#define TEGRA_VIRTUAL_SE_CMD_OP_CMAC_GET_VERIFY 0x00000004U + +/* Commands in the GMAC Authentication set */ +#define TEGRA_VIRTUAL_SE_CMD_OP_GMAC_INIT 0x00000001U +#define TEGRA_VIRTUAL_SE_CMD_OP_GMAC_SIGN 0x00000002U +#define TEGRA_VIRTUAL_SE_CMD_OP_GMAC_VERIFY 0x00000003U +#define TEGRA_VIRTUAL_SE_CMD_OP_GMAC_GET_VERIFY 0x00000004U +#define TEGRA_VIRTUAL_SE_CMD_OP_GMAC_GET_IV 0x00000005U + +/* Commands in the AES RNG Category*/ +#define TEGRA_VIRTUAL_SE_CMD_OP_AES_RNG 0x00000001U + +/* Commands in the SHA Category */ +#define TEGRA_VIRTUAL_SE_CMD_OP_SHA 0x00000001U + +/* Commands in the TSEC keys category */ +#define TEGRA_VIRTUAL_SE_CMD_OP_TSEC_KEYLOAD_STATUS 0x00000001U + +/* Commands in the TSEC Authentication category */ +#define TEGRA_VIRTUAL_SE_CMD_OP_TSEC_CMAC_SIGN \ + TEGRA_VIRTUAL_SE_CMD_OP_CMAC_SIGN +#define TEGRA_VIRTUAL_SE_CMD_OP_TSEC_GET_CMAC_SIGN \ + TEGRA_VIRTUAL_SE_CMD_OP_CMAC_GET_SIGN +#define TEGRA_VIRTUAL_SE_CMD_OP_TSEC_CMAC_VERIFY \ + TEGRA_VIRTUAL_SE_CMD_OP_CMAC_VERIFY +#define TEGRA_VIRTUAL_SE_CMD_OP_TSEC_GET_CMAC_VERIFY \ + TEGRA_VIRTUAL_SE_CMD_OP_CMAC_GET_VERIFY + #define TEGRA_VIRTUAL_SE_CMD_AES_SET_KEY 0xF1 #define TEGRA_VIRTUAL_SE_CMD_AES_ALLOC_KEY 0xF0 -#define TEGRA_VIRTUAL_SE_CMD_AES_ENCRYPT_INIT 0x20 -#define TEGRA_VIRTUAL_SE_CMD_AES_ENCRYPT 0x21 -#define TEGRA_VIRTUAL_SE_CMD_AES_DECRYPT 0x22 + +#define TEGRA_VIRTUAL_SE_CMD_AES_ENCRYPT_INIT (TEGRA_VIRTUAL_SE_CMD_ENG_AES \ + | TEGRA_VIRTUAL_SE_CMD_CATEGORY_ENC_DEC \ + | TEGRA_VIRTUAL_SE_CMD_SET_AES_ENC_DEC \ + | TEGRA_VIRTUAL_SE_CMD_OP_AES_ENC_INIT) +#define TEGRA_VIRTUAL_SE_CMD_AES_ENCRYPT (TEGRA_VIRTUAL_SE_CMD_ENG_AES \ + | TEGRA_VIRTUAL_SE_CMD_CATEGORY_ENC_DEC \ + | TEGRA_VIRTUAL_SE_CMD_SET_AES_ENC_DEC \ + | TEGRA_VIRTUAL_SE_CMD_OP_AES_ENC) +#define TEGRA_VIRTUAL_SE_CMD_AES_DECRYPT (TEGRA_VIRTUAL_SE_CMD_ENG_AES \ + | TEGRA_VIRTUAL_SE_CMD_CATEGORY_ENC_DEC \ + | TEGRA_VIRTUAL_SE_CMD_SET_AES_ENC_DEC \ + | TEGRA_VIRTUAL_SE_CMD_OP_AES_DEC) + #define TEGRA_VIRTUAL_SE_CMD_AES_CMAC 0x23 #define TEGRA_VIRTUAL_SE_CMD_AES_CMAC_GEN_SUBKEY 0x24 -#define TEGRA_VIRTUAL_SE_CMD_AES_RNG_DBRG 0x25 -#define TEGRA_VIRTUAL_SE_CMD_AES_GCM_CMD_ENCRYPT 0x27 -#define TEGRA_VIRTUAL_SE_CMD_AES_GCM_CMD_DECRYPT 0x28 -#define TEGRA_VIRTUAL_SE_CMD_AES_CMAC_SIGN 0x32 -#define TEGRA_VIRTUAL_SE_CMD_AES_CMAC_VERIFY 0x33 -#define TEGRA_VIRTUAL_SE_CMD_AES_CMD_GET_GMAC_IV 0x34 -#define TEGRA_VIRTUAL_SE_CMD_AES_CMD_GET_CMAC_SIGN 0x35 -#define TEGRA_VIRTUAL_SE_CMD_AES_CMD_GET_CMAC_VERIFY 0x36 -#define TEGRA_VIRTUAL_SE_CMD_AES_CMD_GET_GMAC_VERIFY 0x37 -#define TEGRA_VIRTUAL_SE_CMD_AES_CMD_GET_GCM_DEC 0x38 -#define TEGRA_VIRTUAL_SE_CMD_TSEC_SIGN 0x40 -#define TEGRA_VIRTUAL_SE_CMD_AES_CMD_GET_TSEC_SIGN 0x41 -#define TEGRA_VIRTUAL_SE_CMD_TSEC_VERIFY 0x42 -#define TEGRA_VIRTUAL_SE_CMD_AES_CMD_GET_TSEC_VERIFY 0x43 -#define TEGRA_VIRTUAL_TSEC_CMD_GET_KEYLOAD_STATUS 0x44 -#define TEGRA_VIRTUAL_SE_CMD_AES_GMAC_CMD_INIT (0x29U) -#define TEGRA_VIRTUAL_SE_CMD_AES_GMAC_CMD_SIGN (0x30U) -#define TEGRA_VIRTUAL_SE_CMD_AES_GMAC_CMD_VERIFY (0x31U) +#define TEGRA_VIRTUAL_SE_CMD_AES_RNG_DBRG (TEGRA_VIRTUAL_SE_CMD_ENG_AES \ + | TEGRA_VIRTUAL_SE_CMD_CATEGORY_RNG \ + | TEGRA_VIRTUAL_SE_CMD_OP_AES_RNG) + +#define TEGRA_VIRTUAL_SE_CMD_AES_GCM_CMD_ENCRYPT (TEGRA_VIRTUAL_SE_CMD_ENG_AES \ + | TEGRA_VIRTUAL_SE_CMD_CATEGORY_ENC_DEC \ + | TEGRA_VIRTUAL_SE_CMD_SET_GCM_ENC_DEC \ + | TEGRA_VIRTUAL_SE_CMD_OP_GCM_ENC) +#define TEGRA_VIRTUAL_SE_CMD_AES_GCM_CMD_DECRYPT (TEGRA_VIRTUAL_SE_CMD_ENG_AES \ + | TEGRA_VIRTUAL_SE_CMD_CATEGORY_ENC_DEC \ + | TEGRA_VIRTUAL_SE_CMD_SET_GCM_ENC_DEC \ + | TEGRA_VIRTUAL_SE_CMD_OP_GCM_DEC) +#define TEGRA_VIRTUAL_SE_CMD_AES_CMD_GET_GCM_DEC (TEGRA_VIRTUAL_SE_CMD_ENG_AES \ + | TEGRA_VIRTUAL_SE_CMD_CATEGORY_ENC_DEC \ + | TEGRA_VIRTUAL_SE_CMD_SET_GCM_ENC_DEC \ + | TEGRA_VIRTUAL_SE_CMD_OP_GCM_GET_DEC) + +#define TEGRA_VIRTUAL_SE_CMD_AES_CMAC_SIGN (TEGRA_VIRTUAL_SE_CMD_ENG_AES \ + | TEGRA_VIRTUAL_SE_CMD_CATEGORY_AUTH \ + | TEGRA_VIRTUAL_SE_CMD_SET_CMAC \ + | TEGRA_VIRTUAL_SE_CMD_OP_CMAC_SIGN) +#define TEGRA_VIRTUAL_SE_CMD_AES_CMAC_VERIFY (TEGRA_VIRTUAL_SE_CMD_ENG_AES \ + | TEGRA_VIRTUAL_SE_CMD_CATEGORY_AUTH \ + | TEGRA_VIRTUAL_SE_CMD_SET_CMAC \ + | TEGRA_VIRTUAL_SE_CMD_OP_CMAC_VERIFY) +#define TEGRA_VIRTUAL_SE_CMD_AES_CMD_GET_CMAC_SIGN (TEGRA_VIRTUAL_SE_CMD_ENG_AES \ + | TEGRA_VIRTUAL_SE_CMD_CATEGORY_AUTH \ + | TEGRA_VIRTUAL_SE_CMD_SET_CMAC \ + | TEGRA_VIRTUAL_SE_CMD_OP_CMAC_GET_SIGN) +#define TEGRA_VIRTUAL_SE_CMD_AES_CMD_GET_CMAC_VERIFY (TEGRA_VIRTUAL_SE_CMD_ENG_AES \ + | TEGRA_VIRTUAL_SE_CMD_CATEGORY_AUTH \ + | TEGRA_VIRTUAL_SE_CMD_SET_CMAC \ + | TEGRA_VIRTUAL_SE_CMD_OP_CMAC_GET_VERIFY) + +#define TEGRA_VIRTUAL_SE_CMD_AES_GMAC_CMD_INIT (TEGRA_VIRTUAL_SE_CMD_ENG_AES \ + | TEGRA_VIRTUAL_SE_CMD_CATEGORY_AUTH \ + | TEGRA_VIRTUAL_SE_CMD_SET_GMAC \ + | TEGRA_VIRTUAL_SE_CMD_OP_GMAC_INIT) +#define TEGRA_VIRTUAL_SE_CMD_AES_GMAC_CMD_SIGN (TEGRA_VIRTUAL_SE_CMD_ENG_AES \ + | TEGRA_VIRTUAL_SE_CMD_CATEGORY_AUTH \ + | TEGRA_VIRTUAL_SE_CMD_SET_GMAC \ + | TEGRA_VIRTUAL_SE_CMD_OP_GMAC_SIGN) +#define TEGRA_VIRTUAL_SE_CMD_AES_GMAC_CMD_VERIFY (TEGRA_VIRTUAL_SE_CMD_ENG_AES \ + | TEGRA_VIRTUAL_SE_CMD_CATEGORY_AUTH \ + | TEGRA_VIRTUAL_SE_CMD_SET_GMAC \ + | TEGRA_VIRTUAL_SE_CMD_OP_GMAC_VERIFY) +#define TEGRA_VIRTUAL_SE_CMD_AES_CMD_GET_GMAC_IV (TEGRA_VIRTUAL_SE_CMD_ENG_AES \ + | TEGRA_VIRTUAL_SE_CMD_CATEGORY_AUTH \ + | TEGRA_VIRTUAL_SE_CMD_SET_GMAC \ + | TEGRA_VIRTUAL_SE_CMD_OP_GMAC_GET_IV) +#define TEGRA_VIRTUAL_SE_CMD_AES_CMD_GET_GMAC_VERIFY (TEGRA_VIRTUAL_SE_CMD_ENG_AES \ + | TEGRA_VIRTUAL_SE_CMD_CATEGORY_AUTH \ + | TEGRA_VIRTUAL_SE_CMD_SET_GMAC \ + | TEGRA_VIRTUAL_SE_CMD_OP_GMAC_GET_VERIFY) + +#define TEGRA_VIRTUAL_TSEC_CMD_GET_KEYLOAD_STATUS (TEGRA_VIRTUAL_SE_CMD_ENG_TSEC \ + | TEGRA_VIRTUAL_SE_CMD_CATEGORY_TSEC_KEYS \ + | TEGRA_VIRTUAL_SE_CMD_OP_TSEC_KEYLOAD_STATUS) +#define TEGRA_VIRTUAL_SE_CMD_TSEC_SIGN (TEGRA_VIRTUAL_SE_CMD_ENG_TSEC \ + | TEGRA_VIRTUAL_SE_CMD_CATEGORY_TSEC_AUTH \ + | TEGRA_VIRTUAL_SE_CMD_OP_TSEC_CMAC_SIGN) +#define TEGRA_VIRTUAL_SE_CMD_AES_CMD_GET_TSEC_SIGN (TEGRA_VIRTUAL_SE_CMD_ENG_TSEC \ + | TEGRA_VIRTUAL_SE_CMD_CATEGORY_TSEC_AUTH \ + | TEGRA_VIRTUAL_SE_CMD_OP_TSEC_GET_CMAC_SIGN) +#define TEGRA_VIRTUAL_SE_CMD_TSEC_VERIFY (TEGRA_VIRTUAL_SE_CMD_ENG_TSEC \ + | TEGRA_VIRTUAL_SE_CMD_CATEGORY_TSEC_AUTH \ + | TEGRA_VIRTUAL_SE_CMD_OP_TSEC_CMAC_VERIFY) +#define TEGRA_VIRTUAL_SE_CMD_AES_CMD_GET_TSEC_VERIFY (TEGRA_VIRTUAL_SE_CMD_ENG_TSEC \ + | TEGRA_VIRTUAL_SE_CMD_CATEGORY_TSEC_AUTH \ + | TEGRA_VIRTUAL_SE_CMD_OP_TSEC_GET_CMAC_VERIFY) #define TEGRA_VIRTUAL_SE_AES_GMAC_SV_CFG_FIRST_REQ_SHIFT (0x00U) #define TEGRA_VIRTUAL_SE_AES_GMAC_SV_CFG_LAST_REQ_SHIFT (0x01U) -#define TEGRA_VIRTUAL_SE_CMD_SHA_HASH 16 +#define TEGRA_VIRTUAL_SE_CMD_SHA_HASH (TEGRA_VIRTUAL_SE_CMD_ENG_SHA \ + | TEGRA_VIRTUAL_SE_CMD_CATEGORY_SHA \ + | TEGRA_VIRTUAL_SE_CMD_OP_SHA) #define TEGRA_VIRTUAL_SE_SHA_HASH_BLOCK_SIZE_512BIT (512 / 8) #define TEGRA_VIRTUAL_SE_SHA_HASH_BLOCK_SIZE_576BIT (576 / 8) #define TEGRA_VIRTUAL_SE_SHA_HASH_BLOCK_SIZE_832BIT (832 / 8)