summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSami Kiminki <skiminki@nvidia.com>2017-11-02 16:03:15 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2017-11-10 11:38:19 -0500
commitcefabe7eb1f1f1dba9692e21ab4f1b88b9163489 (patch)
treeb0f4e6ce64cd408e780925b8b3365b45805b7d95
parentb584bf8aa814d026498ebcee23480d1963338e47 (diff)
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 <skiminki@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1560933 Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
-rw-r--r--drivers/gpu/nvgpu/Makefile1
-rw-r--r--drivers/gpu/nvgpu/common/linux/ioctl_as.c15
-rw-r--r--drivers/gpu/nvgpu/common/linux/vm.c37
-rw-r--r--drivers/gpu/nvgpu/common/mm/vm.c124
-rw-r--r--drivers/gpu/nvgpu/gk20a/fb_gk20a.c1
-rw-r--r--drivers/gpu/nvgpu/gk20a/gr_gk20a.c1
-rw-r--r--drivers/gpu/nvgpu/gk20a/kind_gk20a.c414
-rw-r--r--drivers/gpu/nvgpu/gk20a/kind_gk20a.h90
-rw-r--r--drivers/gpu/nvgpu/gk20a/mm_gk20a.c1
-rw-r--r--drivers/gpu/nvgpu/gm20b/fb_gm20b.c402
-rw-r--r--drivers/gpu/nvgpu/gm20b/fb_gm20b.h2
-rw-r--r--drivers/gpu/nvgpu/gm20b/hal_gm20b.c3
-rw-r--r--drivers/gpu/nvgpu/gp106/hal_gp106.c3
-rw-r--r--drivers/gpu/nvgpu/gp10b/fb_gp10b.c440
-rw-r--r--drivers/gpu/nvgpu/gp10b/fb_gp10b.h2
-rw-r--r--drivers/gpu/nvgpu/gp10b/hal_gp10b.c3
-rw-r--r--drivers/gpu/nvgpu/include/nvgpu/linux/vm.h21
-rw-r--r--drivers/gpu/nvgpu/include/nvgpu/vm.h12
-rw-r--r--drivers/gpu/nvgpu/vgpu/gm20b/vgpu_hal_gm20b.c3
-rw-r--r--drivers/gpu/nvgpu/vgpu/gp10b/vgpu_hal_gp10b.c3
20 files changed, 49 insertions, 1529 deletions
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 := \
93 gk20a/dbg_gpu_gk20a.o \ 93 gk20a/dbg_gpu_gk20a.o \
94 gk20a/regops_gk20a.o \ 94 gk20a/regops_gk20a.o \
95 gk20a/gr_gk20a.o \ 95 gk20a/gr_gk20a.o \
96 gk20a/kind_gk20a.o \
97 gk20a/mm_gk20a.o \ 96 gk20a/mm_gk20a.o \
98 gk20a/pmu_gk20a.o \ 97 gk20a/pmu_gk20a.o \
99 gk20a/flcn_gk20a.o \ 98 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(
79 struct gk20a_as_share *as_share, 79 struct gk20a_as_share *as_share,
80 struct nvgpu_as_map_buffer_ex_args *args) 80 struct nvgpu_as_map_buffer_ex_args *args)
81{ 81{
82 s16 compressible_kind;
83 s16 incompressible_kind;
84
85 gk20a_dbg_fn(""); 82 gk20a_dbg_fn("");
86 83
87 if (args->flags & NVGPU_AS_MAP_BUFFER_FLAGS_DIRECT_KIND_CTRL) { 84 /* unsupported, direct kind control must be used */
88 compressible_kind = args->compr_kind; 85 if (!(args->flags & NVGPU_AS_MAP_BUFFER_FLAGS_DIRECT_KIND_CTRL)) {
89 incompressible_kind = args->incompr_kind; 86 struct gk20a *g = as_share->vm->mm->g;
90 } else { 87 nvgpu_log_info(g, "Direct kind control must be requested");
91 /* unsupported, direct kind control must be used */
92 return -EINVAL; 88 return -EINVAL;
93 } 89 }
94 90
95 return nvgpu_vm_map_buffer(as_share->vm, args->dmabuf_fd, 91 return nvgpu_vm_map_buffer(as_share->vm, args->dmabuf_fd,
96 &args->offset, args->flags, 92 &args->offset, args->flags,
97 compressible_kind, incompressible_kind, 93 args->compr_kind,
94 args->incompr_kind,
98 args->buffer_offset, 95 args->buffer_offset,
99 args->mapping_size, 96 args->mapping_size,
100 NULL); 97 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 @@
32 32
33#include "gk20a/gk20a.h" 33#include "gk20a/gk20a.h"
34#include "gk20a/mm_gk20a.h" 34#include "gk20a/mm_gk20a.h"
35#include "gk20a/kind_gk20a.h"
36 35
37#include "platform_gk20a.h" 36#include "platform_gk20a.h"
38#include "os_linux.h" 37#include "os_linux.h"
@@ -239,14 +238,17 @@ int nvgpu_vm_map_linux(struct vm_gk20a *vm,
239 238
240 binfo.flags = flags; 239 binfo.flags = flags;
241 binfo.size = dmabuf->size; 240 binfo.size = dmabuf->size;
241 binfo.compr_kind = compr_kind;
242 binfo.incompr_kind = incompr_kind;
242 243
243 if (flags & NVGPU_AS_MAP_BUFFER_FLAGS_DIRECT_KIND_CTRL) { 244 if (compr_kind != NV_KIND_INVALID)
244 if (compr_kind != NV_KIND_INVALID)
245 map_key_kind = compr_kind;
246 else
247 map_key_kind = incompr_kind;
248 } else {
249 map_key_kind = compr_kind; 245 map_key_kind = compr_kind;
246 else
247 map_key_kind = incompr_kind;
248
249 if (map_key_kind == NV_KIND_INVALID) {
250 nvgpu_err(g, "Valid kind must be supplied");
251 return -EINVAL;
250 } 252 }
251 253
252 if (vm->userspace_managed && 254 if (vm->userspace_managed &&
@@ -277,10 +279,6 @@ int nvgpu_vm_map_linux(struct vm_gk20a *vm,
277 goto clean_up; 279 goto clean_up;
278 } 280 }
279 281
280 err = nvgpu_vm_init_kind_info(&binfo, compr_kind, incompr_kind);
281 if (err)
282 goto clean_up;
283
284 aperture = gk20a_dmabuf_aperture(g, dmabuf); 282 aperture = gk20a_dmabuf_aperture(g, dmabuf);
285 if (aperture == APERTURE_INVALID) { 283 if (aperture == APERTURE_INVALID) {
286 err = -EINVAL; 284 err = -EINVAL;
@@ -321,9 +319,9 @@ int nvgpu_vm_map_linux(struct vm_gk20a *vm,
321 va_allocated = true; 319 va_allocated = true;
322 } 320 }
323 321
324 err = nvgpu_vm_compute_kind_and_compression(vm, &binfo); 322 err = nvgpu_vm_compute_compression(vm, &binfo);
325 if (err) { 323 if (err) {
326 nvgpu_err(g, "failure setting up kind and compression"); 324 nvgpu_err(g, "failure setting up compression");
327 goto clean_up; 325 goto clean_up;
328 } 326 }
329 327
@@ -340,10 +338,12 @@ int nvgpu_vm_map_linux(struct vm_gk20a *vm,
340 binfo.ctag_lines); 338 binfo.ctag_lines);
341 if (err) { 339 if (err) {
342 /* TBD: we can partially alloc ctags as well... */ 340 /* TBD: we can partially alloc ctags as well... */
343 if (binfo.use_uc_kind_v) { 341
344 /* no comptags, but fallback kind available */ 342 /* prevent compression ... */
345 binfo.kind_v = binfo.uc_kind_v; 343 binfo.compr_kind = NV_KIND_INVALID;
346 } else { 344
345 /* ... and make sure we have the fallback */
346 if (binfo.incompr_kind == NV_KIND_INVALID) {
347 nvgpu_err(g, "comptag alloc failed and no fallback kind specified"); 347 nvgpu_err(g, "comptag alloc failed and no fallback kind specified");
348 goto clean_up; 348 goto clean_up;
349 } 349 }
@@ -379,7 +379,8 @@ int nvgpu_vm_map_linux(struct vm_gk20a *vm,
379 buffer_offset, /* sg offset */ 379 buffer_offset, /* sg offset */
380 mapping_size, 380 mapping_size,
381 binfo.pgsz_idx, 381 binfo.pgsz_idx,
382 binfo.kind_v, 382 (binfo.compr_kind != NV_KIND_INVALID ?
383 binfo.compr_kind : binfo.incompr_kind),
383 ctag_offset, 384 ctag_offset,
384 flags, rw_flag, 385 flags, rw_flag,
385 clear_ctags, 386 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 @@
35 35
36#include "gk20a/gk20a.h" 36#include "gk20a/gk20a.h"
37#include "gk20a/mm_gk20a.h" 37#include "gk20a/mm_gk20a.h"
38#include "gk20a/kind_gk20a.h"
39 38
40static void __nvgpu_vm_unmap(struct nvgpu_mapped_buf *mapped_buffer, 39static void __nvgpu_vm_unmap(struct nvgpu_mapped_buf *mapped_buffer,
41 struct vm_gk20a_mapping_batch *batch); 40 struct vm_gk20a_mapping_batch *batch);
@@ -829,123 +828,36 @@ done:
829 return; 828 return;
830} 829}
831 830
832int nvgpu_vm_init_kind_info(struct nvgpu_ctag_buffer_info *binfo, 831int nvgpu_vm_compute_compression(struct vm_gk20a *vm,
833 s16 compr_kind, s16 incompr_kind) 832 struct nvgpu_ctag_buffer_info *binfo)
834{
835 if (binfo->flags & NVGPU_AS_MAP_BUFFER_FLAGS_DIRECT_KIND_CTRL) {
836 /* were we supplied with a kind in either parameter? */
837 if ((compr_kind < 0 || compr_kind >= NV_KIND_ATTR_SIZE) &&
838 (incompr_kind < 0 || incompr_kind >= NV_KIND_ATTR_SIZE))
839 return -EINVAL;
840
841 if (compr_kind != NV_KIND_INVALID) {
842 binfo->use_kind_v = true;
843 binfo->kind_v = (u8)compr_kind;
844 }
845
846 if (incompr_kind != NV_KIND_INVALID) {
847 binfo->use_uc_kind_v = true;
848 binfo->uc_kind_v = (u8)incompr_kind;
849 }
850 } else {
851 if (compr_kind < 0 || compr_kind >= NV_KIND_ATTR_SIZE)
852 return -EINVAL;
853
854 binfo->use_kind_v = true;
855 binfo->kind_v = (u8)compr_kind;
856
857 /*
858 * Note: nvgpu_vm_kind_and_compression() will figure out
859 * uc_kind_v or return an error.
860 */
861 }
862
863 return 0;
864}
865
866static int nvgpu_vm_setup_kind_legacy(struct vm_gk20a *vm,
867 struct nvgpu_ctag_buffer_info *binfo,
868 bool *pkind_compressible)
869{ 833{
870 struct gk20a *g = gk20a_from_vm(vm); 834 bool kind_compressible = (binfo->compr_kind != NV_KIND_INVALID);
871 bool kind_compressible;
872
873 if (unlikely(binfo->kind_v == g->ops.mm.get_kind_invalid()))
874 binfo->kind_v = g->ops.mm.get_kind_pitch();
875
876 if (unlikely(!gk20a_kind_is_supported(binfo->kind_v))) {
877 nvgpu_err(g, "kind 0x%x not supported", binfo->kind_v);
878 return -EINVAL;
879 }
880
881 binfo->uc_kind_v = g->ops.mm.get_kind_invalid();
882
883 /*
884 * Find a suitable incompressible kind if it becomes necessary later.
885 */
886 kind_compressible = gk20a_kind_is_compressible(binfo->kind_v);
887 if (kind_compressible) {
888 binfo->uc_kind_v = gk20a_get_uncompressed_kind(binfo->kind_v);
889 if (binfo->uc_kind_v == g->ops.mm.get_kind_invalid()) {
890 /*
891 * Shouldn't happen, but it is worth cross-checking.
892 */
893 nvgpu_err(g, "comptag kind 0x%x can't be"
894 " downgraded to uncompressed kind",
895 binfo->kind_v);
896 return -EINVAL;
897 }
898 }
899
900 *pkind_compressible = kind_compressible;
901
902 return 0;
903}
904
905int nvgpu_vm_compute_kind_and_compression(struct vm_gk20a *vm,
906 struct nvgpu_ctag_buffer_info *binfo)
907{
908 bool kind_compressible;
909 struct gk20a *g = gk20a_from_vm(vm); 835 struct gk20a *g = gk20a_from_vm(vm);
910 int ctag_granularity = g->ops.fb.compression_page_size(g); 836 int ctag_granularity = g->ops.fb.compression_page_size(g);
911 837
912 if (!binfo->use_kind_v)
913 binfo->kind_v = g->ops.mm.get_kind_invalid();
914 if (!binfo->use_uc_kind_v)
915 binfo->uc_kind_v = g->ops.mm.get_kind_invalid();
916
917 if (binfo->flags & NVGPU_AS_MAP_BUFFER_FLAGS_DIRECT_KIND_CTRL) {
918 kind_compressible = (binfo->kind_v !=
919 g->ops.mm.get_kind_invalid());
920 if (!kind_compressible)
921 binfo->kind_v = binfo->uc_kind_v;
922 } else {
923 int err = nvgpu_vm_setup_kind_legacy(vm, binfo,
924 &kind_compressible);
925
926 if (err)
927 return err;
928 }
929
930 /* comptags only supported for suitable kinds, 128KB pagesize */
931 if (kind_compressible && 838 if (kind_compressible &&
932 vm->gmmu_page_sizes[binfo->pgsz_idx] < 839 vm->gmmu_page_sizes[binfo->pgsz_idx] <
933 g->ops.fb.compressible_page_size(g)) { 840 g->ops.fb.compressible_page_size(g)) {
934 /* it is safe to fall back to uncompressed as 841 /*
935 functionality is not harmed */ 842 * Let's double check that there is a fallback kind
936 binfo->kind_v = binfo->uc_kind_v; 843 */
937 kind_compressible = false; 844 if (binfo->incompr_kind == NV_KIND_INVALID) {
845 nvgpu_err(g,
846 "Unsupported page size for compressible "
847 "kind, but no fallback kind");
848 return -EINVAL;
849 } else {
850 nvgpu_log(g, gpu_dbg_map,
851 "Unsupported page size for compressible "
852 "kind, demoting to incompressible");
853 binfo->compr_kind = NV_KIND_INVALID;
854 kind_compressible = false;
855 }
938 } 856 }
939 857
940 if (kind_compressible) 858 if (kind_compressible)
941 binfo->ctag_lines = DIV_ROUND_UP_ULL(binfo->size, 859 binfo->ctag_lines = DIV_ROUND_UP_ULL(binfo->size,
942 ctag_granularity); 860 ctag_granularity);
943 else
944 binfo->ctag_lines = 0;
945
946 binfo->use_kind_v = (binfo->kind_v != g->ops.mm.get_kind_invalid());
947 binfo->use_uc_kind_v = (binfo->uc_kind_v !=
948 g->ops.mm.get_kind_invalid());
949 861
950 return 0; 862 return 0;
951} 863}
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 @@
25#include <trace/events/gk20a.h> 25#include <trace/events/gk20a.h>
26 26
27#include "gk20a.h" 27#include "gk20a.h"
28#include "kind_gk20a.h"
29#include "fb_gk20a.h" 28#include "fb_gk20a.h"
30 29
31#include <nvgpu/timers.h> 30#include <nvgpu/timers.h>
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 @@
41#include <nvgpu/ctxsw_trace.h> 41#include <nvgpu/ctxsw_trace.h>
42 42
43#include "gk20a.h" 43#include "gk20a.h"
44#include "kind_gk20a.h"
45#include "gr_ctx_gk20a.h" 44#include "gr_ctx_gk20a.h"
46#include "gr_pri_gk20a.h" 45#include "gr_pri_gk20a.h"
47#include "regops_gk20a.h" 46#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 @@
1/*
2 * GK20A memory kind management
3 *
4 * Copyright (c) 2011-2017, NVIDIA CORPORATION. All rights reserved.
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the "Software"),
8 * to deal in the Software without restriction, including without limitation
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included in
14 * all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 * DEALINGS IN THE SOFTWARE.
23 */
24
25#include "kind_gk20a.h"
26
27#include <nvgpu/hw/gk20a/hw_gmmu_gk20a.h>
28
29/* TBD: generate these from kind_macros.h */
30
31/*
32 * Use noinline_for_stack for these huge functions, otherwise GCC 4.7 will
33 * blow up when building a coverage-enabled kernel. (error: the frame size of
34 * 1232 bytes is larger than 1024 bytes [-Werror=frame-larger-than=])
35 */
36
37/* note: taken from the !2cs_compression case */
38static noinline_for_stack bool gk20a_kind_supported(u8 k)
39{
40 return gk20a_kind_work_creation(k)
41 || (k == gmmu_pte_kind_invalid_v())
42 || (k == gmmu_pte_kind_pitch_v())
43 || (k >= gmmu_pte_kind_z16_v() &&
44 k <= gmmu_pte_kind_z16_ms8_2c_v())
45 || (k >= gmmu_pte_kind_z16_2z_v() &&
46 k <= gmmu_pte_kind_z16_ms8_2z_v())
47 || (k == gmmu_pte_kind_s8z24_v())
48 || (k >= gmmu_pte_kind_s8z24_2cz_v() &&
49 k <= gmmu_pte_kind_s8z24_ms8_2cz_v())
50 || (k >= gmmu_pte_kind_v8z24_ms4_vc12_v() &&
51 k <= gmmu_pte_kind_v8z24_ms8_vc24_v())
52 || (k >= gmmu_pte_kind_v8z24_ms4_vc12_2czv_v() &&
53 k <= gmmu_pte_kind_v8z24_ms8_vc24_2zv_v())
54 || (k == gmmu_pte_kind_z24s8_v())
55 || (k >= gmmu_pte_kind_z24s8_2cz_v() &&
56 k <= gmmu_pte_kind_z24s8_ms8_2cz_v())
57 || (k == gmmu_pte_kind_zf32_v())
58 || (k >= gmmu_pte_kind_zf32_2cz_v() &&
59 k <= gmmu_pte_kind_zf32_ms8_2cz_v())
60 || (k >= gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_v() &&
61 k <= gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_v())
62 || (k >= gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_2cszv_v() &&
63 k <= gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_v())
64 || (k >= gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_2cszv_v() &&
65 k <= gmmu_pte_kind_zf32_x24s8_v())
66 || (k >= gmmu_pte_kind_zf32_x24s8_2cszv_v() &&
67 k <= gmmu_pte_kind_zf32_x24s8_ms8_2cszv_v())
68 || (k == gmmu_pte_kind_generic_16bx2_v())
69 || (k == gmmu_pte_kind_c32_2c_v())
70 || (k == gmmu_pte_kind_c32_2cra_v())
71 || (k == gmmu_pte_kind_c32_ms2_2c_v())
72 || (k == gmmu_pte_kind_c32_ms2_2cra_v())
73 || (k >= gmmu_pte_kind_c32_ms4_2c_v() &&
74 k <= gmmu_pte_kind_c32_ms4_2cbr_v())
75 || (k >= gmmu_pte_kind_c32_ms4_2cra_v() &&
76 k <= gmmu_pte_kind_c64_2c_v())
77 || (k == gmmu_pte_kind_c64_2cra_v())
78 || (k == gmmu_pte_kind_c64_ms2_2c_v())
79 || (k == gmmu_pte_kind_c64_ms2_2cra_v())
80 || (k >= gmmu_pte_kind_c64_ms4_2c_v() &&
81 k <= gmmu_pte_kind_c64_ms4_2cbr_v())
82 || (k >= gmmu_pte_kind_c64_ms4_2cra_v() &&
83 k <= gmmu_pte_kind_c128_ms8_ms16_2cr_v())
84 || (k == gmmu_pte_kind_pitch_no_swizzle_v());
85}
86
87static noinline_for_stack bool gk20a_kind_z(u8 k)
88{
89 return (k >= gmmu_pte_kind_z16_v() &&
90 k <= gmmu_pte_kind_v8z24_ms8_vc24_v())
91 || (k >= gmmu_pte_kind_v8z24_ms4_vc12_1zv_v() &&
92 k <= gmmu_pte_kind_v8z24_ms8_vc24_2cs_v())
93 || (k >= gmmu_pte_kind_v8z24_ms4_vc12_2czv_v() &&
94 k <= gmmu_pte_kind_z24v8_ms8_vc24_v())
95 || (k >= gmmu_pte_kind_z24v8_ms4_vc12_1zv_v() &&
96 k <= gmmu_pte_kind_z24v8_ms8_vc24_2cs_v())
97 || (k >= gmmu_pte_kind_z24v8_ms4_vc12_2czv_v() &&
98 k <= gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_1cs_v())
99 || (k >= gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_1zv_v() &&
100 k <= gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_1cs_v())
101 || (k >= gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_1zv_v() &&
102 k <= gmmu_pte_kind_zf32_x24s8_ms16_1cs_v());
103}
104
105static noinline_for_stack bool gk20a_kind_c(u8 k)
106{
107 return gk20a_kind_work_creation(k)
108 || (k == gmmu_pte_kind_pitch_v())
109 || (k == gmmu_pte_kind_generic_16bx2_v())
110 || (k >= gmmu_pte_kind_c32_2c_v() &&
111 k <= gmmu_pte_kind_c32_ms2_2cbr_v())
112 || (k == gmmu_pte_kind_c32_ms2_2cra_v())
113 || (k >= gmmu_pte_kind_c32_ms4_2c_v() &&
114 k <= gmmu_pte_kind_c64_ms2_2cbr_v())
115 || (k == gmmu_pte_kind_c64_ms2_2cra_v())
116 || (k >= gmmu_pte_kind_c64_ms4_2c_v() &&
117 k <= gmmu_pte_kind_pitch_no_swizzle_v());
118}
119
120static noinline_for_stack bool gk20a_kind_compressible(u8 k)
121{
122 return (k >= gmmu_pte_kind_z16_2c_v() &&
123 k <= gmmu_pte_kind_z16_ms16_4cz_v())
124 || (k >= gmmu_pte_kind_s8z24_1z_v() &&
125 k <= gmmu_pte_kind_s8z24_ms16_4cszv_v())
126 || (k >= gmmu_pte_kind_v8z24_ms4_vc12_1zv_v() &&
127 k <= gmmu_pte_kind_v8z24_ms8_vc24_2cs_v())
128 || (k >= gmmu_pte_kind_v8z24_ms4_vc12_2czv_v() &&
129 k <= gmmu_pte_kind_v8z24_ms8_vc24_4cszv_v())
130 || (k >= gmmu_pte_kind_z24s8_1z_v() &&
131 k <= gmmu_pte_kind_z24s8_ms16_4cszv_v())
132 || (k >= gmmu_pte_kind_z24v8_ms4_vc12_1zv_v() &&
133 k <= gmmu_pte_kind_z24v8_ms8_vc24_2cs_v())
134 || (k >= gmmu_pte_kind_z24v8_ms4_vc12_2czv_v() &&
135 k <= gmmu_pte_kind_z24v8_ms8_vc24_4cszv_v())
136 || (k >= gmmu_pte_kind_zf32_1z_v() &&
137 k <= gmmu_pte_kind_zf32_ms16_2cz_v())
138 || (k >= gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_1cs_v() &&
139 k <= gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_1cs_v())
140 || (k >= gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_1zv_v() &&
141 k <= gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_2cszv_v())
142 || (k >= gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_1cs_v() &&
143 k <= gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_1cs_v())
144 || (k >= gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_1zv_v() &&
145 k <= gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_2cszv_v())
146 || (k >= gmmu_pte_kind_zf32_x24s8_1cs_v() &&
147 k <= gmmu_pte_kind_zf32_x24s8_ms16_1cs_v())
148 || (k >= gmmu_pte_kind_zf32_x24s8_2cszv_v() &&
149 k <= gmmu_pte_kind_c32_ms2_2cbr_v())
150 || (k == gmmu_pte_kind_c32_ms2_2cra_v())
151 || (k >= gmmu_pte_kind_c32_ms4_2c_v() &&
152 k <= gmmu_pte_kind_c64_ms2_2cbr_v())
153 || (k == gmmu_pte_kind_c64_ms2_2cra_v())
154 || (k >= gmmu_pte_kind_c64_ms4_2c_v() &&
155 k <= gmmu_pte_kind_c128_ms8_ms16_2cr_v());
156}
157
158static noinline_for_stack bool gk20a_kind_zbc(u8 k)
159{
160 return (k >= gmmu_pte_kind_z16_2c_v() &&
161 k <= gmmu_pte_kind_z16_ms16_2c_v())
162 || (k >= gmmu_pte_kind_z16_4cz_v() &&
163 k <= gmmu_pte_kind_z16_ms16_4cz_v())
164 || (k >= gmmu_pte_kind_s8z24_2cz_v() &&
165 k <= gmmu_pte_kind_s8z24_ms16_4cszv_v())
166 || (k >= gmmu_pte_kind_v8z24_ms4_vc12_2cs_v() &&
167 k <= gmmu_pte_kind_v8z24_ms8_vc24_2cs_v())
168 || (k >= gmmu_pte_kind_v8z24_ms4_vc12_2czv_v() &&
169 k <= gmmu_pte_kind_v8z24_ms8_vc24_2czv_v())
170 || (k >= gmmu_pte_kind_v8z24_ms4_vc12_4cszv_v() &&
171 k <= gmmu_pte_kind_v8z24_ms8_vc24_4cszv_v())
172 || (k >= gmmu_pte_kind_z24s8_2cs_v() &&
173 k <= gmmu_pte_kind_z24s8_ms16_4cszv_v())
174 || (k >= gmmu_pte_kind_z24v8_ms4_vc12_2cs_v() &&
175 k <= gmmu_pte_kind_z24v8_ms8_vc24_2cs_v())
176 || (k >= gmmu_pte_kind_z24v8_ms4_vc12_2czv_v() &&
177 k <= gmmu_pte_kind_z24v8_ms8_vc24_2czv_v())
178 || (k >= gmmu_pte_kind_z24v8_ms4_vc12_4cszv_v() &&
179 k <= gmmu_pte_kind_z24v8_ms8_vc24_4cszv_v())
180 || (k >= gmmu_pte_kind_zf32_2cs_v() &&
181 k <= gmmu_pte_kind_zf32_ms16_2cz_v())
182 || (k >= gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_1cs_v() &&
183 k <= gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_1cs_v())
184 || (k >= gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_1czv_v() &&
185 k <= gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_2cszv_v())
186 || (k >= gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_1cs_v() &&
187 k <= gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_1cs_v())
188 || (k >= gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_1czv_v() &&
189 k <= gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_2cszv_v())
190 || (k >= gmmu_pte_kind_zf32_x24s8_1cs_v() &&
191 k <= gmmu_pte_kind_zf32_x24s8_ms16_1cs_v())
192 || (k >= gmmu_pte_kind_zf32_x24s8_2cszv_v() &&
193 k <= gmmu_pte_kind_c32_2cra_v())
194 || (k >= gmmu_pte_kind_c32_ms2_2c_v() &&
195 k <= gmmu_pte_kind_c32_ms2_2cbr_v())
196 || (k == gmmu_pte_kind_c32_ms2_2cra_v())
197 || (k >= gmmu_pte_kind_c32_ms4_2c_v() &&
198 k <= gmmu_pte_kind_c32_ms4_2cra_v())
199 || (k >= gmmu_pte_kind_c32_ms8_ms16_2c_v() &&
200 k <= gmmu_pte_kind_c64_2cra_v())
201 || (k >= gmmu_pte_kind_c64_ms2_2c_v() &&
202 k <= gmmu_pte_kind_c64_ms2_2cbr_v())
203 || (k == gmmu_pte_kind_c64_ms2_2cra_v())
204 || (k >= gmmu_pte_kind_c64_ms4_2c_v() &&
205 k <= gmmu_pte_kind_c64_ms4_2cra_v())
206 || (k >= gmmu_pte_kind_c64_ms8_ms16_2c_v() &&
207 k <= gmmu_pte_kind_c128_ms8_ms16_2cr_v());
208}
209
210u8 gk20a_uc_kind_map[256];
211void gk20a_init_uncompressed_kind_map(void)
212{
213 int i;
214 for (i = 0; i < 256; i++)
215 gk20a_uc_kind_map[i] = gmmu_pte_kind_invalid_v();
216
217 gk20a_uc_kind_map[gmmu_pte_kind_z16_v()] =
218 gk20a_uc_kind_map[gmmu_pte_kind_z16_2c_v()] =
219 gk20a_uc_kind_map[gmmu_pte_kind_z16_ms2_2c_v()] =
220 gk20a_uc_kind_map[gmmu_pte_kind_z16_ms4_2c_v()] =
221 gk20a_uc_kind_map[gmmu_pte_kind_z16_ms8_2c_v()] =
222 gk20a_uc_kind_map[gmmu_pte_kind_z16_2z_v()] =
223 gk20a_uc_kind_map[gmmu_pte_kind_z16_ms2_2z_v()] =
224 gk20a_uc_kind_map[gmmu_pte_kind_z16_ms4_2z_v()] =
225 gk20a_uc_kind_map[gmmu_pte_kind_z16_ms8_2z_v()] =
226 gmmu_pte_kind_z16_v();
227
228 gk20a_uc_kind_map[gmmu_pte_kind_s8z24_v()] =
229 gk20a_uc_kind_map[gmmu_pte_kind_s8z24_2cz_v()] =
230 gk20a_uc_kind_map[gmmu_pte_kind_s8z24_ms2_2cz_v()] =
231 gk20a_uc_kind_map[gmmu_pte_kind_s8z24_ms4_2cz_v()] =
232 gk20a_uc_kind_map[gmmu_pte_kind_s8z24_ms8_2cz_v()] =
233 gk20a_uc_kind_map[gmmu_pte_kind_s8z24_2cs_v()] =
234 gk20a_uc_kind_map[gmmu_pte_kind_s8z24_ms2_2cs_v()] =
235 gk20a_uc_kind_map[gmmu_pte_kind_s8z24_ms4_2cs_v()] =
236 gk20a_uc_kind_map[gmmu_pte_kind_s8z24_ms8_2cs_v()] =
237 gmmu_pte_kind_s8z24_v();
238
239 gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc4_v()] =
240 gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc4_2cs_v()] =
241 gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc4_2czv_v()] =
242 gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc4_2zv_v()] =
243 gmmu_pte_kind_v8z24_ms4_vc4_v();
244
245 gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc8_v()] =
246 gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc8_2cs_v()] =
247 gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc8_2czv_v()] =
248 gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc8_2zv_v()] =
249 gmmu_pte_kind_v8z24_ms8_vc8_v();
250
251 gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc12_v()] =
252 gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc12_2cs_v()] =
253 gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc12_2czv_v()] =
254 gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc12_2zv_v()] =
255 gmmu_pte_kind_v8z24_ms4_vc12_v();
256
257 gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc24_v()] =
258 gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc24_2cs_v()] =
259 gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc24_2czv_v()] =
260 gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc24_2zv_v()] =
261 gmmu_pte_kind_v8z24_ms8_vc24_v();
262
263 gk20a_uc_kind_map[gmmu_pte_kind_z24s8_v()] =
264 gk20a_uc_kind_map[gmmu_pte_kind_z24s8_2cs_v()] =
265 gk20a_uc_kind_map[gmmu_pte_kind_z24s8_ms2_2cs_v()] =
266 gk20a_uc_kind_map[gmmu_pte_kind_z24s8_ms4_2cs_v()] =
267 gk20a_uc_kind_map[gmmu_pte_kind_z24s8_ms8_2cs_v()] =
268 gk20a_uc_kind_map[gmmu_pte_kind_z24s8_2cz_v()] =
269 gk20a_uc_kind_map[gmmu_pte_kind_z24s8_ms2_2cz_v()] =
270 gk20a_uc_kind_map[gmmu_pte_kind_z24s8_ms4_2cz_v()] =
271 gk20a_uc_kind_map[gmmu_pte_kind_z24s8_ms8_2cz_v()] =
272 gmmu_pte_kind_z24s8_v();
273
274 gk20a_uc_kind_map[gmmu_pte_kind_zf32_v()] =
275 gk20a_uc_kind_map[gmmu_pte_kind_zf32_2cs_v()] =
276 gk20a_uc_kind_map[gmmu_pte_kind_zf32_ms2_2cs_v()] =
277 gk20a_uc_kind_map[gmmu_pte_kind_zf32_ms4_2cs_v()] =
278 gk20a_uc_kind_map[gmmu_pte_kind_zf32_ms8_2cs_v()] =
279 gk20a_uc_kind_map[gmmu_pte_kind_zf32_2cz_v()] =
280 gk20a_uc_kind_map[gmmu_pte_kind_zf32_ms2_2cz_v()] =
281 gk20a_uc_kind_map[gmmu_pte_kind_zf32_ms4_2cz_v()] =
282 gk20a_uc_kind_map[gmmu_pte_kind_zf32_ms8_2cz_v()] =
283 gmmu_pte_kind_zf32_v();
284
285 gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_v()] =
286 gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_2cs_v()] =
287 gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_2cszv_v()] =
288 gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_v();
289
290 gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms4_vc4_v()] =
291 gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms4_vc4_2cs_v()] =
292 gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms4_vc4_2cszv_v()] =
293 gmmu_pte_kind_x8z24_x16v8s8_ms4_vc4_v();
294
295 gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms8_vc8_v()] =
296 gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms8_vc8_2cs_v()] =
297 gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms8_vc8_2cszv_v()] =
298 gmmu_pte_kind_x8z24_x16v8s8_ms8_vc8_v();
299
300 gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_v()] =
301 gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_2cs_v()] =
302 gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_2cszv_v()] =
303 gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_v();
304
305 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_v()] =
306 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_2cs_v()] =
307 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_2cszv_v()] =
308 gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_v();
309
310 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms4_vc4_v()] =
311 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms4_vc4_2cs_v()] =
312 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms4_vc4_2cszv_v()] =
313 gmmu_pte_kind_zf32_x16v8s8_ms4_vc4_v();
314
315 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms8_vc8_v()] =
316 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms8_vc8_2cs_v()] =
317 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms8_vc8_2cszv_v()] =
318 gmmu_pte_kind_zf32_x16v8s8_ms8_vc8_v();
319
320 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_v()] =
321 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_2cs_v()] =
322 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_2cszv_v()] =
323 gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_v();
324
325 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_v()] =
326 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_2cszv_v()] =
327 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_ms2_2cszv_v()] =
328 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_ms4_2cszv_v()] =
329 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_ms8_2cszv_v()] =
330 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_2cs_v()] =
331 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_ms2_2cs_v()] =
332 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_ms4_2cs_v()] =
333 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_ms8_2cs_v()] =
334 gmmu_pte_kind_zf32_x24s8_v();
335
336 gk20a_uc_kind_map[gmmu_pte_kind_c32_2c_v()] =
337 gk20a_uc_kind_map[gmmu_pte_kind_c32_2cba_v()] =
338 gk20a_uc_kind_map[gmmu_pte_kind_c32_2cra_v()] =
339 gk20a_uc_kind_map[gmmu_pte_kind_c32_2bra_v()] =
340 gk20a_uc_kind_map[gmmu_pte_kind_c32_ms2_2c_v()] =
341 gk20a_uc_kind_map[gmmu_pte_kind_c32_ms2_2cra_v()] =
342 gk20a_uc_kind_map[gmmu_pte_kind_c32_ms4_2c_v()] =
343 gk20a_uc_kind_map[gmmu_pte_kind_c32_ms4_2cbr_v()] =
344 gk20a_uc_kind_map[gmmu_pte_kind_c32_ms4_2cba_v()] =
345 gk20a_uc_kind_map[gmmu_pte_kind_c32_ms4_2cra_v()] =
346 gk20a_uc_kind_map[gmmu_pte_kind_c32_ms4_2bra_v()] =
347 gk20a_uc_kind_map[gmmu_pte_kind_c32_ms8_ms16_2c_v()] =
348 gk20a_uc_kind_map[gmmu_pte_kind_c32_ms8_ms16_2cra_v()] =
349 gk20a_uc_kind_map[gmmu_pte_kind_c64_2c_v()] =
350 gk20a_uc_kind_map[gmmu_pte_kind_c64_2cbr_v()] =
351 gk20a_uc_kind_map[gmmu_pte_kind_c64_2cba_v()] =
352 gk20a_uc_kind_map[gmmu_pte_kind_c64_2cra_v()] =
353 gk20a_uc_kind_map[gmmu_pte_kind_c64_2bra_v()] =
354 gk20a_uc_kind_map[gmmu_pte_kind_c64_ms2_2c_v()] =
355 gk20a_uc_kind_map[gmmu_pte_kind_c64_ms2_2cra_v()] =
356 gk20a_uc_kind_map[gmmu_pte_kind_c64_ms4_2c_v()] =
357 gk20a_uc_kind_map[gmmu_pte_kind_c64_ms4_2cbr_v()] =
358 gk20a_uc_kind_map[gmmu_pte_kind_c64_ms4_2cba_v()] =
359 gk20a_uc_kind_map[gmmu_pte_kind_c64_ms4_2cra_v()] =
360 gk20a_uc_kind_map[gmmu_pte_kind_c64_ms4_2bra_v()] =
361 gk20a_uc_kind_map[gmmu_pte_kind_c64_ms8_ms16_2c_v()] =
362 gk20a_uc_kind_map[gmmu_pte_kind_c64_ms8_ms16_2cra_v()] =
363 gk20a_uc_kind_map[gmmu_pte_kind_c128_2c_v()] =
364 gk20a_uc_kind_map[gmmu_pte_kind_c128_2cr_v()] =
365 gk20a_uc_kind_map[gmmu_pte_kind_c128_ms2_2c_v()] =
366 gk20a_uc_kind_map[gmmu_pte_kind_c128_ms2_2cr_v()] =
367 gk20a_uc_kind_map[gmmu_pte_kind_c128_ms4_2c_v()] =
368 gk20a_uc_kind_map[gmmu_pte_kind_c128_ms4_2cr_v()] =
369 gk20a_uc_kind_map[gmmu_pte_kind_c128_ms8_ms16_2c_v()] =
370 gk20a_uc_kind_map[gmmu_pte_kind_c128_ms8_ms16_2cr_v()] =
371 gmmu_pte_kind_generic_16bx2_v();
372
373 gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms4_vc4_2czv_v()] =
374 gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms4_vc4_2cs_v()] =
375 gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms4_vc4_2zv_v()] =
376 gmmu_pte_kind_z24v8_ms4_vc4_v();
377
378 gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms4_vc12_2czv_v()] =
379 gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms4_vc12_2cs_v()] =
380 gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms4_vc12_2zv_v()] =
381 gmmu_pte_kind_z24v8_ms4_vc12_v();
382
383 gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms8_vc8_2cs_v()] =
384 gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms8_vc8_2czv_v()] =
385 gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms8_vc8_2zv_v()] =
386 gmmu_pte_kind_z24v8_ms8_vc8_v();
387
388 gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms8_vc24_2cs_v()] =
389 gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms8_vc24_2czv_v()] =
390 gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms8_vc24_2zv_v()] =
391 gmmu_pte_kind_z24v8_ms8_vc24_v();
392
393 gk20a_uc_kind_map[gmmu_pte_kind_x8c24_v()] =
394 gmmu_pte_kind_x8c24_v();
395}
396
397u16 gk20a_kind_attr[NV_KIND_ATTR_SIZE];
398void gk20a_init_kind_attr(void)
399{
400 u16 k;
401 for (k = 0; k < NV_KIND_ATTR_SIZE; k++) {
402 gk20a_kind_attr[k] = 0;
403 if (gk20a_kind_supported((u8)k))
404 gk20a_kind_attr[k] |= GK20A_KIND_ATTR_SUPPORTED;
405 if (gk20a_kind_compressible((u8)k))
406 gk20a_kind_attr[k] |= GK20A_KIND_ATTR_COMPRESSIBLE;
407 if (gk20a_kind_z((u8)k))
408 gk20a_kind_attr[k] |= GK20A_KIND_ATTR_Z;
409 if (gk20a_kind_c((u8)k))
410 gk20a_kind_attr[k] |= GK20A_KIND_ATTR_C;
411 if (gk20a_kind_zbc((u8)k))
412 gk20a_kind_attr[k] |= GK20A_KIND_ATTR_ZBC;
413 }
414}
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 @@
1/*
2 * drivers/video/tegra/host/gk20a/kind_gk20a.h
3 *
4 * GK20A memory kind management
5 *
6 * Copyright (c) 2011-2017, NVIDIA CORPORATION. All rights reserved.
7 *
8 * Permission is hereby granted, free of charge, to any person obtaining a
9 * copy of this software and associated documentation files (the "Software"),
10 * to deal in the Software without restriction, including without limitation
11 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
12 * and/or sell copies of the Software, and to permit persons to whom the
13 * Software is furnished to do so, subject to the following conditions:
14 *
15 * The above copyright notice and this permission notice shall be included in
16 * all copies or substantial portions of the Software.
17 *
18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
21 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
23 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
24 * DEALINGS IN THE SOFTWARE.
25 */
26#ifndef __KIND_GK20A_H__
27#define __KIND_GK20A_H__
28
29#include <nvgpu/bitops.h>
30
31void gk20a_init_uncompressed_kind_map(void);
32void gk20a_init_kind_attr(void);
33
34extern u16 gk20a_kind_attr[];
35#define NV_KIND_ATTR_SIZE 256
36#define NV_KIND_DEFAULT -1
37
38#define GK20A_KIND_ATTR_SUPPORTED BIT(0)
39#define GK20A_KIND_ATTR_COMPRESSIBLE BIT(1)
40#define GK20A_KIND_ATTR_Z BIT(2)
41#define GK20A_KIND_ATTR_C BIT(3)
42#define GK20A_KIND_ATTR_ZBC BIT(4)
43
44/* TBD: not sure on the work creation for gk20a, doubtful */
45static inline bool gk20a_kind_work_creation_sked(u8 k)
46{
47 return false;
48}
49static inline bool gk20a_kind_work_creation_host(u8 k)
50{
51 return false;
52}
53
54static inline bool gk20a_kind_work_creation(u8 k)
55{
56 return gk20a_kind_work_creation_sked(k) ||
57 gk20a_kind_work_creation_host(k);
58}
59
60static inline bool gk20a_kind_is_supported(u8 k)
61{
62 return !!(gk20a_kind_attr[k] & GK20A_KIND_ATTR_SUPPORTED);
63}
64static inline bool gk20a_kind_is_compressible(u8 k)
65{
66 return !!(gk20a_kind_attr[k] & GK20A_KIND_ATTR_COMPRESSIBLE);
67}
68
69static inline bool gk20a_kind_is_z(u8 k)
70{
71 return !!(gk20a_kind_attr[k] & GK20A_KIND_ATTR_Z);
72}
73
74static inline bool gk20a_kind_is_c(u8 k)
75{
76 return !!(gk20a_kind_attr[k] & GK20A_KIND_ATTR_C);
77}
78static inline bool gk20a_kind_is_zbc(u8 k)
79{
80 return !!(gk20a_kind_attr[k] & GK20A_KIND_ATTR_ZBC);
81}
82
83/* maps kind to its uncompressed version */
84extern u8 gk20a_uc_kind_map[];
85static inline u8 gk20a_get_uncompressed_kind(u8 k)
86{
87 return gk20a_uc_kind_map[k];
88}
89
90#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 @@
43#include "gk20a.h" 43#include "gk20a.h"
44#include "mm_gk20a.h" 44#include "mm_gk20a.h"
45#include "fence_gk20a.h" 45#include "fence_gk20a.h"
46#include "kind_gk20a.h"
47#include "bus_gk20a.h" 46#include "bus_gk20a.h"
48 47
49#include <nvgpu/hw/gk20a/hw_gmmu_gk20a.h> 48#include <nvgpu/hw/gk20a/hw_gmmu_gk20a.h>
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 @@
23 */ 23 */
24 24
25#include "gk20a/gk20a.h" 25#include "gk20a/gk20a.h"
26#include "gk20a/kind_gk20a.h"
27#include "gk20a/fb_gk20a.h" 26#include "gk20a/fb_gk20a.h"
28#include "gm20b/fb_gm20b.h" 27#include "gm20b/fb_gm20b.h"
29 28
@@ -43,407 +42,6 @@ void fb_gm20b_init_fs_state(struct gk20a *g)
43 g->ltc_count); 42 g->ltc_count);
44} 43}
45 44
46noinline_for_stack void gm20b_init_uncompressed_kind_map(void)
47{
48 int i;
49
50 for (i = 0; i < 256; i++)
51 gk20a_uc_kind_map[i] = gmmu_pte_kind_invalid_v();
52
53 /* From gm20b */
54 gk20a_uc_kind_map[gmmu_pte_kind_s8_v()] =
55 gk20a_uc_kind_map[gmmu_pte_kind_s8_2s_v()] =
56 gmmu_pte_kind_s8_v();
57
58 /* From gk20a */
59 gk20a_uc_kind_map[gmmu_pte_kind_z16_v()] =
60 gk20a_uc_kind_map[gmmu_pte_kind_z16_2c_v()] =
61 gk20a_uc_kind_map[gmmu_pte_kind_z16_ms2_2c_v()] =
62 gk20a_uc_kind_map[gmmu_pte_kind_z16_ms4_2c_v()] =
63 gk20a_uc_kind_map[gmmu_pte_kind_z16_ms8_2c_v()] =
64 gk20a_uc_kind_map[gmmu_pte_kind_z16_2z_v()] =
65 gk20a_uc_kind_map[gmmu_pte_kind_z16_ms2_2z_v()] =
66 gk20a_uc_kind_map[gmmu_pte_kind_z16_ms4_2z_v()] =
67 gk20a_uc_kind_map[gmmu_pte_kind_z16_ms8_2z_v()] =
68 gmmu_pte_kind_z16_v();
69
70 gk20a_uc_kind_map[gmmu_pte_kind_s8z24_v()] =
71 gk20a_uc_kind_map[gmmu_pte_kind_s8z24_2cz_v()] =
72 gk20a_uc_kind_map[gmmu_pte_kind_s8z24_ms2_2cz_v()] =
73 gk20a_uc_kind_map[gmmu_pte_kind_s8z24_ms4_2cz_v()] =
74 gk20a_uc_kind_map[gmmu_pte_kind_s8z24_ms8_2cz_v()] =
75 gk20a_uc_kind_map[gmmu_pte_kind_s8z24_2cs_v()] =
76 gk20a_uc_kind_map[gmmu_pte_kind_s8z24_ms2_2cs_v()] =
77 gk20a_uc_kind_map[gmmu_pte_kind_s8z24_ms4_2cs_v()] =
78 gk20a_uc_kind_map[gmmu_pte_kind_s8z24_ms8_2cs_v()] =
79 gmmu_pte_kind_s8z24_v();
80
81 gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc4_v()] =
82 gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc4_2cs_v()] =
83 gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc4_2czv_v()] =
84 gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc4_2zv_v()] =
85 gmmu_pte_kind_v8z24_ms4_vc4_v();
86
87 gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc8_v()] =
88 gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc8_2cs_v()] =
89 gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc8_2czv_v()] =
90 gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc8_2zv_v()] =
91 gmmu_pte_kind_v8z24_ms8_vc8_v();
92
93 gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc12_v()] =
94 gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc12_2cs_v()] =
95 gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc12_2czv_v()] =
96 gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc12_2zv_v()] =
97 gmmu_pte_kind_v8z24_ms4_vc12_v();
98
99 gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc24_v()] =
100 gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc24_2cs_v()] =
101 gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc24_2czv_v()] =
102 gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc24_2zv_v()] =
103 gmmu_pte_kind_v8z24_ms8_vc24_v();
104
105 gk20a_uc_kind_map[gmmu_pte_kind_z24s8_v()] =
106 gk20a_uc_kind_map[gmmu_pte_kind_z24s8_2cs_v()] =
107 gk20a_uc_kind_map[gmmu_pte_kind_z24s8_ms2_2cs_v()] =
108 gk20a_uc_kind_map[gmmu_pte_kind_z24s8_ms4_2cs_v()] =
109 gk20a_uc_kind_map[gmmu_pte_kind_z24s8_ms8_2cs_v()] =
110 gk20a_uc_kind_map[gmmu_pte_kind_z24s8_2cz_v()] =
111 gk20a_uc_kind_map[gmmu_pte_kind_z24s8_ms2_2cz_v()] =
112 gk20a_uc_kind_map[gmmu_pte_kind_z24s8_ms4_2cz_v()] =
113 gk20a_uc_kind_map[gmmu_pte_kind_z24s8_ms8_2cz_v()] =
114 gmmu_pte_kind_z24s8_v();
115
116 gk20a_uc_kind_map[gmmu_pte_kind_zf32_v()] =
117 gk20a_uc_kind_map[gmmu_pte_kind_zf32_2cs_v()] =
118 gk20a_uc_kind_map[gmmu_pte_kind_zf32_ms2_2cs_v()] =
119 gk20a_uc_kind_map[gmmu_pte_kind_zf32_ms4_2cs_v()] =
120 gk20a_uc_kind_map[gmmu_pte_kind_zf32_ms8_2cs_v()] =
121 gk20a_uc_kind_map[gmmu_pte_kind_zf32_2cz_v()] =
122 gk20a_uc_kind_map[gmmu_pte_kind_zf32_ms2_2cz_v()] =
123 gk20a_uc_kind_map[gmmu_pte_kind_zf32_ms4_2cz_v()] =
124 gk20a_uc_kind_map[gmmu_pte_kind_zf32_ms8_2cz_v()] =
125 gmmu_pte_kind_zf32_v();
126
127 gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_v()] =
128 gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_2cs_v()] =
129 gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_2cszv_v()] =
130 gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_v();
131
132 gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms4_vc4_v()] =
133 gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms4_vc4_2cs_v()] =
134 gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms4_vc4_2cszv_v()] =
135 gmmu_pte_kind_x8z24_x16v8s8_ms4_vc4_v();
136
137 gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms8_vc8_v()] =
138 gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms8_vc8_2cs_v()] =
139 gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms8_vc8_2cszv_v()] =
140 gmmu_pte_kind_x8z24_x16v8s8_ms8_vc8_v();
141
142 gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_v()] =
143 gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_2cs_v()] =
144 gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_2cszv_v()] =
145 gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_v();
146
147 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_v()] =
148 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_2cs_v()] =
149 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_2cszv_v()] =
150 gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_v();
151
152 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms4_vc4_v()] =
153 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms4_vc4_2cs_v()] =
154 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms4_vc4_2cszv_v()] =
155 gmmu_pte_kind_zf32_x16v8s8_ms4_vc4_v();
156
157 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms8_vc8_v()] =
158 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms8_vc8_2cs_v()] =
159 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms8_vc8_2cszv_v()] =
160 gmmu_pte_kind_zf32_x16v8s8_ms8_vc8_v();
161
162 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_v()] =
163 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_2cs_v()] =
164 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_2cszv_v()] =
165 gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_v();
166
167 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_v()] =
168 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_2cszv_v()] =
169 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_ms2_2cszv_v()] =
170 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_ms4_2cszv_v()] =
171 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_ms8_2cszv_v()] =
172 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_2cs_v()] =
173 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_ms2_2cs_v()] =
174 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_ms4_2cs_v()] =
175 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_ms8_2cs_v()] =
176 gmmu_pte_kind_zf32_x24s8_v();
177
178 gk20a_uc_kind_map[gmmu_pte_kind_c32_2c_v()] =
179 gk20a_uc_kind_map[gmmu_pte_kind_c32_2cba_v()] =
180 gk20a_uc_kind_map[gmmu_pte_kind_c32_2cra_v()] =
181 gk20a_uc_kind_map[gmmu_pte_kind_c32_2bra_v()] =
182 gk20a_uc_kind_map[gmmu_pte_kind_c32_ms2_2c_v()] =
183 gk20a_uc_kind_map[gmmu_pte_kind_c32_ms2_2cra_v()] =
184 gk20a_uc_kind_map[gmmu_pte_kind_c32_ms4_2c_v()] =
185 gk20a_uc_kind_map[gmmu_pte_kind_c32_ms4_2cbr_v()] =
186 gk20a_uc_kind_map[gmmu_pte_kind_c32_ms4_2cba_v()] =
187 gk20a_uc_kind_map[gmmu_pte_kind_c32_ms4_2cra_v()] =
188 gk20a_uc_kind_map[gmmu_pte_kind_c32_ms4_2bra_v()] =
189 gk20a_uc_kind_map[gmmu_pte_kind_c32_ms8_ms16_2c_v()] =
190 gk20a_uc_kind_map[gmmu_pte_kind_c32_ms8_ms16_2cra_v()] =
191 gk20a_uc_kind_map[gmmu_pte_kind_c64_2c_v()] =
192 gk20a_uc_kind_map[gmmu_pte_kind_c64_2cbr_v()] =
193 gk20a_uc_kind_map[gmmu_pte_kind_c64_2cba_v()] =
194 gk20a_uc_kind_map[gmmu_pte_kind_c64_2cra_v()] =
195 gk20a_uc_kind_map[gmmu_pte_kind_c64_2bra_v()] =
196 gk20a_uc_kind_map[gmmu_pte_kind_c64_ms2_2c_v()] =
197 gk20a_uc_kind_map[gmmu_pte_kind_c64_ms2_2cra_v()] =
198 gk20a_uc_kind_map[gmmu_pte_kind_c64_ms4_2c_v()] =
199 gk20a_uc_kind_map[gmmu_pte_kind_c64_ms4_2cbr_v()] =
200 gk20a_uc_kind_map[gmmu_pte_kind_c64_ms4_2cba_v()] =
201 gk20a_uc_kind_map[gmmu_pte_kind_c64_ms4_2cra_v()] =
202 gk20a_uc_kind_map[gmmu_pte_kind_c64_ms4_2bra_v()] =
203 gk20a_uc_kind_map[gmmu_pte_kind_c64_ms8_ms16_2c_v()] =
204 gk20a_uc_kind_map[gmmu_pte_kind_c64_ms8_ms16_2cra_v()] =
205 gk20a_uc_kind_map[gmmu_pte_kind_c128_2c_v()] =
206 gk20a_uc_kind_map[gmmu_pte_kind_c128_2cr_v()] =
207 gk20a_uc_kind_map[gmmu_pte_kind_c128_ms2_2c_v()] =
208 gk20a_uc_kind_map[gmmu_pte_kind_c128_ms2_2cr_v()] =
209 gk20a_uc_kind_map[gmmu_pte_kind_c128_ms4_2c_v()] =
210 gk20a_uc_kind_map[gmmu_pte_kind_c128_ms4_2cr_v()] =
211 gk20a_uc_kind_map[gmmu_pte_kind_c128_ms8_ms16_2c_v()] =
212 gk20a_uc_kind_map[gmmu_pte_kind_c128_ms8_ms16_2cr_v()] =
213 gmmu_pte_kind_generic_16bx2_v();
214
215 gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms4_vc4_2czv_v()] =
216 gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms4_vc4_2cs_v()] =
217 gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms4_vc4_2zv_v()] =
218 gmmu_pte_kind_z24v8_ms4_vc4_v();
219
220 gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms4_vc12_2czv_v()] =
221 gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms4_vc12_2cs_v()] =
222 gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms4_vc12_2zv_v()] =
223 gmmu_pte_kind_z24v8_ms4_vc12_v();
224
225 gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms8_vc8_2cs_v()] =
226 gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms8_vc8_2czv_v()] =
227 gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms8_vc8_2zv_v()] =
228 gmmu_pte_kind_z24v8_ms8_vc8_v();
229
230 gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms8_vc24_2cs_v()] =
231 gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms8_vc24_2czv_v()] =
232 gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms8_vc24_2zv_v()] =
233 gmmu_pte_kind_z24v8_ms8_vc24_v();
234
235 gk20a_uc_kind_map[gmmu_pte_kind_x8c24_v()] =
236 gmmu_pte_kind_x8c24_v();
237}
238
239static noinline_for_stack bool gm20b_kind_supported(u8 k)
240{
241 return /* From gm20b */
242 (k == gmmu_pte_kind_smsked_message_v())
243 || (k >= gmmu_pte_kind_s8_v() &&
244 k <= gmmu_pte_kind_s8_2s_v())
245 /* From gk20a */
246 || gk20a_kind_work_creation(k)
247 || (k == gmmu_pte_kind_invalid_v())
248 || (k == gmmu_pte_kind_pitch_v())
249 || (k >= gmmu_pte_kind_z16_v() &&
250 k <= gmmu_pte_kind_z16_ms8_2c_v())
251 || (k >= gmmu_pte_kind_z16_2z_v() &&
252 k <= gmmu_pte_kind_z16_ms8_2z_v())
253 || (k == gmmu_pte_kind_s8z24_v())
254 || (k >= gmmu_pte_kind_s8z24_2cz_v() &&
255 k <= gmmu_pte_kind_s8z24_ms8_2cz_v())
256 || (k >= gmmu_pte_kind_v8z24_ms4_vc12_v() &&
257 k <= gmmu_pte_kind_v8z24_ms8_vc24_v())
258 || (k >= gmmu_pte_kind_v8z24_ms4_vc12_2czv_v() &&
259 k <= gmmu_pte_kind_v8z24_ms8_vc24_2zv_v())
260 || (k == gmmu_pte_kind_z24s8_v())
261 || (k >= gmmu_pte_kind_z24s8_2cz_v() &&
262 k <= gmmu_pte_kind_z24s8_ms8_2cz_v())
263 || (k == gmmu_pte_kind_zf32_v())
264 || (k >= gmmu_pte_kind_zf32_2cz_v() &&
265 k <= gmmu_pte_kind_zf32_ms8_2cz_v())
266 || (k >= gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_v() &&
267 k <= gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_v())
268 || (k >= gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_2cszv_v() &&
269 k <= gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_v())
270 || (k >= gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_2cszv_v() &&
271 k <= gmmu_pte_kind_zf32_x24s8_v())
272 || (k >= gmmu_pte_kind_zf32_x24s8_2cszv_v() &&
273 k <= gmmu_pte_kind_zf32_x24s8_ms8_2cszv_v())
274 || (k == gmmu_pte_kind_generic_16bx2_v())
275 || (k == gmmu_pte_kind_c32_2c_v())
276 || (k == gmmu_pte_kind_c32_2cra_v())
277 || (k == gmmu_pte_kind_c32_ms2_2c_v())
278 || (k == gmmu_pte_kind_c32_ms2_2cra_v())
279 || (k >= gmmu_pte_kind_c32_ms4_2c_v() &&
280 k <= gmmu_pte_kind_c32_ms4_2cbr_v())
281 || (k >= gmmu_pte_kind_c32_ms4_2cra_v() &&
282 k <= gmmu_pte_kind_c64_2c_v())
283 || (k == gmmu_pte_kind_c64_2cra_v())
284 || (k == gmmu_pte_kind_c64_ms2_2c_v())
285 || (k == gmmu_pte_kind_c64_ms2_2cra_v())
286 || (k >= gmmu_pte_kind_c64_ms4_2c_v() &&
287 k <= gmmu_pte_kind_c64_ms4_2cbr_v())
288 || (k >= gmmu_pte_kind_c64_ms4_2cra_v() &&
289 k <= gmmu_pte_kind_c128_ms8_ms16_2cr_v())
290 || (k == gmmu_pte_kind_pitch_no_swizzle_v());
291}
292
293static noinline_for_stack bool gm20b_kind_z(u8 k)
294{
295 return /* From gm20b */
296 (k >= gmmu_pte_kind_s8_v() &&
297 k <= gmmu_pte_kind_s8_2s_v())
298 /* From gk20a */
299 || (k >= gmmu_pte_kind_z16_v() &&
300 k <= gmmu_pte_kind_v8z24_ms8_vc24_v())
301 || (k >= gmmu_pte_kind_v8z24_ms4_vc12_1zv_v() &&
302 k <= gmmu_pte_kind_v8z24_ms8_vc24_2cs_v())
303 || (k >= gmmu_pte_kind_v8z24_ms4_vc12_2czv_v() &&
304 k <= gmmu_pte_kind_z24v8_ms8_vc24_v())
305 || (k >= gmmu_pte_kind_z24v8_ms4_vc12_1zv_v() &&
306 k <= gmmu_pte_kind_z24v8_ms8_vc24_2cs_v())
307 || (k >= gmmu_pte_kind_z24v8_ms4_vc12_2czv_v() &&
308 k <= gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_1cs_v())
309 || (k >= gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_1zv_v() &&
310 k <= gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_1cs_v())
311 || (k >= gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_1zv_v() &&
312 k <= gmmu_pte_kind_zf32_x24s8_ms16_1cs_v());
313}
314
315static noinline_for_stack bool gm20b_kind_c(u8 k)
316{
317 return gk20a_kind_work_creation(k)
318 || (k == gmmu_pte_kind_pitch_v())
319 || (k == gmmu_pte_kind_generic_16bx2_v())
320 || (k >= gmmu_pte_kind_c32_2c_v() &&
321 k <= gmmu_pte_kind_c32_ms2_2cbr_v())
322 || (k == gmmu_pte_kind_c32_ms2_2cra_v())
323 || (k >= gmmu_pte_kind_c32_ms4_2c_v() &&
324 k <= gmmu_pte_kind_c64_ms2_2cbr_v())
325 || (k == gmmu_pte_kind_c64_ms2_2cra_v())
326 || (k >= gmmu_pte_kind_c64_ms4_2c_v() &&
327 k <= gmmu_pte_kind_pitch_no_swizzle_v());
328}
329
330static noinline_for_stack bool gm20b_kind_compressible(u8 k)
331{
332 return /* From gm20b */
333 (k >= gmmu_pte_kind_s8_v() &&
334 k <= gmmu_pte_kind_s8_2s_v())
335 /* From gk20a */
336 || (k >= gmmu_pte_kind_z16_2c_v() &&
337 k <= gmmu_pte_kind_z16_ms16_4cz_v())
338 || (k >= gmmu_pte_kind_s8z24_1z_v() &&
339 k <= gmmu_pte_kind_s8z24_ms16_4cszv_v())
340 || (k >= gmmu_pte_kind_v8z24_ms4_vc12_1zv_v() &&
341 k <= gmmu_pte_kind_v8z24_ms8_vc24_2cs_v())
342 || (k >= gmmu_pte_kind_v8z24_ms4_vc12_2czv_v() &&
343 k <= gmmu_pte_kind_v8z24_ms8_vc24_4cszv_v())
344 || (k >= gmmu_pte_kind_z24s8_1z_v() &&
345 k <= gmmu_pte_kind_z24s8_ms16_4cszv_v())
346 || (k >= gmmu_pte_kind_z24v8_ms4_vc12_1zv_v() &&
347 k <= gmmu_pte_kind_z24v8_ms8_vc24_2cs_v())
348 || (k >= gmmu_pte_kind_z24v8_ms4_vc12_2czv_v() &&
349 k <= gmmu_pte_kind_z24v8_ms8_vc24_4cszv_v())
350 || (k >= gmmu_pte_kind_zf32_1z_v() &&
351 k <= gmmu_pte_kind_zf32_ms16_2cz_v())
352 || (k >= gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_1cs_v() &&
353 k <= gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_1cs_v())
354 || (k >= gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_1zv_v() &&
355 k <= gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_2cszv_v())
356 || (k >= gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_1cs_v() &&
357 k <= gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_1cs_v())
358 || (k >= gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_1zv_v() &&
359 k <= gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_2cszv_v())
360 || (k >= gmmu_pte_kind_zf32_x24s8_1cs_v() &&
361 k <= gmmu_pte_kind_zf32_x24s8_ms16_1cs_v())
362 || (k >= gmmu_pte_kind_zf32_x24s8_2cszv_v() &&
363 k <= gmmu_pte_kind_c32_ms2_2cbr_v())
364 || (k == gmmu_pte_kind_c32_ms2_2cra_v())
365 || (k >= gmmu_pte_kind_c32_ms4_2c_v() &&
366 k <= gmmu_pte_kind_c64_ms2_2cbr_v())
367 || (k == gmmu_pte_kind_c64_ms2_2cra_v())
368 || (k >= gmmu_pte_kind_c64_ms4_2c_v() &&
369 k <= gmmu_pte_kind_c128_ms8_ms16_2cr_v());
370}
371
372static noinline_for_stack bool gm20b_kind_zbc(u8 k)
373{
374 return /* From gm20b */
375 (k >= gmmu_pte_kind_s8_v() &&
376 k <= gmmu_pte_kind_s8_2s_v())
377 /* From gk20a */
378 || (k >= gmmu_pte_kind_z16_2c_v() &&
379 k <= gmmu_pte_kind_z16_ms16_2c_v())
380 || (k >= gmmu_pte_kind_z16_4cz_v() &&
381 k <= gmmu_pte_kind_z16_ms16_4cz_v())
382 || (k >= gmmu_pte_kind_s8z24_2cz_v() &&
383 k <= gmmu_pte_kind_s8z24_ms16_4cszv_v())
384 || (k >= gmmu_pte_kind_v8z24_ms4_vc12_2cs_v() &&
385 k <= gmmu_pte_kind_v8z24_ms8_vc24_2cs_v())
386 || (k >= gmmu_pte_kind_v8z24_ms4_vc12_2czv_v() &&
387 k <= gmmu_pte_kind_v8z24_ms8_vc24_2czv_v())
388 || (k >= gmmu_pte_kind_v8z24_ms4_vc12_4cszv_v() &&
389 k <= gmmu_pte_kind_v8z24_ms8_vc24_4cszv_v())
390 || (k >= gmmu_pte_kind_z24s8_2cs_v() &&
391 k <= gmmu_pte_kind_z24s8_ms16_4cszv_v())
392 || (k >= gmmu_pte_kind_z24v8_ms4_vc12_2cs_v() &&
393 k <= gmmu_pte_kind_z24v8_ms8_vc24_2cs_v())
394 || (k >= gmmu_pte_kind_z24v8_ms4_vc12_2czv_v() &&
395 k <= gmmu_pte_kind_z24v8_ms8_vc24_2czv_v())
396 || (k >= gmmu_pte_kind_z24v8_ms4_vc12_4cszv_v() &&
397 k <= gmmu_pte_kind_z24v8_ms8_vc24_4cszv_v())
398 || (k >= gmmu_pte_kind_zf32_2cs_v() &&
399 k <= gmmu_pte_kind_zf32_ms16_2cz_v())
400 || (k >= gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_1cs_v() &&
401 k <= gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_1cs_v())
402 || (k >= gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_1czv_v() &&
403 k <= gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_2cszv_v())
404 || (k >= gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_1cs_v() &&
405 k <= gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_1cs_v())
406 || (k >= gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_1czv_v() &&
407 k <= gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_2cszv_v())
408 || (k >= gmmu_pte_kind_zf32_x24s8_1cs_v() &&
409 k <= gmmu_pte_kind_zf32_x24s8_ms16_1cs_v())
410 || (k >= gmmu_pte_kind_zf32_x24s8_2cszv_v() &&
411 k <= gmmu_pte_kind_c32_2cra_v())
412 || (k >= gmmu_pte_kind_c32_ms2_2c_v() &&
413 k <= gmmu_pte_kind_c32_ms2_2cbr_v())
414 || (k == gmmu_pte_kind_c32_ms2_2cra_v())
415 || (k >= gmmu_pte_kind_c32_ms4_2c_v() &&
416 k <= gmmu_pte_kind_c32_ms4_2cra_v())
417 || (k >= gmmu_pte_kind_c32_ms8_ms16_2c_v() &&
418 k <= gmmu_pte_kind_c64_2cra_v())
419 || (k >= gmmu_pte_kind_c64_ms2_2c_v() &&
420 k <= gmmu_pte_kind_c64_ms2_2cbr_v())
421 || (k == gmmu_pte_kind_c64_ms2_2cra_v())
422 || (k >= gmmu_pte_kind_c64_ms4_2c_v() &&
423 k <= gmmu_pte_kind_c64_ms4_2cra_v())
424 || (k >= gmmu_pte_kind_c64_ms8_ms16_2c_v() &&
425 k <= gmmu_pte_kind_c128_ms8_ms16_2cr_v());
426}
427
428void gm20b_init_kind_attr(void)
429{
430 u16 k;
431
432 for (k = 0; k < NV_KIND_ATTR_SIZE; k++) {
433 gk20a_kind_attr[k] = 0;
434 if (gm20b_kind_supported((u8)k))
435 gk20a_kind_attr[k] |= GK20A_KIND_ATTR_SUPPORTED;
436 if (gm20b_kind_compressible((u8)k))
437 gk20a_kind_attr[k] |= GK20A_KIND_ATTR_COMPRESSIBLE;
438 if (gm20b_kind_z((u8)k))
439 gk20a_kind_attr[k] |= GK20A_KIND_ATTR_Z;
440 if (gm20b_kind_c((u8)k))
441 gk20a_kind_attr[k] |= GK20A_KIND_ATTR_C;
442 if (gm20b_kind_zbc((u8)k))
443 gk20a_kind_attr[k] |= GK20A_KIND_ATTR_ZBC;
444 }
445}
446
447void gm20b_fb_set_mmu_page_size(struct gk20a *g) 45void gm20b_fb_set_mmu_page_size(struct gk20a *g)
448{ 46{
449 /* set large page size in fb */ 47 /* 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);
37bool gm20b_fb_debug_mode_enabled(struct gk20a *g); 37bool gm20b_fb_debug_mode_enabled(struct gk20a *g);
38void gm20b_fb_set_debug_mode(struct gk20a *g, bool enable); 38void gm20b_fb_set_debug_mode(struct gk20a *g, bool enable);
39 39
40void gm20b_init_uncompressed_kind_map(void);
41void gm20b_init_kind_attr(void);
42#endif 40#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)
703 g->pmu_lsf_pmu_wpr_init_done = 0; 703 g->pmu_lsf_pmu_wpr_init_done = 0;
704 g->bootstrap_owner = LSF_BOOTSTRAP_OWNER_DEFAULT; 704 g->bootstrap_owner = LSF_BOOTSTRAP_OWNER_DEFAULT;
705 705
706 gm20b_init_uncompressed_kind_map();
707 gm20b_init_kind_attr();
708
709 g->name = "gm20b"; 706 g->name = "gm20b";
710 707
711 return 0; 708 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)
769 g->pmu_lsf_pmu_wpr_init_done = 0; 769 g->pmu_lsf_pmu_wpr_init_done = 0;
770 g->bootstrap_owner = LSF_FALCON_ID_SEC2; 770 g->bootstrap_owner = LSF_FALCON_ID_SEC2;
771 771
772 gp10b_init_uncompressed_kind_map();
773 gp10b_init_kind_attr();
774
775 g->name = "gp10x"; 772 g->name = "gp10x";
776 773
777 gk20a_dbg_fn("done"); 774 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 @@
23 */ 23 */
24 24
25#include "gk20a/gk20a.h" 25#include "gk20a/gk20a.h"
26#include "gm20b/fb_gm20b.h"
27#include "gk20a/kind_gk20a.h"
28#include "fb_gp10b.h" 26#include "fb_gp10b.h"
29 27
30#include <nvgpu/hw/gp10b/hw_gmmu_gp10b.h>
31
32noinline_for_stack void gp10b_init_uncompressed_kind_map(void)
33{
34 int i;
35
36 for (i = 0; i < 256; i++)
37 gk20a_uc_kind_map[i] = gmmu_pte_kind_invalid_v();
38
39 /* From gp10b */
40 gk20a_uc_kind_map[gmmu_pte_kind_z16_2cz_v()] =
41 gk20a_uc_kind_map[gmmu_pte_kind_z16_ms2_2cz_v()] =
42 gk20a_uc_kind_map[gmmu_pte_kind_z16_ms4_2cz_v()] =
43 gk20a_uc_kind_map[gmmu_pte_kind_z16_ms8_2cz_v()] =
44 gk20a_uc_kind_map[gmmu_pte_kind_z16_ms16_2cz_v()] =
45 gmmu_pte_kind_z16_v();
46
47 gk20a_uc_kind_map[gmmu_pte_kind_c32_ms4_4cbra_v()] =
48 gk20a_uc_kind_map[gmmu_pte_kind_c64_ms4_4cbra_v()] =
49 gmmu_pte_kind_generic_16bx2_v();
50
51 /* From gm20b */
52 gk20a_uc_kind_map[gmmu_pte_kind_s8_v()] =
53 gk20a_uc_kind_map[gmmu_pte_kind_s8_2s_v()] =
54 gmmu_pte_kind_s8_v();
55
56 /* From gk20a */
57 gk20a_uc_kind_map[gmmu_pte_kind_z16_v()] =
58 gk20a_uc_kind_map[gmmu_pte_kind_z16_2c_v()] =
59 gk20a_uc_kind_map[gmmu_pte_kind_z16_ms2_2c_v()] =
60 gk20a_uc_kind_map[gmmu_pte_kind_z16_ms4_2c_v()] =
61 gk20a_uc_kind_map[gmmu_pte_kind_z16_ms8_2c_v()] =
62 gk20a_uc_kind_map[gmmu_pte_kind_z16_2z_v()] =
63 gk20a_uc_kind_map[gmmu_pte_kind_z16_ms2_2z_v()] =
64 gk20a_uc_kind_map[gmmu_pte_kind_z16_ms4_2z_v()] =
65 gk20a_uc_kind_map[gmmu_pte_kind_z16_ms8_2z_v()] =
66 gmmu_pte_kind_z16_v();
67
68 gk20a_uc_kind_map[gmmu_pte_kind_s8z24_v()] =
69 gk20a_uc_kind_map[gmmu_pte_kind_s8z24_2cz_v()] =
70 gk20a_uc_kind_map[gmmu_pte_kind_s8z24_ms2_2cz_v()] =
71 gk20a_uc_kind_map[gmmu_pte_kind_s8z24_ms4_2cz_v()] =
72 gk20a_uc_kind_map[gmmu_pte_kind_s8z24_ms8_2cz_v()] =
73 gk20a_uc_kind_map[gmmu_pte_kind_s8z24_2cs_v()] =
74 gk20a_uc_kind_map[gmmu_pte_kind_s8z24_ms2_2cs_v()] =
75 gk20a_uc_kind_map[gmmu_pte_kind_s8z24_ms4_2cs_v()] =
76 gk20a_uc_kind_map[gmmu_pte_kind_s8z24_ms8_2cs_v()] =
77 gmmu_pte_kind_s8z24_v();
78
79 gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc4_v()] =
80 gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc4_2cs_v()] =
81 gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc4_2czv_v()] =
82 gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc4_2zv_v()] =
83 gmmu_pte_kind_v8z24_ms4_vc4_v();
84
85 gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc8_v()] =
86 gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc8_2cs_v()] =
87 gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc8_2czv_v()] =
88 gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc8_2zv_v()] =
89 gmmu_pte_kind_v8z24_ms8_vc8_v();
90
91 gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc12_v()] =
92 gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc12_2cs_v()] =
93 gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc12_2czv_v()] =
94 gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms4_vc12_2zv_v()] =
95 gmmu_pte_kind_v8z24_ms4_vc12_v();
96
97 gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc24_v()] =
98 gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc24_2cs_v()] =
99 gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc24_2czv_v()] =
100 gk20a_uc_kind_map[gmmu_pte_kind_v8z24_ms8_vc24_2zv_v()] =
101 gmmu_pte_kind_v8z24_ms8_vc24_v();
102
103 gk20a_uc_kind_map[gmmu_pte_kind_z24s8_v()] =
104 gk20a_uc_kind_map[gmmu_pte_kind_z24s8_2cs_v()] =
105 gk20a_uc_kind_map[gmmu_pte_kind_z24s8_ms2_2cs_v()] =
106 gk20a_uc_kind_map[gmmu_pte_kind_z24s8_ms4_2cs_v()] =
107 gk20a_uc_kind_map[gmmu_pte_kind_z24s8_ms8_2cs_v()] =
108 gk20a_uc_kind_map[gmmu_pte_kind_z24s8_2cz_v()] =
109 gk20a_uc_kind_map[gmmu_pte_kind_z24s8_ms2_2cz_v()] =
110 gk20a_uc_kind_map[gmmu_pte_kind_z24s8_ms4_2cz_v()] =
111 gk20a_uc_kind_map[gmmu_pte_kind_z24s8_ms8_2cz_v()] =
112 gmmu_pte_kind_z24s8_v();
113
114 gk20a_uc_kind_map[gmmu_pte_kind_zf32_v()] =
115 gk20a_uc_kind_map[gmmu_pte_kind_zf32_2cs_v()] =
116 gk20a_uc_kind_map[gmmu_pte_kind_zf32_ms2_2cs_v()] =
117 gk20a_uc_kind_map[gmmu_pte_kind_zf32_ms4_2cs_v()] =
118 gk20a_uc_kind_map[gmmu_pte_kind_zf32_ms8_2cs_v()] =
119 gk20a_uc_kind_map[gmmu_pte_kind_zf32_2cz_v()] =
120 gk20a_uc_kind_map[gmmu_pte_kind_zf32_ms2_2cz_v()] =
121 gk20a_uc_kind_map[gmmu_pte_kind_zf32_ms4_2cz_v()] =
122 gk20a_uc_kind_map[gmmu_pte_kind_zf32_ms8_2cz_v()] =
123 gmmu_pte_kind_zf32_v();
124
125 gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_v()] =
126 gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_2cs_v()] =
127 gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_2cszv_v()] =
128 gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_v();
129
130 gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms4_vc4_v()] =
131 gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms4_vc4_2cs_v()] =
132 gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms4_vc4_2cszv_v()] =
133 gmmu_pte_kind_x8z24_x16v8s8_ms4_vc4_v();
134
135 gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms8_vc8_v()] =
136 gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms8_vc8_2cs_v()] =
137 gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms8_vc8_2cszv_v()] =
138 gmmu_pte_kind_x8z24_x16v8s8_ms8_vc8_v();
139
140 gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_v()] =
141 gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_2cs_v()] =
142 gk20a_uc_kind_map[gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_2cszv_v()] =
143 gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_v();
144
145 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_v()] =
146 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_2cs_v()] =
147 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_2cszv_v()] =
148 gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_v();
149
150 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms4_vc4_v()] =
151 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms4_vc4_2cs_v()] =
152 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms4_vc4_2cszv_v()] =
153 gmmu_pte_kind_zf32_x16v8s8_ms4_vc4_v();
154
155 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms8_vc8_v()] =
156 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms8_vc8_2cs_v()] =
157 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms8_vc8_2cszv_v()] =
158 gmmu_pte_kind_zf32_x16v8s8_ms8_vc8_v();
159
160 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_v()] =
161 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_2cs_v()] =
162 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_2cszv_v()] =
163 gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_v();
164
165 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_v()] =
166 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_2cszv_v()] =
167 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_ms2_2cszv_v()] =
168 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_ms4_2cszv_v()] =
169 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_ms8_2cszv_v()] =
170 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_2cs_v()] =
171 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_ms2_2cs_v()] =
172 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_ms4_2cs_v()] =
173 gk20a_uc_kind_map[gmmu_pte_kind_zf32_x24s8_ms8_2cs_v()] =
174 gmmu_pte_kind_zf32_x24s8_v();
175
176 gk20a_uc_kind_map[gmmu_pte_kind_c32_2c_v()] =
177 gk20a_uc_kind_map[gmmu_pte_kind_c32_2cba_v()] =
178 gk20a_uc_kind_map[gmmu_pte_kind_c32_2cra_v()] =
179 gk20a_uc_kind_map[gmmu_pte_kind_c32_2bra_v()] =
180 gk20a_uc_kind_map[gmmu_pte_kind_c32_ms2_2c_v()] =
181 gk20a_uc_kind_map[gmmu_pte_kind_c32_ms2_2cra_v()] =
182 gk20a_uc_kind_map[gmmu_pte_kind_c32_ms4_2c_v()] =
183 gk20a_uc_kind_map[gmmu_pte_kind_c32_ms4_2cbr_v()] =
184 gk20a_uc_kind_map[gmmu_pte_kind_c32_ms4_2cba_v()] =
185 gk20a_uc_kind_map[gmmu_pte_kind_c32_ms4_2cra_v()] =
186 gk20a_uc_kind_map[gmmu_pte_kind_c32_ms4_2bra_v()] =
187 gk20a_uc_kind_map[gmmu_pte_kind_c32_ms8_ms16_2c_v()] =
188 gk20a_uc_kind_map[gmmu_pte_kind_c32_ms8_ms16_2cra_v()] =
189 gk20a_uc_kind_map[gmmu_pte_kind_c64_2c_v()] =
190 gk20a_uc_kind_map[gmmu_pte_kind_c64_2cbr_v()] =
191 gk20a_uc_kind_map[gmmu_pte_kind_c64_2cba_v()] =
192 gk20a_uc_kind_map[gmmu_pte_kind_c64_2cra_v()] =
193 gk20a_uc_kind_map[gmmu_pte_kind_c64_2bra_v()] =
194 gk20a_uc_kind_map[gmmu_pte_kind_c64_ms2_2c_v()] =
195 gk20a_uc_kind_map[gmmu_pte_kind_c64_ms2_2cra_v()] =
196 gk20a_uc_kind_map[gmmu_pte_kind_c64_ms4_2c_v()] =
197 gk20a_uc_kind_map[gmmu_pte_kind_c64_ms4_2cbr_v()] =
198 gk20a_uc_kind_map[gmmu_pte_kind_c64_ms4_2cba_v()] =
199 gk20a_uc_kind_map[gmmu_pte_kind_c64_ms4_2cra_v()] =
200 gk20a_uc_kind_map[gmmu_pte_kind_c64_ms4_2bra_v()] =
201 gk20a_uc_kind_map[gmmu_pte_kind_c64_ms8_ms16_2c_v()] =
202 gk20a_uc_kind_map[gmmu_pte_kind_c64_ms8_ms16_2cra_v()] =
203 gk20a_uc_kind_map[gmmu_pte_kind_c128_2c_v()] =
204 gk20a_uc_kind_map[gmmu_pte_kind_c128_2cr_v()] =
205 gk20a_uc_kind_map[gmmu_pte_kind_c128_ms2_2c_v()] =
206 gk20a_uc_kind_map[gmmu_pte_kind_c128_ms2_2cr_v()] =
207 gk20a_uc_kind_map[gmmu_pte_kind_c128_ms4_2c_v()] =
208 gk20a_uc_kind_map[gmmu_pte_kind_c128_ms4_2cr_v()] =
209 gk20a_uc_kind_map[gmmu_pte_kind_c128_ms8_ms16_2c_v()] =
210 gk20a_uc_kind_map[gmmu_pte_kind_c128_ms8_ms16_2cr_v()] =
211 gmmu_pte_kind_generic_16bx2_v();
212
213 gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms4_vc4_2czv_v()] =
214 gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms4_vc4_2cs_v()] =
215 gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms4_vc4_2zv_v()] =
216 gmmu_pte_kind_z24v8_ms4_vc4_v();
217
218 gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms4_vc12_2czv_v()] =
219 gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms4_vc12_2cs_v()] =
220 gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms4_vc12_2zv_v()] =
221 gmmu_pte_kind_z24v8_ms4_vc12_v();
222
223 gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms8_vc8_2cs_v()] =
224 gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms8_vc8_2czv_v()] =
225 gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms8_vc8_2zv_v()] =
226 gmmu_pte_kind_z24v8_ms8_vc8_v();
227
228 gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms8_vc24_2cs_v()] =
229 gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms8_vc24_2czv_v()] =
230 gk20a_uc_kind_map[gmmu_pte_kind_z24v8_ms8_vc24_2zv_v()] =
231 gmmu_pte_kind_z24v8_ms8_vc24_v();
232
233 gk20a_uc_kind_map[gmmu_pte_kind_x8c24_v()] =
234 gmmu_pte_kind_x8c24_v();
235}
236
237static noinline_for_stack bool gp10b_kind_supported(u8 k)
238{
239 return /* From gp10b */
240 (k >= gmmu_pte_kind_z16_2cz_v() &&
241 k <= gmmu_pte_kind_z16_ms8_2cz_v())
242 || k == gmmu_pte_kind_z16_ms16_2cz_v()
243 || k == gmmu_pte_kind_c32_ms4_4cbra_v()
244 || k == gmmu_pte_kind_c64_ms4_4cbra_v()
245 /* From gm20b */
246 || (k == gmmu_pte_kind_smsked_message_v())
247 || (k >= gmmu_pte_kind_s8_v() &&
248 k <= gmmu_pte_kind_s8_2s_v())
249 /* From gk20a */
250 || gk20a_kind_work_creation(k)
251 || (k == gmmu_pte_kind_invalid_v())
252 || (k == gmmu_pte_kind_pitch_v())
253 || (k >= gmmu_pte_kind_z16_v() &&
254 k <= gmmu_pte_kind_z16_ms8_2c_v())
255 || (k >= gmmu_pte_kind_z16_2z_v() &&
256 k <= gmmu_pte_kind_z16_ms8_2z_v())
257 || (k == gmmu_pte_kind_s8z24_v())
258 || (k >= gmmu_pte_kind_s8z24_2cz_v() &&
259 k <= gmmu_pte_kind_s8z24_ms8_2cz_v())
260 || (k >= gmmu_pte_kind_v8z24_ms4_vc12_v() &&
261 k <= gmmu_pte_kind_v8z24_ms8_vc24_v())
262 || (k >= gmmu_pte_kind_v8z24_ms4_vc12_2czv_v() &&
263 k <= gmmu_pte_kind_v8z24_ms8_vc24_2zv_v())
264 || (k == gmmu_pte_kind_z24s8_v())
265 || (k >= gmmu_pte_kind_z24s8_2cz_v() &&
266 k <= gmmu_pte_kind_z24s8_ms8_2cz_v())
267 || (k == gmmu_pte_kind_zf32_v())
268 || (k >= gmmu_pte_kind_zf32_2cz_v() &&
269 k <= gmmu_pte_kind_zf32_ms8_2cz_v())
270 || (k >= gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_v() &&
271 k <= gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_v())
272 || (k >= gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_2cszv_v() &&
273 k <= gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_v())
274 || (k >= gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_2cszv_v() &&
275 k <= gmmu_pte_kind_zf32_x24s8_v())
276 || (k >= gmmu_pte_kind_zf32_x24s8_2cszv_v() &&
277 k <= gmmu_pte_kind_zf32_x24s8_ms8_2cszv_v())
278 || (k == gmmu_pte_kind_generic_16bx2_v())
279 || (k == gmmu_pte_kind_c32_2c_v())
280 || (k == gmmu_pte_kind_c32_2cra_v())
281 || (k == gmmu_pte_kind_c32_ms2_2c_v())
282 || (k == gmmu_pte_kind_c32_ms2_2cra_v())
283 || (k >= gmmu_pte_kind_c32_ms4_2c_v() &&
284 k <= gmmu_pte_kind_c32_ms4_2cbr_v())
285 || (k >= gmmu_pte_kind_c32_ms4_2cra_v() &&
286 k <= gmmu_pte_kind_c64_2c_v())
287 || (k == gmmu_pte_kind_c64_2cra_v())
288 || (k == gmmu_pte_kind_c64_ms2_2c_v())
289 || (k == gmmu_pte_kind_c64_ms2_2cra_v())
290 || (k >= gmmu_pte_kind_c64_ms4_2c_v() &&
291 k <= gmmu_pte_kind_c64_ms4_2cbr_v())
292 || (k >= gmmu_pte_kind_c64_ms4_2cra_v() &&
293 k <= gmmu_pte_kind_c128_ms8_ms16_2cr_v())
294 || (k == gmmu_pte_kind_pitch_no_swizzle_v());
295}
296
297static noinline_for_stack bool gp10b_kind_z(u8 k)
298{
299 return /* From gp10b */
300 (k >= gmmu_pte_kind_z16_2cz_v() &&
301 k <= gmmu_pte_kind_z16_ms8_2cz_v())
302 || (k == gmmu_pte_kind_z16_ms16_2cz_v())
303 /* From gm20b */
304 || (k >= gmmu_pte_kind_s8_v() &&
305 k <= gmmu_pte_kind_s8_2s_v())
306 /* From gk20a */
307 || (k >= gmmu_pte_kind_z16_v() &&
308 k <= gmmu_pte_kind_v8z24_ms8_vc24_v())
309 || (k >= gmmu_pte_kind_v8z24_ms4_vc12_1zv_v() &&
310 k <= gmmu_pte_kind_v8z24_ms8_vc24_2cs_v())
311 || (k >= gmmu_pte_kind_v8z24_ms4_vc12_2czv_v() &&
312 k <= gmmu_pte_kind_z24v8_ms8_vc24_v())
313 || (k >= gmmu_pte_kind_z24v8_ms4_vc12_1zv_v() &&
314 k <= gmmu_pte_kind_z24v8_ms8_vc24_2cs_v())
315 || (k >= gmmu_pte_kind_z24v8_ms4_vc12_2czv_v() &&
316 k <= gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_1cs_v())
317 || (k >= gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_1zv_v() &&
318 k <= gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_1cs_v())
319 || (k >= gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_1zv_v() &&
320 k <= gmmu_pte_kind_zf32_x24s8_ms16_1cs_v());
321}
322
323static noinline_for_stack bool gp10b_kind_c(u8 k)
324{
325 return gk20a_kind_work_creation(k)
326 || (k == gmmu_pte_kind_pitch_v())
327 || (k == gmmu_pte_kind_generic_16bx2_v())
328 || (k >= gmmu_pte_kind_c32_2c_v() &&
329 k <= gmmu_pte_kind_c32_ms2_2cbr_v())
330 || (k == gmmu_pte_kind_c32_ms2_2cra_v())
331 || (k >= gmmu_pte_kind_c32_ms4_2c_v() &&
332 k <= gmmu_pte_kind_c64_ms2_2cbr_v())
333 || (k == gmmu_pte_kind_c64_ms2_2cra_v())
334 || (k >= gmmu_pte_kind_c64_ms4_2c_v() &&
335 k <= gmmu_pte_kind_pitch_no_swizzle_v());
336}
337
338static noinline_for_stack bool gp10b_kind_compressible(u8 k)
339{
340 return /* From gp10b */
341 (k >= gmmu_pte_kind_z16_2cz_v() &&
342 k <= gmmu_pte_kind_z16_ms8_2cz_v())
343 || (k == gmmu_pte_kind_z16_ms16_2cz_v())
344 || (k >= gmmu_pte_kind_z16_4cz_v() &&
345 k <= gmmu_pte_kind_z16_ms16_4cz_v())
346 || (k == gmmu_pte_kind_c32_ms4_4cbra_v())
347 || (k == gmmu_pte_kind_c64_ms4_4cbra_v())
348 /* From gm20b */
349 || (k >= gmmu_pte_kind_s8_v() &&
350 k <= gmmu_pte_kind_s8_2s_v())
351 /* From gk20a */
352 || (k >= gmmu_pte_kind_z16_2c_v() &&
353 k <= gmmu_pte_kind_z16_ms16_4cz_v())
354 || (k >= gmmu_pte_kind_s8z24_1z_v() &&
355 k <= gmmu_pte_kind_s8z24_ms16_4cszv_v())
356 || (k >= gmmu_pte_kind_v8z24_ms4_vc12_1zv_v() &&
357 k <= gmmu_pte_kind_v8z24_ms8_vc24_2cs_v())
358 || (k >= gmmu_pte_kind_v8z24_ms4_vc12_2czv_v() &&
359 k <= gmmu_pte_kind_v8z24_ms8_vc24_4cszv_v())
360 || (k >= gmmu_pte_kind_z24s8_1z_v() &&
361 k <= gmmu_pte_kind_z24s8_ms16_4cszv_v())
362 || (k >= gmmu_pte_kind_z24v8_ms4_vc12_1zv_v() &&
363 k <= gmmu_pte_kind_z24v8_ms8_vc24_2cs_v())
364 || (k >= gmmu_pte_kind_z24v8_ms4_vc12_2czv_v() &&
365 k <= gmmu_pte_kind_z24v8_ms8_vc24_4cszv_v())
366 || (k >= gmmu_pte_kind_zf32_1z_v() &&
367 k <= gmmu_pte_kind_zf32_ms16_2cz_v())
368 || (k >= gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_1cs_v() &&
369 k <= gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_1cs_v())
370 || (k >= gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_1zv_v() &&
371 k <= gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_2cszv_v())
372 || (k >= gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_1cs_v() &&
373 k <= gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_1cs_v())
374 || (k >= gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_1zv_v() &&
375 k <= gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_2cszv_v())
376 || (k >= gmmu_pte_kind_zf32_x24s8_1cs_v() &&
377 k <= gmmu_pte_kind_zf32_x24s8_ms16_1cs_v())
378 || (k >= gmmu_pte_kind_zf32_x24s8_2cszv_v() &&
379 k <= gmmu_pte_kind_c32_ms2_2cbr_v())
380 || (k == gmmu_pte_kind_c32_ms2_2cra_v())
381 || (k >= gmmu_pte_kind_c32_ms4_2c_v() &&
382 k <= gmmu_pte_kind_c64_ms2_2cbr_v())
383 || (k == gmmu_pte_kind_c64_ms2_2cra_v())
384 || (k >= gmmu_pte_kind_c64_ms4_2c_v() &&
385 k <= gmmu_pte_kind_c128_ms8_ms16_2cr_v());
386}
387
388static noinline_for_stack bool gp10b_kind_zbc(u8 k)
389{
390 return /* From gp10b */
391 (k >= gmmu_pte_kind_z16_2cz_v() &&
392 k <= gmmu_pte_kind_z16_ms8_2cz_v())
393 || (k == gmmu_pte_kind_z16_ms16_2cz_v())
394 || (k == gmmu_pte_kind_c32_ms4_4cbra_v())
395 || (k == gmmu_pte_kind_c64_ms4_4cbra_v())
396 /* From gm20b */
397 || (k >= gmmu_pte_kind_s8_v() &&
398 k <= gmmu_pte_kind_s8_2s_v())
399 /* From gk20a */
400 || (k >= gmmu_pte_kind_z16_2c_v() &&
401 k <= gmmu_pte_kind_z16_ms16_2c_v())
402 || (k >= gmmu_pte_kind_z16_4cz_v() &&
403 k <= gmmu_pte_kind_z16_ms16_4cz_v())
404 || (k >= gmmu_pte_kind_s8z24_2cz_v() &&
405 k <= gmmu_pte_kind_s8z24_ms16_4cszv_v())
406 || (k >= gmmu_pte_kind_v8z24_ms4_vc12_2cs_v() &&
407 k <= gmmu_pte_kind_v8z24_ms8_vc24_2cs_v())
408 || (k >= gmmu_pte_kind_v8z24_ms4_vc12_2czv_v() &&
409 k <= gmmu_pte_kind_v8z24_ms8_vc24_2czv_v())
410 || (k >= gmmu_pte_kind_v8z24_ms4_vc12_4cszv_v() &&
411 k <= gmmu_pte_kind_v8z24_ms8_vc24_4cszv_v())
412 || (k >= gmmu_pte_kind_z24s8_2cs_v() &&
413 k <= gmmu_pte_kind_z24s8_ms16_4cszv_v())
414 || (k >= gmmu_pte_kind_z24v8_ms4_vc12_2cs_v() &&
415 k <= gmmu_pte_kind_z24v8_ms8_vc24_2cs_v())
416 || (k >= gmmu_pte_kind_z24v8_ms4_vc12_2czv_v() &&
417 k <= gmmu_pte_kind_z24v8_ms8_vc24_2czv_v())
418 || (k >= gmmu_pte_kind_z24v8_ms4_vc12_4cszv_v() &&
419 k <= gmmu_pte_kind_z24v8_ms8_vc24_4cszv_v())
420 || (k >= gmmu_pte_kind_zf32_2cs_v() &&
421 k <= gmmu_pte_kind_zf32_ms16_2cz_v())
422 || (k >= gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_1cs_v() &&
423 k <= gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_1cs_v())
424 || (k >= gmmu_pte_kind_x8z24_x16v8s8_ms4_vc12_1czv_v() &&
425 k <= gmmu_pte_kind_x8z24_x16v8s8_ms8_vc24_2cszv_v())
426 || (k >= gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_1cs_v() &&
427 k <= gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_1cs_v())
428 || (k >= gmmu_pte_kind_zf32_x16v8s8_ms4_vc12_1czv_v() &&
429 k <= gmmu_pte_kind_zf32_x16v8s8_ms8_vc24_2cszv_v())
430 || (k >= gmmu_pte_kind_zf32_x24s8_1cs_v() &&
431 k <= gmmu_pte_kind_zf32_x24s8_ms16_1cs_v())
432 || (k >= gmmu_pte_kind_zf32_x24s8_2cszv_v() &&
433 k <= gmmu_pte_kind_c32_2cra_v())
434 || (k >= gmmu_pte_kind_c32_ms2_2c_v() &&
435 k <= gmmu_pte_kind_c32_ms2_2cbr_v())
436 || (k == gmmu_pte_kind_c32_ms2_2cra_v())
437 || (k >= gmmu_pte_kind_c32_ms4_2c_v() &&
438 k <= gmmu_pte_kind_c32_ms4_2cra_v())
439 || (k >= gmmu_pte_kind_c32_ms8_ms16_2c_v() &&
440 k <= gmmu_pte_kind_c64_2cra_v())
441 || (k >= gmmu_pte_kind_c64_ms2_2c_v() &&
442 k <= gmmu_pte_kind_c64_ms2_2cbr_v())
443 || (k == gmmu_pte_kind_c64_ms2_2cra_v())
444 || (k >= gmmu_pte_kind_c64_ms4_2c_v() &&
445 k <= gmmu_pte_kind_c64_ms4_2cra_v())
446 || (k >= gmmu_pte_kind_c64_ms8_ms16_2c_v() &&
447 k <= gmmu_pte_kind_c128_ms8_ms16_2cr_v());
448}
449
450void gp10b_init_kind_attr(void)
451{
452 u16 k;
453
454 for (k = 0; k < NV_KIND_ATTR_SIZE; k++) {
455 if (gp10b_kind_supported((u8)k))
456 gk20a_kind_attr[k] |= GK20A_KIND_ATTR_SUPPORTED;
457 if (gp10b_kind_compressible((u8)k))
458 gk20a_kind_attr[k] |= GK20A_KIND_ATTR_COMPRESSIBLE;
459 if (gp10b_kind_z((u8)k))
460 gk20a_kind_attr[k] |= GK20A_KIND_ATTR_Z;
461 if (gp10b_kind_c((u8)k))
462 gk20a_kind_attr[k] |= GK20A_KIND_ATTR_C;
463 if (gp10b_kind_zbc((u8)k))
464 gk20a_kind_attr[k] |= GK20A_KIND_ATTR_ZBC;
465 }
466}
467
468unsigned int gp10b_fb_compression_page_size(struct gk20a *g) 28unsigned int gp10b_fb_compression_page_size(struct gk20a *g)
469{ 29{
470 return SZ_64K; 30 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 @@
26#define _NVGPU_GP10B_FB 26#define _NVGPU_GP10B_FB
27struct gk20a; 27struct gk20a;
28 28
29noinline_for_stack void gp10b_init_uncompressed_kind_map(void);
30void gp10b_init_kind_attr(void);
31unsigned int gp10b_fb_compression_page_size(struct gk20a *g); 29unsigned int gp10b_fb_compression_page_size(struct gk20a *g);
32unsigned int gp10b_fb_compressible_page_size(struct gk20a *g); 30unsigned int gp10b_fb_compressible_page_size(struct gk20a *g);
33 31
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)
743 g->pmu_lsf_pmu_wpr_init_done = 0; 743 g->pmu_lsf_pmu_wpr_init_done = 0;
744 g->bootstrap_owner = LSF_BOOTSTRAP_OWNER_DEFAULT; 744 g->bootstrap_owner = LSF_BOOTSTRAP_OWNER_DEFAULT;
745 745
746 gp10b_init_uncompressed_kind_map();
747 gp10b_init_kind_attr();
748
749 g->name = "gp10b"; 746 g->name = "gp10b";
750 747
751 return 0; 748 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;
38struct vm_gk20a_mapping_batch; 38struct vm_gk20a_mapping_batch;
39struct nvgpu_vm_area; 39struct nvgpu_vm_area;
40 40
41/* NVGPU_AS_MAP_BUFFER_FLAGS_DIRECT_KIND_CTRL must be set */
41int nvgpu_vm_map_linux(struct vm_gk20a *vm, 42int nvgpu_vm_map_linux(struct vm_gk20a *vm,
42 struct dma_buf *dmabuf, 43 struct dma_buf *dmabuf,
43 u64 offset_align, 44 u64 offset_align,
44 u32 flags, 45 u32 flags,
45
46 /*
47 * compressible kind if
48 * NVGPU_AS_MAP_BUFFER_FLAGS_DIRECT_KIND_CTRL is
49 * specified, otherwise just the kind
50 */
51 s16 compr_kind, 46 s16 compr_kind,
52
53 /*
54 * incompressible kind if
55 * NVGPU_AS_MAP_BUFFER_FLAGS_DIRECT_KIND_CTRL is
56 * specified, otherwise ignored
57 */
58 s16 incompr_kind, 47 s16 incompr_kind,
59
60 int rw_flag, 48 int rw_flag,
61 u64 buffer_offset, 49 u64 buffer_offset,
62 u64 mapping_size, 50 u64 mapping_size,
@@ -66,12 +54,7 @@ int nvgpu_vm_map_linux(struct vm_gk20a *vm,
66/* 54/*
67 * Notes: 55 * Notes:
68 * - Batch may be NULL if map op is not part of a batch. 56 * - Batch may be NULL if map op is not part of a batch.
69 * - If NVGPU_AS_MAP_BUFFER_FLAGS_DIRECT_KIND_CTRL is set, 57 * - NVGPU_AS_MAP_BUFFER_FLAGS_DIRECT_KIND_CTRL must be set
70 * compr_kind and incompr_kind work as explained in nvgpu.h.
71 * - If NVGPU_AS_MAP_BUFFER_FLAGS_DIRECT_KIND_CTRL is NOT set,
72 * compr_kind holds the kind and kernel will figure out whether
73 * it is a compressible or incompressible kind. If compressible, kernel will
74 * also figure out the incompressible counterpart or return an error.
75 */ 58 */
76int nvgpu_vm_map_buffer(struct vm_gk20a *vm, 59int nvgpu_vm_map_buffer(struct vm_gk20a *vm,
77 int dmabuf_fd, 60 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 {
127 enum gmmu_pgsz_gk20a pgsz_idx; 127 enum gmmu_pgsz_gk20a pgsz_idx;
128 u32 flags; 128 u32 flags;
129 129
130 u8 kind_v; 130 s16 compr_kind;
131 u8 uc_kind_v; 131 s16 incompr_kind;
132 bool use_kind_v;
133 bool use_uc_kind_v;
134 132
135 u32 ctag_lines; 133 u32 ctag_lines;
136}; 134};
@@ -202,10 +200,8 @@ void nvgpu_vm_put(struct vm_gk20a *vm);
202int vm_aspace_id(struct vm_gk20a *vm); 200int vm_aspace_id(struct vm_gk20a *vm);
203int nvgpu_big_pages_possible(struct vm_gk20a *vm, u64 base, u64 size); 201int nvgpu_big_pages_possible(struct vm_gk20a *vm, u64 base, u64 size);
204 202
205int nvgpu_vm_init_kind_info(struct nvgpu_ctag_buffer_info *binfo, 203int nvgpu_vm_compute_compression(struct vm_gk20a *vm,
206 s16 compr_kind, s16 incompr_kind); 204 struct nvgpu_ctag_buffer_info *binfo);
207int nvgpu_vm_compute_kind_and_compression(struct vm_gk20a *vm,
208 struct nvgpu_ctag_buffer_info *binfo);
209 205
210/* batching eliminates redundant cache flushes and invalidates */ 206/* batching eliminates redundant cache flushes and invalidates */
211void nvgpu_vm_mapping_batch_start(struct vm_gk20a_mapping_batch *batch); 207void 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)
584 g->pmu_lsf_pmu_wpr_init_done = 0; 584 g->pmu_lsf_pmu_wpr_init_done = 0;
585 g->bootstrap_owner = LSF_BOOTSTRAP_OWNER_DEFAULT; 585 g->bootstrap_owner = LSF_BOOTSTRAP_OWNER_DEFAULT;
586 586
587 gm20b_init_uncompressed_kind_map();
588 gm20b_init_kind_attr();
589
590 g->name = "gm20b"; 587 g->name = "gm20b";
591 588
592 c->twod_class = FERMI_TWOD_A; 589 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)
626 g->pmu_lsf_pmu_wpr_init_done = 0; 626 g->pmu_lsf_pmu_wpr_init_done = 0;
627 g->bootstrap_owner = LSF_BOOTSTRAP_OWNER_DEFAULT; 627 g->bootstrap_owner = LSF_BOOTSTRAP_OWNER_DEFAULT;
628 628
629 gp10b_init_uncompressed_kind_map();
630 gp10b_init_kind_attr();
631
632 g->name = "gp10b"; 629 g->name = "gp10b";
633 630
634 c->twod_class = FERMI_TWOD_A; 631 c->twod_class = FERMI_TWOD_A;