3 * (C) COPYRIGHT 2012-2016 ARM Limited. All rights reserved.
5 * This program is free software and is provided to you under the terms of the
6 * GNU General Public License version 2 as published by the Free Software
7 * Foundation, and any use by you of this program is subject to the terms
10 * A copy of the licence is included with the program, and can also be obtained
11 * from Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
12 * Boston, MA 02110-1301, USA.
21 * Run-time work-arounds helpers
24 #include <mali_base_hwconfig_features.h>
25 #include <mali_base_hwconfig_issues.h>
26 #include <mali_midg_regmap.h>
27 #include "mali_kbase.h"
28 #include "mali_kbase_hw.h"
30 void kbase_hw_set_features_mask(struct kbase_device *kbdev)
32 const enum base_hw_feature *features;
36 gpu_id = kbdev->gpu_props.props.raw_props.gpu_id;
37 product_id = gpu_id & GPU_ID_VERSION_PRODUCT_ID;
38 product_id >>= GPU_ID_VERSION_PRODUCT_ID_SHIFT;
40 if (GPU_ID_IS_NEW_FORMAT(product_id)) {
41 switch (gpu_id & GPU_ID2_PRODUCT_MODEL) {
42 case GPU_ID2_PRODUCT_TMIX:
43 features = base_hw_features_tMIx;
46 features = base_hw_features_generic;
54 features = base_hw_features_tFxx;
57 features = base_hw_features_t83x;
60 features = base_hw_features_t82x;
63 features = base_hw_features_t76x;
66 features = base_hw_features_t72x;
69 features = base_hw_features_t62x;
72 features = base_hw_features_t60x;
75 features = base_hw_features_generic;
80 for (; *features != BASE_HW_FEATURE_END; features++)
81 set_bit(*features, &kbdev->hw_features_mask[0]);
84 int kbase_hw_set_issues_mask(struct kbase_device *kbdev)
86 const enum base_hw_issue *issues;
91 gpu_id = kbdev->gpu_props.props.raw_props.gpu_id;
92 product_id = gpu_id & GPU_ID_VERSION_PRODUCT_ID;
93 product_id >>= GPU_ID_VERSION_PRODUCT_ID_SHIFT;
94 impl_tech = kbdev->gpu_props.props.thread_props.impl_tech;
96 if (impl_tech != IMPLEMENTATION_MODEL) {
97 if (GPU_ID_IS_NEW_FORMAT(product_id)) {
99 case GPU_ID2_MAKE(6, 0, 10, 0, 0, 0, 1):
100 issues = base_hw_issues_tMIx_r0p0_05dev0;
102 case GPU_ID2_MAKE(6, 0, 10, 0, 0, 0, 2):
103 issues = base_hw_issues_tMIx_r0p0;
106 if ((gpu_id & GPU_ID2_PRODUCT_MODEL) ==
107 GPU_ID2_PRODUCT_TMIX) {
108 issues = base_hw_issues_tMIx_r0p0;
111 "Unknown GPU ID %x", gpu_id);
117 case GPU_ID_MAKE(GPU_ID_PI_T60X, 0, 0, GPU_ID_S_15DEV0):
118 issues = base_hw_issues_t60x_r0p0_15dev0;
120 case GPU_ID_MAKE(GPU_ID_PI_T60X, 0, 0, GPU_ID_S_EAC):
121 issues = base_hw_issues_t60x_r0p0_eac;
123 case GPU_ID_MAKE(GPU_ID_PI_T60X, 0, 1, 0):
124 issues = base_hw_issues_t60x_r0p1;
126 case GPU_ID_MAKE(GPU_ID_PI_T62X, 0, 1, 0):
127 issues = base_hw_issues_t62x_r0p1;
129 case GPU_ID_MAKE(GPU_ID_PI_T62X, 1, 0, 0):
130 case GPU_ID_MAKE(GPU_ID_PI_T62X, 1, 0, 1):
131 issues = base_hw_issues_t62x_r1p0;
133 case GPU_ID_MAKE(GPU_ID_PI_T62X, 1, 1, 0):
134 issues = base_hw_issues_t62x_r1p1;
136 case GPU_ID_MAKE(GPU_ID_PI_T76X, 0, 0, 1):
137 issues = base_hw_issues_t76x_r0p0;
139 case GPU_ID_MAKE(GPU_ID_PI_T76X, 0, 1, 1):
140 issues = base_hw_issues_t76x_r0p1;
142 case GPU_ID_MAKE(GPU_ID_PI_T76X, 0, 1, 9):
143 issues = base_hw_issues_t76x_r0p1_50rel0;
145 case GPU_ID_MAKE(GPU_ID_PI_T76X, 0, 2, 1):
146 issues = base_hw_issues_t76x_r0p2;
148 case GPU_ID_MAKE(GPU_ID_PI_T76X, 0, 3, 1):
149 issues = base_hw_issues_t76x_r0p3;
151 case GPU_ID_MAKE(GPU_ID_PI_T76X, 1, 0, 0):
152 issues = base_hw_issues_t76x_r1p0;
154 case GPU_ID_MAKE(GPU_ID_PI_T72X, 0, 0, 0):
155 case GPU_ID_MAKE(GPU_ID_PI_T72X, 0, 0, 1):
156 case GPU_ID_MAKE(GPU_ID_PI_T72X, 0, 0, 2):
157 issues = base_hw_issues_t72x_r0p0;
159 case GPU_ID_MAKE(GPU_ID_PI_T72X, 1, 0, 0):
160 issues = base_hw_issues_t72x_r1p0;
162 case GPU_ID_MAKE(GPU_ID_PI_T72X, 1, 1, 0):
163 issues = base_hw_issues_t72x_r1p1;
165 case GPU_ID_MAKE(GPU_ID_PI_TFRX, 0, 1, 2):
166 issues = base_hw_issues_tFRx_r0p1;
168 case GPU_ID_MAKE(GPU_ID_PI_TFRX, 0, 2, 0):
169 issues = base_hw_issues_tFRx_r0p2;
171 case GPU_ID_MAKE(GPU_ID_PI_TFRX, 1, 0, 0):
172 case GPU_ID_MAKE(GPU_ID_PI_TFRX, 1, 0, 8):
173 issues = base_hw_issues_tFRx_r1p0;
175 case GPU_ID_MAKE(GPU_ID_PI_TFRX, 2, 0, 0):
176 issues = base_hw_issues_tFRx_r2p0;
178 case GPU_ID_MAKE(GPU_ID_PI_T86X, 0, 2, 0):
179 issues = base_hw_issues_t86x_r0p2;
181 case GPU_ID_MAKE(GPU_ID_PI_T86X, 1, 0, 0):
182 case GPU_ID_MAKE(GPU_ID_PI_T86X, 1, 0, 8):
183 issues = base_hw_issues_t86x_r1p0;
185 case GPU_ID_MAKE(GPU_ID_PI_T86X, 2, 0, 0):
186 issues = base_hw_issues_t86x_r2p0;
188 case GPU_ID_MAKE(GPU_ID_PI_T83X, 0, 1, 0):
189 issues = base_hw_issues_t83x_r0p1;
191 case GPU_ID_MAKE(GPU_ID_PI_T83X, 1, 0, 0):
192 case GPU_ID_MAKE(GPU_ID_PI_T83X, 1, 0, 8):
193 issues = base_hw_issues_t83x_r1p0;
195 case GPU_ID_MAKE(GPU_ID_PI_T82X, 0, 0, 0):
196 issues = base_hw_issues_t82x_r0p0;
198 case GPU_ID_MAKE(GPU_ID_PI_T82X, 0, 1, 0):
199 issues = base_hw_issues_t82x_r0p1;
201 case GPU_ID_MAKE(GPU_ID_PI_T82X, 1, 0, 0):
202 case GPU_ID_MAKE(GPU_ID_PI_T82X, 1, 0, 8):
203 issues = base_hw_issues_t82x_r1p0;
207 "Unknown GPU ID %x", gpu_id);
213 if (GPU_ID_IS_NEW_FORMAT(product_id)) {
214 switch (gpu_id & GPU_ID2_PRODUCT_MODEL) {
215 case GPU_ID2_PRODUCT_TMIX:
216 issues = base_hw_issues_model_tMIx;
220 "Unknown GPU ID %x", gpu_id);
224 switch (product_id) {
226 issues = base_hw_issues_model_t60x;
229 issues = base_hw_issues_model_t62x;
232 issues = base_hw_issues_model_t72x;
235 issues = base_hw_issues_model_t76x;
238 issues = base_hw_issues_model_tFRx;
241 issues = base_hw_issues_model_t86x;
244 issues = base_hw_issues_model_t83x;
247 issues = base_hw_issues_model_t82x;
250 dev_err(kbdev->dev, "Unknown GPU ID %x",
257 dev_info(kbdev->dev, "GPU identified as 0x%04x r%dp%d status %d", (gpu_id & GPU_ID_VERSION_PRODUCT_ID) >> GPU_ID_VERSION_PRODUCT_ID_SHIFT, (gpu_id & GPU_ID_VERSION_MAJOR) >> GPU_ID_VERSION_MAJOR_SHIFT, (gpu_id & GPU_ID_VERSION_MINOR) >> GPU_ID_VERSION_MINOR_SHIFT, (gpu_id & GPU_ID_VERSION_STATUS) >> GPU_ID_VERSION_STATUS_SHIFT);
259 for (; *issues != BASE_HW_ISSUE_END; issues++)
260 set_bit(*issues, &kbdev->hw_issues_mask[0]);