While newer kbase include only the numbers of errata, older kbase releases included one-line descriptions for each errata, which is useful for those working on the driver. Import these descriptions. Most are from kbase verbatim; a few I edited for clarity.
v2: Wrote a description for the workaround of an issue whose cause is still unknown (Stephen). Errata which pertain to newer models unsupported by the mainline driver, for which Arm has not yet released errata information, have been removed from the issue list as the kernel need not concern itself with these.
Signed-off-by: Alyssa Rosenzweig alyssa.rosenzweig@collabora.com --- drivers/gpu/drm/panfrost/panfrost_issues.h | 106 +++++++++++++++------ 1 file changed, 78 insertions(+), 28 deletions(-)
diff --git a/drivers/gpu/drm/panfrost/panfrost_issues.h b/drivers/gpu/drm/panfrost/panfrost_issues.h index cec6dcdad..36e503614 100644 --- a/drivers/gpu/drm/panfrost/panfrost_issues.h +++ b/drivers/gpu/drm/panfrost/panfrost_issues.h @@ -13,37 +13,101 @@ * to care about. */ enum panfrost_hw_issue { + /* Need way to guarantee that all previously-translated memory accesses + * are commited */ HW_ISSUE_6367, + + /* On job complete with non-done the cache is not flushed */ HW_ISSUE_6787, + + /* Write of PRFCNT_CONFIG_MODE_MANUAL to PRFCNT_CONFIG causes a + * instrumentation dump if PRFCNT_TILER_EN is enabled */ HW_ISSUE_8186, + + /* TIB: Reports faults from a vtile which has not yet been allocated */ HW_ISSUE_8245, + + /* uTLB deadlock could occur when writing to an invalid page at the + * same time as access to a valid page in the same uTLB cache line ( == + * 4 PTEs == 16K block of mapping) */ HW_ISSUE_8316, + + /* HT: TERMINATE for RUN command ignored if previous LOAD_DESCRIPTOR is + * still executing */ HW_ISSUE_8394, + + /* CSE: Sends a TERMINATED response for a task that should not be + * terminated */ HW_ISSUE_8401, + + /* Repeatedly Soft-stopping a job chain consisting of (Vertex Shader, + * Cache Flush, Tiler) jobs causes DATA_INVALID_FAULT on tiler job. */ HW_ISSUE_8408, + + /* Disable the Pause Buffer in the LS pipe. */ HW_ISSUE_8443, + + /* Change in RMUs in use causes problems related with the core's SDC */ HW_ISSUE_8987, + + /* Compute endpoint has a 4-deep queue of tasks, meaning a soft stop + * won't complete until all 4 tasks have completed */ HW_ISSUE_9435, + + /* HT: Tiler returns TERMINATED for non-terminated command */ HW_ISSUE_9510, + + /* Occasionally the GPU will issue multiple page faults for the same + * address before the MMU page table has been read by the GPU */ HW_ISSUE_9630, + + /* RA DCD load request to SDC returns invalid load ignore causing + * colour buffer mismatch */ HW_ISSUE_10327, + + /* MMU TLB invalidation hazards */ HW_ISSUE_10649, + + /* Missing cache flush in multi core-group configuration */ HW_ISSUE_10676, + + /* Chicken bit on T72X for a hardware workaround in compiler */ HW_ISSUE_10797, + + /* Soft-stopping fragment jobs might fail with TILE_RANGE_FAULT */ HW_ISSUE_10817, + + /* Intermittent missing interrupt on job completion */ HW_ISSUE_10883, + + /* Soft-stopping fragment jobs might fail with TILE_RANGE_ERROR + * (similar to issue 10817) and can use #10817 workaround */ HW_ISSUE_10959, + + /* Soft-stopped fragment shader job can restart with out-of-bound + * restart index */ HW_ISSUE_10969, + + /* Race condition can cause tile list corruption */ HW_ISSUE_11020, + + /* Write buffer can cause tile list corruption */ HW_ISSUE_11024, + + /* Pause buffer can cause a fragment job hang */ HW_ISSUE_11035, - HW_ISSUE_11056, + + /* Clear encoder state for a hard stopped fragment job which is AFBC + * encoded by soft resetting the GPU. Only for T76X r0p0, r0p1 and + * r0p1_50rel0 */ HW_ISSUE_T76X_3542, + + /* Keep tiler module clock on to prevent GPU stall */ HW_ISSUE_T76X_3953, - HW_ISSUE_TMIX_8463, + + /* Don't set SC_LS_ATTR_CHECK_DISABLE/SC_LS_ALLOW_ATTR_TYPES */ GPUCORE_1619, - HW_ISSUE_TMIX_8438, - HW_ISSUE_TGOX_R1_1234, + HW_ISSUE_END };
@@ -59,9 +123,7 @@ enum panfrost_hw_issue { BIT_ULL(HW_ISSUE_10676) | \ BIT_ULL(HW_ISSUE_10883) | \ BIT_ULL(HW_ISSUE_11020) | \ - BIT_ULL(HW_ISSUE_11035) | \ - BIT_ULL(HW_ISSUE_11056) | \ - BIT_ULL(HW_ISSUE_TMIX_8438)) + BIT_ULL(HW_ISSUE_11035))
#define hw_issues_t600_r0p0_15dev0 (\ BIT_ULL(HW_ISSUE_8186) | \ @@ -78,9 +140,7 @@ enum panfrost_hw_issue { #define hw_issues_t620 (\ BIT_ULL(HW_ISSUE_10649) | \ BIT_ULL(HW_ISSUE_10883) | \ - BIT_ULL(HW_ISSUE_10959) | \ - BIT_ULL(HW_ISSUE_11056) | \ - BIT_ULL(HW_ISSUE_TMIX_8438)) + BIT_ULL(HW_ISSUE_10959))
#define hw_issues_t620_r0p1 (\ BIT_ULL(HW_ISSUE_10327) | \ @@ -97,14 +157,11 @@ enum panfrost_hw_issue { #define hw_issues_t720 (\ BIT_ULL(HW_ISSUE_10649) | \ BIT_ULL(HW_ISSUE_10797) | \ - BIT_ULL(HW_ISSUE_10883) | \ - BIT_ULL(HW_ISSUE_11056) | \ - BIT_ULL(HW_ISSUE_TMIX_8438)) + BIT_ULL(HW_ISSUE_10883))
#define hw_issues_t760 (\ BIT_ULL(HW_ISSUE_10883) | \ - BIT_ULL(HW_ISSUE_T76X_3953) | \ - BIT_ULL(HW_ISSUE_TMIX_8438)) + BIT_ULL(HW_ISSUE_T76X_3953))
#define hw_issues_t760_r0p0 (\ BIT_ULL(HW_ISSUE_11020) | \ @@ -129,36 +186,29 @@ enum panfrost_hw_issue {
#define hw_issues_t820 (\ BIT_ULL(HW_ISSUE_10883) | \ - BIT_ULL(HW_ISSUE_T76X_3953) | \ - BIT_ULL(HW_ISSUE_TMIX_8438)) + BIT_ULL(HW_ISSUE_T76X_3953))
#define hw_issues_t830 (\ BIT_ULL(HW_ISSUE_10883) | \ - BIT_ULL(HW_ISSUE_T76X_3953) | \ - BIT_ULL(HW_ISSUE_TMIX_8438)) + BIT_ULL(HW_ISSUE_T76X_3953))
#define hw_issues_t860 (\ BIT_ULL(HW_ISSUE_10883) | \ - BIT_ULL(HW_ISSUE_T76X_3953) | \ - BIT_ULL(HW_ISSUE_TMIX_8438)) + BIT_ULL(HW_ISSUE_T76X_3953))
#define hw_issues_t880 (\ BIT_ULL(HW_ISSUE_10883) | \ - BIT_ULL(HW_ISSUE_T76X_3953) | \ - BIT_ULL(HW_ISSUE_TMIX_8438)) + BIT_ULL(HW_ISSUE_T76X_3953))
#define hw_issues_g31 0
-#define hw_issues_g31_r1p0 (\ - BIT_ULL(HW_ISSUE_TGOX_R1_1234)) +#define hw_issues_g31_r1p0 0
#define hw_issues_g51 0
#define hw_issues_g52 0
-#define hw_issues_g71 (\ - BIT_ULL(HW_ISSUE_TMIX_8463) | \ - BIT_ULL(HW_ISSUE_TMIX_8438)) +#define hw_issues_g71 0
#define hw_issues_g71_r0p0_05dev0 (\ BIT_ULL(HW_ISSUE_T76X_3953))
On Fri, Aug 9, 2019 at 3:09 PM Alyssa Rosenzweig alyssa.rosenzweig@collabora.com wrote:
While newer kbase include only the numbers of errata, older kbase releases included one-line descriptions for each errata, which is useful for those working on the driver. Import these descriptions. Most are from kbase verbatim; a few I edited for clarity.
v2: Wrote a description for the workaround of an issue whose cause is still unknown (Stephen). Errata which pertain to newer models unsupported by the mainline driver, for which Arm has not yet released errata information, have been removed from the issue list as the kernel need not concern itself with these.
I had scrubbed the issue list to keep just the errata with work-arounds in kbase. I'd rather not have to search this information again because in kbase we have to filter out all the issues which don't affect the kernel side.
Rob
On 09/08/2019 22:09, Alyssa Rosenzweig wrote:
While newer kbase include only the numbers of errata, older kbase releases included one-line descriptions for each errata, which is useful for those working on the driver. Import these descriptions. Most are from kbase verbatim; a few I edited for clarity.
v2: Wrote a description for the workaround of an issue whose cause is still unknown (Stephen). Errata which pertain to newer models
s/Stephen/Steven/
unsupported by the mainline driver, for which Arm has not yet released errata information, have been removed from the issue list as the kernel need not concern itself with these.
I'm not sure it's worth removing the errata that Panfrost doesn't yet support. The Arm release kernel drivers[1] do use these symbols so it is vaguely public what the errata are.
For example HW_ISSUE_TGOX_R1_1234:
if (kbase_hw_has_issue(kbdev, BASE_HW_ISSUE_TGOX_R1_1234)) { if (katom->atom_flags & KBASE_KATOM_FLAG_HOLDING_L2_REF_PROT) { kbase_pm_protected_l2_override(kbdev, false); katom->atom_flags &= ~KBASE_KATOM_FLAG_HOLDING_L2_REF_PROT; } }
It's a workaround for protected mode handling on Mali-G31. Admittedly protected mode is probably not going to be high up on the Panfrost TODO list... :)
Steve
[1] https://developer.arm.com/tools-and-software/graphics-and-gaming/mali-driver...
Signed-off-by: Alyssa Rosenzweig alyssa.rosenzweig@collabora.com
drivers/gpu/drm/panfrost/panfrost_issues.h | 106 +++++++++++++++------ 1 file changed, 78 insertions(+), 28 deletions(-)
diff --git a/drivers/gpu/drm/panfrost/panfrost_issues.h b/drivers/gpu/drm/panfrost/panfrost_issues.h index cec6dcdad..36e503614 100644 --- a/drivers/gpu/drm/panfrost/panfrost_issues.h +++ b/drivers/gpu/drm/panfrost/panfrost_issues.h @@ -13,37 +13,101 @@
- to care about.
*/ enum panfrost_hw_issue {
- /* Need way to guarantee that all previously-translated memory accesses
HW_ISSUE_6367,* are commited */
- /* On job complete with non-done the cache is not flushed */ HW_ISSUE_6787,
- /* Write of PRFCNT_CONFIG_MODE_MANUAL to PRFCNT_CONFIG causes a
HW_ISSUE_8186,* instrumentation dump if PRFCNT_TILER_EN is enabled */
- /* TIB: Reports faults from a vtile which has not yet been allocated */ HW_ISSUE_8245,
- /* uTLB deadlock could occur when writing to an invalid page at the
* same time as access to a valid page in the same uTLB cache line ( ==
HW_ISSUE_8316,* 4 PTEs == 16K block of mapping) */
- /* HT: TERMINATE for RUN command ignored if previous LOAD_DESCRIPTOR is
HW_ISSUE_8394,* still executing */
- /* CSE: Sends a TERMINATED response for a task that should not be
HW_ISSUE_8401,* terminated */
- /* Repeatedly Soft-stopping a job chain consisting of (Vertex Shader,
HW_ISSUE_8408,* Cache Flush, Tiler) jobs causes DATA_INVALID_FAULT on tiler job. */
- /* Disable the Pause Buffer in the LS pipe. */ HW_ISSUE_8443,
- /* Change in RMUs in use causes problems related with the core's SDC */ HW_ISSUE_8987,
- /* Compute endpoint has a 4-deep queue of tasks, meaning a soft stop
HW_ISSUE_9435,* won't complete until all 4 tasks have completed */
- /* HT: Tiler returns TERMINATED for non-terminated command */ HW_ISSUE_9510,
- /* Occasionally the GPU will issue multiple page faults for the same
HW_ISSUE_9630,* address before the MMU page table has been read by the GPU */
- /* RA DCD load request to SDC returns invalid load ignore causing
HW_ISSUE_10327,* colour buffer mismatch */
- /* MMU TLB invalidation hazards */ HW_ISSUE_10649,
- /* Missing cache flush in multi core-group configuration */ HW_ISSUE_10676,
- /* Chicken bit on T72X for a hardware workaround in compiler */ HW_ISSUE_10797,
- /* Soft-stopping fragment jobs might fail with TILE_RANGE_FAULT */ HW_ISSUE_10817,
- /* Intermittent missing interrupt on job completion */ HW_ISSUE_10883,
- /* Soft-stopping fragment jobs might fail with TILE_RANGE_ERROR
HW_ISSUE_10959,* (similar to issue 10817) and can use #10817 workaround */
- /* Soft-stopped fragment shader job can restart with out-of-bound
HW_ISSUE_10969,* restart index */
- /* Race condition can cause tile list corruption */ HW_ISSUE_11020,
- /* Write buffer can cause tile list corruption */ HW_ISSUE_11024,
- /* Pause buffer can cause a fragment job hang */ HW_ISSUE_11035,
- HW_ISSUE_11056,
- /* Clear encoder state for a hard stopped fragment job which is AFBC
* encoded by soft resetting the GPU. Only for T76X r0p0, r0p1 and
HW_ISSUE_T76X_3542,* r0p1_50rel0 */
- /* Keep tiler module clock on to prevent GPU stall */ HW_ISSUE_T76X_3953,
- HW_ISSUE_TMIX_8463,
- /* Don't set SC_LS_ATTR_CHECK_DISABLE/SC_LS_ALLOW_ATTR_TYPES */ GPUCORE_1619,
- HW_ISSUE_TMIX_8438,
- HW_ISSUE_TGOX_R1_1234,
- HW_ISSUE_END
};
@@ -59,9 +123,7 @@ enum panfrost_hw_issue { BIT_ULL(HW_ISSUE_10676) | \ BIT_ULL(HW_ISSUE_10883) | \ BIT_ULL(HW_ISSUE_11020) | \
- BIT_ULL(HW_ISSUE_11035) | \
- BIT_ULL(HW_ISSUE_11056) | \
- BIT_ULL(HW_ISSUE_TMIX_8438))
- BIT_ULL(HW_ISSUE_11035))
#define hw_issues_t600_r0p0_15dev0 (\ BIT_ULL(HW_ISSUE_8186) | \ @@ -78,9 +140,7 @@ enum panfrost_hw_issue { #define hw_issues_t620 (\ BIT_ULL(HW_ISSUE_10649) | \ BIT_ULL(HW_ISSUE_10883) | \
- BIT_ULL(HW_ISSUE_10959) | \
- BIT_ULL(HW_ISSUE_11056) | \
- BIT_ULL(HW_ISSUE_TMIX_8438))
- BIT_ULL(HW_ISSUE_10959))
#define hw_issues_t620_r0p1 (\ BIT_ULL(HW_ISSUE_10327) | \ @@ -97,14 +157,11 @@ enum panfrost_hw_issue { #define hw_issues_t720 (\ BIT_ULL(HW_ISSUE_10649) | \ BIT_ULL(HW_ISSUE_10797) | \
- BIT_ULL(HW_ISSUE_10883) | \
- BIT_ULL(HW_ISSUE_11056) | \
- BIT_ULL(HW_ISSUE_TMIX_8438))
- BIT_ULL(HW_ISSUE_10883))
#define hw_issues_t760 (\ BIT_ULL(HW_ISSUE_10883) | \
- BIT_ULL(HW_ISSUE_T76X_3953) | \
- BIT_ULL(HW_ISSUE_TMIX_8438))
- BIT_ULL(HW_ISSUE_T76X_3953))
#define hw_issues_t760_r0p0 (\ BIT_ULL(HW_ISSUE_11020) | \ @@ -129,36 +186,29 @@ enum panfrost_hw_issue {
#define hw_issues_t820 (\ BIT_ULL(HW_ISSUE_10883) | \
- BIT_ULL(HW_ISSUE_T76X_3953) | \
- BIT_ULL(HW_ISSUE_TMIX_8438))
- BIT_ULL(HW_ISSUE_T76X_3953))
#define hw_issues_t830 (\ BIT_ULL(HW_ISSUE_10883) | \
- BIT_ULL(HW_ISSUE_T76X_3953) | \
- BIT_ULL(HW_ISSUE_TMIX_8438))
- BIT_ULL(HW_ISSUE_T76X_3953))
#define hw_issues_t860 (\ BIT_ULL(HW_ISSUE_10883) | \
- BIT_ULL(HW_ISSUE_T76X_3953) | \
- BIT_ULL(HW_ISSUE_TMIX_8438))
- BIT_ULL(HW_ISSUE_T76X_3953))
#define hw_issues_t880 (\ BIT_ULL(HW_ISSUE_10883) | \
- BIT_ULL(HW_ISSUE_T76X_3953) | \
- BIT_ULL(HW_ISSUE_TMIX_8438))
- BIT_ULL(HW_ISSUE_T76X_3953))
#define hw_issues_g31 0
-#define hw_issues_g31_r1p0 (\
- BIT_ULL(HW_ISSUE_TGOX_R1_1234))
+#define hw_issues_g31_r1p0 0
#define hw_issues_g51 0
#define hw_issues_g52 0
-#define hw_issues_g71 (\
- BIT_ULL(HW_ISSUE_TMIX_8463) | \
- BIT_ULL(HW_ISSUE_TMIX_8438))
+#define hw_issues_g71 0
#define hw_issues_g71_r0p0_05dev0 (\ BIT_ULL(HW_ISSUE_T76X_3953))
dri-devel@lists.freedesktop.org