Re: [PATCH] net: ti: icssg-prueth: Fix tx_total_bytes count

From: MD Danish Anwar
Date: Thu Oct 12 2023 - 01:22:35 EST


On 11/10/23 15:16, Ravi Gunasekaran wrote:
>
>
> On 10/11/23 12:07 PM, MD Danish Anwar wrote:
>> ICSSG HW stats on TX side considers 8 preamble bytes as data bytes. Due
>> to this the tx_total_bytes of one interface doesn't match the
>> rx_total_bytes of other interface when two ICSSG interfaces are
>
> The errata is on the ICSSG Tx side regardless of which interface it is
> connected to. Please rephrase this part of the message to something like,
> "rx_total_bytes of the link partner".
>

Sure Ravi, I'll update the commit message.

>> connected with each other. There is no public errata available yet.
>>
>> As a workaround to fix this, decrease tx_total_bytes by 8 bytes for every
>> tx frame.
>>
>> Fixes: c1e10d5dc7a1 ("net: ti: icssg-prueth: Add ICSSG Stats")
>> Signed-off-by: MD Danish Anwar <danishanwar@xxxxxx>
>> ---
>> drivers/net/ethernet/ti/icssg/icssg_stats.c | 6 ++++++
>> 1 file changed, 6 insertions(+)
>>
>> diff --git a/drivers/net/ethernet/ti/icssg/icssg_stats.c b/drivers/net/ethernet/ti/icssg/icssg_stats.c
>> index bb0b33927e3b..dc12edcbac02 100644
>> --- a/drivers/net/ethernet/ti/icssg/icssg_stats.c
>> +++ b/drivers/net/ethernet/ti/icssg/icssg_stats.c
>> @@ -18,6 +18,7 @@ void emac_update_hardware_stats(struct prueth_emac *emac)
>> struct prueth *prueth = emac->prueth;
>> int slice = prueth_emac_slice(emac);
>> u32 base = stats_base[slice];
>> + u32 tx_pkt_cnt = 0;
>> u32 val;
>> int i;
>>
>> @@ -29,7 +30,12 @@ void emac_update_hardware_stats(struct prueth_emac *emac)
>> base + icssg_all_stats[i].offset,
>> val);
>>
>> + if (!strncmp(icssg_ethtool_stats[i].name, "tx_good_frames", ETH_GSTRING_LEN))
>> + tx_pkt_cnt = val;
>> +
>> emac->stats[i] += val;
>> + if (!strncmp(icssg_ethtool_stats[i].name, "tx_total_bytes", ETH_GSTRING_LEN))
>> + emac->stats[i] -= tx_pkt_cnt * 8;
>> }
>> }
>>
>

--
Thanks and Regards,
Danish