drm/amdgpu: Fix discovery initialization failure during pci rescan
authorMa Jun <Jun.Ma2@amd.com>
Tue, 2 Apr 2024 09:21:01 +0000 (17:21 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 17 Apr 2024 02:39:15 +0000 (22:39 -0400)
Waiting for system ready to fix the discovery initialization
failure issue. This failure usually occurs when dGPU is removed
and then rescanned via command line.
It's caused by following two errors:
[1] vram size is 0
[2] wrong binary signature

Signed-off-by: Ma Jun <Jun.Ma2@amd.com>
Acked-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c

index 07c5fca0617805b2278b17dce57ba7a18813babf..90735e966318988c1067a360b05c267ba4ae1135 100644 (file)
@@ -255,7 +255,6 @@ static int amdgpu_discovery_read_binary_from_mem(struct amdgpu_device *adev,
        uint64_t vram_size;
        u32 msg;
        int i, ret = 0;
-       int ip_discovery_ver = 0;
 
        /* It can take up to a second for IFWI init to complete on some dGPUs,
         * but generally it should be in the 60-100ms range.  Normally this starts
@@ -265,17 +264,13 @@ static int amdgpu_discovery_read_binary_from_mem(struct amdgpu_device *adev,
         * continue.
         */
 
-       ip_discovery_ver = RREG32(mmIP_DISCOVERY_VERSION);
-       if ((dev_is_removable(&adev->pdev->dev)) ||
-           (ip_discovery_ver == IP_DISCOVERY_V2) ||
-           (ip_discovery_ver == IP_DISCOVERY_V4)) {
-               for (i = 0; i < 1000; i++) {
-                       msg = RREG32(mmMP0_SMN_C2PMSG_33);
-                       if (msg & 0x80000000)
-                               break;
-                       msleep(1);
-               }
+       for (i = 0; i < 1000; i++) {
+               msg = RREG32(mmMP0_SMN_C2PMSG_33);
+               if (msg & 0x80000000)
+                       break;
+               usleep_range(1000, 1100);
        }
+
        vram_size = (uint64_t)RREG32(mmRCC_CONFIG_MEMSIZE) << 20;
 
        if (vram_size) {
This page took 0.095396 seconds and 4 git commands to generate.