static enum hal_rx_mon_status
 ath12k_dp_mon_rx_parse_status_tlv(struct ath12k *ar,
                                  struct ath12k_mon_data *pmon,
-                                 u32 tlv_tag, const void *tlv_data,
-                                 u32 userid)
+                                 const struct hal_tlv_64_hdr *tlv)
 {
        struct ath12k_base *ab = ar->ab;
        struct hal_rx_mon_ppdu_info *ppdu_info = &pmon->mon_ppdu_info;
-       u32 info[7];
+       const void *tlv_data = tlv->value;
+       u32 info[7], userid;
+       u16 tlv_tag;
+
+       tlv_tag = le64_get_bits(tlv->tl, HAL_TLV_64_HDR_TAG);
+       userid = le64_get_bits(tlv->tl, HAL_TLV_64_USR_ID);
 
        switch (tlv_tag) {
        case HAL_RX_PPDU_START: {
        struct hal_rx_mon_ppdu_info *ppdu_info = &pmon->mon_ppdu_info;
        struct hal_tlv_64_hdr *tlv;
        enum hal_rx_mon_status hal_status;
-       u32 tlv_userid;
        u16 tlv_tag, tlv_len;
        u8 *ptr = skb->data;
 
        do {
                tlv = (struct hal_tlv_64_hdr *)ptr;
                tlv_tag = le64_get_bits(tlv->tl, HAL_TLV_64_HDR_TAG);
-               tlv_len = le64_get_bits(tlv->tl, HAL_TLV_64_HDR_LEN);
-               tlv_userid = le64_get_bits(tlv->tl, HAL_TLV_64_USR_ID);
-               ptr += sizeof(*tlv);
 
                /* The actual length of PPDU_END is the combined length of many PHY
                 * TLVs that follow. Skip the TLV header and
 
                if (tlv_tag == HAL_RX_PPDU_END)
                        tlv_len = sizeof(struct hal_rx_rxpcu_classification_overview);
+               else
+                       tlv_len = le64_get_bits(tlv->tl, HAL_TLV_64_HDR_LEN);
 
-               hal_status = ath12k_dp_mon_rx_parse_status_tlv(ar, pmon,
-                                                              tlv_tag, ptr, tlv_userid);
-               ptr += tlv_len;
+               hal_status = ath12k_dp_mon_rx_parse_status_tlv(ar, pmon, tlv);
+               ptr += sizeof(*tlv) + tlv_len;
                ptr = PTR_ALIGN(ptr, HAL_TLV_64_ALIGN);
 
                if ((ptr - skb->data) >= DP_RX_BUFFER_SIZE)