c8
imports/c8/kmod-redhat-bnxt_en-1.10.0_dup8.1-2.el8_1
commit
8dc42245ac
@ -0,0 +1 @@
|
||||
SOURCES/bnxt_en-redhat-1.10.0_dup8.1.tar.bz2
|
@ -0,0 +1 @@
|
||||
ad955a9c26bc917e457b85ae4fcc39242a6a7f68 SOURCES/bnxt_en-redhat-1.10.0_dup8.1.tar.bz2
|
@ -0,0 +1,61 @@
|
||||
From 2bb4fd965ddb1682b18a937d61be197a242bc803 Mon Sep 17 00:00:00 2001
|
||||
From: Ivan Vecera <ivecera@redhat.com>
|
||||
Date: Wed, 7 Aug 2019 14:26:29 -0400
|
||||
Subject: [PATCH 01/96] [netdrv] linux/dim: Fix overflow in dim calculation
|
||||
|
||||
Message-id: <20190807142629.15867-1-ivecera@redhat.com>
|
||||
Patchwork-id: 268439
|
||||
O-Subject: [RHEL-8.2 net PATCH 9/9] linux/dim: Fix overflow in dim calculation
|
||||
Bugzilla: 1737807
|
||||
RH-Acked-by: Kamal Heib <kheib@redhat.com>
|
||||
RH-Acked-by: Corinna Vinschen <vinschen@redhat.com>
|
||||
RH-Acked-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
|
||||
Bugzilla: http://bugzilla.redhat.com/show_bug.cgi?id=1737807
|
||||
|
||||
Upstream commit(s):
|
||||
commit f06d0ca45827a5790d7508de4759aed976933d4d
|
||||
Author: Yamin Friedman <yaminf@mellanox.com>
|
||||
Date: Tue Jul 23 10:22:47 2019 +0300
|
||||
|
||||
linux/dim: Fix overflow in dim calculation
|
||||
|
||||
While using net_dim, a dim_sample was used without ever initializing the
|
||||
comps value. Added use of DIV_ROUND_DOWN_ULL() to prevent potential
|
||||
overflow, it should not be a problem to save the final result in an int
|
||||
because after the division by epms the value should not be larger than a
|
||||
few thousand.
|
||||
|
||||
[ 1040.127124] UBSAN: Undefined behaviour in lib/dim/dim.c:78:23
|
||||
[ 1040.130118] signed integer overflow:
|
||||
[ 1040.131643] 134718714 * 100 cannot be represented in type 'int'
|
||||
|
||||
Fixes: 398c2b05bbee ("linux/dim: Add completions count to dim_sample")
|
||||
Signed-off-by: Yamin Friedman <yaminf@mellanox.com>
|
||||
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
|
||||
Acked-by: Saeed Mahameed <saeedm@mellanox.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
Signed-off-by: Ivan Vecera <ivecera@redhat.com>
|
||||
Signed-off-by: Jiri Benc <jbenc@redhat.com>
|
||||
|
||||
Signed-off-by: Timothy Redaelli <tredaelli@redhat.com>
|
||||
Signed-off-by: Phillip Lougher <plougher@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:22:57.646678963 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:10.933557001 +0100
|
||||
@@ -2132,7 +2132,7 @@
|
||||
}
|
||||
}
|
||||
if (bp->flags & BNXT_FLAG_DIM) {
|
||||
- struct net_dim_sample dim_sample;
|
||||
+ struct net_dim_sample dim_sample = {};
|
||||
|
||||
net_dim_sample(cpr->event_ctr,
|
||||
cpr->rx_packets,
|
@ -0,0 +1,176 @@
|
||||
From 467b7f37120a4e7b7583045ec83e549e7d01a28d Mon Sep 17 00:00:00 2001
|
||||
From: Petr Oros <poros@redhat.com>
|
||||
Date: Thu, 5 Sep 2019 10:00:57 -0400
|
||||
Subject: [PATCH 02/96] [netdrv] bnxt_en: Add bnxt_en initial port params table
|
||||
and register it
|
||||
|
||||
Message-id: <8735851440fccbd92993e8958f70edb7811f4512.1567595345.git.poros@redhat.com>
|
||||
Patchwork-id: 270937
|
||||
O-Subject: [RHEL8.2 net PATCH 01/15] bnxt_en: Add bnxt_en initial port params table and register it
|
||||
Bugzilla: 1737133
|
||||
RH-Acked-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
RH-Acked-by: Neil Horman <nhorman@redhat.com>
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Ivan Vecera <ivecera@redhat.com>
|
||||
|
||||
Bugzilla: http://bugzilla.redhat.com/show_bug.cgi?id=1737133
|
||||
|
||||
Conflicts: \
|
||||
- Adjusted due to already aplied 7c62cfb8c5744b ("devlink: publish params
|
||||
only after driver init is done")
|
||||
|
||||
Upstream commit(s):
|
||||
commit 782a624d00fa22e7499f5abc29747501ec671313
|
||||
Author: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
|
||||
Date: Mon Jan 28 18:00:27 2019 +0530
|
||||
|
||||
bnxt_en: Add bnxt_en initial port params table and register it
|
||||
|
||||
Register devlink_port with devlink and create initial port params
|
||||
table for bnxt_en. The table consists of a generic parameter:
|
||||
|
||||
wake_on_lan: Enables Wake on Lan for this port when magic packet
|
||||
is received with this port's MAC address using ACPI pattern.
|
||||
If enabled, the controller asserts a wake pin upon reception of
|
||||
WoL packet. ACPI (Advanced Configuration and Power Interface) is
|
||||
an industry specification for the efficient handling of power
|
||||
consumption in desktop and mobile computers.
|
||||
|
||||
v2->v3:
|
||||
- Modify bnxt_dl_wol_validate(), to throw error message when user gives
|
||||
value other than DEVLINK_PARAM_WAKE_MAGIC ot to disable WOL.
|
||||
- Use netdev_err() instead of netdev_warn(), when devlink_port_register()
|
||||
and devlink_port_params_register() returns error. Also, don't log rc
|
||||
in this message.
|
||||
|
||||
Cc: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
Signed-off-by: Petr Oros <poros@redhat.com>
|
||||
Signed-off-by: Timothy Redaelli <tredaelli@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.h | 1 +
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c | 44 ++++++++++++++++++++++-
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.h | 1 +
|
||||
3 files changed, 45 insertions(+), 1 deletion(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.h
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:22:57.596679422 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:11.133555165 +0100
|
||||
@@ -1613,6 +1613,7 @@
|
||||
|
||||
/* devlink interface and vf-rep structs */
|
||||
struct devlink *dl;
|
||||
+ struct devlink_port dl_port;
|
||||
enum devlink_eswitch_mode eswitch_mode;
|
||||
struct bnxt_vf_rep **vf_reps; /* array of vf-rep ptrs */
|
||||
u16 *cfa_code_map; /* cfa_code -> vf_idx map */
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c 2020-02-06 16:22:57.596679422 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c 2020-02-06 16:23:11.134555156 +0100
|
||||
@@ -37,6 +37,8 @@
|
||||
NVM_OFF_MSIX_VEC_PER_PF_MIN, BNXT_NVM_SHARED_CFG, 7},
|
||||
{BNXT_DEVLINK_PARAM_ID_GRE_VER_CHECK, NVM_OFF_DIS_GRE_VER_CHECK,
|
||||
BNXT_NVM_SHARED_CFG, 1},
|
||||
+
|
||||
+ {DEVLINK_PARAM_GENERIC_ID_WOL, NVM_OFF_WOL, BNXT_NVM_PORT_CFG, 1},
|
||||
};
|
||||
|
||||
static int bnxt_hwrm_nvm_req(struct bnxt *bp, u32 param_id, void *msg,
|
||||
@@ -70,7 +72,8 @@
|
||||
bytesize = roundup(nvm_param.num_bits, BITS_PER_BYTE) / BITS_PER_BYTE;
|
||||
switch (bytesize) {
|
||||
case 1:
|
||||
- if (nvm_param.num_bits == 1)
|
||||
+ if (nvm_param.num_bits == 1 &&
|
||||
+ nvm_param.id != DEVLINK_PARAM_GENERIC_ID_WOL)
|
||||
buf = &val->vbool;
|
||||
else
|
||||
buf = &val->vu8;
|
||||
@@ -164,6 +167,17 @@
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static int bnxt_dl_wol_validate(struct devlink *dl, u32 id,
|
||||
+ union devlink_param_value val,
|
||||
+ struct netlink_ext_ack *extack)
|
||||
+{
|
||||
+ if (val.vu8 && val.vu8 != DEVLINK_PARAM_WAKE_MAGIC) {
|
||||
+ NL_SET_ERR_MSG_MOD(extack, "WOL type is not supported");
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static const struct devlink_param bnxt_dl_params[] = {
|
||||
DEVLINK_PARAM_GENERIC(ENABLE_SRIOV,
|
||||
BIT(DEVLINK_PARAM_CMODE_PERMANENT),
|
||||
@@ -188,6 +202,12 @@
|
||||
NULL),
|
||||
};
|
||||
|
||||
+static const struct devlink_param bnxt_dl_port_params[] = {
|
||||
+ DEVLINK_PARAM_GENERIC(WOL, BIT(DEVLINK_PARAM_CMODE_PERMANENT),
|
||||
+ bnxt_dl_nvm_param_get, bnxt_dl_nvm_param_set,
|
||||
+ bnxt_dl_wol_validate),
|
||||
+};
|
||||
+
|
||||
int bnxt_dl_register(struct bnxt *bp)
|
||||
{
|
||||
struct devlink *dl;
|
||||
@@ -225,10 +245,29 @@
|
||||
goto err_dl_unreg;
|
||||
}
|
||||
|
||||
+ rc = devlink_port_register(dl, &bp->dl_port, bp->pf.port_id);
|
||||
+ if (rc) {
|
||||
+ netdev_err(bp->dev, "devlink_port_register failed");
|
||||
+ goto err_dl_param_unreg;
|
||||
+ }
|
||||
+ devlink_port_type_eth_set(&bp->dl_port, bp->dev);
|
||||
+
|
||||
+ rc = devlink_port_params_register(&bp->dl_port, bnxt_dl_port_params,
|
||||
+ ARRAY_SIZE(bnxt_dl_port_params));
|
||||
+ if (rc) {
|
||||
+ netdev_err(bp->dev, "devlink_port_params_register failed");
|
||||
+ goto err_dl_port_unreg;
|
||||
+ }
|
||||
+
|
||||
devlink_params_publish(dl);
|
||||
|
||||
return 0;
|
||||
|
||||
+err_dl_port_unreg:
|
||||
+ devlink_port_unregister(&bp->dl_port);
|
||||
+err_dl_param_unreg:
|
||||
+ devlink_params_unregister(dl, bnxt_dl_params,
|
||||
+ ARRAY_SIZE(bnxt_dl_params));
|
||||
err_dl_unreg:
|
||||
devlink_unregister(dl);
|
||||
err_dl_free:
|
||||
@@ -244,6 +283,9 @@
|
||||
if (!dl)
|
||||
return;
|
||||
|
||||
+ devlink_port_params_unregister(&bp->dl_port, bnxt_dl_port_params,
|
||||
+ ARRAY_SIZE(bnxt_dl_port_params));
|
||||
+ devlink_port_unregister(&bp->dl_port);
|
||||
devlink_params_unregister(dl, bnxt_dl_params,
|
||||
ARRAY_SIZE(bnxt_dl_params));
|
||||
devlink_unregister(dl);
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.h
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.h 2020-02-06 16:22:57.596679422 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.h 2020-02-06 16:23:11.134555156 +0100
|
||||
@@ -35,6 +35,7 @@
|
||||
|
||||
#define NVM_OFF_MSIX_VEC_PER_PF_MAX 108
|
||||
#define NVM_OFF_MSIX_VEC_PER_PF_MIN 114
|
||||
+#define NVM_OFF_WOL 152
|
||||
#define NVM_OFF_IGNORE_ARI 164
|
||||
#define NVM_OFF_DIS_GRE_VER_CHECK 171
|
||||
#define NVM_OFF_ENABLE_SRIOV 401
|
@ -0,0 +1,111 @@
|
||||
From 2c4d992b57a4b6709fcda6fd12b1f53c19a719cc Mon Sep 17 00:00:00 2001
|
||||
From: Petr Oros <poros@redhat.com>
|
||||
Date: Thu, 5 Sep 2019 10:00:58 -0400
|
||||
Subject: [PATCH 03/96] [netdrv] revert "devlink: Add a generic wake_on_lan
|
||||
port parameter"
|
||||
|
||||
Message-id: <e21412cfa07f102b8c9b95a10d802d6abdd9b409.1567595345.git.poros@redhat.com>
|
||||
Patchwork-id: 270934
|
||||
O-Subject: [RHEL8.2 net PATCH 02/15] Revert "devlink: Add a generic wake_on_lan port parameter"
|
||||
Bugzilla: 1737133
|
||||
RH-Acked-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
RH-Acked-by: Neil Horman <nhorman@redhat.com>
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Ivan Vecera <ivecera@redhat.com>
|
||||
|
||||
Bugzilla: http://bugzilla.redhat.com/show_bug.cgi?id=1737133
|
||||
|
||||
Upstream commit(s):
|
||||
commit da203dfa89ce83c55b6623f73560ef7ec742aca4
|
||||
Author: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
|
||||
Date: Mon Feb 11 14:46:17 2019 +0530
|
||||
|
||||
Revert "devlink: Add a generic wake_on_lan port parameter"
|
||||
|
||||
This reverts commit b639583f9e36d044ac1b13090ae812266992cbac.
|
||||
|
||||
As per discussion with Jakub Kicinski and Michal Kubecek,
|
||||
this will be better addressed by soon-too-come ethtool netlink
|
||||
API with additional indication that given configuration request
|
||||
is supposed to be persisted.
|
||||
|
||||
Also, remove the parameter support from bnxt_en driver.
|
||||
|
||||
Cc: Jiri Pirko <jiri@mellanox.com>
|
||||
Cc: Michael Chan <michael.chan@broadcom.com>
|
||||
Cc: Michal Kubecek <mkubecek@suse.cz>
|
||||
Suggested-by: Jakub Kicinski <jakub.kicinski@netronome.com>
|
||||
Signed-off-by: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
Signed-off-by: Petr Oros <poros@redhat.com>
|
||||
Signed-off-by: Timothy Redaelli <tredaelli@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c | 19 +------------------
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.h | 1 -
|
||||
2 files changed, 1 insertion(+), 19 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c 2020-02-06 16:23:11.134555156 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c 2020-02-06 16:23:11.278553834 +0100
|
||||
@@ -37,8 +37,6 @@
|
||||
NVM_OFF_MSIX_VEC_PER_PF_MIN, BNXT_NVM_SHARED_CFG, 7},
|
||||
{BNXT_DEVLINK_PARAM_ID_GRE_VER_CHECK, NVM_OFF_DIS_GRE_VER_CHECK,
|
||||
BNXT_NVM_SHARED_CFG, 1},
|
||||
-
|
||||
- {DEVLINK_PARAM_GENERIC_ID_WOL, NVM_OFF_WOL, BNXT_NVM_PORT_CFG, 1},
|
||||
};
|
||||
|
||||
static int bnxt_hwrm_nvm_req(struct bnxt *bp, u32 param_id, void *msg,
|
||||
@@ -72,8 +70,7 @@
|
||||
bytesize = roundup(nvm_param.num_bits, BITS_PER_BYTE) / BITS_PER_BYTE;
|
||||
switch (bytesize) {
|
||||
case 1:
|
||||
- if (nvm_param.num_bits == 1 &&
|
||||
- nvm_param.id != DEVLINK_PARAM_GENERIC_ID_WOL)
|
||||
+ if (nvm_param.num_bits == 1)
|
||||
buf = &val->vbool;
|
||||
else
|
||||
buf = &val->vu8;
|
||||
@@ -167,17 +164,6 @@
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static int bnxt_dl_wol_validate(struct devlink *dl, u32 id,
|
||||
- union devlink_param_value val,
|
||||
- struct netlink_ext_ack *extack)
|
||||
-{
|
||||
- if (val.vu8 && val.vu8 != DEVLINK_PARAM_WAKE_MAGIC) {
|
||||
- NL_SET_ERR_MSG_MOD(extack, "WOL type is not supported");
|
||||
- return -EINVAL;
|
||||
- }
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
static const struct devlink_param bnxt_dl_params[] = {
|
||||
DEVLINK_PARAM_GENERIC(ENABLE_SRIOV,
|
||||
BIT(DEVLINK_PARAM_CMODE_PERMANENT),
|
||||
@@ -203,9 +189,6 @@
|
||||
};
|
||||
|
||||
static const struct devlink_param bnxt_dl_port_params[] = {
|
||||
- DEVLINK_PARAM_GENERIC(WOL, BIT(DEVLINK_PARAM_CMODE_PERMANENT),
|
||||
- bnxt_dl_nvm_param_get, bnxt_dl_nvm_param_set,
|
||||
- bnxt_dl_wol_validate),
|
||||
};
|
||||
|
||||
int bnxt_dl_register(struct bnxt *bp)
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.h
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.h 2020-02-06 16:23:11.134555156 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.h 2020-02-06 16:23:11.278553834 +0100
|
||||
@@ -35,7 +35,6 @@
|
||||
|
||||
#define NVM_OFF_MSIX_VEC_PER_PF_MAX 108
|
||||
#define NVM_OFF_MSIX_VEC_PER_PF_MIN 114
|
||||
-#define NVM_OFF_WOL 152
|
||||
#define NVM_OFF_IGNORE_ARI 164
|
||||
#define NVM_OFF_DIS_GRE_VER_CHECK 171
|
||||
#define NVM_OFF_ENABLE_SRIOV 401
|
@ -0,0 +1,47 @@
|
||||
From 67688aa4d866e8db3ce8ffcece88dfce0615291b Mon Sep 17 00:00:00 2001
|
||||
From: Petr Oros <poros@redhat.com>
|
||||
Date: Thu, 5 Sep 2019 10:00:59 -0400
|
||||
Subject: [PATCH 04/96] [netdrv] bnxt: add missing net/devlink.h include
|
||||
|
||||
Message-id: <53e744a37a2f5e808c071e9b3f668df45dde6438.1567595345.git.poros@redhat.com>
|
||||
Patchwork-id: 270938
|
||||
O-Subject: [RHEL8.2 net PATCH 03/15] bnxt: add missing net/devlink.h include
|
||||
Bugzilla: 1737133
|
||||
RH-Acked-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
RH-Acked-by: Neil Horman <nhorman@redhat.com>
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Ivan Vecera <ivecera@redhat.com>
|
||||
|
||||
Bugzilla: http://bugzilla.redhat.com/show_bug.cgi?id=1737133
|
||||
|
||||
Upstream commit(s):
|
||||
commit 477edb7806b652043750aa33c584b9838a7c2123
|
||||
Author: Jiri Pirko <jiri@mellanox.com>
|
||||
Date: Sun Mar 24 11:14:25 2019 +0100
|
||||
|
||||
bnxt: add missing net/devlink.h include
|
||||
|
||||
devlink functions are in use, so include the related header file.
|
||||
|
||||
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
Signed-off-by: Petr Oros <poros@redhat.com>
|
||||
Signed-off-by: Timothy Redaelli <tredaelli@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c 2020-02-06 16:23:11.278553834 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c 2020-02-06 16:23:11.413552595 +0100
|
||||
@@ -9,6 +9,7 @@
|
||||
|
||||
#include <linux/pci.h>
|
||||
#include <linux/netdevice.h>
|
||||
+#include <net/devlink.h>
|
||||
#include "bnxt_hsi.h"
|
||||
#include "bnxt.h"
|
||||
#include "bnxt_vfr.h"
|
@ -0,0 +1,49 @@
|
||||
From 1194d1ea18ead0d3eec03bfeefa88b5a9b4702bc Mon Sep 17 00:00:00 2001
|
||||
From: Petr Oros <poros@redhat.com>
|
||||
Date: Thu, 5 Sep 2019 10:01:01 -0400
|
||||
Subject: [PATCH 05/96] [netdrv] bnxt: set devlink port attrs properly
|
||||
|
||||
Message-id: <a3e8d522635a4fb639910970dcff2a4aee7b8b74.1567595345.git.poros@redhat.com>
|
||||
Patchwork-id: 270939
|
||||
O-Subject: [RHEL8.2 net PATCH 05/15] bnxt: set devlink port attrs properly
|
||||
Bugzilla: 1737133
|
||||
RH-Acked-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
RH-Acked-by: Neil Horman <nhorman@redhat.com>
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Ivan Vecera <ivecera@redhat.com>
|
||||
|
||||
Bugzilla: http://bugzilla.redhat.com/show_bug.cgi?id=1737133
|
||||
|
||||
Upstream commit(s):
|
||||
commit a0e18132ec51301414a5c92e6c258c2e62fdf08f
|
||||
Author: Jiri Pirko <jiri@mellanox.com>
|
||||
Date: Sun Mar 24 11:14:27 2019 +0100
|
||||
|
||||
bnxt: set devlink port attrs properly
|
||||
|
||||
Set the attrs properly so delink has enough info to generate physical
|
||||
port names.
|
||||
|
||||
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
Signed-off-by: Petr Oros <poros@redhat.com>
|
||||
Signed-off-by: Timothy Redaelli <tredaelli@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c 2020-02-06 16:23:11.413552595 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c 2020-02-06 16:23:11.535551475 +0100
|
||||
@@ -229,6 +229,8 @@
|
||||
goto err_dl_unreg;
|
||||
}
|
||||
|
||||
+ devlink_port_attrs_set(&bp->dl_port, DEVLINK_PORT_FLAVOUR_PHYSICAL,
|
||||
+ bp->pf.port_id, false, 0);
|
||||
rc = devlink_port_register(dl, &bp->dl_port, bp->pf.port_id);
|
||||
if (rc) {
|
||||
netdev_err(bp->dev, "devlink_port_register failed");
|
@ -0,0 +1,58 @@
|
||||
From 01c377f7da9b3c4c36cc9f764e0d133aab619e64 Mon Sep 17 00:00:00 2001
|
||||
From: Petr Oros <poros@redhat.com>
|
||||
Date: Thu, 5 Sep 2019 10:01:02 -0400
|
||||
Subject: [PATCH 06/96] [netdrv] bnxt: call devlink_port_type_eth_set() before
|
||||
port register
|
||||
|
||||
Message-id: <cb34fbcb1af1e95d97609936c5d091d1043eca08.1567595345.git.poros@redhat.com>
|
||||
Patchwork-id: 270943
|
||||
O-Subject: [RHEL8.2 net PATCH 06/15] bnxt: call devlink_port_type_eth_set() before port register
|
||||
Bugzilla: 1737133
|
||||
RH-Acked-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
RH-Acked-by: Neil Horman <nhorman@redhat.com>
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Ivan Vecera <ivecera@redhat.com>
|
||||
|
||||
Bugzilla: http://bugzilla.redhat.com/show_bug.cgi?id=1737133
|
||||
|
||||
Upstream commit(s):
|
||||
commit c3f10cbcaa3d5e1980733c3ccd0261df426412d2
|
||||
Author: Jiri Pirko <jiri@mellanox.com>
|
||||
Date: Sun Mar 24 11:14:28 2019 +0100
|
||||
|
||||
bnxt: call devlink_port_type_eth_set() before port register
|
||||
|
||||
Call devlink_port_type_eth_set() before devlink_port_register(). Bnxt
|
||||
instances won't change type during lifetime. This avoids one extra
|
||||
userspace devlink notification.
|
||||
|
||||
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
Signed-off-by: Petr Oros <poros@redhat.com>
|
||||
Signed-off-by: Timothy Redaelli <tredaelli@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c 2020-02-06 16:23:11.535551475 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c 2020-02-06 16:23:11.657550355 +0100
|
||||
@@ -229,6 +229,7 @@
|
||||
goto err_dl_unreg;
|
||||
}
|
||||
|
||||
+ devlink_port_type_eth_set(&bp->dl_port, bp->dev);
|
||||
devlink_port_attrs_set(&bp->dl_port, DEVLINK_PORT_FLAVOUR_PHYSICAL,
|
||||
bp->pf.port_id, false, 0);
|
||||
rc = devlink_port_register(dl, &bp->dl_port, bp->pf.port_id);
|
||||
@@ -236,7 +237,6 @@
|
||||
netdev_err(bp->dev, "devlink_port_register failed");
|
||||
goto err_dl_param_unreg;
|
||||
}
|
||||
- devlink_port_type_eth_set(&bp->dl_port, bp->dev);
|
||||
|
||||
rc = devlink_port_params_register(&bp->dl_port, bnxt_dl_port_params,
|
||||
ARRAY_SIZE(bnxt_dl_port_params));
|
@ -0,0 +1,55 @@
|
||||
From ca0762826bab5d15667f3d513d4a1f2ee9d1a72c Mon Sep 17 00:00:00 2001
|
||||
From: Petr Oros <poros@redhat.com>
|
||||
Date: Thu, 5 Sep 2019 10:01:03 -0400
|
||||
Subject: [PATCH 07/96] [netdrv] bnxt: set devlink port type after registration
|
||||
|
||||
Message-id: <827b45ca798f38bebb40d7a4adf079df0506cb08.1567595345.git.poros@redhat.com>
|
||||
Patchwork-id: 270941
|
||||
O-Subject: [RHEL8.2 net PATCH 07/15] bnxt: set devlink port type after registration
|
||||
Bugzilla: 1737133
|
||||
RH-Acked-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
RH-Acked-by: Neil Horman <nhorman@redhat.com>
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Ivan Vecera <ivecera@redhat.com>
|
||||
|
||||
Bugzilla: http://bugzilla.redhat.com/show_bug.cgi?id=1737133
|
||||
|
||||
Upstream commit(s):
|
||||
commit d0d54e8c359399a8d07656779d5b6ddae68ef3c7
|
||||
Author: Jiri Pirko <jiri@mellanox.com>
|
||||
Date: Sun Mar 24 11:14:35 2019 +0100
|
||||
|
||||
bnxt: set devlink port type after registration
|
||||
|
||||
Move the type set of devlink port after it is registered.
|
||||
|
||||
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
Signed-off-by: Petr Oros <poros@redhat.com>
|
||||
Signed-off-by: Timothy Redaelli <tredaelli@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c 2020-02-06 16:23:11.657550355 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c 2020-02-06 16:23:11.781549217 +0100
|
||||
@@ -229,7 +229,6 @@
|
||||
goto err_dl_unreg;
|
||||
}
|
||||
|
||||
- devlink_port_type_eth_set(&bp->dl_port, bp->dev);
|
||||
devlink_port_attrs_set(&bp->dl_port, DEVLINK_PORT_FLAVOUR_PHYSICAL,
|
||||
bp->pf.port_id, false, 0);
|
||||
rc = devlink_port_register(dl, &bp->dl_port, bp->pf.port_id);
|
||||
@@ -237,6 +236,7 @@
|
||||
netdev_err(bp->dev, "devlink_port_register failed");
|
||||
goto err_dl_param_unreg;
|
||||
}
|
||||
+ devlink_port_type_eth_set(&bp->dl_port, bp->dev);
|
||||
|
||||
rc = devlink_port_params_register(&bp->dl_port, bnxt_dl_port_params,
|
||||
ARRAY_SIZE(bnxt_dl_port_params));
|
@ -0,0 +1,40 @@
|
||||
From 2882c017dd9e20a2ee60be54b9f2526f546b8ede Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:22:23 -0400
|
||||
Subject: [PATCH 09/96] [netdrv] bnx2x: Mark expected switch fall-throughs
|
||||
|
||||
Message-id: <1206ba4b35133e848acd993afd66d271c4fc1e9b.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276427
|
||||
O-Subject: [RHEL-8.2 PATCH 01/78] bnx2x: Mark expected switch fall-throughs
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
In preparation to enabling -Wimplicit-fallthrough, mark switch cases
|
||||
where we are expecting to fall through.
|
||||
|
||||
Signed-off-by: Gustavo A. R. Silva <gustavo@embeddedor.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit 83607344d667315687e1a5ddd2ad2fbbff22cc43)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:10.933557001 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:11.904548088 +0100
|
||||
@@ -1793,7 +1793,7 @@
|
||||
speed);
|
||||
}
|
||||
set_bit(BNXT_LINK_SPEED_CHNG_SP_EVENT, &bp->sp_event);
|
||||
- /* fall thru */
|
||||
+ /* fall through */
|
||||
}
|
||||
case ASYNC_EVENT_CMPL_EVENT_ID_LINK_STATUS_CHANGE:
|
||||
set_bit(BNXT_LINK_CHNG_SP_EVENT, &bp->sp_event);
|
@ -0,0 +1,42 @@
|
||||
From ee4e5bb0fce41914bc6f43193cdd5b509112c6f3 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:22:24 -0400
|
||||
Subject: [PATCH 10/96] [netdrv] bnx2x: Mark expected switch fall-thoughs
|
||||
|
||||
Message-id: <3f7032881cc02b243f65b2143256790bc0038133.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276428
|
||||
O-Subject: [RHEL-8.2 PATCH 02/78] bnx2x: Mark expected switch fall-thoughs
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
In preparation to enabling -Wimplicit-fallthrough, mark switch cases
|
||||
where we are expecting to fall through.
|
||||
|
||||
Addresses-Coverity-ID: 114878 ("Missing break in switch")
|
||||
Signed-off-by: Gustavo A. R. Silva <gustavo@embeddedor.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit bc171e87a7e29a41b119fdfccd378f7179b39c23)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:11.904548088 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:12.026546968 +0100
|
||||
@@ -1793,8 +1793,8 @@
|
||||
speed);
|
||||
}
|
||||
set_bit(BNXT_LINK_SPEED_CHNG_SP_EVENT, &bp->sp_event);
|
||||
- /* fall through */
|
||||
}
|
||||
+ /* fall through */
|
||||
case ASYNC_EVENT_CMPL_EVENT_ID_LINK_STATUS_CHANGE:
|
||||
set_bit(BNXT_LINK_CHNG_SP_EVENT, &bp->sp_event);
|
||||
break;
|
@ -0,0 +1,75 @@
|
||||
From 7df147aa7b593a55576767db4c79d78340d023d5 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:22:25 -0400
|
||||
Subject: [PATCH 11/96] [netdrv] bnxt_en: Fix firmware signaled resource change
|
||||
logic in open
|
||||
|
||||
Message-id: <8409cf4642a734f8fd0a2bb94d320794dd5c9a1d.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276429
|
||||
O-Subject: [RHEL-8.2 PATCH 03/78] bnxt_en: Fix firmware signaled resource change logic in open.
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
When the driver detects that resources have changed during open, it
|
||||
should reset the rx and tx rings to 0. This will properly setup the
|
||||
init sequence to initialize the default rings again. We also need
|
||||
to signal the RDMA driver to stop and clear its interrupts. We then
|
||||
call the RoCE driver to restart if a new set of default rings is
|
||||
successfully reserved.
|
||||
|
||||
Fixes: 25e1acd6b92b ("bnxt_en: Notify firmware about IF state changes.")
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit 6b95c3e9697254dab0c8eafc6ab9d5e10d2eca4e)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 13 ++++++++++---
|
||||
1 file changed, 10 insertions(+), 3 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:12.026546968 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:12.151545820 +0100
|
||||
@@ -8155,6 +8155,8 @@
|
||||
hw_resc->resv_rx_rings = 0;
|
||||
hw_resc->resv_hw_ring_grps = 0;
|
||||
hw_resc->resv_vnics = 0;
|
||||
+ bp->tx_nr_rings = 0;
|
||||
+ bp->rx_nr_rings = 0;
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
@@ -10409,20 +10411,25 @@
|
||||
if (bp->tx_nr_rings)
|
||||
return 0;
|
||||
|
||||
+ bnxt_ulp_irq_stop(bp);
|
||||
+ bnxt_clear_int_mode(bp);
|
||||
rc = bnxt_set_dflt_rings(bp, true);
|
||||
if (rc) {
|
||||
netdev_err(bp->dev, "Not enough rings available.\n");
|
||||
- return rc;
|
||||
+ goto init_dflt_ring_err;
|
||||
}
|
||||
rc = bnxt_init_int_mode(bp);
|
||||
if (rc)
|
||||
- return rc;
|
||||
+ goto init_dflt_ring_err;
|
||||
+
|
||||
bp->tx_nr_rings_per_tc = bp->tx_nr_rings;
|
||||
if (bnxt_rfs_supported(bp) && bnxt_rfs_capable(bp)) {
|
||||
bp->flags |= BNXT_FLAG_RFS;
|
||||
bp->dev->features |= NETIF_F_NTUPLE;
|
||||
}
|
||||
- return 0;
|
||||
+init_dflt_ring_err:
|
||||
+ bnxt_ulp_irq_restart(bp, rc);
|
||||
+ return rc;
|
||||
}
|
||||
|
||||
int bnxt_restore_pf_fw_resources(struct bnxt *bp)
|
@ -0,0 +1,108 @@
|
||||
From 10271656a2cca09a8fc023e78559156fb0659583 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:22:26 -0400
|
||||
Subject: [PATCH 12/96] [netdrv] cross-tree: phase out dma_zalloc_coherent()
|
||||
|
||||
Message-id: <239a788461171e2df3655e35be52674e381012f6.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276430
|
||||
O-Subject: [RHEL-8.2 PATCH 04/78] cross-tree: phase out dma_zalloc_coherent()
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: Don Dutile <ddutile@redhat.com>
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
We already need to zero out memory for dma_alloc_coherent(), as such
|
||||
using dma_zalloc_coherent() is superflous. Phase it out.
|
||||
|
||||
This change was generated with the following Coccinelle SmPL patch:
|
||||
|
||||
@ replace_dma_zalloc_coherent @
|
||||
expression dev, size, data, handle, flags;
|
||||
@@
|
||||
|
||||
-dma_zalloc_coherent(dev, size, handle, flags)
|
||||
+dma_alloc_coherent(dev, size, handle, flags)
|
||||
|
||||
Suggested-by: Christoph Hellwig <hch@lst.de>
|
||||
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
|
||||
[hch: re-ran the script on the latest tree]
|
||||
Signed-off-by: Christoph Hellwig <hch@lst.de>
|
||||
(cherry picked from commit 750afb08ca71310fcf0c4e2cb1565c63b8235b60)
|
||||
|
||||
Note: only applied bnxt_en/bnxt_re applicable hunks.
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 16 ++++++++--------
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_dcb.c | 4 ++--
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c | 4 ++--
|
||||
3 files changed, 12 insertions(+), 12 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:12.151545820 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:12.276544673 +0100
|
||||
@@ -3476,10 +3476,10 @@
|
||||
goto alloc_tx_ext_stats;
|
||||
|
||||
bp->hw_rx_port_stats_ext =
|
||||
- dma_zalloc_coherent(&pdev->dev,
|
||||
- sizeof(struct rx_port_stats_ext),
|
||||
- &bp->hw_rx_port_stats_ext_map,
|
||||
- GFP_KERNEL);
|
||||
+ dma_alloc_coherent(&pdev->dev,
|
||||
+ sizeof(struct rx_port_stats_ext),
|
||||
+ &bp->hw_rx_port_stats_ext_map,
|
||||
+ GFP_KERNEL);
|
||||
if (!bp->hw_rx_port_stats_ext)
|
||||
return 0;
|
||||
|
||||
@@ -3489,10 +3489,10 @@
|
||||
|
||||
if (bp->hwrm_spec_code >= 0x10902) {
|
||||
bp->hw_tx_port_stats_ext =
|
||||
- dma_zalloc_coherent(&pdev->dev,
|
||||
- sizeof(struct tx_port_stats_ext),
|
||||
- &bp->hw_tx_port_stats_ext_map,
|
||||
- GFP_KERNEL);
|
||||
+ dma_alloc_coherent(&pdev->dev,
|
||||
+ sizeof(struct tx_port_stats_ext),
|
||||
+ &bp->hw_tx_port_stats_ext_map,
|
||||
+ GFP_KERNEL);
|
||||
}
|
||||
bp->flags |= BNXT_FLAG_PORT_STATS_EXT;
|
||||
}
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_dcb.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_dcb.c 2020-02-06 16:22:57.132683682 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_dcb.c 2020-02-06 16:23:12.277544664 +0100
|
||||
@@ -316,8 +316,8 @@
|
||||
|
||||
n = IEEE_8021QAZ_MAX_TCS;
|
||||
data_len = sizeof(*data) + sizeof(*fw_app) * n;
|
||||
- data = dma_zalloc_coherent(&bp->pdev->dev, data_len, &mapping,
|
||||
- GFP_KERNEL);
|
||||
+ data = dma_alloc_coherent(&bp->pdev->dev, data_len, &mapping,
|
||||
+ GFP_KERNEL);
|
||||
if (!data)
|
||||
return -ENOMEM;
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c 2020-02-06 16:23:11.781549217 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c 2020-02-06 16:23:12.277544664 +0100
|
||||
@@ -86,8 +86,8 @@
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
- data_addr = dma_zalloc_coherent(&bp->pdev->dev, bytesize,
|
||||
- &data_dma_addr, GFP_KERNEL);
|
||||
+ data_addr = dma_alloc_coherent(&bp->pdev->dev, bytesize,
|
||||
+ &data_dma_addr, GFP_KERNEL);
|
||||
if (!data_addr)
|
||||
return -ENOMEM;
|
||||
|
@ -0,0 +1,180 @@
|
||||
From 25caba1a0368d1af60c0ee2e817d36a0d97e05e1 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:22:27 -0400
|
||||
Subject: [PATCH 13/96] [netdrv] bnxt: Implement ndo_get_port_parent_id()
|
||||
|
||||
Message-id: <610919f3c6de0c97b6b178b7f643f6c81a2de24a.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276436
|
||||
O-Subject: [RHEL-8.2 PATCH 05/78] bnxt: Implement ndo_get_port_parent_id()
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
BNXT only supports SWITCHDEV_ATTR_ID_PORT_PARENT_ID, which makes it a
|
||||
great candidate to be converted to use the ndo_get_port_parent_id() NDO
|
||||
instead of implementing switchdev_port_attr_get(). The conversion is
|
||||
straight forward here since the PF and VF code use the same getter.
|
||||
|
||||
Since bnxt makes uses of switchdev_port_same_parent_id() convert it to
|
||||
use netdev_port_same_parent_id().
|
||||
|
||||
Acked-by: Jiri Pirko <jiri@mellanox.com>
|
||||
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit 52d5254a2d045bba2a744042319c64e1fe41b5c8)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 28 ++++++++-------------------
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.h | 4 ++--
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c | 2 +-
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_vfr.c | 12 ++++--------
|
||||
4 files changed, 15 insertions(+), 31 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:12.276544673 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:12.414543406 +0100
|
||||
@@ -10099,8 +10099,11 @@
|
||||
return 0;
|
||||
}
|
||||
|
||||
-int bnxt_port_attr_get(struct bnxt *bp, struct switchdev_attr *attr)
|
||||
+int bnxt_get_port_parent_id(struct net_device *dev,
|
||||
+ struct netdev_phys_item_id *ppid)
|
||||
{
|
||||
+ struct bnxt *bp = netdev_priv(dev);
|
||||
+
|
||||
if (bp->eswitch_mode != DEVLINK_ESWITCH_MODE_SWITCHDEV)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
@@ -10108,27 +10111,12 @@
|
||||
if (!BNXT_PF(bp))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
- switch (attr->id) {
|
||||
- case SWITCHDEV_ATTR_ID_PORT_PARENT_ID:
|
||||
- attr->u.ppid.id_len = sizeof(bp->switch_id);
|
||||
- memcpy(attr->u.ppid.id, bp->switch_id, attr->u.ppid.id_len);
|
||||
- break;
|
||||
- default:
|
||||
- return -EOPNOTSUPP;
|
||||
- }
|
||||
- return 0;
|
||||
-}
|
||||
+ ppid->id_len = sizeof(bp->switch_id);
|
||||
+ memcpy(ppid->id, bp->switch_id, ppid->id_len);
|
||||
|
||||
-static int bnxt_swdev_port_attr_get(struct net_device *dev,
|
||||
- struct switchdev_attr *attr)
|
||||
-{
|
||||
- return bnxt_port_attr_get(netdev_priv(dev), attr);
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
-static const struct switchdev_ops bnxt_switchdev_ops = {
|
||||
- .switchdev_port_attr_get = bnxt_swdev_port_attr_get
|
||||
-};
|
||||
-
|
||||
static const struct net_device_ops bnxt_netdev_ops = {
|
||||
.ndo_open = bnxt_open,
|
||||
.ndo_start_xmit = bnxt_start_xmit,
|
||||
@@ -10160,6 +10148,7 @@
|
||||
.ndo_bpf = bnxt_xdp,
|
||||
.ndo_bridge_getlink = bnxt_bridge_getlink,
|
||||
.ndo_bridge_setlink = bnxt_bridge_setlink,
|
||||
+ .ndo_get_port_parent_id = bnxt_get_port_parent_id,
|
||||
.ndo_get_phys_port_name = bnxt_get_phys_port_name
|
||||
};
|
||||
|
||||
@@ -10518,7 +10507,6 @@
|
||||
dev->netdev_ops = &bnxt_netdev_ops;
|
||||
dev->watchdog_timeo = BNXT_TX_TIMEOUT;
|
||||
dev->ethtool_ops = &bnxt_ethtool_ops;
|
||||
- SWITCHDEV_SET_OPS(dev, &bnxt_switchdev_ops);
|
||||
pci_set_drvdata(pdev, dev);
|
||||
|
||||
rc = bnxt_alloc_hwrm_resources(bp);
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.h
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:11.133555165 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:12.415543397 +0100
|
||||
@@ -23,7 +23,6 @@
|
||||
#include <linux/crash_dump.h>
|
||||
#include <net/devlink.h>
|
||||
#include <net/dst_metadata.h>
|
||||
-#include <net/switchdev.h>
|
||||
#include <net/xdp.h>
|
||||
#include <linux/net_dim.h>
|
||||
|
||||
@@ -1799,7 +1798,8 @@
|
||||
int bnxt_setup_mq_tc(struct net_device *dev, u8 tc);
|
||||
int bnxt_get_max_rings(struct bnxt *, int *, int *, bool);
|
||||
int bnxt_restore_pf_fw_resources(struct bnxt *bp);
|
||||
-int bnxt_port_attr_get(struct bnxt *bp, struct switchdev_attr *attr);
|
||||
+int bnxt_get_port_parent_id(struct net_device *dev,
|
||||
+ struct netdev_phys_item_id *ppid);
|
||||
void bnxt_dim_work(struct work_struct *work);
|
||||
int bnxt_hwrm_set_ring_coal(struct bnxt *bp, struct bnxt_napi *bnapi);
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c 2020-02-06 16:22:57.079684168 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c 2020-02-06 16:23:12.415543397 +0100
|
||||
@@ -45,7 +45,7 @@
|
||||
struct bnxt *bp;
|
||||
|
||||
/* check if dev belongs to the same switch */
|
||||
- if (!switchdev_port_same_parent_id(pf_bp->dev, dev)) {
|
||||
+ if (!netdev_port_same_parent_id(pf_bp->dev, dev)) {
|
||||
netdev_info(pf_bp->dev, "dev(ifindex=%d) not on same switch",
|
||||
dev->ifindex);
|
||||
return BNXT_FID_INVALID;
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_vfr.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_vfr.c 2020-02-06 16:22:57.079684168 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_vfr.c 2020-02-06 16:23:12.415543397 +0100
|
||||
@@ -237,21 +237,17 @@
|
||||
strlcpy(info->version, DRV_MODULE_VERSION, sizeof(info->version));
|
||||
}
|
||||
|
||||
-static int bnxt_vf_rep_port_attr_get(struct net_device *dev,
|
||||
- struct switchdev_attr *attr)
|
||||
+static int bnxt_vf_rep_get_port_parent_id(struct net_device *dev,
|
||||
+ struct netdev_phys_item_id *ppid)
|
||||
{
|
||||
struct bnxt_vf_rep *vf_rep = netdev_priv(dev);
|
||||
|
||||
/* as only PORT_PARENT_ID is supported currently use common code
|
||||
* between PF and VF-rep for now.
|
||||
*/
|
||||
- return bnxt_port_attr_get(vf_rep->bp, attr);
|
||||
+ return bnxt_get_port_parent_id(vf_rep->bp->dev, ppid);
|
||||
}
|
||||
|
||||
-static const struct switchdev_ops bnxt_vf_rep_switchdev_ops = {
|
||||
- .switchdev_port_attr_get = bnxt_vf_rep_port_attr_get
|
||||
-};
|
||||
-
|
||||
static const struct ethtool_ops bnxt_vf_rep_ethtool_ops = {
|
||||
.get_drvinfo = bnxt_vf_rep_get_drvinfo
|
||||
};
|
||||
@@ -262,6 +258,7 @@
|
||||
.ndo_start_xmit = bnxt_vf_rep_xmit,
|
||||
.ndo_get_stats64 = bnxt_vf_rep_get_stats64,
|
||||
.ndo_setup_tc = bnxt_vf_rep_setup_tc,
|
||||
+ .ndo_get_port_parent_id = bnxt_vf_rep_get_port_parent_id,
|
||||
.ndo_get_phys_port_name = bnxt_vf_rep_get_phys_port_name
|
||||
};
|
||||
|
||||
@@ -392,7 +389,6 @@
|
||||
|
||||
dev->netdev_ops = &bnxt_vf_rep_netdev_ops;
|
||||
dev->ethtool_ops = &bnxt_vf_rep_ethtool_ops;
|
||||
- SWITCHDEV_SET_OPS(dev, &bnxt_vf_rep_switchdev_ops);
|
||||
/* Just inherit all the featues of the parent PF as the VF-R
|
||||
* uses the RX/TX rings of the parent PF
|
||||
*/
|
@ -0,0 +1,117 @@
|
||||
From 1271da6fd65bb6129a99946546cdd8e1f9e69e2d Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:22:30 -0400
|
||||
Subject: [PATCH 16/96] [netdrv] bnxt: move bp->switch_id initialization to PF
|
||||
probe
|
||||
|
||||
Message-id: <edbaf01b25b2dce490cff02ddb2092da527353fa.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276431
|
||||
O-Subject: [RHEL-8.2 PATCH 08/78] bnxt: move bp->switch_id initialization to PF probe
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
Currently the switch_id is being only initialized when switching eswitch
|
||||
mode from "legacy" to "switchdev". However, nothing prevents the id to
|
||||
be initialized from the very beginning. Physical ports can show it even
|
||||
in "legacy" mode.
|
||||
|
||||
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit 03213a996531e507e03c085d411a313e34357498)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 25 +++++++++++++++++++++++++
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_vfr.c | 25 -------------------------
|
||||
2 files changed, 25 insertions(+), 25 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:12.414543406 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:12.563542039 +0100
|
||||
@@ -10473,6 +10473,26 @@
|
||||
return rc;
|
||||
}
|
||||
|
||||
+static int bnxt_pcie_dsn_get(struct bnxt *bp, u8 dsn[])
|
||||
+{
|
||||
+ struct pci_dev *pdev = bp->pdev;
|
||||
+ int pos = pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_DSN);
|
||||
+ u32 dw;
|
||||
+
|
||||
+ if (!pos) {
|
||||
+ netdev_info(bp->dev, "Unable do read adapter's DSN");
|
||||
+ return -EOPNOTSUPP;
|
||||
+ }
|
||||
+
|
||||
+ /* DSN (two dw) is at an offset of 4 from the cap pos */
|
||||
+ pos += 4;
|
||||
+ pci_read_config_dword(pdev, pos, &dw);
|
||||
+ put_unaligned_le32(dw, &dsn[0]);
|
||||
+ pci_read_config_dword(pdev, pos + 4, &dw);
|
||||
+ put_unaligned_le32(dw, &dsn[4]);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
{
|
||||
static int version_printed;
|
||||
@@ -10613,6 +10633,11 @@
|
||||
goto init_err_pci_clean;
|
||||
}
|
||||
|
||||
+ /* Read the adapter's DSN to use as the eswitch switch_id */
|
||||
+ rc = bnxt_pcie_dsn_get(bp, bp->switch_id);
|
||||
+ if (rc)
|
||||
+ goto init_err_pci_clean;
|
||||
+
|
||||
bnxt_hwrm_func_qcfg(bp);
|
||||
bnxt_hwrm_vnic_qcaps(bp);
|
||||
bnxt_hwrm_port_led_qcaps(bp);
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_vfr.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_vfr.c 2020-02-06 16:23:12.415543397 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_vfr.c 2020-02-06 16:23:12.563542039 +0100
|
||||
@@ -406,26 +406,6 @@
|
||||
dev->min_mtu = ETH_ZLEN;
|
||||
}
|
||||
|
||||
-static int bnxt_pcie_dsn_get(struct bnxt *bp, u8 dsn[])
|
||||
-{
|
||||
- struct pci_dev *pdev = bp->pdev;
|
||||
- int pos = pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_DSN);
|
||||
- u32 dw;
|
||||
-
|
||||
- if (!pos) {
|
||||
- netdev_info(bp->dev, "Unable do read adapter's DSN");
|
||||
- return -EOPNOTSUPP;
|
||||
- }
|
||||
-
|
||||
- /* DSN (two dw) is at an offset of 4 from the cap pos */
|
||||
- pos += 4;
|
||||
- pci_read_config_dword(pdev, pos, &dw);
|
||||
- put_unaligned_le32(dw, &dsn[0]);
|
||||
- pci_read_config_dword(pdev, pos + 4, &dw);
|
||||
- put_unaligned_le32(dw, &dsn[4]);
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
static int bnxt_vf_reps_create(struct bnxt *bp)
|
||||
{
|
||||
u16 *cfa_code_map = NULL, num_vfs = pci_num_vf(bp->pdev);
|
||||
@@ -490,11 +470,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
- /* Read the adapter's DSN to use as the eswitch switch_id */
|
||||
- rc = bnxt_pcie_dsn_get(bp, bp->switch_id);
|
||||
- if (rc)
|
||||
- goto err;
|
||||
-
|
||||
/* publish cfa_code_map only after all VF-reps have been initialized */
|
||||
bp->cfa_code_map = cfa_code_map;
|
||||
bp->eswitch_mode = DEVLINK_ESWITCH_MODE_SWITCHDEV;
|
@ -0,0 +1,616 @@
|
||||
From 4eb7ff7cec3438c66789730caff4d5aa683f6172 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:22:33 -0400
|
||||
Subject: [PATCH 18/96] [netdrv] bnxt_en: Update firmware interface to
|
||||
1.10.0.69
|
||||
|
||||
Message-id: <b721e130576cad34d5ade569f02f5943e0c1ff3b.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276437
|
||||
O-Subject: [RHEL-8.2 PATCH 11/78] bnxt_en: Update firmware interface to 1.10.0.69.
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
PTP API updates for 57500 chips, new RX port stats counters and other
|
||||
miscellaneous updates.
|
||||
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit 4a50ddc2d2ea81d3fcbfbe05657d73ac9a9655fd)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 4 +
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_hsi.h | 263 +++++++++++++++++-----
|
||||
2 files changed, 214 insertions(+), 53 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c 2020-02-06 16:22:56.973685141 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c 2020-02-06 16:23:12.694540836 +0100
|
||||
@@ -345,6 +345,10 @@
|
||||
BNXT_RX_STATS_EXT_ENTRY(resume_roce_pause_events),
|
||||
BNXT_RX_STATS_EXT_COS_ENTRIES,
|
||||
BNXT_RX_STATS_EXT_PFC_ENTRIES,
|
||||
+ BNXT_RX_STATS_EXT_ENTRY(rx_bits),
|
||||
+ BNXT_RX_STATS_EXT_ENTRY(rx_buffer_passed_threshold),
|
||||
+ BNXT_RX_STATS_EXT_ENTRY(rx_pcs_symbol_err),
|
||||
+ BNXT_RX_STATS_EXT_ENTRY(rx_corrected_bits),
|
||||
};
|
||||
|
||||
static const struct {
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_hsi.h
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_hsi.h 2020-02-06 16:22:56.973685141 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_hsi.h 2020-02-06 16:23:12.696540818 +0100
|
||||
@@ -89,7 +89,10 @@
|
||||
__le16 signature;
|
||||
#define SHORT_REQ_SIGNATURE_SHORT_CMD 0x4321UL
|
||||
#define SHORT_REQ_SIGNATURE_LAST SHORT_REQ_SIGNATURE_SHORT_CMD
|
||||
- __le16 unused_0;
|
||||
+ __le16 target_id;
|
||||
+ #define SHORT_REQ_TARGET_ID_DEFAULT 0x0UL
|
||||
+ #define SHORT_REQ_TARGET_ID_TOOLS 0xfffdUL
|
||||
+ #define SHORT_REQ_TARGET_ID_LAST SHORT_REQ_TARGET_ID_TOOLS
|
||||
__le16 size;
|
||||
__le64 req_addr;
|
||||
};
|
||||
@@ -211,6 +214,7 @@
|
||||
#define HWRM_FWD_RESP 0xd2UL
|
||||
#define HWRM_FWD_ASYNC_EVENT_CMPL 0xd3UL
|
||||
#define HWRM_OEM_CMD 0xd4UL
|
||||
+ #define HWRM_PORT_PRBS_TEST 0xd5UL
|
||||
#define HWRM_TEMP_MONITOR_QUERY 0xe0UL
|
||||
#define HWRM_WOL_FILTER_ALLOC 0xf0UL
|
||||
#define HWRM_WOL_FILTER_FREE 0xf1UL
|
||||
@@ -262,6 +266,7 @@
|
||||
#define HWRM_CFA_EEM_QCFG 0x122UL
|
||||
#define HWRM_CFA_EEM_OP 0x123UL
|
||||
#define HWRM_CFA_ADV_FLOW_MGNT_QCAPS 0x124UL
|
||||
+ #define HWRM_CFA_TFLIB 0x125UL
|
||||
#define HWRM_ENGINE_CKV_HELLO 0x12dUL
|
||||
#define HWRM_ENGINE_CKV_STATUS 0x12eUL
|
||||
#define HWRM_ENGINE_CKV_CKEK_ADD 0x12fUL
|
||||
@@ -272,6 +277,7 @@
|
||||
#define HWRM_ENGINE_CKV_RNG_GET 0x134UL
|
||||
#define HWRM_ENGINE_CKV_KEY_GEN 0x135UL
|
||||
#define HWRM_ENGINE_CKV_KEY_LABEL_CFG 0x136UL
|
||||
+ #define HWRM_ENGINE_CKV_KEY_LABEL_QCFG 0x137UL
|
||||
#define HWRM_ENGINE_QG_CONFIG_QUERY 0x13cUL
|
||||
#define HWRM_ENGINE_QG_QUERY 0x13dUL
|
||||
#define HWRM_ENGINE_QG_METER_PROFILE_CONFIG_QUERY 0x13eUL
|
||||
@@ -312,6 +318,11 @@
|
||||
#define HWRM_SELFTEST_IRQ 0x202UL
|
||||
#define HWRM_SELFTEST_RETRIEVE_SERDES_DATA 0x203UL
|
||||
#define HWRM_PCIE_QSTATS 0x204UL
|
||||
+ #define HWRM_MFG_FRU_WRITE_CONTROL 0x205UL
|
||||
+ #define HWRM_MFG_TIMERS_QUERY 0x206UL
|
||||
+ #define HWRM_MFG_OTP_CFG 0x207UL
|
||||
+ #define HWRM_MFG_OTP_QCFG 0x208UL
|
||||
+ #define HWRM_MFG_HDMA_TEST 0x209UL
|
||||
#define HWRM_DBG_READ_DIRECT 0xff10UL
|
||||
#define HWRM_DBG_READ_INDIRECT 0xff11UL
|
||||
#define HWRM_DBG_WRITE_DIRECT 0xff12UL
|
||||
@@ -325,6 +336,8 @@
|
||||
#define HWRM_DBG_FW_CLI 0xff1aUL
|
||||
#define HWRM_DBG_I2C_CMD 0xff1bUL
|
||||
#define HWRM_DBG_RING_INFO_GET 0xff1cUL
|
||||
+ #define HWRM_DBG_CRASHDUMP_HEADER 0xff1dUL
|
||||
+ #define HWRM_DBG_CRASHDUMP_ERASE 0xff1eUL
|
||||
#define HWRM_NVM_FACTORY_DEFAULTS 0xffeeUL
|
||||
#define HWRM_NVM_VALIDATE_OPTION 0xffefUL
|
||||
#define HWRM_NVM_FLUSH 0xfff0UL
|
||||
@@ -350,23 +363,26 @@
|
||||
/* ret_codes (size:64b/8B) */
|
||||
struct ret_codes {
|
||||
__le16 error_code;
|
||||
- #define HWRM_ERR_CODE_SUCCESS 0x0UL
|
||||
- #define HWRM_ERR_CODE_FAIL 0x1UL
|
||||
- #define HWRM_ERR_CODE_INVALID_PARAMS 0x2UL
|
||||
- #define HWRM_ERR_CODE_RESOURCE_ACCESS_DENIED 0x3UL
|
||||
- #define HWRM_ERR_CODE_RESOURCE_ALLOC_ERROR 0x4UL
|
||||
- #define HWRM_ERR_CODE_INVALID_FLAGS 0x5UL
|
||||
- #define HWRM_ERR_CODE_INVALID_ENABLES 0x6UL
|
||||
- #define HWRM_ERR_CODE_UNSUPPORTED_TLV 0x7UL
|
||||
- #define HWRM_ERR_CODE_NO_BUFFER 0x8UL
|
||||
- #define HWRM_ERR_CODE_UNSUPPORTED_OPTION_ERR 0x9UL
|
||||
- #define HWRM_ERR_CODE_HOT_RESET_PROGRESS 0xaUL
|
||||
- #define HWRM_ERR_CODE_HOT_RESET_FAIL 0xbUL
|
||||
- #define HWRM_ERR_CODE_HWRM_ERROR 0xfUL
|
||||
- #define HWRM_ERR_CODE_TLV_ENCAPSULATED_RESPONSE 0x8000UL
|
||||
- #define HWRM_ERR_CODE_UNKNOWN_ERR 0xfffeUL
|
||||
- #define HWRM_ERR_CODE_CMD_NOT_SUPPORTED 0xffffUL
|
||||
- #define HWRM_ERR_CODE_LAST HWRM_ERR_CODE_CMD_NOT_SUPPORTED
|
||||
+ #define HWRM_ERR_CODE_SUCCESS 0x0UL
|
||||
+ #define HWRM_ERR_CODE_FAIL 0x1UL
|
||||
+ #define HWRM_ERR_CODE_INVALID_PARAMS 0x2UL
|
||||
+ #define HWRM_ERR_CODE_RESOURCE_ACCESS_DENIED 0x3UL
|
||||
+ #define HWRM_ERR_CODE_RESOURCE_ALLOC_ERROR 0x4UL
|
||||
+ #define HWRM_ERR_CODE_INVALID_FLAGS 0x5UL
|
||||
+ #define HWRM_ERR_CODE_INVALID_ENABLES 0x6UL
|
||||
+ #define HWRM_ERR_CODE_UNSUPPORTED_TLV 0x7UL
|
||||
+ #define HWRM_ERR_CODE_NO_BUFFER 0x8UL
|
||||
+ #define HWRM_ERR_CODE_UNSUPPORTED_OPTION_ERR 0x9UL
|
||||
+ #define HWRM_ERR_CODE_HOT_RESET_PROGRESS 0xaUL
|
||||
+ #define HWRM_ERR_CODE_HOT_RESET_FAIL 0xbUL
|
||||
+ #define HWRM_ERR_CODE_NO_FLOW_COUNTER_DURING_ALLOC 0xcUL
|
||||
+ #define HWRM_ERR_CODE_KEY_HASH_COLLISION 0xdUL
|
||||
+ #define HWRM_ERR_CODE_KEY_ALREADY_EXISTS 0xeUL
|
||||
+ #define HWRM_ERR_CODE_HWRM_ERROR 0xfUL
|
||||
+ #define HWRM_ERR_CODE_TLV_ENCAPSULATED_RESPONSE 0x8000UL
|
||||
+ #define HWRM_ERR_CODE_UNKNOWN_ERR 0xfffeUL
|
||||
+ #define HWRM_ERR_CODE_CMD_NOT_SUPPORTED 0xffffUL
|
||||
+ #define HWRM_ERR_CODE_LAST HWRM_ERR_CODE_CMD_NOT_SUPPORTED
|
||||
__le16 unused_0[3];
|
||||
};
|
||||
|
||||
@@ -387,11 +403,15 @@
|
||||
#define HW_HASH_INDEX_SIZE 0x80
|
||||
#define HW_HASH_KEY_SIZE 40
|
||||
#define HWRM_RESP_VALID_KEY 1
|
||||
+#define HWRM_TARGET_ID_BONO 0xFFF8
|
||||
+#define HWRM_TARGET_ID_KONG 0xFFF9
|
||||
+#define HWRM_TARGET_ID_APE 0xFFFA
|
||||
+#define HWRM_TARGET_ID_TOOLS 0xFFFD
|
||||
#define HWRM_VERSION_MAJOR 1
|
||||
#define HWRM_VERSION_MINOR 10
|
||||
#define HWRM_VERSION_UPDATE 0
|
||||
-#define HWRM_VERSION_RSVD 47
|
||||
-#define HWRM_VERSION_STR "1.10.0.47"
|
||||
+#define HWRM_VERSION_RSVD 69
|
||||
+#define HWRM_VERSION_STR "1.10.0.69"
|
||||
|
||||
/* hwrm_ver_get_input (size:192b/24B) */
|
||||
struct hwrm_ver_get_input {
|
||||
@@ -442,6 +462,7 @@
|
||||
#define VER_GET_RESP_DEV_CAPS_CFG_ADV_FLOW_COUNTERS_SUPPORTED 0x400UL
|
||||
#define VER_GET_RESP_DEV_CAPS_CFG_CFA_EEM_SUPPORTED 0x800UL
|
||||
#define VER_GET_RESP_DEV_CAPS_CFG_CFA_ADV_FLOW_MGNT_SUPPORTED 0x1000UL
|
||||
+ #define VER_GET_RESP_DEV_CAPS_CFG_CFA_TFLIB_SUPPORTED 0x2000UL
|
||||
u8 roce_fw_maj_8b;
|
||||
u8 roce_fw_min_8b;
|
||||
u8 roce_fw_bld_8b;
|
||||
@@ -449,7 +470,7 @@
|
||||
char hwrm_fw_name[16];
|
||||
char mgmt_fw_name[16];
|
||||
char netctrl_fw_name[16];
|
||||
- u8 reserved2[16];
|
||||
+ char active_pkg_name[16];
|
||||
char roce_fw_name[16];
|
||||
__le16 chip_num;
|
||||
u8 chip_rev;
|
||||
@@ -1047,6 +1068,7 @@
|
||||
#define FUNC_QCAPS_RESP_FLAGS_DYNAMIC_TX_RING_ALLOC 0x200000UL
|
||||
#define FUNC_QCAPS_RESP_FLAGS_HOT_RESET_CAPABLE 0x400000UL
|
||||
#define FUNC_QCAPS_RESP_FLAGS_ERROR_RECOVERY_CAPABLE 0x800000UL
|
||||
+ #define FUNC_QCAPS_RESP_FLAGS_EXT_STATS_SUPPORTED 0x1000000UL
|
||||
u8 mac_address[6];
|
||||
__le16 max_rsscos_ctx;
|
||||
__le16 max_cmpl_rings;
|
||||
@@ -1715,7 +1737,7 @@
|
||||
__le16 mrav_entry_size;
|
||||
__le16 tim_entry_size;
|
||||
__le32 tim_max_entries;
|
||||
- u8 unused_0[2];
|
||||
+ __le16 mrav_num_entries_units;
|
||||
u8 tqm_entries_multiple;
|
||||
u8 valid;
|
||||
};
|
||||
@@ -1728,7 +1750,8 @@
|
||||
__le16 target_id;
|
||||
__le64 resp_addr;
|
||||
__le32 flags;
|
||||
- #define FUNC_BACKING_STORE_CFG_REQ_FLAGS_PREBOOT_MODE 0x1UL
|
||||
+ #define FUNC_BACKING_STORE_CFG_REQ_FLAGS_PREBOOT_MODE 0x1UL
|
||||
+ #define FUNC_BACKING_STORE_CFG_REQ_FLAGS_MRAV_RESERVATION_SPLIT 0x2UL
|
||||
__le32 enables;
|
||||
#define FUNC_BACKING_STORE_CFG_REQ_ENABLES_QP 0x1UL
|
||||
#define FUNC_BACKING_STORE_CFG_REQ_ENABLES_SRQ 0x2UL
|
||||
@@ -2580,7 +2603,7 @@
|
||||
u8 valid;
|
||||
};
|
||||
|
||||
-/* hwrm_port_mac_cfg_input (size:320b/40B) */
|
||||
+/* hwrm_port_mac_cfg_input (size:384b/48B) */
|
||||
struct hwrm_port_mac_cfg_input {
|
||||
__le16 req_type;
|
||||
__le16 cmpl_ring;
|
||||
@@ -2601,6 +2624,7 @@
|
||||
#define PORT_MAC_CFG_REQ_FLAGS_VLAN_PRI2COS_DISABLE 0x400UL
|
||||
#define PORT_MAC_CFG_REQ_FLAGS_TUNNEL_PRI2COS_DISABLE 0x800UL
|
||||
#define PORT_MAC_CFG_REQ_FLAGS_IP_DSCP2COS_DISABLE 0x1000UL
|
||||
+ #define PORT_MAC_CFG_REQ_FLAGS_PTP_ONE_STEP_TX_TS 0x2000UL
|
||||
__le32 enables;
|
||||
#define PORT_MAC_CFG_REQ_ENABLES_IPG 0x1UL
|
||||
#define PORT_MAC_CFG_REQ_ENABLES_LPBK 0x2UL
|
||||
@@ -2610,6 +2634,7 @@
|
||||
#define PORT_MAC_CFG_REQ_ENABLES_RX_TS_CAPTURE_PTP_MSG_TYPE 0x40UL
|
||||
#define PORT_MAC_CFG_REQ_ENABLES_TX_TS_CAPTURE_PTP_MSG_TYPE 0x80UL
|
||||
#define PORT_MAC_CFG_REQ_ENABLES_COS_FIELD_CFG 0x100UL
|
||||
+ #define PORT_MAC_CFG_REQ_ENABLES_PTP_FREQ_ADJ_PPB 0x200UL
|
||||
__le16 port_id;
|
||||
u8 ipg;
|
||||
u8 lpbk;
|
||||
@@ -2642,6 +2667,8 @@
|
||||
#define PORT_MAC_CFG_REQ_COS_FIELD_CFG_DEFAULT_COS_MASK 0xe0UL
|
||||
#define PORT_MAC_CFG_REQ_COS_FIELD_CFG_DEFAULT_COS_SFT 5
|
||||
u8 unused_0[3];
|
||||
+ __s32 ptp_freq_adj_ppb;
|
||||
+ u8 unused_1[4];
|
||||
};
|
||||
|
||||
/* hwrm_port_mac_cfg_output (size:128b/16B) */
|
||||
@@ -2680,8 +2707,9 @@
|
||||
__le16 seq_id;
|
||||
__le16 resp_len;
|
||||
u8 flags;
|
||||
- #define PORT_MAC_PTP_QCFG_RESP_FLAGS_DIRECT_ACCESS 0x1UL
|
||||
- #define PORT_MAC_PTP_QCFG_RESP_FLAGS_HWRM_ACCESS 0x2UL
|
||||
+ #define PORT_MAC_PTP_QCFG_RESP_FLAGS_DIRECT_ACCESS 0x1UL
|
||||
+ #define PORT_MAC_PTP_QCFG_RESP_FLAGS_HWRM_ACCESS 0x2UL
|
||||
+ #define PORT_MAC_PTP_QCFG_RESP_FLAGS_ONE_STEP_TX_TS 0x4UL
|
||||
u8 unused_0[3];
|
||||
__le32 rx_ts_reg_off_lower;
|
||||
__le32 rx_ts_reg_off_upper;
|
||||
@@ -2888,7 +2916,7 @@
|
||||
__le64 pfc_pri7_tx_transitions;
|
||||
};
|
||||
|
||||
-/* rx_port_stats_ext (size:2368b/296B) */
|
||||
+/* rx_port_stats_ext (size:2624b/328B) */
|
||||
struct rx_port_stats_ext {
|
||||
__le64 link_down_events;
|
||||
__le64 continuous_pause_events;
|
||||
@@ -2927,6 +2955,10 @@
|
||||
__le64 pfc_pri6_rx_transitions;
|
||||
__le64 pfc_pri7_rx_duration_us;
|
||||
__le64 pfc_pri7_rx_transitions;
|
||||
+ __le64 rx_bits;
|
||||
+ __le64 rx_buffer_passed_threshold;
|
||||
+ __le64 rx_pcs_symbol_err;
|
||||
+ __le64 rx_corrected_bits;
|
||||
};
|
||||
|
||||
/* hwrm_port_qstats_ext_input (size:320b/40B) */
|
||||
@@ -3029,6 +3061,35 @@
|
||||
u8 valid;
|
||||
};
|
||||
|
||||
+/* hwrm_port_ts_query_input (size:192b/24B) */
|
||||
+struct hwrm_port_ts_query_input {
|
||||
+ __le16 req_type;
|
||||
+ __le16 cmpl_ring;
|
||||
+ __le16 seq_id;
|
||||
+ __le16 target_id;
|
||||
+ __le64 resp_addr;
|
||||
+ __le32 flags;
|
||||
+ #define PORT_TS_QUERY_REQ_FLAGS_PATH 0x1UL
|
||||
+ #define PORT_TS_QUERY_REQ_FLAGS_PATH_TX 0x0UL
|
||||
+ #define PORT_TS_QUERY_REQ_FLAGS_PATH_RX 0x1UL
|
||||
+ #define PORT_TS_QUERY_REQ_FLAGS_PATH_LAST PORT_TS_QUERY_REQ_FLAGS_PATH_RX
|
||||
+ #define PORT_TS_QUERY_REQ_FLAGS_CURRENT_TIME 0x2UL
|
||||
+ __le16 port_id;
|
||||
+ u8 unused_0[2];
|
||||
+};
|
||||
+
|
||||
+/* hwrm_port_ts_query_output (size:192b/24B) */
|
||||
+struct hwrm_port_ts_query_output {
|
||||
+ __le16 error_code;
|
||||
+ __le16 req_type;
|
||||
+ __le16 seq_id;
|
||||
+ __le16 resp_len;
|
||||
+ __le64 ptp_msg_ts;
|
||||
+ __le16 ptp_msg_seqid;
|
||||
+ u8 unused_0[5];
|
||||
+ u8 valid;
|
||||
+};
|
||||
+
|
||||
/* hwrm_port_phy_qcaps_input (size:192b/24B) */
|
||||
struct hwrm_port_phy_qcaps_input {
|
||||
__le16 req_type;
|
||||
@@ -4703,7 +4764,8 @@
|
||||
#define VNIC_QCAPS_RESP_FLAGS_RSS_DFLT_CR_CAP 0x20UL
|
||||
#define VNIC_QCAPS_RESP_FLAGS_ROCE_MIRRORING_CAPABLE_VNIC_CAP 0x40UL
|
||||
#define VNIC_QCAPS_RESP_FLAGS_OUTERMOST_RSS_CAP 0x80UL
|
||||
- u8 unused_1[7];
|
||||
+ __le16 max_aggs_supported;
|
||||
+ u8 unused_1[5];
|
||||
u8 valid;
|
||||
};
|
||||
|
||||
@@ -4723,6 +4785,7 @@
|
||||
#define VNIC_TPA_CFG_REQ_FLAGS_AGG_WITH_SAME_GRE_SEQ 0x20UL
|
||||
#define VNIC_TPA_CFG_REQ_FLAGS_GRO_IPID_CHECK 0x40UL
|
||||
#define VNIC_TPA_CFG_REQ_FLAGS_GRO_TTL_CHECK 0x80UL
|
||||
+ #define VNIC_TPA_CFG_REQ_FLAGS_AGG_PACK_AS_GRO 0x100UL
|
||||
__le32 enables;
|
||||
#define VNIC_TPA_CFG_REQ_ENABLES_MAX_AGG_SEGS 0x1UL
|
||||
#define VNIC_TPA_CFG_REQ_ENABLES_MAX_AGGS 0x2UL
|
||||
@@ -5254,6 +5317,8 @@
|
||||
#define CFA_L2_FILTER_ALLOC_REQ_FLAGS_TRAFFIC_L2 (0x1UL << 4)
|
||||
#define CFA_L2_FILTER_ALLOC_REQ_FLAGS_TRAFFIC_ROCE (0x2UL << 4)
|
||||
#define CFA_L2_FILTER_ALLOC_REQ_FLAGS_TRAFFIC_LAST CFA_L2_FILTER_ALLOC_REQ_FLAGS_TRAFFIC_ROCE
|
||||
+ #define CFA_L2_FILTER_ALLOC_REQ_FLAGS_XDP_DISABLE 0x40UL
|
||||
+ #define CFA_L2_FILTER_ALLOC_REQ_FLAGS_SOURCE_VALID 0x80UL
|
||||
__le32 enables;
|
||||
#define CFA_L2_FILTER_ALLOC_REQ_ENABLES_L2_ADDR 0x1UL
|
||||
#define CFA_L2_FILTER_ALLOC_REQ_ENABLES_L2_ADDR_MASK 0x2UL
|
||||
@@ -5272,8 +5337,11 @@
|
||||
#define CFA_L2_FILTER_ALLOC_REQ_ENABLES_TUNNEL_TYPE 0x4000UL
|
||||
#define CFA_L2_FILTER_ALLOC_REQ_ENABLES_DST_ID 0x8000UL
|
||||
#define CFA_L2_FILTER_ALLOC_REQ_ENABLES_MIRROR_VNIC_ID 0x10000UL
|
||||
+ #define CFA_L2_FILTER_ALLOC_REQ_ENABLES_NUM_VLANS 0x20000UL
|
||||
+ #define CFA_L2_FILTER_ALLOC_REQ_ENABLES_T_NUM_VLANS 0x40000UL
|
||||
u8 l2_addr[6];
|
||||
- u8 unused_0[2];
|
||||
+ u8 num_vlans;
|
||||
+ u8 t_num_vlans;
|
||||
u8 l2_addr_mask[6];
|
||||
__le16 l2_ovlan;
|
||||
__le16 l2_ovlan_mask;
|
||||
@@ -5338,6 +5406,16 @@
|
||||
__le16 resp_len;
|
||||
__le64 l2_filter_id;
|
||||
__le32 flow_id;
|
||||
+ #define CFA_L2_FILTER_ALLOC_RESP_FLOW_ID_VALUE_MASK 0x3fffffffUL
|
||||
+ #define CFA_L2_FILTER_ALLOC_RESP_FLOW_ID_VALUE_SFT 0
|
||||
+ #define CFA_L2_FILTER_ALLOC_RESP_FLOW_ID_TYPE 0x40000000UL
|
||||
+ #define CFA_L2_FILTER_ALLOC_RESP_FLOW_ID_TYPE_INT (0x0UL << 30)
|
||||
+ #define CFA_L2_FILTER_ALLOC_RESP_FLOW_ID_TYPE_EXT (0x1UL << 30)
|
||||
+ #define CFA_L2_FILTER_ALLOC_RESP_FLOW_ID_TYPE_LAST CFA_L2_FILTER_ALLOC_RESP_FLOW_ID_TYPE_EXT
|
||||
+ #define CFA_L2_FILTER_ALLOC_RESP_FLOW_ID_DIR 0x80000000UL
|
||||
+ #define CFA_L2_FILTER_ALLOC_RESP_FLOW_ID_DIR_RX (0x0UL << 31)
|
||||
+ #define CFA_L2_FILTER_ALLOC_RESP_FLOW_ID_DIR_TX (0x1UL << 31)
|
||||
+ #define CFA_L2_FILTER_ALLOC_RESP_FLOW_ID_DIR_LAST CFA_L2_FILTER_ALLOC_RESP_FLOW_ID_DIR_TX
|
||||
u8 unused_0[3];
|
||||
u8 valid;
|
||||
};
|
||||
@@ -5504,6 +5582,16 @@
|
||||
__le16 resp_len;
|
||||
__le64 tunnel_filter_id;
|
||||
__le32 flow_id;
|
||||
+ #define CFA_TUNNEL_FILTER_ALLOC_RESP_FLOW_ID_VALUE_MASK 0x3fffffffUL
|
||||
+ #define CFA_TUNNEL_FILTER_ALLOC_RESP_FLOW_ID_VALUE_SFT 0
|
||||
+ #define CFA_TUNNEL_FILTER_ALLOC_RESP_FLOW_ID_TYPE 0x40000000UL
|
||||
+ #define CFA_TUNNEL_FILTER_ALLOC_RESP_FLOW_ID_TYPE_INT (0x0UL << 30)
|
||||
+ #define CFA_TUNNEL_FILTER_ALLOC_RESP_FLOW_ID_TYPE_EXT (0x1UL << 30)
|
||||
+ #define CFA_TUNNEL_FILTER_ALLOC_RESP_FLOW_ID_TYPE_LAST CFA_TUNNEL_FILTER_ALLOC_RESP_FLOW_ID_TYPE_EXT
|
||||
+ #define CFA_TUNNEL_FILTER_ALLOC_RESP_FLOW_ID_DIR 0x80000000UL
|
||||
+ #define CFA_TUNNEL_FILTER_ALLOC_RESP_FLOW_ID_DIR_RX (0x0UL << 31)
|
||||
+ #define CFA_TUNNEL_FILTER_ALLOC_RESP_FLOW_ID_DIR_TX (0x1UL << 31)
|
||||
+ #define CFA_TUNNEL_FILTER_ALLOC_RESP_FLOW_ID_DIR_LAST CFA_TUNNEL_FILTER_ALLOC_RESP_FLOW_ID_DIR_TX
|
||||
u8 unused_0[3];
|
||||
u8 valid;
|
||||
};
|
||||
@@ -5646,7 +5734,7 @@
|
||||
u8 valid;
|
||||
};
|
||||
|
||||
-/* hwrm_cfa_ntuple_filter_alloc_input (size:1024b/128B) */
|
||||
+/* hwrm_cfa_ntuple_filter_alloc_input (size:1088b/136B) */
|
||||
struct hwrm_cfa_ntuple_filter_alloc_input {
|
||||
__le16 req_type;
|
||||
__le16 cmpl_ring;
|
||||
@@ -5678,6 +5766,7 @@
|
||||
#define CFA_NTUPLE_FILTER_ALLOC_REQ_ENABLES_DST_ID 0x10000UL
|
||||
#define CFA_NTUPLE_FILTER_ALLOC_REQ_ENABLES_MIRROR_VNIC_ID 0x20000UL
|
||||
#define CFA_NTUPLE_FILTER_ALLOC_REQ_ENABLES_DST_MACADDR 0x40000UL
|
||||
+ #define CFA_NTUPLE_FILTER_ALLOC_REQ_ENABLES_RFS_RING_TBL_IDX 0x80000UL
|
||||
__le64 l2_filter_id;
|
||||
u8 src_macaddr[6];
|
||||
__be16 ethertype;
|
||||
@@ -5725,6 +5814,8 @@
|
||||
__be16 dst_port;
|
||||
__be16 dst_port_mask;
|
||||
__le64 ntuple_filter_id_hint;
|
||||
+ __le16 rfs_ring_tbl_idx;
|
||||
+ u8 unused_0[6];
|
||||
};
|
||||
|
||||
/* hwrm_cfa_ntuple_filter_alloc_output (size:192b/24B) */
|
||||
@@ -5735,6 +5826,16 @@
|
||||
__le16 resp_len;
|
||||
__le64 ntuple_filter_id;
|
||||
__le32 flow_id;
|
||||
+ #define CFA_NTUPLE_FILTER_ALLOC_RESP_FLOW_ID_VALUE_MASK 0x3fffffffUL
|
||||
+ #define CFA_NTUPLE_FILTER_ALLOC_RESP_FLOW_ID_VALUE_SFT 0
|
||||
+ #define CFA_NTUPLE_FILTER_ALLOC_RESP_FLOW_ID_TYPE 0x40000000UL
|
||||
+ #define CFA_NTUPLE_FILTER_ALLOC_RESP_FLOW_ID_TYPE_INT (0x0UL << 30)
|
||||
+ #define CFA_NTUPLE_FILTER_ALLOC_RESP_FLOW_ID_TYPE_EXT (0x1UL << 30)
|
||||
+ #define CFA_NTUPLE_FILTER_ALLOC_RESP_FLOW_ID_TYPE_LAST CFA_NTUPLE_FILTER_ALLOC_RESP_FLOW_ID_TYPE_EXT
|
||||
+ #define CFA_NTUPLE_FILTER_ALLOC_RESP_FLOW_ID_DIR 0x80000000UL
|
||||
+ #define CFA_NTUPLE_FILTER_ALLOC_RESP_FLOW_ID_DIR_RX (0x0UL << 31)
|
||||
+ #define CFA_NTUPLE_FILTER_ALLOC_RESP_FLOW_ID_DIR_TX (0x1UL << 31)
|
||||
+ #define CFA_NTUPLE_FILTER_ALLOC_RESP_FLOW_ID_DIR_LAST CFA_NTUPLE_FILTER_ALLOC_RESP_FLOW_ID_DIR_TX
|
||||
u8 unused_0[3];
|
||||
u8 valid;
|
||||
};
|
||||
@@ -5934,19 +6035,20 @@
|
||||
__le16 src_fid;
|
||||
__le32 tunnel_handle;
|
||||
__le16 action_flags;
|
||||
- #define CFA_FLOW_ALLOC_REQ_ACTION_FLAGS_FWD 0x1UL
|
||||
- #define CFA_FLOW_ALLOC_REQ_ACTION_FLAGS_RECYCLE 0x2UL
|
||||
- #define CFA_FLOW_ALLOC_REQ_ACTION_FLAGS_DROP 0x4UL
|
||||
- #define CFA_FLOW_ALLOC_REQ_ACTION_FLAGS_METER 0x8UL
|
||||
- #define CFA_FLOW_ALLOC_REQ_ACTION_FLAGS_TUNNEL 0x10UL
|
||||
- #define CFA_FLOW_ALLOC_REQ_ACTION_FLAGS_NAT_SRC 0x20UL
|
||||
- #define CFA_FLOW_ALLOC_REQ_ACTION_FLAGS_NAT_DEST 0x40UL
|
||||
- #define CFA_FLOW_ALLOC_REQ_ACTION_FLAGS_NAT_IPV4_ADDRESS 0x80UL
|
||||
- #define CFA_FLOW_ALLOC_REQ_ACTION_FLAGS_L2_HEADER_REWRITE 0x100UL
|
||||
- #define CFA_FLOW_ALLOC_REQ_ACTION_FLAGS_TTL_DECREMENT 0x200UL
|
||||
- #define CFA_FLOW_ALLOC_REQ_ACTION_FLAGS_TUNNEL_IP 0x400UL
|
||||
- #define CFA_FLOW_ALLOC_REQ_ACTION_FLAGS_FLOW_AGING_ENABLED 0x800UL
|
||||
- #define CFA_FLOW_ALLOC_REQ_ACTION_FLAGS_PRI_HINT 0x1000UL
|
||||
+ #define CFA_FLOW_ALLOC_REQ_ACTION_FLAGS_FWD 0x1UL
|
||||
+ #define CFA_FLOW_ALLOC_REQ_ACTION_FLAGS_RECYCLE 0x2UL
|
||||
+ #define CFA_FLOW_ALLOC_REQ_ACTION_FLAGS_DROP 0x4UL
|
||||
+ #define CFA_FLOW_ALLOC_REQ_ACTION_FLAGS_METER 0x8UL
|
||||
+ #define CFA_FLOW_ALLOC_REQ_ACTION_FLAGS_TUNNEL 0x10UL
|
||||
+ #define CFA_FLOW_ALLOC_REQ_ACTION_FLAGS_NAT_SRC 0x20UL
|
||||
+ #define CFA_FLOW_ALLOC_REQ_ACTION_FLAGS_NAT_DEST 0x40UL
|
||||
+ #define CFA_FLOW_ALLOC_REQ_ACTION_FLAGS_NAT_IPV4_ADDRESS 0x80UL
|
||||
+ #define CFA_FLOW_ALLOC_REQ_ACTION_FLAGS_L2_HEADER_REWRITE 0x100UL
|
||||
+ #define CFA_FLOW_ALLOC_REQ_ACTION_FLAGS_TTL_DECREMENT 0x200UL
|
||||
+ #define CFA_FLOW_ALLOC_REQ_ACTION_FLAGS_TUNNEL_IP 0x400UL
|
||||
+ #define CFA_FLOW_ALLOC_REQ_ACTION_FLAGS_FLOW_AGING_ENABLED 0x800UL
|
||||
+ #define CFA_FLOW_ALLOC_REQ_ACTION_FLAGS_PRI_HINT 0x1000UL
|
||||
+ #define CFA_FLOW_ALLOC_REQ_ACTION_FLAGS_NO_FLOW_COUNTER_ALLOC 0x2000UL
|
||||
__le16 dst_fid;
|
||||
__be16 l2_rewrite_vlan_tpid;
|
||||
__be16 l2_rewrite_vlan_tci;
|
||||
@@ -5997,6 +6099,16 @@
|
||||
__le16 flow_handle;
|
||||
u8 unused_0[2];
|
||||
__le32 flow_id;
|
||||
+ #define CFA_FLOW_ALLOC_RESP_FLOW_ID_VALUE_MASK 0x3fffffffUL
|
||||
+ #define CFA_FLOW_ALLOC_RESP_FLOW_ID_VALUE_SFT 0
|
||||
+ #define CFA_FLOW_ALLOC_RESP_FLOW_ID_TYPE 0x40000000UL
|
||||
+ #define CFA_FLOW_ALLOC_RESP_FLOW_ID_TYPE_INT (0x0UL << 30)
|
||||
+ #define CFA_FLOW_ALLOC_RESP_FLOW_ID_TYPE_EXT (0x1UL << 30)
|
||||
+ #define CFA_FLOW_ALLOC_RESP_FLOW_ID_TYPE_LAST CFA_FLOW_ALLOC_RESP_FLOW_ID_TYPE_EXT
|
||||
+ #define CFA_FLOW_ALLOC_RESP_FLOW_ID_DIR 0x80000000UL
|
||||
+ #define CFA_FLOW_ALLOC_RESP_FLOW_ID_DIR_RX (0x0UL << 31)
|
||||
+ #define CFA_FLOW_ALLOC_RESP_FLOW_ID_DIR_TX (0x1UL << 31)
|
||||
+ #define CFA_FLOW_ALLOC_RESP_FLOW_ID_DIR_LAST CFA_FLOW_ALLOC_RESP_FLOW_ID_DIR_TX
|
||||
__le64 ext_flow_handle;
|
||||
__le32 flow_counter_id;
|
||||
u8 unused_1[3];
|
||||
@@ -6011,7 +6123,8 @@
|
||||
__le16 target_id;
|
||||
__le64 resp_addr;
|
||||
__le16 flow_handle;
|
||||
- u8 unused_0[6];
|
||||
+ __le16 unused_0;
|
||||
+ __le32 flow_counter_id;
|
||||
__le64 ext_flow_handle;
|
||||
};
|
||||
|
||||
@@ -6199,8 +6312,10 @@
|
||||
__le16 seq_id;
|
||||
__le16 resp_len;
|
||||
__le32 flags;
|
||||
- #define CFA_EEM_QCAPS_RESP_FLAGS_PATH_TX 0x1UL
|
||||
- #define CFA_EEM_QCAPS_RESP_FLAGS_PATH_RX 0x2UL
|
||||
+ #define CFA_EEM_QCAPS_RESP_FLAGS_PATH_TX 0x1UL
|
||||
+ #define CFA_EEM_QCAPS_RESP_FLAGS_PATH_RX 0x2UL
|
||||
+ #define CFA_EEM_QCAPS_RESP_FLAGS_CENTRALIZED_MEMORY_MODEL_SUPPORTED 0x4UL
|
||||
+ #define CFA_EEM_QCAPS_RESP_FLAGS_DETACHED_CENTRALIZED_MEMORY_MODEL_SUPPORTED 0x8UL
|
||||
__le32 unused_0;
|
||||
__le32 supported;
|
||||
#define CFA_EEM_QCAPS_RESP_SUPPORTED_KEY0_TABLE 0x1UL
|
||||
@@ -6226,7 +6341,9 @@
|
||||
#define CFA_EEM_CFG_REQ_FLAGS_PATH_TX 0x1UL
|
||||
#define CFA_EEM_CFG_REQ_FLAGS_PATH_RX 0x2UL
|
||||
#define CFA_EEM_CFG_REQ_FLAGS_PREFERRED_OFFLOAD 0x4UL
|
||||
- __le32 unused_0;
|
||||
+ #define CFA_EEM_CFG_REQ_FLAGS_SECONDARY_PF 0x8UL
|
||||
+ __le16 group_id;
|
||||
+ __le16 unused_0;
|
||||
__le32 num_entries;
|
||||
__le32 unused_1;
|
||||
__le16 key0_ctx_id;
|
||||
@@ -6258,7 +6375,7 @@
|
||||
__le32 unused_0;
|
||||
};
|
||||
|
||||
-/* hwrm_cfa_eem_qcfg_output (size:128b/16B) */
|
||||
+/* hwrm_cfa_eem_qcfg_output (size:192b/24B) */
|
||||
struct hwrm_cfa_eem_qcfg_output {
|
||||
__le16 error_code;
|
||||
__le16 req_type;
|
||||
@@ -6269,6 +6386,8 @@
|
||||
#define CFA_EEM_QCFG_RESP_FLAGS_PATH_RX 0x2UL
|
||||
#define CFA_EEM_QCFG_RESP_FLAGS_PREFERRED_OFFLOAD 0x4UL
|
||||
__le32 num_entries;
|
||||
+ u8 unused_0[7];
|
||||
+ u8 valid;
|
||||
};
|
||||
|
||||
/* hwrm_cfa_eem_op_input (size:192b/24B) */
|
||||
@@ -6300,6 +6419,39 @@
|
||||
u8 valid;
|
||||
};
|
||||
|
||||
+/* hwrm_cfa_adv_flow_mgnt_qcaps_input (size:256b/32B) */
|
||||
+struct hwrm_cfa_adv_flow_mgnt_qcaps_input {
|
||||
+ __le16 req_type;
|
||||
+ __le16 cmpl_ring;
|
||||
+ __le16 seq_id;
|
||||
+ __le16 target_id;
|
||||
+ __le64 resp_addr;
|
||||
+ __le32 unused_0[4];
|
||||
+};
|
||||
+
|
||||
+/* hwrm_cfa_adv_flow_mgnt_qcaps_output (size:128b/16B) */
|
||||
+struct hwrm_cfa_adv_flow_mgnt_qcaps_output {
|
||||
+ __le16 error_code;
|
||||
+ __le16 req_type;
|
||||
+ __le16 seq_id;
|
||||
+ __le16 resp_len;
|
||||
+ __le32 flags;
|
||||
+ #define CFA_ADV_FLOW_MGNT_QCAPS_RESP_FLAGS_FLOW_HND_16BIT_SUPPORTED 0x1UL
|
||||
+ #define CFA_ADV_FLOW_MGNT_QCAPS_RESP_FLAGS_FLOW_HND_64BIT_SUPPORTED 0x2UL
|
||||
+ #define CFA_ADV_FLOW_MGNT_QCAPS_RESP_FLAGS_FLOW_BATCH_DELETE_SUPPORTED 0x4UL
|
||||
+ #define CFA_ADV_FLOW_MGNT_QCAPS_RESP_FLAGS_FLOW_RESET_ALL_SUPPORTED 0x8UL
|
||||
+ #define CFA_ADV_FLOW_MGNT_QCAPS_RESP_FLAGS_NTUPLE_FLOW_DEST_FUNC_SUPPORTED 0x10UL
|
||||
+ #define CFA_ADV_FLOW_MGNT_QCAPS_RESP_FLAGS_TX_EEM_FLOW_SUPPORTED 0x20UL
|
||||
+ #define CFA_ADV_FLOW_MGNT_QCAPS_RESP_FLAGS_RX_EEM_FLOW_SUPPORTED 0x40UL
|
||||
+ #define CFA_ADV_FLOW_MGNT_QCAPS_RESP_FLAGS_FLOW_COUNTER_ALLOC_SUPPORTED 0x80UL
|
||||
+ #define CFA_ADV_FLOW_MGNT_QCAPS_RESP_FLAGS_RFS_RING_TBL_IDX_SUPPORTED 0x100UL
|
||||
+ #define CFA_ADV_FLOW_MGNT_QCAPS_RESP_FLAGS_UNTAGGED_VLAN_SUPPORTED 0x200UL
|
||||
+ #define CFA_ADV_FLOW_MGNT_QCAPS_RESP_FLAGS_XDP_SUPPORTED 0x400UL
|
||||
+ #define CFA_ADV_FLOW_MGNT_QCAPS_RESP_FLAGS_L2_HEADER_SOURCE_FIELDS_SUPPORTED 0x800UL
|
||||
+ u8 unused_0[3];
|
||||
+ u8 valid;
|
||||
+};
|
||||
+
|
||||
/* hwrm_tunnel_dst_port_query_input (size:192b/24B) */
|
||||
struct hwrm_tunnel_dst_port_query_input {
|
||||
__le16 req_type;
|
||||
@@ -6636,7 +6788,8 @@
|
||||
#define FW_QSTATUS_RESP_SELFRST_STATUS_SELFRSTNONE 0x0UL
|
||||
#define FW_QSTATUS_RESP_SELFRST_STATUS_SELFRSTASAP 0x1UL
|
||||
#define FW_QSTATUS_RESP_SELFRST_STATUS_SELFRSTPCIERST 0x2UL
|
||||
- #define FW_QSTATUS_RESP_SELFRST_STATUS_LAST FW_QSTATUS_RESP_SELFRST_STATUS_SELFRSTPCIERST
|
||||
+ #define FW_QSTATUS_RESP_SELFRST_STATUS_SELFRSTPOWER 0x3UL
|
||||
+ #define FW_QSTATUS_RESP_SELFRST_STATUS_LAST FW_QSTATUS_RESP_SELFRST_STATUS_SELFRSTPOWER
|
||||
u8 unused_0[6];
|
||||
u8 valid;
|
||||
};
|
||||
@@ -6659,8 +6812,8 @@
|
||||
u8 unused_0;
|
||||
__le16 millisecond;
|
||||
__le16 zone;
|
||||
- #define FW_SET_TIME_REQ_ZONE_UTC 0x0UL
|
||||
- #define FW_SET_TIME_REQ_ZONE_UNKNOWN 0xffffUL
|
||||
+ #define FW_SET_TIME_REQ_ZONE_UTC 0
|
||||
+ #define FW_SET_TIME_REQ_ZONE_UNKNOWN 65535
|
||||
#define FW_SET_TIME_REQ_ZONE_LAST FW_SET_TIME_REQ_ZONE_UNKNOWN
|
||||
u8 unused_1[4];
|
||||
};
|
||||
@@ -7064,7 +7217,9 @@
|
||||
__le64 host_dest_addr;
|
||||
__le32 host_buf_len;
|
||||
__le16 seq_no;
|
||||
- u8 unused_0[2];
|
||||
+ u8 flags;
|
||||
+ #define DBG_COREDUMP_LIST_REQ_FLAGS_CRASHDUMP 0x1UL
|
||||
+ u8 unused_0[1];
|
||||
};
|
||||
|
||||
/* hwrm_dbg_coredump_list_output (size:128b/16B) */
|
||||
@@ -7392,7 +7547,9 @@
|
||||
__le32 nvram_size;
|
||||
__le32 reserved_size;
|
||||
__le32 available_size;
|
||||
- u8 unused_0[3];
|
||||
+ u8 nvm_cfg_ver_maj;
|
||||
+ u8 nvm_cfg_ver_min;
|
||||
+ u8 nvm_cfg_ver_upd;
|
||||
u8 valid;
|
||||
};
|
||||
|
@ -0,0 +1,128 @@
|
||||
From 7b521924055a466fc15021ba7c0fbd3833739abf Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:22:34 -0400
|
||||
Subject: [PATCH 19/96] [netdrv] bnxt_en: Refactor bnxt_alloc_stats()
|
||||
|
||||
Message-id: <0b455fb7258aebee3261769c74274ce59cd30970.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276441
|
||||
O-Subject: [RHEL-8.2 PATCH 12/78] bnxt_en: Refactor bnxt_alloc_stats().
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
Reverse the condition of the large "if" block and return early. This
|
||||
will simplify the follow up patch to add PCIe statistics.
|
||||
|
||||
Signed-off-by: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit a220eabc8887e3c02d308a9960e92a70cbd00b52)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 75 +++++++++++++++----------------
|
||||
1 file changed, 36 insertions(+), 39 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:12.563542039 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:12.831539579 +0100
|
||||
@@ -3446,56 +3446,53 @@
|
||||
cpr->hw_stats_ctx_id = INVALID_STATS_CTX_ID;
|
||||
}
|
||||
|
||||
- if (BNXT_PF(bp) && bp->chip_num != CHIP_NUM_58700) {
|
||||
- if (bp->hw_rx_port_stats)
|
||||
- goto alloc_ext_stats;
|
||||
-
|
||||
- bp->hw_port_stats_size = sizeof(struct rx_port_stats) +
|
||||
- sizeof(struct tx_port_stats) + 1024;
|
||||
-
|
||||
- bp->hw_rx_port_stats =
|
||||
- dma_alloc_coherent(&pdev->dev, bp->hw_port_stats_size,
|
||||
- &bp->hw_rx_port_stats_map,
|
||||
- GFP_KERNEL);
|
||||
- if (!bp->hw_rx_port_stats)
|
||||
- return -ENOMEM;
|
||||
+ if (BNXT_VF(bp) || bp->chip_num == CHIP_NUM_58700)
|
||||
+ return 0;
|
||||
|
||||
- bp->hw_tx_port_stats = (void *)(bp->hw_rx_port_stats + 1) +
|
||||
- 512;
|
||||
- bp->hw_tx_port_stats_map = bp->hw_rx_port_stats_map +
|
||||
- sizeof(struct rx_port_stats) + 512;
|
||||
- bp->flags |= BNXT_FLAG_PORT_STATS;
|
||||
+ if (bp->hw_rx_port_stats)
|
||||
+ goto alloc_ext_stats;
|
||||
|
||||
-alloc_ext_stats:
|
||||
- /* Display extended statistics only if FW supports it */
|
||||
- if (bp->hwrm_spec_code < 0x10804 ||
|
||||
- bp->hwrm_spec_code == 0x10900)
|
||||
- return 0;
|
||||
+ bp->hw_port_stats_size = sizeof(struct rx_port_stats) +
|
||||
+ sizeof(struct tx_port_stats) + 1024;
|
||||
|
||||
- if (bp->hw_rx_port_stats_ext)
|
||||
- goto alloc_tx_ext_stats;
|
||||
+ bp->hw_rx_port_stats =
|
||||
+ dma_alloc_coherent(&pdev->dev, bp->hw_port_stats_size,
|
||||
+ &bp->hw_rx_port_stats_map,
|
||||
+ GFP_KERNEL);
|
||||
+ if (!bp->hw_rx_port_stats)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ bp->hw_tx_port_stats = (void *)(bp->hw_rx_port_stats + 1) + 512;
|
||||
+ bp->hw_tx_port_stats_map = bp->hw_rx_port_stats_map +
|
||||
+ sizeof(struct rx_port_stats) + 512;
|
||||
+ bp->flags |= BNXT_FLAG_PORT_STATS;
|
||||
|
||||
- bp->hw_rx_port_stats_ext =
|
||||
- dma_alloc_coherent(&pdev->dev,
|
||||
- sizeof(struct rx_port_stats_ext),
|
||||
- &bp->hw_rx_port_stats_ext_map,
|
||||
- GFP_KERNEL);
|
||||
- if (!bp->hw_rx_port_stats_ext)
|
||||
- return 0;
|
||||
+alloc_ext_stats:
|
||||
+ /* Display extended statistics only if FW supports it */
|
||||
+ if (bp->hwrm_spec_code < 0x10804 || bp->hwrm_spec_code == 0x10900)
|
||||
+ return 0;
|
||||
+
|
||||
+ if (bp->hw_rx_port_stats_ext)
|
||||
+ goto alloc_tx_ext_stats;
|
||||
+
|
||||
+ bp->hw_rx_port_stats_ext =
|
||||
+ dma_alloc_coherent(&pdev->dev, sizeof(struct rx_port_stats_ext),
|
||||
+ &bp->hw_rx_port_stats_ext_map, GFP_KERNEL);
|
||||
+ if (!bp->hw_rx_port_stats_ext)
|
||||
+ return 0;
|
||||
|
||||
alloc_tx_ext_stats:
|
||||
- if (bp->hw_tx_port_stats_ext)
|
||||
- return 0;
|
||||
+ if (bp->hw_tx_port_stats_ext)
|
||||
+ return 0;
|
||||
|
||||
- if (bp->hwrm_spec_code >= 0x10902) {
|
||||
- bp->hw_tx_port_stats_ext =
|
||||
- dma_alloc_coherent(&pdev->dev,
|
||||
- sizeof(struct tx_port_stats_ext),
|
||||
- &bp->hw_tx_port_stats_ext_map,
|
||||
- GFP_KERNEL);
|
||||
- }
|
||||
- bp->flags |= BNXT_FLAG_PORT_STATS_EXT;
|
||||
+ if (bp->hwrm_spec_code >= 0x10902) {
|
||||
+ bp->hw_tx_port_stats_ext =
|
||||
+ dma_alloc_coherent(&pdev->dev,
|
||||
+ sizeof(struct tx_port_stats_ext),
|
||||
+ &bp->hw_tx_port_stats_ext_map,
|
||||
+ GFP_KERNEL);
|
||||
}
|
||||
+ bp->flags |= BNXT_FLAG_PORT_STATS_EXT;
|
||||
return 0;
|
||||
}
|
||||
|
@ -0,0 +1,240 @@
|
||||
From 4ea414c5bfab1738d910849ba97abc165ea491c3 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:22:35 -0400
|
||||
Subject: [PATCH 20/96] [netdrv] bnxt_en: Add support for PCIe statistics
|
||||
|
||||
Message-id: <b5c3abbe9031fc1dc4d274ab56293a9d8d787cdd.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276451
|
||||
O-Subject: [RHEL-8.2 PATCH 13/78] bnxt_en: Add support for PCIe statistics
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
Gather periodic PCIe statistics for ethtool -S.
|
||||
|
||||
Signed-off-by: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit 55e4398d4ee578094fb38f25af175629a24675d5)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 37 ++++++++++++++++++++-
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.h | 7 ++++
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 39 +++++++++++++++++++++++
|
||||
3 files changed, 82 insertions(+), 1 deletion(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:12.831539579 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:12.956538431 +0100
|
||||
@@ -3402,6 +3402,12 @@
|
||||
bp->hw_rx_port_stats_ext_map);
|
||||
bp->hw_rx_port_stats_ext = NULL;
|
||||
}
|
||||
+
|
||||
+ if (bp->hw_pcie_stats) {
|
||||
+ dma_free_coherent(&pdev->dev, sizeof(struct pcie_ctx_hw_stats),
|
||||
+ bp->hw_pcie_stats, bp->hw_pcie_stats_map);
|
||||
+ bp->hw_pcie_stats = NULL;
|
||||
+ }
|
||||
}
|
||||
|
||||
static void bnxt_free_ring_stats(struct bnxt *bp)
|
||||
@@ -3483,7 +3489,7 @@
|
||||
|
||||
alloc_tx_ext_stats:
|
||||
if (bp->hw_tx_port_stats_ext)
|
||||
- return 0;
|
||||
+ goto alloc_pcie_stats;
|
||||
|
||||
if (bp->hwrm_spec_code >= 0x10902) {
|
||||
bp->hw_tx_port_stats_ext =
|
||||
@@ -3493,6 +3499,19 @@
|
||||
GFP_KERNEL);
|
||||
}
|
||||
bp->flags |= BNXT_FLAG_PORT_STATS_EXT;
|
||||
+
|
||||
+alloc_pcie_stats:
|
||||
+ if (bp->hw_pcie_stats ||
|
||||
+ !(bp->fw_cap & BNXT_FW_CAP_PCIE_STATS_SUPPORTED))
|
||||
+ return 0;
|
||||
+
|
||||
+ bp->hw_pcie_stats =
|
||||
+ dma_alloc_coherent(&pdev->dev, sizeof(struct pcie_ctx_hw_stats),
|
||||
+ &bp->hw_pcie_stats_map, GFP_KERNEL);
|
||||
+ if (!bp->hw_pcie_stats)
|
||||
+ return 0;
|
||||
+
|
||||
+ bp->flags |= BNXT_FLAG_PCIE_STATS;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -6522,6 +6541,8 @@
|
||||
bp->flags |= BNXT_FLAG_ROCEV1_CAP;
|
||||
if (flags & FUNC_QCAPS_RESP_FLAGS_ROCE_V2_SUPPORTED)
|
||||
bp->flags |= BNXT_FLAG_ROCEV2_CAP;
|
||||
+ if (flags & FUNC_QCAPS_RESP_FLAGS_PCIE_STATS_SUPPORTED)
|
||||
+ bp->fw_cap |= BNXT_FW_CAP_PCIE_STATS_SUPPORTED;
|
||||
|
||||
bp->tx_push_thresh = 0;
|
||||
if (flags & FUNC_QCAPS_RESP_FLAGS_PUSH_MODE_SUPPORTED)
|
||||
@@ -6822,6 +6843,19 @@
|
||||
return rc;
|
||||
}
|
||||
|
||||
+static int bnxt_hwrm_pcie_qstats(struct bnxt *bp)
|
||||
+{
|
||||
+ struct hwrm_pcie_qstats_input req = {0};
|
||||
+
|
||||
+ if (!(bp->flags & BNXT_FLAG_PCIE_STATS))
|
||||
+ return 0;
|
||||
+
|
||||
+ bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_PCIE_QSTATS, -1, -1);
|
||||
+ req.pcie_stat_size = cpu_to_le16(sizeof(struct pcie_ctx_hw_stats));
|
||||
+ req.pcie_stat_host_addr = cpu_to_le64(bp->hw_pcie_stats_map);
|
||||
+ return hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
|
||||
+}
|
||||
+
|
||||
static void bnxt_hwrm_free_tunnel_ports(struct bnxt *bp)
|
||||
{
|
||||
if (bp->vxlan_port_cnt) {
|
||||
@@ -9409,6 +9443,7 @@
|
||||
if (test_and_clear_bit(BNXT_PERIODIC_STATS_SP_EVENT, &bp->sp_event)) {
|
||||
bnxt_hwrm_port_qstats(bp);
|
||||
bnxt_hwrm_port_qstats_ext(bp);
|
||||
+ bnxt_hwrm_pcie_qstats(bp);
|
||||
}
|
||||
|
||||
if (test_and_clear_bit(BNXT_LINK_CHNG_SP_EVENT, &bp->sp_event)) {
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.h
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:12.415543397 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:12.956538431 +0100
|
||||
@@ -1355,6 +1355,7 @@
|
||||
#define BNXT_FLAG_DIM 0x2000000
|
||||
#define BNXT_FLAG_ROCE_MIRROR_CAP 0x4000000
|
||||
#define BNXT_FLAG_PORT_STATS_EXT 0x10000000
|
||||
+ #define BNXT_FLAG_PCIE_STATS 0x40000000
|
||||
|
||||
#define BNXT_FLAG_ALL_CONFIG_FEATS (BNXT_FLAG_TPA | \
|
||||
BNXT_FLAG_RFS | \
|
||||
@@ -1482,6 +1483,7 @@
|
||||
#define BNXT_FW_CAP_KONG_MB_CHNL 0x00000080
|
||||
#define BNXT_FW_CAP_OVS_64BIT_HANDLE 0x00000400
|
||||
#define BNXT_FW_CAP_TRUSTED_VF 0x00000800
|
||||
+ #define BNXT_FW_CAP_PCIE_STATS_SUPPORTED 0x00020000
|
||||
|
||||
#define BNXT_NEW_RM(bp) ((bp)->fw_cap & BNXT_FW_CAP_NEW_RM)
|
||||
u32 hwrm_spec_code;
|
||||
@@ -1500,10 +1502,12 @@
|
||||
struct tx_port_stats *hw_tx_port_stats;
|
||||
struct rx_port_stats_ext *hw_rx_port_stats_ext;
|
||||
struct tx_port_stats_ext *hw_tx_port_stats_ext;
|
||||
+ struct pcie_ctx_hw_stats *hw_pcie_stats;
|
||||
dma_addr_t hw_rx_port_stats_map;
|
||||
dma_addr_t hw_tx_port_stats_map;
|
||||
dma_addr_t hw_rx_port_stats_ext_map;
|
||||
dma_addr_t hw_tx_port_stats_ext_map;
|
||||
+ dma_addr_t hw_pcie_stats_map;
|
||||
int hw_port_stats_size;
|
||||
u16 fw_rx_stats_ext_size;
|
||||
u16 fw_tx_stats_ext_size;
|
||||
@@ -1636,6 +1640,9 @@
|
||||
#define BNXT_TX_STATS_EXT_OFFSET(counter) \
|
||||
(offsetof(struct tx_port_stats_ext, counter) / 8)
|
||||
|
||||
+#define BNXT_PCIE_STATS_OFFSET(counter) \
|
||||
+ (offsetof(struct pcie_ctx_hw_stats, counter) / 8)
|
||||
+
|
||||
#define I2C_DEV_ADDR_A0 0xa0
|
||||
#define I2C_DEV_ADDR_A2 0xa2
|
||||
#define SFF_DIAG_SUPPORT_OFFSET 0x5c
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c 2020-02-06 16:23:12.694540836 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c 2020-02-06 16:23:12.957538422 +0100
|
||||
@@ -235,6 +235,9 @@
|
||||
BNXT_TX_STATS_PRI_ENTRY(counter, 6), \
|
||||
BNXT_TX_STATS_PRI_ENTRY(counter, 7)
|
||||
|
||||
+#define BNXT_PCIE_STATS_ENTRY(counter) \
|
||||
+ { BNXT_PCIE_STATS_OFFSET(counter), __stringify(counter) }
|
||||
+
|
||||
enum {
|
||||
RX_TOTAL_DISCARDS,
|
||||
TX_TOTAL_DISCARDS,
|
||||
@@ -387,6 +390,24 @@
|
||||
BNXT_TX_STATS_PRI_ENTRIES(tx_packets),
|
||||
};
|
||||
|
||||
+static const struct {
|
||||
+ long offset;
|
||||
+ char string[ETH_GSTRING_LEN];
|
||||
+} bnxt_pcie_stats_arr[] = {
|
||||
+ BNXT_PCIE_STATS_ENTRY(pcie_pl_signal_integrity),
|
||||
+ BNXT_PCIE_STATS_ENTRY(pcie_dl_signal_integrity),
|
||||
+ BNXT_PCIE_STATS_ENTRY(pcie_tl_signal_integrity),
|
||||
+ BNXT_PCIE_STATS_ENTRY(pcie_link_integrity),
|
||||
+ BNXT_PCIE_STATS_ENTRY(pcie_tx_traffic_rate),
|
||||
+ BNXT_PCIE_STATS_ENTRY(pcie_rx_traffic_rate),
|
||||
+ BNXT_PCIE_STATS_ENTRY(pcie_tx_dllp_statistics),
|
||||
+ BNXT_PCIE_STATS_ENTRY(pcie_rx_dllp_statistics),
|
||||
+ BNXT_PCIE_STATS_ENTRY(pcie_equalization_time),
|
||||
+ BNXT_PCIE_STATS_ENTRY(pcie_ltssm_histogram[0]),
|
||||
+ BNXT_PCIE_STATS_ENTRY(pcie_ltssm_histogram[2]),
|
||||
+ BNXT_PCIE_STATS_ENTRY(pcie_recovery_histogram),
|
||||
+};
|
||||
+
|
||||
#define BNXT_NUM_SW_FUNC_STATS ARRAY_SIZE(bnxt_sw_func_stats)
|
||||
#define BNXT_NUM_PORT_STATS ARRAY_SIZE(bnxt_port_stats_arr)
|
||||
#define BNXT_NUM_STATS_PRI \
|
||||
@@ -394,6 +415,7 @@
|
||||
ARRAY_SIZE(bnxt_rx_pkts_pri_arr) + \
|
||||
ARRAY_SIZE(bnxt_tx_bytes_pri_arr) + \
|
||||
ARRAY_SIZE(bnxt_tx_pkts_pri_arr))
|
||||
+#define BNXT_NUM_PCIE_STATS ARRAY_SIZE(bnxt_pcie_stats_arr)
|
||||
|
||||
static int bnxt_get_num_stats(struct bnxt *bp)
|
||||
{
|
||||
@@ -411,6 +433,9 @@
|
||||
num_stats += BNXT_NUM_STATS_PRI;
|
||||
}
|
||||
|
||||
+ if (bp->flags & BNXT_FLAG_PCIE_STATS)
|
||||
+ num_stats += BNXT_NUM_PCIE_STATS;
|
||||
+
|
||||
return num_stats;
|
||||
}
|
||||
|
||||
@@ -513,6 +538,14 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
+ if (bp->flags & BNXT_FLAG_PCIE_STATS) {
|
||||
+ __le64 *pcie_stats = (__le64 *)bp->hw_pcie_stats;
|
||||
+
|
||||
+ for (i = 0; i < BNXT_NUM_PCIE_STATS; i++, j++) {
|
||||
+ buf[j] = le64_to_cpu(*(pcie_stats +
|
||||
+ bnxt_pcie_stats_arr[i].offset));
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
|
||||
static void bnxt_get_strings(struct net_device *dev, u32 stringset, u8 *buf)
|
||||
@@ -613,6 +646,12 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
+ if (bp->flags & BNXT_FLAG_PCIE_STATS) {
|
||||
+ for (i = 0; i < BNXT_NUM_PCIE_STATS; i++) {
|
||||
+ strcpy(buf, bnxt_pcie_stats_arr[i].string);
|
||||
+ buf += ETH_GSTRING_LEN;
|
||||
+ }
|
||||
+ }
|
||||
break;
|
||||
case ETH_SS_TEST:
|
||||
if (bp->num_tests)
|
@ -0,0 +1,76 @@
|
||||
From 7c4869095f8b11b912280ce17ebdbe6389cedf1b Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:22:36 -0400
|
||||
Subject: [PATCH 21/96] [netdrv] bnxt_en: Check new firmware capability to
|
||||
display extended stats
|
||||
|
||||
Message-id: <75c33ccbd03fe0c828ea8d1177ece257e36b1f0a.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276438
|
||||
O-Subject: [RHEL-8.2 PATCH 14/78] bnxt_en: Check new firmware capability to display extended stats.
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
Newer firmware now advertises the capability for extended stats
|
||||
support. Check the new capability in addition to the existing
|
||||
version check.
|
||||
|
||||
Signed-off-by: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit 6154532fe8fe4e5ec5ffb1a71f587015973f8753)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 8 ++++++--
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.h | 1 +
|
||||
2 files changed, 7 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:12.956538431 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:13.099537119 +0100
|
||||
@@ -3476,7 +3476,8 @@
|
||||
alloc_ext_stats:
|
||||
/* Display extended statistics only if FW supports it */
|
||||
if (bp->hwrm_spec_code < 0x10804 || bp->hwrm_spec_code == 0x10900)
|
||||
- return 0;
|
||||
+ if (!(bp->fw_cap & BNXT_FW_CAP_EXT_STATS_SUPPORTED))
|
||||
+ return 0;
|
||||
|
||||
if (bp->hw_rx_port_stats_ext)
|
||||
goto alloc_tx_ext_stats;
|
||||
@@ -3491,7 +3492,8 @@
|
||||
if (bp->hw_tx_port_stats_ext)
|
||||
goto alloc_pcie_stats;
|
||||
|
||||
- if (bp->hwrm_spec_code >= 0x10902) {
|
||||
+ if (bp->hwrm_spec_code >= 0x10902 ||
|
||||
+ (bp->fw_cap & BNXT_FW_CAP_EXT_STATS_SUPPORTED)) {
|
||||
bp->hw_tx_port_stats_ext =
|
||||
dma_alloc_coherent(&pdev->dev,
|
||||
sizeof(struct tx_port_stats_ext),
|
||||
@@ -6543,6 +6545,8 @@
|
||||
bp->flags |= BNXT_FLAG_ROCEV2_CAP;
|
||||
if (flags & FUNC_QCAPS_RESP_FLAGS_PCIE_STATS_SUPPORTED)
|
||||
bp->fw_cap |= BNXT_FW_CAP_PCIE_STATS_SUPPORTED;
|
||||
+ if (flags & FUNC_QCAPS_RESP_FLAGS_EXT_STATS_SUPPORTED)
|
||||
+ bp->fw_cap |= BNXT_FW_CAP_EXT_STATS_SUPPORTED;
|
||||
|
||||
bp->tx_push_thresh = 0;
|
||||
if (flags & FUNC_QCAPS_RESP_FLAGS_PUSH_MODE_SUPPORTED)
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.h
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:12.956538431 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:13.099537119 +0100
|
||||
@@ -1484,6 +1484,7 @@
|
||||
#define BNXT_FW_CAP_OVS_64BIT_HANDLE 0x00000400
|
||||
#define BNXT_FW_CAP_TRUSTED_VF 0x00000800
|
||||
#define BNXT_FW_CAP_PCIE_STATS_SUPPORTED 0x00020000
|
||||
+ #define BNXT_FW_CAP_EXT_STATS_SUPPORTED 0x00040000
|
||||
|
||||
#define BNXT_NEW_RM(bp) ((bp)->fw_cap & BNXT_FW_CAP_NEW_RM)
|
||||
u32 hwrm_spec_code;
|
@ -0,0 +1,77 @@
|
||||
From d3c5c8c9f03aef9ee1560babaf9513478e3b3bf2 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:22:37 -0400
|
||||
Subject: [PATCH 22/96] [netdrv] bnxt_en: Read package version from firmware
|
||||
|
||||
Message-id: <47986fa0bee271229f9f3fd74257117edf28b159.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276440
|
||||
O-Subject: [RHEL-8.2 PATCH 15/78] bnxt_en: Read package version from firmware.
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
HWRM_VER_GET firmware command returns package name that is running
|
||||
actively on the adapter. Use this version instead of parsing from
|
||||
the package log in NVRAM.
|
||||
|
||||
Signed-off-by: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit 691aa62045c2b23152ce3b64feb601502aab97c5)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 9 +++++++++
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.h | 1 +
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 3 ++-
|
||||
3 files changed, 12 insertions(+), 1 deletion(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:13.099537119 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:13.240535824 +0100
|
||||
@@ -6710,6 +6710,15 @@
|
||||
resp->hwrm_fw_maj_8b, resp->hwrm_fw_min_8b,
|
||||
resp->hwrm_fw_bld_8b, resp->hwrm_fw_rsvd_8b);
|
||||
|
||||
+ if (strlen(resp->active_pkg_name)) {
|
||||
+ int fw_ver_len = strlen(bp->fw_ver_str);
|
||||
+
|
||||
+ snprintf(bp->fw_ver_str + fw_ver_len,
|
||||
+ FW_VER_STR_LEN - fw_ver_len - 1, "/pkg %s",
|
||||
+ resp->active_pkg_name);
|
||||
+ bp->fw_cap |= BNXT_FW_CAP_PKG_VER;
|
||||
+ }
|
||||
+
|
||||
bp->hwrm_cmd_timeout = le16_to_cpu(resp->def_req_timeout);
|
||||
if (!bp->hwrm_cmd_timeout)
|
||||
bp->hwrm_cmd_timeout = DFLT_HWRM_CMD_TIMEOUT;
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.h
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:13.099537119 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:13.240535824 +0100
|
||||
@@ -1483,6 +1483,7 @@
|
||||
#define BNXT_FW_CAP_KONG_MB_CHNL 0x00000080
|
||||
#define BNXT_FW_CAP_OVS_64BIT_HANDLE 0x00000400
|
||||
#define BNXT_FW_CAP_TRUSTED_VF 0x00000800
|
||||
+ #define BNXT_FW_CAP_PKG_VER 0x00004000
|
||||
#define BNXT_FW_CAP_PCIE_STATS_SUPPORTED 0x00020000
|
||||
#define BNXT_FW_CAP_EXT_STATS_SUPPORTED 0x00040000
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c 2020-02-06 16:23:12.957538422 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c 2020-02-06 16:23:13.241535815 +0100
|
||||
@@ -3305,7 +3305,8 @@
|
||||
struct net_device *dev = bp->dev;
|
||||
int i, rc;
|
||||
|
||||
- bnxt_get_pkgver(dev);
|
||||
+ if (!(bp->fw_cap & BNXT_FW_CAP_PKG_VER))
|
||||
+ bnxt_get_pkgver(dev);
|
||||
|
||||
if (bp->hwrm_spec_code < 0x10704 || !BNXT_SINGLE_PF(bp))
|
||||
return;
|
@ -0,0 +1,52 @@
|
||||
From 046588ccc17d792129f8d5f2ad717a76134f9581 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:22:38 -0400
|
||||
Subject: [PATCH 23/96] [netdrv] bnxt_en: read the clause type from the PHY ID
|
||||
|
||||
Message-id: <ac05bd9d0f00f175e82e6c76fd0b7566472c377b.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276443
|
||||
O-Subject: [RHEL-8.2 PATCH 16/78] bnxt_en: read the clause type from the PHY ID
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
Currently driver hard code Clause 45 based on speed supported by the
|
||||
PHY. Instead read the clause type from the PHY ID provided as input
|
||||
to the mdio ioctl.
|
||||
|
||||
Fixes: 0ca12be99667 ("bnxt_en: Add support for mdio read/write to external PHY")
|
||||
Signed-off-by: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit 2730214ddb889c54d5f6a734e2fe584c295cbd9b)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:13.240535824 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:13.384534503 +0100
|
||||
@@ -8713,7 +8713,7 @@
|
||||
req.port_id = cpu_to_le16(bp->pf.port_id);
|
||||
req.phy_addr = phy_addr;
|
||||
req.reg_addr = cpu_to_le16(reg & 0x1f);
|
||||
- if (bp->link_info.support_speeds & BNXT_LINK_SPEED_MSK_10GB) {
|
||||
+ if (mdio_phy_id_is_c45(phy_addr)) {
|
||||
req.cl45_mdio = 1;
|
||||
req.phy_addr = mdio_phy_id_prtad(phy_addr);
|
||||
req.dev_addr = mdio_phy_id_devad(phy_addr);
|
||||
@@ -8740,7 +8740,7 @@
|
||||
req.port_id = cpu_to_le16(bp->pf.port_id);
|
||||
req.phy_addr = phy_addr;
|
||||
req.reg_addr = cpu_to_le16(reg & 0x1f);
|
||||
- if (bp->link_info.support_speeds & BNXT_LINK_SPEED_MSK_10GB) {
|
||||
+ if (mdio_phy_id_is_c45(phy_addr)) {
|
||||
req.cl45_mdio = 1;
|
||||
req.phy_addr = mdio_phy_id_prtad(phy_addr);
|
||||
req.dev_addr = mdio_phy_id_devad(phy_addr);
|
@ -0,0 +1,114 @@
|
||||
From 075dd4d3abf9b0b014318e6c103d100703bada59 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:22:39 -0400
|
||||
Subject: [PATCH 24/96] [netdrv] bnxt_en: Separate RDMA MR/AH context
|
||||
allocation
|
||||
|
||||
Message-id: <954dad29d938cf452dacb2aeff7e5775a8df5e6f.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276439
|
||||
O-Subject: [RHEL-8.2 PATCH 17/78] bnxt_en: Separate RDMA MR/AH context allocation.
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
In newer firmware, the context memory for MR (Memory Region)
|
||||
and AH (Address Handle) to support RDMA are specified separately.
|
||||
Modify driver to specify and allocate the 2 context memory types
|
||||
separately when supported by the firmware.
|
||||
|
||||
Signed-off-by: Devesh Sharma <devesh.sharma@broadcom.com>
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit 53579e37d13a7a87430e2ec0171e091ebf2e63a1)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 19 ++++++++++++++++++-
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.h | 1 +
|
||||
2 files changed, 19 insertions(+), 1 deletion(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:13.384534503 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:13.520533254 +0100
|
||||
@@ -6091,6 +6091,8 @@
|
||||
ctx->tqm_entries_multiple = 1;
|
||||
ctx->mrav_max_entries = le32_to_cpu(resp->mrav_max_entries);
|
||||
ctx->mrav_entry_size = le16_to_cpu(resp->mrav_entry_size);
|
||||
+ ctx->mrav_num_entries_units =
|
||||
+ le16_to_cpu(resp->mrav_num_entries_units);
|
||||
ctx->tim_entry_size = le16_to_cpu(resp->tim_entry_size);
|
||||
ctx->tim_max_entries = le32_to_cpu(resp->tim_max_entries);
|
||||
} else {
|
||||
@@ -6137,6 +6139,7 @@
|
||||
struct bnxt_ctx_pg_info *ctx_pg;
|
||||
__le32 *num_entries;
|
||||
__le64 *pg_dir;
|
||||
+ u32 flags = 0;
|
||||
u8 *pg_attr;
|
||||
int i, rc;
|
||||
u32 ena;
|
||||
@@ -6196,6 +6199,9 @@
|
||||
if (enables & FUNC_BACKING_STORE_CFG_REQ_ENABLES_MRAV) {
|
||||
ctx_pg = &ctx->mrav_mem;
|
||||
req.mrav_num_entries = cpu_to_le32(ctx_pg->entries);
|
||||
+ if (ctx->mrav_num_entries_units)
|
||||
+ flags |=
|
||||
+ FUNC_BACKING_STORE_CFG_REQ_FLAGS_MRAV_RESERVATION_SPLIT;
|
||||
req.mrav_entry_size = cpu_to_le16(ctx->mrav_entry_size);
|
||||
bnxt_hwrm_set_pg_attr(&ctx_pg->ring_mem,
|
||||
&req.mrav_pg_size_mrav_lvl,
|
||||
@@ -6222,6 +6228,7 @@
|
||||
*num_entries = cpu_to_le32(ctx_pg->entries);
|
||||
bnxt_hwrm_set_pg_attr(&ctx_pg->ring_mem, pg_attr, pg_dir);
|
||||
}
|
||||
+ req.flags = cpu_to_le32(flags);
|
||||
rc = hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
|
||||
if (rc)
|
||||
rc = -EIO;
|
||||
@@ -6360,6 +6367,7 @@
|
||||
struct bnxt_ctx_pg_info *ctx_pg;
|
||||
struct bnxt_ctx_mem_info *ctx;
|
||||
u32 mem_size, ena, entries;
|
||||
+ u32 num_mr, num_ah;
|
||||
u32 extra_srqs = 0;
|
||||
u32 extra_qps = 0;
|
||||
u8 pg_lvl = 1;
|
||||
@@ -6423,12 +6431,21 @@
|
||||
goto skip_rdma;
|
||||
|
||||
ctx_pg = &ctx->mrav_mem;
|
||||
- ctx_pg->entries = extra_qps * 4;
|
||||
+ /* 128K extra is needed to accommodate static AH context
|
||||
+ * allocation by f/w.
|
||||
+ */
|
||||
+ num_mr = 1024 * 256;
|
||||
+ num_ah = 1024 * 128;
|
||||
+ ctx_pg->entries = num_mr + num_ah;
|
||||
mem_size = ctx->mrav_entry_size * ctx_pg->entries;
|
||||
rc = bnxt_alloc_ctx_pg_tbls(bp, ctx_pg, mem_size, 2);
|
||||
if (rc)
|
||||
return rc;
|
||||
ena = FUNC_BACKING_STORE_CFG_REQ_ENABLES_MRAV;
|
||||
+ if (ctx->mrav_num_entries_units)
|
||||
+ ctx_pg->entries =
|
||||
+ ((num_mr / ctx->mrav_num_entries_units) << 16) |
|
||||
+ (num_ah / ctx->mrav_num_entries_units);
|
||||
|
||||
ctx_pg = &ctx->tim_mem;
|
||||
ctx_pg->entries = ctx->qp_mem.entries;
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.h
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:13.240535824 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:13.520533254 +0100
|
||||
@@ -1228,6 +1228,7 @@
|
||||
u16 mrav_entry_size;
|
||||
u16 tim_entry_size;
|
||||
u32 tim_max_entries;
|
||||
+ u16 mrav_num_entries_units;
|
||||
u8 tqm_entries_multiple;
|
||||
|
||||
u32 flags;
|
@ -0,0 +1,117 @@
|
||||
From bbe3117afaa0ff9fca4b8691a7f138c5c609c8f9 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:22:40 -0400
|
||||
Subject: [PATCH 25/96] [netdrv] bnxt_en: Query firmware capability to support
|
||||
aRFS on 57500 chips
|
||||
|
||||
Message-id: <76a89a755982ba153852e5f3c8364a30c283f28c.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276446
|
||||
O-Subject: [RHEL-8.2 PATCH 18/78] bnxt_en: Query firmware capability to support aRFS on 57500 chips.
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
Query support for the aRFS ring table index in the firmware.
|
||||
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit e969ae5bbfcf48e3ff2d159870453121d5a8441d)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 43 ++++++++++++++++++++++++++++++-
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.h | 2 ++
|
||||
2 files changed, 44 insertions(+), 1 deletion(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:13.520533254 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:13.662531951 +0100
|
||||
@@ -6636,6 +6636,34 @@
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static int bnxt_hwrm_cfa_adv_flow_mgnt_qcaps(struct bnxt *bp)
|
||||
+{
|
||||
+ struct hwrm_cfa_adv_flow_mgnt_qcaps_input req = {0};
|
||||
+ struct hwrm_cfa_adv_flow_mgnt_qcaps_output *resp;
|
||||
+ int rc = 0;
|
||||
+ u32 flags;
|
||||
+
|
||||
+ if (!(bp->fw_cap & BNXT_FW_CAP_CFA_ADV_FLOW))
|
||||
+ return 0;
|
||||
+
|
||||
+ resp = bp->hwrm_cmd_resp_addr;
|
||||
+ bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_CFA_ADV_FLOW_MGNT_QCAPS, -1, -1);
|
||||
+
|
||||
+ mutex_lock(&bp->hwrm_cmd_lock);
|
||||
+ rc = _hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
|
||||
+ if (rc)
|
||||
+ goto hwrm_cfa_adv_qcaps_exit;
|
||||
+
|
||||
+ flags = le32_to_cpu(resp->flags);
|
||||
+ if (flags &
|
||||
+ CFA_ADV_FLOW_MGNT_QCAPS_RESP_FLAGS_RFS_RING_TBL_IDX_SUPPORTED)
|
||||
+ bp->fw_cap |= BNXT_FW_CAP_CFA_RFS_RING_TBL_IDX;
|
||||
+
|
||||
+hwrm_cfa_adv_qcaps_exit:
|
||||
+ mutex_unlock(&bp->hwrm_cmd_lock);
|
||||
+ return rc;
|
||||
+}
|
||||
+
|
||||
static int bnxt_hwrm_func_reset(struct bnxt *bp)
|
||||
{
|
||||
struct hwrm_func_reset_input req = {0};
|
||||
@@ -6768,6 +6796,10 @@
|
||||
VER_GET_RESP_DEV_CAPS_CFG_TRUSTED_VF_SUPPORTED)
|
||||
bp->fw_cap |= BNXT_FW_CAP_TRUSTED_VF;
|
||||
|
||||
+ if (dev_caps_cfg &
|
||||
+ VER_GET_RESP_DEV_CAPS_CFG_CFA_ADV_FLOW_MGNT_SUPPORTED)
|
||||
+ bp->fw_cap |= BNXT_FW_CAP_CFA_ADV_FLOW;
|
||||
+
|
||||
hwrm_ver_get_exit:
|
||||
mutex_unlock(&bp->hwrm_cmd_lock);
|
||||
return rc;
|
||||
@@ -9075,8 +9107,11 @@
|
||||
/* If the chip and firmware supports RFS */
|
||||
static bool bnxt_rfs_supported(struct bnxt *bp)
|
||||
{
|
||||
- if (bp->flags & BNXT_FLAG_CHIP_P5)
|
||||
+ if (bp->flags & BNXT_FLAG_CHIP_P5) {
|
||||
+ if (bp->fw_cap & BNXT_FW_CAP_CFA_RFS_RING_TBL_IDX)
|
||||
+ return true;
|
||||
return false;
|
||||
+ }
|
||||
if (BNXT_PF(bp) && !BNXT_CHIP_TYPE_NITRO_A0(bp))
|
||||
return true;
|
||||
if (bp->flags & BNXT_FLAG_NEW_RSS_CAP)
|
||||
@@ -10688,6 +10723,12 @@
|
||||
rc = -1;
|
||||
goto init_err_pci_clean;
|
||||
}
|
||||
+
|
||||
+ rc = bnxt_hwrm_cfa_adv_flow_mgnt_qcaps(bp);
|
||||
+ if (rc)
|
||||
+ netdev_warn(bp->dev, "hwrm query adv flow mgnt failure rc: %d\n",
|
||||
+ rc);
|
||||
+
|
||||
rc = bnxt_init_mac_addr(bp);
|
||||
if (rc) {
|
||||
dev_err(&pdev->dev, "Unable to initialize mac address.\n");
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.h
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:13.520533254 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:13.662531951 +0100
|
||||
@@ -1485,6 +1485,8 @@
|
||||
#define BNXT_FW_CAP_OVS_64BIT_HANDLE 0x00000400
|
||||
#define BNXT_FW_CAP_TRUSTED_VF 0x00000800
|
||||
#define BNXT_FW_CAP_PKG_VER 0x00004000
|
||||
+ #define BNXT_FW_CAP_CFA_ADV_FLOW 0x00008000
|
||||
+ #define BNXT_FW_CAP_CFA_RFS_RING_TBL_IDX 0x00010000
|
||||
#define BNXT_FW_CAP_PCIE_STATS_SUPPORTED 0x00020000
|
||||
#define BNXT_FW_CAP_EXT_STATS_SUPPORTED 0x00040000
|
||||
|
@ -0,0 +1,76 @@
|
||||
From 57b905197ca2cf5b07e4a9da7f257b229f99c6a1 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:22:41 -0400
|
||||
Subject: [PATCH 26/96] [netdrv] bnxt_en: Add support for aRFS on 57500 chips
|
||||
|
||||
Message-id: <c48b69b512cfac54a82beb4bc5641307b723d623.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276445
|
||||
O-Subject: [RHEL-8.2 PATCH 19/78] bnxt_en: Add support for aRFS on 57500 chips.
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
Set RSS ring table index of the RFS destination ring for the NTUPLE
|
||||
filters on 57500 chips.
|
||||
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit ac33906c67e22edeabe3f0150ffeb367462e754f)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 16 ++++++++++++----
|
||||
1 file changed, 12 insertions(+), 4 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:13.662531951 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:13.805530638 +0100
|
||||
@@ -4232,16 +4232,25 @@
|
||||
static int bnxt_hwrm_cfa_ntuple_filter_alloc(struct bnxt *bp,
|
||||
struct bnxt_ntuple_filter *fltr)
|
||||
{
|
||||
- struct bnxt_vnic_info *vnic = &bp->vnic_info[fltr->rxq + 1];
|
||||
struct hwrm_cfa_ntuple_filter_alloc_input req = {0};
|
||||
struct hwrm_cfa_ntuple_filter_alloc_output *resp;
|
||||
struct flow_keys *keys = &fltr->fkeys;
|
||||
+ struct bnxt_vnic_info *vnic;
|
||||
+ u32 dst_ena = 0;
|
||||
int rc = 0;
|
||||
|
||||
bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_CFA_NTUPLE_FILTER_ALLOC, -1, -1);
|
||||
req.l2_filter_id = bp->vnic_info[0].fw_l2_filter_id[fltr->l2_fltr_idx];
|
||||
|
||||
- req.enables = cpu_to_le32(BNXT_NTP_FLTR_FLAGS);
|
||||
+ if (bp->fw_cap & BNXT_FW_CAP_CFA_RFS_RING_TBL_IDX) {
|
||||
+ dst_ena = CFA_NTUPLE_FILTER_ALLOC_REQ_ENABLES_RFS_RING_TBL_IDX;
|
||||
+ req.rfs_ring_tbl_idx = cpu_to_le16(fltr->rxq);
|
||||
+ vnic = &bp->vnic_info[0];
|
||||
+ } else {
|
||||
+ vnic = &bp->vnic_info[fltr->rxq + 1];
|
||||
+ }
|
||||
+ req.dst_id = cpu_to_le16(vnic->fw_vnic_id);
|
||||
+ req.enables = cpu_to_le32(BNXT_NTP_FLTR_FLAGS | dst_ena);
|
||||
|
||||
req.ethertype = htons(ETH_P_IP);
|
||||
memcpy(req.src_macaddr, fltr->src_mac_addr, ETH_ALEN);
|
||||
@@ -4279,7 +4288,6 @@
|
||||
req.dst_port = keys->ports.dst;
|
||||
req.dst_port_mask = cpu_to_be16(0xffff);
|
||||
|
||||
- req.dst_id = cpu_to_le16(vnic->fw_vnic_id);
|
||||
mutex_lock(&bp->hwrm_cmd_lock);
|
||||
rc = _hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
|
||||
if (!rc) {
|
||||
@@ -9126,7 +9134,7 @@
|
||||
int vnics, max_vnics, max_rss_ctxs;
|
||||
|
||||
if (bp->flags & BNXT_FLAG_CHIP_P5)
|
||||
- return false;
|
||||
+ return bnxt_rfs_supported(bp);
|
||||
if (!(bp->flags & BNXT_FLAG_MSIX_CAP) || !bnxt_can_reserve_rings(bp))
|
||||
return false;
|
||||
|
@ -0,0 +1,51 @@
|
||||
From 620cc08cb52bfe54049e69c56c7d75ba7b67ce26 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:22:42 -0400
|
||||
Subject: [PATCH 27/96] [netdrv] bnxt_en: Device serial number is supported
|
||||
only for PFs
|
||||
|
||||
Message-id: <42a558146846b42a704f96b91b13e688f5533fb9.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276442
|
||||
O-Subject: [RHEL-8.2 PATCH 20/78] bnxt_en: Device serial number is supported only for PFs.
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
Don't read DSN on VFs that do not have the PCI capability.
|
||||
|
||||
Fixes: 03213a996531 ("bnxt: move bp->switch_id initialization to PF probe")
|
||||
Signed-off-by: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit 2e9217d1e8b72dde2c7e3e2338cc1830f68cb58d)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 11 ++++++-----
|
||||
1 file changed, 6 insertions(+), 5 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:13.805530638 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:13.941529390 +0100
|
||||
@@ -10744,11 +10744,12 @@
|
||||
goto init_err_pci_clean;
|
||||
}
|
||||
|
||||
- /* Read the adapter's DSN to use as the eswitch switch_id */
|
||||
- rc = bnxt_pcie_dsn_get(bp, bp->switch_id);
|
||||
- if (rc)
|
||||
- goto init_err_pci_clean;
|
||||
-
|
||||
+ if (BNXT_PF(bp)) {
|
||||
+ /* Read the adapter's DSN to use as the eswitch switch_id */
|
||||
+ rc = bnxt_pcie_dsn_get(bp, bp->switch_id);
|
||||
+ if (rc)
|
||||
+ goto init_err_pci_clean;
|
||||
+ }
|
||||
bnxt_hwrm_func_qcfg(bp);
|
||||
bnxt_hwrm_vnic_qcaps(bp);
|
||||
bnxt_hwrm_port_led_qcaps(bp);
|
@ -0,0 +1,84 @@
|
||||
From 57e81b54c97b6f765ab3e0d5b2943ba40a018663 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:22:43 -0400
|
||||
Subject: [PATCH 28/96] [netdrv] bnxt_en: rename some xdp functions
|
||||
|
||||
Message-id: <eed0d404784ad5af34e9f915279f4fa5e2afce8e.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276444
|
||||
O-Subject: [RHEL-8.2 PATCH 21/78] bnxt_en: rename some xdp functions
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
Renaming bnxt_xmit_xdp to __bnxt_xmit_xdp to get ready for XDP_REDIRECT
|
||||
support and reduce confusion/namespace collision.
|
||||
|
||||
Signed-off-by: Andy Gospodarek <gospo@broadcom.com>
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit 52c0609258658ff35b85c654c568a50abd602ac6)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 2 +-
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c | 8 ++++----
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.h | 4 ++--
|
||||
3 files changed, 7 insertions(+), 7 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c 2020-02-06 16:23:13.241535815 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c 2020-02-06 16:23:14.076528151 +0100
|
||||
@@ -2799,7 +2799,7 @@
|
||||
dev_kfree_skb(skb);
|
||||
return -EIO;
|
||||
}
|
||||
- bnxt_xmit_xdp(bp, txr, map, pkt_size, 0);
|
||||
+ __bnxt_xmit_xdp(bp, txr, map, pkt_size, 0);
|
||||
|
||||
/* Sync BD data before updating doorbell */
|
||||
wmb();
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c 2020-02-06 16:22:56.456689887 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c 2020-02-06 16:23:14.076528151 +0100
|
||||
@@ -19,8 +19,8 @@
|
||||
#include "bnxt.h"
|
||||
#include "bnxt_xdp.h"
|
||||
|
||||
-void bnxt_xmit_xdp(struct bnxt *bp, struct bnxt_tx_ring_info *txr,
|
||||
- dma_addr_t mapping, u32 len, u16 rx_prod)
|
||||
+void __bnxt_xmit_xdp(struct bnxt *bp, struct bnxt_tx_ring_info *txr,
|
||||
+ dma_addr_t mapping, u32 len, u16 rx_prod)
|
||||
{
|
||||
struct bnxt_sw_tx_bd *tx_buf;
|
||||
struct tx_bd *txbd;
|
||||
@@ -132,8 +132,8 @@
|
||||
*event = BNXT_TX_EVENT;
|
||||
dma_sync_single_for_device(&pdev->dev, mapping + offset, *len,
|
||||
bp->rx_dir);
|
||||
- bnxt_xmit_xdp(bp, txr, mapping + offset, *len,
|
||||
- NEXT_RX(rxr->rx_prod));
|
||||
+ __bnxt_xmit_xdp(bp, txr, mapping + offset, *len,
|
||||
+ NEXT_RX(rxr->rx_prod));
|
||||
bnxt_reuse_rx_data(rxr, cons, page);
|
||||
return true;
|
||||
default:
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.h
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.h 2020-02-06 16:22:56.456689887 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.h 2020-02-06 16:23:14.076528151 +0100
|
||||
@@ -10,8 +10,8 @@
|
||||
#ifndef BNXT_XDP_H
|
||||
#define BNXT_XDP_H
|
||||
|
||||
-void bnxt_xmit_xdp(struct bnxt *bp, struct bnxt_tx_ring_info *txr,
|
||||
- dma_addr_t mapping, u32 len, u16 rx_prod);
|
||||
+void __bnxt_xmit_xdp(struct bnxt *bp, struct bnxt_tx_ring_info *txr,
|
||||
+ dma_addr_t mapping, u32 len, u16 rx_prod);
|
||||
void bnxt_tx_int_xdp(struct bnxt *bp, struct bnxt_napi *bnapi, int nr_pkts);
|
||||
bool bnxt_rx_xdp(struct bnxt *bp, struct bnxt_rx_ring_info *rxr, u16 cons,
|
||||
struct page *page, u8 **data_ptr, unsigned int *len,
|
@ -0,0 +1,149 @@
|
||||
From 21e44965c1de18146e7d7b29612751eeac02968a Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:22:44 -0400
|
||||
Subject: [PATCH 29/96] [netdrv] bnxt_en: Refactor __bnxt_xmit_xdp()
|
||||
|
||||
Message-id: <da1238f5df4b80f5906517c6bbc1dcf7939ce6ba.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276447
|
||||
O-Subject: [RHEL-8.2 PATCH 22/78] bnxt_en: Refactor __bnxt_xmit_xdp().
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
__bnxt_xmit_xdp() is used by XDP_TX and ethtool loopback packet transmit.
|
||||
Refactor it so that it can be re-used by the XDP_REDIRECT logic.
|
||||
Restructure the TX interrupt handler logic to cleanly separate XDP_TX
|
||||
logic in preparation for XDP_REDIRECT.
|
||||
|
||||
Acked-by: Andy Gospodarek <gospo@broadcom.com>
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit c1ba92a86db24dc9ca2648473d4820979a0d8a4c)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.h | 1 +
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 2 +-
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c | 33 ++++++++++++++++-------
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.h | 5 ++--
|
||||
4 files changed, 28 insertions(+), 13 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.h
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:13.662531951 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:14.227526765 +0100
|
||||
@@ -596,6 +596,7 @@
|
||||
DEFINE_DMA_UNMAP_ADDR(mapping);
|
||||
u8 is_gso;
|
||||
u8 is_push;
|
||||
+ u8 action;
|
||||
union {
|
||||
unsigned short nr_frags;
|
||||
u16 rx_prod;
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c 2020-02-06 16:23:14.076528151 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c 2020-02-06 16:23:14.228526755 +0100
|
||||
@@ -2799,7 +2799,7 @@
|
||||
dev_kfree_skb(skb);
|
||||
return -EIO;
|
||||
}
|
||||
- __bnxt_xmit_xdp(bp, txr, map, pkt_size, 0);
|
||||
+ bnxt_xmit_bd(bp, txr, map, pkt_size);
|
||||
|
||||
/* Sync BD data before updating doorbell */
|
||||
wmb();
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c 2020-02-06 16:23:14.076528151 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c 2020-02-06 16:23:14.228526755 +0100
|
||||
@@ -19,8 +19,9 @@
|
||||
#include "bnxt.h"
|
||||
#include "bnxt_xdp.h"
|
||||
|
||||
-void __bnxt_xmit_xdp(struct bnxt *bp, struct bnxt_tx_ring_info *txr,
|
||||
- dma_addr_t mapping, u32 len, u16 rx_prod)
|
||||
+struct bnxt_sw_tx_bd *bnxt_xmit_bd(struct bnxt *bp,
|
||||
+ struct bnxt_tx_ring_info *txr,
|
||||
+ dma_addr_t mapping, u32 len)
|
||||
{
|
||||
struct bnxt_sw_tx_bd *tx_buf;
|
||||
struct tx_bd *txbd;
|
||||
@@ -29,7 +30,6 @@
|
||||
|
||||
prod = txr->tx_prod;
|
||||
tx_buf = &txr->tx_buf_ring[prod];
|
||||
- tx_buf->rx_prod = rx_prod;
|
||||
|
||||
txbd = &txr->tx_desc_ring[TX_RING(prod)][TX_IDX(prod)];
|
||||
flags = (len << TX_BD_LEN_SHIFT) | (1 << TX_BD_FLAGS_BD_CNT_SHIFT) |
|
||||
@@ -40,30 +40,43 @@
|
||||
|
||||
prod = NEXT_TX(prod);
|
||||
txr->tx_prod = prod;
|
||||
+ return tx_buf;
|
||||
+}
|
||||
+
|
||||
+static void __bnxt_xmit_xdp(struct bnxt *bp, struct bnxt_tx_ring_info *txr,
|
||||
+ dma_addr_t mapping, u32 len, u16 rx_prod)
|
||||
+{
|
||||
+ struct bnxt_sw_tx_bd *tx_buf;
|
||||
+
|
||||
+ tx_buf = bnxt_xmit_bd(bp, txr, mapping, len);
|
||||
+ tx_buf->rx_prod = rx_prod;
|
||||
+ tx_buf->action = XDP_TX;
|
||||
}
|
||||
|
||||
void bnxt_tx_int_xdp(struct bnxt *bp, struct bnxt_napi *bnapi, int nr_pkts)
|
||||
{
|
||||
struct bnxt_tx_ring_info *txr = bnapi->tx_ring;
|
||||
struct bnxt_rx_ring_info *rxr = bnapi->rx_ring;
|
||||
+ bool rx_doorbell_needed = false;
|
||||
struct bnxt_sw_tx_bd *tx_buf;
|
||||
u16 tx_cons = txr->tx_cons;
|
||||
u16 last_tx_cons = tx_cons;
|
||||
- u16 rx_prod;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < nr_pkts; i++) {
|
||||
- last_tx_cons = tx_cons;
|
||||
+ tx_buf = &txr->tx_buf_ring[tx_cons];
|
||||
+
|
||||
+ if (tx_buf->action == XDP_TX) {
|
||||
+ rx_doorbell_needed = true;
|
||||
+ last_tx_cons = tx_cons;
|
||||
+ }
|
||||
tx_cons = NEXT_TX(tx_cons);
|
||||
}
|
||||
txr->tx_cons = tx_cons;
|
||||
- if (bnxt_tx_avail(bp, txr) == bp->tx_ring_size) {
|
||||
- rx_prod = rxr->rx_prod;
|
||||
- } else {
|
||||
+ if (rx_doorbell_needed) {
|
||||
tx_buf = &txr->tx_buf_ring[last_tx_cons];
|
||||
- rx_prod = tx_buf->rx_prod;
|
||||
+ bnxt_db_write(bp, &rxr->rx_db, tx_buf->rx_prod);
|
||||
}
|
||||
- bnxt_db_write(bp, &rxr->rx_db, rx_prod);
|
||||
}
|
||||
|
||||
/* returns the following:
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.h
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.h 2020-02-06 16:23:14.076528151 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.h 2020-02-06 16:23:14.228526755 +0100
|
||||
@@ -10,8 +10,9 @@
|
||||
#ifndef BNXT_XDP_H
|
||||
#define BNXT_XDP_H
|
||||
|
||||
-void __bnxt_xmit_xdp(struct bnxt *bp, struct bnxt_tx_ring_info *txr,
|
||||
- dma_addr_t mapping, u32 len, u16 rx_prod);
|
||||
+struct bnxt_sw_tx_bd *bnxt_xmit_bd(struct bnxt *bp,
|
||||
+ struct bnxt_tx_ring_info *txr,
|
||||
+ dma_addr_t mapping, u32 len);
|
||||
void bnxt_tx_int_xdp(struct bnxt *bp, struct bnxt_napi *bnapi, int nr_pkts);
|
||||
bool bnxt_rx_xdp(struct bnxt *bp, struct bnxt_rx_ring_info *rxr, u16 cons,
|
||||
struct page *page, u8 **data_ptr, unsigned int *len,
|
@ -0,0 +1,288 @@
|
||||
From 5e0d15dae3ed578ed72d161b6aaf29b10d6af67a Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:22:45 -0400
|
||||
Subject: [PATCH 30/96] [netdrv] bnxt_en: optimized XDP_REDIRECT support
|
||||
|
||||
Message-id: <874a17aca14370fdeffadc8cf36fe78221e9641f.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276450
|
||||
O-Subject: [RHEL-8.2 PATCH 23/78] bnxt_en: optimized XDP_REDIRECT support
|
||||
Bugzilla: 1724766 1669220
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
This adds basic support for XDP_REDIRECT in the bnxt_en driver. Next
|
||||
patch adds the more optimized page pool support.
|
||||
|
||||
Signed-off-by: Andy Gospodarek <gospo@broadcom.com>
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit f18c2b77b2e4eec2313d519ba125bd6a069513cf)
|
||||
Bugzilla: 1724766
|
||||
Bugzilla: 1669220
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 27 ++++++-
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.h | 13 +++-
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c | 108 ++++++++++++++++++++++++--
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.h | 2 +
|
||||
4 files changed, 140 insertions(+), 10 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:13.941529390 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:14.390525268 +0100
|
||||
@@ -1991,6 +1991,9 @@
|
||||
}
|
||||
}
|
||||
|
||||
+ if (event & BNXT_REDIRECT_EVENT)
|
||||
+ xdp_do_flush_map();
|
||||
+
|
||||
if (event & BNXT_TX_EVENT) {
|
||||
struct bnxt_tx_ring_info *txr = bnapi->tx_ring;
|
||||
u16 prod = txr->tx_prod;
|
||||
@@ -2257,9 +2260,23 @@
|
||||
|
||||
for (j = 0; j < max_idx;) {
|
||||
struct bnxt_sw_tx_bd *tx_buf = &txr->tx_buf_ring[j];
|
||||
- struct sk_buff *skb = tx_buf->skb;
|
||||
+ struct sk_buff *skb;
|
||||
int k, last;
|
||||
|
||||
+ if (i < bp->tx_nr_rings_xdp &&
|
||||
+ tx_buf->action == XDP_REDIRECT) {
|
||||
+ dma_unmap_single(&pdev->dev,
|
||||
+ dma_unmap_addr(tx_buf, mapping),
|
||||
+ dma_unmap_len(tx_buf, len),
|
||||
+ PCI_DMA_TODEVICE);
|
||||
+ xdp_return_frame(tx_buf->xdpf);
|
||||
+ tx_buf->action = 0;
|
||||
+ tx_buf->xdpf = NULL;
|
||||
+ j++;
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ skb = tx_buf->skb;
|
||||
if (!skb) {
|
||||
j++;
|
||||
continue;
|
||||
@@ -2520,6 +2537,13 @@
|
||||
if (rc < 0)
|
||||
return rc;
|
||||
|
||||
+ rc = xdp_rxq_info_reg_mem_model(&rxr->xdp_rxq,
|
||||
+ MEM_TYPE_PAGE_SHARED, NULL);
|
||||
+ if (rc) {
|
||||
+ xdp_rxq_info_unreg(&rxr->xdp_rxq);
|
||||
+ return rc;
|
||||
+ }
|
||||
+
|
||||
rc = bnxt_alloc_ring(bp, &ring->ring_mem);
|
||||
if (rc)
|
||||
return rc;
|
||||
@@ -10251,6 +10275,7 @@
|
||||
.ndo_udp_tunnel_add = bnxt_udp_tunnel_add,
|
||||
.ndo_udp_tunnel_del = bnxt_udp_tunnel_del,
|
||||
.ndo_bpf = bnxt_xdp,
|
||||
+ .ndo_xdp_xmit = bnxt_xdp_xmit,
|
||||
.ndo_bridge_getlink = bnxt_bridge_getlink,
|
||||
.ndo_bridge_setlink = bnxt_bridge_setlink,
|
||||
.ndo_get_port_parent_id = bnxt_get_port_parent_id,
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.h
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:14.227526765 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:14.390525268 +0100
|
||||
@@ -587,13 +587,18 @@
|
||||
#define BNXT_HWRM_CHNL_CHIMP 0
|
||||
#define BNXT_HWRM_CHNL_KONG 1
|
||||
|
||||
-#define BNXT_RX_EVENT 1
|
||||
-#define BNXT_AGG_EVENT 2
|
||||
-#define BNXT_TX_EVENT 4
|
||||
+#define BNXT_RX_EVENT 1
|
||||
+#define BNXT_AGG_EVENT 2
|
||||
+#define BNXT_TX_EVENT 4
|
||||
+#define BNXT_REDIRECT_EVENT 8
|
||||
|
||||
struct bnxt_sw_tx_bd {
|
||||
- struct sk_buff *skb;
|
||||
+ union {
|
||||
+ struct sk_buff *skb;
|
||||
+ struct xdp_frame *xdpf;
|
||||
+ };
|
||||
DEFINE_DMA_UNMAP_ADDR(mapping);
|
||||
+ DEFINE_DMA_UNMAP_LEN(len);
|
||||
u8 is_gso;
|
||||
u8 is_push;
|
||||
u8 action;
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c 2020-02-06 16:23:14.228526755 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c 2020-02-06 16:23:14.390525268 +0100
|
||||
@@ -53,6 +53,20 @@
|
||||
tx_buf->action = XDP_TX;
|
||||
}
|
||||
|
||||
+static void __bnxt_xmit_xdp_redirect(struct bnxt *bp,
|
||||
+ struct bnxt_tx_ring_info *txr,
|
||||
+ dma_addr_t mapping, u32 len,
|
||||
+ struct xdp_frame *xdpf)
|
||||
+{
|
||||
+ struct bnxt_sw_tx_bd *tx_buf;
|
||||
+
|
||||
+ tx_buf = bnxt_xmit_bd(bp, txr, mapping, len);
|
||||
+ tx_buf->action = XDP_REDIRECT;
|
||||
+ tx_buf->xdpf = xdpf;
|
||||
+ dma_unmap_addr_set(tx_buf, mapping, mapping);
|
||||
+ dma_unmap_len_set(tx_buf, len, 0);
|
||||
+}
|
||||
+
|
||||
void bnxt_tx_int_xdp(struct bnxt *bp, struct bnxt_napi *bnapi, int nr_pkts)
|
||||
{
|
||||
struct bnxt_tx_ring_info *txr = bnapi->tx_ring;
|
||||
@@ -66,7 +80,17 @@
|
||||
for (i = 0; i < nr_pkts; i++) {
|
||||
tx_buf = &txr->tx_buf_ring[tx_cons];
|
||||
|
||||
- if (tx_buf->action == XDP_TX) {
|
||||
+ if (tx_buf->action == XDP_REDIRECT) {
|
||||
+ struct pci_dev *pdev = bp->pdev;
|
||||
+
|
||||
+ dma_unmap_single(&pdev->dev,
|
||||
+ dma_unmap_addr(tx_buf, mapping),
|
||||
+ dma_unmap_len(tx_buf, len),
|
||||
+ PCI_DMA_TODEVICE);
|
||||
+ xdp_return_frame(tx_buf->xdpf);
|
||||
+ tx_buf->action = 0;
|
||||
+ tx_buf->xdpf = NULL;
|
||||
+ } else if (tx_buf->action == XDP_TX) {
|
||||
rx_doorbell_needed = true;
|
||||
last_tx_cons = tx_cons;
|
||||
}
|
||||
@@ -101,19 +125,19 @@
|
||||
return false;
|
||||
|
||||
pdev = bp->pdev;
|
||||
- txr = rxr->bnapi->tx_ring;
|
||||
rx_buf = &rxr->rx_buf_ring[cons];
|
||||
offset = bp->rx_offset;
|
||||
|
||||
+ mapping = rx_buf->mapping - bp->rx_dma_offset;
|
||||
+ dma_sync_single_for_cpu(&pdev->dev, mapping + offset, *len, bp->rx_dir);
|
||||
+
|
||||
+ txr = rxr->bnapi->tx_ring;
|
||||
xdp.data_hard_start = *data_ptr - offset;
|
||||
xdp.data = *data_ptr;
|
||||
xdp_set_data_meta_invalid(&xdp);
|
||||
xdp.data_end = *data_ptr + *len;
|
||||
xdp.rxq = &rxr->xdp_rxq;
|
||||
orig_data = xdp.data;
|
||||
- mapping = rx_buf->mapping - bp->rx_dma_offset;
|
||||
-
|
||||
- dma_sync_single_for_cpu(&pdev->dev, mapping + offset, *len, bp->rx_dir);
|
||||
|
||||
rcu_read_lock();
|
||||
act = bpf_prog_run_xdp(xdp_prog, &xdp);
|
||||
@@ -149,6 +173,30 @@
|
||||
NEXT_RX(rxr->rx_prod));
|
||||
bnxt_reuse_rx_data(rxr, cons, page);
|
||||
return true;
|
||||
+ case XDP_REDIRECT:
|
||||
+ /* if we are calling this here then we know that the
|
||||
+ * redirect is coming from a frame received by the
|
||||
+ * bnxt_en driver.
|
||||
+ */
|
||||
+ dma_unmap_page_attrs(&pdev->dev, mapping,
|
||||
+ PAGE_SIZE, bp->rx_dir,
|
||||
+ DMA_ATTR_WEAK_ORDERING);
|
||||
+
|
||||
+ /* if we are unable to allocate a new buffer, abort and reuse */
|
||||
+ if (bnxt_alloc_rx_data(bp, rxr, rxr->rx_prod, GFP_ATOMIC)) {
|
||||
+ trace_xdp_exception(bp->dev, xdp_prog, act);
|
||||
+ bnxt_reuse_rx_data(rxr, cons, page);
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+ if (xdp_do_redirect(bp->dev, &xdp, xdp_prog)) {
|
||||
+ trace_xdp_exception(bp->dev, xdp_prog, act);
|
||||
+ __free_page(page);
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+ *event |= BNXT_REDIRECT_EVENT;
|
||||
+ break;
|
||||
default:
|
||||
bpf_warn_invalid_xdp_action(act);
|
||||
/* Fall thru */
|
||||
@@ -162,6 +210,56 @@
|
||||
return true;
|
||||
}
|
||||
|
||||
+int bnxt_xdp_xmit(struct net_device *dev, int num_frames,
|
||||
+ struct xdp_frame **frames, u32 flags)
|
||||
+{
|
||||
+ struct bnxt *bp = netdev_priv(dev);
|
||||
+ struct bpf_prog *xdp_prog = READ_ONCE(bp->xdp_prog);
|
||||
+ struct pci_dev *pdev = bp->pdev;
|
||||
+ struct bnxt_tx_ring_info *txr;
|
||||
+ dma_addr_t mapping;
|
||||
+ int drops = 0;
|
||||
+ int ring;
|
||||
+ int i;
|
||||
+
|
||||
+ if (!test_bit(BNXT_STATE_OPEN, &bp->state) ||
|
||||
+ !bp->tx_nr_rings_xdp ||
|
||||
+ !xdp_prog)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ ring = smp_processor_id() % bp->tx_nr_rings_xdp;
|
||||
+ txr = &bp->tx_ring[ring];
|
||||
+
|
||||
+ for (i = 0; i < num_frames; i++) {
|
||||
+ struct xdp_frame *xdp = frames[i];
|
||||
+
|
||||
+ if (!txr || !bnxt_tx_avail(bp, txr) ||
|
||||
+ !(bp->bnapi[ring]->flags & BNXT_NAPI_FLAG_XDP)) {
|
||||
+ xdp_return_frame_rx_napi(xdp);
|
||||
+ drops++;
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ mapping = dma_map_single(&pdev->dev, xdp->data, xdp->len,
|
||||
+ DMA_TO_DEVICE);
|
||||
+
|
||||
+ if (dma_mapping_error(&pdev->dev, mapping)) {
|
||||
+ xdp_return_frame_rx_napi(xdp);
|
||||
+ drops++;
|
||||
+ continue;
|
||||
+ }
|
||||
+ __bnxt_xmit_xdp_redirect(bp, txr, mapping, xdp->len, xdp);
|
||||
+ }
|
||||
+
|
||||
+ if (flags & XDP_XMIT_FLUSH) {
|
||||
+ /* Sync BD data before updating doorbell */
|
||||
+ wmb();
|
||||
+ bnxt_db_write(bp, &txr->tx_db, txr->tx_prod);
|
||||
+ }
|
||||
+
|
||||
+ return num_frames - drops;
|
||||
+}
|
||||
+
|
||||
/* Under rtnl_lock */
|
||||
static int bnxt_xdp_set(struct bnxt *bp, struct bpf_prog *prog)
|
||||
{
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.h
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.h 2020-02-06 16:23:14.228526755 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.h 2020-02-06 16:23:14.390525268 +0100
|
||||
@@ -18,5 +18,7 @@
|
||||
struct page *page, u8 **data_ptr, unsigned int *len,
|
||||
u8 *event);
|
||||
int bnxt_xdp(struct net_device *dev, struct netdev_bpf *xdp);
|
||||
+int bnxt_xdp_xmit(struct net_device *dev, int num_frames,
|
||||
+ struct xdp_frame **frames, u32 flags);
|
||||
|
||||
#endif
|
@ -0,0 +1,194 @@
|
||||
From cde6d65ea5063367fa782fcd1ea9fc54cdad4deb Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:22:46 -0400
|
||||
Subject: [PATCH 31/96] [netdrv] bnxt_en: add page_pool support
|
||||
|
||||
Message-id: <5af2e26517985727f11c26b4580740d97a57abce.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276452
|
||||
O-Subject: [RHEL-8.2 PATCH 24/78] bnxt_en: add page_pool support
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
This removes contention over page allocation for XDP_REDIRECT actions by
|
||||
adding page_pool support per queue for the driver. The performance for
|
||||
XDP_REDIRECT actions scales linearly with the number of cores performing
|
||||
redirect actions when using the page pools instead of the standard page
|
||||
allocator.
|
||||
|
||||
v2: Fix up the error path from XDP registration, noted by Ilias Apalodimas.
|
||||
|
||||
Signed-off-by: Andy Gospodarek <gospo@broadcom.com>
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit 322b87ca55f2f3936ec9f9de438ef9b2115b5c9b)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 47 +++++++++++++++++++++++----
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.h | 3 ++
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c | 3 +-
|
||||
3 files changed, 46 insertions(+), 7 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:14.390525268 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:14.547523827 +0100
|
||||
@@ -54,6 +54,7 @@
|
||||
#include <net/pkt_cls.h>
|
||||
#include <linux/hwmon.h>
|
||||
#include <linux/hwmon-sysfs.h>
|
||||
+#include <net/page_pool.h>
|
||||
|
||||
#include "bnxt_hsi.h"
|
||||
#include "bnxt.h"
|
||||
@@ -670,19 +671,20 @@
|
||||
}
|
||||
|
||||
static struct page *__bnxt_alloc_rx_page(struct bnxt *bp, dma_addr_t *mapping,
|
||||
+ struct bnxt_rx_ring_info *rxr,
|
||||
gfp_t gfp)
|
||||
{
|
||||
struct device *dev = &bp->pdev->dev;
|
||||
struct page *page;
|
||||
|
||||
- page = alloc_page(gfp);
|
||||
+ page = page_pool_dev_alloc_pages(rxr->page_pool);
|
||||
if (!page)
|
||||
return NULL;
|
||||
|
||||
*mapping = dma_map_page_attrs(dev, page, 0, PAGE_SIZE, bp->rx_dir,
|
||||
DMA_ATTR_WEAK_ORDERING);
|
||||
if (dma_mapping_error(dev, *mapping)) {
|
||||
- __free_page(page);
|
||||
+ page_pool_recycle_direct(rxr->page_pool, page);
|
||||
return NULL;
|
||||
}
|
||||
*mapping += bp->rx_dma_offset;
|
||||
@@ -718,7 +720,8 @@
|
||||
dma_addr_t mapping;
|
||||
|
||||
if (BNXT_RX_PAGE_MODE(bp)) {
|
||||
- struct page *page = __bnxt_alloc_rx_page(bp, &mapping, gfp);
|
||||
+ struct page *page =
|
||||
+ __bnxt_alloc_rx_page(bp, &mapping, rxr, gfp);
|
||||
|
||||
if (!page)
|
||||
return -ENOMEM;
|
||||
@@ -2363,7 +2366,7 @@
|
||||
dma_unmap_page_attrs(&pdev->dev, mapping,
|
||||
PAGE_SIZE, bp->rx_dir,
|
||||
DMA_ATTR_WEAK_ORDERING);
|
||||
- __free_page(data);
|
||||
+ page_pool_recycle_direct(rxr->page_pool, data);
|
||||
} else {
|
||||
dma_unmap_single_attrs(&pdev->dev, mapping,
|
||||
bp->rx_buf_use_size,
|
||||
@@ -2500,6 +2503,8 @@
|
||||
if (xdp_rxq_info_is_reg(&rxr->xdp_rxq))
|
||||
xdp_rxq_info_unreg(&rxr->xdp_rxq);
|
||||
|
||||
+ rxr->page_pool = NULL;
|
||||
+
|
||||
kfree(rxr->rx_tpa);
|
||||
rxr->rx_tpa = NULL;
|
||||
|
||||
@@ -2514,6 +2519,26 @@
|
||||
}
|
||||
}
|
||||
|
||||
+static int bnxt_alloc_rx_page_pool(struct bnxt *bp,
|
||||
+ struct bnxt_rx_ring_info *rxr)
|
||||
+{
|
||||
+ struct page_pool_params pp = { 0 };
|
||||
+
|
||||
+ pp.pool_size = bp->rx_ring_size;
|
||||
+ pp.nid = dev_to_node(&bp->pdev->dev);
|
||||
+ pp.dev = &bp->pdev->dev;
|
||||
+ pp.dma_dir = DMA_BIDIRECTIONAL;
|
||||
+
|
||||
+ rxr->page_pool = page_pool_create(&pp);
|
||||
+ if (IS_ERR(rxr->page_pool)) {
|
||||
+ int err = PTR_ERR(rxr->page_pool);
|
||||
+
|
||||
+ rxr->page_pool = NULL;
|
||||
+ return err;
|
||||
+ }
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static int bnxt_alloc_rx_rings(struct bnxt *bp)
|
||||
{
|
||||
int i, rc, agg_rings = 0, tpa_rings = 0;
|
||||
@@ -2533,14 +2558,24 @@
|
||||
|
||||
ring = &rxr->rx_ring_struct;
|
||||
|
||||
+ rc = bnxt_alloc_rx_page_pool(bp, rxr);
|
||||
+ if (rc)
|
||||
+ return rc;
|
||||
+
|
||||
rc = xdp_rxq_info_reg(&rxr->xdp_rxq, bp->dev, i);
|
||||
- if (rc < 0)
|
||||
+ if (rc < 0) {
|
||||
+ page_pool_free(rxr->page_pool);
|
||||
+ rxr->page_pool = NULL;
|
||||
return rc;
|
||||
+ }
|
||||
|
||||
rc = xdp_rxq_info_reg_mem_model(&rxr->xdp_rxq,
|
||||
- MEM_TYPE_PAGE_SHARED, NULL);
|
||||
+ MEM_TYPE_PAGE_POOL,
|
||||
+ rxr->page_pool);
|
||||
if (rc) {
|
||||
xdp_rxq_info_unreg(&rxr->xdp_rxq);
|
||||
+ page_pool_free(rxr->page_pool);
|
||||
+ rxr->page_pool = NULL;
|
||||
return rc;
|
||||
}
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.h
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:14.390525268 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:14.548523818 +0100
|
||||
@@ -26,6 +26,8 @@
|
||||
#include <net/xdp.h>
|
||||
#include <linux/net_dim.h>
|
||||
|
||||
+struct page_pool;
|
||||
+
|
||||
struct tx_bd {
|
||||
__le32 tx_bd_len_flags_type;
|
||||
#define TX_BD_TYPE (0x3f << 0)
|
||||
@@ -799,6 +801,7 @@
|
||||
struct bnxt_ring_struct rx_ring_struct;
|
||||
struct bnxt_ring_struct rx_agg_ring_struct;
|
||||
struct xdp_rxq_info xdp_rxq;
|
||||
+ struct page_pool *page_pool;
|
||||
};
|
||||
|
||||
struct bnxt_cp_ring_info {
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c 2020-02-06 16:23:14.390525268 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c 2020-02-06 16:23:14.548523818 +0100
|
||||
@@ -15,6 +15,7 @@
|
||||
#include <linux/bpf.h>
|
||||
#include <linux/bpf_trace.h>
|
||||
#include <linux/filter.h>
|
||||
+#include <net/page_pool.h>
|
||||
#include "bnxt_hsi.h"
|
||||
#include "bnxt.h"
|
||||
#include "bnxt_xdp.h"
|
||||
@@ -191,7 +192,7 @@
|
||||
|
||||
if (xdp_do_redirect(bp->dev, &xdp, xdp_prog)) {
|
||||
trace_xdp_exception(bp->dev, xdp_prog, act);
|
||||
- __free_page(page);
|
||||
+ page_pool_recycle_direct(rxr->page_pool, page);
|
||||
return true;
|
||||
}
|
||||
|
@ -0,0 +1,72 @@
|
||||
From da53b34b995100f84ac925275fe36a252166ec52 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:22:47 -0400
|
||||
Subject: [PATCH 32/96] [netdrv] bnxt_en: Add page_pool_destroy() during RX
|
||||
ring cleanup
|
||||
|
||||
Message-id: <a78187e9efd36d2b924eccd83bd157cea3d448cd.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276448
|
||||
O-Subject: [RHEL-8.2 PATCH 25/78] bnxt_en: Add page_pool_destroy() during RX ring cleanup.
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
Add page_pool_destroy() in bnxt_free_rx_rings() during normal RX ring
|
||||
cleanup, as Ilias has informed us that the following commit has been
|
||||
merged:
|
||||
|
||||
1da4bbeffe41 ("net: core: page_pool: add user refcnt and reintroduce page_pool_destroy")
|
||||
|
||||
The special error handling code to call page_pool_free() can now be
|
||||
removed. bnxt_free_rx_rings() will always be called during normal
|
||||
shutdown or any error paths.
|
||||
|
||||
Fixes: 322b87ca55f2 ("bnxt_en: add page_pool support")
|
||||
Cc: Ilias Apalodimas <ilias.apalodimas@linaro.org>
|
||||
Cc: Andy Gospodarek <gospo@broadcom.com>
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Acked-by: Andy Gospodarek <gospo@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit 12479f627f7c2017e6fcd50b56c2537592674c50)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 8 ++------
|
||||
1 file changed, 2 insertions(+), 6 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:14.547523827 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:14.697522450 +0100
|
||||
@@ -2503,6 +2503,7 @@
|
||||
if (xdp_rxq_info_is_reg(&rxr->xdp_rxq))
|
||||
xdp_rxq_info_unreg(&rxr->xdp_rxq);
|
||||
|
||||
+ page_pool_destroy(rxr->page_pool);
|
||||
rxr->page_pool = NULL;
|
||||
|
||||
kfree(rxr->rx_tpa);
|
||||
@@ -2563,19 +2564,14 @@
|
||||
return rc;
|
||||
|
||||
rc = xdp_rxq_info_reg(&rxr->xdp_rxq, bp->dev, i);
|
||||
- if (rc < 0) {
|
||||
- page_pool_free(rxr->page_pool);
|
||||
- rxr->page_pool = NULL;
|
||||
+ if (rc < 0)
|
||||
return rc;
|
||||
- }
|
||||
|
||||
rc = xdp_rxq_info_reg_mem_model(&rxr->xdp_rxq,
|
||||
MEM_TYPE_PAGE_POOL,
|
||||
rxr->page_pool);
|
||||
if (rc) {
|
||||
xdp_rxq_info_unreg(&rxr->xdp_rxq);
|
||||
- page_pool_free(rxr->page_pool);
|
||||
- rxr->page_pool = NULL;
|
||||
return rc;
|
||||
}
|
||||
|
@ -0,0 +1,64 @@
|
||||
From a14a9a4590a264a697d4749b4ec88ffbb9a6bc2f Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:22:48 -0400
|
||||
Subject: [PATCH 33/96] [netdrv] bnxt_en: Fix VNIC accounting when enabling
|
||||
aRFS on 57500 chips
|
||||
|
||||
Message-id: <7579696a1f5495cda9cfb3e7b819d0ce20cc022b.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276453
|
||||
O-Subject: [RHEL-8.2 PATCH 26/78] bnxt_en: Fix VNIC accounting when enabling aRFS on 57500 chips.
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
Unlike legacy chips, 57500 chips don't need additional VNIC resources
|
||||
for aRFS/ntuple. Fix the code accordingly so that we don't reserve
|
||||
and allocate additional VNICs on 57500 chips. Without this patch,
|
||||
the driver is failing to initialize when it tries to allocate extra
|
||||
VNICs.
|
||||
|
||||
Fixes: ac33906c67e2 ("bnxt_en: Add support for aRFS on 57500 chips.")
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit 9b3d15e6b05e0b916be5fbd915f90300a403098b)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 7 +++++--
|
||||
1 file changed, 5 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:14.697522450 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:14.827521257 +0100
|
||||
@@ -3080,7 +3080,7 @@
|
||||
int num_vnics = 1;
|
||||
|
||||
#ifdef CONFIG_RFS_ACCEL
|
||||
- if (bp->flags & BNXT_FLAG_RFS)
|
||||
+ if ((bp->flags & (BNXT_FLAG_RFS | BNXT_FLAG_CHIP_P5)) == BNXT_FLAG_RFS)
|
||||
num_vnics += bp->rx_nr_rings;
|
||||
#endif
|
||||
|
||||
@@ -7191,6 +7191,9 @@
|
||||
#ifdef CONFIG_RFS_ACCEL
|
||||
int i, rc = 0;
|
||||
|
||||
+ if (bp->flags & BNXT_FLAG_CHIP_P5)
|
||||
+ return 0;
|
||||
+
|
||||
for (i = 0; i < bp->rx_nr_rings; i++) {
|
||||
struct bnxt_vnic_info *vnic;
|
||||
u16 vnic_id = i + 1;
|
||||
@@ -9650,7 +9653,7 @@
|
||||
return -ENOMEM;
|
||||
|
||||
vnics = 1;
|
||||
- if (bp->flags & BNXT_FLAG_RFS)
|
||||
+ if ((bp->flags & (BNXT_FLAG_RFS | BNXT_FLAG_CHIP_P5)) == BNXT_FLAG_RFS)
|
||||
vnics += rx_rings;
|
||||
|
||||
if (bp->flags & BNXT_FLAG_AGG_RINGS)
|
@ -0,0 +1,77 @@
|
||||
From dbe4cfd4c9843b1273f200131b94a525b58081ae Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:22:49 -0400
|
||||
Subject: [PATCH 34/96] [netdrv] bnxt_en: Fix VNIC clearing logic for 57500
|
||||
chips
|
||||
|
||||
Message-id: <35f3ca679fd3fa079ba85558e610e106471c630f.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276449
|
||||
O-Subject: [RHEL-8.2 PATCH 27/78] bnxt_en: Fix VNIC clearing logic for 57500 chips.
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
During device shutdown, the VNIC clearing sequence needs to be modified
|
||||
to free the VNIC first before freeing the RSS contexts. The current
|
||||
code is doing the reverse and we can get mis-directed RX completions
|
||||
to CP ring ID 0 when the RSS contexts are freed and zeroed. The clearing
|
||||
of RSS contexts is not required with the new sequence.
|
||||
|
||||
Refactor the VNIC clearing logic into a new function bnxt_clear_vnic()
|
||||
and do the chip specific VNIC clearing sequence.
|
||||
|
||||
Fixes: 7b3af4f75b81 ("bnxt_en: Add RSS support for 57500 chips.")
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit a46ecb116fb7f722fa8cb2da01959c36e4e10c41)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 26 ++++++++++++++++++--------
|
||||
1 file changed, 18 insertions(+), 8 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:14.827521257 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:14.964520000 +0100
|
||||
@@ -7021,19 +7021,29 @@
|
||||
bnxt_hwrm_vnic_set_rss(bp, i, false);
|
||||
}
|
||||
|
||||
-static void bnxt_hwrm_resource_free(struct bnxt *bp, bool close_path,
|
||||
- bool irq_re_init)
|
||||
+static void bnxt_clear_vnic(struct bnxt *bp)
|
||||
{
|
||||
- if (bp->vnic_info) {
|
||||
- bnxt_hwrm_clear_vnic_filter(bp);
|
||||
+ if (!bp->vnic_info)
|
||||
+ return;
|
||||
+
|
||||
+ bnxt_hwrm_clear_vnic_filter(bp);
|
||||
+ if (!(bp->flags & BNXT_FLAG_CHIP_P5)) {
|
||||
/* clear all RSS setting before free vnic ctx */
|
||||
bnxt_hwrm_clear_vnic_rss(bp);
|
||||
bnxt_hwrm_vnic_ctx_free(bp);
|
||||
- /* before free the vnic, undo the vnic tpa settings */
|
||||
- if (bp->flags & BNXT_FLAG_TPA)
|
||||
- bnxt_set_tpa(bp, false);
|
||||
- bnxt_hwrm_vnic_free(bp);
|
||||
}
|
||||
+ /* before free the vnic, undo the vnic tpa settings */
|
||||
+ if (bp->flags & BNXT_FLAG_TPA)
|
||||
+ bnxt_set_tpa(bp, false);
|
||||
+ bnxt_hwrm_vnic_free(bp);
|
||||
+ if (bp->flags & BNXT_FLAG_CHIP_P5)
|
||||
+ bnxt_hwrm_vnic_ctx_free(bp);
|
||||
+}
|
||||
+
|
||||
+static void bnxt_hwrm_resource_free(struct bnxt *bp, bool close_path,
|
||||
+ bool irq_re_init)
|
||||
+{
|
||||
+ bnxt_clear_vnic(bp);
|
||||
bnxt_hwrm_ring_free(bp, close_path);
|
||||
bnxt_hwrm_ring_grp_free(bp);
|
||||
if (irq_re_init) {
|
@ -0,0 +1,88 @@
|
||||
From a63a2a674ca076e657998c0bf05c4ce52f3df200 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:22:50 -0400
|
||||
Subject: [PATCH 35/96] [netdrv] bnxt_en: Improve RX doorbell sequence
|
||||
|
||||
Message-id: <adc76103ee35a7bc5d42710a8ec6919b92b78f11.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276454
|
||||
O-Subject: [RHEL-8.2 PATCH 28/78] bnxt_en: Improve RX doorbell sequence.
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
When both RX buffers and RX aggregation buffers have to be
|
||||
replenished at the end of NAPI, post the RX aggregation buffers first
|
||||
before RX buffers. Otherwise, we may run into a situation where
|
||||
there are only RX buffers without RX aggregation buffers for a split
|
||||
second. This will cause the hardware to abort the RX packet and
|
||||
report buffer errors, which will cause unnecessary cleanup by the
|
||||
driver.
|
||||
|
||||
Ringing the Aggregation ring doorbell first before the RX ring doorbell
|
||||
will prevent some of these buffer errors. Use the same sequence during
|
||||
ring initialization as well.
|
||||
|
||||
Fixes: 697197e5a173 ("bnxt_en: Re-structure doorbells.")
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit e8f267b063208372f7a329c6d5288d58944d873c)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 10 +++++++---
|
||||
1 file changed, 7 insertions(+), 3 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:14.964520000 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:15.092518825 +0100
|
||||
@@ -2023,9 +2023,9 @@
|
||||
if (bnapi->events & BNXT_RX_EVENT) {
|
||||
struct bnxt_rx_ring_info *rxr = bnapi->rx_ring;
|
||||
|
||||
- bnxt_db_write(bp, &rxr->rx_db, rxr->rx_prod);
|
||||
if (bnapi->events & BNXT_AGG_EVENT)
|
||||
bnxt_db_write(bp, &rxr->rx_agg_db, rxr->rx_agg_prod);
|
||||
+ bnxt_db_write(bp, &rxr->rx_db, rxr->rx_prod);
|
||||
}
|
||||
bnapi->events = 0;
|
||||
}
|
||||
@@ -5069,6 +5069,7 @@
|
||||
|
||||
static int bnxt_hwrm_ring_alloc(struct bnxt *bp)
|
||||
{
|
||||
+ bool agg_rings = !!(bp->flags & BNXT_FLAG_AGG_RINGS);
|
||||
int i, rc = 0;
|
||||
u32 type;
|
||||
|
||||
@@ -5144,7 +5145,9 @@
|
||||
if (rc)
|
||||
goto err_out;
|
||||
bnxt_set_db(bp, &rxr->rx_db, type, map_idx, ring->fw_ring_id);
|
||||
- bnxt_db_write(bp, &rxr->rx_db, rxr->rx_prod);
|
||||
+ /* If we have agg rings, post agg buffers first. */
|
||||
+ if (!agg_rings)
|
||||
+ bnxt_db_write(bp, &rxr->rx_db, rxr->rx_prod);
|
||||
bp->grp_info[map_idx].rx_fw_ring_id = ring->fw_ring_id;
|
||||
if (bp->flags & BNXT_FLAG_CHIP_P5) {
|
||||
struct bnxt_cp_ring_info *cpr = &bnapi->cp_ring;
|
||||
@@ -5163,7 +5166,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
- if (bp->flags & BNXT_FLAG_AGG_RINGS) {
|
||||
+ if (agg_rings) {
|
||||
type = HWRM_RING_ALLOC_AGG;
|
||||
for (i = 0; i < bp->rx_nr_rings; i++) {
|
||||
struct bnxt_rx_ring_info *rxr = &bp->rx_ring[i];
|
||||
@@ -5179,6 +5182,7 @@
|
||||
bnxt_set_db(bp, &rxr->rx_agg_db, type, map_idx,
|
||||
ring->fw_ring_id);
|
||||
bnxt_db_write(bp, &rxr->rx_agg_db, rxr->rx_agg_prod);
|
||||
+ bnxt_db_write(bp, &rxr->rx_db, rxr->rx_prod);
|
||||
bp->grp_info[grp_idx].agg_fw_ring_id = ring->fw_ring_id;
|
||||
}
|
||||
}
|
@ -0,0 +1,63 @@
|
||||
From 97b39f6254351e160a853289bd1e3336ce6f83d3 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:22:51 -0400
|
||||
Subject: [PATCH 36/96] [netdrv] bnxt_en: Fix handling FRAG_ERR when
|
||||
NVM_INSTALL_UPDATE cmd fails
|
||||
|
||||
Message-id: <d28a29162a175429aacb2655353fe0c537ccec7e.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276455
|
||||
O-Subject: [RHEL-8.2 PATCH 29/78] bnxt_en: Fix handling FRAG_ERR when NVM_INSTALL_UPDATE cmd fails
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
If FW returns FRAG_ERR in response error code, driver is resending the
|
||||
command only when HWRM command returns success. Fix the code to resend
|
||||
NVM_INSTALL_UPDATE command with DEFRAG install flags, if FW returns
|
||||
FRAG_ERR in its response error code.
|
||||
|
||||
Fixes: cb4d1d626145 ("bnxt_en: Retry failed NVM_INSTALL_UPDATE with defragmentation flag enabled.")
|
||||
Signed-off-by: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit dd2ebf3404c7c295014bc025dea23960960ceb1a)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 12 +++++-------
|
||||
1 file changed, 5 insertions(+), 7 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c 2020-02-06 16:23:14.228526755 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c 2020-02-06 16:23:15.223517622 +0100
|
||||
@@ -2016,21 +2016,19 @@
|
||||
mutex_lock(&bp->hwrm_cmd_lock);
|
||||
hwrm_err = _hwrm_send_message(bp, &install, sizeof(install),
|
||||
INSTALL_PACKAGE_TIMEOUT);
|
||||
- if (hwrm_err)
|
||||
- goto flash_pkg_exit;
|
||||
-
|
||||
- if (resp->error_code) {
|
||||
+ if (hwrm_err) {
|
||||
u8 error_code = ((struct hwrm_err_output *)resp)->cmd_err;
|
||||
|
||||
- if (error_code == NVM_INSTALL_UPDATE_CMD_ERR_CODE_FRAG_ERR) {
|
||||
+ if (resp->error_code && error_code ==
|
||||
+ NVM_INSTALL_UPDATE_CMD_ERR_CODE_FRAG_ERR) {
|
||||
install.flags |= cpu_to_le16(
|
||||
NVM_INSTALL_UPDATE_REQ_FLAGS_ALLOWED_TO_DEFRAG);
|
||||
hwrm_err = _hwrm_send_message(bp, &install,
|
||||
sizeof(install),
|
||||
INSTALL_PACKAGE_TIMEOUT);
|
||||
- if (hwrm_err)
|
||||
- goto flash_pkg_exit;
|
||||
}
|
||||
+ if (hwrm_err)
|
||||
+ goto flash_pkg_exit;
|
||||
}
|
||||
|
||||
if (resp->result) {
|
@ -0,0 +1,54 @@
|
||||
From c6fc223ec3d9a83bd206c14fa5ad064cee76f21a Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:22:52 -0400
|
||||
Subject: [PATCH 37/96] [netdrv] bnxt_en: Use correct src_fid to determine
|
||||
direction of the flow
|
||||
|
||||
Message-id: <5d51854166a66f196a410e05a77ee9b68a95e4df.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276456
|
||||
O-Subject: [RHEL-8.2 PATCH 30/78] bnxt_en: Use correct src_fid to determine direction of the flow
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
Direction of the flow is determined using src_fid. For an RX flow,
|
||||
src_fid is PF's fid and for TX flow, src_fid is VF's fid. Direction
|
||||
of the flow must be specified, when getting statistics for that flow.
|
||||
Currently, for DECAP flow, direction is determined incorrectly, i.e.,
|
||||
direction is initialized as TX for DECAP flow, instead of RX. Because
|
||||
of which, stats are not reported for this DECAP flow, though it is
|
||||
offloaded and there is traffic for that flow, resulting in flow age out.
|
||||
|
||||
This patch fixes the problem by determining the DECAP flow's direction
|
||||
using correct fid. Set the flow direction in all cases for consistency
|
||||
even if 64-bit flow handle is not used.
|
||||
|
||||
Fixes: abd43a13525d ("bnxt_en: Support for 64-bit flow handle.")
|
||||
Signed-off-by: Venkat Duvvuru <venkatkumar.duvvuru@broadcom.com>
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit 685ec6a81bb0d47faf1dba49437d5bdaede2733d)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c | 4 +---
|
||||
1 file changed, 1 insertion(+), 3 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c 2020-02-06 16:23:12.415543397 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c 2020-02-06 16:23:15.352516438 +0100
|
||||
@@ -1285,9 +1285,7 @@
|
||||
goto free_node;
|
||||
|
||||
bnxt_tc_set_src_fid(bp, flow, src_fid);
|
||||
-
|
||||
- if (bp->fw_cap & BNXT_FW_CAP_OVS_64BIT_HANDLE)
|
||||
- bnxt_tc_set_flow_dir(bp, flow, src_fid);
|
||||
+ bnxt_tc_set_flow_dir(bp, flow, flow->src_fid);
|
||||
|
||||
if (!bnxt_tc_can_offload(bp, flow)) {
|
||||
rc = -EOPNOTSUPP;
|
@ -0,0 +1,88 @@
|
||||
From 3a8601f1dc8e341392bde4484716cdb1dd32e0f9 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:22:53 -0400
|
||||
Subject: [PATCH 38/96] [netdrv] bnxt_en: Fix to include flow direction in L2
|
||||
key
|
||||
|
||||
Message-id: <6991949fd7b4b1a47fac9013c2aaeae8f97cac3f.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276457
|
||||
O-Subject: [RHEL-8.2 PATCH 31/78] bnxt_en: Fix to include flow direction in L2 key
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
FW expects the driver to provide unique flow reference handles
|
||||
for Tx or Rx flows. When a Tx flow and an Rx flow end up sharing
|
||||
a reference handle, flow offload does not seem to work.
|
||||
This could happen in the case of 2 flows having their L2 fields
|
||||
wildcarded but in different direction.
|
||||
Fix to incorporate the flow direction as part of the L2 key
|
||||
|
||||
v2: Move the dir field to the end of the bnxt_tc_l2_key struct to
|
||||
fix the warning reported by kbuild test robot <lkp@intel.com>.
|
||||
There is existing code that initializes the structure using
|
||||
nested initializer and will warn with the new u8 field added to
|
||||
the beginning. The structure also packs nicer when this new u8 is
|
||||
added to the end of the structure [MChan].
|
||||
|
||||
Fixes: abd43a13525d ("bnxt_en: Support for 64-bit flow handle.")
|
||||
Signed-off-by: Somnath Kotur <somnath.kotur@broadcom.com>
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit 9bf46566e80fd94845527d01ebd888eb49313551)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c | 4 ++--
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_tc.h | 6 +++---
|
||||
2 files changed, 5 insertions(+), 5 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c 2020-02-06 16:23:15.352516438 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c 2020-02-06 16:23:15.476515300 +0100
|
||||
@@ -1236,7 +1236,7 @@
|
||||
static void bnxt_tc_set_flow_dir(struct bnxt *bp, struct bnxt_tc_flow *flow,
|
||||
u16 src_fid)
|
||||
{
|
||||
- flow->dir = (bp->pf.fw_fid == src_fid) ? BNXT_DIR_RX : BNXT_DIR_TX;
|
||||
+ flow->l2_key.dir = (bp->pf.fw_fid == src_fid) ? BNXT_DIR_RX : BNXT_DIR_TX;
|
||||
}
|
||||
|
||||
static void bnxt_tc_set_src_fid(struct bnxt *bp, struct bnxt_tc_flow *flow,
|
||||
@@ -1405,7 +1405,7 @@
|
||||
* 2. 15th bit of flow_handle must specify the flow
|
||||
* direction (TX/RX).
|
||||
*/
|
||||
- if (flow_node->flow.dir == BNXT_DIR_RX)
|
||||
+ if (flow_node->flow.l2_key.dir == BNXT_DIR_RX)
|
||||
handle = CFA_FLOW_INFO_REQ_FLOW_HANDLE_DIR_RX |
|
||||
CFA_FLOW_INFO_REQ_FLOW_HANDLE_MAX_MASK;
|
||||
else
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_tc.h
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_tc.h 2020-02-06 16:22:55.940694623 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_tc.h 2020-02-06 16:23:15.476515300 +0100
|
||||
@@ -23,6 +23,9 @@
|
||||
__be16 inner_vlan_tci;
|
||||
__be16 ether_type;
|
||||
u8 num_vlans;
|
||||
+ u8 dir;
|
||||
+#define BNXT_DIR_RX 1
|
||||
+#define BNXT_DIR_TX 0
|
||||
};
|
||||
|
||||
struct bnxt_tc_l3_key {
|
||||
@@ -98,9 +101,6 @@
|
||||
|
||||
/* flow applicable to pkts ingressing on this fid */
|
||||
u16 src_fid;
|
||||
- u8 dir;
|
||||
-#define BNXT_DIR_RX 1
|
||||
-#define BNXT_DIR_TX 0
|
||||
struct bnxt_tc_l2_key l2_key;
|
||||
struct bnxt_tc_l2_key l2_mask;
|
||||
struct bnxt_tc_l3_key l3_key;
|
@ -0,0 +1,52 @@
|
||||
From befaad00d846a0d60e0f997d913e64a67fe79b66 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:22:54 -0400
|
||||
Subject: [PATCH 39/96] [netdrv] bnxt_en: Suppress HWRM errors for
|
||||
HWRM_NVM_GET_VARIABLE command
|
||||
|
||||
Message-id: <3f152c462aacd24f8159b158cf6d29d8089a1b6e.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276459
|
||||
O-Subject: [RHEL-8.2 PATCH 32/78] bnxt_en: Suppress HWRM errors for HWRM_NVM_GET_VARIABLE command
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
For newly added NVM parameters, older firmware may not have the support.
|
||||
Suppress the error message to avoid the unncessary error message which is
|
||||
triggered when devlink calls the driver during initialization.
|
||||
|
||||
Fixes: 782a624d00fa ("bnxt_en: Add bnxt_en initial params table and register it.")
|
||||
Signed-off-by: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit b703ba751dbb4bcd086509ed4b28102bc1670b35)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c | 9 ++++++---
|
||||
1 file changed, 6 insertions(+), 3 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c 2020-02-06 16:23:12.277544664 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c 2020-02-06 16:23:15.606514107 +0100
|
||||
@@ -98,10 +98,13 @@
|
||||
if (idx)
|
||||
req->dimensions = cpu_to_le16(1);
|
||||
|
||||
- if (req->req_type == cpu_to_le16(HWRM_NVM_SET_VARIABLE))
|
||||
+ if (req->req_type == cpu_to_le16(HWRM_NVM_SET_VARIABLE)) {
|
||||
memcpy(data_addr, buf, bytesize);
|
||||
-
|
||||
- rc = hwrm_send_message(bp, msg, msg_len, HWRM_CMD_TIMEOUT);
|
||||
+ rc = hwrm_send_message(bp, msg, msg_len, HWRM_CMD_TIMEOUT);
|
||||
+ } else {
|
||||
+ rc = hwrm_send_message_silent(bp, msg, msg_len,
|
||||
+ HWRM_CMD_TIMEOUT);
|
||||
+ }
|
||||
if (!rc && req->req_type == cpu_to_le16(HWRM_NVM_GET_VARIABLE))
|
||||
memcpy(buf, data_addr, bytesize);
|
||||
|
@ -0,0 +1,327 @@
|
||||
From bb970cfdc4d465839a47e12e5979d51b6895e412 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:22:55 -0400
|
||||
Subject: [PATCH 40/96] [netdrv] bnxt_en: Update firmware interface spec. to
|
||||
1.10.0.89
|
||||
|
||||
Message-id: <f765fa53dd82d1e7c2bea8482f560f6b05686463.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276458
|
||||
O-Subject: [RHEL-8.2 PATCH 33/78] bnxt_en: Update firmware interface spec. to 1.10.0.89.
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
Among the changes are new CoS discard counters and new ctx_hw_stats_ext
|
||||
struct for the latest 5750X B0 chips.
|
||||
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit 2792b5b95ed5f38279da08f467a490687332324d)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 15 +++
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_hsi.h | 109 ++++++++++++++++++----
|
||||
2 files changed, 108 insertions(+), 16 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c 2020-02-06 16:23:15.223517622 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c 2020-02-06 16:23:15.727512996 +0100
|
||||
@@ -207,6 +207,20 @@
|
||||
BNXT_TX_STATS_EXT_COS_ENTRY(6), \
|
||||
BNXT_TX_STATS_EXT_COS_ENTRY(7) \
|
||||
|
||||
+#define BNXT_RX_STATS_EXT_DISCARD_COS_ENTRY(n) \
|
||||
+ BNXT_RX_STATS_EXT_ENTRY(rx_discard_bytes_cos##n), \
|
||||
+ BNXT_RX_STATS_EXT_ENTRY(rx_discard_packets_cos##n)
|
||||
+
|
||||
+#define BNXT_RX_STATS_EXT_DISCARD_COS_ENTRIES \
|
||||
+ BNXT_RX_STATS_EXT_DISCARD_COS_ENTRY(0), \
|
||||
+ BNXT_RX_STATS_EXT_DISCARD_COS_ENTRY(1), \
|
||||
+ BNXT_RX_STATS_EXT_DISCARD_COS_ENTRY(2), \
|
||||
+ BNXT_RX_STATS_EXT_DISCARD_COS_ENTRY(3), \
|
||||
+ BNXT_RX_STATS_EXT_DISCARD_COS_ENTRY(4), \
|
||||
+ BNXT_RX_STATS_EXT_DISCARD_COS_ENTRY(5), \
|
||||
+ BNXT_RX_STATS_EXT_DISCARD_COS_ENTRY(6), \
|
||||
+ BNXT_RX_STATS_EXT_DISCARD_COS_ENTRY(7)
|
||||
+
|
||||
#define BNXT_RX_STATS_PRI_ENTRY(counter, n) \
|
||||
{ BNXT_RX_STATS_EXT_OFFSET(counter##_cos0), \
|
||||
__stringify(counter##_pri##n) }
|
||||
@@ -352,6 +366,7 @@
|
||||
BNXT_RX_STATS_EXT_ENTRY(rx_buffer_passed_threshold),
|
||||
BNXT_RX_STATS_EXT_ENTRY(rx_pcs_symbol_err),
|
||||
BNXT_RX_STATS_EXT_ENTRY(rx_corrected_bits),
|
||||
+ BNXT_RX_STATS_EXT_DISCARD_COS_ENTRIES,
|
||||
};
|
||||
|
||||
static const struct {
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_hsi.h
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_hsi.h 2020-02-06 16:23:12.696540818 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_hsi.h 2020-02-06 16:23:15.728512987 +0100
|
||||
@@ -1,7 +1,8 @@
|
||||
/* Broadcom NetXtreme-C/E network driver.
|
||||
*
|
||||
* Copyright (c) 2014-2016 Broadcom Corporation
|
||||
- * Copyright (c) 2016-2019 Broadcom Limited
|
||||
+ * Copyright (c) 2014-2018 Broadcom Limited
|
||||
+ * Copyright (c) 2018-2019 Broadcom Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -39,15 +40,15 @@
|
||||
#define TLV_TYPE_ROCE_SP_COMMAND 0x3UL
|
||||
#define TLV_TYPE_QUERY_ROCE_CC_GEN1 0x4UL
|
||||
#define TLV_TYPE_MODIFY_ROCE_CC_GEN1 0x5UL
|
||||
-#define TLV_TYPE_ENGINE_CKV_DEVICE_SERIAL_NUMBER 0x8001UL
|
||||
-#define TLV_TYPE_ENGINE_CKV_NONCE 0x8002UL
|
||||
+#define TLV_TYPE_ENGINE_CKV_ALIAS_ECC_PUBLIC_KEY 0x8001UL
|
||||
#define TLV_TYPE_ENGINE_CKV_IV 0x8003UL
|
||||
#define TLV_TYPE_ENGINE_CKV_AUTH_TAG 0x8004UL
|
||||
#define TLV_TYPE_ENGINE_CKV_CIPHERTEXT 0x8005UL
|
||||
#define TLV_TYPE_ENGINE_CKV_ALGORITHMS 0x8006UL
|
||||
-#define TLV_TYPE_ENGINE_CKV_ECC_PUBLIC_KEY 0x8007UL
|
||||
+#define TLV_TYPE_ENGINE_CKV_HOST_ECC_PUBLIC_KEY 0x8007UL
|
||||
#define TLV_TYPE_ENGINE_CKV_ECDSA_SIGNATURE 0x8008UL
|
||||
-#define TLV_TYPE_LAST TLV_TYPE_ENGINE_CKV_ECDSA_SIGNATURE
|
||||
+#define TLV_TYPE_ENGINE_CKV_SRT_ECC_PUBLIC_KEY 0x8009UL
|
||||
+#define TLV_TYPE_LAST TLV_TYPE_ENGINE_CKV_SRT_ECC_PUBLIC_KEY
|
||||
|
||||
|
||||
/* tlv (size:64b/8B) */
|
||||
@@ -267,7 +268,6 @@
|
||||
#define HWRM_CFA_EEM_OP 0x123UL
|
||||
#define HWRM_CFA_ADV_FLOW_MGNT_QCAPS 0x124UL
|
||||
#define HWRM_CFA_TFLIB 0x125UL
|
||||
- #define HWRM_ENGINE_CKV_HELLO 0x12dUL
|
||||
#define HWRM_ENGINE_CKV_STATUS 0x12eUL
|
||||
#define HWRM_ENGINE_CKV_CKEK_ADD 0x12fUL
|
||||
#define HWRM_ENGINE_CKV_CKEK_DELETE 0x130UL
|
||||
@@ -313,6 +313,7 @@
|
||||
#define HWRM_FUNC_BACKING_STORE_QCFG 0x194UL
|
||||
#define HWRM_FUNC_VF_BW_CFG 0x195UL
|
||||
#define HWRM_FUNC_VF_BW_QCFG 0x196UL
|
||||
+ #define HWRM_FUNC_HOST_PF_IDS_QUERY 0x197UL
|
||||
#define HWRM_SELFTEST_QLIST 0x200UL
|
||||
#define HWRM_SELFTEST_EXEC 0x201UL
|
||||
#define HWRM_SELFTEST_IRQ 0x202UL
|
||||
@@ -410,8 +411,8 @@
|
||||
#define HWRM_VERSION_MAJOR 1
|
||||
#define HWRM_VERSION_MINOR 10
|
||||
#define HWRM_VERSION_UPDATE 0
|
||||
-#define HWRM_VERSION_RSVD 69
|
||||
-#define HWRM_VERSION_STR "1.10.0.69"
|
||||
+#define HWRM_VERSION_RSVD 89
|
||||
+#define HWRM_VERSION_STR "1.10.0.89"
|
||||
|
||||
/* hwrm_ver_get_input (size:192b/24B) */
|
||||
struct hwrm_ver_get_input {
|
||||
@@ -624,6 +625,8 @@
|
||||
#define ASYNC_EVENT_CMPL_EVENT_ID_TCP_FLAG_ACTION_CHANGE 0x3aUL
|
||||
#define ASYNC_EVENT_CMPL_EVENT_ID_EEM_FLOW_ACTIVE 0x3bUL
|
||||
#define ASYNC_EVENT_CMPL_EVENT_ID_EEM_CFG_CHANGE 0x3cUL
|
||||
+ #define ASYNC_EVENT_CMPL_EVENT_ID_TFLIB_DEFAULT_VNIC_CHANGE 0x3dUL
|
||||
+ #define ASYNC_EVENT_CMPL_EVENT_ID_TFLIB_LINK_STATUS_CHANGE 0x3eUL
|
||||
#define ASYNC_EVENT_CMPL_EVENT_ID_FW_TRACE_MSG 0xfeUL
|
||||
#define ASYNC_EVENT_CMPL_EVENT_ID_HWRM_ERROR 0xffUL
|
||||
#define ASYNC_EVENT_CMPL_EVENT_ID_LAST ASYNC_EVENT_CMPL_EVENT_ID_HWRM_ERROR
|
||||
@@ -1122,6 +1125,7 @@
|
||||
#define FUNC_QCFG_RESP_FLAGS_MULTI_HOST 0x20UL
|
||||
#define FUNC_QCFG_RESP_FLAGS_TRUSTED_VF 0x40UL
|
||||
#define FUNC_QCFG_RESP_FLAGS_SECURE_MODE_ENABLED 0x80UL
|
||||
+ #define FUNC_QCFG_RESP_FLAGS_PREBOOT_LEGACY_L2_RINGS 0x100UL
|
||||
u8 mac_address[6];
|
||||
__le16 pci_id;
|
||||
__le16 alloc_rsscos_ctx;
|
||||
@@ -1241,6 +1245,7 @@
|
||||
#define FUNC_CFG_REQ_FLAGS_DYNAMIC_TX_RING_ALLOC 0x400000UL
|
||||
#define FUNC_CFG_REQ_FLAGS_NQ_ASSETS_TEST 0x800000UL
|
||||
#define FUNC_CFG_REQ_FLAGS_TRUSTED_VF_DISABLE 0x1000000UL
|
||||
+ #define FUNC_CFG_REQ_FLAGS_PREBOOT_LEGACY_L2_RINGS 0x2000000UL
|
||||
__le32 enables;
|
||||
#define FUNC_CFG_REQ_ENABLES_MTU 0x1UL
|
||||
#define FUNC_CFG_REQ_ENABLES_MRU 0x2UL
|
||||
@@ -2916,7 +2921,7 @@
|
||||
__le64 pfc_pri7_tx_transitions;
|
||||
};
|
||||
|
||||
-/* rx_port_stats_ext (size:2624b/328B) */
|
||||
+/* rx_port_stats_ext (size:3648b/456B) */
|
||||
struct rx_port_stats_ext {
|
||||
__le64 link_down_events;
|
||||
__le64 continuous_pause_events;
|
||||
@@ -2959,6 +2964,22 @@
|
||||
__le64 rx_buffer_passed_threshold;
|
||||
__le64 rx_pcs_symbol_err;
|
||||
__le64 rx_corrected_bits;
|
||||
+ __le64 rx_discard_bytes_cos0;
|
||||
+ __le64 rx_discard_bytes_cos1;
|
||||
+ __le64 rx_discard_bytes_cos2;
|
||||
+ __le64 rx_discard_bytes_cos3;
|
||||
+ __le64 rx_discard_bytes_cos4;
|
||||
+ __le64 rx_discard_bytes_cos5;
|
||||
+ __le64 rx_discard_bytes_cos6;
|
||||
+ __le64 rx_discard_bytes_cos7;
|
||||
+ __le64 rx_discard_packets_cos0;
|
||||
+ __le64 rx_discard_packets_cos1;
|
||||
+ __le64 rx_discard_packets_cos2;
|
||||
+ __le64 rx_discard_packets_cos3;
|
||||
+ __le64 rx_discard_packets_cos4;
|
||||
+ __le64 rx_discard_packets_cos5;
|
||||
+ __le64 rx_discard_packets_cos6;
|
||||
+ __le64 rx_discard_packets_cos7;
|
||||
};
|
||||
|
||||
/* hwrm_port_qstats_ext_input (size:320b/40B) */
|
||||
@@ -6115,6 +6136,21 @@
|
||||
u8 valid;
|
||||
};
|
||||
|
||||
+/* hwrm_cfa_flow_alloc_cmd_err (size:64b/8B) */
|
||||
+struct hwrm_cfa_flow_alloc_cmd_err {
|
||||
+ u8 code;
|
||||
+ #define CFA_FLOW_ALLOC_CMD_ERR_CODE_UNKNOWN 0x0UL
|
||||
+ #define CFA_FLOW_ALLOC_CMD_ERR_CODE_L2_CONTEXT_TCAM 0x1UL
|
||||
+ #define CFA_FLOW_ALLOC_CMD_ERR_CODE_ACTION_RECORD 0x2UL
|
||||
+ #define CFA_FLOW_ALLOC_CMD_ERR_CODE_FLOW_COUNTER 0x3UL
|
||||
+ #define CFA_FLOW_ALLOC_CMD_ERR_CODE_WILD_CARD_TCAM 0x4UL
|
||||
+ #define CFA_FLOW_ALLOC_CMD_ERR_CODE_HASH_COLLISION 0x5UL
|
||||
+ #define CFA_FLOW_ALLOC_CMD_ERR_CODE_KEY_EXISTS 0x6UL
|
||||
+ #define CFA_FLOW_ALLOC_CMD_ERR_CODE_FLOW_CTXT_DB 0x7UL
|
||||
+ #define CFA_FLOW_ALLOC_CMD_ERR_CODE_LAST CFA_FLOW_ALLOC_CMD_ERR_CODE_FLOW_CTXT_DB
|
||||
+ u8 unused_0[7];
|
||||
+};
|
||||
+
|
||||
/* hwrm_cfa_flow_free_input (size:256b/32B) */
|
||||
struct hwrm_cfa_flow_free_input {
|
||||
__le16 req_type;
|
||||
@@ -6305,7 +6341,7 @@
|
||||
__le32 unused_0;
|
||||
};
|
||||
|
||||
-/* hwrm_cfa_eem_qcaps_output (size:256b/32B) */
|
||||
+/* hwrm_cfa_eem_qcaps_output (size:320b/40B) */
|
||||
struct hwrm_cfa_eem_qcaps_output {
|
||||
__le16 error_code;
|
||||
__le16 req_type;
|
||||
@@ -6322,15 +6358,17 @@
|
||||
#define CFA_EEM_QCAPS_RESP_SUPPORTED_KEY1_TABLE 0x2UL
|
||||
#define CFA_EEM_QCAPS_RESP_SUPPORTED_EXTERNAL_RECORD_TABLE 0x4UL
|
||||
#define CFA_EEM_QCAPS_RESP_SUPPORTED_EXTERNAL_FLOW_COUNTERS_TABLE 0x8UL
|
||||
+ #define CFA_EEM_QCAPS_RESP_SUPPORTED_FID_TABLE 0x10UL
|
||||
__le32 max_entries_supported;
|
||||
__le16 key_entry_size;
|
||||
__le16 record_entry_size;
|
||||
__le16 efc_entry_size;
|
||||
- u8 unused_1;
|
||||
+ __le16 fid_entry_size;
|
||||
+ u8 unused_1[7];
|
||||
u8 valid;
|
||||
};
|
||||
|
||||
-/* hwrm_cfa_eem_cfg_input (size:320b/40B) */
|
||||
+/* hwrm_cfa_eem_cfg_input (size:384b/48B) */
|
||||
struct hwrm_cfa_eem_cfg_input {
|
||||
__le16 req_type;
|
||||
__le16 cmpl_ring;
|
||||
@@ -6350,6 +6388,9 @@
|
||||
__le16 key1_ctx_id;
|
||||
__le16 record_ctx_id;
|
||||
__le16 efc_ctx_id;
|
||||
+ __le16 fid_ctx_id;
|
||||
+ __le16 unused_2;
|
||||
+ __le32 unused_3;
|
||||
};
|
||||
|
||||
/* hwrm_cfa_eem_cfg_output (size:128b/16B) */
|
||||
@@ -6375,7 +6416,7 @@
|
||||
__le32 unused_0;
|
||||
};
|
||||
|
||||
-/* hwrm_cfa_eem_qcfg_output (size:192b/24B) */
|
||||
+/* hwrm_cfa_eem_qcfg_output (size:256b/32B) */
|
||||
struct hwrm_cfa_eem_qcfg_output {
|
||||
__le16 error_code;
|
||||
__le16 req_type;
|
||||
@@ -6386,7 +6427,12 @@
|
||||
#define CFA_EEM_QCFG_RESP_FLAGS_PATH_RX 0x2UL
|
||||
#define CFA_EEM_QCFG_RESP_FLAGS_PREFERRED_OFFLOAD 0x4UL
|
||||
__le32 num_entries;
|
||||
- u8 unused_0[7];
|
||||
+ __le16 key0_ctx_id;
|
||||
+ __le16 key1_ctx_id;
|
||||
+ __le16 record_ctx_id;
|
||||
+ __le16 efc_ctx_id;
|
||||
+ __le16 fid_ctx_id;
|
||||
+ u8 unused_2[5];
|
||||
u8 valid;
|
||||
};
|
||||
|
||||
@@ -6567,6 +6613,31 @@
|
||||
__le64 tpa_aborts;
|
||||
};
|
||||
|
||||
+/* ctx_hw_stats_ext (size:1344b/168B) */
|
||||
+struct ctx_hw_stats_ext {
|
||||
+ __le64 rx_ucast_pkts;
|
||||
+ __le64 rx_mcast_pkts;
|
||||
+ __le64 rx_bcast_pkts;
|
||||
+ __le64 rx_discard_pkts;
|
||||
+ __le64 rx_drop_pkts;
|
||||
+ __le64 rx_ucast_bytes;
|
||||
+ __le64 rx_mcast_bytes;
|
||||
+ __le64 rx_bcast_bytes;
|
||||
+ __le64 tx_ucast_pkts;
|
||||
+ __le64 tx_mcast_pkts;
|
||||
+ __le64 tx_bcast_pkts;
|
||||
+ __le64 tx_discard_pkts;
|
||||
+ __le64 tx_drop_pkts;
|
||||
+ __le64 tx_ucast_bytes;
|
||||
+ __le64 tx_mcast_bytes;
|
||||
+ __le64 tx_bcast_bytes;
|
||||
+ __le64 rx_tpa_eligible_pkt;
|
||||
+ __le64 rx_tpa_eligible_bytes;
|
||||
+ __le64 rx_tpa_pkt;
|
||||
+ __le64 rx_tpa_bytes;
|
||||
+ __le64 rx_tpa_errors;
|
||||
+};
|
||||
+
|
||||
/* hwrm_stat_ctx_alloc_input (size:256b/32B) */
|
||||
struct hwrm_stat_ctx_alloc_input {
|
||||
__le16 req_type;
|
||||
@@ -6578,7 +6649,8 @@
|
||||
__le32 update_period_ms;
|
||||
u8 stat_ctx_flags;
|
||||
#define STAT_CTX_ALLOC_REQ_STAT_CTX_FLAGS_ROCE 0x1UL
|
||||
- u8 unused_0[3];
|
||||
+ u8 unused_0;
|
||||
+ __le16 stats_dma_length;
|
||||
};
|
||||
|
||||
/* hwrm_stat_ctx_alloc_output (size:128b/16B) */
|
||||
@@ -7204,7 +7276,9 @@
|
||||
u8 version_hi;
|
||||
u8 version_low;
|
||||
u8 seg_flags;
|
||||
- u8 unused_0[7];
|
||||
+ u8 compress_flags;
|
||||
+ #define SFLAG_COMPRESSED_ZLIB 0x1UL
|
||||
+ u8 unused_0[6];
|
||||
};
|
||||
|
||||
/* hwrm_dbg_coredump_list_input (size:256b/32B) */
|
||||
@@ -7729,6 +7803,9 @@
|
||||
#define NVM_SET_VARIABLE_REQ_FLAGS_ENCRYPT_MODE_AES256 (0x2UL << 1)
|
||||
#define NVM_SET_VARIABLE_REQ_FLAGS_ENCRYPT_MODE_HMAC_SHA1_AUTH (0x3UL << 1)
|
||||
#define NVM_SET_VARIABLE_REQ_FLAGS_ENCRYPT_MODE_LAST NVM_SET_VARIABLE_REQ_FLAGS_ENCRYPT_MODE_HMAC_SHA1_AUTH
|
||||
+ #define NVM_SET_VARIABLE_REQ_FLAGS_FLAGS_UNUSED_0_MASK 0x70UL
|
||||
+ #define NVM_SET_VARIABLE_REQ_FLAGS_FLAGS_UNUSED_0_SFT 4
|
||||
+ #define NVM_SET_VARIABLE_REQ_FLAGS_FACTORY_DEFAULT 0x80UL
|
||||
u8 unused_0;
|
||||
};
|
||||
|
@ -0,0 +1,197 @@
|
||||
From 11d98847abe069f6e5910c6351d1514aebe520d3 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:22:56 -0400
|
||||
Subject: [PATCH 41/96] [netdrv] bnxt_en: Add TPA structure definitions for
|
||||
BCM57500 chips
|
||||
|
||||
Message-id: <71783720a1ef4976b7bbf63cf5f41a12fdca037d.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276462
|
||||
O-Subject: [RHEL-8.2 PATCH 34/78] bnxt_en: Add TPA structure definitions for BCM57500 chips.
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
The new chips have a slightly modified TPA interface for LRO/GRO_HW.
|
||||
Modify the TPA structures so that the same structures can also be
|
||||
used on the new chips.
|
||||
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit 218a8a71d91ab9e52205f4098cf1fe121c98850e)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.h | 67 +++++++++++++++++++++++++++++++
|
||||
1 file changed, 67 insertions(+)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.h
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:14.548523818 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:15.866511720 +0100
|
||||
@@ -113,6 +113,7 @@
|
||||
#define CMP_TYPE_RX_AGG_CMP 18
|
||||
#define CMP_TYPE_RX_L2_TPA_START_CMP 19
|
||||
#define CMP_TYPE_RX_L2_TPA_END_CMP 21
|
||||
+ #define CMP_TYPE_RX_TPA_AGG_CMP 22
|
||||
#define CMP_TYPE_STATUS_CMP 32
|
||||
#define CMP_TYPE_REMOTE_DRIVER_REQ 34
|
||||
#define CMP_TYPE_REMOTE_DRIVER_RESP 36
|
||||
@@ -263,14 +264,21 @@
|
||||
u32 rx_agg_cmp_opaque;
|
||||
__le32 rx_agg_cmp_v;
|
||||
#define RX_AGG_CMP_V (1 << 0)
|
||||
+ #define RX_AGG_CMP_AGG_ID (0xffff << 16)
|
||||
+ #define RX_AGG_CMP_AGG_ID_SHIFT 16
|
||||
__le32 rx_agg_cmp_unused;
|
||||
};
|
||||
|
||||
+#define TPA_AGG_AGG_ID(rx_agg) \
|
||||
+ ((le32_to_cpu((rx_agg)->rx_agg_cmp_v) & \
|
||||
+ RX_AGG_CMP_AGG_ID) >> RX_AGG_CMP_AGG_ID_SHIFT)
|
||||
+
|
||||
struct rx_tpa_start_cmp {
|
||||
__le32 rx_tpa_start_cmp_len_flags_type;
|
||||
#define RX_TPA_START_CMP_TYPE (0x3f << 0)
|
||||
#define RX_TPA_START_CMP_FLAGS (0x3ff << 6)
|
||||
#define RX_TPA_START_CMP_FLAGS_SHIFT 6
|
||||
+ #define RX_TPA_START_CMP_FLAGS_ERROR (0x1 << 6)
|
||||
#define RX_TPA_START_CMP_FLAGS_PLACEMENT (0x7 << 7)
|
||||
#define RX_TPA_START_CMP_FLAGS_PLACEMENT_SHIFT 7
|
||||
#define RX_TPA_START_CMP_FLAGS_PLACEMENT_JUMBO (0x1 << 7)
|
||||
@@ -278,6 +286,7 @@
|
||||
#define RX_TPA_START_CMP_FLAGS_PLACEMENT_GRO_JUMBO (0x5 << 7)
|
||||
#define RX_TPA_START_CMP_FLAGS_PLACEMENT_GRO_HDS (0x6 << 7)
|
||||
#define RX_TPA_START_CMP_FLAGS_RSS_VALID (0x1 << 10)
|
||||
+ #define RX_TPA_START_CMP_FLAGS_TIMESTAMP (0x1 << 11)
|
||||
#define RX_TPA_START_CMP_FLAGS_ITYPES (0xf << 12)
|
||||
#define RX_TPA_START_CMP_FLAGS_ITYPES_SHIFT 12
|
||||
#define RX_TPA_START_CMP_FLAGS_ITYPE_TCP (0x2 << 12)
|
||||
@@ -291,6 +300,8 @@
|
||||
#define RX_TPA_START_CMP_RSS_HASH_TYPE_SHIFT 9
|
||||
#define RX_TPA_START_CMP_AGG_ID (0x7f << 25)
|
||||
#define RX_TPA_START_CMP_AGG_ID_SHIFT 25
|
||||
+ #define RX_TPA_START_CMP_AGG_ID_P5 (0xffff << 16)
|
||||
+ #define RX_TPA_START_CMP_AGG_ID_SHIFT_P5 16
|
||||
|
||||
__le32 rx_tpa_start_cmp_rss_hash;
|
||||
};
|
||||
@@ -308,6 +319,14 @@
|
||||
((le32_to_cpu((rx_tpa_start)->rx_tpa_start_cmp_misc_v1) & \
|
||||
RX_TPA_START_CMP_AGG_ID) >> RX_TPA_START_CMP_AGG_ID_SHIFT)
|
||||
|
||||
+#define TPA_START_AGG_ID_P5(rx_tpa_start) \
|
||||
+ ((le32_to_cpu((rx_tpa_start)->rx_tpa_start_cmp_misc_v1) & \
|
||||
+ RX_TPA_START_CMP_AGG_ID_P5) >> RX_TPA_START_CMP_AGG_ID_SHIFT_P5)
|
||||
+
|
||||
+#define TPA_START_ERROR(rx_tpa_start) \
|
||||
+ ((rx_tpa_start)->rx_tpa_start_cmp_len_flags_type & \
|
||||
+ cpu_to_le32(RX_TPA_START_CMP_FLAGS_ERROR))
|
||||
+
|
||||
struct rx_tpa_start_cmp_ext {
|
||||
__le32 rx_tpa_start_cmp_flags2;
|
||||
#define RX_TPA_START_CMP_FLAGS2_IP_CS_CALC (0x1 << 0)
|
||||
@@ -315,10 +334,20 @@
|
||||
#define RX_TPA_START_CMP_FLAGS2_T_IP_CS_CALC (0x1 << 2)
|
||||
#define RX_TPA_START_CMP_FLAGS2_T_L4_CS_CALC (0x1 << 3)
|
||||
#define RX_TPA_START_CMP_FLAGS2_IP_TYPE (0x1 << 8)
|
||||
+ #define RX_TPA_START_CMP_FLAGS2_CSUM_CMPL_VALID (0x1 << 9)
|
||||
+ #define RX_TPA_START_CMP_FLAGS2_EXT_META_FORMAT (0x3 << 10)
|
||||
+ #define RX_TPA_START_CMP_FLAGS2_EXT_META_FORMAT_SHIFT 10
|
||||
+ #define RX_TPA_START_CMP_FLAGS2_CSUM_CMPL (0xffff << 16)
|
||||
+ #define RX_TPA_START_CMP_FLAGS2_CSUM_CMPL_SHIFT 16
|
||||
|
||||
__le32 rx_tpa_start_cmp_metadata;
|
||||
__le32 rx_tpa_start_cmp_cfa_code_v2;
|
||||
#define RX_TPA_START_CMP_V2 (0x1 << 0)
|
||||
+ #define RX_TPA_START_CMP_ERRORS_BUFFER_ERROR_MASK (0x7 << 1)
|
||||
+ #define RX_TPA_START_CMP_ERRORS_BUFFER_ERROR_SHIFT 1
|
||||
+ #define RX_TPA_START_CMP_ERRORS_BUFFER_ERROR_NO_BUFFER (0x0 << 1)
|
||||
+ #define RX_TPA_START_CMP_ERRORS_BUFFER_ERROR_BAD_FORMAT (0x3 << 1)
|
||||
+ #define RX_TPA_START_CMP_ERRORS_BUFFER_ERROR_FLUSH (0x5 << 1)
|
||||
#define RX_TPA_START_CMP_CFA_CODE (0xffff << 16)
|
||||
#define RX_TPA_START_CMPL_CFA_CODE_SHIFT 16
|
||||
__le32 rx_tpa_start_cmp_hdr_info;
|
||||
@@ -332,6 +361,11 @@
|
||||
(!!((rx_tpa_start)->rx_tpa_start_cmp_flags2 & \
|
||||
cpu_to_le32(RX_TPA_START_CMP_FLAGS2_IP_TYPE)))
|
||||
|
||||
+#define TPA_START_ERROR_CODE(rx_tpa_start) \
|
||||
+ ((le32_to_cpu((rx_tpa_start)->rx_tpa_start_cmp_cfa_code_v2) & \
|
||||
+ RX_TPA_START_CMP_ERRORS_BUFFER_ERROR_MASK) >> \
|
||||
+ RX_TPA_START_CMP_ERRORS_BUFFER_ERROR_SHIFT)
|
||||
+
|
||||
struct rx_tpa_end_cmp {
|
||||
__le32 rx_tpa_end_cmp_len_flags_type;
|
||||
#define RX_TPA_END_CMP_TYPE (0x3f << 0)
|
||||
@@ -361,6 +395,8 @@
|
||||
#define RX_TPA_END_CMP_PAYLOAD_OFFSET_SHIFT 16
|
||||
#define RX_TPA_END_CMP_AGG_ID (0x7f << 25)
|
||||
#define RX_TPA_END_CMP_AGG_ID_SHIFT 25
|
||||
+ #define RX_TPA_END_CMP_AGG_ID_P5 (0xffff << 16)
|
||||
+ #define RX_TPA_END_CMP_AGG_ID_SHIFT_P5 16
|
||||
|
||||
__le32 rx_tpa_end_cmp_tsdelta;
|
||||
#define RX_TPA_END_GRO_TS (0x1 << 31)
|
||||
@@ -370,6 +406,18 @@
|
||||
((le32_to_cpu((rx_tpa_end)->rx_tpa_end_cmp_misc_v1) & \
|
||||
RX_TPA_END_CMP_AGG_ID) >> RX_TPA_END_CMP_AGG_ID_SHIFT)
|
||||
|
||||
+#define TPA_END_AGG_ID_P5(rx_tpa_end) \
|
||||
+ ((le32_to_cpu((rx_tpa_end)->rx_tpa_end_cmp_misc_v1) & \
|
||||
+ RX_TPA_END_CMP_AGG_ID_P5) >> RX_TPA_END_CMP_AGG_ID_SHIFT_P5)
|
||||
+
|
||||
+#define TPA_END_PAYLOAD_OFF(rx_tpa_end) \
|
||||
+ ((le32_to_cpu((rx_tpa_end)->rx_tpa_end_cmp_misc_v1) & \
|
||||
+ RX_TPA_END_CMP_PAYLOAD_OFFSET) >> RX_TPA_END_CMP_PAYLOAD_OFFSET_SHIFT)
|
||||
+
|
||||
+#define TPA_END_AGG_BUFS(rx_tpa_end) \
|
||||
+ ((le32_to_cpu((rx_tpa_end)->rx_tpa_end_cmp_misc_v1) & \
|
||||
+ RX_TPA_END_CMP_AGG_BUFS) >> RX_TPA_END_CMP_AGG_BUFS_SHIFT)
|
||||
+
|
||||
#define TPA_END_TPA_SEGS(rx_tpa_end) \
|
||||
((le32_to_cpu((rx_tpa_end)->rx_tpa_end_cmp_misc_v1) & \
|
||||
RX_TPA_END_CMP_TPA_SEGS) >> RX_TPA_END_CMP_TPA_SEGS_SHIFT)
|
||||
@@ -389,6 +437,10 @@
|
||||
struct rx_tpa_end_cmp_ext {
|
||||
__le32 rx_tpa_end_cmp_dup_acks;
|
||||
#define RX_TPA_END_CMP_TPA_DUP_ACKS (0xf << 0)
|
||||
+ #define RX_TPA_END_CMP_PAYLOAD_OFFSET_P5 (0xff << 16)
|
||||
+ #define RX_TPA_END_CMP_PAYLOAD_OFFSET_SHIFT_P5 16
|
||||
+ #define RX_TPA_END_CMP_AGG_BUFS_P5 (0xff << 24)
|
||||
+ #define RX_TPA_END_CMP_AGG_BUFS_SHIFT_P5 24
|
||||
|
||||
__le32 rx_tpa_end_cmp_seg_len;
|
||||
#define RX_TPA_END_CMP_TPA_SEG_LEN (0xffff << 0)
|
||||
@@ -396,7 +448,13 @@
|
||||
__le32 rx_tpa_end_cmp_errors_v2;
|
||||
#define RX_TPA_END_CMP_V2 (0x1 << 0)
|
||||
#define RX_TPA_END_CMP_ERRORS (0x3 << 1)
|
||||
+ #define RX_TPA_END_CMP_ERRORS_P5 (0x7 << 1)
|
||||
#define RX_TPA_END_CMPL_ERRORS_SHIFT 1
|
||||
+ #define RX_TPA_END_CMP_ERRORS_BUFFER_ERROR_NO_BUFFER (0x0 << 1)
|
||||
+ #define RX_TPA_END_CMP_ERRORS_BUFFER_ERROR_NOT_ON_CHIP (0x2 << 1)
|
||||
+ #define RX_TPA_END_CMP_ERRORS_BUFFER_ERROR_BAD_FORMAT (0x3 << 1)
|
||||
+ #define RX_TPA_END_CMP_ERRORS_BUFFER_ERROR_RSV_ERROR (0x4 << 1)
|
||||
+ #define RX_TPA_END_CMP_ERRORS_BUFFER_ERROR_FLUSH (0x5 << 1)
|
||||
|
||||
u32 rx_tpa_end_cmp_start_opaque;
|
||||
};
|
||||
@@ -405,6 +463,15 @@
|
||||
((rx_tpa_end_ext)->rx_tpa_end_cmp_errors_v2 & \
|
||||
cpu_to_le32(RX_TPA_END_CMP_ERRORS))
|
||||
|
||||
+#define TPA_END_PAYLOAD_OFF_P5(rx_tpa_end_ext) \
|
||||
+ ((le32_to_cpu((rx_tpa_end_ext)->rx_tpa_end_cmp_dup_acks) & \
|
||||
+ RX_TPA_END_CMP_PAYLOAD_OFFSET_P5) >> \
|
||||
+ RX_TPA_END_CMP_PAYLOAD_OFFSET_SHIFT_P5)
|
||||
+
|
||||
+#define TPA_END_AGG_BUFS_P5(rx_tpa_end_ext) \
|
||||
+ ((le32_to_cpu((rx_tpa_end_ext)->rx_tpa_end_cmp_dup_acks) & \
|
||||
+ RX_TPA_END_CMP_AGG_BUFS_P5) >> RX_TPA_END_CMP_AGG_BUFS_SHIFT_P5)
|
||||
+
|
||||
struct nqe_cn {
|
||||
__le16 type;
|
||||
#define NQ_CN_TYPE_MASK 0x3fUL
|
@ -0,0 +1,345 @@
|
||||
From 746679f876254905a83b0c7ad192d4cc9c149315 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:22:57 -0400
|
||||
Subject: [PATCH 42/96] [netdrv] bnxt_en: Refactor TPA logic
|
||||
|
||||
Message-id: <b6a806b7d4b8e826e928a731708ab23ed16a4e2d.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276460
|
||||
O-Subject: [RHEL-8.2 PATCH 35/78] bnxt_en: Refactor TPA logic.
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
Refactor the TPA logic slightly, so that the code can be more easily
|
||||
extended to support TPA on the new 57500 chips. In particular, the
|
||||
logic to get the next aggregation completion is refactored into a
|
||||
new function bnxt_get_agg() so that this operation is made more
|
||||
generalized. This operation will be different on the new chip in TPA
|
||||
mode. The logic to recycle the aggregation buffers has a new start
|
||||
index parameter added for the same purpose.
|
||||
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit 4a228a3a5e58e5c05c6ffb5b430e5cb936865a8b)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 117 ++++++++++++++++++------------
|
||||
1 file changed, 69 insertions(+), 48 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:15.092518825 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:15.989510591 +0100
|
||||
@@ -830,8 +830,20 @@
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static void bnxt_reuse_rx_agg_bufs(struct bnxt_cp_ring_info *cpr, u16 cp_cons,
|
||||
- u32 agg_bufs)
|
||||
+static struct rx_agg_cmp *bnxt_get_agg(struct bnxt *bp,
|
||||
+ struct bnxt_cp_ring_info *cpr,
|
||||
+ u16 cp_cons, u16 curr)
|
||||
+{
|
||||
+ struct rx_agg_cmp *agg;
|
||||
+
|
||||
+ cp_cons = RING_CMP(ADV_RAW_CMP(cp_cons, curr));
|
||||
+ agg = (struct rx_agg_cmp *)
|
||||
+ &cpr->cp_desc_ring[CP_RING(cp_cons)][CP_IDX(cp_cons)];
|
||||
+ return agg;
|
||||
+}
|
||||
+
|
||||
+static void bnxt_reuse_rx_agg_bufs(struct bnxt_cp_ring_info *cpr, u16 idx,
|
||||
+ u16 start, u32 agg_bufs, bool tpa)
|
||||
{
|
||||
struct bnxt_napi *bnapi = cpr->bnapi;
|
||||
struct bnxt *bp = bnapi->bp;
|
||||
@@ -847,8 +859,7 @@
|
||||
struct rx_bd *prod_bd;
|
||||
struct page *page;
|
||||
|
||||
- agg = (struct rx_agg_cmp *)
|
||||
- &cpr->cp_desc_ring[CP_RING(cp_cons)][CP_IDX(cp_cons)];
|
||||
+ agg = bnxt_get_agg(bp, cpr, idx, start + i);
|
||||
cons = agg->rx_agg_cmp_opaque;
|
||||
__clear_bit(cons, rxr->rx_agg_bmap);
|
||||
|
||||
@@ -876,7 +887,6 @@
|
||||
|
||||
prod = NEXT_RX_AGG(prod);
|
||||
sw_prod = NEXT_RX_AGG(sw_prod);
|
||||
- cp_cons = NEXT_CMP(cp_cons);
|
||||
}
|
||||
rxr->rx_agg_prod = prod;
|
||||
rxr->rx_sw_agg_prod = sw_prod;
|
||||
@@ -959,8 +969,8 @@
|
||||
|
||||
static struct sk_buff *bnxt_rx_pages(struct bnxt *bp,
|
||||
struct bnxt_cp_ring_info *cpr,
|
||||
- struct sk_buff *skb, u16 cp_cons,
|
||||
- u32 agg_bufs)
|
||||
+ struct sk_buff *skb, u16 idx,
|
||||
+ u32 agg_bufs, bool tpa)
|
||||
{
|
||||
struct bnxt_napi *bnapi = cpr->bnapi;
|
||||
struct pci_dev *pdev = bp->pdev;
|
||||
@@ -975,8 +985,7 @@
|
||||
struct page *page;
|
||||
dma_addr_t mapping;
|
||||
|
||||
- agg = (struct rx_agg_cmp *)
|
||||
- &cpr->cp_desc_ring[CP_RING(cp_cons)][CP_IDX(cp_cons)];
|
||||
+ agg = bnxt_get_agg(bp, cpr, idx, i);
|
||||
cons = agg->rx_agg_cmp_opaque;
|
||||
frag_len = (le32_to_cpu(agg->rx_agg_cmp_len_flags_type) &
|
||||
RX_AGG_CMP_LEN) >> RX_AGG_CMP_LEN_SHIFT;
|
||||
@@ -1010,7 +1019,7 @@
|
||||
* allocated already.
|
||||
*/
|
||||
rxr->rx_agg_prod = prod;
|
||||
- bnxt_reuse_rx_agg_bufs(cpr, cp_cons, agg_bufs - i);
|
||||
+ bnxt_reuse_rx_agg_bufs(cpr, idx, i, agg_bufs - i, tpa);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -1023,7 +1032,6 @@
|
||||
skb->truesize += PAGE_SIZE;
|
||||
|
||||
prod = NEXT_RX_AGG(prod);
|
||||
- cp_cons = NEXT_CMP(cp_cons);
|
||||
}
|
||||
rxr->rx_agg_prod = prod;
|
||||
return skb;
|
||||
@@ -1083,9 +1091,7 @@
|
||||
} else if (cmp_type == CMP_TYPE_RX_L2_TPA_END_CMP) {
|
||||
struct rx_tpa_end_cmp *tpa_end = cmp;
|
||||
|
||||
- agg_bufs = (le32_to_cpu(tpa_end->rx_tpa_end_cmp_misc_v1) &
|
||||
- RX_TPA_END_CMP_AGG_BUFS) >>
|
||||
- RX_TPA_END_CMP_AGG_BUFS_SHIFT;
|
||||
+ agg_bufs = TPA_END_AGG_BUFS(tpa_end);
|
||||
}
|
||||
|
||||
if (agg_bufs) {
|
||||
@@ -1197,11 +1203,10 @@
|
||||
cons_rx_buf->data = NULL;
|
||||
}
|
||||
|
||||
-static void bnxt_abort_tpa(struct bnxt_cp_ring_info *cpr, u16 cp_cons,
|
||||
- u32 agg_bufs)
|
||||
+static void bnxt_abort_tpa(struct bnxt_cp_ring_info *cpr, u16 idx, u32 agg_bufs)
|
||||
{
|
||||
if (agg_bufs)
|
||||
- bnxt_reuse_rx_agg_bufs(cpr, cp_cons, agg_bufs);
|
||||
+ bnxt_reuse_rx_agg_bufs(cpr, idx, 0, agg_bufs, true);
|
||||
}
|
||||
|
||||
static struct sk_buff *bnxt_gro_func_5731x(struct bnxt_tpa_info *tpa_info,
|
||||
@@ -1373,9 +1378,7 @@
|
||||
skb_shinfo(skb)->gso_size =
|
||||
le32_to_cpu(tpa_end1->rx_tpa_end_cmp_seg_len);
|
||||
skb_shinfo(skb)->gso_type = tpa_info->gso_type;
|
||||
- payload_off = (le32_to_cpu(tpa_end->rx_tpa_end_cmp_misc_v1) &
|
||||
- RX_TPA_END_CMP_PAYLOAD_OFFSET) >>
|
||||
- RX_TPA_END_CMP_PAYLOAD_OFFSET_SHIFT;
|
||||
+ payload_off = TPA_END_PAYLOAD_OFF(tpa_end);
|
||||
skb = bp->gro_func(tpa_info, payload_off, TPA_END_GRO_TS(tpa_end), skb);
|
||||
if (likely(skb))
|
||||
tcp_gro_complete(skb);
|
||||
@@ -1405,11 +1408,11 @@
|
||||
struct bnxt_rx_ring_info *rxr = bnapi->rx_ring;
|
||||
u8 agg_id = TPA_END_AGG_ID(tpa_end);
|
||||
u8 *data_ptr, agg_bufs;
|
||||
- u16 cp_cons = RING_CMP(*raw_cons);
|
||||
unsigned int len;
|
||||
struct bnxt_tpa_info *tpa_info;
|
||||
dma_addr_t mapping;
|
||||
struct sk_buff *skb;
|
||||
+ u16 idx = 0;
|
||||
void *data;
|
||||
|
||||
if (unlikely(bnapi->in_reset)) {
|
||||
@@ -1427,19 +1430,19 @@
|
||||
len = tpa_info->len;
|
||||
mapping = tpa_info->mapping;
|
||||
|
||||
- agg_bufs = (le32_to_cpu(tpa_end->rx_tpa_end_cmp_misc_v1) &
|
||||
- RX_TPA_END_CMP_AGG_BUFS) >> RX_TPA_END_CMP_AGG_BUFS_SHIFT;
|
||||
+ agg_bufs = TPA_END_AGG_BUFS(tpa_end);
|
||||
|
||||
if (agg_bufs) {
|
||||
+ idx = RING_CMP(*raw_cons);
|
||||
if (!bnxt_agg_bufs_valid(bp, cpr, agg_bufs, raw_cons))
|
||||
return ERR_PTR(-EBUSY);
|
||||
|
||||
*event |= BNXT_AGG_EVENT;
|
||||
- cp_cons = NEXT_CMP(cp_cons);
|
||||
+ idx = NEXT_CMP(idx);
|
||||
}
|
||||
|
||||
if (unlikely(agg_bufs > MAX_SKB_FRAGS || TPA_END_ERRORS(tpa_end1))) {
|
||||
- bnxt_abort_tpa(cpr, cp_cons, agg_bufs);
|
||||
+ bnxt_abort_tpa(cpr, idx, agg_bufs);
|
||||
if (agg_bufs > MAX_SKB_FRAGS)
|
||||
netdev_warn(bp->dev, "TPA frags %d exceeded MAX_SKB_FRAGS %d\n",
|
||||
agg_bufs, (int)MAX_SKB_FRAGS);
|
||||
@@ -1449,7 +1452,7 @@
|
||||
if (len <= bp->rx_copy_thresh) {
|
||||
skb = bnxt_copy_skb(bnapi, data_ptr, len, mapping);
|
||||
if (!skb) {
|
||||
- bnxt_abort_tpa(cpr, cp_cons, agg_bufs);
|
||||
+ bnxt_abort_tpa(cpr, idx, agg_bufs);
|
||||
return NULL;
|
||||
}
|
||||
} else {
|
||||
@@ -1458,7 +1461,7 @@
|
||||
|
||||
new_data = __bnxt_alloc_rx_data(bp, &new_mapping, GFP_ATOMIC);
|
||||
if (!new_data) {
|
||||
- bnxt_abort_tpa(cpr, cp_cons, agg_bufs);
|
||||
+ bnxt_abort_tpa(cpr, idx, agg_bufs);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -1473,7 +1476,7 @@
|
||||
|
||||
if (!skb) {
|
||||
kfree(data);
|
||||
- bnxt_abort_tpa(cpr, cp_cons, agg_bufs);
|
||||
+ bnxt_abort_tpa(cpr, idx, agg_bufs);
|
||||
return NULL;
|
||||
}
|
||||
skb_reserve(skb, bp->rx_offset);
|
||||
@@ -1481,7 +1484,7 @@
|
||||
}
|
||||
|
||||
if (agg_bufs) {
|
||||
- skb = bnxt_rx_pages(bp, cpr, skb, cp_cons, agg_bufs);
|
||||
+ skb = bnxt_rx_pages(bp, cpr, skb, idx, agg_bufs, true);
|
||||
if (!skb) {
|
||||
/* Page reuse already handled by bnxt_rx_pages(). */
|
||||
return NULL;
|
||||
@@ -1625,7 +1628,8 @@
|
||||
|
||||
bnxt_reuse_rx_data(rxr, cons, data);
|
||||
if (agg_bufs)
|
||||
- bnxt_reuse_rx_agg_bufs(cpr, cp_cons, agg_bufs);
|
||||
+ bnxt_reuse_rx_agg_bufs(cpr, cp_cons, 0, agg_bufs,
|
||||
+ false);
|
||||
|
||||
rc = -EIO;
|
||||
if (rx_err & RX_CMPL_ERRORS_BUFFER_ERROR_MASK) {
|
||||
@@ -1648,7 +1652,8 @@
|
||||
bnxt_reuse_rx_data(rxr, cons, data);
|
||||
if (!skb) {
|
||||
if (agg_bufs)
|
||||
- bnxt_reuse_rx_agg_bufs(cpr, cp_cons, agg_bufs);
|
||||
+ bnxt_reuse_rx_agg_bufs(cpr, cp_cons, 0,
|
||||
+ agg_bufs, false);
|
||||
rc = -ENOMEM;
|
||||
goto next_rx;
|
||||
}
|
||||
@@ -1668,7 +1673,7 @@
|
||||
}
|
||||
|
||||
if (agg_bufs) {
|
||||
- skb = bnxt_rx_pages(bp, cpr, skb, cp_cons, agg_bufs);
|
||||
+ skb = bnxt_rx_pages(bp, cpr, skb, cp_cons, agg_bufs, false);
|
||||
if (!skb) {
|
||||
rc = -ENOMEM;
|
||||
goto next_rx;
|
||||
@@ -2486,6 +2491,33 @@
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static void bnxt_free_tpa_info(struct bnxt *bp)
|
||||
+{
|
||||
+ int i;
|
||||
+
|
||||
+ for (i = 0; i < bp->rx_nr_rings; i++) {
|
||||
+ struct bnxt_rx_ring_info *rxr = &bp->rx_ring[i];
|
||||
+
|
||||
+ kfree(rxr->rx_tpa);
|
||||
+ rxr->rx_tpa = NULL;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static int bnxt_alloc_tpa_info(struct bnxt *bp)
|
||||
+{
|
||||
+ int i;
|
||||
+
|
||||
+ for (i = 0; i < bp->rx_nr_rings; i++) {
|
||||
+ struct bnxt_rx_ring_info *rxr = &bp->rx_ring[i];
|
||||
+
|
||||
+ rxr->rx_tpa = kcalloc(MAX_TPA, sizeof(struct bnxt_tpa_info),
|
||||
+ GFP_KERNEL);
|
||||
+ if (!rxr->rx_tpa)
|
||||
+ return -ENOMEM;
|
||||
+ }
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static void bnxt_free_rx_rings(struct bnxt *bp)
|
||||
{
|
||||
int i;
|
||||
@@ -2493,6 +2525,7 @@
|
||||
if (!bp->rx_ring)
|
||||
return;
|
||||
|
||||
+ bnxt_free_tpa_info(bp);
|
||||
for (i = 0; i < bp->rx_nr_rings; i++) {
|
||||
struct bnxt_rx_ring_info *rxr = &bp->rx_ring[i];
|
||||
struct bnxt_ring_struct *ring;
|
||||
@@ -2506,9 +2539,6 @@
|
||||
page_pool_destroy(rxr->page_pool);
|
||||
rxr->page_pool = NULL;
|
||||
|
||||
- kfree(rxr->rx_tpa);
|
||||
- rxr->rx_tpa = NULL;
|
||||
-
|
||||
kfree(rxr->rx_agg_bmap);
|
||||
rxr->rx_agg_bmap = NULL;
|
||||
|
||||
@@ -2542,7 +2572,7 @@
|
||||
|
||||
static int bnxt_alloc_rx_rings(struct bnxt *bp)
|
||||
{
|
||||
- int i, rc, agg_rings = 0, tpa_rings = 0;
|
||||
+ int i, rc = 0, agg_rings = 0;
|
||||
|
||||
if (!bp->rx_ring)
|
||||
return -ENOMEM;
|
||||
@@ -2550,9 +2580,6 @@
|
||||
if (bp->flags & BNXT_FLAG_AGG_RINGS)
|
||||
agg_rings = 1;
|
||||
|
||||
- if (bp->flags & BNXT_FLAG_TPA)
|
||||
- tpa_rings = 1;
|
||||
-
|
||||
for (i = 0; i < bp->rx_nr_rings; i++) {
|
||||
struct bnxt_rx_ring_info *rxr = &bp->rx_ring[i];
|
||||
struct bnxt_ring_struct *ring;
|
||||
@@ -2594,17 +2621,11 @@
|
||||
rxr->rx_agg_bmap = kzalloc(mem_size, GFP_KERNEL);
|
||||
if (!rxr->rx_agg_bmap)
|
||||
return -ENOMEM;
|
||||
-
|
||||
- if (tpa_rings) {
|
||||
- rxr->rx_tpa = kcalloc(MAX_TPA,
|
||||
- sizeof(struct bnxt_tpa_info),
|
||||
- GFP_KERNEL);
|
||||
- if (!rxr->rx_tpa)
|
||||
- return -ENOMEM;
|
||||
- }
|
||||
}
|
||||
}
|
||||
- return 0;
|
||||
+ if (bp->flags & BNXT_FLAG_TPA)
|
||||
+ rc = bnxt_alloc_tpa_info(bp);
|
||||
+ return rc;
|
||||
}
|
||||
|
||||
static void bnxt_free_tx_rings(struct bnxt *bp)
|
@ -0,0 +1,170 @@
|
||||
From 7cff5d1939a2a4b5325abda7aa5bddb7757e0e87 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:22:58 -0400
|
||||
Subject: [PATCH 43/96] [netdrv] bnxt_en: Expand bnxt_tpa_info struct to
|
||||
support 57500 chips
|
||||
|
||||
Message-id: <d5bcddccd785fcb964e019da190c04ee24ccdc8f.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276471
|
||||
O-Subject: [RHEL-8.2 PATCH 36/78] bnxt_en: Expand bnxt_tpa_info struct to support 57500 chips.
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
Add an aggregation array to bnxt_tpa_info struct to keep track of the
|
||||
aggregation completions. The aggregation completions are not
|
||||
completed at the TPA_END completion on 57500 chips so we need to
|
||||
keep track of them. The array is only allocated on the new chips
|
||||
when required. An agg_count field is also added to keep track of the
|
||||
number of these completions.
|
||||
|
||||
The maximum concurrent TPA is now discovered from firmware instead of
|
||||
the hardcoded 64. Add a new bp->max_tpa to keep track of maximum
|
||||
configured TPA.
|
||||
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit 79632e9ba38671215fb193346ef6fb8db582744d)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 41 ++++++++++++++++++++++++++-----
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.h | 6 +++++
|
||||
2 files changed, 41 insertions(+), 6 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:15.989510591 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:16.115509434 +0100
|
||||
@@ -2336,7 +2336,7 @@
|
||||
int j;
|
||||
|
||||
if (rxr->rx_tpa) {
|
||||
- for (j = 0; j < MAX_TPA; j++) {
|
||||
+ for (j = 0; j < bp->max_tpa; j++) {
|
||||
struct bnxt_tpa_info *tpa_info =
|
||||
&rxr->rx_tpa[j];
|
||||
u8 *data = tpa_info->data;
|
||||
@@ -2498,6 +2498,10 @@
|
||||
for (i = 0; i < bp->rx_nr_rings; i++) {
|
||||
struct bnxt_rx_ring_info *rxr = &bp->rx_ring[i];
|
||||
|
||||
+ if (rxr->rx_tpa) {
|
||||
+ kfree(rxr->rx_tpa[0].agg_arr);
|
||||
+ rxr->rx_tpa[0].agg_arr = NULL;
|
||||
+ }
|
||||
kfree(rxr->rx_tpa);
|
||||
rxr->rx_tpa = NULL;
|
||||
}
|
||||
@@ -2505,15 +2509,33 @@
|
||||
|
||||
static int bnxt_alloc_tpa_info(struct bnxt *bp)
|
||||
{
|
||||
- int i;
|
||||
+ int i, j, total_aggs = 0;
|
||||
+
|
||||
+ bp->max_tpa = MAX_TPA;
|
||||
+ if (bp->flags & BNXT_FLAG_CHIP_P5) {
|
||||
+ if (!bp->max_tpa_v2)
|
||||
+ return 0;
|
||||
+ bp->max_tpa = max_t(u16, bp->max_tpa_v2, MAX_TPA_P5);
|
||||
+ total_aggs = bp->max_tpa * MAX_SKB_FRAGS;
|
||||
+ }
|
||||
|
||||
for (i = 0; i < bp->rx_nr_rings; i++) {
|
||||
struct bnxt_rx_ring_info *rxr = &bp->rx_ring[i];
|
||||
+ struct rx_agg_cmp *agg;
|
||||
|
||||
- rxr->rx_tpa = kcalloc(MAX_TPA, sizeof(struct bnxt_tpa_info),
|
||||
+ rxr->rx_tpa = kcalloc(bp->max_tpa, sizeof(struct bnxt_tpa_info),
|
||||
GFP_KERNEL);
|
||||
if (!rxr->rx_tpa)
|
||||
return -ENOMEM;
|
||||
+
|
||||
+ if (!(bp->flags & BNXT_FLAG_CHIP_P5))
|
||||
+ continue;
|
||||
+ agg = kcalloc(total_aggs, sizeof(*agg), GFP_KERNEL);
|
||||
+ rxr->rx_tpa[0].agg_arr = agg;
|
||||
+ if (!agg)
|
||||
+ return -ENOMEM;
|
||||
+ for (j = 1; j < bp->max_tpa; j++)
|
||||
+ rxr->rx_tpa[j].agg_arr = agg + j * MAX_SKB_FRAGS;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -2979,7 +3001,7 @@
|
||||
u8 *data;
|
||||
dma_addr_t mapping;
|
||||
|
||||
- for (i = 0; i < MAX_TPA; i++) {
|
||||
+ for (i = 0; i < bp->max_tpa; i++) {
|
||||
data = __bnxt_alloc_rx_data(bp, &mapping,
|
||||
GFP_KERNEL);
|
||||
if (!data)
|
||||
@@ -4440,6 +4462,7 @@
|
||||
static int bnxt_hwrm_vnic_set_tpa(struct bnxt *bp, u16 vnic_id, u32 tpa_flags)
|
||||
{
|
||||
struct bnxt_vnic_info *vnic = &bp->vnic_info[vnic_id];
|
||||
+ u16 max_aggs = VNIC_TPA_CFG_REQ_MAX_AGGS_MAX;
|
||||
struct hwrm_vnic_tpa_cfg_input req = {0};
|
||||
|
||||
if (vnic->fw_vnic_id == INVALID_HW_RING_ID)
|
||||
@@ -4479,9 +4502,14 @@
|
||||
nsegs = (MAX_SKB_FRAGS - n) / n;
|
||||
}
|
||||
|
||||
- segs = ilog2(nsegs);
|
||||
+ if (bp->flags & BNXT_FLAG_CHIP_P5) {
|
||||
+ segs = MAX_TPA_SEGS_P5;
|
||||
+ max_aggs = bp->max_tpa;
|
||||
+ } else {
|
||||
+ segs = ilog2(nsegs);
|
||||
+ }
|
||||
req.max_agg_segs = cpu_to_le16(segs);
|
||||
- req.max_aggs = cpu_to_le16(VNIC_TPA_CFG_REQ_MAX_AGGS_MAX);
|
||||
+ req.max_aggs = cpu_to_le16(max_aggs);
|
||||
|
||||
req.min_agg_len = cpu_to_le32(512);
|
||||
}
|
||||
@@ -4841,6 +4869,7 @@
|
||||
if (flags &
|
||||
VNIC_QCAPS_RESP_FLAGS_ROCE_MIRRORING_CAPABLE_VNIC_CAP)
|
||||
bp->flags |= BNXT_FLAG_ROCE_MIRROR_CAP;
|
||||
+ bp->max_tpa_v2 = le16_to_cpu(resp->max_aggs_supported);
|
||||
}
|
||||
mutex_unlock(&bp->hwrm_cmd_lock);
|
||||
return rc;
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.h
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:15.866511720 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:16.116509425 +0100
|
||||
@@ -554,6 +554,8 @@
|
||||
#define BNXT_DEFAULT_TX_RING_SIZE 511
|
||||
|
||||
#define MAX_TPA 64
|
||||
+#define MAX_TPA_P5 256
|
||||
+#define MAX_TPA_SEGS_P5 0x3f
|
||||
|
||||
#if (BNXT_PAGE_SHIFT == 16)
|
||||
#define MAX_RX_PAGES 1
|
||||
@@ -835,6 +837,8 @@
|
||||
((hdr_info) & 0x1ff)
|
||||
|
||||
u16 cfa_code; /* cfa_code in TPA start compl */
|
||||
+ u8 agg_count;
|
||||
+ struct rx_agg_cmp *agg_arr;
|
||||
};
|
||||
|
||||
struct bnxt_rx_ring_info {
|
||||
@@ -1481,6 +1485,8 @@
|
||||
u16, void *, u8 *, dma_addr_t,
|
||||
unsigned int);
|
||||
|
||||
+ u16 max_tpa_v2;
|
||||
+ u16 max_tpa;
|
||||
u32 rx_buf_size;
|
||||
u32 rx_buf_use_size; /* useable size */
|
||||
u16 rx_offset;
|
@ -0,0 +1,74 @@
|
||||
From 7d47d61e11444426ad0d5493de4194224d693606 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:22:59 -0400
|
||||
Subject: [PATCH 44/96] [netdrv] bnxt_en: Handle standalone RX_AGG completions
|
||||
|
||||
Message-id: <a156f3cbca063eab1a76e155863749b563b042af.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276463
|
||||
O-Subject: [RHEL-8.2 PATCH 37/78] bnxt_en: Handle standalone RX_AGG completions.
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
On the new 57500 chips, these new RX_AGG completions are not coalesced
|
||||
at the TPA_END completion. Handle these by storing them in the
|
||||
array in the bnxt_tpa_info struct, as they are seen when processing
|
||||
the CMPL ring.
|
||||
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit 8fe88ce7ab3181a11989eb7a8bb00c42a2b7b3b0)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 20 ++++++++++++++++++--
|
||||
1 file changed, 18 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:16.115509434 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:16.250508195 +0100
|
||||
@@ -1519,6 +1519,17 @@
|
||||
return skb;
|
||||
}
|
||||
|
||||
+static void bnxt_tpa_agg(struct bnxt *bp, struct bnxt_rx_ring_info *rxr,
|
||||
+ struct rx_agg_cmp *rx_agg)
|
||||
+{
|
||||
+ u16 agg_id = TPA_AGG_AGG_ID(rx_agg);
|
||||
+ struct bnxt_tpa_info *tpa_info;
|
||||
+
|
||||
+ tpa_info = &rxr->rx_tpa[agg_id];
|
||||
+ BUG_ON(tpa_info->agg_count >= MAX_SKB_FRAGS);
|
||||
+ tpa_info->agg_arr[tpa_info->agg_count++] = *rx_agg;
|
||||
+}
|
||||
+
|
||||
static void bnxt_deliver_skb(struct bnxt *bp, struct bnxt_napi *bnapi,
|
||||
struct sk_buff *skb)
|
||||
{
|
||||
@@ -1560,6 +1571,13 @@
|
||||
rxcmp = (struct rx_cmp *)
|
||||
&cpr->cp_desc_ring[CP_RING(cp_cons)][CP_IDX(cp_cons)];
|
||||
|
||||
+ cmp_type = RX_CMP_TYPE(rxcmp);
|
||||
+
|
||||
+ if (cmp_type == CMP_TYPE_RX_TPA_AGG_CMP) {
|
||||
+ bnxt_tpa_agg(bp, rxr, (struct rx_agg_cmp *)rxcmp);
|
||||
+ goto next_rx_no_prod_no_len;
|
||||
+ }
|
||||
+
|
||||
tmp_raw_cons = NEXT_RAW_CMP(tmp_raw_cons);
|
||||
cp_cons = RING_CMP(tmp_raw_cons);
|
||||
rxcmp1 = (struct rx_cmp_ext *)
|
||||
@@ -1568,8 +1586,6 @@
|
||||
if (!RX_CMP_VALID(rxcmp1, tmp_raw_cons))
|
||||
return -EBUSY;
|
||||
|
||||
- cmp_type = RX_CMP_TYPE(rxcmp);
|
||||
-
|
||||
prod = rxr->rx_prod;
|
||||
|
||||
if (cmp_type == CMP_TYPE_RX_L2_TPA_START_CMP) {
|
@ -0,0 +1,126 @@
|
||||
From 563c6968f57f296bf0bfc06528ff603392090da2 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:23:00 -0400
|
||||
Subject: [PATCH 45/96] [netdrv] bnxt_en: Refactor tunneled hardware GRO logic
|
||||
|
||||
Message-id: <7e0c61958705e069e76dbb6ad6987b3fa99093e6.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276461
|
||||
O-Subject: [RHEL-8.2 PATCH 38/78] bnxt_en: Refactor tunneled hardware GRO logic.
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
The 2 GRO functions to set up the hardware GRO SKB fields for 2
|
||||
different hardware chips have practically identical logic for
|
||||
tunneled packets. Refactor the logic into a separate bnxt_gro_tunnel()
|
||||
function that can be used by both functions.
|
||||
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit bee5a188b71657092dc9eb1a529b4e502fe51444)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 69 +++++++++++++------------------
|
||||
1 file changed, 28 insertions(+), 41 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:16.250508195 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:16.376507039 +0100
|
||||
@@ -1209,6 +1209,31 @@
|
||||
bnxt_reuse_rx_agg_bufs(cpr, idx, 0, agg_bufs, true);
|
||||
}
|
||||
|
||||
+#ifdef CONFIG_INET
|
||||
+static void bnxt_gro_tunnel(struct sk_buff *skb, __be16 ip_proto)
|
||||
+{
|
||||
+ struct udphdr *uh = NULL;
|
||||
+
|
||||
+ if (ip_proto == htons(ETH_P_IP)) {
|
||||
+ struct iphdr *iph = (struct iphdr *)skb->data;
|
||||
+
|
||||
+ if (iph->protocol == IPPROTO_UDP)
|
||||
+ uh = (struct udphdr *)(iph + 1);
|
||||
+ } else {
|
||||
+ struct ipv6hdr *iph = (struct ipv6hdr *)skb->data;
|
||||
+
|
||||
+ if (iph->nexthdr == IPPROTO_UDP)
|
||||
+ uh = (struct udphdr *)(iph + 1);
|
||||
+ }
|
||||
+ if (uh) {
|
||||
+ if (uh->check)
|
||||
+ skb_shinfo(skb)->gso_type |= SKB_GSO_UDP_TUNNEL_CSUM;
|
||||
+ else
|
||||
+ skb_shinfo(skb)->gso_type |= SKB_GSO_UDP_TUNNEL;
|
||||
+ }
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
static struct sk_buff *bnxt_gro_func_5731x(struct bnxt_tpa_info *tpa_info,
|
||||
int payload_off, int tcp_ts,
|
||||
struct sk_buff *skb)
|
||||
@@ -1266,28 +1291,10 @@
|
||||
}
|
||||
|
||||
if (inner_mac_off) { /* tunnel */
|
||||
- struct udphdr *uh = NULL;
|
||||
__be16 proto = *((__be16 *)(skb->data + outer_ip_off -
|
||||
ETH_HLEN - 2));
|
||||
|
||||
- if (proto == htons(ETH_P_IP)) {
|
||||
- struct iphdr *iph = (struct iphdr *)skb->data;
|
||||
-
|
||||
- if (iph->protocol == IPPROTO_UDP)
|
||||
- uh = (struct udphdr *)(iph + 1);
|
||||
- } else {
|
||||
- struct ipv6hdr *iph = (struct ipv6hdr *)skb->data;
|
||||
-
|
||||
- if (iph->nexthdr == IPPROTO_UDP)
|
||||
- uh = (struct udphdr *)(iph + 1);
|
||||
- }
|
||||
- if (uh) {
|
||||
- if (uh->check)
|
||||
- skb_shinfo(skb)->gso_type |=
|
||||
- SKB_GSO_UDP_TUNNEL_CSUM;
|
||||
- else
|
||||
- skb_shinfo(skb)->gso_type |= SKB_GSO_UDP_TUNNEL;
|
||||
- }
|
||||
+ bnxt_gro_tunnel(skb, proto);
|
||||
}
|
||||
#endif
|
||||
return skb;
|
||||
@@ -1334,28 +1341,8 @@
|
||||
return NULL;
|
||||
}
|
||||
|
||||
- if (nw_off) { /* tunnel */
|
||||
- struct udphdr *uh = NULL;
|
||||
-
|
||||
- if (skb->protocol == htons(ETH_P_IP)) {
|
||||
- struct iphdr *iph = (struct iphdr *)skb->data;
|
||||
-
|
||||
- if (iph->protocol == IPPROTO_UDP)
|
||||
- uh = (struct udphdr *)(iph + 1);
|
||||
- } else {
|
||||
- struct ipv6hdr *iph = (struct ipv6hdr *)skb->data;
|
||||
-
|
||||
- if (iph->nexthdr == IPPROTO_UDP)
|
||||
- uh = (struct udphdr *)(iph + 1);
|
||||
- }
|
||||
- if (uh) {
|
||||
- if (uh->check)
|
||||
- skb_shinfo(skb)->gso_type |=
|
||||
- SKB_GSO_UDP_TUNNEL_CSUM;
|
||||
- else
|
||||
- skb_shinfo(skb)->gso_type |= SKB_GSO_UDP_TUNNEL;
|
||||
- }
|
||||
- }
|
||||
+ if (nw_off) /* tunnel */
|
||||
+ bnxt_gro_tunnel(skb, skb->protocol);
|
||||
#endif
|
||||
return skb;
|
||||
}
|
@ -0,0 +1,72 @@
|
||||
From 45e01e8de10f92ab0ae02baf23cbed93b7dae48a Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:23:01 -0400
|
||||
Subject: [PATCH 46/96] [netdrv] bnxt_en: Set TPA GRO mode flags on 57500 chips
|
||||
properly
|
||||
|
||||
Message-id: <6382b11d2a91ab884bfc45379b12c9f5d23bc48b.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276464
|
||||
O-Subject: [RHEL-8.2 PATCH 39/78] bnxt_en: Set TPA GRO mode flags on 57500 chips properly.
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
On 57500 chips, hardware GRO mode cannot be determined from the TPA
|
||||
end, so we need to check bp->flags to determine if we are in hardware
|
||||
GRO mode or not. Modify bnxt_set_features so that the TPA flags
|
||||
in bp->flags don't change until the device is closed. This will ensure
|
||||
that the fast path can safely rely on bp->flags to determine the
|
||||
TPA mode.
|
||||
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit f45b7b78c619cd73c7ca25b68c6ba9653b8e4a0a)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 8 +++++---
|
||||
1 file changed, 5 insertions(+), 3 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:16.376507039 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:16.499505910 +0100
|
||||
@@ -9364,7 +9364,8 @@
|
||||
if (changes & BNXT_FLAG_TPA) {
|
||||
update_tpa = true;
|
||||
if ((bp->flags & BNXT_FLAG_TPA) == 0 ||
|
||||
- (flags & BNXT_FLAG_TPA) == 0)
|
||||
+ (flags & BNXT_FLAG_TPA) == 0 ||
|
||||
+ (bp->flags & BNXT_FLAG_CHIP_P5))
|
||||
re_init = true;
|
||||
}
|
||||
|
||||
@@ -9374,9 +9375,8 @@
|
||||
if (flags != bp->flags) {
|
||||
u32 old_flags = bp->flags;
|
||||
|
||||
- bp->flags = flags;
|
||||
-
|
||||
if (!test_bit(BNXT_STATE_OPEN, &bp->state)) {
|
||||
+ bp->flags = flags;
|
||||
if (update_tpa)
|
||||
bnxt_set_ring_params(bp);
|
||||
return rc;
|
||||
@@ -9384,12 +9384,14 @@
|
||||
|
||||
if (re_init) {
|
||||
bnxt_close_nic(bp, false, false);
|
||||
+ bp->flags = flags;
|
||||
if (update_tpa)
|
||||
bnxt_set_ring_params(bp);
|
||||
|
||||
return bnxt_open_nic(bp, false, false);
|
||||
}
|
||||
if (update_tpa) {
|
||||
+ bp->flags = flags;
|
||||
rc = bnxt_set_tpa(bp,
|
||||
(flags & BNXT_FLAG_TPA) ?
|
||||
true : false);
|
@ -0,0 +1,251 @@
|
||||
From 321df466af8f407daf083b46f29e0b1ce454b25d Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:23:02 -0400
|
||||
Subject: [PATCH 47/96] [netdrv] bnxt_en: Add fast path logic for TPA on 57500
|
||||
chips
|
||||
|
||||
Message-id: <fad58a5dbdecd3dbc7df3d583d009f6c22f1a753.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276470
|
||||
O-Subject: [RHEL-8.2 PATCH 40/78] bnxt_en: Add fast path logic for TPA on 57500 chips.
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
With all the previous refactoring, the TPA fast path can now be
|
||||
modified slightly to support TPA on the new chips. The main
|
||||
difference is that the agg completions are retrieved differently using
|
||||
the bnxt_get_tpa_agg_p5() function on the new chips.
|
||||
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit bfcd8d791ec18496772d117774398e336917f56e)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 100 ++++++++++++++++++++++--------
|
||||
1 file changed, 75 insertions(+), 25 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:16.499505910 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:16.622504781 +0100
|
||||
@@ -842,6 +842,15 @@
|
||||
return agg;
|
||||
}
|
||||
|
||||
+static struct rx_agg_cmp *bnxt_get_tpa_agg_p5(struct bnxt *bp,
|
||||
+ struct bnxt_rx_ring_info *rxr,
|
||||
+ u16 agg_id, u16 curr)
|
||||
+{
|
||||
+ struct bnxt_tpa_info *tpa_info = &rxr->rx_tpa[agg_id];
|
||||
+
|
||||
+ return &tpa_info->agg_arr[curr];
|
||||
+}
|
||||
+
|
||||
static void bnxt_reuse_rx_agg_bufs(struct bnxt_cp_ring_info *cpr, u16 idx,
|
||||
u16 start, u32 agg_bufs, bool tpa)
|
||||
{
|
||||
@@ -850,8 +859,12 @@
|
||||
struct bnxt_rx_ring_info *rxr = bnapi->rx_ring;
|
||||
u16 prod = rxr->rx_agg_prod;
|
||||
u16 sw_prod = rxr->rx_sw_agg_prod;
|
||||
+ bool p5_tpa = false;
|
||||
u32 i;
|
||||
|
||||
+ if ((bp->flags & BNXT_FLAG_CHIP_P5) && tpa)
|
||||
+ p5_tpa = true;
|
||||
+
|
||||
for (i = 0; i < agg_bufs; i++) {
|
||||
u16 cons;
|
||||
struct rx_agg_cmp *agg;
|
||||
@@ -859,7 +872,10 @@
|
||||
struct rx_bd *prod_bd;
|
||||
struct page *page;
|
||||
|
||||
- agg = bnxt_get_agg(bp, cpr, idx, start + i);
|
||||
+ if (p5_tpa)
|
||||
+ agg = bnxt_get_tpa_agg_p5(bp, rxr, idx, start + i);
|
||||
+ else
|
||||
+ agg = bnxt_get_agg(bp, cpr, idx, start + i);
|
||||
cons = agg->rx_agg_cmp_opaque;
|
||||
__clear_bit(cons, rxr->rx_agg_bmap);
|
||||
|
||||
@@ -976,8 +992,12 @@
|
||||
struct pci_dev *pdev = bp->pdev;
|
||||
struct bnxt_rx_ring_info *rxr = bnapi->rx_ring;
|
||||
u16 prod = rxr->rx_agg_prod;
|
||||
+ bool p5_tpa = false;
|
||||
u32 i;
|
||||
|
||||
+ if ((bp->flags & BNXT_FLAG_CHIP_P5) && tpa)
|
||||
+ p5_tpa = true;
|
||||
+
|
||||
for (i = 0; i < agg_bufs; i++) {
|
||||
u16 cons, frag_len;
|
||||
struct rx_agg_cmp *agg;
|
||||
@@ -985,7 +1005,10 @@
|
||||
struct page *page;
|
||||
dma_addr_t mapping;
|
||||
|
||||
- agg = bnxt_get_agg(bp, cpr, idx, i);
|
||||
+ if (p5_tpa)
|
||||
+ agg = bnxt_get_tpa_agg_p5(bp, rxr, idx, i);
|
||||
+ else
|
||||
+ agg = bnxt_get_agg(bp, cpr, idx, i);
|
||||
cons = agg->rx_agg_cmp_opaque;
|
||||
frag_len = (le32_to_cpu(agg->rx_agg_cmp_len_flags_type) &
|
||||
RX_AGG_CMP_LEN) >> RX_AGG_CMP_LEN_SHIFT;
|
||||
@@ -1091,6 +1114,9 @@
|
||||
} else if (cmp_type == CMP_TYPE_RX_L2_TPA_END_CMP) {
|
||||
struct rx_tpa_end_cmp *tpa_end = cmp;
|
||||
|
||||
+ if (bp->flags & BNXT_FLAG_CHIP_P5)
|
||||
+ return 0;
|
||||
+
|
||||
agg_bufs = TPA_END_AGG_BUFS(tpa_end);
|
||||
}
|
||||
|
||||
@@ -1132,22 +1158,27 @@
|
||||
struct rx_tpa_start_cmp *tpa_start,
|
||||
struct rx_tpa_start_cmp_ext *tpa_start1)
|
||||
{
|
||||
- u8 agg_id = TPA_START_AGG_ID(tpa_start);
|
||||
- u16 cons, prod;
|
||||
- struct bnxt_tpa_info *tpa_info;
|
||||
struct bnxt_sw_rx_bd *cons_rx_buf, *prod_rx_buf;
|
||||
+ struct bnxt_tpa_info *tpa_info;
|
||||
+ u16 cons, prod, agg_id;
|
||||
struct rx_bd *prod_bd;
|
||||
dma_addr_t mapping;
|
||||
|
||||
+ if (bp->flags & BNXT_FLAG_CHIP_P5)
|
||||
+ agg_id = TPA_START_AGG_ID_P5(tpa_start);
|
||||
+ else
|
||||
+ agg_id = TPA_START_AGG_ID(tpa_start);
|
||||
cons = tpa_start->rx_tpa_start_cmp_opaque;
|
||||
prod = rxr->rx_prod;
|
||||
cons_rx_buf = &rxr->rx_buf_ring[cons];
|
||||
prod_rx_buf = &rxr->rx_buf_ring[prod];
|
||||
tpa_info = &rxr->rx_tpa[agg_id];
|
||||
|
||||
- if (unlikely(cons != rxr->rx_next_cons)) {
|
||||
- netdev_warn(bp->dev, "TPA cons %x != expected cons %x\n",
|
||||
- cons, rxr->rx_next_cons);
|
||||
+ if (unlikely(cons != rxr->rx_next_cons ||
|
||||
+ TPA_START_ERROR(tpa_start))) {
|
||||
+ netdev_warn(bp->dev, "TPA cons %x, expected cons %x, error code %x\n",
|
||||
+ cons, rxr->rx_next_cons,
|
||||
+ TPA_START_ERROR_CODE(tpa_start1));
|
||||
bnxt_sched_reset(bp, rxr);
|
||||
return;
|
||||
}
|
||||
@@ -1192,6 +1223,7 @@
|
||||
tpa_info->flags2 = le32_to_cpu(tpa_start1->rx_tpa_start_cmp_flags2);
|
||||
tpa_info->metadata = le32_to_cpu(tpa_start1->rx_tpa_start_cmp_metadata);
|
||||
tpa_info->hdr_info = le32_to_cpu(tpa_start1->rx_tpa_start_cmp_hdr_info);
|
||||
+ tpa_info->agg_count = 0;
|
||||
|
||||
rxr->rx_prod = NEXT_RX(prod);
|
||||
cons = NEXT_RX(cons);
|
||||
@@ -1365,7 +1397,10 @@
|
||||
skb_shinfo(skb)->gso_size =
|
||||
le32_to_cpu(tpa_end1->rx_tpa_end_cmp_seg_len);
|
||||
skb_shinfo(skb)->gso_type = tpa_info->gso_type;
|
||||
- payload_off = TPA_END_PAYLOAD_OFF(tpa_end);
|
||||
+ if (bp->flags & BNXT_FLAG_CHIP_P5)
|
||||
+ payload_off = TPA_END_PAYLOAD_OFF_P5(tpa_end1);
|
||||
+ else
|
||||
+ payload_off = TPA_END_PAYLOAD_OFF(tpa_end);
|
||||
skb = bp->gro_func(tpa_info, payload_off, TPA_END_GRO_TS(tpa_end), skb);
|
||||
if (likely(skb))
|
||||
tcp_gro_complete(skb);
|
||||
@@ -1393,14 +1428,14 @@
|
||||
{
|
||||
struct bnxt_napi *bnapi = cpr->bnapi;
|
||||
struct bnxt_rx_ring_info *rxr = bnapi->rx_ring;
|
||||
- u8 agg_id = TPA_END_AGG_ID(tpa_end);
|
||||
u8 *data_ptr, agg_bufs;
|
||||
unsigned int len;
|
||||
struct bnxt_tpa_info *tpa_info;
|
||||
dma_addr_t mapping;
|
||||
struct sk_buff *skb;
|
||||
- u16 idx = 0;
|
||||
+ u16 idx = 0, agg_id;
|
||||
void *data;
|
||||
+ bool gro;
|
||||
|
||||
if (unlikely(bnapi->in_reset)) {
|
||||
int rc = bnxt_discard_rx(bp, cpr, raw_cons, tpa_end);
|
||||
@@ -1410,24 +1445,39 @@
|
||||
return NULL;
|
||||
}
|
||||
|
||||
- tpa_info = &rxr->rx_tpa[agg_id];
|
||||
+ if (bp->flags & BNXT_FLAG_CHIP_P5) {
|
||||
+ agg_id = TPA_END_AGG_ID_P5(tpa_end);
|
||||
+ agg_bufs = TPA_END_AGG_BUFS_P5(tpa_end1);
|
||||
+ tpa_info = &rxr->rx_tpa[agg_id];
|
||||
+ if (unlikely(agg_bufs != tpa_info->agg_count)) {
|
||||
+ netdev_warn(bp->dev, "TPA end agg_buf %d != expected agg_bufs %d\n",
|
||||
+ agg_bufs, tpa_info->agg_count);
|
||||
+ agg_bufs = tpa_info->agg_count;
|
||||
+ }
|
||||
+ tpa_info->agg_count = 0;
|
||||
+ *event |= BNXT_AGG_EVENT;
|
||||
+ idx = agg_id;
|
||||
+ gro = !!(bp->flags & BNXT_FLAG_GRO);
|
||||
+ } else {
|
||||
+ agg_id = TPA_END_AGG_ID(tpa_end);
|
||||
+ agg_bufs = TPA_END_AGG_BUFS(tpa_end);
|
||||
+ tpa_info = &rxr->rx_tpa[agg_id];
|
||||
+ idx = RING_CMP(*raw_cons);
|
||||
+ if (agg_bufs) {
|
||||
+ if (!bnxt_agg_bufs_valid(bp, cpr, agg_bufs, raw_cons))
|
||||
+ return ERR_PTR(-EBUSY);
|
||||
+
|
||||
+ *event |= BNXT_AGG_EVENT;
|
||||
+ idx = NEXT_CMP(idx);
|
||||
+ }
|
||||
+ gro = !!TPA_END_GRO(tpa_end);
|
||||
+ }
|
||||
data = tpa_info->data;
|
||||
data_ptr = tpa_info->data_ptr;
|
||||
prefetch(data_ptr);
|
||||
len = tpa_info->len;
|
||||
mapping = tpa_info->mapping;
|
||||
|
||||
- agg_bufs = TPA_END_AGG_BUFS(tpa_end);
|
||||
-
|
||||
- if (agg_bufs) {
|
||||
- idx = RING_CMP(*raw_cons);
|
||||
- if (!bnxt_agg_bufs_valid(bp, cpr, agg_bufs, raw_cons))
|
||||
- return ERR_PTR(-EBUSY);
|
||||
-
|
||||
- *event |= BNXT_AGG_EVENT;
|
||||
- idx = NEXT_CMP(idx);
|
||||
- }
|
||||
-
|
||||
if (unlikely(agg_bufs > MAX_SKB_FRAGS || TPA_END_ERRORS(tpa_end1))) {
|
||||
bnxt_abort_tpa(cpr, idx, agg_bufs);
|
||||
if (agg_bufs > MAX_SKB_FRAGS)
|
||||
@@ -1500,7 +1550,7 @@
|
||||
(tpa_info->flags2 & RX_CMP_FLAGS2_T_L4_CS_CALC) >> 3;
|
||||
}
|
||||
|
||||
- if (TPA_END_GRO(tpa_end))
|
||||
+ if (gro)
|
||||
skb = bnxt_gro_skb(bp, tpa_info, tpa_end, tpa_end1, skb);
|
||||
|
||||
return skb;
|
||||
@@ -10828,7 +10878,7 @@
|
||||
#endif
|
||||
if (BNXT_SUPPORTS_TPA(bp)) {
|
||||
bp->gro_func = bnxt_gro_func_5730x;
|
||||
- if (BNXT_CHIP_P4(bp))
|
||||
+ if (BNXT_CHIP_P4_PLUS(bp))
|
||||
bp->gro_func = bnxt_gro_func_5731x;
|
||||
}
|
||||
if (!BNXT_CHIP_P4_PLUS(bp))
|
@ -0,0 +1,182 @@
|
||||
From 52051cf0ae9b711f99261f06b8dd923fbc6806fa Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:23:03 -0400
|
||||
Subject: [PATCH 48/96] [netdrv] bnxt_en: Add TPA ID mapping logic for 57500
|
||||
chips
|
||||
|
||||
Message-id: <57e311cc4754abce34f1ea7baed45aa1740f0679.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276467
|
||||
O-Subject: [RHEL-8.2 PATCH 41/78] bnxt_en: Add TPA ID mapping logic for 57500 chips.
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
The new TPA feature on 57500 supports a larger number of concurrent TPAs
|
||||
(up to 1024) divided among the functions. We need to add some logic to
|
||||
map the hardware TPA ID to a software index that keeps track of each TPA
|
||||
in progress. A 1:1 direct mapping without translation would be too
|
||||
wasteful as we would have to allocate 1024 TPA structures for each RX
|
||||
ring on each PCI function.
|
||||
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit ec4d8e7cf024e42def027531676918048e5c7982)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 46 +++++++++++++++++++++++++++++--
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.h | 9 ++++++
|
||||
2 files changed, 53 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:16.622504781 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:16.749503615 +0100
|
||||
@@ -1154,6 +1154,33 @@
|
||||
rxr->rx_next_cons = 0xffff;
|
||||
}
|
||||
|
||||
+static u16 bnxt_alloc_agg_idx(struct bnxt_rx_ring_info *rxr, u16 agg_id)
|
||||
+{
|
||||
+ struct bnxt_tpa_idx_map *map = rxr->rx_tpa_idx_map;
|
||||
+ u16 idx = agg_id & MAX_TPA_P5_MASK;
|
||||
+
|
||||
+ if (test_bit(idx, map->agg_idx_bmap))
|
||||
+ idx = find_first_zero_bit(map->agg_idx_bmap,
|
||||
+ BNXT_AGG_IDX_BMAP_SIZE);
|
||||
+ __set_bit(idx, map->agg_idx_bmap);
|
||||
+ map->agg_id_tbl[agg_id] = idx;
|
||||
+ return idx;
|
||||
+}
|
||||
+
|
||||
+static void bnxt_free_agg_idx(struct bnxt_rx_ring_info *rxr, u16 idx)
|
||||
+{
|
||||
+ struct bnxt_tpa_idx_map *map = rxr->rx_tpa_idx_map;
|
||||
+
|
||||
+ __clear_bit(idx, map->agg_idx_bmap);
|
||||
+}
|
||||
+
|
||||
+static u16 bnxt_lookup_agg_idx(struct bnxt_rx_ring_info *rxr, u16 agg_id)
|
||||
+{
|
||||
+ struct bnxt_tpa_idx_map *map = rxr->rx_tpa_idx_map;
|
||||
+
|
||||
+ return map->agg_id_tbl[agg_id];
|
||||
+}
|
||||
+
|
||||
static void bnxt_tpa_start(struct bnxt *bp, struct bnxt_rx_ring_info *rxr,
|
||||
struct rx_tpa_start_cmp *tpa_start,
|
||||
struct rx_tpa_start_cmp_ext *tpa_start1)
|
||||
@@ -1164,10 +1191,12 @@
|
||||
struct rx_bd *prod_bd;
|
||||
dma_addr_t mapping;
|
||||
|
||||
- if (bp->flags & BNXT_FLAG_CHIP_P5)
|
||||
+ if (bp->flags & BNXT_FLAG_CHIP_P5) {
|
||||
agg_id = TPA_START_AGG_ID_P5(tpa_start);
|
||||
- else
|
||||
+ agg_id = bnxt_alloc_agg_idx(rxr, agg_id);
|
||||
+ } else {
|
||||
agg_id = TPA_START_AGG_ID(tpa_start);
|
||||
+ }
|
||||
cons = tpa_start->rx_tpa_start_cmp_opaque;
|
||||
prod = rxr->rx_prod;
|
||||
cons_rx_buf = &rxr->rx_buf_ring[cons];
|
||||
@@ -1447,6 +1476,7 @@
|
||||
|
||||
if (bp->flags & BNXT_FLAG_CHIP_P5) {
|
||||
agg_id = TPA_END_AGG_ID_P5(tpa_end);
|
||||
+ agg_id = bnxt_lookup_agg_idx(rxr, agg_id);
|
||||
agg_bufs = TPA_END_AGG_BUFS_P5(tpa_end1);
|
||||
tpa_info = &rxr->rx_tpa[agg_id];
|
||||
if (unlikely(agg_bufs != tpa_info->agg_count)) {
|
||||
@@ -1456,6 +1486,7 @@
|
||||
}
|
||||
tpa_info->agg_count = 0;
|
||||
*event |= BNXT_AGG_EVENT;
|
||||
+ bnxt_free_agg_idx(rxr, agg_id);
|
||||
idx = agg_id;
|
||||
gro = !!(bp->flags & BNXT_FLAG_GRO);
|
||||
} else {
|
||||
@@ -1562,6 +1593,7 @@
|
||||
u16 agg_id = TPA_AGG_AGG_ID(rx_agg);
|
||||
struct bnxt_tpa_info *tpa_info;
|
||||
|
||||
+ agg_id = bnxt_lookup_agg_idx(rxr, agg_id);
|
||||
tpa_info = &rxr->rx_tpa[agg_id];
|
||||
BUG_ON(tpa_info->agg_count >= MAX_SKB_FRAGS);
|
||||
tpa_info->agg_arr[tpa_info->agg_count++] = *rx_agg;
|
||||
@@ -2386,6 +2418,7 @@
|
||||
max_agg_idx = bp->rx_agg_nr_pages * RX_DESC_CNT;
|
||||
for (i = 0; i < bp->rx_nr_rings; i++) {
|
||||
struct bnxt_rx_ring_info *rxr = &bp->rx_ring[i];
|
||||
+ struct bnxt_tpa_idx_map *map;
|
||||
int j;
|
||||
|
||||
if (rxr->rx_tpa) {
|
||||
@@ -2456,6 +2489,9 @@
|
||||
__free_page(rxr->rx_page);
|
||||
rxr->rx_page = NULL;
|
||||
}
|
||||
+ map = rxr->rx_tpa_idx_map;
|
||||
+ if (map)
|
||||
+ memset(map->agg_idx_bmap, 0, sizeof(map->agg_idx_bmap));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2551,6 +2587,8 @@
|
||||
for (i = 0; i < bp->rx_nr_rings; i++) {
|
||||
struct bnxt_rx_ring_info *rxr = &bp->rx_ring[i];
|
||||
|
||||
+ kfree(rxr->rx_tpa_idx_map);
|
||||
+ rxr->rx_tpa_idx_map = NULL;
|
||||
if (rxr->rx_tpa) {
|
||||
kfree(rxr->rx_tpa[0].agg_arr);
|
||||
rxr->rx_tpa[0].agg_arr = NULL;
|
||||
@@ -2589,6 +2627,10 @@
|
||||
return -ENOMEM;
|
||||
for (j = 1; j < bp->max_tpa; j++)
|
||||
rxr->rx_tpa[j].agg_arr = agg + j * MAX_SKB_FRAGS;
|
||||
+ rxr->rx_tpa_idx_map = kzalloc(sizeof(*rxr->rx_tpa_idx_map),
|
||||
+ GFP_KERNEL);
|
||||
+ if (!rxr->rx_tpa_idx_map)
|
||||
+ return -ENOMEM;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.h
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:16.116509425 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:16.750503606 +0100
|
||||
@@ -555,6 +555,7 @@
|
||||
|
||||
#define MAX_TPA 64
|
||||
#define MAX_TPA_P5 256
|
||||
+#define MAX_TPA_P5_MASK (MAX_TPA_P5 - 1)
|
||||
#define MAX_TPA_SEGS_P5 0x3f
|
||||
|
||||
#if (BNXT_PAGE_SHIFT == 16)
|
||||
@@ -841,6 +842,13 @@
|
||||
struct rx_agg_cmp *agg_arr;
|
||||
};
|
||||
|
||||
+#define BNXT_AGG_IDX_BMAP_SIZE (MAX_TPA_P5 / BITS_PER_LONG)
|
||||
+
|
||||
+struct bnxt_tpa_idx_map {
|
||||
+ u16 agg_id_tbl[1024];
|
||||
+ unsigned long agg_idx_bmap[BNXT_AGG_IDX_BMAP_SIZE];
|
||||
+};
|
||||
+
|
||||
struct bnxt_rx_ring_info {
|
||||
struct bnxt_napi *bnapi;
|
||||
u16 rx_prod;
|
||||
@@ -868,6 +876,7 @@
|
||||
dma_addr_t rx_agg_desc_mapping[MAX_RX_AGG_PAGES];
|
||||
|
||||
struct bnxt_tpa_info *rx_tpa;
|
||||
+ struct bnxt_tpa_idx_map *rx_tpa_idx_map;
|
||||
|
||||
struct bnxt_ring_struct rx_ring_struct;
|
||||
struct bnxt_ring_struct rx_agg_ring_struct;
|
@ -0,0 +1,82 @@
|
||||
From f18c355c95b64d442e4f0cee4e44f6ef2b3d8905 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:23:04 -0400
|
||||
Subject: [PATCH 49/96] [netdrv] bnxt_en: Add hardware GRO setup function for
|
||||
57500 chips
|
||||
|
||||
Message-id: <8e748026e423be248e251a6fb5aa5c7dc5814864.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276466
|
||||
O-Subject: [RHEL-8.2 PATCH 42/78] bnxt_en: Add hardware GRO setup function for 57500 chips.
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
Add a more optimized hardware GRO function to setup the SKB on 57500
|
||||
chips. Some workaround code is no longer needed on 57500 chips and
|
||||
the pseudo checksum is also calculated in hardware, so no need to
|
||||
do the software pseudo checksum in the driver.
|
||||
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit 67912c366d4bb0a9d108459e7c845cc7ba83f76f)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 33 ++++++++++++++++++++++++++++++-
|
||||
1 file changed, 32 insertions(+), 1 deletion(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:16.749503615 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:16.886502357 +0100
|
||||
@@ -1361,6 +1361,35 @@
|
||||
return skb;
|
||||
}
|
||||
|
||||
+static struct sk_buff *bnxt_gro_func_5750x(struct bnxt_tpa_info *tpa_info,
|
||||
+ int payload_off, int tcp_ts,
|
||||
+ struct sk_buff *skb)
|
||||
+{
|
||||
+#ifdef CONFIG_INET
|
||||
+ u16 outer_ip_off, inner_ip_off, inner_mac_off;
|
||||
+ u32 hdr_info = tpa_info->hdr_info;
|
||||
+ int iphdr_len, nw_off;
|
||||
+
|
||||
+ inner_ip_off = BNXT_TPA_INNER_L3_OFF(hdr_info);
|
||||
+ inner_mac_off = BNXT_TPA_INNER_L2_OFF(hdr_info);
|
||||
+ outer_ip_off = BNXT_TPA_OUTER_L3_OFF(hdr_info);
|
||||
+
|
||||
+ nw_off = inner_ip_off - ETH_HLEN;
|
||||
+ skb_set_network_header(skb, nw_off);
|
||||
+ iphdr_len = (tpa_info->flags2 & RX_TPA_START_CMP_FLAGS2_IP_TYPE) ?
|
||||
+ sizeof(struct ipv6hdr) : sizeof(struct iphdr);
|
||||
+ skb_set_transport_header(skb, nw_off + iphdr_len);
|
||||
+
|
||||
+ if (inner_mac_off) { /* tunnel */
|
||||
+ __be16 proto = *((__be16 *)(skb->data + outer_ip_off -
|
||||
+ ETH_HLEN - 2));
|
||||
+
|
||||
+ bnxt_gro_tunnel(skb, proto);
|
||||
+ }
|
||||
+#endif
|
||||
+ return skb;
|
||||
+}
|
||||
+
|
||||
#define BNXT_IPV4_HDR_SIZE (sizeof(struct iphdr) + sizeof(struct tcphdr))
|
||||
#define BNXT_IPV6_HDR_SIZE (sizeof(struct ipv6hdr) + sizeof(struct tcphdr))
|
||||
|
||||
@@ -10920,8 +10949,10 @@
|
||||
#endif
|
||||
if (BNXT_SUPPORTS_TPA(bp)) {
|
||||
bp->gro_func = bnxt_gro_func_5730x;
|
||||
- if (BNXT_CHIP_P4_PLUS(bp))
|
||||
+ if (BNXT_CHIP_P4(bp))
|
||||
bp->gro_func = bnxt_gro_func_5731x;
|
||||
+ else if (BNXT_CHIP_P5(bp))
|
||||
+ bp->gro_func = bnxt_gro_func_5750x;
|
||||
}
|
||||
if (!BNXT_CHIP_P4_PLUS(bp))
|
||||
bp->flags |= BNXT_FLAG_DOUBLE_DB;
|
@ -0,0 +1,191 @@
|
||||
From f6434f257c096205df4d2333e219e66229433072 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:23:05 -0400
|
||||
Subject: [PATCH 50/96] [netdrv] bnxt_en: Refactor ethtool ring statistics
|
||||
logic
|
||||
|
||||
Message-id: <5774e6c89e7d2c4808b6fd71337d9e03acce8bcd.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276474
|
||||
O-Subject: [RHEL-8.2 PATCH 43/78] bnxt_en: Refactor ethtool ring statistics logic.
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
The current code assumes that the per ring statistics counters are
|
||||
fixed. In newer chips that support a newer version of TPA, the
|
||||
TPA counters are also changed. Refactor the code by defining these
|
||||
counter names in arrays so that it is easy to add a new array for
|
||||
a new set of counters supported by the newer chips.
|
||||
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit ee79566e65945dcf557bcfb9335e46fac67fb002)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 120 +++++++++++++---------
|
||||
1 file changed, 70 insertions(+), 50 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c 2020-02-06 16:23:15.727512996 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c 2020-02-06 16:23:17.017501155 +0100
|
||||
@@ -137,7 +137,36 @@
|
||||
return rc;
|
||||
}
|
||||
|
||||
-#define BNXT_NUM_STATS 22
|
||||
+static const char * const bnxt_ring_stats_str[] = {
|
||||
+ "rx_ucast_packets",
|
||||
+ "rx_mcast_packets",
|
||||
+ "rx_bcast_packets",
|
||||
+ "rx_discards",
|
||||
+ "rx_drops",
|
||||
+ "rx_ucast_bytes",
|
||||
+ "rx_mcast_bytes",
|
||||
+ "rx_bcast_bytes",
|
||||
+ "tx_ucast_packets",
|
||||
+ "tx_mcast_packets",
|
||||
+ "tx_bcast_packets",
|
||||
+ "tx_discards",
|
||||
+ "tx_drops",
|
||||
+ "tx_ucast_bytes",
|
||||
+ "tx_mcast_bytes",
|
||||
+ "tx_bcast_bytes",
|
||||
+};
|
||||
+
|
||||
+static const char * const bnxt_ring_tpa_stats_str[] = {
|
||||
+ "tpa_packets",
|
||||
+ "tpa_bytes",
|
||||
+ "tpa_events",
|
||||
+ "tpa_aborts",
|
||||
+};
|
||||
+
|
||||
+static const char * const bnxt_ring_sw_stats_str[] = {
|
||||
+ "rx_l4_csum_errors",
|
||||
+ "missed_irqs",
|
||||
+};
|
||||
|
||||
#define BNXT_RX_STATS_ENTRY(counter) \
|
||||
{ BNXT_RX_STATS_OFFSET(counter), __stringify(counter) }
|
||||
@@ -432,9 +461,20 @@
|
||||
ARRAY_SIZE(bnxt_tx_pkts_pri_arr))
|
||||
#define BNXT_NUM_PCIE_STATS ARRAY_SIZE(bnxt_pcie_stats_arr)
|
||||
|
||||
+static int bnxt_get_num_ring_stats(struct bnxt *bp)
|
||||
+{
|
||||
+ int num_stats;
|
||||
+
|
||||
+ num_stats = ARRAY_SIZE(bnxt_ring_stats_str) +
|
||||
+ ARRAY_SIZE(bnxt_ring_sw_stats_str);
|
||||
+ if (BNXT_SUPPORTS_TPA(bp))
|
||||
+ num_stats += ARRAY_SIZE(bnxt_ring_tpa_stats_str);
|
||||
+ return num_stats * bp->cp_nr_rings;
|
||||
+}
|
||||
+
|
||||
static int bnxt_get_num_stats(struct bnxt *bp)
|
||||
{
|
||||
- int num_stats = BNXT_NUM_STATS * bp->cp_nr_rings;
|
||||
+ int num_stats = bnxt_get_num_ring_stats(bp);
|
||||
|
||||
num_stats += BNXT_NUM_SW_FUNC_STATS;
|
||||
|
||||
@@ -475,10 +515,13 @@
|
||||
{
|
||||
u32 i, j = 0;
|
||||
struct bnxt *bp = netdev_priv(dev);
|
||||
- u32 stat_fields = sizeof(struct ctx_hw_stats) / 8;
|
||||
+ u32 stat_fields = ARRAY_SIZE(bnxt_ring_stats_str);
|
||||
+
|
||||
+ if (BNXT_SUPPORTS_TPA(bp))
|
||||
+ stat_fields += ARRAY_SIZE(bnxt_ring_tpa_stats_str);
|
||||
|
||||
if (!bp->bnapi) {
|
||||
- j += BNXT_NUM_STATS * bp->cp_nr_rings + BNXT_NUM_SW_FUNC_STATS;
|
||||
+ j += bnxt_get_num_ring_stats(bp) + BNXT_NUM_SW_FUNC_STATS;
|
||||
goto skip_ring_stats;
|
||||
}
|
||||
|
||||
@@ -566,56 +609,33 @@
|
||||
static void bnxt_get_strings(struct net_device *dev, u32 stringset, u8 *buf)
|
||||
{
|
||||
struct bnxt *bp = netdev_priv(dev);
|
||||
- u32 i;
|
||||
+ u32 i, j, num_str;
|
||||
|
||||
switch (stringset) {
|
||||
- /* The number of strings must match BNXT_NUM_STATS defined above. */
|
||||
case ETH_SS_STATS:
|
||||
for (i = 0; i < bp->cp_nr_rings; i++) {
|
||||
- sprintf(buf, "[%d]: rx_ucast_packets", i);
|
||||
- buf += ETH_GSTRING_LEN;
|
||||
- sprintf(buf, "[%d]: rx_mcast_packets", i);
|
||||
- buf += ETH_GSTRING_LEN;
|
||||
- sprintf(buf, "[%d]: rx_bcast_packets", i);
|
||||
- buf += ETH_GSTRING_LEN;
|
||||
- sprintf(buf, "[%d]: rx_discards", i);
|
||||
- buf += ETH_GSTRING_LEN;
|
||||
- sprintf(buf, "[%d]: rx_drops", i);
|
||||
- buf += ETH_GSTRING_LEN;
|
||||
- sprintf(buf, "[%d]: rx_ucast_bytes", i);
|
||||
- buf += ETH_GSTRING_LEN;
|
||||
- sprintf(buf, "[%d]: rx_mcast_bytes", i);
|
||||
- buf += ETH_GSTRING_LEN;
|
||||
- sprintf(buf, "[%d]: rx_bcast_bytes", i);
|
||||
- buf += ETH_GSTRING_LEN;
|
||||
- sprintf(buf, "[%d]: tx_ucast_packets", i);
|
||||
- buf += ETH_GSTRING_LEN;
|
||||
- sprintf(buf, "[%d]: tx_mcast_packets", i);
|
||||
- buf += ETH_GSTRING_LEN;
|
||||
- sprintf(buf, "[%d]: tx_bcast_packets", i);
|
||||
- buf += ETH_GSTRING_LEN;
|
||||
- sprintf(buf, "[%d]: tx_discards", i);
|
||||
- buf += ETH_GSTRING_LEN;
|
||||
- sprintf(buf, "[%d]: tx_drops", i);
|
||||
- buf += ETH_GSTRING_LEN;
|
||||
- sprintf(buf, "[%d]: tx_ucast_bytes", i);
|
||||
- buf += ETH_GSTRING_LEN;
|
||||
- sprintf(buf, "[%d]: tx_mcast_bytes", i);
|
||||
- buf += ETH_GSTRING_LEN;
|
||||
- sprintf(buf, "[%d]: tx_bcast_bytes", i);
|
||||
- buf += ETH_GSTRING_LEN;
|
||||
- sprintf(buf, "[%d]: tpa_packets", i);
|
||||
- buf += ETH_GSTRING_LEN;
|
||||
- sprintf(buf, "[%d]: tpa_bytes", i);
|
||||
- buf += ETH_GSTRING_LEN;
|
||||
- sprintf(buf, "[%d]: tpa_events", i);
|
||||
- buf += ETH_GSTRING_LEN;
|
||||
- sprintf(buf, "[%d]: tpa_aborts", i);
|
||||
- buf += ETH_GSTRING_LEN;
|
||||
- sprintf(buf, "[%d]: rx_l4_csum_errors", i);
|
||||
- buf += ETH_GSTRING_LEN;
|
||||
- sprintf(buf, "[%d]: missed_irqs", i);
|
||||
- buf += ETH_GSTRING_LEN;
|
||||
+ num_str = ARRAY_SIZE(bnxt_ring_stats_str);
|
||||
+ for (j = 0; j < num_str; j++) {
|
||||
+ sprintf(buf, "[%d]: %s", i,
|
||||
+ bnxt_ring_stats_str[j]);
|
||||
+ buf += ETH_GSTRING_LEN;
|
||||
+ }
|
||||
+ if (!BNXT_SUPPORTS_TPA(bp))
|
||||
+ goto skip_tpa_stats;
|
||||
+
|
||||
+ num_str = ARRAY_SIZE(bnxt_ring_tpa_stats_str);
|
||||
+ for (j = 0; j < num_str; j++) {
|
||||
+ sprintf(buf, "[%d]: %s", i,
|
||||
+ bnxt_ring_tpa_stats_str[j]);
|
||||
+ buf += ETH_GSTRING_LEN;
|
||||
+ }
|
||||
+skip_tpa_stats:
|
||||
+ num_str = ARRAY_SIZE(bnxt_ring_sw_stats_str);
|
||||
+ for (j = 0; j < num_str; j++) {
|
||||
+ sprintf(buf, "[%d]: %s", i,
|
||||
+ bnxt_ring_sw_stats_str[j]);
|
||||
+ buf += ETH_GSTRING_LEN;
|
||||
+ }
|
||||
}
|
||||
for (i = 0; i < BNXT_NUM_SW_FUNC_STATS; i++) {
|
||||
strcpy(buf, bnxt_sw_func_stats[i].string);
|
@ -0,0 +1,83 @@
|
||||
From 4e9c35933c1034517f8d1ea4db0d84e67bf9fb6a Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:23:06 -0400
|
||||
Subject: [PATCH 51/96] [netdrv] bnxt_en: Allocate the larger per-ring
|
||||
statistics block for 57500 chips
|
||||
|
||||
Message-id: <b7e6993b0709ea1f6724ddca0c365262b5c2445f.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276465
|
||||
O-Subject: [RHEL-8.2 PATCH 44/78] bnxt_en: Allocate the larger per-ring statistics block for 57500 chips.
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
The new TPA implemantation has additional TPA counters that extend the
|
||||
per-ring statistics block. Allocate the proper size accordingly.
|
||||
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit 4e7485066373f3e9a87fa063b65d0838990753e5)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 10 ++++++++--
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.h | 1 +
|
||||
2 files changed, 9 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:16.886502357 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:17.147499962 +0100
|
||||
@@ -3640,7 +3640,7 @@
|
||||
if (!bp->bnapi)
|
||||
return;
|
||||
|
||||
- size = sizeof(struct ctx_hw_stats);
|
||||
+ size = bp->hw_ring_stats_size;
|
||||
|
||||
for (i = 0; i < bp->cp_nr_rings; i++) {
|
||||
struct bnxt_napi *bnapi = bp->bnapi[i];
|
||||
@@ -3659,7 +3659,7 @@
|
||||
u32 size, i;
|
||||
struct pci_dev *pdev = bp->pdev;
|
||||
|
||||
- size = sizeof(struct ctx_hw_stats);
|
||||
+ size = bp->hw_ring_stats_size;
|
||||
|
||||
for (i = 0; i < bp->cp_nr_rings; i++) {
|
||||
struct bnxt_napi *bnapi = bp->bnapi[i];
|
||||
@@ -4994,6 +4994,11 @@
|
||||
VNIC_QCAPS_RESP_FLAGS_ROCE_MIRRORING_CAPABLE_VNIC_CAP)
|
||||
bp->flags |= BNXT_FLAG_ROCE_MIRROR_CAP;
|
||||
bp->max_tpa_v2 = le16_to_cpu(resp->max_aggs_supported);
|
||||
+ if (bp->max_tpa_v2)
|
||||
+ bp->hw_ring_stats_size =
|
||||
+ sizeof(struct ctx_hw_stats_ext);
|
||||
+ else
|
||||
+ bp->hw_ring_stats_size = sizeof(struct ctx_hw_stats);
|
||||
}
|
||||
mutex_unlock(&bp->hwrm_cmd_lock);
|
||||
return rc;
|
||||
@@ -6195,6 +6200,7 @@
|
||||
|
||||
bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_STAT_CTX_ALLOC, -1, -1);
|
||||
|
||||
+ req.stats_dma_length = cpu_to_le16(bp->hw_ring_stats_size);
|
||||
req.update_period_ms = cpu_to_le32(bp->stats_coal_ticks / 1000);
|
||||
|
||||
mutex_lock(&bp->hwrm_cmd_lock);
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.h
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:16.750503606 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:17.148499952 +0100
|
||||
@@ -1607,6 +1607,7 @@
|
||||
int hw_port_stats_size;
|
||||
u16 fw_rx_stats_ext_size;
|
||||
u16 fw_tx_stats_ext_size;
|
||||
+ u16 hw_ring_stats_size;
|
||||
u8 pri2cos[8];
|
||||
u8 pri2cos_valid;
|
||||
|
@ -0,0 +1,113 @@
|
||||
From ecb8a317044a5892e9f0d5a3ebe27689dcb264b4 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:23:07 -0400
|
||||
Subject: [PATCH 52/96] [netdrv] bnxt_en: Support TPA counters on 57500 chips
|
||||
|
||||
Message-id: <af5cd8f6d840cf1d1352c7bfd76e0c1044e9871b.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276468
|
||||
O-Subject: [RHEL-8.2 PATCH 45/78] bnxt_en: Support TPA counters on 57500 chips.
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
Support the new expanded TPA v2 counters on 57500 B0 chips for
|
||||
ethtool -S.
|
||||
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit 78e7b86605b460e8b40622d16d840f9276d58627)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 41 +++++++++++++++++------
|
||||
1 file changed, 31 insertions(+), 10 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c 2020-02-06 16:23:17.017501155 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c 2020-02-06 16:23:17.286498686 +0100
|
||||
@@ -163,6 +163,14 @@
|
||||
"tpa_aborts",
|
||||
};
|
||||
|
||||
+static const char * const bnxt_ring_tpa2_stats_str[] = {
|
||||
+ "rx_tpa_eligible_pkt",
|
||||
+ "rx_tpa_eligible_bytes",
|
||||
+ "rx_tpa_pkt",
|
||||
+ "rx_tpa_bytes",
|
||||
+ "rx_tpa_errors",
|
||||
+};
|
||||
+
|
||||
static const char * const bnxt_ring_sw_stats_str[] = {
|
||||
"rx_l4_csum_errors",
|
||||
"missed_irqs",
|
||||
@@ -461,14 +469,23 @@
|
||||
ARRAY_SIZE(bnxt_tx_pkts_pri_arr))
|
||||
#define BNXT_NUM_PCIE_STATS ARRAY_SIZE(bnxt_pcie_stats_arr)
|
||||
|
||||
+static int bnxt_get_num_tpa_ring_stats(struct bnxt *bp)
|
||||
+{
|
||||
+ if (BNXT_SUPPORTS_TPA(bp)) {
|
||||
+ if (bp->max_tpa_v2)
|
||||
+ return ARRAY_SIZE(bnxt_ring_tpa2_stats_str);
|
||||
+ return ARRAY_SIZE(bnxt_ring_tpa_stats_str);
|
||||
+ }
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static int bnxt_get_num_ring_stats(struct bnxt *bp)
|
||||
{
|
||||
int num_stats;
|
||||
|
||||
num_stats = ARRAY_SIZE(bnxt_ring_stats_str) +
|
||||
- ARRAY_SIZE(bnxt_ring_sw_stats_str);
|
||||
- if (BNXT_SUPPORTS_TPA(bp))
|
||||
- num_stats += ARRAY_SIZE(bnxt_ring_tpa_stats_str);
|
||||
+ ARRAY_SIZE(bnxt_ring_sw_stats_str) +
|
||||
+ bnxt_get_num_tpa_ring_stats(bp);
|
||||
return num_stats * bp->cp_nr_rings;
|
||||
}
|
||||
|
||||
@@ -515,10 +532,8 @@
|
||||
{
|
||||
u32 i, j = 0;
|
||||
struct bnxt *bp = netdev_priv(dev);
|
||||
- u32 stat_fields = ARRAY_SIZE(bnxt_ring_stats_str);
|
||||
-
|
||||
- if (BNXT_SUPPORTS_TPA(bp))
|
||||
- stat_fields += ARRAY_SIZE(bnxt_ring_tpa_stats_str);
|
||||
+ u32 stat_fields = ARRAY_SIZE(bnxt_ring_stats_str) +
|
||||
+ bnxt_get_num_tpa_ring_stats(bp);
|
||||
|
||||
if (!bp->bnapi) {
|
||||
j += bnxt_get_num_ring_stats(bp) + BNXT_NUM_SW_FUNC_STATS;
|
||||
@@ -609,6 +624,7 @@
|
||||
static void bnxt_get_strings(struct net_device *dev, u32 stringset, u8 *buf)
|
||||
{
|
||||
struct bnxt *bp = netdev_priv(dev);
|
||||
+ static const char * const *str;
|
||||
u32 i, j, num_str;
|
||||
|
||||
switch (stringset) {
|
||||
@@ -623,10 +639,15 @@
|
||||
if (!BNXT_SUPPORTS_TPA(bp))
|
||||
goto skip_tpa_stats;
|
||||
|
||||
- num_str = ARRAY_SIZE(bnxt_ring_tpa_stats_str);
|
||||
+ if (bp->max_tpa_v2) {
|
||||
+ num_str = ARRAY_SIZE(bnxt_ring_tpa2_stats_str);
|
||||
+ str = bnxt_ring_tpa2_stats_str;
|
||||
+ } else {
|
||||
+ num_str = ARRAY_SIZE(bnxt_ring_tpa_stats_str);
|
||||
+ str = bnxt_ring_tpa_stats_str;
|
||||
+ }
|
||||
for (j = 0; j < num_str; j++) {
|
||||
- sprintf(buf, "[%d]: %s", i,
|
||||
- bnxt_ring_tpa_stats_str[j]);
|
||||
+ sprintf(buf, "[%d]: %s", i, str[j]);
|
||||
buf += ETH_GSTRING_LEN;
|
||||
}
|
||||
skip_tpa_stats:
|
@ -0,0 +1,205 @@
|
||||
From a9536e5d7071700b70864dd36a64c76be4cd66d9 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:23:08 -0400
|
||||
Subject: [PATCH 53/96] [netdrv] bnxt_en: Refactor bnxt_init_one() and turn on
|
||||
TPA support on 57500 chips
|
||||
|
||||
Message-id: <123b7087655bc1637b5b987815609f43d1ef2caa.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276472
|
||||
O-Subject: [RHEL-8.2 PATCH 46/78] bnxt_en: Refactor bnxt_init_one() and turn on TPA support on 57500 chips.
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
With the new TPA feature in the 57500 chips, we need to discover the
|
||||
feature first before setting up the netdev features. Refactor the
|
||||
the firmware probe and init logic more cleanly into 2 functions and
|
||||
and make these calls before setting up the netdev features.
|
||||
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit 7c3809181468a219aa2abd25910bd3b02b89b0de)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 116 +++++++++++++++++-------------
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.h | 4 +-
|
||||
2 files changed, 67 insertions(+), 53 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:17.147499962 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:17.409497557 +0100
|
||||
@@ -9915,6 +9915,68 @@
|
||||
bp->stats_coal_ticks = BNXT_DEF_STATS_COAL_TICKS;
|
||||
}
|
||||
|
||||
+static int bnxt_fw_init_one_p1(struct bnxt *bp)
|
||||
+{
|
||||
+ int rc;
|
||||
+
|
||||
+ bp->fw_cap = 0;
|
||||
+ rc = bnxt_hwrm_ver_get(bp);
|
||||
+ if (rc)
|
||||
+ return rc;
|
||||
+
|
||||
+ if (bp->fw_cap & BNXT_FW_CAP_KONG_MB_CHNL) {
|
||||
+ rc = bnxt_alloc_kong_hwrm_resources(bp);
|
||||
+ if (rc)
|
||||
+ bp->fw_cap &= ~BNXT_FW_CAP_KONG_MB_CHNL;
|
||||
+ }
|
||||
+
|
||||
+ if ((bp->fw_cap & BNXT_FW_CAP_SHORT_CMD) ||
|
||||
+ bp->hwrm_max_ext_req_len > BNXT_HWRM_MAX_REQ_LEN) {
|
||||
+ rc = bnxt_alloc_hwrm_short_cmd_req(bp);
|
||||
+ if (rc)
|
||||
+ return rc;
|
||||
+ }
|
||||
+ rc = bnxt_hwrm_func_reset(bp);
|
||||
+ if (rc)
|
||||
+ return -ENODEV;
|
||||
+
|
||||
+ bnxt_hwrm_fw_set_time(bp);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int bnxt_fw_init_one_p2(struct bnxt *bp)
|
||||
+{
|
||||
+ int rc;
|
||||
+
|
||||
+ /* Get the MAX capabilities for this function */
|
||||
+ rc = bnxt_hwrm_func_qcaps(bp);
|
||||
+ if (rc) {
|
||||
+ netdev_err(bp->dev, "hwrm query capability failure rc: %x\n",
|
||||
+ rc);
|
||||
+ return -ENODEV;
|
||||
+ }
|
||||
+
|
||||
+ rc = bnxt_hwrm_cfa_adv_flow_mgnt_qcaps(bp);
|
||||
+ if (rc)
|
||||
+ netdev_warn(bp->dev, "hwrm query adv flow mgnt failure rc: %d\n",
|
||||
+ rc);
|
||||
+
|
||||
+ rc = bnxt_hwrm_func_drv_rgtr(bp);
|
||||
+ if (rc)
|
||||
+ return -ENODEV;
|
||||
+
|
||||
+ rc = bnxt_hwrm_func_rgtr_async_events(bp, NULL, 0);
|
||||
+ if (rc)
|
||||
+ return -ENODEV;
|
||||
+
|
||||
+ bnxt_hwrm_func_qcfg(bp);
|
||||
+ bnxt_hwrm_vnic_qcaps(bp);
|
||||
+ bnxt_hwrm_port_led_qcaps(bp);
|
||||
+ bnxt_ethtool_init(bp);
|
||||
+ bnxt_dcb_init(bp);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static int bnxt_init_board(struct pci_dev *pdev, struct net_device *dev)
|
||||
{
|
||||
int rc;
|
||||
@@ -10894,32 +10956,18 @@
|
||||
goto init_err_pci_clean;
|
||||
|
||||
mutex_init(&bp->hwrm_cmd_lock);
|
||||
- rc = bnxt_hwrm_ver_get(bp);
|
||||
+
|
||||
+ rc = bnxt_fw_init_one_p1(bp);
|
||||
if (rc)
|
||||
goto init_err_pci_clean;
|
||||
|
||||
- if (bp->fw_cap & BNXT_FW_CAP_KONG_MB_CHNL) {
|
||||
- rc = bnxt_alloc_kong_hwrm_resources(bp);
|
||||
- if (rc)
|
||||
- bp->fw_cap &= ~BNXT_FW_CAP_KONG_MB_CHNL;
|
||||
- }
|
||||
-
|
||||
- if ((bp->fw_cap & BNXT_FW_CAP_SHORT_CMD) ||
|
||||
- bp->hwrm_max_ext_req_len > BNXT_HWRM_MAX_REQ_LEN) {
|
||||
- rc = bnxt_alloc_hwrm_short_cmd_req(bp);
|
||||
- if (rc)
|
||||
- goto init_err_pci_clean;
|
||||
- }
|
||||
-
|
||||
if (BNXT_CHIP_P5(bp))
|
||||
bp->flags |= BNXT_FLAG_CHIP_P5;
|
||||
|
||||
- rc = bnxt_hwrm_func_reset(bp);
|
||||
+ rc = bnxt_fw_init_one_p2(bp);
|
||||
if (rc)
|
||||
goto init_err_pci_clean;
|
||||
|
||||
- bnxt_hwrm_fw_set_time(bp);
|
||||
-
|
||||
dev->hw_features = NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | NETIF_F_SG |
|
||||
NETIF_F_TSO | NETIF_F_TSO6 |
|
||||
NETIF_F_GSO_UDP_TUNNEL | NETIF_F_GSO_GRE |
|
||||
@@ -10963,37 +11011,8 @@
|
||||
if (!BNXT_CHIP_P4_PLUS(bp))
|
||||
bp->flags |= BNXT_FLAG_DOUBLE_DB;
|
||||
|
||||
- rc = bnxt_hwrm_func_drv_rgtr(bp);
|
||||
- if (rc)
|
||||
- goto init_err_pci_clean;
|
||||
-
|
||||
- rc = bnxt_hwrm_func_rgtr_async_events(bp, NULL, 0);
|
||||
- if (rc)
|
||||
- goto init_err_pci_clean;
|
||||
-
|
||||
bp->ulp_probe = bnxt_ulp_probe;
|
||||
|
||||
- rc = bnxt_hwrm_queue_qportcfg(bp);
|
||||
- if (rc) {
|
||||
- netdev_err(bp->dev, "hwrm query qportcfg failure rc: %x\n",
|
||||
- rc);
|
||||
- rc = -1;
|
||||
- goto init_err_pci_clean;
|
||||
- }
|
||||
- /* Get the MAX capabilities for this function */
|
||||
- rc = bnxt_hwrm_func_qcaps(bp);
|
||||
- if (rc) {
|
||||
- netdev_err(bp->dev, "hwrm query capability failure rc: %x\n",
|
||||
- rc);
|
||||
- rc = -1;
|
||||
- goto init_err_pci_clean;
|
||||
- }
|
||||
-
|
||||
- rc = bnxt_hwrm_cfa_adv_flow_mgnt_qcaps(bp);
|
||||
- if (rc)
|
||||
- netdev_warn(bp->dev, "hwrm query adv flow mgnt failure rc: %d\n",
|
||||
- rc);
|
||||
-
|
||||
rc = bnxt_init_mac_addr(bp);
|
||||
if (rc) {
|
||||
dev_err(&pdev->dev, "Unable to initialize mac address.\n");
|
||||
@@ -11007,11 +11026,6 @@
|
||||
if (rc)
|
||||
goto init_err_pci_clean;
|
||||
}
|
||||
- bnxt_hwrm_func_qcfg(bp);
|
||||
- bnxt_hwrm_vnic_qcaps(bp);
|
||||
- bnxt_hwrm_port_led_qcaps(bp);
|
||||
- bnxt_ethtool_init(bp);
|
||||
- bnxt_dcb_init(bp);
|
||||
|
||||
/* MTU range: 60 - FW defined max */
|
||||
dev->min_mtu = ETH_ZLEN;
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.h
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:17.148499952 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:17.409497557 +0100
|
||||
@@ -1459,8 +1459,8 @@
|
||||
#define BNXT_CHIP_TYPE_NITRO_A0(bp) ((bp)->flags & BNXT_FLAG_CHIP_NITRO_A0)
|
||||
#define BNXT_RX_PAGE_MODE(bp) ((bp)->flags & BNXT_FLAG_RX_PAGE_MODE)
|
||||
#define BNXT_SUPPORTS_TPA(bp) (!BNXT_CHIP_TYPE_NITRO_A0(bp) && \
|
||||
- !(bp->flags & BNXT_FLAG_CHIP_P5) && \
|
||||
- !is_kdump_kernel())
|
||||
+ (!((bp)->flags & BNXT_FLAG_CHIP_P5) || \
|
||||
+ (bp)->max_tpa_v2) && !is_kdump_kernel())
|
||||
|
||||
/* Chip class phase 5 */
|
||||
#define BNXT_CHIP_P5(bp) \
|
@ -0,0 +1,54 @@
|
||||
From 0a5ec2abf3d05d1aa939458395c5777f692326c9 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:23:09 -0400
|
||||
Subject: [PATCH 54/96] [netdrv] bnxt_en: Support all variants of the 5750X
|
||||
chip family
|
||||
|
||||
Message-id: <e89cb2d54dda1f163f15321c9f0f66a8b5ed915e.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276477
|
||||
O-Subject: [RHEL-8.2 PATCH 47/78] bnxt_en: Support all variants of the 5750X chip family.
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
Define the 57508, 57504, and 57502 chip IDs that are all part of the
|
||||
BNXT_CHIP_P5 family of chips.
|
||||
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit 1dc88b97a020148c0eea6c595d511a19c2fab347)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.h | 8 ++++++--
|
||||
1 file changed, 6 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.h
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:17.409497557 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:17.543496327 +0100
|
||||
@@ -1362,7 +1362,9 @@
|
||||
|
||||
#define CHIP_NUM_5745X 0xd730
|
||||
|
||||
-#define CHIP_NUM_57500 0x1750
|
||||
+#define CHIP_NUM_57508 0x1750
|
||||
+#define CHIP_NUM_57504 0x1751
|
||||
+#define CHIP_NUM_57502 0x1752
|
||||
|
||||
#define CHIP_NUM_58802 0xd802
|
||||
#define CHIP_NUM_58804 0xd804
|
||||
@@ -1464,7 +1466,9 @@
|
||||
|
||||
/* Chip class phase 5 */
|
||||
#define BNXT_CHIP_P5(bp) \
|
||||
- ((bp)->chip_num == CHIP_NUM_57500)
|
||||
+ ((bp)->chip_num == CHIP_NUM_57508 || \
|
||||
+ (bp)->chip_num == CHIP_NUM_57504 || \
|
||||
+ (bp)->chip_num == CHIP_NUM_57502)
|
||||
|
||||
/* Chip class phase 4.x */
|
||||
#define BNXT_CHIP_P4(bp) \
|
@ -0,0 +1,62 @@
|
||||
From 07191de7be15338828221c43363a0d6104484c6e Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:23:10 -0400
|
||||
Subject: [PATCH 55/96] [netdrv] bnxt_en: Add PCI IDs for 57500 series NPAR
|
||||
devices
|
||||
|
||||
Message-id: <a7104c5c246a5b487d71c8fcaf1317d05053817f.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276469
|
||||
O-Subject: [RHEL-8.2 PATCH 48/78] bnxt_en: Add PCI IDs for 57500 series NPAR devices.
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit 49c98421e6ab33665e8ee7901218a712f5b0db2e)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 12 ++++++++++++
|
||||
1 file changed, 12 insertions(+)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:17.409497557 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:17.665495207 +0100
|
||||
@@ -116,6 +116,9 @@
|
||||
BCM57508,
|
||||
BCM57504,
|
||||
BCM57502,
|
||||
+ BCM57508_NPAR,
|
||||
+ BCM57504_NPAR,
|
||||
+ BCM57502_NPAR,
|
||||
BCM58802,
|
||||
BCM58804,
|
||||
BCM58808,
|
||||
@@ -161,6 +164,9 @@
|
||||
[BCM57508] = { "Broadcom BCM57508 NetXtreme-E 10Gb/25Gb/50Gb/100Gb/200Gb Ethernet" },
|
||||
[BCM57504] = { "Broadcom BCM57504 NetXtreme-E 10Gb/25Gb/50Gb/100Gb/200Gb Ethernet" },
|
||||
[BCM57502] = { "Broadcom BCM57502 NetXtreme-E 10Gb/25Gb/50Gb Ethernet" },
|
||||
+ [BCM57508_NPAR] = { "Broadcom BCM57508 NetXtreme-E Ethernet Partition" },
|
||||
+ [BCM57504_NPAR] = { "Broadcom BCM57504 NetXtreme-E Ethernet Partition" },
|
||||
+ [BCM57502_NPAR] = { "Broadcom BCM57502 NetXtreme-E Ethernet Partition" },
|
||||
[BCM58802] = { "Broadcom BCM58802 NetXtreme-S 10Gb/25Gb/40Gb/50Gb Ethernet" },
|
||||
[BCM58804] = { "Broadcom BCM58804 NetXtreme-S 10Gb/25Gb/40Gb/50Gb/100Gb Ethernet" },
|
||||
[BCM58808] = { "Broadcom BCM58808 NetXtreme-S 10Gb/25Gb/40Gb/50Gb/100Gb Ethernet" },
|
||||
@@ -209,6 +215,12 @@
|
||||
{ PCI_VDEVICE(BROADCOM, 0x1750), .driver_data = BCM57508 },
|
||||
{ PCI_VDEVICE(BROADCOM, 0x1751), .driver_data = BCM57504 },
|
||||
{ PCI_VDEVICE(BROADCOM, 0x1752), .driver_data = BCM57502 },
|
||||
+ { PCI_VDEVICE(BROADCOM, 0x1800), .driver_data = BCM57508_NPAR },
|
||||
+ { PCI_VDEVICE(BROADCOM, 0x1801), .driver_data = BCM57504_NPAR },
|
||||
+ { PCI_VDEVICE(BROADCOM, 0x1802), .driver_data = BCM57502_NPAR },
|
||||
+ { PCI_VDEVICE(BROADCOM, 0x1803), .driver_data = BCM57508_NPAR },
|
||||
+ { PCI_VDEVICE(BROADCOM, 0x1804), .driver_data = BCM57504_NPAR },
|
||||
+ { PCI_VDEVICE(BROADCOM, 0x1805), .driver_data = BCM57502_NPAR },
|
||||
{ PCI_VDEVICE(BROADCOM, 0xd802), .driver_data = BCM58802 },
|
||||
{ PCI_VDEVICE(BROADCOM, 0xd804), .driver_data = BCM58804 },
|
||||
#ifdef CONFIG_BNXT_SRIOV
|
@ -0,0 +1,119 @@
|
||||
From 2ebefa82c1a4132e47d8e9ebaa8c1ba1647c3a7f Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:23:11 -0400
|
||||
Subject: [PATCH 56/96] [netdrv] bnxt: no need to check return value of
|
||||
debugfs_create functions
|
||||
|
||||
Message-id: <85557a81f2bb78d291f389dfdd9b0175b2d8f3e2.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276475
|
||||
O-Subject: [RHEL-8.2 PATCH 49/78] bnxt: no need to check return value of debugfs_create functions
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
When calling debugfs functions, there is no need to ever check the
|
||||
return value. The function can work or not, but the code logic should
|
||||
never do something different based on this.
|
||||
|
||||
This cleans up a lot of unneeded code and logic around the debugfs
|
||||
files, making all of this much simpler and easier to understand.
|
||||
|
||||
Cc: Michael Chan <michael.chan@broadcom.com>
|
||||
Cc: "David S. Miller" <davem@davemloft.net>
|
||||
Cc: netdev@vger.kernel.org
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit 3a131e85043cf538d5e70c0f23f9d69a4dd642b9)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.h | 1 -
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_debugfs.c | 39 +++++++----------------
|
||||
2 files changed, 11 insertions(+), 29 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.h
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:17.543496327 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:17.788494078 +0100
|
||||
@@ -1724,7 +1724,6 @@
|
||||
u8 switch_id[8];
|
||||
struct bnxt_tc_info *tc_info;
|
||||
struct dentry *debugfs_pdev;
|
||||
- struct dentry *debugfs_dim;
|
||||
struct device *hwmon_dev;
|
||||
};
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_debugfs.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_debugfs.c 2020-02-06 16:22:54.954703674 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_debugfs.c 2020-02-06 16:23:17.788494078 +0100
|
||||
@@ -61,45 +61,30 @@
|
||||
.read = debugfs_dim_read,
|
||||
};
|
||||
|
||||
-static struct dentry *debugfs_dim_ring_init(struct net_dim *dim, int ring_idx,
|
||||
- struct dentry *dd)
|
||||
+static void debugfs_dim_ring_init(struct net_dim *dim, int ring_idx,
|
||||
+ struct dentry *dd)
|
||||
{
|
||||
static char qname[16];
|
||||
|
||||
snprintf(qname, 10, "%d", ring_idx);
|
||||
- return debugfs_create_file(qname, 0600, dd,
|
||||
- dim, &debugfs_dim_fops);
|
||||
+ debugfs_create_file(qname, 0600, dd, dim, &debugfs_dim_fops);
|
||||
}
|
||||
|
||||
void bnxt_debug_dev_init(struct bnxt *bp)
|
||||
{
|
||||
const char *pname = pci_name(bp->pdev);
|
||||
- struct dentry *pdevf;
|
||||
+ struct dentry *dir;
|
||||
int i;
|
||||
|
||||
bp->debugfs_pdev = debugfs_create_dir(pname, bnxt_debug_mnt);
|
||||
- if (bp->debugfs_pdev) {
|
||||
- pdevf = debugfs_create_dir("dim", bp->debugfs_pdev);
|
||||
- if (!pdevf) {
|
||||
- pr_err("failed to create debugfs entry %s/dim\n",
|
||||
- pname);
|
||||
- return;
|
||||
- }
|
||||
- bp->debugfs_dim = pdevf;
|
||||
- /* create files for each rx ring */
|
||||
- for (i = 0; i < bp->cp_nr_rings; i++) {
|
||||
- struct bnxt_cp_ring_info *cpr = &bp->bnapi[i]->cp_ring;
|
||||
-
|
||||
- if (cpr && bp->bnapi[i]->rx_ring) {
|
||||
- pdevf = debugfs_dim_ring_init(&cpr->dim, i,
|
||||
- bp->debugfs_dim);
|
||||
- if (!pdevf)
|
||||
- pr_err("failed to create debugfs entry %s/dim/%d\n",
|
||||
- pname, i);
|
||||
- }
|
||||
- }
|
||||
- } else {
|
||||
- pr_err("failed to create debugfs entry %s\n", pname);
|
||||
+ dir = debugfs_create_dir("dim", bp->debugfs_pdev);
|
||||
+
|
||||
+ /* create files for each rx ring */
|
||||
+ for (i = 0; i < bp->cp_nr_rings; i++) {
|
||||
+ struct bnxt_cp_ring_info *cpr = &bp->bnapi[i]->cp_ring;
|
||||
+
|
||||
+ if (cpr && bp->bnapi[i]->rx_ring)
|
||||
+ debugfs_dim_ring_init(&cpr->dim, i, dir);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -114,8 +99,6 @@
|
||||
void bnxt_debug_init(void)
|
||||
{
|
||||
bnxt_debug_mnt = debugfs_create_dir("bnxt_en", NULL);
|
||||
- if (!bnxt_debug_mnt)
|
||||
- pr_err("failed to init bnxt_en debugfs\n");
|
||||
}
|
||||
|
||||
void bnxt_debug_exit(void)
|
@ -0,0 +1,57 @@
|
||||
From dc0e1a87f072fad80e9b9dd314dbf182a0655931 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:23:12 -0400
|
||||
Subject: [PATCH 57/96] [netdrv] bnxt_en: Fix allocation of zero statistics
|
||||
block size regression
|
||||
|
||||
Message-id: <d07b6ae478d4df07750d35acd7b5a2697735b8aa.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276481
|
||||
O-Subject: [RHEL-8.2 PATCH 50/78] bnxt_en: Fix allocation of zero statistics block size regression.
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
Recent commit added logic to determine the appropriate statistics block
|
||||
size to allocate and the size is stored in bp->hw_ring_stats_size. But
|
||||
if the firmware spec is older than 1.6.0, it is 0 and not initialized.
|
||||
This causes the allocation to fail with size 0 and bnxt_open() to
|
||||
abort. Fix it by always initializing bp->hw_ring_stats_size to the
|
||||
legacy default size value.
|
||||
|
||||
Fixes: 4e7485066373 ("bnxt_en: Allocate the larger per-ring statistics block for 57500 chips.")
|
||||
Reported-by: Jonathan Lemon <jonathan.lemon@gmail.com>
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Tested-by: Jonathan Lemon <jonathan.lemon@gmail.com>
|
||||
Acked-by: Jonathan Lemon <jonathan.lemon@gmail.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit fbbdbc6473070dcb3ee1d69cf1c49ff78677d716)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 3 +--
|
||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:17.665495207 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:17.921492857 +0100
|
||||
@@ -4990,6 +4990,7 @@
|
||||
struct hwrm_vnic_qcaps_input req = {0};
|
||||
int rc;
|
||||
|
||||
+ bp->hw_ring_stats_size = sizeof(struct ctx_hw_stats);
|
||||
if (bp->hwrm_spec_code < 0x10600)
|
||||
return 0;
|
||||
|
||||
@@ -5009,8 +5010,6 @@
|
||||
if (bp->max_tpa_v2)
|
||||
bp->hw_ring_stats_size =
|
||||
sizeof(struct ctx_hw_stats_ext);
|
||||
- else
|
||||
- bp->hw_ring_stats_size = sizeof(struct ctx_hw_stats);
|
||||
}
|
||||
mutex_unlock(&bp->hwrm_cmd_lock);
|
||||
return rc;
|
@ -0,0 +1,74 @@
|
||||
From a63606600d431959dd1a271a8b91d1c6b6e305fd Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:23:13 -0400
|
||||
Subject: [PATCH 58/96] [netdrv] bnxt_en: Use a common function to print the
|
||||
same ethtool -f error message
|
||||
|
||||
Message-id: <29dc7b5858ac5320c7eac0eeff93abd135cb6e2e.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276476
|
||||
O-Subject: [RHEL-8.2 PATCH 51/78] bnxt_en: Use a common function to print the same ethtool -f error message.
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
The same message is printed 3 times in the code, so use a common function
|
||||
to do that.
|
||||
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit b3b0ddd07e63d564a3d5500938913805d06a1682)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 14 ++++++++------
|
||||
1 file changed, 8 insertions(+), 6 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c 2020-02-06 16:23:17.286498686 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c 2020-02-06 16:23:18.049491682 +0100
|
||||
@@ -1699,6 +1699,11 @@
|
||||
return bp->link_info.link_up;
|
||||
}
|
||||
|
||||
+static void bnxt_print_admin_err(struct bnxt *bp)
|
||||
+{
|
||||
+ netdev_info(bp->dev, "PF does not have admin privileges to flash or reset the device\n");
|
||||
+}
|
||||
+
|
||||
static int bnxt_find_nvram_item(struct net_device *dev, u16 type, u16 ordinal,
|
||||
u16 ext, u16 *index, u32 *item_length,
|
||||
u32 *data_length);
|
||||
@@ -1739,8 +1744,7 @@
|
||||
dma_free_coherent(&bp->pdev->dev, data_len, kmem, dma_handle);
|
||||
|
||||
if (rc == HWRM_ERR_CODE_RESOURCE_ACCESS_DENIED) {
|
||||
- netdev_info(dev,
|
||||
- "PF does not have admin privileges to flash the device\n");
|
||||
+ bnxt_print_admin_err(bp);
|
||||
rc = -EACCES;
|
||||
} else if (rc) {
|
||||
rc = -EIO;
|
||||
@@ -1795,8 +1799,7 @@
|
||||
|
||||
rc = hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
|
||||
if (rc == HWRM_ERR_CODE_RESOURCE_ACCESS_DENIED) {
|
||||
- netdev_info(dev,
|
||||
- "PF does not have admin privileges to reset the device\n");
|
||||
+ bnxt_print_admin_err(bp);
|
||||
rc = -EACCES;
|
||||
} else if (rc) {
|
||||
rc = -EIO;
|
||||
@@ -2096,8 +2099,7 @@
|
||||
mutex_unlock(&bp->hwrm_cmd_lock);
|
||||
err_exit:
|
||||
if (hwrm_err == HWRM_ERR_CODE_RESOURCE_ACCESS_DENIED) {
|
||||
- netdev_info(dev,
|
||||
- "PF does not have admin privileges to flash the device\n");
|
||||
+ bnxt_print_admin_err(bp);
|
||||
rc = -EACCES;
|
||||
} else if (hwrm_err) {
|
||||
rc = -EOPNOTSUPP;
|
@ -0,0 +1,59 @@
|
||||
From 6f33f93474d2f2ce4c358a87236dfd597bc60e5f Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:23:14 -0400
|
||||
Subject: [PATCH 59/96] [netdrv] bnxt_en: Remove the -1 error return code from
|
||||
bnxt_hwrm_do_send_msg()
|
||||
|
||||
Message-id: <e2ecb6aac0f162d113a64f78a026cfaf3d2d30ed.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276473
|
||||
O-Subject: [RHEL-8.2 PATCH 52/78] bnxt_en: Remove the -1 error return code from bnxt_hwrm_do_send_msg().
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
Replace the non-standard -1 code with -EBUSY when there is no firmware
|
||||
response after waiting for the maximum timeout.
|
||||
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit a935cb7ec449bca1adf806d7fb00f5032b63c6e0)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:17.921492857 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:18.179490489 +0100
|
||||
@@ -4167,7 +4167,7 @@
|
||||
if (bp->hwrm_intr_seq_id != (u16)~seq_id) {
|
||||
netdev_err(bp->dev, "Resp cmpl intr err msg: 0x%x\n",
|
||||
le16_to_cpu(req->req_type));
|
||||
- return -1;
|
||||
+ return -EBUSY;
|
||||
}
|
||||
len = (le32_to_cpu(*resp_len) & HWRM_RESP_LEN_MASK) >>
|
||||
HWRM_RESP_LEN_SFT;
|
||||
@@ -4195,7 +4195,7 @@
|
||||
HWRM_TOTAL_TIMEOUT(i),
|
||||
le16_to_cpu(req->req_type),
|
||||
le16_to_cpu(req->seq_id), len);
|
||||
- return -1;
|
||||
+ return -EBUSY;
|
||||
}
|
||||
|
||||
/* Last byte of resp contains valid bit */
|
||||
@@ -4213,7 +4213,7 @@
|
||||
HWRM_TOTAL_TIMEOUT(i),
|
||||
le16_to_cpu(req->req_type),
|
||||
le16_to_cpu(req->seq_id), len, *valid);
|
||||
- return -1;
|
||||
+ return -EBUSY;
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,404 @@
|
||||
From ba2d2e2bd59c1dcd20c30fa6f05a847dc613b85d Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:23:15 -0400
|
||||
Subject: [PATCH 60/96] [netdrv] bnxt_en: Convert error code in firmware
|
||||
message response to standard code
|
||||
|
||||
Message-id: <6fad2b5f944f9ec2522f438afff3f55d8099ac99.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276478
|
||||
O-Subject: [RHEL-8.2 PATCH 53/78] bnxt_en: Convert error code in firmware message response to standard code.
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
The main firmware messaging function returns the firmware defined error
|
||||
code and many callers have to convert to standard error code for proper
|
||||
propagation to userspace. Convert bnxt_hwrm_do_send_msg() to return
|
||||
standard error code so we can do away with all the special error code
|
||||
handling by the many callers.
|
||||
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit d4f1420d365633490aa134abfe408453d1c7c238)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 60 ++++++++++++++---------
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_dcb.c | 4 --
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c | 8 +--
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 20 ++------
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c | 12 ++---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c | 17 -------
|
||||
6 files changed, 44 insertions(+), 77 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:18.179490489 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:18.306489323 +0100
|
||||
@@ -4053,6 +4053,32 @@
|
||||
req->resp_addr = cpu_to_le64(bp->hwrm_cmd_resp_dma_addr);
|
||||
}
|
||||
|
||||
+static int bnxt_hwrm_to_stderr(u32 hwrm_err)
|
||||
+{
|
||||
+ switch (hwrm_err) {
|
||||
+ case HWRM_ERR_CODE_SUCCESS:
|
||||
+ return 0;
|
||||
+ case HWRM_ERR_CODE_RESOURCE_ACCESS_DENIED:
|
||||
+ return -EACCES;
|
||||
+ case HWRM_ERR_CODE_RESOURCE_ALLOC_ERROR:
|
||||
+ return -ENOSPC;
|
||||
+ case HWRM_ERR_CODE_INVALID_PARAMS:
|
||||
+ case HWRM_ERR_CODE_INVALID_FLAGS:
|
||||
+ case HWRM_ERR_CODE_INVALID_ENABLES:
|
||||
+ case HWRM_ERR_CODE_UNSUPPORTED_TLV:
|
||||
+ case HWRM_ERR_CODE_UNSUPPORTED_OPTION_ERR:
|
||||
+ return -EINVAL;
|
||||
+ case HWRM_ERR_CODE_NO_BUFFER:
|
||||
+ return -ENOMEM;
|
||||
+ case HWRM_ERR_CODE_HOT_RESET_PROGRESS:
|
||||
+ return -EAGAIN;
|
||||
+ case HWRM_ERR_CODE_CMD_NOT_SUPPORTED:
|
||||
+ return -EOPNOTSUPP;
|
||||
+ default:
|
||||
+ return -EIO;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
static int bnxt_hwrm_do_send_msg(struct bnxt *bp, void *msg, u32 msg_len,
|
||||
int timeout, bool silent)
|
||||
{
|
||||
@@ -4227,7 +4253,7 @@
|
||||
netdev_err(bp->dev, "hwrm req_type 0x%x seq id 0x%x error 0x%x\n",
|
||||
le16_to_cpu(resp->req_type),
|
||||
le16_to_cpu(resp->seq_id), rc);
|
||||
- return rc;
|
||||
+ return bnxt_hwrm_to_stderr(rc);
|
||||
}
|
||||
|
||||
int _hwrm_send_message(struct bnxt *bp, void *msg, u32 msg_len, int timeout)
|
||||
@@ -4340,10 +4366,8 @@
|
||||
|
||||
mutex_lock(&bp->hwrm_cmd_lock);
|
||||
rc = _hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
|
||||
- if (rc)
|
||||
- rc = -EIO;
|
||||
- else if (resp->flags &
|
||||
- cpu_to_le32(FUNC_DRV_RGTR_RESP_FLAGS_IF_CHANGE_SUPPORTED))
|
||||
+ if (!rc && (resp->flags &
|
||||
+ cpu_to_le32(FUNC_DRV_RGTR_RESP_FLAGS_IF_CHANGE_SUPPORTED)))
|
||||
bp->fw_cap |= BNXT_FW_CAP_IF_CHANGE;
|
||||
mutex_unlock(&bp->hwrm_cmd_lock);
|
||||
return rc;
|
||||
@@ -4766,7 +4790,7 @@
|
||||
}
|
||||
rc = hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
|
||||
if (rc)
|
||||
- return -EIO;
|
||||
+ return rc;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -5526,7 +5550,7 @@
|
||||
rc = _hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
|
||||
if (rc) {
|
||||
mutex_unlock(&bp->hwrm_cmd_lock);
|
||||
- return -EIO;
|
||||
+ return rc;
|
||||
}
|
||||
|
||||
hw_resc->resv_tx_rings = le16_to_cpu(resp->alloc_tx_rings);
|
||||
@@ -5690,7 +5714,7 @@
|
||||
|
||||
rc = hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
|
||||
if (rc)
|
||||
- return -ENOMEM;
|
||||
+ return rc;
|
||||
|
||||
if (bp->hwrm_spec_code < 0x10601)
|
||||
bp->hw_resc.resv_tx_rings = tx_rings;
|
||||
@@ -5715,7 +5739,7 @@
|
||||
cp_rings, stats, vnics);
|
||||
rc = hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
|
||||
if (rc)
|
||||
- return -ENOMEM;
|
||||
+ return rc;
|
||||
|
||||
rc = bnxt_hwrm_get_rings(bp);
|
||||
return rc;
|
||||
@@ -5896,9 +5920,7 @@
|
||||
|
||||
req.flags = cpu_to_le32(flags);
|
||||
rc = hwrm_send_message_silent(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
|
||||
- if (rc)
|
||||
- return -ENOMEM;
|
||||
- return 0;
|
||||
+ return rc;
|
||||
}
|
||||
|
||||
static int bnxt_hwrm_check_pf_rings(struct bnxt *bp, int tx_rings, int rx_rings,
|
||||
@@ -5926,9 +5948,7 @@
|
||||
|
||||
req.flags = cpu_to_le32(flags);
|
||||
rc = hwrm_send_message_silent(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
|
||||
- if (rc)
|
||||
- return -ENOMEM;
|
||||
- return 0;
|
||||
+ return rc;
|
||||
}
|
||||
|
||||
static int bnxt_hwrm_check_rings(struct bnxt *bp, int tx_rings, int rx_rings,
|
||||
@@ -6488,8 +6508,6 @@
|
||||
}
|
||||
req.flags = cpu_to_le32(flags);
|
||||
rc = hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
|
||||
- if (rc)
|
||||
- rc = -EIO;
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -6751,10 +6769,8 @@
|
||||
mutex_lock(&bp->hwrm_cmd_lock);
|
||||
rc = _hwrm_send_message_silent(bp, &req, sizeof(req),
|
||||
HWRM_CMD_TIMEOUT);
|
||||
- if (rc) {
|
||||
- rc = -EIO;
|
||||
+ if (rc)
|
||||
goto hwrm_func_resc_qcaps_exit;
|
||||
- }
|
||||
|
||||
hw_resc->max_tx_sch_inputs = le16_to_cpu(resp->max_tx_scheduler_inputs);
|
||||
if (!all)
|
||||
@@ -7262,8 +7278,6 @@
|
||||
else
|
||||
return -EINVAL;
|
||||
rc = hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
|
||||
- if (rc)
|
||||
- rc = -EIO;
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -7283,8 +7297,6 @@
|
||||
req.options = FUNC_CFG_REQ_OPTIONS_CACHE_LINESIZE_SIZE_128;
|
||||
|
||||
rc = hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
|
||||
- if (rc)
|
||||
- rc = -EIO;
|
||||
return rc;
|
||||
}
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_dcb.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_dcb.c 2020-02-06 16:23:12.277544664 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_dcb.c 2020-02-06 16:23:18.306489323 +0100
|
||||
@@ -377,8 +377,6 @@
|
||||
set.data_len = cpu_to_le16(sizeof(*data) + sizeof(*fw_app) * n);
|
||||
set.hdr_cnt = 1;
|
||||
rc = hwrm_send_message(bp, &set, sizeof(set), HWRM_CMD_TIMEOUT);
|
||||
- if (rc)
|
||||
- rc = -EIO;
|
||||
|
||||
set_app_exit:
|
||||
dma_free_coherent(&bp->pdev->dev, data_len, data, mapping);
|
||||
@@ -433,8 +431,6 @@
|
||||
dscp2pri->pri = app->priority;
|
||||
req.entry_cnt = cpu_to_le16(1);
|
||||
rc = hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
|
||||
- if (rc)
|
||||
- rc = -EIO;
|
||||
dma_free_coherent(&bp->pdev->dev, sizeof(*dscp2pri), dscp2pri,
|
||||
mapping);
|
||||
return rc;
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c 2020-02-06 16:23:15.606514107 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c 2020-02-06 16:23:18.306489323 +0100
|
||||
@@ -109,13 +109,9 @@
|
||||
memcpy(buf, data_addr, bytesize);
|
||||
|
||||
dma_free_coherent(&bp->pdev->dev, bytesize, data_addr, data_dma_addr);
|
||||
- if (rc == HWRM_ERR_CODE_RESOURCE_ACCESS_DENIED) {
|
||||
+ if (rc == -EACCES)
|
||||
netdev_err(bp->dev, "PF does not have admin privileges to modify NVM config\n");
|
||||
- return -EACCES;
|
||||
- } else if (rc) {
|
||||
- return -EIO;
|
||||
- }
|
||||
- return 0;
|
||||
+ return rc;
|
||||
}
|
||||
|
||||
static int bnxt_dl_nvm_param_get(struct devlink *dl, u32 id,
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c 2020-02-06 16:23:18.049491682 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c 2020-02-06 16:23:18.307489314 +0100
|
||||
@@ -1743,12 +1743,8 @@
|
||||
rc = hwrm_send_message(bp, &req, sizeof(req), FLASH_NVRAM_TIMEOUT);
|
||||
dma_free_coherent(&bp->pdev->dev, data_len, kmem, dma_handle);
|
||||
|
||||
- if (rc == HWRM_ERR_CODE_RESOURCE_ACCESS_DENIED) {
|
||||
+ if (rc == -EACCES)
|
||||
bnxt_print_admin_err(bp);
|
||||
- rc = -EACCES;
|
||||
- } else if (rc) {
|
||||
- rc = -EIO;
|
||||
- }
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -1798,12 +1794,8 @@
|
||||
}
|
||||
|
||||
rc = hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
|
||||
- if (rc == HWRM_ERR_CODE_RESOURCE_ACCESS_DENIED) {
|
||||
+ if (rc == -EACCES)
|
||||
bnxt_print_admin_err(bp);
|
||||
- rc = -EACCES;
|
||||
- } else if (rc) {
|
||||
- rc = -EIO;
|
||||
- }
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -2098,12 +2090,8 @@
|
||||
flash_pkg_exit:
|
||||
mutex_unlock(&bp->hwrm_cmd_lock);
|
||||
err_exit:
|
||||
- if (hwrm_err == HWRM_ERR_CODE_RESOURCE_ACCESS_DENIED) {
|
||||
+ if (hwrm_err == -EACCES)
|
||||
bnxt_print_admin_err(bp);
|
||||
- rc = -EACCES;
|
||||
- } else if (hwrm_err) {
|
||||
- rc = -EOPNOTSUPP;
|
||||
- }
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -2642,8 +2630,6 @@
|
||||
led_cfg->led_group_id = bp->leds[i].led_group_id;
|
||||
}
|
||||
rc = hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
|
||||
- if (rc)
|
||||
- rc = -EIO;
|
||||
return rc;
|
||||
}
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c 2020-02-06 16:22:54.758705473 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c 2020-02-06 16:23:18.307489314 +0100
|
||||
@@ -133,7 +133,7 @@
|
||||
rc = _hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
|
||||
if (rc) {
|
||||
mutex_unlock(&bp->hwrm_cmd_lock);
|
||||
- return -EIO;
|
||||
+ return rc;
|
||||
}
|
||||
vf->func_qcfg_flags = le16_to_cpu(resp->flags);
|
||||
mutex_unlock(&bp->hwrm_cmd_lock);
|
||||
@@ -164,9 +164,7 @@
|
||||
else
|
||||
req.flags = cpu_to_le32(FUNC_CFG_REQ_FLAGS_TRUSTED_VF_DISABLE);
|
||||
rc = hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
|
||||
- if (rc)
|
||||
- return -EIO;
|
||||
- return 0;
|
||||
+ return rc;
|
||||
}
|
||||
|
||||
int bnxt_set_vf_trust(struct net_device *dev, int vf_id, bool trusted)
|
||||
@@ -564,10 +562,8 @@
|
||||
req.vf_id = cpu_to_le16(pf->first_vf_id + i);
|
||||
rc = _hwrm_send_message(bp, &req, sizeof(req),
|
||||
HWRM_CMD_TIMEOUT);
|
||||
- if (rc) {
|
||||
- rc = -ENOMEM;
|
||||
+ if (rc)
|
||||
break;
|
||||
- }
|
||||
pf->active_vfs = i + 1;
|
||||
pf->vf[i].fw_fid = pf->first_vf_id + i;
|
||||
}
|
||||
@@ -664,8 +660,6 @@
|
||||
total_vf_tx_rings += vf_tx_rsvd;
|
||||
}
|
||||
mutex_unlock(&bp->hwrm_cmd_lock);
|
||||
- if (rc)
|
||||
- rc = -ENOMEM;
|
||||
if (pf->active_vfs) {
|
||||
hw_resc->max_tx_rings -= total_vf_tx_rings;
|
||||
hw_resc->max_rx_rings -= vf_rx_rings * num_vfs;
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c 2020-02-06 16:23:15.476515300 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c 2020-02-06 16:23:18.307489314 +0100
|
||||
@@ -319,8 +319,6 @@
|
||||
if (rc)
|
||||
netdev_info(bp->dev, "%s: Error rc=%d", __func__, rc);
|
||||
|
||||
- if (rc)
|
||||
- rc = -EIO;
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -515,11 +513,6 @@
|
||||
}
|
||||
}
|
||||
mutex_unlock(&bp->hwrm_cmd_lock);
|
||||
-
|
||||
- if (rc == HWRM_ERR_CODE_RESOURCE_ALLOC_ERROR)
|
||||
- rc = -ENOSPC;
|
||||
- else if (rc)
|
||||
- rc = -EIO;
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -591,8 +584,6 @@
|
||||
}
|
||||
mutex_unlock(&bp->hwrm_cmd_lock);
|
||||
|
||||
- if (rc)
|
||||
- rc = -EIO;
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -609,8 +600,6 @@
|
||||
if (rc)
|
||||
netdev_info(bp->dev, "%s: Error rc=%d", __func__, rc);
|
||||
|
||||
- if (rc)
|
||||
- rc = -EIO;
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -660,8 +649,6 @@
|
||||
}
|
||||
mutex_unlock(&bp->hwrm_cmd_lock);
|
||||
|
||||
- if (rc)
|
||||
- rc = -EIO;
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -678,8 +665,6 @@
|
||||
if (rc)
|
||||
netdev_info(bp->dev, "%s: Error rc=%d", __func__, rc);
|
||||
|
||||
- if (rc)
|
||||
- rc = -EIO;
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -1457,8 +1442,6 @@
|
||||
}
|
||||
mutex_unlock(&bp->hwrm_cmd_lock);
|
||||
|
||||
- if (rc)
|
||||
- rc = -EIO;
|
||||
return rc;
|
||||
}
|
||||
|
@ -0,0 +1,169 @@
|
||||
From 345da077d523267494a9414944cde11bef6ff3cf Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:23:16 -0400
|
||||
Subject: [PATCH 61/96] [netdrv] bnxt_en: Simplify error checking in the SR-IOV
|
||||
message forwarding functions
|
||||
|
||||
Message-id: <0c9d8a2c5d2d4eee088584ec4dc51aecd8c624a2.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276479
|
||||
O-Subject: [RHEL-8.2 PATCH 54/78] bnxt_en: Simplify error checking in the SR-IOV message forwarding functions.
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
There are 4 functions handling message forwarding for SR-IOV. They
|
||||
check for non-zero firmware response code and then return -1. There
|
||||
is no need to do this anymore. The main messaging function will
|
||||
now return standard error code. Since we don't need to examine the
|
||||
response, we can use the hwrm_send_message() variant which will
|
||||
take the mutex automatically.
|
||||
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit a798302d56f56fb7ad6a01f64f495aeafeb6c0f0)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c | 72 +++----------------------
|
||||
1 file changed, 8 insertions(+), 64 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c 2020-02-06 16:23:18.307489314 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c 2020-02-06 16:23:18.477487753 +0100
|
||||
@@ -25,7 +25,6 @@
|
||||
static int bnxt_hwrm_fwd_async_event_cmpl(struct bnxt *bp,
|
||||
struct bnxt_vf_info *vf, u16 event_id)
|
||||
{
|
||||
- struct hwrm_fwd_async_event_cmpl_output *resp = bp->hwrm_cmd_resp_addr;
|
||||
struct hwrm_fwd_async_event_cmpl_input req = {0};
|
||||
struct hwrm_async_event_cmpl *async_cmpl;
|
||||
int rc = 0;
|
||||
@@ -40,23 +39,10 @@
|
||||
async_cmpl->type = cpu_to_le16(ASYNC_EVENT_CMPL_TYPE_HWRM_ASYNC_EVENT);
|
||||
async_cmpl->event_id = cpu_to_le16(event_id);
|
||||
|
||||
- mutex_lock(&bp->hwrm_cmd_lock);
|
||||
- rc = _hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
|
||||
-
|
||||
- if (rc) {
|
||||
+ rc = hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
|
||||
+ if (rc)
|
||||
netdev_err(bp->dev, "hwrm_fwd_async_event_cmpl failed. rc:%d\n",
|
||||
rc);
|
||||
- goto fwd_async_event_cmpl_exit;
|
||||
- }
|
||||
-
|
||||
- if (resp->error_code) {
|
||||
- netdev_err(bp->dev, "hwrm_fwd_async_event_cmpl error %d\n",
|
||||
- resp->error_code);
|
||||
- rc = -1;
|
||||
- }
|
||||
-
|
||||
-fwd_async_event_cmpl_exit:
|
||||
- mutex_unlock(&bp->hwrm_cmd_lock);
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -864,7 +850,6 @@
|
||||
{
|
||||
int rc = 0;
|
||||
struct hwrm_fwd_resp_input req = {0};
|
||||
- struct hwrm_fwd_resp_output *resp = bp->hwrm_cmd_resp_addr;
|
||||
|
||||
if (BNXT_FWD_RESP_SIZE_ERR(msg_size))
|
||||
return -EINVAL;
|
||||
@@ -879,22 +864,9 @@
|
||||
req.encap_resp_cmpl_ring = encap_resp_cpr;
|
||||
memcpy(req.encap_resp, encap_resp, msg_size);
|
||||
|
||||
- mutex_lock(&bp->hwrm_cmd_lock);
|
||||
- rc = _hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
|
||||
-
|
||||
- if (rc) {
|
||||
+ rc = hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
|
||||
+ if (rc)
|
||||
netdev_err(bp->dev, "hwrm_fwd_resp failed. rc:%d\n", rc);
|
||||
- goto fwd_resp_exit;
|
||||
- }
|
||||
-
|
||||
- if (resp->error_code) {
|
||||
- netdev_err(bp->dev, "hwrm_fwd_resp error %d\n",
|
||||
- resp->error_code);
|
||||
- rc = -1;
|
||||
- }
|
||||
-
|
||||
-fwd_resp_exit:
|
||||
- mutex_unlock(&bp->hwrm_cmd_lock);
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -903,7 +875,6 @@
|
||||
{
|
||||
int rc = 0;
|
||||
struct hwrm_reject_fwd_resp_input req = {0};
|
||||
- struct hwrm_reject_fwd_resp_output *resp = bp->hwrm_cmd_resp_addr;
|
||||
|
||||
if (BNXT_REJ_FWD_RESP_SIZE_ERR(msg_size))
|
||||
return -EINVAL;
|
||||
@@ -914,22 +885,9 @@
|
||||
req.encap_resp_target_id = cpu_to_le16(vf->fw_fid);
|
||||
memcpy(req.encap_request, vf->hwrm_cmd_req_addr, msg_size);
|
||||
|
||||
- mutex_lock(&bp->hwrm_cmd_lock);
|
||||
- rc = _hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
|
||||
-
|
||||
- if (rc) {
|
||||
+ rc = hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
|
||||
+ if (rc)
|
||||
netdev_err(bp->dev, "hwrm_fwd_err_resp failed. rc:%d\n", rc);
|
||||
- goto fwd_err_resp_exit;
|
||||
- }
|
||||
-
|
||||
- if (resp->error_code) {
|
||||
- netdev_err(bp->dev, "hwrm_fwd_err_resp error %d\n",
|
||||
- resp->error_code);
|
||||
- rc = -1;
|
||||
- }
|
||||
-
|
||||
-fwd_err_resp_exit:
|
||||
- mutex_unlock(&bp->hwrm_cmd_lock);
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -938,7 +896,6 @@
|
||||
{
|
||||
int rc = 0;
|
||||
struct hwrm_exec_fwd_resp_input req = {0};
|
||||
- struct hwrm_exec_fwd_resp_output *resp = bp->hwrm_cmd_resp_addr;
|
||||
|
||||
if (BNXT_EXEC_FWD_RESP_SIZE_ERR(msg_size))
|
||||
return -EINVAL;
|
||||
@@ -949,22 +906,9 @@
|
||||
req.encap_resp_target_id = cpu_to_le16(vf->fw_fid);
|
||||
memcpy(req.encap_request, vf->hwrm_cmd_req_addr, msg_size);
|
||||
|
||||
- mutex_lock(&bp->hwrm_cmd_lock);
|
||||
- rc = _hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
|
||||
-
|
||||
- if (rc) {
|
||||
+ rc = hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
|
||||
+ if (rc)
|
||||
netdev_err(bp->dev, "hwrm_exec_fw_resp failed. rc:%d\n", rc);
|
||||
- goto exec_fwd_resp_exit;
|
||||
- }
|
||||
-
|
||||
- if (resp->error_code) {
|
||||
- netdev_err(bp->dev, "hwrm_exec_fw_resp error %d\n",
|
||||
- resp->error_code);
|
||||
- rc = -1;
|
||||
- }
|
||||
-
|
||||
-exec_fwd_resp_exit:
|
||||
- mutex_unlock(&bp->hwrm_cmd_lock);
|
||||
return rc;
|
||||
}
|
||||
|
@ -0,0 +1,91 @@
|
||||
From 7368c8c1ff8c532df744d7e183507309cd4647f9 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:23:17 -0400
|
||||
Subject: [PATCH 62/96] [netdrv] bnxt_en: Suppress all error messages in
|
||||
hwrm_do_send_msg() in silent mode
|
||||
|
||||
Message-id: <8cb780ae7e85c9c31455263c9cb89b904e44e2c0.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276485
|
||||
O-Subject: [RHEL-8.2 PATCH 55/78] bnxt_en: Suppress all error messages in hwrm_do_send_msg() in silent mode.
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
If the silent parameter is set, suppress all messages when there is
|
||||
no response from firmware. When polling for firmware to come out of
|
||||
reset, no response may be normal and we want to suppress the error
|
||||
messages. Also, don't poll for the firmware DMA response if Bus Master
|
||||
is disabled. This is in preparation for error recovery when firmware
|
||||
may be in error or reset state or Bus Master is disabled.
|
||||
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit 5bedb5296e33e889818d77c8ec69040481fab157)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 27 +++++++++++++++++----------
|
||||
1 file changed, 17 insertions(+), 10 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:18.306489323 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:18.605486578 +0100
|
||||
@@ -4160,6 +4160,9 @@
|
||||
/* Ring channel doorbell */
|
||||
writel(1, bp->bar0 + doorbell_offset);
|
||||
|
||||
+ if (!pci_is_enabled(bp->pdev))
|
||||
+ return 0;
|
||||
+
|
||||
if (!timeout)
|
||||
timeout = DFLT_HWRM_CMD_TIMEOUT;
|
||||
/* convert timeout to usec */
|
||||
@@ -4191,8 +4194,9 @@
|
||||
}
|
||||
|
||||
if (bp->hwrm_intr_seq_id != (u16)~seq_id) {
|
||||
- netdev_err(bp->dev, "Resp cmpl intr err msg: 0x%x\n",
|
||||
- le16_to_cpu(req->req_type));
|
||||
+ if (!silent)
|
||||
+ netdev_err(bp->dev, "Resp cmpl intr err msg: 0x%x\n",
|
||||
+ le16_to_cpu(req->req_type));
|
||||
return -EBUSY;
|
||||
}
|
||||
len = (le32_to_cpu(*resp_len) & HWRM_RESP_LEN_MASK) >>
|
||||
@@ -4217,10 +4221,11 @@
|
||||
}
|
||||
|
||||
if (i >= tmo_count) {
|
||||
- netdev_err(bp->dev, "Error (timeout: %d) msg {0x%x 0x%x} len:%d\n",
|
||||
- HWRM_TOTAL_TIMEOUT(i),
|
||||
- le16_to_cpu(req->req_type),
|
||||
- le16_to_cpu(req->seq_id), len);
|
||||
+ if (!silent)
|
||||
+ netdev_err(bp->dev, "Error (timeout: %d) msg {0x%x 0x%x} len:%d\n",
|
||||
+ HWRM_TOTAL_TIMEOUT(i),
|
||||
+ le16_to_cpu(req->req_type),
|
||||
+ le16_to_cpu(req->seq_id), len);
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
@@ -4235,10 +4240,12 @@
|
||||
}
|
||||
|
||||
if (j >= HWRM_VALID_BIT_DELAY_USEC) {
|
||||
- netdev_err(bp->dev, "Error (timeout: %d) msg {0x%x 0x%x} len:%d v:%d\n",
|
||||
- HWRM_TOTAL_TIMEOUT(i),
|
||||
- le16_to_cpu(req->req_type),
|
||||
- le16_to_cpu(req->seq_id), len, *valid);
|
||||
+ if (!silent)
|
||||
+ netdev_err(bp->dev, "Error (timeout: %d) msg {0x%x 0x%x} len:%d v:%d\n",
|
||||
+ HWRM_TOTAL_TIMEOUT(i),
|
||||
+ le16_to_cpu(req->req_type),
|
||||
+ le16_to_cpu(req->seq_id), len,
|
||||
+ *valid);
|
||||
return -EBUSY;
|
||||
}
|
||||
}
|
@ -0,0 +1,341 @@
|
||||
From 3b43bc011b31d52e3923a4eac7951a8b4e528acb Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:23:18 -0400
|
||||
Subject: [PATCH 63/96] [netdrv] bnxt_en: Prepare bnxt_init_one() to be called
|
||||
multiple times
|
||||
|
||||
Message-id: <1d65105ec743b3e52499fccd91176b5b117cf449.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276482
|
||||
O-Subject: [RHEL-8.2 PATCH 56/78] bnxt_en: Prepare bnxt_init_one() to be called multiple times.
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
In preparation for the new firmware reset feature, some of the logic
|
||||
in bnxt_init_one() and related functions will be called again after
|
||||
firmware has reset. Reset some of the flags and capabilities so that
|
||||
everything that can change can be re-initialized. Refactor some
|
||||
functions to probe firmware versions and capabilities. Check some
|
||||
buffers before allocating as they may have been allocated previously.
|
||||
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit ba642ab773db97c32293547485f562d2dfc06666)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 126 +++++++++++++++-------
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_dcb.c | 2 +
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 5 +-
|
||||
3 files changed, 93 insertions(+), 40 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:18.605486578 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:18.730485431 +0100
|
||||
@@ -3560,6 +3560,9 @@
|
||||
{
|
||||
struct pci_dev *pdev = bp->pdev;
|
||||
|
||||
+ if (bp->hwrm_cmd_kong_resp_addr)
|
||||
+ return 0;
|
||||
+
|
||||
bp->hwrm_cmd_kong_resp_addr =
|
||||
dma_alloc_coherent(&pdev->dev, PAGE_SIZE,
|
||||
&bp->hwrm_cmd_kong_resp_dma_addr,
|
||||
@@ -3599,6 +3602,9 @@
|
||||
{
|
||||
struct pci_dev *pdev = bp->pdev;
|
||||
|
||||
+ if (bp->hwrm_short_cmd_req_addr)
|
||||
+ return 0;
|
||||
+
|
||||
bp->hwrm_short_cmd_req_addr =
|
||||
dma_alloc_coherent(&pdev->dev, bp->hwrm_max_ext_req_len,
|
||||
&bp->hwrm_short_cmd_req_dma_addr,
|
||||
@@ -5022,6 +5028,7 @@
|
||||
int rc;
|
||||
|
||||
bp->hw_ring_stats_size = sizeof(struct ctx_hw_stats);
|
||||
+ bp->flags &= ~(BNXT_FLAG_NEW_RSS_CAP | BNXT_FLAG_ROCE_MIRROR_CAP);
|
||||
if (bp->hwrm_spec_code < 0x10600)
|
||||
return 0;
|
||||
|
||||
@@ -6876,6 +6883,7 @@
|
||||
pf->max_tx_wm_flows = le32_to_cpu(resp->max_tx_wm_flows);
|
||||
pf->max_rx_em_flows = le32_to_cpu(resp->max_rx_em_flows);
|
||||
pf->max_rx_wm_flows = le32_to_cpu(resp->max_rx_wm_flows);
|
||||
+ bp->flags &= ~BNXT_FLAG_WOL_CAP;
|
||||
if (flags & FUNC_QCAPS_RESP_FLAGS_WOL_MAGICPKT_SUPPORTED)
|
||||
bp->flags |= BNXT_FLAG_WOL_CAP;
|
||||
} else {
|
||||
@@ -7004,20 +7012,30 @@
|
||||
return rc;
|
||||
}
|
||||
|
||||
-static int bnxt_hwrm_ver_get(struct bnxt *bp)
|
||||
+static int __bnxt_hwrm_ver_get(struct bnxt *bp, bool silent)
|
||||
{
|
||||
- int rc;
|
||||
struct hwrm_ver_get_input req = {0};
|
||||
- struct hwrm_ver_get_output *resp = bp->hwrm_cmd_resp_addr;
|
||||
- u32 dev_caps_cfg;
|
||||
+ int rc;
|
||||
|
||||
- bp->hwrm_max_req_len = HWRM_MAX_REQ_LEN;
|
||||
bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_VER_GET, -1, -1);
|
||||
req.hwrm_intf_maj = HWRM_VERSION_MAJOR;
|
||||
req.hwrm_intf_min = HWRM_VERSION_MINOR;
|
||||
req.hwrm_intf_upd = HWRM_VERSION_UPDATE;
|
||||
+
|
||||
+ rc = bnxt_hwrm_do_send_msg(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT,
|
||||
+ silent);
|
||||
+ return rc;
|
||||
+}
|
||||
+
|
||||
+static int bnxt_hwrm_ver_get(struct bnxt *bp)
|
||||
+{
|
||||
+ struct hwrm_ver_get_output *resp = bp->hwrm_cmd_resp_addr;
|
||||
+ u32 dev_caps_cfg;
|
||||
+ int rc;
|
||||
+
|
||||
+ bp->hwrm_max_req_len = HWRM_MAX_REQ_LEN;
|
||||
mutex_lock(&bp->hwrm_cmd_lock);
|
||||
- rc = _hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
|
||||
+ rc = __bnxt_hwrm_ver_get(bp, false);
|
||||
if (rc)
|
||||
goto hwrm_ver_get_exit;
|
||||
|
||||
@@ -8186,6 +8204,9 @@
|
||||
struct hwrm_port_phy_qcaps_output *resp = bp->hwrm_cmd_resp_addr;
|
||||
struct bnxt_link_info *link_info = &bp->link_info;
|
||||
|
||||
+ bp->flags &= ~BNXT_FLAG_EEE_CAP;
|
||||
+ if (bp->test_info)
|
||||
+ bp->test_info->flags &= ~BNXT_TEST_FL_EXT_LPBK;
|
||||
if (bp->hwrm_spec_code < 0x10201)
|
||||
return 0;
|
||||
|
||||
@@ -8551,6 +8572,7 @@
|
||||
struct bnxt_pf_info *pf = &bp->pf;
|
||||
int rc;
|
||||
|
||||
+ bp->num_leds = 0;
|
||||
if (BNXT_VF(bp) || bp->hwrm_spec_code < 0x10601)
|
||||
return 0;
|
||||
|
||||
@@ -8645,6 +8667,7 @@
|
||||
{
|
||||
u16 handle = 0;
|
||||
|
||||
+ bp->wol = 0;
|
||||
if (!BNXT_PF(bp) || !(bp->flags & BNXT_FLAG_WOL_CAP))
|
||||
return;
|
||||
|
||||
@@ -8691,6 +8714,9 @@
|
||||
{
|
||||
struct pci_dev *pdev = bp->pdev;
|
||||
|
||||
+ if (bp->hwmon_dev)
|
||||
+ return;
|
||||
+
|
||||
bp->hwmon_dev = hwmon_device_register_with_groups(&pdev->dev,
|
||||
DRV_MODULE_NAME, bp,
|
||||
bnxt_groups);
|
||||
@@ -10007,6 +10033,53 @@
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static void bnxt_set_dflt_rss_hash_type(struct bnxt *bp)
|
||||
+{
|
||||
+ bp->flags &= ~BNXT_FLAG_UDP_RSS_CAP;
|
||||
+ bp->rss_hash_cfg = VNIC_RSS_CFG_REQ_HASH_TYPE_IPV4 |
|
||||
+ VNIC_RSS_CFG_REQ_HASH_TYPE_TCP_IPV4 |
|
||||
+ VNIC_RSS_CFG_REQ_HASH_TYPE_IPV6 |
|
||||
+ VNIC_RSS_CFG_REQ_HASH_TYPE_TCP_IPV6;
|
||||
+ if (BNXT_CHIP_P4(bp) && bp->hwrm_spec_code >= 0x10501) {
|
||||
+ bp->flags |= BNXT_FLAG_UDP_RSS_CAP;
|
||||
+ bp->rss_hash_cfg |= VNIC_RSS_CFG_REQ_HASH_TYPE_UDP_IPV4 |
|
||||
+ VNIC_RSS_CFG_REQ_HASH_TYPE_UDP_IPV6;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static void bnxt_set_dflt_rfs(struct bnxt *bp)
|
||||
+{
|
||||
+ struct net_device *dev = bp->dev;
|
||||
+
|
||||
+ dev->hw_features &= ~NETIF_F_NTUPLE;
|
||||
+ dev->features &= ~NETIF_F_NTUPLE;
|
||||
+ bp->flags &= ~BNXT_FLAG_RFS;
|
||||
+ if (bnxt_rfs_supported(bp)) {
|
||||
+ dev->hw_features |= NETIF_F_NTUPLE;
|
||||
+ if (bnxt_rfs_capable(bp)) {
|
||||
+ bp->flags |= BNXT_FLAG_RFS;
|
||||
+ dev->features |= NETIF_F_NTUPLE;
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static void bnxt_fw_init_one_p3(struct bnxt *bp)
|
||||
+{
|
||||
+ struct pci_dev *pdev = bp->pdev;
|
||||
+
|
||||
+ bnxt_set_dflt_rss_hash_type(bp);
|
||||
+ bnxt_set_dflt_rfs(bp);
|
||||
+
|
||||
+ bnxt_get_wol_settings(bp);
|
||||
+ if (bp->flags & BNXT_FLAG_WOL_CAP)
|
||||
+ device_set_wakeup_enable(&pdev->dev, bp->wol);
|
||||
+ else
|
||||
+ device_set_wakeup_capable(&pdev->dev, false);
|
||||
+
|
||||
+ bnxt_hwrm_set_cache_line_size(bp, cache_line_size());
|
||||
+ bnxt_hwrm_coal_params_qcaps(bp);
|
||||
+}
|
||||
+
|
||||
static int bnxt_init_board(struct pci_dev *pdev, struct net_device *dev)
|
||||
{
|
||||
int rc;
|
||||
@@ -10636,7 +10709,7 @@
|
||||
free_netdev(dev);
|
||||
}
|
||||
|
||||
-static int bnxt_probe_phy(struct bnxt *bp)
|
||||
+static int bnxt_probe_phy(struct bnxt *bp, bool fw_dflt)
|
||||
{
|
||||
int rc = 0;
|
||||
struct bnxt_link_info *link_info = &bp->link_info;
|
||||
@@ -10647,8 +10720,6 @@
|
||||
rc);
|
||||
return rc;
|
||||
}
|
||||
- mutex_init(&bp->link_lock);
|
||||
-
|
||||
rc = bnxt_update_link(bp, false);
|
||||
if (rc) {
|
||||
netdev_err(bp->dev, "Probe phy can't update link (rc: %x)\n",
|
||||
@@ -10662,6 +10733,9 @@
|
||||
if (link_info->auto_link_speeds && !link_info->support_auto_speeds)
|
||||
link_info->support_auto_speeds = link_info->support_speeds;
|
||||
|
||||
+ if (!fw_dflt)
|
||||
+ return 0;
|
||||
+
|
||||
/*initialize the ethool setting copy with NVM settings */
|
||||
if (BNXT_AUTO_MODE(link_info->auto_mode)) {
|
||||
link_info->autoneg = BNXT_AUTONEG_SPEED;
|
||||
@@ -10682,7 +10756,7 @@
|
||||
link_info->auto_pause_setting & BNXT_LINK_PAUSE_BOTH;
|
||||
else
|
||||
link_info->req_flow_ctrl = link_info->force_pause_setting;
|
||||
- return rc;
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
static int bnxt_get_max_irq(struct pci_dev *pdev)
|
||||
@@ -10986,6 +11060,7 @@
|
||||
goto init_err_pci_clean;
|
||||
|
||||
mutex_init(&bp->hwrm_cmd_lock);
|
||||
+ mutex_init(&bp->link_lock);
|
||||
|
||||
rc = bnxt_fw_init_one_p1(bp);
|
||||
if (rc)
|
||||
@@ -11061,7 +11136,7 @@
|
||||
dev->min_mtu = ETH_ZLEN;
|
||||
dev->max_mtu = bp->max_mtu;
|
||||
|
||||
- rc = bnxt_probe_phy(bp);
|
||||
+ rc = bnxt_probe_phy(bp, true);
|
||||
if (rc)
|
||||
goto init_err_pci_clean;
|
||||
|
||||
@@ -11075,24 +11150,7 @@
|
||||
goto init_err_pci_clean;
|
||||
}
|
||||
|
||||
- /* Default RSS hash cfg. */
|
||||
- bp->rss_hash_cfg = VNIC_RSS_CFG_REQ_HASH_TYPE_IPV4 |
|
||||
- VNIC_RSS_CFG_REQ_HASH_TYPE_TCP_IPV4 |
|
||||
- VNIC_RSS_CFG_REQ_HASH_TYPE_IPV6 |
|
||||
- VNIC_RSS_CFG_REQ_HASH_TYPE_TCP_IPV6;
|
||||
- if (BNXT_CHIP_P4(bp) && bp->hwrm_spec_code >= 0x10501) {
|
||||
- bp->flags |= BNXT_FLAG_UDP_RSS_CAP;
|
||||
- bp->rss_hash_cfg |= VNIC_RSS_CFG_REQ_HASH_TYPE_UDP_IPV4 |
|
||||
- VNIC_RSS_CFG_REQ_HASH_TYPE_UDP_IPV6;
|
||||
- }
|
||||
-
|
||||
- if (bnxt_rfs_supported(bp)) {
|
||||
- dev->hw_features |= NETIF_F_NTUPLE;
|
||||
- if (bnxt_rfs_capable(bp)) {
|
||||
- bp->flags |= BNXT_FLAG_RFS;
|
||||
- dev->features |= NETIF_F_NTUPLE;
|
||||
- }
|
||||
- }
|
||||
+ bnxt_fw_init_one_p3(bp);
|
||||
|
||||
if (dev->hw_features & NETIF_F_HW_VLAN_CTAG_RX)
|
||||
bp->flags |= BNXT_FLAG_STRIP_VLAN;
|
||||
@@ -11106,16 +11164,6 @@
|
||||
*/
|
||||
bp->tx_nr_rings_per_tc = bp->tx_nr_rings;
|
||||
|
||||
- bnxt_get_wol_settings(bp);
|
||||
- if (bp->flags & BNXT_FLAG_WOL_CAP)
|
||||
- device_set_wakeup_enable(&pdev->dev, bp->wol);
|
||||
- else
|
||||
- device_set_wakeup_capable(&pdev->dev, false);
|
||||
-
|
||||
- bnxt_hwrm_set_cache_line_size(bp, cache_line_size());
|
||||
-
|
||||
- bnxt_hwrm_coal_params_qcaps(bp);
|
||||
-
|
||||
if (BNXT_PF(bp)) {
|
||||
if (!bnxt_pf_wq) {
|
||||
bnxt_pf_wq =
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_dcb.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_dcb.c 2020-02-06 16:23:18.306489323 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_dcb.c 2020-02-06 16:23:18.730485431 +0100
|
||||
@@ -389,6 +389,7 @@
|
||||
struct hwrm_queue_dscp_qcaps_input req = {0};
|
||||
int rc;
|
||||
|
||||
+ bp->max_dscp_value = 0;
|
||||
if (bp->hwrm_spec_code < 0x10800 || BNXT_VF(bp))
|
||||
return 0;
|
||||
|
||||
@@ -718,6 +719,7 @@
|
||||
|
||||
void bnxt_dcb_init(struct bnxt *bp)
|
||||
{
|
||||
+ bp->dcbx_cap = 0;
|
||||
if (bp->hwrm_spec_code < 0x10501)
|
||||
return;
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c 2020-02-06 16:23:18.307489314 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c 2020-02-06 16:23:18.730485431 +0100
|
||||
@@ -3350,6 +3350,7 @@
|
||||
if (!(bp->fw_cap & BNXT_FW_CAP_PKG_VER))
|
||||
bnxt_get_pkgver(dev);
|
||||
|
||||
+ bp->num_tests = 0;
|
||||
if (bp->hwrm_spec_code < 0x10704 || !BNXT_SINGLE_PF(bp))
|
||||
return;
|
||||
|
||||
@@ -3359,7 +3360,9 @@
|
||||
if (rc)
|
||||
goto ethtool_init_exit;
|
||||
|
||||
- test_info = kzalloc(sizeof(*bp->test_info), GFP_KERNEL);
|
||||
+ test_info = bp->test_info;
|
||||
+ if (!test_info)
|
||||
+ test_info = kzalloc(sizeof(*bp->test_info), GFP_KERNEL);
|
||||
if (!test_info)
|
||||
goto ethtool_init_exit;
|
||||
|
@ -0,0 +1,122 @@
|
||||
From 6fb84701e71b1a4b1fae2995c96968316124ed0c Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:23:19 -0400
|
||||
Subject: [PATCH 64/96] [netdrv] bnxt_en: Refactor bnxt_sriov_enable()
|
||||
|
||||
Message-id: <570ee9c11a5e90122d0545caee13801f8538224f.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276484
|
||||
O-Subject: [RHEL-8.2 PATCH 57/78] bnxt_en: Refactor bnxt_sriov_enable().
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
Refactor the hardware/firmware configuration portion in
|
||||
bnxt_sriov_enable() into a new function bnxt_cfg_hw_sriov(). This
|
||||
new function can be called after a firmware reset to reconfigure the
|
||||
VFs previously enabled.
|
||||
|
||||
v2: straight refactor of the code. Reordering done in the next patch.
|
||||
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit 702d5011ab5e7b9afe44058d33a89d1501645a10)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c | 50 +++++++++++++++++--------
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.h | 1 +
|
||||
2 files changed, 35 insertions(+), 16 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c 2020-02-06 16:23:18.477487753 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c 2020-02-06 16:23:18.878484072 +0100
|
||||
@@ -667,6 +667,32 @@
|
||||
return bnxt_hwrm_func_cfg(bp, num_vfs);
|
||||
}
|
||||
|
||||
+int bnxt_cfg_hw_sriov(struct bnxt *bp, int *num_vfs)
|
||||
+{
|
||||
+ int rc;
|
||||
+
|
||||
+ /* Reserve resources for VFs */
|
||||
+ rc = bnxt_func_cfg(bp, *num_vfs);
|
||||
+ if (rc != *num_vfs) {
|
||||
+ if (rc <= 0) {
|
||||
+ netdev_warn(bp->dev, "Unable to reserve resources for SRIOV.\n");
|
||||
+ *num_vfs = 0;
|
||||
+ return rc;
|
||||
+ }
|
||||
+ netdev_warn(bp->dev, "Only able to reserve resources for %d VFs.\n",
|
||||
+ rc);
|
||||
+ *num_vfs = rc;
|
||||
+ }
|
||||
+
|
||||
+ /* Register buffers for VFs */
|
||||
+ rc = bnxt_hwrm_func_buf_rgtr(bp);
|
||||
+ if (rc)
|
||||
+ return rc;
|
||||
+
|
||||
+ bnxt_ulp_sriov_cfg(bp, *num_vfs);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static int bnxt_sriov_enable(struct bnxt *bp, int *num_vfs)
|
||||
{
|
||||
int rc = 0, vfs_supported;
|
||||
@@ -732,25 +758,10 @@
|
||||
if (rc)
|
||||
goto err_out1;
|
||||
|
||||
- /* Reserve resources for VFs */
|
||||
- rc = bnxt_func_cfg(bp, *num_vfs);
|
||||
- if (rc != *num_vfs) {
|
||||
- if (rc <= 0) {
|
||||
- netdev_warn(bp->dev, "Unable to reserve resources for SRIOV.\n");
|
||||
- *num_vfs = 0;
|
||||
- goto err_out2;
|
||||
- }
|
||||
- netdev_warn(bp->dev, "Only able to reserve resources for %d VFs.\n", rc);
|
||||
- *num_vfs = rc;
|
||||
- }
|
||||
-
|
||||
- /* Register buffers for VFs */
|
||||
- rc = bnxt_hwrm_func_buf_rgtr(bp);
|
||||
+ rc = bnxt_cfg_hw_sriov(bp, num_vfs);
|
||||
if (rc)
|
||||
goto err_out2;
|
||||
|
||||
- bnxt_ulp_sriov_cfg(bp, *num_vfs);
|
||||
-
|
||||
rc = pci_enable_sriov(bp->pdev, *num_vfs);
|
||||
if (rc)
|
||||
goto err_out2;
|
||||
@@ -1128,6 +1139,13 @@
|
||||
}
|
||||
#else
|
||||
|
||||
+int bnxt_cfg_hw_sriov(struct bnxt *bp, int *num_vfs)
|
||||
+{
|
||||
+ if (*num_vfs)
|
||||
+ return -EOPNOTSUPP;
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
void bnxt_sriov_disable(struct bnxt *bp)
|
||||
{
|
||||
}
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.h
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.h 2020-02-06 16:22:54.551707373 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.h 2020-02-06 16:23:18.878484072 +0100
|
||||
@@ -36,6 +36,7 @@
|
||||
int bnxt_set_vf_spoofchk(struct net_device *, int, bool);
|
||||
int bnxt_set_vf_trust(struct net_device *dev, int vf_id, bool trust);
|
||||
int bnxt_sriov_configure(struct pci_dev *pdev, int num_vfs);
|
||||
+int bnxt_cfg_hw_sriov(struct bnxt *bp, int *num_vfs);
|
||||
void bnxt_sriov_disable(struct bnxt *);
|
||||
void bnxt_hwrm_exec_fwd_req(struct bnxt *);
|
||||
void bnxt_update_vf_mac(struct bnxt *);
|
@ -0,0 +1,62 @@
|
||||
From 65fc42a0bb19a85798469eeb2c61b754029414ef Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:23:20 -0400
|
||||
Subject: [PATCH 65/96] [netdrv] bnxt_en: Register buffers for VFs before
|
||||
reserving resources
|
||||
|
||||
Message-id: <3494363ea29ad1d7fa4ad16dbe767e2c30222282.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276480
|
||||
O-Subject: [RHEL-8.2 PATCH 58/78] bnxt_en: Register buffers for VFs before reserving resources.
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
When VFs need to be reconfigured dynamically after firmwware reset, the
|
||||
configuration sequence on the PF needs to be changed to register the VF
|
||||
buffers first. Otherwise, some VF firmware commands may not succeed as
|
||||
there may not be PF buffers ready for the re-directed firmware commands.
|
||||
|
||||
This sequencing did not matter much before when we only supported
|
||||
the normal bring-up of VFs.
|
||||
|
||||
Signed-off-by: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit 91b9be487001d344a39c453ade6cdbd125e06208)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c | 10 +++++-----
|
||||
1 file changed, 5 insertions(+), 5 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c 2020-02-06 16:23:18.878484072 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c 2020-02-06 16:23:19.013482833 +0100
|
||||
@@ -671,6 +671,11 @@
|
||||
{
|
||||
int rc;
|
||||
|
||||
+ /* Register buffers for VFs */
|
||||
+ rc = bnxt_hwrm_func_buf_rgtr(bp);
|
||||
+ if (rc)
|
||||
+ return rc;
|
||||
+
|
||||
/* Reserve resources for VFs */
|
||||
rc = bnxt_func_cfg(bp, *num_vfs);
|
||||
if (rc != *num_vfs) {
|
||||
@@ -684,11 +689,6 @@
|
||||
*num_vfs = rc;
|
||||
}
|
||||
|
||||
- /* Register buffers for VFs */
|
||||
- rc = bnxt_hwrm_func_buf_rgtr(bp);
|
||||
- if (rc)
|
||||
- return rc;
|
||||
-
|
||||
bnxt_ulp_sriov_cfg(bp, *num_vfs);
|
||||
return 0;
|
||||
}
|
@ -0,0 +1,195 @@
|
||||
From 2e673311338d1e2e27a2fe9aabe8fbfcb81c3718 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:23:21 -0400
|
||||
Subject: [PATCH 66/96] [netdrv] bnxt_en: Handle firmware reset status during
|
||||
IF_UP
|
||||
|
||||
Message-id: <46b898742e8a2f4726a84ce5492cd5e31b5fcfae.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276486
|
||||
O-Subject: [RHEL-8.2 PATCH 59/78] bnxt_en: Handle firmware reset status during IF_UP.
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
During IF_UP, newer firmware has a new status flag that indicates that
|
||||
firmware has reset. Add new function bnxt_fw_init_one() to re-probe the
|
||||
firmware and re-setup VF resources on the PF if necessary. If the
|
||||
re-probe fails, set a flag to prevent bnxt_open() from proceeding again.
|
||||
|
||||
Signed-off-by: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit ec5d31e3c15d5233b491400133c67f78a320062c)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 107 ++++++++++++++++++++++++------
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.h | 2 +
|
||||
2 files changed, 89 insertions(+), 20 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:18.730485431 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:19.143481640 +0100
|
||||
@@ -8528,11 +8528,14 @@
|
||||
return hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
|
||||
}
|
||||
|
||||
+static int bnxt_fw_init_one(struct bnxt *bp);
|
||||
+
|
||||
static int bnxt_hwrm_if_change(struct bnxt *bp, bool up)
|
||||
{
|
||||
struct hwrm_func_drv_if_change_output *resp = bp->hwrm_cmd_resp_addr;
|
||||
struct hwrm_func_drv_if_change_input req = {0};
|
||||
- bool resc_reinit = false;
|
||||
+ bool resc_reinit = false, fw_reset = false;
|
||||
+ u32 flags = 0;
|
||||
int rc;
|
||||
|
||||
if (!(bp->fw_cap & BNXT_FW_CAP_IF_CHANGE))
|
||||
@@ -8543,26 +8546,53 @@
|
||||
req.flags = cpu_to_le32(FUNC_DRV_IF_CHANGE_REQ_FLAGS_UP);
|
||||
mutex_lock(&bp->hwrm_cmd_lock);
|
||||
rc = _hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
|
||||
- if (!rc && (resp->flags &
|
||||
- cpu_to_le32(FUNC_DRV_IF_CHANGE_RESP_FLAGS_RESC_CHANGE)))
|
||||
- resc_reinit = true;
|
||||
+ if (!rc)
|
||||
+ flags = le32_to_cpu(resp->flags);
|
||||
mutex_unlock(&bp->hwrm_cmd_lock);
|
||||
+ if (rc)
|
||||
+ return rc;
|
||||
|
||||
- if (up && resc_reinit && BNXT_NEW_RM(bp)) {
|
||||
- struct bnxt_hw_resc *hw_resc = &bp->hw_resc;
|
||||
+ if (!up)
|
||||
+ return 0;
|
||||
+
|
||||
+ if (flags & FUNC_DRV_IF_CHANGE_RESP_FLAGS_RESC_CHANGE)
|
||||
+ resc_reinit = true;
|
||||
+ if (flags & FUNC_DRV_IF_CHANGE_RESP_FLAGS_HOT_FW_RESET_DONE)
|
||||
+ fw_reset = true;
|
||||
|
||||
- rc = bnxt_hwrm_func_resc_qcaps(bp, true);
|
||||
- hw_resc->resv_cp_rings = 0;
|
||||
- hw_resc->resv_stat_ctxs = 0;
|
||||
- hw_resc->resv_irqs = 0;
|
||||
- hw_resc->resv_tx_rings = 0;
|
||||
- hw_resc->resv_rx_rings = 0;
|
||||
- hw_resc->resv_hw_ring_grps = 0;
|
||||
- hw_resc->resv_vnics = 0;
|
||||
- bp->tx_nr_rings = 0;
|
||||
- bp->rx_nr_rings = 0;
|
||||
+ if (resc_reinit || fw_reset) {
|
||||
+ if (fw_reset) {
|
||||
+ rc = bnxt_fw_init_one(bp);
|
||||
+ if (rc) {
|
||||
+ set_bit(BNXT_STATE_ABORT_ERR, &bp->state);
|
||||
+ return rc;
|
||||
+ }
|
||||
+ bnxt_clear_int_mode(bp);
|
||||
+ rc = bnxt_init_int_mode(bp);
|
||||
+ if (rc) {
|
||||
+ netdev_err(bp->dev, "init int mode failed\n");
|
||||
+ return rc;
|
||||
+ }
|
||||
+ set_bit(BNXT_STATE_FW_RESET_DET, &bp->state);
|
||||
+ }
|
||||
+ if (BNXT_NEW_RM(bp)) {
|
||||
+ struct bnxt_hw_resc *hw_resc = &bp->hw_resc;
|
||||
+
|
||||
+ rc = bnxt_hwrm_func_resc_qcaps(bp, true);
|
||||
+ hw_resc->resv_cp_rings = 0;
|
||||
+ hw_resc->resv_stat_ctxs = 0;
|
||||
+ hw_resc->resv_irqs = 0;
|
||||
+ hw_resc->resv_tx_rings = 0;
|
||||
+ hw_resc->resv_rx_rings = 0;
|
||||
+ hw_resc->resv_hw_ring_grps = 0;
|
||||
+ hw_resc->resv_vnics = 0;
|
||||
+ if (!fw_reset) {
|
||||
+ bp->tx_nr_rings = 0;
|
||||
+ bp->rx_nr_rings = 0;
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
- return rc;
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
static int bnxt_hwrm_port_led_qcaps(struct bnxt *bp)
|
||||
@@ -8982,12 +9012,28 @@
|
||||
struct bnxt *bp = netdev_priv(dev);
|
||||
int rc;
|
||||
|
||||
- bnxt_hwrm_if_change(bp, true);
|
||||
- rc = __bnxt_open_nic(bp, true, true);
|
||||
+ if (test_bit(BNXT_STATE_ABORT_ERR, &bp->state)) {
|
||||
+ netdev_err(bp->dev, "A previous firmware reset did not complete, aborting\n");
|
||||
+ return -ENODEV;
|
||||
+ }
|
||||
+
|
||||
+ rc = bnxt_hwrm_if_change(bp, true);
|
||||
if (rc)
|
||||
+ return rc;
|
||||
+ rc = __bnxt_open_nic(bp, true, true);
|
||||
+ if (rc) {
|
||||
bnxt_hwrm_if_change(bp, false);
|
||||
+ } else {
|
||||
+ if (test_and_clear_bit(BNXT_STATE_FW_RESET_DET, &bp->state) &&
|
||||
+ BNXT_PF(bp)) {
|
||||
+ struct bnxt_pf_info *pf = &bp->pf;
|
||||
+ int n = pf->active_vfs;
|
||||
|
||||
- bnxt_hwmon_open(bp);
|
||||
+ if (n)
|
||||
+ bnxt_cfg_hw_sriov(bp, &n);
|
||||
+ }
|
||||
+ bnxt_hwmon_open(bp);
|
||||
+ }
|
||||
|
||||
return rc;
|
||||
}
|
||||
@@ -10080,6 +10126,27 @@
|
||||
bnxt_hwrm_coal_params_qcaps(bp);
|
||||
}
|
||||
|
||||
+static int bnxt_fw_init_one(struct bnxt *bp)
|
||||
+{
|
||||
+ int rc;
|
||||
+
|
||||
+ rc = bnxt_fw_init_one_p1(bp);
|
||||
+ if (rc) {
|
||||
+ netdev_err(bp->dev, "Firmware init phase 1 failed\n");
|
||||
+ return rc;
|
||||
+ }
|
||||
+ rc = bnxt_fw_init_one_p2(bp);
|
||||
+ if (rc) {
|
||||
+ netdev_err(bp->dev, "Firmware init phase 2 failed\n");
|
||||
+ return rc;
|
||||
+ }
|
||||
+ rc = bnxt_approve_mac(bp, bp->dev->dev_addr, false);
|
||||
+ if (rc)
|
||||
+ return rc;
|
||||
+ bnxt_fw_init_one_p3(bp);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static int bnxt_init_board(struct pci_dev *pdev, struct net_device *dev)
|
||||
{
|
||||
int rc;
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.h
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:17.788494078 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:19.143481640 +0100
|
||||
@@ -1555,6 +1555,8 @@
|
||||
#define BNXT_STATE_OPEN 0
|
||||
#define BNXT_STATE_IN_SP_TASK 1
|
||||
#define BNXT_STATE_READ_STATS 2
|
||||
+#define BNXT_STATE_FW_RESET_DET 3
|
||||
+#define BNXT_STATE_ABORT_ERR 5
|
||||
|
||||
struct bnxt_irq *irq_tbl;
|
||||
int total_irqs;
|
@ -0,0 +1,203 @@
|
||||
From 4eb487db76c9385d110d31f0b4b9e5c4f2393f5d Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:23:22 -0400
|
||||
Subject: [PATCH 67/96] [netdrv] bnxt_en: Discover firmware error recovery
|
||||
capabilities
|
||||
|
||||
Message-id: <a51cd180b9f902d3548f54f26f56012fac00ce6c.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276487
|
||||
O-Subject: [RHEL-8.2 PATCH 60/78] bnxt_en: Discover firmware error recovery capabilities.
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
Call the new firmware API HWRM_ERROR_RECOVERY_QCFG if it is supported
|
||||
to discover the firmware health and recovery capabilities and settings.
|
||||
This feature allows the driver to reset the chip if firmware crashes and
|
||||
becomes unresponsive.
|
||||
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit 07f83d72d238f5d41b03d6142641129e8a7a0ec4)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 77 +++++++++++++++++++++++++++++++
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.h | 38 +++++++++++++++
|
||||
2 files changed, 115 insertions(+)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:19.143481640 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:19.289480300 +0100
|
||||
@@ -6852,6 +6852,8 @@
|
||||
bp->fw_cap |= BNXT_FW_CAP_PCIE_STATS_SUPPORTED;
|
||||
if (flags & FUNC_QCAPS_RESP_FLAGS_EXT_STATS_SUPPORTED)
|
||||
bp->fw_cap |= BNXT_FW_CAP_EXT_STATS_SUPPORTED;
|
||||
+ if (flags & FUNC_QCAPS_RESP_FLAGS_ERROR_RECOVERY_CAPABLE)
|
||||
+ bp->fw_cap |= BNXT_FW_CAP_ERROR_RECOVERY;
|
||||
|
||||
bp->tx_push_thresh = 0;
|
||||
if (flags & FUNC_QCAPS_RESP_FLAGS_PUSH_MODE_SUPPORTED)
|
||||
@@ -6953,6 +6955,74 @@
|
||||
return rc;
|
||||
}
|
||||
|
||||
+static int bnxt_hwrm_error_recovery_qcfg(struct bnxt *bp)
|
||||
+{
|
||||
+ struct hwrm_error_recovery_qcfg_output *resp = bp->hwrm_cmd_resp_addr;
|
||||
+ struct bnxt_fw_health *fw_health = bp->fw_health;
|
||||
+ struct hwrm_error_recovery_qcfg_input req = {0};
|
||||
+ int rc, i;
|
||||
+
|
||||
+ if (!(bp->fw_cap & BNXT_FW_CAP_ERROR_RECOVERY))
|
||||
+ return 0;
|
||||
+
|
||||
+ bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_ERROR_RECOVERY_QCFG, -1, -1);
|
||||
+ mutex_lock(&bp->hwrm_cmd_lock);
|
||||
+ rc = _hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
|
||||
+ if (rc)
|
||||
+ goto err_recovery_out;
|
||||
+ if (!fw_health) {
|
||||
+ fw_health = kzalloc(sizeof(*fw_health), GFP_KERNEL);
|
||||
+ bp->fw_health = fw_health;
|
||||
+ if (!fw_health) {
|
||||
+ rc = -ENOMEM;
|
||||
+ goto err_recovery_out;
|
||||
+ }
|
||||
+ }
|
||||
+ fw_health->flags = le32_to_cpu(resp->flags);
|
||||
+ if ((fw_health->flags & ERROR_RECOVERY_QCFG_RESP_FLAGS_CO_CPU) &&
|
||||
+ !(bp->fw_cap & BNXT_FW_CAP_KONG_MB_CHNL)) {
|
||||
+ rc = -EINVAL;
|
||||
+ goto err_recovery_out;
|
||||
+ }
|
||||
+ fw_health->polling_dsecs = le32_to_cpu(resp->driver_polling_freq);
|
||||
+ fw_health->master_func_wait_dsecs =
|
||||
+ le32_to_cpu(resp->master_func_wait_period);
|
||||
+ fw_health->normal_func_wait_dsecs =
|
||||
+ le32_to_cpu(resp->normal_func_wait_period);
|
||||
+ fw_health->post_reset_wait_dsecs =
|
||||
+ le32_to_cpu(resp->master_func_wait_period_after_reset);
|
||||
+ fw_health->post_reset_max_wait_dsecs =
|
||||
+ le32_to_cpu(resp->max_bailout_time_after_reset);
|
||||
+ fw_health->regs[BNXT_FW_HEALTH_REG] =
|
||||
+ le32_to_cpu(resp->fw_health_status_reg);
|
||||
+ fw_health->regs[BNXT_FW_HEARTBEAT_REG] =
|
||||
+ le32_to_cpu(resp->fw_heartbeat_reg);
|
||||
+ fw_health->regs[BNXT_FW_RESET_CNT_REG] =
|
||||
+ le32_to_cpu(resp->fw_reset_cnt_reg);
|
||||
+ fw_health->regs[BNXT_FW_RESET_INPROG_REG] =
|
||||
+ le32_to_cpu(resp->reset_inprogress_reg);
|
||||
+ fw_health->fw_reset_inprog_reg_mask =
|
||||
+ le32_to_cpu(resp->reset_inprogress_reg_mask);
|
||||
+ fw_health->fw_reset_seq_cnt = resp->reg_array_cnt;
|
||||
+ if (fw_health->fw_reset_seq_cnt >= 16) {
|
||||
+ rc = -EINVAL;
|
||||
+ goto err_recovery_out;
|
||||
+ }
|
||||
+ for (i = 0; i < fw_health->fw_reset_seq_cnt; i++) {
|
||||
+ fw_health->fw_reset_seq_regs[i] =
|
||||
+ le32_to_cpu(resp->reset_reg[i]);
|
||||
+ fw_health->fw_reset_seq_vals[i] =
|
||||
+ le32_to_cpu(resp->reset_reg_val[i]);
|
||||
+ fw_health->fw_reset_seq_delay_msec[i] =
|
||||
+ resp->delay_after_reset[i];
|
||||
+ }
|
||||
+err_recovery_out:
|
||||
+ mutex_unlock(&bp->hwrm_cmd_lock);
|
||||
+ if (rc)
|
||||
+ bp->fw_cap &= ~BNXT_FW_CAP_ERROR_RECOVERY;
|
||||
+ return rc;
|
||||
+}
|
||||
+
|
||||
static int bnxt_hwrm_func_reset(struct bnxt *bp)
|
||||
{
|
||||
struct hwrm_func_reset_input req = {0};
|
||||
@@ -10063,6 +10133,11 @@
|
||||
netdev_warn(bp->dev, "hwrm query adv flow mgnt failure rc: %d\n",
|
||||
rc);
|
||||
|
||||
+ rc = bnxt_hwrm_error_recovery_qcfg(bp);
|
||||
+ if (rc)
|
||||
+ netdev_warn(bp->dev, "hwrm query error recovery failure rc: %d\n",
|
||||
+ rc);
|
||||
+
|
||||
rc = bnxt_hwrm_func_drv_rgtr(bp);
|
||||
if (rc)
|
||||
return -ENODEV;
|
||||
@@ -11267,6 +11342,8 @@
|
||||
bnxt_free_ctx_mem(bp);
|
||||
kfree(bp->ctx);
|
||||
bp->ctx = NULL;
|
||||
+ kfree(bp->fw_health);
|
||||
+ bp->fw_health = NULL;
|
||||
bnxt_cleanup_pci(bp);
|
||||
|
||||
init_err_free:
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.h
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:19.143481640 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:19.289480300 +0100
|
||||
@@ -1333,6 +1333,41 @@
|
||||
struct bnxt_ctx_pg_info *tqm_mem[9];
|
||||
};
|
||||
|
||||
+struct bnxt_fw_health {
|
||||
+ u32 flags;
|
||||
+ u32 polling_dsecs;
|
||||
+ u32 master_func_wait_dsecs;
|
||||
+ u32 normal_func_wait_dsecs;
|
||||
+ u32 post_reset_wait_dsecs;
|
||||
+ u32 post_reset_max_wait_dsecs;
|
||||
+ u32 regs[4];
|
||||
+ u32 mapped_regs[4];
|
||||
+#define BNXT_FW_HEALTH_REG 0
|
||||
+#define BNXT_FW_HEARTBEAT_REG 1
|
||||
+#define BNXT_FW_RESET_CNT_REG 2
|
||||
+#define BNXT_FW_RESET_INPROG_REG 3
|
||||
+ u32 fw_reset_inprog_reg_mask;
|
||||
+ u32 last_fw_heartbeat;
|
||||
+ u32 last_fw_reset_cnt;
|
||||
+ u8 enabled:1;
|
||||
+ u8 master:1;
|
||||
+ u8 tmr_multiplier;
|
||||
+ u8 tmr_counter;
|
||||
+ u8 fw_reset_seq_cnt;
|
||||
+ u32 fw_reset_seq_regs[16];
|
||||
+ u32 fw_reset_seq_vals[16];
|
||||
+ u32 fw_reset_seq_delay_msec[16];
|
||||
+};
|
||||
+
|
||||
+#define BNXT_FW_HEALTH_REG_TYPE_MASK 3
|
||||
+#define BNXT_FW_HEALTH_REG_TYPE_CFG 0
|
||||
+#define BNXT_FW_HEALTH_REG_TYPE_GRC 1
|
||||
+#define BNXT_FW_HEALTH_REG_TYPE_BAR0 2
|
||||
+#define BNXT_FW_HEALTH_REG_TYPE_BAR1 3
|
||||
+
|
||||
+#define BNXT_FW_HEALTH_REG_TYPE(reg) ((reg) & BNXT_FW_HEALTH_REG_TYPE_MASK)
|
||||
+#define BNXT_FW_HEALTH_REG_OFF(reg) ((reg) & ~BNXT_FW_HEALTH_REG_TYPE_MASK)
|
||||
+
|
||||
struct bnxt {
|
||||
void __iomem *bar0;
|
||||
void __iomem *bar1;
|
||||
@@ -1581,6 +1616,7 @@
|
||||
#define BNXT_FW_CAP_KONG_MB_CHNL 0x00000080
|
||||
#define BNXT_FW_CAP_OVS_64BIT_HANDLE 0x00000400
|
||||
#define BNXT_FW_CAP_TRUSTED_VF 0x00000800
|
||||
+ #define BNXT_FW_CAP_ERROR_RECOVERY 0x00002000
|
||||
#define BNXT_FW_CAP_PKG_VER 0x00004000
|
||||
#define BNXT_FW_CAP_CFA_ADV_FLOW 0x00008000
|
||||
#define BNXT_FW_CAP_CFA_RFS_RING_TBL_IDX 0x00010000
|
||||
@@ -1666,6 +1702,8 @@
|
||||
#define BNXT_UPDATE_PHY_SP_EVENT 16
|
||||
#define BNXT_RING_COAL_NOW_SP_EVENT 17
|
||||
|
||||
+ struct bnxt_fw_health *fw_health;
|
||||
+
|
||||
struct bnxt_hw_resc hw_resc;
|
||||
struct bnxt_pf_info pf;
|
||||
struct bnxt_ctx_mem_info *ctx;
|
@ -0,0 +1,100 @@
|
||||
From 48b35e7c5e2e2b19be38219c97a652453b982bc7 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:23:23 -0400
|
||||
Subject: [PATCH 68/96] [netdrv] bnxt_en: Pre-map the firmware health
|
||||
monitoring registers
|
||||
|
||||
Message-id: <91d24ffc1068f9308c91815baf3e8aa149d16a36.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276483
|
||||
O-Subject: [RHEL-8.2 PATCH 61/78] bnxt_en: Pre-map the firmware health monitoring registers.
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
Pre-map the GRC registers for periodic firmware health monitoring.
|
||||
|
||||
Signed-off-by: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit 9ffbd67734909ca8bb099e62f06387649b43d5a8)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 29 +++++++++++++++++++++++++++++
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.h | 6 ++++++
|
||||
2 files changed, 35 insertions(+)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:19.289480300 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:19.432478987 +0100
|
||||
@@ -6955,6 +6955,33 @@
|
||||
return rc;
|
||||
}
|
||||
|
||||
+static int bnxt_map_fw_health_regs(struct bnxt *bp)
|
||||
+{
|
||||
+ struct bnxt_fw_health *fw_health = bp->fw_health;
|
||||
+ u32 reg_base = 0xffffffff;
|
||||
+ int i;
|
||||
+
|
||||
+ /* Only pre-map the monitoring GRC registers using window 3 */
|
||||
+ for (i = 0; i < 4; i++) {
|
||||
+ u32 reg = fw_health->regs[i];
|
||||
+
|
||||
+ if (BNXT_FW_HEALTH_REG_TYPE(reg) != BNXT_FW_HEALTH_REG_TYPE_GRC)
|
||||
+ continue;
|
||||
+ if (reg_base == 0xffffffff)
|
||||
+ reg_base = reg & BNXT_GRC_BASE_MASK;
|
||||
+ if ((reg & BNXT_GRC_BASE_MASK) != reg_base)
|
||||
+ return -ERANGE;
|
||||
+ fw_health->mapped_regs[i] = BNXT_FW_HEALTH_WIN_BASE +
|
||||
+ (reg & BNXT_GRC_OFFSET_MASK);
|
||||
+ }
|
||||
+ if (reg_base == 0xffffffff)
|
||||
+ return 0;
|
||||
+
|
||||
+ writel(reg_base, bp->bar0 + BNXT_GRCPF_REG_WINDOW_BASE_OUT +
|
||||
+ BNXT_FW_HEALTH_WIN_MAP_OFF);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static int bnxt_hwrm_error_recovery_qcfg(struct bnxt *bp)
|
||||
{
|
||||
struct hwrm_error_recovery_qcfg_output *resp = bp->hwrm_cmd_resp_addr;
|
||||
@@ -7018,6 +7045,8 @@
|
||||
}
|
||||
err_recovery_out:
|
||||
mutex_unlock(&bp->hwrm_cmd_lock);
|
||||
+ if (!rc)
|
||||
+ rc = bnxt_map_fw_health_regs(bp);
|
||||
if (rc)
|
||||
bp->fw_cap &= ~BNXT_FW_CAP_ERROR_RECOVERY;
|
||||
return rc;
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.h
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:19.289480300 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:19.432478987 +0100
|
||||
@@ -1217,6 +1217,9 @@
|
||||
#define BNXT_GRCPF_REG_KONG_COMM 0xA00
|
||||
#define BNXT_GRCPF_REG_KONG_COMM_TRIGGER 0xB00
|
||||
|
||||
+#define BNXT_GRC_BASE_MASK 0xfffff000
|
||||
+#define BNXT_GRC_OFFSET_MASK 0x00000ffc
|
||||
+
|
||||
struct bnxt_tc_flow_stats {
|
||||
u64 packets;
|
||||
u64 bytes;
|
||||
@@ -1368,6 +1371,9 @@
|
||||
#define BNXT_FW_HEALTH_REG_TYPE(reg) ((reg) & BNXT_FW_HEALTH_REG_TYPE_MASK)
|
||||
#define BNXT_FW_HEALTH_REG_OFF(reg) ((reg) & ~BNXT_FW_HEALTH_REG_TYPE_MASK)
|
||||
|
||||
+#define BNXT_FW_HEALTH_WIN_BASE 0x3000
|
||||
+#define BNXT_FW_HEALTH_WIN_MAP_OFF 8
|
||||
+
|
||||
struct bnxt {
|
||||
void __iomem *bar0;
|
||||
void __iomem *bar1;
|
@ -0,0 +1,154 @@
|
||||
From 1d427d9e7f961722a309c6a82f62a9178e5a2c3f Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:23:24 -0400
|
||||
Subject: [PATCH 69/96] [netdrv] bnxt_en: Enable health monitoring
|
||||
|
||||
Message-id: <42efde25f8365e758d5336dd899277a3bbab23aa.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276498
|
||||
O-Subject: [RHEL-8.2 PATCH 62/78] bnxt_en: Enable health monitoring.
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
Handle the async event from the firmware that enables firmware health
|
||||
monitoring. Store initial health metrics.
|
||||
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit 7e914027f757b656cd681ba4fe75f3984531ee50)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 66 ++++++++++++++++++++++++++++++-
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.h | 9 +++++
|
||||
2 files changed, 73 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:19.432478987 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:19.590477537 +0100
|
||||
@@ -254,6 +254,7 @@
|
||||
ASYNC_EVENT_CMPL_EVENT_ID_PORT_CONN_NOT_ALLOWED,
|
||||
ASYNC_EVENT_CMPL_EVENT_ID_VF_CFG_CHANGE,
|
||||
ASYNC_EVENT_CMPL_EVENT_ID_LINK_SPEED_CFG_CHANGE,
|
||||
+ ASYNC_EVENT_CMPL_EVENT_ID_ERROR_RECOVERY,
|
||||
};
|
||||
|
||||
static struct workqueue_struct *bnxt_pf_wq;
|
||||
@@ -1898,6 +1899,33 @@
|
||||
return bnxt_rx_pkt(bp, cpr, raw_cons, event);
|
||||
}
|
||||
|
||||
+u32 bnxt_fw_health_readl(struct bnxt *bp, int reg_idx)
|
||||
+{
|
||||
+ struct bnxt_fw_health *fw_health = bp->fw_health;
|
||||
+ u32 reg = fw_health->regs[reg_idx];
|
||||
+ u32 reg_type, reg_off, val = 0;
|
||||
+
|
||||
+ reg_type = BNXT_FW_HEALTH_REG_TYPE(reg);
|
||||
+ reg_off = BNXT_FW_HEALTH_REG_OFF(reg);
|
||||
+ switch (reg_type) {
|
||||
+ case BNXT_FW_HEALTH_REG_TYPE_CFG:
|
||||
+ pci_read_config_dword(bp->pdev, reg_off, &val);
|
||||
+ break;
|
||||
+ case BNXT_FW_HEALTH_REG_TYPE_GRC:
|
||||
+ reg_off = fw_health->mapped_regs[reg_idx];
|
||||
+ /* fall through */
|
||||
+ case BNXT_FW_HEALTH_REG_TYPE_BAR0:
|
||||
+ val = readl(bp->bar0 + reg_off);
|
||||
+ break;
|
||||
+ case BNXT_FW_HEALTH_REG_TYPE_BAR1:
|
||||
+ val = readl(bp->bar1 + reg_off);
|
||||
+ break;
|
||||
+ }
|
||||
+ if (reg_idx == BNXT_FW_RESET_INPROG_REG)
|
||||
+ val &= fw_health->fw_reset_inprog_reg_mask;
|
||||
+ return val;
|
||||
+}
|
||||
+
|
||||
#define BNXT_GET_EVENT_PORT(data) \
|
||||
((data) & \
|
||||
ASYNC_EVENT_CMPL_PORT_CONN_NOT_ALLOWED_EVENT_DATA1_PORT_ID_MASK)
|
||||
@@ -1953,6 +1981,35 @@
|
||||
goto async_event_process_exit;
|
||||
set_bit(BNXT_RESET_TASK_SILENT_SP_EVENT, &bp->sp_event);
|
||||
break;
|
||||
+ case ASYNC_EVENT_CMPL_EVENT_ID_ERROR_RECOVERY: {
|
||||
+ struct bnxt_fw_health *fw_health = bp->fw_health;
|
||||
+ u32 data1 = le32_to_cpu(cmpl->event_data1);
|
||||
+
|
||||
+ if (!fw_health)
|
||||
+ goto async_event_process_exit;
|
||||
+
|
||||
+ fw_health->enabled = EVENT_DATA1_RECOVERY_ENABLED(data1);
|
||||
+ fw_health->master = EVENT_DATA1_RECOVERY_MASTER_FUNC(data1);
|
||||
+ if (!fw_health->enabled)
|
||||
+ break;
|
||||
+
|
||||
+ if (netif_msg_drv(bp))
|
||||
+ netdev_info(bp->dev, "Error recovery info: error recovery[%d], master[%d], reset count[0x%x], health status: 0x%x\n",
|
||||
+ fw_health->enabled, fw_health->master,
|
||||
+ bnxt_fw_health_readl(bp,
|
||||
+ BNXT_FW_RESET_CNT_REG),
|
||||
+ bnxt_fw_health_readl(bp,
|
||||
+ BNXT_FW_HEALTH_REG));
|
||||
+ fw_health->tmr_multiplier =
|
||||
+ DIV_ROUND_UP(fw_health->polling_dsecs * HZ,
|
||||
+ bp->current_interval * 10);
|
||||
+ fw_health->tmr_counter = fw_health->tmr_multiplier;
|
||||
+ fw_health->last_fw_heartbeat =
|
||||
+ bnxt_fw_health_readl(bp, BNXT_FW_HEARTBEAT_REG);
|
||||
+ fw_health->last_fw_reset_cnt =
|
||||
+ bnxt_fw_health_readl(bp, BNXT_FW_RESET_CNT_REG);
|
||||
+ goto async_event_process_exit;
|
||||
+ }
|
||||
default:
|
||||
goto async_event_process_exit;
|
||||
}
|
||||
@@ -4315,9 +4372,14 @@
|
||||
cpu_to_le32(FUNC_DRV_RGTR_REQ_ENABLES_ASYNC_EVENT_FWD);
|
||||
|
||||
memset(async_events_bmap, 0, sizeof(async_events_bmap));
|
||||
- for (i = 0; i < ARRAY_SIZE(bnxt_async_events_arr); i++)
|
||||
- __set_bit(bnxt_async_events_arr[i], async_events_bmap);
|
||||
+ for (i = 0; i < ARRAY_SIZE(bnxt_async_events_arr); i++) {
|
||||
+ u16 event_id = bnxt_async_events_arr[i];
|
||||
|
||||
+ if (event_id == ASYNC_EVENT_CMPL_EVENT_ID_ERROR_RECOVERY &&
|
||||
+ !(bp->fw_cap & BNXT_FW_CAP_ERROR_RECOVERY))
|
||||
+ continue;
|
||||
+ __set_bit(bnxt_async_events_arr[i], async_events_bmap);
|
||||
+ }
|
||||
if (bmap && bmap_size) {
|
||||
for (i = 0; i < bmap_size; i++) {
|
||||
if (test_bit(i, bmap))
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.h
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:19.432478987 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:19.591477528 +0100
|
||||
@@ -472,6 +472,14 @@
|
||||
((le32_to_cpu((rx_tpa_end_ext)->rx_tpa_end_cmp_dup_acks) & \
|
||||
RX_TPA_END_CMP_AGG_BUFS_P5) >> RX_TPA_END_CMP_AGG_BUFS_SHIFT_P5)
|
||||
|
||||
+#define EVENT_DATA1_RECOVERY_MASTER_FUNC(data1) \
|
||||
+ !!((data1) & \
|
||||
+ ASYNC_EVENT_CMPL_ERROR_RECOVERY_EVENT_DATA1_FLAGS_MASTER_FUNC)
|
||||
+
|
||||
+#define EVENT_DATA1_RECOVERY_ENABLED(data1) \
|
||||
+ !!((data1) & \
|
||||
+ ASYNC_EVENT_CMPL_ERROR_RECOVERY_EVENT_DATA1_FLAGS_RECOVERY_ENABLED)
|
||||
+
|
||||
struct nqe_cn {
|
||||
__le16 type;
|
||||
#define NQ_CN_TYPE_MASK 0x3fUL
|
||||
@@ -1914,6 +1922,7 @@
|
||||
int bnxt_alloc_rx_data(struct bnxt *bp, struct bnxt_rx_ring_info *rxr,
|
||||
u16 prod, gfp_t gfp);
|
||||
void bnxt_reuse_rx_data(struct bnxt_rx_ring_info *rxr, u16 cons, void *data);
|
||||
+u32 bnxt_fw_health_readl(struct bnxt *bp, int reg_idx);
|
||||
void bnxt_set_tpa_flags(struct bnxt *bp);
|
||||
void bnxt_set_ring_params(struct bnxt *);
|
||||
int bnxt_set_rx_skb_mode(struct bnxt *bp, bool page_mode);
|
@ -0,0 +1,107 @@
|
||||
From b5a3e2be5f5d41b6d999ad9346f1247e2b7ad247 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:23:25 -0400
|
||||
Subject: [PATCH 70/96] [netdrv] bnxt_en: Add BNXT_STATE_IN_FW_RESET state
|
||||
|
||||
Message-id: <7698266f568917253716b6f64ad8c2c5ae29a62a.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276488
|
||||
O-Subject: [RHEL-8.2 PATCH 63/78] bnxt_en: Add BNXT_STATE_IN_FW_RESET state.
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
The new flag will be set in subsequent patches when firmware is
|
||||
going through reset. If bnxt_close() is called while the new flag
|
||||
is set, the FW reset sequence will have to be aborted because the
|
||||
NIC is prematurely closed before FW reset has completed. We also
|
||||
reject SRIOV configurations while FW reset is in progress.
|
||||
|
||||
v2: No longer drop rtnl_lock() in close and wait for FW reset to complete.
|
||||
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit 3bc7d4a352efe5b596883ef16b769055320db1f6)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 20 ++++++++++++++++++++
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.h | 1 +
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c | 5 +++++
|
||||
3 files changed, 26 insertions(+)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:19.590477537 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:19.749476077 +0100
|
||||
@@ -8721,6 +8721,10 @@
|
||||
if (flags & FUNC_DRV_IF_CHANGE_RESP_FLAGS_HOT_FW_RESET_DONE)
|
||||
fw_reset = true;
|
||||
|
||||
+ if (test_bit(BNXT_STATE_IN_FW_RESET, &bp->state) && !fw_reset) {
|
||||
+ netdev_err(bp->dev, "RESET_DONE not set during FW reset.\n");
|
||||
+ return -ENODEV;
|
||||
+ }
|
||||
if (resc_reinit || fw_reset) {
|
||||
if (fw_reset) {
|
||||
rc = bnxt_fw_init_one(bp);
|
||||
@@ -9231,6 +9235,10 @@
|
||||
bnxt_debug_dev_exit(bp);
|
||||
bnxt_disable_napi(bp);
|
||||
del_timer_sync(&bp->timer);
|
||||
+ if (test_bit(BNXT_STATE_IN_FW_RESET, &bp->state) &&
|
||||
+ pci_is_enabled(bp->pdev))
|
||||
+ pci_disable_device(bp->pdev);
|
||||
+
|
||||
bnxt_free_skbs(bp);
|
||||
|
||||
/* Save ring stats before shutdown */
|
||||
@@ -9247,6 +9255,18 @@
|
||||
{
|
||||
int rc = 0;
|
||||
|
||||
+ if (test_bit(BNXT_STATE_IN_FW_RESET, &bp->state)) {
|
||||
+ /* If we get here, it means firmware reset is in progress
|
||||
+ * while we are trying to close. We can safely proceed with
|
||||
+ * the close because we are holding rtnl_lock(). Some firmware
|
||||
+ * messages may fail as we proceed to close. We set the
|
||||
+ * ABORT_ERR flag here so that the FW reset thread will later
|
||||
+ * abort when it gets the rtnl_lock() and sees the flag.
|
||||
+ */
|
||||
+ netdev_warn(bp->dev, "FW reset in progress during close, FW reset will be aborted\n");
|
||||
+ set_bit(BNXT_STATE_ABORT_ERR, &bp->state);
|
||||
+ }
|
||||
+
|
||||
#ifdef CONFIG_BNXT_SRIOV
|
||||
if (bp->sriov_cfg) {
|
||||
rc = wait_event_interruptible_timeout(bp->sriov_cfg_wait,
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.h
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:19.591477528 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:19.750476068 +0100
|
||||
@@ -1605,6 +1605,7 @@
|
||||
#define BNXT_STATE_IN_SP_TASK 1
|
||||
#define BNXT_STATE_READ_STATS 2
|
||||
#define BNXT_STATE_FW_RESET_DET 3
|
||||
+#define BNXT_STATE_IN_FW_RESET 4
|
||||
#define BNXT_STATE_ABORT_ERR 5
|
||||
|
||||
struct bnxt_irq *irq_tbl;
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c 2020-02-06 16:23:19.013482833 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c 2020-02-06 16:23:19.750476068 +0100
|
||||
@@ -828,6 +828,11 @@
|
||||
rtnl_unlock();
|
||||
return 0;
|
||||
}
|
||||
+ if (test_bit(BNXT_STATE_IN_FW_RESET, &bp->state)) {
|
||||
+ netdev_warn(dev, "Reject SRIOV config request when FW reset is in progress\n");
|
||||
+ rtnl_unlock();
|
||||
+ return 0;
|
||||
+ }
|
||||
bp->sriov_cfg = true;
|
||||
rtnl_unlock();
|
||||
|
@ -0,0 +1,166 @@
|
||||
From a5722300aaf495489ab5ce115f8955915a4dcb70 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:23:26 -0400
|
||||
Subject: [PATCH 71/96] [netdrv] bnxt_en: Add new FW devlink_health_reporter
|
||||
|
||||
Message-id: <54406dbbfa698feebe5b59a0c650fe80f3bd751c.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276493
|
||||
O-Subject: [RHEL-8.2 PATCH 64/78] bnxt_en: Add new FW devlink_health_reporter
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
Create new FW devlink_health_reporter, to know the current health
|
||||
status of FW.
|
||||
|
||||
Command example and output:
|
||||
$ devlink health show pci/0000:af:00.0 reporter fw
|
||||
|
||||
pci/0000:af:00.0:
|
||||
name fw
|
||||
state healthy error 0 recover 0
|
||||
|
||||
FW status: Healthy; Reset count: 1
|
||||
|
||||
Cc: Jiri Pirko <jiri@mellanox.com>
|
||||
Signed-off-by: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit 6763c779c2d8b568b2e174f3eeeaf644fa38b34d)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.h | 3 +
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c | 81 +++++++++++++++++++++++
|
||||
2 files changed, 84 insertions(+)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.h
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:19.750476068 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:19.896474728 +0100
|
||||
@@ -1368,6 +1368,7 @@
|
||||
u32 fw_reset_seq_regs[16];
|
||||
u32 fw_reset_seq_vals[16];
|
||||
u32 fw_reset_seq_delay_msec[16];
|
||||
+ struct devlink_health_reporter *fw_reporter;
|
||||
};
|
||||
|
||||
#define BNXT_FW_HEALTH_REG_TYPE_MASK 3
|
||||
@@ -1382,6 +1383,8 @@
|
||||
#define BNXT_FW_HEALTH_WIN_BASE 0x3000
|
||||
#define BNXT_FW_HEALTH_WIN_MAP_OFF 8
|
||||
|
||||
+#define BNXT_FW_STATUS_HEALTHY 0x8000
|
||||
+
|
||||
struct bnxt {
|
||||
void __iomem *bar0;
|
||||
void __iomem *bar1;
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c 2020-02-06 16:23:18.306489323 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c 2020-02-06 16:23:19.896474728 +0100
|
||||
@@ -15,6 +15,84 @@
|
||||
#include "bnxt_vfr.h"
|
||||
#include "bnxt_devlink.h"
|
||||
|
||||
+static int bnxt_fw_reporter_diagnose(struct devlink_health_reporter *reporter,
|
||||
+ struct devlink_fmsg *fmsg)
|
||||
+{
|
||||
+ struct bnxt *bp = devlink_health_reporter_priv(reporter);
|
||||
+ struct bnxt_fw_health *health = bp->fw_health;
|
||||
+ u32 val, health_status;
|
||||
+ int rc;
|
||||
+
|
||||
+ if (!health || test_bit(BNXT_STATE_IN_FW_RESET, &bp->state))
|
||||
+ return 0;
|
||||
+
|
||||
+ val = bnxt_fw_health_readl(bp, BNXT_FW_HEALTH_REG);
|
||||
+ health_status = val & 0xffff;
|
||||
+
|
||||
+ if (health_status == BNXT_FW_STATUS_HEALTHY) {
|
||||
+ rc = devlink_fmsg_string_pair_put(fmsg, "FW status",
|
||||
+ "Healthy;");
|
||||
+ if (rc)
|
||||
+ return rc;
|
||||
+ } else if (health_status < BNXT_FW_STATUS_HEALTHY) {
|
||||
+ rc = devlink_fmsg_string_pair_put(fmsg, "FW status",
|
||||
+ "Not yet completed initialization;");
|
||||
+ if (rc)
|
||||
+ return rc;
|
||||
+ } else if (health_status > BNXT_FW_STATUS_HEALTHY) {
|
||||
+ rc = devlink_fmsg_string_pair_put(fmsg, "FW status",
|
||||
+ "Encountered fatal error and cannot recover;");
|
||||
+ if (rc)
|
||||
+ return rc;
|
||||
+ }
|
||||
+
|
||||
+ if (val >> 16) {
|
||||
+ rc = devlink_fmsg_u32_pair_put(fmsg, "Error", val >> 16);
|
||||
+ if (rc)
|
||||
+ return rc;
|
||||
+ }
|
||||
+
|
||||
+ val = bnxt_fw_health_readl(bp, BNXT_FW_RESET_CNT_REG);
|
||||
+ rc = devlink_fmsg_u32_pair_put(fmsg, "Reset count", val);
|
||||
+ if (rc)
|
||||
+ return rc;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static const struct devlink_health_reporter_ops bnxt_dl_fw_reporter_ops = {
|
||||
+ .name = "fw",
|
||||
+ .diagnose = bnxt_fw_reporter_diagnose,
|
||||
+};
|
||||
+
|
||||
+static void bnxt_dl_fw_reporters_create(struct bnxt *bp)
|
||||
+{
|
||||
+ struct bnxt_fw_health *health = bp->fw_health;
|
||||
+
|
||||
+ if (!health)
|
||||
+ return;
|
||||
+
|
||||
+ health->fw_reporter =
|
||||
+ devlink_health_reporter_create(bp->dl, &bnxt_dl_fw_reporter_ops,
|
||||
+ 0, false, bp);
|
||||
+ if (IS_ERR(health->fw_reporter)) {
|
||||
+ netdev_warn(bp->dev, "Failed to create FW health reporter, rc = %ld\n",
|
||||
+ PTR_ERR(health->fw_reporter));
|
||||
+ health->fw_reporter = NULL;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static void bnxt_dl_fw_reporters_destroy(struct bnxt *bp)
|
||||
+{
|
||||
+ struct bnxt_fw_health *health = bp->fw_health;
|
||||
+
|
||||
+ if (!health)
|
||||
+ return;
|
||||
+
|
||||
+ if (health->fw_reporter)
|
||||
+ devlink_health_reporter_destroy(health->fw_reporter);
|
||||
+}
|
||||
+
|
||||
static const struct devlink_ops bnxt_dl_ops = {
|
||||
#ifdef CONFIG_BNXT_SRIOV
|
||||
.eswitch_mode_set = bnxt_dl_eswitch_mode_set,
|
||||
@@ -246,6 +324,8 @@
|
||||
|
||||
devlink_params_publish(dl);
|
||||
|
||||
+ bnxt_dl_fw_reporters_create(bp);
|
||||
+
|
||||
return 0;
|
||||
|
||||
err_dl_port_unreg:
|
||||
@@ -268,6 +348,7 @@
|
||||
if (!dl)
|
||||
return;
|
||||
|
||||
+ bnxt_dl_fw_reporters_destroy(bp);
|
||||
devlink_port_params_unregister(&bp->dl_port, bnxt_dl_port_params,
|
||||
ARRAY_SIZE(bnxt_dl_port_params));
|
||||
devlink_port_unregister(&bp->dl_port);
|
@ -0,0 +1,81 @@
|
||||
From 03bfb6460688a8879a9a159167b3c8d36a4275ee Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:23:27 -0400
|
||||
Subject: [PATCH 72/96] [netdrv] bnxt_en: Handle RESET_NOTIFY async event from
|
||||
firmware
|
||||
|
||||
Message-id: <3a807e3f42d2f73dd6a5c46ce3792861aabac0be.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276499
|
||||
O-Subject: [RHEL-8.2 PATCH 65/78] bnxt_en: Handle RESET_NOTIFY async event from firmware.
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
This event from firmware signals a coordinated reset initiated by the
|
||||
firmware. It may be triggered by some error conditions encountered
|
||||
in the firmware or other orderly reset conditions.
|
||||
|
||||
We store the parameters from this event. Subsequent patches will
|
||||
add logic to handle reset itself using devlink reporters.
|
||||
|
||||
Signed-off-by: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit 2151fe0830fdb951f8ecfcfe67306fdef2366aa0)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 11 +++++++++++
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.h | 7 +++++++
|
||||
2 files changed, 18 insertions(+)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:19.749476077 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:20.029473507 +0100
|
||||
@@ -254,6 +254,7 @@
|
||||
ASYNC_EVENT_CMPL_EVENT_ID_PORT_CONN_NOT_ALLOWED,
|
||||
ASYNC_EVENT_CMPL_EVENT_ID_VF_CFG_CHANGE,
|
||||
ASYNC_EVENT_CMPL_EVENT_ID_LINK_SPEED_CFG_CHANGE,
|
||||
+ ASYNC_EVENT_CMPL_EVENT_ID_RESET_NOTIFY,
|
||||
ASYNC_EVENT_CMPL_EVENT_ID_ERROR_RECOVERY,
|
||||
};
|
||||
|
||||
@@ -1981,6 +1982,16 @@
|
||||
goto async_event_process_exit;
|
||||
set_bit(BNXT_RESET_TASK_SILENT_SP_EVENT, &bp->sp_event);
|
||||
break;
|
||||
+ case ASYNC_EVENT_CMPL_EVENT_ID_RESET_NOTIFY:
|
||||
+ bp->fw_reset_timestamp = jiffies;
|
||||
+ bp->fw_reset_min_dsecs = cmpl->timestamp_lo;
|
||||
+ if (!bp->fw_reset_min_dsecs)
|
||||
+ bp->fw_reset_min_dsecs = BNXT_DFLT_FW_RST_MIN_DSECS;
|
||||
+ bp->fw_reset_max_dsecs = le16_to_cpu(cmpl->timestamp_hi);
|
||||
+ if (!bp->fw_reset_max_dsecs)
|
||||
+ bp->fw_reset_max_dsecs = BNXT_DFLT_FW_RST_MAX_DSECS;
|
||||
+ set_bit(BNXT_FW_RESET_NOTIFY_SP_EVENT, &bp->sp_event);
|
||||
+ break;
|
||||
case ASYNC_EVENT_CMPL_EVENT_ID_ERROR_RECOVERY: {
|
||||
struct bnxt_fw_health *fw_health = bp->fw_health;
|
||||
u32 data1 = le32_to_cpu(cmpl->event_data1);
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.h
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:19.896474728 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:20.029473507 +0100
|
||||
@@ -1719,6 +1719,13 @@
|
||||
#define BNXT_FLOW_STATS_SP_EVENT 15
|
||||
#define BNXT_UPDATE_PHY_SP_EVENT 16
|
||||
#define BNXT_RING_COAL_NOW_SP_EVENT 17
|
||||
+#define BNXT_FW_RESET_NOTIFY_SP_EVENT 18
|
||||
+
|
||||
+ u16 fw_reset_min_dsecs;
|
||||
+#define BNXT_DFLT_FW_RST_MIN_DSECS 20
|
||||
+ u16 fw_reset_max_dsecs;
|
||||
+#define BNXT_DFLT_FW_RST_MAX_DSECS 60
|
||||
+ unsigned long fw_reset_timestamp;
|
||||
|
||||
struct bnxt_fw_health *fw_health;
|
||||
|
@ -0,0 +1,282 @@
|
||||
From e0a7aa5afea68660d3bee9a46dcc04f776da7f1f Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:23:28 -0400
|
||||
Subject: [PATCH 73/96] [netdrv] bnxt_en: Handle firmware reset
|
||||
|
||||
Message-id: <a41729f956772546658a415dc95fed2ba2df6e71.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276504
|
||||
O-Subject: [RHEL-8.2 PATCH 66/78] bnxt_en: Handle firmware reset.
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
Add the bnxt_fw_reset() main function to handle firmware reset. This
|
||||
is triggered by firmware to initiate an orderly reset, for example
|
||||
when a non-fatal exception condition has been detected. bnxt_fw_reset()
|
||||
will first wait for all VFs to shutdown and then start the
|
||||
bnxt_fw_reset_task() work queue to go through the sequence of reset,
|
||||
re-probe, and re-initialization.
|
||||
|
||||
The next patch will add the devlink reporter to start the sequence and
|
||||
call bnxt_fw_reset().
|
||||
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit 230d1f0de754b483ec6eefc1ca5aaeff2b6b9a4c)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 150 ++++++++++++++++++++++++++
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.h | 11 ++
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c | 3 +
|
||||
3 files changed, 164 insertions(+)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:20.029473507 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:20.162472286 +0100
|
||||
@@ -1142,6 +1142,14 @@
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static void bnxt_queue_fw_reset_work(struct bnxt *bp, unsigned long delay)
|
||||
+{
|
||||
+ if (BNXT_PF(bp))
|
||||
+ queue_delayed_work(bnxt_pf_wq, &bp->fw_reset_task, delay);
|
||||
+ else
|
||||
+ schedule_delayed_work(&bp->fw_reset_task, delay);
|
||||
+}
|
||||
+
|
||||
static void bnxt_queue_sp_work(struct bnxt *bp)
|
||||
{
|
||||
if (BNXT_PF(bp))
|
||||
@@ -6360,6 +6368,8 @@
|
||||
struct bnxt_vf_info *vf = &bp->vf;
|
||||
|
||||
vf->vlan = le16_to_cpu(resp->vlan) & VLAN_VID_MASK;
|
||||
+ } else {
|
||||
+ bp->pf.registered_vfs = le16_to_cpu(resp->registered_vfs);
|
||||
}
|
||||
#endif
|
||||
flags = le16_to_cpu(resp->flags);
|
||||
@@ -9985,6 +9995,53 @@
|
||||
bnxt_rtnl_unlock_sp(bp);
|
||||
}
|
||||
|
||||
+static void bnxt_fw_reset_close(struct bnxt *bp)
|
||||
+{
|
||||
+ __bnxt_close_nic(bp, true, false);
|
||||
+ bnxt_ulp_irq_stop(bp);
|
||||
+ bnxt_clear_int_mode(bp);
|
||||
+ bnxt_hwrm_func_drv_unrgtr(bp);
|
||||
+ bnxt_free_ctx_mem(bp);
|
||||
+ kfree(bp->ctx);
|
||||
+ bp->ctx = NULL;
|
||||
+}
|
||||
+
|
||||
+void bnxt_fw_reset(struct bnxt *bp)
|
||||
+{
|
||||
+ int rc;
|
||||
+
|
||||
+ bnxt_rtnl_lock_sp(bp);
|
||||
+ if (test_bit(BNXT_STATE_OPEN, &bp->state) &&
|
||||
+ !test_bit(BNXT_STATE_IN_FW_RESET, &bp->state)) {
|
||||
+ set_bit(BNXT_STATE_IN_FW_RESET, &bp->state);
|
||||
+ if (BNXT_PF(bp) && bp->pf.active_vfs) {
|
||||
+ rc = bnxt_hwrm_func_qcfg(bp);
|
||||
+ if (rc) {
|
||||
+ netdev_err(bp->dev, "Firmware reset aborted, first func_qcfg cmd failed, rc = %d\n",
|
||||
+ rc);
|
||||
+ clear_bit(BNXT_STATE_IN_FW_RESET, &bp->state);
|
||||
+ dev_close(bp->dev);
|
||||
+ goto fw_reset_exit;
|
||||
+ }
|
||||
+ if (bp->pf.registered_vfs || bp->sriov_cfg) {
|
||||
+ u16 vf_tmo_dsecs = bp->pf.registered_vfs * 10;
|
||||
+
|
||||
+ if (bp->fw_reset_max_dsecs < vf_tmo_dsecs)
|
||||
+ bp->fw_reset_max_dsecs = vf_tmo_dsecs;
|
||||
+ bp->fw_reset_state =
|
||||
+ BNXT_FW_RESET_STATE_POLL_VF;
|
||||
+ bnxt_queue_fw_reset_work(bp, HZ / 10);
|
||||
+ goto fw_reset_exit;
|
||||
+ }
|
||||
+ }
|
||||
+ bnxt_fw_reset_close(bp);
|
||||
+ bp->fw_reset_state = BNXT_FW_RESET_STATE_ENABLE_DEV;
|
||||
+ bnxt_queue_fw_reset_work(bp, bp->fw_reset_min_dsecs * HZ / 10);
|
||||
+ }
|
||||
+fw_reset_exit:
|
||||
+ bnxt_rtnl_unlock_sp(bp);
|
||||
+}
|
||||
+
|
||||
static void bnxt_chk_missed_irq(struct bnxt *bp)
|
||||
{
|
||||
int i;
|
||||
@@ -10344,6 +10401,98 @@
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static void bnxt_fw_reset_task(struct work_struct *work)
|
||||
+{
|
||||
+ struct bnxt *bp = container_of(work, struct bnxt, fw_reset_task.work);
|
||||
+ int rc;
|
||||
+
|
||||
+ if (!test_bit(BNXT_STATE_IN_FW_RESET, &bp->state)) {
|
||||
+ netdev_err(bp->dev, "bnxt_fw_reset_task() called when not in fw reset mode!\n");
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ switch (bp->fw_reset_state) {
|
||||
+ case BNXT_FW_RESET_STATE_POLL_VF:
|
||||
+ rc = bnxt_hwrm_func_qcfg(bp);
|
||||
+ if (rc) {
|
||||
+ netdev_err(bp->dev, "Firmware reset aborted, subsequent func_qcfg cmd failed, rc = %d, %d msecs since reset timestamp\n",
|
||||
+ rc, jiffies_to_msecs(jiffies -
|
||||
+ bp->fw_reset_timestamp));
|
||||
+ goto fw_reset_abort;
|
||||
+ }
|
||||
+ if (bp->pf.registered_vfs || bp->sriov_cfg) {
|
||||
+ if (time_after(jiffies, bp->fw_reset_timestamp +
|
||||
+ (bp->fw_reset_max_dsecs * HZ / 10))) {
|
||||
+ clear_bit(BNXT_STATE_IN_FW_RESET, &bp->state);
|
||||
+ bp->fw_reset_state = 0;
|
||||
+ netdev_err(bp->dev, "Firmware reset aborted, %d VFs still registered, sriov_cfg %d\n",
|
||||
+ bp->pf.registered_vfs,
|
||||
+ bp->sriov_cfg);
|
||||
+ return;
|
||||
+ }
|
||||
+ bnxt_queue_fw_reset_work(bp, HZ / 10);
|
||||
+ return;
|
||||
+ }
|
||||
+ bp->fw_reset_timestamp = jiffies;
|
||||
+ rtnl_lock();
|
||||
+ bnxt_fw_reset_close(bp);
|
||||
+ bp->fw_reset_state = BNXT_FW_RESET_STATE_ENABLE_DEV;
|
||||
+ rtnl_unlock();
|
||||
+ bnxt_queue_fw_reset_work(bp, bp->fw_reset_min_dsecs * HZ / 10);
|
||||
+ return;
|
||||
+ case BNXT_FW_RESET_STATE_ENABLE_DEV:
|
||||
+ if (pci_enable_device(bp->pdev)) {
|
||||
+ netdev_err(bp->dev, "Cannot re-enable PCI device\n");
|
||||
+ goto fw_reset_abort;
|
||||
+ }
|
||||
+ pci_set_master(bp->pdev);
|
||||
+ bp->fw_reset_state = BNXT_FW_RESET_STATE_POLL_FW;
|
||||
+ /* fall through */
|
||||
+ case BNXT_FW_RESET_STATE_POLL_FW:
|
||||
+ bp->hwrm_cmd_timeout = SHORT_HWRM_CMD_TIMEOUT;
|
||||
+ rc = __bnxt_hwrm_ver_get(bp, true);
|
||||
+ if (rc) {
|
||||
+ if (time_after(jiffies, bp->fw_reset_timestamp +
|
||||
+ (bp->fw_reset_max_dsecs * HZ / 10))) {
|
||||
+ netdev_err(bp->dev, "Firmware reset aborted\n");
|
||||
+ goto fw_reset_abort;
|
||||
+ }
|
||||
+ bnxt_queue_fw_reset_work(bp, HZ / 5);
|
||||
+ return;
|
||||
+ }
|
||||
+ bp->hwrm_cmd_timeout = DFLT_HWRM_CMD_TIMEOUT;
|
||||
+ bp->fw_reset_state = BNXT_FW_RESET_STATE_OPENING;
|
||||
+ /* fall through */
|
||||
+ case BNXT_FW_RESET_STATE_OPENING:
|
||||
+ while (!rtnl_trylock()) {
|
||||
+ bnxt_queue_fw_reset_work(bp, HZ / 10);
|
||||
+ return;
|
||||
+ }
|
||||
+ rc = bnxt_open(bp->dev);
|
||||
+ if (rc) {
|
||||
+ netdev_err(bp->dev, "bnxt_open_nic() failed\n");
|
||||
+ clear_bit(BNXT_STATE_IN_FW_RESET, &bp->state);
|
||||
+ dev_close(bp->dev);
|
||||
+ }
|
||||
+ bnxt_ulp_irq_restart(bp, rc);
|
||||
+ rtnl_unlock();
|
||||
+
|
||||
+ bp->fw_reset_state = 0;
|
||||
+ /* Make sure fw_reset_state is 0 before clearing the flag */
|
||||
+ smp_mb__before_atomic();
|
||||
+ clear_bit(BNXT_STATE_IN_FW_RESET, &bp->state);
|
||||
+ break;
|
||||
+ }
|
||||
+ return;
|
||||
+
|
||||
+fw_reset_abort:
|
||||
+ clear_bit(BNXT_STATE_IN_FW_RESET, &bp->state);
|
||||
+ bp->fw_reset_state = 0;
|
||||
+ rtnl_lock();
|
||||
+ dev_close(bp->dev);
|
||||
+ rtnl_unlock();
|
||||
+}
|
||||
+
|
||||
static int bnxt_init_board(struct pci_dev *pdev, struct net_device *dev)
|
||||
{
|
||||
int rc;
|
||||
@@ -10406,6 +10555,7 @@
|
||||
pci_enable_pcie_error_reporting(pdev);
|
||||
|
||||
INIT_WORK(&bp->sp_task, bnxt_sp_task);
|
||||
+ INIT_DELAYED_WORK(&bp->fw_reset_task, bnxt_fw_reset_task);
|
||||
|
||||
spin_lock_init(&bp->ntp_fltr_lock);
|
||||
#if BITS_PER_LONG == 32
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.h
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:20.029473507 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:20.163472277 +0100
|
||||
@@ -640,6 +640,7 @@
|
||||
#define BNXT_HWRM_MAX_REQ_LEN (bp->hwrm_max_req_len)
|
||||
#define BNXT_HWRM_SHORT_REQ_LEN sizeof(struct hwrm_short_input)
|
||||
#define DFLT_HWRM_CMD_TIMEOUT 500
|
||||
+#define SHORT_HWRM_CMD_TIMEOUT 20
|
||||
#define HWRM_CMD_TIMEOUT (bp->hwrm_cmd_timeout)
|
||||
#define HWRM_RESET_TIMEOUT ((HWRM_CMD_TIMEOUT) * 4)
|
||||
#define HWRM_RESP_ERR_CODE_MASK 0xffff
|
||||
@@ -1066,6 +1067,7 @@
|
||||
u8 mac_addr[ETH_ALEN];
|
||||
u32 first_vf_id;
|
||||
u16 active_vfs;
|
||||
+ u16 registered_vfs;
|
||||
u16 max_vfs;
|
||||
u32 max_encap_records;
|
||||
u32 max_decap_records;
|
||||
@@ -1721,6 +1723,14 @@
|
||||
#define BNXT_RING_COAL_NOW_SP_EVENT 17
|
||||
#define BNXT_FW_RESET_NOTIFY_SP_EVENT 18
|
||||
|
||||
+ struct delayed_work fw_reset_task;
|
||||
+ int fw_reset_state;
|
||||
+#define BNXT_FW_RESET_STATE_POLL_VF 1
|
||||
+#define BNXT_FW_RESET_STATE_RESET_FW 2
|
||||
+#define BNXT_FW_RESET_STATE_ENABLE_DEV 3
|
||||
+#define BNXT_FW_RESET_STATE_POLL_FW 4
|
||||
+#define BNXT_FW_RESET_STATE_OPENING 5
|
||||
+
|
||||
u16 fw_reset_min_dsecs;
|
||||
#define BNXT_DFLT_FW_RST_MIN_DSECS 20
|
||||
u16 fw_reset_max_dsecs;
|
||||
@@ -1966,6 +1976,7 @@
|
||||
int bnxt_half_open_nic(struct bnxt *bp);
|
||||
void bnxt_half_close_nic(struct bnxt *bp);
|
||||
int bnxt_close_nic(struct bnxt *, bool, bool);
|
||||
+void bnxt_fw_reset(struct bnxt *bp);
|
||||
int bnxt_check_rings(struct bnxt *bp, int tx, int rx, bool sh, int tcs,
|
||||
int tx_xdp);
|
||||
int bnxt_setup_mq_tc(struct net_device *dev, u8 tc);
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c 2020-02-06 16:22:54.098711531 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c 2020-02-06 16:23:20.163472277 +0100
|
||||
@@ -226,6 +226,9 @@
|
||||
struct input *req;
|
||||
int rc;
|
||||
|
||||
+ if (ulp_id != BNXT_ROCE_ULP && bp->fw_reset_state)
|
||||
+ return -EBUSY;
|
||||
+
|
||||
mutex_lock(&bp->hwrm_cmd_lock);
|
||||
req = fw_msg->msg;
|
||||
req->resp_addr = cpu_to_le64(bp->hwrm_cmd_resp_dma_addr);
|
@ -0,0 +1,153 @@
|
||||
From dd8e8f16e4fa95d701b184f9e8b93bd3f0177cb8 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:23:29 -0400
|
||||
Subject: [PATCH 74/96] [netdrv] bnxt_en: Add devlink health reset reporter
|
||||
|
||||
Message-id: <4524cb0b03008ec82cf84ba49c1d62dc2c7e029a.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276496
|
||||
O-Subject: [RHEL-8.2 PATCH 67/78] bnxt_en: Add devlink health reset reporter.
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
Add devlink health reporter for the firmware reset event. Once we get
|
||||
the notification from firmware about the impending reset, the driver
|
||||
will report this to devlink and the call to bnxt_fw_reset() will be
|
||||
initiated to complete the reset sequence.
|
||||
|
||||
Cc: Jiri Pirko <jiri@mellanox.com>
|
||||
Signed-off-by: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit 657a33c8a0a2342e91259b28356838dc89216b19)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 3 ++
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.h | 5 +++
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c | 52 +++++++++++++++++++++++
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.h | 1 +
|
||||
4 files changed, 61 insertions(+)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:20.162472286 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:20.307470956 +0100
|
||||
@@ -10172,6 +10172,9 @@
|
||||
if (test_and_clear_bit(BNXT_RESET_TASK_SILENT_SP_EVENT, &bp->sp_event))
|
||||
bnxt_reset(bp, true);
|
||||
|
||||
+ if (test_and_clear_bit(BNXT_FW_RESET_NOTIFY_SP_EVENT, &bp->sp_event))
|
||||
+ bnxt_devlink_health_report(bp, BNXT_FW_RESET_NOTIFY_SP_EVENT);
|
||||
+
|
||||
smp_mb__before_atomic();
|
||||
clear_bit(BNXT_STATE_IN_SP_TASK, &bp->state);
|
||||
}
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.h
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:20.163472277 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:20.307470956 +0100
|
||||
@@ -1371,6 +1371,11 @@
|
||||
u32 fw_reset_seq_vals[16];
|
||||
u32 fw_reset_seq_delay_msec[16];
|
||||
struct devlink_health_reporter *fw_reporter;
|
||||
+ struct devlink_health_reporter *fw_reset_reporter;
|
||||
+};
|
||||
+
|
||||
+struct bnxt_fw_reporter_ctx {
|
||||
+ unsigned long sp_event;
|
||||
};
|
||||
|
||||
#define BNXT_FW_HEALTH_REG_TYPE_MASK 3
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c 2020-02-06 16:23:19.896474728 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c 2020-02-06 16:23:20.308470946 +0100
|
||||
@@ -65,6 +65,24 @@
|
||||
.diagnose = bnxt_fw_reporter_diagnose,
|
||||
};
|
||||
|
||||
+static int bnxt_fw_reset_recover(struct devlink_health_reporter *reporter,
|
||||
+ void *priv_ctx)
|
||||
+{
|
||||
+ struct bnxt *bp = devlink_health_reporter_priv(reporter);
|
||||
+
|
||||
+ if (!priv_ctx)
|
||||
+ return -EOPNOTSUPP;
|
||||
+
|
||||
+ bnxt_fw_reset(bp);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static const
|
||||
+struct devlink_health_reporter_ops bnxt_dl_fw_reset_reporter_ops = {
|
||||
+ .name = "fw_reset",
|
||||
+ .recover = bnxt_fw_reset_recover,
|
||||
+};
|
||||
+
|
||||
static void bnxt_dl_fw_reporters_create(struct bnxt *bp)
|
||||
{
|
||||
struct bnxt_fw_health *health = bp->fw_health;
|
||||
@@ -80,6 +98,16 @@
|
||||
PTR_ERR(health->fw_reporter));
|
||||
health->fw_reporter = NULL;
|
||||
}
|
||||
+
|
||||
+ health->fw_reset_reporter =
|
||||
+ devlink_health_reporter_create(bp->dl,
|
||||
+ &bnxt_dl_fw_reset_reporter_ops,
|
||||
+ 0, true, bp);
|
||||
+ if (IS_ERR(health->fw_reset_reporter)) {
|
||||
+ netdev_warn(bp->dev, "Failed to create FW fatal health reporter, rc = %ld\n",
|
||||
+ PTR_ERR(health->fw_reset_reporter));
|
||||
+ health->fw_reset_reporter = NULL;
|
||||
+ }
|
||||
}
|
||||
|
||||
static void bnxt_dl_fw_reporters_destroy(struct bnxt *bp)
|
||||
@@ -91,6 +119,30 @@
|
||||
|
||||
if (health->fw_reporter)
|
||||
devlink_health_reporter_destroy(health->fw_reporter);
|
||||
+
|
||||
+ if (health->fw_reset_reporter)
|
||||
+ devlink_health_reporter_destroy(health->fw_reset_reporter);
|
||||
+}
|
||||
+
|
||||
+void bnxt_devlink_health_report(struct bnxt *bp, unsigned long event)
|
||||
+{
|
||||
+ struct bnxt_fw_health *fw_health = bp->fw_health;
|
||||
+ struct bnxt_fw_reporter_ctx fw_reporter_ctx;
|
||||
+
|
||||
+ if (!fw_health)
|
||||
+ return;
|
||||
+
|
||||
+ fw_reporter_ctx.sp_event = event;
|
||||
+ switch (event) {
|
||||
+ case BNXT_FW_RESET_NOTIFY_SP_EVENT:
|
||||
+ if (!fw_health->fw_reset_reporter)
|
||||
+ return;
|
||||
+
|
||||
+ devlink_health_report(fw_health->fw_reset_reporter,
|
||||
+ "FW non-fatal reset event received",
|
||||
+ &fw_reporter_ctx);
|
||||
+ return;
|
||||
+ }
|
||||
}
|
||||
|
||||
static const struct devlink_ops bnxt_dl_ops = {
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.h
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.h 2020-02-06 16:23:11.278553834 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.h 2020-02-06 16:23:20.308470946 +0100
|
||||
@@ -55,6 +55,7 @@
|
||||
u16 num_bits;
|
||||
};
|
||||
|
||||
+void bnxt_devlink_health_report(struct bnxt *bp, unsigned long event);
|
||||
int bnxt_dl_register(struct bnxt *bp);
|
||||
void bnxt_dl_unregister(struct bnxt *bp);
|
||||
|
@ -0,0 +1,162 @@
|
||||
From 94a4266dd4286313065805b7d482f1aa7c61acd8 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:23:30 -0400
|
||||
Subject: [PATCH 75/96] [netdrv] bnxt_en: Retain user settings on a VF after
|
||||
RESET_NOTIFY event
|
||||
|
||||
Message-id: <dd4423a80cc562371bcf6ad7b9dc860e4c0041f5.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276489
|
||||
O-Subject: [RHEL-8.2 PATCH 68/78] bnxt_en: Retain user settings on a VF after RESET_NOTIFY event.
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
Retain the VF MAC address, default VLAN, TX rate control, trust settings
|
||||
of VFs after firmware reset.
|
||||
|
||||
Signed-off-by: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit 2cd8696850450b750f278be06ee56eb51d84621c)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 2 +-
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c | 50 +++++++++++++++++++++----
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.h | 2 +-
|
||||
3 files changed, 45 insertions(+), 9 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:20.307470956 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:20.461469542 +0100
|
||||
@@ -9216,7 +9216,7 @@
|
||||
int n = pf->active_vfs;
|
||||
|
||||
if (n)
|
||||
- bnxt_cfg_hw_sriov(bp, &n);
|
||||
+ bnxt_cfg_hw_sriov(bp, &n, true);
|
||||
}
|
||||
bnxt_hwmon_open(bp);
|
||||
}
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c 2020-02-06 16:23:19.750476068 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c 2020-02-06 16:23:20.461469542 +0100
|
||||
@@ -470,10 +470,43 @@
|
||||
return hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
|
||||
}
|
||||
|
||||
+/* Caller holds bp->hwrm_cmd_lock mutex lock */
|
||||
+static void __bnxt_set_vf_params(struct bnxt *bp, int vf_id)
|
||||
+{
|
||||
+ struct hwrm_func_cfg_input req = {0};
|
||||
+ struct bnxt_vf_info *vf;
|
||||
+
|
||||
+ vf = &bp->pf.vf[vf_id];
|
||||
+ bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_FUNC_CFG, -1, -1);
|
||||
+ req.fid = cpu_to_le16(vf->fw_fid);
|
||||
+ req.flags = cpu_to_le32(vf->func_flags);
|
||||
+
|
||||
+ if (is_valid_ether_addr(vf->mac_addr)) {
|
||||
+ req.enables |= cpu_to_le32(FUNC_CFG_REQ_ENABLES_DFLT_MAC_ADDR);
|
||||
+ memcpy(req.dflt_mac_addr, vf->mac_addr, ETH_ALEN);
|
||||
+ }
|
||||
+ if (vf->vlan) {
|
||||
+ req.enables |= cpu_to_le32(FUNC_CFG_REQ_ENABLES_DFLT_VLAN);
|
||||
+ req.dflt_vlan = cpu_to_le16(vf->vlan);
|
||||
+ }
|
||||
+ if (vf->max_tx_rate) {
|
||||
+ req.enables |= cpu_to_le32(FUNC_CFG_REQ_ENABLES_MAX_BW);
|
||||
+ req.max_bw = cpu_to_le32(vf->max_tx_rate);
|
||||
+#ifdef HAVE_IFLA_TX_RATE
|
||||
+ req.enables |= cpu_to_le32(FUNC_CFG_REQ_ENABLES_MIN_BW);
|
||||
+ req.min_bw = cpu_to_le32(vf->min_tx_rate);
|
||||
+#endif
|
||||
+ }
|
||||
+ if (vf->flags & BNXT_VF_TRUST)
|
||||
+ req.flags |= cpu_to_le32(FUNC_CFG_REQ_FLAGS_TRUSTED_VF_ENABLE);
|
||||
+
|
||||
+ _hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
|
||||
+}
|
||||
+
|
||||
/* Only called by PF to reserve resources for VFs, returns actual number of
|
||||
* VFs configured, or < 0 on error.
|
||||
*/
|
||||
-static int bnxt_hwrm_func_vf_resc_cfg(struct bnxt *bp, int num_vfs)
|
||||
+static int bnxt_hwrm_func_vf_resc_cfg(struct bnxt *bp, int num_vfs, bool reset)
|
||||
{
|
||||
struct hwrm_func_vf_resource_cfg_input req = {0};
|
||||
struct bnxt_hw_resc *hw_resc = &bp->hw_resc;
|
||||
@@ -545,6 +578,9 @@
|
||||
|
||||
mutex_lock(&bp->hwrm_cmd_lock);
|
||||
for (i = 0; i < num_vfs; i++) {
|
||||
+ if (reset)
|
||||
+ __bnxt_set_vf_params(bp, i);
|
||||
+
|
||||
req.vf_id = cpu_to_le16(pf->first_vf_id + i);
|
||||
rc = _hwrm_send_message(bp, &req, sizeof(req),
|
||||
HWRM_CMD_TIMEOUT);
|
||||
@@ -659,15 +695,15 @@
|
||||
return rc;
|
||||
}
|
||||
|
||||
-static int bnxt_func_cfg(struct bnxt *bp, int num_vfs)
|
||||
+static int bnxt_func_cfg(struct bnxt *bp, int num_vfs, bool reset)
|
||||
{
|
||||
if (BNXT_NEW_RM(bp))
|
||||
- return bnxt_hwrm_func_vf_resc_cfg(bp, num_vfs);
|
||||
+ return bnxt_hwrm_func_vf_resc_cfg(bp, num_vfs, reset);
|
||||
else
|
||||
return bnxt_hwrm_func_cfg(bp, num_vfs);
|
||||
}
|
||||
|
||||
-int bnxt_cfg_hw_sriov(struct bnxt *bp, int *num_vfs)
|
||||
+int bnxt_cfg_hw_sriov(struct bnxt *bp, int *num_vfs, bool reset)
|
||||
{
|
||||
int rc;
|
||||
|
||||
@@ -677,7 +713,7 @@
|
||||
return rc;
|
||||
|
||||
/* Reserve resources for VFs */
|
||||
- rc = bnxt_func_cfg(bp, *num_vfs);
|
||||
+ rc = bnxt_func_cfg(bp, *num_vfs, reset);
|
||||
if (rc != *num_vfs) {
|
||||
if (rc <= 0) {
|
||||
netdev_warn(bp->dev, "Unable to reserve resources for SRIOV.\n");
|
||||
@@ -758,7 +794,7 @@
|
||||
if (rc)
|
||||
goto err_out1;
|
||||
|
||||
- rc = bnxt_cfg_hw_sriov(bp, num_vfs);
|
||||
+ rc = bnxt_cfg_hw_sriov(bp, num_vfs, false);
|
||||
if (rc)
|
||||
goto err_out2;
|
||||
|
||||
@@ -1144,7 +1180,7 @@
|
||||
}
|
||||
#else
|
||||
|
||||
-int bnxt_cfg_hw_sriov(struct bnxt *bp, int *num_vfs)
|
||||
+int bnxt_cfg_hw_sriov(struct bnxt *bp, int *num_vfs, bool reset)
|
||||
{
|
||||
if (*num_vfs)
|
||||
return -EOPNOTSUPP;
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.h
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.h 2020-02-06 16:23:18.878484072 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.h 2020-02-06 16:23:20.461469542 +0100
|
||||
@@ -36,7 +36,7 @@
|
||||
int bnxt_set_vf_spoofchk(struct net_device *, int, bool);
|
||||
int bnxt_set_vf_trust(struct net_device *dev, int vf_id, bool trust);
|
||||
int bnxt_sriov_configure(struct pci_dev *pdev, int num_vfs);
|
||||
-int bnxt_cfg_hw_sriov(struct bnxt *bp, int *num_vfs);
|
||||
+int bnxt_cfg_hw_sriov(struct bnxt *bp, int *num_vfs, bool reset);
|
||||
void bnxt_sriov_disable(struct bnxt *);
|
||||
void bnxt_hwrm_exec_fwd_req(struct bnxt *);
|
||||
void bnxt_update_vf_mac(struct bnxt *);
|
@ -0,0 +1,124 @@
|
||||
From 64f664056ef6e4616a8a7da3240cfd54620f03fe Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:23:31 -0400
|
||||
Subject: [PATCH 76/96] [netdrv] bnxt_en: Do not send firmware messages if
|
||||
firmware is in error state
|
||||
|
||||
Message-id: <4facd24c48464bd7bb706680b486a5bad24d21d7.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276503
|
||||
O-Subject: [RHEL-8.2 PATCH 69/78] bnxt_en: Do not send firmware messages if firmware is in error state.
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
Add a flag to mark that the firmware has encountered fatal condition.
|
||||
The driver will not send any more firmware messages and will return
|
||||
error to the caller. Fix up some clean up functions to continue
|
||||
and not abort when the firmware message function returns error.
|
||||
|
||||
This is preparation work to fully handle firmware error recovery
|
||||
under fatal conditions.
|
||||
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit b4fff2079d1080af7dcad8ad0e80cc89e1ee000c)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 18 +++++++++++-------
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.h | 1 +
|
||||
2 files changed, 12 insertions(+), 7 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:20.461469542 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:20.602468248 +0100
|
||||
@@ -4178,6 +4178,9 @@
|
||||
u32 bar_offset = BNXT_GRCPF_REG_CHIMP_COMM;
|
||||
u16 dst = BNXT_HWRM_CHNL_CHIMP;
|
||||
|
||||
+ if (test_bit(BNXT_STATE_FW_FATAL_COND, &bp->state))
|
||||
+ return -EBUSY;
|
||||
+
|
||||
if (msg_len > BNXT_HWRM_MAX_REQ_LEN) {
|
||||
if (msg_len > bp->hwrm_max_ext_req_len ||
|
||||
!bp->hwrm_short_cmd_req_addr)
|
||||
@@ -5047,8 +5050,6 @@
|
||||
cpu_to_le32(bp->vnic_info[vnic_id].fw_vnic_id);
|
||||
|
||||
rc = hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
|
||||
- if (rc)
|
||||
- return rc;
|
||||
bp->vnic_info[vnic_id].fw_vnic_id = INVALID_HW_RING_ID;
|
||||
}
|
||||
return rc;
|
||||
@@ -5188,8 +5189,6 @@
|
||||
|
||||
rc = _hwrm_send_message(bp, &req, sizeof(req),
|
||||
HWRM_CMD_TIMEOUT);
|
||||
- if (rc)
|
||||
- break;
|
||||
bp->grp_info[i].fw_grp_id = INVALID_HW_RING_ID;
|
||||
}
|
||||
mutex_unlock(&bp->hwrm_cmd_lock);
|
||||
@@ -5508,6 +5507,9 @@
|
||||
struct hwrm_ring_free_output *resp = bp->hwrm_cmd_resp_addr;
|
||||
u16 error_code;
|
||||
|
||||
+ if (test_bit(BNXT_STATE_FW_FATAL_COND, &bp->state))
|
||||
+ return 0;
|
||||
+
|
||||
bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_RING_FREE, cmpl_ring_id, -1);
|
||||
req.ring_type = ring_type;
|
||||
req.ring_id = cpu_to_le16(ring->fw_ring_id);
|
||||
@@ -6305,8 +6307,6 @@
|
||||
|
||||
rc = _hwrm_send_message(bp, &req, sizeof(req),
|
||||
HWRM_CMD_TIMEOUT);
|
||||
- if (rc)
|
||||
- break;
|
||||
|
||||
cpr->hw_stats_ctx_id = INVALID_STATS_CTX_ID;
|
||||
}
|
||||
@@ -7420,6 +7420,8 @@
|
||||
|
||||
if (set_tpa)
|
||||
tpa_flags = bp->flags & BNXT_FLAG_TPA;
|
||||
+ else if (test_bit(BNXT_STATE_FW_FATAL_COND, &bp->state))
|
||||
+ return 0;
|
||||
for (i = 0; i < bp->nr_vnics; i++) {
|
||||
rc = bnxt_hwrm_vnic_set_tpa(bp, i, tpa_flags);
|
||||
if (rc) {
|
||||
@@ -10014,7 +10016,8 @@
|
||||
if (test_bit(BNXT_STATE_OPEN, &bp->state) &&
|
||||
!test_bit(BNXT_STATE_IN_FW_RESET, &bp->state)) {
|
||||
set_bit(BNXT_STATE_IN_FW_RESET, &bp->state);
|
||||
- if (BNXT_PF(bp) && bp->pf.active_vfs) {
|
||||
+ if (BNXT_PF(bp) && bp->pf.active_vfs &&
|
||||
+ !test_bit(BNXT_STATE_FW_FATAL_COND, &bp->state)) {
|
||||
rc = bnxt_hwrm_func_qcfg(bp);
|
||||
if (rc) {
|
||||
netdev_err(bp->dev, "Firmware reset aborted, first func_qcfg cmd failed, rc = %d\n",
|
||||
@@ -10444,6 +10447,7 @@
|
||||
bnxt_queue_fw_reset_work(bp, bp->fw_reset_min_dsecs * HZ / 10);
|
||||
return;
|
||||
case BNXT_FW_RESET_STATE_ENABLE_DEV:
|
||||
+ clear_bit(BNXT_STATE_FW_FATAL_COND, &bp->state);
|
||||
if (pci_enable_device(bp->pdev)) {
|
||||
netdev_err(bp->dev, "Cannot re-enable PCI device\n");
|
||||
goto fw_reset_abort;
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.h
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:20.307470956 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:20.602468248 +0100
|
||||
@@ -1617,6 +1617,7 @@
|
||||
#define BNXT_STATE_FW_RESET_DET 3
|
||||
#define BNXT_STATE_IN_FW_RESET 4
|
||||
#define BNXT_STATE_ABORT_ERR 5
|
||||
+#define BNXT_STATE_FW_FATAL_COND 6
|
||||
|
||||
struct bnxt_irq *irq_tbl;
|
||||
int total_irqs;
|
@ -0,0 +1,112 @@
|
||||
From c587c80cd46091f35a6d063dd4c515f600cc91b9 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:23:32 -0400
|
||||
Subject: [PATCH 77/96] [netdrv] bnxt_en: Add RESET_FW state logic to
|
||||
bnxt_fw_reset_task()
|
||||
|
||||
Message-id: <4dcd528def5dab7e4524d88a3aa5306d1e6d561f.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276490
|
||||
O-Subject: [RHEL-8.2 PATCH 70/78] bnxt_en: Add RESET_FW state logic to bnxt_fw_reset_task().
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
This state handles driver initiated chip reset during error recovery.
|
||||
Only the master function will perform this step during error recovery.
|
||||
The next patch will add code to initiate this reset from the master
|
||||
function.
|
||||
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit cbb51067a5f5fbae733283b67fc8013881eb4bb1)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 64 +++++++++++++++++++++++++++++++
|
||||
1 file changed, 64 insertions(+)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:20.602468248 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:20.736467018 +0100
|
||||
@@ -10407,6 +10407,62 @@
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static void bnxt_fw_reset_writel(struct bnxt *bp, int reg_idx)
|
||||
+{
|
||||
+ struct bnxt_fw_health *fw_health = bp->fw_health;
|
||||
+ u32 reg = fw_health->fw_reset_seq_regs[reg_idx];
|
||||
+ u32 val = fw_health->fw_reset_seq_vals[reg_idx];
|
||||
+ u32 reg_type, reg_off, delay_msecs;
|
||||
+
|
||||
+ delay_msecs = fw_health->fw_reset_seq_delay_msec[reg_idx];
|
||||
+ reg_type = BNXT_FW_HEALTH_REG_TYPE(reg);
|
||||
+ reg_off = BNXT_FW_HEALTH_REG_OFF(reg);
|
||||
+ switch (reg_type) {
|
||||
+ case BNXT_FW_HEALTH_REG_TYPE_CFG:
|
||||
+ pci_write_config_dword(bp->pdev, reg_off, val);
|
||||
+ break;
|
||||
+ case BNXT_FW_HEALTH_REG_TYPE_GRC:
|
||||
+ writel(reg_off & BNXT_GRC_BASE_MASK,
|
||||
+ bp->bar0 + BNXT_GRCPF_REG_WINDOW_BASE_OUT + 4);
|
||||
+ reg_off = (reg_off & BNXT_GRC_OFFSET_MASK) + 0x2000;
|
||||
+ /* fall through */
|
||||
+ case BNXT_FW_HEALTH_REG_TYPE_BAR0:
|
||||
+ writel(val, bp->bar0 + reg_off);
|
||||
+ break;
|
||||
+ case BNXT_FW_HEALTH_REG_TYPE_BAR1:
|
||||
+ writel(val, bp->bar1 + reg_off);
|
||||
+ break;
|
||||
+ }
|
||||
+ if (delay_msecs) {
|
||||
+ pci_read_config_dword(bp->pdev, 0, &val);
|
||||
+ msleep(delay_msecs);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static void bnxt_reset_all(struct bnxt *bp)
|
||||
+{
|
||||
+ struct bnxt_fw_health *fw_health = bp->fw_health;
|
||||
+ int i;
|
||||
+
|
||||
+ if (fw_health->flags & ERROR_RECOVERY_QCFG_RESP_FLAGS_HOST) {
|
||||
+ for (i = 0; i < fw_health->fw_reset_seq_cnt; i++)
|
||||
+ bnxt_fw_reset_writel(bp, i);
|
||||
+ } else if (fw_health->flags & ERROR_RECOVERY_QCFG_RESP_FLAGS_CO_CPU) {
|
||||
+ struct hwrm_fw_reset_input req = {0};
|
||||
+ int rc;
|
||||
+
|
||||
+ bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_FW_RESET, -1, -1);
|
||||
+ req.resp_addr = cpu_to_le64(bp->hwrm_cmd_kong_resp_dma_addr);
|
||||
+ req.embedded_proc_type = FW_RESET_REQ_EMBEDDED_PROC_TYPE_CHIP;
|
||||
+ req.selfrst_status = FW_RESET_REQ_SELFRST_STATUS_SELFRSTASAP;
|
||||
+ req.flags = FW_RESET_REQ_FLAGS_RESET_GRACEFUL;
|
||||
+ rc = hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
|
||||
+ if (rc)
|
||||
+ netdev_warn(bp->dev, "Unable to reset FW rc=%d\n", rc);
|
||||
+ }
|
||||
+ bp->fw_reset_timestamp = jiffies;
|
||||
+}
|
||||
+
|
||||
static void bnxt_fw_reset_task(struct work_struct *work)
|
||||
{
|
||||
struct bnxt *bp = container_of(work, struct bnxt, fw_reset_task.work);
|
||||
@@ -10446,6 +10502,14 @@
|
||||
rtnl_unlock();
|
||||
bnxt_queue_fw_reset_work(bp, bp->fw_reset_min_dsecs * HZ / 10);
|
||||
return;
|
||||
+ case BNXT_FW_RESET_STATE_RESET_FW: {
|
||||
+ u32 wait_dsecs = bp->fw_health->post_reset_wait_dsecs;
|
||||
+
|
||||
+ bnxt_reset_all(bp);
|
||||
+ bp->fw_reset_state = BNXT_FW_RESET_STATE_ENABLE_DEV;
|
||||
+ bnxt_queue_fw_reset_work(bp, wait_dsecs * HZ / 10);
|
||||
+ return;
|
||||
+ }
|
||||
case BNXT_FW_RESET_STATE_ENABLE_DEV:
|
||||
clear_bit(BNXT_STATE_FW_FATAL_COND, &bp->state);
|
||||
if (pci_enable_device(bp->pdev)) {
|
@ -0,0 +1,113 @@
|
||||
From bc6e952463a8ff739d2c19e2bf244b2fc20333e5 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:23:33 -0400
|
||||
Subject: [PATCH 78/96] [netdrv] bnxt_en: Add bnxt_fw_exception() to handle
|
||||
fatal firmware errors
|
||||
|
||||
Message-id: <7d2820df47f74feb4d96b3892f2ac534344a8293.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276501
|
||||
O-Subject: [RHEL-8.2 PATCH 71/78] bnxt_en: Add bnxt_fw_exception() to handle fatal firmware errors.
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
This call will handle fatal firmware errors by forcing a reset on the
|
||||
firmware. The master function driver will carry out the forced reset.
|
||||
The sequence will go through the same bnxt_fw_reset_task() workqueue.
|
||||
This fatal reset differs from the non-fatal reset at the beginning
|
||||
stages. From the BNXT_FW_RESET_STATE_ENABLE_DEV state onwards where
|
||||
the firmware is coming out of reset, it is practically identical to the
|
||||
non-fatal reset.
|
||||
|
||||
The next patch will add the periodic heartbeat check and the devlink
|
||||
reporter to report the fatal event and to initiate the bnxt_fw_exception()
|
||||
call.
|
||||
|
||||
Signed-off-by: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit d1db9e166bf6a50e1e6713f3fd3b4de6007e3671)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 44 +++++++++++++++++++++++++++++++
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.h | 1 +
|
||||
2 files changed, 45 insertions(+)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:20.736467018 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:20.864465843 +0100
|
||||
@@ -10008,6 +10008,40 @@
|
||||
bp->ctx = NULL;
|
||||
}
|
||||
|
||||
+/* rtnl_lock is acquired before calling this function */
|
||||
+static void bnxt_force_fw_reset(struct bnxt *bp)
|
||||
+{
|
||||
+ struct bnxt_fw_health *fw_health = bp->fw_health;
|
||||
+ u32 wait_dsecs;
|
||||
+
|
||||
+ if (!test_bit(BNXT_STATE_OPEN, &bp->state) ||
|
||||
+ test_bit(BNXT_STATE_IN_FW_RESET, &bp->state))
|
||||
+ return;
|
||||
+
|
||||
+ set_bit(BNXT_STATE_IN_FW_RESET, &bp->state);
|
||||
+ bnxt_fw_reset_close(bp);
|
||||
+ wait_dsecs = fw_health->master_func_wait_dsecs;
|
||||
+ if (fw_health->master) {
|
||||
+ if (fw_health->flags & ERROR_RECOVERY_QCFG_RESP_FLAGS_CO_CPU)
|
||||
+ wait_dsecs = 0;
|
||||
+ bp->fw_reset_state = BNXT_FW_RESET_STATE_RESET_FW;
|
||||
+ } else {
|
||||
+ bp->fw_reset_timestamp = jiffies + wait_dsecs * HZ / 10;
|
||||
+ wait_dsecs = fw_health->normal_func_wait_dsecs;
|
||||
+ bp->fw_reset_state = BNXT_FW_RESET_STATE_ENABLE_DEV;
|
||||
+ }
|
||||
+ bp->fw_reset_max_dsecs = fw_health->post_reset_max_wait_dsecs;
|
||||
+ bnxt_queue_fw_reset_work(bp, wait_dsecs * HZ / 10);
|
||||
+}
|
||||
+
|
||||
+void bnxt_fw_exception(struct bnxt *bp)
|
||||
+{
|
||||
+ set_bit(BNXT_STATE_FW_FATAL_COND, &bp->state);
|
||||
+ bnxt_rtnl_lock_sp(bp);
|
||||
+ bnxt_force_fw_reset(bp);
|
||||
+ bnxt_rtnl_unlock_sp(bp);
|
||||
+}
|
||||
+
|
||||
void bnxt_fw_reset(struct bnxt *bp)
|
||||
{
|
||||
int rc;
|
||||
@@ -10511,6 +10545,16 @@
|
||||
return;
|
||||
}
|
||||
case BNXT_FW_RESET_STATE_ENABLE_DEV:
|
||||
+ if (test_bit(BNXT_STATE_FW_FATAL_COND, &bp->state) &&
|
||||
+ bp->fw_health) {
|
||||
+ u32 val;
|
||||
+
|
||||
+ val = bnxt_fw_health_readl(bp,
|
||||
+ BNXT_FW_RESET_INPROG_REG);
|
||||
+ if (val)
|
||||
+ netdev_warn(bp->dev, "FW reset inprog %x after min wait time.\n",
|
||||
+ val);
|
||||
+ }
|
||||
clear_bit(BNXT_STATE_FW_FATAL_COND, &bp->state);
|
||||
if (pci_enable_device(bp->pdev)) {
|
||||
netdev_err(bp->dev, "Cannot re-enable PCI device\n");
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.h
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:20.602468248 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:20.864465843 +0100
|
||||
@@ -1982,6 +1982,7 @@
|
||||
int bnxt_half_open_nic(struct bnxt *bp);
|
||||
void bnxt_half_close_nic(struct bnxt *bp);
|
||||
int bnxt_close_nic(struct bnxt *, bool, bool);
|
||||
+void bnxt_fw_exception(struct bnxt *bp);
|
||||
void bnxt_fw_reset(struct bnxt *bp);
|
||||
int bnxt_check_rings(struct bnxt *bp, int tx, int rx, bool sh, int tcs,
|
||||
int tx_xdp);
|
@ -0,0 +1,311 @@
|
||||
From b3e7152c648b111070c144a01ce482ec7f3f593c Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:23:34 -0400
|
||||
Subject: [PATCH 79/96] [netdrv] bnxt_en: Add FW fatal devlink_health_reporter
|
||||
|
||||
Message-id: <f7f97c323916640b6204ae069cfe0aaf36db26da.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276494
|
||||
O-Subject: [RHEL-8.2 PATCH 72/78] bnxt_en: Add FW fatal devlink_health_reporter.
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
Health show command example and output:
|
||||
|
||||
$ devlink health show pci/0000:af:00.0 reporter fw_fatal
|
||||
|
||||
pci/0000:af:00.0:
|
||||
name fw_fatal
|
||||
state healthy error 1 recover 1 grace_period 0 auto_recover true
|
||||
|
||||
Fatal events from firmware or missing periodic heartbeats will
|
||||
be reported and recovery will be handled.
|
||||
|
||||
We also turn on the support flags when we register with the firmware to
|
||||
enable this health and recovery feature in the firmware.
|
||||
|
||||
Cc: Jiri Pirko <jiri@mellanox.com>
|
||||
Signed-off-by: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit acfb50e4e773c9a5755a3c265c7c20d37a8642e5)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 80 ++++++++++++++++++++++-
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.h | 7 ++
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c | 56 ++++++++++++++++
|
||||
3 files changed, 141 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:20.864465843 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:21.000464594 +0100
|
||||
@@ -1990,7 +1990,9 @@
|
||||
goto async_event_process_exit;
|
||||
set_bit(BNXT_RESET_TASK_SILENT_SP_EVENT, &bp->sp_event);
|
||||
break;
|
||||
- case ASYNC_EVENT_CMPL_EVENT_ID_RESET_NOTIFY:
|
||||
+ case ASYNC_EVENT_CMPL_EVENT_ID_RESET_NOTIFY: {
|
||||
+ u32 data1 = le32_to_cpu(cmpl->event_data1);
|
||||
+
|
||||
bp->fw_reset_timestamp = jiffies;
|
||||
bp->fw_reset_min_dsecs = cmpl->timestamp_lo;
|
||||
if (!bp->fw_reset_min_dsecs)
|
||||
@@ -1998,8 +2000,16 @@
|
||||
bp->fw_reset_max_dsecs = le16_to_cpu(cmpl->timestamp_hi);
|
||||
if (!bp->fw_reset_max_dsecs)
|
||||
bp->fw_reset_max_dsecs = BNXT_DFLT_FW_RST_MAX_DSECS;
|
||||
+ if (EVENT_DATA1_RESET_NOTIFY_FATAL(data1)) {
|
||||
+ netdev_warn(bp->dev, "Firmware fatal reset event received\n");
|
||||
+ set_bit(BNXT_STATE_FW_FATAL_COND, &bp->state);
|
||||
+ } else {
|
||||
+ netdev_warn(bp->dev, "Firmware non-fatal reset event received, max wait time %d msec\n",
|
||||
+ bp->fw_reset_max_dsecs * 100);
|
||||
+ }
|
||||
set_bit(BNXT_FW_RESET_NOTIFY_SP_EVENT, &bp->sp_event);
|
||||
break;
|
||||
+ }
|
||||
case ASYNC_EVENT_CMPL_EVENT_ID_ERROR_RECOVERY: {
|
||||
struct bnxt_fw_health *fw_health = bp->fw_health;
|
||||
u32 data1 = le32_to_cpu(cmpl->event_data1);
|
||||
@@ -4419,6 +4429,7 @@
|
||||
{
|
||||
struct hwrm_func_drv_rgtr_output *resp = bp->hwrm_cmd_resp_addr;
|
||||
struct hwrm_func_drv_rgtr_input req = {0};
|
||||
+ u32 flags;
|
||||
int rc;
|
||||
|
||||
bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_FUNC_DRV_RGTR, -1, -1);
|
||||
@@ -4428,7 +4439,11 @@
|
||||
FUNC_DRV_RGTR_REQ_ENABLES_VER);
|
||||
|
||||
req.os_type = cpu_to_le16(FUNC_DRV_RGTR_REQ_OS_TYPE_LINUX);
|
||||
- req.flags = cpu_to_le32(FUNC_DRV_RGTR_REQ_FLAGS_16BIT_VER_MODE);
|
||||
+ flags = FUNC_DRV_RGTR_REQ_FLAGS_16BIT_VER_MODE |
|
||||
+ FUNC_DRV_RGTR_REQ_FLAGS_HOT_RESET_SUPPORT;
|
||||
+ if (bp->fw_cap & BNXT_FW_CAP_ERROR_RECOVERY)
|
||||
+ flags |= FUNC_DRV_RGTR_REQ_FLAGS_ERROR_RECOVERY_SUPPORT;
|
||||
+ req.flags = cpu_to_le32(flags);
|
||||
req.ver_maj_8b = DRV_VER_MAJ;
|
||||
req.ver_min_8b = DRV_VER_MIN;
|
||||
req.ver_upd_8b = DRV_VER_UPD;
|
||||
@@ -9931,6 +9946,38 @@
|
||||
bnxt_queue_sp_work(bp);
|
||||
}
|
||||
|
||||
+static void bnxt_fw_health_check(struct bnxt *bp)
|
||||
+{
|
||||
+ struct bnxt_fw_health *fw_health = bp->fw_health;
|
||||
+ u32 val;
|
||||
+
|
||||
+ if (!fw_health || !fw_health->enabled ||
|
||||
+ test_bit(BNXT_STATE_IN_FW_RESET, &bp->state))
|
||||
+ return;
|
||||
+
|
||||
+ if (fw_health->tmr_counter) {
|
||||
+ fw_health->tmr_counter--;
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ val = bnxt_fw_health_readl(bp, BNXT_FW_HEARTBEAT_REG);
|
||||
+ if (val == fw_health->last_fw_heartbeat)
|
||||
+ goto fw_reset;
|
||||
+
|
||||
+ fw_health->last_fw_heartbeat = val;
|
||||
+
|
||||
+ val = bnxt_fw_health_readl(bp, BNXT_FW_RESET_CNT_REG);
|
||||
+ if (val != fw_health->last_fw_reset_cnt)
|
||||
+ goto fw_reset;
|
||||
+
|
||||
+ fw_health->tmr_counter = fw_health->tmr_multiplier;
|
||||
+ return;
|
||||
+
|
||||
+fw_reset:
|
||||
+ set_bit(BNXT_FW_EXCEPTION_SP_EVENT, &bp->sp_event);
|
||||
+ bnxt_queue_sp_work(bp);
|
||||
+}
|
||||
+
|
||||
static void bnxt_timer(struct timer_list *t)
|
||||
{
|
||||
struct bnxt *bp = from_timer(bp, t, timer);
|
||||
@@ -9942,6 +9989,9 @@
|
||||
if (atomic_read(&bp->intr_sem) != 0)
|
||||
goto bnxt_restart_timer;
|
||||
|
||||
+ if (bp->fw_cap & BNXT_FW_CAP_ERROR_RECOVERY)
|
||||
+ bnxt_fw_health_check(bp);
|
||||
+
|
||||
if (bp->link_info.link_up && (bp->flags & BNXT_FLAG_PORT_STATS) &&
|
||||
bp->stats_coal_ticks) {
|
||||
set_bit(BNXT_PERIODIC_STATS_SP_EVENT, &bp->sp_event);
|
||||
@@ -10008,6 +10058,26 @@
|
||||
bp->ctx = NULL;
|
||||
}
|
||||
|
||||
+static bool is_bnxt_fw_ok(struct bnxt *bp)
|
||||
+{
|
||||
+ struct bnxt_fw_health *fw_health = bp->fw_health;
|
||||
+ bool no_heartbeat = false, has_reset = false;
|
||||
+ u32 val;
|
||||
+
|
||||
+ val = bnxt_fw_health_readl(bp, BNXT_FW_HEARTBEAT_REG);
|
||||
+ if (val == fw_health->last_fw_heartbeat)
|
||||
+ no_heartbeat = true;
|
||||
+
|
||||
+ val = bnxt_fw_health_readl(bp, BNXT_FW_RESET_CNT_REG);
|
||||
+ if (val != fw_health->last_fw_reset_cnt)
|
||||
+ has_reset = true;
|
||||
+
|
||||
+ if (!no_heartbeat && has_reset)
|
||||
+ return true;
|
||||
+
|
||||
+ return false;
|
||||
+}
|
||||
+
|
||||
/* rtnl_lock is acquired before calling this function */
|
||||
static void bnxt_force_fw_reset(struct bnxt *bp)
|
||||
{
|
||||
@@ -10212,6 +10282,12 @@
|
||||
if (test_and_clear_bit(BNXT_FW_RESET_NOTIFY_SP_EVENT, &bp->sp_event))
|
||||
bnxt_devlink_health_report(bp, BNXT_FW_RESET_NOTIFY_SP_EVENT);
|
||||
|
||||
+ if (test_and_clear_bit(BNXT_FW_EXCEPTION_SP_EVENT, &bp->sp_event)) {
|
||||
+ if (!is_bnxt_fw_ok(bp))
|
||||
+ bnxt_devlink_health_report(bp,
|
||||
+ BNXT_FW_EXCEPTION_SP_EVENT);
|
||||
+ }
|
||||
+
|
||||
smp_mb__before_atomic();
|
||||
clear_bit(BNXT_STATE_IN_SP_TASK, &bp->state);
|
||||
}
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.h
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:20.864465843 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:21.001464585 +0100
|
||||
@@ -472,6 +472,11 @@
|
||||
((le32_to_cpu((rx_tpa_end_ext)->rx_tpa_end_cmp_dup_acks) & \
|
||||
RX_TPA_END_CMP_AGG_BUFS_P5) >> RX_TPA_END_CMP_AGG_BUFS_SHIFT_P5)
|
||||
|
||||
+#define EVENT_DATA1_RESET_NOTIFY_FATAL(data1) \
|
||||
+ (((data1) & \
|
||||
+ ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_REASON_CODE_MASK) ==\
|
||||
+ ASYNC_EVENT_CMPL_RESET_NOTIFY_EVENT_DATA1_REASON_CODE_FW_EXCEPTION_FATAL)
|
||||
+
|
||||
#define EVENT_DATA1_RECOVERY_MASTER_FUNC(data1) \
|
||||
!!((data1) & \
|
||||
ASYNC_EVENT_CMPL_ERROR_RECOVERY_EVENT_DATA1_FLAGS_MASTER_FUNC)
|
||||
@@ -1372,6 +1377,7 @@
|
||||
u32 fw_reset_seq_delay_msec[16];
|
||||
struct devlink_health_reporter *fw_reporter;
|
||||
struct devlink_health_reporter *fw_reset_reporter;
|
||||
+ struct devlink_health_reporter *fw_fatal_reporter;
|
||||
};
|
||||
|
||||
struct bnxt_fw_reporter_ctx {
|
||||
@@ -1728,6 +1734,7 @@
|
||||
#define BNXT_UPDATE_PHY_SP_EVENT 16
|
||||
#define BNXT_RING_COAL_NOW_SP_EVENT 17
|
||||
#define BNXT_FW_RESET_NOTIFY_SP_EVENT 18
|
||||
+#define BNXT_FW_EXCEPTION_SP_EVENT 19
|
||||
|
||||
struct delayed_work fw_reset_task;
|
||||
int fw_reset_state;
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c 2020-02-06 16:23:20.308470946 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c 2020-02-06 16:23:21.001464585 +0100
|
||||
@@ -83,6 +83,31 @@
|
||||
.recover = bnxt_fw_reset_recover,
|
||||
};
|
||||
|
||||
+static int bnxt_fw_fatal_recover(struct devlink_health_reporter *reporter,
|
||||
+ void *priv_ctx)
|
||||
+{
|
||||
+ struct bnxt *bp = devlink_health_reporter_priv(reporter);
|
||||
+ struct bnxt_fw_reporter_ctx *fw_reporter_ctx = priv_ctx;
|
||||
+ unsigned long event;
|
||||
+
|
||||
+ if (!priv_ctx)
|
||||
+ return -EOPNOTSUPP;
|
||||
+
|
||||
+ event = fw_reporter_ctx->sp_event;
|
||||
+ if (event == BNXT_FW_RESET_NOTIFY_SP_EVENT)
|
||||
+ bnxt_fw_reset(bp);
|
||||
+ else if (event == BNXT_FW_EXCEPTION_SP_EVENT)
|
||||
+ bnxt_fw_exception(bp);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static const
|
||||
+struct devlink_health_reporter_ops bnxt_dl_fw_fatal_reporter_ops = {
|
||||
+ .name = "fw_fatal",
|
||||
+ .recover = bnxt_fw_fatal_recover,
|
||||
+};
|
||||
+
|
||||
static void bnxt_dl_fw_reporters_create(struct bnxt *bp)
|
||||
{
|
||||
struct bnxt_fw_health *health = bp->fw_health;
|
||||
@@ -108,6 +133,16 @@
|
||||
PTR_ERR(health->fw_reset_reporter));
|
||||
health->fw_reset_reporter = NULL;
|
||||
}
|
||||
+
|
||||
+ health->fw_fatal_reporter =
|
||||
+ devlink_health_reporter_create(bp->dl,
|
||||
+ &bnxt_dl_fw_fatal_reporter_ops,
|
||||
+ 0, true, bp);
|
||||
+ if (IS_ERR(health->fw_fatal_reporter)) {
|
||||
+ netdev_warn(bp->dev, "Failed to create FW fatal health reporter, rc = %ld\n",
|
||||
+ PTR_ERR(health->fw_fatal_reporter));
|
||||
+ health->fw_fatal_reporter = NULL;
|
||||
+ }
|
||||
}
|
||||
|
||||
static void bnxt_dl_fw_reporters_destroy(struct bnxt *bp)
|
||||
@@ -122,6 +157,9 @@
|
||||
|
||||
if (health->fw_reset_reporter)
|
||||
devlink_health_reporter_destroy(health->fw_reset_reporter);
|
||||
+
|
||||
+ if (health->fw_fatal_reporter)
|
||||
+ devlink_health_reporter_destroy(health->fw_fatal_reporter);
|
||||
}
|
||||
|
||||
void bnxt_devlink_health_report(struct bnxt *bp, unsigned long event)
|
||||
@@ -135,6 +173,15 @@
|
||||
fw_reporter_ctx.sp_event = event;
|
||||
switch (event) {
|
||||
case BNXT_FW_RESET_NOTIFY_SP_EVENT:
|
||||
+ if (test_bit(BNXT_STATE_FW_FATAL_COND, &bp->state)) {
|
||||
+ if (!fw_health->fw_fatal_reporter)
|
||||
+ return;
|
||||
+
|
||||
+ devlink_health_report(fw_health->fw_fatal_reporter,
|
||||
+ "FW fatal async event received",
|
||||
+ &fw_reporter_ctx);
|
||||
+ return;
|
||||
+ }
|
||||
if (!fw_health->fw_reset_reporter)
|
||||
return;
|
||||
|
||||
@@ -142,6 +189,15 @@
|
||||
"FW non-fatal reset event received",
|
||||
&fw_reporter_ctx);
|
||||
return;
|
||||
+
|
||||
+ case BNXT_FW_EXCEPTION_SP_EVENT:
|
||||
+ if (!fw_health->fw_fatal_reporter)
|
||||
+ return;
|
||||
+
|
||||
+ devlink_health_report(fw_health->fw_fatal_reporter,
|
||||
+ "FW fatal error reported",
|
||||
+ &fw_reporter_ctx);
|
||||
+ return;
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,153 @@
|
||||
From be440df803ea96609073662eb051180e742fcc43 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:23:35 -0400
|
||||
Subject: [PATCH 80/96] [netdrv] bnxt_en: Fix compile error regression with
|
||||
CONFIG_BNXT_SRIOV not set
|
||||
|
||||
Message-id: <cf5b0d73c8d862dcf1a9e5bf61b2dc974503c8cc.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276495
|
||||
O-Subject: [RHEL-8.2 PATCH 73/78] bnxt_en: Fix compile error regression with CONFIG_BNXT_SRIOV not set.
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
Add a new function bnxt_get_registered_vfs() to handle the work
|
||||
of getting the number of registered VFs under #ifdef CONFIG_BNXT_SRIOV.
|
||||
The main code will call this function and will always work correctly
|
||||
whether CONFIG_BNXT_SRIOV is set or not.
|
||||
|
||||
Fixes: 230d1f0de754 ("bnxt_en: Handle firmware reset.")
|
||||
Reported-by: kbuild test robot <lkp@intel.com>
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit e72cb7d6245380acc11a24b75a865f7104ac8b33)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 82 ++++++++++++++++++++-----------
|
||||
1 file changed, 52 insertions(+), 30 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:21.000464594 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:21.151463208 +0100
|
||||
@@ -10112,34 +10112,56 @@
|
||||
bnxt_rtnl_unlock_sp(bp);
|
||||
}
|
||||
|
||||
-void bnxt_fw_reset(struct bnxt *bp)
|
||||
+/* Returns the number of registered VFs, or 1 if VF configuration is pending, or
|
||||
+ * < 0 on error.
|
||||
+ */
|
||||
+static int bnxt_get_registered_vfs(struct bnxt *bp)
|
||||
{
|
||||
+#ifdef CONFIG_BNXT_SRIOV
|
||||
int rc;
|
||||
|
||||
+ if (!BNXT_PF(bp))
|
||||
+ return 0;
|
||||
+
|
||||
+ rc = bnxt_hwrm_func_qcfg(bp);
|
||||
+ if (rc) {
|
||||
+ netdev_err(bp->dev, "func_qcfg cmd failed, rc = %d\n", rc);
|
||||
+ return rc;
|
||||
+ }
|
||||
+ if (bp->pf.registered_vfs)
|
||||
+ return bp->pf.registered_vfs;
|
||||
+ if (bp->sriov_cfg)
|
||||
+ return 1;
|
||||
+#endif
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+void bnxt_fw_reset(struct bnxt *bp)
|
||||
+{
|
||||
bnxt_rtnl_lock_sp(bp);
|
||||
if (test_bit(BNXT_STATE_OPEN, &bp->state) &&
|
||||
!test_bit(BNXT_STATE_IN_FW_RESET, &bp->state)) {
|
||||
- set_bit(BNXT_STATE_IN_FW_RESET, &bp->state);
|
||||
- if (BNXT_PF(bp) && bp->pf.active_vfs &&
|
||||
- !test_bit(BNXT_STATE_FW_FATAL_COND, &bp->state)) {
|
||||
- rc = bnxt_hwrm_func_qcfg(bp);
|
||||
- if (rc) {
|
||||
- netdev_err(bp->dev, "Firmware reset aborted, first func_qcfg cmd failed, rc = %d\n",
|
||||
- rc);
|
||||
- clear_bit(BNXT_STATE_IN_FW_RESET, &bp->state);
|
||||
- dev_close(bp->dev);
|
||||
- goto fw_reset_exit;
|
||||
- }
|
||||
- if (bp->pf.registered_vfs || bp->sriov_cfg) {
|
||||
- u16 vf_tmo_dsecs = bp->pf.registered_vfs * 10;
|
||||
+ int n = 0;
|
||||
|
||||
- if (bp->fw_reset_max_dsecs < vf_tmo_dsecs)
|
||||
- bp->fw_reset_max_dsecs = vf_tmo_dsecs;
|
||||
- bp->fw_reset_state =
|
||||
- BNXT_FW_RESET_STATE_POLL_VF;
|
||||
- bnxt_queue_fw_reset_work(bp, HZ / 10);
|
||||
- goto fw_reset_exit;
|
||||
- }
|
||||
+ set_bit(BNXT_STATE_IN_FW_RESET, &bp->state);
|
||||
+ if (bp->pf.active_vfs &&
|
||||
+ !test_bit(BNXT_STATE_FW_FATAL_COND, &bp->state))
|
||||
+ n = bnxt_get_registered_vfs(bp);
|
||||
+ if (n < 0) {
|
||||
+ netdev_err(bp->dev, "Firmware reset aborted, rc = %d\n",
|
||||
+ n);
|
||||
+ clear_bit(BNXT_STATE_IN_FW_RESET, &bp->state);
|
||||
+ dev_close(bp->dev);
|
||||
+ goto fw_reset_exit;
|
||||
+ } else if (n > 0) {
|
||||
+ u16 vf_tmo_dsecs = n * 10;
|
||||
+
|
||||
+ if (bp->fw_reset_max_dsecs < vf_tmo_dsecs)
|
||||
+ bp->fw_reset_max_dsecs = vf_tmo_dsecs;
|
||||
+ bp->fw_reset_state =
|
||||
+ BNXT_FW_RESET_STATE_POLL_VF;
|
||||
+ bnxt_queue_fw_reset_work(bp, HZ / 10);
|
||||
+ goto fw_reset_exit;
|
||||
}
|
||||
bnxt_fw_reset_close(bp);
|
||||
bp->fw_reset_state = BNXT_FW_RESET_STATE_ENABLE_DEV;
|
||||
@@ -10584,22 +10606,21 @@
|
||||
}
|
||||
|
||||
switch (bp->fw_reset_state) {
|
||||
- case BNXT_FW_RESET_STATE_POLL_VF:
|
||||
- rc = bnxt_hwrm_func_qcfg(bp);
|
||||
- if (rc) {
|
||||
+ case BNXT_FW_RESET_STATE_POLL_VF: {
|
||||
+ int n = bnxt_get_registered_vfs(bp);
|
||||
+
|
||||
+ if (n < 0) {
|
||||
netdev_err(bp->dev, "Firmware reset aborted, subsequent func_qcfg cmd failed, rc = %d, %d msecs since reset timestamp\n",
|
||||
- rc, jiffies_to_msecs(jiffies -
|
||||
+ n, jiffies_to_msecs(jiffies -
|
||||
bp->fw_reset_timestamp));
|
||||
goto fw_reset_abort;
|
||||
- }
|
||||
- if (bp->pf.registered_vfs || bp->sriov_cfg) {
|
||||
+ } else if (n > 0) {
|
||||
if (time_after(jiffies, bp->fw_reset_timestamp +
|
||||
(bp->fw_reset_max_dsecs * HZ / 10))) {
|
||||
clear_bit(BNXT_STATE_IN_FW_RESET, &bp->state);
|
||||
bp->fw_reset_state = 0;
|
||||
- netdev_err(bp->dev, "Firmware reset aborted, %d VFs still registered, sriov_cfg %d\n",
|
||||
- bp->pf.registered_vfs,
|
||||
- bp->sriov_cfg);
|
||||
+ netdev_err(bp->dev, "Firmware reset aborted, bnxt_get_registered_vfs() returns %d\n",
|
||||
+ n);
|
||||
return;
|
||||
}
|
||||
bnxt_queue_fw_reset_work(bp, HZ / 10);
|
||||
@@ -10612,6 +10633,7 @@
|
||||
rtnl_unlock();
|
||||
bnxt_queue_fw_reset_work(bp, bp->fw_reset_min_dsecs * HZ / 10);
|
||||
return;
|
||||
+ }
|
||||
case BNXT_FW_RESET_STATE_RESET_FW: {
|
||||
u32 wait_dsecs = bp->fw_health->post_reset_wait_dsecs;
|
||||
|
@ -0,0 +1,56 @@
|
||||
From 5de2d4f892cac111195aeddc741e2ef199e554c2 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:23:36 -0400
|
||||
Subject: [PATCH 81/96] [netdrv] bnxt_en: Don't proceed in .ndo_set_rx_mode()
|
||||
when device is not in open state
|
||||
|
||||
Message-id: <622e3c11be99362a153efe46b13f7fc1b0182027.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276497
|
||||
O-Subject: [RHEL-8.2 PATCH 74/78] bnxt_en: Don't proceed in .ndo_set_rx_mode() when device is not in open state.
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
Check the BNXT_STATE_OPEN flag instead of netif_running() in
|
||||
bnxt_set_rx_mode(). If the driver is going through any reset, such
|
||||
as firmware reset or even TX timeout, it may not be ready to set the RX
|
||||
mode and may crash. The new rx mode settings will be picked up when
|
||||
the device is opened again later.
|
||||
|
||||
Fixes: 230d1f0de754 ("bnxt_en: Handle firmware reset.")
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit 268d0895f1b9690755d91b6ced60c9d8d17a7567)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 8 +++++---
|
||||
1 file changed, 5 insertions(+), 3 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:21.151463208 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:21.286461969 +0100
|
||||
@@ -9562,14 +9562,16 @@
|
||||
static void bnxt_set_rx_mode(struct net_device *dev)
|
||||
{
|
||||
struct bnxt *bp = netdev_priv(dev);
|
||||
- struct bnxt_vnic_info *vnic = &bp->vnic_info[0];
|
||||
- u32 mask = vnic->rx_mask;
|
||||
+ struct bnxt_vnic_info *vnic;
|
||||
bool mc_update = false;
|
||||
bool uc_update;
|
||||
+ u32 mask;
|
||||
|
||||
- if (!netif_running(dev))
|
||||
+ if (!test_bit(BNXT_STATE_OPEN, &bp->state))
|
||||
return;
|
||||
|
||||
+ vnic = &bp->vnic_info[0];
|
||||
+ mask = vnic->rx_mask;
|
||||
mask &= ~(CFA_L2_SET_RX_MASK_REQ_MASK_PROMISCUOUS |
|
||||
CFA_L2_SET_RX_MASK_REQ_MASK_MCAST |
|
||||
CFA_L2_SET_RX_MASK_REQ_MASK_ALL_MCAST |
|
@ -0,0 +1,56 @@
|
||||
From b66eac123a22a6590e58eb3933d0ec90d80e6d5f Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:23:37 -0400
|
||||
Subject: [PATCH 82/96] [netdrv] bnxt_en: Increase timeout for
|
||||
HWRM_DBG_COREDUMP_XX commands
|
||||
|
||||
Message-id: <87db84c8920d668c06d3ac0c00c52bffaf49ad14.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276491
|
||||
O-Subject: [RHEL-8.2 PATCH 75/78] bnxt_en: Increase timeout for HWRM_DBG_COREDUMP_XX commands
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
Firmware coredump messages take much longer than standard messages,
|
||||
so increase the timeout accordingly.
|
||||
|
||||
Fixes: 6c5657d085ae ("bnxt_en: Add support for ethtool get dump.")
|
||||
Signed-off-by: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit 57a8730b1f7a0be7bf8a0a0bb665329074ba764f)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.h | 1 +
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 2 +-
|
||||
2 files changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.h
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:21.001464585 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:21.412460813 +0100
|
||||
@@ -648,6 +648,7 @@
|
||||
#define SHORT_HWRM_CMD_TIMEOUT 20
|
||||
#define HWRM_CMD_TIMEOUT (bp->hwrm_cmd_timeout)
|
||||
#define HWRM_RESET_TIMEOUT ((HWRM_CMD_TIMEOUT) * 4)
|
||||
+#define HWRM_COREDUMP_TIMEOUT ((HWRM_CMD_TIMEOUT) * 12)
|
||||
#define HWRM_RESP_ERR_CODE_MASK 0xffff
|
||||
#define HWRM_RESP_LEN_OFFSET 4
|
||||
#define HWRM_RESP_LEN_MASK 0xffff0000
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c 2020-02-06 16:23:18.730485431 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c 2020-02-06 16:23:21.412460813 +0100
|
||||
@@ -3112,7 +3112,7 @@
|
||||
req.component_id = cpu_to_le16(component_id);
|
||||
req.segment_id = cpu_to_le16(segment_id);
|
||||
|
||||
- return hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
|
||||
+ return hwrm_send_message(bp, &req, sizeof(req), HWRM_COREDUMP_TIMEOUT);
|
||||
}
|
||||
|
||||
static int bnxt_hwrm_dbg_coredump_retrieve(struct bnxt *bp, u16 component_id,
|
@ -0,0 +1,282 @@
|
||||
From 0441942faf5c6e7372792b10cf57345cfad2cefa Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:23:38 -0400
|
||||
Subject: [PATCH 83/96] [netdrv] bnxt_en: Update firmware interface spec. to
|
||||
1.10.0.100
|
||||
|
||||
Message-id: <e0fd84c142e378fb6fcc8bae77e40a1090a2597c.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276500
|
||||
O-Subject: [RHEL-8.2 PATCH 76/78] bnxt_en: Update firmware interface spec. to 1.10.0.100.
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
Some error recovery updates to the spec., among other minor changes.
|
||||
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit 72e0c9f91238f1f5f22954be6aea535d1d5fbf31)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_hsi.h | 146 ++++++++++++++++++--------
|
||||
1 file changed, 103 insertions(+), 43 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_hsi.h
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_hsi.h 2020-02-06 16:23:15.728512987 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_hsi.h 2020-02-06 16:23:21.544459601 +0100
|
||||
@@ -44,11 +44,12 @@
|
||||
#define TLV_TYPE_ENGINE_CKV_IV 0x8003UL
|
||||
#define TLV_TYPE_ENGINE_CKV_AUTH_TAG 0x8004UL
|
||||
#define TLV_TYPE_ENGINE_CKV_CIPHERTEXT 0x8005UL
|
||||
-#define TLV_TYPE_ENGINE_CKV_ALGORITHMS 0x8006UL
|
||||
+#define TLV_TYPE_ENGINE_CKV_HOST_ALGORITHMS 0x8006UL
|
||||
#define TLV_TYPE_ENGINE_CKV_HOST_ECC_PUBLIC_KEY 0x8007UL
|
||||
#define TLV_TYPE_ENGINE_CKV_ECDSA_SIGNATURE 0x8008UL
|
||||
-#define TLV_TYPE_ENGINE_CKV_SRT_ECC_PUBLIC_KEY 0x8009UL
|
||||
-#define TLV_TYPE_LAST TLV_TYPE_ENGINE_CKV_SRT_ECC_PUBLIC_KEY
|
||||
+#define TLV_TYPE_ENGINE_CKV_FW_ECC_PUBLIC_KEY 0x8009UL
|
||||
+#define TLV_TYPE_ENGINE_CKV_FW_ALGORITHMS 0x800aUL
|
||||
+#define TLV_TYPE_LAST TLV_TYPE_ENGINE_CKV_FW_ALGORITHMS
|
||||
|
||||
|
||||
/* tlv (size:64b/8B) */
|
||||
@@ -201,10 +202,16 @@
|
||||
#define HWRM_PORT_QSTATS_EXT 0xb4UL
|
||||
#define HWRM_PORT_PHY_MDIO_WRITE 0xb5UL
|
||||
#define HWRM_PORT_PHY_MDIO_READ 0xb6UL
|
||||
+ #define HWRM_PORT_PHY_MDIO_BUS_ACQUIRE 0xb7UL
|
||||
+ #define HWRM_PORT_PHY_MDIO_BUS_RELEASE 0xb8UL
|
||||
#define HWRM_FW_RESET 0xc0UL
|
||||
#define HWRM_FW_QSTATUS 0xc1UL
|
||||
#define HWRM_FW_HEALTH_CHECK 0xc2UL
|
||||
#define HWRM_FW_SYNC 0xc3UL
|
||||
+ #define HWRM_FW_STATE_BUFFER_QCAPS 0xc4UL
|
||||
+ #define HWRM_FW_STATE_QUIESCE 0xc5UL
|
||||
+ #define HWRM_FW_STATE_BACKUP 0xc6UL
|
||||
+ #define HWRM_FW_STATE_RESTORE 0xc7UL
|
||||
#define HWRM_FW_SET_TIME 0xc8UL
|
||||
#define HWRM_FW_GET_TIME 0xc9UL
|
||||
#define HWRM_FW_SET_STRUCTURED_DATA 0xcaUL
|
||||
@@ -216,7 +223,10 @@
|
||||
#define HWRM_FWD_ASYNC_EVENT_CMPL 0xd3UL
|
||||
#define HWRM_OEM_CMD 0xd4UL
|
||||
#define HWRM_PORT_PRBS_TEST 0xd5UL
|
||||
+ #define HWRM_PORT_SFP_SIDEBAND_CFG 0xd6UL
|
||||
+ #define HWRM_PORT_SFP_SIDEBAND_QCFG 0xd7UL
|
||||
#define HWRM_TEMP_MONITOR_QUERY 0xe0UL
|
||||
+ #define HWRM_REG_POWER_QUERY 0xe1UL
|
||||
#define HWRM_WOL_FILTER_ALLOC 0xf0UL
|
||||
#define HWRM_WOL_FILTER_FREE 0xf1UL
|
||||
#define HWRM_WOL_FILTER_QCFG 0xf2UL
|
||||
@@ -411,8 +421,8 @@
|
||||
#define HWRM_VERSION_MAJOR 1
|
||||
#define HWRM_VERSION_MINOR 10
|
||||
#define HWRM_VERSION_UPDATE 0
|
||||
-#define HWRM_VERSION_RSVD 89
|
||||
-#define HWRM_VERSION_STR "1.10.0.89"
|
||||
+#define HWRM_VERSION_RSVD 100
|
||||
+#define HWRM_VERSION_STR "1.10.0.100"
|
||||
|
||||
/* hwrm_ver_get_input (size:192b/24B) */
|
||||
struct hwrm_ver_get_input {
|
||||
@@ -805,6 +815,37 @@
|
||||
#define ASYNC_EVENT_CMPL_VF_CFG_CHANGE_EVENT_DATA1_TRUSTED_VF_CFG_CHANGE 0x10UL
|
||||
};
|
||||
|
||||
+/* hwrm_async_event_cmpl_default_vnic_change (size:128b/16B) */
|
||||
+struct hwrm_async_event_cmpl_default_vnic_change {
|
||||
+ __le16 type;
|
||||
+ #define ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_TYPE_MASK 0x3fUL
|
||||
+ #define ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_TYPE_SFT 0
|
||||
+ #define ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_TYPE_HWRM_ASYNC_EVENT 0x2eUL
|
||||
+ #define ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_TYPE_LAST ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_TYPE_HWRM_ASYNC_EVENT
|
||||
+ #define ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_UNUSED1_MASK 0xffc0UL
|
||||
+ #define ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_UNUSED1_SFT 6
|
||||
+ __le16 event_id;
|
||||
+ #define ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_ID_ALLOC_FREE_NOTIFICATION 0x35UL
|
||||
+ #define ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_ID_LAST ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_ID_ALLOC_FREE_NOTIFICATION
|
||||
+ __le32 event_data2;
|
||||
+ u8 opaque_v;
|
||||
+ #define ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_V 0x1UL
|
||||
+ #define ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_OPAQUE_MASK 0xfeUL
|
||||
+ #define ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_OPAQUE_SFT 1
|
||||
+ u8 timestamp_lo;
|
||||
+ __le16 timestamp_hi;
|
||||
+ __le32 event_data1;
|
||||
+ #define ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_DEF_VNIC_STATE_MASK 0x3UL
|
||||
+ #define ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_DEF_VNIC_STATE_SFT 0
|
||||
+ #define ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_DEF_VNIC_STATE_DEF_VNIC_ALLOC 0x1UL
|
||||
+ #define ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_DEF_VNIC_STATE_DEF_VNIC_FREE 0x2UL
|
||||
+ #define ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_DEF_VNIC_STATE_LAST ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_DEF_VNIC_STATE_DEF_VNIC_FREE
|
||||
+ #define ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_PF_ID_MASK 0x3fcUL
|
||||
+ #define ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_PF_ID_SFT 2
|
||||
+ #define ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_VF_ID_MASK 0x3fffc00UL
|
||||
+ #define ASYNC_EVENT_CMPL_DEFAULT_VNIC_CHANGE_EVENT_DATA1_VF_ID_SFT 10
|
||||
+};
|
||||
+
|
||||
/* hwrm_async_event_cmpl_hw_flow_aged (size:128b/16B) */
|
||||
struct hwrm_async_event_cmpl_hw_flow_aged {
|
||||
__le16 type;
|
||||
@@ -1047,31 +1088,33 @@
|
||||
__le16 fid;
|
||||
__le16 port_id;
|
||||
__le32 flags;
|
||||
- #define FUNC_QCAPS_RESP_FLAGS_PUSH_MODE_SUPPORTED 0x1UL
|
||||
- #define FUNC_QCAPS_RESP_FLAGS_GLOBAL_MSIX_AUTOMASKING 0x2UL
|
||||
- #define FUNC_QCAPS_RESP_FLAGS_PTP_SUPPORTED 0x4UL
|
||||
- #define FUNC_QCAPS_RESP_FLAGS_ROCE_V1_SUPPORTED 0x8UL
|
||||
- #define FUNC_QCAPS_RESP_FLAGS_ROCE_V2_SUPPORTED 0x10UL
|
||||
- #define FUNC_QCAPS_RESP_FLAGS_WOL_MAGICPKT_SUPPORTED 0x20UL
|
||||
- #define FUNC_QCAPS_RESP_FLAGS_WOL_BMP_SUPPORTED 0x40UL
|
||||
- #define FUNC_QCAPS_RESP_FLAGS_TX_RING_RL_SUPPORTED 0x80UL
|
||||
- #define FUNC_QCAPS_RESP_FLAGS_TX_BW_CFG_SUPPORTED 0x100UL
|
||||
- #define FUNC_QCAPS_RESP_FLAGS_VF_TX_RING_RL_SUPPORTED 0x200UL
|
||||
- #define FUNC_QCAPS_RESP_FLAGS_VF_BW_CFG_SUPPORTED 0x400UL
|
||||
- #define FUNC_QCAPS_RESP_FLAGS_STD_TX_RING_MODE_SUPPORTED 0x800UL
|
||||
- #define FUNC_QCAPS_RESP_FLAGS_GENEVE_TUN_FLAGS_SUPPORTED 0x1000UL
|
||||
- #define FUNC_QCAPS_RESP_FLAGS_NVGRE_TUN_FLAGS_SUPPORTED 0x2000UL
|
||||
- #define FUNC_QCAPS_RESP_FLAGS_GRE_TUN_FLAGS_SUPPORTED 0x4000UL
|
||||
- #define FUNC_QCAPS_RESP_FLAGS_MPLS_TUN_FLAGS_SUPPORTED 0x8000UL
|
||||
- #define FUNC_QCAPS_RESP_FLAGS_PCIE_STATS_SUPPORTED 0x10000UL
|
||||
- #define FUNC_QCAPS_RESP_FLAGS_ADOPTED_PF_SUPPORTED 0x20000UL
|
||||
- #define FUNC_QCAPS_RESP_FLAGS_ADMIN_PF_SUPPORTED 0x40000UL
|
||||
- #define FUNC_QCAPS_RESP_FLAGS_LINK_ADMIN_STATUS_SUPPORTED 0x80000UL
|
||||
- #define FUNC_QCAPS_RESP_FLAGS_WCB_PUSH_MODE 0x100000UL
|
||||
- #define FUNC_QCAPS_RESP_FLAGS_DYNAMIC_TX_RING_ALLOC 0x200000UL
|
||||
- #define FUNC_QCAPS_RESP_FLAGS_HOT_RESET_CAPABLE 0x400000UL
|
||||
- #define FUNC_QCAPS_RESP_FLAGS_ERROR_RECOVERY_CAPABLE 0x800000UL
|
||||
- #define FUNC_QCAPS_RESP_FLAGS_EXT_STATS_SUPPORTED 0x1000000UL
|
||||
+ #define FUNC_QCAPS_RESP_FLAGS_PUSH_MODE_SUPPORTED 0x1UL
|
||||
+ #define FUNC_QCAPS_RESP_FLAGS_GLOBAL_MSIX_AUTOMASKING 0x2UL
|
||||
+ #define FUNC_QCAPS_RESP_FLAGS_PTP_SUPPORTED 0x4UL
|
||||
+ #define FUNC_QCAPS_RESP_FLAGS_ROCE_V1_SUPPORTED 0x8UL
|
||||
+ #define FUNC_QCAPS_RESP_FLAGS_ROCE_V2_SUPPORTED 0x10UL
|
||||
+ #define FUNC_QCAPS_RESP_FLAGS_WOL_MAGICPKT_SUPPORTED 0x20UL
|
||||
+ #define FUNC_QCAPS_RESP_FLAGS_WOL_BMP_SUPPORTED 0x40UL
|
||||
+ #define FUNC_QCAPS_RESP_FLAGS_TX_RING_RL_SUPPORTED 0x80UL
|
||||
+ #define FUNC_QCAPS_RESP_FLAGS_TX_BW_CFG_SUPPORTED 0x100UL
|
||||
+ #define FUNC_QCAPS_RESP_FLAGS_VF_TX_RING_RL_SUPPORTED 0x200UL
|
||||
+ #define FUNC_QCAPS_RESP_FLAGS_VF_BW_CFG_SUPPORTED 0x400UL
|
||||
+ #define FUNC_QCAPS_RESP_FLAGS_STD_TX_RING_MODE_SUPPORTED 0x800UL
|
||||
+ #define FUNC_QCAPS_RESP_FLAGS_GENEVE_TUN_FLAGS_SUPPORTED 0x1000UL
|
||||
+ #define FUNC_QCAPS_RESP_FLAGS_NVGRE_TUN_FLAGS_SUPPORTED 0x2000UL
|
||||
+ #define FUNC_QCAPS_RESP_FLAGS_GRE_TUN_FLAGS_SUPPORTED 0x4000UL
|
||||
+ #define FUNC_QCAPS_RESP_FLAGS_MPLS_TUN_FLAGS_SUPPORTED 0x8000UL
|
||||
+ #define FUNC_QCAPS_RESP_FLAGS_PCIE_STATS_SUPPORTED 0x10000UL
|
||||
+ #define FUNC_QCAPS_RESP_FLAGS_ADOPTED_PF_SUPPORTED 0x20000UL
|
||||
+ #define FUNC_QCAPS_RESP_FLAGS_ADMIN_PF_SUPPORTED 0x40000UL
|
||||
+ #define FUNC_QCAPS_RESP_FLAGS_LINK_ADMIN_STATUS_SUPPORTED 0x80000UL
|
||||
+ #define FUNC_QCAPS_RESP_FLAGS_WCB_PUSH_MODE 0x100000UL
|
||||
+ #define FUNC_QCAPS_RESP_FLAGS_DYNAMIC_TX_RING_ALLOC 0x200000UL
|
||||
+ #define FUNC_QCAPS_RESP_FLAGS_HOT_RESET_CAPABLE 0x400000UL
|
||||
+ #define FUNC_QCAPS_RESP_FLAGS_ERROR_RECOVERY_CAPABLE 0x800000UL
|
||||
+ #define FUNC_QCAPS_RESP_FLAGS_EXT_STATS_SUPPORTED 0x1000000UL
|
||||
+ #define FUNC_QCAPS_RESP_FLAGS_ERR_RECOVER_RELOAD 0x2000000UL
|
||||
+ #define FUNC_QCAPS_RESP_FLAGS_NOTIFY_VF_DEF_VNIC_CHNG_SUPPORTED 0x4000000UL
|
||||
u8 mac_address[6];
|
||||
__le16 max_rsscos_ctx;
|
||||
__le16 max_cmpl_rings;
|
||||
@@ -1208,7 +1251,8 @@
|
||||
__le16 alloc_stat_ctx;
|
||||
__le16 alloc_msix;
|
||||
__le16 registered_vfs;
|
||||
- u8 unused_1[3];
|
||||
+ __le16 l2_doorbell_bar_size_kb;
|
||||
+ u8 unused_1;
|
||||
u8 always_1;
|
||||
__le32 reset_addr_poll;
|
||||
u8 unused_2[3];
|
||||
@@ -1363,7 +1407,11 @@
|
||||
__le16 target_id;
|
||||
__le64 resp_addr;
|
||||
__le16 fid;
|
||||
- u8 unused_0[6];
|
||||
+ u8 flags;
|
||||
+ #define FUNC_QSTATS_REQ_FLAGS_UNUSED 0x0UL
|
||||
+ #define FUNC_QSTATS_REQ_FLAGS_ROCE_ONLY 0x1UL
|
||||
+ #define FUNC_QSTATS_REQ_FLAGS_LAST FUNC_QSTATS_REQ_FLAGS_ROCE_ONLY
|
||||
+ u8 unused_0[5];
|
||||
};
|
||||
|
||||
/* hwrm_func_qstats_output (size:1408b/176B) */
|
||||
@@ -4714,7 +4762,7 @@
|
||||
u8 valid;
|
||||
};
|
||||
|
||||
-/* hwrm_vnic_cfg_input (size:320b/40B) */
|
||||
+/* hwrm_vnic_cfg_input (size:384b/48B) */
|
||||
struct hwrm_vnic_cfg_input {
|
||||
__le16 req_type;
|
||||
__le16 cmpl_ring;
|
||||
@@ -4737,6 +4785,7 @@
|
||||
#define VNIC_CFG_REQ_ENABLES_MRU 0x10UL
|
||||
#define VNIC_CFG_REQ_ENABLES_DEFAULT_RX_RING_ID 0x20UL
|
||||
#define VNIC_CFG_REQ_ENABLES_DEFAULT_CMPL_RING_ID 0x40UL
|
||||
+ #define VNIC_CFG_REQ_ENABLES_QUEUE_ID 0x80UL
|
||||
__le16 vnic_id;
|
||||
__le16 dflt_ring_grp;
|
||||
__le16 rss_rule;
|
||||
@@ -4745,6 +4794,8 @@
|
||||
__le16 mru;
|
||||
__le16 default_rx_ring_id;
|
||||
__le16 default_cmpl_ring_id;
|
||||
+ __le16 queue_id;
|
||||
+ u8 unused0[6];
|
||||
};
|
||||
|
||||
/* hwrm_vnic_cfg_output (size:128b/16B) */
|
||||
@@ -4785,6 +4836,7 @@
|
||||
#define VNIC_QCAPS_RESP_FLAGS_RSS_DFLT_CR_CAP 0x20UL
|
||||
#define VNIC_QCAPS_RESP_FLAGS_ROCE_MIRRORING_CAPABLE_VNIC_CAP 0x40UL
|
||||
#define VNIC_QCAPS_RESP_FLAGS_OUTERMOST_RSS_CAP 0x80UL
|
||||
+ #define VNIC_QCAPS_RESP_FLAGS_COS_ASSIGNMENT_CAP 0x100UL
|
||||
__le16 max_aggs_supported;
|
||||
u8 unused_1[5];
|
||||
u8 valid;
|
||||
@@ -6794,15 +6846,16 @@
|
||||
__le16 target_id;
|
||||
__le64 resp_addr;
|
||||
u8 embedded_proc_type;
|
||||
- #define FW_RESET_REQ_EMBEDDED_PROC_TYPE_BOOT 0x0UL
|
||||
- #define FW_RESET_REQ_EMBEDDED_PROC_TYPE_MGMT 0x1UL
|
||||
- #define FW_RESET_REQ_EMBEDDED_PROC_TYPE_NETCTRL 0x2UL
|
||||
- #define FW_RESET_REQ_EMBEDDED_PROC_TYPE_ROCE 0x3UL
|
||||
- #define FW_RESET_REQ_EMBEDDED_PROC_TYPE_HOST 0x4UL
|
||||
- #define FW_RESET_REQ_EMBEDDED_PROC_TYPE_AP 0x5UL
|
||||
- #define FW_RESET_REQ_EMBEDDED_PROC_TYPE_CHIP 0x6UL
|
||||
- #define FW_RESET_REQ_EMBEDDED_PROC_TYPE_HOST_RESOURCE_REINIT 0x7UL
|
||||
- #define FW_RESET_REQ_EMBEDDED_PROC_TYPE_LAST FW_RESET_REQ_EMBEDDED_PROC_TYPE_HOST_RESOURCE_REINIT
|
||||
+ #define FW_RESET_REQ_EMBEDDED_PROC_TYPE_BOOT 0x0UL
|
||||
+ #define FW_RESET_REQ_EMBEDDED_PROC_TYPE_MGMT 0x1UL
|
||||
+ #define FW_RESET_REQ_EMBEDDED_PROC_TYPE_NETCTRL 0x2UL
|
||||
+ #define FW_RESET_REQ_EMBEDDED_PROC_TYPE_ROCE 0x3UL
|
||||
+ #define FW_RESET_REQ_EMBEDDED_PROC_TYPE_HOST 0x4UL
|
||||
+ #define FW_RESET_REQ_EMBEDDED_PROC_TYPE_AP 0x5UL
|
||||
+ #define FW_RESET_REQ_EMBEDDED_PROC_TYPE_CHIP 0x6UL
|
||||
+ #define FW_RESET_REQ_EMBEDDED_PROC_TYPE_HOST_RESOURCE_REINIT 0x7UL
|
||||
+ #define FW_RESET_REQ_EMBEDDED_PROC_TYPE_IMPACTLESS_ACTIVATION 0x8UL
|
||||
+ #define FW_RESET_REQ_EMBEDDED_PROC_TYPE_LAST FW_RESET_REQ_EMBEDDED_PROC_TYPE_IMPACTLESS_ACTIVATION
|
||||
u8 selfrst_status;
|
||||
#define FW_RESET_REQ_SELFRST_STATUS_SELFRSTNONE 0x0UL
|
||||
#define FW_RESET_REQ_SELFRST_STATUS_SELFRSTASAP 0x1UL
|
||||
@@ -7125,7 +7178,14 @@
|
||||
__le16 seq_id;
|
||||
__le16 resp_len;
|
||||
u8 temp;
|
||||
- u8 unused_0[6];
|
||||
+ u8 phy_temp;
|
||||
+ u8 om_temp;
|
||||
+ u8 flags;
|
||||
+ #define TEMP_MONITOR_QUERY_RESP_FLAGS_TEMP_NOT_AVAILABLE 0x1UL
|
||||
+ #define TEMP_MONITOR_QUERY_RESP_FLAGS_PHY_TEMP_NOT_AVAILABLE 0x2UL
|
||||
+ #define TEMP_MONITOR_QUERY_RESP_FLAGS_OM_NOT_PRESENT 0x4UL
|
||||
+ #define TEMP_MONITOR_QUERY_RESP_FLAGS_OM_TEMP_NOT_AVAILABLE 0x8UL
|
||||
+ u8 unused_0[3];
|
||||
u8 valid;
|
||||
};
|
||||
|
@ -0,0 +1,158 @@
|
||||
From a10d58b1feaebcd74c4c1c0d2247c742a8d704e7 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Wed, 2 Oct 2019 18:23:39 -0400
|
||||
Subject: [PATCH 84/96] [netdrv] bnxt_en: Add a new
|
||||
BNXT_FW_RESET_STATE_POLL_FW_DOWN state
|
||||
|
||||
Message-id: <e3f406d7947d866a0104ca7cba793749cd1bf4f3.1570027456.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 276502
|
||||
O-Subject: [RHEL-8.2 PATCH 77/78] bnxt_en: Add a new BNXT_FW_RESET_STATE_POLL_FW_DOWN state.
|
||||
Bugzilla: 1724766
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
|
||||
This new state is required when firmware indicates that the error
|
||||
recovery process requires polling for firmware state to be completely
|
||||
down before initiating reset. For example, firmware may take some
|
||||
time to collect the crash dump before it is down and ready to be
|
||||
reset.
|
||||
|
||||
Signed-off-by: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit 4037eb715680caa3d80075fb54dbc35d79d5f9ff)
|
||||
Bugzilla: 1724766
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=23809532
|
||||
Tested: build, boot, basic ping
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 48 +++++++++++++++++++++++++++----
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.h | 3 ++
|
||||
2 files changed, 46 insertions(+), 5 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:21.286461969 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:21.672458426 +0100
|
||||
@@ -6952,6 +6952,8 @@
|
||||
bp->fw_cap |= BNXT_FW_CAP_EXT_STATS_SUPPORTED;
|
||||
if (flags & FUNC_QCAPS_RESP_FLAGS_ERROR_RECOVERY_CAPABLE)
|
||||
bp->fw_cap |= BNXT_FW_CAP_ERROR_RECOVERY;
|
||||
+ if (flags & FUNC_QCAPS_RESP_FLAGS_ERR_RECOVER_RELOAD)
|
||||
+ bp->fw_cap |= BNXT_FW_CAP_ERR_RECOVER_RELOAD;
|
||||
|
||||
bp->tx_push_thresh = 0;
|
||||
if (flags & FUNC_QCAPS_RESP_FLAGS_PUSH_MODE_SUPPORTED)
|
||||
@@ -10102,6 +10104,8 @@
|
||||
wait_dsecs = fw_health->normal_func_wait_dsecs;
|
||||
bp->fw_reset_state = BNXT_FW_RESET_STATE_ENABLE_DEV;
|
||||
}
|
||||
+
|
||||
+ bp->fw_reset_min_dsecs = fw_health->post_reset_wait_dsecs;
|
||||
bp->fw_reset_max_dsecs = fw_health->post_reset_max_wait_dsecs;
|
||||
bnxt_queue_fw_reset_work(bp, wait_dsecs * HZ / 10);
|
||||
}
|
||||
@@ -10143,7 +10147,7 @@
|
||||
bnxt_rtnl_lock_sp(bp);
|
||||
if (test_bit(BNXT_STATE_OPEN, &bp->state) &&
|
||||
!test_bit(BNXT_STATE_IN_FW_RESET, &bp->state)) {
|
||||
- int n = 0;
|
||||
+ int n = 0, tmo;
|
||||
|
||||
set_bit(BNXT_STATE_IN_FW_RESET, &bp->state);
|
||||
if (bp->pf.active_vfs &&
|
||||
@@ -10166,8 +10170,14 @@
|
||||
goto fw_reset_exit;
|
||||
}
|
||||
bnxt_fw_reset_close(bp);
|
||||
- bp->fw_reset_state = BNXT_FW_RESET_STATE_ENABLE_DEV;
|
||||
- bnxt_queue_fw_reset_work(bp, bp->fw_reset_min_dsecs * HZ / 10);
|
||||
+ if (bp->fw_cap & BNXT_FW_CAP_ERR_RECOVER_RELOAD) {
|
||||
+ bp->fw_reset_state = BNXT_FW_RESET_STATE_POLL_FW_DOWN;
|
||||
+ tmo = HZ / 10;
|
||||
+ } else {
|
||||
+ bp->fw_reset_state = BNXT_FW_RESET_STATE_ENABLE_DEV;
|
||||
+ tmo = bp->fw_reset_min_dsecs * HZ / 10;
|
||||
+ }
|
||||
+ bnxt_queue_fw_reset_work(bp, tmo);
|
||||
}
|
||||
fw_reset_exit:
|
||||
bnxt_rtnl_unlock_sp(bp);
|
||||
@@ -10610,6 +10620,7 @@
|
||||
switch (bp->fw_reset_state) {
|
||||
case BNXT_FW_RESET_STATE_POLL_VF: {
|
||||
int n = bnxt_get_registered_vfs(bp);
|
||||
+ int tmo;
|
||||
|
||||
if (n < 0) {
|
||||
netdev_err(bp->dev, "Firmware reset aborted, subsequent func_qcfg cmd failed, rc = %d, %d msecs since reset timestamp\n",
|
||||
@@ -10631,11 +10642,38 @@
|
||||
bp->fw_reset_timestamp = jiffies;
|
||||
rtnl_lock();
|
||||
bnxt_fw_reset_close(bp);
|
||||
- bp->fw_reset_state = BNXT_FW_RESET_STATE_ENABLE_DEV;
|
||||
+ if (bp->fw_cap & BNXT_FW_CAP_ERR_RECOVER_RELOAD) {
|
||||
+ bp->fw_reset_state = BNXT_FW_RESET_STATE_POLL_FW_DOWN;
|
||||
+ tmo = HZ / 10;
|
||||
+ } else {
|
||||
+ bp->fw_reset_state = BNXT_FW_RESET_STATE_ENABLE_DEV;
|
||||
+ tmo = bp->fw_reset_min_dsecs * HZ / 10;
|
||||
+ }
|
||||
rtnl_unlock();
|
||||
- bnxt_queue_fw_reset_work(bp, bp->fw_reset_min_dsecs * HZ / 10);
|
||||
+ bnxt_queue_fw_reset_work(bp, tmo);
|
||||
return;
|
||||
}
|
||||
+ case BNXT_FW_RESET_STATE_POLL_FW_DOWN: {
|
||||
+ u32 val;
|
||||
+
|
||||
+ val = bnxt_fw_health_readl(bp, BNXT_FW_HEALTH_REG);
|
||||
+ if (!(val & BNXT_FW_STATUS_SHUTDOWN) &&
|
||||
+ !time_after(jiffies, bp->fw_reset_timestamp +
|
||||
+ (bp->fw_reset_max_dsecs * HZ / 10))) {
|
||||
+ bnxt_queue_fw_reset_work(bp, HZ / 5);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ if (!bp->fw_health->master) {
|
||||
+ u32 wait_dsecs = bp->fw_health->normal_func_wait_dsecs;
|
||||
+
|
||||
+ bp->fw_reset_state = BNXT_FW_RESET_STATE_ENABLE_DEV;
|
||||
+ bnxt_queue_fw_reset_work(bp, wait_dsecs * HZ / 10);
|
||||
+ return;
|
||||
+ }
|
||||
+ bp->fw_reset_state = BNXT_FW_RESET_STATE_RESET_FW;
|
||||
+ }
|
||||
+ /* fall through */
|
||||
case BNXT_FW_RESET_STATE_RESET_FW: {
|
||||
u32 wait_dsecs = bp->fw_health->post_reset_wait_dsecs;
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.h
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:21.412460813 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:21.672458426 +0100
|
||||
@@ -1398,6 +1398,7 @@
|
||||
#define BNXT_FW_HEALTH_WIN_MAP_OFF 8
|
||||
|
||||
#define BNXT_FW_STATUS_HEALTHY 0x8000
|
||||
+#define BNXT_FW_STATUS_SHUTDOWN 0x100000
|
||||
|
||||
struct bnxt {
|
||||
void __iomem *bar0;
|
||||
@@ -1655,6 +1656,7 @@
|
||||
#define BNXT_FW_CAP_CFA_RFS_RING_TBL_IDX 0x00010000
|
||||
#define BNXT_FW_CAP_PCIE_STATS_SUPPORTED 0x00020000
|
||||
#define BNXT_FW_CAP_EXT_STATS_SUPPORTED 0x00040000
|
||||
+ #define BNXT_FW_CAP_ERR_RECOVER_RELOAD 0x00100000
|
||||
|
||||
#define BNXT_NEW_RM(bp) ((bp)->fw_cap & BNXT_FW_CAP_NEW_RM)
|
||||
u32 hwrm_spec_code;
|
||||
@@ -1744,6 +1746,7 @@
|
||||
#define BNXT_FW_RESET_STATE_ENABLE_DEV 3
|
||||
#define BNXT_FW_RESET_STATE_POLL_FW 4
|
||||
#define BNXT_FW_RESET_STATE_OPENING 5
|
||||
+#define BNXT_FW_RESET_STATE_POLL_FW_DOWN 6
|
||||
|
||||
u16 fw_reset_min_dsecs;
|
||||
#define BNXT_DFLT_FW_RST_MIN_DSECS 20
|
@ -0,0 +1,138 @@
|
||||
From 4efc1d44bba3790e80c873c904d7ea492a95c266 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Fri, 6 Dec 2019 20:12:41 -0500
|
||||
Subject: [PATCH 85/96] [netdrv] bnxt_en: Fix the size of devlink MSIX
|
||||
parameters
|
||||
|
||||
Message-id: <1b368014d051a2c3530a23412e08b2275d988c8c.1575651771.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 291380
|
||||
O-Subject: [PATCH rhel8 01/13] bnxt_en: Fix the size of devlink MSIX parameters.
|
||||
Bugzilla: 1773724
|
||||
RH-Acked-by: Steve Best <sbest@redhat.com>
|
||||
RH-Acked-by: David Arcari <darcari@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
|
||||
The current code that rounds up the NVRAM parameter bit size to the next
|
||||
byte size for the devlink parameter is not always correct. The MSIX
|
||||
devlink parameters are 4 bytes and we don't get the correct size
|
||||
using this method.
|
||||
|
||||
Fix it by adding a new dl_num_bytes member to the bnxt_dl_nvm_param
|
||||
structure which statically provides bytesize information according
|
||||
to the devlink parameter type definition.
|
||||
|
||||
Fixes: 782a624d00fa ("bnxt_en: Add bnxt_en initial port params table and register it")
|
||||
Cc: Jiri Pirko <jiri@mellanox.com>
|
||||
Signed-off-by: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
|
||||
(cherry picked from commit c329230ce886f449a6e559b636096b75ab00d18a)
|
||||
Bugzilla: 1773724
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=25154853
|
||||
Tested: simple boot test
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c | 28 +++++++++++------------
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.h | 3 ++-
|
||||
2 files changed, 16 insertions(+), 15 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c 2020-02-06 16:23:21.001464585 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c 2020-02-06 16:23:21.809457168 +0100
|
||||
@@ -215,15 +215,15 @@
|
||||
|
||||
static const struct bnxt_dl_nvm_param nvm_params[] = {
|
||||
{DEVLINK_PARAM_GENERIC_ID_ENABLE_SRIOV, NVM_OFF_ENABLE_SRIOV,
|
||||
- BNXT_NVM_SHARED_CFG, 1},
|
||||
+ BNXT_NVM_SHARED_CFG, 1, 1},
|
||||
{DEVLINK_PARAM_GENERIC_ID_IGNORE_ARI, NVM_OFF_IGNORE_ARI,
|
||||
- BNXT_NVM_SHARED_CFG, 1},
|
||||
+ BNXT_NVM_SHARED_CFG, 1, 1},
|
||||
{DEVLINK_PARAM_GENERIC_ID_MSIX_VEC_PER_PF_MAX,
|
||||
- NVM_OFF_MSIX_VEC_PER_PF_MAX, BNXT_NVM_SHARED_CFG, 10},
|
||||
+ NVM_OFF_MSIX_VEC_PER_PF_MAX, BNXT_NVM_SHARED_CFG, 10, 4},
|
||||
{DEVLINK_PARAM_GENERIC_ID_MSIX_VEC_PER_PF_MIN,
|
||||
- NVM_OFF_MSIX_VEC_PER_PF_MIN, BNXT_NVM_SHARED_CFG, 7},
|
||||
+ NVM_OFF_MSIX_VEC_PER_PF_MIN, BNXT_NVM_SHARED_CFG, 7, 4},
|
||||
{BNXT_DEVLINK_PARAM_ID_GRE_VER_CHECK, NVM_OFF_DIS_GRE_VER_CHECK,
|
||||
- BNXT_NVM_SHARED_CFG, 1},
|
||||
+ BNXT_NVM_SHARED_CFG, 1, 1},
|
||||
};
|
||||
|
||||
static int bnxt_hwrm_nvm_req(struct bnxt *bp, u32 param_id, void *msg,
|
||||
@@ -232,8 +232,8 @@
|
||||
struct hwrm_nvm_get_variable_input *req = msg;
|
||||
void *data_addr = NULL, *buf = NULL;
|
||||
struct bnxt_dl_nvm_param nvm_param;
|
||||
- int bytesize, idx = 0, rc, i;
|
||||
dma_addr_t data_dma_addr;
|
||||
+ int idx = 0, rc, i;
|
||||
|
||||
/* Get/Set NVM CFG parameter is supported only on PFs */
|
||||
if (BNXT_VF(bp))
|
||||
@@ -254,10 +254,9 @@
|
||||
else if (nvm_param.dir_type == BNXT_NVM_FUNC_CFG)
|
||||
idx = bp->pf.fw_fid - BNXT_FIRST_PF_FID;
|
||||
|
||||
- bytesize = roundup(nvm_param.num_bits, BITS_PER_BYTE) / BITS_PER_BYTE;
|
||||
- switch (bytesize) {
|
||||
+ switch (nvm_param.dl_num_bytes) {
|
||||
case 1:
|
||||
- if (nvm_param.num_bits == 1)
|
||||
+ if (nvm_param.nvm_num_bits == 1)
|
||||
buf = &val->vbool;
|
||||
else
|
||||
buf = &val->vu8;
|
||||
@@ -272,29 +271,30 @@
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
- data_addr = dma_alloc_coherent(&bp->pdev->dev, bytesize,
|
||||
+ data_addr = dma_alloc_coherent(&bp->pdev->dev, nvm_param.dl_num_bytes,
|
||||
&data_dma_addr, GFP_KERNEL);
|
||||
if (!data_addr)
|
||||
return -ENOMEM;
|
||||
|
||||
req->dest_data_addr = cpu_to_le64(data_dma_addr);
|
||||
- req->data_len = cpu_to_le16(nvm_param.num_bits);
|
||||
+ req->data_len = cpu_to_le16(nvm_param.nvm_num_bits);
|
||||
req->option_num = cpu_to_le16(nvm_param.offset);
|
||||
req->index_0 = cpu_to_le16(idx);
|
||||
if (idx)
|
||||
req->dimensions = cpu_to_le16(1);
|
||||
|
||||
if (req->req_type == cpu_to_le16(HWRM_NVM_SET_VARIABLE)) {
|
||||
- memcpy(data_addr, buf, bytesize);
|
||||
+ memcpy(data_addr, buf, nvm_param.dl_num_bytes);
|
||||
rc = hwrm_send_message(bp, msg, msg_len, HWRM_CMD_TIMEOUT);
|
||||
} else {
|
||||
rc = hwrm_send_message_silent(bp, msg, msg_len,
|
||||
HWRM_CMD_TIMEOUT);
|
||||
}
|
||||
if (!rc && req->req_type == cpu_to_le16(HWRM_NVM_GET_VARIABLE))
|
||||
- memcpy(buf, data_addr, bytesize);
|
||||
+ memcpy(buf, data_addr, nvm_param.dl_num_bytes);
|
||||
|
||||
- dma_free_coherent(&bp->pdev->dev, bytesize, data_addr, data_dma_addr);
|
||||
+ dma_free_coherent(&bp->pdev->dev, nvm_param.dl_num_bytes, data_addr,
|
||||
+ data_dma_addr);
|
||||
if (rc == -EACCES)
|
||||
netdev_err(bp->dev, "PF does not have admin privileges to modify NVM config\n");
|
||||
return rc;
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.h
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.h 2020-02-06 16:23:20.308470946 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.h 2020-02-06 16:23:21.809457168 +0100
|
||||
@@ -52,7 +52,8 @@
|
||||
u16 id;
|
||||
u16 offset;
|
||||
u16 dir_type;
|
||||
- u16 num_bits;
|
||||
+ u16 nvm_num_bits;
|
||||
+ u8 dl_num_bytes;
|
||||
};
|
||||
|
||||
void bnxt_devlink_health_report(struct bnxt *bp, unsigned long event);
|
@ -0,0 +1,151 @@
|
||||
From 5ad60432be4bc7b015baeba7013d74fba3130363 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Fri, 6 Dec 2019 20:12:42 -0500
|
||||
Subject: [PATCH 86/96] [netdrv] bnxt_en: Fix devlink NVRAM related byte order
|
||||
related issues
|
||||
|
||||
Message-id: <be3b99bbac7d76d0ecca750c548a160334e37a09.1575651771.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 291377
|
||||
O-Subject: [PATCH rhel8 02/13] bnxt_en: Fix devlink NVRAM related byte order related issues.
|
||||
Bugzilla: 1773724
|
||||
RH-Acked-by: Steve Best <sbest@redhat.com>
|
||||
RH-Acked-by: David Arcari <darcari@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
|
||||
The current code does not do endian swapping between the devlink
|
||||
parameter and the internal NVRAM representation. Define a union to
|
||||
represent the little endian NVRAM data and add 2 helper functions to
|
||||
copy to and from the NVRAM data with the proper byte swapping.
|
||||
|
||||
Fixes: 782a624d00fa ("bnxt_en: Add bnxt_en initial port params table and register it")
|
||||
Cc: Jiri Pirko <jiri@mellanox.com>
|
||||
Reviewed-by: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
|
||||
(cherry picked from commit 83a46a82b96c1928ad82958752523fb0c7d9fcce)
|
||||
Bugzilla: 1773724
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=25154853
|
||||
Tested: simple boot test
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c | 81 +++++++++++++++--------
|
||||
1 file changed, 54 insertions(+), 27 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c 2020-02-06 16:23:21.809457168 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c 2020-02-06 16:23:21.942455948 +0100
|
||||
@@ -226,12 +226,55 @@
|
||||
BNXT_NVM_SHARED_CFG, 1, 1},
|
||||
};
|
||||
|
||||
+union bnxt_nvm_data {
|
||||
+ u8 val8;
|
||||
+ __le32 val32;
|
||||
+};
|
||||
+
|
||||
+static void bnxt_copy_to_nvm_data(union bnxt_nvm_data *dst,
|
||||
+ union devlink_param_value *src,
|
||||
+ int nvm_num_bits, int dl_num_bytes)
|
||||
+{
|
||||
+ u32 val32 = 0;
|
||||
+
|
||||
+ if (nvm_num_bits == 1) {
|
||||
+ dst->val8 = src->vbool;
|
||||
+ return;
|
||||
+ }
|
||||
+ if (dl_num_bytes == 4)
|
||||
+ val32 = src->vu32;
|
||||
+ else if (dl_num_bytes == 2)
|
||||
+ val32 = (u32)src->vu16;
|
||||
+ else if (dl_num_bytes == 1)
|
||||
+ val32 = (u32)src->vu8;
|
||||
+ dst->val32 = cpu_to_le32(val32);
|
||||
+}
|
||||
+
|
||||
+static void bnxt_copy_from_nvm_data(union devlink_param_value *dst,
|
||||
+ union bnxt_nvm_data *src,
|
||||
+ int nvm_num_bits, int dl_num_bytes)
|
||||
+{
|
||||
+ u32 val32;
|
||||
+
|
||||
+ if (nvm_num_bits == 1) {
|
||||
+ dst->vbool = src->val8;
|
||||
+ return;
|
||||
+ }
|
||||
+ val32 = le32_to_cpu(src->val32);
|
||||
+ if (dl_num_bytes == 4)
|
||||
+ dst->vu32 = val32;
|
||||
+ else if (dl_num_bytes == 2)
|
||||
+ dst->vu16 = (u16)val32;
|
||||
+ else if (dl_num_bytes == 1)
|
||||
+ dst->vu8 = (u8)val32;
|
||||
+}
|
||||
+
|
||||
static int bnxt_hwrm_nvm_req(struct bnxt *bp, u32 param_id, void *msg,
|
||||
int msg_len, union devlink_param_value *val)
|
||||
{
|
||||
struct hwrm_nvm_get_variable_input *req = msg;
|
||||
- void *data_addr = NULL, *buf = NULL;
|
||||
struct bnxt_dl_nvm_param nvm_param;
|
||||
+ union bnxt_nvm_data *data;
|
||||
dma_addr_t data_dma_addr;
|
||||
int idx = 0, rc, i;
|
||||
|
||||
@@ -254,26 +297,9 @@
|
||||
else if (nvm_param.dir_type == BNXT_NVM_FUNC_CFG)
|
||||
idx = bp->pf.fw_fid - BNXT_FIRST_PF_FID;
|
||||
|
||||
- switch (nvm_param.dl_num_bytes) {
|
||||
- case 1:
|
||||
- if (nvm_param.nvm_num_bits == 1)
|
||||
- buf = &val->vbool;
|
||||
- else
|
||||
- buf = &val->vu8;
|
||||
- break;
|
||||
- case 2:
|
||||
- buf = &val->vu16;
|
||||
- break;
|
||||
- case 4:
|
||||
- buf = &val->vu32;
|
||||
- break;
|
||||
- default:
|
||||
- return -EFAULT;
|
||||
- }
|
||||
-
|
||||
- data_addr = dma_alloc_coherent(&bp->pdev->dev, nvm_param.dl_num_bytes,
|
||||
- &data_dma_addr, GFP_KERNEL);
|
||||
- if (!data_addr)
|
||||
+ data = dma_alloc_coherent(&bp->pdev->dev, sizeof(*data),
|
||||
+ &data_dma_addr, GFP_KERNEL);
|
||||
+ if (!data)
|
||||
return -ENOMEM;
|
||||
|
||||
req->dest_data_addr = cpu_to_le64(data_dma_addr);
|
||||
@@ -284,17 +310,18 @@
|
||||
req->dimensions = cpu_to_le16(1);
|
||||
|
||||
if (req->req_type == cpu_to_le16(HWRM_NVM_SET_VARIABLE)) {
|
||||
- memcpy(data_addr, buf, nvm_param.dl_num_bytes);
|
||||
+ bnxt_copy_to_nvm_data(data, val, nvm_param.nvm_num_bits,
|
||||
+ nvm_param.dl_num_bytes);
|
||||
rc = hwrm_send_message(bp, msg, msg_len, HWRM_CMD_TIMEOUT);
|
||||
} else {
|
||||
rc = hwrm_send_message_silent(bp, msg, msg_len,
|
||||
HWRM_CMD_TIMEOUT);
|
||||
+ if (!rc)
|
||||
+ bnxt_copy_from_nvm_data(val, data,
|
||||
+ nvm_param.nvm_num_bits,
|
||||
+ nvm_param.dl_num_bytes);
|
||||
}
|
||||
- if (!rc && req->req_type == cpu_to_le16(HWRM_NVM_GET_VARIABLE))
|
||||
- memcpy(buf, data_addr, nvm_param.dl_num_bytes);
|
||||
-
|
||||
- dma_free_coherent(&bp->pdev->dev, nvm_param.dl_num_bytes, data_addr,
|
||||
- data_dma_addr);
|
||||
+ dma_free_coherent(&bp->pdev->dev, sizeof(*data), data, data_dma_addr);
|
||||
if (rc == -EACCES)
|
||||
netdev_err(bp->dev, "PF does not have admin privileges to modify NVM config\n");
|
||||
return rc;
|
@ -0,0 +1,58 @@
|
||||
From ef7f935ad4295dbc775456efd99c583cd51eaa74 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Fri, 6 Dec 2019 20:12:43 -0500
|
||||
Subject: [PATCH 87/96] [netdrv] bnxt_en: Adjust the time to wait before
|
||||
polling firmware readiness
|
||||
|
||||
Message-id: <b727698b6103985a26da3cd6e0c57fc1dca21cd7.1575651771.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 291376
|
||||
O-Subject: [PATCH rhel8 03/13] bnxt_en: Adjust the time to wait before polling firmware readiness.
|
||||
Bugzilla: 1773724
|
||||
RH-Acked-by: Steve Best <sbest@redhat.com>
|
||||
RH-Acked-by: David Arcari <darcari@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
|
||||
When firmware indicates that driver needs to invoke firmware reset
|
||||
which is common for both error recovery and live firmware reset path,
|
||||
driver needs a different time to wait before polling for firmware
|
||||
readiness.
|
||||
|
||||
Modify the wait time to fw_reset_min_dsecs, which is initialised to
|
||||
correct timeout for error recovery and firmware reset.
|
||||
|
||||
Fixes: 4037eb715680 ("bnxt_en: Add a new BNXT_FW_RESET_STATE_POLL_FW_DOWN state.")
|
||||
Signed-off-by: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
|
||||
(cherry picked from commit c6a9e7aa2e8b15402022a15625284069d4fd6df0)
|
||||
Bugzilla: 1773724
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=25154853
|
||||
Tested: simple boot test
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 7 ++-----
|
||||
1 file changed, 2 insertions(+), 5 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:21.672458426 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:22.071454764 +0100
|
||||
@@ -10674,14 +10674,11 @@
|
||||
bp->fw_reset_state = BNXT_FW_RESET_STATE_RESET_FW;
|
||||
}
|
||||
/* fall through */
|
||||
- case BNXT_FW_RESET_STATE_RESET_FW: {
|
||||
- u32 wait_dsecs = bp->fw_health->post_reset_wait_dsecs;
|
||||
-
|
||||
+ case BNXT_FW_RESET_STATE_RESET_FW:
|
||||
bnxt_reset_all(bp);
|
||||
bp->fw_reset_state = BNXT_FW_RESET_STATE_ENABLE_DEV;
|
||||
- bnxt_queue_fw_reset_work(bp, wait_dsecs * HZ / 10);
|
||||
+ bnxt_queue_fw_reset_work(bp, bp->fw_reset_min_dsecs * HZ / 10);
|
||||
return;
|
||||
- }
|
||||
case BNXT_FW_RESET_STATE_ENABLE_DEV:
|
||||
if (test_bit(BNXT_STATE_FW_FATAL_COND, &bp->state) &&
|
||||
bp->fw_health) {
|
@ -0,0 +1,69 @@
|
||||
From 5794ca78ec757be0a96c5538227d5a7bad227ad7 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Fri, 6 Dec 2019 20:12:44 -0500
|
||||
Subject: [PATCH 88/96] [netdrv] bnxt_en: Minor formatting changes in FW
|
||||
devlink_health_reporter
|
||||
|
||||
Message-id: <ef6c612e1719fce46d35f8507ab310cef7446f8f.1575651771.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 291375
|
||||
O-Subject: [PATCH rhel8 04/13] bnxt_en: Minor formatting changes in FW devlink_health_reporter
|
||||
Bugzilla: 1773724
|
||||
RH-Acked-by: Steve Best <sbest@redhat.com>
|
||||
RH-Acked-by: David Arcari <darcari@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
|
||||
Minor formatting changes to diagnose cb for FW devlink health
|
||||
reporter.
|
||||
|
||||
Suggested-by: Jiri Pirko <jiri@mellanox.com>
|
||||
Cc: Jiri Pirko <jiri@mellanox.com>
|
||||
Signed-off-by: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
|
||||
(cherry picked from commit f255ed1c4e4c5ed8171b6e81dce1297df1f1b60c)
|
||||
Bugzilla: 1773724
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=25154853
|
||||
Tested: simple boot test
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c | 17 ++++++-----------
|
||||
1 file changed, 6 insertions(+), 11 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c 2020-02-06 16:23:21.942455948 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c 2020-02-06 16:23:22.198453598 +0100
|
||||
@@ -29,25 +29,20 @@
|
||||
val = bnxt_fw_health_readl(bp, BNXT_FW_HEALTH_REG);
|
||||
health_status = val & 0xffff;
|
||||
|
||||
- if (health_status == BNXT_FW_STATUS_HEALTHY) {
|
||||
- rc = devlink_fmsg_string_pair_put(fmsg, "FW status",
|
||||
- "Healthy;");
|
||||
- if (rc)
|
||||
- return rc;
|
||||
- } else if (health_status < BNXT_FW_STATUS_HEALTHY) {
|
||||
- rc = devlink_fmsg_string_pair_put(fmsg, "FW status",
|
||||
- "Not yet completed initialization;");
|
||||
+ if (health_status < BNXT_FW_STATUS_HEALTHY) {
|
||||
+ rc = devlink_fmsg_string_pair_put(fmsg, "Description",
|
||||
+ "Not yet completed initialization");
|
||||
if (rc)
|
||||
return rc;
|
||||
} else if (health_status > BNXT_FW_STATUS_HEALTHY) {
|
||||
- rc = devlink_fmsg_string_pair_put(fmsg, "FW status",
|
||||
- "Encountered fatal error and cannot recover;");
|
||||
+ rc = devlink_fmsg_string_pair_put(fmsg, "Description",
|
||||
+ "Encountered fatal error and cannot recover");
|
||||
if (rc)
|
||||
return rc;
|
||||
}
|
||||
|
||||
if (val >> 16) {
|
||||
- rc = devlink_fmsg_u32_pair_put(fmsg, "Error", val >> 16);
|
||||
+ rc = devlink_fmsg_u32_pair_put(fmsg, "Error code", val >> 16);
|
||||
if (rc)
|
||||
return rc;
|
||||
}
|
@ -0,0 +1,48 @@
|
||||
From 6224dddff248c8c2870061195aed015df77bee08 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Fri, 6 Dec 2019 20:12:45 -0500
|
||||
Subject: [PATCH 89/96] [netdrv] bnxt_en: Avoid disabling pci device in
|
||||
bnxt_remove_one() for already disabled device
|
||||
|
||||
Message-id: <d5efe4e8687cf682dc2f92c6be82552e027cb2e3.1575651771.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 291383
|
||||
O-Subject: [PATCH rhel8 05/13] bnxt_en: Avoid disabling pci device in bnxt_remove_one() for already disabled device.
|
||||
Bugzilla: 1773724
|
||||
RH-Acked-by: Steve Best <sbest@redhat.com>
|
||||
RH-Acked-by: David Arcari <darcari@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
|
||||
With the recently added error recovery logic, the device may already
|
||||
be disabled if the firmware recovery is unsuccessful. In
|
||||
bnxt_remove_one(), check that the device is still enabled first
|
||||
before calling pci_disable_device().
|
||||
|
||||
Fixes: 3bc7d4a352ef ("bnxt_en: Add BNXT_STATE_IN_FW_RESET state.")
|
||||
Signed-off-by: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
|
||||
(cherry picked from commit f6824308c4be25ba024ab942a6135aa0356acaea)
|
||||
Bugzilla: 1773724
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=25154853
|
||||
Tested: simple boot test
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:22.071454764 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:22.325452432 +0100
|
||||
@@ -10387,7 +10387,8 @@
|
||||
{
|
||||
bnxt_unmap_bars(bp, bp->pdev);
|
||||
pci_release_regions(bp->pdev);
|
||||
- pci_disable_device(bp->pdev);
|
||||
+ if (pci_is_enabled(bp->pdev))
|
||||
+ pci_disable_device(bp->pdev);
|
||||
}
|
||||
|
||||
static void bnxt_init_dflt_coal(struct bnxt *bp)
|
@ -0,0 +1,42 @@
|
||||
From 2b001e35ef1204a73e8302ca35aebd297a3af6ab Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Fri, 6 Dec 2019 20:12:46 -0500
|
||||
Subject: [PATCH 90/96] [netdrv] broadcom: bnxt: Fix use true/false for bool
|
||||
|
||||
Message-id: <65bbd7dd8c315df314e739ce0ad31e8bd157e734.1575651772.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 291387
|
||||
O-Subject: [PATCH rhel8 06/13] broadcom: bnxt: Fix use true/false for bool
|
||||
Bugzilla: 1773724
|
||||
RH-Acked-by: Steve Best <sbest@redhat.com>
|
||||
RH-Acked-by: David Arcari <darcari@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
|
||||
Use true/false for bool type in bnxt_timer function.
|
||||
|
||||
Signed-off-by: Saurav Girepunje <saurav.girepunje@gmail.com>
|
||||
Acked-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit acda6180e86ba9e0026287d65f30d1e2b0c8882a)
|
||||
Bugzilla: 1773724
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=25154853
|
||||
Tested: simple boot test
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:22.325452432 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:22.451451275 +0100
|
||||
@@ -10009,7 +10009,7 @@
|
||||
|
||||
if (bp->link_info.phy_retry) {
|
||||
if (time_after(jiffies, bp->link_info.phy_retry_expires)) {
|
||||
- bp->link_info.phy_retry = 0;
|
||||
+ bp->link_info.phy_retry = false;
|
||||
netdev_warn(bp->dev, "failed to update phy settings after maximum retries.\n");
|
||||
} else {
|
||||
set_bit(BNXT_UPDATE_PHY_SP_EVENT, &bp->sp_event);
|
@ -0,0 +1,77 @@
|
||||
From 3f0777c62d6df5c01697a0061aaeba3507d356b1 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Fri, 6 Dec 2019 20:12:47 -0500
|
||||
Subject: [PATCH 91/96] [netdrv] bnxt_en: Add support to invoke OP-TEE API to
|
||||
reset firmware
|
||||
|
||||
Message-id: <f1037e6e271650f2cc6821105fe9325d079d47f3.1575651772.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 291374
|
||||
O-Subject: [PATCH rhel8 07/13] bnxt_en: Add support to invoke OP-TEE API to reset firmware
|
||||
Bugzilla: 1773724
|
||||
RH-Acked-by: Steve Best <sbest@redhat.com>
|
||||
RH-Acked-by: David Arcari <darcari@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
|
||||
In error recovery process when firmware indicates that it is
|
||||
completely down, initiate a firmware reset by calling OP-TEE API.
|
||||
|
||||
Cc: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
|
||||
Signed-off-by: Sheetal Tigadoli <sheetal.tigadoli@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit e07ab2021eb6b7123ec66ae1dc019afae566a56c)
|
||||
Bugzilla: 1773724
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=25154853
|
||||
Tested: simple boot test
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 13 +++++++++++--
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.h | 3 +++
|
||||
2 files changed, 14 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:22.451451275 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:22.576450128 +0100
|
||||
@@ -10587,14 +10587,23 @@
|
||||
static void bnxt_reset_all(struct bnxt *bp)
|
||||
{
|
||||
struct bnxt_fw_health *fw_health = bp->fw_health;
|
||||
- int i;
|
||||
+ int i, rc;
|
||||
+
|
||||
+ if (bp->fw_cap & BNXT_FW_CAP_ERR_RECOVER_RELOAD) {
|
||||
+#ifdef CONFIG_TEE_BNXT_FW
|
||||
+ rc = tee_bnxt_fw_load();
|
||||
+ if (rc)
|
||||
+ netdev_err(bp->dev, "Unable to reset FW rc=%d\n", rc);
|
||||
+ bp->fw_reset_timestamp = jiffies;
|
||||
+#endif
|
||||
+ return;
|
||||
+ }
|
||||
|
||||
if (fw_health->flags & ERROR_RECOVERY_QCFG_RESP_FLAGS_HOST) {
|
||||
for (i = 0; i < fw_health->fw_reset_seq_cnt; i++)
|
||||
bnxt_fw_reset_writel(bp, i);
|
||||
} else if (fw_health->flags & ERROR_RECOVERY_QCFG_RESP_FLAGS_CO_CPU) {
|
||||
struct hwrm_fw_reset_input req = {0};
|
||||
- int rc;
|
||||
|
||||
bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_FW_RESET, -1, -1);
|
||||
req.resp_addr = cpu_to_le64(bp->hwrm_cmd_kong_resp_dma_addr);
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.h
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:21.672458426 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:22.576450128 +0100
|
||||
@@ -25,6 +25,9 @@
|
||||
#include <net/dst_metadata.h>
|
||||
#include <net/xdp.h>
|
||||
#include <linux/net_dim.h>
|
||||
+#ifdef CONFIG_TEE_BNXT_FW
|
||||
+#include <linux/firmware/broadcom/tee_bnxt_fw.h>
|
||||
+#endif
|
||||
|
||||
struct page_pool;
|
||||
|
@ -0,0 +1,151 @@
|
||||
From 36a2341eb0c9dbff43d31d3ed2ac50acd1b56b47 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Fri, 6 Dec 2019 20:12:48 -0500
|
||||
Subject: [PATCH 92/96] [netdrv] bnxt_en: Add support to collect crash dump via
|
||||
ethtool
|
||||
|
||||
Message-id: <cb065cce89746b909d8b6c83587e9bb55465950c.1575651772.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 291386
|
||||
O-Subject: [PATCH rhel8 08/13] bnxt_en: Add support to collect crash dump via ethtool
|
||||
Bugzilla: 1773724
|
||||
RH-Acked-by: Steve Best <sbest@redhat.com>
|
||||
RH-Acked-by: David Arcari <darcari@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
|
||||
Driver supports 2 types of core dumps.
|
||||
|
||||
1. Live dump - Firmware dump when system is up and running.
|
||||
2. Crash dump - Dump which is collected during firmware crash
|
||||
that can be retrieved after recovery.
|
||||
Crash dump is currently supported only on specific 58800 chips
|
||||
which can be retrieved using OP-TEE API only, as firmware cannot
|
||||
access this region directly.
|
||||
|
||||
User needs to set the dump flag using following command before
|
||||
initiating the dump collection:
|
||||
|
||||
$ ethtool -W|--set-dump eth0 N
|
||||
|
||||
Where N is "0" for live dump and "1" for crash dump
|
||||
|
||||
Command to collect the dump after setting the flag:
|
||||
|
||||
$ ethtool -w eth0 data Filename
|
||||
|
||||
v3: Modify set_dump to support even when CONFIG_TEE_BNXT_FW=n.
|
||||
Also change log message to netdev_info().
|
||||
|
||||
Cc: Jakub Kicinski <jakub.kicinski@netronome.com>
|
||||
Cc: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
|
||||
Signed-off-by: Sheetal Tigadoli <sheetal.tigadoli@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit 0b0eacf3c83cb292c6eef55c76d5138c9302dc20)
|
||||
Bugzilla: 1773724
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=25154853
|
||||
Tested: simple boot test
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.h | 3 ++
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 37 +++++++++++++++++++++--
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.h | 2 ++
|
||||
3 files changed, 40 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.h
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:22.576450128 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:23:22.708448916 +0100
|
||||
@@ -1807,6 +1807,9 @@
|
||||
|
||||
u8 num_leds;
|
||||
struct bnxt_led_info leds[BNXT_MAX_LED];
|
||||
+ u16 dump_flag;
|
||||
+#define BNXT_DUMP_LIVE 0
|
||||
+#define BNXT_DUMP_CRASH 1
|
||||
|
||||
struct bpf_prog *xdp_prog;
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c 2020-02-06 16:23:21.412460813 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c 2020-02-06 16:23:22.709448907 +0100
|
||||
@@ -3311,6 +3311,24 @@
|
||||
return rc;
|
||||
}
|
||||
|
||||
+static int bnxt_set_dump(struct net_device *dev, struct ethtool_dump *dump)
|
||||
+{
|
||||
+ struct bnxt *bp = netdev_priv(dev);
|
||||
+
|
||||
+ if (dump->flag > BNXT_DUMP_CRASH) {
|
||||
+ netdev_info(dev, "Supports only Live(0) and Crash(1) dumps.\n");
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+
|
||||
+ if (!IS_ENABLED(CONFIG_TEE_BNXT_FW) && dump->flag == BNXT_DUMP_CRASH) {
|
||||
+ netdev_info(dev, "Cannot collect crash dump as TEE_BNXT_FW config option is not enabled.\n");
|
||||
+ return -EOPNOTSUPP;
|
||||
+ }
|
||||
+
|
||||
+ bp->dump_flag = dump->flag;
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static int bnxt_get_dump_flag(struct net_device *dev, struct ethtool_dump *dump)
|
||||
{
|
||||
struct bnxt *bp = netdev_priv(dev);
|
||||
@@ -3323,7 +3341,12 @@
|
||||
bp->ver_resp.hwrm_fw_bld_8b << 8 |
|
||||
bp->ver_resp.hwrm_fw_rsvd_8b;
|
||||
|
||||
- return bnxt_get_coredump(bp, NULL, &dump->len);
|
||||
+ dump->flag = bp->dump_flag;
|
||||
+ if (bp->dump_flag == BNXT_DUMP_CRASH)
|
||||
+ dump->len = BNXT_CRASH_DUMP_LEN;
|
||||
+ else
|
||||
+ bnxt_get_coredump(bp, NULL, &dump->len);
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
static int bnxt_get_dump_data(struct net_device *dev, struct ethtool_dump *dump,
|
||||
@@ -3336,7 +3359,16 @@
|
||||
|
||||
memset(buf, 0, dump->len);
|
||||
|
||||
- return bnxt_get_coredump(bp, buf, &dump->len);
|
||||
+ dump->flag = bp->dump_flag;
|
||||
+ if (dump->flag == BNXT_DUMP_CRASH) {
|
||||
+#ifdef CONFIG_TEE_BNXT_FW
|
||||
+ return tee_bnxt_copy_coredump(buf, 0, dump->len);
|
||||
+#endif
|
||||
+ } else {
|
||||
+ return bnxt_get_coredump(bp, buf, &dump->len);
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
void bnxt_ethtool_init(struct bnxt *bp)
|
||||
@@ -3446,6 +3478,7 @@
|
||||
.set_phys_id = bnxt_set_phys_id,
|
||||
.self_test = bnxt_self_test,
|
||||
.reset = bnxt_reset,
|
||||
+ .set_dump = bnxt_set_dump,
|
||||
.get_dump_flag = bnxt_get_dump_flag,
|
||||
.get_dump_data = bnxt_get_dump_data,
|
||||
};
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.h
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.h 2020-02-06 16:22:53.098720710 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.h 2020-02-06 16:23:22.709448907 +0100
|
||||
@@ -59,6 +59,8 @@
|
||||
#define HWRM_DBG_CMN_FLAGS_MORE 1
|
||||
};
|
||||
|
||||
+#define BNXT_CRASH_DUMP_LEN (8 << 20)
|
||||
+
|
||||
#define BNXT_LED_DFLT_ENA \
|
||||
(PORT_LED_CFG_REQ_ENABLES_LED0_ID | \
|
||||
PORT_LED_CFG_REQ_ENABLES_LED0_STATE | \
|
@ -0,0 +1,48 @@
|
||||
From fd58eda8d85adfa7b537e19b4407155cd014f76b Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Fri, 6 Dec 2019 20:12:49 -0500
|
||||
Subject: [PATCH 93/96] [netdrv] bnxt: Avoid logging an unnecessary message
|
||||
when a flow can't be offloaded
|
||||
|
||||
Message-id: <f09a970352f5c52cefbca0156ac1174b441b1353.1575651772.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 291381
|
||||
O-Subject: [PATCH rhel8 09/13] bnxt: Avoid logging an unnecessary message when a flow can't be offloaded
|
||||
Bugzilla: 1773724
|
||||
RH-Acked-by: Steve Best <sbest@redhat.com>
|
||||
RH-Acked-by: David Arcari <darcari@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
|
||||
For every single case where bnxt_tc_can_offload() can fail, we are
|
||||
logging a user friendly descriptive message anyway, but because of the
|
||||
path it would take in case of failure, another redundant error message
|
||||
would get logged. Just freeing the node and returning from the point of
|
||||
failure should suffice.
|
||||
|
||||
Signed-off-by: Somnath Kotur <somnath.kotur@broadcom.com>
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit 08f8280e8788202a67a359952cd436707f8789bd)
|
||||
Bugzilla: 1773724
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=25154853
|
||||
Tested: simple boot test
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c 2020-02-06 16:23:18.307489314 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c 2020-02-06 16:23:22.853447585 +0100
|
||||
@@ -1274,7 +1274,8 @@
|
||||
|
||||
if (!bnxt_tc_can_offload(bp, flow)) {
|
||||
rc = -EOPNOTSUPP;
|
||||
- goto free_node;
|
||||
+ kfree_rcu(new_node, rcu);
|
||||
+ return rc;
|
||||
}
|
||||
|
||||
/* If a flow exists with the same cookie, delete it */
|
@ -0,0 +1,147 @@
|
||||
From c0fca90e2368d9632e50ad92844591bb15830aa3 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Fri, 6 Dec 2019 20:12:51 -0500
|
||||
Subject: [PATCH 94/96] [netdrv] bnxt_en: Improve
|
||||
bnxt_ulp_stop()/bnxt_ulp_start() call sequence
|
||||
|
||||
Message-id: <9db03065554258d9fea296da3c76419aa2bbc777.1575651772.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 291385
|
||||
O-Subject: [PATCH rhel8 11/13] bnxt_en: Improve bnxt_ulp_stop()/bnxt_ulp_start() call sequence.
|
||||
Bugzilla: 1773724
|
||||
RH-Acked-by: Steve Best <sbest@redhat.com>
|
||||
RH-Acked-by: David Arcari <darcari@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
|
||||
We call bnxt_ulp_stop() to notify the RDMA driver that some error or
|
||||
imminent reset is about to happen. After that we always call
|
||||
some variants of bnxt_close().
|
||||
|
||||
In the next patch, we will integrate the recently added error
|
||||
recovery with the RDMA driver. In response to ulp_stop, the
|
||||
RDMA driver may free MSIX vectors and that will also trigger
|
||||
bnxt_close(). To avoid bnxt_close() from being called twice,
|
||||
we set a new flag after ulp_stop is called. If the RDMA driver
|
||||
frees MSIX vectors while the new flag is set, we will not call
|
||||
bnxt_close(), knowing that it will happen in due course.
|
||||
|
||||
With this change, we must make sure that the bnxt_close() call
|
||||
after ulp_stop will reset IRQ. Modify bnxt_reset_task()
|
||||
accordingly if we call ulp_stop.
|
||||
|
||||
Signed-off-by: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit aa46dffff452f7c6d907c4e6a0062e2c53a87fc0)
|
||||
Bugzilla: 1773724
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=25154853
|
||||
Tested: simple boot test
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 18 ++++++++++--------
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c | 10 ++++++++--
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.h | 3 ++-
|
||||
3 files changed, 20 insertions(+), 11 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:22.576450128 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:22.982446401 +0100
|
||||
@@ -9932,12 +9932,15 @@
|
||||
if (netif_running(bp->dev)) {
|
||||
int rc;
|
||||
|
||||
- if (!silent)
|
||||
+ if (silent) {
|
||||
+ bnxt_close_nic(bp, false, false);
|
||||
+ bnxt_open_nic(bp, false, false);
|
||||
+ } else {
|
||||
bnxt_ulp_stop(bp);
|
||||
- bnxt_close_nic(bp, false, false);
|
||||
- rc = bnxt_open_nic(bp, false, false);
|
||||
- if (!silent && !rc)
|
||||
- bnxt_ulp_start(bp);
|
||||
+ bnxt_close_nic(bp, true, false);
|
||||
+ rc = bnxt_open_nic(bp, true, false);
|
||||
+ bnxt_ulp_start(bp, rc);
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12034,10 +12037,9 @@
|
||||
if (!err && netif_running(netdev))
|
||||
err = bnxt_open(netdev);
|
||||
|
||||
- if (!err) {
|
||||
+ if (!err)
|
||||
result = PCI_ERS_RESULT_RECOVERED;
|
||||
- bnxt_ulp_start(bp);
|
||||
- }
|
||||
+ bnxt_ulp_start(bp, err);
|
||||
}
|
||||
|
||||
if (result != PCI_ERS_RESULT_RECOVERED && netif_running(netdev))
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c 2020-02-06 16:23:20.163472277 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c 2020-02-06 16:23:22.982446401 +0100
|
||||
@@ -182,7 +182,7 @@
|
||||
|
||||
edev->ulp_tbl[ulp_id].msix_requested = 0;
|
||||
edev->flags &= ~BNXT_EN_FLAG_MSIX_REQUESTED;
|
||||
- if (netif_running(dev)) {
|
||||
+ if (netif_running(dev) && !(edev->flags & BNXT_EN_FLAG_ULP_STOPPED)) {
|
||||
bnxt_close_nic(bp, true, false);
|
||||
bnxt_open_nic(bp, true, false);
|
||||
}
|
||||
@@ -266,6 +266,7 @@
|
||||
if (!edev)
|
||||
return;
|
||||
|
||||
+ edev->flags |= BNXT_EN_FLAG_ULP_STOPPED;
|
||||
for (i = 0; i < BNXT_MAX_ULP; i++) {
|
||||
struct bnxt_ulp *ulp = &edev->ulp_tbl[i];
|
||||
|
||||
@@ -276,7 +277,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
-void bnxt_ulp_start(struct bnxt *bp)
|
||||
+void bnxt_ulp_start(struct bnxt *bp, int err)
|
||||
{
|
||||
struct bnxt_en_dev *edev = bp->edev;
|
||||
struct bnxt_ulp_ops *ops;
|
||||
@@ -285,6 +286,11 @@
|
||||
if (!edev)
|
||||
return;
|
||||
|
||||
+ edev->flags &= ~BNXT_EN_FLAG_ULP_STOPPED;
|
||||
+
|
||||
+ if (err)
|
||||
+ return;
|
||||
+
|
||||
for (i = 0; i < BNXT_MAX_ULP; i++) {
|
||||
struct bnxt_ulp *ulp = &edev->ulp_tbl[i];
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.h
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.h 2020-02-06 16:22:53.036721279 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.h 2020-02-06 16:23:22.982446401 +0100
|
||||
@@ -64,6 +64,7 @@
|
||||
#define BNXT_EN_FLAG_ROCE_CAP (BNXT_EN_FLAG_ROCEV1_CAP | \
|
||||
BNXT_EN_FLAG_ROCEV2_CAP)
|
||||
#define BNXT_EN_FLAG_MSIX_REQUESTED 0x4
|
||||
+ #define BNXT_EN_FLAG_ULP_STOPPED 0x8
|
||||
const struct bnxt_en_ops *en_ops;
|
||||
struct bnxt_ulp ulp_tbl[BNXT_MAX_ULP];
|
||||
};
|
||||
@@ -92,7 +93,7 @@
|
||||
int bnxt_get_ulp_msix_base(struct bnxt *bp);
|
||||
int bnxt_get_ulp_stat_ctxs(struct bnxt *bp);
|
||||
void bnxt_ulp_stop(struct bnxt *bp);
|
||||
-void bnxt_ulp_start(struct bnxt *bp);
|
||||
+void bnxt_ulp_start(struct bnxt *bp, int err);
|
||||
void bnxt_ulp_sriov_cfg(struct bnxt *bp, int num_vfs);
|
||||
void bnxt_ulp_shutdown(struct bnxt *bp);
|
||||
void bnxt_ulp_irq_stop(struct bnxt *bp);
|
@ -0,0 +1,95 @@
|
||||
From 62709321caaafe7638f3df3f791a03dac1130b59 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Fri, 6 Dec 2019 20:12:52 -0500
|
||||
Subject: [PATCH 95/96] [netdrv] bnxt_en: Call bnxt_ulp_stop()/bnxt_ulp_start()
|
||||
during error recovery
|
||||
|
||||
Message-id: <6a79e26467333b7a1e9cb6e56caf1341323e69ff.1575651772.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 291384
|
||||
O-Subject: [PATCH rhel8 12/13] bnxt_en: Call bnxt_ulp_stop()/bnxt_ulp_start() during error recovery.
|
||||
Bugzilla: 1773724
|
||||
RH-Acked-by: Steve Best <sbest@redhat.com>
|
||||
RH-Acked-by: David Arcari <darcari@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
|
||||
Notify the RDMA driver by calling the bnxt_ulp_stop()/bnxt_ulp_start()
|
||||
hooks during error recovery. The current ULP IRQ start/stop
|
||||
sequence in error recovery (which is insufficient) is replaced with the
|
||||
full reset sequence when we call bnxt_ulp_stop()/bnxt_ulp_start().
|
||||
|
||||
Signed-off-by: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit f3a6d206c25ad9490f3a3c6d62baba9504227a75)
|
||||
Bugzilla: 1773724
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=25154853
|
||||
Tested: simple boot test
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 23 ++++++++++++++---------
|
||||
1 file changed, 14 insertions(+), 9 deletions(-)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:22.982446401 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:23.130445043 +0100
|
||||
@@ -8767,6 +8767,8 @@
|
||||
}
|
||||
if (resc_reinit || fw_reset) {
|
||||
if (fw_reset) {
|
||||
+ if (!test_bit(BNXT_STATE_IN_FW_RESET, &bp->state))
|
||||
+ bnxt_ulp_stop(bp);
|
||||
rc = bnxt_fw_init_one(bp);
|
||||
if (rc) {
|
||||
set_bit(BNXT_STATE_ABORT_ERR, &bp->state);
|
||||
@@ -9229,13 +9231,16 @@
|
||||
if (rc) {
|
||||
bnxt_hwrm_if_change(bp, false);
|
||||
} else {
|
||||
- if (test_and_clear_bit(BNXT_STATE_FW_RESET_DET, &bp->state) &&
|
||||
- BNXT_PF(bp)) {
|
||||
- struct bnxt_pf_info *pf = &bp->pf;
|
||||
- int n = pf->active_vfs;
|
||||
+ if (test_and_clear_bit(BNXT_STATE_FW_RESET_DET, &bp->state)) {
|
||||
+ if (BNXT_PF(bp)) {
|
||||
+ struct bnxt_pf_info *pf = &bp->pf;
|
||||
+ int n = pf->active_vfs;
|
||||
|
||||
- if (n)
|
||||
- bnxt_cfg_hw_sriov(bp, &n, true);
|
||||
+ if (n)
|
||||
+ bnxt_cfg_hw_sriov(bp, &n, true);
|
||||
+ }
|
||||
+ if (!test_bit(BNXT_STATE_IN_FW_RESET, &bp->state))
|
||||
+ bnxt_ulp_start(bp, 0);
|
||||
}
|
||||
bnxt_hwmon_open(bp);
|
||||
}
|
||||
@@ -10056,8 +10061,8 @@
|
||||
|
||||
static void bnxt_fw_reset_close(struct bnxt *bp)
|
||||
{
|
||||
+ bnxt_ulp_stop(bp);
|
||||
__bnxt_close_nic(bp, true, false);
|
||||
- bnxt_ulp_irq_stop(bp);
|
||||
bnxt_clear_int_mode(bp);
|
||||
bnxt_hwrm_func_drv_unrgtr(bp);
|
||||
bnxt_free_ctx_mem(bp);
|
||||
@@ -10737,13 +10742,13 @@
|
||||
clear_bit(BNXT_STATE_IN_FW_RESET, &bp->state);
|
||||
dev_close(bp->dev);
|
||||
}
|
||||
- bnxt_ulp_irq_restart(bp, rc);
|
||||
- rtnl_unlock();
|
||||
|
||||
bp->fw_reset_state = 0;
|
||||
/* Make sure fw_reset_state is 0 before clearing the flag */
|
||||
smp_mb__before_atomic();
|
||||
clear_bit(BNXT_STATE_IN_FW_RESET, &bp->state);
|
||||
+ bnxt_ulp_start(bp, rc);
|
||||
+ rtnl_unlock();
|
||||
break;
|
||||
}
|
||||
return;
|
@ -0,0 +1,51 @@
|
||||
From c3ded828bd263b14d9a7af6e51e6d38ba83a7856 Mon Sep 17 00:00:00 2001
|
||||
From: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Date: Fri, 6 Dec 2019 20:12:53 -0500
|
||||
Subject: [PATCH 96/96] [netdrv] bnxt_en: Call bnxt_ulp_stop()/bnxt_ulp_start()
|
||||
during suspend/resume
|
||||
|
||||
Message-id: <8fe101a1eefe9c4bba9c301514b692d55696ddc6.1575651772.git.jtoppins@redhat.com>
|
||||
Patchwork-id: 291378
|
||||
O-Subject: [PATCH rhel8 13/13] bnxt_en: Call bnxt_ulp_stop()/bnxt_ulp_start() during suspend/resume.
|
||||
Bugzilla: 1773724
|
||||
RH-Acked-by: Steve Best <sbest@redhat.com>
|
||||
RH-Acked-by: David Arcari <darcari@redhat.com>
|
||||
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
||||
RH-Acked-by: John Linville <linville@redhat.com>
|
||||
|
||||
Inform the RDMA driver to stop/start during suspend/resume. The
|
||||
RDMA driver needs to stop and start just like error recovery.
|
||||
|
||||
Signed-off-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
|
||||
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
(cherry picked from commit 6a68749dbd777b832e1d84265bd6d8b39d1843ac)
|
||||
Bugzilla: 1773724
|
||||
Build Info: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=25154853
|
||||
Tested: simple boot test
|
||||
Signed-off-by: Jonathan Toppins <jtoppins@redhat.com>
|
||||
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
|
||||
---
|
||||
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.c
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:23.130445043 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.c 2020-02-06 16:23:23.267443785 +0100
|
||||
@@ -11929,6 +11929,7 @@
|
||||
int rc = 0;
|
||||
|
||||
rtnl_lock();
|
||||
+ bnxt_ulp_stop(bp);
|
||||
if (netif_running(dev)) {
|
||||
netif_device_detach(dev);
|
||||
rc = bnxt_close(dev);
|
||||
@@ -11963,6 +11964,7 @@
|
||||
}
|
||||
|
||||
resume_exit:
|
||||
+ bnxt_ulp_start(bp, rc);
|
||||
rtnl_unlock();
|
||||
return rc;
|
||||
}
|
@ -0,0 +1,13 @@
|
||||
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.h
|
||||
===================================================================
|
||||
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:26:49.709548812 +0100
|
||||
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.h 2020-02-06 16:57:36.951721112 +0100
|
||||
@@ -12,7 +12,7 @@
|
||||
#define BNXT_H
|
||||
|
||||
#define DRV_MODULE_NAME "bnxt_en"
|
||||
-#define DRV_MODULE_VERSION "1.10.0"
|
||||
+#define DRV_MODULE_VERSION "1.10.0_dup8.1"
|
||||
|
||||
#define DRV_VER_MAJ 1
|
||||
#define DRV_VER_MIN 10
|
@ -0,0 +1,467 @@
|
||||
%define kmod_name bnxt_en
|
||||
%define kmod_vendor redhat
|
||||
%define kmod_driver_version 1.10.0_dup8.1
|
||||
%define kmod_driver_epoch %{nil}
|
||||
%define kmod_rpm_release 2
|
||||
%define kmod_kernel_version 4.18.0-147.el8
|
||||
%define kmod_kernel_version_min %{nil}
|
||||
%define kmod_kernel_version_dep %{nil}
|
||||
%define kmod_kbuild_dir drivers/net/ethernet/broadcom/bnxt
|
||||
%define kmod_dependencies %{nil}
|
||||
%define kmod_dist_build_deps %{nil}
|
||||
%define kmod_build_dependencies %{nil}
|
||||
%define kmod_devel_package 0
|
||||
%define kmod_install_path extra/kmod-redhat-bnxt_en
|
||||
%define kernel_pkg kernel
|
||||
%define kernel_devel_pkg kernel-devel
|
||||
%define kernel_modules_pkg kernel-modules
|
||||
|
||||
%{!?dist: %define dist .el8_1}
|
||||
%{!?make_build: %define make_build make}
|
||||
|
||||
%if "%{kmod_kernel_version_dep}" == ""
|
||||
%define kmod_kernel_version_dep %{kmod_kernel_version}
|
||||
%endif
|
||||
|
||||
%if "%{kmod_dist_build_deps}" == ""
|
||||
%if (0%{?rhel} > 7) || (0%{?centos} > 7)
|
||||
%define kmod_dist_build_deps redhat-rpm-config kernel-abi-whitelists elfutils-libelf-devel kernel-rpm-macros kmod
|
||||
%else
|
||||
%define kmod_dist_build_deps redhat-rpm-config kernel-abi-whitelists
|
||||
%endif
|
||||
%endif
|
||||
|
||||
Source0: %{kmod_name}-%{kmod_vendor}-%{kmod_driver_version}.tar.bz2
|
||||
# Source code patches
|
||||
Patch0: 0001-netdrv-linux-dim-Fix-overflow-in-dim-calculation.patch
|
||||
Patch1: 0002-netdrv-bnxt_en-Add-bnxt_en-initial-port-params-table.patch
|
||||
Patch2: 0003-netdrv-revert-devlink-Add-a-generic-wake_on_lan-port.patch
|
||||
Patch3: 0004-netdrv-bnxt-add-missing-net-devlink.h-include.patch
|
||||
Patch4: 0005-netdrv-bnxt-set-devlink-port-attrs-properly.patch
|
||||
Patch5: 0006-netdrv-bnxt-call-devlink_port_type_eth_set-before-po.patch
|
||||
Patch6: 0007-netdrv-bnxt-set-devlink-port-type-after-registration.patch
|
||||
Patch7: 0009-netdrv-bnx2x-Mark-expected-switch-fall-throughs.patch
|
||||
Patch8: 0010-netdrv-bnx2x-Mark-expected-switch-fall-thoughs.patch
|
||||
Patch9: 0011-netdrv-bnxt_en-Fix-firmware-signaled-resource-change.patch
|
||||
Patch10: 0012-netdrv-cross-tree-phase-out-dma_zalloc_coherent.patch
|
||||
Patch11: 0013-netdrv-bnxt-Implement-ndo_get_port_parent_id.patch
|
||||
Patch12: 0016-netdrv-bnxt-move-bp-switch_id-initialization-to-PF-p.patch
|
||||
Patch13: 0018-netdrv-bnxt_en-Update-firmware-interface-to-1.10.0.6.patch
|
||||
Patch14: 0019-netdrv-bnxt_en-Refactor-bnxt_alloc_stats.patch
|
||||
Patch15: 0020-netdrv-bnxt_en-Add-support-for-PCIe-statistics.patch
|
||||
Patch16: 0021-netdrv-bnxt_en-Check-new-firmware-capability-to-disp.patch
|
||||
Patch17: 0022-netdrv-bnxt_en-Read-package-version-from-firmware.patch
|
||||
Patch18: 0023-netdrv-bnxt_en-read-the-clause-type-from-the-PHY-ID.patch
|
||||
Patch19: 0024-netdrv-bnxt_en-Separate-RDMA-MR-AH-context-allocatio.patch
|
||||
Patch20: 0025-netdrv-bnxt_en-Query-firmware-capability-to-support-.patch
|
||||
Patch21: 0026-netdrv-bnxt_en-Add-support-for-aRFS-on-57500-chips.patch
|
||||
Patch22: 0027-netdrv-bnxt_en-Device-serial-number-is-supported-onl.patch
|
||||
Patch23: 0028-netdrv-bnxt_en-rename-some-xdp-functions.patch
|
||||
Patch24: 0029-netdrv-bnxt_en-Refactor-__bnxt_xmit_xdp.patch
|
||||
Patch25: 0030-netdrv-bnxt_en-optimized-XDP_REDIRECT-support.patch
|
||||
Patch26: 0031-netdrv-bnxt_en-add-page_pool-support.patch
|
||||
Patch27: 0032-netdrv-bnxt_en-Add-page_pool_destroy-during-RX-ring-.patch
|
||||
Patch28: 0033-netdrv-bnxt_en-Fix-VNIC-accounting-when-enabling-aRF.patch
|
||||
Patch29: 0034-netdrv-bnxt_en-Fix-VNIC-clearing-logic-for-57500-chi.patch
|
||||
Patch30: 0035-netdrv-bnxt_en-Improve-RX-doorbell-sequence.patch
|
||||
Patch31: 0036-netdrv-bnxt_en-Fix-handling-FRAG_ERR-when-NVM_INSTAL.patch
|
||||
Patch32: 0037-netdrv-bnxt_en-Use-correct-src_fid-to-determine-dire.patch
|
||||
Patch33: 0038-netdrv-bnxt_en-Fix-to-include-flow-direction-in-L2-k.patch
|
||||
Patch34: 0039-netdrv-bnxt_en-Suppress-HWRM-errors-for-HWRM_NVM_GET.patch
|
||||
Patch35: 0040-netdrv-bnxt_en-Update-firmware-interface-spec.-to-1..patch
|
||||
Patch36: 0041-netdrv-bnxt_en-Add-TPA-structure-definitions-for-BCM.patch
|
||||
Patch37: 0042-netdrv-bnxt_en-Refactor-TPA-logic.patch
|
||||
Patch38: 0043-netdrv-bnxt_en-Expand-bnxt_tpa_info-struct-to-suppor.patch
|
||||
Patch39: 0044-netdrv-bnxt_en-Handle-standalone-RX_AGG-completions.patch
|
||||
Patch40: 0045-netdrv-bnxt_en-Refactor-tunneled-hardware-GRO-logic.patch
|
||||
Patch41: 0046-netdrv-bnxt_en-Set-TPA-GRO-mode-flags-on-57500-chips.patch
|
||||
Patch42: 0047-netdrv-bnxt_en-Add-fast-path-logic-for-TPA-on-57500-.patch
|
||||
Patch43: 0048-netdrv-bnxt_en-Add-TPA-ID-mapping-logic-for-57500-ch.patch
|
||||
Patch44: 0049-netdrv-bnxt_en-Add-hardware-GRO-setup-function-for-5.patch
|
||||
Patch45: 0050-netdrv-bnxt_en-Refactor-ethtool-ring-statistics-logi.patch
|
||||
Patch46: 0051-netdrv-bnxt_en-Allocate-the-larger-per-ring-statisti.patch
|
||||
Patch47: 0052-netdrv-bnxt_en-Support-TPA-counters-on-57500-chips.patch
|
||||
Patch48: 0053-netdrv-bnxt_en-Refactor-bnxt_init_one-and-turn-on-TP.patch
|
||||
Patch49: 0054-netdrv-bnxt_en-Support-all-variants-of-the-5750X-chi.patch
|
||||
Patch50: 0055-netdrv-bnxt_en-Add-PCI-IDs-for-57500-series-NPAR-dev.patch
|
||||
Patch51: 0056-netdrv-bnxt-no-need-to-check-return-value-of-debugfs.patch
|
||||
Patch52: 0057-netdrv-bnxt_en-Fix-allocation-of-zero-statistics-blo.patch
|
||||
Patch53: 0058-netdrv-bnxt_en-Use-a-common-function-to-print-the-sa.patch
|
||||
Patch54: 0059-netdrv-bnxt_en-Remove-the-1-error-return-code-from-b.patch
|
||||
Patch55: 0060-netdrv-bnxt_en-Convert-error-code-in-firmware-messag.patch
|
||||
Patch56: 0061-netdrv-bnxt_en-Simplify-error-checking-in-the-SR-IOV.patch
|
||||
Patch57: 0062-netdrv-bnxt_en-Suppress-all-error-messages-in-hwrm_d.patch
|
||||
Patch58: 0063-netdrv-bnxt_en-Prepare-bnxt_init_one-to-be-called-mu.patch
|
||||
Patch59: 0064-netdrv-bnxt_en-Refactor-bnxt_sriov_enable.patch
|
||||
Patch60: 0065-netdrv-bnxt_en-Register-buffers-for-VFs-before-reser.patch
|
||||
Patch61: 0066-netdrv-bnxt_en-Handle-firmware-reset-status-during-I.patch
|
||||
Patch62: 0067-netdrv-bnxt_en-Discover-firmware-error-recovery-capa.patch
|
||||
Patch63: 0068-netdrv-bnxt_en-Pre-map-the-firmware-health-monitorin.patch
|
||||
Patch64: 0069-netdrv-bnxt_en-Enable-health-monitoring.patch
|
||||
Patch65: 0070-netdrv-bnxt_en-Add-BNXT_STATE_IN_FW_RESET-state.patch
|
||||
Patch66: 0071-netdrv-bnxt_en-Add-new-FW-devlink_health_reporter.patch
|
||||
Patch67: 0072-netdrv-bnxt_en-Handle-RESET_NOTIFY-async-event-from-.patch
|
||||
Patch68: 0073-netdrv-bnxt_en-Handle-firmware-reset.patch
|
||||
Patch69: 0074-netdrv-bnxt_en-Add-devlink-health-reset-reporter.patch
|
||||
Patch70: 0075-netdrv-bnxt_en-Retain-user-settings-on-a-VF-after-RE.patch
|
||||
Patch71: 0076-netdrv-bnxt_en-Do-not-send-firmware-messages-if-firm.patch
|
||||
Patch72: 0077-netdrv-bnxt_en-Add-RESET_FW-state-logic-to-bnxt_fw_r.patch
|
||||
Patch73: 0078-netdrv-bnxt_en-Add-bnxt_fw_exception-to-handle-fatal.patch
|
||||
Patch74: 0079-netdrv-bnxt_en-Add-FW-fatal-devlink_health_reporter.patch
|
||||
Patch75: 0080-netdrv-bnxt_en-Fix-compile-error-regression-with-CON.patch
|
||||
Patch76: 0081-netdrv-bnxt_en-Don-t-proceed-in-.ndo_set_rx_mode-whe.patch
|
||||
Patch77: 0082-netdrv-bnxt_en-Increase-timeout-for-HWRM_DBG_COREDUM.patch
|
||||
Patch78: 0083-netdrv-bnxt_en-Update-firmware-interface-spec.-to-1..patch
|
||||
Patch79: 0084-netdrv-bnxt_en-Add-a-new-BNXT_FW_RESET_STATE_POLL_FW.patch
|
||||
Patch80: 0085-netdrv-bnxt_en-Fix-the-size-of-devlink-MSIX-paramete.patch
|
||||
Patch81: 0086-netdrv-bnxt_en-Fix-devlink-NVRAM-related-byte-order-.patch
|
||||
Patch82: 0087-netdrv-bnxt_en-Adjust-the-time-to-wait-before-pollin.patch
|
||||
Patch83: 0088-netdrv-bnxt_en-Minor-formatting-changes-in-FW-devlin.patch
|
||||
Patch84: 0089-netdrv-bnxt_en-Avoid-disabling-pci-device-in-bnxt_re.patch
|
||||
Patch85: 0090-netdrv-broadcom-bnxt-Fix-use-true-false-for-bool.patch
|
||||
Patch86: 0091-netdrv-bnxt_en-Add-support-to-invoke-OP-TEE-API-to-r.patch
|
||||
Patch87: 0092-netdrv-bnxt_en-Add-support-to-collect-crash-dump-via.patch
|
||||
Patch88: 0093-netdrv-bnxt-Avoid-logging-an-unnecessary-message-whe.patch
|
||||
Patch89: 0094-netdrv-bnxt_en-Improve-bnxt_ulp_stop-bnxt_ulp_start-.patch
|
||||
Patch90: 0095-netdrv-bnxt_en-Call-bnxt_ulp_stop-bnxt_ulp_start-dur.patch
|
||||
Patch91: 0096-netdrv-bnxt_en-Call-bnxt_ulp_stop-bnxt_ulp_start-dur.patch
|
||||
Patch92: 9000-bump-driver-version.patch
|
||||
|
||||
%define findpat %( echo "%""P" )
|
||||
%define __find_requires /usr/lib/rpm/redhat/find-requires.ksyms
|
||||
%define __find_provides /usr/lib/rpm/redhat/find-provides.ksyms %{kmod_name} %{?epoch:%{epoch}:}%{version}-%{release}
|
||||
%define sbindir %( if [ -d "/sbin" -a \! -h "/sbin" ]; then echo "/sbin"; else echo %{_sbindir}; fi )
|
||||
%define dup_state_dir %{_localstatedir}/lib/rpm-state/kmod-dups
|
||||
%define kver_state_dir %{dup_state_dir}/kver
|
||||
%define kver_state_file %{kver_state_dir}/%{kmod_kernel_version}.%(arch)
|
||||
%define dup_module_list %{dup_state_dir}/rpm-kmod-%{kmod_name}-modules
|
||||
|
||||
Name: kmod-redhat-bnxt_en
|
||||
Version: %{kmod_driver_version}
|
||||
Release: %{kmod_rpm_release}%{?dist}
|
||||
%if "%{kmod_driver_epoch}" != ""
|
||||
Epoch: %{kmod_driver_epoch}
|
||||
%endif
|
||||
Summary: bnxt_en kernel module for Driver Update Program
|
||||
Group: System/Kernel
|
||||
License: GPLv2
|
||||
URL: https://www.kernel.org/
|
||||
BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
|
||||
BuildRequires: %kernel_devel_pkg = %kmod_kernel_version
|
||||
%if "%{kmod_dist_build_deps}" != ""
|
||||
BuildRequires: %{kmod_dist_build_deps}
|
||||
%endif
|
||||
ExclusiveArch: x86_64
|
||||
%global kernel_source() /usr/src/kernels/%{kmod_kernel_version}.$(arch)
|
||||
|
||||
%global _use_internal_dependency_generator 0
|
||||
%if "%{?kmod_kernel_version_min}" != ""
|
||||
Provides: %kernel_modules_pkg >= %{kmod_kernel_version_min}.%{_target_cpu}
|
||||
%else
|
||||
Provides: %kernel_modules_pkg = %{kmod_kernel_version_dep}.%{_target_cpu}
|
||||
%endif
|
||||
Provides: kmod-%{kmod_name} = %{?epoch:%{epoch}:}%{version}-%{release}
|
||||
Requires(post): %{sbindir}/weak-modules
|
||||
Requires(postun): %{sbindir}/weak-modules
|
||||
Requires: kernel >= 4.18.0-147.el8
|
||||
|
||||
Requires: kernel < 4.18.0-148.el8
|
||||
%if 0
|
||||
Requires: firmware(%{kmod_name}) = ENTER_FIRMWARE_VERSION
|
||||
%endif
|
||||
%if "%{kmod_build_dependencies}" != ""
|
||||
BuildRequires: %{kmod_build_dependencies}
|
||||
%endif
|
||||
%if "%{kmod_dependencies}" != ""
|
||||
Requires: %{kmod_dependencies}
|
||||
%endif
|
||||
# if there are multiple kmods for the same driver from different vendors,
|
||||
# they should conflict with each other.
|
||||
Conflicts: kmod-%{kmod_name}
|
||||
|
||||
%description
|
||||
bnxt_en kernel module for Driver Update Program
|
||||
|
||||
%if 0
|
||||
|
||||
%package -n kmod-redhat-bnxt_en-firmware
|
||||
Version: ENTER_FIRMWARE_VERSION
|
||||
Summary: bnxt_en firmware for Driver Update Program
|
||||
Provides: firmware(%{kmod_name}) = ENTER_FIRMWARE_VERSION
|
||||
%if "%{kmod_kernel_version_min}" != ""
|
||||
Provides: %kernel_modules_pkg >= %{kmod_kernel_version_min}.%{_target_cpu}
|
||||
%else
|
||||
Provides: %kernel_modules_pkg = %{kmod_kernel_version_dep}.%{_target_cpu}
|
||||
%endif
|
||||
%description -n kmod-redhat-bnxt_en-firmware
|
||||
bnxt_en firmware for Driver Update Program
|
||||
|
||||
|
||||
%files -n kmod-redhat-bnxt_en-firmware
|
||||
%defattr(644,root,root,755)
|
||||
%{FIRMWARE_FILES}
|
||||
|
||||
%endif
|
||||
|
||||
# Development package
|
||||
%if 0%{kmod_devel_package}
|
||||
%package -n kmod-redhat-bnxt_en-devel
|
||||
Version: %{kmod_driver_version}
|
||||
Requires: kernel >= 4.18.0-147.el8
|
||||
|
||||
Requires: kernel < 4.18.0-148.el8
|
||||
Summary: bnxt_en development files for Driver Update Program
|
||||
|
||||
%description -n kmod-redhat-bnxt_en-devel
|
||||
bnxt_en development files for Driver Update Program
|
||||
|
||||
|
||||
%files -n kmod-redhat-bnxt_en-devel
|
||||
%defattr(644,root,root,755)
|
||||
/usr/share/kmod-%{kmod_vendor}-%{kmod_name}/Module.symvers
|
||||
%endif
|
||||
|
||||
%post
|
||||
modules=( $(find /lib/modules/%{kmod_kernel_version}.%(arch)/%{kmod_install_path} | grep '\.ko$') )
|
||||
printf '%s\n' "${modules[@]}" | %{sbindir}/weak-modules --add-modules --no-initramfs
|
||||
|
||||
mkdir -p "%{kver_state_dir}"
|
||||
touch "%{kver_state_file}"
|
||||
|
||||
exit 0
|
||||
|
||||
%posttrans
|
||||
# We have to re-implement part of weak-modules here because it doesn't allow
|
||||
# calling initramfs regeneration separately
|
||||
if [ -f "%{kver_state_file}" ]; then
|
||||
kver_base="%{kmod_kernel_version_dep}"
|
||||
kvers=$(ls -d "/lib/modules/${kver_base%%.*}"*)
|
||||
|
||||
for k_dir in $kvers; do
|
||||
k="${k_dir#/lib/modules/}"
|
||||
|
||||
tmp_initramfs="/boot/initramfs-$k.tmp"
|
||||
dst_initramfs="/boot/initramfs-$k.img"
|
||||
|
||||
# The same check as in weak-modules: we assume that the kernel present
|
||||
# if the symvers file exists.
|
||||
if [ -e "/boot/symvers-$k.gz" ]; then
|
||||
/usr/bin/dracut -f "$tmp_initramfs" "$k" || exit 1
|
||||
cmp -s "$tmp_initramfs" "$dst_initramfs"
|
||||
if [ "$?" = 1 ]; then
|
||||
mv "$tmp_initramfs" "$dst_initramfs"
|
||||
else
|
||||
rm -f "$tmp_initramfs"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
rm -f "%{kver_state_file}"
|
||||
rmdir "%{kver_state_dir}" 2> /dev/null
|
||||
fi
|
||||
|
||||
rmdir "%{dup_state_dir}" 2> /dev/null
|
||||
|
||||
exit 0
|
||||
|
||||
%preun
|
||||
if rpm -q --filetriggers kmod 2> /dev/null| grep -q "Trigger for weak-modules call on kmod removal"; then
|
||||
mkdir -p "%{kver_state_dir}"
|
||||
touch "%{kver_state_file}"
|
||||
fi
|
||||
|
||||
mkdir -p "%{dup_state_dir}"
|
||||
rpm -ql kmod-redhat-bnxt_en-%{kmod_driver_version}-%{kmod_rpm_release}%{?dist}.$(arch) | \
|
||||
grep '\.ko$' > "%{dup_module_list}"
|
||||
|
||||
%postun
|
||||
if rpm -q --filetriggers kmod 2> /dev/null| grep -q "Trigger for weak-modules call on kmod removal"; then
|
||||
initramfs_opt="--no-initramfs"
|
||||
else
|
||||
initramfs_opt=""
|
||||
fi
|
||||
|
||||
modules=( $(cat "%{dup_module_list}") )
|
||||
rm -f "%{dup_module_list}"
|
||||
printf '%s\n' "${modules[@]}" | %{sbindir}/weak-modules --remove-modules $initramfs_opt
|
||||
|
||||
rmdir "%{dup_state_dir}" 2> /dev/null
|
||||
|
||||
exit 0
|
||||
|
||||
%files
|
||||
%defattr(644,root,root,755)
|
||||
/lib/modules/%{kmod_kernel_version}.%(arch)
|
||||
/etc/depmod.d/%{kmod_name}.conf
|
||||
/usr/share/doc/kmod-%{kmod_name}/greylist.txt
|
||||
|
||||
%prep
|
||||
%setup -n %{kmod_name}-%{kmod_vendor}-%{kmod_driver_version}
|
||||
|
||||
%patch0 -p1
|
||||
%patch1 -p1
|
||||
%patch2 -p1
|
||||
%patch3 -p1
|
||||
%patch4 -p1
|
||||
%patch5 -p1
|
||||
%patch6 -p1
|
||||
%patch7 -p1
|
||||
%patch8 -p1
|
||||
%patch9 -p1
|
||||
%patch10 -p1
|
||||
%patch11 -p1
|
||||
%patch12 -p1
|
||||
%patch13 -p1
|
||||
%patch14 -p1
|
||||
%patch15 -p1
|
||||
%patch16 -p1
|
||||
%patch17 -p1
|
||||
%patch18 -p1
|
||||
%patch19 -p1
|
||||
%patch20 -p1
|
||||
%patch21 -p1
|
||||
%patch22 -p1
|
||||
%patch23 -p1
|
||||
%patch24 -p1
|
||||
%patch25 -p1
|
||||
%patch26 -p1
|
||||
%patch27 -p1
|
||||
%patch28 -p1
|
||||
%patch29 -p1
|
||||
%patch30 -p1
|
||||
%patch31 -p1
|
||||
%patch32 -p1
|
||||
%patch33 -p1
|
||||
%patch34 -p1
|
||||
%patch35 -p1
|
||||
%patch36 -p1
|
||||
%patch37 -p1
|
||||
%patch38 -p1
|
||||
%patch39 -p1
|
||||
%patch40 -p1
|
||||
%patch41 -p1
|
||||
%patch42 -p1
|
||||
%patch43 -p1
|
||||
%patch44 -p1
|
||||
%patch45 -p1
|
||||
%patch46 -p1
|
||||
%patch47 -p1
|
||||
%patch48 -p1
|
||||
%patch49 -p1
|
||||
%patch50 -p1
|
||||
%patch51 -p1
|
||||
%patch52 -p1
|
||||
%patch53 -p1
|
||||
%patch54 -p1
|
||||
%patch55 -p1
|
||||
%patch56 -p1
|
||||
%patch57 -p1
|
||||
%patch58 -p1
|
||||
%patch59 -p1
|
||||
%patch60 -p1
|
||||
%patch61 -p1
|
||||
%patch62 -p1
|
||||
%patch63 -p1
|
||||
%patch64 -p1
|
||||
%patch65 -p1
|
||||
%patch66 -p1
|
||||
%patch67 -p1
|
||||
%patch68 -p1
|
||||
%patch69 -p1
|
||||
%patch70 -p1
|
||||
%patch71 -p1
|
||||
%patch72 -p1
|
||||
%patch73 -p1
|
||||
%patch74 -p1
|
||||
%patch75 -p1
|
||||
%patch76 -p1
|
||||
%patch77 -p1
|
||||
%patch78 -p1
|
||||
%patch79 -p1
|
||||
%patch80 -p1
|
||||
%patch81 -p1
|
||||
%patch82 -p1
|
||||
%patch83 -p1
|
||||
%patch84 -p1
|
||||
%patch85 -p1
|
||||
%patch86 -p1
|
||||
%patch87 -p1
|
||||
%patch88 -p1
|
||||
%patch89 -p1
|
||||
%patch90 -p1
|
||||
%patch91 -p1
|
||||
%patch92 -p1
|
||||
set -- *
|
||||
mkdir source
|
||||
mv "$@" source/
|
||||
mkdir obj
|
||||
|
||||
%build
|
||||
rm -rf obj
|
||||
cp -r source obj
|
||||
|
||||
PWD_PATH="$PWD"
|
||||
%if "%{workaround_no_pwd_rel_path}" != "1"
|
||||
PWD_PATH=$(realpath --relative-to="%{kernel_source}" . 2>/dev/null || echo "$PWD")
|
||||
%endif
|
||||
%{make_build} -C %{kernel_source} V=1 M="$PWD_PATH/obj/%{kmod_kbuild_dir}" \
|
||||
NOSTDINC_FLAGS="-I$PWD_PATH/obj/include -I$PWD_PATH/obj/include/uapi" \
|
||||
EXTRA_CFLAGS="%{nil}" \
|
||||
%{nil}
|
||||
# mark modules executable so that strip-to-file can strip them
|
||||
find obj/%{kmod_kbuild_dir} -name "*.ko" -type f -exec chmod u+x '{}' +
|
||||
|
||||
whitelist="/lib/modules/kabi-current/kabi_whitelist_%{_target_cpu}"
|
||||
for modules in $( find obj/%{kmod_kbuild_dir} -name "*.ko" -type f -printf "%{findpat}\n" | sed 's|\.ko$||' | sort -u ) ; do
|
||||
# update depmod.conf
|
||||
module_weak_path=$(echo "$modules" | sed 's/[\/]*[^\/]*$//')
|
||||
if [ -z "$module_weak_path" ]; then
|
||||
module_weak_path=%{name}
|
||||
else
|
||||
module_weak_path=%{name}/$module_weak_path
|
||||
fi
|
||||
echo "override $(echo $modules | sed 's/.*\///')" \
|
||||
"$(echo "%{kmod_kernel_version_dep}" |
|
||||
sed 's/\.[^\.]*$//;
|
||||
s/\([.+?^$\/\\|()\[]\|\]\)/\\\0/g').*" \
|
||||
"weak-updates/$module_weak_path" >> source/depmod.conf
|
||||
|
||||
# update greylist
|
||||
nm -u obj/%{kmod_kbuild_dir}/$modules.ko | sed 's/.*U //' | sed 's/^\.//' | sort -u | while read -r symbol; do
|
||||
grep -q "^\s*$symbol\$" $whitelist || echo "$symbol" >> source/greylist
|
||||
done
|
||||
done
|
||||
sort -u source/greylist | uniq > source/greylist.txt
|
||||
|
||||
%install
|
||||
export INSTALL_MOD_PATH=$RPM_BUILD_ROOT
|
||||
export INSTALL_MOD_DIR=%{kmod_install_path}
|
||||
PWD_PATH="$PWD"
|
||||
%if "%{workaround_no_pwd_rel_path}" != "1"
|
||||
PWD_PATH=$(realpath --relative-to="%{kernel_source}" . 2>/dev/null || echo "$PWD")
|
||||
%endif
|
||||
make -C %{kernel_source} modules_install \
|
||||
M=$PWD_PATH/obj/%{kmod_kbuild_dir}
|
||||
# Cleanup unnecessary kernel-generated module dependency files.
|
||||
find $INSTALL_MOD_PATH/lib/modules -iname 'modules.*' -exec rm {} \;
|
||||
|
||||
install -m 644 -D source/depmod.conf $RPM_BUILD_ROOT/etc/depmod.d/%{kmod_name}.conf
|
||||
install -m 644 -D source/greylist.txt $RPM_BUILD_ROOT/usr/share/doc/kmod-%{kmod_name}/greylist.txt
|
||||
%if 0
|
||||
%{FIRMWARE_FILES_INSTALL}
|
||||
%endif
|
||||
%if 0%{kmod_devel_package}
|
||||
install -m 644 -D $PWD/obj/%{kmod_kbuild_dir}/Module.symvers $RPM_BUILD_ROOT/usr/share/kmod-%{kmod_vendor}-%{kmod_name}/Module.symvers
|
||||
%endif
|
||||
|
||||
%clean
|
||||
rm -rf $RPM_BUILD_ROOT
|
||||
|
||||
%changelog
|
||||
* Wed Feb 19 2020 Eugene Syromiatnikov <esyr@redhat.com> 1.10.0_dup8.1-2
|
||||
- Bump release.
|
||||
|
||||
* Tue Feb 18 2020 Eugene Syromiatnikov <esyr@redhat.com> 1.10.0_dup8.1-1
|
||||
- 9158390ccae759c2c0221de6e0c9541375a480f6
|
||||
- bnxt_en kernel module for Driver Update Program
|
||||
- Resolves: #bz1802054
|
Loading…
Reference in new issue