aboutsummaryrefslogtreecommitdiff
path: root/drivers/platform/msm/mhi_dev/mhi.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/platform/msm/mhi_dev/mhi.c')
-rw-r--r--drivers/platform/msm/mhi_dev/mhi.c89
1 files changed, 39 insertions, 50 deletions
diff --git a/drivers/platform/msm/mhi_dev/mhi.c b/drivers/platform/msm/mhi_dev/mhi.c
index 0f6a0d255db6..48edff5a60f6 100644
--- a/drivers/platform/msm/mhi_dev/mhi.c
+++ b/drivers/platform/msm/mhi_dev/mhi.c
@@ -122,22 +122,18 @@ void mhi_dev_read_from_host(struct mhi_dev *mhi, struct mhi_addr *transfer)
host_addr_pa = transfer->host_pa | bit_40;
}
- if (mhi->use_ipa) {
- mhi_log(MHI_MSG_VERBOSE,
- "device 0x%x <<-- host 0x%llx, size %d\n",
- transfer->phy_addr, host_addr_pa,
- (int) transfer->size);
- rc = ipa_dma_async_memcpy((u64)transfer->phy_addr, host_addr_pa,
- (int)transfer->size,
- mhi_dev_ring_cache_completion_cb, &ring_req);
- if (rc)
- pr_err("error while reading from host:%d\n", rc);
+ mhi_log(MHI_MSG_VERBOSE,
+ "device 0x%x <<-- host 0x%llx, size %d\n",
+ transfer->phy_addr, host_addr_pa,
+ (int) transfer->size);
+ rc = ipa_dma_async_memcpy((u64)transfer->phy_addr, host_addr_pa,
+ (int)transfer->size,
+ mhi_dev_ring_cache_completion_cb, &ring_req);
+ if (rc)
+ pr_err("error while reading from host:%d\n", rc);
+
+ wait_for_completion(&done);
- wait_for_completion(&done);
- } else {
- memcpy(transfer->virt_addr, (void *) &transfer->device_va,
- (int) transfer->size);
- }
}
EXPORT_SYMBOL(mhi_dev_read_from_host);
@@ -160,42 +156,35 @@ void mhi_dev_write_to_host(struct mhi_dev *mhi, struct mhi_addr *transfer,
host_addr_pa = transfer->host_pa | bit_40;
}
- if (mhi->use_ipa) {
- mhi_log(MHI_MSG_VERBOSE,
- "device 0x%llx --> host 0x%llx, size %d\n",
- (uint64_t) mhi->cache_dma_handle, host_addr_pa,
- (int) transfer->size);
- if (tr_type == MHI_DEV_DMA_ASYNC) {
- dma = dma_map_single(&mhi->pdev->dev,
- transfer->virt_addr, transfer->size,
- DMA_TO_DEVICE);
- if (ereq->event_type == SEND_EVENT_BUFFER) {
- ereq->dma = dma;
- ereq->dma_len = transfer->size;
- } else if (ereq->event_type == SEND_EVENT_RD_OFFSET) {
- ereq->event_rd_dma = dma;
- }
- rc = ipa_dma_async_memcpy(host_addr_pa, (uint64_t) dma,
- (int)transfer->size,
- ereq->client_cb, ereq);
- if (rc)
- pr_err("error while writing to host:%d\n", rc);
- } else if (tr_type == MHI_DEV_DMA_SYNC) {
- /* Copy the device content to a local device
- * physical address */
- memcpy(mhi->dma_cache, transfer->virt_addr,
- transfer->size);
- rc = ipa_dma_sync_memcpy(host_addr_pa,
- (u64) mhi->cache_dma_handle,
- (int) transfer->size);
- if (rc)
- pr_err("error while writing to host:%d\n", rc);
- }
- } else {
- memcpy((void *) &transfer->device_va, transfer->virt_addr,
+ mhi_log(MHI_MSG_VERBOSE,
+ "device 0x%llx --> host 0x%llx, size %d\n",
+ (uint64_t) mhi->cache_dma_handle, host_addr_pa,
+ (int) transfer->size);
+ if (tr_type == MHI_DEV_DMA_ASYNC) {
+ dma = dma_map_single(&mhi->pdev->dev,
+ transfer->virt_addr, transfer->size,
+ DMA_TO_DEVICE);
+ if (ereq->event_type == SEND_EVENT_BUFFER) {
+ ereq->dma = dma;
+ ereq->dma_len = transfer->size;
+ } else if (ereq->event_type == SEND_EVENT_RD_OFFSET) {
+ ereq->event_rd_dma = dma;
+ }
+ rc = ipa_dma_async_memcpy(host_addr_pa, (uint64_t) dma,
+ (int)transfer->size,
+ ereq->client_cb, ereq);
+ if (rc)
+ pr_err("error while writing to host:%d\n", rc);
+ } else if (tr_type == MHI_DEV_DMA_SYNC) {
+ /* Copy the device content to a local device
+ * physical address */
+ memcpy(mhi->dma_cache, transfer->virt_addr,
transfer->size);
- /* Update state before sending events */
- wmb();
+ rc = ipa_dma_sync_memcpy(host_addr_pa,
+ (u64) mhi->cache_dma_handle,
+ (int) transfer->size);
+ if (rc)
+ pr_err("error while writing to host:%d\n", rc);
}
}
EXPORT_SYMBOL(mhi_dev_write_to_host);