Commit 6a025a50 authored by David S. Miller's avatar David S. Miller

Merge branch 'qed-next'

Yuval Mintz says:

====================
qed*: driver updates

[Was previous termed 'eeprom access et al.', but seemed a bit
inappropriate given we've dropped the eeprom patch for now.
Still waiting for some inputs on that one, BTW]

This patch series contains some ethtool-related enhancements.
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 960a2628 a43f235f
...@@ -1415,16 +1415,16 @@ static void __qed_get_vport_port_stats(struct qed_hwfn *p_hwfn, ...@@ -1415,16 +1415,16 @@ static void __qed_get_vport_port_stats(struct qed_hwfn *p_hwfn,
sizeof(port_stats)); sizeof(port_stats));
p_stats->rx_64_byte_packets += port_stats.pmm.r64; p_stats->rx_64_byte_packets += port_stats.pmm.r64;
p_stats->rx_127_byte_packets += port_stats.pmm.r127; p_stats->rx_65_to_127_byte_packets += port_stats.pmm.r127;
p_stats->rx_255_byte_packets += port_stats.pmm.r255; p_stats->rx_128_to_255_byte_packets += port_stats.pmm.r255;
p_stats->rx_511_byte_packets += port_stats.pmm.r511; p_stats->rx_256_to_511_byte_packets += port_stats.pmm.r511;
p_stats->rx_1023_byte_packets += port_stats.pmm.r1023; p_stats->rx_512_to_1023_byte_packets += port_stats.pmm.r1023;
p_stats->rx_1518_byte_packets += port_stats.pmm.r1518; p_stats->rx_1024_to_1518_byte_packets += port_stats.pmm.r1518;
p_stats->rx_1522_byte_packets += port_stats.pmm.r1522; p_stats->rx_1519_to_1522_byte_packets += port_stats.pmm.r1522;
p_stats->rx_2047_byte_packets += port_stats.pmm.r2047; p_stats->rx_1519_to_2047_byte_packets += port_stats.pmm.r2047;
p_stats->rx_4095_byte_packets += port_stats.pmm.r4095; p_stats->rx_2048_to_4095_byte_packets += port_stats.pmm.r4095;
p_stats->rx_9216_byte_packets += port_stats.pmm.r9216; p_stats->rx_4096_to_9216_byte_packets += port_stats.pmm.r9216;
p_stats->rx_16383_byte_packets += port_stats.pmm.r16383; p_stats->rx_9217_to_16383_byte_packets += port_stats.pmm.r16383;
p_stats->rx_crc_errors += port_stats.pmm.rfcs; p_stats->rx_crc_errors += port_stats.pmm.rfcs;
p_stats->rx_mac_crtl_frames += port_stats.pmm.rxcf; p_stats->rx_mac_crtl_frames += port_stats.pmm.rxcf;
p_stats->rx_pause_frames += port_stats.pmm.rxpf; p_stats->rx_pause_frames += port_stats.pmm.rxpf;
......
...@@ -915,6 +915,11 @@ static u32 qed_sb_release(struct qed_dev *cdev, ...@@ -915,6 +915,11 @@ static u32 qed_sb_release(struct qed_dev *cdev,
return rc; return rc;
} }
static bool qed_can_link_change(struct qed_dev *cdev)
{
return true;
}
static int qed_set_link(struct qed_dev *cdev, static int qed_set_link(struct qed_dev *cdev,
struct qed_link_params *params) struct qed_link_params *params)
{ {
...@@ -957,6 +962,20 @@ static int qed_set_link(struct qed_dev *cdev, ...@@ -957,6 +962,20 @@ static int qed_set_link(struct qed_dev *cdev,
} }
if (params->override_flags & QED_LINK_OVERRIDE_SPEED_FORCED_SPEED) if (params->override_flags & QED_LINK_OVERRIDE_SPEED_FORCED_SPEED)
link_params->speed.forced_speed = params->forced_speed; link_params->speed.forced_speed = params->forced_speed;
if (params->override_flags & QED_LINK_OVERRIDE_PAUSE_CONFIG) {
if (params->pause_config & QED_LINK_PAUSE_AUTONEG_ENABLE)
link_params->pause.autoneg = true;
else
link_params->pause.autoneg = false;
if (params->pause_config & QED_LINK_PAUSE_RX_ENABLE)
link_params->pause.forced_rx = true;
else
link_params->pause.forced_rx = false;
if (params->pause_config & QED_LINK_PAUSE_TX_ENABLE)
link_params->pause.forced_tx = true;
else
link_params->pause.forced_tx = false;
}
rc = qed_mcp_set_link(hwfn, ptt, params->link_up); rc = qed_mcp_set_link(hwfn, ptt, params->link_up);
...@@ -1177,6 +1196,7 @@ const struct qed_common_ops qed_common_ops_pass = { ...@@ -1177,6 +1196,7 @@ const struct qed_common_ops qed_common_ops_pass = {
.sb_release = &qed_sb_release, .sb_release = &qed_sb_release,
.simd_handler_config = &qed_simd_handler_config, .simd_handler_config = &qed_simd_handler_config,
.simd_handler_clean = &qed_simd_handler_clean, .simd_handler_clean = &qed_simd_handler_clean,
.can_link_change = &qed_can_link_change,
.set_link = &qed_set_link, .set_link = &qed_set_link,
.get_link = &qed_get_current_link, .get_link = &qed_get_current_link,
.drain = &qed_drain, .drain = &qed_drain,
......
...@@ -59,16 +59,16 @@ struct qede_stats { ...@@ -59,16 +59,16 @@ struct qede_stats {
/* port */ /* port */
u64 rx_64_byte_packets; u64 rx_64_byte_packets;
u64 rx_127_byte_packets; u64 rx_65_to_127_byte_packets;
u64 rx_255_byte_packets; u64 rx_128_to_255_byte_packets;
u64 rx_511_byte_packets; u64 rx_256_to_511_byte_packets;
u64 rx_1023_byte_packets; u64 rx_512_to_1023_byte_packets;
u64 rx_1518_byte_packets; u64 rx_1024_to_1518_byte_packets;
u64 rx_1522_byte_packets; u64 rx_1519_to_1522_byte_packets;
u64 rx_2047_byte_packets; u64 rx_1519_to_2047_byte_packets;
u64 rx_4095_byte_packets; u64 rx_2048_to_4095_byte_packets;
u64 rx_9216_byte_packets; u64 rx_4096_to_9216_byte_packets;
u64 rx_16383_byte_packets; u64 rx_9217_to_16383_byte_packets;
u64 rx_crc_errors; u64 rx_crc_errors;
u64 rx_mac_crtl_frames; u64 rx_mac_crtl_frames;
u64 rx_pause_frames; u64 rx_pause_frames;
......
...@@ -59,16 +59,16 @@ static const struct { ...@@ -59,16 +59,16 @@ static const struct {
QEDE_STAT(tx_bcast_pkts), QEDE_STAT(tx_bcast_pkts),
QEDE_PF_STAT(rx_64_byte_packets), QEDE_PF_STAT(rx_64_byte_packets),
QEDE_PF_STAT(rx_127_byte_packets), QEDE_PF_STAT(rx_65_to_127_byte_packets),
QEDE_PF_STAT(rx_255_byte_packets), QEDE_PF_STAT(rx_128_to_255_byte_packets),
QEDE_PF_STAT(rx_511_byte_packets), QEDE_PF_STAT(rx_256_to_511_byte_packets),
QEDE_PF_STAT(rx_1023_byte_packets), QEDE_PF_STAT(rx_512_to_1023_byte_packets),
QEDE_PF_STAT(rx_1518_byte_packets), QEDE_PF_STAT(rx_1024_to_1518_byte_packets),
QEDE_PF_STAT(rx_1522_byte_packets), QEDE_PF_STAT(rx_1519_to_1522_byte_packets),
QEDE_PF_STAT(rx_2047_byte_packets), QEDE_PF_STAT(rx_1519_to_2047_byte_packets),
QEDE_PF_STAT(rx_4095_byte_packets), QEDE_PF_STAT(rx_2048_to_4095_byte_packets),
QEDE_PF_STAT(rx_9216_byte_packets), QEDE_PF_STAT(rx_4096_to_9216_byte_packets),
QEDE_PF_STAT(rx_16383_byte_packets), QEDE_PF_STAT(rx_9217_to_16383_byte_packets),
QEDE_PF_STAT(tx_64_byte_packets), QEDE_PF_STAT(tx_64_byte_packets),
QEDE_PF_STAT(tx_65_to_127_byte_packets), QEDE_PF_STAT(tx_65_to_127_byte_packets),
QEDE_PF_STAT(tx_128_to_255_byte_packets), QEDE_PF_STAT(tx_128_to_255_byte_packets),
...@@ -116,6 +116,15 @@ static const struct { ...@@ -116,6 +116,15 @@ static const struct {
#define QEDE_NUM_STATS ARRAY_SIZE(qede_stats_arr) #define QEDE_NUM_STATS ARRAY_SIZE(qede_stats_arr)
enum {
QEDE_PRI_FLAG_CMT,
QEDE_PRI_FLAG_LEN,
};
static const char qede_private_arr[QEDE_PRI_FLAG_LEN][ETH_GSTRING_LEN] = {
"Coupled-Function",
};
static void qede_get_strings_stats(struct qede_dev *edev, u8 *buf) static void qede_get_strings_stats(struct qede_dev *edev, u8 *buf)
{ {
int i, j, k; int i, j, k;
...@@ -139,6 +148,10 @@ static void qede_get_strings(struct net_device *dev, u32 stringset, u8 *buf) ...@@ -139,6 +148,10 @@ static void qede_get_strings(struct net_device *dev, u32 stringset, u8 *buf)
case ETH_SS_STATS: case ETH_SS_STATS:
qede_get_strings_stats(edev, buf); qede_get_strings_stats(edev, buf);
break; break;
case ETH_SS_PRIV_FLAGS:
memcpy(buf, qede_private_arr,
ETH_GSTRING_LEN * QEDE_PRI_FLAG_LEN);
break;
default: default:
DP_VERBOSE(edev, QED_MSG_DEBUG, DP_VERBOSE(edev, QED_MSG_DEBUG,
"Unsupported stringset 0x%08x\n", stringset); "Unsupported stringset 0x%08x\n", stringset);
...@@ -177,6 +190,8 @@ static int qede_get_sset_count(struct net_device *dev, int stringset) ...@@ -177,6 +190,8 @@ static int qede_get_sset_count(struct net_device *dev, int stringset)
switch (stringset) { switch (stringset) {
case ETH_SS_STATS: case ETH_SS_STATS:
return num_stats + QEDE_NUM_RQSTATS; return num_stats + QEDE_NUM_RQSTATS;
case ETH_SS_PRIV_FLAGS:
return QEDE_PRI_FLAG_LEN;
default: default:
DP_VERBOSE(edev, QED_MSG_DEBUG, DP_VERBOSE(edev, QED_MSG_DEBUG,
...@@ -185,6 +200,13 @@ static int qede_get_sset_count(struct net_device *dev, int stringset) ...@@ -185,6 +200,13 @@ static int qede_get_sset_count(struct net_device *dev, int stringset)
} }
} }
static u32 qede_get_priv_flags(struct net_device *dev)
{
struct qede_dev *edev = netdev_priv(dev);
return (!!(edev->dev_info.common.num_hwfns > 1)) << QEDE_PRI_FLAG_CMT;
}
static int qede_get_settings(struct net_device *dev, struct ethtool_cmd *cmd) static int qede_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
{ {
struct qede_dev *edev = netdev_priv(dev); struct qede_dev *edev = netdev_priv(dev);
...@@ -217,9 +239,9 @@ static int qede_set_settings(struct net_device *dev, struct ethtool_cmd *cmd) ...@@ -217,9 +239,9 @@ static int qede_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
struct qed_link_params params; struct qed_link_params params;
u32 speed; u32 speed;
if (!edev->dev_info.common.is_mf_default) { if (!edev->ops || !edev->ops->common->can_link_change(edev->cdev)) {
DP_INFO(edev, DP_INFO(edev,
"Link parameters can not be changed in non-default mode\n"); "Link settings are not allowed to be changed\n");
return -EOPNOTSUPP; return -EOPNOTSUPP;
} }
...@@ -328,6 +350,12 @@ static int qede_nway_reset(struct net_device *dev) ...@@ -328,6 +350,12 @@ static int qede_nway_reset(struct net_device *dev)
struct qed_link_output current_link; struct qed_link_output current_link;
struct qed_link_params link_params; struct qed_link_params link_params;
if (!edev->ops || !edev->ops->common->can_link_change(edev->cdev)) {
DP_INFO(edev,
"Link settings are not allowed to be changed\n");
return -EOPNOTSUPP;
}
if (!netif_running(dev)) if (!netif_running(dev))
return 0; return 0;
...@@ -428,9 +456,9 @@ static int qede_set_pauseparam(struct net_device *dev, ...@@ -428,9 +456,9 @@ static int qede_set_pauseparam(struct net_device *dev,
struct qed_link_params params; struct qed_link_params params;
struct qed_link_output current_link; struct qed_link_output current_link;
if (!edev->dev_info.common.is_mf_default) { if (!edev->ops || !edev->ops->common->can_link_change(edev->cdev)) {
DP_INFO(edev, DP_INFO(edev,
"Pause parameters can not be updated in non-default mode\n"); "Pause settings are not allowed to be changed\n");
return -EOPNOTSUPP; return -EOPNOTSUPP;
} }
...@@ -814,6 +842,7 @@ static const struct ethtool_ops qede_ethtool_ops = { ...@@ -814,6 +842,7 @@ static const struct ethtool_ops qede_ethtool_ops = {
.get_strings = qede_get_strings, .get_strings = qede_get_strings,
.set_phys_id = qede_set_phys_id, .set_phys_id = qede_set_phys_id,
.get_ethtool_stats = qede_get_ethtool_stats, .get_ethtool_stats = qede_get_ethtool_stats,
.get_priv_flags = qede_get_priv_flags,
.get_sset_count = qede_get_sset_count, .get_sset_count = qede_get_sset_count,
.get_rxnfc = qede_get_rxnfc, .get_rxnfc = qede_get_rxnfc,
.set_rxnfc = qede_set_rxnfc, .set_rxnfc = qede_set_rxnfc,
......
...@@ -1638,16 +1638,25 @@ void qede_fill_by_demand_stats(struct qede_dev *edev) ...@@ -1638,16 +1638,25 @@ void qede_fill_by_demand_stats(struct qede_dev *edev)
edev->stats.coalesced_bytes = stats.tpa_coalesced_bytes; edev->stats.coalesced_bytes = stats.tpa_coalesced_bytes;
edev->stats.rx_64_byte_packets = stats.rx_64_byte_packets; edev->stats.rx_64_byte_packets = stats.rx_64_byte_packets;
edev->stats.rx_127_byte_packets = stats.rx_127_byte_packets; edev->stats.rx_65_to_127_byte_packets = stats.rx_65_to_127_byte_packets;
edev->stats.rx_255_byte_packets = stats.rx_255_byte_packets; edev->stats.rx_128_to_255_byte_packets =
edev->stats.rx_511_byte_packets = stats.rx_511_byte_packets; stats.rx_128_to_255_byte_packets;
edev->stats.rx_1023_byte_packets = stats.rx_1023_byte_packets; edev->stats.rx_256_to_511_byte_packets =
edev->stats.rx_1518_byte_packets = stats.rx_1518_byte_packets; stats.rx_256_to_511_byte_packets;
edev->stats.rx_1522_byte_packets = stats.rx_1522_byte_packets; edev->stats.rx_512_to_1023_byte_packets =
edev->stats.rx_2047_byte_packets = stats.rx_2047_byte_packets; stats.rx_512_to_1023_byte_packets;
edev->stats.rx_4095_byte_packets = stats.rx_4095_byte_packets; edev->stats.rx_1024_to_1518_byte_packets =
edev->stats.rx_9216_byte_packets = stats.rx_9216_byte_packets; stats.rx_1024_to_1518_byte_packets;
edev->stats.rx_16383_byte_packets = stats.rx_16383_byte_packets; edev->stats.rx_1519_to_1522_byte_packets =
stats.rx_1519_to_1522_byte_packets;
edev->stats.rx_1519_to_2047_byte_packets =
stats.rx_1519_to_2047_byte_packets;
edev->stats.rx_2048_to_4095_byte_packets =
stats.rx_2048_to_4095_byte_packets;
edev->stats.rx_4096_to_9216_byte_packets =
stats.rx_4096_to_9216_byte_packets;
edev->stats.rx_9217_to_16383_byte_packets =
stats.rx_9217_to_16383_byte_packets;
edev->stats.rx_crc_errors = stats.rx_crc_errors; edev->stats.rx_crc_errors = stats.rx_crc_errors;
edev->stats.rx_mac_crtl_frames = stats.rx_mac_crtl_frames; edev->stats.rx_mac_crtl_frames = stats.rx_mac_crtl_frames;
edev->stats.rx_pause_frames = stats.rx_pause_frames; edev->stats.rx_pause_frames = stats.rx_pause_frames;
......
...@@ -211,6 +211,16 @@ struct qed_common_ops { ...@@ -211,6 +211,16 @@ struct qed_common_ops {
void (*simd_handler_clean)(struct qed_dev *cdev, void (*simd_handler_clean)(struct qed_dev *cdev,
int index); int index);
/**
* @brief can_link_change - can the instance change the link or not
*
* @param cdev
*
* @return true if link-change is allowed, false otherwise.
*/
bool (*can_link_change)(struct qed_dev *cdev);
/** /**
* @brief set_link - set links according to params * @brief set_link - set links according to params
* *
...@@ -384,16 +394,16 @@ struct qed_eth_stats { ...@@ -384,16 +394,16 @@ struct qed_eth_stats {
/* port */ /* port */
u64 rx_64_byte_packets; u64 rx_64_byte_packets;
u64 rx_127_byte_packets; u64 rx_65_to_127_byte_packets;
u64 rx_255_byte_packets; u64 rx_128_to_255_byte_packets;
u64 rx_511_byte_packets; u64 rx_256_to_511_byte_packets;
u64 rx_1023_byte_packets; u64 rx_512_to_1023_byte_packets;
u64 rx_1518_byte_packets; u64 rx_1024_to_1518_byte_packets;
u64 rx_1522_byte_packets; u64 rx_1519_to_1522_byte_packets;
u64 rx_2047_byte_packets; u64 rx_1519_to_2047_byte_packets;
u64 rx_4095_byte_packets; u64 rx_2048_to_4095_byte_packets;
u64 rx_9216_byte_packets; u64 rx_4096_to_9216_byte_packets;
u64 rx_16383_byte_packets; u64 rx_9217_to_16383_byte_packets;
u64 rx_crc_errors; u64 rx_crc_errors;
u64 rx_mac_crtl_frames; u64 rx_mac_crtl_frames;
u64 rx_pause_frames; u64 rx_pause_frames;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment