xref: /dpdk/drivers/common/cnxk/roc_cpt.h (revision 3be1df02fb09db123b9372e1fec6b4d741ae53d9)
1c045d2e5SAnoob Joseph /* SPDX-License-Identifier: BSD-3-Clause
2c045d2e5SAnoob Joseph  * Copyright(C) 2021 Marvell.
3c045d2e5SAnoob Joseph  */
4c045d2e5SAnoob Joseph 
5c045d2e5SAnoob Joseph #ifndef _ROC_CPT_H_
6c045d2e5SAnoob Joseph #define _ROC_CPT_H_
7c045d2e5SAnoob Joseph 
8fdbec406SAnoob Joseph #include "hw/cpt.h"
9fdbec406SAnoob Joseph 
10fdbec406SAnoob Joseph #include "roc_platform.h"
11fdbec406SAnoob Joseph 
121132ad0fSKiran Kumar K #define ROC_AE_CPT_BLOCK_TYPE1 0
131132ad0fSKiran Kumar K #define ROC_AE_CPT_BLOCK_TYPE2 1
141132ad0fSKiran Kumar K 
157c67c489SNithin Dabilpuram #define ROC_LOADFVC_MAJOR_OP 0x01UL
167c67c489SNithin Dabilpuram #define ROC_LOADFVC_MINOR_OP 0x08UL
177c67c489SNithin Dabilpuram 
18c045d2e5SAnoob Joseph /* Default engine groups */
19c045d2e5SAnoob Joseph #define ROC_CPT_DFLT_ENG_GRP_SE	   0UL
20c045d2e5SAnoob Joseph #define ROC_CPT_DFLT_ENG_GRP_SE_IE 1UL
21c045d2e5SAnoob Joseph #define ROC_CPT_DFLT_ENG_GRP_AE	   2UL
22c045d2e5SAnoob Joseph 
23c045d2e5SAnoob Joseph #define ROC_CPT_MAX_LFS 64
247658d035STejasree Kondoj #define ROC_CPT_MAX_BLKS 2
25497d780eSAnoob Joseph #define ROC_CN10K_CPT_INST_DW_M1                                               \
26497d780eSAnoob Joseph 	((uint64_t)(((sizeof(struct cpt_inst_s) / 16) - 1) & 0x7))
27497d780eSAnoob Joseph #define ROC_CN10K_TWO_CPT_INST_DW_M1                                           \
28497d780eSAnoob Joseph 	((uint64_t)(((sizeof(struct cpt_inst_s) * 2 / 16) - 1) & 0x7))
29497d780eSAnoob Joseph 
30497d780eSAnoob Joseph /* Vector of sizes in the burst of 16 CPT inst except first in 63:19 of
31497d780eSAnoob Joseph  * APT_LMT_ARG_S
32497d780eSAnoob Joseph  */
33497d780eSAnoob Joseph #define ROC_CN10K_CPT_LMT_ARG                                                                      \
34d935d82eSAnoob Joseph 	(ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 0) | ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 1) |     \
35d935d82eSAnoob Joseph 	 ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 2) | ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 3) |     \
36d935d82eSAnoob Joseph 	 ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 4) | ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 5) |     \
37d935d82eSAnoob Joseph 	 ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 6) | ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 7) |     \
38d935d82eSAnoob Joseph 	 ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 8) | ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 9) |     \
39d935d82eSAnoob Joseph 	 ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 10) | ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 11) |   \
40d935d82eSAnoob Joseph 	 ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 12) | ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 13) |   \
41497d780eSAnoob Joseph 	 ROC_CN10K_CPT_INST_DW_M1 << (19 + 3 * 14))
42c045d2e5SAnoob Joseph 
43d935d82eSAnoob Joseph /* Vector of sizes in the burst of 2 * 16 CPT inst except first in 63:19 of
44d935d82eSAnoob Joseph  * APT_LMT_ARG_S
45d935d82eSAnoob Joseph  */
46d935d82eSAnoob Joseph #define ROC_CN10K_DUAL_CPT_LMT_ARG                                                                 \
47d935d82eSAnoob Joseph 	(ROC_CN10K_TWO_CPT_INST_DW_M1 << (19 + 3 * 0) |                                            \
48d935d82eSAnoob Joseph 	 ROC_CN10K_TWO_CPT_INST_DW_M1 << (19 + 3 * 1) |                                            \
49d935d82eSAnoob Joseph 	 ROC_CN10K_TWO_CPT_INST_DW_M1 << (19 + 3 * 2) |                                            \
50d935d82eSAnoob Joseph 	 ROC_CN10K_TWO_CPT_INST_DW_M1 << (19 + 3 * 3) |                                            \
51d935d82eSAnoob Joseph 	 ROC_CN10K_TWO_CPT_INST_DW_M1 << (19 + 3 * 4) |                                            \
52d935d82eSAnoob Joseph 	 ROC_CN10K_TWO_CPT_INST_DW_M1 << (19 + 3 * 5) |                                            \
53d935d82eSAnoob Joseph 	 ROC_CN10K_TWO_CPT_INST_DW_M1 << (19 + 3 * 6) |                                            \
54d935d82eSAnoob Joseph 	 ROC_CN10K_TWO_CPT_INST_DW_M1 << (19 + 3 * 7) |                                            \
55d935d82eSAnoob Joseph 	 ROC_CN10K_TWO_CPT_INST_DW_M1 << (19 + 3 * 8) |                                            \
56d935d82eSAnoob Joseph 	 ROC_CN10K_TWO_CPT_INST_DW_M1 << (19 + 3 * 9) |                                            \
57d935d82eSAnoob Joseph 	 ROC_CN10K_TWO_CPT_INST_DW_M1 << (19 + 3 * 10) |                                           \
58d935d82eSAnoob Joseph 	 ROC_CN10K_TWO_CPT_INST_DW_M1 << (19 + 3 * 11) |                                           \
59d935d82eSAnoob Joseph 	 ROC_CN10K_TWO_CPT_INST_DW_M1 << (19 + 3 * 12) |                                           \
60d935d82eSAnoob Joseph 	 ROC_CN10K_TWO_CPT_INST_DW_M1 << (19 + 3 * 13) |                                           \
61d935d82eSAnoob Joseph 	 ROC_CN10K_TWO_CPT_INST_DW_M1 << (19 + 3 * 14))
62d935d82eSAnoob Joseph 
63a4585931SKiran Kumar K /* CPT helper macros */
64a4585931SKiran Kumar K #define ROC_CPT_AH_HDR_LEN	12
65a4585931SKiran Kumar K #define ROC_CPT_AES_GCM_IV_LEN	8
66a4585931SKiran Kumar K #define ROC_CPT_AES_GCM_MAC_LEN 16
67246dea7eSArchana Muniganti #define ROC_CPT_AES_CCM_CTR_LEN 4
68a4585931SKiran Kumar K #define ROC_CPT_AES_CBC_IV_LEN	16
69a4585931SKiran Kumar K #define ROC_CPT_SHA1_HMAC_LEN	12
70b07ee12fSArchana Muniganti #define ROC_CPT_SHA2_HMAC_LEN	16
7105be867bSAnoob Joseph #define ROC_CPT_DES_IV_LEN	8
72a4585931SKiran Kumar K 
73a4585931SKiran Kumar K #define ROC_CPT_DES3_KEY_LEN	    24
74a4585931SKiran Kumar K #define ROC_CPT_AES128_KEY_LEN	    16
75a4585931SKiran Kumar K #define ROC_CPT_AES192_KEY_LEN	    24
76a4585931SKiran Kumar K #define ROC_CPT_AES256_KEY_LEN	    32
77a4585931SKiran Kumar K #define ROC_CPT_MD5_KEY_LENGTH	    16
78a4585931SKiran Kumar K #define ROC_CPT_SHA1_KEY_LENGTH	    20
79a4585931SKiran Kumar K #define ROC_CPT_SHA256_KEY_LENGTH   32
80a4585931SKiran Kumar K #define ROC_CPT_SHA384_KEY_LENGTH   48
81a4585931SKiran Kumar K #define ROC_CPT_SHA512_KEY_LENGTH   64
82df34ede8SAnoob Joseph #define ROC_CPT_AES_XCBC_KEY_LENGTH 16
83a4585931SKiran Kumar K #define ROC_CPT_AUTH_KEY_LEN_MAX    64
84a4585931SKiran Kumar K 
85a4585931SKiran Kumar K #define ROC_CPT_DES_BLOCK_LENGTH 8
86a4585931SKiran Kumar K #define ROC_CPT_AES_BLOCK_LENGTH 16
87a4585931SKiran Kumar K 
88a4585931SKiran Kumar K /* Salt length for AES-CTR/GCM/CCM and AES-GMAC */
89a4585931SKiran Kumar K #define ROC_CPT_SALT_LEN 4
90a4585931SKiran Kumar K 
91a4585931SKiran Kumar K #define ROC_CPT_ESP_HDR_LEN	    8
92a4585931SKiran Kumar K #define ROC_CPT_ESP_TRL_LEN	    2
93a4585931SKiran Kumar K #define ROC_CPT_AH_HDR_LEN	    12
94a4585931SKiran Kumar K #define ROC_CPT_TUNNEL_IPV4_HDR_LEN 20
95a4585931SKiran Kumar K #define ROC_CPT_TUNNEL_IPV6_HDR_LEN 40
96a4585931SKiran Kumar K 
972a85deceSNithin Dabilpuram #define ROC_CPT_CCM_AAD_DATA 1
982a85deceSNithin Dabilpuram #define ROC_CPT_CCM_MSG_LEN  4
992a85deceSNithin Dabilpuram #define ROC_CPT_CCM_ICV_LEN  16
1002a85deceSNithin Dabilpuram #define ROC_CPT_CCM_FLAGS                                                      \
1012a85deceSNithin Dabilpuram 	((ROC_CPT_CCM_AAD_DATA << 6) |                                         \
1022a85deceSNithin Dabilpuram 	 (((ROC_CPT_CCM_ICV_LEN - 2) / 2) << 3) | (ROC_CPT_CCM_MSG_LEN - 1))
1032a85deceSNithin Dabilpuram #define ROC_CPT_CCM_SALT_LEN 3
1042a85deceSNithin Dabilpuram 
10571213a8bSSrujana Challa #define ROC_CPT_RES_ALIGN 16
10671213a8bSSrujana Challa 
1077658d035STejasree Kondoj enum {
1087658d035STejasree Kondoj 	ROC_CPT_REVISION_ID_83XX = 0,
1097658d035STejasree Kondoj 	ROC_CPT_REVISION_ID_96XX_B0 = 1,
1107658d035STejasree Kondoj 	ROC_CPT_REVISION_ID_96XX_C0 = 2,
1117658d035STejasree Kondoj 	ROC_CPT_REVISION_ID_98XX = 3,
1127658d035STejasree Kondoj 	ROC_CPT_REVISION_ID_106XX = 4,
1137658d035STejasree Kondoj };
1147658d035STejasree Kondoj 
115497d780eSAnoob Joseph struct roc_cpt_lmtline {
116497d780eSAnoob Joseph 	uint64_t io_addr;
117497d780eSAnoob Joseph 	uint64_t *fc_addr;
118497d780eSAnoob Joseph 	uintptr_t lmt_base;
11953668249SAnoob Joseph 	uint32_t fc_thresh;
120497d780eSAnoob Joseph };
121497d780eSAnoob Joseph 
122ed135040SArchana Muniganti struct roc_cpt_lf {
123ed135040SArchana Muniganti 	/* Input parameters */
124ed135040SArchana Muniganti 	uint16_t lf_id;
125ed135040SArchana Muniganti 	uint32_t nb_desc;
126ed135040SArchana Muniganti 	/* End of Input parameters */
127ed135040SArchana Muniganti 	struct plt_pci_device *pci_dev;
128ed135040SArchana Muniganti 	struct dev *dev;
129ed135040SArchana Muniganti 	struct roc_cpt *roc_cpt;
130ed135040SArchana Muniganti 	uintptr_t rbase;
131ed135040SArchana Muniganti 	uintptr_t lmt_base;
132ed135040SArchana Muniganti 	uint16_t msixoff;
133ed135040SArchana Muniganti 	uint16_t pf_func;
134ed135040SArchana Muniganti 	uint64_t *fc_addr;
135ed135040SArchana Muniganti 	uint64_t io_addr;
136ed135040SArchana Muniganti 	uint8_t *iq_vaddr;
137ed79bf91SVidya Sagar Velumuri 	struct roc_nix *inl_outb_nix;
13817ab6b52SSrujana Challa 	uint8_t error_event_pending;
139ed135040SArchana Muniganti } __plt_cache_aligned;
140ed135040SArchana Muniganti 
141c045d2e5SAnoob Joseph struct roc_cpt {
142c045d2e5SAnoob Joseph 	struct plt_pci_device *pci_dev;
143c045d2e5SAnoob Joseph 	struct roc_cpt_lf *lf[ROC_CPT_MAX_LFS];
144c045d2e5SAnoob Joseph 	uint16_t nb_lf;
145c045d2e5SAnoob Joseph 	uint16_t nb_lf_avail;
146c045d2e5SAnoob Joseph 	uintptr_t lmt_base;
147c045d2e5SAnoob Joseph 	/**< CPT device capabilities */
148c045d2e5SAnoob Joseph 	union cpt_eng_caps hw_caps[CPT_MAX_ENG_TYPES];
149c045d2e5SAnoob Joseph 	uint8_t eng_grp[CPT_MAX_ENG_TYPES];
1507658d035STejasree Kondoj 	uint8_t cpt_revision;
1510205db90SSrujana Challa 	void *opaque;
152c045d2e5SAnoob Joseph #define ROC_CPT_MEM_SZ (6 * 1024)
153c045d2e5SAnoob Joseph 	uint8_t reserved[ROC_CPT_MEM_SZ] __plt_cache_aligned;
154c045d2e5SAnoob Joseph } __plt_cache_aligned;
155c045d2e5SAnoob Joseph 
156147b98e6SVidya Sagar Velumuri struct roc_cpt_rxc_time_cfg {
157147b98e6SVidya Sagar Velumuri 	uint32_t step;
158147b98e6SVidya Sagar Velumuri 	uint16_t active_limit;
159147b98e6SVidya Sagar Velumuri 	uint16_t active_thres;
160147b98e6SVidya Sagar Velumuri 	uint16_t zombie_limit;
161147b98e6SVidya Sagar Velumuri 	uint16_t zombie_thres;
162147b98e6SVidya Sagar Velumuri };
163147b98e6SVidya Sagar Velumuri 
1640205db90SSrujana Challa /* CPT MISC interrupt callback */
1650205db90SSrujana Challa typedef void (*roc_cpt_int_misc_cb_t)(struct roc_cpt_lf *lf, void *args);
1660205db90SSrujana Challa 
167779244b1SSrujana Challa struct roc_cpt_inline_ipsec_inb_cfg {
168779244b1SSrujana Challa 	uint32_t cpt_credit;
169779244b1SSrujana Challa 	uint16_t opcode;
170779244b1SSrujana Challa 	uint16_t param1;
171779244b1SSrujana Challa 	uint16_t param2;
172779244b1SSrujana Challa 	uint16_t bpid;
173779244b1SSrujana Challa 	uint32_t credit_th;
174779244b1SSrujana Challa 	uint8_t egrp;
1759564023dSNithin Dabilpuram 	uint8_t ctx_ilen_valid : 1;
1769564023dSNithin Dabilpuram 	uint8_t ctx_ilen : 7;
177779244b1SSrujana Challa };
178779244b1SSrujana Challa 
179147b98e6SVidya Sagar Velumuri int __roc_api roc_cpt_rxc_time_cfg(struct roc_cpt *roc_cpt,
180147b98e6SVidya Sagar Velumuri 				   struct roc_cpt_rxc_time_cfg *cfg);
181c045d2e5SAnoob Joseph int __roc_api roc_cpt_dev_init(struct roc_cpt *roc_cpt);
182c045d2e5SAnoob Joseph int __roc_api roc_cpt_dev_fini(struct roc_cpt *roc_cpt);
183c045d2e5SAnoob Joseph int __roc_api roc_cpt_eng_grp_add(struct roc_cpt *roc_cpt,
184c045d2e5SAnoob Joseph 				  enum cpt_eng_type eng_type);
185d029f353SVidya Sagar Velumuri int __roc_api roc_cpt_dev_configure(struct roc_cpt *roc_cpt, int nb_lf, bool rxc_ena,
186d029f353SVidya Sagar Velumuri 				    uint16_t rx_inject_qp);
187c045d2e5SAnoob Joseph void __roc_api roc_cpt_dev_clear(struct roc_cpt *roc_cpt);
188ed135040SArchana Muniganti int __roc_api roc_cpt_lf_init(struct roc_cpt *roc_cpt, struct roc_cpt_lf *lf);
189ed135040SArchana Muniganti void __roc_api roc_cpt_lf_fini(struct roc_cpt_lf *lf);
190*3be1df02SVidya Sagar Velumuri void __roc_api roc_cpt_lf_reset(struct roc_cpt_lf *lf);
19171213a8bSSrujana Challa int __roc_api roc_cpt_lf_ctx_flush(struct roc_cpt_lf *lf, void *cptr,
19271213a8bSSrujana Challa 				   bool inval);
19371213a8bSSrujana Challa int __roc_api roc_cpt_lf_ctx_reload(struct roc_cpt_lf *lf, void *cptr);
194ed79bf91SVidya Sagar Velumuri int __roc_api roc_cpt_inline_ipsec_cfg(struct dev *dev, uint8_t slot,
195ed79bf91SVidya Sagar Velumuri 				       struct roc_nix *nix);
196779244b1SSrujana Challa int __roc_api roc_cpt_inline_ipsec_inb_cfg_read(struct roc_cpt *roc_cpt,
197779244b1SSrujana Challa 					struct roc_cpt_inline_ipsec_inb_cfg *cfg);
198ed79bf91SVidya Sagar Velumuri int __roc_api roc_cpt_inline_ipsec_inb_cfg(struct roc_cpt *roc_cpt,
1994d00b8c6SSatha Rao 					   struct roc_cpt_inline_ipsec_inb_cfg *cfg);
200b1a22e5dSAakash Sasidharan int __roc_api roc_cpt_afs_print(struct roc_cpt *roc_cpt);
201b1a22e5dSAakash Sasidharan int __roc_api roc_cpt_lfs_print(struct roc_cpt *roc_cpt);
202ed135040SArchana Muniganti void __roc_api roc_cpt_iq_disable(struct roc_cpt_lf *lf);
2033bf87839SAnkur Dwivedi void __roc_api roc_cpt_iq_enable(struct roc_cpt_lf *lf);
20457af6052SAnoob Joseph int __roc_api roc_cpt_lmtline_init(struct roc_cpt *roc_cpt, struct roc_cpt_lmtline *lmtline,
20557af6052SAnoob Joseph 				   int lf_id, bool is_dual);
206b1a22e5dSAakash Sasidharan 
207c758279fSRakesh Kudurumalla void __roc_api roc_cpt_parse_hdr_dump(FILE *file, const struct cpt_parse_hdr_s *cpth);
20857af6052SAnoob Joseph int __roc_api roc_cpt_ctx_write(struct roc_cpt_lf *lf, void *sa_dptr, void *sa_cptr,
20957af6052SAnoob Joseph 				uint16_t sa_len);
2100205db90SSrujana Challa 
2110205db90SSrujana Challa void __roc_api roc_cpt_int_misc_cb_register(roc_cpt_int_misc_cb_t cb, void *args);
2120205db90SSrujana Challa int __roc_api roc_cpt_int_misc_cb_unregister(roc_cpt_int_misc_cb_t cb, void *args);
213c045d2e5SAnoob Joseph #endif /* _ROC_CPT_H_ */
214