xref: /linux/drivers/crypto/intel/qat/qat_common/adf_dc.c (revision 14418ddcc2c2055743ac7ee53d5ac2cf8a8660a7)
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