[SRU][OEM-5.14/J][PATCH 3/4] drm/amd/display: Fix new dmub notification enabling in DM
Limonciello, Mario
mario.limonciello at amd.com
Mon Aug 1 15:50:10 UTC 2022
On 8/1/2022 09:52, Stefan Bader wrote:
> On 01.08.22 15:21, Mario Limonciello wrote:
>> On 8/1/22 07:48, Stefan Bader wrote:
>>> 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)
>>
>> Right - so I guess you can potentially have
>> 6eff272dbee7ad444c491c9a96d49e78e91e2161 in the series too, but since this went
>> out of order due to the stable commit that might not really make sense.
>>
>> LMK what you would like done (if anything).
>
> Right now it is hard to tell whether dropping that hunk is intentional or not.
> It was added in that patch together with the hunk about re-enabling things which
> you do drop. So compared to the upstream patch the backport appears unbalanced.
>
>>
>> I would do a fixup to @stable for you to just pickup, but this use case for USB4
>> DP tunneling only matters for Jammy-5.15 not 5.15.y since Jammy-5.15 has all the
>> USB4 commits for DPIA handling and 5.15.y doesn't.
>
> Hm, that is probably what you are saying here. That together with all the other
> backports we have that hunk should remain where it is and just the other
> addition needs to be moved?
>
Yup.
> -Stefan
>>
>>>
>>>> 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);
>>>
>>
>
More information about the kernel-team
mailing list