Ver Fonte

qcacmn: Add IPA api changes

Add changes in IPA APIs due to hal API
modifications for WCN7850.

Change-Id: I13e3acc154cb22538eca0adcd312cb7f9bc1124c
CRs-Fixed: 2888556
Rakesh Pillai há 4 anos atrás
pai
commit
a42ab6f94e
1 ficheiros alterados com 86 adições e 58 exclusões
  1. 86 58
      dp/wifi3.0/dp_ipa.c

+ 86 - 58
dp/wifi3.0/dp_ipa.c

@@ -21,6 +21,7 @@
 #include <qdf_lock.h>
 #include <hal_hw_headers.h>
 #include <hal_api.h>
+#include <hal_reo.h>
 #include <hif.h>
 #include <htt.h>
 #include <wdi_event.h>
@@ -406,8 +407,7 @@ static int dp_ipa_tx_alt_pool_attach(struct dp_soc *soc)
 	struct hal_srng *wbm_srng = (struct hal_srng *)
 			soc->tx_comp_ring[IPA_TX_ALT_COMP_RING_IDX].hal_srng;
 	struct hal_srng_params srng_params;
-	uint32_t paddr_lo;
-	uint32_t paddr_hi;
+	uint32_t wbm_sw0_bm_id = soc->wbm_sw0_bm_id;
 	void *ring_entry;
 	int num_entries;
 	qdf_nbuf_t nbuf;
@@ -478,11 +478,9 @@ static int dp_ipa_tx_alt_pool_attach(struct dp_soc *soc)
 		qdf_mem_dp_tx_skb_cnt_inc();
 		qdf_mem_dp_tx_skb_inc(qdf_nbuf_get_end_offset(nbuf));
 
-		paddr_lo = ((uint64_t)buffer_paddr & 0x00000000ffffffff);
-		paddr_hi = ((uint64_t)buffer_paddr & 0x0000001f00000000) >> 32;
-		HAL_RXDMA_PADDR_LO_SET(ring_entry, paddr_lo);
-		HAL_RXDMA_PADDR_HI_SET(ring_entry, paddr_hi);
-		HAL_RXDMA_MANAGER_SET(ring_entry, HAL_WBM_SW4_BM_ID);
+		hal_rxdma_buff_addr_info_set(soc->hal_soc, ring_entry,
+					     buffer_paddr, 0,
+					     HAL_WBM_SW4_BM_ID(wbm_sw0_bm_id));
 
 		soc->ipa_uc_tx_rsc_alt.tx_buf_pool_vaddr_unaligned[
 			tx_buffer_count] = (void *)nbuf;
@@ -763,7 +761,8 @@ static void dp_ipa_wdi_tx_alt_pipe_params(struct dp_soc *soc,
 	HAL_TX_DESC_SET_TLV_HDR(desc_addr, HAL_TX_TCL_DATA_TAG, desc_size);
 	tcl_desc_ptr = (struct tcl_data_cmd *)
 		(QDF_IPA_WDI_SETUP_INFO_DESC_FORMAT_TEMPLATE(tx) + 1);
-	tcl_desc_ptr->buf_addr_info.return_buffer_manager = HAL_WBM_SW4_BM_ID;
+	tcl_desc_ptr->buf_addr_info.return_buffer_manager =
+				HAL_WBM_SW4_BM_ID(soc->wbm_sw0_bm_id);
 	tcl_desc_ptr->addrx_en = 1;	/* Address X search enable in ASE */
 	tcl_desc_ptr->addry_en = 1;	/* Address X search enable in ASE */
 	tcl_desc_ptr->encap_type = HAL_TX_ENCAP_TYPE_ETHERNET;
@@ -814,7 +813,8 @@ dp_ipa_wdi_tx_alt_pipe_smmu_params(struct dp_soc *soc,
 	HAL_TX_DESC_SET_TLV_HDR(desc_addr, HAL_TX_TCL_DATA_TAG, desc_size);
 	tcl_desc_ptr = (struct tcl_data_cmd *)
 		(QDF_IPA_WDI_SETUP_INFO_SMMU_DESC_FORMAT_TEMPLATE(tx_smmu) + 1);
-	tcl_desc_ptr->buf_addr_info.return_buffer_manager = HAL_WBM_SW4_BM_ID;
+	tcl_desc_ptr->buf_addr_info.return_buffer_manager =
+					HAL_WBM_SW4_BM_ID(soc->wbm_sw0_bm_id);
 	tcl_desc_ptr->addrx_en = 1;	/* Address X search enable in ASE */
 	tcl_desc_ptr->addry_en = 1;	/* Address Y search enable in ASE */
 	tcl_desc_ptr->encap_type = HAL_TX_ENCAP_TYPE_ETHERNET;
@@ -1192,8 +1192,6 @@ static int dp_tx_ipa_uc_attach(struct dp_soc *soc, struct dp_pdev *pdev)
 	struct hal_srng *wbm_srng = (struct hal_srng *)
 			soc->tx_comp_ring[IPA_TX_COMP_RING_IDX].hal_srng;
 	struct hal_srng_params srng_params;
-	uint32_t paddr_lo;
-	uint32_t paddr_hi;
 	void *ring_entry;
 	int num_entries;
 	qdf_nbuf_t nbuf;
@@ -1262,12 +1260,14 @@ static int dp_tx_ipa_uc_attach(struct dp_soc *soc, struct dp_pdev *pdev)
 		qdf_mem_dp_tx_skb_cnt_inc();
 		qdf_mem_dp_tx_skb_inc(qdf_nbuf_get_end_offset(nbuf));
 
-		paddr_lo = ((uint64_t)buffer_paddr & 0x00000000ffffffff);
-		paddr_hi = ((uint64_t)buffer_paddr & 0x0000001f00000000) >> 32;
-		HAL_RXDMA_PADDR_LO_SET(ring_entry, paddr_lo);
-		HAL_RXDMA_PADDR_HI_SET(ring_entry, paddr_hi);
-		HAL_RXDMA_MANAGER_SET(ring_entry, (IPA_TCL_DATA_RING_IDX +
-				      HAL_WBM_SW0_BM_ID));
+		/*
+		 * TODO - WCN7850 code can directly call the be handler
+		 * instead of hal soc ops.
+		 */
+		hal_rxdma_buff_addr_info_set(soc->hal_soc, ring_entry,
+					     buffer_paddr, 0,
+					     (IPA_TCL_DATA_RING_IDX +
+					      soc->wbm_sw0_bm_id));
 
 		soc->ipa_uc_tx_rsc.tx_buf_pool_vaddr_unaligned[tx_buffer_count]
 			= (void *)nbuf;
@@ -1361,6 +1361,7 @@ int dp_ipa_ring_resource_setup(struct dp_soc *soc,
 	qdf_dma_addr_t hp_addr;
 	unsigned long addr_offset, dev_base_paddr;
 	uint32_t ix0;
+	uint8_t ix0_map[8];
 
 	if (!wlan_cfg_is_ipa_enabled(soc->wlan_cfg_ctx))
 		return QDF_STATUS_SUCCESS;
@@ -1485,14 +1486,17 @@ int dp_ipa_ring_resource_setup(struct dp_soc *soc,
 	 * Set DEST_RING_MAPPING_4 to SW2 as default value for
 	 * DESTINATION_RING_CTRL_IX_0.
 	 */
-	ix0 = HAL_REO_REMAP_IX0(REO_REMAP_TCL, 0) |
-	      HAL_REO_REMAP_IX0(REO_REMAP_SW1, 1) |
-	      HAL_REO_REMAP_IX0(REO_REMAP_SW2, 2) |
-	      HAL_REO_REMAP_IX0(REO_REMAP_SW3, 3) |
-	      HAL_REO_REMAP_IX0(REO_REMAP_SW2, 4) |
-	      HAL_REO_REMAP_IX0(REO_REMAP_RELEASE, 5) |
-	      HAL_REO_REMAP_IX0(REO_REMAP_FW, 6) |
-	      HAL_REO_REMAP_IX0(REO_REMAP_FW, 7);
+	ix0_map[0] = REO_REMAP_TCL;
+	ix0_map[1] = REO_REMAP_SW1;
+	ix0_map[2] = REO_REMAP_SW2;
+	ix0_map[3] = REO_REMAP_SW3;
+	ix0_map[4] = REO_REMAP_SW2;
+	ix0_map[5] = REO_REMAP_RELEASE;
+	ix0_map[6] = REO_REMAP_FW;
+	ix0_map[7] = REO_REMAP_FW;
+
+	ix0 = hal_gen_reo_remap_val(soc->hal_soc, HAL_REO_REMAP_REG_IX0,
+				    ix0_map);
 
 	hal_reo_read_write_ctrl_ix(soc->hal_soc, false, &ix0, NULL, NULL, NULL);
 
@@ -1696,6 +1700,7 @@ QDF_STATUS dp_ipa_enable_autonomy(struct cdp_soc_t *soc_hdl, uint8_t pdev_id)
 		dp_get_pdev_from_soc_pdev_id_wifi3(soc, pdev_id);
 	uint32_t ix0;
 	uint32_t ix2;
+	uint8_t ix_map[8];
 
 	if (!pdev) {
 		dp_err("Invalid instance");
@@ -1709,24 +1714,30 @@ QDF_STATUS dp_ipa_enable_autonomy(struct cdp_soc_t *soc_hdl, uint8_t pdev_id)
 		return QDF_STATUS_E_AGAIN;
 
 	/* Call HAL API to remap REO rings to REO2IPA ring */
-	ix0 = HAL_REO_REMAP_IX0(REO_REMAP_TCL, 0) |
-	      HAL_REO_REMAP_IX0(REO_REMAP_SW4, 1) |
-	      HAL_REO_REMAP_IX0(REO_REMAP_SW1, 2) |
-	      HAL_REO_REMAP_IX0(REO_REMAP_SW4, 3) |
-	      HAL_REO_REMAP_IX0(REO_REMAP_SW4, 4) |
-	      HAL_REO_REMAP_IX0(REO_REMAP_RELEASE, 5) |
-	      HAL_REO_REMAP_IX0(REO_REMAP_FW, 6) |
-	      HAL_REO_REMAP_IX0(REO_REMAP_FW, 7);
+	ix_map[0] = REO_REMAP_TCL;
+	ix_map[1] = REO_REMAP_SW4;
+	ix_map[2] = REO_REMAP_SW1;
+	ix_map[3] = REO_REMAP_SW4;
+	ix_map[4] = REO_REMAP_SW4;
+	ix_map[5] = REO_REMAP_RELEASE;
+	ix_map[6] = REO_REMAP_FW;
+	ix_map[7] = REO_REMAP_FW;
+
+	ix0 = hal_gen_reo_remap_val(soc->hal_soc, HAL_REO_REMAP_REG_IX0,
+				    ix_map);
 
 	if (wlan_cfg_is_rx_hash_enabled(soc->wlan_cfg_ctx)) {
-		ix2 = HAL_REO_REMAP_IX2(REO_REMAP_SW4, 16) |
-		      HAL_REO_REMAP_IX2(REO_REMAP_SW4, 17) |
-		      HAL_REO_REMAP_IX2(REO_REMAP_SW4, 18) |
-		      HAL_REO_REMAP_IX2(REO_REMAP_SW4, 19) |
-		      HAL_REO_REMAP_IX2(REO_REMAP_SW4, 20) |
-		      HAL_REO_REMAP_IX2(REO_REMAP_SW4, 21) |
-		      HAL_REO_REMAP_IX2(REO_REMAP_SW4, 22) |
-		      HAL_REO_REMAP_IX2(REO_REMAP_SW4, 23);
+		ix_map[0] = REO_REMAP_SW4;
+		ix_map[1] = REO_REMAP_SW4;
+		ix_map[2] = REO_REMAP_SW4;
+		ix_map[3] = REO_REMAP_SW4;
+		ix_map[4] = REO_REMAP_SW4;
+		ix_map[5] = REO_REMAP_SW4;
+		ix_map[6] = REO_REMAP_SW4;
+		ix_map[7] = REO_REMAP_SW4;
+
+		ix2 = hal_gen_reo_remap_val(soc->hal_soc, HAL_REO_REMAP_REG_IX2,
+					    ix_map);
 
 		hal_reo_read_write_ctrl_ix(soc->hal_soc, false, &ix0, NULL,
 					   &ix2, &ix2);
@@ -1745,6 +1756,7 @@ QDF_STATUS dp_ipa_disable_autonomy(struct cdp_soc_t *soc_hdl, uint8_t pdev_id)
 	struct dp_soc *soc = cdp_soc_t_to_dp_soc(soc_hdl);
 	struct dp_pdev *pdev =
 		dp_get_pdev_from_soc_pdev_id_wifi3(soc, pdev_id);
+	uint8_t ix0_map[8];
 	uint32_t ix0;
 	uint32_t ix2;
 	uint32_t ix3;
@@ -1760,15 +1772,18 @@ QDF_STATUS dp_ipa_disable_autonomy(struct cdp_soc_t *soc_hdl, uint8_t pdev_id)
 	if (!hif_is_target_ready(HIF_GET_SOFTC(soc->hif_handle)))
 		return QDF_STATUS_E_AGAIN;
 
+	ix0_map[0] = REO_REMAP_TCL;
+	ix0_map[1] = REO_REMAP_SW1;
+	ix0_map[2] = REO_REMAP_SW2;
+	ix0_map[3] = REO_REMAP_SW3;
+	ix0_map[4] = REO_REMAP_SW2;
+	ix0_map[5] = REO_REMAP_RELEASE;
+	ix0_map[6] = REO_REMAP_FW;
+	ix0_map[7] = REO_REMAP_FW;
+
 	/* Call HAL API to remap REO rings to REO2IPA ring */
-	ix0 = HAL_REO_REMAP_IX0(REO_REMAP_TCL, 0) |
-	      HAL_REO_REMAP_IX0(REO_REMAP_SW1, 1) |
-	      HAL_REO_REMAP_IX0(REO_REMAP_SW2, 2) |
-	      HAL_REO_REMAP_IX0(REO_REMAP_SW3, 3) |
-	      HAL_REO_REMAP_IX0(REO_REMAP_SW2, 4) |
-	      HAL_REO_REMAP_IX0(REO_REMAP_RELEASE, 5) |
-	      HAL_REO_REMAP_IX0(REO_REMAP_FW, 6) |
-	      HAL_REO_REMAP_IX0(REO_REMAP_FW, 7);
+	ix0 = hal_gen_reo_remap_val(soc->hal_soc, HAL_REO_REMAP_REG_IX0,
+				    ix0_map);
 
 	if (wlan_cfg_is_rx_hash_enabled(soc->wlan_cfg_ctx)) {
 		dp_reo_remap_config(soc, &ix2, &ix3);
@@ -1859,14 +1874,20 @@ static void dp_ipa_wdi_tx_params(struct dp_soc *soc,
 	desc_addr =
 		(uint8_t *)QDF_IPA_WDI_SETUP_INFO_DESC_FORMAT_TEMPLATE(tx);
 	desc_size = sizeof(struct tcl_data_cmd);
+#ifndef DP_BE_WAR
+	/* TODO - WCN7850 does not have these fields */
 	HAL_TX_DESC_SET_TLV_HDR(desc_addr, HAL_TX_TCL_DATA_TAG, desc_size);
+#endif
 	tcl_desc_ptr = (struct tcl_data_cmd *)
 		(QDF_IPA_WDI_SETUP_INFO_DESC_FORMAT_TEMPLATE(tx) + 1);
 	tcl_desc_ptr->buf_addr_info.return_buffer_manager =
-		HAL_RX_BUF_RBM_SW2_BM;
+		HAL_RX_BUF_RBM_SW2_BM(soc->wbm_sw0_bm_id);
+#ifndef DP_BE_WAR
+	/* TODO - WCN7850 does not have these fields */
 	tcl_desc_ptr->addrx_en = 1;	/* Address X search enable in ASE */
 	tcl_desc_ptr->encap_type = HAL_TX_ENCAP_TYPE_ETHERNET;
 	tcl_desc_ptr->packet_offset = 2;	/* padding for alignment */
+#endif
 }
 
 static void dp_ipa_wdi_rx_params(struct dp_soc *soc,
@@ -1906,7 +1927,7 @@ static void dp_ipa_wdi_rx_params(struct dp_soc *soc,
 	QDF_IPA_WDI_SETUP_INFO_IS_EVT_RN_DB_PCIE_ADDR(rx) = false;
 
 	QDF_IPA_WDI_SETUP_INFO_PKT_OFFSET(rx) =
-		RX_PKT_TLVS_LEN + L3_HEADER_PADDING;
+		soc->rx_pkt_tlv_size + L3_HEADER_PADDING;
 }
 
 static void
@@ -1956,14 +1977,20 @@ dp_ipa_wdi_tx_smmu_params(struct dp_soc *soc,
 	desc_addr = (uint8_t *)QDF_IPA_WDI_SETUP_INFO_SMMU_DESC_FORMAT_TEMPLATE(
 			tx_smmu);
 	desc_size = sizeof(struct tcl_data_cmd);
+#ifndef DP_BE_WAR
+	/* TODO - WCN7850 does not have these fields */
 	HAL_TX_DESC_SET_TLV_HDR(desc_addr, HAL_TX_TCL_DATA_TAG, desc_size);
+#endif
 	tcl_desc_ptr = (struct tcl_data_cmd *)
 		(QDF_IPA_WDI_SETUP_INFO_SMMU_DESC_FORMAT_TEMPLATE(tx_smmu) + 1);
 	tcl_desc_ptr->buf_addr_info.return_buffer_manager =
-		HAL_RX_BUF_RBM_SW2_BM;
+		HAL_RX_BUF_RBM_SW2_BM(soc->wbm_sw0_bm_id);
+#ifndef DP_BE_WAR
+	/* TODO - WCN7850 does not have these fields */
 	tcl_desc_ptr->addrx_en = 1;	/* Address X search enable in ASE */
 	tcl_desc_ptr->encap_type = HAL_TX_ENCAP_TYPE_ETHERNET;
 	tcl_desc_ptr->packet_offset = 2;	/* padding for alignment */
+#endif
 }
 
 static void
@@ -2003,7 +2030,7 @@ dp_ipa_wdi_rx_smmu_params(struct dp_soc *soc,
 	QDF_IPA_WDI_SETUP_INFO_SMMU_IS_EVT_RN_DB_PCIE_ADDR(rx_smmu) = false;
 
 	QDF_IPA_WDI_SETUP_INFO_SMMU_PKT_OFFSET(rx_smmu) =
-		RX_PKT_TLVS_LEN + L3_HEADER_PADDING;
+		soc->rx_pkt_tlv_size + L3_HEADER_PADDING;
 }
 
 QDF_STATUS dp_ipa_setup(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
@@ -2326,7 +2353,7 @@ QDF_STATUS dp_ipa_setup(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
 	/* FW Head Pointer Address */
 	QDF_IPA_WDI_SETUP_INFO_EVENT_RING_DOORBELL_PA(rx) =
 				soc->ipa_uc_rx_rsc.ipa_rx_refill_buf_hp_paddr;
-	QDF_IPA_WDI_SETUP_INFO_PKT_OFFSET(rx) = RX_PKT_TLVS_LEN +
+	QDF_IPA_WDI_SETUP_INFO_PKT_OFFSET(rx) = soc->rx_pkt_tlv_size +
 						L3_HEADER_PADDING;
 	QDF_IPA_WDI_CONN_IN_PARAMS_NOTIFY(&pipe_in) = ipa_w2i_cb;
 	QDF_IPA_WDI_CONN_IN_PARAMS_PRIV(&pipe_in) = ipa_priv;
@@ -2815,12 +2842,13 @@ static qdf_nbuf_t dp_ipa_frag_nbuf_linearize(struct dp_soc *soc,
 		/* first head nbuf */
 		if (is_nbuf_head) {
 			qdf_mem_copy(dst_nbuf_data, src_nbuf_data,
-				     RX_PKT_TLVS_LEN);
+				     soc->rx_pkt_tlv_size);
 			/* leave extra 2 bytes L3_HEADER_PADDING */
-			dst_nbuf_data += (RX_PKT_TLVS_LEN + L3_HEADER_PADDING);
-			src_nbuf_data += RX_PKT_TLVS_LEN;
+			dst_nbuf_data += (soc->rx_pkt_tlv_size +
+					  L3_HEADER_PADDING);
+			src_nbuf_data += soc->rx_pkt_tlv_size;
 			copy_len = qdf_nbuf_headlen(temp_nbuf) -
-						RX_PKT_TLVS_LEN;
+						soc->rx_pkt_tlv_size;
 			temp_nbuf = qdf_nbuf_get_ext_list(temp_nbuf);
 			is_nbuf_head = false;
 		} else {