summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/common
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/nvgpu/common')
-rw-r--r--drivers/gpu/nvgpu/common/linux/module.c8
-rw-r--r--drivers/gpu/nvgpu/common/linux/nvgpu_mem.c3
-rw-r--r--drivers/gpu/nvgpu/common/linux/pci.c6
-rw-r--r--drivers/gpu/nvgpu/common/mm/gmmu.c7
4 files changed, 20 insertions, 4 deletions
diff --git a/drivers/gpu/nvgpu/common/linux/module.c b/drivers/gpu/nvgpu/common/linux/module.c
index b103fcea..52348db0 100644
--- a/drivers/gpu/nvgpu/common/linux/module.c
+++ b/drivers/gpu/nvgpu/common/linux/module.c
@@ -20,6 +20,7 @@
20#include <linux/of.h> 20#include <linux/of.h>
21#include <linux/of_device.h> 21#include <linux/of_device.h>
22#include <linux/of_platform.h> 22#include <linux/of_platform.h>
23#include <linux/of_address.h>
23#include <linux/interrupt.h> 24#include <linux/interrupt.h>
24#include <linux/pm_runtime.h> 25#include <linux/pm_runtime.h>
25#include <linux/reset.h> 26#include <linux/reset.h>
@@ -1107,6 +1108,7 @@ static int gk20a_probe(struct platform_device *dev)
1107 struct gk20a *gk20a; 1108 struct gk20a *gk20a;
1108 int err; 1109 int err;
1109 struct gk20a_platform *platform = NULL; 1110 struct gk20a_platform *platform = NULL;
1111 struct device_node *np;
1110 1112
1111 if (dev->dev.of_node) { 1113 if (dev->dev.of_node) {
1112 const struct of_device_id *match; 1114 const struct of_device_id *match;
@@ -1206,6 +1208,12 @@ static int gk20a_probe(struct platform_device *dev)
1206 1208
1207 gk20a->mm.has_physical_mode = !nvgpu_is_hypervisor_mode(gk20a); 1209 gk20a->mm.has_physical_mode = !nvgpu_is_hypervisor_mode(gk20a);
1208 1210
1211 np = nvgpu_get_node(gk20a);
1212 if (of_dma_is_coherent(np)) {
1213 __nvgpu_set_enabled(gk20a, NVGPU_USE_COHERENT_SYSMEM, true);
1214 __nvgpu_set_enabled(gk20a, NVGPU_SUPPORT_IO_COHERENCE, true);
1215 }
1216
1209 return 0; 1217 return 0;
1210 1218
1211return_err: 1219return_err:
diff --git a/drivers/gpu/nvgpu/common/linux/nvgpu_mem.c b/drivers/gpu/nvgpu/common/linux/nvgpu_mem.c
index 206b83e1..64f638e2 100644
--- a/drivers/gpu/nvgpu/common/linux/nvgpu_mem.c
+++ b/drivers/gpu/nvgpu/common/linux/nvgpu_mem.c
@@ -61,7 +61,8 @@ u32 nvgpu_aperture_mask(struct gk20a *g, struct nvgpu_mem *mem,
61int nvgpu_mem_begin(struct gk20a *g, struct nvgpu_mem *mem) 61int nvgpu_mem_begin(struct gk20a *g, struct nvgpu_mem *mem)
62{ 62{
63 void *cpu_va; 63 void *cpu_va;
64 pgprot_t prot = nvgpu_is_enabled(g, NVGPU_DMA_COHERENT) ? PAGE_KERNEL : 64 pgprot_t prot = nvgpu_is_enabled(g, NVGPU_USE_COHERENT_SYSMEM) ?
65 PAGE_KERNEL :
65 pgprot_writecombine(PAGE_KERNEL); 66 pgprot_writecombine(PAGE_KERNEL);
66 67
67 if (mem->aperture != APERTURE_SYSMEM || g->mm.force_pramin) 68 if (mem->aperture != APERTURE_SYSMEM || g->mm.force_pramin)
diff --git a/drivers/gpu/nvgpu/common/linux/pci.c b/drivers/gpu/nvgpu/common/linux/pci.c
index 6ebe8dda..4ba839c4 100644
--- a/drivers/gpu/nvgpu/common/linux/pci.c
+++ b/drivers/gpu/nvgpu/common/linux/pci.c
@@ -17,13 +17,13 @@
17#include <linux/pci.h> 17#include <linux/pci.h>
18#include <linux/interrupt.h> 18#include <linux/interrupt.h>
19#include <linux/pm_runtime.h> 19#include <linux/pm_runtime.h>
20#include <linux/of_platform.h>
21#include <linux/of_address.h>
20 22
21#include <nvgpu/nvgpu_common.h> 23#include <nvgpu/nvgpu_common.h>
22#include <nvgpu/kmem.h> 24#include <nvgpu/kmem.h>
23#include <nvgpu/enabled.h> 25#include <nvgpu/enabled.h>
24#include <nvgpu/nvlink.h> 26#include <nvgpu/nvlink.h>
25#include <linux/of_platform.h>
26#include <linux/of_address.h>
27 27
28#include "gk20a/gk20a.h" 28#include "gk20a/gk20a.h"
29#include "clk/clk.h" 29#include "clk/clk.h"
@@ -647,7 +647,7 @@ static int nvgpu_pci_probe(struct pci_dev *pdev,
647 np = nvgpu_get_node(g); 647 np = nvgpu_get_node(g);
648 648
649 if (of_dma_is_coherent(np)) { 649 if (of_dma_is_coherent(np)) {
650 __nvgpu_set_enabled(g, NVGPU_DMA_COHERENT, true); 650 __nvgpu_set_enabled(g, NVGPU_USE_COHERENT_SYSMEM, true);
651 __nvgpu_set_enabled(g, NVGPU_SUPPORT_IO_COHERENCE, true); 651 __nvgpu_set_enabled(g, NVGPU_SUPPORT_IO_COHERENCE, true);
652 } 652 }
653 653
diff --git a/drivers/gpu/nvgpu/common/mm/gmmu.c b/drivers/gpu/nvgpu/common/mm/gmmu.c
index ffac324c..5abf5951 100644
--- a/drivers/gpu/nvgpu/common/mm/gmmu.c
+++ b/drivers/gpu/nvgpu/common/mm/gmmu.c
@@ -79,6 +79,13 @@ static u64 __nvgpu_gmmu_map(struct vm_gk20a *vm,
79 if (!sgt) 79 if (!sgt)
80 return -ENOMEM; 80 return -ENOMEM;
81 81
82 /*
83 * If the GPU is IO coherent and the DMA API is giving us IO coherent
84 * CPU mappings then we gotta make sure we use the IO coherent aperture.
85 */
86 if (nvgpu_is_enabled(g, NVGPU_USE_COHERENT_SYSMEM))
87 flags |= NVGPU_VM_MAP_IO_COHERENT;
88
82 nvgpu_mutex_acquire(&vm->update_gmmu_lock); 89 nvgpu_mutex_acquire(&vm->update_gmmu_lock);
83 vaddr = g->ops.mm.gmmu_map(vm, addr, 90 vaddr = g->ops.mm.gmmu_map(vm, addr,
84 sgt, /* sg list */ 91 sgt, /* sg list */