<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> 10 November 2026 15:15<br>
<b>To:</b> dev@dpdk.org <dev@dpdk.org><br>
<b>Cc:</b> Nicolau, Radu <radu.nicolau@intel.com>; Ji, Kai <kai.ji@intel.com>; Fan Zhang <fanzhang.oss@gmail.com>; Ashish Gupta <ashishg@marvell.com><br>
<b>Subject:</b> [PATCH] compress/qat: add Gen 6 support</font>
<div> </div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt;">
<div class="PlainText">Add support for Gen 6 QAT compression devices.<br>
<br>
Signed-off-by: Radu Nicolau <radu.nicolau@intel.com><br>
---<br>
 doc/guides/compressdevs/qat_comp.rst         |   1 +<br>
 doc/guides/cryptodevs/qat.rst                |   2 +-<br>
 doc/guides/rel_notes/release_26_11.rst       |   4 +<br>
 drivers/common/qat/meson.build               |   1 +<br>
 drivers/common/qat/qat_adf/icp_qat_fw_comp.h |   5 +<br>
 drivers/compress/qat/dev/qat_comp_pmd_gen6.c | 135 +++++++++++++++++++<br>
 drivers/compress/qat/dev/qat_comp_pmd_gens.h |   8 ++<br>
 drivers/compress/qat/qat_comp.c              |  21 ++-<br>
 8 files changed, 175 insertions(+), 2 deletions(-)<br>
 create mode 100644 drivers/compress/qat/dev/qat_comp_pmd_gen6.c<br>
<br>
diff --git a/doc/guides/compressdevs/qat_comp.rst b/doc/guides/compressdevs/qat_comp.rst<br>
index 78b1ad9c23..7c6c8e1074 100644<br>
--- a/doc/guides/compressdevs/qat_comp.rst<br>
+++ b/doc/guides/compressdevs/qat_comp.rst<br>
@@ -15,6 +15,7 @@ support for the following hardware accelerator devices:<br>
 * ``Intel QuickAssist Technology C3xxx``<br>
 * ``Intel QuickAssist Technology DH895x``<br>
 * ``Intel QuickAssist Technology 300xx``<br>
+* ``Intel QuickAssist Technology 6xxx``<br>
 <br>
 <br>
 Features<br>
diff --git a/doc/guides/cryptodevs/qat.rst b/doc/guides/cryptodevs/qat.rst<br>
index 27713913ae..8c118b3c5f 100644<br>
--- a/doc/guides/cryptodevs/qat.rst<br>
+++ b/doc/guides/cryptodevs/qat.rst<br>
@@ -486,7 +486,7 @@ to see the full table)<br>
    +-----+-----+-----+-----+----------+---------------+---------------+------------+--------+------+--------+--------+<br>
    | Yes | Yes | Yes | 5   | 420xx    | linux/6.8+    | qat_420xx     | 420xx      | 4946   | 2    | 4947   | 16     |<br>
    +-----+-----+-----+-----+----------+---------------+---------------+------------+--------+------+--------+--------+<br>
-   | Yes | Yes | No  | 6   | 6xxx     | linux/6.16+   | qat_6xxx      | 6xxx       | 4948   | 1    | 4949   | 16     |<br>
+   | Yes | Yes | Yes | 6   | 6xxx     | linux/6.16+   | qat_6xxx      | 6xxx       | 4948   | 1    | 4949   | 16     |<br>
    +-----+-----+-----+-----+----------+---------------+---------------+------------+--------+------+--------+--------+<br>
 <br>
 * Note: Symmetric mixed crypto algorithms feature on Gen 2 works only with IDZ driver version 4.9.0+<br>
diff --git a/doc/guides/rel_notes/release_26_11.rst b/doc/guides/rel_notes/release_26_11.rst<br>
index fdcf155e07..81971ee38a 100644<br>
--- a/doc/guides/rel_notes/release_26_11.rst<br>
+++ b/doc/guides/rel_notes/release_26_11.rst<br>
@@ -59,6 +59,10 @@ New Features<br>
 <br>
   * Added support for Gen 6 QAT devices.<br>
 <br>
+* **Updated Intel QuickAssist Technology (QAT) compression driver.**<br>
+<br>
+  * Added support for Gen 6 QAT devices.<br>
+<br>
 <br>
 Removed Items<br>
 -------------<br>
diff --git a/drivers/common/qat/meson.build b/drivers/common/qat/meson.build<br>
index db792864a2..c7ad535c69 100644<br>
--- a/drivers/common/qat/meson.build<br>
+++ b/drivers/common/qat/meson.build<br>
@@ -123,6 +123,7 @@ if qat_compress<br>
             'dev/qat_comp_pmd_gen3.c',<br>
             'dev/qat_comp_pmd_gen4.c',<br>
             'dev/qat_comp_pmd_gen5.c',<br>
+            'dev/qat_comp_pmd_gen6.c',<br>
         ]<br>
         sources += files(join_paths(qat_compress_relpath, f))<br>
     endforeach<br>
diff --git a/drivers/common/qat/qat_adf/icp_qat_fw_comp.h b/drivers/common/qat/qat_adf/icp_qat_fw_comp.h<br>
index da45cb8f7d..625fdc055f 100644<br>
--- a/drivers/common/qat/qat_adf/icp_qat_fw_comp.h<br>
+++ b/drivers/common/qat/qat_adf/icp_qat_fw_comp.h<br>
@@ -20,6 +20,11 @@ enum icp_qat_fw_comp_cmd_id {<br>
         /**< Delimiter type */<br>
 };<br>
 <br>
+enum icp_qat_fw_comp_cmd_id_gen6 {<br>
+       ICP_QAT_GEN6_FW_COMP_CMD_DEFLATE_COMP = 1,<br>
+       ICP_QAT_GEN6_FW_COMP_CMD_DEFLATE_DECOMP = 2,<br>
+};<br>
+<br>
 /**< Flag usage */<br>
 <br>
 #define ICP_QAT_FW_COMP_STATELESS_SESSION 0<br>
diff --git a/drivers/compress/qat/dev/qat_comp_pmd_gen6.c b/drivers/compress/qat/dev/qat_comp_pmd_gen6.c<br>
new file mode 100644<br>
index 0000000000..40be10b1ea<br>
--- /dev/null<br>
+++ b/drivers/compress/qat/dev/qat_comp_pmd_gen6.c<br>
@@ -0,0 +1,135 @@<br>
+/* SPDX-License-Identifier: BSD-3-Clause<br>
+ * Copyright(c) 2026 Intel Corporation<br>
+ */<br>
+<br>
+#include <rte_memzone.h><br>
+<br>
+#include "qat_logs.h"<br>
+#include "qat_comp.h"<br>
+#include "qat_comp_pmd.h"<br>
+#include "qat_comp_pmd_gens.h"<br>
+#include "icp_qat_hw_gen4_comp.h"<br>
+<br>
+static const struct rte_compressdev_capabilities<br>
+qat_gen6_comp_capabilities[] = {<br>
+       {/* COMPRESSION - deflate */<br>
+        .algo = RTE_COMP_ALGO_DEFLATE,<br>
+        .comp_feature_flags = RTE_COMP_FF_MULTI_PKT_CHECKSUM |<br>
+                               RTE_COMP_FF_CRC32_CHECKSUM |<br>
+                               RTE_COMP_FF_ADLER32_CHECKSUM |<br>
+                               RTE_COMP_FF_CRC32_ADLER32_CHECKSUM |<br>
+                               RTE_COMP_FF_SHAREABLE_PRIV_XFORM |<br>
+                               RTE_COMP_FF_HUFFMAN_DYNAMIC |<br>
+                               RTE_COMP_FF_HUFFMAN_FIXED |<br>
+                               RTE_COMP_FF_OOP_SGL_IN_SGL_OUT |<br>
+                               RTE_COMP_FF_OOP_SGL_IN_LB_OUT |<br>
+                               RTE_COMP_FF_OOP_LB_IN_SGL_OUT,<br>
+        .window_size = {.min = 15, .max = 15, .increment = 0} },<br>
+        RTE_COMP_END_OF_CAPABILITIES_LIST() };<br>
+<br>
+static struct rte_compressdev_ops qat_comp_ops_gen6 = {<br>
+<br>
+       /* Device related operations */<br>
+       .dev_configure          = qat_comp_dev_config_gen4,<br>
+       .dev_start              = qat_comp_dev_start,<br>
+       .dev_stop               = qat_comp_dev_stop,<br>
+       .dev_close              = qat_comp_dev_close,<br>
+       .dev_infos_get          = qat_comp_dev_info_get,<br>
+<br>
+       .stats_get              = qat_comp_stats_get,<br>
+       .stats_reset            = qat_comp_stats_reset,<br>
+       .queue_pair_setup       = qat_comp_qp_setup,<br>
+       .queue_pair_release     = qat_comp_qp_release,<br>
+<br>
+       /* Compression related operations */<br>
+       .private_xform_create   = qat_comp_private_xform_create,<br>
+       .private_xform_free     = qat_comp_private_xform_free,<br>
+       .stream_create          = qat_comp_stream_create,<br>
+       .stream_free            = qat_comp_stream_free<br>
+};<br>
+<br>
+/* GEN6 specific. */<br>
+int<br>
+qat_comp_create_templates_gen6(struct qat_comp_xform *qat_xform,<br>
+                              __rte_unused const struct rte_memzone *interm_buff_mz,<br>
+                              const struct rte_comp_xform *xform,<br>
+                              __rte_unused const struct qat_comp_stream *stream,<br>
+                              enum rte_comp_op_type op_type,<br>
+                              enum qat_device_gen qat_dev_gen)<br>
+{<br>
+       struct icp_qat_fw_comp_req *comp_req;<br>
+       int res;<br>
+<br>
+       if (unlikely(qat_xform == NULL)) {<br>
+               QAT_LOG(ERR, "Session was not created for this device");<br>
+               return -EINVAL;<br>
+       }<br>
+<br>
+       /* Template below carries no stream state, so stateful ops would run stateless. */<br>
+       if (unlikely(op_type == RTE_COMP_OP_STATEFUL)) {<br>
+               QAT_LOG(ERR, "QAT GEN6 PMD does not support stateful operations");<br>
+               return -ENOTSUP;<br>
+       }<br>
+<br>
+       comp_req = &qat_xform->qat_comp_req_tmpl;<br>
+<br>
+       /* Initialize header */<br>
+       if (qat_xform->qat_comp_request_type == QAT_COMP_REQUEST_FIXED_COMP_STATELESS ||<br>
+           qat_xform->qat_comp_request_type == QAT_COMP_REQUEST_DYNAMIC_COMP_STATELESS)<br>
+               comp_req->comn_hdr.service_cmd_id = ICP_QAT_GEN6_FW_COMP_CMD_DEFLATE_COMP;<br>
+       else if (qat_xform->qat_comp_request_type == QAT_COMP_REQUEST_DECOMPRESS)<br>
+               comp_req->comn_hdr.service_cmd_id = ICP_QAT_GEN6_FW_COMP_CMD_DEFLATE_DECOMP;<br>
+<br>
+       comp_req->comn_hdr.service_type = ICP_QAT_FW_COMN_REQ_CPM_FW_COMP;<br>
+<br>
+       comp_req->comn_hdr.hdr_flags =<br>
+           ICP_QAT_FW_COMN_HDR_FLAGS_BUILD(ICP_QAT_FW_COMN_REQ_FLAG_SET);<br>
+<br>
+       comp_req->comn_hdr.serv_specif_flags = 0;<br>
+<br>
+       comp_req->comn_hdr.comn_req_flags = ICP_QAT_FW_COMN_FLAGS_BUILD(<br>
+               QAT_COMN_CD_FLD_TYPE_16BYTE_DATA, QAT_COMN_PTR_TYPE_FLAT);<br>
+<br>
+       res = qat_comp_gen_dev_ops[qat_dev_gen].qat_comp_set_slice_cfg_word(<br>
+                       qat_xform, xform, op_type,<br>
+                       comp_req->cd_pars.sl.comp_slice_cfg_word);<br>
+       if (res != 0)<br>
+               return res;<br>
+<br>
+       comp_req->comp_pars.initial_adler = 1;<br>
+       comp_req->comp_pars.initial_crc32 = 0;<br>
+       comp_req->comp_pars.req_par_flags =<br>
+               (ICP_QAT_FW_COMP_BFINAL << ICP_QAT_FW_COMP_BFINAL_BITPOS);<br>
+<br>
+#if RTE_LOG_DP_LEVEL >= RTE_LOG_DEBUG<br>
+       QAT_DP_HEXDUMP_LOG(DEBUG, "qat compression message template:", comp_req,<br>
+                   sizeof(struct icp_qat_fw_comp_req));<br>
+#endif<br>
+       return 0;<br>
+}<br>
+<br>
+static struct qat_comp_capabilities_info<br>
+qat_comp_cap_get_gen6(struct qat_pci_device *qat_dev __rte_unused)<br>
+{<br>
+       struct qat_comp_capabilities_info capa_info = {<br>
+               .data = qat_gen6_comp_capabilities,<br>
+               .size = sizeof(qat_gen6_comp_capabilities)<br>
+       };<br>
+       return capa_info;<br>
+}<br>
+<br>
+RTE_INIT(qat_comp_pmd_gen6_init)<br>
+{<br>
+       qat_comp_gen_dev_ops[QAT_GEN6].compressdev_ops =<br>
+                       &qat_comp_ops_gen6;<br>
+       qat_comp_gen_dev_ops[QAT_GEN6].qat_comp_get_capabilities =<br>
+                       qat_comp_cap_get_gen6;<br>
+       qat_comp_gen_dev_ops[QAT_GEN6].qat_comp_get_num_im_bufs_required =<br>
+                       qat_comp_get_num_im_bufs_required_gen4;<br>
+       qat_comp_gen_dev_ops[QAT_GEN6].qat_comp_get_ram_bank_flags =<br>
+                       qat_comp_get_ram_bank_flags_gen4;<br>
+       qat_comp_gen_dev_ops[QAT_GEN6].qat_comp_set_slice_cfg_word =<br>
+                       qat_comp_set_slice_cfg_word_gen4;<br>
+       qat_comp_gen_dev_ops[QAT_GEN6].qat_comp_get_feature_flags =<br>
+                       qat_comp_get_features_gen1;<br>
+}<br>
diff --git a/drivers/compress/qat/dev/qat_comp_pmd_gens.h b/drivers/compress/qat/dev/qat_comp_pmd_gens.h<br>
index e329fe3e18..6a0b281abd 100644<br>
--- a/drivers/compress/qat/dev/qat_comp_pmd_gens.h<br>
+++ b/drivers/compress/qat/dev/qat_comp_pmd_gens.h<br>
@@ -41,4 +41,12 @@ qat_comp_dev_config_gen4(struct rte_compressdev *dev,<br>
 <br>
 extern struct rte_compressdev_ops qat_comp_ops_gen1;<br>
 <br>
+int<br>
+qat_comp_create_templates_gen6(struct qat_comp_xform *qat_xform,<br>
+               const struct rte_memzone *interm_buff_mz,<br>
+               const struct rte_comp_xform *xform,<br>
+               const struct qat_comp_stream *stream,<br>
+               enum rte_comp_op_type op_type,<br>
+               enum qat_device_gen qat_dev_gen);<br>
+<br>
 #endif /* _QAT_COMP_PMD_GENS_H_ */<br>
diff --git a/drivers/compress/qat/qat_comp.c b/drivers/compress/qat/qat_comp.c<br>
index 559948a46a..35fa513631 100644<br>
--- a/drivers/compress/qat/qat_comp.c<br>
+++ b/drivers/compress/qat/qat_comp.c<br>
@@ -18,6 +18,7 @@<br>
 #include "qat_logs.h"<br>
 #include "qat_comp.h"<br>
 #include "qat_comp_pmd.h"<br>
+#include "dev/qat_comp_pmd_gens.h"<br>
 <br>
 static void<br>
 qat_comp_fallback_to_fixed(struct icp_qat_fw_comp_req *comp_req)<br>
@@ -814,7 +815,7 @@ qat_comp_create_req_hdr(struct icp_qat_fw_comn_req_hdr *header,<br>
 }<br>
 <br>
 static int<br>
-qat_comp_create_templates(struct qat_comp_xform *qat_xform,<br>
+qat_comp_create_templates_genx(struct qat_comp_xform *qat_xform,<br>
                           const struct rte_memzone *interm_buff_mz,<br>
                           const struct rte_comp_xform *xform,<br>
                           const struct qat_comp_stream *stream,<br>
@@ -933,6 +934,24 @@ qat_comp_create_templates(struct qat_comp_xform *qat_xform,<br>
         return 0;<br>
 }<br>
 <br>
+static int<br>
+qat_comp_create_templates(struct qat_comp_xform *qat_xform,<br>
+                         const struct rte_memzone *interm_buff_mz,<br>
+                         const struct rte_comp_xform *xform,<br>
+                         const struct qat_comp_stream *stream,<br>
+                         enum rte_comp_op_type op_type,<br>
+                         enum qat_device_gen qat_dev_gen)<br>
+{<br>
+       if (qat_dev_gen == QAT_GEN6)<br>
+               return qat_comp_create_templates_gen6(qat_xform,<br>
+                       interm_buff_mz, xform, stream, op_type,<br>
+                       qat_dev_gen);<br>
+<br>
+       return qat_comp_create_templates_genx(qat_xform,<br>
+                       interm_buff_mz, xform, stream, op_type,<br>
+                       qat_dev_gen);<br>
+}<br>
+<br>
 /**<br>
  * Create driver private_xform data.<br>
  *<br>
-- <br>
2.52.0<br>
<br>
</div>
</span></font></div>
</body>
</html>