summaryrefslogtreecommitdiffstats
path: root/drivers/gpu
diff options
context:
space:
mode:
authorDeepak Nibade <dnibade@nvidia.com>2017-07-05 06:11:15 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2017-07-07 10:05:38 -0400
commitd479a781c68ab20ff27ae6d1a6eb6e15eb51fb88 (patch)
tree1a7fb1327e5ad9dc04ecb013095a53b053b2e88b /drivers/gpu
parent8bdb74786cd58746a6d9c361f8383fdfb43c6c98 (diff)
gpu: nvgpu: use coherent aperture for coherent buffers
Use sysmem_coherent aperture if the buffer mappings are requested to be IO coherent. Use sysmem_noncoherent aperture otherwise. This is implemented by adding a new coherent field to the GMMU attrs struct. Jira GPUT19X-17 Bug 1651331 Bug 200283998 Change-Id: I5cfb71b5913d4db50ebf10331b19f5a4216456bf Signed-off-by: Deepak Nibade <dnibade@nvidia.com> Reviewed-on: https://git-master/r/1514438 GVS: Gerrit_Virtual_Submit Reviewed-by: Vijayakumar Subbu <vsubbu@nvidia.com>
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/nvgpu/common/mm/gmmu.c2
-rw-r--r--drivers/gpu/nvgpu/gp10b/mm_gp10b.c9
-rw-r--r--drivers/gpu/nvgpu/include/nvgpu/gmmu.h2
3 files changed, 10 insertions, 3 deletions
diff --git a/drivers/gpu/nvgpu/common/mm/gmmu.c b/drivers/gpu/nvgpu/common/mm/gmmu.c
index 602dfb3b..55fbcd3f 100644
--- a/drivers/gpu/nvgpu/common/mm/gmmu.c
+++ b/drivers/gpu/nvgpu/common/mm/gmmu.c
@@ -747,6 +747,7 @@ u64 gk20a_locked_gmmu_map(struct vm_gk20a *vm,
747 .rw_flag = rw_flag, 747 .rw_flag = rw_flag,
748 .sparse = sparse, 748 .sparse = sparse,
749 .priv = priv, 749 .priv = priv,
750 .coherent = flags & NVGPU_AS_MAP_BUFFER_FLAGS_IO_COHERENT,
750 .valid = !(flags & NVGPU_AS_MAP_BUFFER_FLAGS_UNMAPPED_PTE), 751 .valid = !(flags & NVGPU_AS_MAP_BUFFER_FLAGS_UNMAPPED_PTE),
751 .aperture = aperture 752 .aperture = aperture
752 }; 753 };
@@ -805,6 +806,7 @@ void gk20a_locked_gmmu_unmap(struct vm_gk20a *vm,
805 .rw_flag = rw_flag, 806 .rw_flag = rw_flag,
806 .sparse = sparse, 807 .sparse = sparse,
807 .priv = 0, 808 .priv = 0,
809 .coherent = 0,
808 .valid = 0, 810 .valid = 0,
809 .aperture = APERTURE_INVALID, 811 .aperture = APERTURE_INVALID,
810 }; 812 };
diff --git a/drivers/gpu/nvgpu/gp10b/mm_gp10b.c b/drivers/gpu/nvgpu/gp10b/mm_gp10b.c
index 590dd960..bdc30143 100644
--- a/drivers/gpu/nvgpu/gp10b/mm_gp10b.c
+++ b/drivers/gpu/nvgpu/gp10b/mm_gp10b.c
@@ -230,9 +230,12 @@ static void __update_pte(struct vm_gk20a *vm,
230 u32 pte_addr = attrs->aperture == APERTURE_SYSMEM ? 230 u32 pte_addr = attrs->aperture == APERTURE_SYSMEM ?
231 gmmu_new_pte_address_sys_f(phys_shifted) : 231 gmmu_new_pte_address_sys_f(phys_shifted) :
232 gmmu_new_pte_address_vid_f(phys_shifted); 232 gmmu_new_pte_address_vid_f(phys_shifted);
233 u32 pte_tgt = __nvgpu_aperture_mask(g, attrs->aperture, 233 u32 pte_tgt = __nvgpu_aperture_mask(g,
234 gmmu_new_pte_aperture_sys_mem_ncoh_f(), 234 attrs->aperture,
235 gmmu_new_pte_aperture_video_memory_f()); 235 attrs->coherent ?
236 gmmu_new_pte_aperture_sys_mem_coh_f() :
237 gmmu_new_pte_aperture_sys_mem_ncoh_f(),
238 gmmu_new_pte_aperture_video_memory_f());
236 239
237 pte_w[0] = pte_valid | pte_addr | pte_tgt; 240 pte_w[0] = pte_valid | pte_addr | pte_tgt;
238 241
diff --git a/drivers/gpu/nvgpu/include/nvgpu/gmmu.h b/drivers/gpu/nvgpu/include/nvgpu/gmmu.h
index eff87c31..47af2f75 100644
--- a/drivers/gpu/nvgpu/include/nvgpu/gmmu.h
+++ b/drivers/gpu/nvgpu/include/nvgpu/gmmu.h
@@ -149,6 +149,7 @@ struct nvgpu_gmmu_pd {
149 * rw_flag: Flag from enum gk20a_mem_rw_flag 149 * rw_flag: Flag from enum gk20a_mem_rw_flag
150 * sparse: Set if the mapping should be sparse. 150 * sparse: Set if the mapping should be sparse.
151 * priv: Privilidged mapping. 151 * priv: Privilidged mapping.
152 * coherent: Set if the mapping should be IO coherent.
152 * valid: Set if the PTE should be marked valid. 153 * valid: Set if the PTE should be marked valid.
153 * aperture: VIDMEM or SYSMEM. 154 * aperture: VIDMEM or SYSMEM.
154 * debug: When set print debugging info. 155 * debug: When set print debugging info.
@@ -166,6 +167,7 @@ struct nvgpu_gmmu_attrs {
166 int rw_flag; 167 int rw_flag;
167 bool sparse; 168 bool sparse;
168 bool priv; 169 bool priv;
170 bool coherent;
169 bool valid; 171 bool valid;
170 enum nvgpu_aperture aperture; 172 enum nvgpu_aperture aperture;
171 bool debug; 173 bool debug;