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);
-
 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);
+
        /* Start periodic work going */
        kthread_queue_delayed_work(ptp->kworker, &ptp->work, 0);
 

base-commit: 2318d58f358e7aef726c038aff87a68bec8f09e0
-- 
2.39.2

_______________________________________________
Intel-wired-lan mailing list
Intel-wired-lan@osuosl.org
https://lists.osuosl.org/mailman/listinfo/intel-wired-lan

Reply via email to