I'd suggest you create umc function to apply these workaround to VG10 only if 
we are not sure this is a common hw bugs. You can refer to amdgpu_umc_funcs for 
creating umc callback functions.

In addition, normally umc per channel registers will have constant offset, like 
0x200 for vg10. You can leverage this to simplify the logic in the umc callback 
function.

Regards,
Hawking

-----Original Message-----
From: amd-gfx <[email protected]> On Behalf Of Zhang, 
Hawking
Sent: 2019年9月24日 13:44
To: Liu, Monk <[email protected]>; [email protected]
Cc: Liu, Monk <[email protected]>
Subject: RE: [PATCH] drm/amdgpu: fix an UMC hw arbitrator bug

The patch is in high risk to break other VG series and MI series. Any 
confidence this is a common hw bug across all UMC 6.x generations? 

Regards,
Hawking

-----Original Message-----
From: amd-gfx <[email protected]> On Behalf Of Monk Liu
Sent: 2019年9月24日 11:39
To: [email protected]
Cc: Liu, Monk <[email protected]>
Subject: [PATCH] drm/amdgpu: fix an UMC hw arbitrator bug

issue:
the UMC h/w bug is that when MCLK is doing the switch in the middle of a page 
access being preempted by high priority client (e.g. DISPLAY) then UMC and the 
mclk switch would stuck there due to deadlock

how:
fixed by disabling auto PreChg for UMC to avoid high priority client preempting 
other client's access on the same page, thus the deadlock could be avoided

Signed-off-by: Monk Liu <[email protected]>
Change-Id: Iaf6eb2a20a4785ec8440e64d5e0cae67aa0603da
---
 drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c 
b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
index 6102dea..8271b0c 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
@@ -1306,6 +1306,24 @@ static int gmc_v9_0_gart_enable(struct amdgpu_device 
*adev)
                 (unsigned)(adev->gmc.gart_size >> 20),
                 (unsigned long long)amdgpu_bo_gpu_offset(adev->gart.bo));
        adev->gart.ready = true;
+
+       /* disable auto Pchg is a w/a for the vega10 UMC hardware bug */
+       WREG32(0x5010c/4, 0x1002);
+       WREG32(0x5210c/4, 0x1002);
+       WREG32(0x5410c/4, 0x1002);
+       WREG32(0x5610c/4, 0x1002);
+       WREG32(0x15010c/4, 0x1002);
+       WREG32(0x15210c/4, 0x1002);
+       WREG32(0x15410c/4, 0x1002);
+       WREG32(0x15610c/4, 0x1002);
+       WREG32(0x25010c/4, 0x1002);
+       WREG32(0x25210c/4, 0x1002);
+       WREG32(0x25410c/4, 0x1002);
+       WREG32(0x25610c/4, 0x1002);
+       WREG32(0x35010c/4, 0x1002);
+       WREG32(0x35210c/4, 0x1002);
+       WREG32(0x35410c/4, 0x1002);
+       WREG32(0x35610c/4, 0x1002);
        return 0;
 }
 
--
2.7.4

_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to