Path: blob/master/drivers/crypto/inside-secure/eip93/eip93-regs.h
26285 views
/* SPDX-License-Identifier: GPL-2.0 */1/*2* Copyright (C) 2019 - 20213*4* Richard van Schagen <[email protected]>5* Christian Marangi <[email protected]6*/7#ifndef REG_EIP93_H8#define REG_EIP93_H910#define EIP93_REG_PE_CTRL_STAT 0x011#define EIP93_PE_CTRL_PE_PAD_CTRL_STAT GENMASK(31, 24)12#define EIP93_PE_CTRL_PE_EXT_ERR_CODE GENMASK(23, 20)13#define EIP93_PE_CTRL_PE_EXT_ERR_PROCESSING 0x814#define EIP93_PE_CTRL_PE_EXT_ERR_BLOCK_SIZE_ERR 0x715#define EIP93_PE_CTRL_PE_EXT_ERR_INVALID_PK_LENGTH 0x616#define EIP93_PE_CTRL_PE_EXT_ERR_ZERO_LENGTH 0x517#define EIP93_PE_CTRL_PE_EXT_ERR_SPI 0x418#define EIP93_PE_CTRL_PE_EXT_ERR_INVALID_CRYPTO_ALGO 0x319#define EIP93_PE_CTRL_PE_EXT_ERR_INVALID_CRYPTO_OP 0x220#define EIP93_PE_CTRL_PE_EXT_ERR_DESC_OWNER 0x121#define EIP93_PE_CTRL_PE_EXT_ERR_BUS 0x022#define EIP93_PE_CTRL_PE_EXT_ERR BIT(19)23#define EIP93_PE_CTRL_PE_SEQNUM_ERR BIT(18)24#define EIP93_PE_CTRL_PE_PAD_ERR BIT(17)25#define EIP93_PE_CTRL_PE_AUTH_ERR BIT(16)26#define EIP93_PE_CTRL_PE_PAD_VALUE GENMASK(15, 8)27#define EIP93_PE_CTRL_PE_PRNG_MODE GENMASK(7, 6)28#define EIP93_PE_CTRL_PE_HASH_FINAL BIT(4)29#define EIP93_PE_CTRL_PE_INIT_ARC4 BIT(3)30#define EIP93_PE_CTRL_PE_READY_DES_TRING_OWN GENMASK(1, 0)31#define EIP93_PE_CTRL_PE_READY 0x232#define EIP93_PE_CTRL_HOST_READY 0x133#define EIP93_REG_PE_SOURCE_ADDR 0x434#define EIP93_REG_PE_DEST_ADDR 0x835#define EIP93_REG_PE_SA_ADDR 0xc36#define EIP93_REG_PE_ADDR 0x10 /* STATE_ADDR */37/*38* Special implementation for user ID39* user_id in eip93_descriptor is used to identify the40* descriptor and is opaque and can be used by the driver41* in custom way.42*43* The usage of this should be to put an address to the crypto44* request struct from the kernel but this can't work in 64bit45* world.46*47* Also it's required to put some flags to identify the last48* descriptor.49*50* To handle this, split the u32 in 2 part:51* - 31:16 descriptor flags52* - 15:0 IDR to connect the crypto request address53*/54#define EIP93_REG_PE_USER_ID 0x1855#define EIP93_PE_USER_ID_DESC_FLAGS GENMASK(31, 16)56#define EIP93_PE_USER_ID_CRYPTO_IDR GENMASK(15, 0)57#define EIP93_REG_PE_LENGTH 0x1c58#define EIP93_PE_LENGTH_BYPASS GENMASK(31, 24)59#define EIP93_PE_LENGTH_HOST_PE_READY GENMASK(23, 22)60#define EIP93_PE_LENGTH_PE_READY 0x261#define EIP93_PE_LENGTH_HOST_READY 0x162#define EIP93_PE_LENGTH_LENGTH GENMASK(19, 0)6364/* PACKET ENGINE RING configuration registers */65#define EIP93_REG_PE_CDR_BASE 0x8066#define EIP93_REG_PE_RDR_BASE 0x8467#define EIP93_REG_PE_RING_CONFIG 0x8868#define EIP93_PE_EN_EXT_TRIG BIT(31)69/* Absent in later revision of eip93 */70/* #define EIP93_PE_RING_OFFSET GENMASK(23, 15) */71#define EIP93_PE_RING_SIZE GENMASK(9, 0)72#define EIP93_REG_PE_RING_THRESH 0x8c73#define EIPR93_PE_TIMEROUT_EN BIT(31)74#define EIPR93_PE_RD_TIMEOUT GENMASK(29, 26)75#define EIPR93_PE_RDR_THRESH GENMASK(25, 16)76#define EIPR93_PE_CDR_THRESH GENMASK(9, 0)77#define EIP93_REG_PE_CD_COUNT 0x9078#define EIP93_PE_CD_COUNT GENMASK(10, 0)79/*80* In the same register, writing a value in GENMASK(7, 0) will81* increment the descriptor count and start DMA action.82*/83#define EIP93_PE_CD_COUNT_INCR GENMASK(7, 0)84#define EIP93_REG_PE_RD_COUNT 0x9485#define EIP93_PE_RD_COUNT GENMASK(10, 0)86/*87* In the same register, writing a value in GENMASK(7, 0) will88* increment the descriptor count and start DMA action.89*/90#define EIP93_PE_RD_COUNT_INCR GENMASK(7, 0)91#define EIP93_REG_PE_RING_RW_PNTR 0x98 /* RING_PNTR */9293/* PACKET ENGINE configuration registers */94#define EIP93_REG_PE_CONFIG 0x10095#define EIP93_PE_CONFIG_SWAP_TARGET BIT(20)96#define EIP93_PE_CONFIG_SWAP_DATA BIT(18)97#define EIP93_PE_CONFIG_SWAP_SA BIT(17)98#define EIP93_PE_CONFIG_SWAP_CDRD BIT(16)99#define EIP93_PE_CONFIG_EN_CDR_UPDATE BIT(10)100#define EIP93_PE_CONFIG_PE_MODE GENMASK(9, 8)101#define EIP93_PE_TARGET_AUTO_RING_MODE FIELD_PREP(EIP93_PE_CONFIG_PE_MODE, 0x3)102#define EIP93_PE_TARGET_COMMAND_NO_RDR_MODE FIELD_PREP(EIP93_PE_CONFIG_PE_MODE, 0x2)103#define EIP93_PE_TARGET_COMMAND_WITH_RDR_MODE FIELD_PREP(EIP93_PE_CONFIG_PE_MODE, 0x1)104#define EIP93_PE_DIRECT_HOST_MODE FIELD_PREP(EIP93_PE_CONFIG_PE_MODE, 0x0)105#define EIP93_PE_CONFIG_RST_RING BIT(2)106#define EIP93_PE_CONFIG_RST_PE BIT(0)107#define EIP93_REG_PE_STATUS 0x104108#define EIP93_REG_PE_BUF_THRESH 0x10c109#define EIP93_PE_OUTBUF_THRESH GENMASK(23, 16)110#define EIP93_PE_INBUF_THRESH GENMASK(7, 0)111#define EIP93_REG_PE_INBUF_COUNT 0x100112#define EIP93_REG_PE_OUTBUF_COUNT 0x114113#define EIP93_REG_PE_BUF_RW_PNTR 0x118 /* BUF_PNTR */114115/* PACKET ENGINE endian config */116#define EIP93_REG_PE_ENDIAN_CONFIG 0x1cc117#define EIP93_AIROHA_REG_PE_ENDIAN_CONFIG 0x1d0118#define EIP93_PE_ENDIAN_TARGET_BYTE_SWAP GENMASK(23, 16)119#define EIP93_PE_ENDIAN_MASTER_BYTE_SWAP GENMASK(7, 0)120/*121* Byte goes 2 and 2 and are referenced by ID122* Split GENMASK(7, 0) in 4 part, one for each byte.123* Example LITTLE ENDIAN: Example BIG ENDIAN124* GENMASK(7, 6) 0x3 GENMASK(7, 6) 0x0125* GENMASK(5, 4) 0x2 GENMASK(7, 6) 0x1126* GENMASK(3, 2) 0x1 GENMASK(3, 2) 0x2127* GENMASK(1, 0) 0x0 GENMASK(1, 0) 0x3128*/129#define EIP93_PE_ENDIAN_BYTE0 0x0130#define EIP93_PE_ENDIAN_BYTE1 0x1131#define EIP93_PE_ENDIAN_BYTE2 0x2132#define EIP93_PE_ENDIAN_BYTE3 0x3133134/* EIP93 CLOCK control registers */135#define EIP93_REG_PE_CLOCK_CTRL 0x1e8136#define EIP93_PE_CLOCK_EN_HASH_CLK BIT(4)137#define EIP93_PE_CLOCK_EN_ARC4_CLK BIT(3)138#define EIP93_PE_CLOCK_EN_AES_CLK BIT(2)139#define EIP93_PE_CLOCK_EN_DES_CLK BIT(1)140#define EIP93_PE_CLOCK_EN_PE_CLK BIT(0)141142/* EIP93 Device Option and Revision Register */143#define EIP93_REG_PE_OPTION_1 0x1f4144#define EIP93_PE_OPTION_MAC_KEY256 BIT(31)145#define EIP93_PE_OPTION_MAC_KEY192 BIT(30)146#define EIP93_PE_OPTION_MAC_KEY128 BIT(29)147#define EIP93_PE_OPTION_AES_CBC_MAC BIT(28)148#define EIP93_PE_OPTION_AES_XCBX BIT(23)149#define EIP93_PE_OPTION_SHA_256 BIT(19)150#define EIP93_PE_OPTION_SHA_224 BIT(18)151#define EIP93_PE_OPTION_SHA_1 BIT(17)152#define EIP93_PE_OPTION_MD5 BIT(16)153#define EIP93_PE_OPTION_AES_KEY256 BIT(15)154#define EIP93_PE_OPTION_AES_KEY192 BIT(14)155#define EIP93_PE_OPTION_AES_KEY128 BIT(13)156#define EIP93_PE_OPTION_AES BIT(2)157#define EIP93_PE_OPTION_ARC4 BIT(1)158#define EIP93_PE_OPTION_TDES BIT(0) /* DES and TDES */159#define EIP93_REG_PE_OPTION_0 0x1f8160#define EIP93_REG_PE_REVISION 0x1fc161#define EIP93_PE_REVISION_MAJ_HW_REV GENMASK(27, 24)162#define EIP93_PE_REVISION_MIN_HW_REV GENMASK(23, 20)163#define EIP93_PE_REVISION_HW_PATCH GENMASK(19, 16)164#define EIP93_PE_REVISION_EIP_NO GENMASK(7, 0)165166/* EIP93 Interrupt Control Register */167#define EIP93_REG_INT_UNMASK_STAT 0x200168#define EIP93_REG_INT_MASK_STAT 0x204169#define EIP93_REG_INT_CLR 0x204170#define EIP93_REG_INT_MASK 0x208 /* INT_EN */171/* Each int reg have the same bitmap */172#define EIP93_INT_INTERFACE_ERR BIT(18)173#define EIP93_INT_RPOC_ERR BIT(17)174#define EIP93_INT_PE_RING_ERR BIT(16)175#define EIP93_INT_HALT BIT(15)176#define EIP93_INT_OUTBUF_THRESH BIT(11)177#define EIP93_INT_INBUF_THRESH BIT(10)178#define EIP93_INT_OPERATION_DONE BIT(9)179#define EIP93_INT_RDR_THRESH BIT(1)180#define EIP93_INT_CDR_THRESH BIT(0)181#define EIP93_INT_ALL (EIP93_INT_INTERFACE_ERR | \182EIP93_INT_RPOC_ERR | \183EIP93_INT_PE_RING_ERR | \184EIP93_INT_HALT | \185EIP93_INT_OUTBUF_THRESH | \186EIP93_INT_INBUF_THRESH | \187EIP93_INT_OPERATION_DONE | \188EIP93_INT_RDR_THRESH | \189EIP93_INT_CDR_THRESH)190191#define EIP93_REG_INT_CFG 0x20c192#define EIP93_INT_TYPE_PULSE BIT(0)193#define EIP93_REG_MASK_ENABLE 0x210194#define EIP93_REG_MASK_DISABLE 0x214195196/* EIP93 SA Record register */197#define EIP93_REG_SA_CMD_0 0x400198#define EIP93_SA_CMD_SAVE_HASH BIT(29)199#define EIP93_SA_CMD_SAVE_IV BIT(28)200#define EIP93_SA_CMD_HASH_SOURCE GENMASK(27, 26)201#define EIP93_SA_CMD_HASH_NO_LOAD FIELD_PREP(EIP93_SA_CMD_HASH_SOURCE, 0x3)202#define EIP93_SA_CMD_HASH_FROM_STATE FIELD_PREP(EIP93_SA_CMD_HASH_SOURCE, 0x2)203#define EIP93_SA_CMD_HASH_FROM_SA FIELD_PREP(EIP93_SA_CMD_HASH_SOURCE, 0x0)204#define EIP93_SA_CMD_IV_SOURCE GENMASK(25, 24)205#define EIP93_SA_CMD_IV_FROM_PRNG FIELD_PREP(EIP93_SA_CMD_IV_SOURCE, 0x3)206#define EIP93_SA_CMD_IV_FROM_STATE FIELD_PREP(EIP93_SA_CMD_IV_SOURCE, 0x2)207#define EIP93_SA_CMD_IV_FROM_INPUT FIELD_PREP(EIP93_SA_CMD_IV_SOURCE, 0x1)208#define EIP93_SA_CMD_IV_NO_LOAD FIELD_PREP(EIP93_SA_CMD_IV_SOURCE, 0x0)209#define EIP93_SA_CMD_DIGEST_LENGTH GENMASK(23, 20)210#define EIP93_SA_CMD_DIGEST_10WORD FIELD_PREP(EIP93_SA_CMD_DIGEST_LENGTH, 0xa) /* SRTP and TLS */211#define EIP93_SA_CMD_DIGEST_8WORD FIELD_PREP(EIP93_SA_CMD_DIGEST_LENGTH, 0x8) /* SHA-256 */212#define EIP93_SA_CMD_DIGEST_7WORD FIELD_PREP(EIP93_SA_CMD_DIGEST_LENGTH, 0x7) /* SHA-224 */213#define EIP93_SA_CMD_DIGEST_6WORD FIELD_PREP(EIP93_SA_CMD_DIGEST_LENGTH, 0x6)214#define EIP93_SA_CMD_DIGEST_5WORD FIELD_PREP(EIP93_SA_CMD_DIGEST_LENGTH, 0x5) /* SHA1 */215#define EIP93_SA_CMD_DIGEST_4WORD FIELD_PREP(EIP93_SA_CMD_DIGEST_LENGTH, 0x4) /* MD5 and AES-based */216#define EIP93_SA_CMD_DIGEST_3WORD_IPSEC FIELD_PREP(EIP93_SA_CMD_DIGEST_LENGTH, 0x3) /* IPSEC */217#define EIP93_SA_CMD_DIGEST_2WORD FIELD_PREP(EIP93_SA_CMD_DIGEST_LENGTH, 0x2)218#define EIP93_SA_CMD_DIGEST_1WORD FIELD_PREP(EIP93_SA_CMD_DIGEST_LENGTH, 0x1)219#define EIP93_SA_CMD_DIGEST_3WORD FIELD_PREP(EIP93_SA_CMD_DIGEST_LENGTH, 0x0) /* 96bit output */220#define EIP93_SA_CMD_HDR_PROC BIT(19)221#define EIP93_SA_CMD_EXT_PAD BIT(18)222#define EIP93_SA_CMD_SCPAD BIT(17)223#define EIP93_SA_CMD_HASH GENMASK(15, 12)224#define EIP93_SA_CMD_HASH_NULL FIELD_PREP(EIP93_SA_CMD_HASH, 0xf)225#define EIP93_SA_CMD_HASH_SHA256 FIELD_PREP(EIP93_SA_CMD_HASH, 0x3)226#define EIP93_SA_CMD_HASH_SHA224 FIELD_PREP(EIP93_SA_CMD_HASH, 0x2)227#define EIP93_SA_CMD_HASH_SHA1 FIELD_PREP(EIP93_SA_CMD_HASH, 0x1)228#define EIP93_SA_CMD_HASH_MD5 FIELD_PREP(EIP93_SA_CMD_HASH, 0x0)229#define EIP93_SA_CMD_CIPHER GENMASK(11, 8)230#define EIP93_SA_CMD_CIPHER_NULL FIELD_PREP(EIP93_SA_CMD_CIPHER, 0xf)231#define EIP93_SA_CMD_CIPHER_AES FIELD_PREP(EIP93_SA_CMD_CIPHER, 0x3)232#define EIP93_SA_CMD_CIPHER_ARC4 FIELD_PREP(EIP93_SA_CMD_CIPHER, 0x2)233#define EIP93_SA_CMD_CIPHER_3DES FIELD_PREP(EIP93_SA_CMD_CIPHER, 0x1)234#define EIP93_SA_CMD_CIPHER_DES FIELD_PREP(EIP93_SA_CMD_CIPHER, 0x0)235#define EIP93_SA_CMD_PAD_TYPE GENMASK(7, 6)236#define EIP93_SA_CMD_PAD_CONST_SSL FIELD_PREP(EIP93_SA_CMD_PAD_TYPE, 0x6)237#define EIP93_SA_CMD_PAD_TLS_DTLS FIELD_PREP(EIP93_SA_CMD_PAD_TYPE, 0x5)238#define EIP93_SA_CMD_PAD_ZERO FIELD_PREP(EIP93_SA_CMD_PAD_TYPE, 0x3)239#define EIP93_SA_CMD_PAD_CONST FIELD_PREP(EIP93_SA_CMD_PAD_TYPE, 0x2)240#define EIP93_SA_CMD_PAD_PKCS7 FIELD_PREP(EIP93_SA_CMD_PAD_TYPE, 0x1)241#define EIP93_SA_CMD_PAD_IPSEC FIELD_PREP(EIP93_SA_CMD_PAD_TYPE, 0x0)242#define EIP93_SA_CMD_OPGROUP GENMASK(5, 4)243#define EIP93_SA_CMD_OP_EXT FIELD_PREP(EIP93_SA_CMD_OPGROUP, 0x2)244#define EIP93_SA_CMD_OP_PROTOCOL FIELD_PREP(EIP93_SA_CMD_OPGROUP, 0x1)245#define EIP93_SA_CMD_OP_BASIC FIELD_PREP(EIP93_SA_CMD_OPGROUP, 0x0)246#define EIP93_SA_CMD_DIRECTION_IN BIT(3) /* 0: outbount 1: inbound */247#define EIP93_SA_CMD_OPCODE GENMASK(2, 0)248#define EIP93_SA_CMD_OPCODE_BASIC_OUT_PRNG 0x7249#define EIP93_SA_CMD_OPCODE_BASIC_OUT_HASH 0x3250#define EIP93_SA_CMD_OPCODE_BASIC_OUT_ENC_HASH 0x1251#define EIP93_SA_CMD_OPCODE_BASIC_OUT_ENC 0x0252#define EIP93_SA_CMD_OPCODE_BASIC_IN_HASH 0x3253#define EIP93_SA_CMD_OPCODE_BASIC_IN_HASH_DEC 0x1254#define EIP93_SA_CMD_OPCODE_BASIC_IN_DEC 0x0255#define EIP93_SA_CMD_OPCODE_PROTOCOL_OUT_ESP 0x0256#define EIP93_SA_CMD_OPCODE_PROTOCOL_OUT_SSL 0x4257#define EIP93_SA_CMD_OPCODE_PROTOCOL_OUT_TLS 0x5258#define EIP93_SA_CMD_OPCODE_PROTOCOL_OUT_SRTP 0x7259#define EIP93_SA_CMD_OPCODE_PROTOCOL_IN_ESP 0x0260#define EIP93_SA_CMD_OPCODE_PROTOCOL_IN_SSL 0x2261#define EIP93_SA_CMD_OPCODE_PROTOCOL_IN_TLS 0x3262#define EIP93_SA_CMD_OPCODE_PROTOCOL_IN_SRTP 0x7263#define EIP93_SA_CMD_OPCODE_EXT_OUT_DTSL 0x1264#define EIP93_SA_CMD_OPCODE_EXT_OUT_SSL 0x4265#define EIP93_SA_CMD_OPCODE_EXT_OUT_TLSV10 0x5266#define EIP93_SA_CMD_OPCODE_EXT_OUT_TLSV11 0x6267#define EIP93_SA_CMD_OPCODE_EXT_IN_DTSL 0x1268#define EIP93_SA_CMD_OPCODE_EXT_IN_SSL 0x4269#define EIP93_SA_CMD_OPCODE_EXT_IN_TLSV10 0x5270#define EIP93_SA_CMD_OPCODE_EXT_IN_TLSV11 0x6271#define EIP93_REG_SA_CMD_1 0x404272#define EIP93_SA_CMD_EN_SEQNUM_CHK BIT(29)273/* This mask can be either used for ARC4 or AES */274#define EIP93_SA_CMD_ARC4_KEY_LENGHT GENMASK(28, 24)275#define EIP93_SA_CMD_AES_DEC_KEY BIT(28) /* 0: encrypt key 1: decrypt key */276#define EIP93_SA_CMD_AES_KEY_LENGTH GENMASK(26, 24)277#define EIP93_SA_CMD_AES_KEY_256BIT FIELD_PREP(EIP93_SA_CMD_AES_KEY_LENGTH, 0x4)278#define EIP93_SA_CMD_AES_KEY_192BIT FIELD_PREP(EIP93_SA_CMD_AES_KEY_LENGTH, 0x3)279#define EIP93_SA_CMD_AES_KEY_128BIT FIELD_PREP(EIP93_SA_CMD_AES_KEY_LENGTH, 0x2)280#define EIP93_SA_CMD_HASH_CRYPT_OFFSET GENMASK(23, 16)281#define EIP93_SA_CMD_BYTE_OFFSET BIT(13) /* 0: CRYPT_OFFSET in 32bit word 1: CRYPT_OFFSET in 8bit bytes */282#define EIP93_SA_CMD_HMAC BIT(12)283#define EIP93_SA_CMD_SSL_MAC BIT(12)284/* This mask can be either used for ARC4 or AES */285#define EIP93_SA_CMD_CHIPER_MODE GENMASK(9, 8)286/* AES or DES operations */287#define EIP93_SA_CMD_CHIPER_MODE_ICM FIELD_PREP(EIP93_SA_CMD_CHIPER_MODE, 0x3)288#define EIP93_SA_CMD_CHIPER_MODE_CTR FIELD_PREP(EIP93_SA_CMD_CHIPER_MODE, 0x2)289#define EIP93_SA_CMD_CHIPER_MODE_CBC FIELD_PREP(EIP93_SA_CMD_CHIPER_MODE, 0x1)290#define EIP93_SA_CMD_CHIPER_MODE_ECB FIELD_PREP(EIP93_SA_CMD_CHIPER_MODE, 0x0)291/* ARC4 operations */292#define EIP93_SA_CMD_CHIPER_MODE_STATEFULL FIELD_PREP(EIP93_SA_CMD_CHIPER_MODE, 0x1)293#define EIP93_SA_CMD_CHIPER_MODE_STATELESS FIELD_PREP(EIP93_SA_CMD_CHIPER_MODE, 0x0)294#define EIP93_SA_CMD_COPY_PAD BIT(3)295#define EIP93_SA_CMD_COPY_PAYLOAD BIT(2)296#define EIP93_SA_CMD_COPY_HEADER BIT(1)297#define EIP93_SA_CMD_COPY_DIGEST BIT(0) /* With this enabled, COPY_PAD is required */298299/* State save register */300#define EIP93_REG_STATE_IV_0 0x500301#define EIP93_REG_STATE_IV_1 0x504302303#define EIP93_REG_PE_ARC4STATE 0x700304305struct sa_record {306u32 sa_cmd0_word;307u32 sa_cmd1_word;308u32 sa_key[8];309u8 sa_i_digest[32];310u8 sa_o_digest[32];311u32 sa_spi;312u32 sa_seqnum[2];313u32 sa_seqmum_mask[2];314u32 sa_nonce;315} __packed;316317struct sa_state {318u32 state_iv[4];319u32 state_byte_cnt[2];320u8 state_i_digest[32];321} __packed;322323struct eip93_descriptor {324u32 pe_ctrl_stat_word;325u32 src_addr;326u32 dst_addr;327u32 sa_addr;328u32 state_addr;329u32 arc4_addr;330u32 user_id;331u32 pe_length_word;332} __packed;333334#endif335336337