From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 6BE1DA04B5; Mon, 26 Oct 2020 04:57:23 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 950182BF5; Mon, 26 Oct 2020 04:56:37 +0100 (CET) Received: from mail-pg1-f196.google.com (mail-pg1-f196.google.com [209.85.215.196]) by dpdk.org (Postfix) with ESMTP id 0844B2BAF for ; Mon, 26 Oct 2020 04:56:28 +0100 (CET) Received: by mail-pg1-f196.google.com with SMTP id x13so5346066pgp.7 for ; Sun, 25 Oct 2020 20:56:27 -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=ybR3UXCpECjCSQhEytXwBL68+SwqcUwqwgBQArS5MAk=; b=e17OTfvkFUpTT/DdPuTBeJ2ITnwnVahAnkv5uHSUwj9AgYZ793gL1nrmsQIYTF7g7X UTyUn0NwlOXNm4dlF8bZO2quTekoDtgosSS60QJlfqx3cRirwpNZiGZ4Hnx9F7lG33m9 Rw+LyueWydLGbVsubASHLJW8ohLpYvW/rdRzY= 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=ybR3UXCpECjCSQhEytXwBL68+SwqcUwqwgBQArS5MAk=; b=ebH13VbOXh5VuHoBKlENMV6ZnKTfLto5FAlx8JyAlW3R10NvMx9Ee0jp1312dEod+t rYJEXGKPiZPLsLODTmgVpiWzW6pjItFj9cXExaZxt4j/LPsAH3OWipjHvguMSrS58b8I uo+VlNQ7oHQdll8bCyrab00XVsRAjPADZQ+pzLyGBMA07JIWH9RdWXVM7P8vJwFaJeMH cxeJ2jRRsmXGy94IaNJOIUKYbqJ3h4zTHcmm1pa22QYtDWFFVmTMf8a2qeb9sXFJ7gMY amJFRk3pgTWb7UZjcyRuCR+R8bzq5XkbNMyve3VmXMmdncvJn6YTn+JyVH4NpX/2a8Hz mt2g== X-Gm-Message-State: AOAM532CY7ui6cGVdhF4+tRI7I35GkBvnd5zkgBGaReHu3MiNAcCCY5+ Jsq0wxMowqkfoUfCuKwO8kVzYSxmfrmPwzP1bkcosPDPoh8OI41GViIkCClIbniCKrwGpVC7AP3 J8TJKG3ykOcPVFw+LfLziyeWiwngNy6/UxJm9LUURFNofM7efp4njU909yObCKO9nXg== X-Google-Smtp-Source: ABdhPJxg6egHhuGRjH45p8BtDQsiH/4DJ/sAHcvnJe57vBXOzlXFqWW1QqbEop2WNTCJUrw0FthQ3A== X-Received: by 2002:a65:53cc:: with SMTP id z12mr14628245pgr.333.1603684585813; Sun, 25 Oct 2020 20:56:25 -0700 (PDT) Received: from localhost.localdomain ([192.19.228.250]) by smtp.gmail.com with ESMTPSA id z185sm10207463pfz.32.2020.10.25.20.56.24 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sun, 25 Oct 2020 20:56:24 -0700 (PDT) From: Ajit Khaparde To: dev@dpdk.org Cc: Farah Smith , Randy Schacher Date: Sun, 25 Oct 2020 20:56:04 -0700 Message-Id: <20201026035616.19264-4-ajit.khaparde@broadcom.com> X-Mailer: git-send-email 2.21.1 (Apple Git-122.3) In-Reply-To: <20201026035616.19264-1-ajit.khaparde@broadcom.com> References: <20201026035616.19264-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 v4 03/15] 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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" From: Farah Smith 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 Reviewed-by: Randy Schacher Reviewed-by: Ajit Khaparde --- 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)