<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div class="elementToProof" style="font-family: "IntelOne Text"; font-size: 10pt; color: rgb(0, 0, 0);">
Acked-by: Kai Ji <kai.ji@intel.com></div>
<div class="elementToProof" style="font-family: "IntelOne Text"; font-size: 10pt; color: rgb(0, 0, 0);">
<br>
</div>
<div id="appendonsend"></div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> Nicolau, Radu <radu.nicolau@intel.com><br>
<b>Sent:</b> 23 April 2025 11:50<br>
<b>To:</b> Ji, Kai <kai.ji@intel.com><br>
<b>Cc:</b> dev@dpdk.org <dev@dpdk.org>; Nicolau, Radu <radu.nicolau@intel.com><br>
<b>Subject:</b> [PATCH] crypto/qat: disable ZUC 256 on selected devices</font>
<div> </div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt;">
<div class="PlainText">Disable ZUC 256 cipher on selected devices.<br>
<br>
Signed-off-by: Radu Nicolau <radu.nicolau@intel.com><br>
---<br>
 drivers/common/qat/qat_common.h              | 2 ++<br>
 drivers/common/qat/qat_device.c              | 9 +++++++++<br>
 drivers/crypto/qat/dev/qat_crypto_pmd_gen3.c | 5 ++++-<br>
 drivers/crypto/qat/dev/qat_crypto_pmd_gen5.c | 9 +++++++++<br>
 drivers/crypto/qat/qat_sym_session.c         | 6 ++++++<br>
 5 files changed, 30 insertions(+), 1 deletion(-)<br>
<br>
diff --git a/drivers/common/qat/qat_common.h b/drivers/common/qat/qat_common.h<br>
index 51d20267bd..8476021e01 100644<br>
--- a/drivers/common/qat/qat_common.h<br>
+++ b/drivers/common/qat/qat_common.h<br>
@@ -26,6 +26,8 @@ struct qat_options {<br>
         /**< Wireless Slices supported */<br>
         uint8_t legacy_alg;<br>
         /**< are legacy algorithm supported */<br>
+       uint8_t zuc_256_disabled;<br>
+       /**< is ZUC 256 algorithm disabled */<br>
 };<br>
 <br>
 enum qat_device_gen {<br>
diff --git a/drivers/common/qat/qat_device.c b/drivers/common/qat/qat_device.c<br>
index b582e3bf8b..35c664e529 100644<br>
--- a/drivers/common/qat/qat_device.c<br>
+++ b/drivers/common/qat/qat_device.c<br>
@@ -169,6 +169,13 @@ wireless_slice_support(uint16_t pci_dev_id)<br>
                         pci_dev_id == 0x4947;<br>
 }<br>
 <br>
+static int<br>
+zuc_256_disabled(uint16_t pci_dev_id)<br>
+{<br>
+       return pci_dev_id == 0x578b ||<br>
+                       pci_dev_id == 0x4947;<br>
+}<br>
+<br>
 /* This function base on the atoi function peculiarity, non integral part<br>
  * other than the equals sign is ignored. It will not work with other conversion<br>
  * functions like strt*.<br>
@@ -332,6 +339,8 @@ qat_pci_device_allocate(struct rte_pci_device *pci_dev)<br>
 <br>
         if (wireless_slice_support(pci_dev->id.device_id))<br>
                 qat_dev->options.has_wireless_slice = 1;<br>
+       if (zuc_256_disabled(pci_dev->id.device_id))<br>
+               qat_dev->options.zuc_256_disabled = 1;<br>
 <br>
         ops_hw = qat_dev_hw_spec[qat_dev->qat_dev_gen];<br>
         NOT_NULL(ops_hw->qat_dev_get_misc_bar, goto error,<br>
diff --git a/drivers/crypto/qat/dev/qat_crypto_pmd_gen3.c b/drivers/crypto/qat/dev/qat_crypto_pmd_gen3.c<br>
index af664fb9b9..11541ee51d 100644<br>
--- a/drivers/crypto/qat/dev/qat_crypto_pmd_gen3.c<br>
+++ b/drivers/crypto/qat/dev/qat_crypto_pmd_gen3.c<br>
@@ -295,7 +295,10 @@ qat_sym_crypto_cap_get_gen3(struct qat_cryptodev_private *internals,<br>
                         check_cipher_capa(&capabilities[iter],<br>
                                 RTE_CRYPTO_CIPHER_ZUC_EEA3))) {<br>
                         cap = addr + curr_capa;<br>
-                       cap->sym.cipher.key_size.max = 32;<br>
+                       if (internals->qat_dev->options.zuc_256_disabled)<br>
+                               cap->sym.cipher.key_size.max = 16;<br>
+                       else<br>
+                               cap->sym.cipher.key_size.max = 32;<br>
                         cap->sym.cipher.key_size.increment = 16;<br>
                         cap->sym.cipher.iv_size.max = 25;<br>
                         cap->sym.cipher.iv_size.increment = 1;<br>
diff --git a/drivers/crypto/qat/dev/qat_crypto_pmd_gen5.c b/drivers/crypto/qat/dev/qat_crypto_pmd_gen5.c<br>
index e1302e9b36..70ede22042 100644<br>
--- a/drivers/crypto/qat/dev/qat_crypto_pmd_gen5.c<br>
+++ b/drivers/crypto/qat/dev/qat_crypto_pmd_gen5.c<br>
@@ -205,6 +205,15 @@ qat_sym_crypto_cap_get_gen5(struct qat_cryptodev_private *internals,<br>
 <br>
                 memcpy(addr + curr_capa, capabilities + iter,<br>
                         sizeof(struct rte_cryptodev_capabilities));<br>
+<br>
+               if (check_cipher_capa(&capabilities[iter],<br>
+                               RTE_CRYPTO_CIPHER_ZUC_EEA3)) {<br>
+                       struct rte_cryptodev_capabilities *cap =<br>
+                               addr + curr_capa;<br>
+                       if (internals->qat_dev->options.zuc_256_disabled)<br>
+                               cap->sym.cipher.key_size.max = 16;<br>
+               }<br>
+<br>
                 curr_capa++;<br>
         }<br>
         internals->qat_dev_capabilities = internals->capa_mz->addr;<br>
diff --git a/drivers/crypto/qat/qat_sym_session.c b/drivers/crypto/qat/qat_sym_session.c<br>
index 7f370f03fb..2481ed7ce5 100644<br>
--- a/drivers/crypto/qat/qat_sym_session.c<br>
+++ b/drivers/crypto/qat/qat_sym_session.c<br>
@@ -526,6 +526,12 @@ qat_sym_session_configure_cipher(struct rte_cryptodev *dev,<br>
                 session->qat_mode = ICP_QAT_HW_CIPHER_CBC_MODE;<br>
                 break;<br>
         case RTE_CRYPTO_CIPHER_ZUC_EEA3:<br>
+               if (internals->qat_dev->options.zuc_256_disabled &&<br>
+                       cipher_xform->key.length == ICP_QAT_HW_ZUC_256_KEY_SZ) {<br>
+                       QAT_LOG(ERR, "ZUC 256 disabled on this device");<br>
+                       ret = -ENOTSUP;<br>
+                       goto error_out;<br>
+               }<br>
                 if (!qat_is_cipher_alg_supported(<br>
                         cipher_xform->algo, internals)) {<br>
                         QAT_LOG(ERR, "%s not supported on this device",<br>
-- <br>
2.43.0<br>
<br>
</div>
</span></font></div>
</body>
</html>