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 048DC45A7C; Fri, 4 Oct 2024 19:47:00 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A9DB242FF9; Fri, 4 Oct 2024 19:45:58 +0200 (CEST) Received: from mail-pg1-f179.google.com (mail-pg1-f179.google.com [209.85.215.179]) by mails.dpdk.org (Postfix) with ESMTP id 1830442FF3 for ; Fri, 4 Oct 2024 19:45:57 +0200 (CEST) Received: by mail-pg1-f179.google.com with SMTP id 41be03b00d2f7-7e9b2449fd1so1931453a12.1 for ; Fri, 04 Oct 2024 10:45:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; t=1728063956; x=1728668756; darn=dpdk.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=2HSU5/cykstiGvrDEicNEe472KIiqZ/tSCzpwaz3O5c=; b=JxPzdzrbsJF0SpbopRHNqpVgQvzmeZDsUErGkgEwwljW081yy8XQaQjsye5FlUCLdW FVWX/WIZkKHL34IakdXH5ZC/huyhti4KZgHRKexgez2pJz2/M6BUXZlz/ypJcoyHz38Q OdZo2z2fMs5sdcmjuXckgqxQtCAk1Vn90pjy4= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1728063956; x=1728668756; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=2HSU5/cykstiGvrDEicNEe472KIiqZ/tSCzpwaz3O5c=; b=kP9w33yWBaf/2sPY3Lk5DrucJlZmm8F1K2N2iEicEBTR7Bf0Hc55QC0QH0jzf6kJUZ /9HdKTdWBCV+o+w72AHWFutnrH3EG3wfu3D6waMrMywDJh6vcojEx6iOLjc335KpJhtQ B5T0VNn1WrjDB8uhx49KnttEe9uhY0FDFuwqFAh+3HNj2CK8psoFl9fGSJXdYxF+Muyq RTNViuBh03R0womMv5wgIQH2YZWV5GzeZ+RB65lcVvGFjzJF5phyw3pX/puf3UikTQky qsq9xCEFcGC3le+0TsdonGMy3rtljG3j+kltN17DSzgQFOaIFdvk0BGY9erXzQgzy8jP Xgkw== X-Gm-Message-State: AOJu0Yw2OxEHlL9TcSjRq3Gm6xGVK2rpLy2hcBB5UWe9sWFsNjXPBzdw i0GS8prjvayHXrm7GDER/Gn/WL3nVQWc6cECE4oVujTqax6/e/DdnQ5VCN9tPb9qaka/s6lve7v xRd7zjg4YTWAdx8OEZdandwBPSCkHobJYeFytPQe6oJE/tsOZpgzDNpsmIU/Qm0KeayXFgvdVYU 3I+Xcp5kpT578PNfTY3fnkmAaGg5/7x1XgjRn2hvztog== X-Google-Smtp-Source: AGHT+IGRyVOHGDVOg8eQ0c4goejjR1twO6q8wPnx1AtGnKZCCmUv2bRlAoKQuOuiVrHdZvhgGurd7Q== X-Received: by 2002:a05:6a20:c707:b0:1d2:bbf2:4c0e with SMTP id adf61e73a8af0-1d6dfafbee2mr4903365637.43.1728063955730; Fri, 04 Oct 2024 10:45:55 -0700 (PDT) Received: from dhcp-10-123-154-23.dhcp.broadcom.net ([192.19.234.250]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-71df0cd0b5bsm128103b3a.53.2024.10.04.10.45.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Oct 2024 10:45:55 -0700 (PDT) From: Sriharsha Basavapatna To: dev@dpdk.org Cc: Kishore Padmanabha , Sriharsha Basavapatna , Shahaji Bhosle , Ajit Khaparde Subject: [PATCH v4 14/47] net/bnxt: tf_ulp: add support for vf to vf flow offload Date: Fri, 4 Oct 2024 23:23:05 +0530 Message-Id: <20241004175338.3156160-15-sriharsha.basavapatna@broadcom.com> X-Mailer: git-send-email 2.39.0.189.g4dbebc36b0 In-Reply-To: <20241004175338.3156160-1-sriharsha.basavapatna@broadcom.com> References: <20241004175338.3156160-1-sriharsha.basavapatna@broadcom.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 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: Kishore Padmanabha Added support for the vf to vf flow offload for the whitney platform. It includes the change of the pipeline from using vlan tags to using custom L2 encap and decap of the packets. Signed-off-by: Kishore Padmanabha Signed-off-by: Sriharsha Basavapatna Reviewed-by: Shahaji Bhosle Reviewed-by: Ajit Khaparde --- drivers/net/bnxt/tf_ulp/bnxt_ulp.c | 5 ++++ drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c | 32 +++++++++++++++++++++++++ drivers/net/bnxt/tf_ulp/ulp_def_rules.c | 26 ++++++++++++++++++++ drivers/net/bnxt/tf_ulp/ulp_mapper.c | 6 +++++ drivers/net/bnxt/tf_ulp/ulp_port_db.c | 32 +++++++++++++++++++++++++ drivers/net/bnxt/tf_ulp/ulp_port_db.h | 13 ++++++++++ 6 files changed, 114 insertions(+) diff --git a/drivers/net/bnxt/tf_ulp/bnxt_ulp.c b/drivers/net/bnxt/tf_ulp/bnxt_ulp.c index 912946303a..3f0a5f2300 100644 --- a/drivers/net/bnxt/tf_ulp/bnxt_ulp.c +++ b/drivers/net/bnxt/tf_ulp/bnxt_ulp.c @@ -1927,6 +1927,11 @@ bnxt_ulp_port_init(struct bnxt *bp) } } + /* setup the l2 etype tunnel for custom l2 encap/decap */ + rc = ulp_l2_etype_tunnel_alloc(bp); + if (rc) + goto jump_to_error; + /* Update bnxt driver flags */ rc = ulp_dparms_dev_port_intf_update(bp, bp->ulp_ctx); if (rc) { diff --git a/drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c b/drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c index ad04644db4..2f159ae486 100644 --- a/drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c +++ b/drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c @@ -606,6 +606,38 @@ bnxt_ulp_action_handle_create(struct rte_eth_dev *dev, BNXT_ULP_DIR_EGRESS); } + /* perform the conversion from dpdk port to bnxt ifindex */ + if (ulp_port_db_dev_port_to_ulp_index(ulp_ctx, + dev->data->port_id, + &ifindex)) { + BNXT_TF_DBG(ERR, "Port id is not valid\n"); + goto parse_error; + } + port_type = ulp_port_db_port_type_get(ulp_ctx, ifindex); + if (port_type == BNXT_ULP_INTF_TYPE_INVALID) { + BNXT_TF_DBG(ERR, "Port type is not valid\n"); + goto parse_error; + } + + bnxt_ulp_init_parser_cf_defaults(¶ms, dev->data->port_id); + + /* Emulating the match port for direction processing */ + ULP_COMP_FLD_IDX_WR(¶ms, BNXT_ULP_CF_IDX_MATCH_PORT_TYPE, + port_type); + + if ((params.dir_attr & BNXT_ULP_FLOW_ATTR_INGRESS) && + port_type == BNXT_ULP_INTF_TYPE_VF_REP) { + ULP_COMP_FLD_IDX_WR(¶ms, BNXT_ULP_CF_IDX_DIRECTION, + BNXT_ULP_DIR_EGRESS); + } else { + /* Assign the input direction */ + if (params.dir_attr & BNXT_ULP_FLOW_ATTR_INGRESS) + ULP_COMP_FLD_IDX_WR(¶ms, BNXT_ULP_CF_IDX_DIRECTION, + BNXT_ULP_DIR_INGRESS); + else + ULP_COMP_FLD_IDX_WR(¶ms, BNXT_ULP_CF_IDX_DIRECTION, + BNXT_ULP_DIR_EGRESS); + } /* Parse the shared action */ ret = bnxt_ulp_rte_parser_act_parse(actions, ¶ms); if (ret != BNXT_TF_RC_SUCCESS) diff --git a/drivers/net/bnxt/tf_ulp/ulp_def_rules.c b/drivers/net/bnxt/tf_ulp/ulp_def_rules.c index 8237dbd294..e2d281130e 100644 --- a/drivers/net/bnxt/tf_ulp/ulp_def_rules.c +++ b/drivers/net/bnxt/tf_ulp/ulp_def_rules.c @@ -12,6 +12,10 @@ #include "ulp_flow_db.h" #include "ulp_mapper.h" +static void +ulp_l2_custom_tunnel_id_update(struct bnxt *bp, + struct bnxt_ulp_mapper_create_parms *params); + struct bnxt_ulp_def_param_handler { int32_t (*vfr_func)(struct bnxt_ulp_context *ulp_ctx, struct ulp_tlv_param *param, @@ -306,6 +310,7 @@ ulp_default_flow_create(struct rte_eth_dev *eth_dev, struct ulp_rte_act_bitmap act = { 0 }; struct bnxt_ulp_context *ulp_ctx; uint32_t type, ulp_flags = 0, fid; + struct bnxt *bp = eth_dev->data->dev_private; int rc = 0; memset(&mapper_params, 0, sizeof(mapper_params)); @@ -366,6 +371,9 @@ ulp_default_flow_create(struct rte_eth_dev *eth_dev, ULP_COMP_FLD_IDX_WR(&mapper_params, BNXT_ULP_CF_IDX_VF_META_FID, BNXT_ULP_META_VF_FLAG | mapper_params.func_id); + /* update the upar id */ + ulp_l2_custom_tunnel_id_update(bp, &mapper_params); + BNXT_TF_DBG(DEBUG, "Creating default flow with template id: %u\n", ulp_class_tid); @@ -641,3 +649,21 @@ bnxt_ulp_delete_vfr_default_rules(struct bnxt_representor *vfr) memset(info, 0, sizeof(struct bnxt_ulp_vfr_rule_info)); return 0; } + +static void +ulp_l2_custom_tunnel_id_update(struct bnxt *bp, + struct bnxt_ulp_mapper_create_parms *params) +{ + if (!bp->l2_etype_tunnel_cnt) + return; + + if (bp->l2_etype_upar_in_use & + HWRM_TUNNEL_DST_PORT_QUERY_OUTPUT_UPAR_IN_USE_UPAR0) { + ULP_COMP_FLD_IDX_WR(params, BNXT_ULP_CF_IDX_L2_CUSTOM_UPAR_ID, + ULP_WP_SYM_TUN_HDR_TYPE_UPAR1); + } else if (bp->l2_etype_upar_in_use & + HWRM_TUNNEL_DST_PORT_QUERY_OUTPUT_UPAR_IN_USE_UPAR1) { + ULP_COMP_FLD_IDX_WR(params, BNXT_ULP_CF_IDX_L2_CUSTOM_UPAR_ID, + ULP_WP_SYM_TUN_HDR_TYPE_UPAR2); + } +} diff --git a/drivers/net/bnxt/tf_ulp/ulp_mapper.c b/drivers/net/bnxt/tf_ulp/ulp_mapper.c index ea1311c0c4..9dda70d75b 100644 --- a/drivers/net/bnxt/tf_ulp/ulp_mapper.c +++ b/drivers/net/bnxt/tf_ulp/ulp_mapper.c @@ -1073,6 +1073,12 @@ ulp_mapper_field_port_db_process(struct bnxt_ulp_mapper_parms *parms, return -EINVAL; } break; + case BNXT_ULP_PORT_TABLE_VF_FUNC_FID: + if (ulp_port_db_port_vf_fid_get(parms->ulp_ctx, port_id, val)) { + BNXT_TF_DBG(ERR, "Invalid port id %u\n", port_id); + return -EINVAL; + } + break; default: BNXT_TF_DBG(ERR, "Invalid port_data %d\n", port_data); return -EINVAL; diff --git a/drivers/net/bnxt/tf_ulp/ulp_port_db.c b/drivers/net/bnxt/tf_ulp/ulp_port_db.c index ba1f966ec3..bc0a7a95e6 100644 --- a/drivers/net/bnxt/tf_ulp/ulp_port_db.c +++ b/drivers/net/bnxt/tf_ulp/ulp_port_db.c @@ -760,3 +760,35 @@ ulp_port_db_port_meta_data_get(struct bnxt_ulp_context *ulp_ctxt, } return -EINVAL; } + +/* Api to get the function id for a given port id + * + * ulp_ctxt [in] Ptr to ulp context + * port_id [in] dpdk port id + * fid_data [out] the function id of the given port + * + * Returns 0 on success or negative number on failure. + */ +int32_t +ulp_port_db_port_vf_fid_get(struct bnxt_ulp_context *ulp_ctxt, + uint16_t port_id, uint8_t **fid_data) +{ + struct bnxt_ulp_port_db *port_db; + uint32_t ifindex; + + port_db = bnxt_ulp_cntxt_ptr2_port_db_get(ulp_ctxt); + if (!port_db || port_id >= RTE_MAX_ETHPORTS) { + BNXT_TF_DBG(ERR, "Invalid Arguments\n"); + return -EINVAL; + } + ifindex = port_db->dev_port_list[port_id]; + if (!ifindex) + return -ENOENT; + + if (port_db->ulp_intf_list[ifindex].type != BNXT_ULP_INTF_TYPE_VF && + port_db->ulp_intf_list[ifindex].type != BNXT_ULP_INTF_TYPE_VF_REP) + return -EINVAL; + + *fid_data = (uint8_t *)&port_db->ulp_intf_list[ifindex].vf_func_id; + return 0; +} diff --git a/drivers/net/bnxt/tf_ulp/ulp_port_db.h b/drivers/net/bnxt/tf_ulp/ulp_port_db.h index d4efe0a3d5..9d7ab02ad7 100644 --- a/drivers/net/bnxt/tf_ulp/ulp_port_db.h +++ b/drivers/net/bnxt/tf_ulp/ulp_port_db.h @@ -354,4 +354,17 @@ ulp_port_db_port_is_pf_get(struct bnxt_ulp_context *ulp_ctxt, int32_t ulp_port_db_port_meta_data_get(struct bnxt_ulp_context *ulp_ctxt, uint16_t port_id, uint8_t **meta_data); + +/* Api to get the function id for a given port id + * + * ulp_ctxt [in] Ptr to ulp context + * port_id [in] dpdk port id + * fid_data [out] the function id of the given port + * + * Returns 0 on success or negative number on failure. + */ +int32_t +ulp_port_db_port_vf_fid_get(struct bnxt_ulp_context *ulp_ctxt, + uint16_t port_id, uint8_t **fid_data); + #endif /* _ULP_PORT_DB_H_ */ -- 2.39.3