summaryrefslogtreecommitdiffstats
path: root/drivers/gpu
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/nvgpu/common/as.c2
-rw-r--r--drivers/gpu/nvgpu/common/linux/ioctl_ctrl.c5
-rw-r--r--drivers/gpu/nvgpu/common/mm/mm.c26
-rw-r--r--drivers/gpu/nvgpu/gk20a/gk20a.c12
-rw-r--r--drivers/gpu/nvgpu/include/nvgpu/mm.h2
5 files changed, 34 insertions, 13 deletions
diff --git a/drivers/gpu/nvgpu/common/as.c b/drivers/gpu/nvgpu/common/as.c
index 31cdd0b6..f4f00fba 100644
--- a/drivers/gpu/nvgpu/common/as.c
+++ b/drivers/gpu/nvgpu/common/as.c
@@ -62,7 +62,7 @@ static int gk20a_vm_alloc_share(struct gk20a_as_share *as_share,
62 if (!is_power_of_2(big_page_size)) 62 if (!is_power_of_2(big_page_size))
63 return -EINVAL; 63 return -EINVAL;
64 64
65 if (!(big_page_size & g->gpu_characteristics.available_big_page_sizes)) 65 if (!(big_page_size & nvgpu_mm_get_available_big_page_sizes(g)))
66 return -EINVAL; 66 return -EINVAL;
67 } 67 }
68 68
diff --git a/drivers/gpu/nvgpu/common/linux/ioctl_ctrl.c b/drivers/gpu/nvgpu/common/linux/ioctl_ctrl.c
index d3961f79..02dedc9f 100644
--- a/drivers/gpu/nvgpu/common/linux/ioctl_ctrl.c
+++ b/drivers/gpu/nvgpu/common/linux/ioctl_ctrl.c
@@ -211,6 +211,11 @@ gk20a_ctrl_ioctl_gpu_characteristics(
211 pgpu->vbios_version = g->bios.vbios_version; 211 pgpu->vbios_version = g->bios.vbios_version;
212 pgpu->vbios_oem_version = g->bios.vbios_oem_version; 212 pgpu->vbios_oem_version = g->bios.vbios_oem_version;
213 213
214 pgpu->big_page_size = nvgpu_mm_get_default_big_page_size(g);
215 pgpu->pde_coverage_bit_count =
216 g->ops.mm.get_mmu_levels(g, pgpu->big_page_size)[0].lo_bit[0];
217 pgpu->available_big_page_sizes = nvgpu_mm_get_available_big_page_sizes(g);
218
214 if (request->gpu_characteristics_buf_size > 0) { 219 if (request->gpu_characteristics_buf_size > 0) {
215 size_t write_size = sizeof(*pgpu); 220 size_t write_size = sizeof(*pgpu);
216 221
diff --git a/drivers/gpu/nvgpu/common/mm/mm.c b/drivers/gpu/nvgpu/common/mm/mm.c
index 73af31c9..86dc46c5 100644
--- a/drivers/gpu/nvgpu/common/mm/mm.c
+++ b/drivers/gpu/nvgpu/common/mm/mm.c
@@ -423,3 +423,29 @@ int nvgpu_init_mm_support(struct gk20a *g)
423 423
424 return err; 424 return err;
425} 425}
426
427u32 nvgpu_mm_get_default_big_page_size(struct gk20a *g)
428{
429 u32 big_page_size;
430
431 big_page_size = g->ops.mm.get_default_big_page_size();
432
433 if (g->mm.disable_bigpage)
434 big_page_size = 0;
435
436 return big_page_size;
437}
438
439u32 nvgpu_mm_get_available_big_page_sizes(struct gk20a *g)
440{
441 u32 available_big_page_sizes = 0;
442
443 if (!g->mm.disable_bigpage) {
444 available_big_page_sizes =
445 g->ops.mm.get_default_big_page_size();
446 if (g->ops.mm.get_big_page_sizes)
447 available_big_page_sizes |= g->ops.mm.get_big_page_sizes();
448 }
449
450 return available_big_page_sizes;
451}
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.c b/drivers/gpu/nvgpu/gk20a/gk20a.c
index 756db415..a9ee65d0 100644
--- a/drivers/gpu/nvgpu/gk20a/gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/gk20a.c
@@ -394,18 +394,6 @@ int gk20a_init_gpu_characteristics(struct gk20a *g)
394 gpu->bus_type = NVGPU_GPU_BUS_TYPE_AXI; /* always AXI for now */ 394 gpu->bus_type = NVGPU_GPU_BUS_TYPE_AXI; /* always AXI for now */
395 395
396 gpu->compression_page_size = g->ops.fb.compression_page_size(g); 396 gpu->compression_page_size = g->ops.fb.compression_page_size(g);
397 gpu->big_page_size = g->ops.mm.get_default_big_page_size();
398 gpu->pde_coverage_bit_count =
399 g->ops.mm.get_mmu_levels(g, gpu->big_page_size)[0].lo_bit[0];
400
401 if (g->mm.disable_bigpage) {
402 gpu->big_page_size = 0;
403 gpu->available_big_page_sizes = 0;
404 } else {
405 gpu->available_big_page_sizes = gpu->big_page_size;
406 if (g->ops.mm.get_big_page_sizes)
407 gpu->available_big_page_sizes |= g->ops.mm.get_big_page_sizes();
408 }
409 397
410 __nvgpu_set_enabled(g, NVGPU_SUPPORT_PARTIAL_MAPPINGS, true); 398 __nvgpu_set_enabled(g, NVGPU_SUPPORT_PARTIAL_MAPPINGS, true);
411 __nvgpu_set_enabled(g, NVGPU_SUPPORT_MAP_DIRECT_KIND_CTRL, true); 399 __nvgpu_set_enabled(g, NVGPU_SUPPORT_MAP_DIRECT_KIND_CTRL, true);
diff --git a/drivers/gpu/nvgpu/include/nvgpu/mm.h b/drivers/gpu/nvgpu/include/nvgpu/mm.h
index 13b33d9f..9882b31e 100644
--- a/drivers/gpu/nvgpu/include/nvgpu/mm.h
+++ b/drivers/gpu/nvgpu/include/nvgpu/mm.h
@@ -216,5 +216,7 @@ u64 nvgpu_inst_block_addr(struct gk20a *g, struct nvgpu_mem *mem);
216void nvgpu_free_inst_block(struct gk20a *g, struct nvgpu_mem *inst_block); 216void nvgpu_free_inst_block(struct gk20a *g, struct nvgpu_mem *inst_block);
217 217
218int nvgpu_mm_suspend(struct gk20a *g); 218int nvgpu_mm_suspend(struct gk20a *g);
219u32 nvgpu_mm_get_default_big_page_size(struct gk20a *g);
220u32 nvgpu_mm_get_available_big_page_sizes(struct gk20a *g);
219 221
220#endif 222#endif