From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id A894BA0C4B; Wed, 3 Nov 2021 01:53:47 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 36DBB41144; Wed, 3 Nov 2021 01:53:07 +0100 (CET) Received: from mail-pg1-f177.google.com (mail-pg1-f177.google.com [209.85.215.177]) by mails.dpdk.org (Postfix) with ESMTP id 194BD410FF for ; Wed, 3 Nov 2021 01:53:03 +0100 (CET) Received: by mail-pg1-f177.google.com with SMTP id p17so887548pgj.2 for ; Tue, 02 Nov 2021 17:53:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version; bh=s1MiQyxv0WxLPlaV93Eronxd8+4q8UGtOuVPE0pd1CM=; b=H5IQo/Wv7gDsNoYGU62a44H/cRn8ge6nqelcxej+UlsXcf2ey3J7DO1CSgRbRVUWmy UniAyybCwiqlj7ZiUWSM6x2M6OJbbbIzPsaiuobAekGYoo+ttEuXBnQjZXnicOzxycOI YvhYCdVwn5hB0Y6YVaVDFvh9hTFtqCE/tdNTA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version; bh=s1MiQyxv0WxLPlaV93Eronxd8+4q8UGtOuVPE0pd1CM=; b=MmNTEEWv4PaC4wIZWQRkYgkL+PXT5jp8MiyKq6DT6GnxCt0epPUlDbFY5snMhLgnow ki8VuNDwRSzb9jm6mHCzd1ji2P3iQw9WKPZRW3wmTOd9wS80MWWAYUJ9wI8MH8PwZ5ag uBmtJUMSu3QcJ1Rys7dZGV3k8ubX/kfSOtrs+V+5f4WnE79vfEYTLBtvJHrDG5qCpirY alTBakz3Y6KvwHG6imv7wGwnWAS9K4bqDi3VEOEY5MwKx3/YXrI2Z9QHmik03f7haptb 0w1CJOTKbho5S458o7f0Z2h7Tc9Y93I45Q6yzBmUws1bQ0gef24EkuaEi1e3zXkuH8be jzcA== X-Gm-Message-State: AOAM530pjfeZCXpslOLL10BwQIiHce4EDTU/ldn+OtvPlap+68CFXS2R yWZecc78er8Uwm6Lz1j28ANE6G7mhmyAQ7F4uVK3thZYXs1AOJzZk/XbUST/m5pA3OB8jhsdsaU qmHTmQu91a/kkrJdMYT7qBHlA4IismDYtnmb86hRHbD3TQGghsdmO3Y0xjOv1MUc= X-Google-Smtp-Source: ABdhPJy3gfIWnNW3cHIEsMWNSn4Y9NFrPgqMpyme6QwPUb1sGGJFkQAL0Ud5kUCC6eDsGGyRUA/9gg== X-Received: by 2002:aa7:8198:0:b0:44b:e191:7058 with SMTP id g24-20020aa78198000000b0044be1917058mr41139895pfi.39.1635900781880; Tue, 02 Nov 2021 17:53:01 -0700 (PDT) Received: from localhost.localdomain ([192.19.224.250]) by smtp.gmail.com with ESMTPSA id k2sm323450pfu.112.2021.11.02.17.53.00 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 02 Nov 2021 17:53:01 -0700 (PDT) From: Ajit Khaparde To: dev@dpdk.org Cc: Kishore Padmanabha , Venkat Duvvuru , Mike Baucom , Randy Schacher Date: Tue, 2 Nov 2021 17:52:36 -0700 Message-Id: <20211103005251.25524-6-ajit.khaparde@broadcom.com> X-Mailer: git-send-email 2.30.1 (Apple Git-130) In-Reply-To: <20211103005251.25524-1-ajit.khaparde@broadcom.com> References: <20211102040556.7840-1-venkatkumar.duvvuru@broadcom.com> <20211103005251.25524-1-ajit.khaparde@broadcom.com> MIME-Version: 1.0 Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-256; boundary="000000000000063dbf05cfd7d537" X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: [dpdk-dev] [PATCH v4 05/20] net/bnxt: add capability option for socket redirect 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 Sender: "dev" --000000000000063dbf05cfd7d537 Content-Transfer-Encoding: 8bit From: Kishore Padmanabha Added support for socket redirect feature capability so applications can enable or disable this feature. This patch contains the template changes. Signed-off-by: Kishore Padmanabha Signed-off-by: Venkat Duvvuru Reviewed-by: Mike Baucom Reviewed-by: Randy Schacher Reviewed-by: Ajit Khaparde --- drivers/net/bnxt/bnxt.h | 13 -- drivers/net/bnxt/bnxt_ethdev.c | 203 ------------------ drivers/net/bnxt/tf_ulp/bnxt_ulp.c | 11 +- drivers/net/bnxt/tf_ulp/bnxt_ulp.h | 6 +- drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c | 10 +- .../generic_templates/ulp_template_db_enum.h | 8 +- .../generic_templates/ulp_template_db_tbl.c | 5 +- 7 files changed, 30 insertions(+), 226 deletions(-) diff --git a/drivers/net/bnxt/bnxt.h b/drivers/net/bnxt/bnxt.h index 97e281a2fc..4ab9ebd049 100644 --- a/drivers/net/bnxt/bnxt.h +++ b/drivers/net/bnxt/bnxt.h @@ -1054,19 +1054,6 @@ int32_t bnxt_ulp_create_vfr_default_rules(struct rte_eth_dev *vfr_ethdev); int32_t bnxt_ulp_delete_vfr_default_rules(struct bnxt_representor *vfr); -void bnxt_get_iface_mac(uint16_t port, enum bnxt_ulp_intf_type type, - uint8_t *mac, uint8_t *parent_mac); -uint16_t bnxt_get_vnic_id(uint16_t port, enum bnxt_ulp_intf_type type); -uint16_t bnxt_get_parent_vnic_id(uint16_t port, enum bnxt_ulp_intf_type type); -struct bnxt *bnxt_get_bp(uint16_t port); -uint16_t bnxt_get_svif(uint16_t port_id, bool func_svif, - enum bnxt_ulp_intf_type type); -uint16_t bnxt_get_fw_func_id(uint16_t port, enum bnxt_ulp_intf_type type); -uint16_t bnxt_get_parif(uint16_t port, enum bnxt_ulp_intf_type type); -uint16_t bnxt_get_phy_port_id(uint16_t port); -uint16_t bnxt_get_vport(uint16_t port); -enum bnxt_ulp_intf_type -bnxt_get_interface_type(uint16_t port); int bnxt_rep_dev_start_op(struct rte_eth_dev *eth_dev); void bnxt_cancel_fc_thread(struct bnxt *bp); diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c index 257e6b0d6a..2ab0cf3784 100644 --- a/drivers/net/bnxt/bnxt_ethdev.c +++ b/drivers/net/bnxt/bnxt_ethdev.c @@ -5047,209 +5047,6 @@ static void bnxt_config_vf_req_fwd(struct bnxt *bp) BNXT_HWRM_CMD_TO_FORWARD(HWRM_OEM_CMD); } -struct bnxt * -bnxt_get_bp(uint16_t port) -{ - struct bnxt *bp; - struct rte_eth_dev *dev; - - if (!rte_eth_dev_is_valid_port(port)) { - PMD_DRV_LOG(ERR, "Invalid port %d\n", port); - return NULL; - } - - dev = &rte_eth_devices[port]; - if (!is_bnxt_supported(dev)) { - PMD_DRV_LOG(ERR, "Device %d not supported\n", port); - return NULL; - } - - bp = (struct bnxt *)dev->data->dev_private; - if (!BNXT_TRUFLOW_EN(bp)) { - PMD_DRV_LOG(ERR, "TRUFLOW not enabled\n"); - return NULL; - } - - return bp; -} - -uint16_t -bnxt_get_svif(uint16_t port_id, bool func_svif, - enum bnxt_ulp_intf_type type) -{ - struct rte_eth_dev *eth_dev; - struct bnxt *bp; - - eth_dev = &rte_eth_devices[port_id]; - if (BNXT_ETH_DEV_IS_REPRESENTOR(eth_dev)) { - struct bnxt_representor *vfr = eth_dev->data->dev_private; - if (!vfr) - return 0; - - if (type == BNXT_ULP_INTF_TYPE_VF_REP) - return vfr->svif; - - eth_dev = vfr->parent_dev; - } - - bp = eth_dev->data->dev_private; - - return func_svif ? bp->func_svif : bp->port_svif; -} - -void -bnxt_get_iface_mac(uint16_t port, enum bnxt_ulp_intf_type type, - uint8_t *mac, uint8_t *parent_mac) -{ - struct rte_eth_dev *eth_dev; - struct bnxt *bp; - - if (type != BNXT_ULP_INTF_TYPE_TRUSTED_VF && - type != BNXT_ULP_INTF_TYPE_PF) - return; - - eth_dev = &rte_eth_devices[port]; - bp = eth_dev->data->dev_private; - memcpy(mac, bp->mac_addr, RTE_ETHER_ADDR_LEN); - - if (type == BNXT_ULP_INTF_TYPE_TRUSTED_VF) - memcpy(parent_mac, bp->parent->mac_addr, RTE_ETHER_ADDR_LEN); -} - -uint16_t -bnxt_get_parent_vnic_id(uint16_t port, enum bnxt_ulp_intf_type type) -{ - struct rte_eth_dev *eth_dev; - struct bnxt *bp; - - if (type != BNXT_ULP_INTF_TYPE_TRUSTED_VF) - return 0; - - eth_dev = &rte_eth_devices[port]; - bp = eth_dev->data->dev_private; - - return bp->parent->vnic; -} -uint16_t -bnxt_get_vnic_id(uint16_t port, enum bnxt_ulp_intf_type type) -{ - struct rte_eth_dev *eth_dev; - struct bnxt_vnic_info *vnic; - struct bnxt *bp; - - eth_dev = &rte_eth_devices[port]; - if (BNXT_ETH_DEV_IS_REPRESENTOR(eth_dev)) { - struct bnxt_representor *vfr = eth_dev->data->dev_private; - if (!vfr) - return 0; - - if (type == BNXT_ULP_INTF_TYPE_VF_REP) - return vfr->dflt_vnic_id; - - eth_dev = vfr->parent_dev; - } - - bp = eth_dev->data->dev_private; - - vnic = BNXT_GET_DEFAULT_VNIC(bp); - - return vnic->fw_vnic_id; -} - -uint16_t -bnxt_get_fw_func_id(uint16_t port, enum bnxt_ulp_intf_type type) -{ - struct rte_eth_dev *eth_dev; - struct bnxt *bp; - - eth_dev = &rte_eth_devices[port]; - if (BNXT_ETH_DEV_IS_REPRESENTOR(eth_dev)) { - struct bnxt_representor *vfr = eth_dev->data->dev_private; - if (!vfr) - return 0; - - if (type == BNXT_ULP_INTF_TYPE_VF_REP) - return vfr->fw_fid; - - eth_dev = vfr->parent_dev; - } - - bp = eth_dev->data->dev_private; - - return bp->fw_fid; -} - -enum bnxt_ulp_intf_type -bnxt_get_interface_type(uint16_t port) -{ - struct rte_eth_dev *eth_dev; - struct bnxt *bp; - - eth_dev = &rte_eth_devices[port]; - if (BNXT_ETH_DEV_IS_REPRESENTOR(eth_dev)) - return BNXT_ULP_INTF_TYPE_VF_REP; - - bp = eth_dev->data->dev_private; - if (BNXT_PF(bp)) - return BNXT_ULP_INTF_TYPE_PF; - else if (BNXT_VF_IS_TRUSTED(bp)) - return BNXT_ULP_INTF_TYPE_TRUSTED_VF; - else if (BNXT_VF(bp)) - return BNXT_ULP_INTF_TYPE_VF; - - return BNXT_ULP_INTF_TYPE_INVALID; -} - -uint16_t -bnxt_get_phy_port_id(uint16_t port_id) -{ - struct bnxt_representor *vfr; - struct rte_eth_dev *eth_dev; - struct bnxt *bp; - - eth_dev = &rte_eth_devices[port_id]; - if (BNXT_ETH_DEV_IS_REPRESENTOR(eth_dev)) { - vfr = eth_dev->data->dev_private; - if (!vfr) - return 0; - - eth_dev = vfr->parent_dev; - } - - bp = eth_dev->data->dev_private; - - return BNXT_PF(bp) ? bp->pf->port_id : bp->parent->port_id; -} - -uint16_t -bnxt_get_parif(uint16_t port_id, enum bnxt_ulp_intf_type type) -{ - struct rte_eth_dev *eth_dev; - struct bnxt *bp; - - eth_dev = &rte_eth_devices[port_id]; - if (BNXT_ETH_DEV_IS_REPRESENTOR(eth_dev)) { - struct bnxt_representor *vfr = eth_dev->data->dev_private; - if (!vfr) - return 0; - - if (type == BNXT_ULP_INTF_TYPE_VF_REP) - return vfr->fw_fid - 1; - - eth_dev = vfr->parent_dev; - } - - bp = eth_dev->data->dev_private; - - return BNXT_PF(bp) ? bp->fw_fid - 1 : bp->parent->fid - 1; -} - -uint16_t -bnxt_get_vport(uint16_t port_id) -{ - return (1 << bnxt_get_phy_port_id(port_id)); -} - static void bnxt_alloc_error_recovery_info(struct bnxt *bp) { struct bnxt_error_recovery_info *info = bp->recovery_info; diff --git a/drivers/net/bnxt/tf_ulp/bnxt_ulp.c b/drivers/net/bnxt/tf_ulp/bnxt_ulp.c index f1763e2519..2ac1a8625f 100644 --- a/drivers/net/bnxt/tf_ulp/bnxt_ulp.c +++ b/drivers/net/bnxt/tf_ulp/bnxt_ulp.c @@ -301,13 +301,14 @@ bnxt_ulp_tf_shared_session_resources_get(struct bnxt_ulp_context *ulp_ctx, } int32_t -bnxt_ulp_cntxt_app_caps_init(struct bnxt_ulp_context *ulp_ctx, +bnxt_ulp_cntxt_app_caps_init(struct bnxt *bp, uint8_t app_id, uint32_t dev_id) { struct bnxt_ulp_app_capabilities_info *info; uint32_t num = 0; uint16_t i; bool found = false; + struct bnxt_ulp_context *ulp_ctx = bp->ulp_ctx; if (ULP_APP_DEV_UNSUPPORTED_ENABLED(ulp_ctx->cfg_data->ulp_flags)) { BNXT_TF_DBG(ERR, "APP ID %d, Device ID: 0x%x not supported.\n", @@ -334,6 +335,12 @@ bnxt_ulp_cntxt_app_caps_init(struct bnxt_ulp_context *ulp_ctx, if (info[i].flags & BNXT_ULP_APP_CAP_UNICAST_ONLY) ulp_ctx->cfg_data->ulp_flags |= BNXT_ULP_APP_UNICAST_ONLY; + if (info[i].flags & BNXT_ULP_APP_CAP_SOCKET_DIRECT) { + /* Enable socket direction only if MR is enabled in fw*/ + if (BNXT_MULTIROOT_EN(bp)) + ulp_ctx->cfg_data->ulp_flags |= + BNXT_ULP_APP_SOCKET_DIRECT; + } } if (!found) { BNXT_TF_DBG(ERR, "APP ID %d, Device ID: 0x%x not supported.\n", @@ -832,7 +839,7 @@ ulp_ctx_init(struct bnxt *bp, } BNXT_TF_DBG(DEBUG, "Ulp initialized with app id %d\n", bp->app_id); - rc = bnxt_ulp_cntxt_app_caps_init(bp->ulp_ctx, bp->app_id, devid); + rc = bnxt_ulp_cntxt_app_caps_init(bp, bp->app_id, devid); if (rc) { BNXT_TF_DBG(ERR, "Unable to set caps for app(%x)/dev(%x)\n", bp->app_id, devid); diff --git a/drivers/net/bnxt/tf_ulp/bnxt_ulp.h b/drivers/net/bnxt/tf_ulp/bnxt_ulp.h index 006df9cbc5..68f1470c61 100644 --- a/drivers/net/bnxt/tf_ulp/bnxt_ulp.h +++ b/drivers/net/bnxt/tf_ulp/bnxt_ulp.h @@ -13,6 +13,7 @@ #include "rte_version.h" #include "rte_ethdev.h" +#include "bnxt.h" #include "ulp_template_db_enum.h" #include "ulp_tun.h" #include "bnxt_tf_common.h" @@ -33,12 +34,15 @@ #define BNXT_ULP_APP_DEV_UNSUPPORTED 0x4 #define BNXT_ULP_HIGH_AVAIL_ENABLED 0x8 #define BNXT_ULP_APP_UNICAST_ONLY 0x10 +#define BNXT_ULP_APP_SOCKET_DIRECT 0x20 + #define ULP_VF_REP_IS_ENABLED(flag) ((flag) & BNXT_ULP_VF_REP_ENABLED) #define ULP_SHARED_SESSION_IS_ENABLED(flag) ((flag) &\ BNXT_ULP_SHARED_SESSION_ENABLED) #define ULP_APP_DEV_UNSUPPORTED_ENABLED(flag) ((flag) &\ BNXT_ULP_APP_DEV_UNSUPPORTED) #define ULP_HIGH_AVAIL_IS_ENABLED(flag) ((flag) & BNXT_ULP_HIGH_AVAIL_ENABLED) +#define ULP_SOCKET_DIRECT_IS_ENABLED(flag) ((flag) & BNXT_ULP_APP_SOCKET_DIRECT) enum bnxt_ulp_flow_mem_type { BNXT_ULP_FLOW_MEM_TYPE_INT = 0, @@ -287,7 +291,7 @@ struct bnxt_ulp_app_capabilities_info * bnxt_ulp_app_cap_list_get(uint32_t *num_entries); int32_t -bnxt_ulp_cntxt_app_caps_init(struct bnxt_ulp_context *ulp_ctx, +bnxt_ulp_cntxt_app_caps_init(struct bnxt *bp, uint8_t app_id, uint32_t dev_id); struct bnxt_ulp_resource_resv_info * diff --git a/drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c b/drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c index 2fec79a388..272195f6a2 100644 --- a/drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c +++ b/drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c @@ -115,9 +115,11 @@ bnxt_ulp_init_mapper_params(struct bnxt_ulp_mapper_create_parms *mapper_cparms, ULP_COMP_FLD_IDX_WR(params, BNXT_ULP_CF_IDX_FLOW_SIG_ID, params->flow_sig_id); + if (bnxt_ulp_cntxt_ptr2_ulp_flags_get(params->ulp_ctx, &ulp_flags)) + return; + /* update the WC Priority flag */ - if (!bnxt_ulp_cntxt_ptr2_ulp_flags_get(params->ulp_ctx, &ulp_flags) && - ULP_HIGH_AVAIL_IS_ENABLED(ulp_flags)) { + if (ULP_HIGH_AVAIL_IS_ENABLED(ulp_flags)) { enum ulp_ha_mgr_region region = ULP_HA_REGION_LOW; int32_t rc; @@ -129,6 +131,10 @@ bnxt_ulp_init_mapper_params(struct bnxt_ulp_mapper_create_parms *mapper_cparms, BNXT_ULP_CF_IDX_WC_IS_HA_HIGH_REG, 1); } + + /* Update the socket direct flag */ + if (ULP_SOCKET_DIRECT_IS_ENABLED(ulp_flags)) + ULP_COMP_FLD_IDX_WR(params, BNXT_ULP_CF_IDX_SOCKET_DIRECT, 1); } /* Function to create the rte flow. */ diff --git a/drivers/net/bnxt/tf_ulp/generic_templates/ulp_template_db_enum.h b/drivers/net/bnxt/tf_ulp/generic_templates/ulp_template_db_enum.h index fcd460e707..31a94c14dc 100644 --- a/drivers/net/bnxt/tf_ulp/generic_templates/ulp_template_db_enum.h +++ b/drivers/net/bnxt/tf_ulp/generic_templates/ulp_template_db_enum.h @@ -3,7 +3,7 @@ * All rights reserved. */ -/* date: Thu Aug 26 17:43:36 2021 */ +/* date: Thu Sep 9 11:11:05 2021 */ #ifndef ULP_TEMPLATE_DB_H_ #define ULP_TEMPLATE_DB_H_ @@ -211,7 +211,8 @@ enum bnxt_ulp_cf_idx { BNXT_ULP_CF_IDX_OI_VLAN_FB_VID = 71, BNXT_ULP_CF_IDX_IO_VLAN_FB_VID = 72, BNXT_ULP_CF_IDX_II_VLAN_FB_VID = 73, - BNXT_ULP_CF_IDX_LAST = 74 + BNXT_ULP_CF_IDX_SOCKET_DIRECT = 74, + BNXT_ULP_CF_IDX_LAST = 75 }; enum bnxt_ulp_cond_list_opc { @@ -582,7 +583,8 @@ enum bnxt_ulp_template_type { enum bnxt_ulp_app_cap { BNXT_ULP_APP_CAP_SHARED_EN = 0x00000001, BNXT_ULP_APP_CAP_HOT_UPGRADE_EN = 0x00000002, - BNXT_ULP_APP_CAP_UNICAST_ONLY = 0x00000004 + BNXT_ULP_APP_CAP_UNICAST_ONLY = 0x00000004, + BNXT_ULP_APP_CAP_SOCKET_DIRECT = 0x00000008 }; enum bnxt_ulp_fdb_resource_flags { diff --git a/drivers/net/bnxt/tf_ulp/generic_templates/ulp_template_db_tbl.c b/drivers/net/bnxt/tf_ulp/generic_templates/ulp_template_db_tbl.c index 84be09b368..5383e2cd70 100644 --- a/drivers/net/bnxt/tf_ulp/generic_templates/ulp_template_db_tbl.c +++ b/drivers/net/bnxt/tf_ulp/generic_templates/ulp_template_db_tbl.c @@ -3,7 +3,7 @@ * All rights reserved. */ -/* date: Thu Aug 26 17:43:36 2021 */ +/* date: Thu Sep 9 11:11:05 2021 */ #include "ulp_template_db_enum.h" #include "ulp_template_db_field.h" @@ -347,7 +347,8 @@ struct bnxt_ulp_app_capabilities_info ulp_app_cap_info_list[] = { .device_id = BNXT_ULP_DEVICE_ID_THOR, .flags = BNXT_ULP_APP_CAP_SHARED_EN | BNXT_ULP_APP_CAP_HOT_UPGRADE_EN | - BNXT_ULP_APP_CAP_UNICAST_ONLY + BNXT_ULP_APP_CAP_UNICAST_ONLY | + BNXT_ULP_APP_CAP_SOCKET_DIRECT }, { .app_id = 2, -- 2.30.1 (Apple Git-130) --000000000000063dbf05cfd7d537--