bnx2x: Correct EEE statistics gathering
authorYuval Mintz <yuvalmin@broadcom.com>
Mon, 23 Jul 2012 21:16:06 +0000 (21:16 +0000)
committerDavid S. Miller <davem@davemloft.net>
Tue, 24 Jul 2012 20:54:15 +0000 (13:54 -0700)
In boards with 4-ports, Tx LPI statistics were gathered incorrectly.
This patch guarantees that each pmf will only query its own port for
these statistics.

Signed-off-by: Yuval Mintz <yuvalmin@broadcom.com>
Signed-off-by: Eilon Greenstein <eilong@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/broadcom/bnx2x/bnx2x_reg.h
drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.c

index ec62a5c8bd37c25f0c0ec9a133b4c95339e421dc..28a0bcfe61ff9a4224d5b1f3442400a363bce79b 100644 (file)
  * of counts that the SM entered the EEE LPI state. Clock 25MHz. Read only
  * register. Reset on hard reset. */
 #define MISC_REG_CPMU_LP_SM_ENT_CNT_P0                          0xa8b8
+/* [RW 16] EEE LPI Entry Events Counter. A statistic counter with the number
+ * of counts that the SM entered the EEE LPI state. Clock 25MHz. Read only
+ * register. Reset on hard reset. */
+#define MISC_REG_CPMU_LP_SM_ENT_CNT_P1                          0xa8bc
 /* [RW 32] The following driver registers(1...16) represent 16 drivers and
    32 clients. Each client can be controlled by one driver only. One in each
    bit represent that this driver control the appropriate client (Ex: bit 5
index 667d89042d35b33b2792a9ed9b848aae3db27897..332db64dd5bea11eed0cf878565c5c2e573f5c3e 100644 (file)
@@ -785,9 +785,11 @@ static int bnx2x_hw_stats_update(struct bnx2x *bp)
 
        pstats->host_port_stats_counter++;
 
-       if (CHIP_IS_E3(bp))
-               estats->eee_tx_lpi += REG_RD(bp,
-                                            MISC_REG_CPMU_LP_SM_ENT_CNT_P0);
+       if (CHIP_IS_E3(bp)) {
+               u32 lpi_reg = BP_PORT(bp) ? MISC_REG_CPMU_LP_SM_ENT_CNT_P1
+                                         : MISC_REG_CPMU_LP_SM_ENT_CNT_P0;
+               estats->eee_tx_lpi += REG_RD(bp, lpi_reg);
+       }
 
        if (!BP_NOMCP(bp)) {
                u32 nig_timer_max =