Blame SOURCES/0092-netdrv-bnxt_en-Add-support-to-collect-crash-dump-via.patch

f95c89
From 36a2341eb0c9dbff43d31d3ed2ac50acd1b56b47 Mon Sep 17 00:00:00 2001
f95c89
From: Jonathan Toppins <jtoppins@redhat.com>
f95c89
Date: Fri, 6 Dec 2019 20:12:48 -0500
f95c89
Subject: [PATCH 92/96] [netdrv] bnxt_en: Add support to collect crash dump via
f95c89
 ethtool
f95c89
f95c89
Message-id: <cb065cce89746b909d8b6c83587e9bb55465950c.1575651772.git.jtoppins@redhat.com>
f95c89
Patchwork-id: 291386
f95c89
O-Subject: [PATCH rhel8 08/13] bnxt_en: Add support to collect crash dump via ethtool
f95c89
Bugzilla: 1773724
f95c89
RH-Acked-by: Steve Best <sbest@redhat.com>
f95c89
RH-Acked-by: David Arcari <darcari@redhat.com>
f95c89
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
f95c89
RH-Acked-by: John Linville <linville@redhat.com>
f95c89
f95c89
Driver supports 2 types of core dumps.
f95c89
f95c89
1. Live dump - Firmware dump when system is up and running.
f95c89
2. Crash dump - Dump which is collected during firmware crash
f95c89
                that can be retrieved after recovery.
f95c89
Crash dump is currently supported only on specific 58800 chips
f95c89
which can be retrieved using OP-TEE API only, as firmware cannot
f95c89
access this region directly.
f95c89
f95c89
User needs to set the dump flag using following command before
f95c89
initiating the dump collection:
f95c89
f95c89
    $ ethtool -W|--set-dump eth0 N
f95c89
f95c89
Where N is "0" for live dump and "1" for crash dump
f95c89
f95c89
Command to collect the dump after setting the flag:
f95c89
f95c89
    $ ethtool -w eth0 data Filename
f95c89
f95c89
v3: Modify set_dump to support even when CONFIG_TEE_BNXT_FW=n.
f95c89
Also change log message to netdev_info().
f95c89
f95c89
Cc: Jakub Kicinski <jakub.kicinski@netronome.com>
f95c89
Cc: Michael Chan <michael.chan@broadcom.com>
f95c89
Signed-off-by: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
f95c89
Signed-off-by: Sheetal Tigadoli <sheetal.tigadoli@broadcom.com>
f95c89
Signed-off-by: David S. Miller <davem@davemloft.net>
f95c89
(cherry picked from commit 0b0eacf3c83cb292c6eef55c76d5138c9302dc20)
f95c89
Bugzilla: 1773724
f95c89
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=25154853
f95c89
Tested: simple boot test
f95c89
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
f95c89
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
f95c89
---
f95c89
 drivers/net/ethernet/broadcom/bnxt/bnxt.h         |  3 ++
f95c89
 drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 37 +++++++++++++++++++++--
f95c89
 drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.h |  2 ++
f95c89
 3 files changed, 40 insertions(+), 2 deletions(-)
f95c89
f95c89
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.h
f95c89
===================================================================
f95c89
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.h	2020-02-06 16:23:22.576450128 +0100
f95c89
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.h	2020-02-06 16:23:22.708448916 +0100
f95c89
@@ -1807,6 +1807,9 @@
f95c89
 
f95c89
 	u8			num_leds;
f95c89
 	struct bnxt_led_info	leds[BNXT_MAX_LED];
f95c89
+	u16			dump_flag;
f95c89
+#define BNXT_DUMP_LIVE		0
f95c89
+#define BNXT_DUMP_CRASH		1
f95c89
 
f95c89
 	struct bpf_prog		*xdp_prog;
f95c89
 
f95c89
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
f95c89
===================================================================
f95c89
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c	2020-02-06 16:23:21.412460813 +0100
f95c89
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c	2020-02-06 16:23:22.709448907 +0100
f95c89
@@ -3311,6 +3311,24 @@
f95c89
 	return rc;
f95c89
 }
f95c89
 
f95c89
+static int bnxt_set_dump(struct net_device *dev, struct ethtool_dump *dump)
f95c89
+{
f95c89
+	struct bnxt *bp = netdev_priv(dev);
f95c89
+
f95c89
+	if (dump->flag > BNXT_DUMP_CRASH) {
f95c89
+		netdev_info(dev, "Supports only Live(0) and Crash(1) dumps.\n");
f95c89
+		return -EINVAL;
f95c89
+	}
f95c89
+
f95c89
+	if (!IS_ENABLED(CONFIG_TEE_BNXT_FW) && dump->flag == BNXT_DUMP_CRASH) {
f95c89
+		netdev_info(dev, "Cannot collect crash dump as TEE_BNXT_FW config option is not enabled.\n");
f95c89
+		return -EOPNOTSUPP;
f95c89
+	}
f95c89
+
f95c89
+	bp->dump_flag = dump->flag;
f95c89
+	return 0;
f95c89
+}
f95c89
+
f95c89
 static int bnxt_get_dump_flag(struct net_device *dev, struct ethtool_dump *dump)
f95c89
 {
f95c89
 	struct bnxt *bp = netdev_priv(dev);
f95c89
@@ -3323,7 +3341,12 @@
f95c89
 			bp->ver_resp.hwrm_fw_bld_8b << 8 |
f95c89
 			bp->ver_resp.hwrm_fw_rsvd_8b;
f95c89
 
f95c89
-	return bnxt_get_coredump(bp, NULL, &dump->len);
f95c89
+	dump->flag = bp->dump_flag;
f95c89
+	if (bp->dump_flag == BNXT_DUMP_CRASH)
f95c89
+		dump->len = BNXT_CRASH_DUMP_LEN;
f95c89
+	else
f95c89
+		bnxt_get_coredump(bp, NULL, &dump->len);
f95c89
+	return 0;
f95c89
 }
f95c89
 
f95c89
 static int bnxt_get_dump_data(struct net_device *dev, struct ethtool_dump *dump,
f95c89
@@ -3336,7 +3359,16 @@
f95c89
 
f95c89
 	memset(buf, 0, dump->len);
f95c89
 
f95c89
-	return bnxt_get_coredump(bp, buf, &dump->len);
f95c89
+	dump->flag = bp->dump_flag;
f95c89
+	if (dump->flag == BNXT_DUMP_CRASH) {
f95c89
+#ifdef CONFIG_TEE_BNXT_FW
f95c89
+		return tee_bnxt_copy_coredump(buf, 0, dump->len);
f95c89
+#endif
f95c89
+	} else {
f95c89
+		return bnxt_get_coredump(bp, buf, &dump->len);
f95c89
+	}
f95c89
+
f95c89
+	return 0;
f95c89
 }
f95c89
 
f95c89
 void bnxt_ethtool_init(struct bnxt *bp)
f95c89
@@ -3446,6 +3478,7 @@
f95c89
 	.set_phys_id		= bnxt_set_phys_id,
f95c89
 	.self_test		= bnxt_self_test,
f95c89
 	.reset			= bnxt_reset,
f95c89
+	.set_dump		= bnxt_set_dump,
f95c89
 	.get_dump_flag		= bnxt_get_dump_flag,
f95c89
 	.get_dump_data		= bnxt_get_dump_data,
f95c89
 };
f95c89
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.h
f95c89
===================================================================
f95c89
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.h	2020-02-06 16:22:53.098720710 +0100
f95c89
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.h	2020-02-06 16:23:22.709448907 +0100
f95c89
@@ -59,6 +59,8 @@
f95c89
 	#define HWRM_DBG_CMN_FLAGS_MORE	1
f95c89
 };
f95c89
 
f95c89
+#define BNXT_CRASH_DUMP_LEN	(8 << 20)
f95c89
+
f95c89
 #define BNXT_LED_DFLT_ENA				\
f95c89
 	(PORT_LED_CFG_REQ_ENABLES_LED0_ID |		\
f95c89
 	 PORT_LED_CFG_REQ_ENABLES_LED0_STATE |		\