xref: /linux/drivers/crypto/intel/qat/qat_common/adf_anti_rb.c (revision 0fc8f6200d2313278fbf4539bbab74677c685531)
1*6ac142bfSSuman Kumar Chakraborty // SPDX-License-Identifier: GPL-2.0-only
2*6ac142bfSSuman Kumar Chakraborty /* Copyright(c) 2026 Intel Corporation */
3*6ac142bfSSuman Kumar Chakraborty #include <linux/bitfield.h>
4*6ac142bfSSuman Kumar Chakraborty #include <linux/delay.h>
5*6ac142bfSSuman Kumar Chakraborty #include <linux/errno.h>
6*6ac142bfSSuman Kumar Chakraborty #include <linux/kstrtox.h>
7*6ac142bfSSuman Kumar Chakraborty 
8*6ac142bfSSuman Kumar Chakraborty #include "adf_accel_devices.h"
9*6ac142bfSSuman Kumar Chakraborty #include "adf_admin.h"
10*6ac142bfSSuman Kumar Chakraborty #include "adf_anti_rb.h"
11*6ac142bfSSuman Kumar Chakraborty #include "adf_common_drv.h"
12*6ac142bfSSuman Kumar Chakraborty #include "icp_qat_fw_init_admin.h"
13*6ac142bfSSuman Kumar Chakraborty 
14*6ac142bfSSuman Kumar Chakraborty #define ADF_SVN_RETRY_MAX	60
15*6ac142bfSSuman Kumar Chakraborty 
16*6ac142bfSSuman Kumar Chakraborty int adf_anti_rb_commit(struct adf_accel_dev *accel_dev)
17*6ac142bfSSuman Kumar Chakraborty {
18*6ac142bfSSuman Kumar Chakraborty 	return adf_send_admin_arb_commit(accel_dev);
19*6ac142bfSSuman Kumar Chakraborty }
20*6ac142bfSSuman Kumar Chakraborty 
21*6ac142bfSSuman Kumar Chakraborty int adf_anti_rb_query(struct adf_accel_dev *accel_dev, enum anti_rb cmd, u8 *svn)
22*6ac142bfSSuman Kumar Chakraborty {
23*6ac142bfSSuman Kumar Chakraborty 	return adf_send_admin_arb_query(accel_dev, cmd, svn);
24*6ac142bfSSuman Kumar Chakraborty }
25*6ac142bfSSuman Kumar Chakraborty 
26*6ac142bfSSuman Kumar Chakraborty int adf_anti_rb_check(struct pci_dev *pdev)
27*6ac142bfSSuman Kumar Chakraborty {
28*6ac142bfSSuman Kumar Chakraborty 	struct adf_anti_rb_hw_data *anti_rb;
29*6ac142bfSSuman Kumar Chakraborty 	u32 svncheck_sts, cfc_svncheck_sts;
30*6ac142bfSSuman Kumar Chakraborty 	struct adf_accel_dev *accel_dev;
31*6ac142bfSSuman Kumar Chakraborty 	void __iomem *pmisc_addr;
32*6ac142bfSSuman Kumar Chakraborty 
33*6ac142bfSSuman Kumar Chakraborty 	accel_dev = adf_devmgr_pci_to_accel_dev(pdev);
34*6ac142bfSSuman Kumar Chakraborty 	if (!accel_dev)
35*6ac142bfSSuman Kumar Chakraborty 		return -EINVAL;
36*6ac142bfSSuman Kumar Chakraborty 
37*6ac142bfSSuman Kumar Chakraborty 	anti_rb = GET_ANTI_RB_DATA(accel_dev);
38*6ac142bfSSuman Kumar Chakraborty 	if (!anti_rb->anti_rb_enabled || !anti_rb->anti_rb_enabled(accel_dev))
39*6ac142bfSSuman Kumar Chakraborty 		return 0;
40*6ac142bfSSuman Kumar Chakraborty 
41*6ac142bfSSuman Kumar Chakraborty 	pmisc_addr = adf_get_pmisc_base(accel_dev);
42*6ac142bfSSuman Kumar Chakraborty 
43*6ac142bfSSuman Kumar Chakraborty 	cfc_svncheck_sts = ADF_CSR_RD(pmisc_addr, anti_rb->svncheck_offset);
44*6ac142bfSSuman Kumar Chakraborty 
45*6ac142bfSSuman Kumar Chakraborty 	svncheck_sts = FIELD_GET(ADF_SVN_STS_MASK, cfc_svncheck_sts);
46*6ac142bfSSuman Kumar Chakraborty 	switch (svncheck_sts) {
47*6ac142bfSSuman Kumar Chakraborty 	case ADF_SVN_NO_STS:
48*6ac142bfSSuman Kumar Chakraborty 		return 0;
49*6ac142bfSSuman Kumar Chakraborty 	case ADF_SVN_PASS_STS:
50*6ac142bfSSuman Kumar Chakraborty 		anti_rb->svncheck_retry = 0;
51*6ac142bfSSuman Kumar Chakraborty 		return 0;
52*6ac142bfSSuman Kumar Chakraborty 	case ADF_SVN_FAIL_STS:
53*6ac142bfSSuman Kumar Chakraborty 		dev_err(&GET_DEV(accel_dev), "Security Version Number failure\n");
54*6ac142bfSSuman Kumar Chakraborty 		return -EIO;
55*6ac142bfSSuman Kumar Chakraborty 	case ADF_SVN_RETRY_STS:
56*6ac142bfSSuman Kumar Chakraborty 		if (anti_rb->svncheck_retry++ >= ADF_SVN_RETRY_MAX) {
57*6ac142bfSSuman Kumar Chakraborty 			anti_rb->svncheck_retry = 0;
58*6ac142bfSSuman Kumar Chakraborty 			return -ETIMEDOUT;
59*6ac142bfSSuman Kumar Chakraborty 		}
60*6ac142bfSSuman Kumar Chakraborty 		msleep(ADF_SVN_RETRY_MS);
61*6ac142bfSSuman Kumar Chakraborty 		return -EAGAIN;
62*6ac142bfSSuman Kumar Chakraborty 	default:
63*6ac142bfSSuman Kumar Chakraborty 		dev_err(&GET_DEV(accel_dev), "Invalid SVN check status\n");
64*6ac142bfSSuman Kumar Chakraborty 		return -EINVAL;
65*6ac142bfSSuman Kumar Chakraborty 	}
66*6ac142bfSSuman Kumar Chakraborty }
67