mirror of
https://github.com/openwrt/openwrt.git
synced 2025-01-13 16:31:09 +00:00
56b2d856a2
7a3bcd39ae1f r8169: use helper r8169_mod_reg8_cond to simplify rtl_jumbo_config
e3e9e9039fa6 r8169: align WAKE_PHY handling with r8125/r8126 vendor drivers
330dc2297c82 r8169: improve rtl_set_d3_pll_down
c507e96b5763 r8169: improve __rtl8169_set_wol
83cb4b470c66 r8169: remove leftover locks after reverted change
2cd02f2fdd8a r8169: improve initialization of RSS registers on RTL8125/RTL8126
a3d8520e6a19 r8169: align RTL8126 EEE config with vendor driver
4af2f60bf737 r8169: align RTL8125/RTL8126 PHY config with vendor driver
eb90f876b796 r8169: align RTL8125 EEE config with vendor driver
b8bd8c44a266 r8169: fix inconsistent indenting in rtl8169_get_eth_mac_stats
f75d1fbe7809 r8169: add support for RTL8125D
c4e64095c00c r8169: enable EEE at 2.5G per default on RTL8125B
d64113c6bb5e r8169: remove rtl_dash_loop_wait_high/low
1c105bacb160 r8169: avoid duplicated messages if loading firmware fails and switch to warn level
ac48430368c1 r8169: don't take RTNL lock in rtl_task()
e3fc5139bd8f r8169: implement additional ethtool stats ops
b8bf38440ba9 r8169: enable SG/TSO on selected chip versions per default
854d71c555df r8169: remove original workaround for RTL8125 broken rx issue
1ffcc8d41306 r8169: add support for the temperature sensor being available from RTL8125B
The following patches require backporting additional linux patches:
e2015942e90a r8169: replace custom flag with disable_work() et al
e340bff27e63 r8169: copy vendor driver 2.5G/5G EEE advertisement constraints
Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
(cherry picked from commit 0eeba04a16
)
131 lines
4.3 KiB
Diff
131 lines
4.3 KiB
Diff
From e3fc5139bd8ffaa1498adc21be4e8ecbc6aed508 Mon Sep 17 00:00:00 2001
|
|
From: Heiner Kallweit <hkallweit1@gmail.com>
|
|
Date: Sun, 13 Oct 2024 11:17:39 +0200
|
|
Subject: [PATCH] r8169: implement additional ethtool stats ops
|
|
|
|
This adds support for ethtool standard statistics, and makes use of the
|
|
extended hardware statistics being available from RTl8125.
|
|
|
|
Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
|
|
Reviewed-by: Simon Horman <horms@kernel.org>
|
|
Link: https://patch.msgid.link/58e0da73-a7dd-4be3-82ae-d5b3f9069bde@gmail.com
|
|
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|
---
|
|
drivers/net/ethernet/realtek/r8169_main.c | 82 +++++++++++++++++++++++
|
|
1 file changed, 82 insertions(+)
|
|
|
|
--- a/drivers/net/ethernet/realtek/r8169_main.c
|
|
+++ b/drivers/net/ethernet/realtek/r8169_main.c
|
|
@@ -2162,6 +2162,19 @@ static void rtl8169_get_ringparam(struct
|
|
data->tx_pending = NUM_TX_DESC;
|
|
}
|
|
|
|
+static void rtl8169_get_pause_stats(struct net_device *dev,
|
|
+ struct ethtool_pause_stats *pause_stats)
|
|
+{
|
|
+ struct rtl8169_private *tp = netdev_priv(dev);
|
|
+
|
|
+ if (!rtl_is_8125(tp))
|
|
+ return;
|
|
+
|
|
+ rtl8169_update_counters(tp);
|
|
+ pause_stats->tx_pause_frames = le32_to_cpu(tp->counters->tx_pause_on);
|
|
+ pause_stats->rx_pause_frames = le32_to_cpu(tp->counters->rx_pause_on);
|
|
+}
|
|
+
|
|
static void rtl8169_get_pauseparam(struct net_device *dev,
|
|
struct ethtool_pauseparam *data)
|
|
{
|
|
@@ -2188,6 +2201,69 @@ static int rtl8169_set_pauseparam(struct
|
|
return 0;
|
|
}
|
|
|
|
+static void rtl8169_get_eth_mac_stats(struct net_device *dev,
|
|
+ struct ethtool_eth_mac_stats *mac_stats)
|
|
+{
|
|
+ struct rtl8169_private *tp = netdev_priv(dev);
|
|
+
|
|
+ rtl8169_update_counters(tp);
|
|
+
|
|
+ mac_stats->FramesTransmittedOK =
|
|
+ le64_to_cpu(tp->counters->tx_packets);
|
|
+ mac_stats->SingleCollisionFrames =
|
|
+ le32_to_cpu(tp->counters->tx_one_collision);
|
|
+ mac_stats->MultipleCollisionFrames =
|
|
+ le32_to_cpu(tp->counters->tx_multi_collision);
|
|
+ mac_stats->FramesReceivedOK =
|
|
+ le64_to_cpu(tp->counters->rx_packets);
|
|
+ mac_stats->AlignmentErrors =
|
|
+ le16_to_cpu(tp->counters->align_errors);
|
|
+ mac_stats->FramesLostDueToIntMACXmitError =
|
|
+ le64_to_cpu(tp->counters->tx_errors);
|
|
+ mac_stats->BroadcastFramesReceivedOK =
|
|
+ le64_to_cpu(tp->counters->rx_broadcast);
|
|
+ mac_stats->MulticastFramesReceivedOK =
|
|
+ le32_to_cpu(tp->counters->rx_multicast);
|
|
+
|
|
+ if (!rtl_is_8125(tp))
|
|
+ return;
|
|
+
|
|
+ mac_stats->AlignmentErrors =
|
|
+ le32_to_cpu(tp->counters->align_errors32);
|
|
+ mac_stats->OctetsTransmittedOK =
|
|
+ le64_to_cpu(tp->counters->tx_octets);
|
|
+ mac_stats->LateCollisions =
|
|
+ le32_to_cpu(tp->counters->tx_late_collision);
|
|
+ mac_stats->FramesAbortedDueToXSColls =
|
|
+ le32_to_cpu(tp->counters->tx_aborted32);
|
|
+ mac_stats->OctetsReceivedOK =
|
|
+ le64_to_cpu(tp->counters->rx_octets);
|
|
+ mac_stats->FramesLostDueToIntMACRcvError =
|
|
+ le32_to_cpu(tp->counters->rx_mac_error);
|
|
+ mac_stats->MulticastFramesXmittedOK =
|
|
+ le64_to_cpu(tp->counters->tx_multicast64);
|
|
+ mac_stats->BroadcastFramesXmittedOK =
|
|
+ le64_to_cpu(tp->counters->tx_broadcast64);
|
|
+ mac_stats->MulticastFramesReceivedOK =
|
|
+ le64_to_cpu(tp->counters->rx_multicast64);
|
|
+ mac_stats->FrameTooLongErrors =
|
|
+ le32_to_cpu(tp->counters->rx_frame_too_long);
|
|
+}
|
|
+
|
|
+static void rtl8169_get_eth_ctrl_stats(struct net_device *dev,
|
|
+ struct ethtool_eth_ctrl_stats *ctrl_stats)
|
|
+{
|
|
+ struct rtl8169_private *tp = netdev_priv(dev);
|
|
+
|
|
+ if (!rtl_is_8125(tp))
|
|
+ return;
|
|
+
|
|
+ rtl8169_update_counters(tp);
|
|
+
|
|
+ ctrl_stats->UnsupportedOpcodesReceived =
|
|
+ le32_to_cpu(tp->counters->rx_unknown_opcode);
|
|
+}
|
|
+
|
|
static const struct ethtool_ops rtl8169_ethtool_ops = {
|
|
.supported_coalesce_params = ETHTOOL_COALESCE_USECS |
|
|
ETHTOOL_COALESCE_MAX_FRAMES,
|
|
@@ -2209,8 +2285,11 @@ static const struct ethtool_ops rtl8169_
|
|
.get_link_ksettings = phy_ethtool_get_link_ksettings,
|
|
.set_link_ksettings = phy_ethtool_set_link_ksettings,
|
|
.get_ringparam = rtl8169_get_ringparam,
|
|
+ .get_pause_stats = rtl8169_get_pause_stats,
|
|
.get_pauseparam = rtl8169_get_pauseparam,
|
|
.set_pauseparam = rtl8169_set_pauseparam,
|
|
+ .get_eth_mac_stats = rtl8169_get_eth_mac_stats,
|
|
+ .get_eth_ctrl_stats = rtl8169_get_eth_ctrl_stats,
|
|
};
|
|
|
|
static enum mac_version rtl8169_get_mac_version(u16 xid, bool gmii)
|
|
@@ -3895,6 +3974,9 @@ static void rtl_hw_start_8125(struct rtl
|
|
break;
|
|
}
|
|
|
|
+ /* enable extended tally counter */
|
|
+ r8168_mac_ocp_modify(tp, 0xea84, 0, BIT(1) | BIT(0));
|
|
+
|
|
rtl_hw_config(tp);
|
|
}
|
|
|