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