mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-07 23:20:32 -04:00
gpu: ion: Modify reserve function for carveouts with no start address
This patch allows you to specify a heap that requires carveout memory but that doesn't specify a start address. Memblock_alloc will be called to find a location for these heaps. Signed-off-by: Rebecca Schultz Zavin <rebecca@android.com> [jstultz: modified patch to apply to staging directory] Signed-off-by: John Stultz <john.stultz@linaro.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
092c354b8a
commit
fa9bba557d
@@ -1343,16 +1343,35 @@ void ion_device_destroy(struct ion_device *dev)
|
||||
|
||||
void __init ion_reserve(struct ion_platform_data *data)
|
||||
{
|
||||
int i, ret;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < data->nr; i++) {
|
||||
if (data->heaps[i].size == 0)
|
||||
continue;
|
||||
ret = memblock_reserve(data->heaps[i].base,
|
||||
data->heaps[i].size);
|
||||
if (ret)
|
||||
pr_err("memblock reserve of %x@%lx failed\n",
|
||||
data->heaps[i].size,
|
||||
data->heaps[i].base);
|
||||
|
||||
if (data->heaps[i].base == 0) {
|
||||
phys_addr_t paddr;
|
||||
paddr = memblock_alloc_base(data->heaps[i].size,
|
||||
data->heaps[i].align,
|
||||
MEMBLOCK_ALLOC_ANYWHERE);
|
||||
if (!paddr) {
|
||||
pr_err("%s: error allocating memblock for "
|
||||
"heap %d\n",
|
||||
__func__, i);
|
||||
continue;
|
||||
}
|
||||
data->heaps[i].base = paddr;
|
||||
} else {
|
||||
int ret = memblock_reserve(data->heaps[i].base,
|
||||
data->heaps[i].size);
|
||||
if (ret)
|
||||
pr_err("memblock reserve of %x@%lx failed\n",
|
||||
data->heaps[i].size,
|
||||
data->heaps[i].base);
|
||||
}
|
||||
pr_info("%s: %s reserved base %lx size %d\n", __func__,
|
||||
data->heaps[i].name,
|
||||
data->heaps[i].base,
|
||||
data->heaps[i].size);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user