diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_uc_wdi.c b/drivers/platform/msm/ipa/ipa_v3/ipa_uc_wdi.c
index e0f32bdcbb3d..9f026fc58f53 100644
--- a/drivers/platform/msm/ipa/ipa_v3/ipa_uc_wdi.c
+++ b/drivers/platform/msm/ipa/ipa_v3/ipa_uc_wdi.c
@@ -811,16 +811,12 @@ int ipa3_connect_wdi_pipe(struct ipa_wdi_in_params *in,
 			in->u.ul.rdy_ring_size);
 		IPADBG("rx_ring_rp_pa=0x%pa\n",
 			&in->u.ul.rdy_ring_rp_pa);
-		IPADBG("rdy_ring_rp value =%d\n",
-			*in->u.ul.rdy_ring_rp_va);
 		IPADBG("rx_comp_ring_base_pa=0x%pa\n",
 			&in->u.ul.rdy_comp_ring_base_pa);
 		IPADBG("rx_comp_ring_size=%d\n",
 			in->u.ul.rdy_comp_ring_size);
 		IPADBG("rx_comp_ring_wp_pa=0x%pa\n",
 			&in->u.ul.rdy_comp_ring_wp_pa);
-		IPADBG("rx_comp_ring_wp value=%d\n",
-			*in->u.ul.rdy_comp_ring_wp_va);
 		ipa3_ctx->uc_ctx.rdy_ring_base_pa =
 			in->u.ul.rdy_ring_base_pa;
 		ipa3_ctx->uc_ctx.rdy_ring_rp_pa =
@@ -833,21 +829,34 @@ int ipa3_connect_wdi_pipe(struct ipa_wdi_in_params *in,
 			in->u.ul.rdy_comp_ring_wp_pa;
 		ipa3_ctx->uc_ctx.rdy_comp_ring_size =
 			in->u.ul.rdy_comp_ring_size;
-		ipa3_ctx->uc_ctx.rdy_ring_rp_va =
-			in->u.ul.rdy_ring_rp_va;
-		ipa3_ctx->uc_ctx.rdy_comp_ring_wp_va =
-			in->u.ul.rdy_comp_ring_wp_va;
+
 		/* check if the VA is empty */
-		if (!in->u.ul.rdy_ring_rp_va && ipa3_ctx->ipa_wdi2) {
-			IPAERR("rdy_ring_rp_va is empty, wdi2.0(%d)\n",
-			ipa3_ctx->ipa_wdi2);
-			goto dma_alloc_fail;
-		}
-		if (!in->u.ul.rdy_comp_ring_wp_va &&
-			ipa3_ctx->ipa_wdi2) {
-			IPAERR("comp_ring_wp_va is empty, wdi2.0(%d)\n",
-			ipa3_ctx->ipa_wdi2);
-			goto dma_alloc_fail;
+		if (ipa3_ctx->ipa_wdi2) {
+			if (in->smmu_enabled) {
+				if (!in->u.ul_smmu.rdy_ring_rp_va ||
+					!in->u.ul_smmu.rdy_comp_ring_wp_va)
+					goto dma_alloc_fail;
+			} else {
+				if (!in->u.ul.rdy_ring_rp_va ||
+					!in->u.ul.rdy_comp_ring_wp_va)
+					goto dma_alloc_fail;
+			}
+			IPADBG("rdy_ring_rp value =%d\n",
+				in->smmu_enabled ?
+				*in->u.ul_smmu.rdy_ring_rp_va :
+				*in->u.ul.rdy_ring_rp_va);
+			IPADBG("rx_comp_ring_wp value=%d\n",
+				in->smmu_enabled ?
+				*in->u.ul_smmu.rdy_comp_ring_wp_va :
+				*in->u.ul.rdy_comp_ring_wp_va);
+				ipa3_ctx->uc_ctx.rdy_ring_rp_va =
+					in->smmu_enabled ?
+					in->u.ul_smmu.rdy_ring_rp_va :
+					in->u.ul.rdy_ring_rp_va;
+				ipa3_ctx->uc_ctx.rdy_comp_ring_wp_va =
+					in->smmu_enabled ?
+					in->u.ul_smmu.rdy_comp_ring_wp_va :
+					in->u.ul.rdy_comp_ring_wp_va;
 		}
 	}
 
@@ -933,7 +942,9 @@ int ipa3_connect_wdi_pipe(struct ipa_wdi_in_params *in,
 					tx_2->ce_ring_doorbell_pa_hi,
 					tx_2->ce_ring_doorbell_pa);
 
-			tx_2->num_tx_buffers = in->u.dl.num_tx_buffers;
+			tx_2->num_tx_buffers = in->smmu_enabled ?
+				in->u.dl_smmu.num_tx_buffers :
+				in->u.dl.num_tx_buffers;
 			tx_2->ipa_pipe_number = ipa_ep_idx;
 		} else {
 			tx = (struct IpaHwWdiTxSetUpCmdData_t *)cmd.base;
diff --git a/include/linux/ipa.h b/include/linux/ipa.h
index d85cf54cc785..81da2aaa01e5 100644
--- a/include/linux/ipa.h
+++ b/include/linux/ipa.h
@@ -949,6 +949,8 @@ struct ipa_wdi_ul_params_smmu {
 	struct sg_table rdy_comp_ring;
 	phys_addr_t rdy_comp_ring_wp_pa;
 	u32 rdy_comp_ring_size;
+	u32 *rdy_ring_rp_va;
+	u32 *rdy_comp_ring_wp_va;
 };
 
 /**