diff options
-rw-r--r-- | drivers/gpu/nvgpu/common/as.c | 2 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/common/linux/ioctl_ctrl.c | 5 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/common/mm/mm.c | 26 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/gk20a.c | 12 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/include/nvgpu/mm.h | 2 |
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 | |||
427 | u32 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 | |||
439 | u32 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); | |||
216 | void nvgpu_free_inst_block(struct gk20a *g, struct nvgpu_mem *inst_block); | 216 | void nvgpu_free_inst_block(struct gk20a *g, struct nvgpu_mem *inst_block); |
217 | 217 | ||
218 | int nvgpu_mm_suspend(struct gk20a *g); | 218 | int nvgpu_mm_suspend(struct gk20a *g); |
219 | u32 nvgpu_mm_get_default_big_page_size(struct gk20a *g); | ||
220 | u32 nvgpu_mm_get_available_big_page_sizes(struct gk20a *g); | ||
219 | 221 | ||
220 | #endif | 222 | #endif |