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

Commit 8e5174c5 authored by Greg Hackmann's avatar Greg Hackmann Committed by John Stultz
Browse files

video: adf: memblock: map buffer for dma



Change-Id: I4df13c8b45b57fd0594b5e7bf351a4da33a8cb11
Signed-off-by: default avatarGreg Hackmann <ghackmann@google.com>
parent 5bd73006
Loading
Loading
Loading
Loading
+13 −3
Original line number Diff line number Diff line
@@ -28,7 +28,7 @@ static struct sg_table *adf_memblock_map(struct dma_buf_attachment *attach,
	unsigned long pfn = PFN_DOWN(pdata->base);
	struct page *page = pfn_to_page(pfn);
	struct sg_table *table;
	int ret;
	int nents, ret;

	table = kzalloc(sizeof(*table), GFP_KERNEL);
	if (!table)
@@ -36,12 +36,21 @@ static struct sg_table *adf_memblock_map(struct dma_buf_attachment *attach,

	ret = sg_alloc_table(table, 1, GFP_KERNEL);
	if (ret < 0)
		goto err;
		goto err_alloc;

	sg_set_page(table->sgl, page, attach->dmabuf->size, 0);

	nents = dma_map_sg(attach->dev, table->sgl, 1, direction);
	if (!nents) {
		ret = -EINVAL;
		goto err_map;
	}

	return table;

err:
err_map:
	sg_free_table(table);
err_alloc:
	kfree(table);
	return ERR_PTR(ret);
}
@@ -49,6 +58,7 @@ err:
static void adf_memblock_unmap(struct dma_buf_attachment *attach,
		struct sg_table *table, enum dma_data_direction direction)
{
	dma_unmap_sg(attach->dev, table->sgl, 1, direction);
	sg_free_table(table);
}