All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net-next 0/2] net: cadence: macb: Modernize statistics reporting
@ 2025-02-14 21:27 Sean Anderson
  2025-02-14 21:27 ` [PATCH net-next 1/2] net: cadence: macb: Convert to get_stats64 Sean Anderson
                   ` (2 more replies)
  0 siblings, 3 replies; 16+ messages in thread
From: Sean Anderson @ 2025-02-14 21:27 UTC (permalink / raw)
  To: Nicolas Ferre, Claudiu Beznea, netdev
  Cc: David S . Miller, Eric Dumazet, Andrew Lunn, Paolo Abeni,
	Jakub Kicinski, linux-kernel, Sean Anderson

Implement the modern interfaces for statistics reporting.


Sean Anderson (2):
  net: cadence: macb: Convert to get_stats64
  net: cadence: macb: Report standard stats

 drivers/net/ethernet/cadence/macb.h      | 130 ++++++++--------
 drivers/net/ethernet/cadence/macb_main.c | 190 ++++++++++++++++++++---
 2 files changed, 235 insertions(+), 85 deletions(-)

-- 
2.35.1.1320.gc452695387.dirty


^ permalink raw reply	[flat|nested] 16+ messages in thread

* [PATCH net-next 1/2] net: cadence: macb: Convert to get_stats64
  2025-02-14 21:27 [PATCH net-next 0/2] net: cadence: macb: Modernize statistics reporting Sean Anderson
@ 2025-02-14 21:27 ` Sean Anderson
  2025-02-14 22:59   ` Andrew Lunn
  2025-02-14 21:27 ` [PATCH net-next 2/2] net: cadence: macb: Report standard stats Sean Anderson
  2025-02-19  2:10 ` [PATCH net-next 0/2] net: cadence: macb: Modernize statistics reporting patchwork-bot+netdevbpf
  2 siblings, 1 reply; 16+ messages in thread
From: Sean Anderson @ 2025-02-14 21:27 UTC (permalink / raw)
  To: Nicolas Ferre, Claudiu Beznea, netdev
  Cc: David S . Miller, Eric Dumazet, Andrew Lunn, Paolo Abeni,
	Jakub Kicinski, linux-kernel, Sean Anderson

Convert the existing get_stats implementation to get_stats64. Since we
now report 64-bit values, increase the counters to 64-bits as well.

Signed-off-by: Sean Anderson <sean.anderson@linux.dev>
---

 drivers/net/ethernet/cadence/macb.h      | 132 +++++++++++------------
 drivers/net/ethernet/cadence/macb_main.c |  34 +++---
 2 files changed, 81 insertions(+), 85 deletions(-)

diff --git a/drivers/net/ethernet/cadence/macb.h b/drivers/net/ethernet/cadence/macb.h
index 5740c98d8c9f..b4aa2b165bf3 100644
--- a/drivers/net/ethernet/cadence/macb.h
+++ b/drivers/net/ethernet/cadence/macb.h
@@ -951,75 +951,75 @@ struct macb_tx_skb {
  * device stats by a periodic timer.
  */
 struct macb_stats {
-	u32	rx_pause_frames;
-	u32	tx_ok;
-	u32	tx_single_cols;
-	u32	tx_multiple_cols;
-	u32	rx_ok;
-	u32	rx_fcs_errors;
-	u32	rx_align_errors;
-	u32	tx_deferred;
-	u32	tx_late_cols;
-	u32	tx_excessive_cols;
-	u32	tx_underruns;
-	u32	tx_carrier_errors;
-	u32	rx_resource_errors;
-	u32	rx_overruns;
-	u32	rx_symbol_errors;
-	u32	rx_oversize_pkts;
-	u32	rx_jabbers;
-	u32	rx_undersize_pkts;
-	u32	sqe_test_errors;
-	u32	rx_length_mismatch;
-	u32	tx_pause_frames;
+	u64	rx_pause_frames;
+	u64	tx_ok;
+	u64	tx_single_cols;
+	u64	tx_multiple_cols;
+	u64	rx_ok;
+	u64	rx_fcs_errors;
+	u64	rx_align_errors;
+	u64	tx_deferred;
+	u64	tx_late_cols;
+	u64	tx_excessive_cols;
+	u64	tx_underruns;
+	u64	tx_carrier_errors;
+	u64	rx_resource_errors;
+	u64	rx_overruns;
+	u64	rx_symbol_errors;
+	u64	rx_oversize_pkts;
+	u64	rx_jabbers;
+	u64	rx_undersize_pkts;
+	u64	sqe_test_errors;
+	u64	rx_length_mismatch;
+	u64	tx_pause_frames;
 };
 
 struct gem_stats {
-	u32	tx_octets_31_0;
-	u32	tx_octets_47_32;
-	u32	tx_frames;
-	u32	tx_broadcast_frames;
-	u32	tx_multicast_frames;
-	u32	tx_pause_frames;
-	u32	tx_64_byte_frames;
-	u32	tx_65_127_byte_frames;
-	u32	tx_128_255_byte_frames;
-	u32	tx_256_511_byte_frames;
-	u32	tx_512_1023_byte_frames;
-	u32	tx_1024_1518_byte_frames;
-	u32	tx_greater_than_1518_byte_frames;
-	u32	tx_underrun;
-	u32	tx_single_collision_frames;
-	u32	tx_multiple_collision_frames;
-	u32	tx_excessive_collisions;
-	u32	tx_late_collisions;
-	u32	tx_deferred_frames;
-	u32	tx_carrier_sense_errors;
-	u32	rx_octets_31_0;
-	u32	rx_octets_47_32;
-	u32	rx_frames;
-	u32	rx_broadcast_frames;
-	u32	rx_multicast_frames;
-	u32	rx_pause_frames;
-	u32	rx_64_byte_frames;
-	u32	rx_65_127_byte_frames;
-	u32	rx_128_255_byte_frames;
-	u32	rx_256_511_byte_frames;
-	u32	rx_512_1023_byte_frames;
-	u32	rx_1024_1518_byte_frames;
-	u32	rx_greater_than_1518_byte_frames;
-	u32	rx_undersized_frames;
-	u32	rx_oversize_frames;
-	u32	rx_jabbers;
-	u32	rx_frame_check_sequence_errors;
-	u32	rx_length_field_frame_errors;
-	u32	rx_symbol_errors;
-	u32	rx_alignment_errors;
-	u32	rx_resource_errors;
-	u32	rx_overruns;
-	u32	rx_ip_header_checksum_errors;
-	u32	rx_tcp_checksum_errors;
-	u32	rx_udp_checksum_errors;
+	u64	tx_octets_31_0;
+	u64	tx_octets_47_32;
+	u64	tx_frames;
+	u64	tx_broadcast_frames;
+	u64	tx_multicast_frames;
+	u64	tx_pause_frames;
+	u64	tx_64_byte_frames;
+	u64	tx_65_127_byte_frames;
+	u64	tx_128_255_byte_frames;
+	u64	tx_256_511_byte_frames;
+	u64	tx_512_1023_byte_frames;
+	u64	tx_1024_1518_byte_frames;
+	u64	tx_greater_than_1518_byte_frames;
+	u64	tx_underrun;
+	u64	tx_single_collision_frames;
+	u64	tx_multiple_collision_frames;
+	u64	tx_excessive_collisions;
+	u64	tx_late_collisions;
+	u64	tx_deferred_frames;
+	u64	tx_carrier_sense_errors;
+	u64	rx_octets_31_0;
+	u64	rx_octets_47_32;
+	u64	rx_frames;
+	u64	rx_broadcast_frames;
+	u64	rx_multicast_frames;
+	u64	rx_pause_frames;
+	u64	rx_64_byte_frames;
+	u64	rx_65_127_byte_frames;
+	u64	rx_128_255_byte_frames;
+	u64	rx_256_511_byte_frames;
+	u64	rx_512_1023_byte_frames;
+	u64	rx_1024_1518_byte_frames;
+	u64	rx_greater_than_1518_byte_frames;
+	u64	rx_undersized_frames;
+	u64	rx_oversize_frames;
+	u64	rx_jabbers;
+	u64	rx_frame_check_sequence_errors;
+	u64	rx_length_field_frame_errors;
+	u64	rx_symbol_errors;
+	u64	rx_alignment_errors;
+	u64	rx_resource_errors;
+	u64	rx_overruns;
+	u64	rx_ip_header_checksum_errors;
+	u64	rx_tcp_checksum_errors;
+	u64	rx_udp_checksum_errors;
 };
 
 /* Describes the name and offset of an individual statistic register, as
diff --git a/drivers/net/ethernet/cadence/macb_main.c b/drivers/net/ethernet/cadence/macb_main.c
index 48496209fb16..86f0d705e354 100644
--- a/drivers/net/ethernet/cadence/macb_main.c
+++ b/drivers/net/ethernet/cadence/macb_main.c
@@ -990,8 +990,8 @@ static int macb_mii_init(struct macb *bp)
 
 static void macb_update_stats(struct macb *bp)
 {
-	u32 *p = &bp->hw_stats.macb.rx_pause_frames;
-	u32 *end = &bp->hw_stats.macb.tx_pause_frames + 1;
+	u64 *p = &bp->hw_stats.macb.rx_pause_frames;
+	u64 *end = &bp->hw_stats.macb.tx_pause_frames + 1;
 	int offset = MACB_PFR;
 
 	WARN_ON((unsigned long)(end - p - 1) != (MACB_TPF - MACB_PFR) / 4);
@@ -3071,7 +3071,7 @@ static void gem_update_stats(struct macb *bp)
 	unsigned int i, q, idx;
 	unsigned long *stat;
 
-	u32 *p = &bp->hw_stats.gem.tx_octets_31_0;
+	u64 *p = &bp->hw_stats.gem.tx_octets_31_0;
 
 	for (i = 0; i < GEM_STATS_LEN; ++i, ++p) {
 		u32 offset = gem_statistics[i].offset;
@@ -3094,15 +3094,12 @@ static void gem_update_stats(struct macb *bp)
 			bp->ethtool_stats[idx++] = *stat;
 }
 
-static struct net_device_stats *gem_get_stats(struct macb *bp)
+static void gem_get_stats(struct macb *bp, struct rtnl_link_stats64 *nstat)
 {
 	struct gem_stats *hwstat = &bp->hw_stats.gem;
-	struct net_device_stats *nstat = &bp->dev->stats;
 
-	if (!netif_running(bp->dev))
-		return nstat;
-
-	gem_update_stats(bp);
+	if (netif_running(bp->dev))
+		gem_update_stats(bp);
 
 	nstat->rx_errors = (hwstat->rx_frame_check_sequence_errors +
 			    hwstat->rx_alignment_errors +
@@ -3131,8 +3128,6 @@ static struct net_device_stats *gem_get_stats(struct macb *bp)
 	nstat->tx_aborted_errors = hwstat->tx_excessive_collisions;
 	nstat->tx_carrier_errors = hwstat->tx_carrier_sense_errors;
 	nstat->tx_fifo_errors = hwstat->tx_underrun;
-
-	return nstat;
 }
 
 static void gem_get_ethtool_stats(struct net_device *dev,
@@ -3183,14 +3178,17 @@ static void gem_get_ethtool_strings(struct net_device *dev, u32 sset, u8 *p)
 	}
 }
 
-static struct net_device_stats *macb_get_stats(struct net_device *dev)
+static void macb_get_stats(struct net_device *dev,
+			   struct rtnl_link_stats64 *nstat)
 {
 	struct macb *bp = netdev_priv(dev);
-	struct net_device_stats *nstat = &bp->dev->stats;
 	struct macb_stats *hwstat = &bp->hw_stats.macb;
 
-	if (macb_is_gem(bp))
-		return gem_get_stats(bp);
+	netdev_stats_to_stats64(nstat, &bp->dev->stats);
+	if (macb_is_gem(bp)) {
+		gem_get_stats(bp, nstat);
+		return;
+	}
 
 	/* read stats from hardware */
 	macb_update_stats(bp);
@@ -3226,8 +3224,6 @@ static struct net_device_stats *macb_get_stats(struct net_device *dev)
 	nstat->tx_carrier_errors = hwstat->tx_carrier_errors;
 	nstat->tx_fifo_errors = hwstat->tx_underruns;
 	/* Don't know about heartbeat or window errors... */
-
-	return nstat;
 }
 
 static int macb_get_regs_len(struct net_device *netdev)
@@ -3910,7 +3906,7 @@ static const struct net_device_ops macb_netdev_ops = {
 	.ndo_stop		= macb_close,
 	.ndo_start_xmit		= macb_start_xmit,
 	.ndo_set_rx_mode	= macb_set_rx_mode,
-	.ndo_get_stats		= macb_get_stats,
+	.ndo_get_stats64	= macb_get_stats,
 	.ndo_eth_ioctl		= macb_ioctl,
 	.ndo_validate_addr	= eth_validate_addr,
 	.ndo_change_mtu		= macb_change_mtu,
@@ -4571,7 +4567,7 @@ static const struct net_device_ops at91ether_netdev_ops = {
 	.ndo_open		= at91ether_open,
 	.ndo_stop		= at91ether_close,
 	.ndo_start_xmit		= at91ether_start_xmit,
-	.ndo_get_stats		= macb_get_stats,
+	.ndo_get_stats64	= macb_get_stats,
 	.ndo_set_rx_mode	= macb_set_rx_mode,
 	.ndo_set_mac_address	= eth_mac_addr,
 	.ndo_eth_ioctl		= macb_ioctl,
-- 
2.35.1.1320.gc452695387.dirty


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH net-next 2/2] net: cadence: macb: Report standard stats
  2025-02-14 21:27 [PATCH net-next 0/2] net: cadence: macb: Modernize statistics reporting Sean Anderson
  2025-02-14 21:27 ` [PATCH net-next 1/2] net: cadence: macb: Convert to get_stats64 Sean Anderson
@ 2025-02-14 21:27 ` Sean Anderson
  2025-02-14 23:14   ` Andrew Lunn
  2025-02-19  2:10 ` [PATCH net-next 0/2] net: cadence: macb: Modernize statistics reporting patchwork-bot+netdevbpf
  2 siblings, 1 reply; 16+ messages in thread
From: Sean Anderson @ 2025-02-14 21:27 UTC (permalink / raw)
  To: Nicolas Ferre, Claudiu Beznea, netdev
  Cc: David S . Miller, Eric Dumazet, Andrew Lunn, Paolo Abeni,
	Jakub Kicinski, linux-kernel, Sean Anderson

Report standard statistics using the dedicated callbacks instead of
get_ethtool_stats.

OCTTX is split over two registers. Accumulating these registers
separately in gem_stats just means we need to combine them again later.
Instead, combine these stats before saving them, like is done for
ethtool_stats.

Signed-off-by: Sean Anderson <sean.anderson@linux.dev>
---

 drivers/net/ethernet/cadence/macb.h      |   6 +-
 drivers/net/ethernet/cadence/macb_main.c | 160 ++++++++++++++++++++++-
 2 files changed, 160 insertions(+), 6 deletions(-)

diff --git a/drivers/net/ethernet/cadence/macb.h b/drivers/net/ethernet/cadence/macb.h
index b4aa2b165bf3..f69b2b7c8802 100644
--- a/drivers/net/ethernet/cadence/macb.h
+++ b/drivers/net/ethernet/cadence/macb.h
@@ -975,8 +975,7 @@ struct macb_stats {
 };
 
 struct gem_stats {
-	u64	tx_octets_31_0;
-	u64	tx_octets_47_32;
+	u64	tx_octets;
 	u64	tx_frames;
 	u64	tx_broadcast_frames;
 	u64	tx_multicast_frames;
@@ -995,8 +994,7 @@ struct gem_stats {
 	u64	tx_late_collisions;
 	u64	tx_deferred_frames;
 	u64	tx_carrier_sense_errors;
-	u64	rx_octets_31_0;
-	u64	rx_octets_47_32;
+	u64	rx_octets;
 	u64	rx_frames;
 	u64	rx_broadcast_frames;
 	u64	rx_multicast_frames;
diff --git a/drivers/net/ethernet/cadence/macb_main.c b/drivers/net/ethernet/cadence/macb_main.c
index 86f0d705e354..4878c14121fb 100644
--- a/drivers/net/ethernet/cadence/macb_main.c
+++ b/drivers/net/ethernet/cadence/macb_main.c
@@ -3071,7 +3071,7 @@ static void gem_update_stats(struct macb *bp)
 	unsigned int i, q, idx;
 	unsigned long *stat;
 
-	u64 *p = &bp->hw_stats.gem.tx_octets_31_0;
+	u64 *p = &bp->hw_stats.gem.tx_octets;
 
 	for (i = 0; i < GEM_STATS_LEN; ++i, ++p) {
 		u32 offset = gem_statistics[i].offset;
@@ -3084,7 +3084,7 @@ static void gem_update_stats(struct macb *bp)
 			/* Add GEM_OCTTXH, GEM_OCTRXH */
 			val = bp->macb_reg_readl(bp, offset + 4);
 			bp->ethtool_stats[i] += ((u64)val) << 32;
-			*(++p) += val;
+			*(p++) += ((u64)val) << 32;
 		}
 	}
 
@@ -3226,6 +3226,154 @@ static void macb_get_stats(struct net_device *dev,
 	/* Don't know about heartbeat or window errors... */
 }
 
+static void macb_get_pause_stats(struct net_device *dev,
+				 struct ethtool_pause_stats *pause_stats)
+{
+	struct macb *bp = netdev_priv(dev);
+	struct macb_stats *hwstat = &bp->hw_stats.macb;
+
+	macb_update_stats(bp);
+	pause_stats->tx_pause_frames = hwstat->tx_pause_frames;
+	pause_stats->rx_pause_frames = hwstat->rx_pause_frames;
+}
+
+static void gem_get_pause_stats(struct net_device *dev,
+				struct ethtool_pause_stats *pause_stats)
+{
+	struct macb *bp = netdev_priv(dev);
+	struct gem_stats *hwstat = &bp->hw_stats.gem;
+
+	gem_update_stats(bp);
+	pause_stats->tx_pause_frames = hwstat->tx_pause_frames;
+	pause_stats->rx_pause_frames = hwstat->rx_pause_frames;
+}
+
+static void macb_get_eth_mac_stats(struct net_device *dev,
+				   struct ethtool_eth_mac_stats *mac_stats)
+{
+	struct macb *bp = netdev_priv(dev);
+	struct macb_stats *hwstat = &bp->hw_stats.macb;
+
+	macb_update_stats(bp);
+	mac_stats->FramesTransmittedOK = hwstat->tx_ok;
+	mac_stats->SingleCollisionFrames = hwstat->tx_single_cols;
+	mac_stats->MultipleCollisionFrames = hwstat->tx_multiple_cols;
+	mac_stats->FramesReceivedOK = hwstat->rx_ok;
+	mac_stats->FrameCheckSequenceErrors = hwstat->rx_fcs_errors;
+	mac_stats->AlignmentErrors = hwstat->rx_align_errors;
+	mac_stats->FramesWithDeferredXmissions = hwstat->tx_deferred;
+	mac_stats->LateCollisions = hwstat->tx_late_cols;
+	mac_stats->FramesAbortedDueToXSColls = hwstat->tx_excessive_cols;
+	mac_stats->FramesLostDueToIntMACXmitError = hwstat->tx_underruns;
+	mac_stats->CarrierSenseErrors = hwstat->tx_carrier_errors;
+	mac_stats->FramesLostDueToIntMACRcvError = hwstat->rx_overruns;
+	mac_stats->InRangeLengthErrors = hwstat->rx_length_mismatch;
+	mac_stats->FrameTooLongErrors = hwstat->rx_oversize_pkts;
+}
+
+static void gem_get_eth_mac_stats(struct net_device *dev,
+				  struct ethtool_eth_mac_stats *mac_stats)
+{
+	struct macb *bp = netdev_priv(dev);
+	struct gem_stats *hwstat = &bp->hw_stats.gem;
+
+	gem_update_stats(bp);
+	mac_stats->FramesTransmittedOK = hwstat->tx_frames;
+	mac_stats->SingleCollisionFrames = hwstat->tx_single_collision_frames;
+	mac_stats->MultipleCollisionFrames =
+		hwstat->tx_multiple_collision_frames;
+	mac_stats->FramesReceivedOK = hwstat->rx_frames;
+	mac_stats->FrameCheckSequenceErrors =
+		hwstat->rx_frame_check_sequence_errors;
+	mac_stats->AlignmentErrors = hwstat->rx_alignment_errors;
+	mac_stats->OctetsTransmittedOK = hwstat->tx_octets;
+	mac_stats->FramesWithDeferredXmissions = hwstat->tx_deferred_frames;
+	mac_stats->LateCollisions = hwstat->tx_late_collisions;
+	mac_stats->FramesAbortedDueToXSColls = hwstat->tx_excessive_collisions;
+	mac_stats->FramesLostDueToIntMACXmitError = hwstat->tx_underrun;
+	mac_stats->CarrierSenseErrors = hwstat->tx_carrier_sense_errors;
+	mac_stats->OctetsReceivedOK = hwstat->rx_octets;
+	mac_stats->MulticastFramesXmittedOK = hwstat->tx_multicast_frames;
+	mac_stats->BroadcastFramesXmittedOK = hwstat->tx_broadcast_frames;
+	mac_stats->MulticastFramesReceivedOK = hwstat->rx_multicast_frames;
+	mac_stats->BroadcastFramesReceivedOK = hwstat->rx_broadcast_frames;
+	mac_stats->InRangeLengthErrors = hwstat->rx_length_field_frame_errors;
+	mac_stats->FrameTooLongErrors = hwstat->rx_oversize_frames;
+}
+
+/* TODO: Report SQE test errors when added to phy_stats */
+static void macb_get_eth_phy_stats(struct net_device *dev,
+				   struct ethtool_eth_phy_stats *phy_stats)
+{
+	struct macb *bp = netdev_priv(dev);
+	struct macb_stats *hwstat = &bp->hw_stats.macb;
+
+	macb_update_stats(bp);
+	phy_stats->SymbolErrorDuringCarrier = hwstat->rx_symbol_errors;
+}
+
+static void gem_get_eth_phy_stats(struct net_device *dev,
+				  struct ethtool_eth_phy_stats *phy_stats)
+{
+	struct macb *bp = netdev_priv(dev);
+	struct gem_stats *hwstat = &bp->hw_stats.gem;
+
+	gem_update_stats(bp);
+	phy_stats->SymbolErrorDuringCarrier = hwstat->rx_symbol_errors;
+}
+
+static void macb_get_rmon_stats(struct net_device *dev,
+				struct ethtool_rmon_stats *rmon_stats,
+				const struct ethtool_rmon_hist_range **ranges)
+{
+	struct macb *bp = netdev_priv(dev);
+	struct macb_stats *hwstat = &bp->hw_stats.macb;
+
+	macb_update_stats(bp);
+	rmon_stats->undersize_pkts = hwstat->rx_undersize_pkts;
+	rmon_stats->oversize_pkts = hwstat->rx_oversize_pkts;
+	rmon_stats->jabbers = hwstat->rx_jabbers;
+}
+
+static const struct ethtool_rmon_hist_range gem_rmon_ranges[] = {
+	{   64,    64 },
+	{   65,   127 },
+	{  128,   255 },
+	{  256,   511 },
+	{  512,  1023 },
+	{ 1024,  1518 },
+	{ 1519, 16384 },
+	{ },
+};
+
+static void gem_get_rmon_stats(struct net_device *dev,
+			       struct ethtool_rmon_stats *rmon_stats,
+			       const struct ethtool_rmon_hist_range **ranges)
+{
+	struct macb *bp = netdev_priv(dev);
+	struct gem_stats *hwstat = &bp->hw_stats.gem;
+
+	gem_update_stats(bp);
+	rmon_stats->undersize_pkts = hwstat->rx_undersized_frames;
+	rmon_stats->oversize_pkts = hwstat->rx_oversize_frames;
+	rmon_stats->jabbers = hwstat->rx_jabbers;
+	rmon_stats->hist[0] = hwstat->rx_64_byte_frames;
+	rmon_stats->hist[1] = hwstat->rx_65_127_byte_frames;
+	rmon_stats->hist[2] = hwstat->rx_128_255_byte_frames;
+	rmon_stats->hist[3] = hwstat->rx_256_511_byte_frames;
+	rmon_stats->hist[4] = hwstat->rx_512_1023_byte_frames;
+	rmon_stats->hist[5] = hwstat->rx_1024_1518_byte_frames;
+	rmon_stats->hist[6] = hwstat->rx_greater_than_1518_byte_frames;
+	rmon_stats->hist_tx[0] = hwstat->tx_64_byte_frames;
+	rmon_stats->hist_tx[1] = hwstat->tx_65_127_byte_frames;
+	rmon_stats->hist_tx[2] = hwstat->tx_128_255_byte_frames;
+	rmon_stats->hist_tx[3] = hwstat->tx_256_511_byte_frames;
+	rmon_stats->hist_tx[4] = hwstat->tx_512_1023_byte_frames;
+	rmon_stats->hist_tx[5] = hwstat->tx_1024_1518_byte_frames;
+	rmon_stats->hist_tx[6] = hwstat->tx_greater_than_1518_byte_frames;
+	*ranges = gem_rmon_ranges;
+}
+
 static int macb_get_regs_len(struct net_device *netdev)
 {
 	return MACB_GREGS_NBR * sizeof(u32);
@@ -3752,6 +3900,10 @@ static const struct ethtool_ops macb_ethtool_ops = {
 	.get_regs		= macb_get_regs,
 	.get_link		= ethtool_op_get_link,
 	.get_ts_info		= ethtool_op_get_ts_info,
+	.get_pause_stats	= macb_get_pause_stats,
+	.get_eth_mac_stats	= macb_get_eth_mac_stats,
+	.get_eth_phy_stats	= macb_get_eth_phy_stats,
+	.get_rmon_stats		= macb_get_rmon_stats,
 	.get_wol		= macb_get_wol,
 	.set_wol		= macb_set_wol,
 	.get_link_ksettings     = macb_get_link_ksettings,
@@ -3770,6 +3922,10 @@ static const struct ethtool_ops gem_ethtool_ops = {
 	.get_ethtool_stats	= gem_get_ethtool_stats,
 	.get_strings		= gem_get_ethtool_strings,
 	.get_sset_count		= gem_get_sset_count,
+	.get_pause_stats	= gem_get_pause_stats,
+	.get_eth_mac_stats	= gem_get_eth_mac_stats,
+	.get_eth_phy_stats	= gem_get_eth_phy_stats,
+	.get_rmon_stats		= gem_get_rmon_stats,
 	.get_link_ksettings     = macb_get_link_ksettings,
 	.set_link_ksettings     = macb_set_link_ksettings,
 	.get_ringparam		= macb_get_ringparam,
-- 
2.35.1.1320.gc452695387.dirty


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* Re: [PATCH net-next 1/2] net: cadence: macb: Convert to get_stats64
  2025-02-14 21:27 ` [PATCH net-next 1/2] net: cadence: macb: Convert to get_stats64 Sean Anderson
@ 2025-02-14 22:59   ` Andrew Lunn
  2025-02-18 16:00     ` Sean Anderson
  0 siblings, 1 reply; 16+ messages in thread
From: Andrew Lunn @ 2025-02-14 22:59 UTC (permalink / raw)
  To: Sean Anderson
  Cc: Nicolas Ferre, Claudiu Beznea, netdev, David S . Miller,
	Eric Dumazet, Andrew Lunn, Paolo Abeni, Jakub Kicinski,
	linux-kernel

On Fri, Feb 14, 2025 at 04:27:02PM -0500, Sean Anderson wrote:
> Convert the existing get_stats implementation to get_stats64. Since we
> now report 64-bit values, increase the counters to 64-bits as well.

It would be good to add some comments about why this is safe on 32 bit
systems. Are the needed locks in place that you cannot see a partial
update?

	Andrew

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH net-next 2/2] net: cadence: macb: Report standard stats
  2025-02-14 21:27 ` [PATCH net-next 2/2] net: cadence: macb: Report standard stats Sean Anderson
@ 2025-02-14 23:14   ` Andrew Lunn
  2025-02-15 16:40     ` Jakub Kicinski
  0 siblings, 1 reply; 16+ messages in thread
From: Andrew Lunn @ 2025-02-14 23:14 UTC (permalink / raw)
  To: Sean Anderson
  Cc: Nicolas Ferre, Claudiu Beznea, netdev, David S . Miller,
	Eric Dumazet, Andrew Lunn, Paolo Abeni, Jakub Kicinski,
	linux-kernel

> +static const struct ethtool_rmon_hist_range gem_rmon_ranges[] = {
> +	{   64,    64 },
> +	{   65,   127 },
> +	{  128,   255 },
> +	{  256,   511 },
> +	{  512,  1023 },
> +	{ 1024,  1518 },
> +	{ 1519, 16384 },
> +	{ },
> +};

static const struct ethtool_rmon_hist_range a5psw_rmon_ranges[] = {
	{ 0, 64 },
	{ 65, 127 },
	{ 128, 255 },
	{ 256, 511 },
	{ 512, 1023 },
	{ 1024, 1518 },
	{ 1519, A5PSW_MAX_MTU },
	{}
};

static const struct ethtool_rmon_hist_range axienet_rmon_ranges[] = {
        {   64,    64 },
        {   65,   127 },
        {  128,   255 },
        {  256,   511 },
        {  512,  1023 },
        { 1024,  1518 },
        { 1519, 16384 },
        { },
};

static const struct ethtool_rmon_hist_range bcmasp_rmon_ranges[] = {
        {    0,   64},
        {   65,  127},
        {  128,  255},
        {  256,  511},
        {  512, 1023},
        { 1024, 1518},
        { 1519, 1522},
        {}
};

static const struct ethtool_rmon_hist_range mlxsw_rmon_ranges[] = {
        {    0,    64 },
        {   65,   127 },
        {  128,   255 },
        {  256,   511 },
        {  512,  1023 },
        { 1024,  1518 },
        { 1519,  2047 },
        { 2048,  4095 },
        { 4096,  8191 },
        { 8192, 10239 },
        {}
};

static const struct ethtool_rmon_hist_range mlx5e_rmon_ranges[] = {
        {    0,    64 },
        {   65,   127 },
        {  128,   255 },
        {  256,   511 },
        {  512,  1023 },
        { 1024,  1518 },
        { 1519,  2047 },
        { 2048,  4095 },
        { 4096,  8191 },
        { 8192, 10239 },
        {}
};

Could we maybe have one central table which drivers share? I assume
IETF defined these bands as part or RMON?

	Andrew

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH net-next 2/2] net: cadence: macb: Report standard stats
  2025-02-14 23:14   ` Andrew Lunn
@ 2025-02-15 16:40     ` Jakub Kicinski
  0 siblings, 0 replies; 16+ messages in thread
From: Jakub Kicinski @ 2025-02-15 16:40 UTC (permalink / raw)
  To: Andrew Lunn
  Cc: Sean Anderson, Nicolas Ferre, Claudiu Beznea, netdev,
	David S . Miller, Eric Dumazet, Andrew Lunn, Paolo Abeni,
	linux-kernel

On Sat, 15 Feb 2025 00:14:35 +0100 Andrew Lunn wrote:
> Could we maybe have one central table which drivers share? I assume
> IETF defined these bands as part or RMON?

IIRC RMON standardizes these three:

        {    0,    64 },
        {   65,   127 },
        {  128,   255 },
        {  256,   511 },
        {  512,  1023 },
        { 1024,  1518 },

Once we get into jumbo (as you probably noticed) the tables start 
to diverge, mostly because max MTU is different.

On one hand common code is nice, on the other I don't think defining
this table has ever been a source of confusion, and common table won't
buy users anything. But, would be yet another thing we have to check
in review, no?

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH net-next 1/2] net: cadence: macb: Convert to get_stats64
  2025-02-14 22:59   ` Andrew Lunn
@ 2025-02-18 16:00     ` Sean Anderson
  0 siblings, 0 replies; 16+ messages in thread
From: Sean Anderson @ 2025-02-18 16:00 UTC (permalink / raw)
  To: Andrew Lunn
  Cc: Nicolas Ferre, Claudiu Beznea, netdev, David S . Miller,
	Eric Dumazet, Andrew Lunn, Paolo Abeni, Jakub Kicinski,
	linux-kernel

On 2/14/25 17:59, Andrew Lunn wrote:
> On Fri, Feb 14, 2025 at 04:27:02PM -0500, Sean Anderson wrote:
>> Convert the existing get_stats implementation to get_stats64. Since we
>> now report 64-bit values, increase the counters to 64-bits as well.
> 
> It would be good to add some comments about why this is safe on 32 bit
> systems. Are the needed locks in place that you cannot see a partial
> update?

Well, it's no more unsafe than the current code which does RMW without
synchronization. So I guess I'll send another patch to add some locking.

--Sean

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH net-next 0/2] net: cadence: macb: Modernize statistics reporting
  2025-02-14 21:27 [PATCH net-next 0/2] net: cadence: macb: Modernize statistics reporting Sean Anderson
  2025-02-14 21:27 ` [PATCH net-next 1/2] net: cadence: macb: Convert to get_stats64 Sean Anderson
  2025-02-14 21:27 ` [PATCH net-next 2/2] net: cadence: macb: Report standard stats Sean Anderson
@ 2025-02-19  2:10 ` patchwork-bot+netdevbpf
  2025-02-20 16:01   ` Sean Anderson
  2 siblings, 1 reply; 16+ messages in thread
From: patchwork-bot+netdevbpf @ 2025-02-19  2:10 UTC (permalink / raw)
  To: Sean Anderson
  Cc: nicolas.ferre, claudiu.beznea, netdev, davem, edumazet,
	andrew+netdev, pabeni, kuba, linux-kernel

Hello:

This series was applied to netdev/net-next.git (main)
by Jakub Kicinski <kuba@kernel.org>:

On Fri, 14 Feb 2025 16:27:01 -0500 you wrote:
> Implement the modern interfaces for statistics reporting.
> 
> 
> Sean Anderson (2):
>   net: cadence: macb: Convert to get_stats64
>   net: cadence: macb: Report standard stats
> 
> [...]

Here is the summary with links:
  - [net-next,1/2] net: cadence: macb: Convert to get_stats64
    https://git.kernel.org/netdev/net-next/c/75696dd0fd72
  - [net-next,2/2] net: cadence: macb: Report standard stats
    https://git.kernel.org/netdev/net-next/c/f6af690a295a

You are awesome, thank you!
-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH net-next 0/2] net: cadence: macb: Modernize statistics reporting
  2025-02-19  2:10 ` [PATCH net-next 0/2] net: cadence: macb: Modernize statistics reporting patchwork-bot+netdevbpf
@ 2025-02-20 16:01   ` Sean Anderson
  2025-02-20 16:59     ` Jakub Kicinski
  0 siblings, 1 reply; 16+ messages in thread
From: Sean Anderson @ 2025-02-20 16:01 UTC (permalink / raw)
  To: patchwork-bot+netdevbpf
  Cc: nicolas.ferre, claudiu.beznea, netdev, davem, edumazet,
	andrew+netdev, pabeni, kuba, linux-kernel

On 2/18/25 21:10, patchwork-bot+netdevbpf@kernel.org wrote:
> Hello:
> 
> This series was applied to netdev/net-next.git (main)
> by Jakub Kicinski <kuba@kernel.org>:
> 
> On Fri, 14 Feb 2025 16:27:01 -0500 you wrote:
>> Implement the modern interfaces for statistics reporting.
>> 
>> 
>> Sean Anderson (2):
>>   net: cadence: macb: Convert to get_stats64
>>   net: cadence: macb: Report standard stats
>> 
>> [...]
> 
> Here is the summary with links:
>   - [net-next,1/2] net: cadence: macb: Convert to get_stats64
>     https://git.kernel.org/netdev/net-next/c/75696dd0fd72
>   - [net-next,2/2] net: cadence: macb: Report standard stats
>     https://git.kernel.org/netdev/net-next/c/f6af690a295a
> 
> You are awesome, thank you!

I think this should be deferred until v2 of [1] is applied, to make
backporting the fix easier.

--Sean

[1] lore.kernel.org/netdev/20250218195036.37137-1-sean.anderson@linux.dev

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH net-next 0/2] net: cadence: macb: Modernize statistics reporting
  2025-02-20 16:01   ` Sean Anderson
@ 2025-02-20 16:59     ` Jakub Kicinski
  2025-02-20 17:25       ` Sean Anderson
  0 siblings, 1 reply; 16+ messages in thread
From: Jakub Kicinski @ 2025-02-20 16:59 UTC (permalink / raw)
  To: Sean Anderson
  Cc: patchwork-bot+netdevbpf, nicolas.ferre, claudiu.beznea, netdev,
	davem, edumazet, andrew+netdev, pabeni, linux-kernel

On Thu, 20 Feb 2025 11:01:10 -0500 Sean Anderson wrote:
> > Here is the summary with links:
> >   - [net-next,1/2] net: cadence: macb: Convert to get_stats64
> >     https://git.kernel.org/netdev/net-next/c/75696dd0fd72
> >   - [net-next,2/2] net: cadence: macb: Report standard stats
> >     https://git.kernel.org/netdev/net-next/c/f6af690a295a
> > 
> > You are awesome, thank you!  
> 
> I think this should be deferred until v2 of [1] is applied, to make
> backporting the fix easier.

ETOOLATE :) networking trees don't rebase

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH net-next 0/2] net: cadence: macb: Modernize statistics reporting
  2025-02-20 16:59     ` Jakub Kicinski
@ 2025-02-20 17:25       ` Sean Anderson
  2025-02-20 18:18         ` Jakub Kicinski
  0 siblings, 1 reply; 16+ messages in thread
From: Sean Anderson @ 2025-02-20 17:25 UTC (permalink / raw)
  To: Jakub Kicinski
  Cc: patchwork-bot+netdevbpf, nicolas.ferre, claudiu.beznea, netdev,
	davem, edumazet, andrew+netdev, pabeni, linux-kernel

On 2/20/25 11:59, Jakub Kicinski wrote:
> On Thu, 20 Feb 2025 11:01:10 -0500 Sean Anderson wrote:
>> > Here is the summary with links:
>> >   - [net-next,1/2] net: cadence: macb: Convert to get_stats64
>> >     https://git.kernel.org/netdev/net-next/c/75696dd0fd72
>> >   - [net-next,2/2] net: cadence: macb: Report standard stats
>> >     https://git.kernel.org/netdev/net-next/c/f6af690a295a
>> > 
>> > You are awesome, thank you!  
>> 
>> I think this should be deferred until v2 of [1] is applied, to make
>> backporting the fix easier.
> 
> ETOOLATE :) networking trees don't rebase

Well, I was expecting a revert and then I would resend this series once
the linked patch was applied.

I guess I can send another patch adding locking?

--Sean

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH net-next 0/2] net: cadence: macb: Modernize statistics reporting
  2025-02-20 17:25       ` Sean Anderson
@ 2025-02-20 18:18         ` Jakub Kicinski
  2025-02-20 18:22           ` Sean Anderson
  0 siblings, 1 reply; 16+ messages in thread
From: Jakub Kicinski @ 2025-02-20 18:18 UTC (permalink / raw)
  To: Sean Anderson
  Cc: patchwork-bot+netdevbpf, nicolas.ferre, claudiu.beznea, netdev,
	davem, edumazet, andrew+netdev, pabeni, linux-kernel

On Thu, 20 Feb 2025 12:25:09 -0500 Sean Anderson wrote:
> >> I think this should be deferred until v2 of [1] is applied, to make
> >> backporting the fix easier.  
> > 
> > ETOOLATE :) networking trees don't rebase  
> 
> Well, I was expecting a revert and then I would resend this series once
> the linked patch was applied.
> 
> I guess I can send another patch adding locking?

Assuming the fix is applied to net:
Will the trees conflict?
If no - will the code in net still work (just lacking lock protection)?

If there is a conflict you can share a resolution with me and I'll slap
it on as part of the merge.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH net-next 0/2] net: cadence: macb: Modernize statistics reporting
  2025-02-20 18:18         ` Jakub Kicinski
@ 2025-02-20 18:22           ` Sean Anderson
  2025-02-20 18:32             ` Jakub Kicinski
  0 siblings, 1 reply; 16+ messages in thread
From: Sean Anderson @ 2025-02-20 18:22 UTC (permalink / raw)
  To: Jakub Kicinski
  Cc: patchwork-bot+netdevbpf, nicolas.ferre, claudiu.beznea, netdev,
	davem, edumazet, andrew+netdev, pabeni, linux-kernel

On 2/20/25 13:18, Jakub Kicinski wrote:
> On Thu, 20 Feb 2025 12:25:09 -0500 Sean Anderson wrote:
>> >> I think this should be deferred until v2 of [1] is applied, to make
>> >> backporting the fix easier.  
>> > 
>> > ETOOLATE :) networking trees don't rebase  
>> 
>> Well, I was expecting a revert and then I would resend this series once
>> the linked patch was applied.
>> 
>> I guess I can send another patch adding locking?
> 
> Assuming the fix is applied to net:
> Will the trees conflict?

Yes.

> If no - will the code in net still work (just lacking lock protection)?
> 
> If there is a conflict you can share a resolution with me and I'll slap
> it on as part of the merge.

OK, what's the best way to create that? git rerere?

--Sean

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH net-next 0/2] net: cadence: macb: Modernize statistics reporting
  2025-02-20 18:22           ` Sean Anderson
@ 2025-02-20 18:32             ` Jakub Kicinski
  2025-02-20 18:42               ` Sean Anderson
  0 siblings, 1 reply; 16+ messages in thread
From: Jakub Kicinski @ 2025-02-20 18:32 UTC (permalink / raw)
  To: Sean Anderson
  Cc: patchwork-bot+netdevbpf, nicolas.ferre, claudiu.beznea, netdev,
	davem, edumazet, andrew+netdev, pabeni, linux-kernel

On Thu, 20 Feb 2025 13:22:29 -0500 Sean Anderson wrote:
> > If no - will the code in net still work (just lacking lock protection)?
> > 
> > If there is a conflict you can share a resolution with me and I'll slap
> > it on as part of the merge.  
> 
> OK, what's the best way to create that? git rerere?

rerere image or a three way diff will work

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH net-next 0/2] net: cadence: macb: Modernize statistics reporting
  2025-02-20 18:32             ` Jakub Kicinski
@ 2025-02-20 18:42               ` Sean Anderson
  2025-02-20 18:50                 ` [PATCH net-next 0/2] net: cadence: macb: Modernize statistics reporting (manual merge) Jakub Kicinski
  0 siblings, 1 reply; 16+ messages in thread
From: Sean Anderson @ 2025-02-20 18:42 UTC (permalink / raw)
  To: Jakub Kicinski
  Cc: patchwork-bot+netdevbpf, nicolas.ferre, claudiu.beznea, netdev,
	davem, edumazet, andrew+netdev, pabeni, linux-kernel

On 2/20/25 13:32, Jakub Kicinski wrote:
> On Thu, 20 Feb 2025 13:22:29 -0500 Sean Anderson wrote:
>> > If no - will the code in net still work (just lacking lock protection)?
>> > 
>> > If there is a conflict you can share a resolution with me and I'll slap
>> > it on as part of the merge.  
>> 
>> OK, what's the best way to create that? git rerere?
> 
> rerere image or a three way diff will work

--- a/drivers/net/ethernet/cadence/macb_main.c
+++ b/drivers/net/ethernet/cadence/macb_main.c
@@ -3098,16 +3098,9 @@
 {
 	struct gem_stats *hwstat = &bp->hw_stats.gem;
 
-<<<<<<<
-	if (!netif_running(bp->dev))
-		return nstat;
-
 	spin_lock_irq(&bp->stats_lock);
-	gem_update_stats(bp);
-=======
 	if (netif_running(bp->dev))
 		gem_update_stats(bp);
->>>>>>>
 
 	nstat->rx_errors = (hwstat->rx_frame_check_sequence_errors +
 			    hwstat->rx_alignment_errors +
@@ -3136,12 +3129,7 @@
 	nstat->tx_aborted_errors = hwstat->tx_excessive_collisions;
 	nstat->tx_carrier_errors = hwstat->tx_carrier_sense_errors;
 	nstat->tx_fifo_errors = hwstat->tx_underrun;
-<<<<<<<
-=======
 	spin_unlock_irq(&bp->stats_lock);
-
-	return nstat;
->>>>>>>
 }
 
 static void gem_get_ethtool_stats(struct net_device *dev,
@@ -3240,11 +3228,8 @@
 	nstat->tx_carrier_errors = hwstat->tx_carrier_errors;
 	nstat->tx_fifo_errors = hwstat->tx_underruns;
 	/* Don't know about heartbeat or window errors... */
-<<<<<<<
 	spin_unlock_irq(&bp->stats_lock);
-=======
 }
->>>>>>>
 
 static void macb_get_pause_stats(struct net_device *dev,
 				 struct ethtool_pause_stats *pause_stats)


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH net-next 0/2] net: cadence: macb: Modernize statistics reporting (manual merge)
  2025-02-20 18:42               ` Sean Anderson
@ 2025-02-20 18:50                 ` Jakub Kicinski
  0 siblings, 0 replies; 16+ messages in thread
From: Jakub Kicinski @ 2025-02-20 18:50 UTC (permalink / raw)
  To: Sean Anderson
  Cc: patchwork-bot+netdevbpf, nicolas.ferre, claudiu.beznea, netdev,
	davem, edumazet, andrew+netdev, pabeni, linux-kernel

On Thu, 20 Feb 2025 13:42:25 -0500 Sean Anderson wrote:
> On 2/20/25 13:32, Jakub Kicinski wrote:
> > On Thu, 20 Feb 2025 13:22:29 -0500 Sean Anderson wrote:  
> >> OK, what's the best way to create that? git rerere?  
> > 
> > rerere image or a three way diff will work  
> 
> --- a/drivers/net/ethernet/cadence/macb_main.c
> +++ b/drivers/net/ethernet/cadence/macb_main.c

That should work, thanks!

^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2025-02-20 18:50 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-02-14 21:27 [PATCH net-next 0/2] net: cadence: macb: Modernize statistics reporting Sean Anderson
2025-02-14 21:27 ` [PATCH net-next 1/2] net: cadence: macb: Convert to get_stats64 Sean Anderson
2025-02-14 22:59   ` Andrew Lunn
2025-02-18 16:00     ` Sean Anderson
2025-02-14 21:27 ` [PATCH net-next 2/2] net: cadence: macb: Report standard stats Sean Anderson
2025-02-14 23:14   ` Andrew Lunn
2025-02-15 16:40     ` Jakub Kicinski
2025-02-19  2:10 ` [PATCH net-next 0/2] net: cadence: macb: Modernize statistics reporting patchwork-bot+netdevbpf
2025-02-20 16:01   ` Sean Anderson
2025-02-20 16:59     ` Jakub Kicinski
2025-02-20 17:25       ` Sean Anderson
2025-02-20 18:18         ` Jakub Kicinski
2025-02-20 18:22           ` Sean Anderson
2025-02-20 18:32             ` Jakub Kicinski
2025-02-20 18:42               ` Sean Anderson
2025-02-20 18:50                 ` [PATCH net-next 0/2] net: cadence: macb: Modernize statistics reporting (manual merge) Jakub Kicinski

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.