mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-25 19:42:19 +00:00
net: mscc: ocelot: add TX timestamping statistics
Add an u64 hardware timestamping statistics structure for each ocelot port. Export a function from the common switch library for reporting them to ethtool. This is called by the ocelot switchdev front-end for now. Note that for the switchdev driver, we report the one-step PTP packets as unconfirmed, even though in principle, for some transmission mechanisms like FDMA, we may be able to confirm transmission and bump the "pkts" counter in ocelot_fdma_tx_cleanup() instead. I don't have access to hardware which uses the switchdev front-end, and I've kept the implementation simple. Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com> Reviewed-by: Jakub Kicinski <kuba@kernel.org> Link: https://patch.msgid.link/20250116104628.123555-4-vladimir.oltean@nxp.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
4b0a3ffa79
commit
8fbd24f3d1
@@ -759,6 +759,14 @@ struct ocelot_mm_state {
|
||||
u8 active_preemptible_tcs;
|
||||
};
|
||||
|
||||
struct ocelot_ts_stats {
|
||||
u64 pkts;
|
||||
u64 onestep_pkts_unconfirmed;
|
||||
u64 lost;
|
||||
u64 err;
|
||||
struct u64_stats_sync syncp;
|
||||
};
|
||||
|
||||
struct ocelot_port;
|
||||
|
||||
struct ocelot_port {
|
||||
@@ -778,6 +786,7 @@ struct ocelot_port {
|
||||
|
||||
phy_interface_t phy_mode;
|
||||
|
||||
struct ocelot_ts_stats *ts_stats;
|
||||
struct sk_buff_head tx_skbs;
|
||||
|
||||
unsigned int trap_proto;
|
||||
@@ -1023,6 +1032,8 @@ void ocelot_port_get_eth_mac_stats(struct ocelot *ocelot, int port,
|
||||
struct ethtool_eth_mac_stats *mac_stats);
|
||||
void ocelot_port_get_eth_phy_stats(struct ocelot *ocelot, int port,
|
||||
struct ethtool_eth_phy_stats *phy_stats);
|
||||
void ocelot_port_get_ts_stats(struct ocelot *ocelot, int port,
|
||||
struct ethtool_ts_stats *ts_stats);
|
||||
int ocelot_get_ts_info(struct ocelot *ocelot, int port,
|
||||
struct kernel_ethtool_ts_info *info);
|
||||
void ocelot_set_ageing_time(struct ocelot *ocelot, unsigned int msecs);
|
||||
|
||||
Reference in New Issue
Block a user