diff options
Diffstat (limited to 'drivers/gpu/nvgpu')
-rw-r--r-- | drivers/gpu/nvgpu/common/linux/vgpu/gm20b/vgpu_hal_gm20b.c | 1 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/common/linux/vgpu/gp10b/vgpu_hal_gp10b.c | 1 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/common/linux/vgpu/gv11b/vgpu_hal_gv11b.c | 1 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/common/mm/vm.c | 23 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/gk20a.h | 17 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gm20b/fb_gm20b.c | 5 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gm20b/fb_gm20b.h | 1 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gm20b/hal_gm20b.c | 1 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gp106/hal_gp106.c | 1 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gp10b/hal_gp10b.c | 1 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gv100/hal_gv100.c | 1 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gv11b/hal_gv11b.c | 1 |
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 | ||
73 | u32 gm20b_fb_compression_align_mask(struct gk20a *g) | ||
74 | { | ||
75 | return SZ_64K - 1; | ||
76 | } | ||
77 | |||
73 | void gm20b_fb_dump_vpr_wpr_info(struct gk20a *g) | 78 | void 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); | |||
31 | bool gm20b_fb_set_use_full_comp_tag_line(struct gk20a *g); | 31 | bool gm20b_fb_set_use_full_comp_tag_line(struct gk20a *g); |
32 | unsigned int gm20b_fb_compression_page_size(struct gk20a *g); | 32 | unsigned int gm20b_fb_compression_page_size(struct gk20a *g); |
33 | unsigned int gm20b_fb_compressible_page_size(struct gk20a *g); | 33 | unsigned int gm20b_fb_compressible_page_size(struct gk20a *g); |
34 | u32 gm20b_fb_compression_align_mask(struct gk20a *g); | ||
34 | void gm20b_fb_dump_vpr_wpr_info(struct gk20a *g); | 35 | void gm20b_fb_dump_vpr_wpr_info(struct gk20a *g); |
35 | void gm20b_fb_read_wpr_info(struct gk20a *g, struct wpr_carveout_info *inf); | 36 | void gm20b_fb_read_wpr_info(struct gk20a *g, struct wpr_carveout_info *inf); |
36 | int gm20b_fb_vpr_info_fetch(struct gk20a *g); | 37 | int 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, |