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

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

Merge "qseecom: use of_reserved_mem_lookup to get heap base and size"

parents a84f2264 e0a2c2d4
Loading
Loading
Loading
Loading
+16 −8
Original line number Diff line number Diff line
@@ -46,6 +46,7 @@
#include <linux/cma.h>
#include <linux/of_platform.h>
#include <linux/interconnect.h>
#include <linux/of_reserved_mem.h>
#include <linux/qtee_shmbridge.h>

#define QSEECOM_DEV			"qseecom"
@@ -9416,7 +9417,8 @@ static int qseecom_register_heap_shmbridge(uint32_t heapid, uint64_t *handle)
	phys_addr_t heap_pa = 0;
	size_t heap_size = 0;
	struct device *ion_dev = NULL;
	struct cma *cma = NULL;
	struct device_node *node = NULL;
	struct reserved_mem *rmem = NULL;
	uint32_t ns_vmids[] = {VMID_HLOS};
	uint32_t ns_vm_perms[] = {PERM_READ | PERM_WRITE};
	int ret = 0;
@@ -9429,15 +9431,21 @@ static int qseecom_register_heap_shmbridge(uint32_t heapid, uint64_t *handle)
		return ret;
	}

	cma = dev_get_cma_area(ion_dev);
	if (!cma) {
		pr_err("Failed to get Heap %d info\n", heapid);
		return -ENODEV;
	node = of_parse_phandle(ion_dev->of_node, "memory-region", 0);
	if (!node) {
		pr_err("unable to parse memory-region of heap %d\n", heapid);
		return -EINVAL;
	}
	rmem = of_reserved_mem_lookup(node);
	of_node_put(node);
	if (!rmem) {
		pr_err("unable to acquire memory-region of heap %d\n", heapid);
		return -EINVAL;
	}
	heap_pa = cma_get_base(cma);
	heap_size = (size_t)cma_get_size(cma);
	heap_pa = rmem->base;
	heap_size = (size_t)rmem->size;

	pr_warn("get heap %d info: shmbridge created\n", heapid);
	pr_debug("get heap %d info: shmbridge created\n", heapid);
	return qtee_shmbridge_register(heap_pa,
			heap_size, ns_vmids, ns_vm_perms, 1,
			PERM_READ | PERM_WRITE, handle);