drm/amd/display: Fix access timeout to DPIA AUX at boot time
authorStylon Wang <stylon.wang@amd.com>
Mon, 24 Oct 2022 07:36:16 +0000 (15:36 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 15 Nov 2022 18:05:43 +0000 (13:05 -0500)
[Why]
Since introduction of patch "Query DPIA HPD status.", link detection at
boot could be accessing DPIA AUX, which will not succeed until
DMUB outbox messaging is enabled and results in below dmesg logs:

[  160.840227] [drm:amdgpu_dm_process_dmub_aux_transfer_sync [amdgpu]] *ERROR* wait_for_completion_timeout timeout!

[How]
Enable DMUB outbox messaging before link detection at boot time.

Reviewed-by: Wayne Lin <Wayne.Lin@amd.com>
Acked-by: Tom Chung <chiahsuan.chung@amd.com>
Signed-off-by: Stylon Wang <stylon.wang@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org # 6.0.x
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c

index 509739d83b5afb4c3945c226efa668963681c1a1..5a2faa8927485d6f30e292539ba7dd44f74f9f95 100644 (file)
@@ -1637,12 +1637,6 @@ static int amdgpu_dm_init(struct amdgpu_device *adev)
                }
        }
 
-       if (amdgpu_dm_initialize_drm_device(adev)) {
-               DRM_ERROR(
-               "amdgpu: failed to initialize sw for display support.\n");
-               goto error;
-       }
-
        /* Enable outbox notification only after IRQ handlers are registered and DMUB is alive.
         * It is expected that DMUB will resend any pending notifications at this point, for
         * example HPD from DPIA.
@@ -1650,6 +1644,12 @@ static int amdgpu_dm_init(struct amdgpu_device *adev)
        if (dc_is_dmub_outbox_supported(adev->dm.dc))
                dc_enable_dmub_outbox(adev->dm.dc);
 
+       if (amdgpu_dm_initialize_drm_device(adev)) {
+               DRM_ERROR(
+               "amdgpu: failed to initialize sw for display support.\n");
+               goto error;
+       }
+
        /* create fake encoders for MST */
        dm_dp_create_fake_mst_encoders(adev);