xref: /OK3568_Linux_fs/kernel/include/uapi/gpu/arm/bifrost/gpu/mali_kbase_gpu_id.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2 /*
3  *
4  * (C) COPYRIGHT 2015-2022 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 KBASE_GPU_ID_VERSION_STATUS_SHIFT 0
29 #define KBASE_GPU_ID_VERSION_MINOR_SHIFT 4
30 #define KBASE_GPU_ID_VERSION_MAJOR_SHIFT 12
31 #define KBASE_GPU_ID_VERSION_PRODUCT_ID_SHIFT 16
32 
33 #define GPU_ID_VERSION_STATUS (0xFu << KBASE_GPU_ID_VERSION_STATUS_SHIFT)
34 #define GPU_ID_VERSION_MINOR (0xFFu << KBASE_GPU_ID_VERSION_MINOR_SHIFT)
35 #define GPU_ID_VERSION_MAJOR (0xFu << KBASE_GPU_ID_VERSION_MAJOR_SHIFT)
36 #define GPU_ID_VERSION_PRODUCT_ID (0xFFFFu << KBASE_GPU_ID_VERSION_PRODUCT_ID_SHIFT)
37 
38 #define GPU_ID2_VERSION_STATUS_SHIFT      0
39 #define GPU_ID2_VERSION_MINOR_SHIFT       4
40 #define GPU_ID2_VERSION_MAJOR_SHIFT       12
41 #define GPU_ID2_PRODUCT_MAJOR_SHIFT       16
42 #define GPU_ID2_ARCH_REV_SHIFT            20
43 #define GPU_ID2_ARCH_MINOR_SHIFT          24
44 #define GPU_ID2_ARCH_MAJOR_SHIFT          28
45 #define GPU_ID2_VERSION_STATUS            (0xFu << GPU_ID2_VERSION_STATUS_SHIFT)
46 #define GPU_ID2_VERSION_MINOR             (0xFFu << GPU_ID2_VERSION_MINOR_SHIFT)
47 #define GPU_ID2_VERSION_MAJOR             (0xFu << GPU_ID2_VERSION_MAJOR_SHIFT)
48 #define GPU_ID2_PRODUCT_MAJOR             (0xFu << GPU_ID2_PRODUCT_MAJOR_SHIFT)
49 #define GPU_ID2_ARCH_REV                  (0xFu << GPU_ID2_ARCH_REV_SHIFT)
50 #define GPU_ID2_ARCH_MINOR                (0xFu << GPU_ID2_ARCH_MINOR_SHIFT)
51 #define GPU_ID2_ARCH_MAJOR                (0xFu << GPU_ID2_ARCH_MAJOR_SHIFT)
52 #define GPU_ID2_PRODUCT_MODEL  (GPU_ID2_ARCH_MAJOR | GPU_ID2_PRODUCT_MAJOR)
53 #define GPU_ID2_VERSION        (GPU_ID2_VERSION_MAJOR | \
54 								GPU_ID2_VERSION_MINOR | \
55 								GPU_ID2_VERSION_STATUS)
56 
57 /* Helper macro to construct a value consisting of arch major and revision
58  * using the value of gpu_id.
59  */
60 #define ARCH_MAJOR_REV_REG(gpu_id)                                             \
61 	((((__u32)gpu_id) & GPU_ID2_ARCH_MAJOR) |                              \
62 	 (((__u32)gpu_id) & GPU_ID2_ARCH_REV))
63 
64 /* Helper macro to create a partial GPU_ID (new format) that defines
65  * a arch major and revision.
66  */
67 #define GPU_ID2_ARCH_MAJOR_REV_MAKE(arch_major, arch_rev)                      \
68 	((((__u32)arch_major) << GPU_ID2_ARCH_MAJOR_SHIFT) |                   \
69 	 (((__u32)arch_rev) << GPU_ID2_ARCH_REV_SHIFT))
70 
71 /* Helper macro to create a partial GPU_ID (new format) that defines
72  * a product ignoring its version.
73  */
74 #define GPU_ID2_PRODUCT_MAKE(arch_major, arch_minor, arch_rev, product_major) \
75 		((((__u32)arch_major) << GPU_ID2_ARCH_MAJOR_SHIFT)  | \
76 		 (((__u32)arch_minor) << GPU_ID2_ARCH_MINOR_SHIFT)  | \
77 		 (((__u32)arch_rev) << GPU_ID2_ARCH_REV_SHIFT)      | \
78 		 (((__u32)product_major) << GPU_ID2_PRODUCT_MAJOR_SHIFT))
79 
80 /* Helper macro to create a partial GPU_ID (new format) that specifies the
81  * revision (major, minor, status) of a product
82  */
83 #define GPU_ID2_VERSION_MAKE(version_major, version_minor, version_status) \
84 		((((__u32)version_major) << GPU_ID2_VERSION_MAJOR_SHIFT)  | \
85 		 (((__u32)version_minor) << GPU_ID2_VERSION_MINOR_SHIFT)  | \
86 		 (((__u32)version_status) << GPU_ID2_VERSION_STATUS_SHIFT))
87 
88 /* Helper macro to create a complete GPU_ID (new format) */
89 #define GPU_ID2_MAKE(arch_major, arch_minor, arch_rev, product_major, \
90 	version_major, version_minor, version_status) \
91 		(GPU_ID2_PRODUCT_MAKE(arch_major, arch_minor, arch_rev, \
92 			product_major) | \
93 		 GPU_ID2_VERSION_MAKE(version_major, version_minor,     \
94 			version_status))
95 
96 /* Helper macro to create a partial GPU_ID (new format) that identifies
97  * a particular GPU model by its arch_major and product_major.
98  */
99 #define GPU_ID2_MODEL_MAKE(arch_major, product_major) \
100 		((((__u32)arch_major) << GPU_ID2_ARCH_MAJOR_SHIFT)  | \
101 		(((__u32)product_major) << GPU_ID2_PRODUCT_MAJOR_SHIFT))
102 
103 /* Strip off the non-relevant bits from a product_id value and make it suitable
104  * for comparison against the GPU_ID2_PRODUCT_xxx values which identify a GPU
105  * model.
106  */
107 #define GPU_ID2_MODEL_MATCH_VALUE(product_id) \
108 		((((__u32)product_id) << GPU_ID2_PRODUCT_MAJOR_SHIFT) & \
109 		    GPU_ID2_PRODUCT_MODEL)
110 
111 #define GPU_ID2_PRODUCT_TMIX              GPU_ID2_MODEL_MAKE(6, 0)
112 #define GPU_ID2_PRODUCT_THEX              GPU_ID2_MODEL_MAKE(6, 1)
113 #define GPU_ID2_PRODUCT_TSIX              GPU_ID2_MODEL_MAKE(7, 0)
114 #define GPU_ID2_PRODUCT_TDVX              GPU_ID2_MODEL_MAKE(7, 3)
115 #define GPU_ID2_PRODUCT_TNOX              GPU_ID2_MODEL_MAKE(7, 1)
116 #define GPU_ID2_PRODUCT_TGOX              GPU_ID2_MODEL_MAKE(7, 2)
117 #define GPU_ID2_PRODUCT_TTRX              GPU_ID2_MODEL_MAKE(9, 0)
118 #define GPU_ID2_PRODUCT_TNAX              GPU_ID2_MODEL_MAKE(9, 1)
119 #define GPU_ID2_PRODUCT_TBEX              GPU_ID2_MODEL_MAKE(9, 2)
120 #define GPU_ID2_PRODUCT_LBEX              GPU_ID2_MODEL_MAKE(9, 4)
121 #define GPU_ID2_PRODUCT_TBAX              GPU_ID2_MODEL_MAKE(9, 5)
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 #define GPU_ID2_PRODUCT_TTIX              GPU_ID2_MODEL_MAKE(12, 0)
129 #define GPU_ID2_PRODUCT_LTIX              GPU_ID2_MODEL_MAKE(12, 1)
130 
131 /**
132  * GPU_ID_MAKE - Helper macro to generate GPU_ID using id, major, minor, status
133  *
134  * @id: Product Major of GPU ID
135  * @major: Version major of GPU ID
136  * @minor: Version minor of GPU ID
137  * @status: Version status of GPU ID
138  */
139 #define GPU_ID_MAKE(id, major, minor, status)                                                      \
140 	((((__u32)id) << KBASE_GPU_ID_VERSION_PRODUCT_ID_SHIFT) |                                  \
141 	 (((__u32)major) << KBASE_GPU_ID_VERSION_MAJOR_SHIFT) |                                    \
142 	 (((__u32)minor) << KBASE_GPU_ID_VERSION_MINOR_SHIFT) |                                    \
143 	 (((__u32)status) << KBASE_GPU_ID_VERSION_STATUS_SHIFT))
144 
145 #endif /* _UAPI_KBASE_GPU_ID_H_ */
146