video: tegra: nvmap: Make IOMMU/IOVMM selectable in Kconfig
Hiroshi DOYU [Tue, 21 Feb 2012 14:47:08 +0000 (16:47 +0200)]
This patch allows nvmap to use the standard IOMMU API as its backend
engine instead of the legacy tegra IOVMM by Kconfig.

Enable TEGRA_IOMMU_{GART,SMMU} under IOMMU in config, and it
automatically disables IOVMM, instead.

Change-Id: I71112ef8072591aac4a93075623ca31c8851a960
Signed-off-by: Hiroshi DOYU <hdoyu@nvidia.com>
Reviewed-on: http://git-master/r/114217
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Krishna Reddy <vdumpa@nvidia.com>

drivers/video/tegra/Kconfig
drivers/video/tegra/nvmap/nvmap_dev.c

index 7cbaa82..c9c63fe 100644 (file)
@@ -60,6 +60,7 @@ config TEGRA_DC_EXTENSIONS
 
 config TEGRA_NVMAP
        bool "Tegra GPU memory management driver (nvmap)"
+       select ARM_DMA_USE_IOMMU if IOMMU_API
        default y
        help
          Say Y here to include the memory management driver for the Tegra
@@ -67,7 +68,7 @@ config TEGRA_NVMAP
 
 config NVMAP_RECLAIM_UNPINNED_VM
        bool "Virtualize IOVMM memory in nvmap"
-       depends on TEGRA_NVMAP && TEGRA_IOVMM
+       depends on TEGRA_NVMAP && (TEGRA_IOVMM || IOMMU_API)
        default y
        help
          Say Y here to enable nvmap to reclaim I/O virtual memory after
@@ -86,7 +87,7 @@ config NVMAP_ALLOW_SYSMEM
 
 config NVMAP_HIGHMEM_ONLY
        bool "Use only HIGHMEM for nvmap"
-       depends on TEGRA_NVMAP && (NVMAP_ALLOW_SYSMEM || TEGRA_IOVMM) && HIGHMEM
+       depends on TEGRA_NVMAP && (NVMAP_ALLOW_SYSMEM || TEGRA_IOVMM || IOMMU_API) && HIGHMEM
        default n
        help
          Say Y here to restrict nvmap system memory allocations (both
@@ -152,7 +153,7 @@ config TEGRA_DSI
 
 config NVMAP_CONVERT_CARVEOUT_TO_IOVMM
        bool "Convert carveout to IOVMM"
-       depends on TEGRA_NVMAP && TEGRA_IOVMM_SMMU
+       depends on TEGRA_NVMAP &&  (TEGRA_IOVMM_SMMU || IOMMU_API)
        default y
        help
          Say Y here to force to convert carveout memory requests to
index 416b7c5..450d8aa 100644 (file)
@@ -1193,7 +1193,7 @@ static int nvmap_probe(struct platform_device *pdev)
        dev->iovmm_master.iovmm =
                tegra_iovmm_alloc_client(&pdev->dev, NULL,
                        &(dev->dev_user));
-#ifdef CONFIG_TEGRA_IOVMM
+#if defined(CONFIG_TEGRA_IOVMM) || defined(CONFIG_IOMMU_API)
        if (!dev->iovmm_master.iovmm) {
                e = PTR_ERR(dev->iovmm_master.iovmm);
                dev_err(&pdev->dev, "couldn't create iovmm client\n");