Explorar o código

qcacmn: Enable SW2TCL_CMD ring for data

Enable SW2TCL_CMD ring for data on QCN9000, QCA8074 V2/V1
and IPQ6018 targets.

Enabled 4th Tx ring for data enqueue to HW.
Transmit completions for packets from CPU0 and CPU3 are routed to
WBM2SW Completion ring 2.
WB2SW completion ring2 is mapped to CPU3.

Change-Id: Ied4c4704e1f8623e909ad45c547a611de26c7ec5
Radha Krishna Simha Jiguru %!s(int64=5) %!d(string=hai) anos
pai
achega
bfbf27a6e6
Modificáronse 3 ficheiros con 53 adicións e 7 borrados
  1. 6 3
      dp/wifi3.0/dp_tx.c
  2. 44 1
      dp/wifi3.0/dp_tx.h
  3. 3 3
      hal/wifi3.0/hal_generic_api.h

+ 6 - 3
dp/wifi3.0/dp_tx.c

@@ -1139,8 +1139,10 @@ static QDF_STATUS dp_tx_hw_enqueue(struct dp_soc *soc, struct dp_vdev *vdev,
 			tx_exc_metadata->sec_type : vdev->sec_type);
 
 	/* Return Buffer Manager ID */
-	uint8_t bm_id = ring_id;
-	hal_ring_handle_t hal_ring_hdl = soc->tcl_data_ring[ring_id].hal_srng;
+	uint8_t bm_id = dp_tx_get_rbm_id(soc, ring_id);
+
+	hal_ring_handle_t hal_ring_hdl = NULL;
+
 	QDF_STATUS status = QDF_STATUS_E_RESOURCES;
 
 	if (!dp_tx_is_desc_id_valid(soc, tx_desc->id)) {
@@ -1210,7 +1212,8 @@ static QDF_STATUS dp_tx_hw_enqueue(struct dp_soc *soc, struct dp_vdev *vdev,
 			 length, type, (uint64_t)dma_addr,
 			 tx_desc->pkt_offset, tx_desc->id);
 
-	hal_ring_hdl = soc->tcl_data_ring[ring_id].hal_srng;
+	hal_ring_hdl = dp_tx_get_hal_ring_hdl(soc, ring_id);
+
 	if (qdf_unlikely(hal_srng_access_start(soc->hal_soc, hal_ring_hdl))) {
 		QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_ERROR,
 			  "%s %d : HAL RING Access Failed -- %pK",

+ 44 - 1
dp/wifi3.0/dp_tx.h

@@ -316,12 +316,43 @@ static inline void dp_tx_get_queue(struct dp_vdev *vdev,
 				DP_TX_QUEUE_MASK;
 
 	queue->desc_pool_id = queue_offset;
-	queue->ring_id = vdev->pdev->soc->tx_ring_map[queue_offset];
+	queue->ring_id = qdf_get_cpu();
 
 	QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG,
 		  "%s, pool_id:%d ring_id: %d",
 		  __func__, queue->desc_pool_id, queue->ring_id);
 }
+
+/*
+ * dp_tx_get_hal_ring_hdl()- Get the hal_tx_ring_hdl for data transmission
+ * @dp_soc - DP soc structure pointer
+ * @ring_id - Transmit Queue/ring_id to be used when XPS is enabled
+ *
+ * Return - HAL ring handle
+ */
+static inline hal_ring_handle_t dp_tx_get_hal_ring_hdl(struct dp_soc *soc,
+						       uint8_t ring_id)
+{
+	if (ring_id == soc->num_tcl_data_rings)
+		return soc->tcl_cmd_credit_ring.hal_srng;
+
+	return soc->tcl_data_ring[ring_id].hal_srng;
+}
+
+/*
+ * dp_tx_get_rbm_id()- Get the RBM ID for data transmission completion.
+ * @dp_soc - DP soc structure pointer
+ * @ring_id - Transmit Queue/ring_id to be used when XPS is enabled
+ *
+ * Return - HAL ring handle
+ */
+static inline uint8_t dp_tx_get_rbm_id(struct dp_soc *doc,
+				       uint8_t ring_id)
+{
+	return (ring_id ? HAL_WBM_SW0_BM_ID + (ring_id - 1) :
+			  HAL_WBM_SW2_BM_ID);
+}
+
 #else /* QCA_OL_TX_MULTIQ_SUPPORT */
 static inline void dp_tx_get_queue(struct dp_vdev *vdev,
 				   qdf_nbuf_t nbuf, struct dp_tx_queue *queue)
@@ -334,6 +365,18 @@ static inline void dp_tx_get_queue(struct dp_vdev *vdev,
 		  "%s, pool_id:%d ring_id: %d",
 		  __func__, queue->desc_pool_id, queue->ring_id);
 }
+
+static inline hal_ring_handle_t dp_tx_get_hal_ring_hdl(struct dp_soc *soc,
+						       uint8_t ring_id)
+{
+	return soc->tcl_data_ring[ring_id].hal_srng;
+}
+
+static inline uint8_t dp_tx_get_rbm_id(struct dp_soc *soc,
+				       uint8_t ring_id)
+{
+	return (ring_id + HAL_WBM_SW0_BM_ID);
+}
 #endif
 #ifdef FEATURE_PERPKT_INFO
 QDF_STATUS

+ 3 - 3
hal/wifi3.0/hal_generic_api.h

@@ -101,7 +101,7 @@ void hal_tx_comp_get_status_generic(void *desc,
  * Return: void
  */
 static inline void hal_tx_desc_set_buf_addr_generic(void *desc,
-		dma_addr_t paddr, uint8_t pool_id,
+		dma_addr_t paddr, uint8_t rbm_id,
 		uint32_t desc_id, uint8_t type)
 {
 	/* Set buffer_addr_info.buffer_addr_31_0 */
@@ -114,11 +114,11 @@ static inline void hal_tx_desc_set_buf_addr_generic(void *desc,
 		HAL_TX_SM(UNIFIED_BUFFER_ADDR_INFO_1, BUFFER_ADDR_39_32,
 		       (((uint64_t) paddr) >> 32));
 
-	/* Set buffer_addr_info.return_buffer_manager = pool id */
+	/* Set buffer_addr_info.return_buffer_manager = rbm id */
 	HAL_SET_FLD(desc, UNIFIED_TCL_DATA_CMD_1,
 			 BUFFER_ADDR_INFO_BUF_ADDR_INFO) |=
 		HAL_TX_SM(UNIFIED_BUFFER_ADDR_INFO_1,
-		       RETURN_BUFFER_MANAGER, (pool_id + HAL_WBM_SW0_BM_ID));
+		       RETURN_BUFFER_MANAGER, rbm_id);
 
 	/* Set buffer_addr_info.sw_buffer_cookie = desc_id */
 	HAL_SET_FLD(desc, UNIFIED_TCL_DATA_CMD_1,