Skip to content

Commit e5bc1f4

Browse files
Furong Xudavem330
authored andcommitted
net: stmmac: mmc: Support more counters for XGMAC Core
Complete all counters on XGMAC Core. These can be useful for debugging. Signed-off-by: Furong Xu <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 83691d6 commit e5bc1f4

File tree

3 files changed

+140
-1
lines changed

3 files changed

+140
-1
lines changed

drivers/net/ethernet/stmicro/stmmac/mmc.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ struct stmmac_counters {
5252
unsigned int mmc_tx_excessdef;
5353
unsigned int mmc_tx_pause_frame;
5454
unsigned int mmc_tx_vlan_frame_g;
55+
unsigned int mmc_tx_lpi_usec;
56+
unsigned int mmc_tx_lpi_tran;
5557

5658
/* MMC RX counter registers */
5759
unsigned int mmc_rx_framecount_gb;
@@ -78,9 +80,16 @@ struct stmmac_counters {
7880
unsigned int mmc_rx_fifo_overflow;
7981
unsigned int mmc_rx_vlan_frames_gb;
8082
unsigned int mmc_rx_watchdog_error;
83+
unsigned int mmc_rx_lpi_usec;
84+
unsigned int mmc_rx_lpi_tran;
85+
unsigned int mmc_rx_discard_frames_gb;
86+
unsigned int mmc_rx_discard_octets_gb;
87+
unsigned int mmc_rx_align_err_frames;
88+
8189
/* IPC */
8290
unsigned int mmc_rx_ipc_intr_mask;
8391
unsigned int mmc_rx_ipc_intr;
92+
8493
/* IPv4 */
8594
unsigned int mmc_rx_ipv4_gd;
8695
unsigned int mmc_rx_ipv4_hderr;
@@ -118,9 +127,14 @@ struct stmmac_counters {
118127
unsigned int mmc_rx_icmp_gd_octets;
119128
unsigned int mmc_rx_icmp_err_octets;
120129

130+
/* Stream-Gate Filter */
131+
unsigned int mmc_sgf_pass_fragment_cntr;
132+
unsigned int mmc_sgf_fail_fragment_cntr;
133+
121134
/* FPE */
122135
unsigned int mmc_tx_fpe_fragment_cntr;
123136
unsigned int mmc_tx_hold_req_cntr;
137+
unsigned int mmc_tx_gate_overrun_cntr;
124138
unsigned int mmc_rx_packet_assembly_err_cntr;
125139
unsigned int mmc_rx_packet_smd_err_cntr;
126140
unsigned int mmc_rx_packet_assembly_ok_cntr;

drivers/net/ethernet/stmicro/stmmac/mmc_core.c

Lines changed: 116 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,16 +177,53 @@
177177
#define MMC_XGMAC_RX_DISCARD_OCT_GB 0x1b4
178178
#define MMC_XGMAC_RX_ALIGN_ERR_PKT 0x1bc
179179

180+
#define MMC_XGMAC_SGF_PASS_PKT 0x1f0
181+
#define MMC_XGMAC_SGF_FAIL_PKT 0x1f4
180182
#define MMC_XGMAC_TX_FPE_INTR_MASK 0x204
181183
#define MMC_XGMAC_TX_FPE_FRAG 0x208
182184
#define MMC_XGMAC_TX_HOLD_REQ 0x20c
185+
#define MMC_XGMAC_TX_GATE_OVERRUN 0x210
183186
#define MMC_XGMAC_RX_FPE_INTR_MASK 0x224
184187
#define MMC_XGMAC_RX_PKT_ASSEMBLY_ERR 0x228
185188
#define MMC_XGMAC_RX_PKT_SMD_ERR 0x22c
186189
#define MMC_XGMAC_RX_PKT_ASSEMBLY_OK 0x230
187190
#define MMC_XGMAC_RX_FPE_FRAG 0x234
188191
#define MMC_XGMAC_RX_IPC_INTR_MASK 0x25c
189192

193+
#define MMC_XGMAC_RX_IPV4_GD 0x264
194+
#define MMC_XGMAC_RX_IPV4_HDERR 0x26c
195+
#define MMC_XGMAC_RX_IPV4_NOPAY 0x274
196+
#define MMC_XGMAC_RX_IPV4_FRAG 0x27c
197+
#define MMC_XGMAC_RX_IPV4_UDSBL 0x284
198+
199+
#define MMC_XGMAC_RX_IPV6_GD 0x28c
200+
#define MMC_XGMAC_RX_IPV6_HDERR 0x294
201+
#define MMC_XGMAC_RX_IPV6_NOPAY 0x29c
202+
203+
#define MMC_XGMAC_RX_UDP_GD 0x2a4
204+
#define MMC_XGMAC_RX_UDP_ERR 0x2ac
205+
#define MMC_XGMAC_RX_TCP_GD 0x2b4
206+
#define MMC_XGMAC_RX_TCP_ERR 0x2bc
207+
#define MMC_XGMAC_RX_ICMP_GD 0x2c4
208+
#define MMC_XGMAC_RX_ICMP_ERR 0x2cc
209+
210+
#define MMC_XGMAC_RX_IPV4_GD_OCTETS 0x2d4
211+
#define MMC_XGMAC_RX_IPV4_HDERR_OCTETS 0x2dc
212+
#define MMC_XGMAC_RX_IPV4_NOPAY_OCTETS 0x2e4
213+
#define MMC_XGMAC_RX_IPV4_FRAG_OCTETS 0x2ec
214+
#define MMC_XGMAC_RX_IPV4_UDSBL_OCTETS 0x2f4
215+
216+
#define MMC_XGMAC_RX_IPV6_GD_OCTETS 0x2fc
217+
#define MMC_XGMAC_RX_IPV6_HDERR_OCTETS 0x304
218+
#define MMC_XGMAC_RX_IPV6_NOPAY_OCTETS 0x30c
219+
220+
#define MMC_XGMAC_RX_UDP_GD_OCTETS 0x314
221+
#define MMC_XGMAC_RX_UDP_ERR_OCTETS 0x31c
222+
#define MMC_XGMAC_RX_TCP_GD_OCTETS 0x324
223+
#define MMC_XGMAC_RX_TCP_ERR_OCTETS 0x32c
224+
#define MMC_XGMAC_RX_ICMP_GD_OCTETS 0x334
225+
#define MMC_XGMAC_RX_ICMP_ERR_OCTETS 0x33c
226+
190227
static void dwmac_mmc_ctrl(void __iomem *mmcaddr, unsigned int mode)
191228
{
192229
u32 value = readl(mmcaddr + MMC_CNTRL);
@@ -414,6 +451,8 @@ static void dwxgmac_mmc_read(void __iomem *mmcaddr, struct stmmac_counters *mmc)
414451
&mmc->mmc_tx_pause_frame);
415452
dwxgmac_read_mmc_reg(mmcaddr, MMC_XGMAC_TX_VLAN_PKT_G,
416453
&mmc->mmc_tx_vlan_frame_g);
454+
mmc->mmc_tx_lpi_usec += readl(mmcaddr + MMC_XGMAC_TX_LPI_USEC);
455+
mmc->mmc_tx_lpi_tran += readl(mmcaddr + MMC_XGMAC_TX_LPI_TRAN);
417456

418457
/* MMC RX counter registers */
419458
dwxgmac_read_mmc_reg(mmcaddr, MMC_XGMAC_RX_PKT_GB,
@@ -459,9 +498,23 @@ static void dwxgmac_mmc_read(void __iomem *mmcaddr, struct stmmac_counters *mmc)
459498
dwxgmac_read_mmc_reg(mmcaddr, MMC_XGMAC_RX_VLAN_PKT_GB,
460499
&mmc->mmc_rx_vlan_frames_gb);
461500
mmc->mmc_rx_watchdog_error += readl(mmcaddr + MMC_XGMAC_RX_WATCHDOG_ERR);
462-
501+
mmc->mmc_rx_lpi_usec += readl(mmcaddr + MMC_XGMAC_RX_LPI_USEC);
502+
mmc->mmc_rx_lpi_tran += readl(mmcaddr + MMC_XGMAC_RX_LPI_TRAN);
503+
dwxgmac_read_mmc_reg(mmcaddr, MMC_XGMAC_RX_DISCARD_PKT_GB,
504+
&mmc->mmc_rx_discard_frames_gb);
505+
dwxgmac_read_mmc_reg(mmcaddr, MMC_XGMAC_RX_DISCARD_OCT_GB,
506+
&mmc->mmc_rx_discard_octets_gb);
507+
mmc->mmc_rx_align_err_frames +=
508+
readl(mmcaddr + MMC_XGMAC_RX_ALIGN_ERR_PKT);
509+
510+
mmc->mmc_sgf_pass_fragment_cntr +=
511+
readl(mmcaddr + MMC_XGMAC_SGF_PASS_PKT);
512+
mmc->mmc_sgf_fail_fragment_cntr +=
513+
readl(mmcaddr + MMC_XGMAC_SGF_FAIL_PKT);
463514
mmc->mmc_tx_fpe_fragment_cntr += readl(mmcaddr + MMC_XGMAC_TX_FPE_FRAG);
464515
mmc->mmc_tx_hold_req_cntr += readl(mmcaddr + MMC_XGMAC_TX_HOLD_REQ);
516+
dwxgmac_read_mmc_reg(mmcaddr, MMC_XGMAC_TX_GATE_OVERRUN,
517+
&mmc->mmc_tx_gate_overrun_cntr);
465518
mmc->mmc_rx_packet_assembly_err_cntr +=
466519
readl(mmcaddr + MMC_XGMAC_RX_PKT_ASSEMBLY_ERR);
467520
mmc->mmc_rx_packet_smd_err_cntr +=
@@ -470,6 +523,68 @@ static void dwxgmac_mmc_read(void __iomem *mmcaddr, struct stmmac_counters *mmc)
470523
readl(mmcaddr + MMC_XGMAC_RX_PKT_ASSEMBLY_OK);
471524
mmc->mmc_rx_fpe_fragment_cntr +=
472525
readl(mmcaddr + MMC_XGMAC_RX_FPE_FRAG);
526+
527+
dwxgmac_read_mmc_reg(mmcaddr, MMC_XGMAC_RX_IPV4_GD,
528+
&mmc->mmc_rx_ipv4_gd);
529+
dwxgmac_read_mmc_reg(mmcaddr, MMC_XGMAC_RX_IPV4_HDERR,
530+
&mmc->mmc_rx_ipv4_hderr);
531+
dwxgmac_read_mmc_reg(mmcaddr, MMC_XGMAC_RX_IPV4_NOPAY,
532+
&mmc->mmc_rx_ipv4_nopay);
533+
dwxgmac_read_mmc_reg(mmcaddr, MMC_XGMAC_RX_IPV4_FRAG,
534+
&mmc->mmc_rx_ipv4_frag);
535+
dwxgmac_read_mmc_reg(mmcaddr, MMC_XGMAC_RX_IPV4_UDSBL,
536+
&mmc->mmc_rx_ipv4_udsbl);
537+
538+
dwxgmac_read_mmc_reg(mmcaddr, MMC_XGMAC_RX_IPV6_GD,
539+
&mmc->mmc_rx_ipv6_gd);
540+
dwxgmac_read_mmc_reg(mmcaddr, MMC_XGMAC_RX_IPV6_HDERR,
541+
&mmc->mmc_rx_ipv6_hderr);
542+
dwxgmac_read_mmc_reg(mmcaddr, MMC_XGMAC_RX_IPV6_NOPAY,
543+
&mmc->mmc_rx_ipv6_nopay);
544+
545+
dwxgmac_read_mmc_reg(mmcaddr, MMC_XGMAC_RX_UDP_GD,
546+
&mmc->mmc_rx_udp_gd);
547+
dwxgmac_read_mmc_reg(mmcaddr, MMC_XGMAC_RX_UDP_ERR,
548+
&mmc->mmc_rx_udp_err);
549+
dwxgmac_read_mmc_reg(mmcaddr, MMC_XGMAC_RX_TCP_GD,
550+
&mmc->mmc_rx_tcp_gd);
551+
dwxgmac_read_mmc_reg(mmcaddr, MMC_XGMAC_RX_TCP_ERR,
552+
&mmc->mmc_rx_tcp_err);
553+
dwxgmac_read_mmc_reg(mmcaddr, MMC_XGMAC_RX_ICMP_GD,
554+
&mmc->mmc_rx_icmp_gd);
555+
dwxgmac_read_mmc_reg(mmcaddr, MMC_XGMAC_RX_ICMP_ERR,
556+
&mmc->mmc_rx_icmp_err);
557+
558+
dwxgmac_read_mmc_reg(mmcaddr, MMC_XGMAC_RX_IPV4_GD_OCTETS,
559+
&mmc->mmc_rx_ipv4_gd_octets);
560+
dwxgmac_read_mmc_reg(mmcaddr, MMC_XGMAC_RX_IPV4_HDERR_OCTETS,
561+
&mmc->mmc_rx_ipv4_hderr_octets);
562+
dwxgmac_read_mmc_reg(mmcaddr, MMC_XGMAC_RX_IPV4_NOPAY_OCTETS,
563+
&mmc->mmc_rx_ipv4_nopay_octets);
564+
dwxgmac_read_mmc_reg(mmcaddr, MMC_XGMAC_RX_IPV4_FRAG_OCTETS,
565+
&mmc->mmc_rx_ipv4_frag_octets);
566+
dwxgmac_read_mmc_reg(mmcaddr, MMC_XGMAC_RX_IPV4_UDSBL_OCTETS,
567+
&mmc->mmc_rx_ipv4_udsbl_octets);
568+
569+
dwxgmac_read_mmc_reg(mmcaddr, MMC_XGMAC_RX_IPV6_GD_OCTETS,
570+
&mmc->mmc_rx_ipv6_gd_octets);
571+
dwxgmac_read_mmc_reg(mmcaddr, MMC_XGMAC_RX_IPV6_HDERR_OCTETS,
572+
&mmc->mmc_rx_ipv6_hderr_octets);
573+
dwxgmac_read_mmc_reg(mmcaddr, MMC_XGMAC_RX_IPV6_NOPAY_OCTETS,
574+
&mmc->mmc_rx_ipv6_nopay_octets);
575+
576+
dwxgmac_read_mmc_reg(mmcaddr, MMC_XGMAC_RX_UDP_GD_OCTETS,
577+
&mmc->mmc_rx_udp_gd_octets);
578+
dwxgmac_read_mmc_reg(mmcaddr, MMC_XGMAC_RX_UDP_ERR_OCTETS,
579+
&mmc->mmc_rx_udp_err_octets);
580+
dwxgmac_read_mmc_reg(mmcaddr, MMC_XGMAC_RX_TCP_GD_OCTETS,
581+
&mmc->mmc_rx_tcp_gd_octets);
582+
dwxgmac_read_mmc_reg(mmcaddr, MMC_XGMAC_RX_TCP_ERR_OCTETS,
583+
&mmc->mmc_rx_tcp_err_octets);
584+
dwxgmac_read_mmc_reg(mmcaddr, MMC_XGMAC_RX_ICMP_GD_OCTETS,
585+
&mmc->mmc_rx_icmp_gd_octets);
586+
dwxgmac_read_mmc_reg(mmcaddr, MMC_XGMAC_RX_ICMP_ERR_OCTETS,
587+
&mmc->mmc_rx_icmp_err_octets);
473588
}
474589

475590
const struct stmmac_mmc_ops dwxgmac_mmc_ops = {

drivers/net/ethernet/stmicro/stmmac/stmmac_ethtool.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,8 @@ static const struct stmmac_stats stmmac_mmc[] = {
212212
STMMAC_MMC_STAT(mmc_tx_excessdef),
213213
STMMAC_MMC_STAT(mmc_tx_pause_frame),
214214
STMMAC_MMC_STAT(mmc_tx_vlan_frame_g),
215+
STMMAC_MMC_STAT(mmc_tx_lpi_usec),
216+
STMMAC_MMC_STAT(mmc_tx_lpi_tran),
215217
STMMAC_MMC_STAT(mmc_rx_framecount_gb),
216218
STMMAC_MMC_STAT(mmc_rx_octetcount_gb),
217219
STMMAC_MMC_STAT(mmc_rx_octetcount_g),
@@ -236,6 +238,11 @@ static const struct stmmac_stats stmmac_mmc[] = {
236238
STMMAC_MMC_STAT(mmc_rx_fifo_overflow),
237239
STMMAC_MMC_STAT(mmc_rx_vlan_frames_gb),
238240
STMMAC_MMC_STAT(mmc_rx_watchdog_error),
241+
STMMAC_MMC_STAT(mmc_rx_lpi_usec),
242+
STMMAC_MMC_STAT(mmc_rx_lpi_tran),
243+
STMMAC_MMC_STAT(mmc_rx_discard_frames_gb),
244+
STMMAC_MMC_STAT(mmc_rx_discard_octets_gb),
245+
STMMAC_MMC_STAT(mmc_rx_align_err_frames),
239246
STMMAC_MMC_STAT(mmc_rx_ipc_intr_mask),
240247
STMMAC_MMC_STAT(mmc_rx_ipc_intr),
241248
STMMAC_MMC_STAT(mmc_rx_ipv4_gd),
@@ -266,8 +273,11 @@ static const struct stmmac_stats stmmac_mmc[] = {
266273
STMMAC_MMC_STAT(mmc_rx_tcp_err_octets),
267274
STMMAC_MMC_STAT(mmc_rx_icmp_gd_octets),
268275
STMMAC_MMC_STAT(mmc_rx_icmp_err_octets),
276+
STMMAC_MMC_STAT(mmc_sgf_pass_fragment_cntr),
277+
STMMAC_MMC_STAT(mmc_sgf_fail_fragment_cntr),
269278
STMMAC_MMC_STAT(mmc_tx_fpe_fragment_cntr),
270279
STMMAC_MMC_STAT(mmc_tx_hold_req_cntr),
280+
STMMAC_MMC_STAT(mmc_tx_gate_overrun_cntr),
271281
STMMAC_MMC_STAT(mmc_rx_packet_assembly_err_cntr),
272282
STMMAC_MMC_STAT(mmc_rx_packet_smd_err_cntr),
273283
STMMAC_MMC_STAT(mmc_rx_packet_assembly_ok_cntr),

0 commit comments

Comments
 (0)