summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/nvgpu/common/linux/vgpu/gm20b/vgpu_hal_gm20b.c1
-rw-r--r--drivers/gpu/nvgpu/common/linux/vgpu/gp10b/vgpu_hal_gp10b.c1
-rw-r--r--drivers/gpu/nvgpu/common/linux/vgpu/gv11b/vgpu_hal_gv11b.c1
-rw-r--r--drivers/gpu/nvgpu/common/mm/vm.c23
-rw-r--r--drivers/gpu/nvgpu/gk20a/gk20a.h17
-rw-r--r--drivers/gpu/nvgpu/gm20b/fb_gm20b.c5
-rw-r--r--drivers/gpu/nvgpu/gm20b/fb_gm20b.h1
-rw-r--r--drivers/gpu/nvgpu/gm20b/hal_gm20b.c1
-rw-r--r--drivers/gpu/nvgpu/gp106/hal_gp106.c1
-rw-r--r--drivers/gpu/nvgpu/gp10b/hal_gp10b.c1
-rw-r--r--drivers/gpu/nvgpu/gv100/hal_gv100.c1
-rw-r--r--drivers/gpu/nvgpu/gv11b/hal_gv11b.c1
12 files changed, 54 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
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.h b/drivers/gpu/nvgpu/gk20a/gk20a.h
index a361648f..c6bc129f 100644
--- a/drivers/gpu/nvgpu/gk20a/gk20a.h
+++ b/drivers/gpu/nvgpu/gk20a/gk20a.h
@@ -446,8 +446,25 @@ struct gpu_ops {
446 void (*init_kind_attr)(struct gk20a *g); 446 void (*init_kind_attr)(struct gk20a *g);
447 void (*set_mmu_page_size)(struct gk20a *g); 447 void (*set_mmu_page_size)(struct gk20a *g);
448 bool (*set_use_full_comp_tag_line)(struct gk20a *g); 448 bool (*set_use_full_comp_tag_line)(struct gk20a *g);
449
450 /*
451 * Compression tag line coverage. When mapping a compressible
452 * buffer, ctagline is increased when the virtual address
453 * crosses over the compression page boundary.
454 */
449 unsigned int (*compression_page_size)(struct gk20a *g); 455 unsigned int (*compression_page_size)(struct gk20a *g);
456
457 /*
458 * Minimum page size that can be used for compressible kinds.
459 */
450 unsigned int (*compressible_page_size)(struct gk20a *g); 460 unsigned int (*compressible_page_size)(struct gk20a *g);
461
462 /*
463 * Compressible kind mappings: Mask for the virtual and physical
464 * address bits that must match.
465 */
466 u32 (*compression_align_mask)(struct gk20a *g);
467
451 void (*dump_vpr_wpr_info)(struct gk20a *g); 468 void (*dump_vpr_wpr_info)(struct gk20a *g);
452 int (*vpr_info_fetch)(struct gk20a *g); 469 int (*vpr_info_fetch)(struct gk20a *g);
453 void (*read_wpr_info)(struct gk20a *g, 470 void (*read_wpr_info)(struct gk20a *g,
diff --git a/drivers/gpu/nvgpu/gm20b/fb_gm20b.c b/drivers/gpu/nvgpu/gm20b/fb_gm20b.c
index 1f8cc326..0157aa7a 100644
--- a/drivers/gpu/nvgpu/gm20b/fb_gm20b.c
+++ b/drivers/gpu/nvgpu/gm20b/fb_gm20b.c
@@ -70,6 +70,11 @@ unsigned int gm20b_fb_compressible_page_size(struct gk20a *g)
70 return SZ_64K; 70 return SZ_64K;
71} 71}
72 72
73u32 gm20b_fb_compression_align_mask(struct gk20a *g)
74{
75 return SZ_64K - 1;
76}
77
73void gm20b_fb_dump_vpr_wpr_info(struct gk20a *g) 78void gm20b_fb_dump_vpr_wpr_info(struct gk20a *g)
74{ 79{
75 u32 val; 80 u32 val;
diff --git a/drivers/gpu/nvgpu/gm20b/fb_gm20b.h b/drivers/gpu/nvgpu/gm20b/fb_gm20b.h
index 32d36f57..1d1d5899 100644
--- a/drivers/gpu/nvgpu/gm20b/fb_gm20b.h
+++ b/drivers/gpu/nvgpu/gm20b/fb_gm20b.h
@@ -31,6 +31,7 @@ void gm20b_fb_set_mmu_page_size(struct gk20a *g);
31bool gm20b_fb_set_use_full_comp_tag_line(struct gk20a *g); 31bool gm20b_fb_set_use_full_comp_tag_line(struct gk20a *g);
32unsigned int gm20b_fb_compression_page_size(struct gk20a *g); 32unsigned int gm20b_fb_compression_page_size(struct gk20a *g);
33unsigned int gm20b_fb_compressible_page_size(struct gk20a *g); 33unsigned int gm20b_fb_compressible_page_size(struct gk20a *g);
34u32 gm20b_fb_compression_align_mask(struct gk20a *g);
34void gm20b_fb_dump_vpr_wpr_info(struct gk20a *g); 35void gm20b_fb_dump_vpr_wpr_info(struct gk20a *g);
35void gm20b_fb_read_wpr_info(struct gk20a *g, struct wpr_carveout_info *inf); 36void gm20b_fb_read_wpr_info(struct gk20a *g, struct wpr_carveout_info *inf);
36int gm20b_fb_vpr_info_fetch(struct gk20a *g); 37int gm20b_fb_vpr_info_fetch(struct gk20a *g);
diff --git a/drivers/gpu/nvgpu/gm20b/hal_gm20b.c b/drivers/gpu/nvgpu/gm20b/hal_gm20b.c
index 920a3e9b..3ef11d11 100644
--- a/drivers/gpu/nvgpu/gm20b/hal_gm20b.c
+++ b/drivers/gpu/nvgpu/gm20b/hal_gm20b.c
@@ -321,6 +321,7 @@ static const struct gpu_ops gm20b_ops = {
321 gm20b_fb_set_use_full_comp_tag_line, 321 gm20b_fb_set_use_full_comp_tag_line,
322 .compression_page_size = gm20b_fb_compression_page_size, 322 .compression_page_size = gm20b_fb_compression_page_size,
323 .compressible_page_size = gm20b_fb_compressible_page_size, 323 .compressible_page_size = gm20b_fb_compressible_page_size,
324 .compression_align_mask = gm20b_fb_compression_align_mask,
324 .vpr_info_fetch = gm20b_fb_vpr_info_fetch, 325 .vpr_info_fetch = gm20b_fb_vpr_info_fetch,
325 .dump_vpr_wpr_info = gm20b_fb_dump_vpr_wpr_info, 326 .dump_vpr_wpr_info = gm20b_fb_dump_vpr_wpr_info,
326 .read_wpr_info = gm20b_fb_read_wpr_info, 327 .read_wpr_info = gm20b_fb_read_wpr_info,
diff --git a/drivers/gpu/nvgpu/gp106/hal_gp106.c b/drivers/gpu/nvgpu/gp106/hal_gp106.c
index d63398c7..a3a58903 100644
--- a/drivers/gpu/nvgpu/gp106/hal_gp106.c
+++ b/drivers/gpu/nvgpu/gp106/hal_gp106.c
@@ -378,6 +378,7 @@ static const struct gpu_ops gp106_ops = {
378 gm20b_fb_set_use_full_comp_tag_line, 378 gm20b_fb_set_use_full_comp_tag_line,
379 .compression_page_size = gp10b_fb_compression_page_size, 379 .compression_page_size = gp10b_fb_compression_page_size,
380 .compressible_page_size = gp10b_fb_compressible_page_size, 380 .compressible_page_size = gp10b_fb_compressible_page_size,
381 .compression_align_mask = gm20b_fb_compression_align_mask,
381 .vpr_info_fetch = gm20b_fb_vpr_info_fetch, 382 .vpr_info_fetch = gm20b_fb_vpr_info_fetch,
382 .dump_vpr_wpr_info = gm20b_fb_dump_vpr_wpr_info, 383 .dump_vpr_wpr_info = gm20b_fb_dump_vpr_wpr_info,
383 .read_wpr_info = gm20b_fb_read_wpr_info, 384 .read_wpr_info = gm20b_fb_read_wpr_info,
diff --git a/drivers/gpu/nvgpu/gp10b/hal_gp10b.c b/drivers/gpu/nvgpu/gp10b/hal_gp10b.c
index 5ae6b638..0186ba00 100644
--- a/drivers/gpu/nvgpu/gp10b/hal_gp10b.c
+++ b/drivers/gpu/nvgpu/gp10b/hal_gp10b.c
@@ -346,6 +346,7 @@ static const struct gpu_ops gp10b_ops = {
346 gm20b_fb_set_use_full_comp_tag_line, 346 gm20b_fb_set_use_full_comp_tag_line,
347 .compression_page_size = gp10b_fb_compression_page_size, 347 .compression_page_size = gp10b_fb_compression_page_size,
348 .compressible_page_size = gp10b_fb_compressible_page_size, 348 .compressible_page_size = gp10b_fb_compressible_page_size,
349 .compression_align_mask = gm20b_fb_compression_align_mask,
349 .vpr_info_fetch = gm20b_fb_vpr_info_fetch, 350 .vpr_info_fetch = gm20b_fb_vpr_info_fetch,
350 .dump_vpr_wpr_info = gm20b_fb_dump_vpr_wpr_info, 351 .dump_vpr_wpr_info = gm20b_fb_dump_vpr_wpr_info,
351 .read_wpr_info = gm20b_fb_read_wpr_info, 352 .read_wpr_info = gm20b_fb_read_wpr_info,
diff --git a/drivers/gpu/nvgpu/gv100/hal_gv100.c b/drivers/gpu/nvgpu/gv100/hal_gv100.c
index 4044c4b5..36ac029b 100644
--- a/drivers/gpu/nvgpu/gv100/hal_gv100.c
+++ b/drivers/gpu/nvgpu/gv100/hal_gv100.c
@@ -430,6 +430,7 @@ static const struct gpu_ops gv100_ops = {
430 gm20b_fb_set_use_full_comp_tag_line, 430 gm20b_fb_set_use_full_comp_tag_line,
431 .compression_page_size = gp10b_fb_compression_page_size, 431 .compression_page_size = gp10b_fb_compression_page_size,
432 .compressible_page_size = gp10b_fb_compressible_page_size, 432 .compressible_page_size = gp10b_fb_compressible_page_size,
433 .compression_align_mask = gm20b_fb_compression_align_mask,
433 .vpr_info_fetch = gm20b_fb_vpr_info_fetch, 434 .vpr_info_fetch = gm20b_fb_vpr_info_fetch,
434 .dump_vpr_wpr_info = gm20b_fb_dump_vpr_wpr_info, 435 .dump_vpr_wpr_info = gm20b_fb_dump_vpr_wpr_info,
435 .read_wpr_info = gm20b_fb_read_wpr_info, 436 .read_wpr_info = gm20b_fb_read_wpr_info,
diff --git a/drivers/gpu/nvgpu/gv11b/hal_gv11b.c b/drivers/gpu/nvgpu/gv11b/hal_gv11b.c
index e6cf0e62..db24a68e 100644
--- a/drivers/gpu/nvgpu/gv11b/hal_gv11b.c
+++ b/drivers/gpu/nvgpu/gv11b/hal_gv11b.c
@@ -403,6 +403,7 @@ static const struct gpu_ops gv11b_ops = {
403 gm20b_fb_set_use_full_comp_tag_line, 403 gm20b_fb_set_use_full_comp_tag_line,
404 .compression_page_size = gp10b_fb_compression_page_size, 404 .compression_page_size = gp10b_fb_compression_page_size,
405 .compressible_page_size = gp10b_fb_compressible_page_size, 405 .compressible_page_size = gp10b_fb_compressible_page_size,
406 .compression_align_mask = gm20b_fb_compression_align_mask,
406 .vpr_info_fetch = gm20b_fb_vpr_info_fetch, 407 .vpr_info_fetch = gm20b_fb_vpr_info_fetch,
407 .dump_vpr_wpr_info = gm20b_fb_dump_vpr_wpr_info, 408 .dump_vpr_wpr_info = gm20b_fb_dump_vpr_wpr_info,
408 .read_wpr_info = gm20b_fb_read_wpr_info, 409 .read_wpr_info = gm20b_fb_read_wpr_info,