diff options
Diffstat (limited to 'drivers/gpu/host1x/dev.c')
| -rw-r--r-- | drivers/gpu/host1x/dev.c | 14 | 
1 files changed, 13 insertions, 1 deletions
diff --git a/drivers/gpu/host1x/dev.c b/drivers/gpu/host1x/dev.c index 03db71173f5d..d88073e7d22d 100644 --- a/drivers/gpu/host1x/dev.c +++ b/drivers/gpu/host1x/dev.c @@ -218,15 +218,22 @@ static int host1x_probe(struct platform_device *pdev)  		return err;  	} +	if (IS_ENABLED(CONFIG_TEGRA_HOST1X_FIREWALL)) +		goto skip_iommu; +  	host->group = iommu_group_get(&pdev->dev);  	if (host->group) {  		struct iommu_domain_geometry *geometry;  		unsigned long order; +		err = iova_cache_get(); +		if (err < 0) +			goto put_group; +  		host->domain = iommu_domain_alloc(&platform_bus_type);  		if (!host->domain) {  			err = -ENOMEM; -			goto put_group; +			goto put_cache;  		}  		err = iommu_attach_group(host->domain, host->group); @@ -234,6 +241,7 @@ static int host1x_probe(struct platform_device *pdev)  			if (err == -ENODEV) {  				iommu_domain_free(host->domain);  				host->domain = NULL; +				iova_cache_put();  				iommu_group_put(host->group);  				host->group = NULL;  				goto skip_iommu; @@ -308,6 +316,9 @@ fail_detach_device:  fail_free_domain:  	if (host->domain)  		iommu_domain_free(host->domain); +put_cache: +	if (host->group) +		iova_cache_put();  put_group:  	iommu_group_put(host->group); @@ -328,6 +339,7 @@ static int host1x_remove(struct platform_device *pdev)  		put_iova_domain(&host->iova);  		iommu_detach_group(host->domain, host->group);  		iommu_domain_free(host->domain); +		iova_cache_put();  		iommu_group_put(host->group);  	}  |