From patchwork Wed Nov 3 00:52:35 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ajit Khaparde X-Patchwork-Id: 103557 X-Patchwork-Delegate: ajit.khaparde@broadcom.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 704A2A0C4B; Wed, 3 Nov 2021 01:53:27 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 7E14141103; Wed, 3 Nov 2021 01:53:03 +0100 (CET) Received: from mail-pl1-f179.google.com (mail-pl1-f179.google.com [209.85.214.179]) by mails.dpdk.org (Postfix) with ESMTP id CB9B44114B for ; Wed, 3 Nov 2021 01:53:01 +0100 (CET) Received: by mail-pl1-f179.google.com with SMTP id p18so1299364plf.13 for ; Tue, 02 Nov 2021 17:53:01 -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=9bZL8mhmETCS4gLaZbG9pFfoiXNrdngKfdQS6KhudcM=; b=fY/U6gJ424mExbcVSthiiVy4qqP/b3GqT0Ah3Mw/ByyW0vv6qxkhk5QhDrdSwFTQme Fkc/BbTVqJxI+TXR1y3FXSXanP996y8qkhNCoFkEbdECjGgVYZjRP79NaOcl4+qutvwr OWqPCdTX62/mKFH07RezEoNZJqr8Nj75SXnKI= 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=9bZL8mhmETCS4gLaZbG9pFfoiXNrdngKfdQS6KhudcM=; b=CJ4s5+rOhlgm6WeMd0KjLnOhxWbl7xYPiecOXultz1SCYSqCD/40h/1xluvMb6ekGi llacF88lUrM9WkhbQLyiI9JQ8c0sOAqc5LD29cAkidUNZpjw8VhLIhTMBRm8YvDzYLxB zmJFpOmQYDaWa6/6rOWD9pKpQuY4vbgzI+gAMaEfAuwzXCLPyCbOYgWIWEZU2DwYnTbu K0LvwI2lvMHLZXLvOTKmW0aaaRtPQpSKhjsrI8TZ4urcxHMWimkVR3DAe2YKYFvcld8s NEcl7/nvNQP31Fp9x6A6vqi2+nCISBv0Kx08gm+rlHEtETm2JcF5EZO0XVdXwd5U7HEr w9iw== X-Gm-Message-State: AOAM533uiQRxq7Oz+SHukC0UeA7w2inZlEHm09XgAe38v76etCOzvdxX octg7Phsoob/spD+kR/nQLINB6wWZrxCpJXOH44mEtfxU9Woh+5iuQivAUrsu+VosDpcDJYeAmi nnzW7uHFODhzzEy2Pj6ijb1LZYGVDt848BC/k5DDSI7xrOggqg1j1d9aIrxwJmqo= X-Google-Smtp-Source: ABdhPJxNOHNiAvtxf6syvQJb5KUWoQTi0ttDMF1BydFTkVuEQqLgRRiGc4F+0d1NOVHUfh5annIztQ== X-Received: by 2002:a17:90a:d481:: with SMTP id s1mr10513535pju.66.1635900780596; Tue, 02 Nov 2021 17:53:00 -0700 (PDT) Received: from localhost.localdomain ([192.19.224.250]) by smtp.gmail.com with ESMTPSA id k2sm323450pfu.112.2021.11.02.17.52.59 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 02 Nov 2021 17:53:00 -0700 (PDT) From: Ajit Khaparde To: dev@dpdk.org Cc: Farah Smith , Kishore Padmanabha , Venkat Duvvuru , Randy Schacher , Shahaji Bhosle Date: Tue, 2 Nov 2021 17:52:35 -0700 Message-Id: <20211103005251.25524-5-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 X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: [dpdk-dev] [PATCH v4 04/20] net/bnxt: add clear on read support 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" From: Farah Smith Add clear on read stats support for Thor. Currently, the flow stats are not cleared after they are read from the FW. This patch adds support for clear on read. Since clear on read support is added for flow stats in Thor, the flow accumulation is enabled on Thor as well. Signed-off-by: Farah Smith Signed-off-by: Kishore Padmanabha Signed-off-by: Venkat Duvvuru Reviewed-by: Randy Schacher Reviewed-by: Shahaji Bhosle Reviewed-by: Ajit Khaparde --- drivers/net/bnxt/tf_core/tf_msg.c | 24 ++++++++++++++++++++---- drivers/net/bnxt/tf_core/tf_msg.h | 6 ++++-- drivers/net/bnxt/tf_core/tf_tbl.c | 6 ++++-- drivers/net/bnxt/tf_core/tf_tbl_sram.c | 13 +++++++++++-- drivers/net/bnxt/tf_ulp/bnxt_ulp.c | 3 ++- 5 files changed, 41 insertions(+), 11 deletions(-) diff --git a/drivers/net/bnxt/tf_core/tf_msg.c b/drivers/net/bnxt/tf_core/tf_msg.c index 0fbb2fe837..ea6e2af7ce 100644 --- a/drivers/net/bnxt/tf_core/tf_msg.c +++ b/drivers/net/bnxt/tf_core/tf_msg.c @@ -1851,7 +1851,8 @@ tf_msg_get_tbl_entry(struct tf *tfp, uint16_t hcapi_type, uint16_t size, uint8_t *data, - uint32_t index) + uint32_t index, + bool clear_on_read) { int rc; struct hwrm_tf_tbl_type_get_input req = { 0 }; @@ -1860,6 +1861,7 @@ tf_msg_get_tbl_entry(struct tf *tfp, uint8_t fw_session_id; struct tf_dev_info *dev; struct tf_session *tfs; + uint32_t flags = 0; /* Retrieve the session information */ rc = tf_session_get_session_internal(tfp, &tfs); @@ -1889,10 +1891,16 @@ tf_msg_get_tbl_entry(struct tf *tfp, strerror(-rc)); return rc; } + flags = (dir == TF_DIR_TX ? + HWRM_TF_TBL_TYPE_GET_INPUT_FLAGS_DIR_TX : + HWRM_TF_TBL_TYPE_GET_INPUT_FLAGS_DIR_RX); + + if (clear_on_read) + flags |= HWRM_TF_TBL_TYPE_GET_INPUT_FLAGS_CLEAR_ON_READ; /* Populate the request */ req.fw_session_id = tfp_cpu_to_le_32(fw_session_id); - req.flags = tfp_cpu_to_le_16(dir); + req.flags = tfp_cpu_to_le_16(flags); req.type = tfp_cpu_to_le_32(hcapi_type); req.index = tfp_cpu_to_le_32(index); @@ -2105,7 +2113,8 @@ tf_msg_bulk_get_tbl_entry(struct tf *tfp, uint32_t starting_idx, uint16_t num_entries, uint16_t entry_sz_in_bytes, - uint64_t physical_mem_addr) + uint64_t physical_mem_addr, + bool clear_on_read) { int rc; struct tfp_send_msg_parms parms = { 0 }; @@ -2115,6 +2124,7 @@ tf_msg_bulk_get_tbl_entry(struct tf *tfp, uint8_t fw_session_id; struct tf_dev_info *dev; struct tf_session *tfs; + uint32_t flags = 0; /* Retrieve the session information */ rc = tf_session_get_session(tfp, &tfs); @@ -2144,10 +2154,16 @@ tf_msg_bulk_get_tbl_entry(struct tf *tfp, strerror(-rc)); return rc; } + flags = (dir == TF_DIR_TX ? + HWRM_TF_TBL_TYPE_BULK_GET_INPUT_FLAGS_DIR_TX : + HWRM_TF_TBL_TYPE_BULK_GET_INPUT_FLAGS_DIR_RX); + + if (clear_on_read) + flags |= HWRM_TF_TBL_TYPE_BULK_GET_INPUT_FLAGS_CLEAR_ON_READ; /* Populate the request */ req.fw_session_id = tfp_cpu_to_le_32(fw_session_id); - req.flags = tfp_cpu_to_le_16(dir); + req.flags = tfp_cpu_to_le_16(flags); req.type = tfp_cpu_to_le_32(hcapi_type); req.start_index = tfp_cpu_to_le_32(starting_idx); req.num_entries = tfp_cpu_to_le_32(num_entries); diff --git a/drivers/net/bnxt/tf_core/tf_msg.h b/drivers/net/bnxt/tf_core/tf_msg.h index b26b15bfa3..718bc2f3b2 100644 --- a/drivers/net/bnxt/tf_core/tf_msg.h +++ b/drivers/net/bnxt/tf_core/tf_msg.h @@ -652,7 +652,8 @@ int tf_msg_get_tbl_entry(struct tf *tfp, uint16_t hcapi_type, uint16_t size, uint8_t *data, - uint32_t index); + uint32_t index, + bool clear_on_read); /* HWRM Tunneled messages */ @@ -704,7 +705,8 @@ int tf_msg_bulk_get_tbl_entry(struct tf *tfp, uint32_t starting_idx, uint16_t num_entries, uint16_t entry_sz_in_bytes, - uint64_t physical_mem_addr); + uint64_t physical_mem_addr, + bool clear_on_read); /** * Sends Set message of a IF Table Type element to the firmware. diff --git a/drivers/net/bnxt/tf_core/tf_tbl.c b/drivers/net/bnxt/tf_core/tf_tbl.c index 0a8720e7b6..12eca36491 100644 --- a/drivers/net/bnxt/tf_core/tf_tbl.c +++ b/drivers/net/bnxt/tf_core/tf_tbl.c @@ -441,7 +441,8 @@ tf_tbl_get(struct tf *tfp, hcapi_type, parms->data_sz_in_bytes, parms->data, - parms->idx); + parms->idx, + false); if (rc) { TFP_DRV_LOG(ERR, "%s, Get failed, type:%s, rc:%s\n", @@ -526,7 +527,8 @@ tf_tbl_bulk_get(struct tf *tfp, parms->starting_idx, parms->num_entries, parms->entry_sz_in_bytes, - parms->physical_mem_addr); + parms->physical_mem_addr, + false); if (rc) { TFP_DRV_LOG(ERR, "%s, Bulk get failed, type:%s, rc:%s\n", diff --git a/drivers/net/bnxt/tf_core/tf_tbl_sram.c b/drivers/net/bnxt/tf_core/tf_tbl_sram.c index 636811bc2d..567f912dfa 100644 --- a/drivers/net/bnxt/tf_core/tf_tbl_sram.c +++ b/drivers/net/bnxt/tf_core/tf_tbl_sram.c @@ -539,6 +539,7 @@ tf_tbl_sram_get(struct tf *tfp, struct tf_tbl_sram_get_info_parms iparms = { 0 }; struct tf_sram_mgr_is_allocated_parms aparms = { 0 }; void *sram_handle = NULL; + bool clear_on_read = false; TF_CHECK_PARMS3(tfp, parms, parms->data); @@ -608,6 +609,8 @@ tf_tbl_sram_get(struct tf *tfp, strerror(-rc)); return rc; } + if (parms->type == TF_TBL_TYPE_ACT_STATS_64) + clear_on_read = true; /* Get the entry */ rc = tf_msg_get_tbl_entry(tfp, @@ -615,7 +618,8 @@ tf_tbl_sram_get(struct tf *tfp, hcapi_type, parms->data_sz_in_bytes, parms->data, - parms->idx); + parms->idx, + clear_on_read); if (rc) { TFP_DRV_LOG(ERR, "%s, Get failed, type:%s, rc:%s\n", @@ -643,6 +647,7 @@ tf_tbl_sram_bulk_get(struct tf *tfp, struct tf_sram_mgr_is_allocated_parms aparms = { 0 }; bool allocated = false; void *sram_handle = NULL; + bool clear_on_read = false; TF_CHECK_PARMS2(tfp, parms); @@ -728,6 +733,9 @@ tf_tbl_sram_bulk_get(struct tf *tfp, return rc; } + if (parms->type == TF_TBL_TYPE_ACT_STATS_64) + clear_on_read = true; + /* Get the entries */ rc = tf_msg_bulk_get_tbl_entry(tfp, parms->dir, @@ -735,7 +743,8 @@ tf_tbl_sram_bulk_get(struct tf *tfp, parms->starting_idx, parms->num_entries, parms->entry_sz_in_bytes, - parms->physical_mem_addr); + parms->physical_mem_addr, + clear_on_read); if (rc) { TFP_DRV_LOG(ERR, "%s, Bulk get failed, type:%s, rc:%s\n", diff --git a/drivers/net/bnxt/tf_ulp/bnxt_ulp.c b/drivers/net/bnxt/tf_ulp/bnxt_ulp.c index dbc8a3c5bb..f1763e2519 100644 --- a/drivers/net/bnxt/tf_ulp/bnxt_ulp.c +++ b/drivers/net/bnxt/tf_ulp/bnxt_ulp.c @@ -1483,7 +1483,8 @@ bnxt_ulp_port_init(struct bnxt *bp) goto jump_to_error; } - if (devid != BNXT_ULP_DEVICE_ID_THOR && BNXT_ACCUM_STATS_EN(bp)) + /* set the accumulation of the stats */ + if (BNXT_ACCUM_STATS_EN(bp)) bp->ulp_ctx->cfg_data->accum_stats = true; BNXT_TF_DBG(DEBUG, "BNXT Port:%d ULP port init, accum_stats:%d\n",