1 /* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0-only) */ 2 /* Copyright(c) 2014 - 2020 Intel Corporation */ 3 #ifndef __ICP_QAT_UCLO_H__ 4 #define __ICP_QAT_UCLO_H__ 5 6 #define ICP_QAT_AC_895XCC_DEV_TYPE 0x00400000 7 #define ICP_QAT_AC_C62X_DEV_TYPE 0x01000000 8 #define ICP_QAT_AC_C3XXX_DEV_TYPE 0x02000000 9 #define ICP_QAT_AC_4XXX_A_DEV_TYPE 0x08000000 10 #define ICP_QAT_UCLO_MAX_AE 12 11 #define ICP_QAT_UCLO_MAX_CTX 8 12 #define ICP_QAT_UCLO_MAX_UIMAGE (ICP_QAT_UCLO_MAX_AE * ICP_QAT_UCLO_MAX_CTX) 13 #define ICP_QAT_UCLO_MAX_USTORE 0x4000 14 #define ICP_QAT_UCLO_MAX_XFER_REG 128 15 #define ICP_QAT_UCLO_MAX_GPR_REG 128 16 #define ICP_QAT_UCLO_MAX_LMEM_REG 1024 17 #define ICP_QAT_UCLO_MAX_LMEM_REG_2X 1280 18 #define ICP_QAT_UCLO_AE_ALL_CTX 0xff 19 #define ICP_QAT_UOF_OBJID_LEN 8 20 #define ICP_QAT_UOF_FID 0xc6c2 21 #define ICP_QAT_UOF_MAJVER 0x4 22 #define ICP_QAT_UOF_MINVER 0x11 23 #define ICP_QAT_UOF_OBJS "UOF_OBJS" 24 #define ICP_QAT_UOF_STRT "UOF_STRT" 25 #define ICP_QAT_UOF_IMAG "UOF_IMAG" 26 #define ICP_QAT_UOF_IMEM "UOF_IMEM" 27 #define ICP_QAT_UOF_LOCAL_SCOPE 1 28 #define ICP_QAT_UOF_INIT_EXPR 0 29 #define ICP_QAT_UOF_INIT_REG 1 30 #define ICP_QAT_UOF_INIT_REG_CTX 2 31 #define ICP_QAT_UOF_INIT_EXPR_ENDIAN_SWAP 3 32 #define ICP_QAT_SUOF_OBJ_ID_LEN 8 33 #define ICP_QAT_SUOF_FID 0x53554f46 34 #define ICP_QAT_SUOF_MAJVER 0x0 35 #define ICP_QAT_SUOF_MINVER 0x1 36 #define ICP_QAT_SUOF_OBJ_NAME_LEN 128 37 #define ICP_QAT_MOF_OBJ_ID_LEN 8 38 #define ICP_QAT_MOF_OBJ_CHUNKID_LEN 8 39 #define ICP_QAT_MOF_FID 0x00666f6d 40 #define ICP_QAT_MOF_MAJVER 0x0 41 #define ICP_QAT_MOF_MINVER 0x1 42 #define ICP_QAT_MOF_SYM_OBJS "SYM_OBJS" 43 #define ICP_QAT_SUOF_OBJS "SUF_OBJS" 44 #define ICP_QAT_SUOF_IMAG "SUF_IMAG" 45 #define ICP_QAT_SIMG_AE_INIT_SEQ_LEN (50 * sizeof(unsigned long long)) 46 #define ICP_QAT_SIMG_AE_INSTS_LEN (0x4000 * sizeof(unsigned long long)) 47 48 #define DSS_FWSK_MODULUS_LEN 384 /* RSA3K */ 49 #define DSS_FWSK_EXPONENT_LEN 4 50 #define DSS_FWSK_PADDING_LEN 380 51 #define DSS_SIGNATURE_LEN 384 /* RSA3K */ 52 53 #define CSS_FWSK_MODULUS_LEN 256 /* RSA2K */ 54 #define CSS_FWSK_EXPONENT_LEN 4 55 #define CSS_FWSK_PADDING_LEN 252 56 #define CSS_SIGNATURE_LEN 256 /* RSA2K */ 57 58 #define ICP_QAT_CSS_FWSK_MODULUS_LEN(handle) ((handle)->chip_info->css_3k ? \ 59 DSS_FWSK_MODULUS_LEN : \ 60 CSS_FWSK_MODULUS_LEN) 61 62 #define ICP_QAT_CSS_FWSK_EXPONENT_LEN(handle) ((handle)->chip_info->css_3k ? \ 63 DSS_FWSK_EXPONENT_LEN : \ 64 CSS_FWSK_EXPONENT_LEN) 65 66 #define ICP_QAT_CSS_FWSK_PAD_LEN(handle) ((handle)->chip_info->css_3k ? \ 67 DSS_FWSK_PADDING_LEN : \ 68 CSS_FWSK_PADDING_LEN) 69 70 #define ICP_QAT_CSS_FWSK_PUB_LEN(handle) (ICP_QAT_CSS_FWSK_MODULUS_LEN(handle) + \ 71 ICP_QAT_CSS_FWSK_EXPONENT_LEN(handle) + \ 72 ICP_QAT_CSS_FWSK_PAD_LEN(handle)) 73 74 #define ICP_QAT_CSS_SIGNATURE_LEN(handle) ((handle)->chip_info->css_3k ? \ 75 DSS_SIGNATURE_LEN : \ 76 CSS_SIGNATURE_LEN) 77 78 #define ICP_QAT_CSS_AE_IMG_LEN (sizeof(struct icp_qat_simg_ae_mode) + \ 79 ICP_QAT_SIMG_AE_INIT_SEQ_LEN + \ 80 ICP_QAT_SIMG_AE_INSTS_LEN) 81 #define ICP_QAT_CSS_AE_SIMG_LEN(handle) (sizeof(struct icp_qat_css_hdr) + \ 82 ICP_QAT_CSS_FWSK_PUB_LEN(handle) + \ 83 ICP_QAT_CSS_SIGNATURE_LEN(handle) + \ 84 ICP_QAT_CSS_AE_IMG_LEN) 85 #define ICP_QAT_AE_IMG_OFFSET(handle) (sizeof(struct icp_qat_css_hdr) + \ 86 ICP_QAT_CSS_FWSK_MODULUS_LEN(handle) + \ 87 ICP_QAT_CSS_FWSK_EXPONENT_LEN(handle) + \ 88 ICP_QAT_CSS_SIGNATURE_LEN(handle)) 89 #define ICP_QAT_CSS_RSA4K_MAX_IMAGE_LEN 0x40000 90 #define ICP_QAT_CSS_RSA3K_MAX_IMAGE_LEN 0x30000 91 92 #define ICP_QAT_CTX_MODE(ae_mode) ((ae_mode) & 0xf) 93 #define ICP_QAT_NN_MODE(ae_mode) (((ae_mode) >> 0x4) & 0xf) 94 #define ICP_QAT_SHARED_USTORE_MODE(ae_mode) (((ae_mode) >> 0xb) & 0x1) 95 #define RELOADABLE_CTX_SHARED_MODE(ae_mode) (((ae_mode) >> 0xc) & 0x1) 96 97 #define ICP_QAT_LOC_MEM0_MODE(ae_mode) (((ae_mode) >> 0x8) & 0x1) 98 #define ICP_QAT_LOC_MEM1_MODE(ae_mode) (((ae_mode) >> 0x9) & 0x1) 99 #define ICP_QAT_LOC_MEM2_MODE(ae_mode) (((ae_mode) >> 0x6) & 0x1) 100 #define ICP_QAT_LOC_MEM3_MODE(ae_mode) (((ae_mode) >> 0x7) & 0x1) 101 #define ICP_QAT_LOC_TINDEX_MODE(ae_mode) (((ae_mode) >> 0xe) & 0x1) 102 103 enum icp_qat_uof_mem_region { 104 ICP_QAT_UOF_SRAM_REGION = 0x0, 105 ICP_QAT_UOF_LMEM_REGION = 0x3, 106 ICP_QAT_UOF_UMEM_REGION = 0x5 107 }; 108 109 enum icp_qat_uof_regtype { 110 ICP_NO_DEST = 0, 111 ICP_GPA_REL = 1, 112 ICP_GPA_ABS = 2, 113 ICP_GPB_REL = 3, 114 ICP_GPB_ABS = 4, 115 ICP_SR_REL = 5, 116 ICP_SR_RD_REL = 6, 117 ICP_SR_WR_REL = 7, 118 ICP_SR_ABS = 8, 119 ICP_SR_RD_ABS = 9, 120 ICP_SR_WR_ABS = 10, 121 ICP_DR_REL = 19, 122 ICP_DR_RD_REL = 20, 123 ICP_DR_WR_REL = 21, 124 ICP_DR_ABS = 22, 125 ICP_DR_RD_ABS = 23, 126 ICP_DR_WR_ABS = 24, 127 ICP_LMEM = 26, 128 ICP_LMEM0 = 27, 129 ICP_LMEM1 = 28, 130 ICP_NEIGH_REL = 31, 131 ICP_LMEM2 = 61, 132 ICP_LMEM3 = 62, 133 }; 134 135 enum icp_qat_css_fwtype { 136 CSS_AE_FIRMWARE = 0, 137 CSS_MMP_FIRMWARE = 1 138 }; 139 140 struct icp_qat_uclo_page { 141 struct icp_qat_uclo_encap_page *encap_page; 142 struct icp_qat_uclo_region *region; 143 unsigned int flags; 144 }; 145 146 struct icp_qat_uclo_region { 147 struct icp_qat_uclo_page *loaded; 148 struct icp_qat_uclo_page *page; 149 }; 150 151 struct icp_qat_uclo_aeslice { 152 struct icp_qat_uclo_region *region; 153 struct icp_qat_uclo_page *page; 154 struct icp_qat_uclo_page *cur_page[ICP_QAT_UCLO_MAX_CTX]; 155 struct icp_qat_uclo_encapme *encap_image; 156 unsigned int ctx_mask_assigned; 157 unsigned int new_uaddr[ICP_QAT_UCLO_MAX_CTX]; 158 }; 159 160 struct icp_qat_uclo_aedata { 161 unsigned int slice_num; 162 unsigned int eff_ustore_size; 163 struct icp_qat_uclo_aeslice ae_slices[ICP_QAT_UCLO_MAX_CTX]; 164 }; 165 166 struct icp_qat_uof_encap_obj { 167 char *beg_uof; 168 struct icp_qat_uof_objhdr *obj_hdr; 169 struct icp_qat_uof_chunkhdr *chunk_hdr; 170 struct icp_qat_uof_varmem_seg *var_mem_seg; 171 }; 172 173 struct icp_qat_uclo_encap_uwblock { 174 unsigned int start_addr; 175 unsigned int words_num; 176 u64 micro_words; 177 }; 178 179 struct icp_qat_uclo_encap_page { 180 unsigned int def_page; 181 unsigned int page_region; 182 unsigned int beg_addr_v; 183 unsigned int beg_addr_p; 184 unsigned int micro_words_num; 185 unsigned int uwblock_num; 186 struct icp_qat_uclo_encap_uwblock *uwblock; 187 }; 188 189 struct icp_qat_uclo_encapme { 190 struct icp_qat_uof_image *img_ptr; 191 struct icp_qat_uclo_encap_page *page; 192 unsigned int ae_reg_num; 193 struct icp_qat_uof_ae_reg *ae_reg; 194 unsigned int init_regsym_num; 195 struct icp_qat_uof_init_regsym *init_regsym; 196 unsigned int sbreak_num; 197 struct icp_qat_uof_sbreak *sbreak; 198 unsigned int uwords_num; 199 }; 200 201 struct icp_qat_uclo_init_mem_table { 202 unsigned int entry_num; 203 struct icp_qat_uof_initmem *init_mem; 204 }; 205 206 struct icp_qat_uclo_objhdr { 207 char *file_buff; 208 unsigned int checksum; 209 unsigned int size; 210 }; 211 212 struct icp_qat_uof_strtable { 213 unsigned int table_len; 214 unsigned int reserved; 215 u64 strings; 216 }; 217 218 struct icp_qat_uclo_objhandle { 219 unsigned int prod_type; 220 unsigned int prod_rev; 221 struct icp_qat_uclo_objhdr *obj_hdr; 222 struct icp_qat_uof_encap_obj encap_uof_obj; 223 struct icp_qat_uof_strtable str_table; 224 struct icp_qat_uclo_encapme ae_uimage[ICP_QAT_UCLO_MAX_UIMAGE]; 225 struct icp_qat_uclo_aedata ae_data[ICP_QAT_UCLO_MAX_AE]; 226 struct icp_qat_uclo_init_mem_table init_mem_tab; 227 struct icp_qat_uof_batch_init *lm_init_tab[ICP_QAT_UCLO_MAX_AE]; 228 struct icp_qat_uof_batch_init *umem_init_tab[ICP_QAT_UCLO_MAX_AE]; 229 int uimage_num; 230 int uword_in_bytes; 231 int global_inited; 232 unsigned int ae_num; 233 unsigned int ustore_phy_size; 234 void *obj_buf; 235 u64 *uword_buf; 236 }; 237 238 struct icp_qat_uof_uword_block { 239 unsigned int start_addr; 240 unsigned int words_num; 241 unsigned int uword_offset; 242 unsigned int reserved; 243 }; 244 245 struct icp_qat_uof_filehdr { 246 unsigned short file_id; 247 unsigned short reserved1; 248 char min_ver; 249 char maj_ver; 250 unsigned short reserved2; 251 unsigned short max_chunks; 252 unsigned short num_chunks; 253 }; 254 255 struct icp_qat_uof_filechunkhdr { 256 char chunk_id[ICP_QAT_UOF_OBJID_LEN]; 257 unsigned int checksum; 258 unsigned int offset; 259 unsigned int size; 260 }; 261 262 struct icp_qat_uof_objhdr { 263 unsigned int ac_dev_type; 264 unsigned short min_cpu_ver; 265 unsigned short max_cpu_ver; 266 short max_chunks; 267 short num_chunks; 268 unsigned int reserved1; 269 unsigned int reserved2; 270 }; 271 272 struct icp_qat_uof_chunkhdr { 273 char chunk_id[ICP_QAT_UOF_OBJID_LEN]; 274 unsigned int offset; 275 unsigned int size; 276 }; 277 278 struct icp_qat_uof_memvar_attr { 279 unsigned int offset_in_byte; 280 unsigned int value; 281 }; 282 283 struct icp_qat_uof_initmem { 284 unsigned int sym_name; 285 char region; 286 char scope; 287 unsigned short reserved1; 288 unsigned int addr; 289 unsigned int num_in_bytes; 290 unsigned int val_attr_num; 291 }; 292 293 struct icp_qat_uof_init_regsym { 294 unsigned int sym_name; 295 char init_type; 296 char value_type; 297 char reg_type; 298 unsigned char ctx; 299 unsigned int reg_addr; 300 unsigned int value; 301 }; 302 303 struct icp_qat_uof_varmem_seg { 304 unsigned int sram_base; 305 unsigned int sram_size; 306 unsigned int sram_alignment; 307 unsigned int sdram_base; 308 unsigned int sdram_size; 309 unsigned int sdram_alignment; 310 unsigned int sdram1_base; 311 unsigned int sdram1_size; 312 unsigned int sdram1_alignment; 313 unsigned int scratch_base; 314 unsigned int scratch_size; 315 unsigned int scratch_alignment; 316 }; 317 318 struct icp_qat_uof_gtid { 319 char tool_id[ICP_QAT_UOF_OBJID_LEN]; 320 int tool_ver; 321 unsigned int reserved1; 322 unsigned int reserved2; 323 }; 324 325 struct icp_qat_uof_sbreak { 326 unsigned int page_num; 327 unsigned int virt_uaddr; 328 unsigned char sbreak_type; 329 unsigned char reg_type; 330 unsigned short reserved1; 331 unsigned int addr_offset; 332 unsigned int reg_addr; 333 }; 334 335 struct icp_qat_uof_code_page { 336 unsigned int page_region; 337 unsigned int page_num; 338 unsigned char def_page; 339 unsigned char reserved2; 340 unsigned short reserved1; 341 unsigned int beg_addr_v; 342 unsigned int beg_addr_p; 343 unsigned int neigh_reg_tab_offset; 344 unsigned int uc_var_tab_offset; 345 unsigned int imp_var_tab_offset; 346 unsigned int imp_expr_tab_offset; 347 unsigned int code_area_offset; 348 }; 349 350 struct icp_qat_uof_image { 351 unsigned int img_name; 352 unsigned int ae_assigned; 353 unsigned int ctx_assigned; 354 unsigned int ac_dev_type; 355 unsigned int entry_address; 356 unsigned int fill_pattern[2]; 357 unsigned int reloadable_size; 358 unsigned char sensitivity; 359 unsigned char reserved; 360 unsigned short ae_mode; 361 unsigned short max_ver; 362 unsigned short min_ver; 363 unsigned short image_attrib; 364 unsigned short reserved2; 365 unsigned short page_region_num; 366 unsigned short numpages; 367 unsigned int reg_tab_offset; 368 unsigned int init_reg_sym_tab; 369 unsigned int sbreak_tab; 370 unsigned int app_metadata; 371 }; 372 373 struct icp_qat_uof_objtable { 374 unsigned int entry_num; 375 }; 376 377 struct icp_qat_uof_ae_reg { 378 unsigned int name; 379 unsigned int vis_name; 380 unsigned short type; 381 unsigned short addr; 382 unsigned short access_mode; 383 unsigned char visible; 384 unsigned char reserved1; 385 unsigned short ref_count; 386 unsigned short reserved2; 387 unsigned int xo_id; 388 }; 389 390 struct icp_qat_uof_code_area { 391 unsigned int micro_words_num; 392 unsigned int uword_block_tab; 393 }; 394 395 struct icp_qat_uof_batch_init { 396 unsigned int ae; 397 unsigned int addr; 398 unsigned int *value; 399 unsigned int size; 400 struct icp_qat_uof_batch_init *next; 401 }; 402 403 struct icp_qat_suof_img_hdr { 404 char *simg_buf; 405 unsigned long simg_len; 406 char *css_header; 407 char *css_key; 408 char *css_signature; 409 char *css_simg; 410 unsigned long simg_size; 411 unsigned int ae_num; 412 unsigned int ae_mask; 413 unsigned int fw_type; 414 unsigned long simg_name; 415 unsigned long appmeta_data; 416 }; 417 418 struct icp_qat_suof_img_tbl { 419 unsigned int num_simgs; 420 struct icp_qat_suof_img_hdr *simg_hdr; 421 }; 422 423 struct icp_qat_suof_handle { 424 unsigned int file_id; 425 unsigned int check_sum; 426 char min_ver; 427 char maj_ver; 428 char fw_type; 429 char *suof_buf; 430 unsigned int suof_size; 431 char *sym_str; 432 unsigned int sym_size; 433 struct icp_qat_suof_img_tbl img_table; 434 }; 435 436 struct icp_qat_fw_auth_desc { 437 unsigned int img_len; 438 unsigned int ae_mask; 439 unsigned int css_hdr_high; 440 unsigned int css_hdr_low; 441 unsigned int img_high; 442 unsigned int img_low; 443 unsigned int signature_high; 444 unsigned int signature_low; 445 unsigned int fwsk_pub_high; 446 unsigned int fwsk_pub_low; 447 unsigned int img_ae_mode_data_high; 448 unsigned int img_ae_mode_data_low; 449 unsigned int img_ae_init_data_high; 450 unsigned int img_ae_init_data_low; 451 unsigned int img_ae_insts_high; 452 unsigned int img_ae_insts_low; 453 }; 454 455 struct icp_qat_auth_chunk { 456 struct icp_qat_fw_auth_desc fw_auth_desc; 457 u64 chunk_size; 458 u64 chunk_bus_addr; 459 }; 460 461 struct icp_qat_css_hdr { 462 unsigned int module_type; 463 unsigned int header_len; 464 unsigned int header_ver; 465 unsigned int module_id; 466 unsigned int module_vendor; 467 unsigned int date; 468 unsigned int size; 469 unsigned int key_size; 470 unsigned int module_size; 471 unsigned int exponent_size; 472 unsigned int fw_type; 473 unsigned int reserved[21]; 474 }; 475 476 struct icp_qat_simg_ae_mode { 477 unsigned int file_id; 478 unsigned short maj_ver; 479 unsigned short min_ver; 480 unsigned int dev_type; 481 unsigned short devmax_ver; 482 unsigned short devmin_ver; 483 unsigned int ae_mask; 484 unsigned int ctx_enables; 485 char fw_type; 486 char ctx_mode; 487 char nn_mode; 488 char lm0_mode; 489 char lm1_mode; 490 char scs_mode; 491 char lm2_mode; 492 char lm3_mode; 493 char tindex_mode; 494 unsigned char reserved[7]; 495 char simg_name[256]; 496 char appmeta_data[256]; 497 }; 498 499 struct icp_qat_suof_filehdr { 500 unsigned int file_id; 501 unsigned int check_sum; 502 char min_ver; 503 char maj_ver; 504 char fw_type; 505 char reserved; 506 unsigned short max_chunks; 507 unsigned short num_chunks; 508 }; 509 510 struct icp_qat_suof_chunk_hdr { 511 char chunk_id[ICP_QAT_SUOF_OBJ_ID_LEN]; 512 u64 offset; 513 u64 size; 514 }; 515 516 struct icp_qat_suof_strtable { 517 unsigned int tab_length; 518 unsigned int strings; 519 }; 520 521 struct icp_qat_suof_objhdr { 522 unsigned int img_length; 523 unsigned int reserved; 524 }; 525 526 struct icp_qat_mof_file_hdr { 527 unsigned int file_id; 528 unsigned int checksum; 529 char min_ver; 530 char maj_ver; 531 unsigned short reserved; 532 unsigned short max_chunks; 533 unsigned short num_chunks; 534 }; 535 536 struct icp_qat_mof_chunkhdr { 537 char chunk_id[ICP_QAT_MOF_OBJ_ID_LEN]; 538 u64 offset; 539 u64 size; 540 }; 541 542 struct icp_qat_mof_str_table { 543 unsigned int tab_len; 544 unsigned int strings; 545 }; 546 547 struct icp_qat_mof_obj_hdr { 548 unsigned short max_chunks; 549 unsigned short num_chunks; 550 unsigned int reserved; 551 }; 552 553 struct icp_qat_mof_obj_chunkhdr { 554 char chunk_id[ICP_QAT_MOF_OBJ_CHUNKID_LEN]; 555 u64 offset; 556 u64 size; 557 unsigned int name; 558 unsigned int reserved; 559 }; 560 561 struct icp_qat_mof_objhdr { 562 char *obj_name; 563 char *obj_buf; 564 unsigned int obj_size; 565 }; 566 567 struct icp_qat_mof_table { 568 unsigned int num_objs; 569 struct icp_qat_mof_objhdr *obj_hdr; 570 }; 571 572 struct icp_qat_mof_handle { 573 unsigned int file_id; 574 unsigned int checksum; 575 char min_ver; 576 char maj_ver; 577 char *mof_buf; 578 u32 mof_size; 579 char *sym_str; 580 unsigned int sym_size; 581 char *uobjs_hdr; 582 char *sobjs_hdr; 583 struct icp_qat_mof_table obj_table; 584 }; 585 #endif 586