Parcourir la source

qcacld-3.0: Set pcie addr flag for IPA tx/rx ring

As for WDI2 over gsi, IPA driver adds is_txr_rn_db_pcie_addr
and is_evt_rn_db_pcie_addr in ipa_wdi_pipe_setup_info and
ipa_wdi_pipe_setup_info_smmu these two structures to check
if doorbell address is PCIe mapped address or not. So, it
need to set such flag from wlan host driver for IPA transfer
and event rings.

Change-Id: Ic71a460c6e87f5b77be737fa9a8e860ab7424e82
Chaoli Zhou il y a 5 ans
Parent
commit
803ea570f6
1 fichiers modifiés avec 33 ajouts et 13 suppressions
  1. 33 13
      core/dp/txrx/ol_txrx_ipa.c

+ 33 - 13
core/dp/txrx/ol_txrx_ipa.c

@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
  *
  * Permission to use, copy, modify, and/or distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
@@ -315,7 +315,8 @@ static inline void ol_txrx_setup_mcc_sys_pipes(
  */
 static inline void ol_txrx_ipa_wdi_tx_smmu_params(
 				struct ol_txrx_ipa_resources *ipa_res,
-				qdf_ipa_wdi_pipe_setup_info_smmu_t *tx_smmu)
+				qdf_ipa_wdi_pipe_setup_info_smmu_t *tx_smmu,
+				bool over_gsi)
 {
 	QDF_IPA_WDI_SETUP_INFO_SMMU_CLIENT(tx_smmu) =
 		IPA_CLIENT_WLAN1_CONS;
@@ -333,6 +334,8 @@ static inline void ol_txrx_ipa_wdi_tx_smmu_params(
 		ipa_res->ce_sr_ring_size;
 	QDF_IPA_WDI_SETUP_INFO_SMMU_EVENT_RING_DOORBELL_PA(tx_smmu) =
 		ipa_res->ce_reg_paddr;
+	if (over_gsi)
+		QDF_IPA_WDI_SETUP_INFO_SMMU_IS_EVT_RN_DB_PCIE_ADDR(tx_smmu) = true;
 	QDF_IPA_WDI_SETUP_INFO_SMMU_NUM_PKT_BUFFERS(tx_smmu) =
 		ipa_res->tx_num_alloc_buffer;
 	QDF_IPA_WDI_SETUP_INFO_SMMU_PKT_OFFSET(tx_smmu) = 0;
@@ -348,7 +351,8 @@ static inline void ol_txrx_ipa_wdi_tx_smmu_params(
  */
 static inline void ol_txrx_ipa_wdi_rx_smmu_params(
 				struct ol_txrx_ipa_resources *ipa_res,
-				qdf_ipa_wdi_pipe_setup_info_smmu_t *rx_smmu)
+				qdf_ipa_wdi_pipe_setup_info_smmu_t *rx_smmu,
+				bool over_gsi)
 {
 	QDF_IPA_WDI_SETUP_INFO_SMMU_CLIENT(rx_smmu) =
 		IPA_CLIENT_WLAN1_PROD;
@@ -360,6 +364,8 @@ static inline void ol_txrx_ipa_wdi_rx_smmu_params(
 		ipa_res->rx_rdy_ring->mem_info.size;
 	QDF_IPA_WDI_SETUP_INFO_SMMU_TRANSFER_RING_DOORBELL_PA(rx_smmu) =
 		ipa_res->rx_proc_done_idx->mem_info.pa;
+	if (over_gsi)
+		QDF_IPA_WDI_SETUP_INFO_SMMU_IS_TXR_RN_DB_PCIE_ADDR(rx_smmu) = false;
 	qdf_mem_copy(&QDF_IPA_WDI_SETUP_INFO_SMMU_EVENT_RING_BASE(
 				rx_smmu),
 		     &ipa_res->rx2_rdy_ring->sgtable,
@@ -368,13 +374,16 @@ static inline void ol_txrx_ipa_wdi_rx_smmu_params(
 		ipa_res->rx2_rdy_ring->mem_info.size;
 	QDF_IPA_WDI_SETUP_INFO_SMMU_EVENT_RING_DOORBELL_PA(rx_smmu) =
 		ipa_res->rx2_proc_done_idx->mem_info.pa;
+	if (over_gsi)
+		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) = 0;
 
 }
 #else
 static inline void ol_txrx_ipa_wdi_rx_smmu_params(
 				struct ol_txrx_ipa_resources *ipa_res,
-				qdf_ipa_wdi_pipe_setup_info_smmu_t *rx_smmu)
+				qdf_ipa_wdi_pipe_setup_info_smmu_t *rx_smmu,
+				bool over_gsi)
 {
 	QDF_IPA_WDI_SETUP_INFO_SMMU_CLIENT(rx_smmu) =
 		IPA_CLIENT_WLAN1_PROD;
@@ -395,13 +404,15 @@ static inline void ol_txrx_ipa_wdi_rx_smmu_params(
 
 static inline void ol_txrx_ipa_wdi_tx_smmu_params(
 				struct ol_txrx_ipa_resources *ipa_res,
-				qdf_ipa_wdi_pipe_setup_info_smmu_t *tx_smmu)
+				qdf_ipa_wdi_pipe_setup_info_smmu_t *tx_smmu,
+				bool over_gsi)
 {
 }
 
 static inline void ol_txrx_ipa_wdi_rx_smmu_params(
 				struct ol_txrx_ipa_resources *ipa_res,
-				qdf_ipa_wdi_pipe_setup_info_smmu_t *rx_smmu)
+				qdf_ipa_wdi_pipe_setup_info_smmu_t *rx_smmu,
+				bool over_gsi)
 {
 }
 #endif
@@ -415,7 +426,8 @@ static inline void ol_txrx_ipa_wdi_rx_smmu_params(
  */
 static inline void ol_txrx_ipa_wdi_tx_params(
 				struct ol_txrx_ipa_resources *ipa_res,
-				qdf_ipa_wdi_pipe_setup_info_t *tx)
+				qdf_ipa_wdi_pipe_setup_info_t *tx,
+				bool over_gsi)
 {
 	qdf_device_t osdev = cds_get_context(QDF_MODULE_ID_QDF_DEVICE);
 
@@ -438,6 +450,8 @@ static inline void ol_txrx_ipa_wdi_tx_params(
 		ipa_res->ce_sr_ring_size;
 	QDF_IPA_WDI_SETUP_INFO_EVENT_RING_DOORBELL_PA(tx) =
 		ipa_res->ce_reg_paddr;
+	if (over_gsi)
+		QDF_IPA_WDI_SETUP_INFO_IS_EVT_RN_DB_PCIE_ADDR(tx) = true;
 	QDF_IPA_WDI_SETUP_INFO_NUM_PKT_BUFFERS(tx) =
 		ipa_res->tx_num_alloc_buffer;
 	QDF_IPA_WDI_SETUP_INFO_PKT_OFFSET(tx) = 0;
@@ -453,7 +467,8 @@ static inline void ol_txrx_ipa_wdi_tx_params(
  */
 static inline void ol_txrx_ipa_wdi_rx_params(
 				struct ol_txrx_ipa_resources *ipa_res,
-				qdf_ipa_wdi_pipe_setup_info_t *rx)
+				qdf_ipa_wdi_pipe_setup_info_t *rx,
+				bool over_gsi)
 {
 	QDF_IPA_WDI_SETUP_INFO_CLIENT(rx) = IPA_CLIENT_WLAN1_PROD;
 	QDF_IPA_WDI_SETUP_INFO_TRANSFER_RING_BASE_PA(rx) =
@@ -462,12 +477,16 @@ static inline void ol_txrx_ipa_wdi_rx_params(
 		ipa_res->rx_rdy_ring->mem_info.size;
 	QDF_IPA_WDI_SETUP_INFO_TRANSFER_RING_DOORBELL_PA(rx) =
 		ipa_res->rx_proc_done_idx->mem_info.pa;
+	if (over_gsi)
+		QDF_IPA_WDI_SETUP_INFO_IS_TXR_RN_DB_PCIE_ADDR(rx) = false;
 	QDF_IPA_WDI_SETUP_INFO_EVENT_RING_BASE_PA(rx) =
 		ipa_res->rx2_rdy_ring->mem_info.pa;
 	QDF_IPA_WDI_SETUP_INFO_EVENT_RING_SIZE(rx) =
 		ipa_res->rx2_rdy_ring->mem_info.size;
 	QDF_IPA_WDI_SETUP_INFO_EVENT_RING_DOORBELL_PA(rx) =
 		ipa_res->rx2_proc_done_idx->mem_info.pa;
+	if (over_gsi)
+		QDF_IPA_WDI_SETUP_INFO_IS_EVT_RN_DB_PCIE_ADDR(rx) = false;
 	QDF_IPA_WDI_SETUP_INFO_PKT_OFFSET(rx) = 0;
 }
 
@@ -475,7 +494,8 @@ static inline void ol_txrx_ipa_wdi_rx_params(
 
 static inline void ol_txrx_ipa_wdi_rx_params(
 				struct ol_txrx_ipa_resources *ipa_res,
-				qdf_ipa_wdi_pipe_setup_info_t *rx)
+				qdf_ipa_wdi_pipe_setup_info_t *rx,
+				bool over_gsi)
 {
 	QDF_IPA_WDI_SETUP_INFO_CLIENT(rx) = IPA_CLIENT_WLAN1_PROD;
 	QDF_IPA_WDI_SETUP_INFO_TRANSFER_RING_BASE_PA(rx) =
@@ -551,9 +571,9 @@ QDF_STATUS ol_txrx_ipa_setup(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
 	QDF_IPA_EP_CFG_HDR_LITTLE_ENDIAN(tx_cfg) = true;
 
 	if (is_smmu_enabled)
-		ol_txrx_ipa_wdi_tx_smmu_params(ipa_res, tx_smmu);
+		ol_txrx_ipa_wdi_tx_smmu_params(ipa_res, tx_smmu, over_gsi);
 	else
-		ol_txrx_ipa_wdi_tx_params(ipa_res, tx);
+		ol_txrx_ipa_wdi_tx_params(ipa_res, tx, over_gsi);
 
 
 	/* RX PIPE */
@@ -577,9 +597,9 @@ QDF_STATUS ol_txrx_ipa_setup(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
 	QDF_IPA_EP_CFG_HDR_LITTLE_ENDIAN(rx_cfg) = true;
 
 	if (is_smmu_enabled)
-		ol_txrx_ipa_wdi_rx_smmu_params(ipa_res, rx_smmu);
+		ol_txrx_ipa_wdi_rx_smmu_params(ipa_res, rx_smmu, over_gsi);
 	else
-		ol_txrx_ipa_wdi_rx_params(ipa_res, rx);
+		ol_txrx_ipa_wdi_rx_params(ipa_res, rx, over_gsi);
 
 	QDF_IPA_WDI_CONN_IN_PARAMS_NOTIFY(&pipe_in) = ipa_w2i_cb;
 	QDF_IPA_WDI_CONN_IN_PARAMS_PRIV(&pipe_in) = ipa_priv;