From 35ae4194a05d47aa6d79353428f81f2ca47ce90f Mon Sep 17 00:00:00 2001 From: Alex Waterman Date: Thu, 16 Nov 2017 12:56:53 -0800 Subject: gpu: nvgpu: Add translation for NVGPU MM flags Add a translation layer to convert from the NVGPU_AS_* flags to to new set of NVGPU_VM_MAP_* and NVGPU_VM_AREA_ALLOC_* flags. This allows the common MM code to not depend on the UAPI header defined for Linux. In addition to this change a couple of other small changes were made: 1. Deprecate, print a warning, and ignore usage of the NVGPU_AS_MAP_BUFFER_FLAGS_MAPPABLE_COMPBITS flag. 2. Move the t19x IO coherence flag from the t19x UAPI header to the regular UAPI header. JIRA NVGPU-293 Change-Id: I146402b0e8617294374e63e78f8826c57cd3b291 Signed-off-by: Alex Waterman Reviewed-on: https://git-master.nvidia.com/r/1599802 Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/gpu/nvgpu/common/mm/gmmu.c | 8 +++----- drivers/gpu/nvgpu/common/mm/gmmu_t19x.c | 6 ++---- drivers/gpu/nvgpu/common/mm/vm.c | 27 +++++++++++++-------------- drivers/gpu/nvgpu/common/mm/vm_area.c | 6 ++---- 4 files changed, 20 insertions(+), 27 deletions(-) (limited to 'drivers/gpu/nvgpu/common/mm') diff --git a/drivers/gpu/nvgpu/common/mm/gmmu.c b/drivers/gpu/nvgpu/common/mm/gmmu.c index 8ad7dac7..4d622412 100644 --- a/drivers/gpu/nvgpu/common/mm/gmmu.c +++ b/drivers/gpu/nvgpu/common/mm/gmmu.c @@ -20,8 +20,6 @@ * DEALINGS IN THE SOFTWARE. */ -#include - #include #include #include @@ -682,12 +680,12 @@ u64 gk20a_locked_gmmu_map(struct vm_gk20a *vm, .pgsz = pgsz_idx, .kind_v = kind_v, .ctag = (u64)ctag_offset * (u64)ctag_granularity, - .cacheable = flags & NVGPU_AS_MAP_BUFFER_FLAGS_CACHEABLE, + .cacheable = flags & NVGPU_VM_MAP_CACHEABLE, .rw_flag = rw_flag, .sparse = sparse, .priv = priv, - .coherent = flags & NVGPU_AS_MAP_BUFFER_FLAGS_IO_COHERENT, - .valid = !(flags & NVGPU_AS_MAP_BUFFER_FLAGS_UNMAPPED_PTE), + .coherent = flags & NVGPU_VM_MAP_IO_COHERENT, + .valid = !(flags & NVGPU_VM_MAP_UNMAPPED_PTE), .aperture = aperture }; diff --git a/drivers/gpu/nvgpu/common/mm/gmmu_t19x.c b/drivers/gpu/nvgpu/common/mm/gmmu_t19x.c index 9f9c188d..f2386b3f 100644 --- a/drivers/gpu/nvgpu/common/mm/gmmu_t19x.c +++ b/drivers/gpu/nvgpu/common/mm/gmmu_t19x.c @@ -20,12 +20,10 @@ * DEALINGS IN THE SOFTWARE. */ -#include - #include +#include void nvgpu_gmmu_add_t19x_attrs(struct nvgpu_gmmu_attrs *attrs, u32 flags) { - attrs->t19x_attrs.l3_alloc = (bool)(flags & - NVGPU_AS_MAP_BUFFER_FLAGS_L3_ALLOC); + attrs->t19x_attrs.l3_alloc = (bool)(flags & NVGPU_VM_MAP_L3_ALLOC); } diff --git a/drivers/gpu/nvgpu/common/mm/vm.c b/drivers/gpu/nvgpu/common/mm/vm.c index ebe8e381..637632e0 100644 --- a/drivers/gpu/nvgpu/common/mm/vm.c +++ b/drivers/gpu/nvgpu/common/mm/vm.c @@ -21,8 +21,6 @@ */ #include -#include - #include #include #include @@ -765,7 +763,7 @@ struct nvgpu_mapped_buf *nvgpu_vm_map(struct vm_gk20a *vm, u8 pte_kind; if (vm->userspace_managed && - !(flags & NVGPU_AS_MAP_BUFFER_FLAGS_FIXED_OFFSET)) { + !(flags & NVGPU_VM_MAP_FIXED_OFFSET)) { nvgpu_err(g, "non-fixed-offset mapping not available on " "userspace managed address spaces"); @@ -774,11 +772,12 @@ struct nvgpu_mapped_buf *nvgpu_vm_map(struct vm_gk20a *vm, binfo.flags = flags; binfo.size = nvgpu_os_buf_get_size(os_buf); - binfo.compr_kind = (vm->enable_ctag && compr_kind != NV_KIND_INVALID ? - compr_kind : NV_KIND_INVALID); + binfo.compr_kind = + (vm->enable_ctag && compr_kind != NVGPU_KIND_INVALID ? + compr_kind : NVGPU_KIND_INVALID); binfo.incompr_kind = incompr_kind; - if (compr_kind != NV_KIND_INVALID) + if (compr_kind != NVGPU_KIND_INVALID) map_key_kind = compr_kind; else map_key_kind = incompr_kind; @@ -830,7 +829,7 @@ struct nvgpu_mapped_buf *nvgpu_vm_map(struct vm_gk20a *vm, /* * Check if we should use a fixed offset for mapping this buffer. */ - if (flags & NVGPU_AS_MAP_BUFFER_FLAGS_FIXED_OFFSET) { + if (flags & NVGPU_VM_MAP_FIXED_OFFSET) { err = nvgpu_vm_area_validate_buffer(vm, map_addr, map_size, @@ -848,7 +847,7 @@ struct nvgpu_mapped_buf *nvgpu_vm_map(struct vm_gk20a *vm, goto clean_up; } - if (binfo.compr_kind != NV_KIND_INVALID) { + if (binfo.compr_kind != NVGPU_KIND_INVALID) { struct gk20a_comptags comptags = { 0 }; /* @@ -903,14 +902,14 @@ struct nvgpu_mapped_buf *nvgpu_vm_map(struct vm_gk20a *vm, /* * Figure out the kind and ctag offset for the GMMU page tables */ - if (binfo.compr_kind != NV_KIND_INVALID && ctag_offset) { + if (binfo.compr_kind != NVGPU_KIND_INVALID && ctag_offset) { /* * Adjust the ctag_offset as per the buffer map offset */ ctag_offset += phys_offset >> ilog2(g->ops.fb.compression_page_size(g)); pte_kind = binfo.compr_kind; - } else if (binfo.incompr_kind != NV_KIND_INVALID) { + } else if (binfo.incompr_kind != NVGPU_KIND_INVALID) { /* * Incompressible kind, ctag offset will not be programmed */ @@ -1093,7 +1092,7 @@ void nvgpu_vm_unmap(struct vm_gk20a *vm, u64 offset, if (!mapped_buffer) goto done; - if (mapped_buffer->flags & NVGPU_AS_MAP_BUFFER_FLAGS_FIXED_OFFSET) { + if (mapped_buffer->flags & NVGPU_VM_MAP_FIXED_OFFSET) { if (nvgpu_vm_unmap_sync_buffer(vm, mapped_buffer)) /* * Looks like we have failed... Better not continue in @@ -1118,7 +1117,7 @@ done: static int nvgpu_vm_compute_compression(struct vm_gk20a *vm, struct nvgpu_ctag_buffer_info *binfo) { - bool kind_compressible = (binfo->compr_kind != NV_KIND_INVALID); + bool kind_compressible = (binfo->compr_kind != NVGPU_KIND_INVALID); struct gk20a *g = gk20a_from_vm(vm); if (kind_compressible && @@ -1127,7 +1126,7 @@ static int nvgpu_vm_compute_compression(struct vm_gk20a *vm, /* * Let's double check that there is a fallback kind */ - if (binfo->incompr_kind == NV_KIND_INVALID) { + if (binfo->incompr_kind == NVGPU_KIND_INVALID) { nvgpu_err(g, "Unsupported page size for compressible " "kind, but no fallback kind"); @@ -1136,7 +1135,7 @@ static int nvgpu_vm_compute_compression(struct vm_gk20a *vm, nvgpu_log(g, gpu_dbg_map, "Unsupported page size for compressible " "kind, demoting to incompressible"); - binfo->compr_kind = NV_KIND_INVALID; + binfo->compr_kind = NVGPU_KIND_INVALID; kind_compressible = false; } } diff --git a/drivers/gpu/nvgpu/common/mm/vm_area.c b/drivers/gpu/nvgpu/common/mm/vm_area.c index b6286c43..5ed2626f 100644 --- a/drivers/gpu/nvgpu/common/mm/vm_area.c +++ b/drivers/gpu/nvgpu/common/mm/vm_area.c @@ -20,8 +20,6 @@ * DEALINGS IN THE SOFTWARE. */ -#include - #include #include @@ -121,7 +119,7 @@ int nvgpu_vm_area_alloc(struct vm_gk20a *vm, u32 pages, u32 page_size, goto clean_up_err; vma = vm->vma[pgsz_idx]; - if (flags & NVGPU_AS_ALLOC_SPACE_FLAGS_FIXED_OFFSET) + if (flags & NVGPU_VM_AREA_ALLOC_FIXED_OFFSET) vaddr_start = nvgpu_alloc_fixed(vma, *addr, (u64)pages * (u64)page_size, @@ -143,7 +141,7 @@ int nvgpu_vm_area_alloc(struct vm_gk20a *vm, u32 pages, u32 page_size, nvgpu_mutex_acquire(&vm->update_gmmu_lock); - if (flags & NVGPU_AS_ALLOC_SPACE_FLAGS_SPARSE) { + if (flags & NVGPU_VM_AREA_ALLOC_SPARSE) { u64 map_addr = g->ops.mm.gmmu_map(vm, vaddr_start, NULL, 0, -- cgit v1.2.2