ice: don't check has_ready_bitmap in E810 functions
authorJacob Keller <jacob.e.keller@intel.com>
Thu, 25 Jan 2024 21:57:52 +0000 (13:57 -0800)
committerPaolo Abeni <pabeni@redhat.com>
Tue, 30 Jan 2024 10:49:04 +0000 (11:49 +0100)
E810 hardware does not have a Tx timestamp ready bitmap. Don't check
has_ready_bitmap in E810-specific functions.
Add has_ready_bitmap check in ice_ptp_process_tx_tstamp() to stop
relying on the fact that ice_get_phy_tx_tstamp_ready() returns all 1s.

Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Signed-off-by: Karol Kolacinski <karol.kolacinski@intel.com>
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Tested-by: Pucha Himasekhar Reddy <himasekharx.reddy.pucha@intel.com> (A Contingent worker at Intel)
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
drivers/net/ethernet/intel/ice/ice_ptp.c

index a10e0018b2e27f7831661eabfecd66907bccb064..69d11dbda22c1e56a820d8b4a3c6d025dcb62377 100644 (file)
@@ -601,17 +601,13 @@ void ice_ptp_complete_tx_single_tstamp(struct ice_ptp_tx *tx)
        /* Read the low 32 bit value */
        raw_tstamp |= (u64)rd32(&pf->hw, PF_SB_ATQBAH);
 
-       /* For PHYs which don't implement a proper timestamp ready bitmap,
-        * verify that the timestamp value is different from the last cached
-        * timestamp. If it is not, skip this for now assuming it hasn't yet
-        * been captured by hardware.
+       /* Devices using this interface always verify the timestamp differs
+        * relative to the last cached timestamp value.
         */
-       if (!drop_ts && !tx->has_ready_bitmap &&
-           raw_tstamp == tx->tstamps[idx].cached_tstamp)
+       if (raw_tstamp == tx->tstamps[idx].cached_tstamp)
                return;
 
-       if (!tx->has_ready_bitmap && raw_tstamp)
-               tx->tstamps[idx].cached_tstamp = raw_tstamp;
+       tx->tstamps[idx].cached_tstamp = raw_tstamp;
        clear_bit(idx, tx->in_use);
        skb = tx->tstamps[idx].skb;
        tx->tstamps[idx].skb = NULL;
@@ -701,9 +697,11 @@ static void ice_ptp_process_tx_tstamp(struct ice_ptp_tx *tx)
        hw = &pf->hw;
 
        /* Read the Tx ready status first */
-       err = ice_get_phy_tx_tstamp_ready(hw, tx->block, &tstamp_ready);
-       if (err)
-               return;
+       if (tx->has_ready_bitmap) {
+               err = ice_get_phy_tx_tstamp_ready(hw, tx->block, &tstamp_ready);
+               if (err)
+                       return;
+       }
 
        /* Drop packets if the link went down */
        link_up = ptp_port->link_up;
@@ -731,7 +729,8 @@ static void ice_ptp_process_tx_tstamp(struct ice_ptp_tx *tx)
                 * If we do not, the hardware logic for generating a new
                 * interrupt can get stuck on some devices.
                 */
-               if (!(tstamp_ready & BIT_ULL(phy_idx))) {
+               if (tx->has_ready_bitmap &&
+                   !(tstamp_ready & BIT_ULL(phy_idx))) {
                        if (drop_ts)
                                goto skip_ts_read;