From: Anurag Mandal <anurag.mandal@intel.com>
To: dev@dpdk.org
Cc: bruce.richardson@intel.com, vladimir.medvedkin@intel.com,
rajesh3.kumar@intel.com, Anurag Mandal <anurag.mandal@intel.com>
Subject: [PATCH v4] net/iavf: add reading PHC time support
Date: Tue, 15 Sep 2026 16:42:31 +0000 [thread overview]
Message-ID: <20260915164231.247037-1-anurag.mandal@intel.com> (raw)
In-Reply-To: <20260727102444.789833-1-anurag.mandal@intel.com>
Added iavf support for the
timesync_read_time ethdev API to read
the device PTP Hardware Clock (PHC).
A VF has no direct access to the PHC,
so the time is fetched from the PF
over virtchnl, and the API is only
advertised when the PF grants the
PTP read capability.
Signed-off-by: Anurag Mandal <anurag.mandal@intel.com>
---
V4: Addressed Rajesh Kumar's feedback
- return the error unchanged
V3: Changed read_clock to timesync_read_time
V2: Addressed minor typo
drivers/net/intel/iavf/iavf.h | 1 +
drivers/net/intel/iavf/iavf_ethdev.c | 28 ++++++++++++++++++++++++++++
drivers/net/intel/iavf/iavf_vchnl.c | 13 ++++++++++---
3 files changed, 39 insertions(+), 3 deletions(-)
diff --git a/drivers/net/intel/iavf/iavf.h b/drivers/net/intel/iavf/iavf.h
index 293adaf6c9..416625d9fb 100644
--- a/drivers/net/intel/iavf/iavf.h
+++ b/drivers/net/intel/iavf/iavf.h
@@ -533,4 +533,5 @@ void iavf_handle_hw_reset(struct rte_eth_dev *dev, bool vf_initiated_reset);
void iavf_set_no_poll(struct iavf_adapter *adapter, bool link_change);
bool is_iavf_supported(struct rte_eth_dev *dev);
void iavf_hash_uninit(struct iavf_adapter *ad);
+int iavf_phc_get_time(struct iavf_adapter *adapter, uint64_t *time);
#endif /* _IAVF_ETHDEV_H_ */
diff --git a/drivers/net/intel/iavf/iavf_ethdev.c b/drivers/net/intel/iavf/iavf_ethdev.c
index e475b64971..cb0e8989e1 100644
--- a/drivers/net/intel/iavf/iavf_ethdev.c
+++ b/drivers/net/intel/iavf/iavf_ethdev.c
@@ -24,6 +24,7 @@
#include <rte_cycles.h>
#include <rte_eal.h>
#include <rte_ether.h>
+#include <rte_time.h>
#include <ethdev_driver.h>
#include <ethdev_pci.h>
#include <rte_malloc.h>
@@ -165,6 +166,7 @@ static int iavf_set_mc_addr_list(struct rte_eth_dev *dev,
struct rte_ether_addr *mc_addrs,
uint32_t mc_addrs_num);
static int iavf_tm_ops_get(struct rte_eth_dev *dev __rte_unused, void *arg);
+static int iavf_timesync_read_time(struct rte_eth_dev *dev, struct timespec *timestamp);
static const struct rte_pci_id pci_id_iavf_map[] = {
{ RTE_PCI_DEVICE(IAVF_INTEL_VENDOR_ID, IAVF_DEV_ID_ADAPTIVE_VF) },
@@ -264,6 +266,7 @@ static const struct eth_dev_ops iavf_eth_dev_ops = {
.tx_done_cleanup = iavf_dev_tx_done_cleanup,
.get_monitor_addr = iavf_get_monitor_addr,
.tm_ops_get = iavf_tm_ops_get,
+ .timesync_read_time = iavf_timesync_read_time,
};
static int
@@ -3662,6 +3665,31 @@ bool is_iavf_supported(struct rte_eth_dev *dev)
return !strcmp(dev->device->driver->name, rte_iavf_pmd.driver.name);
}
+static int
+iavf_timesync_read_time(struct rte_eth_dev *dev, struct timespec *timestamp)
+{
+ struct iavf_adapter *adapter =
+ IAVF_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private);
+ struct iavf_info *vf = IAVF_DEV_PRIVATE_TO_VF(adapter);
+ uint64_t time;
+ int ret;
+
+ if (adapter->closed)
+ return -EIO;
+
+ if (!(vf->vf_res->vf_cap_flags & VIRTCHNL_VF_CAP_PTP) ||
+ !(vf->ptp_caps & VIRTCHNL_1588_PTP_CAP_READ_PHC))
+ return -ENOTSUP;
+
+ ret = iavf_phc_get_time(adapter, &time);
+ if (ret != 0)
+ return ret;
+
+ *timestamp = rte_ns_to_timespec(time);
+
+ return 0;
+}
+
RTE_PMD_REGISTER_PCI(net_iavf, rte_iavf_pmd);
RTE_PMD_REGISTER_PCI_TABLE(net_iavf, pci_id_iavf_map);
RTE_PMD_REGISTER_KMOD_DEP(net_iavf, "* igb_uio | vfio-pci");
diff --git a/drivers/net/intel/iavf/iavf_vchnl.c b/drivers/net/intel/iavf/iavf_vchnl.c
index f346837bf1..a63639549c 100644
--- a/drivers/net/intel/iavf/iavf_vchnl.c
+++ b/drivers/net/intel/iavf/iavf_vchnl.c
@@ -2521,9 +2521,8 @@ iavf_get_ptp_cap(struct iavf_adapter *adapter)
}
int
-iavf_get_phc_time(struct ci_rx_queue *rxq)
+iavf_phc_get_time(struct iavf_adapter *adapter, uint64_t *time)
{
- struct iavf_adapter *adapter = rxq->iavf_vsi->adapter;
struct iavf_info *vf = IAVF_DEV_PRIVATE_TO_VF(adapter);
uint8_t msg_buf[IAVF_AQ_BUF_SZ] = {0};
struct virtchnl_phc_time phc_time;
@@ -2543,9 +2542,17 @@ iavf_get_phc_time(struct ci_rx_queue *rxq)
"Failed to execute command of VIRTCHNL_OP_1588_PTP_GET_TIME");
goto out;
}
- rxq->phc_time = ((struct virtchnl_phc_time *)args.out_buffer)->time;
+ *time = ((struct virtchnl_phc_time *)args.out_buffer)->time;
out:
rte_spinlock_unlock(&vf->phc_time_aq_lock);
return err;
}
+
+int
+iavf_get_phc_time(struct ci_rx_queue *rxq)
+{
+ struct iavf_adapter *adapter = rxq->iavf_vsi->adapter;
+
+ return iavf_phc_get_time(adapter, &rxq->phc_time);
+}
--
2.34.1
next prev parent reply other threads:[~2026-09-15 16:40 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-27 10:24 [PATCH] net/iavf: add clock read support Anurag Mandal
2026-07-27 13:10 ` [PATCH v2] " Anurag Mandal
2026-08-17 9:18 ` Mandal, Anurag
2026-07-28 0:22 ` [PATCH] " Mandal, Anurag
2026-09-02 5:54 ` [PATCH v3] net/iavf: add PTP " Anurag Mandal
2026-09-15 13:02 ` [PATCH v3] net/iavf: support reading PHC time Rajesh Kumar
2026-09-15 13:05 ` Mandal, Anurag
2026-09-15 16:42 ` Anurag Mandal [this message]
2026-09-17 8:04 ` [PATCH v4] net/iavf: add reading PHC time support Kumar, Rajesh
2026-09-17 9:11 ` Bruce Richardson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260915164231.247037-1-anurag.mandal@intel.com \
--to=anurag.mandal@intel.com \
--cc=bruce.richardson@intel.com \
--cc=dev@dpdk.org \
--cc=rajesh3.kumar@intel.com \
--cc=vladimir.medvedkin@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox