From cefabe7eb1f1f1dba9692e21ab4f1b88b9163489 Mon Sep 17 00:00:00 2001 From: Sami Kiminki Date: Thu, 2 Nov 2017 22:03:15 +0200 Subject: gpu: nvgpu: Remove PTE kind logic Since NVGPU_AS_MAP_BUFFER_FLAGS_DIRECT_KIND_CTRL was made mandatory, kernel does not need to know the details about the PTE kinds anymore. Thus, we can remove the kind_gk20a.h header and the code related to kind table setup, as well as simplify buffer mapping code a bit. Bug 1902982 Change-Id: Iaf798023c219a64fb0a84da09431c5ce4bc046eb Signed-off-by: Sami Kiminki Reviewed-on: https://git-master.nvidia.com/r/1560933 Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/gpu/nvgpu/Makefile | 1 - drivers/gpu/nvgpu/common/linux/ioctl_as.c | 15 +- drivers/gpu/nvgpu/common/linux/vm.c | 37 +-- drivers/gpu/nvgpu/common/mm/vm.c | 124 ++------ drivers/gpu/nvgpu/gk20a/fb_gk20a.c | 1 - drivers/gpu/nvgpu/gk20a/gr_gk20a.c | 1 - drivers/gpu/nvgpu/gk20a/kind_gk20a.c | 414 ------------------------ drivers/gpu/nvgpu/gk20a/kind_gk20a.h | 90 ------ drivers/gpu/nvgpu/gk20a/mm_gk20a.c | 1 - drivers/gpu/nvgpu/gm20b/fb_gm20b.c | 402 ----------------------- drivers/gpu/nvgpu/gm20b/fb_gm20b.h | 2 - drivers/gpu/nvgpu/gm20b/hal_gm20b.c | 3 - drivers/gpu/nvgpu/gp106/hal_gp106.c | 3 - drivers/gpu/nvgpu/gp10b/fb_gp10b.c | 440 -------------------------- drivers/gpu/nvgpu/gp10b/fb_gp10b.h | 2 - drivers/gpu/nvgpu/gp10b/hal_gp10b.c | 3 - drivers/gpu/nvgpu/include/nvgpu/linux/vm.h | 21 +- drivers/gpu/nvgpu/include/nvgpu/vm.h | 12 +- drivers/gpu/nvgpu/vgpu/gm20b/vgpu_hal_gm20b.c | 3 - drivers/gpu/nvgpu/vgpu/gp10b/vgpu_hal_gp10b.c | 3 - 20 files changed, 49 insertions(+), 1529 deletions(-) delete mode 100644 drivers/gpu/nvgpu/gk20a/kind_gk20a.c delete mode 100644 drivers/gpu/nvgpu/gk20a/kind_gk20a.h diff --git a/drivers/gpu/nvgpu/Makefile b/drivers/gpu/nvgpu/Makefile index 138068c1..f3338dc2 100644 --- a/drivers/gpu/nvgpu/Makefile +++ b/drivers/gpu/nvgpu/Makefile @@ -93,7 +93,6 @@ nvgpu-y := \ gk20a/dbg_gpu_gk20a.o \ gk20a/regops_gk20a.o \ gk20a/gr_gk20a.o \ - gk20a/kind_gk20a.o \ gk20a/mm_gk20a.o \ gk20a/pmu_gk20a.o \ gk20a/flcn_gk20a.o \ diff --git a/drivers/gpu/nvgpu/common/linux/ioctl_as.c b/drivers/gpu/nvgpu/common/linux/ioctl_as.c index 8a5318e4..f23dc53c 100644 --- a/drivers/gpu/nvgpu/common/linux/ioctl_as.c +++ b/drivers/gpu/nvgpu/common/linux/ioctl_as.c @@ -79,22 +79,19 @@ static int gk20a_as_ioctl_map_buffer_ex( struct gk20a_as_share *as_share, struct nvgpu_as_map_buffer_ex_args *args) { - s16 compressible_kind; - s16 incompressible_kind; - gk20a_dbg_fn(""); - if (args->flags & NVGPU_AS_MAP_BUFFER_FLAGS_DIRECT_KIND_CTRL) { - compressible_kind = args->compr_kind; - incompressible_kind = args->incompr_kind; - } else { - /* unsupported, direct kind control must be used */ + /* unsupported, direct kind control must be used */ + if (!(args->flags & NVGPU_AS_MAP_BUFFER_FLAGS_DIRECT_KIND_CTRL)) { + struct gk20a *g = as_share->vm->mm->g; + nvgpu_log_info(g, "Direct kind control must be requested"); return -EINVAL; } return nvgpu_vm_map_buffer(as_share->vm, args->dmabuf_fd, &args->offset, args->flags, - compressible_kind, incompressible_kind, + args->compr_kind, + args->incompr_kind, args->buffer_offset, args->mapping_size, NULL); diff --git a/drivers/gpu/nvgpu/common/linux/vm.c b/drivers/gpu/nvgpu/common/linux/vm.c index 0cfd010b..895a5771 100644 --- a/drivers/gpu/nvgpu/common/linux/vm.c +++ b/drivers/gpu/nvgpu/common/linux/vm.c @@ -32,7 +32,6 @@ #include "gk20a/gk20a.h" #include "gk20a/mm_gk20a.h" -#include "gk20a/kind_gk20a.h" #include "platform_gk20a.h" #include "os_linux.h" @@ -239,14 +238,17 @@ int nvgpu_vm_map_linux(struct vm_gk20a *vm, binfo.flags = flags; binfo.size = dmabuf->size; + binfo.compr_kind = compr_kind; + binfo.incompr_kind = incompr_kind; - if (flags & NVGPU_AS_MAP_BUFFER_FLAGS_DIRECT_KIND_CTRL) { - if (compr_kind != NV_KIND_INVALID) - map_key_kind = compr_kind; - else - map_key_kind = incompr_kind; - } else { + if (compr_kind != NV_KIND_INVALID) map_key_kind = compr_kind; + else + map_key_kind = incompr_kind; + + if (map_key_kind == NV_KIND_INVALID) { + nvgpu_err(g, "Valid kind must be supplied"); + return -EINVAL; } if (vm->userspace_managed && @@ -277,10 +279,6 @@ int nvgpu_vm_map_linux(struct vm_gk20a *vm, goto clean_up; } - err = nvgpu_vm_init_kind_info(&binfo, compr_kind, incompr_kind); - if (err) - goto clean_up; - aperture = gk20a_dmabuf_aperture(g, dmabuf); if (aperture == APERTURE_INVALID) { err = -EINVAL; @@ -321,9 +319,9 @@ int nvgpu_vm_map_linux(struct vm_gk20a *vm, va_allocated = true; } - err = nvgpu_vm_compute_kind_and_compression(vm, &binfo); + err = nvgpu_vm_compute_compression(vm, &binfo); if (err) { - nvgpu_err(g, "failure setting up kind and compression"); + nvgpu_err(g, "failure setting up compression"); goto clean_up; } @@ -340,10 +338,12 @@ int nvgpu_vm_map_linux(struct vm_gk20a *vm, binfo.ctag_lines); if (err) { /* TBD: we can partially alloc ctags as well... */ - if (binfo.use_uc_kind_v) { - /* no comptags, but fallback kind available */ - binfo.kind_v = binfo.uc_kind_v; - } else { + + /* prevent compression ... */ + binfo.compr_kind = NV_KIND_INVALID; + + /* ... and make sure we have the fallback */ + if (binfo.incompr_kind == NV_KIND_INVALID) { nvgpu_err(g, "comptag alloc failed and no fallback kind specified"); goto clean_up; } @@ -379,7 +379,8 @@ int nvgpu_vm_map_linux(struct vm_gk20a *vm, buffer_offset, /* sg offset */ mapping_size, binfo.pgsz_idx, - binfo.kind_v, + (binfo.compr_kind != NV_KIND_INVALID ? + binfo.compr_kind : binfo.incompr_kind), ctag_offset, flags, rw_flag, clear_ctags, diff --git a/drivers/gpu/nvgpu/common/mm/vm.c b/drivers/gpu/nvgpu/common/mm/vm.c index 64c9c217..46783e4e 100644 --- a/drivers/gpu/nvgpu/common/mm/vm.c +++ b/drivers/gpu/nvgpu/common/mm/vm.c @@ -35,7 +35,6 @@ #include "gk20a/gk20a.h" #include "gk20a/mm_gk20a.h" -#include "gk20a/kind_gk20a.h" static void __nvgpu_vm_unmap(struct nvgpu_mapped_buf *mapped_buffer, struct vm_gk20a_mapping_batch *batch); @@ -829,123 +828,36 @@ done: return; } -int nvgpu_vm_init_kind_info(struct nvgpu_ctag_buffer_info *binfo, - s16 compr_kind, s16 incompr_kind) -{ - if (binfo->flags & NVGPU_AS_MAP_BUFFER_FLAGS_DIRECT_KIND_CTRL) { - /* were we supplied with a kind in either parameter? */ - if ((compr_kind < 0 || compr_kind >= NV_KIND_ATTR_SIZE) && - (incompr_kind < 0 || incompr_kind >= NV_KIND_ATTR_SIZE)) - return -EINVAL; - - if (compr_kind != NV_KIND_INVALID) { - binfo->use_kind_v = true; - binfo->kind_v = (u8)compr_kind; - } - - if (incompr_kind != NV_KIND_INVALID) { - binfo->use_uc_kind_v = true; - binfo->uc_kind_v = (u8)incompr_kind; - } - } else { - if (compr_kind < 0 || compr_kind >= NV_KIND_ATTR_SIZE) - return -EINVAL; - - binfo->use_kind_v = true; - binfo->kind_v = (u8)compr_kind; - - /* - * Note: nvgpu_vm_kind_and_compression() will figure out - * uc_kind_v or return an error. - */ - } - - return 0; -} - -static int nvgpu_vm_setup_kind_legacy(struct vm_gk20a *vm, - struct nvgpu_ctag_buffer_info *binfo, - bool *pkind_compressible) +int nvgpu_vm_compute_compression(struct vm_gk20a *vm, + struct nvgpu_ctag_buffer_info *binfo) { - struct gk20a *g = gk20a_from_vm(vm); - bool kind_compressible; - - if (unlikely(binfo->kind_v == g->ops.mm.get_kind_invalid())) - binfo->kind_v = g->ops.mm.get_kind_pitch(); - - if (unlikely(!gk20a_kind_is_supported(binfo->kind_v))) { - nvgpu_err(g, "kind 0x%x not supported", binfo->kind_v); - return -EINVAL; - } - - binfo->uc_kind_v = g->ops.mm.get_kind_invalid(); - - /* - * Find a suitable incompressible kind if it becomes necessary later. - */ - kind_compressible = gk20a_kind_is_compressible(binfo->kind_v); - if (kind_compressible) { - binfo->uc_kind_v = gk20a_get_uncompressed_kind(binfo->kind_v); - if (binfo->uc_kind_v == g->ops.mm.get_kind_invalid()) { - /* - * Shouldn't happen, but it is worth cross-checking. - */ - nvgpu_err(g, "comptag kind 0x%x can't be" - " downgraded to uncompressed kind", - binfo->kind_v); - return -EINVAL; - } - } - - *pkind_compressible = kind_compressible; - - return 0; -} - -int nvgpu_vm_compute_kind_and_compression(struct vm_gk20a *vm, - struct nvgpu_ctag_buffer_info *binfo) -{ - bool kind_compressible; + bool kind_compressible = (binfo->compr_kind != NV_KIND_INVALID); struct gk20a *g = gk20a_from_vm(vm); int ctag_granularity = g->ops.fb.compression_page_size(g); - if (!binfo->use_kind_v) - binfo->kind_v = g->ops.mm.get_kind_invalid(); - if (!binfo->use_uc_kind_v) - binfo->uc_kind_v = g->ops.mm.get_kind_invalid(); - - if (binfo->flags & NVGPU_AS_MAP_BUFFER_FLAGS_DIRECT_KIND_CTRL) { - kind_compressible = (binfo->kind_v != - g->ops.mm.get_kind_invalid()); - if (!kind_compressible) - binfo->kind_v = binfo->uc_kind_v; - } else { - int err = nvgpu_vm_setup_kind_legacy(vm, binfo, - &kind_compressible); - - if (err) - return err; - } - - /* comptags only supported for suitable kinds, 128KB pagesize */ if (kind_compressible && vm->gmmu_page_sizes[binfo->pgsz_idx] < g->ops.fb.compressible_page_size(g)) { - /* it is safe to fall back to uncompressed as - functionality is not harmed */ - binfo->kind_v = binfo->uc_kind_v; - kind_compressible = false; + /* + * Let's double check that there is a fallback kind + */ + if (binfo->incompr_kind == NV_KIND_INVALID) { + nvgpu_err(g, + "Unsupported page size for compressible " + "kind, but no fallback kind"); + return -EINVAL; + } else { + nvgpu_log(g, gpu_dbg_map, + "Unsupported page size for compressible " + "kind, demoting to incompressible"); + binfo->compr_kind = NV_KIND_INVALID; + kind_compressible = false; + } } if (kind_compressible) binfo->ctag_lines = DIV_ROUND_UP_ULL(binfo->size, ctag_granularity); - else - binfo->ctag_lines = 0; - - binfo->use_kind_v = (binfo->kind_v != g->ops.mm.get_kind_invalid()); - binfo->use_uc_kind_v = (binfo->uc_kind_v != - g->ops.mm.get_kind_invalid()); return 0; } diff --git a/drivers/gpu/nvgpu/gk20a/fb_gk20a.c b/drivers/gpu/nvgpu/gk20a/fb_gk20a.c index efe04dc2..a5a2cb51 100644 --- a/drivers/gpu/nvgpu/gk20a/fb_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/fb_gk20a.c @@ -25,7 +25,6 @@ #include #include "gk20a.h" -#include "kind_gk20a.h" #include "fb_gk20a.h" #include diff --git a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c index c59132f2..b77db87f 100644 --- a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c @@ -41,7 +41,6 @@ #include #include "gk20a.h" -#include "kind_gk20a.h" #include "gr_ctx_gk20a.h" #include "gr_pri_gk20a.h" #include "regops_gk20a.h" diff --git a/drivers/gpu/nvgpu/gk20a/kind_gk20a.c b/drivers/gpu/nvgpu/gk20a/kind_gk20a.c deleted file mode 100644 index 2d7eae0a..00000000 --- a/drivers/gpu/nvgpu/gk20a/kind_gk20a.c +++ /dev/null @@ -1,414 +0,0 @@ -/* - * GK20A memory kind management - * - * Copyright (c) 2011-2017, NVIDIA CORPORATION. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -#include "kind_gk20a.h" - -#include - -/* TBD: generate these from kind_macros.h */ - -/* - * Use noinline_for_stack for these huge functions, otherwise GCC 4.7 will - * blow up when building a coverage-enabled kernel. (error: the frame size of - * 1232 bytes is larger than 1024 bytes [-Werror=frame-larger-than=]) - */ - -/* note: taken from the !2cs_compression case */ -static noinline_for_stack bool gk20a_kind_supported(u8 k) -{ - return gk20a_kind_work_creation(k) - || (k == gmmu_pte_kind_invalid_v()) - || (k == gmmu_pte_kind_pitch_v()) - || (k >= gmmu_pte_kind_z16_v() && - k <= gmmu_pte_kind_z16_ms8_2c_v()) - || (k >= gmmu_pte_kind_z16_2z_v() && - k <= gmmu_pte_kind_z16_ms8_2z_v()) - || (k == gmmu_pte_kind_s8z24_v()) - || (k >= gmmu_pte_kind_s8z24_2cz_v() && - k <= gmmu_pte_kind_s8z24_ms8_2cz_v()) - || (k >= gmmu_pte_kind_v8z24_ms4_vc12_v() && - k <= gmmu_pte_kind_v8z24_ms8_vc24_v()) - || (k >= gmmu_pte_kind_v8z24_ms4_vc12_2czv_v() && - k <= gmmu_pte_kind_v8z24_ms8_vc24_2zv_v()) - || (k == gmmu_pte_kind_z24s8_v()) - || (k >= gmmu_pte_kind_z24s8_2cz_v() && - k <= gmmu_pte_kind_z24s8_ms8_2cz_v()) - || (k == gmmu_pte_kind_zf32_v()) - || (k >= gmmu_pte_kind_zf32_2cz_v() && - k <= gmmu_pte_kind_zf32_ms8_2cz_v()) - || (k >= gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_v() && - k <= gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_v()) - || (k >= gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_2cszv_v() && - k <= gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_v()) - || (k >= gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_2cszv_v() && - k <= gmmu_pte_kind_zf32_x24s8_v()) - || (k >= gmmu_pte_kind_zf32_x24s8_2cszv_v() && - k <= gmmu_pte_kind_zf32_x24s8_ms8_2cszv_v()) - || (k == gmmu_pte_kind_generic_16bx2_v()) - || (k == gmmu_pte_kind_c32_2c_v()) - || (k == gmmu_pte_kind_c32_2cra_v()) - || (k == gmmu_pte_kind_c32_ms2_2c_v()) - || (k == gmmu_pte_kind_c32_ms2_2cra_v()) - || (k >= gmmu_pte_kind_c32_ms4_2c_v() && - k <= gmmu_pte_kind_c32_ms4_2cbr_v()) - || (k >= gmmu_pte_kind_c32_ms4_2cra_v() && - k <= gmmu_pte_kind_c64_2c_v()) - || (k == gmmu_pte_kind_c64_2cra_v()) - || (k == gmmu_pte_kind_c64_ms2_2c_v()) - || (k == gmmu_pte_kind_c64_ms2_2cra_v()) - || (k >= gmmu_pte_kind_c64_ms4_2c_v() && - k <= gmmu_pte_kind_c64_ms4_2cbr_v()) - || (k >= gmmu_pte_kind_c64_ms4_2cra_v() && - k <= gmmu_pte_kind_c128_ms8_ms16_2cr_v()) - || (k == gmmu_pte_kind_pitch_no_swizzle_v()); -} - -static noinline_for_stack bool gk20a_kind_z(u8 k) -{ - return (k >= gmmu_pte_kind_z16_v() && - k <= gmmu_pte_kind_v8z24_ms8_vc24_v()) - || (k >= gmmu_pte_kind_v8z24_ms4_vc12_1zv_v() && - k <= gmmu_pte_kind_v8z24_ms8_vc24_2cs_v()) - || (k >= gmmu_pte_kind_v8z24_ms4_vc12_2czv_v() && - k <= gmmu_pte_kind_z24v8_ms8_vc24_v()) - || (k >= gmmu_pte_kind_z24v8_ms4_vc12_1zv_v() && - k <= gmmu_pte_kind_z24v8_ms8_vc24_2cs_v()) - || (k >= gmmu_pte_kind_z24v8_ms4_vc12_2czv_v() && - k <= gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_1cs_v()) - || (k >= gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_1zv_v() && - k <= gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_1cs_v()) - || (k >= gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_1zv_v() && - k <= gmmu_pte_kind_zf32_x24s8_ms16_1cs_v()); -} - -static noinline_for_stack bool gk20a_kind_c(u8 k) -{ - return gk20a_kind_work_creation(k) - || (k == gmmu_pte_kind_pitch_v()) - || (k == gmmu_pte_kind_generic_16bx2_v()) - || (k >= gmmu_pte_kind_c32_2c_v() && - k <= gmmu_pte_kind_c32_ms2_2cbr_v()) - || (k == gmmu_pte_kind_c32_ms2_2cra_v()) - || (k >= gmmu_pte_kind_c32_ms4_2c_v() && - k <= gmmu_pte_kind_c64_ms2_2cbr_v()) - || (k == gmmu_pte_kind_c64_ms2_2cra_v()) - || (k >= gmmu_pte_kind_c64_ms4_2c_v() && - k <= gmmu_pte_kind_pitch_no_swizzle_v()); -} - -static noinline_for_stack bool gk20a_kind_compressible(u8 k) -{ - return (k >= gmmu_pte_kind_z16_2c_v() && - k <= gmmu_pte_kind_z16_ms16_4cz_v()) - || (k >= gmmu_pte_kind_s8z24_1z_v() && - k <= gmmu_pte_kind_s8z24_ms16_4cszv_v()) - || (k >= gmmu_pte_kind_v8z24_ms4_vc12_1zv_v() && - k <= gmmu_pte_kind_v8z24_ms8_vc24_2cs_v()) - || (k >= gmmu_pte_kind_v8z24_ms4_vc12_2czv_v() && - k <= gmmu_pte_kind_v8z24_ms8_vc24_4cszv_v()) - || (k >= gmmu_pte_kind_z24s8_1z_v() && - k <= gmmu_pte_kind_z24s8_ms16_4cszv_v()) - || (k >= gmmu_pte_kind_z24v8_ms4_vc12_1zv_v() && - k <= gmmu_pte_kind_z24v8_ms8_vc24_2cs_v()) - || (k >= gmmu_pte_kind_z24v8_ms4_vc12_2czv_v() && - k <= gmmu_pte_kind_z24v8_ms8_vc24_4cszv_v()) - || (k >= gmmu_pte_kind_zf32_1z_v() && - k <= gmmu_pte_kind_zf32_ms16_2cz_v()) - || (k >= gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_1cs_v() && - k <= gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_1cs_v()) - || (k >= gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_1zv_v() && - k <= gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_2cszv_v()) - || (k >= gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_1cs_v() && - k <= gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_1cs_v()) - || (k >= gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_1zv_v() && - k <= gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_2cszv_v()) - || (k >= gmmu_pte_kind_zf32_x24s8_1cs_v() && - k <= gmmu_pte_kind_zf32_x24s8_ms16_1cs_v()) - || (k >= gmmu_pte_kind_zf32_x24s8_2cszv_v() && - k <= gmmu_pte_kind_c32_ms2_2cbr_v()) - || (k == gmmu_pte_kind_c32_ms2_2cra_v()) - || (k >= gmmu_pte_kind_c32_ms4_2c_v() && - k <= gmmu_pte_kind_c64_ms2_2cbr_v()) - || (k == gmmu_pte_kind_c64_ms2_2cra_v()) - || (k >= gmmu_pte_kind_c64_ms4_2c_v() && - k <= gmmu_pte_kind_c128_ms8_ms16_2cr_v()); -} - -static noinline_for_stack bool gk20a_kind_zbc(u8 k) -{ - return (k >= gmmu_pte_kind_z16_2c_v() && - k <= gmmu_pte_kind_z16_ms16_2c_v()) - || (k >= gmmu_pte_kind_z16_4cz_v() && - k <= gmmu_pte_kind_z16_ms16_4cz_v()) - || (k >= gmmu_pte_kind_s8z24_2cz_v() && - k <= gmmu_pte_kind_s8z24_ms16_4cszv_v()) - || (k >= gmmu_pte_kind_v8z24_ms4_vc12_2cs_v() && - k <= gmmu_pte_kind_v8z24_ms8_vc24_2cs_v()) - || (k >= gmmu_pte_kind_v8z24_ms4_vc12_2czv_v() && - k <= gmmu_pte_kind_v8z24_ms8_vc24_2czv_v()) - || (k >= gmmu_pte_kind_v8z24_ms4_vc12_4cszv_v() && - k <= gmmu_pte_kind_v8z24_ms8_vc24_4cszv_v()) - || (k >= gmmu_pte_kind_z24s8_2cs_v() && - k <= gmmu_pte_kind_z24s8_ms16_4cszv_v()) - || (k >= gmmu_pte_kind_z24v8_ms4_vc12_2cs_v() && - k <= gmmu_pte_kind_z24v8_ms8_vc24_2cs_v()) - || (k >= gmmu_pte_kind_z24v8_ms4_vc12_2czv_v() && - k <= gmmu_pte_kind_z24v8_ms8_vc24_2czv_v()) - || (k >= gmmu_pte_kind_z24v8_ms4_vc12_4cszv_v() && - k <= gmmu_pte_kind_z24v8_ms8_vc24_4cszv_v()) - || (k >= gmmu_pte_kind_zf32_2cs_v() && - k <= gmmu_pte_kind_zf32_ms16_2cz_v()) - || (k >= gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_1cs_v() && - k <= gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_1cs_v()) - || (k >= gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_1czv_v() && - k <= gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_2cszv_v()) - || (k >= gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_1cs_v() && - k <= gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_1cs_v()) - || (k >= gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_1czv_v() && - k <= gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_2cszv_v()) - || (k >= gmmu_pte_kind_zf32_x24s8_1cs_v() && - k <= gmmu_pte_kind_zf32_x24s8_ms16_1cs_v()) - || (k >= gmmu_pte_kind_zf32_x24s8_2cszv_v() && - k <= gmmu_pte_kind_c32_2cra_v()) - || (k >= gmmu_pte_kind_c32_ms2_2c_v() && - k <= gmmu_pte_kind_c32_ms2_2cbr_v()) - || (k == gmmu_pte_kind_c32_ms2_2cra_v()) - || (k >= gmmu_pte_kind_c32_ms4_2c_v() && - k <= gmmu_pte_kind_c32_ms4_2cra_v()) - || (k >= gmmu_pte_kind_c32_ms8_ms16_2c_v() && - k <= gmmu_pte_kind_c64_2cra_v()) - || (k >= gmmu_pte_kind_c64_ms2_2c_v() && - k <= gmmu_pte_kind_c64_ms2_2cbr_v()) - || (k == gmmu_pte_kind_c64_ms2_2cra_v()) - || (k >= gmmu_pte_kind_c64_ms4_2c_v() && - k <= gmmu_pte_kind_c64_ms4_2cra_v()) - || (k >= gmmu_pte_kind_c64_ms8_ms16_2c_v() && - k <= gmmu_pte_kind_c128_ms8_ms16_2cr_v()); -} - -u8 gk20a_uc_kind_map[256]; -void gk20a_init_uncompressed_kind_map(void) -{ - int i; - for (i = 0; i < 256; i++) - gk20a_uc_kind_map[i] = gmmu_pte_kind_invalid_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_z16_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z16_2c_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z16_ms2_2c_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z16_ms4_2c_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z16_ms8_2c_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z16_2z_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z16_ms2_2z_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z16_ms4_2z_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z16_ms8_2z_v()] = - gmmu_pte_kind_z16_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_s8z24_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_s8z24_2cz_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_s8z24_ms2_2cz_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_s8z24_ms4_2cz_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_s8z24_ms8_2cz_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_s8z24_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_s8z24_ms2_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_s8z24_ms4_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_s8z24_ms8_2cs_v()] = - gmmu_pte_kind_s8z24_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc4_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc4_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc4_2czv_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc4_2zv_v()] = - gmmu_pte_kind_v8z24_ms4_vc4_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc8_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc8_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc8_2czv_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc8_2zv_v()] = - gmmu_pte_kind_v8z24_ms8_vc8_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc12_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc12_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc12_2czv_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc12_2zv_v()] = - gmmu_pte_kind_v8z24_ms4_vc12_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc24_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc24_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc24_2czv_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc24_2zv_v()] = - gmmu_pte_kind_v8z24_ms8_vc24_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_z24s8_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z24s8_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z24s8_ms2_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z24s8_ms4_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z24s8_ms8_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z24s8_2cz_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z24s8_ms2_2cz_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z24s8_ms4_2cz_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z24s8_ms8_2cz_v()] = - gmmu_pte_kind_z24s8_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_zf32_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_ms2_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_ms4_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_ms8_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_2cz_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_ms2_2cz_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_ms4_2cz_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_ms8_2cz_v()] = - gmmu_pte_kind_zf32_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_2cszv_v()] = - gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms4_vc4_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms4_vc4_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms4_vc4_2cszv_v()] = - gmmu_pte_kind_x8z24_x16v8s8_ms4_vc4_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms8_vc8_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms8_vc8_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms8_vc8_2cszv_v()] = - gmmu_pte_kind_x8z24_x16v8s8_ms8_vc8_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_2cszv_v()] = - gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_2cszv_v()] = - gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms4_vc4_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms4_vc4_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms4_vc4_2cszv_v()] = - gmmu_pte_kind_zf32_x16v8s8_ms4_vc4_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms8_vc8_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms8_vc8_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms8_vc8_2cszv_v()] = - gmmu_pte_kind_zf32_x16v8s8_ms8_vc8_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_2cszv_v()] = - gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_2cszv_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_ms2_2cszv_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_ms4_2cszv_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_ms8_2cszv_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_ms2_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_ms4_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_ms8_2cs_v()] = - gmmu_pte_kind_zf32_x24s8_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_c32_2c_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c32_2cba_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c32_2cra_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c32_2bra_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c32_ms2_2c_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c32_ms2_2cra_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c32_ms4_2c_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c32_ms4_2cbr_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c32_ms4_2cba_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c32_ms4_2cra_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c32_ms4_2bra_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c32_ms8_ms16_2c_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c32_ms8_ms16_2cra_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c64_2c_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c64_2cbr_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c64_2cba_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c64_2cra_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c64_2bra_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c64_ms2_2c_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c64_ms2_2cra_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c64_ms4_2c_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c64_ms4_2cbr_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c64_ms4_2cba_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c64_ms4_2cra_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c64_ms4_2bra_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c64_ms8_ms16_2c_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c64_ms8_ms16_2cra_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c128_2c_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c128_2cr_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c128_ms2_2c_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c128_ms2_2cr_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c128_ms4_2c_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c128_ms4_2cr_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c128_ms8_ms16_2c_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c128_ms8_ms16_2cr_v()] = - gmmu_pte_kind_generic_16bx2_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms4_vc4_2czv_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms4_vc4_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms4_vc4_2zv_v()] = - gmmu_pte_kind_z24v8_ms4_vc4_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms4_vc12_2czv_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms4_vc12_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms4_vc12_2zv_v()] = - gmmu_pte_kind_z24v8_ms4_vc12_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms8_vc8_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms8_vc8_2czv_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms8_vc8_2zv_v()] = - gmmu_pte_kind_z24v8_ms8_vc8_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms8_vc24_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms8_vc24_2czv_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms8_vc24_2zv_v()] = - gmmu_pte_kind_z24v8_ms8_vc24_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_x8c24_v()] = - gmmu_pte_kind_x8c24_v(); -} - -u16 gk20a_kind_attr[NV_KIND_ATTR_SIZE]; -void gk20a_init_kind_attr(void) -{ - u16 k; - for (k = 0; k < NV_KIND_ATTR_SIZE; k++) { - gk20a_kind_attr[k] = 0; - if (gk20a_kind_supported((u8)k)) - gk20a_kind_attr[k] |= GK20A_KIND_ATTR_SUPPORTED; - if (gk20a_kind_compressible((u8)k)) - gk20a_kind_attr[k] |= GK20A_KIND_ATTR_COMPRESSIBLE; - if (gk20a_kind_z((u8)k)) - gk20a_kind_attr[k] |= GK20A_KIND_ATTR_Z; - if (gk20a_kind_c((u8)k)) - gk20a_kind_attr[k] |= GK20A_KIND_ATTR_C; - if (gk20a_kind_zbc((u8)k)) - gk20a_kind_attr[k] |= GK20A_KIND_ATTR_ZBC; - } -} diff --git a/drivers/gpu/nvgpu/gk20a/kind_gk20a.h b/drivers/gpu/nvgpu/gk20a/kind_gk20a.h deleted file mode 100644 index da7c13cd..00000000 --- a/drivers/gpu/nvgpu/gk20a/kind_gk20a.h +++ /dev/null @@ -1,90 +0,0 @@ -/* - * drivers/video/tegra/host/gk20a/kind_gk20a.h - * - * GK20A memory kind management - * - * Copyright (c) 2011-2017, NVIDIA CORPORATION. All rights reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ -#ifndef __KIND_GK20A_H__ -#define __KIND_GK20A_H__ - -#include - -void gk20a_init_uncompressed_kind_map(void); -void gk20a_init_kind_attr(void); - -extern u16 gk20a_kind_attr[]; -#define NV_KIND_ATTR_SIZE 256 -#define NV_KIND_DEFAULT -1 - -#define GK20A_KIND_ATTR_SUPPORTED BIT(0) -#define GK20A_KIND_ATTR_COMPRESSIBLE BIT(1) -#define GK20A_KIND_ATTR_Z BIT(2) -#define GK20A_KIND_ATTR_C BIT(3) -#define GK20A_KIND_ATTR_ZBC BIT(4) - -/* TBD: not sure on the work creation for gk20a, doubtful */ -static inline bool gk20a_kind_work_creation_sked(u8 k) -{ - return false; -} -static inline bool gk20a_kind_work_creation_host(u8 k) -{ - return false; -} - -static inline bool gk20a_kind_work_creation(u8 k) -{ - return gk20a_kind_work_creation_sked(k) || - gk20a_kind_work_creation_host(k); -} - -static inline bool gk20a_kind_is_supported(u8 k) -{ - return !!(gk20a_kind_attr[k] & GK20A_KIND_ATTR_SUPPORTED); -} -static inline bool gk20a_kind_is_compressible(u8 k) -{ - return !!(gk20a_kind_attr[k] & GK20A_KIND_ATTR_COMPRESSIBLE); -} - -static inline bool gk20a_kind_is_z(u8 k) -{ - return !!(gk20a_kind_attr[k] & GK20A_KIND_ATTR_Z); -} - -static inline bool gk20a_kind_is_c(u8 k) -{ - return !!(gk20a_kind_attr[k] & GK20A_KIND_ATTR_C); -} -static inline bool gk20a_kind_is_zbc(u8 k) -{ - return !!(gk20a_kind_attr[k] & GK20A_KIND_ATTR_ZBC); -} - -/* maps kind to its uncompressed version */ -extern u8 gk20a_uc_kind_map[]; -static inline u8 gk20a_get_uncompressed_kind(u8 k) -{ - return gk20a_uc_kind_map[k]; -} - -#endif /* __KIND_GK20A_H__ */ diff --git a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c index d54e8d43..759ef816 100644 --- a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c @@ -43,7 +43,6 @@ #include "gk20a.h" #include "mm_gk20a.h" #include "fence_gk20a.h" -#include "kind_gk20a.h" #include "bus_gk20a.h" #include diff --git a/drivers/gpu/nvgpu/gm20b/fb_gm20b.c b/drivers/gpu/nvgpu/gm20b/fb_gm20b.c index d23c4787..1f8cc326 100644 --- a/drivers/gpu/nvgpu/gm20b/fb_gm20b.c +++ b/drivers/gpu/nvgpu/gm20b/fb_gm20b.c @@ -23,7 +23,6 @@ */ #include "gk20a/gk20a.h" -#include "gk20a/kind_gk20a.h" #include "gk20a/fb_gk20a.h" #include "gm20b/fb_gm20b.h" @@ -43,407 +42,6 @@ void fb_gm20b_init_fs_state(struct gk20a *g) g->ltc_count); } -noinline_for_stack void gm20b_init_uncompressed_kind_map(void) -{ - int i; - - for (i = 0; i < 256; i++) - gk20a_uc_kind_map[i] = gmmu_pte_kind_invalid_v(); - - /* From gm20b */ - gk20a_uc_kind_map[gmmu_pte_kind_s8_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_s8_2s_v()] = - gmmu_pte_kind_s8_v(); - - /* From gk20a */ - gk20a_uc_kind_map[gmmu_pte_kind_z16_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z16_2c_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z16_ms2_2c_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z16_ms4_2c_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z16_ms8_2c_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z16_2z_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z16_ms2_2z_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z16_ms4_2z_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z16_ms8_2z_v()] = - gmmu_pte_kind_z16_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_s8z24_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_s8z24_2cz_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_s8z24_ms2_2cz_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_s8z24_ms4_2cz_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_s8z24_ms8_2cz_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_s8z24_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_s8z24_ms2_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_s8z24_ms4_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_s8z24_ms8_2cs_v()] = - gmmu_pte_kind_s8z24_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc4_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc4_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc4_2czv_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc4_2zv_v()] = - gmmu_pte_kind_v8z24_ms4_vc4_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc8_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc8_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc8_2czv_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc8_2zv_v()] = - gmmu_pte_kind_v8z24_ms8_vc8_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc12_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc12_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc12_2czv_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc12_2zv_v()] = - gmmu_pte_kind_v8z24_ms4_vc12_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc24_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc24_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc24_2czv_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc24_2zv_v()] = - gmmu_pte_kind_v8z24_ms8_vc24_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_z24s8_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z24s8_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z24s8_ms2_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z24s8_ms4_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z24s8_ms8_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z24s8_2cz_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z24s8_ms2_2cz_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z24s8_ms4_2cz_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z24s8_ms8_2cz_v()] = - gmmu_pte_kind_z24s8_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_zf32_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_ms2_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_ms4_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_ms8_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_2cz_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_ms2_2cz_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_ms4_2cz_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_ms8_2cz_v()] = - gmmu_pte_kind_zf32_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_2cszv_v()] = - gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms4_vc4_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms4_vc4_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms4_vc4_2cszv_v()] = - gmmu_pte_kind_x8z24_x16v8s8_ms4_vc4_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms8_vc8_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms8_vc8_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms8_vc8_2cszv_v()] = - gmmu_pte_kind_x8z24_x16v8s8_ms8_vc8_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_2cszv_v()] = - gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_2cszv_v()] = - gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms4_vc4_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms4_vc4_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms4_vc4_2cszv_v()] = - gmmu_pte_kind_zf32_x16v8s8_ms4_vc4_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms8_vc8_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms8_vc8_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms8_vc8_2cszv_v()] = - gmmu_pte_kind_zf32_x16v8s8_ms8_vc8_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_2cszv_v()] = - gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_2cszv_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_ms2_2cszv_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_ms4_2cszv_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_ms8_2cszv_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_ms2_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_ms4_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_ms8_2cs_v()] = - gmmu_pte_kind_zf32_x24s8_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_c32_2c_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c32_2cba_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c32_2cra_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c32_2bra_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c32_ms2_2c_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c32_ms2_2cra_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c32_ms4_2c_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c32_ms4_2cbr_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c32_ms4_2cba_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c32_ms4_2cra_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c32_ms4_2bra_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c32_ms8_ms16_2c_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c32_ms8_ms16_2cra_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c64_2c_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c64_2cbr_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c64_2cba_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c64_2cra_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c64_2bra_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c64_ms2_2c_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c64_ms2_2cra_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c64_ms4_2c_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c64_ms4_2cbr_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c64_ms4_2cba_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c64_ms4_2cra_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c64_ms4_2bra_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c64_ms8_ms16_2c_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c64_ms8_ms16_2cra_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c128_2c_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c128_2cr_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c128_ms2_2c_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c128_ms2_2cr_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c128_ms4_2c_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c128_ms4_2cr_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c128_ms8_ms16_2c_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c128_ms8_ms16_2cr_v()] = - gmmu_pte_kind_generic_16bx2_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms4_vc4_2czv_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms4_vc4_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms4_vc4_2zv_v()] = - gmmu_pte_kind_z24v8_ms4_vc4_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms4_vc12_2czv_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms4_vc12_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms4_vc12_2zv_v()] = - gmmu_pte_kind_z24v8_ms4_vc12_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms8_vc8_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms8_vc8_2czv_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms8_vc8_2zv_v()] = - gmmu_pte_kind_z24v8_ms8_vc8_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms8_vc24_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms8_vc24_2czv_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms8_vc24_2zv_v()] = - gmmu_pte_kind_z24v8_ms8_vc24_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_x8c24_v()] = - gmmu_pte_kind_x8c24_v(); -} - -static noinline_for_stack bool gm20b_kind_supported(u8 k) -{ - return /* From gm20b */ - (k == gmmu_pte_kind_smsked_message_v()) - || (k >= gmmu_pte_kind_s8_v() && - k <= gmmu_pte_kind_s8_2s_v()) - /* From gk20a */ - || gk20a_kind_work_creation(k) - || (k == gmmu_pte_kind_invalid_v()) - || (k == gmmu_pte_kind_pitch_v()) - || (k >= gmmu_pte_kind_z16_v() && - k <= gmmu_pte_kind_z16_ms8_2c_v()) - || (k >= gmmu_pte_kind_z16_2z_v() && - k <= gmmu_pte_kind_z16_ms8_2z_v()) - || (k == gmmu_pte_kind_s8z24_v()) - || (k >= gmmu_pte_kind_s8z24_2cz_v() && - k <= gmmu_pte_kind_s8z24_ms8_2cz_v()) - || (k >= gmmu_pte_kind_v8z24_ms4_vc12_v() && - k <= gmmu_pte_kind_v8z24_ms8_vc24_v()) - || (k >= gmmu_pte_kind_v8z24_ms4_vc12_2czv_v() && - k <= gmmu_pte_kind_v8z24_ms8_vc24_2zv_v()) - || (k == gmmu_pte_kind_z24s8_v()) - || (k >= gmmu_pte_kind_z24s8_2cz_v() && - k <= gmmu_pte_kind_z24s8_ms8_2cz_v()) - || (k == gmmu_pte_kind_zf32_v()) - || (k >= gmmu_pte_kind_zf32_2cz_v() && - k <= gmmu_pte_kind_zf32_ms8_2cz_v()) - || (k >= gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_v() && - k <= gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_v()) - || (k >= gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_2cszv_v() && - k <= gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_v()) - || (k >= gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_2cszv_v() && - k <= gmmu_pte_kind_zf32_x24s8_v()) - || (k >= gmmu_pte_kind_zf32_x24s8_2cszv_v() && - k <= gmmu_pte_kind_zf32_x24s8_ms8_2cszv_v()) - || (k == gmmu_pte_kind_generic_16bx2_v()) - || (k == gmmu_pte_kind_c32_2c_v()) - || (k == gmmu_pte_kind_c32_2cra_v()) - || (k == gmmu_pte_kind_c32_ms2_2c_v()) - || (k == gmmu_pte_kind_c32_ms2_2cra_v()) - || (k >= gmmu_pte_kind_c32_ms4_2c_v() && - k <= gmmu_pte_kind_c32_ms4_2cbr_v()) - || (k >= gmmu_pte_kind_c32_ms4_2cra_v() && - k <= gmmu_pte_kind_c64_2c_v()) - || (k == gmmu_pte_kind_c64_2cra_v()) - || (k == gmmu_pte_kind_c64_ms2_2c_v()) - || (k == gmmu_pte_kind_c64_ms2_2cra_v()) - || (k >= gmmu_pte_kind_c64_ms4_2c_v() && - k <= gmmu_pte_kind_c64_ms4_2cbr_v()) - || (k >= gmmu_pte_kind_c64_ms4_2cra_v() && - k <= gmmu_pte_kind_c128_ms8_ms16_2cr_v()) - || (k == gmmu_pte_kind_pitch_no_swizzle_v()); -} - -static noinline_for_stack bool gm20b_kind_z(u8 k) -{ - return /* From gm20b */ - (k >= gmmu_pte_kind_s8_v() && - k <= gmmu_pte_kind_s8_2s_v()) - /* From gk20a */ - || (k >= gmmu_pte_kind_z16_v() && - k <= gmmu_pte_kind_v8z24_ms8_vc24_v()) - || (k >= gmmu_pte_kind_v8z24_ms4_vc12_1zv_v() && - k <= gmmu_pte_kind_v8z24_ms8_vc24_2cs_v()) - || (k >= gmmu_pte_kind_v8z24_ms4_vc12_2czv_v() && - k <= gmmu_pte_kind_z24v8_ms8_vc24_v()) - || (k >= gmmu_pte_kind_z24v8_ms4_vc12_1zv_v() && - k <= gmmu_pte_kind_z24v8_ms8_vc24_2cs_v()) - || (k >= gmmu_pte_kind_z24v8_ms4_vc12_2czv_v() && - k <= gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_1cs_v()) - || (k >= gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_1zv_v() && - k <= gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_1cs_v()) - || (k >= gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_1zv_v() && - k <= gmmu_pte_kind_zf32_x24s8_ms16_1cs_v()); -} - -static noinline_for_stack bool gm20b_kind_c(u8 k) -{ - return gk20a_kind_work_creation(k) - || (k == gmmu_pte_kind_pitch_v()) - || (k == gmmu_pte_kind_generic_16bx2_v()) - || (k >= gmmu_pte_kind_c32_2c_v() && - k <= gmmu_pte_kind_c32_ms2_2cbr_v()) - || (k == gmmu_pte_kind_c32_ms2_2cra_v()) - || (k >= gmmu_pte_kind_c32_ms4_2c_v() && - k <= gmmu_pte_kind_c64_ms2_2cbr_v()) - || (k == gmmu_pte_kind_c64_ms2_2cra_v()) - || (k >= gmmu_pte_kind_c64_ms4_2c_v() && - k <= gmmu_pte_kind_pitch_no_swizzle_v()); -} - -static noinline_for_stack bool gm20b_kind_compressible(u8 k) -{ - return /* From gm20b */ - (k >= gmmu_pte_kind_s8_v() && - k <= gmmu_pte_kind_s8_2s_v()) - /* From gk20a */ - || (k >= gmmu_pte_kind_z16_2c_v() && - k <= gmmu_pte_kind_z16_ms16_4cz_v()) - || (k >= gmmu_pte_kind_s8z24_1z_v() && - k <= gmmu_pte_kind_s8z24_ms16_4cszv_v()) - || (k >= gmmu_pte_kind_v8z24_ms4_vc12_1zv_v() && - k <= gmmu_pte_kind_v8z24_ms8_vc24_2cs_v()) - || (k >= gmmu_pte_kind_v8z24_ms4_vc12_2czv_v() && - k <= gmmu_pte_kind_v8z24_ms8_vc24_4cszv_v()) - || (k >= gmmu_pte_kind_z24s8_1z_v() && - k <= gmmu_pte_kind_z24s8_ms16_4cszv_v()) - || (k >= gmmu_pte_kind_z24v8_ms4_vc12_1zv_v() && - k <= gmmu_pte_kind_z24v8_ms8_vc24_2cs_v()) - || (k >= gmmu_pte_kind_z24v8_ms4_vc12_2czv_v() && - k <= gmmu_pte_kind_z24v8_ms8_vc24_4cszv_v()) - || (k >= gmmu_pte_kind_zf32_1z_v() && - k <= gmmu_pte_kind_zf32_ms16_2cz_v()) - || (k >= gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_1cs_v() && - k <= gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_1cs_v()) - || (k >= gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_1zv_v() && - k <= gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_2cszv_v()) - || (k >= gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_1cs_v() && - k <= gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_1cs_v()) - || (k >= gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_1zv_v() && - k <= gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_2cszv_v()) - || (k >= gmmu_pte_kind_zf32_x24s8_1cs_v() && - k <= gmmu_pte_kind_zf32_x24s8_ms16_1cs_v()) - || (k >= gmmu_pte_kind_zf32_x24s8_2cszv_v() && - k <= gmmu_pte_kind_c32_ms2_2cbr_v()) - || (k == gmmu_pte_kind_c32_ms2_2cra_v()) - || (k >= gmmu_pte_kind_c32_ms4_2c_v() && - k <= gmmu_pte_kind_c64_ms2_2cbr_v()) - || (k == gmmu_pte_kind_c64_ms2_2cra_v()) - || (k >= gmmu_pte_kind_c64_ms4_2c_v() && - k <= gmmu_pte_kind_c128_ms8_ms16_2cr_v()); -} - -static noinline_for_stack bool gm20b_kind_zbc(u8 k) -{ - return /* From gm20b */ - (k >= gmmu_pte_kind_s8_v() && - k <= gmmu_pte_kind_s8_2s_v()) - /* From gk20a */ - || (k >= gmmu_pte_kind_z16_2c_v() && - k <= gmmu_pte_kind_z16_ms16_2c_v()) - || (k >= gmmu_pte_kind_z16_4cz_v() && - k <= gmmu_pte_kind_z16_ms16_4cz_v()) - || (k >= gmmu_pte_kind_s8z24_2cz_v() && - k <= gmmu_pte_kind_s8z24_ms16_4cszv_v()) - || (k >= gmmu_pte_kind_v8z24_ms4_vc12_2cs_v() && - k <= gmmu_pte_kind_v8z24_ms8_vc24_2cs_v()) - || (k >= gmmu_pte_kind_v8z24_ms4_vc12_2czv_v() && - k <= gmmu_pte_kind_v8z24_ms8_vc24_2czv_v()) - || (k >= gmmu_pte_kind_v8z24_ms4_vc12_4cszv_v() && - k <= gmmu_pte_kind_v8z24_ms8_vc24_4cszv_v()) - || (k >= gmmu_pte_kind_z24s8_2cs_v() && - k <= gmmu_pte_kind_z24s8_ms16_4cszv_v()) - || (k >= gmmu_pte_kind_z24v8_ms4_vc12_2cs_v() && - k <= gmmu_pte_kind_z24v8_ms8_vc24_2cs_v()) - || (k >= gmmu_pte_kind_z24v8_ms4_vc12_2czv_v() && - k <= gmmu_pte_kind_z24v8_ms8_vc24_2czv_v()) - || (k >= gmmu_pte_kind_z24v8_ms4_vc12_4cszv_v() && - k <= gmmu_pte_kind_z24v8_ms8_vc24_4cszv_v()) - || (k >= gmmu_pte_kind_zf32_2cs_v() && - k <= gmmu_pte_kind_zf32_ms16_2cz_v()) - || (k >= gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_1cs_v() && - k <= gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_1cs_v()) - || (k >= gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_1czv_v() && - k <= gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_2cszv_v()) - || (k >= gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_1cs_v() && - k <= gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_1cs_v()) - || (k >= gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_1czv_v() && - k <= gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_2cszv_v()) - || (k >= gmmu_pte_kind_zf32_x24s8_1cs_v() && - k <= gmmu_pte_kind_zf32_x24s8_ms16_1cs_v()) - || (k >= gmmu_pte_kind_zf32_x24s8_2cszv_v() && - k <= gmmu_pte_kind_c32_2cra_v()) - || (k >= gmmu_pte_kind_c32_ms2_2c_v() && - k <= gmmu_pte_kind_c32_ms2_2cbr_v()) - || (k == gmmu_pte_kind_c32_ms2_2cra_v()) - || (k >= gmmu_pte_kind_c32_ms4_2c_v() && - k <= gmmu_pte_kind_c32_ms4_2cra_v()) - || (k >= gmmu_pte_kind_c32_ms8_ms16_2c_v() && - k <= gmmu_pte_kind_c64_2cra_v()) - || (k >= gmmu_pte_kind_c64_ms2_2c_v() && - k <= gmmu_pte_kind_c64_ms2_2cbr_v()) - || (k == gmmu_pte_kind_c64_ms2_2cra_v()) - || (k >= gmmu_pte_kind_c64_ms4_2c_v() && - k <= gmmu_pte_kind_c64_ms4_2cra_v()) - || (k >= gmmu_pte_kind_c64_ms8_ms16_2c_v() && - k <= gmmu_pte_kind_c128_ms8_ms16_2cr_v()); -} - -void gm20b_init_kind_attr(void) -{ - u16 k; - - for (k = 0; k < NV_KIND_ATTR_SIZE; k++) { - gk20a_kind_attr[k] = 0; - if (gm20b_kind_supported((u8)k)) - gk20a_kind_attr[k] |= GK20A_KIND_ATTR_SUPPORTED; - if (gm20b_kind_compressible((u8)k)) - gk20a_kind_attr[k] |= GK20A_KIND_ATTR_COMPRESSIBLE; - if (gm20b_kind_z((u8)k)) - gk20a_kind_attr[k] |= GK20A_KIND_ATTR_Z; - if (gm20b_kind_c((u8)k)) - gk20a_kind_attr[k] |= GK20A_KIND_ATTR_C; - if (gm20b_kind_zbc((u8)k)) - gk20a_kind_attr[k] |= GK20A_KIND_ATTR_ZBC; - } -} - void gm20b_fb_set_mmu_page_size(struct gk20a *g) { /* set large page size in fb */ diff --git a/drivers/gpu/nvgpu/gm20b/fb_gm20b.h b/drivers/gpu/nvgpu/gm20b/fb_gm20b.h index 1bc0c14c..32d36f57 100644 --- a/drivers/gpu/nvgpu/gm20b/fb_gm20b.h +++ b/drivers/gpu/nvgpu/gm20b/fb_gm20b.h @@ -37,6 +37,4 @@ int gm20b_fb_vpr_info_fetch(struct gk20a *g); bool gm20b_fb_debug_mode_enabled(struct gk20a *g); void gm20b_fb_set_debug_mode(struct gk20a *g, bool enable); -void gm20b_init_uncompressed_kind_map(void); -void gm20b_init_kind_attr(void); #endif diff --git a/drivers/gpu/nvgpu/gm20b/hal_gm20b.c b/drivers/gpu/nvgpu/gm20b/hal_gm20b.c index 20ab808a..42df76c9 100644 --- a/drivers/gpu/nvgpu/gm20b/hal_gm20b.c +++ b/drivers/gpu/nvgpu/gm20b/hal_gm20b.c @@ -703,9 +703,6 @@ int gm20b_init_hal(struct gk20a *g) g->pmu_lsf_pmu_wpr_init_done = 0; g->bootstrap_owner = LSF_BOOTSTRAP_OWNER_DEFAULT; - gm20b_init_uncompressed_kind_map(); - gm20b_init_kind_attr(); - g->name = "gm20b"; return 0; diff --git a/drivers/gpu/nvgpu/gp106/hal_gp106.c b/drivers/gpu/nvgpu/gp106/hal_gp106.c index 931780d5..09c82af8 100644 --- a/drivers/gpu/nvgpu/gp106/hal_gp106.c +++ b/drivers/gpu/nvgpu/gp106/hal_gp106.c @@ -769,9 +769,6 @@ int gp106_init_hal(struct gk20a *g) g->pmu_lsf_pmu_wpr_init_done = 0; g->bootstrap_owner = LSF_FALCON_ID_SEC2; - gp10b_init_uncompressed_kind_map(); - gp10b_init_kind_attr(); - g->name = "gp10x"; gk20a_dbg_fn("done"); diff --git a/drivers/gpu/nvgpu/gp10b/fb_gp10b.c b/drivers/gpu/nvgpu/gp10b/fb_gp10b.c index a66476b9..9df4c851 100644 --- a/drivers/gpu/nvgpu/gp10b/fb_gp10b.c +++ b/drivers/gpu/nvgpu/gp10b/fb_gp10b.c @@ -23,448 +23,8 @@ */ #include "gk20a/gk20a.h" -#include "gm20b/fb_gm20b.h" -#include "gk20a/kind_gk20a.h" #include "fb_gp10b.h" -#include - -noinline_for_stack void gp10b_init_uncompressed_kind_map(void) -{ - int i; - - for (i = 0; i < 256; i++) - gk20a_uc_kind_map[i] = gmmu_pte_kind_invalid_v(); - - /* From gp10b */ - gk20a_uc_kind_map[gmmu_pte_kind_z16_2cz_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z16_ms2_2cz_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z16_ms4_2cz_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z16_ms8_2cz_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z16_ms16_2cz_v()] = - gmmu_pte_kind_z16_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_c32_ms4_4cbra_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c64_ms4_4cbra_v()] = - gmmu_pte_kind_generic_16bx2_v(); - - /* From gm20b */ - gk20a_uc_kind_map[gmmu_pte_kind_s8_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_s8_2s_v()] = - gmmu_pte_kind_s8_v(); - - /* From gk20a */ - gk20a_uc_kind_map[gmmu_pte_kind_z16_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z16_2c_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z16_ms2_2c_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z16_ms4_2c_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z16_ms8_2c_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z16_2z_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z16_ms2_2z_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z16_ms4_2z_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z16_ms8_2z_v()] = - gmmu_pte_kind_z16_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_s8z24_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_s8z24_2cz_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_s8z24_ms2_2cz_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_s8z24_ms4_2cz_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_s8z24_ms8_2cz_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_s8z24_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_s8z24_ms2_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_s8z24_ms4_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_s8z24_ms8_2cs_v()] = - gmmu_pte_kind_s8z24_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc4_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc4_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc4_2czv_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc4_2zv_v()] = - gmmu_pte_kind_v8z24_ms4_vc4_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc8_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc8_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc8_2czv_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc8_2zv_v()] = - gmmu_pte_kind_v8z24_ms8_vc8_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc12_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc12_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc12_2czv_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc12_2zv_v()] = - gmmu_pte_kind_v8z24_ms4_vc12_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc24_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc24_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc24_2czv_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc24_2zv_v()] = - gmmu_pte_kind_v8z24_ms8_vc24_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_z24s8_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z24s8_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z24s8_ms2_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z24s8_ms4_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z24s8_ms8_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z24s8_2cz_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z24s8_ms2_2cz_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z24s8_ms4_2cz_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z24s8_ms8_2cz_v()] = - gmmu_pte_kind_z24s8_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_zf32_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_ms2_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_ms4_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_ms8_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_2cz_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_ms2_2cz_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_ms4_2cz_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_ms8_2cz_v()] = - gmmu_pte_kind_zf32_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_2cszv_v()] = - gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms4_vc4_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms4_vc4_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms4_vc4_2cszv_v()] = - gmmu_pte_kind_x8z24_x16v8s8_ms4_vc4_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms8_vc8_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms8_vc8_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms8_vc8_2cszv_v()] = - gmmu_pte_kind_x8z24_x16v8s8_ms8_vc8_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_2cszv_v()] = - gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_2cszv_v()] = - gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms4_vc4_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms4_vc4_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms4_vc4_2cszv_v()] = - gmmu_pte_kind_zf32_x16v8s8_ms4_vc4_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms8_vc8_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms8_vc8_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms8_vc8_2cszv_v()] = - gmmu_pte_kind_zf32_x16v8s8_ms8_vc8_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_2cszv_v()] = - gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_2cszv_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_ms2_2cszv_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_ms4_2cszv_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_ms8_2cszv_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_ms2_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_ms4_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_ms8_2cs_v()] = - gmmu_pte_kind_zf32_x24s8_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_c32_2c_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c32_2cba_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c32_2cra_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c32_2bra_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c32_ms2_2c_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c32_ms2_2cra_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c32_ms4_2c_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c32_ms4_2cbr_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c32_ms4_2cba_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c32_ms4_2cra_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c32_ms4_2bra_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c32_ms8_ms16_2c_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c32_ms8_ms16_2cra_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c64_2c_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c64_2cbr_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c64_2cba_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c64_2cra_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c64_2bra_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c64_ms2_2c_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c64_ms2_2cra_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c64_ms4_2c_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c64_ms4_2cbr_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c64_ms4_2cba_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c64_ms4_2cra_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c64_ms4_2bra_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c64_ms8_ms16_2c_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c64_ms8_ms16_2cra_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c128_2c_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c128_2cr_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c128_ms2_2c_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c128_ms2_2cr_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c128_ms4_2c_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c128_ms4_2cr_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c128_ms8_ms16_2c_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_c128_ms8_ms16_2cr_v()] = - gmmu_pte_kind_generic_16bx2_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms4_vc4_2czv_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms4_vc4_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms4_vc4_2zv_v()] = - gmmu_pte_kind_z24v8_ms4_vc4_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms4_vc12_2czv_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms4_vc12_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms4_vc12_2zv_v()] = - gmmu_pte_kind_z24v8_ms4_vc12_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms8_vc8_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms8_vc8_2czv_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms8_vc8_2zv_v()] = - gmmu_pte_kind_z24v8_ms8_vc8_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms8_vc24_2cs_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms8_vc24_2czv_v()] = - gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms8_vc24_2zv_v()] = - gmmu_pte_kind_z24v8_ms8_vc24_v(); - - gk20a_uc_kind_map[gmmu_pte_kind_x8c24_v()] = - gmmu_pte_kind_x8c24_v(); -} - -static noinline_for_stack bool gp10b_kind_supported(u8 k) -{ - return /* From gp10b */ - (k >= gmmu_pte_kind_z16_2cz_v() && - k <= gmmu_pte_kind_z16_ms8_2cz_v()) - || k == gmmu_pte_kind_z16_ms16_2cz_v() - || k == gmmu_pte_kind_c32_ms4_4cbra_v() - || k == gmmu_pte_kind_c64_ms4_4cbra_v() - /* From gm20b */ - || (k == gmmu_pte_kind_smsked_message_v()) - || (k >= gmmu_pte_kind_s8_v() && - k <= gmmu_pte_kind_s8_2s_v()) - /* From gk20a */ - || gk20a_kind_work_creation(k) - || (k == gmmu_pte_kind_invalid_v()) - || (k == gmmu_pte_kind_pitch_v()) - || (k >= gmmu_pte_kind_z16_v() && - k <= gmmu_pte_kind_z16_ms8_2c_v()) - || (k >= gmmu_pte_kind_z16_2z_v() && - k <= gmmu_pte_kind_z16_ms8_2z_v()) - || (k == gmmu_pte_kind_s8z24_v()) - || (k >= gmmu_pte_kind_s8z24_2cz_v() && - k <= gmmu_pte_kind_s8z24_ms8_2cz_v()) - || (k >= gmmu_pte_kind_v8z24_ms4_vc12_v() && - k <= gmmu_pte_kind_v8z24_ms8_vc24_v()) - || (k >= gmmu_pte_kind_v8z24_ms4_vc12_2czv_v() && - k <= gmmu_pte_kind_v8z24_ms8_vc24_2zv_v()) - || (k == gmmu_pte_kind_z24s8_v()) - || (k >= gmmu_pte_kind_z24s8_2cz_v() && - k <= gmmu_pte_kind_z24s8_ms8_2cz_v()) - || (k == gmmu_pte_kind_zf32_v()) - || (k >= gmmu_pte_kind_zf32_2cz_v() && - k <= gmmu_pte_kind_zf32_ms8_2cz_v()) - || (k >= gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_v() && - k <= gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_v()) - || (k >= gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_2cszv_v() && - k <= gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_v()) - || (k >= gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_2cszv_v() && - k <= gmmu_pte_kind_zf32_x24s8_v()) - || (k >= gmmu_pte_kind_zf32_x24s8_2cszv_v() && - k <= gmmu_pte_kind_zf32_x24s8_ms8_2cszv_v()) - || (k == gmmu_pte_kind_generic_16bx2_v()) - || (k == gmmu_pte_kind_c32_2c_v()) - || (k == gmmu_pte_kind_c32_2cra_v()) - || (k == gmmu_pte_kind_c32_ms2_2c_v()) - || (k == gmmu_pte_kind_c32_ms2_2cra_v()) - || (k >= gmmu_pte_kind_c32_ms4_2c_v() && - k <= gmmu_pte_kind_c32_ms4_2cbr_v()) - || (k >= gmmu_pte_kind_c32_ms4_2cra_v() && - k <= gmmu_pte_kind_c64_2c_v()) - || (k == gmmu_pte_kind_c64_2cra_v()) - || (k == gmmu_pte_kind_c64_ms2_2c_v()) - || (k == gmmu_pte_kind_c64_ms2_2cra_v()) - || (k >= gmmu_pte_kind_c64_ms4_2c_v() && - k <= gmmu_pte_kind_c64_ms4_2cbr_v()) - || (k >= gmmu_pte_kind_c64_ms4_2cra_v() && - k <= gmmu_pte_kind_c128_ms8_ms16_2cr_v()) - || (k == gmmu_pte_kind_pitch_no_swizzle_v()); -} - -static noinline_for_stack bool gp10b_kind_z(u8 k) -{ - return /* From gp10b */ - (k >= gmmu_pte_kind_z16_2cz_v() && - k <= gmmu_pte_kind_z16_ms8_2cz_v()) - || (k == gmmu_pte_kind_z16_ms16_2cz_v()) - /* From gm20b */ - || (k >= gmmu_pte_kind_s8_v() && - k <= gmmu_pte_kind_s8_2s_v()) - /* From gk20a */ - || (k >= gmmu_pte_kind_z16_v() && - k <= gmmu_pte_kind_v8z24_ms8_vc24_v()) - || (k >= gmmu_pte_kind_v8z24_ms4_vc12_1zv_v() && - k <= gmmu_pte_kind_v8z24_ms8_vc24_2cs_v()) - || (k >= gmmu_pte_kind_v8z24_ms4_vc12_2czv_v() && - k <= gmmu_pte_kind_z24v8_ms8_vc24_v()) - || (k >= gmmu_pte_kind_z24v8_ms4_vc12_1zv_v() && - k <= gmmu_pte_kind_z24v8_ms8_vc24_2cs_v()) - || (k >= gmmu_pte_kind_z24v8_ms4_vc12_2czv_v() && - k <= gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_1cs_v()) - || (k >= gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_1zv_v() && - k <= gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_1cs_v()) - || (k >= gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_1zv_v() && - k <= gmmu_pte_kind_zf32_x24s8_ms16_1cs_v()); -} - -static noinline_for_stack bool gp10b_kind_c(u8 k) -{ - return gk20a_kind_work_creation(k) - || (k == gmmu_pte_kind_pitch_v()) - || (k == gmmu_pte_kind_generic_16bx2_v()) - || (k >= gmmu_pte_kind_c32_2c_v() && - k <= gmmu_pte_kind_c32_ms2_2cbr_v()) - || (k == gmmu_pte_kind_c32_ms2_2cra_v()) - || (k >= gmmu_pte_kind_c32_ms4_2c_v() && - k <= gmmu_pte_kind_c64_ms2_2cbr_v()) - || (k == gmmu_pte_kind_c64_ms2_2cra_v()) - || (k >= gmmu_pte_kind_c64_ms4_2c_v() && - k <= gmmu_pte_kind_pitch_no_swizzle_v()); -} - -static noinline_for_stack bool gp10b_kind_compressible(u8 k) -{ - return /* From gp10b */ - (k >= gmmu_pte_kind_z16_2cz_v() && - k <= gmmu_pte_kind_z16_ms8_2cz_v()) - || (k == gmmu_pte_kind_z16_ms16_2cz_v()) - || (k >= gmmu_pte_kind_z16_4cz_v() && - k <= gmmu_pte_kind_z16_ms16_4cz_v()) - || (k == gmmu_pte_kind_c32_ms4_4cbra_v()) - || (k == gmmu_pte_kind_c64_ms4_4cbra_v()) - /* From gm20b */ - || (k >= gmmu_pte_kind_s8_v() && - k <= gmmu_pte_kind_s8_2s_v()) - /* From gk20a */ - || (k >= gmmu_pte_kind_z16_2c_v() && - k <= gmmu_pte_kind_z16_ms16_4cz_v()) - || (k >= gmmu_pte_kind_s8z24_1z_v() && - k <= gmmu_pte_kind_s8z24_ms16_4cszv_v()) - || (k >= gmmu_pte_kind_v8z24_ms4_vc12_1zv_v() && - k <= gmmu_pte_kind_v8z24_ms8_vc24_2cs_v()) - || (k >= gmmu_pte_kind_v8z24_ms4_vc12_2czv_v() && - k <= gmmu_pte_kind_v8z24_ms8_vc24_4cszv_v()) - || (k >= gmmu_pte_kind_z24s8_1z_v() && - k <= gmmu_pte_kind_z24s8_ms16_4cszv_v()) - || (k >= gmmu_pte_kind_z24v8_ms4_vc12_1zv_v() && - k <= gmmu_pte_kind_z24v8_ms8_vc24_2cs_v()) - || (k >= gmmu_pte_kind_z24v8_ms4_vc12_2czv_v() && - k <= gmmu_pte_kind_z24v8_ms8_vc24_4cszv_v()) - || (k >= gmmu_pte_kind_zf32_1z_v() && - k <= gmmu_pte_kind_zf32_ms16_2cz_v()) - || (k >= gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_1cs_v() && - k <= gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_1cs_v()) - || (k >= gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_1zv_v() && - k <= gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_2cszv_v()) - || (k >= gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_1cs_v() && - k <= gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_1cs_v()) - || (k >= gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_1zv_v() && - k <= gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_2cszv_v()) - || (k >= gmmu_pte_kind_zf32_x24s8_1cs_v() && - k <= gmmu_pte_kind_zf32_x24s8_ms16_1cs_v()) - || (k >= gmmu_pte_kind_zf32_x24s8_2cszv_v() && - k <= gmmu_pte_kind_c32_ms2_2cbr_v()) - || (k == gmmu_pte_kind_c32_ms2_2cra_v()) - || (k >= gmmu_pte_kind_c32_ms4_2c_v() && - k <= gmmu_pte_kind_c64_ms2_2cbr_v()) - || (k == gmmu_pte_kind_c64_ms2_2cra_v()) - || (k >= gmmu_pte_kind_c64_ms4_2c_v() && - k <= gmmu_pte_kind_c128_ms8_ms16_2cr_v()); -} - -static noinline_for_stack bool gp10b_kind_zbc(u8 k) -{ - return /* From gp10b */ - (k >= gmmu_pte_kind_z16_2cz_v() && - k <= gmmu_pte_kind_z16_ms8_2cz_v()) - || (k == gmmu_pte_kind_z16_ms16_2cz_v()) - || (k == gmmu_pte_kind_c32_ms4_4cbra_v()) - || (k == gmmu_pte_kind_c64_ms4_4cbra_v()) - /* From gm20b */ - || (k >= gmmu_pte_kind_s8_v() && - k <= gmmu_pte_kind_s8_2s_v()) - /* From gk20a */ - || (k >= gmmu_pte_kind_z16_2c_v() && - k <= gmmu_pte_kind_z16_ms16_2c_v()) - || (k >= gmmu_pte_kind_z16_4cz_v() && - k <= gmmu_pte_kind_z16_ms16_4cz_v()) - || (k >= gmmu_pte_kind_s8z24_2cz_v() && - k <= gmmu_pte_kind_s8z24_ms16_4cszv_v()) - || (k >= gmmu_pte_kind_v8z24_ms4_vc12_2cs_v() && - k <= gmmu_pte_kind_v8z24_ms8_vc24_2cs_v()) - || (k >= gmmu_pte_kind_v8z24_ms4_vc12_2czv_v() && - k <= gmmu_pte_kind_v8z24_ms8_vc24_2czv_v()) - || (k >= gmmu_pte_kind_v8z24_ms4_vc12_4cszv_v() && - k <= gmmu_pte_kind_v8z24_ms8_vc24_4cszv_v()) - || (k >= gmmu_pte_kind_z24s8_2cs_v() && - k <= gmmu_pte_kind_z24s8_ms16_4cszv_v()) - || (k >= gmmu_pte_kind_z24v8_ms4_vc12_2cs_v() && - k <= gmmu_pte_kind_z24v8_ms8_vc24_2cs_v()) - || (k >= gmmu_pte_kind_z24v8_ms4_vc12_2czv_v() && - k <= gmmu_pte_kind_z24v8_ms8_vc24_2czv_v()) - || (k >= gmmu_pte_kind_z24v8_ms4_vc12_4cszv_v() && - k <= gmmu_pte_kind_z24v8_ms8_vc24_4cszv_v()) - || (k >= gmmu_pte_kind_zf32_2cs_v() && - k <= gmmu_pte_kind_zf32_ms16_2cz_v()) - || (k >= gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_1cs_v() && - k <= gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_1cs_v()) - || (k >= gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_1czv_v() && - k <= gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_2cszv_v()) - || (k >= gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_1cs_v() && - k <= gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_1cs_v()) - || (k >= gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_1czv_v() && - k <= gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_2cszv_v()) - || (k >= gmmu_pte_kind_zf32_x24s8_1cs_v() && - k <= gmmu_pte_kind_zf32_x24s8_ms16_1cs_v()) - || (k >= gmmu_pte_kind_zf32_x24s8_2cszv_v() && - k <= gmmu_pte_kind_c32_2cra_v()) - || (k >= gmmu_pte_kind_c32_ms2_2c_v() && - k <= gmmu_pte_kind_c32_ms2_2cbr_v()) - || (k == gmmu_pte_kind_c32_ms2_2cra_v()) - || (k >= gmmu_pte_kind_c32_ms4_2c_v() && - k <= gmmu_pte_kind_c32_ms4_2cra_v()) - || (k >= gmmu_pte_kind_c32_ms8_ms16_2c_v() && - k <= gmmu_pte_kind_c64_2cra_v()) - || (k >= gmmu_pte_kind_c64_ms2_2c_v() && - k <= gmmu_pte_kind_c64_ms2_2cbr_v()) - || (k == gmmu_pte_kind_c64_ms2_2cra_v()) - || (k >= gmmu_pte_kind_c64_ms4_2c_v() && - k <= gmmu_pte_kind_c64_ms4_2cra_v()) - || (k >= gmmu_pte_kind_c64_ms8_ms16_2c_v() && - k <= gmmu_pte_kind_c128_ms8_ms16_2cr_v()); -} - -void gp10b_init_kind_attr(void) -{ - u16 k; - - for (k = 0; k < NV_KIND_ATTR_SIZE; k++) { - if (gp10b_kind_supported((u8)k)) - gk20a_kind_attr[k] |= GK20A_KIND_ATTR_SUPPORTED; - if (gp10b_kind_compressible((u8)k)) - gk20a_kind_attr[k] |= GK20A_KIND_ATTR_COMPRESSIBLE; - if (gp10b_kind_z((u8)k)) - gk20a_kind_attr[k] |= GK20A_KIND_ATTR_Z; - if (gp10b_kind_c((u8)k)) - gk20a_kind_attr[k] |= GK20A_KIND_ATTR_C; - if (gp10b_kind_zbc((u8)k)) - gk20a_kind_attr[k] |= GK20A_KIND_ATTR_ZBC; - } -} - unsigned int gp10b_fb_compression_page_size(struct gk20a *g) { return SZ_64K; diff --git a/drivers/gpu/nvgpu/gp10b/fb_gp10b.h b/drivers/gpu/nvgpu/gp10b/fb_gp10b.h index 12f6178b..52aa2a75 100644 --- a/drivers/gpu/nvgpu/gp10b/fb_gp10b.h +++ b/drivers/gpu/nvgpu/gp10b/fb_gp10b.h @@ -26,8 +26,6 @@ #define _NVGPU_GP10B_FB struct gk20a; -noinline_for_stack void gp10b_init_uncompressed_kind_map(void); -void gp10b_init_kind_attr(void); unsigned int gp10b_fb_compression_page_size(struct gk20a *g); unsigned int gp10b_fb_compressible_page_size(struct gk20a *g); diff --git a/drivers/gpu/nvgpu/gp10b/hal_gp10b.c b/drivers/gpu/nvgpu/gp10b/hal_gp10b.c index 7ed91e02..d0aedd1b 100644 --- a/drivers/gpu/nvgpu/gp10b/hal_gp10b.c +++ b/drivers/gpu/nvgpu/gp10b/hal_gp10b.c @@ -743,9 +743,6 @@ int gp10b_init_hal(struct gk20a *g) g->pmu_lsf_pmu_wpr_init_done = 0; g->bootstrap_owner = LSF_BOOTSTRAP_OWNER_DEFAULT; - gp10b_init_uncompressed_kind_map(); - gp10b_init_kind_attr(); - g->name = "gp10b"; return 0; diff --git a/drivers/gpu/nvgpu/include/nvgpu/linux/vm.h b/drivers/gpu/nvgpu/include/nvgpu/linux/vm.h index d810f95f..dee8fa09 100644 --- a/drivers/gpu/nvgpu/include/nvgpu/linux/vm.h +++ b/drivers/gpu/nvgpu/include/nvgpu/linux/vm.h @@ -38,25 +38,13 @@ struct vm_gk20a; struct vm_gk20a_mapping_batch; struct nvgpu_vm_area; +/* NVGPU_AS_MAP_BUFFER_FLAGS_DIRECT_KIND_CTRL must be set */ int nvgpu_vm_map_linux(struct vm_gk20a *vm, struct dma_buf *dmabuf, u64 offset_align, u32 flags, - - /* - * compressible kind if - * NVGPU_AS_MAP_BUFFER_FLAGS_DIRECT_KIND_CTRL is - * specified, otherwise just the kind - */ s16 compr_kind, - - /* - * incompressible kind if - * NVGPU_AS_MAP_BUFFER_FLAGS_DIRECT_KIND_CTRL is - * specified, otherwise ignored - */ s16 incompr_kind, - int rw_flag, u64 buffer_offset, u64 mapping_size, @@ -66,12 +54,7 @@ int nvgpu_vm_map_linux(struct vm_gk20a *vm, /* * Notes: * - Batch may be NULL if map op is not part of a batch. - * - If NVGPU_AS_MAP_BUFFER_FLAGS_DIRECT_KIND_CTRL is set, - * compr_kind and incompr_kind work as explained in nvgpu.h. - * - If NVGPU_AS_MAP_BUFFER_FLAGS_DIRECT_KIND_CTRL is NOT set, - * compr_kind holds the kind and kernel will figure out whether - * it is a compressible or incompressible kind. If compressible, kernel will - * also figure out the incompressible counterpart or return an error. + * - NVGPU_AS_MAP_BUFFER_FLAGS_DIRECT_KIND_CTRL must be set */ int nvgpu_vm_map_buffer(struct vm_gk20a *vm, int dmabuf_fd, diff --git a/drivers/gpu/nvgpu/include/nvgpu/vm.h b/drivers/gpu/nvgpu/include/nvgpu/vm.h index 801fb8ed..10a7f7ce 100644 --- a/drivers/gpu/nvgpu/include/nvgpu/vm.h +++ b/drivers/gpu/nvgpu/include/nvgpu/vm.h @@ -127,10 +127,8 @@ struct nvgpu_ctag_buffer_info { enum gmmu_pgsz_gk20a pgsz_idx; u32 flags; - u8 kind_v; - u8 uc_kind_v; - bool use_kind_v; - bool use_uc_kind_v; + s16 compr_kind; + s16 incompr_kind; u32 ctag_lines; }; @@ -202,10 +200,8 @@ void nvgpu_vm_put(struct vm_gk20a *vm); int vm_aspace_id(struct vm_gk20a *vm); int nvgpu_big_pages_possible(struct vm_gk20a *vm, u64 base, u64 size); -int nvgpu_vm_init_kind_info(struct nvgpu_ctag_buffer_info *binfo, - s16 compr_kind, s16 incompr_kind); -int nvgpu_vm_compute_kind_and_compression(struct vm_gk20a *vm, - struct nvgpu_ctag_buffer_info *binfo); +int nvgpu_vm_compute_compression(struct vm_gk20a *vm, + struct nvgpu_ctag_buffer_info *binfo); /* batching eliminates redundant cache flushes and invalidates */ void nvgpu_vm_mapping_batch_start(struct vm_gk20a_mapping_batch *batch); diff --git a/drivers/gpu/nvgpu/vgpu/gm20b/vgpu_hal_gm20b.c b/drivers/gpu/nvgpu/vgpu/gm20b/vgpu_hal_gm20b.c index fd89e23c..3fc8b73b 100644 --- a/drivers/gpu/nvgpu/vgpu/gm20b/vgpu_hal_gm20b.c +++ b/drivers/gpu/nvgpu/vgpu/gm20b/vgpu_hal_gm20b.c @@ -584,9 +584,6 @@ int vgpu_gm20b_init_hal(struct gk20a *g) g->pmu_lsf_pmu_wpr_init_done = 0; g->bootstrap_owner = LSF_BOOTSTRAP_OWNER_DEFAULT; - gm20b_init_uncompressed_kind_map(); - gm20b_init_kind_attr(); - g->name = "gm20b"; c->twod_class = FERMI_TWOD_A; diff --git a/drivers/gpu/nvgpu/vgpu/gp10b/vgpu_hal_gp10b.c b/drivers/gpu/nvgpu/vgpu/gp10b/vgpu_hal_gp10b.c index fcb05937..e4e5a885 100644 --- a/drivers/gpu/nvgpu/vgpu/gp10b/vgpu_hal_gp10b.c +++ b/drivers/gpu/nvgpu/vgpu/gp10b/vgpu_hal_gp10b.c @@ -626,9 +626,6 @@ int vgpu_gp10b_init_hal(struct gk20a *g) g->pmu_lsf_pmu_wpr_init_done = 0; g->bootstrap_owner = LSF_BOOTSTRAP_OWNER_DEFAULT; - gp10b_init_uncompressed_kind_map(); - gp10b_init_kind_attr(); - g->name = "gp10b"; c->twod_class = FERMI_TWOD_A; -- cgit v1.2.2