DPDK patches and discussions
 help / color / mirror / Atom feed
From: Kalesh A P <kalesh-anakkur.purayil@broadcom.com>
To: dev@dpdk.org
Cc: ferruh.yigit@intel.com, ajit.khaparde@broadcom.com
Subject: [dpdk-dev] [PATCH 08/11] net/bnxt: handle echo request async message
Date: Wed, 24 Feb 2021 21:25:50 +0530	[thread overview]
Message-ID: <20210224155553.26893-9-kalesh-anakkur.purayil@broadcom.com> (raw)
In-Reply-To: <20210224155553.26893-1-kalesh-anakkur.purayil@broadcom.com>

From: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>

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 <kalesh-anakkur.purayil@broadcom.com>
Reviewed-by: Lance Richardson <lance.richardson@broadcom.com>
Reviewed-by: Ajit Kumar Khaparde <ajit.khaparde@broadcom.com>
---
 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 20b4f92..2c7fd78 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 37fa78e..9142119 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 449cb91..c47c249 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
-- 
2.10.1


  parent reply	other threads:[~2021-02-24 15:34 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-02-24 15:55 [dpdk-dev] [PATCH 00/11] bnxt fixes Kalesh A P
2021-02-24 15:55 ` [dpdk-dev] [PATCH 01/11] net/bnxt: remove unused macro Kalesh A P
2021-02-24 15:55 ` [dpdk-dev] [PATCH 02/11] net/bnxt: fix vnic configuration Kalesh A P
2021-03-10 13:13   ` Ferruh Yigit
2021-03-10 13:15     ` Ferruh Yigit
2021-02-24 15:55 ` [dpdk-dev] [PATCH 03/11] net/bnxt: remove extra blank line Kalesh A P
2021-02-24 15:55 ` [dpdk-dev] [PATCH 04/11] net/bnxt: update number of queues per vnic in single queue mode Kalesh A P
2021-02-24 15:55 ` [dpdk-dev] [PATCH 05/11] net/bnxt: update HWRM structures Kalesh A P
2021-02-24 15:55 ` [dpdk-dev] [PATCH 06/11] net/bnxt: update to new version of backing store Kalesh A P
2021-02-24 15:55 ` [dpdk-dev] [PATCH 07/11] net/bnxt: log port id in async events Kalesh A P
2021-02-24 15:55 ` Kalesh A P [this message]
2021-02-24 15:55 ` [dpdk-dev] [PATCH 09/11] net/bnxt: fix firmware fatal error handling Kalesh A P
2021-02-24 15:55 ` [dpdk-dev] [PATCH 10/11] net/bnxt: fix fw readiness check during recovery Kalesh A P
2021-02-24 15:55 ` [dpdk-dev] [PATCH 11/11] net/bnxt: fix PTP support for thor Kalesh A P
2021-03-03 21:25 ` [dpdk-dev] [PATCH 00/11] bnxt fixes Ajit Khaparde
2021-03-10 13:18 ` Ferruh Yigit
2021-03-10 21:26   ` [dpdk-dev] [PATCH v2 00/12] " Ajit Khaparde
2021-03-10 21:26     ` [dpdk-dev] [PATCH v2 01/12] devtools: update word list Ajit Khaparde
2021-03-12  0:08       ` Ferruh Yigit
2021-03-10 21:26     ` [dpdk-dev] [PATCH v2 02/12] net/bnxt: remove unused macro Ajit Khaparde
2021-03-10 21:26     ` [dpdk-dev] [PATCH v2 03/12] net/bnxt: fix VNIC configuration Ajit Khaparde
2021-03-10 21:26     ` [dpdk-dev] [PATCH v2 04/12] net/bnxt: remove extra blank line Ajit Khaparde
2021-03-10 21:26     ` [dpdk-dev] [PATCH v2 05/12] net/bnxt: fix queues per VNIC Ajit Khaparde
2021-03-10 21:26     ` [dpdk-dev] [PATCH v2 06/12] net/bnxt: update HWRM structures Ajit Khaparde
2021-03-12  0:08       ` Ferruh Yigit
2021-03-12  0:17         ` Ajit Khaparde
2021-03-12  0:26           ` Ferruh Yigit
2021-03-10 21:26     ` [dpdk-dev] [PATCH v2 07/12] net/bnxt: update to new version of backing store Ajit Khaparde
2021-03-10 21:26     ` [dpdk-dev] [PATCH v2 08/12] net/bnxt: log port id in async events Ajit Khaparde
2021-03-10 21:26     ` [dpdk-dev] [PATCH v2 09/12] net/bnxt: handle echo request async message Ajit Khaparde
2021-03-10 21:26     ` [dpdk-dev] [PATCH v2 10/12] net/bnxt: fix firmware fatal error handling Ajit Khaparde
2021-03-10 21:26     ` [dpdk-dev] [PATCH v2 11/12] net/bnxt: fix FW readiness check during recovery Ajit Khaparde
2021-03-10 21:26     ` [dpdk-dev] [PATCH v2 12/12] net/bnxt: fix PTP support for Thor Ajit Khaparde
2021-03-11 17:15     ` [dpdk-dev] [PATCH v2 00/12] bnxt fixes Ajit Khaparde
2021-03-12  5:58       ` [dpdk-dev] [PATCH v3 " Ajit Khaparde
2021-03-12  5:58         ` [dpdk-dev] [PATCH v3 01/12] devtools: update word list Ajit Khaparde
2021-03-12  5:58         ` [dpdk-dev] [PATCH v3 02/12] net/bnxt: remove unused macro Ajit Khaparde
2021-03-12  5:58         ` [dpdk-dev] [PATCH v3 03/12] net/bnxt: fix VNIC configuration Ajit Khaparde
2021-03-12  5:58         ` [dpdk-dev] [PATCH v3 04/12] net/bnxt: remove extra blank line Ajit Khaparde
2021-03-12  5:58         ` [dpdk-dev] [PATCH v3 05/12] net/bnxt: fix queues per VNIC Ajit Khaparde
2021-03-12  5:58         ` [dpdk-dev] [PATCH v3 06/12] net/bnxt: update HWRM structures Ajit Khaparde
2021-03-12  5:58         ` [dpdk-dev] [PATCH v3 07/12] net/bnxt: update to new version of backing store Ajit Khaparde
2021-03-12  5:58         ` [dpdk-dev] [PATCH v3 08/12] net/bnxt: log port id in async events Ajit Khaparde
2021-03-12  5:58         ` [dpdk-dev] [PATCH v3 09/12] net/bnxt: handle echo request async message Ajit Khaparde
2021-03-12  5:58         ` [dpdk-dev] [PATCH v3 10/12] net/bnxt: fix firmware fatal error handling Ajit Khaparde
2021-03-12  5:58         ` [dpdk-dev] [PATCH v3 11/12] net/bnxt: fix FW readiness check during recovery Ajit Khaparde
2021-03-12  5:58         ` [dpdk-dev] [PATCH v3 12/12] net/bnxt: fix PTP support for Thor Ajit Khaparde
2021-03-12 15:19         ` [dpdk-dev] [PATCH v3 00/12] bnxt fixes Ajit Khaparde

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210224155553.26893-9-kalesh-anakkur.purayil@broadcom.com \
    --to=kalesh-anakkur.purayil@broadcom.com \
    --cc=ajit.khaparde@broadcom.com \
    --cc=dev@dpdk.org \
    --cc=ferruh.yigit@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).