RE: [PATCH v2] net/iavf: add clock read support

"Mandal, Anurag" <[email protected]>
Newsgroups org.dpdk.dev
Message-ID <SA1PR11MB67820B908B21E2F7A30F189FE4A72@SA1PR11MB6782.namprd11.prod.outlook.com>
Hi All,

Gentle reminder for review & ack.

Thank you.

Regards,
Anurag M

> -----Original Message-----
> From: Mandal, Anurag <[email protected]>
> Sent: 27 July 2026 18:40
> To: [email protected]
> Cc: Richardson, Bruce <[email protected]>; Medvedkin, Vladimir
> <[email protected]>; Mandal, Anurag
> <[email protected]>
> Subject: [PATCH v2] net/iavf: add clock read support
> 
> Implemented read_clock ethdev operation by adding
> iavf_dev_read_clock() feature to get current time in nanoseconds for
> scheduling packets based on transmit time.
> 
> Signed-off-by: Anurag Mandal <[email protected]>
> ---
> V2: Addressed minor typo
> 
>  drivers/net/intel/iavf/iavf.h        |  1 +
>  drivers/net/intel/iavf/iavf_ethdev.c | 24 ++++++++++++++++++++++++
> drivers/net/intel/iavf/iavf_vchnl.c  | 13 ++++++++++---
>  3 files changed, 35 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..1a36885107 100644
> --- a/drivers/net/intel/iavf/iavf_ethdev.c
> +++ b/drivers/net/intel/iavf/iavf_ethdev.c
> @@ -165,6 +165,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_dev_read_clock(struct rte_eth_dev *dev, uint64_t
> +*clock);
> 
>  static const struct rte_pci_id pci_id_iavf_map[] = {
>  	{ RTE_PCI_DEVICE(IAVF_INTEL_VENDOR_ID,
> IAVF_DEV_ID_ADAPTIVE_VF) }, @@ -264,6 +265,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,
> +	.read_clock                 = iavf_dev_read_clock,
>  };
> 
>  static int
> @@ -3662,6 +3664,28 @@ bool is_iavf_supported(struct rte_eth_dev *dev)
>  	return !strcmp(dev->device->driver->name,
> rte_iavf_pmd.driver.name);  }
> 
> +static int
> +iavf_dev_read_clock(struct rte_eth_dev *dev, uint64_t *clock) {
> +	struct iavf_adapter *adapter =
> +		IAVF_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private);
> +	struct iavf_info *vf = IAVF_DEV_PRIVATE_TO_VF(adapter);
> +	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, clock);
> +	if (ret != 0)
> +		return -EIO;
> +
> +	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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.