diff options
author | Deepak Nibade <dnibade@nvidia.com> | 2017-07-05 06:11:15 -0400 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2017-07-07 10:05:38 -0400 |
commit | d479a781c68ab20ff27ae6d1a6eb6e15eb51fb88 (patch) | |
tree | 1a7fb1327e5ad9dc04ecb013095a53b053b2e88b /drivers/gpu | |
parent | 8bdb74786cd58746a6d9c361f8383fdfb43c6c98 (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.c | 2 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gp10b/mm_gp10b.c | 9 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/include/nvgpu/gmmu.h | 2 |
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; |