|
@@ -618,6 +618,33 @@ hal_txmon_status_parse_tlv_generic_be(void *data_ppdu_info,
|
|
#endif /* QCA_MONITOR_2_0_SUPPORT */
|
|
#endif /* QCA_MONITOR_2_0_SUPPORT */
|
|
|
|
|
|
#ifdef REO_SHARED_QREF_TABLE_EN
|
|
#ifdef REO_SHARED_QREF_TABLE_EN
|
|
|
|
+static void hal_reo_shared_qaddr_cache_clear_be(hal_soc_handle_t hal_soc_hdl)
|
|
|
|
+{
|
|
|
|
+ struct hal_soc *hal = (struct hal_soc *)hal_soc_hdl;
|
|
|
|
+ uint32_t reg_val = 0;
|
|
|
|
+
|
|
|
|
+ /* Set Qdesc clear bit to erase REO internal storage for Qdesc pointers
|
|
|
|
+ * of 37 peer/tids
|
|
|
|
+ */
|
|
|
|
+ reg_val = HAL_REG_READ(hal, HWIO_REO_R0_QDESC_ADDR_READ_ADDR(REO_REG_REG_BASE));
|
|
|
|
+ reg_val |= HAL_SM(HWIO_REO_R0_QDESC_ADDR_READ, CLEAR_QDESC_ARRAY, 1);
|
|
|
|
+ HAL_REG_WRITE(hal,
|
|
|
|
+ HWIO_REO_R0_QDESC_ADDR_READ_ADDR(REO_REG_REG_BASE),
|
|
|
|
+ reg_val);
|
|
|
|
+
|
|
|
|
+ /* Clear Qdesc clear bit to erase REO internal storage for Qdesc pointers
|
|
|
|
+ * of 37 peer/tids
|
|
|
|
+ */
|
|
|
|
+ reg_val &= ~(HAL_SM(HWIO_REO_R0_QDESC_ADDR_READ, CLEAR_QDESC_ARRAY, 1));
|
|
|
|
+ HAL_REG_WRITE(hal,
|
|
|
|
+ HWIO_REO_R0_QDESC_ADDR_READ_ADDR(REO_REG_REG_BASE),
|
|
|
|
+ reg_val);
|
|
|
|
+
|
|
|
|
+ hal_verbose_debug("hal_soc: %pK :Setting CLEAR_DESC_ARRAY field of"
|
|
|
|
+ "WCSS_UMAC_REO_R0_QDESC_ADDR_READ and resetting back"
|
|
|
|
+ "to erase stale entries in reo storage: regval:%x", hal, reg_val);
|
|
|
|
+}
|
|
|
|
+
|
|
/* hal_reo_shared_qaddr_write(): Write REO tid queue addr
|
|
/* hal_reo_shared_qaddr_write(): Write REO tid queue addr
|
|
* LUT shared by SW and HW at the index given by peer id
|
|
* LUT shared by SW and HW at the index given by peer id
|
|
* and tid.
|
|
* and tid.
|
|
@@ -658,6 +685,7 @@ static void hal_reo_shared_qaddr_write_be(hal_soc_handle_t hal_soc_hdl,
|
|
else
|
|
else
|
|
reo_qref->receive_queue_number = 0;
|
|
reo_qref->receive_queue_number = 0;
|
|
|
|
|
|
|
|
+ hal_reo_shared_qaddr_cache_clear_be(hal_soc_hdl);
|
|
hal_verbose_debug("hw_qdesc_paddr: %pK, tid: %d, reo_qref:%pK,"
|
|
hal_verbose_debug("hw_qdesc_paddr: %pK, tid: %d, reo_qref:%pK,"
|
|
"rx_reo_queue_desc_addr_31_0: %x,"
|
|
"rx_reo_queue_desc_addr_31_0: %x,"
|
|
"rx_reo_queue_desc_addr_39_32: %x",
|
|
"rx_reo_queue_desc_addr_39_32: %x",
|
|
@@ -666,33 +694,6 @@ static void hal_reo_shared_qaddr_write_be(hal_soc_handle_t hal_soc_hdl,
|
|
reo_qref->rx_reo_queue_desc_addr_39_32);
|
|
reo_qref->rx_reo_queue_desc_addr_39_32);
|
|
}
|
|
}
|
|
|
|
|
|
-static void hal_reo_shared_qaddr_cache_clear_be(hal_soc_handle_t hal_soc_hdl)
|
|
|
|
-{
|
|
|
|
- struct hal_soc *hal = (struct hal_soc *)hal_soc_hdl;
|
|
|
|
- uint32_t reg_val = 0;
|
|
|
|
-
|
|
|
|
- /* Set Qdesc clear bit to erase REO internal storage for Qdesc pointers
|
|
|
|
- * of 37 peer/tids
|
|
|
|
- */
|
|
|
|
- reg_val = HAL_REG_READ(hal, HWIO_REO_R0_QDESC_ADDR_READ_ADDR(REO_REG_REG_BASE));
|
|
|
|
- reg_val |= HAL_SM(HWIO_REO_R0_QDESC_ADDR_READ, CLEAR_QDESC_ARRAY, 1);
|
|
|
|
- HAL_REG_WRITE(hal,
|
|
|
|
- HWIO_REO_R0_QDESC_ADDR_READ_ADDR(REO_REG_REG_BASE),
|
|
|
|
- reg_val);
|
|
|
|
-
|
|
|
|
- /* Clear Qdesc clear bit to erase REO internal storage for Qdesc pointers
|
|
|
|
- * of 37 peer/tids
|
|
|
|
- */
|
|
|
|
- reg_val &= ~(HAL_SM(HWIO_REO_R0_QDESC_ADDR_READ, CLEAR_QDESC_ARRAY, 1));
|
|
|
|
- HAL_REG_WRITE(hal,
|
|
|
|
- HWIO_REO_R0_QDESC_ADDR_READ_ADDR(REO_REG_REG_BASE),
|
|
|
|
- reg_val);
|
|
|
|
-
|
|
|
|
- hal_verbose_debug("hal_soc: %pK :Setting CLEAR_DESC_ARRAY field of"
|
|
|
|
- "WCSS_UMAC_REO_R0_QDESC_ADDR_READ and resetting back"
|
|
|
|
- "to erase stale entries in reo storage: regval:%x", hal, reg_val);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
/**
|
|
/**
|
|
* hal_reo_shared_qaddr_setup() - Allocate MLO and Non MLO reo queue
|
|
* hal_reo_shared_qaddr_setup() - Allocate MLO and Non MLO reo queue
|
|
* reference table shared between SW and HW and initialize in Qdesc Base0
|
|
* reference table shared between SW and HW and initialize in Qdesc Base0
|