summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLucas Stach <l.stach@pengutronix.de>2017-09-07 15:36:57 +0200
committerLucas Stach <l.stach@pengutronix.de>2017-10-10 11:35:29 +0200
commit1a540490e919bd64a9be35fca5147bbb7b2ac166 (patch)
tree25c5e06ceaab195dc8f6f563d6d2c11eeeb1f16e
parent87ceb3756030d284c1e8424877a34b5452906549 (diff)
downloadlinux-stable-1a540490e919bd64a9be35fca5147bbb7b2ac166.tar.gz
linux-stable-1a540490e919bd64a9be35fca5147bbb7b2ac166.tar.bz2
linux-stable-1a540490e919bd64a9be35fca5147bbb7b2ac166.zip
drm/etnaviv: iommuv1: fold pagetable alloc and free into caller
Those functions are simple enough to fold them into the calling function. This also fixes a correctness issue, as the alloc/free functions didn't specifiy the device the memory was allocated for. Signed-off-by: Lucas Stach <l.stach@pengutronix.de> Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de> Reviewed-By: Wladimir J. van der Laan <laanwj@gmail.com>
-rw-r--r--drivers/gpu/drm/etnaviv/etnaviv_iommu.c31
1 files changed, 10 insertions, 21 deletions
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_iommu.c b/drivers/gpu/drm/etnaviv/etnaviv_iommu.c
index f804c0aaa7a2..522f6822abee 100644
--- a/drivers/gpu/drm/etnaviv/etnaviv_iommu.c
+++ b/drivers/gpu/drm/etnaviv/etnaviv_iommu.c
@@ -50,22 +50,6 @@ static struct etnaviv_iommu_domain *to_etnaviv_domain(struct iommu_domain *domai
return container_of(domain, struct etnaviv_iommu_domain, domain);
}
-static int pgtable_alloc(struct etnaviv_iommu_domain_pgtable *pgtable,
- size_t size)
-{
- pgtable->pgtable = dma_alloc_coherent(NULL, size, &pgtable->paddr, GFP_KERNEL);
- if (!pgtable->pgtable)
- return -ENOMEM;
-
- return 0;
-}
-
-static void pgtable_free(struct etnaviv_iommu_domain_pgtable *pgtable,
- size_t size)
-{
- dma_free_coherent(NULL, size, pgtable->pgtable, pgtable->paddr);
-}
-
static void pgtable_write(struct etnaviv_iommu_domain_pgtable *pgtable,
unsigned long iova, phys_addr_t paddr)
{
@@ -78,7 +62,7 @@ static void pgtable_write(struct etnaviv_iommu_domain_pgtable *pgtable,
static int __etnaviv_iommu_init(struct etnaviv_iommu_domain *etnaviv_domain)
{
u32 *p;
- int ret, i;
+ int i;
etnaviv_domain->bad_page_cpu = dma_alloc_coherent(etnaviv_domain->dev,
SZ_4K,
@@ -91,12 +75,15 @@ static int __etnaviv_iommu_init(struct etnaviv_iommu_domain *etnaviv_domain)
for (i = 0; i < SZ_4K / 4; i++)
*p++ = 0xdead55aa;
- ret = pgtable_alloc(&etnaviv_domain->pgtable, PT_SIZE);
- if (ret < 0) {
+ etnaviv_domain->pgtable.pgtable =
+ dma_alloc_coherent(etnaviv_domain->dev, PT_SIZE,
+ &etnaviv_domain->pgtable.paddr,
+ GFP_KERNEL);
+ if (!etnaviv_domain->pgtable.pgtable) {
dma_free_coherent(etnaviv_domain->dev, SZ_4K,
etnaviv_domain->bad_page_cpu,
etnaviv_domain->bad_page_dma);
- return ret;
+ return -ENOMEM;
}
for (i = 0; i < PT_ENTRIES; i++)
@@ -112,7 +99,9 @@ static void etnaviv_domain_free(struct iommu_domain *domain)
{
struct etnaviv_iommu_domain *etnaviv_domain = to_etnaviv_domain(domain);
- pgtable_free(&etnaviv_domain->pgtable, PT_SIZE);
+ dma_free_coherent(etnaviv_domain->dev, PT_SIZE,
+ etnaviv_domain->pgtable.pgtable,
+ etnaviv_domain->pgtable.paddr);
dma_free_coherent(etnaviv_domain->dev, SZ_4K,
etnaviv_domain->bad_page_cpu,