static int ath11k_peer_rx_tid_reo_update(struct ath11k *ar,
                                         struct ath11k_peer *peer,
                                         struct dp_rx_tid *rx_tid,
-                                        u32 ba_win_sz, u16 ssn)
+                                        u32 ba_win_sz, u16 ssn,
+                                        bool update_ssn)
 {
        struct ath11k_hal_reo_cmd cmd = {0};
        int ret;
        cmd.addr_lo = lower_32_bits(rx_tid->paddr);
        cmd.addr_hi = upper_32_bits(rx_tid->paddr);
        cmd.flag = HAL_REO_CMD_FLG_NEED_STATUS;
-       cmd.upd0 = HAL_REO_CMD_UPD0_BA_WINDOW_SIZE |
-                  HAL_REO_CMD_UPD0_SSN;
+       cmd.upd0 = HAL_REO_CMD_UPD0_BA_WINDOW_SIZE;
        cmd.ba_window_size = ba_win_sz;
-       cmd.upd2 = FIELD_PREP(HAL_REO_CMD_UPD2_SSN, ssn);
+
+       if (update_ssn) {
+               cmd.upd0 |= HAL_REO_CMD_UPD0_SSN;
+               cmd.upd2 = FIELD_PREP(HAL_REO_CMD_UPD2_SSN, ssn);
+       }
 
        ret = ath11k_dp_tx_send_reo_cmd(ar->ab, rx_tid,
                                        HAL_REO_CMD_UPDATE_RX_QUEUE, &cmd,
        if (rx_tid->active) {
                paddr = rx_tid->paddr;
                ret = ath11k_peer_rx_tid_reo_update(ar, peer, rx_tid,
-                                                   ba_win_sz, ssn);
+                                                   ba_win_sz, ssn, true);
                spin_unlock_bh(&ab->base_lock);
                if (ret) {
                        ath11k_warn(ab, "failed to update reo for rx tid %d\n", tid);
        paddr = peer->rx_tid[params->tid].paddr;
        active = peer->rx_tid[params->tid].active;
 
-       ath11k_peer_rx_tid_delete(ar, peer, params->tid);
+       if (!active) {
+               spin_unlock_bh(&ab->base_lock);
+               return 0;
+       }
 
+       ret = ath11k_peer_rx_tid_reo_update(ar, peer, peer->rx_tid, 1, 0, false);
        spin_unlock_bh(&ab->base_lock);
-
-       if (!active)
-               return 0;
+       if (ret) {
+               ath11k_warn(ab, "failed to update reo for rx tid %d: %d\n",
+                           params->tid, ret);
+               return ret;
+       }
 
        ret = ath11k_wmi_peer_rx_reorder_queue_setup(ar, vdev_id,
                                                     params->sta->addr, paddr,