From patchwork Wed Mar 10 21:26:34 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ajit Khaparde X-Patchwork-Id: 88908 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 B4143A056A; Wed, 10 Mar 2021 22:27:56 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 9752722A5F9; Wed, 10 Mar 2021 22:27:05 +0100 (CET) Received: from mail-pf1-f177.google.com (mail-pf1-f177.google.com [209.85.210.177]) by mails.dpdk.org (Postfix) with ESMTP id 7402F22A5B4 for ; Wed, 10 Mar 2021 22:27:02 +0100 (CET) Received: by mail-pf1-f177.google.com with SMTP id a188so13032467pfb.4 for ; Wed, 10 Mar 2021 13:27:02 -0800 (PST) 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=HXXxL6nGJvzMqYMuYBFs1m7yytfMgvbHX8eIfGtVNrk=; b=gxXEgxfkmsJ8VdHtVFs7dDeBnXtZ1P/13eJDf9wgoXI8FZJ+9gULnLiV89wxksRNMo 3UM4x27teFpNbyrEbRm45MU5ktqOuLIXqCvmDgMpOjzLilnF7NQsmP0ghDVL3vnELxqc WIbQi1cWFylASe9H+PAQRy7RhdgNOorTTdLG0= 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=HXXxL6nGJvzMqYMuYBFs1m7yytfMgvbHX8eIfGtVNrk=; b=B33B9wMi+Qgb8S+rA6mBpvOAJCAhsvv69o+Y2Qlm9+ta2+FftP2ndamGSyqBDh/0Zt TOqP5hWmPLxfI7IEJBGANXo0312xoE7y6U7gIv8QVf7ftqYzjPPLkvbvK2eMyng+TRS7 X+H4yeG/N0Eex/aw0vyw9DsaxlunWLwMBvxsFIdfCR8PH8+CPurKeNPghGyaiGgFELSo mUgjB5PY57tRcuWEk7hH1wshuyHt12V1kLyq8jMaSaXo/mer+TmruGBPmDpL+yLBpQNY 9oldRTl2Qhr0G1/S0HDkPos3iqI3HlLwCaNCsB6CO5s0D6geICLgXvL+viTPlOXuPqYA 8Jug== X-Gm-Message-State: AOAM5318jPIaxc70TiSGqDSnNA6oQmcxbhXmhnULAI/+3KmySNrzvzL9 TWYiylPSJIunApDWYa+bpfq5ETgIMsHaG188 X-Google-Smtp-Source: ABdhPJzJ6E1oUP5jkdZvHUvUzvvE15naczfP/zJmUZK66bya5df4EzSHh2AWTDvwDW77dZyWMu+p3g== X-Received: by 2002:a63:d118:: with SMTP id k24mr4402785pgg.420.1615411621536; Wed, 10 Mar 2021 13:27:01 -0800 (PST) Received: from localhost.localdomain ([192.19.228.250]) by smtp.gmail.com with ESMTPSA id f2sm265059pju.46.2021.03.10.13.27.00 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 10 Mar 2021 13:27:00 -0800 (PST) From: Ajit Khaparde To: ferruh.yigit@intel.com Cc: ajit.khaparde@broadcom.com, dev@dpdk.org, kalesh-anakkur.purayil@broadcom.com, Lance Richardson Date: Wed, 10 Mar 2021 13:26:34 -0800 Message-Id: <20210310212637.72205-10-ajit.khaparde@broadcom.com> X-Mailer: git-send-email 2.21.1 (Apple Git-122.3) In-Reply-To: <20210310212637.72205-1-ajit.khaparde@broadcom.com> References: <20210310212637.72205-1-ajit.khaparde@broadcom.com> MIME-Version: 1.0 X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: [dpdk-dev] [PATCH v2 09/12] net/bnxt: handle echo request async message 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: Kalesh AP This is a new async message that the firmware can send to check if it can communicate with the driver. This is an added error detection scheme that firmware can use if it suspects errors in the PCIe interface. When the driver receives this async message, it will reply back echoing some data in the async message. If the firmware is not getting the reply with the proper data after some retries, error recovery will kick in. Signed-off-by: Kalesh AP Reviewed-by: Lance Richardson Reviewed-by: Ajit Khaparde --- drivers/net/bnxt/bnxt_cpr.c | 11 +++++++++++ drivers/net/bnxt/bnxt_hwrm.c | 22 ++++++++++++++++++++++ drivers/net/bnxt/bnxt_hwrm.h | 4 ++++ 3 files changed, 37 insertions(+) diff --git a/drivers/net/bnxt/bnxt_cpr.c b/drivers/net/bnxt/bnxt_cpr.c index 20b4f929ba..2c7fd78c3d 100644 --- a/drivers/net/bnxt/bnxt_cpr.c +++ b/drivers/net/bnxt/bnxt_cpr.c @@ -103,6 +103,7 @@ void bnxt_handle_async_event(struct bnxt *bp, uint16_t port_id = bp->eth_dev->data->port_id; struct bnxt_error_recovery_info *info; uint32_t event_data; + uint32_t echo_req_data1, echo_req_data2; switch (event_id) { case HWRM_ASYNC_EVENT_CMPL_EVENT_ID_LINK_STATUS_CHANGE: @@ -204,6 +205,16 @@ void bnxt_handle_async_event(struct bnxt *bp, case HWRM_ASYNC_EVENT_CMPL_EVENT_ID_DEFAULT_VNIC_CHANGE: bnxt_process_default_vnic_change(bp, async_cmp); break; + case HWRM_ASYNC_EVENT_CMPL_EVENT_ID_ECHO_REQUEST: + echo_req_data1 = rte_le_to_cpu_32(async_cmp->event_data1); + echo_req_data2 = rte_le_to_cpu_32(async_cmp->event_data2); + PMD_DRV_LOG(INFO, + "Port %u: Received fw echo request: data1 %#x data2 %#x\n", + port_id, echo_req_data1, echo_req_data2); + if (bp->recovery_info) + bnxt_hwrm_fw_echo_reply(bp, echo_req_data1, + echo_req_data2); + break; default: PMD_DRV_LOG(DEBUG, "handle_async_event id = 0x%x\n", event_id); break; diff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c index 37fa78e79f..9142119954 100644 --- a/drivers/net/bnxt/bnxt_hwrm.c +++ b/drivers/net/bnxt/bnxt_hwrm.c @@ -954,6 +954,9 @@ int bnxt_hwrm_func_driver_register(struct bnxt *bp) req.async_event_fwd[1] |= rte_cpu_to_le_32(ASYNC_CMPL_EVENT_ID_DEFAULT_VNIC_CHANGE); + req.async_event_fwd[2] |= + rte_cpu_to_le_32(ASYNC_CMPL_EVENT_ID_ECHO_REQUEST); + rc = bnxt_hwrm_send_message(bp, &req, sizeof(req), BNXT_USE_CHIMP_MB); HWRM_CHECK_RESULT(); @@ -5891,3 +5894,22 @@ int bnxt_hwrm_cfa_adv_flow_mgmt_qcaps(struct bnxt *bp) return rc; } + +int bnxt_hwrm_fw_echo_reply(struct bnxt *bp, uint32_t echo_req_data1, + uint32_t echo_req_data2) +{ + struct hwrm_func_echo_response_input req = {0}; + struct hwrm_func_echo_response_output *resp = bp->hwrm_cmd_resp_addr; + int rc; + + HWRM_PREP(&req, HWRM_FUNC_ECHO_RESPONSE, BNXT_USE_CHIMP_MB); + req.event_data1 = rte_cpu_to_le_32(echo_req_data1); + req.event_data2 = rte_cpu_to_le_32(echo_req_data2); + + rc = bnxt_hwrm_send_message(bp, &req, sizeof(req), BNXT_USE_CHIMP_MB); + + HWRM_CHECK_RESULT(); + HWRM_UNLOCK(); + + return rc; +} diff --git a/drivers/net/bnxt/bnxt_hwrm.h b/drivers/net/bnxt/bnxt_hwrm.h index 449cb911e5..c47c2498e9 100644 --- a/drivers/net/bnxt/bnxt_hwrm.h +++ b/drivers/net/bnxt/bnxt_hwrm.h @@ -35,6 +35,8 @@ struct hwrm_func_qstats_output; (1 << (HWRM_ASYNC_EVENT_CMPL_EVENT_ID_DEBUG_NOTIFICATION - 32)) #define ASYNC_CMPL_EVENT_ID_DEFAULT_VNIC_CHANGE \ (1 << (HWRM_ASYNC_EVENT_CMPL_EVENT_ID_DEFAULT_VNIC_CHANGE - 32)) +#define ASYNC_CMPL_EVENT_ID_ECHO_REQUEST \ + (1 << (HWRM_ASYNC_EVENT_CMPL_EVENT_ID_ECHO_REQUEST - 64)) #define HWRM_QUEUE_SERVICE_PROFILE_LOSSY \ HWRM_QUEUE_QPORTCFG_OUTPUT_QUEUE_ID0_SERVICE_PROFILE_LOSSY @@ -300,4 +302,6 @@ int bnxt_hwrm_first_vf_id_query(struct bnxt *bp, uint16_t fid, int bnxt_hwrm_cfa_pair_alloc(struct bnxt *bp, struct bnxt_representor *rep); int bnxt_hwrm_cfa_pair_free(struct bnxt *bp, struct bnxt_representor *rep); int bnxt_hwrm_cfa_adv_flow_mgmt_qcaps(struct bnxt *bp); +int bnxt_hwrm_fw_echo_reply(struct bnxt *bp, uint32_t echo_req_data1, + uint32_t echo_req_data2); #endif