Skip to content

Commit 0e898dd

Browse files
Barak Witkowskidavem330
authored andcommitted
bnx2x: add PFC statistics
Add Priority flow control counters for ethtool -S. Signed-off-by: Barak Witkowski <barak@broadcom.com> Signed-off-by: Eilon Greenstein <eilong@broadcom.com> Signed-off-by: Michael Chan <mchan@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent f0a98ae commit 0e898dd

File tree

6 files changed

+63
-3
lines changed

6 files changed

+63
-3
lines changed

drivers/net/ethernet/broadcom/bnx2x/bnx2x.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1266,6 +1266,7 @@ struct bnx2x {
12661266
#define NO_ISCSI_OOO_FLAG (1 << 13)
12671267
#define NO_ISCSI_FLAG (1 << 14)
12681268
#define NO_FCOE_FLAG (1 << 15)
1269+
#define BC_SUPPORTS_PFC_STATS (1 << 17)
12691270

12701271
#define NO_ISCSI(bp) ((bp)->flags & NO_ISCSI_FLAG)
12711272
#define NO_ISCSI_OOO(bp) ((bp)->flags & NO_ISCSI_OOO_FLAG)

drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,10 @@ static const struct {
107107
4, STATS_FLAGS_PORT, "rx_filtered_packets" },
108108
{ STATS_OFFSET32(mf_tag_discard),
109109
4, STATS_FLAGS_PORT, "rx_mf_tag_discard" },
110+
{ STATS_OFFSET32(pfc_frames_received_hi),
111+
8, STATS_FLAGS_PORT, "pfc_frames_received" },
112+
{ STATS_OFFSET32(pfc_frames_sent_hi),
113+
8, STATS_FLAGS_PORT, "pfc_frames_sent" },
110114
{ STATS_OFFSET32(brb_drop_hi),
111115
8, STATS_FLAGS_PORT, "rx_brb_discard" },
112116
{ STATS_OFFSET32(brb_truncate_hi),

drivers/net/ethernet/broadcom/bnx2x/bnx2x_hsi.h

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1247,6 +1247,7 @@ struct drv_func_mb {
12471247
#define DRV_MSG_CODE_VRFY_SPECIFIC_PHY_OPT_MDL 0xa1000000
12481248
#define REQ_BC_VER_4_VRFY_SPECIFIC_PHY_OPT_MDL 0x00050234
12491249
#define REQ_BC_VER_4_SFP_TX_DISABLE_SUPPORTED 0x00070014
1250+
#define REQ_BC_VER_4_PFC_STATS_SUPPORTED 0x00070201
12501251

12511252
#define DRV_MSG_CODE_DCBX_ADMIN_PMF_MSG 0xb0000000
12521253
#define DRV_MSG_CODE_DCBX_PMF_DRV_OK 0xb2000000
@@ -2501,14 +2502,18 @@ struct mac_stx {
25012502
#define MAC_STX_IDX_MAX 2
25022503

25032504
struct host_port_stats {
2504-
u32 host_port_stats_start;
2505+
u32 host_port_stats_counter;
25052506

25062507
struct mac_stx mac_stx[MAC_STX_IDX_MAX];
25072508

25082509
u32 brb_drop_hi;
25092510
u32 brb_drop_lo;
25102511

2511-
u32 host_port_stats_end;
2512+
u32 not_used; /* obsolete */
2513+
u32 pfc_frames_tx_hi;
2514+
u32 pfc_frames_tx_lo;
2515+
u32 pfc_frames_rx_hi;
2516+
u32 pfc_frames_rx_lo;
25122517
};
25132518

25142519

drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8827,6 +8827,8 @@ static void __devinit bnx2x_get_common_hwinfo(struct bnx2x *bp)
88278827
bp->link_params.feature_config_flags |=
88288828
(val >= REQ_BC_VER_4_SFP_TX_DISABLE_SUPPORTED) ?
88298829
FEATURE_CONFIG_BC_SUPPORTS_SFP_TX_DISABLED : 0;
8830+
bp->flags |= (val >= REQ_BC_VER_4_PFC_STATS_SUPPORTED) ?
8831+
BC_SUPPORTS_PFC_STATS : 0;
88308832

88318833
pci_read_config_word(bp->pdev, bp->pm_cap + PCI_PM_PMC, &pmc);
88328834
bp->flags |= (pmc & PCI_PM_CAP_PME_D3cold) ? 0 : NO_WOL_FLAG;

drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.c

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -540,6 +540,25 @@ static void bnx2x_bmac_stats_update(struct bnx2x *bp)
540540
UPDATE_STAT64(tx_stat_gterr,
541541
tx_stat_dot3statsinternalmactransmiterrors);
542542
UPDATE_STAT64(tx_stat_gtufl, tx_stat_mac_ufl);
543+
544+
/* collect PFC stats */
545+
DIFF_64(diff.hi, new->tx_stat_gtpp_hi,
546+
pstats->pfc_frames_tx_hi,
547+
diff.lo, new->tx_stat_gtpp_lo,
548+
pstats->pfc_frames_tx_lo);
549+
pstats->pfc_frames_tx_hi = new->tx_stat_gtpp_hi;
550+
pstats->pfc_frames_tx_lo = new->tx_stat_gtpp_lo;
551+
ADD_64(pstats->pfc_frames_tx_hi, diff.hi,
552+
pstats->pfc_frames_tx_lo, diff.lo);
553+
554+
DIFF_64(diff.hi, new->rx_stat_grpp_hi,
555+
pstats->pfc_frames_rx_hi,
556+
diff.lo, new->rx_stat_grpp_lo,
557+
pstats->pfc_frames_rx_lo);
558+
pstats->pfc_frames_rx_hi = new->rx_stat_grpp_hi;
559+
pstats->pfc_frames_rx_lo = new->rx_stat_grpp_lo;
560+
ADD_64(pstats->pfc_frames_rx_hi, diff.hi,
561+
pstats->pfc_frames_rx_lo, diff.lo);
543562
}
544563

545564
estats->pause_frames_received_hi =
@@ -551,6 +570,15 @@ static void bnx2x_bmac_stats_update(struct bnx2x *bp)
551570
pstats->mac_stx[1].tx_stat_outxoffsent_hi;
552571
estats->pause_frames_sent_lo =
553572
pstats->mac_stx[1].tx_stat_outxoffsent_lo;
573+
574+
estats->pfc_frames_received_hi =
575+
pstats->pfc_frames_rx_hi;
576+
estats->pfc_frames_received_lo =
577+
pstats->pfc_frames_rx_lo;
578+
estats->pfc_frames_sent_hi =
579+
pstats->pfc_frames_tx_hi;
580+
estats->pfc_frames_sent_lo =
581+
pstats->pfc_frames_tx_lo;
554582
}
555583

556584
static void bnx2x_mstat_stats_update(struct bnx2x *bp)
@@ -571,6 +599,11 @@ static void bnx2x_mstat_stats_update(struct bnx2x *bp)
571599
ADD_STAT64(stats_tx.tx_gtxpf, tx_stat_outxoffsent);
572600
ADD_STAT64(stats_tx.tx_gtxpf, tx_stat_flowcontroldone);
573601

602+
/* collect pfc stats */
603+
ADD_64(pstats->pfc_frames_tx_hi, new->stats_tx.tx_gtxpp_hi,
604+
pstats->pfc_frames_tx_lo, new->stats_tx.tx_gtxpp_lo);
605+
ADD_64(pstats->pfc_frames_rx_hi, new->stats_rx.rx_grxpp_hi,
606+
pstats->pfc_frames_rx_lo, new->stats_rx.rx_grxpp_lo);
574607

575608
ADD_STAT64(stats_tx.tx_gt64, tx_stat_etherstatspkts64octets);
576609
ADD_STAT64(stats_tx.tx_gt127,
@@ -628,6 +661,15 @@ static void bnx2x_mstat_stats_update(struct bnx2x *bp)
628661
pstats->mac_stx[1].tx_stat_outxoffsent_hi;
629662
estats->pause_frames_sent_lo =
630663
pstats->mac_stx[1].tx_stat_outxoffsent_lo;
664+
665+
estats->pfc_frames_received_hi =
666+
pstats->pfc_frames_rx_hi;
667+
estats->pfc_frames_received_lo =
668+
pstats->pfc_frames_rx_lo;
669+
estats->pfc_frames_sent_hi =
670+
pstats->pfc_frames_tx_hi;
671+
estats->pfc_frames_sent_lo =
672+
pstats->pfc_frames_tx_lo;
631673
}
632674

633675
static void bnx2x_emac_stats_update(struct bnx2x *bp)
@@ -740,7 +782,7 @@ static int bnx2x_hw_stats_update(struct bnx2x *bp)
740782
estats->brb_drop_hi = pstats->brb_drop_hi;
741783
estats->brb_drop_lo = pstats->brb_drop_lo;
742784

743-
pstats->host_port_stats_start = ++pstats->host_port_stats_end;
785+
pstats->host_port_stats_counter++;
744786

745787
if (!BP_NOMCP(bp)) {
746788
u32 nig_timer_max =

drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,12 @@ struct bnx2x_eth_stats {
193193
u32 total_tpa_aggregated_frames_lo;
194194
u32 total_tpa_bytes_hi;
195195
u32 total_tpa_bytes_lo;
196+
197+
/* PFC */
198+
u32 pfc_frames_received_hi;
199+
u32 pfc_frames_received_lo;
200+
u32 pfc_frames_sent_hi;
201+
u32 pfc_frames_sent_lo;
196202
};
197203

198204

0 commit comments

Comments
 (0)