Commit 32d26a68 authored by Sudarsana Reddy Kalluru's avatar Sudarsana Reddy Kalluru Committed by David S. Miller

qed*: Add link change count value to ethtool statistics display.

This patch adds driver changes for capturing the link change count in
ethtool statistics display.

Please consider applying this to "net-next".
Signed-off-by: default avatarSudarsana Reddy Kalluru <Sudarsana.Kalluru@cavium.com>
Signed-off-by: default avatarAriel Elior <ariel.elior@cavium.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 8e8b332b
...@@ -1854,6 +1854,11 @@ static void __qed_get_vport_port_stats(struct qed_hwfn *p_hwfn, ...@@ -1854,6 +1854,11 @@ static void __qed_get_vport_port_stats(struct qed_hwfn *p_hwfn,
p_ah->tx_1519_to_max_byte_packets = p_ah->tx_1519_to_max_byte_packets =
port_stats.eth.u1.ah1.t1519_to_max; port_stats.eth.u1.ah1.t1519_to_max;
} }
p_common->link_change_count = qed_rd(p_hwfn, p_ptt,
p_hwfn->mcp_info->port_addr +
offsetof(struct public_port,
link_change_count));
} }
static void __qed_get_vport_stats(struct qed_hwfn *p_hwfn, static void __qed_get_vport_stats(struct qed_hwfn *p_hwfn,
...@@ -1961,11 +1966,14 @@ void qed_reset_vport_stats(struct qed_dev *cdev) ...@@ -1961,11 +1966,14 @@ void qed_reset_vport_stats(struct qed_dev *cdev)
/* PORT statistics are not necessarily reset, so we need to /* PORT statistics are not necessarily reset, so we need to
* read and create a baseline for future statistics. * read and create a baseline for future statistics.
* Link change stat is maintained by MFW, return its value as is.
*/ */
if (!cdev->reset_stats) if (!cdev->reset_stats) {
DP_INFO(cdev, "Reset stats not allocated\n"); DP_INFO(cdev, "Reset stats not allocated\n");
else } else {
_qed_get_vport_stats(cdev, cdev->reset_stats); _qed_get_vport_stats(cdev, cdev->reset_stats);
cdev->reset_stats->common.link_change_count = 0;
}
} }
static enum gft_profile_type static enum gft_profile_type
......
...@@ -88,6 +88,7 @@ struct qede_stats_common { ...@@ -88,6 +88,7 @@ struct qede_stats_common {
u64 coalesced_aborts_num; u64 coalesced_aborts_num;
u64 non_coalesced_pkts; u64 non_coalesced_pkts;
u64 coalesced_bytes; u64 coalesced_bytes;
u64 link_change_count;
/* port */ /* port */
u64 rx_64_byte_packets; u64 rx_64_byte_packets;
......
...@@ -171,6 +171,8 @@ static const struct { ...@@ -171,6 +171,8 @@ static const struct {
QEDE_STAT(coalesced_aborts_num), QEDE_STAT(coalesced_aborts_num),
QEDE_STAT(non_coalesced_pkts), QEDE_STAT(non_coalesced_pkts),
QEDE_STAT(coalesced_bytes), QEDE_STAT(coalesced_bytes),
QEDE_STAT(link_change_count),
}; };
#define QEDE_NUM_STATS ARRAY_SIZE(qede_stats_arr) #define QEDE_NUM_STATS ARRAY_SIZE(qede_stats_arr)
......
...@@ -399,6 +399,7 @@ void qede_fill_by_demand_stats(struct qede_dev *edev) ...@@ -399,6 +399,7 @@ void qede_fill_by_demand_stats(struct qede_dev *edev)
p_common->brb_truncates = stats.common.brb_truncates; p_common->brb_truncates = stats.common.brb_truncates;
p_common->brb_discards = stats.common.brb_discards; p_common->brb_discards = stats.common.brb_discards;
p_common->tx_mac_ctrl_frames = stats.common.tx_mac_ctrl_frames; p_common->tx_mac_ctrl_frames = stats.common.tx_mac_ctrl_frames;
p_common->link_change_count = stats.common.link_change_count;
if (QEDE_IS_BB(edev)) { if (QEDE_IS_BB(edev)) {
struct qede_stats_bb *p_bb = &edev->stats.bb; struct qede_stats_bb *p_bb = &edev->stats.bb;
......
...@@ -1180,6 +1180,7 @@ struct qed_eth_stats_common { ...@@ -1180,6 +1180,7 @@ struct qed_eth_stats_common {
u64 tx_mac_mc_packets; u64 tx_mac_mc_packets;
u64 tx_mac_bc_packets; u64 tx_mac_bc_packets;
u64 tx_mac_ctrl_frames; u64 tx_mac_ctrl_frames;
u64 link_change_count;
}; };
struct qed_eth_stats_bb { struct qed_eth_stats_bb {
......
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