]> xenbits.xensource.com Git - people/pauldu/linux.git/commitdiff
drm/amd: Move microcode init from sw_init to early_init for SDMA v5.2
authorMario Limonciello <mario.limonciello@amd.com>
Mon, 25 Sep 2023 19:01:50 +0000 (14:01 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 28 Sep 2023 19:37:50 +0000 (15:37 -0400)
As part of IP discovery early_init is run for all HW IP blocks.
During this phase all firmware is supposed to be identified that may
be missing so that the driver can avoid releasing resources used by
the EFI framebuffer or simpledrm until the last possible moment.

Move microcode loading from sw_init to early_init.

Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c

index 86661f9653fa7a1802b167c6c5c54b8b7256ab33..7d1e57189c8c69689f444b3088285c6946aea711 100644 (file)
@@ -1172,6 +1172,11 @@ static void sdma_v5_2_ring_emit_reg_write_reg_wait(struct amdgpu_ring *ring,
 static int sdma_v5_2_early_init(void *handle)
 {
        struct amdgpu_device *adev = (struct amdgpu_device *)handle;
+       int r;
+
+       r = amdgpu_sdma_init_microcode(adev, 0, true);
+       if (r)
+               return r;
 
        sdma_v5_2_set_ring_funcs(adev);
        sdma_v5_2_set_buffer_funcs(adev);
@@ -1231,10 +1236,6 @@ static int sdma_v5_2_sw_init(void *handle)
                        return r;
        }
 
-       r = amdgpu_sdma_init_microcode(adev, 0, true);
-       if (r)
-               return r;
-
        for (i = 0; i < adev->sdma.num_instances; i++) {
                ring = &adev->sdma.instance[i].ring;
                ring->ring_obj = NULL;