drm/amd: Move microcode init from sw_init to early_init for CIK SDMA
authorMario Limonciello <mario.limonciello@amd.com>
Mon, 25 Sep 2023 19:02:22 +0000 (14:02 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 28 Sep 2023 19:38:17 +0000 (15:38 -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/cik_sdma.c

index 4193289ae82f54de96750ad3606a1b231380fe7d..ee5dce6f604369956845211aecde7574e874f26c 100644 (file)
@@ -925,9 +925,14 @@ static void cik_enable_sdma_mgls(struct amdgpu_device *adev,
 static int cik_sdma_early_init(void *handle)
 {
        struct amdgpu_device *adev = (struct amdgpu_device *)handle;
+       int r;
 
        adev->sdma.num_instances = SDMA_MAX_INSTANCE;
 
+       r = cik_sdma_init_microcode(adev);
+       if (r)
+               return r;
+
        cik_sdma_set_ring_funcs(adev);
        cik_sdma_set_irq_funcs(adev);
        cik_sdma_set_buffer_funcs(adev);
@@ -942,10 +947,6 @@ static int cik_sdma_sw_init(void *handle)
        struct amdgpu_device *adev = (struct amdgpu_device *)handle;
        int r, i;
 
-       r = cik_sdma_init_microcode(adev);
-       if (r)
-               return r;
-
        /* SDMA trap event */
        r = amdgpu_irq_add_id(adev, AMDGPU_IRQ_CLIENTID_LEGACY, 224,
                              &adev->sdma.trap_irq);