aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKonrad Dybcio <[email protected]>2023-09-25 16:50:39 +0200
committerRob Clark <[email protected]>2023-10-09 11:22:05 -0700
commitb77532803d11f2b03efab2ebfd8c0061cd7f8b30 (patch)
tree377bf449adfaba6817c71d1c52efa678a7940134
parent1f8c29e800661d522e3a6487c5435de28e44fd29 (diff)
drm/msm/a6xx: Poll for GBIF unhalt status in hw_init
Some GPUs - particularly A7xx ones - are really really stubborn and sometimes take a longer-than-expected time to finish unhalting GBIF. Note that this is not caused by the request a few lines above. Poll for the unhalt ack to make sure we're not trying to write bits to an essentially dead GPU that can't receive data on its end of the bus. Failing to do this will result in inexplicable GMU timeouts or worse. This is a rather ugly hack which introduces a whole lot of latency. Tested-by: Neil Armstrong <[email protected]> # on SM8550-QRD Tested-by: Dmitry Baryshkov <[email protected]> # sm8450 Signed-off-by: Konrad Dybcio <[email protected]> Patchwork: https://patchwork.freedesktop.org/patch/559292/ Signed-off-by: Rob Clark <[email protected]>
-rw-r--r--drivers/gpu/drm/msm/adreno/a6xx_gpu.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c
index 2313620084b6..11cb410e0ac7 100644
--- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c
+++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c
@@ -1629,6 +1629,10 @@ static int hw_init(struct msm_gpu *gpu)
mb();
}
+ /* Some GPUs are stubborn and take their sweet time to unhalt GBIF! */
+ if (adreno_is_a7xx(adreno_gpu) && a6xx_has_gbif(adreno_gpu))
+ spin_until(!gpu_read(gpu, REG_A6XX_GBIF_HALT_ACK));
+
gpu_write(gpu, REG_A6XX_RBBM_SECVID_TSB_CNTL, 0);
if (adreno_is_a619_holi(adreno_gpu))