From patchwork Wed Jul 1 06:51:35 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ajit Khaparde X-Patchwork-Id: 72537 X-Patchwork-Delegate: ajit.khaparde@broadcom.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 12ED9A0350; Wed, 1 Jul 2020 08:55:15 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id C8C5A1C1F2; Wed, 1 Jul 2020 08:52:39 +0200 (CEST) Received: from rnd-relay.smtp.broadcom.com (rnd-relay.smtp.broadcom.com [192.19.229.170]) by dpdk.org (Postfix) with ESMTP id 052711C022 for ; Wed, 1 Jul 2020 08:52:21 +0200 (CEST) Received: from mail-irv-17.broadcom.com (mail-irv-17.lvn.broadcom.net [10.75.242.48]) by rnd-relay.smtp.broadcom.com (Postfix) with ESMTP id 4FEDC30C31D; Tue, 30 Jun 2020 23:52:20 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.10.3 rnd-relay.smtp.broadcom.com 4FEDC30C31D DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=broadcom.com; s=dkimrelay; t=1593586340; bh=45ksyCS8L1BkLvEpvRkITepGOWyLk/D19eA1pDY3x/g=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=H+kFFMpqtCGffYN+vDGDcGQ9Yte8mopL4j6xv7dtSXSWflLgK3zwuzmLfqbAQwS8b krDttRBL+p9YO6UxSfNazCVHuXL38OA6pMi6420GAxOJMQgoRb7Efa5LsBBNkJKdGI EyHecnr/Ulg22ogGx1wb/Yh8Cgf9gKbePjEXYvhE= Received: from localhost.localdomain (unknown [10.230.185.215]) by mail-irv-17.broadcom.com (Postfix) with ESMTP id C40AF14008B; Tue, 30 Jun 2020 23:52:19 -0700 (PDT) From: Ajit Khaparde To: dev@dpdk.org Cc: Shahaji Bhosle , Venkat Duvvuru , Randy Schacher Date: Tue, 30 Jun 2020 23:51:35 -0700 Message-Id: <20200701065212.41391-15-ajit.khaparde@broadcom.com> X-Mailer: git-send-email 2.21.1 (Apple Git-122.3) In-Reply-To: <20200701065212.41391-1-ajit.khaparde@broadcom.com> References: <20200612132934.16488-1-somnath.kotur@broadcom.com> <20200701065212.41391-1-ajit.khaparde@broadcom.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v2 14/51] net/bnxt: support two-level priority for TCAMs 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: Shahaji Bhosle Allow TCAM indexes to be allocated from top or bottom. If the priority is set to 0, allocate from the lowest tcam indexes i.e. from top. Any other value, allocate it from the highest tcam indexes i.e. from bottom. Signed-off-by: Shahaji Bhosle Signed-off-by: Venkat Duvvuru Reviewed-by: Randy Schacher Reviewed-by: Ajit Khaparde --- drivers/net/bnxt/tf_core/tf_core.c | 36 ++++++++++++++++++++++++------ drivers/net/bnxt/tf_core/tf_core.h | 4 +++- drivers/net/bnxt/tf_core/tf_em.c | 6 ++--- drivers/net/bnxt/tf_core/tf_tbl.c | 2 +- 4 files changed, 35 insertions(+), 13 deletions(-) diff --git a/drivers/net/bnxt/tf_core/tf_core.c b/drivers/net/bnxt/tf_core/tf_core.c index 81a88e211..eac57e7bd 100644 --- a/drivers/net/bnxt/tf_core/tf_core.c +++ b/drivers/net/bnxt/tf_core/tf_core.c @@ -893,7 +893,7 @@ tf_alloc_tcam_entry(struct tf *tfp, struct tf_alloc_tcam_entry_parms *parms) { int rc; - int index; + int index = 0; struct tf_session *tfs; struct bitalloc *session_pool; @@ -916,12 +916,34 @@ tf_alloc_tcam_entry(struct tf *tfp, if (rc) return rc; - index = ba_alloc(session_pool); - if (index == BA_FAIL) { - PMD_DRV_LOG(ERR, "%s: %s: No resource available\n", - tf_dir_2_str(parms->dir), - tf_tcam_tbl_2_str(parms->tcam_tbl_type)); - return -ENOMEM; + /* + * priority 0: allocate from top of the tcam i.e. high + * priority !0: allocate index from bottom i.e lowest + */ + if (parms->priority) { + for (index = session_pool->size - 1; index >= 0; index--) { + if (ba_inuse(session_pool, + index) == BA_ENTRY_FREE) { + break; + } + } + if (ba_alloc_index(session_pool, + index) == BA_FAIL) { + TFP_DRV_LOG(ERR, + "%s: %s: ba_alloc index %d failed\n", + tf_dir_2_str(parms->dir), + tf_tcam_tbl_2_str(parms->tcam_tbl_type), + index); + return -ENOMEM; + } + } else { + index = ba_alloc(session_pool); + if (index == BA_FAIL) { + TFP_DRV_LOG(ERR, "%s: %s: Out of resource\n", + tf_dir_2_str(parms->dir), + tf_tcam_tbl_2_str(parms->tcam_tbl_type)); + return -ENOMEM; + } } parms->idx = index; diff --git a/drivers/net/bnxt/tf_core/tf_core.h b/drivers/net/bnxt/tf_core/tf_core.h index 74ed24e5a..f1ef00b30 100644 --- a/drivers/net/bnxt/tf_core/tf_core.h +++ b/drivers/net/bnxt/tf_core/tf_core.h @@ -799,7 +799,9 @@ struct tf_alloc_tcam_entry_parms { */ uint8_t *mask; /** - * [in] Priority of entry requested (definition TBD) + * [in] Priority of entry requested + * 0: index from top i.e. highest priority first + * !0: index from bottom i.e lowest priority first */ uint32_t priority; /** diff --git a/drivers/net/bnxt/tf_core/tf_em.c b/drivers/net/bnxt/tf_core/tf_em.c index fd1797e39..91cbc6299 100644 --- a/drivers/net/bnxt/tf_core/tf_em.c +++ b/drivers/net/bnxt/tf_core/tf_em.c @@ -479,8 +479,7 @@ int tf_insert_em_internal_entry(struct tf *tfp, rc = stack_pop(pool, &index); if (rc != 0) { - PMD_DRV_LOG - (ERR, + TFP_DRV_LOG(ERR, "dir:%d, EM entry index allocation failed\n", parms->dir); return rc; @@ -495,8 +494,7 @@ int tf_insert_em_internal_entry(struct tf *tfp, if (rc != 0) return -1; - PMD_DRV_LOG - (ERR, + TFP_DRV_LOG(INFO, "Internal entry @ Index:%d rptr_index:0x%x rptr_entry:0x%x num_of_entries:%d\n", index * TF_SESSION_EM_ENTRY_SIZE, rptr_index, diff --git a/drivers/net/bnxt/tf_core/tf_tbl.c b/drivers/net/bnxt/tf_core/tf_tbl.c index 26313ed3c..4e236d56c 100644 --- a/drivers/net/bnxt/tf_core/tf_tbl.c +++ b/drivers/net/bnxt/tf_core/tf_tbl.c @@ -1967,7 +1967,7 @@ void tf_dump_dma(struct tf *tfp, uint32_t tbl_scope_id) tbl_scope_cb = tbl_scope_cb_find(session, tbl_scope_id); if (tbl_scope_cb == NULL) - PMD_DRV_LOG(ERR, "No table scope\n"); + TFP_DRV_LOG(ERR, "No table scope\n"); for (dir = 0; dir < TF_DIR_MAX; dir++) { printf("Direction %s:\n", (dir == TF_DIR_RX ? "Rx" : "Tx"));