1cd0e7160SSuman Kumar Chakraborty // SPDX-License-Identifier: GPL-2.0-only 2cd0e7160SSuman Kumar Chakraborty /* Copyright(c) 2022 Intel Corporation */ 3cd0e7160SSuman Kumar Chakraborty #include "adf_accel_devices.h" 4cd0e7160SSuman Kumar Chakraborty #include "adf_dc.h" 5cd0e7160SSuman Kumar Chakraborty #include "icp_qat_fw_comp.h" 6cd0e7160SSuman Kumar Chakraborty 7cd0e7160SSuman Kumar Chakraborty int qat_comp_build_ctx(struct adf_accel_dev *accel_dev, void *ctx, enum adf_dc_algo algo) 8cd0e7160SSuman Kumar Chakraborty { 9cd0e7160SSuman Kumar Chakraborty struct icp_qat_fw_comp_req *req_tmpl = ctx; 10cd0e7160SSuman Kumar Chakraborty struct icp_qat_fw_comp_cd_hdr *comp_cd_ctrl = &req_tmpl->comp_cd_ctrl; 11cd0e7160SSuman Kumar Chakraborty struct icp_qat_fw_comp_req_params *req_pars = &req_tmpl->comp_pars; 12cd0e7160SSuman Kumar Chakraborty struct icp_qat_fw_comn_req_hdr *header = &req_tmpl->comn_hdr; 13cd0e7160SSuman Kumar Chakraborty int ret; 14cd0e7160SSuman Kumar Chakraborty 15cd0e7160SSuman Kumar Chakraborty memset(req_tmpl, 0, sizeof(*req_tmpl)); 16cd0e7160SSuman Kumar Chakraborty header->hdr_flags = 17cd0e7160SSuman Kumar Chakraborty ICP_QAT_FW_COMN_HDR_FLAGS_BUILD(ICP_QAT_FW_COMN_REQ_FLAG_SET); 18cd0e7160SSuman Kumar Chakraborty header->service_type = ICP_QAT_FW_COMN_REQ_CPM_FW_COMP; 19cd0e7160SSuman Kumar Chakraborty header->comn_req_flags = 20cd0e7160SSuman Kumar Chakraborty ICP_QAT_FW_COMN_FLAGS_BUILD(QAT_COMN_CD_FLD_TYPE_16BYTE_DATA, 21cd0e7160SSuman Kumar Chakraborty QAT_COMN_PTR_TYPE_SGL); 22cd0e7160SSuman Kumar Chakraborty header->serv_specif_flags = 23cd0e7160SSuman Kumar Chakraborty ICP_QAT_FW_COMP_FLAGS_BUILD(ICP_QAT_FW_COMP_STATELESS_SESSION, 24cd0e7160SSuman Kumar Chakraborty ICP_QAT_FW_COMP_NOT_AUTO_SELECT_BEST, 25cd0e7160SSuman Kumar Chakraborty ICP_QAT_FW_COMP_NOT_ENH_AUTO_SELECT_BEST, 26cd0e7160SSuman Kumar Chakraborty ICP_QAT_FW_COMP_NOT_DISABLE_TYPE0_ENH_AUTO_SELECT_BEST, 27cd0e7160SSuman Kumar Chakraborty ICP_QAT_FW_COMP_ENABLE_SECURE_RAM_USED_AS_INTMD_BUF); 28cd0e7160SSuman Kumar Chakraborty 29cd0e7160SSuman Kumar Chakraborty /* Build HW config block for compression */ 30cd0e7160SSuman Kumar Chakraborty ret = GET_DC_OPS(accel_dev)->build_comp_block(ctx, algo); 31cd0e7160SSuman Kumar Chakraborty if (ret) { 32cd0e7160SSuman Kumar Chakraborty dev_err(&GET_DEV(accel_dev), "Failed to build compression block\n"); 33cd0e7160SSuman Kumar Chakraborty return ret; 34cd0e7160SSuman Kumar Chakraborty } 35cd0e7160SSuman Kumar Chakraborty 36cd0e7160SSuman Kumar Chakraborty req_pars->crc.legacy.initial_adler = COMP_CPR_INITIAL_ADLER; 37cd0e7160SSuman Kumar Chakraborty req_pars->crc.legacy.initial_crc32 = COMP_CPR_INITIAL_CRC; 38cd0e7160SSuman Kumar Chakraborty req_pars->req_par_flags = 39cd0e7160SSuman Kumar Chakraborty ICP_QAT_FW_COMP_REQ_PARAM_FLAGS_BUILD(ICP_QAT_FW_COMP_SOP, 40cd0e7160SSuman Kumar Chakraborty ICP_QAT_FW_COMP_EOP, 41cd0e7160SSuman Kumar Chakraborty ICP_QAT_FW_COMP_BFINAL, 42cd0e7160SSuman Kumar Chakraborty ICP_QAT_FW_COMP_CNV, 43cd0e7160SSuman Kumar Chakraborty ICP_QAT_FW_COMP_CNV_RECOVERY, 44cd0e7160SSuman Kumar Chakraborty ICP_QAT_FW_COMP_NO_CNV_DFX, 45cd0e7160SSuman Kumar Chakraborty ICP_QAT_FW_COMP_CRC_MODE_LEGACY, 46cd0e7160SSuman Kumar Chakraborty ICP_QAT_FW_COMP_NO_XXHASH_ACC, 47cd0e7160SSuman Kumar Chakraborty ICP_QAT_FW_COMP_CNV_ERROR_NONE, 48cd0e7160SSuman Kumar Chakraborty ICP_QAT_FW_COMP_NO_APPEND_CRC, 49*f14a2de5SSuman Kumar Chakraborty ICP_QAT_FW_COMP_NO_DROP_DATA, 50*f14a2de5SSuman Kumar Chakraborty ICP_QAT_FW_COMP_NO_PARTIAL_DECOMPRESS); 51cd0e7160SSuman Kumar Chakraborty ICP_QAT_FW_COMN_NEXT_ID_SET(comp_cd_ctrl, ICP_QAT_FW_SLICE_DRAM_WR); 52cd0e7160SSuman Kumar Chakraborty ICP_QAT_FW_COMN_CURR_ID_SET(comp_cd_ctrl, ICP_QAT_FW_SLICE_COMP); 53cd0e7160SSuman Kumar Chakraborty 54cd0e7160SSuman Kumar Chakraborty /* Fill second half of the template for decompression */ 55cd0e7160SSuman Kumar Chakraborty memcpy(req_tmpl + 1, req_tmpl, sizeof(*req_tmpl)); 56cd0e7160SSuman Kumar Chakraborty req_tmpl++; 57cd0e7160SSuman Kumar Chakraborty 58cd0e7160SSuman Kumar Chakraborty /* Build HW config block for decompression */ 59cd0e7160SSuman Kumar Chakraborty ret = GET_DC_OPS(accel_dev)->build_decomp_block(req_tmpl, algo); 60cd0e7160SSuman Kumar Chakraborty if (ret) 61cd0e7160SSuman Kumar Chakraborty dev_err(&GET_DEV(accel_dev), "Failed to build decompression block\n"); 62cd0e7160SSuman Kumar Chakraborty 63cd0e7160SSuman Kumar Chakraborty return ret; 64cd0e7160SSuman Kumar Chakraborty } 65