Blame SOURCES/0002-netdrv-bnxt_en-Add-bnxt_en-initial-port-params-table.patch

f95c89
From 467b7f37120a4e7b7583045ec83e549e7d01a28d Mon Sep 17 00:00:00 2001
f95c89
From: Petr Oros <poros@redhat.com>
f95c89
Date: Thu, 5 Sep 2019 10:00:57 -0400
f95c89
Subject: [PATCH 02/96] [netdrv] bnxt_en: Add bnxt_en initial port params table
f95c89
 and register it
f95c89
f95c89
Message-id: <8735851440fccbd92993e8958f70edb7811f4512.1567595345.git.poros@redhat.com>
f95c89
Patchwork-id: 270937
f95c89
O-Subject: [RHEL8.2 net PATCH 01/15] bnxt_en: Add bnxt_en initial port params table and register it
f95c89
Bugzilla: 1737133
f95c89
RH-Acked-by: Jonathan Toppins <jtoppins@redhat.com>
f95c89
RH-Acked-by: Neil Horman <nhorman@redhat.com>
f95c89
RH-Acked-by: John Linville <linville@redhat.com>
f95c89
RH-Acked-by: Ivan Vecera <ivecera@redhat.com>
f95c89
f95c89
Bugzilla: http://bugzilla.redhat.com/show_bug.cgi?id=1737133
f95c89
f95c89
Conflicts: \
f95c89
- Adjusted due to already aplied 7c62cfb8c5744b ("devlink: publish params
f95c89
  only after driver init is done")
f95c89
f95c89
Upstream commit(s):
f95c89
commit 782a624d00fa22e7499f5abc29747501ec671313
f95c89
Author: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
f95c89
Date:   Mon Jan 28 18:00:27 2019 +0530
f95c89
f95c89
    bnxt_en: Add bnxt_en initial port params table and register it
f95c89
f95c89
    Register devlink_port with devlink and create initial port params
f95c89
    table for bnxt_en. The table consists of a generic parameter:
f95c89
f95c89
    wake_on_lan: Enables Wake on Lan for this port when magic packet
f95c89
    is received with this port's MAC address using ACPI pattern.
f95c89
    If enabled, the controller asserts a wake pin upon reception of
f95c89
    WoL packet.  ACPI (Advanced Configuration and Power Interface) is
f95c89
    an industry specification for the efficient handling of power
f95c89
    consumption in desktop and mobile computers.
f95c89
f95c89
    v2->v3:
f95c89
    - Modify bnxt_dl_wol_validate(), to throw error message when user gives
f95c89
      value other than DEVLINK_PARAM_WAKE_MAGIC ot to disable WOL.
f95c89
    - Use netdev_err() instead of netdev_warn(), when devlink_port_register()
f95c89
      and devlink_port_params_register() returns error. Also, don't log rc
f95c89
      in this message.
f95c89
f95c89
    Cc: Michael Chan <michael.chan@broadcom.com>
f95c89
    Signed-off-by: Vasundhara Volam <vasundhara-v.volam@broadcom.com>
f95c89
    Signed-off-by: David S. Miller <davem@davemloft.net>
f95c89
f95c89
Signed-off-by: Petr Oros <poros@redhat.com>
f95c89
Signed-off-by: Timothy Redaelli <tredaelli@redhat.com>
f95c89
Signed-off-by: Bruno Meneguele <bmeneg@redhat.com>
f95c89
---
f95c89
 drivers/net/ethernet/broadcom/bnxt/bnxt.h         |  1 +
f95c89
 drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c | 44 ++++++++++++++++++++++-
f95c89
 drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.h |  1 +
f95c89
 3 files changed, 45 insertions(+), 1 deletion(-)
f95c89
f95c89
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt.h
f95c89
===================================================================
f95c89
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt.h	2020-02-06 16:22:57.596679422 +0100
f95c89
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt.h	2020-02-06 16:23:11.133555165 +0100
f95c89
@@ -1613,6 +1613,7 @@
f95c89
 
f95c89
 	/* devlink interface and vf-rep structs */
f95c89
 	struct devlink		*dl;
f95c89
+	struct devlink_port	dl_port;
f95c89
 	enum devlink_eswitch_mode eswitch_mode;
f95c89
 	struct bnxt_vf_rep	**vf_reps; /* array of vf-rep ptrs */
f95c89
 	u16			*cfa_code_map; /* cfa_code -> vf_idx map */
f95c89
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
f95c89
===================================================================
f95c89
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c	2020-02-06 16:22:57.596679422 +0100
f95c89
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c	2020-02-06 16:23:11.134555156 +0100
f95c89
@@ -37,6 +37,8 @@
f95c89
 	 NVM_OFF_MSIX_VEC_PER_PF_MIN, BNXT_NVM_SHARED_CFG, 7},
f95c89
 	{BNXT_DEVLINK_PARAM_ID_GRE_VER_CHECK, NVM_OFF_DIS_GRE_VER_CHECK,
f95c89
 	 BNXT_NVM_SHARED_CFG, 1},
f95c89
+
f95c89
+	{DEVLINK_PARAM_GENERIC_ID_WOL, NVM_OFF_WOL, BNXT_NVM_PORT_CFG, 1},
f95c89
 };
f95c89
 
f95c89
 static int bnxt_hwrm_nvm_req(struct bnxt *bp, u32 param_id, void *msg,
f95c89
@@ -70,7 +72,8 @@
f95c89
 	bytesize = roundup(nvm_param.num_bits, BITS_PER_BYTE) / BITS_PER_BYTE;
f95c89
 	switch (bytesize) {
f95c89
 	case 1:
f95c89
-		if (nvm_param.num_bits == 1)
f95c89
+		if (nvm_param.num_bits == 1 &&
f95c89
+		    nvm_param.id != DEVLINK_PARAM_GENERIC_ID_WOL)
f95c89
 			buf = &val->vbool;
f95c89
 		else
f95c89
 			buf = &val->vu8;
f95c89
@@ -164,6 +167,17 @@
f95c89
 	return 0;
f95c89
 }
f95c89
 
f95c89
+static int bnxt_dl_wol_validate(struct devlink *dl, u32 id,
f95c89
+				union devlink_param_value val,
f95c89
+				struct netlink_ext_ack *extack)
f95c89
+{
f95c89
+	if (val.vu8 && val.vu8 != DEVLINK_PARAM_WAKE_MAGIC) {
f95c89
+		NL_SET_ERR_MSG_MOD(extack, "WOL type is not supported");
f95c89
+		return -EINVAL;
f95c89
+	}
f95c89
+	return 0;
f95c89
+}
f95c89
+
f95c89
 static const struct devlink_param bnxt_dl_params[] = {
f95c89
 	DEVLINK_PARAM_GENERIC(ENABLE_SRIOV,
f95c89
 			      BIT(DEVLINK_PARAM_CMODE_PERMANENT),
f95c89
@@ -188,6 +202,12 @@
f95c89
 			     NULL),
f95c89
 };
f95c89
 
f95c89
+static const struct devlink_param bnxt_dl_port_params[] = {
f95c89
+	DEVLINK_PARAM_GENERIC(WOL, BIT(DEVLINK_PARAM_CMODE_PERMANENT),
f95c89
+			      bnxt_dl_nvm_param_get, bnxt_dl_nvm_param_set,
f95c89
+			      bnxt_dl_wol_validate),
f95c89
+};
f95c89
+
f95c89
 int bnxt_dl_register(struct bnxt *bp)
f95c89
 {
f95c89
 	struct devlink *dl;
f95c89
@@ -225,10 +245,29 @@
f95c89
 		goto err_dl_unreg;
f95c89
 	}
f95c89
 
f95c89
+	rc = devlink_port_register(dl, &bp->dl_port, bp->pf.port_id);
f95c89
+	if (rc) {
f95c89
+		netdev_err(bp->dev, "devlink_port_register failed");
f95c89
+		goto err_dl_param_unreg;
f95c89
+	}
f95c89
+	devlink_port_type_eth_set(&bp->dl_port, bp->dev);
f95c89
+
f95c89
+	rc = devlink_port_params_register(&bp->dl_port, bnxt_dl_port_params,
f95c89
+					  ARRAY_SIZE(bnxt_dl_port_params));
f95c89
+	if (rc) {
f95c89
+		netdev_err(bp->dev, "devlink_port_params_register failed");
f95c89
+		goto err_dl_port_unreg;
f95c89
+	}
f95c89
+
f95c89
 	devlink_params_publish(dl);
f95c89
 
f95c89
 	return 0;
f95c89
 
f95c89
+err_dl_port_unreg:
f95c89
+	devlink_port_unregister(&bp->dl_port);
f95c89
+err_dl_param_unreg:
f95c89
+	devlink_params_unregister(dl, bnxt_dl_params,
f95c89
+				  ARRAY_SIZE(bnxt_dl_params));
f95c89
 err_dl_unreg:
f95c89
 	devlink_unregister(dl);
f95c89
 err_dl_free:
f95c89
@@ -244,6 +283,9 @@
f95c89
 	if (!dl)
f95c89
 		return;
f95c89
 
f95c89
+	devlink_port_params_unregister(&bp->dl_port, bnxt_dl_port_params,
f95c89
+				       ARRAY_SIZE(bnxt_dl_port_params));
f95c89
+	devlink_port_unregister(&bp->dl_port);
f95c89
 	devlink_params_unregister(dl, bnxt_dl_params,
f95c89
 				  ARRAY_SIZE(bnxt_dl_params));
f95c89
 	devlink_unregister(dl);
f95c89
Index: src/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.h
f95c89
===================================================================
f95c89
--- src.orig/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.h	2020-02-06 16:22:57.596679422 +0100
f95c89
+++ src/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.h	2020-02-06 16:23:11.134555156 +0100
f95c89
@@ -35,6 +35,7 @@
f95c89
 
f95c89
 #define NVM_OFF_MSIX_VEC_PER_PF_MAX	108
f95c89
 #define NVM_OFF_MSIX_VEC_PER_PF_MIN	114
f95c89
+#define NVM_OFF_WOL			152
f95c89
 #define NVM_OFF_IGNORE_ARI		164
f95c89
 #define NVM_OFF_DIS_GRE_VER_CHECK	171
f95c89
 #define NVM_OFF_ENABLE_SRIOV		401