napi_gro_receive(&bnapi->napi, skb);
 }
 
+static bool bnxt_rx_ts_valid(struct bnxt *bp, u32 flags,
+                            struct rx_cmp_ext *rxcmp1, u32 *cmpl_ts)
+{
+       u32 ts = le32_to_cpu(rxcmp1->rx_cmp_timestamp);
+
+       if (BNXT_PTP_RX_TS_VALID(flags))
+               goto ts_valid;
+       if (!bp->ptp_all_rx_tstamp || !ts || !BNXT_ALL_RX_TS_VALID(flags))
+               return false;
+
+ts_valid:
+       *cmpl_ts = ts;
+       return true;
+}
+
 /* returns the following:
  * 1       - 1 packet successfully received
  * 0       - successful TPA_START, packet not completed yet
        struct sk_buff *skb;
        struct xdp_buff xdp;
        u32 flags, misc;
+       u32 cmpl_ts;
        void *data;
        int rc = 0;
 
                }
        }
 
-       if (unlikely((flags & RX_CMP_FLAGS_ITYPES_MASK) ==
-                    RX_CMP_FLAGS_ITYPE_PTP_W_TS) || bp->ptp_all_rx_tstamp) {
+       if (bnxt_rx_ts_valid(bp, flags, rxcmp1, &cmpl_ts)) {
                if (bp->flags & BNXT_FLAG_CHIP_P5) {
-                       u32 cmpl_ts = le32_to_cpu(rxcmp1->rx_cmp_timestamp);
                        u64 ns, ts;
 
                        if (!bnxt_get_rx_ts_p5(bp, &ts, cmpl_ts)) {
 
        #define RX_CMP_FLAGS_ERROR                              (1 << 6)
        #define RX_CMP_FLAGS_PLACEMENT                          (7 << 7)
        #define RX_CMP_FLAGS_RSS_VALID                          (1 << 10)
-       #define RX_CMP_FLAGS_UNUSED                             (1 << 11)
+       #define RX_CMP_FLAGS_PKT_METADATA_PRESENT               (1 << 11)
         #define RX_CMP_FLAGS_ITYPES_SHIFT                       12
         #define RX_CMP_FLAGS_ITYPES_MASK                        0xf000
         #define RX_CMP_FLAGS_ITYPE_UNKNOWN                      (0 << 12)
        __le32 rx_cmp_rss_hash;
 };
 
+#define BNXT_PTP_RX_TS_VALID(flags)                            \
+       (((flags) & RX_CMP_FLAGS_ITYPES_MASK) == RX_CMP_FLAGS_ITYPE_PTP_W_TS)
+
+#define BNXT_ALL_RX_TS_VALID(flags)                            \
+       !((flags) & RX_CMP_FLAGS_PKT_METADATA_PRESENT)
+
 #define RX_CMP_HASH_VALID(rxcmp)                               \
        ((rxcmp)->rx_cmp_len_flags_type & cpu_to_le32(RX_CMP_FLAGS_RSS_VALID))