diff options
Diffstat (limited to 'drivers/gpu/nvgpu/common')
4 files changed, 26 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/common/linux/vgpu/gm20b/vgpu_hal_gm20b.c b/drivers/gpu/nvgpu/common/linux/vgpu/gm20b/vgpu_hal_gm20b.c index 0e560981..6f50dbb8 100644 --- a/drivers/gpu/nvgpu/common/linux/vgpu/gm20b/vgpu_hal_gm20b.c +++ b/drivers/gpu/nvgpu/common/linux/vgpu/gm20b/vgpu_hal_gm20b.c | |||
@@ -195,6 +195,7 @@ static const struct gpu_ops vgpu_gm20b_ops = { | |||
195 | gm20b_fb_set_use_full_comp_tag_line, | 195 | gm20b_fb_set_use_full_comp_tag_line, |
196 | .compression_page_size = gm20b_fb_compression_page_size, | 196 | .compression_page_size = gm20b_fb_compression_page_size, |
197 | .compressible_page_size = gm20b_fb_compressible_page_size, | 197 | .compressible_page_size = gm20b_fb_compressible_page_size, |
198 | .compression_align_mask = gm20b_fb_compression_align_mask, | ||
198 | .vpr_info_fetch = gm20b_fb_vpr_info_fetch, | 199 | .vpr_info_fetch = gm20b_fb_vpr_info_fetch, |
199 | .dump_vpr_wpr_info = gm20b_fb_dump_vpr_wpr_info, | 200 | .dump_vpr_wpr_info = gm20b_fb_dump_vpr_wpr_info, |
200 | .read_wpr_info = gm20b_fb_read_wpr_info, | 201 | .read_wpr_info = gm20b_fb_read_wpr_info, |
diff --git a/drivers/gpu/nvgpu/common/linux/vgpu/gp10b/vgpu_hal_gp10b.c b/drivers/gpu/nvgpu/common/linux/vgpu/gp10b/vgpu_hal_gp10b.c index acd0ad5d..7c376396 100644 --- a/drivers/gpu/nvgpu/common/linux/vgpu/gp10b/vgpu_hal_gp10b.c +++ b/drivers/gpu/nvgpu/common/linux/vgpu/gp10b/vgpu_hal_gp10b.c | |||
@@ -223,6 +223,7 @@ static const struct gpu_ops vgpu_gp10b_ops = { | |||
223 | gm20b_fb_set_use_full_comp_tag_line, | 223 | gm20b_fb_set_use_full_comp_tag_line, |
224 | .compression_page_size = gp10b_fb_compression_page_size, | 224 | .compression_page_size = gp10b_fb_compression_page_size, |
225 | .compressible_page_size = gp10b_fb_compressible_page_size, | 225 | .compressible_page_size = gp10b_fb_compressible_page_size, |
226 | .compression_align_mask = gm20b_fb_compression_align_mask, | ||
226 | .vpr_info_fetch = gm20b_fb_vpr_info_fetch, | 227 | .vpr_info_fetch = gm20b_fb_vpr_info_fetch, |
227 | .dump_vpr_wpr_info = gm20b_fb_dump_vpr_wpr_info, | 228 | .dump_vpr_wpr_info = gm20b_fb_dump_vpr_wpr_info, |
228 | .read_wpr_info = gm20b_fb_read_wpr_info, | 229 | .read_wpr_info = gm20b_fb_read_wpr_info, |
diff --git a/drivers/gpu/nvgpu/common/linux/vgpu/gv11b/vgpu_hal_gv11b.c b/drivers/gpu/nvgpu/common/linux/vgpu/gv11b/vgpu_hal_gv11b.c index a470377c..7d60bfb2 100644 --- a/drivers/gpu/nvgpu/common/linux/vgpu/gv11b/vgpu_hal_gv11b.c +++ b/drivers/gpu/nvgpu/common/linux/vgpu/gv11b/vgpu_hal_gv11b.c | |||
@@ -263,6 +263,7 @@ static const struct gpu_ops vgpu_gv11b_ops = { | |||
263 | gm20b_fb_set_use_full_comp_tag_line, | 263 | gm20b_fb_set_use_full_comp_tag_line, |
264 | .compression_page_size = gp10b_fb_compression_page_size, | 264 | .compression_page_size = gp10b_fb_compression_page_size, |
265 | .compressible_page_size = gp10b_fb_compressible_page_size, | 265 | .compressible_page_size = gp10b_fb_compressible_page_size, |
266 | .compression_align_mask = gm20b_fb_compression_align_mask, | ||
266 | .vpr_info_fetch = gm20b_fb_vpr_info_fetch, | 267 | .vpr_info_fetch = gm20b_fb_vpr_info_fetch, |
267 | .dump_vpr_wpr_info = gm20b_fb_dump_vpr_wpr_info, | 268 | .dump_vpr_wpr_info = gm20b_fb_dump_vpr_wpr_info, |
268 | .read_wpr_info = gm20b_fb_read_wpr_info, | 269 | .read_wpr_info = gm20b_fb_read_wpr_info, |
diff --git a/drivers/gpu/nvgpu/common/mm/vm.c b/drivers/gpu/nvgpu/common/mm/vm.c index 637632e0..f85089d5 100644 --- a/drivers/gpu/nvgpu/common/mm/vm.c +++ b/drivers/gpu/nvgpu/common/mm/vm.c | |||
@@ -847,6 +847,29 @@ struct nvgpu_mapped_buf *nvgpu_vm_map(struct vm_gk20a *vm, | |||
847 | goto clean_up; | 847 | goto clean_up; |
848 | } | 848 | } |
849 | 849 | ||
850 | if ((binfo.compr_kind != NVGPU_KIND_INVALID) && | ||
851 | (flags & NVGPU_VM_MAP_FIXED_OFFSET)) { | ||
852 | /* | ||
853 | * Fixed-address compressible mapping is | ||
854 | * requested. Make sure we're respecting the alignment | ||
855 | * requirement for virtual addresses and buffer | ||
856 | * offsets. | ||
857 | * | ||
858 | * This check must be done before we may fall back to | ||
859 | * the incompressible kind. | ||
860 | */ | ||
861 | |||
862 | const u64 offset_mask = g->ops.fb.compression_align_mask(g); | ||
863 | |||
864 | if ((map_addr & offset_mask) != (phys_offset & offset_mask)) { | ||
865 | nvgpu_log(g, gpu_dbg_map, | ||
866 | "Misaligned compressible-kind fixed-address " | ||
867 | "mapping"); | ||
868 | err = -EINVAL; | ||
869 | goto clean_up; | ||
870 | } | ||
871 | } | ||
872 | |||
850 | if (binfo.compr_kind != NVGPU_KIND_INVALID) { | 873 | if (binfo.compr_kind != NVGPU_KIND_INVALID) { |
851 | struct gk20a_comptags comptags = { 0 }; | 874 | struct gk20a_comptags comptags = { 0 }; |
852 | 875 | ||