summaryrefslogtreecommitdiff
path: root/drivers/platform
diff options
context:
space:
mode:
authorSkylar Chang <chiaweic@codeaurora.org>2016-07-19 11:56:25 -0700
committerSkylar Chang <chiaweic@codeaurora.org>2016-08-24 14:57:46 -0700
commita4720ff813a9ec14b63ddb88747d1184e4783a9e (patch)
treec16c5f8b48020f0b71b8630752e9ddaef75c6c39 /drivers/platform
parentc605e110ab18604981481a7b502da54640b620bc (diff)
msm: ipa: header change for SMMU wlan VA mapping
Wlan need to pass the VA to let the IPA-driver decide when to suspend the WDI pipe in SMMU enabled scenario. Change-Id: I00ae7f088c7411c8a6420f5e7ab12276d65fd269 Signed-off-by: Skylar Chang <chiaweic@codeaurora.org>
Diffstat (limited to 'drivers/platform')
-rw-r--r--drivers/platform/msm/ipa/ipa_v3/ipa_uc_wdi.c49
1 files changed, 30 insertions, 19 deletions
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;