Message ID | 20231011110411.204700-1-karol.kolacinski@intel.com |
---|---|
State | Accepted |
Delegated to: | Anthony Nguyen |
Headers | show |
Series | [iwl-next] ice: Re-enable timestamping correctly after reset | expand |
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.brandeburg@intel.com> > Signed-off-by: Karol Kolacinski <karol.kolacinski@intel.com> > --- Reviewed-by: Jacob Keller <jacob.e.keller@intel.com> Thanks!
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.brandeburg@intel.com> > Signed-off-by: Karol Kolacinski <karol.kolacinski@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
> -----Original Message----- > From: Intel-wired-lan <intel-wired-lan-bounces@osuosl.org> On Behalf Of Karol Kolacinski > Sent: Wednesday, October 11, 2023 4:34 PM > To: intel-wired-lan@lists.osuosl.org > Cc: Kolacinski, Karol <karol.kolacinski@intel.com>; Nguyen, Anthony L <anthony.l.nguyen@intel.com>; Brandeburg, Jesse <jesse.brandeburg@intel.com> > Subject: [Intel-wired-lan] [PATCH iwl-next] ice: Re-enable timestamping correctly after reset > > 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.brandeburg@intel.com> > Signed-off-by: Karol Kolacinski <karol.kolacinski@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(-) > Tested-by: Pucha Himasekhar Reddy <himasekharx.reddy.pucha@intel.com> (A Contingent worker at Intel)
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);