}
 }
 
-void ath11k_hal_reo_hw_setup(struct ath11k_base *ab, u32 ring_hash_map)
-{
-       u32 reo_base = HAL_SEQ_WCSS_UMAC_REO_REG;
-       u32 val;
-
-       val = ath11k_hif_read32(ab, reo_base + HAL_REO1_GEN_ENABLE);
-
-       val &= ~HAL_REO1_GEN_ENABLE_FRAG_DST_RING;
-       val |= FIELD_PREP(HAL_REO1_GEN_ENABLE_FRAG_DST_RING,
-                         HAL_SRNG_RING_ID_REO2SW1) |
-              FIELD_PREP(HAL_REO1_GEN_ENABLE_AGING_LIST_ENABLE, 1) |
-              FIELD_PREP(HAL_REO1_GEN_ENABLE_AGING_FLUSH_ENABLE, 1);
-       ath11k_hif_write32(ab, reo_base + HAL_REO1_GEN_ENABLE, val);
-
-       ath11k_hif_write32(ab, reo_base + HAL_REO1_AGING_THRESH_IX_0(ab),
-                          HAL_DEFAULT_REO_TIMEOUT_USEC);
-       ath11k_hif_write32(ab, reo_base + HAL_REO1_AGING_THRESH_IX_1(ab),
-                          HAL_DEFAULT_REO_TIMEOUT_USEC);
-       ath11k_hif_write32(ab, reo_base + HAL_REO1_AGING_THRESH_IX_2(ab),
-                          HAL_DEFAULT_REO_TIMEOUT_USEC);
-       ath11k_hif_write32(ab, reo_base + HAL_REO1_AGING_THRESH_IX_3(ab),
-                          HAL_DEFAULT_REO_TIMEOUT_USEC);
-
-       ath11k_hif_write32(ab, reo_base + HAL_REO1_DEST_RING_CTRL_IX_0,
-                          FIELD_PREP(HAL_REO_DEST_RING_CTRL_HASH_RING_MAP,
-                                     ring_hash_map));
-       ath11k_hif_write32(ab, reo_base + HAL_REO1_DEST_RING_CTRL_IX_1,
-                          FIELD_PREP(HAL_REO_DEST_RING_CTRL_HASH_RING_MAP,
-                                     ring_hash_map));
-       ath11k_hif_write32(ab, reo_base + HAL_REO1_DEST_RING_CTRL_IX_2,
-                          FIELD_PREP(HAL_REO_DEST_RING_CTRL_HASH_RING_MAP,
-                                     ring_hash_map));
-       ath11k_hif_write32(ab, reo_base + HAL_REO1_DEST_RING_CTRL_IX_3,
-                          FIELD_PREP(HAL_REO_DEST_RING_CTRL_HASH_RING_MAP,
-                                     ring_hash_map));
-}
-
 static enum hal_rx_mon_status
 ath11k_hal_rx_parse_mon_status_tlv(struct ath11k_base *ab,
                                   struct hal_rx_mon_ppdu_info *ppdu_info,
 
 #include "hw.h"
 #include "core.h"
 #include "ce.h"
+#include "hif.h"
 
 /* Map from pdev index to hw mac index */
 static u8 ath11k_hw_ipq8074_mac_from_pdev_id(int pdev_idx)
        config->num_keep_alive_pattern = 0;
 }
 
+static void ath11k_hw_ipq8074_reo_setup(struct ath11k_base *ab)
+{
+       u32 reo_base = HAL_SEQ_WCSS_UMAC_REO_REG;
+       u32 val;
+       /* Each hash entry uses three bits to map to a particular ring. */
+       u32 ring_hash_map = HAL_HASH_ROUTING_RING_SW1 << 0 |
+               HAL_HASH_ROUTING_RING_SW2 << 3 |
+               HAL_HASH_ROUTING_RING_SW3 << 6 |
+               HAL_HASH_ROUTING_RING_SW4 << 9 |
+               HAL_HASH_ROUTING_RING_SW1 << 12 |
+               HAL_HASH_ROUTING_RING_SW2 << 15 |
+               HAL_HASH_ROUTING_RING_SW3 << 18 |
+               HAL_HASH_ROUTING_RING_SW4 << 21;
+
+       val = ath11k_hif_read32(ab, reo_base + HAL_REO1_GEN_ENABLE);
+
+       val &= ~HAL_REO1_GEN_ENABLE_FRAG_DST_RING;
+       val |= FIELD_PREP(HAL_REO1_GEN_ENABLE_FRAG_DST_RING,
+                       HAL_SRNG_RING_ID_REO2SW1) |
+               FIELD_PREP(HAL_REO1_GEN_ENABLE_AGING_LIST_ENABLE, 1) |
+               FIELD_PREP(HAL_REO1_GEN_ENABLE_AGING_FLUSH_ENABLE, 1);
+       ath11k_hif_write32(ab, reo_base + HAL_REO1_GEN_ENABLE, val);
+
+       ath11k_hif_write32(ab, reo_base + HAL_REO1_AGING_THRESH_IX_0(ab),
+                          HAL_DEFAULT_REO_TIMEOUT_USEC);
+       ath11k_hif_write32(ab, reo_base + HAL_REO1_AGING_THRESH_IX_1(ab),
+                          HAL_DEFAULT_REO_TIMEOUT_USEC);
+       ath11k_hif_write32(ab, reo_base + HAL_REO1_AGING_THRESH_IX_2(ab),
+                          HAL_DEFAULT_REO_TIMEOUT_USEC);
+       ath11k_hif_write32(ab, reo_base + HAL_REO1_AGING_THRESH_IX_3(ab),
+                          HAL_DEFAULT_REO_TIMEOUT_USEC);
+
+       ath11k_hif_write32(ab, reo_base + HAL_REO1_DEST_RING_CTRL_IX_0,
+                          FIELD_PREP(HAL_REO_DEST_RING_CTRL_HASH_RING_MAP,
+                                     ring_hash_map));
+       ath11k_hif_write32(ab, reo_base + HAL_REO1_DEST_RING_CTRL_IX_1,
+                          FIELD_PREP(HAL_REO_DEST_RING_CTRL_HASH_RING_MAP,
+                                     ring_hash_map));
+       ath11k_hif_write32(ab, reo_base + HAL_REO1_DEST_RING_CTRL_IX_2,
+                          FIELD_PREP(HAL_REO_DEST_RING_CTRL_HASH_RING_MAP,
+                                     ring_hash_map));
+       ath11k_hif_write32(ab, reo_base + HAL_REO1_DEST_RING_CTRL_IX_3,
+                          FIELD_PREP(HAL_REO_DEST_RING_CTRL_HASH_RING_MAP,
+                                     ring_hash_map));
+}
+
 static void ath11k_init_wmi_config_ipq8074(struct ath11k_base *ab,
                                           struct target_resource_config *config)
 {
        return &desc->u.wcn6855.msdu_payload[0];
 }
 
+static void ath11k_hw_wcn6855_reo_setup(struct ath11k_base *ab)
+{
+       u32 reo_base = HAL_SEQ_WCSS_UMAC_REO_REG;
+       u32 val;
+       /* Each hash entry uses four bits to map to a particular ring. */
+       u32 ring_hash_map = HAL_HASH_ROUTING_RING_SW1 << 0 |
+               HAL_HASH_ROUTING_RING_SW2 << 4 |
+               HAL_HASH_ROUTING_RING_SW3 << 8 |
+               HAL_HASH_ROUTING_RING_SW4 << 12 |
+               HAL_HASH_ROUTING_RING_SW1 << 16 |
+               HAL_HASH_ROUTING_RING_SW2 << 20 |
+               HAL_HASH_ROUTING_RING_SW3 << 24 |
+               HAL_HASH_ROUTING_RING_SW4 << 28;
+
+       val = ath11k_hif_read32(ab, reo_base + HAL_REO1_GEN_ENABLE);
+       val |= FIELD_PREP(HAL_REO1_GEN_ENABLE_AGING_LIST_ENABLE, 1) |
+               FIELD_PREP(HAL_REO1_GEN_ENABLE_AGING_FLUSH_ENABLE, 1);
+       ath11k_hif_write32(ab, reo_base + HAL_REO1_GEN_ENABLE, val);
+
+       val = ath11k_hif_read32(ab, reo_base + HAL_REO1_MISC_CTL);
+       val &= ~HAL_REO1_MISC_CTL_FRAGMENT_DST_RING;
+       val |= FIELD_PREP(HAL_REO1_MISC_CTL_FRAGMENT_DST_RING, HAL_SRNG_RING_ID_REO2SW1);
+       ath11k_hif_write32(ab, reo_base + HAL_REO1_MISC_CTL, val);
+
+       ath11k_hif_write32(ab, reo_base + HAL_REO1_AGING_THRESH_IX_0(ab),
+                          HAL_DEFAULT_REO_TIMEOUT_USEC);
+       ath11k_hif_write32(ab, reo_base + HAL_REO1_AGING_THRESH_IX_1(ab),
+                          HAL_DEFAULT_REO_TIMEOUT_USEC);
+       ath11k_hif_write32(ab, reo_base + HAL_REO1_AGING_THRESH_IX_2(ab),
+                          HAL_DEFAULT_REO_TIMEOUT_USEC);
+       ath11k_hif_write32(ab, reo_base + HAL_REO1_AGING_THRESH_IX_3(ab),
+                          HAL_DEFAULT_REO_TIMEOUT_USEC);
+
+       ath11k_hif_write32(ab, reo_base + HAL_REO1_DEST_RING_CTRL_IX_2,
+                          ring_hash_map);
+       ath11k_hif_write32(ab, reo_base + HAL_REO1_DEST_RING_CTRL_IX_3,
+                          ring_hash_map);
+}
+
 const struct ath11k_hw_ops ipq8074_ops = {
        .get_hw_mac_from_pdev_id = ath11k_hw_ipq8074_mac_from_pdev_id,
        .wmi_init_config = ath11k_init_wmi_config_ipq8074,
        .rx_desc_set_msdu_len = ath11k_hw_ipq8074_rx_desc_set_msdu_len,
        .rx_desc_get_attention = ath11k_hw_ipq8074_rx_desc_get_attention,
        .rx_desc_get_msdu_payload = ath11k_hw_ipq8074_rx_desc_get_msdu_payload,
+       .reo_setup = ath11k_hw_ipq8074_reo_setup,
 };
 
 const struct ath11k_hw_ops ipq6018_ops = {
        .rx_desc_set_msdu_len = ath11k_hw_ipq8074_rx_desc_set_msdu_len,
        .rx_desc_get_attention = ath11k_hw_ipq8074_rx_desc_get_attention,
        .rx_desc_get_msdu_payload = ath11k_hw_ipq8074_rx_desc_get_msdu_payload,
+       .reo_setup = ath11k_hw_ipq8074_reo_setup,
 };
 
 const struct ath11k_hw_ops qca6390_ops = {
        .rx_desc_set_msdu_len = ath11k_hw_ipq8074_rx_desc_set_msdu_len,
        .rx_desc_get_attention = ath11k_hw_ipq8074_rx_desc_get_attention,
        .rx_desc_get_msdu_payload = ath11k_hw_ipq8074_rx_desc_get_msdu_payload,
+       .reo_setup = ath11k_hw_ipq8074_reo_setup,
 };
 
 const struct ath11k_hw_ops qcn9074_ops = {
        .rx_desc_set_msdu_len = ath11k_hw_qcn9074_rx_desc_set_msdu_len,
        .rx_desc_get_attention = ath11k_hw_qcn9074_rx_desc_get_attention,
        .rx_desc_get_msdu_payload = ath11k_hw_qcn9074_rx_desc_get_msdu_payload,
+       .reo_setup = ath11k_hw_ipq8074_reo_setup,
 };
 
 const struct ath11k_hw_ops wcn6855_ops = {
        .rx_desc_set_msdu_len = ath11k_hw_wcn6855_rx_desc_set_msdu_len,
        .rx_desc_get_attention = ath11k_hw_wcn6855_rx_desc_get_attention,
        .rx_desc_get_msdu_payload = ath11k_hw_wcn6855_rx_desc_get_msdu_payload,
+       .reo_setup = ath11k_hw_wcn6855_reo_setup,
 };
 
 #define ATH11K_TX_RING_MASK_0 0x1