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

Commit 58dc6a1a authored by Laura Abbott's avatar Laura Abbott Committed by Stephen Boyd
Browse files

msm: memory: Add memblock_reserve bindings to dt reserve code



Drivers may wish to just reserve a block of memory in addition to
removing it or adding a size to a general pool. Update the DT
scanning code to scan for these bindings and reserve the memory.

Change-Id: Ic55c4271670a655f26a11d47a0d64cc525f9bfb2
Signed-off-by: default avatarLaura Abbott <lauraa@codeaurora.org>
parent dd86c18c
Loading
Loading
Loading
Loading
+28 −2
Original line number Diff line number Diff line
@@ -304,6 +304,8 @@ int __init dt_scan_for_memory_reserve(unsigned long node, const char *uname,
	unsigned long memory_remove_prop_length;
	unsigned long memory_size_prop_length;
	unsigned int *memory_size_prop;
	unsigned int *memory_reserve_prop;
	unsigned long memory_reserve_prop_length;
	unsigned int memory_size;
	unsigned int memory_start;
	int ret;
@@ -315,7 +317,11 @@ int __init dt_scan_for_memory_reserve(unsigned long node, const char *uname,
						"qcom,memblock-remove",
						&memory_remove_prop_length);

	if (memory_name_prop || memory_remove_prop) {
	memory_reserve_prop = of_get_flat_dt_prop(node,
						"qcom,memblock-reserve",
						&memory_reserve_prop_length);

	if (memory_name_prop || memory_remove_prop || memory_reserve_prop) {
		if (!check_for_compat(node))
			goto out;
	} else {
@@ -354,7 +360,7 @@ mem_remove:
	if (memory_remove_prop) {
		if (memory_remove_prop_length != (2*sizeof(unsigned int))) {
			WARN(1, "Memory remove malformed\n");
			goto out;
			goto mem_reserve;
		}

		memory_start = be32_to_cpu(memory_remove_prop[0]);
@@ -369,6 +375,26 @@ mem_remove:
				memory_start, memory_start+memory_size);
	}

mem_reserve:

	if (memory_reserve_prop) {
		if (memory_reserve_prop_length != (2*sizeof(unsigned int))) {
			WARN(1, "Memory reserve malformed\n");
			goto out;
		}

		memory_start = be32_to_cpu(memory_reserve_prop[0]);
		memory_size = be32_to_cpu(memory_reserve_prop[1]);

		ret = memblock_reserve(memory_start, memory_size);
		if (ret)
			WARN(1, "Failed to reserve memory %x-%x\n",
				memory_start, memory_start+memory_size);
		else
			pr_info("Node %s memblock_reserve memory %x-%x\n",
				uname, memory_start, memory_start+memory_size);
	}

out:
	return 0;
}