struct ice_pf *pf;
        struct ice_hw *hw;
        u64 tstamp_ready;
+       bool link_up;
        int err;
        u8 idx;
 
        if (err)
                return false;
 
+       /* Drop packets if the link went down */
+       link_up = ptp_port->link_up;
+
        for_each_set_bit(idx, tx->in_use, tx->len) {
                struct skb_shared_hwtstamps shhwtstamps = {};
                u8 phy_idx = idx + tx->offset;
                u64 raw_tstamp = 0, tstamp;
-               bool drop_ts = false;
+               bool drop_ts = !link_up;
                struct sk_buff *skb;
 
                /* Drop packets which have waited for more than 2 seconds */
                ice_trace(tx_tstamp_fw_req, tx->tstamps[idx].skb, idx);
 
                err = ice_read_phy_tstamp(hw, tx->block, phy_idx, &raw_tstamp);
-               if (err)
+               if (err && !drop_ts)
                        continue;
 
                ice_trace(tx_tstamp_fw_done, tx->tstamps[idx].skb, idx);