diff options
Diffstat (limited to 'drivers/iommu/tegra-gart.c')
-rw-r--r-- | drivers/iommu/tegra-gart.c | 27 |
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 | |||
405 | fail: | ||
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 | ||
414 | static int tegra_gart_remove(struct platform_device *pdev) | 403 | static 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 | ||
429 | const struct dev_pm_ops tegra_gart_pm_ops = { | 414 | static 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 | }; |