Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f931ff9d authored by c_mtharu's avatar c_mtharu Committed by Gerrit - the friendly Code Review server
Browse files

msm: ADSPRPC: Update map virtual address



Update map virtual address with return value of dma_alloc_coherent
which needs to be used while freeing the buffer.

Change-Id: I279e0f83987edce97a72af6e49c577f7af21e5c1
Acked-by: default avatarHimateja Reddy <hmreddy@qti.qualcomm.com>
Signed-off-by: default avatarTharun Kumar Merugu <mtharu@codeaurora.org>
parent df852897
Loading
Loading
Loading
Loading
+10 −9
Original line number Diff line number Diff line
@@ -468,17 +468,16 @@ static int fastrpc_mmap_find(struct fastrpc_file *fl, int fd,
	return -ENOTTY;
}

static int dma_alloc_memory(phys_addr_t *region_start, size_t size)
static int dma_alloc_memory(dma_addr_t *region_phys, void **vaddr, size_t size)
{
	struct fastrpc_apps *me = &gfa;
	void *vaddr = NULL;

	if (me->dev == NULL) {
		pr_err("device adsprpc-mem is not initialized\n");
		return -ENODEV;
	}
	vaddr = dma_alloc_coherent(me->dev, size, region_start, GFP_KERNEL);
	if (!vaddr) {
	*vaddr = dma_alloc_coherent(me->dev, size, region_phys, GFP_KERNEL);
	if (!*vaddr) {
		pr_err("ADSPRPC: Failed to allocate %x remote heap memory\n",
						(unsigned int)size);
		return -ENOMEM;
@@ -563,7 +562,7 @@ static void fastrpc_mmap_free(struct fastrpc_mmap *map, uint32_t flags)
		}
		if (map->phys) {
			dma_free_coherent(me->dev, map->size,
					&(map->va), map->phys);
				(void *)map->va, (dma_addr_t)map->phys);
		}
	} else {
		int destVM[1] = {VMID_HLOS};
@@ -616,7 +615,8 @@ static int fastrpc_mmap_create(struct fastrpc_file *fl, int fd,
	struct fastrpc_channel_ctx *chan = &apps->channel[cid];
	struct fastrpc_mmap *map = NULL;
	unsigned long attrs;
	phys_addr_t region_start = 0;
	dma_addr_t region_phys = 0;
	void *region_vaddr = NULL;
	unsigned long flags;
	int err = 0, vmid;

@@ -636,12 +636,13 @@ static int fastrpc_mmap_create(struct fastrpc_file *fl, int fd,
				mflags == ADSP_MMAP_REMOTE_HEAP_ADDR) {
		map->apps = me;
		map->fl = NULL;
		VERIFY(err, !dma_alloc_memory(&region_start, len));
		VERIFY(err, !dma_alloc_memory(&region_phys, &region_vaddr,
						 len));
		if (err)
			goto bail;
		map->phys = (uintptr_t)region_start;
		map->phys = (uintptr_t)region_phys;
		map->size = len;
		map->va = (uintptr_t)map->phys;
		map->va = (uintptr_t)region_vaddr;
	} else {
		if (map->attr && (map->attr & FASTRPC_ATTR_KEEP_MAP)) {
			pr_info("adsprpc: buffer mapped with persist attr %x\n",