Skip to content

Commit d44a3ce

Browse files
Sudarsana Reddy Kallurudavem330
authored andcommitted
qede: Add support for reading the config id attributes.
Add driver support for dumping the config id attributes via ethtool dump interfaces. Signed-off-by: Sudarsana Reddy Kalluru <[email protected]> Signed-off-by: Ariel Elior <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 2d4c849 commit d44a3ce

File tree

2 files changed

+103
-0
lines changed

2 files changed

+103
-0
lines changed

drivers/net/ethernet/qlogic/qede/qede.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,19 @@ enum qede_flags_bit {
177177
QEDE_FLAGS_TX_TIMESTAMPING_EN
178178
};
179179

180+
#define QEDE_DUMP_MAX_ARGS 4
181+
enum qede_dump_cmd {
182+
QEDE_DUMP_CMD_NONE = 0,
183+
QEDE_DUMP_CMD_NVM_CFG,
184+
QEDE_DUMP_CMD_MAX
185+
};
186+
187+
struct qede_dump_info {
188+
enum qede_dump_cmd cmd;
189+
u8 num_args;
190+
u32 args[QEDE_DUMP_MAX_ARGS];
191+
};
192+
180193
struct qede_dev {
181194
struct qed_dev *cdev;
182195
struct net_device *ndev;
@@ -262,6 +275,7 @@ struct qede_dev {
262275
struct qede_rdma_dev rdma_info;
263276

264277
struct bpf_prog *xdp_prog;
278+
struct qede_dump_info dump_info;
265279
};
266280

267281
enum QEDE_STATE {

drivers/net/ethernet/qlogic/qede/qede_ethtool.c

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,9 @@
4848
{QEDE_RQSTAT_OFFSET(stat_name), QEDE_RQSTAT_STRING(stat_name)}
4949

5050
#define QEDE_SELFTEST_POLL_COUNT 100
51+
#define QEDE_DUMP_VERSION 0x1
52+
#define QEDE_DUMP_NVM_BUF_LEN 32
53+
#define QEDE_DUMP_NVM_ARG_COUNT 2
5154

5255
static const struct {
5356
u64 offset;
@@ -1973,6 +1976,89 @@ static int qede_get_module_eeprom(struct net_device *dev,
19731976
return rc;
19741977
}
19751978

1979+
static int qede_set_dump(struct net_device *dev, struct ethtool_dump *val)
1980+
{
1981+
struct qede_dev *edev = netdev_priv(dev);
1982+
int rc = 0;
1983+
1984+
if (edev->dump_info.cmd == QEDE_DUMP_CMD_NONE) {
1985+
if (val->flag > QEDE_DUMP_CMD_MAX) {
1986+
DP_ERR(edev, "Invalid command %d\n", val->flag);
1987+
return -EINVAL;
1988+
}
1989+
edev->dump_info.cmd = val->flag;
1990+
edev->dump_info.num_args = 0;
1991+
return 0;
1992+
}
1993+
1994+
if (edev->dump_info.num_args == QEDE_DUMP_MAX_ARGS) {
1995+
DP_ERR(edev, "Arg count = %d\n", edev->dump_info.num_args);
1996+
return -EINVAL;
1997+
}
1998+
1999+
switch (edev->dump_info.cmd) {
2000+
case QEDE_DUMP_CMD_NVM_CFG:
2001+
edev->dump_info.args[edev->dump_info.num_args] = val->flag;
2002+
edev->dump_info.num_args++;
2003+
break;
2004+
default:
2005+
break;
2006+
}
2007+
2008+
return rc;
2009+
}
2010+
2011+
static int qede_get_dump_flag(struct net_device *dev,
2012+
struct ethtool_dump *dump)
2013+
{
2014+
struct qede_dev *edev = netdev_priv(dev);
2015+
2016+
dump->version = QEDE_DUMP_VERSION;
2017+
switch (edev->dump_info.cmd) {
2018+
case QEDE_DUMP_CMD_NVM_CFG:
2019+
dump->flag = QEDE_DUMP_CMD_NVM_CFG;
2020+
dump->len = QEDE_DUMP_NVM_BUF_LEN;
2021+
break;
2022+
default:
2023+
break;
2024+
}
2025+
2026+
DP_VERBOSE(edev, QED_MSG_DEBUG,
2027+
"dump->version = 0x%x dump->flag = %d dump->len = %d\n",
2028+
dump->version, dump->flag, dump->len);
2029+
return 0;
2030+
}
2031+
2032+
static int qede_get_dump_data(struct net_device *dev,
2033+
struct ethtool_dump *dump, void *buf)
2034+
{
2035+
struct qede_dev *edev = netdev_priv(dev);
2036+
int rc;
2037+
2038+
switch (edev->dump_info.cmd) {
2039+
case QEDE_DUMP_CMD_NVM_CFG:
2040+
if (edev->dump_info.num_args != QEDE_DUMP_NVM_ARG_COUNT) {
2041+
DP_ERR(edev, "Arg count = %d required = %d\n",
2042+
edev->dump_info.num_args,
2043+
QEDE_DUMP_NVM_ARG_COUNT);
2044+
return -EINVAL;
2045+
}
2046+
rc = edev->ops->common->read_nvm_cfg(edev->cdev, (u8 **)&buf,
2047+
edev->dump_info.args[0],
2048+
edev->dump_info.args[1]);
2049+
break;
2050+
default:
2051+
DP_ERR(edev, "Invalid cmd = %d\n", edev->dump_info.cmd);
2052+
rc = -EINVAL;
2053+
break;
2054+
}
2055+
2056+
edev->dump_info.cmd = QEDE_DUMP_CMD_NONE;
2057+
edev->dump_info.num_args = 0;
2058+
2059+
return rc;
2060+
}
2061+
19762062
static const struct ethtool_ops qede_ethtool_ops = {
19772063
.get_link_ksettings = qede_get_link_ksettings,
19782064
.set_link_ksettings = qede_set_link_ksettings,
@@ -2014,6 +2100,9 @@ static const struct ethtool_ops qede_ethtool_ops = {
20142100
.get_tunable = qede_get_tunable,
20152101
.set_tunable = qede_set_tunable,
20162102
.flash_device = qede_flash_device,
2103+
.get_dump_flag = qede_get_dump_flag,
2104+
.get_dump_data = qede_get_dump_data,
2105+
.set_dump = qede_set_dump,
20172106
};
20182107

20192108
static const struct ethtool_ops qede_vf_ethtool_ops = {

0 commit comments

Comments
 (0)