OSDN Git Service

drm/amdgpu:Remove sdma halt/unhalt during frontdoor load
authorMangesh Gadre <Mangesh.Gadre@amd.com>
Wed, 21 Jun 2023 08:55:05 +0000 (16:55 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 30 Jun 2023 17:11:35 +0000 (13:11 -0400)
sdma halt/unhalt is performed by psp when frontdoor
loading used,so this can be skipped.

v2: Instead of removing halt/unhalt completely,
    driver will do it only during backdoor load.

Signed-off-by: Mangesh Gadre <Mangesh.Gadre@amd.com>
Reviewed-by: Lijo Lazar <lijo.lazar@amd.com>
Reviewed-by: Asad Kamal <asad.kamal@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/sdma_v4_4_2.c

index ea5e123..6be19ff 100644 (file)
@@ -578,6 +578,9 @@ static void sdma_v4_4_2_inst_enable(struct amdgpu_device *adev, bool enable,
                        return;
        }
 
+       if (adev->firmware.load_type == AMDGPU_FW_LOAD_PSP)
+               return;
+
        for_each_inst(i, inst_mask) {
                f32_cntl = RREG32_SDMA(i, regSDMA_F32_CNTL);
                f32_cntl = REG_SET_FIELD(f32_cntl, SDMA_F32_CNTL, HALT, enable ? 0 : 1);
@@ -904,10 +907,12 @@ static int sdma_v4_4_2_inst_start(struct amdgpu_device *adev,
                                ring->use_doorbell, ring->doorbell_index,
                                adev->doorbell_index.sdma_doorbell_range);
 
-                       /* unhalt engine */
-                       temp = RREG32_SDMA(i, regSDMA_F32_CNTL);
-                       temp = REG_SET_FIELD(temp, SDMA_F32_CNTL, HALT, 0);
-                       WREG32_SDMA(i, regSDMA_F32_CNTL, temp);
+                       if (adev->firmware.load_type != AMDGPU_FW_LOAD_PSP) {
+                               /* unhalt engine */
+                               temp = RREG32_SDMA(i, regSDMA_F32_CNTL);
+                               temp = REG_SET_FIELD(temp, SDMA_F32_CNTL, HALT, 0);
+                               WREG32_SDMA(i, regSDMA_F32_CNTL, temp);
+                       }
                }
        }