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

Commit 95ff8fc4 authored by Isaac J. Manjarres's avatar Isaac J. Manjarres Committed by Srinivasarao P
Browse files

ion: Improve ION allocation paths



Clean up some of the ION heap interfaces so that they are
more inline/uniform with respect to each other.

Change-Id: I4edabc2c8ccb533898540ceda1fd6aacc2e2e56a
Signed-off-by: default avatarIsaac J. Manjarres <isaacm@codeaurora.org>
Signed-off-by: default avatarSrinivasarao P <spathi@codeaurora.org>
parent 497e1f66
Loading
Loading
Loading
Loading
+15 −3
Original line number Diff line number Diff line
@@ -4,7 +4,7 @@
 * Copyright (C) Linaro 2012
 * Author: <benjamin.gaignard@linaro.org> for ST-Ericsson.
 *
 * Copyright (c) 2016-2019, The Linux Foundation. All rights reserved.
 * Copyright (c) 2016-2020, The Linux Foundation. All rights reserved.
 *
 * This software is licensed under the terms of the GNU General Public
 * License version 2, as published by the Free Software Foundation, and
@@ -55,6 +55,11 @@ static bool ion_cma_has_kernel_mapping(struct ion_heap *heap)
}

/* ION CMA heap operations functions */
static bool ion_heap_is_cma_heap_type(enum ion_heap_type type)
{
	return type == ION_HEAP_TYPE_DMA;
}

static int ion_cma_allocate(struct ion_heap *heap, struct ion_buffer *buffer,
			    unsigned long len,
			    unsigned long flags)
@@ -73,6 +78,13 @@ static int ion_cma_allocate(struct ion_heap *heap, struct ion_buffer *buffer,
	if (!info)
		return -ENOMEM;

	if (ion_heap_is_cma_heap_type(buffer->heap->type) &&
	    is_secure_allocation(buffer->flags)) {
		pr_err("%s: CMA heap doesn't support secure allocations\n",
		       __func__);
		return -EINVAL;
	}

	if (align > CONFIG_CMA_ALIGNMENT)
		align = CONFIG_CMA_ALIGNMENT;

@@ -94,7 +106,7 @@ static int ion_cma_allocate(struct ion_heap *heap, struct ion_buffer *buffer,
		if (!pages)
			goto free_info;

		if (!(flags & ION_FLAG_SECURE)) {
		if (hlos_accessible_buffer(buffer)) {
			if (PageHighMem(pages)) {
				unsigned long nr_clear_pages = nr_pages;
				struct page *page = pages;
@@ -113,7 +125,7 @@ static int ion_cma_allocate(struct ion_heap *heap, struct ion_buffer *buffer,
		}

		if (MAKE_ION_ALLOC_DMA_READY ||
		    (flags & ION_FLAG_SECURE) ||
		    (!hlos_accessible_buffer(buffer)) ||
		    !ion_buffer_cached(buffer))
			ion_pages_sync_for_device(dev, pages, size,
						  DMA_BIDIRECTIONAL);
+5 −0
Original line number Diff line number Diff line
@@ -36,6 +36,11 @@ bool is_secure_vmid_valid(int vmid)
		vmid == VMID_CP_DSP_EXT);
}

bool is_secure_allocation(unsigned long flags)
{
	return !!(flags & (ION_FLAGS_CP_MASK | ION_FLAG_SECURE));
}

int get_secure_vmid(unsigned long flags)
{
	if (flags & ION_FLAG_CP_TOUCH)
+3 −1
Original line number Diff line number Diff line
/* Copyright (c) 2017-2018, The Linux Foundation. All rights reserved.
/* Copyright (c) 2017-2018,2020, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
@@ -30,4 +30,6 @@ int ion_hyp_assign_from_flags(u64 base, u64 size, unsigned long flags);

bool hlos_accessible_buffer(struct ion_buffer *buffer);

bool is_secure_allocation(unsigned long flags);

#endif /* _ION_SECURE_UTIL_H */