From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <dev-bounces@dpdk.org>
Received: from dpdk.org (dpdk.org [92.243.14.124])
	by inbox.dpdk.org (Postfix) with ESMTP id 301F0A04DD;
	Fri, 23 Oct 2020 00:08:59 +0200 (CEST)
Received: from [92.243.14.124] (localhost [127.0.0.1])
	by dpdk.org (Postfix) with ESMTP id 61AFFA8ED;
	Fri, 23 Oct 2020 00:06:33 +0200 (CEST)
Received: from mail-pf1-f193.google.com (mail-pf1-f193.google.com
 [209.85.210.193]) by dpdk.org (Postfix) with ESMTP id B7EF09AFC
 for <dev@dpdk.org>; Fri, 23 Oct 2020 00:06:26 +0200 (CEST)
Received: by mail-pf1-f193.google.com with SMTP id x13so2118566pfa.9
 for <dev@dpdk.org>; Thu, 22 Oct 2020 15:06:26 -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=2PPi6V8/q50hU2sPgQwxfozpQNl3c4uvsRJZKrZKOUk=;
 b=HQNmiqYHlhBold0dNkdCE4WQvXSUJ12Ob7zn4yT/OBbwwDWe3f4Cqpl0JcrWGDSZGj
 eZiakwhhGdwD/cN9pZes0vwOLe+bR3HPXANpGyGt+B8Lx6AenX+op7JDaOqTV02G5aAl
 /DytiKJ+dVHhAtQL8jlUbi6xmiSdFq0Et8ECA=
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references:mime-version;
 bh=2PPi6V8/q50hU2sPgQwxfozpQNl3c4uvsRJZKrZKOUk=;
 b=Gd/j9X+R9zb5fvetdNzOcPc4rROeowgBnRlM0xKFeX9bvGpvszI9+DY1pzkaPMkYCz
 J3kSfSTukhyyMaoYIYpKXMHvQGok3ECGjbOqW/FdW25ge/fKuO8ubqfBy7r5rxDQN5IS
 dEg8Ttk3DIWHpJEBjdrenvFaQucxsWUSoOBMeJMG3O5Z4N0hxYTPqx+YKSmO68qzKhZz
 rMqz58VqOpz4R1b3GO/2+0y89KA9u5ExwGAz/YFnhaGK8T0MS057nMhjrG5HLyzQlw52
 gcTM3rlrcX9CKzpPDvVGA9bRlguPKEaDfrlQwb1laMz3Bp36bniUngO5xi5rbF4LNolS
 dlhA==
X-Gm-Message-State: AOAM5311PkPjsVpzM1jxB0XQJyVb6r+fI4Sd70nxMrTkikgNWzQyrb/I
 +TCyFEadlXm52UbgzZpWAh71pgTd9shvi/g3VD4aG+YZDu7qJJjody6IpBSHWm1ibIXZ1r4eMDa
 B/OfVolvVnAA1+SL6SfZHT5NA3w3qfAXqxgTgM/dcicRnMQVyzwf2ugJKBp5tTkFnEQ==
X-Google-Smtp-Source: ABdhPJxiqlUxll0VYs7MXJzSxAXa+sszmM0OK4vfN9AqpTK6v9gagzAe/dIO+VC3JxCy108ODov+3g==
X-Received: by 2002:a17:90a:ab8b:: with SMTP id
 n11mr4380622pjq.162.1603404385539; 
 Thu, 22 Oct 2020 15:06:25 -0700 (PDT)
Received: from localhost.localdomain ([192.19.228.250])
 by smtp.gmail.com with ESMTPSA id q14sm3214059pjp.43.2020.10.22.15.06.24
 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128);
 Thu, 22 Oct 2020 15:06:24 -0700 (PDT)
From: Ajit Khaparde <ajit.khaparde@broadcom.com>
To: dev@dpdk.org
Cc: Farah Smith <farah.smith@broadcom.com>,
 Randy Schacher <stuart.schacher@broadcom.com>
Date: Thu, 22 Oct 2020 15:05:35 -0700
Message-Id: <20201022220542.84166-4-ajit.khaparde@broadcom.com>
X-Mailer: git-send-email 2.21.1 (Apple Git-122.3)
In-Reply-To: <20201020215538.59242-1-ajit.khaparde@broadcom.com>
References: <20201020215538.59242-1-ajit.khaparde@broadcom.com>
MIME-Version: 1.0
Content-Type: text/plain
Content-Transfer-Encoding: 8bit
X-Content-Filtered-By: Mailman/MimeDel 2.1.15
Subject: [dpdk-dev] [PATCH v3 03/11] net/bnxt: add table scope to PF Mapping
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: DPDK patches and discussions <dev.dpdk.org>
List-Unsubscribe: <https://mails.dpdk.org/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://mails.dpdk.org/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <https://mails.dpdk.org/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
Errors-To: dev-bounces@dpdk.org
Sender: "dev" <dev-bounces@dpdk.org>

From: Farah Smith <farah.smith@broadcom.com>

Add table scope to PF Mapping for SR and Wh+ devices.
Legacy devices require PF set of base addresses for EEM operation.
A table scope id is a logical construct and is mapped to the PF
associated with the communications channel used.
In the case of a VF, the parent PF is used.

Signed-off-by: Farah Smith <farah.smith@broadcom.com>
Reviewed-by: Randy Schacher <stuart.schacher@broadcom.com>
Reviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
---
 drivers/net/bnxt/tf_core/tf_device.h    | 10 +++++++---
 drivers/net/bnxt/tf_core/tf_device_p4.c | 10 +++++-----
 drivers/net/bnxt/tf_core/tf_em_common.c |  6 ++++--
 drivers/net/bnxt/tf_core/tf_em_host.c   |  8 ++++++++
 drivers/net/bnxt/tf_core/tf_tbl.h       |  3 +++
 drivers/net/bnxt/tf_core/tfp.c          | 19 +++++++++++++++++++
 drivers/net/bnxt/tf_core/tfp.h          | 16 ++++++++++++++++
 7 files changed, 62 insertions(+), 10 deletions(-)

diff --git a/drivers/net/bnxt/tf_core/tf_device.h b/drivers/net/bnxt/tf_core/tf_device.h
index cf7c36e0ea..b5fc695ece 100644
--- a/drivers/net/bnxt/tf_core/tf_device.h
+++ b/drivers/net/bnxt/tf_core/tf_device.h
@@ -579,8 +579,11 @@ struct tf_dev_ops {
 	 * [in] tfp
 	 *   Pointer to TF handle
 	 *
-	 * [in] parms
-	 *   Pointer to table scope map parameters
+	 * [in] pf
+	 * PF associated with the table scope
+	 *
+	 * [in] parif_bitmask
+	 * Bitmask of PARIFs to enable
 	 *
 	 * [in/out] pointer to the parif_2_pf data to be updated
 	 *
@@ -593,7 +596,8 @@ struct tf_dev_ops {
 	 *    -EINVAL - Error
 	 */
 	int (*tf_dev_map_parif)(struct tf *tfp,
-				struct tf_map_tbl_scope_parms *parms,
+				uint16_t parif_bitmask,
+				uint16_t pf,
 				uint8_t *data,
 				uint8_t *mask,
 				uint16_t sz_in_bytes);
diff --git a/drivers/net/bnxt/tf_core/tf_device_p4.c b/drivers/net/bnxt/tf_core/tf_device_p4.c
index 07c8d02faa..b35e65a8de 100644
--- a/drivers/net/bnxt/tf_core/tf_device_p4.c
+++ b/drivers/net/bnxt/tf_core/tf_device_p4.c
@@ -103,7 +103,8 @@ tf_dev_p4_get_tcam_slice_info(struct tf *tfp __rte_unused,
 
 static int
 tf_dev_p4_map_parif(struct tf *tfp __rte_unused,
-		    struct tf_map_tbl_scope_parms *parms,
+		    uint16_t parif_bitmask,
+		    uint16_t pf,
 		    uint8_t *data,
 		    uint8_t *mask,
 		    uint16_t sz_in_bytes)
@@ -112,21 +113,20 @@ tf_dev_p4_map_parif(struct tf *tfp __rte_unused,
 	uint32_t parif_pf_mask[2] = { 0 };
 	uint32_t parif;
 	uint32_t shift;
-	uint32_t scope_id = (uint32_t)(parms->tbl_scope_id);
 
 	if (sz_in_bytes != sizeof(uint64_t))
 		return -ENOTSUP;
 
 	for (parif = 0; parif < TF_DEV_P4_PARIF_MAX; parif++) {
-		if (parms->parif_bitmask & (1UL << parif)) {
+		if (parif_bitmask & (1UL << parif)) {
 			if (parif < 8) {
 				shift = 4 * parif;
 				parif_pf_mask[0] |= TF_DEV_P4_PF_MASK << shift;
-				parif_pf[0] |= scope_id << shift;
+				parif_pf[0] |= pf << shift;
 			} else {
 				shift = 4 * (parif - 8);
 				parif_pf_mask[1] |= TF_DEV_P4_PF_MASK << shift;
-				parif_pf[1] |= scope_id << shift;
+				parif_pf[1] |= pf << shift;
 			}
 		}
 	}
diff --git a/drivers/net/bnxt/tf_core/tf_em_common.c b/drivers/net/bnxt/tf_core/tf_em_common.c
index d4e8469edf..ad92cbdc75 100644
--- a/drivers/net/bnxt/tf_core/tf_em_common.c
+++ b/drivers/net/bnxt/tf_core/tf_em_common.c
@@ -1104,8 +1104,10 @@ int tf_em_ext_map_tbl_scope(struct tf *tfp,
 	}
 	mask = aparms.mem_va;
 
-	rc = dev->ops->tf_dev_map_parif(tfp, parms, (uint8_t *)data,
-					(uint8_t *)mask, sz_in_bytes);
+	rc = dev->ops->tf_dev_map_parif(tfp, parms->parif_bitmask,
+					tbl_scope_cb->pf,
+					(uint8_t *)data, (uint8_t *)mask,
+					sz_in_bytes);
 
 	if (rc) {
 		TFP_DRV_LOG(ERR,
diff --git a/drivers/net/bnxt/tf_core/tf_em_host.c b/drivers/net/bnxt/tf_core/tf_em_host.c
index b5db94f3ef..a106bdffde 100644
--- a/drivers/net/bnxt/tf_core/tf_em_host.c
+++ b/drivers/net/bnxt/tf_core/tf_em_host.c
@@ -392,6 +392,14 @@ tf_em_ext_alloc(struct tf *tfp, struct tf_alloc_tbl_scope_parms *parms)
 	tbl_scope_cb->index = parms->tbl_scope_id;
 	tbl_scope_cb->tbl_scope_id = parms->tbl_scope_id;
 
+	rc = tfp_get_pf(tfp, &tbl_scope_cb->pf);
+	if (rc) {
+		TFP_DRV_LOG(ERR,
+			    "EEM: PF query error rc:%s\n",
+			    strerror(-rc));
+		goto cleanup;
+	}
+
 	for (dir = 0; dir < TF_DIR_MAX; dir++) {
 		rc = tf_msg_em_qcaps(tfp,
 				     dir,
diff --git a/drivers/net/bnxt/tf_core/tf_tbl.h b/drivers/net/bnxt/tf_core/tf_tbl.h
index 2a5d24c940..230338c81b 100644
--- a/drivers/net/bnxt/tf_core/tf_tbl.h
+++ b/drivers/net/bnxt/tf_core/tf_tbl.h
@@ -38,6 +38,9 @@ struct tf_em_caps {
  */
 struct tf_tbl_scope_cb {
 	uint32_t tbl_scope_id;
+       /** The pf or parent pf of the vf used for table scope creation
+	*/
+	uint16_t pf;
 	int index;
 	struct hcapi_cfa_em_ctx_mem_info em_ctx_info[TF_DIR_MAX];
 	struct tf_em_caps em_caps[TF_DIR_MAX];
diff --git a/drivers/net/bnxt/tf_core/tfp.c b/drivers/net/bnxt/tf_core/tfp.c
index 426a182a90..0f6d63cc00 100644
--- a/drivers/net/bnxt/tf_core/tfp.c
+++ b/drivers/net/bnxt/tf_core/tfp.c
@@ -178,3 +178,22 @@ tfp_get_fid(struct tf *tfp, uint16_t *fw_fid)
 
 	return 0;
 }
+
+int
+tfp_get_pf(struct tf *tfp, uint16_t *pf)
+{
+	struct bnxt *bp = NULL;
+
+	if (tfp == NULL || pf == NULL)
+		return -EINVAL;
+
+	bp = container_of(tfp, struct bnxt, tfp);
+	if (BNXT_VF(bp) && bp->parent) {
+		*pf = bp->parent->fid - 1;
+		return 0;
+	} else if (BNXT_PF(bp)) {
+		*pf = bp->fw_fid - 1;
+		return 0;
+	}
+	return -EINVAL;
+}
diff --git a/drivers/net/bnxt/tf_core/tfp.h b/drivers/net/bnxt/tf_core/tfp.h
index 421a7d9f78..551b9c569f 100644
--- a/drivers/net/bnxt/tf_core/tfp.h
+++ b/drivers/net/bnxt/tf_core/tfp.h
@@ -268,4 +268,20 @@ int tfp_get_fid(struct tf *tfp, uint16_t *fw_fid);
  */
 int tfp_get_fid(struct tf *tfp, uint16_t *fw_fid);
 
+/**
+ * Get the PF associated with the fw communications channel.
+ *
+ * [in] session
+ *   Pointer to session handle
+ *
+ * [out] pf
+ *   Pointer to the pf id
+ *
+ * Returns:
+ *   0       - Success
+ *   -EINVAL - Failure
+ *
+ */
+int tfp_get_pf(struct tf *tfp, uint16_t *pf);
+
 #endif /* _TFP_H_ */
-- 
2.21.1 (Apple Git-122.3)