From patchwork Thu Feb 22 11:02:19 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nithin Dabilpuram X-Patchwork-Id: 137014 X-Patchwork-Delegate: jerinj@marvell.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id C6DED43B74; Thu, 22 Feb 2024 12:02:46 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 89A5940281; Thu, 22 Feb 2024 12:02:46 +0100 (CET) Received: from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by mails.dpdk.org (Postfix) with ESMTP id BAA6C40267 for ; Thu, 22 Feb 2024 12:02:44 +0100 (CET) Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 41M9BW8h021919 for ; Thu, 22 Feb 2024 03:02:43 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding:content-type; s= pfpt0220; bh=V/zYhxcW/i/S3GVxKKrfvMjvya52B+pKbKmeRrwMyLc=; b=djs QqfusDF/Gr4POHZVnI6KdwOXvvGW1zQa8+jpkLIHna7nn7wFVDaiS4OR4PIk9fEf 3smD6rME5xXreyRKqX8hi4aCAyzDJpjgade0YygAcdWSzSVmMjgAxA3i3lCVL0oK 0mZzIZ/4n2qSH1upb9AbLI5XwkVVIkml3kheZgStpINKDw4wKwFX890OrVuFuaq+ f6Tkz7QX6vV5/xhQw2pDgn8BJqsLuvCDjivdE5+RulIovFih7XJjj0fSdt3dv/sN 1CpA+acSRfCxjNv+NS4TA+QaBMN6Wo5ddlj0796D3DIlP29kyfef03FgkJSkPyKE Yh4FrR1AfhCxEjoWgEg== Received: from dc5-exch02.marvell.com ([199.233.59.182]) by mx0a-0016f401.pphosted.com (PPS) with ESMTPS id 3we3dw89vt-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT) for ; Thu, 22 Feb 2024 03:02:43 -0800 (PST) Received: from DC5-EXCH02.marvell.com (10.69.176.39) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server (TLS) id 15.0.1497.48; Thu, 22 Feb 2024 03:02:41 -0800 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server id 15.0.1497.48 via Frontend Transport; Thu, 22 Feb 2024 03:02:41 -0800 Received: from hyd1588t430.caveonetworks.com (unknown [10.29.52.204]) by maili.marvell.com (Postfix) with ESMTP id 063013F71DD; Thu, 22 Feb 2024 03:02:39 -0800 (PST) From: Nithin Dabilpuram To: Nithin Dabilpuram , Kiran Kumar K , Sunil Kumar Kori , Satha Rao CC: Subject: [PATCH v4 01/14] common/cnxk: remove cn9k Inline IPsec FP opcode defines Date: Thu, 22 Feb 2024 16:32:19 +0530 Message-ID: <20240222110232.2342903-1-ndabilpuram@marvell.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240208085956.1741174-1-ndabilpuram@marvell.com> References: <20240208085956.1741174-1-ndabilpuram@marvell.com> MIME-Version: 1.0 X-Proofpoint-GUID: WLB5RPvzuVuVaIp1eJ4QGLvGUsnxfJVz X-Proofpoint-ORIG-GUID: WLB5RPvzuVuVaIp1eJ4QGLvGUsnxfJVz X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-02-22_09,2024-02-22_01,2023-05-22_02 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Since now Inline IPsec in cn9k is using same opcode as LA, remove the definitions of fast path opcode. Also fix devarg handling for ipsec_out_max_sa to allow 32-bit. Fixes: fe5846bcc076 ("net/cnxk: add devargs for min-max SPI") Signed-off-by: Nithin Dabilpuram --- drivers/common/cnxk/cnxk_security.c | 230 ------------------------- drivers/common/cnxk/cnxk_security.h | 12 -- drivers/common/cnxk/roc_ie_on.h | 60 ------- drivers/common/cnxk/roc_nix_inl.h | 50 +----- drivers/common/cnxk/version.map | 4 - drivers/net/cnxk/cnxk_ethdev_devargs.c | 2 +- 6 files changed, 3 insertions(+), 355 deletions(-) diff --git a/drivers/common/cnxk/cnxk_security.c b/drivers/common/cnxk/cnxk_security.c index 64c901a57a..bab015e3b3 100644 --- a/drivers/common/cnxk/cnxk_security.c +++ b/drivers/common/cnxk/cnxk_security.c @@ -574,236 +574,6 @@ cnxk_ot_ipsec_outb_sa_valid(struct roc_ot_ipsec_outb_sa *sa) return !!sa->w2.s.valid; } -static inline int -ipsec_xfrm_verify(struct rte_security_ipsec_xform *ipsec_xfrm, - struct rte_crypto_sym_xform *crypto_xfrm) -{ - if (crypto_xfrm->next == NULL) - return -EINVAL; - - if (ipsec_xfrm->direction == RTE_SECURITY_IPSEC_SA_DIR_INGRESS) { - if (crypto_xfrm->type != RTE_CRYPTO_SYM_XFORM_AUTH || - crypto_xfrm->next->type != RTE_CRYPTO_SYM_XFORM_CIPHER) - return -EINVAL; - } else { - if (crypto_xfrm->type != RTE_CRYPTO_SYM_XFORM_CIPHER || - crypto_xfrm->next->type != RTE_CRYPTO_SYM_XFORM_AUTH) - return -EINVAL; - } - - return 0; -} - -static int -onf_ipsec_sa_common_param_fill(struct roc_ie_onf_sa_ctl *ctl, uint8_t *salt, - uint8_t *cipher_key, uint8_t *hmac_opad_ipad, - struct rte_security_ipsec_xform *ipsec_xfrm, - struct rte_crypto_sym_xform *crypto_xfrm) -{ - struct rte_crypto_sym_xform *auth_xfrm, *cipher_xfrm; - int rc, length, auth_key_len; - const uint8_t *key = NULL; - uint8_t ccm_flag = 0; - - /* Set direction */ - switch (ipsec_xfrm->direction) { - case RTE_SECURITY_IPSEC_SA_DIR_INGRESS: - ctl->direction = ROC_IE_SA_DIR_INBOUND; - auth_xfrm = crypto_xfrm; - cipher_xfrm = crypto_xfrm->next; - break; - case RTE_SECURITY_IPSEC_SA_DIR_EGRESS: - ctl->direction = ROC_IE_SA_DIR_OUTBOUND; - cipher_xfrm = crypto_xfrm; - auth_xfrm = crypto_xfrm->next; - break; - default: - return -EINVAL; - } - - /* Set protocol - ESP vs AH */ - switch (ipsec_xfrm->proto) { - case RTE_SECURITY_IPSEC_SA_PROTO_ESP: - ctl->ipsec_proto = ROC_IE_SA_PROTOCOL_ESP; - break; - case RTE_SECURITY_IPSEC_SA_PROTO_AH: - return -ENOTSUP; - default: - return -EINVAL; - } - - /* Set mode - transport vs tunnel */ - switch (ipsec_xfrm->mode) { - case RTE_SECURITY_IPSEC_SA_MODE_TRANSPORT: - ctl->ipsec_mode = ROC_IE_SA_MODE_TRANSPORT; - break; - case RTE_SECURITY_IPSEC_SA_MODE_TUNNEL: - ctl->ipsec_mode = ROC_IE_SA_MODE_TUNNEL; - break; - default: - return -EINVAL; - } - - /* Set encryption algorithm */ - if (crypto_xfrm->type == RTE_CRYPTO_SYM_XFORM_AEAD) { - length = crypto_xfrm->aead.key.length; - - switch (crypto_xfrm->aead.algo) { - case RTE_CRYPTO_AEAD_AES_GCM: - ctl->enc_type = ROC_IE_ON_SA_ENC_AES_GCM; - ctl->auth_type = ROC_IE_ON_SA_AUTH_NULL; - memcpy(salt, &ipsec_xfrm->salt, 4); - key = crypto_xfrm->aead.key.data; - break; - case RTE_CRYPTO_AEAD_AES_CCM: - ctl->enc_type = ROC_IE_ON_SA_ENC_AES_CCM; - ctl->auth_type = ROC_IE_ON_SA_AUTH_NULL; - ccm_flag = 0x07 & ~ROC_CPT_AES_CCM_CTR_LEN; - *salt = ccm_flag; - memcpy(PLT_PTR_ADD(salt, 1), &ipsec_xfrm->salt, 3); - key = crypto_xfrm->aead.key.data; - break; - default: - return -ENOTSUP; - } - - } else { - rc = ipsec_xfrm_verify(ipsec_xfrm, crypto_xfrm); - if (rc) - return rc; - - switch (cipher_xfrm->cipher.algo) { - case RTE_CRYPTO_CIPHER_AES_CBC: - ctl->enc_type = ROC_IE_ON_SA_ENC_AES_CBC; - break; - case RTE_CRYPTO_CIPHER_AES_CTR: - ctl->enc_type = ROC_IE_ON_SA_ENC_AES_CTR; - break; - default: - return -ENOTSUP; - } - - switch (auth_xfrm->auth.algo) { - case RTE_CRYPTO_AUTH_SHA1_HMAC: - ctl->auth_type = ROC_IE_ON_SA_AUTH_SHA1; - break; - default: - return -ENOTSUP; - } - auth_key_len = auth_xfrm->auth.key.length; - if (auth_key_len < 20 || auth_key_len > 64) - return -ENOTSUP; - - key = cipher_xfrm->cipher.key.data; - length = cipher_xfrm->cipher.key.length; - - roc_se_hmac_opad_ipad_gen(ctl->auth_type, auth_xfrm->auth.key.data, - auth_xfrm->auth.key.length, hmac_opad_ipad, ROC_SE_IPSEC); - } - - switch (length) { - case ROC_CPT_AES128_KEY_LEN: - ctl->aes_key_len = ROC_IE_SA_AES_KEY_LEN_128; - break; - case ROC_CPT_AES192_KEY_LEN: - ctl->aes_key_len = ROC_IE_SA_AES_KEY_LEN_192; - break; - case ROC_CPT_AES256_KEY_LEN: - ctl->aes_key_len = ROC_IE_SA_AES_KEY_LEN_256; - break; - default: - return -EINVAL; - } - - memcpy(cipher_key, key, length); - - if (ipsec_xfrm->options.esn) - ctl->esn_en = 1; - - ctl->spi = rte_cpu_to_be_32(ipsec_xfrm->spi); - return 0; -} - -int -cnxk_onf_ipsec_inb_sa_fill(struct roc_onf_ipsec_inb_sa *sa, - struct rte_security_ipsec_xform *ipsec_xfrm, - struct rte_crypto_sym_xform *crypto_xfrm) -{ - struct roc_ie_onf_sa_ctl *ctl = &sa->ctl; - int rc; - - rc = onf_ipsec_sa_common_param_fill(ctl, sa->nonce, sa->cipher_key, - sa->hmac_key, ipsec_xfrm, - crypto_xfrm); - if (rc) - return rc; - - rte_wmb(); - - /* Enable SA */ - ctl->valid = 1; - return 0; -} - -int -cnxk_onf_ipsec_outb_sa_fill(struct roc_onf_ipsec_outb_sa *sa, - struct rte_security_ipsec_xform *ipsec_xfrm, - struct rte_crypto_sym_xform *crypto_xfrm) -{ - struct rte_security_ipsec_tunnel_param *tunnel = &ipsec_xfrm->tunnel; - struct roc_ie_onf_sa_ctl *ctl = &sa->ctl; - int rc; - - /* Fill common params */ - rc = onf_ipsec_sa_common_param_fill(ctl, sa->nonce, sa->cipher_key, - sa->hmac_key, ipsec_xfrm, - crypto_xfrm); - if (rc) - return rc; - - if (ipsec_xfrm->mode != RTE_SECURITY_IPSEC_SA_MODE_TUNNEL) - goto skip_tunnel_info; - - /* Tunnel header info */ - switch (tunnel->type) { - case RTE_SECURITY_IPSEC_TUNNEL_IPV4: - memcpy(&sa->ip_src, &tunnel->ipv4.src_ip, - sizeof(struct in_addr)); - memcpy(&sa->ip_dst, &tunnel->ipv4.dst_ip, - sizeof(struct in_addr)); - break; - case RTE_SECURITY_IPSEC_TUNNEL_IPV6: - return -ENOTSUP; - default: - return -EINVAL; - } - - /* Update udp encap ports */ - if (ipsec_xfrm->options.udp_encap == 1) { - sa->udp_src = 4500; - sa->udp_dst = 4500; - } - -skip_tunnel_info: - rte_wmb(); - - /* Enable SA */ - ctl->valid = 1; - return 0; -} - -bool -cnxk_onf_ipsec_inb_sa_valid(struct roc_onf_ipsec_inb_sa *sa) -{ - return !!sa->ctl.valid; -} - -bool -cnxk_onf_ipsec_outb_sa_valid(struct roc_onf_ipsec_outb_sa *sa) -{ - return !!sa->ctl.valid; -} - uint8_t cnxk_ipsec_ivlen_get(enum rte_crypto_cipher_algorithm c_algo, enum rte_crypto_auth_algorithm a_algo, diff --git a/drivers/common/cnxk/cnxk_security.h b/drivers/common/cnxk/cnxk_security.h index b323b8b757..19eb9bb03d 100644 --- a/drivers/common/cnxk/cnxk_security.h +++ b/drivers/common/cnxk/cnxk_security.h @@ -48,18 +48,6 @@ cnxk_ot_ipsec_outb_sa_fill(struct roc_ot_ipsec_outb_sa *sa, bool __roc_api cnxk_ot_ipsec_inb_sa_valid(struct roc_ot_ipsec_inb_sa *sa); bool __roc_api cnxk_ot_ipsec_outb_sa_valid(struct roc_ot_ipsec_outb_sa *sa); -/* [CN9K, CN10K) */ -int __roc_api -cnxk_onf_ipsec_inb_sa_fill(struct roc_onf_ipsec_inb_sa *sa, - struct rte_security_ipsec_xform *ipsec_xfrm, - struct rte_crypto_sym_xform *crypto_xfrm); -int __roc_api -cnxk_onf_ipsec_outb_sa_fill(struct roc_onf_ipsec_outb_sa *sa, - struct rte_security_ipsec_xform *ipsec_xfrm, - struct rte_crypto_sym_xform *crypto_xfrm); -bool __roc_api cnxk_onf_ipsec_inb_sa_valid(struct roc_onf_ipsec_inb_sa *sa); -bool __roc_api cnxk_onf_ipsec_outb_sa_valid(struct roc_onf_ipsec_outb_sa *sa); - /* [CN9K] */ int __roc_api cnxk_on_ipsec_inb_sa_create(struct rte_security_ipsec_xform *ipsec, struct rte_crypto_sym_xform *crypto_xform, diff --git a/drivers/common/cnxk/roc_ie_on.h b/drivers/common/cnxk/roc_ie_on.h index 9933ffa148..11c995e9d1 100644 --- a/drivers/common/cnxk/roc_ie_on.h +++ b/drivers/common/cnxk/roc_ie_on.h @@ -269,66 +269,6 @@ struct roc_ie_on_inb_sa { #define ROC_IE_ON_UCC_L2_HDR_INFO_ERR 0xCF #define ROC_IE_ON_UCC_L2_HDR_LEN_ERR 0xE0 -struct roc_ie_onf_sa_ctl { - uint32_t spi; - uint64_t exp_proto_inter_frag : 8; - uint64_t rsvd_41_40 : 2; - /* Disable SPI, SEQ data in RPTR for Inbound inline */ - uint64_t spi_seq_dis : 1; - uint64_t esn_en : 1; - uint64_t rsvd_44_45 : 2; - uint64_t encap_type : 2; - uint64_t enc_type : 3; - uint64_t rsvd_48 : 1; - uint64_t auth_type : 4; - uint64_t valid : 1; - uint64_t direction : 1; - uint64_t outer_ip_ver : 1; - uint64_t inner_ip_ver : 1; - uint64_t ipsec_mode : 1; - uint64_t ipsec_proto : 1; - uint64_t aes_key_len : 2; -}; - -struct roc_onf_ipsec_outb_sa { - /* w0 */ - struct roc_ie_onf_sa_ctl ctl; - - /* w1 */ - uint8_t nonce[4]; - uint16_t udp_src; - uint16_t udp_dst; - - /* w2 */ - uint32_t ip_src; - uint32_t ip_dst; - - /* w3-w6 */ - uint8_t cipher_key[32]; - - /* w7-w12 */ - uint8_t hmac_key[48]; -}; - -struct roc_onf_ipsec_inb_sa { - /* w0 */ - struct roc_ie_onf_sa_ctl ctl; - - /* w1 */ - uint8_t nonce[4]; /* Only for AES-GCM */ - uint32_t unused; - - /* w2 */ - uint32_t esn_hi; - uint32_t esn_low; - - /* w3-w6 */ - uint8_t cipher_key[32]; - - /* w7-w12 */ - uint8_t hmac_key[48]; -}; - #define ROC_ONF_IPSEC_INB_MAX_L2_SZ 32UL #define ROC_ONF_IPSEC_OUTB_MAX_L2_SZ 30UL #define ROC_ONF_IPSEC_OUTB_MAX_L2_INFO_SZ (ROC_ONF_IPSEC_OUTB_MAX_L2_SZ + 2) diff --git a/drivers/common/cnxk/roc_nix_inl.h b/drivers/common/cnxk/roc_nix_inl.h index ab1e9c0f98..f5ce26f03f 100644 --- a/drivers/common/cnxk/roc_nix_inl.h +++ b/drivers/common/cnxk/roc_nix_inl.h @@ -4,24 +4,6 @@ #ifndef _ROC_NIX_INL_H_ #define _ROC_NIX_INL_H_ -/* ONF INB HW area */ -#define ROC_NIX_INL_ONF_IPSEC_INB_HW_SZ \ - PLT_ALIGN(sizeof(struct roc_onf_ipsec_inb_sa), ROC_ALIGN) -/* ONF INB SW reserved area */ -#define ROC_NIX_INL_ONF_IPSEC_INB_SW_RSVD 384 -#define ROC_NIX_INL_ONF_IPSEC_INB_SA_SZ \ - (ROC_NIX_INL_ONF_IPSEC_INB_HW_SZ + ROC_NIX_INL_ONF_IPSEC_INB_SW_RSVD) -#define ROC_NIX_INL_ONF_IPSEC_INB_SA_SZ_LOG2 9 - -/* ONF OUTB HW area */ -#define ROC_NIX_INL_ONF_IPSEC_OUTB_HW_SZ \ - PLT_ALIGN(sizeof(struct roc_onf_ipsec_outb_sa), ROC_ALIGN) -/* ONF OUTB SW reserved area */ -#define ROC_NIX_INL_ONF_IPSEC_OUTB_SW_RSVD 128 -#define ROC_NIX_INL_ONF_IPSEC_OUTB_SA_SZ \ - (ROC_NIX_INL_ONF_IPSEC_OUTB_HW_SZ + ROC_NIX_INL_ONF_IPSEC_OUTB_SW_RSVD) -#define ROC_NIX_INL_ONF_IPSEC_OUTB_SA_SZ_LOG2 8 - /* ON INB HW area */ #define ROC_NIX_INL_ON_IPSEC_INB_HW_SZ \ PLT_ALIGN(sizeof(struct roc_ie_on_inb_sa), ROC_ALIGN) @@ -31,10 +13,10 @@ (ROC_NIX_INL_ON_IPSEC_INB_HW_SZ + ROC_NIX_INL_ON_IPSEC_INB_SW_RSVD) #define ROC_NIX_INL_ON_IPSEC_INB_SA_SZ_LOG2 10 -/* ONF OUTB HW area */ +/* ON OUTB HW area */ #define ROC_NIX_INL_ON_IPSEC_OUTB_HW_SZ \ PLT_ALIGN(sizeof(struct roc_ie_on_outb_sa), ROC_ALIGN) -/* ONF OUTB SW reserved area */ +/* ON OUTB SW reserved area */ #define ROC_NIX_INL_ON_IPSEC_OUTB_SW_RSVD 256 #define ROC_NIX_INL_ON_IPSEC_OUTB_SA_SZ \ (ROC_NIX_INL_ON_IPSEC_OUTB_HW_SZ + ROC_NIX_INL_ON_IPSEC_OUTB_SW_RSVD) @@ -86,34 +68,6 @@ roc_nix_inl_on_ipsec_outb_sa_sw_rsvd(void *sa) return PLT_PTR_ADD(sa, ROC_NIX_INL_ON_IPSEC_OUTB_HW_SZ); } -static inline struct roc_onf_ipsec_inb_sa * -roc_nix_inl_onf_ipsec_inb_sa(uintptr_t base, uint64_t idx) -{ - uint64_t off = idx << ROC_NIX_INL_ONF_IPSEC_INB_SA_SZ_LOG2; - - return PLT_PTR_ADD(base, off); -} - -static inline struct roc_onf_ipsec_outb_sa * -roc_nix_inl_onf_ipsec_outb_sa(uintptr_t base, uint64_t idx) -{ - uint64_t off = idx << ROC_NIX_INL_ONF_IPSEC_OUTB_SA_SZ_LOG2; - - return PLT_PTR_ADD(base, off); -} - -static inline void * -roc_nix_inl_onf_ipsec_inb_sa_sw_rsvd(void *sa) -{ - return PLT_PTR_ADD(sa, ROC_NIX_INL_ONF_IPSEC_INB_HW_SZ); -} - -static inline void * -roc_nix_inl_onf_ipsec_outb_sa_sw_rsvd(void *sa) -{ - return PLT_PTR_ADD(sa, ROC_NIX_INL_ONF_IPSEC_OUTB_HW_SZ); -} - /* Inline device SSO Work callback */ typedef void (*roc_nix_inl_sso_work_cb_t)(uint64_t *gw, void *args, uint32_t soft_exp_event); diff --git a/drivers/common/cnxk/version.map b/drivers/common/cnxk/version.map index 4981d42ab7..a7402d9941 100644 --- a/drivers/common/cnxk/version.map +++ b/drivers/common/cnxk/version.map @@ -17,10 +17,6 @@ INTERNAL { cnxk_logtype_sso; cnxk_logtype_tim; cnxk_logtype_tm; - cnxk_onf_ipsec_inb_sa_fill; - cnxk_onf_ipsec_outb_sa_fill; - cnxk_onf_ipsec_inb_sa_valid; - cnxk_onf_ipsec_outb_sa_valid; cnxk_ot_ipsec_inb_sa_fill; cnxk_ot_ipsec_outb_sa_fill; cnxk_ot_ipsec_inb_sa_valid; diff --git a/drivers/net/cnxk/cnxk_ethdev_devargs.c b/drivers/net/cnxk/cnxk_ethdev_devargs.c index 8e862be933..a0e9300cff 100644 --- a/drivers/net/cnxk/cnxk_ethdev_devargs.c +++ b/drivers/net/cnxk/cnxk_ethdev_devargs.c @@ -75,7 +75,7 @@ parse_ipsec_out_max_sa(const char *key, const char *value, void *extra_args) if (errno) val = 0; - *(uint16_t *)extra_args = val; + *(uint32_t *)extra_args = val; return 0; } From patchwork Thu Feb 22 11:02:20 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nithin Dabilpuram X-Patchwork-Id: 137015 X-Patchwork-Delegate: jerinj@marvell.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 2278343B74; Thu, 22 Feb 2024 12:02:52 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id C6BB8406B8; Thu, 22 Feb 2024 12:02:49 +0100 (CET) Received: from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by mails.dpdk.org (Postfix) with ESMTP id 1E255402ED for ; Thu, 22 Feb 2024 12:02:46 +0100 (CET) Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 41M9BLvO021854 for ; Thu, 22 Feb 2024 03:02:46 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding:content-type; s= pfpt0220; bh=oUKF2ZqHdb2zjdqkaeh9WtCsqqtl0bc4aqXWJE7rERE=; b=aql L/BRfg/3pIUGT4cuSyIZq2mMeVLxFWRpnKzSA7fv6VXUCE1G4hc+Vym4FcQU28tm m1AvTL6icSxmsNiNqEdjz257HJF5tb2A5OhHu7oz0u6TRRp45nXDCAfjmq/v5ML8 UvsJNEuxXlq46BwuCdHhFoi5aYNBWbQ4wIuM2al7z3Uwn/zE5Zb+pYpmS0AyJQSy kMjCCxbSd0NyrFr9d47VjVFWlD9rxZrtKamOtAxuYwO/jrpa/BF6Y8yeAR0RPT2I M2pomlIWNAvso5vT4CMrL+kms9mrFqlsfLe2S/61z7KBgSIUv+IQA98jUSHiE8QG rJt+pUAub7Kt+zlF/cg== Received: from dc5-exch02.marvell.com ([199.233.59.182]) by mx0a-0016f401.pphosted.com (PPS) with ESMTPS id 3we3dw89vy-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT) for ; Thu, 22 Feb 2024 03:02:45 -0800 (PST) Received: from DC5-EXCH02.marvell.com (10.69.176.39) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server (TLS) id 15.0.1497.48; Thu, 22 Feb 2024 03:02:44 -0800 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server id 15.0.1497.48 via Frontend Transport; Thu, 22 Feb 2024 03:02:44 -0800 Received: from hyd1588t430.caveonetworks.com (unknown [10.29.52.204]) by maili.marvell.com (Postfix) with ESMTP id 5F5D95B693B; Thu, 22 Feb 2024 03:02:42 -0800 (PST) From: Nithin Dabilpuram To: Nithin Dabilpuram , Kiran Kumar K , Sunil Kumar Kori , Satha Rao CC: Subject: [PATCH v4 02/14] net/cnxk: add IPsec SA defines for PMD API Date: Thu, 22 Feb 2024 16:32:20 +0530 Message-ID: <20240222110232.2342903-2-ndabilpuram@marvell.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240222110232.2342903-1-ndabilpuram@marvell.com> References: <20240208085956.1741174-1-ndabilpuram@marvell.com> <20240222110232.2342903-1-ndabilpuram@marvell.com> MIME-Version: 1.0 X-Proofpoint-GUID: yqPRpI_PhWcXCZABl9Y0ra5TNaSoLtvB X-Proofpoint-ORIG-GUID: yqPRpI_PhWcXCZABl9Y0ra5TNaSoLtvB X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-02-22_09,2024-02-22_01,2023-05-22_02 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Define inbound and outbound IPsec data type for PMD API's rte_pmd_cnxk_hw_sa_read() and rte_pmd_cnxk_hw_sa_write(). Signed-off-by: Nithin Dabilpuram --- drivers/net/cnxk/cn10k_ethdev_sec.c | 18 +- drivers/net/cnxk/rte_pmd_cnxk.h | 397 +++++++++++++++++++++++++++- 2 files changed, 411 insertions(+), 4 deletions(-) diff --git a/drivers/net/cnxk/cn10k_ethdev_sec.c b/drivers/net/cnxk/cn10k_ethdev_sec.c index 575d0fabd5..05ec49d981 100644 --- a/drivers/net/cnxk/cn10k_ethdev_sec.c +++ b/drivers/net/cnxk/cn10k_ethdev_sec.c @@ -14,6 +14,20 @@ #include #include +PLT_STATIC_ASSERT(offsetof(struct rte_pmd_cnxk_ipsec_inb_sa, ctx.ar_winbits) == + offsetof(struct roc_ot_ipsec_inb_sa, ctx.ar_winbits)); + +PLT_STATIC_ASSERT(offsetof(struct rte_pmd_cnxk_ipsec_outb_sa, ctx.mib_pkts) == + offsetof(struct roc_ot_ipsec_outb_sa, ctx.mib_pkts)); + +PLT_STATIC_ASSERT(RTE_PMD_CNXK_CTX_MAX_CKEY_LEN == ROC_CTX_MAX_CKEY_LEN); +PLT_STATIC_ASSERT(RTE_PMD_CNXK_CTX_MAX_OPAD_IPAD_LEN == RTE_PMD_CNXK_CTX_MAX_OPAD_IPAD_LEN); + +PLT_STATIC_ASSERT(RTE_PMD_CNXK_AR_WIN_SIZE_MIN == ROC_AR_WIN_SIZE_MIN); +PLT_STATIC_ASSERT(RTE_PMD_CNXK_AR_WIN_SIZE_MAX == ROC_AR_WIN_SIZE_MAX); +PLT_STATIC_ASSERT(RTE_PMD_CNXK_LOG_MIN_AR_WIN_SIZE_M1 == ROC_LOG_MIN_AR_WIN_SIZE_M1); +PLT_STATIC_ASSERT(RTE_PMD_CNXK_AR_WINBITS_SZ == ROC_AR_WINBITS_SZ); + static struct rte_cryptodev_capabilities cn10k_eth_sec_crypto_caps[] = { { /* AES GCM */ .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, @@ -1143,7 +1157,7 @@ cn10k_eth_sec_session_update(void *device, struct rte_security_session *sess, int rte_pmd_cnxk_hw_sa_read(void *device, struct rte_security_session *sess, - void *data, uint32_t len) + union rte_pmd_cnxk_ipsec_hw_sa *data, uint32_t len) { struct rte_eth_dev *eth_dev = (struct rte_eth_dev *)device; struct cnxk_eth_dev *dev = cnxk_eth_pmd_priv(eth_dev); @@ -1166,7 +1180,7 @@ rte_pmd_cnxk_hw_sa_read(void *device, struct rte_security_session *sess, int rte_pmd_cnxk_hw_sa_write(void *device, struct rte_security_session *sess, - void *data, uint32_t len) + union rte_pmd_cnxk_ipsec_hw_sa *data, uint32_t len) { struct rte_eth_dev *eth_dev = (struct rte_eth_dev *)device; struct cnxk_eth_dev *dev = cnxk_eth_pmd_priv(eth_dev); diff --git a/drivers/net/cnxk/rte_pmd_cnxk.h b/drivers/net/cnxk/rte_pmd_cnxk.h index 7827c33ac9..43f2a7ed9b 100644 --- a/drivers/net/cnxk/rte_pmd_cnxk.h +++ b/drivers/net/cnxk/rte_pmd_cnxk.h @@ -60,6 +60,399 @@ struct rte_pmd_cnxk_sec_action { enum rte_pmd_cnxk_sec_action_alg alg; }; +#define RTE_PMD_CNXK_CTX_MAX_CKEY_LEN 32 +#define RTE_PMD_CNXK_CTX_MAX_OPAD_IPAD_LEN 128 + +/** Anti reply window size supported */ +#define RTE_PMD_CNXK_AR_WIN_SIZE_MIN 64 +#define RTE_PMD_CNXK_AR_WIN_SIZE_MAX 4096 +#define RTE_PMD_CNXK_LOG_MIN_AR_WIN_SIZE_M1 5 + +/** u64 array size to fit anti replay window bits */ +#define RTE_PMD_CNXK_AR_WINBITS_SZ (RTE_ALIGN_CEIL(RTE_PMD_CNXK_AR_WIN_SIZE_MAX, 64) / 64) + +/** Outer header info for Inbound or Outbound */ +union rte_pmd_cnxk_ipsec_outer_ip_hdr { + struct { + /** IPv4 destination */ + uint32_t dst_addr; + /** IPv4 source */ + uint32_t src_addr; + } ipv4; + struct { + /** IPv6 source */ + uint8_t src_addr[16]; + /** IPv6 destination */ + uint8_t dst_addr[16]; + } ipv6; +}; + +/** Inbound IPsec context update region */ +struct rte_pmd_cnxk_ipsec_inb_ctx_update_reg { + /** Highest sequence number received */ + uint64_t ar_base; + /** Valid bit for 64-bit words of replay window */ + uint64_t ar_valid_mask; + /** Hard life for SA */ + uint64_t hard_life; + /** Soft life for SA */ + uint64_t soft_life; + /** MIB octets */ + uint64_t mib_octs; + /** MIB packets */ + uint64_t mib_pkts; + /** AR window bits */ + uint64_t ar_winbits[RTE_PMD_CNXK_AR_WINBITS_SZ]; +}; + +/** Outbound IPsec IV data */ +union rte_pmd_cnxk_ipsec_outb_iv { + uint64_t u64[2]; + /** IV debug - 16B*/ + uint8_t iv_dbg[16]; + struct { + /** IV debug - 8B */ + uint8_t iv_dbg1[4]; + /** Salt */ + uint8_t salt[4]; + + uint32_t rsvd; + /** IV debug - 8B */ + uint8_t iv_dbg2[4]; + } s; +}; + +/** Outbound IPsec context update region */ +struct rte_pmd_cnxk_ipsec_outb_ctx_update_reg { + union { + struct { + uint64_t reserved_0_2 : 3; + uint64_t address : 57; + uint64_t mode : 4; + } s; + uint64_t u64; + } err_ctl; + + uint64_t esn_val; + uint64_t hard_life; + uint64_t soft_life; + uint64_t mib_octs; + uint64_t mib_pkts; +}; + +/** + * Inbound IPsec SA + */ +struct rte_pmd_cnxk_ipsec_inb_sa { + /** Word0 */ + union { + struct { + /** AR window size */ + uint64_t ar_win : 3; + /** Hard life enable */ + uint64_t hard_life_dec : 1; + /** Soft life enable */ + uint64_t soft_life_dec : 1; + + /** Count global octets */ + uint64_t count_glb_octets : 1; + /** Count global pkts */ + uint64_t count_glb_pkts : 1; + /** Count bytes */ + uint64_t count_mib_bytes : 1; + + /** Count pkts */ + uint64_t count_mib_pkts : 1; + /** HW context offset */ + uint64_t hw_ctx_off : 7; + + /** Context ID */ + uint64_t ctx_id : 16; + + /** Original packet free absolute */ + uint64_t orig_pkt_fabs : 1; + /** Original packet free */ + uint64_t orig_pkt_free : 1; + /** PKIND for second pass */ + uint64_t pkind : 6; + + uint64_t rsvd0 : 1; + /** Ether type overwrite */ + uint64_t et_ovrwr : 1; + /** Packet output type */ + uint64_t pkt_output : 2; + /** Packet format type */ + uint64_t pkt_format : 1; + /** Defrag option */ + uint64_t defrag_opt : 2; + /** Reserved for X2P dest */ + uint64_t x2p_dst : 1; + + /** Context push size */ + uint64_t ctx_push_size : 7; + uint64_t rsvd1 : 1; + + /** Context header size */ + uint64_t ctx_hdr_size : 2; + /** AOP enable */ + uint64_t aop_valid : 1; + uint64_t rsvd2 : 1; + /** Context size */ + uint64_t ctx_size : 4; + } s; + uint64_t u64; + } w0; + + /** Word1 */ + union { + struct { + /** Original packet aura */ + uint64_t orig_pkt_aura : 20; + uint64_t rsvd3 : 4; + /** Original packet free offset */ + uint64_t orig_pkt_foff : 8; + /** SA cookie */ + uint64_t cookie : 32; + } s; + uint64_t u64; + } w1; + + /** Word 2 */ + union { + struct { + /** SA valid */ + uint64_t valid : 1; + /** SA direction */ + uint64_t dir : 1; + uint64_t rsvd11 : 1; + uint64_t rsvd4 : 1; + /** IPsec mode */ + uint64_t ipsec_mode : 1; + /** IPsec protocol */ + uint64_t ipsec_protocol : 1; + /** AES key length */ + uint64_t aes_key_len : 2; + + /** Encryption algo */ + uint64_t enc_type : 3; + /** Soft life and hard life unit */ + uint64_t life_unit : 1; + /** Authentication algo */ + uint64_t auth_type : 4; + + /** Encapsulation type */ + uint64_t encap_type : 2; + /** Ether type override enable */ + uint64_t et_ovrwr_ddr_en : 1; + /** ESN enable */ + uint64_t esn_en : 1; + /** Transport mode L4 checksum incrementally update */ + uint64_t tport_l4_incr_csum : 1; + /** Outer IP header verification */ + uint64_t ip_hdr_verify : 2; + /** UDP enacapsulation ports verification */ + uint64_t udp_ports_verify : 1; + + /** Return 64B of L2/L3 header on error */ + uint64_t l3hdr_on_err : 1; + uint64_t rsvd6 : 6; + uint64_t rsvd12 : 1; + + /** SPI */ + uint64_t spi : 32; + } s; + uint64_t u64; + } w2; + + /** Word3 */ + uint64_t rsvd7; + + /** Word4 - Word7 */ + uint8_t cipher_key[RTE_PMD_CNXK_CTX_MAX_CKEY_LEN]; + + /** Word8 - Word9 */ + union { + struct { + uint32_t rsvd8; + /** IV salt */ + uint8_t salt[4]; + } s; + uint64_t u64; + } w8; + uint64_t rsvd9; + + /** Word10 */ + union { + struct { + uint64_t rsvd10 : 32; + /** UDP encapsulation source port */ + uint64_t udp_src_port : 16; + /** UDP encapsulation destination port */ + uint64_t udp_dst_port : 16; + } s; + uint64_t u64; + } w10; + + /** Word11 - Word14 */ + union rte_pmd_cnxk_ipsec_outer_ip_hdr outer_hdr; + + /** Word15 - Word30 */ + uint8_t hmac_opad_ipad[RTE_PMD_CNXK_CTX_MAX_OPAD_IPAD_LEN]; + + /** Word31 - Word100 */ + struct rte_pmd_cnxk_ipsec_inb_ctx_update_reg ctx; +}; + +/** + * Outbound IPsec SA + */ +struct rte_pmd_cnxk_ipsec_outb_sa { + /** Word0 */ + union { + struct { + /** ESN enable */ + uint64_t esn_en : 1; + /** IP ID generation type */ + uint64_t ip_id : 1; + uint64_t rsvd0 : 1; + /** Hard life enable */ + uint64_t hard_life_dec : 1; + /** Soft life enable */ + uint64_t soft_life_dec : 1; + + /** Count global octets */ + uint64_t count_glb_octets : 1; + /** Count global pkts */ + uint64_t count_glb_pkts : 1; + /** Count bytes */ + uint64_t count_mib_bytes : 1; + + /** Count pkts */ + uint64_t count_mib_pkts : 1; + /** HW context offset */ + uint64_t hw_ctx_off : 7; + + /** Context ID */ + uint64_t ctx_id : 16; + uint64_t rsvd1 : 16; + + /** Context push size */ + uint64_t ctx_push_size : 7; + uint64_t rsvd2 : 1; + + /** Context header size */ + uint64_t ctx_hdr_size : 2; + /** AOP enable */ + uint64_t aop_valid : 1; + uint64_t rsvd3 : 1; + /** Context size */ + uint64_t ctx_size : 4; + } s; + uint64_t u64; + } w0; + + /** Word1 */ + union { + struct { + uint64_t rsvd4 : 32; + /** SA cookie */ + uint64_t cookie : 32; + } s; + uint64_t u64; + } w1; + + /** Word 2 */ + union { + struct { + /** SA valid */ + uint64_t valid : 1; + /** SA direction */ + uint64_t dir : 1; + uint64_t rsvd11 : 1; + uint64_t rsvd5 : 1; + /** IPsec mode */ + uint64_t ipsec_mode : 1; + /** IPsec protocol */ + uint64_t ipsec_protocol : 1; + + /** AES key length */ + uint64_t aes_key_len : 2; + + /** Encryption algo */ + uint64_t enc_type : 3; + /** Soft life and hard life unit */ + uint64_t life_unit : 1; + /** Authentication algo */ + uint64_t auth_type : 4; + + /** Encapsulation type */ + uint64_t encap_type : 2; + /** DF source */ + uint64_t ipv4_df_src_or_ipv6_flw_lbl_src : 1; + /** DSCP source */ + uint64_t dscp_src : 1; + /** IV source */ + uint64_t iv_src : 2; + /** IPID value in outer header */ + uint64_t ipid_gen : 1; + uint64_t rsvd6 : 1; + + uint64_t rsvd7 : 7; + uint64_t rsvd12 : 1; + + /** SPI */ + uint64_t spi : 32; + } s; + uint64_t u64; + } w2; + + /** Word3 */ + uint64_t rsvd8; + + /** Word4 - Word7 */ + uint8_t cipher_key[RTE_PMD_CNXK_CTX_MAX_CKEY_LEN]; + + /** Word8 - Word9 */ + union rte_pmd_cnxk_ipsec_outb_iv iv; + + /** Word10 */ + union { + struct { + uint64_t rsvd9 : 4; + /** Outer header IPv4 DF or IPv6 flow label */ + uint64_t ipv4_df_or_ipv6_flw_lbl : 20; + + /** DSCP for outer header */ + uint64_t dscp : 6; + uint64_t rsvd10 : 2; + + /** UDP encapsulation destination port */ + uint64_t udp_dst_port : 16; + + /** UDP encapsulation source port */ + uint64_t udp_src_port : 16; + } s; + uint64_t u64; + } w10; + + /** Word11 - Word14 */ + union rte_pmd_cnxk_ipsec_outer_ip_hdr outer_hdr; + + /** Word15 - Word30 */ + uint8_t hmac_opad_ipad[RTE_PMD_CNXK_CTX_MAX_OPAD_IPAD_LEN]; + + /** Word31 - Word36 */ + struct rte_pmd_cnxk_ipsec_outb_ctx_update_reg ctx; +}; + +/** Inbound/Outbound IPsec SA */ +union rte_pmd_cnxk_ipsec_hw_sa { + /** Inbound SA */ + struct rte_pmd_cnxk_ipsec_inb_sa inb; + /** Outbound SA */ + struct rte_pmd_cnxk_ipsec_outb_sa outb; +}; + /** * Read HW SA context from session. * @@ -77,7 +470,7 @@ struct rte_pmd_cnxk_sec_action { */ __rte_experimental int rte_pmd_cnxk_hw_sa_read(void *device, struct rte_security_session *sess, - void *data, uint32_t len); + union rte_pmd_cnxk_ipsec_hw_sa *data, uint32_t len); /** * Write HW SA context to session. * @@ -95,7 +488,7 @@ int rte_pmd_cnxk_hw_sa_read(void *device, struct rte_security_session *sess, */ __rte_experimental int rte_pmd_cnxk_hw_sa_write(void *device, struct rte_security_session *sess, - void *data, uint32_t len); + union rte_pmd_cnxk_ipsec_hw_sa *data, uint32_t len); /** * Get pointer to CPT result info for inline inbound processed pkt. From patchwork Thu Feb 22 11:02:21 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nithin Dabilpuram X-Patchwork-Id: 137016 X-Patchwork-Delegate: jerinj@marvell.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id B673543B74; Thu, 22 Feb 2024 12:03:01 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 54D2E40A7F; Thu, 22 Feb 2024 12:02:52 +0100 (CET) Received: from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by mails.dpdk.org (Postfix) with ESMTP id EEC16406A2 for ; Thu, 22 Feb 2024 12:02:48 +0100 (CET) Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 41M9BLNZ021857 for ; Thu, 22 Feb 2024 03:02:48 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding:content-type; s= pfpt0220; bh=/SU5e8YdPKcXRgWaV614fmTnoGlXK1Yri769S/6pA5M=; b=RYf 1q0BIzuv0wCDj5z15927Qhgp/iXcN/etrL0QdIYrf4YqupEafIHxULnH6eYz3Er3 uZ7HiRNC/y9wUqqsYZ1OyJ/w7sb98/5koh0mkVDp/2HQQ8t6ZyTuBGvOZSKF1JW1 E7wvqvhcq+PaRVz3Y1VPQm5Aoun+B7dNag9HjB4B3QAKo9qfW1t85Z7Nvc0ZdOC1 7CttTGrnWEC7f/RcbGB1C0ox42SAsKWHbwoh5Ajlyyq73F72v6cIcrYWsGgh5tg5 LObIutMoS1cjZp4MgmHIk9TeZyfsTaxvWOTyOtgM0LulyQwyDKzdPAr1xZMu3C0J vD2GhmrivnYmupzYHDw== Received: from dc5-exch02.marvell.com ([199.233.59.182]) by mx0a-0016f401.pphosted.com (PPS) with ESMTPS id 3we3dw89w3-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT) for ; Thu, 22 Feb 2024 03:02:48 -0800 (PST) Received: from DC5-EXCH05.marvell.com (10.69.176.209) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server (TLS) id 15.0.1497.48; Thu, 22 Feb 2024 03:02:46 -0800 Received: from DC5-EXCH01.marvell.com (10.69.176.38) by DC5-EXCH05.marvell.com (10.69.176.209) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.2.1258.12; Thu, 22 Feb 2024 03:02:46 -0800 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH01.marvell.com (10.69.176.38) with Microsoft SMTP Server id 15.0.1497.48 via Frontend Transport; Thu, 22 Feb 2024 03:02:46 -0800 Received: from hyd1588t430.caveonetworks.com (unknown [10.29.52.204]) by maili.marvell.com (Postfix) with ESMTP id B52A23F71DD; Thu, 22 Feb 2024 03:02:44 -0800 (PST) From: Nithin Dabilpuram To: Nithin Dabilpuram , Kiran Kumar K , Sunil Kumar Kori , Satha Rao CC: Subject: [PATCH v4 03/14] net/cnxk: add transport mode to security capability on cn9k Date: Thu, 22 Feb 2024 16:32:21 +0530 Message-ID: <20240222110232.2342903-3-ndabilpuram@marvell.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240222110232.2342903-1-ndabilpuram@marvell.com> References: <20240208085956.1741174-1-ndabilpuram@marvell.com> <20240222110232.2342903-1-ndabilpuram@marvell.com> MIME-Version: 1.0 X-Proofpoint-GUID: 07EdLMDz1pnOzmV_7-Are6IpQxsajepy X-Proofpoint-ORIG-GUID: 07EdLMDz1pnOzmV_7-Are6IpQxsajepy X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-02-22_09,2024-02-22_01,2023-05-22_02 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Add transport mode to security capabilities since it is supported by UCODE. Signed-off-by: Nithin Dabilpuram --- drivers/net/cnxk/cn9k_ethdev_sec.c | 33 ++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/drivers/net/cnxk/cn9k_ethdev_sec.c b/drivers/net/cnxk/cn9k_ethdev_sec.c index 688b13ae1e..a0e0a73639 100644 --- a/drivers/net/cnxk/cn9k_ethdev_sec.c +++ b/drivers/net/cnxk/cn9k_ethdev_sec.c @@ -351,6 +351,39 @@ static const struct rte_security_capability cn9k_eth_sec_capabilities[] = { .crypto_capabilities = cn9k_eth_sec_crypto_caps, .ol_flags = RTE_SECURITY_TX_OLOAD_NEED_MDATA }, + { /* IPsec Inline Protocol ESP Transport Ingress */ + .action = RTE_SECURITY_ACTION_TYPE_INLINE_PROTOCOL, + .protocol = RTE_SECURITY_PROTOCOL_IPSEC, + .ipsec = { + .proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP, + .mode = RTE_SECURITY_IPSEC_SA_MODE_TRANSPORT, + .direction = RTE_SECURITY_IPSEC_SA_DIR_INGRESS, + .replay_win_sz_max = CNXK_ON_AR_WIN_SIZE_MAX, + .options = { + .udp_encap = 1, + .esn = 1, + }, + }, + .crypto_capabilities = cn9k_eth_sec_crypto_caps, + .ol_flags = RTE_SECURITY_TX_OLOAD_NEED_MDATA + }, + { /* IPsec Inline Protocol ESP Transport Egress */ + .action = RTE_SECURITY_ACTION_TYPE_INLINE_PROTOCOL, + .protocol = RTE_SECURITY_PROTOCOL_IPSEC, + .ipsec = { + .proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP, + .mode = RTE_SECURITY_IPSEC_SA_MODE_TRANSPORT, + .direction = RTE_SECURITY_IPSEC_SA_DIR_EGRESS, + .replay_win_sz_max = CNXK_ON_AR_WIN_SIZE_MAX, + .options = { + .iv_gen_disable = 1, + .udp_encap = 1, + .esn = 1, + }, + }, + .crypto_capabilities = cn9k_eth_sec_crypto_caps, + .ol_flags = RTE_SECURITY_TX_OLOAD_NEED_MDATA + }, { .action = RTE_SECURITY_ACTION_TYPE_NONE } From patchwork Thu Feb 22 11:02:22 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nithin Dabilpuram X-Patchwork-Id: 137017 X-Patchwork-Delegate: jerinj@marvell.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id B3BAA43B74; Thu, 22 Feb 2024 12:03:08 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 7744140DC9; Thu, 22 Feb 2024 12:02:55 +0100 (CET) Received: from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by mails.dpdk.org (Postfix) with ESMTP id 3E43240A6C for ; Thu, 22 Feb 2024 12:02:51 +0100 (CET) Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 41M9BcOO021998 for ; Thu, 22 Feb 2024 03:02:50 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding:content-type; s= pfpt0220; bh=WlyQQwwHu/UuTxw4+78mGFUxBk5RNli5LqVpDNPcuYQ=; b=OFV 2mDcSp9P/JOAOKS1KHorthdHlgaSWK5CLuRguFfQpPeJnDqi14WBYzOneDDvkr/q VtuLbBHV5+SrQpwLbELVH0tyA3UtP/kK1726wx8DAd1dvq2uhPYvEV5uicW7rU61 55VemN6wazu4zmf4GVAxzsiOxy+WvjsZw6jSuyGlHQY6IcpUN07lcXhRFJbBPzBd CLw80FC/1ffjfxKJkmVi2VRT6W+XkCSDrcQDek62STbWCjUPPUXakON/qTDYquDx 9ga8j33GNKUpIiTf1j34SATCsJBpIlfp8OSJYtWD4Xpww4MRQiXhmzJSLEwcjhH3 4YMkQXQo2yvKEhk9i6g== Received: from dc5-exch02.marvell.com ([199.233.59.182]) by mx0a-0016f401.pphosted.com (PPS) with ESMTPS id 3we3dw89wj-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT) for ; Thu, 22 Feb 2024 03:02:50 -0800 (PST) Received: from DC5-EXCH01.marvell.com (10.69.176.38) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server (TLS) id 15.0.1497.48; Thu, 22 Feb 2024 03:02:48 -0800 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH01.marvell.com (10.69.176.38) with Microsoft SMTP Server id 15.0.1497.48 via Frontend Transport; Thu, 22 Feb 2024 03:02:48 -0800 Received: from hyd1588t430.caveonetworks.com (unknown [10.29.52.204]) by maili.marvell.com (Postfix) with ESMTP id 191A73F71DD; Thu, 22 Feb 2024 03:02:46 -0800 (PST) From: Nithin Dabilpuram To: Nithin Dabilpuram , Kiran Kumar K , Sunil Kumar Kori , Satha Rao CC: Subject: [PATCH v4 04/14] common/cnxk: dump selected SQ entries Date: Thu, 22 Feb 2024 16:32:22 +0530 Message-ID: <20240222110232.2342903-4-ndabilpuram@marvell.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240222110232.2342903-1-ndabilpuram@marvell.com> References: <20240208085956.1741174-1-ndabilpuram@marvell.com> <20240222110232.2342903-1-ndabilpuram@marvell.com> MIME-Version: 1.0 X-Proofpoint-GUID: jn-BGRRv38iNTkwOCpHkt6khTxxSXI_q X-Proofpoint-ORIG-GUID: jn-BGRRv38iNTkwOCpHkt6khTxxSXI_q X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-02-22_09,2024-02-22_01,2023-05-22_02 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org From: Satha Rao New API to dump detailed SQ entries. Signed-off-by: Satha Rao --- drivers/common/cnxk/roc_nix.h | 2 + drivers/common/cnxk/roc_nix_debug.c | 172 ++++++++++++++++++++++++++++ drivers/common/cnxk/version.map | 1 + 3 files changed, 175 insertions(+) diff --git a/drivers/common/cnxk/roc_nix.h b/drivers/common/cnxk/roc_nix.h index 84e6fc3df5..9d57ca0be7 100644 --- a/drivers/common/cnxk/roc_nix.h +++ b/drivers/common/cnxk/roc_nix.h @@ -553,6 +553,8 @@ void __roc_api roc_nix_cqe_dump(FILE *file, const struct nix_cqe_hdr_s *cq); void __roc_api roc_nix_rq_dump(struct roc_nix_rq *rq, FILE *file); void __roc_api roc_nix_cq_dump(struct roc_nix_cq *cq, FILE *file); void __roc_api roc_nix_sq_dump(struct roc_nix_sq *sq, FILE *file); +int __roc_api roc_nix_sq_desc_dump(struct roc_nix *roc_nix, uint16_t q, uint16_t offset, + uint16_t num, FILE *file); void __roc_api roc_nix_tm_dump(struct roc_nix *roc_nix, FILE *file); void __roc_api roc_nix_dump(struct roc_nix *roc_nix, FILE *file); diff --git a/drivers/common/cnxk/roc_nix_debug.c b/drivers/common/cnxk/roc_nix_debug.c index 8962a76097..26546f9297 100644 --- a/drivers/common/cnxk/roc_nix_debug.c +++ b/drivers/common/cnxk/roc_nix_debug.c @@ -1362,3 +1362,175 @@ roc_nix_inl_outb_cpt_lfs_dump(struct roc_nix *roc_nix, FILE *file) cpt_lf_print(&lf_base[i]); } } + +static void +nix_tm_sqe_dump(uint64_t *sqe, int head_off, int end_off, int instr_sz, FILE *file, int full, + uint16_t *num) +{ + int i, j, inc = (8 * (0x2 >> instr_sz)), segs; + uint64_t *ptr; + + if (!sqe || !(*num)) + return; + + ptr = sqe + (head_off * inc); + for (i = head_off; i < end_off; i++) { + if (!(*num)) + return; + ptr = sqe + (i * inc); + nix_dump(file, "Entry : %d >>>>>\n", i); + nix_dump(file, "\t\tSEND_HDR[0]: 0x%016lx SEND_HDR[1]: 0x%016lx\n", *ptr, + *(ptr + 1)); + *num = *num - 1; + if (!full) + continue; + ptr += 2; + if (((*ptr >> 60) & 0xF) == NIX_SUBDC_EXT) { + nix_dump(file, "\t\tSUBDC_EXT[0]: 0x%016lx DUBDC_EXT[1]: 0x%016lx\n", *ptr, + *(ptr + 1)); + ptr += 2; + } + if (((*ptr >> 60) & 0xF) == NIX_SUBDC_AGE_AND_STATS) { + nix_dump(file, + "\t\tSUBDC_AGE_STATS[0]: 0x%016lx SUBDC_AGE_STATS[1]: 0x%016lx\n", + *ptr, *(ptr + 1)); + ptr += 2; + } + if (((*ptr >> 60) & 0xF) == NIX_SUBDC_JUMP) { + nix_dump(file, "\t\tSUBDC_JUMP: 0x%016lx\n", *ptr); + ptr += 1; + ptr = (uint64_t *)*ptr; + } + if (((*ptr >> 60) & 0xF) == NIX_SUBDC_CRC) { + nix_dump(file, "\t\tSUBDC_CRC[0]: 0x%016lx SUBDC_CRC[1]: 0x%016lx\n", *ptr, + *(ptr + 1)); + ptr += 2; + } + /* We are not parsing immediate send descriptor */ + if (((*ptr >> 60) & 0xF) == NIX_SUBDC_IMM) { + nix_dump(file, "\t\tSUBDC_IMM: 0x%016lx ", *ptr); + continue; + } + while (1) { + if (((*ptr >> 60) & 0xF) == NIX_SUBDC_SG) { + nix_dump(file, "\t\tSUBDC_SG: 0x%016lx ", *ptr); + segs = (*ptr >> 48) & 0x3; + ptr += 1; + for (j = 0; j < segs; j++) { + nix_dump(file, "\t\t\t 0x%016lx ", *ptr); + ptr += 1; + } + if (segs == 2) + ptr += 1; + } else if (((*ptr >> 60) & 0xF) == NIX_SUBDC_SG2) { + nix_dump(file, "\t\tSUBDC_SG2: 0x%016lx ", *ptr); + ptr += 1; + nix_dump(file, "\t\t\t 0x%016lx ", *ptr); + ptr += 1; + } else + break; + } + } +} + +int +roc_nix_sq_desc_dump(struct roc_nix *roc_nix, uint16_t q, uint16_t offset, uint16_t num, FILE *file) +{ + int head_off, count, rc = 0, tail_off, full = 0; + struct nix *nix = roc_nix_to_nix_priv(roc_nix); + struct roc_nix_sq *sq = nix->sqs[q]; + void *sqb_buf, *dat, *tail_sqb; + struct ndc_sync_op *ndc_req; + struct dev *dev = &nix->dev; + uint16_t sqes_per_sqb; + struct mbox *mbox; + + mbox = dev->mbox; + /* Sync NDC-NIX-TX for LF */ + ndc_req = mbox_alloc_msg_ndc_sync_op(mbox_get(mbox)); + if (ndc_req == NULL) { + mbox_put(mbox); + return -EFAULT; + } + + ndc_req->nix_lf_tx_sync = 1; + if (mbox_process(mbox)) + rc |= NIX_ERR_NDC_SYNC; + mbox_put(mbox); + + if (rc) + plt_err("NDC_SYNC failed rc %d", rc); + + rc = nix_q_ctx_get(dev, NIX_AQ_CTYPE_SQ, q, (void *)&dat); + if (rc) + return rc; + if (roc_model_is_cn9k()) { + volatile struct nix_sq_ctx_s *ctx = (struct nix_sq_ctx_s *)dat; + + if (ctx->mnq_dis || ctx->lmt_dis) + full = 1; + + count = ctx->sqb_count; + sqb_buf = (void *)ctx->head_sqb; + tail_sqb = (void *)ctx->tail_sqb; + head_off = ctx->head_offset; + tail_off = ctx->tail_offset; + } else { + volatile struct nix_cn10k_sq_ctx_s *ctx = (struct nix_cn10k_sq_ctx_s *)dat; + + if (ctx->mnq_dis || ctx->lmt_dis) + full = 1; + + count = ctx->sqb_count; + sqb_buf = (void *)ctx->head_sqb; + tail_sqb = (void *)ctx->tail_sqb; + head_off = ctx->head_offset; + tail_off = ctx->tail_offset; + } + sqes_per_sqb = 1 << sq->sqes_per_sqb_log2; + while (count) { + void *next_sqb; + + if (sqb_buf == tail_sqb) { + if ((head_off + offset) >= tail_off) /* Nothing to be dump */ + return 0; + head_off += tail_off; + break; + } else if ((head_off + offset) >= sqes_per_sqb) { + next_sqb = *(void **)((uint64_t *)sqb_buf + + (uint32_t)((sqes_per_sqb - 1) * + (0x2 >> sq->max_sqe_sz) * 8)); + /* While traffic running HW may freed/reused this SQE */ + if (!next_sqb) + return 0; + sqb_buf = next_sqb; + head_off = 0; + count--; + } else { + head_off += offset; + break; + } + } + while (count) { + void *next_sqb; + + if (sqb_buf == tail_sqb) + nix_tm_sqe_dump(sqb_buf, head_off, tail_off, sq->max_sqe_sz, file, full, + &num); + else + nix_tm_sqe_dump(sqb_buf, head_off, (sqes_per_sqb - 1), sq->max_sqe_sz, file, + full, &num); + if (!num) + break; + next_sqb = *(void **)((uint64_t *)sqb_buf + + (uint32_t)((sqes_per_sqb - 1) * (0x2 >> sq->max_sqe_sz) * 8)); + /* While traffic running HW may freed/reused this SQE */ + if (!next_sqb) + return 0; + sqb_buf = next_sqb; + head_off = 0; + count--; + } + + return 0; +} diff --git a/drivers/common/cnxk/version.map b/drivers/common/cnxk/version.map index a7402d9941..05432ad245 100644 --- a/drivers/common/cnxk/version.map +++ b/drivers/common/cnxk/version.map @@ -340,6 +340,7 @@ INTERNAL { roc_nix_rx_drop_re_set; roc_nix_rx_queue_intr_disable; roc_nix_rx_queue_intr_enable; + roc_nix_sq_desc_dump; roc_nix_sq_dump; roc_nix_sq_ena_dis; roc_nix_sq_fini; From patchwork Thu Feb 22 11:02:23 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nithin Dabilpuram X-Patchwork-Id: 137019 X-Patchwork-Delegate: jerinj@marvell.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id D070743B74; Thu, 22 Feb 2024 12:08:27 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 5B2C9402D1; Thu, 22 Feb 2024 12:08:27 +0100 (CET) Received: from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by mails.dpdk.org (Postfix) with ESMTP id 84EF340281 for ; Thu, 22 Feb 2024 12:08:25 +0100 (CET) Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 41M9BLas021847 for ; Thu, 22 Feb 2024 03:08:24 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding:content-type; s= pfpt0220; bh=ZgBvNhJH9ADmus4jj35pdDYQuNrX9A/nuOdAqZrGAHo=; b=BPP GHW1m9N/IAH06xLIhlRK6XhKSk9nNv87gXG2l9gVdjIAiMN7hpNqv7Kr2UN+J6lt wykz9YCbAZ/imWLa9tyqSoETFdVW2rMt8Jev3GiJ+KKbaqyY24pBELCZD/gW2B8B SA8tmGwILsa/80QowSubJaleNjhJvdV0qkUB+7B8VfkK2LTyBxIUTLBcSAt2jM+r e27Nv9QVLOyqT4Zwd+UqZjFZuKjBMED2x3fIdYTZ/2mlxOeLkaez0//x7AsPxApz mST4ZLIcRpQmH9e7g6iwLqx7lIPOunVqQedwvXkTkJaxg/Rv4UkXPlRN6lobSPwH PUxQcxsjv1tvYsyRLkA== Received: from dc5-exch01.marvell.com ([199.233.59.181]) by mx0a-0016f401.pphosted.com (PPS) with ESMTPS id 3we3dw8as2-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT) for ; Thu, 22 Feb 2024 03:08:22 -0800 (PST) Received: from DC5-EXCH05.marvell.com (10.69.176.209) by DC5-EXCH01.marvell.com (10.69.176.38) with Microsoft SMTP Server (TLS) id 15.0.1497.48; Thu, 22 Feb 2024 03:02:51 -0800 Received: from DC5-EXCH02.marvell.com (10.69.176.39) by DC5-EXCH05.marvell.com (10.69.176.209) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.2.1258.12; Thu, 22 Feb 2024 03:02:51 -0800 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server id 15.0.1497.48 via Frontend Transport; Thu, 22 Feb 2024 03:02:51 -0800 Received: from hyd1588t430.caveonetworks.com (unknown [10.29.52.204]) by maili.marvell.com (Postfix) with ESMTP id 71CB55B693B; Thu, 22 Feb 2024 03:02:49 -0800 (PST) From: Nithin Dabilpuram To: Nithin Dabilpuram , Kiran Kumar K , Sunil Kumar Kori , Satha Rao CC: Subject: [PATCH v4 05/14] net/cnxk: added Tx descriptor dump API Date: Thu, 22 Feb 2024 16:32:23 +0530 Message-ID: <20240222110232.2342903-5-ndabilpuram@marvell.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240222110232.2342903-1-ndabilpuram@marvell.com> References: <20240208085956.1741174-1-ndabilpuram@marvell.com> <20240222110232.2342903-1-ndabilpuram@marvell.com> MIME-Version: 1.0 X-Proofpoint-GUID: fVRncHpQHQZ0z71S4dggcFETTnIgR-cb X-Proofpoint-ORIG-GUID: fVRncHpQHQZ0z71S4dggcFETTnIgR-cb X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-02-22_09,2024-02-22_01,2023-05-22_02 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org From: Satha Rao New API to dump selected descriptor entries from SQE list. Signed-off-by: Satha Rao --- drivers/net/cnxk/cnxk_ethdev.c | 1 + drivers/net/cnxk/cnxk_ethdev.h | 2 ++ drivers/net/cnxk/cnxk_ethdev_ops.c | 10 ++++++++++ 3 files changed, 13 insertions(+) diff --git a/drivers/net/cnxk/cnxk_ethdev.c b/drivers/net/cnxk/cnxk_ethdev.c index 2372a4e793..7640910782 100644 --- a/drivers/net/cnxk/cnxk_ethdev.c +++ b/drivers/net/cnxk/cnxk_ethdev.c @@ -1821,6 +1821,7 @@ struct eth_dev_ops cnxk_eth_dev_ops = { .cman_config_init = cnxk_nix_cman_config_init, .cman_config_set = cnxk_nix_cman_config_set, .cman_config_get = cnxk_nix_cman_config_get, + .eth_tx_descriptor_dump = cnxk_nix_tx_descriptor_dump, }; void diff --git a/drivers/net/cnxk/cnxk_ethdev.h b/drivers/net/cnxk/cnxk_ethdev.h index 37b6395b93..45b9055234 100644 --- a/drivers/net/cnxk/cnxk_ethdev.h +++ b/drivers/net/cnxk/cnxk_ethdev.h @@ -557,6 +557,8 @@ int cnxk_nix_tm_mark_ip_ecn(struct rte_eth_dev *eth_dev, int mark_green, int cnxk_nix_tm_mark_ip_dscp(struct rte_eth_dev *eth_dev, int mark_green, int mark_yellow, int mark_red, struct rte_tm_error *error); +int cnxk_nix_tx_descriptor_dump(const struct rte_eth_dev *eth_dev, uint16_t qid, uint16_t offset, + uint16_t num, FILE *file); /* MTR */ int cnxk_nix_mtr_ops_get(struct rte_eth_dev *dev, void *ops); diff --git a/drivers/net/cnxk/cnxk_ethdev_ops.c b/drivers/net/cnxk/cnxk_ethdev_ops.c index 5de2919047..e9ab8da781 100644 --- a/drivers/net/cnxk/cnxk_ethdev_ops.c +++ b/drivers/net/cnxk/cnxk_ethdev_ops.c @@ -1313,3 +1313,13 @@ nix_priority_flow_ctrl_sq_conf(struct rte_eth_dev *eth_dev, uint16_t qid, exit: return rc; } + +int +cnxk_nix_tx_descriptor_dump(const struct rte_eth_dev *eth_dev, uint16_t qid, uint16_t offset, + uint16_t num, FILE *file) +{ + struct cnxk_eth_dev *dev = cnxk_eth_pmd_priv(eth_dev); + struct roc_nix *nix = &dev->nix; + + return roc_nix_sq_desc_dump(nix, qid, offset, num, file); +} From patchwork Thu Feb 22 11:02:24 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nithin Dabilpuram X-Patchwork-Id: 137020 X-Patchwork-Delegate: jerinj@marvell.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 0B58143B74; Thu, 22 Feb 2024 12:08:32 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 9260040DF5; Thu, 22 Feb 2024 12:08:31 +0100 (CET) Received: from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by mails.dpdk.org (Postfix) with ESMTP id A7CA840DD8; Thu, 22 Feb 2024 12:08:29 +0100 (CET) Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 41M9BLax021847; Thu, 22 Feb 2024 03:08:28 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding:content-type; s= pfpt0220; bh=zuD0cl3vtrbh/2Ty/hLFkov0+AXooedIooJyxCGwqew=; b=blr FBwRiews4le7Rsi8ajiBYzg4k7qyR2r3mWdDed6Pv3szjS2v1IoZqvKvo5dzer2H UNwicHG6Y8rQrI1QZK9XFzX4YjDTibCWdhw+pzvfiKB+kZSd0QBWoHZYI3UcbicC izKCLNmAprQ943zsm5buyRiS3qHfqhnZwIv9Pp+zOWD7WIIMdxWDBQepnGoadLRS reolE8UAFa5B2PkAm9UJ0aMZeBV3x7DVfbLF4NYAeJMeMkRADLL48uc5lSyaHv9k Rm5zd0h/clurkBQ9PV7hreAIQe1uascAO9YlXI78mQEZ2CjBvVX4+KqEeHiYEUAx BffReV6z+HSLs6ApBVw== Received: from dc5-exch01.marvell.com ([199.233.59.181]) by mx0a-0016f401.pphosted.com (PPS) with ESMTPS id 3we3dw8as2-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Thu, 22 Feb 2024 03:08:26 -0800 (PST) Received: from DC5-EXCH01.marvell.com (10.69.176.38) by DC5-EXCH01.marvell.com (10.69.176.38) with Microsoft SMTP Server (TLS) id 15.0.1497.48; Thu, 22 Feb 2024 03:02:53 -0800 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH01.marvell.com (10.69.176.38) with Microsoft SMTP Server id 15.0.1497.48 via Frontend Transport; Thu, 22 Feb 2024 03:02:53 -0800 Received: from hyd1588t430.caveonetworks.com (unknown [10.29.52.204]) by maili.marvell.com (Postfix) with ESMTP id C8A7A3F71DD; Thu, 22 Feb 2024 03:02:51 -0800 (PST) From: Nithin Dabilpuram To: Nithin Dabilpuram , Kiran Kumar K , Sunil Kumar Kori , Satha Rao CC: , Subject: [PATCH v4 06/14] net/cnxk: fix issue with buff size compute Date: Thu, 22 Feb 2024 16:32:24 +0530 Message-ID: <20240222110232.2342903-6-ndabilpuram@marvell.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240222110232.2342903-1-ndabilpuram@marvell.com> References: <20240208085956.1741174-1-ndabilpuram@marvell.com> <20240222110232.2342903-1-ndabilpuram@marvell.com> MIME-Version: 1.0 X-Proofpoint-GUID: 0ZDKGD3XzOh5CDgDfXuppBEK3kDvLpR_ X-Proofpoint-ORIG-GUID: 0ZDKGD3XzOh5CDgDfXuppBEK3kDvLpR_ X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-02-22_09,2024-02-22_01,2023-05-22_02 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org In case where cnxk_nix_mtu_set() is called before data->min_rx_buf_size is set, use buf size from first RQ's mempool. Fixes: 34b46320f446 ("net/cnxk: perform early MTU setup for event mode") Cc: stable@dpdk.org Signed-off-by: Nithin Dabilpuram --- drivers/net/cnxk/cnxk_ethdev_ops.c | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/drivers/net/cnxk/cnxk_ethdev_ops.c b/drivers/net/cnxk/cnxk_ethdev_ops.c index e9ab8da781..e816884d47 100644 --- a/drivers/net/cnxk/cnxk_ethdev_ops.c +++ b/drivers/net/cnxk/cnxk_ethdev_ops.c @@ -544,8 +544,9 @@ cnxk_nix_mtu_set(struct rte_eth_dev *eth_dev, uint16_t mtu) struct cnxk_eth_dev *dev = cnxk_eth_pmd_priv(eth_dev); struct rte_eth_dev_data *data = eth_dev->data; struct roc_nix *nix = &dev->nix; + struct cnxk_eth_rxq_sp *rxq_sp; + uint32_t buffsz = 0; int rc = -EINVAL; - uint32_t buffsz; frame_size += CNXK_NIX_TIMESYNC_RX_OFFSET * dev->ptp_en; @@ -561,8 +562,24 @@ cnxk_nix_mtu_set(struct rte_eth_dev *eth_dev, uint16_t mtu) goto exit; } - buffsz = data->min_rx_buf_size - RTE_PKTMBUF_HEADROOM; - old_frame_size = data->mtu + CNXK_NIX_L2_OVERHEAD; + if (!eth_dev->data->nb_rx_queues) + goto skip_buffsz_check; + + /* Perform buff size check */ + if (data->min_rx_buf_size) { + buffsz = data->min_rx_buf_size; + } else if (eth_dev->data->rx_queues && eth_dev->data->rx_queues[0]) { + rxq_sp = cnxk_eth_rxq_to_sp(data->rx_queues[0]); + + if (rxq_sp->qconf.mp) + buffsz = rte_pktmbuf_data_room_size(rxq_sp->qconf.mp); + } + + /* Skip validation if RQ's are not yet setup */ + if (!buffsz) + goto skip_buffsz_check; + + buffsz -= RTE_PKTMBUF_HEADROOM; /* Refuse MTU that requires the support of scattered packets * when this feature has not been enabled before. @@ -580,6 +597,8 @@ cnxk_nix_mtu_set(struct rte_eth_dev *eth_dev, uint16_t mtu) goto exit; } +skip_buffsz_check: + old_frame_size = data->mtu + CNXK_NIX_L2_OVERHEAD; /* if new MTU was smaller than old one, then flush all SQs before MTU change */ if (old_frame_size > frame_size) { if (data->dev_started) { From patchwork Thu Feb 22 11:02:25 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nithin Dabilpuram X-Patchwork-Id: 137018 X-Patchwork-Delegate: jerinj@marvell.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id BFF9143B74; Thu, 22 Feb 2024 12:03:16 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A272E40A6C; Thu, 22 Feb 2024 12:03:00 +0100 (CET) Received: from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by mails.dpdk.org (Postfix) with ESMTP id 023A940DCE for ; Thu, 22 Feb 2024 12:02:58 +0100 (CET) Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 41M9CMOZ023744 for ; Thu, 22 Feb 2024 03:02:58 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding:content-type; s= pfpt0220; bh=bW8eJFPBvWXvYEcXEqdDy3z5oMB2NB9GcEaZk47tpfk=; b=huW wE87DuEcszLN87AW3Fi8ORfPi8HqeVANF05F/3U8ZA0F9UX4t3NMsKiXPWCWNGwB L0Tn3v/5MmEzX7+GbzGCiVFjMxDTD/uZbHgAUiAVkooNks23yCIADc6cN8yDguN6 szdANPGMuyR2MSlBIZ/OMjNjhv/HhUuBFBes92jCUmIr2tafCdA3FTbAtiHxHmv6 CXuhhubs0EW/7LsTURfRZ+h8hGbTv7khqjkRYwURkra36uKozba0zeAWOuyMw0Mm L+rmyBFkKLNItjaT/xAhKmF2SQDvY2tMB70MdEULpag2BbjVRxjhTNoURAgZ9Huh XoGphbzUChnQorllUKg== Received: from dc5-exch02.marvell.com ([199.233.59.182]) by mx0a-0016f401.pphosted.com (PPS) with ESMTPS id 3we3dw89xa-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT) for ; Thu, 22 Feb 2024 03:02:57 -0800 (PST) Received: from DC5-EXCH05.marvell.com (10.69.176.209) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server (TLS) id 15.0.1497.48; Thu, 22 Feb 2024 03:02:56 -0800 Received: from DC5-EXCH02.marvell.com (10.69.176.39) by DC5-EXCH05.marvell.com (10.69.176.209) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.2.1258.12; Thu, 22 Feb 2024 03:02:56 -0800 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server id 15.0.1497.48 via Frontend Transport; Thu, 22 Feb 2024 03:02:56 -0800 Received: from hyd1588t430.caveonetworks.com (unknown [10.29.52.204]) by maili.marvell.com (Postfix) with ESMTP id 6DA555B693B; Thu, 22 Feb 2024 03:02:54 -0800 (PST) From: Nithin Dabilpuram To: Nithin Dabilpuram , Kiran Kumar K , Sunil Kumar Kori , Satha Rao CC: Subject: [PATCH v4 07/14] common/cnxk: skip setting Tx MTU separately Date: Thu, 22 Feb 2024 16:32:25 +0530 Message-ID: <20240222110232.2342903-7-ndabilpuram@marvell.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240222110232.2342903-1-ndabilpuram@marvell.com> References: <20240208085956.1741174-1-ndabilpuram@marvell.com> <20240222110232.2342903-1-ndabilpuram@marvell.com> MIME-Version: 1.0 X-Proofpoint-GUID: jJEBUF0V_M3nBMuJkZUCTDy_J9X6yVux X-Proofpoint-ORIG-GUID: jJEBUF0V_M3nBMuJkZUCTDy_J9X6yVux X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-02-22_09,2024-02-22_01,2023-05-22_02 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Skip setting Tx MTU separately as now the Tx credit configuration is based on max MTU possible for that link. Also init MTU with max value for that port. Signed-off-by: Nithin Dabilpuram --- drivers/common/cnxk/roc_nix.c | 2 +- drivers/common/cnxk/roc_nix.h | 2 -- drivers/net/cnxk/cnxk_ethdev_ops.c | 12 +----------- 3 files changed, 2 insertions(+), 14 deletions(-) diff --git a/drivers/common/cnxk/roc_nix.c b/drivers/common/cnxk/roc_nix.c index 97c0ae3e25..90ccb260fb 100644 --- a/drivers/common/cnxk/roc_nix.c +++ b/drivers/common/cnxk/roc_nix.c @@ -484,7 +484,7 @@ roc_nix_dev_init(struct roc_nix *roc_nix) sdp_lbk_id_update(pci_dev, nix); nix->pci_dev = pci_dev; nix->reta_sz = reta_sz; - nix->mtu = ROC_NIX_DEFAULT_HW_FRS; + nix->mtu = roc_nix_max_pkt_len(roc_nix); nix->dmac_flt_idx = -1; /* Register error and ras interrupts */ diff --git a/drivers/common/cnxk/roc_nix.h b/drivers/common/cnxk/roc_nix.h index 9d57ca0be7..3799b551f2 100644 --- a/drivers/common/cnxk/roc_nix.h +++ b/drivers/common/cnxk/roc_nix.h @@ -267,8 +267,6 @@ struct roc_nix_eeprom_info { #define ROC_NIX_RSS_KEY_LEN 48 /* 352 Bits */ #define ROC_NIX_RSS_MCAM_IDX_DEFAULT (-1) -#define ROC_NIX_DEFAULT_HW_FRS 1514 - #define ROC_NIX_VWQE_MAX_SIZE_LOG2 11 #define ROC_NIX_VWQE_MIN_SIZE_LOG2 2 diff --git a/drivers/net/cnxk/cnxk_ethdev_ops.c b/drivers/net/cnxk/cnxk_ethdev_ops.c index e816884d47..4962f3bced 100644 --- a/drivers/net/cnxk/cnxk_ethdev_ops.c +++ b/drivers/net/cnxk/cnxk_ethdev_ops.c @@ -610,19 +610,9 @@ cnxk_nix_mtu_set(struct rte_eth_dev *eth_dev, uint16_t mtu) frame_size -= RTE_ETHER_CRC_LEN; - /* Update mtu on Tx */ - rc = roc_nix_mac_mtu_set(nix, frame_size); - if (rc) { - plt_err("Failed to set MTU, rc=%d", rc); - goto exit; - } - - /* Sync same frame size on Rx */ + /* Set frame size on Rx */ rc = roc_nix_mac_max_rx_len_set(nix, frame_size); if (rc) { - /* Rollback to older mtu */ - roc_nix_mac_mtu_set(nix, - old_frame_size - RTE_ETHER_CRC_LEN); plt_err("Failed to max Rx frame length, rc=%d", rc); goto exit; } From patchwork Thu Feb 22 11:02:26 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nithin Dabilpuram X-Patchwork-Id: 137022 X-Patchwork-Delegate: jerinj@marvell.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 8F45B43B74; Thu, 22 Feb 2024 12:08:51 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 7568840EF0; Thu, 22 Feb 2024 12:08:51 +0100 (CET) Received: from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by mails.dpdk.org (Postfix) with ESMTP id 608C240ECF; Thu, 22 Feb 2024 12:08:49 +0100 (CET) Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 41M9BLbB021847; Thu, 22 Feb 2024 03:08:48 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding:content-type; s= pfpt0220; bh=qO+uUIADDnZPHqQj5+K/18uqxv2EHcCCUr1r2dttMg8=; b=Qs0 zRMvdXBFVTjGi4mL/u1BXuY/DsKQ5ezSm4Dbxdft+oHKhE5GWR3hxZOtmdIe7bQi FNoV1ghoTQ6O9nOPntnwl6pqHZOM6VEKtpPdasFvuyGaQ2HnuE9hYcsYM/a29lyN AIleYCA7wx+mrynAF4q1haotBX70dnMBbq/Rnp90X9jvfYSu1EUzhwpdUsVKgOCw MpT47CL8EE/cRQaEY88tCF1FXFmKrPHpSAMzWHlUsnaSV0Z3p0hPjbjZlEi5i1hk nlR5tv4hLkMZEYRNE/7k1q/u6VNMIU12H1e/G3KQpJRsbL7Y23XP2aGCnYJjauS9 tvRf+GLppAQlljWCtvA== Received: from dc5-exch01.marvell.com ([199.233.59.181]) by mx0a-0016f401.pphosted.com (PPS) with ESMTPS id 3we3dw8as2-5 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Thu, 22 Feb 2024 03:08:40 -0800 (PST) Received: from DC5-EXCH02.marvell.com (10.69.176.39) by DC5-EXCH01.marvell.com (10.69.176.38) with Microsoft SMTP Server (TLS) id 15.0.1497.48; Thu, 22 Feb 2024 03:02:58 -0800 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server id 15.0.1497.48 via Frontend Transport; Thu, 22 Feb 2024 03:02:58 -0800 Received: from hyd1588t430.caveonetworks.com (unknown [10.29.52.204]) by maili.marvell.com (Postfix) with ESMTP id C5ACD3F71DD; Thu, 22 Feb 2024 03:02:56 -0800 (PST) From: Nithin Dabilpuram To: Nithin Dabilpuram , Kiran Kumar K , Sunil Kumar Kori , Satha Rao CC: , Subject: [PATCH v4 08/14] net/cnxk: fix max MTU limit Date: Thu, 22 Feb 2024 16:32:26 +0530 Message-ID: <20240222110232.2342903-8-ndabilpuram@marvell.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240222110232.2342903-1-ndabilpuram@marvell.com> References: <20240208085956.1741174-1-ndabilpuram@marvell.com> <20240222110232.2342903-1-ndabilpuram@marvell.com> MIME-Version: 1.0 X-Proofpoint-GUID: r_ENWrqQibLnGoqHs5Vozu9W1gZjxZH_ X-Proofpoint-ORIG-GUID: r_ENWrqQibLnGoqHs5Vozu9W1gZjxZH_ X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-02-22_09,2024-02-22_01,2023-05-22_02 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org From: Sunil Kumar Kori Device can support maximum frame size up to 9212 bytes. While configuring mtu, overhead is considered as ethernet header size, crc and 2 * (vlan tags) which translates to 26 bytes. Exposed overhead to the user via rte_eth_dev_info() is 18 bytes which were leading to set wrong Rx frame size. Fixes: 8589ec212e80 ("net/cnxk: support MTU set") Cc: stable@dpdk.org Signed-off-by: Sunil Kumar Kori --- drivers/net/cnxk/cnxk_ethdev_ops.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/drivers/net/cnxk/cnxk_ethdev_ops.c b/drivers/net/cnxk/cnxk_ethdev_ops.c index 4962f3bced..56049c5dd2 100644 --- a/drivers/net/cnxk/cnxk_ethdev_ops.c +++ b/drivers/net/cnxk/cnxk_ethdev_ops.c @@ -20,8 +20,7 @@ cnxk_nix_info_get(struct rte_eth_dev *eth_dev, struct rte_eth_dev_info *devinfo) devinfo->max_tx_queues = RTE_MAX_QUEUES_PER_PORT; devinfo->max_mac_addrs = dev->max_mac_entries; devinfo->max_vfs = pci_dev->max_vfs; - devinfo->max_mtu = devinfo->max_rx_pktlen - - (RTE_ETHER_HDR_LEN + RTE_ETHER_CRC_LEN); + devinfo->max_mtu = devinfo->max_rx_pktlen - CNXK_NIX_L2_OVERHEAD; devinfo->min_mtu = devinfo->min_rx_bufsize - CNXK_NIX_L2_OVERHEAD; devinfo->rx_offload_capa = dev->rx_offload_capa; From patchwork Thu Feb 22 11:02:27 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nithin Dabilpuram X-Patchwork-Id: 137023 X-Patchwork-Delegate: jerinj@marvell.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 5856943B74; Thu, 22 Feb 2024 12:08:57 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id CACD740F35; Thu, 22 Feb 2024 12:08:56 +0100 (CET) Received: from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by mails.dpdk.org (Postfix) with ESMTP id 94B6940EDC for ; Thu, 22 Feb 2024 12:08:54 +0100 (CET) Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 41M9BLbR021847 for ; Thu, 22 Feb 2024 03:08:53 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding:content-type; s= pfpt0220; bh=PJ7QUDEwxHjcKRgNmwBMmxMezXFlnAaBG+GymQzgAH8=; b=VjI cGxr1W4E7ESBwccikqn2h8sCL7PTBa/Wd0mgnwCBe94DeCE8yBF+Bo/IqQaRhJKc l/10hAKsXnvAu628pho88DoI2+CSI0D6YTm0CrdpfuXxPMINPWQAvyDjs7bmtSqf w7ad6SgHapdiD9OWcodCGPyDZiD+i/WkaycAftVhwQQGppTrA2KvXOiPdRorT/lZ vmSTT1bUFzujprcQ9CG+jfWnOoRhIhpx5v6LbUABn/ZY1BvG9Nh1LW0kjjckrorI ODTclXp6DH+88u/ufTn+lnWlsyBDg/lTRXC3nbQhhOPUDNbu2coyf+aDR7coEaJa FsLUf76R1IKBj9HVUgw== Received: from dc5-exch01.marvell.com ([199.233.59.181]) by mx0a-0016f401.pphosted.com (PPS) with ESMTPS id 3we3dw8b08-10 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT) for ; Thu, 22 Feb 2024 03:08:53 -0800 (PST) Received: from DC5-EXCH01.marvell.com (10.69.176.38) by DC5-EXCH01.marvell.com (10.69.176.38) with Microsoft SMTP Server (TLS) id 15.0.1497.48; Thu, 22 Feb 2024 03:03:01 -0800 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH01.marvell.com (10.69.176.38) with Microsoft SMTP Server id 15.0.1497.48 via Frontend Transport; Thu, 22 Feb 2024 03:03:01 -0800 Received: from hyd1588t430.caveonetworks.com (unknown [10.29.52.204]) by maili.marvell.com (Postfix) with ESMTP id 6DCFB3F71F4; Thu, 22 Feb 2024 03:02:59 -0800 (PST) From: Nithin Dabilpuram To: Nithin Dabilpuram , Kiran Kumar K , Sunil Kumar Kori , Satha Rao CC: , Kommula Shiva Shankar Subject: [PATCH v4 09/14] common/cnxk: update queue entries copy in RETA table Date: Thu, 22 Feb 2024 16:32:27 +0530 Message-ID: <20240222110232.2342903-9-ndabilpuram@marvell.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240222110232.2342903-1-ndabilpuram@marvell.com> References: <20240208085956.1741174-1-ndabilpuram@marvell.com> <20240222110232.2342903-1-ndabilpuram@marvell.com> MIME-Version: 1.0 X-Proofpoint-GUID: 77ig1Ill6V3cF9-Lub7lGc4418cVgjzE X-Proofpoint-ORIG-GUID: 77ig1Ill6V3cF9-Lub7lGc4418cVgjzE X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-02-22_09,2024-02-22_01,2023-05-22_02 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org From: Kommula Shiva Shankar This patch updates queue entries copy in reta table based on data type Signed-off-by: Kommula Shiva Shankar --- drivers/common/cnxk/roc_nix_rss.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/common/cnxk/roc_nix_rss.c b/drivers/common/cnxk/roc_nix_rss.c index 3599eb9bae..2b88e1360d 100644 --- a/drivers/common/cnxk/roc_nix_rss.c +++ b/drivers/common/cnxk/roc_nix_rss.c @@ -196,7 +196,7 @@ roc_nix_rss_reta_set(struct roc_nix *roc_nix, uint8_t group, if (rc) return rc; - memcpy(&nix->reta[group], reta, ROC_NIX_RSS_RETA_MAX); + memcpy(&nix->reta[group], reta, sizeof(uint16_t) * ROC_NIX_RSS_RETA_MAX); return 0; } @@ -209,7 +209,7 @@ roc_nix_rss_reta_get(struct roc_nix *roc_nix, uint8_t group, if (group >= ROC_NIX_RSS_GRPS) return NIX_ERR_PARAM; - memcpy(reta, &nix->reta[group], ROC_NIX_RSS_RETA_MAX); + memcpy(reta, &nix->reta[group], sizeof(uint16_t) * ROC_NIX_RSS_RETA_MAX); return 0; } From patchwork Thu Feb 22 11:02:28 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nithin Dabilpuram X-Patchwork-Id: 137021 X-Patchwork-Delegate: jerinj@marvell.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 84A5E43B74; Thu, 22 Feb 2024 12:08:38 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 2D54F40E32; Thu, 22 Feb 2024 12:08:35 +0100 (CET) Received: from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by mails.dpdk.org (Postfix) with ESMTP id 9DB0A40DD8; Thu, 22 Feb 2024 12:08:33 +0100 (CET) Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 41M9BLb5021847; Thu, 22 Feb 2024 03:08:32 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding:content-type; s= pfpt0220; bh=1hSazY3UP7+nNGA9jafKVGpOJm5CIhn1wEF1X+H5rgE=; b=Ypf 6Lj6fCMHKFwG9nMiluX/1YmMiQEtYW5NRpf+Z7Ih3omJixRmDkgqCFnYjR/lchp7 fAQQuPsYqcE9lU97AfeZGZFye2/sXXJiq4o/glaFc03xglJLwBSqmewVDCIwgVxx HhSmVJ88pkFFMttoPMKEMIp/HuWgOhp5/yC32USTxAqVsAjgEoAzrAU3DZJfQrKV YyQzlM1xAAn/r581LfR1tg2RqFRqsiFh5dQTU9C+A+uFeemPCvf9TrIZQ8fZ8jIs HJriIfYdDE9J6ntWWAorszIMF+JePI1ow4x87ZGf2AcKY0siMF72mN3Duvq4Pdbl WhvSA7jw3cWVG1GfogQ== Received: from dc5-exch02.marvell.com ([199.233.59.182]) by mx0a-0016f401.pphosted.com (PPS) with ESMTPS id 3we3dw8at4-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Thu, 22 Feb 2024 03:08:31 -0800 (PST) Received: from DC5-EXCH01.marvell.com (10.69.176.38) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server (TLS) id 15.0.1497.48; Thu, 22 Feb 2024 03:03:04 -0800 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH01.marvell.com (10.69.176.38) with Microsoft SMTP Server id 15.0.1497.48 via Frontend Transport; Thu, 22 Feb 2024 03:03:04 -0800 Received: from hyd1588t430.caveonetworks.com (unknown [10.29.52.204]) by maili.marvell.com (Postfix) with ESMTP id 217883F71DE; Thu, 22 Feb 2024 03:03:01 -0800 (PST) From: Nithin Dabilpuram To: Nithin Dabilpuram , Kiran Kumar K , Sunil Kumar Kori , Satha Rao CC: , , Rahul Bhansali Subject: [PATCH v4 10/14] net/cnxk: fix indirect mbuf handling in Tx path Date: Thu, 22 Feb 2024 16:32:28 +0530 Message-ID: <20240222110232.2342903-10-ndabilpuram@marvell.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240222110232.2342903-1-ndabilpuram@marvell.com> References: <20240208085956.1741174-1-ndabilpuram@marvell.com> <20240222110232.2342903-1-ndabilpuram@marvell.com> MIME-Version: 1.0 X-Proofpoint-GUID: TAeOUtAOamayJS8YueK04KghjsM04f0- X-Proofpoint-ORIG-GUID: TAeOUtAOamayJS8YueK04KghjsM04f0- X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-02-22_09,2024-02-22_01,2023-05-22_02 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Indirect mbuf can be pointing to data from different pool. Use the right aura in NIX send header in SG2 and SG case. Fixes: 862e28128707 ("net/cnxk: add vector Tx for CN9K") Fixes: f71b7dbbf04b ("net/cnxk: add vector Tx for CN10K") Fixes: 7e95c11df4f1 ("net/cnxk: add multi-segment Tx for CN9K") Fixes: 3626d5195d49 ("net/cnxk: add multi-segment Tx for CN10K") Cc: stable@dpdk.org Signed-off-by: Nithin Dabilpuram Signed-off-by: Rahul Bhansali --- drivers/net/cnxk/cn10k_ethdev.c | 6 + drivers/net/cnxk/cn10k_rxtx.h | 1 + drivers/net/cnxk/cn10k_tx.h | 265 ++++++++++++++++++--------- drivers/net/cnxk/cn9k_ethdev.c | 6 + drivers/net/cnxk/cn9k_ethdev.h | 1 + drivers/net/cnxk/cn9k_tx.h | 295 ++++++++++++++++++++---------- drivers/net/cnxk/cnxk_ethdev_dp.h | 10 +- 7 files changed, 406 insertions(+), 178 deletions(-) diff --git a/drivers/net/cnxk/cn10k_ethdev.c b/drivers/net/cnxk/cn10k_ethdev.c index a2e943a3d0..a5696c092a 100644 --- a/drivers/net/cnxk/cn10k_ethdev.c +++ b/drivers/net/cnxk/cn10k_ethdev.c @@ -389,7 +389,13 @@ cn10k_nix_tx_queue_stop(struct rte_eth_dev *eth_dev, uint16_t qidx) struct roc_nix_sq *sq = &dev->sqs[qidx]; do { handle_tx_completion_pkts(txq, flags & NIX_TX_VWQE_F); + /* Check if SQ is empty */ roc_nix_sq_head_tail_get(nix, sq->qid, &head, &tail); + if (head != tail) + continue; + + /* Check if completion CQ is empty */ + roc_nix_cq_head_tail_get(nix, sq->cqid, &head, &tail); } while (head != tail); } diff --git a/drivers/net/cnxk/cn10k_rxtx.h b/drivers/net/cnxk/cn10k_rxtx.h index aeffc4ac92..9f33d0192e 100644 --- a/drivers/net/cnxk/cn10k_rxtx.h +++ b/drivers/net/cnxk/cn10k_rxtx.h @@ -177,6 +177,7 @@ handle_tx_completion_pkts(struct cn10k_eth_txq *txq, uint8_t mt_safe) m = m_next; } rte_pktmbuf_free_seg(m); + txq->tx_compl.ptr[tx_compl_s0->sqe_id] = NULL; head++; head &= qmask; diff --git a/drivers/net/cnxk/cn10k_tx.h b/drivers/net/cnxk/cn10k_tx.h index 467f0ccc65..a1e923cd9e 100644 --- a/drivers/net/cnxk/cn10k_tx.h +++ b/drivers/net/cnxk/cn10k_tx.h @@ -786,8 +786,9 @@ cn10k_nix_prep_sec(struct rte_mbuf *m, uint64_t *cmd, uintptr_t *nixtx_addr, static __rte_always_inline uint64_t cn10k_nix_prefree_seg(struct rte_mbuf *m, struct cn10k_eth_txq *txq, - struct nix_send_hdr_s *send_hdr) + struct nix_send_hdr_s *send_hdr, uint64_t *aura) { + struct rte_mbuf *prev = NULL; uint32_t sqe_id; if (RTE_MBUF_HAS_EXTBUF(m)) { @@ -796,7 +797,10 @@ cn10k_nix_prefree_seg(struct rte_mbuf *m, struct cn10k_eth_txq *txq, return 1; } if (send_hdr->w0.pnc) { - txq->tx_compl.ptr[send_hdr->w1.sqe_id]->next = m; + sqe_id = send_hdr->w1.sqe_id; + prev = txq->tx_compl.ptr[sqe_id]; + m->next = prev; + txq->tx_compl.ptr[sqe_id] = m; } else { sqe_id = __atomic_fetch_add(&txq->tx_compl.sqe_id, 1, __ATOMIC_RELAXED); send_hdr->w0.pnc = 1; @@ -806,10 +810,151 @@ cn10k_nix_prefree_seg(struct rte_mbuf *m, struct cn10k_eth_txq *txq, } return 1; } else { - return cnxk_nix_prefree_seg(m); + return cnxk_nix_prefree_seg(m, aura); } } +#if defined(RTE_ARCH_ARM64) +/* Only called for first segments of single segmented mbufs */ +static __rte_always_inline void +cn10k_nix_prefree_seg_vec(struct rte_mbuf **mbufs, struct cn10k_eth_txq *txq, + uint64x2_t *senddesc01_w0, uint64x2_t *senddesc23_w0, + uint64x2_t *senddesc01_w1, uint64x2_t *senddesc23_w1) +{ + struct rte_mbuf **tx_compl_ptr = txq->tx_compl.ptr; + uint32_t nb_desc_mask = txq->tx_compl.nb_desc_mask; + bool tx_compl_ena = txq->tx_compl.ena; + struct rte_mbuf *m0, *m1, *m2, *m3; + struct rte_mbuf *cookie; + uint64_t w0, w1, aura; + uint64_t sqe_id; + + m0 = mbufs[0]; + m1 = mbufs[1]; + m2 = mbufs[2]; + m3 = mbufs[3]; + + /* mbuf 0 */ + w0 = vgetq_lane_u64(*senddesc01_w0, 0); + if (RTE_MBUF_HAS_EXTBUF(m0)) { + w0 |= BIT_ULL(19); + w1 = vgetq_lane_u64(*senddesc01_w1, 0); + w1 &= ~0xFFFF000000000000UL; + if (unlikely(!tx_compl_ena)) { + rte_pktmbuf_free_seg(m0); + } else { + sqe_id = __atomic_fetch_add(&txq->tx_compl.sqe_id, 1, __ATOMIC_RELAXED); + sqe_id = sqe_id & nb_desc_mask; + /* Set PNC */ + w0 |= BIT_ULL(43); + w1 |= sqe_id << 48; + tx_compl_ptr[sqe_id] = m0; + *senddesc01_w1 = vsetq_lane_u64(w1, *senddesc01_w1, 0); + } + } else { + cookie = RTE_MBUF_DIRECT(m0) ? m0 : rte_mbuf_from_indirect(m0); + aura = (w0 >> 20) & 0xFFFFF; + w0 &= ~0xFFFFF00000UL; + w0 |= cnxk_nix_prefree_seg(m0, &aura) << 19; + w0 |= aura << 20; + + if ((w0 & BIT_ULL(19)) == 0) + RTE_MEMPOOL_CHECK_COOKIES(cookie->pool, (void **)&cookie, 1, 0); + } + *senddesc01_w0 = vsetq_lane_u64(w0, *senddesc01_w0, 0); + + /* mbuf1 */ + w0 = vgetq_lane_u64(*senddesc01_w0, 1); + if (RTE_MBUF_HAS_EXTBUF(m1)) { + w0 |= BIT_ULL(19); + w1 = vgetq_lane_u64(*senddesc01_w1, 1); + w1 &= ~0xFFFF000000000000UL; + if (unlikely(!tx_compl_ena)) { + rte_pktmbuf_free_seg(m1); + } else { + sqe_id = __atomic_fetch_add(&txq->tx_compl.sqe_id, 1, __ATOMIC_RELAXED); + sqe_id = sqe_id & nb_desc_mask; + /* Set PNC */ + w0 |= BIT_ULL(43); + w1 |= sqe_id << 48; + tx_compl_ptr[sqe_id] = m1; + *senddesc01_w1 = vsetq_lane_u64(w1, *senddesc01_w1, 1); + } + } else { + cookie = RTE_MBUF_DIRECT(m1) ? m1 : rte_mbuf_from_indirect(m1); + aura = (w0 >> 20) & 0xFFFFF; + w0 &= ~0xFFFFF00000UL; + w0 |= cnxk_nix_prefree_seg(m1, &aura) << 19; + w0 |= aura << 20; + + if ((w0 & BIT_ULL(19)) == 0) + RTE_MEMPOOL_CHECK_COOKIES(cookie->pool, (void **)&cookie, 1, 0); + } + *senddesc01_w0 = vsetq_lane_u64(w0, *senddesc01_w0, 1); + + /* mbuf 2 */ + w0 = vgetq_lane_u64(*senddesc23_w0, 0); + if (RTE_MBUF_HAS_EXTBUF(m2)) { + w0 |= BIT_ULL(19); + w1 = vgetq_lane_u64(*senddesc23_w1, 0); + w1 &= ~0xFFFF000000000000UL; + if (unlikely(!tx_compl_ena)) { + rte_pktmbuf_free_seg(m2); + } else { + sqe_id = __atomic_fetch_add(&txq->tx_compl.sqe_id, 1, __ATOMIC_RELAXED); + sqe_id = sqe_id & nb_desc_mask; + /* Set PNC */ + w0 |= BIT_ULL(43); + w1 |= sqe_id << 48; + tx_compl_ptr[sqe_id] = m2; + *senddesc23_w1 = vsetq_lane_u64(w1, *senddesc23_w1, 0); + } + } else { + cookie = RTE_MBUF_DIRECT(m2) ? m2 : rte_mbuf_from_indirect(m2); + aura = (w0 >> 20) & 0xFFFFF; + w0 &= ~0xFFFFF00000UL; + w0 |= cnxk_nix_prefree_seg(m2, &aura) << 19; + w0 |= aura << 20; + + if ((w0 & BIT_ULL(19)) == 0) + RTE_MEMPOOL_CHECK_COOKIES(cookie->pool, (void **)&cookie, 1, 0); + } + *senddesc23_w0 = vsetq_lane_u64(w0, *senddesc23_w0, 0); + + /* mbuf3 */ + w0 = vgetq_lane_u64(*senddesc23_w0, 1); + if (RTE_MBUF_HAS_EXTBUF(m3)) { + w0 |= BIT_ULL(19); + w1 = vgetq_lane_u64(*senddesc23_w1, 1); + w1 &= ~0xFFFF000000000000UL; + if (unlikely(!tx_compl_ena)) { + rte_pktmbuf_free_seg(m3); + } else { + sqe_id = __atomic_fetch_add(&txq->tx_compl.sqe_id, 1, __ATOMIC_RELAXED); + sqe_id = sqe_id & nb_desc_mask; + /* Set PNC */ + w0 |= BIT_ULL(43); + w1 |= sqe_id << 48; + tx_compl_ptr[sqe_id] = m3; + *senddesc23_w1 = vsetq_lane_u64(w1, *senddesc23_w1, 1); + } + } else { + cookie = RTE_MBUF_DIRECT(m3) ? m3 : rte_mbuf_from_indirect(m3); + aura = (w0 >> 20) & 0xFFFFF; + w0 &= ~0xFFFFF00000UL; + w0 |= cnxk_nix_prefree_seg(m3, &aura) << 19; + w0 |= aura << 20; + + if ((w0 & BIT_ULL(19)) == 0) + RTE_MEMPOOL_CHECK_COOKIES(cookie->pool, (void **)&cookie, 1, 0); + } + *senddesc23_w0 = vsetq_lane_u64(w0, *senddesc23_w0, 1); +#ifndef RTE_LIBRTE_MEMPOOL_DEBUG + RTE_SET_USED(cookie); +#endif +} +#endif + static __rte_always_inline void cn10k_nix_xmit_prepare_tso(struct rte_mbuf *m, const uint64_t flags) { @@ -889,6 +1034,9 @@ cn10k_nix_xmit_prepare(struct cn10k_eth_txq *txq, sg = (union nix_send_sg_s *)(cmd + 2); } + if (flags & NIX_TX_OFFLOAD_MBUF_NOFF_F) + send_hdr->w0.pnc = 0; + if (flags & (NIX_TX_NEED_SEND_HDR_W1 | NIX_TX_OFFLOAD_SECURITY_F)) { ol_flags = m->ol_flags; w1.u = 0; @@ -1049,19 +1197,30 @@ cn10k_nix_xmit_prepare(struct cn10k_eth_txq *txq, send_hdr->w1.u = w1.u; if (!(flags & NIX_TX_MULTI_SEG_F)) { + struct rte_mbuf *cookie; + sg->seg1_size = send_hdr->w0.total; *(rte_iova_t *)(sg + 1) = rte_mbuf_data_iova(m); + cookie = RTE_MBUF_DIRECT(m) ? m : rte_mbuf_from_indirect(m); if (flags & NIX_TX_OFFLOAD_MBUF_NOFF_F) { + uint64_t aura; + /* DF bit = 1 if refcount of current mbuf or parent mbuf * is greater than 1 * DF bit = 0 otherwise */ - send_hdr->w0.df = cn10k_nix_prefree_seg(m, txq, send_hdr); + aura = send_hdr->w0.aura; + send_hdr->w0.df = cn10k_nix_prefree_seg(m, txq, send_hdr, &aura); + send_hdr->w0.aura = aura; } +#ifdef RTE_LIBRTE_MEMPOOL_DEBUG /* Mark mempool object as "put" since it is freed by NIX */ if (!send_hdr->w0.df) - RTE_MEMPOOL_CHECK_COOKIES(m->pool, (void **)&m, 1, 0); + RTE_MEMPOOL_CHECK_COOKIES(cookie->pool, (void **)&cookie, 1, 0); +#else + RTE_SET_USED(cookie); +#endif } else { sg->seg1_size = m->data_len; *(rte_iova_t *)(sg + 1) = rte_mbuf_data_iova(m); @@ -1135,6 +1294,7 @@ cn10k_nix_prepare_mseg(struct cn10k_eth_txq *txq, struct nix_send_hdr_s *send_hdr; union nix_send_sg_s *sg, l_sg; union nix_send_sg2_s l_sg2; + struct rte_mbuf *cookie; struct rte_mbuf *m_next; uint8_t off, is_sg2; uint64_t len, dlen; @@ -1163,21 +1323,26 @@ cn10k_nix_prepare_mseg(struct cn10k_eth_txq *txq, len -= dlen; nb_segs = m->nb_segs - 1; m_next = m->next; + m->next = NULL; slist = &cmd[3 + off + 1]; + cookie = RTE_MBUF_DIRECT(m) ? m : rte_mbuf_from_indirect(m); /* Set invert df if buffer is not to be freed by H/W */ if (flags & NIX_TX_OFFLOAD_MBUF_NOFF_F) { - prefree = cn10k_nix_prefree_seg(m, txq, send_hdr); + aura = send_hdr->w0.aura; + prefree = cn10k_nix_prefree_seg(m, txq, send_hdr, &aura); + send_hdr->w0.aura = aura; l_sg.i1 = prefree; } #ifdef RTE_LIBRTE_MEMPOOL_DEBUG /* Mark mempool object as "put" since it is freed by NIX */ if (!prefree) - RTE_MEMPOOL_CHECK_COOKIES(m->pool, (void **)&m, 1, 0); + RTE_MEMPOOL_CHECK_COOKIES(cookie->pool, (void **)&cookie, 1, 0); rte_io_wmb(); +#else + RTE_SET_USED(cookie); #endif - m->next = NULL; /* Quickly handle single segmented packets. With this if-condition * compiler will completely optimize out the below do-while loop @@ -1207,9 +1372,12 @@ cn10k_nix_prepare_mseg(struct cn10k_eth_txq *txq, aura = aura0; prefree = 0; + m->next = NULL; + + cookie = RTE_MBUF_DIRECT(m) ? m : rte_mbuf_from_indirect(m); if (flags & NIX_TX_OFFLOAD_MBUF_NOFF_F) { aura = roc_npa_aura_handle_to_aura(m->pool->pool_id); - prefree = cn10k_nix_prefree_seg(m, txq, send_hdr); + prefree = cn10k_nix_prefree_seg(m, txq, send_hdr, &aura); is_sg2 = aura != aura0 && !prefree; } @@ -1259,13 +1427,14 @@ cn10k_nix_prepare_mseg(struct cn10k_eth_txq *txq, l_sg.subdc = NIX_SUBDC_SG; slist++; } - m->next = NULL; #ifdef RTE_LIBRTE_MEMPOOL_DEBUG /* Mark mempool object as "put" since it is freed by NIX */ if (!prefree) - RTE_MEMPOOL_CHECK_COOKIES(m->pool, (void **)&m, 1, 0); + RTE_MEMPOOL_CHECK_COOKIES(cookie->pool, (void **)&cookie, 1, 0); +#else + RTE_SET_USED(cookie); #endif m = m_next; } while (nb_segs); @@ -1997,13 +2166,10 @@ cn10k_nix_xmit_pkts_vector(void *tx_queue, uint64_t *ws, uint64x2_t sgdesc01_w0, sgdesc23_w0; uint64x2_t sgdesc01_w1, sgdesc23_w1; struct cn10k_eth_txq *txq = tx_queue; - uint64x2_t xmask01_w0, xmask23_w0; - uint64x2_t xmask01_w1, xmask23_w1; rte_iova_t io_addr = txq->io_addr; uint8_t lnum, shift = 0, loff = 0; uintptr_t laddr = txq->lmt_base; uint8_t c_lnum, c_shft, c_loff; - struct nix_send_hdr_s send_hdr; uint64x2_t ltypes01, ltypes23; uint64x2_t xtmp128, ytmp128; uint64x2_t xmask01, xmask23; @@ -2153,7 +2319,7 @@ cn10k_nix_xmit_pkts_vector(void *tx_queue, uint64_t *ws, } /* Clear lower 32bit of SEND_HDR_W0 and SEND_SG_W0 */ senddesc01_w0 = - vbicq_u64(senddesc01_w0, vdupq_n_u64(0xFFFFFFFF)); + vbicq_u64(senddesc01_w0, vdupq_n_u64(0x800FFFFFFFF)); sgdesc01_w0 = vbicq_u64(sgdesc01_w0, vdupq_n_u64(0xFFFFFFFF)); senddesc23_w0 = senddesc01_w0; @@ -2859,73 +3025,8 @@ cn10k_nix_xmit_pkts_vector(void *tx_queue, uint64_t *ws, !(flags & NIX_TX_MULTI_SEG_F) && !(flags & NIX_TX_OFFLOAD_SECURITY_F)) { /* Set don't free bit if reference count > 1 */ - xmask01_w0 = vdupq_n_u64(0); - xmask01_w1 = vdupq_n_u64(0); - xmask23_w0 = xmask01_w0; - xmask23_w1 = xmask01_w1; - - /* Move mbufs to iova */ - mbuf0 = (uint64_t *)tx_pkts[0]; - mbuf1 = (uint64_t *)tx_pkts[1]; - mbuf2 = (uint64_t *)tx_pkts[2]; - mbuf3 = (uint64_t *)tx_pkts[3]; - - send_hdr.w0.u = 0; - send_hdr.w1.u = 0; - - if (cn10k_nix_prefree_seg((struct rte_mbuf *)mbuf0, txq, &send_hdr)) { - send_hdr.w0.df = 1; - xmask01_w0 = vsetq_lane_u64(send_hdr.w0.u, xmask01_w0, 0); - xmask01_w1 = vsetq_lane_u64(send_hdr.w1.u, xmask01_w1, 0); - } else { - RTE_MEMPOOL_CHECK_COOKIES( - ((struct rte_mbuf *)mbuf0)->pool, - (void **)&mbuf0, 1, 0); - } - - send_hdr.w0.u = 0; - send_hdr.w1.u = 0; - - if (cn10k_nix_prefree_seg((struct rte_mbuf *)mbuf1, txq, &send_hdr)) { - send_hdr.w0.df = 1; - xmask01_w0 = vsetq_lane_u64(send_hdr.w0.u, xmask01_w0, 1); - xmask01_w1 = vsetq_lane_u64(send_hdr.w1.u, xmask01_w1, 1); - } else { - RTE_MEMPOOL_CHECK_COOKIES( - ((struct rte_mbuf *)mbuf1)->pool, - (void **)&mbuf1, 1, 0); - } - - send_hdr.w0.u = 0; - send_hdr.w1.u = 0; - - if (cn10k_nix_prefree_seg((struct rte_mbuf *)mbuf2, txq, &send_hdr)) { - send_hdr.w0.df = 1; - xmask23_w0 = vsetq_lane_u64(send_hdr.w0.u, xmask23_w0, 0); - xmask23_w1 = vsetq_lane_u64(send_hdr.w1.u, xmask23_w1, 0); - } else { - RTE_MEMPOOL_CHECK_COOKIES( - ((struct rte_mbuf *)mbuf2)->pool, - (void **)&mbuf2, 1, 0); - } - - send_hdr.w0.u = 0; - send_hdr.w1.u = 0; - - if (cn10k_nix_prefree_seg((struct rte_mbuf *)mbuf3, txq, &send_hdr)) { - send_hdr.w0.df = 1; - xmask23_w0 = vsetq_lane_u64(send_hdr.w0.u, xmask23_w0, 1); - xmask23_w1 = vsetq_lane_u64(send_hdr.w1.u, xmask23_w1, 1); - } else { - RTE_MEMPOOL_CHECK_COOKIES( - ((struct rte_mbuf *)mbuf3)->pool, - (void **)&mbuf3, 1, 0); - } - - senddesc01_w0 = vorrq_u64(senddesc01_w0, xmask01_w0); - senddesc23_w0 = vorrq_u64(senddesc23_w0, xmask23_w0); - senddesc01_w1 = vorrq_u64(senddesc01_w1, xmask01_w1); - senddesc23_w1 = vorrq_u64(senddesc23_w1, xmask23_w1); + cn10k_nix_prefree_seg_vec(tx_pkts, txq, &senddesc01_w0, &senddesc23_w0, + &senddesc01_w1, &senddesc23_w1); } else if (!(flags & NIX_TX_MULTI_SEG_F) && !(flags & NIX_TX_OFFLOAD_SECURITY_F)) { /* Move mbufs to iova */ diff --git a/drivers/net/cnxk/cn9k_ethdev.c b/drivers/net/cnxk/cn9k_ethdev.c index 67f21a9c7f..ea92b1dcb6 100644 --- a/drivers/net/cnxk/cn9k_ethdev.c +++ b/drivers/net/cnxk/cn9k_ethdev.c @@ -347,7 +347,13 @@ cn9k_nix_tx_queue_stop(struct rte_eth_dev *eth_dev, uint16_t qidx) struct roc_nix_sq *sq = &dev->sqs[qidx]; do { handle_tx_completion_pkts(txq, 0); + /* Check if SQ is empty */ roc_nix_sq_head_tail_get(nix, sq->qid, &head, &tail); + if (head != tail) + continue; + + /* Check if completion CQ is empty */ + roc_nix_cq_head_tail_get(nix, sq->cqid, &head, &tail); } while (head != tail); } diff --git a/drivers/net/cnxk/cn9k_ethdev.h b/drivers/net/cnxk/cn9k_ethdev.h index 9e0a3c5bb2..6ae0db62ca 100644 --- a/drivers/net/cnxk/cn9k_ethdev.h +++ b/drivers/net/cnxk/cn9k_ethdev.h @@ -169,6 +169,7 @@ handle_tx_completion_pkts(struct cn9k_eth_txq *txq, uint8_t mt_safe) m = m_next; } rte_pktmbuf_free_seg(m); + txq->tx_compl.ptr[tx_compl_s0->sqe_id] = NULL; head++; head &= qmask; diff --git a/drivers/net/cnxk/cn9k_tx.h b/drivers/net/cnxk/cn9k_tx.h index fba4bb4215..e6512471b9 100644 --- a/drivers/net/cnxk/cn9k_tx.h +++ b/drivers/net/cnxk/cn9k_tx.h @@ -83,9 +83,10 @@ cn9k_nix_tx_skeleton(struct cn9k_eth_txq *txq, uint64_t *cmd, } static __rte_always_inline uint64_t -cn9k_nix_prefree_seg(struct rte_mbuf *m, struct cn9k_eth_txq *txq, - struct nix_send_hdr_s *send_hdr) +cn9k_nix_prefree_seg(struct rte_mbuf *m, struct cn9k_eth_txq *txq, struct nix_send_hdr_s *send_hdr, + uint64_t *aura) { + struct rte_mbuf *prev; uint32_t sqe_id; if (RTE_MBUF_HAS_EXTBUF(m)) { @@ -94,7 +95,10 @@ cn9k_nix_prefree_seg(struct rte_mbuf *m, struct cn9k_eth_txq *txq, return 1; } if (send_hdr->w0.pnc) { - txq->tx_compl.ptr[send_hdr->w1.sqe_id]->next = m; + sqe_id = send_hdr->w1.sqe_id; + prev = txq->tx_compl.ptr[sqe_id]; + m->next = prev; + txq->tx_compl.ptr[sqe_id] = m; } else { sqe_id = __atomic_fetch_add(&txq->tx_compl.sqe_id, 1, __ATOMIC_RELAXED); send_hdr->w0.pnc = 1; @@ -104,10 +108,151 @@ cn9k_nix_prefree_seg(struct rte_mbuf *m, struct cn9k_eth_txq *txq, } return 1; } else { - return cnxk_nix_prefree_seg(m); + return cnxk_nix_prefree_seg(m, aura); } } +#if defined(RTE_ARCH_ARM64) +/* Only called for first segments of single segmented mbufs */ +static __rte_always_inline void +cn9k_nix_prefree_seg_vec(struct rte_mbuf **mbufs, struct cn9k_eth_txq *txq, + uint64x2_t *senddesc01_w0, uint64x2_t *senddesc23_w0, + uint64x2_t *senddesc01_w1, uint64x2_t *senddesc23_w1) +{ + struct rte_mbuf **tx_compl_ptr = txq->tx_compl.ptr; + uint32_t nb_desc_mask = txq->tx_compl.nb_desc_mask; + bool tx_compl_ena = txq->tx_compl.ena; + struct rte_mbuf *m0, *m1, *m2, *m3; + struct rte_mbuf *cookie; + uint64_t w0, w1, aura; + uint64_t sqe_id; + + m0 = mbufs[0]; + m1 = mbufs[1]; + m2 = mbufs[2]; + m3 = mbufs[3]; + + /* mbuf 0 */ + w0 = vgetq_lane_u64(*senddesc01_w0, 0); + if (RTE_MBUF_HAS_EXTBUF(m0)) { + w0 |= BIT_ULL(19); + w1 = vgetq_lane_u64(*senddesc01_w1, 0); + w1 &= ~0xFFFF000000000000UL; + if (unlikely(!tx_compl_ena)) { + rte_pktmbuf_free_seg(m0); + } else { + sqe_id = __atomic_fetch_add(&txq->tx_compl.sqe_id, 1, __ATOMIC_RELAXED); + sqe_id = sqe_id & nb_desc_mask; + /* Set PNC */ + w0 |= BIT_ULL(43); + w1 |= sqe_id << 48; + tx_compl_ptr[sqe_id] = m0; + *senddesc01_w1 = vsetq_lane_u64(w1, *senddesc01_w1, 0); + } + } else { + cookie = RTE_MBUF_DIRECT(m0) ? m0 : rte_mbuf_from_indirect(m0); + aura = (w0 >> 20) & 0xFFFFF; + w0 &= ~0xFFFFF00000UL; + w0 |= cnxk_nix_prefree_seg(m0, &aura) << 19; + w0 |= aura << 20; + + if ((w0 & BIT_ULL(19)) == 0) + RTE_MEMPOOL_CHECK_COOKIES(cookie->pool, (void **)&cookie, 1, 0); + } + *senddesc01_w0 = vsetq_lane_u64(w0, *senddesc01_w0, 0); + + /* mbuf1 */ + w0 = vgetq_lane_u64(*senddesc01_w0, 1); + if (RTE_MBUF_HAS_EXTBUF(m1)) { + w0 |= BIT_ULL(19); + w1 = vgetq_lane_u64(*senddesc01_w1, 1); + w1 &= ~0xFFFF000000000000UL; + if (unlikely(!tx_compl_ena)) { + rte_pktmbuf_free_seg(m1); + } else { + sqe_id = __atomic_fetch_add(&txq->tx_compl.sqe_id, 1, __ATOMIC_RELAXED); + sqe_id = sqe_id & nb_desc_mask; + /* Set PNC */ + w0 |= BIT_ULL(43); + w1 |= sqe_id << 48; + tx_compl_ptr[sqe_id] = m1; + *senddesc01_w1 = vsetq_lane_u64(w1, *senddesc01_w1, 1); + } + } else { + cookie = RTE_MBUF_DIRECT(m1) ? m1 : rte_mbuf_from_indirect(m1); + aura = (w0 >> 20) & 0xFFFFF; + w0 &= ~0xFFFFF00000UL; + w0 |= cnxk_nix_prefree_seg(m1, &aura) << 19; + w0 |= aura << 20; + + if ((w0 & BIT_ULL(19)) == 0) + RTE_MEMPOOL_CHECK_COOKIES(cookie->pool, (void **)&cookie, 1, 0); + } + *senddesc01_w0 = vsetq_lane_u64(w0, *senddesc01_w0, 1); + + /* mbuf 2 */ + w0 = vgetq_lane_u64(*senddesc23_w0, 0); + if (RTE_MBUF_HAS_EXTBUF(m2)) { + w0 |= BIT_ULL(19); + w1 = vgetq_lane_u64(*senddesc23_w1, 0); + w1 &= ~0xFFFF000000000000UL; + if (unlikely(!tx_compl_ena)) { + rte_pktmbuf_free_seg(m2); + } else { + sqe_id = __atomic_fetch_add(&txq->tx_compl.sqe_id, 1, __ATOMIC_RELAXED); + sqe_id = sqe_id & nb_desc_mask; + /* Set PNC */ + w0 |= BIT_ULL(43); + w1 |= sqe_id << 48; + tx_compl_ptr[sqe_id] = m2; + *senddesc23_w1 = vsetq_lane_u64(w1, *senddesc23_w1, 0); + } + } else { + cookie = RTE_MBUF_DIRECT(m2) ? m2 : rte_mbuf_from_indirect(m2); + aura = (w0 >> 20) & 0xFFFFF; + w0 &= ~0xFFFFF00000UL; + w0 |= cnxk_nix_prefree_seg(m2, &aura) << 19; + w0 |= aura << 20; + + if ((w0 & BIT_ULL(19)) == 0) + RTE_MEMPOOL_CHECK_COOKIES(cookie->pool, (void **)&cookie, 1, 0); + } + *senddesc23_w0 = vsetq_lane_u64(w0, *senddesc23_w0, 0); + + /* mbuf3 */ + w0 = vgetq_lane_u64(*senddesc23_w0, 1); + if (RTE_MBUF_HAS_EXTBUF(m3)) { + w0 |= BIT_ULL(19); + w1 = vgetq_lane_u64(*senddesc23_w1, 1); + w1 &= ~0xFFFF000000000000UL; + if (unlikely(!tx_compl_ena)) { + rte_pktmbuf_free_seg(m3); + } else { + sqe_id = __atomic_fetch_add(&txq->tx_compl.sqe_id, 1, __ATOMIC_RELAXED); + sqe_id = sqe_id & nb_desc_mask; + /* Set PNC */ + w0 |= BIT_ULL(43); + w1 |= sqe_id << 48; + tx_compl_ptr[sqe_id] = m3; + *senddesc23_w1 = vsetq_lane_u64(w1, *senddesc23_w1, 1); + } + } else { + cookie = RTE_MBUF_DIRECT(m3) ? m3 : rte_mbuf_from_indirect(m3); + aura = (w0 >> 20) & 0xFFFFF; + w0 &= ~0xFFFFF00000UL; + w0 |= cnxk_nix_prefree_seg(m3, &aura) << 19; + w0 |= aura << 20; + + if ((w0 & BIT_ULL(19)) == 0) + RTE_MEMPOOL_CHECK_COOKIES(cookie->pool, (void **)&cookie, 1, 0); + } + *senddesc23_w0 = vsetq_lane_u64(w0, *senddesc23_w0, 1); +#ifndef RTE_LIBRTE_MEMPOOL_DEBUG + RTE_SET_USED(cookie); +#endif +} +#endif + static __rte_always_inline void cn9k_nix_xmit_prepare_tso(struct rte_mbuf *m, const uint64_t flags) { @@ -191,6 +336,8 @@ cn9k_nix_xmit_prepare(struct cn9k_eth_txq *txq, ol_flags = m->ol_flags; w1.u = 0; } + if (flags & NIX_TX_OFFLOAD_MBUF_NOFF_F) + send_hdr->w0.pnc = 0; if (!(flags & NIX_TX_MULTI_SEG_F)) send_hdr->w0.total = m->data_len; @@ -345,23 +492,33 @@ cn9k_nix_xmit_prepare(struct cn9k_eth_txq *txq, send_hdr->w1.u = w1.u; if (!(flags & NIX_TX_MULTI_SEG_F)) { + struct rte_mbuf *cookie; + sg->seg1_size = m->data_len; *(rte_iova_t *)(++sg) = rte_mbuf_data_iova(m); + cookie = RTE_MBUF_DIRECT(m) ? m : rte_mbuf_from_indirect(m); if (flags & NIX_TX_OFFLOAD_MBUF_NOFF_F) { + uint64_t aura; /* DF bit = 1 if refcount of current mbuf or parent mbuf * is greater than 1 * DF bit = 0 otherwise */ - send_hdr->w0.df = cn9k_nix_prefree_seg(m, txq, send_hdr); + aura = send_hdr->w0.aura; + send_hdr->w0.df = cn9k_nix_prefree_seg(m, txq, send_hdr, &aura); + send_hdr->w0.aura = aura; /* Ensuring mbuf fields which got updated in * cnxk_nix_prefree_seg are written before LMTST. */ rte_io_wmb(); } +#ifdef RTE_LIBRTE_MEMPOOL_DEBUG /* Mark mempool object as "put" since it is freed by NIX */ if (!send_hdr->w0.df) - RTE_MEMPOOL_CHECK_COOKIES(m->pool, (void **)&m, 1, 0); + RTE_MEMPOOL_CHECK_COOKIES(cookie->pool, (void **)&cookie, 1, 0); +#else + RTE_SET_USED(cookie); +#endif } else { sg->seg1_size = m->data_len; *(rte_iova_t *)(sg + 1) = rte_mbuf_data_iova(m); @@ -443,6 +600,8 @@ cn9k_nix_prepare_mseg(struct cn9k_eth_txq *txq, struct rte_mbuf *m, uint64_t *cmd, const uint16_t flags) { struct nix_send_hdr_s *send_hdr; + uint64_t prefree = 0, aura; + struct rte_mbuf *cookie; union nix_send_sg_s *sg; struct rte_mbuf *m_next; uint64_t *slist, sg_u; @@ -467,17 +626,23 @@ cn9k_nix_prepare_mseg(struct cn9k_eth_txq *txq, m_next = m->next; slist = &cmd[3 + off + 1]; + cookie = RTE_MBUF_DIRECT(m) ? m : rte_mbuf_from_indirect(m); /* Set invert df if buffer is not to be freed by H/W */ if (flags & NIX_TX_OFFLOAD_MBUF_NOFF_F) { - sg_u |= (cn9k_nix_prefree_seg(m, txq, send_hdr) << 55); + aura = send_hdr->w0.aura; + prefree = (cn9k_nix_prefree_seg(m, txq, send_hdr, &aura) << 55); + send_hdr->w0.aura = aura; + sg_u |= prefree; rte_io_wmb(); } /* Mark mempool object as "put" since it is freed by NIX */ #ifdef RTE_LIBRTE_MEMPOOL_DEBUG if (!(sg_u & (1ULL << 55))) - RTE_MEMPOOL_CHECK_COOKIES(m->pool, (void **)&m, 1, 0); + RTE_MEMPOOL_CHECK_COOKIES(cookie->pool, (void **)&cookie, 1, 0); rte_io_wmb(); +#else + RTE_SET_USED(cookie); #endif m = m_next; if (!m) @@ -488,16 +653,17 @@ cn9k_nix_prepare_mseg(struct cn9k_eth_txq *txq, m_next = m->next; sg_u = sg_u | ((uint64_t)m->data_len << (i << 4)); *slist = rte_mbuf_data_iova(m); + cookie = RTE_MBUF_DIRECT(m) ? m : rte_mbuf_from_indirect(m); /* Set invert df if buffer is not to be freed by H/W */ if (flags & NIX_TX_OFFLOAD_MBUF_NOFF_F) { - sg_u |= (cn9k_nix_prefree_seg(m, txq, send_hdr) << (i + 55)); + sg_u |= (cn9k_nix_prefree_seg(m, txq, send_hdr, NULL) << (i + 55)); /* Commit changes to mbuf */ rte_io_wmb(); } /* Mark mempool object as "put" since it is freed by NIX */ #ifdef RTE_LIBRTE_MEMPOOL_DEBUG if (!(sg_u & (1ULL << (i + 55)))) - RTE_MEMPOOL_CHECK_COOKIES(m->pool, (void **)&m, 1, 0); + RTE_MEMPOOL_CHECK_COOKIES(cookie->pool, (void **)&cookie, 1, 0); rte_io_wmb(); #endif slist++; @@ -709,8 +875,8 @@ cn9k_nix_prepare_mseg_vec_list(struct cn9k_eth_txq *txq, struct nix_send_hdr_s *send_hdr, union nix_send_sg_s *sg, const uint32_t flags) { - struct rte_mbuf *m_next; - uint64_t *slist, sg_u; + struct rte_mbuf *m_next, *cookie; + uint64_t *slist, sg_u, aura; uint16_t nb_segs; uint64_t segdw; int i = 1; @@ -727,13 +893,19 @@ cn9k_nix_prepare_mseg_vec_list(struct cn9k_eth_txq *txq, m_next = m->next; /* Set invert df if buffer is not to be freed by H/W */ - if (flags & NIX_TX_OFFLOAD_MBUF_NOFF_F) - sg_u |= (cn9k_nix_prefree_seg(m, txq, send_hdr) << 55); - /* Mark mempool object as "put" since it is freed by NIX */ + cookie = RTE_MBUF_DIRECT(m) ? m : rte_mbuf_from_indirect(m); + if (flags & NIX_TX_OFFLOAD_MBUF_NOFF_F) { + aura = send_hdr->w0.aura; + sg_u |= (cn9k_nix_prefree_seg(m, txq, send_hdr, &aura) << 55); + send_hdr->w0.aura = aura; + } + /* Mark mempool object as "put" since it is freed by NIX */ #ifdef RTE_LIBRTE_MEMPOOL_DEBUG if (!(sg_u & (1ULL << 55))) - RTE_MEMPOOL_CHECK_COOKIES(m->pool, (void **)&m, 1, 0); + RTE_MEMPOOL_CHECK_COOKIES(cookie->pool, (void **)&cookie, 1, 0); rte_io_wmb(); +#else + RTE_SET_USED(cookie); #endif m = m_next; @@ -742,14 +914,15 @@ cn9k_nix_prepare_mseg_vec_list(struct cn9k_eth_txq *txq, m_next = m->next; sg_u = sg_u | ((uint64_t)m->data_len << (i << 4)); *slist = rte_mbuf_data_iova(m); + cookie = RTE_MBUF_DIRECT(m) ? m : rte_mbuf_from_indirect(m); /* Set invert df if buffer is not to be freed by H/W */ if (flags & NIX_TX_OFFLOAD_MBUF_NOFF_F) - sg_u |= (cn9k_nix_prefree_seg(m, txq, send_hdr) << (i + 55)); + sg_u |= (cn9k_nix_prefree_seg(m, txq, send_hdr, &aura) << (i + 55)); /* Mark mempool object as "put" since it is freed by NIX */ #ifdef RTE_LIBRTE_MEMPOOL_DEBUG if (!(sg_u & (1ULL << (i + 55)))) - RTE_MEMPOOL_CHECK_COOKIES(m->pool, (void **)&m, 1, 0); + RTE_MEMPOOL_CHECK_COOKIES(cookie->pool, (void **)&cookie, 1, 0); rte_io_wmb(); #endif slist++; @@ -789,15 +962,20 @@ cn9k_nix_prepare_mseg_vec(struct cn9k_eth_txq *txq, uint64x2_t *cmd1, const uint32_t flags) { struct nix_send_hdr_s send_hdr; + struct rte_mbuf *cookie; union nix_send_sg_s sg; + uint64_t aura; uint8_t ret; if (m->nb_segs == 1) { + cookie = RTE_MBUF_DIRECT(m) ? m : rte_mbuf_from_indirect(m); if (flags & NIX_TX_OFFLOAD_MBUF_NOFF_F) { send_hdr.w0.u = vgetq_lane_u64(cmd0[0], 0); send_hdr.w1.u = vgetq_lane_u64(cmd0[0], 1); sg.u = vgetq_lane_u64(cmd1[0], 0); - sg.u |= (cn9k_nix_prefree_seg(m, txq, &send_hdr) << 55); + aura = send_hdr.w0.aura; + sg.u |= (cn9k_nix_prefree_seg(m, txq, &send_hdr, &aura) << 55); + send_hdr.w0.aura = aura; cmd1[0] = vsetq_lane_u64(sg.u, cmd1[0], 0); cmd0[0] = vsetq_lane_u64(send_hdr.w0.u, cmd0[0], 0); cmd0[0] = vsetq_lane_u64(send_hdr.w1.u, cmd0[0], 1); @@ -806,8 +984,10 @@ cn9k_nix_prepare_mseg_vec(struct cn9k_eth_txq *txq, #ifdef RTE_LIBRTE_MEMPOOL_DEBUG sg.u = vgetq_lane_u64(cmd1[0], 0); if (!(sg.u & (1ULL << 55))) - RTE_MEMPOOL_CHECK_COOKIES(m->pool, (void **)&m, 1, 0); + RTE_MEMPOOL_CHECK_COOKIES(cookie->pool, (void **)&cookie, 1, 0); rte_io_wmb(); +#else + RTE_SET_USED(cookie); #endif return 2 + !!(flags & NIX_TX_NEED_EXT_HDR) + !!(flags & NIX_TX_OFFLOAD_TSTAMP_F); @@ -962,10 +1142,7 @@ cn9k_nix_xmit_pkts_vector(void *tx_queue, struct rte_mbuf **tx_pkts, uint64x2_t sgdesc01_w1, sgdesc23_w1; struct cn9k_eth_txq *txq = tx_queue; uint64_t *lmt_addr = txq->lmt_addr; - uint64x2_t xmask01_w0, xmask23_w0; - uint64x2_t xmask01_w1, xmask23_w1; rte_iova_t io_addr = txq->io_addr; - struct nix_send_hdr_s send_hdr; uint64x2_t ltypes01, ltypes23; uint64x2_t xtmp128, ytmp128; uint64x2_t xmask01, xmask23; @@ -1028,7 +1205,7 @@ cn9k_nix_xmit_pkts_vector(void *tx_queue, struct rte_mbuf **tx_pkts, for (i = 0; i < pkts; i += NIX_DESCS_PER_LOOP) { /* Clear lower 32bit of SEND_HDR_W0 and SEND_SG_W0 */ senddesc01_w0 = - vbicq_u64(senddesc01_w0, vdupq_n_u64(0xFFFFFFFF)); + vbicq_u64(senddesc01_w0, vdupq_n_u64(0x800FFFFFFFF)); sgdesc01_w0 = vbicq_u64(sgdesc01_w0, vdupq_n_u64(0xFFFFFFFF)); senddesc23_w0 = senddesc01_w0; @@ -1732,74 +1909,8 @@ cn9k_nix_xmit_pkts_vector(void *tx_queue, struct rte_mbuf **tx_pkts, if ((flags & NIX_TX_OFFLOAD_MBUF_NOFF_F) && !(flags & NIX_TX_MULTI_SEG_F)) { /* Set don't free bit if reference count > 1 */ - xmask01_w0 = vdupq_n_u64(0); - xmask01_w1 = vdupq_n_u64(0); - xmask23_w0 = xmask01_w0; - xmask23_w1 = xmask01_w1; - - /* Move mbufs to iova */ - mbuf0 = (uint64_t *)tx_pkts[0]; - mbuf1 = (uint64_t *)tx_pkts[1]; - mbuf2 = (uint64_t *)tx_pkts[2]; - mbuf3 = (uint64_t *)tx_pkts[3]; - - send_hdr.w0.u = 0; - send_hdr.w1.u = 0; - - if (cn9k_nix_prefree_seg((struct rte_mbuf *)mbuf0, txq, &send_hdr)) { - send_hdr.w0.df = 1; - xmask01_w0 = vsetq_lane_u64(send_hdr.w0.u, xmask01_w0, 0); - xmask01_w1 = vsetq_lane_u64(send_hdr.w1.u, xmask01_w1, 0); - } else { - RTE_MEMPOOL_CHECK_COOKIES( - ((struct rte_mbuf *)mbuf0)->pool, - (void **)&mbuf0, 1, 0); - } - - send_hdr.w0.u = 0; - send_hdr.w1.u = 0; - - if (cn9k_nix_prefree_seg((struct rte_mbuf *)mbuf1, txq, &send_hdr)) { - send_hdr.w0.df = 1; - xmask01_w0 = vsetq_lane_u64(send_hdr.w0.u, xmask01_w0, 1); - xmask01_w1 = vsetq_lane_u64(send_hdr.w1.u, xmask01_w1, 1); - } else { - RTE_MEMPOOL_CHECK_COOKIES( - ((struct rte_mbuf *)mbuf1)->pool, - (void **)&mbuf1, 1, 0); - } - - send_hdr.w0.u = 0; - send_hdr.w1.u = 0; - - if (cn9k_nix_prefree_seg((struct rte_mbuf *)mbuf2, txq, &send_hdr)) { - send_hdr.w0.df = 1; - xmask23_w0 = vsetq_lane_u64(send_hdr.w0.u, xmask23_w0, 0); - xmask23_w1 = vsetq_lane_u64(send_hdr.w1.u, xmask23_w1, 0); - } else { - RTE_MEMPOOL_CHECK_COOKIES( - ((struct rte_mbuf *)mbuf2)->pool, - (void **)&mbuf2, 1, 0); - } - - send_hdr.w0.u = 0; - send_hdr.w1.u = 0; - - if (cn9k_nix_prefree_seg((struct rte_mbuf *)mbuf3, txq, &send_hdr)) { - send_hdr.w0.df = 1; - xmask23_w0 = vsetq_lane_u64(send_hdr.w0.u, xmask23_w0, 1); - xmask23_w1 = vsetq_lane_u64(send_hdr.w1.u, xmask23_w1, 1); - } else { - RTE_MEMPOOL_CHECK_COOKIES( - ((struct rte_mbuf *)mbuf3)->pool, - (void **)&mbuf3, 1, 0); - } - - senddesc01_w0 = vorrq_u64(senddesc01_w0, xmask01_w0); - senddesc23_w0 = vorrq_u64(senddesc23_w0, xmask23_w0); - senddesc01_w1 = vorrq_u64(senddesc01_w1, xmask01_w1); - senddesc23_w1 = vorrq_u64(senddesc23_w1, xmask23_w1); - + cn9k_nix_prefree_seg_vec(tx_pkts, txq, &senddesc01_w0, &senddesc23_w0, + &senddesc01_w1, &senddesc23_w1); /* Ensuring mbuf fields which got updated in * cnxk_nix_prefree_seg are written before LMTST. */ diff --git a/drivers/net/cnxk/cnxk_ethdev_dp.h b/drivers/net/cnxk/cnxk_ethdev_dp.h index c1f99a2616..67f40b8e25 100644 --- a/drivers/net/cnxk/cnxk_ethdev_dp.h +++ b/drivers/net/cnxk/cnxk_ethdev_dp.h @@ -84,7 +84,7 @@ struct cnxk_timesync_info { /* Inlines */ static __rte_always_inline uint64_t -cnxk_pktmbuf_detach(struct rte_mbuf *m) +cnxk_pktmbuf_detach(struct rte_mbuf *m, uint64_t *aura) { struct rte_mempool *mp = m->pool; uint32_t mbuf_size, buf_len; @@ -94,6 +94,8 @@ cnxk_pktmbuf_detach(struct rte_mbuf *m) /* Update refcount of direct mbuf */ md = rte_mbuf_from_indirect(m); + if (aura) + *aura = roc_npa_aura_handle_to_aura(md->pool->pool_id); refcount = rte_mbuf_refcnt_update(md, -1); priv_size = rte_pktmbuf_priv_size(mp); @@ -126,18 +128,18 @@ cnxk_pktmbuf_detach(struct rte_mbuf *m) } static __rte_always_inline uint64_t -cnxk_nix_prefree_seg(struct rte_mbuf *m) +cnxk_nix_prefree_seg(struct rte_mbuf *m, uint64_t *aura) { if (likely(rte_mbuf_refcnt_read(m) == 1)) { if (!RTE_MBUF_DIRECT(m)) - return cnxk_pktmbuf_detach(m); + return cnxk_pktmbuf_detach(m, aura); m->next = NULL; m->nb_segs = 1; return 0; } else if (rte_mbuf_refcnt_update(m, -1) == 0) { if (!RTE_MBUF_DIRECT(m)) - return cnxk_pktmbuf_detach(m); + return cnxk_pktmbuf_detach(m, aura); rte_mbuf_refcnt_set(m, 1); m->next = NULL; From patchwork Thu Feb 22 11:02:29 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nithin Dabilpuram X-Patchwork-Id: 137025 X-Patchwork-Delegate: jerinj@marvell.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 127EF43B74; Thu, 22 Feb 2024 12:09:12 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B6B36410F6; Thu, 22 Feb 2024 12:08:59 +0100 (CET) Received: from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by mails.dpdk.org (Postfix) with ESMTP id 6F0B040EDC; Thu, 22 Feb 2024 12:08:55 +0100 (CET) Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 41M9BLbU021847; Thu, 22 Feb 2024 03:08:54 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding:content-type; s= pfpt0220; bh=DurS+jOX5yacLJXL4EIZ7ulxfnsMs9cUHoIPT2P6cDs=; b=X8c h/JZroxgtizvPnB2fUlHVqrlUnMO/wUIuJri4okXcH9HqY+gd4OgdCs0bgrnMa5b fA870Y6YrDdpKsVm51xe/OtJpkZtY5vZ1Q7izd5I2EGnyAeUYe5qUVEJPls04Dck 1RAf30junR0Ii8mwDBM5mbW4P1DdXwJilv6zuaOTkBPv5jzoq0zBCinP3niVrKGV I4ddKr9u7tYOz1CuQxmrGuNBoIaHkaKYYfWmPY1+lSALMdXDaQFtW/FS3ivkgJ5f jPMmBb24KSDOD9KV1ZGQSTcqFroCp+u2fR6sxKxatGTBtZtSOfftCQvFQ47/VO+I SS+am/dVTPjgkRGjxxg== Received: from dc5-exch02.marvell.com ([199.233.59.182]) by mx0a-0016f401.pphosted.com (PPS) with ESMTPS id 3we3dw8at4-12 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Thu, 22 Feb 2024 03:08:54 -0800 (PST) Received: from DC5-EXCH01.marvell.com (10.69.176.38) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server (TLS) id 15.0.1497.48; Thu, 22 Feb 2024 03:03:07 -0800 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH01.marvell.com (10.69.176.38) with Microsoft SMTP Server id 15.0.1497.48 via Frontend Transport; Thu, 22 Feb 2024 03:03:07 -0800 Received: from hyd1588t430.caveonetworks.com (unknown [10.29.52.204]) by maili.marvell.com (Postfix) with ESMTP id F13F63F71DD; Thu, 22 Feb 2024 03:03:04 -0800 (PST) From: Nithin Dabilpuram To: Nithin Dabilpuram , Kiran Kumar K , Sunil Kumar Kori , Satha Rao CC: , Rahul Bhansali , Subject: [PATCH v4 11/14] net/cnxk: fix check cookies for multi-seg offload Date: Thu, 22 Feb 2024 16:32:29 +0530 Message-ID: <20240222110232.2342903-11-ndabilpuram@marvell.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240222110232.2342903-1-ndabilpuram@marvell.com> References: <20240208085956.1741174-1-ndabilpuram@marvell.com> <20240222110232.2342903-1-ndabilpuram@marvell.com> MIME-Version: 1.0 X-Proofpoint-GUID: JBiqhgTbGuIHBvB8vdqN90HdkklHLhrT X-Proofpoint-ORIG-GUID: JBiqhgTbGuIHBvB8vdqN90HdkklHLhrT X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-02-22_09,2024-02-22_01,2023-05-22_02 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org From: Rahul Bhansali Fix missing check cookies with multi-seg offload case Fixes: 3626d5195d49 ("net/cnxk: add multi-segment Tx for CN10K") Cc: stable@dpdk.org Signed-off-by: Rahul Bhansali --- drivers/net/cnxk/cn10k_tx.h | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/drivers/net/cnxk/cn10k_tx.h b/drivers/net/cnxk/cn10k_tx.h index a1e923cd9e..ad4cbf7ffa 100644 --- a/drivers/net/cnxk/cn10k_tx.h +++ b/drivers/net/cnxk/cn10k_tx.h @@ -1863,6 +1863,9 @@ cn10k_nix_prepare_mseg_vec_list(struct rte_mbuf *m, uint64_t *cmd, len -= dlen; sg_u = sg_u | ((uint64_t)dlen); + /* Mark mempool object as "put" since it is freed by NIX */ + RTE_MEMPOOL_CHECK_COOKIES(m->pool, (void **)&m, 1, 0); + nb_segs = m->nb_segs - 1; m_next = m->next; m->next = NULL; @@ -1888,6 +1891,9 @@ cn10k_nix_prepare_mseg_vec_list(struct rte_mbuf *m, uint64_t *cmd, slist++; } m->next = NULL; + /* Mark mempool object as "put" since it is freed by NIX */ + RTE_MEMPOOL_CHECK_COOKIES(m->pool, (void **)&m, 1, 0); + m = m_next; } while (nb_segs); @@ -1911,8 +1917,11 @@ cn10k_nix_prepare_mseg_vec(struct rte_mbuf *m, uint64_t *cmd, uint64x2_t *cmd0, union nix_send_hdr_w0_u sh; union nix_send_sg_s sg; - if (m->nb_segs == 1) + if (m->nb_segs == 1) { + /* Mark mempool object as "put" since it is freed by NIX */ + RTE_MEMPOOL_CHECK_COOKIES(m->pool, (void **)&m, 1, 0); return; + } sh.u = vgetq_lane_u64(cmd0[0], 0); sg.u = vgetq_lane_u64(cmd1[0], 0); @@ -1972,6 +1981,11 @@ cn10k_nix_prep_lmt_mseg_vector(struct cn10k_eth_txq *txq, *data128 |= ((__uint128_t)7) << *shift; *shift += 3; + /* Mark mempool object as "put" since it is freed by NIX */ + RTE_MEMPOOL_CHECK_COOKIES(mbufs[0]->pool, (void **)&mbufs[0], 1, 0); + RTE_MEMPOOL_CHECK_COOKIES(mbufs[1]->pool, (void **)&mbufs[1], 1, 0); + RTE_MEMPOOL_CHECK_COOKIES(mbufs[2]->pool, (void **)&mbufs[2], 1, 0); + RTE_MEMPOOL_CHECK_COOKIES(mbufs[3]->pool, (void **)&mbufs[3], 1, 0); return 1; } } @@ -1990,6 +2004,11 @@ cn10k_nix_prep_lmt_mseg_vector(struct cn10k_eth_txq *txq, vst1q_u64(lmt_addr + 10, cmd2[j + 1]); vst1q_u64(lmt_addr + 12, cmd1[j + 1]); vst1q_u64(lmt_addr + 14, cmd3[j + 1]); + + /* Mark mempool object as "put" since it is freed by NIX */ + RTE_MEMPOOL_CHECK_COOKIES(mbufs[j]->pool, (void **)&mbufs[j], 1, 0); + RTE_MEMPOOL_CHECK_COOKIES(mbufs[j + 1]->pool, + (void **)&mbufs[j + 1], 1, 0); } else if (flags & NIX_TX_NEED_EXT_HDR) { /* EXT header take 3 each, space for 2 segs.*/ cn10k_nix_prepare_mseg_vec(mbufs[j], From patchwork Thu Feb 22 11:02:30 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nithin Dabilpuram X-Patchwork-Id: 137024 X-Patchwork-Delegate: jerinj@marvell.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id A503543B74; Thu, 22 Feb 2024 12:09:04 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 55679410E6; Thu, 22 Feb 2024 12:08:58 +0100 (CET) Received: from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by mails.dpdk.org (Postfix) with ESMTP id 1D6CA40F1A; Thu, 22 Feb 2024 12:08:54 +0100 (CET) Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 41M9BLbT021847; Thu, 22 Feb 2024 03:08:54 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding:content-type; s= pfpt0220; bh=eBsYlR1lj45YUiE0MftoKtG/rNJHc+axbLLzKFWHZkE=; b=Jh9 RUhmCKc7Tj3hBCb5DGX/zYs73Z6TWUGw6D0YhhaEyyPzGy152Mavju/o69tqI3jx 13nZHSIgfEwbMtv2k1FrW/2BCcPNXy/jnpiO9HD/7Di8Z4T4LQeVhAorRjO9GubW z6xtvmJNhQEGkRgdgwTi652j9qTIDn5OEnHK4uFvTfdcVVcGYcUpVjqI4XY3pnWj TQJDcLrpiqRGpOvVSyFdQwNKx/6jFkcgD4MgmbP/hlMrDyUpxMl6GZP/vS3qUGk8 CTvWjZgU7mnsYhUqmdm/G2daJujwMet0l68mFaFwzR4ygiEq1hDrYeBDRSaBIuf/ KYEuKAqO9L2Zg94EjUQ== Received: from dc5-exch01.marvell.com ([199.233.59.181]) by mx0a-0016f401.pphosted.com (PPS) with ESMTPS id 3we3dw8b08-11 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Thu, 22 Feb 2024 03:08:54 -0800 (PST) Received: from DC5-EXCH05.marvell.com (10.69.176.209) by DC5-EXCH01.marvell.com (10.69.176.38) with Microsoft SMTP Server (TLS) id 15.0.1497.48; Thu, 22 Feb 2024 03:03:10 -0800 Received: from DC5-EXCH01.marvell.com (10.69.176.38) by DC5-EXCH05.marvell.com (10.69.176.209) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.2.1258.12; Thu, 22 Feb 2024 03:03:09 -0800 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH01.marvell.com (10.69.176.38) with Microsoft SMTP Server id 15.0.1497.48 via Frontend Transport; Thu, 22 Feb 2024 03:03:09 -0800 Received: from hyd1588t430.caveonetworks.com (unknown [10.29.52.204]) by maili.marvell.com (Postfix) with ESMTP id CCC823F71DE; Thu, 22 Feb 2024 03:03:07 -0800 (PST) From: Nithin Dabilpuram To: Nithin Dabilpuram , Kiran Kumar K , Sunil Kumar Kori , Satha Rao CC: , Subject: [PATCH v4 12/14] common/cnxk: add IO attribute to mbox structs Date: Thu, 22 Feb 2024 16:32:30 +0530 Message-ID: <20240222110232.2342903-12-ndabilpuram@marvell.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240222110232.2342903-1-ndabilpuram@marvell.com> References: <20240208085956.1741174-1-ndabilpuram@marvell.com> <20240222110232.2342903-1-ndabilpuram@marvell.com> MIME-Version: 1.0 X-Proofpoint-GUID: iX1ZTQKZhzN9TKSEwTML33cv69nQ5uh2 X-Proofpoint-ORIG-GUID: iX1ZTQKZhzN9TKSEwTML33cv69nQ5uh2 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-02-22_09,2024-02-22_01,2023-05-22_02 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org IO attribute is needed to mbox structs to avoid unaligned or pair access causing by compiler optimization. Add them to structs where it is missing. Fixes: 503b82de2cbf ("common/cnxk: add mbox request and response definitions") Fixes: ddf955d3917e ("common/cnxk: support CPT second pass") Cc: stable@dpdk.org Signed-off-by: Nithin Dabilpuram --- drivers/common/cnxk/roc_mbox.h | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/drivers/common/cnxk/roc_mbox.h b/drivers/common/cnxk/roc_mbox.h index 4b4f48e372..d8a8494ac4 100644 --- a/drivers/common/cnxk/roc_mbox.h +++ b/drivers/common/cnxk/roc_mbox.h @@ -1427,12 +1427,12 @@ struct nix_cn10k_aq_enq_req { struct nix_cn10k_aq_enq_rsp { struct mbox_msghdr hdr; union { - struct nix_cn10k_rq_ctx_s rq; - struct nix_cn10k_sq_ctx_s sq; - struct nix_cq_ctx_s cq; - struct nix_rsse_s rss; - struct nix_rx_mce_s mce; - struct nix_band_prof_s prof; + __io struct nix_cn10k_rq_ctx_s rq; + __io struct nix_cn10k_sq_ctx_s sq; + __io struct nix_cq_ctx_s cq; + __io struct nix_rsse_s rss; + __io struct nix_rx_mce_s mce; + __io struct nix_band_prof_s prof; }; }; @@ -1668,11 +1668,11 @@ struct nix_rq_cpt_field_mask_cfg_req { #define RQ_CTX_MASK_MAX 6 union { uint64_t __io rq_ctx_word_set[RQ_CTX_MASK_MAX]; - struct nix_cn10k_rq_ctx_s rq_set; + __io struct nix_cn10k_rq_ctx_s rq_set; }; union { uint64_t __io rq_ctx_word_mask[RQ_CTX_MASK_MAX]; - struct nix_cn10k_rq_ctx_s rq_mask; + __io struct nix_cn10k_rq_ctx_s rq_mask; }; struct nix_lf_rx_ipec_cfg1_req { uint32_t __io spb_cpt_aura; From patchwork Thu Feb 22 11:02:31 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nithin Dabilpuram X-Patchwork-Id: 137026 X-Patchwork-Delegate: jerinj@marvell.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 4154143B74; Thu, 22 Feb 2024 12:09:18 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 2CD60410EA; Thu, 22 Feb 2024 12:09:01 +0100 (CET) Received: from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by mails.dpdk.org (Postfix) with ESMTP id D897840F1A for ; Thu, 22 Feb 2024 12:08:55 +0100 (CET) Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 41M9BLbW021847 for ; Thu, 22 Feb 2024 03:08:55 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding:content-type; s= pfpt0220; bh=HJiC93WKgg7NElK7MRUv4l8lPKBxE31S8oL3m7yb/Ec=; b=BhF FLBaOHIRual+TfvkcL3PUPd3ZQP3mwOylmDrw0btp57X04AGG/WLMk3hCFbdmLpK /pQFzDs1hjwJWJoMgN5uWdJblT78UjrT6pFOtyqP9b8VS7AFC40nfEGGv2uka5gr zbxXMl19aCb5JfYIOlJA3sWIi5HEtg5eDtdwT1/C4wYJ8+SyngJ8i9KOvNpBItho FLUiFWTgj3mekEcxi7JEvYRHyxR5W5gXYTaRas0JcGQn7Yhde6IaRcOlGucLPvdu tyOO03bI7MYlOfAnoGlz9uLawcvnkY8zZ4uMo+izCka7Z07zp3p8Bt2FN3KLU34Y cfOLqlxpHwAXT84d9Cg== Received: from dc5-exch02.marvell.com ([199.233.59.182]) by mx0a-0016f401.pphosted.com (PPS) with ESMTPS id 3we3dw8at4-13 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT) for ; Thu, 22 Feb 2024 03:08:54 -0800 (PST) Received: from DC5-EXCH05.marvell.com (10.69.176.209) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server (TLS) id 15.0.1497.48; Thu, 22 Feb 2024 03:03:12 -0800 Received: from DC5-EXCH02.marvell.com (10.69.176.39) by DC5-EXCH05.marvell.com (10.69.176.209) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.2.1258.12; Thu, 22 Feb 2024 03:03:12 -0800 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server id 15.0.1497.48 via Frontend Transport; Thu, 22 Feb 2024 03:03:12 -0800 Received: from hyd1588t430.caveonetworks.com (unknown [10.29.52.204]) by maili.marvell.com (Postfix) with ESMTP id 6BBB73F71DD; Thu, 22 Feb 2024 03:03:10 -0800 (PST) From: Nithin Dabilpuram To: Nithin Dabilpuram , Kiran Kumar K , Sunil Kumar Kori , Satha Rao CC: Subject: [PATCH v4 13/14] common/cnxk: use SQ enable and disable API Date: Thu, 22 Feb 2024 16:32:31 +0530 Message-ID: <20240222110232.2342903-13-ndabilpuram@marvell.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240222110232.2342903-1-ndabilpuram@marvell.com> References: <20240208085956.1741174-1-ndabilpuram@marvell.com> <20240222110232.2342903-1-ndabilpuram@marvell.com> MIME-Version: 1.0 X-Proofpoint-GUID: V6MEH62uji0bzm73qXVLGzQV-loUi0SQ X-Proofpoint-ORIG-GUID: V6MEH62uji0bzm73qXVLGzQV-loUi0SQ X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-02-22_09,2024-02-22_01,2023-05-22_02 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Use SQ enable and disable API in TM setup to affect the state change. Signed-off-by: Nithin Dabilpuram --- drivers/common/cnxk/roc_nix_tm_ops.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/common/cnxk/roc_nix_tm_ops.c b/drivers/common/cnxk/roc_nix_tm_ops.c index 900b182c76..9f3870a311 100644 --- a/drivers/common/cnxk/roc_nix_tm_ops.c +++ b/drivers/common/cnxk/roc_nix_tm_ops.c @@ -495,7 +495,7 @@ roc_nix_tm_hierarchy_disable(struct roc_nix *roc_nix) if (!sq) continue; - rc = roc_nix_tm_sq_aura_fc(sq, false); + rc = roc_nix_sq_ena_dis(sq, false); if (rc) { plt_err("Failed to disable sqb aura fc, rc=%d", rc); goto cleanup; @@ -607,7 +607,7 @@ roc_nix_tm_hierarchy_xmit_enable(struct roc_nix *roc_nix, enum roc_nix_tm_tree t sq_id = node->id; sq = nix->sqs[sq_id]; - rc = roc_nix_tm_sq_aura_fc(sq, true); + rc = roc_nix_sq_ena_dis(sq, true); if (rc) { plt_err("TM sw xon failed on SQ %u, rc=%d", node->id, rc); From patchwork Thu Feb 22 11:02:32 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nithin Dabilpuram X-Patchwork-Id: 137027 X-Patchwork-Delegate: jerinj@marvell.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id D72C843B74; Thu, 22 Feb 2024 12:09:24 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 5CD8E40281; Thu, 22 Feb 2024 12:09:02 +0100 (CET) Received: from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by mails.dpdk.org (Postfix) with ESMTP id 4F1D940EDC for ; Thu, 22 Feb 2024 12:08:56 +0100 (CET) Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 41M9BLbX021847 for ; Thu, 22 Feb 2024 03:08:55 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding:content-type; s= pfpt0220; bh=RQ3xOtKML/uoMnSJWUzyVjyiK/ZrER7+usht+w+yeiw=; b=lXD NvJlESkQokWU1x7ZeUW8alBe+rhWGF4nrPXAmtD8yqPoLhPxKV3rVzA5LRhDlkbe TCX4+0TK958YtNAQdcfn2BauJUuLdjRcT8nkMHKRsypuI+u3ypTdzN4rz5qoyEiV CmKpHY9qcaOYvNAQTC8tJHL1Q+KiUwIJO5ONm+EKK58iRAlAKLazKeON9LKq60VM iqYURZkAx6Tj/07a0/dO2Abat6ghh3+brC969ybIZpdUJNjBbx3BHmy+yll+uxuk x8m6fiehum/us+i5HqTbWUA1C6pDG+ruHFDv2IygpFW6GrVPQ18Xr8X2ekgsqm6C 5XXDIfwfLJWmWMJi4dA== Received: from dc5-exch02.marvell.com ([199.233.59.182]) by mx0a-0016f401.pphosted.com (PPS) with ESMTPS id 3we3dw8at4-14 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT) for ; Thu, 22 Feb 2024 03:08:55 -0800 (PST) Received: from DC5-EXCH01.marvell.com (10.69.176.38) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server (TLS) id 15.0.1497.48; Thu, 22 Feb 2024 03:03:14 -0800 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH01.marvell.com (10.69.176.38) with Microsoft SMTP Server id 15.0.1497.48 via Frontend Transport; Thu, 22 Feb 2024 03:03:14 -0800 Received: from hyd1588t430.caveonetworks.com (unknown [10.29.52.204]) by maili.marvell.com (Postfix) with ESMTP id CCB633F71DD; Thu, 22 Feb 2024 03:03:12 -0800 (PST) From: Nithin Dabilpuram To: Nithin Dabilpuram , Kiran Kumar K , Sunil Kumar Kori , Satha Rao CC: , Rahul Bhansali Subject: [PATCH v4 14/14] net/cnxk: reset mbuf fields in multi-seg Tx path Date: Thu, 22 Feb 2024 16:32:32 +0530 Message-ID: <20240222110232.2342903-14-ndabilpuram@marvell.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20240222110232.2342903-1-ndabilpuram@marvell.com> References: <20240208085956.1741174-1-ndabilpuram@marvell.com> <20240222110232.2342903-1-ndabilpuram@marvell.com> MIME-Version: 1.0 X-Proofpoint-GUID: hSuplaOgsEWPXbra3nkTYmKgTDp61eHU X-Proofpoint-ORIG-GUID: hSuplaOgsEWPXbra3nkTYmKgTDp61eHU X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-02-22_09,2024-02-22_01,2023-05-22_02 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org From: Rahul Bhansali Currently in debug mode when a buffer is allocated in SW, nb_segs will have invalid values as it didn't come from driver Rx path. Hence reset mbuf next and nb_segs fields in multi-seg Tx path. Fixes: 3626d5195d49 ("net/cnxk: add multi-segment Tx for CN10K") Signed-off-by: Rahul Bhansali --- drivers/net/cnxk/cn10k_tx.h | 2 ++ drivers/net/cnxk/cn9k_tx.h | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/drivers/net/cnxk/cn10k_tx.h b/drivers/net/cnxk/cn10k_tx.h index ad4cbf7ffa..94bfebf246 100644 --- a/drivers/net/cnxk/cn10k_tx.h +++ b/drivers/net/cnxk/cn10k_tx.h @@ -1324,6 +1324,7 @@ cn10k_nix_prepare_mseg(struct cn10k_eth_txq *txq, nb_segs = m->nb_segs - 1; m_next = m->next; m->next = NULL; + m->nb_segs = 1; slist = &cmd[3 + off + 1]; cookie = RTE_MBUF_DIRECT(m) ? m : rte_mbuf_from_indirect(m); @@ -1869,6 +1870,7 @@ cn10k_nix_prepare_mseg_vec_list(struct rte_mbuf *m, uint64_t *cmd, nb_segs = m->nb_segs - 1; m_next = m->next; m->next = NULL; + m->nb_segs = 1; m = m_next; /* Fill mbuf segments */ do { diff --git a/drivers/net/cnxk/cn9k_tx.h b/drivers/net/cnxk/cn9k_tx.h index e6512471b9..fb5e8c5f56 100644 --- a/drivers/net/cnxk/cn9k_tx.h +++ b/drivers/net/cnxk/cn9k_tx.h @@ -643,6 +643,10 @@ cn9k_nix_prepare_mseg(struct cn9k_eth_txq *txq, rte_io_wmb(); #else RTE_SET_USED(cookie); +#endif +#ifdef RTE_ENABLE_ASSERT + m->next = NULL; + m->nb_segs = 1; #endif m = m_next; if (!m) @@ -679,6 +683,9 @@ cn9k_nix_prepare_mseg(struct cn9k_eth_txq *txq, sg_u = sg->u; slist++; } +#ifdef RTE_ENABLE_ASSERT + m->next = NULL; +#endif m = m_next; } while (nb_segs); @@ -692,6 +699,9 @@ cn9k_nix_prepare_mseg(struct cn9k_eth_txq *txq, segdw += (off >> 1) + 1 + !!(flags & NIX_TX_OFFLOAD_TSTAMP_F); send_hdr->w0.sizem1 = segdw - 1; +#ifdef RTE_ENABLE_ASSERT + rte_io_wmb(); +#endif return segdw; } @@ -908,6 +918,10 @@ cn9k_nix_prepare_mseg_vec_list(struct cn9k_eth_txq *txq, RTE_SET_USED(cookie); #endif +#ifdef RTE_ENABLE_ASSERT + m->next = NULL; + m->nb_segs = 1; +#endif m = m_next; /* Fill mbuf segments */ do { @@ -938,6 +952,9 @@ cn9k_nix_prepare_mseg_vec_list(struct cn9k_eth_txq *txq, sg_u = sg->u; slist++; } +#ifdef RTE_ENABLE_ASSERT + m->next = NULL; +#endif m = m_next; } while (nb_segs); @@ -953,6 +970,9 @@ cn9k_nix_prepare_mseg_vec_list(struct cn9k_eth_txq *txq, !!(flags & NIX_TX_OFFLOAD_TSTAMP_F); send_hdr->w0.sizem1 = segdw - 1; +#ifdef RTE_ENABLE_ASSERT + rte_io_wmb(); +#endif return segdw; }