From: Jamie Iles <jamie@jamieiles.com> To: netdev@vger.kernel.org, linux-arm-kernel@lists.infradead.org Cc: plagnioj@jcrosoft.com, Jamie Iles <jamie@jamieiles.com> Subject: [PATCHv3 7/9] macb: support statistics for GEM devices Date: Tue, 9 Aug 2011 10:16:49 +0100 [thread overview] Message-ID: <1312881411-2376-8-git-send-email-jamie@jamieiles.com> (raw) In-Reply-To: <1312881411-2376-1-git-send-email-jamie@jamieiles.com> GEM devices have a different number of statistics registers and they are at a different offset to MACB devices. Make the statistics collection method dependent on device type. Signed-off-by: Jamie Iles <jamie@jamieiles.com> Acked-by: David S. Miller <davem@davemloft.net> Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com> --- drivers/net/macb.c | 57 +++++++++++++++++++++++++++++++++++++++++++++++++-- drivers/net/macb.h | 54 ++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 107 insertions(+), 4 deletions(-) diff --git a/drivers/net/macb.c b/drivers/net/macb.c index fce88f9..0e35804 100644 --- a/drivers/net/macb.c +++ b/drivers/net/macb.c @@ -283,8 +283,8 @@ err_out: static void macb_update_stats(struct macb *bp) { u32 __iomem *reg = bp->regs + MACB_PFR; - u32 *p = &bp->hw_stats.rx_pause_frames; - u32 *end = &bp->hw_stats.tx_pause_frames + 1; + u32 *p = &bp->hw_stats.macb.rx_pause_frames; + u32 *end = &bp->hw_stats.macb.tx_pause_frames + 1; WARN_ON((unsigned long)(end - p - 1) != (MACB_TPF - MACB_PFR) / 4); @@ -1043,11 +1043,62 @@ static int macb_close(struct net_device *dev) return 0; } +static void gem_update_stats(struct macb *bp) +{ + u32 __iomem *reg = bp->regs + GEM_OTX; + u32 *p = &bp->hw_stats.gem.tx_octets_31_0; + u32 *end = &bp->hw_stats.gem.rx_udp_checksum_errors + 1; + + for (; p < end; p++, reg++) + *p += __raw_readl(reg); +} + +static struct net_device_stats *gem_get_stats(struct macb *bp) +{ + struct gem_stats *hwstat = &bp->hw_stats.gem; + struct net_device_stats *nstat = &bp->stats; + + gem_update_stats(bp); + + nstat->rx_errors = (hwstat->rx_frame_check_sequence_errors + + hwstat->rx_alignment_errors + + hwstat->rx_resource_errors + + hwstat->rx_overruns + + hwstat->rx_oversize_frames + + hwstat->rx_jabbers + + hwstat->rx_undersized_frames + + hwstat->rx_length_field_frame_errors); + nstat->tx_errors = (hwstat->tx_late_collisions + + hwstat->tx_excessive_collisions + + hwstat->tx_underrun + + hwstat->tx_carrier_sense_errors); + nstat->multicast = hwstat->rx_multicast_frames; + nstat->collisions = (hwstat->tx_single_collision_frames + + hwstat->tx_multiple_collision_frames + + hwstat->tx_excessive_collisions); + nstat->rx_length_errors = (hwstat->rx_oversize_frames + + hwstat->rx_jabbers + + hwstat->rx_undersized_frames + + hwstat->rx_length_field_frame_errors); + nstat->rx_over_errors = hwstat->rx_resource_errors; + nstat->rx_crc_errors = hwstat->rx_frame_check_sequence_errors; + nstat->rx_frame_errors = hwstat->rx_alignment_errors; + nstat->rx_fifo_errors = hwstat->rx_overruns; + 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 struct net_device_stats *macb_get_stats(struct net_device *dev) { struct macb *bp = netdev_priv(dev); struct net_device_stats *nstat = &bp->stats; - struct macb_stats *hwstat = &bp->hw_stats; + struct macb_stats *hwstat = &bp->hw_stats.macb; + + if (macb_is_gem(bp)) + return gem_get_stats(bp); /* read stats from hardware */ macb_update_stats(bp); diff --git a/drivers/net/macb.h b/drivers/net/macb.h index 354ed8f..1367b92 100644 --- a/drivers/net/macb.h +++ b/drivers/net/macb.h @@ -68,6 +68,7 @@ #define GEM_HRT 0x0084 #define GEM_SA1B 0x0088 #define GEM_SA1T 0x008C +#define GEM_OTX 0x0100 /* Bitfields in NCR */ #define MACB_LB_OFFSET 0 @@ -425,6 +426,54 @@ struct macb_stats { u32 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; +}; + struct macb { void __iomem *regs; @@ -443,7 +492,10 @@ struct macb { struct net_device *dev; struct napi_struct napi; struct net_device_stats stats; - struct macb_stats hw_stats; + union { + struct macb_stats macb; + struct gem_stats gem; + } hw_stats; dma_addr_t rx_ring_dma; dma_addr_t tx_ring_dma; -- 1.7.4.1
WARNING: multiple messages have this Message-ID (diff)
From: jamie@jamieiles.com (Jamie Iles) To: linux-arm-kernel@lists.infradead.org Subject: [PATCHv3 7/9] macb: support statistics for GEM devices Date: Tue, 9 Aug 2011 10:16:49 +0100 [thread overview] Message-ID: <1312881411-2376-8-git-send-email-jamie@jamieiles.com> (raw) In-Reply-To: <1312881411-2376-1-git-send-email-jamie@jamieiles.com> GEM devices have a different number of statistics registers and they are at a different offset to MACB devices. Make the statistics collection method dependent on device type. Signed-off-by: Jamie Iles <jamie@jamieiles.com> Acked-by: David S. Miller <davem@davemloft.net> Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com> --- drivers/net/macb.c | 57 +++++++++++++++++++++++++++++++++++++++++++++++++-- drivers/net/macb.h | 54 ++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 107 insertions(+), 4 deletions(-) diff --git a/drivers/net/macb.c b/drivers/net/macb.c index fce88f9..0e35804 100644 --- a/drivers/net/macb.c +++ b/drivers/net/macb.c @@ -283,8 +283,8 @@ err_out: static void macb_update_stats(struct macb *bp) { u32 __iomem *reg = bp->regs + MACB_PFR; - u32 *p = &bp->hw_stats.rx_pause_frames; - u32 *end = &bp->hw_stats.tx_pause_frames + 1; + u32 *p = &bp->hw_stats.macb.rx_pause_frames; + u32 *end = &bp->hw_stats.macb.tx_pause_frames + 1; WARN_ON((unsigned long)(end - p - 1) != (MACB_TPF - MACB_PFR) / 4); @@ -1043,11 +1043,62 @@ static int macb_close(struct net_device *dev) return 0; } +static void gem_update_stats(struct macb *bp) +{ + u32 __iomem *reg = bp->regs + GEM_OTX; + u32 *p = &bp->hw_stats.gem.tx_octets_31_0; + u32 *end = &bp->hw_stats.gem.rx_udp_checksum_errors + 1; + + for (; p < end; p++, reg++) + *p += __raw_readl(reg); +} + +static struct net_device_stats *gem_get_stats(struct macb *bp) +{ + struct gem_stats *hwstat = &bp->hw_stats.gem; + struct net_device_stats *nstat = &bp->stats; + + gem_update_stats(bp); + + nstat->rx_errors = (hwstat->rx_frame_check_sequence_errors + + hwstat->rx_alignment_errors + + hwstat->rx_resource_errors + + hwstat->rx_overruns + + hwstat->rx_oversize_frames + + hwstat->rx_jabbers + + hwstat->rx_undersized_frames + + hwstat->rx_length_field_frame_errors); + nstat->tx_errors = (hwstat->tx_late_collisions + + hwstat->tx_excessive_collisions + + hwstat->tx_underrun + + hwstat->tx_carrier_sense_errors); + nstat->multicast = hwstat->rx_multicast_frames; + nstat->collisions = (hwstat->tx_single_collision_frames + + hwstat->tx_multiple_collision_frames + + hwstat->tx_excessive_collisions); + nstat->rx_length_errors = (hwstat->rx_oversize_frames + + hwstat->rx_jabbers + + hwstat->rx_undersized_frames + + hwstat->rx_length_field_frame_errors); + nstat->rx_over_errors = hwstat->rx_resource_errors; + nstat->rx_crc_errors = hwstat->rx_frame_check_sequence_errors; + nstat->rx_frame_errors = hwstat->rx_alignment_errors; + nstat->rx_fifo_errors = hwstat->rx_overruns; + 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 struct net_device_stats *macb_get_stats(struct net_device *dev) { struct macb *bp = netdev_priv(dev); struct net_device_stats *nstat = &bp->stats; - struct macb_stats *hwstat = &bp->hw_stats; + struct macb_stats *hwstat = &bp->hw_stats.macb; + + if (macb_is_gem(bp)) + return gem_get_stats(bp); /* read stats from hardware */ macb_update_stats(bp); diff --git a/drivers/net/macb.h b/drivers/net/macb.h index 354ed8f..1367b92 100644 --- a/drivers/net/macb.h +++ b/drivers/net/macb.h @@ -68,6 +68,7 @@ #define GEM_HRT 0x0084 #define GEM_SA1B 0x0088 #define GEM_SA1T 0x008C +#define GEM_OTX 0x0100 /* Bitfields in NCR */ #define MACB_LB_OFFSET 0 @@ -425,6 +426,54 @@ struct macb_stats { u32 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; +}; + struct macb { void __iomem *regs; @@ -443,7 +492,10 @@ struct macb { struct net_device *dev; struct napi_struct napi; struct net_device_stats stats; - struct macb_stats hw_stats; + union { + struct macb_stats macb; + struct gem_stats gem; + } hw_stats; dma_addr_t rx_ring_dma; dma_addr_t tx_ring_dma; -- 1.7.4.1
next prev parent reply other threads:[~2011-08-09 9:18 UTC|newest] Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top 2011-08-09 9:16 [PATCHv3 0/9] macb: add support for Cadence GEM Jamie Iles 2011-08-09 9:16 ` Jamie Iles 2011-08-09 9:16 ` [PATCHv3 1/9] at91: provide macb clks with "pclk" and "hclk" name Jamie Iles 2011-08-09 9:16 ` Jamie Iles 2011-08-09 14:49 ` Jean-Christophe PLAGNIOL-VILLARD 2011-08-09 14:49 ` Jean-Christophe PLAGNIOL-VILLARD 2011-08-09 14:51 ` [PATCH 1/9 v4] " Jean-Christophe PLAGNIOL-VILLARD 2011-08-09 14:51 ` Jean-Christophe PLAGNIOL-VILLARD 2011-08-09 9:16 ` [PATCHv3 2/9] macb: remove conditional clk handling Jamie Iles 2011-08-09 9:16 ` Jamie Iles 2011-08-09 14:52 ` Jean-Christophe PLAGNIOL-VILLARD 2011-08-09 14:52 ` Jean-Christophe PLAGNIOL-VILLARD 2011-08-09 9:16 ` [PATCHv3 3/9] macb: unify at91 and avr32 platform data Jamie Iles 2011-08-09 9:16 ` Jamie Iles 2011-08-09 14:53 ` Jean-Christophe PLAGNIOL-VILLARD 2011-08-09 14:53 ` Jean-Christophe PLAGNIOL-VILLARD 2011-08-09 9:16 ` [PATCHv3 4/9] macb: convert printk to netdev_ and friends Jamie Iles 2011-08-09 9:16 ` Jamie Iles 2011-08-09 20:20 ` Joe Perches 2011-08-09 20:20 ` Joe Perches 2011-08-11 9:01 ` Jamie Iles 2011-08-11 9:01 ` Jamie Iles 2011-08-09 9:16 ` [PATCHv3 5/9] macb: initial support for Cadence GEM Jamie Iles 2011-08-09 9:16 ` Jamie Iles 2011-08-09 14:55 ` Jean-Christophe PLAGNIOL-VILLARD 2011-08-09 14:55 ` Jean-Christophe PLAGNIOL-VILLARD 2011-08-09 9:16 ` [PATCHv3 6/9] macb: support higher rate GEM MDIO clock divisors Jamie Iles 2011-08-09 9:16 ` Jamie Iles 2011-08-09 14:56 ` Jean-Christophe PLAGNIOL-VILLARD 2011-08-09 14:56 ` Jean-Christophe PLAGNIOL-VILLARD 2011-08-09 9:16 ` Jamie Iles [this message] 2011-08-09 9:16 ` [PATCHv3 7/9] macb: support statistics for GEM devices Jamie Iles 2011-08-09 14:57 ` Jean-Christophe PLAGNIOL-VILLARD 2011-08-09 14:57 ` Jean-Christophe PLAGNIOL-VILLARD 2011-08-09 9:16 ` [PATCHv3 8/9] macb: support DMA bus widths > 32 bits Jamie Iles 2011-08-09 9:16 ` Jamie Iles 2011-08-09 14:57 ` Jean-Christophe PLAGNIOL-VILLARD 2011-08-09 14:57 ` Jean-Christophe PLAGNIOL-VILLARD 2011-08-09 9:16 ` [PATCHv3 9/9] macb: allow GEM to have configurable receive buffer size Jamie Iles 2011-08-09 9:16 ` Jamie Iles 2011-08-09 14:59 ` Jean-Christophe PLAGNIOL-VILLARD 2011-08-09 14:59 ` Jean-Christophe PLAGNIOL-VILLARD 2011-08-09 14:59 ` [PATCHv3 0/9] macb: add support for Cadence GEM Jean-Christophe PLAGNIOL-VILLARD 2011-08-09 14:59 ` Jean-Christophe PLAGNIOL-VILLARD 2011-08-11 9:21 ` Jamie Iles 2011-08-11 9:21 ` Jamie Iles 2011-08-23 9:34 ` Jamie Iles 2011-08-23 9:34 ` Jamie Iles 2011-08-28 6:08 ` Jean-Christophe PLAGNIOL-VILLARD 2011-08-28 6:08 ` Jean-Christophe PLAGNIOL-VILLARD
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1312881411-2376-8-git-send-email-jamie@jamieiles.com \ --to=jamie@jamieiles.com \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=netdev@vger.kernel.org \ --cc=plagnioj@jcrosoft.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
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.