diff mbox series

[net-next,2/2] net: hns3: support debugfs for wake on lan

Message ID 20230104013405.65433-3-lanhao@huawei.com (mailing list archive)
State Changes Requested
Delegated to: Netdev Maintainers
Headers show
Series net: hns3: support wake on lan for hns3 | expand

Checks

Context Check Description
netdev/tree_selection success Clearly marked for net-next
netdev/fixes_present success Fixes tag not required for -next series
netdev/subject_prefix success Link
netdev/cover_letter success Series has a cover letter
netdev/patch_count success Link
netdev/header_inline success No static functions without inline keyword in header files
netdev/build_32bit success Errors and warnings before: 1 this patch: 1
netdev/cc_maintainers warning 1 maintainers not CCed: huangguangbin2@huawei.com
netdev/build_clang success Errors and warnings before: 0 this patch: 0
netdev/module_param success Was 0 now: 0
netdev/verify_signedoff success Signed-off-by tag matches author and committer
netdev/check_selftest success No net selftest shell script
netdev/verify_fixes success No Fixes tag
netdev/build_allmodconfig_warn success Errors and warnings before: 5 this patch: 5
netdev/checkpatch success total: 0 errors, 0 warnings, 0 checks, 103 lines checked
netdev/kdoc success Errors and warnings before: 0 this patch: 0
netdev/source_inline success Was 0 now: 0

Commit Message

Hao Lan Jan. 4, 2023, 1:34 a.m. UTC
Implement debugfs for wake on lan to hns3. The debugfs
support verify the firmware wake on lan configuration.

Signed-off-by: Hao Lan <lanhao@huawei.com>
---
 drivers/net/ethernet/hisilicon/hns3/hnae3.h   |  1 +
 .../ethernet/hisilicon/hns3/hns3_debugfs.c    | 10 +++
 .../hisilicon/hns3/hns3pf/hclge_debugfs.c     | 62 +++++++++++++++++++
 3 files changed, 73 insertions(+)

Comments

Andrew Lunn Jan. 4, 2023, 2:12 a.m. UTC | #1
On Wed, Jan 04, 2023 at 09:34:05AM +0800, Hao Lan wrote:
> Implement debugfs for wake on lan to hns3. The debugfs
> support verify the firmware wake on lan configuration.

Is this actually needed, now you have verified the firmware? I can see
it being a useful development tool, but now the feature is finished,
the firmware is bug free, it is of no real use. Everybody will just
use ethtool.

    Andrew
diff mbox series

Patch

diff --git a/drivers/net/ethernet/hisilicon/hns3/hnae3.h b/drivers/net/ethernet/hisilicon/hns3/hnae3.h
index 312ac1cccd39..939308f8f472 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hnae3.h
+++ b/drivers/net/ethernet/hisilicon/hns3/hnae3.h
@@ -321,6 +321,7 @@  enum hnae3_dbg_cmd {
 	HNAE3_DBG_CMD_UMV_INFO,
 	HNAE3_DBG_CMD_PAGE_POOL_INFO,
 	HNAE3_DBG_CMD_COAL_INFO,
+	HNAE3_DBG_CMD_WOL_INFO,
 	HNAE3_DBG_CMD_UNKNOWN,
 };
 
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_debugfs.c b/drivers/net/ethernet/hisilicon/hns3/hns3_debugfs.c
index 66feb23f7b7b..679a39aab801 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3_debugfs.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3_debugfs.c
@@ -357,6 +357,13 @@  static struct hns3_dbg_cmd_info hns3_dbg_cmd[] = {
 		.buf_len = HNS3_DBG_READ_LEN_1MB,
 		.init = hns3_dbg_common_file_init,
 	},
+	{
+		.name = "wol_info",
+		.cmd = HNAE3_DBG_CMD_WOL_INFO,
+		.dentry = HNS3_DBG_DENTRY_COMMON,
+		.buf_len = HNS3_DBG_READ_LEN,
+		.init = hns3_dbg_common_file_init,
+	},
 };
 
 static struct hns3_dbg_cap_info hns3_dbg_cap[] = {
@@ -408,6 +415,9 @@  static struct hns3_dbg_cap_info hns3_dbg_cap[] = {
 	}, {
 		.name = "support lane num",
 		.cap_bit = HNAE3_DEV_SUPPORT_LANE_NUM_B,
+	}, {
+		.name = "support wake on lan",
+		.cap_bit = HNAE3_DEV_SUPPORT_WOL_B,
 	}
 };
 
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.c
index 142415c84c6b..fdbf031bcd49 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.c
@@ -2394,6 +2394,64 @@  static int hclge_dbg_dump_mac_mc(struct hclge_dev *hdev, char *buf, int len)
 	return 0;
 }
 
+static void hclge_dump_wol_mode(u32 mode, char *buf, int len, int *pos)
+{
+	if (mode & HCLGE_WOL_PHY)
+		*pos += scnprintf(buf + *pos, len - *pos, "  [p]phy\n");
+
+	if (mode & HCLGE_WOL_UNICAST)
+		*pos += scnprintf(buf + *pos, len - *pos, "  [u]unicast\n");
+
+	if (mode & HCLGE_WOL_MULTICAST)
+		*pos += scnprintf(buf + *pos, len - *pos, "  [m]multicast\n");
+
+	if (mode & HCLGE_WOL_BROADCAST)
+		*pos += scnprintf(buf + *pos, len - *pos, "  [b]broadcast\n");
+
+	if (mode & HCLGE_WOL_ARP)
+		*pos += scnprintf(buf + *pos, len - *pos, "  [a]arp\n");
+
+	if (mode & HCLGE_WOL_MAGIC)
+		*pos += scnprintf(buf + *pos, len - *pos, "  [g]magic\n");
+
+	if (mode & HCLGE_WOL_MAGICSECURED)
+		*pos += scnprintf(buf + *pos, len - *pos,
+				 "  [s]magic secured\n");
+
+	if (mode & HCLGE_WOL_FILTER)
+		*pos += scnprintf(buf + *pos, len - *pos, "  [f]filter\n");
+}
+
+static int hclge_dbg_dump_wol_info(struct hclge_dev *hdev, char *buf, int len)
+{
+	u32 wol_supported;
+	int pos = 0;
+	u32 mode;
+
+	if (!hnae3_ae_dev_wol_supported(hdev->ae_dev)) {
+		pos += scnprintf(buf + pos, len - pos,
+				 "wake-on-lan is unsupported\n");
+		return 0;
+	}
+
+	pos += scnprintf(buf + pos, len - pos, "wake-on-lan mode:\n");
+	pos += scnprintf(buf + pos, len - pos, " supported:\n");
+	if (hclge_get_wol_supported_mode(hdev, &wol_supported))
+		return -EINVAL;
+
+	hclge_dump_wol_mode(wol_supported, buf, len, &pos);
+
+	pos += scnprintf(buf + pos, len - pos, " current:\n");
+	if (hclge_get_wol_cfg(hdev, &mode))
+		return -EINVAL;
+	if (mode)
+		hclge_dump_wol_mode(mode, buf, len, &pos);
+	else
+		pos += scnprintf(buf + pos, len - pos, "  [d]disabled\n");
+
+	return 0;
+}
+
 static const struct hclge_dbg_func hclge_dbg_cmd_func[] = {
 	{
 		.cmd = HNAE3_DBG_CMD_TM_NODES,
@@ -2543,6 +2601,10 @@  static const struct hclge_dbg_func hclge_dbg_cmd_func[] = {
 		.cmd = HNAE3_DBG_CMD_UMV_INFO,
 		.dbg_dump = hclge_dbg_dump_umv_info,
 	},
+	{
+		.cmd = HNAE3_DBG_CMD_WOL_INFO,
+		.dbg_dump = hclge_dbg_dump_wol_info,
+	},
 };
 
 int hclge_dbg_read_cmd(struct hnae3_handle *handle, enum hnae3_dbg_cmd cmd,