From: Dmitry Bogdanov <dmitry.bogda...@aquantia.com>

DMA counters are 64 bit and we can fetch that to reduce
counter overflow, espesially on byte counters.

Tested-by: Nikita Danilov <ndani...@aquantia.com>
Signed-off-by: Igor Russkikh <igor.russk...@aquantia.com>
Signed-off-by: Dmitry Bogdanov <dmitry.bogda...@aquantia.com>
---
 .../ethernet/aquantia/atlantic/hw_atl/hw_atl_llh.c |  5 -----
 .../ethernet/aquantia/atlantic/hw_atl/hw_atl_llh.h |  3 ---
 .../aquantia/atlantic/hw_atl/hw_atl_llh_internal.h |  3 ---
 .../aquantia/atlantic/hw_atl/hw_atl_utils.c        | 14 +++++++++-----
 4 files changed, 9 insertions(+), 16 deletions(-)

diff --git a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh.c 
b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh.c
index 9442deff98a8..9876122991a7 100644
--- a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh.c
+++ b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh.c
@@ -49,11 +49,6 @@ u32 hw_atl_glb_soft_res_get(struct aq_hw_s *aq_hw)
                                  HW_ATL_GLB_SOFT_RES_SHIFT);
 }
 
-u32 hw_atl_reg_rx_dma_stat_counter7get(struct aq_hw_s *aq_hw)
-{
-       return aq_hw_read_reg(aq_hw, HW_ATL_RX_DMA_STAT_COUNTER7_ADR);
-}
-
 u32 hw_atl_reg_glb_mif_id_get(struct aq_hw_s *aq_hw)
 {
        return aq_hw_read_reg(aq_hw, HW_ATL_GLB_MIF_ID_ADR);
diff --git a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh.h 
b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh.h
index 4cfa4bd80ad3..3cef151633d4 100644
--- a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh.h
+++ b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh.h
@@ -82,9 +82,6 @@ u32 hw_atl_reg_mac_msm_rx_bcst_octets_counter1get(struct 
aq_hw_s *aq_hw);
 /* get msm rx unicast octets counter register 0 */
 u32 hw_atl_reg_mac_msm_rx_ucst_octets_counter0get(struct aq_hw_s *aq_hw);
 
-/* get rx dma statistics counter 7 */
-u32 hw_atl_reg_rx_dma_stat_counter7get(struct aq_hw_s *aq_hw);
-
 /* get msm tx errors counter register */
 u32 hw_atl_reg_mac_msm_tx_errs_cnt_get(struct aq_hw_s *aq_hw);
 
diff --git 
a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh_internal.h 
b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh_internal.h
index 430bbd45b2f0..b64140924a02 100644
--- a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh_internal.h
+++ b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_llh_internal.h
@@ -58,9 +58,6 @@
 /* preprocessor definitions for msm rx unicast octets counter register 0 */
 #define HW_ATL_MAC_MSM_RX_UCST_OCTETS_COUNTER0_ADR 0x000001b8u
 
-/* preprocessor definitions for rx dma statistics counter 7 */
-#define HW_ATL_RX_DMA_STAT_COUNTER7_ADR 0x00006818u
-
 /* preprocessor definitions for msm tx unicast frames counter register */
 #define HW_ATL_MAC_MSM_TX_UCST_FRM_CNT_ADR 0x00000108u
 
diff --git a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils.c 
b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils.c
index 35df424e3af3..4063746a8859 100644
--- a/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils.c
+++ b/drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_utils.c
@@ -545,7 +545,7 @@ void hw_atl_utils_mpi_read_stats(struct aq_hw_s *self,
                pmbox->stats.ubtc = pmbox->stats.uptc * mtu;
                pmbox->stats.dpc = atomic_read(&self->dpc);
        } else {
-               pmbox->stats.dpc = hw_atl_reg_rx_dma_stat_counter7get(self);
+               pmbox->stats.dpc = hw_atl_rpb_rx_dma_drop_pkt_cnt_get(self);
        }
 
 err_exit:;
@@ -789,10 +789,14 @@ int hw_atl_utils_update_stats(struct aq_hw_s *self)
                AQ_SDELTA(dpc);
        }
 #undef AQ_SDELTA
-       self->curr_stats.dma_pkt_rc = 
hw_atl_stats_rx_dma_good_pkt_counterlsw_get(self);
-       self->curr_stats.dma_pkt_tc = 
hw_atl_stats_tx_dma_good_pkt_counterlsw_get(self);
-       self->curr_stats.dma_oct_rc = 
hw_atl_stats_rx_dma_good_octet_counterlsw_get(self);
-       self->curr_stats.dma_oct_tc = 
hw_atl_stats_tx_dma_good_octet_counterlsw_get(self);
+       self->curr_stats.dma_pkt_rc = 
hw_atl_stats_rx_dma_good_pkt_counterlsw_get(self) +
+                                     
((u64)hw_atl_stats_rx_dma_good_pkt_countermsw_get(self) << 32);
+       self->curr_stats.dma_pkt_tc = 
hw_atl_stats_tx_dma_good_pkt_counterlsw_get(self) +
+                                     
((u64)hw_atl_stats_tx_dma_good_pkt_countermsw_get(self) << 32);
+       self->curr_stats.dma_oct_rc = 
hw_atl_stats_rx_dma_good_octet_counterlsw_get(self) +
+                                     
((u64)hw_atl_stats_rx_dma_good_octet_countermsw_get(self) << 32);
+       self->curr_stats.dma_oct_tc = 
hw_atl_stats_tx_dma_good_octet_counterlsw_get(self) +
+                                     
((u64)hw_atl_stats_tx_dma_good_octet_countermsw_get(self) << 32);
 
        memcpy(&self->last_stats, &mbox.stats, sizeof(mbox.stats));
 
-- 
2.17.1

Reply via email to