On 10/11/2023 4:04 AM, Karol Kolacinski wrote:
> During reset, TX_TSYN interrupt should be processed as it may process
> timestamps in brief moments before and after reset.
> Timestamping should be enabled on VSIs at the end of reset procedure.
> On ice_get_phy_tx_tstamp_ready error, interrupt should not be rearmed,
> because error only happens on resets.
> 
> Reviewed-by: Jesse Brandeburg <jesse.brandeb...@intel.com>
> Signed-off-by: Karol Kolacinski <karol.kolacin...@intel.com>
> ---
>  drivers/net/ethernet/intel/ice/ice_main.c |  2 +-
>  drivers/net/ethernet/intel/ice/ice_ptp.c  | 22 +++++++++++++---------
>  2 files changed, 14 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/net/ethernet/intel/ice/ice_main.c 
> b/drivers/net/ethernet/intel/ice/ice_main.c
> index afe19219a640..a58da0024fe5 100644
> --- a/drivers/net/ethernet/intel/ice/ice_main.c
> +++ b/drivers/net/ethernet/intel/ice/ice_main.c
> @@ -3176,7 +3176,7 @@ static irqreturn_t ice_misc_intr(int __always_unused 
> irq, void *data)
>  
>       if (oicr & PFINT_OICR_TSYN_TX_M) {
>               ena_mask &= ~PFINT_OICR_TSYN_TX_M;
> -             if (!hw->reset_ongoing && ice_ptp_pf_handles_tx_interrupt(pf))
> +             if (ice_ptp_pf_handles_tx_interrupt(pf))
>                       set_bit(ICE_MISC_THREAD_TX_TSTAMP, pf->misc_thread);
>       }
>  
> diff --git a/drivers/net/ethernet/intel/ice/ice_ptp.c 
> b/drivers/net/ethernet/intel/ice/ice_ptp.c
> index 1eddcbe89b0c..7e548a634f3f 100644
> --- a/drivers/net/ethernet/intel/ice/ice_ptp.c
> +++ b/drivers/net/ethernet/intel/ice/ice_ptp.c
> @@ -684,7 +684,9 @@ static enum ice_tx_tstamp_work 
> ice_ptp_tx_tstamp_owner(struct ice_pf *pf)
>  
>               /* Read the Tx ready status first */
>               err = ice_get_phy_tx_tstamp_ready(&pf->hw, i, &tstamp_ready);
> -             if (err || tstamp_ready)
> +             if (err)
> +                     break;
> +             else if (tstamp_ready)
>                       return ICE_TX_TSTAMP_WORK_PENDING;
>       }
>  
> @@ -2444,12 +2446,10 @@ void ice_ptp_reset(struct ice_pf *pf)
>       int err, itr = 1;
>       u64 time_diff;
>  
> -     if (test_bit(ICE_PFR_REQ, pf->state))
> +     if (test_bit(ICE_PFR_REQ, pf->state) ||
> +         !ice_pf_src_tmr_owned(pf))
>               goto pfr;
>  
> -     if (!ice_pf_src_tmr_owned(pf))
> -             goto reset_ts;
> -
>       err = ice_ptp_init_phc(hw);
>       if (err)
>               goto err;
> @@ -2493,10 +2493,6 @@ void ice_ptp_reset(struct ice_pf *pf)
>                       goto err;
>       }
>  
> -reset_ts:
> -     /* Restart the PHY timestamping block */
> -     ice_ptp_reset_phy_timestamping(pf);
> -

Was this intending to get rid of the ice_ptp_reset_phy_timestamping()?

>  pfr:
>       /* Init Tx structures */
>       if (ice_is_e810(&pf->hw)) {
> @@ -2512,6 +2508,14 @@ void ice_ptp_reset(struct ice_pf *pf)
>  
>       set_bit(ICE_FLAG_PTP, pf->flags);
>  
> +     /* 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);
> +
> +     if (ptp->tx_interrupt_mode)
> +             ice_ptp_configure_tx_tstamp(pf, true);
> +

Ah, we instead restart all PHY which which is the same as
ice_ptp_reset_phy_timestamping. Ok.


>       /* Start periodic work going */
>       kthread_queue_delayed_work(ptp->kworker, &ptp->work, 0);
>  
> 
> base-commit: 2318d58f358e7aef726c038aff87a68bec8f09e0
_______________________________________________
Intel-wired-lan mailing list
Intel-wired-lan@osuosl.org
https://lists.osuosl.org/mailman/listinfo/intel-wired-lan

Reply via email to