summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2016-08-26 14:48:48 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2016-08-26 14:48:47 -0700
commit0cf5c85f8a9567a043b7c7399a184f5533eae7b5 (patch)
tree989d65f910e089acecf79e979e708f1d9fd3e226
parent86cdb090cb445b66ad2b32b2abf938c9cd34f005 (diff)
parenta4720ff813a9ec14b63ddb88747d1184e4783a9e (diff)
Merge "msm: ipa: header change for SMMU wlan VA mapping"
-rw-r--r--drivers/platform/msm/ipa/ipa_v3/ipa_uc_wdi.c49
-rw-r--r--include/linux/ipa.h2
2 files changed, 32 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;
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;
};
/**