Skip to content

Commit b98deb2

Browse files
ffainellikuba-moo
authored andcommitted
net: systemport: Add support for RDMA overflow statistic counter
RDMA overflows can happen if the Ethernet controller does not have enough bandwidth allocated at the memory controller level, report RDMA overflows and deal with saturation, similar to the RBUF overflow counter. Signed-off-by: Florian Fainelli <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
1 parent 37c8489 commit b98deb2

File tree

2 files changed

+22
-0
lines changed

2 files changed

+22
-0
lines changed

drivers/net/ethernet/broadcom/bcmsysport.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,8 @@ static const struct bcm_sysport_stats bcm_sysport_gstrings_stats[] = {
295295
/* RBUF misc statistics */
296296
STAT_RBUF("rbuf_ovflow_cnt", mib.rbuf_ovflow_cnt, RBUF_OVFL_DISC_CNTR),
297297
STAT_RBUF("rbuf_err_cnt", mib.rbuf_err_cnt, RBUF_ERR_PKT_CNTR),
298+
/* RDMA misc statistics */
299+
STAT_RDMA("rdma_ovflow_cnt", mib.rdma_ovflow_cnt, RDMA_OVFL_DISC_CNTR),
298300
STAT_MIB_SOFT("alloc_rx_buff_failed", mib.alloc_rx_buff_failed),
299301
STAT_MIB_SOFT("rx_dma_failed", mib.rx_dma_failed),
300302
STAT_MIB_SOFT("tx_dma_failed", mib.tx_dma_failed),
@@ -333,6 +335,7 @@ static inline bool bcm_sysport_lite_stat_valid(enum bcm_sysport_stat_type type)
333335
case BCM_SYSPORT_STAT_NETDEV64:
334336
case BCM_SYSPORT_STAT_RXCHK:
335337
case BCM_SYSPORT_STAT_RBUF:
338+
case BCM_SYSPORT_STAT_RDMA:
336339
case BCM_SYSPORT_STAT_SOFT:
337340
return true;
338341
default:
@@ -436,6 +439,14 @@ static void bcm_sysport_update_mib_counters(struct bcm_sysport_priv *priv)
436439
if (val == ~0)
437440
rbuf_writel(priv, 0, s->reg_offset);
438441
break;
442+
case BCM_SYSPORT_STAT_RDMA:
443+
if (!priv->is_lite)
444+
continue;
445+
446+
val = rdma_readl(priv, s->reg_offset);
447+
if (val == ~0)
448+
rdma_writel(priv, 0, s->reg_offset);
449+
break;
439450
}
440451

441452
j += s->stat_sizeof;

drivers/net/ethernet/broadcom/bcmsysport.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,7 @@ struct bcm_rsb {
290290

291291
#define RDMA_WRITE_PTR_HI 0x1010
292292
#define RDMA_WRITE_PTR_LO 0x1014
293+
#define RDMA_OVFL_DISC_CNTR 0x1018
293294
#define RDMA_PROD_INDEX 0x1018
294295
#define RDMA_PROD_INDEX_MASK 0xffff
295296

@@ -565,6 +566,7 @@ struct bcm_sysport_mib {
565566
u32 rxchk_other_pkt_disc;
566567
u32 rbuf_ovflow_cnt;
567568
u32 rbuf_err_cnt;
569+
u32 rdma_ovflow_cnt;
568570
u32 alloc_rx_buff_failed;
569571
u32 rx_dma_failed;
570572
u32 tx_dma_failed;
@@ -581,6 +583,7 @@ enum bcm_sysport_stat_type {
581583
BCM_SYSPORT_STAT_RUNT,
582584
BCM_SYSPORT_STAT_RXCHK,
583585
BCM_SYSPORT_STAT_RBUF,
586+
BCM_SYSPORT_STAT_RDMA,
584587
BCM_SYSPORT_STAT_SOFT,
585588
};
586589

@@ -627,6 +630,14 @@ enum bcm_sysport_stat_type {
627630
.reg_offset = ofs, \
628631
}
629632

633+
#define STAT_RDMA(str, m, ofs) { \
634+
.stat_string = str, \
635+
.stat_sizeof = sizeof(((struct bcm_sysport_priv *)0)->m), \
636+
.stat_offset = offsetof(struct bcm_sysport_priv, m), \
637+
.type = BCM_SYSPORT_STAT_RDMA, \
638+
.reg_offset = ofs, \
639+
}
640+
630641
/* TX bytes and packets */
631642
#define NUM_SYSPORT_TXQ_STAT 2
632643

0 commit comments

Comments
 (0)