summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTerje Bergstrom <tbergstrom@nvidia.com>2017-11-07 12:56:40 -0500
committermobile promotions <svcmobile_promotions@nvidia.com>2017-11-08 01:24:14 -0500
commit58dd20f86b3b9faef89b24f2b4ec6b62a183fe9d (patch)
treebd90f82d117597fe44b004861056e50c175f5700
parenta51219e526cca5fdee33faf25268662bdd9453cb (diff)
gpu: nvgpu: Introduce queries for big page sizes
Introduce query functions for default big page size and available big page sizes. Move initialization of GPU characteristics big page sizes to the GPU characteristics query function. JIRA NVGPU-259 Change-Id: Ie66cc2fbfcd88205593056f8d5010ac2539c8bc2 Signed-off-by: Terje Bergstrom <tbergstrom@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1593685 Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
-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