1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright(C) 2021 Marvell. 3 */ 4 5 #ifndef __CPT_HW_H__ 6 #define __CPT_HW_H__ 7 8 /* Register offsets */ 9 10 #define CPT_COMP_NOT_DONE (0x0ull) 11 #define CPT_COMP_GOOD (0x1ull) 12 #define CPT_COMP_FAULT (0x2ull) 13 #define CPT_COMP_SWERR (0x3ull) 14 #define CPT_COMP_HWERR (0x4ull) 15 #define CPT_COMP_INSTERR (0x5ull) 16 #define CPT_COMP_WARN (0x6ull) /* [CN10K, .) */ 17 18 #define CPT_LF_INT_VEC_MISC (0x0ull) 19 #define CPT_LF_INT_VEC_DONE (0x1ull) 20 #define CPT_LF_CTL (0x10ull) 21 #define CPT_LF_DONE_WAIT (0x30ull) 22 #define CPT_LF_INPROG (0x40ull) 23 #define CPT_LF_DONE (0x50ull) 24 #define CPT_LF_DONE_ACK (0x60ull) 25 #define CPT_LF_DONE_INT_ENA_W1S (0x90ull) 26 #define CPT_LF_DONE_INT_ENA_W1C (0xa0ull) 27 #define CPT_LF_MISC_INT (0xb0ull) 28 #define CPT_LF_MISC_INT_W1S (0xc0ull) 29 #define CPT_LF_MISC_INT_ENA_W1S (0xd0ull) 30 #define CPT_LF_MISC_INT_ENA_W1C (0xe0ull) 31 #define CPT_LF_Q_BASE (0xf0ull) 32 #define CPT_LF_Q_SIZE (0x100ull) 33 #define CPT_LF_Q_INST_PTR (0x110ull) 34 #define CPT_LF_Q_GRP_PTR (0x120ull) 35 #define CPT_LF_NQX(a) (0x400ull | (uint64_t)(a) << 3) 36 #define CPT_LF_CTX_CTL (0x500ull) 37 #define CPT_LF_CTX_FLUSH (0x510ull) 38 #define CPT_LF_CTX_ERR (0x520ull) 39 #define CPT_LF_CTX_ENC_BYTE_CNT (0x530ull) 40 #define CPT_LF_CTX_ENC_PKT_CNT (0x540ull) 41 #define CPT_LF_CTX_DEC_BYTE_CNT (0x550ull) 42 #define CPT_LF_CTX_DEC_PKT_CNT (0x560ull) 43 #define CPT_LF_CTX_RELOAD (0x570ull) 44 45 #define CPT_AF_LFX_CTL(a) (0x27000ull | (uint64_t)(a) << 3) 46 #define CPT_AF_LFX_CTL2(a) (0x29000ull | (uint64_t)(a) << 3) 47 48 /* Structures definitions */ 49 50 union cpt_lf_ctl { 51 uint64_t u; 52 struct cpt_lf_ctl_s { 53 uint64_t ena : 1; 54 uint64_t fc_ena : 1; 55 uint64_t fc_up_crossing : 1; 56 uint64_t reserved_3_3 : 1; 57 uint64_t fc_hyst_bits : 4; 58 uint64_t reserved_8_63 : 56; 59 } s; 60 }; 61 62 union cpt_lf_ctx_flush { 63 uint64_t u; 64 struct { 65 uint64_t cptr : 46; 66 uint64_t inval : 1; 67 uint64_t reserved_47_63 : 17; 68 } s; 69 }; 70 71 union cpt_lf_ctx_reload { 72 uint64_t u; 73 struct { 74 uint64_t cptr : 46; 75 uint64_t reserved_46_63 : 18; 76 } s; 77 }; 78 79 union cpt_lf_inprog { 80 uint64_t u; 81 struct cpt_lf_inprog_s { 82 uint64_t inflight : 9; 83 uint64_t reserved_9_15 : 7; 84 uint64_t eena : 1; 85 uint64_t grp_drp : 1; 86 uint64_t reserved_18_30 : 13; 87 uint64_t grb_partial : 1; 88 uint64_t grb_cnt : 8; 89 uint64_t gwb_cnt : 8; 90 uint64_t reserved_48_63 : 16; 91 } s; 92 }; 93 94 union cpt_lf_q_inst_ptr { 95 uint64_t u; 96 struct cpt_lf_q_inst_ptr_s { 97 uint64_t dq_ptr : 20; 98 uint64_t reserved_20_31 : 12; 99 uint64_t nq_ptr : 20; 100 uint64_t reserved_52_62 : 11; 101 uint64_t xq_xor : 1; 102 } s; 103 }; 104 105 union cpt_lf_q_base { 106 uint64_t u; 107 struct cpt_lf_q_base_s { 108 uint64_t fault : 1; 109 uint64_t stopped : 1; 110 uint64_t reserved_2_6 : 5; 111 uint64_t addr : 46; 112 uint64_t reserved_53_63 : 11; 113 } s; 114 }; 115 116 union cpt_lf_q_size { 117 uint64_t u; 118 struct cpt_lf_q_size_s { 119 uint64_t size_div40 : 15; 120 uint64_t reserved_15_63 : 49; 121 } s; 122 }; 123 124 union cpt_lf_misc_int { 125 uint64_t u; 126 struct cpt_lf_misc_int_s { 127 uint64_t reserved_0_0 : 1; 128 uint64_t nqerr : 1; 129 uint64_t irde : 1; 130 uint64_t nwrp : 1; 131 uint64_t reserved_4_4 : 1; 132 uint64_t hwerr : 1; 133 uint64_t fault : 1; 134 uint64_t reserved_7_63 : 57; 135 } s; 136 }; 137 138 union cpt_lf_q_grp_ptr { 139 uint64_t u; 140 struct { 141 uint64_t dq_ptr : 15; 142 uint64_t reserved_31_15 : 17; 143 uint64_t nq_ptr : 15; 144 uint64_t reserved_47_62 : 16; 145 uint64_t xq_xor : 1; 146 } s; 147 }; 148 149 union cpt_inst_w4 { 150 uint64_t u64; 151 struct { 152 uint64_t dlen : 16; 153 uint64_t param2 : 16; 154 uint64_t param1 : 16; 155 uint64_t opcode_major : 8; 156 uint64_t opcode_minor : 8; 157 } s; 158 }; 159 160 union cpt_inst_w7 { 161 uint64_t u64; 162 struct { 163 uint64_t cptr : 60; 164 uint64_t ctx_val : 1; 165 uint64_t egrp : 3; 166 } s; 167 }; 168 169 struct cpt_inst_s { 170 union cpt_inst_w0 { 171 struct { 172 uint64_t nixtxl : 3; 173 uint64_t doneint : 1; 174 uint64_t nixtx_addr : 60; 175 } s; 176 uint64_t u64; 177 } w0; 178 179 uint64_t res_addr; 180 181 union cpt_inst_w2 { 182 struct { 183 uint64_t tag : 32; 184 uint64_t tt : 2; 185 uint64_t grp : 10; 186 uint64_t reserved_172_175 : 4; 187 uint64_t rvu_pf_func : 16; 188 } s; 189 uint64_t u64; 190 } w2; 191 192 union cpt_inst_w3 { 193 struct { 194 uint64_t qord : 1; 195 uint64_t reserved_194_193 : 2; 196 uint64_t wqe_ptr : 61; 197 } s; 198 uint64_t u64; 199 } w3; 200 201 union cpt_inst_w4 w4; 202 203 uint64_t dptr; 204 205 uint64_t rptr; 206 207 union cpt_inst_w7 w7; 208 }; 209 210 union cpt_res_s { 211 struct cpt_cn10k_res_s { 212 uint64_t compcode : 7; 213 uint64_t doneint : 1; 214 uint64_t uc_compcode : 8; 215 uint64_t rlen : 16; 216 uint64_t spi : 32; 217 218 uint64_t esn; 219 } cn10k; 220 221 struct cpt_cn9k_res_s { 222 uint64_t compcode : 8; 223 uint64_t uc_compcode : 8; 224 uint64_t doneint : 1; 225 uint64_t reserved_17_63 : 47; 226 227 uint64_t reserved_64_127; 228 } cn9k; 229 230 uint64_t u64[2]; 231 }; 232 233 /* [CN10K, .) */ 234 struct cpt_parse_hdr_s { 235 /* WORD 0 */ 236 union { 237 uint64_t u64; 238 struct { 239 uint8_t pad_len : 3; 240 uint8_t num_frags : 3; 241 uint8_t pkt_out : 2; 242 243 uint8_t err_sum : 1; 244 uint8_t reas_sts : 4; 245 uint8_t reserved_53 : 1; 246 uint8_t et_owr : 1; 247 uint8_t pkt_fmt : 1; 248 249 uint16_t match_id : 16; 250 251 uint32_t cookie : 32; 252 }; 253 } w0; 254 255 /* WORD 1 */ 256 uint64_t wqe_ptr; 257 258 /* WORD 2 */ 259 union { 260 uint64_t u64; 261 struct { 262 uint8_t fi_pad : 3; 263 uint8_t fi_offset : 5; 264 uint8_t il3_off; 265 uint16_t orig_pf_func; 266 uint16_t reserved_145_160; 267 uint16_t frag_age; 268 }; 269 } w2; 270 271 /* WORD 3 */ 272 union { 273 uint64_t u64; 274 struct { 275 uint32_t spi; 276 uint16_t reserved_209_224; 277 uint8_t uc_ccode; 278 uint8_t hw_ccode; 279 }; 280 } w3; 281 282 /* WORD 4 */ 283 union { 284 uint64_t u64; 285 uint64_t esn; 286 uint64_t frag1_wqe_ptr; 287 }; 288 }; 289 290 union cpt_frag_info { 291 uint16_t info; 292 struct { 293 uint16_t f_off : 13; 294 uint16_t f_mf : 1; 295 uint16_t f_rsv : 2; 296 }; 297 }; 298 299 struct cpt_frag_info_s { 300 /* WORD 0 */ 301 union { 302 uint64_t u64; 303 struct { 304 /* CPT HW swaps each 8B word implicitly */ 305 union cpt_frag_info f0; 306 union cpt_frag_info f1; 307 union cpt_frag_info f2; 308 union cpt_frag_info f3; 309 }; 310 } w0; 311 312 /* WORD 1 */ 313 union { 314 uint64_t u64; 315 struct { 316 /* CPT HW swaps each 8B word implicitly */ 317 uint16_t frag_size0; 318 uint16_t frag_size1; 319 uint16_t frag_size2; 320 uint16_t frag_size3; 321 }; 322 } w1; 323 }; 324 325 #endif /* __CPT_HW_H__ */ 326