FAILED: Patch "drm/amd/display: adjust few initialization order in dm" failed to apply to 6.1-stable tree
Sasha Levin
maintainerThe patch below does not apply to the 6.1-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
Thanks,
Sasha
------------------ original commit in Linus's tree ------------------
From c9aef4f6c6d7cdc92a64ffe761c6921ec85157ae Mon Sep 17 00:00:00 2001
From: Wayne Lin <[email protected]>
Date: Fri, 2 Feb 2024 17:34:11 +0800
Subject: [PATCH] drm/amd/display: adjust few initialization order in dm
[Why]
Observe error message "Can't retrieve aconnector in hpd_rx_irq_offload_work" when boot up with a mst tbt4 dock connected. After analyzing, there are few parts needed to be adjusted:
1. hpd_rx_offload_wq[].aconnector is not initialzed before the dmub outbox hpd_irq handler get registered which causes the error message.
2. registeration of hpd and hpd_rx_irq event for usb4 dp tunneling is not aligned with legacy interface sequence
[How]
Put DMUB_NOTIFICATION_HPD and DMUB_NOTIFICATION_HPD_IRQ handler registration into register_hpd_handlers() to align other interfaces and get hpd_rx_offload_wq[].aconnector initialized earlier than that.
Leave DMUB_NOTIFICATION_AUX_REPLY registered as it was since we need that while calling dc_link_detect(). USB4 connection status will be proactively detected by dc_link_detect_connection_type() in amdgpu_dm_initialize_drm_device()
--- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 37 +++++++++---------- 1 file changed, 18 insertions(+), 19 deletions(-)
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +18 -19
@@ -1844,21 +1844,12 @@ static int amdgpu_dm_init(struct amdgpu_device *adev)DRM_ERROR ("amdgpu: fail to register dmub aux callback" ); goto error; } -if (!register_dmub_notify_callback (adev,DMUB_NOTIFICATION_HPD , dmub_hpd_callback, true)) { -DRM_ERROR ("amdgpu: fail to register dmub hpd callback" ); - goto error; - } -if (!register_dmub_notify_callback (adev,DMUB_NOTIFICATION_HPD_IRQ , dmub_hpd_callback, true)) { -DRM_ERROR ("amdgpu: fail to register dmub hpd callback" ); - 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. -*/ -if (dc_is_dmub_outbox_supported (adev->dm.dc)) { +/* 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. Note +* that hpd and hpd_irq handler registration are deferred to register_hpd_handlers() to +* align legacy interface initialization sequence. Connection status will be proactivly +* detected once in the amdgpu_dm_initialize_drm_device. +*/ dc_enable_dmub_outbox (adev->dm.dc);/* DPIA trace goes to dmesg logs only if outbox is enabled */
@@ -3547,6 +3538,14 @@ static void register_hpd_handlers(struct amdgpu_device *adev) int_params.requested_polarity =INTERRUPT_POLARITY_DEFAULT ; int_params.current_polarity =INTERRUPT_POLARITY_DEFAULT ; +if (dc_is_dmub_outbox_supported (adev->dm.dc)) { +if (!register_dmub_notify_callback (adev,DMUB_NOTIFICATION_HPD , dmub_hpd_callback, true)) +DRM_ERROR ("amdgpu: fail to register dmub hpd callback" ); + +if (!register_dmub_notify_callback (adev,DMUB_NOTIFICATION_HPD_IRQ , dmub_hpd_callback, true)) +DRM_ERROR ("amdgpu: fail to register dmub hpd callback" ); + } +list_for_each_entry (connector, &dev->mode_config.connector_list, head) {
@@ -3575,10 +3574,6 @@ static void register_hpd_handlers(struct amdgpu_device *adev) handle_hpd_rx_irq, (void *) aconnector); } - -if (adev->dm.hpd_rx_offload_wq) - adev->dm.hpd_rx_offload_wq[connector->index].aconnector = - aconnector; } }
@@ -4590,6 +4585,10 @@ static int amdgpu_dm_initialize_drm_device(struct amdgpu_device *adev) goto fail; } +if (dm->hpd_rx_offload_wq) + dm->hpd_rx_offload_wq[aconnector->base.index].aconnector = + aconnector; +if (!dc_link_detect_connection_type (link, &new_connection_type))DRM_ERROR ("KMS: Failed to detect connector\n" );
Signature · 1 line
2.43.0