DPDK patches and discussions
 help / color / mirror / Atom feed
From: Gnanesh <gpalanethra@marvell.com>
To: <dev@dpdk.org>
Cc: <njogarao@marvell.com>, <brajendra@marvell.com>,
	Gnanesh <gpalanethra@marvell.com>
Subject: [PATCH 1/1] Cn10K crypto Tests: Added Marvell Cn10K specific crypto Tests to TestCryptoPerfCryptodevPerf
Date: Thu, 31 Oct 2024 16:13:22 +0530	[thread overview]
Message-ID: <20241031104322.3169217-1-gpalanethra@marvell.com> (raw)

    Changes included in this patch:
    -- New TestCases are added for Cn10K CPT Hardware crypto accelerator.
    -- when Testing newly added Testcases it is found Necessary to make Below Changes
          1> tests/cryptodev_common.py
               --> bind_qat_device function is updated to generate VFs for the given crypto_dev_id
               --> added New function bind_mrvl_devices to accept list of PCI Ids and bind it to vfio_pci driver.
          2> framework/crb.py
               --> updated pci_devices_information_uncached_linux Method to handle additional Nic Speeds for Cavium,
                   as it was restricting only to 1 GIG NIC speed
          3> framework/settings.py
               --> Changed the default Cavium NIC driver to rvu_nicpf.
          4> nics/net_device.py
               --> added Missing expect object
          5> conf/crypto_perf_cryptodev_perf.cfg
               --> added Marvell Cn10K configs for crypto_perf_cryptodev_perf
          6> framework/ssh_pexpect.py
               --> output.replace command's output is not set before returning from get_output_all method
                   hence Unnecessarily returning Prompt along with the output
          7> tests/TestSuite_crypto_perf_cryptodev_perf.py
               -->  added Marvell CN10K Testcases
             Updated Below Private functions
                6.1> _run_crypto_perf() --> receives additional KW arguments
                6.2> _parse_output()  ---> Updated to handle Marvell Cn10K app command output
                6.3> _run_crypto_perf_throughput() --> receives additional KW arguments


Signed-off-by: Gnanesh <gpalanethra@marvell.com>
---
 conf/crypto_perf_cryptodev_perf.cfg           | 849 ++++++++++++++++++
 framework/crb.py                              |   6 +-
 framework/settings.py                         |   4 +-
 framework/ssh_pexpect.py                      |   2 +-
 nics/net_device.py                            |   3 +
 tests/TestSuite_crypto_perf_cryptodev_perf.py | 322 ++++++-
 tests/cryptodev_common.py                     |  11 +-
 7 files changed, 1172 insertions(+), 25 deletions(-)

diff --git a/conf/crypto_perf_cryptodev_perf.cfg b/conf/crypto_perf_cryptodev_perf.cfg
index f0c86a45..c152ad69 100644
--- a/conf/crypto_perf_cryptodev_perf.cfg
+++ b/conf/crypto_perf_cryptodev_perf.cfg
@@ -365,3 +365,852 @@ auth-op="generate"
 auth-key-sz=16
 auth-iv-sz=16
 digest-sz=4
+
+# Marvell Cn10K configs
+[test_perf_mrvl_aes_cbc]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="cipher-only"
+cipher-algo="aes-cbc"
+cipher-op="encrypt"
+cipher-key-sz="16"
+cipher-iv-sz="16"
+csv-friendly="True"
+
+[test_perf_mrvl_aes_gcm_encrypt]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="aead"
+aead-algo="aes-gcm"
+aead-op="encrypt"
+aead-key-sz="16"
+aead-iv-sz="12"
+aead-aad-sz="16"
+digest-sz="16"
+csv-friendly="True"
+
+[test_perf_mrvl_aes_cbc_cipher_then_auth]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="cipher-then-auth"
+cipher-algo="aes-cbc"
+cipher-op="encrypt"
+cipher-key-sz="32"
+cipher-iv-sz="16"
+auth-algo="sha1-hmac"
+auth-op="generate"
+auth-key-sz="64"
+digest-sz="20"
+csv-friendly="True"
+
+[test_perf_mrvl_aes_sha2_256_cipher_then_auth]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="cipher-then-auth"
+cipher-algo="aes-cbc"
+cipher-op="encrypt"
+cipher-key-sz="32"
+cipher-iv-sz="16"
+auth-algo="sha2-256"
+auth-op="generate"
+auth-key-sz="0"
+digest-sz="32"
+csv-friendly="True"
+
+[test_perf_mrvl_zuc_eea3_cipher_only]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="cipher-only"
+cipher-algo="zuc-eea3"
+cipher-op="encrypt"
+cipher-key-sz="16"
+cipher-iv-sz="16"
+csv-friendly="True"
+
+[test_perf_mrvl_zuc_eia3_auth_only]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="auth-only"
+auth-algo="zuc-eia3"
+auth-op="generate"
+auth-key-sz="16"
+auth-iv-sz="16"
+digest-sz="4"
+csv-friendly="True"
+
+[test_perf_mrvl_aes_gmac_auth_only]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="auth-only"
+auth-algo="aes-gmac"
+auth-op="generate"
+auth-key-sz="32"
+auth-iv-sz="12"
+digest-sz="16"
+csv-friendly="True"
+
+[test_perf_mrvl_null_cipher_only]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="cipher-only"
+cipher-algo="null"
+cipher-op="encrypt"
+cipher-key-sz="0"
+cipher-iv-sz="0"
+csv-friendly="True"
+
+[test_perf_mrvl_snow3g_uea2_cipher_only]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="cipher-only"
+cipher-algo="snow3g-uea2"
+cipher-op="encrypt"
+cipher-key-sz="16"
+cipher-iv-sz="16"
+csv-friendly="True"
+
+[test_perf_mrvl_kasumi_f8_cipher_only]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="cipher-only"
+cipher-algo="kasumi-f8"
+cipher-op="encrypt"
+cipher-key-sz="16"
+cipher-iv-sz="8"
+csv-friendly="True"
+
+[test_perf_mrvl_snow3g_uia2_auth_only]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="auth-only"
+auth-algo="snow3g-uia2"
+auth-op="generate"
+auth-key-sz="16"
+auth-iv-sz="16"
+digest-sz="4"
+csv-friendly="True"
+
+[test_perf_mrvl_kasumi_f9_auth_only]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="auth-only"
+auth-algo="kasumi-f9"
+auth-op="generate"
+auth-key-sz="16"
+aead-aad-sz="0"
+digest-sz="4"
+csv-friendly="True"
+
+[test_perf_mrvl_sha1_hmac_auth_only]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="auth-only"
+auth-algo="sha1-hmac"
+auth-op="generate"
+auth-key-sz="64"
+aead-aad-sz="0"
+digest-sz="20"
+csv-friendly="True"
+
+[test_perf_mrvl_sha1_auth_only]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="auth-only"
+auth-algo="sha1"
+auth-op="generate"
+auth-key-sz="0"
+aead-aad-sz="0"
+digest-sz="20"
+csv-friendly="True"
+
+[test_perf_mrvl_aes_ctr_cipher_then_auth]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="cipher-then-auth"
+cipher-algo="aes-ctr"
+cipher-op="encrypt"
+cipher-key-sz="16"
+cipher-iv-sz="16"
+auth-algo="sha1-hmac"
+auth-op="generate"
+auth-key-sz="64"
+digest-sz="20"
+csv-friendly="True"
+
+[test_perf_mrvl_3des_cbc_cipher_then_auth]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="cipher-then-auth"
+cipher-algo="3des-cbc"
+cipher-op="encrypt"
+cipher-key-sz="24"
+cipher-iv-sz="16"
+auth-algo="sha1-hmac"
+auth-op="generate"
+auth-key-sz="64"
+digest-sz="20"
+csv-friendly="True"
+
+[test_perf_mrvl_sha1_hmac_cipher_then_auth]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="cipher-then-auth"
+cipher-algo="3des-cbc"
+cipher-op="encrypt"
+cipher-key-sz="24"
+cipher-iv-sz="16"
+auth-algo="sha1-hmac"
+auth-op="generate"
+auth-key-sz="64"
+digest-sz="20"
+csv-friendly="True"
+
+[test_perf_mrvl_sha2_224_hmac_cipher_then_auth]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="cipher-then-auth"
+cipher-algo="aes-ctr"
+cipher-op="encrypt"
+cipher-key-sz="16"
+cipher-iv-sz="16"
+auth-algo="sha2-224-hmac"
+auth-op="generate"
+auth-key-sz="64"
+digest-sz="28"
+csv-friendly="True"
+
+[test_perf_mrvl_sha2_256_hmac_cipher_then_auth]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="cipher-then-auth"
+cipher-algo="aes-ctr"
+cipher-op="encrypt"
+cipher-key-sz="16"
+cipher-iv-sz="16"
+auth-algo="sha2-256-hmac"
+auth-op="generate"
+auth-key-sz="64"
+digest-sz="32"
+csv-friendly="True"
+
+[test_perf_mrvl_sha2_384_hmac_cipher_then_auth]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="cipher-then-auth"
+cipher-algo="aes-ctr"
+cipher-op="encrypt"
+cipher-key-sz="16"
+cipher-iv-sz="16"
+auth-algo="sha2-384-hmac"
+auth-op="generate"
+auth-key-sz="64"
+digest-sz="48"
+csv-friendly="True"
+
+[test_perf_mrvl_aes_cmac_cipher_then_auth]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="1000000"
+burst-sz="32"
+buffer-sz="64"
+optype="auth-then-cipher"
+cipher-algo="snow3g-uea2"
+cipher-op="encrypt"
+cipher-key-sz="16"
+cipher-iv-sz="16"
+auth-algo="aes-cmac"
+auth-op="generate"
+auth-key-sz="16"
+aead-iv-sz="0"
+digest-sz="4"
+csv-friendly="True"
+
+[test_perf_mrvl_aes_ctr_snow_3g_uia2_cipher_then_auth]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="1000000"
+burst-sz="32"
+buffer-sz="64"
+optype="auth-then-cipher"
+cipher-algo="aes-ctr"
+cipher-op="encrypt"
+cipher-key-sz="16"
+cipher-iv-sz="16"
+auth-algo="snow3g-uia2"
+auth-op="generate"
+auth-key-sz="16"
+auth-iv-sz="16"
+digest-sz="4"
+csv-friendly="True"
+
+[test_perf_mrvl_aes_ctr_zuc_eia3_cipher_then_auth]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="1000000"
+burst-sz="32"
+buffer-sz="64"
+optype="auth-then-cipher"
+cipher-algo="aes-ctr"
+cipher-op="encrypt"
+cipher-key-sz="16"
+cipher-iv-sz="16"
+auth-algo="zuc-eia3"
+auth-op="generate"
+auth-key-sz="16"
+auth-iv-sz="16"
+digest-sz="4"
+csv-friendly="True"
+
+[test_perf_mrvl_aes_ctr_aes_cmac_cipher_then_auth]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="1000000"
+burst-sz="32"
+buffer-sz="64"
+optype="auth-then-cipher"
+cipher-algo="aes-ctr"
+cipher-op="encrypt"
+cipher-key-sz="16"
+cipher-iv-sz="16"
+auth-algo="aes-cmac"
+auth-op="generate"
+auth-key-sz="16"
+auth-iv-sz="0"
+digest-sz="4"
+csv-friendly="True"
+
+[test_perf_mrvl_zuc_eea3_snow3g_uia2_cipher_then_auth]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="1000000"
+burst-sz="32"
+buffer-sz="64"
+optype="auth-then-cipher"
+cipher-algo="zuc-eea3"
+cipher-op="encrypt"
+cipher-key-sz="16"
+cipher-iv-sz="16"
+auth-algo="snow3g-uia2"
+auth-op="generate"
+auth-key-sz="16"
+auth-iv-sz="16"
+digest-sz="4"
+csv-friendly="True"
+
+[test_perf_mrvl_zuc_eea3_zuc_eia3_cipher_then_auth]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="1000000"
+burst-sz="32"
+buffer-sz="64"
+optype="auth-then-cipher"
+cipher-algo="zuc-eea3"
+cipher-op="encrypt"
+cipher-key-sz="16"
+cipher-iv-sz="16"
+auth-algo="zuc-eia3"
+auth-op="generate"
+auth-key-sz="16"
+auth-iv-sz="16"
+digest-sz="4"
+csv-friendly="True"
+
+[test_perf_mrvl_zuc_eea3_aes_cmac_cipher_then_auth]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="1000000"
+burst-sz="32"
+buffer-sz="64"
+optype="auth-then-cipher"
+cipher-algo="zuc-eea3"
+cipher-op="encrypt"
+cipher-key-sz="16"
+cipher-iv-sz="16"
+auth-algo="aes-cmac"
+auth-op="generate"
+auth-key-sz="16"
+auth-iv-sz="0"
+digest-sz="4"
+csv-friendly="True"
+
+[test_perf_mrvl_snow3g_uea2_snow3g_uia2_cipher_then_auth]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="1000000"
+burst-sz="32"
+buffer-sz="64"
+optype="auth-then-cipher"
+cipher-algo="snow3g-uea2"
+cipher-op="encrypt"
+cipher-key-sz="16"
+cipher-iv-sz="16"
+auth-algo="snow3g-uia2"
+auth-op="generate"
+auth-key-sz="16"
+auth-iv-sz="16"
+digest-sz="4"
+csv-friendly="True"
+
+[test_perf_mrvl_snow3g_uea2_zuc_eia3_cipher_then_auth]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="1000000"
+burst-sz="32"
+buffer-sz="64"
+optype="auth-then-cipher"
+cipher-algo="snow3g-uea2"
+cipher-op="encrypt"
+cipher-key-sz="16"
+cipher-iv-sz="16"
+auth-algo="zuc-eia3"
+auth-op="generate"
+auth-key-sz="16"
+auth-iv-sz="16"
+digest-sz="4"
+csv-friendly="True"
+
+[test_perf_mrvl_snow3g_uea2_aes_cmac_cipher_then_auth]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="1000000"
+burst-sz="32"
+buffer-sz="64"
+optype="auth-then-cipher"
+cipher-algo="snow3g-uea2"
+cipher-op="encrypt"
+cipher-key-sz="16"
+cipher-iv-sz="16"
+auth-algo="aes-cmac"
+auth-op="generate"
+auth-key-sz="16"
+auth-iv-sz="0"
+digest-sz="4"
+csv-friendly="True"
+
+[test_perf_mrvl_md5_hmac_auth_only]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="auth-only"
+auth-algo="md5-hmac"
+auth-op="generate"
+auth-key-sz="64"
+aead-aad-sz="0"
+digest-sz="16"
+csv-friendly="True"
+
+[test_perf_mrvl_aes_ctr_cipher_only]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="cipher-only"
+cipher-algo="aes-ctr"
+cipher-op="encrypt"
+cipher-key-sz="16"
+cipher-iv-sz="16"
+csv-friendly="True"
+
+[test_perf_mrvl_3des_cbc_cipher_only]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="cipher-only"
+cipher-algo="3des-cbc"
+cipher-op="encrypt"
+cipher-key-sz="24"
+cipher-iv-sz="16"
+csv-friendly="True"
+
+[test_perf_mrvl_sha2_224_hmac_auth_only]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="auth-only"
+auth-algo="sha2-224-hmac"
+auth-op="generate"
+auth-key-sz="64"
+aead-aad-sz="0"
+digest-sz="28"
+csv-friendly="True"
+
+[test_perf_mrvl_sha2_256_hmac_auth_only]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="auth-only"
+auth-algo="sha2-256-hmac"
+auth-op="generate"
+auth-key-sz="64"
+aead-aad-sz="0"
+digest-sz="32"
+csv-friendly="True"
+
+[test_perf_mrvl_sha2_384_hmac_auth_only]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="auth-only"
+auth-algo="sha2-384-hmac"
+auth-op="generate"
+auth-key-sz="64"
+aead-aad-sz="0"
+digest-sz="48"
+csv-friendly="True"
+
+[test_perf_mrvl_sha2_512_hmac_auth_only]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="auth-only"
+auth-algo="sha2-512-hmac"
+auth-op="generate"
+auth-key-sz="64"
+aead-aad-sz="0"
+digest-sz="64"
+csv-friendly="True"
+
+[test_perf_mrvl_aes_xts__cipher_only]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="cipher-only"
+cipher-algo="aes-xts"
+cipher-op="encrypt"
+cipher-key-sz="64"
+cipher-iv-sz="16"
+csv-friendly="True"
+
+[test_perf_mrvl_des_cbc_cipher_only]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="cipher-only"
+cipher-algo="des-cbc"
+cipher-op="encrypt"
+cipher-key-sz="8"
+cipher-iv-sz="8"
+csv-friendly="True"
+
+[test_perf_mrvl_md5_auth_only]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="auth-only"
+auth-algo="md5"
+auth-op="generate"
+auth-key-sz="0"
+aead-aad-sz="0"
+digest-sz="16"
+csv-friendly="True"
+
+[test_perf_mrvl_sha512_auth_only]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="auth-only"
+auth-algo="sha2-512"
+auth-op="generate"
+auth-key-sz="0"
+aead-aad-sz="0"
+digest-sz="64"
+csv-friendly="True"
+
+[test_perf_mrvl_sha384_auth_only]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="auth-only"
+auth-algo="sha2-384"
+auth-op="generate"
+auth-key-sz="0"
+aead-aad-sz="0"
+digest-sz="48"
+csv-friendly="True"
+
+[test_perf_mrvl_sha256_auth_only]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="auth-only"
+auth-algo="sha2-256"
+auth-op="generate"
+auth-key-sz="0"
+aead-aad-sz="0"
+digest-sz="32"
+csv-friendly="True"
+
+[test_perf_mrvl_sha224_auth_only]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="auth-only"
+auth-algo="sha2-224"
+auth-op="generate"
+auth-key-sz="0"
+aead-aad-sz="0"
+digest-sz="28"
+csv-friendly="True"
+
+[test_perf_mrvl_snow3g_uea2_snow3g_uia2]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="auth-then-cipher"
+cipher-algo="snow3g-uea2"
+cipher-op="encrypt"
+cipher-key-sz="16"
+cipher-iv-sz="16"
+auth-algo="snow3g-uia2"
+auth-op="generate"
+auth-key-sz="16"
+auth-iv-sz="16"
+digest-sz="4"
+csv-friendly="True"
+
+[test_perf_mrvl_sha1_hmac_armv8]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="cipher-then-auth"
+cipher-algo="aes-cbc"
+cipher-op="encrypt"
+cipher-key-sz="16"
+cipher-iv-sz="16"
+auth-algo="sha1-hmac"
+auth-op="generate"
+auth-key-sz="64"
+digest-sz="20"
+csv-friendly="True"
+
+[test_perf_mrvl_sha2_hmac_armv8]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="cipher-then-auth"
+cipher-algo="aes-cbc"
+cipher-op="encrypt"
+cipher-key-sz="16"
+cipher-iv-sz="16"
+auth-algo="sha2-256-hmac"
+auth-op="generate"
+auth-key-sz="64"
+digest-sz="20"
+csv-friendly="True"
+
+[test_mrvl_buffer]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+buffer-sz="[64,128,256,512,1024,1280,2048,4096,8192,16384]"
+optype="cipher-then-auth"
+cipher-algo="aes-cbc"
+cipher-op="encrypt"
+cipher-key-sz="32"
+cipher-iv-sz="16"
+auth-algo="sha1-hmac"
+auth-op="generate"
+auth-key-sz="64"
+digest-sz="20"
+csv-friendly="True"
+
+[test_mrvl_chacha20_poly1305_aead]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="aead"
+aead-algo="chacha20-poly1305"
+aead-op="encrypt"
+aead-key-sz="32"
+aead-iv-sz="12"
+aead-aad-sz="32"
+digest-sz="16"
+csv-friendly="True"
+
+[test_mrvl_crypto_sha2_hmac_armv8]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="cipher-then-auth"
+cipher-algo="aes-cbc"
+cipher-op="encrypt"
+cipher-key-sz="16"
+cipher-iv-sz="16"
+auth-algo="sha2-256-hmac"
+auth-op="generate"
+auth-key-sz="64"
+digest-sz="20"
+csv-friendly="True"
+
+[test_mrvl_devtype]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="cipher-only"
+cipher-algo="aes-cbc"
+cipher-op="encrypt"
+cipher-key-sz="16"
+cipher-iv-sz="16"
+csv-friendly="True"
+
+[test_mrvl_crypto_sha1_hmac_armv8]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="cipher-then-auth"
+cipher-algo="aes-cbc"
+cipher-op="encrypt"
+cipher-key-sz="16"
+cipher-iv-sz="16"
+auth-algo="sha1-hmac"
+auth-op="generate"
+auth-key-sz="64"
+digest-sz="20"
+csv-friendly="True"
+
+[test_mrvl_ptest]
+silent="True"
+ptest=["throughput","latency","pmd-cyclecount"]
+pool-sz="16384"
+total-ops="10000000"
+burst-sz="32"
+optype="cipher-then-auth"
+cipher-algo="aes-cbc"
+cipher-op="encrypt"
+cipher-key-sz="32"
+cipher-iv-sz="16"
+auth-algo="sha1-hmac"
+auth-op="generate"
+auth-key-sz="64"
+digest-sz="20"
+csv-friendly="True"
+
+[test_mrvl_burst]
+silent="True"
+ptest="throughput"
+pool-sz="16384"
+total-ops="10000000"
+burst-sz=["16", "24", "32"]
+optype="cipher-then-auth"
+cipher-algo="aes-cbc"
+cipher-op="encrypt"
+cipher-key-sz="32"
+cipher-iv-sz="16"
+auth-algo="sha1-hmac"
+auth-op="generate"
+auth-key-sz="64"
+digest-sz="20"
+csv-friendly="True"
diff --git a/framework/crb.py b/framework/crb.py
index 9e3b0a58..2fe9d147 100644
--- a/framework/crb.py
+++ b/framework/crb.py
@@ -374,15 +374,15 @@ class Crb(object):
                 pass
 
         for i in range(len(match)):
-            # check if device is cavium and check its linkspeed, append only if it is 10G
+            # for cavium supported link speed specfied under linkspeeds
             if "177d:" in match[i][1]:
-                linkspeed = "10000"
+                linkspeeds = ["40000", "10000", "25000", "50000", "100000"]
                 nic_linkspeed = self.send_expect(
                     "cat /sys/bus/pci/devices/%s/net/*/speed" % match[i][0],
                     "# ",
                     alt_session=True,
                 )
-                if nic_linkspeed.split()[0] == linkspeed:
+                if nic_linkspeed.split()[0] in  linkspeeds:
                     self.pci_devices_info.append((match[i][0], match[i][1]))
             else:
                 self.pci_devices_info.append((match[i][0], match[i][1]))
diff --git a/framework/settings.py b/framework/settings.py
index 1a561dda..b2c371f8 100644
--- a/framework/settings.py
+++ b/framework/settings.py
@@ -166,8 +166,8 @@ DRIVERS = {
     "cavium_a034": "thunder-nicvf",
     "cavium_0011": "thunder-nicvf",
     "IXGBE_10G-X550EM_X_SFP": "ixgbe",
-    "cavium_a063": "octeontx2-nicpf",
-    "cavium_a064": "octeontx2-nicvf",
+    "cavium_a063": "rvu_nicpf",
+    "cavium_a064": "rvu_nicvf",
     "ICE_100G-E810C_QSFP": "ice",
     "ICE_25G-E810C_SFP": "ice",
     "ICE_25G-E823C_QSFP": "ice",
diff --git a/framework/ssh_pexpect.py b/framework/ssh_pexpect.py
index 2132c066..a96087d2 100644
--- a/framework/ssh_pexpect.py
+++ b/framework/ssh_pexpect.py
@@ -186,7 +186,7 @@ class SSHPexpect:
 
     def get_output_all(self):
         output = self.session.before
-        output.replace("[PEXPECT]", "")
+        output = output.replace("[PEXPECT]#", "")
         return output
 
     def close(self, force=False):
diff --git a/nics/net_device.py b/nics/net_device.py
index 0f9c1af4..dd0d0e92 100644
--- a/nics/net_device.py
+++ b/nics/net_device.py
@@ -43,6 +43,7 @@ class NetDevice(object):
         if not isinstance(crb, Crb):
             raise Exception("  Please input the instance of Crb!!!")
         self.crb = crb
+        self.__send_expect = self.crb.send_expect
         self.domain_id = domain_id
         self.bus_id = bus_id
         self.devfun_id = devfun_id
@@ -727,6 +728,8 @@ class NetDevice(object):
             "/sys/bus/pci/devices/%s:%s:%s" % (domain_id, bus_id, devfun_id),
             vf_reg_file,
         )
+        self.__send_expect("echo 0 > %s" %
+                           (vf_reg_path), "# ")
         self.__send_expect("echo %d > %s" % (int(vf_num), vf_reg_path), "# ")
 
     def generate_sriov_vfs_linux_igb_uio(self, domain_id, bus_id, devfun_id, vf_num):
diff --git a/tests/TestSuite_crypto_perf_cryptodev_perf.py b/tests/TestSuite_crypto_perf_cryptodev_perf.py
index a3f48eee..b435cefa 100644
--- a/tests/TestSuite_crypto_perf_cryptodev_perf.py
+++ b/tests/TestSuite_crypto_perf_cryptodev_perf.py
@@ -59,14 +59,74 @@ class TestCryptoPerfCryptodevPerf(TestCase):
                 "# ",
                 5,
             )
-
-        cc.bind_qat_device(self, "vfio-pci")
+        if self.nic == "cavium_a063":
+            count = len(self.get_suite_cfg().get('l').split(",")) - 1
+            cc.bind_qat_device(self, "vfio-pci", generate_vfs=True, vf_count=count)
+        else:
+            cc.bind_qat_device(self, "vfio-pci")
         src_files = ["dep/test_aes_cbc.data", "dep/test_aes_gcm.data"]
         self.dut_file_dir = "/tmp"
         for file in src_files:
             self.dut.session.copy_file_to(file, self.dut_file_dir)
 
     def tear_down_all(self):
+        if self.nic == "cavium_a063":
+            cc.bind_qat_device(self, "vfio-pci", generate_vfs=True,
+                               vf_count=2)
+            import pandas as pd
+            tuples = [('TestCase',), ('performance', 'failed_enq'),
+                      ('performance', 'failed_deq'),
+                      ('performance', 'throughput_mops'),
+                      ('performance', 'cycle_buf'),
+                      ('performance', 'throughput', 'value'),
+                      ('performance', 'throughput', 'delta'),
+                      ('parameters', 'core_num/thread_num'),
+                      ('parameters', 'frame_size'),
+                      ('parameters', 'burst_size'),
+                      ('parameters', 'total_ops'), ('status',)]
+            mindex = pd.MultiIndex.from_tuples(tuples)
+            index = 0
+            df = pd.DataFrame([], columns=mindex)
+            for tname, data in self._perf_result.items():
+                for dt in data:
+                    for key, value in dt.items():
+                        df.loc[index, 'TestCase'] = tname
+                        if key == 'status':
+                            df.loc[index, (key)] = value
+                            continue
+                        for item in value:
+                            if item['name'] == 'throughput':
+                                df.loc[index, (key, item['name'], 'value')] = item['value']
+                                df.loc[index, (key, item['name'], 'delta')] = item['delta']
+                            else:
+                                df.loc[index, (key, item['name'])] = item['value']
+                    index += 1
+            perf_xl = self.logger.log_path + "/" + "perf_cryptodev_result.xls"
+            writer = pd.ExcelWriter(perf_xl, engine='xlsxwriter')
+            wb  = writer.book
+            df.to_excel(writer, sheet_name='Sheet1')
+            ws = writer.sheets["Sheet1"]
+            merge_format = wb.add_format({"bold": 1,"border": 1,"align": "center",
+                                          "valign": "vcenter"})
+            ws.merge_range('B1:B3', "TestCase", merge_format)
+            ws.merge_range('C2:C3', "failed_enq", merge_format)
+            ws.merge_range('D2:D3', "failed_deq", merge_format)
+            ws.merge_range('E2:E3', "throughput_mops", merge_format)
+            ws.merge_range('F2:F3', "throughput_mops", merge_format)
+            ws.merge_range('I2:I3', "core_num/thread_num", merge_format)
+            ws.merge_range('J2:J3', "frame_size", merge_format)
+            ws.merge_range('K2:K3', "burst_size", merge_format)
+            ws.merge_range('L2:L3', "total_ops", merge_format)
+            ws.merge_range('M1:M3', "status", merge_format)
+
+            format1 = wb.add_format({"bg_color": "#C6EFCE", "font_color": "#006100", "border": 1})
+            format2 = wb.add_format({"bg_color": "#FFC7CE", "font_color": "#9C0006"})
+            ws.conditional_format("B1:M3", {"type": "cell", "criteria": ">=", "value": 0 , 'format': format2})
+            condition = 'B5:M%s'%(5+len(df)-1)
+            ws.conditional_format(condition, {'type': 'no_blanks', 'format':format1})
+            ws.autofit()
+
+            wb.close()
         if self._perf_result:
             with open(
                 self.logger.log_path + "/" + "perf_cryptodev_result.json", "a"
@@ -175,12 +235,197 @@ class TestCryptoPerfCryptodevPerf(TestCase):
     def test_scheduler_zuc(self):
         self._run_crypto_perf_throughput()
 
+    # Marvell CN10K Testcases
+    def _crypto_func_cn10k(self):
+        """Functional tests Helper
+        Returns:
+           None
+        """
+        self._run_crypto_func()
+
+    def _crypto_perf_cn10k(self):
+        """Perf tests Helper function
+        Returns:
+           None
+        """
+        self._run_crypto_perf_throughput(expected="# ",
+                                         trim_whitespace=False)
+    def test_perf_mrvl_aes_cbc(self):
+        self._crypto_perf_cn10k()
+
+    def test_perf_mrvl_aes_gcm_encrypt(self):
+        self._crypto_perf_cn10k()
+
+    def test_perf_mrvl_aes_cbc_cipher_then_auth(self):
+        self._crypto_perf_cn10k()
+
+    def test_perf_mrvl_aes_sha2_256_cipher_then_auth(self):
+        self._crypto_perf_cn10k()
+
+    def test_perf_mrvl_zuc_eea3_cipher_only(self):
+        self._crypto_perf_cn10k()
+
+    def test_perf_mrvl_zuc_eia3_auth_only(self):
+        self._crypto_perf_cn10k()
+
+    def test_perf_mrvl_aes_gmac_auth_only(self):
+        self._crypto_perf_cn10k()
+
+    def test_perf_mrvl_null_cipher_only(self):
+        self._crypto_perf_cn10k()
+
+    def test_perf_mrvl_snow3g_uea2_cipher_only(self):
+        self._crypto_perf_cn10k()
+
+    def test_perf_mrvl_kasumi_f8_cipher_only(self):
+        self._crypto_perf_cn10k() #F
+
+    def test_perf_mrvl_snow3g_uia2_auth_only(self):
+        self._crypto_perf_cn10k()
+
+    def test_perf_mrvl_kasumi_f9_auth_only(self):
+        self._crypto_perf_cn10k()
+
+    def test_perf_mrvl_sha1_hmac_auth_only(self):
+        self._crypto_perf_cn10k()
+
+    def test_perf_mrvl_sha1_auth_only(self):
+        self._crypto_perf_cn10k()
+
+    def test_perf_mrvl_aes_ctr_cipher_then_auth(self):
+        self._crypto_perf_cn10k()
+
+    def test_perf_mrvl_aes_ctr_snow_3g_uia2_cipher_then_auth(self):
+        self._crypto_perf_cn10k()
+
+    def test_perf_mrvl_aes_cmac_cipher_then_auth(self):
+        self._crypto_perf_cn10k()
+
+    def test_perf_mrvl_3des_cbc_cipher_then_auth(self):
+        self._crypto_perf_cn10k()
+
+    def test_perf_mrvl_sha1_hmac_cipher_then_auth(self):
+        self._crypto_perf_cn10k()
+
+    def test_perf_mrvl_sha2_224_hmac_cipher_then_auth(self):
+        self._crypto_perf_cn10k()
+
+    def test_perf_mrvl_sha2_256_hmac_cipher_then_auth(self):
+        self._crypto_perf_cn10k()
+
+    def test_perf_mrvl_sha2_384_hmac_cipher_then_auth(self):
+        self._crypto_perf_cn10k()
+
+    def test_perf_mrvl_aes_ctr_snow_3g_uia2_cipher_then_auth(self):
+        self._crypto_perf_cn10k()
+
+    def test_perf_mrvl_aes_ctr_zuc_eia3_cipher_then_auth(self):
+        self._crypto_perf_cn10k()
+
+    def test_perf_mrvl_aes_ctr_aes_cmac_cipher_then_auth(self):
+        self._crypto_perf_cn10k()
+
+    def test_perf_mrvl_zuc_eea3_snow3g_uia2_cipher_then_auth(self):
+        self._crypto_perf_cn10k()
+
+    def test_perf_mrvl_zuc_eea3_zuc_eia3_cipher_then_auth(self):
+        self._crypto_perf_cn10k()
+
+    def test_perf_mrvl_zuc_eea3_aes_cmac_cipher_then_auth(self):
+        self._crypto_perf_cn10k()
+
+    def test_perf_mrvl_snow3g_uea2_snow3g_uia2_cipher_then_auth(self):
+        self._crypto_perf_cn10k()
+
+    def test_perf_mrvl_snow3g_uea2_zuc_eia3_cipher_then_auth(self):
+        self._crypto_perf_cn10k()
+
+    def test_perf_mrvl_snow3g_uea2_aes_cmac_cipher_then_auth(self):
+        self._crypto_perf_cn10k()
+
+    def test_perf_mrvl_md5_hmac_auth_only(self):
+        self._crypto_perf_cn10k()
+
+    def test_perf_mrvl_aes_ctr_cipher_only(self):
+        self._crypto_perf_cn10k()
+
+    def test_perf_mrvl_3des_cbc_cipher_only(self):
+        self._crypto_perf_cn10k()
+
+    def test_perf_mrvl_sha2_224_hmac_auth_only(self):
+        self._crypto_perf_cn10k()
+
+    def test_perf_mrvl_sha2_256_hmac_auth_only(self):
+        self._crypto_perf_cn10k()
+
+    def test_perf_mrvl_sha2_384_hmac_auth_only(self):
+        self._crypto_perf_cn10k()
+
+    def test_perf_mrvl_sha2_512_hmac_auth_only(self):
+        self._crypto_perf_cn10k()
+
+    def test_perf_mrvl_aes_xts__cipher_only(self):
+        self._crypto_perf_cn10k()
+
+    def test_perf_mrvl_des_cbc_cipher_only(self):
+        self._crypto_perf_cn10k()
+
+    def test_perf_mrvl_md5_auth_only(self):
+        self._crypto_perf_cn10k()
+
+    def test_perf_mrvl_sha512_auth_only(self):
+        self._crypto_perf_cn10k()
+
+    def test_perf_mrvl_sha384_auth_only(self):
+        self._crypto_perf_cn10k()
+
+    def test_perf_mrvl_sha256_auth_only(self):
+        self._crypto_perf_cn10k()
+
+    def test_perf_mrvl_sha224_auth_only(self):
+        self._crypto_perf_cn10k()
+
+    def test_perf_mrvl_snow3g_uea2_snow3g_uia2(self):
+        self._crypto_perf_cn10k()
+
+    def test_perf_mrvl_sha1_hmac_armv8(self):
+        self._crypto_perf_cn10k()
+
+    def test_perf_mrvl_sha2_hmac_armv8(self):
+        self._crypto_perf_cn10k()
+
+    def test_mrvl_ptest(self):
+        self._crypto_func_cn10k()
+
+    def test_mrvl_burst(self):
+        self._crypto_func_cn10k()
+
+    def test_mrvl_devtype(self):
+        self._crypto_func_cn10k()
+
+    def test_mrvl_crypto_sha1_hmac_armv8(self):
+        self._crypto_func_cn10k()
+
+    def test_mrvl_chacha20_poly1305_aead(self):
+        self._crypto_func_cn10k()
+
+    def test_mrvl_crypto_sha2_hmac_armv8(self):
+        self._crypto_func_cn10k()
+
+    def test_mrvl_buffer(self):
+        self._crypto_func_cn10k()
+
     # Private functions
     def _run_crypto_func(self):
+        """ Runs Crypto functional test.
+        Returns:
+            None
+        """
+
         if cc.is_test_skip(self):
             return
-
-        cores = ",".join(self.dut.get_core_list("1S/2C/1T"))
+        core_list = self.get_suite_cfg().get('core_list',"1S/2C/1T")
+        cores = ",".join(self.dut.get_core_list(core_list))
         config = {"l": cores}
         devices = self._get_crypto_device(1)
         if not devices:
@@ -206,12 +451,22 @@ class TestCryptoPerfCryptodevPerf(TestCase):
 
         out = self.dut.send_command(
             "cat %s/%s.txt" % (self.dut_file_dir, self.running_case), 30
-        )
-
+        ).strip()
         self.verify("Error" not in out, "Test function failed")
         self.verify("failed" not in out, "Test function failed")
-
-    def _run_crypto_perf(self):
+        assert (out != ""), "No output"
+
+    def _run_crypto_perf(self, **kwargs):
+        """ Runs Crypto Performance test.
+        Args:
+          **kwargs:
+              expected: send_expect match prompt
+              trim_whitespace: trime whitespace from command output
+        Returns:
+            None
+        """
+        expected = kwargs.get("expected", "#")
+        trim_whitespace = kwargs.get("trim_whitespace", True)
         if cc.is_test_skip(self):
             return "skip"
 
@@ -222,13 +477,14 @@ class TestCryptoPerfCryptodevPerf(TestCase):
             return "skip"
 
         eal_opt_str = cc.get_eal_opt_str(self, devices)
-        crypto_perf_opt_str = self._get_crypto_perf_opt_str()
+        crypto_perf_opt_str = self._get_crypto_perf_opt_str(**kwargs)
 
         cmd_str = cc.get_dpdk_app_cmd_str(
             self._app_path, eal_opt_str, crypto_perf_opt_str
         )
         try:
-            out = self.dut.send_expect(cmd_str, "#", 600)
+            out = self.dut.send_expect(cmd_str, expected, 600,
+                                       trim_whitespace=trim_whitespace)
         except Exception as ex:
             self.logger.error(ex)
             raise ex
@@ -237,25 +493,44 @@ class TestCryptoPerfCryptodevPerf(TestCase):
 
         return results
 
-    def _get_crypto_perf_opt_str(self, override_crypto_perf_opts={}):
+    def _get_crypto_perf_opt_str(self, **kwargs):
+        """get crypto perf app option string
+        args:
+            **kwargs:
+                override_crypto_perf_opts- Suite/Case specfic perf
+                app config to overwrite defaults
+        Returns:
+            crypto perf option string
+        """
+        override_crypto_perf_opts = kwargs.get("override_crypto_perf_opts", {})
         return cc.get_opt_str(
             self, self._default_crypto_perf_opts, override_crypto_perf_opts
         )
 
     def _parse_output(self, output):
         try:
+            dtype = self.get_case_cfg().get('devtype')
+            match_str = r"    lcore id|#lcore id"
             lines = output.split("\r\n")
             line_nb = len(lines)
             self.logger.debug("Total output lines: " + str(line_nb))
 
             for line_index in range(line_nb):
-                if lines[line_index].startswith("    lcore id"):
+                if re.match(match_str, lines[line_index]):
                     self.logger.debug("data output line from: " + str(line_index))
                     break
-            data_line = line_index - 1
+            if dtype == 'crypto_cn10k':
+                data_line = line_index + 2
+            else:
+                data_line = line_index - 1
+
+            if len(lines[data_line].split(","))>1:
+                pattern = re.compile(r',')
+            else:
+                pattern = re.compile(r'\s+')
 
             results = []
-            pattern = re.compile(r"\s+")
+
             for line in lines[data_line:-1]:
                 print(line)
                 result = {}
@@ -334,9 +609,15 @@ class TestCryptoPerfCryptodevPerf(TestCase):
             cpu_info[key] = value.strip()
         core, thread = 0, 0
         lcores = self.get_case_cfg()["l"].split(",")
+        if 'Core(s) per cluster' in out:
+            cl_soc1 = 'Core(s) per cluster'
+            cl_soc2 = 'Cluster(s)'
+        else:
+            cl_soc1 = 'Core(s) per socket'
+            cl_soc2 = 'Socket(s)'
         for lcore in lcores[1:]:
-            if int(lcore.strip()) < int(cpu_info["Core(s) per socket"]) * int(
-                cpu_info["Socket(s)"]
+            if int(lcore.strip()) < int(cpu_info[cl_soc1]) * int(
+                cpu_info[cl_soc2]
             ):
                 core += 1
                 thread += 1
@@ -362,6 +643,11 @@ class TestCryptoPerfCryptodevPerf(TestCase):
             dev = "crypto_snow3g"
         elif self.get_case_cfg()["devtype"] == "crypto_zuc":
             dev = "crypto_zuc"
+        elif self.get_case_cfg()["devtype"] == "crypto_cn10k":
+            dev = "crypto_cn10k"
+            vf = cc.get_qat_devices(self, cpm_num=1, num=num)
+            device["a"] = ' -a '.join(vf)
+            device["vdev"] = None
         elif self.get_case_cfg()["devtype"] == "crypto_scheduler":
             dev = "crypto_scheduler"
             w = cc.get_qat_devices(self, cpm_num=3, num=num * 3)
@@ -388,8 +674,8 @@ class TestCryptoPerfCryptodevPerf(TestCase):
 
         return device
 
-    def _run_crypto_perf_throughput(self):
-        results = self._run_crypto_perf()
+    def _run_crypto_perf_throughput(self, **kwargs):
+        results = self._run_crypto_perf(**kwargs)
         if results == "skip":
             return
         self.verify(results, "test results is none, Test Failed")
diff --git a/tests/cryptodev_common.py b/tests/cryptodev_common.py
index b550b468..91067b05 100644
--- a/tests/cryptodev_common.py
+++ b/tests/cryptodev_common.py
@@ -8,7 +8,9 @@ from nics.net_device import GetNicObj
 conf = SuiteConf("cryptodev_sample")
 
 
-def bind_qat_device(test_case, driver="igb_uio"):
+def bind_qat_device(test_case, driver="igb_uio", generate_vfs=False,
+                    vf_count=2, drvr_type='generic'):
+
     if driver == "vfio-pci":
         test_case.dut.send_expect("modprobe vfio", "#", 10)
         test_case.dut.send_expect("modprobe vfio-pci", "#", 10)
@@ -38,6 +40,8 @@ def bind_qat_device(test_case, driver="igb_uio"):
         devfun_id = addr_array[2]
         pf_port = GetNicObj(test_case.dut, domain_id, bus_id, devfun_id)
 
+        if generate_vfs:
+            pf_port.generate_sriov_vfs_linux(domain_id, bus_id, devfun_id, vf_count, drvr_type)
         sriov_vfs_pci = pf_port.get_sriov_vfs_pci()
         if not sriov_vfs_pci:
             raise Exception("can not get vf pci")
@@ -51,6 +55,11 @@ def bind_qat_device(test_case, driver="igb_uio"):
 
     test_case.dev = dev
 
+def bind_mrvl_devices(test_case, driver='vfio-pci', **kwargs):
+    pci_list = kwargs.get("pci_list").split()
+    for pci in pci_list:
+        test_case.dut.bind_eventdev_port(driver, pci)
+    return pci_list
 
 def get_qat_devices(test_case, cpm_num=None, num=1):
     if not cpm_num:
-- 
2.25.1


                 reply	other threads:[~2024-10-31 15:03 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20241031104322.3169217-1-gpalanethra@marvell.com \
    --to=gpalanethra@marvell.com \
    --cc=brajendra@marvell.com \
    --cc=dev@dpdk.org \
    --cc=njogarao@marvell.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).