• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2 /*
3  *
4  * (C) COPYRIGHT 2015-2021 ARM Limited. All rights reserved.
5  *
6  * This program is free software and is provided to you under the terms of the
7  * GNU General Public License version 2 as published by the Free Software
8  * Foundation, and any use by you of this program is subject to the terms
9  * of such GNU license.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, you can access it online at
18  * http://www.gnu.org/licenses/gpl-2.0.html.
19  *
20  */
21 
22 #ifndef _UAPI_KBASE_GPU_ID_H_
23 #define _UAPI_KBASE_GPU_ID_H_
24 
25 #include <linux/types.h>
26 
27 /* GPU_ID register */
28 #define GPU_ID_VERSION_STATUS_SHIFT       0
29 #define GPU_ID_VERSION_MINOR_SHIFT        4
30 #define GPU_ID_VERSION_MAJOR_SHIFT        12
31 #define GPU_ID_VERSION_PRODUCT_ID_SHIFT   16
32 #define GPU_ID_VERSION_STATUS             (0xFu  << GPU_ID_VERSION_STATUS_SHIFT)
33 #define GPU_ID_VERSION_MINOR              (0xFFu << GPU_ID_VERSION_MINOR_SHIFT)
34 #define GPU_ID_VERSION_MAJOR              (0xFu  << GPU_ID_VERSION_MAJOR_SHIFT)
35 #define GPU_ID_VERSION_PRODUCT_ID  (0xFFFFu << GPU_ID_VERSION_PRODUCT_ID_SHIFT)
36 
37 #define GPU_ID2_VERSION_STATUS_SHIFT      0
38 #define GPU_ID2_VERSION_MINOR_SHIFT       4
39 #define GPU_ID2_VERSION_MAJOR_SHIFT       12
40 #define GPU_ID2_PRODUCT_MAJOR_SHIFT       16
41 #define GPU_ID2_ARCH_REV_SHIFT            20
42 #define GPU_ID2_ARCH_MINOR_SHIFT          24
43 #define GPU_ID2_ARCH_MAJOR_SHIFT          28
44 #define GPU_ID2_VERSION_STATUS            (0xFu << GPU_ID2_VERSION_STATUS_SHIFT)
45 #define GPU_ID2_VERSION_MINOR             (0xFFu << GPU_ID2_VERSION_MINOR_SHIFT)
46 #define GPU_ID2_VERSION_MAJOR             (0xFu << GPU_ID2_VERSION_MAJOR_SHIFT)
47 #define GPU_ID2_PRODUCT_MAJOR             (0xFu << GPU_ID2_PRODUCT_MAJOR_SHIFT)
48 #define GPU_ID2_ARCH_REV                  (0xFu << GPU_ID2_ARCH_REV_SHIFT)
49 #define GPU_ID2_ARCH_MINOR                (0xFu << GPU_ID2_ARCH_MINOR_SHIFT)
50 #define GPU_ID2_ARCH_MAJOR                (0xFu << GPU_ID2_ARCH_MAJOR_SHIFT)
51 #define GPU_ID2_PRODUCT_MODEL  (GPU_ID2_ARCH_MAJOR | GPU_ID2_PRODUCT_MAJOR)
52 #define GPU_ID2_VERSION        (GPU_ID2_VERSION_MAJOR | \
53 								GPU_ID2_VERSION_MINOR | \
54 								GPU_ID2_VERSION_STATUS)
55 
56 /* Helper macro to construct a value consisting of arch major and revision
57  * using the value of gpu_id.
58  */
59 #define ARCH_MAJOR_REV_REG(gpu_id)                                             \
60 	((((__u32)gpu_id) & GPU_ID2_ARCH_MAJOR) |                              \
61 	 (((__u32)gpu_id) & GPU_ID2_ARCH_REV))
62 
63 /* Helper macro to create a partial GPU_ID (new format) that defines
64  * a arch major and revision.
65  */
66 #define GPU_ID2_ARCH_MAJOR_REV_MAKE(arch_major, arch_rev)                      \
67 	((((__u32)arch_major) << GPU_ID2_ARCH_MAJOR_SHIFT) |                   \
68 	 (((__u32)arch_rev) << GPU_ID2_ARCH_REV_SHIFT))
69 
70 /* Helper macro to create a partial GPU_ID (new format) that defines
71  * a product ignoring its version.
72  */
73 #define GPU_ID2_PRODUCT_MAKE(arch_major, arch_minor, arch_rev, product_major) \
74 		((((__u32)arch_major) << GPU_ID2_ARCH_MAJOR_SHIFT)  | \
75 		 (((__u32)arch_minor) << GPU_ID2_ARCH_MINOR_SHIFT)  | \
76 		 (((__u32)arch_rev) << GPU_ID2_ARCH_REV_SHIFT)      | \
77 		 (((__u32)product_major) << GPU_ID2_PRODUCT_MAJOR_SHIFT))
78 
79 /* Helper macro to create a partial GPU_ID (new format) that specifies the
80  * revision (major, minor, status) of a product
81  */
82 #define GPU_ID2_VERSION_MAKE(version_major, version_minor, version_status) \
83 		((((__u32)version_major) << GPU_ID2_VERSION_MAJOR_SHIFT)  | \
84 		 (((__u32)version_minor) << GPU_ID2_VERSION_MINOR_SHIFT)  | \
85 		 (((__u32)version_status) << GPU_ID2_VERSION_STATUS_SHIFT))
86 
87 /* Helper macro to create a complete GPU_ID (new format) */
88 #define GPU_ID2_MAKE(arch_major, arch_minor, arch_rev, product_major, \
89 	version_major, version_minor, version_status) \
90 		(GPU_ID2_PRODUCT_MAKE(arch_major, arch_minor, arch_rev, \
91 			product_major) | \
92 		 GPU_ID2_VERSION_MAKE(version_major, version_minor,     \
93 			version_status))
94 
95 /* Helper macro to create a partial GPU_ID (new format) that identifies
96  * a particular GPU model by its arch_major and product_major.
97  */
98 #define GPU_ID2_MODEL_MAKE(arch_major, product_major) \
99 		((((__u32)arch_major) << GPU_ID2_ARCH_MAJOR_SHIFT)  | \
100 		(((__u32)product_major) << GPU_ID2_PRODUCT_MAJOR_SHIFT))
101 
102 /* Strip off the non-relevant bits from a product_id value and make it suitable
103  * for comparison against the GPU_ID2_PRODUCT_xxx values which identify a GPU
104  * model.
105  */
106 #define GPU_ID2_MODEL_MATCH_VALUE(product_id) \
107 		((((__u32)product_id) << GPU_ID2_PRODUCT_MAJOR_SHIFT) & \
108 		    GPU_ID2_PRODUCT_MODEL)
109 
110 #define GPU_ID2_PRODUCT_TMIX              GPU_ID2_MODEL_MAKE(6, 0)
111 #define GPU_ID2_PRODUCT_THEX              GPU_ID2_MODEL_MAKE(6, 1)
112 #define GPU_ID2_PRODUCT_TSIX              GPU_ID2_MODEL_MAKE(7, 0)
113 #define GPU_ID2_PRODUCT_TDVX              GPU_ID2_MODEL_MAKE(7, 3)
114 #define GPU_ID2_PRODUCT_TNOX              GPU_ID2_MODEL_MAKE(7, 1)
115 #define GPU_ID2_PRODUCT_TGOX              GPU_ID2_MODEL_MAKE(7, 2)
116 #define GPU_ID2_PRODUCT_TTRX              GPU_ID2_MODEL_MAKE(9, 0)
117 #define GPU_ID2_PRODUCT_TNAX              GPU_ID2_MODEL_MAKE(9, 1)
118 #define GPU_ID2_PRODUCT_TBEX              GPU_ID2_MODEL_MAKE(9, 2)
119 #define GPU_ID2_PRODUCT_LBEX              GPU_ID2_MODEL_MAKE(9, 4)
120 #define GPU_ID2_PRODUCT_TBAX              GPU_ID2_MODEL_MAKE(9, 5)
121 #define GPU_ID2_PRODUCT_TDUX              GPU_ID2_MODEL_MAKE(10, 1)
122 #define GPU_ID2_PRODUCT_TODX              GPU_ID2_MODEL_MAKE(10, 2)
123 #define GPU_ID2_PRODUCT_TGRX              GPU_ID2_MODEL_MAKE(10, 3)
124 #define GPU_ID2_PRODUCT_TVAX              GPU_ID2_MODEL_MAKE(10, 4)
125 #define GPU_ID2_PRODUCT_LODX              GPU_ID2_MODEL_MAKE(10, 7)
126 #define GPU_ID2_PRODUCT_TTUX              GPU_ID2_MODEL_MAKE(11, 2)
127 #define GPU_ID2_PRODUCT_LTUX              GPU_ID2_MODEL_MAKE(11, 3)
128 
129 /* Helper macro to create a GPU_ID assuming valid values for id, major,
130  * minor, status
131  */
132 #define GPU_ID_MAKE(id, major, minor, status) \
133 		((((__u32)id) << GPU_ID_VERSION_PRODUCT_ID_SHIFT) | \
134 		(((__u32)major) << GPU_ID_VERSION_MAJOR_SHIFT) |   \
135 		(((__u32)minor) << GPU_ID_VERSION_MINOR_SHIFT) |   \
136 		(((__u32)status) << GPU_ID_VERSION_STATUS_SHIFT))
137 
138 #endif /* _UAPI_KBASE_GPU_ID_H_ */
139