[SRU][OEM-5.14/J][PATCH 3/4] drm/amd/display: Fix new dmub notification enabling in DM

Stefan Bader stefan.bader at canonical.com
Mon Aug 1 12:48:49 UTC 2022


On 29.07.22 20:57, Mario Limonciello wrote:
> From: Stylon Wang <stylon.wang at amd.com>
> 
> BugLink: https://bugs.launchpad.net/bugs/1983143
> 
> [Why]
> Changes from "Fix for dmub outbox notification enable" need to land
> in DM or DMUB outbox notification would be disabled.
> 
> [How]
> Enable outbox notification only after interrupt are enabled and IRQ
> handlers registered. Any pending notification will be sent by DMUB
> once outbox notification is enabled.
> 
> Fixes: ed7208706448 ("drm/amd/display: Fix for dmub outbox notification enable")
> Reviewed-by: Nicholas Kazlauskas <Nicholas.Kazlauskas at amd.com>
> Acked-by: Solomon Chiu <solomon.chiu at amd.com>
> Signed-off-by: Stylon Wang <stylon.wang at amd.com>
> Acked-by: Harry Wentland <harry.wentland at amd.com>
> Signed-off-by: Alex Deucher <alexander.deucher at amd.com>
> Cc: stable at vger.kernel.org
> (cherry picked from commit 2d4bd81fea1ad6ebba543bd6da3ef5179d130e6a; minor fixups for missing 32685b32d825c and 6d63fcc2a334f)

Looking closer into that I believe this would only be a backport xxx
[minor context adjustments]

if it were complete. But it seems to have dropped hunk #3 of the original patch 
(details below)

> Signed-off-by: Mario Limonciello <mario.limonciello at amd.com>
> ---
>   .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 24 +++++++++++++++----
>   1 file changed, 19 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> index 785db0708c95..25357128122f 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> @@ -1443,7 +1443,7 @@ static int amdgpu_dm_init(struct amdgpu_device *adev)
>   #if defined(CONFIG_DRM_AMD_SECURE_DISPLAY)
>   	adev->dm.crc_rd_wrk = amdgpu_dm_crtc_secure_display_create_work();
>   #endif
> -	if (dc_enable_dmub_notifications(adev->dm.dc)) {
> +	if (dc_is_dmub_outbox_supported(adev->dm.dc)) {
>   		init_completion(&adev->dm.dmub_aux_transfer_done);
>   		adev->dm.dmub_notify = kzalloc(sizeof(struct dmub_notification), GFP_KERNEL);
>   		if (!adev->dm.dmub_notify) {
> @@ -1481,6 +1481,13 @@ static int amdgpu_dm_init(struct amdgpu_device *adev)
>   		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))
> +		dc_enable_dmub_outbox(adev->dm.dc);
> +
>   	/* create fake encoders for MST */
>   	dm_dp_create_fake_mst_encoders(adev);
>  

Original patch has:
@ -2678,9 +2685,6 @@ static int dm_resume(void *handle)
                  */
                 link_enc_cfg_copy(adev->dm.dc->current_state, dc_state);

-               if (dc_enable_dmub_notifications(adev->dm.dc))
-                       amdgpu_dm_outbox_init(adev);
-
                 r = dm_dmub_hw_init(adev);
                 if (r)
                         DRM_ERROR("DMUB interface failed to initialize: 
status=%d\n", r);

and at least in Jammy there is:

         if (amdgpu_in_reset(adev)) {
                   dc_state = dm->cached_dc_state;

                   if (dc_enable_dmub_notifications(adev->dm.dc))
                           amdgpu_dm_outbox_init(adev);

                   r = dm_dmub_hw_init(adev);
                   if (r)
                           DRM_ERROR("DMUB interface failed to initialize: 
status=%d\n", r);

which got there via stable:

"drm/amd/display: Fix DPIA outbox timeout after S3/S4/reset"
commit af6902ec415655236adea91826bd96ed0ab16f42 upstream.

-Stefan

> @@ -2455,6 +2462,11 @@ static int dm_resume(void *handle)
>   		WARN_ON(dc_validate_global_state(dm->dc, dc_state, false) != DC_OK);
>   #endif
>   
> +		if (dc_is_dmub_outbox_supported(adev->dm.dc)) {
> +			amdgpu_dm_outbox_init(adev);
> +			dc_enable_dmub_outbox(adev->dm.dc);
> +		}
> +
>   		WARN_ON(!dc_commit_state(dm->dc, dc_state));
>   
>   		dm_gpureset_commit_state(dm->cached_dc_state, dm);
> @@ -2476,13 +2488,15 @@ static int dm_resume(void *handle)
>   	/* TODO: Remove dc_state->dccg, use dc->dccg directly. */
>   	dc_resource_state_construct(dm->dc, dm_state->context);
>   
> -	/* Re-enable outbox interrupts for DPIA. */
> -	if (dc_enable_dmub_notifications(adev->dm.dc))
> -		amdgpu_dm_outbox_init(adev);
> -
>   	/* Before powering on DC we need to re-initialize DMUB. */
>   	dm_dmub_hw_resume(adev);
>   
> +	/* Re-enable outbox interrupts for DPIA. */
> +	if (dc_is_dmub_outbox_supported(adev->dm.dc)) {
> +		amdgpu_dm_outbox_init(adev);
> +		dc_enable_dmub_outbox(adev->dm.dc);
> +	}
> +
>   	/* power on hardware */
>   	dc_set_power_state(dm->dc, DC_ACPI_CM_POWER_STATE_D0);
>   

-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <https://lists.ubuntu.com/archives/kernel-team/attachments/20220801/ed5045fe/attachment.sig>


More information about the kernel-team mailing list