diff options
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/mm_gk20a.c')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/mm_gk20a.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c index 7d359ff4..5d1ff563 100644 --- a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c | |||
@@ -1437,7 +1437,7 @@ u64 gk20a_vm_map(struct vm_gk20a *vm, | |||
1437 | * the alignment determined by gmmu_select_page_size(). | 1437 | * the alignment determined by gmmu_select_page_size(). |
1438 | */ | 1438 | */ |
1439 | if (flags & NVGPU_AS_MAP_BUFFER_FLAGS_FIXED_OFFSET) { | 1439 | if (flags & NVGPU_AS_MAP_BUFFER_FLAGS_FIXED_OFFSET) { |
1440 | int pgsz_idx = NV_GMMU_VA_IS_UPPER(offset_align) ? | 1440 | int pgsz_idx = __nv_gmmu_va_is_upper(vm, offset_align) ? |
1441 | gmmu_page_size_big : gmmu_page_size_small; | 1441 | gmmu_page_size_big : gmmu_page_size_small; |
1442 | if (pgsz_idx > bfr.pgsz_idx) { | 1442 | if (pgsz_idx > bfr.pgsz_idx) { |
1443 | gk20a_err(d, "%llx buffer pgsz %d, VA pgsz %d", | 1443 | gk20a_err(d, "%llx buffer pgsz %d, VA pgsz %d", |
@@ -2441,6 +2441,13 @@ int gk20a_init_vm(struct mm_gk20a *mm, | |||
2441 | /* note: keep the page sizes sorted lowest to highest here */ | 2441 | /* note: keep the page sizes sorted lowest to highest here */ |
2442 | u32 gmmu_page_sizes[gmmu_nr_page_sizes] = { SZ_4K, big_page_size }; | 2442 | u32 gmmu_page_sizes[gmmu_nr_page_sizes] = { SZ_4K, big_page_size }; |
2443 | 2443 | ||
2444 | /* | ||
2445 | * Linsim bug: seems like we can't have pushbuffers above 4GB. Easy WAR for sim | ||
2446 | * is to just limit the address space to 4GB. | ||
2447 | */ | ||
2448 | if (tegra_platform_is_linsim() && aperture_size > SZ_4G) | ||
2449 | aperture_size = SZ_4G; | ||
2450 | |||
2444 | vm->mm = mm; | 2451 | vm->mm = mm; |
2445 | 2452 | ||
2446 | vm->va_start = low_hole; | 2453 | vm->va_start = low_hole; |
@@ -2483,7 +2490,7 @@ int gk20a_init_vm(struct mm_gk20a *mm, | |||
2483 | * remains is allocated to large pages. */ | 2490 | * remains is allocated to large pages. */ |
2484 | small_vma_size = vm->va_limit; | 2491 | small_vma_size = vm->va_limit; |
2485 | if (big_pages) { | 2492 | if (big_pages) { |
2486 | small_vma_size = (u64)16 << 30; | 2493 | small_vma_size = __nv_gmmu_va_small_page_limit(); |
2487 | large_vma_size = vm->va_limit - small_vma_size; | 2494 | large_vma_size = vm->va_limit - small_vma_size; |
2488 | } | 2495 | } |
2489 | 2496 | ||
@@ -2698,7 +2705,7 @@ int gk20a_vm_free_space(struct gk20a_as_share *as_share, | |||
2698 | args->pages, args->offset); | 2705 | args->pages, args->offset); |
2699 | 2706 | ||
2700 | /* determine pagesz idx */ | 2707 | /* determine pagesz idx */ |
2701 | pgsz_idx = NV_GMMU_VA_IS_UPPER(args->offset) ? | 2708 | pgsz_idx = __nv_gmmu_va_is_upper(vm, args->offset) ? |
2702 | gmmu_page_size_big : gmmu_page_size_small; | 2709 | gmmu_page_size_big : gmmu_page_size_small; |
2703 | 2710 | ||
2704 | start_page_nr = (u32)(args->offset >> | 2711 | start_page_nr = (u32)(args->offset >> |