mirror of
https://github.com/torvalds/linux.git
synced 2026-05-23 14:42:08 +02:00
net: ti: icssg-prueth: Fix tx_total_bytes count
ICSSG HW stats on TX side considers 8 preamble bytes as data bytes. Due
to this the tx_bytes of ICSSG interface doesn't match the rx_bytes of the
link partner. There is no public errata available yet.
As a workaround to fix this, decrease tx_bytes by 8 bytes for every tx
frame.
Fixes: c1e10d5dc7 ("net: ti: icssg-prueth: Add ICSSG Stats")
Signed-off-by: MD Danish Anwar <danishanwar@ti.com>
Link: https://lore.kernel.org/r/20231012064626.977466-1-danishanwar@ti.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
a258c804aa
commit
2c0d808f36
|
|
@ -9,6 +9,9 @@
|
|||
#include "icssg_stats.h"
|
||||
#include <linux/regmap.h>
|
||||
|
||||
#define ICSSG_TX_PACKET_OFFSET 0xA0
|
||||
#define ICSSG_TX_BYTE_OFFSET 0xEC
|
||||
|
||||
static u32 stats_base[] = { 0x54c, /* Slice 0 stats start */
|
||||
0xb18, /* Slice 1 stats start */
|
||||
};
|
||||
|
|
@ -18,6 +21,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 +33,12 @@ void emac_update_hardware_stats(struct prueth_emac *emac)
|
|||
base + icssg_all_stats[i].offset,
|
||||
val);
|
||||
|
||||
if (icssg_all_stats[i].offset == ICSSG_TX_PACKET_OFFSET)
|
||||
tx_pkt_cnt = val;
|
||||
|
||||
emac->stats[i] += val;
|
||||
if (icssg_all_stats[i].offset == ICSSG_TX_BYTE_OFFSET)
|
||||
emac->stats[i] -= tx_pkt_cnt * 8;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user