14c3f9727SGilad Ben-Yossef /* SPDX-License-Identifier: GPL-2.0 */ 2*03963caeSGilad Ben-Yossef /* Copyright (C) 2012-2019 ARM Limited (or its affiliates). */ 34c3f9727SGilad Ben-Yossef 44c3f9727SGilad Ben-Yossef #ifndef __CC_HW_QUEUE_DEFS_H__ 54c3f9727SGilad Ben-Yossef #define __CC_HW_QUEUE_DEFS_H__ 64c3f9727SGilad Ben-Yossef 74c3f9727SGilad Ben-Yossef #include <linux/types.h> 84c3f9727SGilad Ben-Yossef 94c3f9727SGilad Ben-Yossef #include "cc_kernel_regs.h" 104c3f9727SGilad Ben-Yossef #include <linux/bitfield.h> 114c3f9727SGilad Ben-Yossef 124c3f9727SGilad Ben-Yossef /****************************************************************************** 134c3f9727SGilad Ben-Yossef * DEFINITIONS 144c3f9727SGilad Ben-Yossef ******************************************************************************/ 154c3f9727SGilad Ben-Yossef 164c3f9727SGilad Ben-Yossef #define HW_DESC_SIZE_WORDS 6 174c3f9727SGilad Ben-Yossef /* Define max. available slots in HW queue */ 184c3f9727SGilad Ben-Yossef #define HW_QUEUE_SLOTS_MAX 15 194c3f9727SGilad Ben-Yossef 204c3f9727SGilad Ben-Yossef #define CC_REG_LOW(word, name) \ 214c3f9727SGilad Ben-Yossef (CC_DSCRPTR_QUEUE_WORD ## word ## _ ## name ## _BIT_SHIFT) 224c3f9727SGilad Ben-Yossef 234c3f9727SGilad Ben-Yossef #define CC_REG_HIGH(word, name) \ 244c3f9727SGilad Ben-Yossef (CC_REG_LOW(word, name) + \ 254c3f9727SGilad Ben-Yossef CC_DSCRPTR_QUEUE_WORD ## word ## _ ## name ## _BIT_SIZE - 1) 264c3f9727SGilad Ben-Yossef 274c3f9727SGilad Ben-Yossef #define CC_GENMASK(word, name) \ 284c3f9727SGilad Ben-Yossef GENMASK(CC_REG_HIGH(word, name), CC_REG_LOW(word, name)) 294c3f9727SGilad Ben-Yossef 304c3f9727SGilad Ben-Yossef #define WORD0_VALUE CC_GENMASK(0, VALUE) 3152f42c65SGilad Ben-Yossef #define WORD0_CPP_CIPHER_MODE CC_GENMASK(0, CPP_CIPHER_MODE) 324c3f9727SGilad Ben-Yossef #define WORD1_DIN_CONST_VALUE CC_GENMASK(1, DIN_CONST_VALUE) 334c3f9727SGilad Ben-Yossef #define WORD1_DIN_DMA_MODE CC_GENMASK(1, DIN_DMA_MODE) 344c3f9727SGilad Ben-Yossef #define WORD1_DIN_SIZE CC_GENMASK(1, DIN_SIZE) 354c3f9727SGilad Ben-Yossef #define WORD1_NOT_LAST CC_GENMASK(1, NOT_LAST) 364c3f9727SGilad Ben-Yossef #define WORD1_NS_BIT CC_GENMASK(1, NS_BIT) 3752f42c65SGilad Ben-Yossef #define WORD1_LOCK_QUEUE CC_GENMASK(1, LOCK_QUEUE) 384c3f9727SGilad Ben-Yossef #define WORD2_VALUE CC_GENMASK(2, VALUE) 394c3f9727SGilad Ben-Yossef #define WORD3_DOUT_DMA_MODE CC_GENMASK(3, DOUT_DMA_MODE) 404c3f9727SGilad Ben-Yossef #define WORD3_DOUT_LAST_IND CC_GENMASK(3, DOUT_LAST_IND) 414c3f9727SGilad Ben-Yossef #define WORD3_DOUT_SIZE CC_GENMASK(3, DOUT_SIZE) 424c3f9727SGilad Ben-Yossef #define WORD3_HASH_XOR_BIT CC_GENMASK(3, HASH_XOR_BIT) 434c3f9727SGilad Ben-Yossef #define WORD3_NS_BIT CC_GENMASK(3, NS_BIT) 444c3f9727SGilad Ben-Yossef #define WORD3_QUEUE_LAST_IND CC_GENMASK(3, QUEUE_LAST_IND) 454c3f9727SGilad Ben-Yossef #define WORD4_ACK_NEEDED CC_GENMASK(4, ACK_NEEDED) 464c3f9727SGilad Ben-Yossef #define WORD4_AES_SEL_N_HASH CC_GENMASK(4, AES_SEL_N_HASH) 47927574e0SYael Chemla #define WORD4_AES_XOR_CRYPTO_KEY CC_GENMASK(4, AES_XOR_CRYPTO_KEY) 484c3f9727SGilad Ben-Yossef #define WORD4_BYTES_SWAP CC_GENMASK(4, BYTES_SWAP) 494c3f9727SGilad Ben-Yossef #define WORD4_CIPHER_CONF0 CC_GENMASK(4, CIPHER_CONF0) 504c3f9727SGilad Ben-Yossef #define WORD4_CIPHER_CONF1 CC_GENMASK(4, CIPHER_CONF1) 514c3f9727SGilad Ben-Yossef #define WORD4_CIPHER_CONF2 CC_GENMASK(4, CIPHER_CONF2) 524c3f9727SGilad Ben-Yossef #define WORD4_CIPHER_DO CC_GENMASK(4, CIPHER_DO) 534c3f9727SGilad Ben-Yossef #define WORD4_CIPHER_MODE CC_GENMASK(4, CIPHER_MODE) 544c3f9727SGilad Ben-Yossef #define WORD4_CMAC_SIZE0 CC_GENMASK(4, CMAC_SIZE0) 554c3f9727SGilad Ben-Yossef #define WORD4_DATA_FLOW_MODE CC_GENMASK(4, DATA_FLOW_MODE) 564c3f9727SGilad Ben-Yossef #define WORD4_KEY_SIZE CC_GENMASK(4, KEY_SIZE) 574c3f9727SGilad Ben-Yossef #define WORD4_SETUP_OPERATION CC_GENMASK(4, SETUP_OPERATION) 584c3f9727SGilad Ben-Yossef #define WORD5_DIN_ADDR_HIGH CC_GENMASK(5, DIN_ADDR_HIGH) 594c3f9727SGilad Ben-Yossef #define WORD5_DOUT_ADDR_HIGH CC_GENMASK(5, DOUT_ADDR_HIGH) 604c3f9727SGilad Ben-Yossef 614c3f9727SGilad Ben-Yossef /****************************************************************************** 624c3f9727SGilad Ben-Yossef * TYPE DEFINITIONS 634c3f9727SGilad Ben-Yossef ******************************************************************************/ 644c3f9727SGilad Ben-Yossef 654c3f9727SGilad Ben-Yossef struct cc_hw_desc { 664c3f9727SGilad Ben-Yossef union { 674c3f9727SGilad Ben-Yossef u32 word[HW_DESC_SIZE_WORDS]; 684c3f9727SGilad Ben-Yossef u16 hword[HW_DESC_SIZE_WORDS * 2]; 694c3f9727SGilad Ben-Yossef }; 704c3f9727SGilad Ben-Yossef }; 714c3f9727SGilad Ben-Yossef 724c3f9727SGilad Ben-Yossef enum cc_axi_sec { 734c3f9727SGilad Ben-Yossef AXI_SECURE = 0, 744c3f9727SGilad Ben-Yossef AXI_NOT_SECURE = 1 754c3f9727SGilad Ben-Yossef }; 764c3f9727SGilad Ben-Yossef 774c3f9727SGilad Ben-Yossef enum cc_desc_direction { 784c3f9727SGilad Ben-Yossef DESC_DIRECTION_ILLEGAL = -1, 794c3f9727SGilad Ben-Yossef DESC_DIRECTION_ENCRYPT_ENCRYPT = 0, 804c3f9727SGilad Ben-Yossef DESC_DIRECTION_DECRYPT_DECRYPT = 1, 814c3f9727SGilad Ben-Yossef DESC_DIRECTION_DECRYPT_ENCRYPT = 3, 824c3f9727SGilad Ben-Yossef DESC_DIRECTION_END = S32_MAX, 834c3f9727SGilad Ben-Yossef }; 844c3f9727SGilad Ben-Yossef 854c3f9727SGilad Ben-Yossef enum cc_dma_mode { 864c3f9727SGilad Ben-Yossef DMA_MODE_NULL = -1, 874c3f9727SGilad Ben-Yossef NO_DMA = 0, 884c3f9727SGilad Ben-Yossef DMA_SRAM = 1, 894c3f9727SGilad Ben-Yossef DMA_DLLI = 2, 904c3f9727SGilad Ben-Yossef DMA_MLLI = 3, 914c3f9727SGilad Ben-Yossef DMA_MODE_END = S32_MAX, 924c3f9727SGilad Ben-Yossef }; 934c3f9727SGilad Ben-Yossef 944c3f9727SGilad Ben-Yossef enum cc_flow_mode { 954c3f9727SGilad Ben-Yossef FLOW_MODE_NULL = -1, 964c3f9727SGilad Ben-Yossef /* data flows */ 974c3f9727SGilad Ben-Yossef BYPASS = 0, 984c3f9727SGilad Ben-Yossef DIN_AES_DOUT = 1, 994c3f9727SGilad Ben-Yossef AES_to_HASH = 2, 1004c3f9727SGilad Ben-Yossef AES_and_HASH = 3, 1014c3f9727SGilad Ben-Yossef DIN_DES_DOUT = 4, 1024c3f9727SGilad Ben-Yossef DES_to_HASH = 5, 1034c3f9727SGilad Ben-Yossef DES_and_HASH = 6, 1044c3f9727SGilad Ben-Yossef DIN_HASH = 7, 1054c3f9727SGilad Ben-Yossef DIN_HASH_and_BYPASS = 8, 1064c3f9727SGilad Ben-Yossef AESMAC_and_BYPASS = 9, 1074c3f9727SGilad Ben-Yossef AES_to_HASH_and_DOUT = 10, 1084c3f9727SGilad Ben-Yossef DIN_RC4_DOUT = 11, 1094c3f9727SGilad Ben-Yossef DES_to_HASH_and_DOUT = 12, 1104c3f9727SGilad Ben-Yossef AES_to_AES_to_HASH_and_DOUT = 13, 1114c3f9727SGilad Ben-Yossef AES_to_AES_to_HASH = 14, 1124c3f9727SGilad Ben-Yossef AES_to_HASH_and_AES = 15, 1139b8d51f8SGilad Ben-Yossef DIN_SM4_DOUT = 16, 1144c3f9727SGilad Ben-Yossef DIN_AES_AESMAC = 17, 1154c3f9727SGilad Ben-Yossef HASH_to_DOUT = 18, 1164c3f9727SGilad Ben-Yossef /* setup flows */ 1174c3f9727SGilad Ben-Yossef S_DIN_to_AES = 32, 1184c3f9727SGilad Ben-Yossef S_DIN_to_AES2 = 33, 1194c3f9727SGilad Ben-Yossef S_DIN_to_DES = 34, 1204c3f9727SGilad Ben-Yossef S_DIN_to_RC4 = 35, 1219b8d51f8SGilad Ben-Yossef S_DIN_to_SM4 = 36, 1224c3f9727SGilad Ben-Yossef S_DIN_to_HASH = 37, 1234c3f9727SGilad Ben-Yossef S_AES_to_DOUT = 38, 1244c3f9727SGilad Ben-Yossef S_AES2_to_DOUT = 39, 1259b8d51f8SGilad Ben-Yossef S_SM4_to_DOUT = 40, 1264c3f9727SGilad Ben-Yossef S_RC4_to_DOUT = 41, 1274c3f9727SGilad Ben-Yossef S_DES_to_DOUT = 42, 1284c3f9727SGilad Ben-Yossef S_HASH_to_DOUT = 43, 1294c3f9727SGilad Ben-Yossef SET_FLOW_ID = 44, 1304c3f9727SGilad Ben-Yossef FLOW_MODE_END = S32_MAX, 1314c3f9727SGilad Ben-Yossef }; 1324c3f9727SGilad Ben-Yossef 1334c3f9727SGilad Ben-Yossef enum cc_setup_op { 1344c3f9727SGilad Ben-Yossef SETUP_LOAD_NOP = 0, 1354c3f9727SGilad Ben-Yossef SETUP_LOAD_STATE0 = 1, 1364c3f9727SGilad Ben-Yossef SETUP_LOAD_STATE1 = 2, 1374c3f9727SGilad Ben-Yossef SETUP_LOAD_STATE2 = 3, 1384c3f9727SGilad Ben-Yossef SETUP_LOAD_KEY0 = 4, 1394c3f9727SGilad Ben-Yossef SETUP_LOAD_XEX_KEY = 5, 1404c3f9727SGilad Ben-Yossef SETUP_WRITE_STATE0 = 8, 1414c3f9727SGilad Ben-Yossef SETUP_WRITE_STATE1 = 9, 1424c3f9727SGilad Ben-Yossef SETUP_WRITE_STATE2 = 10, 1434c3f9727SGilad Ben-Yossef SETUP_WRITE_STATE3 = 11, 1444c3f9727SGilad Ben-Yossef SETUP_OP_END = S32_MAX, 1454c3f9727SGilad Ben-Yossef }; 1464c3f9727SGilad Ben-Yossef 147f444ec10SGilad Ben-Yossef enum cc_hash_conf_pad { 148f444ec10SGilad Ben-Yossef HASH_PADDING_DISABLED = 0, 149f444ec10SGilad Ben-Yossef HASH_PADDING_ENABLED = 1, 150f444ec10SGilad Ben-Yossef HASH_DIGEST_RESULT_LITTLE_ENDIAN = 2, 151f444ec10SGilad Ben-Yossef HASH_CONFIG1_PADDING_RESERVE32 = S32_MAX, 152f444ec10SGilad Ben-Yossef }; 153f444ec10SGilad Ben-Yossef 1544c3f9727SGilad Ben-Yossef enum cc_aes_mac_selector { 1554c3f9727SGilad Ben-Yossef AES_SK = 1, 1564c3f9727SGilad Ben-Yossef AES_CMAC_INIT = 2, 1574c3f9727SGilad Ben-Yossef AES_CMAC_SIZE0 = 3, 1584c3f9727SGilad Ben-Yossef AES_MAC_END = S32_MAX, 1594c3f9727SGilad Ben-Yossef }; 1604c3f9727SGilad Ben-Yossef 1614c3f9727SGilad Ben-Yossef #define HW_KEY_MASK_CIPHER_DO 0x3 1624c3f9727SGilad Ben-Yossef #define HW_KEY_SHIFT_CIPHER_CFG2 2 1634c3f9727SGilad Ben-Yossef 1644c3f9727SGilad Ben-Yossef /* HwCryptoKey[1:0] is mapped to cipher_do[1:0] */ 1654c3f9727SGilad Ben-Yossef /* HwCryptoKey[2:3] is mapped to cipher_config2[1:0] */ 1664c3f9727SGilad Ben-Yossef enum cc_hw_crypto_key { 1674c3f9727SGilad Ben-Yossef USER_KEY = 0, /* 0x0000 */ 1684c3f9727SGilad Ben-Yossef ROOT_KEY = 1, /* 0x0001 */ 1694c3f9727SGilad Ben-Yossef PROVISIONING_KEY = 2, /* 0x0010 */ /* ==KCP */ 1704c3f9727SGilad Ben-Yossef SESSION_KEY = 3, /* 0x0011 */ 1714c3f9727SGilad Ben-Yossef RESERVED_KEY = 4, /* NA */ 1724c3f9727SGilad Ben-Yossef PLATFORM_KEY = 5, /* 0x0101 */ 1734c3f9727SGilad Ben-Yossef CUSTOMER_KEY = 6, /* 0x0110 */ 1744c3f9727SGilad Ben-Yossef KFDE0_KEY = 7, /* 0x0111 */ 1754c3f9727SGilad Ben-Yossef KFDE1_KEY = 9, /* 0x1001 */ 1764c3f9727SGilad Ben-Yossef KFDE2_KEY = 10, /* 0x1010 */ 1774c3f9727SGilad Ben-Yossef KFDE3_KEY = 11, /* 0x1011 */ 1784c3f9727SGilad Ben-Yossef END_OF_KEYS = S32_MAX, 1794c3f9727SGilad Ben-Yossef }; 1804c3f9727SGilad Ben-Yossef 18152f42c65SGilad Ben-Yossef #define CC_NUM_HW_KEY_SLOTS 4 18252f42c65SGilad Ben-Yossef #define CC_FIRST_HW_KEY_SLOT 0 18352f42c65SGilad Ben-Yossef #define CC_LAST_HW_KEY_SLOT (CC_FIRST_HW_KEY_SLOT + CC_NUM_HW_KEY_SLOTS - 1) 18452f42c65SGilad Ben-Yossef 18552f42c65SGilad Ben-Yossef #define CC_NUM_CPP_KEY_SLOTS 8 18652f42c65SGilad Ben-Yossef #define CC_FIRST_CPP_KEY_SLOT 16 18752f42c65SGilad Ben-Yossef #define CC_LAST_CPP_KEY_SLOT (CC_FIRST_CPP_KEY_SLOT + \ 18852f42c65SGilad Ben-Yossef CC_NUM_CPP_KEY_SLOTS - 1) 18952f42c65SGilad Ben-Yossef 1904c3f9727SGilad Ben-Yossef enum cc_hw_aes_key_size { 1914c3f9727SGilad Ben-Yossef AES_128_KEY = 0, 1924c3f9727SGilad Ben-Yossef AES_192_KEY = 1, 1934c3f9727SGilad Ben-Yossef AES_256_KEY = 2, 1944c3f9727SGilad Ben-Yossef END_OF_AES_KEYS = S32_MAX, 1954c3f9727SGilad Ben-Yossef }; 1964c3f9727SGilad Ben-Yossef 1974c3f9727SGilad Ben-Yossef enum cc_hash_cipher_pad { 1984c3f9727SGilad Ben-Yossef DO_NOT_PAD = 0, 1994c3f9727SGilad Ben-Yossef DO_PAD = 1, 2004c3f9727SGilad Ben-Yossef HASH_CIPHER_DO_PADDING_RESERVE32 = S32_MAX, 2014c3f9727SGilad Ben-Yossef }; 2024c3f9727SGilad Ben-Yossef 203533edf9fSGilad Ben-Yossef #define CC_CPP_DIN_ADDR 0xFF00FF00UL 204533edf9fSGilad Ben-Yossef #define CC_CPP_DIN_SIZE 0xFF00FFUL 20552f42c65SGilad Ben-Yossef 2064c3f9727SGilad Ben-Yossef /*****************************/ 2074c3f9727SGilad Ben-Yossef /* Descriptor packing macros */ 2084c3f9727SGilad Ben-Yossef /*****************************/ 2094c3f9727SGilad Ben-Yossef 2104c3f9727SGilad Ben-Yossef /* 2114c3f9727SGilad Ben-Yossef * Init a HW descriptor struct 2124c3f9727SGilad Ben-Yossef * @pdesc: pointer HW descriptor struct 2134c3f9727SGilad Ben-Yossef */ 2144c3f9727SGilad Ben-Yossef static inline void hw_desc_init(struct cc_hw_desc *pdesc) 2154c3f9727SGilad Ben-Yossef { 2164c3f9727SGilad Ben-Yossef memset(pdesc, 0, sizeof(struct cc_hw_desc)); 2174c3f9727SGilad Ben-Yossef } 2184c3f9727SGilad Ben-Yossef 2194c3f9727SGilad Ben-Yossef /* 2204c3f9727SGilad Ben-Yossef * Indicates the end of current HW descriptors flow and release the HW engines. 2214c3f9727SGilad Ben-Yossef * 2224c3f9727SGilad Ben-Yossef * @pdesc: pointer HW descriptor struct 2234c3f9727SGilad Ben-Yossef */ 22427b3b22dSGilad Ben-Yossef static inline void set_queue_last_ind_bit(struct cc_hw_desc *pdesc) 2254c3f9727SGilad Ben-Yossef { 2264c3f9727SGilad Ben-Yossef pdesc->word[3] |= FIELD_PREP(WORD3_QUEUE_LAST_IND, 1); 2274c3f9727SGilad Ben-Yossef } 2284c3f9727SGilad Ben-Yossef 2294c3f9727SGilad Ben-Yossef /* 2304c3f9727SGilad Ben-Yossef * Set the DIN field of a HW descriptors 2314c3f9727SGilad Ben-Yossef * 2324c3f9727SGilad Ben-Yossef * @pdesc: pointer HW descriptor struct 2334c3f9727SGilad Ben-Yossef * @dma_mode: dmaMode The DMA mode: NO_DMA, SRAM, DLLI, MLLI, CONSTANT 2344c3f9727SGilad Ben-Yossef * @addr: dinAdr DIN address 2354c3f9727SGilad Ben-Yossef * @size: Data size in bytes 2364c3f9727SGilad Ben-Yossef * @axi_sec: AXI secure bit 2374c3f9727SGilad Ben-Yossef */ 2384c3f9727SGilad Ben-Yossef static inline void set_din_type(struct cc_hw_desc *pdesc, 2394c3f9727SGilad Ben-Yossef enum cc_dma_mode dma_mode, dma_addr_t addr, 2404c3f9727SGilad Ben-Yossef u32 size, enum cc_axi_sec axi_sec) 2414c3f9727SGilad Ben-Yossef { 2424c3f9727SGilad Ben-Yossef pdesc->word[0] = (u32)addr; 2434c3f9727SGilad Ben-Yossef #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 2444c3f9727SGilad Ben-Yossef pdesc->word[5] |= FIELD_PREP(WORD5_DIN_ADDR_HIGH, ((u16)(addr >> 32))); 2454c3f9727SGilad Ben-Yossef #endif 2464c3f9727SGilad Ben-Yossef pdesc->word[1] |= FIELD_PREP(WORD1_DIN_DMA_MODE, dma_mode) | 2474c3f9727SGilad Ben-Yossef FIELD_PREP(WORD1_DIN_SIZE, size) | 2484c3f9727SGilad Ben-Yossef FIELD_PREP(WORD1_NS_BIT, axi_sec); 2494c3f9727SGilad Ben-Yossef } 2504c3f9727SGilad Ben-Yossef 2514c3f9727SGilad Ben-Yossef /* 2524c3f9727SGilad Ben-Yossef * Set the DIN field of a HW descriptors to NO DMA mode. 2534c3f9727SGilad Ben-Yossef * Used for NOP descriptor, register patches and other special modes. 2544c3f9727SGilad Ben-Yossef * 2554c3f9727SGilad Ben-Yossef * @pdesc: pointer HW descriptor struct 2564c3f9727SGilad Ben-Yossef * @addr: DIN address 2574c3f9727SGilad Ben-Yossef * @size: Data size in bytes 2584c3f9727SGilad Ben-Yossef */ 2594c3f9727SGilad Ben-Yossef static inline void set_din_no_dma(struct cc_hw_desc *pdesc, u32 addr, u32 size) 2604c3f9727SGilad Ben-Yossef { 2614c3f9727SGilad Ben-Yossef pdesc->word[0] = addr; 2624c3f9727SGilad Ben-Yossef pdesc->word[1] |= FIELD_PREP(WORD1_DIN_SIZE, size); 2634c3f9727SGilad Ben-Yossef } 2644c3f9727SGilad Ben-Yossef 2654c3f9727SGilad Ben-Yossef /* 26652f42c65SGilad Ben-Yossef * Setup the special CPP descriptor 26752f42c65SGilad Ben-Yossef * 26852f42c65SGilad Ben-Yossef * @pdesc: pointer HW descriptor struct 26952f42c65SGilad Ben-Yossef * @alg: cipher used (AES / SM4) 27052f42c65SGilad Ben-Yossef * @mode: mode used (CTR or CBC) 27152f42c65SGilad Ben-Yossef * @slot: slot number 27252f42c65SGilad Ben-Yossef * @ksize: key size 27352f42c65SGilad Ben-Yossef */ 274533edf9fSGilad Ben-Yossef static inline void set_cpp_crypto_key(struct cc_hw_desc *pdesc, u8 slot) 27552f42c65SGilad Ben-Yossef { 276533edf9fSGilad Ben-Yossef pdesc->word[0] |= CC_CPP_DIN_ADDR; 27752f42c65SGilad Ben-Yossef 278533edf9fSGilad Ben-Yossef pdesc->word[1] |= FIELD_PREP(WORD1_DIN_SIZE, CC_CPP_DIN_SIZE); 27952f42c65SGilad Ben-Yossef pdesc->word[1] |= FIELD_PREP(WORD1_LOCK_QUEUE, 1); 280533edf9fSGilad Ben-Yossef 281533edf9fSGilad Ben-Yossef pdesc->word[4] |= FIELD_PREP(WORD4_SETUP_OPERATION, slot); 28252f42c65SGilad Ben-Yossef } 28352f42c65SGilad Ben-Yossef 28452f42c65SGilad Ben-Yossef /* 2854c3f9727SGilad Ben-Yossef * Set the DIN field of a HW descriptors to SRAM mode. 2864c3f9727SGilad Ben-Yossef * Note: No need to check SRAM alignment since host requests do not use SRAM and 2874c3f9727SGilad Ben-Yossef * adaptor will enforce alignment check. 2884c3f9727SGilad Ben-Yossef * 2894c3f9727SGilad Ben-Yossef * @pdesc: pointer HW descriptor struct 2904c3f9727SGilad Ben-Yossef * @addr: DIN address 2914c3f9727SGilad Ben-Yossef * @size Data size in bytes 2924c3f9727SGilad Ben-Yossef */ 2934c3f9727SGilad Ben-Yossef static inline void set_din_sram(struct cc_hw_desc *pdesc, dma_addr_t addr, 2944c3f9727SGilad Ben-Yossef u32 size) 2954c3f9727SGilad Ben-Yossef { 2964c3f9727SGilad Ben-Yossef pdesc->word[0] = (u32)addr; 2974c3f9727SGilad Ben-Yossef pdesc->word[1] |= FIELD_PREP(WORD1_DIN_SIZE, size) | 2984c3f9727SGilad Ben-Yossef FIELD_PREP(WORD1_DIN_DMA_MODE, DMA_SRAM); 2994c3f9727SGilad Ben-Yossef } 3004c3f9727SGilad Ben-Yossef 3014c3f9727SGilad Ben-Yossef /* 3024c3f9727SGilad Ben-Yossef * Set the DIN field of a HW descriptors to CONST mode 3034c3f9727SGilad Ben-Yossef * 3044c3f9727SGilad Ben-Yossef * @pdesc: pointer HW descriptor struct 3054c3f9727SGilad Ben-Yossef * @val: DIN const value 3064c3f9727SGilad Ben-Yossef * @size: Data size in bytes 3074c3f9727SGilad Ben-Yossef */ 3084c3f9727SGilad Ben-Yossef static inline void set_din_const(struct cc_hw_desc *pdesc, u32 val, u32 size) 3094c3f9727SGilad Ben-Yossef { 3104c3f9727SGilad Ben-Yossef pdesc->word[0] = val; 3114c3f9727SGilad Ben-Yossef pdesc->word[1] |= FIELD_PREP(WORD1_DIN_CONST_VALUE, 1) | 3124c3f9727SGilad Ben-Yossef FIELD_PREP(WORD1_DIN_DMA_MODE, DMA_SRAM) | 3134c3f9727SGilad Ben-Yossef FIELD_PREP(WORD1_DIN_SIZE, size); 3144c3f9727SGilad Ben-Yossef } 3154c3f9727SGilad Ben-Yossef 3164c3f9727SGilad Ben-Yossef /* 3174c3f9727SGilad Ben-Yossef * Set the DIN not last input data indicator 3184c3f9727SGilad Ben-Yossef * 3194c3f9727SGilad Ben-Yossef * @pdesc: pointer HW descriptor struct 3204c3f9727SGilad Ben-Yossef */ 3214c3f9727SGilad Ben-Yossef static inline void set_din_not_last_indication(struct cc_hw_desc *pdesc) 3224c3f9727SGilad Ben-Yossef { 3234c3f9727SGilad Ben-Yossef pdesc->word[1] |= FIELD_PREP(WORD1_NOT_LAST, 1); 3244c3f9727SGilad Ben-Yossef } 3254c3f9727SGilad Ben-Yossef 3264c3f9727SGilad Ben-Yossef /* 3274c3f9727SGilad Ben-Yossef * Set the DOUT field of a HW descriptors 3284c3f9727SGilad Ben-Yossef * 3294c3f9727SGilad Ben-Yossef * @pdesc: pointer HW descriptor struct 3304c3f9727SGilad Ben-Yossef * @dma_mode: The DMA mode: NO_DMA, SRAM, DLLI, MLLI, CONSTANT 3314c3f9727SGilad Ben-Yossef * @addr: DOUT address 3324c3f9727SGilad Ben-Yossef * @size: Data size in bytes 3334c3f9727SGilad Ben-Yossef * @axi_sec: AXI secure bit 3344c3f9727SGilad Ben-Yossef */ 3354c3f9727SGilad Ben-Yossef static inline void set_dout_type(struct cc_hw_desc *pdesc, 3364c3f9727SGilad Ben-Yossef enum cc_dma_mode dma_mode, dma_addr_t addr, 3374c3f9727SGilad Ben-Yossef u32 size, enum cc_axi_sec axi_sec) 3384c3f9727SGilad Ben-Yossef { 3394c3f9727SGilad Ben-Yossef pdesc->word[2] = (u32)addr; 3404c3f9727SGilad Ben-Yossef #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT 3414c3f9727SGilad Ben-Yossef pdesc->word[5] |= FIELD_PREP(WORD5_DOUT_ADDR_HIGH, ((u16)(addr >> 32))); 3424c3f9727SGilad Ben-Yossef #endif 3434c3f9727SGilad Ben-Yossef pdesc->word[3] |= FIELD_PREP(WORD3_DOUT_DMA_MODE, dma_mode) | 3444c3f9727SGilad Ben-Yossef FIELD_PREP(WORD3_DOUT_SIZE, size) | 3454c3f9727SGilad Ben-Yossef FIELD_PREP(WORD3_NS_BIT, axi_sec); 3464c3f9727SGilad Ben-Yossef } 3474c3f9727SGilad Ben-Yossef 3484c3f9727SGilad Ben-Yossef /* 3494c3f9727SGilad Ben-Yossef * Set the DOUT field of a HW descriptors to DLLI type 3504c3f9727SGilad Ben-Yossef * The LAST INDICATION is provided by the user 3514c3f9727SGilad Ben-Yossef * 3524c3f9727SGilad Ben-Yossef * @pdesc pointer HW descriptor struct 3534c3f9727SGilad Ben-Yossef * @addr: DOUT address 3544c3f9727SGilad Ben-Yossef * @size: Data size in bytes 3554c3f9727SGilad Ben-Yossef * @last_ind: The last indication bit 3564c3f9727SGilad Ben-Yossef * @axi_sec: AXI secure bit 3574c3f9727SGilad Ben-Yossef */ 3584c3f9727SGilad Ben-Yossef static inline void set_dout_dlli(struct cc_hw_desc *pdesc, dma_addr_t addr, 3594c3f9727SGilad Ben-Yossef u32 size, enum cc_axi_sec axi_sec, 3604c3f9727SGilad Ben-Yossef u32 last_ind) 3614c3f9727SGilad Ben-Yossef { 3624c3f9727SGilad Ben-Yossef set_dout_type(pdesc, DMA_DLLI, addr, size, axi_sec); 3634c3f9727SGilad Ben-Yossef pdesc->word[3] |= FIELD_PREP(WORD3_DOUT_LAST_IND, last_ind); 3644c3f9727SGilad Ben-Yossef } 3654c3f9727SGilad Ben-Yossef 3664c3f9727SGilad Ben-Yossef /* 3674c3f9727SGilad Ben-Yossef * Set the DOUT field of a HW descriptors to DLLI type 3684c3f9727SGilad Ben-Yossef * The LAST INDICATION is provided by the user 3694c3f9727SGilad Ben-Yossef * 3704c3f9727SGilad Ben-Yossef * @pdesc: pointer HW descriptor struct 3714c3f9727SGilad Ben-Yossef * @addr: DOUT address 3724c3f9727SGilad Ben-Yossef * @size: Data size in bytes 3734c3f9727SGilad Ben-Yossef * @last_ind: The last indication bit 3744c3f9727SGilad Ben-Yossef * @axi_sec: AXI secure bit 3754c3f9727SGilad Ben-Yossef */ 3764c3f9727SGilad Ben-Yossef static inline void set_dout_mlli(struct cc_hw_desc *pdesc, dma_addr_t addr, 3774c3f9727SGilad Ben-Yossef u32 size, enum cc_axi_sec axi_sec, 3784c3f9727SGilad Ben-Yossef bool last_ind) 3794c3f9727SGilad Ben-Yossef { 3804c3f9727SGilad Ben-Yossef set_dout_type(pdesc, DMA_MLLI, addr, size, axi_sec); 3814c3f9727SGilad Ben-Yossef pdesc->word[3] |= FIELD_PREP(WORD3_DOUT_LAST_IND, last_ind); 3824c3f9727SGilad Ben-Yossef } 3834c3f9727SGilad Ben-Yossef 3844c3f9727SGilad Ben-Yossef /* 3854c3f9727SGilad Ben-Yossef * Set the DOUT field of a HW descriptors to NO DMA mode. 3864c3f9727SGilad Ben-Yossef * Used for NOP descriptor, register patches and other special modes. 3874c3f9727SGilad Ben-Yossef * 3884c3f9727SGilad Ben-Yossef * @pdesc: pointer HW descriptor struct 3894c3f9727SGilad Ben-Yossef * @addr: DOUT address 3904c3f9727SGilad Ben-Yossef * @size: Data size in bytes 3914c3f9727SGilad Ben-Yossef * @write_enable: Enables a write operation to a register 3924c3f9727SGilad Ben-Yossef */ 3934c3f9727SGilad Ben-Yossef static inline void set_dout_no_dma(struct cc_hw_desc *pdesc, u32 addr, 3944c3f9727SGilad Ben-Yossef u32 size, bool write_enable) 3954c3f9727SGilad Ben-Yossef { 3964c3f9727SGilad Ben-Yossef pdesc->word[2] = addr; 3974c3f9727SGilad Ben-Yossef pdesc->word[3] |= FIELD_PREP(WORD3_DOUT_SIZE, size) | 3984c3f9727SGilad Ben-Yossef FIELD_PREP(WORD3_DOUT_LAST_IND, write_enable); 3994c3f9727SGilad Ben-Yossef } 4004c3f9727SGilad Ben-Yossef 4014c3f9727SGilad Ben-Yossef /* 4024c3f9727SGilad Ben-Yossef * Set the word for the XOR operation. 4034c3f9727SGilad Ben-Yossef * 4044c3f9727SGilad Ben-Yossef * @pdesc: pointer HW descriptor struct 4054c3f9727SGilad Ben-Yossef * @val: xor data value 4064c3f9727SGilad Ben-Yossef */ 4074c3f9727SGilad Ben-Yossef static inline void set_xor_val(struct cc_hw_desc *pdesc, u32 val) 4084c3f9727SGilad Ben-Yossef { 4094c3f9727SGilad Ben-Yossef pdesc->word[2] = val; 4104c3f9727SGilad Ben-Yossef } 4114c3f9727SGilad Ben-Yossef 4124c3f9727SGilad Ben-Yossef /* 4134c3f9727SGilad Ben-Yossef * Sets the XOR indicator bit in the descriptor 4144c3f9727SGilad Ben-Yossef * 4154c3f9727SGilad Ben-Yossef * @pdesc: pointer HW descriptor struct 4164c3f9727SGilad Ben-Yossef */ 4174c3f9727SGilad Ben-Yossef static inline void set_xor_active(struct cc_hw_desc *pdesc) 4184c3f9727SGilad Ben-Yossef { 4194c3f9727SGilad Ben-Yossef pdesc->word[3] |= FIELD_PREP(WORD3_HASH_XOR_BIT, 1); 4204c3f9727SGilad Ben-Yossef } 4214c3f9727SGilad Ben-Yossef 4224c3f9727SGilad Ben-Yossef /* 4234c3f9727SGilad Ben-Yossef * Select the AES engine instead of HASH engine when setting up combined mode 4244c3f9727SGilad Ben-Yossef * with AES XCBC MAC 4254c3f9727SGilad Ben-Yossef * 4264c3f9727SGilad Ben-Yossef * @pdesc: pointer HW descriptor struct 4274c3f9727SGilad Ben-Yossef */ 4284c3f9727SGilad Ben-Yossef static inline void set_aes_not_hash_mode(struct cc_hw_desc *pdesc) 4294c3f9727SGilad Ben-Yossef { 4304c3f9727SGilad Ben-Yossef pdesc->word[4] |= FIELD_PREP(WORD4_AES_SEL_N_HASH, 1); 4314c3f9727SGilad Ben-Yossef } 4324c3f9727SGilad Ben-Yossef 4334c3f9727SGilad Ben-Yossef /* 434927574e0SYael Chemla * Set aes xor crypto key, this in some secenrios select SM3 engine 435927574e0SYael Chemla * 436927574e0SYael Chemla * @pdesc: pointer HW descriptor struct 437927574e0SYael Chemla */ 438927574e0SYael Chemla static inline void set_aes_xor_crypto_key(struct cc_hw_desc *pdesc) 439927574e0SYael Chemla { 440927574e0SYael Chemla pdesc->word[4] |= FIELD_PREP(WORD4_AES_XOR_CRYPTO_KEY, 1); 441927574e0SYael Chemla } 442927574e0SYael Chemla 443927574e0SYael Chemla /* 4444c3f9727SGilad Ben-Yossef * Set the DOUT field of a HW descriptors to SRAM mode 4454c3f9727SGilad Ben-Yossef * Note: No need to check SRAM alignment since host requests do not use SRAM and 4464c3f9727SGilad Ben-Yossef * adaptor will enforce alignment check. 4474c3f9727SGilad Ben-Yossef * 4484c3f9727SGilad Ben-Yossef * @pdesc: pointer HW descriptor struct 4494c3f9727SGilad Ben-Yossef * @addr: DOUT address 4504c3f9727SGilad Ben-Yossef * @size: Data size in bytes 4514c3f9727SGilad Ben-Yossef */ 4524c3f9727SGilad Ben-Yossef static inline void set_dout_sram(struct cc_hw_desc *pdesc, u32 addr, u32 size) 4534c3f9727SGilad Ben-Yossef { 4544c3f9727SGilad Ben-Yossef pdesc->word[2] = addr; 4554c3f9727SGilad Ben-Yossef pdesc->word[3] |= FIELD_PREP(WORD3_DOUT_DMA_MODE, DMA_SRAM) | 4564c3f9727SGilad Ben-Yossef FIELD_PREP(WORD3_DOUT_SIZE, size); 4574c3f9727SGilad Ben-Yossef } 4584c3f9727SGilad Ben-Yossef 4594c3f9727SGilad Ben-Yossef /* 4604c3f9727SGilad Ben-Yossef * Sets the data unit size for XEX mode in data_out_addr[15:0] 4614c3f9727SGilad Ben-Yossef * 4624c3f9727SGilad Ben-Yossef * @pdesc: pDesc pointer HW descriptor struct 4634c3f9727SGilad Ben-Yossef * @size: data unit size for XEX mode 4644c3f9727SGilad Ben-Yossef */ 4654c3f9727SGilad Ben-Yossef static inline void set_xex_data_unit_size(struct cc_hw_desc *pdesc, u32 size) 4664c3f9727SGilad Ben-Yossef { 4674c3f9727SGilad Ben-Yossef pdesc->word[2] = size; 4684c3f9727SGilad Ben-Yossef } 4694c3f9727SGilad Ben-Yossef 4704c3f9727SGilad Ben-Yossef /* 4714c3f9727SGilad Ben-Yossef * Set the number of rounds for Multi2 in data_out_addr[15:0] 4724c3f9727SGilad Ben-Yossef * 4734c3f9727SGilad Ben-Yossef * @pdesc: pointer HW descriptor struct 4744c3f9727SGilad Ben-Yossef * @num: number of rounds for Multi2 4754c3f9727SGilad Ben-Yossef */ 4764c3f9727SGilad Ben-Yossef static inline void set_multi2_num_rounds(struct cc_hw_desc *pdesc, u32 num) 4774c3f9727SGilad Ben-Yossef { 4784c3f9727SGilad Ben-Yossef pdesc->word[2] = num; 4794c3f9727SGilad Ben-Yossef } 4804c3f9727SGilad Ben-Yossef 4814c3f9727SGilad Ben-Yossef /* 4824c3f9727SGilad Ben-Yossef * Set the flow mode. 4834c3f9727SGilad Ben-Yossef * 4844c3f9727SGilad Ben-Yossef * @pdesc: pointer HW descriptor struct 4854c3f9727SGilad Ben-Yossef * @mode: Any one of the modes defined in [CC7x-DESC] 4864c3f9727SGilad Ben-Yossef */ 4874c3f9727SGilad Ben-Yossef static inline void set_flow_mode(struct cc_hw_desc *pdesc, 4884c3f9727SGilad Ben-Yossef enum cc_flow_mode mode) 4894c3f9727SGilad Ben-Yossef { 4904c3f9727SGilad Ben-Yossef pdesc->word[4] |= FIELD_PREP(WORD4_DATA_FLOW_MODE, mode); 4914c3f9727SGilad Ben-Yossef } 4924c3f9727SGilad Ben-Yossef 4934c3f9727SGilad Ben-Yossef /* 4944c3f9727SGilad Ben-Yossef * Set the cipher mode. 4954c3f9727SGilad Ben-Yossef * 4964c3f9727SGilad Ben-Yossef * @pdesc: pointer HW descriptor struct 4974c3f9727SGilad Ben-Yossef * @mode: Any one of the modes defined in [CC7x-DESC] 4984c3f9727SGilad Ben-Yossef */ 49918e732b8SNathan Chancellor static inline void set_cipher_mode(struct cc_hw_desc *pdesc, int mode) 5004c3f9727SGilad Ben-Yossef { 5014c3f9727SGilad Ben-Yossef pdesc->word[4] |= FIELD_PREP(WORD4_CIPHER_MODE, mode); 5024c3f9727SGilad Ben-Yossef } 5034c3f9727SGilad Ben-Yossef 5044c3f9727SGilad Ben-Yossef /* 50518a1dc1fSYael Chemla * Set the cipher mode for hash algorithms. 50618a1dc1fSYael Chemla * 50718a1dc1fSYael Chemla * @pdesc: pointer HW descriptor struct 50818a1dc1fSYael Chemla * @cipher_mode: Any one of the modes defined in [CC7x-DESC] 50918a1dc1fSYael Chemla * @hash_mode: specifies which hash is being handled 51018a1dc1fSYael Chemla */ 51118a1dc1fSYael Chemla static inline void set_hash_cipher_mode(struct cc_hw_desc *pdesc, 51218a1dc1fSYael Chemla enum drv_cipher_mode cipher_mode, 51318a1dc1fSYael Chemla enum drv_hash_mode hash_mode) 51418a1dc1fSYael Chemla { 51518a1dc1fSYael Chemla set_cipher_mode(pdesc, cipher_mode); 516927574e0SYael Chemla if (hash_mode == DRV_HASH_SM3) 517927574e0SYael Chemla set_aes_xor_crypto_key(pdesc); 51818a1dc1fSYael Chemla } 51918a1dc1fSYael Chemla 52018a1dc1fSYael Chemla /* 5214c3f9727SGilad Ben-Yossef * Set the cipher configuration fields. 5224c3f9727SGilad Ben-Yossef * 5234c3f9727SGilad Ben-Yossef * @pdesc: pointer HW descriptor struct 5244c3f9727SGilad Ben-Yossef * @mode: Any one of the modes defined in [CC7x-DESC] 5254c3f9727SGilad Ben-Yossef */ 52618e732b8SNathan Chancellor static inline void set_cipher_config0(struct cc_hw_desc *pdesc, int mode) 5274c3f9727SGilad Ben-Yossef { 5284c3f9727SGilad Ben-Yossef pdesc->word[4] |= FIELD_PREP(WORD4_CIPHER_CONF0, mode); 5294c3f9727SGilad Ben-Yossef } 5304c3f9727SGilad Ben-Yossef 5314c3f9727SGilad Ben-Yossef /* 5324c3f9727SGilad Ben-Yossef * Set the cipher configuration fields. 5334c3f9727SGilad Ben-Yossef * 5344c3f9727SGilad Ben-Yossef * @pdesc: pointer HW descriptor struct 5354c3f9727SGilad Ben-Yossef * @config: Any one of the modes defined in [CC7x-DESC] 5364c3f9727SGilad Ben-Yossef */ 5374c3f9727SGilad Ben-Yossef static inline void set_cipher_config1(struct cc_hw_desc *pdesc, 5384c3f9727SGilad Ben-Yossef enum cc_hash_conf_pad config) 5394c3f9727SGilad Ben-Yossef { 5404c3f9727SGilad Ben-Yossef pdesc->word[4] |= FIELD_PREP(WORD4_CIPHER_CONF1, config); 5414c3f9727SGilad Ben-Yossef } 5424c3f9727SGilad Ben-Yossef 5434c3f9727SGilad Ben-Yossef /* 5444c3f9727SGilad Ben-Yossef * Set HW key configuration fields. 5454c3f9727SGilad Ben-Yossef * 5464c3f9727SGilad Ben-Yossef * @pdesc: pointer HW descriptor struct 5474c3f9727SGilad Ben-Yossef * @hw_key: The HW key slot asdefined in enum cc_hw_crypto_key 5484c3f9727SGilad Ben-Yossef */ 5494c3f9727SGilad Ben-Yossef static inline void set_hw_crypto_key(struct cc_hw_desc *pdesc, 5504c3f9727SGilad Ben-Yossef enum cc_hw_crypto_key hw_key) 5514c3f9727SGilad Ben-Yossef { 5524c3f9727SGilad Ben-Yossef pdesc->word[4] |= FIELD_PREP(WORD4_CIPHER_DO, 5534c3f9727SGilad Ben-Yossef (hw_key & HW_KEY_MASK_CIPHER_DO)) | 5544c3f9727SGilad Ben-Yossef FIELD_PREP(WORD4_CIPHER_CONF2, 5554c3f9727SGilad Ben-Yossef (hw_key >> HW_KEY_SHIFT_CIPHER_CFG2)); 5564c3f9727SGilad Ben-Yossef } 5574c3f9727SGilad Ben-Yossef 5584c3f9727SGilad Ben-Yossef /* 5594c3f9727SGilad Ben-Yossef * Set byte order of all setup-finalize descriptors. 5604c3f9727SGilad Ben-Yossef * 5614c3f9727SGilad Ben-Yossef * @pdesc: pointer HW descriptor struct 5624c3f9727SGilad Ben-Yossef * @config: Any one of the modes defined in [CC7x-DESC] 5634c3f9727SGilad Ben-Yossef */ 5644c3f9727SGilad Ben-Yossef static inline void set_bytes_swap(struct cc_hw_desc *pdesc, bool config) 5654c3f9727SGilad Ben-Yossef { 5664c3f9727SGilad Ben-Yossef pdesc->word[4] |= FIELD_PREP(WORD4_BYTES_SWAP, config); 5674c3f9727SGilad Ben-Yossef } 5684c3f9727SGilad Ben-Yossef 5694c3f9727SGilad Ben-Yossef /* 5704c3f9727SGilad Ben-Yossef * Set CMAC_SIZE0 mode. 5714c3f9727SGilad Ben-Yossef * 5724c3f9727SGilad Ben-Yossef * @pdesc: pointer HW descriptor struct 5734c3f9727SGilad Ben-Yossef */ 5744c3f9727SGilad Ben-Yossef static inline void set_cmac_size0_mode(struct cc_hw_desc *pdesc) 5754c3f9727SGilad Ben-Yossef { 5764c3f9727SGilad Ben-Yossef pdesc->word[4] |= FIELD_PREP(WORD4_CMAC_SIZE0, 1); 5774c3f9727SGilad Ben-Yossef } 5784c3f9727SGilad Ben-Yossef 5794c3f9727SGilad Ben-Yossef /* 5804c3f9727SGilad Ben-Yossef * Set key size descriptor field. 5814c3f9727SGilad Ben-Yossef * 5824c3f9727SGilad Ben-Yossef * @pdesc: pointer HW descriptor struct 5834c3f9727SGilad Ben-Yossef * @size: key size in bytes (NOT size code) 5844c3f9727SGilad Ben-Yossef */ 5854c3f9727SGilad Ben-Yossef static inline void set_key_size(struct cc_hw_desc *pdesc, u32 size) 5864c3f9727SGilad Ben-Yossef { 5874c3f9727SGilad Ben-Yossef pdesc->word[4] |= FIELD_PREP(WORD4_KEY_SIZE, size); 5884c3f9727SGilad Ben-Yossef } 5894c3f9727SGilad Ben-Yossef 5904c3f9727SGilad Ben-Yossef /* 5914c3f9727SGilad Ben-Yossef * Set AES key size. 5924c3f9727SGilad Ben-Yossef * 5934c3f9727SGilad Ben-Yossef * @pdesc: pointer HW descriptor struct 5944c3f9727SGilad Ben-Yossef * @size: key size in bytes (NOT size code) 5954c3f9727SGilad Ben-Yossef */ 5964c3f9727SGilad Ben-Yossef static inline void set_key_size_aes(struct cc_hw_desc *pdesc, u32 size) 5974c3f9727SGilad Ben-Yossef { 5984c3f9727SGilad Ben-Yossef set_key_size(pdesc, ((size >> 3) - 2)); 5994c3f9727SGilad Ben-Yossef } 6004c3f9727SGilad Ben-Yossef 6014c3f9727SGilad Ben-Yossef /* 6024c3f9727SGilad Ben-Yossef * Set DES key size. 6034c3f9727SGilad Ben-Yossef * 6044c3f9727SGilad Ben-Yossef * @pdesc: pointer HW descriptor struct 6054c3f9727SGilad Ben-Yossef * @size: key size in bytes (NOT size code) 6064c3f9727SGilad Ben-Yossef */ 6074c3f9727SGilad Ben-Yossef static inline void set_key_size_des(struct cc_hw_desc *pdesc, u32 size) 6084c3f9727SGilad Ben-Yossef { 6094c3f9727SGilad Ben-Yossef set_key_size(pdesc, ((size >> 3) - 1)); 6104c3f9727SGilad Ben-Yossef } 6114c3f9727SGilad Ben-Yossef 6124c3f9727SGilad Ben-Yossef /* 6134c3f9727SGilad Ben-Yossef * Set the descriptor setup mode 6144c3f9727SGilad Ben-Yossef * 6154c3f9727SGilad Ben-Yossef * @pdesc: pointer HW descriptor struct 6164c3f9727SGilad Ben-Yossef * @mode: Any one of the setup modes defined in [CC7x-DESC] 6174c3f9727SGilad Ben-Yossef */ 6184c3f9727SGilad Ben-Yossef static inline void set_setup_mode(struct cc_hw_desc *pdesc, 6194c3f9727SGilad Ben-Yossef enum cc_setup_op mode) 6204c3f9727SGilad Ben-Yossef { 6214c3f9727SGilad Ben-Yossef pdesc->word[4] |= FIELD_PREP(WORD4_SETUP_OPERATION, mode); 6224c3f9727SGilad Ben-Yossef } 6234c3f9727SGilad Ben-Yossef 6244c3f9727SGilad Ben-Yossef /* 6254c3f9727SGilad Ben-Yossef * Set the descriptor cipher DO 6264c3f9727SGilad Ben-Yossef * 6274c3f9727SGilad Ben-Yossef * @pdesc: pointer HW descriptor struct 6284c3f9727SGilad Ben-Yossef * @config: Any one of the cipher do defined in [CC7x-DESC] 6294c3f9727SGilad Ben-Yossef */ 6304c3f9727SGilad Ben-Yossef static inline void set_cipher_do(struct cc_hw_desc *pdesc, 6314c3f9727SGilad Ben-Yossef enum cc_hash_cipher_pad config) 6324c3f9727SGilad Ben-Yossef { 6334c3f9727SGilad Ben-Yossef pdesc->word[4] |= FIELD_PREP(WORD4_CIPHER_DO, 6344c3f9727SGilad Ben-Yossef (config & HW_KEY_MASK_CIPHER_DO)); 6354c3f9727SGilad Ben-Yossef } 6364c3f9727SGilad Ben-Yossef 6374c3f9727SGilad Ben-Yossef #endif /*__CC_HW_QUEUE_DEFS_H__*/ 638