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

Commit 7e12b1cd authored by Larry Bassel's avatar Larry Bassel
Browse files

ion: remove calls to outer cache routines



There aren't any platforms supported on 3.10 which
have outer caches.

Change-Id: Ia624de9835dd372dcd403fa321e21fc8272cb4bd
Signed-off-by: default avatarLarry Bassel <lbassel@codeaurora.org>
parent 33197d65
Loading
Loading
Loading
Loading
+0 −3
Original line number Original line Diff line number Diff line
@@ -152,11 +152,8 @@ int ion_heap_pages_zero(struct page **pages, int num_pages)
		 */
		 */
		for (k = 0; k < npages_to_vmap; k++) {
		for (k = 0; k < npages_to_vmap; k++) {
			void *p = kmap_atomic(pages[i + k]);
			void *p = kmap_atomic(pages[i + k]);
			phys_addr_t phys = page_to_phys(
				pages[i + k]);


			dmac_inv_range(p, p + PAGE_SIZE);
			dmac_inv_range(p, p + PAGE_SIZE);
			outer_inv_range(phys, phys + PAGE_SIZE);
			kunmap_atomic(p);
			kunmap_atomic(p);
		}
		}
		vunmap(ptr);
		vunmap(ptr);
+0 −51
Original line number Original line Diff line number Diff line
@@ -136,7 +136,6 @@ static int ion_no_pages_cache_ops(struct ion_client *client,
			unsigned int offset, unsigned int length,
			unsigned int offset, unsigned int length,
			unsigned int cmd)
			unsigned int cmd)
{
{
	void (*outer_cache_op)(phys_addr_t, phys_addr_t) = NULL;
	unsigned int size_to_vmap, total_size;
	unsigned int size_to_vmap, total_size;
	int i, j, ret;
	int i, j, ret;
	void *ptr = NULL;
	void *ptr = NULL;
@@ -167,20 +166,14 @@ static int ion_no_pages_cache_ops(struct ion_client *client,
					case ION_IOC_CLEAN_CACHES:
					case ION_IOC_CLEAN_CACHES:
						dmac_clean_range(ptr,
						dmac_clean_range(ptr,
							ptr + size_to_vmap);
							ptr + size_to_vmap);
						outer_cache_op =
							outer_clean_range;
						break;
						break;
					case ION_IOC_INV_CACHES:
					case ION_IOC_INV_CACHES:
						dmac_inv_range(ptr,
						dmac_inv_range(ptr,
							ptr + size_to_vmap);
							ptr + size_to_vmap);
						outer_cache_op =
							outer_inv_range;
						break;
						break;
					case ION_IOC_CLEAN_INV_CACHES:
					case ION_IOC_CLEAN_INV_CACHES:
						dmac_flush_range(ptr,
						dmac_flush_range(ptr,
							ptr + size_to_vmap);
							ptr + size_to_vmap);
						outer_cache_op =
							outer_flush_range;
						break;
						break;
					default:
					default:
						return -EINVAL;
						return -EINVAL;
@@ -201,65 +194,26 @@ static int ion_no_pages_cache_ops(struct ion_client *client,
		switch (cmd) {
		switch (cmd) {
		case ION_IOC_CLEAN_CACHES:
		case ION_IOC_CLEAN_CACHES:
			dmac_clean_range(vaddr, vaddr + length);
			dmac_clean_range(vaddr, vaddr + length);
			outer_cache_op = outer_clean_range;
			break;
			break;
		case ION_IOC_INV_CACHES:
		case ION_IOC_INV_CACHES:
			dmac_inv_range(vaddr, vaddr + length);
			dmac_inv_range(vaddr, vaddr + length);
			outer_cache_op = outer_inv_range;
			break;
			break;
		case ION_IOC_CLEAN_INV_CACHES:
		case ION_IOC_CLEAN_INV_CACHES:
			dmac_flush_range(vaddr, vaddr + length);
			dmac_flush_range(vaddr, vaddr + length);
			outer_cache_op = outer_flush_range;
			break;
			break;
		default:
		default:
			return -EINVAL;
			return -EINVAL;
		}
		}
	}
	}


	if (!outer_cache_op)
		return -EINVAL;

	outer_cache_op(buff_phys_start + offset,
		       buff_phys_start + offset + length);

	return 0;
	return 0;
}
}


#ifdef CONFIG_OUTER_CACHE
static void ion_pages_outer_cache_op(void (*op)(phys_addr_t, phys_addr_t),
				struct sg_table *table)
{
	unsigned long pstart;
	struct scatterlist *sg;
	int i;
	for_each_sg(table->sgl, sg, table->nents, i) {
		struct page *page = sg_page(sg);
		pstart = page_to_phys(page);
		/*
		 * If page -> phys is returning NULL, something
		 * has really gone wrong...
		 */
		if (!pstart) {
			WARN(1, "Could not translate virtual address to physical address\n");
			return;
		}
		op(pstart, pstart + PAGE_SIZE);
	}
}
#else
static void ion_pages_outer_cache_op(void (*op)(phys_addr_t, phys_addr_t),
					struct sg_table *table)
{

}
#endif

static int ion_pages_cache_ops(struct ion_client *client,
static int ion_pages_cache_ops(struct ion_client *client,
			struct ion_handle *handle,
			struct ion_handle *handle,
			void *vaddr, unsigned int offset, unsigned int length,
			void *vaddr, unsigned int offset, unsigned int length,
			unsigned int cmd)
			unsigned int cmd)
{
{
	void (*outer_cache_op)(phys_addr_t, phys_addr_t);
	struct sg_table *table = NULL;
	struct sg_table *table = NULL;


	table = ion_sg_table(client, handle);
	table = ion_sg_table(client, handle);
@@ -273,7 +227,6 @@ static int ion_pages_cache_ops(struct ion_client *client,
				table->nents, DMA_TO_DEVICE);
				table->nents, DMA_TO_DEVICE);
		else
		else
			dmac_clean_range(vaddr, vaddr + length);
			dmac_clean_range(vaddr, vaddr + length);
		outer_cache_op = outer_clean_range;
		break;
		break;
	case ION_IOC_INV_CACHES:
	case ION_IOC_INV_CACHES:
		if (!vaddr)
		if (!vaddr)
@@ -281,7 +234,6 @@ static int ion_pages_cache_ops(struct ion_client *client,
				table->nents, DMA_FROM_DEVICE);
				table->nents, DMA_FROM_DEVICE);
		else
		else
			dmac_inv_range(vaddr, vaddr + length);
			dmac_inv_range(vaddr, vaddr + length);
		outer_cache_op = outer_inv_range;
		break;
		break;
	case ION_IOC_CLEAN_INV_CACHES:
	case ION_IOC_CLEAN_INV_CACHES:
		if (!vaddr) {
		if (!vaddr) {
@@ -292,14 +244,11 @@ static int ion_pages_cache_ops(struct ion_client *client,
		} else {
		} else {
			dmac_flush_range(vaddr, vaddr + length);
			dmac_flush_range(vaddr, vaddr + length);
		}
		}
		outer_cache_op = outer_flush_range;
		break;
		break;
	default:
	default:
		return -EINVAL;
		return -EINVAL;
	}
	}


	ion_pages_outer_cache_op(outer_cache_op, table);

	return 0;
	return 0;
}
}


+0 −2
Original line number Original line Diff line number Diff line
@@ -163,8 +163,6 @@ static int secure_buffer_change_table(struct sg_table *table,
		 * in RAM
		 * in RAM
		 */
		 */
		dmac_flush_range(chunk_list, chunk_list + chunk_list_len);
		dmac_flush_range(chunk_list, chunk_list + chunk_list_len);
		outer_flush_range(chunk_list_phys,
				chunk_list_phys + chunk_list_len);


		ret = secure_buffer_change_chunk(virt_to_phys(chunk_list),
		ret = secure_buffer_change_chunk(virt_to_phys(chunk_list),
				nchunks, V2_CHUNK_SIZE, usage, lock);
				nchunks, V2_CHUNK_SIZE, usage, lock);