summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/common
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/nvgpu/common')
-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
3 files changed, 32 insertions, 1 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}