All of lore.kernel.org
 help / color / mirror / Atom feed
From: Rahul Rameshbabu <rrameshbabu@nvidia.com>
To: Mateusz Polchlopek <mateusz.polchlopek@intel.com>
Cc: Wojciech Drewek <wojciech.drewek@intel.com>,
	netdev@vger.kernel.org, anthony.l.nguyen@intel.com,
	horms@kernel.org, Jacob Keller <jacob.e.keller@intel.com>,
	intel-wired-lan@lists.osuosl.org
Subject: Re: [Intel-wired-lan] [PATCH iwl-next v5 05/12] iavf: negotiate PTP capabilities
Date: Thu, 18 Apr 2024 12:16:43 -0700	[thread overview]
Message-ID: <87wmoueakp.fsf@nvidia.com> (raw)
In-Reply-To: <20240418052500.50678-6-mateusz.polchlopek@intel.com>

On Thu, 18 Apr, 2024 01:24:53 -0400 Mateusz Polchlopek <mateusz.polchlopek@intel.com> wrote:
> From: Jacob Keller <jacob.e.keller@intel.com>
>
> Add a new extended capabilities negotiation to exchange information from
> the PF about what PTP capabilities are supported by this VF. This
> requires sending a VIRTCHNL_OP_1588_PTP_GET_CAPS message, and waiting
> for the response from the PF. Handle this early on during the VF
> initialization.
>
> Reviewed-by: Wojciech Drewek <wojciech.drewek@intel.com>
> Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
> Co-developed-by: Mateusz Polchlopek <mateusz.polchlopek@intel.com>
> Signed-off-by: Mateusz Polchlopek <mateusz.polchlopek@intel.com>
> ---
<snip>
> diff --git a/drivers/net/ethernet/intel/iavf/iavf_main.c b/drivers/net/ethernet/intel/iavf/iavf_main.c
<snip>
> @@ -2684,6 +2686,64 @@ static void iavf_init_recv_supported_rxdids(struct iavf_adapter *adapter)
>  	iavf_change_state(adapter, __IAVF_INIT_FAILED);
>  }
>  
> +/**
> + * iavf_init_send_ptp_caps - part of querying for extended PTP capabilities
> + * @adapter: board private structure
> + *
> + * Function processes send of the request for 1588 PTP capabilities to the PF.
> + * Must clear IAVF_EXTENDED_CAP_SEND_PTP if the message is not sent, e.g.
> + * due to the PF not negotiating VIRTCHNL_VF_PTP_CAP
> + */
> +static void iavf_init_send_ptp_caps(struct iavf_adapter *adapter)
> +{
> +	int ret;
> +
> +	WARN_ON(!(adapter->extended_caps & IAVF_EXTENDED_CAP_SEND_PTP));
> +
> +	ret = iavf_send_vf_ptp_caps_msg(adapter);
> +	if (ret && ret == -EOPNOTSUPP) {

Similar simplification to previous patch might be possible. Simply "ret
== -EOPNOTSUPP"?

> +		/* PF does not support VIRTCHNL_VF_PTP_CAP. In this case, we
> +		 * did not send the capability exchange message and do not
> +		 * expect a response.
> +		 */
> +		adapter->extended_caps &= ~IAVF_EXTENDED_CAP_RECV_PTP;
> +	}
> +
> +	/* We sent the message, so move on to the next step */
> +	adapter->extended_caps &= ~IAVF_EXTENDED_CAP_SEND_PTP;
> +}
> +
> +/**
> + * iavf_init_recv_ptp_caps - part of querying for supported PTP capabilities
> + * @adapter: board private structure
> + *
> + * Function processes receipt of the PTP capabilities supported on this VF.
> + **/
> +static void iavf_init_recv_ptp_caps(struct iavf_adapter *adapter)
> +{
> +	int ret;
> +
> +	WARN_ON(!(adapter->extended_caps & IAVF_EXTENDED_CAP_RECV_PTP));
> +
> +	memset(&adapter->ptp.hw_caps, 0, sizeof(adapter->ptp.hw_caps));
> +
> +	ret = iavf_get_vf_ptp_caps(adapter);
> +	if (ret)
> +		goto err;
> +
> +	/* We've processed the PF response to the VIRTCHNL_OP_1588_PTP_GET_CAPS
> +	 * message we sent previously.
> +	 */
> +	adapter->extended_caps &= ~IAVF_EXTENDED_CAP_RECV_PTP;
> +	return;
> +err:
> +	/* We didn't receive a reply. Make sure we try sending again when
> +	 * __IAVF_INIT_FAILED attempts to recover.
> +	 */
> +	adapter->extended_caps |= IAVF_EXTENDED_CAP_SEND_PTP;
> +	iavf_change_state(adapter, __IAVF_INIT_FAILED);
> +}
> +
>  /**
>   * iavf_init_process_extended_caps - Part of driver startup
>   * @adapter: board private structure
<snip>
> diff --git a/drivers/net/ethernet/intel/iavf/iavf_virtchnl.c b/drivers/net/ethernet/intel/iavf/iavf_virtchnl.c
> index 52b8f1721147..5d99adb69d75 100644
> --- a/drivers/net/ethernet/intel/iavf/iavf_virtchnl.c
> +++ b/drivers/net/ethernet/intel/iavf/iavf_virtchnl.c
> @@ -145,6 +145,7 @@ int iavf_send_vf_config_msg(struct iavf_adapter *adapter)
>  	       VIRTCHNL_VF_OFFLOAD_CRC |
>  	       VIRTCHNL_VF_OFFLOAD_ENCAP_CSUM |
>  	       VIRTCHNL_VF_OFFLOAD_REQ_QUEUES |
> +	       VIRTCHNL_VF_CAP_PTP |
>  	       VIRTCHNL_VF_OFFLOAD_ADQ |
>  	       VIRTCHNL_VF_OFFLOAD_USO |
>  	       VIRTCHNL_VF_OFFLOAD_FDIR_PF |
> @@ -187,6 +188,41 @@ int iavf_send_vf_supported_rxdids_msg(struct iavf_adapter *adapter)
>  				NULL, 0);
>  }
>  
> +/**
> + * iavf_send_vf_ptp_caps_msg - Send request for PTP capabilities
> + * @adapter: private adapter structure
> + *
> + * Send the VIRTCHNL_OP_1588_PTP_GET_CAPS command to the PF to request the PTP
> + * capabilities available to this device. This includes the following
> + * potential access:
> + *
> + * * READ_PHC - access to read the PTP hardware clock time
> + * * RX_TSTAMP - access to request Rx timestamps on all received packets
> + *
> + * The PF will reply with the same opcode a filled out copy of the
> + * virtchnl_ptp_caps structure which defines the specifics of which features
> + * are accessible to this device.
> + *
> + * Return: 0 if success, error code otherwise
> + */
> +int iavf_send_vf_ptp_caps_msg(struct iavf_adapter *adapter)
> +{
> +	struct virtchnl_ptp_caps hw_caps = {};

To properly zero-init a struct, shouldn't this be the following?

  struct virtchnl_ptp_caps hw_caps = {0};

ISO C forbids empty initializer braces.

> +
> +	adapter->aq_required &= ~IAVF_FLAG_AQ_GET_PTP_CAPS;
> +
> +	if (!PTP_ALLOWED(adapter))
> +		return -EOPNOTSUPP;
> +
> +	hw_caps.caps = (VIRTCHNL_1588_PTP_CAP_READ_PHC |
> +			VIRTCHNL_1588_PTP_CAP_RX_TSTAMP);
> +
> +	adapter->current_op = VIRTCHNL_OP_1588_PTP_GET_CAPS;
> +
> +	return iavf_send_pf_msg(adapter, VIRTCHNL_OP_1588_PTP_GET_CAPS,
> +				(u8 *)&hw_caps, sizeof(hw_caps));
> +}
> +
>  /**
>   * iavf_validate_num_queues
>   * @adapter: adapter structure

--
Thanks,

Rahul Rameshbabu

WARNING: multiple messages have this Message-ID (diff)
From: Rahul Rameshbabu <rrameshbabu@nvidia.com>
To: Mateusz Polchlopek <mateusz.polchlopek@intel.com>
Cc: intel-wired-lan@lists.osuosl.org, netdev@vger.kernel.org,
	horms@kernel.org, anthony.l.nguyen@intel.com,
	Jacob Keller <jacob.e.keller@intel.com>,
	Wojciech Drewek <wojciech.drewek@intel.com>
Subject: Re: [Intel-wired-lan] [PATCH iwl-next v5 05/12] iavf: negotiate PTP capabilities
Date: Thu, 18 Apr 2024 12:16:43 -0700	[thread overview]
Message-ID: <87wmoueakp.fsf@nvidia.com> (raw)
In-Reply-To: <20240418052500.50678-6-mateusz.polchlopek@intel.com>

On Thu, 18 Apr, 2024 01:24:53 -0400 Mateusz Polchlopek <mateusz.polchlopek@intel.com> wrote:
> From: Jacob Keller <jacob.e.keller@intel.com>
>
> Add a new extended capabilities negotiation to exchange information from
> the PF about what PTP capabilities are supported by this VF. This
> requires sending a VIRTCHNL_OP_1588_PTP_GET_CAPS message, and waiting
> for the response from the PF. Handle this early on during the VF
> initialization.
>
> Reviewed-by: Wojciech Drewek <wojciech.drewek@intel.com>
> Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
> Co-developed-by: Mateusz Polchlopek <mateusz.polchlopek@intel.com>
> Signed-off-by: Mateusz Polchlopek <mateusz.polchlopek@intel.com>
> ---
<snip>
> diff --git a/drivers/net/ethernet/intel/iavf/iavf_main.c b/drivers/net/ethernet/intel/iavf/iavf_main.c
<snip>
> @@ -2684,6 +2686,64 @@ static void iavf_init_recv_supported_rxdids(struct iavf_adapter *adapter)
>  	iavf_change_state(adapter, __IAVF_INIT_FAILED);
>  }
>  
> +/**
> + * iavf_init_send_ptp_caps - part of querying for extended PTP capabilities
> + * @adapter: board private structure
> + *
> + * Function processes send of the request for 1588 PTP capabilities to the PF.
> + * Must clear IAVF_EXTENDED_CAP_SEND_PTP if the message is not sent, e.g.
> + * due to the PF not negotiating VIRTCHNL_VF_PTP_CAP
> + */
> +static void iavf_init_send_ptp_caps(struct iavf_adapter *adapter)
> +{
> +	int ret;
> +
> +	WARN_ON(!(adapter->extended_caps & IAVF_EXTENDED_CAP_SEND_PTP));
> +
> +	ret = iavf_send_vf_ptp_caps_msg(adapter);
> +	if (ret && ret == -EOPNOTSUPP) {

Similar simplification to previous patch might be possible. Simply "ret
== -EOPNOTSUPP"?

> +		/* PF does not support VIRTCHNL_VF_PTP_CAP. In this case, we
> +		 * did not send the capability exchange message and do not
> +		 * expect a response.
> +		 */
> +		adapter->extended_caps &= ~IAVF_EXTENDED_CAP_RECV_PTP;
> +	}
> +
> +	/* We sent the message, so move on to the next step */
> +	adapter->extended_caps &= ~IAVF_EXTENDED_CAP_SEND_PTP;
> +}
> +
> +/**
> + * iavf_init_recv_ptp_caps - part of querying for supported PTP capabilities
> + * @adapter: board private structure
> + *
> + * Function processes receipt of the PTP capabilities supported on this VF.
> + **/
> +static void iavf_init_recv_ptp_caps(struct iavf_adapter *adapter)
> +{
> +	int ret;
> +
> +	WARN_ON(!(adapter->extended_caps & IAVF_EXTENDED_CAP_RECV_PTP));
> +
> +	memset(&adapter->ptp.hw_caps, 0, sizeof(adapter->ptp.hw_caps));
> +
> +	ret = iavf_get_vf_ptp_caps(adapter);
> +	if (ret)
> +		goto err;
> +
> +	/* We've processed the PF response to the VIRTCHNL_OP_1588_PTP_GET_CAPS
> +	 * message we sent previously.
> +	 */
> +	adapter->extended_caps &= ~IAVF_EXTENDED_CAP_RECV_PTP;
> +	return;
> +err:
> +	/* We didn't receive a reply. Make sure we try sending again when
> +	 * __IAVF_INIT_FAILED attempts to recover.
> +	 */
> +	adapter->extended_caps |= IAVF_EXTENDED_CAP_SEND_PTP;
> +	iavf_change_state(adapter, __IAVF_INIT_FAILED);
> +}
> +
>  /**
>   * iavf_init_process_extended_caps - Part of driver startup
>   * @adapter: board private structure
<snip>
> diff --git a/drivers/net/ethernet/intel/iavf/iavf_virtchnl.c b/drivers/net/ethernet/intel/iavf/iavf_virtchnl.c
> index 52b8f1721147..5d99adb69d75 100644
> --- a/drivers/net/ethernet/intel/iavf/iavf_virtchnl.c
> +++ b/drivers/net/ethernet/intel/iavf/iavf_virtchnl.c
> @@ -145,6 +145,7 @@ int iavf_send_vf_config_msg(struct iavf_adapter *adapter)
>  	       VIRTCHNL_VF_OFFLOAD_CRC |
>  	       VIRTCHNL_VF_OFFLOAD_ENCAP_CSUM |
>  	       VIRTCHNL_VF_OFFLOAD_REQ_QUEUES |
> +	       VIRTCHNL_VF_CAP_PTP |
>  	       VIRTCHNL_VF_OFFLOAD_ADQ |
>  	       VIRTCHNL_VF_OFFLOAD_USO |
>  	       VIRTCHNL_VF_OFFLOAD_FDIR_PF |
> @@ -187,6 +188,41 @@ int iavf_send_vf_supported_rxdids_msg(struct iavf_adapter *adapter)
>  				NULL, 0);
>  }
>  
> +/**
> + * iavf_send_vf_ptp_caps_msg - Send request for PTP capabilities
> + * @adapter: private adapter structure
> + *
> + * Send the VIRTCHNL_OP_1588_PTP_GET_CAPS command to the PF to request the PTP
> + * capabilities available to this device. This includes the following
> + * potential access:
> + *
> + * * READ_PHC - access to read the PTP hardware clock time
> + * * RX_TSTAMP - access to request Rx timestamps on all received packets
> + *
> + * The PF will reply with the same opcode a filled out copy of the
> + * virtchnl_ptp_caps structure which defines the specifics of which features
> + * are accessible to this device.
> + *
> + * Return: 0 if success, error code otherwise
> + */
> +int iavf_send_vf_ptp_caps_msg(struct iavf_adapter *adapter)
> +{
> +	struct virtchnl_ptp_caps hw_caps = {};

To properly zero-init a struct, shouldn't this be the following?

  struct virtchnl_ptp_caps hw_caps = {0};

ISO C forbids empty initializer braces.

> +
> +	adapter->aq_required &= ~IAVF_FLAG_AQ_GET_PTP_CAPS;
> +
> +	if (!PTP_ALLOWED(adapter))
> +		return -EOPNOTSUPP;
> +
> +	hw_caps.caps = (VIRTCHNL_1588_PTP_CAP_READ_PHC |
> +			VIRTCHNL_1588_PTP_CAP_RX_TSTAMP);
> +
> +	adapter->current_op = VIRTCHNL_OP_1588_PTP_GET_CAPS;
> +
> +	return iavf_send_pf_msg(adapter, VIRTCHNL_OP_1588_PTP_GET_CAPS,
> +				(u8 *)&hw_caps, sizeof(hw_caps));
> +}
> +
>  /**
>   * iavf_validate_num_queues
>   * @adapter: adapter structure

--
Thanks,

Rahul Rameshbabu

  reply	other threads:[~2024-04-18 20:08 UTC|newest]

Thread overview: 84+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-18  5:24 [Intel-wired-lan] [PATCH iwl-next v5 00/12] Add support for Rx timestamping for both ice and iavf drivers Mateusz Polchlopek
2024-04-18  5:24 ` Mateusz Polchlopek
2024-04-18  5:24 ` [Intel-wired-lan] [PATCH iwl-next v5 01/12] virtchnl: add support for enabling PTP on iAVF Mateusz Polchlopek
2024-04-18  5:24   ` Mateusz Polchlopek
2024-04-18 18:49   ` Rahul Rameshbabu
2024-04-18 18:49     ` Rahul Rameshbabu
2024-04-18  5:24 ` [Intel-wired-lan] [PATCH iwl-next v5 02/12] ice: support Rx timestamp on flex descriptor Mateusz Polchlopek
2024-04-18  5:24   ` Mateusz Polchlopek
2024-04-18 18:57   ` Rahul Rameshbabu
2024-04-18 18:57     ` Rahul Rameshbabu
2024-04-22  9:34     ` Mateusz Polchlopek
2024-04-22  9:34       ` Mateusz Polchlopek
2024-04-18  5:24 ` [Intel-wired-lan] [PATCH iwl-next v5 03/12] virtchnl: add enumeration for the rxdid format Mateusz Polchlopek
2024-04-18  5:24   ` Mateusz Polchlopek
2024-04-18 19:05   ` Rahul Rameshbabu
2024-04-18 19:05     ` Rahul Rameshbabu
2024-04-18  5:24 ` [Intel-wired-lan] [PATCH iwl-next v5 04/12] iavf: add support for negotiating flexible RXDID format Mateusz Polchlopek
2024-04-18  5:24   ` Mateusz Polchlopek
2024-04-18 19:11   ` Rahul Rameshbabu
2024-04-18 19:11     ` Rahul Rameshbabu
2024-04-22  9:34     ` Mateusz Polchlopek
2024-04-22  9:34       ` Mateusz Polchlopek
2024-04-18  5:24 ` [Intel-wired-lan] [PATCH iwl-next v5 05/12] iavf: negotiate PTP capabilities Mateusz Polchlopek
2024-04-18  5:24   ` Mateusz Polchlopek
2024-04-18 19:16   ` Rahul Rameshbabu [this message]
2024-04-18 19:16     ` Rahul Rameshbabu
2024-04-22  9:33     ` Mateusz Polchlopek
2024-04-22  9:33       ` Mateusz Polchlopek
2024-04-18  5:24 ` [Intel-wired-lan] [PATCH iwl-next v5 06/12] iavf: add initial framework for registering PTP clock Mateusz Polchlopek
2024-04-18  5:24   ` Mateusz Polchlopek
2024-04-18 19:28   ` Rahul Rameshbabu
2024-04-18 19:28     ` Rahul Rameshbabu
2024-04-22  9:29     ` Mateusz Polchlopek
2024-04-22  9:29       ` Mateusz Polchlopek
2024-04-18  5:24 ` [Intel-wired-lan] [PATCH iwl-next v5 07/12] iavf: add support for indirect access to PHC time Mateusz Polchlopek
2024-04-18  5:24   ` Mateusz Polchlopek
2024-04-18 19:43   ` Rahul Rameshbabu
2024-04-18 19:43     ` Rahul Rameshbabu
2024-04-18  5:24 ` [Intel-wired-lan] [PATCH iwl-next v5 08/12] iavf: periodically cache " Mateusz Polchlopek
2024-04-18  5:24   ` Mateusz Polchlopek
2024-04-18 19:51   ` Rahul Rameshbabu
2024-04-18 19:51     ` Rahul Rameshbabu
2024-04-22  9:23     ` Mateusz Polchlopek
2024-04-22  9:23       ` Mateusz Polchlopek
2024-04-24 22:03       ` Keller, Jacob E
2024-04-24 22:03         ` Keller, Jacob E
2024-04-25 10:52         ` Przemek Kitszel
2024-04-25 10:52           ` Przemek Kitszel
2024-04-25 16:28           ` Keller, Jacob E
2024-04-25 16:28             ` Keller, Jacob E
2024-04-25 17:10             ` Rahul Rameshbabu
2024-04-25 17:10               ` Rahul Rameshbabu
2024-04-18  5:24 ` [Intel-wired-lan] [PATCH iwl-next v5 09/12] iavf: refactor iavf_clean_rx_irq to support legacy and flex descriptors Mateusz Polchlopek
2024-04-18  5:24   ` Mateusz Polchlopek
2024-04-18 20:00   ` Rahul Rameshbabu
2024-04-18 20:00     ` Rahul Rameshbabu
2024-04-22  9:22     ` Mateusz Polchlopek
2024-04-22  9:22       ` Mateusz Polchlopek
2024-04-23 10:51   ` Sunil Kovvuri Goutham
2024-04-23 10:51     ` Sunil Kovvuri Goutham
2024-04-26  7:15     ` Mateusz Polchlopek
2024-04-26  7:15       ` Mateusz Polchlopek
2024-04-18  5:24 ` [Intel-wired-lan] [PATCH iwl-next v5 10/12] iavf: Implement checking DD desc field Mateusz Polchlopek
2024-04-18  5:24   ` Mateusz Polchlopek
2024-04-18 20:07   ` Rahul Rameshbabu
2024-04-18 20:07     ` Rahul Rameshbabu
2024-04-18  5:24 ` [Intel-wired-lan] [PATCH iwl-next v5 11/12] iavf: handle SIOCSHWTSTAMP and SIOCGHWTSTAMP Mateusz Polchlopek
2024-04-18  5:24   ` Mateusz Polchlopek
2024-04-18 20:08   ` Rahul Rameshbabu
2024-04-18 20:08     ` Rahul Rameshbabu
2024-04-18  5:25 ` [Intel-wired-lan] [PATCH iwl-next v5 12/12] iavf: add support for Rx timestamps to hotpath Mateusz Polchlopek
2024-04-18  5:25   ` Mateusz Polchlopek
2024-04-18 20:12   ` Rahul Rameshbabu
2024-04-18 20:12     ` Rahul Rameshbabu
2024-04-23 10:47   ` Sunil Kovvuri Goutham
2024-04-23 10:47     ` Sunil Kovvuri Goutham
2024-04-18 20:19 ` [Intel-wired-lan] [PATCH iwl-next v5 00/12] Add support for Rx timestamping for both ice and iavf drivers Rahul Rameshbabu
2024-04-18 20:19   ` Rahul Rameshbabu
2024-04-22  9:37   ` Mateusz Polchlopek
2024-04-22  9:37     ` Mateusz Polchlopek
2024-04-23  5:57     ` Rahul Rameshbabu
2024-04-23  5:57       ` Rahul Rameshbabu
2024-04-23  6:08       ` Mateusz Polchlopek
2024-04-23  6:08         ` Mateusz Polchlopek

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=87wmoueakp.fsf@nvidia.com \
    --to=rrameshbabu@nvidia.com \
    --cc=anthony.l.nguyen@intel.com \
    --cc=horms@kernel.org \
    --cc=intel-wired-lan@lists.osuosl.org \
    --cc=jacob.e.keller@intel.com \
    --cc=mateusz.polchlopek@intel.com \
    --cc=netdev@vger.kernel.org \
    --cc=wojciech.drewek@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.