All of lore.kernel.org
 help / color / mirror / Atom feed
From: Simon Horman <horms@kernel.org>
To: Karol Kolacinski <karol.kolacinski@intel.com>
Cc: Jacob Keller <jacob.e.keller@intel.com>,
	netdev@vger.kernel.org, anthony.l.nguyen@intel.com,
	intel-wired-lan@lists.osuosl.org, jesse.brandeburg@intel.com
Subject: Re: [Intel-wired-lan] [PATCH v5 iwl-next 5/6] ice: factor out ice_ptp_rebuild_owner()
Date: Mon, 15 Jan 2024 10:39:40 +0000	[thread overview]
Message-ID: <20240115103940.GN392144@kernel.org> (raw)
In-Reply-To: <20240108124717.1845481-6-karol.kolacinski@intel.com>

On Mon, Jan 08, 2024 at 01:47:16PM +0100, Karol Kolacinski wrote:
> From: Jacob Keller <jacob.e.keller@intel.com>
> 
> The ice_ptp_reset() function uses a goto to skip past clock owner
> operations if performing a PF reset or if the device is not the clock
> owner. This is a bit confusing. Factor this out into
> ice_ptp_rebuild_owner() instead.
> 
> The ice_ptp_reset() function is called by ice_rebuild() to restore PTP
> functionality after a device reset. Follow the convention set by the
> ice_main.c file and rename this function to ice_ptp_rebuild(), in the
> same way that we have ice_prepare_for_reset() and
> ice_ptp_prepare_for_reset().

nit: This feels more like two changes than one,
     which I might have put into two patches.

> Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
> Signed-off-by: Karol Kolacinski <karol.kolacinski@intel.com>
> Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>

...

> diff --git a/drivers/net/ethernet/intel/ice/ice_ptp.c b/drivers/net/ethernet/intel/ice/ice_ptp.c
> index fe2d8389627b..8a589f853e96 100644
> --- a/drivers/net/ethernet/intel/ice/ice_ptp.c
> +++ b/drivers/net/ethernet/intel/ice/ice_ptp.c
> @@ -2665,11 +2665,13 @@ void ice_ptp_prepare_for_reset(struct ice_pf *pf, enum ice_reset_req reset_type)
>  }
>  
>  /**
> - * ice_ptp_reset - Initialize PTP hardware clock support after reset
> + * ice_ptp_rebuild_owner - Initialize PTP clock owner after reset
>   * @pf: Board private structure
> - * @reset_type: the reset type being performed
> + *
> + * Companion function for ice_ptp_rebuild() which handles tasks that only the
> + * PTP clock owner instance should perform.
>   */
> -void ice_ptp_reset(struct ice_pf *pf, enum ice_reset_req reset_type)
> +static int ice_ptp_rebuild_owner(struct ice_pf *pf)
>  {
>  	struct ice_ptp *ptp = &pf->ptp;
>  	struct ice_hw *hw = &pf->hw;
> @@ -2677,34 +2679,21 @@ void ice_ptp_reset(struct ice_pf *pf, enum ice_reset_req reset_type)
>  	u64 time_diff;
>  	int err;
>  
> -	if (ptp->state != ICE_PTP_RESETTING) {
> -		if (ptp->state == ICE_PTP_READY) {
> -			ice_ptp_prepare_for_reset(pf, reset_type);
> -		} else {
> -			err = -EINVAL;
> -			dev_err(ice_pf_to_dev(pf), "PTP was not initialized\n");
> -			goto err;
> -		}
> -	}
> -
> -	if (reset_type == ICE_RESET_PFR || !ice_pf_src_tmr_owned(pf))
> -		goto pfr;
> -
>  	err = ice_ptp_init_phc(hw);
>  	if (err)
> -		goto err;
> +		return err;
>  
>  	/* Acquire the global hardware lock */
>  	if (!ice_ptp_lock(hw)) {
>  		err = -EBUSY;
> -		goto err;
> +		return err;
>  	}
>  
>  	/* Write the increment time value to PHY and LAN */
>  	err = ice_ptp_write_incval(hw, ice_base_incval(pf));
>  	if (err) {
>  		ice_ptp_unlock(hw);
> -		goto err;
> +		return err;
>  	}
>  
>  	/* Write the initial Time value to PHY and LAN using the cached PHC
> @@ -2720,7 +2709,7 @@ void ice_ptp_reset(struct ice_pf *pf, enum ice_reset_req reset_type)
>  	err = ice_ptp_write_init(pf, &ts);
>  	if (err) {
>  		ice_ptp_unlock(hw);
> -		goto err;
> +		return err;
>  	}
>  
>  	/* Release the global hardware lock */
> @@ -2729,11 +2718,41 @@ void ice_ptp_reset(struct ice_pf *pf, enum ice_reset_req reset_type)
>  	if (!ice_is_e810(hw)) {
>  		/* Enable quad interrupts */
>  		err = ice_ptp_cfg_phy_interrupt(pf, true, 1);
> +		if (err)
> +			return err;
> +
> +		ice_ptp_restart_all_phy(pf);

The conditions for calling ice_ptp_restart_all_phy() seem to have
changed (though perhaps in practice they are the same).
And the ordering of this operation relative to the following code has
changed:

	/* Init Tx structures */
	if (ice_is_e810(&pf->hw)) {
		err = ice_ptp_init_tx_e810(pf, &ptp->port.tx);
	} else {
		kthread_init_delayed_work(&ptp->port.ov_work,
					  ice_ptp_wait_for_offsets);
		err = ice_ptp_init_tx_e82x(pf, &ptp->port.tx,
					   ptp->port.port_num);
	}

	ptp->state = ICE_PTP_READY;

Is this intentional?

I do see that the above code is removed in the following patch,
and replaced by a call to ice_ptp_flush_all_tx_tracker()
in ice_ptp_rebuild_owner(). But perhaps this patch
should move this code block code to that location?

> +	}
> +
> +	return 0;
> +}
> +
> +/**
> + * ice_ptp_rebuild - Initialize PTP hardware clock support after reset
> + * @pf: Board private structure
> + * @reset_type: the reset type being performed
> + */
> +void ice_ptp_rebuild(struct ice_pf *pf, enum ice_reset_req reset_type)
> +{
> +	struct ice_ptp *ptp = &pf->ptp;
> +	int err;
> +
> +	if (ptp->state != ICE_PTP_RESETTING) {
> +		if (ptp->state == ICE_PTP_READY) {
> +			ice_ptp_prepare_for_reset(pf, reset_type);
> +		} else {
> +			err = -EINVAL;
> +			dev_err(ice_pf_to_dev(pf), "PTP was not initialized\n");
> +			goto err;
> +		}
> +	}
> +
> +	if (ice_pf_src_tmr_owned(pf) && reset_type != ICE_RESET_PFR) {
> +		err = ice_ptp_rebuild_owner(pf);
>  		if (err)
>  			goto err;
>  	}
>  
> -pfr:
>  	/* Init Tx structures */
>  	if (ice_is_e810(&pf->hw)) {
>  		err = ice_ptp_init_tx_e810(pf, &ptp->port.tx);
> @@ -2748,11 +2767,6 @@ void ice_ptp_reset(struct ice_pf *pf, enum ice_reset_req reset_type)
>  
>  	ptp->state = ICE_PTP_READY;
>  
> -	/* Restart the PHY timestamping block */
> -	if (!test_bit(ICE_PFR_REQ, pf->state) &&
> -	    ice_pf_src_tmr_owned(pf))
> -		ice_ptp_restart_all_phy(pf);
> -
>  	/* Start periodic work going */
>  	kthread_queue_delayed_work(ptp->kworker, &ptp->work, 0);
>  

...

WARNING: multiple messages have this Message-ID (diff)
From: Simon Horman <horms@kernel.org>
To: Karol Kolacinski <karol.kolacinski@intel.com>
Cc: intel-wired-lan@lists.osuosl.org, netdev@vger.kernel.org,
	anthony.l.nguyen@intel.com, jesse.brandeburg@intel.com,
	Jacob Keller <jacob.e.keller@intel.com>
Subject: Re: [PATCH v5 iwl-next 5/6] ice: factor out ice_ptp_rebuild_owner()
Date: Mon, 15 Jan 2024 10:39:40 +0000	[thread overview]
Message-ID: <20240115103940.GN392144@kernel.org> (raw)
In-Reply-To: <20240108124717.1845481-6-karol.kolacinski@intel.com>

On Mon, Jan 08, 2024 at 01:47:16PM +0100, Karol Kolacinski wrote:
> From: Jacob Keller <jacob.e.keller@intel.com>
> 
> The ice_ptp_reset() function uses a goto to skip past clock owner
> operations if performing a PF reset or if the device is not the clock
> owner. This is a bit confusing. Factor this out into
> ice_ptp_rebuild_owner() instead.
> 
> The ice_ptp_reset() function is called by ice_rebuild() to restore PTP
> functionality after a device reset. Follow the convention set by the
> ice_main.c file and rename this function to ice_ptp_rebuild(), in the
> same way that we have ice_prepare_for_reset() and
> ice_ptp_prepare_for_reset().

nit: This feels more like two changes than one,
     which I might have put into two patches.

> Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
> Signed-off-by: Karol Kolacinski <karol.kolacinski@intel.com>
> Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>

...

> diff --git a/drivers/net/ethernet/intel/ice/ice_ptp.c b/drivers/net/ethernet/intel/ice/ice_ptp.c
> index fe2d8389627b..8a589f853e96 100644
> --- a/drivers/net/ethernet/intel/ice/ice_ptp.c
> +++ b/drivers/net/ethernet/intel/ice/ice_ptp.c
> @@ -2665,11 +2665,13 @@ void ice_ptp_prepare_for_reset(struct ice_pf *pf, enum ice_reset_req reset_type)
>  }
>  
>  /**
> - * ice_ptp_reset - Initialize PTP hardware clock support after reset
> + * ice_ptp_rebuild_owner - Initialize PTP clock owner after reset
>   * @pf: Board private structure
> - * @reset_type: the reset type being performed
> + *
> + * Companion function for ice_ptp_rebuild() which handles tasks that only the
> + * PTP clock owner instance should perform.
>   */
> -void ice_ptp_reset(struct ice_pf *pf, enum ice_reset_req reset_type)
> +static int ice_ptp_rebuild_owner(struct ice_pf *pf)
>  {
>  	struct ice_ptp *ptp = &pf->ptp;
>  	struct ice_hw *hw = &pf->hw;
> @@ -2677,34 +2679,21 @@ void ice_ptp_reset(struct ice_pf *pf, enum ice_reset_req reset_type)
>  	u64 time_diff;
>  	int err;
>  
> -	if (ptp->state != ICE_PTP_RESETTING) {
> -		if (ptp->state == ICE_PTP_READY) {
> -			ice_ptp_prepare_for_reset(pf, reset_type);
> -		} else {
> -			err = -EINVAL;
> -			dev_err(ice_pf_to_dev(pf), "PTP was not initialized\n");
> -			goto err;
> -		}
> -	}
> -
> -	if (reset_type == ICE_RESET_PFR || !ice_pf_src_tmr_owned(pf))
> -		goto pfr;
> -
>  	err = ice_ptp_init_phc(hw);
>  	if (err)
> -		goto err;
> +		return err;
>  
>  	/* Acquire the global hardware lock */
>  	if (!ice_ptp_lock(hw)) {
>  		err = -EBUSY;
> -		goto err;
> +		return err;
>  	}
>  
>  	/* Write the increment time value to PHY and LAN */
>  	err = ice_ptp_write_incval(hw, ice_base_incval(pf));
>  	if (err) {
>  		ice_ptp_unlock(hw);
> -		goto err;
> +		return err;
>  	}
>  
>  	/* Write the initial Time value to PHY and LAN using the cached PHC
> @@ -2720,7 +2709,7 @@ void ice_ptp_reset(struct ice_pf *pf, enum ice_reset_req reset_type)
>  	err = ice_ptp_write_init(pf, &ts);
>  	if (err) {
>  		ice_ptp_unlock(hw);
> -		goto err;
> +		return err;
>  	}
>  
>  	/* Release the global hardware lock */
> @@ -2729,11 +2718,41 @@ void ice_ptp_reset(struct ice_pf *pf, enum ice_reset_req reset_type)
>  	if (!ice_is_e810(hw)) {
>  		/* Enable quad interrupts */
>  		err = ice_ptp_cfg_phy_interrupt(pf, true, 1);
> +		if (err)
> +			return err;
> +
> +		ice_ptp_restart_all_phy(pf);

The conditions for calling ice_ptp_restart_all_phy() seem to have
changed (though perhaps in practice they are the same).
And the ordering of this operation relative to the following code has
changed:

	/* Init Tx structures */
	if (ice_is_e810(&pf->hw)) {
		err = ice_ptp_init_tx_e810(pf, &ptp->port.tx);
	} else {
		kthread_init_delayed_work(&ptp->port.ov_work,
					  ice_ptp_wait_for_offsets);
		err = ice_ptp_init_tx_e82x(pf, &ptp->port.tx,
					   ptp->port.port_num);
	}

	ptp->state = ICE_PTP_READY;

Is this intentional?

I do see that the above code is removed in the following patch,
and replaced by a call to ice_ptp_flush_all_tx_tracker()
in ice_ptp_rebuild_owner(). But perhaps this patch
should move this code block code to that location?

> +	}
> +
> +	return 0;
> +}
> +
> +/**
> + * ice_ptp_rebuild - Initialize PTP hardware clock support after reset
> + * @pf: Board private structure
> + * @reset_type: the reset type being performed
> + */
> +void ice_ptp_rebuild(struct ice_pf *pf, enum ice_reset_req reset_type)
> +{
> +	struct ice_ptp *ptp = &pf->ptp;
> +	int err;
> +
> +	if (ptp->state != ICE_PTP_RESETTING) {
> +		if (ptp->state == ICE_PTP_READY) {
> +			ice_ptp_prepare_for_reset(pf, reset_type);
> +		} else {
> +			err = -EINVAL;
> +			dev_err(ice_pf_to_dev(pf), "PTP was not initialized\n");
> +			goto err;
> +		}
> +	}
> +
> +	if (ice_pf_src_tmr_owned(pf) && reset_type != ICE_RESET_PFR) {
> +		err = ice_ptp_rebuild_owner(pf);
>  		if (err)
>  			goto err;
>  	}
>  
> -pfr:
>  	/* Init Tx structures */
>  	if (ice_is_e810(&pf->hw)) {
>  		err = ice_ptp_init_tx_e810(pf, &ptp->port.tx);
> @@ -2748,11 +2767,6 @@ void ice_ptp_reset(struct ice_pf *pf, enum ice_reset_req reset_type)
>  
>  	ptp->state = ICE_PTP_READY;
>  
> -	/* Restart the PHY timestamping block */
> -	if (!test_bit(ICE_PFR_REQ, pf->state) &&
> -	    ice_pf_src_tmr_owned(pf))
> -		ice_ptp_restart_all_phy(pf);
> -
>  	/* Start periodic work going */
>  	kthread_queue_delayed_work(ptp->kworker, &ptp->work, 0);
>  

...

  parent reply	other threads:[~2024-01-15 10:39 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-01-08 12:47 [Intel-wired-lan] [PATCH v5 iwl-next 0/6] ice: fix timestamping in reset process Karol Kolacinski
2024-01-08 12:47 ` Karol Kolacinski
2024-01-08 12:47 ` [Intel-wired-lan] [PATCH v5 iwl-next 1/6] ice: introduce PTP state machine Karol Kolacinski
2024-01-08 12:47   ` Karol Kolacinski
2024-01-12 17:32   ` [Intel-wired-lan] " Pucha, HimasekharX Reddy
2024-01-12 17:32     ` Pucha, HimasekharX Reddy
2024-01-15 10:32   ` Simon Horman
2024-01-15 10:32     ` Simon Horman
2024-01-17 22:07     ` [Intel-wired-lan] " Keller, Jacob E
2024-01-17 22:07       ` Keller, Jacob E
2024-01-19 16:55       ` [Intel-wired-lan] " Simon Horman
2024-01-19 16:55         ` Simon Horman
2024-01-08 12:47 ` [Intel-wired-lan] [PATCH v5 iwl-next 2/6] ice: pass reset type to PTP reset functions Karol Kolacinski
2024-01-08 12:47   ` Karol Kolacinski
2024-01-12 17:33   ` [Intel-wired-lan] " Pucha, HimasekharX Reddy
2024-01-12 17:33     ` Pucha, HimasekharX Reddy
2024-01-08 12:47 ` [Intel-wired-lan] [PATCH v5 iwl-next 3/6] ice: rename verify_cached to has_ready_bitmap Karol Kolacinski
2024-01-08 12:47   ` Karol Kolacinski
2024-01-12 17:33   ` [Intel-wired-lan] " Pucha, HimasekharX Reddy
2024-01-12 17:33     ` Pucha, HimasekharX Reddy
2024-01-15 10:36   ` Simon Horman
2024-01-15 10:36     ` Simon Horman
2024-01-17 22:10     ` [Intel-wired-lan] " Keller, Jacob E
2024-01-17 22:10       ` Keller, Jacob E
2024-01-08 12:47 ` [Intel-wired-lan] [PATCH v5 iwl-next 4/6] ice: rename ice_ptp_tx_cfg_intr Karol Kolacinski
2024-01-08 12:47   ` Karol Kolacinski
2024-01-12 17:33   ` [Intel-wired-lan] " Pucha, HimasekharX Reddy
2024-01-12 17:33     ` Pucha, HimasekharX Reddy
2024-01-08 12:47 ` [Intel-wired-lan] [PATCH v5 iwl-next 5/6] ice: factor out ice_ptp_rebuild_owner() Karol Kolacinski
2024-01-08 12:47   ` Karol Kolacinski
2024-01-12 17:33   ` [Intel-wired-lan] " Pucha, HimasekharX Reddy
2024-01-12 17:33     ` Pucha, HimasekharX Reddy
2024-01-15 10:39   ` Simon Horman [this message]
2024-01-15 10:39     ` Simon Horman
2024-01-18 17:36     ` [Intel-wired-lan] " Kolacinski, Karol
2024-01-18 17:36       ` Kolacinski, Karol
2024-01-08 12:47 ` [Intel-wired-lan] [PATCH v5 iwl-next 6/6] ice: stop destroying and reinitalizing Tx tracker during reset Karol Kolacinski
2024-01-08 12:47   ` Karol Kolacinski
2024-01-12 17:32   ` [Intel-wired-lan] " Pucha, HimasekharX Reddy
2024-01-12 17:32     ` Pucha, HimasekharX Reddy

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=20240115103940.GN392144@kernel.org \
    --to=horms@kernel.org \
    --cc=anthony.l.nguyen@intel.com \
    --cc=intel-wired-lan@lists.osuosl.org \
    --cc=jacob.e.keller@intel.com \
    --cc=jesse.brandeburg@intel.com \
    --cc=karol.kolacinski@intel.com \
    --cc=netdev@vger.kernel.org \
    /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.