From: Mark Blasko <[email protected]> Implement the read_clock operation in eth_dev_ops. The function calls the AdminQ command to fetch the current NIC timestamp synchronously, updates the cached timestamp used for reconstruction, and returns the full 64-bit value.
Signed-off-by: Mark Blasko <[email protected]> Reviewed-by: Joshua Washington <[email protected]> Reviewed-by: Jasper Tran O'Leary <[email protected]> --- drivers/net/gve/gve_ethdev.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/drivers/net/gve/gve_ethdev.c b/drivers/net/gve/gve_ethdev.c index b36bc7266e..e1f2585ede 100644 --- a/drivers/net/gve/gve_ethdev.c +++ b/drivers/net/gve/gve_ethdev.c @@ -1271,6 +1271,34 @@ gve_flow_ops_get(struct rte_eth_dev *dev, const struct rte_flow_ops **ops) return 0; } +static int +gve_read_clock(struct rte_eth_dev *dev, uint64_t *clock) +{ + struct gve_priv *priv = dev->data->dev_private; + uint64_t ts; + int err; + + if (!priv->nic_timestamp_supported) + return -EOPNOTSUPP; + + if (!priv->nic_ts_report_mz) + return -EIO; + + err = gve_adminq_report_nic_timestamp(priv, priv->nic_ts_report_mz->iova); + if (err != 0) + return err; + + ts = be64_to_cpu(priv->nic_ts_report->nic_timestamp); + *clock = ts; + + /* Update the cached value */ + rte_atomic_store_explicit(&priv->last_read_nic_timestamp, ts, rte_memory_order_relaxed); + rte_atomic_store_explicit(&priv->nic_ts_read_fails, 0, rte_memory_order_relaxed); + rte_atomic_store_explicit(&priv->nic_ts_stale, 0, rte_memory_order_release); + + return 0; +} + static const struct eth_dev_ops gve_eth_dev_ops = { .dev_configure = gve_dev_configure, .dev_start = gve_dev_start, @@ -1297,6 +1325,7 @@ static const struct eth_dev_ops gve_eth_dev_ops = { .rss_hash_conf_get = gve_rss_hash_conf_get, .reta_update = gve_rss_reta_update, .reta_query = gve_rss_reta_query, + .read_clock = gve_read_clock, }; static const struct eth_dev_ops gve_eth_dev_ops_dqo = { @@ -1325,6 +1354,7 @@ static const struct eth_dev_ops gve_eth_dev_ops_dqo = { .rss_hash_conf_get = gve_rss_hash_conf_get, .reta_update = gve_rss_reta_update, .reta_query = gve_rss_reta_query, + .read_clock = gve_read_clock, }; static int -- 2.54.0.563.g4f69b47b94-goog

