commit 5552570e76602e3a4fae763aefb9e8b1c47fa6b5
parent b0436037a2b6445e5cc10c46cd02ec2ba3d1c045
Author: Broadcom SDK Release <sdk.releases@broadcom.com>
Date: Wed, 8 Jan 2020 13:37:24 -0800
SDK-175538: Corrected DMA buffer location for CDMIB counter collection in syn...
Devices: 56980_A0
Module: SOC
Symptom:
Cached counter values returned are large/invalid
Corrected DMA buffer location for CDMIB counter collection in sync mode.
Diffstat:
1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/sdk-6.5.16/src/soc/common/counter.c b/sdk-6.5.16/src/soc/common/counter.c
@@ -14018,7 +14018,17 @@ soc_counter_collect64(int unit, int discard, soc_port_t tmp_port, soc_reg_t hw_c
} else
#endif /* BCM_SBUSDMA_SUPPORT */
{
- ptr = (uint32 *)&soc->counter_buf64[port_base_dma + index];
+#ifdef BCM_TOMAHAWK3_SUPPORT
+ if (SOC_IS_TOMAHAWK3(unit) &&
+ soc_feature(unit, soc_feature_sbusdma) &&
+ SOC_REG_IS_COUNTER_TABLE(unit, ctr_reg)) {
+ int dma_offset = SOC_CTR_TBL_INFO(unit)->tables[index - soc->counter_mib_tbl_first].dma_offset;
+ ptr = (uint32 *)&soc->counter_buf64[port_base_dma + soc->counter_mib_tbl_first + dma_offset];
+ } else
+#endif
+ {
+ ptr = (uint32 *)&soc->counter_buf64[port_base_dma + index];
+ }
COUNTER_ATOMIC_BEGIN(s);
/* Update the DMA location */
if (soc->counter_flags & SOC_COUNTER_F_SWAP64) {