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

From: Ravi Gunasekaran
Date: Wed Oct 11 2023 - 05:47:09 EST




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".

> 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;
> }
> }
>

--
Regards,
Ravi