aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/iommu/tegra-gart.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/iommu/tegra-gart.c')
-rw-r--r--drivers/iommu/tegra-gart.c27
1 files changed, 6 insertions, 21 deletions
diff --git a/drivers/iommu/tegra-gart.c b/drivers/iommu/tegra-gart.c
index 108c0e9c24d9..dba1a9fd5070 100644
--- a/drivers/iommu/tegra-gart.c
+++ b/drivers/iommu/tegra-gart.c
@@ -252,7 +252,7 @@ static int gart_iommu_map(struct iommu_domain *domain, unsigned long iova,
252 spin_lock_irqsave(&gart->pte_lock, flags); 252 spin_lock_irqsave(&gart->pte_lock, flags);
253 pfn = __phys_to_pfn(pa); 253 pfn = __phys_to_pfn(pa);
254 if (!pfn_valid(pfn)) { 254 if (!pfn_valid(pfn)) {
255 dev_err(gart->dev, "Invalid page: %08x\n", pa); 255 dev_err(gart->dev, "Invalid page: %pa\n", &pa);
256 spin_unlock_irqrestore(&gart->pte_lock, flags); 256 spin_unlock_irqrestore(&gart->pte_lock, flags);
257 return -EINVAL; 257 return -EINVAL;
258 } 258 }
@@ -295,8 +295,8 @@ static phys_addr_t gart_iommu_iova_to_phys(struct iommu_domain *domain,
295 295
296 pa = (pte & GART_PAGE_MASK); 296 pa = (pte & GART_PAGE_MASK);
297 if (!pfn_valid(__phys_to_pfn(pa))) { 297 if (!pfn_valid(__phys_to_pfn(pa))) {
298 dev_err(gart->dev, "No entry for %08llx:%08x\n", 298 dev_err(gart->dev, "No entry for %08llx:%pa\n",
299 (unsigned long long)iova, pa); 299 (unsigned long long)iova, &pa);
300 gart_dump_table(gart); 300 gart_dump_table(gart);
301 return -EINVAL; 301 return -EINVAL;
302 } 302 }
@@ -351,7 +351,6 @@ static int tegra_gart_probe(struct platform_device *pdev)
351 struct gart_device *gart; 351 struct gart_device *gart;
352 struct resource *res, *res_remap; 352 struct resource *res, *res_remap;
353 void __iomem *gart_regs; 353 void __iomem *gart_regs;
354 int err;
355 struct device *dev = &pdev->dev; 354 struct device *dev = &pdev->dev;
356 355
357 if (gart_handle) 356 if (gart_handle)
@@ -376,8 +375,7 @@ static int tegra_gart_probe(struct platform_device *pdev)
376 gart_regs = devm_ioremap(dev, res->start, resource_size(res)); 375 gart_regs = devm_ioremap(dev, res->start, resource_size(res));
377 if (!gart_regs) { 376 if (!gart_regs) {
378 dev_err(dev, "failed to remap GART registers\n"); 377 dev_err(dev, "failed to remap GART registers\n");
379 err = -ENXIO; 378 return -ENXIO;
380 goto fail;
381 } 379 }
382 380
383 gart->dev = &pdev->dev; 381 gart->dev = &pdev->dev;
@@ -391,8 +389,7 @@ static int tegra_gart_probe(struct platform_device *pdev)
391 gart->savedata = vmalloc(sizeof(u32) * gart->page_count); 389 gart->savedata = vmalloc(sizeof(u32) * gart->page_count);
392 if (!gart->savedata) { 390 if (!gart->savedata) {
393 dev_err(dev, "failed to allocate context save area\n"); 391 dev_err(dev, "failed to allocate context save area\n");
394 err = -ENOMEM; 392 return -ENOMEM;
395 goto fail;
396 } 393 }
397 394
398 platform_set_drvdata(pdev, gart); 395 platform_set_drvdata(pdev, gart);
@@ -401,32 +398,20 @@ static int tegra_gart_probe(struct platform_device *pdev)
401 gart_handle = gart; 398 gart_handle = gart;
402 bus_set_iommu(&platform_bus_type, &gart_iommu_ops); 399 bus_set_iommu(&platform_bus_type, &gart_iommu_ops);
403 return 0; 400 return 0;
404
405fail:
406 if (gart_regs)
407 devm_iounmap(dev, gart_regs);
408 if (gart && gart->savedata)
409 vfree(gart->savedata);
410 devm_kfree(dev, gart);
411 return err;
412} 401}
413 402
414static int tegra_gart_remove(struct platform_device *pdev) 403static int tegra_gart_remove(struct platform_device *pdev)
415{ 404{
416 struct gart_device *gart = platform_get_drvdata(pdev); 405 struct gart_device *gart = platform_get_drvdata(pdev);
417 struct device *dev = gart->dev;
418 406
419 writel(0, gart->regs + GART_CONFIG); 407 writel(0, gart->regs + GART_CONFIG);
420 if (gart->savedata) 408 if (gart->savedata)
421 vfree(gart->savedata); 409 vfree(gart->savedata);
422 if (gart->regs)
423 devm_iounmap(dev, gart->regs);
424 devm_kfree(dev, gart);
425 gart_handle = NULL; 410 gart_handle = NULL;
426 return 0; 411 return 0;
427} 412}
428 413
429const struct dev_pm_ops tegra_gart_pm_ops = { 414static const struct dev_pm_ops tegra_gart_pm_ops = {
430 .suspend = tegra_gart_suspend, 415 .suspend = tegra_gart_suspend,
431 .resume = tegra_gart_resume, 416 .resume = tegra_gart_resume,
432}; 417};