3 * (C) COPYRIGHT 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.
22 * Software workarounds configuration for Hardware issues.
25 #ifndef _BASE_HWCONFIG_H_
26 #define _BASE_HWCONFIG_H_
28 #include <malisw/mali_malisw.h>
31 * List of all hw features.
34 typedef enum base_hw_feature {
35 /* Allow soft/hard stopping of job depending on job chain flag */
36 BASE_HW_FEATURE_JOBCHAIN_DISAMBIGUATION,
38 /* Allow writes to SHADER_PWRON and TILER_PWRON registers while these cores are currently transitioning to OFF power state */
39 BASE_HW_FEATURE_PWRON_DURING_PWROFF_TRANS,
41 /* The BASE_HW_FEATURE_END value must be the last feature listed in this enumeration
42 * and must be the last value in each array that contains the list of features
43 * for a particular HW version.
48 static const base_hw_feature base_hw_features_generic[] = {
52 static const base_hw_feature base_hw_features_t76x[] = {
53 BASE_HW_FEATURE_JOBCHAIN_DISAMBIGUATION,
54 BASE_HW_FEATURE_PWRON_DURING_PWROFF_TRANS,
60 * List of all workarounds.
64 typedef enum base_hw_issue {
66 /* The current version of the model doesn't support Soft-Stop */
69 /* Need way to guarantee that all previously-translated memory accesses are commited */
72 /* Result swizzling doesn't work for GRDESC/GRDESC_DER */
73 /* NOTE: compiler workaround: keep in sync with _essl_hwrev_needs_workaround() */
76 /* Unaligned load stores crossing 128 bit boundaries will fail */
77 /* NOTE: compiler workaround: keep in sync with _essl_hwrev_needs_workaround() */
80 /* On job complete with non-done the cache is not flushed */
83 /* WLS allocation does not respect the Instances field in the Thread Storage Descriptor */
86 /* The clamp integer coordinate flag bit of the sampler descriptor is reserved */
89 /* TEX_INDEX LOD is always use converted */
90 /* NOTE: compiler workaround: keep in sync with _essl_hwrev_needs_workaround() */
93 /* Write of PRFCNT_CONFIG_MODE_MANUAL to PRFCNT_CONFIG causes a instrumentation dump if
94 PRFCNT_TILER_EN is enabled */
97 /* Do not set .skip flag on the GRDESC, GRDESC_DER, DELTA, MOV, and NOP texturing instructions */
98 /* NOTE: compiler workaround: keep in sync with _essl_hwrev_needs_workaround() */
101 /* TIB: Reports faults from a vtile which has not yet been allocated */
104 /* WLMA memory goes wrong when run on shader cores other than core 0. */
105 /* NOTE: compiler workaround: keep in sync with _essl_hwrev_needs_workaround() */
108 /* Hierz doesn't work when stenciling is enabled */
111 /* Livelock in L0 icache */
112 /* NOTE: compiler workaround: keep in sync with _essl_hwrev_needs_workaround() */
115 /* uTLB deadlock could occur when writing to an invalid page at the same time as
116 * access to a valid page in the same uTLB cache line ( == 4 PTEs == 16K block of mapping) */
119 /* TLS base address mismatch, must stay below 1MB TLS */
122 /* HT: TERMINATE for RUN command ignored if previous LOAD_DESCRIPTOR is still executing */
125 /* CSE : Sends a TERMINATED response for a task that should not be terminated */
126 /* (Note that PRLAM-8379 also uses this workaround) */
129 /* Repeatedly Soft-stopping a job chain consisting of (Vertex Shader, Cache Flush, Tiler)
130 * jobs causes 0x58 error on tiler job. */
133 /* Disable the Pause Buffer in the LS pipe. */
136 /* Stencil test enable 1->0 sticks */
139 /* Tiler heap issue using FBOs or multiple processes using the tiler simultaneously */
140 /* (Note that PRLAM-9049 also uses this work-around) */
143 /* Livelock issue using atomic instructions (particularly when using atomic_cmpxchg as a spinlock) */
146 /* Fused jobs are not supported (for various reasons) */
147 /* Jobs with relaxed dependencies do not support soft-stop */
148 /* (Note that PRLAM-8803, PRLAM-8393, PRLAM-8559, PRLAM-8601 & PRLAM-8607 all use this work-around) */
151 /* Blend shader output is wrong for certain formats */
154 /* Occlusion queries can create false 0 result in boolean and counter modes */
157 /* Output has half intensity with blend shaders enabled on 8xMSAA. */
160 /* 8xMSAA does not work with CRC */
163 /* Boolean occlusion queries don't work properly due to sdc issue. */
166 /* Change in RMUs in use causes problems related with the core's SDC */
167 /* NOTE: compiler workaround: keep in sync with _essl_hwrev_needs_workaround() */
170 /* Occlusion query result is not updated if color writes are disabled. */
173 /* Problem with number of work registers in the RSD if set to 0 */
176 /* Translate load/store moves into decode instruction */
177 /* NOTE: compiler workaround: keep in sync with _essl_hwrev_needs_workaround() */
180 /* Incorrect coverage mask for 8xMSAA */
183 /* Compute endpoint has a 4-deep queue of tasks, meaning a soft stop won't complete until all 4 tasks have completed */
186 /* HT: Tiler returns TERMINATED for command that hasn't been terminated */
189 /* Livelock issue using atomic_cmpxchg */
190 /* NOTE: compiler workaround: keep in sync with _essl_hwrev_needs_workaround() */
193 /* Occasionally the GPU will issue multiple page faults for the same address before the MMU page table has been read by the GPU */
196 /* Must clear the 64 byte private state of the tiler information */
199 /* RA DCD load request to SDC returns invalid load ignore causing colour buffer mismatch */
202 /* Occlusion query result may be updated prematurely when fragment shader alters coverage */
205 /* TEXGRD doesn't honor Sampler Descriptor LOD clamps nor bias */
206 /* NOTE: compiler workaround: keep in sync with _essl_hwrev_needs_workaround() */
209 /* MAG / MIN filter selection happens after image descriptor clamps were applied */
212 /* GPU interprets sampler and image descriptor pointer array sizes as one bigger than they are defined in midg structures */
215 /* ld_special 0x1n applies SRGB conversion */
216 /* NOTE: compiler workaround: keep in sync with _essl_hwrev_needs_workaround() */
219 /* LD_SPECIAL instruction reads incorrect RAW tile buffer value when internal tib format is R10G10B10A2 */
220 /* NOTE: compiler workaround: keep in sync with _essl_hwrev_needs_workaround() */
223 /* MMU TLB invalidation hazards */
226 /* Missing cache flush in multi core-group configuration */
229 /* Indexed format 95 cannot be used with a component swizzle of "set to 1" when sampled as integer texture */
232 /* sometimes HW doesn't invalidate cached VPDs when it has to */
235 /* Chicken bit on (t67x_r1p0 and t72x) to work for a HW workaround in compiler */
239 /* Soft-stopping fragment jobs might fail with TILE_RANGE_FAULT */
242 /* Fragment frontend heuristic bias to force early-z required */
245 /* Intermittent missing interrupt on job completion */
248 /* Depth bounds incorrectly normalized in hierz depth bounds test */
251 /* Incorrect cubemap sampling */
252 /* NOTE: compiler workaround: keep in sync with _essl_hwrev_needs_workaround() */
255 /* Soft-stopping fragment jobs might fail with TILE_RANGE_ERROR (similar to issue 10817) and can use BASE_HW_ISSUE_10817 workaround */
258 /* Soft-stopped fragment shader job can restart with out-of-bound restart index */
261 /* TEX_INDEX lod selection (immediate , register) not working with 8.8 encoding for levels > 1 */
262 /* NOTE: compiler workaround: keep in sync with _essl_hwrev_needs_workaround() */
267 /* 16xMSAA implementation wasn't finished */
268 BASE_HW_ISSUE_T76X_26,
270 /* Forward pixel kill doesn't work with MRT */
271 BASE_HW_ISSUE_T76X_2121,
273 /* CRC not working with MFBD and more than one render target */
274 BASE_HW_ISSUE_T76X_2315,
276 /* Some indexed formats not supported for MFBD preload. */
277 BASE_HW_ISSUE_T76X_2686,
279 /* Must disable CRC if the tile output size is 8 bytes or less. */
280 BASE_HW_ISSUE_T76X_2712,
282 /* DBD clean pixel enable bit is reserved */
283 BASE_HW_ISSUE_T76X_2772,
285 /* AFBC is not supported for T76X beta. */
286 BASE_HW_ISSUE_T76X_2906,
288 /* Prevent MMU deadlock for T76X beta. */
289 BASE_HW_ISSUE_T76X_3285,
291 /* The BASE_HW_ISSUE_END value must be the last issue listed in this enumeration
292 * and must be the last value in each array that contains the list of workarounds
293 * for a particular HW version.
299 * Workarounds configuration for each HW revision
301 /* Mali T60x r0p0-15dev0 - 2011-W39-stable-9 */
302 static const base_hw_issue base_hw_issues_t60x_r0p0_15dev0[] = {
354 /* List of hardware issues must end with BASE_HW_ISSUE_END */
358 /* Mali T60x r0p0-00rel0 - 2011-W46-stable-13c */
359 static const base_hw_issue base_hw_issues_t60x_r0p0_eac[] = {
388 /* List of hardware issues must end with BASE_HW_ISSUE_END */
393 static const base_hw_issue base_hw_issues_t60x_r0p1[] = {
419 /* List of hardware issues must end with BASE_HW_ISSUE_END */
424 static const base_hw_issue base_hw_issues_t65x_r0p1[] = {
449 /* List of hardware issues must end with BASE_HW_ISSUE_END */
454 static const base_hw_issue base_hw_issues_t62x_r0p0[] = {
476 /* List of hardware issues must end with BASE_HW_ISSUE_END */
481 static const base_hw_issue base_hw_issues_t67x_r0p0[] = {
503 /* List of hardware issues must end with BASE_HW_ISSUE_END */
508 static const base_hw_issue base_hw_issues_t62x_r0p1[] = {
530 /* List of hardware issues must end with BASE_HW_ISSUE_END */
535 static const base_hw_issue base_hw_issues_t67x_r0p1[] = {
557 /* List of hardware issues must end with BASE_HW_ISSUE_END */
562 static const base_hw_issue base_hw_issues_t62x_r1p0[] = {
575 /* List of hardware issues must end with BASE_HW_ISSUE_END */
580 static const base_hw_issue base_hw_issues_t67x_r1p0[] = {
594 /* List of hardware issues must end with BASE_HW_ISSUE_END */
598 /* Mali T76x r0p0 beta */
599 static const base_hw_issue base_hw_issues_t76x_r0p0_beta[] = {
607 BASE_HW_ISSUE_T76X_26,
608 BASE_HW_ISSUE_T76X_2121,
609 BASE_HW_ISSUE_T76X_2315,
610 BASE_HW_ISSUE_T76X_2686,
611 BASE_HW_ISSUE_T76X_2712,
612 BASE_HW_ISSUE_T76X_2772,
613 BASE_HW_ISSUE_T76X_2906,
614 BASE_HW_ISSUE_T76X_3285,
615 /* List of hardware issues must end with BASE_HW_ISSUE_END */
620 static const base_hw_issue base_hw_issues_t76x_r0p0[] = {
628 BASE_HW_ISSUE_T76X_26,
629 BASE_HW_ISSUE_T76X_2712,
630 BASE_HW_ISSUE_T76X_3285,
631 /* List of hardware issues must end with BASE_HW_ISSUE_END */
636 static const base_hw_issue base_hw_issues_t72x_r0p0[] = {
650 /* List of hardware issues must end with BASE_HW_ISSUE_END */
654 /* Model configuration
656 static const base_hw_issue base_hw_issues_model_t72x[] =
659 BASE_HW_ISSUE_6402, /* NOTE: Fix is present in model r125162 but is not enabled until RTL is fixed */
666 /* List of hardware issues must end with BASE_HW_ISSUE_END */
670 static const base_hw_issue base_hw_issues_model_t7xx[] =
676 /* List of hardware issues must end with BASE_HW_ISSUE_END */
680 static const base_hw_issue base_hw_issues_model_t6xx[] =
683 BASE_HW_ISSUE_6402, /* NOTE: Fix is present in model r125162 but is not enabled until RTL is fixed */
689 /* List of hardware issues must end with BASE_HW_ISSUE_END */
693 #endif /* _BASE_HWCONFIG_H_ */