Move ice_ptp_maybe_trigger_tx_interrupt() and ice_ptp_periodic_work().

This will allow to assign ice_ptp_periodic_work() to PTP API's
do_aux_work function pointer.

Reviewed-by: Przemek Kitszel <[email protected]>
Signed-off-by: Karol Kolacinski <[email protected]>
---
 drivers/net/ethernet/intel/ice/ice_ptp.c | 132 +++++++++++------------
 1 file changed, 66 insertions(+), 66 deletions(-)

diff --git a/drivers/net/ethernet/intel/ice/ice_ptp.c 
b/drivers/net/ethernet/intel/ice/ice_ptp.c
index 3278b96d8f01..0a1f6e0e4a22 100644
--- a/drivers/net/ethernet/intel/ice/ice_ptp.c
+++ b/drivers/net/ethernet/intel/ice/ice_ptp.c
@@ -2530,6 +2530,72 @@ static void ice_ptp_set_funcs_e830(struct ice_pf *pf)
        ice_ptp_setup_pin_cfg(pf);
 }
 
+/**
+ * ice_ptp_maybe_trigger_tx_interrupt - Trigger Tx timstamp interrupt
+ * @pf: Board private structure
+ *
+ * The device PHY issues Tx timestamp interrupts to the driver for processing
+ * timestamp data from the PHY. It will not interrupt again until all
+ * current timestamp data is read. In rare circumstances, it is possible that
+ * the driver fails to read all outstanding data.
+ *
+ * To avoid getting permanently stuck, periodically check if the PHY has
+ * outstanding timestamp data. If so, trigger an interrupt from software to
+ * process this data.
+ */
+static void ice_ptp_maybe_trigger_tx_interrupt(struct ice_pf *pf)
+{
+       struct device *dev = ice_pf_to_dev(pf);
+       struct ice_hw *hw = &pf->hw;
+       bool trigger_oicr = false;
+       unsigned int i;
+
+       if (!pf->ptp.port.tx.has_ready_bitmap)
+               return;
+
+       if (!ice_pf_src_tmr_owned(pf))
+               return;
+
+       for (i = 0; i < ICE_GET_QUAD_NUM(hw->ptp.num_lports); i++) {
+               u64 tstamp_ready;
+               int err;
+
+               err = ice_get_phy_tx_tstamp_ready(&pf->hw, i, &tstamp_ready);
+               if (!err && tstamp_ready) {
+                       trigger_oicr = true;
+                       break;
+               }
+       }
+
+       if (trigger_oicr) {
+               /* Trigger a software interrupt, to ensure this data
+                * gets processed.
+                */
+               dev_dbg(dev, "PTP periodic task detected waiting timestamps. 
Triggering Tx timestamp interrupt now.\n");
+
+               wr32(hw, PFINT_OICR, PFINT_OICR_TSYN_TX_M);
+               ice_flush(hw);
+       }
+}
+
+static void ice_ptp_periodic_work(struct kthread_work *work)
+{
+       struct ice_ptp *ptp = container_of(work, struct ice_ptp, work.work);
+       struct ice_pf *pf = container_of(ptp, struct ice_pf, ptp);
+       int err;
+
+       if (pf->ptp.state != ICE_PTP_READY)
+               return;
+
+       err = ice_ptp_update_cached_phctime(pf);
+
+       ice_ptp_maybe_trigger_tx_interrupt(pf);
+
+       /* Run twice a second or reschedule if phc update failed */
+       kthread_queue_delayed_work(ptp->kworker, &ptp->work,
+                                  msecs_to_jiffies(err ? 10 : 500));
+}
+
 /**
  * ice_ptp_set_caps - Set PTP capabilities
  * @pf: Board private structure
@@ -2739,72 +2805,6 @@ irqreturn_t ice_ptp_ts_irq(struct ice_pf *pf)
        }
 }
 
-/**
- * ice_ptp_maybe_trigger_tx_interrupt - Trigger Tx timstamp interrupt
- * @pf: Board private structure
- *
- * The device PHY issues Tx timestamp interrupts to the driver for processing
- * timestamp data from the PHY. It will not interrupt again until all
- * current timestamp data is read. In rare circumstances, it is possible that
- * the driver fails to read all outstanding data.
- *
- * To avoid getting permanently stuck, periodically check if the PHY has
- * outstanding timestamp data. If so, trigger an interrupt from software to
- * process this data.
- */
-static void ice_ptp_maybe_trigger_tx_interrupt(struct ice_pf *pf)
-{
-       struct device *dev = ice_pf_to_dev(pf);
-       struct ice_hw *hw = &pf->hw;
-       bool trigger_oicr = false;
-       unsigned int i;
-
-       if (!pf->ptp.port.tx.has_ready_bitmap)
-               return;
-
-       if (!ice_pf_src_tmr_owned(pf))
-               return;
-
-       for (i = 0; i < ICE_GET_QUAD_NUM(hw->ptp.num_lports); i++) {
-               u64 tstamp_ready;
-               int err;
-
-               err = ice_get_phy_tx_tstamp_ready(&pf->hw, i, &tstamp_ready);
-               if (!err && tstamp_ready) {
-                       trigger_oicr = true;
-                       break;
-               }
-       }
-
-       if (trigger_oicr) {
-               /* Trigger a software interrupt, to ensure this data
-                * gets processed.
-                */
-               dev_dbg(dev, "PTP periodic task detected waiting timestamps. 
Triggering Tx timestamp interrupt now.\n");
-
-               wr32(hw, PFINT_OICR, PFINT_OICR_TSYN_TX_M);
-               ice_flush(hw);
-       }
-}
-
-static void ice_ptp_periodic_work(struct kthread_work *work)
-{
-       struct ice_ptp *ptp = container_of(work, struct ice_ptp, work.work);
-       struct ice_pf *pf = container_of(ptp, struct ice_pf, ptp);
-       int err;
-
-       if (pf->ptp.state != ICE_PTP_READY)
-               return;
-
-       err = ice_ptp_update_cached_phctime(pf);
-
-       ice_ptp_maybe_trigger_tx_interrupt(pf);
-
-       /* Run twice a second or reschedule if phc update failed */
-       kthread_queue_delayed_work(ptp->kworker, &ptp->work,
-                                  msecs_to_jiffies(err ? 10 : 500));
-}
-
 /**
  * ice_ptp_prepare_rebuild_sec - Prepare second NAC for PTP reset or rebuild
  * @pf: Board private structure

base-commit: b74ad830a99f47b47e3f8d98d7d78614edab6217
-- 
2.49.0

Reply via email to